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,75 +1,69 @@
1
- /**
2
- * Step Component
3
- *
4
- * Individual wizard step panel with custom scrollbar via CustomScrollbar utility.
5
- */
6
1
  import { ensureStyles } from '../utils/styles.js';
7
2
  import { stepStyles } from '../styles/step.js';
8
3
  import { CustomScrollbar, isCustomScrollbarEnabled } from '../utils/custom-scrollbar.js';
9
4
  export class TyStep extends HTMLElement {
10
- static get observedAttributes() {
11
- return ['id', 'label', 'description', 'disabled', 'status'];
12
- }
13
- constructor() {
14
- super();
15
- this._scrollbar = null;
16
- this.attachShadow({ mode: 'open' });
17
- }
18
- connectedCallback() {
19
- this._render();
20
- }
21
- disconnectedCallback() {
22
- this._destroyScrollbar();
23
- }
24
- attributeChangedCallback(_name, _oldValue, _newValue) {
25
- this._render();
26
- }
27
- _render() {
28
- const shadowRoot = this.shadowRoot;
29
- if (!shadowRoot)
30
- return;
31
- const id = this.getAttribute('id');
32
- if (!shadowRoot.querySelector('.step-wrapper')) {
33
- ensureStyles(shadowRoot, { css: stepStyles, id: 'ty-step' });
34
- shadowRoot.innerHTML = `
35
- <div class="step-wrapper"
36
- role="tabpanel"
37
- ${id ? `id="panel-${id}"` : ''}
38
- ${id ? `aria-labelledby="step-${id}"` : ''}
39
- >
40
- <div class="step-panel">
41
- <slot></slot>
42
- </div>
43
- </div>
44
- `;
45
- this._setupScrollbar();
46
- }
47
- }
48
- _setupScrollbar() {
49
- const panel = this.shadowRoot?.querySelector('.step-panel');
50
- const wrapper = this.shadowRoot?.querySelector('.step-wrapper');
51
- if (!panel || !wrapper)
52
- return;
53
- if (!isCustomScrollbarEnabled())
54
- return;
55
- panel.classList.add('ty-custom-scroll');
56
- this._scrollbar = new CustomScrollbar(panel, { vertical: true });
57
- if (this._scrollbar.trackY) {
58
- wrapper.appendChild(this._scrollbar.trackY);
59
- }
60
- }
61
- _destroyScrollbar() {
62
- if (this._scrollbar) {
63
- this._scrollbar.trackY?.remove();
64
- this._scrollbar.destroy();
65
- this._scrollbar = null;
66
- }
67
- }
68
- resetScroll() {
69
- this._scrollbar?.scrollToTop(false);
70
- }
5
+ static get observedAttributes() {
6
+ return ['id', 'label', 'description', 'disabled', 'status'];
7
+ }
8
+ constructor() {
9
+ super();
10
+ this._scrollbar = null;
11
+ this.attachShadow({ mode: 'open' });
12
+ }
13
+ connectedCallback() {
14
+ this._render();
15
+ }
16
+ disconnectedCallback() {
17
+ this._destroyScrollbar();
18
+ }
19
+ attributeChangedCallback(_name, _oldValue, _newValue) {
20
+ this._render();
21
+ }
22
+ _render() {
23
+ const shadowRoot = this.shadowRoot;
24
+ if (!shadowRoot)
25
+ return;
26
+ const id = this.getAttribute('id');
27
+ if (!shadowRoot.querySelector('.step-wrapper')) {
28
+ ensureStyles(shadowRoot, { css: stepStyles, id: 'ty-step' });
29
+ shadowRoot.innerHTML = `
30
+ <div class="step-wrapper"
31
+ role="tabpanel"
32
+ ${id ? `id="panel-${id}"` : ''}
33
+ ${id ? `aria-labelledby="step-${id}"` : ''}
34
+ >
35
+ <div class="step-panel">
36
+ <slot></slot>
37
+ </div>
38
+ </div>
39
+ `;
40
+ this._setupScrollbar();
41
+ }
42
+ }
43
+ _setupScrollbar() {
44
+ const panel = this.shadowRoot?.querySelector('.step-panel');
45
+ const wrapper = this.shadowRoot?.querySelector('.step-wrapper');
46
+ if (!panel || !wrapper)
47
+ return;
48
+ if (!isCustomScrollbarEnabled())
49
+ return;
50
+ panel.classList.add('ty-custom-scroll');
51
+ this._scrollbar = new CustomScrollbar(panel, { vertical: true });
52
+ if (this._scrollbar.trackY) {
53
+ wrapper.appendChild(this._scrollbar.trackY);
54
+ }
55
+ }
56
+ _destroyScrollbar() {
57
+ if (this._scrollbar) {
58
+ this._scrollbar.trackY?.remove();
59
+ this._scrollbar.destroy();
60
+ this._scrollbar = null;
61
+ }
62
+ }
63
+ resetScroll() {
64
+ this._scrollbar?.scrollToTop(false);
65
+ }
71
66
  }
72
67
  if (!customElements.get('ty-step')) {
73
- customElements.define('ty-step', TyStep);
68
+ customElements.define('ty-step', TyStep);
74
69
  }
75
- //# sourceMappingURL=step.js.map
@@ -4,16 +4,6 @@
4
4
  * "Just the toggle" primitive — renders only the track + thumb visual.
5
5
  * Label, required asterisk, and error display are the consumer's
6
6
  * responsibility — wrap in a `<label>` for click delegation.
7
- *
8
- * - Boolean checked state, role="switch" ARIA
9
- * - Form-associated, keyboard accessibility
10
- * - Sizes (xs, sm, md, lg, xl) and semantic flavors
11
- *
12
- * @example
13
- * <label>
14
- * <ty-switch name="notifications" checked></ty-switch>
15
- * Email notifications
16
- * </label>
17
7
  */
18
8
  import type { Flavor, Size } from "../types/common.js";
19
9
  import { TyComponent } from "../base/ty-component.js";
@@ -63,7 +53,7 @@ export declare class TySwitch extends TyComponent<SwitchState> implements TySwit
63
53
  size: {
64
54
  type: "string";
65
55
  visual: boolean;
66
- default: string;
56
+ default: Size;
67
57
  validate: (v: any) => boolean;
68
58
  coerce: (v: any) => any;
69
59
  };
@@ -111,4 +101,3 @@ export declare class TySwitch extends TyComponent<SwitchState> implements TySwit
111
101
  get form(): HTMLFormElement | null;
112
102
  }
113
103
  export {};
114
- //# sourceMappingURL=switch.d.ts.map
@@ -1,258 +1,225 @@
1
- /**
2
- * TySwitch Web Component
3
- *
4
- * "Just the toggle" primitive — renders only the track + thumb visual.
5
- * Label, required asterisk, and error display are the consumer's
6
- * responsibility — wrap in a `<label>` for click delegation.
7
- *
8
- * - Boolean checked state, role="switch" ARIA
9
- * - Form-associated, keyboard accessibility
10
- * - Sizes (xs, sm, md, lg, xl) and semantic flavors
11
- *
12
- * @example
13
- * <label>
14
- * <ty-switch name="notifications" checked></ty-switch>
15
- * Email notifications
16
- * </label>
17
- */
1
+ import { DEFAULT_SIZE } from "../types/common.js";
18
2
  import { TyComponent } from "../base/ty-component.js";
19
3
  import { ensureStyles } from "../utils/styles.js";
20
4
  import { syncCustomFlavorSheet } from "../utils/flavor-sheet.js";
21
5
  import { switchStyles, switchCustomFlavorCss } from "../styles/switch.js";
22
6
  export class TySwitch extends TyComponent {
23
- constructor() {
24
- super();
25
- this._customFlavorSheet = null;
26
- this._listenersSetup = false;
27
- this._clickHandler = null;
28
- this._keydownHandler = null;
29
- this._focusHandler = null;
30
- this._blurHandler = null;
31
- const shadow = this.shadowRoot;
32
- ensureStyles(shadow, { css: switchStyles, id: "ty-switch" });
33
- }
34
- onConnect() {
35
- // Re-arm listeners on RE-connect (base skips render() when already
36
- // rendered; onDisconnect removed them). No-op on first connect.
37
- this.setupEventListeners();
38
- this._syncCustomFlavor();
39
- }
40
- onDisconnect() {
41
- this.removeEventListeners();
42
- }
43
- onPropertiesChanged(changes) {
44
- if (changes.some((c) => c.name === "flavor")) {
45
- this._syncCustomFlavor();
46
- }
47
- }
48
- /** Custom (non-built-in) flavors — see utils/flavor-sheet.ts. */
49
- _syncCustomFlavor() {
50
- this._customFlavorSheet = syncCustomFlavorSheet(this.shadowRoot, this._customFlavorSheet, this.flavor, ({ base }) => switchCustomFlavorCss(base));
51
- }
52
- getFormValue() {
53
- return this.checked ? this.value : null;
54
- }
55
- buildClassList() {
56
- const classes = [this.size];
57
- if (this.disabled)
58
- classes.push("disabled");
59
- if (this.required)
60
- classes.push("required");
61
- return classes.join(" ");
62
- }
63
- handleSwitchClick(e) {
64
- if (this.disabled)
65
- return;
66
- const newValue = !this.checked;
67
- this.checked = newValue;
68
- setTimeout(() => {
69
- const eventDetail = {
70
- value: newValue,
71
- checked: newValue,
72
- formValue: newValue ? this.value : null,
73
- originalEvent: e,
74
- };
75
- this.dispatchEvent(new CustomEvent("input", { detail: eventDetail, bubbles: true, composed: true }));
76
- this.dispatchEvent(new CustomEvent("change", { detail: eventDetail, bubbles: true, composed: true }));
77
- }, 0);
78
- }
79
- handleSwitchKeydown(e) {
80
- if (this.disabled)
81
- return;
82
- if (["Space", " ", "Enter"].includes(e.key)) {
83
- e.preventDefault();
84
- e.stopPropagation();
85
- this.handleSwitchClick(e);
86
- }
87
- }
88
- removeEventListeners() {
89
- if (!this._listenersSetup)
90
- return;
91
- // Click lives on the HOST (label delegation + full-element trigger) —
92
- // remove it before the shadow-container guard below.
93
- if (this._clickHandler) {
94
- this.removeEventListener("click", this._clickHandler);
95
- this._clickHandler = null;
96
- }
97
- const shadow = this.shadowRoot;
98
- if (!shadow)
99
- return;
100
- const el = shadow.querySelector(".switch-container");
101
- if (!el) {
102
- this._listenersSetup = false;
103
- return;
104
- }
105
- if (this._keydownHandler) {
106
- el.removeEventListener("keydown", this._keydownHandler);
107
- this._keydownHandler = null;
108
- }
109
- if (this._focusHandler) {
110
- el.removeEventListener("focus", this._focusHandler);
111
- this._focusHandler = null;
112
- }
113
- if (this._blurHandler) {
114
- el.removeEventListener("blur", this._blurHandler);
115
- this._blurHandler = null;
116
- }
117
- this._listenersSetup = false;
118
- }
119
- setupEventListeners() {
120
- if (this._listenersSetup)
121
- return;
122
- const shadow = this.shadowRoot;
123
- const el = shadow.querySelector(".switch-container");
124
- if (!el)
125
- return;
126
- this._clickHandler = (e) => this.handleSwitchClick(e);
127
- this._keydownHandler = (e) => this.handleSwitchKeydown(e);
128
- this._focusHandler = () => el.classList.add("focused");
129
- this._blurHandler = () => el.classList.remove("focused");
130
- // Click on the HOST: whole element is a trigger and a wrapping <label>
131
- // delegates (the synthetic click lands on the host, not the shadow).
132
- this.addEventListener("click", this._clickHandler);
133
- el.addEventListener("keydown", this._keydownHandler);
134
- el.addEventListener("focus", this._focusHandler);
135
- el.addEventListener("blur", this._blurHandler);
136
- this._listenersSetup = true;
137
- }
138
- render() {
139
- const shadow = this.shadowRoot;
140
- let switchEl = shadow.querySelector(".switch-container");
141
- const classes = this.buildClassList();
142
- if (!switchEl) {
143
- switchEl = document.createElement("div");
144
- switchEl.className = "switch-container " + classes;
145
- switchEl.tabIndex = this.disabled ? -1 : 0;
146
- switchEl.setAttribute("role", "switch");
147
- switchEl.setAttribute("aria-checked", this.checked ? "true" : "false");
148
- switchEl.setAttribute("aria-disabled", this.disabled ? "true" : "false");
149
- switchEl.setAttribute("aria-required", this.required ? "true" : "false");
150
- const track = document.createElement("div");
151
- track.className = "switch-track";
152
- const thumb = document.createElement("div");
153
- thumb.className = "switch-thumb";
154
- track.appendChild(thumb);
155
- switchEl.appendChild(track);
156
- shadow.appendChild(switchEl);
157
- }
158
- else {
159
- switchEl.className = "switch-container " + classes;
160
- switchEl.tabIndex = this.disabled ? -1 : 0;
161
- switchEl.setAttribute("aria-checked", this.checked ? "true" : "false");
162
- switchEl.setAttribute("aria-disabled", this.disabled ? "true" : "false");
163
- switchEl.setAttribute("aria-required", this.required ? "true" : "false");
164
- }
165
- // (Re)attach listeners — onDisconnect removes them, so a reconnected
166
- // element needs them again even though the container already exists.
167
- this.setupEventListeners();
168
- // a11y: mirror the wrapping <label> name onto the role="switch" element.
169
- this.applyLabelName(switchEl);
170
- // Reflect constraint validation to the owning <form> (required was cosmetic).
171
- this.updateValidity();
172
- }
173
- /** required + unchecked => valueMissing; otherwise valid. */
174
- updateValidity() {
175
- const anchor = this.shadowRoot?.querySelector(".switch-container");
176
- if (this.disabled) {
177
- this._internals.setValidity({});
178
- return;
179
- }
180
- if (this.required && !this.checked) {
181
- this._internals.setValidity({ valueMissing: true }, "Please turn this on", anchor ?? undefined);
182
- }
183
- else {
184
- this._internals.setValidity({});
185
- }
186
- }
187
- // ============================================================================
188
- // PROPERTY ACCESSORS
189
- // ============================================================================
190
- get checked() { return this.getProperty("checked"); }
191
- set checked(value) { this.setProperty("checked", value); }
192
- get value() { return this.getProperty("value"); }
193
- set value(val) { this.setProperty("value", val); }
194
- get name() { return this.getProperty("name"); }
195
- set name(val) { this.setProperty("name", val); }
196
- get disabled() { return this.getProperty("disabled"); }
197
- set disabled(value) { this.setProperty("disabled", value); }
198
- get required() { return this.getProperty("required"); }
199
- set required(value) { this.setProperty("required", value); }
200
- get size() { return this.getProperty("size"); }
201
- set size(value) { this.setProperty("size", value); }
202
- get flavor() { return this.getProperty("flavor"); }
203
- set flavor(value) { this.setProperty("flavor", value); }
204
- get form() { return this._internals.form; }
7
+ constructor() {
8
+ super();
9
+ this._customFlavorSheet = null;
10
+ this._listenersSetup = false;
11
+ this._clickHandler = null;
12
+ this._keydownHandler = null;
13
+ this._focusHandler = null;
14
+ this._blurHandler = null;
15
+ const shadow = this.shadowRoot;
16
+ ensureStyles(shadow, { css: switchStyles, id: "ty-switch" });
17
+ }
18
+ onConnect() {
19
+ this.setupEventListeners();
20
+ this._syncCustomFlavor();
21
+ }
22
+ onDisconnect() {
23
+ this.removeEventListeners();
24
+ }
25
+ onPropertiesChanged(changes) {
26
+ if (changes.some((c) => c.name === "flavor")) {
27
+ this._syncCustomFlavor();
28
+ }
29
+ }
30
+ _syncCustomFlavor() {
31
+ this._customFlavorSheet = syncCustomFlavorSheet(this.shadowRoot, this._customFlavorSheet, this.flavor, ({ base }) => switchCustomFlavorCss(base));
32
+ }
33
+ getFormValue() {
34
+ return this.checked ? this.value : null;
35
+ }
36
+ buildClassList() {
37
+ const classes = [this.size];
38
+ if (this.disabled)
39
+ classes.push("disabled");
40
+ if (this.required)
41
+ classes.push("required");
42
+ return classes.join(" ");
43
+ }
44
+ handleSwitchClick(e) {
45
+ if (this.disabled)
46
+ return;
47
+ if (this.isDuplicateActivationClick())
48
+ return;
49
+ const newValue = !this.checked;
50
+ this.checked = newValue;
51
+ setTimeout(() => {
52
+ const eventDetail = {
53
+ value: newValue,
54
+ checked: newValue,
55
+ formValue: newValue ? this.value : null,
56
+ originalEvent: e,
57
+ };
58
+ this.dispatchEvent(new CustomEvent("input", { detail: eventDetail, bubbles: true, composed: true }));
59
+ this.dispatchEvent(new CustomEvent("change", { detail: eventDetail, bubbles: true, composed: true }));
60
+ }, 0);
61
+ }
62
+ handleSwitchKeydown(e) {
63
+ if (this.disabled)
64
+ return;
65
+ if (["Space", " ", "Enter"].includes(e.key)) {
66
+ e.preventDefault();
67
+ e.stopPropagation();
68
+ this.handleSwitchClick(e);
69
+ }
70
+ }
71
+ removeEventListeners() {
72
+ if (!this._listenersSetup)
73
+ return;
74
+ if (this._clickHandler) {
75
+ this.removeEventListener("click", this._clickHandler);
76
+ this._clickHandler = null;
77
+ }
78
+ const shadow = this.shadowRoot;
79
+ if (!shadow)
80
+ return;
81
+ const el = shadow.querySelector(".switch-container");
82
+ if (!el) {
83
+ this._listenersSetup = false;
84
+ return;
85
+ }
86
+ if (this._keydownHandler) {
87
+ el.removeEventListener("keydown", this._keydownHandler);
88
+ this._keydownHandler = null;
89
+ }
90
+ if (this._focusHandler) {
91
+ el.removeEventListener("focus", this._focusHandler);
92
+ this._focusHandler = null;
93
+ }
94
+ if (this._blurHandler) {
95
+ el.removeEventListener("blur", this._blurHandler);
96
+ this._blurHandler = null;
97
+ }
98
+ this._listenersSetup = false;
99
+ }
100
+ setupEventListeners() {
101
+ if (this._listenersSetup)
102
+ return;
103
+ const shadow = this.shadowRoot;
104
+ const el = shadow.querySelector(".switch-container");
105
+ if (!el)
106
+ return;
107
+ this._clickHandler = (e) => this.handleSwitchClick(e);
108
+ this._keydownHandler = (e) => this.handleSwitchKeydown(e);
109
+ this._focusHandler = () => el.classList.add("focused");
110
+ this._blurHandler = () => el.classList.remove("focused");
111
+ this.addEventListener("click", this._clickHandler);
112
+ el.addEventListener("keydown", this._keydownHandler);
113
+ el.addEventListener("focus", this._focusHandler);
114
+ el.addEventListener("blur", this._blurHandler);
115
+ this._listenersSetup = true;
116
+ }
117
+ render() {
118
+ const shadow = this.shadowRoot;
119
+ let switchEl = shadow.querySelector(".switch-container");
120
+ const classes = this.buildClassList();
121
+ if (!switchEl) {
122
+ switchEl = document.createElement("div");
123
+ switchEl.className = "switch-container " + classes;
124
+ switchEl.tabIndex = this.disabled ? -1 : 0;
125
+ switchEl.setAttribute("role", "switch");
126
+ switchEl.setAttribute("aria-checked", this.checked ? "true" : "false");
127
+ switchEl.setAttribute("aria-disabled", this.disabled ? "true" : "false");
128
+ switchEl.setAttribute("aria-required", this.required ? "true" : "false");
129
+ const track = document.createElement("div");
130
+ track.className = "switch-track";
131
+ const thumb = document.createElement("div");
132
+ thumb.className = "switch-thumb";
133
+ track.appendChild(thumb);
134
+ switchEl.appendChild(track);
135
+ shadow.appendChild(switchEl);
136
+ }
137
+ else {
138
+ switchEl.className = "switch-container " + classes;
139
+ switchEl.tabIndex = this.disabled ? -1 : 0;
140
+ switchEl.setAttribute("aria-checked", this.checked ? "true" : "false");
141
+ switchEl.setAttribute("aria-disabled", this.disabled ? "true" : "false");
142
+ switchEl.setAttribute("aria-required", this.required ? "true" : "false");
143
+ }
144
+ this.setupEventListeners();
145
+ this.applyLabelName(switchEl);
146
+ this.updateValidity();
147
+ }
148
+ updateValidity() {
149
+ const anchor = this.shadowRoot?.querySelector(".switch-container");
150
+ if (this.disabled) {
151
+ this._internals.setValidity({});
152
+ return;
153
+ }
154
+ if (this.required && !this.checked) {
155
+ this._internals.setValidity({ valueMissing: true }, "Please turn this on", anchor ?? undefined);
156
+ }
157
+ else {
158
+ this._internals.setValidity({});
159
+ }
160
+ }
161
+ get checked() { return this.getProperty("checked"); }
162
+ set checked(value) { this.setProperty("checked", value); }
163
+ get value() { return this.getProperty("value"); }
164
+ set value(val) { this.setProperty("value", val); }
165
+ get name() { return this.getProperty("name"); }
166
+ set name(val) { this.setProperty("name", val); }
167
+ get disabled() { return this.getProperty("disabled"); }
168
+ set disabled(value) { this.setProperty("disabled", value); }
169
+ get required() { return this.getProperty("required"); }
170
+ set required(value) { this.setProperty("required", value); }
171
+ get size() { return this.getProperty("size"); }
172
+ set size(value) { this.setProperty("size", value); }
173
+ get flavor() { return this.getProperty("flavor"); }
174
+ set flavor(value) { this.setProperty("flavor", value); }
175
+ get form() { return this._internals.form; }
205
176
  }
206
177
  TySwitch.formAssociated = true;
207
178
  TySwitch.properties = {
208
- checked: {
209
- type: "boolean",
210
- visual: true,
211
- formValue: true,
212
- emitChange: true,
213
- default: false,
214
- },
215
- value: {
216
- type: "string",
217
- default: "on",
218
- },
219
- name: {
220
- type: "string",
221
- default: "",
222
- },
223
- disabled: {
224
- type: "boolean",
225
- visual: true,
226
- default: false,
227
- },
228
- required: {
229
- type: "boolean",
230
- visual: true,
231
- default: false,
232
- },
233
- size: {
234
- type: "string",
235
- visual: true,
236
- default: "md",
237
- validate: (v) => ["xs", "sm", "md", "lg", "xl"].includes(v),
238
- coerce: (v) => {
239
- if (!["xs", "sm", "md", "lg", "xl"].includes(v)) {
240
- console.warn(`[ty-switch] Invalid size '${v}'. Using 'md'.`);
241
- return "md";
242
- }
243
- return v;
244
- },
245
- },
246
- // Any string is accepted: built-ins get static CSS, other identifiers
247
- // become custom flavors (see _syncCustomFlavor), garbage degrades to
248
- // the default look.
249
- flavor: {
250
- type: "string",
251
- visual: true,
252
- default: "primary",
253
- },
179
+ checked: {
180
+ type: "boolean",
181
+ visual: true,
182
+ formValue: true,
183
+ emitChange: true,
184
+ default: false,
185
+ },
186
+ value: {
187
+ type: "string",
188
+ default: "on",
189
+ },
190
+ name: {
191
+ type: "string",
192
+ default: "",
193
+ },
194
+ disabled: {
195
+ type: "boolean",
196
+ visual: true,
197
+ default: false,
198
+ },
199
+ required: {
200
+ type: "boolean",
201
+ visual: true,
202
+ default: false,
203
+ },
204
+ size: {
205
+ type: "string",
206
+ visual: true,
207
+ default: DEFAULT_SIZE,
208
+ validate: (v) => ["xs", "sm", "md", "lg", "xl"].includes(v),
209
+ coerce: (v) => {
210
+ if (!["xs", "sm", "md", "lg", "xl"].includes(v)) {
211
+ console.warn(`[ty-switch] Invalid size '${v}'. Using '${DEFAULT_SIZE}'.`);
212
+ return DEFAULT_SIZE;
213
+ }
214
+ return v;
215
+ },
216
+ },
217
+ flavor: {
218
+ type: "string",
219
+ visual: true,
220
+ default: "primary",
221
+ },
254
222
  };
255
223
  if (!customElements.get("ty-switch")) {
256
- customElements.define("ty-switch", TySwitch);
224
+ customElements.define("ty-switch", TySwitch);
257
225
  }
258
- //# sourceMappingURL=switch.js.map