@persona/design-system 0.10.5 → 0.10.7

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 (559) 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-Bmo8B-Q3.d.mts → Action-BLMJwLBV.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-8YzapjWf.mjs.map +1 -1
  11. package/dist/BooleanValueControl.d.mts +1 -1
  12. package/dist/BottomPanel.d.mts +7 -0
  13. package/dist/{Breadcrumb-DnY8n3EL.d.mts → Breadcrumb-chGXhl3V.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-DRu_JfdI.d.mts → Breadcrumbs-ChKWIuRq.d.mts} +2 -2
  16. package/dist/Breadcrumbs-Dft2TR4v.mjs.map +1 -1
  17. package/dist/Breadcrumbs.d.mts +1 -1
  18. package/dist/{Button-Cg8KyT5M.d.mts → Button-B79_aXfC.d.mts} +4 -4
  19. package/dist/Button.d.mts +1 -1
  20. package/dist/{Calendar-D-6WOLJ1.d.mts → Calendar-50D7poM_.d.mts} +1 -1
  21. package/dist/Calendar.d.mts +1 -1
  22. package/dist/CalendarBase.d.mts +1 -1
  23. package/dist/CalendarCell.d.mts +1 -1
  24. package/dist/CalendarGrid.d.mts +1 -1
  25. package/dist/{Card-CfECLwQ6.d.mts → Card-DOIqF954.d.mts} +3 -3
  26. package/dist/Card-DuQHyroh.mjs.map +1 -1
  27. package/dist/Card.d.mts +1 -1
  28. package/dist/CardGrouping.d.mts +2 -2
  29. package/dist/CardV2-BRJbRSts.mjs.map +1 -1
  30. package/dist/Checkbox-Dr4LMKHV.mjs.map +1 -1
  31. package/dist/{Checkbox-ZywrdT_h.d.mts → Checkbox-EgYclGfH.d.mts} +1 -1
  32. package/dist/Checkbox.d.mts +1 -1
  33. package/dist/{CheckboxGroupField-UHpA38U5.d.mts → CheckboxGroupField-Cw-1UxIW.d.mts} +3 -3
  34. package/dist/CheckboxGroupField.d.mts +1 -1
  35. package/dist/ChoicesValueControl.d.mts +1 -1
  36. package/dist/{Combobox-BXkcQ2aY.d.mts → Combobox-BkDYZlUh.d.mts} +3 -3
  37. package/dist/Combobox-DQxaOCLA.mjs.map +1 -1
  38. package/dist/Combobox.d.mts +2 -2
  39. package/dist/{ComboboxBase-D2rDQHYZ.d.mts → ComboboxBase-1Xy4pnRV.d.mts} +6 -6
  40. package/dist/ComboboxBase.d.mts +1 -1
  41. package/dist/{ComboboxMultiSelect-CrvB6ap5.d.mts → ComboboxMultiSelect-DHf7NK7Z.d.mts} +2 -2
  42. package/dist/ComboboxMultiSelect.d.mts +1 -1
  43. package/dist/{ComboboxSingleSelect-Dp0iTdDO.d.mts → ComboboxSingleSelect-Ble5PcXQ.d.mts} +4 -4
  44. package/dist/ComboboxSingleSelect.d.mts +1 -1
  45. package/dist/{CompactBar-zYfXjFmn.d.mts → CompactBar-DmoFq5i6.d.mts} +3 -3
  46. package/dist/CompactBar.d.mts +1 -1
  47. package/dist/{ControlBar-kJ_eWf8f.d.mts → ControlBar-dqzVo6e6.d.mts} +2 -2
  48. package/dist/ControlBar.d.mts +1 -1
  49. package/dist/{DataTable-DEJHWrsy.mjs → DataTable-B7QqP6YU.mjs} +8 -7
  50. package/dist/DataTable-B7QqP6YU.mjs.map +1 -0
  51. package/dist/{DataTable-C000E74h.d.mts → DataTable-Cblw6bLk.d.mts} +7 -6
  52. package/dist/DataTable.d.mts +1 -1
  53. package/dist/{DateField-g7malFm-.d.mts → DateField-CbTxDzYF.d.mts} +2 -2
  54. package/dist/DateField.d.mts +1 -1
  55. package/dist/{DatePicker-8kUpFFh8.d.mts → DatePicker-1BADH9Pi.d.mts} +2 -2
  56. package/dist/{DatePicker-D-_ibUd1.mjs → DatePicker-CHaNe2Es.mjs} +2 -2
  57. package/dist/DatePicker-CHaNe2Es.mjs.map +1 -0
  58. package/dist/DatePicker.d.mts +1 -1
  59. package/dist/{DateRangePicker-Nv4uNuIW.d.mts → DateRangePicker-fq-_pFpg.d.mts} +3 -3
  60. package/dist/DateRangePicker.d.mts +1 -1
  61. package/dist/DateRangeValueControl.d.mts +2 -2
  62. package/dist/DateValueControl.d.mts +1 -1
  63. package/dist/DropdownButton-BiFRlSVD.mjs.map +1 -1
  64. package/dist/DropdownButton.d.mts +2 -2
  65. package/dist/{DropdownMenu-CQbS7ML5.d.mts → DropdownMenu-DjdNBJqP.d.mts} +2 -2
  66. package/dist/DropdownMenu-Q8S-9rXm.mjs.map +1 -1
  67. package/dist/DropdownMenu.d.mts +1 -1
  68. package/dist/{ErrorProps-Cy-APmdC.d.mts → ErrorProps-D4G9EWX2.d.mts} +1 -1
  69. package/dist/ErrorProps.d.mts +1 -1
  70. package/dist/{FieldRegistry-a44G08fS.d.mts → FieldRegistry-CPr7YoG5.d.mts} +2 -2
  71. package/dist/FieldRegistry.d.mts +1 -1
  72. package/dist/{FilterBar-BpMguIXl.d.mts → FilterBar-DPCPfr4_.d.mts} +4 -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/{FloatingActionBar-DPA9v_yH.d.mts → FloatingActionBar-u3TJcigs.d.mts} +1 -1
  79. package/dist/FloatingActionBar.d.mts +1 -1
  80. package/dist/FloatingToolbar-Df90f7Dm.mjs +493 -0
  81. package/dist/FloatingToolbar-Df90f7Dm.mjs.map +1 -0
  82. package/dist/FloatingToolbar.d.mts +1 -1
  83. package/dist/FormControl-BztNXLn6.mjs.map +1 -1
  84. package/dist/{FormControl-TkYMZeBd.d.mts → FormControl-D8vpeAPI.d.mts} +2 -2
  85. package/dist/FormControl.d.mts +1 -1
  86. package/dist/FormControlLabel.d.mts +1 -1
  87. package/dist/{FormField-g1zQFM9T.mjs → FormField-BStxmlZT.mjs} +2 -2
  88. package/dist/FormField-BStxmlZT.mjs.map +1 -0
  89. package/dist/{FormField-PBo1ctY8.d.mts → FormField-C6vp1Vfe.d.mts} +3 -3
  90. package/dist/FormField.d.mts +1 -1
  91. package/dist/{Grid-BtTuj5mR.mjs → Grid-CYpOqTUu.mjs} +1 -1
  92. package/dist/{Grid-BtTuj5mR.mjs.map → Grid-CYpOqTUu.mjs.map} +1 -1
  93. package/dist/{Header-fwlbzxYx.d.mts → Header-C9oYPBLv.d.mts} +1 -1
  94. package/dist/Header.d.mts +1 -1
  95. package/dist/{HelperTooltip-BLfPfJRN.d.mts → HelperTooltip-jHTdkLQq.d.mts} +2 -2
  96. package/dist/HelperTooltip.d.mts +1 -1
  97. package/dist/HighlightedText.d.mts +2 -2
  98. package/dist/HoverCopyableField-CW7Jxmni.mjs.map +1 -1
  99. package/dist/{I18nContext-EPmbUprm.d.mts → I18nContext-DzV-RDIh.d.mts} +2 -2
  100. package/dist/I18nContext.d.mts +1 -1
  101. package/dist/{IconButton-KhCwTwPx.d.mts → IconButton-CaEvsrOn.d.mts} +2 -2
  102. package/dist/IconButton-DftINsp7.mjs.map +1 -1
  103. package/dist/IconButton.d.mts +1 -1
  104. package/dist/ImageTile.d.mts +1 -1
  105. package/dist/IndexTableLayout.d.mts +5 -5
  106. package/dist/InlineCombobox.d.mts +1 -1
  107. package/dist/InlineInput.d.mts +1 -1
  108. package/dist/{Input-QNjbGo38.d.mts → Input-DQ2J9wlC.d.mts} +3 -3
  109. package/dist/Input-DtO3qMnE.mjs.map +1 -1
  110. package/dist/Input.d.mts +1 -1
  111. package/dist/{InputProps-BT7-RfnD.d.mts → InputProps-DrG94eFF.d.mts} +2 -2
  112. package/dist/InputProps.d.mts +1 -1
  113. package/dist/{Inserter-BnQVEqHV.d.mts → Inserter-CZeKlPqj.d.mts} +1 -1
  114. package/dist/Inserter.d.mts +1 -1
  115. package/dist/IntegerValueControl.d.mts +1 -1
  116. package/dist/Link-DKYmdL9t.mjs.map +1 -1
  117. package/dist/Link.d.mts +1 -1
  118. package/dist/ListBox-CDG0EAPg.mjs.map +1 -1
  119. package/dist/{ListBox-D9SYTzOd.d.mts → ListBox-DxbXE_EE.d.mts} +3 -3
  120. package/dist/ListBox.d.mts +1 -1
  121. package/dist/{ListBoxField-CtPDd_Aw.d.mts → ListBoxField-DVLggscv.d.mts} +4 -4
  122. package/dist/ListBoxField.d.mts +1 -1
  123. package/dist/LoadingShimmer-oPIv2ESr.mjs.map +1 -1
  124. package/dist/LoadingShimmer.d.mts +1 -1
  125. package/dist/{LogicRow-BWIZ7262.d.mts → LogicRow-DG06PsUe.d.mts} +3 -3
  126. package/dist/LogicRow.d.mts +1 -1
  127. package/dist/MaskedInput.d.mts +1 -1
  128. package/dist/{Menu-DizjcMbO.d.mts → Menu-Bq6Lij2L.d.mts} +3 -3
  129. package/dist/Menu-EIT_MwK6.mjs.map +1 -1
  130. package/dist/Menu.d.mts +1 -1
  131. package/dist/{Modal-92O_uW8H.mjs → Modal-BBlilB-B.mjs} +2 -2
  132. package/dist/Modal-BBlilB-B.mjs.map +1 -0
  133. package/dist/{Modal-Bhwq1bQJ.d.mts → Modal-kEgKwLg4.d.mts} +2 -2
  134. package/dist/Modal.d.mts +1 -1
  135. package/dist/{PageHeader-D2QLrS7-.d.mts → PageHeader-BGGhOS81.d.mts} +2 -2
  136. package/dist/{PageHeader-BzvA_NNt.mjs → PageHeader-DEKTopzU.mjs} +1 -1
  137. package/dist/PageHeader-DEKTopzU.mjs.map +1 -0
  138. package/dist/PageHeader.d.mts +1 -1
  139. package/dist/{PageLayout-DfAbeFIh.d.mts → PageLayout-B_LKPZD8.d.mts} +1 -1
  140. package/dist/{PageLayout-DCe3F76N.mjs → PageLayout-DjtGrvJa.mjs} +2 -2
  141. package/dist/PageLayout-DjtGrvJa.mjs.map +1 -0
  142. package/dist/PageLayout.d.mts +1 -1
  143. package/dist/{PageLayoutFrame-CQLREOBH.d.mts → PageLayoutFrame-uf17F41p.d.mts} +1 -1
  144. package/dist/PageLayoutFrame.d.mts +1 -1
  145. package/dist/{PageSelector-QaKYtk6y.d.mts → PageSelector-CLeG2gFh.d.mts} +10 -4
  146. package/dist/PageSelector.d.mts +1 -1
  147. package/dist/{Pagination-dTsHLVAk.mjs → Pagination-C8hPOu0l.mjs} +15 -11
  148. package/dist/Pagination-C8hPOu0l.mjs.map +1 -0
  149. package/dist/{Pagination-DeXorbSK.d.mts → Pagination-y3kn2X_A.d.mts} +11 -3
  150. package/dist/Pagination.d.mts +1 -1
  151. package/dist/{PillShell-B35z66jZ.d.mts → PillShell-Clv4b-2w.d.mts} +2 -2
  152. package/dist/PillShell.d.mts +1 -1
  153. package/dist/Popover-DordjYNM.mjs.map +1 -1
  154. package/dist/{ProgressIndicator-COCwRZfK.d.mts → ProgressIndicator-tVvf0cY5.d.mts} +1 -1
  155. package/dist/{ProgressIndicator-ISARECzW.mjs → ProgressIndicator-zt3ndT9U.mjs} +1 -1
  156. package/dist/ProgressIndicator-zt3ndT9U.mjs.map +1 -0
  157. package/dist/ProgressIndicator.d.mts +1 -1
  158. package/dist/{PseudoClassProps-D_f-JUT1.d.mts → PseudoClassProps-D-sdJdnG.d.mts} +1 -1
  159. package/dist/PseudoClassProps.d.mts +1 -1
  160. package/dist/Radio-BlEtetrr.mjs.map +1 -1
  161. package/dist/{RadioGroup-pyGpWhhj.d.mts → RadioGroup-9AnTQbh9.d.mts} +1 -1
  162. package/dist/RadioGroup-CMrXmmn4.mjs.map +1 -1
  163. package/dist/RadioGroup.d.mts +1 -1
  164. package/dist/{RangeCalendar-BiugsdSP.d.mts → RangeCalendar-D86xh2yV.d.mts} +2 -2
  165. package/dist/RangeCalendar.d.mts +1 -1
  166. package/dist/RangeCalendarPresets.d.mts +2 -2
  167. package/dist/{RouterContext-BUdfr1it.d.mts → RouterContext-Bgg29ZJo.d.mts} +2 -2
  168. package/dist/RouterContext.d.mts +1 -1
  169. package/dist/{RouterLink-BKbfvJcM.d.mts → RouterLink-CMCsV5H-.d.mts} +2 -2
  170. package/dist/RouterLink.d.mts +1 -1
  171. package/dist/RuleEditorFields.d.mts +2 -2
  172. package/dist/RulesPill.d.mts +1 -1
  173. package/dist/{SearchInput-BejaiGsS.d.mts → SearchInput-NlIspWun.d.mts} +2 -2
  174. package/dist/SearchInput.d.mts +1 -1
  175. package/dist/SectionHeading.d.mts +1 -1
  176. package/dist/{SegmentedControl-UV03Ujqn.d.mts → SegmentedControl-C4C5ge4p.d.mts} +1 -1
  177. package/dist/SegmentedControl-D_DA-MU1.mjs.map +1 -1
  178. package/dist/SegmentedControl.d.mts +1 -1
  179. package/dist/{Select-Chk5WB1F.d.mts → Select-By_LoM1n.d.mts} +3 -3
  180. package/dist/Select-DkUMz4LG.mjs.map +1 -1
  181. package/dist/Select.d.mts +1 -1
  182. package/dist/{SingleColumnLayout-DBo35psH.d.mts → SingleColumnLayout-C4qrVyMf.d.mts} +2 -2
  183. package/dist/SingleColumnLayout.d.mts +1 -1
  184. package/dist/SmartTextInput.d.mts +6 -6
  185. package/dist/SmartTextInputField.d.mts +2 -2
  186. package/dist/SmartTextInputFunctionDialog.d.mts +4 -4
  187. package/dist/SmartTextInputListbox.d.mts +2 -2
  188. package/dist/SmartTextInputPopover.d.mts +1 -1
  189. package/dist/Spacer-C4d9Aho6.mjs.map +1 -1
  190. package/dist/Spinner-CXb-KUs1.mjs.map +1 -1
  191. package/dist/{SplitColumnLayout-C6m_mwdf.d.mts → SplitColumnLayout-BXT7AeNx.d.mts} +2 -2
  192. package/dist/SplitColumnLayout.d.mts +1 -1
  193. package/dist/{Stack-DrYxBkiF.d.mts → Stack-BqRcxDQM.d.mts} +1 -1
  194. package/dist/Stack.d.mts +1 -1
  195. package/dist/{StatusIndicator-pWl1-FLb.mjs → StatusIndicator-Zf75KK3O.mjs} +1 -1
  196. package/dist/StatusIndicator-Zf75KK3O.mjs.map +1 -0
  197. package/dist/Sticker-Bi_fezCO.mjs.map +1 -1
  198. package/dist/{Sticker-sIBnBbHD.d.mts → Sticker-C2zp47FB.d.mts} +4 -4
  199. package/dist/Sticker.d.mts +1 -1
  200. package/dist/StringValueControl.d.mts +1 -1
  201. package/dist/Tab.d.mts +1 -1
  202. package/dist/TabBar-DpXYsWgS.mjs.map +1 -1
  203. package/dist/{Table-BJfcRpMX.d.mts → Table-DGl3mDwc.d.mts} +1 -1
  204. package/dist/Table-DPi4Dt5H.mjs.map +1 -1
  205. package/dist/Table.d.mts +1 -1
  206. package/dist/{TableBody-CBz2PjA-.d.mts → TableBody-BbC-H2qj.d.mts} +1 -1
  207. package/dist/TableBody.d.mts +1 -1
  208. package/dist/TableBox-BfSF36Gy.mjs.map +1 -1
  209. package/dist/TableBox.d.mts +2 -2
  210. package/dist/{TableBoxCell-CwroLAWy.d.mts → TableBoxCell-DuvWTwOm.d.mts} +6 -6
  211. package/dist/TableBoxCell.d.mts +1 -1
  212. package/dist/{TableBoxField-B7bHv7uV.d.mts → TableBoxField-DRx24VAz.d.mts} +5 -5
  213. package/dist/TableBoxField.d.mts +1 -1
  214. package/dist/{TableBoxRow-Dke8B99J.d.mts → TableBoxRow-DFPTf-bZ.d.mts} +3 -3
  215. package/dist/TableBoxRow.d.mts +1 -1
  216. package/dist/{TableBoxRowActions-CkUDVERC.d.mts → TableBoxRowActions-CFCnGc7D.d.mts} +2 -2
  217. package/dist/TableBoxRowActions.d.mts +1 -1
  218. package/dist/{TableCell-KHx5JlqZ.d.mts → TableCell-Do9W49SJ.d.mts} +2 -2
  219. package/dist/TableCell.d.mts +1 -1
  220. package/dist/{TableControls-BDXOQMr7.mjs → TableControls-Dgle87OP.mjs} +8 -6
  221. package/dist/TableControls-Dgle87OP.mjs.map +1 -0
  222. package/dist/{TableControls-DAjx1TYG.d.mts → TableControls-r58fZb_C.d.mts} +6 -5
  223. package/dist/TableControls.d.mts +1 -1
  224. package/dist/{TableControlsContext-BEIvE9qN.d.mts → TableControlsContext-nz8GXmXc.d.mts} +2 -2
  225. package/dist/TableControlsContext.d.mts +1 -1
  226. package/dist/{TableHead-D5A3bOwt.d.mts → TableHead-CIXIrZGE.d.mts} +1 -1
  227. package/dist/TableHead.d.mts +1 -1
  228. package/dist/{TableHeaderCell-BXgnxPpX.d.mts → TableHeaderCell-wKcp8rZj.d.mts} +1 -1
  229. package/dist/TableHeaderCell.d.mts +1 -1
  230. package/dist/{TableLayout-Dy5ht8KO.d.mts → TableLayout-0-9FnNvt.d.mts} +1 -1
  231. package/dist/TableLayout.d.mts +1 -1
  232. package/dist/{TableRow-C1iGbNjZ.d.mts → TableRow-C011thJ3.d.mts} +2 -2
  233. package/dist/TableRow.d.mts +1 -1
  234. package/dist/TableTH.d.mts +1 -1
  235. package/dist/{TableViewConfigurationDropdown-vYnU0d4k.d.mts → TableViewConfigurationDropdown-D0VcRmd4.d.mts} +2 -2
  236. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  237. package/dist/TechnicalSticker-B_JlBkXZ.mjs.map +1 -1
  238. package/dist/{Text-SaoRBdB6.d.mts → Text-BgSW0yDb.d.mts} +3 -3
  239. package/dist/Text-D0vEReED.mjs.map +1 -1
  240. package/dist/Text.d.mts +1 -1
  241. package/dist/{TextArea-gtSlghjy.d.mts → TextArea-CyWv8jaV.d.mts} +2 -2
  242. package/dist/TextArea-Dro-HH8O.mjs.map +1 -1
  243. package/dist/TextArea.d.mts +1 -1
  244. package/dist/{TextUnderlineTooltip-DV61avLv.d.mts → TextUnderlineTooltip-CcyG4VkJ.d.mts} +2 -2
  245. package/dist/TextUnderlineTooltip.d.mts +1 -1
  246. package/dist/Tile.d.mts +1 -1
  247. package/dist/Toast.d.mts +1 -1
  248. package/dist/{Toggle-BlvrM-Cw.d.mts → Toggle-BIJoB1AA.d.mts} +1 -1
  249. package/dist/Toggle-D9MzTIZs.mjs.map +1 -1
  250. package/dist/Toggle.d.mts +1 -1
  251. package/dist/{Tooltip-CysnLwST.d.mts → Tooltip-CrpfAAfA.d.mts} +2 -2
  252. package/dist/Tooltip-YViXzMdm.mjs.map +1 -1
  253. package/dist/Tooltip.d.mts +1 -1
  254. package/dist/{TruncatedText-YcjNG-zP.d.mts → TruncatedText-DaGx3CX6.d.mts} +1 -1
  255. package/dist/VersionHistory.d.mts +1 -1
  256. package/dist/{VersionHistoryItem-Px3ylMMq.d.mts → VersionHistoryItem-Bo78T7y7.d.mts} +1 -1
  257. package/dist/VersionHistoryItem.d.mts +1 -1
  258. package/dist/WizardModal.d.mts +2 -2
  259. package/dist/{accordionTitleTypography-Dlo2YyWd.d.mts → accordionTitleTypography-D7tOgRzj.d.mts} +2 -2
  260. package/dist/accordionTitleTypography.d.mts +1 -1
  261. package/dist/{chainTypes-aF5rWav-.d.mts → chainTypes-CLKwXymd.d.mts} +4 -4
  262. package/dist/{clientFilterUtils-DYKgw2Yq.d.mts → clientFilterUtils-BnASP9Tt.d.mts} +2 -2
  263. package/dist/clientFilterUtils.d.mts +1 -1
  264. package/dist/{codec-D8ZKFLgs.d.mts → codec-C4WJftW6.d.mts} +2 -2
  265. package/dist/codec.d.mts +1 -1
  266. package/dist/{color-Cy_0z4IY.d.mts → color-Db57Wms_.d.mts} +2 -2
  267. package/dist/complete-typography.d.mts +1 -1
  268. package/dist/components/Accordion/index.d.mts +1 -1
  269. package/dist/components/Accordion/index.mjs.map +1 -1
  270. package/dist/components/Attribute/index.mjs.map +1 -1
  271. package/dist/components/Banner/index.mjs.map +1 -1
  272. package/dist/components/BottomPanel/index.mjs +67 -6
  273. package/dist/components/BottomPanel/index.mjs.map +1 -1
  274. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  275. package/dist/components/Button/index.d.mts +2 -2
  276. package/dist/components/ButtonGroup/index.mjs.map +1 -1
  277. package/dist/components/Card/index.d.mts +2 -2
  278. package/dist/components/CardV2/index.d.mts +1 -1
  279. package/dist/components/Checkbox/index.d.mts +1 -1
  280. package/dist/components/CodeHighlight/index.mjs.map +1 -1
  281. package/dist/components/Combobox/index.d.mts +2 -2
  282. package/dist/components/DataTable/TableControls/index.d.mts +21 -21
  283. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  284. package/dist/components/DataTable/index.d.mts +8 -8
  285. package/dist/components/DataTable/index.mjs +1 -1
  286. package/dist/components/DataTable/types.d.mts +1 -1
  287. package/dist/components/DatePicker/index.d.mts +5 -5
  288. package/dist/components/DatePicker/index.mjs +1 -1
  289. package/dist/components/DropdownMenu/index.d.mts +1 -1
  290. package/dist/components/FloatingPanel/index.mjs.map +1 -1
  291. package/dist/components/FloatingToolbar/index.d.mts +2 -0
  292. package/dist/components/FloatingToolbar/index.mjs +2 -0
  293. package/dist/components/FormControl/index.d.mts +2 -2
  294. package/dist/components/FormField/index.d.mts +5 -5
  295. package/dist/components/FormField/index.mjs +1 -1
  296. package/dist/components/Grid/index.mjs +1 -1
  297. package/dist/components/ImageTile/index.mjs.map +1 -1
  298. package/dist/components/Input/index.d.mts +1 -1
  299. package/dist/components/ListBox/index.d.mts +3 -3
  300. package/dist/components/MaskedInput/index.mjs.map +1 -1
  301. package/dist/components/MatchHighlight/index.mjs.map +1 -1
  302. package/dist/components/Menu/index.d.mts +1 -1
  303. package/dist/components/Modal/index.d.mts +1 -1
  304. package/dist/components/Modal/index.mjs +1 -1
  305. package/dist/components/PageHeader/index.d.mts +1 -1
  306. package/dist/components/PageHeader/index.mjs +1 -1
  307. package/dist/components/Pagination/index.d.mts +3 -3
  308. package/dist/components/Pagination/index.mjs +1 -1
  309. package/dist/components/ProgressBar/index.mjs.map +1 -1
  310. package/dist/components/ProgressIndicator/index.d.mts +1 -1
  311. package/dist/components/ProgressIndicator/index.mjs +1 -1
  312. package/dist/components/RadioGroup/index.d.mts +1 -1
  313. package/dist/components/RichTextEditor/index.d.mts +1 -2
  314. package/dist/components/RichTextEditor/index.mjs +22 -477
  315. package/dist/components/RichTextEditor/index.mjs.map +1 -1
  316. package/dist/components/RightPanel/index.mjs.map +1 -1
  317. package/dist/components/SegmentedControl/index.d.mts +1 -1
  318. package/dist/components/Select/index.d.mts +1 -1
  319. package/dist/components/SelectionCard/index.mjs.map +1 -1
  320. package/dist/components/Slider/index.mjs.map +1 -1
  321. package/dist/components/SmartTextInput/index.d.mts +2 -2
  322. package/dist/components/SmartTextInput/index.mjs +2 -2
  323. package/dist/components/SmartTextInput/index.mjs.map +1 -1
  324. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
  325. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +2 -2
  326. package/dist/components/Stack/index.d.mts +1 -1
  327. package/dist/components/StatusIndicator/index.mjs +1 -1
  328. package/dist/components/Sticker/index.d.mts +1 -1
  329. package/dist/components/SwatchPicker/index.mjs.map +1 -1
  330. package/dist/components/Table/index.d.mts +8 -8
  331. package/dist/components/TableBox/index.d.mts +2 -2
  332. package/dist/components/Text/index.d.mts +1 -1
  333. package/dist/components/TextArea/index.d.mts +1 -1
  334. package/dist/components/Tile/index.mjs.map +1 -1
  335. package/dist/components/Toast/index.mjs.map +1 -1
  336. package/dist/components/Toggle/index.d.mts +1 -1
  337. package/dist/components/Tooltip/index.d.mts +3 -3
  338. package/dist/components/VersionHistory/index.d.mts +1 -1
  339. package/dist/components/VersionHistory/index.mjs +2 -2
  340. package/dist/components/VersionHistory/index.mjs.map +1 -1
  341. package/dist/compound-expression.d.mts +1 -1
  342. package/dist/{constants-CW1DRgwi.d.mts → constants-B2NIZBD6.d.mts} +1 -1
  343. package/dist/{constants-D1hoZ5LO.d.mts → constants-ChVceduh.d.mts} +1 -1
  344. package/dist/constants.d.mts +1 -1
  345. package/dist/constants2.d.mts +1 -1
  346. package/dist/{createPath-C4ZFkt93.d.mts → createPath-D_opTH9A.d.mts} +2 -2
  347. package/dist/createPath.d.mts +1 -1
  348. package/dist/{date-range-rule-value-CrVBpQcf.d.mts → date-range-rule-value-3izEoXmi.d.mts} +2 -2
  349. package/dist/date-range-rule-value.d.mts +1 -1
  350. package/dist/{date-rule-intent-C1aptAoX.d.mts → date-rule-intent-DjYIGcGO.d.mts} +3 -3
  351. package/dist/date-rule-intent.d.mts +1 -1
  352. package/dist/display.d.mts +2 -2
  353. package/dist/fieldPickerOptions.d.mts +2 -2
  354. package/dist/{filter-size-context-CbT4pi3S.d.mts → filter-size-context-BcpjykVw.d.mts} +2 -2
  355. package/dist/filter-size-context.d.mts +1 -1
  356. package/dist/{filters-DjXkx8GJ.d.mts → filters-DUI7TLSn.d.mts} +2 -2
  357. package/dist/filters.d.mts +1 -1
  358. package/dist/{formatDateTime-BikGGrvq.d.mts → formatDateTime-CgQvW3A5.d.mts} +1 -1
  359. package/dist/formatDateTime.d.mts +1 -1
  360. package/dist/{helpers-CdxEL7ri.d.mts → helpers-CDZ7Zk9G.d.mts} +4 -4
  361. package/dist/helpers.d.mts +1 -1
  362. package/dist/{i18n-BLyCaSdJ.mjs → i18n-DaOKaFc2.mjs} +4 -2
  363. package/dist/i18n-DaOKaFc2.mjs.map +1 -0
  364. package/dist/{index-BWAycP6L.d.mts → index-B9kfFACl.d.mts} +1 -1
  365. package/dist/{index-DX5Zu9JU.d.mts → index-CDFw-zKW.d.mts} +3 -3
  366. package/dist/{index-D2YFHdsf.d.mts → index-DntqThoS.d.mts} +2 -2
  367. package/dist/{index-FgIOTuJ4.d.mts → index-_D_TMpPU.d.mts} +2 -2
  368. package/dist/index2.d.mts +1 -1
  369. package/dist/index3.d.mts +1 -1
  370. package/dist/index4.d.mts +3 -3
  371. package/dist/index5.d.mts +1 -1
  372. package/dist/index6.d.mts +14 -14
  373. package/dist/{input-gtTnb9M8.d.mts → input-RTMLTvG1.d.mts} +3 -3
  374. package/dist/{inputFields-CYttsz5M.d.mts → inputFields-iRg_emVK.d.mts} +11 -11
  375. package/dist/inputFields.d.mts +1 -1
  376. package/dist/{jsonSchema-DUkfAip_.d.mts → jsonSchema-BJpNaFc4.d.mts} +1 -1
  377. package/dist/lib/PDSProvider.d.mts +3 -3
  378. package/dist/lib/PDSProvider.mjs +1 -1
  379. package/dist/lib/PDSProvider.mjs.map +1 -1
  380. package/dist/lib/TruncatedText.d.mts +1 -1
  381. package/dist/lib/TruncatedText.mjs.map +1 -1
  382. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  383. package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -1
  384. package/dist/lib/chainTypes.d.mts +1 -1
  385. package/dist/lib/color.d.mts +1 -1
  386. package/dist/lib/color.mjs.map +1 -1
  387. package/dist/lib/colorMode.d.mts +2 -2
  388. package/dist/lib/colorMode.mjs.map +1 -1
  389. package/dist/lib/customFunctionSchema.d.mts +1 -1
  390. package/dist/lib/date-filter/index.d.mts +2 -2
  391. package/dist/lib/i18n/index.d.mts +3 -3
  392. package/dist/lib/i18n/index.mjs +1 -1
  393. package/dist/lib/jsonSchema.d.mts +1 -1
  394. package/dist/lib/jsonSchemaType.d.mts +1 -1
  395. package/dist/lib/message.d.mts +1 -1
  396. package/dist/lib/methodChain.d.mts +2 -2
  397. package/dist/lib/methodChainNormalize.d.mts +2 -2
  398. package/dist/lib/methodChainTypes.d.mts +1 -1
  399. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  400. package/dist/lib/platformObject.d.mts +1 -1
  401. package/dist/lib/pseudoClass.d.mts +1 -1
  402. package/dist/lib/pseudoClass.mjs.map +1 -1
  403. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  404. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  405. package/dist/lib/router/index.d.mts +5 -5
  406. package/dist/lib/schemaOptions.d.mts +1 -1
  407. package/dist/lib/semanticColor.d.mts +1 -1
  408. package/dist/lib/semanticColor.mjs.map +1 -1
  409. package/dist/lib/useChain.d.mts +1 -1
  410. package/dist/lib/useEmbeddedSurface.mjs.map +1 -1
  411. package/dist/lint/index.d.mts +1 -1
  412. package/dist/{listbox-options-CkwENvff.d.mts → listbox-options-D0JmYWjB.d.mts} +3 -3
  413. package/dist/listbox-options.d.mts +1 -1
  414. package/dist/{message-klSuXfNN.d.mts → message-Bk5UTw75.d.mts} +1 -1
  415. package/dist/{methodChain-CRYRDa1k.d.mts → methodChain-C3u60_V8.d.mts} +4 -4
  416. package/dist/{methodChainTypes-BtbYWrdP.d.mts → methodChainTypes-Di4GCMX7.d.mts} +2 -2
  417. package/dist/min-copy-size.d.mts +1 -1
  418. package/dist/mixins/focus.d.mts +1 -1
  419. package/dist/mixins/focus.mjs.map +1 -1
  420. package/dist/mixins/hoverable.d.mts +2 -2
  421. package/dist/mixins/hoverable.mjs.map +1 -1
  422. package/dist/mixins/input.d.mts +1 -1
  423. package/dist/mixins/input.mjs.map +1 -1
  424. package/dist/mixins/menuItem.d.mts +2 -2
  425. package/dist/mixins/menuItem.mjs.map +1 -1
  426. package/dist/mixins/print/index.mjs.map +1 -1
  427. package/dist/mixins/scrollbar.d.mts +1 -1
  428. package/dist/mixins/scrollbar.mjs.map +1 -1
  429. package/dist/mixins/text.d.mts +1 -1
  430. package/dist/no-raw-table.d.mts +1 -1
  431. package/dist/{operators-gCG7uZ6y.d.mts → operators-BTCnQpeu.d.mts} +3 -3
  432. package/dist/operators.d.mts +1 -1
  433. package/dist/{palette-C1gBbxLO.d.mts → palette-D61sDyDI.d.mts} +3 -3
  434. package/dist/palette.d.mts +1 -1
  435. package/dist/patterns/CardGrouping/index.mjs +1 -1
  436. package/dist/patterns/CardGrouping/index.mjs.map +1 -1
  437. package/dist/patterns/IndexTableLayout/index.mjs +3 -3
  438. package/dist/patterns/IndexTableLayout/index.mjs.map +1 -1
  439. package/dist/patterns/LayoutLoadingShimmer/index.mjs +1 -1
  440. package/dist/patterns/LayoutLoadingShimmer/index.mjs.map +1 -1
  441. package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
  442. package/dist/patterns/PageLayout/index.d.mts +4 -4
  443. package/dist/patterns/PageLayout/index.mjs +1 -1
  444. package/dist/patterns/WizardModal/index.mjs +2 -2
  445. package/dist/patterns/WizardModal/index.mjs.map +1 -1
  446. package/dist/reactRouterFallback.d.mts +1 -1
  447. package/dist/reduced-motion.d.mts +1 -1
  448. package/dist/relative-date-label.d.mts +1 -1
  449. package/dist/safe-parse.d.mts +1 -1
  450. package/dist/{schemaOptions-C_JM2-sg.d.mts → schemaOptions-BKtrXvjR.d.mts} +3 -3
  451. package/dist/{semantic-BLaQSW1r.d.mts → semantic-BZbvb3LV.d.mts} +1 -1
  452. package/dist/semantic-color.d.mts +1 -1
  453. package/dist/{semanticColor-Bxufk3ZO.d.mts → semanticColor-y9byerSl.d.mts} +3 -3
  454. package/dist/shared.d.mts +1 -1
  455. package/dist/{strings-CK9n6b65.d.mts → strings-T-gsdqiJ.d.mts} +8 -1
  456. package/dist/strings.d.mts +1 -1
  457. package/dist/{text-Csytfclh.d.mts → text-CKLxMlG4.d.mts} +1 -1
  458. package/dist/{theme-mQ4WkH90.d.mts → theme-BFP-_PEh.d.mts} +3 -3
  459. package/dist/theme.d.mts +1 -1
  460. package/dist/theme.mjs.map +1 -1
  461. package/dist/tone.d.mts +3 -3
  462. package/dist/tree.d.mts +1 -1
  463. package/dist/{types-B4KbdEDc.d.mts → types-1p-ij0cd.d.mts} +2 -2
  464. package/dist/{types-Dhz6VMKx.d.mts → types-B5RbKp2V.d.mts} +1 -1
  465. package/dist/{types-dmItSshr.d.mts → types-Bg_sfqXE.d.mts} +2 -2
  466. package/dist/{types-CayYd8EX.d.mts → types-BiRayNak.d.mts} +3 -3
  467. package/dist/{types-XjJqUj-p.d.mts → types-BnXYfNrd.d.mts} +4 -4
  468. package/dist/{types-C2RhHxbE.d.mts → types-Bu5rhBdH.d.mts} +1 -1
  469. package/dist/{types-DJobO07d.d.mts → types-C31ecr0j.d.mts} +3 -3
  470. package/dist/{types-rDQg74j-.d.mts → types-FG-jOit9.d.mts} +1 -1
  471. package/dist/{types-DbOD5vE_.d.mts → types-K57NVM0M.d.mts} +2 -2
  472. package/dist/{types-6L0ptM6-.d.mts → types-QYT1VZgy.d.mts} +1 -1
  473. package/dist/types.d.mts +1 -1
  474. package/dist/types2.d.mts +1 -1
  475. package/dist/types3.d.mts +1 -1
  476. package/dist/types4.d.mts +1 -1
  477. package/dist/types5.d.mts +1 -1
  478. package/dist/types6.d.mts +1 -1
  479. package/dist/types8.d.mts +1 -1
  480. package/dist/{url-state-CmgyDnG7.d.mts → url-state-DmhG0Qg-.d.mts} +2 -2
  481. package/dist/url-state.d.mts +1 -1
  482. package/dist/{useChain-7ztbfujM.d.mts → useChain-CIwI4Xop.d.mts} +6 -6
  483. package/dist/useChain-D1aNsdvn.mjs.map +1 -1
  484. package/dist/useChainAtCursor.d.mts +6 -6
  485. package/dist/useCodeChainFunctionPanel.d.mts +1 -1
  486. package/dist/useColumnConfiguration.d.mts +2 -2
  487. package/dist/useComboboxFooterAction.d.mts +1 -1
  488. package/dist/{useFilterStateV2-CPBt0qwc.d.mts → useFilterStateV2-DPzkJpGT.d.mts} +3 -3
  489. package/dist/useFilterStateV2.d.mts +1 -1
  490. package/dist/{useFormField-CmEJCqse.d.mts → useFormField-ATKyX8CU.d.mts} +2 -2
  491. package/dist/useFormField-pOVkb5BK.mjs.map +1 -1
  492. package/dist/useFormField.d.mts +1 -1
  493. package/dist/{useLocationPathname-Cnqj8pf4.d.mts → useLocationPathname-DPMpqO1_.d.mts} +1 -1
  494. package/dist/useLocationPathname.d.mts +1 -1
  495. package/dist/{useTableBoxDragAndDrop-8NS4JBuI.d.mts → useTableBoxDragAndDrop-CCMADt-F.d.mts} +1 -1
  496. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  497. package/dist/{useTableColumns-BK-KYY0L.d.mts → useTableColumns-Bw0HvnP4.d.mts} +2 -2
  498. package/dist/useTableColumns.d.mts +1 -1
  499. package/dist/useTruncation.d.mts +1 -1
  500. package/dist/{utilities-CXoc5Cyr.d.mts → utilities-BfXjJZQt.d.mts} +1 -1
  501. package/dist/utilities.d.mts +1 -1
  502. package/dist/utils/storybook.mjs.map +1 -1
  503. package/dist/utils/testing.d.mts +1 -1
  504. package/dist/utils.d.mts +1 -1
  505. package/dist/utils4.d.mts +5 -5
  506. package/dist/{validation-BaqPVG1C.d.mts → validation-yhA0siru.d.mts} +3 -3
  507. package/dist/validation.d.mts +1 -1
  508. package/dist/validation2.d.mts +4 -4
  509. package/dist/{value-control-resolver-CMyFwEY7.d.mts → value-control-resolver-Df0AmGFe.d.mts} +2 -2
  510. package/dist/value-control-resolver.d.mts +1 -1
  511. package/dist/variables/effect.d.mts +1 -1
  512. package/dist/variables/effect.mjs.map +1 -1
  513. package/dist/variables/semantic.d.mts +1 -1
  514. package/llms.txt +1 -1
  515. package/package.json +25 -13
  516. package/skills/ui-authoring/COMPONENTS.md +1 -0
  517. package/dist/DataTable-DEJHWrsy.mjs.map +0 -1
  518. package/dist/DatePicker-D-_ibUd1.mjs.map +0 -1
  519. package/dist/FormField-g1zQFM9T.mjs.map +0 -1
  520. package/dist/Modal-92O_uW8H.mjs.map +0 -1
  521. package/dist/PageHeader-BzvA_NNt.mjs.map +0 -1
  522. package/dist/PageLayout-DCe3F76N.mjs.map +0 -1
  523. package/dist/Pagination-dTsHLVAk.mjs.map +0 -1
  524. package/dist/ProgressIndicator-ISARECzW.mjs.map +0 -1
  525. package/dist/StatusIndicator-pWl1-FLb.mjs.map +0 -1
  526. package/dist/TableControls-BDXOQMr7.mjs.map +0 -1
  527. package/dist/i18n-BLyCaSdJ.mjs.map +0 -1
  528. /package/dist/{index-AnhM47-e2.d.mts → index-BAJc0Rej.d.mts} +0 -0
  529. /package/dist/{index-B33elXxm.d.mts → index-BFHp82YL.d.mts} +0 -0
  530. /package/dist/{index-B4woaFSm.d.mts → index-BYd3Btr1.d.mts} +0 -0
  531. /package/dist/{index-B6T7ov8p.d.mts → index-C6HcjJiY.d.mts} +0 -0
  532. /package/dist/{index-BNRXMhlr.d.mts → index-CEUVsenl.d.mts} +0 -0
  533. /package/dist/{index-BPiqSRRl.d.mts → index-CEqOS-7M.d.mts} +0 -0
  534. /package/dist/{index-BTviwbFV.d.mts → index-CNxS4Tlu.d.mts} +0 -0
  535. /package/dist/{index-Bo9LXG4r.d.mts → index-CP2eJYlK.d.mts} +0 -0
  536. /package/dist/{index-Bq9Ub6MB.d.mts → index-CQQezDJQ2.d.mts} +0 -0
  537. /package/dist/{index-BrGZHEgX.d.mts → index-CWB6exYm.d.mts} +0 -0
  538. /package/dist/{index-Bt4QNofW.d.mts → index-CcSfkYLp2.d.mts} +0 -0
  539. /package/dist/{index-CFuHCx9T.d.mts → index-Cm-1i165.d.mts} +0 -0
  540. /package/dist/{index-CLTQPxoD.d.mts → index-D-giXKyu.d.mts} +0 -0
  541. /package/dist/{index-CaqYCRmZ.d.mts → index-D4DUvwPf.d.mts} +0 -0
  542. /package/dist/{index-CjmAoxrR2.d.mts → index-DCTy4zg0.d.mts} +0 -0
  543. /package/dist/{index-Cx0vQ6ld.d.mts → index-DWIh4oP5.d.mts} +0 -0
  544. /package/dist/{index-CzItj62a.d.mts → index-Dflz2i1X.d.mts} +0 -0
  545. /package/dist/{index-CzUpNo0e.d.mts → index-DhiymMxa.d.mts} +0 -0
  546. /package/dist/{index-DBGd4WeR.d.mts → index-DkrC-i1D.d.mts} +0 -0
  547. /package/dist/{index-DMRtRo7y.d.mts → index-Dp7lwkTl2.d.mts} +0 -0
  548. /package/dist/{index-DNjQe1D8.d.mts → index-DqCA6utX.d.mts} +0 -0
  549. /package/dist/{index-DW3xeuzq.d.mts → index-Iujpc9_6.d.mts} +0 -0
  550. /package/dist/{index-DZlqSwCF.d.mts → index-Jh0C5PIG.d.mts} +0 -0
  551. /package/dist/{index-De7MV8-j.d.mts → index-N-OgGgfF.d.mts} +0 -0
  552. /package/dist/{index-DjG1RCY5.d.mts → index-Oio5ygqN.d.mts} +0 -0
  553. /package/dist/{index-Dlcv6Ku22.d.mts → index-Rvd9MEUQ.d.mts} +0 -0
  554. /package/dist/{index-DrK1_jKY.d.mts → index-YB8V3VRW.d.mts} +0 -0
  555. /package/dist/{index-DztUdPP_.d.mts → index-aKlsLnwy.d.mts} +0 -0
  556. /package/dist/{index-K614ZhWK.d.mts → index-fxXoW-qc.d.mts} +0 -0
  557. /package/dist/{index-NKYLt_R9.d.mts → index-ikHBE458.d.mts} +0 -0
  558. /package/dist/{index-VWno75SQ.d.mts → index-luywJTzJ.d.mts} +0 -0
  559. /package/dist/{index-uMNhmxEh.d.mts → index-xmouCHX9.d.mts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Prism","ChevronRightIcon","ChevronDownIcon"],"sources":["../../../src/components/CodeHighlight/CodeHighlight.tsx","../../../src/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
+ {"version":3,"file":"index.mjs","names":["Prism","ChevronRightIcon","ChevronDownIcon"],"sources":["../../../src/components/CodeHighlight/CodeHighlight.tsx","../../../src/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';\n\nimport useToggle from '#src/lib/useToggle';\nimport { semanticScrollbar } from '#src/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-D2rDQHYZ.mjs";
2
- import { n as ComboboxProps, t as Combobox } from "../../Combobox-BXkcQ2aY.mjs";
1
+ import { D as flattenOptions, a as ComboboxOptionGroup, i as ComboboxOption, o as ComboboxOptionsOrGroups, t as CaretButton } from "../../ComboboxBase-1Xy4pnRV.mjs";
2
+ import { n as ComboboxProps, t as Combobox } from "../../Combobox-BkDYZlUh.mjs";
3
3
  export { CaretButton, Combobox, Combobox as default, ComboboxOption, ComboboxOptionGroup, ComboboxOptionsOrGroups, ComboboxProps, flattenOptions };
@@ -1,22 +1,22 @@
1
- import { n as ControlBarProps, t as ControlBar } from "../../../ControlBar-kJ_eWf8f.mjs";
2
- import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, f as FilterRuleValueChange, g as isEmptyState, h as TopLevelFilterRule, i as EMPTY_FILTER_STATE, l as FilterOperator, m as FilterStateV2, n as CompoundExpression, o as FilterField, p as FilterSize, r as DateRangeFilterValue, s as FilterFieldSource, t as AndGroup, u as FilterRule } from "../../../types-DbOD5vE_.mjs";
3
- import { n as RawFieldInfo, r as buildFieldRegistry, t as FieldRegistry } from "../../../FieldRegistry-a44G08fS.mjs";
4
- import { n as ValueControlResolver, r as resolveValueControl, t as ResolveValueControlOptions } from "../../../value-control-resolver-CMyFwEY7.mjs";
5
- import { t as FilterBar } from "../../../FilterBar-BpMguIXl.mjs";
6
- import { a as ComboboxFilterConfig, c as FilterRenderOptions, d as InputFilterConfig, f as MultiSelectFilterConfig, i as BaseFilterConfig, l as FilterTypeDefinition, o as DateRangeFilterConfig, p as SelectFilterConfig, r as BaseActiveFilter, s as FilterConfig, t as ActiveFilter, u as FilterTypeResolver } from "../../../types-CayYd8EX.mjs";
7
- import { i as TableViewConfigurationProps, n as TableViewConfigurationDropdown, r as TableViewConfigurationDropdownProps, t as TableViewConfiguration } from "../../../TableViewConfigurationDropdown-vYnU0d4k.mjs";
8
- import { n as TableControlsFiltersV2Props, r as TableControlsProps, t as TableControls } from "../../../TableControls-DAjx1TYG.mjs";
9
- import { n as DataTableCompactBar } from "../../../CompactBar-zYfXjFmn.mjs";
10
- import { i as useTableControls, n as TableControlsContextProps, r as TableControlsProvider, t as TableControlsContext } from "../../../TableControlsContext-BEIvE9qN.mjs";
11
- import { a as resolveFilterTypeDefinition, i as isFilterActive, n as FiltersContainer, r as getActiveFilters } from "../../../filters-DjXkx8GJ.mjs";
12
- import { t as dateRuleIntent } from "../../../date-rule-intent-C1aptAoX.mjs";
13
- import { t as resolveDateRangeRuleValue } from "../../../date-range-rule-value-CrVBpQcf.mjs";
14
- import { t as FilterBarProps } from "../../../index-FgIOTuJ4.mjs";
15
- import { a as useFilterBarSize, i as FilterSizeTokens, t as FILTER_SIZE_TOKENS } from "../../../filter-size-context-CbT4pi3S.mjs";
16
- import { n as PillShellProps, t as PillShell } from "../../../PillShell-B35z66jZ.mjs";
17
- import { _ as isNumericComparisonOperator, a as emptyValueForRule, b as reconcileValueForOperator, c as getDefaultOperatorForType, d as getOperatorsForType, n as NumericComparisonOperator, p as isCompleteDateRange, t as NUMERIC_COMPARISON_OPERATORS, u as getOperatorsForField, v as isRangeOperator, y as isValuelessOperator } from "../../../operators-gCG7uZ6y.mjs";
18
- 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-CmgyDnG7.mjs";
19
- import { n as UseFilterStateV2Result, r as useFilterStateV2, t as UseFilterStateV2Options } from "../../../useFilterStateV2-CPBt0qwc.mjs";
20
- import { n as isFilterStateV2, r as pruneToRegistry, t as hasCompleteValue } from "../../../validation-BaqPVG1C.mjs";
21
- import { t as ValueControlProps } from "../../../types-B4KbdEDc.mjs";
1
+ import { n as ControlBarProps, t as ControlBar } from "../../../ControlBar-dqzVo6e6.mjs";
2
+ import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, f as FilterRuleValueChange, g as isEmptyState, h as TopLevelFilterRule, i as EMPTY_FILTER_STATE, l as FilterOperator, m as FilterStateV2, n as CompoundExpression, o as FilterField, p as FilterSize, r as DateRangeFilterValue, s as FilterFieldSource, t as AndGroup, u as FilterRule } from "../../../types-K57NVM0M.mjs";
3
+ import { n as RawFieldInfo, r as buildFieldRegistry, t as FieldRegistry } from "../../../FieldRegistry-CPr7YoG5.mjs";
4
+ import { n as ValueControlResolver, r as resolveValueControl, t as ResolveValueControlOptions } from "../../../value-control-resolver-Df0AmGFe.mjs";
5
+ import { t as FilterBar } from "../../../FilterBar-DPCPfr4_.mjs";
6
+ import { a as ComboboxFilterConfig, c as FilterRenderOptions, d as InputFilterConfig, f as MultiSelectFilterConfig, i as BaseFilterConfig, l as FilterTypeDefinition, o as DateRangeFilterConfig, p as SelectFilterConfig, r as BaseActiveFilter, s as FilterConfig, t as ActiveFilter, u as FilterTypeResolver } from "../../../types-BiRayNak.mjs";
7
+ import { i as TableViewConfigurationProps, n as TableViewConfigurationDropdown, r as TableViewConfigurationDropdownProps, t as TableViewConfiguration } from "../../../TableViewConfigurationDropdown-D0VcRmd4.mjs";
8
+ import { n as TableControlsFiltersV2Props, r as TableControlsProps, t as TableControls } from "../../../TableControls-r58fZb_C.mjs";
9
+ import { n as DataTableCompactBar } from "../../../CompactBar-DmoFq5i6.mjs";
10
+ import { i as useTableControls, n as TableControlsContextProps, r as TableControlsProvider, t as TableControlsContext } from "../../../TableControlsContext-nz8GXmXc.mjs";
11
+ import { a as resolveFilterTypeDefinition, i as isFilterActive, n as FiltersContainer, r as getActiveFilters } from "../../../filters-DUI7TLSn.mjs";
12
+ import { t as dateRuleIntent } from "../../../date-rule-intent-DjYIGcGO.mjs";
13
+ import { t as resolveDateRangeRuleValue } from "../../../date-range-rule-value-3izEoXmi.mjs";
14
+ import { t as FilterBarProps } from "../../../index-_D_TMpPU.mjs";
15
+ import { a as useFilterBarSize, i as FilterSizeTokens, t as FILTER_SIZE_TOKENS } from "../../../filter-size-context-BcpjykVw.mjs";
16
+ import { n as PillShellProps, t as PillShell } from "../../../PillShell-Clv4b-2w.mjs";
17
+ import { _ as isNumericComparisonOperator, a as emptyValueForRule, b as reconcileValueForOperator, c as getDefaultOperatorForType, d as getOperatorsForType, n as NumericComparisonOperator, p as isCompleteDateRange, t as NUMERIC_COMPARISON_OPERATORS, u as getOperatorsForField, v as isRangeOperator, y as isValuelessOperator } from "../../../operators-BTCnQpeu.mjs";
18
+ 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-DmhG0Qg-.mjs";
19
+ import { n as UseFilterStateV2Result, r as useFilterStateV2, t as UseFilterStateV2Options } from "../../../useFilterStateV2-DPzkJpGT.mjs";
20
+ import { n as isFilterStateV2, r as pruneToRegistry, t as hasCompleteValue } from "../../../validation-yhA0siru.mjs";
21
+ import { t as ValueControlProps } from "../../../types-1p-ij0cd.mjs";
22
22
  export { ActiveFilter, AndGroup, BaseActiveFilter, BaseFilterConfig, ComboboxFilterConfig, CompoundExpression, ControlBar, ControlBarProps, DataTableCompactBar, DateRangeFilterConfig, DateRangeFilterValue, EMPTY_FILTER_STATE, FILTER_SIZE_TOKENS, FILTER_STATE_URL_PARAM, FieldRegistry, FilterBar, FilterBarProps, FilterConditionOperator, FilterConfig, FilterField, FilterFieldSource, FilterFieldType, FilterOperator, FilterRenderOptions, FilterRule, FilterRuleValue, FilterRuleValueChange, FilterSize, FilterSizeTokens, FilterStateV2, FilterTypeDefinition, FilterTypeResolver, FiltersContainer, InputFilterConfig, MultiSelectFilterConfig, NUMERIC_COMPARISON_OPERATORS, NumericComparisonOperator, PillShell, PillShellProps, RawFieldInfo, ResolveValueControlOptions, SelectFilterConfig, TableControlsContext, TableControlsContextProps, TableControlsFiltersV2Props, TableControlsProps, TableControlsProvider, TableViewConfiguration, TableViewConfigurationDropdown, TableViewConfigurationDropdownProps, TableViewConfigurationProps, TopLevelFilterRule, UrlStateCodecResult, UseFilterStateV2Options, UseFilterStateV2Result, ValueControlProps, ValueControlResolver, applyFilterStateToSearchParams, buildFieldRegistry, dateRuleIntent, decodeFilterStateFromString, decodeFilterStateFromUrl, TableControls as default, emptyValueForRule, encodeFilterStateToUrlParam, getActiveFilters, getDefaultOperatorForType, getOperatorsForField, getOperatorsForType, hasCompleteValue, isCompleteDateRange, isEmptyState, isFilterActive, isFilterStateV2, isNumericComparisonOperator, isRangeOperator, isValuelessOperator, pruneToRegistry, reconcileValueForOperator, resolveDateRangeRuleValue, resolveFilterTypeDefinition, resolveValueControl, useFilterBarSize, useFilterStateV2, useTableControls };
@@ -1,2 +1,2 @@
1
- import { A as isNumericComparisonOperator, B as useTableControls, C as useFilterBarSize, D as getOperatorsForField, E as getDefaultOperatorForType, F as getActiveFilters, H as DataTableCompactBar, I as isFilterActive, L as resolveFilterTypeDefinition, M as isValuelessOperator, N as reconcileValueForOperator, O as getOperatorsForType, P as FiltersContainer, R as TableControlsContext, S as FILTER_SIZE_TOKENS, T as emptyValueForRule, V as ControlBar, _ as EMPTY_FILTER_STATE, a as encodeFilterStateToUrlParam, b as resolveValueControl, c as FilterBar_default, d as TableViewConfiguration, f as TableViewConfigurationDropdown, g as pruneToRegistry, h as isFilterStateV2, i as decodeFilterStateFromUrl, j as isRangeOperator, k as isCompleteDateRange, l as resolveDateRangeRuleValue, m as hasCompleteValue, n as applyFilterStateToSearchParams, o as FieldRegistry, p as useFilterStateV2, r as decodeFilterStateFromString, s as buildFieldRegistry, t as FILTER_STATE_URL_PARAM, u as TableControls, v as isEmptyState, w as NUMERIC_COMPARISON_OPERATORS, x as dateRuleIntent, y as PillShell, z as TableControlsProvider } from "../../../TableControls-BDXOQMr7.mjs";
1
+ import { A as isNumericComparisonOperator, B as useTableControls, C as useFilterBarSize, D as getOperatorsForField, E as getDefaultOperatorForType, F as getActiveFilters, H as DataTableCompactBar, I as isFilterActive, L as resolveFilterTypeDefinition, M as isValuelessOperator, N as reconcileValueForOperator, O as getOperatorsForType, P as FiltersContainer, R as TableControlsContext, S as FILTER_SIZE_TOKENS, T as emptyValueForRule, V as ControlBar, _ as EMPTY_FILTER_STATE, a as encodeFilterStateToUrlParam, b as resolveValueControl, c as FilterBar_default, d as TableViewConfiguration, f as TableViewConfigurationDropdown, g as pruneToRegistry, h as isFilterStateV2, i as decodeFilterStateFromUrl, j as isRangeOperator, k as isCompleteDateRange, l as resolveDateRangeRuleValue, m as hasCompleteValue, n as applyFilterStateToSearchParams, o as FieldRegistry, p as useFilterStateV2, r as decodeFilterStateFromString, s as buildFieldRegistry, t as FILTER_STATE_URL_PARAM, u as TableControls, v as isEmptyState, w as NUMERIC_COMPARISON_OPERATORS, x as dateRuleIntent, y as PillShell, z as TableControlsProvider } from "../../../TableControls-Dgle87OP.mjs";
2
2
  export { ControlBar, DataTableCompactBar, EMPTY_FILTER_STATE, FILTER_SIZE_TOKENS, FILTER_STATE_URL_PARAM, FieldRegistry, FilterBar_default as FilterBar, FiltersContainer, NUMERIC_COMPARISON_OPERATORS, PillShell, TableControlsContext, TableControlsProvider, TableViewConfiguration, TableViewConfigurationDropdown, applyFilterStateToSearchParams, buildFieldRegistry, dateRuleIntent, decodeFilterStateFromString, decodeFilterStateFromUrl, TableControls as default, emptyValueForRule, encodeFilterStateToUrlParam, getActiveFilters, getDefaultOperatorForType, getOperatorsForField, getOperatorsForType, hasCompleteValue, isCompleteDateRange, isEmptyState, isFilterActive, isFilterStateV2, isNumericComparisonOperator, isRangeOperator, isValuelessOperator, pruneToRegistry, reconcileValueForOperator, resolveDateRangeRuleValue, resolveFilterTypeDefinition, resolveValueControl, useFilterBarSize, useFilterStateV2, useTableControls };
@@ -1,9 +1,9 @@
1
- import { C as RowAction, D as RowDataWithTourTarget, E as RowDataWithSubrowsToAlwaysShowIds, O as SortProps, S as RenderValueStickerFormatConfig, T as RowDataWithSubrows, _ as DataTableColumns, a as DataTableColumnBaseFormat, b as DatetimeConfig, c as DataTableColumnDatetimeFormat, d as DataTableColumnImageFormat, f as DataTableColumnNumberFormat, g as DataTableColumnURLFormat, h as DataTableColumnStringFormat, i as ColumnConfig, k as StickerMapping, l as DataTableColumnFormat, m as DataTableColumnStickerFormat, n as ClientFilterConfig, o as DataTableColumnCheckboxFormat, p as DataTableColumnPiiFormat, r as ClientFilterType, s as DataTableColumnDateFormat, t as BulkAction, u as DataTableColumnIDFormat, v as DataTableVariables, w as RowDataWithDetails, x as HeadlessFilterConfig, y as DateConfig } from "../../types-DJobO07d.mjs";
2
- import { r as useTableColumns, t as RenderFormatFn } from "../../useTableColumns-BK-KYY0L.mjs";
3
- import { a as FloatingActionBarContainer, i as DataTableProps, n as DataTableContainer, r as DataTableControls, t as DataTable } from "../../DataTable-C000E74h.mjs";
4
- import { t as FloatingActionBar } from "../../FloatingActionBar-DPA9v_yH.mjs";
5
- import { t as Inserter } from "../../Inserter-BnQVEqHV.mjs";
6
- import { n as getFilterFnName, t as generateClientFilters } from "../../clientFilterUtils-DYKgw2Yq.mjs";
7
- import { t as getColumnWidths } from "../../constants-D1hoZ5LO.mjs";
8
- import { a as renderAsDate, c as renderAsNumber, d as renderAsSticker, f as renderAsString, i as renderAsCopyableString, l as renderAsPDSFormat, n as renderAsCheckbox, o as renderAsDatetime, p as renderAsURL, r as renderAsCheckboxHeader, s as renderAsLightweightImage, t as PDSFormatOptions, u as renderAsPii } from "../../helpers-CdxEL7ri.mjs";
1
+ import { C as RowAction, D as RowDataWithTourTarget, E as RowDataWithSubrowsToAlwaysShowIds, O as SortProps, S as RenderValueStickerFormatConfig, T as RowDataWithSubrows, _ as DataTableColumns, a as DataTableColumnBaseFormat, b as DatetimeConfig, c as DataTableColumnDatetimeFormat, d as DataTableColumnImageFormat, f as DataTableColumnNumberFormat, g as DataTableColumnURLFormat, h as DataTableColumnStringFormat, i as ColumnConfig, k as StickerMapping, l as DataTableColumnFormat, m as DataTableColumnStickerFormat, n as ClientFilterConfig, o as DataTableColumnCheckboxFormat, p as DataTableColumnPiiFormat, r as ClientFilterType, s as DataTableColumnDateFormat, t as BulkAction, u as DataTableColumnIDFormat, v as DataTableVariables, w as RowDataWithDetails, x as HeadlessFilterConfig, y as DateConfig } from "../../types-C31ecr0j.mjs";
2
+ import { r as useTableColumns, t as RenderFormatFn } from "../../useTableColumns-Bw0HvnP4.mjs";
3
+ import { a as FloatingActionBarContainer, i as DataTableProps, n as DataTableContainer, r as DataTableControls, t as DataTable } from "../../DataTable-Cblw6bLk.mjs";
4
+ import { t as FloatingActionBar } from "../../FloatingActionBar-u3TJcigs.mjs";
5
+ import { t as Inserter } from "../../Inserter-CZeKlPqj.mjs";
6
+ import { n as getFilterFnName, t as generateClientFilters } from "../../clientFilterUtils-BnASP9Tt.mjs";
7
+ import { t as getColumnWidths } from "../../constants-ChVceduh.mjs";
8
+ import { a as renderAsDate, c as renderAsNumber, d as renderAsSticker, f as renderAsString, i as renderAsCopyableString, l as renderAsPDSFormat, n as renderAsCheckbox, o as renderAsDatetime, p as renderAsURL, r as renderAsCheckboxHeader, s as renderAsLightweightImage, t as PDSFormatOptions, u as renderAsPii } from "../../helpers-CDZ7Zk9G.mjs";
9
9
  export { BulkAction, ClientFilterConfig, ClientFilterType, ColumnConfig, DataTable, DataTable as default, DataTableColumnBaseFormat, DataTableColumnCheckboxFormat, DataTableColumnDateFormat, DataTableColumnDatetimeFormat, DataTableColumnFormat, DataTableColumnIDFormat, DataTableColumnImageFormat, DataTableColumnNumberFormat, DataTableColumnPiiFormat, DataTableColumnStickerFormat, DataTableColumnStringFormat, DataTableColumnURLFormat, DataTableColumns, DataTableContainer, DataTableControls, DataTableProps, DataTableVariables, DateConfig, DatetimeConfig, FloatingActionBar, FloatingActionBarContainer, HeadlessFilterConfig, Inserter, PDSFormatOptions, RenderFormatFn, RenderValueStickerFormatConfig, RowAction, RowDataWithDetails, RowDataWithSubrows, RowDataWithSubrowsToAlwaysShowIds, RowDataWithTourTarget, SortProps, StickerMapping, generateClientFilters, getColumnWidths, getFilterFnName, renderAsCheckbox, renderAsCheckboxHeader, renderAsCopyableString, renderAsDate, renderAsDatetime, renderAsLightweightImage, renderAsNumber, renderAsPDSFormat, renderAsPii, renderAsSticker, renderAsString, renderAsURL, useTableColumns };
@@ -1,2 +1,2 @@
1
- import { S as getFilterFnName, _ as renderAsString, a as useTableColumns, b as getColumnWidths, c as renderAsCheckboxHeader, d as renderAsDatetime, f as renderAsLightweightImage, g as renderAsSticker, h as renderAsPii, i as FloatingActionBarContainer, l as renderAsCopyableString, m as renderAsPDSFormat, n as DataTableContainer, o as Inserter, p as renderAsNumber, r as DataTableControls, s as renderAsCheckbox, t as DataTable, u as renderAsDate, v as renderAsURL, x as generateClientFilters, y as FloatingActionBar } from "../../DataTable-DEJHWrsy.mjs";
1
+ import { S as getFilterFnName, _ as renderAsString, a as useTableColumns, b as getColumnWidths, c as renderAsCheckboxHeader, d as renderAsDatetime, f as renderAsLightweightImage, g as renderAsSticker, h as renderAsPii, i as FloatingActionBarContainer, l as renderAsCopyableString, m as renderAsPDSFormat, n as DataTableContainer, o as Inserter, p as renderAsNumber, r as DataTableControls, s as renderAsCheckbox, t as DataTable, u as renderAsDate, v as renderAsURL, x as generateClientFilters, y as FloatingActionBar } from "../../DataTable-B7QqP6YU.mjs";
2
2
  export { DataTable, DataTable as default, DataTableContainer, DataTableControls, FloatingActionBar, FloatingActionBarContainer, Inserter, generateClientFilters, getColumnWidths, getFilterFnName, renderAsCheckbox, renderAsCheckboxHeader, renderAsCopyableString, renderAsDate, renderAsDatetime, renderAsLightweightImage, renderAsNumber, renderAsPDSFormat, renderAsPii, renderAsSticker, renderAsString, renderAsURL, useTableColumns };
@@ -1,2 +1,2 @@
1
- import { C as RowAction, D as RowDataWithTourTarget, E as RowDataWithSubrowsToAlwaysShowIds, O as SortProps, S as RenderValueStickerFormatConfig, T as RowDataWithSubrows, _ as DataTableColumns, a as DataTableColumnBaseFormat, b as DatetimeConfig, c as DataTableColumnDatetimeFormat, d as DataTableColumnImageFormat, f as DataTableColumnNumberFormat, g as DataTableColumnURLFormat, h as DataTableColumnStringFormat, i as ColumnConfig, k as StickerMapping, l as DataTableColumnFormat, m as DataTableColumnStickerFormat, n as ClientFilterConfig, o as DataTableColumnCheckboxFormat, p as DataTableColumnPiiFormat, r as ClientFilterType, s as DataTableColumnDateFormat, t as BulkAction, u as DataTableColumnIDFormat, v as DataTableVariables, w as RowDataWithDetails, x as HeadlessFilterConfig, y as DateConfig } from "../../types-DJobO07d.mjs";
1
+ import { C as RowAction, D as RowDataWithTourTarget, E as RowDataWithSubrowsToAlwaysShowIds, O as SortProps, S as RenderValueStickerFormatConfig, T as RowDataWithSubrows, _ as DataTableColumns, a as DataTableColumnBaseFormat, b as DatetimeConfig, c as DataTableColumnDatetimeFormat, d as DataTableColumnImageFormat, f as DataTableColumnNumberFormat, g as DataTableColumnURLFormat, h as DataTableColumnStringFormat, i as ColumnConfig, k as StickerMapping, l as DataTableColumnFormat, m as DataTableColumnStickerFormat, n as ClientFilterConfig, o as DataTableColumnCheckboxFormat, p as DataTableColumnPiiFormat, r as ClientFilterType, s as DataTableColumnDateFormat, t as BulkAction, u as DataTableColumnIDFormat, v as DataTableVariables, w as RowDataWithDetails, x as HeadlessFilterConfig, y as DateConfig } from "../../types-C31ecr0j.mjs";
2
2
  export { BulkAction, ClientFilterConfig, ClientFilterType, ColumnConfig, DataTableColumnBaseFormat, DataTableColumnCheckboxFormat, DataTableColumnDateFormat, DataTableColumnDatetimeFormat, DataTableColumnFormat, DataTableColumnIDFormat, DataTableColumnImageFormat, DataTableColumnNumberFormat, DataTableColumnPiiFormat, DataTableColumnStickerFormat, DataTableColumnStringFormat, DataTableColumnURLFormat, DataTableColumns, DataTableVariables, DateConfig, DatetimeConfig, HeadlessFilterConfig, RenderValueStickerFormatConfig, RowAction, RowDataWithDetails, RowDataWithSubrows, RowDataWithSubrowsToAlwaysShowIds, RowDataWithTourTarget, SortProps, StickerMapping };
@@ -1,6 +1,6 @@
1
- import { n as DatePickerProps, t as DatePicker } from "../../DatePicker-8kUpFFh8.mjs";
2
- import { i as DateRangePickerProps, n as DateRange, r as DateRangePicker, t as DateFilterChange } from "../../DateRangePicker-Nv4uNuIW.mjs";
3
- import { t as DateField } from "../../DateField-g7malFm-.mjs";
4
- import { t as Calendar } from "../../Calendar-D-6WOLJ1.mjs";
5
- import { n as RangeCalendarProps, t as RangeCalendar } from "../../RangeCalendar-BiugsdSP.mjs";
1
+ import { n as DatePickerProps, t as DatePicker } from "../../DatePicker-1BADH9Pi.mjs";
2
+ import { i as DateRangePickerProps, n as DateRange, r as DateRangePicker, t as DateFilterChange } from "../../DateRangePicker-fq-_pFpg.mjs";
3
+ import { t as DateField } from "../../DateField-CbTxDzYF.mjs";
4
+ import { t as Calendar } from "../../Calendar-50D7poM_.mjs";
5
+ import { n as RangeCalendarProps, t as RangeCalendar } from "../../RangeCalendar-D86xh2yV.mjs";
6
6
  export { Calendar, DateField, DateFilterChange, DatePicker, DatePicker as default, DatePickerProps, DateRange, DateRangePicker, DateRangePickerProps, RangeCalendar, RangeCalendarProps };
@@ -1,2 +1,2 @@
1
- import { a as RangeCalendar, i as DateField, n as Calendar, r as DateRangePicker, t as DatePicker } from "../../DatePicker-D-_ibUd1.mjs";
1
+ import { a as RangeCalendar, i as DateField, n as Calendar, r as DateRangePicker, t as DatePicker } from "../../DatePicker-CHaNe2Es.mjs";
2
2
  export { Calendar, DateField, DatePicker, DatePicker as default, DateRangePicker, RangeCalendar };
@@ -1,2 +1,2 @@
1
- import { n as DropdownMenuProps, r as _default, t as DropdownMenu } from "../../DropdownMenu-CQbS7ML5.mjs";
1
+ import { n as DropdownMenuProps, r as _default, t as DropdownMenu } from "../../DropdownMenu-DjdNBJqP.mjs";
2
2
  export { DropdownMenu, DropdownMenuProps, _default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["uuid"],"sources":["../../../src/components/FloatingPanel/utils.ts","../../../src/components/FloatingPanel/FloatingPanel.tsx","../../../src/components/FloatingPanel/FloatingPanelContext.tsx","../../../src/components/FloatingPanel/FloatingPanelRenderer.tsx"],"sourcesContent":["export const PADDING = 8;\nexport const EDGE_PADDING = PADDING * 6;\n\n// Cap a content-fitting panel's height to the room below its top edge so it\n// can't overflow the viewport bottom when anchored partway down the screen.\nexport function autoFitMaxHeight(viewportHeight: number, topOffset: number, minHeight: number) {\n return Math.max(minHeight, viewportHeight - Math.max(EDGE_PADDING, topOffset) - EDGE_PADDING);\n}\n","import { flip, offset, type Placement, shift, useFloating } from '@floating-ui/react';\nimport { motion, useDragControls, useMotionValue, useReducedMotion } from 'framer-motion';\nimport {\n isValidElement,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport styled, { css } from 'styled-components';\n\nimport { IconButton } from '@persona/design-system/components/Button';\nimport Stack from '@persona/design-system/components/Stack';\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { paragraphMixins } from '@persona/design-system/mixins/text';\nimport { Elevation } from '@persona/design-system/variables/effect';\nimport { BorderRadius, Color, Spacing } from '@persona/design-tokens';\nimport { ArrowCollapseIcon, ArrowExpandIcon, XIcon } from '@persona/icons';\nimport ConfigContext from 'design-system/lib/ConfigContext';\nimport { usePathname } from 'design-system/lib/router';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { semanticScrollbar } from 'design-system/mixins/scrollbar';\n\nimport { autoFitMaxHeight, PADDING } from './utils';\n\nexport const FLOATING_PANEL_ID_PREFIX = 'floating-panel__' as const;\n\nenum ResizeDirection {\n North = 'n',\n South = 's',\n East = 'e',\n West = 'w',\n NorthEast = 'ne',\n NorthWest = 'nw',\n SouthEast = 'se',\n SouthWest = 'sw',\n}\n\nexport interface FloatingPanelProps {\n /** The title text displayed in the panel header */\n title: ReactNode;\n /** Callback function called when the close button is clicked */\n onClose?: () => void;\n /** Content to render inside the main panel area */\n children?: ReactNode;\n /** Optional React component rendered to the left of the expand button in the header */\n headerActions?: ReactNode;\n\n /** Whether the panel displays the fullsize button */\n canFullsize?: boolean;\n\n /** When true, the panel opens already in full-size (maximized) mode. */\n defaultFullSize?: boolean;\n\n /** Initial width of the panel in pixels */\n initialWidth?: number;\n /** Initial height of the panel in pixels */\n initialHeight?: number;\n /** Minimum width the panel can be resized to in pixels */\n minWidth?: number;\n /** Minimum height the panel can be resized to in pixels */\n minHeight?: number;\n\n footerButtons?: ReactNode;\n\n footerAdditionalAction?: ReactNode;\n\n portal?: boolean;\n\n /** Reference to the element that triggered this panel, used for automatic positioning */\n triggerRef?: RefObject<HTMLElement>;\n\n /** Which placement of the trigger element to position the panel on */\n placement?: Placement;\n\n /** Additional main axis offset in pixels from the calculated position. Main axis is defined as the axis in position to where its being defined\n * i.e. right, top, left ,bottom */\n mainAxisOffset?: number;\n\n /** Additional cross offset in pixels from the calculated position. Cross is defined as the axis that runs along the alignment\n * of the floating element. */\n crossAxisOffset?: number;\n\n /** remove padding from the panel content */\n noPadding?: boolean;\n\n /** When true, automatically calls `onClose` if the route changes after the\n * panel mounts. Mirrors the auto-dismiss-on-navigation behavior provided by\n * `PanelProvider` / `usePersistentFloatingPanel` for panels that don't opt\n * into the persistent panel context. Defaults to `false` so existing\n * consumers (e.g. dirty-check confirmation flows) are not broken. */\n dismissOnNavigate?: boolean;\n\n /** When true, the panel's height auto-fits its content via CSS (`max-content`)\n * up to the viewport, instead of using `initialHeight`. Once the user manually\n * resizes, the panel switches to pixel mode and stays there. `initialHeight`\n * is ignored while auto-fitting. */\n fitContent?: boolean;\n}\n\nconst FloatingPanelContainer = styled(motion.div)<{\n $fitHeight?: boolean;\n $maxHeight?: number;\n $minHeight?: number;\n}>`\n position: absolute;\n z-index: ${Z_INDICES.modal};\n background: ${({ theme }) =>\n semanticColor(theme, 'SurfaceElevated', theme.color.background.primary)};\n border: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n border-radius: ${BorderRadius.Lg};\n box-shadow: ${Elevation.Low};\n display: flex;\n flex-direction: column;\n cursor: auto;\n ${({ $fitHeight, $maxHeight, $minHeight }) =>\n $fitHeight &&\n css`\n height: auto;\n max-height: ${$maxHeight ?? 0}px;\n min-height: ${$minHeight ?? 0}px;\n `}\n`;\n\nconst DragHandle = styled(motion.div)<{ isFullSize: boolean }>`\n cursor: ${({ isFullSize }) => (isFullSize ? 'default' : 'grab')};\n user-select: none;\n\n &:active {\n cursor: ${({ isFullSize }) => (isFullSize ? 'default' : 'grabbing')};\n }\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-height: 48px;\n height: 48px;\n overflow: hidden;\n padding: ${Spacing[1]} ${Spacing[1]} ${Spacing[1]} ${Spacing[3]};\n border-bottom: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n`;\n\nconst Footer = styled.div`\n padding: ${Spacing[1]} ${Spacing[1]} ${Spacing[1]} ${Spacing[3]};\n border-top: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n overflow-x: hidden;\n background-color: ${({ theme }) =>\n semanticColor(theme, 'SurfaceElevated', theme.color.background.primary)};\n width: 100%;\n border-radius: 0 0 ${BorderRadius.Lg} ${BorderRadius.Lg};\n`;\n\nconst ResizeHandleBase = styled.div`\n position: absolute;\n user-select: none;\n`;\n\n// Sets the width and height for base corner to 20px\nconst ResizeHandleBaseCorner = styled(ResizeHandleBase)`\n width: 1.25rem;\n height: 1.25rem;\n`;\n\nconst ResizeHandleBottomRight = styled(ResizeHandleBaseCorner)`\n bottom: -0.75rem;\n right: -0.75rem;\n cursor: nwse-resize;\n`;\n\nconst ResizeHandleBottomLeft = styled(ResizeHandleBaseCorner)`\n bottom: -0.75rem;\n left: -0.75rem;\n cursor: nesw-resize;\n`;\n\nconst ResizeHandleTopLeft = styled(ResizeHandleBaseCorner)`\n top: -0.75rem;\n left: -0.75rem;\n cursor: nwse-resize;\n`;\n\nconst ResizeHandleTopRight = styled(ResizeHandleBaseCorner)`\n top: -0.75rem;\n right: -0.75rem;\n cursor: nesw-resize;\n`;\n\n// These are all the Resize handles for the four cardinal direction,\n// To calculate the width, we subtract by the padding of 1rem on both sides\n// which are corners of the panel\nconst ResizeHandleBottom = styled(ResizeHandleBase)`\n bottom: -0.75rem;\n left: 0.5rem;\n width: calc(100% - 1rem);\n height: 1rem;\n cursor: ns-resize;\n user-select: none;\n`;\n\nconst ResizeHandleTop = styled(ResizeHandleBase)`\n top: -0.75rem;\n left: 0.5rem;\n width: calc(100% - 1rem);\n height: 1rem;\n cursor: ns-resize;\n`;\n\nconst ResizeHandleRight = styled(ResizeHandleBase)`\n right: -0.75rem;\n top: 0.5rem;\n width: 1rem;\n height: calc(100% - 1rem);\n cursor: ew-resize;\n`;\n\nconst ResizeHandleLeft = styled(ResizeHandleBase)`\n left: -0.75rem;\n top: 0.5rem;\n width: 1rem;\n height: calc(100% - 1rem);\n cursor: ew-resize;\n`;\n\nconst PanelContent = styled.div<{ $noPadding?: boolean; $fitHeight?: boolean }>`\n overflow-y: auto;\n ${semanticScrollbar}\n overscroll-behavior: contain;\n min-height: 0;\n /* While the panel height is derived from its content, the content must size\n itself (a percentage flex-basis against an indefinite height collapses in\n WebKit); it still shrinks when the panel hits its max-height. */\n flex: ${({ $fitHeight }) => ($fitHeight ? '0 1 auto' : '1 1 0%')};\n padding: ${({ $noPadding }) => ($noPadding ? 0 : Spacing[3])};\n`;\n\n// Sets a min width so that the text will display, but overflows if needed\nconst PanelText = styled.p`\n ${paragraphMixins.sm}\n white-space: nowrap;\n min-width: 3rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n font-weight: 500;\n`;\n\nconst StyledIconButton = styled(IconButton)`\n width: 1.5rem;\n height: 1.5rem;\n border-radius: ${BorderRadius.Md};\n`;\n\n// Only rendered when dismissOnNavigate is true, keeping the router lookup out of the\n// main component body so FloatingPanel works without a Router when not needed.\nfunction DismissOnNavigate({ onClose }: { onClose: () => void }) {\n const pathname = usePathname();\n const initialPathname = useRef(pathname);\n useEffect(() => {\n if (pathname !== initialPathname.current) {\n onClose();\n }\n }, [pathname, onClose]);\n return null;\n}\n\nexport default function FloatingPanel({\n title = 'Panel title',\n children,\n portal = true,\n triggerRef,\n initialWidth = 400,\n initialHeight = 600,\n minWidth = 100,\n minHeight = 150,\n mainAxisOffset = 0,\n crossAxisOffset = 0,\n footerButtons,\n footerAdditionalAction,\n placement = 'right',\n canFullsize = true,\n defaultFullSize = false,\n noPadding,\n headerActions,\n dismissOnNavigate = false,\n fitContent = false,\n onClose = () => {},\n ...restProps\n}: FloatingPanelProps) {\n const { floatingPanel } = useContext(ConfigContext);\n const fullscreenRightInset = floatingPanel?.fullscreenRightInset ?? PADDING;\n const hasFooter = footerButtons || footerAdditionalAction;\n const isAdditionalActionButton =\n isValidElement(footerAdditionalAction) && footerAdditionalAction.type === 'button';\n\n const [panelSize, setPanelSize] = useState({ width: initialWidth, height: initialHeight });\n const panelSizeRef = useRef({ width: initialWidth, height: initialHeight });\n const [panelPosition, setPanelPosition] = useState({ x: 0, y: 0 });\n const [isPositionReady, setIsPositionReady] = useState(!triggerRef); // Ready immediately if no triggerRef\n\n const [fullSize, setFullSize] = useState(defaultFullSize);\n const resizeBottomRef = useRef<number | null>(null);\n const resizeRightRef = useRef<number | null>(null);\n\n const [wasFullSizeToggled, setWasFullSizeToggled] = useState(false);\n const resizeOffsetRef = useRef({ x: 0, y: 0 });\n\n const resizeDirectionRef = useRef<ResizeDirection | null>(null);\n const resizeStartDimensionsRef = useRef({\n width: initialWidth,\n height: initialHeight,\n x: 0,\n y: 0,\n });\n\n // Track if the user has manually resized the panel\n const [hasManuallyResized, setHasManuallyResized] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Track reduced motion preference\n const prefersReducedMotion = useReducedMotion();\n\n const dragControls = useDragControls();\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n const {\n x: floatingX,\n y: floatingY,\n refs,\n } = useFloating({\n placement: placement,\n elements: {\n reference: triggerRef?.current || undefined,\n },\n middleware: [\n offset({\n mainAxis: mainAxisOffset,\n crossAxis: crossAxisOffset,\n }),\n flip(),\n // flip() only swaps sides, so a large panel can still open clipped off an\n // edge. shift() slides it back into view on both axes (crossAxis covers the\n // side axis flip leaves unhandled).\n shift({ crossAxis: true, padding: PADDING }),\n ],\n });\n\n useEffect(() => {\n // Only update position when floating values are not at the default 0,0\n // or when we don't have a triggerRef (meaning we should use initial position)\n if (!triggerRef || floatingX !== 0 || floatingY !== 0) {\n setPanelPosition({\n x: floatingX,\n y: floatingY,\n });\n setIsPositionReady(true);\n }\n }, [floatingX, floatingY, triggerRef]);\n\n // Window dimensions and drag constraints\n const [windowDimensions, setWindowDimensions] = useState({\n width: typeof window !== 'undefined' ? window.innerWidth : 1200,\n height: typeof window !== 'undefined' ? window.innerHeight : 800,\n });\n\n // Update window dimensions on resize\n useEffect(() => {\n const handleResize = () => {\n setWindowDimensions({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const dragConstraints = fullSize\n ? undefined\n : {\n left: PADDING,\n right: Math.max(PADDING, windowDimensions.width - panelSize.width - PADDING),\n top: PADDING,\n bottom: Math.max(PADDING, windowDimensions.height - panelSize.height - PADDING),\n };\n\n // Clamp initial position and any position updates to be within bounds\n const clampPositionToBounds = useCallback(\n (position: { x: number; y: number }) => {\n if (fullSize) {\n return position;\n }\n\n return {\n x: Math.max(\n PADDING,\n Math.min(\n position.x,\n Math.max(PADDING, windowDimensions.width - panelSize.width - PADDING),\n ),\n ),\n y: Math.max(\n PADDING,\n Math.min(\n position.y,\n Math.max(PADDING, windowDimensions.height - panelSize.height - PADDING),\n ),\n ),\n };\n },\n [windowDimensions, panelSize, fullSize],\n );\n\n // Clamp position on window resize\n useEffect(() => {\n if (!fullSize) {\n const clampedPosition = clampPositionToBounds(panelPosition);\n if (clampedPosition.x !== panelPosition.x || clampedPosition.y !== panelPosition.y) {\n setPanelPosition(clampedPosition);\n }\n }\n }, [windowDimensions, panelPosition, clampPositionToBounds, fullSize]);\n\n useEffect(() => {\n if (wasFullSizeToggled) {\n const timer = setTimeout(() => setWasFullSizeToggled(false), 400); // match duration\n return () => clearTimeout(timer);\n }\n }, [wasFullSizeToggled]);\n\n // We need this useEffect here to sync a ref to the panel size, which is needed for resizing\n useEffect(() => {\n panelSizeRef.current = panelSize;\n }, [panelSize]);\n\n // True while the panel is letting CSS auto-fit its height to content\n // (`fitContent` opt-in, no manual resize yet, not in fullsize). In this mode\n // we omit `height` from the framer-motion animate prop so the styled\n // container's `height: max-content` is in effect.\n const isAutoHeight = fitContent && !hasManuallyResized && !fullSize;\n\n // Unified resize handler for all directions\n function handleResizeMouseDown(\n event: React.MouseEvent<HTMLDivElement>,\n direction: ResizeDirection,\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n let currentWidth: number;\n let currentHeight: number;\n let currentX: number;\n let currentY: number;\n\n if (fullSize) {\n // Exit fullscreen but preserve the current rendered dimensions so the panel\n // appears to stay in place while the user resizes from the edges.\n // Measure from the DOM so we get the real pixel width/height regardless of\n // what `calc(100% - 16px)` resolves to (differs for portaled vs. in-place\n // panels because `100%` is relative to the containing block, not the viewport).\n const container = contentRef.current?.parentElement;\n currentWidth = container?.offsetWidth ?? windowDimensions.width - 16;\n currentHeight = container?.offsetHeight ?? windowDimensions.height - 16;\n currentX = 8;\n currentY = 8;\n // Sync motion values now so x.get()/y.get() return the correct position for\n // computing fixed-edge anchors below.\n x.set(8);\n y.set(8);\n setFullSize(false);\n setPanelSize({ width: currentWidth, height: currentHeight });\n setPanelPosition({ x: currentX, y: currentY });\n } else if (isAutoHeight) {\n // If we're leaving CSS auto-fit, capture the current rendered height so the\n // panel doesn't jump from its content-fit size back to `initialHeight` when\n // pixel mode takes over.\n const container = contentRef.current?.parentElement;\n currentHeight = container?.offsetHeight ?? panelSize.height;\n currentWidth = panelSize.width;\n currentX = panelPosition.x;\n currentY = panelPosition.y;\n setPanelSize({ width: currentWidth, height: currentHeight });\n } else {\n currentWidth = panelSize.width;\n currentHeight = panelSize.height;\n currentX = panelPosition.x;\n currentY = panelPosition.y;\n }\n\n panelSizeRef.current = { width: currentWidth, height: currentHeight };\n // Capture start dimensions in a ref so handleResizeMouseMove (stale closure)\n // can read the correct initial values for unchanged axes without depending on\n // panelSize/panelPosition state captured at listener-registration time.\n resizeStartDimensionsRef.current = {\n width: currentWidth,\n height: currentHeight,\n x: currentX,\n y: currentY,\n };\n\n // Mark that user has manually resized - disable auto-resize from now on\n setHasManuallyResized(true);\n\n resizeDirectionRef.current = direction;\n\n // Calculate initial offsets and fixed points based on direction\n if (direction === ResizeDirection.SouthEast) {\n // Bottom-right: resize from bottom-right corner\n resizeOffsetRef.current = {\n x: event.clientX - currentWidth,\n y: event.clientY - currentHeight,\n };\n } else if (direction === ResizeDirection.SouthWest) {\n // Bottom-left: resize from bottom-left corner\n resizeRightRef.current = x.get() + currentWidth;\n resizeOffsetRef.current = {\n x: event.clientX,\n y: event.clientY - currentHeight,\n };\n } else if (direction === ResizeDirection.NorthWest) {\n // Top-left: resize from top-left corner\n resizeRightRef.current = x.get() + currentWidth;\n resizeBottomRef.current = y.get() + currentHeight;\n resizeOffsetRef.current = {\n x: event.clientX,\n y: event.clientY,\n };\n } else if (direction === ResizeDirection.NorthEast) {\n // Top-right: resize from top-right corner\n resizeBottomRef.current = y.get() + currentHeight;\n resizeOffsetRef.current = {\n x: event.clientX - currentWidth,\n y: event.clientY,\n };\n } else if (direction === ResizeDirection.West) {\n // Left edge\n resizeRightRef.current = x.get() + currentWidth;\n resizeOffsetRef.current = {\n x: event.clientX,\n y: 0,\n };\n } else if (direction === ResizeDirection.East) {\n // Right edge\n resizeOffsetRef.current = {\n x: event.clientX - currentWidth,\n y: 0,\n };\n } else if (direction === ResizeDirection.North) {\n // Top edge\n resizeBottomRef.current = y.get() + currentHeight;\n resizeOffsetRef.current = {\n x: 0,\n y: event.clientY,\n };\n } else if (direction === ResizeDirection.South) {\n // Bottom edge\n resizeOffsetRef.current = {\n x: 0,\n y: event.clientY - currentHeight,\n };\n }\n\n document.addEventListener('mousemove', handleResizeMouseMove);\n document.addEventListener('mouseup', handleResizeMouseUp);\n }\n\n // ResizeMouseMove to calculate the new size and position of the panel\n function handleResizeMouseMove(event: MouseEvent) {\n const direction = resizeDirectionRef.current;\n // Use resizeStartDimensionsRef (a ref, always current) rather than panelSize/panelPosition\n // (stale closure values). For unchanged axes, these provide the correct starting dimensions\n // set at drag start — including the case where the drag began in fullscreen mode.\n let newWidth = resizeStartDimensionsRef.current.width;\n let newHeight = resizeStartDimensionsRef.current.height;\n let clampedX = resizeStartDimensionsRef.current.x;\n let clampedY = resizeStartDimensionsRef.current.y;\n\n if (direction === ResizeDirection.SouthEast) {\n // Bottom-right corner\n newWidth = Math.round(Math.max(minWidth, event.clientX - resizeOffsetRef.current.x));\n newHeight = Math.round(Math.max(minHeight, event.clientY - resizeOffsetRef.current.y));\n } else if (direction === ResizeDirection.SouthWest) {\n // Bottom-left corner\n const right = resizeRightRef.current!;\n const proposedX = event.clientX;\n newWidth = Math.round(Math.max(minWidth, right - proposedX));\n clampedX = Math.round(right - newWidth);\n newHeight = Math.round(Math.max(minHeight, event.clientY - resizeOffsetRef.current.y));\n } else if (direction === ResizeDirection.NorthWest) {\n // Top-left corner\n const right = resizeRightRef.current!;\n const bottom = resizeBottomRef.current!;\n const proposedX = event.clientX;\n const proposedY = event.clientY;\n newWidth = Math.round(Math.max(minWidth, right - proposedX));\n newHeight = Math.round(Math.max(minHeight, bottom - proposedY));\n clampedX = Math.round(right - newWidth);\n clampedY = Math.round(bottom - newHeight);\n } else if (direction === ResizeDirection.NorthEast) {\n // Top-right corner\n const bottom = resizeBottomRef.current!;\n const proposedY = event.clientY;\n newWidth = Math.round(Math.max(minWidth, event.clientX - resizeOffsetRef.current.x));\n newHeight = Math.round(Math.max(minHeight, bottom - proposedY));\n clampedY = Math.round(bottom - newHeight);\n } else if (direction === ResizeDirection.West) {\n // Left edge\n const right = resizeRightRef.current!;\n const proposedX = event.clientX;\n newWidth = Math.round(Math.max(minWidth, right - proposedX));\n clampedX = Math.round(right - newWidth);\n } else if (direction === ResizeDirection.East) {\n // Right edge\n newWidth = Math.round(Math.max(minWidth, event.clientX - resizeOffsetRef.current.x));\n } else if (direction === ResizeDirection.North) {\n // Top edge\n const bottom = resizeBottomRef.current!;\n const proposedY = event.clientY;\n newHeight = Math.round(Math.max(minHeight, bottom - proposedY));\n clampedY = Math.round(bottom - newHeight);\n } else if (direction === ResizeDirection.South) {\n // Bottom edge\n newHeight = Math.round(Math.max(minHeight, event.clientY - resizeOffsetRef.current.y));\n }\n\n // We need to flush sync here because it would create jitter while the panel resizes from other directions\n // this is because the browser will animate serially, but we want to update the position and size together\n // so that the panel doesn't jump around\n flushSync(() => {\n setPanelPosition({ x: clampedX, y: clampedY });\n setPanelSize({ width: newWidth, height: newHeight });\n });\n }\n\n function handleResizeMouseUp() {\n document.removeEventListener('mousemove', handleResizeMouseMove);\n document.removeEventListener('mouseup', handleResizeMouseUp);\n }\n\n const panelContent = (\n <FloatingPanelContainer\n // Need to keep the values of x and y for positioning\n ref={refs.setFloating}\n $fitHeight={isAutoHeight}\n $maxHeight={autoFitMaxHeight(windowDimensions.height, panelPosition.y, minHeight)}\n $minHeight={minHeight}\n style={{\n x,\n y,\n }}\n initial={{\n top: 0,\n left: 0,\n opacity: 0,\n }}\n animate={{\n x: fullSize ? PADDING : panelPosition.x,\n y: fullSize ? PADDING : panelPosition.y,\n\n // When fullscreen, leave space for any reserved right-side content.\n width: fullSize ? `calc(100% - ${PADDING + fullscreenRightInset}px)` : panelSize.width,\n // Omit height when CSS auto-fit is active so `height: max-content`\n // on the styled container takes effect.\n ...(isAutoHeight ? {} : { height: fullSize ? 'calc(100% - 16px)' : panelSize.height }),\n opacity: isPositionReady ? 1 : 0,\n }}\n transition={\n wasFullSizeToggled\n ? {\n type: 'tween',\n // Easing curve for a smooth transition\n ease: [0.83, 0.0, 0.17, 1.0],\n duration: prefersReducedMotion ? 1.2 : 0.4,\n }\n : { opacity: { duration: 0.15, ease: 'easeOut' }, duration: 0 }\n }\n onDragEnd={() => {\n if (!fullSize) {\n const newPosition = { x: x.get(), y: y.get() };\n const clampedPosition = clampPositionToBounds(newPosition);\n setPanelPosition(clampedPosition);\n }\n }}\n drag={!fullSize}\n dragControls={dragControls}\n dragListener={false}\n dragMomentum={false}\n dragConstraints={dragConstraints}\n // The frame portals to the body, so panels that dismiss on an outside click\n // need this id to recognize a click in here as one of their own overlays.\n id={`${FLOATING_PANEL_ID_PREFIX}container`}\n {...restProps}\n >\n <DragHandle isFullSize={fullSize} onPointerDown={(e) => dragControls.start(e)}>\n <Stack align='center' direction='horizontal' justify='space-between'>\n <PanelText>{title}</PanelText>\n <Stack direction='horizontal' align='center' spacing={Spacing[1]}>\n {headerActions}\n {canFullsize && (\n <StyledIconButton\n size='sm'\n aria-label={fullSize ? 'collapse' : 'expand'}\n id='floating-panel__toggle-fullsize'\n onClick={() => {\n setWasFullSizeToggled(true);\n setFullSize(!fullSize);\n }}\n >\n {fullSize ? <ArrowCollapseIcon /> : <ArrowExpandIcon />}\n </StyledIconButton>\n )}\n\n <StyledIconButton\n size='sm'\n id='floating-panel__close-panel'\n onClick={() => onClose?.()}\n aria-label='close'\n >\n <XIcon />\n </StyledIconButton>\n </Stack>\n </Stack>\n </DragHandle>\n <PanelContent ref={contentRef} $noPadding={noPadding} $fitHeight={isAutoHeight}>\n {children}\n </PanelContent>\n {hasFooter && (\n <Footer style={{ paddingLeft: isAdditionalActionButton ? Spacing[1] : Spacing[3] }}>\n <Stack\n align='center'\n direction='horizontal'\n justify={footerAdditionalAction ? 'space-between' : 'flex-end'}\n >\n {footerAdditionalAction &&\n (isAdditionalActionButton ? (\n footerAdditionalAction\n ) : (\n <PanelText>{footerAdditionalAction}</PanelText>\n ))}\n\n {footerButtons && <div>{footerButtons}</div>}\n </Stack>\n </Footer>\n )}\n <ResizeHandleBottomRight\n data-test='resize-handle-se'\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.SouthEast)}\n />\n <ResizeHandleBottom\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.South)}\n />\n <ResizeHandleBottomLeft\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.SouthWest)}\n />\n <ResizeHandleLeft\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.West)}\n />\n <ResizeHandleTopLeft\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.NorthWest)}\n />\n <ResizeHandleTop\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.North)}\n />\n <ResizeHandleTopRight\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.NorthEast)}\n />\n <ResizeHandleRight\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.East)}\n />\n </FloatingPanelContainer>\n );\n\n const content = (\n <>\n {dismissOnNavigate && <DismissOnNavigate onClose={onClose} />}\n {panelContent}\n </>\n );\n\n return portal ? createPortal(content, document.body) : content;\n}\n","import {\n createContext,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\n\nimport { usePathname } from 'design-system/lib/router';\n\nexport type Panel = {\n key: string;\n panelElement: ReactElement;\n persistUntilPathRoot?: string;\n};\n\ninterface PanelContextType {\n openPanel: (panel: Panel) => void;\n closePanel: (key: string) => void;\n togglePanel: (panel: Panel) => void;\n closeAllPanels: () => void;\n isPanelOpen: (key: string) => boolean;\n panels: Panel[];\n}\n\nconst PanelContext = createContext<PanelContextType | null>(null);\n\nexport const PanelProvider = ({ children }: { children: ReactNode }) => {\n const [panels, setPanels] = useState<Panel[]>([]);\n const pathname = usePathname();\n\n function shouldPanelPersist(currentUrl: string, persistUntilPathRoot?: string): boolean {\n if (!persistUntilPathRoot) {\n return false;\n }\n return currentUrl.includes(persistUntilPathRoot);\n }\n\n const openPanel = useCallback(\n (panel: Panel) => {\n const { key, panelElement, persistUntilPathRoot } = panel;\n const pathRoot = persistUntilPathRoot || pathname;\n setPanels((prev) => [\n ...prev.filter((p) => p.key !== key), // Remove existing panel with same key\n { key, panelElement, persistUntilPathRoot: pathRoot },\n ]);\n },\n [pathname],\n );\n\n const closePanel = useCallback((key: string) => {\n setPanels((prev) => prev.filter((panel) => panel.key !== key));\n }, []);\n\n const isPanelOpen = useCallback(\n (key: string) => {\n return panels.some((panel) => panel.key === key);\n },\n [panels],\n );\n\n const togglePanel = useCallback(\n (panel: Panel) => {\n const { key } = panel;\n if (isPanelOpen(key)) {\n closePanel(key);\n } else {\n openPanel(panel);\n }\n },\n [isPanelOpen, closePanel, openPanel],\n );\n\n const closeAllPanels = useCallback(() => {\n setPanels([]);\n }, []);\n\n useEffect(() => {\n const nextLocation = pathname;\n\n setPanels((prevPanels) =>\n prevPanels.filter((panel) => shouldPanelPersist(nextLocation, panel.persistUntilPathRoot)),\n );\n }, [pathname]);\n\n return (\n <PanelContext.Provider\n value={{ openPanel, closePanel, togglePanel, closeAllPanels, panels, isPanelOpen }}\n >\n {children}\n </PanelContext.Provider>\n );\n};\n\nexport const usePersistentFloatingPanels = () => {\n const ctx = useContext(PanelContext);\n if (!ctx) {\n throw new Error('usePersistentFloatingPanels must be used within a PanelProvider');\n }\n return ctx;\n};\n\n// This hook is used to open a panel that persists across multiple pages\n// For single page panels, use the useToggle hook instead to manage individual panel state.\nexport const usePersistentFloatingPanel = (panelId?: string) => {\n const ctx = useContext(PanelContext);\n if (!ctx) {\n throw new Error('usePersistentFloatingPanels must be used within a PanelProvider');\n }\n\n // If the panel doesn't need to persist across multiple pages, we generate an id that can be passed back\n const currentPanelId = panelId || `panel-${uuid()}`;\n\n return {\n id: currentPanelId,\n openPanel: useCallback(\n (panel: Panel) => {\n ctx.openPanel(panel);\n },\n [ctx],\n ),\n closePanel: useCallback(() => {\n ctx.closePanel(currentPanelId);\n }, [currentPanelId, ctx]),\n togglePanel: useCallback(\n (panel: Panel) => {\n ctx.togglePanel(panel);\n },\n [ctx],\n ),\n isPanelOpen: ctx.isPanelOpen(currentPanelId),\n };\n};\n","import { cloneElement } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { usePersistentFloatingPanels } from './FloatingPanelContext';\n\nexport default function FloatingPanelRenderer() {\n const { panels, closePanel } = usePersistentFloatingPanels();\n\n if (panels.length === 0) {\n return null;\n }\n\n return createPortal(\n panels.map(({ key, panelElement: panel }) => {\n return cloneElement(panel, { onClose: () => closePanel(key), key: key });\n }),\n document.body,\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["uuid"],"sources":["../../../src/components/FloatingPanel/utils.ts","../../../src/components/FloatingPanel/FloatingPanel.tsx","../../../src/components/FloatingPanel/FloatingPanelContext.tsx","../../../src/components/FloatingPanel/FloatingPanelRenderer.tsx"],"sourcesContent":["export const PADDING = 8;\nexport const EDGE_PADDING = PADDING * 6;\n\n// Cap a content-fitting panel's height to the room below its top edge so it\n// can't overflow the viewport bottom when anchored partway down the screen.\nexport function autoFitMaxHeight(viewportHeight: number, topOffset: number, minHeight: number) {\n return Math.max(minHeight, viewportHeight - Math.max(EDGE_PADDING, topOffset) - EDGE_PADDING);\n}\n","import { flip, offset, type Placement, shift, useFloating } from '@floating-ui/react';\nimport { motion, useDragControls, useMotionValue, useReducedMotion } from 'framer-motion';\nimport {\n isValidElement,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport styled, { css } from 'styled-components';\n\nimport { IconButton } from '@persona/design-system/components/Button';\nimport Stack from '@persona/design-system/components/Stack';\nimport { Z_INDICES } from '@persona/design-system/lib/zindex';\nimport { paragraphMixins } from '@persona/design-system/mixins/text';\nimport { Elevation } from '@persona/design-system/variables/effect';\nimport { BorderRadius, Color, Spacing } from '@persona/design-tokens';\nimport { ArrowCollapseIcon, ArrowExpandIcon, XIcon } from '@persona/icons';\n\nimport ConfigContext from '#src/lib/ConfigContext';\nimport { usePathname } from '#src/lib/router';\nimport { semanticColor } from '#src/lib/semanticColor';\nimport { semanticScrollbar } from '#src/mixins/scrollbar';\n\nimport { autoFitMaxHeight, PADDING } from './utils';\n\nexport const FLOATING_PANEL_ID_PREFIX = 'floating-panel__' as const;\n\nenum ResizeDirection {\n North = 'n',\n South = 's',\n East = 'e',\n West = 'w',\n NorthEast = 'ne',\n NorthWest = 'nw',\n SouthEast = 'se',\n SouthWest = 'sw',\n}\n\nexport interface FloatingPanelProps {\n /** The title text displayed in the panel header */\n title: ReactNode;\n /** Callback function called when the close button is clicked */\n onClose?: () => void;\n /** Content to render inside the main panel area */\n children?: ReactNode;\n /** Optional React component rendered to the left of the expand button in the header */\n headerActions?: ReactNode;\n\n /** Whether the panel displays the fullsize button */\n canFullsize?: boolean;\n\n /** When true, the panel opens already in full-size (maximized) mode. */\n defaultFullSize?: boolean;\n\n /** Initial width of the panel in pixels */\n initialWidth?: number;\n /** Initial height of the panel in pixels */\n initialHeight?: number;\n /** Minimum width the panel can be resized to in pixels */\n minWidth?: number;\n /** Minimum height the panel can be resized to in pixels */\n minHeight?: number;\n\n footerButtons?: ReactNode;\n\n footerAdditionalAction?: ReactNode;\n\n portal?: boolean;\n\n /** Reference to the element that triggered this panel, used for automatic positioning */\n triggerRef?: RefObject<HTMLElement>;\n\n /** Which placement of the trigger element to position the panel on */\n placement?: Placement;\n\n /** Additional main axis offset in pixels from the calculated position. Main axis is defined as the axis in position to where its being defined\n * i.e. right, top, left ,bottom */\n mainAxisOffset?: number;\n\n /** Additional cross offset in pixels from the calculated position. Cross is defined as the axis that runs along the alignment\n * of the floating element. */\n crossAxisOffset?: number;\n\n /** remove padding from the panel content */\n noPadding?: boolean;\n\n /** When true, automatically calls `onClose` if the route changes after the\n * panel mounts. Mirrors the auto-dismiss-on-navigation behavior provided by\n * `PanelProvider` / `usePersistentFloatingPanel` for panels that don't opt\n * into the persistent panel context. Defaults to `false` so existing\n * consumers (e.g. dirty-check confirmation flows) are not broken. */\n dismissOnNavigate?: boolean;\n\n /** When true, the panel's height auto-fits its content via CSS (`max-content`)\n * up to the viewport, instead of using `initialHeight`. Once the user manually\n * resizes, the panel switches to pixel mode and stays there. `initialHeight`\n * is ignored while auto-fitting. */\n fitContent?: boolean;\n}\n\nconst FloatingPanelContainer = styled(motion.div)<{\n $fitHeight?: boolean;\n $maxHeight?: number;\n $minHeight?: number;\n}>`\n position: absolute;\n z-index: ${Z_INDICES.modal};\n background: ${({ theme }) =>\n semanticColor(theme, 'SurfaceElevated', theme.color.background.primary)};\n border: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n border-radius: ${BorderRadius.Lg};\n box-shadow: ${Elevation.Low};\n display: flex;\n flex-direction: column;\n cursor: auto;\n ${({ $fitHeight, $maxHeight, $minHeight }) =>\n $fitHeight &&\n css`\n height: auto;\n max-height: ${$maxHeight ?? 0}px;\n min-height: ${$minHeight ?? 0}px;\n `}\n`;\n\nconst DragHandle = styled(motion.div)<{ isFullSize: boolean }>`\n cursor: ${({ isFullSize }) => (isFullSize ? 'default' : 'grab')};\n user-select: none;\n\n &:active {\n cursor: ${({ isFullSize }) => (isFullSize ? 'default' : 'grabbing')};\n }\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-height: 48px;\n height: 48px;\n overflow: hidden;\n padding: ${Spacing[1]} ${Spacing[1]} ${Spacing[1]} ${Spacing[3]};\n border-bottom: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n`;\n\nconst Footer = styled.div`\n padding: ${Spacing[1]} ${Spacing[1]} ${Spacing[1]} ${Spacing[3]};\n border-top: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n overflow-x: hidden;\n background-color: ${({ theme }) =>\n semanticColor(theme, 'SurfaceElevated', theme.color.background.primary)};\n width: 100%;\n border-radius: 0 0 ${BorderRadius.Lg} ${BorderRadius.Lg};\n`;\n\nconst ResizeHandleBase = styled.div`\n position: absolute;\n user-select: none;\n`;\n\n// Sets the width and height for base corner to 20px\nconst ResizeHandleBaseCorner = styled(ResizeHandleBase)`\n width: 1.25rem;\n height: 1.25rem;\n`;\n\nconst ResizeHandleBottomRight = styled(ResizeHandleBaseCorner)`\n bottom: -0.75rem;\n right: -0.75rem;\n cursor: nwse-resize;\n`;\n\nconst ResizeHandleBottomLeft = styled(ResizeHandleBaseCorner)`\n bottom: -0.75rem;\n left: -0.75rem;\n cursor: nesw-resize;\n`;\n\nconst ResizeHandleTopLeft = styled(ResizeHandleBaseCorner)`\n top: -0.75rem;\n left: -0.75rem;\n cursor: nwse-resize;\n`;\n\nconst ResizeHandleTopRight = styled(ResizeHandleBaseCorner)`\n top: -0.75rem;\n right: -0.75rem;\n cursor: nesw-resize;\n`;\n\n// These are all the Resize handles for the four cardinal direction,\n// To calculate the width, we subtract by the padding of 1rem on both sides\n// which are corners of the panel\nconst ResizeHandleBottom = styled(ResizeHandleBase)`\n bottom: -0.75rem;\n left: 0.5rem;\n width: calc(100% - 1rem);\n height: 1rem;\n cursor: ns-resize;\n user-select: none;\n`;\n\nconst ResizeHandleTop = styled(ResizeHandleBase)`\n top: -0.75rem;\n left: 0.5rem;\n width: calc(100% - 1rem);\n height: 1rem;\n cursor: ns-resize;\n`;\n\nconst ResizeHandleRight = styled(ResizeHandleBase)`\n right: -0.75rem;\n top: 0.5rem;\n width: 1rem;\n height: calc(100% - 1rem);\n cursor: ew-resize;\n`;\n\nconst ResizeHandleLeft = styled(ResizeHandleBase)`\n left: -0.75rem;\n top: 0.5rem;\n width: 1rem;\n height: calc(100% - 1rem);\n cursor: ew-resize;\n`;\n\nconst PanelContent = styled.div<{ $noPadding?: boolean; $fitHeight?: boolean }>`\n overflow-y: auto;\n ${semanticScrollbar}\n overscroll-behavior: contain;\n min-height: 0;\n /* While the panel height is derived from its content, the content must size\n itself (a percentage flex-basis against an indefinite height collapses in\n WebKit); it still shrinks when the panel hits its max-height. */\n flex: ${({ $fitHeight }) => ($fitHeight ? '0 1 auto' : '1 1 0%')};\n padding: ${({ $noPadding }) => ($noPadding ? 0 : Spacing[3])};\n`;\n\n// Sets a min width so that the text will display, but overflows if needed\nconst PanelText = styled.p`\n ${paragraphMixins.sm}\n white-space: nowrap;\n min-width: 3rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n font-weight: 500;\n`;\n\nconst StyledIconButton = styled(IconButton)`\n width: 1.5rem;\n height: 1.5rem;\n border-radius: ${BorderRadius.Md};\n`;\n\n// Only rendered when dismissOnNavigate is true, keeping the router lookup out of the\n// main component body so FloatingPanel works without a Router when not needed.\nfunction DismissOnNavigate({ onClose }: { onClose: () => void }) {\n const pathname = usePathname();\n const initialPathname = useRef(pathname);\n useEffect(() => {\n if (pathname !== initialPathname.current) {\n onClose();\n }\n }, [pathname, onClose]);\n return null;\n}\n\nexport default function FloatingPanel({\n title = 'Panel title',\n children,\n portal = true,\n triggerRef,\n initialWidth = 400,\n initialHeight = 600,\n minWidth = 100,\n minHeight = 150,\n mainAxisOffset = 0,\n crossAxisOffset = 0,\n footerButtons,\n footerAdditionalAction,\n placement = 'right',\n canFullsize = true,\n defaultFullSize = false,\n noPadding,\n headerActions,\n dismissOnNavigate = false,\n fitContent = false,\n onClose = () => {},\n ...restProps\n}: FloatingPanelProps) {\n const { floatingPanel } = useContext(ConfigContext);\n const fullscreenRightInset = floatingPanel?.fullscreenRightInset ?? PADDING;\n const hasFooter = footerButtons || footerAdditionalAction;\n const isAdditionalActionButton =\n isValidElement(footerAdditionalAction) && footerAdditionalAction.type === 'button';\n\n const [panelSize, setPanelSize] = useState({ width: initialWidth, height: initialHeight });\n const panelSizeRef = useRef({ width: initialWidth, height: initialHeight });\n const [panelPosition, setPanelPosition] = useState({ x: 0, y: 0 });\n const [isPositionReady, setIsPositionReady] = useState(!triggerRef); // Ready immediately if no triggerRef\n\n const [fullSize, setFullSize] = useState(defaultFullSize);\n const resizeBottomRef = useRef<number | null>(null);\n const resizeRightRef = useRef<number | null>(null);\n\n const [wasFullSizeToggled, setWasFullSizeToggled] = useState(false);\n const resizeOffsetRef = useRef({ x: 0, y: 0 });\n\n const resizeDirectionRef = useRef<ResizeDirection | null>(null);\n const resizeStartDimensionsRef = useRef({\n width: initialWidth,\n height: initialHeight,\n x: 0,\n y: 0,\n });\n\n // Track if the user has manually resized the panel\n const [hasManuallyResized, setHasManuallyResized] = useState(false);\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Track reduced motion preference\n const prefersReducedMotion = useReducedMotion();\n\n const dragControls = useDragControls();\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n const {\n x: floatingX,\n y: floatingY,\n refs,\n } = useFloating({\n placement: placement,\n elements: {\n reference: triggerRef?.current || undefined,\n },\n middleware: [\n offset({\n mainAxis: mainAxisOffset,\n crossAxis: crossAxisOffset,\n }),\n flip(),\n // flip() only swaps sides, so a large panel can still open clipped off an\n // edge. shift() slides it back into view on both axes (crossAxis covers the\n // side axis flip leaves unhandled).\n shift({ crossAxis: true, padding: PADDING }),\n ],\n });\n\n useEffect(() => {\n // Only update position when floating values are not at the default 0,0\n // or when we don't have a triggerRef (meaning we should use initial position)\n if (!triggerRef || floatingX !== 0 || floatingY !== 0) {\n setPanelPosition({\n x: floatingX,\n y: floatingY,\n });\n setIsPositionReady(true);\n }\n }, [floatingX, floatingY, triggerRef]);\n\n // Window dimensions and drag constraints\n const [windowDimensions, setWindowDimensions] = useState({\n width: typeof window !== 'undefined' ? window.innerWidth : 1200,\n height: typeof window !== 'undefined' ? window.innerHeight : 800,\n });\n\n // Update window dimensions on resize\n useEffect(() => {\n const handleResize = () => {\n setWindowDimensions({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const dragConstraints = fullSize\n ? undefined\n : {\n left: PADDING,\n right: Math.max(PADDING, windowDimensions.width - panelSize.width - PADDING),\n top: PADDING,\n bottom: Math.max(PADDING, windowDimensions.height - panelSize.height - PADDING),\n };\n\n // Clamp initial position and any position updates to be within bounds\n const clampPositionToBounds = useCallback(\n (position: { x: number; y: number }) => {\n if (fullSize) {\n return position;\n }\n\n return {\n x: Math.max(\n PADDING,\n Math.min(\n position.x,\n Math.max(PADDING, windowDimensions.width - panelSize.width - PADDING),\n ),\n ),\n y: Math.max(\n PADDING,\n Math.min(\n position.y,\n Math.max(PADDING, windowDimensions.height - panelSize.height - PADDING),\n ),\n ),\n };\n },\n [windowDimensions, panelSize, fullSize],\n );\n\n // Clamp position on window resize\n useEffect(() => {\n if (!fullSize) {\n const clampedPosition = clampPositionToBounds(panelPosition);\n if (clampedPosition.x !== panelPosition.x || clampedPosition.y !== panelPosition.y) {\n setPanelPosition(clampedPosition);\n }\n }\n }, [windowDimensions, panelPosition, clampPositionToBounds, fullSize]);\n\n useEffect(() => {\n if (wasFullSizeToggled) {\n const timer = setTimeout(() => setWasFullSizeToggled(false), 400); // match duration\n return () => clearTimeout(timer);\n }\n }, [wasFullSizeToggled]);\n\n // We need this useEffect here to sync a ref to the panel size, which is needed for resizing\n useEffect(() => {\n panelSizeRef.current = panelSize;\n }, [panelSize]);\n\n // True while the panel is letting CSS auto-fit its height to content\n // (`fitContent` opt-in, no manual resize yet, not in fullsize). In this mode\n // we omit `height` from the framer-motion animate prop so the styled\n // container's `height: max-content` is in effect.\n const isAutoHeight = fitContent && !hasManuallyResized && !fullSize;\n\n // Unified resize handler for all directions\n function handleResizeMouseDown(\n event: React.MouseEvent<HTMLDivElement>,\n direction: ResizeDirection,\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n let currentWidth: number;\n let currentHeight: number;\n let currentX: number;\n let currentY: number;\n\n if (fullSize) {\n // Exit fullscreen but preserve the current rendered dimensions so the panel\n // appears to stay in place while the user resizes from the edges.\n // Measure from the DOM so we get the real pixel width/height regardless of\n // what `calc(100% - 16px)` resolves to (differs for portaled vs. in-place\n // panels because `100%` is relative to the containing block, not the viewport).\n const container = contentRef.current?.parentElement;\n currentWidth = container?.offsetWidth ?? windowDimensions.width - 16;\n currentHeight = container?.offsetHeight ?? windowDimensions.height - 16;\n currentX = 8;\n currentY = 8;\n // Sync motion values now so x.get()/y.get() return the correct position for\n // computing fixed-edge anchors below.\n x.set(8);\n y.set(8);\n setFullSize(false);\n setPanelSize({ width: currentWidth, height: currentHeight });\n setPanelPosition({ x: currentX, y: currentY });\n } else if (isAutoHeight) {\n // If we're leaving CSS auto-fit, capture the current rendered height so the\n // panel doesn't jump from its content-fit size back to `initialHeight` when\n // pixel mode takes over.\n const container = contentRef.current?.parentElement;\n currentHeight = container?.offsetHeight ?? panelSize.height;\n currentWidth = panelSize.width;\n currentX = panelPosition.x;\n currentY = panelPosition.y;\n setPanelSize({ width: currentWidth, height: currentHeight });\n } else {\n currentWidth = panelSize.width;\n currentHeight = panelSize.height;\n currentX = panelPosition.x;\n currentY = panelPosition.y;\n }\n\n panelSizeRef.current = { width: currentWidth, height: currentHeight };\n // Capture start dimensions in a ref so handleResizeMouseMove (stale closure)\n // can read the correct initial values for unchanged axes without depending on\n // panelSize/panelPosition state captured at listener-registration time.\n resizeStartDimensionsRef.current = {\n width: currentWidth,\n height: currentHeight,\n x: currentX,\n y: currentY,\n };\n\n // Mark that user has manually resized - disable auto-resize from now on\n setHasManuallyResized(true);\n\n resizeDirectionRef.current = direction;\n\n // Calculate initial offsets and fixed points based on direction\n if (direction === ResizeDirection.SouthEast) {\n // Bottom-right: resize from bottom-right corner\n resizeOffsetRef.current = {\n x: event.clientX - currentWidth,\n y: event.clientY - currentHeight,\n };\n } else if (direction === ResizeDirection.SouthWest) {\n // Bottom-left: resize from bottom-left corner\n resizeRightRef.current = x.get() + currentWidth;\n resizeOffsetRef.current = {\n x: event.clientX,\n y: event.clientY - currentHeight,\n };\n } else if (direction === ResizeDirection.NorthWest) {\n // Top-left: resize from top-left corner\n resizeRightRef.current = x.get() + currentWidth;\n resizeBottomRef.current = y.get() + currentHeight;\n resizeOffsetRef.current = {\n x: event.clientX,\n y: event.clientY,\n };\n } else if (direction === ResizeDirection.NorthEast) {\n // Top-right: resize from top-right corner\n resizeBottomRef.current = y.get() + currentHeight;\n resizeOffsetRef.current = {\n x: event.clientX - currentWidth,\n y: event.clientY,\n };\n } else if (direction === ResizeDirection.West) {\n // Left edge\n resizeRightRef.current = x.get() + currentWidth;\n resizeOffsetRef.current = {\n x: event.clientX,\n y: 0,\n };\n } else if (direction === ResizeDirection.East) {\n // Right edge\n resizeOffsetRef.current = {\n x: event.clientX - currentWidth,\n y: 0,\n };\n } else if (direction === ResizeDirection.North) {\n // Top edge\n resizeBottomRef.current = y.get() + currentHeight;\n resizeOffsetRef.current = {\n x: 0,\n y: event.clientY,\n };\n } else if (direction === ResizeDirection.South) {\n // Bottom edge\n resizeOffsetRef.current = {\n x: 0,\n y: event.clientY - currentHeight,\n };\n }\n\n document.addEventListener('mousemove', handleResizeMouseMove);\n document.addEventListener('mouseup', handleResizeMouseUp);\n }\n\n // ResizeMouseMove to calculate the new size and position of the panel\n function handleResizeMouseMove(event: MouseEvent) {\n const direction = resizeDirectionRef.current;\n // Use resizeStartDimensionsRef (a ref, always current) rather than panelSize/panelPosition\n // (stale closure values). For unchanged axes, these provide the correct starting dimensions\n // set at drag start — including the case where the drag began in fullscreen mode.\n let newWidth = resizeStartDimensionsRef.current.width;\n let newHeight = resizeStartDimensionsRef.current.height;\n let clampedX = resizeStartDimensionsRef.current.x;\n let clampedY = resizeStartDimensionsRef.current.y;\n\n if (direction === ResizeDirection.SouthEast) {\n // Bottom-right corner\n newWidth = Math.round(Math.max(minWidth, event.clientX - resizeOffsetRef.current.x));\n newHeight = Math.round(Math.max(minHeight, event.clientY - resizeOffsetRef.current.y));\n } else if (direction === ResizeDirection.SouthWest) {\n // Bottom-left corner\n const right = resizeRightRef.current!;\n const proposedX = event.clientX;\n newWidth = Math.round(Math.max(minWidth, right - proposedX));\n clampedX = Math.round(right - newWidth);\n newHeight = Math.round(Math.max(minHeight, event.clientY - resizeOffsetRef.current.y));\n } else if (direction === ResizeDirection.NorthWest) {\n // Top-left corner\n const right = resizeRightRef.current!;\n const bottom = resizeBottomRef.current!;\n const proposedX = event.clientX;\n const proposedY = event.clientY;\n newWidth = Math.round(Math.max(minWidth, right - proposedX));\n newHeight = Math.round(Math.max(minHeight, bottom - proposedY));\n clampedX = Math.round(right - newWidth);\n clampedY = Math.round(bottom - newHeight);\n } else if (direction === ResizeDirection.NorthEast) {\n // Top-right corner\n const bottom = resizeBottomRef.current!;\n const proposedY = event.clientY;\n newWidth = Math.round(Math.max(minWidth, event.clientX - resizeOffsetRef.current.x));\n newHeight = Math.round(Math.max(minHeight, bottom - proposedY));\n clampedY = Math.round(bottom - newHeight);\n } else if (direction === ResizeDirection.West) {\n // Left edge\n const right = resizeRightRef.current!;\n const proposedX = event.clientX;\n newWidth = Math.round(Math.max(minWidth, right - proposedX));\n clampedX = Math.round(right - newWidth);\n } else if (direction === ResizeDirection.East) {\n // Right edge\n newWidth = Math.round(Math.max(minWidth, event.clientX - resizeOffsetRef.current.x));\n } else if (direction === ResizeDirection.North) {\n // Top edge\n const bottom = resizeBottomRef.current!;\n const proposedY = event.clientY;\n newHeight = Math.round(Math.max(minHeight, bottom - proposedY));\n clampedY = Math.round(bottom - newHeight);\n } else if (direction === ResizeDirection.South) {\n // Bottom edge\n newHeight = Math.round(Math.max(minHeight, event.clientY - resizeOffsetRef.current.y));\n }\n\n // We need to flush sync here because it would create jitter while the panel resizes from other directions\n // this is because the browser will animate serially, but we want to update the position and size together\n // so that the panel doesn't jump around\n flushSync(() => {\n setPanelPosition({ x: clampedX, y: clampedY });\n setPanelSize({ width: newWidth, height: newHeight });\n });\n }\n\n function handleResizeMouseUp() {\n document.removeEventListener('mousemove', handleResizeMouseMove);\n document.removeEventListener('mouseup', handleResizeMouseUp);\n }\n\n const panelContent = (\n <FloatingPanelContainer\n // Need to keep the values of x and y for positioning\n ref={refs.setFloating}\n $fitHeight={isAutoHeight}\n $maxHeight={autoFitMaxHeight(windowDimensions.height, panelPosition.y, minHeight)}\n $minHeight={minHeight}\n style={{\n x,\n y,\n }}\n initial={{\n top: 0,\n left: 0,\n opacity: 0,\n }}\n animate={{\n x: fullSize ? PADDING : panelPosition.x,\n y: fullSize ? PADDING : panelPosition.y,\n\n // When fullscreen, leave space for any reserved right-side content.\n width: fullSize ? `calc(100% - ${PADDING + fullscreenRightInset}px)` : panelSize.width,\n // Omit height when CSS auto-fit is active so `height: max-content`\n // on the styled container takes effect.\n ...(isAutoHeight ? {} : { height: fullSize ? 'calc(100% - 16px)' : panelSize.height }),\n opacity: isPositionReady ? 1 : 0,\n }}\n transition={\n wasFullSizeToggled\n ? {\n type: 'tween',\n // Easing curve for a smooth transition\n ease: [0.83, 0.0, 0.17, 1.0],\n duration: prefersReducedMotion ? 1.2 : 0.4,\n }\n : { opacity: { duration: 0.15, ease: 'easeOut' }, duration: 0 }\n }\n onDragEnd={() => {\n if (!fullSize) {\n const newPosition = { x: x.get(), y: y.get() };\n const clampedPosition = clampPositionToBounds(newPosition);\n setPanelPosition(clampedPosition);\n }\n }}\n drag={!fullSize}\n dragControls={dragControls}\n dragListener={false}\n dragMomentum={false}\n dragConstraints={dragConstraints}\n // The frame portals to the body, so panels that dismiss on an outside click\n // need this id to recognize a click in here as one of their own overlays.\n id={`${FLOATING_PANEL_ID_PREFIX}container`}\n {...restProps}\n >\n <DragHandle isFullSize={fullSize} onPointerDown={(e) => dragControls.start(e)}>\n <Stack align='center' direction='horizontal' justify='space-between'>\n <PanelText>{title}</PanelText>\n <Stack direction='horizontal' align='center' spacing={Spacing[1]}>\n {headerActions}\n {canFullsize && (\n <StyledIconButton\n size='sm'\n aria-label={fullSize ? 'collapse' : 'expand'}\n id='floating-panel__toggle-fullsize'\n onClick={() => {\n setWasFullSizeToggled(true);\n setFullSize(!fullSize);\n }}\n >\n {fullSize ? <ArrowCollapseIcon /> : <ArrowExpandIcon />}\n </StyledIconButton>\n )}\n\n <StyledIconButton\n size='sm'\n id='floating-panel__close-panel'\n onClick={() => onClose?.()}\n aria-label='close'\n >\n <XIcon />\n </StyledIconButton>\n </Stack>\n </Stack>\n </DragHandle>\n <PanelContent ref={contentRef} $noPadding={noPadding} $fitHeight={isAutoHeight}>\n {children}\n </PanelContent>\n {hasFooter && (\n <Footer style={{ paddingLeft: isAdditionalActionButton ? Spacing[1] : Spacing[3] }}>\n <Stack\n align='center'\n direction='horizontal'\n justify={footerAdditionalAction ? 'space-between' : 'flex-end'}\n >\n {footerAdditionalAction &&\n (isAdditionalActionButton ? (\n footerAdditionalAction\n ) : (\n <PanelText>{footerAdditionalAction}</PanelText>\n ))}\n\n {footerButtons && <div>{footerButtons}</div>}\n </Stack>\n </Footer>\n )}\n <ResizeHandleBottomRight\n data-test='resize-handle-se'\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.SouthEast)}\n />\n <ResizeHandleBottom\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.South)}\n />\n <ResizeHandleBottomLeft\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.SouthWest)}\n />\n <ResizeHandleLeft\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.West)}\n />\n <ResizeHandleTopLeft\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.NorthWest)}\n />\n <ResizeHandleTop\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.North)}\n />\n <ResizeHandleTopRight\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.NorthEast)}\n />\n <ResizeHandleRight\n onMouseDown={(event) => handleResizeMouseDown(event, ResizeDirection.East)}\n />\n </FloatingPanelContainer>\n );\n\n const content = (\n <>\n {dismissOnNavigate && <DismissOnNavigate onClose={onClose} />}\n {panelContent}\n </>\n );\n\n return portal ? createPortal(content, document.body) : content;\n}\n","import {\n createContext,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { v4 as uuid } from 'uuid';\n\nimport { usePathname } from '#src/lib/router';\n\nexport type Panel = {\n key: string;\n panelElement: ReactElement;\n persistUntilPathRoot?: string;\n};\n\ninterface PanelContextType {\n openPanel: (panel: Panel) => void;\n closePanel: (key: string) => void;\n togglePanel: (panel: Panel) => void;\n closeAllPanels: () => void;\n isPanelOpen: (key: string) => boolean;\n panels: Panel[];\n}\n\nconst PanelContext = createContext<PanelContextType | null>(null);\n\nexport const PanelProvider = ({ children }: { children: ReactNode }) => {\n const [panels, setPanels] = useState<Panel[]>([]);\n const pathname = usePathname();\n\n function shouldPanelPersist(currentUrl: string, persistUntilPathRoot?: string): boolean {\n if (!persistUntilPathRoot) {\n return false;\n }\n return currentUrl.includes(persistUntilPathRoot);\n }\n\n const openPanel = useCallback(\n (panel: Panel) => {\n const { key, panelElement, persistUntilPathRoot } = panel;\n const pathRoot = persistUntilPathRoot || pathname;\n setPanels((prev) => [\n ...prev.filter((p) => p.key !== key), // Remove existing panel with same key\n { key, panelElement, persistUntilPathRoot: pathRoot },\n ]);\n },\n [pathname],\n );\n\n const closePanel = useCallback((key: string) => {\n setPanels((prev) => prev.filter((panel) => panel.key !== key));\n }, []);\n\n const isPanelOpen = useCallback(\n (key: string) => {\n return panels.some((panel) => panel.key === key);\n },\n [panels],\n );\n\n const togglePanel = useCallback(\n (panel: Panel) => {\n const { key } = panel;\n if (isPanelOpen(key)) {\n closePanel(key);\n } else {\n openPanel(panel);\n }\n },\n [isPanelOpen, closePanel, openPanel],\n );\n\n const closeAllPanels = useCallback(() => {\n setPanels([]);\n }, []);\n\n useEffect(() => {\n const nextLocation = pathname;\n\n setPanels((prevPanels) =>\n prevPanels.filter((panel) => shouldPanelPersist(nextLocation, panel.persistUntilPathRoot)),\n );\n }, [pathname]);\n\n return (\n <PanelContext.Provider\n value={{ openPanel, closePanel, togglePanel, closeAllPanels, panels, isPanelOpen }}\n >\n {children}\n </PanelContext.Provider>\n );\n};\n\nexport const usePersistentFloatingPanels = () => {\n const ctx = useContext(PanelContext);\n if (!ctx) {\n throw new Error('usePersistentFloatingPanels must be used within a PanelProvider');\n }\n return ctx;\n};\n\n// This hook is used to open a panel that persists across multiple pages\n// For single page panels, use the useToggle hook instead to manage individual panel state.\nexport const usePersistentFloatingPanel = (panelId?: string) => {\n const ctx = useContext(PanelContext);\n if (!ctx) {\n throw new Error('usePersistentFloatingPanels must be used within a PanelProvider');\n }\n\n // If the panel doesn't need to persist across multiple pages, we generate an id that can be passed back\n const currentPanelId = panelId || `panel-${uuid()}`;\n\n return {\n id: currentPanelId,\n openPanel: useCallback(\n (panel: Panel) => {\n ctx.openPanel(panel);\n },\n [ctx],\n ),\n closePanel: useCallback(() => {\n ctx.closePanel(currentPanelId);\n }, [currentPanelId, ctx]),\n togglePanel: useCallback(\n (panel: Panel) => {\n ctx.togglePanel(panel);\n },\n [ctx],\n ),\n isPanelOpen: ctx.isPanelOpen(currentPanelId),\n };\n};\n","import { cloneElement } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { usePersistentFloatingPanels } from './FloatingPanelContext';\n\nexport default function FloatingPanelRenderer() {\n const { panels, closePanel } = usePersistentFloatingPanels();\n\n if (panels.length === 0) {\n return null;\n }\n\n return createPortal(\n panels.map(({ key, panelElement: panel }) => {\n return cloneElement(panel, { onClose: () => closePanel(key), key: key });\n }),\n document.body,\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import FloatingToolbar, { ensureProtocol } from "../../FloatingToolbar.mjs";
2
+ export { FloatingToolbar as default, ensureProtocol };
@@ -0,0 +1,2 @@
1
+ import { n as ensureProtocol, t as FloatingToolbar } from "../../FloatingToolbar-Df90f7Dm.mjs";
2
+ export { FloatingToolbar as default, ensureProtocol };
@@ -1,3 +1,3 @@
1
- import { a as FormControlProps, c as FormLabelProps, i as FormControlBaseProps, l as HelperText, n as ErrorText, o as FormInputContainer, r as FormControl, s as FormLabel, t as Container, u as WarningText } from "../../FormControl-TkYMZeBd.mjs";
2
- import { r as useFormField } from "../../useFormField-CmEJCqse.mjs";
1
+ import { a as FormControlProps, c as FormLabelProps, i as FormControlBaseProps, l as HelperText, n as ErrorText, o as FormInputContainer, r as FormControl, s as FormLabel, t as Container, u as WarningText } from "../../FormControl-D8vpeAPI.mjs";
2
+ import { r as useFormField } from "../../useFormField-ATKyX8CU.mjs";
3
3
  export { Container, ErrorText, FormControl, FormControl as default, FormControlBaseProps, FormControlProps, FormInputContainer, FormLabel, FormLabelProps, HelperText, WarningText, useFormField };
@@ -1,6 +1,6 @@
1
- import { n as FormFieldBaseProps, r as FormFieldProps, t as FormField } from "../../FormField-PBo1ctY8.mjs";
2
- import { _ as ToggleField, a as ComboboxSingleSelectFieldProps, c as RadioGroupFieldProps, d as SelectField, f as SelectFieldProps, g as TextFieldProps, h as TextField, i as ComboboxMultiSelectFieldProps, l as SegmentedControlField, m as TextAreaFieldProps, n as CheckboxFieldProps, o as ImplementsFormField, p as TextAreaField, r as ComboboxField, s as RadioGroupField, t as CheckboxField, u as SegmentedControlFieldProps, v as ToggleFieldProps, y as splitOutFormFieldProps } from "../../inputFields-CYttsz5M.mjs";
3
- import { t as CheckboxGroupField } from "../../CheckboxGroupField-UHpA38U5.mjs";
4
- import { t as ListBoxField } from "../../ListBoxField-CtPDd_Aw.mjs";
5
- import { a as TableBoxFieldActionGroup, i as TableBoxFieldActionEntry, n as TableBoxField, r as TableBoxFieldAction, t as TABLE_BOX_FIELD_ADD_BUTTON_ARIA_LABEL } from "../../TableBoxField-B7bHv7uV.mjs";
1
+ import { n as FormFieldBaseProps, r as FormFieldProps, t as FormField } from "../../FormField-C6vp1Vfe.mjs";
2
+ import { _ as ToggleField, a as ComboboxSingleSelectFieldProps, c as RadioGroupFieldProps, d as SelectField, f as SelectFieldProps, g as TextFieldProps, h as TextField, i as ComboboxMultiSelectFieldProps, l as SegmentedControlField, m as TextAreaFieldProps, n as CheckboxFieldProps, o as ImplementsFormField, p as TextAreaField, r as ComboboxField, s as RadioGroupField, t as CheckboxField, u as SegmentedControlFieldProps, v as ToggleFieldProps, y as splitOutFormFieldProps } from "../../inputFields-iRg_emVK.mjs";
3
+ import { t as CheckboxGroupField } from "../../CheckboxGroupField-Cw-1UxIW.mjs";
4
+ import { t as ListBoxField } from "../../ListBoxField-DVLggscv.mjs";
5
+ import { a as TableBoxFieldActionGroup, i as TableBoxFieldActionEntry, n as TableBoxField, r as TableBoxFieldAction, t as TABLE_BOX_FIELD_ADD_BUTTON_ARIA_LABEL } from "../../TableBoxField-DRx24VAz.mjs";
6
6
  export { CheckboxField, CheckboxFieldProps, CheckboxGroupField, ComboboxField, ComboboxMultiSelectFieldProps, ComboboxSingleSelectFieldProps, FormField, FormField as default, FormFieldBaseProps, FormFieldProps, ImplementsFormField, ListBoxField, RadioGroupField, RadioGroupFieldProps, SegmentedControlField, SegmentedControlFieldProps, SelectField, SelectFieldProps, TABLE_BOX_FIELD_ADD_BUTTON_ARIA_LABEL, TableBoxField, TableBoxFieldAction, TableBoxFieldActionEntry, TableBoxFieldActionGroup, TextAreaField, TextAreaFieldProps, TextField, TextFieldProps, ToggleField, ToggleFieldProps, splitOutFormFieldProps };
@@ -1,2 +1,2 @@
1
- import { a as CheckboxField, c as SegmentedControlField, d as TextField, f as ToggleField, i as CheckboxGroupField, l as SelectField, m as FormField, n as TableBoxField, o as ComboboxField, p as splitOutFormFieldProps, r as ListBoxField, s as RadioGroupField, t as TABLE_BOX_FIELD_ADD_BUTTON_ARIA_LABEL, u as TextAreaField } from "../../FormField-g1zQFM9T.mjs";
1
+ import { a as CheckboxField, c as SegmentedControlField, d as TextField, f as ToggleField, i as CheckboxGroupField, l as SelectField, m as FormField, n as TableBoxField, o as ComboboxField, p as splitOutFormFieldProps, r as ListBoxField, s as RadioGroupField, t as TABLE_BOX_FIELD_ADD_BUTTON_ARIA_LABEL, u as TextAreaField } from "../../FormField-BStxmlZT.mjs";
2
2
  export { CheckboxField, CheckboxGroupField, ComboboxField, FormField, FormField as default, ListBoxField, RadioGroupField, SegmentedControlField, SelectField, TABLE_BOX_FIELD_ADD_BUTTON_ARIA_LABEL, TableBoxField, TextAreaField, TextField, ToggleField, splitOutFormFieldProps };
@@ -1,2 +1,2 @@
1
- import { i as useGridBreakpoint, n as GRID_BREAKPOINTS, r as Grid, t as GridItem } from "../../Grid-BtTuj5mR.mjs";
1
+ import { i as useGridBreakpoint, n as GRID_BREAKPOINTS, r as Grid, t as GridItem } from "../../Grid-CYpOqTUu.mjs";
2
2
  export { GRID_BREAKPOINTS, Grid, Grid as default, GridItem, useGridBreakpoint };