shadcn_phlexcomponents 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/app/javascript/controllers/accordion_controller.js +90 -100
  3. data/app/javascript/controllers/alert_dialog_controller.js +4 -4
  4. data/app/javascript/controllers/avatar_controller.js +11 -11
  5. data/app/javascript/controllers/checkbox_controller.js +26 -25
  6. data/app/javascript/controllers/collapsible_controller.js +36 -34
  7. data/app/javascript/controllers/combobox_controller.js +231 -262
  8. data/app/javascript/controllers/command_controller.js +184 -204
  9. data/app/javascript/controllers/date_picker_controller.js +257 -240
  10. data/app/javascript/controllers/date_range_picker_controller.js +200 -188
  11. data/app/javascript/controllers/dialog_controller.js +78 -78
  12. data/app/javascript/controllers/dropdown_menu_controller.js +208 -228
  13. data/app/javascript/controllers/dropdown_menu_sub_controller.js +97 -110
  14. data/app/javascript/controllers/form_field_controller.js +16 -16
  15. data/app/javascript/controllers/hover_card_controller.js +71 -68
  16. data/app/javascript/controllers/loading_button_controller.js +10 -10
  17. data/app/javascript/controllers/popover_controller.js +78 -84
  18. data/app/javascript/controllers/progress_controller.js +11 -11
  19. data/app/javascript/controllers/radio_group_controller.js +74 -74
  20. data/app/javascript/controllers/select_controller.js +232 -246
  21. data/app/javascript/controllers/sidebar_controller.js +27 -26
  22. data/app/javascript/controllers/sidebar_trigger_controller.js +9 -12
  23. data/app/javascript/controllers/slider_controller.js +74 -73
  24. data/app/javascript/controllers/switch_controller.js +23 -22
  25. data/app/javascript/controllers/tabs_controller.js +61 -60
  26. data/app/javascript/controllers/theme_switcher_controller.js +27 -27
  27. data/app/javascript/controllers/toast_container_controller.js +31 -44
  28. data/app/javascript/controllers/toast_controller.js +18 -18
  29. data/app/javascript/controllers/toggle_controller.js +17 -16
  30. data/app/javascript/controllers/toggle_group_controller.js +17 -16
  31. data/app/javascript/controllers/tooltip_controller.js +77 -74
  32. data/app/javascript/shadcn_phlexcomponents.js +58 -58
  33. data/app/javascript/utils/command.js +334 -392
  34. data/app/javascript/utils/floating_ui.js +108 -147
  35. data/app/javascript/utils/index.js +190 -253
  36. data/app/stylesheets/date_picker.css +1 -1
  37. data/app/stylesheets/shadcn_phlexcomponents.css +173 -0
  38. data/app/typescript/controllers/combobox_controller.ts +0 -1
  39. data/app/typescript/controllers/date_picker_controller.ts +25 -7
  40. data/app/typescript/controllers/tooltip_controller.ts +1 -1
  41. data/app/typescript/utils/command.ts +0 -2
  42. data/app/typescript/utils/floating_ui.ts +11 -20
  43. data/app/typescript/utils/index.ts +0 -7
  44. data/lib/shadcn_phlexcomponents/components/accordion.rb +1 -1
  45. data/lib/shadcn_phlexcomponents/components/alert_dialog.rb +6 -6
  46. data/lib/shadcn_phlexcomponents/components/base.rb +2 -2
  47. data/lib/shadcn_phlexcomponents/components/combobox.rb +13 -13
  48. data/lib/shadcn_phlexcomponents/components/command.rb +13 -13
  49. data/lib/shadcn_phlexcomponents/components/date_picker.rb +18 -12
  50. data/lib/shadcn_phlexcomponents/components/date_range_picker.rb +7 -3
  51. data/lib/shadcn_phlexcomponents/components/dialog.rb +6 -6
  52. data/lib/shadcn_phlexcomponents/components/sheet.rb +7 -7
  53. data/lib/shadcn_phlexcomponents/components/toggle.rb +1 -1
  54. data/lib/shadcn_phlexcomponents/version.rb +1 -1
  55. metadata +2 -1
@@ -2,287 +2,224 @@ const ANIMATION_OUT_DELAY = 100;
2
2
  const ON_OPEN_FOCUS_DELAY = 100;
3
3
  const ON_CLOSE_FOCUS_DELAY = 50;
4
4
  const getScrollbarWidth = () => {
5
- // Create a temporary div container and append it into the body
6
- const outer = document.createElement("div");
7
- outer.style.visibility = "hidden";
8
- outer.style.overflow = "scroll"; // force scrollbars
9
- outer.style.width = "100px";
10
- outer.style.position = "absolute";
11
- outer.style.top = "-9999px";
12
- document.body.appendChild(outer);
13
- // Create an inner div and place it inside the outer div
14
- const inner = document.createElement("div");
15
- inner.style.width = "100%";
16
- outer.appendChild(inner);
17
- // Calculate the scrollbar width
18
- const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;
19
- // Clean up
20
- outer.remove();
21
- return scrollbarWidth;
5
+ // Create a temporary div container and append it into the body
6
+ const outer = document.createElement('div');
7
+ outer.style.visibility = 'hidden';
8
+ outer.style.overflow = 'scroll'; // force scrollbars
9
+ outer.style.width = '100px';
10
+ outer.style.position = 'absolute';
11
+ outer.style.top = '-9999px';
12
+ document.body.appendChild(outer);
13
+ // Create an inner div and place it inside the outer div
14
+ const inner = document.createElement('div');
15
+ inner.style.width = '100%';
16
+ outer.appendChild(inner);
17
+ // Calculate the scrollbar width
18
+ const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;
19
+ // Clean up
20
+ outer.remove();
21
+ return scrollbarWidth;
22
22
  };
23
23
  const lockScroll = (contentId) => {
24
- if (window.innerHeight < document.documentElement.scrollHeight) {
25
- document.body.dataset.scrollLocked = "1";
26
- document.body.classList.add(
27
- "data-[scroll-locked]:pointer-events-none",
28
- "data-[scroll-locked]:!overflow-hidden",
29
- "data-[scroll-locked]:!relative",
30
- "data-[scroll-locked]:px-0",
31
- "data-[scroll-locked]:pt-0",
32
- "data-[scroll-locked]:ml-0",
33
- "data-[scroll-locked]:mt-0",
34
- );
35
- document.body.style.marginRight = `${getScrollbarWidth()}px`;
36
- const contentIdsString =
37
- document.body.dataset.scrollLockedContentIds || "[]";
38
- const contentIds = JSON.parse(contentIdsString);
39
- contentIds.push(contentId);
40
- document.body.dataset.scrollLockedContentIds = JSON.stringify(contentIds);
41
- }
24
+ if (window.innerHeight < document.documentElement.scrollHeight) {
25
+ document.body.dataset.scrollLocked = '1';
26
+ document.body.classList.add('data-[scroll-locked]:pointer-events-none', 'data-[scroll-locked]:!overflow-hidden', 'data-[scroll-locked]:!relative', 'data-[scroll-locked]:px-0', 'data-[scroll-locked]:pt-0', 'data-[scroll-locked]:ml-0', 'data-[scroll-locked]:mt-0');
27
+ document.body.style.marginRight = `${getScrollbarWidth()}px`;
28
+ const contentIdsString = document.body.dataset.scrollLockedContentIds || '[]';
29
+ const contentIds = JSON.parse(contentIdsString);
30
+ contentIds.push(contentId);
31
+ document.body.dataset.scrollLockedContentIds = JSON.stringify(contentIds);
32
+ }
42
33
  };
43
34
  const unlockScroll = (contentId) => {
44
- const contentIdsString = document.body.dataset.scrollLockedContentIds || "[]";
45
- const contentIds = JSON.parse(contentIdsString);
46
- const newContentIds = contentIds.filter((id) => id !== contentId);
47
- document.body.dataset.scrollLockedContentIds = JSON.stringify(newContentIds);
48
- if (newContentIds.length === 0) {
49
- delete document.body.dataset.scrollLocked;
50
- document.body.classList.remove(
51
- "data-[scroll-locked]:pointer-events-none",
52
- "data-[scroll-locked]:!overflow-hidden",
53
- "data-[scroll-locked]:!relative",
54
- "data-[scroll-locked]:px-0",
55
- "data-[scroll-locked]:pt-0",
56
- "data-[scroll-locked]:ml-0",
57
- "data-[scroll-locked]:mt-0",
58
- );
59
- document.body.style.marginRight = "";
60
- }
35
+ const contentIdsString = document.body.dataset.scrollLockedContentIds || '[]';
36
+ const contentIds = JSON.parse(contentIdsString);
37
+ const newContentIds = contentIds.filter((id) => id !== contentId);
38
+ document.body.dataset.scrollLockedContentIds = JSON.stringify(newContentIds);
39
+ if (newContentIds.length === 0) {
40
+ delete document.body.dataset.scrollLocked;
41
+ document.body.classList.remove('data-[scroll-locked]:pointer-events-none', 'data-[scroll-locked]:!overflow-hidden', 'data-[scroll-locked]:!relative', 'data-[scroll-locked]:px-0', 'data-[scroll-locked]:pt-0', 'data-[scroll-locked]:ml-0', 'data-[scroll-locked]:mt-0');
42
+ document.body.style.marginRight = '';
43
+ }
61
44
  };
62
45
  const focusTrigger = (triggerTarget) => {
63
- setTimeout(() => {
64
- if (triggerTarget.dataset.asChild === "false") {
65
- const childElement = triggerTarget.firstElementChild;
66
- if (childElement) {
67
- childElement.focus();
68
- }
69
- } else {
70
- triggerTarget.focus();
71
- }
72
- }, ON_CLOSE_FOCUS_DELAY);
46
+ setTimeout(() => {
47
+ if (triggerTarget.dataset.asChild === 'false') {
48
+ const childElement = triggerTarget.firstElementChild;
49
+ if (childElement) {
50
+ childElement.focus();
51
+ }
52
+ }
53
+ else {
54
+ triggerTarget.focus();
55
+ }
56
+ }, ON_CLOSE_FOCUS_DELAY);
73
57
  };
74
58
  const focusElement = (element) => {
75
- setTimeout(() => {
76
- if (element) {
77
- element.focus();
78
- }
79
- }, ON_OPEN_FOCUS_DELAY);
59
+ setTimeout(() => {
60
+ if (element) {
61
+ element.focus();
62
+ }
63
+ }, ON_OPEN_FOCUS_DELAY);
80
64
  };
81
65
  const getFocusableElements = (container) => {
82
- return Array.from(
83
- container.querySelectorAll(
84
- 'button, [href], input:not([type="hidden"]), select:not([tabindex="-1"]), textarea, [tabindex]:not([tabindex="-1"])',
85
- ),
86
- );
87
- };
88
- const getSameLevelItems = ({ content, items, closestContentSelector }) => {
89
- const sameLevelItems = [];
90
- items.forEach((i) => {
91
- if (
92
- i.closest(closestContentSelector) === content &&
93
- i.dataset.disabled === undefined
94
- ) {
95
- sameLevelItems.push(i);
66
+ return Array.from(container.querySelectorAll('button, [href], input:not([type="hidden"]), select:not([tabindex="-1"]), textarea, [tabindex]:not([tabindex="-1"])'));
67
+ };
68
+ const getSameLevelItems = ({ content, items, closestContentSelector, }) => {
69
+ const sameLevelItems = [];
70
+ items.forEach((i) => {
71
+ if (i.closest(closestContentSelector) === content &&
72
+ i.dataset.disabled === undefined) {
73
+ sameLevelItems.push(i);
74
+ }
75
+ });
76
+ return sameLevelItems;
77
+ };
78
+ const showContent = ({ trigger, content, contentContainer, setEqualWidth, overlay, }) => {
79
+ contentContainer.style.display = '';
80
+ if (trigger) {
81
+ if (setEqualWidth) {
82
+ const triggerWidth = trigger.offsetWidth;
83
+ const contentContainerWidth = contentContainer.offsetWidth;
84
+ if (contentContainerWidth < triggerWidth) {
85
+ contentContainer.style.width = `${triggerWidth}px`;
86
+ }
87
+ }
88
+ trigger.ariaExpanded = 'true';
89
+ trigger.dataset.state = 'open';
96
90
  }
97
- });
98
- return sameLevelItems;
99
- };
100
- const showContent = ({
101
- trigger,
102
- content,
103
- contentContainer,
104
- setEqualWidth,
105
- overlay,
106
- }) => {
107
- contentContainer.style.display = "";
108
- if (trigger) {
109
- if (setEqualWidth) {
110
- const triggerWidth = trigger.offsetWidth;
111
- const contentContainerWidth = contentContainer.offsetWidth;
112
- if (contentContainerWidth < triggerWidth) {
113
- contentContainer.style.width = `${triggerWidth}px`;
114
- }
91
+ content.dataset.state = 'open';
92
+ if (overlay) {
93
+ overlay.style.display = '';
94
+ overlay.dataset.state = 'open';
95
+ lockScroll(content.id);
115
96
  }
116
- trigger.ariaExpanded = "true";
117
- trigger.dataset.state = "open";
118
- }
119
- content.dataset.state = "open";
120
- if (overlay) {
121
- overlay.style.display = "";
122
- overlay.dataset.state = "open";
123
- lockScroll(content.id);
124
- }
125
97
  };
126
- const hideContent = ({ trigger, content, contentContainer, overlay }) => {
127
- if (trigger) {
128
- trigger.ariaExpanded = "false";
129
- trigger.dataset.state = "closed";
130
- }
131
- content.dataset.state = "closed";
132
- setTimeout(() => {
133
- contentContainer.style.display = "none";
134
- if (overlay) {
135
- overlay.style.display = "none";
136
- overlay.dataset.state = "closed";
137
- unlockScroll(content.id);
98
+ const hideContent = ({ trigger, content, contentContainer, overlay, }) => {
99
+ if (trigger) {
100
+ trigger.ariaExpanded = 'false';
101
+ trigger.dataset.state = 'closed';
138
102
  }
139
- }, ANIMATION_OUT_DELAY);
103
+ content.dataset.state = 'closed';
104
+ setTimeout(() => {
105
+ contentContainer.style.display = 'none';
106
+ if (overlay) {
107
+ overlay.style.display = 'none';
108
+ overlay.dataset.state = 'closed';
109
+ unlockScroll(content.id);
110
+ }
111
+ }, ANIMATION_OUT_DELAY);
140
112
  };
141
113
  const getStimulusInstance = (controller, element) => {
142
- if (!element) return;
143
- return window.Stimulus.getControllerForElementAndIdentifier(
144
- element,
145
- controller,
146
- );
114
+ if (!element)
115
+ return;
116
+ return window.Stimulus.getControllerForElementAndIdentifier(element, controller);
147
117
  };
148
118
  const anyNestedComponentsOpen = (element) => {
149
- const components = [];
150
- const componentNames = [
151
- "dialog",
152
- "alert-dialog",
153
- "dropdown-menu",
154
- "popover",
155
- "select",
156
- "combobox",
157
- "command",
158
- "hover-card",
159
- "tooltip",
160
- "date-picker",
161
- "date-range-picker",
162
- ];
163
- componentNames.forEach((name) => {
164
- const triggers = Array.from(
165
- element.querySelectorAll(
166
- `[data-shadcn-phlexcomponents="${name}-trigger"]`,
167
- ),
168
- );
169
- const controllerElements = Array.from(
170
- element.querySelectorAll(`[data-controller="${name}"]`),
171
- );
172
- controllerElements.forEach((controller) => {
173
- const stimulusInstance = getStimulusInstance(name, controller);
174
- if (stimulusInstance) {
175
- components.push(stimulusInstance);
176
- }
177
- });
178
- triggers.forEach((trigger) => {
179
- const stimulusInstance = getStimulusInstance(
180
- name,
181
- document.querySelector(`#${trigger.getAttribute("aria-controls")}`),
182
- );
183
- if (stimulusInstance) {
184
- components.push(stimulusInstance);
185
- }
119
+ const components = [];
120
+ const componentNames = [
121
+ 'dialog',
122
+ 'alert-dialog',
123
+ 'dropdown-menu',
124
+ 'popover',
125
+ 'select',
126
+ 'combobox',
127
+ 'command',
128
+ 'hover-card',
129
+ 'tooltip',
130
+ 'date-picker',
131
+ 'date-range-picker',
132
+ ];
133
+ componentNames.forEach((name) => {
134
+ const triggers = Array.from(element.querySelectorAll(`[data-shadcn-phlexcomponents="${name}-trigger"]`));
135
+ const controllerElements = Array.from(element.querySelectorAll(`[data-controller="${name}"]`));
136
+ controllerElements.forEach((controller) => {
137
+ const stimulusInstance = getStimulusInstance(name, controller);
138
+ if (stimulusInstance) {
139
+ components.push(stimulusInstance);
140
+ }
141
+ });
142
+ triggers.forEach((trigger) => {
143
+ const stimulusInstance = getStimulusInstance(name, document.querySelector(`#${trigger.getAttribute('aria-controls')}`));
144
+ if (stimulusInstance) {
145
+ components.push(stimulusInstance);
146
+ }
147
+ });
186
148
  });
187
- });
188
- return components.some((c) => c.isOpenValue);
149
+ return components.some((c) => c.isOpenValue);
189
150
  };
190
151
  const onClickOutside = (controller, event) => {
191
- const target = event.target;
192
- // Let trigger handle state
193
- if (target === controller.triggerTarget) return;
194
- if (controller.triggerTarget.contains(target)) return;
195
- controller.close();
152
+ const target = event.target;
153
+ // Let trigger handle state
154
+ if (target === controller.triggerTarget)
155
+ return;
156
+ if (controller.triggerTarget.contains(target))
157
+ return;
158
+ controller.close();
196
159
  };
197
160
  const setGroupLabelsId = (controller) => {
198
- controller.groupTargets.forEach((g) => {
199
- const label = g.querySelector(
200
- `[data-shadcn-phlexcomponents="${controller.identifier}-label"]`,
201
- );
202
- if (label) {
203
- label.id = g.getAttribute("aria-labelledby");
204
- }
205
- });
161
+ controller.groupTargets.forEach((g) => {
162
+ const label = g.querySelector(`[data-shadcn-phlexcomponents="${controller.identifier}-label"]`);
163
+ if (label) {
164
+ label.id = g.getAttribute('aria-labelledby');
165
+ }
166
+ });
206
167
  };
207
- const getNextEnabledIndex = ({ items, currentIndex, wrapAround, filterFn }) => {
208
- let newIndex = null;
209
- if (filterFn) {
210
- newIndex = items.findIndex(
211
- (item, index) => index > currentIndex && filterFn(item),
212
- );
213
- if (newIndex === -1) {
214
- newIndex = currentIndex;
168
+ const getNextEnabledIndex = ({ items, currentIndex, wrapAround, filterFn, }) => {
169
+ let newIndex = null;
170
+ if (filterFn) {
171
+ newIndex = items.findIndex((item, index) => index > currentIndex && filterFn(item));
172
+ if (newIndex === -1) {
173
+ newIndex = currentIndex;
174
+ }
215
175
  }
216
- } else {
217
- newIndex = currentIndex + 1;
218
- }
219
- if (newIndex > items.length - 1) {
220
- if (wrapAround) {
221
- newIndex = 0;
222
- } else {
223
- newIndex = items.length - 1;
176
+ else {
177
+ newIndex = currentIndex + 1;
224
178
  }
225
- }
226
- return newIndex;
227
- };
228
- const getPreviousEnabledIndex = ({
229
- items,
230
- currentIndex,
231
- wrapAround,
232
- filterFn,
233
- }) => {
234
- let newIndex = null;
235
- if (filterFn) {
236
- newIndex = items.findLastIndex(
237
- (item, index) => index < currentIndex && filterFn(item),
238
- );
239
- if (newIndex === -1) {
240
- newIndex = currentIndex;
179
+ if (newIndex > items.length - 1) {
180
+ if (wrapAround) {
181
+ newIndex = 0;
182
+ }
183
+ else {
184
+ newIndex = items.length - 1;
185
+ }
241
186
  }
242
- } else {
243
- newIndex = currentIndex - 1;
244
- }
245
- if (newIndex < 0) {
246
- if (wrapAround) {
247
- newIndex = items.length - 1;
248
- } else {
249
- newIndex = 0;
187
+ return newIndex;
188
+ };
189
+ const getPreviousEnabledIndex = ({ items, currentIndex, wrapAround, filterFn, }) => {
190
+ let newIndex = null;
191
+ if (filterFn) {
192
+ newIndex = items.findLastIndex((item, index) => index < currentIndex && filterFn(item));
193
+ if (newIndex === -1) {
194
+ newIndex = currentIndex;
195
+ }
250
196
  }
251
- }
252
- return newIndex;
197
+ else {
198
+ newIndex = currentIndex - 1;
199
+ }
200
+ if (newIndex < 0) {
201
+ if (wrapAround) {
202
+ newIndex = items.length - 1;
203
+ }
204
+ else {
205
+ newIndex = 0;
206
+ }
207
+ }
208
+ return newIndex;
253
209
  };
254
210
  const handleTabNavigation = (element, event) => {
255
- const focusableElements = getFocusableElements(element);
256
- const firstElement = focusableElements[0];
257
- const lastElement = focusableElements[focusableElements.length - 1];
258
- // If Shift + Tab pressed on first element, go to last element
259
- if (event.shiftKey && document.activeElement === firstElement) {
260
- event.preventDefault();
261
- lastElement.focus();
262
- }
263
- // If Tab pressed on last element, go to first element
264
- else if (!event.shiftKey && document.activeElement === lastElement) {
265
- event.preventDefault();
266
- firstElement.focus();
267
- }
268
- };
269
- export {
270
- ANIMATION_OUT_DELAY,
271
- ON_CLOSE_FOCUS_DELAY,
272
- ON_OPEN_FOCUS_DELAY,
273
- lockScroll,
274
- unlockScroll,
275
- focusTrigger,
276
- focusElement,
277
- getFocusableElements,
278
- getSameLevelItems,
279
- showContent,
280
- hideContent,
281
- getStimulusInstance,
282
- anyNestedComponentsOpen,
283
- onClickOutside,
284
- setGroupLabelsId,
285
- getNextEnabledIndex,
286
- getPreviousEnabledIndex,
287
- handleTabNavigation,
211
+ const focusableElements = getFocusableElements(element);
212
+ const firstElement = focusableElements[0];
213
+ const lastElement = focusableElements[focusableElements.length - 1];
214
+ // If Shift + Tab pressed on first element, go to last element
215
+ if (event.shiftKey && document.activeElement === firstElement) {
216
+ event.preventDefault();
217
+ lastElement.focus();
218
+ }
219
+ // If Tab pressed on last element, go to first element
220
+ else if (!event.shiftKey && document.activeElement === lastElement) {
221
+ event.preventDefault();
222
+ firstElement.focus();
223
+ }
288
224
  };
225
+ export { ANIMATION_OUT_DELAY, ON_CLOSE_FOCUS_DELAY, ON_OPEN_FOCUS_DELAY, lockScroll, unlockScroll, focusTrigger, focusElement, getFocusableElements, getSameLevelItems, showContent, hideContent, getStimulusInstance, anyNestedComponentsOpen, onClickOutside, setGroupLabelsId, getNextEnabledIndex, getPreviousEnabledIndex, handleTabNavigation, };
@@ -54,7 +54,7 @@
54
54
  }
55
55
 
56
56
  [data-vc='wrapper'] {
57
- @apply flex items-center content-center h-full;
57
+ @apply flex items-center h-full;
58
58
  }
59
59
 
60
60
  [data-vc='content'] {
@@ -0,0 +1,173 @@
1
+ @import './tw-animate.css';
2
+ @import './date_picker.css';
3
+ @import './nouislider.css';
4
+
5
+ @custom-variant dark (&:is(.dark *));
6
+ @custom-variant fixed (&:is(.layout-fixed *));
7
+
8
+ @theme inline {
9
+ --breakpoint-3xl: 1600px;
10
+ --breakpoint-4xl: 2000px;
11
+ --font-sans: var(--font-sans);
12
+ --font-mono: var(--font-mono);
13
+ --radius-sm: calc(var(--radius) - 4px);
14
+ --radius-md: calc(var(--radius) - 2px);
15
+ --radius-lg: var(--radius);
16
+ --radius-xl: calc(var(--radius) + 4px);
17
+ --color-background: var(--background);
18
+ --color-foreground: var(--foreground);
19
+ --color-card: var(--card);
20
+ --color-card-foreground: var(--card-foreground);
21
+ --color-popover: var(--popover);
22
+ --color-popover-foreground: var(--popover-foreground);
23
+ --color-primary: var(--primary);
24
+ --color-primary-foreground: var(--primary-foreground);
25
+ --color-secondary: var(--secondary);
26
+ --color-secondary-foreground: var(--secondary-foreground);
27
+ --color-muted: var(--muted);
28
+ --color-muted-foreground: var(--muted-foreground);
29
+ --color-accent: var(--accent);
30
+ --color-accent-foreground: var(--accent-foreground);
31
+ --color-destructive: var(--destructive);
32
+ --color-border: var(--border);
33
+ --color-input: var(--input);
34
+ --color-ring: var(--ring);
35
+ --color-chart-1: var(--chart-1);
36
+ --color-chart-2: var(--chart-2);
37
+ --color-chart-3: var(--chart-3);
38
+ --color-chart-4: var(--chart-4);
39
+ --color-chart-5: var(--chart-5);
40
+ --color-sidebar: var(--sidebar);
41
+ --color-sidebar-foreground: var(--sidebar-foreground);
42
+ --color-sidebar-primary: var(--sidebar-primary);
43
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
44
+ --color-sidebar-accent: var(--sidebar-accent);
45
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
46
+ --color-sidebar-border: var(--sidebar-border);
47
+ --color-sidebar-ring: var(--sidebar-ring);
48
+ --color-surface: var(--surface);
49
+ --color-surface-foreground: var(--surface-foreground);
50
+ --color-code: var(--code);
51
+ --color-code-foreground: var(--code-foreground);
52
+ --color-code-highlight: var(--code-highlight);
53
+ --color-code-number: var(--code-number);
54
+ --color-selection: var(--selection);
55
+ --color-selection-foreground: var(--selection-foreground);
56
+ }
57
+
58
+ :root {
59
+ --radius: 0.625rem;
60
+ --background: oklch(1 0 0);
61
+ --foreground: oklch(0.145 0 0);
62
+ --card: oklch(1 0 0);
63
+ --card-foreground: oklch(0.145 0 0);
64
+ --popover: oklch(1 0 0);
65
+ --popover-foreground: oklch(0.145 0 0);
66
+ --primary: oklch(0.205 0 0);
67
+ --primary-foreground: oklch(0.985 0 0);
68
+ --secondary: oklch(0.97 0 0);
69
+ --secondary-foreground: oklch(0.205 0 0);
70
+ --muted: oklch(0.97 0 0);
71
+ --muted-foreground: oklch(0.556 0 0);
72
+ --accent: oklch(0.97 0 0);
73
+ --accent-foreground: oklch(0.205 0 0);
74
+ --destructive: oklch(0.577 0.245 27.325);
75
+ --border: oklch(0.922 0 0);
76
+ --input: oklch(0.922 0 0);
77
+ --ring: oklch(0.708 0 0);
78
+ --chart-1: var(--color-blue-300);
79
+ --chart-2: var(--color-blue-500);
80
+ --chart-3: var(--color-blue-600);
81
+ --chart-4: var(--color-blue-700);
82
+ --chart-5: var(--color-blue-800);
83
+ --sidebar: oklch(0.985 0 0);
84
+ --sidebar-foreground: oklch(0.145 0 0);
85
+ --sidebar-primary: oklch(0.205 0 0);
86
+ --sidebar-primary-foreground: oklch(0.985 0 0);
87
+ --sidebar-accent: oklch(0.97 0 0);
88
+ --sidebar-accent-foreground: oklch(0.205 0 0);
89
+ --sidebar-border: oklch(0.922 0 0);
90
+ --sidebar-ring: oklch(0.708 0 0);
91
+ --surface: oklch(0.98 0 0);
92
+ --surface-foreground: var(--foreground);
93
+ --code: var(--surface);
94
+ --code-foreground: var(--surface-foreground);
95
+ --code-highlight: oklch(0.96 0 0);
96
+ --code-number: oklch(0.56 0 0);
97
+ --selection: oklch(0.145 0 0);
98
+ --selection-foreground: oklch(1 0 0);
99
+ }
100
+
101
+ .dark {
102
+ --background: oklch(0.145 0 0);
103
+ --foreground: oklch(0.985 0 0);
104
+ --card: oklch(0.205 0 0);
105
+ --card-foreground: oklch(0.985 0 0);
106
+ --popover: oklch(0.269 0 0);
107
+ --popover-foreground: oklch(0.985 0 0);
108
+ --primary: oklch(0.922 0 0);
109
+ --primary-foreground: oklch(0.205 0 0);
110
+ --secondary: oklch(0.269 0 0);
111
+ --secondary-foreground: oklch(0.985 0 0);
112
+ --muted: oklch(0.269 0 0);
113
+ --muted-foreground: oklch(0.708 0 0);
114
+ --accent: oklch(0.371 0 0);
115
+ --accent-foreground: oklch(0.985 0 0);
116
+ --destructive: oklch(0.704 0.191 22.216);
117
+ --border: oklch(1 0 0 / 10%);
118
+ --input: oklch(1 0 0 / 15%);
119
+ --ring: oklch(0.556 0 0);
120
+ --chart-1: var(--color-blue-300);
121
+ --chart-2: var(--color-blue-500);
122
+ --chart-3: var(--color-blue-600);
123
+ --chart-4: var(--color-blue-700);
124
+ --chart-5: var(--color-blue-800);
125
+ --sidebar: oklch(0.205 0 0);
126
+ --sidebar-foreground: oklch(0.985 0 0);
127
+ --sidebar-primary: oklch(0.488 0.243 264.376);
128
+ --sidebar-primary-foreground: oklch(0.985 0 0);
129
+ --sidebar-accent: oklch(0.269 0 0);
130
+ --sidebar-accent-foreground: oklch(0.985 0 0);
131
+ --sidebar-border: oklch(1 0 0 / 10%);
132
+ --sidebar-ring: oklch(0.439 0 0);
133
+ --surface: oklch(0.2 0 0);
134
+ --surface-foreground: oklch(0.708 0 0);
135
+ --code: var(--surface);
136
+ --code-foreground: var(--surface-foreground);
137
+ --code-highlight: oklch(0.27 0 0);
138
+ --code-number: oklch(0.72 0 0);
139
+ --selection: oklch(0.922 0 0);
140
+ --selection-foreground: oklch(0.205 0 0);
141
+ }
142
+
143
+ @layer base {
144
+ * {
145
+ @apply border-border outline-ring/50;
146
+ }
147
+ ::selection {
148
+ @apply bg-selection text-selection-foreground;
149
+ }
150
+ html {
151
+ @apply scroll-smooth;
152
+ }
153
+ body {
154
+ font-synthesis-weight: none;
155
+ text-rendering: optimizeLegibility;
156
+ }
157
+
158
+ @supports (font: -apple-system-body) and (-webkit-appearance: none) {
159
+ [data-wrapper] {
160
+ @apply min-[1800px]:border-t;
161
+ }
162
+ }
163
+
164
+ a:active,
165
+ button:active {
166
+ @apply opacity-60 md:opacity-100;
167
+ }
168
+
169
+ button:not(:disabled),
170
+ [role='button']:not(:disabled) {
171
+ cursor: pointer;
172
+ }
173
+ }
@@ -115,7 +115,6 @@ const ComboboxController = class extends Controller<HTMLElement> {
115
115
  this.searchInputTarget.focus()
116
116
 
117
117
  let index = 0
118
- console.log('this.selectedValue', this.selectedValue)
119
118
  if (this.selectedValue) {
120
119
  const item = this.filteredItems.find(
121
120
  (i) => i.dataset.value === this.selectedValue,