@diwacopilot/components 1.0.0 → 1.1.1

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 (467) hide show
  1. package/dist/cjs/diwa-checkbox.cjs.entry.js +1 -3
  2. package/dist/cjs/diwa-checkbox.cjs.entry.js.map +1 -1
  3. package/dist/cjs/diwa-components.cjs.js +1 -1
  4. package/dist/cjs/diwa-heading.cjs.entry.js +126 -0
  5. package/dist/cjs/diwa-heading.cjs.entry.js.map +1 -0
  6. package/dist/cjs/diwa-icon.cjs.entry.js +1 -1
  7. package/dist/cjs/diwa-inline-notification.cjs.entry.js +1 -1
  8. package/dist/cjs/diwa-input-date.cjs.entry.js +1 -1
  9. package/dist/cjs/diwa-input-email.cjs.entry.js +1 -1
  10. package/dist/cjs/diwa-input-month.cjs.entry.js +1 -1
  11. package/dist/cjs/diwa-input-number.cjs.entry.js +1 -1
  12. package/dist/cjs/diwa-input-password.cjs.entry.js +1 -1
  13. package/dist/cjs/diwa-input-search.cjs.entry.js +1 -1
  14. package/dist/cjs/diwa-input-tel.cjs.entry.js +1 -1
  15. package/dist/cjs/diwa-input-text.cjs.entry.js +1 -1
  16. package/dist/cjs/diwa-input-time.cjs.entry.js +1 -1
  17. package/dist/cjs/diwa-input-url.cjs.entry.js +1 -1
  18. package/dist/cjs/diwa-input-week.cjs.entry.js +1 -1
  19. package/dist/cjs/diwa-input.cjs.entry.js +1 -1
  20. package/dist/cjs/diwa-link-pure.cjs.entry.js +1 -1
  21. package/dist/cjs/diwa-link.cjs.entry.js +1 -1
  22. package/dist/cjs/diwa-modal.cjs.entry.js +1 -1
  23. package/dist/cjs/diwa-multi-select-option.cjs.entry.js +1 -1
  24. package/dist/cjs/diwa-multi-select.cjs.entry.js +2 -2
  25. package/dist/cjs/diwa-pagination.cjs.entry.js +1 -1
  26. package/dist/cjs/diwa-pin-code.cjs.entry.js +2 -2
  27. package/dist/cjs/diwa-popover.cjs.entry.js +1 -1
  28. package/dist/cjs/diwa-radio-group-item.cjs.entry.js +2 -3
  29. package/dist/cjs/diwa-radio-group-item.cjs.entry.js.map +1 -1
  30. package/dist/cjs/diwa-radio-group.cjs.entry.js +1 -1
  31. package/dist/cjs/diwa-scroller.cjs.entry.js +23 -13
  32. package/dist/cjs/diwa-scroller.cjs.entry.js.map +1 -1
  33. package/dist/cjs/diwa-segmented-control-item.cjs.entry.js +1 -1
  34. package/dist/cjs/diwa-segmented-control.cjs.entry.js +1 -1
  35. package/dist/cjs/diwa-select-option.cjs.entry.js +24 -10
  36. package/dist/cjs/diwa-select-option.cjs.entry.js.map +1 -1
  37. package/dist/cjs/diwa-select.cjs.entry.js +15 -1
  38. package/dist/cjs/diwa-select.cjs.entry.js.map +1 -1
  39. package/dist/cjs/diwa-spinner.cjs.entry.js +1 -1
  40. package/dist/cjs/diwa-stepper-horizontal-item.cjs.entry.js +1 -1
  41. package/dist/cjs/diwa-stepper-horizontal.cjs.entry.js +1 -1
  42. package/dist/cjs/diwa-switch.cjs.entry.js +1 -1
  43. package/dist/cjs/diwa-table-body.cjs.entry.js +1 -1
  44. package/dist/cjs/diwa-table-cell.cjs.entry.js +15 -15
  45. package/dist/cjs/diwa-table-cell.cjs.entry.js.map +1 -1
  46. package/dist/cjs/diwa-table-head-cell.cjs.entry.js +64 -53
  47. package/dist/cjs/diwa-table-head-cell.cjs.entry.js.map +1 -1
  48. package/dist/cjs/diwa-table-head.cjs.entry.js +16 -11
  49. package/dist/cjs/diwa-table-head.cjs.entry.js.map +1 -1
  50. package/dist/cjs/diwa-table-row.cjs.entry.js +11 -10
  51. package/dist/cjs/diwa-table-row.cjs.entry.js.map +1 -1
  52. package/dist/cjs/diwa-table.cjs.entry.js +83 -43
  53. package/dist/cjs/diwa-table.cjs.entry.js.map +1 -1
  54. package/dist/cjs/diwa-tabs-bar.cjs.entry.js +1 -1
  55. package/dist/cjs/diwa-tabs-item.cjs.entry.js +1 -1
  56. package/dist/cjs/diwa-tabs.cjs.entry.js +12 -12
  57. package/dist/cjs/diwa-tabs.cjs.entry.js.map +1 -1
  58. package/dist/cjs/diwa-tag-dismissible.cjs.entry.js +6 -8
  59. package/dist/cjs/diwa-tag-dismissible.cjs.entry.js.map +1 -1
  60. package/dist/cjs/diwa-tag.cjs.entry.js +2 -2
  61. package/dist/cjs/diwa-tag.cjs.entry.js.map +1 -1
  62. package/dist/cjs/diwa-text-list-item.cjs.entry.js +1 -1
  63. package/dist/cjs/diwa-text-list.cjs.entry.js +1 -1
  64. package/dist/cjs/diwa-text.cjs.entry.js +1 -1
  65. package/dist/cjs/diwa-textarea.cjs.entry.js +1 -1
  66. package/dist/cjs/diwa-toast-item.cjs.entry.js +1 -1
  67. package/dist/cjs/diwa-toast.cjs.entry.js +111 -17
  68. package/dist/cjs/diwa-toast.cjs.entry.js.map +1 -1
  69. package/dist/cjs/loader.cjs.js +1 -1
  70. package/dist/collection/collection-manifest.json +1 -0
  71. package/dist/collection/components/diwa-checkbox/diwa-checkbox-styles.js +1 -3
  72. package/dist/collection/components/diwa-checkbox/diwa-checkbox-styles.js.map +1 -1
  73. package/dist/collection/components/diwa-heading/diwa-heading-styles.js +53 -0
  74. package/dist/collection/components/diwa-heading/diwa-heading-styles.js.map +1 -0
  75. package/dist/collection/components/diwa-heading/diwa-heading-utils.js +26 -0
  76. package/dist/collection/components/diwa-heading/diwa-heading-utils.js.map +1 -0
  77. package/dist/collection/components/diwa-heading/diwa-heading.js +235 -0
  78. package/dist/collection/components/diwa-heading/diwa-heading.js.map +1 -0
  79. package/dist/collection/components/diwa-heading/types.js +2 -0
  80. package/dist/collection/components/diwa-heading/types.js.map +1 -0
  81. package/dist/collection/components/diwa-icon/diwa-icon.js +1 -1
  82. package/dist/collection/components/diwa-inline-notification/diwa-inline-notification.js +1 -1
  83. package/dist/collection/components/diwa-input/diwa-input.js +1 -1
  84. package/dist/collection/components/diwa-input-date/diwa-input-date.js +1 -1
  85. package/dist/collection/components/diwa-input-email/diwa-input-email.js +1 -1
  86. package/dist/collection/components/diwa-input-month/diwa-input-month.js +1 -1
  87. package/dist/collection/components/diwa-input-number/diwa-input-number.js +1 -1
  88. package/dist/collection/components/diwa-input-password/diwa-input-password.js +1 -1
  89. package/dist/collection/components/diwa-input-search/diwa-input-search.js +1 -1
  90. package/dist/collection/components/diwa-input-tel/diwa-input-tel.js +1 -1
  91. package/dist/collection/components/diwa-input-text/diwa-input-text.js +1 -1
  92. package/dist/collection/components/diwa-input-time/diwa-input-time.js +1 -1
  93. package/dist/collection/components/diwa-input-url/diwa-input-url.js +1 -1
  94. package/dist/collection/components/diwa-input-week/diwa-input-week.js +1 -1
  95. package/dist/collection/components/diwa-link/diwa-link.js +1 -1
  96. package/dist/collection/components/diwa-link-pure/diwa-link-pure.js +1 -1
  97. package/dist/collection/components/diwa-modal/diwa-modal.js +1 -1
  98. package/dist/collection/components/diwa-multi-select/diwa-multi-select.js +2 -2
  99. package/dist/collection/components/diwa-multi-select-option/diwa-multi-select-option.js +1 -1
  100. package/dist/collection/components/diwa-pagination/diwa-pagination.js +1 -1
  101. package/dist/collection/components/diwa-pin-code/diwa-pin-code.js +2 -2
  102. package/dist/collection/components/diwa-popover/diwa-popover.js +1 -1
  103. package/dist/collection/components/diwa-radio-group/diwa-radio-group.js +1 -1
  104. package/dist/collection/components/diwa-radio-group-item/diwa-radio-group-item-styles.js +1 -2
  105. package/dist/collection/components/diwa-radio-group-item/diwa-radio-group-item-styles.js.map +1 -1
  106. package/dist/collection/components/diwa-radio-group-item/diwa-radio-group-item.js +1 -1
  107. package/dist/collection/components/diwa-scroller/diwa-scroller-styles.js +14 -9
  108. package/dist/collection/components/diwa-scroller/diwa-scroller-styles.js.map +1 -1
  109. package/dist/collection/components/diwa-scroller/diwa-scroller.js +9 -13
  110. package/dist/collection/components/diwa-scroller/diwa-scroller.js.map +1 -1
  111. package/dist/collection/components/diwa-segmented-control/diwa-segmented-control.js +1 -1
  112. package/dist/collection/components/diwa-segmented-control-item/diwa-segmented-control-item.js +1 -1
  113. package/dist/collection/components/diwa-select/diwa-select.js +17 -1
  114. package/dist/collection/components/diwa-select/diwa-select.js.map +1 -1
  115. package/dist/collection/components/diwa-select-option/diwa-select-option-styles.js +21 -9
  116. package/dist/collection/components/diwa-select-option/diwa-select-option-styles.js.map +1 -1
  117. package/dist/collection/components/diwa-select-option/diwa-select-option.js +23 -1
  118. package/dist/collection/components/diwa-select-option/diwa-select-option.js.map +1 -1
  119. package/dist/collection/components/diwa-spinner/diwa-spinner.js +1 -1
  120. package/dist/collection/components/diwa-stepper-horizontal/diwa-stepper-horizontal.js +1 -1
  121. package/dist/collection/components/diwa-stepper-horizontal-item/diwa-stepper-horizontal-item.js +1 -1
  122. package/dist/collection/components/diwa-switch/diwa-switch.js +1 -1
  123. package/dist/collection/components/diwa-table/diwa-table-styles.js +81 -42
  124. package/dist/collection/components/diwa-table/diwa-table-styles.js.map +1 -1
  125. package/dist/collection/components/diwa-table/diwa-table.js +3 -2
  126. package/dist/collection/components/diwa-table/diwa-table.js.map +1 -1
  127. package/dist/collection/components/diwa-table-body/diwa-table-body.js +1 -1
  128. package/dist/collection/components/diwa-table-cell/diwa-table-cell-styles.js +14 -14
  129. package/dist/collection/components/diwa-table-cell/diwa-table-cell-styles.js.map +1 -1
  130. package/dist/collection/components/diwa-table-cell/diwa-table-cell.js +1 -1
  131. package/dist/collection/components/diwa-table-cell/diwa-table-cell.js.map +1 -1
  132. package/dist/collection/components/diwa-table-head/diwa-table-head-styles.js +15 -10
  133. package/dist/collection/components/diwa-table-head/diwa-table-head-styles.js.map +1 -1
  134. package/dist/collection/components/diwa-table-head/diwa-table-head.js +1 -1
  135. package/dist/collection/components/diwa-table-head-cell/diwa-table-head-cell-styles.js +60 -49
  136. package/dist/collection/components/diwa-table-head-cell/diwa-table-head-cell-styles.js.map +1 -1
  137. package/dist/collection/components/diwa-table-head-cell/diwa-table-head-cell.js +4 -4
  138. package/dist/collection/components/diwa-table-head-cell/diwa-table-head-cell.js.map +1 -1
  139. package/dist/collection/components/diwa-table-row/diwa-table-row-styles.js +10 -9
  140. package/dist/collection/components/diwa-table-row/diwa-table-row-styles.js.map +1 -1
  141. package/dist/collection/components/diwa-table-row/diwa-table-row.js +1 -1
  142. package/dist/collection/components/diwa-tabs/diwa-tabs-styles.js +11 -11
  143. package/dist/collection/components/diwa-tabs/diwa-tabs-styles.js.map +1 -1
  144. package/dist/collection/components/diwa-tabs/diwa-tabs.js +1 -1
  145. package/dist/collection/components/diwa-tabs-bar/diwa-tabs-bar.js +1 -1
  146. package/dist/collection/components/diwa-tabs-item/diwa-tabs-item.js +1 -1
  147. package/dist/collection/components/diwa-tag/diwa-tag-styles.js +1 -1
  148. package/dist/collection/components/diwa-tag/diwa-tag-styles.js.map +1 -1
  149. package/dist/collection/components/diwa-tag/diwa-tag.js +1 -1
  150. package/dist/collection/components/diwa-tag-dismissible/diwa-tag-dismissible-styles.js +5 -6
  151. package/dist/collection/components/diwa-tag-dismissible/diwa-tag-dismissible-styles.js.map +1 -1
  152. package/dist/collection/components/diwa-tag-dismissible/diwa-tag-dismissible.js +1 -2
  153. package/dist/collection/components/diwa-tag-dismissible/diwa-tag-dismissible.js.map +1 -1
  154. package/dist/collection/components/diwa-text/diwa-text.js +1 -1
  155. package/dist/collection/components/diwa-text-list/diwa-text-list.js +1 -1
  156. package/dist/collection/components/diwa-text-list-item/diwa-text-list-item.js +1 -1
  157. package/dist/collection/components/diwa-textarea/diwa-textarea.js +1 -1
  158. package/dist/collection/components/diwa-toast/diwa-toast-manager.js +96 -0
  159. package/dist/collection/components/diwa-toast/diwa-toast-manager.js.map +1 -0
  160. package/dist/collection/components/diwa-toast/diwa-toast.js +24 -25
  161. package/dist/collection/components/diwa-toast/diwa-toast.js.map +1 -1
  162. package/dist/collection/components/diwa-toast-item/diwa-toast-item.js +1 -1
  163. package/dist/diwa-components/diwa-components.css +2 -2
  164. package/dist/diwa-components/diwa-components.esm.js +1 -1
  165. package/dist/diwa-components/diwa-components.esm.js.map +1 -1
  166. package/dist/diwa-components/{p-2b54c761.entry.js → p-09f2e643.entry.js} +2 -2
  167. package/dist/diwa-components/{p-4ac5a26e.entry.js → p-117dc41d.entry.js} +2 -2
  168. package/dist/diwa-components/p-117dc41d.entry.js.map +1 -0
  169. package/dist/diwa-components/{p-1022a474.entry.js → p-1250d0c7.entry.js} +2 -2
  170. package/dist/diwa-components/{p-1a1bd7ed.entry.js → p-13e71247.entry.js} +2 -2
  171. package/dist/diwa-components/p-1830772d.entry.js +2 -0
  172. package/dist/diwa-components/{p-f4a589b5.entry.js → p-1d708e1e.entry.js} +2 -2
  173. package/dist/diwa-components/{p-bb04cdd6.entry.js → p-238da82a.entry.js} +2 -2
  174. package/dist/diwa-components/p-29419c9a.entry.js +2 -0
  175. package/dist/diwa-components/p-29419c9a.entry.js.map +1 -0
  176. package/dist/diwa-components/{p-c896dfa5.entry.js → p-3269a4b7.entry.js} +2 -2
  177. package/dist/diwa-components/p-35b69160.entry.js +2 -0
  178. package/dist/diwa-components/p-35b69160.entry.js.map +1 -0
  179. package/dist/diwa-components/{p-fbe73240.entry.js → p-3660b09a.entry.js} +2 -2
  180. package/dist/diwa-components/{p-c37374ab.entry.js → p-36b004e9.entry.js} +2 -2
  181. package/dist/diwa-components/p-37e1bea3.entry.js +2 -0
  182. package/dist/diwa-components/p-37e1bea3.entry.js.map +1 -0
  183. package/dist/diwa-components/{p-851cbfb8.entry.js → p-3b38fa01.entry.js} +2 -2
  184. package/dist/diwa-components/p-3fb5cc30.entry.js +2 -0
  185. package/dist/diwa-components/p-429c596d.entry.js +2 -0
  186. package/dist/diwa-components/p-429c596d.entry.js.map +1 -0
  187. package/dist/diwa-components/p-50866c5a.entry.js +2 -0
  188. package/dist/diwa-components/p-50866c5a.entry.js.map +1 -0
  189. package/dist/diwa-components/p-5a597e27.entry.js +2 -0
  190. package/dist/diwa-components/p-5f9139bc.entry.js +2 -0
  191. package/dist/diwa-components/p-5f9139bc.entry.js.map +1 -0
  192. package/dist/diwa-components/p-66c15f66.entry.js +2 -0
  193. package/dist/diwa-components/p-66c53adc.entry.js +2 -0
  194. package/dist/diwa-components/p-66c53adc.entry.js.map +1 -0
  195. package/dist/diwa-components/{p-6253fff6.entry.js → p-71c45961.entry.js} +2 -2
  196. package/dist/diwa-components/{p-358e1177.entry.js → p-78b16866.entry.js} +2 -2
  197. package/dist/diwa-components/p-7a99a2aa.entry.js +2 -0
  198. package/dist/diwa-components/p-7a99a2aa.entry.js.map +1 -0
  199. package/dist/diwa-components/p-7dc7291f.entry.js +2 -0
  200. package/dist/diwa-components/{p-09a9e0a0.entry.js → p-8369c48e.entry.js} +2 -2
  201. package/dist/diwa-components/{p-c0614fb1.entry.js → p-8506ea0c.entry.js} +2 -2
  202. package/dist/diwa-components/p-863c88a4.entry.js +2 -0
  203. package/dist/diwa-components/{p-339f6ba7.entry.js.map → p-863c88a4.entry.js.map} +1 -1
  204. package/dist/diwa-components/{p-ba1ffa71.entry.js → p-87932af2.entry.js} +2 -2
  205. package/dist/diwa-components/{p-48009a79.entry.js → p-926e283b.entry.js} +2 -2
  206. package/dist/diwa-components/p-952af214.entry.js +2 -0
  207. package/dist/diwa-components/p-952af214.entry.js.map +1 -0
  208. package/dist/diwa-components/{p-4ff58224.entry.js → p-95b0fdea.entry.js} +2 -2
  209. package/dist/diwa-components/p-9910d570.entry.js +2 -0
  210. package/dist/diwa-components/p-9910d570.entry.js.map +1 -0
  211. package/dist/diwa-components/{p-20fd1505.entry.js → p-998dd88e.entry.js} +2 -2
  212. package/dist/diwa-components/p-9ade0403.entry.js +2 -0
  213. package/dist/diwa-components/{p-57db0c31.entry.js → p-9c89e586.entry.js} +2 -2
  214. package/dist/diwa-components/p-b072ff72.entry.js +2 -0
  215. package/dist/diwa-components/p-b072ff72.entry.js.map +1 -0
  216. package/dist/diwa-components/{p-565f623e.entry.js → p-bd501daa.entry.js} +2 -2
  217. package/dist/diwa-components/{p-c1c85f9e.entry.js → p-c6ca8d8b.entry.js} +2 -2
  218. package/dist/diwa-components/{p-53e21a74.entry.js → p-c78591ce.entry.js} +2 -2
  219. package/dist/diwa-components/{p-996f7110.entry.js → p-cc0e1662.entry.js} +2 -2
  220. package/dist/diwa-components/{p-711e295e.entry.js → p-d25377eb.entry.js} +2 -2
  221. package/dist/diwa-components/{p-7f0ce623.entry.js → p-d917625e.entry.js} +2 -2
  222. package/dist/diwa-components/{p-d0762292.entry.js → p-db70e030.entry.js} +2 -2
  223. package/dist/diwa-components/p-db70e030.entry.js.map +1 -0
  224. package/dist/diwa-components/p-def36bc4.entry.js +2 -0
  225. package/dist/diwa-components/p-def36bc4.entry.js.map +1 -0
  226. package/dist/diwa-components/p-e137afc9.entry.js +2 -0
  227. package/dist/diwa-components/{p-666844e0.entry.js → p-e1935375.entry.js} +2 -2
  228. package/dist/diwa-components/{p-87ea8001.entry.js → p-e602c199.entry.js} +2 -2
  229. package/dist/diwa-components/{p-9f140e14.entry.js → p-e9673253.entry.js} +2 -2
  230. package/dist/diwa-components/p-f44d4091.entry.js +2 -0
  231. package/dist/diwa-components/p-f44d4091.entry.js.map +1 -0
  232. package/dist/diwa-components/p-f60f1d81.entry.js +2 -0
  233. package/dist/diwa-components/p-fae653f7.entry.js +2 -0
  234. package/dist/esm/diwa-checkbox.entry.js +1 -3
  235. package/dist/esm/diwa-checkbox.entry.js.map +1 -1
  236. package/dist/esm/diwa-components.js +1 -1
  237. package/dist/esm/diwa-heading.entry.js +122 -0
  238. package/dist/esm/diwa-heading.entry.js.map +1 -0
  239. package/dist/esm/diwa-icon.entry.js +1 -1
  240. package/dist/esm/diwa-inline-notification.entry.js +1 -1
  241. package/dist/esm/diwa-input-date.entry.js +1 -1
  242. package/dist/esm/diwa-input-email.entry.js +1 -1
  243. package/dist/esm/diwa-input-month.entry.js +1 -1
  244. package/dist/esm/diwa-input-number.entry.js +1 -1
  245. package/dist/esm/diwa-input-password.entry.js +1 -1
  246. package/dist/esm/diwa-input-search.entry.js +1 -1
  247. package/dist/esm/diwa-input-tel.entry.js +1 -1
  248. package/dist/esm/diwa-input-text.entry.js +1 -1
  249. package/dist/esm/diwa-input-time.entry.js +1 -1
  250. package/dist/esm/diwa-input-url.entry.js +1 -1
  251. package/dist/esm/diwa-input-week.entry.js +1 -1
  252. package/dist/esm/diwa-input.entry.js +1 -1
  253. package/dist/esm/diwa-link-pure.entry.js +1 -1
  254. package/dist/esm/diwa-link.entry.js +1 -1
  255. package/dist/esm/diwa-modal.entry.js +1 -1
  256. package/dist/esm/diwa-multi-select-option.entry.js +1 -1
  257. package/dist/esm/diwa-multi-select.entry.js +2 -2
  258. package/dist/esm/diwa-pagination.entry.js +1 -1
  259. package/dist/esm/diwa-pin-code.entry.js +2 -2
  260. package/dist/esm/diwa-popover.entry.js +1 -1
  261. package/dist/esm/diwa-radio-group-item.entry.js +2 -3
  262. package/dist/esm/diwa-radio-group-item.entry.js.map +1 -1
  263. package/dist/esm/diwa-radio-group.entry.js +1 -1
  264. package/dist/esm/diwa-scroller.entry.js +23 -13
  265. package/dist/esm/diwa-scroller.entry.js.map +1 -1
  266. package/dist/esm/diwa-segmented-control-item.entry.js +1 -1
  267. package/dist/esm/diwa-segmented-control.entry.js +1 -1
  268. package/dist/esm/diwa-select-option.entry.js +24 -10
  269. package/dist/esm/diwa-select-option.entry.js.map +1 -1
  270. package/dist/esm/diwa-select.entry.js +15 -1
  271. package/dist/esm/diwa-select.entry.js.map +1 -1
  272. package/dist/esm/diwa-spinner.entry.js +1 -1
  273. package/dist/esm/diwa-stepper-horizontal-item.entry.js +1 -1
  274. package/dist/esm/diwa-stepper-horizontal.entry.js +1 -1
  275. package/dist/esm/diwa-switch.entry.js +1 -1
  276. package/dist/esm/diwa-table-body.entry.js +1 -1
  277. package/dist/esm/diwa-table-cell.entry.js +15 -15
  278. package/dist/esm/diwa-table-cell.entry.js.map +1 -1
  279. package/dist/esm/diwa-table-head-cell.entry.js +64 -53
  280. package/dist/esm/diwa-table-head-cell.entry.js.map +1 -1
  281. package/dist/esm/diwa-table-head.entry.js +16 -11
  282. package/dist/esm/diwa-table-head.entry.js.map +1 -1
  283. package/dist/esm/diwa-table-row.entry.js +11 -10
  284. package/dist/esm/diwa-table-row.entry.js.map +1 -1
  285. package/dist/esm/diwa-table.entry.js +83 -43
  286. package/dist/esm/diwa-table.entry.js.map +1 -1
  287. package/dist/esm/diwa-tabs-bar.entry.js +1 -1
  288. package/dist/esm/diwa-tabs-item.entry.js +1 -1
  289. package/dist/esm/diwa-tabs.entry.js +12 -12
  290. package/dist/esm/diwa-tabs.entry.js.map +1 -1
  291. package/dist/esm/diwa-tag-dismissible.entry.js +6 -8
  292. package/dist/esm/diwa-tag-dismissible.entry.js.map +1 -1
  293. package/dist/esm/diwa-tag.entry.js +2 -2
  294. package/dist/esm/diwa-tag.entry.js.map +1 -1
  295. package/dist/esm/diwa-text-list-item.entry.js +1 -1
  296. package/dist/esm/diwa-text-list.entry.js +1 -1
  297. package/dist/esm/diwa-text.entry.js +1 -1
  298. package/dist/esm/diwa-textarea.entry.js +1 -1
  299. package/dist/esm/diwa-toast-item.entry.js +1 -1
  300. package/dist/esm/diwa-toast.entry.js +111 -17
  301. package/dist/esm/diwa-toast.entry.js.map +1 -1
  302. package/dist/esm/loader.js +1 -1
  303. package/dist/types/components/diwa-heading/diwa-heading-styles.d.ts +3 -0
  304. package/dist/types/components/diwa-heading/diwa-heading-utils.d.ts +10 -0
  305. package/dist/types/components/diwa-heading/diwa-heading.d.ts +49 -0
  306. package/dist/types/components/diwa-heading/types.d.ts +17 -0
  307. package/dist/types/components/diwa-scroller/diwa-scroller-styles.d.ts +1 -1
  308. package/dist/types/components/diwa-scroller/diwa-scroller.d.ts +2 -1
  309. package/dist/types/components/diwa-select/diwa-select.d.ts +2 -0
  310. package/dist/types/components/diwa-select-option/diwa-select-option.d.ts +2 -0
  311. package/dist/types/components/diwa-table/diwa-table.d.ts +1 -1
  312. package/dist/types/components/diwa-toast/diwa-toast-manager.d.ts +34 -0
  313. package/dist/types/components/diwa-toast/diwa-toast.d.ts +12 -12
  314. package/dist/types/components.d.ts +144 -25
  315. package/dist-custom-elements/diwa-accordion.js +1 -1
  316. package/dist-custom-elements/diwa-button-pure.js +1 -1
  317. package/dist-custom-elements/diwa-button.js +1 -1
  318. package/dist-custom-elements/diwa-checkbox.js +1 -3
  319. package/dist-custom-elements/diwa-checkbox.js.map +1 -1
  320. package/dist-custom-elements/diwa-flyout.js +2 -2
  321. package/dist-custom-elements/diwa-heading.d.ts +11 -0
  322. package/dist-custom-elements/diwa-heading.js +149 -0
  323. package/dist-custom-elements/diwa-heading.js.map +1 -0
  324. package/dist-custom-elements/diwa-icon.js +1 -1
  325. package/dist-custom-elements/diwa-inline-notification.js +3 -3
  326. package/dist-custom-elements/diwa-input-date.js +1 -1
  327. package/dist-custom-elements/diwa-input-email.js +1 -1
  328. package/dist-custom-elements/diwa-input-month.js +1 -1
  329. package/dist-custom-elements/diwa-input-number.js +1 -1
  330. package/dist-custom-elements/diwa-input-password.js +2 -2
  331. package/dist-custom-elements/diwa-input-search.js +2 -2
  332. package/dist-custom-elements/diwa-input-tel.js +1 -1
  333. package/dist-custom-elements/diwa-input-text.js +1 -1
  334. package/dist-custom-elements/diwa-input-time.js +1 -1
  335. package/dist-custom-elements/diwa-input-url.js +1 -1
  336. package/dist-custom-elements/diwa-input-week.js +1 -1
  337. package/dist-custom-elements/diwa-input.js +1 -1
  338. package/dist-custom-elements/diwa-link-pure.js +2 -2
  339. package/dist-custom-elements/diwa-link.js +2 -2
  340. package/dist-custom-elements/diwa-modal.js +1 -1
  341. package/dist-custom-elements/diwa-multi-select-option.js +1 -1
  342. package/dist-custom-elements/diwa-multi-select.js +2 -2
  343. package/dist-custom-elements/diwa-pagination.js +1 -1
  344. package/dist-custom-elements/diwa-pin-code.js +2 -2
  345. package/dist-custom-elements/diwa-popover.js +1 -1
  346. package/dist-custom-elements/diwa-radio-group-item.js +2 -3
  347. package/dist-custom-elements/diwa-radio-group-item.js.map +1 -1
  348. package/dist-custom-elements/diwa-radio-group.js +1 -1
  349. package/dist-custom-elements/diwa-scroller.js +24 -14
  350. package/dist-custom-elements/diwa-scroller.js.map +1 -1
  351. package/dist-custom-elements/diwa-segmented-control-item.js +1 -1
  352. package/dist-custom-elements/diwa-segmented-control.js +1 -1
  353. package/dist-custom-elements/diwa-select-option.js +25 -10
  354. package/dist-custom-elements/diwa-select-option.js.map +1 -1
  355. package/dist-custom-elements/diwa-select.js +16 -1
  356. package/dist-custom-elements/diwa-select.js.map +1 -1
  357. package/dist-custom-elements/diwa-spinner.js +1 -1
  358. package/dist-custom-elements/diwa-stepper-horizontal-item.js +1 -1
  359. package/dist-custom-elements/diwa-stepper-horizontal.js +1 -1
  360. package/dist-custom-elements/diwa-switch.js +2 -2
  361. package/dist-custom-elements/diwa-table-body.js +1 -1
  362. package/dist-custom-elements/diwa-table-cell.js +15 -15
  363. package/dist-custom-elements/diwa-table-cell.js.map +1 -1
  364. package/dist-custom-elements/diwa-table-head-cell.js +64 -53
  365. package/dist-custom-elements/diwa-table-head-cell.js.map +1 -1
  366. package/dist-custom-elements/diwa-table-head.js +16 -11
  367. package/dist-custom-elements/diwa-table-head.js.map +1 -1
  368. package/dist-custom-elements/diwa-table-row.js +11 -10
  369. package/dist-custom-elements/diwa-table-row.js.map +1 -1
  370. package/dist-custom-elements/diwa-table.js +83 -43
  371. package/dist-custom-elements/diwa-table.js.map +1 -1
  372. package/dist-custom-elements/diwa-tabs-bar.js +1 -1
  373. package/dist-custom-elements/diwa-tabs-item.js +1 -1
  374. package/dist-custom-elements/diwa-tabs.js +12 -12
  375. package/dist-custom-elements/diwa-tabs.js.map +1 -1
  376. package/dist-custom-elements/diwa-tag-dismissible.js +6 -8
  377. package/dist-custom-elements/diwa-tag-dismissible.js.map +1 -1
  378. package/dist-custom-elements/diwa-tag.js +3 -3
  379. package/dist-custom-elements/diwa-tag.js.map +1 -1
  380. package/dist-custom-elements/diwa-text-list-item.js +1 -1
  381. package/dist-custom-elements/diwa-text-list.js +1 -1
  382. package/dist-custom-elements/diwa-text.js +1 -1
  383. package/dist-custom-elements/diwa-textarea.js +1 -1
  384. package/dist-custom-elements/diwa-toast-item.js +1 -1
  385. package/dist-custom-elements/diwa-toast.js +113 -19
  386. package/dist-custom-elements/diwa-toast.js.map +1 -1
  387. package/dist-custom-elements/{p-54e5b3fb.js → p-105f3f97.js} +2 -2
  388. package/dist-custom-elements/{p-54e5b3fb.js.map → p-105f3f97.js.map} +1 -1
  389. package/dist-custom-elements/{p-f480bce8.js → p-7c951f7f.js} +2 -2
  390. package/dist-custom-elements/{p-f480bce8.js.map → p-7c951f7f.js.map} +1 -1
  391. package/dist-custom-elements/{p-302af10d.js → p-8972ae69.js} +2 -2
  392. package/dist-custom-elements/{p-302af10d.js.map → p-8972ae69.js.map} +1 -1
  393. package/dist-custom-elements/{p-ed901570.js → p-b7255dc4.js} +2 -2
  394. package/dist-custom-elements/{p-ed901570.js.map → p-b7255dc4.js.map} +1 -1
  395. package/package.json +11 -9
  396. package/dist/diwa-components/p-043e3e19.entry.js +0 -2
  397. package/dist/diwa-components/p-05988905.entry.js +0 -2
  398. package/dist/diwa-components/p-08c584fb.entry.js +0 -2
  399. package/dist/diwa-components/p-08c584fb.entry.js.map +0 -1
  400. package/dist/diwa-components/p-0cbe8ed4.entry.js +0 -2
  401. package/dist/diwa-components/p-0cbe8ed4.entry.js.map +0 -1
  402. package/dist/diwa-components/p-139f619d.entry.js +0 -2
  403. package/dist/diwa-components/p-139f619d.entry.js.map +0 -1
  404. package/dist/diwa-components/p-178d18c2.entry.js +0 -2
  405. package/dist/diwa-components/p-178d18c2.entry.js.map +0 -1
  406. package/dist/diwa-components/p-2b72a324.entry.js +0 -2
  407. package/dist/diwa-components/p-339f6ba7.entry.js +0 -2
  408. package/dist/diwa-components/p-3b7a1431.entry.js +0 -2
  409. package/dist/diwa-components/p-3b7a1431.entry.js.map +0 -1
  410. package/dist/diwa-components/p-4a84fee8.entry.js +0 -2
  411. package/dist/diwa-components/p-4ac5a26e.entry.js.map +0 -1
  412. package/dist/diwa-components/p-51673c06.entry.js +0 -2
  413. package/dist/diwa-components/p-51673c06.entry.js.map +0 -1
  414. package/dist/diwa-components/p-5c2325aa.entry.js +0 -2
  415. package/dist/diwa-components/p-5cd79382.entry.js +0 -2
  416. package/dist/diwa-components/p-67950f59.entry.js +0 -2
  417. package/dist/diwa-components/p-67950f59.entry.js.map +0 -1
  418. package/dist/diwa-components/p-8012c384.entry.js +0 -2
  419. package/dist/diwa-components/p-8012c384.entry.js.map +0 -1
  420. package/dist/diwa-components/p-9088f057.entry.js +0 -2
  421. package/dist/diwa-components/p-94f603c2.entry.js +0 -2
  422. package/dist/diwa-components/p-94f603c2.entry.js.map +0 -1
  423. package/dist/diwa-components/p-b7132ea7.entry.js +0 -2
  424. package/dist/diwa-components/p-b7132ea7.entry.js.map +0 -1
  425. package/dist/diwa-components/p-b988c5b3.entry.js +0 -2
  426. package/dist/diwa-components/p-b988c5b3.entry.js.map +0 -1
  427. package/dist/diwa-components/p-bc2eecd2.entry.js +0 -2
  428. package/dist/diwa-components/p-cf960cf6.entry.js +0 -2
  429. package/dist/diwa-components/p-d0762292.entry.js.map +0 -1
  430. package/dist/diwa-components/p-f22b6145.entry.js +0 -2
  431. package/dist/diwa-components/p-f22b6145.entry.js.map +0 -1
  432. /package/dist/diwa-components/{p-2b54c761.entry.js.map → p-09f2e643.entry.js.map} +0 -0
  433. /package/dist/diwa-components/{p-1022a474.entry.js.map → p-1250d0c7.entry.js.map} +0 -0
  434. /package/dist/diwa-components/{p-1a1bd7ed.entry.js.map → p-13e71247.entry.js.map} +0 -0
  435. /package/dist/diwa-components/{p-711e295e.entry.js.map → p-1830772d.entry.js.map} +0 -0
  436. /package/dist/diwa-components/{p-f4a589b5.entry.js.map → p-1d708e1e.entry.js.map} +0 -0
  437. /package/dist/diwa-components/{p-bb04cdd6.entry.js.map → p-238da82a.entry.js.map} +0 -0
  438. /package/dist/diwa-components/{p-c896dfa5.entry.js.map → p-3269a4b7.entry.js.map} +0 -0
  439. /package/dist/diwa-components/{p-fbe73240.entry.js.map → p-3660b09a.entry.js.map} +0 -0
  440. /package/dist/diwa-components/{p-c37374ab.entry.js.map → p-36b004e9.entry.js.map} +0 -0
  441. /package/dist/diwa-components/{p-851cbfb8.entry.js.map → p-3b38fa01.entry.js.map} +0 -0
  442. /package/dist/diwa-components/{p-4a84fee8.entry.js.map → p-3fb5cc30.entry.js.map} +0 -0
  443. /package/dist/diwa-components/{p-5cd79382.entry.js.map → p-5a597e27.entry.js.map} +0 -0
  444. /package/dist/diwa-components/{p-043e3e19.entry.js.map → p-66c15f66.entry.js.map} +0 -0
  445. /package/dist/diwa-components/{p-6253fff6.entry.js.map → p-71c45961.entry.js.map} +0 -0
  446. /package/dist/diwa-components/{p-358e1177.entry.js.map → p-78b16866.entry.js.map} +0 -0
  447. /package/dist/diwa-components/{p-05988905.entry.js.map → p-7dc7291f.entry.js.map} +0 -0
  448. /package/dist/diwa-components/{p-09a9e0a0.entry.js.map → p-8369c48e.entry.js.map} +0 -0
  449. /package/dist/diwa-components/{p-bc2eecd2.entry.js.map → p-8506ea0c.entry.js.map} +0 -0
  450. /package/dist/diwa-components/{p-ba1ffa71.entry.js.map → p-87932af2.entry.js.map} +0 -0
  451. /package/dist/diwa-components/{p-48009a79.entry.js.map → p-926e283b.entry.js.map} +0 -0
  452. /package/dist/diwa-components/{p-4ff58224.entry.js.map → p-95b0fdea.entry.js.map} +0 -0
  453. /package/dist/diwa-components/{p-20fd1505.entry.js.map → p-998dd88e.entry.js.map} +0 -0
  454. /package/dist/diwa-components/{p-5c2325aa.entry.js.map → p-9ade0403.entry.js.map} +0 -0
  455. /package/dist/diwa-components/{p-57db0c31.entry.js.map → p-9c89e586.entry.js.map} +0 -0
  456. /package/dist/diwa-components/{p-565f623e.entry.js.map → p-bd501daa.entry.js.map} +0 -0
  457. /package/dist/diwa-components/{p-c1c85f9e.entry.js.map → p-c6ca8d8b.entry.js.map} +0 -0
  458. /package/dist/diwa-components/{p-53e21a74.entry.js.map → p-c78591ce.entry.js.map} +0 -0
  459. /package/dist/diwa-components/{p-996f7110.entry.js.map → p-cc0e1662.entry.js.map} +0 -0
  460. /package/dist/diwa-components/{p-9088f057.entry.js.map → p-d25377eb.entry.js.map} +0 -0
  461. /package/dist/diwa-components/{p-7f0ce623.entry.js.map → p-d917625e.entry.js.map} +0 -0
  462. /package/dist/diwa-components/{p-2b72a324.entry.js.map → p-e137afc9.entry.js.map} +0 -0
  463. /package/dist/diwa-components/{p-666844e0.entry.js.map → p-e1935375.entry.js.map} +0 -0
  464. /package/dist/diwa-components/{p-87ea8001.entry.js.map → p-e602c199.entry.js.map} +0 -0
  465. /package/dist/diwa-components/{p-9f140e14.entry.js.map → p-e9673253.entry.js.map} +0 -0
  466. /package/dist/diwa-components/{p-cf960cf6.entry.js.map → p-f60f1d81.entry.js.map} +0 -0
  467. /package/dist/diwa-components/{p-c0614fb1.entry.js.map → p-fae653f7.entry.js.map} +0 -0
@@ -24,11 +24,11 @@ const getComponentCss = () => `
24
24
  display: none;
25
25
  }
26
26
 
27
- .tab-btn {
28
- display: inline-flex;
29
- align-items: center;
30
- min-height: var(--diwa-touch-target-min-size, 44px);
31
- padding: var(--diwa-space-4) var(--diwa-space-7);
27
+ .tab-btn {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ min-height: var(--diwa-touch-target-min-size, 44px);
31
+ padding: var(--diwa-space-4) var(--diwa-space-7);
32
32
  border: none;
33
33
  border-bottom: var(--diwa-border-width-base) solid transparent;
34
34
  background: transparent;
@@ -42,11 +42,11 @@ const getComponentCss = () => `
42
42
  font-weight: var(--diwa-font-weight-medium);
43
43
  }
44
44
 
45
- @media (hover: hover) and (pointer: fine) {
46
- .tab-btn:hover {
47
- color: var(--diwa-text-primary);
48
- }
49
- }
45
+ @media (hover: hover) and (pointer: fine) {
46
+ .tab-btn:hover {
47
+ color: var(--diwa-text-primary);
48
+ }
49
+ }
50
50
 
51
51
  .tab-btn[aria-selected="true"] {
52
52
  color: var(--diwa-accent);
@@ -57,7 +57,7 @@ const getComponentCss = () => `
57
57
  ${getFocusStyle('.tab-btn')}
58
58
 
59
59
  .panels {
60
- padding-top: var(--diwa-space-4);
60
+ padding: var(--diwa-space-4) var(--diwa-space-7);
61
61
  }
62
62
 
63
63
  ${getReducedMotionStyle('.tab-btn')}
@@ -102,7 +102,7 @@ const DiwaTabs$1 = /*@__PURE__*/ proxyCustomElement(class DiwaTabs extends H {
102
102
  }
103
103
  render() {
104
104
  const items = this.getItems();
105
- return (h(Host, { key: 'fc8d9535c8fc57e335842f9687e864679320a5ea', "data-theme": this.theme }, h("style", { key: '471a5b372635bef38e38198b5793b3e3f96cb17b', innerHTML: getComponentCss() }), h("div", { key: '0321394c0b6cdd768025d9fd7cee711a05197cfa', class: "bar", role: "tablist" }, items.map((item, i) => (h("button", { class: "tab-btn", key: i, role: "tab", type: "button", "aria-selected": i === this.activeTabIndex ? 'true' : 'false', "aria-controls": `panel-${i}`, tabindex: i === this.activeTabIndex ? 0 : -1, onClick: () => this.handleTabClick(i) }, item.label || `Tab ${i + 1}`)))), h("div", { key: 'a1480ac6ff722ffc09449141e79070801e5886c7', class: "panels" }, h("slot", { key: '98c11b57681a9e9831c233adcf2be283c5fdb0b7' }))));
105
+ return (h(Host, { key: '58e19e00620feeab361bb40e4b8ae53a5aae0bd4', "data-theme": this.theme }, h("style", { key: '3ff3a46b7df5caeaf1c670f72ca725f8218618c7', innerHTML: getComponentCss() }), h("div", { key: 'a1473f8f9bb7d88176d8825879985eed0a3fabba', class: "bar", role: "tablist" }, items.map((item, i) => (h("button", { class: "tab-btn", key: i, role: "tab", type: "button", "aria-selected": i === this.activeTabIndex ? 'true' : 'false', "aria-controls": `panel-${i}`, tabindex: i === this.activeTabIndex ? 0 : -1, onClick: () => this.handleTabClick(i) }, item.label || `Tab ${i + 1}`)))), h("div", { key: '49a664dd1f219421c05963cea3c4172e118b280a', class: "panels" }, h("slot", { key: '41c47202452a8de31d9e64c20cb4728047a53b5a' }))));
106
106
  }
107
107
  get host() { return this; }
108
108
  static get watchers() { return {
@@ -1 +1 @@
1
- {"file":"diwa-tabs.js","mappings":";;;AAEO,MAAM,eAAe,GAAG,MAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqDzC,aAAa,CAAC,UAAU,CAAC;;;;;;IAMzB,qBAAqB,CAAC,UAAU,CAAC;CACpC;;MCvCYA,UAAQ;IAJrB;;;;;;QAQ2B,UAAK,GAAU,MAAM,CAAC;;QAI/C,mBAAc,GAAW,CAAC,CAAC;KAoE5B;IA3DC,iBAAiB;QACf,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,gBAAgB;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,kBAAkB;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,QAAQ;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAA8B,CAAC;KAC9F;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,IAAY,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC;YACjD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;SACvC,CAAC,CAAC;KACJ;IAEO,cAAc,CAAC,KAAa;QAClC,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;YAAE,OAAO;QAC1C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,MAAM;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,QACE,EAAC,IAAI,mEAAa,IAAI,CAAC,KAAK,IAC1B,8DAAO,SAAS,EAAE,eAAe,EAAE,GAAI,EACvC,4DAAK,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,SAAS,IAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACjB,cACE,KAAK,EAAC,SAAS,EACf,GAAG,EAAE,CAAC,EACN,IAAI,EAAC,KAAK,EACV,IAAI,EAAC,QAAQ,mBACE,CAAC,KAAK,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,OAAO,mBAC5C,SAAS,CAAC,EAAE,EAC3B,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,EAC5C,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAEnC,IAAY,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAC/B,CACV,CAAC,CACE,EACN,4DAAK,KAAK,EAAC,QAAQ,IACjB,8DAAQ,CACJ,CACD,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["DiwaTabs"],"sources":["src/components/diwa-tabs/diwa-tabs-styles.ts","src/components/diwa-tabs/diwa-tabs.tsx"],"sourcesContent":["import { getFocusStyle, getReducedMotionStyle } from '../../utils/styles';\r\n\r\nexport const getComponentCss = (): string => `\r\n :host {\r\n display: block;\r\n font-family: var(--diwa-font-family-base);\r\n }\r\n\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n\r\n .bar {\r\n display: flex;\r\n align-items: flex-end;\r\n gap: 0;\r\n border-bottom: var(--diwa-border-width-thin) solid var(--diwa-border);\r\n overflow-x: auto;\r\n scrollbar-width: none;\r\n }\r\n\r\n .bar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .tab-btn {\n display: inline-flex;\n align-items: center;\n min-height: var(--diwa-touch-target-min-size, 44px);\n padding: var(--diwa-space-4) var(--diwa-space-7);\n border: none;\r\n border-bottom: var(--diwa-border-width-base) solid transparent;\r\n background: transparent;\r\n font-size: var(--diwa-font-size-base);\r\n font-family: inherit;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n margin-bottom: -1px;\r\n transition: color var(--diwa-transition-base), border-color var(--diwa-transition-base);\r\n color: var(--diwa-text-secondary);\r\n font-weight: var(--diwa-font-weight-medium);\r\n }\r\n\r\n @media (hover: hover) and (pointer: fine) {\n .tab-btn:hover {\n color: var(--diwa-text-primary);\n }\n }\n\r\n .tab-btn[aria-selected=\"true\"] {\r\n color: var(--diwa-accent);\r\n border-bottom-color: var(--diwa-accent);\r\n font-weight: var(--diwa-font-weight-medium);\r\n }\r\n\r\n ${getFocusStyle('.tab-btn')}\r\n\r\n .panels {\r\n padding-top: var(--diwa-space-4);\r\n }\r\n\r\n ${getReducedMotionStyle('.tab-btn')}\r\n`;\r\n","import { Component, Element, Event, type EventEmitter, Host, Prop, Watch, h } from '@stencil/core';\r\nimport type { TabsUpdateEventDetail } from './types';\r\nimport type { Theme } from '../../utils/styles';\r\nimport { getComponentCss } from './diwa-tabs-styles';\r\n\r\n/**\r\n * @component diwa-tabs\r\n *\r\n * A full tabs component consisting of an integrated tab bar and panel area.\r\n * Accepts `diwa-tabs-item` elements as children. The component renders\r\n * its own horizontal tab buttons and shows only the panel for the active\r\n * tab.\r\n *\r\n * Usage:\r\n * <diwa-tabs active-tab-index={0} onupdate={e => setTab(e.detail.activeTabIndex)}>\r\n * <diwa-tabs-item label=\"Overview\">Content A</diwa-tabs-item>\r\n * <diwa-tabs-item label=\"Details\">Content B</diwa-tabs-item>\r\n * </diwa-tabs>\r\n */\r\n@Component({\r\n tag: 'diwa-tabs',\r\n shadow: true,\r\n})\r\nexport class DiwaTabs {\r\n @Element() host!: HTMLDiwaTabsElement;\r\n\r\n /** Per-component theme override. */\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n /** Zero-based index of the currently active tab. */\r\n @Prop({ mutable: true, attribute: 'active-tab-index' })\r\n activeTabIndex: number = 0;\r\n\r\n /**\r\n * Emitted when the user selects a different tab.\r\n */\r\n @Event({ bubbles: false, composed: false })\r\n update!: EventEmitter<TabsUpdateEventDetail>;\r\n\r\n @Watch('activeTabIndex')\r\n handleIndexChange() {\r\n this.syncItems();\r\n }\r\n\r\n componentDidLoad() {\r\n this.syncItems();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.syncItems();\r\n }\r\n\r\n private getItems(): HTMLDiwaTabsItemElement[] {\r\n return Array.from(this.host.querySelectorAll('diwa-tabs-item')) as HTMLDiwaTabsItemElement[];\r\n }\r\n\r\n private syncItems() {\r\n const items = this.getItems();\r\n items.forEach((item, i) => {\r\n (item as any).active = i === this.activeTabIndex;\r\n item.setAttribute('id', `panel-${i}`);\r\n });\r\n }\r\n\r\n private handleTabClick(index: number) {\r\n if (index === this.activeTabIndex) return;\r\n this.activeTabIndex = index;\r\n this.update.emit({ activeTabIndex: index });\r\n this.syncItems();\r\n }\r\n\r\n render() {\r\n const items = this.getItems();\r\n\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style innerHTML={getComponentCss()} />\r\n <div class=\"bar\" role=\"tablist\">\r\n {items.map((item, i) => (\r\n <button\r\n class=\"tab-btn\"\r\n key={i}\r\n role=\"tab\"\r\n type=\"button\"\r\n aria-selected={i === this.activeTabIndex ? 'true' : 'false'}\r\n aria-controls={`panel-${i}`}\r\n tabindex={i === this.activeTabIndex ? 0 : -1}\r\n onClick={() => this.handleTabClick(i)}\r\n >\r\n {(item as any).label || `Tab ${i + 1}`}\r\n </button>\r\n ))}\r\n </div>\r\n <div class=\"panels\">\r\n <slot />\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
1
+ {"file":"diwa-tabs.js","mappings":";;;AAEO,MAAM,eAAe,GAAG,MAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqDzC,aAAa,CAAC,UAAU,CAAC;;;;;;IAMzB,qBAAqB,CAAC,UAAU,CAAC;CACpC;;MCvCYA,UAAQ;IAJrB;;;;;;QAQ2B,UAAK,GAAU,MAAM,CAAC;;QAI/C,mBAAc,GAAW,CAAC,CAAC;KAoE5B;IA3DC,iBAAiB;QACf,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,gBAAgB;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,kBAAkB;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAEO,QAAQ;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAA8B,CAAC;KAC9F;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,IAAY,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC;YACjD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;SACvC,CAAC,CAAC;KACJ;IAEO,cAAc,CAAC,KAAa;QAClC,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;YAAE,OAAO;QAC1C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,MAAM;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,QACE,EAAC,IAAI,mEAAa,IAAI,CAAC,KAAK,IAC1B,8DAAO,SAAS,EAAE,eAAe,EAAE,GAAI,EACvC,4DAAK,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,SAAS,IAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MACjB,cACE,KAAK,EAAC,SAAS,EACf,GAAG,EAAE,CAAC,EACN,IAAI,EAAC,KAAK,EACV,IAAI,EAAC,QAAQ,mBACE,CAAC,KAAK,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,OAAO,mBAC5C,SAAS,CAAC,EAAE,EAC3B,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,EAC5C,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAEnC,IAAY,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAC/B,CACV,CAAC,CACE,EACN,4DAAK,KAAK,EAAC,QAAQ,IACjB,8DAAQ,CACJ,CACD,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["DiwaTabs"],"sources":["src/components/diwa-tabs/diwa-tabs-styles.ts","src/components/diwa-tabs/diwa-tabs.tsx"],"sourcesContent":["import { getFocusStyle, getReducedMotionStyle } from '../../utils/styles';\r\n\r\nexport const getComponentCss = (): string => `\r\n :host {\r\n display: block;\r\n font-family: var(--diwa-font-family-base);\r\n }\r\n\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n\r\n .bar {\r\n display: flex;\r\n align-items: flex-end;\r\n gap: 0;\r\n border-bottom: var(--diwa-border-width-thin) solid var(--diwa-border);\r\n overflow-x: auto;\r\n scrollbar-width: none;\r\n }\r\n\r\n .bar::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .tab-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n min-height: var(--diwa-touch-target-min-size, 44px);\r\n padding: var(--diwa-space-4) var(--diwa-space-7);\r\n border: none;\r\n border-bottom: var(--diwa-border-width-base) solid transparent;\r\n background: transparent;\r\n font-size: var(--diwa-font-size-base);\r\n font-family: inherit;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n margin-bottom: -1px;\r\n transition: color var(--diwa-transition-base), border-color var(--diwa-transition-base);\r\n color: var(--diwa-text-secondary);\r\n font-weight: var(--diwa-font-weight-medium);\r\n }\r\n\r\n @media (hover: hover) and (pointer: fine) {\r\n .tab-btn:hover {\r\n color: var(--diwa-text-primary);\r\n }\r\n }\r\n\r\n .tab-btn[aria-selected=\"true\"] {\r\n color: var(--diwa-accent);\r\n border-bottom-color: var(--diwa-accent);\r\n font-weight: var(--diwa-font-weight-medium);\r\n }\r\n\r\n ${getFocusStyle('.tab-btn')}\r\n\r\n .panels {\r\n padding: var(--diwa-space-4) var(--diwa-space-7);\r\n }\r\n\r\n ${getReducedMotionStyle('.tab-btn')}\r\n`;\r\n","import { Component, Element, Event, type EventEmitter, Host, Prop, Watch, h } from '@stencil/core';\r\nimport type { TabsUpdateEventDetail } from './types';\r\nimport type { Theme } from '../../utils/styles';\r\nimport { getComponentCss } from './diwa-tabs-styles';\r\n\r\n/**\r\n * @component diwa-tabs\r\n *\r\n * A full tabs component consisting of an integrated tab bar and panel area.\r\n * Accepts `diwa-tabs-item` elements as children. The component renders\r\n * its own horizontal tab buttons and shows only the panel for the active\r\n * tab.\r\n *\r\n * Usage:\r\n * <diwa-tabs active-tab-index={0} onupdate={e => setTab(e.detail.activeTabIndex)}>\r\n * <diwa-tabs-item label=\"Overview\">Content A</diwa-tabs-item>\r\n * <diwa-tabs-item label=\"Details\">Content B</diwa-tabs-item>\r\n * </diwa-tabs>\r\n */\r\n@Component({\r\n tag: 'diwa-tabs',\r\n shadow: true,\r\n})\r\nexport class DiwaTabs {\r\n @Element() host!: HTMLDiwaTabsElement;\r\n\r\n /** Per-component theme override. */\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n /** Zero-based index of the currently active tab. */\r\n @Prop({ mutable: true, attribute: 'active-tab-index' })\r\n activeTabIndex: number = 0;\r\n\r\n /**\r\n * Emitted when the user selects a different tab.\r\n */\r\n @Event({ bubbles: false, composed: false })\r\n update!: EventEmitter<TabsUpdateEventDetail>;\r\n\r\n @Watch('activeTabIndex')\r\n handleIndexChange() {\r\n this.syncItems();\r\n }\r\n\r\n componentDidLoad() {\r\n this.syncItems();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.syncItems();\r\n }\r\n\r\n private getItems(): HTMLDiwaTabsItemElement[] {\r\n return Array.from(this.host.querySelectorAll('diwa-tabs-item')) as HTMLDiwaTabsItemElement[];\r\n }\r\n\r\n private syncItems() {\r\n const items = this.getItems();\r\n items.forEach((item, i) => {\r\n (item as any).active = i === this.activeTabIndex;\r\n item.setAttribute('id', `panel-${i}`);\r\n });\r\n }\r\n\r\n private handleTabClick(index: number) {\r\n if (index === this.activeTabIndex) return;\r\n this.activeTabIndex = index;\r\n this.update.emit({ activeTabIndex: index });\r\n this.syncItems();\r\n }\r\n\r\n render() {\r\n const items = this.getItems();\r\n\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style innerHTML={getComponentCss()} />\r\n <div class=\"bar\" role=\"tablist\">\r\n {items.map((item, i) => (\r\n <button\r\n class=\"tab-btn\"\r\n key={i}\r\n role=\"tab\"\r\n type=\"button\"\r\n aria-selected={i === this.activeTabIndex ? 'true' : 'false'}\r\n aria-controls={`panel-${i}`}\r\n tabindex={i === this.activeTabIndex ? 0 : -1}\r\n onClick={() => this.handleTabClick(i)}\r\n >\r\n {(item as any).label || `Tab ${i + 1}`}\r\n </button>\r\n ))}\r\n </div>\r\n <div class=\"panels\">\r\n <slot />\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
@@ -31,8 +31,8 @@ const getComponentCss = (variant, compact) => {
31
31
  const border = VARIANT_BORDER[variant];
32
32
  const paddingY = compact ? '1px' : '2px';
33
33
  const paddingX = compact ? '6px' : '10px';
34
+ const paddingXRight = compact ? '4px' : '6px';
34
35
  const fontSize = compact ? 'var(--diwa-font-size-sm)' : 'var(--diwa-font-size-md)';
35
- const iconSize = compact ? '12px' : '14px';
36
36
  return `
37
37
  :host {
38
38
  display: inline-flex;
@@ -44,11 +44,11 @@ const getComponentCss = (variant, compact) => {
44
44
  display: inline-flex;
45
45
  align-items: center;
46
46
  gap: var(--diwa-space-1);
47
- padding: ${paddingY} ${paddingX};
47
+ padding: ${paddingY} ${paddingXRight} ${paddingY} ${paddingX};
48
48
  font-family: var(--diwa-font-family-base);
49
49
  font-size: ${fontSize};
50
50
  font-weight: var(--diwa-font-weight-medium);
51
- line-height: var(--diwa-line-height-tight);
51
+ line-height: 1;
52
52
  color: ${color};
53
53
  background: ${bg};
54
54
  border: var(--diwa-border-width-thin) solid ${border};
@@ -60,9 +60,8 @@ const getComponentCss = (variant, compact) => {
60
60
  display: inline-flex;
61
61
  align-items: center;
62
62
  justify-content: center;
63
- width: ${iconSize};
64
- height: ${iconSize};
65
- margin-left: var(--diwa-space-0-5);
63
+ width: 12px;
64
+ height: 12px;
66
65
  padding: 0;
67
66
  background: none;
68
67
  border: none;
@@ -101,8 +100,7 @@ const DiwaTagDismissible$1 = /*@__PURE__*/ proxyCustomElement(class DiwaTagDismi
101
100
  };
102
101
  }
103
102
  render() {
104
- const iconSize = this.compact ? 12 : 14;
105
- return (h(Host, { key: 'c8ec3a53f5d72a1a8c3f7395287261167408263c', "data-theme": this.theme }, h("style", { key: 'b89acb19c8df5f132aa1a4eeeca2f81333340fdd', innerHTML: getComponentCss(this.variant, this.compact) }), h("span", { key: '6a82c4cb61b84eb631b7cc441314929ab2ab2496', class: "tag" }, h("slot", { key: '4236c4d1ac0f0579804b0a1994ced421670b685c' }), h("button", { key: '831e2295cbd23372f7ba0daa114bef27e0d8c25a', class: "dismiss", type: "button", "aria-label": this.label, onClick: this.handleDismiss }, h("svg", { key: '8172fd785be3d5cea0a0b38243aac3a1e9f2afa8', xmlns: "http://www.w3.org/2000/svg", width: iconSize, height: iconSize, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("line", { key: '632af21cd22791194ffdd4a3127b699b359191b6', x1: "18", y1: "6", x2: "6", y2: "18" }), h("line", { key: '45285993ae6ae899a06dab3d903c883632ef262a', x1: "6", y1: "6", x2: "18", y2: "18" }))))));
103
+ return (h(Host, { key: 'e38cfaa8ab96522f4fe516b64efcadd9a8c12661', "data-theme": this.theme }, h("style", { key: '3e8c178617ab71f172ee6878ad8f1260f6389aa7', innerHTML: getComponentCss(this.variant, this.compact) }), h("span", { key: '5b3f671bdb71327e7f2fb227ce29b6d9c8dea36f', class: "tag" }, h("slot", { key: 'e8372472821b469f1e3a262415595c3bd58345c5' }), h("button", { key: '093dfd628497cac1a886543eeb48927e68753822', class: "dismiss", type: "button", "aria-label": this.label, onClick: this.handleDismiss }, h("svg", { key: 'd56cdca4db4fbd9144a9c06eb4d12c44478fa3af', xmlns: "http://www.w3.org/2000/svg", width: 12, height: 12, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("line", { key: '047c1338afb7d612853d76c468ab926d810e77de', x1: "18", y1: "6", x2: "6", y2: "18" }), h("line", { key: 'f2576ea09474cb17cb4dbe74b878ccf62debf03e', x1: "6", y1: "6", x2: "18", y2: "18" }))))));
106
104
  }
107
105
  static get delegatesFocus() { return true; }
108
106
  }, [17, "diwa-tag-dismissible", {
@@ -1 +1 @@
1
- {"file":"diwa-tag-dismissible.js","mappings":"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","names":["DiwaTagDismissible"],"sources":["src/components/diwa-tag-dismissible/diwa-tag-dismissible-styles.ts","src/components/diwa-tag-dismissible/diwa-tag-dismissible.tsx"],"sourcesContent":["import type { TagVariant } from '../diwa-tag/types';\r\nimport { getFocusStyle, getReducedMotionStyle } from '../../utils/styles';\r\n\r\nconst VARIANT_BG: Record<TagVariant, string> = {\r\n neutral: 'var(--diwa-bg-surface)',\r\n primary: 'var(--diwa-accent-bg)',\r\n info: 'var(--diwa-notification-info-soft)',\r\n success: 'var(--diwa-notification-success-soft)',\r\n warning: 'var(--diwa-notification-warning-soft)',\r\n error: 'var(--diwa-notification-error-soft)',\r\n};\r\nconst VARIANT_COLOR: Record<TagVariant, string> = {\r\n neutral: 'var(--diwa-text-primary)',\r\n primary: 'var(--diwa-accent)',\r\n info: 'var(--diwa-notification-info)',\r\n success: 'var(--diwa-notification-success)',\r\n warning: 'var(--diwa-notification-warning)',\r\n error: 'var(--diwa-notification-error)',\r\n};\r\nconst VARIANT_BORDER: Record<TagVariant, string> = {\r\n neutral: 'var(--diwa-border)',\r\n primary: 'var(--diwa-accent)',\r\n info: 'var(--diwa-color-info-300)',\r\n success: 'transparent',\r\n warning: 'transparent',\r\n error: 'transparent',\r\n};\r\n\r\nexport const getComponentCss = (variant: TagVariant, compact: boolean): string => {\r\n const bg = VARIANT_BG[variant];\r\n const color = VARIANT_COLOR[variant];\r\n const border = VARIANT_BORDER[variant];\r\n const paddingY = compact ? '1px' : '2px';\r\n const paddingX = compact ? '6px' : '10px';\r\n const fontSize = compact ? 'var(--diwa-font-size-sm)' : 'var(--diwa-font-size-md)';\r\n const iconSize = compact ? '12px' : '14px';\r\n\r\n return `\r\n :host {\r\n display: inline-flex;\r\n }\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n .tag {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--diwa-space-1);\r\n padding: ${paddingY} ${paddingX};\r\n font-family: var(--diwa-font-family-base);\r\n font-size: ${fontSize};\r\n font-weight: var(--diwa-font-weight-medium);\r\n line-height: var(--diwa-line-height-tight);\r\n color: ${color};\r\n background: ${bg};\r\n border: var(--diwa-border-width-thin) solid ${border};\r\n border-radius: var(--diwa-radius-sm);\r\n white-space: nowrap;\r\n user-select: none;\r\n }\r\n .dismiss {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: ${iconSize};\r\n height: ${iconSize};\r\n margin-left: var(--diwa-space-0-5);\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: var(--diwa-radius-xs);\r\n color: inherit;\r\n cursor: pointer;\r\n flex-shrink: 0;\r\n opacity: var(--diwa-opacity-muted);\r\n transition: opacity var(--diwa-transition-base);\r\n }\r\n .dismiss:hover {\r\n opacity: 1;\r\n }\r\n ${getFocusStyle('.dismiss')}\r\n\r\n ${getReducedMotionStyle('.dismiss')}\r\n `;\r\n};\r\n","import { Component, Event, type EventEmitter, Host, Prop, h } from '@stencil/core';\r\nimport type { Theme } from '../../utils/styles';\r\nimport type { TagVariant } from './types';\r\nimport { getComponentCss } from './diwa-tag-dismissible-styles';\r\n\r\n/**\r\n * @slot default — Tag label content.\r\n */\r\n@Component({\r\n tag: 'diwa-tag-dismissible',\r\n shadow: { delegatesFocus: true },\r\n})\r\nexport class DiwaTagDismissible {\r\n /** Visual style variant. */\r\n @Prop({ reflect: true }) variant: TagVariant = 'neutral';\r\n\r\n /** Renders a compact (smaller) version of the tag. */\r\n @Prop({ reflect: true }) compact: boolean = false;\r\n\r\n /** Accessible label for the dismiss button. */\r\n @Prop() label?: string = 'Remove';\r\n\r\n /** Adapts the color when used on a light or dark background. */\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n /** Emitted when the dismiss button is clicked. */\r\n @Event({ bubbles: false, composed: false }) dismiss!: EventEmitter<void>;\r\n\r\n private handleDismiss = (): void => {\r\n this.dismiss.emit();\r\n };\r\n\r\n render() {\r\n const iconSize = this.compact ? 12 : 14;\r\n\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style innerHTML={getComponentCss(this.variant, this.compact)} />\r\n <span class=\"tag\">\r\n <slot />\r\n <button\r\n class=\"dismiss\"\r\n type=\"button\"\r\n aria-label={this.label}\r\n onClick={this.handleDismiss}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={iconSize}\r\n height={iconSize}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n >\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </span>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
1
+ {"file":"diwa-tag-dismissible.js","mappings":";;;AAGA,MAAM,UAAU,GAA+B;IAC7C,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAK,oCAAoC;IAC7C,OAAO,EAAE,uCAAuC;IAChD,OAAO,EAAE,uCAAuC;IAChD,KAAK,EAAI,qCAAqC;CAC/C,CAAC;AACF,MAAM,aAAa,GAA+B;IAChD,OAAO,EAAE,0BAA0B;IACnC,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAK,+BAA+B;IACxC,OAAO,EAAE,kCAAkC;IAC3C,OAAO,EAAE,kCAAkC;IAC3C,KAAK,EAAI,gCAAgC;CAC1C,CAAC;AACF,MAAM,cAAc,GAA+B;IACjD,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAK,4BAA4B;IACrC,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAI,aAAa;CACvB,CAAC;AAEK,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAE,OAAgB;IACnE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;IAEnF,OAAO;;;;;;;;;;;iBAWQ,QAAQ,IAAI,aAAa,IAAI,QAAQ,IAAI,QAAQ;;mBAE/C,QAAQ;;;eAGZ,KAAK;oBACA,EAAE;oDAC8B,MAAM;;;;;;;;;;;;;;;;;;;;;;;;MAwBpD,aAAa,CAAC,UAAU,CAAC;;MAEzB,qBAAqB,CAAC,UAAU,CAAC;GACpC,CAAC;AACJ,CAAC;;MCvEYA,oBAAkB;IAJ/B;;;;;;QAM2B,YAAO,GAAe,SAAS,CAAC;;QAGhC,YAAO,GAAY,KAAK,CAAC;;QAG1C,UAAK,GAAY,QAAQ,CAAC;;QAGT,UAAK,GAAU,MAAM,CAAC;QAKvC,kBAAa,GAAG;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB,CAAC;KAkCH;IAhCC,MAAM;QACJ,QACE,EAAC,IAAI,mEAAa,IAAI,CAAC,KAAK,IAC1B,8DAAO,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAI,EACjE,6DAAM,KAAK,EAAC,KAAK,IACf,8DAAQ,EACR,+DACE,KAAK,EAAC,SAAS,EACf,IAAI,EAAC,QAAQ,gBACD,IAAI,CAAC,KAAK,EACtB,OAAO,EAAE,IAAI,CAAC,aAAa,IAE3B,4DACE,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,kBACR,GAAG,oBACD,OAAO,qBACN,OAAO,iBACX,MAAM,IAElB,6DAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,GAAG,EACtC,6DAAM,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,CAClC,CACC,CACJ,CACF,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["DiwaTagDismissible"],"sources":["src/components/diwa-tag-dismissible/diwa-tag-dismissible-styles.ts","src/components/diwa-tag-dismissible/diwa-tag-dismissible.tsx"],"sourcesContent":["import type { TagVariant } from '../diwa-tag/types';\r\nimport { getFocusStyle, getReducedMotionStyle } from '../../utils/styles';\r\n\r\nconst VARIANT_BG: Record<TagVariant, string> = {\r\n neutral: 'var(--diwa-bg-surface)',\r\n primary: 'var(--diwa-accent-bg)',\r\n info: 'var(--diwa-notification-info-soft)',\r\n success: 'var(--diwa-notification-success-soft)',\r\n warning: 'var(--diwa-notification-warning-soft)',\r\n error: 'var(--diwa-notification-error-soft)',\r\n};\r\nconst VARIANT_COLOR: Record<TagVariant, string> = {\r\n neutral: 'var(--diwa-text-primary)',\r\n primary: 'var(--diwa-accent)',\r\n info: 'var(--diwa-notification-info)',\r\n success: 'var(--diwa-notification-success)',\r\n warning: 'var(--diwa-notification-warning)',\r\n error: 'var(--diwa-notification-error)',\r\n};\r\nconst VARIANT_BORDER: Record<TagVariant, string> = {\r\n neutral: 'var(--diwa-border)',\r\n primary: 'var(--diwa-accent)',\r\n info: 'var(--diwa-color-info-300)',\r\n success: 'transparent',\r\n warning: 'transparent',\r\n error: 'transparent',\r\n};\r\n\r\nexport const getComponentCss = (variant: TagVariant, compact: boolean): string => {\r\n const bg = VARIANT_BG[variant];\r\n const color = VARIANT_COLOR[variant];\r\n const border = VARIANT_BORDER[variant];\r\n const paddingY = compact ? '1px' : '2px';\r\n const paddingX = compact ? '6px' : '10px';\r\n const paddingXRight = compact ? '4px' : '6px';\r\n const fontSize = compact ? 'var(--diwa-font-size-sm)' : 'var(--diwa-font-size-md)';\r\n\r\n return `\r\n :host {\r\n display: inline-flex;\r\n }\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n .tag {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--diwa-space-1);\r\n padding: ${paddingY} ${paddingXRight} ${paddingY} ${paddingX};\r\n font-family: var(--diwa-font-family-base);\r\n font-size: ${fontSize};\r\n font-weight: var(--diwa-font-weight-medium);\r\n line-height: 1;\r\n color: ${color};\r\n background: ${bg};\r\n border: var(--diwa-border-width-thin) solid ${border};\r\n border-radius: var(--diwa-radius-sm);\r\n white-space: nowrap;\r\n user-select: none;\r\n }\r\n .dismiss {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 12px;\r\n height: 12px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: var(--diwa-radius-xs);\r\n color: inherit;\r\n cursor: pointer;\r\n flex-shrink: 0;\r\n opacity: var(--diwa-opacity-muted);\r\n transition: opacity var(--diwa-transition-base);\r\n }\r\n .dismiss:hover {\r\n opacity: 1;\r\n }\r\n ${getFocusStyle('.dismiss')}\r\n\r\n ${getReducedMotionStyle('.dismiss')}\r\n `;\r\n};\r\n","import { Component, Event, type EventEmitter, Host, Prop, h } from '@stencil/core';\r\nimport type { Theme } from '../../utils/styles';\r\nimport type { TagVariant } from './types';\r\nimport { getComponentCss } from './diwa-tag-dismissible-styles';\r\n\r\n/**\r\n * @slot default — Tag label content.\r\n */\r\n@Component({\r\n tag: 'diwa-tag-dismissible',\r\n shadow: { delegatesFocus: true },\r\n})\r\nexport class DiwaTagDismissible {\r\n /** Visual style variant. */\r\n @Prop({ reflect: true }) variant: TagVariant = 'neutral';\r\n\r\n /** Renders a compact (smaller) version of the tag. */\r\n @Prop({ reflect: true }) compact: boolean = false;\r\n\r\n /** Accessible label for the dismiss button. */\r\n @Prop() label?: string = 'Remove';\r\n\r\n /** Adapts the color when used on a light or dark background. */\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n /** Emitted when the dismiss button is clicked. */\r\n @Event({ bubbles: false, composed: false }) dismiss!: EventEmitter<void>;\r\n\r\n private handleDismiss = (): void => {\r\n this.dismiss.emit();\r\n };\r\n\r\n render() {\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style innerHTML={getComponentCss(this.variant, this.compact)} />\r\n <span class=\"tag\">\r\n <slot />\r\n <button\r\n class=\"dismiss\"\r\n type=\"button\"\r\n aria-label={this.label}\r\n onClick={this.handleDismiss}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={12}\r\n height={12}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n >\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </span>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
@@ -1,5 +1,5 @@
1
1
  import { p as proxyCustomElement, H, h, d as Host } from './p-5eacc7d0.js';
2
- import { d as defineCustomElement$2 } from './p-302af10d.js';
2
+ import { d as defineCustomElement$2 } from './p-8972ae69.js';
3
3
 
4
4
  const VARIANT_MAP = {
5
5
  neutral: {
@@ -53,7 +53,7 @@ const getComponentCss = (variant, compact) => {
53
53
  font-family: var(--diwa-font-family-base);
54
54
  font-size: ${fontSize};
55
55
  font-weight: var(--diwa-font-weight-medium);
56
- line-height: var(--diwa-line-height-tight);
56
+ line-height: 1;
57
57
  color: ${color};
58
58
  background: ${bg};
59
59
  border: var(--diwa-border-width-thin) solid ${border};
@@ -82,7 +82,7 @@ const DiwaTag$1 = /*@__PURE__*/ proxyCustomElement(class DiwaTag extends H {
82
82
  this.theme = 'dark';
83
83
  }
84
84
  render() {
85
- return (h(Host, { key: 'dfa84844b35c6b8235c98e808a9b9dd6d477d1fa', "data-theme": this.theme }, h("style", { key: '8e4f31a14ed706ab4ed23f29b1cc2e0f62ad2574', innerHTML: getComponentCss(this.variant, this.compact) }), h("span", { key: '6114522f5907c57eb3431943cd54d74cda2efc2b', class: "tag" }, this.icon && (h("span", { key: 'a5ab13a007c58c6ad70b3d50f3432513a6c50158', class: "icon" }, h("diwa-icon", { key: 'd8a27e315e5cd715bb6eddd17fe776d9ac2b04a2', name: this.icon, size: this.compact ? 12 : 14 }))), h("slot", { key: 'a0009c67eb1a12d3fb4de706b22d15cc68f17942' }))));
85
+ return (h(Host, { key: 'd42fb54eff16c99a228aadb0705555b46f12e32f', "data-theme": this.theme }, h("style", { key: '5a970176294cd830196d20211c3de04bafe432cb', innerHTML: getComponentCss(this.variant, this.compact) }), h("span", { key: 'cf96cb76fd620897df59dab8cd85c49b2905112c', class: "tag" }, this.icon && (h("span", { key: 'e5f269560d17a45c0072dadeab04018592b13f1a', class: "icon" }, h("diwa-icon", { key: '355758d40a0a2539b0ec7eba9710e57a308e510e', name: this.icon, size: this.compact ? 12 : 14 }))), h("slot", { key: '640ad0e5c11ecaebd98fe846f48b81938c7c9db2' }))));
86
86
  }
87
87
  }, [1, "diwa-tag", {
88
88
  "variant": [513],
@@ -1 +1 @@
1
- {"file":"diwa-tag.js","mappings":";;;AAEA,MAAM,WAAW,GAAsE;IACrF,OAAO,EAAE;QACP,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,oBAAoB;KAC7B;IACD,OAAO,EAAE;QACP,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,oBAAoB;QAC3B,MAAM,EAAE,oBAAoB;KAC7B;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,oCAAoC;QACxC,KAAK,EAAE,+BAA+B;QACtC,MAAM,EAAE,4BAA4B;KACrC;IACD,OAAO,EAAE;QACP,EAAE,EAAE,uCAAuC;QAC3C,KAAK,EAAE,kCAAkC;QACzC,MAAM,EAAE,aAAa;KACtB;IACD,OAAO,EAAE;QACP,EAAE,EAAE,uCAAuC;QAC3C,KAAK,EAAE,kCAAkC;QACzC,MAAM,EAAE,aAAa;KACtB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,qCAAqC;QACzC,KAAK,EAAE,gCAAgC;QACvC,MAAM,EAAE,aAAa;KACtB;CACF,CAAC;AAEK,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAE,OAAgB;IACnE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;IAEnF,OAAO;;;;;;;;;;;iBAWQ,QAAQ,IAAI,QAAQ;;mBAElB,QAAQ;;;eAGZ,KAAK;oBACA,EAAE;oDAC8B,MAAM;;;;;;;;;;GAUvD,CAAC;AACJ,CAAC;;MC1DYA,SAAO;IAJpB;;;;;QAM2B,YAAO,GAAe,SAAS,CAAC;;QAGhC,YAAO,GAAY,KAAK,CAAC;;QAMzB,UAAK,GAAU,MAAM,CAAC;KAiBhD;IAfC,MAAM;QACJ,QACE,EAAC,IAAI,mEAAa,IAAI,CAAC,KAAK,IAC1B,8DAAO,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAI,EACjE,6DAAM,KAAK,EAAC,KAAK,IACd,IAAI,CAAC,IAAI,KACR,6DAAM,KAAK,EAAC,MAAM,IAChB,kEAAW,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAI,CACvD,CACR,EACD,8DAAQ,CACH,CACF,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["DiwaTag"],"sources":["src/components/diwa-tag/diwa-tag-styles.ts","src/components/diwa-tag/diwa-tag.tsx"],"sourcesContent":["import type { TagVariant } from './types';\r\n\r\nconst VARIANT_MAP: Record<TagVariant, { bg: string; color: string; border: string }> = {\r\n neutral: {\r\n bg: 'var(--diwa-bg-surface)',\r\n color: 'var(--diwa-text-primary)',\r\n border: 'var(--diwa-border)',\r\n },\r\n primary: {\r\n bg: 'var(--diwa-accent-bg)',\r\n color: 'var(--diwa-accent)',\r\n border: 'var(--diwa-accent)',\r\n },\r\n info: {\r\n bg: 'var(--diwa-notification-info-soft)',\r\n color: 'var(--diwa-notification-info)',\r\n border: 'var(--diwa-color-info-300)',\r\n },\r\n success: {\r\n bg: 'var(--diwa-notification-success-soft)',\r\n color: 'var(--diwa-notification-success)',\r\n border: 'transparent',\r\n },\r\n warning: {\r\n bg: 'var(--diwa-notification-warning-soft)',\r\n color: 'var(--diwa-notification-warning)',\r\n border: 'transparent',\r\n },\r\n error: {\r\n bg: 'var(--diwa-notification-error-soft)',\r\n color: 'var(--diwa-notification-error)',\r\n border: 'transparent',\r\n },\r\n};\r\n\r\nexport const getComponentCss = (variant: TagVariant, compact: boolean): string => {\r\n const { bg, color, border } = VARIANT_MAP[variant];\r\n const paddingY = compact ? '1px' : '2px';\r\n const paddingX = compact ? '6px' : '10px';\r\n const fontSize = compact ? 'var(--diwa-font-size-sm)' : 'var(--diwa-font-size-md)';\r\n\r\n return `\r\n :host {\r\n display: inline-flex;\r\n }\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n .tag {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--diwa-space-1);\r\n padding: ${paddingY} ${paddingX};\r\n font-family: var(--diwa-font-family-base);\r\n font-size: ${fontSize};\r\n font-weight: var(--diwa-font-weight-medium);\r\n line-height: var(--diwa-line-height-tight);\r\n color: ${color};\r\n background: ${bg};\r\n border: var(--diwa-border-width-thin) solid ${border};\r\n border-radius: var(--diwa-radius-sm);\r\n white-space: nowrap;\r\n user-select: none;\r\n }\r\n .icon {\r\n display: flex;\r\n align-items: center;\r\n flex-shrink: 0;\r\n }\r\n `;\r\n};\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\nimport type { Theme } from '../../utils/styles';\r\nimport type { TagVariant } from './types';\r\nimport { getComponentCss } from './diwa-tag-styles';\r\n\r\n/**\r\n * @slot default — Tag label content.\r\n */\r\n@Component({\r\n tag: 'diwa-tag',\r\n shadow: true,\r\n})\r\nexport class DiwaTag {\r\n /** Visual style variant. */\r\n @Prop({ reflect: true }) variant: TagVariant = 'neutral';\r\n\r\n /** Renders a compact (smaller) version of the tag. */\r\n @Prop({ reflect: true }) compact: boolean = false;\r\n\r\n /** Lucide icon name to display before the label, or omit for no icon. */\r\n @Prop() icon?: string;\r\n\r\n /** Adapts the color when used on a light or dark background. */\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n render() {\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style innerHTML={getComponentCss(this.variant, this.compact)} />\r\n <span class=\"tag\">\r\n {this.icon && (\r\n <span class=\"icon\">\r\n <diwa-icon name={this.icon} size={this.compact ? 12 : 14} />\r\n </span>\r\n )}\r\n <slot />\r\n </span>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
1
+ {"file":"diwa-tag.js","mappings":";;;AAEA,MAAM,WAAW,GAAsE;IACrF,OAAO,EAAE;QACP,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,oBAAoB;KAC7B;IACD,OAAO,EAAE;QACP,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,oBAAoB;QAC3B,MAAM,EAAE,oBAAoB;KAC7B;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,oCAAoC;QACxC,KAAK,EAAE,+BAA+B;QACtC,MAAM,EAAE,4BAA4B;KACrC;IACD,OAAO,EAAE;QACP,EAAE,EAAE,uCAAuC;QAC3C,KAAK,EAAE,kCAAkC;QACzC,MAAM,EAAE,aAAa;KACtB;IACD,OAAO,EAAE;QACP,EAAE,EAAE,uCAAuC;QAC3C,KAAK,EAAE,kCAAkC;QACzC,MAAM,EAAE,aAAa;KACtB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,qCAAqC;QACzC,KAAK,EAAE,gCAAgC;QACvC,MAAM,EAAE,aAAa;KACtB;CACF,CAAC;AAEK,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAE,OAAgB;IACnE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;IAEnF,OAAO;;;;;;;;;;;iBAWQ,QAAQ,IAAI,QAAQ;;mBAElB,QAAQ;;;eAGZ,KAAK;oBACA,EAAE;oDAC8B,MAAM;;;;;;;;;;GAUvD,CAAC;AACJ,CAAC;;MC1DYA,SAAO;IAJpB;;;;;QAM2B,YAAO,GAAe,SAAS,CAAC;;QAGhC,YAAO,GAAY,KAAK,CAAC;;QAMzB,UAAK,GAAU,MAAM,CAAC;KAiBhD;IAfC,MAAM;QACJ,QACE,EAAC,IAAI,mEAAa,IAAI,CAAC,KAAK,IAC1B,8DAAO,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAI,EACjE,6DAAM,KAAK,EAAC,KAAK,IACd,IAAI,CAAC,IAAI,KACR,6DAAM,KAAK,EAAC,MAAM,IAChB,kEAAW,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAI,CACvD,CACR,EACD,8DAAQ,CACH,CACF,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["DiwaTag"],"sources":["src/components/diwa-tag/diwa-tag-styles.ts","src/components/diwa-tag/diwa-tag.tsx"],"sourcesContent":["import type { TagVariant } from './types';\r\n\r\nconst VARIANT_MAP: Record<TagVariant, { bg: string; color: string; border: string }> = {\r\n neutral: {\r\n bg: 'var(--diwa-bg-surface)',\r\n color: 'var(--diwa-text-primary)',\r\n border: 'var(--diwa-border)',\r\n },\r\n primary: {\r\n bg: 'var(--diwa-accent-bg)',\r\n color: 'var(--diwa-accent)',\r\n border: 'var(--diwa-accent)',\r\n },\r\n info: {\r\n bg: 'var(--diwa-notification-info-soft)',\r\n color: 'var(--diwa-notification-info)',\r\n border: 'var(--diwa-color-info-300)',\r\n },\r\n success: {\r\n bg: 'var(--diwa-notification-success-soft)',\r\n color: 'var(--diwa-notification-success)',\r\n border: 'transparent',\r\n },\r\n warning: {\r\n bg: 'var(--diwa-notification-warning-soft)',\r\n color: 'var(--diwa-notification-warning)',\r\n border: 'transparent',\r\n },\r\n error: {\r\n bg: 'var(--diwa-notification-error-soft)',\r\n color: 'var(--diwa-notification-error)',\r\n border: 'transparent',\r\n },\r\n};\r\n\r\nexport const getComponentCss = (variant: TagVariant, compact: boolean): string => {\r\n const { bg, color, border } = VARIANT_MAP[variant];\r\n const paddingY = compact ? '1px' : '2px';\r\n const paddingX = compact ? '6px' : '10px';\r\n const fontSize = compact ? 'var(--diwa-font-size-sm)' : 'var(--diwa-font-size-md)';\r\n\r\n return `\r\n :host {\r\n display: inline-flex;\r\n }\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n .tag {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--diwa-space-1);\r\n padding: ${paddingY} ${paddingX};\r\n font-family: var(--diwa-font-family-base);\r\n font-size: ${fontSize};\r\n font-weight: var(--diwa-font-weight-medium);\r\n line-height: 1;\r\n color: ${color};\r\n background: ${bg};\r\n border: var(--diwa-border-width-thin) solid ${border};\r\n border-radius: var(--diwa-radius-sm);\r\n white-space: nowrap;\r\n user-select: none;\r\n }\r\n .icon {\r\n display: flex;\r\n align-items: center;\r\n flex-shrink: 0;\r\n }\r\n `;\r\n};\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\nimport type { Theme } from '../../utils/styles';\r\nimport type { TagVariant } from './types';\r\nimport { getComponentCss } from './diwa-tag-styles';\r\n\r\n/**\r\n * @slot default — Tag label content.\r\n */\r\n@Component({\r\n tag: 'diwa-tag',\r\n shadow: true,\r\n})\r\nexport class DiwaTag {\r\n /** Visual style variant. */\r\n @Prop({ reflect: true }) variant: TagVariant = 'neutral';\r\n\r\n /** Renders a compact (smaller) version of the tag. */\r\n @Prop({ reflect: true }) compact: boolean = false;\r\n\r\n /** Lucide icon name to display before the label, or omit for no icon. */\r\n @Prop() icon?: string;\r\n\r\n /** Adapts the color when used on a light or dark background. */\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n render() {\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style innerHTML={getComponentCss(this.variant, this.compact)} />\r\n <span class=\"tag\">\r\n {this.icon && (\r\n <span class=\"icon\">\r\n <diwa-icon name={this.icon} size={this.compact ? 12 : 14} />\r\n </span>\r\n )}\r\n <slot />\r\n </span>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
@@ -23,7 +23,7 @@ const DiwaTextListItem$1 = /*@__PURE__*/ proxyCustomElement(class DiwaTextListIt
23
23
  this.theme = 'dark';
24
24
  }
25
25
  render() {
26
- return (h(Host, { key: '47380c135fb14278e005d237c7dfc0ae1e8d2982', "data-theme": this.theme }, h("style", { key: '61e2d7744729759cad4eb82f1af96d033a817a3f', innerHTML: getItemCss() }), h("slot", { key: '916a0c9ebd931b61ae4d76ab172ab437cd2cbd3d' })));
26
+ return (h(Host, { key: 'ca389afc2ee236afaf0ef1aa73da52621300309c', "data-theme": this.theme }, h("style", { key: '0b89865d665c4abc37ed2d6e044b7160480acf79', innerHTML: getItemCss() }), h("slot", { key: 'd49ee74ef96e916912a16889b33b05a08fd4027b' })));
27
27
  }
28
28
  }, [1, "diwa-text-list-item", {
29
29
  "theme": [513]
@@ -38,7 +38,7 @@ const DiwaTextList$1 = /*@__PURE__*/ proxyCustomElement(class DiwaTextList exten
38
38
  }
39
39
  render() {
40
40
  const Tag = this.type === 'ordered' ? 'ol' : 'ul';
41
- return (h(Host, { key: '3ccc05828614ee75fb0bace58508d9868a609945', "data-theme": this.theme }, h("style", { key: '1109012ff5b89b6224909a63cba6d0645132816e', innerHTML: getComponentCss(this.type) }), h(Tag, { key: '9e406cd57d961661f10e68f2c4b18a7dfbed8abe', class: "list" }, h("slot", { key: '3e6efc18da3aa512cc1eac696ed6619aef4f39e5' }))));
41
+ return (h(Host, { key: '46a42d0fad4e36c43294095336094028eba05e28', "data-theme": this.theme }, h("style", { key: 'fac6f5dfc2f131e718e808465e7bac609cf46665', innerHTML: getComponentCss(this.type) }), h(Tag, { key: '40e9fc80b433d58834b3b1465a49c53ed968f171', class: "list" }, h("slot", { key: '25af80ba0ae2f8dc8ff98e5fc5321fa271b52ebb' }))));
42
42
  }
43
43
  }, [1, "diwa-text-list", {
44
44
  "theme": [513],
@@ -76,7 +76,7 @@ const DiwaText$1 = /*@__PURE__*/ proxyCustomElement(class DiwaText extends H {
76
76
  // ──────────────────────────────────────────────────────────────
77
77
  render() {
78
78
  const Tag = this.tag; // eslint-disable-line @typescript-eslint/no-explicit-any
79
- return (h(Host, { key: '9f5fd3cbc2cd12f7fef7b55c095aff9cddbbfe30', "data-theme": this.theme }, h("style", { key: 'a83a6f78e4bc7474ce28cf1d3010a021e1bbf099', innerHTML: getComponentCss(this.size, this.weight, this.align, this.color, this.ellipsis) }), h(Tag, { key: '24f5ac5e6bcbeaad882089d9a4a996184e712b7d', class: "text" }, h("slot", { key: '027dc2c754f75aa59d4616565c53599051497748' }))));
79
+ return (h(Host, { key: '78b4446a7e87098e2b5c91eeafa452af9746b3f4', "data-theme": this.theme }, h("style", { key: '4d35e7cd05ba8b6169481a3e29562e606eb11504', innerHTML: getComponentCss(this.size, this.weight, this.align, this.color, this.ellipsis) }), h(Tag, { key: '0c9634ebb578a91e3abf14957ad588f3350070cf', class: "text" }, h("slot", { key: '1a173a8d617c7f903da682122dbd96767d3af2b3' }))));
80
80
  }
81
81
  }, [1, "diwa-text", {
82
82
  "theme": [513],
@@ -146,7 +146,7 @@ const DiwaTextarea$1 = /*@__PURE__*/ proxyCustomElement(class DiwaTextarea exten
146
146
  const taId = 'textarea';
147
147
  const descId = 'desc';
148
148
  const msgId = 'msg';
149
- return (h(Host, { key: 'd4f47cf2f3be23a0df6c1f2dc24c8f11647fadc4', "data-theme": this.theme }, h("style", { key: '66ab29c8d8633795ed2fbc8403486496c36a356d', innerHTML: getComponentCss(this.state, this.disabled, this.readOnly, this.resize, this.compact) }), h("div", { key: '5a28099aa65e5b3b4588007479203360949c2dcf', class: "root" }, !this.hideLabel && this.label && (h("div", { key: 'a292c7d30962fc7db056cf9dca05552196b4532d', class: "label-row" }, h("label", { key: '38a4700dc55d557ef437efe0e54c0121bb0f172c', class: "label", htmlFor: taId }, this.label, this.required && h("span", { key: '8bef937a0727b2c51dabe30b9b74927053f7840f', class: "required", "aria-hidden": "true" }, " *")), h("slot", { key: '36169954033c2e1abcba95ccb445f7cb9f6460c0', name: "label-after" }))), h("div", { key: '05de702c20d30ff01af79245daf06e72bc013025', class: "textarea-wrapper" }, h("textarea", { key: 'ac18d6a3a4b2d724f1bd78f16e17f72dccc751f7', class: "ta", id: taId, name: this.name || undefined, value: this.value, placeholder: this.placeholder || undefined, disabled: this.disabled, required: this.required, readOnly: this.readOnly, rows: this.rows, maxLength: this.maxLength, minLength: this.minLength, "aria-label": this.hideLabel && this.label ? this.label : undefined, "aria-invalid": this.state === 'error' ? 'true' : undefined, "aria-required": this.required ? 'true' : undefined, "aria-describedby": this.message ? msgId : this.description ? descId : undefined, onInput: this.handleInput, onChange: this.handleChange, onBlur: this.handleBlur })), !this.message && this.description && (h("p", { key: '973b18b1bafa587c7d98684d73a80e8357434c0e', id: descId, class: "description" }, this.description)), this.message && (h("p", { key: 'dc389f318bfc3e674e1cb4c8ca6d8e2ffe348480', id: msgId, class: "message" }, this.message)))));
149
+ return (h(Host, { key: 'bc8c28e4261d600dcd7279fbf83f3c69598bede9', "data-theme": this.theme }, h("style", { key: '6424b2957223222e398afbd46110e7da11e074d0', innerHTML: getComponentCss(this.state, this.disabled, this.readOnly, this.resize, this.compact) }), h("div", { key: 'f99c09858acafd13e43389f0fdeef23352016658', class: "root" }, !this.hideLabel && this.label && (h("div", { key: '19062e869778b9f486c110a8a501fbdd77c7a629', class: "label-row" }, h("label", { key: '6b7e15fd5794920731f84abb408f4c73c212a03a', class: "label", htmlFor: taId }, this.label, this.required && h("span", { key: '2fce6e00c084737d175057e6d0fe291962152f9f', class: "required", "aria-hidden": "true" }, " *")), h("slot", { key: '20de835c3283696e786370a8b9e667ad14811f65', name: "label-after" }))), h("div", { key: '5ce3c0798d9085266c19623aec5c84809e8abe2f', class: "textarea-wrapper" }, h("textarea", { key: '76b21ac80b5f7609692af0dd78badc4bbdc1c8c2', class: "ta", id: taId, name: this.name || undefined, value: this.value, placeholder: this.placeholder || undefined, disabled: this.disabled, required: this.required, readOnly: this.readOnly, rows: this.rows, maxLength: this.maxLength, minLength: this.minLength, "aria-label": this.hideLabel && this.label ? this.label : undefined, "aria-invalid": this.state === 'error' ? 'true' : undefined, "aria-required": this.required ? 'true' : undefined, "aria-describedby": this.message ? msgId : this.description ? descId : undefined, onInput: this.handleInput, onChange: this.handleChange, onBlur: this.handleBlur })), !this.message && this.description && (h("p", { key: '8b8914744e47cedda2ceeea9dc004cfb8712fa15', id: descId, class: "description" }, this.description)), this.message && (h("p", { key: 'f3678d9d8eeb81e12bd98aac8186df07c7b17369', id: msgId, class: "message" }, this.message)))));
150
150
  }
151
151
  static get delegatesFocus() { return true; }
152
152
  }, [17, "diwa-textarea", {
@@ -1,4 +1,4 @@
1
- import { D as DiwaToastItem$1, d as defineCustomElement$1 } from './p-f480bce8.js';
1
+ import { D as DiwaToastItem$1, d as defineCustomElement$1 } from './p-7c951f7f.js';
2
2
 
3
3
  const DiwaToastItem = DiwaToastItem$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,5 +1,5 @@
1
1
  import { p as proxyCustomElement, H, h, d as Host } from './p-5eacc7d0.js';
2
- import { d as defineCustomElement$2 } from './p-f480bce8.js';
2
+ import { d as defineCustomElement$2 } from './p-7c951f7f.js';
3
3
 
4
4
  const getComponentCss = () => `
5
5
  :host {
@@ -33,40 +33,134 @@ const getComponentCss = () => `
33
33
  }
34
34
  `;
35
35
 
36
+ const DEFAULT_TIMEOUT = 6000;
37
+ /** Duration to wait after dismiss before showing the next queued message (matches slideIn animation). */
38
+ const DISMISS_DELAY = 200;
39
+ /**
40
+ * ToastManagerClass — singleton service that owns the toast queue.
41
+ *
42
+ * Only one `<diwa-toast>` element may be registered at a time.
43
+ * The component registers a `refreshFn` callback on `connectedCallback`
44
+ * and unregisters on `disconnectedCallback`.
45
+ *
46
+ * Consumers call `element.addMessage()` (which delegates here) OR import
47
+ * `toastManager` directly and call `toastManager.addMessage()`.
48
+ */
49
+ class ToastManagerClass {
50
+ constructor() {
51
+ this.queue = [];
52
+ this.current = null;
53
+ this.toastEl = null;
54
+ this.refreshFn = null;
55
+ this.timeout = null;
56
+ this.nextId = 0;
57
+ }
58
+ // ── Registration ──────────────────────────────────────────────────────────
59
+ register(host, refreshFn) {
60
+ if (this.toastEl) {
61
+ console.error('[diwa-toast] Only one <diwa-toast> may exist per page. Multiple instances detected.');
62
+ return;
63
+ }
64
+ this.toastEl = host;
65
+ this.refreshFn = refreshFn;
66
+ }
67
+ unregister() {
68
+ this.clearTimeout();
69
+ this.queue = [];
70
+ this.current = null;
71
+ this.toastEl = null;
72
+ this.refreshFn = null;
73
+ }
74
+ // ── Public API ────────────────────────────────────────────────────────────
75
+ addMessage(message) {
76
+ var _a;
77
+ if (!this.toastEl) {
78
+ console.warn('[diwa-toast] addMessage() called but no <diwa-toast> element is mounted in the page.');
79
+ return;
80
+ }
81
+ if (!((_a = message.text) === null || _a === void 0 ? void 0 : _a.trim())) {
82
+ console.warn('[diwa-toast] addMessage() called with empty text.');
83
+ return;
84
+ }
85
+ const entry = Object.assign(Object.assign({ state: 'neutral' }, message), { id: this.nextId++ });
86
+ if (this.current === null) {
87
+ this.show(entry);
88
+ }
89
+ else {
90
+ this.queue.push(entry);
91
+ }
92
+ }
93
+ dismiss() {
94
+ var _a;
95
+ this.clearTimeout();
96
+ this.current = null;
97
+ (_a = this.refreshFn) === null || _a === void 0 ? void 0 : _a.call(this, null);
98
+ // Wait for the dismiss animation, then show next queued item
99
+ setTimeout(() => {
100
+ const next = this.queue.shift();
101
+ if (next) {
102
+ this.show(next);
103
+ }
104
+ }, DISMISS_DELAY);
105
+ }
106
+ getCurrent() {
107
+ return this.current;
108
+ }
109
+ // ── Private helpers ───────────────────────────────────────────────────────
110
+ show(entry) {
111
+ var _a;
112
+ this.current = entry;
113
+ (_a = this.refreshFn) === null || _a === void 0 ? void 0 : _a.call(this, entry);
114
+ this.scheduleTimeout(entry);
115
+ }
116
+ scheduleTimeout(entry) {
117
+ var _a;
118
+ const duration = (_a = entry.duration) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT;
119
+ if (duration > 0) {
120
+ this.timeout = setTimeout(() => this.dismiss(), duration);
121
+ }
122
+ }
123
+ clearTimeout() {
124
+ if (this.timeout !== null) {
125
+ clearTimeout(this.timeout);
126
+ this.timeout = null;
127
+ }
128
+ }
129
+ }
130
+ const toastManager = new ToastManagerClass();
131
+
36
132
  const DiwaToast$1 = /*@__PURE__*/ proxyCustomElement(class DiwaToast extends H {
37
133
  constructor() {
38
134
  super();
39
135
  this.__registerHost();
40
136
  this.__attachShadow();
41
137
  this.theme = 'dark';
42
- this.messages = [];
43
- this.nextId = 0;
138
+ this.currentMsg = null;
139
+ }
140
+ connectedCallback() {
141
+ toastManager.register(this.host, (msg) => {
142
+ this.currentMsg = msg;
143
+ });
144
+ }
145
+ disconnectedCallback() {
146
+ toastManager.unregister();
44
147
  }
45
148
  /**
46
- * Adds a toast message to the queue.
149
+ * Enqueues a toast message. If no toast is currently visible it is shown
150
+ * immediately; otherwise it is placed in the FIFO queue and shown after all
151
+ * preceding messages have been dismissed.
47
152
  */
48
153
  async addMessage(message) {
49
- var _a;
50
- const id = this.nextId++;
51
- this.messages = [...this.messages, Object.assign(Object.assign({}, message), { id })];
52
- const duration = (_a = message.duration) !== null && _a !== void 0 ? _a : 5000;
53
- if (duration > 0) {
54
- setTimeout(() => this.removeMessage(id), duration);
55
- }
56
- }
57
- removeMessage(id) {
58
- this.messages = this.messages.filter((m) => m.id !== id);
154
+ toastManager.addMessage(message);
59
155
  }
60
156
  render() {
61
- return (h(Host, { key: '51dba2219ff8a36a154e7cc7d94760b039019244', role: "status", "aria-live": "polite", "aria-atomic": "false", "data-theme": this.theme }, h("style", { key: '21c673cb8e9b9fc1cb1b5f2bbdc5d017f4f5ae8c', innerHTML: getComponentCss() }), this.messages.map((msg) => {
62
- var _a;
63
- return (h("diwa-toast-item", { key: msg.id, text: msg.text, state: (_a = msg.state) !== null && _a !== void 0 ? _a : 'neutral', theme: this.theme, onDismiss: () => this.removeMessage(msg.id) }));
64
- })));
157
+ var _a;
158
+ return (h(Host, { key: 'b670220ae7a15fd466b439895fd36bb5e3107f38', role: "status", "aria-live": "polite", "aria-atomic": "false", "data-theme": this.theme }, h("style", { key: '621b6332123edfc2078ba87d184036746176aa93', innerHTML: getComponentCss() }), this.currentMsg && (h("diwa-toast-item", { key: this.currentMsg.id, text: this.currentMsg.text, state: (_a = this.currentMsg.state) !== null && _a !== void 0 ? _a : 'neutral', theme: this.theme, onDismiss: () => toastManager.dismiss() }))));
65
159
  }
66
160
  get host() { return this; }
67
161
  }, [1, "diwa-toast", {
68
162
  "theme": [513],
69
- "messages": [32],
163
+ "currentMsg": [32],
70
164
  "addMessage": [64]
71
165
  }]);
72
166
  function defineCustomElement$1() {
@@ -1 +1 @@
1
- {"file":"diwa-toast.js","mappings":";;;AAAO,MAAM,eAAe,GAAG,MAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B5C;;MCPYA,WAAS;IAJtB;;;;QAO2B,UAAK,GAAU,MAAM,CAAC;QAEtC,aAAQ,GAAyC,EAAE,CAAC;QAErD,WAAM,GAAG,CAAC,CAAC;KAmCpB;;;;IA7BC,MAAM,UAAU,CAAC,OAAqB;;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,kCAAO,OAAO,KAAE,EAAE,IAAG,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC;QAC1C,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,UAAU,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;SACpD;KACF;IAEO,aAAa,CAAC,EAAU;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC1D;IAED,MAAM;QACJ,QACE,EAAC,IAAI,qDAAC,IAAI,EAAC,QAAQ,eAAW,QAAQ,iBAAa,OAAO,gBAAa,IAAI,CAAC,KAAK,IAC/E,8DAAO,SAAS,EAAE,eAAe,EAAE,GAAI,EACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG;;YAAK,QAC1B,uBACE,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,KAAK,EAAE,MAAA,GAAG,CAAC,KAAK,mCAAI,SAAS,EAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,SAAS,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,GAC3C,EACH;SAAA,CAAC,CACG,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["DiwaToast"],"sources":["src/components/diwa-toast/diwa-toast-styles.ts","src/components/diwa-toast/diwa-toast.tsx"],"sourcesContent":["export const getComponentCss = (): string => `\r\n :host {\n position: fixed;\n bottom: var(--diwa-space-6);\n right: var(--diwa-space-6);\n z-index: var(--diwa-z-toast);\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: var(--diwa-space-3);\n pointer-events: none;\r\n font-family: var(--diwa-font-family-base);\r\n }\r\n\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n\r\n ::slotted(*) {\n pointer-events: all;\n }\n\n @media (max-width: 480px) {\n :host {\n left: var(--diwa-space-3);\n right: var(--diwa-space-3);\n bottom: var(--diwa-space-3);\n align-items: stretch;\n }\n }\n`;\n","import { Component, Element, Host, Method, Prop, State, h } from '@stencil/core';\r\nimport type { ToastMessage } from './types';\r\nimport type { Theme } from '../../utils/styles';\r\nimport { getComponentCss } from './diwa-toast-styles';\r\n\r\n/**\r\n * @component diwa-toast\r\n *\r\n * Singleton container that queues and displays toast notifications.\r\n * Call `addMessage()` to queue a new toast. The toast container positions\r\n * itself fixed at the bottom-right of the viewport.\r\n *\r\n * Usage:\r\n * const toast = document.querySelector('diwa-toast');\r\n * toast.addMessage({ text: 'Saved!', state: 'success' });\r\n *\r\n * Or via the static helper:\r\n * DiwaToast.addMessage({ text: 'Error!', state: 'error' });\r\n */\r\n@Component({\r\n tag: 'diwa-toast',\r\n shadow: true,\r\n})\r\nexport class DiwaToast {\r\n @Element() host!: HTMLDiwaToastElement;\r\n\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n @State() messages: Array<ToastMessage & { id: number }> = [];\r\n\r\n private nextId = 0;\r\n\r\n /**\r\n * Adds a toast message to the queue.\r\n */\r\n @Method()\r\n async addMessage(message: ToastMessage): Promise<void> {\r\n const id = this.nextId++;\r\n this.messages = [...this.messages, { ...message, id }];\r\n const duration = message.duration ?? 5000;\r\n if (duration > 0) {\r\n setTimeout(() => this.removeMessage(id), duration);\r\n }\r\n }\r\n\r\n private removeMessage(id: number) {\r\n this.messages = this.messages.filter((m) => m.id !== id);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host role=\"status\" aria-live=\"polite\" aria-atomic=\"false\" data-theme={this.theme}>\r\n <style innerHTML={getComponentCss()} />\r\n {this.messages.map((msg) => (\r\n <diwa-toast-item\r\n key={msg.id}\r\n text={msg.text}\r\n state={msg.state ?? 'neutral'}\r\n theme={this.theme}\r\n onDismiss={() => this.removeMessage(msg.id)}\r\n />\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
1
+ {"file":"diwa-toast.js","mappings":"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","names":["DiwaToast"],"sources":["src/components/diwa-toast/diwa-toast-styles.ts","src/components/diwa-toast/diwa-toast-manager.ts","src/components/diwa-toast/diwa-toast.tsx"],"sourcesContent":["export const getComponentCss = (): string => `\r\n :host {\n position: fixed;\n bottom: var(--diwa-space-6);\n right: var(--diwa-space-6);\n z-index: var(--diwa-z-toast);\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: var(--diwa-space-3);\n pointer-events: none;\r\n font-family: var(--diwa-font-family-base);\r\n }\r\n\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n\r\n ::slotted(*) {\n pointer-events: all;\n }\n\n @media (max-width: 480px) {\n :host {\n left: var(--diwa-space-3);\n right: var(--diwa-space-3);\n bottom: var(--diwa-space-3);\n align-items: stretch;\n }\n }\n`;\n","import type { ToastMessage } from './types';\r\n\r\nconst DEFAULT_TIMEOUT = 6000;\r\n/** Duration to wait after dismiss before showing the next queued message (matches slideIn animation). */\r\nconst DISMISS_DELAY = 200;\r\n\r\nexport type ToastEntry = ToastMessage & { id: number };\r\ntype RefreshFn = (entry: ToastEntry | null) => void;\r\n\r\n/**\r\n * ToastManagerClass — singleton service that owns the toast queue.\r\n *\r\n * Only one `<diwa-toast>` element may be registered at a time.\r\n * The component registers a `refreshFn` callback on `connectedCallback`\r\n * and unregisters on `disconnectedCallback`.\r\n *\r\n * Consumers call `element.addMessage()` (which delegates here) OR import\r\n * `toastManager` directly and call `toastManager.addMessage()`.\r\n */\r\nexport class ToastManagerClass {\r\n private queue: ToastEntry[] = [];\r\n private current: ToastEntry | null = null;\r\n private toastEl: HTMLElement | null = null;\r\n private refreshFn: RefreshFn | null = null;\r\n private timeout: ReturnType<typeof setTimeout> | null = null;\r\n private nextId = 0;\r\n\r\n // ── Registration ──────────────────────────────────────────────────────────\r\n\r\n register(host: HTMLElement, refreshFn: RefreshFn): void {\r\n if (this.toastEl) {\r\n console.error('[diwa-toast] Only one <diwa-toast> may exist per page. Multiple instances detected.');\r\n return;\r\n }\r\n this.toastEl = host;\r\n this.refreshFn = refreshFn;\r\n }\r\n\r\n unregister(): void {\r\n this.clearTimeout();\r\n this.queue = [];\r\n this.current = null;\r\n this.toastEl = null;\r\n this.refreshFn = null;\r\n }\r\n\r\n // ── Public API ────────────────────────────────────────────────────────────\r\n\r\n addMessage(message: ToastMessage): void {\r\n if (!this.toastEl) {\r\n console.warn('[diwa-toast] addMessage() called but no <diwa-toast> element is mounted in the page.');\r\n return;\r\n }\r\n if (!message.text?.trim()) {\r\n console.warn('[diwa-toast] addMessage() called with empty text.');\r\n return;\r\n }\r\n\r\n const entry: ToastEntry = {\r\n state: 'neutral',\r\n ...message,\r\n id: this.nextId++,\r\n };\r\n\r\n if (this.current === null) {\r\n this.show(entry);\r\n } else {\r\n this.queue.push(entry);\r\n }\r\n }\r\n\r\n dismiss(): void {\r\n this.clearTimeout();\r\n this.current = null;\r\n this.refreshFn?.(null);\r\n\r\n // Wait for the dismiss animation, then show next queued item\r\n setTimeout(() => {\r\n const next = this.queue.shift();\r\n if (next) {\r\n this.show(next);\r\n }\r\n }, DISMISS_DELAY);\r\n }\r\n\r\n getCurrent(): ToastEntry | null {\r\n return this.current;\r\n }\r\n\r\n // ── Private helpers ───────────────────────────────────────────────────────\r\n\r\n private show(entry: ToastEntry): void {\r\n this.current = entry;\r\n this.refreshFn?.(entry);\r\n this.scheduleTimeout(entry);\r\n }\r\n\r\n private scheduleTimeout(entry: ToastEntry): void {\r\n const duration = entry.duration ?? DEFAULT_TIMEOUT;\r\n if (duration > 0) {\r\n this.timeout = setTimeout(() => this.dismiss(), duration);\r\n }\r\n }\r\n\r\n private clearTimeout(): void {\r\n if (this.timeout !== null) {\r\n clearTimeout(this.timeout);\r\n this.timeout = null;\r\n }\r\n }\r\n}\r\n\r\nexport const toastManager = new ToastManagerClass();\r\n","import { Component, Element, Host, Method, Prop, State, h } from '@stencil/core';\r\nimport type { ToastMessage } from './types';\r\nimport type { Theme } from '../../utils/styles';\r\nimport { getComponentCss } from './diwa-toast-styles';\r\nimport { toastManager } from './diwa-toast-manager';\r\nimport type { ToastEntry } from './diwa-toast-manager';\r\n\r\n/**\r\n * @component diwa-toast\r\n *\r\n * Singleton container that queues and displays toast notifications one at a\r\n * time. Call `addMessage()` to enqueue a toast only one toast is visible at\r\n * a given moment; additional messages are shown in FIFO order as each one is\r\n * dismissed or times out.\r\n *\r\n * Only one `<diwa-toast>` element should exist per page.\r\n *\r\n * Usage:\r\n * const toast = document.querySelector('diwa-toast');\r\n * toast.addMessage({ text: 'Saved!', state: 'success' });\r\n */\r\n@Component({\r\n tag: 'diwa-toast',\r\n shadow: true,\r\n})\r\nexport class DiwaToast {\r\n @Element() host!: HTMLDiwaToastElement;\r\n\r\n @Prop({ reflect: true }) theme: Theme = 'dark';\r\n\r\n @State() private currentMsg: ToastEntry | null = null;\r\n\r\n connectedCallback(): void {\r\n toastManager.register(this.host, (msg) => {\r\n this.currentMsg = msg;\r\n });\r\n }\r\n\r\n disconnectedCallback(): void {\r\n toastManager.unregister();\r\n }\r\n\r\n /**\r\n * Enqueues a toast message. If no toast is currently visible it is shown\r\n * immediately; otherwise it is placed in the FIFO queue and shown after all\r\n * preceding messages have been dismissed.\r\n */\r\n @Method()\r\n async addMessage(message: ToastMessage): Promise<void> {\r\n toastManager.addMessage(message);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host role=\"status\" aria-live=\"polite\" aria-atomic=\"false\" data-theme={this.theme}>\r\n <style innerHTML={getComponentCss()} />\r\n {this.currentMsg && (\r\n <diwa-toast-item\r\n key={this.currentMsg.id}\r\n text={this.currentMsg.text}\r\n state={this.currentMsg.state ?? 'neutral'}\r\n theme={this.theme}\r\n onDismiss={() => toastManager.dismiss()}\r\n />\r\n )}\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
@@ -1,6 +1,6 @@
1
1
  import { p as proxyCustomElement, H, h, d as Host } from './p-5eacc7d0.js';
2
2
  import { g as getFocusStyle, a as getReducedMotionStyle } from './p-70bbb21a.js';
3
- import { d as defineCustomElement$1 } from './p-302af10d.js';
3
+ import { d as defineCustomElement$1 } from './p-8972ae69.js';
4
4
 
5
5
  /**
6
6
  * diwa-button-pure-styles.ts
@@ -318,4 +318,4 @@ defineCustomElement();
318
318
 
319
319
  export { DiwaButtonPure as D, defineCustomElement as d };
320
320
 
321
- //# sourceMappingURL=p-54e5b3fb.js.map
321
+ //# sourceMappingURL=p-105f3f97.js.map
@@ -1 +1 @@
1
- {"file":"p-54e5b3fb.js","mappings":"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","names":[],"sources":["src/components/diwa-button-pure/diwa-button-pure-styles.ts","src/components/diwa-button-pure/diwa-button-pure-utils.ts","src/components/diwa-button-pure/diwa-button-pure.tsx"],"sourcesContent":["/**\r\n * diwa-button-pure-styles.ts\r\n * ===========================\r\n * CSS-in-JS styles for <diwa-button-pure>.\r\n *\r\n * A minimal, transparent button: icon + label only, no background or border.\r\n * Mirrors the PDS p-button-pure aesthetic.\r\n *\r\n * Layout rules:\r\n * alignLabel='end' (default) → icon label\r\n * alignLabel='start' → label icon (via flex-direction: row-reverse)\r\n * stretch=true → fills container width, gap between icon and label\r\n */\r\n\r\nimport type { ButtonPureSize, ButtonPureAlignLabel } from './types';\r\nimport { getFocusStyle, getReducedMotionStyle } from '../../utils/styles';\r\n\r\nexport const getComponentCss = (\r\n _size: ButtonPureSize,\r\n _disabled: boolean,\r\n _loading: boolean,\r\n _underline: boolean,\r\n _active: boolean,\r\n _hideLabel: boolean,\r\n _alignLabel: ButtonPureAlignLabel,\r\n _stretch: boolean,\r\n): string => `\r\n\r\n /* ── Host ──────────────────────────────────────────────────────────── */\r\n\r\n :host {\r\n display: inline-flex;\r\n position: relative;\r\n font-family: var(--diwa-font-family-base);\r\n outline: none;\r\n }\r\n\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n\r\n /* Stretch: fill the parent's inline axis */\r\n :host([stretch]) {\r\n display: flex;\r\n width: 100%;\r\n }\r\n\r\n /* ── Root element (<button> or <a>) ─────────────────────────────────── */\r\n\r\n .root {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--diwa-space-2);\r\n flex-direction: row; /* overridden by alignLabel=start below */\r\n\r\n background: transparent;\r\n border: none;\r\n padding: var(--diwa-space-0-5) var(--diwa-space-1);\r\n margin: 0;\r\n cursor: pointer;\r\n\r\n font-family: inherit;\r\n font-size: var(--diwa-font-size-base);\r\n font-weight: var(--diwa-font-weight-regular);\r\n line-height: 1;\r\n color: var(--diwa-text-primary);\r\n text-decoration: none;\r\n white-space: nowrap;\r\n\r\n -webkit-appearance: none;\r\n appearance: none;\r\n -webkit-font-smoothing: antialiased;\r\n\r\n border-radius: var(--diwa-radius-sm);\r\n }\r\n\r\n /* Stretch: push icon and label to opposite edges */\r\n :host([stretch]) .root {\r\n width: 100%;\r\n justify-content: space-between;\r\n }\r\n\r\n /* ── Focus ring ─────────────────────────────────────────────────────── */\r\n\r\n ${getFocusStyle('.root')}\r\n\r\n /* ── Size ───────────────────────────────────────────────────────────── */\r\n\r\n :host([size=\"sm\"]) .root {\r\n font-size: var(--diwa-font-size-sm);\r\n }\r\n\r\n :host([size=\"lg\"]) .root {\r\n font-size: var(--diwa-font-size-lg);\r\n }\r\n\r\n /* ── Hover / Active ─────────────────────────────────────────────────── */\r\n\r\n .root:hover:not(:disabled) {\r\n background-color: var(--diwa-bg-hover);\r\n }\r\n\r\n /* ── Active state (CSS :active + [active] prop) ─────────────────────── */\r\n\r\n :host([active]) .root,\r\n .root:active:not(:disabled) {\r\n background-color: var(--diwa-bg-active);\r\n }\r\n\r\n /* ── Disabled ───────────────────────────────────────────────────────── */\r\n\r\n :host([disabled]) .root,\r\n .root:disabled {\r\n opacity: var(--diwa-opacity-disabled);\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n /* ── Loading ────────────────────────────────────────────────────────── */\r\n\r\n :host([loading]) .root {\r\n cursor: wait;\r\n pointer-events: none;\r\n }\r\n\r\n /* ── alignLabel: start → label on left, icon on right ──────────────── */\r\n\r\n :host([align-label=\"start\"]) .root {\r\n flex-direction: row-reverse;\r\n }\r\n\r\n /* ── Underline label text ───────────────────────────────────────────── */\r\n\r\n :host([underline]) .label {\r\n text-decoration: underline;\r\n }\r\n\r\n /* ── Icon wrapper ───────────────────────────────────────────────────── */\r\n\r\n .icon {\r\n display: contents;\r\n flex-shrink: 0;\r\n line-height: 0;\r\n }\r\n\r\n /* ── Label: visually hidden (sr-only / icon-only mode) ──────────────── */\r\n\r\n .label--hidden {\r\n border: 0;\r\n clip: rect(0, 0, 0, 0);\r\n height: 1px;\r\n margin: -1px;\r\n overflow: hidden;\r\n padding: 0;\r\n position: absolute;\r\n white-space: nowrap;\r\n width: 1px;\r\n }\r\n\r\n /* ── Spinner ────────────────────────────────────────────────────────── */\r\n\r\n .spinner {\r\n /* Size relative to current font-size so it scales with the button size tier */\r\n width: 1em;\r\n height: 1em;\r\n flex-shrink: 0;\r\n border: var(--diwa-border-width-base) solid currentColor;\r\n border-top-color: transparent;\r\n border-radius: 50%;\r\n animation: diwa-bp-spin var(--diwa-spinner-duration, 0.7s) linear infinite;\r\n }\r\n\r\n @keyframes diwa-bp-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n\r\n /* ── Reduced motion ─────────────────────────────────────────────────── */\r\n\r\n ${getReducedMotionStyle('.root', '.spinner')}\r\n`;\r\n","/**\r\n * diwa-button-pure-utils.ts\r\n * ==========================\r\n * ARIA helpers for <diwa-button-pure>.\r\n */\r\n\r\nexport interface ButtonPureAriaAttributes {\r\n 'aria-label'?: string;\r\n 'aria-busy'?: 'true';\r\n 'aria-disabled'?: 'true';\r\n}\r\n\r\nexport const getButtonPureAriaAttributes = (\r\n disabled: boolean,\r\n loading: boolean,\r\n label: string | undefined,\r\n isLink: boolean,\r\n): ButtonPureAriaAttributes => {\r\n const attrs: ButtonPureAriaAttributes = {};\r\n\r\n if (label) {\r\n attrs['aria-label'] = label;\r\n }\r\n\r\n if (loading) {\r\n attrs['aria-busy'] = 'true';\r\n }\r\n\r\n if (isLink && (disabled || loading)) {\r\n attrs['aria-disabled'] = 'true';\r\n }\r\n\r\n return attrs;\r\n};\r\n","import { Component, Element, Host, Prop, h } from \"@stencil/core\";\r\nimport type { ButtonPureSize, ButtonPureAlignLabel, ButtonPureType } from \"./types\";\r\nimport type { Theme } from \"../../utils/styles\";\r\nimport { getComponentCss } from \"./diwa-button-pure-styles\";\r\nimport { getButtonPureAriaAttributes } from \"./diwa-button-pure-utils\";\r\n\r\n/**\r\n * @component diwa-button-pure\r\n *\r\n * A transparent, text+icon action button — no background or border.\r\n * Mirrors the PDS `p-button-pure` component.\r\n *\r\n * Default layout: [icon] [label] (alignLabel=\"end\")\r\n * Reversed layout: [label] [icon] (alignLabel=\"start\")\r\n * Stretched layout: [icon] ····· [label] (stretch + alignLabel=\"end\")\r\n *\r\n * Usage:\r\n * <diwa-button-pure>Read more</diwa-button-pure>\r\n * <diwa-button-pure icon=\"arrow-left\" align-label=\"start\">Back</diwa-button-pure>\r\n * <diwa-button-pure hide-label label=\"Close\" icon=\"x\" />\r\n *\r\n * @slot default — Button label text\r\n */\r\n@Component({\r\n tag: \"diwa-button-pure\",\r\n shadow: { delegatesFocus: true },\r\n})\r\nexport class DiwaButtonPure {\r\n @Element() host!: HTMLDiwaButtonPureElement;\r\n\r\n // ──────────────────────────────────────────────────────────────\r\n // Props\r\n // ──────────────────────────────────────────────────────────────\r\n\r\n /** Per-component theme override (light / dark). */\r\n @Prop({ reflect: true }) theme: Theme = \"dark\";\r\n\r\n /** Text size tier. Controls both font-size and icon size. */\r\n @Prop({ reflect: true }) size: ButtonPureSize = \"md\";\r\n\r\n /**\r\n * Lucide icon name in kebab-case (e.g. `\"arrow-right\"`, `\"star\"`), or `\"none\"`\r\n * to render with no icon. Defaults to `\"arrow-right\"` — matching PDS.\r\n */\r\n @Prop() icon: string = \"arrow-right\";\r\n\r\n /** Disabled state. Blocks all pointer and keyboard interaction. */\r\n @Prop({ reflect: true }) disabled: boolean = false;\r\n\r\n /**\r\n * Loading state. Replaces the icon with a spinner, blocks interaction,\r\n * and announces aria-busy to screen readers.\r\n */\r\n @Prop({ reflect: true }) loading: boolean = false;\r\n\r\n /**\r\n * When `true`, the label slot is visually hidden (icon-only mode).\r\n * Always pair with the `label` prop for screen-reader accessible name.\r\n */\r\n @Prop({ reflect: true }) hideLabel: boolean = false;\r\n\r\n /** Forces the button into its active/pressed visual state. */\r\n @Prop({ reflect: true }) active: boolean = false;\r\n\r\n /** Adds an underline decoration to the label text. */\r\n @Prop({ reflect: true }) underline: boolean = false;\r\n\r\n /**\r\n * Controls which side the label appears on relative to the icon.\r\n * - `\"end\"` (default): [icon] [label]\r\n * - `\"start\"`: [label] [icon]\r\n */\r\n @Prop({ reflect: true }) alignLabel: ButtonPureAlignLabel = \"end\";\r\n\r\n /**\r\n * When `true`, the button stretches to fill its container and the space\r\n * between icon and label expands to fill remaining width.\r\n */\r\n @Prop({ reflect: true }) stretch: boolean = false;\r\n\r\n /** Native button type. Only applies when rendered as `<button>`. */\r\n @Prop() type: ButtonPureType = \"button\";\r\n\r\n /** Native button name — submitted with form data. */\r\n @Prop() name?: string;\r\n\r\n /** Native button value — submitted with form data. */\r\n @Prop() value?: string;\r\n\r\n /**\r\n * When set, renders as an `<a>` element (link semantics).\r\n * Pair with `target` for external links.\r\n */\r\n @Prop() href?: string;\r\n\r\n /** Link target — only meaningful when `href` is set. */\r\n @Prop() target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\";\r\n\r\n /**\r\n * Accessible label for icon-only buttons.\r\n * Required when `hideLabel` is `true`.\r\n */\r\n @Prop() label?: string;\r\n\r\n // ──────────────────────────────────────────────────────────────\r\n // Private helpers\r\n // ──────────────────────────────────────────────────────────────\r\n\r\n private get isInteractive(): boolean {\r\n return !this.disabled && !this.loading;\r\n }\r\n\r\n /** Icon pixel size scaled to the current size tier. */\r\n private get iconSize(): number {\r\n return this.size === \"sm\" ? 14 : this.size === \"lg\" ? 20 : 16;\r\n }\r\n\r\n private readonly handleClick = (e: MouseEvent): void => {\r\n if (!this.isInteractive) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n // ──────────────────────────────────────────────────────────────\r\n // Render\r\n // ──────────────────────────────────────────────────────────────\r\n\r\n render() {\r\n const isLink = !!this.href;\r\n const Tag = isLink ? \"a\" : \"button\";\r\n\r\n const ariaAttrs = getButtonPureAriaAttributes(\r\n this.disabled,\r\n this.loading,\r\n this.label,\r\n isLink,\r\n );\r\n\r\n const commonProps = {\r\n class: \"root\",\r\n onClick: this.handleClick,\r\n ...ariaAttrs,\r\n };\r\n\r\n const buttonProps = isLink\r\n ? {\r\n href: this.href,\r\n target: this.target,\r\n rel: this.target === \"_blank\" ? \"noopener noreferrer\" : undefined,\r\n tabIndex: this.disabled || this.loading ? -1 : undefined,\r\n }\r\n : {\r\n type: this.type,\r\n name: this.name,\r\n value: this.value,\r\n disabled: this.disabled || this.loading,\r\n };\r\n\r\n const hasIcon = this.icon !== \"none\";\r\n\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style\r\n innerHTML={getComponentCss(\r\n this.size,\r\n this.disabled,\r\n this.loading,\r\n this.underline,\r\n this.active,\r\n this.hideLabel,\r\n this.alignLabel,\r\n this.stretch,\r\n )}\r\n />\r\n\r\n <Tag {...commonProps} {...buttonProps} part=\"base\">\r\n {/* Spinner replaces the icon during loading */}\r\n {this.loading ? (\r\n <span class=\"spinner\" aria-hidden=\"true\" part=\"spinner\" />\r\n ) : (\r\n hasIcon && (\r\n <span class=\"icon\" aria-hidden=\"true\">\r\n <diwa-icon name={this.icon} size={this.iconSize} />\r\n </span>\r\n )\r\n )}\r\n\r\n {/* Label — visually hidden when hideLabel=true but kept for AT */}\r\n <span\r\n class={`label${this.hideLabel ? \" label--hidden\" : \"\"}`}\r\n part=\"label\"\r\n >\r\n <slot />\r\n </span>\r\n </Tag>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
1
+ {"file":"p-105f3f97.js","mappings":"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","names":[],"sources":["src/components/diwa-button-pure/diwa-button-pure-styles.ts","src/components/diwa-button-pure/diwa-button-pure-utils.ts","src/components/diwa-button-pure/diwa-button-pure.tsx"],"sourcesContent":["/**\r\n * diwa-button-pure-styles.ts\r\n * ===========================\r\n * CSS-in-JS styles for <diwa-button-pure>.\r\n *\r\n * A minimal, transparent button: icon + label only, no background or border.\r\n * Mirrors the PDS p-button-pure aesthetic.\r\n *\r\n * Layout rules:\r\n * alignLabel='end' (default) → icon label\r\n * alignLabel='start' → label icon (via flex-direction: row-reverse)\r\n * stretch=true → fills container width, gap between icon and label\r\n */\r\n\r\nimport type { ButtonPureSize, ButtonPureAlignLabel } from './types';\r\nimport { getFocusStyle, getReducedMotionStyle } from '../../utils/styles';\r\n\r\nexport const getComponentCss = (\r\n _size: ButtonPureSize,\r\n _disabled: boolean,\r\n _loading: boolean,\r\n _underline: boolean,\r\n _active: boolean,\r\n _hideLabel: boolean,\r\n _alignLabel: ButtonPureAlignLabel,\r\n _stretch: boolean,\r\n): string => `\r\n\r\n /* ── Host ──────────────────────────────────────────────────────────── */\r\n\r\n :host {\r\n display: inline-flex;\r\n position: relative;\r\n font-family: var(--diwa-font-family-base);\r\n outline: none;\r\n }\r\n\r\n :host([hidden]) {\r\n display: none;\r\n }\r\n\r\n /* Stretch: fill the parent's inline axis */\r\n :host([stretch]) {\r\n display: flex;\r\n width: 100%;\r\n }\r\n\r\n /* ── Root element (<button> or <a>) ─────────────────────────────────── */\r\n\r\n .root {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--diwa-space-2);\r\n flex-direction: row; /* overridden by alignLabel=start below */\r\n\r\n background: transparent;\r\n border: none;\r\n padding: var(--diwa-space-0-5) var(--diwa-space-1);\r\n margin: 0;\r\n cursor: pointer;\r\n\r\n font-family: inherit;\r\n font-size: var(--diwa-font-size-base);\r\n font-weight: var(--diwa-font-weight-regular);\r\n line-height: 1;\r\n color: var(--diwa-text-primary);\r\n text-decoration: none;\r\n white-space: nowrap;\r\n\r\n -webkit-appearance: none;\r\n appearance: none;\r\n -webkit-font-smoothing: antialiased;\r\n\r\n border-radius: var(--diwa-radius-sm);\r\n }\r\n\r\n /* Stretch: push icon and label to opposite edges */\r\n :host([stretch]) .root {\r\n width: 100%;\r\n justify-content: space-between;\r\n }\r\n\r\n /* ── Focus ring ─────────────────────────────────────────────────────── */\r\n\r\n ${getFocusStyle('.root')}\r\n\r\n /* ── Size ───────────────────────────────────────────────────────────── */\r\n\r\n :host([size=\"sm\"]) .root {\r\n font-size: var(--diwa-font-size-sm);\r\n }\r\n\r\n :host([size=\"lg\"]) .root {\r\n font-size: var(--diwa-font-size-lg);\r\n }\r\n\r\n /* ── Hover / Active ─────────────────────────────────────────────────── */\r\n\r\n .root:hover:not(:disabled) {\r\n background-color: var(--diwa-bg-hover);\r\n }\r\n\r\n /* ── Active state (CSS :active + [active] prop) ─────────────────────── */\r\n\r\n :host([active]) .root,\r\n .root:active:not(:disabled) {\r\n background-color: var(--diwa-bg-active);\r\n }\r\n\r\n /* ── Disabled ───────────────────────────────────────────────────────── */\r\n\r\n :host([disabled]) .root,\r\n .root:disabled {\r\n opacity: var(--diwa-opacity-disabled);\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n /* ── Loading ────────────────────────────────────────────────────────── */\r\n\r\n :host([loading]) .root {\r\n cursor: wait;\r\n pointer-events: none;\r\n }\r\n\r\n /* ── alignLabel: start → label on left, icon on right ──────────────── */\r\n\r\n :host([align-label=\"start\"]) .root {\r\n flex-direction: row-reverse;\r\n }\r\n\r\n /* ── Underline label text ───────────────────────────────────────────── */\r\n\r\n :host([underline]) .label {\r\n text-decoration: underline;\r\n }\r\n\r\n /* ── Icon wrapper ───────────────────────────────────────────────────── */\r\n\r\n .icon {\r\n display: contents;\r\n flex-shrink: 0;\r\n line-height: 0;\r\n }\r\n\r\n /* ── Label: visually hidden (sr-only / icon-only mode) ──────────────── */\r\n\r\n .label--hidden {\r\n border: 0;\r\n clip: rect(0, 0, 0, 0);\r\n height: 1px;\r\n margin: -1px;\r\n overflow: hidden;\r\n padding: 0;\r\n position: absolute;\r\n white-space: nowrap;\r\n width: 1px;\r\n }\r\n\r\n /* ── Spinner ────────────────────────────────────────────────────────── */\r\n\r\n .spinner {\r\n /* Size relative to current font-size so it scales with the button size tier */\r\n width: 1em;\r\n height: 1em;\r\n flex-shrink: 0;\r\n border: var(--diwa-border-width-base) solid currentColor;\r\n border-top-color: transparent;\r\n border-radius: 50%;\r\n animation: diwa-bp-spin var(--diwa-spinner-duration, 0.7s) linear infinite;\r\n }\r\n\r\n @keyframes diwa-bp-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n\r\n /* ── Reduced motion ─────────────────────────────────────────────────── */\r\n\r\n ${getReducedMotionStyle('.root', '.spinner')}\r\n`;\r\n","/**\r\n * diwa-button-pure-utils.ts\r\n * ==========================\r\n * ARIA helpers for <diwa-button-pure>.\r\n */\r\n\r\nexport interface ButtonPureAriaAttributes {\r\n 'aria-label'?: string;\r\n 'aria-busy'?: 'true';\r\n 'aria-disabled'?: 'true';\r\n}\r\n\r\nexport const getButtonPureAriaAttributes = (\r\n disabled: boolean,\r\n loading: boolean,\r\n label: string | undefined,\r\n isLink: boolean,\r\n): ButtonPureAriaAttributes => {\r\n const attrs: ButtonPureAriaAttributes = {};\r\n\r\n if (label) {\r\n attrs['aria-label'] = label;\r\n }\r\n\r\n if (loading) {\r\n attrs['aria-busy'] = 'true';\r\n }\r\n\r\n if (isLink && (disabled || loading)) {\r\n attrs['aria-disabled'] = 'true';\r\n }\r\n\r\n return attrs;\r\n};\r\n","import { Component, Element, Host, Prop, h } from \"@stencil/core\";\r\nimport type { ButtonPureSize, ButtonPureAlignLabel, ButtonPureType } from \"./types\";\r\nimport type { Theme } from \"../../utils/styles\";\r\nimport { getComponentCss } from \"./diwa-button-pure-styles\";\r\nimport { getButtonPureAriaAttributes } from \"./diwa-button-pure-utils\";\r\n\r\n/**\r\n * @component diwa-button-pure\r\n *\r\n * A transparent, text+icon action button — no background or border.\r\n * Mirrors the PDS `p-button-pure` component.\r\n *\r\n * Default layout: [icon] [label] (alignLabel=\"end\")\r\n * Reversed layout: [label] [icon] (alignLabel=\"start\")\r\n * Stretched layout: [icon] ····· [label] (stretch + alignLabel=\"end\")\r\n *\r\n * Usage:\r\n * <diwa-button-pure>Read more</diwa-button-pure>\r\n * <diwa-button-pure icon=\"arrow-left\" align-label=\"start\">Back</diwa-button-pure>\r\n * <diwa-button-pure hide-label label=\"Close\" icon=\"x\" />\r\n *\r\n * @slot default — Button label text\r\n */\r\n@Component({\r\n tag: \"diwa-button-pure\",\r\n shadow: { delegatesFocus: true },\r\n})\r\nexport class DiwaButtonPure {\r\n @Element() host!: HTMLDiwaButtonPureElement;\r\n\r\n // ──────────────────────────────────────────────────────────────\r\n // Props\r\n // ──────────────────────────────────────────────────────────────\r\n\r\n /** Per-component theme override (light / dark). */\r\n @Prop({ reflect: true }) theme: Theme = \"dark\";\r\n\r\n /** Text size tier. Controls both font-size and icon size. */\r\n @Prop({ reflect: true }) size: ButtonPureSize = \"md\";\r\n\r\n /**\r\n * Lucide icon name in kebab-case (e.g. `\"arrow-right\"`, `\"star\"`), or `\"none\"`\r\n * to render with no icon. Defaults to `\"arrow-right\"` — matching PDS.\r\n */\r\n @Prop() icon: string = \"arrow-right\";\r\n\r\n /** Disabled state. Blocks all pointer and keyboard interaction. */\r\n @Prop({ reflect: true }) disabled: boolean = false;\r\n\r\n /**\r\n * Loading state. Replaces the icon with a spinner, blocks interaction,\r\n * and announces aria-busy to screen readers.\r\n */\r\n @Prop({ reflect: true }) loading: boolean = false;\r\n\r\n /**\r\n * When `true`, the label slot is visually hidden (icon-only mode).\r\n * Always pair with the `label` prop for screen-reader accessible name.\r\n */\r\n @Prop({ reflect: true }) hideLabel: boolean = false;\r\n\r\n /** Forces the button into its active/pressed visual state. */\r\n @Prop({ reflect: true }) active: boolean = false;\r\n\r\n /** Adds an underline decoration to the label text. */\r\n @Prop({ reflect: true }) underline: boolean = false;\r\n\r\n /**\r\n * Controls which side the label appears on relative to the icon.\r\n * - `\"end\"` (default): [icon] [label]\r\n * - `\"start\"`: [label] [icon]\r\n */\r\n @Prop({ reflect: true }) alignLabel: ButtonPureAlignLabel = \"end\";\r\n\r\n /**\r\n * When `true`, the button stretches to fill its container and the space\r\n * between icon and label expands to fill remaining width.\r\n */\r\n @Prop({ reflect: true }) stretch: boolean = false;\r\n\r\n /** Native button type. Only applies when rendered as `<button>`. */\r\n @Prop() type: ButtonPureType = \"button\";\r\n\r\n /** Native button name — submitted with form data. */\r\n @Prop() name?: string;\r\n\r\n /** Native button value — submitted with form data. */\r\n @Prop() value?: string;\r\n\r\n /**\r\n * When set, renders as an `<a>` element (link semantics).\r\n * Pair with `target` for external links.\r\n */\r\n @Prop() href?: string;\r\n\r\n /** Link target — only meaningful when `href` is set. */\r\n @Prop() target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\";\r\n\r\n /**\r\n * Accessible label for icon-only buttons.\r\n * Required when `hideLabel` is `true`.\r\n */\r\n @Prop() label?: string;\r\n\r\n // ──────────────────────────────────────────────────────────────\r\n // Private helpers\r\n // ──────────────────────────────────────────────────────────────\r\n\r\n private get isInteractive(): boolean {\r\n return !this.disabled && !this.loading;\r\n }\r\n\r\n /** Icon pixel size scaled to the current size tier. */\r\n private get iconSize(): number {\r\n return this.size === \"sm\" ? 14 : this.size === \"lg\" ? 20 : 16;\r\n }\r\n\r\n private readonly handleClick = (e: MouseEvent): void => {\r\n if (!this.isInteractive) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n // ──────────────────────────────────────────────────────────────\r\n // Render\r\n // ──────────────────────────────────────────────────────────────\r\n\r\n render() {\r\n const isLink = !!this.href;\r\n const Tag = isLink ? \"a\" : \"button\";\r\n\r\n const ariaAttrs = getButtonPureAriaAttributes(\r\n this.disabled,\r\n this.loading,\r\n this.label,\r\n isLink,\r\n );\r\n\r\n const commonProps = {\r\n class: \"root\",\r\n onClick: this.handleClick,\r\n ...ariaAttrs,\r\n };\r\n\r\n const buttonProps = isLink\r\n ? {\r\n href: this.href,\r\n target: this.target,\r\n rel: this.target === \"_blank\" ? \"noopener noreferrer\" : undefined,\r\n tabIndex: this.disabled || this.loading ? -1 : undefined,\r\n }\r\n : {\r\n type: this.type,\r\n name: this.name,\r\n value: this.value,\r\n disabled: this.disabled || this.loading,\r\n };\r\n\r\n const hasIcon = this.icon !== \"none\";\r\n\r\n return (\r\n <Host data-theme={this.theme}>\r\n <style\r\n innerHTML={getComponentCss(\r\n this.size,\r\n this.disabled,\r\n this.loading,\r\n this.underline,\r\n this.active,\r\n this.hideLabel,\r\n this.alignLabel,\r\n this.stretch,\r\n )}\r\n />\r\n\r\n <Tag {...commonProps} {...buttonProps} part=\"base\">\r\n {/* Spinner replaces the icon during loading */}\r\n {this.loading ? (\r\n <span class=\"spinner\" aria-hidden=\"true\" part=\"spinner\" />\r\n ) : (\r\n hasIcon && (\r\n <span class=\"icon\" aria-hidden=\"true\">\r\n <diwa-icon name={this.icon} size={this.iconSize} />\r\n </span>\r\n )\r\n )}\r\n\r\n {/* Label — visually hidden when hideLabel=true but kept for AT */}\r\n <span\r\n class={`label${this.hideLabel ? \" label--hidden\" : \"\"}`}\r\n part=\"label\"\r\n >\r\n <slot />\r\n </span>\r\n </Tag>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}