@tessera-ui/core 0.4.1 → 0.5.0

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 (600) hide show
  1. package/README.md +21 -12
  2. package/dist/components/index.js +1 -1
  3. package/dist/components/{p-O8aQgWRZ.js → p-2ydrBbXU.js} +2 -2
  4. package/dist/components/p-A0saON5E.js +2 -0
  5. package/dist/components/p-B046Q9mB.js +2 -0
  6. package/dist/components/{p-C7JaUlNB.js → p-B4_cDa1A.js} +2 -2
  7. package/dist/components/{p-BdzH6wlc.js → p-BCv5H01l.js} +2 -2
  8. package/dist/components/p-BGnwokOT.js +2 -0
  9. package/dist/components/p-BMu62WKn.js +2 -0
  10. package/dist/components/p-BT1uIgln.js +2 -0
  11. package/dist/components/p-BUWioFPq.js +2 -0
  12. package/dist/components/{p-v-L32wKy.js → p-BdeYJARM.js} +2 -2
  13. package/dist/components/{p-DhQ7X_TL.js → p-BnX1KON4.js} +2 -2
  14. package/dist/components/{p-DwJ7Jt3k.js → p-BsX7YKf7.js} +2 -2
  15. package/dist/components/p-BzSptDZ8.js +2 -0
  16. package/dist/components/p-C4C_ntgI.js +2 -0
  17. package/dist/components/p-C4jvuley.js +2 -0
  18. package/dist/components/{p-BP-fZfRb.js → p-CGcBFblJ.js} +2 -2
  19. package/dist/components/p-CJvp9tpd.js +2 -0
  20. package/dist/components/{p-DD986daz.js → p-COpYtD-7.js} +2 -2
  21. package/dist/components/{p-C8wd1644.js → p-CV-_3uEV.js} +2 -2
  22. package/dist/components/p-CXpxj5LF.js +2 -0
  23. package/dist/components/{p-CEQXPxzU.js → p-Ccf23RDb.js} +2 -2
  24. package/dist/components/{p-SopsdO_f.js → p-Ccpbt1Ou.js} +2 -2
  25. package/dist/components/{p-DMPxu5Po.js → p-CgLMjfKE.js} +2 -2
  26. package/dist/components/p-D2rKVDAH.js +2 -0
  27. package/dist/components/{p-zveaarwa.js → p-D33ZtGZF.js} +2 -2
  28. package/dist/components/{p-Fot2uNwg.js → p-DHBR8Qn_.js} +2 -2
  29. package/dist/components/{p-faVXXwqR.js → p-DOtFbUdh.js} +2 -2
  30. package/dist/components/{p-BjiDgszq.js → p-DelBi-6m.js} +2 -2
  31. package/dist/components/{p-Cy_Ad-Jy.js → p-DgbNUE6a.js} +2 -2
  32. package/dist/components/{p-DTAVTqnc.js → p-I5_iFNxb.js} +2 -2
  33. package/dist/components/p-IZ8R1wr2.js +2 -0
  34. package/dist/components/{p-B_NL55YI.js → p-LcG5Mdyq.js} +2 -2
  35. package/dist/components/{p-BcoU0ISN.js → p-XuOQBHK0.js} +2 -2
  36. package/dist/components/p-_EbBBIv1.js +2 -0
  37. package/dist/components/p-_vCbug8y.js +2 -0
  38. package/dist/components/{p-B0ZXNFSa.js → p-b-zWbmXM.js} +2 -2
  39. package/dist/components/{p-DwUH8YQW.js → p-e-hrdd0t.js} +2 -2
  40. package/dist/components/p-gtluIo4p.js +2 -0
  41. package/dist/components/p-o-GUod2W.js +2 -0
  42. package/dist/components/{p-DooMF1E0.js → p-w9y5VC-3.js} +2 -2
  43. package/dist/components/ts-accordion-item.js +1 -1
  44. package/dist/components/ts-accordion.js +1 -1
  45. package/dist/components/ts-alert.js +1 -1
  46. package/dist/components/ts-avatar.js +1 -1
  47. package/dist/components/ts-badge.js +1 -1
  48. package/dist/components/ts-banner.js +1 -1
  49. package/dist/components/ts-breadcrumb-item.js +1 -1
  50. package/dist/components/ts-breadcrumb.js +1 -1
  51. package/dist/components/ts-button.js +1 -1
  52. package/dist/components/ts-card.js +1 -1
  53. package/dist/components/ts-checkbox.js +1 -1
  54. package/dist/components/ts-chip.js +1 -1
  55. package/dist/components/ts-container.js +1 -1
  56. package/dist/components/ts-date-picker.js +1 -1
  57. package/dist/components/ts-dialog.js +1 -1
  58. package/dist/components/ts-divider.js +1 -1
  59. package/dist/components/ts-drawer.js +1 -1
  60. package/dist/components/ts-empty-state.js +1 -1
  61. package/dist/components/ts-file-upload.js +1 -1
  62. package/dist/components/ts-grid.js +1 -1
  63. package/dist/components/ts-icon.js +1 -1
  64. package/dist/components/ts-input.js +1 -1
  65. package/dist/components/ts-menu-item.js +1 -1
  66. package/dist/components/ts-menu.js +1 -1
  67. package/dist/components/ts-modal.js +1 -1
  68. package/dist/components/ts-nav-item.js +1 -1
  69. package/dist/components/ts-nav.js +1 -1
  70. package/dist/components/ts-pagination.js +1 -1
  71. package/dist/components/ts-popover.js +1 -1
  72. package/dist/components/ts-progress.js +1 -1
  73. package/dist/components/ts-radio.js +1 -1
  74. package/dist/components/ts-row.js +1 -1
  75. package/dist/components/ts-select.js +1 -1
  76. package/dist/components/ts-skeleton.js +1 -1
  77. package/dist/components/ts-slider.js +1 -1
  78. package/dist/components/ts-spacer.js +1 -1
  79. package/dist/components/ts-spinner.js +1 -1
  80. package/dist/components/ts-stack.js +1 -1
  81. package/dist/components/ts-step.js +1 -1
  82. package/dist/components/ts-stepper.js +1 -1
  83. package/dist/components/ts-switch-group.js +1 -1
  84. package/dist/components/ts-switch-option.js +1 -1
  85. package/dist/components/ts-tab-panel.js +1 -1
  86. package/dist/components/ts-table.js +1 -1
  87. package/dist/components/ts-tabs.js +1 -1
  88. package/dist/components/ts-textarea.js +1 -1
  89. package/dist/components/ts-toast.js +1 -1
  90. package/dist/components/ts-toggle.js +1 -1
  91. package/dist/components/ts-toolbar.js +1 -1
  92. package/dist/components/ts-tooltip.js +1 -1
  93. package/dist/components/ts-tree-item.js +1 -1
  94. package/dist/components/ts-tree.js +1 -1
  95. package/package.json +24 -3
  96. package/dist/cjs/aria-CeYIvz3U.js.map +0 -1
  97. package/dist/cjs/index-Bel_x2OU.js.map +0 -1
  98. package/dist/cjs/index.cjs.js.map +0 -1
  99. package/dist/cjs/loader.cjs.js.map +0 -1
  100. package/dist/cjs/lucide-B1gCqJ3G.js.map +0 -1
  101. package/dist/cjs/tessera-ui.cjs.js.map +0 -1
  102. package/dist/cjs/ts-accordion-item.cjs.entry.js.map +0 -1
  103. package/dist/cjs/ts-accordion.cjs.entry.js.map +0 -1
  104. package/dist/cjs/ts-alert.cjs.entry.js.map +0 -1
  105. package/dist/cjs/ts-avatar.cjs.entry.js.map +0 -1
  106. package/dist/cjs/ts-badge.cjs.entry.js.map +0 -1
  107. package/dist/cjs/ts-banner.cjs.entry.js.map +0 -1
  108. package/dist/cjs/ts-breadcrumb-item.cjs.entry.js.map +0 -1
  109. package/dist/cjs/ts-breadcrumb.cjs.entry.js.map +0 -1
  110. package/dist/cjs/ts-button.cjs.entry.js.map +0 -1
  111. package/dist/cjs/ts-card.cjs.entry.js.map +0 -1
  112. package/dist/cjs/ts-checkbox.cjs.entry.js.map +0 -1
  113. package/dist/cjs/ts-chip.cjs.entry.js.map +0 -1
  114. package/dist/cjs/ts-container.cjs.entry.js.map +0 -1
  115. package/dist/cjs/ts-date-picker.cjs.entry.js.map +0 -1
  116. package/dist/cjs/ts-dialog.cjs.entry.js.map +0 -1
  117. package/dist/cjs/ts-divider.cjs.entry.js.map +0 -1
  118. package/dist/cjs/ts-drawer.cjs.entry.js.map +0 -1
  119. package/dist/cjs/ts-empty-state.cjs.entry.js.map +0 -1
  120. package/dist/cjs/ts-file-upload.cjs.entry.js.map +0 -1
  121. package/dist/cjs/ts-grid.cjs.entry.js.map +0 -1
  122. package/dist/cjs/ts-icon-CfbhgAgr.js.map +0 -1
  123. package/dist/cjs/ts-icon.cjs.entry.js.map +0 -1
  124. package/dist/cjs/ts-input.cjs.entry.js.map +0 -1
  125. package/dist/cjs/ts-menu-item.cjs.entry.js.map +0 -1
  126. package/dist/cjs/ts-menu.cjs.entry.js.map +0 -1
  127. package/dist/cjs/ts-modal.cjs.entry.js.map +0 -1
  128. package/dist/cjs/ts-nav-item.cjs.entry.js.map +0 -1
  129. package/dist/cjs/ts-nav.cjs.entry.js.map +0 -1
  130. package/dist/cjs/ts-pagination.cjs.entry.js.map +0 -1
  131. package/dist/cjs/ts-popover.cjs.entry.js.map +0 -1
  132. package/dist/cjs/ts-progress.cjs.entry.js.map +0 -1
  133. package/dist/cjs/ts-radio.cjs.entry.js.map +0 -1
  134. package/dist/cjs/ts-row.cjs.entry.js.map +0 -1
  135. package/dist/cjs/ts-select.cjs.entry.js.map +0 -1
  136. package/dist/cjs/ts-skeleton.cjs.entry.js.map +0 -1
  137. package/dist/cjs/ts-slider.cjs.entry.js.map +0 -1
  138. package/dist/cjs/ts-spacer.cjs.entry.js.map +0 -1
  139. package/dist/cjs/ts-spinner.cjs.entry.js.map +0 -1
  140. package/dist/cjs/ts-stack.cjs.entry.js.map +0 -1
  141. package/dist/cjs/ts-step.cjs.entry.js.map +0 -1
  142. package/dist/cjs/ts-stepper.cjs.entry.js.map +0 -1
  143. package/dist/cjs/ts-switch-group.cjs.entry.js.map +0 -1
  144. package/dist/cjs/ts-switch-option.cjs.entry.js.map +0 -1
  145. package/dist/cjs/ts-tab-panel.cjs.entry.js.map +0 -1
  146. package/dist/cjs/ts-table.cjs.entry.js.map +0 -1
  147. package/dist/cjs/ts-tabs.cjs.entry.js.map +0 -1
  148. package/dist/cjs/ts-textarea.cjs.entry.js.map +0 -1
  149. package/dist/cjs/ts-toast.cjs.entry.js.map +0 -1
  150. package/dist/cjs/ts-toggle.cjs.entry.js.map +0 -1
  151. package/dist/cjs/ts-toolbar.cjs.entry.js.map +0 -1
  152. package/dist/cjs/ts-tooltip.cjs.entry.js.map +0 -1
  153. package/dist/cjs/ts-tree-item.cjs.entry.js.map +0 -1
  154. package/dist/cjs/ts-tree.cjs.entry.js.map +0 -1
  155. package/dist/collection/components/accordion/accordion-item.js.map +0 -1
  156. package/dist/collection/components/accordion/accordion-item.stories.js +0 -4
  157. package/dist/collection/components/accordion/accordion-item.stories.js.map +0 -1
  158. package/dist/collection/components/accordion/accordion.js.map +0 -1
  159. package/dist/collection/components/accordion/accordion.stories.js +0 -90
  160. package/dist/collection/components/accordion/accordion.stories.js.map +0 -1
  161. package/dist/collection/components/alert/alert.js.map +0 -1
  162. package/dist/collection/components/alert/alert.stories.js +0 -128
  163. package/dist/collection/components/alert/alert.stories.js.map +0 -1
  164. package/dist/collection/components/avatar/avatar.js.map +0 -1
  165. package/dist/collection/components/avatar/avatar.stories.js +0 -138
  166. package/dist/collection/components/avatar/avatar.stories.js.map +0 -1
  167. package/dist/collection/components/badge/badge.js.map +0 -1
  168. package/dist/collection/components/badge/badge.stories.js +0 -193
  169. package/dist/collection/components/badge/badge.stories.js.map +0 -1
  170. package/dist/collection/components/banner/banner.js.map +0 -1
  171. package/dist/collection/components/banner/banner.stories.js +0 -92
  172. package/dist/collection/components/banner/banner.stories.js.map +0 -1
  173. package/dist/collection/components/breadcrumb/breadcrumb-item.js.map +0 -1
  174. package/dist/collection/components/breadcrumb/breadcrumb-item.stories.js +0 -4
  175. package/dist/collection/components/breadcrumb/breadcrumb-item.stories.js.map +0 -1
  176. package/dist/collection/components/breadcrumb/breadcrumb.js.map +0 -1
  177. package/dist/collection/components/breadcrumb/breadcrumb.stories.js +0 -88
  178. package/dist/collection/components/breadcrumb/breadcrumb.stories.js.map +0 -1
  179. package/dist/collection/components/button/button.js.map +0 -1
  180. package/dist/collection/components/button/button.stories.js +0 -219
  181. package/dist/collection/components/button/button.stories.js.map +0 -1
  182. package/dist/collection/components/card/card.js.map +0 -1
  183. package/dist/collection/components/card/card.stories.js +0 -221
  184. package/dist/collection/components/card/card.stories.js.map +0 -1
  185. package/dist/collection/components/checkbox/checkbox.js.map +0 -1
  186. package/dist/collection/components/checkbox/checkbox.stories.js +0 -90
  187. package/dist/collection/components/checkbox/checkbox.stories.js.map +0 -1
  188. package/dist/collection/components/chip/chip.js.map +0 -1
  189. package/dist/collection/components/chip/chip.stories.js +0 -139
  190. package/dist/collection/components/chip/chip.stories.js.map +0 -1
  191. package/dist/collection/components/container/container.js.map +0 -1
  192. package/dist/collection/components/container/container.stories.js +0 -138
  193. package/dist/collection/components/container/container.stories.js.map +0 -1
  194. package/dist/collection/components/date-picker/date-picker.js.map +0 -1
  195. package/dist/collection/components/date-picker/date-picker.stories.js +0 -119
  196. package/dist/collection/components/date-picker/date-picker.stories.js.map +0 -1
  197. package/dist/collection/components/dialog/dialog.js.map +0 -1
  198. package/dist/collection/components/dialog/dialog.stories.js +0 -147
  199. package/dist/collection/components/dialog/dialog.stories.js.map +0 -1
  200. package/dist/collection/components/divider/divider.js.map +0 -1
  201. package/dist/collection/components/divider/divider.stories.js +0 -94
  202. package/dist/collection/components/divider/divider.stories.js.map +0 -1
  203. package/dist/collection/components/drawer/drawer.js.map +0 -1
  204. package/dist/collection/components/drawer/drawer.stories.js +0 -143
  205. package/dist/collection/components/drawer/drawer.stories.js.map +0 -1
  206. package/dist/collection/components/empty-state/empty-state.js.map +0 -1
  207. package/dist/collection/components/empty-state/empty-state.stories.js +0 -113
  208. package/dist/collection/components/empty-state/empty-state.stories.js.map +0 -1
  209. package/dist/collection/components/file-upload/file-upload.js.map +0 -1
  210. package/dist/collection/components/file-upload/file-upload.stories.js +0 -107
  211. package/dist/collection/components/file-upload/file-upload.stories.js.map +0 -1
  212. package/dist/collection/components/grid/grid.js.map +0 -1
  213. package/dist/collection/components/grid/grid.stories.js +0 -134
  214. package/dist/collection/components/grid/grid.stories.js.map +0 -1
  215. package/dist/collection/components/icon/icon-registry.js.map +0 -1
  216. package/dist/collection/components/icon/icon.js.map +0 -1
  217. package/dist/collection/components/icon/icon.stories.js +0 -119
  218. package/dist/collection/components/icon/icon.stories.js.map +0 -1
  219. package/dist/collection/components/input/input.js.map +0 -1
  220. package/dist/collection/components/input/input.stories.js +0 -151
  221. package/dist/collection/components/input/input.stories.js.map +0 -1
  222. package/dist/collection/components/menu/menu-item.js.map +0 -1
  223. package/dist/collection/components/menu/menu-item.stories.js +0 -4
  224. package/dist/collection/components/menu/menu-item.stories.js.map +0 -1
  225. package/dist/collection/components/menu/menu.js.map +0 -1
  226. package/dist/collection/components/menu/menu.stories.js +0 -126
  227. package/dist/collection/components/menu/menu.stories.js.map +0 -1
  228. package/dist/collection/components/modal/modal.js.map +0 -1
  229. package/dist/collection/components/modal/modal.stories.js +0 -233
  230. package/dist/collection/components/modal/modal.stories.js.map +0 -1
  231. package/dist/collection/components/nav/nav-item.js.map +0 -1
  232. package/dist/collection/components/nav/nav-item.stories.js +0 -4
  233. package/dist/collection/components/nav/nav-item.stories.js.map +0 -1
  234. package/dist/collection/components/nav/nav.js.map +0 -1
  235. package/dist/collection/components/nav/nav.stories.js +0 -106
  236. package/dist/collection/components/nav/nav.stories.js.map +0 -1
  237. package/dist/collection/components/pagination/pagination.js.map +0 -1
  238. package/dist/collection/components/pagination/pagination.stories.js +0 -92
  239. package/dist/collection/components/pagination/pagination.stories.js.map +0 -1
  240. package/dist/collection/components/popover/popover.js.map +0 -1
  241. package/dist/collection/components/popover/popover.stories.js +0 -112
  242. package/dist/collection/components/popover/popover.stories.js.map +0 -1
  243. package/dist/collection/components/progress/progress.js.map +0 -1
  244. package/dist/collection/components/progress/progress.stories.js +0 -132
  245. package/dist/collection/components/progress/progress.stories.js.map +0 -1
  246. package/dist/collection/components/radio/radio.js.map +0 -1
  247. package/dist/collection/components/radio/radio.stories.js +0 -77
  248. package/dist/collection/components/radio/radio.stories.js.map +0 -1
  249. package/dist/collection/components/row/row.js.map +0 -1
  250. package/dist/collection/components/row/row.stories.js +0 -172
  251. package/dist/collection/components/row/row.stories.js.map +0 -1
  252. package/dist/collection/components/select/select.js.map +0 -1
  253. package/dist/collection/components/select/select.stories.js +0 -138
  254. package/dist/collection/components/select/select.stories.js.map +0 -1
  255. package/dist/collection/components/skeleton/skeleton.js.map +0 -1
  256. package/dist/collection/components/skeleton/skeleton.stories.js +0 -140
  257. package/dist/collection/components/skeleton/skeleton.stories.js.map +0 -1
  258. package/dist/collection/components/slider/slider.js.map +0 -1
  259. package/dist/collection/components/slider/slider.stories.js +0 -100
  260. package/dist/collection/components/slider/slider.stories.js.map +0 -1
  261. package/dist/collection/components/spacer/spacer.js.map +0 -1
  262. package/dist/collection/components/spacer/spacer.stories.js +0 -90
  263. package/dist/collection/components/spacer/spacer.stories.js.map +0 -1
  264. package/dist/collection/components/spinner/spinner.js.map +0 -1
  265. package/dist/collection/components/spinner/spinner.stories.js +0 -88
  266. package/dist/collection/components/spinner/spinner.stories.js.map +0 -1
  267. package/dist/collection/components/stack/stack.js.map +0 -1
  268. package/dist/collection/components/stack/stack.stories.js +0 -121
  269. package/dist/collection/components/stack/stack.stories.js.map +0 -1
  270. package/dist/collection/components/stepper/step.js.map +0 -1
  271. package/dist/collection/components/stepper/step.stories.js +0 -4
  272. package/dist/collection/components/stepper/step.stories.js.map +0 -1
  273. package/dist/collection/components/stepper/stepper.js.map +0 -1
  274. package/dist/collection/components/stepper/stepper.stories.js +0 -130
  275. package/dist/collection/components/stepper/stepper.stories.js.map +0 -1
  276. package/dist/collection/components/switch-group/switch-group.js.map +0 -1
  277. package/dist/collection/components/switch-group/switch-group.stories.js +0 -132
  278. package/dist/collection/components/switch-group/switch-group.stories.js.map +0 -1
  279. package/dist/collection/components/switch-group/switch-option.js.map +0 -1
  280. package/dist/collection/components/switch-group/switch-option.stories.js +0 -4
  281. package/dist/collection/components/switch-group/switch-option.stories.js.map +0 -1
  282. package/dist/collection/components/table/table.js.map +0 -1
  283. package/dist/collection/components/table/table.stories.js +0 -147
  284. package/dist/collection/components/table/table.stories.js.map +0 -1
  285. package/dist/collection/components/tabs/tab-panel.js.map +0 -1
  286. package/dist/collection/components/tabs/tab-panel.stories.js +0 -4
  287. package/dist/collection/components/tabs/tab-panel.stories.js.map +0 -1
  288. package/dist/collection/components/tabs/tabs.js.map +0 -1
  289. package/dist/collection/components/tabs/tabs.stories.js +0 -187
  290. package/dist/collection/components/tabs/tabs.stories.js.map +0 -1
  291. package/dist/collection/components/textarea/textarea.js.map +0 -1
  292. package/dist/collection/components/textarea/textarea.stories.js +0 -130
  293. package/dist/collection/components/textarea/textarea.stories.js.map +0 -1
  294. package/dist/collection/components/toast/toast.js.map +0 -1
  295. package/dist/collection/components/toast/toast.stories.js +0 -91
  296. package/dist/collection/components/toast/toast.stories.js.map +0 -1
  297. package/dist/collection/components/toggle/toggle.js.map +0 -1
  298. package/dist/collection/components/toggle/toggle.stories.js +0 -145
  299. package/dist/collection/components/toggle/toggle.stories.js.map +0 -1
  300. package/dist/collection/components/toolbar/toolbar.js.map +0 -1
  301. package/dist/collection/components/toolbar/toolbar.stories.js +0 -131
  302. package/dist/collection/components/toolbar/toolbar.stories.js.map +0 -1
  303. package/dist/collection/components/tooltip/tooltip.js.map +0 -1
  304. package/dist/collection/components/tooltip/tooltip.stories.js +0 -186
  305. package/dist/collection/components/tooltip/tooltip.stories.js.map +0 -1
  306. package/dist/collection/components/tree/tree-item.js.map +0 -1
  307. package/dist/collection/components/tree/tree-item.stories.js +0 -4
  308. package/dist/collection/components/tree/tree-item.stories.js.map +0 -1
  309. package/dist/collection/components/tree/tree.js.map +0 -1
  310. package/dist/collection/components/tree/tree.stories.js +0 -121
  311. package/dist/collection/components/tree/tree.stories.js.map +0 -1
  312. package/dist/collection/index.js.map +0 -1
  313. package/dist/collection/theme/tokens.js.map +0 -1
  314. package/dist/collection/types/index.js.map +0 -1
  315. package/dist/collection/utils/aria.js.map +0 -1
  316. package/dist/collection/utils/dom.js.map +0 -1
  317. package/dist/collection/utils/events.js.map +0 -1
  318. package/dist/components/index.js.map +0 -1
  319. package/dist/components/p-6RDSLDuS.js +0 -2
  320. package/dist/components/p-6RDSLDuS.js.map +0 -1
  321. package/dist/components/p-B0ZXNFSa.js.map +0 -1
  322. package/dist/components/p-BCgm2utU.js +0 -2
  323. package/dist/components/p-BCgm2utU.js.map +0 -1
  324. package/dist/components/p-BFN5hUo4.js +0 -2
  325. package/dist/components/p-BFN5hUo4.js.map +0 -1
  326. package/dist/components/p-BOxYojS-.js.map +0 -1
  327. package/dist/components/p-BP-fZfRb.js.map +0 -1
  328. package/dist/components/p-B_NL55YI.js.map +0 -1
  329. package/dist/components/p-BcoU0ISN.js.map +0 -1
  330. package/dist/components/p-BdzH6wlc.js.map +0 -1
  331. package/dist/components/p-BeErYjKz.js +0 -2
  332. package/dist/components/p-BeErYjKz.js.map +0 -1
  333. package/dist/components/p-BjiDgszq.js.map +0 -1
  334. package/dist/components/p-BjyTgfXe.js +0 -2
  335. package/dist/components/p-BjyTgfXe.js.map +0 -1
  336. package/dist/components/p-BlZHjan9.js +0 -2
  337. package/dist/components/p-BlZHjan9.js.map +0 -1
  338. package/dist/components/p-C7JaUlNB.js.map +0 -1
  339. package/dist/components/p-C8wd1644.js.map +0 -1
  340. package/dist/components/p-CEQXPxzU.js.map +0 -1
  341. package/dist/components/p-CGh7W07E.js +0 -2
  342. package/dist/components/p-CGh7W07E.js.map +0 -1
  343. package/dist/components/p-CHtE5caV.js +0 -2
  344. package/dist/components/p-CHtE5caV.js.map +0 -1
  345. package/dist/components/p-CSNeA_zh.js +0 -2
  346. package/dist/components/p-CSNeA_zh.js.map +0 -1
  347. package/dist/components/p-CbHlJvjF.js +0 -2
  348. package/dist/components/p-CbHlJvjF.js.map +0 -1
  349. package/dist/components/p-CkQOAizb.js +0 -2
  350. package/dist/components/p-CkQOAizb.js.map +0 -1
  351. package/dist/components/p-Cy_Ad-Jy.js.map +0 -1
  352. package/dist/components/p-DD986daz.js.map +0 -1
  353. package/dist/components/p-DFnNsZtI.js +0 -2
  354. package/dist/components/p-DFnNsZtI.js.map +0 -1
  355. package/dist/components/p-DMPxu5Po.js.map +0 -1
  356. package/dist/components/p-DMuI5d5r.js +0 -2
  357. package/dist/components/p-DMuI5d5r.js.map +0 -1
  358. package/dist/components/p-DPQ1o4MP.js +0 -2
  359. package/dist/components/p-DPQ1o4MP.js.map +0 -1
  360. package/dist/components/p-DTAVTqnc.js.map +0 -1
  361. package/dist/components/p-DhQ7X_TL.js.map +0 -1
  362. package/dist/components/p-DkpyRqHf.js.map +0 -1
  363. package/dist/components/p-DlB-KfKY.js +0 -2
  364. package/dist/components/p-DlB-KfKY.js.map +0 -1
  365. package/dist/components/p-DooMF1E0.js.map +0 -1
  366. package/dist/components/p-DwJ7Jt3k.js.map +0 -1
  367. package/dist/components/p-DwUH8YQW.js.map +0 -1
  368. package/dist/components/p-Fot2uNwg.js.map +0 -1
  369. package/dist/components/p-O8aQgWRZ.js.map +0 -1
  370. package/dist/components/p-SopsdO_f.js.map +0 -1
  371. package/dist/components/p-TFHAUMKT.js +0 -2
  372. package/dist/components/p-TFHAUMKT.js.map +0 -1
  373. package/dist/components/p-faVXXwqR.js.map +0 -1
  374. package/dist/components/p-lpqZSiIf.js.map +0 -1
  375. package/dist/components/p-mfB_pP4L.js +0 -2
  376. package/dist/components/p-mfB_pP4L.js.map +0 -1
  377. package/dist/components/p-v-L32wKy.js.map +0 -1
  378. package/dist/components/p-zveaarwa.js.map +0 -1
  379. package/dist/components/ts-accordion-item.js.map +0 -1
  380. package/dist/components/ts-accordion.js.map +0 -1
  381. package/dist/components/ts-alert.js.map +0 -1
  382. package/dist/components/ts-avatar.js.map +0 -1
  383. package/dist/components/ts-badge.js.map +0 -1
  384. package/dist/components/ts-banner.js.map +0 -1
  385. package/dist/components/ts-breadcrumb-item.js.map +0 -1
  386. package/dist/components/ts-breadcrumb.js.map +0 -1
  387. package/dist/components/ts-button.js.map +0 -1
  388. package/dist/components/ts-card.js.map +0 -1
  389. package/dist/components/ts-checkbox.js.map +0 -1
  390. package/dist/components/ts-chip.js.map +0 -1
  391. package/dist/components/ts-container.js.map +0 -1
  392. package/dist/components/ts-date-picker.js.map +0 -1
  393. package/dist/components/ts-dialog.js.map +0 -1
  394. package/dist/components/ts-divider.js.map +0 -1
  395. package/dist/components/ts-drawer.js.map +0 -1
  396. package/dist/components/ts-empty-state.js.map +0 -1
  397. package/dist/components/ts-file-upload.js.map +0 -1
  398. package/dist/components/ts-grid.js.map +0 -1
  399. package/dist/components/ts-icon.js.map +0 -1
  400. package/dist/components/ts-input.js.map +0 -1
  401. package/dist/components/ts-menu-item.js.map +0 -1
  402. package/dist/components/ts-menu.js.map +0 -1
  403. package/dist/components/ts-modal.js.map +0 -1
  404. package/dist/components/ts-nav-item.js.map +0 -1
  405. package/dist/components/ts-nav.js.map +0 -1
  406. package/dist/components/ts-pagination.js.map +0 -1
  407. package/dist/components/ts-popover.js.map +0 -1
  408. package/dist/components/ts-progress.js.map +0 -1
  409. package/dist/components/ts-radio.js.map +0 -1
  410. package/dist/components/ts-row.js.map +0 -1
  411. package/dist/components/ts-select.js.map +0 -1
  412. package/dist/components/ts-skeleton.js.map +0 -1
  413. package/dist/components/ts-slider.js.map +0 -1
  414. package/dist/components/ts-spacer.js.map +0 -1
  415. package/dist/components/ts-spinner.js.map +0 -1
  416. package/dist/components/ts-stack.js.map +0 -1
  417. package/dist/components/ts-step.js.map +0 -1
  418. package/dist/components/ts-stepper.js.map +0 -1
  419. package/dist/components/ts-switch-group.js.map +0 -1
  420. package/dist/components/ts-switch-option.js.map +0 -1
  421. package/dist/components/ts-tab-panel.js.map +0 -1
  422. package/dist/components/ts-table.js.map +0 -1
  423. package/dist/components/ts-tabs.js.map +0 -1
  424. package/dist/components/ts-textarea.js.map +0 -1
  425. package/dist/components/ts-toast.js.map +0 -1
  426. package/dist/components/ts-toggle.js.map +0 -1
  427. package/dist/components/ts-toolbar.js.map +0 -1
  428. package/dist/components/ts-tooltip.js.map +0 -1
  429. package/dist/components/ts-tree-item.js.map +0 -1
  430. package/dist/components/ts-tree.js.map +0 -1
  431. package/dist/components.json +0 -12678
  432. package/dist/esm/aria-lpqZSiIf.js.map +0 -1
  433. package/dist/esm/index-V8-ENixA.js.map +0 -1
  434. package/dist/esm/index.js.map +0 -1
  435. package/dist/esm/loader.js.map +0 -1
  436. package/dist/esm/lucide-BOxYojS-.js.map +0 -1
  437. package/dist/esm/tessera-ui.js.map +0 -1
  438. package/dist/esm/ts-accordion-item.entry.js.map +0 -1
  439. package/dist/esm/ts-accordion.entry.js.map +0 -1
  440. package/dist/esm/ts-alert.entry.js.map +0 -1
  441. package/dist/esm/ts-avatar.entry.js.map +0 -1
  442. package/dist/esm/ts-badge.entry.js.map +0 -1
  443. package/dist/esm/ts-banner.entry.js.map +0 -1
  444. package/dist/esm/ts-breadcrumb-item.entry.js.map +0 -1
  445. package/dist/esm/ts-breadcrumb.entry.js.map +0 -1
  446. package/dist/esm/ts-button.entry.js.map +0 -1
  447. package/dist/esm/ts-card.entry.js.map +0 -1
  448. package/dist/esm/ts-checkbox.entry.js.map +0 -1
  449. package/dist/esm/ts-chip.entry.js.map +0 -1
  450. package/dist/esm/ts-container.entry.js.map +0 -1
  451. package/dist/esm/ts-date-picker.entry.js.map +0 -1
  452. package/dist/esm/ts-dialog.entry.js.map +0 -1
  453. package/dist/esm/ts-divider.entry.js.map +0 -1
  454. package/dist/esm/ts-drawer.entry.js.map +0 -1
  455. package/dist/esm/ts-empty-state.entry.js.map +0 -1
  456. package/dist/esm/ts-file-upload.entry.js.map +0 -1
  457. package/dist/esm/ts-grid.entry.js.map +0 -1
  458. package/dist/esm/ts-icon-Jz9ioZag.js.map +0 -1
  459. package/dist/esm/ts-icon.entry.js.map +0 -1
  460. package/dist/esm/ts-input.entry.js.map +0 -1
  461. package/dist/esm/ts-menu-item.entry.js.map +0 -1
  462. package/dist/esm/ts-menu.entry.js.map +0 -1
  463. package/dist/esm/ts-modal.entry.js.map +0 -1
  464. package/dist/esm/ts-nav-item.entry.js.map +0 -1
  465. package/dist/esm/ts-nav.entry.js.map +0 -1
  466. package/dist/esm/ts-pagination.entry.js.map +0 -1
  467. package/dist/esm/ts-popover.entry.js.map +0 -1
  468. package/dist/esm/ts-progress.entry.js.map +0 -1
  469. package/dist/esm/ts-radio.entry.js.map +0 -1
  470. package/dist/esm/ts-row.entry.js.map +0 -1
  471. package/dist/esm/ts-select.entry.js.map +0 -1
  472. package/dist/esm/ts-skeleton.entry.js.map +0 -1
  473. package/dist/esm/ts-slider.entry.js.map +0 -1
  474. package/dist/esm/ts-spacer.entry.js.map +0 -1
  475. package/dist/esm/ts-spinner.entry.js.map +0 -1
  476. package/dist/esm/ts-stack.entry.js.map +0 -1
  477. package/dist/esm/ts-step.entry.js.map +0 -1
  478. package/dist/esm/ts-stepper.entry.js.map +0 -1
  479. package/dist/esm/ts-switch-group.entry.js.map +0 -1
  480. package/dist/esm/ts-switch-option.entry.js.map +0 -1
  481. package/dist/esm/ts-tab-panel.entry.js.map +0 -1
  482. package/dist/esm/ts-table.entry.js.map +0 -1
  483. package/dist/esm/ts-tabs.entry.js.map +0 -1
  484. package/dist/esm/ts-textarea.entry.js.map +0 -1
  485. package/dist/esm/ts-toast.entry.js.map +0 -1
  486. package/dist/esm/ts-toggle.entry.js.map +0 -1
  487. package/dist/esm/ts-toolbar.entry.js.map +0 -1
  488. package/dist/esm/ts-tooltip.entry.js.map +0 -1
  489. package/dist/esm/ts-tree-item.entry.js.map +0 -1
  490. package/dist/esm/ts-tree.entry.js.map +0 -1
  491. package/dist/tessera-ui/index.esm.js.map +0 -1
  492. package/dist/tessera-ui/p-0424cd55.entry.js.map +0 -1
  493. package/dist/tessera-ui/p-04522bf9.entry.js.map +0 -1
  494. package/dist/tessera-ui/p-04aa8b90.entry.js.map +0 -1
  495. package/dist/tessera-ui/p-080eaf89.entry.js.map +0 -1
  496. package/dist/tessera-ui/p-0ec061e5.entry.js.map +0 -1
  497. package/dist/tessera-ui/p-122e43b7.entry.js.map +0 -1
  498. package/dist/tessera-ui/p-16bb8ca8.entry.js.map +0 -1
  499. package/dist/tessera-ui/p-16fc632b.entry.js.map +0 -1
  500. package/dist/tessera-ui/p-1d73f6c9.entry.js.map +0 -1
  501. package/dist/tessera-ui/p-24305379.entry.js.map +0 -1
  502. package/dist/tessera-ui/p-25f77cc9.entry.js.map +0 -1
  503. package/dist/tessera-ui/p-35eb8496.entry.js.map +0 -1
  504. package/dist/tessera-ui/p-3aec66b4.entry.js.map +0 -1
  505. package/dist/tessera-ui/p-4277460b.entry.js.map +0 -1
  506. package/dist/tessera-ui/p-441310f7.entry.js.map +0 -1
  507. package/dist/tessera-ui/p-491e1a75.entry.js.map +0 -1
  508. package/dist/tessera-ui/p-50d092ce.entry.js.map +0 -1
  509. package/dist/tessera-ui/p-50efadf3.entry.js.map +0 -1
  510. package/dist/tessera-ui/p-53846d59.entry.js.map +0 -1
  511. package/dist/tessera-ui/p-56f2b070.entry.js.map +0 -1
  512. package/dist/tessera-ui/p-6760f922.entry.js.map +0 -1
  513. package/dist/tessera-ui/p-69bb11ed.entry.js.map +0 -1
  514. package/dist/tessera-ui/p-6d35a60c.entry.js.map +0 -1
  515. package/dist/tessera-ui/p-6ec285ad.entry.js.map +0 -1
  516. package/dist/tessera-ui/p-708d4eb5.entry.js.map +0 -1
  517. package/dist/tessera-ui/p-79ff8ceb.entry.js.map +0 -1
  518. package/dist/tessera-ui/p-7e531195.entry.js.map +0 -1
  519. package/dist/tessera-ui/p-7fa64f00.entry.js.map +0 -1
  520. package/dist/tessera-ui/p-829c4307.entry.js.map +0 -1
  521. package/dist/tessera-ui/p-91ccef3f.entry.js.map +0 -1
  522. package/dist/tessera-ui/p-9209e603.entry.js.map +0 -1
  523. package/dist/tessera-ui/p-97a9def7.entry.js.map +0 -1
  524. package/dist/tessera-ui/p-9b41b538.entry.js.map +0 -1
  525. package/dist/tessera-ui/p-9c0504fd.entry.js.map +0 -1
  526. package/dist/tessera-ui/p-BOxYojS-.js.map +0 -1
  527. package/dist/tessera-ui/p-StBQmS8h.js.map +0 -1
  528. package/dist/tessera-ui/p-V8-ENixA.js.map +0 -1
  529. package/dist/tessera-ui/p-a120b5d6.entry.js.map +0 -1
  530. package/dist/tessera-ui/p-a55a5695.entry.js.map +0 -1
  531. package/dist/tessera-ui/p-a83d903e.entry.js.map +0 -1
  532. package/dist/tessera-ui/p-adc807dc.entry.js.map +0 -1
  533. package/dist/tessera-ui/p-b09f202c.entry.js.map +0 -1
  534. package/dist/tessera-ui/p-b1182592.entry.js.map +0 -1
  535. package/dist/tessera-ui/p-b3f60955.entry.js.map +0 -1
  536. package/dist/tessera-ui/p-bb9ebbd8.entry.js.map +0 -1
  537. package/dist/tessera-ui/p-bce40715.entry.js.map +0 -1
  538. package/dist/tessera-ui/p-c35c7049.entry.js.map +0 -1
  539. package/dist/tessera-ui/p-c59ecffa.entry.js.map +0 -1
  540. package/dist/tessera-ui/p-d318774a.entry.js.map +0 -1
  541. package/dist/tessera-ui/p-d5cbadd6.entry.js.map +0 -1
  542. package/dist/tessera-ui/p-e1d2b141.entry.js.map +0 -1
  543. package/dist/tessera-ui/p-f0bf6408.entry.js.map +0 -1
  544. package/dist/tessera-ui/p-f639213a.entry.js.map +0 -1
  545. package/dist/tessera-ui/p-fd2376e0.entry.js.map +0 -1
  546. package/dist/tessera-ui/p-fef9a993.entry.js.map +0 -1
  547. package/dist/tessera-ui/p-lpqZSiIf.js.map +0 -1
  548. package/dist/tessera-ui/tessera-ui.esm.js.map +0 -1
  549. package/dist/types/components/accordion/accordion-item.stories.d.ts +0 -5
  550. package/dist/types/components/accordion/accordion.stories.d.ts +0 -21
  551. package/dist/types/components/alert/alert.stories.d.ts +0 -34
  552. package/dist/types/components/avatar/avatar.stories.d.ts +0 -51
  553. package/dist/types/components/badge/badge.stories.d.ts +0 -50
  554. package/dist/types/components/banner/banner.stories.d.ts +0 -40
  555. package/dist/types/components/breadcrumb/breadcrumb-item.stories.d.ts +0 -5
  556. package/dist/types/components/breadcrumb/breadcrumb.stories.d.ts +0 -20
  557. package/dist/types/components/button/button.stories.d.ts +0 -73
  558. package/dist/types/components/card/card.stories.d.ts +0 -46
  559. package/dist/types/components/checkbox/checkbox.stories.d.ts +0 -58
  560. package/dist/types/components/chip/chip.stories.d.ts +0 -54
  561. package/dist/types/components/container/container.stories.d.ts +0 -21
  562. package/dist/types/components/date-picker/date-picker.stories.d.ts +0 -62
  563. package/dist/types/components/dialog/dialog.stories.d.ts +0 -39
  564. package/dist/types/components/divider/divider.stories.d.ts +0 -33
  565. package/dist/types/components/drawer/drawer.stories.d.ts +0 -43
  566. package/dist/types/components/empty-state/empty-state.stories.d.ts +0 -37
  567. package/dist/types/components/file-upload/file-upload.stories.d.ts +0 -43
  568. package/dist/types/components/grid/grid.stories.d.ts +0 -30
  569. package/dist/types/components/icon/icon.stories.d.ts +0 -42
  570. package/dist/types/components/input/input.stories.d.ts +0 -77
  571. package/dist/types/components/menu/menu-item.stories.d.ts +0 -5
  572. package/dist/types/components/menu/menu.stories.d.ts +0 -36
  573. package/dist/types/components/modal/modal.stories.d.ts +0 -47
  574. package/dist/types/components/nav/nav-item.stories.d.ts +0 -5
  575. package/dist/types/components/nav/nav.stories.d.ts +0 -27
  576. package/dist/types/components/pagination/pagination.stories.d.ts +0 -42
  577. package/dist/types/components/popover/popover.stories.d.ts +0 -38
  578. package/dist/types/components/progress/progress.stories.d.ts +0 -59
  579. package/dist/types/components/radio/radio.stories.d.ts +0 -48
  580. package/dist/types/components/row/row.stories.d.ts +0 -52
  581. package/dist/types/components/select/select.stories.d.ts +0 -73
  582. package/dist/types/components/skeleton/skeleton.stories.d.ts +0 -44
  583. package/dist/types/components/slider/slider.stories.d.ts +0 -62
  584. package/dist/types/components/spacer/spacer.stories.d.ts +0 -28
  585. package/dist/types/components/spinner/spinner.stories.d.ts +0 -33
  586. package/dist/types/components/stack/stack.stories.d.ts +0 -28
  587. package/dist/types/components/stepper/step.stories.d.ts +0 -5
  588. package/dist/types/components/stepper/stepper.stories.d.ts +0 -36
  589. package/dist/types/components/switch-group/switch-group.stories.d.ts +0 -37
  590. package/dist/types/components/switch-group/switch-option.stories.d.ts +0 -5
  591. package/dist/types/components/table/table.stories.d.ts +0 -45
  592. package/dist/types/components/tabs/tab-panel.stories.d.ts +0 -5
  593. package/dist/types/components/tabs/tabs.stories.d.ts +0 -34
  594. package/dist/types/components/textarea/textarea.stories.d.ts +0 -88
  595. package/dist/types/components/toast/toast.stories.d.ts +0 -48
  596. package/dist/types/components/toggle/toggle.stories.d.ts +0 -46
  597. package/dist/types/components/toolbar/toolbar.stories.d.ts +0 -28
  598. package/dist/types/components/tooltip/tooltip.stories.d.ts +0 -43
  599. package/dist/types/components/tree/tree-item.stories.d.ts +0 -5
  600. package/dist/types/components/tree/tree.stories.d.ts +0 -21
@@ -1 +0,0 @@
1
- {"file":"ts-menu-item.cjs.entry.js","mappings":"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","names":["h","Host"],"sources":["src/components/menu/menu-item.css?tag=ts-menu-item&encapsulation=shadow","src/components/menu/menu-item.tsx"],"sourcesContent":["/* ==========================================================================\n ts-menu-item — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-menu-item-height Item minimum height\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-menu-item-height: 2.25rem;\n}\n\n/* ---- Base ---- */\n.menu-item__base {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n min-block-size: var(--ts-menu-item-height);\n padding-inline: var(--ts-spacing-3);\n padding-block: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n color: var(--ts-color-text-primary);\n text-decoration: none;\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n outline: none;\n border: none;\n background: none;\n width: 100%;\n white-space: nowrap;\n}\n\n.menu-item__base:hover:not([aria-disabled=\"true\"]) {\n background-color: var(--ts-color-bg-hover);\n}\n\n.menu-item__base:focus-visible {\n background-color: var(--ts-color-bg-hover);\n box-shadow: inset 0 0 0 2px var(--ts-color-interactive-primary);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .menu-item__base {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Slot wrappers ---- */\n.menu-item__prefix,\n.menu-item__suffix {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.menu-item__prefix:empty,\n.menu-item__suffix:empty {\n display: none;\n}\n\n.menu-item__label {\n display: inline-flex;\n align-items: center;\n flex-grow: 1;\n}\n\n.menu-item__suffix {\n margin-inline-start: auto;\n padding-inline-start: var(--ts-spacing-3);\n color: var(--ts-color-text-tertiary);\n font-size: var(--ts-font-size-xs);\n}\n","import { Component, Prop, Event, h, Host, Element, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for menu item label content.\n * @slot prefix - Content before the label (e.g., icon).\n * @slot suffix - Content after the label (e.g., shortcut or badge).\n *\n * @part base - The menu item container element.\n * @part prefix - The prefix slot wrapper.\n * @part label - The label wrapper.\n * @part suffix - The suffix slot wrapper.\n */\n@Component({\n tag: 'ts-menu-item',\n styleUrl: 'menu-item.css',\n shadow: true,\n})\nexport class TsMenuItem {\n @Element() hostEl!: HTMLElement;\n\n /** Disables the menu item. */\n @Prop({ reflect: true }) disabled = false;\n\n /** The value associated with this menu item. */\n @Prop({ reflect: true }) value = '';\n\n /** If provided, renders the item as a link. */\n @Prop() href?: string;\n\n /** Emitted when the menu item is selected. */\n @Event({ eventName: 'tsSelect' }) tsSelect!: EventEmitter<{ value: string }>;\n\n private baseEl?: HTMLElement;\n\n /** Focus the menu item. */\n @Method()\n async setFocus(): Promise<void> {\n this.baseEl?.focus();\n }\n\n connectedCallback(): void {\n // Allow the host element to delegate focus to the inner element\n this.hostEl.addEventListener('focus', () => {\n this.baseEl?.focus();\n });\n }\n\n private handleClick = (): void => {\n if (this.disabled) return;\n this.tsSelect.emit({ value: this.value });\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.tsSelect.emit({ value: this.value });\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const isLink = !!this.href;\n const Tag = isLink ? 'a' : 'div';\n\n const linkAttrs = isLink\n ? {\n href: this.disabled ? undefined : this.href,\n }\n : {};\n\n return (\n <Host\n class={{\n 'ts-menu-item': true,\n 'ts-menu-item--disabled': this.disabled,\n }}\n >\n <Tag\n {...linkAttrs}\n ref={(el) => (this.baseEl = el as HTMLElement)}\n class=\"menu-item__base\"\n part=\"base\"\n role=\"menuitem\"\n tabindex={this.disabled ? -1 : 0}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n >\n <span class=\"menu-item__prefix\" part=\"prefix\">\n <slot name=\"prefix\" />\n </span>\n\n <span class=\"menu-item__label\" part=\"label\">\n <slot />\n </span>\n\n <span class=\"menu-item__suffix\" part=\"suffix\">\n <slot name=\"suffix\" />\n </span>\n </Tag>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-menu.cjs.entry.js","mappings":"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","names":["generateId","h","Host"],"sources":["src/components/menu/menu.css?tag=ts-menu&encapsulation=shadow","src/components/menu/menu.tsx"],"sourcesContent":["/* ==========================================================================\n ts-menu — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-menu-bg Menu panel background\n --ts-menu-radius Menu panel border radius\n --ts-menu-shadow Menu panel elevation shadow\n ========================================================================== */\n\n:host {\n display: inline-block;\n position: relative;\n font-family: var(--ts-font-family-base);\n\n --ts-menu-bg: var(--ts-color-bg-elevated);\n --ts-menu-radius: var(--ts-shape-overlay);\n --ts-menu-shadow: var(--ts-shadow-lg);\n}\n\n/* ---- Trigger ---- */\n.menu__trigger {\n display: inline-flex;\n}\n\n/* ---- Panel ---- */\n.menu__panel {\n position: absolute;\n z-index: var(--ts-z-tooltip);\n display: none;\n flex-direction: column;\n min-inline-size: 10rem;\n padding-block: var(--ts-spacing-1);\n background-color: var(--ts-menu-bg);\n border-radius: var(--ts-menu-radius);\n box-shadow: var(--ts-menu-shadow);\n border: 1px solid var(--ts-color-border-default);\n overflow-y: auto;\n max-block-size: 20rem;\n animation: ts-menu-fade-in 150ms ease-out;\n}\n\n.menu__panel--open {\n display: flex;\n}\n\n/* ---- Placement ---- */\n.menu__panel--bottom-start {\n inset-block-start: 100%;\n inset-inline-start: 0;\n margin-block-start: var(--ts-spacing-1);\n}\n\n.menu__panel--bottom-end {\n inset-block-start: 100%;\n inset-inline-end: 0;\n margin-block-start: var(--ts-spacing-1);\n}\n\n.menu__panel--top-start {\n inset-block-end: 100%;\n inset-inline-start: 0;\n margin-block-end: var(--ts-spacing-1);\n}\n\n.menu__panel--top-end {\n inset-block-end: 100%;\n inset-inline-end: 0;\n margin-block-end: var(--ts-spacing-1);\n}\n\n/* ---- Animation ---- */\n@keyframes ts-menu-fade-in {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n","import { Component, Prop, State, Event, h, Host, Element, Watch, Listen } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId } from '../../utils/aria';\n\nexport type TsMenuPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';\n\nexport type TsMenuTrigger = 'click' | 'hover';\n\n/**\n * @slot trigger - The element that opens the menu (e.g., a button).\n * @slot - Default slot for ts-menu-item children.\n *\n * @part panel - The dropdown panel container.\n */\n@Component({\n tag: 'ts-menu',\n styleUrl: 'menu.css',\n shadow: true,\n})\nexport class TsMenu {\n @Element() hostEl!: HTMLElement;\n\n private menuId = generateId('ts-menu');\n private triggerEl?: HTMLElement;\n\n /** Whether the menu dropdown is open. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** How the menu is triggered. */\n @Prop({ reflect: true }) trigger: TsMenuTrigger = 'click';\n\n /** Placement of the dropdown relative to the trigger. */\n @Prop({ reflect: true }) placement: TsMenuPlacement = 'bottom-start';\n\n /** Emitted when the menu opens. */\n @Event({ eventName: 'tsOpen' }) tsOpen!: EventEmitter<void>;\n\n /** Emitted when the menu closes. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n /** Tracks the currently focused item index for keyboard navigation. */\n @State() focusedIndex = -1;\n\n @Watch('open')\n handleOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.tsOpen.emit();\n requestAnimationFrame(() => {\n this.focusFirstItem();\n });\n } else {\n this.focusedIndex = -1;\n this.tsClose.emit();\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent): void {\n if (this.open && !this.hostEl.contains(event.target as Node)) {\n this.open = false;\n }\n }\n\n @Listen('tsSelect')\n handleItemSelect(): void {\n this.open = false;\n this.triggerEl?.focus();\n }\n\n @Listen('keydown')\n handleKeydown(event: KeyboardEvent): void {\n if (!this.open) return;\n\n const items = this.getMenuItems();\n if (items.length === 0) return;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n this.focusedIndex = (this.focusedIndex + 1) % items.length;\n this.focusItem(items[this.focusedIndex]);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n this.focusedIndex = this.focusedIndex <= 0 ? items.length - 1 : this.focusedIndex - 1;\n this.focusItem(items[this.focusedIndex]);\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.focusedIndex = 0;\n this.focusItem(items[0]);\n break;\n }\n case 'End': {\n event.preventDefault();\n this.focusedIndex = items.length - 1;\n this.focusItem(items[this.focusedIndex]);\n break;\n }\n case 'Escape': {\n event.preventDefault();\n this.open = false;\n this.triggerEl?.focus();\n break;\n }\n case 'Tab': {\n this.open = false;\n break;\n }\n }\n }\n\n private getMenuItems(): HTMLElement[] {\n return Array.from(this.hostEl.querySelectorAll<HTMLElement>('ts-menu-item:not([disabled])'));\n }\n\n private focusItem(el: HTMLElement): void {\n const item = el as HTMLElement & { setFocus?: () => Promise<void> };\n if (typeof item.setFocus === 'function') {\n item.setFocus();\n } else {\n el.focus();\n }\n }\n\n private focusFirstItem(): void {\n const items = this.getMenuItems();\n if (items.length > 0) {\n this.focusedIndex = 0;\n this.focusItem(items[0]);\n }\n }\n\n private handleTriggerClick = (): void => {\n if (this.trigger === 'click') {\n this.open = !this.open;\n }\n };\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.open = true;\n }\n };\n\n private handleMouseEnter = (): void => {\n if (this.trigger === 'hover') {\n this.open = true;\n }\n };\n\n private handleMouseLeave = (): void => {\n if (this.trigger === 'hover') {\n this.open = false;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-menu': true,\n 'ts-menu--open': this.open,\n }}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div\n class=\"menu__trigger\"\n ref={(el) => (this.triggerEl = el)}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeydown}\n aria-haspopup=\"true\"\n aria-expanded={this.open ? 'true' : 'false'}\n aria-controls={this.menuId}\n >\n <slot name=\"trigger\" />\n </div>\n\n <div\n class={{\n 'menu__panel': true,\n 'menu__panel--open': this.open,\n [`menu__panel--${this.placement}`]: true,\n }}\n part=\"panel\"\n id={this.menuId}\n role=\"menu\"\n aria-hidden={!this.open ? 'true' : undefined}\n >\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-modal.cjs.entry.js","mappings":"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","names":["generateId","trapFocus","h","Host"],"sources":["src/components/modal/modal.css?tag=ts-modal&encapsulation=shadow","src/components/modal/modal.tsx"],"sourcesContent":["/* ==========================================================================\n ts-modal — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-modal-bg Dialog background\n --ts-modal-overlay-bg Overlay background\n --ts-modal-radius Dialog border radius\n --ts-modal-shadow Dialog box-shadow\n ========================================================================== */\n\n:host {\n font-family: var(--ts-font-family-base);\n\n --ts-modal-bg: var(--ts-color-bg-elevated);\n --ts-modal-overlay-bg: var(--ts-color-bg-overlay);\n --ts-modal-radius: var(--ts-shape-overlay);\n --ts-modal-shadow: var(--ts-shadow-xl);\n}\n\n/* ---- Overlay ---- */\n.modal__overlay {\n position: fixed;\n inset: 0;\n z-index: var(--ts-z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--ts-spacing-4);\n background-color: var(--ts-modal-overlay-bg);\n animation: ts-fade-in 240ms cubic-bezier(0.25, 0.1, 0.25, 1);\n}\n\n/* ---- Dialog ---- */\n.modal__dialog {\n position: relative;\n background-color: var(--ts-modal-bg);\n border-radius: var(--ts-modal-radius);\n box-shadow: var(--ts-modal-shadow);\n max-height: calc(100vh - var(--ts-spacing-16));\n overflow-y: auto;\n animation: ts-scale-in 280ms cubic-bezier(0.16, 1, 0.3, 1);\n outline: none;\n}\n\n/* ---- Sizes ---- */\n.modal__dialog--xs { width: 100%; max-width: 320px; }\n.modal__dialog--sm { width: 100%; max-width: 440px; }\n.modal__dialog--md { width: 100%; max-width: 560px; }\n.modal__dialog--lg { width: 100%; max-width: 720px; }\n.modal__dialog--xl { width: 100%; max-width: 960px; }\n\n/* ---- Close Button ---- */\n.modal__close {\n position: absolute;\n top: var(--ts-spacing-3);\n inset-inline-end: var(--ts-spacing-3);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: var(--ts-radius-md);\n background: transparent;\n color: var(--ts-color-text-tertiary);\n font-size: var(--ts-font-size-md);\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n z-index: 1;\n padding: 0;\n line-height: 1;\n}\n\n.modal__close:hover {\n background-color: var(--ts-color-bg-hover);\n color: var(--ts-color-text-secondary);\n}\n\n.modal__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Sections ---- */\n.modal__header {\n padding: var(--ts-spacing-5) var(--ts-spacing-6) var(--ts-spacing-3);\n font-size: var(--ts-font-size-lg);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n}\n\n.modal__header:empty {\n display: none;\n}\n\n.modal__body {\n padding: var(--ts-spacing-3) var(--ts-spacing-6);\n font-size: var(--ts-font-size-md);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n.modal__footer {\n padding: var(--ts-spacing-3) var(--ts-spacing-6) var(--ts-spacing-5);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--ts-spacing-2);\n}\n\n.modal__footer:empty {\n display: none;\n}\n\n/* ---- Animations ---- */\n@keyframes ts-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes ts-scale-in {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(8px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n h,\n Host,\n Element,\n Method,\n Watch,\n} from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize } from '../../types';\nimport { generateId, trapFocus } from '../../utils/aria';\n\n/**\n * @slot - Default slot for modal body content.\n * @slot header - Modal header content.\n * @slot footer - Modal footer content (e.g., action buttons).\n *\n * @part overlay - The backdrop overlay.\n * @part dialog - The dialog container.\n * @part header - The header wrapper.\n * @part body - The body wrapper.\n * @part footer - The footer wrapper.\n * @part close - The close button.\n */\n@Component({\n tag: 'ts-modal',\n styleUrl: 'modal.css',\n shadow: true,\n})\nexport class TsModal {\n @Element() hostEl!: HTMLElement;\n\n private dialogEl?: HTMLElement;\n private removeFocusTrap?: () => void;\n private previouslyFocused?: HTMLElement;\n private modalId = generateId('ts-modal');\n\n /** Whether the modal is open. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The modal's width size preset. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Label for accessibility (used as aria-label). */\n @Prop() label?: string;\n\n /** Whether clicking the overlay closes the modal. */\n @Prop() closeOnOverlay = true;\n\n /** Whether pressing Escape closes the modal. */\n @Prop() closeOnEscape = true;\n\n /** Whether to show the close button. */\n @Prop() showClose = true;\n\n /** Emitted when the modal opens. */\n @Event({ eventName: 'tsOpen' }) tsOpen!: EventEmitter<void>;\n\n /** Emitted when the modal closes. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n /** Internal animation state. */\n @State() isAnimating = false;\n\n @Watch('open')\n handleOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.openModal();\n } else {\n this.closeModal();\n }\n }\n\n /** Programmatically open the modal. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /** Programmatically close the modal. */\n @Method()\n async close(): Promise<void> {\n this.open = false;\n }\n\n private openModal(): void {\n this.previouslyFocused = document.activeElement as HTMLElement;\n this.isAnimating = true;\n this.tsOpen.emit();\n\n // Prevent body scroll\n document.body.style.overflow = 'hidden';\n\n requestAnimationFrame(() => {\n if (this.dialogEl) {\n this.removeFocusTrap = trapFocus(this.dialogEl);\n // Focus the dialog itself\n this.dialogEl.focus();\n }\n });\n }\n\n private closeModal(): void {\n this.isAnimating = false;\n this.tsClose.emit();\n\n // Restore body scroll\n document.body.style.overflow = '';\n\n // Clean up focus trap\n this.removeFocusTrap?.();\n\n // Restore focus\n this.previouslyFocused?.focus();\n }\n\n disconnectedCallback(): void {\n this.removeFocusTrap?.();\n document.body.style.overflow = '';\n }\n\n private handleOverlayClick = (): void => {\n if (this.closeOnOverlay) {\n this.close();\n }\n };\n\n private handleDialogClick = (event: MouseEvent): void => {\n // Prevent overlay click from firing when clicking inside the dialog\n event.stopPropagation();\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.closeOnEscape) {\n event.stopPropagation();\n this.close();\n }\n };\n\n private handleCloseClick = (): void => {\n this.close();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n if (!this.open) return null;\n\n return (\n <Host\n class={{\n 'ts-modal': true,\n 'ts-modal--open': this.open,\n }}\n onKeyDown={this.handleKeydown}\n >\n <div class=\"modal__overlay\" part=\"overlay\" onClick={this.handleOverlayClick}>\n <div\n ref={(el) => (this.dialogEl = el)}\n class={{\n 'modal__dialog': true,\n [`modal__dialog--${this.size}`]: true,\n }}\n part=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={this.label}\n aria-labelledby={!this.label ? `${this.modalId}-header` : undefined}\n tabindex={-1}\n onClick={this.handleDialogClick}\n >\n {this.showClose && (\n <button\n class=\"modal__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Close modal\"\n onClick={this.handleCloseClick}\n >\n ✕\n </button>\n )}\n\n <div class=\"modal__header\" part=\"header\" id={`${this.modalId}-header`}>\n <slot name=\"header\" />\n </div>\n\n <div class=\"modal__body\" part=\"body\">\n <slot />\n </div>\n\n <div class=\"modal__footer\" part=\"footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-nav-item.cjs.entry.js","mappings":";;;;AAAA,MAAM,UAAU,GAAG,MAAM,CAAC,ouCAAouC,CAAC;;MCgBlvC,SAAS,GAAA,MAAA;;;;;;AAEZ,IAAA,IAAI;;IAGa,MAAM,GAAG,KAAK;;IAGd,QAAQ,GAAG,KAAK;;AAGjC,IAAA,IAAI;;AAGsB,IAAA,QAAQ;AAElC,IAAA,WAAW,GAAG,CAAC,KAAiB,KAAU;AAChD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB;;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACtB,KAAC;;IAGD,MAAM,GAAA;AACJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;AACjB,cAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI;AAC/C,cAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;QAExD,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,aAAa,EAAE,IAAI;gBACnB,qBAAqB,EAAE,IAAI,CAAC,MAAM;gBAClC,uBAAuB,EAAE,IAAI,CAAC,QAAQ;AACvC,aAAA,EAAA,EAEDD,OAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAI,KAAK,EAAC,mBAAmB,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,UAAU,EAAA,EACvDA,OAAA,CAAC,GAAG,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,GACE,KAAK,EACT,KAAK,EAAC,gBAAgB,EACtB,IAAI,EAAC,MAAM,kBACG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,EAAA,eAAA,EAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS,EACjD,OAAO,EAAE,IAAI,CAAC,WAAW,EAAA,EAExB,IAAI,CAAC,IAAI,KACRA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,EAAA,EACzDA,OAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,IAAI,EAAA,CAAG,CACjC,CACR,EACDA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,iBAAiB,EAAC,IAAI,EAAC,OAAO,EAAA,EACxCA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACH,CACH,CACH,CACA;;;;;;;","names":["h","Host"],"sources":["src/components/nav/nav-item.css?tag=ts-nav-item&encapsulation=shadow","src/components/nav/nav-item.tsx"],"sourcesContent":["/* ==========================================================================\n ts-nav-item — Shadow DOM Scoped Styles\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n}\n\n.nav-item__wrapper {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.nav-item__link {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n border: none;\n border-radius: var(--ts-radius-md);\n background: transparent;\n color: var(--ts-color-text-secondary);\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n text-decoration: none;\n cursor: pointer;\n width: 100%;\n text-align: start;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n}\n\n.nav-item__link:hover:not([disabled]):not([aria-disabled=\"true\"]) {\n background-color: var(--ts-color-bg-hover);\n color: var(--ts-color-text-primary);\n}\n\n.nav-item__link:focus-visible {\n box-shadow: var(--ts-focus-ring);\n outline: none;\n}\n\n/* ---- Active state ---- */\n:host([active]) .nav-item__link {\n background-color: var(--ts-color-interactive-primary-subtle, rgba(59, 130, 246, 0.1));\n color: var(--ts-color-interactive-primary);\n font-weight: var(--ts-font-weight-semi);\n}\n\n/* ---- Disabled state ---- */\n:host([disabled]) .nav-item__link {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Icon ---- */\n.nav-item__icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* ---- Label ---- */\n.nav-item__label {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n}\n","import { Component, Prop, Event, h, Host } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for label text.\n *\n * @part item - The list item wrapper.\n * @part link - The anchor or button element.\n * @part icon - The icon wrapper.\n * @part label - The label wrapper.\n */\n@Component({\n tag: 'ts-nav-item',\n styleUrl: 'nav-item.css',\n shadow: true,\n})\nexport class TsNavItem {\n /** The URL to navigate to. */\n @Prop() href?: string;\n\n /** Whether this item is currently active. */\n @Prop({ reflect: true }) active = false;\n\n /** Whether this item is disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Lucide icon name to display. */\n @Prop() icon?: string;\n\n /** Emitted when the nav item is selected. */\n @Event({ eventName: 'tsSelect' }) tsSelect!: EventEmitter<void>;\n\n private handleClick = (event: MouseEvent): void => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.tsSelect.emit();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const Tag = this.href ? 'a' : 'button';\n const attrs = this.href\n ? { href: this.disabled ? undefined : this.href }\n : { type: 'button' as const, disabled: this.disabled };\n\n return (\n <Host\n class={{\n 'ts-nav-item': true,\n 'ts-nav-item--active': this.active,\n 'ts-nav-item--disabled': this.disabled,\n }}\n >\n <li class=\"nav-item__wrapper\" part=\"item\" role=\"listitem\">\n <Tag\n {...attrs}\n class=\"nav-item__link\"\n part=\"link\"\n aria-current={this.active ? 'page' : undefined}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleClick}\n >\n {this.icon && (\n <span class=\"nav-item__icon\" part=\"icon\" aria-hidden=\"true\">\n <ts-icon name={this.icon} size=\"sm\" />\n </span>\n )}\n <span class=\"nav-item__label\" part=\"label\">\n <slot />\n </span>\n </Tag>\n </li>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-nav.cjs.entry.js","mappings":";;;;AAAA,MAAM,MAAM,GAAG,MAAM,CAAC,umBAAumB,CAAC;;MCajnB,KAAK,GAAA,MAAA;;;;;IAES,OAAO,GAA6B,SAAS;;IAG7C,SAAS,GAAG,KAAK;;IAG1C,MAAM,GAAA;QACJ,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,CAAC,WAAW,IAAI,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI;gBACjC,mBAAmB,EAAE,IAAI,CAAC,SAAS;aACpC,EAAA,EAEDD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,KAAK,gBAAY,YAAY,EAAA,EACzDA,OAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAI,KAAK,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAA,EAC3CA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACL,CACD,CACD;;;;;;;","names":["h","Host"],"sources":["src/components/nav/nav.css?tag=ts-nav&encapsulation=shadow","src/components/nav/nav.tsx"],"sourcesContent":["/* ==========================================================================\n ts-nav — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-nav-bg Navigation background\n --ts-nav-active-bg Active item background\n --ts-nav-active-color Active item text color\n --ts-nav-width Sidebar width\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-nav-bg: transparent;\n --ts-nav-active-bg: var(--ts-color-interactive-primary-subtle);\n --ts-nav-active-color: var(--ts-color-interactive-primary);\n --ts-nav-width: 240px;\n}\n\n.nav__native {\n background-color: var(--ts-nav-bg);\n}\n\n.nav__list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n\n/* ---- Sidebar variant ---- */\n:host([variant=\"sidebar\"]) .nav__list {\n flex-direction: column;\n gap: var(--ts-spacing-1);\n inline-size: var(--ts-nav-width);\n}\n\n:host([variant=\"sidebar\"][collapsed]) .nav__list {\n inline-size: auto;\n}\n\n/* ---- Horizontal variant ---- */\n:host([variant=\"horizontal\"]) .nav__list {\n flex-direction: row;\n gap: var(--ts-spacing-1);\n align-items: center;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-nav-item children.\n *\n * @part nav - The native nav element.\n * @part list - The list container.\n */\n@Component({\n tag: 'ts-nav',\n styleUrl: 'nav.css',\n shadow: true,\n})\nexport class TsNav {\n /** The navigation layout variant. */\n @Prop({ reflect: true }) variant: 'sidebar' | 'horizontal' = 'sidebar';\n\n /** Whether the sidebar nav is collapsed (icons only). */\n @Prop({ reflect: true }) collapsed = false;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-nav': true,\n [`ts-nav--${this.variant}`]: true,\n 'ts-nav--collapsed': this.collapsed,\n }}\n >\n <nav class=\"nav__native\" part=\"nav\" aria-label=\"Navigation\">\n <ul class=\"nav__list\" part=\"list\" role=\"list\">\n <slot />\n </ul>\n </nav>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-pagination.cjs.entry.js","mappings":"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","names":["h","Host","index"],"sources":["src/components/pagination/pagination.css?tag=ts-pagination&encapsulation=shadow","src/components/pagination/pagination.tsx"],"sourcesContent":["/* ==========================================================================\n ts-pagination — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-pagination-button-size Button dimensions\n --ts-pagination-active-bg Active page background\n --ts-pagination-active-color Active page text color\n ========================================================================== */\n\n:host {\n display: block;\n\n --ts-pagination-button-size: 2.25rem;\n --ts-pagination-active-bg: var(--ts-color-interactive-primary);\n --ts-pagination-active-color: var(--ts-color-text-on-primary);\n}\n\n.pagination__nav {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n}\n\n/* ---- Buttons ---- */\n.pagination__button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-inline-size: var(--ts-pagination-button-size);\n block-size: var(--ts-pagination-button-size);\n padding-inline: var(--ts-spacing-2);\n border: 1px solid var(--ts-color-border-default);\n border-radius: var(--ts-radius-md);\n background: transparent;\n color: var(--ts-color-text-primary);\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n border-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n outline: none;\n}\n\n.pagination__button:hover:not(:disabled):not(.pagination__button--active) {\n background-color: var(--ts-color-bg-subtle);\n border-color: var(--ts-color-border-strong);\n}\n\n.pagination__button:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n.pagination__button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Active page ---- */\n.pagination__button--active {\n background-color: var(--ts-pagination-active-bg);\n border-color: var(--ts-pagination-active-bg);\n color: var(--ts-pagination-active-color);\n font-weight: var(--ts-font-weight-semi);\n}\n\n/* ---- Prev/Next arrows ---- */\n.pagination__prev svg,\n.pagination__next svg {\n inline-size: 1em;\n block-size: 1em;\n}\n\n/* ---- Ellipsis ---- */\n.pagination__ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-inline-size: var(--ts-pagination-button-size);\n block-size: var(--ts-pagination-button-size);\n color: var(--ts-color-text-tertiary);\n font-size: var(--ts-font-size-sm);\n user-select: none;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n --ts-pagination-button-size: 1.75rem;\n}\n\n:host([size=\"sm\"]) .pagination__button {\n font-size: var(--ts-font-size-xs);\n}\n\n:host([size=\"lg\"]) {\n --ts-pagination-button-size: 2.75rem;\n}\n\n:host([size=\"lg\"]) .pagination__button {\n font-size: var(--ts-font-size-md);\n}\n","import { Component, Prop, Event, h, Host } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @part nav - The nav element.\n * @part button - Each page button.\n * @part prev - The previous button.\n * @part next - The next button.\n */\n@Component({\n tag: 'ts-pagination',\n styleUrl: 'pagination.css',\n shadow: true,\n})\nexport class TsPagination {\n /** Total number of items. */\n @Prop() total!: number;\n\n /** Number of items per page. */\n @Prop() pageSize = 10;\n\n /** The current active page (1-based). */\n @Prop({ mutable: true, reflect: true }) currentPage = 1;\n\n /** Number of sibling pages shown around the current page. */\n @Prop() siblingCount = 1;\n\n /** The size of the pagination buttons. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Emitted when the page changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ page: number }>;\n\n private get totalPages(): number {\n return Math.max(1, Math.ceil(this.total / this.pageSize));\n }\n\n private getPageRange(): (number | 'ellipsis')[] {\n const total = this.totalPages;\n const current = this.currentPage;\n const siblings = this.siblingCount;\n\n const range: (number | 'ellipsis')[] = [];\n\n const leftSibling = Math.max(current - siblings, 2);\n const rightSibling = Math.min(current + siblings, total - 1);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < total - 1;\n\n // Always show first page\n range.push(1);\n\n if (showLeftEllipsis) {\n range.push('ellipsis');\n } else {\n for (let i = 2; i < leftSibling; i++) {\n range.push(i);\n }\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) {\n range.push(i);\n }\n\n if (showRightEllipsis) {\n range.push('ellipsis');\n } else {\n for (let i = rightSibling + 1; i < total; i++) {\n range.push(i);\n }\n }\n\n // Always show last page (if > 1)\n if (total > 1) {\n range.push(total);\n }\n\n return range;\n }\n\n private handlePageClick = (page: number): void => {\n if (page < 1 || page > this.totalPages || page === this.currentPage) return;\n this.currentPage = page;\n this.tsChange.emit({ page });\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const pages = this.getPageRange();\n const isFirstPage = this.currentPage <= 1;\n const isLastPage = this.currentPage >= this.totalPages;\n\n return (\n <Host\n class={{\n 'ts-pagination': true,\n [`ts-pagination--${this.size}`]: true,\n }}\n >\n <nav part=\"nav\" aria-label=\"Pagination\" class=\"pagination__nav\">\n <button\n class=\"pagination__button pagination__prev\"\n part=\"prev\"\n disabled={isFirstPage}\n aria-label=\"Previous page\"\n onClick={() => this.handlePageClick(this.currentPage - 1)}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n\n {pages.map((page, index) =>\n page === 'ellipsis' ? (\n <span class=\"pagination__ellipsis\" key={`ellipsis-${index}`} aria-hidden=\"true\">\n ...\n </span>\n ) : (\n <button\n class={{\n pagination__button: true,\n 'pagination__button--active': page === this.currentPage,\n }}\n part=\"button\"\n aria-current={page === this.currentPage ? 'page' : undefined}\n aria-label={`Page ${page}`}\n onClick={() => this.handlePageClick(page)}\n key={page}\n >\n {page}\n </button>\n ),\n )}\n\n <button\n class=\"pagination__button pagination__next\"\n part=\"next\"\n disabled={isLastPage}\n aria-label=\"Next page\"\n onClick={() => this.handlePageClick(this.currentPage + 1)}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </nav>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-popover.cjs.entry.js","mappings":"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","names":["generateId","h","Host"],"sources":["src/components/popover/popover.css?tag=ts-popover&encapsulation=shadow","src/components/popover/popover.tsx"],"sourcesContent":["/* ==========================================================================\n ts-popover — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-popover-bg Background color\n --ts-popover-radius Border radius\n --ts-popover-shadow Box shadow\n --ts-popover-max-width Max width\n ========================================================================== */\n\n:host {\n display: inline-block;\n position: relative;\n font-family: var(--ts-font-family-base);\n\n --ts-popover-bg: var(--ts-color-bg-elevated);\n --ts-popover-radius: var(--ts-radius-lg);\n --ts-popover-shadow: var(--ts-shadow-lg);\n --ts-popover-max-width: 320px;\n}\n\n.popover__trigger {\n display: inline-block;\n cursor: pointer;\n}\n\n/* ---- Panel ---- */\n.popover__panel {\n position: absolute;\n z-index: var(--ts-z-popover, 1000);\n padding: var(--ts-spacing-4);\n background-color: var(--ts-popover-bg);\n border-radius: var(--ts-popover-radius);\n box-shadow: var(--ts-popover-shadow);\n max-inline-size: var(--ts-popover-max-width);\n border: 1px solid var(--ts-color-border-subtle);\n font-size: var(--ts-font-size-sm);\n line-height: var(--ts-line-height-normal);\n opacity: 0;\n transform: scale(0.95);\n pointer-events: none;\n transition:\n opacity var(--ts-transition-fast),\n transform var(--ts-transition-fast);\n}\n\n.popover__panel--visible {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* ---- Placements ---- */\n.popover__panel--top {\n bottom: calc(100% + 10px);\n left: 50%;\n margin-left: -50%;\n}\n.popover__panel--top-start {\n bottom: calc(100% + 10px);\n inset-inline-start: 0;\n}\n.popover__panel--top-end {\n bottom: calc(100% + 10px);\n inset-inline-end: 0;\n}\n\n.popover__panel--bottom {\n top: calc(100% + 10px);\n left: 50%;\n margin-left: -50%;\n}\n.popover__panel--bottom-start {\n top: calc(100% + 10px);\n inset-inline-start: 0;\n}\n.popover__panel--bottom-end {\n top: calc(100% + 10px);\n inset-inline-end: 0;\n}\n\n.popover__panel--left {\n inset-inline-end: calc(100% + 10px);\n top: 50%;\n transform: translateY(-50%) scale(0.95);\n}\n.popover__panel--left.popover__panel--visible {\n transform: translateY(-50%) scale(1);\n}\n\n.popover__panel--right {\n inset-inline-start: calc(100% + 10px);\n top: 50%;\n transform: translateY(-50%) scale(0.95);\n}\n.popover__panel--right.popover__panel--visible {\n transform: translateY(-50%) scale(1);\n}\n\n/* ---- Arrow ---- */\n.popover__arrow {\n position: absolute;\n inline-size: 10px;\n block-size: 10px;\n background: var(--ts-popover-bg);\n border: 1px solid var(--ts-color-border-subtle);\n transform: rotate(45deg);\n}\n\n.popover__panel--top .popover__arrow,\n.popover__panel--top-start .popover__arrow,\n.popover__panel--top-end .popover__arrow {\n bottom: -6px;\n left: 50%;\n margin-left: -5px;\n border-top: none;\n border-left: none;\n}\n\n.popover__panel--bottom .popover__arrow,\n.popover__panel--bottom-start .popover__arrow,\n.popover__panel--bottom-end .popover__arrow {\n top: -6px;\n left: 50%;\n margin-left: -5px;\n border-bottom: none;\n border-right: none;\n}\n\n.popover__panel--left .popover__arrow {\n inset-inline-end: -6px;\n top: 50%;\n margin-top: -5px;\n border-bottom: none;\n border-left: none;\n}\n\n.popover__panel--right .popover__arrow {\n inset-inline-start: -6px;\n top: 50%;\n margin-top: -5px;\n border-top: none;\n border-right: none;\n}\n\n/* ---- Content ---- */\n.popover__content {\n position: relative;\n z-index: 1;\n}\n","import { Component, Prop, Event, State, h, Host, Element, Watch, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId } from '../../utils/aria';\n\ntype TsPopoverPlacement = 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';\n\n/**\n * @slot trigger - The element that triggers the popover.\n * @slot - Default slot for popover content.\n *\n * @part base - The popover container.\n * @part arrow - The popover arrow.\n * @part trigger - The trigger wrapper.\n */\n@Component({\n tag: 'ts-popover',\n styleUrl: 'popover.css',\n shadow: true,\n})\nexport class TsPopover {\n @Element() hostEl!: HTMLElement;\n\n private popoverId = generateId('ts-popover');\n private outsideClickHandler?: (event: MouseEvent) => void;\n private escapeHandler?: (event: KeyboardEvent) => void;\n\n /** Whether the popover is currently visible. */\n @Prop({ reflect: true, mutable: true }) open = false;\n\n /** Placement of the popover relative to the trigger. */\n @Prop({ reflect: true }) placement: TsPopoverPlacement = 'bottom';\n\n /** How the popover is triggered. */\n @Prop() trigger: 'click' | 'hover' | 'manual' = 'click';\n\n /** Whether the popover closes on outside click or Escape. */\n @Prop() dismissible = true;\n\n /** Emitted when the popover opens. */\n @Event({ eventName: 'tsOpen' }) tsOpen!: EventEmitter<void>;\n\n /** Emitted when the popover closes. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n @State() isVisible = false;\n\n @Watch('open')\n handleOpenChange(newValue: boolean): void {\n this.isVisible = newValue;\n if (newValue) {\n this.tsOpen.emit();\n this.addGlobalListeners();\n } else {\n this.tsClose.emit();\n this.removeGlobalListeners();\n }\n }\n\n connectedCallback(): void {\n if (this.open) {\n this.isVisible = true;\n this.addGlobalListeners();\n }\n }\n\n disconnectedCallback(): void {\n this.removeGlobalListeners();\n }\n\n /** Programmatically show the popover. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /** Programmatically hide the popover. */\n @Method()\n async hide(): Promise<void> {\n this.open = false;\n }\n\n private addGlobalListeners(): void {\n if (this.dismissible) {\n this.outsideClickHandler = (event: MouseEvent) => {\n const path = event.composedPath();\n if (!path.includes(this.hostEl)) {\n this.open = false;\n }\n };\n this.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.open = false;\n }\n };\n // Use setTimeout to avoid capturing the click that opened the popover\n setTimeout(() => {\n document.addEventListener('click', this.outsideClickHandler!);\n document.addEventListener('keydown', this.escapeHandler!);\n }, 0);\n }\n }\n\n private removeGlobalListeners(): void {\n if (this.outsideClickHandler) {\n document.removeEventListener('click', this.outsideClickHandler);\n this.outsideClickHandler = undefined;\n }\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = undefined;\n }\n }\n\n private handleTriggerClick = (): void => {\n if (this.trigger === 'click') {\n this.open = !this.open;\n }\n };\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n if (this.trigger === 'click' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.open = !this.open;\n }\n };\n\n private handleMouseEnter = (): void => {\n if (this.trigger === 'hover') {\n this.open = true;\n }\n };\n\n private handleMouseLeave = (): void => {\n if (this.trigger === 'hover') {\n this.open = false;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-popover': true,\n 'ts-popover--open': this.isVisible,\n [`ts-popover--${this.placement}`]: true,\n }}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <span\n class=\"popover__trigger\"\n part=\"trigger\"\n aria-expanded={this.isVisible ? 'true' : 'false'}\n aria-controls={this.popoverId}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeydown}\n >\n <slot name=\"trigger\" />\n </span>\n\n <div\n class={{\n 'popover__panel': true,\n [`popover__panel--${this.placement}`]: true,\n 'popover__panel--visible': this.isVisible,\n }}\n part=\"base\"\n id={this.popoverId}\n role=\"dialog\"\n aria-hidden={!this.isVisible ? 'true' : undefined}\n >\n <div class=\"popover__arrow\" part=\"arrow\" />\n <div class=\"popover__content\">\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-progress.cjs.entry.js","mappings":";;;;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,+1CAA+1C,CAAC;;MCe92C,UAAU,GAAA,MAAA;;;;;IAEb,KAAK,GAAG,CAAC;;IAGT,GAAG,GAAG,GAAG;;IAGQ,OAAO,GAAsB,SAAS;;IAGtC,IAAI,GAAW,IAAI;;IAGnB,aAAa,GAAG,KAAK;;AAGtC,IAAA,KAAK;;IAGY,SAAS,GAAG,KAAK;AAE1C,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;;;IAIlE,MAAM,GAAA;AACJ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU;QAE/B,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI;AACtC,gBAAA,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;gBACnC,4BAA4B,EAAE,IAAI,CAAC,aAAa;AACjD,aAAA,EAAA,EAEDD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,iBAAiB,EACvB,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,aAAa,EAAA,eAAA,EACH,IAAI,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,mBAC3C,CAAC,EAAA,eAAA,EACD,IAAI,CAAC,GAAG,EAAA,YAAA,EACX,IAAI,CAAC,KAAK,IAAI,SAAS,EAAA,EAEnCA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,gBAAgB,EACtB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,KAAK,EAAE,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG,EAAE,EAAA,CAChE,CACE,EACL,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,KACpCA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,iBAAiB,EAAC,IAAI,EAAC,OAAO,iBAAa,MAAM,EAAA,EAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MACf,CACR,CACI;;;;;;;","names":["h","Host"],"sources":["src/components/progress/progress.css?tag=ts-progress&encapsulation=shadow","src/components/progress/progress.tsx"],"sourcesContent":["/* ==========================================================================\n ts-progress — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-progress-track-bg Track background color\n --ts-progress-fill-bg Fill bar background color\n --ts-progress-radius Border radius\n --ts-progress-height Track height\n ========================================================================== */\n\n:host {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n\n --ts-progress-track-bg: var(--ts-color-neutral-200);\n --ts-progress-fill-bg: var(--ts-color-interactive-primary);\n --ts-progress-radius: var(--ts-radius-full);\n --ts-progress-height: 0.5rem;\n}\n\n/* ---- Track ---- */\n.progress__track {\n flex: 1;\n block-size: var(--ts-progress-height);\n background-color: var(--ts-progress-track-bg);\n border-radius: var(--ts-progress-radius);\n overflow: hidden;\n position: relative;\n}\n\n/* ---- Fill ---- */\n.progress__fill {\n block-size: 100%;\n background-color: var(--ts-progress-fill-bg);\n border-radius: var(--ts-progress-radius);\n transition: width var(--ts-transition-normal);\n}\n\n/* ---- Label ---- */\n.progress__label {\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-secondary);\n min-inline-size: 3ch;\n text-align: end;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n --ts-progress-height: 0.25rem;\n}\n\n:host([size=\"lg\"]) {\n --ts-progress-height: 0.75rem;\n}\n\n/* ---- Variants ---- */\n:host([variant=\"success\"]) {\n --ts-progress-fill-bg: var(--ts-color-success-600);\n}\n\n:host([variant=\"warning\"]) {\n --ts-progress-fill-bg: var(--ts-color-warning-600);\n}\n\n:host([variant=\"danger\"]) {\n --ts-progress-fill-bg: var(--ts-color-danger-500);\n}\n\n:host([variant=\"info\"]) {\n --ts-progress-fill-bg: var(--ts-color-info-500);\n}\n\n/* ---- Indeterminate animation ---- */\n:host([indeterminate]) .progress__fill {\n width: 40%;\n animation: ts-progress-slide 1.5s ease-in-out infinite;\n}\n\n@keyframes ts-progress-slide {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(350%);\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\ntype TsProgressVariant = 'primary' | 'success' | 'warning' | 'danger' | 'info';\n\n/**\n * @part track - The progress track.\n * @part fill - The progress fill bar.\n * @part label - The value label text.\n */\n@Component({\n tag: 'ts-progress',\n styleUrl: 'progress.css',\n shadow: true,\n})\nexport class TsProgress {\n /** Current progress value (0 to max). */\n @Prop() value = 0;\n\n /** Maximum value. */\n @Prop() max = 100;\n\n /** The color variant. */\n @Prop({ reflect: true }) variant: TsProgressVariant = 'primary';\n\n /** The size of the progress bar. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Whether the progress is indeterminate. */\n @Prop({ reflect: true }) indeterminate = false;\n\n /** Accessible label for the progress bar. */\n @Prop() label?: string;\n\n /** Whether to display the percentage value. */\n @Prop({ reflect: true }) showValue = false;\n\n private get percentage(): number {\n if (this.max <= 0) return 0;\n return Math.min(100, Math.max(0, (this.value / this.max) * 100));\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const percent = this.percentage;\n\n return (\n <Host\n class={{\n 'ts-progress': true,\n [`ts-progress--${this.variant}`]: true,\n [`ts-progress--${this.size}`]: true,\n 'ts-progress--indeterminate': this.indeterminate,\n }}\n >\n <div\n class=\"progress__track\"\n part=\"track\"\n role=\"progressbar\"\n aria-valuenow={this.indeterminate ? undefined : this.value}\n aria-valuemin={0}\n aria-valuemax={this.max}\n aria-label={this.label || undefined}\n >\n <div\n class=\"progress__fill\"\n part=\"fill\"\n style={this.indeterminate ? undefined : { width: `${percent}%` }}\n />\n </div>\n {this.showValue && !this.indeterminate && (\n <span class=\"progress__label\" part=\"label\" aria-hidden=\"true\">\n {Math.round(percent)}%\n </span>\n )}\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-radio.cjs.entry.js","mappings":";;;;;AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,sqDAAsqD,CAAC;;MCiBlrD,OAAO,GAAA,MAAA;;;;;;AAGV,IAAA,OAAO,GAAGA,eAAU,CAAC,UAAU,CAAC;;IAGA,OAAO,GAAG,KAAK;;IAG9B,QAAQ,GAAG,KAAK;;IAGjC,KAAK,GAAG,EAAE;;AAGV,IAAA,IAAI;;AAGJ,IAAA,KAAK;;IAGY,IAAI,GAAuB,IAAI;;AAGtB,IAAA,QAAQ;;AAI1C,IAAA,MAAM,MAAM,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;;IAI5D,WAAW,GAAG,MAAW;QAC/B,IAAI,CAAC,MAAM,EAAE;AACf,KAAC;AAEO,IAAA,aAAa,GAAG,CAAC,KAAoB,KAAU;AACrD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YACrB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,MAAM,EAAE;;AAEjB,KAAC;;IAGD,MAAM,GAAA;QACJ,QACEC,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,CAAC,aAAa,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;gBAChC,mBAAmB,EAAE,IAAI,CAAC,OAAO;gBACjC,oBAAoB,EAAE,IAAI,CAAC,QAAQ;AACpC,aAAA,EAAA,EAEDD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,aAAa,EACnB,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,OAAO,EAAA,cAAA,EACE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,EAAA,eAAA,EAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS,EACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,EAChC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,SAAS,EAAE,IAAI,CAAC,aAAa,EAAA,EAE7BA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,SAAS,EAAA,EACxCA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,YAAY,EAAA,CAAG,CACtB,EAENA,OAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,OAAO,EAAC,EAAE,EAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,MAAA,CAAQ,EAAA,EACjE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAGA,OAAA,CAAA,MAAA,EAAA,IAAA,CAAQ,CAC7B,CACJ,CACD;;;;;;;","names":["generateId","h","Host"],"sources":["src/components/radio/radio.css?tag=ts-radio&encapsulation=shadow","src/components/radio/radio.tsx"],"sourcesContent":["/* ==========================================================================\n ts-radio — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-radio-size Radio circle size\n --ts-radio-color Selected color\n --ts-radio-border-color Default border color\n ========================================================================== */\n\n:host {\n display: inline-block;\n font-family: var(--ts-font-family-base);\n\n --ts-radio-size: 1.25rem;\n --ts-radio-color: var(--ts-color-interactive-primary);\n --ts-radio-border-color: var(--ts-color-border-default);\n}\n\n/* ---- Base container ---- */\n.radio__base {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n cursor: pointer;\n outline: none;\n}\n\n.radio__base:focus-visible .radio__control {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Control circle ---- */\n.radio__control {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--ts-radio-size);\n height: var(--ts-radio-size);\n box-sizing: border-box;\n border: 2px solid var(--ts-radio-border-color);\n border-radius: 50%;\n background-color: var(--ts-color-bg-elevated);\n transition:\n background-color var(--ts-transition-fast),\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n flex-shrink: 0;\n}\n\n/* ---- Inner dot ---- */\n.radio__dot {\n width: 0;\n height: 0;\n border-radius: 50%;\n background-color: var(--ts-color-text-on-primary);\n transition:\n width var(--ts-transition-fast),\n height var(--ts-transition-fast);\n}\n\n/* ---- Checked state ---- */\n:host([checked]) .radio__control {\n background-color: var(--ts-radio-color);\n border-color: var(--ts-radio-color);\n}\n\n:host([checked]) .radio__dot {\n width: 40%;\n height: 40%;\n}\n\n/* ---- Hover ---- */\n.radio__base:hover:not([aria-disabled=\"true\"]) .radio__control {\n border-color: var(--ts-color-primary-500);\n}\n\n/* ---- Disabled state ---- */\n:host([disabled]) .radio__base {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n --ts-radio-size: 1rem;\n}\n\n:host([size=\"sm\"]) .radio__label {\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .radio__label {\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) {\n --ts-radio-size: 1.5rem;\n}\n\n:host([size=\"lg\"]) .radio__label {\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Label ---- */\n.radio__label {\n color: var(--ts-color-text-primary);\n line-height: var(--ts-line-height-normal);\n user-select: none;\n}\n","import { Component, Prop, Event, h, Host, Element, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsCheckboxChangeEventDetail } from '../../types';\nimport { generateId } from '../../utils/aria';\n\n/**\n * @slot - Default slot for the radio label.\n *\n * @part base - The radio container.\n * @part control - The visual radio circle.\n * @part label - The label wrapper.\n */\n@Component({\n tag: 'ts-radio',\n styleUrl: 'radio.css',\n shadow: true,\n})\nexport class TsRadio {\n @Element() hostEl!: HTMLElement;\n\n private inputId = generateId('ts-radio');\n\n /** Whether the radio is checked. */\n @Prop({ mutable: true, reflect: true }) checked = false;\n\n /** Renders the radio as disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** The value associated with this radio. */\n @Prop() value = '';\n\n /** Name attribute for form submission. */\n @Prop() name?: string;\n\n /** Label text. If omitted, use the default slot. */\n @Prop() label?: string;\n\n /** The radio size. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Emitted when the radio is selected. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<TsCheckboxChangeEventDetail>;\n\n /** Programmatically select the radio. */\n @Method()\n async select(): Promise<void> {\n if (!this.disabled && !this.checked) {\n this.checked = true;\n this.tsChange.emit({ checked: this.checked, value: this.value });\n }\n }\n\n private handleClick = (): void => {\n this.select();\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === ' ') {\n event.preventDefault();\n this.select();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-radio': true,\n [`ts-radio--${this.size}`]: true,\n 'ts-radio--checked': this.checked,\n 'ts-radio--disabled': this.disabled,\n }}\n >\n <div\n class=\"radio__base\"\n part=\"base\"\n role=\"radio\"\n aria-checked={this.checked ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : undefined}\n tabindex={this.disabled ? -1 : 0}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n >\n <div class=\"radio__control\" part=\"control\">\n <div class=\"radio__dot\" />\n </div>\n\n <label class=\"radio__label\" part=\"label\" id={`${this.inputId}-label`}>\n {this.label ? this.label : <slot />}\n </label>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-row.cjs.entry.js","mappings":";;;;AAAA,MAAM,MAAM,GAAG,MAAM,CAAC,qeAAqe,CAAC;;MCU/e,KAAK,GAAA,MAAA;;;;;IAES,GAAG,GAAW,GAAG;;IAGjB,KAAK,GAAwD,QAAQ;;IAGrE,OAAO,GAAiE,OAAO;;IAG/E,IAAI,GAAY,IAAI;;IAGpB,OAAO,GAAY,KAAK;;IAGD,OAAO,GAAiC,OAAO;;IAG/F,MAAM,GAAA;AACJ,QAAA,MAAM,QAAQ,GAA2B;AACvC,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,QAAQ,EAAE,UAAU;SACrB;AAED,QAAA,MAAM,UAAU,GAA2B;AACzC,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,cAAc;SACvB;QAED,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,GAAG,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG;gBACpC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ;gBAC5C,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY;gBACxD,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,QAAQ;AACxC,aAAA,EAAA,EAEDD,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACH;;;;;;;","names":["h","Host"],"sources":["src/components/row/row.css?tag=ts-row&encapsulation=shadow","src/components/row/row.tsx"],"sourcesContent":["/* ==========================================================================\n ts-row — Shadow DOM Scoped Styles\n\n A horizontal flex row layout primitive with wrap and responsive stacking.\n ========================================================================== */\n\n:host {\n display: flex;\n flex-direction: row;\n}\n\n:host([reverse]) {\n flex-direction: row-reverse;\n}\n\n/* ---- Responsive stacking ---- */\n@media (max-width: 639px) {\n :host([stack-at=\"sm\"]) {\n flex-direction: column;\n }\n :host([stack-at=\"sm\"][reverse]) {\n flex-direction: column-reverse;\n }\n}\n\n@media (max-width: 767px) {\n :host([stack-at=\"md\"]) {\n flex-direction: column;\n }\n :host([stack-at=\"md\"][reverse]) {\n flex-direction: column-reverse;\n }\n}\n\n@media (max-width: 1023px) {\n :host([stack-at=\"lg\"]) {\n flex-direction: column;\n }\n :host([stack-at=\"lg\"][reverse]) {\n flex-direction: column-reverse;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for row content.\n */\n@Component({\n tag: 'ts-row',\n styleUrl: 'row.css',\n shadow: true,\n})\nexport class TsRow {\n /** Spacing token number controlling the gap between items. */\n @Prop({ reflect: true }) gap: string = '2';\n\n /** Cross-axis alignment of items. */\n @Prop({ reflect: true }) align: 'start' | 'center' | 'end' | 'stretch' | 'baseline' = 'center';\n\n /** Main-axis alignment of items. */\n @Prop({ reflect: true }) justify: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly' = 'start';\n\n /** Whether items should wrap to the next line. */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /** Reverse the row direction. */\n @Prop({ reflect: true }) reverse: boolean = false;\n\n /** Breakpoint at which the row stacks vertically. */\n @Prop({ reflect: true, attribute: 'stack-at' }) stackAt: 'sm' | 'md' | 'lg' | 'never' = 'never';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const alignMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n };\n\n const justifyMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n };\n\n return (\n <Host\n style={{\n gap: `var(--ts-spacing-${this.gap})`,\n alignItems: alignMap[this.align] || 'center',\n justifyContent: justifyMap[this.justify] || 'flex-start',\n flexWrap: this.wrap ? 'wrap' : 'nowrap',\n }}\n >\n <slot />\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-select.cjs.entry.js","mappings":"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","names":["generateId","h","Host","index"],"sources":["src/components/select/select.css?tag=ts-select&encapsulation=shadow","src/components/select/select.tsx"],"sourcesContent":["/* ==========================================================================\n ts-select — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-select-bg Select background\n --ts-select-border-color Default border color\n --ts-select-radius Border radius\n --ts-select-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-select-bg: var(--ts-color-neutral-50);\n --ts-select-border-color: var(--ts-color-border-default);\n --ts-select-radius: var(--ts-radius-md);\n --ts-select-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.select__label {\n display: block;\n margin-block-end: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n.select__required {\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Container ---- */\n.select__container {\n position: relative;\n}\n\n/* ---- Trigger button ---- */\n.select__trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ts-spacing-2);\n width: 100%;\n border: 1px solid var(--ts-select-border-color);\n border-radius: var(--ts-select-radius);\n background-color: var(--ts-select-bg);\n font-family: inherit;\n color: var(--ts-color-text-primary);\n cursor: pointer;\n outline: none;\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n text-align: start;\n appearance: none;\n}\n\n.select__trigger:focus-visible {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-select-focus-ring);\n}\n\n.select__trigger--error {\n border-color: var(--ts-color-danger-500);\n}\n\n.select__trigger--error:focus-visible {\n box-shadow: 0 0 0 3px var(--ts-color-focus-ring-danger);\n}\n\n.select__trigger--disabled {\n background-color: var(--ts-color-bg-disabled);\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.select__trigger--open {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-select-focus-ring);\n}\n\n/* ---- Display text ---- */\n.select__display {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.select__display--placeholder {\n color: var(--ts-color-text-tertiary);\n}\n\n/* ---- Chevron ---- */\n.select__chevron {\n width: 1em;\n height: 1em;\n flex-shrink: 0;\n transition: transform var(--ts-transition-fast);\n color: var(--ts-color-text-tertiary);\n}\n\n:host(.ts-select--open) .select__chevron {\n transform: rotate(180deg);\n}\n\n/* ---- Dropdown ---- */\n.select__dropdown {\n position: absolute;\n inset-inline-start: 0;\n inset-inline-end: 0;\n top: calc(100% + var(--ts-spacing-1));\n z-index: 1000;\n background-color: var(--ts-color-bg-elevated);\n border: 1px solid var(--ts-color-border-default);\n border-radius: var(--ts-radius-md);\n box-shadow: var(--ts-shadow-lg);\n max-height: 15rem;\n overflow-y: auto;\n padding-block: var(--ts-spacing-1);\n}\n\n/* ---- Option ---- */\n.select__option {\n display: flex;\n align-items: center;\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n color: var(--ts-color-text-primary);\n font-size: inherit;\n}\n\n.select__option:hover:not(.select__option--disabled) {\n background-color: var(--ts-color-interactive-primary-subtle);\n}\n\n.select__option--focused {\n background-color: var(--ts-color-bg-subtle);\n}\n\n.select__option--selected {\n color: var(--ts-color-interactive-primary);\n font-weight: var(--ts-font-weight-medium);\n}\n\n.select__option--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .select__trigger {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n border-radius: var(--ts-radius-sm);\n}\n\n:host([size=\"md\"]) .select__trigger {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .select__trigger {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n:host([size=\"xl\"]) .select__trigger {\n padding: var(--ts-spacing-4) var(--ts-spacing-5);\n font-size: var(--ts-font-size-xl);\n border-radius: var(--ts-radius-lg);\n}\n\n/* ---- Hidden slot ---- */\n.select__hidden-slot {\n display: none;\n}\n\n/* ---- Help & Error Text ---- */\n.select__help,\n.select__error {\n margin-block-start: var(--ts-spacing-1);\n font-size: var(--ts-font-size-xs);\n line-height: var(--ts-line-height-normal);\n}\n\n.select__help {\n color: var(--ts-color-text-tertiary);\n}\n\n.select__error {\n color: var(--ts-color-danger-600);\n font-weight: var(--ts-font-weight-medium);\n}\n","import { Component, Prop, State, Event, Watch, h, Host, Element, Listen } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize, TsSelectChangeEventDetail } from '../../types';\nimport { generateId } from '../../utils/aria';\n\ninterface SelectOption {\n value: string;\n label: string;\n disabled: boolean;\n}\n\n/**\n * @slot - Default slot for `<option>` elements.\n *\n * @part base - The outer wrapper.\n * @part label - The label element.\n * @part trigger - The select trigger button.\n * @part dropdown - The dropdown panel.\n * @part option - An option in the dropdown list.\n * @part help-text - The help text wrapper.\n * @part error-text - The error message wrapper.\n */\n@Component({\n tag: 'ts-select',\n styleUrl: 'select.css',\n shadow: true,\n})\nexport class TsSelect {\n @Element() hostEl!: HTMLElement;\n\n private inputId = generateId('ts-select');\n private triggerEl?: HTMLElement;\n\n /** The current value. */\n @Prop({ mutable: true, reflect: true }) value = '';\n\n /** Placeholder text when no value is selected. */\n @Prop() placeholder?: string;\n\n /** Renders the select as disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** The select size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Label text displayed above the select. */\n @Prop() label?: string;\n\n /** Help text displayed below the select. */\n @Prop() helpText?: string;\n\n /** Renders the select in an error state. */\n @Prop({ reflect: true }) error = false;\n\n /** Error message displayed below the select. */\n @Prop() errorMessage?: string;\n\n /** Makes the select required. */\n @Prop({ reflect: true }) required = false;\n\n /** Name attribute for form submission. */\n @Prop() name?: string;\n\n /** Allow multiple selections. */\n @Prop({ reflect: true }) multiple = false;\n\n /** Whether the dropdown is open. */\n @State() isOpen = false;\n\n /** The index of the currently focused option. */\n @State() focusedIndex = -1;\n\n /** Parsed options from slotted <option> elements. */\n @State() options: SelectOption[] = [];\n\n /** Emitted when the value changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<TsSelectChangeEventDetail>;\n\n /** Emitted when the select gains focus. */\n @Event({ eventName: 'tsFocus' }) tsFocus!: EventEmitter<void>;\n\n /** Emitted when the select loses focus. */\n @Event({ eventName: 'tsBlur' }) tsBlur!: EventEmitter<void>;\n\n @Watch('value')\n handleValueChange(): void {\n // Value was changed externally; ensure UI is in sync\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent): void {\n if (this.isOpen && !this.hostEl.contains(event.target as Node)) {\n this.close();\n }\n }\n\n componentWillLoad(): void {\n this.parseOptions();\n }\n\n componentDidLoad(): void {\n // Observe slot changes to re-parse options\n const slot = this.hostEl.shadowRoot?.querySelector('.select__hidden-slot slot');\n slot?.addEventListener('slotchange', () => this.parseOptions());\n }\n\n private parseOptions(): void {\n const slottedOptions = this.hostEl.querySelectorAll('option');\n this.options = Array.from(slottedOptions).map((opt) => ({\n value: opt.value,\n label: opt.textContent?.trim() ?? opt.value,\n disabled: opt.disabled,\n }));\n }\n\n private open(): void {\n if (this.disabled) return;\n this.isOpen = true;\n this.focusedIndex = this.options.findIndex((o) => o.value === this.value);\n if (this.focusedIndex < 0) this.focusedIndex = 0;\n }\n\n private close(): void {\n this.isOpen = false;\n this.focusedIndex = -1;\n this.triggerEl?.focus();\n }\n\n private selectOption(option: SelectOption): void {\n if (option.disabled) return;\n this.value = option.value;\n this.tsChange.emit({ value: this.value });\n this.close();\n }\n\n private handleTriggerClick = (): void => {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen) {\n this.open();\n } else if (event.key === 'Enter' || event.key === ' ') {\n if (this.focusedIndex >= 0 && this.options[this.focusedIndex]) {\n this.selectOption(this.options[this.focusedIndex]);\n }\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen) {\n this.open();\n }\n break;\n case 'Escape':\n if (this.isOpen) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n };\n\n private handleDropdownKeydown = (event: KeyboardEvent): void => {\n const enabledOptions = this.options.filter((o) => !o.disabled);\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.focusedIndex >= 0 && this.options[this.focusedIndex] && !this.options[this.focusedIndex].disabled) {\n this.selectOption(this.options[this.focusedIndex]);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Home':\n event.preventDefault();\n this.focusedIndex = enabledOptions.length > 0 ? this.options.indexOf(enabledOptions[0]) : 0;\n break;\n case 'End':\n event.preventDefault();\n this.focusedIndex = enabledOptions.length > 0 ? this.options.indexOf(enabledOptions[enabledOptions.length - 1]) : this.options.length - 1;\n break;\n }\n };\n\n private moveFocus(direction: number): void {\n let next = this.focusedIndex + direction;\n while (next >= 0 && next < this.options.length && this.options[next].disabled) {\n next += direction;\n }\n if (next >= 0 && next < this.options.length) {\n this.focusedIndex = next;\n }\n }\n\n private handleFocus = (): void => {\n this.tsFocus.emit();\n };\n\n private handleBlur = (): void => {\n this.tsBlur.emit();\n };\n\n private getDisplayText(): string {\n const selected = this.options.find((o) => o.value === this.value);\n return selected?.label ?? '';\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasError = this.error && !!this.errorMessage;\n const labelId = `${this.inputId}-label`;\n const helpId = `${this.inputId}-help`;\n const errorId = `${this.inputId}-error`;\n const listboxId = `${this.inputId}-listbox`;\n const displayText = this.getDisplayText();\n\n return (\n <Host\n class={{\n 'ts-select': true,\n [`ts-select--${this.size}`]: true,\n 'ts-select--open': this.isOpen,\n 'ts-select--disabled': this.disabled,\n 'ts-select--error': this.error,\n }}\n >\n {this.label && (\n <label class=\"select__label\" part=\"label\" id={labelId}>\n {this.label}\n {this.required && <span class=\"select__required\" aria-hidden=\"true\"> *</span>}\n </label>\n )}\n\n <div class=\"select__container\">\n <button\n ref={(el) => (this.triggerEl = el)}\n class={{\n 'select__trigger': true,\n 'select__trigger--open': this.isOpen,\n 'select__trigger--error': this.error,\n 'select__trigger--disabled': this.disabled,\n }}\n part=\"trigger\"\n type=\"button\"\n role=\"combobox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-labelledby={this.label ? labelId : undefined}\n aria-invalid={this.error ? 'true' : undefined}\n aria-required={this.required ? 'true' : undefined}\n disabled={this.disabled}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeydown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n <span class={{ 'select__display': true, 'select__display--placeholder': !displayText }}>\n {displayText || this.placeholder || '\\u00A0'}\n </span>\n <svg class=\"select__chevron\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n {this.isOpen && (\n <div\n class=\"select__dropdown\"\n part=\"dropdown\"\n role=\"listbox\"\n id={listboxId}\n aria-labelledby={this.label ? labelId : undefined}\n onKeyDown={this.handleDropdownKeydown}\n >\n {this.options.map((option, index) => (\n <div\n class={{\n 'select__option': true,\n 'select__option--selected': option.value === this.value,\n 'select__option--focused': index === this.focusedIndex,\n 'select__option--disabled': option.disabled,\n }}\n part=\"option\"\n role=\"option\"\n aria-selected={option.value === this.value ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n onClick={() => this.selectOption(option)}\n >\n {option.label}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Hidden slot to capture <option> elements */}\n <div class=\"select__hidden-slot\">\n <slot />\n </div>\n\n {hasError && (\n <div class=\"select__error\" part=\"error-text\" id={errorId} role=\"alert\">\n {this.errorMessage}\n </div>\n )}\n\n {!hasError && this.helpText && (\n <div class=\"select__help\" part=\"help-text\" id={helpId}>\n {this.helpText}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-skeleton.cjs.entry.js","mappings":";;;;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,+0DAA+0D,CAAC;;MCW91D,UAAU,GAAA,MAAA;;;;;IAEI,OAAO,GAAwC,MAAM;;IAGtE,KAAK,GAAG,MAAM;;AAGd,IAAA,MAAM;;IAGN,KAAK,GAAG,CAAC;;IAGQ,SAAS,GAA8B,OAAO;;IAGvE,MAAM,GAAA;QACJ,MAAM,KAAK,GAA2B,EAAE;QACxC,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK;QAC3C,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM;AAE9C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;YAC3B,MAAM,YAAY,GAAG,EAAE;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;gBACrD,YAAY,CAAC,IAAI,CACfA,OAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,wBAAA,gBAAgB,EAAE,IAAI;AACtB,wBAAA,sBAAsB,EAAE,MAAM;AAC/B,qBAAA,EACD,IAAI,EAAC,MAAM,EAAA,CACX,CACH;;AAGH,YAAA,QACEA,OAAA,CAACC,UAAI,EAAA,EACH,KAAK,EAAE;AACL,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI;AACtC,oBAAA,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAA,CAAE,GAAG,IAAI;iBACzC,EACD,KAAK,EAAE,KAAK,EAAA,aAAA,EACA,MAAM,EAAA,EAElBD,OAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,EAAA,EACpC,YAAY,CACT,CACD;;AAIX,QAAA,QACEA,OAAA,CAACC,UAAI,EAAA,EACH,KAAK,EAAE;AACL,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI;AACtC,gBAAA,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAA,CAAE,GAAG,IAAI;aACzC,EACD,KAAK,EAAE,KAAK,EAAA,aAAA,EACA,MAAM,EAAA,EAElBD,OAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,EAAA,CAAG,CACrC;;;;;;;","names":["h","Host"],"sources":["src/components/skeleton/skeleton.css?tag=ts-skeleton&encapsulation=shadow","src/components/skeleton/skeleton.tsx"],"sourcesContent":["/* ==========================================================================\n ts-skeleton — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-skeleton-radius Border radius\n --ts-skeleton-height Default line height\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-skeleton-radius: var(--ts-radius-sm);\n --ts-skeleton-height: 1em;\n --ts-color-skeleton-base: var(--ts-color-neutral-200);\n --ts-color-skeleton-pulse: var(--ts-color-neutral-300);\n}\n\n.skeleton__base {\n display: flex;\n flex-direction: column;\n gap: var(--ts-spacing-2);\n width: 100%;\n height: 100%;\n}\n\n/* ---- Line (text variant) ---- */\n.skeleton__line {\n block-size: var(--ts-skeleton-height);\n inline-size: 100%;\n border-radius: var(--ts-skeleton-radius);\n background-color: var(--ts-color-skeleton-base);\n}\n\n.skeleton__line--last {\n inline-size: 75%;\n}\n\n/* ---- Circular variant ---- */\n:host([variant=\"circular\"]) .skeleton__base {\n border-radius: 50%;\n background-color: var(--ts-color-skeleton-base);\n aspect-ratio: 1;\n}\n\n/* ---- Rectangular variant ---- */\n:host([variant=\"rectangular\"]) .skeleton__base {\n border-radius: var(--ts-skeleton-radius);\n background-color: var(--ts-color-skeleton-base);\n min-block-size: var(--ts-skeleton-height);\n}\n\n/* ---- Pulse animation ---- */\n:host([animation=\"pulse\"]) .skeleton__line,\n:host([animation=\"pulse\"][variant=\"circular\"]) .skeleton__base,\n:host([animation=\"pulse\"][variant=\"rectangular\"]) .skeleton__base {\n animation: ts-skeleton-pulse 1.5s ease-in-out infinite;\n}\n\n@keyframes ts-skeleton-pulse {\n 0%, 100% { background-color: var(--ts-color-skeleton-base); }\n 50% { background-color: var(--ts-color-skeleton-pulse); }\n}\n\n/* ---- Wave animation ---- */\n:host([animation=\"wave\"]) .skeleton__line,\n:host([animation=\"wave\"][variant=\"circular\"]) .skeleton__base,\n:host([animation=\"wave\"][variant=\"rectangular\"]) .skeleton__base {\n background: linear-gradient(\n 90deg,\n var(--ts-color-skeleton-base) 25%,\n var(--ts-color-skeleton-pulse) 50%,\n var(--ts-color-skeleton-base) 75%\n );\n background-size: 200% 100%;\n animation: ts-skeleton-wave 1.5s ease-in-out infinite;\n}\n\n@keyframes ts-skeleton-wave {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n/* ---- No animation ---- */\n:host([animation=\"none\"]) .skeleton__line,\n:host([animation=\"none\"][variant=\"circular\"]) .skeleton__base,\n:host([animation=\"none\"][variant=\"rectangular\"]) .skeleton__base {\n animation: none;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @part base - The skeleton element container.\n * @part line - Individual skeleton line (text variant).\n */\n@Component({\n tag: 'ts-skeleton',\n styleUrl: 'skeleton.css',\n shadow: true,\n})\nexport class TsSkeleton {\n /** The skeleton shape variant. */\n @Prop({ reflect: true }) variant: 'text' | 'circular' | 'rectangular' = 'text';\n\n /** CSS width of the skeleton. */\n @Prop() width = '100%';\n\n /** CSS height of the skeleton. */\n @Prop() height?: string;\n\n /** Number of lines to render (text variant only). */\n @Prop() lines = 1;\n\n /** Animation style. */\n @Prop({ reflect: true }) animation: 'pulse' | 'wave' | 'none' = 'pulse';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const style: Record<string, string> = {};\n if (this.width) style['width'] = this.width;\n if (this.height) style['height'] = this.height;\n\n if (this.variant === 'text') {\n const lineElements = [];\n for (let i = 0; i < this.lines; i++) {\n const isLast = i === this.lines - 1 && this.lines > 1;\n lineElements.push(\n <div\n class={{\n 'skeleton__line': true,\n 'skeleton__line--last': isLast,\n }}\n part=\"line\"\n />,\n );\n }\n\n return (\n <Host\n class={{\n 'ts-skeleton': true,\n [`ts-skeleton--${this.variant}`]: true,\n [`ts-skeleton--${this.animation}`]: true,\n }}\n style={style}\n aria-hidden=\"true\"\n >\n <div class=\"skeleton__base\" part=\"base\">\n {lineElements}\n </div>\n </Host>\n );\n }\n\n return (\n <Host\n class={{\n 'ts-skeleton': true,\n [`ts-skeleton--${this.variant}`]: true,\n [`ts-skeleton--${this.animation}`]: true,\n }}\n style={style}\n aria-hidden=\"true\"\n >\n <div class=\"skeleton__base\" part=\"base\" />\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-slider.cjs.entry.js","mappings":"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","names":["h","Host"],"sources":["src/components/slider/slider.css?tag=ts-slider&encapsulation=shadow","src/components/slider/slider.tsx"],"sourcesContent":["/* ==========================================================================\n ts-slider — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-slider-track-bg Track background color\n --ts-slider-fill-bg Fill background color\n --ts-slider-thumb-bg Thumb background color\n --ts-slider-thumb-size Thumb dimensions\n ========================================================================== */\n\n:host {\n display: block;\n\n --ts-slider-track-bg: var(--ts-color-neutral-200);\n --ts-slider-fill-bg: var(--ts-color-interactive-primary);\n --ts-slider-thumb-bg: var(--ts-color-neutral-0);\n --ts-slider-thumb-size: 1.25rem;\n}\n\n/* ---- Label ---- */\n.slider__label {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n margin-block-end: var(--ts-spacing-2);\n}\n\n.slider__value {\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Track ---- */\n.slider__track {\n position: relative;\n block-size: var(--ts-slider-thumb-size);\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.slider__track::before {\n content: '';\n position: absolute;\n inset-inline: 0;\n block-size: 4px;\n background-color: var(--ts-slider-track-bg);\n border-radius: var(--ts-radius-full);\n}\n\n/* ---- Fill ---- */\n.slider__fill {\n position: absolute;\n inset-inline-start: 0;\n block-size: 4px;\n background-color: var(--ts-slider-fill-bg);\n border-radius: var(--ts-radius-full);\n pointer-events: none;\n}\n\n/* ---- Thumb ---- */\n.slider__thumb {\n position: absolute;\n inline-size: var(--ts-slider-thumb-size);\n block-size: var(--ts-slider-thumb-size);\n border-radius: var(--ts-radius-full);\n background-color: var(--ts-slider-thumb-bg);\n border: 2px solid var(--ts-slider-fill-bg);\n box-shadow: var(--ts-shadow-sm);\n transform: translateX(-50%);\n cursor: grab;\n outline: none;\n transition:\n box-shadow var(--ts-transition-fast),\n transform var(--ts-transition-fast);\n}\n\n.slider__thumb:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n.slider__thumb:active {\n cursor: grabbing;\n transform: translateX(-50%) scale(1.1);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n --ts-slider-thumb-size: 1rem;\n}\n\n:host([size=\"sm\"]) .slider__track::before,\n:host([size=\"sm\"]) .slider__fill {\n block-size: 3px;\n}\n\n:host([size=\"lg\"]) {\n --ts-slider-thumb-size: 1.5rem;\n}\n\n:host([size=\"lg\"]) .slider__track::before,\n:host([size=\"lg\"]) .slider__fill {\n block-size: 6px;\n}\n\n/* ---- Disabled ---- */\n:host(.ts-slider--disabled) {\n opacity: 0.5;\n}\n\n:host(.ts-slider--disabled) .slider__track {\n cursor: not-allowed;\n}\n\n:host(.ts-slider--disabled) .slider__thumb {\n cursor: not-allowed;\n}\n","import { Component, Prop, Event, State, h, Host, Element } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @part track - The slider track.\n * @part fill - The filled portion of the track.\n * @part thumb - The draggable thumb.\n * @part label - The value label.\n */\n@Component({\n tag: 'ts-slider',\n styleUrl: 'slider.css',\n shadow: true,\n})\nexport class TsSlider {\n @Element() hostEl!: HTMLElement;\n\n private trackEl?: HTMLElement;\n\n @State() dragging = false;\n\n /** Current slider value. */\n @Prop({ mutable: true, reflect: true }) value = 0;\n\n /** Minimum value. */\n @Prop() min = 0;\n\n /** Maximum value. */\n @Prop() max = 100;\n\n /** Step increment. */\n @Prop() step = 1;\n\n /** Disables the slider. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Accessible label. */\n @Prop() label?: string;\n\n /** Whether to display the current value. */\n @Prop({ reflect: true }) showValue = false;\n\n /** The size of the slider. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Emitted continuously during drag. */\n @Event({ eventName: 'tsInput' }) tsInput!: EventEmitter<{ value: number }>;\n\n /** Emitted when drag ends (value committed). */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: number }>;\n\n private get percentage(): number {\n const range = this.max - this.min;\n if (range <= 0) return 0;\n return ((this.value - this.min) / range) * 100;\n }\n\n private clampAndStep(val: number): number {\n // Snap to step\n const stepped = Math.round((val - this.min) / this.step) * this.step + this.min;\n // Clamp\n return Math.min(this.max, Math.max(this.min, stepped));\n }\n\n private updateValueFromPosition(clientX: number): void {\n if (!this.trackEl) return;\n const rect = this.trackEl.getBoundingClientRect();\n const ratio = (clientX - rect.left) / rect.width;\n const rawValue = this.min + ratio * (this.max - this.min);\n this.value = this.clampAndStep(rawValue);\n }\n\n private handleMouseDown = (event: MouseEvent): void => {\n if (this.disabled) return;\n event.preventDefault();\n this.dragging = true;\n this.updateValueFromPosition(event.clientX);\n this.tsInput.emit({ value: this.value });\n\n const handleMouseMove = (e: MouseEvent): void => {\n this.updateValueFromPosition(e.clientX);\n this.tsInput.emit({ value: this.value });\n };\n\n const handleMouseUp = (): void => {\n this.dragging = false;\n this.tsChange.emit({ value: this.value });\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n\n let newValue = this.value;\n const bigStep = this.step * 10;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n event.preventDefault();\n newValue = this.clampAndStep(this.value + this.step);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n event.preventDefault();\n newValue = this.clampAndStep(this.value - this.step);\n break;\n case 'PageUp':\n event.preventDefault();\n newValue = this.clampAndStep(this.value + bigStep);\n break;\n case 'PageDown':\n event.preventDefault();\n newValue = this.clampAndStep(this.value - bigStep);\n break;\n case 'Home':\n event.preventDefault();\n newValue = this.min;\n break;\n case 'End':\n event.preventDefault();\n newValue = this.max;\n break;\n default:\n return;\n }\n\n if (newValue !== this.value) {\n this.value = newValue;\n this.tsInput.emit({ value: this.value });\n this.tsChange.emit({ value: this.value });\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const percent = this.percentage;\n\n return (\n <Host\n class={{\n 'ts-slider': true,\n [`ts-slider--${this.size}`]: true,\n 'ts-slider--disabled': this.disabled,\n }}\n >\n {this.label && (\n <label class=\"slider__label\" part=\"label\">\n {this.label}\n {this.showValue && <span class=\"slider__value\">{this.value}</span>}\n </label>\n )}\n {!this.label && this.showValue && (\n <span class=\"slider__value\" part=\"label\" aria-hidden=\"true\">\n {this.value}\n </span>\n )}\n <div\n class=\"slider__track\"\n part=\"track\"\n ref={(el) => (this.trackEl = el)}\n onMouseDown={this.handleMouseDown}\n >\n <div\n class=\"slider__fill\"\n part=\"fill\"\n style={{ width: `${percent}%` }}\n />\n <div\n class=\"slider__thumb\"\n part=\"thumb\"\n role=\"slider\"\n tabindex={this.disabled ? -1 : 0}\n aria-valuenow={this.value}\n aria-valuemin={this.min}\n aria-valuemax={this.max}\n aria-label={this.label || undefined}\n aria-disabled={this.disabled ? 'true' : undefined}\n style={{ insetInlineStart: `${percent}%` }}\n onKeyDown={this.handleKeyDown}\n />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-spacer.cjs.entry.js","mappings":";;;;AAAA,MAAM,SAAS,GAAG,MAAM,CAAC,oEAAoE,CAAC;;MCUjF,QAAQ,GAAA,MAAA;;;;;IAEM,IAAI,GAAW,GAAG;;IAGlB,IAAI,GAA8B,UAAU;;IAGrE,MAAM,GAAA;AACJ,QAAA,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK;AACZ,cAAE,EAAE,KAAK,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,EAAE,MAAM,EAAE,MAAM;AAC3D,cAAE,EAAE,MAAM,EAAE,oBAAoB,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,EAAE,KAAK,EAAE,MAAM,EAAE;AAEjE,QAAA,OAAOA,QAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,KAAK,EAAE,KAAK,GAAS;;;;;;;","names":["h","Host"],"sources":["src/components/spacer/spacer.css?tag=ts-spacer&encapsulation=shadow","src/components/spacer/spacer.tsx"],"sourcesContent":["/* ==========================================================================\n ts-spacer — Shadow DOM Scoped Styles\n\n An explicit spacing element for vertical or horizontal space.\n ========================================================================== */\n\n:host {\n display: block;\n}\n\n:host([axis=\"horizontal\"]) {\n display: inline-block;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * An explicit spacing element for adding vertical or horizontal space.\n */\n@Component({\n tag: 'ts-spacer',\n styleUrl: 'spacer.css',\n shadow: true,\n})\nexport class TsSpacer {\n /** Spacing token number controlling the size of the spacer. */\n @Prop({ reflect: true }) size: string = '4';\n\n /** The axis along which the spacer adds space. */\n @Prop({ reflect: true }) axis: 'vertical' | 'horizontal' = 'vertical';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const style =\n this.axis === 'horizontal'\n ? { width: `var(--ts-spacing-${this.size})`, height: '100%' }\n : { height: `var(--ts-spacing-${this.size})`, width: '100%' };\n\n return <Host style={style}></Host>;\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-spinner.cjs.entry.js","mappings":";;;;AAAA,MAAM,UAAU,GAAG,MAAM,CAAC,ksBAAksB,CAAC;;MCYhtB,SAAS,GAAA,MAAA;;;;;IAEK,IAAI,GAAqC,IAAI;;IAG9D,KAAK,GAAW,cAAc;;IAG9B,KAAK,GAAW,SAAS;;IAGjC,MAAM,GAAA;QACJ,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,CAAC,eAAe,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;AACnC,aAAA,EACD,IAAI,EAAC,QAAQ,EAAA,YAAA,EACD,IAAI,CAAC,KAAK,EAAA,EAEtBD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,KAAK,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,EAAA,EACrGA,OAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,gBAAgB,EACtB,IAAI,EAAC,OAAO,EACZ,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EAAA,cAAA,EACO,GAAG,EAAA,CAChB,EACFA,OAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,oBAAoB,EAC1B,IAAI,EAAC,WAAW,EAChB,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EAAA,cAAA,EACO,GAAG,EAAA,gBAAA,EACD,OAAO,EAAA,kBAAA,EACL,UAAU,EAC3B,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,EAAE,EAAA,CACzE,CACE,CACD;;;;;;;","names":["h","Host"],"sources":["src/components/spinner/spinner.css?tag=ts-spinner&encapsulation=shadow","src/components/spinner/spinner.tsx"],"sourcesContent":["/* ==========================================================================\n ts-spinner — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-spinner-size Spinner dimensions\n --ts-spinner-color Spinning indicator color\n --ts-spinner-track-color Background track color\n ========================================================================== */\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n --ts-spinner-size: 1.5rem;\n --ts-spinner-color: var(--ts-color-interactive-primary);\n --ts-spinner-track-color: var(--ts-color-neutral-200);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"xs\"]) { --ts-spinner-size: 0.875rem; }\n:host([size=\"sm\"]) { --ts-spinner-size: 1.125rem; }\n:host([size=\"md\"]) { --ts-spinner-size: 1.5rem; }\n:host([size=\"lg\"]) { --ts-spinner-size: 2rem; }\n:host([size=\"xl\"]) { --ts-spinner-size: 3rem; }\n\n/* ---- SVG ---- */\n.spinner__svg {\n width: var(--ts-spinner-size);\n height: var(--ts-spinner-size);\n animation: ts-spinner-rotate 0.75s linear infinite;\n}\n\n/* ---- Track ---- */\n.spinner__track {\n stroke: var(--ts-spinner-track-color);\n}\n\n/* ---- Indicator ---- */\n.spinner__indicator {\n stroke: var(--ts-spinner-color);\n}\n\n/* ---- Animation ---- */\n@keyframes ts-spinner-rotate {\n to {\n transform: rotate(360deg);\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @part svg - The SVG element.\n * @part track - The background track circle.\n * @part indicator - The spinning indicator arc.\n */\n@Component({\n tag: 'ts-spinner',\n styleUrl: 'spinner.css',\n shadow: true,\n})\nexport class TsSpinner {\n /** The size of the spinner. */\n @Prop({ reflect: true }) size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\n\n /** The color of the spinning indicator. */\n @Prop() color: string = 'currentColor';\n\n /** Accessible label for screen readers. */\n @Prop() label: string = 'Loading';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-spinner': true,\n [`ts-spinner--${this.size}`]: true,\n }}\n role=\"status\"\n aria-label={this.label}\n >\n <svg class=\"spinner__svg\" part=\"svg\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n class=\"spinner__track\"\n part=\"track\"\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n stroke-width=\"3\"\n />\n <circle\n class=\"spinner__indicator\"\n part=\"indicator\"\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"20 61.68\"\n style={{ stroke: this.color !== 'currentColor' ? this.color : undefined }}\n />\n </svg>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-stack.cjs.entry.js","mappings":";;;;AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,yCAAyC,CAAC;;MCYrD,OAAO,GAAA,MAAA;;;;;IAEO,GAAG,GAAW,GAAG;;IAGjB,KAAK,GAA2C,SAAS;;IAGlF,MAAM,GAAA;AACJ,QAAA,MAAM,QAAQ,GAA2B;AACvC,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,OAAO,EAAE,SAAS;SACnB;QAED,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,GAAG,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,GAAG,CAAA,CAAA,CAAG;gBACpC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS;AAC9C,aAAA,EAAA,EAEDD,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACH;;;;;;;","names":["h","Host"],"sources":["src/components/stack/stack.css?tag=ts-stack&encapsulation=shadow","src/components/stack/stack.tsx"],"sourcesContent":["/* ==========================================================================\n ts-stack — Shadow DOM Scoped Styles\n\n A vertical stack layout primitive with consistent gap spacing.\n ========================================================================== */\n\n:host {\n display: flex;\n flex-direction: column;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for stacked content.\n *\n * @part base - The stack container.\n */\n@Component({\n tag: 'ts-stack',\n styleUrl: 'stack.css',\n shadow: true,\n})\nexport class TsStack {\n /** Spacing token number controlling the gap between items. */\n @Prop({ reflect: true }) gap: string = '3';\n\n /** Cross-axis alignment of items. */\n @Prop({ reflect: true }) align: 'start' | 'center' | 'end' | 'stretch' = 'stretch';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const alignMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n };\n\n return (\n <Host\n style={{\n gap: `var(--ts-spacing-${this.gap})`,\n alignItems: alignMap[this.align] || 'stretch',\n }}\n >\n <slot />\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-step.cjs.entry.js","mappings":"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","names":["h","Host"],"sources":["src/components/stepper/step.css?tag=ts-step&encapsulation=shadow","src/components/stepper/step.tsx"],"sourcesContent":["/* ==========================================================================\n ts-step — Shadow DOM Scoped Styles\n ========================================================================== */\n\n:host {\n display: flex;\n font-family: var(--ts-font-family-base);\n}\n\n/* ---- Horizontal layout ---- */\n:host(.ts-step--horizontal) {\n flex: 1;\n flex-direction: column;\n}\n\n/* ---- Vertical layout ---- */\n:host(.ts-step--vertical) {\n flex-direction: column;\n}\n\n.step__wrapper {\n display: flex;\n flex-direction: column;\n}\n\n:host(.ts-step--horizontal) .step__wrapper {\n flex-direction: column;\n align-items: center;\n}\n\n:host(.ts-step--vertical) .step__wrapper {\n flex-direction: row;\n align-items: flex-start;\n}\n\n.step__header {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n}\n\n:host(.ts-step--horizontal) .step__header {\n flex-direction: column;\n text-align: center;\n}\n\n:host(.ts-step--vertical) .step__header {\n flex-direction: row;\n}\n\n/* ---- Indicator ---- */\n.step__indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n inline-size: 2rem;\n block-size: 2rem;\n border-radius: var(--ts-radius-full);\n border: 2px solid var(--ts-color-border-default);\n background-color: var(--ts-color-bg-elevated);\n color: var(--ts-color-text-tertiary);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n flex-shrink: 0;\n transition:\n background-color var(--ts-transition-fast),\n border-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n}\n\n.step__indicator--active {\n border-color: var(--ts-stepper-active-color, var(--ts-color-interactive-primary));\n background-color: var(--ts-stepper-active-color, var(--ts-color-interactive-primary));\n color: var(--ts-color-text-on-primary, #fff);\n}\n\n.step__indicator--completed {\n border-color: var(--ts-stepper-completed-color, var(--ts-color-success-600));\n background-color: var(--ts-stepper-completed-color, var(--ts-color-success-600));\n color: #ffffff;\n}\n\n.step__indicator--error {\n border-color: var(--ts-color-danger-500);\n background-color: var(--ts-color-danger-500);\n color: #ffffff;\n}\n\n.step__icon {\n inline-size: 1em;\n block-size: 1em;\n}\n\n/* ---- Text ---- */\n.step__text {\n display: flex;\n flex-direction: column;\n gap: var(--ts-spacing-0, 2px);\n}\n\n.step__label {\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n}\n\n:host(.ts-step--active) .step__label {\n color: var(--ts-stepper-active-color, var(--ts-color-interactive-primary));\n}\n\n:host(.ts-step--disabled) .step__label {\n color: var(--ts-color-text-tertiary);\n}\n\n.step__description {\n font-size: var(--ts-font-size-xs);\n color: var(--ts-color-text-tertiary);\n}\n\n/* ---- Connector ---- */\n.step__connector {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n}\n\n:host(.ts-step--horizontal) .step__connector {\n padding-inline: var(--ts-spacing-2);\n min-inline-size: var(--ts-spacing-4);\n padding-block-start: var(--ts-spacing-4);\n}\n\n:host(.ts-step--vertical) .step__connector {\n padding-block: var(--ts-spacing-2);\n min-block-size: var(--ts-spacing-4);\n margin-inline-start: calc(1rem - 1px);\n}\n\n.step__connector-line {\n background-color: var(--ts-stepper-connector-color, var(--ts-color-border-default));\n transition: background-color var(--ts-transition-fast);\n}\n\n:host(.ts-step--horizontal) .step__connector-line {\n block-size: 2px;\n inline-size: 100%;\n}\n\n:host(.ts-step--vertical) .step__connector-line {\n inline-size: 2px;\n block-size: 100%;\n min-block-size: var(--ts-spacing-6);\n}\n\n.step__connector-line--completed {\n background-color: var(--ts-stepper-completed-color, var(--ts-color-success-600));\n}\n\n/* ---- Content ---- */\n.step__content {\n padding-block-start: var(--ts-spacing-2);\n}\n\n.step__content:empty {\n display: none;\n}\n\n/* ---- Disabled ---- */\n:host(.ts-step--disabled) {\n opacity: 0.5;\n}\n","import { Component, Prop, h, Host, Element } from '@stencil/core';\n\n/**\n * @slot - Default slot for step content.\n *\n * @part step - The step wrapper.\n * @part indicator - The step number/icon circle.\n * @part label - The step label.\n * @part description - The step description.\n * @part connector - The connector line between steps.\n * @part content - The step content area.\n */\n@Component({\n tag: 'ts-step',\n styleUrl: 'step.css',\n shadow: true,\n})\nexport class TsStep {\n @Element() hostEl!: HTMLElement;\n\n /** The step label text. */\n @Prop() label?: string;\n\n /** Optional description text below the label. */\n @Prop() description?: string;\n\n /** Whether this step is completed. */\n @Prop({ reflect: true }) completed = false;\n\n /** Whether this step has an error. */\n @Prop({ reflect: true }) error = false;\n\n /** Whether this step is disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Optional custom icon name. */\n @Prop() icon?: string;\n\n private get index(): number {\n return parseInt(this.hostEl.getAttribute('data-index') || '0', 10);\n }\n\n private get isActive(): boolean {\n return this.hostEl.hasAttribute('data-active');\n }\n\n private get hasConnector(): boolean {\n return this.hostEl.hasAttribute('data-has-connector');\n }\n\n private get orientation(): string {\n return this.hostEl.getAttribute('data-orientation') || 'horizontal';\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderIndicatorContent() {\n if (this.completed) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"step__icon\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n }\n if (this.error) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"step__icon\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n }\n if (this.icon) {\n return <ts-icon name={this.icon} size=\"sm\" />;\n }\n return <span>{this.index + 1}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-step': true,\n 'ts-step--active': this.isActive,\n 'ts-step--completed': this.completed,\n 'ts-step--error': this.error,\n 'ts-step--disabled': this.disabled,\n [`ts-step--${this.orientation}`]: true,\n }}\n role=\"listitem\"\n aria-current={this.isActive ? 'step' : undefined}\n aria-disabled={this.disabled ? 'true' : undefined}\n >\n <div class=\"step__wrapper\" part=\"step\">\n <div class=\"step__header\">\n <div\n class={{\n 'step__indicator': true,\n 'step__indicator--active': this.isActive,\n 'step__indicator--completed': this.completed,\n 'step__indicator--error': this.error,\n }}\n part=\"indicator\"\n >\n {this.renderIndicatorContent()}\n </div>\n\n <div class=\"step__text\">\n {this.label && (\n <span class=\"step__label\" part=\"label\">\n {this.label}\n </span>\n )}\n {this.description && (\n <span class=\"step__description\" part=\"description\">\n {this.description}\n </span>\n )}\n </div>\n </div>\n\n {this.hasConnector && (\n <div class=\"step__connector\" part=\"connector\">\n <div\n class={{\n 'step__connector-line': true,\n 'step__connector-line--completed': this.completed,\n }}\n />\n </div>\n )}\n\n <div class=\"step__content\" part=\"content\">\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-stepper.cjs.entry.js","mappings":";;;;AAAA,MAAM,UAAU,GAAG,MAAM,CAAC,ybAAyb,CAAC;;MCYvc,SAAS,GAAA,MAAA;;;;;;IAIK,UAAU,GAAG,CAAC;;IAGd,WAAW,GAA8B,YAAY;;IAGtE,MAAM,GAAG,KAAK;IAGtB,sBAAsB,GAAA;QACpB,IAAI,CAAC,gBAAgB,EAAE;;IAGzB,gBAAgB,GAAA;QACd,IAAI,CAAC,gBAAgB,EAAE;;IAGjB,gBAAgB,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;YAC5B,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC;AACvD,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;;iBAC/B;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;;YAErC,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;;AAC5B,iBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;;YAElC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;;iBACtC;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;;AAE9C,SAAC,CAAC;;;IAIJ,MAAM,GAAA;QACJ,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,CAAC,eAAe,IAAI,CAAC,WAAW,CAAA,CAAE,GAAG,IAAI;AAC1C,aAAA,EAAA,EAEDD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,oBAAoB,EAAC,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA,EAC1DA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACJ,CACD;;;;;;;;;;;;","names":["h","Host"],"sources":["src/components/stepper/stepper.css?tag=ts-stepper&encapsulation=shadow","src/components/stepper/stepper.tsx"],"sourcesContent":["/* ==========================================================================\n ts-stepper — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-stepper-active-color Active step indicator color\n --ts-stepper-completed-color Completed step indicator color\n --ts-stepper-connector-color Connector line color\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-stepper-active-color: var(--ts-color-interactive-primary);\n --ts-stepper-completed-color: var(--ts-color-success-600);\n --ts-stepper-connector-color: var(--ts-color-border-default);\n}\n\n.stepper__container {\n display: flex;\n}\n\n/* ---- Horizontal ---- */\n:host([orientation=\"horizontal\"]) .stepper__container {\n flex-direction: row;\n align-items: flex-start;\n}\n\n/* ---- Vertical ---- */\n:host([orientation=\"vertical\"]) .stepper__container {\n flex-direction: column;\n}\n","import { Component, Prop, h, Host, Element, Watch } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-step children.\n *\n * @part container - The stepper container.\n */\n@Component({\n tag: 'ts-stepper',\n styleUrl: 'stepper.css',\n shadow: true,\n})\nexport class TsStepper {\n @Element() hostEl!: HTMLElement;\n\n /** The index of the currently active step (0-based). */\n @Prop({ reflect: true }) activeStep = 0;\n\n /** The layout orientation. */\n @Prop({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** If true, steps must be completed in order. */\n @Prop() linear = false;\n\n @Watch('activeStep')\n handleActiveStepChange(): void {\n this.updateStepStates();\n }\n\n componentDidLoad(): void {\n this.updateStepStates();\n }\n\n private updateStepStates(): void {\n const steps = Array.from(this.hostEl.querySelectorAll('ts-step'));\n steps.forEach((step, index) => {\n step.setAttribute('data-index', String(index));\n step.setAttribute('data-orientation', this.orientation);\n if (index === this.activeStep) {\n step.setAttribute('data-active', '');\n } else {\n step.removeAttribute('data-active');\n }\n if (this.linear && index > this.activeStep) {\n step.setAttribute('disabled', '');\n } else if (this.linear) {\n step.removeAttribute('disabled');\n }\n if (index < steps.length - 1) {\n step.setAttribute('data-has-connector', '');\n } else {\n step.removeAttribute('data-has-connector');\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-stepper': true,\n [`ts-stepper--${this.orientation}`]: true,\n }}\n >\n <div class=\"stepper__container\" part=\"container\" role=\"list\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-switch-group.cjs.entry.js","mappings":";;;;AAAA,MAAM,cAAc,GAAG,MAAM,CAAC,kvBAAkvB,CAAC;;MCcpwB,aAAa,GAAA,MAAA;;;;;;;AAIgB,IAAA,KAAK;;IAGpB,IAAI,GAAW,IAAI;;IAGnB,QAAQ,GAAG,KAAK;;IAGhB,SAAS,GAAG,KAAK;;AAGR,IAAA,QAAQ;IAG1C,aAAa,GAAA;QACX,IAAI,CAAC,WAAW,EAAE;;AAIpB,IAAA,kBAAkB,CAAC,KAAqC,EAAA;QACtD,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;;AAIvC,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE;AAEjC,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;AAE1E,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB;oBACE,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM;oBAC5D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;;gBAEpD;AACF,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB;AACE,oBAAA,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM;oBACpF,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;;gBAEpD;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1C;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBAClE;;;IAIN,gBAAgB,GAAA;QACd,IAAI,CAAC,WAAW,EAAE;;IAGZ,UAAU,GAAA;AAChB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAgC;;AAG5F,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;;QAE/B,IAAI,CAAC,WAAW,EAAE;;IAGZ,WAAW,GAAA;AACjB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;YACtB,MAAyC,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;AACjF,SAAC,CAAC;;IAGI,gBAAgB,GAAG,MAAW;QACpC,IAAI,CAAC,WAAW,EAAE;AACpB,KAAC;;IAGD,MAAM,GAAA;QACJ,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;gBACvC,2BAA2B,EAAE,IAAI,CAAC,QAAQ;gBAC1C,6BAA6B,EAAE,IAAI,CAAC,SAAS;AAC9C,aAAA,EACD,IAAI,EAAC,YAAY,EAAA,EAEjBD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,oBAAoB,EAAC,IAAI,EAAC,MAAM,EAAA,EACzCA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAA,CAAI,CACzC,CACD;;;;;;;;;;;;","names":["h","Host"],"sources":["src/components/switch-group/switch-group.css?tag=ts-switch-group&encapsulation=shadow","src/components/switch-group/switch-group.tsx"],"sourcesContent":["/* ==========================================================================\n ts-switch-group — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-switch-group-bg Background color\n --ts-switch-group-active-bg Active segment background\n --ts-switch-group-radius Border radius\n ========================================================================== */\n\n:host {\n display: inline-flex;\n font-family: var(--ts-font-family-base);\n\n --ts-switch-group-bg: var(--ts-color-neutral-100);\n --ts-switch-group-active-bg: var(--ts-color-bg-elevated);\n --ts-switch-group-radius: var(--ts-shape-interactive);\n}\n\n:host([full-width]) {\n display: flex;\n inline-size: 100%;\n}\n\n.switch-group__base {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n padding: var(--ts-spacing-1);\n background-color: var(--ts-switch-group-bg);\n border-radius: var(--ts-switch-group-radius);\n inline-size: 100%;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .switch-group__base {\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .switch-group__base {\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .switch-group__base {\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n}\n","import { Component, Prop, Event, h, Host, Element, Listen, Watch } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @slot - Default slot for ts-switch-option children.\n *\n * @part base - The switch group container.\n */\n@Component({\n tag: 'ts-switch-group',\n styleUrl: 'switch-group.css',\n shadow: true,\n})\nexport class TsSwitchGroup {\n @Element() hostEl!: HTMLElement;\n\n /** The currently active segment value. */\n @Prop({ reflect: true, mutable: true }) value?: string;\n\n /** The size of the switch group. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Disables the entire group. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Stretch to fill the container width. */\n @Prop({ reflect: true }) fullWidth = false;\n\n /** Emitted when the active value changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: string }>;\n\n @Watch('value')\n onValueChange(): void {\n this.syncOptions();\n }\n\n @Listen('tsOptionSelect')\n handleOptionSelect(event: CustomEvent<{ value: string }>): void {\n event.stopPropagation();\n if (this.disabled) return;\n this.selectOption(event.detail.value);\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n const options = this.getOptions();\n const enabledOptions = options.filter(o => !o.disabled);\n if (enabledOptions.length === 0) return;\n\n const currentIndex = enabledOptions.findIndex(o => o.value === this.value);\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n {\n const nextIndex = (currentIndex + 1) % enabledOptions.length;\n this.selectOption(enabledOptions[nextIndex].value);\n }\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n {\n const prevIndex = (currentIndex - 1 + enabledOptions.length) % enabledOptions.length;\n this.selectOption(enabledOptions[prevIndex].value);\n }\n break;\n case 'Home':\n event.preventDefault();\n this.selectOption(enabledOptions[0].value);\n break;\n case 'End':\n event.preventDefault();\n this.selectOption(enabledOptions[enabledOptions.length - 1].value);\n break;\n }\n }\n\n componentDidLoad(): void {\n this.syncOptions();\n }\n\n private getOptions(): HTMLTsSwitchOptionElement[] {\n return Array.from(this.hostEl.querySelectorAll('ts-switch-option')) as HTMLTsSwitchOptionElement[];\n }\n\n private selectOption(value: string): void {\n if (value !== this.value) {\n this.value = value;\n this.tsChange.emit({ value });\n }\n this.syncOptions();\n }\n\n private syncOptions(): void {\n const options = this.getOptions();\n options.forEach(option => {\n (option as unknown as { active: boolean }).active = option.value === this.value;\n });\n }\n\n private handleSlotChange = (): void => {\n this.syncOptions();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-switch-group': true,\n [`ts-switch-group--${this.size}`]: true,\n 'ts-switch-group--disabled': this.disabled,\n 'ts-switch-group--full-width': this.fullWidth,\n }}\n role=\"radiogroup\"\n >\n <div class=\"switch-group__base\" part=\"base\">\n <slot onSlotchange={this.handleSlotChange} />\n </div>\n </Host>\n );\n }\n}\n\ninterface HTMLTsSwitchOptionElement extends HTMLElement {\n value: string;\n disabled: boolean;\n active: boolean;\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-switch-option.cjs.entry.js","mappings":";;;;AAAA,MAAM,eAAe,GAAG,MAAM,CAAC,0mCAA0mC,CAAC;;MCc7nC,cAAc,GAAA,MAAA;;;;;;;AAIA,IAAA,KAAK;;IAGL,QAAQ,GAAG,KAAK;;AAGjC,IAAA,IAAI;;IAG4B,MAAM,GAAG,KAAK;;AAGC,IAAA,cAAc;IAE7D,WAAW,GAAG,MAAW;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;AACvD,KAAC;;IAGD,MAAM,GAAA;QACJ,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,kBAAkB,EAAE,IAAI;gBACxB,0BAA0B,EAAE,IAAI,CAAC,MAAM;gBACvC,4BAA4B,EAAE,IAAI,CAAC,QAAQ;AAC5C,aAAA,EACD,IAAI,EAAC,OAAO,EACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,kBAChB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAA,eAAA,EAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS,EACjD,OAAO,EAAE,IAAI,CAAC,WAAW,EAAA,EAEzBD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,qBAAqB,EAAC,IAAI,EAAC,MAAM,EAAA,EACzC,IAAI,CAAC,IAAI,KACRA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,qBAAqB,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,EAAA,EAC9DA,OAAA,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAS,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,IAAI,EAAA,CAAG,CACjC,CACR,EACDA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,sBAAsB,EAAA,EAChCA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACH,CACH,CACD;;;;;;;","names":["h","Host"],"sources":["src/components/switch-group/switch-option.css?tag=ts-switch-option&encapsulation=shadow","src/components/switch-group/switch-option.tsx"],"sourcesContent":["/* ==========================================================================\n ts-switch-option — Shadow DOM Scoped Styles\n ========================================================================== */\n\n:host {\n display: inline-flex;\n flex: 1;\n outline: none;\n}\n\n.switch-option__base {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ts-spacing-1);\n inline-size: 100%;\n padding-inline: var(--ts-spacing-3);\n padding-block: var(--ts-spacing-1);\n border-radius: calc(var(--ts-switch-group-radius, var(--ts-shape-interactive)) - 2px);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n}\n\n.switch-option__base:hover {\n color: var(--ts-color-text-primary);\n}\n\n:host(:focus-visible) .switch-option__base {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Active ---- */\n:host([active]) .switch-option__base {\n background-color: var(--ts-switch-group-active-bg, var(--ts-color-bg-elevated));\n color: var(--ts-color-text-primary);\n box-shadow: var(--ts-shadow-sm);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .switch-option__base {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Icon ---- */\n.switch-option__icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* ---- Label ---- */\n.switch-option__label {\n display: inline-flex;\n align-items: center;\n}\n","import { Component, Prop, Event, h, Host, Element } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for label text.\n *\n * @part base - The option container.\n * @part icon - The icon wrapper.\n */\n@Component({\n tag: 'ts-switch-option',\n styleUrl: 'switch-option.css',\n shadow: true,\n})\nexport class TsSwitchOption {\n @Element() hostEl!: HTMLElement;\n\n /** Unique identifier for this option. */\n @Prop({ reflect: true }) value?: string;\n\n /** Disables this option. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Optional icon name. */\n @Prop() icon?: string;\n\n /** Whether this option is the active selection (set by parent). */\n @Prop({ reflect: true, mutable: true }) active = false;\n\n /** @internal Emitted when this option is clicked. */\n @Event({ eventName: 'tsOptionSelect', bubbles: true }) tsOptionSelect!: EventEmitter<{ value: string }>;\n\n private handleClick = (): void => {\n if (this.disabled) return;\n this.tsOptionSelect.emit({ value: this.value || '' });\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-switch-option': true,\n 'ts-switch-option--active': this.active,\n 'ts-switch-option--disabled': this.disabled,\n }}\n role=\"radio\"\n tabindex={this.active ? 0 : -1}\n aria-checked={String(this.active)}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleClick}\n >\n <div class=\"switch-option__base\" part=\"base\">\n {this.icon && (\n <span class=\"switch-option__icon\" part=\"icon\" aria-hidden=\"true\">\n <ts-icon name={this.icon} size=\"sm\" />\n </span>\n )}\n <span class=\"switch-option__label\">\n <slot />\n </span>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-tab-panel.cjs.entry.js","mappings":";;;;AAAA,MAAM,WAAW,GAAG,MAAM,CAAC,4CAA4C,CAAC;;MCY3D,UAAU,GAAA,MAAA;;;;;;AAIb,IAAA,GAAG;;AAGc,IAAA,KAAK;;IAGL,QAAQ,GAAG,KAAK;;AAGjC,IAAA,IAAI;;IAGZ,MAAM,GAAA;QACJ,QACEA,QAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACHD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,WAAW,EAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,UAAU,EAAA,EACjDA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACJ,CACD;;;;;;;","names":["h","Host"],"sources":["src/components/tabs/tab-panel.css?tag=ts-tab-panel&encapsulation=shadow","src/components/tabs/tab-panel.tsx"],"sourcesContent":["/* ==========================================================================\n ts-tab-panel — Shadow DOM Scoped Styles\n ========================================================================== */\n\n:host {\n display: block;\n}\n\n.tab-panel {\n outline: none;\n}\n","import { Component, Prop, h, Host, Element } from '@stencil/core';\n\n/**\n * @slot - Default slot for panel content.\n *\n * @part panel - The panel container element.\n */\n@Component({\n tag: 'ts-tab-panel',\n styleUrl: 'tab-panel.css',\n shadow: true,\n})\nexport class TsTabPanel {\n @Element() hostEl!: HTMLElement;\n\n /** The label text displayed in the tab button. */\n @Prop() tab!: string;\n\n /** Unique identifier for this tab panel. */\n @Prop({ reflect: true }) value!: string;\n\n /** Whether this tab is disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Optional icon name displayed before the tab label. */\n @Prop() icon?: string;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host>\n <div class=\"tab-panel\" part=\"panel\" role=\"tabpanel\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-table.cjs.entry.js","mappings":";;;;AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,s6DAAs6D,CAAC;;MCgBl7D,OAAO,GAAA,MAAA;;;;;;IAIO,OAAO,GAAG,KAAK;;IAGf,QAAQ,GAAG,KAAK;;IAGhB,SAAS,GAAG,KAAK;;IAGjB,OAAO,GAAG,KAAK;;IAGf,YAAY,GAAG,KAAK;;IAG7C,MAAM,GAAA;QACJ,QACEA,OAAA,CAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,IAAI;gBAChB,mBAAmB,EAAE,IAAI,CAAC,OAAO;gBACjC,oBAAoB,EAAE,IAAI,CAAC,QAAQ;gBACnC,qBAAqB,EAAE,IAAI,CAAC,SAAS;gBACrC,mBAAmB,EAAE,IAAI,CAAC,OAAO;gBACjC,yBAAyB,EAAE,IAAI,CAAC,YAAY;AAC7C,aAAA,EAAA,EAEDD,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAA,EACnDA,OAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAQ,CACJ,CACD;;;;;;;","names":["h","Host"],"sources":["src/components/table/table.css?tag=ts-table","src/components/table/table.tsx"],"sourcesContent":["/* ==========================================================================\n ts-table — Light DOM Styles\n\n Uses light DOM (no Shadow DOM) so nested <table>, <th>, <td>, <tr>\n elements can be styled directly.\n\n Component tokens (Tier 3):\n --ts-table-bg Table background color\n --ts-table-border-color Border color for cells and edges\n --ts-table-header-bg Header row background\n --ts-table-header-color Header text color\n --ts-table-row-hover-bg Row hover background\n --ts-table-stripe-bg Alternating row background\n --ts-table-cell-padding Cell padding\n ========================================================================== */\n\nts-table {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-table-bg: var(--ts-color-bg-surface);\n --ts-table-border-color: var(--ts-color-border-subtle);\n --ts-table-header-bg: var(--ts-color-bg-subtle);\n --ts-table-header-color: var(--ts-color-text-primary);\n --ts-table-row-hover-bg: var(--ts-color-bg-hover);\n --ts-table-stripe-bg: var(--ts-color-bg-subtle);\n --ts-table-cell-padding: var(--ts-spacing-3) var(--ts-spacing-4);\n}\n\nts-table[compact] {\n --ts-table-cell-padding: var(--ts-spacing-1) var(--ts-spacing-2);\n}\n\n/* ---- Scrollable Wrapper ---- */\nts-table .table__wrapper {\n overflow-x: auto;\n background-color: var(--ts-table-bg);\n border-radius: var(--ts-shape-container);\n border: 1px solid var(--ts-table-border-color);\n}\n\nts-table .table__wrapper:focus-visible {\n box-shadow: var(--ts-focus-ring);\n outline: none;\n}\n\n/* ---- Table ---- */\nts-table table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n font-size: var(--ts-font-size-sm);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Header ---- */\nts-table th {\n padding: var(--ts-table-cell-padding);\n text-align: start;\n font-weight: var(--ts-font-weight-medium);\n font-size: var(--ts-font-size-xs);\n color: var(--ts-table-header-color);\n background-color: var(--ts-table-header-bg);\n border-bottom: 1px solid var(--ts-table-border-color);\n white-space: nowrap;\n letter-spacing: var(--ts-letter-spacing-wide);\n text-transform: uppercase;\n}\n\n/* ---- Cells ---- */\nts-table td {\n padding: var(--ts-table-cell-padding);\n border-bottom: 1px solid var(--ts-table-border-color);\n vertical-align: middle;\n}\n\n/* ---- Last row — no bottom border ---- */\nts-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n/* ---- Striped ---- */\nts-table.ts-table--striped tbody tr:nth-child(even) {\n background-color: var(--ts-table-stripe-bg);\n}\n\n/* ---- Hoverable ---- */\nts-table.ts-table--hoverable tbody tr {\n transition: background-color var(--ts-transition-fast);\n}\n\nts-table.ts-table--hoverable tbody tr:hover {\n background-color: var(--ts-table-row-hover-bg);\n}\n\n/* ---- Bordered ---- */\nts-table.ts-table--bordered th,\nts-table.ts-table--bordered td {\n border: 1px solid var(--ts-table-border-color);\n}\n\n/* ---- Sticky header ---- */\nts-table.ts-table--sticky-header .table__wrapper {\n max-block-size: 24rem;\n overflow-y: auto;\n}\n\nts-table.ts-table--sticky-header th {\n position: sticky;\n top: 0;\n z-index: 1;\n}\n","import { Component, Prop, h, Host, Element } from '@stencil/core';\n\n/**\n * A styled wrapper for native HTML tables. Consumers place standard\n * `<table>`, `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>` elements inside.\n *\n * Uses light DOM (no Shadow DOM) so nested table elements can be\n * styled directly via the component's CSS.\n *\n * @slot - Default slot for the native `<table>` element.\n */\n@Component({\n tag: 'ts-table',\n styleUrl: 'table.css',\n shadow: false,\n})\nexport class TsTable {\n @Element() hostEl!: HTMLElement;\n\n /** Applies alternating row background colors. */\n @Prop({ reflect: true }) striped = false;\n\n /** Adds borders to all cells. */\n @Prop({ reflect: true }) bordered = false;\n\n /** Highlights rows on hover. */\n @Prop({ reflect: true }) hoverable = false;\n\n /** Reduces cell padding for denser display. */\n @Prop({ reflect: true }) compact = false;\n\n /** Makes the table header stick to the top on scroll. */\n @Prop({ reflect: true }) stickyHeader = false;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-table': true,\n 'ts-table--striped': this.striped,\n 'ts-table--bordered': this.bordered,\n 'ts-table--hoverable': this.hoverable,\n 'ts-table--compact': this.compact,\n 'ts-table--sticky-header': this.stickyHeader,\n }}\n >\n <div class=\"table__wrapper\" role=\"region\" tabindex={0}>\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-tabs.cjs.entry.js","mappings":"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","names":["h","Host"],"sources":["src/components/tabs/tabs.css?tag=ts-tabs&encapsulation=shadow","src/components/tabs/tabs.tsx"],"sourcesContent":["/* ==========================================================================\n ts-tabs — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-tabs-border-color Border color for tab bar\n --ts-tabs-active-color Active tab indicator color\n --ts-tabs-radius Border radius for enclosed/pill tabs\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-tabs-border-color: var(--ts-color-border-default);\n --ts-tabs-active-color: var(--ts-color-interactive-primary);\n --ts-tabs-radius: var(--ts-radius-md);\n}\n\n/* ---- Tab list ---- */\n.tabs__tablist {\n display: flex;\n gap: var(--ts-spacing-1);\n border-block-end: 2px solid var(--ts-tabs-border-color);\n}\n\n/* ---- Tab button base ---- */\n.tabs__tab {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n border: none;\n background: transparent;\n font-family: inherit;\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-secondary);\n cursor: pointer;\n position: relative;\n white-space: nowrap;\n transition:\n color var(--ts-transition-fast),\n background-color var(--ts-transition-fast),\n border-color var(--ts-transition-fast);\n outline: none;\n margin-block-end: -2px;\n border-block-end: 2px solid transparent;\n}\n\n.tabs__tab:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n.tabs__tab:hover:not([disabled]) {\n color: var(--ts-color-text-primary);\n}\n\n/* ---- Active tab (line variant) ---- */\n.tabs__tab--active {\n color: var(--ts-tabs-active-color);\n border-block-end-color: var(--ts-tabs-active-color);\n}\n\n/* ---- Disabled ---- */\n.tabs__tab--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .tabs__tab {\n padding: var(--ts-spacing-1) var(--ts-spacing-3);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .tabs__tab {\n padding: var(--ts-spacing-2) var(--ts-spacing-4);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .tabs__tab {\n padding: var(--ts-spacing-3) var(--ts-spacing-5);\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Enclosed variant ---- */\n:host([variant=\"enclosed\"]) .tabs__tablist {\n gap: 0;\n border-block-end: 2px solid var(--ts-tabs-border-color);\n}\n\n:host([variant=\"enclosed\"]) .tabs__tab {\n border: 2px solid transparent;\n border-block-end: 2px solid var(--ts-tabs-border-color);\n border-start-start-radius: var(--ts-tabs-radius);\n border-start-end-radius: var(--ts-tabs-radius);\n margin-block-end: -2px;\n}\n\n:host([variant=\"enclosed\"]) .tabs__tab--active {\n border-color: var(--ts-tabs-border-color);\n border-block-end-color: var(--ts-color-bg-surface);\n background-color: var(--ts-color-bg-surface);\n color: var(--ts-tabs-active-color);\n}\n\n/* ---- Pill variant ---- */\n:host([variant=\"pill\"]) .tabs__tablist {\n border-block-end: none;\n gap: var(--ts-spacing-1);\n background-color: var(--ts-color-bg-subtle);\n border-radius: var(--ts-tabs-radius);\n padding: var(--ts-spacing-1);\n}\n\n:host([variant=\"pill\"]) .tabs__tab {\n border-block-end: none;\n border-radius: var(--ts-tabs-radius);\n margin-block-end: 0;\n}\n\n:host([variant=\"pill\"]) .tabs__tab--active {\n background-color: var(--ts-color-bg-surface);\n color: var(--ts-tabs-active-color);\n box-shadow: var(--ts-shadow-sm);\n}\n\n/* ---- Panels ---- */\n.tabs__panels {\n padding-block-start: var(--ts-spacing-4);\n}\n\n/* ---- Tab icon ---- */\n.tabs__tab-icon {\n font-size: 1em;\n}\n","import { Component, Prop, Event, h, Host, Element, Watch } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for `ts-tab-panel` children.\n *\n * @part tablist - The tab button container.\n * @part tab - Each individual tab button.\n * @part tab-active - The currently active tab button.\n * @part panels - The panel container.\n */\n@Component({\n tag: 'ts-tabs',\n styleUrl: 'tabs.css',\n shadow: true,\n})\nexport class TsTabs {\n @Element() hostEl!: HTMLElement;\n\n /** The value of the currently active tab. */\n @Prop({ mutable: true, reflect: true }) value?: string;\n\n /** Visual variant of the tab bar. */\n @Prop({ reflect: true }) variant: 'line' | 'enclosed' | 'pill' = 'line';\n\n /** The size of the tab buttons. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Emitted when the active tab changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: string }>;\n\n @Watch('value')\n handleValueChange(): void {\n this.updatePanelVisibility();\n }\n\n componentDidLoad(): void {\n // Default to first non-disabled tab if no value set\n if (!this.value) {\n const panels = this.getPanels();\n const firstEnabled = panels.find((p) => !p.hasAttribute('disabled'));\n if (firstEnabled) {\n this.value = firstEnabled.getAttribute('value') || '';\n }\n }\n this.updatePanelVisibility();\n }\n\n private getPanels(): Element[] {\n return Array.from(this.hostEl.querySelectorAll('ts-tab-panel'));\n }\n\n private getTabData(): Array<{ tab: string; value: string; disabled: boolean; icon?: string }> {\n return this.getPanels().map((panel) => ({\n tab: panel.getAttribute('tab') || '',\n value: panel.getAttribute('value') || '',\n disabled: panel.hasAttribute('disabled'),\n icon: panel.getAttribute('icon') || undefined,\n }));\n }\n\n private updatePanelVisibility(): void {\n this.getPanels().forEach((panel) => {\n const isActive = panel.getAttribute('value') === this.value;\n (panel as HTMLElement).style.display = isActive ? '' : 'none';\n });\n }\n\n private handleTabClick(tabValue: string, disabled: boolean): void {\n if (disabled || tabValue === this.value) return;\n this.value = tabValue;\n this.tsChange.emit({ value: tabValue });\n this.updatePanelVisibility();\n }\n\n private handleKeydown = (event: KeyboardEvent): void => {\n const tabs = this.getTabData();\n const enabledTabs = tabs.filter((t) => !t.disabled);\n const currentIndex = enabledTabs.findIndex((t) => t.value === this.value);\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n newIndex = (currentIndex + 1) % enabledTabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n newIndex = (currentIndex - 1 + enabledTabs.length) % enabledTabs.length;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = enabledTabs.length - 1;\n break;\n default:\n return;\n }\n\n const newTab = enabledTabs[newIndex];\n if (newTab) {\n this.value = newTab.value;\n this.tsChange.emit({ value: newTab.value });\n this.updatePanelVisibility();\n\n // Focus the new tab button\n const tabButtons = this.hostEl.shadowRoot?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]');\n const allTabIndex = tabs.findIndex((t) => t.value === newTab.value);\n tabButtons?.[allTabIndex]?.focus();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const tabs = this.getTabData();\n\n return (\n <Host\n class={{\n 'ts-tabs': true,\n [`ts-tabs--${this.variant}`]: true,\n [`ts-tabs--${this.size}`]: true,\n }}\n >\n <div class=\"tabs__tablist\" part=\"tablist\" role=\"tablist\" onKeyDown={this.handleKeydown}>\n {tabs.map((t) => {\n const isActive = t.value === this.value;\n return (\n <button\n class={{\n 'tabs__tab': true,\n 'tabs__tab--active': isActive,\n 'tabs__tab--disabled': t.disabled,\n }}\n part={isActive ? 'tab tab-active' : 'tab'}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive ? 'true' : 'false'}\n aria-disabled={t.disabled ? 'true' : undefined}\n tabindex={isActive ? 0 : -1}\n disabled={t.disabled}\n onClick={() => this.handleTabClick(t.value, t.disabled)}\n >\n {t.icon && <ts-icon name={t.icon} class=\"tabs__tab-icon\" />}\n {t.tab}\n </button>\n );\n })}\n </div>\n <div class=\"tabs__panels\" part=\"panels\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"ts-textarea.cjs.entry.js","mappings":"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","names":["generateId","h","Host"],"sources":["src/components/textarea/textarea.css?tag=ts-textarea&encapsulation=shadow","src/components/textarea/textarea.tsx"],"sourcesContent":["/* ==========================================================================\n ts-textarea — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-textarea-bg Textarea background\n --ts-textarea-border-color Default border color\n --ts-textarea-radius Border radius\n --ts-textarea-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-textarea-bg: var(--ts-color-bg-surface);\n --ts-textarea-border-color: var(--ts-color-border-default);\n --ts-textarea-radius: var(--ts-radius-md);\n --ts-textarea-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.textarea__label {\n display: block;\n margin-block-end: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n.textarea__required {\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Wrapper ---- */\n.textarea__wrapper {\n display: flex;\n border: 2px solid var(--ts-textarea-border-color);\n border-radius: var(--ts-textarea-radius);\n background-color: var(--ts-textarea-bg);\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n overflow: hidden;\n}\n\n.textarea__wrapper--focused {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-textarea-focus-ring);\n}\n\n.textarea__wrapper--error {\n border-color: var(--ts-color-danger-500);\n}\n\n.textarea__wrapper--error.textarea__wrapper--focused {\n box-shadow: 0 0 0 3px var(--ts-color-focus-ring-danger);\n}\n\n.textarea__wrapper--disabled {\n background-color: var(--ts-color-bg-disabled);\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* ---- Native Textarea ---- */\n.textarea__native {\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n font-family: inherit;\n color: var(--ts-color-text-primary);\n width: 100%;\n min-width: 0;\n line-height: var(--ts-line-height-normal);\n}\n\n.textarea__native::placeholder {\n color: var(--ts-color-text-tertiary);\n}\n\n.textarea__native:disabled {\n cursor: not-allowed;\n}\n\n/* ---- Resize ---- */\n:host([resize=\"none\"]) .textarea__native {\n resize: none;\n}\n\n:host([resize=\"vertical\"]) .textarea__native {\n resize: vertical;\n}\n\n:host([resize=\"horizontal\"]) .textarea__native {\n resize: horizontal;\n}\n\n:host([resize=\"both\"]) .textarea__native {\n resize: both;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .textarea__wrapper {\n border-radius: var(--ts-radius-sm);\n}\n:host([size=\"sm\"]) .textarea__native {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .textarea__native {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .textarea__native {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n:host([size=\"xl\"]) .textarea__wrapper {\n border-radius: var(--ts-radius-lg);\n}\n:host([size=\"xl\"]) .textarea__native {\n padding: var(--ts-spacing-4) var(--ts-spacing-5);\n font-size: var(--ts-font-size-xl);\n}\n\n/* ---- Help & Error Text ---- */\n.textarea__help,\n.textarea__error {\n margin-block-start: var(--ts-spacing-1);\n font-size: var(--ts-font-size-xs);\n line-height: var(--ts-line-height-normal);\n}\n\n.textarea__help {\n color: var(--ts-color-text-tertiary);\n}\n\n.textarea__error {\n color: var(--ts-color-danger-600);\n font-weight: var(--ts-font-weight-medium);\n}\n","import { Component, Prop, State, Event, Watch, h, Host, Element, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize, TsChangeEventDetail } from '../../types';\nimport { generateId } from '../../utils/aria';\n\n/**\n * @part base - The outer wrapper.\n * @part label - The label element.\n * @part textarea - The native textarea element.\n * @part help-text - The help text wrapper.\n * @part error-text - The error message wrapper.\n */\n@Component({\n tag: 'ts-textarea',\n styleUrl: 'textarea.css',\n shadow: true,\n})\nexport class TsTextarea {\n @Element() hostEl!: HTMLElement;\n\n private textareaEl?: HTMLTextAreaElement;\n private inputId = generateId('ts-textarea');\n\n /** The textarea's value. */\n @Prop({ mutable: true, reflect: true }) value = '';\n\n /** Placeholder text. */\n @Prop() placeholder?: string;\n\n /** Renders the textarea as disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Renders the textarea as readonly. */\n @Prop({ reflect: true }) readonly = false;\n\n /** The textarea size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Label text displayed above the textarea. */\n @Prop() label?: string;\n\n /** Help text displayed below the textarea. */\n @Prop() helpText?: string;\n\n /** Renders the textarea in an error state. */\n @Prop({ reflect: true }) error = false;\n\n /** Error message displayed below the textarea. */\n @Prop() errorMessage?: string;\n\n /** Makes the textarea required. */\n @Prop({ reflect: true }) required = false;\n\n /** Name attribute for form submission. */\n @Prop() name?: string;\n\n /** Number of visible text rows. */\n @Prop() rows = 3;\n\n /** Resize behavior. */\n @Prop({ reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical';\n\n /** Maximum character length. */\n @Prop() maxlength?: number;\n\n /** Whether the textarea is currently focused. */\n @State() hasFocus = false;\n\n /** Emitted on every keystroke. */\n @Event({ eventName: 'tsInput' }) tsInput!: EventEmitter<TsChangeEventDetail<string>>;\n\n /** Emitted when the value changes (on blur / commit). */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<TsChangeEventDetail<string>>;\n\n /** Emitted when the textarea gains focus. */\n @Event({ eventName: 'tsFocus' }) tsFocus!: EventEmitter<void>;\n\n /** Emitted when the textarea loses focus. */\n @Event({ eventName: 'tsBlur' }) tsBlur!: EventEmitter<void>;\n\n @Watch('value')\n handleValueChange(newValue: string, oldValue: string): void {\n if (newValue !== oldValue && this.textareaEl) {\n this.textareaEl.value = newValue;\n }\n }\n\n /** Programmatically focus the textarea. */\n @Method()\n async setFocus(): Promise<void> {\n this.textareaEl?.focus();\n }\n\n /** Programmatically select the textarea text. */\n @Method()\n async selectText(): Promise<void> {\n this.textareaEl?.select();\n }\n\n private handleInput = (event: Event): void => {\n const target = event.target as HTMLTextAreaElement;\n const previousValue = this.value;\n this.value = target.value;\n this.tsInput.emit({ value: this.value, previousValue });\n };\n\n private handleChange = (): void => {\n this.tsChange.emit({ value: this.value, previousValue: this.value });\n };\n\n private handleFocus = (): void => {\n this.hasFocus = true;\n this.tsFocus.emit();\n };\n\n private handleBlur = (): void => {\n this.hasFocus = false;\n this.tsBlur.emit();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasError = this.error && !!this.errorMessage;\n const labelId = `${this.inputId}-label`;\n const helpId = `${this.inputId}-help`;\n const errorId = `${this.inputId}-error`;\n\n return (\n <Host\n class={{\n 'ts-textarea': true,\n [`ts-textarea--${this.size}`]: true,\n 'ts-textarea--focused': this.hasFocus,\n 'ts-textarea--disabled': this.disabled,\n 'ts-textarea--error': this.error,\n }}\n >\n {this.label && (\n <label class=\"textarea__label\" part=\"label\" id={labelId} htmlFor={this.inputId}>\n {this.label}\n {this.required && <span class=\"textarea__required\" aria-hidden=\"true\"> *</span>}\n </label>\n )}\n\n <div\n class={{\n 'textarea__wrapper': true,\n 'textarea__wrapper--focused': this.hasFocus,\n 'textarea__wrapper--error': this.error,\n 'textarea__wrapper--disabled': this.disabled,\n }}\n part=\"base\"\n >\n <textarea\n ref={(el) => (this.textareaEl = el)}\n id={this.inputId}\n class=\"textarea__native\"\n part=\"textarea\"\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n maxlength={this.maxlength}\n name={this.name}\n rows={this.rows}\n aria-labelledby={this.label ? labelId : undefined}\n aria-describedby={hasError ? errorId : this.helpText ? helpId : undefined}\n aria-invalid={this.error ? 'true' : undefined}\n aria-required={this.required ? 'true' : undefined}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n\n {hasError && (\n <div class=\"textarea__error\" part=\"error-text\" id={errorId} role=\"alert\">\n {this.errorMessage}\n </div>\n )}\n\n {!hasError && this.helpText && (\n <div class=\"textarea__help\" part=\"help-text\" id={helpId}>\n {this.helpText}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"version":3}