@persona/design-system 0.7.2 → 0.8.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 (548) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/Accordion.d.mts +1 -1
  3. package/dist/AccordionItem.d.mts +1 -1
  4. package/dist/{Action-Cyo6KCsS.d.mts → Action-B-AiHknZ.d.mts} +3 -3
  5. package/dist/Action.d.mts +1 -1
  6. package/dist/AdvancedFilterRuleRow.d.mts +2 -2
  7. package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
  8. package/dist/ArrayValueControl.d.mts +1 -1
  9. package/dist/Attribute.d.mts +3 -3
  10. package/dist/{Badge-BD0Ut46g.mjs → Badge-COqUjFQu.mjs} +2 -2
  11. package/dist/{Badge-BD0Ut46g.mjs.map → Badge-COqUjFQu.mjs.map} +1 -1
  12. package/dist/BooleanValueControl.d.mts +1 -1
  13. package/dist/{Breadcrumb-CYXkrKXl.d.mts → Breadcrumb-DRFY46ZW.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-CP7eUYUy.d.mts → Breadcrumbs-DUSbT1I7.d.mts} +2 -2
  16. package/dist/{Breadcrumbs-CrXfUK1V.mjs → Breadcrumbs-DXS7rU7_.mjs} +5 -5
  17. package/dist/{Breadcrumbs-CrXfUK1V.mjs.map → Breadcrumbs-DXS7rU7_.mjs.map} +1 -1
  18. package/dist/Breadcrumbs.d.mts +1 -1
  19. package/dist/{Button-Dhiund3f.d.mts → Button-xZ6DC5XC.d.mts} +4 -4
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/{Calendar-CMeIZ0BO.d.mts → Calendar-dPmo2dkj.d.mts} +1 -1
  22. package/dist/Calendar.d.mts +1 -1
  23. package/dist/CalendarBase.d.mts +1 -1
  24. package/dist/{Card-DCYB_mtR.d.mts → Card-CUeM8Lh8.d.mts} +3 -3
  25. package/dist/Card.d.mts +1 -1
  26. package/dist/{CardV2-M3o4BELp.mjs → CardV2-D9p7D7jX.mjs} +9 -7
  27. package/dist/{CardV2-M3o4BELp.mjs.map → CardV2-D9p7D7jX.mjs.map} +1 -1
  28. package/dist/{Checkbox-AjL7ucoR.mjs → Checkbox-DQynkc_I.mjs} +3 -3
  29. package/dist/{Checkbox-AjL7ucoR.mjs.map → Checkbox-DQynkc_I.mjs.map} +1 -1
  30. package/dist/{Checkbox-fWj7GkBl.d.mts → Checkbox-DoJpxPEz.d.mts} +1 -1
  31. package/dist/Checkbox.d.mts +1 -1
  32. package/dist/CheckboxGroupField.d.mts +1 -1
  33. package/dist/ChoicesValueControl.d.mts +1 -1
  34. package/dist/{Combobox-C2b9u955.mjs → Combobox-C_kCY3P3.mjs} +23 -10
  35. package/dist/Combobox-C_kCY3P3.mjs.map +1 -0
  36. package/dist/{Combobox-CC-Osr57.d.mts → Combobox-D7hyf-jA.d.mts} +3 -3
  37. package/dist/Combobox.d.mts +2 -2
  38. package/dist/{ComboboxBase-Evo0FRxP.d.mts → ComboboxBase-BMCY6O7Y.d.mts} +8 -5
  39. package/dist/ComboboxBase.d.mts +1 -1
  40. package/dist/{ComboboxMultiSelect-CvAc0FT3.d.mts → ComboboxMultiSelect-L0KYMkmm.d.mts} +2 -2
  41. package/dist/ComboboxMultiSelect.d.mts +1 -1
  42. package/dist/{ComboboxSingleSelect-CBm7x0oh.d.mts → ComboboxSingleSelect-v5oNrJ7M.d.mts} +4 -4
  43. package/dist/ComboboxSingleSelect.d.mts +1 -1
  44. package/dist/{CompactBar-D_2qMK4y.d.mts → CompactBar-DjFaUAsN.d.mts} +4 -4
  45. package/dist/CompactBar.d.mts +1 -1
  46. package/dist/{ConfigFormGroup-Cz7GeTYd.mjs → ConfigFormGroup-DLOZOuLf.mjs} +2 -2
  47. package/dist/{ConfigFormGroup-Cz7GeTYd.mjs.map → ConfigFormGroup-DLOZOuLf.mjs.map} +1 -1
  48. package/dist/{ControlBar-B7j9sOr9.d.mts → ControlBar-Cegjxa6-.d.mts} +7 -2
  49. package/dist/ControlBar.d.mts +1 -1
  50. package/dist/DataTable.d.mts +4 -3
  51. package/dist/{DateField-BamAk9_w.d.mts → DateField-Dk5ykLdr.d.mts} +2 -2
  52. package/dist/DateField.d.mts +1 -1
  53. package/dist/{DatePicker-IgiUI3Wj.mjs → DatePicker-C7z1yodK.mjs} +77 -42
  54. package/dist/DatePicker-C7z1yodK.mjs.map +1 -0
  55. package/dist/{DatePicker-C3xNSkPG.d.mts → DatePicker-Dtvv0V45.d.mts} +2 -2
  56. package/dist/DatePicker.d.mts +1 -1
  57. package/dist/{DateRangePicker-C4QKMo2a.d.mts → DateRangePicker-HPYsa4wC.d.mts} +3 -3
  58. package/dist/DateRangePicker.d.mts +1 -1
  59. package/dist/DateRangeValueControl.d.mts +5 -3
  60. package/dist/DateValueControl.d.mts +8 -5
  61. package/dist/{DropdownButton-BWiXLMfD.mjs → DropdownButton-CQrFHOIW.mjs} +3 -3
  62. package/dist/{DropdownButton-BWiXLMfD.mjs.map → DropdownButton-CQrFHOIW.mjs.map} +1 -1
  63. package/dist/DropdownButton.d.mts +2 -2
  64. package/dist/{DropdownMenu-DL5ye-0m.d.mts → DropdownMenu-D1qvgGTZ.d.mts} +2 -2
  65. package/dist/{DropdownMenu-CuKSNxc9.mjs → DropdownMenu-rm9Nnxn7.mjs} +7 -2
  66. package/dist/DropdownMenu-rm9Nnxn7.mjs.map +1 -0
  67. package/dist/DropdownMenu.d.mts +1 -1
  68. package/dist/{ErrorProps-BA0-m_Wp.d.mts → ErrorProps-B8-Mqf1W.d.mts} +1 -1
  69. package/dist/ErrorProps.d.mts +1 -1
  70. package/dist/{FieldRegistry-bKxrF1gC.d.mts → FieldRegistry-0LmSQ-jc.d.mts} +2 -2
  71. package/dist/FieldRegistry.d.mts +1 -1
  72. package/dist/{FilterBar-DhlBLWxw.d.mts → FilterBar-BMM4Swbt.d.mts} +11 -4
  73. package/dist/FilterBar.d.mts +1 -1
  74. package/dist/FilterPickerMenu.d.mts +2 -2
  75. package/dist/FilterPill.d.mts +1 -1
  76. package/dist/FilterPopover.d.mts +1 -1
  77. package/dist/FloatValueControl.d.mts +1 -1
  78. package/dist/{FormControl-DnfZTli_.mjs → FormControl-DXrxoJLl.mjs} +3 -3
  79. package/dist/{FormControl-DnfZTli_.mjs.map → FormControl-DXrxoJLl.mjs.map} +1 -1
  80. package/dist/{FormControl-D5xyPkST.d.mts → FormControl-Dg8doZq2.d.mts} +2 -2
  81. package/dist/FormControl.d.mts +1 -1
  82. package/dist/FormControlLabel.d.mts +1 -1
  83. package/dist/{FormField-BJZUj6jg.d.mts → FormField-BeLigf9j.d.mts} +2 -2
  84. package/dist/{FormField-74TPV8-8.mjs → FormField-Crp3F-hv.mjs} +16 -16
  85. package/dist/{FormField-74TPV8-8.mjs.map → FormField-Crp3F-hv.mjs.map} +1 -1
  86. package/dist/FormField.d.mts +1 -1
  87. package/dist/{Grid-DOyYYsvk.mjs → Grid-eMLuyRzV.mjs} +1 -1
  88. package/dist/{Grid-DOyYYsvk.mjs.map → Grid-eMLuyRzV.mjs.map} +1 -1
  89. package/dist/{Header-BqEKkEp5.d.mts → Header-DxJ6TfPw.d.mts} +1 -1
  90. package/dist/Header.d.mts +1 -1
  91. package/dist/{HelperTooltip-mOVSuEB8.d.mts → HelperTooltip-DcyrpEZI.d.mts} +2 -2
  92. package/dist/HelperTooltip.d.mts +1 -1
  93. package/dist/{HoverCopyableField-CN3gl0ny.mjs → HoverCopyableField-12bBuG-d.mjs} +3 -3
  94. package/dist/{HoverCopyableField-CN3gl0ny.mjs.map → HoverCopyableField-12bBuG-d.mjs.map} +1 -1
  95. package/dist/{IconButton-CjPFhpVG.d.mts → IconButton-BUMMN-gH.d.mts} +2 -2
  96. package/dist/{IconButton-CqTPMhjV.mjs → IconButton-CCLMYWVN.mjs} +1 -1
  97. package/dist/{IconButton-CqTPMhjV.mjs.map → IconButton-CCLMYWVN.mjs.map} +1 -1
  98. package/dist/IconButton.d.mts +1 -1
  99. package/dist/ImageTile.d.mts +1 -1
  100. package/dist/InlineCombobox.d.mts +1 -1
  101. package/dist/InlineInput.d.mts +1 -1
  102. package/dist/{Input-CZ_6KWDN.d.mts → Input-2N2e5JCf.d.mts} +3 -3
  103. package/dist/{Input-C_3QwAAt.mjs → Input-Cl4o41k4.mjs} +7 -3
  104. package/dist/Input-Cl4o41k4.mjs.map +1 -0
  105. package/dist/Input.d.mts +1 -1
  106. package/dist/{InputProps-lag6BM5h.d.mts → InputProps-TWzig3QO.d.mts} +2 -2
  107. package/dist/InputProps.d.mts +1 -1
  108. package/dist/IntegerValueControl.d.mts +1 -1
  109. package/dist/Link-I9Bklen-.mjs +79 -0
  110. package/dist/Link-I9Bklen-.mjs.map +1 -0
  111. package/dist/Link.d.mts +1 -1
  112. package/dist/{ListBox-nYAdYVQx.d.mts → ListBox-BcoXOt73.d.mts} +3 -3
  113. package/dist/{ListBox-D4j4LCT3.mjs → ListBox-sqeLBiKS.mjs} +33 -16
  114. package/dist/ListBox-sqeLBiKS.mjs.map +1 -0
  115. package/dist/ListBox.d.mts +1 -1
  116. package/dist/ListBoxField.d.mts +2 -2
  117. package/dist/{LoadingShimmer-Dizk2sZu.mjs → LoadingShimmer-dRSkdlqD.mjs} +13 -8
  118. package/dist/LoadingShimmer-dRSkdlqD.mjs.map +1 -0
  119. package/dist/LoadingShimmer.d.mts +1 -1
  120. package/dist/{LogicRow-k4ZPtjN0.d.mts → LogicRow-DXywXdYt.d.mts} +3 -3
  121. package/dist/LogicRow.d.mts +1 -1
  122. package/dist/MaskedInput.d.mts +1 -1
  123. package/dist/{Menu-Bu7-KBhp.d.mts → Menu-BekLwm8w.d.mts} +3 -3
  124. package/dist/{Menu-Cd6oxjAe.mjs → Menu-CwlI7BMN.mjs} +1 -1
  125. package/dist/{Menu-Cd6oxjAe.mjs.map → Menu-CwlI7BMN.mjs.map} +1 -1
  126. package/dist/Menu.d.mts +1 -1
  127. package/dist/{Modal-BN0K8QXi.mjs → Modal-CMiFcXC9.mjs} +6 -4
  128. package/dist/Modal-CMiFcXC9.mjs.map +1 -0
  129. package/dist/{Modal-Dwq-QBw_.d.mts → Modal-ymxlGYKt.d.mts} +2 -2
  130. package/dist/Modal.d.mts +1 -1
  131. package/dist/{PageHeader-BTtm3hRQ.mjs → PageHeader-D_0p7UK_.mjs} +2 -2
  132. package/dist/{PageHeader-BTtm3hRQ.mjs.map → PageHeader-D_0p7UK_.mjs.map} +1 -1
  133. package/dist/PageHeader.d.mts +1 -1
  134. package/dist/{PageSelector-CeGC84N1.d.mts → PageSelector-Bxulu6vU.d.mts} +3 -3
  135. package/dist/PageSelector.d.mts +1 -1
  136. package/dist/{Pagination-CPd4mSnw.mjs → Pagination-Co9CfyFQ.mjs} +5 -5
  137. package/dist/{Pagination-CPd4mSnw.mjs.map → Pagination-Co9CfyFQ.mjs.map} +1 -1
  138. package/dist/{Pagination-H-CcXrCD.d.mts → Pagination-Dg-4O7F7.d.mts} +2 -2
  139. package/dist/Pagination.d.mts +1 -1
  140. package/dist/{Pii-Dz4woKd8.mjs → Pii-JGV9gP95.mjs} +2 -2
  141. package/dist/{Pii-Dz4woKd8.mjs.map → Pii-JGV9gP95.mjs.map} +1 -1
  142. package/dist/{PillShell-BQC-k7Rl.d.mts → PillShell-BA7KK1zS.d.mts} +2 -2
  143. package/dist/PillShell.d.mts +1 -1
  144. package/dist/{Popover-opVa9Xhc.mjs → Popover-ZAj03lws.mjs} +15 -2
  145. package/dist/Popover-ZAj03lws.mjs.map +1 -0
  146. package/dist/{ProgressIndicator-3A4Aqci6.mjs → ProgressIndicator-CQg08vuA.mjs} +3 -3
  147. package/dist/ProgressIndicator-CQg08vuA.mjs.map +1 -0
  148. package/dist/{ProgressIndicator-DbOLOaxJ.d.mts → ProgressIndicator-D85HQGSx.d.mts} +1 -1
  149. package/dist/ProgressIndicator.d.mts +1 -1
  150. package/dist/{PseudoClassProps-CHtBNv8B.d.mts → PseudoClassProps-BHs8TX_3.d.mts} +1 -1
  151. package/dist/PseudoClassProps.d.mts +1 -1
  152. package/dist/{Radio-Cxt89w8s.mjs → Radio-CYV290JI.mjs} +2 -2
  153. package/dist/{Radio-Cxt89w8s.mjs.map → Radio-CYV290JI.mjs.map} +1 -1
  154. package/dist/{RadioGroup-BjrfVPZQ.d.mts → RadioGroup-Cq3KV1TN.d.mts} +1 -1
  155. package/dist/{RadioGroup-B6Cg1kdm.mjs → RadioGroup-lWMMtu9V.mjs} +2 -2
  156. package/dist/{RadioGroup-B6Cg1kdm.mjs.map → RadioGroup-lWMMtu9V.mjs.map} +1 -1
  157. package/dist/RadioGroup.d.mts +1 -1
  158. package/dist/{RangeCalendar-CPnLaM-J.d.mts → RangeCalendar-Mh7h74Tp.d.mts} +2 -2
  159. package/dist/RangeCalendar.d.mts +1 -1
  160. package/dist/RangeCalendarPresets.d.mts +1 -1
  161. package/dist/{RouterContext-CbvHIl4K.d.mts → RouterContext-B3IU1jb0.d.mts} +2 -2
  162. package/dist/RouterContext.d.mts +1 -1
  163. package/dist/{RouterLink-v9AG9fYa.d.mts → RouterLink-CwAqTLC2.d.mts} +2 -2
  164. package/dist/RouterLink.d.mts +1 -1
  165. package/dist/RuleEditorFields.d.mts +2 -2
  166. package/dist/RulesPill.d.mts +1 -1
  167. package/dist/{SearchInput-CIjwmT8R.d.mts → SearchInput-BGyUUcoz.d.mts} +2 -2
  168. package/dist/SearchInput.d.mts +1 -1
  169. package/dist/SectionHeading.d.mts +1 -1
  170. package/dist/{SegmentedControl-BcwfLuHA.mjs → SegmentedControl-BEbIcV3g.mjs} +3 -3
  171. package/dist/SegmentedControl-BEbIcV3g.mjs.map +1 -0
  172. package/dist/{SegmentedControl-Crr_aHAs.d.mts → SegmentedControl-DgDabSgr.d.mts} +1 -1
  173. package/dist/SegmentedControl.d.mts +1 -1
  174. package/dist/{Select-CJQeuCiF.d.mts → Select-wqTtGyga.d.mts} +3 -3
  175. package/dist/{Select-BstCz8P1.mjs → Select-yC2t_gZb.mjs} +10 -8
  176. package/dist/Select-yC2t_gZb.mjs.map +1 -0
  177. package/dist/Select.d.mts +1 -1
  178. package/dist/{Spinner-DplDSBqf.mjs → Spinner-BlAg8_OX.mjs} +1 -1
  179. package/dist/{Spinner-DplDSBqf.mjs.map → Spinner-BlAg8_OX.mjs.map} +1 -1
  180. package/dist/{Stack-ChsImaEY.mjs → Stack-Bkn0TUDe.mjs} +1 -1
  181. package/dist/{Stack-ChsImaEY.mjs.map → Stack-Bkn0TUDe.mjs.map} +1 -1
  182. package/dist/{Stack-RVptVTVi.d.mts → Stack-CYqjBXe8.d.mts} +1 -1
  183. package/dist/Stack.d.mts +1 -1
  184. package/dist/StatusIndicator-DT2zNbkp.mjs +315 -0
  185. package/dist/StatusIndicator-DT2zNbkp.mjs.map +1 -0
  186. package/dist/{Sticker-C3Eb13OQ.mjs → Sticker-BLbgJxcH.mjs} +5 -8
  187. package/dist/Sticker-BLbgJxcH.mjs.map +1 -0
  188. package/dist/{Sticker-BVX38LKi.d.mts → Sticker-BmyKaxwx.d.mts} +4 -4
  189. package/dist/Sticker.d.mts +1 -1
  190. package/dist/StringValueControl.d.mts +1 -1
  191. package/dist/Tab.d.mts +1 -1
  192. package/dist/{TabBar-BepWbJHz.mjs → TabBar-Bj84q1Mr.mjs} +4 -7
  193. package/dist/{TabBar-BepWbJHz.mjs.map → TabBar-Bj84q1Mr.mjs.map} +1 -1
  194. package/dist/{Table-DFiSWroB.d.mts → Table-DhdHUQ8V.d.mts} +1 -1
  195. package/dist/{Table-B1gRr2XT.mjs → Table-WqNfjasd.mjs} +22 -3
  196. package/dist/Table-WqNfjasd.mjs.map +1 -0
  197. package/dist/Table.d.mts +1 -1
  198. package/dist/{TableBody-Di9JYHDN.d.mts → TableBody-qoSvQDds.d.mts} +1 -1
  199. package/dist/TableBody.d.mts +1 -1
  200. package/dist/{TableBox-DAQ3Plqx.mjs → TableBox-obl64W5Y.mjs} +22 -17
  201. package/dist/TableBox-obl64W5Y.mjs.map +1 -0
  202. package/dist/TableBox.d.mts +2 -2
  203. package/dist/{TableBoxCell-D6h1X5ph.d.mts → TableBoxCell-DzYMx4Ju.d.mts} +6 -6
  204. package/dist/TableBoxCell.d.mts +1 -1
  205. package/dist/TableBoxField.d.mts +3 -3
  206. package/dist/{TableBoxRow-C6l6J4mq.d.mts → TableBoxRow-B4rFCvWK.d.mts} +3 -3
  207. package/dist/TableBoxRow.d.mts +1 -1
  208. package/dist/{TableBoxRowActions-CsLN1b1J.d.mts → TableBoxRowActions-qMKcVuTL.d.mts} +2 -2
  209. package/dist/TableBoxRowActions.d.mts +1 -1
  210. package/dist/{TableCell-WSDXw79Q.d.mts → TableCell-CGPQRc5g.d.mts} +2 -2
  211. package/dist/TableCell.d.mts +1 -1
  212. package/dist/{TableControls-BxuPCUQS.mjs → TableControls-RS_ozBsI.mjs} +207 -66
  213. package/dist/TableControls-RS_ozBsI.mjs.map +1 -0
  214. package/dist/{TableControls-cswMgBAr.d.mts → TableControls-WP78qtET.d.mts} +4 -3
  215. package/dist/TableControls.d.mts +1 -1
  216. package/dist/{TableControlsContext-Cbh8wear.d.mts → TableControlsContext-DZIZSyfX.d.mts} +2 -2
  217. package/dist/TableControlsContext.d.mts +1 -1
  218. package/dist/{TableHead-CkL1fEg2.d.mts → TableHead-36j-_oyn.d.mts} +1 -1
  219. package/dist/TableHead.d.mts +1 -1
  220. package/dist/{TableHeaderCell-K9Ry6YqO.d.mts → TableHeaderCell-C7gp9j1X.d.mts} +1 -1
  221. package/dist/TableHeaderCell.d.mts +1 -1
  222. package/dist/{TableLayout-CYRGIFEl.d.mts → TableLayout-CQqIV0vj.d.mts} +1 -1
  223. package/dist/TableLayout.d.mts +1 -1
  224. package/dist/{TableRow-DMHlo1eg.d.mts → TableRow-BJZM8I8i.d.mts} +2 -2
  225. package/dist/TableRow.d.mts +1 -1
  226. package/dist/TableTH.d.mts +1 -1
  227. package/dist/{TableViewConfigurationDropdown-BRbOcVNc.d.mts → TableViewConfigurationDropdown-Dwy_9FBz.d.mts} +2 -2
  228. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  229. package/dist/{TechnicalSticker-_LtE-PRY.mjs → TechnicalSticker-CL0zkOAj.mjs} +1 -1
  230. package/dist/{TechnicalSticker-_LtE-PRY.mjs.map → TechnicalSticker-CL0zkOAj.mjs.map} +1 -1
  231. package/dist/{Text-B69gp3X_.d.mts → Text-DbtTa83E.d.mts} +3 -3
  232. package/dist/Text.d.mts +1 -1
  233. package/dist/{TextArea-Cjsdl07-.d.mts → TextArea-CbxF6u7z.d.mts} +2 -2
  234. package/dist/{TextArea-CcxltuBh.mjs → TextArea-CfZr5Sk4.mjs} +2 -2
  235. package/dist/{TextArea-CcxltuBh.mjs.map → TextArea-CfZr5Sk4.mjs.map} +1 -1
  236. package/dist/TextArea.d.mts +1 -1
  237. package/dist/{TextUnderlineTooltip-DDzKLCeX.d.mts → TextUnderlineTooltip-BgLQuK38.d.mts} +2 -2
  238. package/dist/TextUnderlineTooltip.d.mts +1 -1
  239. package/dist/Tile.d.mts +1 -1
  240. package/dist/Toast.d.mts +1 -1
  241. package/dist/{Toggle-B5sSdb_q.d.mts → Toggle-BYMLrPXk.d.mts} +1 -1
  242. package/dist/{Toggle-DWbJOwf3.mjs → Toggle-D4ZaUcVt.mjs} +9 -4
  243. package/dist/Toggle-D4ZaUcVt.mjs.map +1 -0
  244. package/dist/Toggle.d.mts +1 -1
  245. package/dist/{Tooltip-x1pFf-Mj.d.mts → Tooltip-4pshzB_i.d.mts} +2 -2
  246. package/dist/Tooltip.d.mts +1 -1
  247. package/dist/{TruncatedText-BE8FuEQm.d.mts → TruncatedText-O7hE3w0O.d.mts} +1 -1
  248. package/dist/VersionHistory.d.mts +23 -0
  249. package/dist/VersionHistoryItem-CIcEgl0K.d.mts +54 -0
  250. package/dist/VersionHistoryItem.d.mts +2 -0
  251. package/dist/WizardModal.d.mts +2 -2
  252. package/dist/{accordionTitleTypography-BYhjSN9t.d.mts → accordionTitleTypography-CNB1w3kn.d.mts} +2 -2
  253. package/dist/accordionTitleTypography.d.mts +1 -1
  254. package/dist/assertNever.d.mts +5 -0
  255. package/dist/{codec-BcgsGCHE.d.mts → codec-BXVBsB8Y.d.mts} +2 -2
  256. package/dist/codec.d.mts +1 -1
  257. package/dist/{color-LH7zKfKo.d.mts → color-3UO63ocQ.d.mts} +9 -4
  258. package/dist/components/Accordion/index.d.mts +1 -1
  259. package/dist/components/Accordion/index.mjs +1 -1
  260. package/dist/components/Attribute/index.mjs +2 -2
  261. package/dist/components/Badge/index.mjs +1 -1
  262. package/dist/components/Banner/index.mjs +1 -1
  263. package/dist/components/BottomPanel/index.mjs +5 -3
  264. package/dist/components/BottomPanel/index.mjs.map +1 -1
  265. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  266. package/dist/components/Breadcrumbs/index.mjs +1 -1
  267. package/dist/components/Button/index.d.mts +2 -2
  268. package/dist/components/Button/index.mjs +1 -1
  269. package/dist/components/ButtonGroup/index.mjs +2 -2
  270. package/dist/components/Card/index.d.mts +2 -2
  271. package/dist/components/CardV2/index.d.mts +1 -1
  272. package/dist/components/CardV2/index.mjs +1 -1
  273. package/dist/components/Checkbox/index.d.mts +1 -1
  274. package/dist/components/Checkbox/index.mjs +1 -1
  275. package/dist/components/CodeHighlight/index.mjs +3 -1
  276. package/dist/components/CodeHighlight/index.mjs.map +1 -1
  277. package/dist/components/Combobox/index.d.mts +2 -2
  278. package/dist/components/Combobox/index.mjs +1 -1
  279. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  280. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  281. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  282. package/dist/components/DataTable/index.mjs +27 -16
  283. package/dist/components/DataTable/index.mjs.map +1 -1
  284. package/dist/components/DataTable/types.d.mts +2 -2
  285. package/dist/components/DatePicker/index.d.mts +5 -5
  286. package/dist/components/DatePicker/index.mjs +1 -1
  287. package/dist/components/DropdownButton/index.mjs +1 -1
  288. package/dist/components/DropdownMenu/index.d.mts +1 -1
  289. package/dist/components/DropdownMenu/index.mjs +1 -1
  290. package/dist/components/FloatingPanel/index.mjs +10 -7
  291. package/dist/components/FloatingPanel/index.mjs.map +1 -1
  292. package/dist/components/FormControl/index.d.mts +2 -2
  293. package/dist/components/FormControl/index.mjs +2 -2
  294. package/dist/components/FormField/index.d.mts +1 -1
  295. package/dist/components/FormField/index.mjs +1 -1
  296. package/dist/components/Grid/index.mjs +1 -1
  297. package/dist/components/HoverCopyableField/index.mjs +1 -1
  298. package/dist/components/ImageTile/index.mjs +13 -9
  299. package/dist/components/ImageTile/index.mjs.map +1 -1
  300. package/dist/components/Input/index.d.mts +1 -1
  301. package/dist/components/Input/index.mjs +1 -1
  302. package/dist/components/Link/index.mjs +1 -78
  303. package/dist/components/ListBox/index.d.mts +3 -3
  304. package/dist/components/ListBox/index.mjs +1 -1
  305. package/dist/components/LoadingShimmer/index.mjs +1 -1
  306. package/dist/components/MaskedInput/index.mjs +1 -1
  307. package/dist/components/Menu/index.d.mts +1 -1
  308. package/dist/components/Menu/index.mjs +1 -1
  309. package/dist/components/Modal/index.d.mts +1 -1
  310. package/dist/components/Modal/index.mjs +1 -1
  311. package/dist/components/PageHeader/index.mjs +1 -1
  312. package/dist/components/Pagination/index.d.mts +3 -3
  313. package/dist/components/Pagination/index.mjs +1 -1
  314. package/dist/components/Pii/index.mjs +1 -1
  315. package/dist/components/Popover/index.mjs +1 -1
  316. package/dist/components/ProgressBar/index.mjs +1 -2
  317. package/dist/components/ProgressBar/index.mjs.map +1 -1
  318. package/dist/components/ProgressIndicator/index.d.mts +1 -1
  319. package/dist/components/ProgressIndicator/index.mjs +1 -1
  320. package/dist/components/Radio/index.mjs +1 -1
  321. package/dist/components/RadioGroup/index.d.mts +1 -1
  322. package/dist/components/RadioGroup/index.mjs +1 -1
  323. package/dist/components/RightPanel/index.mjs +10 -7
  324. package/dist/components/RightPanel/index.mjs.map +1 -1
  325. package/dist/components/SegmentedControl/index.d.mts +1 -1
  326. package/dist/components/SegmentedControl/index.mjs +1 -1
  327. package/dist/components/Select/index.d.mts +1 -1
  328. package/dist/components/Select/index.mjs +1 -1
  329. package/dist/components/Slider/index.mjs +1 -1
  330. package/dist/components/Slider/index.mjs.map +1 -1
  331. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +2 -105
  332. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +1 -1
  333. package/dist/components/Spinner/index.mjs +1 -1
  334. package/dist/components/Stack/index.d.mts +1 -1
  335. package/dist/components/Stack/index.mjs +1 -1
  336. package/dist/components/StatusIndicator/index.mjs +1 -314
  337. package/dist/components/Sticker/index.d.mts +1 -1
  338. package/dist/components/Sticker/index.mjs +1 -1
  339. package/dist/components/TabBar/index.mjs +1 -1
  340. package/dist/components/Table/index.d.mts +8 -8
  341. package/dist/components/Table/index.mjs +1 -1
  342. package/dist/components/TableBox/index.d.mts +2 -2
  343. package/dist/components/TableBox/index.mjs +1 -1
  344. package/dist/components/TechnicalSticker/index.mjs +1 -1
  345. package/dist/components/Text/index.d.mts +1 -1
  346. package/dist/components/TextArea/index.d.mts +1 -1
  347. package/dist/components/TextArea/index.mjs +1 -1
  348. package/dist/components/Tile/index.mjs +2 -2
  349. package/dist/components/Toast/index.mjs +2 -2
  350. package/dist/components/Toast/index.mjs.map +1 -1
  351. package/dist/components/Toggle/index.d.mts +1 -1
  352. package/dist/components/Toggle/index.mjs +1 -1
  353. package/dist/components/Tooltip/index.d.mts +3 -3
  354. package/dist/components/VersionHistory/index.d.mts +3 -0
  355. package/dist/components/VersionHistory/index.mjs +389 -0
  356. package/dist/components/VersionHistory/index.mjs.map +1 -0
  357. package/dist/components/WizardModal/index.mjs +4 -4
  358. package/dist/compound-expression.d.mts +1 -1
  359. package/dist/{constants-BpwnTzcv.d.mts → constants-BOxzLX-O.d.mts} +1 -1
  360. package/dist/constants.d.mts +1 -1
  361. package/dist/{createPath-Bst12Uxr.d.mts → createPath-OeTC9kvS.d.mts} +2 -2
  362. package/dist/createPath.d.mts +1 -1
  363. package/dist/{date-filter-CZeChs9T.mjs → date-filter-BnzR6NxT.mjs} +1 -1
  364. package/dist/{date-filter-CZeChs9T.mjs.map → date-filter-BnzR6NxT.mjs.map} +1 -1
  365. package/dist/{date-range-rule-value-C4ir2Y8W.d.mts → date-range-rule-value-BRp5Bi7R.d.mts} +2 -2
  366. package/dist/date-range-rule-value.d.mts +1 -1
  367. package/dist/{date-rule-intent-gKmuxMVA.d.mts → date-rule-intent-CDBtV0ET.d.mts} +3 -3
  368. package/dist/date-rule-intent.d.mts +1 -1
  369. package/dist/display.d.mts +2 -2
  370. package/dist/fieldPickerOptions.d.mts +2 -2
  371. package/dist/{filter-size-context-BOpH6pBm.d.mts → filter-size-context-CqvQ190x.d.mts} +2 -2
  372. package/dist/filter-size-context.d.mts +1 -1
  373. package/dist/format-date-value.d.mts +5 -0
  374. package/dist/helpers.d.mts +1 -1
  375. package/dist/{index-C2-PBfN3.d.mts → index-BXSe73Xn.d.mts} +2 -2
  376. package/dist/{index-c0aXmZV9.d.mts → index-CyAok7As.d.mts} +2 -2
  377. package/dist/{index-BXdrzR0c.d.mts → index-wKK9f9La.d.mts} +3 -3
  378. package/dist/index.d.mts +1 -1
  379. package/dist/index2.d.mts +1 -1
  380. package/dist/index3.d.mts +3 -3
  381. package/dist/index4.d.mts +1 -1
  382. package/dist/index5.d.mts +14 -14
  383. package/dist/{input-DVJhMlxU.d.mts → input-C6cyiqm2.d.mts} +3 -3
  384. package/dist/inputFields.d.mts +10 -10
  385. package/dist/{intersperse-Bxcrxj2Q.mjs → intersperse-Df9zw7Bk.mjs} +1 -1
  386. package/dist/{intersperse-Bxcrxj2Q.mjs.map → intersperse-Df9zw7Bk.mjs.map} +1 -1
  387. package/dist/{jsonSchema-DmdZYC4a.d.mts → jsonSchema-CfGi1bzI.d.mts} +34 -2
  388. package/dist/lib/PDSProvider.d.mts +2 -2
  389. package/dist/lib/TruncatedText.d.mts +1 -1
  390. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  391. package/dist/lib/chainTypes.d.mts +17 -0
  392. package/dist/lib/chainTypes.mjs +0 -0
  393. package/dist/lib/color.d.mts +2 -2
  394. package/dist/lib/color.mjs +18 -11
  395. package/dist/lib/color.mjs.map +1 -1
  396. package/dist/lib/customFunctionSchema.d.mts +49 -0
  397. package/dist/lib/customFunctionSchema.mjs +299 -0
  398. package/dist/lib/customFunctionSchema.mjs.map +1 -0
  399. package/dist/lib/date-filter/index.d.mts +2 -2
  400. package/dist/lib/date-filter/index.mjs +1 -1
  401. package/dist/lib/jsonSchema.d.mts +2 -2
  402. package/dist/lib/jsonSchema.mjs +26 -1
  403. package/dist/lib/jsonSchema.mjs.map +1 -1
  404. package/dist/lib/jsonSchemaType.d.mts +7 -0
  405. package/dist/lib/jsonSchemaType.mjs +31 -0
  406. package/dist/lib/jsonSchemaType.mjs.map +1 -0
  407. package/dist/lib/letPointerDownReachDocument.d.mts +22 -0
  408. package/dist/lib/letPointerDownReachDocument.mjs +25 -0
  409. package/dist/lib/letPointerDownReachDocument.mjs.map +1 -0
  410. package/dist/lib/message.d.mts +1 -1
  411. package/dist/lib/methodChain.d.mts +3 -66
  412. package/dist/lib/methodChain.mjs +1 -237
  413. package/dist/lib/methodChainNormalize.d.mts +2 -2
  414. package/dist/lib/methodChainTypes.d.mts +2 -23
  415. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  416. package/dist/lib/platformObject.d.mts +38 -0
  417. package/dist/lib/platformObject.mjs +79 -0
  418. package/dist/lib/platformObject.mjs.map +1 -0
  419. package/dist/lib/pseudoClass.d.mts +1 -1
  420. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  421. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  422. package/dist/lib/router/index.d.mts +5 -5
  423. package/dist/lib/schemaOptions.d.mts +173 -0
  424. package/dist/lib/schemaOptions.mjs +481 -0
  425. package/dist/lib/schemaOptions.mjs.map +1 -0
  426. package/dist/lib/semanticColor.d.mts +1 -1
  427. package/dist/lib/snakifyPath.d.mts +5 -0
  428. package/dist/lib/snakifyPath.mjs +11 -0
  429. package/dist/lib/snakifyPath.mjs.map +1 -0
  430. package/dist/{message-CKSLIKF0.d.mts → message-CblP0EjG.d.mts} +1 -1
  431. package/dist/methodChain-DAQxLgxt.mjs +241 -0
  432. package/dist/methodChain-DAQxLgxt.mjs.map +1 -0
  433. package/dist/methodChain-Pk1C3i_E.d.mts +66 -0
  434. package/dist/methodChainTypes-CqWzfx0M.d.mts +23 -0
  435. package/dist/mixins/focus.d.mts +1 -1
  436. package/dist/mixins/hoverable.d.mts +2 -2
  437. package/dist/mixins/input.d.mts +1 -1
  438. package/dist/mixins/input.mjs +6 -14
  439. package/dist/mixins/input.mjs.map +1 -1
  440. package/dist/mixins/menuItem.d.mts +2 -2
  441. package/dist/mixins/scrollbar.d.mts +10 -0
  442. package/dist/mixins/scrollbar.mjs +31 -0
  443. package/dist/mixins/scrollbar.mjs.map +1 -0
  444. package/dist/mixins/text.d.mts +1 -1
  445. package/dist/{operators-1_jTgYRX.d.mts → operators-CoXL5Hv6.d.mts} +2 -2
  446. package/dist/operators.d.mts +1 -1
  447. package/dist/{palette-CMOEyNPH.d.mts → palette-CxXUs1Fu.d.mts} +3 -3
  448. package/dist/palette.d.mts +1 -1
  449. package/dist/patterns/LayoutLoadingShimmer/index.mjs +5 -5
  450. package/dist/patterns/PageLayout/index.mjs +2 -2
  451. package/dist/reactRouterFallback.d.mts +1 -1
  452. package/dist/relative-date-label.d.mts +1 -1
  453. package/dist/{semantic-BXwNUd4a.d.mts → semantic-CFMBsuiJ.d.mts} +2 -2
  454. package/dist/{semanticColor-Cru2gSys.d.mts → semanticColor-DuJCmDrH.d.mts} +3 -3
  455. package/dist/{text-CxIup7HJ.d.mts → text-D8HPjiEX.d.mts} +1 -1
  456. package/dist/{theme-CW6qlONZ.d.mts → theme-BcaR-Au5.d.mts} +3 -3
  457. package/dist/theme.d.mts +1 -1
  458. package/dist/time-range.d.mts +7 -0
  459. package/dist/tone.d.mts +3 -3
  460. package/dist/{types-ChkiGhjQ.d.mts → types-BCiq4hGv.d.mts} +1 -1
  461. package/dist/types-BGMmkUpy.d.mts +105 -0
  462. package/dist/{types-BEjWTkZV.d.mts → types-C4WUSW3e.d.mts} +7 -2
  463. package/dist/{types-B-stjYNc.d.mts → types-CkpixGWr.d.mts} +1 -1
  464. package/dist/{types-YojUycQK.d.mts → types-Cl-w8tYc.d.mts} +1 -1
  465. package/dist/{types-3iEDsymE.d.mts → types-CoVZwrMW.d.mts} +2 -2
  466. package/dist/{types-g-aqbnek.d.mts → types-DgyGecdM.d.mts} +1 -1
  467. package/dist/types.d.mts +1 -1
  468. package/dist/types2.d.mts +1 -1
  469. package/dist/types3.d.mts +1 -1
  470. package/dist/types4.d.mts +1 -1
  471. package/dist/types5.d.mts +1 -1
  472. package/dist/types6.d.mts +1 -1
  473. package/dist/{url-state-CHK2N2fA.d.mts → url-state-8j_ef8Uf.d.mts} +2 -2
  474. package/dist/url-state.d.mts +1 -1
  475. package/dist/useComboboxFooterAction.d.mts +1 -1
  476. package/dist/{useFilterStateV2-B26e5iUx.d.mts → useFilterStateV2-CW6eght1.d.mts} +3 -3
  477. package/dist/useFilterStateV2.d.mts +1 -1
  478. package/dist/{useFormField-DPFClB5h.d.mts → useFormField-CLRZkUZt.d.mts} +2 -2
  479. package/dist/{useFormField-BzhMbl5P.mjs → useFormField-XezSxho_.mjs} +2 -2
  480. package/dist/{useFormField-BzhMbl5P.mjs.map → useFormField-XezSxho_.mjs.map} +1 -1
  481. package/dist/useFormField.d.mts +1 -1
  482. package/dist/{useFormGroup-CH3kiXoa.mjs → useFormGroup-C7Cax8zO.mjs} +1 -1
  483. package/dist/{useFormGroup-CH3kiXoa.mjs.map → useFormGroup-C7Cax8zO.mjs.map} +1 -1
  484. package/dist/{useLocationPathname-CnRd_Rzn.d.mts → useLocationPathname-DH5Tdq5X.d.mts} +1 -1
  485. package/dist/useLocationPathname.d.mts +1 -1
  486. package/dist/{useTableBoxDragAndDrop-DWlG5vhl.d.mts → useTableBoxDragAndDrop-Da4TiYBT.d.mts} +1 -1
  487. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  488. package/dist/useTruncation.d.mts +1 -1
  489. package/dist/{utilities-BcGuP8Fd.d.mts → utilities-DcsbI71T.d.mts} +1 -1
  490. package/dist/utilities.d.mts +1 -1
  491. package/dist/utils/storybook.mjs +1 -1
  492. package/dist/utils/testing.d.mts +1 -1
  493. package/dist/utils.d.mts +1 -1
  494. package/dist/{validation-B-Om4ANo.d.mts → validation-BgwNghi2.d.mts} +3 -3
  495. package/dist/validation.d.mts +1 -1
  496. package/dist/{value-control-resolver-BiyhB8zt.d.mts → value-control-resolver-B0HDRxRN.d.mts} +3 -2
  497. package/dist/value-control-resolver.d.mts +1 -1
  498. package/dist/variables/effect.d.mts +1 -1
  499. package/dist/variables/semantic.d.mts +1 -1
  500. package/dist/variables/semantic.mjs +15 -18
  501. package/dist/variables/semantic.mjs.map +1 -1
  502. package/package.json +23 -4
  503. package/skills/ui-authoring/COMPONENTS.md +1 -0
  504. package/dist/Combobox-C2b9u955.mjs.map +0 -1
  505. package/dist/DatePicker-IgiUI3Wj.mjs.map +0 -1
  506. package/dist/DropdownMenu-CuKSNxc9.mjs.map +0 -1
  507. package/dist/Input-C_3QwAAt.mjs.map +0 -1
  508. package/dist/ListBox-D4j4LCT3.mjs.map +0 -1
  509. package/dist/LoadingShimmer-Dizk2sZu.mjs.map +0 -1
  510. package/dist/Modal-BN0K8QXi.mjs.map +0 -1
  511. package/dist/Popover-opVa9Xhc.mjs.map +0 -1
  512. package/dist/ProgressIndicator-3A4Aqci6.mjs.map +0 -1
  513. package/dist/SegmentedControl-BcwfLuHA.mjs.map +0 -1
  514. package/dist/Select-BstCz8P1.mjs.map +0 -1
  515. package/dist/Sticker-C3Eb13OQ.mjs.map +0 -1
  516. package/dist/Table-B1gRr2XT.mjs.map +0 -1
  517. package/dist/TableBox-DAQ3Plqx.mjs.map +0 -1
  518. package/dist/TableControls-BxuPCUQS.mjs.map +0 -1
  519. package/dist/Toggle-DWbJOwf3.mjs.map +0 -1
  520. package/dist/components/Link/index.mjs.map +0 -1
  521. package/dist/components/StatusIndicator/index.mjs.map +0 -1
  522. package/dist/lib/methodChain.mjs.map +0 -1
  523. /package/dist/{index--p6oQT9I.d.mts → index-B24gUwOx.d.mts} +0 -0
  524. /package/dist/{index-BCh-G39Y2.d.mts → index-BFnNtGdX.d.mts} +0 -0
  525. /package/dist/{index-BMBcfD_R.d.mts → index-BNRXMhlr.d.mts} +0 -0
  526. /package/dist/{index-BO_854F2.d.mts → index-BPiqSRRl.d.mts} +0 -0
  527. /package/dist/{index-BOn0AAue.d.mts → index-BYd3Btr1.d.mts} +0 -0
  528. /package/dist/{index-BcsXXrHq.d.mts → index-B_BBnMou.d.mts} +0 -0
  529. /package/dist/{index-BwFl_eS0.d.mts → index-Bt4QNofW.d.mts} +0 -0
  530. /package/dist/{index-C-lwXyQ6.d.mts → index-C6HcjJiY.d.mts} +0 -0
  531. /package/dist/{index-C1o2TFfS.d.mts → index-CEqOS-7M.d.mts} +0 -0
  532. /package/dist/{index-C3kE54DD.d.mts → index-CIABef8t.d.mts} +0 -0
  533. /package/dist/{index-CREkvfw9.d.mts → index-CTHojwxd.d.mts} +0 -0
  534. /package/dist/{index-CRo77wc3.d.mts → index-CjDodOH2.d.mts} +0 -0
  535. /package/dist/{index-CfCYi7PF.d.mts → index-Cm-1i165.d.mts} +0 -0
  536. /package/dist/{index-CuYZJcK3.d.mts → index-DB7t8whN.d.mts} +0 -0
  537. /package/dist/{index-DCTy4zg0.d.mts → index-DBGd4WeR.d.mts} +0 -0
  538. /package/dist/{index-DWIh4oP5.d.mts → index-DGsJdI5l.d.mts} +0 -0
  539. /package/dist/{index-De7MV8-j.d.mts → index-DWfPppPU.d.mts} +0 -0
  540. /package/dist/{index-Dflz2i1X.d.mts → index-DeVKzGce.d.mts} +0 -0
  541. /package/dist/{index-DgJfEygr.d.mts → index-DedbSZMv.d.mts} +0 -0
  542. /package/dist/{index-DkrC-i1D.d.mts → index-Deol7ZWO.d.mts} +0 -0
  543. /package/dist/{index-DrK1_jKY.d.mts → index-Jh0C5PIG.d.mts} +0 -0
  544. /package/dist/{index-Es5nKSSL.d.mts → index-NKYLt_R9.d.mts} +0 -0
  545. /package/dist/{index-Wc1llEvP.d.mts → index-VWno75SQ.d.mts} +0 -0
  546. /package/dist/{index-bHnO4ZKt.d.mts → index-fxXoW-qc.d.mts} +0 -0
  547. /package/dist/{index-dhjtMp5F.d.mts → index-gVcIuWLd.d.mts} +0 -0
  548. /package/dist/{index-xmouCHX9.d.mts → index-zeAhjge4.d.mts} +0 -0
@@ -1,4 +1,4 @@
1
- import { n as AccordionTitleTypography, t as AccordionSize } from "../../accordionTitleTypography-BYhjSN9t.mjs";
1
+ import { n as AccordionTitleTypography, t as AccordionSize } from "../../accordionTitleTypography-CNB1w3kn.mjs";
2
2
  import { AccordionTitleHeadingAs } from "../../AccordionItem.mjs";
3
3
  import { Accordion, AccordionItemProps, AccordionProps } from "../../Accordion.mjs";
4
4
  export { Accordion, Accordion as default, type AccordionItemProps, type AccordionProps, type AccordionSize, type AccordionTitleHeadingAs, type AccordionTitleTypography };
@@ -6,7 +6,7 @@ import { i as Paragraph, n as Heading$1 } from "../../Text-BdluS7Fy.mjs";
6
6
  import "../../variables/transitions.mjs";
7
7
  import { isFocusedVisible, isNotDisabled } from "../../lib/pseudoClass.mjs";
8
8
  import { focusOutlineControlled } from "../../mixins/focus.mjs";
9
- import { n as Stack, t as HStack } from "../../Stack-ChsImaEY.mjs";
9
+ import { n as Stack, t as HStack } from "../../Stack-Bkn0TUDe.mjs";
10
10
  import { Color, Spacing } from "@persona/design-tokens";
11
11
  import { useLayoutEffect, useRef } from "react";
12
12
  import { Disclosure, DisclosurePanel } from "react-aria-components";
@@ -3,8 +3,8 @@ import { semanticColor, semanticOnly } from "../../lib/semanticColor.mjs";
3
3
  import { i as Paragraph } from "../../Text-BdluS7Fy.mjs";
4
4
  import { r as HelperTooltip } from "../../Tooltip-C0FuZS1C.mjs";
5
5
  import { isHovered, isNotDisabled } from "../../lib/pseudoClass.mjs";
6
- import { t as IconButton } from "../../IconButton-CqTPMhjV.mjs";
7
- import { n as Sticker } from "../../Sticker-C3Eb13OQ.mjs";
6
+ import { t as IconButton } from "../../IconButton-CCLMYWVN.mjs";
7
+ import { n as Sticker } from "../../Sticker-BLbgJxcH.mjs";
8
8
  import { Color, Spacing, Typography } from "@persona/design-tokens";
9
9
  import { createContext, useContext, useEffect, useMemo, useRef } from "react";
10
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,2 +1,2 @@
1
- import { t as Badge } from "../../Badge-BD0Ut46g.mjs";
1
+ import { t as Badge } from "../../Badge-COqUjFQu.mjs";
2
2
  export { Badge, Badge as default };
@@ -3,7 +3,7 @@ import { semanticOnly, semanticTokens } from "../../lib/semanticColor.mjs";
3
3
  import { paragraphMixins } from "../../mixins/text.mjs";
4
4
  import { withAlpha } from "../../lib/color.mjs";
5
5
  import { isActive, isFocused, isHovered, isNotDisabled } from "../../lib/pseudoClass.mjs";
6
- import { n as Button } from "../../IconButton-CqTPMhjV.mjs";
6
+ import { n as Button } from "../../IconButton-CCLMYWVN.mjs";
7
7
  import { Color, Spacing } from "@persona/design-tokens";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { XIcon } from "@persona/icons";
@@ -1,9 +1,10 @@
1
1
  import { a as styled, r as css } from "../../styledComponentsInterop-NxwFjeA4.mjs";
2
2
  import { useResizablePanel } from "../../lib/useResizablePanel.mjs";
3
3
  import { Z_INDICES } from "../../lib/zindex.mjs";
4
- import { t as IconButton } from "../../IconButton-CqTPMhjV.mjs";
5
- import { t as Badge } from "../../Badge-BD0Ut46g.mjs";
6
- import { i as TabBar, r as Tab } from "../../TabBar-BepWbJHz.mjs";
4
+ import { semanticScrollbar } from "../../mixins/scrollbar.mjs";
5
+ import { t as IconButton } from "../../IconButton-CCLMYWVN.mjs";
6
+ import { t as Badge } from "../../Badge-COqUjFQu.mjs";
7
+ import { i as TabBar, r as Tab } from "../../TabBar-Bj84q1Mr.mjs";
7
8
  import { Color, Spacing } from "@persona/design-tokens";
8
9
  import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
9
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -151,6 +152,7 @@ const ContentContainer = styled.div`
151
152
  /* offset by the top row container height */
152
153
  height: calc(100% - ${Spacing[6]});
153
154
  overflow: auto;
155
+ ${semanticScrollbar}
154
156
  display: flex;
155
157
  flex-direction: column;
156
158
  min-height: 0;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../components/BottomPanel/ResizeHandle.tsx","../../../components/BottomPanel/ResizableVerticalPanel.tsx","../../../components/BottomPanel/BottomPanel.tsx"],"sourcesContent":["import { type FC, type RefObject, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\n\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { Spacing } from '@persona/design-tokens';\n\nconst DRAGGING_CLASSNAME = 'dragging';\n\ninterface ResizeHandleProps {\n ariaLabel: string;\n /** Fires on double-click or Enter/Space so the host can toggle/reset the size. */\n onDoubleClick?: () => void;\n /** Called on each pointer move with the new top edge position (clientY) in px. */\n onMoveTo: (position: number) => void;\n /** Called once when the drag ends (pointerup, cancel, or lost capture). */\n onRelease?: () => void;\n /** The panel being resized; its edge seeds the grab offset so the handle doesn't jump. */\n panelRef: RefObject<HTMLDivElement>;\n}\n\n// The visible line is 2px tall on the panel's top border; the hitbox is Spacing[2] tall and\n// straddles that border so it is easy to grab without covering the header row's controls.\nconst ResizeHandleContainer = styled.div`\n cursor: row-resize;\n position: absolute;\n height: ${Spacing[2]};\n top: -${Spacing[1]};\n left: 0;\n right: 0;\n z-index: ${Z_INDICES.dropdown};\n touch-action: none;\n\n &::after {\n content: '';\n position: absolute;\n top: ${Spacing[1]};\n left: 0;\n right: 0;\n height: 2px;\n background-color: transparent;\n transition: background-color 0.15s ease-in;\n transition-delay: 0.025s;\n }\n\n &:hover::after,\n &.${DRAGGING_CLASSNAME}::after {\n background-color: ${({ theme }) => theme.color.border.active};\n }\n`;\n\n/** Vertical resize handle pinned to the top edge of a bottom-anchored panel. */\nexport const ResizeHandle: FC<ResizeHandleProps> = ({\n ariaLabel,\n onDoubleClick,\n onMoveTo,\n onRelease,\n panelRef,\n}) => {\n const resizeHandleRef = useRef<HTMLDivElement>(null);\n const panelOffsetRef = useRef(0);\n const activePointerIdRef = useRef<number | null>(null);\n const documentListenersRef = useRef<{\n handleEnd: (event: PointerEvent) => void;\n handleMove: (event: PointerEvent) => void;\n } | null>(null);\n // Document listeners are registered once per drag; reading the callbacks through\n // refs keeps them on the latest props without re-registering mid-drag.\n const onMoveToRef = useRef(onMoveTo);\n const onReleaseRef = useRef(onRelease);\n onMoveToRef.current = onMoveTo;\n onReleaseRef.current = onRelease;\n\n const removeDocumentListeners = () => {\n const listeners = documentListenersRef.current;\n if (!listeners) {\n return;\n }\n\n document.removeEventListener('pointermove', listeners.handleMove);\n document.removeEventListener('pointerup', listeners.handleEnd);\n document.removeEventListener('pointercancel', listeners.handleEnd);\n documentListenersRef.current = null;\n };\n\n // Pointer capture routes events through the handle (including over iframes), but\n // some surfaces still drop pointerup. Document-level listeners during an active\n // drag are the release safety net. Only the pointer that started the drag may\n // move or end it.\n const endDrag = (pointerId: number) => {\n if (activePointerIdRef.current !== pointerId) {\n return;\n }\n\n activePointerIdRef.current = null;\n removeDocumentListeners();\n try {\n resizeHandleRef.current?.releasePointerCapture(pointerId);\n } catch {\n // No active capture (or unsupported, e.g. jsdom) — nothing to release.\n }\n\n resizeHandleRef.current?.classList.remove(DRAGGING_CLASSNAME);\n panelOffsetRef.current = 0;\n onReleaseRef.current?.();\n };\n\n const handleDocumentPointerMove = (event: PointerEvent) => {\n if (activePointerIdRef.current !== event.pointerId) {\n return;\n }\n\n onMoveToRef.current(event.clientY + panelOffsetRef.current);\n };\n\n const addDocumentListeners = () => {\n removeDocumentListeners();\n\n const listeners = {\n handleEnd: (event: PointerEvent) => endDrag(event.pointerId),\n handleMove: handleDocumentPointerMove,\n };\n documentListenersRef.current = listeners;\n document.addEventListener('pointermove', listeners.handleMove);\n document.addEventListener('pointerup', listeners.handleEnd);\n document.addEventListener('pointercancel', listeners.handleEnd);\n };\n\n const endDragRef = useRef(endDrag);\n endDragRef.current = endDrag;\n useEffect(() => {\n return () => {\n const activePointerId = activePointerIdRef.current;\n if (activePointerId != null) {\n endDragRef.current(activePointerId);\n }\n };\n }, []);\n\n return (\n <ResizeHandleContainer\n aria-label={ariaLabel}\n onDoubleClick={onDoubleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onDoubleClick?.();\n e.preventDefault();\n }\n }}\n onLostPointerCapture={(e) => endDrag(e.pointerId)}\n onPointerCancel={(e) => endDrag(e.pointerId)}\n onPointerDown={(e) => {\n // Primary button / touch / pen only; ignore secondary and middle clicks,\n // and a second pointer while a drag is already active.\n if (e.button !== 0 || activePointerIdRef.current != null) {\n return;\n }\n const panelRect = panelRef.current?.getBoundingClientRect();\n panelOffsetRef.current = panelRect ? panelRect.top - e.clientY : 0;\n activePointerIdRef.current = e.pointerId;\n resizeHandleRef.current?.classList.add(DRAGGING_CLASSNAME);\n addDocumentListeners();\n try {\n resizeHandleRef.current?.setPointerCapture(e.pointerId);\n } catch {\n // Pointer capture unsupported (e.g. jsdom) — document listeners still\n // route move/up events for the duration of the drag.\n }\n e.preventDefault();\n e.stopPropagation();\n }}\n onPointerUp={(e) => endDrag(e.pointerId)}\n ref={resizeHandleRef}\n role='button'\n tabIndex={0}\n />\n );\n};\n","import { type FC, type ReactNode, useRef } from 'react';\nimport styled from 'styled-components';\n\nimport { IconButton } from '@persona/design-system/components/Button';\nimport { PanelState, type ResizablePanelState } from '@persona/design-system/lib/useResizablePanel';\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ArrowCollapseIcon, ArrowExpandIcon, XIcon } from '@persona/icons';\n\nimport { ResizeHandle } from './ResizeHandle';\n\ninterface ResizableVerticalPanelProps {\n /** Panel body, rendered in the scrollable content area below the header. */\n children: ReactNode;\n /** Content for the header row, left of the maximize/minimize/close buttons. */\n headerContent?: ReactNode;\n /** State and drag/resize handlers from `useResizablePanel`. */\n hookState: ResizablePanelState;\n /** Minimum panel height in px. */\n minHeight: number;\n}\n\nconst TriStatePanel = styled.div.attrs<{\n customHeight: number | null;\n minHeight: number;\n panelState: PanelState;\n}>(({ customHeight, minHeight, panelState }) => ({\n style: {\n height: panelState === PanelState.Maximized ? '100%' : `${customHeight ?? minHeight}px`,\n },\n}))<{\n customHeight: number | null;\n minHeight: number;\n panelState: PanelState;\n}>`\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n background-color: ${({ theme }) => theme.color.background.primary};\n position: relative;\n min-height: ${({ minHeight }) => minHeight}px;\n width: 100%;\n border-top: 1px solid ${Color.BorderDivider};\n z-index: ${Z_INDICES.topNav};\n`;\n\nconst TopRowContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n box-shadow: inset 0px -1px 0px 0px ${Color.BorderDivider};\n`;\n\nconst TopRightIconsContainer = styled.div`\n display: flex;\n align-items: center;\n padding: 0 ${Spacing[2]};\n gap: ${Spacing[2]};\n flex-direction: row;\n`;\n\nconst ContentContainer = styled.div`\n /* offset by the top row container height */\n height: calc(100% - ${Spacing[6]});\n overflow: auto;\n display: flex;\n flex-direction: column;\n min-height: 0;\n`;\n\n/**\n * Bottom-anchored panel with a drag-to-resize top edge, a header row, and\n * maximize/minimize/close controls.\n */\nexport const ResizableVerticalPanel: FC<ResizableVerticalPanelProps> = ({\n children,\n headerContent,\n hookState,\n minHeight,\n}) => {\n const {\n collapse,\n handleDragMove: handlePanelDragMove,\n handleDragRelease,\n maximize,\n panelState,\n restore,\n size,\n toggleMaximized,\n } = hookState;\n const panelRef = useRef<HTMLDivElement>(null);\n // Controls only make sense once the drawer is taller than its collapsed header.\n const showControls = (size != null && size > minHeight) || panelState === PanelState.Maximized;\n // Converts the dragged top edge (clientY) into a panel height bounded by the\n // panel's container.\n const handleDragMove = (clientY: number) => {\n const panel = panelRef.current;\n const container = panel?.parentElement;\n if (!panel || !container) {\n return;\n }\n const panelBottom = panel.getBoundingClientRect().bottom;\n const containerTop = container.getBoundingClientRect().top;\n handlePanelDragMove(panelBottom - clientY, panelBottom - containerTop);\n };\n\n return (\n <TriStatePanel\n aria-label='Bottom panel'\n customHeight={size}\n minHeight={minHeight}\n panelState={panelState}\n ref={panelRef}\n role='region'\n >\n <ResizeHandle\n ariaLabel='Drag to resize bottom panel'\n onDoubleClick={toggleMaximized}\n onMoveTo={handleDragMove}\n onRelease={handleDragRelease}\n panelRef={panelRef}\n />\n\n <TopRowContainer>\n {headerContent}\n\n {showControls && (\n <TopRightIconsContainer>\n {panelState === PanelState.Maximized ? (\n <IconButton aria-label='Restore the bottom panel' onClick={restore} size='sm'>\n <ArrowCollapseIcon />\n </IconButton>\n ) : (\n <IconButton aria-label='Maximize the bottom panel' onClick={maximize} size='sm'>\n <ArrowExpandIcon />\n </IconButton>\n )}\n <IconButton aria-label='Close bottom panel' onClick={collapse} size='sm'>\n <XIcon />\n </IconButton>\n </TopRightIconsContainer>\n )}\n </TopRowContainer>\n\n <ContentContainer>{children}</ContentContainer>\n </TriStatePanel>\n );\n};\n","import {\n forwardRef,\n type ReactNode,\n useCallback,\n useEffect,\n useImperativeHandle,\n useState,\n} from 'react';\nimport { useId } from 'react-aria';\nimport styled, { css } from 'styled-components';\n\nimport Badge from '@persona/design-system/components/Badge';\nimport TabBar, { Tab } from '@persona/design-system/components/TabBar';\nimport { PanelState, useResizablePanel } from '@persona/design-system/lib/useResizablePanel';\nimport { Spacing } from '@persona/design-tokens';\n\nimport { ResizableVerticalPanel } from './ResizableVerticalPanel';\n\n// One-pixel panel top border plus the 32px header row sets the collapsed drawer height.\nconst PANEL_MIN_HEIGHT = 33;\n// Where the drawer opens to when a collapsed tab is selected; the user can drag from there.\nconst OPEN_HEIGHT = 200;\n\nexport interface BottomPanelItemProps {\n /** Tab text; also the key `openPanel(label)` looks up. Unique per BottomPanel. */\n label: string;\n /**\n * Tab body. Every panel stays mounted while another tab is selected, so local\n * state (scroll, expanded rows) survives a switch.\n */\n content: ReactNode;\n /** Count shown as a badge on the tab. `0`/`undefined` hides it. */\n badge?: number;\n}\n\nexport interface BottomPanelHandle {\n /** Select the tab and expand the drawer if collapsed. No-op for an unknown label. */\n openPanel: (label: string) => void;\n}\n\nexport interface BottomPanelProps {\n /** Tabs to show, in order. */\n panels: BottomPanelItemProps[];\n}\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n padding-left: ${Spacing[4]};\n`;\n\n// The header row draws the divider edge to edge; the tab bar must not add its own.\nconst HeaderTabBar = styled(TabBar)`\n border-bottom: none;\n`;\n\nconst PanelContent = styled.div<{ $hidden: boolean }>`\n ${({ $hidden }) =>\n $hidden\n ? css`\n position: absolute;\n inset: 0;\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n `\n : css`\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n `}\n`;\n\n/**\n * Resizable drawer anchored to the bottom of its container with one tab per\n * panel. Owns the tab bar, expand/collapse/resize, and always-mounted content;\n * the caller owns what each panel shows.\n */\nconst BottomPanel = forwardRef<BottomPanelHandle, BottomPanelProps>(function BottomPanel(\n { panels },\n ref,\n) {\n const baseId = useId();\n const [selected, setSelected] = useState<string | undefined>(panels[0]?.label);\n // Falls back to the first panel when the selected label has left `panels`, and\n // commits the fallback so the old label does not regain selection if it returns.\n const hasSelected = panels.some((panel) => panel.label === selected);\n const selectedLabel = hasSelected ? selected : panels[0]?.label;\n useEffect(() => {\n if (!hasSelected) {\n setSelected(selectedLabel);\n }\n }, [hasSelected, selectedLabel]);\n\n const resizablePanelState = useResizablePanel({\n initialSize: PANEL_MIN_HEIGHT,\n minSize: PANEL_MIN_HEIGHT,\n });\n const { expandTo, panelState, size } = resizablePanelState;\n\n // Selecting a tab opens a collapsed drawer but leaves a maximized one as is.\n const openPanel = useCallback(\n (label: string) => {\n if (panelState === PanelState.Drawer && (size == null || size <= PANEL_MIN_HEIGHT)) {\n expandTo(OPEN_HEIGHT);\n }\n setSelected(label);\n },\n [expandTo, panelState, size],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n openPanel: (label: string) => {\n if (panels.some((panel) => panel.label === label)) {\n openPanel(label);\n }\n },\n }),\n [openPanel, panels],\n );\n\n return (\n <ResizableVerticalPanel\n headerContent={\n <Header>\n <HeaderTabBar>\n {panels.map((panel, index) => (\n <Tab\n aria-controls={`${baseId}-panel-${index}`}\n badge={panel.badge ? <Badge>{panel.badge}</Badge> : undefined}\n id={`${baseId}-tab-${index}`}\n key={panel.label}\n onClick={() => openPanel(panel.label)}\n selected={selectedLabel === panel.label}\n >\n {panel.label}\n </Tab>\n ))}\n </HeaderTabBar>\n </Header>\n }\n hookState={resizablePanelState}\n minHeight={PANEL_MIN_HEIGHT}\n >\n {panels.map((panel, index) => {\n const isSelected = selectedLabel === panel.label;\n return (\n <PanelContent\n $hidden={!isSelected}\n aria-hidden={!isSelected}\n aria-labelledby={`${baseId}-tab-${index}`}\n id={`${baseId}-panel-${index}`}\n key={panel.label}\n role='tabpanel'\n >\n {panel.content}\n </PanelContent>\n );\n })}\n </ResizableVerticalPanel>\n );\n});\n\nexport default BottomPanel;\n"],"mappings":";;;;;;;;;;;;AAMA,MAAM,qBAAqB;AAgB3B,MAAM,wBAAwB,OAAO,GAAG;;;YAG5B,QAAQ,GAAG;UACb,QAAQ,GAAG;;;aAGR,UAAU,SAAS;;;;;;WAMrB,QAAQ,GAAG;;;;;;;;;;MAUhB,mBAAmB;yBACA,EAAE,YAAY,MAAM,MAAM,OAAO,OAAO;;;;AAKjE,MAAa,gBAAuC,EAClD,WACA,eACA,UACA,WACA,eACI;CACJ,MAAM,kBAAkB,OAAuB,KAAK;CACpD,MAAM,iBAAiB,OAAO,EAAE;CAChC,MAAM,qBAAqB,OAAsB,KAAK;CACtD,MAAM,uBAAuB,OAGnB,KAAK;CAGf,MAAM,cAAc,OAAO,SAAS;CACpC,MAAM,eAAe,OAAO,UAAU;AACtC,aAAY,UAAU;AACtB,cAAa,UAAU;CAEvB,MAAM,gCAAgC;EACpC,MAAM,YAAY,qBAAqB;AACvC,MAAI,CAAC,UACH;AAGF,WAAS,oBAAoB,eAAe,UAAU,WAAW;AACjE,WAAS,oBAAoB,aAAa,UAAU,UAAU;AAC9D,WAAS,oBAAoB,iBAAiB,UAAU,UAAU;AAClE,uBAAqB,UAAU;;CAOjC,MAAM,WAAW,cAAsB;AACrC,MAAI,mBAAmB,YAAY,UACjC;AAGF,qBAAmB,UAAU;AAC7B,2BAAyB;AACzB,MAAI;AACF,mBAAgB,SAAS,sBAAsB,UAAU;UACnD;AAIR,kBAAgB,SAAS,UAAU,OAAO,mBAAmB;AAC7D,iBAAe,UAAU;AACzB,eAAa,WAAW;;CAG1B,MAAM,6BAA6B,UAAwB;AACzD,MAAI,mBAAmB,YAAY,MAAM,UACvC;AAGF,cAAY,QAAQ,MAAM,UAAU,eAAe,QAAQ;;CAG7D,MAAM,6BAA6B;AACjC,2BAAyB;EAEzB,MAAM,YAAY;GAChB,YAAY,UAAwB,QAAQ,MAAM,UAAU;GAC5D,YAAY;GACb;AACD,uBAAqB,UAAU;AAC/B,WAAS,iBAAiB,eAAe,UAAU,WAAW;AAC9D,WAAS,iBAAiB,aAAa,UAAU,UAAU;AAC3D,WAAS,iBAAiB,iBAAiB,UAAU,UAAU;;CAGjE,MAAM,aAAa,OAAO,QAAQ;AAClC,YAAW,UAAU;AACrB,iBAAgB;AACd,eAAa;GACX,MAAM,kBAAkB,mBAAmB;AAC3C,OAAI,mBAAmB,KACrB,YAAW,QAAQ,gBAAgB;;IAGtC,EAAE,CAAC;AAEN,QACE,oBAAC,uBAAD;EACE,cAAY;EACG;EACf,YAAY,MAAM;AAChB,OAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,qBAAiB;AACjB,MAAE,gBAAgB;;;EAGtB,uBAAuB,MAAM,QAAQ,EAAE,UAAU;EACjD,kBAAkB,MAAM,QAAQ,EAAE,UAAU;EAC5C,gBAAgB,MAAM;AAGpB,OAAI,EAAE,WAAW,KAAK,mBAAmB,WAAW,KAClD;GAEF,MAAM,YAAY,SAAS,SAAS,uBAAuB;AAC3D,kBAAe,UAAU,YAAY,UAAU,MAAM,EAAE,UAAU;AACjE,sBAAmB,UAAU,EAAE;AAC/B,mBAAgB,SAAS,UAAU,IAAI,mBAAmB;AAC1D,yBAAsB;AACtB,OAAI;AACF,oBAAgB,SAAS,kBAAkB,EAAE,UAAU;WACjD;AAIR,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;;EAErB,cAAc,MAAM,QAAQ,EAAE,UAAU;EACxC,KAAK;EACL,MAAK;EACL,UAAU;EACV,CAAA;;;;ACxJN,MAAM,gBAAgB,OAAO,IAAI,OAI7B,EAAE,cAAc,WAAW,kBAAkB,EAC/C,OAAO,EACL,QAAQ,eAAA,cAAsC,SAAS,GAAG,gBAAgB,UAAU,KACrF,EACF,EAAE;;;;;uBASoB,EAAE,YAAY,MAAM,MAAM,WAAW,QAAQ;;iBAEnD,EAAE,gBAAgB,UAAU;;0BAEnB,MAAM,cAAc;aACjC,UAAU,OAAO;;AAG9B,MAAM,kBAAkB,OAAO,GAAG;;;;uCAIK,MAAM,cAAc;;AAG3D,MAAM,yBAAyB,OAAO,GAAG;;;eAG1B,QAAQ,GAAG;SACjB,QAAQ,GAAG;;;AAIpB,MAAM,mBAAmB,OAAO,GAAG;;wBAEX,QAAQ,GAAG;;;;;;;;;;AAWnC,MAAa,0BAA2D,EACtE,UACA,eACA,WACA,gBACI;CACJ,MAAM,EACJ,UACA,gBAAgB,qBAChB,mBACA,UACA,YACA,SACA,MACA,oBACE;CACJ,MAAM,WAAW,OAAuB,KAAK;CAE7C,MAAM,eAAgB,QAAQ,QAAQ,OAAO,aAAc,eAAA;CAG3D,MAAM,kBAAkB,YAAoB;EAC1C,MAAM,QAAQ,SAAS;EACvB,MAAM,YAAY,OAAO;AACzB,MAAI,CAAC,SAAS,CAAC,UACb;EAEF,MAAM,cAAc,MAAM,uBAAuB,CAAC;EAClD,MAAM,eAAe,UAAU,uBAAuB,CAAC;AACvD,sBAAoB,cAAc,SAAS,cAAc,aAAa;;AAGxE,QACE,qBAAC,eAAD;EACE,cAAW;EACX,cAAc;EACH;EACC;EACZ,KAAK;EACL,MAAK;YANP;GAQE,oBAAC,cAAD;IACE,WAAU;IACV,eAAe;IACf,UAAU;IACV,WAAW;IACD;IACV,CAAA;GAEF,qBAAC,iBAAD,EAAA,UAAA,CACG,eAEA,gBACC,qBAAC,wBAAD,EAAA,UAAA,CACG,eAAA,cACC,oBAAC,YAAD;IAAY,cAAW;IAA2B,SAAS;IAAS,MAAK;cACvE,oBAAC,mBAAD,EAAqB,CAAA;IACV,CAAA,GAEb,oBAAC,YAAD;IAAY,cAAW;IAA4B,SAAS;IAAU,MAAK;cACzE,oBAAC,iBAAD,EAAmB,CAAA;IACR,CAAA,EAEf,oBAAC,YAAD;IAAY,cAAW;IAAqB,SAAS;IAAU,MAAK;cAClE,oBAAC,OAAD,EAAS,CAAA;IACE,CAAA,CACU,EAAA,CAAA,CAEX,EAAA,CAAA;GAElB,oBAAC,kBAAD,EAAmB,UAA4B,CAAA;GACjC;;;;;AC/HpB,MAAM,mBAAmB;AAEzB,MAAM,cAAc;AAwBpB,MAAM,SAAS,OAAO,GAAG;;;;;kBAKP,QAAQ,GAAG;;AAI7B,MAAM,eAAe,OAAO,OAAO;;;AAInC,MAAM,eAAe,OAAO,GAAyB;KAChD,EAAE,cACH,UACI,GAAG;;;;;;YAOH,GAAG;;;;;UAKD;;;;;;;AAQV,MAAM,cAAc,WAAgD,SAAS,YAC3E,EAAE,UACF,KACA;CACA,MAAM,SAAS,OAAO;CACtB,MAAM,CAAC,UAAU,eAAe,SAA6B,OAAO,IAAI,MAAM;CAG9E,MAAM,cAAc,OAAO,MAAM,UAAU,MAAM,UAAU,SAAS;CACpE,MAAM,gBAAgB,cAAc,WAAW,OAAO,IAAI;AAC1D,iBAAgB;AACd,MAAI,CAAC,YACH,aAAY,cAAc;IAE3B,CAAC,aAAa,cAAc,CAAC;CAEhC,MAAM,sBAAsB,kBAAkB;EAC5C,aAAa;EACb,SAAS;EACV,CAAC;CACF,MAAM,EAAE,UAAU,YAAY,SAAS;CAGvC,MAAM,YAAY,aACf,UAAkB;AACjB,MAAI,eAAA,aAAqC,QAAQ,QAAQ,QAAQ,kBAC/D,UAAS,YAAY;AAEvB,cAAY,MAAM;IAEpB;EAAC;EAAU;EAAY;EAAK,CAC7B;AAED,qBACE,YACO,EACL,YAAY,UAAkB;AAC5B,MAAI,OAAO,MAAM,UAAU,MAAM,UAAU,MAAM,CAC/C,WAAU,MAAM;IAGrB,GACD,CAAC,WAAW,OAAO,CACpB;AAED,QACE,oBAAC,wBAAD;EACE,eACE,oBAAC,QAAD,EAAA,UACE,oBAAC,cAAD,EAAA,UACG,OAAO,KAAK,OAAO,UAClB,oBAAC,KAAD;GACE,iBAAe,GAAG,OAAO,SAAS;GAClC,OAAO,MAAM,QAAQ,oBAAC,OAAD,EAAA,UAAQ,MAAM,OAAc,CAAA,GAAG,KAAA;GACpD,IAAI,GAAG,OAAO,OAAO;GAErB,eAAe,UAAU,MAAM,MAAM;GACrC,UAAU,kBAAkB,MAAM;aAEjC,MAAM;GACH,EALC,MAAM,MAKP,CACN,EACW,CAAA,EACR,CAAA;EAEX,WAAW;EACX,WAAW;YAEV,OAAO,KAAK,OAAO,UAAU;GAC5B,MAAM,aAAa,kBAAkB,MAAM;AAC3C,UACE,oBAAC,cAAD;IACE,SAAS,CAAC;IACV,eAAa,CAAC;IACd,mBAAiB,GAAG,OAAO,OAAO;IAClC,IAAI,GAAG,OAAO,SAAS;IAEvB,MAAK;cAEJ,MAAM;IACM,EAJR,MAAM,MAIE;IAEjB;EACqB,CAAA;EAE3B"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../components/BottomPanel/ResizeHandle.tsx","../../../components/BottomPanel/ResizableVerticalPanel.tsx","../../../components/BottomPanel/BottomPanel.tsx"],"sourcesContent":["import { type FC, type RefObject, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\n\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { Spacing } from '@persona/design-tokens';\n\nconst DRAGGING_CLASSNAME = 'dragging';\n\ninterface ResizeHandleProps {\n ariaLabel: string;\n /** Fires on double-click or Enter/Space so the host can toggle/reset the size. */\n onDoubleClick?: () => void;\n /** Called on each pointer move with the new top edge position (clientY) in px. */\n onMoveTo: (position: number) => void;\n /** Called once when the drag ends (pointerup, cancel, or lost capture). */\n onRelease?: () => void;\n /** The panel being resized; its edge seeds the grab offset so the handle doesn't jump. */\n panelRef: RefObject<HTMLDivElement>;\n}\n\n// The visible line is 2px tall on the panel's top border; the hitbox is Spacing[2] tall and\n// straddles that border so it is easy to grab without covering the header row's controls.\nconst ResizeHandleContainer = styled.div`\n cursor: row-resize;\n position: absolute;\n height: ${Spacing[2]};\n top: -${Spacing[1]};\n left: 0;\n right: 0;\n z-index: ${Z_INDICES.dropdown};\n touch-action: none;\n\n &::after {\n content: '';\n position: absolute;\n top: ${Spacing[1]};\n left: 0;\n right: 0;\n height: 2px;\n background-color: transparent;\n transition: background-color 0.15s ease-in;\n transition-delay: 0.025s;\n }\n\n &:hover::after,\n &.${DRAGGING_CLASSNAME}::after {\n background-color: ${({ theme }) => theme.color.border.active};\n }\n`;\n\n/** Vertical resize handle pinned to the top edge of a bottom-anchored panel. */\nexport const ResizeHandle: FC<ResizeHandleProps> = ({\n ariaLabel,\n onDoubleClick,\n onMoveTo,\n onRelease,\n panelRef,\n}) => {\n const resizeHandleRef = useRef<HTMLDivElement>(null);\n const panelOffsetRef = useRef(0);\n const activePointerIdRef = useRef<number | null>(null);\n const documentListenersRef = useRef<{\n handleEnd: (event: PointerEvent) => void;\n handleMove: (event: PointerEvent) => void;\n } | null>(null);\n // Document listeners are registered once per drag; reading the callbacks through\n // refs keeps them on the latest props without re-registering mid-drag.\n const onMoveToRef = useRef(onMoveTo);\n const onReleaseRef = useRef(onRelease);\n onMoveToRef.current = onMoveTo;\n onReleaseRef.current = onRelease;\n\n const removeDocumentListeners = () => {\n const listeners = documentListenersRef.current;\n if (!listeners) {\n return;\n }\n\n document.removeEventListener('pointermove', listeners.handleMove);\n document.removeEventListener('pointerup', listeners.handleEnd);\n document.removeEventListener('pointercancel', listeners.handleEnd);\n documentListenersRef.current = null;\n };\n\n // Pointer capture routes events through the handle (including over iframes), but\n // some surfaces still drop pointerup. Document-level listeners during an active\n // drag are the release safety net. Only the pointer that started the drag may\n // move or end it.\n const endDrag = (pointerId: number) => {\n if (activePointerIdRef.current !== pointerId) {\n return;\n }\n\n activePointerIdRef.current = null;\n removeDocumentListeners();\n try {\n resizeHandleRef.current?.releasePointerCapture(pointerId);\n } catch {\n // No active capture (or unsupported, e.g. jsdom) — nothing to release.\n }\n\n resizeHandleRef.current?.classList.remove(DRAGGING_CLASSNAME);\n panelOffsetRef.current = 0;\n onReleaseRef.current?.();\n };\n\n const handleDocumentPointerMove = (event: PointerEvent) => {\n if (activePointerIdRef.current !== event.pointerId) {\n return;\n }\n\n onMoveToRef.current(event.clientY + panelOffsetRef.current);\n };\n\n const addDocumentListeners = () => {\n removeDocumentListeners();\n\n const listeners = {\n handleEnd: (event: PointerEvent) => endDrag(event.pointerId),\n handleMove: handleDocumentPointerMove,\n };\n documentListenersRef.current = listeners;\n document.addEventListener('pointermove', listeners.handleMove);\n document.addEventListener('pointerup', listeners.handleEnd);\n document.addEventListener('pointercancel', listeners.handleEnd);\n };\n\n const endDragRef = useRef(endDrag);\n endDragRef.current = endDrag;\n useEffect(() => {\n return () => {\n const activePointerId = activePointerIdRef.current;\n if (activePointerId != null) {\n endDragRef.current(activePointerId);\n }\n };\n }, []);\n\n return (\n <ResizeHandleContainer\n aria-label={ariaLabel}\n onDoubleClick={onDoubleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onDoubleClick?.();\n e.preventDefault();\n }\n }}\n onLostPointerCapture={(e) => endDrag(e.pointerId)}\n onPointerCancel={(e) => endDrag(e.pointerId)}\n onPointerDown={(e) => {\n // Primary button / touch / pen only; ignore secondary and middle clicks,\n // and a second pointer while a drag is already active.\n if (e.button !== 0 || activePointerIdRef.current != null) {\n return;\n }\n const panelRect = panelRef.current?.getBoundingClientRect();\n panelOffsetRef.current = panelRect ? panelRect.top - e.clientY : 0;\n activePointerIdRef.current = e.pointerId;\n resizeHandleRef.current?.classList.add(DRAGGING_CLASSNAME);\n addDocumentListeners();\n try {\n resizeHandleRef.current?.setPointerCapture(e.pointerId);\n } catch {\n // Pointer capture unsupported (e.g. jsdom) — document listeners still\n // route move/up events for the duration of the drag.\n }\n e.preventDefault();\n e.stopPropagation();\n }}\n onPointerUp={(e) => endDrag(e.pointerId)}\n ref={resizeHandleRef}\n role='button'\n tabIndex={0}\n />\n );\n};\n","import { type FC, type ReactNode, useRef } from 'react';\nimport styled from 'styled-components';\n\nimport { IconButton } from '@persona/design-system/components/Button';\nimport { PanelState, type ResizablePanelState } from '@persona/design-system/lib/useResizablePanel';\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ArrowCollapseIcon, ArrowExpandIcon, XIcon } from '@persona/icons';\nimport { semanticScrollbar } from 'design-system/mixins/scrollbar';\n\nimport { ResizeHandle } from './ResizeHandle';\n\ninterface ResizableVerticalPanelProps {\n /** Panel body, rendered in the scrollable content area below the header. */\n children: ReactNode;\n /** Content for the header row, left of the maximize/minimize/close buttons. */\n headerContent?: ReactNode;\n /** State and drag/resize handlers from `useResizablePanel`. */\n hookState: ResizablePanelState;\n /** Minimum panel height in px. */\n minHeight: number;\n}\n\nconst TriStatePanel = styled.div.attrs<{\n customHeight: number | null;\n minHeight: number;\n panelState: PanelState;\n}>(({ customHeight, minHeight, panelState }) => ({\n style: {\n height: panelState === PanelState.Maximized ? '100%' : `${customHeight ?? minHeight}px`,\n },\n}))<{\n customHeight: number | null;\n minHeight: number;\n panelState: PanelState;\n}>`\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n background-color: ${({ theme }) => theme.color.background.primary};\n position: relative;\n min-height: ${({ minHeight }) => minHeight}px;\n width: 100%;\n border-top: 1px solid ${Color.BorderDivider};\n z-index: ${Z_INDICES.topNav};\n`;\n\nconst TopRowContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n box-shadow: inset 0px -1px 0px 0px ${Color.BorderDivider};\n`;\n\nconst TopRightIconsContainer = styled.div`\n display: flex;\n align-items: center;\n padding: 0 ${Spacing[2]};\n gap: ${Spacing[2]};\n flex-direction: row;\n`;\n\nconst ContentContainer = styled.div`\n /* offset by the top row container height */\n height: calc(100% - ${Spacing[6]});\n overflow: auto;\n ${semanticScrollbar}\n display: flex;\n flex-direction: column;\n min-height: 0;\n`;\n\n/**\n * Bottom-anchored panel with a drag-to-resize top edge, a header row, and\n * maximize/minimize/close controls.\n */\nexport const ResizableVerticalPanel: FC<ResizableVerticalPanelProps> = ({\n children,\n headerContent,\n hookState,\n minHeight,\n}) => {\n const {\n collapse,\n handleDragMove: handlePanelDragMove,\n handleDragRelease,\n maximize,\n panelState,\n restore,\n size,\n toggleMaximized,\n } = hookState;\n const panelRef = useRef<HTMLDivElement>(null);\n // Controls only make sense once the drawer is taller than its collapsed header.\n const showControls = (size != null && size > minHeight) || panelState === PanelState.Maximized;\n // Converts the dragged top edge (clientY) into a panel height bounded by the\n // panel's container.\n const handleDragMove = (clientY: number) => {\n const panel = panelRef.current;\n const container = panel?.parentElement;\n if (!panel || !container) {\n return;\n }\n const panelBottom = panel.getBoundingClientRect().bottom;\n const containerTop = container.getBoundingClientRect().top;\n handlePanelDragMove(panelBottom - clientY, panelBottom - containerTop);\n };\n\n return (\n <TriStatePanel\n aria-label='Bottom panel'\n customHeight={size}\n minHeight={minHeight}\n panelState={panelState}\n ref={panelRef}\n role='region'\n >\n <ResizeHandle\n ariaLabel='Drag to resize bottom panel'\n onDoubleClick={toggleMaximized}\n onMoveTo={handleDragMove}\n onRelease={handleDragRelease}\n panelRef={panelRef}\n />\n\n <TopRowContainer>\n {headerContent}\n\n {showControls && (\n <TopRightIconsContainer>\n {panelState === PanelState.Maximized ? (\n <IconButton aria-label='Restore the bottom panel' onClick={restore} size='sm'>\n <ArrowCollapseIcon />\n </IconButton>\n ) : (\n <IconButton aria-label='Maximize the bottom panel' onClick={maximize} size='sm'>\n <ArrowExpandIcon />\n </IconButton>\n )}\n <IconButton aria-label='Close bottom panel' onClick={collapse} size='sm'>\n <XIcon />\n </IconButton>\n </TopRightIconsContainer>\n )}\n </TopRowContainer>\n\n <ContentContainer>{children}</ContentContainer>\n </TriStatePanel>\n );\n};\n","import {\n forwardRef,\n type ReactNode,\n useCallback,\n useEffect,\n useImperativeHandle,\n useState,\n} from 'react';\nimport { useId } from 'react-aria';\nimport styled, { css } from 'styled-components';\n\nimport Badge from '@persona/design-system/components/Badge';\nimport TabBar, { Tab } from '@persona/design-system/components/TabBar';\nimport { PanelState, useResizablePanel } from '@persona/design-system/lib/useResizablePanel';\nimport { Spacing } from '@persona/design-tokens';\n\nimport { ResizableVerticalPanel } from './ResizableVerticalPanel';\n\n// One-pixel panel top border plus the 32px header row sets the collapsed drawer height.\nconst PANEL_MIN_HEIGHT = 33;\n// Where the drawer opens to when a collapsed tab is selected; the user can drag from there.\nconst OPEN_HEIGHT = 200;\n\nexport interface BottomPanelItemProps {\n /** Tab text; also the key `openPanel(label)` looks up. Unique per BottomPanel. */\n label: string;\n /**\n * Tab body. Every panel stays mounted while another tab is selected, so local\n * state (scroll, expanded rows) survives a switch.\n */\n content: ReactNode;\n /** Count shown as a badge on the tab. `0`/`undefined` hides it. */\n badge?: number;\n}\n\nexport interface BottomPanelHandle {\n /** Select the tab and expand the drawer if collapsed. No-op for an unknown label. */\n openPanel: (label: string) => void;\n}\n\nexport interface BottomPanelProps {\n /** Tabs to show, in order. */\n panels: BottomPanelItemProps[];\n}\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n padding-left: ${Spacing[4]};\n`;\n\n// The header row draws the divider edge to edge; the tab bar must not add its own.\nconst HeaderTabBar = styled(TabBar)`\n border-bottom: none;\n`;\n\nconst PanelContent = styled.div<{ $hidden: boolean }>`\n ${({ $hidden }) =>\n $hidden\n ? css`\n position: absolute;\n inset: 0;\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n `\n : css`\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n `}\n`;\n\n/**\n * Resizable drawer anchored to the bottom of its container with one tab per\n * panel. Owns the tab bar, expand/collapse/resize, and always-mounted content;\n * the caller owns what each panel shows.\n */\nconst BottomPanel = forwardRef<BottomPanelHandle, BottomPanelProps>(function BottomPanel(\n { panels },\n ref,\n) {\n const baseId = useId();\n const [selected, setSelected] = useState<string | undefined>(panels[0]?.label);\n // Falls back to the first panel when the selected label has left `panels`, and\n // commits the fallback so the old label does not regain selection if it returns.\n const hasSelected = panels.some((panel) => panel.label === selected);\n const selectedLabel = hasSelected ? selected : panels[0]?.label;\n useEffect(() => {\n if (!hasSelected) {\n setSelected(selectedLabel);\n }\n }, [hasSelected, selectedLabel]);\n\n const resizablePanelState = useResizablePanel({\n initialSize: PANEL_MIN_HEIGHT,\n minSize: PANEL_MIN_HEIGHT,\n });\n const { expandTo, panelState, size } = resizablePanelState;\n\n // Selecting a tab opens a collapsed drawer but leaves a maximized one as is.\n const openPanel = useCallback(\n (label: string) => {\n if (panelState === PanelState.Drawer && (size == null || size <= PANEL_MIN_HEIGHT)) {\n expandTo(OPEN_HEIGHT);\n }\n setSelected(label);\n },\n [expandTo, panelState, size],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n openPanel: (label: string) => {\n if (panels.some((panel) => panel.label === label)) {\n openPanel(label);\n }\n },\n }),\n [openPanel, panels],\n );\n\n return (\n <ResizableVerticalPanel\n headerContent={\n <Header>\n <HeaderTabBar>\n {panels.map((panel, index) => (\n <Tab\n aria-controls={`${baseId}-panel-${index}`}\n badge={panel.badge ? <Badge>{panel.badge}</Badge> : undefined}\n id={`${baseId}-tab-${index}`}\n key={panel.label}\n onClick={() => openPanel(panel.label)}\n selected={selectedLabel === panel.label}\n >\n {panel.label}\n </Tab>\n ))}\n </HeaderTabBar>\n </Header>\n }\n hookState={resizablePanelState}\n minHeight={PANEL_MIN_HEIGHT}\n >\n {panels.map((panel, index) => {\n const isSelected = selectedLabel === panel.label;\n return (\n <PanelContent\n $hidden={!isSelected}\n aria-hidden={!isSelected}\n aria-labelledby={`${baseId}-tab-${index}`}\n id={`${baseId}-panel-${index}`}\n key={panel.label}\n role='tabpanel'\n >\n {panel.content}\n </PanelContent>\n );\n })}\n </ResizableVerticalPanel>\n );\n});\n\nexport default BottomPanel;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { n as BreadcrumbsItemProps, r as BreadcrumbsProps, t as Breadcrumbs } from "../../Breadcrumbs-CP7eUYUy.mjs";
1
+ import { n as BreadcrumbsItemProps, r as BreadcrumbsProps, t as Breadcrumbs } from "../../Breadcrumbs-DUSbT1I7.mjs";
2
2
  export { Breadcrumbs, Breadcrumbs as default, BreadcrumbsItemProps, BreadcrumbsProps };
@@ -1,2 +1,2 @@
1
- import { t as Breadcrumbs } from "../../Breadcrumbs-CrXfUK1V.mjs";
1
+ import { t as Breadcrumbs } from "../../Breadcrumbs-DXS7rU7_.mjs";
2
2
  export { Breadcrumbs, Breadcrumbs as default };
@@ -1,3 +1,3 @@
1
- import { a as SuffixIconContainer, i as StyledButton, n as ButtonChildren, r as ButtonProps, t as Button } from "../../Button-Dhiund3f.mjs";
2
- import { t as IconButton } from "../../IconButton-CjPFhpVG.mjs";
1
+ import { a as SuffixIconContainer, i as StyledButton, n as ButtonChildren, r as ButtonProps, t as Button } from "../../Button-xZ6DC5XC.mjs";
2
+ import { t as IconButton } from "../../IconButton-BUMMN-gH.mjs";
3
3
  export { Button, Button as default, ButtonChildren, ButtonProps, IconButton, StyledButton, SuffixIconContainer };
@@ -1,2 +1,2 @@
1
- import { a as SuffixIconContainer, i as StyledButton, n as Button, r as ButtonChildren, t as IconButton } from "../../IconButton-CqTPMhjV.mjs";
1
+ import { a as SuffixIconContainer, i as StyledButton, n as Button, r as ButtonChildren, t as IconButton } from "../../IconButton-CCLMYWVN.mjs";
2
2
  export { Button, Button as default, ButtonChildren, IconButton, StyledButton, SuffixIconContainer };
@@ -1,8 +1,8 @@
1
1
  import { a as styled, r as css } from "../../styledComponentsInterop-NxwFjeA4.mjs";
2
2
  import { semanticOnly } from "../../lib/semanticColor.mjs";
3
3
  import { withAlpha } from "../../lib/color.mjs";
4
- import { o as buttonPalette, t as IconButton } from "../../IconButton-CqTPMhjV.mjs";
5
- import { n as useFormField } from "../../useFormField-BzhMbl5P.mjs";
4
+ import { o as buttonPalette, t as IconButton } from "../../IconButton-CCLMYWVN.mjs";
5
+ import { n as useFormField } from "../../useFormField-XezSxho_.mjs";
6
6
  import { BorderRadius } from "@persona/design-tokens";
7
7
  import { forwardRef } from "react";
8
8
  import { jsx } from "react/jsx-runtime";
@@ -1,3 +1,3 @@
1
- import { a as Root, i as HeaderProps, n as Header, o as Title, r as HeaderContainer, s as TitleContainer, t as ActionsContainer } from "../../Header-BqEKkEp5.mjs";
2
- import { n as SectionProps, r as _default, t as CardProps } from "../../Card-DCYB_mtR.mjs";
1
+ import { a as Root, i as HeaderProps, n as Header, o as Title, r as HeaderContainer, s as TitleContainer, t as ActionsContainer } from "../../Header-DxJ6TfPw.mjs";
2
+ import { n as SectionProps, r as _default, t as CardProps } from "../../Card-CUeM8Lh8.mjs";
3
3
  export { ActionsContainer, CardProps, Header, HeaderContainer, HeaderProps, Root, SectionProps, Title, TitleContainer, _default as default };
@@ -1,4 +1,4 @@
1
- import { i as TextAction, n as IconAction, r as MenuAction } from "../../Action-Cyo6KCsS.mjs";
1
+ import { i as TextAction, n as IconAction, r as MenuAction } from "../../Action-B-AiHknZ.mjs";
2
2
  import { CARD_HEADING_STICKY_OFFSET } from "../../SectionHeading.mjs";
3
3
  import _default from "../../Card2.mjs";
4
4
  export { CARD_HEADING_STICKY_OFFSET, _default as Card, _default as default, type IconAction, type MenuAction, type TextAction };
@@ -1,2 +1,2 @@
1
- import { n as CARD_HEADING_STICKY_OFFSET, t as Card_default } from "../../CardV2-M3o4BELp.mjs";
1
+ import { n as CARD_HEADING_STICKY_OFFSET, t as Card_default } from "../../CardV2-D9p7D7jX.mjs";
2
2
  export { CARD_HEADING_STICKY_OFFSET, Card_default as Card, Card_default as default };
@@ -1,2 +1,2 @@
1
- import { n as CheckboxProps, t as Checkbox } from "../../Checkbox-fWj7GkBl.mjs";
1
+ import { n as CheckboxProps, t as Checkbox } from "../../Checkbox-DoJpxPEz.mjs";
2
2
  export { Checkbox, Checkbox as default, CheckboxProps };
@@ -1,2 +1,2 @@
1
- import { t as Checkbox } from "../../Checkbox-AjL7ucoR.mjs";
1
+ import { t as Checkbox } from "../../Checkbox-DQynkc_I.mjs";
2
2
  export { Checkbox, Checkbox as default };
@@ -2,7 +2,8 @@ import { a as styled } from "../../styledComponentsInterop-NxwFjeA4.mjs";
2
2
  import { t as useToggle } from "../../useToggle-DUHQjohK.mjs";
3
3
  import { Z_INDICES } from "../../lib/zindex.mjs";
4
4
  import { focusOutline } from "../../mixins/focus.mjs";
5
- import { n as Button } from "../../IconButton-CqTPMhjV.mjs";
5
+ import { semanticScrollbar } from "../../mixins/scrollbar.mjs";
6
+ import { n as Button } from "../../IconButton-CCLMYWVN.mjs";
6
7
  import PrismWithLanguages_default from "./PrismWithLanguages.mjs";
7
8
  import { Color, Spacing } from "@persona/design-tokens";
8
9
  import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
@@ -62,6 +63,7 @@ const Pre = styled.pre`
62
63
  text-align: left;
63
64
  padding: 1rem; // Custom padding to match typical code block formatting
64
65
  overflow: auto;
66
+ ${semanticScrollbar}
65
67
 
66
68
  a {
67
69
  /* overwrite dashboard global styles */
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Prism","ChevronRightIcon","ChevronDownIcon"],"sources":["../../../components/CodeHighlight/CodeHighlight.tsx","../../../components/CodeHighlight/index.ts"],"sourcesContent":["import { Highlight, type Language, type PrismTheme, themes } from 'prism-react-renderer';\nimport { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport Button from '@persona/design-system/components/Button';\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { focusOutline } from '@persona/design-system/mixins/focus';\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ArrowCollapseIcon, ArrowExpandIcon } from '@persona/icons';\nimport { ChevronDownIcon, ChevronRightIcon } from '@persona/icons/12px';\nimport useToggle from 'design-system/lib/useToggle';\n\nimport Prism from './PrismWithLanguages';\n\nconst LINE_HEIGHT = 1.5;\n\nexport const Wrapper = styled.div`\n font-family: ${({ theme }) => theme.text.fontFamily.mono};\n font-size: ${({ theme }) => theme.text.paragraph.sm.fontSize};\n line-height: ${LINE_HEIGHT};\n text-align: center;\n position: relative;\n`;\n\nexport const ExpandButtonContainer = styled.div`\n position: absolute;\n top: ${Spacing[2]};\n right: ${Spacing[4]};\n display: flex;\n gap: ${Spacing[1]};\n z-index: ${Z_INDICES.withShadow};\n`;\n\nexport const CollapseTriangle = styled.button<{ $isCollapsed: boolean }>`\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n margin-right: ${Spacing[1]};\n color: ${Color.TextSecondary};\n background: none;\n border: none;\n padding: 0;\n\n &:hover {\n color: ${Color.TextActive};\n }\n\n ${focusOutline}\n`;\n\nexport const Pre = styled.pre<{ expanded: boolean; rowsToShow?: number }>`\n max-height: ${({ theme, expanded, rowsToShow }) => {\n if (expanded || rowsToShow == null) {\n return 'unset';\n }\n\n const charHeight = parseFloat(theme.text.paragraph.sm.fontSize);\n const rowHeight = charHeight * LINE_HEIGHT;\n const marginHeight = charHeight * 2; // margin is 1rem\n // Row height + top/bottom padding\n return `${rowsToShow * rowHeight + marginHeight}px`;\n }};\n\n border-radius: ${({ theme }) => theme.element.borderRadius};\n font-family: inherit;\n text-align: left;\n padding: 1rem; // Custom padding to match typical code block formatting\n overflow: auto;\n\n a {\n /* overwrite dashboard global styles */\n font-size: inherit;\n line-height: inherit;\n text-decoration: underline;\n }\n`;\n\nexport const Line = styled.div`\n display: table-row;\n`;\n\nexport const LineNo = styled.span`\n display: table-cell;\n text-align: right;\n padding-right: 1rem; // Custom padding for line number gutter spacing\n user-select: none;\n opacity: 0.5;\n`;\n\nexport const LineContent = styled.span`\n display: table-cell;\n`;\n\nexport const IndentSpacer = styled.span`\n display: inline-block;\n width: 16px; // Match collapse triangle icon (12px) + margin (4px) for alignment\n`;\n\nexport const CollapsedItemCount = styled.span`\n color: ${Color.TextSecondary};\n`;\n\n// mirrored from lib -- not exported\ntype Token = {\n types: string[];\n content: string;\n empty?: boolean;\n};\n\ntype CollapsibleRegion = {\n startLine: number;\n endLine: number;\n type: 'object' | 'array';\n itemCount: number;\n};\n\n// Analyzes JSON structure from Prism tokens to find collapsible regions\n// This correctly handles brackets/braces inside strings by using tokenization\nconst analyzeJsonStructure = (\n tokens: Token[][],\n jsonString: string,\n): Map<number, CollapsibleRegion> => {\n const collapsibleRegions = new Map<number, CollapsibleRegion>();\n\n try {\n // Validate JSON is parseable\n const parsed = JSON.parse(jsonString);\n\n // Use a stack to track opening brackets/braces with their line numbers\n const stack: Array<{ line: number; char: '{' | '['; depth: number }> = [];\n let depth = 0;\n\n tokens.forEach((line, lineNum) => {\n line.forEach((token) => {\n // Only process punctuation tokens (not strings)\n if (token.types.includes('punctuation')) {\n if (token.content === '{' || token.content === '[') {\n stack.push({ line: lineNum, char: token.content, depth });\n depth++;\n } else if (token.content === '}' || token.content === ']') {\n depth--;\n const opening = stack.pop();\n\n if (opening && opening.line < lineNum) {\n // This is a multi-line object/array\n const startLine = opening.line;\n const endLine = lineNum;\n\n // Skip root-level (depth 0) regions\n if (opening.depth === 0) {\n return;\n }\n\n // Count items in this region\n const itemCount = countItemsInRegion(\n parsed,\n tokens,\n startLine,\n endLine,\n opening.char,\n );\n\n // Only add regions with items (skip empty objects/arrays)\n if (itemCount > 0) {\n collapsibleRegions.set(startLine, {\n startLine,\n endLine,\n type: opening.char === '{' ? 'object' : 'array',\n itemCount,\n });\n }\n }\n }\n }\n });\n });\n } catch {\n // If JSON is invalid, return empty map\n return new Map();\n }\n\n return collapsibleRegions;\n};\n\n// Count items in a collapsible region by counting commas at the same depth\nconst countItemsInRegion = (\n _parsed: unknown,\n tokens: Token[][],\n startLine: number,\n endLine: number,\n openChar: '{' | '[',\n): number => {\n let itemCount = 0;\n let depth = 0;\n\n // Iterate through lines in the region\n for (let i = startLine; i <= endLine; i++) {\n tokens[i]?.forEach((token) => {\n if (!token.types.includes('punctuation')) {\n return;\n }\n\n // Track depth\n if (token.content === openChar) {\n depth++;\n } else if (token.content === (openChar === '{' ? '}' : ']')) {\n depth--;\n }\n\n // Count commas at depth 1 (immediate children)\n if (token.content === ',' && depth === 1) {\n itemCount++;\n }\n });\n }\n\n // Items = commas + 1 (if any content exists)\n return itemCount > 0 ? itemCount + 1 : 0;\n};\n\ninterface CodeHighlightProps {\n id?: string;\n children: string;\n language?: Language;\n rowsToShow?: number;\n light?: boolean;\n className?: string;\n resolveEntityLink?: (token: string) => string | undefined;\n}\n\nconst CodeHighlight = ({\n id,\n children = '',\n language = 'markup',\n rowsToShow,\n light = false,\n className,\n resolveEntityLink,\n}: CodeHighlightProps) => {\n const [expanded, { toggle: toggleExpanded }] = useToggle();\n const rowCount = useMemo(() => children.match(/\\n/g)?.length ?? 0, [children]);\n\n // JSON folding state\n const [collapsedLines, setCollapsedLines] = useState<Set<number>>(new Set());\n const [hasCollapsibleRegions, setHasCollapsibleRegions] = useState(false);\n const collapsibleRegionsRef = useRef<Map<number, CollapsibleRegion>>(new Map());\n\n // Sync hasCollapsibleRegions state from ref after render (avoids state update during render)\n useLayoutEffect(() => {\n if (language !== 'json') {\n if (hasCollapsibleRegions) {\n setHasCollapsibleRegions(false);\n }\n return;\n }\n\n const hasRegions = collapsibleRegionsRef.current.size > 0;\n if (hasRegions !== hasCollapsibleRegions) {\n setHasCollapsibleRegions(hasRegions);\n }\n });\n\n const toggleLineCollapse = useCallback(\n (lineNumber: number, event?: React.KeyboardEvent | React.MouseEvent) => {\n // Prevent default if it's a keyboard event to avoid page scrolling\n if (event && 'key' in event) {\n event.preventDefault();\n }\n\n setCollapsedLines((prev) => {\n const next = new Set(prev);\n if (next.has(lineNumber)) {\n next.delete(lineNumber);\n } else {\n next.add(lineNumber);\n }\n return next;\n });\n },\n [],\n );\n\n const collapseAll = useCallback(() => {\n setCollapsedLines(new Set(collapsibleRegionsRef.current.keys()));\n }, []);\n\n const expandAll = useCallback(() => {\n setCollapsedLines(new Set());\n }, []);\n\n const allowExpanding = rowsToShow != null && rowsToShow < rowCount;\n\n return (\n <Wrapper className={className}>\n {(allowExpanding || hasCollapsibleRegions) && (\n <ExpandButtonContainer>\n {hasCollapsibleRegions && (\n <>\n <Button\n id={`code-highlight__${id}__collapse-all`}\n size='sm'\n variant='inverse'\n onClick={collapseAll}\n aria-label='Collapse all JSON regions'\n data-test='code-highlight__collapse-all'\n >\n Collapse All\n </Button>\n <Button\n id={`code-highlight__${id}__expand-all`}\n size='sm'\n variant='inverse'\n onClick={expandAll}\n aria-label='Expand all JSON regions'\n data-test='code-highlight__expand-all'\n >\n Expand All\n </Button>\n </>\n )}\n {allowExpanding && (\n <Button\n id={`code-highlight__${id}__expand-button`}\n size='sm'\n width='icon'\n onClick={toggleExpanded}\n variant='inverse'\n data-test='code-highlight__expand'\n >\n {expanded ? <ArrowCollapseIcon /> : <ArrowExpandIcon />}\n </Button>\n )}\n </ExpandButtonContainer>\n )}\n <Highlight\n data-test='code-highlight'\n theme={light ? themes.nightOwlLight : THEME}\n code={children}\n prism={Prism}\n language={language}\n >\n {({ className, style, tokens, getLineProps, getTokenProps }) => {\n // Compute collapsible regions from tokens (only for JSON)\n const collapsibleRegions =\n language === 'json' ? analyzeJsonStructure(tokens, children) : new Map();\n\n // Update ref (state will be synced in useLayoutEffect)\n collapsibleRegionsRef.current = collapsibleRegions;\n\n const isJsonFoldingEnabled = collapsibleRegions.size > 0;\n\n // Determine which lines should be hidden based on collapsed state\n const hiddenLines = new Set<number>();\n collapsedLines.forEach((collapsedLine) => {\n const region = collapsibleRegions.get(collapsedLine);\n if (region) {\n // Hide all lines between start and end (exclusive)\n for (let i = region.startLine + 1; i <= region.endLine; i++) {\n hiddenLines.add(i);\n }\n }\n });\n\n return (\n <Pre\n className={className}\n style={style}\n data-test={id}\n expanded={expanded}\n rowsToShow={rowsToShow}\n >\n {tokens.map((line, i) => {\n // Skip hidden lines\n if (hiddenLines.has(i)) {\n return null;\n }\n\n const region = collapsibleRegions.get(i);\n const isCollapsed = collapsedLines.has(i);\n const isCollapsible = region != null;\n\n return (\n <Line key={i} {...getLineProps({ line, key: i })}>\n <LineNo>{i + 1}</LineNo>\n <LineContent>\n {isCollapsible && (\n <CollapseTriangle\n $isCollapsed={isCollapsed}\n onClick={(e) => toggleLineCollapse(i, e)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n toggleLineCollapse(i, e);\n }\n }}\n aria-expanded={!isCollapsed}\n aria-label={`${isCollapsed ? 'Expand' : 'Collapse'} JSON ${region?.type} with ${region?.itemCount} items`}\n type='button'\n tabIndex={0}\n data-test={`code-highlight__collapse-toggle__${i}`}\n >\n {isCollapsed ? <ChevronRightIcon /> : <ChevronDownIcon />}\n </CollapseTriangle>\n )}\n {!isCollapsible && isJsonFoldingEnabled && <IndentSpacer />}\n {isCollapsed && region ? (\n // Render collapsed representation\n <>\n {line.map((token, key) => {\n const tokenProps = getTokenProps({ token, key });\n // Only render up to the opening bracket\n if (token.content === '{' || token.content === '[') {\n return (\n <span key={key}>\n <span {...tokenProps} />\n <CollapsedItemCount>\n {` ${region.itemCount} ${region.itemCount === 1 ? 'item' : 'items'} `}\n </CollapsedItemCount>\n <span {...tokenProps}>\n {region.type === 'object' ? '}' : ']'}\n </span>\n </span>\n );\n }\n // Render tokens before the bracket\n return <span key={key} {...tokenProps} />;\n })}\n </>\n ) : (\n // Render normal line\n <>\n {line.map((token, key) => {\n const tokenProps = getTokenProps({ token, key });\n const tokenLink =\n resolveEntityLink != null && token.types[0] === 'string'\n ? resolveEntityLink(\n token.content.slice(1, token.content.length - 1),\n )\n : undefined;\n\n return tokenLink != null ? (\n <span {...tokenProps}>\n &quot;\n <Link to={tokenLink} {...tokenProps}>\n {tokenProps.children.slice(1, tokenProps.children.length - 1)}\n </Link>\n &quot;\n </span>\n ) : (\n <span key={key} {...tokenProps} />\n );\n })}\n </>\n )}\n </LineContent>\n </Line>\n );\n })}\n </Pre>\n );\n }}\n </Highlight>\n </Wrapper>\n );\n};\n\nexport default CodeHighlight;\n\n// Based off of https://github.com/FormidableLabs/prism-react-renderer/blob/master/src/themes/duotoneDark.js\n// NOTE: This theme uses hardcoded hex colors instead of design tokens because it's a specialized\n// syntax highlighting theme for the prism-react-renderer library. The colors are carefully chosen\n// for code readability and are not semantic UI colors from our design system.\nconst THEME: PrismTheme = {\n plain: {\n backgroundColor: '#161320', // edited\n color: '#9a86fd',\n },\n styles: [\n {\n types: ['comment', 'prolog', 'doctype', 'cdata', 'punctuation'],\n style: {\n color: '#6c6783',\n },\n },\n {\n types: ['namespace'],\n style: {\n opacity: 0.7,\n },\n },\n {\n types: ['tag', 'operator', 'number', 'keyword'],\n style: {\n color: '#e09142',\n fontWeight: 'bold', // added for more contrast\n },\n },\n {\n types: ['property', 'function'],\n style: {\n color: '#9a86fd',\n },\n },\n {\n types: ['tag-id', 'selector', 'atrule-id'],\n style: {\n color: '#eeebff',\n },\n },\n {\n types: ['attr-name'],\n style: {\n color: '#c4b9fe',\n },\n },\n {\n types: [\n 'boolean',\n 'string',\n 'entity',\n 'url',\n 'attr-value',\n 'control',\n 'directive',\n 'unit',\n 'statement',\n 'regex',\n 'at-rule',\n 'placeholder',\n 'variable',\n ],\n style: {\n color: '#ffcc99',\n },\n },\n {\n types: ['deleted'],\n style: {\n textDecorationLine: 'line-through',\n },\n },\n {\n types: ['inserted'],\n style: {\n textDecorationLine: 'underline',\n },\n },\n {\n types: ['italic'],\n style: {\n fontStyle: 'italic',\n },\n },\n {\n types: ['important', 'bold'],\n style: {\n fontWeight: 'bold',\n },\n },\n {\n types: ['important'],\n style: {\n color: '#c4b9fe',\n },\n },\n ],\n};\n","import CodeHighlight from './CodeHighlight';\n\nexport default CodeHighlight;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["Prism","ChevronRightIcon","ChevronDownIcon"],"sources":["../../../components/CodeHighlight/CodeHighlight.tsx","../../../components/CodeHighlight/index.ts"],"sourcesContent":["import { Highlight, type Language, type PrismTheme, themes } from 'prism-react-renderer';\nimport { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport Button from '@persona/design-system/components/Button';\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { focusOutline } from '@persona/design-system/mixins/focus';\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ArrowCollapseIcon, ArrowExpandIcon } from '@persona/icons';\nimport { ChevronDownIcon, ChevronRightIcon } from '@persona/icons/12px';\nimport useToggle from 'design-system/lib/useToggle';\nimport { semanticScrollbar } from 'design-system/mixins/scrollbar';\n\nimport Prism from './PrismWithLanguages';\n\nconst LINE_HEIGHT = 1.5;\n\nexport const Wrapper = styled.div`\n font-family: ${({ theme }) => theme.text.fontFamily.mono};\n font-size: ${({ theme }) => theme.text.paragraph.sm.fontSize};\n line-height: ${LINE_HEIGHT};\n text-align: center;\n position: relative;\n`;\n\nexport const ExpandButtonContainer = styled.div`\n position: absolute;\n top: ${Spacing[2]};\n right: ${Spacing[4]};\n display: flex;\n gap: ${Spacing[1]};\n z-index: ${Z_INDICES.withShadow};\n`;\n\nexport const CollapseTriangle = styled.button<{ $isCollapsed: boolean }>`\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n margin-right: ${Spacing[1]};\n color: ${Color.TextSecondary};\n background: none;\n border: none;\n padding: 0;\n\n &:hover {\n color: ${Color.TextActive};\n }\n\n ${focusOutline}\n`;\n\nexport const Pre = styled.pre<{ expanded: boolean; rowsToShow?: number }>`\n max-height: ${({ theme, expanded, rowsToShow }) => {\n if (expanded || rowsToShow == null) {\n return 'unset';\n }\n\n const charHeight = parseFloat(theme.text.paragraph.sm.fontSize);\n const rowHeight = charHeight * LINE_HEIGHT;\n const marginHeight = charHeight * 2; // margin is 1rem\n // Row height + top/bottom padding\n return `${rowsToShow * rowHeight + marginHeight}px`;\n }};\n\n border-radius: ${({ theme }) => theme.element.borderRadius};\n font-family: inherit;\n text-align: left;\n padding: 1rem; // Custom padding to match typical code block formatting\n overflow: auto;\n ${semanticScrollbar}\n\n a {\n /* overwrite dashboard global styles */\n font-size: inherit;\n line-height: inherit;\n text-decoration: underline;\n }\n`;\n\nexport const Line = styled.div`\n display: table-row;\n`;\n\nexport const LineNo = styled.span`\n display: table-cell;\n text-align: right;\n padding-right: 1rem; // Custom padding for line number gutter spacing\n user-select: none;\n opacity: 0.5;\n`;\n\nexport const LineContent = styled.span`\n display: table-cell;\n`;\n\nexport const IndentSpacer = styled.span`\n display: inline-block;\n width: 16px; // Match collapse triangle icon (12px) + margin (4px) for alignment\n`;\n\nexport const CollapsedItemCount = styled.span`\n color: ${Color.TextSecondary};\n`;\n\n// mirrored from lib -- not exported\ntype Token = {\n types: string[];\n content: string;\n empty?: boolean;\n};\n\ntype CollapsibleRegion = {\n startLine: number;\n endLine: number;\n type: 'object' | 'array';\n itemCount: number;\n};\n\n// Analyzes JSON structure from Prism tokens to find collapsible regions\n// This correctly handles brackets/braces inside strings by using tokenization\nconst analyzeJsonStructure = (\n tokens: Token[][],\n jsonString: string,\n): Map<number, CollapsibleRegion> => {\n const collapsibleRegions = new Map<number, CollapsibleRegion>();\n\n try {\n // Validate JSON is parseable\n const parsed = JSON.parse(jsonString);\n\n // Use a stack to track opening brackets/braces with their line numbers\n const stack: Array<{ line: number; char: '{' | '['; depth: number }> = [];\n let depth = 0;\n\n tokens.forEach((line, lineNum) => {\n line.forEach((token) => {\n // Only process punctuation tokens (not strings)\n if (token.types.includes('punctuation')) {\n if (token.content === '{' || token.content === '[') {\n stack.push({ line: lineNum, char: token.content, depth });\n depth++;\n } else if (token.content === '}' || token.content === ']') {\n depth--;\n const opening = stack.pop();\n\n if (opening && opening.line < lineNum) {\n // This is a multi-line object/array\n const startLine = opening.line;\n const endLine = lineNum;\n\n // Skip root-level (depth 0) regions\n if (opening.depth === 0) {\n return;\n }\n\n // Count items in this region\n const itemCount = countItemsInRegion(\n parsed,\n tokens,\n startLine,\n endLine,\n opening.char,\n );\n\n // Only add regions with items (skip empty objects/arrays)\n if (itemCount > 0) {\n collapsibleRegions.set(startLine, {\n startLine,\n endLine,\n type: opening.char === '{' ? 'object' : 'array',\n itemCount,\n });\n }\n }\n }\n }\n });\n });\n } catch {\n // If JSON is invalid, return empty map\n return new Map();\n }\n\n return collapsibleRegions;\n};\n\n// Count items in a collapsible region by counting commas at the same depth\nconst countItemsInRegion = (\n _parsed: unknown,\n tokens: Token[][],\n startLine: number,\n endLine: number,\n openChar: '{' | '[',\n): number => {\n let itemCount = 0;\n let depth = 0;\n\n // Iterate through lines in the region\n for (let i = startLine; i <= endLine; i++) {\n tokens[i]?.forEach((token) => {\n if (!token.types.includes('punctuation')) {\n return;\n }\n\n // Track depth\n if (token.content === openChar) {\n depth++;\n } else if (token.content === (openChar === '{' ? '}' : ']')) {\n depth--;\n }\n\n // Count commas at depth 1 (immediate children)\n if (token.content === ',' && depth === 1) {\n itemCount++;\n }\n });\n }\n\n // Items = commas + 1 (if any content exists)\n return itemCount > 0 ? itemCount + 1 : 0;\n};\n\ninterface CodeHighlightProps {\n id?: string;\n children: string;\n language?: Language;\n rowsToShow?: number;\n light?: boolean;\n className?: string;\n resolveEntityLink?: (token: string) => string | undefined;\n}\n\nconst CodeHighlight = ({\n id,\n children = '',\n language = 'markup',\n rowsToShow,\n light = false,\n className,\n resolveEntityLink,\n}: CodeHighlightProps) => {\n const [expanded, { toggle: toggleExpanded }] = useToggle();\n const rowCount = useMemo(() => children.match(/\\n/g)?.length ?? 0, [children]);\n\n // JSON folding state\n const [collapsedLines, setCollapsedLines] = useState<Set<number>>(new Set());\n const [hasCollapsibleRegions, setHasCollapsibleRegions] = useState(false);\n const collapsibleRegionsRef = useRef<Map<number, CollapsibleRegion>>(new Map());\n\n // Sync hasCollapsibleRegions state from ref after render (avoids state update during render)\n useLayoutEffect(() => {\n if (language !== 'json') {\n if (hasCollapsibleRegions) {\n setHasCollapsibleRegions(false);\n }\n return;\n }\n\n const hasRegions = collapsibleRegionsRef.current.size > 0;\n if (hasRegions !== hasCollapsibleRegions) {\n setHasCollapsibleRegions(hasRegions);\n }\n });\n\n const toggleLineCollapse = useCallback(\n (lineNumber: number, event?: React.KeyboardEvent | React.MouseEvent) => {\n // Prevent default if it's a keyboard event to avoid page scrolling\n if (event && 'key' in event) {\n event.preventDefault();\n }\n\n setCollapsedLines((prev) => {\n const next = new Set(prev);\n if (next.has(lineNumber)) {\n next.delete(lineNumber);\n } else {\n next.add(lineNumber);\n }\n return next;\n });\n },\n [],\n );\n\n const collapseAll = useCallback(() => {\n setCollapsedLines(new Set(collapsibleRegionsRef.current.keys()));\n }, []);\n\n const expandAll = useCallback(() => {\n setCollapsedLines(new Set());\n }, []);\n\n const allowExpanding = rowsToShow != null && rowsToShow < rowCount;\n\n return (\n <Wrapper className={className}>\n {(allowExpanding || hasCollapsibleRegions) && (\n <ExpandButtonContainer>\n {hasCollapsibleRegions && (\n <>\n <Button\n id={`code-highlight__${id}__collapse-all`}\n size='sm'\n variant='inverse'\n onClick={collapseAll}\n aria-label='Collapse all JSON regions'\n data-test='code-highlight__collapse-all'\n >\n Collapse All\n </Button>\n <Button\n id={`code-highlight__${id}__expand-all`}\n size='sm'\n variant='inverse'\n onClick={expandAll}\n aria-label='Expand all JSON regions'\n data-test='code-highlight__expand-all'\n >\n Expand All\n </Button>\n </>\n )}\n {allowExpanding && (\n <Button\n id={`code-highlight__${id}__expand-button`}\n size='sm'\n width='icon'\n onClick={toggleExpanded}\n variant='inverse'\n data-test='code-highlight__expand'\n >\n {expanded ? <ArrowCollapseIcon /> : <ArrowExpandIcon />}\n </Button>\n )}\n </ExpandButtonContainer>\n )}\n <Highlight\n data-test='code-highlight'\n theme={light ? themes.nightOwlLight : THEME}\n code={children}\n prism={Prism}\n language={language}\n >\n {({ className, style, tokens, getLineProps, getTokenProps }) => {\n // Compute collapsible regions from tokens (only for JSON)\n const collapsibleRegions =\n language === 'json' ? analyzeJsonStructure(tokens, children) : new Map();\n\n // Update ref (state will be synced in useLayoutEffect)\n collapsibleRegionsRef.current = collapsibleRegions;\n\n const isJsonFoldingEnabled = collapsibleRegions.size > 0;\n\n // Determine which lines should be hidden based on collapsed state\n const hiddenLines = new Set<number>();\n collapsedLines.forEach((collapsedLine) => {\n const region = collapsibleRegions.get(collapsedLine);\n if (region) {\n // Hide all lines between start and end (exclusive)\n for (let i = region.startLine + 1; i <= region.endLine; i++) {\n hiddenLines.add(i);\n }\n }\n });\n\n return (\n <Pre\n className={className}\n style={style}\n data-test={id}\n expanded={expanded}\n rowsToShow={rowsToShow}\n >\n {tokens.map((line, i) => {\n // Skip hidden lines\n if (hiddenLines.has(i)) {\n return null;\n }\n\n const region = collapsibleRegions.get(i);\n const isCollapsed = collapsedLines.has(i);\n const isCollapsible = region != null;\n\n return (\n <Line key={i} {...getLineProps({ line, key: i })}>\n <LineNo>{i + 1}</LineNo>\n <LineContent>\n {isCollapsible && (\n <CollapseTriangle\n $isCollapsed={isCollapsed}\n onClick={(e) => toggleLineCollapse(i, e)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n toggleLineCollapse(i, e);\n }\n }}\n aria-expanded={!isCollapsed}\n aria-label={`${isCollapsed ? 'Expand' : 'Collapse'} JSON ${region?.type} with ${region?.itemCount} items`}\n type='button'\n tabIndex={0}\n data-test={`code-highlight__collapse-toggle__${i}`}\n >\n {isCollapsed ? <ChevronRightIcon /> : <ChevronDownIcon />}\n </CollapseTriangle>\n )}\n {!isCollapsible && isJsonFoldingEnabled && <IndentSpacer />}\n {isCollapsed && region ? (\n // Render collapsed representation\n <>\n {line.map((token, key) => {\n const tokenProps = getTokenProps({ token, key });\n // Only render up to the opening bracket\n if (token.content === '{' || token.content === '[') {\n return (\n <span key={key}>\n <span {...tokenProps} />\n <CollapsedItemCount>\n {` ${region.itemCount} ${region.itemCount === 1 ? 'item' : 'items'} `}\n </CollapsedItemCount>\n <span {...tokenProps}>\n {region.type === 'object' ? '}' : ']'}\n </span>\n </span>\n );\n }\n // Render tokens before the bracket\n return <span key={key} {...tokenProps} />;\n })}\n </>\n ) : (\n // Render normal line\n <>\n {line.map((token, key) => {\n const tokenProps = getTokenProps({ token, key });\n const tokenLink =\n resolveEntityLink != null && token.types[0] === 'string'\n ? resolveEntityLink(\n token.content.slice(1, token.content.length - 1),\n )\n : undefined;\n\n return tokenLink != null ? (\n <span {...tokenProps}>\n &quot;\n <Link to={tokenLink} {...tokenProps}>\n {tokenProps.children.slice(1, tokenProps.children.length - 1)}\n </Link>\n &quot;\n </span>\n ) : (\n <span key={key} {...tokenProps} />\n );\n })}\n </>\n )}\n </LineContent>\n </Line>\n );\n })}\n </Pre>\n );\n }}\n </Highlight>\n </Wrapper>\n );\n};\n\nexport default CodeHighlight;\n\n// Based off of https://github.com/FormidableLabs/prism-react-renderer/blob/master/src/themes/duotoneDark.js\n// NOTE: This theme uses hardcoded hex colors instead of design tokens because it's a specialized\n// syntax highlighting theme for the prism-react-renderer library. The colors are carefully chosen\n// for code readability and are not semantic UI colors from our design system.\nconst THEME: PrismTheme = {\n plain: {\n backgroundColor: '#161320', // edited\n color: '#9a86fd',\n },\n styles: [\n {\n types: ['comment', 'prolog', 'doctype', 'cdata', 'punctuation'],\n style: {\n color: '#6c6783',\n },\n },\n {\n types: ['namespace'],\n style: {\n opacity: 0.7,\n },\n },\n {\n types: ['tag', 'operator', 'number', 'keyword'],\n style: {\n color: '#e09142',\n fontWeight: 'bold', // added for more contrast\n },\n },\n {\n types: ['property', 'function'],\n style: {\n color: '#9a86fd',\n },\n },\n {\n types: ['tag-id', 'selector', 'atrule-id'],\n style: {\n color: '#eeebff',\n },\n },\n {\n types: ['attr-name'],\n style: {\n color: '#c4b9fe',\n },\n },\n {\n types: [\n 'boolean',\n 'string',\n 'entity',\n 'url',\n 'attr-value',\n 'control',\n 'directive',\n 'unit',\n 'statement',\n 'regex',\n 'at-rule',\n 'placeholder',\n 'variable',\n ],\n style: {\n color: '#ffcc99',\n },\n },\n {\n types: ['deleted'],\n style: {\n textDecorationLine: 'line-through',\n },\n },\n {\n types: ['inserted'],\n style: {\n textDecorationLine: 'underline',\n },\n },\n {\n types: ['italic'],\n style: {\n fontStyle: 'italic',\n },\n },\n {\n types: ['important', 'bold'],\n style: {\n fontWeight: 'bold',\n },\n },\n {\n types: ['important'],\n style: {\n color: '#c4b9fe',\n },\n },\n ],\n};\n","import CodeHighlight from './CodeHighlight';\n\nexport default CodeHighlight;\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { D as flattenOptions, a as ComboboxOptionGroup, i as ComboboxOption, o as ComboboxOptionsOrGroups, t as CaretButton } from "../../ComboboxBase-Evo0FRxP.mjs";
2
- import { n as ComboboxProps, t as Combobox } from "../../Combobox-CC-Osr57.mjs";
1
+ import { D as flattenOptions, a as ComboboxOptionGroup, i as ComboboxOption, o as ComboboxOptionsOrGroups, t as CaretButton } from "../../ComboboxBase-BMCY6O7Y.mjs";
2
+ import { n as ComboboxProps, t as Combobox } from "../../Combobox-D7hyf-jA.mjs";
3
3
  export { CaretButton, Combobox, Combobox as default, ComboboxOption, ComboboxOptionGroup, ComboboxOptionsOrGroups, ComboboxProps, flattenOptions };
@@ -1,2 +1,2 @@
1
- import { n as CaretButton, r as flattenOptions, t as Combobox } from "../../Combobox-C2b9u955.mjs";
1
+ import { n as CaretButton, r as flattenOptions, t as Combobox } from "../../Combobox-C_kCY3P3.mjs";
2
2
  export { CaretButton, Combobox, Combobox as default, flattenOptions };
@@ -1,3 +1,3 @@
1
- import { n as useFormGroup, t as FormGroupContext } from "../../useFormGroup-CH3kiXoa.mjs";
2
- import { t as ConfigFormGroup } from "../../ConfigFormGroup-Cz7GeTYd.mjs";
1
+ import { n as useFormGroup, t as FormGroupContext } from "../../useFormGroup-C7Cax8zO.mjs";
2
+ import { t as ConfigFormGroup } from "../../ConfigFormGroup-DLOZOuLf.mjs";
3
3
  export { ConfigFormGroup, ConfigFormGroup as default, FormGroupContext, useFormGroup };
@@ -1,20 +1,20 @@
1
- import { n as ControlBarProps, t as ControlBar } from "../../../ControlBar-B7j9sOr9.mjs";
2
- import { n as DataTableCompactBar } from "../../../CompactBar-D_2qMK4y.mjs";
3
- import { i as TableViewConfigurationProps, n as TableViewConfigurationDropdown, r as TableViewConfigurationDropdownProps, t as TableViewConfiguration } from "../../../TableViewConfigurationDropdown-BRbOcVNc.mjs";
4
- import { i as useTableControls, n as TableControlsContextProps, r as TableControlsProvider, t as TableControlsContext } from "../../../TableControlsContext-Cbh8wear.mjs";
5
- import { t as dateRuleIntent } from "../../../date-rule-intent-gKmuxMVA.mjs";
6
- import { a as FilterField, c as FilterOperator, d as FilterRuleValueChange, f as FilterSize, h as isEmptyState, i as EMPTY_FILTER_STATE, l as FilterRule, m as TopLevelFilterRule, n as CompoundExpression, o as FilterFieldSource, p as FilterStateV2, r as DateRangeFilterValue, s as FilterFieldType, t as AndGroup, u as FilterRuleValue } from "../../../types-BEjWTkZV.mjs";
7
- import { t as resolveDateRangeRuleValue } from "../../../date-range-rule-value-C4ir2Y8W.mjs";
8
- import { n as RawFieldInfo, r as buildFieldRegistry, t as FieldRegistry } from "../../../FieldRegistry-bKxrF1gC.mjs";
9
- import { n as ValueControlResolver, r as resolveValueControl, t as ResolveValueControlOptions } from "../../../value-control-resolver-BiyhB8zt.mjs";
10
- import { t as FilterBar } from "../../../FilterBar-DhlBLWxw.mjs";
11
- import { t as FilterBarProps } from "../../../index-c0aXmZV9.mjs";
12
- import { a as useFilterBarSize, i as FilterSizeTokens, t as FILTER_SIZE_TOKENS } from "../../../filter-size-context-BOpH6pBm.mjs";
13
- import { n as PillShellProps, t as PillShell } from "../../../PillShell-BQC-k7Rl.mjs";
14
- import { a as getDefaultOperatorForType, c as getOperatorsForType, d as isValuelessOperator, f as reconcileValueForOperator, l as isCompleteDateRange, r as emptyValueForRule, s as getOperatorsForField, u as isRangeOperator } from "../../../operators-1_jTgYRX.mjs";
15
- import { a as decodeFilterStateFromUrl, i as decodeFilterStateFromString, n as UrlStateCodecResult, o as encodeFilterStateToUrlParam, r as applyFilterStateToSearchParams, t as FILTER_STATE_URL_PARAM } from "../../../url-state-CHK2N2fA.mjs";
16
- import { n as UseFilterStateV2Result, r as useFilterStateV2, t as UseFilterStateV2Options } from "../../../useFilterStateV2-B26e5iUx.mjs";
17
- import { n as isFilterStateV2, r as pruneToRegistry, t as hasCompleteValue } from "../../../validation-B-Om4ANo.mjs";
18
- import { t as ValueControlProps } from "../../../types-3iEDsymE.mjs";
19
- import { t as TableControls } from "../../../TableControls-cswMgBAr.mjs";
1
+ import { n as ControlBarProps, t as ControlBar } from "../../../ControlBar-Cegjxa6-.mjs";
2
+ import { n as DataTableCompactBar } from "../../../CompactBar-DjFaUAsN.mjs";
3
+ import { i as TableViewConfigurationProps, n as TableViewConfigurationDropdown, r as TableViewConfigurationDropdownProps, t as TableViewConfiguration } from "../../../TableViewConfigurationDropdown-Dwy_9FBz.mjs";
4
+ import { i as useTableControls, n as TableControlsContextProps, r as TableControlsProvider, t as TableControlsContext } from "../../../TableControlsContext-DZIZSyfX.mjs";
5
+ import { t as dateRuleIntent } from "../../../date-rule-intent-CDBtV0ET.mjs";
6
+ import { a as FilterField, c as FilterOperator, d as FilterRuleValueChange, f as FilterSize, h as isEmptyState, i as EMPTY_FILTER_STATE, l as FilterRule, m as TopLevelFilterRule, n as CompoundExpression, o as FilterFieldSource, p as FilterStateV2, r as DateRangeFilterValue, s as FilterFieldType, t as AndGroup, u as FilterRuleValue } from "../../../types-C4WUSW3e.mjs";
7
+ import { t as resolveDateRangeRuleValue } from "../../../date-range-rule-value-BRp5Bi7R.mjs";
8
+ import { n as RawFieldInfo, r as buildFieldRegistry, t as FieldRegistry } from "../../../FieldRegistry-0LmSQ-jc.mjs";
9
+ import { n as ValueControlResolver, r as resolveValueControl, t as ResolveValueControlOptions } from "../../../value-control-resolver-B0HDRxRN.mjs";
10
+ import { t as FilterBar } from "../../../FilterBar-BMM4Swbt.mjs";
11
+ import { t as FilterBarProps } from "../../../index-CyAok7As.mjs";
12
+ import { a as useFilterBarSize, i as FilterSizeTokens, t as FILTER_SIZE_TOKENS } from "../../../filter-size-context-CqvQ190x.mjs";
13
+ import { n as PillShellProps, t as PillShell } from "../../../PillShell-BA7KK1zS.mjs";
14
+ import { a as getDefaultOperatorForType, c as getOperatorsForType, d as isValuelessOperator, f as reconcileValueForOperator, l as isCompleteDateRange, r as emptyValueForRule, s as getOperatorsForField, u as isRangeOperator } from "../../../operators-CoXL5Hv6.mjs";
15
+ import { a as decodeFilterStateFromUrl, i as decodeFilterStateFromString, n as UrlStateCodecResult, o as encodeFilterStateToUrlParam, r as applyFilterStateToSearchParams, t as FILTER_STATE_URL_PARAM } from "../../../url-state-8j_ef8Uf.mjs";
16
+ import { n as UseFilterStateV2Result, r as useFilterStateV2, t as UseFilterStateV2Options } from "../../../useFilterStateV2-CW6eght1.mjs";
17
+ import { n as isFilterStateV2, r as pruneToRegistry, t as hasCompleteValue } from "../../../validation-BgwNghi2.mjs";
18
+ import { t as ValueControlProps } from "../../../types-CoVZwrMW.mjs";
19
+ import { t as TableControls } from "../../../TableControls-WP78qtET.mjs";
20
20
  export { AndGroup, CompoundExpression, ControlBar, ControlBarProps, DataTableCompactBar, DateRangeFilterValue, EMPTY_FILTER_STATE, FILTER_SIZE_TOKENS, FILTER_STATE_URL_PARAM, FieldRegistry, FilterBar, FilterBarProps, FilterField, FilterFieldSource, FilterFieldType, FilterOperator, FilterRule, FilterRuleValue, FilterRuleValueChange, FilterSize, FilterSizeTokens, FilterStateV2, PillShell, PillShellProps, RawFieldInfo, ResolveValueControlOptions, TableControlsContext, TableControlsContextProps, TableControlsProvider, TableViewConfiguration, TableViewConfigurationDropdown, TableViewConfigurationDropdownProps, TableViewConfigurationProps, TopLevelFilterRule, UrlStateCodecResult, UseFilterStateV2Options, UseFilterStateV2Result, ValueControlProps, ValueControlResolver, applyFilterStateToSearchParams, buildFieldRegistry, dateRuleIntent, decodeFilterStateFromString, decodeFilterStateFromUrl, TableControls as default, emptyValueForRule, encodeFilterStateToUrlParam, getDefaultOperatorForType, getOperatorsForField, getOperatorsForType, hasCompleteValue, isCompleteDateRange, isEmptyState, isFilterStateV2, isRangeOperator, isValuelessOperator, pruneToRegistry, reconcileValueForOperator, resolveDateRangeRuleValue, resolveValueControl, useFilterBarSize, useFilterStateV2, useTableControls };
@@ -1,2 +1,2 @@
1
- import { A as TableControlsProvider, C as getOperatorsForType, D as reconcileValueForOperator, E as isValuelessOperator, F as ControlBar, I as DataTableCompactBar, M as TableViewConfiguration, N as TableViewConfigurationDropdown, O as dateRuleIntent, P as TableControls, S as getOperatorsForField, T as isRangeOperator, _ as FILTER_SIZE_TOKENS, a as encodeFilterStateToUrlParam, b as emptyValueForRule, c as FilterBar_default, d as isFilterStateV2, f as pruneToRegistry, g as resolveValueControl, h as PillShell, i as decodeFilterStateFromUrl, j as useTableControls, k as TableControlsContext, l as useFilterStateV2, m as isEmptyState, n as applyFilterStateToSearchParams, o as FieldRegistry, p as EMPTY_FILTER_STATE, r as decodeFilterStateFromString, s as buildFieldRegistry, t as FILTER_STATE_URL_PARAM, u as hasCompleteValue, v as useFilterBarSize, w as isCompleteDateRange, x as getDefaultOperatorForType, y as resolveDateRangeRuleValue } from "../../../TableControls-BxuPCUQS.mjs";
1
+ import { A as TableControlsProvider, C as getOperatorsForType, D as reconcileValueForOperator, E as isValuelessOperator, F as ControlBar, I as DataTableCompactBar, M as TableViewConfiguration, N as TableViewConfigurationDropdown, O as dateRuleIntent, P as TableControls, S as getOperatorsForField, T as isRangeOperator, _ as FILTER_SIZE_TOKENS, a as encodeFilterStateToUrlParam, b as emptyValueForRule, c as FilterBar_default, d as isFilterStateV2, f as pruneToRegistry, g as resolveValueControl, h as PillShell, i as decodeFilterStateFromUrl, j as useTableControls, k as TableControlsContext, l as useFilterStateV2, m as isEmptyState, n as applyFilterStateToSearchParams, o as FieldRegistry, p as EMPTY_FILTER_STATE, r as decodeFilterStateFromString, s as buildFieldRegistry, t as FILTER_STATE_URL_PARAM, u as hasCompleteValue, v as useFilterBarSize, w as isCompleteDateRange, x as getDefaultOperatorForType, y as resolveDateRangeRuleValue } from "../../../TableControls-RS_ozBsI.mjs";
2
2
  export { ControlBar, DataTableCompactBar, EMPTY_FILTER_STATE, FILTER_SIZE_TOKENS, FILTER_STATE_URL_PARAM, FieldRegistry, FilterBar_default as FilterBar, PillShell, TableControlsContext, TableControlsProvider, TableViewConfiguration, TableViewConfigurationDropdown, applyFilterStateToSearchParams, buildFieldRegistry, dateRuleIntent, decodeFilterStateFromString, decodeFilterStateFromUrl, TableControls as default, emptyValueForRule, encodeFilterStateToUrlParam, getDefaultOperatorForType, getOperatorsForField, getOperatorsForType, hasCompleteValue, isCompleteDateRange, isEmptyState, isFilterStateV2, isRangeOperator, isValuelessOperator, pruneToRegistry, reconcileValueForOperator, resolveDateRangeRuleValue, resolveValueControl, useFilterBarSize, useFilterStateV2, useTableControls };
@@ -8,16 +8,18 @@ import { isFocused } from "../../lib/pseudoClass.mjs";
8
8
  import { Z_INDICES } from "../../lib/zindex.mjs";
9
9
  import { focusOutline } from "../../mixins/focus.mjs";
10
10
  import "../../variables/effect.mjs";
11
- import { t as HStack } from "../../Stack-ChsImaEY.mjs";
12
- import { n as Button, t as IconButton } from "../../IconButton-CqTPMhjV.mjs";
13
- import { n as Sticker } from "../../Sticker-C3Eb13OQ.mjs";
14
- import { n as DropdownMenu_default } from "../../DropdownMenu-CuKSNxc9.mjs";
15
- import { t as Checkbox } from "../../Checkbox-AjL7ucoR.mjs";
16
- import { t as Pagination_default } from "../../Pagination-CPd4mSnw.mjs";
17
- import { a as StickyTH, d as TableTR, f as TableTH, i as StickyTD, o as TableActionTD, p as TableRow, s as TableCell, t as TableLayout, u as TableTD } from "../../Table-B1gRr2XT.mjs";
18
- import { t as HoverCopyableField } from "../../HoverCopyableField-CN3gl0ny.mjs";
19
- import { t as Pii_default } from "../../Pii-Dz4woKd8.mjs";
20
- import { N as TableViewConfigurationDropdown, P as TableControls } from "../../TableControls-BxuPCUQS.mjs";
11
+ import { semanticScrollbar } from "../../mixins/scrollbar.mjs";
12
+ import { t as HStack } from "../../Stack-Bkn0TUDe.mjs";
13
+ import { n as Button, t as IconButton } from "../../IconButton-CCLMYWVN.mjs";
14
+ import { n as Sticker } from "../../Sticker-BLbgJxcH.mjs";
15
+ import { n as DropdownMenu_default } from "../../DropdownMenu-rm9Nnxn7.mjs";
16
+ import { t as Checkbox } from "../../Checkbox-DQynkc_I.mjs";
17
+ import { t as Pagination_default } from "../../Pagination-Co9CfyFQ.mjs";
18
+ import { a as StickyTH, d as TableTR, f as TableTH, i as StickyTD, o as TableActionTD, p as TableRow, s as TableCell, t as TableLayout, u as TableTD } from "../../Table-WqNfjasd.mjs";
19
+ import { t as HoverCopyableField } from "../../HoverCopyableField-12bBuG-d.mjs";
20
+ import { t as Link } from "../../Link-I9Bklen-.mjs";
21
+ import { t as Pii_default } from "../../Pii-JGV9gP95.mjs";
22
+ import { N as TableViewConfigurationDropdown, P as TableControls } from "../../TableControls-RS_ozBsI.mjs";
21
23
  import "./types.mjs";
22
24
  import { BorderRadius, Color, Spacing } from "@persona/design-tokens";
23
25
  import { createElement, useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -42,7 +44,7 @@ const Bar = styled.div`
42
44
  display: flex;
43
45
  justify-content: space-between;
44
46
  align-items: center;
45
- background-color: ${({ theme }) => semanticColor(theme, "SurfacePrimary", theme.color.background.primary)};
47
+ background-color: ${({ theme }) => semanticColor(theme, "SurfaceElevated", theme.color.background.primary)};
46
48
  width: 100%;
47
49
  padding: ${Spacing[2]};
48
50
  border-radius: ${BorderRadius.Md};
@@ -162,10 +164,9 @@ const renderAsDatetime = (value, config) => {
162
164
  };
163
165
  const renderAsURL = (value) => {
164
166
  if (value == null || typeof value !== "string" || value.length === 0) return "";
165
- return /* @__PURE__ */ jsx("a", {
166
- href: value,
167
+ return /* @__PURE__ */ jsx(Link, {
168
+ url: value,
167
169
  target: "_blank",
168
- rel: "noopener noreferrer",
169
170
  children: value
170
171
  });
171
172
  };
@@ -407,6 +408,7 @@ const ExpandButton = styled.button`
407
408
  justify-content: center;
408
409
  padding: 0;
409
410
  margin: 0;
411
+ color: ${({ theme }) => semanticColor(theme, "FgPrimary", theme.color.text.primary)};
410
412
  `;
411
413
  const ExpandColumnPlaceholder = styled.span`
412
414
  display: flex;
@@ -626,6 +628,7 @@ const StyledTableLayout = styled(TableLayout)`
626
628
  `;
627
629
  const TableContainer = styled.div`
628
630
  position: relative;
631
+ ${semanticScrollbar}
629
632
 
630
633
  ${({ $stickyHeader }) => $stickyHeader && css`
631
634
  flex-grow: 1;
@@ -635,9 +638,17 @@ const TableContainer = styled.div`
635
638
  `}
636
639
  `;
637
640
  const RowLink = styled(RouterLink)`
641
+ /* Match surrounding cell text. The row is still a link; only URL cells use accent. */
638
642
  color: inherit;
639
643
  text-decoration: none;
640
644
  ${focusOutline}
645
+
646
+ &:link,
647
+ &:visited,
648
+ &:hover,
649
+ &:active {
650
+ color: inherit;
651
+ }
641
652
  `;
642
653
  const DataTableControls = styled(TableControls)``;
643
654
  const DataTableContainer = styled.div`
@@ -681,7 +692,7 @@ const StickyDetailsTD = styled(StickyTD)`
681
692
  border-right: none;
682
693
  `;
683
694
  const StickyTDWithGapCoverage = styled(StickyTD)`
684
- ${({ $gapCoverage, theme }) => $gapCoverage && css`
695
+ ${({ $gapCoverage }) => $gapCoverage && css`
685
696
  &::before {
686
697
  content: '';
687
698
  position: absolute;
@@ -689,7 +700,7 @@ const StickyTDWithGapCoverage = styled(StickyTD)`
689
700
  left: ${-$gapCoverage}px;
690
701
  width: ${$gapCoverage}px;
691
702
  height: calc(100% + 1px); // +1px to cover the bottom border
692
- background-color: ${semanticColor(theme, "SurfacePrimary", theme.color.background.primary)};
703
+ background: inherit;
693
704
  }
694
705
  `}
695
706
  `;