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.
Files changed (358) hide show
  1. package/README.md +10 -2
  2. package/css/tyrell-theme.css +192 -180
  3. package/css/tyrell.css +23 -0
  4. package/dist/tyrell-colors-static.css +1 -316
  5. package/dist/tyrell-theme.css +1 -1454
  6. package/dist/tyrell.css +1 -1371
  7. package/dist/tyrell.js +1 -1
  8. package/lib/base/ty-component.d.ts +20 -10
  9. package/lib/base/ty-component.js +196 -319
  10. package/lib/components/button.d.ts +3 -17
  11. package/lib/components/button.js +261 -295
  12. package/lib/components/calendar-month.d.ts +4 -50
  13. package/lib/components/calendar-month.js +443 -582
  14. package/lib/components/calendar-navigation.d.ts +3 -48
  15. package/lib/components/calendar-navigation.js +239 -362
  16. package/lib/components/calendar.d.ts +8 -83
  17. package/lib/components/calendar.js +616 -829
  18. package/lib/components/checkbox.d.ts +5 -72
  19. package/lib/components/checkbox.js +273 -416
  20. package/lib/components/copy.d.ts +4 -57
  21. package/lib/components/copy.js +280 -397
  22. package/lib/components/date-picker.d.ts +21 -163
  23. package/lib/components/date-picker.js +1143 -1674
  24. package/lib/components/file-upload.d.ts +9 -15
  25. package/lib/components/file-upload.js +404 -426
  26. package/lib/components/icon.d.ts +3 -24
  27. package/lib/components/icon.js +141 -230
  28. package/lib/components/input.d.ts +8 -108
  29. package/lib/components/input.js +593 -784
  30. package/lib/components/modal.d.ts +17 -26
  31. package/lib/components/modal.js +340 -484
  32. package/lib/components/option.d.ts +2 -9
  33. package/lib/components/option.js +168 -216
  34. package/lib/components/popup.d.ts +2 -17
  35. package/lib/components/popup.js +249 -380
  36. package/lib/components/radio.d.ts +5 -25
  37. package/lib/components/radio.js +407 -461
  38. package/lib/components/resize-observer.d.ts +3 -30
  39. package/lib/components/resize-observer.js +69 -103
  40. package/lib/components/scroll-container.d.ts +2 -12
  41. package/lib/components/scroll-container.js +293 -338
  42. package/lib/components/select.d.ts +87 -159
  43. package/lib/components/select.js +1609 -2090
  44. package/lib/components/selected-tags.d.ts +5 -48
  45. package/lib/components/selected-tags.js +188 -276
  46. package/lib/components/step.d.ts +1 -6
  47. package/lib/components/step.js +62 -68
  48. package/lib/components/switch.d.ts +1 -12
  49. package/lib/components/switch.js +214 -247
  50. package/lib/components/tab.d.ts +1 -6
  51. package/lib/components/tab.js +62 -69
  52. package/lib/components/tabs.d.ts +6 -63
  53. package/lib/components/tabs.js +545 -777
  54. package/lib/components/tag.d.ts +3 -37
  55. package/lib/components/tag.js +236 -335
  56. package/lib/components/textarea.d.ts +7 -87
  57. package/lib/components/textarea.js +457 -627
  58. package/lib/components/tooltip.d.ts +3 -11
  59. package/lib/components/tooltip.js +307 -443
  60. package/lib/components/wizard.d.ts +6 -54
  61. package/lib/components/wizard.js +405 -618
  62. package/lib/icons/fontawesome/brands.d.ts +0 -1
  63. package/lib/icons/fontawesome/brands.js +0 -8
  64. package/lib/icons/fontawesome/regular.d.ts +0 -1
  65. package/lib/icons/fontawesome/regular.js +0 -8
  66. package/lib/icons/fontawesome/solid.d.ts +0 -1
  67. package/lib/icons/fontawesome/solid.js +0 -8
  68. package/lib/icons/heroicons/micro.d.ts +0 -1
  69. package/lib/icons/heroicons/micro.js +392 -400
  70. package/lib/icons/heroicons/mini.d.ts +0 -1
  71. package/lib/icons/heroicons/mini.js +382 -390
  72. package/lib/icons/heroicons/outline.d.ts +0 -1
  73. package/lib/icons/heroicons/outline.js +337 -345
  74. package/lib/icons/heroicons/solid.d.ts +0 -1
  75. package/lib/icons/heroicons/solid.js +407 -415
  76. package/lib/icons/lucide.d.ts +0 -1
  77. package/lib/icons/lucide.js +24479 -26351
  78. package/lib/icons/material/filled.d.ts +0 -1
  79. package/lib/icons/material/filled.js +9653 -9663
  80. package/lib/icons/material/outlined.d.ts +0 -1
  81. package/lib/icons/material/outlined.js +10271 -10281
  82. package/lib/icons/material/round.d.ts +0 -1
  83. package/lib/icons/material/round.js +10495 -10505
  84. package/lib/icons/material/sharp.d.ts +0 -1
  85. package/lib/icons/material/sharp.js +9905 -9915
  86. package/lib/icons/material/two-tone.d.ts +0 -1
  87. package/lib/icons/material/two-tone.js +12792 -12802
  88. package/lib/index.d.ts +0 -1
  89. package/lib/index.js +21 -41
  90. package/lib/styles/button.d.ts +2 -20
  91. package/lib/styles/button.js +202 -404
  92. package/lib/styles/calendar-month.d.ts +1 -5
  93. package/lib/styles/calendar-month.js +127 -244
  94. package/lib/styles/calendar-navigation.d.ts +2 -6
  95. package/lib/styles/calendar-navigation.js +64 -104
  96. package/lib/styles/calendar.d.ts +1 -2
  97. package/lib/styles/calendar.js +9 -22
  98. package/lib/styles/checkbox.d.ts +0 -1
  99. package/lib/styles/checkbox.js +45 -94
  100. package/lib/styles/copy.d.ts +0 -1
  101. package/lib/styles/copy.js +67 -106
  102. package/lib/styles/custom-scrollbar.d.ts +1 -2
  103. package/lib/styles/custom-scrollbar.js +80 -115
  104. package/lib/styles/date-picker.d.ts +1 -5
  105. package/lib/styles/date-picker.js +261 -335
  106. package/lib/styles/field-size.d.ts +6 -0
  107. package/lib/styles/field-size.js +91 -0
  108. package/lib/styles/file-upload.d.ts +1 -2
  109. package/lib/styles/file-upload.js +143 -188
  110. package/lib/styles/icon.d.ts +2 -6
  111. package/lib/styles/icon.js +92 -170
  112. package/lib/styles/input.d.ts +1 -6
  113. package/lib/styles/input.js +125 -290
  114. package/lib/styles/modal.d.ts +1 -2
  115. package/lib/styles/modal.js +71 -108
  116. package/lib/styles/option.d.ts +2 -6
  117. package/lib/styles/option.js +49 -64
  118. package/lib/styles/popup.d.ts +1 -2
  119. package/lib/styles/popup.js +42 -77
  120. package/lib/styles/radio.d.ts +0 -1
  121. package/lib/styles/radio.js +69 -110
  122. package/lib/styles/resize-observer.d.ts +1 -2
  123. package/lib/styles/resize-observer.js +2 -12
  124. package/lib/styles/scroll-container.d.ts +1 -2
  125. package/lib/styles/scroll-container.js +100 -149
  126. package/lib/styles/select-base.d.ts +0 -1
  127. package/lib/styles/select-base.js +597 -785
  128. package/lib/styles/select.d.ts +1 -2
  129. package/lib/styles/select.js +140 -236
  130. package/lib/styles/step.d.ts +1 -2
  131. package/lib/styles/step.js +22 -33
  132. package/lib/styles/switch.d.ts +0 -1
  133. package/lib/styles/switch.js +34 -73
  134. package/lib/styles/tab.d.ts +1 -2
  135. package/lib/styles/tab.js +22 -34
  136. package/lib/styles/tabs.d.ts +3 -11
  137. package/lib/styles/tabs.js +190 -222
  138. package/lib/styles/tag.d.ts +1 -5
  139. package/lib/styles/tag.js +136 -218
  140. package/lib/styles/textarea.d.ts +1 -2
  141. package/lib/styles/textarea.js +210 -319
  142. package/lib/styles/tooltip.d.ts +0 -1
  143. package/lib/styles/tooltip.js +3 -13
  144. package/lib/styles/wizard.d.ts +5 -21
  145. package/lib/styles/wizard.js +170 -306
  146. package/lib/types/common.d.ts +2 -2
  147. package/lib/types/common.js +6 -17
  148. package/lib/utils/calendar-utils.d.ts +4 -21
  149. package/lib/utils/calendar-utils.js +100 -273
  150. package/lib/utils/custom-scrollbar.d.ts +6 -20
  151. package/lib/utils/custom-scrollbar.js +273 -317
  152. package/lib/utils/flavor-sheet.d.ts +0 -1
  153. package/lib/utils/flavor-sheet.js +14 -37
  154. package/lib/utils/icon-registry.d.ts +0 -2
  155. package/lib/utils/icon-registry.js +137 -243
  156. package/lib/utils/icons.d.ts +0 -1
  157. package/lib/utils/icons.js +0 -9
  158. package/lib/utils/loader-registry.d.ts +0 -1
  159. package/lib/utils/loader-registry.js +3 -35
  160. package/lib/utils/locale.d.ts +2 -23
  161. package/lib/utils/locale.js +34 -120
  162. package/lib/utils/mobile.d.ts +0 -1
  163. package/lib/utils/mobile.js +1 -18
  164. package/lib/utils/number-format.d.ts +6 -3
  165. package/lib/utils/number-format.js +54 -110
  166. package/lib/utils/positioning.d.ts +50 -7
  167. package/lib/utils/positioning.js +224 -234
  168. package/lib/utils/property-capture.d.ts +5 -27
  169. package/lib/utils/property-capture.js +36 -144
  170. package/lib/utils/property-manager.d.ts +0 -1
  171. package/lib/utils/property-manager.js +126 -196
  172. package/lib/utils/resize-observer.d.ts +0 -1
  173. package/lib/utils/resize-observer.js +23 -59
  174. package/lib/utils/scroll-lock.d.ts +4 -11
  175. package/lib/utils/scroll-lock.js +65 -172
  176. package/lib/utils/styles.d.ts +0 -1
  177. package/lib/utils/styles.js +17 -41
  178. package/lib/version.d.ts +1 -2
  179. package/lib/version.js +1 -11
  180. package/package.json +4 -4
  181. package/lib/base/ty-component.d.ts.map +0 -1
  182. package/lib/base/ty-component.js.map +0 -1
  183. package/lib/components/button.d.ts.map +0 -1
  184. package/lib/components/button.js.map +0 -1
  185. package/lib/components/calendar-month.d.ts.map +0 -1
  186. package/lib/components/calendar-month.js.map +0 -1
  187. package/lib/components/calendar-navigation.d.ts.map +0 -1
  188. package/lib/components/calendar-navigation.js.map +0 -1
  189. package/lib/components/calendar.d.ts.map +0 -1
  190. package/lib/components/calendar.js.map +0 -1
  191. package/lib/components/checkbox.d.ts.map +0 -1
  192. package/lib/components/checkbox.js.map +0 -1
  193. package/lib/components/copy.d.ts.map +0 -1
  194. package/lib/components/copy.js.map +0 -1
  195. package/lib/components/date-picker.d.ts.map +0 -1
  196. package/lib/components/date-picker.js.map +0 -1
  197. package/lib/components/file-upload.d.ts.map +0 -1
  198. package/lib/components/file-upload.js.map +0 -1
  199. package/lib/components/icon.d.ts.map +0 -1
  200. package/lib/components/icon.js.map +0 -1
  201. package/lib/components/input.d.ts.map +0 -1
  202. package/lib/components/input.js.map +0 -1
  203. package/lib/components/modal.d.ts.map +0 -1
  204. package/lib/components/modal.js.map +0 -1
  205. package/lib/components/option.d.ts.map +0 -1
  206. package/lib/components/option.js.map +0 -1
  207. package/lib/components/popup.d.ts.map +0 -1
  208. package/lib/components/popup.js.map +0 -1
  209. package/lib/components/radio.d.ts.map +0 -1
  210. package/lib/components/radio.js.map +0 -1
  211. package/lib/components/resize-observer.d.ts.map +0 -1
  212. package/lib/components/resize-observer.js.map +0 -1
  213. package/lib/components/scroll-container.d.ts.map +0 -1
  214. package/lib/components/scroll-container.js.map +0 -1
  215. package/lib/components/select.d.ts.map +0 -1
  216. package/lib/components/select.js.map +0 -1
  217. package/lib/components/selected-tags.d.ts.map +0 -1
  218. package/lib/components/selected-tags.js.map +0 -1
  219. package/lib/components/step.d.ts.map +0 -1
  220. package/lib/components/step.js.map +0 -1
  221. package/lib/components/switch.d.ts.map +0 -1
  222. package/lib/components/switch.js.map +0 -1
  223. package/lib/components/tab.d.ts.map +0 -1
  224. package/lib/components/tab.js.map +0 -1
  225. package/lib/components/tabs.d.ts.map +0 -1
  226. package/lib/components/tabs.js.map +0 -1
  227. package/lib/components/tag.d.ts.map +0 -1
  228. package/lib/components/tag.js.map +0 -1
  229. package/lib/components/textarea.d.ts.map +0 -1
  230. package/lib/components/textarea.js.map +0 -1
  231. package/lib/components/tooltip.d.ts.map +0 -1
  232. package/lib/components/tooltip.js.map +0 -1
  233. package/lib/components/wizard.d.ts.map +0 -1
  234. package/lib/components/wizard.js.map +0 -1
  235. package/lib/icons/fontawesome/brands.d.ts.map +0 -1
  236. package/lib/icons/fontawesome/brands.js.map +0 -1
  237. package/lib/icons/fontawesome/regular.d.ts.map +0 -1
  238. package/lib/icons/fontawesome/regular.js.map +0 -1
  239. package/lib/icons/fontawesome/solid.d.ts.map +0 -1
  240. package/lib/icons/fontawesome/solid.js.map +0 -1
  241. package/lib/icons/heroicons/micro.d.ts.map +0 -1
  242. package/lib/icons/heroicons/micro.js.map +0 -1
  243. package/lib/icons/heroicons/mini.d.ts.map +0 -1
  244. package/lib/icons/heroicons/mini.js.map +0 -1
  245. package/lib/icons/heroicons/outline.d.ts.map +0 -1
  246. package/lib/icons/heroicons/outline.js.map +0 -1
  247. package/lib/icons/heroicons/solid.d.ts.map +0 -1
  248. package/lib/icons/heroicons/solid.js.map +0 -1
  249. package/lib/icons/lucide.d.ts.map +0 -1
  250. package/lib/icons/lucide.js.map +0 -1
  251. package/lib/icons/material/filled.d.ts.map +0 -1
  252. package/lib/icons/material/filled.js.map +0 -1
  253. package/lib/icons/material/outlined.d.ts.map +0 -1
  254. package/lib/icons/material/outlined.js.map +0 -1
  255. package/lib/icons/material/round.d.ts.map +0 -1
  256. package/lib/icons/material/round.js.map +0 -1
  257. package/lib/icons/material/sharp.d.ts.map +0 -1
  258. package/lib/icons/material/sharp.js.map +0 -1
  259. package/lib/icons/material/two-tone.d.ts.map +0 -1
  260. package/lib/icons/material/two-tone.js.map +0 -1
  261. package/lib/index.d.ts.map +0 -1
  262. package/lib/index.js.map +0 -1
  263. package/lib/styles/button.d.ts.map +0 -1
  264. package/lib/styles/button.js.map +0 -1
  265. package/lib/styles/calendar-month.d.ts.map +0 -1
  266. package/lib/styles/calendar-month.js.map +0 -1
  267. package/lib/styles/calendar-navigation.d.ts.map +0 -1
  268. package/lib/styles/calendar-navigation.js.map +0 -1
  269. package/lib/styles/calendar.d.ts.map +0 -1
  270. package/lib/styles/calendar.js.map +0 -1
  271. package/lib/styles/checkbox.d.ts.map +0 -1
  272. package/lib/styles/checkbox.js.map +0 -1
  273. package/lib/styles/copy.d.ts.map +0 -1
  274. package/lib/styles/copy.js.map +0 -1
  275. package/lib/styles/custom-scrollbar.d.ts.map +0 -1
  276. package/lib/styles/custom-scrollbar.js.map +0 -1
  277. package/lib/styles/date-picker.d.ts.map +0 -1
  278. package/lib/styles/date-picker.js.map +0 -1
  279. package/lib/styles/file-upload.d.ts.map +0 -1
  280. package/lib/styles/file-upload.js.map +0 -1
  281. package/lib/styles/icon.d.ts.map +0 -1
  282. package/lib/styles/icon.js.map +0 -1
  283. package/lib/styles/input.d.ts.map +0 -1
  284. package/lib/styles/input.js.map +0 -1
  285. package/lib/styles/modal.d.ts.map +0 -1
  286. package/lib/styles/modal.js.map +0 -1
  287. package/lib/styles/multiselect.d.ts +0 -8
  288. package/lib/styles/multiselect.d.ts.map +0 -1
  289. package/lib/styles/multiselect.js +0 -849
  290. package/lib/styles/multiselect.js.map +0 -1
  291. package/lib/styles/option.d.ts.map +0 -1
  292. package/lib/styles/option.js.map +0 -1
  293. package/lib/styles/popup.d.ts.map +0 -1
  294. package/lib/styles/popup.js.map +0 -1
  295. package/lib/styles/radio.d.ts.map +0 -1
  296. package/lib/styles/radio.js.map +0 -1
  297. package/lib/styles/resize-observer.d.ts.map +0 -1
  298. package/lib/styles/resize-observer.js.map +0 -1
  299. package/lib/styles/scroll-container.d.ts.map +0 -1
  300. package/lib/styles/scroll-container.js.map +0 -1
  301. package/lib/styles/select-base.d.ts.map +0 -1
  302. package/lib/styles/select-base.js.map +0 -1
  303. package/lib/styles/select.d.ts.map +0 -1
  304. package/lib/styles/select.js.map +0 -1
  305. package/lib/styles/step.d.ts.map +0 -1
  306. package/lib/styles/step.js.map +0 -1
  307. package/lib/styles/switch.d.ts.map +0 -1
  308. package/lib/styles/switch.js.map +0 -1
  309. package/lib/styles/tab.d.ts.map +0 -1
  310. package/lib/styles/tab.js.map +0 -1
  311. package/lib/styles/tabs.d.ts.map +0 -1
  312. package/lib/styles/tabs.js.map +0 -1
  313. package/lib/styles/tag.d.ts.map +0 -1
  314. package/lib/styles/tag.js.map +0 -1
  315. package/lib/styles/textarea.d.ts.map +0 -1
  316. package/lib/styles/textarea.js.map +0 -1
  317. package/lib/styles/tooltip.d.ts.map +0 -1
  318. package/lib/styles/tooltip.js.map +0 -1
  319. package/lib/styles/wizard.d.ts.map +0 -1
  320. package/lib/styles/wizard.js.map +0 -1
  321. package/lib/types/common.d.ts.map +0 -1
  322. package/lib/types/common.js.map +0 -1
  323. package/lib/utils/calendar-utils.d.ts.map +0 -1
  324. package/lib/utils/calendar-utils.js.map +0 -1
  325. package/lib/utils/custom-scrollbar.d.ts.map +0 -1
  326. package/lib/utils/custom-scrollbar.js.map +0 -1
  327. package/lib/utils/flavor-sheet.d.ts.map +0 -1
  328. package/lib/utils/flavor-sheet.js.map +0 -1
  329. package/lib/utils/icon-registry.d.ts.map +0 -1
  330. package/lib/utils/icon-registry.js.map +0 -1
  331. package/lib/utils/icons.d.ts.map +0 -1
  332. package/lib/utils/icons.js.map +0 -1
  333. package/lib/utils/loader-registry.d.ts.map +0 -1
  334. package/lib/utils/loader-registry.js.map +0 -1
  335. package/lib/utils/locale.d.ts.map +0 -1
  336. package/lib/utils/locale.js.map +0 -1
  337. package/lib/utils/mobile.d.ts.map +0 -1
  338. package/lib/utils/mobile.js.map +0 -1
  339. package/lib/utils/number-format.d.ts.map +0 -1
  340. package/lib/utils/number-format.js.map +0 -1
  341. package/lib/utils/parse-boolean.d.ts +0 -39
  342. package/lib/utils/parse-boolean.d.ts.map +0 -1
  343. package/lib/utils/parse-boolean.js +0 -58
  344. package/lib/utils/parse-boolean.js.map +0 -1
  345. package/lib/utils/positioning.d.ts.map +0 -1
  346. package/lib/utils/positioning.js.map +0 -1
  347. package/lib/utils/property-capture.d.ts.map +0 -1
  348. package/lib/utils/property-capture.js.map +0 -1
  349. package/lib/utils/property-manager.d.ts.map +0 -1
  350. package/lib/utils/property-manager.js.map +0 -1
  351. package/lib/utils/resize-observer.d.ts.map +0 -1
  352. package/lib/utils/resize-observer.js.map +0 -1
  353. package/lib/utils/scroll-lock.d.ts.map +0 -1
  354. package/lib/utils/scroll-lock.js.map +0 -1
  355. package/lib/utils/styles.d.ts.map +0 -1
  356. package/lib/utils/styles.js.map +0 -1
  357. package/lib/version.d.ts.map +0 -1
  358. package/lib/version.js.map +0 -1
@@ -1,152 +1,44 @@
1
- /**
2
- * Property Capture Utility
3
- *
4
- * Solves the problem of frameworks (React, Reagent, etc.) setting properties
5
- * on custom elements BEFORE connectedCallback runs.
6
- *
7
- * PROBLEM:
8
- * 1. Framework creates element: document.createElement('ty-dropdown')
9
- * 2. Framework sets properties: element.value = "foo"
10
- * 3. Constructor runs and defines getters/setters
11
- * 4. BUT properties were already set, creating instance properties
12
- * 5. Instance properties shadow the class getters/setters
13
- * 6. connectedCallback runs - too late!
14
- *
15
- * SOLUTION:
16
- * In connectedCallback, capture any pre-set properties and apply them properly.
17
- *
18
- * @example
19
- * ```typescript
20
- * connectedCallback(): void {
21
- * const preSetProps = capturePreSetProperties(this, [
22
- * 'value', 'clearable', 'disabled'
23
- * ])
24
- *
25
- * if (preSetProps.value !== undefined) {
26
- * this._value = preSetProps.value
27
- * }
28
- * }
29
- * ```
30
- */
31
- /**
32
- * Capture properties that were set before connectedCallback
33
- *
34
- * @param element - The custom element instance
35
- * @param propertyNames - Array of property names to check
36
- * @param options - Capture options
37
- * @returns Record of captured properties with metadata
38
- *
39
- * @example
40
- * ```typescript
41
- * const captured = capturePreSetProperties(this, ['value', 'disabled'])
42
- * // {
43
- * // value: { name: 'value', value: 'foo', hadProperty: true },
44
- * // disabled: { name: 'disabled', value: undefined, hadProperty: false }
45
- * // }
46
- * ```
47
- */
48
1
  export function capturePreSetProperties(element, propertyNames, options = { cleanup: true }) {
49
- const captured = {};
50
- for (const name of propertyNames) {
51
- const descriptor = Object.getOwnPropertyDescriptor(element, name);
52
- captured[name] = {
53
- name,
54
- value: descriptor?.value,
55
- hadProperty: descriptor !== undefined && descriptor.value !== undefined
56
- };
57
- // Clean up instance property so class getter/setter works
58
- if (options.cleanup && captured[name].hadProperty) {
59
- delete element[name];
60
- }
61
- }
62
- return captured;
2
+ const captured = {};
3
+ for (const name of propertyNames) {
4
+ const descriptor = Object.getOwnPropertyDescriptor(element, name);
5
+ captured[name] = {
6
+ name,
7
+ value: descriptor?.value,
8
+ hadProperty: descriptor !== undefined && descriptor.value !== undefined
9
+ };
10
+ if (options.cleanup && captured[name].hadProperty) {
11
+ delete element[name];
12
+ }
13
+ }
14
+ return captured;
63
15
  }
64
- /**
65
- * Simpler API - just get the values that were pre-set
66
- *
67
- * @param element - The custom element instance
68
- * @param propertyNames - Array of property names to check
69
- * @param options - Capture options
70
- * @returns Record of property names to values (only includes properties that were set)
71
- *
72
- * @example
73
- * ```typescript
74
- * const values = getCapturedValues(this, ['value', 'disabled'])
75
- * if (values.value !== undefined) {
76
- * this._value = values.value
77
- * }
78
- * ```
79
- */
80
16
  export function getCapturedValues(element, propertyNames, options) {
81
- const captured = capturePreSetProperties(element, propertyNames, options);
82
- const values = {};
83
- for (const [name, data] of Object.entries(captured)) {
84
- if (data.hadProperty) {
85
- values[name] = data.value;
86
- }
87
- }
88
- return values;
17
+ const captured = capturePreSetProperties(element, propertyNames, options);
18
+ const values = {};
19
+ for (const [name, data] of Object.entries(captured)) {
20
+ if (data.hadProperty) {
21
+ values[name] = data.value;
22
+ }
23
+ }
24
+ return values;
89
25
  }
90
- /**
91
- * Automatically apply pre-set properties to private fields
92
- *
93
- * @param element - The custom element instance
94
- * @param propertyNames - Array of property names to check
95
- * @param propertyMap - Optional mapping of public names to private field names
96
- * Default: adds underscore prefix (e.g., 'value' -> '_value')
97
- * @param options - Capture options
98
- *
99
- * @example
100
- * ```typescript
101
- * // Simple usage (uses _propertyName convention)
102
- * applyPreSetProperties(this, ['value', 'disabled'])
103
- * // Sets this._value and this._disabled
104
- *
105
- * // Custom mapping
106
- * applyPreSetProperties(this, ['value'], { value: 'internalValue' })
107
- * // Sets this.internalValue
108
- * ```
109
- */
110
26
  export function applyPreSetProperties(element, propertyNames, propertyMap, options) {
111
- const captured = capturePreSetProperties(element, propertyNames, options);
112
- for (const [name, data] of Object.entries(captured)) {
113
- if (data.hadProperty) {
114
- // Determine the private field name
115
- const privateName = propertyMap?.[name] || `_${name}`;
116
- element[privateName] = data.value;
117
- }
118
- }
27
+ const captured = capturePreSetProperties(element, propertyNames, options);
28
+ for (const [name, data] of Object.entries(captured)) {
29
+ if (data.hadProperty) {
30
+ const privateName = propertyMap?.[name] || `_${name}`;
31
+ element[privateName] = data.value;
32
+ }
33
+ }
119
34
  }
120
- /**
121
- * Helper for components with standard _propertyName pattern
122
- *
123
- * @param element - The custom element instance
124
- * @param propertyNames - Array of property names to check
125
- * @param transformer - Optional function to transform values before setting
126
- * @param options - Capture options
127
- *
128
- * @example
129
- * ```typescript
130
- * connectedCallback(): void {
131
- * // Basic usage
132
- * captureAndApplyProperties(this, ['value', 'disabled', 'required'])
133
- *
134
- * // With transformation
135
- * captureAndApplyProperties(this, ['value'], (name, value) => {
136
- * if (name === 'value') return this.parseValue(value)
137
- * return value
138
- * })
139
- * }
140
- * ```
141
- */
142
35
  export function captureAndApplyProperties(element, propertyNames, transformer, options) {
143
- const captured = capturePreSetProperties(element, propertyNames, options);
144
- for (const [name, data] of Object.entries(captured)) {
145
- if (data.hadProperty) {
146
- const privateName = `_${name}`;
147
- const value = transformer ? transformer(name, data.value) : data.value;
148
- element[privateName] = value;
149
- }
150
- }
36
+ const captured = capturePreSetProperties(element, propertyNames, options);
37
+ for (const [name, data] of Object.entries(captured)) {
38
+ if (data.hadProperty) {
39
+ const privateName = `_${name}`;
40
+ const value = transformer ? transformer(name, data.value) : data.value;
41
+ element[privateName] = value;
42
+ }
43
+ }
151
44
  }
152
- //# sourceMappingURL=property-capture.js.map
@@ -87,4 +87,3 @@ export declare class PropertyManager<T = any> {
87
87
  */
88
88
  handleAlias(aliasName: string, value: any): PropertyChange | null;
89
89
  }
90
- //# sourceMappingURL=property-manager.d.ts.map
@@ -1,197 +1,127 @@
1
- /**
2
- * Property Manager - Unified property lifecycle for web components
3
- *
4
- * Handles property/attribute synchronization, validation, coercion, and change tracking.
5
- * All property updates flow through a single code path for consistency.
6
- */
7
- /**
8
- * Manages component properties with unified lifecycle
9
- */
10
1
  export class PropertyManager {
11
- constructor(config) {
12
- this._props = new Map();
13
- this._config = config;
14
- this._initializeDefaults();
15
- }
16
- /**
17
- * Initialize properties with default values
18
- */
19
- _initializeDefaults() {
20
- for (const [name, config] of Object.entries(this._config)) {
21
- if (config.default !== undefined) {
22
- this._props.set(name, config.default);
23
- }
24
- }
25
- }
26
- /**
27
- * Check if a property name exists in the configuration
28
- */
29
- hasConfig(name) {
30
- return name in this._config;
31
- }
32
- /**
33
- * Update a property value
34
- * Returns PropertyChange if value changed, null otherwise
35
- */
36
- updateProperty(name, value, source = 'property') {
37
- const config = this._config[name];
38
- if (!config) {
39
- console.warn(`[PropertyManager] Unknown property: ${name}`);
40
- return null;
41
- }
42
- // Get old value
43
- const oldValue = this._props.get(name);
44
- // Coerce value to correct type
45
- const coercedValue = this._coerceValue(name, value, config);
46
- // Validate value
47
- if (!this._validateValue(name, coercedValue, config)) {
48
- console.warn(`[PropertyManager] Invalid value for ${name}:`, coercedValue);
49
- return null;
50
- }
51
- // Check if value actually changed
52
- if (this._valuesEqual(oldValue, coercedValue)) {
53
- return null;
54
- }
55
- // Update internal map
56
- this._props.set(name, coercedValue);
57
- // Create change object
58
- const change = {
59
- name,
60
- oldValue,
61
- newValue: coercedValue,
62
- source
63
- };
64
- return change;
65
- }
66
- /**
67
- * Coerce value to the correct type
68
- */
69
- _coerceValue(name, value, config) {
70
- // Custom coercion
71
- if (config.coerce) {
72
- return config.coerce(value);
73
- }
74
- // Null/undefined handling
75
- if (value === null || value === undefined) {
76
- return config.default ?? null;
77
- }
78
- // Type coercion
79
- switch (config.type) {
80
- case 'boolean':
81
- // HTML Standard: attribute present (even empty) = true, absent = false
82
- // String handling:
83
- if (typeof value === 'string') {
84
- // Empty string = true (HTML boolean attribute: <input checked>)
85
- if (value === '')
86
- return true;
87
- // Explicit false values
88
- const normalized = value.toLowerCase().trim();
89
- if (normalized === 'false' || normalized === '0')
90
- return false;
91
- // Everything else is truthy
92
- return true;
93
- }
94
- // Non-string: standard truthy/falsy
95
- return Boolean(value);
96
- case 'number':
97
- const num = Number(value);
98
- return isNaN(num) ? (config.default ?? 0) : num;
99
- case 'string':
100
- return String(value);
101
- case 'object':
102
- case 'array':
103
- if (typeof value === 'string') {
104
- try {
105
- return JSON.parse(value);
106
- }
107
- catch {
108
- console.warn(`[PropertyManager] Failed to parse ${name}:`, value);
109
- return config.default ?? (config.type === 'array' ? [] : {});
110
- }
111
- }
112
- return value;
113
- default:
114
- return value;
115
- }
116
- }
117
- /**
118
- * Validate a property value
119
- */
120
- _validateValue(name, value, config) {
121
- if (config.validate) {
122
- return config.validate(value);
123
- }
124
- return true;
125
- }
126
- /**
127
- * Check if two values are equal
128
- */
129
- _valuesEqual(a, b) {
130
- // Simple equality for primitives
131
- if (typeof a !== 'object' || typeof b !== 'object') {
132
- return a === b;
133
- }
134
- // Null checks
135
- if (a === null || b === null) {
136
- return a === b;
137
- }
138
- // Deep equality for objects/arrays (simple implementation)
139
- // For production, consider using a proper deep equality library
140
- try {
141
- return JSON.stringify(a) === JSON.stringify(b);
142
- }
143
- catch {
144
- return false;
145
- }
146
- }
147
- /**
148
- * Get a property value
149
- */
150
- get(name) {
151
- return this._props.get(name);
152
- }
153
- /**
154
- * Get all properties as an object
155
- */
156
- getAll() {
157
- return Object.fromEntries(this._props);
158
- }
159
- /**
160
- * Get property configuration
161
- */
162
- getConfig(name) {
163
- return this._config[name];
164
- }
165
- /**
166
- * Check if a property is visual (requires render)
167
- */
168
- isVisual(name) {
169
- return this._config[name]?.visual ?? false;
170
- }
171
- /**
172
- * Check if a property affects form value
173
- */
174
- isFormValue(name) {
175
- return this._config[name]?.formValue ?? false;
176
- }
177
- /**
178
- * Check if a property should emit change events
179
- */
180
- shouldEmitChange(name) {
181
- return this._config[name]?.emitChange ?? false;
182
- }
183
- /**
184
- * Handle property aliases (e.g., not-clearable → clearable: false)
185
- */
186
- handleAlias(aliasName, value) {
187
- // Find property with this alias
188
- for (const [propName, config] of Object.entries(this._config)) {
189
- if (config.aliases && aliasName in config.aliases) {
190
- const aliasedValue = config.aliases[aliasName];
191
- return this.updateProperty(propName, aliasedValue, 'attribute');
192
- }
193
- }
194
- return null;
195
- }
196
- }
197
- //# sourceMappingURL=property-manager.js.map
2
+ constructor(config) {
3
+ this._props = new Map();
4
+ this._config = config;
5
+ this._initializeDefaults();
6
+ }
7
+ _initializeDefaults() {
8
+ for (const [name, config] of Object.entries(this._config)) {
9
+ if (config.default !== undefined) {
10
+ this._props.set(name, config.default);
11
+ }
12
+ }
13
+ }
14
+ hasConfig(name) {
15
+ return name in this._config;
16
+ }
17
+ updateProperty(name, value, source = 'property') {
18
+ const config = this._config[name];
19
+ if (!config) {
20
+ console.warn(`[PropertyManager] Unknown property: ${name}`);
21
+ return null;
22
+ }
23
+ const oldValue = this._props.get(name);
24
+ const coercedValue = this._coerceValue(name, value, config);
25
+ if (!this._validateValue(name, coercedValue, config)) {
26
+ console.warn(`[PropertyManager] Invalid value for ${name}:`, coercedValue);
27
+ return null;
28
+ }
29
+ if (this._valuesEqual(oldValue, coercedValue)) {
30
+ return null;
31
+ }
32
+ this._props.set(name, coercedValue);
33
+ const change = {
34
+ name,
35
+ oldValue,
36
+ newValue: coercedValue,
37
+ source
38
+ };
39
+ return change;
40
+ }
41
+ _coerceValue(name, value, config) {
42
+ if (config.coerce) {
43
+ return config.coerce(value);
44
+ }
45
+ if (value === null || value === undefined) {
46
+ return config.default ?? null;
47
+ }
48
+ switch (config.type) {
49
+ case 'boolean':
50
+ if (typeof value === 'string') {
51
+ if (value === '')
52
+ return true;
53
+ const normalized = value.toLowerCase().trim();
54
+ if (normalized === 'false' || normalized === '0')
55
+ return false;
56
+ return true;
57
+ }
58
+ return Boolean(value);
59
+ case 'number':
60
+ const num = Number(value);
61
+ return isNaN(num) ? (config.default ?? 0) : num;
62
+ case 'string':
63
+ return String(value);
64
+ case 'object':
65
+ case 'array':
66
+ if (typeof value === 'string') {
67
+ try {
68
+ return JSON.parse(value);
69
+ }
70
+ catch {
71
+ console.warn(`[PropertyManager] Failed to parse ${name}:`, value);
72
+ return config.default ?? (config.type === 'array' ? [] : {});
73
+ }
74
+ }
75
+ return value;
76
+ default:
77
+ return value;
78
+ }
79
+ }
80
+ _validateValue(name, value, config) {
81
+ if (config.validate) {
82
+ return config.validate(value);
83
+ }
84
+ return true;
85
+ }
86
+ _valuesEqual(a, b) {
87
+ if (typeof a !== 'object' || typeof b !== 'object') {
88
+ return a === b;
89
+ }
90
+ if (a === null || b === null) {
91
+ return a === b;
92
+ }
93
+ try {
94
+ return JSON.stringify(a) === JSON.stringify(b);
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ get(name) {
101
+ return this._props.get(name);
102
+ }
103
+ getAll() {
104
+ return Object.fromEntries(this._props);
105
+ }
106
+ getConfig(name) {
107
+ return this._config[name];
108
+ }
109
+ isVisual(name) {
110
+ return this._config[name]?.visual ?? false;
111
+ }
112
+ isFormValue(name) {
113
+ return this._config[name]?.formValue ?? false;
114
+ }
115
+ shouldEmitChange(name) {
116
+ return this._config[name]?.emitChange ?? false;
117
+ }
118
+ handleAlias(aliasName, value) {
119
+ for (const [propName, config] of Object.entries(this._config)) {
120
+ if (config.aliases && aliasName in config.aliases) {
121
+ const aliasedValue = config.aliases[aliasName];
122
+ return this.updateProperty(propName, aliasedValue, 'attribute');
123
+ }
124
+ }
125
+ return null;
126
+ }
127
+ }
@@ -39,4 +39,3 @@ export declare function updateSize(id: string, width: number, height: number): v
39
39
  * Internal: Remove size from registry and cleanup callbacks
40
40
  */
41
41
  export declare function removeSize(id: string): void;
42
- //# sourceMappingURL=resize-observer.d.ts.map
@@ -1,71 +1,35 @@
1
- /**
2
- * Resize Observer Registry & Callbacks
3
- *
4
- * Provides global registry for element sizes and optional callback subscriptions.
5
- */
6
- // Global registry (Map-based storage)
7
1
  const sizes = new Map();
8
2
  const callbacks = new Map();
9
- /**
10
- * Get current size for element by ID (sync query)
11
- *
12
- * @example
13
- * const size = getSize('parent-container')
14
- * if (size) console.log(`Width: ${size.width}px`)
15
- */
16
3
  export function getSize(id) {
17
- return sizes.get(id);
4
+ return sizes.get(id);
18
5
  }
19
- /**
20
- * Subscribe to size changes for element by ID
21
- * Returns unsubscribe function
22
- *
23
- * @example
24
- * const unsubscribe = onResize('parent', ({ width, height }) => {
25
- * console.log(`Resized to ${width}x${height}`)
26
- * })
27
- * // Later: unsubscribe()
28
- */
29
6
  export function onResize(id, callback) {
30
- if (!callbacks.has(id)) {
31
- callbacks.set(id, new Set());
32
- }
33
- callbacks.get(id).add(callback);
34
- // Call immediately with current size if available
35
- const current = sizes.get(id);
36
- if (current)
37
- callback(current);
38
- // Return unsubscribe function
39
- return () => {
40
- callbacks.get(id)?.delete(callback);
41
- if (callbacks.get(id)?.size === 0) {
42
- callbacks.delete(id);
43
- }
44
- };
7
+ if (!callbacks.has(id)) {
8
+ callbacks.set(id, new Set());
9
+ }
10
+ callbacks.get(id).add(callback);
11
+ const current = sizes.get(id);
12
+ if (current)
13
+ callback(current);
14
+ return () => {
15
+ callbacks.get(id)?.delete(callback);
16
+ if (callbacks.get(id)?.size === 0) {
17
+ callbacks.delete(id);
18
+ }
19
+ };
45
20
  }
46
- /**
47
- * Get all registered sizes (for debugging/window API)
48
- */
49
21
  export function getAllSizes() {
50
- return Object.fromEntries(sizes);
22
+ return Object.fromEntries(sizes);
51
23
  }
52
- /**
53
- * Internal: Update size in registry and notify callbacks
54
- */
55
24
  export function updateSize(id, width, height) {
56
- sizes.set(id, { width, height });
57
- // Notify all subscribers
58
- const cbs = callbacks.get(id);
59
- if (cbs) {
60
- const size = { width, height };
61
- cbs.forEach(cb => cb(size));
62
- }
25
+ sizes.set(id, { width, height });
26
+ const cbs = callbacks.get(id);
27
+ if (cbs) {
28
+ const size = { width, height };
29
+ cbs.forEach(cb => cb(size));
30
+ }
63
31
  }
64
- /**
65
- * Internal: Remove size from registry and cleanup callbacks
66
- */
67
32
  export function removeSize(id) {
68
- sizes.delete(id);
69
- callbacks.delete(id);
33
+ sizes.delete(id);
34
+ callbacks.delete(id);
70
35
  }
71
- //# sourceMappingURL=resize-observer.js.map
@@ -1,15 +1,9 @@
1
1
  /**
2
- * CSS-based scroll prevention using position: fixed.
2
+ * CSS-based scroll prevention.
3
3
  *
4
- * Prevents body/page scrolling by temporarily fixing the body position
5
- * while preserving scroll position. Much more reliable than event prevention.
6
- *
7
- * Key benefits:
8
- * - No event manipulation complexity
9
- * - No interference with component keyboard navigation
10
- * - Preserves scroll position perfectly
11
- * - Standard industry technique
12
- * - Multiple component support with proper cleanup
4
+ * Prevents page scrolling via CSS rather than event cancellation — no event
5
+ * manipulation, no interference with component keyboard navigation, scroll
6
+ * position preserved. Reference-counted so multiple components can lock at once.
13
7
  */
14
8
  declare global {
15
9
  interface Window {
@@ -76,4 +70,3 @@ export declare function getLockState(): Readonly<{
76
70
  scrollY: number;
77
71
  activeLocks: string[];
78
72
  }>;
79
- //# sourceMappingURL=scroll-lock.d.ts.map