@helixui/library 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. package/custom-elements.json +3221 -2224
  2. package/dist/base/helix-element.d.ts +134 -0
  3. package/dist/base/helix-element.d.ts.map +1 -0
  4. package/dist/base/id-counter.d.ts +32 -0
  5. package/dist/base/id-counter.d.ts.map +1 -0
  6. package/dist/base/index.d.ts +4 -0
  7. package/dist/base/index.d.ts.map +1 -0
  8. package/dist/base/styles.d.ts +19 -0
  9. package/dist/base/styles.d.ts.map +1 -0
  10. package/dist/components/hx-accordion/hx-accordion-item.d.ts +3 -0
  11. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  12. package/dist/components/hx-accordion/hx-accordion.d.ts +4 -1
  13. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  14. package/dist/components/hx-accordion/index.js +1 -1
  15. package/dist/components/hx-action-bar/hx-action-bar.d.ts +1 -1
  16. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  17. package/dist/components/hx-action-bar/index.js +1 -1
  18. package/dist/components/hx-alert/hx-alert.d.ts +10 -5
  19. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  20. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  21. package/dist/components/hx-alert/index.js +1 -1
  22. package/dist/components/hx-avatar/hx-avatar.styles.d.ts.map +1 -1
  23. package/dist/components/hx-avatar/index.js +1 -1
  24. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  25. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  26. package/dist/components/hx-badge/index.js +1 -1
  27. package/dist/components/hx-banner/hx-banner.d.ts +15 -5
  28. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  29. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  30. package/dist/components/hx-banner/index.js +1 -1
  31. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +1 -0
  32. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  33. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +42 -11
  34. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  35. package/dist/components/hx-breadcrumb/index.js +1 -1
  36. package/dist/components/hx-button/hx-button.d.ts +22 -13
  37. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  38. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  39. package/dist/components/hx-button/index.js +1 -1
  40. package/dist/components/hx-button-group/hx-button-group.d.ts +3 -6
  41. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  42. package/dist/components/hx-button-group/index.js +1 -1
  43. package/dist/components/hx-card/hx-card.d.ts +7 -7
  44. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  45. package/dist/components/hx-card/index.js +1 -1
  46. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  47. package/dist/components/hx-carousel/index.js +1 -1
  48. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -18
  49. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  50. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  51. package/dist/components/hx-checkbox/index.js +1 -1
  52. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +8 -3
  53. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  54. package/dist/components/hx-checkbox-group/index.js +1 -1
  55. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +134 -0
  56. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -0
  57. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts +2 -0
  58. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -0
  59. package/dist/components/hx-clinical-status/index.d.ts +3 -0
  60. package/dist/components/hx-clinical-status/index.d.ts.map +1 -0
  61. package/dist/components/hx-clinical-status/index.js +5 -0
  62. package/dist/components/hx-clinical-status/index.js.map +1 -0
  63. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  64. package/dist/components/hx-code-snippet/index.js +1 -1
  65. package/dist/components/hx-color-picker/color-utils.d.ts +27 -0
  66. package/dist/components/hx-color-picker/color-utils.d.ts.map +1 -0
  67. package/dist/components/hx-color-picker/hx-color-picker.d.ts +16 -4
  68. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  69. package/dist/components/hx-color-picker/index.js +1 -1
  70. package/dist/components/hx-combobox/hx-combobox.d.ts +9 -4
  71. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  72. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  73. package/dist/components/hx-combobox/index.js +1 -1
  74. package/dist/components/hx-container/index.js +1 -1
  75. package/dist/components/hx-copy-button/hx-copy-button.d.ts +6 -1
  76. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  77. package/dist/components/hx-copy-button/index.js +1 -1
  78. package/dist/components/hx-counter/hx-counter.d.ts +20 -3
  79. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  80. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  81. package/dist/components/hx-counter/index.js +1 -1
  82. package/dist/components/hx-data-table/hx-data-table.d.ts +8 -0
  83. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  84. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  85. package/dist/components/hx-data-table/index.js +1 -1
  86. package/dist/components/hx-date-picker/hx-date-picker.d.ts +40 -3
  87. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  88. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  89. package/dist/components/hx-date-picker/index.js +1 -1
  90. package/dist/components/hx-dialog/hx-dialog.d.ts +4 -1
  91. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  92. package/dist/components/hx-dialog/index.js +1 -1
  93. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  94. package/dist/components/hx-divider/index.js +1 -1
  95. package/dist/components/hx-drawer/hx-drawer.d.ts +5 -8
  96. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  97. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  98. package/dist/components/hx-drawer/index.js +1 -1
  99. package/dist/components/hx-dropdown/hx-dropdown.d.ts +14 -1
  100. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  101. package/dist/components/hx-dropdown/index.js +1 -1
  102. package/dist/components/hx-field/hx-field.d.ts +1 -1
  103. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  104. package/dist/components/hx-field/index.js +1 -1
  105. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  106. package/dist/components/hx-field-label/index.js +1 -1
  107. package/dist/components/hx-file-upload/hx-file-upload.d.ts +8 -9
  108. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  109. package/dist/components/hx-file-upload/index.js +1 -1
  110. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  111. package/dist/components/hx-form/index.js +1 -1
  112. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  113. package/dist/components/hx-format-date/index.js +1 -1
  114. package/dist/components/hx-grid/hx-grid.d.ts +5 -9
  115. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  116. package/dist/components/hx-grid/index.js +1 -1
  117. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  118. package/dist/components/hx-icon/index.js +1 -1
  119. package/dist/components/hx-icon-button/hx-icon-button.d.ts +4 -3
  120. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  121. package/dist/components/hx-icon-button/index.js +1 -1
  122. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  123. package/dist/components/hx-image/index.js +1 -1
  124. package/dist/components/hx-link/hx-link.d.ts +1 -1
  125. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  126. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  127. package/dist/components/hx-link/index.js +1 -1
  128. package/dist/components/hx-menu/hx-menu-item.d.ts +5 -0
  129. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  130. package/dist/components/hx-menu/hx-menu.d.ts +1 -0
  131. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  132. package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
  133. package/dist/components/hx-menu/index.js +1 -1
  134. package/dist/components/hx-meter/hx-meter.d.ts +2 -2
  135. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  136. package/dist/components/hx-meter/index.js +1 -1
  137. package/dist/components/hx-nav/hx-nav.d.ts +10 -0
  138. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  139. package/dist/components/hx-nav/index.js +1 -1
  140. package/dist/components/hx-number-input/hx-number-input.d.ts +4 -3
  141. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  142. package/dist/components/hx-number-input/index.js +1 -1
  143. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +3 -3
  144. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  145. package/dist/components/hx-overflow-menu/index.js +1 -1
  146. package/dist/components/hx-pagination/hx-pagination.d.ts +8 -0
  147. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  148. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  149. package/dist/components/hx-pagination/index.js +1 -1
  150. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +113 -0
  151. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -0
  152. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts +2 -0
  153. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -0
  154. package/dist/components/hx-patient-banner/index.d.ts +3 -0
  155. package/dist/components/hx-patient-banner/index.d.ts.map +1 -0
  156. package/dist/components/hx-patient-banner/index.js +5 -0
  157. package/dist/components/hx-patient-banner/index.js.map +1 -0
  158. package/dist/components/hx-phi-field/hx-phi-field.d.ts +97 -0
  159. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -0
  160. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts +2 -0
  161. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -0
  162. package/dist/components/hx-phi-field/index.d.ts +3 -0
  163. package/dist/components/hx-phi-field/index.d.ts.map +1 -0
  164. package/dist/components/hx-phi-field/index.js +5 -0
  165. package/dist/components/hx-phi-field/index.js.map +1 -0
  166. package/dist/components/hx-popover/hx-popover.d.ts +25 -9
  167. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  168. package/dist/components/hx-popover/index.js +1 -1
  169. package/dist/components/hx-popup/hx-popup.d.ts +5 -8
  170. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  171. package/dist/components/hx-popup/index.js +1 -1
  172. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +2 -0
  173. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  174. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  175. package/dist/components/hx-progress-bar/index.js +1 -1
  176. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  177. package/dist/components/hx-progress-ring/index.js +1 -1
  178. package/dist/components/hx-prose/hx-prose.d.ts +1 -0
  179. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  180. package/dist/components/hx-radio-group/hx-radio-group.d.ts +3 -7
  181. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  182. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  183. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  184. package/dist/components/hx-radio-group/index.js +1 -1
  185. package/dist/components/hx-rating/hx-rating.d.ts +3 -3
  186. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  187. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  188. package/dist/components/hx-rating/index.js +1 -1
  189. package/dist/components/hx-select/hx-select.d.ts +17 -11
  190. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  191. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  192. package/dist/components/hx-select/index.js +1 -1
  193. package/dist/components/hx-side-nav/hx-nav-item.d.ts +12 -0
  194. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  195. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  196. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  197. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  198. package/dist/components/hx-side-nav/index.js +1 -1
  199. package/dist/components/hx-skeleton/hx-skeleton.d.ts +2 -2
  200. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  201. package/dist/components/hx-slider/hx-slider.d.ts +5 -8
  202. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  203. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  204. package/dist/components/hx-slider/index.js +1 -1
  205. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -1
  206. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  207. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  208. package/dist/components/hx-spinner/index.js +1 -1
  209. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  210. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  211. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  212. package/dist/components/hx-split-button/index.js +1 -1
  213. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  214. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  215. package/dist/components/hx-split-panel/index.js +1 -1
  216. package/dist/components/hx-stat/hx-stat.d.ts +7 -2
  217. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  218. package/dist/components/hx-stat/index.js +1 -1
  219. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +19 -3
  220. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  221. package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
  222. package/dist/components/hx-status-indicator/index.js +1 -1
  223. package/dist/components/hx-steps/hx-step.d.ts +7 -0
  224. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  225. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  226. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  227. package/dist/components/hx-steps/index.js +1 -1
  228. package/dist/components/hx-structured-list/hx-structured-list.d.ts +10 -3
  229. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  230. package/dist/components/hx-structured-list/index.js +1 -1
  231. package/dist/components/hx-style-scope/hx-style-scope.d.ts +71 -0
  232. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -0
  233. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts +10 -0
  234. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -0
  235. package/dist/components/hx-style-scope/index.d.ts +2 -0
  236. package/dist/components/hx-style-scope/index.d.ts.map +1 -0
  237. package/dist/components/hx-style-scope/index.js +5 -0
  238. package/dist/components/hx-style-scope/index.js.map +1 -0
  239. package/dist/components/hx-switch/hx-switch.d.ts +4 -4
  240. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  241. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  242. package/dist/components/hx-switch/index.js +1 -1
  243. package/dist/components/hx-table/hx-table.d.ts +1 -0
  244. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  245. package/dist/components/hx-table/index.js +1 -1
  246. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  247. package/dist/components/hx-tabs/hx-tab.d.ts +1 -0
  248. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  249. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  250. package/dist/components/hx-tabs/hx-tabs.d.ts +12 -2
  251. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  252. package/dist/components/hx-tabs/index.js +1 -1
  253. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  254. package/dist/components/hx-tag/index.js +1 -1
  255. package/dist/components/hx-text/index.js +1 -1
  256. package/dist/components/hx-text-input/hx-text-input.d.ts +16 -15
  257. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  258. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  259. package/dist/components/hx-text-input/index.js +1 -1
  260. package/dist/components/hx-textarea/hx-textarea.d.ts +4 -4
  261. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  262. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  263. package/dist/components/hx-textarea/index.js +1 -1
  264. package/dist/components/hx-theme/hx-theme.d.ts +82 -3
  265. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  266. package/dist/components/hx-theme/index.js +1 -1
  267. package/dist/components/hx-time-picker/hx-time-picker.d.ts +6 -1
  268. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  269. package/dist/components/hx-time-picker/index.js +1 -1
  270. package/dist/components/hx-toast/hx-toast-stack.d.ts +1 -1
  271. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  272. package/dist/components/hx-toast/hx-toast.d.ts +9 -5
  273. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  274. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  275. package/dist/components/hx-toast/index.js +1 -1
  276. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  277. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +4 -3
  278. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  279. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  280. package/dist/components/hx-toggle-button/index.js +1 -1
  281. package/dist/components/hx-tooltip/hx-tooltip.d.ts +1 -2
  282. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  283. package/dist/components/hx-tooltip/index.js +1 -1
  284. package/dist/components/hx-tree-view/hx-tree-item.d.ts +12 -0
  285. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  286. package/dist/components/hx-tree-view/hx-tree-view.d.ts +27 -2
  287. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  288. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  289. package/dist/components/hx-tree-view/index.js +1 -1
  290. package/dist/controllers/helix-audit-controller.d.ts +71 -0
  291. package/dist/controllers/helix-audit-controller.d.ts.map +1 -0
  292. package/dist/css/helix-all.css +9743 -0
  293. package/dist/css/helix-core.css +1839 -0
  294. package/dist/css/helix-data.css +639 -0
  295. package/dist/css/helix-feedback.css +1268 -0
  296. package/dist/css/helix-forms.css +2525 -0
  297. package/dist/css/helix-layout.css +380 -0
  298. package/dist/css/helix-media.css +213 -0
  299. package/dist/css/helix-navigation.css +1131 -0
  300. package/dist/css/helix-overlay.css +643 -0
  301. package/dist/css/helix-tokens.css +432 -0
  302. package/dist/css/helix-utility.css +633 -0
  303. package/dist/css/hx-accordion.css +10 -0
  304. package/dist/css/hx-action-bar.css +117 -0
  305. package/dist/css/hx-alert.css +213 -0
  306. package/dist/css/hx-avatar.css +134 -0
  307. package/dist/css/hx-badge.css +178 -0
  308. package/dist/css/hx-banner.css +203 -0
  309. package/dist/css/hx-breadcrumb.css +36 -0
  310. package/dist/css/hx-button-group.css +91 -0
  311. package/dist/css/hx-button.css +296 -0
  312. package/dist/css/hx-card.css +161 -0
  313. package/dist/css/hx-carousel.css +211 -0
  314. package/dist/css/hx-checkbox-group.css +77 -0
  315. package/dist/css/hx-checkbox.css +219 -0
  316. package/dist/css/hx-clinical-status.css +248 -0
  317. package/dist/css/hx-code-snippet.css +179 -0
  318. package/dist/css/hx-color-picker.css +2 -0
  319. package/dist/css/hx-combobox.css +2 -0
  320. package/dist/css/hx-container.css +82 -0
  321. package/dist/css/hx-copy-button.css +121 -0
  322. package/dist/css/hx-counter.css +51 -0
  323. package/dist/css/hx-data-table.css +207 -0
  324. package/dist/css/hx-date-picker.css +2 -0
  325. package/dist/css/hx-dialog.css +190 -0
  326. package/dist/css/hx-divider.css +87 -0
  327. package/dist/css/hx-drawer.css +262 -0
  328. package/dist/css/hx-dropdown.css +46 -0
  329. package/dist/css/hx-field-label.css +38 -0
  330. package/dist/css/hx-field.css +119 -0
  331. package/dist/css/hx-file-upload.css +241 -0
  332. package/dist/css/hx-form.css +2 -0
  333. package/dist/css/hx-format-date.css +10 -0
  334. package/dist/css/hx-grid.css +14 -0
  335. package/dist/css/hx-help-text.css +50 -0
  336. package/dist/css/hx-icon-button.css +152 -0
  337. package/dist/css/hx-icon.css +73 -0
  338. package/dist/css/hx-image.css +41 -0
  339. package/dist/css/hx-link.css +105 -0
  340. package/dist/css/hx-list.css +48 -0
  341. package/dist/css/hx-menu.css +23 -0
  342. package/dist/css/hx-meter.css +113 -0
  343. package/dist/css/hx-nav.css +242 -0
  344. package/dist/css/hx-number-input.css +246 -0
  345. package/dist/css/hx-overflow-menu.css +133 -0
  346. package/dist/css/hx-pagination.css +193 -0
  347. package/dist/css/hx-patient-banner.css +139 -0
  348. package/dist/css/hx-phi-field.css +97 -0
  349. package/dist/css/hx-popover.css +61 -0
  350. package/dist/css/hx-popup.css +31 -0
  351. package/dist/css/hx-progress-bar.css +133 -0
  352. package/dist/css/hx-progress-ring.css +142 -0
  353. package/dist/css/hx-prose.css +2 -0
  354. package/dist/css/hx-radio-group.css +77 -0
  355. package/dist/css/hx-rating.css +96 -0
  356. package/dist/css/hx-select.css +295 -0
  357. package/dist/css/hx-side-nav.css +149 -0
  358. package/dist/css/hx-skeleton.css +82 -0
  359. package/dist/css/hx-slider.css +287 -0
  360. package/dist/css/hx-spinner.css +116 -0
  361. package/dist/css/hx-split-button.css +309 -0
  362. package/dist/css/hx-split-panel.css +168 -0
  363. package/dist/css/hx-stack.css +104 -0
  364. package/dist/css/hx-stat.css +106 -0
  365. package/dist/css/hx-status-indicator.css +126 -0
  366. package/dist/css/hx-steps.css +52 -0
  367. package/dist/css/hx-structured-list.css +75 -0
  368. package/dist/css/hx-style-scope.css +4 -0
  369. package/dist/css/hx-switch.css +169 -0
  370. package/dist/css/hx-table.css +128 -0
  371. package/dist/css/hx-tabs.css +76 -0
  372. package/dist/css/hx-tag.css +146 -0
  373. package/dist/css/hx-text-input.css +214 -0
  374. package/dist/css/hx-text.css +149 -0
  375. package/dist/css/hx-textarea.css +180 -0
  376. package/dist/css/hx-theme.css +23 -0
  377. package/dist/css/hx-time-picker.css +2 -0
  378. package/dist/css/hx-toast.css +230 -0
  379. package/dist/css/hx-toggle-button.css +207 -0
  380. package/dist/css/hx-tooltip.css +51 -0
  381. package/dist/css/hx-top-nav.css +203 -0
  382. package/dist/css/hx-tree-view.css +22 -0
  383. package/dist/css/hx-visually-hidden.css +26 -0
  384. package/dist/css/index.css +84 -0
  385. package/dist/css/manifest.json +2704 -0
  386. package/dist/index.d.ts +14 -0
  387. package/dist/index.d.ts.map +1 -1
  388. package/dist/index.js +266 -176
  389. package/dist/index.js.map +1 -1
  390. package/dist/mixins/FocusMixin.d.ts +49 -0
  391. package/dist/mixins/FocusMixin.d.ts.map +1 -0
  392. package/dist/mixins/FormMixin.d.ts +69 -0
  393. package/dist/mixins/FormMixin.d.ts.map +1 -0
  394. package/dist/mixins/aria-delegation.d.ts +97 -0
  395. package/dist/mixins/aria-delegation.d.ts.map +1 -0
  396. package/dist/mixins/index.d.ts +5 -0
  397. package/dist/mixins/index.d.ts.map +1 -0
  398. package/dist/shared/FormMixin-Bjvw20G5.js +88 -0
  399. package/dist/shared/FormMixin-Bjvw20G5.js.map +1 -0
  400. package/dist/shared/aria-delegation-CBP9eQ0M.js +107 -0
  401. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +1 -0
  402. package/dist/shared/{hx-accordion-D1kFhdeQ.js → hx-accordion-_KeulaQR.js} +83 -55
  403. package/dist/shared/hx-accordion-_KeulaQR.js.map +1 -0
  404. package/dist/shared/{hx-action-bar-D4bulGQP.js → hx-action-bar-vGFnNwNY.js} +33 -34
  405. package/dist/shared/hx-action-bar-vGFnNwNY.js.map +1 -0
  406. package/dist/shared/{hx-alert-CSxCF2rr.js → hx-alert-DRZYP0Oo.js} +32 -28
  407. package/dist/shared/hx-alert-DRZYP0Oo.js.map +1 -0
  408. package/dist/shared/{hx-avatar-Cun-O99h.js → hx-avatar-CZfA9KEl.js} +28 -11
  409. package/dist/shared/hx-avatar-CZfA9KEl.js.map +1 -0
  410. package/dist/shared/{hx-badge-CsFd2xtw.js → hx-badge-Xg7zoh4Q.js} +46 -37
  411. package/dist/shared/hx-badge-Xg7zoh4Q.js.map +1 -0
  412. package/dist/shared/{hx-banner-BTV-X2xF.js → hx-banner-2RS7Nux4.js} +93 -58
  413. package/dist/shared/hx-banner-2RS7Nux4.js.map +1 -0
  414. package/dist/shared/{hx-breadcrumb-item-4IwaLgaO.js → hx-breadcrumb-item-CObc-WJl.js} +86 -83
  415. package/dist/shared/hx-breadcrumb-item-CObc-WJl.js.map +1 -0
  416. package/dist/shared/{hx-button-7k-KeCYU.js → hx-button-CC1YH9RZ.js} +127 -62
  417. package/dist/shared/hx-button-CC1YH9RZ.js.map +1 -0
  418. package/dist/shared/{hx-button-group-CWjWv-wS.js → hx-button-group-ChTQsnQj.js} +10 -10
  419. package/dist/shared/hx-button-group-ChTQsnQj.js.map +1 -0
  420. package/dist/shared/{hx-card-0hT3G5hi.js → hx-card-dIKdcMhr.js} +32 -32
  421. package/dist/shared/hx-card-dIKdcMhr.js.map +1 -0
  422. package/dist/shared/{hx-carousel-item-DgeYyYZJ.js → hx-carousel-item-Cm8a1nAi.js} +3 -3
  423. package/dist/shared/hx-carousel-item-Cm8a1nAi.js.map +1 -0
  424. package/dist/shared/{hx-checkbox-BvjO-O41.js → hx-checkbox-_WUiuTo9.js} +68 -71
  425. package/dist/shared/hx-checkbox-_WUiuTo9.js.map +1 -0
  426. package/dist/shared/{hx-checkbox-group-Z5VvWzcj.js → hx-checkbox-group-B-ci-dxp.js} +37 -31
  427. package/dist/shared/hx-checkbox-group-B-ci-dxp.js.map +1 -0
  428. package/dist/shared/hx-clinical-status-D6eaplvs.js +469 -0
  429. package/dist/shared/hx-clinical-status-D6eaplvs.js.map +1 -0
  430. package/dist/shared/{hx-code-snippet-DqzPkH4K.js → hx-code-snippet-CQsyvthi.js} +56 -47
  431. package/dist/shared/hx-code-snippet-CQsyvthi.js.map +1 -0
  432. package/dist/shared/{hx-color-picker-Da8z6AlQ.js → hx-color-picker-Dk2Myvaf.js} +153 -137
  433. package/dist/shared/hx-color-picker-Dk2Myvaf.js.map +1 -0
  434. package/dist/shared/{hx-combobox-CivfelTS.js → hx-combobox-CNAJXIxo.js} +10 -10
  435. package/dist/shared/hx-combobox-CNAJXIxo.js.map +1 -0
  436. package/dist/shared/{hx-container-DLUKnTi9.js → hx-container-7j16VuQE.js} +16 -16
  437. package/dist/shared/hx-container-7j16VuQE.js.map +1 -0
  438. package/dist/shared/{hx-copy-button--0dymSvw.js → hx-copy-button-B_ZHYO7_.js} +47 -40
  439. package/dist/shared/hx-copy-button-B_ZHYO7_.js.map +1 -0
  440. package/dist/shared/hx-counter-D_B7L9Pi.js +185 -0
  441. package/dist/shared/hx-counter-D_B7L9Pi.js.map +1 -0
  442. package/dist/shared/{hx-data-table-BWvd5NNx.js → hx-data-table-B1j4n4bm.js} +82 -46
  443. package/dist/shared/hx-data-table-B1j4n4bm.js.map +1 -0
  444. package/dist/shared/{hx-date-picker-6voxxxNE.js → hx-date-picker-R-0kWFwr.js} +102 -89
  445. package/dist/shared/hx-date-picker-R-0kWFwr.js.map +1 -0
  446. package/dist/shared/{hx-dialog-DkUSnVgw.js → hx-dialog-U5d3s0Ps.js} +98 -89
  447. package/dist/shared/hx-dialog-U5d3s0Ps.js.map +1 -0
  448. package/dist/shared/{hx-divider-DNNs4e8q.js → hx-divider-DdAN-_jB.js} +5 -5
  449. package/dist/shared/hx-divider-DdAN-_jB.js.map +1 -0
  450. package/dist/shared/{hx-drawer-CJcRZcns.js → hx-drawer-e0qeGxAD.js} +117 -77
  451. package/dist/shared/hx-drawer-e0qeGxAD.js.map +1 -0
  452. package/dist/shared/{hx-dropdown-Bo0KTM1A.js → hx-dropdown-DP_DNpEb.js} +56 -41
  453. package/dist/shared/hx-dropdown-DP_DNpEb.js.map +1 -0
  454. package/dist/shared/{hx-field-3MmzJ4kZ.js → hx-field-COM4KvMQ.js} +9 -9
  455. package/dist/shared/hx-field-COM4KvMQ.js.map +1 -0
  456. package/dist/shared/{hx-field-label-Bg-EWvqF.js → hx-field-label-BtZ9H9Yy.js} +8 -11
  457. package/dist/shared/hx-field-label-BtZ9H9Yy.js.map +1 -0
  458. package/dist/shared/{hx-file-upload-ByjAgfNy.js → hx-file-upload-DbECypLe.js} +78 -87
  459. package/dist/shared/hx-file-upload-DbECypLe.js.map +1 -0
  460. package/dist/shared/{hx-form-BpS6v3Iu.js → hx-form-fJE-FJQV.js} +36 -32
  461. package/dist/shared/{hx-form-BpS6v3Iu.js.map → hx-form-fJE-FJQV.js.map} +1 -1
  462. package/dist/shared/{hx-format-date-BdnWV2kX.js → hx-format-date-C030ThSm.js} +14 -12
  463. package/dist/shared/hx-format-date-C030ThSm.js.map +1 -0
  464. package/dist/shared/{hx-grid-gEjuF0cR.js → hx-grid-DE8KM5Gf.js} +7 -7
  465. package/dist/shared/hx-grid-DE8KM5Gf.js.map +1 -0
  466. package/dist/shared/{hx-icon-button-DzH_bRtC.js → hx-icon-button-Et9wq79n.js} +4 -4
  467. package/dist/shared/{hx-icon-button-DzH_bRtC.js.map → hx-icon-button-Et9wq79n.js.map} +1 -1
  468. package/dist/shared/{hx-icon-CP6OnLoM.js → hx-icon-dYvrzvsO.js} +7 -7
  469. package/dist/shared/hx-icon-dYvrzvsO.js.map +1 -0
  470. package/dist/shared/{hx-image-C6pGiI6c.js → hx-image-DUsEi-oN.js} +15 -15
  471. package/dist/shared/hx-image-DUsEi-oN.js.map +1 -0
  472. package/dist/shared/{hx-link-Tmk_YPvW.js → hx-link-Peg2LzOD.js} +43 -41
  473. package/dist/shared/hx-link-Peg2LzOD.js.map +1 -0
  474. package/dist/shared/{hx-menu-divider-DR4G_rqw.js → hx-menu-divider-puPmRAdN.js} +40 -20
  475. package/dist/shared/hx-menu-divider-puPmRAdN.js.map +1 -0
  476. package/dist/shared/{hx-meter-uXkTZq-W.js → hx-meter-CVs4A649.js} +13 -13
  477. package/dist/shared/hx-meter-CVs4A649.js.map +1 -0
  478. package/dist/shared/{hx-nav-3JsN2Oak.js → hx-nav-CiyqaW2I.js} +119 -107
  479. package/dist/shared/hx-nav-CiyqaW2I.js.map +1 -0
  480. package/dist/shared/{hx-nav-item-D3EJatzc.js → hx-nav-item-tM_6bolB.js} +181 -115
  481. package/dist/shared/hx-nav-item-tM_6bolB.js.map +1 -0
  482. package/dist/shared/{hx-number-input-CIpL2BEh.js → hx-number-input-BPgrlMLN.js} +34 -33
  483. package/dist/shared/hx-number-input-BPgrlMLN.js.map +1 -0
  484. package/dist/shared/{hx-overflow-menu-2kgOJ_ht.js → hx-overflow-menu-Bz02LPPk.js} +15 -11
  485. package/dist/shared/hx-overflow-menu-Bz02LPPk.js.map +1 -0
  486. package/dist/shared/{hx-pagination-Blt-fFqV.js → hx-pagination-Cb9UEWXz.js} +88 -72
  487. package/dist/shared/hx-pagination-Cb9UEWXz.js.map +1 -0
  488. package/dist/shared/hx-patient-banner-wk4qWmsH.js +297 -0
  489. package/dist/shared/hx-patient-banner-wk4qWmsH.js.map +1 -0
  490. package/dist/shared/hx-phi-field-DX9z3nu0.js +295 -0
  491. package/dist/shared/hx-phi-field-DX9z3nu0.js.map +1 -0
  492. package/dist/shared/{hx-popover-DxE67miP.js → hx-popover-D6kYQkt3.js} +96 -69
  493. package/dist/shared/hx-popover-D6kYQkt3.js.map +1 -0
  494. package/dist/shared/{hx-popup-Dg6n_PbY.js → hx-popup-RQb6HUXc.js} +2 -2
  495. package/dist/shared/hx-popup-RQb6HUXc.js.map +1 -0
  496. package/dist/shared/{hx-progress-bar-Dm_EHyng.js → hx-progress-bar-ByEmxq1V.js} +42 -40
  497. package/dist/shared/hx-progress-bar-ByEmxq1V.js.map +1 -0
  498. package/dist/shared/{hx-progress-ring-DpxBDD5d.js → hx-progress-ring-CtVnNRQx.js} +2 -2
  499. package/dist/shared/{hx-progress-ring-DpxBDD5d.js.map → hx-progress-ring-CtVnNRQx.js.map} +1 -1
  500. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -1
  501. package/dist/shared/{hx-radio-BywgVSEu.js → hx-radio-jgeW92SV.js} +28 -27
  502. package/dist/shared/hx-radio-jgeW92SV.js.map +1 -0
  503. package/dist/shared/{hx-rating-CUWBQ0fZ.js → hx-rating-g_iy-DW_.js} +92 -96
  504. package/dist/shared/hx-rating-g_iy-DW_.js.map +1 -0
  505. package/dist/shared/{hx-select-BwDwxk-M.js → hx-select-BWzxWZs_.js} +139 -100
  506. package/dist/shared/hx-select-BWzxWZs_.js.map +1 -0
  507. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  508. package/dist/shared/{hx-slider-D_0EKJyk.js → hx-slider-7Q-e0_pc.js} +27 -22
  509. package/dist/shared/hx-slider-7Q-e0_pc.js.map +1 -0
  510. package/dist/shared/{hx-spinner-DMn4SChS.js → hx-spinner-DEgrKsUo.js} +3 -2
  511. package/dist/shared/hx-spinner-DEgrKsUo.js.map +1 -0
  512. package/dist/shared/{hx-split-button-CypgLXw1.js → hx-split-button-BA7P_ly5.js} +40 -31
  513. package/dist/shared/hx-split-button-BA7P_ly5.js.map +1 -0
  514. package/dist/shared/{hx-split-panel-CV_Kr4EK.js → hx-split-panel-Bss54UN8.js} +16 -13
  515. package/dist/shared/hx-split-panel-Bss54UN8.js.map +1 -0
  516. package/dist/shared/{hx-stat-CHntLHJM.js → hx-stat-CmkCUI8v.js} +40 -32
  517. package/dist/shared/{hx-stat-CHntLHJM.js.map → hx-stat-CmkCUI8v.js.map} +1 -1
  518. package/dist/shared/{hx-status-indicator-C1BwEvUw.js → hx-status-indicator-Dl3Y34mc.js} +81 -40
  519. package/dist/shared/hx-status-indicator-Dl3Y34mc.js.map +1 -0
  520. package/dist/shared/{hx-step-BIVWSPxd.js → hx-step-CmNwfcJx.js} +49 -85
  521. package/dist/shared/hx-step-CmNwfcJx.js.map +1 -0
  522. package/dist/shared/{hx-structured-list-CMWllxGg.js → hx-structured-list-Db9rwLI_.js} +26 -23
  523. package/dist/shared/hx-structured-list-Db9rwLI_.js.map +1 -0
  524. package/dist/shared/hx-style-scope-BroUu83L.js +125 -0
  525. package/dist/shared/hx-style-scope-BroUu83L.js.map +1 -0
  526. package/dist/shared/{hx-switch-BgX8kuWt.js → hx-switch-C0Lp5RGy.js} +8 -5
  527. package/dist/shared/hx-switch-C0Lp5RGy.js.map +1 -0
  528. package/dist/shared/{hx-tab-panel-DhOq67jj.js → hx-tab-panel-Dnt8aA74.js} +161 -122
  529. package/dist/shared/hx-tab-panel-Dnt8aA74.js.map +1 -0
  530. package/dist/shared/{hx-tag-CzOTDcXI.js → hx-tag-K5fCjfqQ.js} +15 -14
  531. package/dist/shared/hx-tag-K5fCjfqQ.js.map +1 -0
  532. package/dist/shared/{hx-td-h6oeW6YC.js → hx-td-DZuILY3s.js} +43 -40
  533. package/dist/shared/hx-td-DZuILY3s.js.map +1 -0
  534. package/dist/shared/{hx-text-DTXjiviE.js → hx-text-DoEVOf47.js} +29 -29
  535. package/dist/shared/hx-text-DoEVOf47.js.map +1 -0
  536. package/dist/shared/hx-text-input-DTKWPVdy.js +576 -0
  537. package/dist/shared/hx-text-input-DTKWPVdy.js.map +1 -0
  538. package/dist/shared/{hx-textarea-BgX7rxyo.js → hx-textarea-BkSiU8oM.js} +15 -15
  539. package/dist/shared/hx-textarea-BkSiU8oM.js.map +1 -0
  540. package/dist/shared/hx-theme-Aag8QJvT.js +299 -0
  541. package/dist/shared/hx-theme-Aag8QJvT.js.map +1 -0
  542. package/dist/shared/{hx-time-picker-DmLu7WUC.js → hx-time-picker-BpCRsh_z.js} +54 -53
  543. package/dist/shared/hx-time-picker-BpCRsh_z.js.map +1 -0
  544. package/dist/shared/{hx-toggle-button-D1jpDvSA.js → hx-toggle-button-CPFqs3eQ.js} +8 -5
  545. package/dist/shared/hx-toggle-button-CPFqs3eQ.js.map +1 -0
  546. package/dist/shared/{hx-tooltip-kh7QFPKu.js → hx-tooltip-CrO4vzeX.js} +15 -10
  547. package/dist/shared/hx-tooltip-CrO4vzeX.js.map +1 -0
  548. package/dist/shared/{hx-tree-item-BP6UF_H1.js → hx-tree-item-C1PhX-HE.js} +163 -99
  549. package/dist/shared/hx-tree-item-C1PhX-HE.js.map +1 -0
  550. package/dist/shared/id-counter-JhvVCnjh.js +143 -0
  551. package/dist/shared/id-counter-JhvVCnjh.js.map +1 -0
  552. package/dist/shared/{toast-factory-DTy-qN8r.js → toast-factory-f184Gi70.js} +57 -45
  553. package/dist/shared/toast-factory-f184Gi70.js.map +1 -0
  554. package/dist/utilities/adoptedStylesheetRegistry.d.ts +47 -0
  555. package/dist/utilities/adoptedStylesheetRegistry.d.ts.map +1 -0
  556. package/dist/utilities/generateScopedSelectors.d.ts +30 -0
  557. package/dist/utilities/generateScopedSelectors.d.ts.map +1 -0
  558. package/dist/utilities/injectLightStyles.d.ts +37 -0
  559. package/dist/utilities/injectLightStyles.d.ts.map +1 -0
  560. package/dist/utilities/lightStyleRegistry.d.ts +41 -0
  561. package/dist/utilities/lightStyleRegistry.d.ts.map +1 -0
  562. package/dist/utilities/sheetManager.d.ts +62 -0
  563. package/dist/utilities/sheetManager.d.ts.map +1 -0
  564. package/dist/utils/contrast-checker.d.ts +86 -0
  565. package/dist/utils/contrast-checker.d.ts.map +1 -0
  566. package/dist/utils/token-merger.d.ts +24 -0
  567. package/dist/utils/token-merger.d.ts.map +1 -0
  568. package/fouc.css +37 -0
  569. package/package.json +26 -6
  570. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +0 -1
  571. package/dist/shared/hx-action-bar-D4bulGQP.js.map +0 -1
  572. package/dist/shared/hx-alert-CSxCF2rr.js.map +0 -1
  573. package/dist/shared/hx-avatar-Cun-O99h.js.map +0 -1
  574. package/dist/shared/hx-badge-CsFd2xtw.js.map +0 -1
  575. package/dist/shared/hx-banner-BTV-X2xF.js.map +0 -1
  576. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +0 -1
  577. package/dist/shared/hx-button-7k-KeCYU.js.map +0 -1
  578. package/dist/shared/hx-button-group-CWjWv-wS.js.map +0 -1
  579. package/dist/shared/hx-card-0hT3G5hi.js.map +0 -1
  580. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +0 -1
  581. package/dist/shared/hx-checkbox-BvjO-O41.js.map +0 -1
  582. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +0 -1
  583. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +0 -1
  584. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +0 -1
  585. package/dist/shared/hx-combobox-CivfelTS.js.map +0 -1
  586. package/dist/shared/hx-container-DLUKnTi9.js.map +0 -1
  587. package/dist/shared/hx-copy-button--0dymSvw.js.map +0 -1
  588. package/dist/shared/hx-counter-Duf00H7p.js +0 -147
  589. package/dist/shared/hx-counter-Duf00H7p.js.map +0 -1
  590. package/dist/shared/hx-data-table-BWvd5NNx.js.map +0 -1
  591. package/dist/shared/hx-date-picker-6voxxxNE.js.map +0 -1
  592. package/dist/shared/hx-dialog-DkUSnVgw.js.map +0 -1
  593. package/dist/shared/hx-divider-DNNs4e8q.js.map +0 -1
  594. package/dist/shared/hx-drawer-CJcRZcns.js.map +0 -1
  595. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +0 -1
  596. package/dist/shared/hx-field-3MmzJ4kZ.js.map +0 -1
  597. package/dist/shared/hx-field-label-Bg-EWvqF.js.map +0 -1
  598. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +0 -1
  599. package/dist/shared/hx-format-date-BdnWV2kX.js.map +0 -1
  600. package/dist/shared/hx-grid-gEjuF0cR.js.map +0 -1
  601. package/dist/shared/hx-icon-CP6OnLoM.js.map +0 -1
  602. package/dist/shared/hx-image-C6pGiI6c.js.map +0 -1
  603. package/dist/shared/hx-link-Tmk_YPvW.js.map +0 -1
  604. package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +0 -1
  605. package/dist/shared/hx-meter-uXkTZq-W.js.map +0 -1
  606. package/dist/shared/hx-nav-3JsN2Oak.js.map +0 -1
  607. package/dist/shared/hx-nav-item-D3EJatzc.js.map +0 -1
  608. package/dist/shared/hx-number-input-CIpL2BEh.js.map +0 -1
  609. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +0 -1
  610. package/dist/shared/hx-pagination-Blt-fFqV.js.map +0 -1
  611. package/dist/shared/hx-popover-DxE67miP.js.map +0 -1
  612. package/dist/shared/hx-popup-Dg6n_PbY.js.map +0 -1
  613. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +0 -1
  614. package/dist/shared/hx-radio-BywgVSEu.js.map +0 -1
  615. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +0 -1
  616. package/dist/shared/hx-select-BwDwxk-M.js.map +0 -1
  617. package/dist/shared/hx-slider-D_0EKJyk.js.map +0 -1
  618. package/dist/shared/hx-spinner-DMn4SChS.js.map +0 -1
  619. package/dist/shared/hx-split-button-CypgLXw1.js.map +0 -1
  620. package/dist/shared/hx-split-panel-CV_Kr4EK.js.map +0 -1
  621. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +0 -1
  622. package/dist/shared/hx-step-BIVWSPxd.js.map +0 -1
  623. package/dist/shared/hx-structured-list-CMWllxGg.js.map +0 -1
  624. package/dist/shared/hx-switch-BgX8kuWt.js.map +0 -1
  625. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +0 -1
  626. package/dist/shared/hx-tag-CzOTDcXI.js.map +0 -1
  627. package/dist/shared/hx-td-h6oeW6YC.js.map +0 -1
  628. package/dist/shared/hx-text-DTXjiviE.js.map +0 -1
  629. package/dist/shared/hx-text-input-CqEdDHMU.js +0 -461
  630. package/dist/shared/hx-text-input-CqEdDHMU.js.map +0 -1
  631. package/dist/shared/hx-textarea-BgX7rxyo.js.map +0 -1
  632. package/dist/shared/hx-theme-6GDoUG8j.js +0 -176
  633. package/dist/shared/hx-theme-6GDoUG8j.js.map +0 -1
  634. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +0 -1
  635. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +0 -1
  636. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +0 -1
  637. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +0 -1
  638. package/dist/shared/toast-factory-DTy-qN8r.js.map +0 -1
@@ -0,0 +1,297 @@
1
+ import { css as c, LitElement as v, nothing as p, html as b } from "lit";
2
+ import { property as a, state as f, query as h, customElement as u } from "lit/decorators.js";
3
+ import { tokenStyles as _ } from "@helixui/tokens/lit";
4
+ const m = c`
5
+ :host {
6
+ display: block;
7
+ width: 100%;
8
+
9
+ /* ─── Private token vars (3-tier cascade) ─── */
10
+ --_bg: var(--hx-patient-banner-bg, var(--hx-color-neutral-50, #f9fafb));
11
+ --_border-color: var(--hx-patient-banner-border-color, var(--hx-color-neutral-200, #e5e7eb));
12
+ --_padding: var(
13
+ --hx-patient-banner-padding,
14
+ var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem)
15
+ );
16
+ --_gap: var(--hx-patient-banner-gap, var(--hx-space-4, 1rem));
17
+ --_font-family: var(--hx-patient-banner-font-family, var(--hx-font-family-sans, sans-serif));
18
+ --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-500, #6b7280));
19
+ --_label-font-size: var(--hx-patient-banner-label-font-size, var(--hx-font-size-xs, 0.75rem));
20
+ --_value-color: var(--hx-patient-banner-value-color, var(--hx-color-neutral-900, #111827));
21
+ --_value-font-size: var(--hx-patient-banner-value-font-size, var(--hx-font-size-sm, 0.875rem));
22
+ --_photo-size: var(--hx-patient-banner-photo-size, var(--hx-space-10, 2.5rem));
23
+ --_photo-bg: var(--hx-patient-banner-photo-bg, var(--hx-color-neutral-200, #e5e7eb));
24
+ }
25
+
26
+ * {
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ /* ─── Banner Container ─── */
31
+
32
+ .banner {
33
+ display: flex;
34
+ align-items: center;
35
+ gap: var(--_gap);
36
+ padding: var(--_padding);
37
+ background-color: var(--_bg);
38
+ border-bottom: var(--hx-border-width-thin, 1px) solid var(--_border-color);
39
+ font-family: var(--_font-family);
40
+ width: 100%;
41
+ position: relative;
42
+ }
43
+
44
+ /* ─── Photo Area ─── */
45
+
46
+ .banner__photo-area {
47
+ flex-shrink: 0;
48
+ width: var(--_photo-size);
49
+ height: var(--_photo-size);
50
+ /* Minimum 44x44px touch target for interactive photo content. */
51
+ min-width: 44px;
52
+ min-height: 44px;
53
+ border-radius: var(--hx-border-radius-full, 9999px);
54
+ overflow: hidden;
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ background-color: var(--_photo-bg);
59
+ }
60
+
61
+ /* ─── Fields Grid ─── */
62
+
63
+ .banner__fields {
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ gap: var(--_gap);
67
+ flex: 1;
68
+ min-width: 0;
69
+ }
70
+
71
+ /* ─── Individual Field ─── */
72
+
73
+ .field {
74
+ display: flex;
75
+ flex-direction: column;
76
+ gap: var(--hx-space-1, 0.25rem);
77
+ min-width: 0;
78
+ }
79
+
80
+ .field__label {
81
+ font-size: var(--_label-font-size);
82
+ color: var(--_label-color);
83
+ font-weight: var(--hx-font-weight-medium, 500);
84
+ line-height: var(--hx-line-height-tight, 1.25);
85
+ white-space: nowrap;
86
+ }
87
+
88
+ .field__value {
89
+ font-size: var(--_value-font-size);
90
+ color: var(--_value-color);
91
+ font-weight: var(--hx-font-weight-normal, 400);
92
+ line-height: var(--hx-line-height-normal, 1.5);
93
+ display: flex;
94
+ align-items: center;
95
+ gap: var(--hx-space-1, 0.25rem);
96
+ }
97
+
98
+ /* ─── Identifier Rule Violation ─── */
99
+ /* Visual indicator when Joint Commission two-identifier rule is not met. */
100
+
101
+ :host([aria-invalid='true']) .banner {
102
+ border-bottom-color: var(--hx-color-error-400, #f87171);
103
+ background-color: var(--hx-color-error-50, #fef2f2);
104
+ /* Darken label color to maintain 4.5:1 contrast on error-50 background. */
105
+ --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-700, #374151));
106
+ }
107
+
108
+ :host([aria-invalid='true']) .banner::before {
109
+ content: '';
110
+ display: block;
111
+ position: absolute;
112
+ inset-inline-start: 0;
113
+ top: 0;
114
+ bottom: 0;
115
+ width: var(--hx-border-width-thick, 4px);
116
+ background-color: var(--hx-color-error-500, #ef4444);
117
+ border-radius: 0;
118
+ }
119
+
120
+ /* ─── Visually-hidden violation live region ─── */
121
+ /* Announces identifier rule violations to screen readers without visible text. */
122
+
123
+ .violation-message {
124
+ position: absolute;
125
+ width: 1px;
126
+ height: 1px;
127
+ padding: 0;
128
+ margin: -1px;
129
+ overflow: hidden;
130
+ clip: rect(0, 0, 0, 0);
131
+ white-space: nowrap;
132
+ border-width: 0;
133
+ }
134
+
135
+ /* ─── Motion reduction ─── */
136
+
137
+ @media (prefers-reduced-motion: reduce) {
138
+ * {
139
+ transition: none !important;
140
+ animation: none !important;
141
+ }
142
+ }
143
+ `;
144
+ var g = Object.defineProperty, x = Object.getOwnPropertyDescriptor, i = (e, l, n, o) => {
145
+ for (var r = o > 1 ? void 0 : o ? x(l, n) : l, s = e.length - 1, d; s >= 0; s--)
146
+ (d = e[s]) && (r = (o ? d(l, n, r) : d(r)) || r);
147
+ return o && r && g(l, n, r), r;
148
+ };
149
+ let t = class extends v {
150
+ constructor() {
151
+ super(...arguments), this.patientId = "", this.labelPatient = "Patient identification", this.labelName = "Patient name", this.labelMrn = "MRN", this.labelDob = "Date of birth", this.labelAllergies = "Allergies", this.labelCodeStatus = "Code status", this.enforceIdentifierRule = !0, this._identifierCount = 0, this._isViolating = !1;
152
+ }
153
+ // ─── Lifecycle ───
154
+ connectedCallback() {
155
+ super.connectedCallback(), this.setAttribute("role", "banner"), this.setAttribute("aria-label", this.labelPatient);
156
+ }
157
+ updated(e) {
158
+ super.updated(e), e.has("labelPatient") && this.setAttribute("aria-label", this.labelPatient), e.has("enforceIdentifierRule") && this._checkIdentifierRule();
159
+ }
160
+ // ─── Private Helpers ───
161
+ _countPopulatedIdentifiers() {
162
+ let e = 0;
163
+ const l = [this._nameSlot, this._mrnSlot, this._dobSlot];
164
+ for (const n of l)
165
+ n && n.assignedNodes({ flatten: !0 }).length > 0 && e++;
166
+ return e;
167
+ }
168
+ _checkIdentifierRule() {
169
+ const e = this._countPopulatedIdentifiers();
170
+ this._identifierCount = e, this.enforceIdentifierRule && e < 2 ? (this._isViolating = !0, this.setAttribute("aria-invalid", "true"), this.dispatchEvent(
171
+ new CustomEvent("hx-identifier-rule-violation", {
172
+ bubbles: !0,
173
+ composed: !0,
174
+ detail: {
175
+ populatedIdentifiers: e,
176
+ requiredIdentifiers: 2,
177
+ patientId: this.patientId
178
+ }
179
+ })
180
+ )) : (this._isViolating = !1, this.removeAttribute("aria-invalid"));
181
+ }
182
+ // ─── Event Handlers ───
183
+ _handleSlotChange() {
184
+ this._checkIdentifierRule();
185
+ }
186
+ // ─── Render ───
187
+ render() {
188
+ const e = this._isViolating ? `Warning: patient identification incomplete. ${this._identifierCount} of 2 required identifiers present.` : p;
189
+ return b`
190
+ <div part="banner" class="banner">
191
+ <div part="photo-area" class="banner__photo-area" aria-hidden="true">
192
+ <slot name="photo"></slot>
193
+ </div>
194
+
195
+ <div part="fields" class="banner__fields">
196
+ <div part="field" class="field">
197
+ <span part="field-label" class="field__label">${this.labelName}</span>
198
+ <div part="field-value" class="field__value">
199
+ <slot name="name" @slotchange=${this._handleSlotChange}></slot>
200
+ </div>
201
+ </div>
202
+
203
+ <div part="field" class="field">
204
+ <span part="field-label" class="field__label">${this.labelMrn}</span>
205
+ <div part="field-value" class="field__value">
206
+ <slot name="mrn" @slotchange=${this._handleSlotChange}></slot>
207
+ </div>
208
+ </div>
209
+
210
+ <div part="field" class="field">
211
+ <span part="field-label" class="field__label">${this.labelDob}</span>
212
+ <div part="field-value" class="field__value">
213
+ <slot name="dob" @slotchange=${this._handleSlotChange}></slot>
214
+ </div>
215
+ </div>
216
+
217
+ <div part="field" class="field">
218
+ <span part="field-label" class="field__label">${this.labelAllergies}</span>
219
+ <div part="field-value" class="field__value">
220
+ <slot name="allergies"></slot>
221
+ </div>
222
+ </div>
223
+
224
+ <div part="field" class="field">
225
+ <span part="field-label" class="field__label">${this.labelCodeStatus}</span>
226
+ <div part="field-value" class="field__value">
227
+ <slot name="code-status"></slot>
228
+ </div>
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ ${e !== p ? b`<div
234
+ part="violation-message"
235
+ class="violation-message"
236
+ role="alert"
237
+ aria-live="assertive"
238
+ >
239
+ ${e}
240
+ </div>` : p}
241
+ `;
242
+ }
243
+ };
244
+ t.styles = [_, m];
245
+ i([
246
+ a({ type: String, attribute: "patient-id" })
247
+ ], t.prototype, "patientId", 2);
248
+ i([
249
+ a({ type: String, attribute: "label-patient" })
250
+ ], t.prototype, "labelPatient", 2);
251
+ i([
252
+ a({ type: String, attribute: "label-name" })
253
+ ], t.prototype, "labelName", 2);
254
+ i([
255
+ a({ type: String, attribute: "label-mrn" })
256
+ ], t.prototype, "labelMrn", 2);
257
+ i([
258
+ a({ type: String, attribute: "label-dob" })
259
+ ], t.prototype, "labelDob", 2);
260
+ i([
261
+ a({ type: String, attribute: "label-allergies" })
262
+ ], t.prototype, "labelAllergies", 2);
263
+ i([
264
+ a({ type: String, attribute: "label-code-status" })
265
+ ], t.prototype, "labelCodeStatus", 2);
266
+ i([
267
+ a({
268
+ attribute: "enforce-identifier-rule",
269
+ reflect: !0,
270
+ converter: {
271
+ fromAttribute: (e) => e !== "false",
272
+ toAttribute: (e) => String(e)
273
+ }
274
+ })
275
+ ], t.prototype, "enforceIdentifierRule", 2);
276
+ i([
277
+ f()
278
+ ], t.prototype, "_identifierCount", 2);
279
+ i([
280
+ f()
281
+ ], t.prototype, "_isViolating", 2);
282
+ i([
283
+ h('slot[name="name"]')
284
+ ], t.prototype, "_nameSlot", 2);
285
+ i([
286
+ h('slot[name="mrn"]')
287
+ ], t.prototype, "_mrnSlot", 2);
288
+ i([
289
+ h('slot[name="dob"]')
290
+ ], t.prototype, "_dobSlot", 2);
291
+ t = i([
292
+ u("hx-patient-banner")
293
+ ], t);
294
+ export {
295
+ t as H
296
+ };
297
+ //# sourceMappingURL=hx-patient-banner-wk4qWmsH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-patient-banner-wk4qWmsH.js","sources":["../../src/components/hx-patient-banner/hx-patient-banner.styles.ts","../../src/components/hx-patient-banner/hx-patient-banner.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixPatientBannerStyles = css`\n :host {\n display: block;\n width: 100%;\n\n /* ─── Private token vars (3-tier cascade) ─── */\n --_bg: var(--hx-patient-banner-bg, var(--hx-color-neutral-50, #f9fafb));\n --_border-color: var(--hx-patient-banner-border-color, var(--hx-color-neutral-200, #e5e7eb));\n --_padding: var(\n --hx-patient-banner-padding,\n var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem)\n );\n --_gap: var(--hx-patient-banner-gap, var(--hx-space-4, 1rem));\n --_font-family: var(--hx-patient-banner-font-family, var(--hx-font-family-sans, sans-serif));\n --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-500, #6b7280));\n --_label-font-size: var(--hx-patient-banner-label-font-size, var(--hx-font-size-xs, 0.75rem));\n --_value-color: var(--hx-patient-banner-value-color, var(--hx-color-neutral-900, #111827));\n --_value-font-size: var(--hx-patient-banner-value-font-size, var(--hx-font-size-sm, 0.875rem));\n --_photo-size: var(--hx-patient-banner-photo-size, var(--hx-space-10, 2.5rem));\n --_photo-bg: var(--hx-patient-banner-photo-bg, var(--hx-color-neutral-200, #e5e7eb));\n }\n\n * {\n box-sizing: border-box;\n }\n\n /* ─── Banner Container ─── */\n\n .banner {\n display: flex;\n align-items: center;\n gap: var(--_gap);\n padding: var(--_padding);\n background-color: var(--_bg);\n border-bottom: var(--hx-border-width-thin, 1px) solid var(--_border-color);\n font-family: var(--_font-family);\n width: 100%;\n position: relative;\n }\n\n /* ─── Photo Area ─── */\n\n .banner__photo-area {\n flex-shrink: 0;\n width: var(--_photo-size);\n height: var(--_photo-size);\n /* Minimum 44x44px touch target for interactive photo content. */\n min-width: 44px;\n min-height: 44px;\n border-radius: var(--hx-border-radius-full, 9999px);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--_photo-bg);\n }\n\n /* ─── Fields Grid ─── */\n\n .banner__fields {\n display: flex;\n flex-wrap: wrap;\n gap: var(--_gap);\n flex: 1;\n min-width: 0;\n }\n\n /* ─── Individual Field ─── */\n\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--hx-space-1, 0.25rem);\n min-width: 0;\n }\n\n .field__label {\n font-size: var(--_label-font-size);\n color: var(--_label-color);\n font-weight: var(--hx-font-weight-medium, 500);\n line-height: var(--hx-line-height-tight, 1.25);\n white-space: nowrap;\n }\n\n .field__value {\n font-size: var(--_value-font-size);\n color: var(--_value-color);\n font-weight: var(--hx-font-weight-normal, 400);\n line-height: var(--hx-line-height-normal, 1.5);\n display: flex;\n align-items: center;\n gap: var(--hx-space-1, 0.25rem);\n }\n\n /* ─── Identifier Rule Violation ─── */\n /* Visual indicator when Joint Commission two-identifier rule is not met. */\n\n :host([aria-invalid='true']) .banner {\n border-bottom-color: var(--hx-color-error-400, #f87171);\n background-color: var(--hx-color-error-50, #fef2f2);\n /* Darken label color to maintain 4.5:1 contrast on error-50 background. */\n --_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-700, #374151));\n }\n\n :host([aria-invalid='true']) .banner::before {\n content: '';\n display: block;\n position: absolute;\n inset-inline-start: 0;\n top: 0;\n bottom: 0;\n width: var(--hx-border-width-thick, 4px);\n background-color: var(--hx-color-error-500, #ef4444);\n border-radius: 0;\n }\n\n /* ─── Visually-hidden violation live region ─── */\n /* Announces identifier rule violations to screen readers without visible text. */\n\n .violation-message {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n\n /* ─── Motion reduction ─── */\n\n @media (prefers-reduced-motion: reduce) {\n * {\n transition: none !important;\n animation: none !important;\n }\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixPatientBannerStyles } from './hx-patient-banner.styles.js';\n\n/**\n * Patient identification banner implementing Joint Commission NPSG.01.01.01 two-identifier rule.\n * Renders as a landmark region containing named slots for patient identification fields.\n * Integrates with hx-phi-field for HIPAA-compliant display of masked identifiers.\n * Note: hx-phi-access events fired by slotted hx-phi-field elements bubble through this\n * component via composed: true — no re-dispatch is required.\n *\n * @summary Patient identification banner with two-identifier rule enforcement.\n *\n * @tag hx-patient-banner\n *\n * @slot photo - Optional patient photo slot.\n * @slot name - Patient name field content.\n * @slot mrn - Medical record number field content. Use hx-phi-field for HIPAA compliance.\n * @slot dob - Date of birth field content. Use hx-phi-field for HIPAA compliance.\n * @slot allergies - Allergy status/flag content.\n * @slot code-status - Code status content.\n *\n * @csspart banner - The outer banner container.\n * @csspart photo-area - The photo slot wrapper.\n * @csspart fields - The fields grid container.\n * @csspart field - An individual field container (applied to all field wrappers).\n * @csspart field-label - The field label element.\n * @csspart field-value - The field value slot wrapper.\n * @csspart violation-message - The visually-hidden identifier rule violation status message.\n *\n * @fires {CustomEvent<PatientIdentifierRuleViolationDetail>} hx-identifier-rule-violation - Fired when fewer than 2 identifier slots are populated and enforce-identifier-rule is true.\n *\n * @cssprop [--hx-patient-banner-bg=var(--hx-color-neutral-50,#f9fafb)] - Banner background color.\n * @cssprop [--hx-patient-banner-border-color=var(--hx-color-neutral-200,#e5e7eb)] - Banner border color.\n * @cssprop [--hx-patient-banner-padding=var(--hx-space-3,0.75rem) var(--hx-space-4,1rem)] - Banner padding.\n * @cssprop [--hx-patient-banner-gap=var(--hx-space-4,1rem)] - Gap between banner fields.\n * @cssprop [--hx-patient-banner-font-family=var(--hx-font-family-sans,sans-serif)] - Banner font family.\n * @cssprop [--hx-patient-banner-label-color=var(--hx-color-neutral-500,#6b7280)] - Field label color.\n * @cssprop [--hx-patient-banner-label-font-size=var(--hx-font-size-xs,0.75rem)] - Field label font size.\n * @cssprop [--hx-patient-banner-value-color=var(--hx-color-neutral-900,#111827)] - Field value color.\n * @cssprop [--hx-patient-banner-value-font-size=var(--hx-font-size-sm,0.875rem)] - Field value font size.\n * @cssprop [--hx-patient-banner-photo-size=var(--hx-space-10,2.5rem)] - Photo area size.\n * @cssprop [--hx-patient-banner-photo-bg=var(--hx-color-neutral-200,#e5e7eb)] - Photo area background color when empty.\n */\n@customElement('hx-patient-banner')\nexport class HelixPatientBanner extends LitElement {\n static override styles = [tokenStyles, helixPatientBannerStyles];\n\n // ─── Public Properties ───\n\n /**\n * Optional patient ID used as context in identifier rule violation events.\n * @attr patient-id\n */\n @property({ type: String, attribute: 'patient-id' })\n patientId: string = '';\n\n /**\n * Accessible label for the banner landmark region.\n * @attr label-patient\n */\n @property({ type: String, attribute: 'label-patient' })\n labelPatient: string = 'Patient identification';\n\n /**\n * Visible label for the name field.\n * @attr label-name\n */\n @property({ type: String, attribute: 'label-name' })\n labelName: string = 'Patient name';\n\n /**\n * Visible label for the MRN field.\n * @attr label-mrn\n */\n @property({ type: String, attribute: 'label-mrn' })\n labelMrn: string = 'MRN';\n\n /**\n * Visible label for the date of birth field.\n * @attr label-dob\n */\n @property({ type: String, attribute: 'label-dob' })\n labelDob: string = 'Date of birth';\n\n /**\n * Visible label for the allergies field.\n * @attr label-allergies\n */\n @property({ type: String, attribute: 'label-allergies' })\n labelAllergies: string = 'Allergies';\n\n /**\n * Visible label for the code status field.\n * @attr label-code-status\n */\n @property({ type: String, attribute: 'label-code-status' })\n labelCodeStatus: string = 'Code status';\n\n /**\n * Whether to enforce the Joint Commission NPSG.01.01.01 two-identifier rule.\n * When true, fires hx-identifier-rule-violation if fewer than 2 identifier\n * slots (name, mrn, dob) are populated.\n * @attr enforce-identifier-rule\n */\n @property({\n attribute: 'enforce-identifier-rule',\n reflect: true,\n converter: {\n fromAttribute: (value: string | null) => value !== 'false',\n toAttribute: (value: boolean) => String(value),\n },\n })\n enforceIdentifierRule: boolean = true;\n\n // ─── Internal State ───\n\n /** @internal */\n @state() private _identifierCount: number = 0;\n\n /** @internal */\n @state() private _isViolating: boolean = false;\n\n // ─── Slot Queries ───\n\n /** @internal */\n @query('slot[name=\"name\"]') private _nameSlot!: HTMLSlotElement;\n\n /** @internal */\n @query('slot[name=\"mrn\"]') private _mrnSlot!: HTMLSlotElement;\n\n /** @internal */\n @query('slot[name=\"dob\"]') private _dobSlot!: HTMLSlotElement;\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('role', 'banner');\n this.setAttribute('aria-label', this.labelPatient);\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has('labelPatient')) {\n this.setAttribute('aria-label', this.labelPatient);\n }\n\n if (changedProperties.has('enforceIdentifierRule')) {\n this._checkIdentifierRule();\n }\n }\n\n // ─── Private Helpers ───\n\n private _countPopulatedIdentifiers(): number {\n let count = 0;\n\n const slots = [this._nameSlot, this._mrnSlot, this._dobSlot];\n for (const slot of slots) {\n if (slot && slot.assignedNodes({ flatten: true }).length > 0) {\n count++;\n }\n }\n\n return count;\n }\n\n private _checkIdentifierRule(): void {\n const count = this._countPopulatedIdentifiers();\n this._identifierCount = count;\n\n if (this.enforceIdentifierRule && count < 2) {\n this._isViolating = true;\n this.setAttribute('aria-invalid', 'true');\n this.dispatchEvent(\n new CustomEvent<PatientIdentifierRuleViolationDetail>('hx-identifier-rule-violation', {\n bubbles: true,\n composed: true,\n detail: {\n populatedIdentifiers: count,\n requiredIdentifiers: 2,\n patientId: this.patientId,\n },\n }),\n );\n } else {\n this._isViolating = false;\n this.removeAttribute('aria-invalid');\n }\n }\n\n // ─── Event Handlers ───\n\n private _handleSlotChange(): void {\n this._checkIdentifierRule();\n }\n\n // ─── Render ───\n\n override render() {\n const violationMessage = this._isViolating\n ? `Warning: patient identification incomplete. ${this._identifierCount} of 2 required identifiers present.`\n : nothing;\n\n return html`\n <div part=\"banner\" class=\"banner\">\n <div part=\"photo-area\" class=\"banner__photo-area\" aria-hidden=\"true\">\n <slot name=\"photo\"></slot>\n </div>\n\n <div part=\"fields\" class=\"banner__fields\">\n <div part=\"field\" class=\"field\">\n <span part=\"field-label\" class=\"field__label\">${this.labelName}</span>\n <div part=\"field-value\" class=\"field__value\">\n <slot name=\"name\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n\n <div part=\"field\" class=\"field\">\n <span part=\"field-label\" class=\"field__label\">${this.labelMrn}</span>\n <div part=\"field-value\" class=\"field__value\">\n <slot name=\"mrn\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n\n <div part=\"field\" class=\"field\">\n <span part=\"field-label\" class=\"field__label\">${this.labelDob}</span>\n <div part=\"field-value\" class=\"field__value\">\n <slot name=\"dob\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n\n <div part=\"field\" class=\"field\">\n <span part=\"field-label\" class=\"field__label\">${this.labelAllergies}</span>\n <div part=\"field-value\" class=\"field__value\">\n <slot name=\"allergies\"></slot>\n </div>\n </div>\n\n <div part=\"field\" class=\"field\">\n <span part=\"field-label\" class=\"field__label\">${this.labelCodeStatus}</span>\n <div part=\"field-value\" class=\"field__value\">\n <slot name=\"code-status\"></slot>\n </div>\n </div>\n </div>\n </div>\n\n ${violationMessage !== nothing\n ? html`<div\n part=\"violation-message\"\n class=\"violation-message\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n ${violationMessage}\n </div>`\n : nothing}\n `;\n }\n}\n\nexport interface PatientIdentifierRuleViolationDetail {\n populatedIdentifiers: number;\n requiredIdentifiers: number;\n patientId: string;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-patient-banner': HelixPatientBanner;\n }\n}\n"],"names":["helixPatientBannerStyles","css","HelixPatientBanner","LitElement","changedProperties","count","slots","slot","violationMessage","nothing","html","tokenStyles","__decorateClass","property","value","state","query","customElement"],"mappings":"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"}
@@ -0,0 +1,295 @@
1
+ import { css as c, LitElement as p, html as h } from "lit";
2
+ import { property as n, state as u, customElement as f } from "lit/decorators.js";
3
+ import { tokenStyles as m } from "@helixui/tokens/lit";
4
+ const _ = c`
5
+ :host {
6
+ display: inline-flex;
7
+ }
8
+
9
+ /* ─── Container ─── */
10
+
11
+ .phi-field {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ gap: var(--hx-space-2, 0.5rem);
15
+ font-family: var(--hx-phi-field-font-family, var(--hx-font-family-mono, monospace));
16
+ }
17
+
18
+ /* ─── Value ─── */
19
+
20
+ .phi-field__value--masked {
21
+ user-select: none;
22
+ -webkit-user-select: none;
23
+ color: var(--hx-phi-field-masked-color, var(--hx-color-neutral-500, #6b7280));
24
+ letter-spacing: 0.1em;
25
+ }
26
+
27
+ .phi-field__value--revealed {
28
+ color: var(--hx-phi-field-value-color, var(--hx-color-neutral-900, #111827));
29
+ }
30
+
31
+ /* ─── Screen Reader Status ─── */
32
+
33
+ .phi-field__status {
34
+ position: absolute;
35
+ width: 1px;
36
+ height: 1px;
37
+ overflow: hidden;
38
+ clip: rect(0, 0, 0, 0);
39
+ white-space: nowrap;
40
+ border: 0;
41
+ padding: 0;
42
+ margin: -1px;
43
+ }
44
+
45
+ /* ─── Toggle Button ─── */
46
+
47
+ .phi-field__toggle {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ background: none;
51
+ border: none;
52
+ padding: var(--hx-space-1, 0.25rem);
53
+ color: var(--hx-phi-field-toggle-color, var(--hx-color-primary-500, #2563eb));
54
+ cursor: pointer;
55
+ line-height: 1;
56
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
57
+ }
58
+
59
+ .phi-field__toggle:focus-visible {
60
+ outline: var(--hx-focus-ring-width, 2px) solid
61
+ var(
62
+ --hx-phi-field-focus-ring-color,
63
+ var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb))
64
+ );
65
+ outline-offset: var(--hx-focus-ring-offset, 2px);
66
+ }
67
+
68
+ .phi-field__toggle:hover {
69
+ opacity: var(--hx-opacity-90, 0.9);
70
+ }
71
+
72
+ .phi-field__toggle:active {
73
+ opacity: var(--hx-opacity-50, 0.5);
74
+ }
75
+
76
+ .phi-field__toggle svg {
77
+ width: 1em;
78
+ height: 1em;
79
+ pointer-events: none;
80
+ }
81
+
82
+ /* ─── Disabled State ─── */
83
+
84
+ :host([disabled]) {
85
+ opacity: var(--hx-phi-field-disabled-opacity, var(--hx-opacity-50, 0.5));
86
+ pointer-events: none;
87
+ cursor: not-allowed;
88
+ }
89
+
90
+ .phi-field--disabled .phi-field__toggle {
91
+ cursor: not-allowed;
92
+ }
93
+
94
+ /* ─── Reduced Motion ─── */
95
+
96
+ @media (prefers-reduced-motion: reduce) {
97
+ .phi-field__toggle {
98
+ transition: none;
99
+ }
100
+ }
101
+ `;
102
+ var b = Object.defineProperty, v = Object.getOwnPropertyDescriptor, s = (e, t, l, r) => {
103
+ for (var i = r > 1 ? void 0 : r ? v(t, l) : t, o = e.length - 1, d; o >= 0; o--)
104
+ (d = e[o]) && (i = (r ? d(t, l, i) : d(i)) || i);
105
+ return r && i && b(t, l, i), i;
106
+ };
107
+ let a = class extends p {
108
+ constructor() {
109
+ super(...arguments), this.data = "", this.fieldType = "ssn", this.fieldId = "", this.clipboardTimeout = 3e4, this.label = "", this.disabled = !1, this._masked = !0, this._clipboardTimer = null;
110
+ }
111
+ // ─── Lifecycle ───
112
+ connectedCallback() {
113
+ super.connectedCallback(), this.setAttribute("autocomplete", "off");
114
+ }
115
+ disconnectedCallback() {
116
+ super.disconnectedCallback(), this._cancelClipboardTimer();
117
+ }
118
+ // ─── Private Helpers ───
119
+ /** @internal */
120
+ _cancelClipboardTimer() {
121
+ this._clipboardTimer !== null && (clearTimeout(this._clipboardTimer), this._clipboardTimer = null);
122
+ }
123
+ /** @internal */
124
+ _scheduleClipboardClear() {
125
+ this._cancelClipboardTimer(), this._clipboardTimer = setTimeout(() => {
126
+ this._clearClipboard();
127
+ }, this.clipboardTimeout);
128
+ }
129
+ /** @internal */
130
+ _clearClipboard() {
131
+ var e;
132
+ this._clipboardTimer = null, typeof navigator < "u" && navigator.clipboard && ((e = navigator == null ? void 0 : navigator.clipboard) == null || e.writeText("").catch(() => {
133
+ })), this.dispatchEvent(
134
+ new CustomEvent("hx-phi-access", {
135
+ bubbles: !0,
136
+ composed: !0,
137
+ detail: {
138
+ fieldId: this.fieldId || this.id || "",
139
+ action: "clipboard-clear",
140
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
141
+ fieldType: this.fieldType
142
+ }
143
+ })
144
+ ), this._masked = !0;
145
+ }
146
+ /** @internal */
147
+ _getMaskedValue() {
148
+ if (!this.data) return "";
149
+ switch (this.fieldType) {
150
+ case "ssn": {
151
+ const e = this.data.match(/^(\d{3})(-?)(\d{2})(-?)(\d{4})$/);
152
+ return e ? `***${e[2]}**${e[4]}${e[5]}` : this.data.slice(0, -4).replace(/\d/g, "*") + this.data.slice(-4);
153
+ }
154
+ case "mrn": {
155
+ const e = this.data.split(""), t = [];
156
+ e.forEach((o, d) => {
157
+ /[a-zA-Z0-9]/.test(o) && t.push(d);
158
+ });
159
+ const l = Math.min(4, t.length), r = t.length - l, i = new Set(t.slice(0, r));
160
+ return e.map((o, d) => i.has(d) ? "*" : o).join("");
161
+ }
162
+ case "dob":
163
+ return this.data.replace(/\d/g, "*");
164
+ case "insurance": {
165
+ const e = this.data.match(/^(\d{4})(-?)(\d{4})(-?)(\d{4})(-?)(\d{4})$/);
166
+ return e ? `****${e[2]}****${e[4]}****${e[6]}${e[7]}` : this.data.slice(0, -4).replace(/[a-zA-Z0-9]/g, "*") + this.data.slice(-4);
167
+ }
168
+ default:
169
+ return this.fieldType;
170
+ }
171
+ }
172
+ // ─── Event Handlers ───
173
+ /** @internal */
174
+ _handleToggle() {
175
+ this.disabled || (this.dispatchEvent(
176
+ new CustomEvent("hx-phi-access", {
177
+ bubbles: !0,
178
+ composed: !0,
179
+ detail: {
180
+ fieldId: this.fieldId || this.id || "",
181
+ action: this._masked ? "reveal" : "hide",
182
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
183
+ fieldType: this.fieldType
184
+ }
185
+ })
186
+ ), this._masked ? (this._masked = !1, this._scheduleClipboardClear()) : (this._cancelClipboardTimer(), this._masked = !0));
187
+ }
188
+ /** @internal */
189
+ _handleCopy(e) {
190
+ this._masked && e.preventDefault();
191
+ }
192
+ /** @internal */
193
+ _handlePaste(e) {
194
+ this._masked && e.preventDefault();
195
+ }
196
+ // ─── Render Helpers ───
197
+ /** @internal */
198
+ _renderEyeIcon() {
199
+ return h`
200
+ <svg
201
+ xmlns="http://www.w3.org/2000/svg"
202
+ viewBox="0 0 24 24"
203
+ fill="none"
204
+ stroke="currentColor"
205
+ stroke-width="2"
206
+ stroke-linecap="round"
207
+ stroke-linejoin="round"
208
+ aria-hidden="true"
209
+ >
210
+ <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" />
211
+ <circle cx="12" cy="12" r="3" />
212
+ </svg>
213
+ `;
214
+ }
215
+ /** @internal */
216
+ _renderEyeOffIcon() {
217
+ return h`
218
+ <svg
219
+ xmlns="http://www.w3.org/2000/svg"
220
+ viewBox="0 0 24 24"
221
+ fill="none"
222
+ stroke="currentColor"
223
+ stroke-width="2"
224
+ stroke-linecap="round"
225
+ stroke-linejoin="round"
226
+ aria-hidden="true"
227
+ >
228
+ <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94" />
229
+ <path d="M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19" />
230
+ <line x1="1" y1="1" x2="23" y2="23" />
231
+ </svg>
232
+ `;
233
+ }
234
+ // ─── Render ───
235
+ render() {
236
+ const e = this.label || "Protected health information", t = `${e} is masked`, l = `${e} is revealed`, r = `Reveal ${e.toLowerCase()}`, i = `Hide ${e.toLowerCase()}`;
237
+ return h`
238
+ <div
239
+ part="container"
240
+ class="phi-field${this.disabled ? " phi-field--disabled" : ""}"
241
+ @copy=${this._handleCopy}
242
+ @paste=${this._handlePaste}
243
+ >
244
+ ${this._masked ? h`<span part="value" class="phi-field__value phi-field__value--masked"
245
+ >${this._getMaskedValue()}</span
246
+ >` : h`<span part="value" class="phi-field__value phi-field__value--revealed"
247
+ >${this.data}</span
248
+ >`}
249
+ <span role="status" aria-live="polite" aria-atomic="true" class="phi-field__status">
250
+ ${this._masked ? t : l}
251
+ </span>
252
+ <button
253
+ part="toggle"
254
+ class="phi-field__toggle"
255
+ type="button"
256
+ ?disabled=${this.disabled}
257
+ aria-label=${this._masked ? r : i}
258
+ aria-pressed=${String(!this._masked)}
259
+ @click=${this._handleToggle}
260
+ >
261
+ ${this._masked ? this._renderEyeIcon() : this._renderEyeOffIcon()}
262
+ </button>
263
+ </div>
264
+ `;
265
+ }
266
+ };
267
+ a.styles = [m, _];
268
+ s([
269
+ n({ type: String })
270
+ ], a.prototype, "data", 2);
271
+ s([
272
+ n({ type: String, reflect: !0, attribute: "field-type" })
273
+ ], a.prototype, "fieldType", 2);
274
+ s([
275
+ n({ type: String, attribute: "field-id" })
276
+ ], a.prototype, "fieldId", 2);
277
+ s([
278
+ n({ type: Number, attribute: "clipboard-timeout" })
279
+ ], a.prototype, "clipboardTimeout", 2);
280
+ s([
281
+ n({ type: String })
282
+ ], a.prototype, "label", 2);
283
+ s([
284
+ n({ type: Boolean, reflect: !0 })
285
+ ], a.prototype, "disabled", 2);
286
+ s([
287
+ u()
288
+ ], a.prototype, "_masked", 2);
289
+ a = s([
290
+ f("hx-phi-field")
291
+ ], a);
292
+ export {
293
+ a as H
294
+ };
295
+ //# sourceMappingURL=hx-phi-field-DX9z3nu0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-phi-field-DX9z3nu0.js","sources":["../../src/components/hx-phi-field/hx-phi-field.styles.ts","../../src/components/hx-phi-field/hx-phi-field.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixPhiFieldStyles = css`\n :host {\n display: inline-flex;\n }\n\n /* ─── Container ─── */\n\n .phi-field {\n display: inline-flex;\n align-items: center;\n gap: var(--hx-space-2, 0.5rem);\n font-family: var(--hx-phi-field-font-family, var(--hx-font-family-mono, monospace));\n }\n\n /* ─── Value ─── */\n\n .phi-field__value--masked {\n user-select: none;\n -webkit-user-select: none;\n color: var(--hx-phi-field-masked-color, var(--hx-color-neutral-500, #6b7280));\n letter-spacing: 0.1em;\n }\n\n .phi-field__value--revealed {\n color: var(--hx-phi-field-value-color, var(--hx-color-neutral-900, #111827));\n }\n\n /* ─── Screen Reader Status ─── */\n\n .phi-field__status {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n padding: 0;\n margin: -1px;\n }\n\n /* ─── Toggle Button ─── */\n\n .phi-field__toggle {\n display: inline-flex;\n align-items: center;\n background: none;\n border: none;\n padding: var(--hx-space-1, 0.25rem);\n color: var(--hx-phi-field-toggle-color, var(--hx-color-primary-500, #2563eb));\n cursor: pointer;\n line-height: 1;\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n }\n\n .phi-field__toggle:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(\n --hx-phi-field-focus-ring-color,\n var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb))\n );\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .phi-field__toggle:hover {\n opacity: var(--hx-opacity-90, 0.9);\n }\n\n .phi-field__toggle:active {\n opacity: var(--hx-opacity-50, 0.5);\n }\n\n .phi-field__toggle svg {\n width: 1em;\n height: 1em;\n pointer-events: none;\n }\n\n /* ─── Disabled State ─── */\n\n :host([disabled]) {\n opacity: var(--hx-phi-field-disabled-opacity, var(--hx-opacity-50, 0.5));\n pointer-events: none;\n cursor: not-allowed;\n }\n\n .phi-field--disabled .phi-field__toggle {\n cursor: not-allowed;\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .phi-field__toggle {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, type TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixPhiFieldStyles } from './hx-phi-field.styles.js';\n\n/**\n * HIPAA-compliant field component for rendering masked Protected Health Information (PHI).\n * PHI is masked by default and only rendered to the DOM when explicitly revealed. Access\n * events are fired on reveal, hide, and clipboard auto-clear for audit trail purposes.\n *\n * @summary HIPAA-compliant field for rendering masked Protected Health Information.\n *\n * @tag hx-phi-field\n *\n * @csspart container - The outer wrapper element.\n * @csspart value - The value display span (masked or revealed).\n * @csspart toggle - The reveal/hide toggle button.\n *\n * @fires {CustomEvent<PhiAccessEventDetail>} hx-phi-access - Fired on reveal, hide, and clipboard-clear actions.\n *\n * @cssprop [--hx-phi-field-font-family=var(--hx-font-family-mono,monospace)] - Font family for the masked value.\n * @cssprop [--hx-phi-field-value-color=var(--hx-color-neutral-900,#111827)] - Value text color.\n * @cssprop [--hx-phi-field-masked-color=var(--hx-color-neutral-500,#6b7280)] - Masked value text color.\n * @cssprop [--hx-phi-field-toggle-color=var(--hx-color-primary-500,#2563eb)] - Toggle button color.\n * @cssprop [--hx-phi-field-focus-ring-color=var(--hx-focus-ring-color,var(--hx-color-primary-500,#2563eb))] - Focus ring color.\n * @cssprop [--hx-phi-field-disabled-opacity=var(--hx-opacity-50,0.5)] - Opacity applied when the field is disabled.\n */\n@customElement('hx-phi-field')\nexport class HelixPhiField extends LitElement {\n static override styles = [tokenStyles, helixPhiFieldStyles];\n\n // ─── Public Properties ───\n\n /**\n * The Protected Health Information value to display or mask.\n * @attr data\n */\n @property({ type: String })\n data: string = '';\n\n /**\n * The type of PHI field. Controls the masking pattern applied.\n * @attr field-type\n */\n @property({ type: String, reflect: true, attribute: 'field-type' })\n fieldType: 'ssn' | 'mrn' | 'dob' | 'insurance' = 'ssn';\n\n /**\n * Identifier used in audit events. Falls back to the element's id attribute.\n * @attr field-id\n */\n @property({ type: String, attribute: 'field-id' })\n fieldId: string = '';\n\n /**\n * Milliseconds after clipboard write before the clipboard is automatically cleared.\n * Defaults to 30000 (30 seconds).\n * @attr clipboard-timeout\n */\n @property({ type: Number, attribute: 'clipboard-timeout' })\n clipboardTimeout: number = 30000;\n\n /**\n * Accessible label describing the PHI field. Used as a prefix in screen reader\n * announcements (e.g., \"Social Security Number is masked\").\n * @attr label\n */\n @property({ type: String })\n label: string = '';\n\n /**\n * When set, disables all interaction with the field and prevents reveal.\n * @attr disabled\n * @reflect\n */\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n // ─── Internal State ───\n\n /** @internal */\n @state() private _masked = true;\n\n /** @internal */\n private _clipboardTimer: ReturnType<typeof setTimeout> | null = null;\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Enforce HIPAA compliance: prevent browser autofill on the host element\n this.setAttribute('autocomplete', 'off');\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._cancelClipboardTimer();\n }\n\n // ─── Private Helpers ───\n\n /** @internal */\n private _cancelClipboardTimer(): void {\n if (this._clipboardTimer !== null) {\n clearTimeout(this._clipboardTimer);\n this._clipboardTimer = null;\n }\n }\n\n /** @internal */\n private _scheduleClipboardClear(): void {\n this._cancelClipboardTimer();\n this._clipboardTimer = setTimeout(() => {\n this._clearClipboard();\n }, this.clipboardTimeout);\n }\n\n /** @internal */\n private _clearClipboard(): void {\n this._clipboardTimer = null;\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n navigator?.clipboard?.writeText('').catch(() => {\n // Clipboard clear failure is non-fatal — silently ignore\n });\n }\n this.dispatchEvent(\n new CustomEvent<PhiAccessEventDetail>('hx-phi-access', {\n bubbles: true,\n composed: true,\n detail: {\n fieldId: this.fieldId || this.id || '',\n action: 'clipboard-clear',\n timestamp: new Date().toISOString(),\n fieldType: this.fieldType,\n },\n }),\n );\n this._masked = true;\n }\n\n /** @internal */\n private _getMaskedValue(): string {\n if (!this.data) return '';\n\n switch (this.fieldType) {\n case 'ssn': {\n // Format: xxx-xx-xxxx → ***-**-xxxx (show last 4 digits)\n // Match the separator-delimited pattern first\n const ssnMatch = this.data.match(/^(\\d{3})(-?)(\\d{2})(-?)(\\d{4})$/);\n if (ssnMatch) {\n return `***${ssnMatch[2]}**${ssnMatch[4]}${ssnMatch[5]}`;\n }\n // Fallback: mask all but last 4 chars\n return this.data.slice(0, -4).replace(/\\d/g, '*') + this.data.slice(-4);\n }\n\n case 'mrn': {\n // Mask all but last 4 alphanumeric characters, preserve separators\n const chars = this.data.split('');\n const alphanumericIndices: number[] = [];\n chars.forEach((ch, i) => {\n if (/[a-zA-Z0-9]/.test(ch)) {\n alphanumericIndices.push(i);\n }\n });\n const revealCount = Math.min(4, alphanumericIndices.length);\n const maskUntilIdx = alphanumericIndices.length - revealCount;\n const indicesToMask = new Set(alphanumericIndices.slice(0, maskUntilIdx));\n return chars.map((ch, i) => (indicesToMask.has(i) ? '*' : ch)).join('');\n }\n\n case 'dob': {\n // Replace ALL digits with *, preserve separators\n return this.data.replace(/\\d/g, '*');\n }\n\n case 'insurance': {\n // Format: xxxx-xxxx-xxxx-xxxx → ****-****-****-xxxx (show last 4 digits)\n const insMatch = this.data.match(/^(\\d{4})(-?)(\\d{4})(-?)(\\d{4})(-?)(\\d{4})$/);\n if (insMatch) {\n return `****${insMatch[2]}****${insMatch[4]}****${insMatch[6]}${insMatch[7]}`;\n }\n // Fallback: mask all but last 4 chars\n return this.data.slice(0, -4).replace(/[a-zA-Z0-9]/g, '*') + this.data.slice(-4);\n }\n\n default: {\n // Exhaustive check — fieldType is typed, but guard defensively\n const _exhaustive: never = this.fieldType;\n return _exhaustive;\n }\n }\n }\n\n // ─── Event Handlers ───\n\n /** @internal */\n private _handleToggle(): void {\n if (this.disabled) return;\n\n // Dispatch BEFORE toggling state so action reflects the upcoming state\n this.dispatchEvent(\n new CustomEvent<PhiAccessEventDetail>('hx-phi-access', {\n bubbles: true,\n composed: true,\n detail: {\n fieldId: this.fieldId || this.id || '',\n action: this._masked ? 'reveal' : 'hide',\n timestamp: new Date().toISOString(),\n fieldType: this.fieldType,\n },\n }),\n );\n\n if (this._masked) {\n // Revealing: start clipboard clear timer\n this._masked = false;\n this._scheduleClipboardClear();\n } else {\n // Hiding: cancel any pending clipboard clear\n this._cancelClipboardTimer();\n this._masked = true;\n }\n }\n\n /** @internal */\n private _handleCopy(e: ClipboardEvent): void {\n if (this._masked) {\n e.preventDefault();\n }\n }\n\n /** @internal */\n private _handlePaste(e: ClipboardEvent): void {\n if (this._masked) {\n e.preventDefault();\n }\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderEyeIcon(): TemplateResult {\n return html`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n `;\n }\n\n /** @internal */\n private _renderEyeOffIcon(): TemplateResult {\n return html`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\" />\n <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n `;\n }\n\n // ─── Render ───\n\n override render() {\n const fieldLabel = this.label || 'Protected health information';\n const maskedLabel = `${fieldLabel} is masked`;\n const revealedLabel = `${fieldLabel} is revealed`;\n const revealActionLabel = `Reveal ${fieldLabel.toLowerCase()}`;\n const hideActionLabel = `Hide ${fieldLabel.toLowerCase()}`;\n\n return html`\n <div\n part=\"container\"\n class=\"phi-field${this.disabled ? ' phi-field--disabled' : ''}\"\n @copy=${this._handleCopy}\n @paste=${this._handlePaste}\n >\n ${this._masked\n ? html`<span part=\"value\" class=\"phi-field__value phi-field__value--masked\"\n >${this._getMaskedValue()}</span\n >`\n : html`<span part=\"value\" class=\"phi-field__value phi-field__value--revealed\"\n >${this.data}</span\n >`}\n <span role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"phi-field__status\">\n ${this._masked ? maskedLabel : revealedLabel}\n </span>\n <button\n part=\"toggle\"\n class=\"phi-field__toggle\"\n type=\"button\"\n ?disabled=${this.disabled}\n aria-label=${this._masked ? revealActionLabel : hideActionLabel}\n aria-pressed=${String(!this._masked)}\n @click=${this._handleToggle}\n >\n ${this._masked ? this._renderEyeIcon() : this._renderEyeOffIcon()}\n </button>\n </div>\n `;\n }\n}\n\nexport interface PhiAccessEventDetail {\n fieldId: string;\n /** The action that triggered the audit event. */\n action: 'reveal' | 'hide' | 'clipboard-clear';\n timestamp: string;\n fieldType: 'ssn' | 'mrn' | 'dob' | 'insurance';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-phi-field': HelixPhiField;\n }\n}\n"],"names":["helixPhiFieldStyles","css","HelixPhiField","LitElement","_a","ssnMatch","chars","alphanumericIndices","ch","i","revealCount","maskUntilIdx","indicesToMask","insMatch","html","fieldLabel","maskedLabel","revealedLabel","revealActionLabel","hideActionLabel","tokenStyles","__decorateClass","property","state","customElement"],"mappings":"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"}