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.
Files changed (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/css/tyrell-brand.css +767 -0
  4. package/css/tyrell.css +1679 -0
  5. package/dist/tyrell-brand.css +767 -0
  6. package/dist/tyrell.css +1679 -0
  7. package/dist/tyrell.js +2 -0
  8. package/lib/base/ty-component.d.ts +133 -0
  9. package/lib/base/ty-component.d.ts.map +1 -0
  10. package/lib/base/ty-component.js +297 -0
  11. package/lib/base/ty-component.js.map +1 -0
  12. package/lib/components/button.d.ts +135 -0
  13. package/lib/components/button.d.ts.map +1 -0
  14. package/lib/components/button.js +277 -0
  15. package/lib/components/button.js.map +1 -0
  16. package/lib/components/calendar-month.d.ts +132 -0
  17. package/lib/components/calendar-month.d.ts.map +1 -0
  18. package/lib/components/calendar-month.js +440 -0
  19. package/lib/components/calendar-month.js.map +1 -0
  20. package/lib/components/calendar-navigation.d.ts +137 -0
  21. package/lib/components/calendar-navigation.d.ts.map +1 -0
  22. package/lib/components/calendar-navigation.js +366 -0
  23. package/lib/components/calendar-navigation.js.map +1 -0
  24. package/lib/components/calendar.d.ts +166 -0
  25. package/lib/components/calendar.d.ts.map +1 -0
  26. package/lib/components/calendar.js +774 -0
  27. package/lib/components/calendar.js.map +1 -0
  28. package/lib/components/checkbox.d.ts +189 -0
  29. package/lib/components/checkbox.d.ts.map +1 -0
  30. package/lib/components/checkbox.js +400 -0
  31. package/lib/components/checkbox.js.map +1 -0
  32. package/lib/components/copy.d.ts +180 -0
  33. package/lib/components/copy.d.ts.map +1 -0
  34. package/lib/components/copy.js +393 -0
  35. package/lib/components/copy.js.map +1 -0
  36. package/lib/components/date-picker.d.ts +379 -0
  37. package/lib/components/date-picker.d.ts.map +1 -0
  38. package/lib/components/date-picker.js +1586 -0
  39. package/lib/components/date-picker.js.map +1 -0
  40. package/lib/components/dropdown.d.ts +424 -0
  41. package/lib/components/dropdown.d.ts.map +1 -0
  42. package/lib/components/dropdown.js +1640 -0
  43. package/lib/components/dropdown.js.map +1 -0
  44. package/lib/components/file-upload.d.ts +121 -0
  45. package/lib/components/file-upload.d.ts.map +1 -0
  46. package/lib/components/file-upload.js +441 -0
  47. package/lib/components/file-upload.js.map +1 -0
  48. package/lib/components/icon.d.ts +118 -0
  49. package/lib/components/icon.d.ts.map +1 -0
  50. package/lib/components/icon.js +245 -0
  51. package/lib/components/icon.js.map +1 -0
  52. package/lib/components/input.d.ts +270 -0
  53. package/lib/components/input.d.ts.map +1 -0
  54. package/lib/components/input.js +721 -0
  55. package/lib/components/input.js.map +1 -0
  56. package/lib/components/modal.d.ts +78 -0
  57. package/lib/components/modal.d.ts.map +1 -0
  58. package/lib/components/modal.js +497 -0
  59. package/lib/components/modal.js.map +1 -0
  60. package/lib/components/multiselect.d.ts +397 -0
  61. package/lib/components/multiselect.d.ts.map +1 -0
  62. package/lib/components/multiselect.js +1595 -0
  63. package/lib/components/multiselect.js.map +1 -0
  64. package/lib/components/option.d.ts +66 -0
  65. package/lib/components/option.d.ts.map +1 -0
  66. package/lib/components/option.js +314 -0
  67. package/lib/components/option.js.map +1 -0
  68. package/lib/components/popup.d.ts +43 -0
  69. package/lib/components/popup.d.ts.map +1 -0
  70. package/lib/components/popup.js +380 -0
  71. package/lib/components/popup.js.map +1 -0
  72. package/lib/components/radio.d.ts +198 -0
  73. package/lib/components/radio.d.ts.map +1 -0
  74. package/lib/components/radio.js +437 -0
  75. package/lib/components/radio.js.map +1 -0
  76. package/lib/components/resize-observer.d.ts +48 -0
  77. package/lib/components/resize-observer.d.ts.map +1 -0
  78. package/lib/components/resize-observer.js +108 -0
  79. package/lib/components/resize-observer.js.map +1 -0
  80. package/lib/components/scroll-container.d.ts +51 -0
  81. package/lib/components/scroll-container.d.ts.map +1 -0
  82. package/lib/components/scroll-container.js +239 -0
  83. package/lib/components/scroll-container.js.map +1 -0
  84. package/lib/components/step.d.ts +26 -0
  85. package/lib/components/step.d.ts.map +1 -0
  86. package/lib/components/step.js +75 -0
  87. package/lib/components/step.js.map +1 -0
  88. package/lib/components/switch.d.ts +111 -0
  89. package/lib/components/switch.d.ts.map +1 -0
  90. package/lib/components/switch.js +240 -0
  91. package/lib/components/switch.js.map +1 -0
  92. package/lib/components/tab.d.ts +23 -0
  93. package/lib/components/tab.d.ts.map +1 -0
  94. package/lib/components/tab.js +76 -0
  95. package/lib/components/tab.js.map +1 -0
  96. package/lib/components/tabs.d.ts +93 -0
  97. package/lib/components/tabs.d.ts.map +1 -0
  98. package/lib/components/tabs.js +653 -0
  99. package/lib/components/tabs.js.map +1 -0
  100. package/lib/components/tag.d.ts +144 -0
  101. package/lib/components/tag.d.ts.map +1 -0
  102. package/lib/components/tag.js +316 -0
  103. package/lib/components/tag.js.map +1 -0
  104. package/lib/components/textarea.d.ts +241 -0
  105. package/lib/components/textarea.d.ts.map +1 -0
  106. package/lib/components/textarea.js +585 -0
  107. package/lib/components/textarea.js.map +1 -0
  108. package/lib/components/tooltip.d.ts +40 -0
  109. package/lib/components/tooltip.d.ts.map +1 -0
  110. package/lib/components/tooltip.js +439 -0
  111. package/lib/components/tooltip.js.map +1 -0
  112. package/lib/components/wizard.d.ts +86 -0
  113. package/lib/components/wizard.d.ts.map +1 -0
  114. package/lib/components/wizard.js +636 -0
  115. package/lib/components/wizard.js.map +1 -0
  116. package/lib/icons/fontawesome/brands.d.ts +557 -0
  117. package/lib/icons/fontawesome/brands.d.ts.map +1 -0
  118. package/lib/icons/fontawesome/brands.js +557 -0
  119. package/lib/icons/fontawesome/brands.js.map +1 -0
  120. package/lib/icons/fontawesome/regular.d.ts +281 -0
  121. package/lib/icons/fontawesome/regular.d.ts.map +1 -0
  122. package/lib/icons/fontawesome/regular.js +281 -0
  123. package/lib/icons/fontawesome/regular.js.map +1 -0
  124. package/lib/icons/fontawesome/solid.d.ts +1992 -0
  125. package/lib/icons/fontawesome/solid.d.ts.map +1 -0
  126. package/lib/icons/fontawesome/solid.js +1992 -0
  127. package/lib/icons/fontawesome/solid.js.map +1 -0
  128. package/lib/icons/heroicons/micro.d.ts +324 -0
  129. package/lib/icons/heroicons/micro.d.ts.map +1 -0
  130. package/lib/icons/heroicons/micro.js +1032 -0
  131. package/lib/icons/heroicons/micro.js.map +1 -0
  132. package/lib/icons/heroicons/mini.d.ts +332 -0
  133. package/lib/icons/heroicons/mini.d.ts.map +1 -0
  134. package/lib/icons/heroicons/mini.js +1038 -0
  135. package/lib/icons/heroicons/mini.js.map +1 -0
  136. package/lib/icons/heroicons/outline.d.ts +332 -0
  137. package/lib/icons/heroicons/outline.d.ts.map +1 -0
  138. package/lib/icons/heroicons/outline.js +993 -0
  139. package/lib/icons/heroicons/outline.js.map +1 -0
  140. package/lib/icons/heroicons/solid.d.ts +332 -0
  141. package/lib/icons/heroicons/solid.d.ts.map +1 -0
  142. package/lib/icons/heroicons/solid.js +1063 -0
  143. package/lib/icons/heroicons/solid.js.map +1 -0
  144. package/lib/icons/lucide.d.ts +1872 -0
  145. package/lib/icons/lucide.d.ts.map +1 -0
  146. package/lib/icons/lucide.js +28212 -0
  147. package/lib/icons/lucide.js.map +1 -0
  148. package/lib/icons/material/filled.d.ts +2180 -0
  149. package/lib/icons/material/filled.d.ts.map +1 -0
  150. package/lib/icons/material/filled.js +14003 -0
  151. package/lib/icons/material/filled.js.map +1 -0
  152. package/lib/icons/material/outlined.d.ts +2142 -0
  153. package/lib/icons/material/outlined.d.ts.map +1 -0
  154. package/lib/icons/material/outlined.js +14545 -0
  155. package/lib/icons/material/outlined.js.map +1 -0
  156. package/lib/icons/material/round.d.ts +2147 -0
  157. package/lib/icons/material/round.d.ts.map +1 -0
  158. package/lib/icons/material/round.js +14779 -0
  159. package/lib/icons/material/round.js.map +1 -0
  160. package/lib/icons/material/sharp.d.ts +2147 -0
  161. package/lib/icons/material/sharp.d.ts.map +1 -0
  162. package/lib/icons/material/sharp.js +14189 -0
  163. package/lib/icons/material/sharp.js.map +1 -0
  164. package/lib/icons/material/two-tone.d.ts +2185 -0
  165. package/lib/icons/material/two-tone.d.ts.map +1 -0
  166. package/lib/icons/material/two-tone.js +17152 -0
  167. package/lib/icons/material/two-tone.js.map +1 -0
  168. package/lib/index.d.ts +86 -0
  169. package/lib/index.d.ts.map +1 -0
  170. package/lib/index.js +78 -0
  171. package/lib/index.js.map +1 -0
  172. package/lib/styles/button.d.ts +14 -0
  173. package/lib/styles/button.d.ts.map +1 -0
  174. package/lib/styles/button.js +498 -0
  175. package/lib/styles/button.js.map +1 -0
  176. package/lib/styles/calendar-month.d.ts +6 -0
  177. package/lib/styles/calendar-month.d.ts.map +1 -0
  178. package/lib/styles/calendar-month.js +275 -0
  179. package/lib/styles/calendar-month.js.map +1 -0
  180. package/lib/styles/calendar-navigation.d.ts +6 -0
  181. package/lib/styles/calendar-navigation.d.ts.map +1 -0
  182. package/lib/styles/calendar-navigation.js +143 -0
  183. package/lib/styles/calendar-navigation.js.map +1 -0
  184. package/lib/styles/calendar.d.ts +6 -0
  185. package/lib/styles/calendar.d.ts.map +1 -0
  186. package/lib/styles/calendar.js +28 -0
  187. package/lib/styles/calendar.js.map +1 -0
  188. package/lib/styles/checkbox.d.ts +9 -0
  189. package/lib/styles/checkbox.d.ts.map +1 -0
  190. package/lib/styles/checkbox.js +19 -0
  191. package/lib/styles/checkbox.js.map +1 -0
  192. package/lib/styles/copy.d.ts +7 -0
  193. package/lib/styles/copy.d.ts.map +1 -0
  194. package/lib/styles/copy.js +94 -0
  195. package/lib/styles/copy.js.map +1 -0
  196. package/lib/styles/custom-scrollbar.d.ts +6 -0
  197. package/lib/styles/custom-scrollbar.d.ts.map +1 -0
  198. package/lib/styles/custom-scrollbar.js +157 -0
  199. package/lib/styles/custom-scrollbar.js.map +1 -0
  200. package/lib/styles/date-picker.d.ts +6 -0
  201. package/lib/styles/date-picker.d.ts.map +1 -0
  202. package/lib/styles/date-picker.js +438 -0
  203. package/lib/styles/date-picker.js.map +1 -0
  204. package/lib/styles/dropdown.d.ts +12 -0
  205. package/lib/styles/dropdown.d.ts.map +1 -0
  206. package/lib/styles/dropdown.js +1081 -0
  207. package/lib/styles/dropdown.js.map +1 -0
  208. package/lib/styles/file-upload.d.ts +2 -0
  209. package/lib/styles/file-upload.d.ts.map +1 -0
  210. package/lib/styles/file-upload.js +241 -0
  211. package/lib/styles/file-upload.js.map +1 -0
  212. package/lib/styles/icon.d.ts +6 -0
  213. package/lib/styles/icon.d.ts.map +1 -0
  214. package/lib/styles/icon.js +241 -0
  215. package/lib/styles/icon.js.map +1 -0
  216. package/lib/styles/input.d.ts +7 -0
  217. package/lib/styles/input.d.ts.map +1 -0
  218. package/lib/styles/input.js +685 -0
  219. package/lib/styles/input.js.map +1 -0
  220. package/lib/styles/modal.d.ts +8 -0
  221. package/lib/styles/modal.d.ts.map +1 -0
  222. package/lib/styles/modal.js +134 -0
  223. package/lib/styles/modal.js.map +1 -0
  224. package/lib/styles/multiselect.d.ts +6 -0
  225. package/lib/styles/multiselect.d.ts.map +1 -0
  226. package/lib/styles/multiselect.js +825 -0
  227. package/lib/styles/multiselect.js.map +1 -0
  228. package/lib/styles/option.d.ts +6 -0
  229. package/lib/styles/option.d.ts.map +1 -0
  230. package/lib/styles/option.js +116 -0
  231. package/lib/styles/option.js.map +1 -0
  232. package/lib/styles/popup.d.ts +8 -0
  233. package/lib/styles/popup.d.ts.map +1 -0
  234. package/lib/styles/popup.js +95 -0
  235. package/lib/styles/popup.js.map +1 -0
  236. package/lib/styles/radio.d.ts +8 -0
  237. package/lib/styles/radio.d.ts.map +1 -0
  238. package/lib/styles/radio.js +160 -0
  239. package/lib/styles/radio.js.map +1 -0
  240. package/lib/styles/resize-observer.d.ts +6 -0
  241. package/lib/styles/resize-observer.d.ts.map +1 -0
  242. package/lib/styles/resize-observer.js +18 -0
  243. package/lib/styles/resize-observer.js.map +1 -0
  244. package/lib/styles/scroll-container.d.ts +6 -0
  245. package/lib/styles/scroll-container.d.ts.map +1 -0
  246. package/lib/styles/scroll-container.js +198 -0
  247. package/lib/styles/scroll-container.js.map +1 -0
  248. package/lib/styles/step.d.ts +5 -0
  249. package/lib/styles/step.d.ts.map +1 -0
  250. package/lib/styles/step.js +50 -0
  251. package/lib/styles/step.js.map +1 -0
  252. package/lib/styles/switch.d.ts +9 -0
  253. package/lib/styles/switch.d.ts.map +1 -0
  254. package/lib/styles/switch.js +100 -0
  255. package/lib/styles/switch.js.map +1 -0
  256. package/lib/styles/tab.d.ts +5 -0
  257. package/lib/styles/tab.d.ts.map +1 -0
  258. package/lib/styles/tab.js +51 -0
  259. package/lib/styles/tab.js.map +1 -0
  260. package/lib/styles/tabs.d.ts +13 -0
  261. package/lib/styles/tabs.d.ts.map +1 -0
  262. package/lib/styles/tabs.js +184 -0
  263. package/lib/styles/tabs.js.map +1 -0
  264. package/lib/styles/tag.d.ts +6 -0
  265. package/lib/styles/tag.d.ts.map +1 -0
  266. package/lib/styles/tag.js +409 -0
  267. package/lib/styles/tag.js.map +1 -0
  268. package/lib/styles/textarea.d.ts +6 -0
  269. package/lib/styles/textarea.d.ts.map +1 -0
  270. package/lib/styles/textarea.js +350 -0
  271. package/lib/styles/textarea.js.map +1 -0
  272. package/lib/styles/tooltip.d.ts +9 -0
  273. package/lib/styles/tooltip.d.ts.map +1 -0
  274. package/lib/styles/tooltip.js +133 -0
  275. package/lib/styles/tooltip.js.map +1 -0
  276. package/lib/styles/wizard.d.ts +25 -0
  277. package/lib/styles/wizard.d.ts.map +1 -0
  278. package/lib/styles/wizard.js +348 -0
  279. package/lib/styles/wizard.js.map +1 -0
  280. package/lib/types/common.d.ts +143 -0
  281. package/lib/types/common.d.ts.map +1 -0
  282. package/lib/types/common.js +5 -0
  283. package/lib/types/common.js.map +1 -0
  284. package/lib/utils/calendar-utils.d.ts +176 -0
  285. package/lib/utils/calendar-utils.d.ts.map +1 -0
  286. package/lib/utils/calendar-utils.js +370 -0
  287. package/lib/utils/calendar-utils.js.map +1 -0
  288. package/lib/utils/custom-scrollbar.d.ts +82 -0
  289. package/lib/utils/custom-scrollbar.d.ts.map +1 -0
  290. package/lib/utils/custom-scrollbar.js +320 -0
  291. package/lib/utils/custom-scrollbar.js.map +1 -0
  292. package/lib/utils/icon-registry.d.ts +78 -0
  293. package/lib/utils/icon-registry.d.ts.map +1 -0
  294. package/lib/utils/icon-registry.js +304 -0
  295. package/lib/utils/icon-registry.js.map +1 -0
  296. package/lib/utils/loader-registry.d.ts +35 -0
  297. package/lib/utils/loader-registry.d.ts.map +1 -0
  298. package/lib/utils/loader-registry.js +43 -0
  299. package/lib/utils/loader-registry.js.map +1 -0
  300. package/lib/utils/locale.d.ts +136 -0
  301. package/lib/utils/locale.d.ts.map +1 -0
  302. package/lib/utils/locale.js +213 -0
  303. package/lib/utils/locale.js.map +1 -0
  304. package/lib/utils/mobile.d.ts +14 -0
  305. package/lib/utils/mobile.d.ts.map +1 -0
  306. package/lib/utils/mobile.js +21 -0
  307. package/lib/utils/mobile.js.map +1 -0
  308. package/lib/utils/number-format.d.ts +83 -0
  309. package/lib/utils/number-format.d.ts.map +1 -0
  310. package/lib/utils/number-format.js +143 -0
  311. package/lib/utils/number-format.js.map +1 -0
  312. package/lib/utils/parse-boolean.d.ts +39 -0
  313. package/lib/utils/parse-boolean.d.ts.map +1 -0
  314. package/lib/utils/parse-boolean.js +58 -0
  315. package/lib/utils/parse-boolean.js.map +1 -0
  316. package/lib/utils/positioning.d.ts +143 -0
  317. package/lib/utils/positioning.d.ts.map +1 -0
  318. package/lib/utils/positioning.js +308 -0
  319. package/lib/utils/positioning.js.map +1 -0
  320. package/lib/utils/property-capture.d.ts +132 -0
  321. package/lib/utils/property-capture.d.ts.map +1 -0
  322. package/lib/utils/property-capture.js +152 -0
  323. package/lib/utils/property-capture.js.map +1 -0
  324. package/lib/utils/property-manager.d.ts +90 -0
  325. package/lib/utils/property-manager.d.ts.map +1 -0
  326. package/lib/utils/property-manager.js +197 -0
  327. package/lib/utils/property-manager.js.map +1 -0
  328. package/lib/utils/resize-observer.d.ts +42 -0
  329. package/lib/utils/resize-observer.d.ts.map +1 -0
  330. package/lib/utils/resize-observer.js +71 -0
  331. package/lib/utils/resize-observer.js.map +1 -0
  332. package/lib/utils/scroll-lock.d.ts +79 -0
  333. package/lib/utils/scroll-lock.d.ts.map +1 -0
  334. package/lib/utils/scroll-lock.js +197 -0
  335. package/lib/utils/scroll-lock.js.map +1 -0
  336. package/lib/utils/styles.d.ts +27 -0
  337. package/lib/utils/styles.d.ts.map +1 -0
  338. package/lib/utils/styles.js +53 -0
  339. package/lib/utils/styles.js.map +1 -0
  340. package/lib/version.d.ts +8 -0
  341. package/lib/version.d.ts.map +1 -0
  342. package/lib/version.js +11 -0
  343. package/lib/version.js.map +1 -0
  344. 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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"}