Skip to content

Commit 75de792

Browse files
committed
Updated baseURL to end in 0.08. Corrected Dropdown component.
1 parent 90293ee commit 75de792

File tree

3 files changed

+65
-44
lines changed

3 files changed

+65
-44
lines changed

zephyrcore/zephyr.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* and data binding capabilities.
44
*/
55
export default class ZephyrJS extends HTMLElement {
6-
static baseUrl = 'https://cdn.jsdelivr.net/gh/RPDevJesco/ZephyrJS@0.07';
6+
static baseUrl = 'https://cdn.jsdelivr.net/gh/RPDevJesco/ZephyrJS@0.08';
77

88
static setBaseUrl(url) {
99
ZephyrJS.baseUrl = url.endsWith('/') ? url : url + '/';

zephyrtemplates/Dropdown.js

Lines changed: 58 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ export default class Dropdown extends ZephyrJS {
1010
this.state = {
1111
options: [],
1212
selectedOption: null,
13+
isOpen: false,
1314
placeholder: 'Select an option'
1415
};
16+
console.log('Dropdown constructor called');
1517
}
1618

1719
async connectedCallback() {
@@ -24,9 +26,22 @@ export default class Dropdown extends ZephyrJS {
2426
await this.renderAndAddListeners();
2527
}
2628

29+
setState(newState) {
30+
super.setState(newState);
31+
this.render();
32+
}
33+
2734
setOptions(options) {
2835
this.setState({ options });
29-
this.renderAndAddListeners();
36+
}
37+
38+
toggleDropdown() {
39+
this.setState({ isOpen: !this.state.isOpen });
40+
}
41+
42+
selectOption(option) {
43+
this.setState({ selectedOption: option, isOpen: false });
44+
this.dispatchCustomEvent('optionSelected', { option });
3045
}
3146

3247
async renderAndAddListeners() {
@@ -40,58 +55,68 @@ export default class Dropdown extends ZephyrJS {
4055
return;
4156
}
4257

43-
let select = this.shadowRoot.querySelector('select');
44-
if (!select) {
58+
let dropdownContainer = this.shadowRoot.querySelector('.dropdown-container');
59+
if (!dropdownContainer) {
4560
if (this.template && this.template.content) {
4661
const templateContent = this.template.content.cloneNode(true);
4762
this.shadowRoot.appendChild(templateContent);
48-
select = this.shadowRoot.querySelector('select');
63+
dropdownContainer = this.shadowRoot.querySelector('.dropdown-container');
4964
} else {
5065
console.error('Template content not available');
5166
return;
5267
}
5368
}
5469

55-
if (!select) {
56-
console.error('Select element still not found after inserting template');
57-
console.log('Shadow root content:', this.shadowRoot.innerHTML);
70+
if (!dropdownContainer) {
71+
console.error('Dropdown container still not found after inserting template');
5872
return;
5973
}
6074

61-
// Clear existing options
62-
select.innerHTML = '';
63-
64-
// Add placeholder option if needed
65-
if (this.state.placeholder) {
66-
const placeholderOption = document.createElement('option');
67-
placeholderOption.value = '';
68-
placeholderOption.textContent = this.state.placeholder;
69-
placeholderOption.disabled = true;
70-
placeholderOption.selected = !this.state.selectedOption;
71-
select.appendChild(placeholderOption);
72-
}
75+
const dropdownToggle = dropdownContainer.querySelector('.dropdown-toggle');
76+
const dropdownOptions = dropdownContainer.querySelector('.dropdown-options');
7377

74-
// Add options
75-
this.state.options.forEach(option => {
76-
const optionElement = document.createElement('option');
77-
optionElement.value = option.value;
78-
optionElement.textContent = option.label;
79-
optionElement.selected = option.value === this.state.selectedOption;
80-
select.appendChild(optionElement);
81-
});
78+
const selectedOption = this.state.options.find(opt => opt.value === this.state.selectedOption);
79+
dropdownToggle.textContent = selectedOption ? selectedOption.label : this.state.placeholder;
80+
81+
dropdownOptions.innerHTML = this.state.options.map(option => `
82+
<li class="dropdown-option" data-value="${option.value}">${option.label}</li>
83+
`).join('');
84+
85+
dropdownOptions.style.display = this.state.isOpen ? 'block' : 'none';
86+
// Set background color using CSS variable
87+
dropdownOptions.style.backgroundColor = 'var(--primary-color)';
8288
}
8389

8490
addEventListeners() {
85-
const select = this.shadowRoot.querySelector('select');
91+
const dropdownToggle = this.shadowRoot.querySelector('.dropdown-toggle');
92+
const optionsList = this.shadowRoot.querySelector('.dropdown-options');
93+
94+
if (dropdownToggle) {
95+
dropdownToggle.addEventListener('click', (e) => {
96+
e.stopPropagation();
97+
this.toggleDropdown();
98+
});
99+
} else {
100+
console.error('Dropdown toggle not found');
101+
}
86102

87-
if (select) {
88-
select.addEventListener('change', (e) => {
89-
this.state.selectedOption = e.target.value;
90-
this.dispatchCustomEvent('optionSelected', { option: this.state.selectedOption });
103+
if (optionsList) {
104+
optionsList.addEventListener('click', (e) => {
105+
if (e.target.classList.contains('dropdown-option')) {
106+
const selectedValue = e.target.dataset.value;
107+
this.selectOption(selectedValue);
108+
}
91109
});
92110
} else {
93-
console.error('Select element not found');
111+
console.error('Options list not found');
94112
}
113+
114+
// Close dropdown when clicking outside
115+
document.addEventListener('click', () => {
116+
if (this.state.isOpen) {
117+
this.setState({ isOpen: false });
118+
}
119+
});
95120
}
96121

97122
disconnectedCallback() {

zephyrtemplates/templates/dropdown.html

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,23 @@
66
.dropdown-container {
77
position: relative;
88
width: 200px;
9-
font-family: Arial, sans-serif;
9+
font-family: var(--font-family-monospace), sans-serif;
1010
}
1111
.dropdown-toggle {
1212
padding: 10px;
13-
border: 1px solid var(--neutral-color);
14-
background-color: var(--background-color);
15-
color: var(--dark-text, #333);
13+
border: 1px solid var(--primary-color);
14+
background-color: black; /* Set the background color to black */
15+
color: var(--light-text); /* Ensure the text is visible on black background */
1616
cursor: pointer;
1717
user-select: none;
1818
}
1919
.dropdown-options {
20-
display: none;
2120
position: absolute;
2221
top: 100%;
2322
left: 0;
2423
right: 0;
25-
background-color: var(--background-color);
2624
border: 1px solid var(--neutral-color);
25+
color: var(--light-text);
2726
border-top: none;
2827
list-style-type: none;
2928
padding: 0;
@@ -32,15 +31,12 @@
3231
overflow-y: auto;
3332
z-index: 1000;
3433
}
35-
.dropdown-options.open {
36-
display: block;
37-
}
3834
.dropdown-option {
3935
padding: 10px;
4036
cursor: pointer;
4137
}
4238
.dropdown-option:hover {
43-
background-color: var(--secondary-color);
39+
background-color: var(--button-hover-bg);
4440
}
4541
</style>
4642
<div class="dropdown-container">

0 commit comments

Comments
 (0)