tyrell-components 1.0.0-RC13 → 1.0.0-RC15
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.
- package/README.md +10 -2
- package/css/tyrell-theme.css +192 -180
- package/css/tyrell.css +23 -0
- package/dist/tyrell-colors-static.css +1 -316
- package/dist/tyrell-theme.css +1 -1454
- package/dist/tyrell.css +1 -1371
- package/dist/tyrell.js +1 -1
- package/lib/base/ty-component.d.ts +20 -10
- package/lib/base/ty-component.js +196 -319
- package/lib/components/button.d.ts +3 -17
- package/lib/components/button.js +261 -295
- package/lib/components/calendar-month.d.ts +4 -50
- package/lib/components/calendar-month.js +443 -582
- package/lib/components/calendar-navigation.d.ts +3 -48
- package/lib/components/calendar-navigation.js +239 -362
- package/lib/components/calendar.d.ts +8 -83
- package/lib/components/calendar.js +616 -829
- package/lib/components/checkbox.d.ts +5 -72
- package/lib/components/checkbox.js +273 -416
- package/lib/components/copy.d.ts +4 -57
- package/lib/components/copy.js +280 -397
- package/lib/components/date-picker.d.ts +21 -163
- package/lib/components/date-picker.js +1143 -1674
- package/lib/components/file-upload.d.ts +9 -15
- package/lib/components/file-upload.js +404 -426
- package/lib/components/icon.d.ts +3 -24
- package/lib/components/icon.js +141 -230
- package/lib/components/input.d.ts +8 -108
- package/lib/components/input.js +593 -784
- package/lib/components/modal.d.ts +17 -26
- package/lib/components/modal.js +340 -484
- package/lib/components/option.d.ts +2 -9
- package/lib/components/option.js +168 -216
- package/lib/components/popup.d.ts +2 -17
- package/lib/components/popup.js +249 -380
- package/lib/components/radio.d.ts +5 -25
- package/lib/components/radio.js +407 -461
- package/lib/components/resize-observer.d.ts +3 -30
- package/lib/components/resize-observer.js +69 -103
- package/lib/components/scroll-container.d.ts +2 -12
- package/lib/components/scroll-container.js +293 -338
- package/lib/components/select.d.ts +87 -159
- package/lib/components/select.js +1609 -2090
- package/lib/components/selected-tags.d.ts +5 -48
- package/lib/components/selected-tags.js +188 -276
- package/lib/components/step.d.ts +1 -6
- package/lib/components/step.js +62 -68
- package/lib/components/switch.d.ts +1 -12
- package/lib/components/switch.js +214 -247
- package/lib/components/tab.d.ts +1 -6
- package/lib/components/tab.js +62 -69
- package/lib/components/tabs.d.ts +6 -63
- package/lib/components/tabs.js +545 -777
- package/lib/components/tag.d.ts +3 -37
- package/lib/components/tag.js +236 -335
- package/lib/components/textarea.d.ts +7 -87
- package/lib/components/textarea.js +457 -627
- package/lib/components/tooltip.d.ts +3 -11
- package/lib/components/tooltip.js +307 -443
- package/lib/components/wizard.d.ts +6 -54
- package/lib/components/wizard.js +405 -618
- package/lib/icons/fontawesome/brands.d.ts +0 -1
- package/lib/icons/fontawesome/brands.js +0 -8
- package/lib/icons/fontawesome/regular.d.ts +0 -1
- package/lib/icons/fontawesome/regular.js +0 -8
- package/lib/icons/fontawesome/solid.d.ts +0 -1
- package/lib/icons/fontawesome/solid.js +0 -8
- package/lib/icons/heroicons/micro.d.ts +0 -1
- package/lib/icons/heroicons/micro.js +392 -400
- package/lib/icons/heroicons/mini.d.ts +0 -1
- package/lib/icons/heroicons/mini.js +382 -390
- package/lib/icons/heroicons/outline.d.ts +0 -1
- package/lib/icons/heroicons/outline.js +337 -345
- package/lib/icons/heroicons/solid.d.ts +0 -1
- package/lib/icons/heroicons/solid.js +407 -415
- package/lib/icons/lucide.d.ts +0 -1
- package/lib/icons/lucide.js +24479 -26351
- package/lib/icons/material/filled.d.ts +0 -1
- package/lib/icons/material/filled.js +9653 -9663
- package/lib/icons/material/outlined.d.ts +0 -1
- package/lib/icons/material/outlined.js +10271 -10281
- package/lib/icons/material/round.d.ts +0 -1
- package/lib/icons/material/round.js +10495 -10505
- package/lib/icons/material/sharp.d.ts +0 -1
- package/lib/icons/material/sharp.js +9905 -9915
- package/lib/icons/material/two-tone.d.ts +0 -1
- package/lib/icons/material/two-tone.js +12792 -12802
- package/lib/index.d.ts +0 -1
- package/lib/index.js +21 -41
- package/lib/styles/button.d.ts +2 -20
- package/lib/styles/button.js +202 -404
- package/lib/styles/calendar-month.d.ts +1 -5
- package/lib/styles/calendar-month.js +127 -244
- package/lib/styles/calendar-navigation.d.ts +2 -6
- package/lib/styles/calendar-navigation.js +64 -104
- package/lib/styles/calendar.d.ts +1 -2
- package/lib/styles/calendar.js +9 -22
- package/lib/styles/checkbox.d.ts +0 -1
- package/lib/styles/checkbox.js +45 -94
- package/lib/styles/copy.d.ts +0 -1
- package/lib/styles/copy.js +67 -106
- package/lib/styles/custom-scrollbar.d.ts +1 -2
- package/lib/styles/custom-scrollbar.js +80 -115
- package/lib/styles/date-picker.d.ts +1 -5
- package/lib/styles/date-picker.js +261 -335
- package/lib/styles/field-size.d.ts +6 -0
- package/lib/styles/field-size.js +91 -0
- package/lib/styles/file-upload.d.ts +1 -2
- package/lib/styles/file-upload.js +143 -188
- package/lib/styles/icon.d.ts +2 -6
- package/lib/styles/icon.js +92 -170
- package/lib/styles/input.d.ts +1 -6
- package/lib/styles/input.js +125 -290
- package/lib/styles/modal.d.ts +1 -2
- package/lib/styles/modal.js +71 -108
- package/lib/styles/option.d.ts +2 -6
- package/lib/styles/option.js +49 -64
- package/lib/styles/popup.d.ts +1 -2
- package/lib/styles/popup.js +42 -77
- package/lib/styles/radio.d.ts +0 -1
- package/lib/styles/radio.js +69 -110
- package/lib/styles/resize-observer.d.ts +1 -2
- package/lib/styles/resize-observer.js +2 -12
- package/lib/styles/scroll-container.d.ts +1 -2
- package/lib/styles/scroll-container.js +100 -149
- package/lib/styles/select-base.d.ts +0 -1
- package/lib/styles/select-base.js +597 -785
- package/lib/styles/select.d.ts +1 -2
- package/lib/styles/select.js +140 -236
- package/lib/styles/step.d.ts +1 -2
- package/lib/styles/step.js +22 -33
- package/lib/styles/switch.d.ts +0 -1
- package/lib/styles/switch.js +34 -73
- package/lib/styles/tab.d.ts +1 -2
- package/lib/styles/tab.js +22 -34
- package/lib/styles/tabs.d.ts +3 -11
- package/lib/styles/tabs.js +190 -222
- package/lib/styles/tag.d.ts +1 -5
- package/lib/styles/tag.js +136 -218
- package/lib/styles/textarea.d.ts +1 -2
- package/lib/styles/textarea.js +210 -319
- package/lib/styles/tooltip.d.ts +0 -1
- package/lib/styles/tooltip.js +3 -13
- package/lib/styles/wizard.d.ts +5 -21
- package/lib/styles/wizard.js +170 -306
- package/lib/types/common.d.ts +2 -2
- package/lib/types/common.js +6 -17
- package/lib/utils/calendar-utils.d.ts +4 -21
- package/lib/utils/calendar-utils.js +100 -273
- package/lib/utils/custom-scrollbar.d.ts +6 -20
- package/lib/utils/custom-scrollbar.js +273 -317
- package/lib/utils/flavor-sheet.d.ts +0 -1
- package/lib/utils/flavor-sheet.js +14 -37
- package/lib/utils/icon-registry.d.ts +0 -2
- package/lib/utils/icon-registry.js +137 -243
- package/lib/utils/icons.d.ts +0 -1
- package/lib/utils/icons.js +0 -9
- package/lib/utils/loader-registry.d.ts +0 -1
- package/lib/utils/loader-registry.js +3 -35
- package/lib/utils/locale.d.ts +2 -23
- package/lib/utils/locale.js +34 -120
- package/lib/utils/mobile.d.ts +0 -1
- package/lib/utils/mobile.js +1 -18
- package/lib/utils/number-format.d.ts +6 -3
- package/lib/utils/number-format.js +54 -110
- package/lib/utils/positioning.d.ts +50 -7
- package/lib/utils/positioning.js +224 -234
- package/lib/utils/property-capture.d.ts +5 -27
- package/lib/utils/property-capture.js +36 -144
- package/lib/utils/property-manager.d.ts +0 -1
- package/lib/utils/property-manager.js +126 -196
- package/lib/utils/resize-observer.d.ts +0 -1
- package/lib/utils/resize-observer.js +23 -59
- package/lib/utils/scroll-lock.d.ts +4 -11
- package/lib/utils/scroll-lock.js +65 -172
- package/lib/utils/styles.d.ts +0 -1
- package/lib/utils/styles.js +17 -41
- package/lib/version.d.ts +1 -2
- package/lib/version.js +1 -11
- package/package.json +4 -4
- package/lib/base/ty-component.d.ts.map +0 -1
- package/lib/base/ty-component.js.map +0 -1
- package/lib/components/button.d.ts.map +0 -1
- package/lib/components/button.js.map +0 -1
- package/lib/components/calendar-month.d.ts.map +0 -1
- package/lib/components/calendar-month.js.map +0 -1
- package/lib/components/calendar-navigation.d.ts.map +0 -1
- package/lib/components/calendar-navigation.js.map +0 -1
- package/lib/components/calendar.d.ts.map +0 -1
- package/lib/components/calendar.js.map +0 -1
- package/lib/components/checkbox.d.ts.map +0 -1
- package/lib/components/checkbox.js.map +0 -1
- package/lib/components/copy.d.ts.map +0 -1
- package/lib/components/copy.js.map +0 -1
- package/lib/components/date-picker.d.ts.map +0 -1
- package/lib/components/date-picker.js.map +0 -1
- package/lib/components/file-upload.d.ts.map +0 -1
- package/lib/components/file-upload.js.map +0 -1
- package/lib/components/icon.d.ts.map +0 -1
- package/lib/components/icon.js.map +0 -1
- package/lib/components/input.d.ts.map +0 -1
- package/lib/components/input.js.map +0 -1
- package/lib/components/modal.d.ts.map +0 -1
- package/lib/components/modal.js.map +0 -1
- package/lib/components/option.d.ts.map +0 -1
- package/lib/components/option.js.map +0 -1
- package/lib/components/popup.d.ts.map +0 -1
- package/lib/components/popup.js.map +0 -1
- package/lib/components/radio.d.ts.map +0 -1
- package/lib/components/radio.js.map +0 -1
- package/lib/components/resize-observer.d.ts.map +0 -1
- package/lib/components/resize-observer.js.map +0 -1
- package/lib/components/scroll-container.d.ts.map +0 -1
- package/lib/components/scroll-container.js.map +0 -1
- package/lib/components/select.d.ts.map +0 -1
- package/lib/components/select.js.map +0 -1
- package/lib/components/selected-tags.d.ts.map +0 -1
- package/lib/components/selected-tags.js.map +0 -1
- package/lib/components/step.d.ts.map +0 -1
- package/lib/components/step.js.map +0 -1
- package/lib/components/switch.d.ts.map +0 -1
- package/lib/components/switch.js.map +0 -1
- package/lib/components/tab.d.ts.map +0 -1
- package/lib/components/tab.js.map +0 -1
- package/lib/components/tabs.d.ts.map +0 -1
- package/lib/components/tabs.js.map +0 -1
- package/lib/components/tag.d.ts.map +0 -1
- package/lib/components/tag.js.map +0 -1
- package/lib/components/textarea.d.ts.map +0 -1
- package/lib/components/textarea.js.map +0 -1
- package/lib/components/tooltip.d.ts.map +0 -1
- package/lib/components/tooltip.js.map +0 -1
- package/lib/components/wizard.d.ts.map +0 -1
- package/lib/components/wizard.js.map +0 -1
- package/lib/icons/fontawesome/brands.d.ts.map +0 -1
- package/lib/icons/fontawesome/brands.js.map +0 -1
- package/lib/icons/fontawesome/regular.d.ts.map +0 -1
- package/lib/icons/fontawesome/regular.js.map +0 -1
- package/lib/icons/fontawesome/solid.d.ts.map +0 -1
- package/lib/icons/fontawesome/solid.js.map +0 -1
- package/lib/icons/heroicons/micro.d.ts.map +0 -1
- package/lib/icons/heroicons/micro.js.map +0 -1
- package/lib/icons/heroicons/mini.d.ts.map +0 -1
- package/lib/icons/heroicons/mini.js.map +0 -1
- package/lib/icons/heroicons/outline.d.ts.map +0 -1
- package/lib/icons/heroicons/outline.js.map +0 -1
- package/lib/icons/heroicons/solid.d.ts.map +0 -1
- package/lib/icons/heroicons/solid.js.map +0 -1
- package/lib/icons/lucide.d.ts.map +0 -1
- package/lib/icons/lucide.js.map +0 -1
- package/lib/icons/material/filled.d.ts.map +0 -1
- package/lib/icons/material/filled.js.map +0 -1
- package/lib/icons/material/outlined.d.ts.map +0 -1
- package/lib/icons/material/outlined.js.map +0 -1
- package/lib/icons/material/round.d.ts.map +0 -1
- package/lib/icons/material/round.js.map +0 -1
- package/lib/icons/material/sharp.d.ts.map +0 -1
- package/lib/icons/material/sharp.js.map +0 -1
- package/lib/icons/material/two-tone.d.ts.map +0 -1
- package/lib/icons/material/two-tone.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/styles/button.d.ts.map +0 -1
- package/lib/styles/button.js.map +0 -1
- package/lib/styles/calendar-month.d.ts.map +0 -1
- package/lib/styles/calendar-month.js.map +0 -1
- package/lib/styles/calendar-navigation.d.ts.map +0 -1
- package/lib/styles/calendar-navigation.js.map +0 -1
- package/lib/styles/calendar.d.ts.map +0 -1
- package/lib/styles/calendar.js.map +0 -1
- package/lib/styles/checkbox.d.ts.map +0 -1
- package/lib/styles/checkbox.js.map +0 -1
- package/lib/styles/copy.d.ts.map +0 -1
- package/lib/styles/copy.js.map +0 -1
- package/lib/styles/custom-scrollbar.d.ts.map +0 -1
- package/lib/styles/custom-scrollbar.js.map +0 -1
- package/lib/styles/date-picker.d.ts.map +0 -1
- package/lib/styles/date-picker.js.map +0 -1
- package/lib/styles/file-upload.d.ts.map +0 -1
- package/lib/styles/file-upload.js.map +0 -1
- package/lib/styles/icon.d.ts.map +0 -1
- package/lib/styles/icon.js.map +0 -1
- package/lib/styles/input.d.ts.map +0 -1
- package/lib/styles/input.js.map +0 -1
- package/lib/styles/modal.d.ts.map +0 -1
- package/lib/styles/modal.js.map +0 -1
- package/lib/styles/multiselect.d.ts +0 -8
- package/lib/styles/multiselect.d.ts.map +0 -1
- package/lib/styles/multiselect.js +0 -849
- package/lib/styles/multiselect.js.map +0 -1
- package/lib/styles/option.d.ts.map +0 -1
- package/lib/styles/option.js.map +0 -1
- package/lib/styles/popup.d.ts.map +0 -1
- package/lib/styles/popup.js.map +0 -1
- package/lib/styles/radio.d.ts.map +0 -1
- package/lib/styles/radio.js.map +0 -1
- package/lib/styles/resize-observer.d.ts.map +0 -1
- package/lib/styles/resize-observer.js.map +0 -1
- package/lib/styles/scroll-container.d.ts.map +0 -1
- package/lib/styles/scroll-container.js.map +0 -1
- package/lib/styles/select-base.d.ts.map +0 -1
- package/lib/styles/select-base.js.map +0 -1
- package/lib/styles/select.d.ts.map +0 -1
- package/lib/styles/select.js.map +0 -1
- package/lib/styles/step.d.ts.map +0 -1
- package/lib/styles/step.js.map +0 -1
- package/lib/styles/switch.d.ts.map +0 -1
- package/lib/styles/switch.js.map +0 -1
- package/lib/styles/tab.d.ts.map +0 -1
- package/lib/styles/tab.js.map +0 -1
- package/lib/styles/tabs.d.ts.map +0 -1
- package/lib/styles/tabs.js.map +0 -1
- package/lib/styles/tag.d.ts.map +0 -1
- package/lib/styles/tag.js.map +0 -1
- package/lib/styles/textarea.d.ts.map +0 -1
- package/lib/styles/textarea.js.map +0 -1
- package/lib/styles/tooltip.d.ts.map +0 -1
- package/lib/styles/tooltip.js.map +0 -1
- package/lib/styles/wizard.d.ts.map +0 -1
- package/lib/styles/wizard.js.map +0 -1
- package/lib/types/common.d.ts.map +0 -1
- package/lib/types/common.js.map +0 -1
- package/lib/utils/calendar-utils.d.ts.map +0 -1
- package/lib/utils/calendar-utils.js.map +0 -1
- package/lib/utils/custom-scrollbar.d.ts.map +0 -1
- package/lib/utils/custom-scrollbar.js.map +0 -1
- package/lib/utils/flavor-sheet.d.ts.map +0 -1
- package/lib/utils/flavor-sheet.js.map +0 -1
- package/lib/utils/icon-registry.d.ts.map +0 -1
- package/lib/utils/icon-registry.js.map +0 -1
- package/lib/utils/icons.d.ts.map +0 -1
- package/lib/utils/icons.js.map +0 -1
- package/lib/utils/loader-registry.d.ts.map +0 -1
- package/lib/utils/loader-registry.js.map +0 -1
- package/lib/utils/locale.d.ts.map +0 -1
- package/lib/utils/locale.js.map +0 -1
- package/lib/utils/mobile.d.ts.map +0 -1
- package/lib/utils/mobile.js.map +0 -1
- package/lib/utils/number-format.d.ts.map +0 -1
- package/lib/utils/number-format.js.map +0 -1
- package/lib/utils/parse-boolean.d.ts +0 -39
- package/lib/utils/parse-boolean.d.ts.map +0 -1
- package/lib/utils/parse-boolean.js +0 -58
- package/lib/utils/parse-boolean.js.map +0 -1
- package/lib/utils/positioning.d.ts.map +0 -1
- package/lib/utils/positioning.js.map +0 -1
- package/lib/utils/property-capture.d.ts.map +0 -1
- package/lib/utils/property-capture.js.map +0 -1
- package/lib/utils/property-manager.d.ts.map +0 -1
- package/lib/utils/property-manager.js.map +0 -1
- package/lib/utils/resize-observer.d.ts.map +0 -1
- package/lib/utils/resize-observer.js.map +0 -1
- package/lib/utils/scroll-lock.d.ts.map +0 -1
- package/lib/utils/scroll-lock.js.map +0 -1
- package/lib/utils/styles.d.ts.map +0 -1
- package/lib/utils/styles.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js.map +0 -1
|
@@ -1,973 +1,785 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Select Field Styles — shared chrome for ty-select (both single and
|
|
3
|
-
* multiple modes). Formerly split across ty-dropdown / ty-multiselect;
|
|
4
|
-
* those were consolidated into ty-select and this file kept the name.
|
|
5
|
-
*/
|
|
6
1
|
import { FLAVORS } from "../types/common.js";
|
|
2
|
+
import { fieldSizeVars } from "./field-size.js";
|
|
7
3
|
import { customScrollbarStyles } from "./custom-scrollbar.js";
|
|
8
|
-
/* Flavor rules only set --select-accent (border), --select-accent-bold
|
|
9
|
-
(hover/open border), and --select-ring (open focus ring); the .select-stub
|
|
10
|
-
rules below consume them. Doubles as the per-instance override API:
|
|
11
|
-
`ty-select { --select-accent: … }`. Neutral is skipped — it IS the default
|
|
12
|
-
unstyled chrome (--ty-input-* tokens), same convention as
|
|
13
|
-
ty-input/ty-date-picker. Fallback flavor `fb` is used for custom flavors
|
|
14
|
-
so missing tokens degrade to neutral. */
|
|
15
4
|
const selectFlavor = (f, fb) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
5
|
+
const c = (s) => fb
|
|
6
|
+
? s
|
|
7
|
+
? `var(--ty-color-${f}${s}, var(--ty-color-${f}, var(--ty-color-${fb}${s})))`
|
|
8
|
+
: `var(--ty-color-${f}, var(--ty-color-${fb}))`
|
|
9
|
+
: s
|
|
10
|
+
? `var(--ty-color-${f}${s}, var(--ty-color-${f}))`
|
|
11
|
+
: `var(--ty-color-${f})`;
|
|
12
|
+
return `
|
|
24
13
|
:host([flavor="${f}"]) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
--select-accent: var(--ty-input-${f}-border, ${c("-soft")});
|
|
15
|
+
--select-accent-bold: ${c("")};
|
|
16
|
+
--select-ring: color-mix(in oklab, ${c("")} 15%, transparent);
|
|
28
17
|
}
|
|
29
18
|
:host([flavor="${f}+"]) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
--select-accent: ${c("")};
|
|
20
|
+
--select-accent-bold: ${c("-strong")};
|
|
21
|
+
--select-ring: color-mix(in oklab, ${c("-strong")} 15%, transparent);
|
|
33
22
|
}
|
|
34
23
|
:host([flavor="${f}-"]) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
--select-accent: ${c("-faint")};
|
|
25
|
+
--select-accent-bold: ${c("-soft")};
|
|
26
|
+
--select-ring: color-mix(in oklab, ${c("-soft")} 15%, transparent);
|
|
38
27
|
}
|
|
39
28
|
`;
|
|
40
29
|
};
|
|
41
|
-
/** Rules for one custom (non-built-in) flavor — see utils/flavor-sheet.ts. */
|
|
42
30
|
export const selectCustomFlavorCss = (base) => selectFlavor(base, "neutral");
|
|
43
31
|
export const selectBaseStyles = `
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
${fieldSizeVars}
|
|
46
33
|
:host {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/* compact is a toolbar/filter-bar trigger — it must hug its own content so
|
|
54
|
-
it can sit inline next to other toolbar items, not claim a full row.
|
|
55
|
-
inline-block (not plain inline): a block box still ignores width and
|
|
56
|
-
collapses vertical margin, which is what we're fixing above. */
|
|
34
|
+
display: block;
|
|
35
|
+
width: 100%;
|
|
36
|
+
font-family: inherit;
|
|
37
|
+
--mobile-border-color: var(--ty-border, #5858587d);
|
|
38
|
+
}
|
|
57
39
|
:host([compact]) {
|
|
58
|
-
|
|
59
|
-
|
|
40
|
+
display: inline-block;
|
|
41
|
+
width: auto;
|
|
42
|
+
}
|
|
43
|
+
:host([has-trigger]) {
|
|
44
|
+
display: inline-block;
|
|
45
|
+
width: auto;
|
|
60
46
|
}
|
|
61
|
-
|
|
62
|
-
/* ===== DIALOG POSITIONING SUPPORT ===== */
|
|
63
|
-
|
|
64
47
|
.dropdown-dialog {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
48
|
+
position: fixed;
|
|
49
|
+
width: var(--dropdown-width, 200px);
|
|
50
|
+
max-width: 100vw;
|
|
51
|
+
margin: 0;
|
|
52
|
+
padding: 0;
|
|
53
|
+
border: none;
|
|
54
|
+
background: transparent;
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
padding: var(--dropdown-padding, 20px);
|
|
57
|
+
opacity: 0;
|
|
58
|
+
scale: 0.96;
|
|
59
|
+
translate: 0 -6px;
|
|
60
|
+
transform-origin: top center;
|
|
61
|
+
transition:
|
|
62
|
+
opacity var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),
|
|
63
|
+
scale var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),
|
|
64
|
+
translate var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1));
|
|
65
|
+
transform: translate(var(--dropdown-offset-x, 0px), var(--dropdown-offset-y, 0px));
|
|
66
|
+
top: -1000px;
|
|
67
|
+
left: -1000px;
|
|
68
|
+
}
|
|
86
69
|
.dropdown-dialog[open] {
|
|
87
|
-
|
|
88
|
-
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-direction: column;
|
|
89
72
|
}
|
|
90
|
-
|
|
91
|
-
/* Direction-based positioning with CSS classes */
|
|
92
73
|
.dropdown-dialog.position-below {
|
|
93
|
-
|
|
94
|
-
|
|
74
|
+
left: var(--dropdown-x);
|
|
75
|
+
top: var(--dropdown-y);
|
|
95
76
|
}
|
|
96
|
-
|
|
97
77
|
.dropdown-dialog.position-above {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
78
|
+
left: var(--dropdown-x);
|
|
79
|
+
bottom: var(--dropdown-y);
|
|
80
|
+
top: auto;
|
|
81
|
+
flex-direction: column-reverse;
|
|
82
|
+
translate: 0 6px;
|
|
83
|
+
transform-origin: bottom center;
|
|
102
84
|
}
|
|
103
|
-
|
|
104
85
|
.dropdown-dialog.position-above .dropdown-header {
|
|
105
|
-
|
|
86
|
+
margin-top: 4px;
|
|
106
87
|
}
|
|
107
|
-
|
|
108
88
|
.dropdown-dialog.position-below .dropdown-header {
|
|
109
|
-
|
|
89
|
+
margin-bottom: 4px;
|
|
110
90
|
}
|
|
111
|
-
|
|
112
91
|
.dropdown-dialog.position-below .dropdown-options {
|
|
113
|
-
|
|
114
|
-
|
|
92
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1), var(--ty-shadow-md);
|
|
93
|
+
}
|
|
94
|
+
.dropdown-dialog.position-above .dropdown-options {
|
|
95
|
+
transform: translateY(6px) scale(0.96);
|
|
96
|
+
transform-origin: bottom center;
|
|
97
|
+
}
|
|
98
|
+
.dropdown-dialog.open {
|
|
99
|
+
opacity: 1;
|
|
100
|
+
scale: 1;
|
|
101
|
+
translate: 0 0;
|
|
102
|
+
}
|
|
103
|
+
.dropdown-dialog.open .dropdown-options {
|
|
104
|
+
opacity: 1;
|
|
105
|
+
transform: translateY(0) scale(1);
|
|
115
106
|
}
|
|
116
|
-
|
|
117
|
-
/* Animate when .open class is added */
|
|
107
|
+
@starting-style {
|
|
118
108
|
.dropdown-dialog.open {
|
|
119
|
-
|
|
109
|
+
opacity: 0;
|
|
110
|
+
scale: 0.96;
|
|
111
|
+
translate: 0 -6px;
|
|
112
|
+
}
|
|
113
|
+
.dropdown-dialog.open.position-above {
|
|
114
|
+
translate: 0 6px;
|
|
120
115
|
}
|
|
121
|
-
|
|
122
116
|
.dropdown-dialog.open .dropdown-options {
|
|
123
|
-
|
|
124
|
-
|
|
117
|
+
opacity: 0;
|
|
118
|
+
transform: translateY(-6px) scale(0.96);
|
|
119
|
+
}
|
|
120
|
+
.dropdown-dialog.open.position-above .dropdown-options {
|
|
121
|
+
transform: translateY(6px) scale(0.96);
|
|
122
|
+
}
|
|
125
123
|
}
|
|
126
|
-
|
|
127
124
|
.dropdown-dialog::backdrop {
|
|
128
|
-
|
|
125
|
+
background: transparent;
|
|
129
126
|
}
|
|
130
|
-
|
|
131
|
-
/* ===== DIALOG HEADER ===== */
|
|
132
|
-
|
|
133
127
|
.dropdown-header {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
128
|
+
display: flex;
|
|
129
|
+
align-items: center;
|
|
130
|
+
gap: var(--ty-spacing-2);
|
|
131
|
+
position: relative;
|
|
138
132
|
}
|
|
139
|
-
|
|
140
133
|
.dropdown-search-input {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
134
|
+
font-family: inherit;
|
|
135
|
+
width: 100%;
|
|
136
|
+
min-width: 0;
|
|
137
|
+
box-sizing: border-box;
|
|
138
|
+
background: var(--input-bg, var(--ty-input-bg));
|
|
139
|
+
color: var(--input-color, var(--ty-input-color));
|
|
140
|
+
border: 1px solid var(--input-border, var(--ty-input-border));
|
|
141
|
+
border-radius: var(--ty-radius-md);
|
|
142
|
+
font-family: inherit;
|
|
143
|
+
font-size: var(--ty-font-sm);
|
|
144
|
+
line-height: var(--ty-leading-sm);
|
|
145
|
+
letter-spacing: var(--ty-tracking-sm);
|
|
146
|
+
font-weight: var(--ty-font-normal);
|
|
147
|
+
min-height: var(--ty-size-md);
|
|
148
|
+
padding: var(--ty-spacing-2) var(--ty-spacing-3);
|
|
149
|
+
padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
|
|
150
|
+
transition: var(--ty-transition-all);
|
|
151
|
+
outline: none;
|
|
152
|
+
}
|
|
160
153
|
.dropdown-search-input:focus {
|
|
161
|
-
|
|
162
|
-
|
|
154
|
+
border-color: var(--input-border-focus, var(--ty-input-border-focus));
|
|
155
|
+
box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
|
|
163
156
|
}
|
|
164
|
-
|
|
165
157
|
.dropdown-search-input:disabled {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
158
|
+
background-color: var(--input-disabled-bg, var(--ty-input-disabled-bg));
|
|
159
|
+
color: var(--input-disabled-color, var(--ty-input-disabled-color));
|
|
160
|
+
cursor: not-allowed;
|
|
161
|
+
opacity: 0.6;
|
|
170
162
|
}
|
|
171
|
-
|
|
172
163
|
.dropdown-search-input::placeholder {
|
|
173
|
-
|
|
164
|
+
color: var(--input-placeholder, var(--ty-input-placeholder));
|
|
174
165
|
}
|
|
175
|
-
|
|
176
166
|
.dropdown-search-chevron {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
|
|
167
|
+
position: absolute;
|
|
168
|
+
top: 50%;
|
|
169
|
+
right: var(--ty-spacing-3);
|
|
170
|
+
transform: translateY(-50%);
|
|
171
|
+
width: 1rem;
|
|
172
|
+
height: 1rem;
|
|
173
|
+
color: var(--input-placeholder, var(--ty-input-placeholder));
|
|
174
|
+
transition: var(--ty-transition-transform);
|
|
175
|
+
pointer-events: none;
|
|
176
|
+
}
|
|
188
177
|
.dropdown-search-chevron.open {
|
|
189
|
-
|
|
178
|
+
transform: translateY(-50%) rotate(180deg);
|
|
190
179
|
}
|
|
191
|
-
|
|
192
180
|
.dropdown-search-chevron svg {
|
|
193
|
-
|
|
194
|
-
|
|
181
|
+
width: 100%;
|
|
182
|
+
height: 100%;
|
|
183
|
+
}
|
|
184
|
+
.select-stub {
|
|
185
|
+
min-height: var(--ty-size-md);
|
|
186
|
+
display: flex;
|
|
187
|
+
flex-wrap: wrap;
|
|
188
|
+
gap: 0.25rem;
|
|
189
|
+
align-items: center;
|
|
190
|
+
padding: 0 2.5rem 0 0.75rem;
|
|
191
|
+
transition: var(--ty-transition-all), opacity 0.2s ease;
|
|
192
|
+
outline: none;
|
|
193
|
+
background: var(--input-bg, var(--ty-input-bg));
|
|
194
|
+
color: var(--input-color, var(--ty-input-color));
|
|
195
|
+
border: 1px solid var(--select-accent, var(--input-border, var(--ty-input-border)));
|
|
196
|
+
border-radius: var(--ty-radius-md);
|
|
197
|
+
font-family: inherit;
|
|
198
|
+
font-size: var(--ty-field-font);
|
|
199
|
+
line-height: var(--ty-field-leading);
|
|
200
|
+
letter-spacing: var(--ty-field-tracking);
|
|
201
|
+
cursor: pointer;
|
|
202
|
+
position: relative;
|
|
203
|
+
width: 100%;
|
|
204
|
+
box-sizing: border-box;
|
|
195
205
|
}
|
|
196
|
-
|
|
197
|
-
/* ===== SELECT FIELD-SPECIFIC STYLES ===== */
|
|
198
|
-
|
|
199
|
-
/* Select stub modifications */
|
|
200
206
|
.select-stub {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
gap: 0.25rem;
|
|
205
|
-
align-items: center;
|
|
206
|
-
padding: 0 2.5rem 0 0.75rem;
|
|
207
|
-
/* Transitions - includes opacity for open state */
|
|
208
|
-
transition: var(--ty-transition-all), opacity 0.2s ease;
|
|
209
|
-
outline: none;
|
|
210
|
-
background: var(--input-bg, var(--ty-input-bg));
|
|
211
|
-
color: var(--input-color, var(--ty-input-color));
|
|
212
|
-
border: 1px solid var(--select-accent, var(--input-border, var(--ty-input-border)));
|
|
213
|
-
border-radius: var(--ty-radius-md);
|
|
214
|
-
font-family: var(--ty-font-sans);
|
|
215
|
-
font-size: var(--ty-font-sm);
|
|
216
|
-
line-height: var(--ty-leading-sm);
|
|
217
|
-
letter-spacing: var(--ty-tracking-sm);
|
|
218
|
-
cursor: pointer;
|
|
219
|
-
position: relative;
|
|
220
|
-
width: 100%;
|
|
221
|
-
box-sizing: border-box;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/* ===== SIZE MODIFIERS =====
|
|
225
|
-
buildStubClasses() always stamps exactly one size class on .select-stub.
|
|
226
|
-
min-height comes from the shared --ty-size-* tokens (same ones ty-input
|
|
227
|
-
and ty-date-picker consume) so a given size is the same height on every
|
|
228
|
-
field. Right padding stays 2.5rem for chevron room. Zero vertical
|
|
229
|
-
padding — same fix as ty-input: with align-items:center on a flex
|
|
230
|
-
container, ANY vertical padding adds on top of min-height instead of
|
|
231
|
-
being absorbed by it, so a padded stub silently overflows past the
|
|
232
|
-
shared field height (measured +3px at sm/md before this was zeroed).
|
|
233
|
-
min-height + centering alone gets the exact height. */
|
|
234
|
-
.select-stub.sm {
|
|
235
|
-
min-height: var(--ty-size-sm);
|
|
236
|
-
padding: 0 2.5rem 0 0.625rem;
|
|
237
|
-
font-size: var(--ty-font-sm);
|
|
238
|
-
line-height: var(--ty-leading-sm);
|
|
239
|
-
letter-spacing: var(--ty-tracking-sm);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/* md matches the base rule; listed for parity/overrides */
|
|
243
|
-
.select-stub.md {
|
|
244
|
-
min-height: var(--ty-size-md);
|
|
245
|
-
padding: 0 2.5rem 0 0.75rem;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
.select-stub.lg {
|
|
249
|
-
min-height: var(--ty-size-lg);
|
|
250
|
-
padding: 0 2.5rem 0 0.875rem;
|
|
251
|
-
font-size: var(--ty-font-base);
|
|
252
|
-
line-height: var(--ty-leading-base);
|
|
253
|
-
letter-spacing: var(--ty-tracking-base);
|
|
254
|
-
}
|
|
255
|
-
|
|
207
|
+
min-height: var(--ty-field-height);
|
|
208
|
+
padding: 0 2.5rem 0 var(--ty-field-pad-x);
|
|
209
|
+
}
|
|
256
210
|
.select-stub:hover {
|
|
257
|
-
|
|
211
|
+
border-color: var(--select-accent-bold, var(--input-border-hover, var(--ty-input-border-hover)));
|
|
258
212
|
}
|
|
259
|
-
|
|
260
213
|
.select-stub[disabled] {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
214
|
+
background-color: var(--input-disabled-bg, var(--ty-input-disabled-bg));
|
|
215
|
+
color: var(--input-disabled-color, var(--ty-input-disabled-color));
|
|
216
|
+
cursor: not-allowed;
|
|
217
|
+
opacity: 0.6;
|
|
265
218
|
}
|
|
266
|
-
|
|
267
|
-
/* Hide stub when dropdown is open */
|
|
268
219
|
.dropdown-wrapper:has(.dropdown-chevron.open) .select-stub {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/* Open state — same escalation as ty-input's .focused: bolder border + ring.
|
|
274
|
-
Applies whenever the stub stays visible while open (field skin without
|
|
275
|
-
the opacity-hide above kicking in — e.g. single-select with no tags).
|
|
276
|
-
:not(.custom-trigger) — that skin has its own unconditional box-shadow:
|
|
277
|
-
none reset below; excluding it here keeps the two rules from competing
|
|
278
|
-
on specificity (:has()/:not() here would otherwise outrank it).
|
|
279
|
-
:not(:has(search:focus)) — the search row auto-focuses on open, which
|
|
280
|
-
already carries its own real :focus ring (below); without this guard the
|
|
281
|
-
stub's "fake" open-ring stacks on top of it, and the field reads as two
|
|
282
|
-
simultaneously-focused controls. Real focus wins; the stub ring is only
|
|
283
|
-
for select skins that have nothing else to show it. */
|
|
220
|
+
opacity: 0;
|
|
221
|
+
pointer-events: none;
|
|
222
|
+
}
|
|
284
223
|
.dropdown-wrapper:has(.dropdown-chevron.open):not(:has(.dropdown-search-input:focus)) .select-stub:not(.custom-trigger),
|
|
285
224
|
.select-stub:focus,
|
|
286
225
|
.select-stub:focus-visible {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/* Custom trigger (slot="trigger"): setupTriggerSlot() toggles this class when
|
|
292
|
-
the consumer assigns their own content — the slot's fallback (start/selected/
|
|
293
|
-
placeholder/end/chevron, i.e. the whole default field skin) is entirely
|
|
294
|
-
replaced at that point, so the wrapping .select-stub itself must go bare.
|
|
295
|
-
Without this, the stub's own border/background/padding and the open/focus
|
|
296
|
-
ring above still wrapped the custom content in a second, unwanted outline. */
|
|
226
|
+
border-color: var(--select-accent-bold, var(--input-border-focus, var(--ty-input-border-focus)));
|
|
227
|
+
box-shadow: 0 0 0 3px var(--select-ring, var(--input-shadow-focus, var(--ty-input-shadow-focus)));
|
|
228
|
+
}
|
|
297
229
|
.select-stub.custom-trigger {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
230
|
+
min-height: 0;
|
|
231
|
+
padding: 0;
|
|
232
|
+
border: none;
|
|
233
|
+
background: transparent;
|
|
302
234
|
}
|
|
303
235
|
.select-stub.custom-trigger:hover,
|
|
304
236
|
.dropdown-wrapper:has(.dropdown-chevron.open) .select-stub.custom-trigger,
|
|
305
237
|
.select-stub.custom-trigger:focus,
|
|
306
238
|
.select-stub.custom-trigger:focus-visible {
|
|
307
|
-
|
|
308
|
-
|
|
239
|
+
border-color: transparent;
|
|
240
|
+
box-shadow: none;
|
|
309
241
|
}
|
|
310
|
-
|
|
311
|
-
/* Hide stub chips when mobile dialog is open (let modal show them) */
|
|
312
242
|
.dropdown-mode-mobile .dropdown-wrapper:has(.mobile-dialog[open]) .select-chips {
|
|
313
|
-
|
|
243
|
+
display: none;
|
|
314
244
|
}
|
|
315
|
-
|
|
316
|
-
/* When tags are present, reduce padding to make room */
|
|
317
245
|
.select-stub.has-tags {
|
|
318
|
-
|
|
319
|
-
|
|
246
|
+
padding: 0.25rem 2.5rem 0.25rem 0.5rem;
|
|
247
|
+
width: 100%;
|
|
320
248
|
}
|
|
321
|
-
|
|
322
249
|
.select-stub.has-tags slot[name="selected"] {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
250
|
+
display: flex;
|
|
251
|
+
flex-wrap: wrap;
|
|
252
|
+
gap: 0.25rem;
|
|
326
253
|
}
|
|
327
|
-
|
|
328
|
-
/* ===== CHEVRON INDICATOR ===== */
|
|
329
|
-
|
|
330
254
|
.dropdown-chevron {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
}
|
|
341
|
-
|
|
255
|
+
position: absolute;
|
|
256
|
+
top: 50%;
|
|
257
|
+
right: var(--ty-spacing-3);
|
|
258
|
+
transform: translateY(-50%);
|
|
259
|
+
width: 1rem;
|
|
260
|
+
height: 1rem;
|
|
261
|
+
color: var(--input-placeholder, var(--ty-input-placeholder));
|
|
262
|
+
transition: var(--ty-transition-transform);
|
|
263
|
+
pointer-events: none;
|
|
264
|
+
}
|
|
342
265
|
.dropdown-chevron.open {
|
|
343
|
-
|
|
266
|
+
transform: translateY(-50%) rotate(180deg);
|
|
344
267
|
}
|
|
345
|
-
|
|
346
268
|
.dropdown-chevron svg {
|
|
347
|
-
|
|
348
|
-
|
|
269
|
+
width: 100%;
|
|
270
|
+
height: 100%;
|
|
349
271
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
/* Tags container */
|
|
353
272
|
.select-chips {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
273
|
+
display: flex;
|
|
274
|
+
flex-wrap: wrap;
|
|
275
|
+
gap: 0.5rem;
|
|
276
|
+
align-items: center;
|
|
277
|
+
min-width: 0;
|
|
359
278
|
}
|
|
360
|
-
|
|
361
279
|
.dropdown-placeholder {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
/* Placeholder styling when tags are present */
|
|
280
|
+
color: var(--input-placeholder, var(--ty-input-placeholder, #9ca3af));
|
|
281
|
+
font-size: var(--ty-field-font);
|
|
282
|
+
line-height: var(--ty-field-leading);
|
|
283
|
+
letter-spacing: var(--ty-field-tracking);
|
|
284
|
+
font-weight: var(--ty-font-light);
|
|
285
|
+
font-style: italic;
|
|
286
|
+
}
|
|
372
287
|
.dropdown-placeholder.hidden {
|
|
373
|
-
|
|
288
|
+
display: none;
|
|
374
289
|
}
|
|
375
|
-
|
|
376
|
-
/* Options area styling - Override for select */
|
|
377
290
|
.dropdown-options {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
404
|
-
transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
405
|
-
|
|
406
|
-
/* Select-specific: flex wrap for tags */
|
|
407
|
-
display: flex;
|
|
408
|
-
flex-wrap: wrap;
|
|
409
|
-
padding: 0.5rem;
|
|
410
|
-
gap: 0.5rem;
|
|
411
|
-
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
/* Hide native scrollbar only when custom scrollbar is active */
|
|
291
|
+
opacity: 0;
|
|
292
|
+
background: var(--ty-surface-floating);
|
|
293
|
+
border: 1px solid var(--ty-floating-border);
|
|
294
|
+
border-radius: var(--ty-radius-lg);
|
|
295
|
+
max-height: 16rem;
|
|
296
|
+
width: 100%;
|
|
297
|
+
max-width: 100%;
|
|
298
|
+
overflow-x: hidden;
|
|
299
|
+
overflow-y: auto;
|
|
300
|
+
scroll-behavior: smooth;
|
|
301
|
+
box-sizing: border-box;
|
|
302
|
+
position: relative;
|
|
303
|
+
box-shadow:
|
|
304
|
+
0 20px 25px -5px rgba(0, 0, 0, 0.1),
|
|
305
|
+
0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
306
|
+
transform: translateY(-6px) scale(0.96);
|
|
307
|
+
transform-origin: top center;
|
|
308
|
+
transition:
|
|
309
|
+
opacity var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),
|
|
310
|
+
transform var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1));
|
|
311
|
+
display: flex;
|
|
312
|
+
flex-wrap: wrap;
|
|
313
|
+
padding: 0.5rem;
|
|
314
|
+
gap: 0.5rem;
|
|
315
|
+
}
|
|
415
316
|
.dropdown-options.ty-custom-scroll {
|
|
416
|
-
|
|
417
|
-
|
|
317
|
+
scrollbar-width: none;
|
|
318
|
+
-ms-overflow-style: none;
|
|
418
319
|
}
|
|
419
|
-
|
|
420
320
|
.dropdown-options.ty-custom-scroll::-webkit-scrollbar {
|
|
421
|
-
|
|
321
|
+
display: none;
|
|
422
322
|
}
|
|
423
|
-
|
|
424
|
-
/* Options wrapper - positioned container for scrollbar track */
|
|
425
323
|
.dropdown-options-wrapper {
|
|
426
|
-
|
|
324
|
+
position: relative;
|
|
427
325
|
}
|
|
428
|
-
|
|
429
|
-
/* Show custom scrollbar on hover */
|
|
430
326
|
.dropdown-options-wrapper:hover .ty-scrollbar-track-y.has-overflow {
|
|
431
|
-
|
|
327
|
+
opacity: 1;
|
|
432
328
|
}
|
|
433
|
-
|
|
434
|
-
/* Make ty-tags in dropdown clickable with pointer cursor */
|
|
435
329
|
.dropdown-options ty-tag {
|
|
436
|
-
|
|
437
|
-
|
|
330
|
+
user-select: none;
|
|
331
|
+
transition: transform 0.1s ease;
|
|
438
332
|
}
|
|
439
|
-
|
|
440
333
|
.dropdown-options ty-tag:hover {
|
|
441
|
-
|
|
334
|
+
transform: scale(1.02);
|
|
442
335
|
}
|
|
443
|
-
|
|
444
336
|
.dropdown-options ty-tag:active {
|
|
445
|
-
|
|
337
|
+
transform: scale(0.98);
|
|
446
338
|
}
|
|
447
|
-
|
|
448
|
-
/* Visual feedback for selected tags in options */
|
|
449
339
|
.dropdown-options ty-tag[selected] {
|
|
450
|
-
|
|
340
|
+
opacity: 0.5;
|
|
451
341
|
}
|
|
452
|
-
|
|
453
|
-
/* Ensure ty-tag components in the select field have proper sizing */
|
|
454
342
|
.select-chips ty-tag {
|
|
455
|
-
|
|
343
|
+
max-width: 150px;
|
|
456
344
|
}
|
|
457
|
-
|
|
458
|
-
/* Responsive adjustments */
|
|
459
345
|
@media (max-width: 640px) {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
346
|
+
.select-chips ty-tag {
|
|
347
|
+
max-width: 100px;
|
|
348
|
+
}
|
|
463
349
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
/* Ensure proper spacing in container layouts */
|
|
467
350
|
.select-container {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
margin-bottom (6px), same as ty-input/ty-date-picker/ty-textarea.
|
|
472
|
-
A flex gap would STACK on that margin (flex margins don't collapse),
|
|
473
|
-
which is exactly the 4px misalignment this used to cause. */
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
/* ===== DROPDOWN WRAPPER & LABEL ===== */
|
|
477
|
-
|
|
351
|
+
display: flex;
|
|
352
|
+
flex-direction: column;
|
|
353
|
+
}
|
|
478
354
|
.dropdown-wrapper {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
355
|
+
position: relative;
|
|
356
|
+
display: block;
|
|
357
|
+
width: 100%;
|
|
482
358
|
}
|
|
483
|
-
|
|
484
359
|
.ty-field-label {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
/* Required indicator - using SVG icon */
|
|
360
|
+
font-size: var(--ty-field-label-font);
|
|
361
|
+
line-height: var(--ty-field-label-leading);
|
|
362
|
+
letter-spacing: var(--ty-tracking-sm);
|
|
363
|
+
font-weight: var(--ty-font-medium);
|
|
364
|
+
color: var(--ty-label-color);
|
|
365
|
+
margin-bottom: var(--ty-field-label-gap);
|
|
366
|
+
padding-left: var(--ty-field-outer-pad-x);
|
|
367
|
+
display: flex;
|
|
368
|
+
align-items: center;
|
|
369
|
+
}
|
|
497
370
|
.required-icon {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
}
|
|
506
|
-
|
|
371
|
+
display: inline-flex;
|
|
372
|
+
align-items: center;
|
|
373
|
+
color: #ef4444;
|
|
374
|
+
width: 12px;
|
|
375
|
+
height: 12px;
|
|
376
|
+
vertical-align: middle;
|
|
377
|
+
margin-left: 4px;
|
|
378
|
+
}
|
|
507
379
|
.required-icon svg {
|
|
508
|
-
|
|
509
|
-
|
|
380
|
+
width: 100%;
|
|
381
|
+
height: 100%;
|
|
510
382
|
}
|
|
511
|
-
|
|
512
383
|
:host([disabled]) .select-container {
|
|
513
|
-
|
|
384
|
+
pointer-events: none;
|
|
514
385
|
}
|
|
515
|
-
|
|
516
|
-
/* ============================================================================
|
|
517
|
-
MOBILE MODAL STYLES
|
|
518
|
-
============================================================================ */
|
|
519
|
-
|
|
520
386
|
.dropdown-mode-mobile .mobile-dialog {
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
/* Note: Don't set display - browser controls <dialog> visibility */
|
|
541
|
-
align-items: flex-start;
|
|
542
|
-
justify-content: center;
|
|
543
|
-
opacity: 0;
|
|
544
|
-
transition: opacity 300ms ease;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
/* When opened via showModal(), add flex layout */
|
|
387
|
+
position: fixed;
|
|
388
|
+
top: 0;
|
|
389
|
+
left: 0;
|
|
390
|
+
right: 0;
|
|
391
|
+
bottom: 0;
|
|
392
|
+
width: 100vw;
|
|
393
|
+
height: 100dvh;
|
|
394
|
+
max-width: 100vw;
|
|
395
|
+
max-height: 100dvh;
|
|
396
|
+
margin: 0;
|
|
397
|
+
padding: 0;
|
|
398
|
+
padding-top: 6dvh;
|
|
399
|
+
border: none;
|
|
400
|
+
background: transparent;
|
|
401
|
+
align-items: flex-start;
|
|
402
|
+
justify-content: center;
|
|
403
|
+
opacity: 0;
|
|
404
|
+
transition: opacity 300ms ease;
|
|
405
|
+
}
|
|
548
406
|
.dropdown-mode-mobile .mobile-dialog[open] {
|
|
549
|
-
|
|
407
|
+
display: flex;
|
|
550
408
|
}
|
|
551
|
-
|
|
552
409
|
.dropdown-mode-mobile .mobile-dialog.open {
|
|
553
|
-
|
|
410
|
+
opacity: 1;
|
|
554
411
|
}
|
|
555
|
-
|
|
556
|
-
/* Native dialog backdrop with blur */
|
|
557
412
|
.dropdown-mode-mobile .mobile-dialog::backdrop {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
backdrop-filter: blur(8px);
|
|
562
|
-
-webkit-backdrop-filter: blur(8px);
|
|
413
|
+
background: rgba(0, 0, 0, 0.65);
|
|
414
|
+
backdrop-filter: blur(8px);
|
|
415
|
+
-webkit-backdrop-filter: blur(8px);
|
|
563
416
|
}
|
|
564
|
-
|
|
565
417
|
.dropdown-mode-mobile .mobile-dialog-content {
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
}
|
|
579
|
-
|
|
418
|
+
position: relative;
|
|
419
|
+
display: flex;
|
|
420
|
+
flex-direction: column;
|
|
421
|
+
width: calc(100% - 32px);
|
|
422
|
+
max-width: 400px;
|
|
423
|
+
min-height: 200px;
|
|
424
|
+
max-height: 90dvh;
|
|
425
|
+
opacity: 0;
|
|
426
|
+
transform: scale(0.95);
|
|
427
|
+
transition:
|
|
428
|
+
opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
429
|
+
transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
430
|
+
}
|
|
580
431
|
.dropdown-mode-mobile .mobile-dialog.open .mobile-dialog-content {
|
|
581
|
-
|
|
582
|
-
|
|
432
|
+
opacity: 1;
|
|
433
|
+
transform: scale(1);
|
|
583
434
|
}
|
|
584
|
-
|
|
585
435
|
.dropdown-mode-mobile .mobile-search-input:focus {
|
|
586
|
-
|
|
436
|
+
border-color: var(--ty-border);
|
|
587
437
|
}
|
|
588
|
-
|
|
589
|
-
/* Mobile search header - label floats above, search + close below */
|
|
590
438
|
.dropdown-mode-mobile .mobile-search-header {
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
}
|
|
599
|
-
|
|
439
|
+
flex-shrink: 0;
|
|
440
|
+
display: flex;
|
|
441
|
+
flex-direction: column;
|
|
442
|
+
margin-bottom: 16px;
|
|
443
|
+
padding: 0;
|
|
444
|
+
background: transparent;
|
|
445
|
+
position: relative;
|
|
446
|
+
}
|
|
600
447
|
.dropdown-mode-mobile .mobile-header-content {
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
without this it falls back to flex-start and strands the button on the
|
|
608
|
-
left. Harmless when search IS shown: the input's flex:1 already
|
|
609
|
-
consumes all remaining space, so justify-content never gets a say. */
|
|
610
|
-
justify-content: flex-end;
|
|
611
|
-
}
|
|
612
|
-
|
|
448
|
+
display: flex;
|
|
449
|
+
align-items: center;
|
|
450
|
+
gap: 12px;
|
|
451
|
+
width: 100%;
|
|
452
|
+
justify-content: flex-end;
|
|
453
|
+
}
|
|
613
454
|
.dropdown-mode-mobile .mobile-header-label {
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
a dark blurred backdrop is the wrong combination. Fixed white, same
|
|
626
|
-
reasoning as ty-tooltip's deliberately theme-independent default in
|
|
627
|
-
tyrell.css — this element's job is to pop against a dark backdrop in
|
|
628
|
-
both themes, not to track the page's light/dark state. */
|
|
629
|
-
color: #ffffff;
|
|
630
|
-
pointer-events: none;
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
/* Close button — borderless ghost icon button (was a bordered circle badge,
|
|
634
|
-
which read as a heavy, disconnected "chip" next to the plain search icon).
|
|
635
|
-
Matches ty-button's ghost treatment: transparent at rest, soft neutral
|
|
636
|
-
fill on hover/active, no border ever. */
|
|
455
|
+
position: absolute;
|
|
456
|
+
bottom: 100%;
|
|
457
|
+
left: 2px;
|
|
458
|
+
margin-bottom: 8px;
|
|
459
|
+
font-size: var(--ty-font-base);
|
|
460
|
+
line-height: var(--ty-leading-base);
|
|
461
|
+
letter-spacing: var(--ty-tracking-base);
|
|
462
|
+
font-weight: 600;
|
|
463
|
+
color: #ffffff;
|
|
464
|
+
pointer-events: none;
|
|
465
|
+
}
|
|
637
466
|
.dropdown-mode-mobile .mobile-close-button {
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
transition: var(--ty-transition-all);
|
|
653
|
-
padding: 0;
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
/* Hover/active fills also go fixed-white-tinted rather than theme neutral —
|
|
657
|
-
--ty-bg-neutral-soft is a LIGHT fill in light mode, which would swallow
|
|
658
|
-
the white icon it's meant to sit behind. */
|
|
467
|
+
flex-shrink: 0;
|
|
468
|
+
width: 32px;
|
|
469
|
+
height: 32px;
|
|
470
|
+
display: flex;
|
|
471
|
+
align-items: center;
|
|
472
|
+
justify-content: center;
|
|
473
|
+
background: transparent;
|
|
474
|
+
border: none;
|
|
475
|
+
border-radius: 50%;
|
|
476
|
+
color: #ffffff;
|
|
477
|
+
cursor: pointer;
|
|
478
|
+
transition: var(--ty-transition-all);
|
|
479
|
+
padding: 0;
|
|
480
|
+
}
|
|
659
481
|
.dropdown-mode-mobile .mobile-close-button:hover {
|
|
660
|
-
|
|
661
|
-
|
|
482
|
+
background: rgba(255, 255, 255, 0.15);
|
|
483
|
+
color: #ffffff;
|
|
662
484
|
}
|
|
663
|
-
|
|
664
485
|
.dropdown-mode-mobile .mobile-close-button:active {
|
|
665
|
-
|
|
666
|
-
|
|
486
|
+
transform: scale(0.9);
|
|
487
|
+
background: rgba(255, 255, 255, 0.25);
|
|
667
488
|
}
|
|
668
|
-
|
|
669
489
|
.dropdown-mode-mobile .mobile-close-button svg {
|
|
670
|
-
|
|
671
|
-
|
|
490
|
+
width: 18px;
|
|
491
|
+
height: 18px;
|
|
672
492
|
}
|
|
673
|
-
|
|
674
|
-
/* Mobile search input (matches dropdown.ts) */
|
|
675
493
|
.dropdown-mode-mobile .mobile-search-input {
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
494
|
+
font-family: inherit;
|
|
495
|
+
flex: 1;
|
|
496
|
+
min-width: 0;
|
|
497
|
+
box-sizing: border-box;
|
|
498
|
+
background: var(--ty-surface-floating);
|
|
499
|
+
color: var(--ty-text);
|
|
500
|
+
border: 2px solid;
|
|
501
|
+
border-color: var(--mobile-border-color);
|
|
502
|
+
border-radius: var(--ty-radius-md);
|
|
503
|
+
font-family: inherit;
|
|
504
|
+
font-size: var(--ty-font-sm);
|
|
505
|
+
line-height: var(--ty-leading-sm);
|
|
506
|
+
letter-spacing: var(--ty-tracking-sm);
|
|
507
|
+
font-weight: var(--ty-font-normal);
|
|
508
|
+
padding: var(--ty-spacing-2) var(--ty-spacing-3);
|
|
509
|
+
height: 40px;
|
|
510
|
+
transition: var(--ty-transition-all);
|
|
511
|
+
outline: none;
|
|
512
|
+
}
|
|
695
513
|
.dropdown-mode-mobile .mobile-search-input::placeholder {
|
|
696
|
-
|
|
514
|
+
color: var(--ty-text-faint);
|
|
697
515
|
}
|
|
698
|
-
|
|
699
516
|
.dropdown-mode-mobile .mobile-search-input:focus {
|
|
700
|
-
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
/* ============================================================================
|
|
704
|
-
MOBILE BODY & SECTIONS - UPDATED STRUCTURE
|
|
705
|
-
============================================================================ */
|
|
706
|
-
|
|
707
|
-
/* Mobile body - contains both sections */
|
|
517
|
+
border-color: var(--ty-border);
|
|
518
|
+
}
|
|
708
519
|
.dropdown-mode-mobile .mobile-body {
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
/* ===== SECTION HEADERS - Labels, not buttons ===== */
|
|
725
|
-
|
|
520
|
+
position: relative;
|
|
521
|
+
display: flex;
|
|
522
|
+
flex-direction: column;
|
|
523
|
+
height: var(--body-height, 350px);
|
|
524
|
+
max-height: 350px;
|
|
525
|
+
overflow: hidden;
|
|
526
|
+
background: var(--ty-surface-floating);
|
|
527
|
+
border-radius: var(--ty-radius-lg);
|
|
528
|
+
box-shadow:
|
|
529
|
+
0 20px 25px -5px rgba(0, 0, 0, 0.1),
|
|
530
|
+
0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
531
|
+
border: 2px solid;
|
|
532
|
+
border-color: var(--mobile-border-color);
|
|
533
|
+
}
|
|
726
534
|
.dropdown-mode-mobile .section-header {
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
}
|
|
742
|
-
|
|
535
|
+
display: flex;
|
|
536
|
+
align-items: center;
|
|
537
|
+
justify-content: space-between;
|
|
538
|
+
height: 36px;
|
|
539
|
+
flex-shrink: 0;
|
|
540
|
+
padding: 0 16px;
|
|
541
|
+
font-size: 11px;
|
|
542
|
+
font-weight: 600;
|
|
543
|
+
text-transform: uppercase;
|
|
544
|
+
letter-spacing: 0.06em;
|
|
545
|
+
color: var(--ty-text-bold);
|
|
546
|
+
background: transparent;
|
|
547
|
+
cursor: default;
|
|
548
|
+
user-select: none;
|
|
549
|
+
}
|
|
743
550
|
.dropdown-mode-mobile .section-header .section-title {
|
|
744
|
-
|
|
551
|
+
flex: 1;
|
|
745
552
|
}
|
|
746
|
-
|
|
747
553
|
.dropdown-mode-mobile .section-header .section-count {
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
554
|
+
font-weight: 500;
|
|
555
|
+
color: var(--ty-text-faint);
|
|
556
|
+
margin-left: 0.25rem;
|
|
557
|
+
}
|
|
558
|
+
.dropdown-mode-mobile .mobile-body .section-header {
|
|
559
|
+
height: 36px;
|
|
560
|
+
flex: 0 0 36px;
|
|
561
|
+
}
|
|
562
|
+
.dropdown-mode-mobile .mobile-selected-section,
|
|
563
|
+
.dropdown-mode-mobile .mobile-available-section {
|
|
564
|
+
display: flex;
|
|
565
|
+
flex-direction: column;
|
|
566
|
+
background: var(--ty-input-bg);
|
|
567
|
+
overflow: hidden;
|
|
568
|
+
min-height: 36px;
|
|
569
|
+
flex: 0 1 36px;
|
|
570
|
+
transition: flex-grow 220ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
571
|
+
}
|
|
572
|
+
.dropdown-mode-mobile .mobile-body[data-expanded="selected"] .mobile-selected-section,
|
|
573
|
+
.dropdown-mode-mobile .mobile-body[data-expanded="available"] .mobile-available-section {
|
|
574
|
+
flex-grow: 1;
|
|
575
|
+
}
|
|
766
576
|
.dropdown-mode-mobile .mobile-selected-section[data-empty="true"] {
|
|
767
|
-
|
|
768
|
-
flex: 0 0 36px;
|
|
577
|
+
flex-grow: 0;
|
|
769
578
|
}
|
|
770
|
-
|
|
771
579
|
.dropdown-mode-mobile .mobile-selected-section .section-content {
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
/* ===== AVAILABLE LIST - takes remaining space ===== */
|
|
787
|
-
|
|
788
|
-
.dropdown-mode-mobile .mobile-available-section {
|
|
789
|
-
display: flex;
|
|
790
|
-
flex-direction: column;
|
|
791
|
-
background: var(--ty-input-bg);
|
|
792
|
-
overflow: hidden;
|
|
793
|
-
flex: 1 1 auto;
|
|
794
|
-
min-height: 0;
|
|
795
|
-
}
|
|
796
|
-
|
|
580
|
+
flex: 1;
|
|
581
|
+
min-height: 0;
|
|
582
|
+
overflow-y: auto;
|
|
583
|
+
overscroll-behavior: contain;
|
|
584
|
+
padding: 0.75rem 1rem;
|
|
585
|
+
display: flex;
|
|
586
|
+
flex-wrap: wrap;
|
|
587
|
+
gap: 0.5rem;
|
|
588
|
+
align-content: flex-start;
|
|
589
|
+
-webkit-mask-image: linear-gradient(to bottom, black calc(100% - 12px), transparent);
|
|
590
|
+
mask-image: linear-gradient(to bottom, black calc(100% - 12px), transparent);
|
|
591
|
+
}
|
|
797
592
|
.dropdown-mode-mobile .mobile-available-section .section-content {
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
593
|
+
flex: 1;
|
|
594
|
+
min-height: 0;
|
|
595
|
+
overflow-y: auto;
|
|
596
|
+
overscroll-behavior: contain;
|
|
597
|
+
padding: 0.75rem 1rem;
|
|
598
|
+
display: flex;
|
|
599
|
+
flex-wrap: wrap;
|
|
600
|
+
gap: 0.5rem;
|
|
601
|
+
align-content: flex-start;
|
|
602
|
+
}
|
|
603
|
+
@media (prefers-reduced-motion: reduce) {
|
|
604
|
+
.dropdown-mode-mobile .mobile-selected-section,
|
|
605
|
+
.dropdown-mode-mobile .mobile-available-section {
|
|
606
|
+
transition: none;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
.dropdown-mode-mobile .mobile-body .section-header {
|
|
610
|
+
display: flex;
|
|
611
|
+
align-items: center;
|
|
612
|
+
justify-content: space-between;
|
|
613
|
+
width: 100%;
|
|
614
|
+
border: none;
|
|
615
|
+
background: transparent;
|
|
616
|
+
font: inherit;
|
|
617
|
+
text-align: left;
|
|
618
|
+
cursor: pointer;
|
|
619
|
+
-webkit-tap-highlight-color: transparent;
|
|
620
|
+
}
|
|
621
|
+
.dropdown-mode-mobile .mobile-body .section-header svg {
|
|
622
|
+
width: 1rem;
|
|
623
|
+
height: 1rem;
|
|
624
|
+
flex-shrink: 0;
|
|
625
|
+
opacity: 0.5;
|
|
626
|
+
transition: transform 180ms ease;
|
|
627
|
+
}
|
|
628
|
+
.dropdown-mode-mobile .mobile-body .section-header[aria-expanded="true"] svg {
|
|
629
|
+
transform: rotate(180deg);
|
|
630
|
+
}
|
|
631
|
+
.dropdown-mode-mobile .mobile-selected-section[data-empty="true"] .section-header {
|
|
632
|
+
cursor: default;
|
|
633
|
+
}
|
|
634
|
+
.dropdown-mode-mobile .mobile-selected-section[data-empty="true"] .section-header svg {
|
|
635
|
+
display: none;
|
|
636
|
+
}
|
|
637
|
+
.dropdown-mode-mobile .mobile-selected-chip {
|
|
638
|
+
display: inline-flex;
|
|
639
|
+
align-items: center;
|
|
640
|
+
gap: 0.375rem;
|
|
641
|
+
padding: 0.25rem 0.5rem 0.25rem 0.625rem;
|
|
642
|
+
border: 1px solid var(--ty-border);
|
|
643
|
+
border-radius: 9999px;
|
|
644
|
+
background: var(--ty-surface-content);
|
|
645
|
+
color: var(--ty-text);
|
|
646
|
+
font: inherit;
|
|
647
|
+
font-size: var(--ty-font-sm);
|
|
648
|
+
line-height: var(--ty-leading-sm);
|
|
649
|
+
cursor: pointer;
|
|
650
|
+
transition: transform 0.1s ease, border-color 0.15s ease;
|
|
651
|
+
animation: ty-select-tag-enter 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
652
|
+
}
|
|
653
|
+
.dropdown-mode-mobile .mobile-selected-chip svg {
|
|
654
|
+
width: 0.875rem;
|
|
655
|
+
height: 0.875rem;
|
|
656
|
+
flex-shrink: 0;
|
|
657
|
+
opacity: 0.6;
|
|
658
|
+
}
|
|
659
|
+
@media (hover: hover) {
|
|
660
|
+
.dropdown-mode-mobile .mobile-selected-chip:hover {
|
|
661
|
+
border-color: var(--ty-text-soft);
|
|
662
|
+
}
|
|
663
|
+
.dropdown-mode-mobile .mobile-selected-chip:hover svg {
|
|
664
|
+
opacity: 1;
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
.dropdown-mode-mobile .mobile-selected-chip:active {
|
|
668
|
+
transform: scale(0.96);
|
|
669
|
+
}
|
|
813
670
|
.dropdown-mode-mobile .empty-state {
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
}
|
|
824
|
-
|
|
671
|
+
display: none;
|
|
672
|
+
width: 100%;
|
|
673
|
+
padding: 2rem 1rem;
|
|
674
|
+
text-align: center;
|
|
675
|
+
color: var(--ty-text-faint);
|
|
676
|
+
font-size: var(--ty-font-sm);
|
|
677
|
+
line-height: var(--ty-leading-sm);
|
|
678
|
+
letter-spacing: var(--ty-tracking-sm);
|
|
679
|
+
font-style: italic;
|
|
680
|
+
}
|
|
825
681
|
.dropdown-mode-mobile .mobile-available-section[data-empty="true"] .empty-state {
|
|
826
|
-
|
|
682
|
+
display: block;
|
|
827
683
|
}
|
|
828
|
-
|
|
829
684
|
.dropdown-mode-mobile .mobile-selected-section[data-empty="true"] .section-content,
|
|
830
685
|
.dropdown-mode-mobile .mobile-available-section[data-empty="true"] slot {
|
|
831
|
-
|
|
686
|
+
display: none;
|
|
832
687
|
}
|
|
833
|
-
|
|
834
|
-
/* ===== TAG STYLING IN MOBILE ===== */
|
|
835
|
-
|
|
836
688
|
.dropdown-mode-mobile .section-content ::slotted(ty-tag) {
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
animation: ty-select-tag-enter 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
844
|
-
}
|
|
845
|
-
|
|
689
|
+
cursor: pointer;
|
|
690
|
+
user-select: none;
|
|
691
|
+
transition: transform 0.1s ease;
|
|
692
|
+
margin: 2px 0;
|
|
693
|
+
animation: ty-select-tag-enter 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
694
|
+
}
|
|
846
695
|
@media (hover: hover) {
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
696
|
+
.dropdown-mode-mobile .section-content ::slotted(ty-tag:hover) {
|
|
697
|
+
transform: scale(1.02);
|
|
698
|
+
}
|
|
850
699
|
}
|
|
851
|
-
|
|
852
700
|
.dropdown-mode-mobile .section-content ::slotted(ty-tag:active) {
|
|
853
|
-
|
|
701
|
+
transform: scale(0.96);
|
|
854
702
|
}
|
|
855
|
-
|
|
856
|
-
/* Dimmed appearance for hidden filtered tags */
|
|
857
703
|
.dropdown-mode-mobile .section-content ::slotted(ty-tag[hidden]) {
|
|
858
|
-
|
|
704
|
+
display: none !important;
|
|
859
705
|
}
|
|
860
|
-
|
|
861
706
|
@keyframes ty-select-tag-enter {
|
|
862
|
-
|
|
863
|
-
|
|
707
|
+
from { opacity: 0; transform: scale(0.85); }
|
|
708
|
+
to { opacity: 1; transform: scale(1); }
|
|
864
709
|
}
|
|
865
|
-
|
|
866
710
|
@media (prefers-reduced-motion: reduce) {
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
/* ==================== LOADING STATE ====================
|
|
873
|
-
Spinner overlay shown inside the options area while the parent
|
|
874
|
-
(external-search mode) is fetching. Search input stays usable.
|
|
875
|
-
|
|
876
|
-
Carries its own surface so it stays visible even when the host
|
|
877
|
-
has restyled the popup with a transparent or unusual background.
|
|
878
|
-
Override with --ty-loader-bg / --ty-loader-radius / --ty-loader-border.
|
|
879
|
-
*/
|
|
711
|
+
.dropdown-mode-mobile .section-content ::slotted(ty-tag) {
|
|
712
|
+
animation: none;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
880
715
|
.dropdown-loading {
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
}
|
|
896
|
-
|
|
716
|
+
display: none;
|
|
717
|
+
align-items: center;
|
|
718
|
+
justify-content: center;
|
|
719
|
+
gap: var(--ty-spacing-2);
|
|
720
|
+
padding: var(--ty-spacing-4) var(--ty-spacing-3);
|
|
721
|
+
color: var(--ty-text-soft);
|
|
722
|
+
font-size: var(--ty-font-sm);
|
|
723
|
+
min-height: 4rem;
|
|
724
|
+
background: var(--ty-loader-bg, var(--ty-surface-floating));
|
|
725
|
+
border: 1px solid var(--ty-loader-border, var(--ty-floating-border));
|
|
726
|
+
border-radius: var(--ty-loader-radius, var(--ty-radius-lg));
|
|
727
|
+
box-shadow: var(--ty-loader-shadow, 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04));
|
|
728
|
+
box-sizing: border-box;
|
|
729
|
+
}
|
|
897
730
|
.dropdown-options-wrapper.loading .dropdown-loading {
|
|
898
|
-
|
|
731
|
+
display: flex;
|
|
899
732
|
}
|
|
900
|
-
|
|
901
|
-
/* Slot is transparent for layout — fallback (spinner + text) and user-provided
|
|
902
|
-
slotted content both act as direct flex children of .dropdown-loading. */
|
|
903
733
|
.dropdown-loading > slot[name="loading"] {
|
|
904
|
-
|
|
734
|
+
display: contents;
|
|
905
735
|
}
|
|
906
|
-
|
|
907
|
-
/* Mobile: full-screen dialog is the surface — drop the card chrome,
|
|
908
|
-
stack vertically, scale up so it feels native to a fullscreen view.
|
|
909
|
-
Slotted content adapts automatically since the slot is display:contents. */
|
|
910
736
|
.dropdown-mode-mobile .dropdown-loading {
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
}
|
|
920
|
-
|
|
737
|
+
background: transparent;
|
|
738
|
+
border: none;
|
|
739
|
+
box-shadow: none;
|
|
740
|
+
flex: 1;
|
|
741
|
+
flex-direction: column;
|
|
742
|
+
gap: var(--ty-spacing-3);
|
|
743
|
+
padding: var(--ty-spacing-8) var(--ty-spacing-4);
|
|
744
|
+
min-height: 12rem;
|
|
745
|
+
}
|
|
921
746
|
.dropdown-mode-mobile .dropdown-loading-spinner {
|
|
922
|
-
|
|
923
|
-
|
|
747
|
+
width: 2rem;
|
|
748
|
+
height: 2rem;
|
|
924
749
|
}
|
|
925
|
-
|
|
926
750
|
.dropdown-mode-mobile .dropdown-loading-text {
|
|
927
|
-
|
|
751
|
+
font-size: var(--ty-font-base);
|
|
928
752
|
}
|
|
929
|
-
|
|
930
753
|
.dropdown-options-wrapper.loading .dropdown-options,
|
|
931
754
|
.dropdown-options-wrapper.loading > slot#options-slot,
|
|
932
755
|
.dropdown-options-wrapper.loading .empty-state {
|
|
933
|
-
|
|
756
|
+
display: none;
|
|
934
757
|
}
|
|
935
|
-
|
|
936
758
|
.dropdown-loading-spinner {
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
}
|
|
947
|
-
|
|
759
|
+
display: inline-flex;
|
|
760
|
+
align-items: center;
|
|
761
|
+
justify-content: center;
|
|
762
|
+
width: 1.125rem;
|
|
763
|
+
height: 1.125rem;
|
|
764
|
+
flex-shrink: 0;
|
|
765
|
+
animation: ty-select-spin 0.7s linear infinite;
|
|
766
|
+
color: var(--select-accent-bold, var(--ty-color-primary));
|
|
767
|
+
}
|
|
948
768
|
.dropdown-loading-spinner svg {
|
|
949
|
-
|
|
950
|
-
|
|
769
|
+
width: 100%;
|
|
770
|
+
height: 100%;
|
|
951
771
|
}
|
|
952
|
-
|
|
953
772
|
.dropdown-loading-text {
|
|
954
|
-
|
|
773
|
+
color: var(--ty-text-soft);
|
|
955
774
|
}
|
|
956
|
-
|
|
957
775
|
@keyframes ty-select-spin {
|
|
958
|
-
|
|
776
|
+
to { transform: rotate(360deg); }
|
|
959
777
|
}
|
|
960
|
-
|
|
961
778
|
@media (prefers-reduced-motion: reduce) {
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
779
|
+
.dropdown-loading-spinner {
|
|
780
|
+
animation-duration: 1.6s;
|
|
781
|
+
}
|
|
965
782
|
}
|
|
966
|
-
|
|
967
|
-
/* Custom scrollbar styles */
|
|
968
783
|
${customScrollbarStyles}
|
|
969
|
-
|
|
970
|
-
/* ===== FLAVOR VARIANTS (set --select-accent*, consumed above) ===== */
|
|
971
784
|
${FLAVORS.filter((f) => f !== "neutral").map((f) => selectFlavor(f)).join("")}
|
|
972
785
|
`;
|
|
973
|
-
//# sourceMappingURL=select-base.js.map
|