@helixui/library 2.1.2 → 3.0.0-next.65

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 (819) hide show
  1. package/custom-elements.json +904 -1044
  2. package/dist/base/helix-element.d.ts +20 -8
  3. package/dist/base/helix-element.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/hx-accordion-item.d.ts +7 -4
  5. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/hx-accordion-item.styles.d.ts.map +1 -1
  7. package/dist/components/hx-accordion/hx-accordion.d.ts +3 -2
  8. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  9. package/dist/components/hx-accordion/hx-accordion.styles.d.ts.map +1 -1
  10. package/dist/components/hx-accordion/index.d.ts +1 -0
  11. package/dist/components/hx-accordion/index.d.ts.map +1 -1
  12. package/dist/components/hx-accordion/index.js +1 -1
  13. package/dist/components/hx-action-bar/hx-action-bar.d.ts +26 -14
  14. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  15. package/dist/components/hx-action-bar/hx-action-bar.styles.d.ts.map +1 -1
  16. package/dist/components/hx-action-bar/index.js +1 -1
  17. package/dist/components/hx-alert/hx-alert.d.ts +7 -2
  18. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  19. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  20. package/dist/components/hx-alert/index.d.ts +1 -0
  21. package/dist/components/hx-alert/index.d.ts.map +1 -1
  22. package/dist/components/hx-alert/index.js +1 -1
  23. package/dist/components/hx-avatar/hx-avatar.d.ts +3 -2
  24. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  25. package/dist/components/hx-avatar/index.js +1 -1
  26. package/dist/components/hx-badge/hx-badge.d.ts +2 -9
  27. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  28. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  29. package/dist/components/hx-badge/index.d.ts +1 -1
  30. package/dist/components/hx-badge/index.d.ts.map +1 -1
  31. package/dist/components/hx-badge/index.js +1 -1
  32. package/dist/components/hx-banner/hx-banner.d.ts +3 -2
  33. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  34. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  35. package/dist/components/hx-banner/index.js +1 -1
  36. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +2 -2
  37. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  38. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  39. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +9 -19
  40. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  41. package/dist/components/hx-breadcrumb/hx-breadcrumb.styles.d.ts.map +1 -1
  42. package/dist/components/hx-breadcrumb/index.js +1 -1
  43. package/dist/components/hx-button/hx-button.d.ts +31 -9
  44. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  45. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  46. package/dist/components/hx-button/index.d.ts +1 -0
  47. package/dist/components/hx-button/index.d.ts.map +1 -1
  48. package/dist/components/hx-button/index.js +1 -1
  49. package/dist/components/hx-button-group/hx-button-group.d.ts +4 -6
  50. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  51. package/dist/components/hx-button-group/hx-button-group.styles.d.ts.map +1 -1
  52. package/dist/components/hx-button-group/index.js +1 -1
  53. package/dist/components/hx-card/hx-card.d.ts +19 -2
  54. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  55. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  56. package/dist/components/hx-card/index.js +1 -1
  57. package/dist/components/hx-carousel/hx-carousel-item.d.ts +2 -2
  58. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  59. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts.map +1 -1
  60. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  61. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  62. package/dist/components/hx-carousel/hx-carousel.styles.d.ts.map +1 -1
  63. package/dist/components/hx-carousel/index.js +1 -1
  64. package/dist/components/hx-checkbox/hx-checkbox.d.ts +52 -5
  65. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  66. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  67. package/dist/components/hx-checkbox/index.d.ts +1 -0
  68. package/dist/components/hx-checkbox/index.d.ts.map +1 -1
  69. package/dist/components/hx-checkbox/index.js +1 -1
  70. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +14 -20
  71. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  72. package/dist/components/hx-checkbox-group/hx-checkbox-group.styles.d.ts.map +1 -1
  73. package/dist/components/hx-checkbox-group/index.d.ts +1 -0
  74. package/dist/components/hx-checkbox-group/index.d.ts.map +1 -1
  75. package/dist/components/hx-checkbox-group/index.js +1 -1
  76. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
  77. package/dist/components/hx-clinical-status/index.js +1 -1
  78. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +3 -2
  79. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  80. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  81. package/dist/components/hx-code-snippet/index.js +1 -1
  82. package/dist/components/hx-color-picker/hx-color-picker.d.ts +12 -19
  83. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  84. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  85. package/dist/components/hx-color-picker/index.d.ts +1 -0
  86. package/dist/components/hx-color-picker/index.d.ts.map +1 -1
  87. package/dist/components/hx-color-picker/index.js +1 -1
  88. package/dist/components/hx-combobox/hx-combobox.d.ts +45 -22
  89. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  90. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  91. package/dist/components/hx-combobox/index.d.ts +1 -0
  92. package/dist/components/hx-combobox/index.d.ts.map +1 -1
  93. package/dist/components/hx-combobox/index.js +1 -1
  94. package/dist/components/hx-container/hx-container.d.ts +2 -4
  95. package/dist/components/hx-container/hx-container.d.ts.map +1 -1
  96. package/dist/components/hx-container/hx-container.styles.d.ts.map +1 -1
  97. package/dist/components/hx-container/index.d.ts +0 -1
  98. package/dist/components/hx-container/index.d.ts.map +1 -1
  99. package/dist/components/hx-container/index.js +1 -1
  100. package/dist/components/hx-copy-button/hx-copy-button.d.ts +2 -2
  101. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  102. package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
  103. package/dist/components/hx-copy-button/index.js +1 -1
  104. package/dist/components/hx-counter/hx-counter.d.ts +23 -2
  105. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  106. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  107. package/dist/components/hx-counter/index.js +1 -1
  108. package/dist/components/hx-data-table/hx-data-table.d.ts +46 -2
  109. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  110. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  111. package/dist/components/hx-data-table/index.d.ts +1 -0
  112. package/dist/components/hx-data-table/index.d.ts.map +1 -1
  113. package/dist/components/hx-data-table/index.js +1 -1
  114. package/dist/components/hx-date-picker/hx-date-picker.d.ts +35 -35
  115. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  116. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  117. package/dist/components/hx-date-picker/index.d.ts +1 -0
  118. package/dist/components/hx-date-picker/index.d.ts.map +1 -1
  119. package/dist/components/hx-date-picker/index.js +1 -1
  120. package/dist/components/hx-dialog/hx-dialog.d.ts +44 -5
  121. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  122. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  123. package/dist/components/hx-dialog/index.js +1 -1
  124. package/dist/components/hx-divider/hx-divider.d.ts +3 -4
  125. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  126. package/dist/components/hx-divider/hx-divider.styles.d.ts.map +1 -1
  127. package/dist/components/hx-divider/index.d.ts +0 -1
  128. package/dist/components/hx-divider/index.d.ts.map +1 -1
  129. package/dist/components/hx-divider/index.js +1 -1
  130. package/dist/components/hx-drawer/hx-drawer.d.ts +39 -2
  131. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  132. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  133. package/dist/components/hx-drawer/index.js +1 -1
  134. package/dist/components/hx-dropdown/hx-dropdown.d.ts +11 -7
  135. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  136. package/dist/components/hx-dropdown/hx-dropdown.styles.d.ts.map +1 -1
  137. package/dist/components/hx-dropdown/index.js +1 -1
  138. package/dist/components/hx-field/hx-field.d.ts +4 -3
  139. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  140. package/dist/components/hx-field/hx-field.styles.d.ts.map +1 -1
  141. package/dist/components/hx-field/index.js +1 -1
  142. package/dist/components/hx-field-label/hx-field-label.d.ts +2 -2
  143. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  144. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  145. package/dist/components/hx-field-label/index.js +1 -1
  146. package/dist/components/hx-file-upload/hx-file-upload.d.ts +38 -18
  147. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  148. package/dist/components/hx-file-upload/hx-file-upload.styles.d.ts.map +1 -1
  149. package/dist/components/hx-file-upload/index.d.ts +1 -0
  150. package/dist/components/hx-file-upload/index.d.ts.map +1 -1
  151. package/dist/components/hx-file-upload/index.js +1 -1
  152. package/dist/components/hx-form/hx-form.d.ts +2 -2
  153. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  154. package/dist/components/hx-form/hx-form.styles.d.ts +8 -0
  155. package/dist/components/hx-form/hx-form.styles.d.ts.map +1 -1
  156. package/dist/components/hx-form/index.js +1 -1
  157. package/dist/components/hx-format-date/hx-format-date.d.ts +2 -2
  158. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  159. package/dist/components/hx-format-date/hx-format-date.styles.d.ts.map +1 -1
  160. package/dist/components/hx-format-date/index.js +1 -1
  161. package/dist/components/hx-grid/hx-grid.d.ts +4 -3
  162. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  163. package/dist/components/hx-grid/hx-grid.styles.d.ts.map +1 -1
  164. package/dist/components/hx-grid/index.js +1 -1
  165. package/dist/components/hx-help-text/hx-help-text.d.ts +2 -4
  166. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  167. package/dist/components/hx-help-text/hx-help-text.styles.d.ts.map +1 -1
  168. package/dist/components/hx-help-text/index.js +1 -1
  169. package/dist/components/hx-icon/hx-icon.d.ts +17 -2
  170. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  171. package/dist/components/hx-icon/hx-icon.styles.d.ts.map +1 -1
  172. package/dist/components/hx-icon/index.js +1 -1
  173. package/dist/components/hx-icon-button/hx-icon-button.d.ts +10 -14
  174. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  175. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  176. package/dist/components/hx-icon-button/index.js +1 -1
  177. package/dist/components/hx-image/hx-image.d.ts +2 -2
  178. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  179. package/dist/components/hx-image/hx-image.styles.d.ts.map +1 -1
  180. package/dist/components/hx-image/index.js +1 -1
  181. package/dist/components/hx-link/hx-link.d.ts +4 -2
  182. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  183. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  184. package/dist/components/hx-link/index.js +1 -1
  185. package/dist/components/hx-list/hx-list-item.d.ts +3 -2
  186. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  187. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  188. package/dist/components/hx-list/hx-list.d.ts +3 -2
  189. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  190. package/dist/components/hx-list/hx-list.styles.d.ts.map +1 -1
  191. package/dist/components/hx-list/index.js +1 -1
  192. package/dist/components/hx-menu/hx-menu-divider.d.ts +2 -2
  193. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  194. package/dist/components/hx-menu/hx-menu-divider.styles.d.ts.map +1 -1
  195. package/dist/components/hx-menu/hx-menu-item.d.ts +2 -2
  196. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  197. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  198. package/dist/components/hx-menu/hx-menu.d.ts +2 -2
  199. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  200. package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
  201. package/dist/components/hx-menu/index.js +1 -1
  202. package/dist/components/hx-meter/hx-meter.d.ts +3 -4
  203. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  204. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  205. package/dist/components/hx-meter/index.js +1 -1
  206. package/dist/components/hx-nav/hx-nav.d.ts +2 -4
  207. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  208. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  209. package/dist/components/hx-nav/index.d.ts +1 -1
  210. package/dist/components/hx-nav/index.d.ts.map +1 -1
  211. package/dist/components/hx-nav/index.js +1 -1
  212. package/dist/components/hx-number-input/hx-number-input.d.ts +14 -20
  213. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  214. package/dist/components/hx-number-input/hx-number-input.styles.d.ts.map +1 -1
  215. package/dist/components/hx-number-input/index.d.ts +1 -0
  216. package/dist/components/hx-number-input/index.d.ts.map +1 -1
  217. package/dist/components/hx-number-input/index.js +1 -1
  218. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +2 -2
  219. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  220. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  221. package/dist/components/hx-overflow-menu/index.js +1 -1
  222. package/dist/components/hx-pagination/hx-pagination.d.ts +10 -2
  223. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  224. package/dist/components/hx-pagination/index.d.ts +1 -0
  225. package/dist/components/hx-pagination/index.d.ts.map +1 -1
  226. package/dist/components/hx-pagination/index.js +1 -1
  227. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +47 -5
  228. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
  229. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -1
  230. package/dist/components/hx-patient-banner/index.js +1 -1
  231. package/dist/components/hx-phi-field/hx-phi-field.d.ts +87 -6
  232. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  233. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
  234. package/dist/components/hx-phi-field/index.js +1 -1
  235. package/dist/components/hx-popover/hx-popover.d.ts +4 -2
  236. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  237. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  238. package/dist/components/hx-popover/index.js +1 -1
  239. package/dist/components/hx-popup/hx-popup.d.ts +7 -2
  240. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  241. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  242. package/dist/components/hx-popup/index.js +1 -1
  243. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +3 -4
  244. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  245. package/dist/components/hx-progress-bar/index.js +1 -1
  246. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +3 -2
  247. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  248. package/dist/components/hx-progress-ring/hx-progress-ring.styles.d.ts.map +1 -1
  249. package/dist/components/hx-progress-ring/index.js +1 -1
  250. package/dist/components/hx-prose/hx-prose.d.ts +3 -2
  251. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  252. package/dist/components/hx-prose/hx-prose.styles.d.ts +8 -0
  253. package/dist/components/hx-prose/hx-prose.styles.d.ts.map +1 -1
  254. package/dist/components/hx-prose/index.js +1 -1
  255. package/dist/components/hx-radio-group/hx-radio-group.d.ts +14 -39
  256. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  257. package/dist/components/hx-radio-group/hx-radio-group.styles.d.ts.map +1 -1
  258. package/dist/components/hx-radio-group/hx-radio.d.ts +19 -4
  259. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  260. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  261. package/dist/components/hx-radio-group/index.d.ts +1 -0
  262. package/dist/components/hx-radio-group/index.d.ts.map +1 -1
  263. package/dist/components/hx-radio-group/index.js +1 -1
  264. package/dist/components/hx-rating/hx-rating.d.ts +9 -20
  265. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  266. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  267. package/dist/components/hx-rating/index.d.ts +1 -0
  268. package/dist/components/hx-rating/index.d.ts.map +1 -1
  269. package/dist/components/hx-rating/index.js +1 -1
  270. package/dist/components/hx-select/hx-select.d.ts +26 -17
  271. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  272. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  273. package/dist/components/hx-select/index.d.ts +1 -0
  274. package/dist/components/hx-select/index.d.ts.map +1 -1
  275. package/dist/components/hx-select/index.js +1 -1
  276. package/dist/components/hx-side-nav/hx-nav-item.d.ts +2 -5
  277. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  278. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  279. package/dist/components/hx-side-nav/hx-side-nav.d.ts +3 -2
  280. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  281. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  282. package/dist/components/hx-side-nav/index.js +1 -1
  283. package/dist/components/hx-skeleton/hx-skeleton.d.ts +4 -3
  284. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  285. package/dist/components/hx-skeleton/hx-skeleton.styles.d.ts.map +1 -1
  286. package/dist/components/hx-skeleton/index.js +1 -1
  287. package/dist/components/hx-slider/hx-slider.d.ts +18 -22
  288. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  289. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  290. package/dist/components/hx-slider/index.d.ts +1 -0
  291. package/dist/components/hx-slider/index.d.ts.map +1 -1
  292. package/dist/components/hx-slider/index.js +1 -1
  293. package/dist/components/hx-spinner/hx-spinner.d.ts +2 -2
  294. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  295. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  296. package/dist/components/hx-spinner/index.js +1 -1
  297. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  298. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  299. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  300. package/dist/components/hx-split-button/index.js +1 -1
  301. package/dist/components/hx-split-panel/hx-split-panel.d.ts +12 -2
  302. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  303. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  304. package/dist/components/hx-split-panel/index.js +1 -1
  305. package/dist/components/hx-stack/hx-stack.d.ts +2 -2
  306. package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
  307. package/dist/components/hx-stack/hx-stack.styles.d.ts.map +1 -1
  308. package/dist/components/hx-stack/index.js +1 -1
  309. package/dist/components/hx-stat/hx-stat.d.ts +6 -2
  310. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  311. package/dist/components/hx-stat/hx-stat.styles.d.ts.map +1 -1
  312. package/dist/components/hx-stat/index.js +1 -1
  313. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +3 -2
  314. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  315. package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
  316. package/dist/components/hx-status-indicator/index.js +1 -1
  317. package/dist/components/hx-steps/hx-step.d.ts +3 -2
  318. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  319. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  320. package/dist/components/hx-steps/hx-steps.d.ts +11 -4
  321. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  322. package/dist/components/hx-steps/hx-steps.styles.d.ts.map +1 -1
  323. package/dist/components/hx-steps/index.js +1 -1
  324. package/dist/components/hx-structured-list/hx-structured-list.d.ts +3 -3
  325. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  326. package/dist/components/hx-structured-list/hx-structured-list.styles.d.ts.map +1 -1
  327. package/dist/components/hx-structured-list/index.js +1 -1
  328. package/dist/components/hx-style-scope/hx-style-scope.d.ts +4 -3
  329. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -1
  330. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -1
  331. package/dist/components/hx-style-scope/index.js +1 -1
  332. package/dist/components/hx-switch/hx-switch.d.ts +25 -29
  333. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  334. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  335. package/dist/components/hx-switch/index.d.ts +2 -1
  336. package/dist/components/hx-switch/index.d.ts.map +1 -1
  337. package/dist/components/hx-switch/index.js +1 -1
  338. package/dist/components/hx-table/hx-table.d.ts +3 -2
  339. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  340. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  341. package/dist/components/hx-table/hx-tbody.d.ts +2 -2
  342. package/dist/components/hx-table/hx-tbody.d.ts.map +1 -1
  343. package/dist/components/hx-table/hx-td.d.ts +2 -2
  344. package/dist/components/hx-table/hx-td.d.ts.map +1 -1
  345. package/dist/components/hx-table/hx-tfoot.d.ts +2 -2
  346. package/dist/components/hx-table/hx-tfoot.d.ts.map +1 -1
  347. package/dist/components/hx-table/hx-th.d.ts +2 -2
  348. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  349. package/dist/components/hx-table/hx-thead.d.ts +2 -2
  350. package/dist/components/hx-table/hx-thead.d.ts.map +1 -1
  351. package/dist/components/hx-table/hx-tr.d.ts +2 -2
  352. package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
  353. package/dist/components/hx-table/index.js +1 -1
  354. package/dist/components/hx-tabs/hx-tab-panel.d.ts +2 -2
  355. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  356. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  357. package/dist/components/hx-tabs/hx-tab.d.ts +2 -2
  358. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  359. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  360. package/dist/components/hx-tabs/hx-tabs.d.ts +14 -2
  361. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  362. package/dist/components/hx-tabs/hx-tabs.styles.d.ts.map +1 -1
  363. package/dist/components/hx-tabs/index.d.ts +1 -0
  364. package/dist/components/hx-tabs/index.d.ts.map +1 -1
  365. package/dist/components/hx-tabs/index.js +1 -1
  366. package/dist/components/hx-tag/hx-tag.d.ts +2 -4
  367. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  368. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  369. package/dist/components/hx-tag/index.d.ts +0 -2
  370. package/dist/components/hx-tag/index.d.ts.map +1 -1
  371. package/dist/components/hx-tag/index.js +1 -1
  372. package/dist/components/hx-text/hx-text.d.ts +2 -2
  373. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  374. package/dist/components/hx-text/hx-text.styles.d.ts.map +1 -1
  375. package/dist/components/hx-text/index.js +1 -1
  376. package/dist/components/hx-text-input/hx-text-input.d.ts +34 -7
  377. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  378. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  379. package/dist/components/hx-text-input/index.d.ts +1 -0
  380. package/dist/components/hx-text-input/index.d.ts.map +1 -1
  381. package/dist/components/hx-text-input/index.js +1 -1
  382. package/dist/components/hx-textarea/hx-textarea.d.ts +41 -25
  383. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  384. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  385. package/dist/components/hx-textarea/index.d.ts +1 -0
  386. package/dist/components/hx-textarea/index.d.ts.map +1 -1
  387. package/dist/components/hx-textarea/index.js +1 -1
  388. package/dist/components/hx-theme/hx-theme.d.ts +3 -11
  389. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  390. package/dist/components/hx-theme/hx-theme.styles.d.ts.map +1 -1
  391. package/dist/components/hx-theme/index.d.ts +0 -2
  392. package/dist/components/hx-theme/index.d.ts.map +1 -1
  393. package/dist/components/hx-theme/index.js +1 -1
  394. package/dist/components/hx-time-picker/hx-time-picker.d.ts +13 -31
  395. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  396. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  397. package/dist/components/hx-time-picker/index.d.ts +1 -0
  398. package/dist/components/hx-time-picker/index.d.ts.map +1 -1
  399. package/dist/components/hx-time-picker/index.js +1 -1
  400. package/dist/components/hx-toast/hx-toast-stack.d.ts +2 -2
  401. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  402. package/dist/components/hx-toast/hx-toast.d.ts +3 -2
  403. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  404. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  405. package/dist/components/hx-toast/index.js +1 -1
  406. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +10 -13
  407. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  408. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  409. package/dist/components/hx-toggle-button/index.d.ts +1 -0
  410. package/dist/components/hx-toggle-button/index.d.ts.map +1 -1
  411. package/dist/components/hx-toggle-button/index.js +1 -1
  412. package/dist/components/hx-tooltip/hx-tooltip.d.ts +2 -2
  413. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  414. package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
  415. package/dist/components/hx-tooltip/index.js +1 -1
  416. package/dist/components/hx-top-nav/hx-top-nav.d.ts +2 -2
  417. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  418. package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
  419. package/dist/components/hx-top-nav/index.js +1 -1
  420. package/dist/components/hx-tree-view/hx-tree-item.d.ts +2 -4
  421. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  422. package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
  423. package/dist/components/hx-tree-view/hx-tree-view.d.ts +2 -4
  424. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  425. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  426. package/dist/components/hx-tree-view/index.d.ts +0 -4
  427. package/dist/components/hx-tree-view/index.d.ts.map +1 -1
  428. package/dist/components/hx-tree-view/index.js +1 -1
  429. package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts +2 -2
  430. package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts.map +1 -1
  431. package/dist/components/hx-visually-hidden/hx-visually-hidden.styles.d.ts.map +1 -1
  432. package/dist/components/hx-visually-hidden/index.js +1 -1
  433. package/dist/css/helix-all.css +3717 -786
  434. package/dist/css/helix-core.css +277 -64
  435. package/dist/css/helix-data.css +86 -7
  436. package/dist/css/helix-feedback.css +215 -69
  437. package/dist/css/helix-forms.css +2122 -127
  438. package/dist/css/helix-layout.css +53 -7
  439. package/dist/css/helix-media.css +40 -16
  440. package/dist/css/helix-navigation.css +209 -48
  441. package/dist/css/helix-overlay.css +99 -12
  442. package/dist/css/helix-tokens.css +30 -11
  443. package/dist/css/helix-utility.css +118 -9
  444. package/dist/css/hx-accordion.css +9 -1
  445. package/dist/css/hx-action-bar.css +17 -3
  446. package/dist/css/hx-alert.css +39 -18
  447. package/dist/css/hx-avatar.css +1 -1
  448. package/dist/css/hx-badge.css +59 -24
  449. package/dist/css/hx-banner.css +35 -18
  450. package/dist/css/hx-breadcrumb.css +27 -0
  451. package/dist/css/hx-button-group.css +13 -0
  452. package/dist/css/hx-button.css +6 -3
  453. package/dist/css/hx-card.css +18 -6
  454. package/dist/css/hx-carousel.css +40 -16
  455. package/dist/css/hx-checkbox-group.css +36 -4
  456. package/dist/css/hx-checkbox.css +74 -8
  457. package/dist/css/hx-clinical-status.css +46 -23
  458. package/dist/css/hx-code-snippet.css +25 -3
  459. package/dist/css/hx-color-picker.css +276 -1
  460. package/dist/css/hx-combobox.css +391 -1
  461. package/dist/css/hx-container.css +10 -6
  462. package/dist/css/hx-copy-button.css +31 -3
  463. package/dist/css/hx-counter.css +11 -1
  464. package/dist/css/hx-data-table.css +24 -1
  465. package/dist/css/hx-date-picker.css +437 -1
  466. package/dist/css/hx-dialog.css +23 -2
  467. package/dist/css/hx-divider.css +8 -0
  468. package/dist/css/hx-drawer.css +22 -1
  469. package/dist/css/hx-dropdown.css +10 -1
  470. package/dist/css/hx-field-label.css +18 -2
  471. package/dist/css/hx-field.css +39 -3
  472. package/dist/css/hx-file-upload.css +60 -12
  473. package/dist/css/hx-format-date.css +11 -0
  474. package/dist/css/hx-grid.css +10 -0
  475. package/dist/css/hx-help-text.css +25 -5
  476. package/dist/css/hx-icon-button.css +27 -0
  477. package/dist/css/hx-icon.css +8 -0
  478. package/dist/css/hx-image.css +11 -3
  479. package/dist/css/hx-link.css +24 -6
  480. package/dist/css/hx-list.css +10 -0
  481. package/dist/css/hx-menu.css +10 -2
  482. package/dist/css/hx-meter.css +28 -14
  483. package/dist/css/hx-nav.css +27 -12
  484. package/dist/css/hx-number-input.css +78 -0
  485. package/dist/css/hx-overflow-menu.css +41 -10
  486. package/dist/css/hx-pagination.css +13 -13
  487. package/dist/css/hx-patient-banner.css +30 -10
  488. package/dist/css/hx-phi-field.css +20 -3
  489. package/dist/css/hx-popover.css +16 -4
  490. package/dist/css/hx-popup.css +12 -0
  491. package/dist/css/hx-progress-bar.css +1 -1
  492. package/dist/css/hx-progress-ring.css +26 -4
  493. package/dist/css/hx-radio-group.css +35 -3
  494. package/dist/css/hx-rating.css +45 -4
  495. package/dist/css/hx-select.css +89 -9
  496. package/dist/css/hx-side-nav.css +26 -0
  497. package/dist/css/hx-skeleton.css +13 -1
  498. package/dist/css/hx-slider.css +16 -11
  499. package/dist/css/hx-spinner.css +15 -3
  500. package/dist/css/hx-split-button.css +37 -2
  501. package/dist/css/hx-split-panel.css +14 -0
  502. package/dist/css/hx-stack.css +10 -0
  503. package/dist/css/hx-stat.css +52 -5
  504. package/dist/css/hx-status-indicator.css +15 -2
  505. package/dist/css/hx-steps.css +12 -0
  506. package/dist/css/hx-structured-list.css +18 -2
  507. package/dist/css/hx-style-scope.css +11 -0
  508. package/dist/css/hx-switch.css +66 -4
  509. package/dist/css/hx-table.css +9 -1
  510. package/dist/css/hx-tabs.css +15 -3
  511. package/dist/css/hx-tag.css +24 -12
  512. package/dist/css/hx-text-input.css +71 -9
  513. package/dist/css/hx-text.css +38 -5
  514. package/dist/css/hx-textarea.css +71 -15
  515. package/dist/css/hx-theme.css +11 -0
  516. package/dist/css/hx-time-picker.css +224 -1
  517. package/dist/css/hx-toast.css +19 -7
  518. package/dist/css/hx-toggle-button.css +41 -4
  519. package/dist/css/hx-tooltip.css +16 -4
  520. package/dist/css/hx-top-nav.css +29 -8
  521. package/dist/css/hx-tree-view.css +9 -0
  522. package/dist/css/hx-visually-hidden.css +12 -0
  523. package/dist/css/index.css +1 -1
  524. package/dist/css/manifest.json +49 -11
  525. package/dist/form-test-utils.d.ts +45 -0
  526. package/dist/form-test-utils.d.ts.map +1 -0
  527. package/dist/index.d.ts +28 -14
  528. package/dist/index.d.ts.map +1 -1
  529. package/dist/index.js +189 -176
  530. package/dist/index.js.map +1 -1
  531. package/dist/mixins/FormMixin.d.ts +24 -5
  532. package/dist/mixins/FormMixin.d.ts.map +1 -1
  533. package/dist/mixins/aria-delegation.d.ts +1 -1
  534. package/dist/mixins/aria-delegation.d.ts.map +1 -1
  535. package/dist/mixins/index.d.ts +3 -1
  536. package/dist/mixins/index.d.ts.map +1 -1
  537. package/dist/shared/{FormMixin-Bjvw20G5.js → FormMixin-B8PXk5RQ.js} +31 -14
  538. package/dist/shared/FormMixin-B8PXk5RQ.js.map +1 -0
  539. package/dist/shared/{aria-delegation-CBP9eQ0M.js → aria-delegation-Doq6RRUy.js} +6 -6
  540. package/dist/shared/aria-delegation-Doq6RRUy.js.map +1 -0
  541. package/dist/shared/{id-counter-JhvVCnjh.js → helix-element-BNEYeiys.js} +35 -44
  542. package/dist/shared/helix-element-BNEYeiys.js.map +1 -0
  543. package/dist/shared/{hx-accordion-CpfO0YQo.js → hx-accordion-Wt52OOZD.js} +127 -80
  544. package/dist/shared/hx-accordion-Wt52OOZD.js.map +1 -0
  545. package/dist/shared/{hx-action-bar-BpY1Z1UV.js → hx-action-bar-BKMADbHj.js} +90 -75
  546. package/dist/shared/hx-action-bar-BKMADbHj.js.map +1 -0
  547. package/dist/shared/{hx-alert-CHOjTBds.js → hx-alert-D7n94HwI.js} +47 -26
  548. package/dist/shared/hx-alert-D7n94HwI.js.map +1 -0
  549. package/dist/shared/{hx-avatar-an-WsuLl.js → hx-avatar-iLYzu8MJ.js} +10 -10
  550. package/dist/shared/hx-avatar-iLYzu8MJ.js.map +1 -0
  551. package/dist/shared/{hx-badge-DDXTLoWi.js → hx-badge-CVCmMPyW.js} +78 -43
  552. package/dist/shared/hx-badge-CVCmMPyW.js.map +1 -0
  553. package/dist/shared/{hx-banner-B-WEDiq7.js → hx-banner-C_He7Tr4.js} +60 -43
  554. package/dist/shared/hx-banner-C_He7Tr4.js.map +1 -0
  555. package/dist/shared/{hx-breadcrumb-item-DzLyeL5Z.js → hx-breadcrumb-item-CldCwD1d.js} +123 -83
  556. package/dist/shared/hx-breadcrumb-item-CldCwD1d.js.map +1 -0
  557. package/dist/shared/{hx-button-DoN8jjQT.js → hx-button-Ddl-T6T-.js} +117 -92
  558. package/dist/shared/hx-button-Ddl-T6T-.js.map +1 -0
  559. package/dist/shared/{hx-button-group-BXlMQTt_.js → hx-button-group-BJOGWoMa.js} +33 -21
  560. package/dist/shared/hx-button-group-BJOGWoMa.js.map +1 -0
  561. package/dist/shared/{hx-card-BgXZXDuc.js → hx-card-ycveujjL.js} +64 -38
  562. package/dist/shared/hx-card-ycveujjL.js.map +1 -0
  563. package/dist/shared/{hx-carousel-item-Dwt9Pphz.js → hx-carousel-item-D_dCv61-.js} +76 -41
  564. package/dist/shared/hx-carousel-item-D_dCv61-.js.map +1 -0
  565. package/dist/shared/{hx-checkbox-CTEZ9IFq.js → hx-checkbox-DkkoWoye.js} +163 -79
  566. package/dist/shared/hx-checkbox-DkkoWoye.js.map +1 -0
  567. package/dist/shared/{hx-checkbox-group-DThZeN5d.js → hx-checkbox-group-C3poJ-Zw.js} +105 -79
  568. package/dist/shared/hx-checkbox-group-C3poJ-Zw.js.map +1 -0
  569. package/dist/shared/{hx-clinical-status-m4soOOwg.js → hx-clinical-status-BS5lcddT.js} +74 -51
  570. package/dist/shared/hx-clinical-status-BS5lcddT.js.map +1 -0
  571. package/dist/shared/{hx-code-snippet-CoLYvX1Z.js → hx-code-snippet-B7wUKzyb.js} +35 -13
  572. package/dist/shared/{hx-code-snippet-CoLYvX1Z.js.map → hx-code-snippet-B7wUKzyb.js.map} +1 -1
  573. package/dist/shared/{hx-color-picker-DhOaNe6-.js → hx-color-picker-DBaKTVLr.js} +360 -98
  574. package/dist/shared/hx-color-picker-DBaKTVLr.js.map +1 -0
  575. package/dist/shared/hx-combobox-BmgYT7Ar.js +929 -0
  576. package/dist/shared/hx-combobox-BmgYT7Ar.js.map +1 -0
  577. package/dist/shared/{hx-container-31QT9KV_.js → hx-container-DVI7sxfX.js} +27 -23
  578. package/dist/shared/hx-container-DVI7sxfX.js.map +1 -0
  579. package/dist/shared/{hx-copy-button-BoM0WsMd.js → hx-copy-button-8deNUdwP.js} +68 -40
  580. package/dist/shared/hx-copy-button-8deNUdwP.js.map +1 -0
  581. package/dist/shared/{hx-counter-CP42cSVK.js → hx-counter-CKfl_g8K.js} +88 -43
  582. package/dist/shared/hx-counter-CKfl_g8K.js.map +1 -0
  583. package/dist/shared/{hx-data-table-D5Ne-goy.js → hx-data-table-B6h0RPn0.js} +203 -132
  584. package/dist/shared/hx-data-table-B6h0RPn0.js.map +1 -0
  585. package/dist/shared/hx-date-picker-Dq2Nb68_.js +1077 -0
  586. package/dist/shared/hx-date-picker-Dq2Nb68_.js.map +1 -0
  587. package/dist/shared/{hx-dialog-D4ubstxx.js → hx-dialog-CvIlY0Tc.js} +85 -52
  588. package/dist/shared/hx-dialog-CvIlY0Tc.js.map +1 -0
  589. package/dist/shared/{hx-divider-BBtOLHRP.js → hx-divider-DwpOrzMW.js} +23 -15
  590. package/dist/shared/hx-divider-DwpOrzMW.js.map +1 -0
  591. package/dist/shared/{hx-drawer--WDLuWtS.js → hx-drawer-Cx2ZJhBe.js} +101 -66
  592. package/dist/shared/hx-drawer-Cx2ZJhBe.js.map +1 -0
  593. package/dist/shared/{hx-dropdown-n5-XSmiV.js → hx-dropdown-BjDrPUq5.js} +55 -46
  594. package/dist/shared/hx-dropdown-BjDrPUq5.js.map +1 -0
  595. package/dist/shared/{hx-field-CwT9tki1.js → hx-field-Dp3qQMut.js} +61 -25
  596. package/dist/shared/hx-field-Dp3qQMut.js.map +1 -0
  597. package/dist/shared/{hx-field-label-CcOK9VU3.js → hx-field-label-BC8QViXv.js} +41 -25
  598. package/dist/shared/hx-field-label-BC8QViXv.js.map +1 -0
  599. package/dist/shared/{hx-file-upload-Dwtu3WcB.js → hx-file-upload-B6Yl1u0i.js} +201 -130
  600. package/dist/shared/hx-file-upload-B6Yl1u0i.js.map +1 -0
  601. package/dist/shared/{hx-form-fJE-FJQV.js → hx-form-ButQFt9A.js} +13 -18
  602. package/dist/shared/hx-form-ButQFt9A.js.map +1 -0
  603. package/dist/shared/{hx-format-date-B7L9odbA.js → hx-format-date-CKnlQOmV.js} +20 -9
  604. package/dist/shared/hx-format-date-CKnlQOmV.js.map +1 -0
  605. package/dist/shared/{hx-grid-BIAR5h9m.js → hx-grid-CXZf3jeK.js} +28 -18
  606. package/dist/shared/hx-grid-CXZf3jeK.js.map +1 -0
  607. package/dist/shared/{hx-help-text-Bmb80bP4.js → hx-help-text-D7eytSim.js} +45 -25
  608. package/dist/shared/hx-help-text-D7eytSim.js.map +1 -0
  609. package/dist/shared/{hx-icon-BKHs3OLu.js → hx-icon-CcyDPDYY.js} +104 -62
  610. package/dist/shared/hx-icon-CcyDPDYY.js.map +1 -0
  611. package/dist/shared/{hx-icon-button-CJuy9xbw.js → hx-icon-button-BHneqPCU.js} +58 -42
  612. package/dist/shared/hx-icon-button-BHneqPCU.js.map +1 -0
  613. package/dist/shared/{hx-image-ztiXumZB.js → hx-image-2gt14zZd.js} +34 -26
  614. package/dist/shared/hx-image-2gt14zZd.js.map +1 -0
  615. package/dist/shared/{hx-link-IVsXmsKx.js → hx-link-BESrWK8M.js} +72 -48
  616. package/dist/shared/hx-link-BESrWK8M.js.map +1 -0
  617. package/dist/shared/{hx-list-CoTDMp19.js → hx-list-_9qVv02L.js} +91 -49
  618. package/dist/shared/hx-list-_9qVv02L.js.map +1 -0
  619. package/dist/shared/{hx-menu-divider-DRT8yHRZ.js → hx-menu-divider-Ck-9Os1t.js} +103 -60
  620. package/dist/shared/hx-menu-divider-Ck-9Os1t.js.map +1 -0
  621. package/dist/shared/{hx-meter-BvSJoqDp.js → hx-meter-TbROk-dw.js} +64 -49
  622. package/dist/shared/hx-meter-TbROk-dw.js.map +1 -0
  623. package/dist/shared/{hx-nav-l0Rp7WPW.js → hx-nav-BcYDmjf7.js} +71 -56
  624. package/dist/shared/hx-nav-BcYDmjf7.js.map +1 -0
  625. package/dist/shared/{hx-nav-item-CJN4VDrf.js → hx-nav-item-pqPasRUm.js} +67 -23
  626. package/dist/shared/hx-nav-item-pqPasRUm.js.map +1 -0
  627. package/dist/shared/{hx-number-input-0Waw7Z7u.js → hx-number-input-mOIZ3-46.js} +169 -96
  628. package/dist/shared/hx-number-input-mOIZ3-46.js.map +1 -0
  629. package/dist/shared/{hx-overflow-menu-DElwFSCd.js → hx-overflow-menu-Dprb9lnT.js} +70 -38
  630. package/dist/shared/hx-overflow-menu-Dprb9lnT.js.map +1 -0
  631. package/dist/shared/{hx-pagination-BNtx-LG6.js → hx-pagination-AguTQjYC.js} +35 -35
  632. package/dist/shared/hx-pagination-AguTQjYC.js.map +1 -0
  633. package/dist/shared/{hx-patient-banner-BKiN7nIE.js → hx-patient-banner-uE6gqLpT.js} +67 -47
  634. package/dist/shared/hx-patient-banner-uE6gqLpT.js.map +1 -0
  635. package/dist/shared/{hx-phi-field-BiJH3V-k.js → hx-phi-field-BC_XowhC.js} +158 -59
  636. package/dist/shared/hx-phi-field-BC_XowhC.js.map +1 -0
  637. package/dist/shared/{hx-popover-D63RXn5H.js → hx-popover-B2_203ct.js} +48 -34
  638. package/dist/shared/hx-popover-B2_203ct.js.map +1 -0
  639. package/dist/shared/{hx-popup-BQWMhvMO.js → hx-popup-DZXpsJ1R.js} +89 -64
  640. package/dist/shared/hx-popup-DZXpsJ1R.js.map +1 -0
  641. package/dist/shared/{hx-progress-bar-Cm0VihTN.js → hx-progress-bar-KjEkEJLy.js} +21 -20
  642. package/dist/shared/hx-progress-bar-KjEkEJLy.js.map +1 -0
  643. package/dist/shared/{hx-progress-ring-BJeiDr3q.js → hx-progress-ring-3zMwvrwD.js} +56 -34
  644. package/dist/shared/hx-progress-ring-3zMwvrwD.js.map +1 -0
  645. package/dist/shared/{hx-prose-Ml_L2zje.js → hx-prose-BCtK7YL6.js} +48 -15
  646. package/dist/shared/{hx-prose-Ml_L2zje.js.map → hx-prose-BCtK7YL6.js.map} +1 -1
  647. package/dist/shared/{hx-radio-f8c5ggHG.js → hx-radio-BBC5qZgE.js} +202 -123
  648. package/dist/shared/hx-radio-BBC5qZgE.js.map +1 -0
  649. package/dist/shared/{hx-rating-qRJZXskm.js → hx-rating-C3E3ENJb.js} +92 -69
  650. package/dist/shared/hx-rating-C3E3ENJb.js.map +1 -0
  651. package/dist/shared/{hx-select-B5wq9Swh.js → hx-select-CixTo7jp.js} +206 -136
  652. package/dist/shared/hx-select-CixTo7jp.js.map +1 -0
  653. package/dist/shared/{hx-skeleton-e5K9Qaxq.js → hx-skeleton-LxkI0pxr.js} +41 -29
  654. package/dist/shared/hx-skeleton-LxkI0pxr.js.map +1 -0
  655. package/dist/shared/{hx-slider-BvXtvxmN.js → hx-slider-DFHuzF3N.js} +79 -91
  656. package/dist/shared/hx-slider-DFHuzF3N.js.map +1 -0
  657. package/dist/shared/{hx-spinner-Dyese1Tb.js → hx-spinner-BKjuCdZB.js} +32 -20
  658. package/dist/shared/hx-spinner-BKjuCdZB.js.map +1 -0
  659. package/dist/shared/{hx-split-button-CPndTJlC.js → hx-split-button-CGcJMmCG.js} +59 -22
  660. package/dist/shared/hx-split-button-CGcJMmCG.js.map +1 -0
  661. package/dist/shared/{hx-split-panel-Dx72NaET.js → hx-split-panel-C-1R10Mc.js} +71 -47
  662. package/dist/shared/hx-split-panel-C-1R10Mc.js.map +1 -0
  663. package/dist/shared/{hx-stack-B76_1O6g.js → hx-stack-DGfcOfWJ.js} +21 -11
  664. package/dist/shared/hx-stack-DGfcOfWJ.js.map +1 -0
  665. package/dist/shared/{hx-stat-DKD2E7An.js → hx-stat-BTpykQAt.js} +103 -48
  666. package/dist/shared/hx-stat-BTpykQAt.js.map +1 -0
  667. package/dist/shared/{hx-status-indicator-ClWpK6zz.js → hx-status-indicator-X2QEWNFt.js} +36 -23
  668. package/dist/shared/hx-status-indicator-X2QEWNFt.js.map +1 -0
  669. package/dist/shared/{hx-step-C2Jk4mHa.js → hx-step-CRNQlmSo.js} +83 -32
  670. package/dist/shared/hx-step-CRNQlmSo.js.map +1 -0
  671. package/dist/shared/{hx-structured-list-DKlrv7kS.js → hx-structured-list-CqNbaEXg.js} +32 -16
  672. package/dist/shared/hx-structured-list-CqNbaEXg.js.map +1 -0
  673. package/dist/shared/hx-style-scope-TDnR8H4O.js +251 -0
  674. package/dist/shared/hx-style-scope-TDnR8H4O.js.map +1 -0
  675. package/dist/shared/{hx-switch-BzMN37PV.js → hx-switch-DqOD9JR7.js} +122 -81
  676. package/dist/shared/hx-switch-DqOD9JR7.js.map +1 -0
  677. package/dist/shared/{hx-tab-panel-J58zOSjq.js → hx-tab-panel-BIzKfW5i.js} +156 -102
  678. package/dist/shared/hx-tab-panel-BIzKfW5i.js.map +1 -0
  679. package/dist/shared/{hx-tag-F0ZcYj9b.js → hx-tag-CgnrNnte.js} +30 -18
  680. package/dist/shared/hx-tag-CgnrNnte.js.map +1 -0
  681. package/dist/shared/{hx-td-CNCvzBwY.js → hx-td-Bra35cH4.js} +55 -47
  682. package/dist/shared/hx-td-Bra35cH4.js.map +1 -0
  683. package/dist/shared/{hx-text-DcWBqZwx.js → hx-text-DMC2CPlL.js} +74 -41
  684. package/dist/shared/hx-text-DMC2CPlL.js.map +1 -0
  685. package/dist/shared/{hx-text-input-Scyeefec.js → hx-text-input--q0GH78x.js} +123 -61
  686. package/dist/shared/hx-text-input--q0GH78x.js.map +1 -0
  687. package/dist/shared/{hx-textarea-BfSJJtA1.js → hx-textarea-CK621vSL.js} +124 -89
  688. package/dist/shared/hx-textarea-CK621vSL.js.map +1 -0
  689. package/dist/shared/{hx-theme-pc1V7dyL.js → hx-theme-DfEy-SJA.js} +72 -64
  690. package/dist/shared/hx-theme-DfEy-SJA.js.map +1 -0
  691. package/dist/shared/{hx-time-picker-CZvmihHD.js → hx-time-picker-tPUfgElQ.js} +300 -82
  692. package/dist/shared/hx-time-picker-tPUfgElQ.js.map +1 -0
  693. package/dist/shared/{hx-toggle-button-BZUQUULm.js → hx-toggle-button-L-uBJr-a.js} +72 -42
  694. package/dist/shared/hx-toggle-button-L-uBJr-a.js.map +1 -0
  695. package/dist/shared/{hx-tooltip-Ny4i1Idj.js → hx-tooltip-B_zfKvwc.js} +44 -31
  696. package/dist/shared/hx-tooltip-B_zfKvwc.js.map +1 -0
  697. package/dist/shared/{hx-top-nav-CC4FW2Hp.js → hx-top-nav-CATbRvIv.js} +53 -30
  698. package/dist/shared/hx-top-nav-CATbRvIv.js.map +1 -0
  699. package/dist/shared/{hx-tree-item-CPQ9dJiK.js → hx-tree-item-A45WCiBu.js} +37 -9
  700. package/dist/shared/hx-tree-item-A45WCiBu.js.map +1 -0
  701. package/dist/shared/hx-visually-hidden-0bZKOWgT.js +66 -0
  702. package/dist/shared/hx-visually-hidden-0bZKOWgT.js.map +1 -0
  703. package/dist/shared/id-counter-DuX8vsui.js +11 -0
  704. package/dist/shared/id-counter-DuX8vsui.js.map +1 -0
  705. package/dist/shared/{toast-factory-CEMNOt1T.js → toast-factory-BPPnG3mM.js} +58 -46
  706. package/dist/shared/toast-factory-BPPnG3mM.js.map +1 -0
  707. package/dist/utilities/injectLightStyles.d.ts.map +1 -1
  708. package/dist/utilities/sanitizeCss.d.ts +43 -0
  709. package/dist/utilities/sanitizeCss.d.ts.map +1 -0
  710. package/figma-inventory.json +18614 -0
  711. package/package.json +35 -14
  712. package/dist/shared/FormMixin-Bjvw20G5.js.map +0 -1
  713. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +0 -1
  714. package/dist/shared/document-token-adoption-DuYNKd4k.js +0 -21
  715. package/dist/shared/document-token-adoption-DuYNKd4k.js.map +0 -1
  716. package/dist/shared/hx-accordion-CpfO0YQo.js.map +0 -1
  717. package/dist/shared/hx-action-bar-BpY1Z1UV.js.map +0 -1
  718. package/dist/shared/hx-alert-CHOjTBds.js.map +0 -1
  719. package/dist/shared/hx-avatar-an-WsuLl.js.map +0 -1
  720. package/dist/shared/hx-badge-DDXTLoWi.js.map +0 -1
  721. package/dist/shared/hx-banner-B-WEDiq7.js.map +0 -1
  722. package/dist/shared/hx-breadcrumb-item-DzLyeL5Z.js.map +0 -1
  723. package/dist/shared/hx-button-DoN8jjQT.js.map +0 -1
  724. package/dist/shared/hx-button-group-BXlMQTt_.js.map +0 -1
  725. package/dist/shared/hx-card-BgXZXDuc.js.map +0 -1
  726. package/dist/shared/hx-carousel-item-Dwt9Pphz.js.map +0 -1
  727. package/dist/shared/hx-checkbox-CTEZ9IFq.js.map +0 -1
  728. package/dist/shared/hx-checkbox-group-DThZeN5d.js.map +0 -1
  729. package/dist/shared/hx-clinical-status-m4soOOwg.js.map +0 -1
  730. package/dist/shared/hx-color-picker-DhOaNe6-.js.map +0 -1
  731. package/dist/shared/hx-combobox-BJ4lQocO.js +0 -544
  732. package/dist/shared/hx-combobox-BJ4lQocO.js.map +0 -1
  733. package/dist/shared/hx-container-31QT9KV_.js.map +0 -1
  734. package/dist/shared/hx-copy-button-BoM0WsMd.js.map +0 -1
  735. package/dist/shared/hx-counter-CP42cSVK.js.map +0 -1
  736. package/dist/shared/hx-data-table-D5Ne-goy.js.map +0 -1
  737. package/dist/shared/hx-date-picker-Cd3I3WkX.js +0 -627
  738. package/dist/shared/hx-date-picker-Cd3I3WkX.js.map +0 -1
  739. package/dist/shared/hx-dialog-D4ubstxx.js.map +0 -1
  740. package/dist/shared/hx-divider-BBtOLHRP.js.map +0 -1
  741. package/dist/shared/hx-drawer--WDLuWtS.js.map +0 -1
  742. package/dist/shared/hx-dropdown-n5-XSmiV.js.map +0 -1
  743. package/dist/shared/hx-field-CwT9tki1.js.map +0 -1
  744. package/dist/shared/hx-field-label-CcOK9VU3.js.map +0 -1
  745. package/dist/shared/hx-file-upload-Dwtu3WcB.js.map +0 -1
  746. package/dist/shared/hx-form-fJE-FJQV.js.map +0 -1
  747. package/dist/shared/hx-format-date-B7L9odbA.js.map +0 -1
  748. package/dist/shared/hx-grid-BIAR5h9m.js.map +0 -1
  749. package/dist/shared/hx-help-text-Bmb80bP4.js.map +0 -1
  750. package/dist/shared/hx-icon-BKHs3OLu.js.map +0 -1
  751. package/dist/shared/hx-icon-button-CJuy9xbw.js.map +0 -1
  752. package/dist/shared/hx-image-ztiXumZB.js.map +0 -1
  753. package/dist/shared/hx-link-IVsXmsKx.js.map +0 -1
  754. package/dist/shared/hx-list-CoTDMp19.js.map +0 -1
  755. package/dist/shared/hx-menu-divider-DRT8yHRZ.js.map +0 -1
  756. package/dist/shared/hx-meter-BvSJoqDp.js.map +0 -1
  757. package/dist/shared/hx-nav-item-CJN4VDrf.js.map +0 -1
  758. package/dist/shared/hx-nav-l0Rp7WPW.js.map +0 -1
  759. package/dist/shared/hx-number-input-0Waw7Z7u.js.map +0 -1
  760. package/dist/shared/hx-overflow-menu-DElwFSCd.js.map +0 -1
  761. package/dist/shared/hx-pagination-BNtx-LG6.js.map +0 -1
  762. package/dist/shared/hx-patient-banner-BKiN7nIE.js.map +0 -1
  763. package/dist/shared/hx-phi-field-BiJH3V-k.js.map +0 -1
  764. package/dist/shared/hx-popover-D63RXn5H.js.map +0 -1
  765. package/dist/shared/hx-popup-BQWMhvMO.js.map +0 -1
  766. package/dist/shared/hx-progress-bar-Cm0VihTN.js.map +0 -1
  767. package/dist/shared/hx-progress-ring-BJeiDr3q.js.map +0 -1
  768. package/dist/shared/hx-radio-f8c5ggHG.js.map +0 -1
  769. package/dist/shared/hx-rating-qRJZXskm.js.map +0 -1
  770. package/dist/shared/hx-select-B5wq9Swh.js.map +0 -1
  771. package/dist/shared/hx-skeleton-e5K9Qaxq.js.map +0 -1
  772. package/dist/shared/hx-slider-BvXtvxmN.js.map +0 -1
  773. package/dist/shared/hx-spinner-Dyese1Tb.js.map +0 -1
  774. package/dist/shared/hx-split-button-CPndTJlC.js.map +0 -1
  775. package/dist/shared/hx-split-panel-Dx72NaET.js.map +0 -1
  776. package/dist/shared/hx-stack-B76_1O6g.js.map +0 -1
  777. package/dist/shared/hx-stat-DKD2E7An.js.map +0 -1
  778. package/dist/shared/hx-status-indicator-ClWpK6zz.js.map +0 -1
  779. package/dist/shared/hx-step-C2Jk4mHa.js.map +0 -1
  780. package/dist/shared/hx-structured-list-DKlrv7kS.js.map +0 -1
  781. package/dist/shared/hx-style-scope-CsQ2Phf_.js +0 -126
  782. package/dist/shared/hx-style-scope-CsQ2Phf_.js.map +0 -1
  783. package/dist/shared/hx-switch-BzMN37PV.js.map +0 -1
  784. package/dist/shared/hx-tab-panel-J58zOSjq.js.map +0 -1
  785. package/dist/shared/hx-tag-F0ZcYj9b.js.map +0 -1
  786. package/dist/shared/hx-td-CNCvzBwY.js.map +0 -1
  787. package/dist/shared/hx-text-DcWBqZwx.js.map +0 -1
  788. package/dist/shared/hx-text-input-Scyeefec.js.map +0 -1
  789. package/dist/shared/hx-textarea-BfSJJtA1.js.map +0 -1
  790. package/dist/shared/hx-theme-pc1V7dyL.js.map +0 -1
  791. package/dist/shared/hx-time-picker-CZvmihHD.js.map +0 -1
  792. package/dist/shared/hx-toggle-button-BZUQUULm.js.map +0 -1
  793. package/dist/shared/hx-tooltip-Ny4i1Idj.js.map +0 -1
  794. package/dist/shared/hx-top-nav-CC4FW2Hp.js.map +0 -1
  795. package/dist/shared/hx-tree-item-CPQ9dJiK.js.map +0 -1
  796. package/dist/shared/hx-visually-hidden-vKX8QjeX.js +0 -54
  797. package/dist/shared/hx-visually-hidden-vKX8QjeX.js.map +0 -1
  798. package/dist/shared/id-counter-JhvVCnjh.js.map +0 -1
  799. package/dist/shared/toast-factory-CEMNOt1T.js.map +0 -1
  800. package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts +0 -12
  801. package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts.map +0 -1
  802. package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts +0 -13
  803. package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts.map +0 -1
  804. package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts +0 -13
  805. package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts.map +0 -1
  806. package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts +0 -12
  807. package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts.map +0 -1
  808. package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts +0 -13
  809. package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts.map +0 -1
  810. package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts +0 -12
  811. package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts.map +0 -1
  812. package/dist/tools/cem-a11y-analyzer/index.d.ts +0 -14
  813. package/dist/tools/cem-a11y-analyzer/index.d.ts.map +0 -1
  814. package/dist/tools/cem-a11y-analyzer/reporter.d.ts +0 -6
  815. package/dist/tools/cem-a11y-analyzer/reporter.d.ts.map +0 -1
  816. package/dist/tools/cem-a11y-analyzer/scorer.d.ts +0 -22
  817. package/dist/tools/cem-a11y-analyzer/scorer.d.ts.map +0 -1
  818. package/dist/tools/cem-a11y-analyzer/types.d.ts +0 -171
  819. package/dist/tools/cem-a11y-analyzer/types.d.ts.map +0 -1
@@ -0,0 +1,251 @@
1
+ import { css as C, html as E } from "lit";
2
+ import { property as m, customElement as w } from "lit/decorators.js";
3
+ import { H as _ } from "./helix-element-BNEYeiys.js";
4
+ const v = C`
5
+ :host {
6
+ display: contents;
7
+ }
8
+
9
+ /* ─── High Contrast Mode (forced-colors) ─── */
10
+
11
+ /* hx-style-scope is a transparent layout wrapper (display: contents).
12
+ It has no visual output of its own. forced-color-adjust: auto (default)
13
+ is sufficient. */
14
+ @media (forced-colors: active) {
15
+ :host {
16
+ forced-color-adjust: auto;
17
+ }
18
+ }
19
+ `, y = /* @__PURE__ */ new Map();
20
+ function j(t) {
21
+ return y.has(t);
22
+ }
23
+ function $(t, i) {
24
+ y.set(t, i);
25
+ }
26
+ function A(t, i) {
27
+ const e = `[data-hx-styled="${t}"]`;
28
+ return g(i, e);
29
+ }
30
+ function u(t, i) {
31
+ return t[i] ?? "";
32
+ }
33
+ function g(t, i) {
34
+ const e = [];
35
+ let n = 0;
36
+ const r = t.length;
37
+ for (; n < r; ) {
38
+ for (; n < r && /\s/.test(u(t, n)); )
39
+ e.push(u(t, n)), n++;
40
+ if (n >= r) break;
41
+ if (u(t, n) === "@") {
42
+ const d = L(t, n);
43
+ e.push(P(d.text, i)), n = d.end;
44
+ continue;
45
+ }
46
+ const o = t.indexOf("{", n);
47
+ if (o === -1) break;
48
+ const c = t.slice(n, o), s = o + 1, f = b(t, o);
49
+ if (f === -1) break;
50
+ const l = t.slice(s, f), x = O(c, i);
51
+ e.push(`${x}{${l}}`), n = f + 1;
52
+ }
53
+ return e.join("");
54
+ }
55
+ function O(t, i) {
56
+ return t.split(",").map((e) => {
57
+ const n = e.trim();
58
+ if (n.startsWith("::slotted(") && n.endsWith(")")) {
59
+ const r = n.slice(10, -1).trim();
60
+ return `${i} ${r}`;
61
+ }
62
+ return n === ":host" || n.startsWith(":host(") || n.startsWith(":host ") ? n.replace(/^:host(\([^)]*\))?/, i) : `${i} ${n}`;
63
+ }).join(", ");
64
+ }
65
+ function P(t, i) {
66
+ const e = /^@(media|supports|layer|container|document)\b/, n = t.indexOf("{");
67
+ if (n === -1 || !e.test(t.trim()))
68
+ return t;
69
+ const r = t.slice(0, n + 1), o = t.lastIndexOf("}"), c = t.slice(n + 1, o), s = t.slice(o);
70
+ return `${r}${g(c, i)}${s}`;
71
+ }
72
+ function L(t, i) {
73
+ let e = i;
74
+ for (; e < t.length && u(t, e) !== "{" && u(t, e) !== ";"; )
75
+ e++;
76
+ if (e >= t.length)
77
+ return { text: t.slice(i), end: t.length };
78
+ if (u(t, e) === ";")
79
+ return { text: t.slice(i, e + 1), end: e + 1 };
80
+ const n = b(t, e);
81
+ return n === -1 ? { text: t.slice(i), end: t.length } : { text: t.slice(i, n + 1), end: n + 1 };
82
+ }
83
+ function b(t, i) {
84
+ let e = 0;
85
+ for (let n = i; n < t.length; n++) {
86
+ const r = u(t, n);
87
+ if (r === "{") e++;
88
+ else if (r === "}" && (e--, e === 0))
89
+ return n;
90
+ }
91
+ return -1;
92
+ }
93
+ const W = [
94
+ { pattern: /expression\s*\(/i, label: "CSS expression()" },
95
+ { pattern: /-moz-binding\s*:/i, label: "-moz-binding (XBL injection)" },
96
+ { pattern: /behavior\s*:/i, label: "behavior: (HTC injection)" },
97
+ { pattern: /@import\b/i, label: "@import rule" }
98
+ ], p = /url\(\s*(['"]?)(.*?)\1\s*\)/gis, B = [
99
+ "data:",
100
+ "blob:",
101
+ "#"
102
+ // fragment references (e.g. SVG filters)
103
+ ];
104
+ function S(t) {
105
+ let i = "", e = 0;
106
+ const n = t.length;
107
+ for (; e < n; ) {
108
+ const r = t[e];
109
+ if (r !== "\\") {
110
+ i += r, e++;
111
+ continue;
112
+ }
113
+ if (e + 1 >= n) {
114
+ i += r, e++;
115
+ continue;
116
+ }
117
+ const o = t[e + 1];
118
+ if (o === `
119
+ ` || o === "\f") {
120
+ e += 2;
121
+ continue;
122
+ }
123
+ if (o === "\r") {
124
+ t[e + 2] === `
125
+ ` ? e += 3 : e += 2;
126
+ continue;
127
+ }
128
+ if (o !== void 0 && /[0-9a-fA-F]/.test(o)) {
129
+ let c = "", s = e + 1;
130
+ for (; s < n && c.length < 6; ) {
131
+ const l = t[s];
132
+ if (l === void 0 || !/[0-9a-fA-F]/.test(l)) break;
133
+ c += l, s++;
134
+ }
135
+ if (s < n) {
136
+ const l = t[s];
137
+ l === "\r" && t[s + 1] === `
138
+ ` ? s += 2 : (l === " " || l === " " || l === `
139
+ ` || l === "\r" || l === "\f") && s++;
140
+ }
141
+ const f = parseInt(c, 16);
142
+ !Number.isFinite(f) || f === 0 || f >= 55296 && f <= 57343 || f > 1114111 ? i += "�" : i += String.fromCodePoint(f), e = s;
143
+ continue;
144
+ }
145
+ i += o, e += 2;
146
+ }
147
+ return i;
148
+ }
149
+ function H(t) {
150
+ const i = t.trim();
151
+ if (i === "") return !0;
152
+ const e = S(i).trim();
153
+ if (e === "") return !0;
154
+ if (e.startsWith("//")) return !1;
155
+ for (const n of B)
156
+ if (e.startsWith(n)) return !0;
157
+ return !/^[a-z][a-z0-9+\-.]*:/i.test(e);
158
+ }
159
+ function I(t) {
160
+ let i = 0, e = null, n = !1;
161
+ for (let r = 0; r < t.length; r++) {
162
+ const o = t[r];
163
+ if (n) {
164
+ o === "*" && t[r + 1] === "/" && (n = !1, r++);
165
+ continue;
166
+ }
167
+ if (e !== null) {
168
+ if (o === "\\") {
169
+ r++;
170
+ continue;
171
+ }
172
+ o === e && (e = null);
173
+ continue;
174
+ }
175
+ if (o === "/" && t[r + 1] === "*") {
176
+ n = !0, r++;
177
+ continue;
178
+ }
179
+ if (o === '"' || o === "'") {
180
+ e = o;
181
+ continue;
182
+ }
183
+ if (o === "{")
184
+ i++;
185
+ else if (o === "}" && (i--, i < 0))
186
+ return !1;
187
+ }
188
+ return i === 0;
189
+ }
190
+ function R(t, i) {
191
+ if (!I(t))
192
+ return null;
193
+ const e = S(t);
194
+ for (const { pattern: r, label: o } of W)
195
+ if (r.test(e))
196
+ return null;
197
+ let n;
198
+ for (p.lastIndex = 0; (n = p.exec(e)) !== null; ) {
199
+ const r = n[2] ?? "";
200
+ if (!H(r))
201
+ return null;
202
+ }
203
+ return t;
204
+ }
205
+ function z(t, i) {
206
+ if (typeof document > "u" || j(t)) return;
207
+ const e = R(i);
208
+ if (e === null) return;
209
+ const n = A(t, e), r = document.createElement("style");
210
+ r.setAttribute("data-hx-light-styles", t), r.textContent = n, document.head.appendChild(r), $(t, r);
211
+ }
212
+ var D = Object.defineProperty, F = Object.getOwnPropertyDescriptor, h = (t, i, e, n) => {
213
+ for (var r = n > 1 ? void 0 : n ? F(i, e) : i, o = t.length - 1, c; o >= 0; o--)
214
+ (c = t[o]) && (r = (n ? c(i, e, r) : c(r)) || r);
215
+ return n && r && D(i, e, r), r;
216
+ };
217
+ let a = class extends _ {
218
+ constructor() {
219
+ super(...arguments), this.component = "", this.lightCss = "";
220
+ }
221
+ connectedCallback() {
222
+ super.connectedCallback(), this._applyScope();
223
+ }
224
+ updated(t) {
225
+ (t.has("component") || t.has("lightCss")) && this._applyScope();
226
+ }
227
+ /**
228
+ * Applies the `data-hx-styled` attribute and triggers style injection.
229
+ * Called on connect and whenever `component` or `lightCss` changes.
230
+ */
231
+ _applyScope() {
232
+ this.component && (this.setAttribute("data-hx-styled", this.component), this.lightCss && z(this.component, this.lightCss));
233
+ }
234
+ render() {
235
+ return E`<slot></slot>`;
236
+ }
237
+ };
238
+ a.styles = [v];
239
+ h([
240
+ m({ type: String, reflect: !0 })
241
+ ], a.prototype, "component", 2);
242
+ h([
243
+ m({ type: String, attribute: "light-css" })
244
+ ], a.prototype, "lightCss", 2);
245
+ a = h([
246
+ w("hx-style-scope")
247
+ ], a);
248
+ export {
249
+ a as H
250
+ };
251
+ //# sourceMappingURL=hx-style-scope-TDnR8H4O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-style-scope-TDnR8H4O.js","sources":["../../src/components/hx-style-scope/hx-style-scope.styles.ts","../../src/utilities/lightStyleRegistry.ts","../../src/utilities/generateScopedSelectors.ts","../../src/utilities/sanitizeCss.ts","../../src/utilities/injectLightStyles.ts","../../src/components/hx-style-scope/hx-style-scope.ts"],"sourcesContent":["import { css } from 'lit';\n\n/**\n * Styles for hx-style-scope.\n *\n * The element acts as a transparent wrapper — `display: contents` removes it\n * from the layout box model so slotted children lay out as if the wrapper\n * were absent. This prevents hx-style-scope from introducing unexpected\n * layout shifts or block-formatting-context changes.\n */\nexport const hxStyleScopeStyles = css`\n :host {\n display: contents;\n }\n\n /* ─── High Contrast Mode (forced-colors) ─── */\n\n /* hx-style-scope is a transparent layout wrapper (display: contents).\n It has no visual output of its own. forced-color-adjust: auto (default)\n is sufficient. */\n @media (forced-colors: active) {\n :host {\n forced-color-adjust: auto;\n }\n }\n`;\n","/**\n * @module lightStyleRegistry\n *\n * A Map-based registry that tracks which component stylesheets have been\n * injected into the document's light DOM. Used by injectLightStyles to\n * deduplicate style injection — each component type is injected at most once\n * per page load.\n *\n * @example\n * ```ts\n * import { isStyleRegistered, registerStyle } from './lightStyleRegistry.js';\n *\n * if (!isStyleRegistered('hx-card')) {\n * const el = document.createElement('style');\n * el.textContent = css;\n * document.head.appendChild(el);\n * registerStyle('hx-card', el);\n * }\n * ```\n */\n\n/**\n * Primary registry mapping component names to their injected HTMLStyleElement.\n * Keyed by component tag name (e.g. `'hx-card'`).\n */\nexport const lightStyleRegistry: Map<string, HTMLStyleElement> = new Map();\n\n/**\n * Returns true if a stylesheet for the given component has already been\n * injected into the document.\n *\n * @param componentName - The component tag name (e.g. `'hx-card'`).\n */\nexport function isStyleRegistered(componentName: string): boolean {\n return lightStyleRegistry.has(componentName);\n}\n\n/**\n * Records a stylesheet element in the registry for the given component.\n * Called after the element has been appended to the document.\n *\n * @param componentName - The component tag name (e.g. `'hx-card'`).\n * @param el - The HTMLStyleElement that was injected.\n */\nexport function registerStyle(componentName: string, el: HTMLStyleElement): void {\n lightStyleRegistry.set(componentName, el);\n}\n","/**\n * @module generateScopedSelectors\n *\n * Generates CSS with all selectors scoped under a `[data-hx-styled=\"componentName\"]`\n * attribute selector. This ensures injected light DOM styles only apply to content\n * wrapped in `<hx-style-scope component=\"...\">` and do not leak to the rest of the page.\n *\n * @example\n * ```ts\n * import { generateScopedSelectors } from './generateScopedSelectors.js';\n *\n * const scoped = generateScopedSelectors('hx-card', 'p { color: red; }');\n * // '[data-hx-styled=\"hx-card\"] p { color: red; }'\n * ```\n */\n\n/**\n * Wraps all CSS selectors to be scoped under `[data-hx-styled=\"componentName\"]`.\n *\n * Handles:\n * - Standard selectors: `p { ... }` → `[data-hx-styled=\"hx-card\"] p { ... }`\n * - `::slotted(*)` patterns: `::slotted(p) { ... }` → `[data-hx-styled=\"hx-card\"] p { ... }`\n * - At-rules (`@media`, `@supports`, etc.) are preserved with their inner rules scoped\n * - `:host` selectors are replaced with the scope attribute selector\n *\n * @param componentName - The component tag name used as the scope identifier.\n * @param css - The CSS string to transform.\n * @returns The transformed CSS with all selectors scoped.\n */\nexport function generateScopedSelectors(componentName: string, css: string): string {\n const scopeAttr = `[data-hx-styled=\"${componentName}\"]`;\n return transformCss(css, scopeAttr);\n}\n\n/**\n * Returns the character at position `i` in `str`, or an empty string if out of bounds.\n * Avoids the `string | undefined` issue from `noUncheckedIndexedAccess`.\n */\nfunction charAt(str: string, i: number): string {\n return str[i] ?? '';\n}\n\n/**\n * Recursively transforms CSS text, scoping all selectors under the given\n * attribute selector prefix.\n *\n * @param css - The CSS text to transform.\n * @param scopeAttr - The attribute selector to prepend (e.g. `[data-hx-styled=\"hx-card\"]`).\n * @returns The scoped CSS string.\n */\nfunction transformCss(css: string, scopeAttr: string): string {\n const result: string[] = [];\n let i = 0;\n const len = css.length;\n\n while (i < len) {\n // Skip whitespace\n while (i < len && /\\s/.test(charAt(css, i))) {\n result.push(charAt(css, i));\n i++;\n }\n\n if (i >= len) break;\n\n // Check for at-rule (e.g. @media, @supports, @keyframes)\n if (charAt(css, i) === '@') {\n const atBlock = extractAtRule(css, i);\n result.push(transformAtRule(atBlock.text, scopeAttr));\n i = atBlock.end;\n continue;\n }\n\n // Extract a selector block up to the opening brace\n const selectorEnd = css.indexOf('{', i);\n if (selectorEnd === -1) break;\n\n const selectorRaw = css.slice(i, selectorEnd);\n const bodyStart = selectorEnd + 1;\n const bodyEnd = findMatchingBrace(css, selectorEnd);\n\n if (bodyEnd === -1) break;\n\n const body = css.slice(bodyStart, bodyEnd);\n const scopedSelector = scopeSelector(selectorRaw, scopeAttr);\n result.push(`${scopedSelector}{${body}}`);\n i = bodyEnd + 1;\n }\n\n return result.join('');\n}\n\n/**\n * Scopes a raw selector string under the given attribute selector.\n * Handles comma-separated selectors, `::slotted()`, and `:host`.\n *\n * @param selectorRaw - The raw selector string (may be comma-separated).\n * @param scopeAttr - The attribute selector prefix.\n * @returns The scoped selector string.\n */\nfunction scopeSelector(selectorRaw: string, scopeAttr: string): string {\n return selectorRaw\n .split(',')\n .map((part) => {\n const trimmed = part.trim();\n\n // Replace ::slotted(*) with a direct descendant selector\n if (trimmed.startsWith('::slotted(') && trimmed.endsWith(')')) {\n const inner = trimmed.slice('::slotted('.length, -1).trim();\n return `${scopeAttr} ${inner}`;\n }\n\n // Replace :host with the scope attribute selector\n if (trimmed === ':host' || trimmed.startsWith(':host(') || trimmed.startsWith(':host ')) {\n return trimmed.replace(/^:host(\\([^)]*\\))?/, scopeAttr);\n }\n\n // Standard selector — prepend scope\n return `${scopeAttr} ${trimmed}`;\n })\n .join(', ');\n}\n\n/**\n * Handles transformation of an at-rule block. For container at-rules\n * (`@media`, `@supports`, `@layer`, `@container`) the inner rules are scoped.\n * Non-container at-rules (e.g. `@keyframes`, `@charset`) are passed through unchanged.\n *\n * @param atRuleText - The full at-rule text including its block.\n * @param scopeAttr - The attribute selector prefix.\n * @returns The transformed at-rule text.\n */\nfunction transformAtRule(atRuleText: string, scopeAttr: string): string {\n const containerAtRules = /^@(media|supports|layer|container|document)\\b/;\n const braceIndex = atRuleText.indexOf('{');\n\n if (braceIndex === -1 || !containerAtRules.test(atRuleText.trim())) {\n return atRuleText;\n }\n\n const head = atRuleText.slice(0, braceIndex + 1);\n const innerEnd = atRuleText.lastIndexOf('}');\n const inner = atRuleText.slice(braceIndex + 1, innerEnd);\n const tail = atRuleText.slice(innerEnd);\n\n return `${head}${transformCss(inner, scopeAttr)}${tail}`;\n}\n\n/**\n * Extracts a complete at-rule (potentially with a block) starting at index `start`.\n * Returns the text and the end index.\n */\nfunction extractAtRule(css: string, start: number): { text: string; end: number } {\n // Find either ';' (simple at-rule) or the matching '{...}' (block at-rule)\n let i = start;\n while (i < css.length && charAt(css, i) !== '{' && charAt(css, i) !== ';') {\n i++;\n }\n\n if (i >= css.length) {\n return { text: css.slice(start), end: css.length };\n }\n\n if (charAt(css, i) === ';') {\n return { text: css.slice(start, i + 1), end: i + 1 };\n }\n\n // Block at-rule — find matching closing brace\n const end = findMatchingBrace(css, i);\n if (end === -1) {\n return { text: css.slice(start), end: css.length };\n }\n\n return { text: css.slice(start, end + 1), end: end + 1 };\n}\n\n/**\n * Finds the index of the closing `}` that matches the `{` at `openIndex`.\n * Returns -1 if no matching brace is found.\n */\nfunction findMatchingBrace(css: string, openIndex: number): number {\n let depth = 0;\n for (let i = openIndex; i < css.length; i++) {\n const ch = charAt(css, i);\n if (ch === '{') depth++;\n else if (ch === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n","/**\n * @module sanitizeCss\n *\n * Validates and sanitizes a CSS string before injection into the document.\n * Prevents CSS injection attacks including scope escape via unbalanced braces,\n * external resource loading via `url()` / `@import`, and legacy browser\n * exploits (`expression()`, `-moz-binding`, `behavior:`).\n *\n * Returns the CSS string unchanged if it passes all checks, or `null` if\n * the input is rejected. Callers should treat a `null` return as a hard\n * rejection — the CSS must NOT be injected.\n */\n\nimport { devWarn } from '../utils/dev-warn.js';\n\n/** Patterns that are never allowed in injected CSS. */\nconst BLOCKED_PATTERNS: ReadonlyArray<{ pattern: RegExp; label: string }> = [\n { pattern: /expression\\s*\\(/i, label: 'CSS expression()' },\n { pattern: /-moz-binding\\s*:/i, label: '-moz-binding (XBL injection)' },\n { pattern: /behavior\\s*:/i, label: 'behavior: (HTC injection)' },\n { pattern: /@import\\b/i, label: '@import rule' },\n];\n\n/**\n * Matches `url(...)` values. Captures the content inside the parens.\n * Handles both quoted and unquoted forms. The `s` (dotAll) flag allows the\n * content to span newlines so CSS line-continuation escapes (`\\<LF>`) inside\n * `url()` do not slip past the matcher entirely — those continuations are\n * part of the url payload the CSS parser will still evaluate.\n */\nconst URL_PATTERN = /url\\(\\s*(['\"]?)(.*?)\\1\\s*\\)/gis;\n\n/**\n * Allowed URI schemes inside `url()`. Relative paths (no scheme) are also\n * allowed — only explicit external schemes are blocked.\n */\nconst ALLOWED_URL_PREFIXES: ReadonlyArray<string> = [\n 'data:',\n 'blob:',\n '#', // fragment references (e.g. SVG filters)\n];\n\n/**\n * Decodes CSS escape sequences found inside `url()` payloads to defeat\n * encoding-based bypasses of the scheme check.\n *\n * Three escape forms per CSS Syntax Level 3 are handled:\n *\n * 1. Hex escape: `\\` followed by 1-6 hex digits, optionally terminated by a\n * single whitespace character. Decodes to the codepoint\n * (e.g. `\\3a` → `:`, `\\2f\\2f` → `//`, `\\68\\74\\74\\70\\3a` → `http:`).\n * 2. Line continuation: `\\` followed by a newline (`\\n`, `\\r\\n`, `\\r`, or\n * `\\f`). Decodes to the empty string — the browser strips these and the\n * remaining characters are concatenated, so `http\\<LF>:xyz` becomes\n * `http:xyz`.\n * 3. Identity escape: `\\` followed by any other character. Decodes to the\n * literal character (e.g. `\\:` → `:`).\n *\n * This intentionally implements only the subset of CSS escape handling that\n * the parser applies to `url()` token contents. It is not a full CSS lexer.\n */\nfunction decodeCssEscapes(input: string): string {\n let out = '';\n let i = 0;\n const len = input.length;\n\n while (i < len) {\n const ch = input[i];\n\n if (ch !== '\\\\') {\n out += ch;\n i++;\n continue;\n }\n\n // Trailing lone backslash — keep it literal.\n if (i + 1 >= len) {\n out += ch;\n i++;\n continue;\n }\n\n const next = input[i + 1];\n\n // Line continuation: \\\\r\\n, \\\\n, \\\\r, \\\\f all decode to empty string.\n if (next === '\\n' || next === '\\f') {\n i += 2;\n continue;\n }\n if (next === '\\r') {\n // Handle CRLF as a single continuation.\n if (input[i + 2] === '\\n') {\n i += 3;\n } else {\n i += 2;\n }\n continue;\n }\n\n // Hex escape: up to 6 hex digits, optional single whitespace terminator.\n if (next !== undefined && /[0-9a-fA-F]/.test(next)) {\n let hex = '';\n let j = i + 1;\n while (j < len && hex.length < 6) {\n const hexCh = input[j];\n if (hexCh === undefined || !/[0-9a-fA-F]/.test(hexCh)) break;\n hex += hexCh;\n j++;\n }\n // Consume a single optional whitespace terminator per CSS spec.\n // CRLF is treated as one whitespace token.\n if (j < len) {\n const term = input[j];\n if (term === '\\r' && input[j + 1] === '\\n') {\n j += 2;\n } else if (\n term === ' ' ||\n term === '\\t' ||\n term === '\\n' ||\n term === '\\r' ||\n term === '\\f'\n ) {\n j++;\n }\n }\n const codepoint = parseInt(hex, 16);\n // Spec: a codepoint of 0 or a surrogate or above max Unicode is replaced\n // with U+FFFD. We replicate that defensively.\n if (\n !Number.isFinite(codepoint) ||\n codepoint === 0 ||\n (codepoint >= 0xd800 && codepoint <= 0xdfff) ||\n codepoint > 0x10ffff\n ) {\n out += '\\uFFFD';\n } else {\n out += String.fromCodePoint(codepoint);\n }\n i = j;\n continue;\n }\n\n // Identity escape: \\X decodes to literal X (for any non-hex, non-newline X).\n out += next;\n i += 2;\n }\n\n return out;\n}\n\n/**\n * Returns true if a `url()` value is safe for injection.\n * Safe values are: relative paths, data: URIs, blob: URIs, and fragment refs.\n * Anything with an explicit protocol scheme (http:, https:, ftp:, etc.) is blocked.\n *\n * The payload is CSS-escape-decoded before any scheme / prefix check is\n * applied. `sanitizeCss` pre-decodes the full stylesheet so this decode is\n * normally idempotent, but the defense is retained here so `isUrlSafe` remains\n * correct in isolation and survives any future caller that passes raw payloads.\n */\nfunction isUrlSafe(urlValue: string): boolean {\n const trimmedRaw = urlValue.trim();\n\n // Empty url() is harmless. Check this on the raw (pre-decode) value so a\n // string consisting only of whitespace escapes still short-circuits cleanly\n // after decoding — see below.\n if (trimmedRaw === '') return true;\n\n // Decode CSS escapes first so the scheme / prefix checks run against the\n // same string the browser's CSS parser will materialize.\n const decoded = decodeCssEscapes(trimmedRaw).trim();\n\n // A url() that decodes to empty (e.g. only line-continuations) is harmless.\n if (decoded === '') return true;\n\n // Protocol-relative URLs (//host/path) resolve against the page's current\n // protocol and load from an external host — same risk as explicit http://.\n // Must reject before the allow-prefix / scheme checks, since they have no colon.\n if (decoded.startsWith('//')) return false;\n\n // Allow explicitly safe prefixes\n for (const prefix of ALLOWED_URL_PREFIXES) {\n if (decoded.startsWith(prefix)) return true;\n }\n\n // Block any value containing a protocol scheme (e.g. http://, https://, ftp://)\n if (/^[a-z][a-z0-9+\\-.]*:/i.test(decoded)) {\n return false;\n }\n\n // No scheme — treat as relative path, which is safe\n return true;\n}\n\n/**\n * Checks whether braces in the CSS string are balanced.\n * Unbalanced braces can be used to escape scoped selectors and inject global\n * styles into the document. Braces inside strings (`\"...\"`, `'...'`) and block\n * comments are ignored so legitimate content like `content: \"}\"` or SVG data\n * URIs (`url(\"data:image/svg+xml,<svg>{...}</svg>\")`) does not trigger a false\n * rejection.\n */\nfunction areBracesBalanced(css: string): boolean {\n let depth = 0;\n let quote: '\"' | \"'\" | null = null;\n let inComment = false;\n\n for (let i = 0; i < css.length; i++) {\n const ch = css[i];\n\n if (inComment) {\n if (ch === '*' && css[i + 1] === '/') {\n inComment = false;\n i++;\n }\n continue;\n }\n\n if (quote !== null) {\n if (ch === '\\\\') {\n // Skip the escaped character (including an escaped quote).\n i++;\n continue;\n }\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n\n if (ch === '/' && css[i + 1] === '*') {\n inComment = true;\n i++;\n continue;\n }\n\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n // A negative depth means a closing brace appeared before its opener,\n // which is a clear scope-escape attempt.\n if (depth < 0) return false;\n }\n }\n return depth === 0;\n}\n\n/**\n * Sanitizes a CSS string for safe injection into `document.head`.\n *\n * Rejects CSS that contains:\n * - Unbalanced braces (scope escape)\n * - `url()` values pointing to external domains\n * - `@import` rules\n * - `expression()` (IE CSS expressions)\n * - `-moz-binding` (XBL injection)\n * - `behavior:` (HTC injection)\n *\n * ## Decode asymmetry\n *\n * Brace balance runs on the raw input (its scanner is string / escape aware).\n * `BLOCKED_PATTERNS` and `URL_PATTERN` run on a post-decode copy so that\n * escape-encoded idents (`@\\69mport`, `u\\72l(...)`) cannot smuggle a token\n * past a literal-byte regex. The decode is deliberately context-blind — the\n * tradeoff is a narrow false-positive surface: legitimate CSS that\n * hex-escapes one of the blocked sequences inside a string or comment\n * (e.g. `content: \"\\40 import notes\"` decodes to `content: \"@import notes\"`)\n * will be rejected even though the browser's tokenizer would never promote\n * it to an at-rule. This is intentional and accepted — the security gain\n * from closing the ident-escape bypass vastly outweighs the cost of a\n * vanishingly rare user-authored escape-encoded blocked string.\n *\n * @param css - The raw CSS string to validate.\n * @param componentName - The component name, used in dev warnings.\n * @returns The original CSS if safe, or `null` if rejected.\n */\nexport function sanitizeCss(css: string, componentName: string): string | null {\n // Check brace balance on the raw input — the balance scanner already tracks\n // string quoting and backslash escapes, so it does not need pre-decoded CSS\n // and is safer run against the source bytes.\n if (!areBracesBalanced(css)) {\n devWarn(\n componentName,\n 'light-css rejected: unbalanced braces detected. ' +\n 'This may indicate a CSS injection attempt.',\n );\n return null;\n }\n\n // Decode CSS escape sequences before the token-level checks.\n // The CSS tokenizer decodes escapes inside <ident-token>, <at-keyword-token>,\n // and <url-token> before comparing against rule/function names (CSS Syntax\n // Level 3 §4.3.3–§4.3.7). So `@\\69mport` tokenizes as `@import` and\n // `u\\72l(http://evil/x)` tokenizes as `url(http://evil/x)` — both would slip\n // past regex checks that match only the literal bytes. Decoding first forces\n // our patterns to see what the browser will actually tokenize.\n const decoded = decodeCssEscapes(css);\n\n // Check for blocked patterns against the decoded CSS.\n for (const { pattern, label } of BLOCKED_PATTERNS) {\n if (pattern.test(decoded)) {\n devWarn(componentName, `light-css rejected: ${label} is not allowed in injected styles.`);\n return null;\n }\n }\n\n // Validate all url() values on the decoded CSS — block external domains.\n let urlMatch: RegExpExecArray | null;\n URL_PATTERN.lastIndex = 0;\n while ((urlMatch = URL_PATTERN.exec(decoded)) !== null) {\n const urlValue = urlMatch[2] ?? '';\n if (!isUrlSafe(urlValue)) {\n devWarn(\n componentName,\n 'light-css rejected: url() with external domain detected. ' +\n 'Only relative paths, data:, and blob: URIs are allowed.',\n );\n return null;\n }\n }\n\n return css;\n}\n","/**\n * @module injectLightStyles\n *\n * Core utility for injecting scoped `<style>` elements into `document.head`\n * to style light DOM slotted content in HELiX components. Uses the\n * `lightStyleRegistry` to deduplicate — each component type is injected at\n * most once per page lifetime.\n *\n * This is the primary mechanism for ensuring Drupal-slotted content inherits\n * proper typography and spacing when rendered into HELiX components.\n *\n * @example\n * ```ts\n * import { injectLightStyles } from '../../utilities/injectLightStyles.js';\n *\n * // In connectedCallback:\n * injectLightStyles('hx-card', 'p { font-size: var(--hx-font-size-md); }');\n * ```\n */\n\nimport { isStyleRegistered, registerStyle } from './lightStyleRegistry.js';\nimport { generateScopedSelectors } from './generateScopedSelectors.js';\nimport { sanitizeCss } from './sanitizeCss.js';\n\n/**\n * Injects a scoped `<style>` element into `document.head` for light DOM content\n * belonging to `componentName`. The CSS is automatically scoped via\n * `generateScopedSelectors` so styles only apply inside\n * `[data-hx-styled=\"componentName\"]` wrappers.\n *\n * Safe to call multiple times — subsequent calls for the same `componentName`\n * are no-ops (deduplication via `lightStyleRegistry`).\n *\n * No-op in SSR environments where `document` is not defined.\n *\n * @param componentName - The component tag name used as the scope identifier\n * (e.g. `'hx-card'`). Must be unique per component type.\n * @param css - The raw CSS to scope and inject. Selectors will be prefixed with\n * `[data-hx-styled=\"componentName\"]`.\n */\nexport function injectLightStyles(componentName: string, css: string): void {\n if (typeof document === 'undefined') return;\n\n if (isStyleRegistered(componentName)) return;\n\n const safeCss = sanitizeCss(css, componentName);\n if (safeCss === null) return;\n\n const scopedCss = generateScopedSelectors(componentName, safeCss);\n\n const styleEl = document.createElement('style');\n styleEl.setAttribute('data-hx-light-styles', componentName);\n styleEl.textContent = scopedCss;\n\n document.head.appendChild(styleEl);\n registerStyle(componentName, styleEl);\n}\n","import { html, type PropertyValues } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property } from 'lit/decorators.js';\nimport { HelixElement } from '../../base/index.js';\nimport { hxStyleScopeStyles } from './hx-style-scope.styles.js';\nimport { injectLightStyles } from '../../utilities/injectLightStyles.js';\n\n/**\n * A transparent wrapper component that injects scoped light DOM styles for its\n * slotted children. Designed for use in Drupal Twig templates where slotted\n * content lives in the light DOM and cannot inherit Shadow DOM styles.\n *\n * On connection, the component:\n * 1. Sets `data-hx-styled` on itself so scoped CSS selectors resolve correctly.\n * 2. Calls `injectLightStyles` to inject a `<style>` into `document.head` — once\n * per component type, deduplicated via `lightStyleRegistry`.\n *\n * The element renders as `display: contents` so it does not affect layout.\n *\n * @summary Scoped light DOM style injection wrapper for Drupal-slotted content.\n *\n * @tag hx-style-scope\n *\n * @slot - Default slot for any light DOM content that should receive scoped styles.\n *\n * @example\n * ```html\n * <hx-style-scope component=\"hx-card\">\n * <p>This paragraph will receive hx-card light DOM styles.</p>\n * </hx-style-scope>\n * ```\n *\n * @example Drupal Twig usage via macro\n * ```twig\n * {% import '@helix/hx-style-scope.macro.twig' as hx %}\n * {{ hx.scope('hx-card', content) }}\n * ```\n */\n@customElement('hx-style-scope')\nexport class HxStyleScope extends HelixElement {\n static override styles = [hxStyleScopeStyles];\n\n /**\n * The component tag name whose light DOM styles should be injected.\n * Must match a registered component name (e.g. `'hx-card'`).\n *\n * When set, the element also applies `data-hx-styled` to itself so that\n * scoped CSS selectors generated by `generateScopedSelectors` resolve\n * correctly against slotted child elements.\n *\n * @attr component\n */\n @property({ type: String, reflect: true })\n component: string = '';\n\n /**\n * The CSS to inject as scoped light DOM styles. When provided alongside\n * `component`, this CSS will be scoped under `[data-hx-styled=\"component\"]`\n * and injected into `document.head` (once per component type).\n *\n * If omitted, `injectLightStyles` is still called but with an empty string,\n * which is a no-op for actual style injection.\n *\n * @attr light-css\n */\n @property({ type: String, attribute: 'light-css' })\n lightCss: string = '';\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._applyScope();\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n if (changed.has('component') || changed.has('lightCss')) {\n this._applyScope();\n }\n }\n\n /**\n * Applies the `data-hx-styled` attribute and triggers style injection.\n * Called on connect and whenever `component` or `lightCss` changes.\n */\n private _applyScope(): void {\n if (!this.component) return;\n\n // Set the scoping attribute so CSS selectors from generateScopedSelectors work.\n this.setAttribute('data-hx-styled', this.component);\n\n if (this.lightCss) {\n injectLightStyles(this.component, this.lightCss);\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-style-scope': HxStyleScope;\n }\n}\n"],"names":["hxStyleScopeStyles","css","lightStyleRegistry","isStyleRegistered","componentName","registerStyle","el","generateScopedSelectors","scopeAttr","transformCss","charAt","str","result","i","len","atBlock","extractAtRule","transformAtRule","selectorEnd","selectorRaw","bodyStart","bodyEnd","findMatchingBrace","body","scopedSelector","scopeSelector","part","trimmed","inner","atRuleText","containerAtRules","braceIndex","head","innerEnd","tail","start","end","openIndex","depth","ch","BLOCKED_PATTERNS","URL_PATTERN","ALLOWED_URL_PREFIXES","decodeCssEscapes","input","out","next","hex","j","hexCh","term","codepoint","isUrlSafe","urlValue","trimmedRaw","decoded","prefix","areBracesBalanced","quote","inComment","sanitizeCss","pattern","label","urlMatch","injectLightStyles","safeCss","scopedCss","styleEl","HxStyleScope","HelixElement","changed","html","__decorateClass","property","customElement"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import { css as p, LitElement as x, nothing as o, html as c } from "lit";
2
- import "./document-token-adoption-DuYNKd4k.js";
3
- import { property as s, query as _, state as m, customElement as w } from "lit/decorators.js";
4
- import { classMap as v } from "lit/directives/class-map.js";
1
+ import { css as x, nothing as c, html as l } from "lit";
2
+ import { property as i, query as _, state as m, customElement as w } from "lit/decorators.js";
3
+ import { classMap as p } from "lit/directives/class-map.js";
5
4
  import { ifDefined as u } from "lit/directives/if-defined.js";
6
- const f = p`
5
+ import { F as b } from "./FormMixin-B8PXk5RQ.js";
6
+ import { H as f } from "./helix-element-BNEYeiys.js";
7
+ import { c as v } from "./id-counter-DuX8vsui.js";
8
+ const g = x`
7
9
  :host {
8
10
  display: block;
9
11
  }
@@ -23,13 +25,17 @@ const f = p`
23
25
  display: flex;
24
26
  flex-direction: column;
25
27
  gap: var(--hx-space-1, 0.25rem);
26
- font-family: var(--hx-font-family-sans, sans-serif);
28
+ font-family: var(--hx-switch-font-family, var(--hx-font-family-sans, sans-serif));
27
29
  }
28
30
 
31
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44px touch target height.
32
+ The track itself is smaller visually, but the row must meet the
33
+ interactive touch target threshold for all size variants. */
29
34
  .switch__control-row {
30
35
  display: flex;
31
36
  align-items: center;
32
37
  gap: var(--hx-space-2, 0.5rem);
38
+ min-height: var(--hx-touch-target-min, 2.75rem);
33
39
  }
34
40
 
35
41
  /* --- Track --- */
@@ -42,7 +48,7 @@ const f = p`
42
48
  border: none;
43
49
  padding: 0;
44
50
  border-radius: var(--hx-border-radius-full, 9999px);
45
- background-color: var(--hx-switch-track-bg, var(--hx-color-neutral-300, #ced4da));
51
+ background-color: var(--hx-switch-track-bg, var(--hx-color-neutral-300, #cbd5e1));
46
52
  cursor: pointer;
47
53
  transition: background-color var(--hx-transition-fast, 150ms ease);
48
54
  outline: none;
@@ -138,7 +144,7 @@ const f = p`
138
144
  .switch__label {
139
145
  font-size: var(--hx-font-size-sm, 0.875rem);
140
146
  font-weight: var(--hx-font-weight-medium, 500);
141
- color: var(--hx-switch-label-color, var(--hx-color-neutral-700, #343a40));
147
+ color: var(--hx-switch-label-color, var(--hx-color-neutral-700, #334155));
142
148
  line-height: var(--hx-line-height-normal, 1.5);
143
149
  cursor: pointer;
144
150
  user-select: none;
@@ -154,7 +160,7 @@ const f = p`
154
160
 
155
161
  .switch__help-text {
156
162
  font-size: var(--hx-font-size-xs, 0.75rem);
157
- color: var(--hx-switch-help-text-color, var(--hx-color-neutral-500, #6c757d));
163
+ color: var(--hx-switch-help-text-color, var(--hx-color-neutral-500, #64748b));
158
164
  line-height: var(--hx-line-height-normal, 1.5);
159
165
  }
160
166
 
@@ -172,41 +178,80 @@ const f = p`
172
178
  transition: none;
173
179
  }
174
180
  }
181
+
182
+ /* ─── High Contrast Mode (forced-colors) ─── */
183
+
184
+ @media (forced-colors: active) {
185
+ .switch__track {
186
+ forced-color-adjust: none;
187
+ background-color: ButtonFace;
188
+ border: 2px solid ButtonText;
189
+ }
190
+
191
+ .switch__track:focus-visible {
192
+ outline: 3px solid Highlight;
193
+ outline-offset: 2px;
194
+ }
195
+
196
+ .switch__thumb {
197
+ background-color: ButtonText;
198
+ box-shadow: none;
199
+ }
200
+
201
+ .switch--checked .switch__track {
202
+ background-color: Highlight;
203
+ border-color: Highlight;
204
+ }
205
+
206
+ .switch--checked .switch__thumb {
207
+ background-color: HighlightText;
208
+ }
209
+
210
+ :host([disabled]) {
211
+ opacity: 1;
212
+ }
213
+
214
+ :host([disabled]) .switch__track {
215
+ border-color: GrayText;
216
+ background-color: ButtonFace;
217
+ }
218
+
219
+ :host([disabled]) .switch__thumb {
220
+ background-color: GrayText;
221
+ }
222
+
223
+ :host([disabled]) .switch__label {
224
+ color: GrayText;
225
+ }
226
+
227
+ .switch__label {
228
+ color: CanvasText;
229
+ }
230
+
231
+ .switch__help-text {
232
+ color: GrayText;
233
+ }
234
+
235
+ .switch__error {
236
+ color: LinkText;
237
+ }
238
+ }
175
239
  `;
176
- var b = Object.defineProperty, g = Object.getOwnPropertyDescriptor, i = (t, r, l, a) => {
177
- for (var h = a > 1 ? void 0 : a ? g(r, l) : r, n = t.length - 1, d; n >= 0; n--)
178
- (d = t[n]) && (h = (a ? d(r, l, h) : d(h)) || h);
179
- return a && h && b(r, l, h), h;
240
+ var k = Object.defineProperty, y = Object.getOwnPropertyDescriptor, s = (t, r, o, a) => {
241
+ for (var h = a > 1 ? void 0 : a ? y(r, o) : r, n = t.length - 1, d; n >= 0; n--)
242
+ (d = t[n]) && (h = (a ? d(r, o, h) : d(h)) || h);
243
+ return a && h && k(r, o, h), h;
180
244
  };
181
- let e = class extends x {
245
+ const z = v("hx-switch");
246
+ let e = class extends b(f) {
182
247
  constructor() {
183
- super(), this.checked = !1, this.disabled = !1, this.required = !1, this.name = "", this.value = "on", this.label = "", this.size = "md", this.error = "", this.helpText = "", this.requiredMessage = "This field is required.", this._hasErrorSlot = !1, this._hasDefaultSlot = !1, this._switchId = `hx-switch-${++e._instanceCounter}`, this._labelId = `${this._switchId}-label`, this._helpTextId = `${this._switchId}-help`, this._errorId = `${this._switchId}-error`, this._internals = this.attachInternals();
248
+ super(...arguments), this.checked = !1, this.disabled = !1, this.required = !1, this.name = "", this.value = "on", this.label = "", this.size = "md", this.error = "", this.helpText = "", this.requiredMessage = "This field is required.", this._hasErrorSlot = !1, this._hasDefaultSlot = !1, this._switchId = z(), this._labelId = `${this._switchId}-label`, this._helpTextId = `${this._switchId}-help`, this._errorId = `${this._switchId}-error`;
184
249
  }
185
250
  // ─── Lifecycle ───
186
251
  updated(t) {
187
- super.updated(t), (t.has("checked") || t.has("value")) && (this._internals.setFormValue(this.checked ? this.value : null), this._updateValidity()), t.has("required") && this._updateValidity();
252
+ super.updated(t), (t.has("checked") || t.has("value")) && this._internals.setFormValue(this.checked ? this.value : null);
188
253
  }
189
254
  // ─── Form Integration ───
190
- /** Returns the associated form element, if any. */
191
- get form() {
192
- return this._internals.form;
193
- }
194
- /** Returns the validation message. */
195
- get validationMessage() {
196
- return this._internals.validationMessage;
197
- }
198
- /** Returns the ValidityState object. */
199
- get validity() {
200
- return this._internals.validity;
201
- }
202
- /** Checks whether the switch satisfies its constraints. */
203
- checkValidity() {
204
- return this._internals.checkValidity();
205
- }
206
- /** Reports validity and shows the browser's constraint validation UI. */
207
- reportValidity() {
208
- return this._internals.reportValidity();
209
- }
210
255
  /** Recalculates and sets the validity state based on required and checked. */
211
256
  /** @internal */
212
257
  _updateValidity() {
@@ -216,16 +261,13 @@ let e = class extends x {
216
261
  this._trackEl ?? void 0
217
262
  ) : this._internals.setValidity({});
218
263
  }
219
- /** @internal */
220
- formResetCallback() {
221
- this.checked = !1, this._internals.setFormValue(null);
264
+ _onFormReset() {
265
+ this.checked = !1, this._internals.setFormValue(null), this._resetInteractionState();
222
266
  }
223
- /** @internal */
224
- formStateRestoreCallback(t, r) {
267
+ _onFormStateRestore(t, r) {
225
268
  typeof t == "string" && (this.checked = t === this.value);
226
269
  }
227
- /** @internal */
228
- formDisabledCallback(t) {
270
+ _onFormDisabled(t) {
229
271
  this.disabled = t;
230
272
  }
231
273
  // ─── Slot Handlers ───
@@ -245,7 +287,7 @@ let e = class extends x {
245
287
  /** Toggles checked state and dispatches hx-change event. */
246
288
  /** @internal */
247
289
  _toggle() {
248
- this.disabled || (this.checked = !this.checked, this.dispatchEvent(
290
+ this.disabled || (this.checked = !this.checked, this._handleInteractionInput(), this.dispatchEvent(
249
291
  new CustomEvent("hx-change", {
250
292
  bubbles: !0,
251
293
  composed: !0,
@@ -270,7 +312,7 @@ let e = class extends x {
270
312
  (r = this._trackEl) == null || r.focus(t);
271
313
  }
272
314
  render() {
273
- const t = !!this.error, r = !!this.label || this._hasDefaultSlot, l = {
315
+ const t = !!this.error, r = !!this.label || this._hasDefaultSlot, o = {
274
316
  switch: !0,
275
317
  "switch--checked": this.checked,
276
318
  "switch--disabled": this.disabled,
@@ -281,8 +323,8 @@ let e = class extends x {
281
323
  t || this._hasErrorSlot ? this._errorId : null,
282
324
  this.helpText && !t ? this._helpTextId : null
283
325
  ].filter(Boolean).join(" ") || void 0;
284
- return c`
285
- <div part="switch" class=${v(l)}>
326
+ return l`
327
+ <div part="switch" class=${p(o)}>
286
328
  <div class="switch__control-row">
287
329
  <button
288
330
  part="track"
@@ -293,8 +335,8 @@ let e = class extends x {
293
335
  aria-checked=${this.checked ? "true" : "false"}
294
336
  aria-labelledby=${u(r ? this._labelId : void 0)}
295
337
  aria-describedby=${u(a)}
296
- aria-invalid=${t ? "true" : o}
297
- aria-required=${this.required ? "true" : o}
338
+ aria-invalid=${t ? "true" : c}
339
+ aria-required=${this.required ? "true" : c}
298
340
  ?disabled=${this.disabled}
299
341
  @click=${this._handleClick}
300
342
  @keydown=${this._handleKeyDown}
@@ -303,71 +345,70 @@ let e = class extends x {
303
345
  </button>
304
346
 
305
347
  <label part="label" class="switch__label" id=${this._labelId} for=${this._switchId}>
306
- <slot @slotchange=${this._handleDefaultSlotChange}>${this.label}</slot>${this.required ? c`<span class="switch__required-marker" aria-hidden="true">*</span>` : o}
348
+ <slot @slotchange=${this._handleDefaultSlotChange}>${this.label}</slot>${this.required ? l`<span class="switch__required-marker" aria-hidden="true">*</span>` : c}
307
349
  </label>
308
350
  </div>
309
351
 
310
352
  <slot name="error" @slotchange=${this._handleErrorSlotChange}>
311
- ${t ? c`<div part="error" class="switch__error" id=${this._errorId} role="alert">
353
+ ${t ? l`<div part="error" class="switch__error" id=${this._errorId} role="alert">
312
354
  ${this.error}
313
- </div>` : o}
355
+ </div>` : c}
314
356
  </slot>
315
357
 
316
- ${this.helpText && !t ? c`
358
+ ${this.helpText && !t ? l`
317
359
  <div part="help-text" class="switch__help-text" id=${this._helpTextId}>
318
360
  <slot name="help-text">${this.helpText}</slot>
319
361
  </div>
320
- ` : o}
362
+ ` : c}
321
363
  </div>
322
364
  `;
323
365
  }
324
366
  };
325
- e.styles = [f];
326
- e._instanceCounter = 0;
367
+ e.styles = [g];
327
368
  e.formAssociated = !0;
328
- i([
329
- s({ type: Boolean, reflect: !0 })
369
+ s([
370
+ i({ type: Boolean, reflect: !0 })
330
371
  ], e.prototype, "checked", 2);
331
- i([
332
- s({ type: Boolean, reflect: !0 })
372
+ s([
373
+ i({ type: Boolean, reflect: !0 })
333
374
  ], e.prototype, "disabled", 2);
334
- i([
335
- s({ type: Boolean, reflect: !0 })
375
+ s([
376
+ i({ type: Boolean, reflect: !0 })
336
377
  ], e.prototype, "required", 2);
337
- i([
338
- s({ type: String })
378
+ s([
379
+ i({ type: String, reflect: !0 })
339
380
  ], e.prototype, "name", 2);
340
- i([
341
- s({ type: String })
381
+ s([
382
+ i({ type: String, reflect: !0 })
342
383
  ], e.prototype, "value", 2);
343
- i([
344
- s({ type: String })
384
+ s([
385
+ i({ type: String })
345
386
  ], e.prototype, "label", 2);
346
- i([
347
- s({ type: String, reflect: !0, attribute: "hx-size" })
387
+ s([
388
+ i({ type: String, reflect: !0, attribute: "hx-size" })
348
389
  ], e.prototype, "size", 2);
349
- i([
350
- s({ type: String })
390
+ s([
391
+ i({ type: String })
351
392
  ], e.prototype, "error", 2);
352
- i([
353
- s({ type: String, attribute: "help-text" })
393
+ s([
394
+ i({ type: String, attribute: "help-text" })
354
395
  ], e.prototype, "helpText", 2);
355
- i([
356
- s({ attribute: "required-message" })
396
+ s([
397
+ i({ attribute: "required-message" })
357
398
  ], e.prototype, "requiredMessage", 2);
358
- i([
399
+ s([
359
400
  _(".switch__track")
360
401
  ], e.prototype, "_trackEl", 2);
361
- i([
402
+ s([
362
403
  m()
363
404
  ], e.prototype, "_hasErrorSlot", 2);
364
- i([
405
+ s([
365
406
  m()
366
407
  ], e.prototype, "_hasDefaultSlot", 2);
367
- e = i([
408
+ e = s([
368
409
  w("hx-switch")
369
410
  ], e);
370
411
  export {
371
412
  e as H
372
413
  };
373
- //# sourceMappingURL=hx-switch-BzMN37PV.js.map
414
+ //# sourceMappingURL=hx-switch-DqOD9JR7.js.map