@tessera-ui/core 0.4.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 (998) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/dist/cjs/aria-CeYIvz3U.js +94 -0
  4. package/dist/cjs/aria-CeYIvz3U.js.map +1 -0
  5. package/dist/cjs/index-Bel_x2OU.js +2401 -0
  6. package/dist/cjs/index-Bel_x2OU.js.map +1 -0
  7. package/dist/cjs/index.cjs.js +155 -0
  8. package/dist/cjs/index.cjs.js.map +1 -0
  9. package/dist/cjs/loader.cjs.js +15 -0
  10. package/dist/cjs/loader.cjs.js.map +1 -0
  11. package/dist/cjs/lucide-B1gCqJ3G.js +28324 -0
  12. package/dist/cjs/lucide-B1gCqJ3G.js.map +1 -0
  13. package/dist/cjs/tessera-ui.cjs.js +27 -0
  14. package/dist/cjs/tessera-ui.cjs.js.map +1 -0
  15. package/dist/cjs/ts-accordion-item.cjs.entry.js +65 -0
  16. package/dist/cjs/ts-accordion-item.cjs.entry.js.map +1 -0
  17. package/dist/cjs/ts-accordion.cjs.entry.js +36 -0
  18. package/dist/cjs/ts-accordion.cjs.entry.js.map +1 -0
  19. package/dist/cjs/ts-alert.cjs.entry.js +60 -0
  20. package/dist/cjs/ts-alert.cjs.entry.js.map +1 -0
  21. package/dist/cjs/ts-avatar.cjs.entry.js +54 -0
  22. package/dist/cjs/ts-avatar.cjs.entry.js.map +1 -0
  23. package/dist/cjs/ts-badge.cjs.entry.js +38 -0
  24. package/dist/cjs/ts-badge.cjs.entry.js.map +1 -0
  25. package/dist/cjs/ts-banner.cjs.entry.js +67 -0
  26. package/dist/cjs/ts-banner.cjs.entry.js.map +1 -0
  27. package/dist/cjs/ts-breadcrumb-item.cjs.entry.js +28 -0
  28. package/dist/cjs/ts-breadcrumb-item.cjs.entry.js.map +1 -0
  29. package/dist/cjs/ts-breadcrumb.cjs.entry.js +35 -0
  30. package/dist/cjs/ts-breadcrumb.cjs.entry.js.map +1 -0
  31. package/dist/cjs/ts-button.cjs.entry.js +88 -0
  32. package/dist/cjs/ts-button.cjs.entry.js.map +1 -0
  33. package/dist/cjs/ts-card.cjs.entry.js +35 -0
  34. package/dist/cjs/ts-card.cjs.entry.js.map +1 -0
  35. package/dist/cjs/ts-checkbox.cjs.entry.js +68 -0
  36. package/dist/cjs/ts-checkbox.cjs.entry.js.map +1 -0
  37. package/dist/cjs/ts-chip.cjs.entry.js +76 -0
  38. package/dist/cjs/ts-chip.cjs.entry.js.map +1 -0
  39. package/dist/cjs/ts-container.cjs.entry.js +28 -0
  40. package/dist/cjs/ts-container.cjs.entry.js.map +1 -0
  41. package/dist/cjs/ts-date-picker.cjs.entry.js +229 -0
  42. package/dist/cjs/ts-date-picker.cjs.entry.js.map +1 -0
  43. package/dist/cjs/ts-dialog.cjs.entry.js +109 -0
  44. package/dist/cjs/ts-dialog.cjs.entry.js.map +1 -0
  45. package/dist/cjs/ts-divider.cjs.entry.js +33 -0
  46. package/dist/cjs/ts-divider.cjs.entry.js.map +1 -0
  47. package/dist/cjs/ts-drawer.cjs.entry.js +113 -0
  48. package/dist/cjs/ts-drawer.cjs.entry.js.map +1 -0
  49. package/dist/cjs/ts-empty-state.cjs.entry.js +32 -0
  50. package/dist/cjs/ts-empty-state.cjs.entry.js.map +1 -0
  51. package/dist/cjs/ts-file-upload.cjs.entry.js +122 -0
  52. package/dist/cjs/ts-file-upload.cjs.entry.js.map +1 -0
  53. package/dist/cjs/ts-grid.cjs.entry.js +37 -0
  54. package/dist/cjs/ts-grid.cjs.entry.js.map +1 -0
  55. package/dist/cjs/ts-icon-CfbhgAgr.js +161 -0
  56. package/dist/cjs/ts-icon-CfbhgAgr.js.map +1 -0
  57. package/dist/cjs/ts-icon.cjs.entry.js +11 -0
  58. package/dist/cjs/ts-icon.cjs.entry.js.map +1 -0
  59. package/dist/cjs/ts-input.cjs.entry.js +130 -0
  60. package/dist/cjs/ts-input.cjs.entry.js.map +1 -0
  61. package/dist/cjs/ts-menu-item.cjs.entry.js +65 -0
  62. package/dist/cjs/ts-menu-item.cjs.entry.js.map +1 -0
  63. package/dist/cjs/ts-menu.cjs.entry.js +155 -0
  64. package/dist/cjs/ts-menu.cjs.entry.js.map +1 -0
  65. package/dist/cjs/ts-modal.cjs.entry.js +122 -0
  66. package/dist/cjs/ts-modal.cjs.entry.js.map +1 -0
  67. package/dist/cjs/ts-nav-item.cjs.entry.js +48 -0
  68. package/dist/cjs/ts-nav-item.cjs.entry.js.map +1 -0
  69. package/dist/cjs/ts-nav.cjs.entry.js +29 -0
  70. package/dist/cjs/ts-nav.cjs.entry.js.map +1 -0
  71. package/dist/cjs/ts-pagination.cjs.entry.js +88 -0
  72. package/dist/cjs/ts-pagination.cjs.entry.js.map +1 -0
  73. package/dist/cjs/ts-popover.cjs.entry.js +133 -0
  74. package/dist/cjs/ts-popover.cjs.entry.js.map +1 -0
  75. package/dist/cjs/ts-progress.cjs.entry.js +46 -0
  76. package/dist/cjs/ts-progress.cjs.entry.js.map +1 -0
  77. package/dist/cjs/ts-radio.cjs.entry.js +60 -0
  78. package/dist/cjs/ts-radio.cjs.entry.js.map +1 -0
  79. package/dist/cjs/ts-row.cjs.entry.js +53 -0
  80. package/dist/cjs/ts-row.cjs.entry.js.map +1 -0
  81. package/dist/cjs/ts-select.cjs.entry.js +221 -0
  82. package/dist/cjs/ts-select.cjs.entry.js.map +1 -0
  83. package/dist/cjs/ts-skeleton.cjs.entry.js +55 -0
  84. package/dist/cjs/ts-skeleton.cjs.entry.js.map +1 -0
  85. package/dist/cjs/ts-slider.cjs.entry.js +132 -0
  86. package/dist/cjs/ts-slider.cjs.entry.js.map +1 -0
  87. package/dist/cjs/ts-spacer.cjs.entry.js +28 -0
  88. package/dist/cjs/ts-spacer.cjs.entry.js.map +1 -0
  89. package/dist/cjs/ts-spinner.cjs.entry.js +30 -0
  90. package/dist/cjs/ts-spinner.cjs.entry.js.map +1 -0
  91. package/dist/cjs/ts-stack.cjs.entry.js +34 -0
  92. package/dist/cjs/ts-stack.cjs.entry.js.map +1 -0
  93. package/dist/cjs/ts-step.cjs.entry.js +74 -0
  94. package/dist/cjs/ts-step.cjs.entry.js.map +1 -0
  95. package/dist/cjs/ts-stepper.cjs.entry.js +67 -0
  96. package/dist/cjs/ts-stepper.cjs.entry.js.map +1 -0
  97. package/dist/cjs/ts-switch-group.cjs.entry.js +109 -0
  98. package/dist/cjs/ts-switch-group.cjs.entry.js.map +1 -0
  99. package/dist/cjs/ts-switch-option.cjs.entry.js +42 -0
  100. package/dist/cjs/ts-switch-option.cjs.entry.js.map +1 -0
  101. package/dist/cjs/ts-tab-panel.cjs.entry.js +30 -0
  102. package/dist/cjs/ts-tab-panel.cjs.entry.js.map +1 -0
  103. package/dist/cjs/ts-table.cjs.entry.js +39 -0
  104. package/dist/cjs/ts-table.cjs.entry.js.map +1 -0
  105. package/dist/cjs/ts-tabs.cjs.entry.js +124 -0
  106. package/dist/cjs/ts-tabs.cjs.entry.js.map +1 -0
  107. package/dist/cjs/ts-textarea.cjs.entry.js +117 -0
  108. package/dist/cjs/ts-textarea.cjs.entry.js.map +1 -0
  109. package/dist/cjs/ts-toast.cjs.entry.js +107 -0
  110. package/dist/cjs/ts-toast.cjs.entry.js.map +1 -0
  111. package/dist/cjs/ts-toggle.cjs.entry.js +58 -0
  112. package/dist/cjs/ts-toggle.cjs.entry.js.map +1 -0
  113. package/dist/cjs/ts-toolbar.cjs.entry.js +29 -0
  114. package/dist/cjs/ts-toolbar.cjs.entry.js.map +1 -0
  115. package/dist/cjs/ts-tooltip.cjs.entry.js +82 -0
  116. package/dist/cjs/ts-tooltip.cjs.entry.js.map +1 -0
  117. package/dist/cjs/ts-tree-item.cjs.entry.js +94 -0
  118. package/dist/cjs/ts-tree-item.cjs.entry.js.map +1 -0
  119. package/dist/cjs/ts-tree.cjs.entry.js +81 -0
  120. package/dist/cjs/ts-tree.cjs.entry.js.map +1 -0
  121. package/dist/collection/collection-manifest.json +64 -0
  122. package/dist/collection/components/accordion/accordion-item.css +75 -0
  123. package/dist/collection/components/accordion/accordion-item.js +157 -0
  124. package/dist/collection/components/accordion/accordion-item.js.map +1 -0
  125. package/dist/collection/components/accordion/accordion-item.stories.js +4 -0
  126. package/dist/collection/components/accordion/accordion-item.stories.js.map +1 -0
  127. package/dist/collection/components/accordion/accordion.css +31 -0
  128. package/dist/collection/components/accordion/accordion.js +72 -0
  129. package/dist/collection/components/accordion/accordion.js.map +1 -0
  130. package/dist/collection/components/accordion/accordion.stories.js +90 -0
  131. package/dist/collection/components/accordion/accordion.stories.js.map +1 -0
  132. package/dist/collection/components/alert/alert.css +118 -0
  133. package/dist/collection/components/alert/alert.js +181 -0
  134. package/dist/collection/components/alert/alert.js.map +1 -0
  135. package/dist/collection/components/alert/alert.stories.js +128 -0
  136. package/dist/collection/components/alert/alert.stories.js.map +1 -0
  137. package/dist/collection/components/avatar/avatar.css +63 -0
  138. package/dist/collection/components/avatar/avatar.js +185 -0
  139. package/dist/collection/components/avatar/avatar.js.map +1 -0
  140. package/dist/collection/components/avatar/avatar.stories.js +138 -0
  141. package/dist/collection/components/avatar/avatar.stories.js.map +1 -0
  142. package/dist/collection/components/badge/badge.css +67 -0
  143. package/dist/collection/components/badge/badge.js +160 -0
  144. package/dist/collection/components/badge/badge.js.map +1 -0
  145. package/dist/collection/components/badge/badge.stories.js +193 -0
  146. package/dist/collection/components/badge/badge.stories.js.map +1 -0
  147. package/dist/collection/components/banner/banner.css +129 -0
  148. package/dist/collection/components/banner/banner.js +226 -0
  149. package/dist/collection/components/banner/banner.js.map +1 -0
  150. package/dist/collection/components/banner/banner.stories.js +92 -0
  151. package/dist/collection/components/banner/banner.stories.js.map +1 -0
  152. package/dist/collection/components/breadcrumb/breadcrumb-item.css +44 -0
  153. package/dist/collection/components/breadcrumb/breadcrumb-item.js +95 -0
  154. package/dist/collection/components/breadcrumb/breadcrumb-item.js.map +1 -0
  155. package/dist/collection/components/breadcrumb/breadcrumb-item.stories.js +4 -0
  156. package/dist/collection/components/breadcrumb/breadcrumb-item.stories.js.map +1 -0
  157. package/dist/collection/components/breadcrumb/breadcrumb.css +26 -0
  158. package/dist/collection/components/breadcrumb/breadcrumb.js +65 -0
  159. package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -0
  160. package/dist/collection/components/breadcrumb/breadcrumb.stories.js +88 -0
  161. package/dist/collection/components/breadcrumb/breadcrumb.stories.js.map +1 -0
  162. package/dist/collection/components/button/button.css +260 -0
  163. package/dist/collection/components/button/button.js +347 -0
  164. package/dist/collection/components/button/button.js.map +1 -0
  165. package/dist/collection/components/button/button.stories.js +219 -0
  166. package/dist/collection/components/button/button.stories.js.map +1 -0
  167. package/dist/collection/components/card/card.css +108 -0
  168. package/dist/collection/components/card/card.js +130 -0
  169. package/dist/collection/components/card/card.js.map +1 -0
  170. package/dist/collection/components/card/card.stories.js +221 -0
  171. package/dist/collection/components/card/card.stories.js.map +1 -0
  172. package/dist/collection/components/checkbox/checkbox.css +115 -0
  173. package/dist/collection/components/checkbox/checkbox.js +282 -0
  174. package/dist/collection/components/checkbox/checkbox.js.map +1 -0
  175. package/dist/collection/components/checkbox/checkbox.stories.js +90 -0
  176. package/dist/collection/components/checkbox/checkbox.stories.js.map +1 -0
  177. package/dist/collection/components/chip/chip.css +210 -0
  178. package/dist/collection/components/chip/chip.js +253 -0
  179. package/dist/collection/components/chip/chip.js.map +1 -0
  180. package/dist/collection/components/chip/chip.stories.js +139 -0
  181. package/dist/collection/components/chip/chip.stories.js.map +1 -0
  182. package/dist/collection/components/container/container.css +47 -0
  183. package/dist/collection/components/container/container.js +76 -0
  184. package/dist/collection/components/container/container.js.map +1 -0
  185. package/dist/collection/components/container/container.stories.js +138 -0
  186. package/dist/collection/components/container/container.stories.js.map +1 -0
  187. package/dist/collection/components/date-picker/date-picker.css +233 -0
  188. package/dist/collection/components/date-picker/date-picker.js +462 -0
  189. package/dist/collection/components/date-picker/date-picker.js.map +1 -0
  190. package/dist/collection/components/date-picker/date-picker.stories.js +119 -0
  191. package/dist/collection/components/date-picker/date-picker.stories.js.map +1 -0
  192. package/dist/collection/components/dialog/dialog.css +128 -0
  193. package/dist/collection/components/dialog/dialog.js +264 -0
  194. package/dist/collection/components/dialog/dialog.js.map +1 -0
  195. package/dist/collection/components/dialog/dialog.stories.js +147 -0
  196. package/dist/collection/components/dialog/dialog.stories.js.map +1 -0
  197. package/dist/collection/components/divider/divider.css +94 -0
  198. package/dist/collection/components/divider/divider.js +99 -0
  199. package/dist/collection/components/divider/divider.js.map +1 -0
  200. package/dist/collection/components/divider/divider.stories.js +94 -0
  201. package/dist/collection/components/divider/divider.stories.js.map +1 -0
  202. package/dist/collection/components/drawer/drawer.css +202 -0
  203. package/dist/collection/components/drawer/drawer.js +288 -0
  204. package/dist/collection/components/drawer/drawer.js.map +1 -0
  205. package/dist/collection/components/drawer/drawer.stories.js +143 -0
  206. package/dist/collection/components/drawer/drawer.stories.js.map +1 -0
  207. package/dist/collection/components/empty-state/empty-state.css +112 -0
  208. package/dist/collection/components/empty-state/empty-state.js +131 -0
  209. package/dist/collection/components/empty-state/empty-state.js.map +1 -0
  210. package/dist/collection/components/empty-state/empty-state.stories.js +113 -0
  211. package/dist/collection/components/empty-state/empty-state.stories.js.map +1 -0
  212. package/dist/collection/components/file-upload/file-upload.css +84 -0
  213. package/dist/collection/components/file-upload/file-upload.js +277 -0
  214. package/dist/collection/components/file-upload/file-upload.js.map +1 -0
  215. package/dist/collection/components/file-upload/file-upload.stories.js +107 -0
  216. package/dist/collection/components/file-upload/file-upload.stories.js.map +1 -0
  217. package/dist/collection/components/grid/grid.css +11 -0
  218. package/dist/collection/components/grid/grid.js +125 -0
  219. package/dist/collection/components/grid/grid.js.map +1 -0
  220. package/dist/collection/components/grid/grid.stories.js +134 -0
  221. package/dist/collection/components/grid/grid.stories.js.map +1 -0
  222. package/dist/collection/components/icon/icon-registry.js +39 -0
  223. package/dist/collection/components/icon/icon-registry.js.map +1 -0
  224. package/dist/collection/components/icon/icon.css +54 -0
  225. package/dist/collection/components/icon/icon.js +239 -0
  226. package/dist/collection/components/icon/icon.js.map +1 -0
  227. package/dist/collection/components/icon/icon.stories.js +119 -0
  228. package/dist/collection/components/icon/icon.stories.js.map +1 -0
  229. package/dist/collection/components/input/input.css +155 -0
  230. package/dist/collection/components/input/input.js +583 -0
  231. package/dist/collection/components/input/input.js.map +1 -0
  232. package/dist/collection/components/input/input.stories.js +151 -0
  233. package/dist/collection/components/input/input.stories.js.map +1 -0
  234. package/dist/collection/components/menu/menu-item.css +77 -0
  235. package/dist/collection/components/menu/menu-item.js +176 -0
  236. package/dist/collection/components/menu/menu-item.js.map +1 -0
  237. package/dist/collection/components/menu/menu-item.stories.js +4 -0
  238. package/dist/collection/components/menu/menu-item.stories.js.map +1 -0
  239. package/dist/collection/components/menu/menu.css +81 -0
  240. package/dist/collection/components/menu/menu.js +295 -0
  241. package/dist/collection/components/menu/menu.js.map +1 -0
  242. package/dist/collection/components/menu/menu.stories.js +126 -0
  243. package/dist/collection/components/menu/menu.stories.js.map +1 -0
  244. package/dist/collection/components/modal/modal.css +131 -0
  245. package/dist/collection/components/modal/modal.js +339 -0
  246. package/dist/collection/components/modal/modal.js.map +1 -0
  247. package/dist/collection/components/modal/modal.stories.js +233 -0
  248. package/dist/collection/components/modal/modal.stories.js.map +1 -0
  249. package/dist/collection/components/nav/nav-item.css +73 -0
  250. package/dist/collection/components/nav/nav-item.js +154 -0
  251. package/dist/collection/components/nav/nav-item.js.map +1 -0
  252. package/dist/collection/components/nav/nav-item.stories.js +4 -0
  253. package/dist/collection/components/nav/nav-item.stories.js.map +1 -0
  254. package/dist/collection/components/nav/nav.css +48 -0
  255. package/dist/collection/components/nav/nav.js +78 -0
  256. package/dist/collection/components/nav/nav.js.map +1 -0
  257. package/dist/collection/components/nav/nav.stories.js +106 -0
  258. package/dist/collection/components/nav/nav.stories.js.map +1 -0
  259. package/dist/collection/components/pagination/pagination.css +102 -0
  260. package/dist/collection/components/pagination/pagination.js +220 -0
  261. package/dist/collection/components/pagination/pagination.js.map +1 -0
  262. package/dist/collection/components/pagination/pagination.stories.js +92 -0
  263. package/dist/collection/components/pagination/pagination.stories.js.map +1 -0
  264. package/dist/collection/components/popover/popover.css +150 -0
  265. package/dist/collection/components/popover/popover.js +305 -0
  266. package/dist/collection/components/popover/popover.js.map +1 -0
  267. package/dist/collection/components/popover/popover.stories.js +112 -0
  268. package/dist/collection/components/popover/popover.stories.js.map +1 -0
  269. package/dist/collection/components/progress/progress.css +89 -0
  270. package/dist/collection/components/progress/progress.js +205 -0
  271. package/dist/collection/components/progress/progress.js.map +1 -0
  272. package/dist/collection/components/progress/progress.stories.js +132 -0
  273. package/dist/collection/components/progress/progress.stories.js.map +1 -0
  274. package/dist/collection/components/radio/radio.css +110 -0
  275. package/dist/collection/components/radio/radio.js +234 -0
  276. package/dist/collection/components/radio/radio.js.map +1 -0
  277. package/dist/collection/components/radio/radio.stories.js +77 -0
  278. package/dist/collection/components/radio/radio.stories.js.map +1 -0
  279. package/dist/collection/components/row/row.css +42 -0
  280. package/dist/collection/components/row/row.js +179 -0
  281. package/dist/collection/components/row/row.js.map +1 -0
  282. package/dist/collection/components/row/row.stories.js +172 -0
  283. package/dist/collection/components/row/row.stories.js.map +1 -0
  284. package/dist/collection/components/select/select.css +200 -0
  285. package/dist/collection/components/select/select.js +527 -0
  286. package/dist/collection/components/select/select.js.map +1 -0
  287. package/dist/collection/components/select/select.stories.js +138 -0
  288. package/dist/collection/components/select/select.stories.js.map +1 -0
  289. package/dist/collection/components/skeleton/skeleton.css +89 -0
  290. package/dist/collection/components/skeleton/skeleton.js +161 -0
  291. package/dist/collection/components/skeleton/skeleton.js.map +1 -0
  292. package/dist/collection/components/skeleton/skeleton.stories.js +140 -0
  293. package/dist/collection/components/skeleton/skeleton.stories.js.map +1 -0
  294. package/dist/collection/components/slider/slider.css +123 -0
  295. package/dist/collection/components/slider/slider.js +344 -0
  296. package/dist/collection/components/slider/slider.js.map +1 -0
  297. package/dist/collection/components/slider/slider.stories.js +100 -0
  298. package/dist/collection/components/slider/slider.stories.js.map +1 -0
  299. package/dist/collection/components/spacer/spacer.css +13 -0
  300. package/dist/collection/components/spacer/spacer.js +74 -0
  301. package/dist/collection/components/spacer/spacer.js.map +1 -0
  302. package/dist/collection/components/spacer/spacer.stories.js +90 -0
  303. package/dist/collection/components/spacer/spacer.stories.js.map +1 -0
  304. package/dist/collection/components/spinner/spinner.css +49 -0
  305. package/dist/collection/components/spinner/spinner.js +98 -0
  306. package/dist/collection/components/spinner/spinner.js.map +1 -0
  307. package/dist/collection/components/spinner/spinner.stories.js +88 -0
  308. package/dist/collection/components/spinner/spinner.stories.js.map +1 -0
  309. package/dist/collection/components/stack/stack.css +10 -0
  310. package/dist/collection/components/stack/stack.js +82 -0
  311. package/dist/collection/components/stack/stack.js.map +1 -0
  312. package/dist/collection/components/stack/stack.stories.js +121 -0
  313. package/dist/collection/components/stack/stack.stories.js.map +1 -0
  314. package/dist/collection/components/stepper/step.css +172 -0
  315. package/dist/collection/components/stepper/step.js +205 -0
  316. package/dist/collection/components/stepper/step.js.map +1 -0
  317. package/dist/collection/components/stepper/step.stories.js +4 -0
  318. package/dist/collection/components/stepper/step.stories.js.map +1 -0
  319. package/dist/collection/components/stepper/stepper.css +32 -0
  320. package/dist/collection/components/stepper/stepper.js +137 -0
  321. package/dist/collection/components/stepper/stepper.js.map +1 -0
  322. package/dist/collection/components/stepper/stepper.stories.js +130 -0
  323. package/dist/collection/components/stepper/stepper.stories.js.map +1 -0
  324. package/dist/collection/components/switch-group/switch-group.css +51 -0
  325. package/dist/collection/components/switch-group/switch-group.js +237 -0
  326. package/dist/collection/components/switch-group/switch-group.js.map +1 -0
  327. package/dist/collection/components/switch-group/switch-group.stories.js +132 -0
  328. package/dist/collection/components/switch-group/switch-group.stories.js.map +1 -0
  329. package/dist/collection/components/switch-group/switch-option.css +64 -0
  330. package/dist/collection/components/switch-group/switch-option.js +150 -0
  331. package/dist/collection/components/switch-group/switch-option.js.map +1 -0
  332. package/dist/collection/components/switch-group/switch-option.stories.js +4 -0
  333. package/dist/collection/components/switch-group/switch-option.stories.js.map +1 -0
  334. package/dist/collection/components/table/table.css +112 -0
  335. package/dist/collection/components/table/table.js +151 -0
  336. package/dist/collection/components/table/table.js.map +1 -0
  337. package/dist/collection/components/table/table.stories.js +147 -0
  338. package/dist/collection/components/table/table.stories.js.map +1 -0
  339. package/dist/collection/components/tabs/tab-panel.css +11 -0
  340. package/dist/collection/components/tabs/tab-panel.js +116 -0
  341. package/dist/collection/components/tabs/tab-panel.js.map +1 -0
  342. package/dist/collection/components/tabs/tab-panel.stories.js +4 -0
  343. package/dist/collection/components/tabs/tab-panel.stories.js.map +1 -0
  344. package/dist/collection/components/tabs/tabs.css +134 -0
  345. package/dist/collection/components/tabs/tabs.js +213 -0
  346. package/dist/collection/components/tabs/tabs.js.map +1 -0
  347. package/dist/collection/components/tabs/tabs.stories.js +187 -0
  348. package/dist/collection/components/tabs/tabs.stories.js.map +1 -0
  349. package/dist/collection/components/textarea/textarea.css +146 -0
  350. package/dist/collection/components/textarea/textarea.js +526 -0
  351. package/dist/collection/components/textarea/textarea.js.map +1 -0
  352. package/dist/collection/components/textarea/textarea.stories.js +130 -0
  353. package/dist/collection/components/textarea/textarea.stories.js.map +1 -0
  354. package/dist/collection/components/toast/toast.css +166 -0
  355. package/dist/collection/components/toast/toast.js +291 -0
  356. package/dist/collection/components/toast/toast.js.map +1 -0
  357. package/dist/collection/components/toast/toast.stories.js +91 -0
  358. package/dist/collection/components/toast/toast.stories.js.map +1 -0
  359. package/dist/collection/components/toggle/toggle.css +99 -0
  360. package/dist/collection/components/toggle/toggle.js +220 -0
  361. package/dist/collection/components/toggle/toggle.js.map +1 -0
  362. package/dist/collection/components/toggle/toggle.stories.js +145 -0
  363. package/dist/collection/components/toggle/toggle.stories.js.map +1 -0
  364. package/dist/collection/components/toolbar/toolbar.css +89 -0
  365. package/dist/collection/components/toolbar/toolbar.js +89 -0
  366. package/dist/collection/components/toolbar/toolbar.js.map +1 -0
  367. package/dist/collection/components/toolbar/toolbar.stories.js +131 -0
  368. package/dist/collection/components/toolbar/toolbar.stories.js.map +1 -0
  369. package/dist/collection/components/tooltip/tooltip.css +124 -0
  370. package/dist/collection/components/tooltip/tooltip.js +242 -0
  371. package/dist/collection/components/tooltip/tooltip.js.map +1 -0
  372. package/dist/collection/components/tooltip/tooltip.stories.js +186 -0
  373. package/dist/collection/components/tooltip/tooltip.stories.js.map +1 -0
  374. package/dist/collection/components/tree/tree-item.css +97 -0
  375. package/dist/collection/components/tree/tree-item.js +242 -0
  376. package/dist/collection/components/tree/tree-item.js.map +1 -0
  377. package/dist/collection/components/tree/tree-item.stories.js +4 -0
  378. package/dist/collection/components/tree/tree-item.stories.js.map +1 -0
  379. package/dist/collection/components/tree/tree.css +23 -0
  380. package/dist/collection/components/tree/tree.js +119 -0
  381. package/dist/collection/components/tree/tree.js.map +1 -0
  382. package/dist/collection/components/tree/tree.stories.js +121 -0
  383. package/dist/collection/components/tree/tree.stories.js.map +1 -0
  384. package/dist/collection/index.js +53 -0
  385. package/dist/collection/index.js.map +1 -0
  386. package/dist/collection/theme/tokens.js +109 -0
  387. package/dist/collection/theme/tokens.js.map +1 -0
  388. package/dist/collection/types/index.js +2 -0
  389. package/dist/collection/types/index.js.map +1 -0
  390. package/dist/collection/utils/aria.js +89 -0
  391. package/dist/collection/utils/aria.js.map +1 -0
  392. package/dist/collection/utils/dom.js +42 -0
  393. package/dist/collection/utils/dom.js.map +1 -0
  394. package/dist/collection/utils/events.js +20 -0
  395. package/dist/collection/utils/events.js.map +1 -0
  396. package/dist/components/index.d.ts +35 -0
  397. package/dist/components/index.js +2 -0
  398. package/dist/components/index.js.map +1 -0
  399. package/dist/components/p-6RDSLDuS.js +2 -0
  400. package/dist/components/p-6RDSLDuS.js.map +1 -0
  401. package/dist/components/p-B0ZXNFSa.js +2 -0
  402. package/dist/components/p-B0ZXNFSa.js.map +1 -0
  403. package/dist/components/p-BCgm2utU.js +2 -0
  404. package/dist/components/p-BCgm2utU.js.map +1 -0
  405. package/dist/components/p-BFN5hUo4.js +2 -0
  406. package/dist/components/p-BFN5hUo4.js.map +1 -0
  407. package/dist/components/p-BOxYojS-.js +9572 -0
  408. package/dist/components/p-BOxYojS-.js.map +1 -0
  409. package/dist/components/p-BP-fZfRb.js +2 -0
  410. package/dist/components/p-BP-fZfRb.js.map +1 -0
  411. package/dist/components/p-B_NL55YI.js +2 -0
  412. package/dist/components/p-B_NL55YI.js.map +1 -0
  413. package/dist/components/p-BcoU0ISN.js +2 -0
  414. package/dist/components/p-BcoU0ISN.js.map +1 -0
  415. package/dist/components/p-BdzH6wlc.js +2 -0
  416. package/dist/components/p-BdzH6wlc.js.map +1 -0
  417. package/dist/components/p-BeErYjKz.js +2 -0
  418. package/dist/components/p-BeErYjKz.js.map +1 -0
  419. package/dist/components/p-BjiDgszq.js +2 -0
  420. package/dist/components/p-BjiDgszq.js.map +1 -0
  421. package/dist/components/p-BjyTgfXe.js +2 -0
  422. package/dist/components/p-BjyTgfXe.js.map +1 -0
  423. package/dist/components/p-BlZHjan9.js +2 -0
  424. package/dist/components/p-BlZHjan9.js.map +1 -0
  425. package/dist/components/p-C7JaUlNB.js +2 -0
  426. package/dist/components/p-C7JaUlNB.js.map +1 -0
  427. package/dist/components/p-C8wd1644.js +2 -0
  428. package/dist/components/p-C8wd1644.js.map +1 -0
  429. package/dist/components/p-CEQXPxzU.js +2 -0
  430. package/dist/components/p-CEQXPxzU.js.map +1 -0
  431. package/dist/components/p-CGh7W07E.js +2 -0
  432. package/dist/components/p-CGh7W07E.js.map +1 -0
  433. package/dist/components/p-CHtE5caV.js +2 -0
  434. package/dist/components/p-CHtE5caV.js.map +1 -0
  435. package/dist/components/p-CSNeA_zh.js +2 -0
  436. package/dist/components/p-CSNeA_zh.js.map +1 -0
  437. package/dist/components/p-CbHlJvjF.js +2 -0
  438. package/dist/components/p-CbHlJvjF.js.map +1 -0
  439. package/dist/components/p-CkQOAizb.js +2 -0
  440. package/dist/components/p-CkQOAizb.js.map +1 -0
  441. package/dist/components/p-Cy_Ad-Jy.js +2 -0
  442. package/dist/components/p-Cy_Ad-Jy.js.map +1 -0
  443. package/dist/components/p-DD986daz.js +2 -0
  444. package/dist/components/p-DD986daz.js.map +1 -0
  445. package/dist/components/p-DFnNsZtI.js +2 -0
  446. package/dist/components/p-DFnNsZtI.js.map +1 -0
  447. package/dist/components/p-DMPxu5Po.js +2 -0
  448. package/dist/components/p-DMPxu5Po.js.map +1 -0
  449. package/dist/components/p-DMuI5d5r.js +2 -0
  450. package/dist/components/p-DMuI5d5r.js.map +1 -0
  451. package/dist/components/p-DPQ1o4MP.js +2 -0
  452. package/dist/components/p-DPQ1o4MP.js.map +1 -0
  453. package/dist/components/p-DTAVTqnc.js +2 -0
  454. package/dist/components/p-DTAVTqnc.js.map +1 -0
  455. package/dist/components/p-DhQ7X_TL.js +2 -0
  456. package/dist/components/p-DhQ7X_TL.js.map +1 -0
  457. package/dist/components/p-DkpyRqHf.js +2 -0
  458. package/dist/components/p-DkpyRqHf.js.map +1 -0
  459. package/dist/components/p-DlB-KfKY.js +2 -0
  460. package/dist/components/p-DlB-KfKY.js.map +1 -0
  461. package/dist/components/p-DooMF1E0.js +2 -0
  462. package/dist/components/p-DooMF1E0.js.map +1 -0
  463. package/dist/components/p-DwJ7Jt3k.js +2 -0
  464. package/dist/components/p-DwJ7Jt3k.js.map +1 -0
  465. package/dist/components/p-DwUH8YQW.js +2 -0
  466. package/dist/components/p-DwUH8YQW.js.map +1 -0
  467. package/dist/components/p-Fot2uNwg.js +2 -0
  468. package/dist/components/p-Fot2uNwg.js.map +1 -0
  469. package/dist/components/p-O8aQgWRZ.js +2 -0
  470. package/dist/components/p-O8aQgWRZ.js.map +1 -0
  471. package/dist/components/p-SopsdO_f.js +2 -0
  472. package/dist/components/p-SopsdO_f.js.map +1 -0
  473. package/dist/components/p-TFHAUMKT.js +2 -0
  474. package/dist/components/p-TFHAUMKT.js.map +1 -0
  475. package/dist/components/p-faVXXwqR.js +2 -0
  476. package/dist/components/p-faVXXwqR.js.map +1 -0
  477. package/dist/components/p-lpqZSiIf.js +2 -0
  478. package/dist/components/p-lpqZSiIf.js.map +1 -0
  479. package/dist/components/p-mfB_pP4L.js +2 -0
  480. package/dist/components/p-mfB_pP4L.js.map +1 -0
  481. package/dist/components/p-v-L32wKy.js +2 -0
  482. package/dist/components/p-v-L32wKy.js.map +1 -0
  483. package/dist/components/p-zveaarwa.js +2 -0
  484. package/dist/components/p-zveaarwa.js.map +1 -0
  485. package/dist/components/ts-accordion-item.d.ts +11 -0
  486. package/dist/components/ts-accordion-item.js +2 -0
  487. package/dist/components/ts-accordion-item.js.map +1 -0
  488. package/dist/components/ts-accordion.d.ts +11 -0
  489. package/dist/components/ts-accordion.js +2 -0
  490. package/dist/components/ts-accordion.js.map +1 -0
  491. package/dist/components/ts-alert.d.ts +11 -0
  492. package/dist/components/ts-alert.js +2 -0
  493. package/dist/components/ts-alert.js.map +1 -0
  494. package/dist/components/ts-avatar.d.ts +11 -0
  495. package/dist/components/ts-avatar.js +2 -0
  496. package/dist/components/ts-avatar.js.map +1 -0
  497. package/dist/components/ts-badge.d.ts +11 -0
  498. package/dist/components/ts-badge.js +2 -0
  499. package/dist/components/ts-badge.js.map +1 -0
  500. package/dist/components/ts-banner.d.ts +11 -0
  501. package/dist/components/ts-banner.js +2 -0
  502. package/dist/components/ts-banner.js.map +1 -0
  503. package/dist/components/ts-breadcrumb-item.d.ts +11 -0
  504. package/dist/components/ts-breadcrumb-item.js +2 -0
  505. package/dist/components/ts-breadcrumb-item.js.map +1 -0
  506. package/dist/components/ts-breadcrumb.d.ts +11 -0
  507. package/dist/components/ts-breadcrumb.js +2 -0
  508. package/dist/components/ts-breadcrumb.js.map +1 -0
  509. package/dist/components/ts-button.d.ts +11 -0
  510. package/dist/components/ts-button.js +2 -0
  511. package/dist/components/ts-button.js.map +1 -0
  512. package/dist/components/ts-card.d.ts +11 -0
  513. package/dist/components/ts-card.js +2 -0
  514. package/dist/components/ts-card.js.map +1 -0
  515. package/dist/components/ts-checkbox.d.ts +11 -0
  516. package/dist/components/ts-checkbox.js +2 -0
  517. package/dist/components/ts-checkbox.js.map +1 -0
  518. package/dist/components/ts-chip.d.ts +11 -0
  519. package/dist/components/ts-chip.js +2 -0
  520. package/dist/components/ts-chip.js.map +1 -0
  521. package/dist/components/ts-container.d.ts +11 -0
  522. package/dist/components/ts-container.js +2 -0
  523. package/dist/components/ts-container.js.map +1 -0
  524. package/dist/components/ts-date-picker.d.ts +11 -0
  525. package/dist/components/ts-date-picker.js +2 -0
  526. package/dist/components/ts-date-picker.js.map +1 -0
  527. package/dist/components/ts-dialog.d.ts +11 -0
  528. package/dist/components/ts-dialog.js +2 -0
  529. package/dist/components/ts-dialog.js.map +1 -0
  530. package/dist/components/ts-divider.d.ts +11 -0
  531. package/dist/components/ts-divider.js +2 -0
  532. package/dist/components/ts-divider.js.map +1 -0
  533. package/dist/components/ts-drawer.d.ts +11 -0
  534. package/dist/components/ts-drawer.js +2 -0
  535. package/dist/components/ts-drawer.js.map +1 -0
  536. package/dist/components/ts-empty-state.d.ts +11 -0
  537. package/dist/components/ts-empty-state.js +2 -0
  538. package/dist/components/ts-empty-state.js.map +1 -0
  539. package/dist/components/ts-file-upload.d.ts +11 -0
  540. package/dist/components/ts-file-upload.js +2 -0
  541. package/dist/components/ts-file-upload.js.map +1 -0
  542. package/dist/components/ts-grid.d.ts +11 -0
  543. package/dist/components/ts-grid.js +2 -0
  544. package/dist/components/ts-grid.js.map +1 -0
  545. package/dist/components/ts-icon.d.ts +11 -0
  546. package/dist/components/ts-icon.js +2 -0
  547. package/dist/components/ts-icon.js.map +1 -0
  548. package/dist/components/ts-input.d.ts +11 -0
  549. package/dist/components/ts-input.js +2 -0
  550. package/dist/components/ts-input.js.map +1 -0
  551. package/dist/components/ts-menu-item.d.ts +11 -0
  552. package/dist/components/ts-menu-item.js +2 -0
  553. package/dist/components/ts-menu-item.js.map +1 -0
  554. package/dist/components/ts-menu.d.ts +11 -0
  555. package/dist/components/ts-menu.js +2 -0
  556. package/dist/components/ts-menu.js.map +1 -0
  557. package/dist/components/ts-modal.d.ts +11 -0
  558. package/dist/components/ts-modal.js +2 -0
  559. package/dist/components/ts-modal.js.map +1 -0
  560. package/dist/components/ts-nav-item.d.ts +11 -0
  561. package/dist/components/ts-nav-item.js +2 -0
  562. package/dist/components/ts-nav-item.js.map +1 -0
  563. package/dist/components/ts-nav.d.ts +11 -0
  564. package/dist/components/ts-nav.js +2 -0
  565. package/dist/components/ts-nav.js.map +1 -0
  566. package/dist/components/ts-pagination.d.ts +11 -0
  567. package/dist/components/ts-pagination.js +2 -0
  568. package/dist/components/ts-pagination.js.map +1 -0
  569. package/dist/components/ts-popover.d.ts +11 -0
  570. package/dist/components/ts-popover.js +2 -0
  571. package/dist/components/ts-popover.js.map +1 -0
  572. package/dist/components/ts-progress.d.ts +11 -0
  573. package/dist/components/ts-progress.js +2 -0
  574. package/dist/components/ts-progress.js.map +1 -0
  575. package/dist/components/ts-radio.d.ts +11 -0
  576. package/dist/components/ts-radio.js +2 -0
  577. package/dist/components/ts-radio.js.map +1 -0
  578. package/dist/components/ts-row.d.ts +11 -0
  579. package/dist/components/ts-row.js +2 -0
  580. package/dist/components/ts-row.js.map +1 -0
  581. package/dist/components/ts-select.d.ts +11 -0
  582. package/dist/components/ts-select.js +2 -0
  583. package/dist/components/ts-select.js.map +1 -0
  584. package/dist/components/ts-skeleton.d.ts +11 -0
  585. package/dist/components/ts-skeleton.js +2 -0
  586. package/dist/components/ts-skeleton.js.map +1 -0
  587. package/dist/components/ts-slider.d.ts +11 -0
  588. package/dist/components/ts-slider.js +2 -0
  589. package/dist/components/ts-slider.js.map +1 -0
  590. package/dist/components/ts-spacer.d.ts +11 -0
  591. package/dist/components/ts-spacer.js +2 -0
  592. package/dist/components/ts-spacer.js.map +1 -0
  593. package/dist/components/ts-spinner.d.ts +11 -0
  594. package/dist/components/ts-spinner.js +2 -0
  595. package/dist/components/ts-spinner.js.map +1 -0
  596. package/dist/components/ts-stack.d.ts +11 -0
  597. package/dist/components/ts-stack.js +2 -0
  598. package/dist/components/ts-stack.js.map +1 -0
  599. package/dist/components/ts-step.d.ts +11 -0
  600. package/dist/components/ts-step.js +2 -0
  601. package/dist/components/ts-step.js.map +1 -0
  602. package/dist/components/ts-stepper.d.ts +11 -0
  603. package/dist/components/ts-stepper.js +2 -0
  604. package/dist/components/ts-stepper.js.map +1 -0
  605. package/dist/components/ts-switch-group.d.ts +11 -0
  606. package/dist/components/ts-switch-group.js +2 -0
  607. package/dist/components/ts-switch-group.js.map +1 -0
  608. package/dist/components/ts-switch-option.d.ts +11 -0
  609. package/dist/components/ts-switch-option.js +2 -0
  610. package/dist/components/ts-switch-option.js.map +1 -0
  611. package/dist/components/ts-tab-panel.d.ts +11 -0
  612. package/dist/components/ts-tab-panel.js +2 -0
  613. package/dist/components/ts-tab-panel.js.map +1 -0
  614. package/dist/components/ts-table.d.ts +11 -0
  615. package/dist/components/ts-table.js +2 -0
  616. package/dist/components/ts-table.js.map +1 -0
  617. package/dist/components/ts-tabs.d.ts +11 -0
  618. package/dist/components/ts-tabs.js +2 -0
  619. package/dist/components/ts-tabs.js.map +1 -0
  620. package/dist/components/ts-textarea.d.ts +11 -0
  621. package/dist/components/ts-textarea.js +2 -0
  622. package/dist/components/ts-textarea.js.map +1 -0
  623. package/dist/components/ts-toast.d.ts +11 -0
  624. package/dist/components/ts-toast.js +2 -0
  625. package/dist/components/ts-toast.js.map +1 -0
  626. package/dist/components/ts-toggle.d.ts +11 -0
  627. package/dist/components/ts-toggle.js +2 -0
  628. package/dist/components/ts-toggle.js.map +1 -0
  629. package/dist/components/ts-toolbar.d.ts +11 -0
  630. package/dist/components/ts-toolbar.js +2 -0
  631. package/dist/components/ts-toolbar.js.map +1 -0
  632. package/dist/components/ts-tooltip.d.ts +11 -0
  633. package/dist/components/ts-tooltip.js +2 -0
  634. package/dist/components/ts-tooltip.js.map +1 -0
  635. package/dist/components/ts-tree-item.d.ts +11 -0
  636. package/dist/components/ts-tree-item.js +2 -0
  637. package/dist/components/ts-tree-item.js.map +1 -0
  638. package/dist/components/ts-tree.d.ts +11 -0
  639. package/dist/components/ts-tree.js +2 -0
  640. package/dist/components/ts-tree.js.map +1 -0
  641. package/dist/components.d.ts +480 -0
  642. package/dist/components.json +12678 -0
  643. package/dist/esm/aria-lpqZSiIf.js +89 -0
  644. package/dist/esm/aria-lpqZSiIf.js.map +1 -0
  645. package/dist/esm/index-V8-ENixA.js +2373 -0
  646. package/dist/esm/index-V8-ENixA.js.map +1 -0
  647. package/dist/esm/index.js +102 -0
  648. package/dist/esm/index.js.map +1 -0
  649. package/dist/esm/loader.js +13 -0
  650. package/dist/esm/loader.js.map +1 -0
  651. package/dist/esm/lucide-BOxYojS-.js +26523 -0
  652. package/dist/esm/lucide-BOxYojS-.js.map +1 -0
  653. package/dist/esm/tessera-ui.js +23 -0
  654. package/dist/esm/tessera-ui.js.map +1 -0
  655. package/dist/esm/ts-accordion-item.entry.js +63 -0
  656. package/dist/esm/ts-accordion-item.entry.js.map +1 -0
  657. package/dist/esm/ts-accordion.entry.js +34 -0
  658. package/dist/esm/ts-accordion.entry.js.map +1 -0
  659. package/dist/esm/ts-alert.entry.js +58 -0
  660. package/dist/esm/ts-alert.entry.js.map +1 -0
  661. package/dist/esm/ts-avatar.entry.js +52 -0
  662. package/dist/esm/ts-avatar.entry.js.map +1 -0
  663. package/dist/esm/ts-badge.entry.js +36 -0
  664. package/dist/esm/ts-badge.entry.js.map +1 -0
  665. package/dist/esm/ts-banner.entry.js +65 -0
  666. package/dist/esm/ts-banner.entry.js.map +1 -0
  667. package/dist/esm/ts-breadcrumb-item.entry.js +26 -0
  668. package/dist/esm/ts-breadcrumb-item.entry.js.map +1 -0
  669. package/dist/esm/ts-breadcrumb.entry.js +33 -0
  670. package/dist/esm/ts-breadcrumb.entry.js.map +1 -0
  671. package/dist/esm/ts-button.entry.js +86 -0
  672. package/dist/esm/ts-button.entry.js.map +1 -0
  673. package/dist/esm/ts-card.entry.js +33 -0
  674. package/dist/esm/ts-card.entry.js.map +1 -0
  675. package/dist/esm/ts-checkbox.entry.js +66 -0
  676. package/dist/esm/ts-checkbox.entry.js.map +1 -0
  677. package/dist/esm/ts-chip.entry.js +74 -0
  678. package/dist/esm/ts-chip.entry.js.map +1 -0
  679. package/dist/esm/ts-container.entry.js +26 -0
  680. package/dist/esm/ts-container.entry.js.map +1 -0
  681. package/dist/esm/ts-date-picker.entry.js +227 -0
  682. package/dist/esm/ts-date-picker.entry.js.map +1 -0
  683. package/dist/esm/ts-dialog.entry.js +107 -0
  684. package/dist/esm/ts-dialog.entry.js.map +1 -0
  685. package/dist/esm/ts-divider.entry.js +31 -0
  686. package/dist/esm/ts-divider.entry.js.map +1 -0
  687. package/dist/esm/ts-drawer.entry.js +111 -0
  688. package/dist/esm/ts-drawer.entry.js.map +1 -0
  689. package/dist/esm/ts-empty-state.entry.js +30 -0
  690. package/dist/esm/ts-empty-state.entry.js.map +1 -0
  691. package/dist/esm/ts-file-upload.entry.js +120 -0
  692. package/dist/esm/ts-file-upload.entry.js.map +1 -0
  693. package/dist/esm/ts-grid.entry.js +35 -0
  694. package/dist/esm/ts-grid.entry.js.map +1 -0
  695. package/dist/esm/ts-icon-Jz9ioZag.js +155 -0
  696. package/dist/esm/ts-icon-Jz9ioZag.js.map +1 -0
  697. package/dist/esm/ts-icon.entry.js +5 -0
  698. package/dist/esm/ts-icon.entry.js.map +1 -0
  699. package/dist/esm/ts-input.entry.js +128 -0
  700. package/dist/esm/ts-input.entry.js.map +1 -0
  701. package/dist/esm/ts-menu-item.entry.js +63 -0
  702. package/dist/esm/ts-menu-item.entry.js.map +1 -0
  703. package/dist/esm/ts-menu.entry.js +153 -0
  704. package/dist/esm/ts-menu.entry.js.map +1 -0
  705. package/dist/esm/ts-modal.entry.js +120 -0
  706. package/dist/esm/ts-modal.entry.js.map +1 -0
  707. package/dist/esm/ts-nav-item.entry.js +46 -0
  708. package/dist/esm/ts-nav-item.entry.js.map +1 -0
  709. package/dist/esm/ts-nav.entry.js +27 -0
  710. package/dist/esm/ts-nav.entry.js.map +1 -0
  711. package/dist/esm/ts-pagination.entry.js +86 -0
  712. package/dist/esm/ts-pagination.entry.js.map +1 -0
  713. package/dist/esm/ts-popover.entry.js +131 -0
  714. package/dist/esm/ts-popover.entry.js.map +1 -0
  715. package/dist/esm/ts-progress.entry.js +44 -0
  716. package/dist/esm/ts-progress.entry.js.map +1 -0
  717. package/dist/esm/ts-radio.entry.js +58 -0
  718. package/dist/esm/ts-radio.entry.js.map +1 -0
  719. package/dist/esm/ts-row.entry.js +51 -0
  720. package/dist/esm/ts-row.entry.js.map +1 -0
  721. package/dist/esm/ts-select.entry.js +219 -0
  722. package/dist/esm/ts-select.entry.js.map +1 -0
  723. package/dist/esm/ts-skeleton.entry.js +53 -0
  724. package/dist/esm/ts-skeleton.entry.js.map +1 -0
  725. package/dist/esm/ts-slider.entry.js +130 -0
  726. package/dist/esm/ts-slider.entry.js.map +1 -0
  727. package/dist/esm/ts-spacer.entry.js +26 -0
  728. package/dist/esm/ts-spacer.entry.js.map +1 -0
  729. package/dist/esm/ts-spinner.entry.js +28 -0
  730. package/dist/esm/ts-spinner.entry.js.map +1 -0
  731. package/dist/esm/ts-stack.entry.js +32 -0
  732. package/dist/esm/ts-stack.entry.js.map +1 -0
  733. package/dist/esm/ts-step.entry.js +72 -0
  734. package/dist/esm/ts-step.entry.js.map +1 -0
  735. package/dist/esm/ts-stepper.entry.js +65 -0
  736. package/dist/esm/ts-stepper.entry.js.map +1 -0
  737. package/dist/esm/ts-switch-group.entry.js +107 -0
  738. package/dist/esm/ts-switch-group.entry.js.map +1 -0
  739. package/dist/esm/ts-switch-option.entry.js +40 -0
  740. package/dist/esm/ts-switch-option.entry.js.map +1 -0
  741. package/dist/esm/ts-tab-panel.entry.js +28 -0
  742. package/dist/esm/ts-tab-panel.entry.js.map +1 -0
  743. package/dist/esm/ts-table.entry.js +37 -0
  744. package/dist/esm/ts-table.entry.js.map +1 -0
  745. package/dist/esm/ts-tabs.entry.js +122 -0
  746. package/dist/esm/ts-tabs.entry.js.map +1 -0
  747. package/dist/esm/ts-textarea.entry.js +115 -0
  748. package/dist/esm/ts-textarea.entry.js.map +1 -0
  749. package/dist/esm/ts-toast.entry.js +105 -0
  750. package/dist/esm/ts-toast.entry.js.map +1 -0
  751. package/dist/esm/ts-toggle.entry.js +56 -0
  752. package/dist/esm/ts-toggle.entry.js.map +1 -0
  753. package/dist/esm/ts-toolbar.entry.js +27 -0
  754. package/dist/esm/ts-toolbar.entry.js.map +1 -0
  755. package/dist/esm/ts-tooltip.entry.js +80 -0
  756. package/dist/esm/ts-tooltip.entry.js.map +1 -0
  757. package/dist/esm/ts-tree-item.entry.js +92 -0
  758. package/dist/esm/ts-tree-item.entry.js.map +1 -0
  759. package/dist/esm/ts-tree.entry.js +79 -0
  760. package/dist/esm/ts-tree.entry.js.map +1 -0
  761. package/dist/index.cjs.js +1 -0
  762. package/dist/index.js +1 -0
  763. package/dist/tessera-ui/index.esm.js +2 -0
  764. package/dist/tessera-ui/index.esm.js.map +1 -0
  765. package/dist/tessera-ui/p-0424cd55.entry.js +2 -0
  766. package/dist/tessera-ui/p-0424cd55.entry.js.map +1 -0
  767. package/dist/tessera-ui/p-04522bf9.entry.js +2 -0
  768. package/dist/tessera-ui/p-04522bf9.entry.js.map +1 -0
  769. package/dist/tessera-ui/p-04aa8b90.entry.js +2 -0
  770. package/dist/tessera-ui/p-04aa8b90.entry.js.map +1 -0
  771. package/dist/tessera-ui/p-080eaf89.entry.js +2 -0
  772. package/dist/tessera-ui/p-080eaf89.entry.js.map +1 -0
  773. package/dist/tessera-ui/p-0ec061e5.entry.js +2 -0
  774. package/dist/tessera-ui/p-0ec061e5.entry.js.map +1 -0
  775. package/dist/tessera-ui/p-122e43b7.entry.js +2 -0
  776. package/dist/tessera-ui/p-122e43b7.entry.js.map +1 -0
  777. package/dist/tessera-ui/p-16bb8ca8.entry.js +2 -0
  778. package/dist/tessera-ui/p-16bb8ca8.entry.js.map +1 -0
  779. package/dist/tessera-ui/p-16fc632b.entry.js +2 -0
  780. package/dist/tessera-ui/p-16fc632b.entry.js.map +1 -0
  781. package/dist/tessera-ui/p-1d73f6c9.entry.js +2 -0
  782. package/dist/tessera-ui/p-1d73f6c9.entry.js.map +1 -0
  783. package/dist/tessera-ui/p-24305379.entry.js +2 -0
  784. package/dist/tessera-ui/p-24305379.entry.js.map +1 -0
  785. package/dist/tessera-ui/p-25f77cc9.entry.js +2 -0
  786. package/dist/tessera-ui/p-25f77cc9.entry.js.map +1 -0
  787. package/dist/tessera-ui/p-35eb8496.entry.js +2 -0
  788. package/dist/tessera-ui/p-35eb8496.entry.js.map +1 -0
  789. package/dist/tessera-ui/p-3aec66b4.entry.js +2 -0
  790. package/dist/tessera-ui/p-3aec66b4.entry.js.map +1 -0
  791. package/dist/tessera-ui/p-4277460b.entry.js +2 -0
  792. package/dist/tessera-ui/p-4277460b.entry.js.map +1 -0
  793. package/dist/tessera-ui/p-441310f7.entry.js +2 -0
  794. package/dist/tessera-ui/p-441310f7.entry.js.map +1 -0
  795. package/dist/tessera-ui/p-491e1a75.entry.js +2 -0
  796. package/dist/tessera-ui/p-491e1a75.entry.js.map +1 -0
  797. package/dist/tessera-ui/p-50d092ce.entry.js +2 -0
  798. package/dist/tessera-ui/p-50d092ce.entry.js.map +1 -0
  799. package/dist/tessera-ui/p-50efadf3.entry.js +2 -0
  800. package/dist/tessera-ui/p-50efadf3.entry.js.map +1 -0
  801. package/dist/tessera-ui/p-53846d59.entry.js +2 -0
  802. package/dist/tessera-ui/p-53846d59.entry.js.map +1 -0
  803. package/dist/tessera-ui/p-56f2b070.entry.js +2 -0
  804. package/dist/tessera-ui/p-56f2b070.entry.js.map +1 -0
  805. package/dist/tessera-ui/p-6760f922.entry.js +2 -0
  806. package/dist/tessera-ui/p-6760f922.entry.js.map +1 -0
  807. package/dist/tessera-ui/p-69bb11ed.entry.js +2 -0
  808. package/dist/tessera-ui/p-69bb11ed.entry.js.map +1 -0
  809. package/dist/tessera-ui/p-6d35a60c.entry.js +2 -0
  810. package/dist/tessera-ui/p-6d35a60c.entry.js.map +1 -0
  811. package/dist/tessera-ui/p-6ec285ad.entry.js +2 -0
  812. package/dist/tessera-ui/p-6ec285ad.entry.js.map +1 -0
  813. package/dist/tessera-ui/p-708d4eb5.entry.js +2 -0
  814. package/dist/tessera-ui/p-708d4eb5.entry.js.map +1 -0
  815. package/dist/tessera-ui/p-79ff8ceb.entry.js +2 -0
  816. package/dist/tessera-ui/p-79ff8ceb.entry.js.map +1 -0
  817. package/dist/tessera-ui/p-7e531195.entry.js +2 -0
  818. package/dist/tessera-ui/p-7e531195.entry.js.map +1 -0
  819. package/dist/tessera-ui/p-7fa64f00.entry.js +2 -0
  820. package/dist/tessera-ui/p-7fa64f00.entry.js.map +1 -0
  821. package/dist/tessera-ui/p-829c4307.entry.js +2 -0
  822. package/dist/tessera-ui/p-829c4307.entry.js.map +1 -0
  823. package/dist/tessera-ui/p-91ccef3f.entry.js +2 -0
  824. package/dist/tessera-ui/p-91ccef3f.entry.js.map +1 -0
  825. package/dist/tessera-ui/p-9209e603.entry.js +2 -0
  826. package/dist/tessera-ui/p-9209e603.entry.js.map +1 -0
  827. package/dist/tessera-ui/p-97a9def7.entry.js +2 -0
  828. package/dist/tessera-ui/p-97a9def7.entry.js.map +1 -0
  829. package/dist/tessera-ui/p-9b41b538.entry.js +2 -0
  830. package/dist/tessera-ui/p-9b41b538.entry.js.map +1 -0
  831. package/dist/tessera-ui/p-9c0504fd.entry.js +2 -0
  832. package/dist/tessera-ui/p-9c0504fd.entry.js.map +1 -0
  833. package/dist/tessera-ui/p-BOxYojS-.js +9572 -0
  834. package/dist/tessera-ui/p-BOxYojS-.js.map +1 -0
  835. package/dist/tessera-ui/p-StBQmS8h.js +2 -0
  836. package/dist/tessera-ui/p-StBQmS8h.js.map +1 -0
  837. package/dist/tessera-ui/p-V8-ENixA.js +3 -0
  838. package/dist/tessera-ui/p-V8-ENixA.js.map +1 -0
  839. package/dist/tessera-ui/p-a120b5d6.entry.js +2 -0
  840. package/dist/tessera-ui/p-a120b5d6.entry.js.map +1 -0
  841. package/dist/tessera-ui/p-a55a5695.entry.js +2 -0
  842. package/dist/tessera-ui/p-a55a5695.entry.js.map +1 -0
  843. package/dist/tessera-ui/p-a83d903e.entry.js +2 -0
  844. package/dist/tessera-ui/p-a83d903e.entry.js.map +1 -0
  845. package/dist/tessera-ui/p-adc807dc.entry.js +2 -0
  846. package/dist/tessera-ui/p-adc807dc.entry.js.map +1 -0
  847. package/dist/tessera-ui/p-b09f202c.entry.js +2 -0
  848. package/dist/tessera-ui/p-b09f202c.entry.js.map +1 -0
  849. package/dist/tessera-ui/p-b1182592.entry.js +2 -0
  850. package/dist/tessera-ui/p-b1182592.entry.js.map +1 -0
  851. package/dist/tessera-ui/p-b3f60955.entry.js +2 -0
  852. package/dist/tessera-ui/p-b3f60955.entry.js.map +1 -0
  853. package/dist/tessera-ui/p-bb9ebbd8.entry.js +2 -0
  854. package/dist/tessera-ui/p-bb9ebbd8.entry.js.map +1 -0
  855. package/dist/tessera-ui/p-bce40715.entry.js +2 -0
  856. package/dist/tessera-ui/p-bce40715.entry.js.map +1 -0
  857. package/dist/tessera-ui/p-c35c7049.entry.js +2 -0
  858. package/dist/tessera-ui/p-c35c7049.entry.js.map +1 -0
  859. package/dist/tessera-ui/p-c59ecffa.entry.js +2 -0
  860. package/dist/tessera-ui/p-c59ecffa.entry.js.map +1 -0
  861. package/dist/tessera-ui/p-d318774a.entry.js +2 -0
  862. package/dist/tessera-ui/p-d318774a.entry.js.map +1 -0
  863. package/dist/tessera-ui/p-d5cbadd6.entry.js +2 -0
  864. package/dist/tessera-ui/p-d5cbadd6.entry.js.map +1 -0
  865. package/dist/tessera-ui/p-e1d2b141.entry.js +2 -0
  866. package/dist/tessera-ui/p-e1d2b141.entry.js.map +1 -0
  867. package/dist/tessera-ui/p-f0bf6408.entry.js +2 -0
  868. package/dist/tessera-ui/p-f0bf6408.entry.js.map +1 -0
  869. package/dist/tessera-ui/p-f639213a.entry.js +2 -0
  870. package/dist/tessera-ui/p-f639213a.entry.js.map +1 -0
  871. package/dist/tessera-ui/p-fd2376e0.entry.js +2 -0
  872. package/dist/tessera-ui/p-fd2376e0.entry.js.map +1 -0
  873. package/dist/tessera-ui/p-fef9a993.entry.js +2 -0
  874. package/dist/tessera-ui/p-fef9a993.entry.js.map +1 -0
  875. package/dist/tessera-ui/p-lpqZSiIf.js +2 -0
  876. package/dist/tessera-ui/p-lpqZSiIf.js.map +1 -0
  877. package/dist/tessera-ui/tessera-ui.css +1 -0
  878. package/dist/tessera-ui/tessera-ui.esm.js +2 -0
  879. package/dist/tessera-ui/tessera-ui.esm.js.map +1 -0
  880. package/dist/types/components/accordion/accordion-item.d.ts +28 -0
  881. package/dist/types/components/accordion/accordion-item.stories.d.ts +5 -0
  882. package/dist/types/components/accordion/accordion.d.ts +12 -0
  883. package/dist/types/components/accordion/accordion.stories.d.ts +21 -0
  884. package/dist/types/components/alert/alert.d.ts +30 -0
  885. package/dist/types/components/alert/alert.stories.d.ts +34 -0
  886. package/dist/types/components/avatar/avatar.d.ts +26 -0
  887. package/dist/types/components/avatar/avatar.stories.d.ts +51 -0
  888. package/dist/types/components/badge/badge.d.ts +19 -0
  889. package/dist/types/components/badge/badge.stories.d.ts +50 -0
  890. package/dist/types/components/banner/banner.d.ts +33 -0
  891. package/dist/types/components/banner/banner.stories.d.ts +40 -0
  892. package/dist/types/components/breadcrumb/breadcrumb-item.d.ts +15 -0
  893. package/dist/types/components/breadcrumb/breadcrumb-item.stories.d.ts +5 -0
  894. package/dist/types/components/breadcrumb/breadcrumb.d.ts +13 -0
  895. package/dist/types/components/breadcrumb/breadcrumb.stories.d.ts +20 -0
  896. package/dist/types/components/button/button.d.ts +45 -0
  897. package/dist/types/components/button/button.stories.d.ts +73 -0
  898. package/dist/types/components/card/card.d.ts +23 -0
  899. package/dist/types/components/card/card.stories.d.ts +46 -0
  900. package/dist/types/components/checkbox/checkbox.d.ts +36 -0
  901. package/dist/types/components/checkbox/checkbox.stories.d.ts +58 -0
  902. package/dist/types/components/chip/chip.d.ts +34 -0
  903. package/dist/types/components/chip/chip.stories.d.ts +54 -0
  904. package/dist/types/components/container/container.d.ts +12 -0
  905. package/dist/types/components/container/container.stories.d.ts +21 -0
  906. package/dist/types/components/date-picker/date-picker.d.ts +67 -0
  907. package/dist/types/components/date-picker/date-picker.stories.d.ts +62 -0
  908. package/dist/types/components/dialog/dialog.d.ts +44 -0
  909. package/dist/types/components/dialog/dialog.stories.d.ts +39 -0
  910. package/dist/types/components/divider/divider.d.ts +13 -0
  911. package/dist/types/components/divider/divider.stories.d.ts +33 -0
  912. package/dist/types/components/drawer/drawer.d.ts +46 -0
  913. package/dist/types/components/drawer/drawer.stories.d.ts +43 -0
  914. package/dist/types/components/empty-state/empty-state.d.ts +24 -0
  915. package/dist/types/components/empty-state/empty-state.stories.d.ts +37 -0
  916. package/dist/types/components/file-upload/file-upload.d.ts +38 -0
  917. package/dist/types/components/file-upload/file-upload.stories.d.ts +43 -0
  918. package/dist/types/components/grid/grid.d.ts +16 -0
  919. package/dist/types/components/grid/grid.stories.d.ts +30 -0
  920. package/dist/types/components/icon/icon-registry.d.ts +27 -0
  921. package/dist/types/components/icon/icon.d.ts +30 -0
  922. package/dist/types/components/icon/icon.stories.d.ts +42 -0
  923. package/dist/types/components/input/input.d.ts +72 -0
  924. package/dist/types/components/input/input.stories.d.ts +77 -0
  925. package/dist/types/components/menu/menu-item.d.ts +31 -0
  926. package/dist/types/components/menu/menu-item.stories.d.ts +5 -0
  927. package/dist/types/components/menu/menu.d.ts +38 -0
  928. package/dist/types/components/menu/menu.stories.d.ts +36 -0
  929. package/dist/types/components/modal/modal.d.ts +52 -0
  930. package/dist/types/components/modal/modal.stories.d.ts +47 -0
  931. package/dist/types/components/nav/nav-item.d.ts +23 -0
  932. package/dist/types/components/nav/nav-item.stories.d.ts +5 -0
  933. package/dist/types/components/nav/nav.d.ts +13 -0
  934. package/dist/types/components/nav/nav.stories.d.ts +27 -0
  935. package/dist/types/components/pagination/pagination.d.ts +28 -0
  936. package/dist/types/components/pagination/pagination.stories.d.ts +42 -0
  937. package/dist/types/components/popover/popover.d.ts +44 -0
  938. package/dist/types/components/popover/popover.stories.d.ts +38 -0
  939. package/dist/types/components/progress/progress.d.ts +26 -0
  940. package/dist/types/components/progress/progress.stories.d.ts +59 -0
  941. package/dist/types/components/radio/radio.d.ts +32 -0
  942. package/dist/types/components/radio/radio.stories.d.ts +48 -0
  943. package/dist/types/components/row/row.d.ts +18 -0
  944. package/dist/types/components/row/row.stories.d.ts +52 -0
  945. package/dist/types/components/select/select.d.ts +74 -0
  946. package/dist/types/components/select/select.stories.d.ts +73 -0
  947. package/dist/types/components/skeleton/skeleton.d.ts +17 -0
  948. package/dist/types/components/skeleton/skeleton.stories.d.ts +44 -0
  949. package/dist/types/components/slider/slider.d.ts +43 -0
  950. package/dist/types/components/slider/slider.stories.d.ts +62 -0
  951. package/dist/types/components/spacer/spacer.d.ts +10 -0
  952. package/dist/types/components/spacer/spacer.stories.d.ts +28 -0
  953. package/dist/types/components/spinner/spinner.d.ts +14 -0
  954. package/dist/types/components/spinner/spinner.stories.d.ts +33 -0
  955. package/dist/types/components/stack/stack.d.ts +12 -0
  956. package/dist/types/components/stack/stack.stories.d.ts +28 -0
  957. package/dist/types/components/stepper/step.d.ts +31 -0
  958. package/dist/types/components/stepper/step.stories.d.ts +5 -0
  959. package/dist/types/components/stepper/stepper.d.ts +18 -0
  960. package/dist/types/components/stepper/stepper.stories.d.ts +36 -0
  961. package/dist/types/components/switch-group/switch-group.d.ts +33 -0
  962. package/dist/types/components/switch-group/switch-group.stories.d.ts +37 -0
  963. package/dist/types/components/switch-group/switch-option.d.ts +24 -0
  964. package/dist/types/components/switch-group/switch-option.stories.d.ts +5 -0
  965. package/dist/types/components/table/table.d.ts +23 -0
  966. package/dist/types/components/table/table.stories.d.ts +45 -0
  967. package/dist/types/components/tabs/tab-panel.d.ts +17 -0
  968. package/dist/types/components/tabs/tab-panel.stories.d.ts +5 -0
  969. package/dist/types/components/tabs/tabs.d.ts +30 -0
  970. package/dist/types/components/tabs/tabs.stories.d.ts +34 -0
  971. package/dist/types/components/textarea/textarea.d.ts +62 -0
  972. package/dist/types/components/textarea/textarea.stories.d.ts +88 -0
  973. package/dist/types/components/toast/toast.d.ts +42 -0
  974. package/dist/types/components/toast/toast.stories.d.ts +48 -0
  975. package/dist/types/components/toggle/toggle.d.ts +31 -0
  976. package/dist/types/components/toggle/toggle.stories.d.ts +46 -0
  977. package/dist/types/components/toolbar/toolbar.d.ts +18 -0
  978. package/dist/types/components/toolbar/toolbar.stories.d.ts +28 -0
  979. package/dist/types/components/tooltip/tooltip.d.ts +36 -0
  980. package/dist/types/components/tooltip/tooltip.stories.d.ts +43 -0
  981. package/dist/types/components/tree/tree-item.d.ts +42 -0
  982. package/dist/types/components/tree/tree-item.stories.d.ts +5 -0
  983. package/dist/types/components/tree/tree.d.ts +13 -0
  984. package/dist/types/components/tree/tree.stories.d.ts +21 -0
  985. package/dist/types/components.d.ts +4191 -0
  986. package/dist/types/index.d.ts +53 -0
  987. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  988. package/dist/types/theme/tokens.d.ts +29 -0
  989. package/dist/types/types/index.d.ts +36 -0
  990. package/dist/types/utils/aria.d.ts +23 -0
  991. package/dist/types/utils/dom.d.ts +19 -0
  992. package/dist/types/utils/events.d.ts +17 -0
  993. package/loader/cdn.js +1 -0
  994. package/loader/index.cjs.js +1 -0
  995. package/loader/index.d.ts +24 -0
  996. package/loader/index.es2017.js +1 -0
  997. package/loader/index.js +2 -0
  998. package/package.json +79 -0
@@ -0,0 +1,2 @@
1
+ import{r as t,c as s,a as i,h as e,H as a}from"./p-V8-ENixA.js";import{g as r}from"./p-lpqZSiIf.js";const n=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-input-bg:var(--ts-color-neutral-50);--ts-input-color:var(--ts-color-text-primary);--ts-input-border-color:var(--ts-color-border-default);--ts-input-radius:var(--ts-radius-md);--ts-input-focus-ring:var(--ts-focus-ring)}.input__label{display:block;margin-bottom:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-medium);color:var(--ts-color-text-secondary);line-height:var(--ts-line-height-normal)}.input__required{color:var(--ts-color-danger-500)}.input__wrapper{display:flex;align-items:center;gap:var(--ts-spacing-2);border:1px solid var(--ts-input-border-color);border-radius:var(--ts-input-radius);background-color:var(--ts-input-bg);box-shadow:none;transition:border-color var(--ts-transition-fast), box-shadow var(--ts-transition-fast), background-color var(--ts-transition-fast);overflow:hidden}.input__wrapper--focused{border-color:var(--ts-color-primary-500);box-shadow:var(--ts-input-focus-ring)}.input__wrapper--error{border-color:var(--ts-color-danger-500)}.input__wrapper--error.input__wrapper--focused{box-shadow:0 0 0 3px var(--ts-color-focus-ring-danger)}.input__wrapper--disabled{background-color:var(--ts-color-bg-disabled);opacity:0.6;cursor:not-allowed}.input__native{flex:1;border:none;outline:none;background:transparent;font-family:inherit;color:var(--ts-input-color);width:100%;min-width:0}.input__native::placeholder{color:var(--ts-color-text-tertiary)}.input__native:disabled{cursor:not-allowed}:host([size="sm"]) .input__wrapper{border-radius:var(--ts-radius-sm)}:host([size="sm"]) .input__native{padding:var(--ts-spacing-1) var(--ts-spacing-2);font-size:var(--ts-font-size-sm)}:host([size="md"]) .input__native{padding:var(--ts-spacing-2) var(--ts-spacing-3);font-size:var(--ts-font-size-md)}:host([size="lg"]) .input__native{padding:var(--ts-spacing-3) var(--ts-spacing-4);font-size:var(--ts-font-size-lg)}:host([size="xl"]) .input__wrapper{border-radius:var(--ts-radius-lg)}:host([size="xl"]) .input__native{padding:var(--ts-spacing-4) var(--ts-spacing-5);font-size:var(--ts-font-size-xl)}.input__prefix,.input__suffix{display:inline-flex;align-items:center;color:var(--ts-color-text-tertiary)}.input__prefix{padding-inline-start:var(--ts-spacing-3)}.input__suffix{padding-inline-end:var(--ts-spacing-3)}.input__prefix:empty,.input__suffix:empty{display:none}.input__help,.input__error{margin-top:var(--ts-spacing-1);font-size:var(--ts-font-size-xs);line-height:var(--ts-line-height-normal)}.input__help{color:var(--ts-color-text-tertiary)}.input__error{color:var(--ts-color-danger-600);font-weight:var(--ts-font-weight-medium)}`;const o=class{constructor(i){t(this,i);this.tsInput=s(this,"tsInput");this.tsChange=s(this,"tsChange");this.tsFocus=s(this,"tsFocus");this.tsBlur=s(this,"tsBlur");this.tsValidate=s(this,"tsValidate")}get hostEl(){return i(this)}inputEl;inputId=r("ts-input");value="";type="text";size="md";label;placeholder;helpText;error;required=false;disabled=false;readonly=false;maxlength;minlength;pattern;autocomplete;name;hasFocus=false;tsInput;tsChange;tsFocus;tsBlur;tsValidate;handleValueChange(t,s){if(t!==s&&this.inputEl){this.inputEl.value=t}}async setFocus(){this.inputEl?.focus()}async selectText(){this.inputEl?.select()}handleInput=t=>{const s=t.target;const i=this.value;this.value=s.value;this.tsInput.emit({value:this.value,previousValue:i})};handleChange=()=>{this.tsChange.emit({value:this.value,previousValue:this.value});if(this.inputEl){const t=this.inputEl.checkValidity();this.tsValidate.emit({valid:t,message:this.inputEl.validationMessage})}};handleFocus=()=>{this.hasFocus=true;this.tsFocus.emit()};handleBlur=()=>{this.hasFocus=false;this.tsBlur.emit()};render(){const t=!!this.error;const s=`${this.inputId}-label`;const i=`${this.inputId}-help`;const r=`${this.inputId}-error`;return e(a,{key:"dad72942d32c6df8756d8c42b238364799a9df83",class:{"ts-input":true,[`ts-input--${this.size}`]:true,"ts-input--focused":this.hasFocus,"ts-input--disabled":this.disabled,"ts-input--error":t}},this.label&&e("label",{key:"a012025c350bd6f593d19477793263b79a68a4f7",class:"input__label",part:"label",id:s,htmlFor:this.inputId},this.label,this.required&&e("span",{key:"71316213839857560e4ed37950985196d17242e4",class:"input__required","aria-hidden":"true"}," *")),e("div",{key:"098dd8b4dcaadf87798307b14c2c5def6fc4359e",class:{input__wrapper:true,"input__wrapper--focused":this.hasFocus,"input__wrapper--error":t,"input__wrapper--disabled":this.disabled},part:"base"},e("span",{key:"c2b7252cde16f5a08ca6e4beeb88fb9e4a48fc32",class:"input__prefix",part:"prefix"},e("slot",{key:"adf46d466d45c9937406846ed3762b0ed41a04db",name:"prefix"})),e("input",{key:"e0649a147ae0ef54e497443f0cd9e607b87a0ffb",ref:t=>this.inputEl=t,id:this.inputId,class:"input__native",part:"input",type:this.type,value:this.value,placeholder:this.placeholder,disabled:this.disabled,readOnly:this.readonly,required:this.required,maxlength:this.maxlength,minlength:this.minlength,pattern:this.pattern,autoComplete:this.autocomplete,name:this.name,"aria-labelledby":this.label?s:undefined,"aria-describedby":t?r:this.helpText?i:undefined,"aria-invalid":t?"true":undefined,"aria-required":this.required?"true":undefined,onInput:this.handleInput,onChange:this.handleChange,onFocus:this.handleFocus,onBlur:this.handleBlur}),e("span",{key:"bec3bfcd47130f240d609f461f74140a970fa7cb",class:"input__suffix",part:"suffix"},e("slot",{key:"1ddd5c810ab5542a019a842a4bb3c725877ac1b0",name:"suffix"}))),t&&e("div",{key:"0e9e25e65ced8ee9ddf5091aa8e32408a6489f17",class:"input__error",part:"error-text",id:r,role:"alert"},this.error),!t&&this.helpText&&e("div",{key:"b28ff0b6e908edd201e17b4da927685f2fa77943",class:"input__help",part:"help-text",id:i},this.helpText))}static get watchers(){return{value:[{handleValueChange:0}]}}};o.style=n();export{o as ts_input};
2
+ //# sourceMappingURL=p-0424cd55.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["inputCss","TsInput","inputEl","inputId","generateId","value","type","size","label","placeholder","helpText","error","required","disabled","readonly","maxlength","minlength","pattern","autocomplete","name","hasFocus","tsInput","tsChange","tsFocus","tsBlur","tsValidate","handleValueChange","newValue","oldValue","this","setFocus","focus","selectText","select","handleInput","event","target","previousValue","emit","handleChange","valid","checkValidity","message","validationMessage","handleFocus","handleBlur","render","hasError","labelId","helpId","errorId","h","Host","key","class","part","id","htmlFor","input__wrapper","ref","el","readOnly","autoComplete","undefined","onInput","onChange","onFocus","onBlur","role"],"sources":["src/components/input/input.css?tag=ts-input&encapsulation=shadow","src/components/input/input.tsx"],"sourcesContent":["/* ==========================================================================\n ts-input — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-input-bg Input background\n --ts-input-color Input text color\n --ts-input-border-color Default border color\n --ts-input-radius Border radius\n --ts-input-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-input-bg: var(--ts-color-neutral-50);\n --ts-input-color: var(--ts-color-text-primary);\n --ts-input-border-color: var(--ts-color-border-default);\n --ts-input-radius: var(--ts-radius-md);\n --ts-input-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.input__label {\n display: block;\n margin-bottom: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n.input__required {\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Wrapper ---- */\n.input__wrapper {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n border: 1px solid var(--ts-input-border-color);\n border-radius: var(--ts-input-radius);\n background-color: var(--ts-input-bg);\n box-shadow: none;\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast),\n background-color var(--ts-transition-fast);\n overflow: hidden;\n}\n\n.input__wrapper--focused {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-input-focus-ring);\n}\n\n.input__wrapper--error {\n border-color: var(--ts-color-danger-500);\n}\n\n.input__wrapper--error.input__wrapper--focused {\n box-shadow: 0 0 0 3px var(--ts-color-focus-ring-danger);\n}\n\n.input__wrapper--disabled {\n background-color: var(--ts-color-bg-disabled);\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* ---- Native Input ---- */\n.input__native {\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n font-family: inherit;\n color: var(--ts-input-color);\n width: 100%;\n min-width: 0;\n}\n\n.input__native::placeholder {\n color: var(--ts-color-text-tertiary);\n}\n\n.input__native:disabled {\n cursor: not-allowed;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .input__wrapper {\n border-radius: var(--ts-radius-sm);\n}\n:host([size=\"sm\"]) .input__native {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .input__native {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .input__native {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n:host([size=\"xl\"]) .input__wrapper {\n border-radius: var(--ts-radius-lg);\n}\n:host([size=\"xl\"]) .input__native {\n padding: var(--ts-spacing-4) var(--ts-spacing-5);\n font-size: var(--ts-font-size-xl);\n}\n\n/* ---- Prefix / Suffix ---- */\n.input__prefix,\n.input__suffix {\n display: inline-flex;\n align-items: center;\n color: var(--ts-color-text-tertiary);\n}\n\n.input__prefix {\n padding-inline-start: var(--ts-spacing-3);\n}\n\n.input__suffix {\n padding-inline-end: var(--ts-spacing-3);\n}\n\n.input__prefix:empty,\n.input__suffix:empty {\n display: none;\n}\n\n/* ---- Help & Error Text ---- */\n.input__help,\n.input__error {\n margin-top: var(--ts-spacing-1);\n font-size: var(--ts-font-size-xs);\n line-height: var(--ts-line-height-normal);\n}\n\n.input__help {\n color: var(--ts-color-text-tertiary);\n}\n\n.input__error {\n color: var(--ts-color-danger-600);\n font-weight: var(--ts-font-weight-medium);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n Watch,\n h,\n Host,\n Element,\n Method,\n} from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize, TsChangeEventDetail, TsValidationEventDetail } from '../../types';\nimport { generateId } from '../../utils/aria';\n\n/**\n * @slot prefix - Content before the input (e.g., icon or currency symbol).\n * @slot suffix - Content after the input (e.g., icon or clear button).\n * @slot help-text - Help text displayed below the input.\n *\n * @part base - The outer wrapper.\n * @part label - The label element.\n * @part input - The native input element.\n * @part prefix - The prefix slot wrapper.\n * @part suffix - The suffix slot wrapper.\n * @part help-text - The help text wrapper.\n * @part error-text - The error message wrapper.\n */\n@Component({\n tag: 'ts-input',\n styleUrl: 'input.css',\n shadow: true,\n})\nexport class TsInput {\n @Element() hostEl!: HTMLElement;\n\n private inputEl?: HTMLInputElement;\n private inputId = generateId('ts-input');\n\n /** The input's value. */\n @Prop({ mutable: true, reflect: true }) value = '';\n\n /** The input type. */\n @Prop({ reflect: true }) type:\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'url'\n | 'search' = 'text';\n\n /** The input's size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Label text displayed above the input. */\n @Prop() label?: string;\n\n /** Placeholder text. */\n @Prop() placeholder?: string;\n\n /** Help text displayed below the input. */\n @Prop() helpText?: string;\n\n /** Renders the input in an error state with an error message. */\n @Prop() error?: string;\n\n /** Makes the input required. */\n @Prop({ reflect: true }) required = false;\n\n /** Renders the input as disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Renders the input as readonly. */\n @Prop({ reflect: true }) readonly = false;\n\n /** Maximum character length. */\n @Prop() maxlength?: number;\n\n /** Minimum character length. */\n @Prop() minlength?: number;\n\n /** Pattern for validation (regex string). */\n @Prop() pattern?: string;\n\n /** Autocomplete attribute. */\n @Prop() autocomplete?: string;\n\n /** Name attribute for form submission. */\n @Prop() name?: string;\n\n /** Whether the input is currently focused. */\n @State() hasFocus = false;\n\n /** Emitted when the value changes (on input). */\n @Event({ eventName: 'tsInput' }) tsInput!: EventEmitter<TsChangeEventDetail<string>>;\n\n /** Emitted when the value changes (on blur / commit). */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<TsChangeEventDetail<string>>;\n\n /** Emitted when the input gains focus. */\n @Event({ eventName: 'tsFocus' }) tsFocus!: EventEmitter<void>;\n\n /** Emitted when the input loses focus. */\n @Event({ eventName: 'tsBlur' }) tsBlur!: EventEmitter<void>;\n\n /** Emitted on validation. */\n @Event({ eventName: 'tsValidate' }) tsValidate!: EventEmitter<TsValidationEventDetail>;\n\n @Watch('value')\n handleValueChange(newValue: string, oldValue: string): void {\n if (newValue !== oldValue && this.inputEl) {\n this.inputEl.value = newValue;\n }\n }\n\n /** Programmatically focus the input. */\n @Method()\n async setFocus(): Promise<void> {\n this.inputEl?.focus();\n }\n\n /** Programmatically select the input text. */\n @Method()\n async selectText(): Promise<void> {\n this.inputEl?.select();\n }\n\n private handleInput = (event: Event): void => {\n const target = event.target as HTMLInputElement;\n const previousValue = this.value;\n this.value = target.value;\n this.tsInput.emit({ value: this.value, previousValue });\n };\n\n private handleChange = (): void => {\n this.tsChange.emit({ value: this.value, previousValue: this.value });\n\n // Run native validation\n if (this.inputEl) {\n const valid = this.inputEl.checkValidity();\n this.tsValidate.emit({\n valid,\n message: this.inputEl.validationMessage,\n });\n }\n };\n\n private handleFocus = (): void => {\n this.hasFocus = true;\n this.tsFocus.emit();\n };\n\n private handleBlur = (): void => {\n this.hasFocus = false;\n this.tsBlur.emit();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasError = !!this.error;\n const labelId = `${this.inputId}-label`;\n const helpId = `${this.inputId}-help`;\n const errorId = `${this.inputId}-error`;\n\n return (\n <Host\n class={{\n 'ts-input': true,\n [`ts-input--${this.size}`]: true,\n 'ts-input--focused': this.hasFocus,\n 'ts-input--disabled': this.disabled,\n 'ts-input--error': hasError,\n }}\n >\n {this.label && (\n <label class=\"input__label\" part=\"label\" id={labelId} htmlFor={this.inputId}>\n {this.label}\n {this.required && <span class=\"input__required\" aria-hidden=\"true\"> *</span>}\n </label>\n )}\n\n <div\n class={{\n 'input__wrapper': true,\n 'input__wrapper--focused': this.hasFocus,\n 'input__wrapper--error': hasError,\n 'input__wrapper--disabled': this.disabled,\n }}\n part=\"base\"\n >\n <span class=\"input__prefix\" part=\"prefix\">\n <slot name=\"prefix\" />\n </span>\n\n <input\n ref={(el) => (this.inputEl = el)}\n id={this.inputId}\n class=\"input__native\"\n part=\"input\"\n type={this.type}\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n maxlength={this.maxlength}\n minlength={this.minlength}\n pattern={this.pattern}\n autoComplete={this.autocomplete}\n name={this.name}\n aria-labelledby={this.label ? labelId : undefined}\n aria-describedby={hasError ? errorId : this.helpText ? helpId : undefined}\n aria-invalid={hasError ? 'true' : undefined}\n aria-required={this.required ? 'true' : undefined}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n\n <span class=\"input__suffix\" part=\"suffix\">\n <slot name=\"suffix\" />\n </span>\n </div>\n\n {hasError && (\n <div class=\"input__error\" part=\"error-text\" id={errorId} role=\"alert\">\n {this.error}\n </div>\n )}\n\n {!hasError && this.helpText && (\n <div class=\"input__help\" part=\"help-text\" id={helpId}>\n {this.helpText}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,a as e,h as a,H as s}from"./p-V8-ENixA.js";const r=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-stepper-active-color:var(--ts-color-interactive-primary);--ts-stepper-completed-color:var(--ts-color-success-600);--ts-stepper-connector-color:var(--ts-color-border-default)}.stepper__container{display:flex}:host([orientation="horizontal"]) .stepper__container{flex-direction:row;align-items:flex-start}:host([orientation="vertical"]) .stepper__container{flex-direction:column}`;const i=class{constructor(e){t(this,e)}get hostEl(){return e(this)}activeStep=0;orientation="horizontal";linear=false;handleActiveStepChange(){this.updateStepStates()}componentDidLoad(){this.updateStepStates()}updateStepStates(){const t=Array.from(this.hostEl.querySelectorAll("ts-step"));t.forEach(((e,a)=>{e.setAttribute("data-index",String(a));e.setAttribute("data-orientation",this.orientation);if(a===this.activeStep){e.setAttribute("data-active","")}else{e.removeAttribute("data-active")}if(this.linear&&a>this.activeStep){e.setAttribute("disabled","")}else if(this.linear){e.removeAttribute("disabled")}if(a<t.length-1){e.setAttribute("data-has-connector","")}else{e.removeAttribute("data-has-connector")}}))}render(){return a(s,{key:"202c3f1869c3010f5c6f8b5ee52850bcbbce5891",class:{"ts-stepper":true,[`ts-stepper--${this.orientation}`]:true}},a("div",{key:"32b8444cf38f04152a1e288241d703aa5e483379",class:"stepper__container",part:"container",role:"list"},a("slot",{key:"399b699aa4133bb1bb6d93fdc56b45d9bffb234d"})))}static get watchers(){return{activeStep:[{handleActiveStepChange:0}]}}};i.style=r();export{i as ts_stepper};
2
+ //# sourceMappingURL=p-04522bf9.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["stepperCss","TsStepper","activeStep","orientation","linear","handleActiveStepChange","this","updateStepStates","componentDidLoad","steps","Array","from","hostEl","querySelectorAll","forEach","step","index","setAttribute","String","removeAttribute","length","render","h","Host","key","class","part","role"],"sources":["src/components/stepper/stepper.css?tag=ts-stepper&encapsulation=shadow","src/components/stepper/stepper.tsx"],"sourcesContent":["/* ==========================================================================\n ts-stepper — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-stepper-active-color Active step indicator color\n --ts-stepper-completed-color Completed step indicator color\n --ts-stepper-connector-color Connector line color\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-stepper-active-color: var(--ts-color-interactive-primary);\n --ts-stepper-completed-color: var(--ts-color-success-600);\n --ts-stepper-connector-color: var(--ts-color-border-default);\n}\n\n.stepper__container {\n display: flex;\n}\n\n/* ---- Horizontal ---- */\n:host([orientation=\"horizontal\"]) .stepper__container {\n flex-direction: row;\n align-items: flex-start;\n}\n\n/* ---- Vertical ---- */\n:host([orientation=\"vertical\"]) .stepper__container {\n flex-direction: column;\n}\n","import { Component, Prop, h, Host, Element, Watch } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-step children.\n *\n * @part container - The stepper container.\n */\n@Component({\n tag: 'ts-stepper',\n styleUrl: 'stepper.css',\n shadow: true,\n})\nexport class TsStepper {\n @Element() hostEl!: HTMLElement;\n\n /** The index of the currently active step (0-based). */\n @Prop({ reflect: true }) activeStep = 0;\n\n /** The layout orientation. */\n @Prop({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** If true, steps must be completed in order. */\n @Prop() linear = false;\n\n @Watch('activeStep')\n handleActiveStepChange(): void {\n this.updateStepStates();\n }\n\n componentDidLoad(): void {\n this.updateStepStates();\n }\n\n private updateStepStates(): void {\n const steps = Array.from(this.hostEl.querySelectorAll('ts-step'));\n steps.forEach((step, index) => {\n step.setAttribute('data-index', String(index));\n step.setAttribute('data-orientation', this.orientation);\n if (index === this.activeStep) {\n step.setAttribute('data-active', '');\n } else {\n step.removeAttribute('data-active');\n }\n if (this.linear && index > this.activeStep) {\n step.setAttribute('disabled', '');\n } else if (this.linear) {\n step.removeAttribute('disabled');\n }\n if (index < steps.length - 1) {\n step.setAttribute('data-has-connector', '');\n } else {\n step.removeAttribute('data-has-connector');\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-stepper': true,\n [`ts-stepper--${this.orientation}`]: true,\n }}\n >\n <div class=\"stepper__container\" part=\"container\" role=\"list\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"yDAAA,MAAMA,EAAa,IAAM,4b,MCYZC,EAAS,M,qDAIKC,WAAa,EAGbC,YAAyC,aAG1DC,OAAS,MAGjB,sBAAAC,GACEC,KAAKC,kB,CAGP,gBAAAC,GACEF,KAAKC,kB,CAGC,gBAAAA,GACN,MAAME,EAAQC,MAAMC,KAAKL,KAAKM,OAAOC,iBAAiB,YACtDJ,EAAMK,SAAQ,CAACC,EAAMC,KACnBD,EAAKE,aAAa,aAAcC,OAAOF,IACvCD,EAAKE,aAAa,mBAAoBX,KAAKH,aAC3C,GAAIa,IAAUV,KAAKJ,WAAY,CAC7Ba,EAAKE,aAAa,cAAe,G,KAC5B,CACLF,EAAKI,gBAAgB,c,CAEvB,GAAIb,KAAKF,QAAUY,EAAQV,KAAKJ,WAAY,CAC1Ca,EAAKE,aAAa,WAAY,G,MACzB,GAAIX,KAAKF,OAAQ,CACtBW,EAAKI,gBAAgB,W,CAEvB,GAAIH,EAAQP,EAAMW,OAAS,EAAG,CAC5BL,EAAKE,aAAa,qBAAsB,G,KACnC,CACLF,EAAKI,gBAAgB,qB,KAM3B,MAAAE,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,aAAc,KACd,CAAC,eAAenB,KAAKH,eAAgB,OAGvCmB,EAAA,OAAAE,IAAA,2CAAKC,MAAM,qBAAqBC,KAAK,YAAYC,KAAK,QACpDL,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r,h as e,H as t}from"./p-V8-ENixA.js";const a=()=>`:host{display:contents}.breadcrumb-item__li{display:inline-flex;align-items:center;gap:var(--ts-spacing-1)}.breadcrumb-item__link{color:var(--ts-breadcrumb-link-color, var(--ts-color-interactive-primary));text-decoration:none;transition:color var(--ts-transition-fast)}.breadcrumb-item__link:hover{text-decoration:underline;text-underline-offset:2px}.breadcrumb-item__link:focus-visible{box-shadow:var(--ts-focus-ring);border-radius:var(--ts-radius-sm);outline:none}.breadcrumb-item__text{color:var(--ts-color-text-primary)}:host(.ts-breadcrumb-item--current) .breadcrumb-item__text{font-weight:var(--ts-font-weight-semi)}.breadcrumb-item__separator{color:var(--ts-breadcrumb-separator-color, var(--ts-color-text-tertiary));margin-inline:var(--ts-spacing-1);user-select:none}`;const s=class{constructor(e){r(this,e)}href;current=false;separator;render(){const r=!!this.href&&!this.current;return e(t,{key:"dd4faad961e0208052a4bac87ea55a7ee7c21cb1",class:{"ts-breadcrumb-item":true,"ts-breadcrumb-item--current":this.current}},e("li",{key:"044de74c3a547b7384bb37b9c0a9899e19ad121a",class:"breadcrumb-item__li"},r?e("a",{href:this.href,part:"link",class:"breadcrumb-item__link"},e("slot",null)):e("span",{part:"link",class:"breadcrumb-item__text","aria-current":this.current?"page":undefined},e("slot",null)),this.separator&&e("span",{key:"429becb1278bd5db6b050535e70811f922a6ffbc",class:"breadcrumb-item__separator",part:"separator","aria-hidden":"true"},this.separator)))}};s.style=a();export{s as ts_breadcrumb_item};
2
+ //# sourceMappingURL=p-04aa8b90.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["breadcrumbItemCss","TsBreadcrumbItem","href","current","separator","render","isLink","this","h","Host","key","class","part","undefined"],"sources":["src/components/breadcrumb/breadcrumb-item.css?tag=ts-breadcrumb-item&encapsulation=shadow","src/components/breadcrumb/breadcrumb-item.tsx"],"sourcesContent":["/* ==========================================================================\n ts-breadcrumb-item — Shadow DOM Scoped Styles\n ========================================================================== */\n\n:host {\n display: contents;\n}\n\n.breadcrumb-item__li {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n}\n\n.breadcrumb-item__link {\n color: var(--ts-breadcrumb-link-color, var(--ts-color-interactive-primary));\n text-decoration: none;\n transition: color var(--ts-transition-fast);\n}\n\n.breadcrumb-item__link:hover {\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.breadcrumb-item__link:focus-visible {\n box-shadow: var(--ts-focus-ring);\n border-radius: var(--ts-radius-sm);\n outline: none;\n}\n\n.breadcrumb-item__text {\n color: var(--ts-color-text-primary);\n}\n\n:host(.ts-breadcrumb-item--current) .breadcrumb-item__text {\n font-weight: var(--ts-font-weight-semi);\n}\n\n.breadcrumb-item__separator {\n color: var(--ts-breadcrumb-separator-color, var(--ts-color-text-tertiary));\n margin-inline: var(--ts-spacing-1);\n user-select: none;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for label text.\n *\n * @part link - The anchor or span element.\n * @part separator - The separator element.\n */\n@Component({\n tag: 'ts-breadcrumb-item',\n styleUrl: 'breadcrumb-item.css',\n shadow: true,\n})\nexport class TsBreadcrumbItem {\n /** If set, renders as a link. */\n @Prop() href?: string;\n\n /** Marks this item as the current page. */\n @Prop({ reflect: true }) current = false;\n\n /** Separator character (set by parent ts-breadcrumb). */\n @Prop() separator?: string;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const isLink = !!this.href && !this.current;\n\n return (\n <Host class={{ 'ts-breadcrumb-item': true, 'ts-breadcrumb-item--current': this.current }}>\n <li class=\"breadcrumb-item__li\">\n {isLink ? (\n <a href={this.href} part=\"link\" class=\"breadcrumb-item__link\">\n <slot />\n </a>\n ) : (\n <span\n part=\"link\"\n class=\"breadcrumb-item__text\"\n aria-current={this.current ? 'page' : undefined}\n >\n <slot />\n </span>\n )}\n {this.separator && (\n <span class=\"breadcrumb-item__separator\" part=\"separator\" aria-hidden=\"true\">\n {this.separator}\n </span>\n )}\n </li>\n </Host>\n );\n }\n}\n"],"mappings":"6CAAA,MAAMA,EAAoB,IAAM,0wB,MCanBC,EAAgB,M,yBAEnBC,KAGiBC,QAAU,MAG3BC,UAGR,MAAAC,GACE,MAAMC,IAAWC,KAAKL,OAASK,KAAKJ,QAEpC,OACEK,EAACC,EAAI,CAAAC,IAAA,2CAACC,MAAO,CAAE,qBAAsB,KAAM,8BAA+BJ,KAAKJ,UAC7EK,EAAA,MAAAE,IAAA,2CAAIC,MAAM,uBACPL,EACCE,EAAA,KAAGN,KAAMK,KAAKL,KAAMU,KAAK,OAAOD,MAAM,yBACpCH,EAAA,cAGFA,EAAA,QACEI,KAAK,OACLD,MAAM,wBAAuB,eACfJ,KAAKJ,QAAU,OAASU,WAEtCL,EAAA,cAGHD,KAAKH,WACJI,EAAA,QAAAE,IAAA,2CAAMC,MAAM,6BAA6BC,KAAK,YAAW,cAAa,QACnEL,KAAKH,Y","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as a,h as t,H as s}from"./p-V8-ENixA.js";const i=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-nav-bg:transparent;--ts-nav-active-bg:var(--ts-color-interactive-primary-subtle);--ts-nav-active-color:var(--ts-color-interactive-primary);--ts-nav-width:240px}.nav__native{background-color:var(--ts-nav-bg)}.nav__list{list-style:none;margin:0;padding:0;display:flex}:host([variant="sidebar"]) .nav__list{flex-direction:column;gap:var(--ts-spacing-1);inline-size:var(--ts-nav-width)}:host([variant="sidebar"][collapsed]) .nav__list{inline-size:auto}:host([variant="horizontal"]) .nav__list{flex-direction:row;gap:var(--ts-spacing-1);align-items:center}`;const n=class{constructor(t){a(this,t)}variant="sidebar";collapsed=false;render(){return t(s,{key:"dcfbdce63e36faf81a1e4967837da40c9059530a",class:{"ts-nav":true,[`ts-nav--${this.variant}`]:true,"ts-nav--collapsed":this.collapsed}},t("nav",{key:"f8c05146a0c6435b7382e12ce8c0b2c5a27a962a",class:"nav__native",part:"nav","aria-label":"Navigation"},t("ul",{key:"dbd02ae09363b4c03832e5a8d5f60cc465626c55",class:"nav__list",part:"list",role:"list"},t("slot",{key:"2b1aa23209f60b7bc382a630d910e4bada9c6adc"}))))}};n.style=i();export{n as ts_nav};
2
+ //# sourceMappingURL=p-080eaf89.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["navCss","TsNav","variant","collapsed","render","h","Host","key","class","this","part","role"],"sources":["src/components/nav/nav.css?tag=ts-nav&encapsulation=shadow","src/components/nav/nav.tsx"],"sourcesContent":["/* ==========================================================================\n ts-nav — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-nav-bg Navigation background\n --ts-nav-active-bg Active item background\n --ts-nav-active-color Active item text color\n --ts-nav-width Sidebar width\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-nav-bg: transparent;\n --ts-nav-active-bg: var(--ts-color-interactive-primary-subtle);\n --ts-nav-active-color: var(--ts-color-interactive-primary);\n --ts-nav-width: 240px;\n}\n\n.nav__native {\n background-color: var(--ts-nav-bg);\n}\n\n.nav__list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n\n/* ---- Sidebar variant ---- */\n:host([variant=\"sidebar\"]) .nav__list {\n flex-direction: column;\n gap: var(--ts-spacing-1);\n inline-size: var(--ts-nav-width);\n}\n\n:host([variant=\"sidebar\"][collapsed]) .nav__list {\n inline-size: auto;\n}\n\n/* ---- Horizontal variant ---- */\n:host([variant=\"horizontal\"]) .nav__list {\n flex-direction: row;\n gap: var(--ts-spacing-1);\n align-items: center;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-nav-item children.\n *\n * @part nav - The native nav element.\n * @part list - The list container.\n */\n@Component({\n tag: 'ts-nav',\n styleUrl: 'nav.css',\n shadow: true,\n})\nexport class TsNav {\n /** The navigation layout variant. */\n @Prop({ reflect: true }) variant: 'sidebar' | 'horizontal' = 'sidebar';\n\n /** Whether the sidebar nav is collapsed (icons only). */\n @Prop({ reflect: true }) collapsed = false;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-nav': true,\n [`ts-nav--${this.variant}`]: true,\n 'ts-nav--collapsed': this.collapsed,\n }}\n >\n <nav class=\"nav__native\" part=\"nav\" aria-label=\"Navigation\">\n <ul class=\"nav__list\" part=\"list\" role=\"list\">\n <slot />\n </ul>\n </nav>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAS,IAAM,0mB,MCaRC,EAAK,M,yBAESC,QAAoC,UAGpCC,UAAY,MAGrC,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,SAAU,KACV,CAAC,WAAWC,KAAKP,WAAY,KAC7B,oBAAqBO,KAAKN,YAG5BE,EAAA,OAAAE,IAAA,2CAAKC,MAAM,cAAcE,KAAK,MAAK,aAAY,cAC7CL,EAAA,MAAAE,IAAA,2CAAIC,MAAM,YAAYE,KAAK,OAAOC,KAAK,QACrCN,EAAA,QAAAE,IAAA,+C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as s,h as r,H as e}from"./p-V8-ENixA.js";const t=()=>`:host{display:inline-flex;align-items:center;justify-content:center;--ts-spinner-size:1.5rem;--ts-spinner-color:var(--ts-color-interactive-primary);--ts-spinner-track-color:var(--ts-color-neutral-200)}:host([size="xs"]){--ts-spinner-size:0.875rem}:host([size="sm"]){--ts-spinner-size:1.125rem}:host([size="md"]){--ts-spinner-size:1.5rem}:host([size="lg"]){--ts-spinner-size:2rem}:host([size="xl"]){--ts-spinner-size:3rem}.spinner__svg{width:var(--ts-spinner-size);height:var(--ts-spinner-size);animation:ts-spinner-rotate 0.75s linear infinite}.spinner__track{stroke:var(--ts-spinner-track-color)}.spinner__indicator{stroke:var(--ts-spinner-color)}@keyframes ts-spinner-rotate{to{transform:rotate(360deg)}}`;const n=class{constructor(r){s(this,r)}size="md";color="currentColor";label="Loading";render(){return r(e,{key:"6d0183cc6a829afd067c51502cbc119cf8e89c23",class:{"ts-spinner":true,[`ts-spinner--${this.size}`]:true},role:"status","aria-label":this.label},r("svg",{key:"0bb8dc344532457d26f820a6761aba232ad7ed3f",class:"spinner__svg",part:"svg",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg"},r("circle",{key:"3431186c9235e4538634217cc4652e5c5d4e2959",class:"spinner__track",part:"track",cx:"16",cy:"16",r:"13","stroke-width":"3"}),r("circle",{key:"b2c69fc866b5d17de8664a8be40750c5a541a374",class:"spinner__indicator",part:"indicator",cx:"16",cy:"16",r:"13","stroke-width":"3","stroke-linecap":"round","stroke-dasharray":"20 61.68",style:{stroke:this.color!=="currentColor"?this.color:undefined}})))}};n.style=t();export{n as ts_spinner};
2
+ //# sourceMappingURL=p-0ec061e5.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["spinnerCss","TsSpinner","size","color","label","render","h","Host","key","class","this","role","part","viewBox","fill","xmlns","cx","cy","r","style","stroke","undefined"],"sources":["src/components/spinner/spinner.css?tag=ts-spinner&encapsulation=shadow","src/components/spinner/spinner.tsx"],"sourcesContent":["/* ==========================================================================\n ts-spinner — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-spinner-size Spinner dimensions\n --ts-spinner-color Spinning indicator color\n --ts-spinner-track-color Background track color\n ========================================================================== */\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n --ts-spinner-size: 1.5rem;\n --ts-spinner-color: var(--ts-color-interactive-primary);\n --ts-spinner-track-color: var(--ts-color-neutral-200);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"xs\"]) { --ts-spinner-size: 0.875rem; }\n:host([size=\"sm\"]) { --ts-spinner-size: 1.125rem; }\n:host([size=\"md\"]) { --ts-spinner-size: 1.5rem; }\n:host([size=\"lg\"]) { --ts-spinner-size: 2rem; }\n:host([size=\"xl\"]) { --ts-spinner-size: 3rem; }\n\n/* ---- SVG ---- */\n.spinner__svg {\n width: var(--ts-spinner-size);\n height: var(--ts-spinner-size);\n animation: ts-spinner-rotate 0.75s linear infinite;\n}\n\n/* ---- Track ---- */\n.spinner__track {\n stroke: var(--ts-spinner-track-color);\n}\n\n/* ---- Indicator ---- */\n.spinner__indicator {\n stroke: var(--ts-spinner-color);\n}\n\n/* ---- Animation ---- */\n@keyframes ts-spinner-rotate {\n to {\n transform: rotate(360deg);\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @part svg - The SVG element.\n * @part track - The background track circle.\n * @part indicator - The spinning indicator arc.\n */\n@Component({\n tag: 'ts-spinner',\n styleUrl: 'spinner.css',\n shadow: true,\n})\nexport class TsSpinner {\n /** The size of the spinner. */\n @Prop({ reflect: true }) size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\n\n /** The color of the spinning indicator. */\n @Prop() color: string = 'currentColor';\n\n /** Accessible label for screen readers. */\n @Prop() label: string = 'Loading';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-spinner': true,\n [`ts-spinner--${this.size}`]: true,\n }}\n role=\"status\"\n aria-label={this.label}\n >\n <svg class=\"spinner__svg\" part=\"svg\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n class=\"spinner__track\"\n part=\"track\"\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n stroke-width=\"3\"\n />\n <circle\n class=\"spinner__indicator\"\n part=\"indicator\"\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"20 61.68\"\n style={{ stroke: this.color !== 'currentColor' ? this.color : undefined }}\n />\n </svg>\n </Host>\n );\n }\n}\n"],"mappings":"kDAAA,MAAMA,EAAa,IAAM,qsB,MCYZC,EAAS,M,yBAEKC,KAAyC,KAG1DC,MAAgB,eAGhBC,MAAgB,UAGxB,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,aAAc,KACd,CAAC,eAAeC,KAAKR,QAAS,MAEhCS,KAAK,SAAQ,aACDD,KAAKN,OAEjBE,EAAA,OAAAE,IAAA,2CAAKC,MAAM,eAAeG,KAAK,MAAMC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BACzET,EAAA,UAAAE,IAAA,2CACEC,MAAM,iBACNG,KAAK,QACLI,GAAG,KACHC,GAAG,KACHC,EAAE,KAAI,eACO,MAEfZ,EAAA,UAAAE,IAAA,2CACEC,MAAM,qBACNG,KAAK,YACLI,GAAG,KACHC,GAAG,KACHC,EAAE,KAAI,eACO,IAAG,iBACD,QAAO,mBACL,WACjBC,MAAO,CAAEC,OAAQV,KAAKP,QAAU,eAAiBO,KAAKP,MAAQkB,c","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as a,a as o,h as r,H as n}from"./p-V8-ENixA.js";const e=()=>`:host{display:inline-block;vertical-align:middle;--ts-button-radius:var(--ts-shape-interactive);--ts-button-font-weight:var(--ts-font-weight-medium);--ts-button-focus-ring:var(--ts-focus-ring)}:host([block]){display:block;width:100%}.button__native{display:inline-flex;align-items:center;justify-content:center;gap:var(--ts-spacing-2);width:100%;border:1px solid transparent;border-radius:var(--ts-button-radius);font-family:var(--ts-font-family-base);font-weight:var(--ts-button-font-weight);line-height:var(--ts-line-height-tight);text-decoration:none;cursor:pointer;transition:background-color var(--ts-transition-fast), border-color var(--ts-transition-fast), color var(--ts-transition-fast), box-shadow var(--ts-transition-fast), opacity var(--ts-transition-fast), transform var(--ts-transition-fast);position:relative;white-space:nowrap;user-select:none;-webkit-appearance:none;appearance:none;outline:none}.button__native:focus-visible{box-shadow:var(--ts-button-focus-ring)}.button__native:active:not([disabled]):not([aria-disabled="true"]){transform:scale(0.96)}:host([size="xs"]) .button__native{padding:calc(var(--ts-spacing-1) + 1px) var(--ts-spacing-2);font-size:var(--ts-font-size-xs)}:host([size="sm"]) .button__native{padding:calc(var(--ts-spacing-1) + 1px) var(--ts-spacing-3);font-size:var(--ts-font-size-sm)}:host([size="md"]) .button__native{padding:calc(var(--ts-spacing-2) + 1px) var(--ts-spacing-4);font-size:var(--ts-font-size-md)}:host([size="lg"]) .button__native{padding:calc(var(--ts-spacing-3) + 2px) var(--ts-spacing-6);font-size:var(--ts-font-size-lg)}:host([size="xl"]) .button__native{padding:calc(var(--ts-spacing-4) + 2px) var(--ts-spacing-8);font-size:var(--ts-font-size-xl)}:host([appearance="solid"]) .button__native{border-color:transparent}:host([appearance="solid"][variant="primary"]) .button__native{background-color:var(--ts-color-interactive-primary);color:var(--ts-color-text-on-primary)}:host([appearance="solid"][variant="primary"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-interactive-primary-hover)}:host([appearance="solid"][variant="success"]) .button__native{background-color:var(--ts-color-success-600);color:var(--ts-color-text-on-success)}:host([appearance="solid"][variant="success"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-success-500)}:host([appearance="solid"][variant="danger"]) .button__native{background-color:var(--ts-color-interactive-danger);color:var(--ts-color-text-on-danger)}:host([appearance="solid"][variant="danger"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-interactive-danger-hover)}:host([appearance="solid"][variant="warning"]) .button__native{background-color:var(--ts-color-warning-600);color:var(--ts-color-text-on-warning)}:host([appearance="solid"][variant="warning"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-warning-500)}:host([appearance="solid"][variant="neutral"]) .button__native{background-color:var(--ts-color-neutral-800);color:var(--ts-color-text-on-primary)}:host([appearance="solid"][variant="neutral"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-neutral-700)}:host([appearance="solid"][variant="secondary"]) .button__native{background-color:var(--ts-color-neutral-200);color:var(--ts-color-text-primary)}:host([appearance="solid"][variant="secondary"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-neutral-300)}:host([appearance="outline"]) .button__native{background-color:transparent}:host([appearance="outline"][variant="primary"]) .button__native{border-color:var(--ts-color-primary-500);color:var(--ts-color-interactive-primary)}:host([appearance="outline"][variant="primary"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-interactive-primary-subtle)}:host([appearance="outline"][variant="danger"]) .button__native{border-color:var(--ts-color-danger-500);color:var(--ts-color-interactive-danger)}:host([appearance="outline"][variant="danger"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-interactive-danger-subtle)}:host([appearance="outline"][variant="neutral"]) .button__native{border-color:var(--ts-color-border-default);color:var(--ts-color-text-secondary)}:host([appearance="outline"][variant="neutral"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-bg-subtle)}:host([appearance="ghost"]) .button__native{background-color:transparent;border-color:transparent}:host([appearance="ghost"][variant="primary"]) .button__native{color:var(--ts-color-interactive-primary)}:host([appearance="ghost"][variant="primary"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-interactive-primary-subtle);border-color:var(--ts-color-primary-200)}:host([appearance="ghost"][variant="neutral"]) .button__native{color:var(--ts-color-text-secondary)}:host([appearance="ghost"][variant="neutral"]) .button__native:hover:not([disabled]){background-color:var(--ts-color-neutral-100);border-color:var(--ts-color-neutral-200)}:host([appearance="link"]) .button__native{background:none;border:none;padding:0;text-decoration:underline;text-underline-offset:2px}:host([appearance="link"][variant="primary"]) .button__native{color:var(--ts-color-interactive-primary)}:host([appearance="link"]) .button__native:hover:not([disabled]){text-decoration-thickness:2px}:host([disabled]) .button__native,.button__native[disabled]{opacity:0.5;cursor:not-allowed;pointer-events:none}:host([loading]) .button__label,:host([loading]) .button__prefix,:host([loading]) .button__suffix{visibility:hidden}:host([loading]) .button__native{cursor:wait;position:relative}.button__spinner{position:absolute;display:flex;align-items:center;justify-content:center}.button__spinner svg{width:1.2em;height:1.2em;animation:ts-spin 0.8s linear infinite}@keyframes ts-spin{to{transform:rotate(360deg)}}.button__prefix,.button__suffix{display:inline-flex;align-items:center}.button__prefix:empty,.button__suffix:empty{display:none}.button__label{display:inline-flex;align-items:center}`;const s=class{constructor(o){t(this,o);this.tsClick=a(this,"tsClick");this.tsFocus=a(this,"tsFocus");this.tsBlur=a(this,"tsBlur")}get hostEl(){return o(this)}variant="primary";appearance="solid";size="md";disabled=false;loading=false;block=false;type="button";href;target;tsClick;tsFocus;tsBlur;handleClick=t=>{if(this.disabled||this.loading){t.preventDefault();t.stopPropagation();return}this.tsClick.emit()};handleFocus=()=>{this.tsFocus.emit()};handleBlur=()=>{this.tsBlur.emit()};renderSpinner(){return r("span",{class:"button__spinner",part:"spinner","aria-hidden":"true"},r("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},r("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-dasharray":"31.4 31.4"})))}render(){const t=!!this.href;const a=t?"a":"button";const o=t?{href:this.disabled?undefined:this.href,target:this.target,rel:this.target==="_blank"?"noopener noreferrer":undefined,role:"button"}:{type:this.type,disabled:this.disabled||this.loading};return r(n,{key:"235cf7dbe6284358fbdc55c2ce7550d6214336c1",class:{"ts-button":true,[`ts-button--${this.variant}`]:true,[`ts-button--${this.appearance}`]:true,[`ts-button--${this.size}`]:true,"ts-button--disabled":this.disabled,"ts-button--loading":this.loading,"ts-button--block":this.block}},r(a,{key:"23f3665b903ec3c95db788082a0ebcb1e49cceb7",...o,class:"button__native",part:"base","aria-disabled":this.disabled||this.loading?"true":undefined,"aria-busy":this.loading?"true":undefined,onClick:this.handleClick,onFocus:this.handleFocus,onBlur:this.handleBlur},this.loading&&this.renderSpinner(),r("span",{key:"c08cc2427e4e97787dd6aca934bc90296b528f3e",class:"button__prefix",part:"prefix"},r("slot",{key:"b78c2bd8685f9ceea5bfe0645b091cdea9cbef99",name:"prefix"})),r("span",{key:"c402094ba85026064f300b90311a84a35a0f1b72",class:"button__label",part:"label"},r("slot",{key:"38801473cf5e03292a66344434ce1fd882e60ca7"})),r("span",{key:"559ee29b7ebe3f9746d83d69863454c65e251aba",class:"button__suffix",part:"suffix"},r("slot",{key:"52fd64d18e25367625bbff0e995103245cbdaaa4",name:"suffix"}))))}};s.style=e();export{s as ts_button};
2
+ //# sourceMappingURL=p-122e43b7.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buttonCss","TsButton","variant","appearance","size","disabled","loading","block","type","href","target","tsClick","tsFocus","tsBlur","handleClick","event","this","preventDefault","stopPropagation","emit","handleFocus","handleBlur","renderSpinner","h","class","part","viewBox","fill","xmlns","cx","cy","r","stroke","render","isLink","Tag","attrs","undefined","rel","role","Host","key","onClick","onFocus","onBlur","name"],"sources":["src/components/button/button.css?tag=ts-button&encapsulation=shadow","src/components/button/button.tsx"],"sourcesContent":["/* ==========================================================================\n ts-button — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-button-radius Border radius\n --ts-button-font-weight Label font weight\n --ts-button-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: inline-block;\n vertical-align: middle;\n\n --ts-button-radius: var(--ts-shape-interactive);\n --ts-button-font-weight: var(--ts-font-weight-medium);\n --ts-button-focus-ring: var(--ts-focus-ring);\n}\n\n:host([block]) {\n display: block;\n width: 100%;\n}\n\n/* ---- Base native element ---- */\n.button__native {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ts-spacing-2);\n width: 100%;\n border: 1px solid transparent;\n border-radius: var(--ts-button-radius);\n font-family: var(--ts-font-family-base);\n font-weight: var(--ts-button-font-weight);\n line-height: var(--ts-line-height-tight);\n text-decoration: none;\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 box-shadow var(--ts-transition-fast),\n opacity var(--ts-transition-fast),\n transform var(--ts-transition-fast);\n position: relative;\n white-space: nowrap;\n user-select: none;\n -webkit-appearance: none;\n appearance: none;\n outline: none;\n}\n\n/* ---- Focus visible ---- */\n.button__native:focus-visible {\n box-shadow: var(--ts-button-focus-ring);\n}\n\n/* ---- Active press (M3 bouncier) ---- */\n.button__native:active:not([disabled]):not([aria-disabled=\"true\"]) {\n transform: scale(0.96);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"xs\"]) .button__native {\n padding: calc(var(--ts-spacing-1) + 1px) var(--ts-spacing-2);\n font-size: var(--ts-font-size-xs);\n}\n\n:host([size=\"sm\"]) .button__native {\n padding: calc(var(--ts-spacing-1) + 1px) var(--ts-spacing-3);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .button__native {\n padding: calc(var(--ts-spacing-2) + 1px) var(--ts-spacing-4);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .button__native {\n padding: calc(var(--ts-spacing-3) + 2px) var(--ts-spacing-6);\n font-size: var(--ts-font-size-lg);\n}\n\n:host([size=\"xl\"]) .button__native {\n padding: calc(var(--ts-spacing-4) + 2px) var(--ts-spacing-8);\n font-size: var(--ts-font-size-xl);\n}\n\n/* ---- Solid Appearance ---- */\n:host([appearance=\"solid\"]) .button__native {\n border-color: transparent;\n}\n:host([appearance=\"solid\"][variant=\"primary\"]) .button__native {\n background-color: var(--ts-color-interactive-primary);\n color: var(--ts-color-text-on-primary);\n}\n:host([appearance=\"solid\"][variant=\"primary\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-interactive-primary-hover);\n}\n\n:host([appearance=\"solid\"][variant=\"success\"]) .button__native {\n background-color: var(--ts-color-success-600);\n color: var(--ts-color-text-on-success);\n}\n:host([appearance=\"solid\"][variant=\"success\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-success-500);\n}\n\n:host([appearance=\"solid\"][variant=\"danger\"]) .button__native {\n background-color: var(--ts-color-interactive-danger);\n color: var(--ts-color-text-on-danger);\n}\n:host([appearance=\"solid\"][variant=\"danger\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-interactive-danger-hover);\n}\n\n:host([appearance=\"solid\"][variant=\"warning\"]) .button__native {\n background-color: var(--ts-color-warning-600);\n color: var(--ts-color-text-on-warning);\n}\n:host([appearance=\"solid\"][variant=\"warning\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-warning-500);\n}\n\n:host([appearance=\"solid\"][variant=\"neutral\"]) .button__native {\n background-color: var(--ts-color-neutral-800);\n color: var(--ts-color-text-on-primary);\n}\n:host([appearance=\"solid\"][variant=\"neutral\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-neutral-700);\n}\n\n:host([appearance=\"solid\"][variant=\"secondary\"]) .button__native {\n background-color: var(--ts-color-neutral-200);\n color: var(--ts-color-text-primary);\n}\n:host([appearance=\"solid\"][variant=\"secondary\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-neutral-300);\n}\n\n/* ---- Outline Appearance ---- */\n:host([appearance=\"outline\"]) .button__native {\n background-color: transparent;\n}\n:host([appearance=\"outline\"][variant=\"primary\"]) .button__native {\n border-color: var(--ts-color-primary-500);\n color: var(--ts-color-interactive-primary);\n}\n:host([appearance=\"outline\"][variant=\"primary\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-interactive-primary-subtle);\n}\n\n:host([appearance=\"outline\"][variant=\"danger\"]) .button__native {\n border-color: var(--ts-color-danger-500);\n color: var(--ts-color-interactive-danger);\n}\n:host([appearance=\"outline\"][variant=\"danger\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-interactive-danger-subtle);\n}\n\n:host([appearance=\"outline\"][variant=\"neutral\"]) .button__native {\n border-color: var(--ts-color-border-default);\n color: var(--ts-color-text-secondary);\n}\n:host([appearance=\"outline\"][variant=\"neutral\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-bg-subtle);\n}\n\n/* ---- Ghost Appearance ---- */\n:host([appearance=\"ghost\"]) .button__native {\n background-color: transparent;\n border-color: transparent;\n}\n:host([appearance=\"ghost\"][variant=\"primary\"]) .button__native {\n color: var(--ts-color-interactive-primary);\n}\n:host([appearance=\"ghost\"][variant=\"primary\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-interactive-primary-subtle);\n border-color: var(--ts-color-primary-200);\n}\n\n:host([appearance=\"ghost\"][variant=\"neutral\"]) .button__native {\n color: var(--ts-color-text-secondary);\n}\n:host([appearance=\"ghost\"][variant=\"neutral\"]) .button__native:hover:not([disabled]) {\n background-color: var(--ts-color-neutral-100);\n border-color: var(--ts-color-neutral-200);\n}\n\n/* ---- Link Appearance ---- */\n:host([appearance=\"link\"]) .button__native {\n background: none;\n border: none;\n padding: 0;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n:host([appearance=\"link\"][variant=\"primary\"]) .button__native {\n color: var(--ts-color-interactive-primary);\n}\n:host([appearance=\"link\"]) .button__native:hover:not([disabled]) {\n text-decoration-thickness: 2px;\n}\n\n/* ---- Disabled State ---- */\n:host([disabled]) .button__native,\n.button__native[disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Loading State ---- */\n:host([loading]) .button__label,\n:host([loading]) .button__prefix,\n:host([loading]) .button__suffix {\n visibility: hidden;\n}\n\n:host([loading]) .button__native {\n cursor: wait;\n position: relative;\n}\n\n/* ---- Spinner ---- */\n.button__spinner {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.button__spinner svg {\n width: 1.2em;\n height: 1.2em;\n animation: ts-spin 0.8s linear infinite;\n}\n\n@keyframes ts-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ---- Slot wrappers ---- */\n.button__prefix,\n.button__suffix {\n display: inline-flex;\n align-items: center;\n}\n\n.button__prefix:empty,\n.button__suffix:empty {\n display: none;\n}\n\n.button__label {\n display: inline-flex;\n align-items: center;\n}\n","import { Component, Prop, Event, h, Host, Element } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize, TsVariant, TsAppearance } from '../../types';\n\n/**\n * @slot - Default slot for button label content.\n * @slot prefix - Content before the label (e.g., icon).\n * @slot suffix - Content after the label (e.g., icon).\n *\n * @part base - The native button element.\n * @part label - The label wrapper.\n * @part prefix - The prefix slot wrapper.\n * @part suffix - The suffix slot wrapper.\n * @part spinner - The loading spinner element.\n */\n@Component({\n tag: 'ts-button',\n styleUrl: 'button.css',\n shadow: true,\n})\nexport class TsButton {\n @Element() hostEl!: HTMLElement;\n\n /** The button's visual variant. */\n @Prop({ reflect: true }) variant: TsVariant = 'primary';\n\n /** The button's visual weight / appearance. */\n @Prop({ reflect: true }) appearance: TsAppearance = 'solid';\n\n /** The button's size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Renders the button in a disabled state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Renders a loading spinner and disables the button. */\n @Prop({ reflect: true }) loading = false;\n\n /** Makes the button take the full width of its container. */\n @Prop({ reflect: true }) block = false;\n\n /** The type attribute for the native button. */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** An optional href — renders an anchor instead of a button. */\n @Prop() href?: string;\n\n /** Target attribute when href is set. */\n @Prop() target?: '_blank' | '_self' | '_parent' | '_top';\n\n /** Emitted when the button is clicked (not fired when disabled/loading). */\n @Event({ eventName: 'tsClick' }) tsClick!: EventEmitter<void>;\n\n /** Emitted when the button receives focus. */\n @Event({ eventName: 'tsFocus' }) tsFocus!: EventEmitter<void>;\n\n /** Emitted when the button loses focus. */\n @Event({ eventName: 'tsBlur' }) tsBlur!: EventEmitter<void>;\n\n private handleClick = (event: MouseEvent): void => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.tsClick.emit();\n };\n\n private handleFocus = (): void => {\n this.tsFocus.emit();\n };\n\n private handleBlur = (): void => {\n this.tsBlur.emit();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderSpinner() {\n return (\n <span class=\"button__spinner\" part=\"spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-dasharray=\"31.4 31.4\" />\n </svg>\n </span>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const isLink = !!this.href;\n const Tag = isLink ? 'a' : 'button';\n\n const attrs = isLink\n ? {\n href: this.disabled ? undefined : this.href,\n target: this.target,\n rel: this.target === '_blank' ? 'noopener noreferrer' : undefined,\n role: 'button',\n }\n : {\n type: this.type,\n disabled: this.disabled || this.loading,\n };\n\n return (\n <Host\n class={{\n 'ts-button': true,\n [`ts-button--${this.variant}`]: true,\n [`ts-button--${this.appearance}`]: true,\n [`ts-button--${this.size}`]: true,\n 'ts-button--disabled': this.disabled,\n 'ts-button--loading': this.loading,\n 'ts-button--block': this.block,\n }}\n >\n <Tag\n {...attrs}\n class=\"button__native\"\n part=\"base\"\n aria-disabled={this.disabled || this.loading ? 'true' : undefined}\n aria-busy={this.loading ? 'true' : undefined}\n onClick={this.handleClick}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n {this.loading && this.renderSpinner()}\n\n <span class=\"button__prefix\" part=\"prefix\">\n <slot name=\"prefix\" />\n </span>\n\n <span class=\"button__label\" part=\"label\">\n <slot />\n </span>\n\n <span class=\"button__suffix\" part=\"suffix\">\n <slot name=\"suffix\" />\n </span>\n </Tag>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAY,IAAM,0+L,MCoBXC,EAAQ,M,gJAIMC,QAAqB,UAGrBC,WAA2B,QAG3BC,KAAe,KAGfC,SAAW,MAGXC,QAAU,MAGVC,MAAQ,MAGzBC,KAAsC,SAGtCC,KAGAC,OAGyBC,QAGAC,QAGDC,OAExBC,YAAeC,IACrB,GAAIC,KAAKX,UAAYW,KAAKV,QAAS,CACjCS,EAAME,iBACNF,EAAMG,kBACN,M,CAEFF,KAAKL,QAAQQ,MAAM,EAGbC,YAAc,KACpBJ,KAAKJ,QAAQO,MAAM,EAGbE,WAAa,KACnBL,KAAKH,OAAOM,MAAM,EAIZ,aAAAG,GACN,OACEC,EAAA,QAAMC,MAAM,kBAAkBC,KAAK,UAAS,cAAa,QACvDF,EAAA,OAAKG,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BACzCL,EAAA,UAAQM,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAKC,OAAO,eAAc,eAAc,IAAG,iBAAgB,QAAO,mBAAkB,e,CAOtH,MAAAC,GACE,MAAMC,IAAWlB,KAAKP,KACtB,MAAM0B,EAAMD,EAAS,IAAM,SAE3B,MAAME,EAAQF,EACV,CACEzB,KAAMO,KAAKX,SAAWgC,UAAYrB,KAAKP,KACvCC,OAAQM,KAAKN,OACb4B,IAAKtB,KAAKN,SAAW,SAAW,sBAAwB2B,UACxDE,KAAM,UAER,CACE/B,KAAMQ,KAAKR,KACXH,SAAUW,KAAKX,UAAYW,KAAKV,SAGtC,OACEiB,EAACiB,EAAI,CAAAC,IAAA,2CACHjB,MAAO,CACL,YAAa,KACb,CAAC,cAAcR,KAAKd,WAAY,KAChC,CAAC,cAAcc,KAAKb,cAAe,KACnC,CAAC,cAAca,KAAKZ,QAAS,KAC7B,sBAAuBY,KAAKX,SAC5B,qBAAsBW,KAAKV,QAC3B,mBAAoBU,KAAKT,QAG3BgB,EAACY,EAAG,CAAAM,IAAA,8CACEL,EACJZ,MAAM,iBACNC,KAAK,OAAM,gBACIT,KAAKX,UAAYW,KAAKV,QAAU,OAAS+B,UAAS,YACtDrB,KAAKV,QAAU,OAAS+B,UACnCK,QAAS1B,KAAKF,YACd6B,QAAS3B,KAAKI,YACdwB,OAAQ5B,KAAKK,YAEZL,KAAKV,SAAWU,KAAKM,gBAEtBC,EAAA,QAAAkB,IAAA,2CAAMjB,MAAM,iBAAiBC,KAAK,UAChCF,EAAA,QAAAkB,IAAA,2CAAMI,KAAK,YAGbtB,EAAA,QAAAkB,IAAA,2CAAMjB,MAAM,gBAAgBC,KAAK,SAC/BF,EAAA,QAAAkB,IAAA,8CAGFlB,EAAA,QAAAkB,IAAA,2CAAMjB,MAAM,iBAAiBC,KAAK,UAChCF,EAAA,QAAAkB,IAAA,2CAAMI,KAAK,a","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,a as o,h as p,H as i}from"./p-V8-ENixA.js";import{g as e}from"./p-lpqZSiIf.js";const s=()=>`:host{display:inline-block;position:relative;font-family:var(--ts-font-family-base);--ts-tooltip-bg:var(--ts-ref-neutral-900);--ts-tooltip-color:#ffffff;--ts-tooltip-radius:var(--ts-shape-badge)}.tooltip__trigger{display:inline-block}.tooltip__popup{position:absolute;z-index:var(--ts-z-tooltip);padding:var(--ts-spacing-1) var(--ts-spacing-2);background-color:var(--ts-tooltip-bg);color:var(--ts-tooltip-color);font-size:var(--ts-font-size-xs);font-weight:var(--ts-font-weight-medium);line-height:var(--ts-line-height-normal);border-radius:var(--ts-tooltip-radius);white-space:nowrap;pointer-events:none;opacity:0;transform:scale(0.95);transition:opacity var(--ts-transition-fast), transform var(--ts-transition-fast)}.tooltip__popup--visible{opacity:1;transform:scale(1)}.tooltip__popup--top{bottom:calc(100% + 8px);left:50%;transform-origin:bottom center}.tooltip__popup--top,.tooltip__popup--top-start,.tooltip__popup--top-end{bottom:calc(100% + 8px)}.tooltip__popup--top{left:50%;margin-left:-50%}.tooltip__popup--top-start{inset-inline-start:0}.tooltip__popup--top-end{inset-inline-end:0}.tooltip__popup--bottom,.tooltip__popup--bottom-start,.tooltip__popup--bottom-end{top:calc(100% + 8px)}.tooltip__popup--bottom{left:50%;margin-left:-50%}.tooltip__popup--bottom-start{inset-inline-start:0}.tooltip__popup--bottom-end{inset-inline-end:0}.tooltip__popup--left,.tooltip__popup--left-start,.tooltip__popup--left-end{inset-inline-end:calc(100% + 8px)}.tooltip__popup--left{top:50%;transform:translateY(-50%) scale(0.95)}.tooltip__popup--left.tooltip__popup--visible{transform:translateY(-50%) scale(1)}.tooltip__popup--right,.tooltip__popup--right-start,.tooltip__popup--right-end{inset-inline-start:calc(100% + 8px)}.tooltip__popup--right{top:50%;transform:translateY(-50%) scale(0.95)}.tooltip__popup--right.tooltip__popup--visible{transform:translateY(-50%) scale(1)}.tooltip__arrow{position:absolute;width:8px;height:8px;background:var(--ts-tooltip-bg);transform:rotate(45deg)}.tooltip__popup--top .tooltip__arrow,.tooltip__popup--top-start .tooltip__arrow,.tooltip__popup--top-end .tooltip__arrow{bottom:-4px;left:50%;margin-left:-4px}.tooltip__popup--bottom .tooltip__arrow,.tooltip__popup--bottom-start .tooltip__arrow,.tooltip__popup--bottom-end .tooltip__arrow{top:-4px;left:50%;margin-left:-4px}.tooltip__popup--left .tooltip__arrow{inset-inline-end:-4px;top:50%;margin-top:-4px}.tooltip__popup--right .tooltip__arrow{inset-inline-start:-4px;top:50%;margin-top:-4px}`;const a=class{constructor(o){t(this,o)}get hostEl(){return o(this)}tooltipId=e("ts-tooltip");content="";placement="top";showDelay=200;hideDelay=0;disabled=false;isVisible=false;showTimeout;hideTimeout;async show(){if(this.disabled)return;clearTimeout(this.hideTimeout);this.showTimeout=setTimeout((()=>{this.isVisible=true}),this.showDelay)}async hide(){clearTimeout(this.showTimeout);this.hideTimeout=setTimeout((()=>{this.isVisible=false}),this.hideDelay)}disconnectedCallback(){clearTimeout(this.showTimeout);clearTimeout(this.hideTimeout)}handleMouseEnter=()=>{this.show()};handleMouseLeave=()=>{this.hide()};handleFocusIn=()=>{this.show()};handleFocusOut=()=>{this.hide()};handleKeydown=t=>{if(t.key==="Escape"&&this.isVisible){this.hide()}};render(){return p(i,{key:"51c5ec887b0a5b01b558e94673f4546cd5c1bfad",class:{"ts-tooltip":true,"ts-tooltip--visible":this.isVisible},onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onFocusin:this.handleFocusIn,onFocusout:this.handleFocusOut,onKeyDown:this.handleKeydown},p("span",{key:"0b334f0e17a37431daa0f23652374a4f8f0de3b9",class:"tooltip__trigger","aria-describedby":this.isVisible?this.tooltipId:undefined},p("slot",{key:"e3f1e57562ee6c55f4c6343fc853a9ee1ef234fc"})),p("div",{key:"ebc401eb3735582782e2a13457c9591a250455c9",class:{tooltip__popup:true,[`tooltip__popup--${this.placement}`]:true,"tooltip__popup--visible":this.isVisible},part:"base",id:this.tooltipId,role:"tooltip","aria-hidden":!this.isVisible?"true":undefined},this.content,p("div",{key:"fa6a4ac47413853dfd1f4da984888e0de02d7493",class:"tooltip__arrow",part:"arrow"})))}};a.style=s();export{a as ts_tooltip};
2
+ //# sourceMappingURL=p-16bb8ca8.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tooltipCss","TsTooltip","tooltipId","generateId","content","placement","showDelay","hideDelay","disabled","isVisible","showTimeout","hideTimeout","show","this","clearTimeout","setTimeout","hide","disconnectedCallback","handleMouseEnter","handleMouseLeave","handleFocusIn","handleFocusOut","handleKeydown","event","key","render","h","Host","class","onMouseEnter","onMouseLeave","onFocusin","onFocusout","onKeyDown","undefined","tooltip__popup","part","id","role"],"sources":["src/components/tooltip/tooltip.css?tag=ts-tooltip&encapsulation=shadow","src/components/tooltip/tooltip.tsx"],"sourcesContent":["/* ==========================================================================\n ts-tooltip — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-tooltip-bg Popup background\n --ts-tooltip-color Popup text color\n --ts-tooltip-radius Popup border radius\n ========================================================================== */\n\n:host {\n display: inline-block;\n position: relative;\n font-family: var(--ts-font-family-base);\n\n --ts-tooltip-bg: var(--ts-ref-neutral-900);\n --ts-tooltip-color: #ffffff;\n --ts-tooltip-radius: var(--ts-shape-badge);\n}\n\n.tooltip__trigger {\n display: inline-block;\n}\n\n/* ---- Popup ---- */\n.tooltip__popup {\n position: absolute;\n z-index: var(--ts-z-tooltip);\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n background-color: var(--ts-tooltip-bg);\n color: var(--ts-tooltip-color);\n font-size: var(--ts-font-size-xs);\n font-weight: var(--ts-font-weight-medium);\n line-height: var(--ts-line-height-normal);\n border-radius: var(--ts-tooltip-radius);\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity var(--ts-transition-fast),\n transform var(--ts-transition-fast);\n}\n\n.tooltip__popup--visible {\n opacity: 1;\n transform: scale(1);\n}\n\n/* ---- Placements ---- */\n.tooltip__popup--top {\n bottom: calc(100% + 8px);\n left: 50%;\n transform-origin: bottom center;\n}\n.tooltip__popup--top,\n.tooltip__popup--top-start,\n.tooltip__popup--top-end {\n bottom: calc(100% + 8px);\n}\n.tooltip__popup--top { left: 50%; margin-left: -50%; }\n.tooltip__popup--top-start { inset-inline-start: 0; }\n.tooltip__popup--top-end { inset-inline-end: 0; }\n\n.tooltip__popup--bottom,\n.tooltip__popup--bottom-start,\n.tooltip__popup--bottom-end {\n top: calc(100% + 8px);\n}\n.tooltip__popup--bottom { left: 50%; margin-left: -50%; }\n.tooltip__popup--bottom-start { inset-inline-start: 0; }\n.tooltip__popup--bottom-end { inset-inline-end: 0; }\n\n.tooltip__popup--left,\n.tooltip__popup--left-start,\n.tooltip__popup--left-end {\n inset-inline-end: calc(100% + 8px);\n}\n.tooltip__popup--left { top: 50%; transform: translateY(-50%) scale(0.95); }\n.tooltip__popup--left.tooltip__popup--visible { transform: translateY(-50%) scale(1); }\n\n.tooltip__popup--right,\n.tooltip__popup--right-start,\n.tooltip__popup--right-end {\n inset-inline-start: calc(100% + 8px);\n}\n.tooltip__popup--right { top: 50%; transform: translateY(-50%) scale(0.95); }\n.tooltip__popup--right.tooltip__popup--visible { transform: translateY(-50%) scale(1); }\n\n/* ---- Arrow ---- */\n.tooltip__arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background: var(--ts-tooltip-bg);\n transform: rotate(45deg);\n}\n\n.tooltip__popup--top .tooltip__arrow,\n.tooltip__popup--top-start .tooltip__arrow,\n.tooltip__popup--top-end .tooltip__arrow {\n bottom: -4px;\n left: 50%;\n margin-left: -4px;\n}\n\n.tooltip__popup--bottom .tooltip__arrow,\n.tooltip__popup--bottom-start .tooltip__arrow,\n.tooltip__popup--bottom-end .tooltip__arrow {\n top: -4px;\n left: 50%;\n margin-left: -4px;\n}\n\n.tooltip__popup--left .tooltip__arrow {\n inset-inline-end: -4px;\n top: 50%;\n margin-top: -4px;\n}\n\n.tooltip__popup--right .tooltip__arrow {\n inset-inline-start: -4px;\n top: 50%;\n margin-top: -4px;\n}\n","import { Component, Prop, State, h, Host, Element, Method } from '@stencil/core';\nimport type { TsPlacement } from '../../types';\nimport { generateId } from '../../utils/aria';\n\n/**\n * @slot - Default slot for the trigger element.\n *\n * @part base - The tooltip popup container.\n * @part arrow - The tooltip arrow element.\n */\n@Component({\n tag: 'ts-tooltip',\n styleUrl: 'tooltip.css',\n shadow: true,\n})\nexport class TsTooltip {\n @Element() hostEl!: HTMLElement;\n\n private tooltipId = generateId('ts-tooltip');\n\n /** The tooltip text content. */\n @Prop() content = '';\n\n /** Placement of the tooltip relative to the trigger. */\n @Prop({ reflect: true }) placement: TsPlacement = 'top';\n\n /** Delay in ms before showing the tooltip. */\n @Prop() showDelay = 200;\n\n /** Delay in ms before hiding the tooltip. */\n @Prop() hideDelay = 0;\n\n /** Disables the tooltip. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Whether the tooltip is currently visible. */\n @State() isVisible = false;\n\n private showTimeout?: ReturnType<typeof setTimeout>;\n private hideTimeout?: ReturnType<typeof setTimeout>;\n\n /** Programmatically show the tooltip. */\n @Method()\n async show(): Promise<void> {\n if (this.disabled) return;\n clearTimeout(this.hideTimeout);\n this.showTimeout = setTimeout(() => {\n this.isVisible = true;\n }, this.showDelay);\n }\n\n /** Programmatically hide the tooltip. */\n @Method()\n async hide(): Promise<void> {\n clearTimeout(this.showTimeout);\n this.hideTimeout = setTimeout(() => {\n this.isVisible = false;\n }, this.hideDelay);\n }\n\n disconnectedCallback(): void {\n clearTimeout(this.showTimeout);\n clearTimeout(this.hideTimeout);\n }\n\n private handleMouseEnter = (): void => {\n this.show();\n };\n\n private handleMouseLeave = (): void => {\n this.hide();\n };\n\n private handleFocusIn = (): void => {\n this.show();\n };\n\n private handleFocusOut = (): void => {\n this.hide();\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.isVisible) {\n this.hide();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-tooltip': true,\n 'ts-tooltip--visible': this.isVisible,\n }}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n onFocusin={this.handleFocusIn}\n onFocusout={this.handleFocusOut}\n onKeyDown={this.handleKeydown}\n >\n <span class=\"tooltip__trigger\" aria-describedby={this.isVisible ? this.tooltipId : undefined}>\n <slot />\n </span>\n\n <div\n class={{\n 'tooltip__popup': true,\n [`tooltip__popup--${this.placement}`]: true,\n 'tooltip__popup--visible': this.isVisible,\n }}\n part=\"base\"\n id={this.tooltipId}\n role=\"tooltip\"\n aria-hidden={!this.isVisible ? 'true' : undefined}\n >\n {this.content}\n <div class=\"tooltip__arrow\" part=\"arrow\" />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"6FAAA,MAAMA,EAAa,IAAM,u7E,MCeZC,EAAS,M,qDAGZC,UAAYC,EAAW,cAGvBC,QAAU,GAGOC,UAAyB,MAG1CC,UAAY,IAGZC,UAAY,EAGKC,SAAW,MAG3BC,UAAY,MAEbC,YACAC,YAIR,UAAMC,GACJ,GAAIC,KAAKL,SAAU,OACnBM,aAAaD,KAAKF,aAClBE,KAAKH,YAAcK,YAAW,KAC5BF,KAAKJ,UAAY,IAAI,GACpBI,KAAKP,U,CAKV,UAAMU,GACJF,aAAaD,KAAKH,aAClBG,KAAKF,YAAcI,YAAW,KAC5BF,KAAKJ,UAAY,KAAK,GACrBI,KAAKN,U,CAGV,oBAAAU,GACEH,aAAaD,KAAKH,aAClBI,aAAaD,KAAKF,Y,CAGZO,iBAAmB,KACzBL,KAAKD,MAAM,EAGLO,iBAAmB,KACzBN,KAAKG,MAAM,EAGLI,cAAgB,KACtBP,KAAKD,MAAM,EAGLS,eAAiB,KACvBR,KAAKG,MAAM,EAGLM,cAAiBC,IACvB,GAAIA,EAAMC,MAAQ,UAAYX,KAAKJ,UAAW,CAC5CI,KAAKG,M,GAKT,MAAAS,GACE,OACEC,EAACC,EAAI,CAAAH,IAAA,2CACHI,MAAO,CACL,aAAc,KACd,sBAAuBf,KAAKJ,WAE9BoB,aAAchB,KAAKK,iBACnBY,aAAcjB,KAAKM,iBACnBY,UAAWlB,KAAKO,cAChBY,WAAYnB,KAAKQ,eACjBY,UAAWpB,KAAKS,eAEhBI,EAAA,QAAAF,IAAA,2CAAMI,MAAM,mBAAkB,mBAAmBf,KAAKJ,UAAYI,KAAKX,UAAYgC,WACjFR,EAAA,QAAAF,IAAA,8CAGFE,EAAA,OAAAF,IAAA,2CACEI,MAAO,CACLO,eAAkB,KAClB,CAAC,mBAAmBtB,KAAKR,aAAc,KACvC,0BAA2BQ,KAAKJ,WAElC2B,KAAK,OACLC,GAAIxB,KAAKX,UACToC,KAAK,UAAS,eACAzB,KAAKJ,UAAY,OAASyB,WAEvCrB,KAAKT,QACNsB,EAAA,OAAAF,IAAA,2CAAKI,MAAM,iBAAiBQ,KAAK,W","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as a,a as s,h as r,H as e}from"./p-V8-ENixA.js";const o=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-tabs-border-color:var(--ts-color-border-default);--ts-tabs-active-color:var(--ts-color-interactive-primary);--ts-tabs-radius:var(--ts-radius-md)}.tabs__tablist{display:flex;gap:var(--ts-spacing-1);border-block-end:2px solid var(--ts-tabs-border-color)}.tabs__tab{display:inline-flex;align-items:center;gap:var(--ts-spacing-1);border:none;background:transparent;font-family:inherit;font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-secondary);cursor:pointer;position:relative;white-space:nowrap;transition:color var(--ts-transition-fast), background-color var(--ts-transition-fast), border-color var(--ts-transition-fast);outline:none;margin-block-end:-2px;border-block-end:2px solid transparent}.tabs__tab:focus-visible{box-shadow:var(--ts-focus-ring)}.tabs__tab:hover:not([disabled]){color:var(--ts-color-text-primary)}.tabs__tab--active{color:var(--ts-tabs-active-color);border-block-end-color:var(--ts-tabs-active-color)}.tabs__tab--disabled{opacity:0.5;cursor:not-allowed}:host([size="sm"]) .tabs__tab{padding:var(--ts-spacing-1) var(--ts-spacing-3);font-size:var(--ts-font-size-sm)}:host([size="md"]) .tabs__tab{padding:var(--ts-spacing-2) var(--ts-spacing-4);font-size:var(--ts-font-size-md)}:host([size="lg"]) .tabs__tab{padding:var(--ts-spacing-3) var(--ts-spacing-5);font-size:var(--ts-font-size-lg)}:host([variant="enclosed"]) .tabs__tablist{gap:0;border-block-end:2px solid var(--ts-tabs-border-color)}:host([variant="enclosed"]) .tabs__tab{border:2px solid transparent;border-block-end:2px solid var(--ts-tabs-border-color);border-start-start-radius:var(--ts-tabs-radius);border-start-end-radius:var(--ts-tabs-radius);margin-block-end:-2px}:host([variant="enclosed"]) .tabs__tab--active{border-color:var(--ts-tabs-border-color);border-block-end-color:var(--ts-color-bg-surface);background-color:var(--ts-color-bg-surface);color:var(--ts-tabs-active-color)}:host([variant="pill"]) .tabs__tablist{border-block-end:none;gap:var(--ts-spacing-1);background-color:var(--ts-color-bg-subtle);border-radius:var(--ts-tabs-radius);padding:var(--ts-spacing-1)}:host([variant="pill"]) .tabs__tab{border-block-end:none;border-radius:var(--ts-tabs-radius);margin-block-end:0}:host([variant="pill"]) .tabs__tab--active{background-color:var(--ts-color-bg-surface);color:var(--ts-tabs-active-color);box-shadow:var(--ts-shadow-sm)}.tabs__panels{padding-block-start:var(--ts-spacing-4)}.tabs__tab-icon{font-size:1em}`;const i=class{constructor(s){t(this,s);this.tsChange=a(this,"tsChange")}get hostEl(){return s(this)}value;variant="line";size="md";tsChange;handleValueChange(){this.updatePanelVisibility()}componentDidLoad(){if(!this.value){const t=this.getPanels();const a=t.find((t=>!t.hasAttribute("disabled")));if(a){this.value=a.getAttribute("value")||""}}this.updatePanelVisibility()}getPanels(){return Array.from(this.hostEl.querySelectorAll("ts-tab-panel"))}getTabData(){return this.getPanels().map((t=>({tab:t.getAttribute("tab")||"",value:t.getAttribute("value")||"",disabled:t.hasAttribute("disabled"),icon:t.getAttribute("icon")||undefined})))}updatePanelVisibility(){this.getPanels().forEach((t=>{const a=t.getAttribute("value")===this.value;t.style.display=a?"":"none"}))}handleTabClick(t,a){if(a||t===this.value)return;this.value=t;this.tsChange.emit({value:t});this.updatePanelVisibility()}handleKeydown=t=>{const a=this.getTabData();const s=a.filter((t=>!t.disabled));const r=s.findIndex((t=>t.value===this.value));let e=r;switch(t.key){case"ArrowRight":case"ArrowDown":t.preventDefault();e=(r+1)%s.length;break;case"ArrowLeft":case"ArrowUp":t.preventDefault();e=(r-1+s.length)%s.length;break;case"Home":t.preventDefault();e=0;break;case"End":t.preventDefault();e=s.length-1;break;default:return}const o=s[e];if(o){this.value=o.value;this.tsChange.emit({value:o.value});this.updatePanelVisibility();const t=this.hostEl.shadowRoot?.querySelectorAll('[role="tab"]');const s=a.findIndex((t=>t.value===o.value));t?.[s]?.focus()}};render(){const t=this.getTabData();return r(e,{key:"4494e457803734a1e75439fce33da557d2aa9b2e",class:{"ts-tabs":true,[`ts-tabs--${this.variant}`]:true,[`ts-tabs--${this.size}`]:true}},r("div",{key:"761806ffca4e983be0e85fa711eb30124a42a283",class:"tabs__tablist",part:"tablist",role:"tablist",onKeyDown:this.handleKeydown},t.map((t=>{const a=t.value===this.value;return r("button",{class:{tabs__tab:true,"tabs__tab--active":a,"tabs__tab--disabled":t.disabled},part:a?"tab tab-active":"tab",role:"tab",type:"button","aria-selected":a?"true":"false","aria-disabled":t.disabled?"true":undefined,tabindex:a?0:-1,disabled:t.disabled,onClick:()=>this.handleTabClick(t.value,t.disabled)},t.icon&&r("ts-icon",{name:t.icon,class:"tabs__tab-icon"}),t.tab)}))),r("div",{key:"3e6bb533aee14347410a621435fa695233bacb33",class:"tabs__panels",part:"panels"},r("slot",{key:"ccf531fbebef82784b1d412ef72828072595f7ee"})))}static get watchers(){return{value:[{handleValueChange:0}]}}};i.style=o();export{i as ts_tabs};
2
+ //# sourceMappingURL=p-16fc632b.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tabsCss","TsTabs","value","variant","size","tsChange","handleValueChange","this","updatePanelVisibility","componentDidLoad","panels","getPanels","firstEnabled","find","p","hasAttribute","getAttribute","Array","from","hostEl","querySelectorAll","getTabData","map","panel","tab","disabled","icon","undefined","forEach","isActive","style","display","handleTabClick","tabValue","emit","handleKeydown","event","tabs","enabledTabs","filter","t","currentIndex","findIndex","newIndex","key","preventDefault","length","newTab","tabButtons","shadowRoot","allTabIndex","focus","render","h","Host","class","part","role","onKeyDown","tabs__tab","type","tabindex","onClick","name"],"sources":["src/components/tabs/tabs.css?tag=ts-tabs&encapsulation=shadow","src/components/tabs/tabs.tsx"],"sourcesContent":["/* ==========================================================================\n ts-tabs — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-tabs-border-color Border color for tab bar\n --ts-tabs-active-color Active tab indicator color\n --ts-tabs-radius Border radius for enclosed/pill tabs\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-tabs-border-color: var(--ts-color-border-default);\n --ts-tabs-active-color: var(--ts-color-interactive-primary);\n --ts-tabs-radius: var(--ts-radius-md);\n}\n\n/* ---- Tab list ---- */\n.tabs__tablist {\n display: flex;\n gap: var(--ts-spacing-1);\n border-block-end: 2px solid var(--ts-tabs-border-color);\n}\n\n/* ---- Tab button base ---- */\n.tabs__tab {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n border: none;\n background: transparent;\n font-family: inherit;\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-secondary);\n cursor: pointer;\n position: relative;\n white-space: nowrap;\n transition:\n color var(--ts-transition-fast),\n background-color var(--ts-transition-fast),\n border-color var(--ts-transition-fast);\n outline: none;\n margin-block-end: -2px;\n border-block-end: 2px solid transparent;\n}\n\n.tabs__tab:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n.tabs__tab:hover:not([disabled]) {\n color: var(--ts-color-text-primary);\n}\n\n/* ---- Active tab (line variant) ---- */\n.tabs__tab--active {\n color: var(--ts-tabs-active-color);\n border-block-end-color: var(--ts-tabs-active-color);\n}\n\n/* ---- Disabled ---- */\n.tabs__tab--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .tabs__tab {\n padding: var(--ts-spacing-1) var(--ts-spacing-3);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .tabs__tab {\n padding: var(--ts-spacing-2) var(--ts-spacing-4);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .tabs__tab {\n padding: var(--ts-spacing-3) var(--ts-spacing-5);\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Enclosed variant ---- */\n:host([variant=\"enclosed\"]) .tabs__tablist {\n gap: 0;\n border-block-end: 2px solid var(--ts-tabs-border-color);\n}\n\n:host([variant=\"enclosed\"]) .tabs__tab {\n border: 2px solid transparent;\n border-block-end: 2px solid var(--ts-tabs-border-color);\n border-start-start-radius: var(--ts-tabs-radius);\n border-start-end-radius: var(--ts-tabs-radius);\n margin-block-end: -2px;\n}\n\n:host([variant=\"enclosed\"]) .tabs__tab--active {\n border-color: var(--ts-tabs-border-color);\n border-block-end-color: var(--ts-color-bg-surface);\n background-color: var(--ts-color-bg-surface);\n color: var(--ts-tabs-active-color);\n}\n\n/* ---- Pill variant ---- */\n:host([variant=\"pill\"]) .tabs__tablist {\n border-block-end: none;\n gap: var(--ts-spacing-1);\n background-color: var(--ts-color-bg-subtle);\n border-radius: var(--ts-tabs-radius);\n padding: var(--ts-spacing-1);\n}\n\n:host([variant=\"pill\"]) .tabs__tab {\n border-block-end: none;\n border-radius: var(--ts-tabs-radius);\n margin-block-end: 0;\n}\n\n:host([variant=\"pill\"]) .tabs__tab--active {\n background-color: var(--ts-color-bg-surface);\n color: var(--ts-tabs-active-color);\n box-shadow: var(--ts-shadow-sm);\n}\n\n/* ---- Panels ---- */\n.tabs__panels {\n padding-block-start: var(--ts-spacing-4);\n}\n\n/* ---- Tab icon ---- */\n.tabs__tab-icon {\n font-size: 1em;\n}\n","import { Component, Prop, Event, h, Host, Element, Watch } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for `ts-tab-panel` children.\n *\n * @part tablist - The tab button container.\n * @part tab - Each individual tab button.\n * @part tab-active - The currently active tab button.\n * @part panels - The panel container.\n */\n@Component({\n tag: 'ts-tabs',\n styleUrl: 'tabs.css',\n shadow: true,\n})\nexport class TsTabs {\n @Element() hostEl!: HTMLElement;\n\n /** The value of the currently active tab. */\n @Prop({ mutable: true, reflect: true }) value?: string;\n\n /** Visual variant of the tab bar. */\n @Prop({ reflect: true }) variant: 'line' | 'enclosed' | 'pill' = 'line';\n\n /** The size of the tab buttons. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Emitted when the active tab changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: string }>;\n\n @Watch('value')\n handleValueChange(): void {\n this.updatePanelVisibility();\n }\n\n componentDidLoad(): void {\n // Default to first non-disabled tab if no value set\n if (!this.value) {\n const panels = this.getPanels();\n const firstEnabled = panels.find((p) => !p.hasAttribute('disabled'));\n if (firstEnabled) {\n this.value = firstEnabled.getAttribute('value') || '';\n }\n }\n this.updatePanelVisibility();\n }\n\n private getPanels(): Element[] {\n return Array.from(this.hostEl.querySelectorAll('ts-tab-panel'));\n }\n\n private getTabData(): Array<{ tab: string; value: string; disabled: boolean; icon?: string }> {\n return this.getPanels().map((panel) => ({\n tab: panel.getAttribute('tab') || '',\n value: panel.getAttribute('value') || '',\n disabled: panel.hasAttribute('disabled'),\n icon: panel.getAttribute('icon') || undefined,\n }));\n }\n\n private updatePanelVisibility(): void {\n this.getPanels().forEach((panel) => {\n const isActive = panel.getAttribute('value') === this.value;\n (panel as HTMLElement).style.display = isActive ? '' : 'none';\n });\n }\n\n private handleTabClick(tabValue: string, disabled: boolean): void {\n if (disabled || tabValue === this.value) return;\n this.value = tabValue;\n this.tsChange.emit({ value: tabValue });\n this.updatePanelVisibility();\n }\n\n private handleKeydown = (event: KeyboardEvent): void => {\n const tabs = this.getTabData();\n const enabledTabs = tabs.filter((t) => !t.disabled);\n const currentIndex = enabledTabs.findIndex((t) => t.value === this.value);\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n newIndex = (currentIndex + 1) % enabledTabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n newIndex = (currentIndex - 1 + enabledTabs.length) % enabledTabs.length;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = enabledTabs.length - 1;\n break;\n default:\n return;\n }\n\n const newTab = enabledTabs[newIndex];\n if (newTab) {\n this.value = newTab.value;\n this.tsChange.emit({ value: newTab.value });\n this.updatePanelVisibility();\n\n // Focus the new tab button\n const tabButtons = this.hostEl.shadowRoot?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]');\n const allTabIndex = tabs.findIndex((t) => t.value === newTab.value);\n tabButtons?.[allTabIndex]?.focus();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const tabs = this.getTabData();\n\n return (\n <Host\n class={{\n 'ts-tabs': true,\n [`ts-tabs--${this.variant}`]: true,\n [`ts-tabs--${this.size}`]: true,\n }}\n >\n <div class=\"tabs__tablist\" part=\"tablist\" role=\"tablist\" onKeyDown={this.handleKeydown}>\n {tabs.map((t) => {\n const isActive = t.value === this.value;\n return (\n <button\n class={{\n 'tabs__tab': true,\n 'tabs__tab--active': isActive,\n 'tabs__tab--disabled': t.disabled,\n }}\n part={isActive ? 'tab tab-active' : 'tab'}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive ? 'true' : 'false'}\n aria-disabled={t.disabled ? 'true' : undefined}\n tabindex={isActive ? 0 : -1}\n disabled={t.disabled}\n onClick={() => this.handleTabClick(t.value, t.disabled)}\n >\n {t.icon && <ts-icon name={t.icon} class=\"tabs__tab-icon\" />}\n {t.tab}\n </button>\n );\n })}\n </div>\n <div class=\"tabs__panels\" part=\"panels\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAU,IAAM,k8E,MCgBTC,EAAM,M,sFAIuBC,MAGfC,QAAwC,OAGxCC,KAA2B,KAGlBC,SAGlC,iBAAAC,GACEC,KAAKC,uB,CAGP,gBAAAC,GAEE,IAAKF,KAAKL,MAAO,CACf,MAAMQ,EAASH,KAAKI,YACpB,MAAMC,EAAeF,EAAOG,MAAMC,IAAOA,EAAEC,aAAa,cACxD,GAAIH,EAAc,CAChBL,KAAKL,MAAQU,EAAaI,aAAa,UAAY,E,EAGvDT,KAAKC,uB,CAGC,SAAAG,GACN,OAAOM,MAAMC,KAAKX,KAAKY,OAAOC,iBAAiB,gB,CAGzC,UAAAC,GACN,OAAOd,KAAKI,YAAYW,KAAKC,IAAK,CAChCC,IAAKD,EAAMP,aAAa,QAAU,GAClCd,MAAOqB,EAAMP,aAAa,UAAY,GACtCS,SAAUF,EAAMR,aAAa,YAC7BW,KAAMH,EAAMP,aAAa,SAAWW,a,CAIhC,qBAAAnB,GACND,KAAKI,YAAYiB,SAASL,IACxB,MAAMM,EAAWN,EAAMP,aAAa,WAAaT,KAAKL,MACrDqB,EAAsBO,MAAMC,QAAUF,EAAW,GAAK,MAAM,G,CAIzD,cAAAG,CAAeC,EAAkBR,GACvC,GAAIA,GAAYQ,IAAa1B,KAAKL,MAAO,OACzCK,KAAKL,MAAQ+B,EACb1B,KAAKF,SAAS6B,KAAK,CAAEhC,MAAO+B,IAC5B1B,KAAKC,uB,CAGC2B,cAAiBC,IACvB,MAAMC,EAAO9B,KAAKc,aAClB,MAAMiB,EAAcD,EAAKE,QAAQC,IAAOA,EAAEf,WAC1C,MAAMgB,EAAeH,EAAYI,WAAWF,GAAMA,EAAEtC,QAAUK,KAAKL,QAEnE,IAAIyC,EAAWF,EAEf,OAAQL,EAAMQ,KACZ,IAAK,aACL,IAAK,YACHR,EAAMS,iBACNF,GAAYF,EAAe,GAAKH,EAAYQ,OAC5C,MACF,IAAK,YACL,IAAK,UACHV,EAAMS,iBACNF,GAAYF,EAAe,EAAIH,EAAYQ,QAAUR,EAAYQ,OACjE,MACF,IAAK,OACHV,EAAMS,iBACNF,EAAW,EACX,MACF,IAAK,MACHP,EAAMS,iBACNF,EAAWL,EAAYQ,OAAS,EAChC,MACF,QACE,OAGJ,MAAMC,EAAST,EAAYK,GAC3B,GAAII,EAAQ,CACVxC,KAAKL,MAAQ6C,EAAO7C,MACpBK,KAAKF,SAAS6B,KAAK,CAAEhC,MAAO6C,EAAO7C,QACnCK,KAAKC,wBAGL,MAAMwC,EAAazC,KAAKY,OAAO8B,YAAY7B,iBAAoC,gBAC/E,MAAM8B,EAAcb,EAAKK,WAAWF,GAAMA,EAAEtC,QAAU6C,EAAO7C,QAC7D8C,IAAaE,IAAcC,O,GAK/B,MAAAC,GACE,MAAMf,EAAO9B,KAAKc,aAElB,OACEgC,EAACC,EAAI,CAAAV,IAAA,2CACHW,MAAO,CACL,UAAW,KACX,CAAC,YAAYhD,KAAKJ,WAAY,KAC9B,CAAC,YAAYI,KAAKH,QAAS,OAG7BiD,EAAA,OAAAT,IAAA,2CAAKW,MAAM,gBAAgBC,KAAK,UAAUC,KAAK,UAAUC,UAAWnD,KAAK4B,eACtEE,EAAKf,KAAKkB,IACT,MAAMX,EAAWW,EAAEtC,QAAUK,KAAKL,MAClC,OACEmD,EAAA,UACEE,MAAO,CACLI,UAAa,KACb,oBAAqB9B,EACrB,sBAAuBW,EAAEf,UAE3B+B,KAAM3B,EAAW,iBAAmB,MACpC4B,KAAK,MACLG,KAAK,SAAQ,gBACE/B,EAAW,OAAS,QAAO,gBAC3BW,EAAEf,SAAW,OAASE,UACrCkC,SAAUhC,EAAW,GAAI,EACzBJ,SAAUe,EAAEf,SACZqC,QAAS,IAAMvD,KAAKyB,eAAeQ,EAAEtC,MAAOsC,EAAEf,WAE7Ce,EAAEd,MAAQ2B,EAAA,WAASU,KAAMvB,EAAEd,KAAM6B,MAAM,mBACvCf,EAAEhB,IACI,KAIf6B,EAAA,OAAAT,IAAA,2CAAKW,MAAM,eAAeC,KAAK,UAC7BH,EAAA,QAAAT,IAAA,8C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as e,a as r,h as a,H as s}from"./p-V8-ENixA.js";import{g as i}from"./p-lpqZSiIf.js";const o=()=>`:host{display:block;position:relative;font-family:var(--ts-font-family-base);--ts-date-picker-bg:var(--ts-color-neutral-50);--ts-date-picker-radius:var(--ts-radius-md);--ts-date-picker-focus-ring:var(--ts-focus-ring)}.date-picker__label{display:block;margin-block-end:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-medium);color:var(--ts-color-text-primary)}.date-picker__trigger{display:block;width:100%;border:1px solid var(--ts-color-border-default);border-radius:var(--ts-date-picker-radius);background-color:var(--ts-date-picker-bg);color:var(--ts-color-text-primary);font-family:var(--ts-font-family-base);cursor:pointer;outline:none;transition:border-color var(--ts-transition-fast), box-shadow var(--ts-transition-fast)}.date-picker__trigger:focus-visible{box-shadow:var(--ts-date-picker-focus-ring);border-color:var(--ts-color-interactive-primary)}:host([size="sm"]) .date-picker__trigger{padding:var(--ts-spacing-1) var(--ts-spacing-2);font-size:var(--ts-font-size-sm)}:host([size="md"]) .date-picker__trigger{padding:var(--ts-spacing-2) var(--ts-spacing-3);font-size:var(--ts-font-size-md)}:host([size="lg"]) .date-picker__trigger{padding:var(--ts-spacing-3) var(--ts-spacing-4);font-size:var(--ts-font-size-lg)}:host([error]) .date-picker__trigger{border-color:var(--ts-color-danger-500)}:host([error]) .date-picker__trigger:focus-visible{box-shadow:0 0 0 3px rgba(239, 68, 68, 0.25)}.date-picker__error{display:block;margin-block-start:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);color:var(--ts-color-danger-500)}:host([disabled]) .date-picker__trigger{opacity:0.5;cursor:not-allowed}.date-picker__calendar{position:absolute;inset-block-start:100%;inset-inline-start:0;z-index:var(--ts-z-dropdown, 100);margin-block-start:var(--ts-spacing-1);padding:var(--ts-spacing-3);background-color:var(--ts-color-bg-elevated);border:1px solid var(--ts-color-border-subtle);border-radius:var(--ts-radius-lg);box-shadow:var(--ts-shadow-lg);min-inline-size:280px;animation:ts-dp-fade-in 150ms ease-out}.date-picker__header{display:flex;align-items:center;justify-content:space-between;margin-block-end:var(--ts-spacing-2)}.date-picker__month-year{font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-primary)}.date-picker__nav-btn{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:none;border-radius:var(--ts-radius-md);background:transparent;color:var(--ts-color-text-secondary);font-size:var(--ts-font-size-lg);cursor:pointer;padding:0;line-height:1;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast)}.date-picker__nav-btn:hover{background-color:var(--ts-color-bg-hover);color:var(--ts-color-text-primary)}.date-picker__nav-btn:focus-visible{box-shadow:var(--ts-focus-ring);outline:none}.date-picker__weekdays{display:grid;grid-template-columns:repeat(7, 1fr);gap:0;margin-block-end:var(--ts-spacing-1)}.date-picker__weekday{display:flex;align-items:center;justify-content:center;font-size:var(--ts-font-size-xs);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-tertiary);padding:var(--ts-spacing-1) 0}.date-picker__days{display:grid;grid-template-columns:repeat(7, 1fr);gap:1px}.date-picker__day{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:1px auto;border:none;border-radius:var(--ts-radius-full);background:transparent;color:var(--ts-color-text-primary);font-family:var(--ts-font-family-base);font-size:var(--ts-font-size-sm);cursor:pointer;padding:0;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast)}.date-picker__day--empty{cursor:default}.date-picker__day:not(.date-picker__day--empty):not(.date-picker__day--disabled):hover{background-color:var(--ts-color-bg-hover)}.date-picker__day:not(.date-picker__day--empty):focus-visible{box-shadow:var(--ts-date-picker-focus-ring);outline:none}.date-picker__day--today{font-weight:var(--ts-font-weight-bold);border:1px solid var(--ts-color-interactive-primary)}.date-picker__day--selected{background-color:var(--ts-color-interactive-primary);color:var(--ts-color-text-on-primary);font-weight:var(--ts-font-weight-semi)}.date-picker__day--selected:hover{background-color:var(--ts-color-interactive-primary-hover)}.date-picker__day--disabled{opacity:0.35;cursor:not-allowed}.date-picker__day--focused{box-shadow:var(--ts-date-picker-focus-ring)}@keyframes ts-dp-fade-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}`;const n=["Su","Mo","Tu","We","Th","Fr","Sa"];const d=class{constructor(r){t(this,r);this.tsChange=e(this,"tsChange")}get hostEl(){return r(this)}pickerId=i("ts-date-picker");triggerEl;value;placeholder="Select date";disabled=false;min;max;label;error=false;errorMessage;size="md";name;tsChange;isOpen=false;viewMonth=(new Date).getMonth();viewYear=(new Date).getFullYear();focusedDay=null;handleValueChange(){if(this.value){const t=new Date(this.value+"T00:00:00");if(!isNaN(t.getTime())){this.viewMonth=t.getMonth();this.viewYear=t.getFullYear()}}}connectedCallback(){this.handleValueChange()}toggleCalendar=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;if(this.isOpen){this.handleValueChange()}};closeCalendar=()=>{this.isOpen=false;this.focusedDay=null};prevMonth=()=>{if(this.viewMonth===0){this.viewMonth=11;this.viewYear-=1}else{this.viewMonth-=1}};nextMonth=()=>{if(this.viewMonth===11){this.viewMonth=0;this.viewYear+=1}else{this.viewMonth+=1}};selectDay=t=>{const e=String(this.viewMonth+1).padStart(2,"0");const r=String(t).padStart(2,"0");const a=`${this.viewYear}-${e}-${r}`;this.value=a;this.tsChange.emit({value:a});this.closeCalendar();this.triggerEl?.focus()};isDayDisabled(t){const e=`${this.viewYear}-${String(this.viewMonth+1).padStart(2,"0")}-${String(t).padStart(2,"0")}`;if(this.min&&e<this.min)return true;if(this.max&&e>this.max)return true;return false}isToday(t){const e=new Date;return t===e.getDate()&&this.viewMonth===e.getMonth()&&this.viewYear===e.getFullYear()}isSelected(t){if(!this.value)return false;const e=new Date(this.value+"T00:00:00");return t===e.getDate()&&this.viewMonth===e.getMonth()&&this.viewYear===e.getFullYear()}getDaysInMonth(){return new Date(this.viewYear,this.viewMonth+1,0).getDate()}getFirstDayOfWeek(){return new Date(this.viewYear,this.viewMonth,1).getDay()}getMonthName(){return new Date(this.viewYear,this.viewMonth).toLocaleString("default",{month:"long"})}handleTriggerKeydown=t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();this.toggleCalendar()}else if(t.key==="Escape"&&this.isOpen){this.closeCalendar()}};handleCalendarKeydown=t=>{const e=this.getDaysInMonth();if(t.key==="Escape"){this.closeCalendar();this.triggerEl?.focus();return}if(this.focusedDay===null){this.focusedDay=1;return}let r=this.focusedDay;switch(t.key){case"ArrowRight":t.preventDefault();r=Math.min(this.focusedDay+1,e);break;case"ArrowLeft":t.preventDefault();r=Math.max(this.focusedDay-1,1);break;case"ArrowDown":t.preventDefault();r=Math.min(this.focusedDay+7,e);break;case"ArrowUp":t.preventDefault();r=Math.max(this.focusedDay-7,1);break;case"Enter":t.preventDefault();if(!this.isDayDisabled(this.focusedDay)){this.selectDay(this.focusedDay)}return;default:return}this.focusedDay=r};handleDocumentClick=t=>{const e=t.composedPath();if(!e.includes(this.hostEl)){this.closeCalendar()}};componentDidLoad(){document.addEventListener("click",this.handleDocumentClick)}disconnectedCallback(){document.removeEventListener("click",this.handleDocumentClick)}renderCalendar(){const t=this.getDaysInMonth();const e=this.getFirstDayOfWeek();const r=[];for(let t=0;t<e;t++){r.push(null)}for(let e=1;e<=t;e++){r.push(e)}return a("div",{class:"date-picker__calendar",part:"calendar",role:"dialog","aria-label":`${this.getMonthName()} ${this.viewYear}`,onKeyDown:this.handleCalendarKeydown},a("div",{class:"date-picker__header",part:"header"},a("button",{class:"date-picker__nav-btn",type:"button","aria-label":"Previous month",onClick:this.prevMonth},"‹"),a("span",{class:"date-picker__month-year"},this.getMonthName()," ",this.viewYear),a("button",{class:"date-picker__nav-btn",type:"button","aria-label":"Next month",onClick:this.nextMonth},"›")),a("div",{class:"date-picker__grid",role:"grid","aria-label":"Calendar"},a("div",{class:"date-picker__weekdays"},n.map((t=>a("span",{class:"date-picker__weekday",role:"columnheader",key:t},t)))),a("div",{class:"date-picker__days"},r.map(((t,e)=>t===null?a("span",{class:"date-picker__day date-picker__day--empty",key:`empty-${e}`}):a("button",{class:{"date-picker__day":true,"date-picker__day--today":this.isToday(t),"date-picker__day--selected":this.isSelected(t),"date-picker__day--disabled":this.isDayDisabled(t),"date-picker__day--focused":this.focusedDay===t},part:"day",type:"button",disabled:this.isDayDisabled(t),tabindex:this.focusedDay===t?0:-1,"aria-label":`${t} ${this.getMonthName()} ${this.viewYear}`,"aria-selected":this.isSelected(t)?"true":undefined,key:`day-${t}`,onClick:()=>this.selectDay(t)},t))))))}render(){return a(s,{key:"50137a4ae337d96c546d842875d4d22a710a6473",class:{"ts-date-picker":true,"ts-date-picker--open":this.isOpen,"ts-date-picker--error":this.error,[`ts-date-picker--${this.size}`]:true}},this.label&&a("label",{key:"475c187da383d04c078f0870ae67010183983574",class:"date-picker__label",part:"label",htmlFor:this.pickerId},this.label),a("input",{key:"74f792fb4db7930dbacbf310162d89a2224480ad",ref:t=>this.triggerEl=t,class:"date-picker__trigger",part:"trigger",type:"text",id:this.pickerId,name:this.name,value:this.value||"",placeholder:this.placeholder,disabled:this.disabled,readOnly:true,"aria-haspopup":"dialog","aria-expanded":this.isOpen?"true":"false","aria-invalid":this.error?"true":undefined,onClick:this.toggleCalendar,onKeyDown:this.handleTriggerKeydown}),this.isOpen&&this.renderCalendar(),this.error&&this.errorMessage&&a("span",{key:"8b807115f167df573ff6a48d6790da72e2e82197",class:"date-picker__error",part:"error",role:"alert"},this.errorMessage))}static get watchers(){return{value:[{handleValueChange:0}]}}};d.style=o();export{d as ts_date_picker};
2
+ //# sourceMappingURL=p-1d73f6c9.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["datePickerCss","WEEKDAYS","TsDatePicker","pickerId","generateId","triggerEl","value","placeholder","disabled","min","max","label","error","errorMessage","size","name","tsChange","isOpen","viewMonth","Date","getMonth","viewYear","getFullYear","focusedDay","handleValueChange","this","date","isNaN","getTime","connectedCallback","toggleCalendar","closeCalendar","prevMonth","nextMonth","selectDay","day","month","String","padStart","dayStr","newValue","emit","focus","isDayDisabled","dateStr","isToday","today","getDate","isSelected","getDaysInMonth","getFirstDayOfWeek","getDay","getMonthName","toLocaleString","handleTriggerKeydown","event","key","preventDefault","handleCalendarKeydown","daysInMonth","newDay","Math","handleDocumentClick","path","composedPath","includes","hostEl","componentDidLoad","document","addEventListener","disconnectedCallback","removeEventListener","renderCalendar","firstDay","days","i","push","d","h","class","part","role","onKeyDown","type","onClick","map","wd","index","tabindex","undefined","render","Host","htmlFor","ref","el","id","readOnly"],"sources":["src/components/date-picker/date-picker.css?tag=ts-date-picker&encapsulation=shadow","src/components/date-picker/date-picker.tsx"],"sourcesContent":["/* ==========================================================================\n ts-date-picker — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-date-picker-bg Input/calendar background\n --ts-date-picker-radius Border radius\n --ts-date-picker-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n position: relative;\n font-family: var(--ts-font-family-base);\n\n --ts-date-picker-bg: var(--ts-color-neutral-50);\n --ts-date-picker-radius: var(--ts-radius-md);\n --ts-date-picker-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.date-picker__label {\n display: block;\n margin-block-end: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-primary);\n}\n\n/* ---- Trigger Input ---- */\n.date-picker__trigger {\n display: block;\n width: 100%;\n border: 1px solid var(--ts-color-border-default);\n border-radius: var(--ts-date-picker-radius);\n background-color: var(--ts-date-picker-bg);\n color: var(--ts-color-text-primary);\n font-family: var(--ts-font-family-base);\n cursor: pointer;\n outline: none;\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n}\n\n.date-picker__trigger:focus-visible {\n box-shadow: var(--ts-date-picker-focus-ring);\n border-color: var(--ts-color-interactive-primary);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .date-picker__trigger {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .date-picker__trigger {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .date-picker__trigger {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Error state ---- */\n:host([error]) .date-picker__trigger {\n border-color: var(--ts-color-danger-500);\n}\n\n:host([error]) .date-picker__trigger:focus-visible {\n box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.25);\n}\n\n.date-picker__error {\n display: block;\n margin-block-start: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .date-picker__trigger {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Calendar Dropdown ---- */\n.date-picker__calendar {\n position: absolute;\n inset-block-start: 100%;\n inset-inline-start: 0;\n z-index: var(--ts-z-dropdown, 100);\n margin-block-start: var(--ts-spacing-1);\n padding: var(--ts-spacing-3);\n background-color: var(--ts-color-bg-elevated);\n border: 1px solid var(--ts-color-border-subtle);\n border-radius: var(--ts-radius-lg);\n box-shadow: var(--ts-shadow-lg);\n min-inline-size: 280px;\n animation: ts-dp-fade-in 150ms ease-out;\n}\n\n/* ---- Header ---- */\n.date-picker__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-block-end: var(--ts-spacing-2);\n}\n\n.date-picker__month-year {\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.date-picker__nav-btn {\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-secondary);\n font-size: var(--ts-font-size-lg);\n cursor: pointer;\n padding: 0;\n line-height: 1;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n}\n\n.date-picker__nav-btn:hover {\n background-color: var(--ts-color-bg-hover);\n color: var(--ts-color-text-primary);\n}\n\n.date-picker__nav-btn:focus-visible {\n box-shadow: var(--ts-focus-ring);\n outline: none;\n}\n\n/* ---- Grid ---- */\n.date-picker__weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 0;\n margin-block-end: var(--ts-spacing-1);\n}\n\n.date-picker__weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--ts-font-size-xs);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-tertiary);\n padding: var(--ts-spacing-1) 0;\n}\n\n.date-picker__days {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 1px;\n}\n\n/* ---- Day cells ---- */\n.date-picker__day {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n margin: 1px auto;\n border: none;\n border-radius: var(--ts-radius-full);\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 padding: 0;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n}\n\n.date-picker__day--empty {\n cursor: default;\n}\n\n.date-picker__day:not(.date-picker__day--empty):not(.date-picker__day--disabled):hover {\n background-color: var(--ts-color-bg-hover);\n}\n\n.date-picker__day:not(.date-picker__day--empty):focus-visible {\n box-shadow: var(--ts-date-picker-focus-ring);\n outline: none;\n}\n\n.date-picker__day--today {\n font-weight: var(--ts-font-weight-bold);\n border: 1px solid var(--ts-color-interactive-primary);\n}\n\n.date-picker__day--selected {\n background-color: var(--ts-color-interactive-primary);\n color: var(--ts-color-text-on-primary);\n font-weight: var(--ts-font-weight-semi);\n}\n\n.date-picker__day--selected:hover {\n background-color: var(--ts-color-interactive-primary-hover);\n}\n\n.date-picker__day--disabled {\n opacity: 0.35;\n cursor: not-allowed;\n}\n\n.date-picker__day--focused {\n box-shadow: var(--ts-date-picker-focus-ring);\n}\n\n/* ---- Animation ---- */\n@keyframes ts-dp-fade-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n","import { Component, Prop, State, Event, h, Host, Element, Watch } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId } from '../../utils/aria';\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\n/**\n * @part trigger - The input trigger element.\n * @part calendar - The calendar dropdown container.\n * @part header - The month/year navigation header.\n * @part grid - The day grid.\n * @part day - Individual day cell.\n * @part label - The label element.\n * @part error - The error message.\n */\n@Component({\n tag: 'ts-date-picker',\n styleUrl: 'date-picker.css',\n shadow: true,\n})\nexport class TsDatePicker {\n @Element() hostEl!: HTMLElement;\n\n private pickerId = generateId('ts-date-picker');\n private triggerEl?: HTMLInputElement;\n\n /** The selected date value in ISO format (YYYY-MM-DD). */\n @Prop({ mutable: true, reflect: true }) value?: string;\n\n /** Placeholder text for the input. */\n @Prop() placeholder = 'Select date';\n\n /** Whether the date picker is disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Minimum selectable date in ISO format. */\n @Prop() min?: string;\n\n /** Maximum selectable date in ISO format. */\n @Prop() max?: string;\n\n /** Label text for the input. */\n @Prop() label?: string;\n\n /** Whether the input is in an error state. */\n @Prop({ reflect: true }) error = false;\n\n /** Error message to display. */\n @Prop() errorMessage?: string;\n\n /** The input size. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Form field name. */\n @Prop() name?: string;\n\n /** Emitted when a date is selected. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: string }>;\n\n /** Whether the calendar dropdown is open. */\n @State() isOpen = false;\n\n /** The month currently being viewed (0-11). */\n @State() viewMonth = new Date().getMonth();\n\n /** The year currently being viewed. */\n @State() viewYear = new Date().getFullYear();\n\n /** Currently focused day in the grid for keyboard navigation. */\n @State() focusedDay: number | null = null;\n\n @Watch('value')\n handleValueChange(): void {\n if (this.value) {\n const date = new Date(this.value + 'T00:00:00');\n if (!isNaN(date.getTime())) {\n this.viewMonth = date.getMonth();\n this.viewYear = date.getFullYear();\n }\n }\n }\n\n connectedCallback(): void {\n this.handleValueChange();\n }\n\n private toggleCalendar = (): void => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.handleValueChange();\n }\n };\n\n private closeCalendar = (): void => {\n this.isOpen = false;\n this.focusedDay = null;\n };\n\n private prevMonth = (): void => {\n if (this.viewMonth === 0) {\n this.viewMonth = 11;\n this.viewYear -= 1;\n } else {\n this.viewMonth -= 1;\n }\n };\n\n private nextMonth = (): void => {\n if (this.viewMonth === 11) {\n this.viewMonth = 0;\n this.viewYear += 1;\n } else {\n this.viewMonth += 1;\n }\n };\n\n private selectDay = (day: number): void => {\n const month = String(this.viewMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const newValue = `${this.viewYear}-${month}-${dayStr}`;\n this.value = newValue;\n this.tsChange.emit({ value: newValue });\n this.closeCalendar();\n this.triggerEl?.focus();\n };\n\n private isDayDisabled(day: number): boolean {\n const dateStr = `${this.viewYear}-${String(this.viewMonth + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n if (this.min && dateStr < this.min) return true;\n if (this.max && dateStr > this.max) return true;\n return false;\n }\n\n private isToday(day: number): boolean {\n const today = new Date();\n return (\n day === today.getDate() &&\n this.viewMonth === today.getMonth() &&\n this.viewYear === today.getFullYear()\n );\n }\n\n private isSelected(day: number): boolean {\n if (!this.value) return false;\n const date = new Date(this.value + 'T00:00:00');\n return (\n day === date.getDate() &&\n this.viewMonth === date.getMonth() &&\n this.viewYear === date.getFullYear()\n );\n }\n\n private getDaysInMonth(): number {\n return new Date(this.viewYear, this.viewMonth + 1, 0).getDate();\n }\n\n private getFirstDayOfWeek(): number {\n return new Date(this.viewYear, this.viewMonth, 1).getDay();\n }\n\n private getMonthName(): string {\n return new Date(this.viewYear, this.viewMonth).toLocaleString('default', { month: 'long' });\n }\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleCalendar();\n } else if (event.key === 'Escape' && this.isOpen) {\n this.closeCalendar();\n }\n };\n\n private handleCalendarKeydown = (event: KeyboardEvent): void => {\n const daysInMonth = this.getDaysInMonth();\n\n if (event.key === 'Escape') {\n this.closeCalendar();\n this.triggerEl?.focus();\n return;\n }\n\n if (this.focusedDay === null) {\n this.focusedDay = 1;\n return;\n }\n\n let newDay = this.focusedDay;\n\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n newDay = Math.min(this.focusedDay + 1, daysInMonth);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n newDay = Math.max(this.focusedDay - 1, 1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n newDay = Math.min(this.focusedDay + 7, daysInMonth);\n break;\n case 'ArrowUp':\n event.preventDefault();\n newDay = Math.max(this.focusedDay - 7, 1);\n break;\n case 'Enter':\n event.preventDefault();\n if (!this.isDayDisabled(this.focusedDay)) {\n this.selectDay(this.focusedDay);\n }\n return;\n default:\n return;\n }\n\n this.focusedDay = newDay;\n };\n\n private handleDocumentClick = (event: MouseEvent): void => {\n const path = event.composedPath();\n if (!path.includes(this.hostEl)) {\n this.closeCalendar();\n }\n };\n\n componentDidLoad(): void {\n document.addEventListener('click', this.handleDocumentClick);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderCalendar() {\n const daysInMonth = this.getDaysInMonth();\n const firstDay = this.getFirstDayOfWeek();\n const days: (number | null)[] = [];\n\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n for (let d = 1; d <= daysInMonth; d++) {\n days.push(d);\n }\n\n return (\n <div\n class=\"date-picker__calendar\"\n part=\"calendar\"\n role=\"dialog\"\n aria-label={`${this.getMonthName()} ${this.viewYear}`}\n onKeyDown={this.handleCalendarKeydown}\n >\n <div class=\"date-picker__header\" part=\"header\">\n <button\n class=\"date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={this.prevMonth}\n >\n &#x2039;\n </button>\n <span class=\"date-picker__month-year\">\n {this.getMonthName()} {this.viewYear}\n </span>\n <button\n class=\"date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Next month\"\n onClick={this.nextMonth}\n >\n &#x203A;\n </button>\n </div>\n\n <div class=\"date-picker__grid\" role=\"grid\" aria-label=\"Calendar\">\n <div class=\"date-picker__weekdays\">\n {WEEKDAYS.map((wd) => (\n <span class=\"date-picker__weekday\" role=\"columnheader\" key={wd}>\n {wd}\n </span>\n ))}\n </div>\n <div class=\"date-picker__days\">\n {days.map((day, index) =>\n day === null ? (\n <span class=\"date-picker__day date-picker__day--empty\" key={`empty-${index}`} />\n ) : (\n <button\n class={{\n 'date-picker__day': true,\n 'date-picker__day--today': this.isToday(day),\n 'date-picker__day--selected': this.isSelected(day),\n 'date-picker__day--disabled': this.isDayDisabled(day),\n 'date-picker__day--focused': this.focusedDay === day,\n }}\n part=\"day\"\n type=\"button\"\n disabled={this.isDayDisabled(day)}\n tabindex={this.focusedDay === day ? 0 : -1}\n aria-label={`${day} ${this.getMonthName()} ${this.viewYear}`}\n aria-selected={this.isSelected(day) ? 'true' : undefined}\n key={`day-${day}`}\n onClick={() => this.selectDay(day)}\n >\n {day}\n </button>\n ),\n )}\n </div>\n </div>\n </div>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-date-picker': true,\n 'ts-date-picker--open': this.isOpen,\n 'ts-date-picker--error': this.error,\n [`ts-date-picker--${this.size}`]: true,\n }}\n >\n {this.label && (\n <label class=\"date-picker__label\" part=\"label\" htmlFor={this.pickerId}>\n {this.label}\n </label>\n )}\n\n <input\n ref={(el) => (this.triggerEl = el)}\n class=\"date-picker__trigger\"\n part=\"trigger\"\n type=\"text\"\n id={this.pickerId}\n name={this.name}\n value={this.value || ''}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly\n aria-haspopup=\"dialog\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-invalid={this.error ? 'true' : undefined}\n onClick={this.toggleCalendar}\n onKeyDown={this.handleTriggerKeydown}\n />\n\n {this.isOpen && this.renderCalendar()}\n\n {this.error && this.errorMessage && (\n <span class=\"date-picker__error\" part=\"error\" role=\"alert\">\n {this.errorMessage}\n </span>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r,a as o,h as s,H as a}from"./p-V8-ENixA.js";const t=()=>`:host{display:block;--ts-accordion-border-color:var(--ts-color-border-default);--ts-accordion-header-bg:transparent;--ts-accordion-radius:var(--ts-radius-lg)}::slotted(ts-accordion-item){border-block-end:1px solid var(--ts-accordion-border-color)}::slotted(ts-accordion-item:first-child){border-start-start-radius:var(--ts-accordion-radius);border-start-end-radius:var(--ts-accordion-radius)}::slotted(ts-accordion-item:last-child){border-end-start-radius:var(--ts-accordion-radius);border-end-end-radius:var(--ts-accordion-radius);border-block-end:none}`;const d=class{constructor(o){r(this,o)}get hostEl(){return o(this)}multiple=false;handleToggle(r){if(!this.multiple&&r.detail.open){const o=r.target;const s=this.hostEl.querySelectorAll("ts-accordion-item");s.forEach((r=>{if(r!==o){r.setAttribute("open","false");r.removeAttribute("open")}}))}}render(){return s(a,{key:"737635093f0c31076c08a6fb2a88804604b1b77e",class:"ts-accordion"},s("slot",{key:"9daa06ca9dd44478594e686792da9529637f69a3"}))}};d.style=t();export{d as ts_accordion};
2
+ //# sourceMappingURL=p-24305379.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["accordionCss","TsAccordion","multiple","handleToggle","event","this","detail","open","target","items","hostEl","querySelectorAll","forEach","item","setAttribute","removeAttribute","render","h","Host","key","class"],"sources":["src/components/accordion/accordion.css?tag=ts-accordion&encapsulation=shadow","src/components/accordion/accordion.tsx"],"sourcesContent":["/* ==========================================================================\n ts-accordion — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-accordion-border-color Border color between items\n --ts-accordion-header-bg Header background color\n --ts-accordion-radius Border radius\n ========================================================================== */\n\n:host {\n display: block;\n\n --ts-accordion-border-color: var(--ts-color-border-default);\n --ts-accordion-header-bg: transparent;\n --ts-accordion-radius: var(--ts-radius-lg);\n}\n\n::slotted(ts-accordion-item) {\n border-block-end: 1px solid var(--ts-accordion-border-color);\n}\n\n::slotted(ts-accordion-item:first-child) {\n border-start-start-radius: var(--ts-accordion-radius);\n border-start-end-radius: var(--ts-accordion-radius);\n}\n\n::slotted(ts-accordion-item:last-child) {\n border-end-start-radius: var(--ts-accordion-radius);\n border-end-end-radius: var(--ts-accordion-radius);\n border-block-end: none;\n}\n","import { Component, Prop, h, Host, Element, Listen } from '@stencil/core';\n\n/**\n * @slot - Default slot for ts-accordion-item children.\n */\n@Component({\n tag: 'ts-accordion',\n styleUrl: 'accordion.css',\n shadow: true,\n})\nexport class TsAccordion {\n @Element() hostEl!: HTMLElement;\n\n /** Allow multiple items to be open simultaneously. */\n @Prop() multiple = false;\n\n @Listen('tsToggle')\n handleToggle(event: CustomEvent<{ open: boolean }>): void {\n if (!this.multiple && event.detail.open) {\n const target = event.target as HTMLElement;\n const items = this.hostEl.querySelectorAll('ts-accordion-item');\n items.forEach((item) => {\n if (item !== target) {\n item.setAttribute('open', 'false');\n item.removeAttribute('open');\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host class=\"ts-accordion\">\n <slot />\n </Host>\n );\n }\n}\n"],"mappings":"oDAAA,MAAMA,EAAe,IAAM,6iB,MCUdC,EAAW,M,qDAIdC,SAAW,MAGnB,YAAAC,CAAaC,GACX,IAAKC,KAAKH,UAAYE,EAAME,OAAOC,KAAM,CACvC,MAAMC,EAASJ,EAAMI,OACrB,MAAMC,EAAQJ,KAAKK,OAAOC,iBAAiB,qBAC3CF,EAAMG,SAASC,IACb,GAAIA,IAASL,EAAQ,CACnBK,EAAKC,aAAa,OAAQ,SAC1BD,EAAKE,gBAAgB,O,MAO7B,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,MAAM,gBACVH,EAAA,QAAAE,IAAA,6C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as t,a,h as r,H as s}from"./p-V8-ENixA.js";import{g as i}from"./p-lpqZSiIf.js";const o=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-textarea-bg:var(--ts-color-bg-surface);--ts-textarea-border-color:var(--ts-color-border-default);--ts-textarea-radius:var(--ts-radius-md);--ts-textarea-focus-ring:var(--ts-focus-ring)}.textarea__label{display:block;margin-block-end:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-medium);color:var(--ts-color-text-secondary);line-height:var(--ts-line-height-normal)}.textarea__required{color:var(--ts-color-danger-500)}.textarea__wrapper{display:flex;border:2px solid var(--ts-textarea-border-color);border-radius:var(--ts-textarea-radius);background-color:var(--ts-textarea-bg);transition:border-color var(--ts-transition-fast), box-shadow var(--ts-transition-fast);overflow:hidden}.textarea__wrapper--focused{border-color:var(--ts-color-primary-500);box-shadow:var(--ts-textarea-focus-ring)}.textarea__wrapper--error{border-color:var(--ts-color-danger-500)}.textarea__wrapper--error.textarea__wrapper--focused{box-shadow:0 0 0 3px var(--ts-color-focus-ring-danger)}.textarea__wrapper--disabled{background-color:var(--ts-color-bg-disabled);opacity:0.6;cursor:not-allowed}.textarea__native{flex:1;border:none;outline:none;background:transparent;font-family:inherit;color:var(--ts-color-text-primary);width:100%;min-width:0;line-height:var(--ts-line-height-normal)}.textarea__native::placeholder{color:var(--ts-color-text-tertiary)}.textarea__native:disabled{cursor:not-allowed}:host([resize="none"]) .textarea__native{resize:none}:host([resize="vertical"]) .textarea__native{resize:vertical}:host([resize="horizontal"]) .textarea__native{resize:horizontal}:host([resize="both"]) .textarea__native{resize:both}:host([size="sm"]) .textarea__wrapper{border-radius:var(--ts-radius-sm)}:host([size="sm"]) .textarea__native{padding:var(--ts-spacing-1) var(--ts-spacing-2);font-size:var(--ts-font-size-sm)}:host([size="md"]) .textarea__native{padding:var(--ts-spacing-2) var(--ts-spacing-3);font-size:var(--ts-font-size-md)}:host([size="lg"]) .textarea__native{padding:var(--ts-spacing-3) var(--ts-spacing-4);font-size:var(--ts-font-size-lg)}:host([size="xl"]) .textarea__wrapper{border-radius:var(--ts-radius-lg)}:host([size="xl"]) .textarea__native{padding:var(--ts-spacing-4) var(--ts-spacing-5);font-size:var(--ts-font-size-xl)}.textarea__help,.textarea__error{margin-block-start:var(--ts-spacing-1);font-size:var(--ts-font-size-xs);line-height:var(--ts-line-height-normal)}.textarea__help{color:var(--ts-color-text-tertiary)}.textarea__error{color:var(--ts-color-danger-600);font-weight:var(--ts-font-weight-medium)}`;const n=class{constructor(a){e(this,a);this.tsInput=t(this,"tsInput");this.tsChange=t(this,"tsChange");this.tsFocus=t(this,"tsFocus");this.tsBlur=t(this,"tsBlur")}get hostEl(){return a(this)}textareaEl;inputId=i("ts-textarea");value="";placeholder;disabled=false;readonly=false;size="md";label;helpText;error=false;errorMessage;required=false;name;rows=3;resize="vertical";maxlength;hasFocus=false;tsInput;tsChange;tsFocus;tsBlur;handleValueChange(e,t){if(e!==t&&this.textareaEl){this.textareaEl.value=e}}async setFocus(){this.textareaEl?.focus()}async selectText(){this.textareaEl?.select()}handleInput=e=>{const t=e.target;const a=this.value;this.value=t.value;this.tsInput.emit({value:this.value,previousValue:a})};handleChange=()=>{this.tsChange.emit({value:this.value,previousValue:this.value})};handleFocus=()=>{this.hasFocus=true;this.tsFocus.emit()};handleBlur=()=>{this.hasFocus=false;this.tsBlur.emit()};render(){const e=this.error&&!!this.errorMessage;const t=`${this.inputId}-label`;const a=`${this.inputId}-help`;const i=`${this.inputId}-error`;return r(s,{key:"7bdc41a5aa35af6300e17a214ef1a2606cc57acc",class:{"ts-textarea":true,[`ts-textarea--${this.size}`]:true,"ts-textarea--focused":this.hasFocus,"ts-textarea--disabled":this.disabled,"ts-textarea--error":this.error}},this.label&&r("label",{key:"b3e4691906f93a375c9064f28810c1f21b4ef465",class:"textarea__label",part:"label",id:t,htmlFor:this.inputId},this.label,this.required&&r("span",{key:"f69fe7f1f6dce0815a987517f426bc9064a82bff",class:"textarea__required","aria-hidden":"true"}," *")),r("div",{key:"3af1749e1566071c6bb786a8f69d14be554ee393",class:{textarea__wrapper:true,"textarea__wrapper--focused":this.hasFocus,"textarea__wrapper--error":this.error,"textarea__wrapper--disabled":this.disabled},part:"base"},r("textarea",{key:"91722d413599317ffa74aca132d62e7f4e301340",ref:e=>this.textareaEl=e,id:this.inputId,class:"textarea__native",part:"textarea",value:this.value,placeholder:this.placeholder,disabled:this.disabled,readOnly:this.readonly,required:this.required,maxlength:this.maxlength,name:this.name,rows:this.rows,"aria-labelledby":this.label?t:undefined,"aria-describedby":e?i:this.helpText?a:undefined,"aria-invalid":this.error?"true":undefined,"aria-required":this.required?"true":undefined,onInput:this.handleInput,onChange:this.handleChange,onFocus:this.handleFocus,onBlur:this.handleBlur})),e&&r("div",{key:"6b269961eec546d027f64bc2d44ef1790f72a42c",class:"textarea__error",part:"error-text",id:i,role:"alert"},this.errorMessage),!e&&this.helpText&&r("div",{key:"ec535a5669fa2dec0b0a4b2aa85233b6f84c136a",class:"textarea__help",part:"help-text",id:a},this.helpText))}static get watchers(){return{value:[{handleValueChange:0}]}}};n.style=o();export{n as ts_textarea};
2
+ //# sourceMappingURL=p-25f77cc9.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["textareaCss","TsTextarea","textareaEl","inputId","generateId","value","placeholder","disabled","readonly","size","label","helpText","error","errorMessage","required","name","rows","resize","maxlength","hasFocus","tsInput","tsChange","tsFocus","tsBlur","handleValueChange","newValue","oldValue","this","setFocus","focus","selectText","select","handleInput","event","target","previousValue","emit","handleChange","handleFocus","handleBlur","render","hasError","labelId","helpId","errorId","h","Host","key","class","part","id","htmlFor","textarea__wrapper","ref","el","readOnly","undefined","onInput","onChange","onFocus","onBlur","role"],"sources":["src/components/textarea/textarea.css?tag=ts-textarea&encapsulation=shadow","src/components/textarea/textarea.tsx"],"sourcesContent":["/* ==========================================================================\n ts-textarea — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-textarea-bg Textarea background\n --ts-textarea-border-color Default border color\n --ts-textarea-radius Border radius\n --ts-textarea-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-textarea-bg: var(--ts-color-bg-surface);\n --ts-textarea-border-color: var(--ts-color-border-default);\n --ts-textarea-radius: var(--ts-radius-md);\n --ts-textarea-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.textarea__label {\n display: block;\n margin-block-end: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n.textarea__required {\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Wrapper ---- */\n.textarea__wrapper {\n display: flex;\n border: 2px solid var(--ts-textarea-border-color);\n border-radius: var(--ts-textarea-radius);\n background-color: var(--ts-textarea-bg);\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n overflow: hidden;\n}\n\n.textarea__wrapper--focused {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-textarea-focus-ring);\n}\n\n.textarea__wrapper--error {\n border-color: var(--ts-color-danger-500);\n}\n\n.textarea__wrapper--error.textarea__wrapper--focused {\n box-shadow: 0 0 0 3px var(--ts-color-focus-ring-danger);\n}\n\n.textarea__wrapper--disabled {\n background-color: var(--ts-color-bg-disabled);\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* ---- Native Textarea ---- */\n.textarea__native {\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n font-family: inherit;\n color: var(--ts-color-text-primary);\n width: 100%;\n min-width: 0;\n line-height: var(--ts-line-height-normal);\n}\n\n.textarea__native::placeholder {\n color: var(--ts-color-text-tertiary);\n}\n\n.textarea__native:disabled {\n cursor: not-allowed;\n}\n\n/* ---- Resize ---- */\n:host([resize=\"none\"]) .textarea__native {\n resize: none;\n}\n\n:host([resize=\"vertical\"]) .textarea__native {\n resize: vertical;\n}\n\n:host([resize=\"horizontal\"]) .textarea__native {\n resize: horizontal;\n}\n\n:host([resize=\"both\"]) .textarea__native {\n resize: both;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .textarea__wrapper {\n border-radius: var(--ts-radius-sm);\n}\n:host([size=\"sm\"]) .textarea__native {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .textarea__native {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .textarea__native {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n:host([size=\"xl\"]) .textarea__wrapper {\n border-radius: var(--ts-radius-lg);\n}\n:host([size=\"xl\"]) .textarea__native {\n padding: var(--ts-spacing-4) var(--ts-spacing-5);\n font-size: var(--ts-font-size-xl);\n}\n\n/* ---- Help & Error Text ---- */\n.textarea__help,\n.textarea__error {\n margin-block-start: var(--ts-spacing-1);\n font-size: var(--ts-font-size-xs);\n line-height: var(--ts-line-height-normal);\n}\n\n.textarea__help {\n color: var(--ts-color-text-tertiary);\n}\n\n.textarea__error {\n color: var(--ts-color-danger-600);\n font-weight: var(--ts-font-weight-medium);\n}\n","import { Component, Prop, State, Event, Watch, h, Host, Element, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize, TsChangeEventDetail } from '../../types';\nimport { generateId } from '../../utils/aria';\n\n/**\n * @part base - The outer wrapper.\n * @part label - The label element.\n * @part textarea - The native textarea element.\n * @part help-text - The help text wrapper.\n * @part error-text - The error message wrapper.\n */\n@Component({\n tag: 'ts-textarea',\n styleUrl: 'textarea.css',\n shadow: true,\n})\nexport class TsTextarea {\n @Element() hostEl!: HTMLElement;\n\n private textareaEl?: HTMLTextAreaElement;\n private inputId = generateId('ts-textarea');\n\n /** The textarea's value. */\n @Prop({ mutable: true, reflect: true }) value = '';\n\n /** Placeholder text. */\n @Prop() placeholder?: string;\n\n /** Renders the textarea as disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Renders the textarea as readonly. */\n @Prop({ reflect: true }) readonly = false;\n\n /** The textarea size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Label text displayed above the textarea. */\n @Prop() label?: string;\n\n /** Help text displayed below the textarea. */\n @Prop() helpText?: string;\n\n /** Renders the textarea in an error state. */\n @Prop({ reflect: true }) error = false;\n\n /** Error message displayed below the textarea. */\n @Prop() errorMessage?: string;\n\n /** Makes the textarea required. */\n @Prop({ reflect: true }) required = false;\n\n /** Name attribute for form submission. */\n @Prop() name?: string;\n\n /** Number of visible text rows. */\n @Prop() rows = 3;\n\n /** Resize behavior. */\n @Prop({ reflect: true }) resize: 'none' | 'vertical' | 'horizontal' | 'both' = 'vertical';\n\n /** Maximum character length. */\n @Prop() maxlength?: number;\n\n /** Whether the textarea is currently focused. */\n @State() hasFocus = false;\n\n /** Emitted on every keystroke. */\n @Event({ eventName: 'tsInput' }) tsInput!: EventEmitter<TsChangeEventDetail<string>>;\n\n /** Emitted when the value changes (on blur / commit). */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<TsChangeEventDetail<string>>;\n\n /** Emitted when the textarea gains focus. */\n @Event({ eventName: 'tsFocus' }) tsFocus!: EventEmitter<void>;\n\n /** Emitted when the textarea loses focus. */\n @Event({ eventName: 'tsBlur' }) tsBlur!: EventEmitter<void>;\n\n @Watch('value')\n handleValueChange(newValue: string, oldValue: string): void {\n if (newValue !== oldValue && this.textareaEl) {\n this.textareaEl.value = newValue;\n }\n }\n\n /** Programmatically focus the textarea. */\n @Method()\n async setFocus(): Promise<void> {\n this.textareaEl?.focus();\n }\n\n /** Programmatically select the textarea text. */\n @Method()\n async selectText(): Promise<void> {\n this.textareaEl?.select();\n }\n\n private handleInput = (event: Event): void => {\n const target = event.target as HTMLTextAreaElement;\n const previousValue = this.value;\n this.value = target.value;\n this.tsInput.emit({ value: this.value, previousValue });\n };\n\n private handleChange = (): void => {\n this.tsChange.emit({ value: this.value, previousValue: this.value });\n };\n\n private handleFocus = (): void => {\n this.hasFocus = true;\n this.tsFocus.emit();\n };\n\n private handleBlur = (): void => {\n this.hasFocus = false;\n this.tsBlur.emit();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasError = this.error && !!this.errorMessage;\n const labelId = `${this.inputId}-label`;\n const helpId = `${this.inputId}-help`;\n const errorId = `${this.inputId}-error`;\n\n return (\n <Host\n class={{\n 'ts-textarea': true,\n [`ts-textarea--${this.size}`]: true,\n 'ts-textarea--focused': this.hasFocus,\n 'ts-textarea--disabled': this.disabled,\n 'ts-textarea--error': this.error,\n }}\n >\n {this.label && (\n <label class=\"textarea__label\" part=\"label\" id={labelId} htmlFor={this.inputId}>\n {this.label}\n {this.required && <span class=\"textarea__required\" aria-hidden=\"true\"> *</span>}\n </label>\n )}\n\n <div\n class={{\n 'textarea__wrapper': true,\n 'textarea__wrapper--focused': this.hasFocus,\n 'textarea__wrapper--error': this.error,\n 'textarea__wrapper--disabled': this.disabled,\n }}\n part=\"base\"\n >\n <textarea\n ref={(el) => (this.textareaEl = el)}\n id={this.inputId}\n class=\"textarea__native\"\n part=\"textarea\"\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly={this.readonly}\n required={this.required}\n maxlength={this.maxlength}\n name={this.name}\n rows={this.rows}\n aria-labelledby={this.label ? labelId : undefined}\n aria-describedby={hasError ? errorId : this.helpText ? helpId : undefined}\n aria-invalid={this.error ? 'true' : undefined}\n aria-required={this.required ? 'true' : undefined}\n onInput={this.handleInput}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n\n {hasError && (\n <div class=\"textarea__error\" part=\"error-text\" id={errorId} role=\"alert\">\n {this.errorMessage}\n </div>\n )}\n\n {!hasError && this.helpText && (\n <div class=\"textarea__help\" part=\"help-text\" id={helpId}>\n {this.helpText}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"+FAAA,MAAMA,EAAc,IAAM,+jF,MCiBbC,EAAU,M,iLAGbC,WACAC,QAAUC,EAAW,eAGWC,MAAQ,GAGxCC,YAGiBC,SAAW,MAGXC,SAAW,MAGXC,KAAe,KAGhCC,MAGAC,SAGiBC,MAAQ,MAGzBC,aAGiBC,SAAW,MAG5BC,KAGAC,KAAO,EAGUC,OAAsD,WAGvEC,UAGCC,SAAW,MAGaC,QAGCC,SAGDC,QAGDC,OAGhC,iBAAAC,CAAkBC,EAAkBC,GAClC,GAAID,IAAaC,GAAYC,KAAKzB,WAAY,CAC5CyB,KAAKzB,WAAWG,MAAQoB,C,EAM5B,cAAMG,GACJD,KAAKzB,YAAY2B,O,CAKnB,gBAAMC,GACJH,KAAKzB,YAAY6B,Q,CAGXC,YAAeC,IACrB,MAAMC,EAASD,EAAMC,OACrB,MAAMC,EAAgBR,KAAKtB,MAC3BsB,KAAKtB,MAAQ6B,EAAO7B,MACpBsB,KAAKP,QAAQgB,KAAK,CAAE/B,MAAOsB,KAAKtB,MAAO8B,iBAAgB,EAGjDE,aAAe,KACrBV,KAAKN,SAASe,KAAK,CAAE/B,MAAOsB,KAAKtB,MAAO8B,cAAeR,KAAKtB,OAAQ,EAG9DiC,YAAc,KACpBX,KAAKR,SAAW,KAChBQ,KAAKL,QAAQc,MAAM,EAGbG,WAAa,KACnBZ,KAAKR,SAAW,MAChBQ,KAAKJ,OAAOa,MAAM,EAIpB,MAAAI,GACE,MAAMC,EAAWd,KAAKf,SAAWe,KAAKd,aACtC,MAAM6B,EAAU,GAAGf,KAAKxB,gBACxB,MAAMwC,EAAS,GAAGhB,KAAKxB,eACvB,MAAMyC,EAAU,GAAGjB,KAAKxB,gBAExB,OACE0C,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,cAAe,KACf,CAAC,gBAAgBrB,KAAKlB,QAAS,KAC/B,uBAAwBkB,KAAKR,SAC7B,wBAAyBQ,KAAKpB,SAC9B,qBAAsBoB,KAAKf,QAG5Be,KAAKjB,OACJmC,EAAA,SAAAE,IAAA,2CAAOC,MAAM,kBAAkBC,KAAK,QAAQC,GAAIR,EAASS,QAASxB,KAAKxB,SACpEwB,KAAKjB,MACLiB,KAAKb,UAAY+B,EAAA,QAAAE,IAAA,2CAAMC,MAAM,qBAAoB,cAAa,QAAM,OAIzEH,EAAA,OAAAE,IAAA,2CACEC,MAAO,CACLI,kBAAqB,KACrB,6BAA8BzB,KAAKR,SACnC,2BAA4BQ,KAAKf,MACjC,8BAA+Be,KAAKpB,UAEtC0C,KAAK,QAELJ,EAAA,YAAAE,IAAA,2CACEM,IAAMC,GAAQ3B,KAAKzB,WAAaoD,EAChCJ,GAAIvB,KAAKxB,QACT6C,MAAM,mBACNC,KAAK,WACL5C,MAAOsB,KAAKtB,MACZC,YAAaqB,KAAKrB,YAClBC,SAAUoB,KAAKpB,SACfgD,SAAU5B,KAAKnB,SACfM,SAAUa,KAAKb,SACfI,UAAWS,KAAKT,UAChBH,KAAMY,KAAKZ,KACXC,KAAMW,KAAKX,KAAI,kBACEW,KAAKjB,MAAQgC,EAAUc,UAAS,mBAC/Bf,EAAWG,EAAUjB,KAAKhB,SAAWgC,EAASa,UAAS,eAC3D7B,KAAKf,MAAQ,OAAS4C,UAAS,gBAC9B7B,KAAKb,SAAW,OAAS0C,UACxCC,QAAS9B,KAAKK,YACd0B,SAAU/B,KAAKU,aACfsB,QAAShC,KAAKW,YACdsB,OAAQjC,KAAKY,cAIhBE,GACCI,EAAA,OAAAE,IAAA,2CAAKC,MAAM,kBAAkBC,KAAK,aAAaC,GAAIN,EAASiB,KAAK,SAC9DlC,KAAKd,eAIR4B,GAAYd,KAAKhB,UACjBkC,EAAA,OAAAE,IAAA,2CAAKC,MAAM,iBAAiBC,KAAK,YAAYC,GAAIP,GAC9ChB,KAAKhB,U","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as s,a as i,h as e,H as a}from"./p-V8-ENixA.js";const o=()=>`:host{display:inline-flex;flex:1;outline:none}.switch-option__base{display:inline-flex;align-items:center;justify-content:center;gap:var(--ts-spacing-1);inline-size:100%;padding-inline:var(--ts-spacing-3);padding-block:var(--ts-spacing-1);border-radius:calc(var(--ts-switch-group-radius, var(--ts-shape-interactive)) - 2px);cursor:pointer;user-select:none;white-space:nowrap;font-weight:var(--ts-font-weight-medium);color:var(--ts-color-text-secondary);transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast), box-shadow var(--ts-transition-fast)}.switch-option__base:hover{color:var(--ts-color-text-primary)}:host(:focus-visible) .switch-option__base{box-shadow:var(--ts-focus-ring)}:host([active]) .switch-option__base{background-color:var(--ts-switch-group-active-bg, var(--ts-color-bg-elevated));color:var(--ts-color-text-primary);box-shadow:var(--ts-shadow-sm)}:host([disabled]) .switch-option__base{opacity:0.5;cursor:not-allowed;pointer-events:none}.switch-option__icon{display:inline-flex;align-items:center;flex-shrink:0}.switch-option__label{display:inline-flex;align-items:center}`;const c=class{constructor(i){t(this,i);this.tsOptionSelect=s(this,"tsOptionSelect")}get hostEl(){return i(this)}value;disabled=false;icon;active=false;tsOptionSelect;handleClick=()=>{if(this.disabled)return;this.tsOptionSelect.emit({value:this.value||""})};render(){return e(a,{key:"21e9caaea440e37c291991ef7e7cbde9446a4078",class:{"ts-switch-option":true,"ts-switch-option--active":this.active,"ts-switch-option--disabled":this.disabled},role:"radio",tabindex:this.active?0:-1,"aria-checked":String(this.active),"aria-disabled":this.disabled?"true":undefined,onClick:this.handleClick},e("div",{key:"8633d6def560f44c4f6c8dae01b42d187f590149",class:"switch-option__base",part:"base"},this.icon&&e("span",{key:"0c1ceca3c3f57e0dbf6841bad79136d93818d342",class:"switch-option__icon",part:"icon","aria-hidden":"true"},e("ts-icon",{key:"141990f023740c72e9aa7ccc40f9479ad7986cca",name:this.icon,size:"sm"})),e("span",{key:"a11e04f99cda8742f27251c58c5e65402c52597b",class:"switch-option__label"},e("slot",{key:"3d0a210f02eccfa6c5f68ab7f5cb6f41dc5413a9"}))))}};c.style=o();export{c as ts_switch_option};
2
+ //# sourceMappingURL=p-35eb8496.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["switchOptionCss","TsSwitchOption","value","disabled","icon","active","tsOptionSelect","handleClick","this","emit","render","h","Host","key","class","role","tabindex","String","undefined","onClick","part","name","size"],"sources":["src/components/switch-group/switch-option.css?tag=ts-switch-option&encapsulation=shadow","src/components/switch-group/switch-option.tsx"],"sourcesContent":["/* ==========================================================================\n ts-switch-option — Shadow DOM Scoped Styles\n ========================================================================== */\n\n:host {\n display: inline-flex;\n flex: 1;\n outline: none;\n}\n\n.switch-option__base {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ts-spacing-1);\n inline-size: 100%;\n padding-inline: var(--ts-spacing-3);\n padding-block: var(--ts-spacing-1);\n border-radius: calc(var(--ts-switch-group-radius, var(--ts-shape-interactive)) - 2px);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n}\n\n.switch-option__base:hover {\n color: var(--ts-color-text-primary);\n}\n\n:host(:focus-visible) .switch-option__base {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Active ---- */\n:host([active]) .switch-option__base {\n background-color: var(--ts-switch-group-active-bg, var(--ts-color-bg-elevated));\n color: var(--ts-color-text-primary);\n box-shadow: var(--ts-shadow-sm);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .switch-option__base {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Icon ---- */\n.switch-option__icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* ---- Label ---- */\n.switch-option__label {\n display: inline-flex;\n align-items: center;\n}\n","import { Component, Prop, Event, h, Host, Element } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for label text.\n *\n * @part base - The option container.\n * @part icon - The icon wrapper.\n */\n@Component({\n tag: 'ts-switch-option',\n styleUrl: 'switch-option.css',\n shadow: true,\n})\nexport class TsSwitchOption {\n @Element() hostEl!: HTMLElement;\n\n /** Unique identifier for this option. */\n @Prop({ reflect: true }) value?: string;\n\n /** Disables this option. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Optional icon name. */\n @Prop() icon?: string;\n\n /** Whether this option is the active selection (set by parent). */\n @Prop({ reflect: true, mutable: true }) active = false;\n\n /** @internal Emitted when this option is clicked. */\n @Event({ eventName: 'tsOptionSelect', bubbles: true }) tsOptionSelect!: EventEmitter<{ value: string }>;\n\n private handleClick = (): void => {\n if (this.disabled) return;\n this.tsOptionSelect.emit({ value: this.value || '' });\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-switch-option': true,\n 'ts-switch-option--active': this.active,\n 'ts-switch-option--disabled': this.disabled,\n }}\n role=\"radio\"\n tabindex={this.active ? 0 : -1}\n aria-checked={String(this.active)}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleClick}\n >\n <div class=\"switch-option__base\" part=\"base\">\n {this.icon && (\n <span class=\"switch-option__icon\" part=\"icon\" aria-hidden=\"true\">\n <ts-icon name={this.icon} size=\"sm\" />\n </span>\n )}\n <span class=\"switch-option__label\">\n <slot />\n </span>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAkB,IAAM,6mC,MCcjBC,EAAc,M,kGAIAC,MAGAC,SAAW,MAG5BC,KAGgCC,OAAS,MAGMC,eAE/CC,YAAc,KACpB,GAAIC,KAAKL,SAAU,OACnBK,KAAKF,eAAeG,KAAK,CAAEP,MAAOM,KAAKN,OAAS,IAAK,EAIvD,MAAAQ,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,mBAAoB,KACpB,2BAA4BN,KAAKH,OACjC,6BAA8BG,KAAKL,UAErCY,KAAK,QACLC,SAAUR,KAAKH,OAAS,GAAI,EAAE,eAChBY,OAAOT,KAAKH,QAAO,gBAClBG,KAAKL,SAAW,OAASe,UACxCC,QAASX,KAAKD,aAEdI,EAAA,OAAAE,IAAA,2CAAKC,MAAM,sBAAsBM,KAAK,QACnCZ,KAAKJ,MACJO,EAAA,QAAAE,IAAA,2CAAMC,MAAM,sBAAsBM,KAAK,OAAM,cAAa,QACxDT,EAAA,WAAAE,IAAA,2CAASQ,KAAMb,KAAKJ,KAAMkB,KAAK,QAGnCX,EAAA,QAAAE,IAAA,2CAAMC,MAAM,wBACVH,EAAA,QAAAE,IAAA,+C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as t,a as s,h as r,H as i}from"./p-V8-ENixA.js";import{g as a}from"./p-lpqZSiIf.js";const o=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-select-bg:var(--ts-color-neutral-50);--ts-select-border-color:var(--ts-color-border-default);--ts-select-radius:var(--ts-radius-md);--ts-select-focus-ring:var(--ts-focus-ring)}.select__label{display:block;margin-block-end:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-medium);color:var(--ts-color-text-secondary);line-height:var(--ts-line-height-normal)}.select__required{color:var(--ts-color-danger-500)}.select__container{position:relative}.select__trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--ts-spacing-2);width:100%;border:1px solid var(--ts-select-border-color);border-radius:var(--ts-select-radius);background-color:var(--ts-select-bg);font-family:inherit;color:var(--ts-color-text-primary);cursor:pointer;outline:none;transition:border-color var(--ts-transition-fast), box-shadow var(--ts-transition-fast);text-align:start;appearance:none}.select__trigger:focus-visible{border-color:var(--ts-color-primary-500);box-shadow:var(--ts-select-focus-ring)}.select__trigger--error{border-color:var(--ts-color-danger-500)}.select__trigger--error:focus-visible{box-shadow:0 0 0 3px var(--ts-color-focus-ring-danger)}.select__trigger--disabled{background-color:var(--ts-color-bg-disabled);opacity:0.6;cursor:not-allowed}.select__trigger--open{border-color:var(--ts-color-primary-500);box-shadow:var(--ts-select-focus-ring)}.select__display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select__display--placeholder{color:var(--ts-color-text-tertiary)}.select__chevron{width:1em;height:1em;flex-shrink:0;transition:transform var(--ts-transition-fast);color:var(--ts-color-text-tertiary)}:host(.ts-select--open) .select__chevron{transform:rotate(180deg)}.select__dropdown{position:absolute;inset-inline-start:0;inset-inline-end:0;top:calc(100% + var(--ts-spacing-1));z-index:1000;background-color:var(--ts-color-bg-elevated);border:1px solid var(--ts-color-border-default);border-radius:var(--ts-radius-md);box-shadow:var(--ts-shadow-lg);max-height:15rem;overflow-y:auto;padding-block:var(--ts-spacing-1)}.select__option{display:flex;align-items:center;padding:var(--ts-spacing-2) var(--ts-spacing-3);cursor:pointer;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast);color:var(--ts-color-text-primary);font-size:inherit}.select__option:hover:not(.select__option--disabled){background-color:var(--ts-color-interactive-primary-subtle)}.select__option--focused{background-color:var(--ts-color-bg-subtle)}.select__option--selected{color:var(--ts-color-interactive-primary);font-weight:var(--ts-font-weight-medium)}.select__option--disabled{opacity:0.5;cursor:not-allowed}:host([size="sm"]) .select__trigger{padding:var(--ts-spacing-1) var(--ts-spacing-2);font-size:var(--ts-font-size-sm);border-radius:var(--ts-radius-sm)}:host([size="md"]) .select__trigger{padding:var(--ts-spacing-2) var(--ts-spacing-3);font-size:var(--ts-font-size-md)}:host([size="lg"]) .select__trigger{padding:var(--ts-spacing-3) var(--ts-spacing-4);font-size:var(--ts-font-size-lg)}:host([size="xl"]) .select__trigger{padding:var(--ts-spacing-4) var(--ts-spacing-5);font-size:var(--ts-font-size-xl);border-radius:var(--ts-radius-lg)}.select__hidden-slot{display:none}.select__help,.select__error{margin-block-start:var(--ts-spacing-1);font-size:var(--ts-font-size-xs);line-height:var(--ts-line-height-normal)}.select__help{color:var(--ts-color-text-tertiary)}.select__error{color:var(--ts-color-danger-600);font-weight:var(--ts-font-weight-medium)}`;const l=class{constructor(s){e(this,s);this.tsChange=t(this,"tsChange");this.tsFocus=t(this,"tsFocus");this.tsBlur=t(this,"tsBlur")}get hostEl(){return s(this)}inputId=a("ts-select");triggerEl;value="";placeholder;disabled=false;size="md";label;helpText;error=false;errorMessage;required=false;name;multiple=false;isOpen=false;focusedIndex=-1;options=[];tsChange;tsFocus;tsBlur;handleValueChange(){}handleDocumentClick(e){if(this.isOpen&&!this.hostEl.contains(e.target)){this.close()}}componentWillLoad(){this.parseOptions()}componentDidLoad(){const e=this.hostEl.shadowRoot?.querySelector(".select__hidden-slot slot");e?.addEventListener("slotchange",(()=>this.parseOptions()))}parseOptions(){const e=this.hostEl.querySelectorAll("option");this.options=Array.from(e).map((e=>({value:e.value,label:e.textContent?.trim()??e.value,disabled:e.disabled})))}open(){if(this.disabled)return;this.isOpen=true;this.focusedIndex=this.options.findIndex((e=>e.value===this.value));if(this.focusedIndex<0)this.focusedIndex=0}close(){this.isOpen=false;this.focusedIndex=-1;this.triggerEl?.focus()}selectOption(e){if(e.disabled)return;this.value=e.value;this.tsChange.emit({value:this.value});this.close()}handleTriggerClick=()=>{if(this.isOpen){this.close()}else{this.open()}};handleTriggerKeydown=e=>{switch(e.key){case"Enter":case" ":case"ArrowDown":e.preventDefault();if(!this.isOpen){this.open()}else if(e.key==="Enter"||e.key===" "){if(this.focusedIndex>=0&&this.options[this.focusedIndex]){this.selectOption(this.options[this.focusedIndex])}}break;case"ArrowUp":e.preventDefault();if(!this.isOpen){this.open()}break;case"Escape":if(this.isOpen){e.preventDefault();this.close()}break}};handleDropdownKeydown=e=>{const t=this.options.filter((e=>!e.disabled));switch(e.key){case"ArrowDown":e.preventDefault();this.moveFocus(1);break;case"ArrowUp":e.preventDefault();this.moveFocus(-1);break;case"Enter":case" ":e.preventDefault();if(this.focusedIndex>=0&&this.options[this.focusedIndex]&&!this.options[this.focusedIndex].disabled){this.selectOption(this.options[this.focusedIndex])}break;case"Escape":e.preventDefault();this.close();break;case"Home":e.preventDefault();this.focusedIndex=t.length>0?this.options.indexOf(t[0]):0;break;case"End":e.preventDefault();this.focusedIndex=t.length>0?this.options.indexOf(t[t.length-1]):this.options.length-1;break}};moveFocus(e){let t=this.focusedIndex+e;while(t>=0&&t<this.options.length&&this.options[t].disabled){t+=e}if(t>=0&&t<this.options.length){this.focusedIndex=t}}handleFocus=()=>{this.tsFocus.emit()};handleBlur=()=>{this.tsBlur.emit()};getDisplayText(){const e=this.options.find((e=>e.value===this.value));return e?.label??""}render(){const e=this.error&&!!this.errorMessage;const t=`${this.inputId}-label`;const s=`${this.inputId}-help`;const a=`${this.inputId}-error`;const o=`${this.inputId}-listbox`;const l=this.getDisplayText();return r(i,{key:"9b3a0e36fdea320fce2428978bcf5052fdfd4de9",class:{"ts-select":true,[`ts-select--${this.size}`]:true,"ts-select--open":this.isOpen,"ts-select--disabled":this.disabled,"ts-select--error":this.error}},this.label&&r("label",{key:"71a6c856fc09aa61ac26c4481e572f2ae5e45bdf",class:"select__label",part:"label",id:t},this.label,this.required&&r("span",{key:"fa1aa9a6d2dde47fdec5e8d0728b8f5a65589430",class:"select__required","aria-hidden":"true"}," *")),r("div",{key:"f3897e2538d5133ce07ab4591cbd52a1321ec938",class:"select__container"},r("button",{key:"f78d7565c491639e1007026b1e979e7fe7cdc185",ref:e=>this.triggerEl=e,class:{select__trigger:true,"select__trigger--open":this.isOpen,"select__trigger--error":this.error,"select__trigger--disabled":this.disabled},part:"trigger",type:"button",role:"combobox","aria-expanded":this.isOpen?"true":"false","aria-haspopup":"listbox","aria-controls":o,"aria-labelledby":this.label?t:undefined,"aria-invalid":this.error?"true":undefined,"aria-required":this.required?"true":undefined,disabled:this.disabled,onClick:this.handleTriggerClick,onKeyDown:this.handleTriggerKeydown,onFocus:this.handleFocus,onBlur:this.handleBlur},r("span",{key:"47ef7c569d488efcdbdcb0c4dde6bda31b71783a",class:{select__display:true,"select__display--placeholder":!l}},l||this.placeholder||" "),r("svg",{key:"a416413862109fa8fcf9a4a2b82c6b37fa6a0336",class:"select__chevron",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true"},r("path",{key:"aea2702514b5b0a8e5981e3b901d2b5f74b5ac45",d:"M4 6L8 10L12 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}))),this.isOpen&&r("div",{key:"61c28bf0a413a73460f9ecf14e5dd85e82502249",class:"select__dropdown",part:"dropdown",role:"listbox",id:o,"aria-labelledby":this.label?t:undefined,onKeyDown:this.handleDropdownKeydown},this.options.map(((e,t)=>r("div",{class:{select__option:true,"select__option--selected":e.value===this.value,"select__option--focused":t===this.focusedIndex,"select__option--disabled":e.disabled},part:"option",role:"option","aria-selected":e.value===this.value?"true":"false","aria-disabled":e.disabled?"true":undefined,onClick:()=>this.selectOption(e)},e.label))))),r("div",{key:"a9a59b1565505fd6262a81ce202f1bd4fbb3af1f",class:"select__hidden-slot"},r("slot",{key:"7f5a9e5b313694ff80f0b86e4d1268a20d165556"})),e&&r("div",{key:"b91fafea4a65f2d95822b560c2e75ff7d5ff4831",class:"select__error",part:"error-text",id:a,role:"alert"},this.errorMessage),!e&&this.helpText&&r("div",{key:"aed81b58a86b674c53c28c4dd1c97d0e4a2b8cc3",class:"select__help",part:"help-text",id:s},this.helpText))}static get watchers(){return{value:[{handleValueChange:0}]}}};l.style=o();export{l as ts_select};
2
+ //# sourceMappingURL=p-3aec66b4.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["selectCss","TsSelect","inputId","generateId","triggerEl","value","placeholder","disabled","size","label","helpText","error","errorMessage","required","name","multiple","isOpen","focusedIndex","options","tsChange","tsFocus","tsBlur","handleValueChange","handleDocumentClick","event","this","hostEl","contains","target","close","componentWillLoad","parseOptions","componentDidLoad","slot","shadowRoot","querySelector","addEventListener","slottedOptions","querySelectorAll","Array","from","map","opt","textContent","trim","open","findIndex","o","focus","selectOption","option","emit","handleTriggerClick","handleTriggerKeydown","key","preventDefault","handleDropdownKeydown","enabledOptions","filter","moveFocus","length","indexOf","direction","next","handleFocus","handleBlur","getDisplayText","selected","find","render","hasError","labelId","helpId","errorId","listboxId","displayText","h","Host","class","part","id","ref","el","select__trigger","type","role","undefined","onClick","onKeyDown","onFocus","onBlur","select__display","viewBox","fill","d","stroke","index","select__option"],"sources":["src/components/select/select.css?tag=ts-select&encapsulation=shadow","src/components/select/select.tsx"],"sourcesContent":["/* ==========================================================================\n ts-select — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-select-bg Select background\n --ts-select-border-color Default border color\n --ts-select-radius Border radius\n --ts-select-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-select-bg: var(--ts-color-neutral-50);\n --ts-select-border-color: var(--ts-color-border-default);\n --ts-select-radius: var(--ts-radius-md);\n --ts-select-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.select__label {\n display: block;\n margin-block-end: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n.select__required {\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Container ---- */\n.select__container {\n position: relative;\n}\n\n/* ---- Trigger button ---- */\n.select__trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ts-spacing-2);\n width: 100%;\n border: 1px solid var(--ts-select-border-color);\n border-radius: var(--ts-select-radius);\n background-color: var(--ts-select-bg);\n font-family: inherit;\n color: var(--ts-color-text-primary);\n cursor: pointer;\n outline: none;\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n text-align: start;\n appearance: none;\n}\n\n.select__trigger:focus-visible {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-select-focus-ring);\n}\n\n.select__trigger--error {\n border-color: var(--ts-color-danger-500);\n}\n\n.select__trigger--error:focus-visible {\n box-shadow: 0 0 0 3px var(--ts-color-focus-ring-danger);\n}\n\n.select__trigger--disabled {\n background-color: var(--ts-color-bg-disabled);\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.select__trigger--open {\n border-color: var(--ts-color-primary-500);\n box-shadow: var(--ts-select-focus-ring);\n}\n\n/* ---- Display text ---- */\n.select__display {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.select__display--placeholder {\n color: var(--ts-color-text-tertiary);\n}\n\n/* ---- Chevron ---- */\n.select__chevron {\n width: 1em;\n height: 1em;\n flex-shrink: 0;\n transition: transform var(--ts-transition-fast);\n color: var(--ts-color-text-tertiary);\n}\n\n:host(.ts-select--open) .select__chevron {\n transform: rotate(180deg);\n}\n\n/* ---- Dropdown ---- */\n.select__dropdown {\n position: absolute;\n inset-inline-start: 0;\n inset-inline-end: 0;\n top: calc(100% + var(--ts-spacing-1));\n z-index: 1000;\n background-color: var(--ts-color-bg-elevated);\n border: 1px solid var(--ts-color-border-default);\n border-radius: var(--ts-radius-md);\n box-shadow: var(--ts-shadow-lg);\n max-height: 15rem;\n overflow-y: auto;\n padding-block: var(--ts-spacing-1);\n}\n\n/* ---- Option ---- */\n.select__option {\n display: flex;\n align-items: center;\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n color: var(--ts-color-text-primary);\n font-size: inherit;\n}\n\n.select__option:hover:not(.select__option--disabled) {\n background-color: var(--ts-color-interactive-primary-subtle);\n}\n\n.select__option--focused {\n background-color: var(--ts-color-bg-subtle);\n}\n\n.select__option--selected {\n color: var(--ts-color-interactive-primary);\n font-weight: var(--ts-font-weight-medium);\n}\n\n.select__option--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .select__trigger {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n border-radius: var(--ts-radius-sm);\n}\n\n:host([size=\"md\"]) .select__trigger {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .select__trigger {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n:host([size=\"xl\"]) .select__trigger {\n padding: var(--ts-spacing-4) var(--ts-spacing-5);\n font-size: var(--ts-font-size-xl);\n border-radius: var(--ts-radius-lg);\n}\n\n/* ---- Hidden slot ---- */\n.select__hidden-slot {\n display: none;\n}\n\n/* ---- Help & Error Text ---- */\n.select__help,\n.select__error {\n margin-block-start: var(--ts-spacing-1);\n font-size: var(--ts-font-size-xs);\n line-height: var(--ts-line-height-normal);\n}\n\n.select__help {\n color: var(--ts-color-text-tertiary);\n}\n\n.select__error {\n color: var(--ts-color-danger-600);\n font-weight: var(--ts-font-weight-medium);\n}\n","import { Component, Prop, State, Event, Watch, h, Host, Element, Listen } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize, TsSelectChangeEventDetail } from '../../types';\nimport { generateId } from '../../utils/aria';\n\ninterface SelectOption {\n value: string;\n label: string;\n disabled: boolean;\n}\n\n/**\n * @slot - Default slot for `<option>` elements.\n *\n * @part base - The outer wrapper.\n * @part label - The label element.\n * @part trigger - The select trigger button.\n * @part dropdown - The dropdown panel.\n * @part option - An option in the dropdown list.\n * @part help-text - The help text wrapper.\n * @part error-text - The error message wrapper.\n */\n@Component({\n tag: 'ts-select',\n styleUrl: 'select.css',\n shadow: true,\n})\nexport class TsSelect {\n @Element() hostEl!: HTMLElement;\n\n private inputId = generateId('ts-select');\n private triggerEl?: HTMLElement;\n\n /** The current value. */\n @Prop({ mutable: true, reflect: true }) value = '';\n\n /** Placeholder text when no value is selected. */\n @Prop() placeholder?: string;\n\n /** Renders the select as disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** The select size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Label text displayed above the select. */\n @Prop() label?: string;\n\n /** Help text displayed below the select. */\n @Prop() helpText?: string;\n\n /** Renders the select in an error state. */\n @Prop({ reflect: true }) error = false;\n\n /** Error message displayed below the select. */\n @Prop() errorMessage?: string;\n\n /** Makes the select required. */\n @Prop({ reflect: true }) required = false;\n\n /** Name attribute for form submission. */\n @Prop() name?: string;\n\n /** Allow multiple selections. */\n @Prop({ reflect: true }) multiple = false;\n\n /** Whether the dropdown is open. */\n @State() isOpen = false;\n\n /** The index of the currently focused option. */\n @State() focusedIndex = -1;\n\n /** Parsed options from slotted <option> elements. */\n @State() options: SelectOption[] = [];\n\n /** Emitted when the value changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<TsSelectChangeEventDetail>;\n\n /** Emitted when the select gains focus. */\n @Event({ eventName: 'tsFocus' }) tsFocus!: EventEmitter<void>;\n\n /** Emitted when the select loses focus. */\n @Event({ eventName: 'tsBlur' }) tsBlur!: EventEmitter<void>;\n\n @Watch('value')\n handleValueChange(): void {\n // Value was changed externally; ensure UI is in sync\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent): void {\n if (this.isOpen && !this.hostEl.contains(event.target as Node)) {\n this.close();\n }\n }\n\n componentWillLoad(): void {\n this.parseOptions();\n }\n\n componentDidLoad(): void {\n // Observe slot changes to re-parse options\n const slot = this.hostEl.shadowRoot?.querySelector('.select__hidden-slot slot');\n slot?.addEventListener('slotchange', () => this.parseOptions());\n }\n\n private parseOptions(): void {\n const slottedOptions = this.hostEl.querySelectorAll('option');\n this.options = Array.from(slottedOptions).map((opt) => ({\n value: opt.value,\n label: opt.textContent?.trim() ?? opt.value,\n disabled: opt.disabled,\n }));\n }\n\n private open(): void {\n if (this.disabled) return;\n this.isOpen = true;\n this.focusedIndex = this.options.findIndex((o) => o.value === this.value);\n if (this.focusedIndex < 0) this.focusedIndex = 0;\n }\n\n private close(): void {\n this.isOpen = false;\n this.focusedIndex = -1;\n this.triggerEl?.focus();\n }\n\n private selectOption(option: SelectOption): void {\n if (option.disabled) return;\n this.value = option.value;\n this.tsChange.emit({ value: this.value });\n this.close();\n }\n\n private handleTriggerClick = (): void => {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen) {\n this.open();\n } else if (event.key === 'Enter' || event.key === ' ') {\n if (this.focusedIndex >= 0 && this.options[this.focusedIndex]) {\n this.selectOption(this.options[this.focusedIndex]);\n }\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen) {\n this.open();\n }\n break;\n case 'Escape':\n if (this.isOpen) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n };\n\n private handleDropdownKeydown = (event: KeyboardEvent): void => {\n const enabledOptions = this.options.filter((o) => !o.disabled);\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.focusedIndex >= 0 && this.options[this.focusedIndex] && !this.options[this.focusedIndex].disabled) {\n this.selectOption(this.options[this.focusedIndex]);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Home':\n event.preventDefault();\n this.focusedIndex = enabledOptions.length > 0 ? this.options.indexOf(enabledOptions[0]) : 0;\n break;\n case 'End':\n event.preventDefault();\n this.focusedIndex = enabledOptions.length > 0 ? this.options.indexOf(enabledOptions[enabledOptions.length - 1]) : this.options.length - 1;\n break;\n }\n };\n\n private moveFocus(direction: number): void {\n let next = this.focusedIndex + direction;\n while (next >= 0 && next < this.options.length && this.options[next].disabled) {\n next += direction;\n }\n if (next >= 0 && next < this.options.length) {\n this.focusedIndex = next;\n }\n }\n\n private handleFocus = (): void => {\n this.tsFocus.emit();\n };\n\n private handleBlur = (): void => {\n this.tsBlur.emit();\n };\n\n private getDisplayText(): string {\n const selected = this.options.find((o) => o.value === this.value);\n return selected?.label ?? '';\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasError = this.error && !!this.errorMessage;\n const labelId = `${this.inputId}-label`;\n const helpId = `${this.inputId}-help`;\n const errorId = `${this.inputId}-error`;\n const listboxId = `${this.inputId}-listbox`;\n const displayText = this.getDisplayText();\n\n return (\n <Host\n class={{\n 'ts-select': true,\n [`ts-select--${this.size}`]: true,\n 'ts-select--open': this.isOpen,\n 'ts-select--disabled': this.disabled,\n 'ts-select--error': this.error,\n }}\n >\n {this.label && (\n <label class=\"select__label\" part=\"label\" id={labelId}>\n {this.label}\n {this.required && <span class=\"select__required\" aria-hidden=\"true\"> *</span>}\n </label>\n )}\n\n <div class=\"select__container\">\n <button\n ref={(el) => (this.triggerEl = el)}\n class={{\n 'select__trigger': true,\n 'select__trigger--open': this.isOpen,\n 'select__trigger--error': this.error,\n 'select__trigger--disabled': this.disabled,\n }}\n part=\"trigger\"\n type=\"button\"\n role=\"combobox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-labelledby={this.label ? labelId : undefined}\n aria-invalid={this.error ? 'true' : undefined}\n aria-required={this.required ? 'true' : undefined}\n disabled={this.disabled}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeydown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n <span class={{ 'select__display': true, 'select__display--placeholder': !displayText }}>\n {displayText || this.placeholder || '\\u00A0'}\n </span>\n <svg class=\"select__chevron\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n {this.isOpen && (\n <div\n class=\"select__dropdown\"\n part=\"dropdown\"\n role=\"listbox\"\n id={listboxId}\n aria-labelledby={this.label ? labelId : undefined}\n onKeyDown={this.handleDropdownKeydown}\n >\n {this.options.map((option, index) => (\n <div\n class={{\n 'select__option': true,\n 'select__option--selected': option.value === this.value,\n 'select__option--focused': index === this.focusedIndex,\n 'select__option--disabled': option.disabled,\n }}\n part=\"option\"\n role=\"option\"\n aria-selected={option.value === this.value ? 'true' : 'false'}\n aria-disabled={option.disabled ? 'true' : undefined}\n onClick={() => this.selectOption(option)}\n >\n {option.label}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Hidden slot to capture <option> elements */}\n <div class=\"select__hidden-slot\">\n <slot />\n </div>\n\n {hasError && (\n <div class=\"select__error\" part=\"error-text\" id={errorId} role=\"alert\">\n {this.errorMessage}\n </div>\n )}\n\n {!hasError && this.helpText && (\n <div class=\"select__help\" part=\"help-text\" id={helpId}>\n {this.helpText}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}