tyrell-components 1.0.0-RC10
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/LICENSE +21 -0
- package/README.md +221 -0
- package/css/tyrell-brand.css +767 -0
- package/css/tyrell.css +1679 -0
- package/dist/tyrell-brand.css +767 -0
- package/dist/tyrell.css +1679 -0
- package/dist/tyrell.js +2 -0
- package/lib/base/ty-component.d.ts +133 -0
- package/lib/base/ty-component.d.ts.map +1 -0
- package/lib/base/ty-component.js +297 -0
- package/lib/base/ty-component.js.map +1 -0
- package/lib/components/button.d.ts +135 -0
- package/lib/components/button.d.ts.map +1 -0
- package/lib/components/button.js +277 -0
- package/lib/components/button.js.map +1 -0
- package/lib/components/calendar-month.d.ts +132 -0
- package/lib/components/calendar-month.d.ts.map +1 -0
- package/lib/components/calendar-month.js +440 -0
- package/lib/components/calendar-month.js.map +1 -0
- package/lib/components/calendar-navigation.d.ts +137 -0
- package/lib/components/calendar-navigation.d.ts.map +1 -0
- package/lib/components/calendar-navigation.js +366 -0
- package/lib/components/calendar-navigation.js.map +1 -0
- package/lib/components/calendar.d.ts +166 -0
- package/lib/components/calendar.d.ts.map +1 -0
- package/lib/components/calendar.js +774 -0
- package/lib/components/calendar.js.map +1 -0
- package/lib/components/checkbox.d.ts +189 -0
- package/lib/components/checkbox.d.ts.map +1 -0
- package/lib/components/checkbox.js +400 -0
- package/lib/components/checkbox.js.map +1 -0
- package/lib/components/copy.d.ts +180 -0
- package/lib/components/copy.d.ts.map +1 -0
- package/lib/components/copy.js +393 -0
- package/lib/components/copy.js.map +1 -0
- package/lib/components/date-picker.d.ts +379 -0
- package/lib/components/date-picker.d.ts.map +1 -0
- package/lib/components/date-picker.js +1586 -0
- package/lib/components/date-picker.js.map +1 -0
- package/lib/components/dropdown.d.ts +424 -0
- package/lib/components/dropdown.d.ts.map +1 -0
- package/lib/components/dropdown.js +1640 -0
- package/lib/components/dropdown.js.map +1 -0
- package/lib/components/file-upload.d.ts +121 -0
- package/lib/components/file-upload.d.ts.map +1 -0
- package/lib/components/file-upload.js +441 -0
- package/lib/components/file-upload.js.map +1 -0
- package/lib/components/icon.d.ts +118 -0
- package/lib/components/icon.d.ts.map +1 -0
- package/lib/components/icon.js +245 -0
- package/lib/components/icon.js.map +1 -0
- package/lib/components/input.d.ts +270 -0
- package/lib/components/input.d.ts.map +1 -0
- package/lib/components/input.js +721 -0
- package/lib/components/input.js.map +1 -0
- package/lib/components/modal.d.ts +78 -0
- package/lib/components/modal.d.ts.map +1 -0
- package/lib/components/modal.js +497 -0
- package/lib/components/modal.js.map +1 -0
- package/lib/components/multiselect.d.ts +397 -0
- package/lib/components/multiselect.d.ts.map +1 -0
- package/lib/components/multiselect.js +1595 -0
- package/lib/components/multiselect.js.map +1 -0
- package/lib/components/option.d.ts +66 -0
- package/lib/components/option.d.ts.map +1 -0
- package/lib/components/option.js +314 -0
- package/lib/components/option.js.map +1 -0
- package/lib/components/popup.d.ts +43 -0
- package/lib/components/popup.d.ts.map +1 -0
- package/lib/components/popup.js +380 -0
- package/lib/components/popup.js.map +1 -0
- package/lib/components/radio.d.ts +198 -0
- package/lib/components/radio.d.ts.map +1 -0
- package/lib/components/radio.js +437 -0
- package/lib/components/radio.js.map +1 -0
- package/lib/components/resize-observer.d.ts +48 -0
- package/lib/components/resize-observer.d.ts.map +1 -0
- package/lib/components/resize-observer.js +108 -0
- package/lib/components/resize-observer.js.map +1 -0
- package/lib/components/scroll-container.d.ts +51 -0
- package/lib/components/scroll-container.d.ts.map +1 -0
- package/lib/components/scroll-container.js +239 -0
- package/lib/components/scroll-container.js.map +1 -0
- package/lib/components/step.d.ts +26 -0
- package/lib/components/step.d.ts.map +1 -0
- package/lib/components/step.js +75 -0
- package/lib/components/step.js.map +1 -0
- package/lib/components/switch.d.ts +111 -0
- package/lib/components/switch.d.ts.map +1 -0
- package/lib/components/switch.js +240 -0
- package/lib/components/switch.js.map +1 -0
- package/lib/components/tab.d.ts +23 -0
- package/lib/components/tab.d.ts.map +1 -0
- package/lib/components/tab.js +76 -0
- package/lib/components/tab.js.map +1 -0
- package/lib/components/tabs.d.ts +93 -0
- package/lib/components/tabs.d.ts.map +1 -0
- package/lib/components/tabs.js +653 -0
- package/lib/components/tabs.js.map +1 -0
- package/lib/components/tag.d.ts +144 -0
- package/lib/components/tag.d.ts.map +1 -0
- package/lib/components/tag.js +316 -0
- package/lib/components/tag.js.map +1 -0
- package/lib/components/textarea.d.ts +241 -0
- package/lib/components/textarea.d.ts.map +1 -0
- package/lib/components/textarea.js +585 -0
- package/lib/components/textarea.js.map +1 -0
- package/lib/components/tooltip.d.ts +40 -0
- package/lib/components/tooltip.d.ts.map +1 -0
- package/lib/components/tooltip.js +439 -0
- package/lib/components/tooltip.js.map +1 -0
- package/lib/components/wizard.d.ts +86 -0
- package/lib/components/wizard.d.ts.map +1 -0
- package/lib/components/wizard.js +636 -0
- package/lib/components/wizard.js.map +1 -0
- package/lib/icons/fontawesome/brands.d.ts +557 -0
- package/lib/icons/fontawesome/brands.d.ts.map +1 -0
- package/lib/icons/fontawesome/brands.js +557 -0
- package/lib/icons/fontawesome/brands.js.map +1 -0
- package/lib/icons/fontawesome/regular.d.ts +281 -0
- package/lib/icons/fontawesome/regular.d.ts.map +1 -0
- package/lib/icons/fontawesome/regular.js +281 -0
- package/lib/icons/fontawesome/regular.js.map +1 -0
- package/lib/icons/fontawesome/solid.d.ts +1992 -0
- package/lib/icons/fontawesome/solid.d.ts.map +1 -0
- package/lib/icons/fontawesome/solid.js +1992 -0
- package/lib/icons/fontawesome/solid.js.map +1 -0
- package/lib/icons/heroicons/micro.d.ts +324 -0
- package/lib/icons/heroicons/micro.d.ts.map +1 -0
- package/lib/icons/heroicons/micro.js +1032 -0
- package/lib/icons/heroicons/micro.js.map +1 -0
- package/lib/icons/heroicons/mini.d.ts +332 -0
- package/lib/icons/heroicons/mini.d.ts.map +1 -0
- package/lib/icons/heroicons/mini.js +1038 -0
- package/lib/icons/heroicons/mini.js.map +1 -0
- package/lib/icons/heroicons/outline.d.ts +332 -0
- package/lib/icons/heroicons/outline.d.ts.map +1 -0
- package/lib/icons/heroicons/outline.js +993 -0
- package/lib/icons/heroicons/outline.js.map +1 -0
- package/lib/icons/heroicons/solid.d.ts +332 -0
- package/lib/icons/heroicons/solid.d.ts.map +1 -0
- package/lib/icons/heroicons/solid.js +1063 -0
- package/lib/icons/heroicons/solid.js.map +1 -0
- package/lib/icons/lucide.d.ts +1872 -0
- package/lib/icons/lucide.d.ts.map +1 -0
- package/lib/icons/lucide.js +28212 -0
- package/lib/icons/lucide.js.map +1 -0
- package/lib/icons/material/filled.d.ts +2180 -0
- package/lib/icons/material/filled.d.ts.map +1 -0
- package/lib/icons/material/filled.js +14003 -0
- package/lib/icons/material/filled.js.map +1 -0
- package/lib/icons/material/outlined.d.ts +2142 -0
- package/lib/icons/material/outlined.d.ts.map +1 -0
- package/lib/icons/material/outlined.js +14545 -0
- package/lib/icons/material/outlined.js.map +1 -0
- package/lib/icons/material/round.d.ts +2147 -0
- package/lib/icons/material/round.d.ts.map +1 -0
- package/lib/icons/material/round.js +14779 -0
- package/lib/icons/material/round.js.map +1 -0
- package/lib/icons/material/sharp.d.ts +2147 -0
- package/lib/icons/material/sharp.d.ts.map +1 -0
- package/lib/icons/material/sharp.js +14189 -0
- package/lib/icons/material/sharp.js.map +1 -0
- package/lib/icons/material/two-tone.d.ts +2185 -0
- package/lib/icons/material/two-tone.d.ts.map +1 -0
- package/lib/icons/material/two-tone.js +17152 -0
- package/lib/icons/material/two-tone.js.map +1 -0
- package/lib/index.d.ts +86 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +78 -0
- package/lib/index.js.map +1 -0
- package/lib/styles/button.d.ts +14 -0
- package/lib/styles/button.d.ts.map +1 -0
- package/lib/styles/button.js +498 -0
- package/lib/styles/button.js.map +1 -0
- package/lib/styles/calendar-month.d.ts +6 -0
- package/lib/styles/calendar-month.d.ts.map +1 -0
- package/lib/styles/calendar-month.js +275 -0
- package/lib/styles/calendar-month.js.map +1 -0
- package/lib/styles/calendar-navigation.d.ts +6 -0
- package/lib/styles/calendar-navigation.d.ts.map +1 -0
- package/lib/styles/calendar-navigation.js +143 -0
- package/lib/styles/calendar-navigation.js.map +1 -0
- package/lib/styles/calendar.d.ts +6 -0
- package/lib/styles/calendar.d.ts.map +1 -0
- package/lib/styles/calendar.js +28 -0
- package/lib/styles/calendar.js.map +1 -0
- package/lib/styles/checkbox.d.ts +9 -0
- package/lib/styles/checkbox.d.ts.map +1 -0
- package/lib/styles/checkbox.js +19 -0
- package/lib/styles/checkbox.js.map +1 -0
- package/lib/styles/copy.d.ts +7 -0
- package/lib/styles/copy.d.ts.map +1 -0
- package/lib/styles/copy.js +94 -0
- package/lib/styles/copy.js.map +1 -0
- package/lib/styles/custom-scrollbar.d.ts +6 -0
- package/lib/styles/custom-scrollbar.d.ts.map +1 -0
- package/lib/styles/custom-scrollbar.js +157 -0
- package/lib/styles/custom-scrollbar.js.map +1 -0
- package/lib/styles/date-picker.d.ts +6 -0
- package/lib/styles/date-picker.d.ts.map +1 -0
- package/lib/styles/date-picker.js +438 -0
- package/lib/styles/date-picker.js.map +1 -0
- package/lib/styles/dropdown.d.ts +12 -0
- package/lib/styles/dropdown.d.ts.map +1 -0
- package/lib/styles/dropdown.js +1081 -0
- package/lib/styles/dropdown.js.map +1 -0
- package/lib/styles/file-upload.d.ts +2 -0
- package/lib/styles/file-upload.d.ts.map +1 -0
- package/lib/styles/file-upload.js +241 -0
- package/lib/styles/file-upload.js.map +1 -0
- package/lib/styles/icon.d.ts +6 -0
- package/lib/styles/icon.d.ts.map +1 -0
- package/lib/styles/icon.js +241 -0
- package/lib/styles/icon.js.map +1 -0
- package/lib/styles/input.d.ts +7 -0
- package/lib/styles/input.d.ts.map +1 -0
- package/lib/styles/input.js +685 -0
- package/lib/styles/input.js.map +1 -0
- package/lib/styles/modal.d.ts +8 -0
- package/lib/styles/modal.d.ts.map +1 -0
- package/lib/styles/modal.js +134 -0
- package/lib/styles/modal.js.map +1 -0
- package/lib/styles/multiselect.d.ts +6 -0
- package/lib/styles/multiselect.d.ts.map +1 -0
- package/lib/styles/multiselect.js +825 -0
- package/lib/styles/multiselect.js.map +1 -0
- package/lib/styles/option.d.ts +6 -0
- package/lib/styles/option.d.ts.map +1 -0
- package/lib/styles/option.js +116 -0
- package/lib/styles/option.js.map +1 -0
- package/lib/styles/popup.d.ts +8 -0
- package/lib/styles/popup.d.ts.map +1 -0
- package/lib/styles/popup.js +95 -0
- package/lib/styles/popup.js.map +1 -0
- package/lib/styles/radio.d.ts +8 -0
- package/lib/styles/radio.d.ts.map +1 -0
- package/lib/styles/radio.js +160 -0
- package/lib/styles/radio.js.map +1 -0
- package/lib/styles/resize-observer.d.ts +6 -0
- package/lib/styles/resize-observer.d.ts.map +1 -0
- package/lib/styles/resize-observer.js +18 -0
- package/lib/styles/resize-observer.js.map +1 -0
- package/lib/styles/scroll-container.d.ts +6 -0
- package/lib/styles/scroll-container.d.ts.map +1 -0
- package/lib/styles/scroll-container.js +198 -0
- package/lib/styles/scroll-container.js.map +1 -0
- package/lib/styles/step.d.ts +5 -0
- package/lib/styles/step.d.ts.map +1 -0
- package/lib/styles/step.js +50 -0
- package/lib/styles/step.js.map +1 -0
- package/lib/styles/switch.d.ts +9 -0
- package/lib/styles/switch.d.ts.map +1 -0
- package/lib/styles/switch.js +100 -0
- package/lib/styles/switch.js.map +1 -0
- package/lib/styles/tab.d.ts +5 -0
- package/lib/styles/tab.d.ts.map +1 -0
- package/lib/styles/tab.js +51 -0
- package/lib/styles/tab.js.map +1 -0
- package/lib/styles/tabs.d.ts +13 -0
- package/lib/styles/tabs.d.ts.map +1 -0
- package/lib/styles/tabs.js +184 -0
- package/lib/styles/tabs.js.map +1 -0
- package/lib/styles/tag.d.ts +6 -0
- package/lib/styles/tag.d.ts.map +1 -0
- package/lib/styles/tag.js +409 -0
- package/lib/styles/tag.js.map +1 -0
- package/lib/styles/textarea.d.ts +6 -0
- package/lib/styles/textarea.d.ts.map +1 -0
- package/lib/styles/textarea.js +350 -0
- package/lib/styles/textarea.js.map +1 -0
- package/lib/styles/tooltip.d.ts +9 -0
- package/lib/styles/tooltip.d.ts.map +1 -0
- package/lib/styles/tooltip.js +133 -0
- package/lib/styles/tooltip.js.map +1 -0
- package/lib/styles/wizard.d.ts +25 -0
- package/lib/styles/wizard.d.ts.map +1 -0
- package/lib/styles/wizard.js +348 -0
- package/lib/styles/wizard.js.map +1 -0
- package/lib/types/common.d.ts +143 -0
- package/lib/types/common.d.ts.map +1 -0
- package/lib/types/common.js +5 -0
- package/lib/types/common.js.map +1 -0
- package/lib/utils/calendar-utils.d.ts +176 -0
- package/lib/utils/calendar-utils.d.ts.map +1 -0
- package/lib/utils/calendar-utils.js +370 -0
- package/lib/utils/calendar-utils.js.map +1 -0
- package/lib/utils/custom-scrollbar.d.ts +82 -0
- package/lib/utils/custom-scrollbar.d.ts.map +1 -0
- package/lib/utils/custom-scrollbar.js +320 -0
- package/lib/utils/custom-scrollbar.js.map +1 -0
- package/lib/utils/icon-registry.d.ts +78 -0
- package/lib/utils/icon-registry.d.ts.map +1 -0
- package/lib/utils/icon-registry.js +304 -0
- package/lib/utils/icon-registry.js.map +1 -0
- package/lib/utils/loader-registry.d.ts +35 -0
- package/lib/utils/loader-registry.d.ts.map +1 -0
- package/lib/utils/loader-registry.js +43 -0
- package/lib/utils/loader-registry.js.map +1 -0
- package/lib/utils/locale.d.ts +136 -0
- package/lib/utils/locale.d.ts.map +1 -0
- package/lib/utils/locale.js +213 -0
- package/lib/utils/locale.js.map +1 -0
- package/lib/utils/mobile.d.ts +14 -0
- package/lib/utils/mobile.d.ts.map +1 -0
- package/lib/utils/mobile.js +21 -0
- package/lib/utils/mobile.js.map +1 -0
- package/lib/utils/number-format.d.ts +83 -0
- package/lib/utils/number-format.d.ts.map +1 -0
- package/lib/utils/number-format.js +143 -0
- package/lib/utils/number-format.js.map +1 -0
- package/lib/utils/parse-boolean.d.ts +39 -0
- package/lib/utils/parse-boolean.d.ts.map +1 -0
- package/lib/utils/parse-boolean.js +58 -0
- package/lib/utils/parse-boolean.js.map +1 -0
- package/lib/utils/positioning.d.ts +143 -0
- package/lib/utils/positioning.d.ts.map +1 -0
- package/lib/utils/positioning.js +308 -0
- package/lib/utils/positioning.js.map +1 -0
- package/lib/utils/property-capture.d.ts +132 -0
- package/lib/utils/property-capture.d.ts.map +1 -0
- package/lib/utils/property-capture.js +152 -0
- package/lib/utils/property-capture.js.map +1 -0
- package/lib/utils/property-manager.d.ts +90 -0
- package/lib/utils/property-manager.d.ts.map +1 -0
- package/lib/utils/property-manager.js +197 -0
- package/lib/utils/property-manager.js.map +1 -0
- package/lib/utils/resize-observer.d.ts +42 -0
- package/lib/utils/resize-observer.d.ts.map +1 -0
- package/lib/utils/resize-observer.js +71 -0
- package/lib/utils/resize-observer.js.map +1 -0
- package/lib/utils/scroll-lock.d.ts +79 -0
- package/lib/utils/scroll-lock.d.ts.map +1 -0
- package/lib/utils/scroll-lock.js +197 -0
- package/lib/utils/scroll-lock.js.map +1 -0
- package/lib/utils/styles.d.ts +27 -0
- package/lib/utils/styles.d.ts.map +1 -0
- package/lib/utils/styles.js +53 -0
- package/lib/utils/styles.js.map +1 -0
- package/lib/version.d.ts +8 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +11 -0
- package/lib/version.js.map +1 -0
- package/package.json +163 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TyMultiselect Web Component
|
|
3
|
+
* PORTED FROM: clj/ty/components/multiselect.cljs
|
|
4
|
+
*
|
|
5
|
+
* A multiselect dropdown component using ty-tag for selections with:
|
|
6
|
+
* - Tag-only options (only ty-tag elements supported)
|
|
7
|
+
* - Multiple selection with visual tags
|
|
8
|
+
* - Desktop mode with smart positioning
|
|
9
|
+
* - Mobile mode with full-screen modal
|
|
10
|
+
* - Search and filtering capabilities
|
|
11
|
+
* - Keyboard navigation
|
|
12
|
+
* - Form association for native form submission with multiple values
|
|
13
|
+
* - Scroll locking when dropdown is open
|
|
14
|
+
* - Outside click to close
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```html
|
|
18
|
+
* <!-- Basic multiselect -->
|
|
19
|
+
* <ty-multiselect label="Skills" placeholder="Select skills" required>
|
|
20
|
+
* <ty-tag value="js">JavaScript</ty-tag>
|
|
21
|
+
* <ty-tag value="ts">TypeScript</ty-tag>
|
|
22
|
+
* <ty-tag value="py">Python</ty-tag>
|
|
23
|
+
* </ty-multiselect>
|
|
24
|
+
*
|
|
25
|
+
* <!-- With pre-selected values -->
|
|
26
|
+
* <ty-multiselect value="js,ts">
|
|
27
|
+
* <ty-tag value="js">JavaScript</ty-tag>
|
|
28
|
+
* <ty-tag value="ts">TypeScript</ty-tag>
|
|
29
|
+
* <ty-tag value="py">Python</ty-tag>
|
|
30
|
+
* </ty-multiselect>
|
|
31
|
+
*
|
|
32
|
+
* <!-- With rich tag content -->
|
|
33
|
+
* <ty-multiselect label="Team Members">
|
|
34
|
+
* <ty-tag value="1" flavor="primary">
|
|
35
|
+
* <div class="flex items-center gap-2">
|
|
36
|
+
* <img src="avatar1.jpg" class="w-6 h-6 rounded-full" />
|
|
37
|
+
* <span>John Doe</span>
|
|
38
|
+
* </div>
|
|
39
|
+
* </ty-tag>
|
|
40
|
+
* </ty-multiselect>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import type { Flavor, Size } from '../types/common.js';
|
|
44
|
+
import { TyComponent } from '../base/ty-component.js';
|
|
45
|
+
import type { PropertyChange } from '../utils/property-manager.js';
|
|
46
|
+
/**
|
|
47
|
+
* Tag data structure
|
|
48
|
+
*/
|
|
49
|
+
interface TagData {
|
|
50
|
+
value: string;
|
|
51
|
+
text: string;
|
|
52
|
+
element: HTMLElement;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Component state structure
|
|
56
|
+
*/
|
|
57
|
+
interface MultiselectState {
|
|
58
|
+
open: boolean;
|
|
59
|
+
search: string;
|
|
60
|
+
highlightedIndex: number;
|
|
61
|
+
filteredTags: TagData[];
|
|
62
|
+
selectedValues: string[];
|
|
63
|
+
mode: 'desktop' | 'mobile';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Ty Multiselect Component
|
|
67
|
+
*/
|
|
68
|
+
export declare class TyMultiselect extends TyComponent<MultiselectState> {
|
|
69
|
+
protected static properties: {
|
|
70
|
+
value: {
|
|
71
|
+
type: "string";
|
|
72
|
+
visual: boolean;
|
|
73
|
+
formValue: boolean;
|
|
74
|
+
emitChange: boolean;
|
|
75
|
+
default: string;
|
|
76
|
+
coerce: (v: any) => string;
|
|
77
|
+
};
|
|
78
|
+
name: {
|
|
79
|
+
type: "string";
|
|
80
|
+
default: string;
|
|
81
|
+
};
|
|
82
|
+
placeholder: {
|
|
83
|
+
type: "string";
|
|
84
|
+
visual: boolean;
|
|
85
|
+
default: string;
|
|
86
|
+
};
|
|
87
|
+
label: {
|
|
88
|
+
type: "string";
|
|
89
|
+
visual: boolean;
|
|
90
|
+
default: string;
|
|
91
|
+
};
|
|
92
|
+
disabled: {
|
|
93
|
+
type: "boolean";
|
|
94
|
+
visual: boolean;
|
|
95
|
+
default: boolean;
|
|
96
|
+
};
|
|
97
|
+
readonly: {
|
|
98
|
+
type: "boolean";
|
|
99
|
+
visual: boolean;
|
|
100
|
+
default: boolean;
|
|
101
|
+
};
|
|
102
|
+
required: {
|
|
103
|
+
type: "boolean";
|
|
104
|
+
visual: boolean;
|
|
105
|
+
default: boolean;
|
|
106
|
+
};
|
|
107
|
+
externalSearch: {
|
|
108
|
+
type: "boolean";
|
|
109
|
+
visual: boolean;
|
|
110
|
+
default: boolean;
|
|
111
|
+
aliases: {
|
|
112
|
+
'external-search': boolean;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
size: {
|
|
116
|
+
type: "string";
|
|
117
|
+
visual: boolean;
|
|
118
|
+
default: string;
|
|
119
|
+
validate: (v: any) => boolean;
|
|
120
|
+
coerce: (v: any) => any;
|
|
121
|
+
};
|
|
122
|
+
flavor: {
|
|
123
|
+
type: "string";
|
|
124
|
+
visual: boolean;
|
|
125
|
+
default: string;
|
|
126
|
+
validate: (v: any) => boolean;
|
|
127
|
+
coerce: (v: any) => any;
|
|
128
|
+
};
|
|
129
|
+
debounce: {
|
|
130
|
+
type: "number";
|
|
131
|
+
default: number;
|
|
132
|
+
validate: (v: any) => boolean;
|
|
133
|
+
coerce: (v: any) => number;
|
|
134
|
+
};
|
|
135
|
+
'selected-label': {
|
|
136
|
+
type: "string";
|
|
137
|
+
visual: boolean;
|
|
138
|
+
default: string;
|
|
139
|
+
};
|
|
140
|
+
'available-label': {
|
|
141
|
+
type: "string";
|
|
142
|
+
visual: boolean;
|
|
143
|
+
default: string;
|
|
144
|
+
};
|
|
145
|
+
'no-options-message': {
|
|
146
|
+
type: "string";
|
|
147
|
+
visual: boolean;
|
|
148
|
+
default: string;
|
|
149
|
+
};
|
|
150
|
+
loading: {
|
|
151
|
+
type: "boolean";
|
|
152
|
+
visual: boolean;
|
|
153
|
+
default: boolean;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
private _name;
|
|
157
|
+
private _placeholder;
|
|
158
|
+
private _label;
|
|
159
|
+
private _disabled;
|
|
160
|
+
private _readonly;
|
|
161
|
+
private _required;
|
|
162
|
+
private _externalSearch;
|
|
163
|
+
private _loading;
|
|
164
|
+
private _scrollLockId;
|
|
165
|
+
private _size;
|
|
166
|
+
private _selectedLabel;
|
|
167
|
+
private _availableLabel;
|
|
168
|
+
private _noOptionsMessage;
|
|
169
|
+
private _state;
|
|
170
|
+
private _stubClickHandler;
|
|
171
|
+
private _tagClickHandler;
|
|
172
|
+
private _tagDismissHandler;
|
|
173
|
+
private _searchInputHandler;
|
|
174
|
+
private _blockSearchClick;
|
|
175
|
+
private _keyboardHandler;
|
|
176
|
+
private _debounce;
|
|
177
|
+
private _searchDebounceTimer;
|
|
178
|
+
private _optionsScrollbar;
|
|
179
|
+
private _childObserver;
|
|
180
|
+
constructor();
|
|
181
|
+
/**
|
|
182
|
+
* Called when component is connected to DOM
|
|
183
|
+
* TyComponent handles property capture automatically
|
|
184
|
+
*/
|
|
185
|
+
protected onConnect(): void;
|
|
186
|
+
/**
|
|
187
|
+
* Called when component is disconnected from DOM
|
|
188
|
+
* Clean up event listeners and timers
|
|
189
|
+
*/
|
|
190
|
+
protected onDisconnect(): void;
|
|
191
|
+
/**
|
|
192
|
+
* Called when properties change
|
|
193
|
+
* Handle state synchronization BEFORE render
|
|
194
|
+
*/
|
|
195
|
+
protected onPropertiesChanged(changes: PropertyChange[]): void;
|
|
196
|
+
/**
|
|
197
|
+
* Toggle the loading visual state on the open popup.
|
|
198
|
+
* Replaces the available-options area with a centered spinner; search input stays usable.
|
|
199
|
+
* Pulls the latest registered loader SVG on each call so registry changes
|
|
200
|
+
* take effect on the next loading toggle.
|
|
201
|
+
*/
|
|
202
|
+
private applyLoadingState;
|
|
203
|
+
/**
|
|
204
|
+
* Get the form value for this component
|
|
205
|
+
* Returns FormData with multiple entries (HTMX standard)
|
|
206
|
+
*/
|
|
207
|
+
protected getFormValue(): FormDataEntryValue | FormData | null;
|
|
208
|
+
/**
|
|
209
|
+
* Parse multiselect value (comma-separated string to array)
|
|
210
|
+
*/
|
|
211
|
+
private parseValue;
|
|
212
|
+
/**
|
|
213
|
+
* Initialize component state from attributes
|
|
214
|
+
* Reads from both property and attribute (like ClojureScript version)
|
|
215
|
+
*/
|
|
216
|
+
private initializeState;
|
|
217
|
+
/**
|
|
218
|
+
* Get all ty-tag elements from the component (ALL slots)
|
|
219
|
+
*/
|
|
220
|
+
private getTagElements;
|
|
221
|
+
/**
|
|
222
|
+
* Extract value and text from a ty-tag element
|
|
223
|
+
*/
|
|
224
|
+
private getTagData;
|
|
225
|
+
/**
|
|
226
|
+
* Select a tag - set selected state, move to selected slot, make dismissible
|
|
227
|
+
*/
|
|
228
|
+
private selectTag;
|
|
229
|
+
/**
|
|
230
|
+
* Deselect a tag - remove selected state, remove from selected slot, remove dismissible
|
|
231
|
+
*/
|
|
232
|
+
private deselectTag;
|
|
233
|
+
/**
|
|
234
|
+
* Get array of currently selected values from tags (ALWAYS reads from DOM)
|
|
235
|
+
*/
|
|
236
|
+
private getSelectedValues;
|
|
237
|
+
/**
|
|
238
|
+
* Check if all available tags are selected
|
|
239
|
+
*/
|
|
240
|
+
private allTagsSelected;
|
|
241
|
+
/**
|
|
242
|
+
* Sync tag selection states with desired values
|
|
243
|
+
*/
|
|
244
|
+
private syncSelectedTags;
|
|
245
|
+
/**
|
|
246
|
+
* Central update function - synchronizes everything
|
|
247
|
+
* Uses TyComponent's property system for proper lifecycle
|
|
248
|
+
*/
|
|
249
|
+
private updateComponentValue;
|
|
250
|
+
/**
|
|
251
|
+
* Calculate and set dropdown position with smart direction detection
|
|
252
|
+
*/
|
|
253
|
+
private calculatePosition;
|
|
254
|
+
private _setupOptionsScrollbar;
|
|
255
|
+
private _destroyOptionsScrollbar;
|
|
256
|
+
/**
|
|
257
|
+
* Open dropdown dialog (desktop mode)
|
|
258
|
+
*
|
|
259
|
+
* `<dialog>.showModal()` puts the dialog in the top layer with a backdrop, but
|
|
260
|
+
* does NOT prevent the page behind it from scrolling. We use the shared scroll
|
|
261
|
+
* lock utility (overflow:hidden on <html>) to keep wheel/touch scrolling from
|
|
262
|
+
* leaking through to the body — same behavior <ty-dropdown> and <ty-modal>
|
|
263
|
+
* implement.
|
|
264
|
+
*/
|
|
265
|
+
private openDropdown;
|
|
266
|
+
/**
|
|
267
|
+
* Close dropdown dialog (desktop mode)
|
|
268
|
+
*/
|
|
269
|
+
private closeDropdown;
|
|
270
|
+
/**
|
|
271
|
+
* Open mobile modal (mobile mode)
|
|
272
|
+
* Now using <dialog> element for native z-index management
|
|
273
|
+
*/
|
|
274
|
+
private openMobileModal;
|
|
275
|
+
/**
|
|
276
|
+
* Close mobile modal (mobile mode)
|
|
277
|
+
* Now using <dialog> element for native management
|
|
278
|
+
*/
|
|
279
|
+
private closeMobileModal;
|
|
280
|
+
private handleStubClick;
|
|
281
|
+
private handleTagClick;
|
|
282
|
+
private handleTagDismiss;
|
|
283
|
+
private blockSearchClick;
|
|
284
|
+
private handleSearchInput;
|
|
285
|
+
private handleKeyboard;
|
|
286
|
+
/**
|
|
287
|
+
* Filter tags based on search query
|
|
288
|
+
*/
|
|
289
|
+
private filterTags;
|
|
290
|
+
/**
|
|
291
|
+
* Update visibility of tags based on filtered list
|
|
292
|
+
*/
|
|
293
|
+
private updateTagVisibility;
|
|
294
|
+
/**
|
|
295
|
+
* Show/hide the dropdown options area
|
|
296
|
+
*/
|
|
297
|
+
private updateOptionsVisibility;
|
|
298
|
+
/**
|
|
299
|
+
* Clear all tag highlights
|
|
300
|
+
*/
|
|
301
|
+
private clearHighlights;
|
|
302
|
+
/**
|
|
303
|
+
* Highlight tag at specific index
|
|
304
|
+
*/
|
|
305
|
+
private highlightTag;
|
|
306
|
+
/**
|
|
307
|
+
* Dispatch search event for external search handling
|
|
308
|
+
* With optional debounce support
|
|
309
|
+
*/
|
|
310
|
+
private dispatchSearchEvent;
|
|
311
|
+
/**
|
|
312
|
+
* Fire the actual search event
|
|
313
|
+
*/
|
|
314
|
+
private fireSearchEvent;
|
|
315
|
+
/**
|
|
316
|
+
* Dispatch lifecycle events for popup open/close.
|
|
317
|
+
* On open with external-search, also fire a `search` event with an empty
|
|
318
|
+
* query so consumers have a clean hook to reset/refetch the option list.
|
|
319
|
+
*/
|
|
320
|
+
private fireOpenEvent;
|
|
321
|
+
private fireCloseEvent;
|
|
322
|
+
/**
|
|
323
|
+
* Dispatch custom change event
|
|
324
|
+
*/
|
|
325
|
+
private dispatchChangeEvent;
|
|
326
|
+
/**
|
|
327
|
+
* Main render method (required by TyComponent)
|
|
328
|
+
* Delegates to mode-specific renderer
|
|
329
|
+
*/
|
|
330
|
+
protected render(): void;
|
|
331
|
+
/**
|
|
332
|
+
* Setup event listeners
|
|
333
|
+
*/
|
|
334
|
+
private setupEventListeners;
|
|
335
|
+
/**
|
|
336
|
+
* Build CSS class list for stub
|
|
337
|
+
*/
|
|
338
|
+
private buildStubClasses;
|
|
339
|
+
/**
|
|
340
|
+
* Render desktop mode with dialog
|
|
341
|
+
*/
|
|
342
|
+
private renderDesktop;
|
|
343
|
+
/**
|
|
344
|
+
* Render mobile mode with full-screen modal
|
|
345
|
+
* Following dropdown.ts mobile structure
|
|
346
|
+
*/
|
|
347
|
+
private renderMobile;
|
|
348
|
+
/**
|
|
349
|
+
* Setup event listeners for mobile mode
|
|
350
|
+
* Using <dialog> element - backdrop clicks handled natively
|
|
351
|
+
*/
|
|
352
|
+
private setupMobileEventListeners;
|
|
353
|
+
/**
|
|
354
|
+
* Handle mobile stub click - open modal
|
|
355
|
+
*/
|
|
356
|
+
private handleMobileStubClick;
|
|
357
|
+
/**
|
|
358
|
+
* Handle mobile tag click - select and potentially close
|
|
359
|
+
*/
|
|
360
|
+
private handleMobileTagClick;
|
|
361
|
+
/**
|
|
362
|
+
* Update mobile selected section state (collapsed view, empty states, etc.)
|
|
363
|
+
*/
|
|
364
|
+
private updateMobileSelectedState;
|
|
365
|
+
/**
|
|
366
|
+
* Update selection display (show/hide placeholder)
|
|
367
|
+
* Matches dropdown.ts pattern - uses CSS via has-selection class
|
|
368
|
+
*/
|
|
369
|
+
private updateSelectionDisplay;
|
|
370
|
+
get value(): string;
|
|
371
|
+
set value(val: string);
|
|
372
|
+
get name(): string;
|
|
373
|
+
set name(val: string);
|
|
374
|
+
get placeholder(): string;
|
|
375
|
+
set placeholder(val: string);
|
|
376
|
+
get label(): string;
|
|
377
|
+
set label(val: string);
|
|
378
|
+
get disabled(): boolean;
|
|
379
|
+
set disabled(value: boolean);
|
|
380
|
+
get loading(): boolean;
|
|
381
|
+
set loading(value: boolean);
|
|
382
|
+
get readonly(): boolean;
|
|
383
|
+
set readonly(value: boolean);
|
|
384
|
+
get required(): boolean;
|
|
385
|
+
set required(value: boolean);
|
|
386
|
+
get externalSearch(): boolean;
|
|
387
|
+
set externalSearch(value: boolean);
|
|
388
|
+
get debounce(): number;
|
|
389
|
+
set debounce(value: number | string);
|
|
390
|
+
get size(): Size;
|
|
391
|
+
set size(value: Size);
|
|
392
|
+
get flavor(): Flavor;
|
|
393
|
+
set flavor(value: Flavor);
|
|
394
|
+
get form(): HTMLFormElement | null;
|
|
395
|
+
}
|
|
396
|
+
export {};
|
|
397
|
+
//# sourceMappingURL=multiselect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiselect.d.ts","sourceRoot":"","sources":["../../src/components/multiselect.ts"],"names":[],"mappings":"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"}
|