tyrell-components 1.0.0-TC7

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