@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
- {"version":3,"names":["treeCss","TsTree","selectable","handleKeyDown","event","items","this","getVisibleItems","length","focused","document","activeElement","currentIndex","indexOf","currentItem","key","preventDefault","focus","expanded","allItems","Array","from","hostEl","querySelectorAll","filter","item","parent","parentElement","tagName","render","h","Host","class","role","part"],"sources":["src/components/tree/tree.css?tag=ts-tree&encapsulation=shadow","src/components/tree/tree.tsx"],"sourcesContent":["/* ==========================================================================\n ts-tree — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-tree-indent Indentation per level\n --ts-tree-item-height Item height\n --ts-tree-active-bg Active item background\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-tree-indent: var(--ts-spacing-5);\n --ts-tree-item-height: 2rem;\n --ts-tree-active-bg: var(--ts-color-interactive-primary-subtle);\n}\n\n.tree__base {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n","import { Component, Prop, h, Host, Element, Listen } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-tree-item children.\n *\n * @part base - The tree container.\n */\n@Component({\n tag: 'ts-tree',\n styleUrl: 'tree.css',\n shadow: true,\n})\nexport class TsTree {\n @Element() hostEl!: HTMLElement;\n\n /** Enable item selection mode. */\n @Prop({ reflect: true }) selectable = false;\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent): void {\n const items = this.getVisibleItems();\n if (items.length === 0) return;\n\n const focused = document.activeElement as HTMLElement;\n const currentIndex = items.indexOf(focused);\n if (currentIndex === -1) return;\n\n const currentItem = items[currentIndex] as HTMLTsTreeItemElement;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (currentIndex < items.length - 1) {\n items[currentIndex + 1].focus();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n }\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (currentItem && !currentItem.expanded) {\n currentItem.expanded = true;\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (currentItem && currentItem.expanded) {\n currentItem.expanded = false;\n }\n break;\n case 'Home':\n event.preventDefault();\n items[0].focus();\n break;\n case 'End':\n event.preventDefault();\n items[items.length - 1].focus();\n break;\n }\n }\n\n private getVisibleItems(): HTMLElement[] {\n const allItems = Array.from(this.hostEl.querySelectorAll('ts-tree-item'));\n return allItems.filter(item => {\n let parent = item.parentElement;\n while (parent && parent !== this.hostEl) {\n if (parent.tagName === 'TS-TREE-ITEM' && !(parent as HTMLTsTreeItemElement).expanded) {\n return false;\n }\n parent = parent.parentElement;\n }\n return true;\n }) as HTMLElement[];\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{ 'ts-tree': true }}\n role=\"tree\"\n >\n <div class=\"tree__base\" part=\"base\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n\ninterface HTMLTsTreeItemElement extends HTMLElement {\n expanded: boolean;\n}\n"],"mappings":"yDAAA,MAAMA,EAAU,IAAM,4O,MCYTC,EAAM,M,qDAIQC,WAAa,MAGtC,aAAAC,CAAcC,GACZ,MAAMC,EAAQC,KAAKC,kBACnB,GAAIF,EAAMG,SAAW,EAAG,OAExB,MAAMC,EAAUC,SAASC,cACzB,MAAMC,EAAeP,EAAMQ,QAAQJ,GACnC,GAAIG,KAAiB,EAAI,OAEzB,MAAME,EAAcT,EAAMO,GAE1B,OAAQR,EAAMW,KACZ,IAAK,YACHX,EAAMY,iBACN,GAAIJ,EAAeP,EAAMG,OAAS,EAAG,CACnCH,EAAMO,EAAe,GAAGK,O,CAE1B,MACF,IAAK,UACHb,EAAMY,iBACN,GAAIJ,EAAe,EAAG,CACpBP,EAAMO,EAAe,GAAGK,O,CAE1B,MACF,IAAK,aACHb,EAAMY,iBACN,GAAIF,IAAgBA,EAAYI,SAAU,CACxCJ,EAAYI,SAAW,I,CAEzB,MACF,IAAK,YACHd,EAAMY,iBACN,GAAIF,GAAeA,EAAYI,SAAU,CACvCJ,EAAYI,SAAW,K,CAEzB,MACF,IAAK,OACHd,EAAMY,iBACNX,EAAM,GAAGY,QACT,MACF,IAAK,MACHb,EAAMY,iBACNX,EAAMA,EAAMG,OAAS,GAAGS,QACxB,M,CAIE,eAAAV,GACN,MAAMY,EAAWC,MAAMC,KAAKf,KAAKgB,OAAOC,iBAAiB,iBACzD,OAAOJ,EAASK,QAAOC,IACrB,IAAIC,EAASD,EAAKE,cAClB,MAAOD,GAAUA,IAAWpB,KAAKgB,OAAQ,CACvC,GAAII,EAAOE,UAAY,iBAAoBF,EAAiCR,SAAU,CACpF,OAAO,K,CAETQ,EAASA,EAAOC,a,CAElB,OAAO,IAAI,G,CAKf,MAAAE,GACE,OACEC,EAACC,EAAI,CAAAhB,IAAA,2CACHiB,MAAO,CAAE,UAAW,MACpBC,KAAK,QAELH,EAAA,OAAAf,IAAA,2CAAKiB,MAAM,aAAaE,KAAK,QAC3BJ,EAAA,QAAAf,IAAA,8C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["containerCss","TsContainer","size","padding","render","h","Host","key","class","this"],"sources":["src/components/container/container.css?tag=ts-container&encapsulation=shadow","src/components/container/container.tsx"],"sourcesContent":["/* ==========================================================================\n ts-container — Shadow DOM Scoped Styles\n\n Centered max-width container with responsive padding.\n\n Component tokens (Tier 3):\n --ts-container-padding Horizontal padding\n ========================================================================== */\n\n:host {\n display: block;\n margin-inline: auto;\n width: 100%;\n box-sizing: border-box;\n\n --ts-container-padding: var(--ts-grid-margin);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n max-width: 640px;\n}\n\n:host([size=\"md\"]) {\n max-width: 768px;\n}\n\n:host([size=\"lg\"]) {\n max-width: 1024px;\n}\n\n:host([size=\"xl\"]) {\n max-width: 1280px;\n}\n\n:host([size=\"full\"]) {\n max-width: 100%;\n}\n\n/* ---- Padding ---- */\n:host(:not(.ts-container--no-padding)) {\n padding-inline: var(--ts-container-padding);\n}\n\n:host(.ts-container--no-padding) {\n padding-inline: 0;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for container content.\n *\n * @part base - The container element.\n */\n@Component({\n tag: 'ts-container',\n styleUrl: 'container.css',\n shadow: true,\n})\nexport class TsContainer {\n /** The maximum width of the container. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' | 'xl' | 'full' = 'lg';\n\n /** Whether to apply horizontal padding. */\n @Prop({ reflect: true }) padding: boolean = true;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-container': true,\n 'ts-container--no-padding': !this.padding,\n }}\n >\n <slot />\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAe,IAAM,8a,MCYdC,EAAW,M,yBAEGC,KAA2C,KAG3CC,QAAmB,KAG5C,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,eAAgB,KAChB,4BAA6BC,KAAKN,UAGpCE,EAAA,QAAAE,IAAA,6C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["breadcrumbCss","TsBreadcrumb","separator","componentDidRender","items","this","hostEl","querySelectorAll","forEach","item","index","length","setAttribute","removeAttribute","render","h","Host","key","class","part"],"sources":["src/components/breadcrumb/breadcrumb.css?tag=ts-breadcrumb&encapsulation=shadow","src/components/breadcrumb/breadcrumb.tsx"],"sourcesContent":["/* ==========================================================================\n ts-breadcrumb — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-breadcrumb-separator-color Separator color\n --ts-breadcrumb-link-color Link color\n ========================================================================== */\n\n:host {\n display: block;\n\n --ts-breadcrumb-separator-color: var(--ts-color-text-tertiary);\n --ts-breadcrumb-link-color: var(--ts-color-interactive-primary);\n}\n\n.breadcrumb__list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--ts-spacing-1);\n list-style: none;\n margin: 0;\n padding: 0;\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n}\n","import { Component, Prop, h, Host, Element } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-breadcrumb-item children.\n *\n * @part nav - The nav element.\n * @part list - The ordered list element.\n */\n@Component({\n tag: 'ts-breadcrumb',\n styleUrl: 'breadcrumb.css',\n shadow: true,\n})\nexport class TsBreadcrumb {\n @Element() hostEl!: HTMLElement;\n\n /** The separator character between breadcrumb items. */\n @Prop() separator = '/';\n\n componentDidRender(): void {\n const items = this.hostEl.querySelectorAll('ts-breadcrumb-item');\n items.forEach((item, index) => {\n if (index < items.length - 1) {\n item.setAttribute('separator', this.separator);\n } else {\n item.removeAttribute('separator');\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host class=\"ts-breadcrumb\">\n <nav part=\"nav\" aria-label=\"Breadcrumb\">\n <ol part=\"list\" class=\"breadcrumb__list\">\n <slot />\n </ol>\n </nav>\n </Host>\n );\n }\n}\n"],"mappings":"+CAAA,MAAMA,EAAgB,IAAM,wV,MCafC,EAAY,M,qDAIfC,UAAY,IAEpB,kBAAAC,GACE,MAAMC,EAAQC,KAAKC,OAAOC,iBAAiB,sBAC3CH,EAAMI,SAAQ,CAACC,EAAMC,KACnB,GAAIA,EAAQN,EAAMO,OAAS,EAAG,CAC5BF,EAAKG,aAAa,YAAaP,KAAKH,U,KAC/B,CACLO,EAAKI,gBAAgB,Y,KAM3B,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,MAAM,iBACVH,EAAA,OAAAE,IAAA,2CAAKE,KAAK,MAAK,aAAY,cACzBJ,EAAA,MAAAE,IAAA,2CAAIE,KAAK,OAAOD,MAAM,oBACpBH,EAAA,QAAAE,IAAA,+C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["switchGroupCss","TsSwitchGroup","value","size","disabled","fullWidth","tsChange","onValueChange","this","syncOptions","handleOptionSelect","event","stopPropagation","selectOption","detail","handleKeyDown","options","getOptions","enabledOptions","filter","o","length","currentIndex","findIndex","key","preventDefault","nextIndex","prevIndex","componentDidLoad","Array","from","hostEl","querySelectorAll","emit","forEach","option","active","handleSlotChange","render","h","Host","class","role","part","onSlotchange"],"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"],"mappings":"gEAAA,MAAMA,EAAiB,IAAM,qvB,MCchBC,EAAa,M,sFAIgBC,MAGfC,KAAe,KAGfC,SAAW,MAGXC,UAAY,MAGHC,SAGlC,aAAAC,GACEC,KAAKC,a,CAIP,kBAAAC,CAAmBC,GACjBA,EAAMC,kBACN,GAAIJ,KAAKJ,SAAU,OACnBI,KAAKK,aAAaF,EAAMG,OAAOZ,M,CAIjC,aAAAa,CAAcJ,GACZ,GAAIH,KAAKJ,SAAU,OAEnB,MAAMY,EAAUR,KAAKS,aACrB,MAAMC,EAAiBF,EAAQG,QAAOC,IAAMA,EAAEhB,WAC9C,GAAIc,EAAeG,SAAW,EAAG,OAEjC,MAAMC,EAAeJ,EAAeK,WAAUH,GAAKA,EAAElB,QAAUM,KAAKN,QAEpE,OAAQS,EAAMa,KACZ,IAAK,aACL,IAAK,YACHb,EAAMc,iBACN,CACE,MAAMC,GAAaJ,EAAe,GAAKJ,EAAeG,OACtDb,KAAKK,aAAaK,EAAeQ,GAAWxB,M,CAE9C,MACF,IAAK,YACL,IAAK,UACHS,EAAMc,iBACN,CACE,MAAME,GAAaL,EAAe,EAAIJ,EAAeG,QAAUH,EAAeG,OAC9Eb,KAAKK,aAAaK,EAAeS,GAAWzB,M,CAE9C,MACF,IAAK,OACHS,EAAMc,iBACNjB,KAAKK,aAAaK,EAAe,GAAGhB,OACpC,MACF,IAAK,MACHS,EAAMc,iBACNjB,KAAKK,aAAaK,EAAeA,EAAeG,OAAS,GAAGnB,OAC5D,M,CAIN,gBAAA0B,GACEpB,KAAKC,a,CAGC,UAAAQ,GACN,OAAOY,MAAMC,KAAKtB,KAAKuB,OAAOC,iBAAiB,oB,CAGzC,YAAAnB,CAAaX,GACnB,GAAIA,IAAUM,KAAKN,MAAO,CACxBM,KAAKN,MAAQA,EACbM,KAAKF,SAAS2B,KAAK,CAAE/B,S,CAEvBM,KAAKC,a,CAGC,WAAAA,GACN,MAAMO,EAAUR,KAAKS,aACrBD,EAAQkB,SAAQC,IACbA,EAA0CC,OAASD,EAAOjC,QAAUM,KAAKN,KAAK,G,CAI3EmC,iBAAmB,KACzB7B,KAAKC,aAAa,EAIpB,MAAA6B,GACE,OACEC,EAACC,EAAI,CAAAhB,IAAA,2CACHiB,MAAO,CACL,kBAAmB,KACnB,CAAC,oBAAoBjC,KAAKL,QAAS,KACnC,4BAA6BK,KAAKJ,SAClC,8BAA+BI,KAAKH,WAEtCqC,KAAK,cAELH,EAAA,OAAAf,IAAA,2CAAKiB,MAAM,qBAAqBE,KAAK,QACnCJ,EAAA,QAAAf,IAAA,2CAAMoB,aAAcpC,KAAK6B,oB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["navItemCss","TsNavItem","href","active","disabled","icon","tsSelect","handleClick","event","this","preventDefault","stopPropagation","emit","render","Tag","attrs","undefined","type","h","Host","key","class","part","role","onClick","name","size"],"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"],"mappings":"yDAAA,MAAMA,EAAa,IAAM,uuC,MCgBZC,EAAS,M,0DAEZC,KAGiBC,OAAS,MAGTC,SAAW,MAG5BC,KAG0BC,SAE1BC,YAAeC,IACrB,GAAIC,KAAKL,SAAU,CACjBI,EAAME,iBACNF,EAAMG,kBACN,M,CAEFF,KAAKH,SAASM,MAAM,EAItB,MAAAC,GACE,MAAMC,EAAML,KAAKP,KAAO,IAAM,SAC9B,MAAMa,EAAQN,KAAKP,KACf,CAAEA,KAAMO,KAAKL,SAAWY,UAAYP,KAAKP,MACzC,CAAEe,KAAM,SAAmBb,SAAUK,KAAKL,UAE9C,OACEc,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,cAAe,KACf,sBAAuBZ,KAAKN,OAC5B,wBAAyBM,KAAKL,WAGhCc,EAAA,MAAAE,IAAA,2CAAIC,MAAM,oBAAoBC,KAAK,OAAOC,KAAK,YAC7CL,EAACJ,EAAG,CAAAM,IAAA,8CACEL,EACJM,MAAM,iBACNC,KAAK,OAAM,eACGb,KAAKN,OAAS,OAASa,UAAS,gBAC/BP,KAAKL,SAAW,OAASY,UACxCQ,QAASf,KAAKF,aAEbE,KAAKJ,MACJa,EAAA,QAAAE,IAAA,2CAAMC,MAAM,iBAAiBC,KAAK,OAAM,cAAa,QACnDJ,EAAA,WAAAE,IAAA,2CAASK,KAAMhB,KAAKJ,KAAMqB,KAAK,QAGnCR,EAAA,QAAAE,IAAA,2CAAMC,MAAM,kBAAkBC,KAAK,SACjCJ,EAAA,QAAAE,IAAA,gD","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["popoverCss","TsPopover","popoverId","generateId","outsideClickHandler","escapeHandler","open","placement","trigger","dismissible","tsOpen","tsClose","isVisible","handleOpenChange","newValue","this","emit","addGlobalListeners","removeGlobalListeners","connectedCallback","disconnectedCallback","show","hide","event","path","composedPath","includes","hostEl","key","setTimeout","document","addEventListener","removeEventListener","undefined","handleTriggerClick","handleTriggerKeydown","preventDefault","handleMouseEnter","handleMouseLeave","render","h","Host","class","onMouseEnter","onMouseLeave","part","onClick","onKeyDown","name","popover__panel","id","role"],"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"],"mappings":"oGAAA,MAAMA,EAAa,IAAM,u+E,MCmBZC,EAAS,M,iHAGZC,UAAYC,EAAW,cACvBC,oBACAC,cAGgCC,KAAO,MAGtBC,UAAgC,SAGjDC,QAAwC,QAGxCC,YAAc,KAGUC,OAGCC,QAExBC,UAAY,MAGrB,gBAAAC,CAAiBC,GACfC,KAAKH,UAAYE,EACjB,GAAIA,EAAU,CACZC,KAAKL,OAAOM,OACZD,KAAKE,oB,KACA,CACLF,KAAKJ,QAAQK,OACbD,KAAKG,uB,EAIT,iBAAAC,GACE,GAAIJ,KAAKT,KAAM,CACbS,KAAKH,UAAY,KACjBG,KAAKE,oB,EAIT,oBAAAG,GACEL,KAAKG,uB,CAKP,UAAMG,GACJN,KAAKT,KAAO,I,CAKd,UAAMgB,GACJP,KAAKT,KAAO,K,CAGN,kBAAAW,GACN,GAAIF,KAAKN,YAAa,CACpBM,KAAKX,oBAAuBmB,IAC1B,MAAMC,EAAOD,EAAME,eACnB,IAAKD,EAAKE,SAASX,KAAKY,QAAS,CAC/BZ,KAAKT,KAAO,K,GAGhBS,KAAKV,cAAiBkB,IACpB,GAAIA,EAAMK,MAAQ,SAAU,CAC1Bb,KAAKT,KAAO,K,GAIhBuB,YAAW,KACTC,SAASC,iBAAiB,QAAShB,KAAKX,qBACxC0B,SAASC,iBAAiB,UAAWhB,KAAKV,cAAe,GACxD,E,EAIC,qBAAAa,GACN,GAAIH,KAAKX,oBAAqB,CAC5B0B,SAASE,oBAAoB,QAASjB,KAAKX,qBAC3CW,KAAKX,oBAAsB6B,S,CAE7B,GAAIlB,KAAKV,cAAe,CACtByB,SAASE,oBAAoB,UAAWjB,KAAKV,eAC7CU,KAAKV,cAAgB4B,S,EAIjBC,mBAAqB,KAC3B,GAAInB,KAAKP,UAAY,QAAS,CAC5BO,KAAKT,MAAQS,KAAKT,I,GAId6B,qBAAwBZ,IAC9B,GAAIR,KAAKP,UAAY,UAAYe,EAAMK,MAAQ,SAAWL,EAAMK,MAAQ,KAAM,CAC5EL,EAAMa,iBACNrB,KAAKT,MAAQS,KAAKT,I,GAId+B,iBAAmB,KACzB,GAAItB,KAAKP,UAAY,QAAS,CAC5BO,KAAKT,KAAO,I,GAIRgC,iBAAmB,KACzB,GAAIvB,KAAKP,UAAY,QAAS,CAC5BO,KAAKT,KAAO,K,GAKhB,MAAAiC,GACE,OACEC,EAACC,EAAI,CAAAb,IAAA,2CACHc,MAAO,CACL,aAAc,KACd,mBAAoB3B,KAAKH,UACzB,CAAC,eAAeG,KAAKR,aAAc,MAErCoC,aAAc5B,KAAKsB,iBACnBO,aAAc7B,KAAKuB,kBAEnBE,EAAA,QAAAZ,IAAA,2CACEc,MAAM,mBACNG,KAAK,UAAS,gBACC9B,KAAKH,UAAY,OAAS,QAAO,gBACjCG,KAAKb,UACpB4C,QAAS/B,KAAKmB,mBACda,UAAWhC,KAAKoB,sBAEhBK,EAAA,QAAAZ,IAAA,2CAAMoB,KAAK,aAGbR,EAAA,OAAAZ,IAAA,2CACEc,MAAO,CACLO,eAAkB,KAClB,CAAC,mBAAmBlC,KAAKR,aAAc,KACvC,0BAA2BQ,KAAKH,WAElCiC,KAAK,OACLK,GAAInC,KAAKb,UACTiD,KAAK,SAAQ,eACCpC,KAAKH,UAAY,OAASqB,WAExCO,EAAA,OAAAZ,IAAA,2CAAKc,MAAM,iBAAiBG,KAAK,UACjCL,EAAA,OAAAZ,IAAA,2CAAKc,MAAM,oBACTF,EAAA,QAAAZ,IAAA,+C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["alertCss","TsAlert","variant","closable","isVisible","tsClose","close","this","emit","show","handleClose","renderDefaultIcon","icons","info","success","warning","danger","primary","secondary","neutral","h","render","Host","class","role","part","name","type","onClick"],"sources":["src/components/alert/alert.css?tag=ts-alert&encapsulation=shadow","src/components/alert/alert.tsx"],"sourcesContent":["/* ==========================================================================\n ts-alert — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-alert-radius Border radius\n --ts-alert-font-size Message font size\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-alert-radius: var(--ts-radius-lg);\n --ts-alert-font-size: var(--ts-font-size-sm);\n}\n\n.alert__base {\n display: flex;\n align-items: flex-start;\n gap: var(--ts-spacing-3);\n padding: var(--ts-spacing-4) var(--ts-spacing-4);\n border-radius: var(--ts-alert-radius);\n border: 1px solid transparent;\n border-inline-start: 3px solid transparent;\n font-size: var(--ts-alert-font-size);\n line-height: var(--ts-line-height-normal);\n}\n\n/* ---- Variants ---- */\n:host([variant=\"info\"]) .alert__base {\n background-color: var(--ts-color-info-bg);\n border-color: var(--ts-color-info-border);\n border-inline-start-color: var(--ts-color-info-500);\n color: var(--ts-color-info-600);\n}\n\n:host([variant=\"success\"]) .alert__base {\n background-color: var(--ts-color-success-bg);\n border-color: var(--ts-color-success-border);\n border-inline-start-color: var(--ts-color-success-500);\n color: var(--ts-color-success-600);\n}\n\n:host([variant=\"warning\"]) .alert__base {\n background-color: var(--ts-color-warning-bg);\n border-color: var(--ts-color-warning-border);\n border-inline-start-color: var(--ts-color-warning-500);\n color: var(--ts-color-warning-600);\n}\n\n:host([variant=\"danger\"]) .alert__base {\n background-color: var(--ts-color-danger-bg);\n border-color: var(--ts-color-danger-border);\n border-inline-start-color: var(--ts-color-danger-500);\n color: var(--ts-color-danger-600);\n}\n\n:host([variant=\"neutral\"]) .alert__base {\n background-color: var(--ts-color-bg-subtle);\n border-color: var(--ts-color-border-subtle);\n border-inline-start-color: var(--ts-color-neutral-400);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Icon ---- */\n.alert__icon {\n display: flex;\n align-items: center;\n font-size: 1.25em;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n/* ---- Message ---- */\n.alert__message {\n flex: 1;\n min-width: 0;\n}\n\n/* ---- Action ---- */\n.alert__action {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.alert__action:empty {\n display: none;\n}\n\n/* ---- Close Button ---- */\n.alert__close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 1.5rem;\n height: 1.5rem;\n border: none;\n border-radius: var(--ts-radius-sm);\n background: transparent;\n color: currentColor;\n opacity: 0.6;\n cursor: pointer;\n font-size: 0.8em;\n transition: opacity var(--ts-transition-fast);\n padding: 0;\n line-height: 1;\n}\n\n.alert__close:hover {\n opacity: 1;\n}\n\n.alert__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n opacity: 1;\n}\n","import { Component, Prop, Event, State, h, Host, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsVariant } from '../../types';\n\n/**\n * @slot - Default slot for alert message content.\n * @slot icon - Custom icon to override the default variant icon.\n * @slot action - Action buttons or links displayed at the end.\n *\n * @part base - The alert container.\n * @part icon - The icon wrapper.\n * @part message - The message wrapper.\n * @part action - The action slot wrapper.\n * @part close - The close button.\n */\n@Component({\n tag: 'ts-alert',\n styleUrl: 'alert.css',\n shadow: true,\n})\nexport class TsAlert {\n /** The alert's semantic variant. */\n @Prop({ reflect: true }) variant: TsVariant = 'info';\n\n /** Whether the alert can be dismissed. */\n @Prop() closable = false;\n\n /** Whether the alert is currently visible. */\n @State() isVisible = true;\n\n /** Emitted when the alert is closed. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n /** Programmatically close the alert. */\n @Method()\n async close(): Promise<void> {\n this.isVisible = false;\n this.tsClose.emit();\n }\n\n /** Programmatically show the alert. */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true;\n }\n\n private handleClose = (): void => {\n this.close();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderDefaultIcon() {\n const icons: Record<string, string> = {\n info: 'ℹ',\n success: '✓',\n warning: '⚠',\n danger: '✕',\n primary: 'ℹ',\n secondary: 'ℹ',\n neutral: 'ℹ',\n };\n return <span aria-hidden=\"true\">{icons[this.variant] || 'ℹ'}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n if (!this.isVisible) return null;\n\n return (\n <Host\n class={{\n 'ts-alert': true,\n [`ts-alert--${this.variant}`]: true,\n }}\n role=\"alert\"\n >\n <div class=\"alert__base\" part=\"base\">\n <div class=\"alert__icon\" part=\"icon\">\n <slot name=\"icon\">{this.renderDefaultIcon()}</slot>\n </div>\n\n <div class=\"alert__message\" part=\"message\">\n <slot />\n </div>\n\n <div class=\"alert__action\" part=\"action\">\n <slot name=\"action\" />\n </div>\n\n {this.closable && (\n <button\n class=\"alert__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Close alert\"\n onClick={this.handleClose}\n >\n ✕\n </button>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"oDAAA,MAAMA,EAAW,IAAM,8lE,MCoBVC,EAAO,M,wDAEOC,QAAqB,OAGtCC,SAAW,MAGVC,UAAY,KAGYC,QAIjC,WAAMC,GACJC,KAAKH,UAAY,MACjBG,KAAKF,QAAQG,M,CAKf,UAAMC,GACJF,KAAKH,UAAY,I,CAGXM,YAAc,KACpBH,KAAKD,OAAO,EAIN,iBAAAK,GACN,MAAMC,EAAgC,CACpCC,KAAM,IACNC,QAAS,IACTC,QAAS,IACTC,OAAQ,IACRC,QAAS,IACTC,UAAW,IACXC,QAAS,KAEX,OAAOC,EAAA,sBAAkB,QAAQR,EAAML,KAAKL,UAAY,I,CAI1D,MAAAmB,GACE,IAAKd,KAAKH,UAAW,OAAO,KAE5B,OACEgB,EAACE,EAAI,CACHC,MAAO,CACL,WAAY,KACZ,CAAC,aAAahB,KAAKL,WAAY,MAEjCsB,KAAK,SAELJ,EAAA,OAAKG,MAAM,cAAcE,KAAK,QAC5BL,EAAA,OAAKG,MAAM,cAAcE,KAAK,QAC5BL,EAAA,QAAMM,KAAK,QAAQnB,KAAKI,sBAG1BS,EAAA,OAAKG,MAAM,iBAAiBE,KAAK,WAC/BL,EAAA,cAGFA,EAAA,OAAKG,MAAM,gBAAgBE,KAAK,UAC9BL,EAAA,QAAMM,KAAK,YAGZnB,KAAKJ,UACJiB,EAAA,UACEG,MAAM,eACNE,KAAK,QACLE,KAAK,SAAQ,aACF,cACXC,QAASrB,KAAKG,aAAW,M","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["sliderCss","TsSlider","trackEl","dragging","value","min","max","step","disabled","label","showValue","size","tsInput","tsChange","percentage","range","this","clampAndStep","val","stepped","Math","round","updateValueFromPosition","clientX","rect","getBoundingClientRect","ratio","left","width","rawValue","handleMouseDown","event","preventDefault","emit","handleMouseMove","e","handleMouseUp","document","removeEventListener","addEventListener","handleKeyDown","newValue","bigStep","key","render","percent","h","Host","class","part","ref","el","onMouseDown","style","role","tabindex","undefined","insetInlineStart","onKeyDown"],"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"],"mappings":"gEAAA,MAAMA,EAAY,IAAM,ygE,MCeXC,EAAQ,M,qHAGXC,QAECC,SAAW,MAGoBC,MAAQ,EAGxCC,IAAM,EAGNC,IAAM,IAGNC,KAAO,EAGUC,SAAW,MAG5BC,MAGiBC,UAAY,MAGZC,KAAe,KAGPC,QAGCC,SAElC,cAAYC,GACV,MAAMC,EAAQC,KAAKV,IAAMU,KAAKX,IAC9B,GAAIU,GAAS,EAAG,OAAO,EACvB,OAASC,KAAKZ,MAAQY,KAAKX,KAAOU,EAAS,G,CAGrC,YAAAE,CAAaC,GAEnB,MAAMC,EAAUC,KAAKC,OAAOH,EAAMF,KAAKX,KAAOW,KAAKT,MAAQS,KAAKT,KAAOS,KAAKX,IAE5E,OAAOe,KAAKf,IAAIW,KAAKV,IAAKc,KAAKd,IAAIU,KAAKX,IAAKc,G,CAGvC,uBAAAG,CAAwBC,GAC9B,IAAKP,KAAKd,QAAS,OACnB,MAAMsB,EAAOR,KAAKd,QAAQuB,wBAC1B,MAAMC,GAASH,EAAUC,EAAKG,MAAQH,EAAKI,MAC3C,MAAMC,EAAWb,KAAKX,IAAMqB,GAASV,KAAKV,IAAMU,KAAKX,KACrDW,KAAKZ,MAAQY,KAAKC,aAAaY,E,CAGzBC,gBAAmBC,IACzB,GAAIf,KAAKR,SAAU,OACnBuB,EAAMC,iBACNhB,KAAKb,SAAW,KAChBa,KAAKM,wBAAwBS,EAAMR,SACnCP,KAAKJ,QAAQqB,KAAK,CAAE7B,MAAOY,KAAKZ,QAEhC,MAAM8B,EAAmBC,IACvBnB,KAAKM,wBAAwBa,EAAEZ,SAC/BP,KAAKJ,QAAQqB,KAAK,CAAE7B,MAAOY,KAAKZ,OAAQ,EAG1C,MAAMgC,EAAgB,KACpBpB,KAAKb,SAAW,MAChBa,KAAKH,SAASoB,KAAK,CAAE7B,MAAOY,KAAKZ,QACjCiC,SAASC,oBAAoB,YAAaJ,GAC1CG,SAASC,oBAAoB,UAAWF,EAAc,EAGxDC,SAASE,iBAAiB,YAAaL,GACvCG,SAASE,iBAAiB,UAAWH,EAAc,EAG7CI,cAAiBT,IACvB,GAAIf,KAAKR,SAAU,OAEnB,IAAIiC,EAAWzB,KAAKZ,MACpB,MAAMsC,EAAU1B,KAAKT,KAAO,GAE5B,OAAQwB,EAAMY,KACZ,IAAK,aACL,IAAK,UACHZ,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQY,KAAKT,MAC/C,MACF,IAAK,YACL,IAAK,YACHwB,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQY,KAAKT,MAC/C,MACF,IAAK,SACHwB,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQsC,GAC1C,MACF,IAAK,WACHX,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQsC,GAC1C,MACF,IAAK,OACHX,EAAMC,iBACNS,EAAWzB,KAAKX,IAChB,MACF,IAAK,MACH0B,EAAMC,iBACNS,EAAWzB,KAAKV,IAChB,MACF,QACE,OAGJ,GAAImC,IAAazB,KAAKZ,MAAO,CAC3BY,KAAKZ,MAAQqC,EACbzB,KAAKJ,QAAQqB,KAAK,CAAE7B,MAAOY,KAAKZ,QAChCY,KAAKH,SAASoB,KAAK,CAAE7B,MAAOY,KAAKZ,O,GAKrC,MAAAwC,GACE,MAAMC,EAAU7B,KAAKF,WAErB,OACEgC,EAACC,EAAI,CAAAJ,IAAA,2CACHK,MAAO,CACL,YAAa,KACb,CAAC,cAAchC,KAAKL,QAAS,KAC7B,sBAAuBK,KAAKR,WAG7BQ,KAAKP,OACJqC,EAAA,SAAAH,IAAA,2CAAOK,MAAM,gBAAgBC,KAAK,SAC/BjC,KAAKP,MACLO,KAAKN,WAAaoC,EAAA,QAAAH,IAAA,2CAAMK,MAAM,iBAAiBhC,KAAKZ,SAGvDY,KAAKP,OAASO,KAAKN,WACnBoC,EAAA,QAAAH,IAAA,2CAAMK,MAAM,gBAAgBC,KAAK,QAAO,cAAa,QAClDjC,KAAKZ,OAGV0C,EAAA,OAAAH,IAAA,2CACEK,MAAM,gBACNC,KAAK,QACLC,IAAMC,GAAQnC,KAAKd,QAAUiD,EAC7BC,YAAapC,KAAKc,iBAElBgB,EAAA,OAAAH,IAAA,2CACEK,MAAM,eACNC,KAAK,OACLI,MAAO,CAAEzB,MAAO,GAAGiB,QAErBC,EAAA,OAAAH,IAAA,2CACEK,MAAM,gBACNC,KAAK,QACLK,KAAK,SACLC,SAAUvC,KAAKR,UAAW,EAAK,EAAC,gBACjBQ,KAAKZ,MAAK,gBACVY,KAAKX,IAAG,gBACRW,KAAKV,IAAG,aACXU,KAAKP,OAAS+C,UAAS,gBACpBxC,KAAKR,SAAW,OAASgD,UACxCH,MAAO,CAAEI,iBAAkB,GAAGZ,MAC9Ba,UAAW1C,KAAKwB,iB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["bannerCss","TsBanner","variant","dismissible","icon","sticky","isVisible","tsClose","close","this","emit","show","handleClose","renderDefaultIcon","icons","info","success","warning","danger","primary","secondary","neutral","h","render","role","ariaLive","Host","class","part","name","type","onClick"],"sources":["src/components/banner/banner.css?tag=ts-banner&encapsulation=shadow","src/components/banner/banner.tsx"],"sourcesContent":["/* ==========================================================================\n ts-banner — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-banner-bg Background color\n --ts-banner-border-color Border color\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-banner-bg: var(--ts-color-info-bg);\n --ts-banner-border-color: var(--ts-color-info-border);\n}\n\n:host([sticky]) {\n position: sticky;\n inset-block-start: 0;\n z-index: var(--ts-z-sticky, 100);\n}\n\n.banner__base {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-3);\n padding-inline: var(--ts-spacing-4);\n padding-block: var(--ts-spacing-3);\n background-color: var(--ts-banner-bg);\n border-block-end: 1px solid var(--ts-banner-border-color);\n font-size: var(--ts-font-size-sm);\n line-height: var(--ts-line-height-normal);\n inline-size: 100%;\n}\n\n/* ---- Variants ---- */\n:host([variant=\"info\"]) {\n --ts-banner-bg: var(--ts-color-info-bg);\n --ts-banner-border-color: var(--ts-color-info-border);\n}\n:host([variant=\"info\"]) .banner__base {\n color: var(--ts-color-info-600);\n}\n\n:host([variant=\"success\"]) {\n --ts-banner-bg: var(--ts-color-success-bg);\n --ts-banner-border-color: var(--ts-color-success-border);\n}\n:host([variant=\"success\"]) .banner__base {\n color: var(--ts-color-success-600);\n}\n\n:host([variant=\"warning\"]) {\n --ts-banner-bg: var(--ts-color-warning-bg);\n --ts-banner-border-color: var(--ts-color-warning-border);\n}\n:host([variant=\"warning\"]) .banner__base {\n color: var(--ts-color-warning-600);\n}\n\n:host([variant=\"danger\"]) {\n --ts-banner-bg: var(--ts-color-danger-bg);\n --ts-banner-border-color: var(--ts-color-danger-border);\n}\n:host([variant=\"danger\"]) .banner__base {\n color: var(--ts-color-danger-600);\n}\n\n:host([variant=\"neutral\"]) {\n --ts-banner-bg: var(--ts-color-bg-subtle);\n --ts-banner-border-color: var(--ts-color-border-subtle);\n}\n:host([variant=\"neutral\"]) .banner__base {\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Icon ---- */\n.banner__icon {\n display: flex;\n align-items: center;\n font-size: 1.15em;\n flex-shrink: 0;\n}\n\n/* ---- Message ---- */\n.banner__message {\n flex: 1;\n min-inline-size: 0;\n}\n\n/* ---- Action ---- */\n.banner__action {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.banner__action:empty {\n display: none;\n}\n\n/* ---- Close Button ---- */\n.banner__close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n inline-size: 1.5rem;\n block-size: 1.5rem;\n border: none;\n border-radius: var(--ts-radius-sm);\n background: transparent;\n color: currentColor;\n opacity: 0.6;\n cursor: pointer;\n font-size: 0.8em;\n transition: opacity var(--ts-transition-fast);\n padding: 0;\n line-height: 1;\n}\n\n.banner__close:hover {\n opacity: 1;\n}\n\n.banner__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n opacity: 1;\n}\n","import { Component, Prop, Event, State, h, Host, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsVariant } from '../../types';\n\n/**\n * @slot - Default slot for message content.\n * @slot action - CTA button.\n *\n * @part base - The banner container.\n * @part icon - The icon wrapper.\n * @part message - The message wrapper.\n * @part action - The action slot wrapper.\n * @part close - The close/dismiss button.\n */\n@Component({\n tag: 'ts-banner',\n styleUrl: 'banner.css',\n shadow: true,\n})\nexport class TsBanner {\n /** The banner's semantic variant. */\n @Prop({ reflect: true }) variant: TsVariant = 'info';\n\n /** Whether the banner can be dismissed. */\n @Prop({ reflect: true }) dismissible = false;\n\n /** Optional Lucide icon name. */\n @Prop() icon?: string;\n\n /** Whether the banner sticks to the top of the viewport. */\n @Prop({ reflect: true }) sticky = false;\n\n /** Whether the banner is currently visible. */\n @State() isVisible = true;\n\n /** Emitted when the banner is dismissed. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n /** Programmatically close the banner. */\n @Method()\n async close(): Promise<void> {\n this.isVisible = false;\n this.tsClose.emit();\n }\n\n /** Programmatically show the banner. */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true;\n }\n\n private handleClose = (): void => {\n this.close();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderDefaultIcon() {\n const icons: Record<string, string> = {\n info: '\\u2139',\n success: '\\u2713',\n warning: '\\u26A0',\n danger: '\\u2715',\n primary: '\\u2139',\n secondary: '\\u2139',\n neutral: '\\u2139',\n };\n return <span aria-hidden=\"true\">{icons[this.variant] || '\\u2139'}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n if (!this.isVisible) return null;\n\n const role = this.variant === 'danger' ? 'alert' : 'banner';\n const ariaLive = this.variant === 'danger' ? 'assertive' : 'polite';\n\n return (\n <Host\n class={{\n 'ts-banner': true,\n [`ts-banner--${this.variant}`]: true,\n 'ts-banner--sticky': this.sticky,\n }}\n role={role}\n aria-live={ariaLive}\n >\n <div class=\"banner__base\" part=\"base\">\n <div class=\"banner__icon\" part=\"icon\">\n {this.icon ? <ts-icon name={this.icon} /> : this.renderDefaultIcon()}\n </div>\n\n <div class=\"banner__message\" part=\"message\">\n <slot />\n </div>\n\n <div class=\"banner__action\" part=\"action\">\n <slot name=\"action\" />\n </div>\n\n {this.dismissible && (\n <button\n class=\"banner__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss banner\"\n onClick={this.handleClose}\n >\n \\u2715\n </button>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"oDAAA,MAAMA,EAAY,IAAM,soE,MCmBXC,EAAQ,M,wDAEMC,QAAqB,OAGrBC,YAAc,MAG/BC,KAGiBC,OAAS,MAGzBC,UAAY,KAGYC,QAIjC,WAAMC,GACJC,KAAKH,UAAY,MACjBG,KAAKF,QAAQG,M,CAKf,UAAMC,GACJF,KAAKH,UAAY,I,CAGXM,YAAc,KACpBH,KAAKD,OAAO,EAIN,iBAAAK,GACN,MAAMC,EAAgC,CACpCC,KAAM,IACNC,QAAS,IACTC,QAAS,IACTC,OAAQ,IACRC,QAAS,IACTC,UAAW,IACXC,QAAS,KAEX,OAAOC,EAAA,sBAAkB,QAAQR,EAAML,KAAKP,UAAY,I,CAI1D,MAAAqB,GACE,IAAKd,KAAKH,UAAW,OAAO,KAE5B,MAAMkB,EAAOf,KAAKP,UAAY,SAAW,QAAU,SACnD,MAAMuB,EAAWhB,KAAKP,UAAY,SAAW,YAAc,SAE3D,OACEoB,EAACI,EAAI,CACHC,MAAO,CACL,YAAa,KACb,CAAC,cAAclB,KAAKP,WAAY,KAChC,oBAAqBO,KAAKJ,QAE5BmB,KAAMA,EAAI,YACCC,GAEXH,EAAA,OAAKK,MAAM,eAAeC,KAAK,QAC7BN,EAAA,OAAKK,MAAM,eAAeC,KAAK,QAC5BnB,KAAKL,KAAOkB,EAAA,WAASO,KAAMpB,KAAKL,OAAWK,KAAKI,qBAGnDS,EAAA,OAAKK,MAAM,kBAAkBC,KAAK,WAChCN,EAAA,cAGFA,EAAA,OAAKK,MAAM,iBAAiBC,KAAK,UAC/BN,EAAA,QAAMO,KAAK,YAGZpB,KAAKN,aACJmB,EAAA,UACEK,MAAM,gBACNC,KAAK,QACLE,KAAK,SAAQ,aACF,iBACXC,QAAStB,KAAKG,aAAW,Y","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["cardCss","TsCard","elevation","interactive","bordered","padding","render","h","Host","key","class","this","role","undefined","tabindex","part","name"],"sources":["src/components/card/card.css?tag=ts-card&encapsulation=shadow","src/components/card/card.tsx"],"sourcesContent":["/* ==========================================================================\n ts-card — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-card-bg Card background\n --ts-card-radius Border radius\n --ts-card-border-color Border color (when bordered)\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-card-bg: var(--ts-color-bg-elevated);\n --ts-card-radius: var(--ts-shape-container);\n --ts-card-border-color: var(--ts-color-border-subtle);\n}\n\n.card__base {\n border-radius: var(--ts-card-radius);\n background-color: var(--ts-card-bg);\n border: 1px solid transparent;\n overflow: hidden;\n transition:\n box-shadow var(--ts-transition-normal),\n transform var(--ts-transition-normal),\n border-color var(--ts-transition-normal);\n}\n\n/* ---- Elevation ---- */\n:host([elevation=\"none\"]) .card__base { box-shadow: none; }\n:host([elevation=\"sm\"]) .card__base { box-shadow: var(--ts-shadow-sm); }\n:host([elevation=\"md\"]) .card__base { box-shadow: var(--ts-shadow-md); }\n:host([elevation=\"lg\"]) .card__base { box-shadow: var(--ts-shadow-lg); }\n:host([elevation=\"xl\"]) .card__base { box-shadow: var(--ts-shadow-xl); }\n\n/* ---- Bordered ---- */\n:host([bordered]) .card__base {\n border: 1px solid var(--ts-card-border-color);\n}\n\n/* ---- Interactive ---- */\n:host([interactive]) {\n cursor: pointer;\n}\n\n:host([interactive]) .card__base:hover {\n box-shadow: var(--ts-shadow-lg);\n}\n\n:host([interactive]) .card__base:active {\n box-shadow: var(--ts-shadow-md);\n}\n\n:host([interactive]:focus-visible) .card__base {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Sections ---- */\n.card__media {\n overflow: hidden;\n}\n\n.card__media:empty {\n display: none;\n}\n\n.card__media ::slotted(img) {\n display: block;\n width: 100%;\n height: auto;\n object-fit: cover;\n}\n\n.card__header {\n border-bottom: 1px solid var(--ts-card-border-color);\n}\n\n.card__header:empty {\n display: none;\n border-bottom: none;\n}\n\n.card__footer {\n border-top: 1px solid var(--ts-card-border-color);\n}\n\n.card__footer:empty {\n display: none;\n border-top: none;\n}\n\n/* ---- Padding ---- */\n:host([padding=\"none\"]) .card__header,\n:host([padding=\"none\"]) .card__body,\n:host([padding=\"none\"]) .card__footer { padding: 0; }\n\n:host([padding=\"sm\"]) .card__header,\n:host([padding=\"sm\"]) .card__body,\n:host([padding=\"sm\"]) .card__footer { padding: var(--ts-spacing-3); }\n\n:host([padding=\"md\"]) .card__header,\n:host([padding=\"md\"]) .card__body,\n:host([padding=\"md\"]) .card__footer { padding: var(--ts-spacing-4); }\n\n:host([padding=\"lg\"]) .card__header,\n:host([padding=\"lg\"]) .card__body,\n:host([padding=\"lg\"]) .card__footer { padding: var(--ts-spacing-6); }\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for card body content.\n * @slot header - Card header content.\n * @slot footer - Card footer content.\n * @slot media - Media content (image, video) displayed at the top.\n *\n * @part base - The card container.\n * @part header - The header wrapper.\n * @part body - The body wrapper.\n * @part footer - The footer wrapper.\n * @part media - The media wrapper.\n */\n@Component({\n tag: 'ts-card',\n styleUrl: 'card.css',\n shadow: true,\n})\nexport class TsCard {\n /** Elevation level controlling the shadow depth. */\n @Prop({ reflect: true }) elevation: 'none' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /** Makes the card interactive (hover effect, cursor pointer). */\n @Prop({ reflect: true }) interactive = false;\n\n /** Border style variant. */\n @Prop({ reflect: true }) bordered = false;\n\n /** Padding size for the card body. */\n @Prop({ reflect: true }) padding: 'none' | 'sm' | 'md' | 'lg' = 'md';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-card': true,\n [`ts-card--elevation-${this.elevation}`]: true,\n [`ts-card--padding-${this.padding}`]: true,\n 'ts-card--interactive': this.interactive,\n 'ts-card--bordered': this.bordered,\n }}\n role={this.interactive ? 'button' : undefined}\n tabindex={this.interactive ? '0' : undefined}\n >\n <div class=\"card__base\" part=\"base\">\n <div class=\"card__media\" part=\"media\">\n <slot name=\"media\" />\n </div>\n\n <div class=\"card__header\" part=\"header\">\n <slot name=\"header\" />\n </div>\n\n <div class=\"card__body\" part=\"body\">\n <slot />\n </div>\n\n <div class=\"card__footer\" part=\"footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAU,IAAM,g+D,MCmBTC,EAAM,M,yBAEQC,UAAgD,KAGhDC,YAAc,MAGdC,SAAW,MAGXC,QAAuC,KAGhE,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,UAAW,KACX,CAAC,sBAAsBC,KAAKT,aAAc,KAC1C,CAAC,oBAAoBS,KAAKN,WAAY,KACtC,uBAAwBM,KAAKR,YAC7B,oBAAqBQ,KAAKP,UAE5BQ,KAAMD,KAAKR,YAAc,SAAWU,UACpCC,SAAUH,KAAKR,YAAc,IAAMU,WAEnCN,EAAA,OAAAE,IAAA,2CAAKC,MAAM,aAAaK,KAAK,QAC3BR,EAAA,OAAAE,IAAA,2CAAKC,MAAM,cAAcK,KAAK,SAC5BR,EAAA,QAAAE,IAAA,2CAAMO,KAAK,WAGbT,EAAA,OAAAE,IAAA,2CAAKC,MAAM,eAAeK,KAAK,UAC7BR,EAAA,QAAAE,IAAA,2CAAMO,KAAK,YAGbT,EAAA,OAAAE,IAAA,2CAAKC,MAAM,aAAaK,KAAK,QAC3BR,EAAA,QAAAE,IAAA,8CAGFF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,eAAeK,KAAK,UAC7BR,EAAA,QAAAE,IAAA,2CAAMO,KAAK,a","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["toastCss","TsToast","autoCloseTimer","variant","duration","dismissible","open","position","tsClose","isVisible","handleOpenChange","newValue","this","startAutoClose","clearAutoClose","connectedCallback","disconnectedCallback","close","emit","show","setTimeout","clearTimeout","undefined","handleClose","renderIcon","icons","info","success","warning","danger","neutral","h","class","render","ariaLive","Host","role","part","name","type","onClick"],"sources":["src/components/toast/toast.css?tag=ts-toast&encapsulation=shadow","src/components/toast/toast.tsx"],"sourcesContent":["/* ==========================================================================\n ts-toast — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-toast-radius Border radius\n --ts-toast-shadow Box shadow\n --ts-toast-max-width Maximum width\n ========================================================================== */\n\n:host {\n display: block;\n position: fixed;\n z-index: var(--ts-z-toast, 9000);\n font-family: var(--ts-font-family-base);\n pointer-events: none;\n\n --ts-toast-radius: var(--ts-radius-xl);\n --ts-toast-shadow: var(--ts-shadow-lg);\n --ts-toast-max-width: 420px;\n}\n\n/* ---- Positions ---- */\n:host([position=\"top-right\"]) {\n inset-block-start: var(--ts-spacing-4);\n inset-inline-end: var(--ts-spacing-4);\n}\n\n:host([position=\"top-left\"]) {\n inset-block-start: var(--ts-spacing-4);\n inset-inline-start: var(--ts-spacing-4);\n}\n\n:host([position=\"bottom-right\"]) {\n inset-block-end: var(--ts-spacing-4);\n inset-inline-end: var(--ts-spacing-4);\n}\n\n:host([position=\"bottom-left\"]) {\n inset-block-end: var(--ts-spacing-4);\n inset-inline-start: var(--ts-spacing-4);\n}\n\n:host([position=\"top-center\"]) {\n inset-block-start: var(--ts-spacing-4);\n inset-inline-start: 50%;\n transform: translateX(-50%);\n}\n\n:host([position=\"bottom-center\"]) {\n inset-block-end: var(--ts-spacing-4);\n inset-inline-start: 50%;\n transform: translateX(-50%);\n}\n\n/* ---- Base ---- */\n.toast__base {\n display: flex;\n align-items: flex-start;\n gap: var(--ts-spacing-3);\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n border-radius: var(--ts-toast-radius);\n box-shadow: var(--ts-toast-shadow);\n max-inline-size: var(--ts-toast-max-width);\n pointer-events: auto;\n border: 1px solid transparent;\n font-size: var(--ts-font-size-sm);\n line-height: var(--ts-line-height-normal);\n animation: ts-toast-slide-in 0.3s ease-out;\n}\n\n@keyframes ts-toast-slide-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* ---- Variants ---- */\n:host([variant=\"info\"]) .toast__base {\n background-color: var(--ts-color-info-bg);\n border-color: var(--ts-color-info-border);\n color: var(--ts-color-info-600);\n}\n\n:host([variant=\"success\"]) .toast__base {\n background-color: var(--ts-color-success-bg);\n border-color: var(--ts-color-success-border);\n color: var(--ts-color-success-600);\n}\n\n:host([variant=\"warning\"]) .toast__base {\n background-color: var(--ts-color-warning-bg);\n border-color: var(--ts-color-warning-border);\n color: var(--ts-color-warning-600);\n}\n\n:host([variant=\"danger\"]) .toast__base {\n background-color: var(--ts-color-danger-bg);\n border-color: var(--ts-color-danger-border);\n color: var(--ts-color-danger-600);\n}\n\n:host([variant=\"neutral\"]) .toast__base {\n background-color: var(--ts-color-bg-subtle);\n border-color: var(--ts-color-border-subtle);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Icon ---- */\n.toast__icon {\n display: flex;\n align-items: center;\n font-size: 1.15em;\n flex-shrink: 0;\n margin-block-start: 1px;\n}\n\n/* ---- Message ---- */\n.toast__message {\n flex: 1;\n min-inline-size: 0;\n}\n\n/* ---- Action ---- */\n.toast__action {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.toast__action:empty {\n display: none;\n}\n\n/* ---- Close button ---- */\n.toast__close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n inline-size: 1.5rem;\n block-size: 1.5rem;\n border: none;\n border-radius: var(--ts-radius-sm);\n background: transparent;\n color: currentColor;\n opacity: 0.6;\n cursor: pointer;\n font-size: 0.8em;\n transition: opacity var(--ts-transition-fast);\n padding: 0;\n line-height: 1;\n}\n\n.toast__close:hover {\n opacity: 1;\n}\n\n.toast__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n opacity: 1;\n}\n","import { Component, Prop, Event, State, h, Host, Watch, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\ntype TsToastVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\ntype TsToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n\n/**\n * @slot - Default slot for message content.\n * @slot action - Optional action button.\n *\n * @part base - The toast container.\n * @part icon - The variant icon wrapper.\n * @part message - The message wrapper.\n * @part action - The action slot wrapper.\n * @part close - The close button.\n */\n@Component({\n tag: 'ts-toast',\n styleUrl: 'toast.css',\n shadow: true,\n})\nexport class TsToast {\n private autoCloseTimer?: ReturnType<typeof setTimeout>;\n\n /** The toast's visual variant. */\n @Prop({ reflect: true }) variant: TsToastVariant = 'info';\n\n /** Auto-dismiss duration in ms. Set 0 to disable. */\n @Prop() duration = 5000;\n\n /** Whether the toast shows a close button. */\n @Prop() dismissible = true;\n\n /** Whether the toast is visible. */\n @Prop({ reflect: true, mutable: true }) open = false;\n\n /** Position of the toast on screen. */\n @Prop({ reflect: true }) position: TsToastPosition = 'top-right';\n\n /** Emitted when the toast is dismissed. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n @State() isVisible = false;\n\n @Watch('open')\n handleOpenChange(newValue: boolean): void {\n if (newValue) {\n this.isVisible = true;\n this.startAutoClose();\n } else {\n this.isVisible = false;\n this.clearAutoClose();\n }\n }\n\n connectedCallback(): void {\n if (this.open) {\n this.isVisible = true;\n this.startAutoClose();\n }\n }\n\n disconnectedCallback(): void {\n this.clearAutoClose();\n }\n\n /** Programmatically close the toast. */\n @Method()\n async close(): Promise<void> {\n this.open = false;\n this.isVisible = false;\n this.clearAutoClose();\n this.tsClose.emit();\n }\n\n /** Programmatically show the toast. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n private startAutoClose(): void {\n this.clearAutoClose();\n if (this.duration > 0) {\n this.autoCloseTimer = setTimeout(() => {\n this.close();\n }, this.duration);\n }\n }\n\n private clearAutoClose(): void {\n if (this.autoCloseTimer) {\n clearTimeout(this.autoCloseTimer);\n this.autoCloseTimer = undefined;\n }\n }\n\n private handleClose = (): void => {\n this.close();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderIcon() {\n const icons: Record<string, string> = {\n info: '\\u2139',\n success: '\\u2713',\n warning: '\\u26A0',\n danger: '\\u2715',\n neutral: '\\u2139',\n };\n return <span class=\"toast__icon-symbol\" aria-hidden=\"true\">{icons[this.variant] || '\\u2139'}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n if (!this.isVisible) return null;\n\n const ariaLive = this.variant === 'danger' ? 'assertive' : 'polite';\n\n return (\n <Host\n class={{\n 'ts-toast': true,\n [`ts-toast--${this.variant}`]: true,\n [`ts-toast--${this.position}`]: true,\n 'ts-toast--open': this.isVisible,\n }}\n role=\"status\"\n aria-live={ariaLive}\n >\n <div class=\"toast__base\" part=\"base\">\n <div class=\"toast__icon\" part=\"icon\">\n {this.renderIcon()}\n </div>\n\n <div class=\"toast__message\" part=\"message\">\n <slot />\n </div>\n\n <div class=\"toast__action\" part=\"action\">\n <slot name=\"action\" />\n </div>\n\n {this.dismissible && (\n <button\n class=\"toast__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss notification\"\n onClick={this.handleClose}\n >\n \\u2715\n </button>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAW,IAAM,qyF,MCqBVC,EAAO,M,wDACVC,eAGiBC,QAA0B,OAG3CC,SAAW,IAGXC,YAAc,KAGkBC,KAAO,MAGtBC,SAA4B,YAGpBC,QAExBC,UAAY,MAGrB,gBAAAC,CAAiBC,GACf,GAAIA,EAAU,CACZC,KAAKH,UAAY,KACjBG,KAAKC,gB,KACA,CACLD,KAAKH,UAAY,MACjBG,KAAKE,gB,EAIT,iBAAAC,GACE,GAAIH,KAAKN,KAAM,CACbM,KAAKH,UAAY,KACjBG,KAAKC,gB,EAIT,oBAAAG,GACEJ,KAAKE,gB,CAKP,WAAMG,GACJL,KAAKN,KAAO,MACZM,KAAKH,UAAY,MACjBG,KAAKE,iBACLF,KAAKJ,QAAQU,M,CAKf,UAAMC,GACJP,KAAKN,KAAO,I,CAGN,cAAAO,GACND,KAAKE,iBACL,GAAIF,KAAKR,SAAW,EAAG,CACrBQ,KAAKV,eAAiBkB,YAAW,KAC/BR,KAAKK,OAAO,GACXL,KAAKR,S,EAIJ,cAAAU,GACN,GAAIF,KAAKV,eAAgB,CACvBmB,aAAaT,KAAKV,gBAClBU,KAAKV,eAAiBoB,S,EAIlBC,YAAc,KACpBX,KAAKK,OAAO,EAIN,UAAAO,GACN,MAAMC,EAAgC,CACpCC,KAAM,IACNC,QAAS,IACTC,QAAS,IACTC,OAAQ,IACRC,QAAS,KAEX,OAAOC,EAAA,QAAMC,MAAM,qBAAoB,cAAa,QAAQP,EAAMb,KAAKT,UAAY,I,CAIrF,MAAA8B,GACE,IAAKrB,KAAKH,UAAW,OAAO,KAE5B,MAAMyB,EAAWtB,KAAKT,UAAY,SAAW,YAAc,SAE3D,OACE4B,EAACI,EAAI,CACHH,MAAO,CACL,WAAY,KACZ,CAAC,aAAapB,KAAKT,WAAY,KAC/B,CAAC,aAAaS,KAAKL,YAAa,KAChC,iBAAkBK,KAAKH,WAEzB2B,KAAK,SAAQ,YACFF,GAEXH,EAAA,OAAKC,MAAM,cAAcK,KAAK,QAC5BN,EAAA,OAAKC,MAAM,cAAcK,KAAK,QAC3BzB,KAAKY,cAGRO,EAAA,OAAKC,MAAM,iBAAiBK,KAAK,WAC/BN,EAAA,cAGFA,EAAA,OAAKC,MAAM,gBAAgBK,KAAK,UAC9BN,EAAA,QAAMO,KAAK,YAGZ1B,KAAKP,aACJ0B,EAAA,UACEC,MAAM,eACNK,KAAK,QACLE,KAAK,SAAQ,aACF,uBACXC,QAAS5B,KAAKW,aAAW,Y","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["stackCss","TsStack","gap","align","render","alignMap","start","center","end","stretch","h","Host","key","style","this","alignItems"],"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"],"mappings":"kDAAA,MAAMA,EAAW,IAAM,4C,MCYVC,EAAO,M,yBAEOC,IAAc,IAGdC,MAAgD,UAGzE,MAAAC,GACE,MAAMC,EAAmC,CACvCC,MAAO,aACPC,OAAQ,SACRC,IAAK,WACLC,QAAS,WAGX,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACLX,IAAK,oBAAoBY,KAAKZ,OAC9Ba,WAAYV,EAASS,KAAKX,QAAU,YAGtCO,EAAA,QAAAE,IAAA,6C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["stepCss","TsStep","label","description","completed","error","disabled","icon","index","parseInt","this","hostEl","getAttribute","isActive","hasAttribute","hasConnector","orientation","renderIndicatorContent","h","viewBox","fill","stroke","class","points","x1","y1","x2","y2","name","size","render","Host","key","role","undefined","part","step__indicator"],"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"],"mappings":"yDAAA,MAAMA,EAAU,IAAM,6jG,MCiBTC,EAAM,M,qDAITC,MAGAC,YAGiBC,UAAY,MAGZC,MAAQ,MAGRC,SAAW,MAG5BC,KAER,SAAYC,GACV,OAAOC,SAASC,KAAKC,OAAOC,aAAa,eAAiB,IAAK,G,CAGjE,YAAYC,GACV,OAAOH,KAAKC,OAAOG,aAAa,c,CAGlC,gBAAYC,GACV,OAAOL,KAAKC,OAAOG,aAAa,qB,CAGlC,eAAYE,GACV,OAAON,KAAKC,OAAOC,aAAa,qBAAuB,Y,CAIjD,sBAAAK,GACN,GAAIP,KAAKN,UAAW,CAClB,OACEc,EAAA,OAAKC,QAAQ,YAAYC,KAAK,OAAOC,OAAO,eAAc,eAAc,IAAG,iBAAgB,QAAO,kBAAiB,QAAQC,MAAM,cAC/HJ,EAAA,YAAUK,OAAO,mB,CAIvB,GAAIb,KAAKL,MAAO,CACd,OACEa,EAAA,OAAKC,QAAQ,YAAYC,KAAK,OAAOC,OAAO,eAAc,eAAc,IAAG,iBAAgB,QAAO,kBAAiB,QAAQC,MAAM,cAC/HJ,EAAA,QAAMM,GAAG,KAAKC,GAAG,IAAIC,GAAG,IAAIC,GAAG,OAC/BT,EAAA,QAAMM,GAAG,IAAIC,GAAG,IAAIC,GAAG,KAAKC,GAAG,O,CAIrC,GAAIjB,KAAKH,KAAM,CACb,OAAOW,EAAA,WAASU,KAAMlB,KAAKH,KAAMsB,KAAK,M,CAExC,OAAOX,EAAA,YAAOR,KAAKF,MAAQ,E,CAI7B,MAAAsB,GACE,OACEZ,EAACa,EAAI,CAAAC,IAAA,2CACHV,MAAO,CACL,UAAW,KACX,kBAAmBZ,KAAKG,SACxB,qBAAsBH,KAAKN,UAC3B,iBAAkBM,KAAKL,MACvB,oBAAqBK,KAAKJ,SAC1B,CAAC,YAAYI,KAAKM,eAAgB,MAEpCiB,KAAK,WAAU,eACDvB,KAAKG,SAAW,OAASqB,UAAS,gBACjCxB,KAAKJ,SAAW,OAAS4B,WAExChB,EAAA,OAAAc,IAAA,2CAAKV,MAAM,gBAAgBa,KAAK,QAC9BjB,EAAA,OAAAc,IAAA,2CAAKV,MAAM,gBACTJ,EAAA,OAAAc,IAAA,2CACEV,MAAO,CACLc,gBAAmB,KACnB,0BAA2B1B,KAAKG,SAChC,6BAA8BH,KAAKN,UACnC,yBAA0BM,KAAKL,OAEjC8B,KAAK,aAEJzB,KAAKO,0BAGRC,EAAA,OAAAc,IAAA,2CAAKV,MAAM,cACRZ,KAAKR,OACJgB,EAAA,QAAAc,IAAA,2CAAMV,MAAM,cAAca,KAAK,SAC5BzB,KAAKR,OAGTQ,KAAKP,aACJe,EAAA,QAAAc,IAAA,2CAAMV,MAAM,oBAAoBa,KAAK,eAClCzB,KAAKP,eAMbO,KAAKK,cACJG,EAAA,OAAAc,IAAA,2CAAKV,MAAM,kBAAkBa,KAAK,aAChCjB,EAAA,OAAAc,IAAA,2CACEV,MAAO,CACL,uBAAwB,KACxB,kCAAmCZ,KAAKN,cAMhDc,EAAA,OAAAc,IAAA,2CAAKV,MAAM,gBAAgBa,KAAK,WAC9BjB,EAAA,QAAAc,IAAA,+C","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["emptyStateCss","TsEmptyState","heading","description","icon","size","render","h","Host","key","class","this","part","name"],"sources":["src/components/empty-state/empty-state.css?tag=ts-empty-state&encapsulation=shadow","src/components/empty-state/empty-state.tsx"],"sourcesContent":["/* ==========================================================================\n ts-empty-state — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-empty-state-icon-size Icon size\n --ts-empty-state-icon-color Icon color\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-empty-state-icon-size: 3rem;\n --ts-empty-state-icon-color: var(--ts-color-text-tertiary);\n}\n\n.empty-state__base {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding-inline: var(--ts-spacing-6);\n padding-block: var(--ts-spacing-8);\n gap: var(--ts-spacing-3);\n}\n\n/* ---- Icon ---- */\n.empty-state__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--ts-empty-state-icon-color);\n font-size: var(--ts-empty-state-icon-size);\n margin-block-end: var(--ts-spacing-2);\n}\n\n.empty-state__icon:empty {\n display: none;\n}\n\n/* ---- Heading ---- */\n.empty-state__heading {\n margin: 0;\n font-size: var(--ts-font-size-lg);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n line-height: var(--ts-line-height-tight);\n}\n\n/* ---- Description ---- */\n.empty-state__description {\n margin: 0;\n font-size: var(--ts-font-size-sm);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n max-inline-size: 36ch;\n}\n\n/* ---- Content ---- */\n.empty-state__content:empty {\n display: none;\n}\n\n/* ---- Action ---- */\n.empty-state__action {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n margin-block-start: var(--ts-spacing-2);\n}\n\n.empty-state__action:empty {\n display: none;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .empty-state__base {\n padding-inline: var(--ts-spacing-4);\n padding-block: var(--ts-spacing-4);\n gap: var(--ts-spacing-2);\n}\n\n:host([size=\"sm\"]) .empty-state__icon {\n --ts-empty-state-icon-size: 2rem;\n}\n\n:host([size=\"sm\"]) .empty-state__heading {\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"sm\"]) .empty-state__description {\n font-size: var(--ts-font-size-xs);\n}\n\n:host([size=\"lg\"]) .empty-state__base {\n padding-inline: var(--ts-spacing-8);\n padding-block: var(--ts-spacing-12);\n gap: var(--ts-spacing-4);\n}\n\n:host([size=\"lg\"]) .empty-state__icon {\n --ts-empty-state-icon-size: 4.5rem;\n}\n\n:host([size=\"lg\"]) .empty-state__heading {\n font-size: var(--ts-font-size-xl);\n}\n\n:host([size=\"lg\"]) .empty-state__description {\n font-size: var(--ts-font-size-md);\n max-inline-size: 48ch;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @slot - Custom content below the description.\n * @slot action - CTA buttons.\n * @slot icon - Custom icon or illustration.\n *\n * @part base - The empty state container.\n * @part icon - The icon wrapper.\n * @part heading - The heading element.\n * @part description - The description text.\n * @part content - The custom content wrapper.\n * @part action - The action slot wrapper.\n */\n@Component({\n tag: 'ts-empty-state',\n styleUrl: 'empty-state.css',\n shadow: true,\n})\nexport class TsEmptyState {\n /** The heading text. */\n @Prop() heading?: string;\n\n /** The description text. */\n @Prop() description?: string;\n\n /** Lucide icon name displayed large. */\n @Prop() icon?: string;\n\n /** The size of the empty state. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-empty-state': true,\n [`ts-empty-state--${this.size}`]: true,\n }}\n >\n <div class=\"empty-state__base\" part=\"base\">\n <div class=\"empty-state__icon\" part=\"icon\">\n <slot name=\"icon\">\n {this.icon && <ts-icon name={this.icon} />}\n </slot>\n </div>\n\n {this.heading && (\n <h3 class=\"empty-state__heading\" part=\"heading\">\n {this.heading}\n </h3>\n )}\n\n {this.description && (\n <p class=\"empty-state__description\" part=\"description\">\n {this.description}\n </p>\n )}\n\n <div class=\"empty-state__content\" part=\"content\">\n <slot />\n </div>\n\n <div class=\"empty-state__action\" part=\"action\">\n <slot name=\"action\" />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAgB,IAAM,8yD,MCoBfC,EAAY,M,yBAEfC,QAGAC,YAGAC,KAGiBC,KAAe,KAGxC,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,iBAAkB,KAClB,CAAC,mBAAmBC,KAAKN,QAAS,OAGpCE,EAAA,OAAAE,IAAA,2CAAKC,MAAM,oBAAoBE,KAAK,QAClCL,EAAA,OAAAE,IAAA,2CAAKC,MAAM,oBAAoBE,KAAK,QAClCL,EAAA,QAAAE,IAAA,2CAAMI,KAAK,QACRF,KAAKP,MAAQG,EAAA,WAAAE,IAAA,2CAASI,KAAMF,KAAKP,SAIrCO,KAAKT,SACJK,EAAA,MAAAE,IAAA,2CAAIC,MAAM,uBAAuBE,KAAK,WACnCD,KAAKT,SAITS,KAAKR,aACJI,EAAA,KAAAE,IAAA,2CAAGC,MAAM,2BAA2BE,KAAK,eACtCD,KAAKR,aAIVI,EAAA,OAAAE,IAAA,2CAAKC,MAAM,uBAAuBE,KAAK,WACrCL,EAAA,QAAAE,IAAA,8CAGFF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,sBAAsBE,KAAK,UACpCL,EAAA,QAAAE,IAAA,2CAAMI,KAAK,a","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["toolbarCss","TsToolbar","variant","size","render","h","Host","key","class","this","role","part","name"],"sources":["src/components/toolbar/toolbar.css?tag=ts-toolbar&encapsulation=shadow","src/components/toolbar/toolbar.tsx"],"sourcesContent":["/* ==========================================================================\n ts-toolbar — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-toolbar-bg Background color\n --ts-toolbar-border-color Border color\n --ts-toolbar-padding Padding\n --ts-toolbar-gap Gap between items\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-toolbar-bg: var(--ts-color-bg-surface);\n --ts-toolbar-border-color: var(--ts-color-border-subtle);\n --ts-toolbar-padding: var(--ts-spacing-3);\n --ts-toolbar-gap: var(--ts-spacing-2);\n}\n\n.toolbar__base {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n padding-inline: var(--ts-toolbar-padding);\n padding-block: var(--ts-toolbar-padding);\n background-color: var(--ts-toolbar-bg);\n}\n\n/* ---- Variants ---- */\n:host([variant=\"bordered\"]) .toolbar__base {\n border-block-end: 1px solid var(--ts-toolbar-border-color);\n}\n\n:host([variant=\"elevated\"]) .toolbar__base {\n box-shadow: var(--ts-shadow-sm);\n border-radius: var(--ts-radius-md);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .toolbar__base {\n padding-inline: var(--ts-spacing-2);\n padding-block: var(--ts-spacing-1);\n gap: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .toolbar__base {\n padding-inline: var(--ts-spacing-3);\n padding-block: var(--ts-spacing-2);\n gap: var(--ts-spacing-2);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .toolbar__base {\n padding-inline: var(--ts-spacing-4);\n padding-block: var(--ts-spacing-3);\n gap: var(--ts-spacing-3);\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Layout sections ---- */\n.toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n flex-shrink: 0;\n}\n\n.toolbar__center {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n flex: 1;\n min-inline-size: 0;\n}\n\n.toolbar__end {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n flex-shrink: 0;\n margin-inline-start: auto;\n}\n\n.toolbar__start:empty,\n.toolbar__end:empty {\n display: none;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @slot - Default slot for toolbar items (center).\n * @slot start - Left/start-aligned items.\n * @slot end - Right/end-aligned items.\n *\n * @part base - The toolbar container.\n * @part start - The start slot wrapper.\n * @part center - The center/default slot wrapper.\n * @part end - The end slot wrapper.\n */\n@Component({\n tag: 'ts-toolbar',\n styleUrl: 'toolbar.css',\n shadow: true,\n})\nexport class TsToolbar {\n /** The toolbar variant style. */\n @Prop({ reflect: true }) variant: 'default' | 'bordered' | 'elevated' = 'default';\n\n /** The toolbar size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-toolbar': true,\n [`ts-toolbar--${this.variant}`]: true,\n [`ts-toolbar--${this.size}`]: true,\n }}\n role=\"toolbar\"\n aria-orientation=\"horizontal\"\n >\n <div class=\"toolbar__base\" part=\"base\">\n <div class=\"toolbar__start\" part=\"start\">\n <slot name=\"start\" />\n </div>\n\n <div class=\"toolbar__center\" part=\"center\">\n <slot />\n </div>\n\n <div class=\"toolbar__end\" part=\"end\">\n <slot name=\"end\" />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAa,IAAM,k8C,MCkBZC,EAAS,M,yBAEKC,QAA+C,UAG/CC,KAAe,KAGxC,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,aAAc,KACd,CAAC,eAAeC,KAAKP,WAAY,KACjC,CAAC,eAAeO,KAAKN,QAAS,MAEhCO,KAAK,UAAS,mBACG,cAEjBL,EAAA,OAAAE,IAAA,2CAAKC,MAAM,gBAAgBG,KAAK,QAC9BN,EAAA,OAAAE,IAAA,2CAAKC,MAAM,iBAAiBG,KAAK,SAC/BN,EAAA,QAAAE,IAAA,2CAAMK,KAAK,WAGbP,EAAA,OAAAE,IAAA,2CAAKC,MAAM,kBAAkBG,KAAK,UAChCN,EAAA,QAAAE,IAAA,8CAGFF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,eAAeG,KAAK,OAC7BN,EAAA,QAAAE,IAAA,2CAAMK,KAAK,U","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["paginationCss","TsPagination","total","pageSize","currentPage","siblingCount","size","tsChange","totalPages","Math","max","ceil","this","getPageRange","current","siblings","range","leftSibling","rightSibling","min","showLeftEllipsis","showRightEllipsis","push","i","handlePageClick","page","emit","render","pages","isFirstPage","isLastPage","h","Host","key","class","part","disabled","onClick","viewBox","fill","stroke","points","map","index","pagination__button","undefined"],"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"],"mappings":"yDAAA,MAAMA,EAAgB,IAAM,63D,MCefC,EAAY,M,0DAEfC,MAGAC,SAAW,GAGqBC,YAAc,EAG9CC,aAAe,EAGEC,KAAe,KAGNC,SAElC,cAAYC,GACV,OAAOC,KAAKC,IAAI,EAAGD,KAAKE,KAAKC,KAAKV,MAAQU,KAAKT,U,CAGzC,YAAAU,GACN,MAAMX,EAAQU,KAAKJ,WACnB,MAAMM,EAAUF,KAAKR,YACrB,MAAMW,EAAWH,KAAKP,aAEtB,MAAMW,EAAiC,GAEvC,MAAMC,EAAcR,KAAKC,IAAII,EAAUC,EAAU,GACjD,MAAMG,EAAeT,KAAKU,IAAIL,EAAUC,EAAUb,EAAQ,GAE1D,MAAMkB,EAAmBH,EAAc,EACvC,MAAMI,EAAoBH,EAAehB,EAAQ,EAGjDc,EAAMM,KAAK,GAEX,GAAIF,EAAkB,CACpBJ,EAAMM,KAAK,W,KACN,CACL,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAaM,IAAK,CACpCP,EAAMM,KAAKC,E,EAIf,IAAK,IAAIA,EAAIN,EAAaM,GAAKL,EAAcK,IAAK,CAChDP,EAAMM,KAAKC,E,CAGb,GAAIF,EAAmB,CACrBL,EAAMM,KAAK,W,KACN,CACL,IAAK,IAAIC,EAAIL,EAAe,EAAGK,EAAIrB,EAAOqB,IAAK,CAC7CP,EAAMM,KAAKC,E,EAKf,GAAIrB,EAAQ,EAAG,CACbc,EAAMM,KAAKpB,E,CAGb,OAAOc,C,CAGDQ,gBAAmBC,IACzB,GAAIA,EAAO,GAAKA,EAAOb,KAAKJ,YAAciB,IAASb,KAAKR,YAAa,OACrEQ,KAAKR,YAAcqB,EACnBb,KAAKL,SAASmB,KAAK,CAAED,QAAO,EAI9B,MAAAE,GACE,MAAMC,EAAQhB,KAAKC,eACnB,MAAMgB,EAAcjB,KAAKR,aAAe,EACxC,MAAM0B,EAAalB,KAAKR,aAAeQ,KAAKJ,WAE5C,OACEuB,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,gBAAiB,KACjB,CAAC,kBAAkBtB,KAAKN,QAAS,OAGnCyB,EAAA,OAAAE,IAAA,2CAAKE,KAAK,MAAK,aAAY,aAAaD,MAAM,mBAC5CH,EAAA,UAAAE,IAAA,2CACEC,MAAM,sCACNC,KAAK,OACLC,SAAUP,EAAW,aACV,gBACXQ,QAAS,IAAMzB,KAAKY,gBAAgBZ,KAAKR,YAAc,IAEvD2B,EAAA,OAAAE,IAAA,2CAAKK,QAAQ,YAAYC,KAAK,OAAOC,OAAO,eAAc,eAAc,IAAG,iBAAgB,QAAO,kBAAiB,SACjHT,EAAA,YAAAE,IAAA,2CAAUQ,OAAO,sBAIpBb,EAAMc,KAAI,CAACjB,EAAMkB,IAChBlB,IAAS,WACPM,EAAA,QAAMG,MAAM,uBAAuBD,IAAK,YAAYU,IAAO,cAAc,QAAM,OAI/EZ,EAAA,UACEG,MAAO,CACLU,mBAAoB,KACpB,6BAA8BnB,IAASb,KAAKR,aAE9C+B,KAAK,SAAQ,eACCV,IAASb,KAAKR,YAAc,OAASyC,UAAS,aAChD,QAAQpB,IACpBY,QAAS,IAAMzB,KAAKY,gBAAgBC,GACpCQ,IAAKR,GAEJA,KAKPM,EAAA,UAAAE,IAAA,2CACEC,MAAM,sCACNC,KAAK,OACLC,SAAUN,EAAU,aACT,YACXO,QAAS,IAAMzB,KAAKY,gBAAgBZ,KAAKR,YAAc,IAEvD2B,EAAA,OAAAE,IAAA,2CAAKK,QAAQ,YAAYC,KAAK,OAAOC,OAAO,eAAc,eAAc,IAAG,iBAAgB,QAAO,kBAAiB,SACjHT,EAAA,YAAAE,IAAA,2CAAUQ,OAAO,sB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["dialogCss","TsDialog","dialogEl","removeFocusTrap","previouslyFocused","dialogId","generateId","open","heading","size","dismissible","tsClose","isAnimating","handleOpenChange","isOpen","this","openDialog","closeDialog","show","close","document","activeElement","body","style","overflow","requestAnimationFrame","trapFocus","focus","emit","disconnectedCallback","handleOverlayClick","handleDialogClick","event","stopPropagation","handleKeydown","key","handleCloseClick","render","headingId","h","Host","class","onKeyDown","part","onClick","ref","el","dialog__panel","role","undefined","tabindex","type","id","name"],"sources":["src/components/dialog/dialog.css?tag=ts-dialog&encapsulation=shadow","src/components/dialog/dialog.tsx"],"sourcesContent":["/* ==========================================================================\n ts-dialog — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-dialog-bg Dialog background\n --ts-dialog-radius Dialog border radius\n --ts-dialog-shadow Dialog box-shadow\n --ts-dialog-overlay-bg Overlay background\n ========================================================================== */\n\n:host {\n font-family: var(--ts-font-family-base);\n\n --ts-dialog-bg: var(--ts-color-bg-elevated);\n --ts-dialog-radius: var(--ts-shape-overlay);\n --ts-dialog-shadow: var(--ts-shadow-xl);\n --ts-dialog-overlay-bg: var(--ts-color-bg-overlay);\n}\n\n/* ---- Overlay ---- */\n.dialog__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-dialog-overlay-bg);\n animation: ts-dialog-fade-in 200ms ease-out;\n}\n\n/* ---- Panel ---- */\n.dialog__panel {\n position: relative;\n background-color: var(--ts-dialog-bg);\n border-radius: var(--ts-dialog-radius);\n box-shadow: var(--ts-dialog-shadow);\n max-height: calc(100vh - var(--ts-spacing-16));\n overflow-y: auto;\n animation: ts-dialog-scale-in 250ms cubic-bezier(0.16, 1, 0.3, 1);\n outline: none;\n}\n\n/* ---- Sizes ---- */\n.dialog__panel--sm { width: 100%; max-width: 400px; }\n.dialog__panel--md { width: 100%; max-width: 520px; }\n.dialog__panel--lg { width: 100%; max-width: 680px; }\n\n/* ---- Close Button ---- */\n.dialog__close {\n position: absolute;\n inset-block-start: 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.dialog__close:hover {\n background-color: var(--ts-color-bg-hover);\n color: var(--ts-color-text-secondary);\n}\n\n.dialog__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Header ---- */\n.dialog__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 padding-inline-end: var(--ts-spacing-10);\n}\n\n/* ---- Body ---- */\n.dialog__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/* ---- Footer ---- */\n.dialog__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.dialog__footer:empty {\n display: none;\n}\n\n/* ---- Animations ---- */\n@keyframes ts-dialog-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes ts-dialog-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 { Component, Prop, State, Event, h, Host, Element, Watch, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId, trapFocus } from '../../utils/aria';\n\n/**\n * @slot - Default slot for dialog body content.\n * @slot footer - Footer content (e.g., action buttons).\n *\n * @part overlay - The backdrop overlay.\n * @part dialog - The dialog container.\n * @part header - The heading wrapper.\n * @part body - The body content wrapper.\n * @part footer - The footer wrapper.\n * @part close - The close button.\n */\n@Component({\n tag: 'ts-dialog',\n styleUrl: 'dialog.css',\n shadow: true,\n})\nexport class TsDialog {\n @Element() hostEl!: HTMLElement;\n\n private dialogEl?: HTMLElement;\n private removeFocusTrap?: () => void;\n private previouslyFocused?: HTMLElement;\n private dialogId = generateId('ts-dialog');\n\n /** Whether the dialog is open. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The dialog heading text. */\n @Prop() heading?: string;\n\n /** The dialog's width size preset. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'sm';\n\n /** Whether the dialog can be dismissed via close button, Escape, or overlay click. */\n @Prop() dismissible = true;\n\n /** Emitted when the dialog is closed. */\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.openDialog();\n } else {\n this.closeDialog();\n }\n }\n\n /** Programmatically open the dialog. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /** Programmatically close the dialog. */\n @Method()\n async close(): Promise<void> {\n this.open = false;\n }\n\n private openDialog(): void {\n this.previouslyFocused = document.activeElement as HTMLElement;\n this.isAnimating = true;\n\n document.body.style.overflow = 'hidden';\n\n requestAnimationFrame(() => {\n if (this.dialogEl) {\n this.removeFocusTrap = trapFocus(this.dialogEl);\n this.dialogEl.focus();\n }\n });\n }\n\n private closeDialog(): void {\n this.isAnimating = false;\n this.tsClose.emit();\n\n document.body.style.overflow = '';\n\n this.removeFocusTrap?.();\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.dismissible) {\n this.close();\n }\n };\n\n private handleDialogClick = (event: MouseEvent): void => {\n event.stopPropagation();\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.dismissible) {\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 const headingId = `${this.dialogId}-heading`;\n\n return (\n <Host\n class={{\n 'ts-dialog': true,\n 'ts-dialog--open': this.open,\n }}\n onKeyDown={this.handleKeydown}\n >\n <div class=\"dialog__overlay\" part=\"overlay\" onClick={this.handleOverlayClick}>\n <div\n ref={(el) => (this.dialogEl = el)}\n class={{\n 'dialog__panel': true,\n [`dialog__panel--${this.size}`]: true,\n }}\n part=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={this.heading ? headingId : undefined}\n tabindex={-1}\n onClick={this.handleDialogClick}\n >\n {this.dismissible && (\n <button\n class=\"dialog__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Close dialog\"\n onClick={this.handleCloseClick}\n >\n &#x2715;\n </button>\n )}\n\n {this.heading && (\n <div class=\"dialog__header\" part=\"header\" id={headingId}>\n {this.heading}\n </div>\n )}\n\n <div class=\"dialog__body\" part=\"body\">\n <slot />\n </div>\n\n <div class=\"dialog__footer\" part=\"footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"2GAAA,MAAMA,EAAY,IAAM,0vE,MCoBXC,EAAQ,M,oFAGXC,SACAC,gBACAC,kBACAC,SAAWC,EAAW,aAGUC,KAAO,MAGvCC,QAGiBC,KAA2B,KAG5CC,YAAc,KAGWC,QAGxBC,YAAc,MAGvB,gBAAAC,CAAiBC,GACf,GAAIA,EAAQ,CACVC,KAAKC,Y,KACA,CACLD,KAAKE,a,EAMT,UAAMC,GACJH,KAAKR,KAAO,I,CAKd,WAAMY,GACJJ,KAAKR,KAAO,K,CAGN,UAAAS,GACND,KAAKX,kBAAoBgB,SAASC,cAClCN,KAAKH,YAAc,KAEnBQ,SAASE,KAAKC,MAAMC,SAAW,SAE/BC,uBAAsB,KACpB,GAAIV,KAAKb,SAAU,CACjBa,KAAKZ,gBAAkBuB,EAAUX,KAAKb,UACtCa,KAAKb,SAASyB,O,KAKZ,WAAAV,GACNF,KAAKH,YAAc,MACnBG,KAAKJ,QAAQiB,OAEbR,SAASE,KAAKC,MAAMC,SAAW,GAE/BT,KAAKZ,oBACLY,KAAKX,mBAAmBuB,O,CAG1B,oBAAAE,GACEd,KAAKZ,oBACLiB,SAASE,KAAKC,MAAMC,SAAW,E,CAGzBM,mBAAqB,KAC3B,GAAIf,KAAKL,YAAa,CACpBK,KAAKI,O,GAIDY,kBAAqBC,IAC3BA,EAAMC,iBAAiB,EAGjBC,cAAiBF,IACvB,GAAIA,EAAMG,MAAQ,UAAYpB,KAAKL,YAAa,CAC9CsB,EAAMC,kBACNlB,KAAKI,O,GAIDiB,iBAAmB,KACzBrB,KAAKI,OAAO,EAId,MAAAkB,GACE,IAAKtB,KAAKR,KAAM,OAAO,KAEvB,MAAM+B,EAAY,GAAGvB,KAAKV,mBAE1B,OACEkC,EAACC,EAAI,CACHC,MAAO,CACL,YAAa,KACb,kBAAmB1B,KAAKR,MAE1BmC,UAAW3B,KAAKmB,eAEhBK,EAAA,OAAKE,MAAM,kBAAkBE,KAAK,UAAUC,QAAS7B,KAAKe,oBACxDS,EAAA,OACEM,IAAMC,GAAQ/B,KAAKb,SAAW4C,EAC9BL,MAAO,CACLM,cAAiB,KACjB,CAAC,kBAAkBhC,KAAKN,QAAS,MAEnCkC,KAAK,SACLK,KAAK,SAAQ,aACF,OAAM,kBACAjC,KAAKP,QAAU8B,EAAYW,UAC5CC,UAAU,EACVN,QAAS7B,KAAKgB,mBAEbhB,KAAKL,aACJ6B,EAAA,UACEE,MAAM,gBACNE,KAAK,QACLQ,KAAK,SAAQ,aACF,eACXP,QAAS7B,KAAKqB,kBAAgB,KAMjCrB,KAAKP,SACJ+B,EAAA,OAAKE,MAAM,iBAAiBE,KAAK,SAASS,GAAId,GAC3CvB,KAAKP,SAIV+B,EAAA,OAAKE,MAAM,eAAeE,KAAK,QAC7BJ,EAAA,cAGFA,EAAA,OAAKE,MAAM,iBAAiBE,KAAK,UAC/BJ,EAAA,QAAMc,KAAK,c","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"p-lpqZSiIf.js","sources":["src/utils/aria.ts"],"sourcesContent":["/**\n * Tessera UI — Accessibility Utilities\n *\n * Helpers for consistent ARIA patterns across components.\n */\n\n/** Generate a unique ID for ARIA relationships */\nlet idCounter = 0;\nexport function generateId(prefix = 'q'): string {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\n/** Reset ID counter (for testing) */\nexport function resetIdCounter(): void {\n idCounter = 0;\n}\n\n/**\n * Announce a message to screen readers via a live region.\n * Creates a temporary `aria-live` element, inserts the message,\n * and removes it after the AT has time to read it.\n */\nexport function announce(message: string, priority: 'polite' | 'assertive' = 'polite'): void {\n const el = document.createElement('div');\n el.setAttribute('aria-live', priority);\n el.setAttribute('role', 'status');\n el.setAttribute('aria-atomic', 'true');\n Object.assign(el.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n });\n\n document.body.appendChild(el);\n\n // Delay to ensure the live region is registered before content is added\n requestAnimationFrame(() => {\n el.textContent = message;\n setTimeout(() => el.remove(), 1000);\n });\n}\n\n/**\n * Check if the user prefers reduced motion.\n */\nexport function prefersReducedMotion(): boolean {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Trap focus within a container element.\n * Returns a cleanup function to remove the trap.\n */\nexport function trapFocus(container: HTMLElement): () => void {\n const focusableSelectors = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') return;\n\n const focusableElements = Array.from(\n container.querySelectorAll<HTMLElement>(focusableSelectors)\n );\n\n if (focusableElements.length === 0) {\n event.preventDefault();\n return;\n }\n\n const firstFocusable = focusableElements[0];\n const lastFocusable = focusableElements[focusableElements.length - 1];\n\n if (event.shiftKey) {\n if (document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n }\n } else {\n if (document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n }\n }\n\n container.addEventListener('keydown', handleKeydown);\n return () => container.removeEventListener('keydown', handleKeydown);\n}\n"],"names":[],"mappings":"AAAA;;;;AAIG;AAEH;AACA,IAAI,SAAS,GAAG,CAAC;AACX,SAAU,UAAU,CAAC,MAAM,GAAG,GAAG,EAAA;IACrC,SAAS,IAAI,CAAC;AACd,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,SAAS,EAAE;AACjC;AAOA;;;;AAIG;SACa,QAAQ,CAAC,OAAe,EAAE,WAAmC,QAAQ,EAAA;IACnF,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACxC,IAAA,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;AACtC,IAAA,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACjC,IAAA,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACtC,IAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;AACtB,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,OAAO,EAAE,GAAG;AACZ,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,MAAM,EAAE,GAAG;AACZ,KAAA,CAAC;AAEF,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;;IAG7B,qBAAqB,CAAC,MAAK;AACzB,QAAA,EAAE,CAAC,WAAW,GAAG,OAAO;QACxB,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;AACrC,KAAC,CAAC;AACJ;AAEA;;AAEG;SACa,oBAAoB,GAAA;IAClC,OAAO,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO;AACtE;AAEA;;;AAGG;AACG,SAAU,SAAS,CAAC,SAAsB,EAAA;AAC9C,IAAA,MAAM,kBAAkB,GAAG;QACzB,SAAS;QACT,wBAAwB;QACxB,uBAAuB;QACvB,wBAAwB;QACxB,0BAA0B;QAC1B,iCAAiC;AAClC,KAAA,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,SAAS,aAAa,CAAC,KAAoB,EAAA;AACzC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE;AAEzB,QAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAClC,SAAS,CAAC,gBAAgB,CAAc,kBAAkB,CAAC,CAC5D;AAED,QAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB;;AAGF,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AAErE,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE;gBAC7C,KAAK,CAAC,cAAc,EAAE;gBACtB,aAAa,CAAC,KAAK,EAAE;;;aAElB;AACL,YAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE;gBAC5C,KAAK,CAAC,cAAc,EAAE;gBACtB,cAAc,CAAC,KAAK,EAAE;;;;AAK5B,IAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;IACpD,OAAO,MAAM,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;AACtE;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tessera-ui.esm.js","sources":["node_modules/.pnpm/@stencil+core@4.43.3/node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.43.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC","x_google_ignoreList":[0]}
@@ -1,5 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- };
5
- export default _default;
@@ -1,21 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- argTypes: {
5
- multiple: {
6
- control: string;
7
- description: string;
8
- };
9
- };
10
- };
11
- export default _default;
12
- export declare const Default: ((args: Record<string, unknown>) => string) & {
13
- args: Record<string, unknown>;
14
- } & {
15
- args: {
16
- multiple: boolean;
17
- };
18
- };
19
- export declare const MultipleOpen: () => string;
20
- export declare const States: () => string;
21
- export declare const Composition: () => string;
@@ -1,34 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- argTypes: {
5
- variant: {
6
- control: string;
7
- options: string[];
8
- description: string;
9
- };
10
- closable: {
11
- control: string;
12
- description: string;
13
- };
14
- slotContent: {
15
- control: string;
16
- description: string;
17
- };
18
- };
19
- };
20
- export default _default;
21
- export declare const Default: ((args: Record<string, unknown>) => string) & {
22
- args: Record<string, unknown>;
23
- } & {
24
- args: {
25
- variant: string;
26
- closable: boolean;
27
- slotContent: string;
28
- };
29
- };
30
- export declare const Variants: () => string;
31
- export declare const States: () => string;
32
- export declare const WithIcons: () => string;
33
- export declare const WithActions: () => string;
34
- export declare const Composition: () => string;
@@ -1,51 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- argTypes: {
5
- src: {
6
- control: string;
7
- description: string;
8
- };
9
- alt: {
10
- control: string;
11
- description: string;
12
- };
13
- name: {
14
- control: string;
15
- description: string;
16
- };
17
- size: {
18
- control: string;
19
- options: string[];
20
- description: string;
21
- };
22
- variant: {
23
- control: string;
24
- options: string[];
25
- description: string;
26
- };
27
- color: {
28
- control: string;
29
- description: string;
30
- };
31
- };
32
- };
33
- export default _default;
34
- export declare const Default: ((args: Record<string, unknown>) => string) & {
35
- args: Record<string, unknown>;
36
- } & {
37
- args: {
38
- src: string;
39
- alt: string;
40
- name: string;
41
- size: string;
42
- variant: string;
43
- color: string;
44
- };
45
- };
46
- export declare const Sizes: () => string;
47
- export declare const Variants: () => string;
48
- export declare const InitialsFallback: () => string;
49
- export declare const WithImages: () => string;
50
- export declare const ImageErrorFallback: () => string;
51
- export declare const UserList: () => string;
@@ -1,50 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- argTypes: {
5
- variant: {
6
- control: string;
7
- options: string[];
8
- description: string;
9
- };
10
- size: {
11
- control: string;
12
- options: string[];
13
- description: string;
14
- };
15
- pill: {
16
- control: string;
17
- description: string;
18
- };
19
- dot: {
20
- control: string;
21
- description: string;
22
- };
23
- outline: {
24
- control: string;
25
- description: string;
26
- };
27
- slotContent: {
28
- control: string;
29
- description: string;
30
- };
31
- };
32
- };
33
- export default _default;
34
- export declare const Default: ((args: Record<string, unknown>) => string) & {
35
- args: Record<string, unknown>;
36
- } & {
37
- args: {
38
- variant: string;
39
- size: string;
40
- pill: boolean;
41
- dot: boolean;
42
- outline: boolean;
43
- slotContent: string;
44
- };
45
- };
46
- export declare const Variants: () => string;
47
- export declare const Sizes: () => string;
48
- export declare const States: () => string;
49
- export declare const WithIcons: () => string;
50
- export declare const Composition: () => string;
@@ -1,40 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- argTypes: {
5
- variant: {
6
- control: string;
7
- options: string[];
8
- description: string;
9
- };
10
- dismissible: {
11
- control: string;
12
- description: string;
13
- };
14
- icon: {
15
- control: string;
16
- description: string;
17
- };
18
- sticky: {
19
- control: string;
20
- description: string;
21
- };
22
- slotContent: {
23
- control: string;
24
- description: string;
25
- };
26
- };
27
- };
28
- export default _default;
29
- export declare const Default: ((args: Record<string, unknown>) => string) & {
30
- args: Record<string, unknown>;
31
- } & {
32
- args: {
33
- variant: string;
34
- dismissible: boolean;
35
- slotContent: string;
36
- };
37
- };
38
- export declare const Variants: () => string;
39
- export declare const States: () => string;
40
- export declare const Composition: () => string;
@@ -1,5 +0,0 @@
1
- declare const _default: {
2
- title: string;
3
- tags: string[];
4
- };
5
- export default _default;