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,50 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TySelectedOptions
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* selected values as dismissible <ty-tag> chips, anywhere in the layout.
|
|
7
|
-
*
|
|
8
|
-
* Pairs with any element that exposes a comma-joined `value` string and emits a
|
|
9
|
-
* bubbling `change` event. Labels/flavors are read from the picker's matching
|
|
10
|
-
* option (`[value="..."]`), so chips stay rich without duplicating data.
|
|
11
|
-
*
|
|
12
|
-
* If the picker also emits `open`/`close` (ty-select does), the chips hide
|
|
13
|
-
* for the duration — the picker's own popup is independently sized/
|
|
14
|
-
* positioned and can otherwise visually collide with this row.
|
|
15
|
-
*
|
|
16
|
-
* Also registered as `ty-selected-tags` — the original tag name, kept
|
|
17
|
-
* working indefinitely for backward compatibility. `ty-selected-options` is
|
|
18
|
-
* the name going forward: it names the element by what it's driven by
|
|
19
|
-
* (a picker's selected `ty-option`s), not by the chip primitive it happens
|
|
20
|
-
* to render with.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```html
|
|
24
|
-
* <ty-select id="robots">
|
|
25
|
-
* <ty-option value="bobo" flavor="primary">Bobo Robot</ty-option>
|
|
26
|
-
* </ty-select>
|
|
27
|
-
* <ty-selected-options for="robots"></ty-selected-options>
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* Custom chips via a <template> child. Placeholders {value}, {label}, {flavor}
|
|
31
|
-
* and any {data-*} attribute of the matching option are interpolated into
|
|
32
|
-
* attributes and text — on cloned DOM nodes, never via innerHTML (no injection).
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```html
|
|
36
|
-
* <ty-select id="team">
|
|
37
|
-
* <ty-option value="ivan" data-avatar="/avatars/ivan.png">Ivan</ty-option>
|
|
38
|
-
* </ty-select>
|
|
39
|
-
* <ty-selected-options for="team">
|
|
40
|
-
* <template>
|
|
41
|
-
* <ty-tag flavor="{flavor}" dismissible>
|
|
42
|
-
* <img slot="start" src="{data-avatar}" class="w-4 h-4 rounded-full">
|
|
43
|
-
* {label}
|
|
44
|
-
* </ty-tag>
|
|
45
|
-
* </template>
|
|
46
|
-
* </ty-selected-options>
|
|
47
|
-
* ```
|
|
2
|
+
* TySelectedOptions - out-of-band dismissible <ty-tag> chips for a picker's selection.
|
|
3
|
+
* Pairs with any element exposing a comma-joined `value` + bubbling `change`; labels
|
|
4
|
+
* and flavors are read from the picker's matching option (`[value="..."]`). Custom chips
|
|
5
|
+
* come from an optional <template> child, stamped onto cloned nodes (never innerHTML).
|
|
48
6
|
*/
|
|
49
7
|
export declare class TySelectedOptions extends HTMLElement {
|
|
50
8
|
static get observedAttributes(): string[];
|
|
@@ -53,7 +11,7 @@ export declare class TySelectedOptions extends HTMLElement {
|
|
|
53
11
|
private _childObserver;
|
|
54
12
|
private _pickerObserver;
|
|
55
13
|
private _lastTemplate;
|
|
56
|
-
private
|
|
14
|
+
private _pickerOpen;
|
|
57
15
|
private _onPickerOpen;
|
|
58
16
|
private _onPickerClose;
|
|
59
17
|
connectedCallback(): void;
|
|
@@ -90,4 +48,3 @@ export declare class TySelectedOptions extends HTMLElement {
|
|
|
90
48
|
/** Remove a value from the picker; picker re-emits change → chips re-render. */
|
|
91
49
|
private deselect;
|
|
92
50
|
}
|
|
93
|
-
//# sourceMappingURL=selected-tags.d.ts.map
|
|
@@ -1,286 +1,198 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TySelectedOptions Web Component
|
|
3
|
-
*
|
|
4
|
-
* Out-of-band chip display for a picker (ty-select).
|
|
5
|
-
* The picker owns the value + form submission; this element just renders the
|
|
6
|
-
* selected values as dismissible <ty-tag> chips, anywhere in the layout.
|
|
7
|
-
*
|
|
8
|
-
* Pairs with any element that exposes a comma-joined `value` string and emits a
|
|
9
|
-
* bubbling `change` event. Labels/flavors are read from the picker's matching
|
|
10
|
-
* option (`[value="..."]`), so chips stay rich without duplicating data.
|
|
11
|
-
*
|
|
12
|
-
* If the picker also emits `open`/`close` (ty-select does), the chips hide
|
|
13
|
-
* for the duration — the picker's own popup is independently sized/
|
|
14
|
-
* positioned and can otherwise visually collide with this row.
|
|
15
|
-
*
|
|
16
|
-
* Also registered as `ty-selected-tags` — the original tag name, kept
|
|
17
|
-
* working indefinitely for backward compatibility. `ty-selected-options` is
|
|
18
|
-
* the name going forward: it names the element by what it's driven by
|
|
19
|
-
* (a picker's selected `ty-option`s), not by the chip primitive it happens
|
|
20
|
-
* to render with.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```html
|
|
24
|
-
* <ty-select id="robots">
|
|
25
|
-
* <ty-option value="bobo" flavor="primary">Bobo Robot</ty-option>
|
|
26
|
-
* </ty-select>
|
|
27
|
-
* <ty-selected-options for="robots"></ty-selected-options>
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* Custom chips via a <template> child. Placeholders {value}, {label}, {flavor}
|
|
31
|
-
* and any {data-*} attribute of the matching option are interpolated into
|
|
32
|
-
* attributes and text — on cloned DOM nodes, never via innerHTML (no injection).
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```html
|
|
36
|
-
* <ty-select id="team">
|
|
37
|
-
* <ty-option value="ivan" data-avatar="/avatars/ivan.png">Ivan</ty-option>
|
|
38
|
-
* </ty-select>
|
|
39
|
-
* <ty-selected-options for="team">
|
|
40
|
-
* <template>
|
|
41
|
-
* <ty-tag flavor="{flavor}" dismissible>
|
|
42
|
-
* <img slot="start" src="{data-avatar}" class="w-4 h-4 rounded-full">
|
|
43
|
-
* {label}
|
|
44
|
-
* </ty-tag>
|
|
45
|
-
* </template>
|
|
46
|
-
* </ty-selected-options>
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
/** Split a comma-joined picker value into clean values. */
|
|
50
1
|
function parseValues(raw) {
|
|
51
|
-
|
|
2
|
+
return raw.split(',').map(s => s.trim()).filter(Boolean);
|
|
52
3
|
}
|
|
53
|
-
/** Replace {key} placeholders from ctx; unknown keys are left as-is. */
|
|
54
4
|
function interpolate(text, ctx) {
|
|
55
|
-
|
|
5
|
+
return text.replace(/\{([\w-]+)\}/g, (match, key) => ctx[key] ?? match);
|
|
56
6
|
}
|
|
57
7
|
export class TySelectedOptions extends HTMLElement {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
tag.textContent = ctx.label;
|
|
242
|
-
tag.addEventListener('dismiss', () => this.deselect(value));
|
|
243
|
-
return tag;
|
|
244
|
-
}
|
|
245
|
-
renderChips() {
|
|
246
|
-
const template = this.template();
|
|
247
|
-
this._lastTemplate = template;
|
|
248
|
-
if (!this._picker) {
|
|
249
|
-
this.replaceChildren(...(template ? [template] : []));
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
const frag = document.createDocumentFragment();
|
|
253
|
-
// Template survives re-renders - it is part of our light DOM
|
|
254
|
-
if (template)
|
|
255
|
-
frag.appendChild(template);
|
|
256
|
-
for (const value of this.values()) {
|
|
257
|
-
frag.appendChild(template ? this.stampTemplate(template, value) : this.defaultChip(value));
|
|
258
|
-
}
|
|
259
|
-
this.replaceChildren(frag);
|
|
260
|
-
}
|
|
261
|
-
/** Remove a value from the picker; picker re-emits change → chips re-render. */
|
|
262
|
-
deselect(value) {
|
|
263
|
-
if (!this._picker)
|
|
264
|
-
return;
|
|
265
|
-
const picker = this._picker;
|
|
266
|
-
if (typeof picker.deselectValue === 'function') {
|
|
267
|
-
// ty-select path — fires a proper change event (chips re-render via listener)
|
|
268
|
-
picker.deselectValue(value);
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
// Generic picker fallback — value setters usually don't emit change
|
|
272
|
-
picker.value = this.values().filter(v => v !== value).join(',');
|
|
273
|
-
this.renderChips();
|
|
274
|
-
}
|
|
275
|
-
}
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this._picker = null;
|
|
11
|
+
this._onChange = () => this.renderChips();
|
|
12
|
+
this._childObserver = null;
|
|
13
|
+
this._pickerObserver = null;
|
|
14
|
+
this._lastTemplate = null;
|
|
15
|
+
this._pickerOpen = false;
|
|
16
|
+
this._onPickerOpen = () => {
|
|
17
|
+
this._pickerOpen = true;
|
|
18
|
+
};
|
|
19
|
+
this._onPickerClose = () => {
|
|
20
|
+
this._pickerOpen = false;
|
|
21
|
+
this.renderChips();
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static get observedAttributes() {
|
|
25
|
+
return ['for'];
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
if (!this.style.display)
|
|
29
|
+
this.style.display = 'contents';
|
|
30
|
+
this.bind();
|
|
31
|
+
this.renderChips();
|
|
32
|
+
if (document.readyState === 'loading') {
|
|
33
|
+
document.addEventListener('DOMContentLoaded', () => { if (this.isConnected)
|
|
34
|
+
this.renderChips(); }, { once: true });
|
|
35
|
+
}
|
|
36
|
+
this._childObserver = new MutationObserver(() => {
|
|
37
|
+
const template = this.template();
|
|
38
|
+
if (template !== this._lastTemplate) {
|
|
39
|
+
this.renderChips();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
this._childObserver.observe(this, { childList: true });
|
|
43
|
+
}
|
|
44
|
+
disconnectedCallback() {
|
|
45
|
+
this.unbind();
|
|
46
|
+
this._childObserver?.disconnect();
|
|
47
|
+
this._childObserver = null;
|
|
48
|
+
}
|
|
49
|
+
attributeChangedCallback() {
|
|
50
|
+
if (!this.isConnected)
|
|
51
|
+
return;
|
|
52
|
+
this.bind();
|
|
53
|
+
this.renderChips();
|
|
54
|
+
}
|
|
55
|
+
resolvePicker() {
|
|
56
|
+
const id = this.getAttribute('for');
|
|
57
|
+
const el = id
|
|
58
|
+
? document.getElementById(id)
|
|
59
|
+
: this.previousElementSibling;
|
|
60
|
+
return el ?? null;
|
|
61
|
+
}
|
|
62
|
+
bind() {
|
|
63
|
+
const next = this.resolvePicker();
|
|
64
|
+
if (next === this._picker)
|
|
65
|
+
return;
|
|
66
|
+
this.unbind();
|
|
67
|
+
this._picker = next;
|
|
68
|
+
this._picker?.addEventListener('change', this._onChange);
|
|
69
|
+
this._picker?.addEventListener('open', this._onPickerOpen);
|
|
70
|
+
this._picker?.addEventListener('close', this._onPickerClose);
|
|
71
|
+
if (this._picker) {
|
|
72
|
+
this._pickerObserver = new MutationObserver(() => this.renderChips());
|
|
73
|
+
this._pickerObserver.observe(this._picker, {
|
|
74
|
+
childList: true,
|
|
75
|
+
subtree: true,
|
|
76
|
+
attributes: true,
|
|
77
|
+
attributeFilter: ['selected'],
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
unbind() {
|
|
82
|
+
this._picker?.removeEventListener('change', this._onChange);
|
|
83
|
+
this._picker?.removeEventListener('open', this._onPickerOpen);
|
|
84
|
+
this._picker?.removeEventListener('close', this._onPickerClose);
|
|
85
|
+
this._pickerObserver?.disconnect();
|
|
86
|
+
this._pickerObserver = null;
|
|
87
|
+
this._picker = null;
|
|
88
|
+
this._pickerOpen = false;
|
|
89
|
+
}
|
|
90
|
+
values() {
|
|
91
|
+
return parseValues(this._picker?.value ?? '');
|
|
92
|
+
}
|
|
93
|
+
template() {
|
|
94
|
+
return this.querySelector(':scope > template');
|
|
95
|
+
}
|
|
96
|
+
context(value) {
|
|
97
|
+
const opt = this._picker?.querySelector(`[value="${CSS.escape(value)}"]`);
|
|
98
|
+
const ctx = {
|
|
99
|
+
value,
|
|
100
|
+
label: opt?.getAttribute('label') || opt?.textContent?.trim() || value,
|
|
101
|
+
flavor: opt?.getAttribute('flavor') ?? '',
|
|
102
|
+
};
|
|
103
|
+
if (opt) {
|
|
104
|
+
for (const attr of Array.from(opt.attributes)) {
|
|
105
|
+
if (attr.name.startsWith('data-'))
|
|
106
|
+
ctx[attr.name] = attr.value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return ctx;
|
|
110
|
+
}
|
|
111
|
+
templateSource(template) {
|
|
112
|
+
if (template.content.hasChildNodes())
|
|
113
|
+
return template.content;
|
|
114
|
+
const frag = document.createDocumentFragment();
|
|
115
|
+
template.childNodes.forEach(n => frag.appendChild(n.cloneNode(true)));
|
|
116
|
+
return frag;
|
|
117
|
+
}
|
|
118
|
+
stampTemplate(template, value) {
|
|
119
|
+
const ctx = this.context(value);
|
|
120
|
+
const clone = this.templateSource(template).cloneNode(true);
|
|
121
|
+
const walker = document.createTreeWalker(clone, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT);
|
|
122
|
+
for (let node = walker.nextNode(); node; node = walker.nextNode()) {
|
|
123
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
124
|
+
if (node.textContent?.includes('{')) {
|
|
125
|
+
node.textContent = interpolate(node.textContent, ctx);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const el = node;
|
|
130
|
+
for (const attr of Array.from(el.attributes)) {
|
|
131
|
+
if (!attr.value.includes('{'))
|
|
132
|
+
continue;
|
|
133
|
+
const resolved = interpolate(attr.value, ctx);
|
|
134
|
+
if (/^\{[\w-]+\}$/.test(attr.value) && (resolved === '' || resolved === attr.value)) {
|
|
135
|
+
el.removeAttribute(attr.name);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
el.setAttribute(attr.name, resolved);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
for (const el of Array.from(clone.children)) {
|
|
144
|
+
el.addEventListener('dismiss', (e) => {
|
|
145
|
+
e.stopPropagation();
|
|
146
|
+
this.deselect(value);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return clone;
|
|
150
|
+
}
|
|
151
|
+
defaultChip(value) {
|
|
152
|
+
const ctx = this.context(value);
|
|
153
|
+
const tag = document.createElement('ty-tag');
|
|
154
|
+
tag.setAttribute('value', value);
|
|
155
|
+
tag.setAttribute('dismissible', 'true');
|
|
156
|
+
if (ctx.flavor)
|
|
157
|
+
tag.setAttribute('flavor', ctx.flavor);
|
|
158
|
+
tag.textContent = ctx.label;
|
|
159
|
+
tag.addEventListener('dismiss', () => this.deselect(value));
|
|
160
|
+
return tag;
|
|
161
|
+
}
|
|
162
|
+
renderChips() {
|
|
163
|
+
if (this._pickerOpen)
|
|
164
|
+
return;
|
|
165
|
+
const template = this.template();
|
|
166
|
+
this._lastTemplate = template;
|
|
167
|
+
if (!this._picker) {
|
|
168
|
+
this.replaceChildren(...(template ? [template] : []));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const frag = document.createDocumentFragment();
|
|
172
|
+
if (template)
|
|
173
|
+
frag.appendChild(template);
|
|
174
|
+
for (const value of this.values()) {
|
|
175
|
+
frag.appendChild(template ? this.stampTemplate(template, value) : this.defaultChip(value));
|
|
176
|
+
}
|
|
177
|
+
this.replaceChildren(frag);
|
|
178
|
+
}
|
|
179
|
+
deselect(value) {
|
|
180
|
+
if (!this._picker)
|
|
181
|
+
return;
|
|
182
|
+
const picker = this._picker;
|
|
183
|
+
if (typeof picker.deselectValue === 'function') {
|
|
184
|
+
picker.deselectValue(value);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
picker.value = this.values().filter(v => v !== value).join(',');
|
|
188
|
+
this.renderChips();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
276
191
|
}
|
|
277
192
|
if (!customElements.get('ty-selected-options')) {
|
|
278
|
-
|
|
193
|
+
customElements.define('ty-selected-options', TySelectedOptions);
|
|
279
194
|
}
|
|
280
|
-
// Original tag name — kept working indefinitely. A constructor can only
|
|
281
|
-
// register once, hence the subclass (see ty-modal/ty-dialog for precedent).
|
|
282
195
|
if (!customElements.get('ty-selected-tags')) {
|
|
283
|
-
|
|
284
|
-
|
|
196
|
+
customElements.define('ty-selected-tags', class TySelectedTags extends TySelectedOptions {
|
|
197
|
+
});
|
|
285
198
|
}
|
|
286
|
-
//# sourceMappingURL=selected-tags.js.map
|
package/lib/components/step.d.ts
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Step Component
|
|
3
|
-
*
|
|
4
|
-
* Individual wizard step panel with custom scrollbar via CustomScrollbar utility.
|
|
5
|
-
*/
|
|
1
|
+
/** Individual wizard step panel with custom scrollbar via CustomScrollbar utility. */
|
|
6
2
|
export type StepStatus = 'completed' | 'active' | 'pending' | 'error';
|
|
7
3
|
export interface StepAttributes {
|
|
8
4
|
id: string | null;
|
|
@@ -23,4 +19,3 @@ export declare class TyStep extends HTMLElement {
|
|
|
23
19
|
private _destroyScrollbar;
|
|
24
20
|
resetScroll(): void;
|
|
25
21
|
}
|
|
26
|
-
//# sourceMappingURL=step.d.ts.map
|