@servicetitan/anvil2 3.4.2 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/{AiMark-BLBxE1Oj.js → AiMark-voHPSerQ.js} +27 -12
  3. package/dist/{AiMark-BLBxE1Oj.js.map → AiMark-voHPSerQ.js.map} +1 -1
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-nwycCmiL.js → Alert-CPe0yh6A.js} +3 -3
  6. package/dist/{Alert-nwycCmiL.js.map → Alert-CPe0yh6A.js.map} +1 -1
  7. package/dist/Alert.js +1 -1
  8. package/dist/{Announcement-4w6XjLcB.js → Announcement-DU0J4111.js} +3 -3
  9. package/dist/{Announcement-4w6XjLcB.js.map → Announcement-DU0J4111.js.map} +1 -1
  10. package/dist/Announcement.js +1 -1
  11. package/dist/{AnvilProvider-BQsp0VPq.js → AnvilProvider-b3gvW6Md.js} +4 -39
  12. package/dist/AnvilProvider-b3gvW6Md.js.map +1 -0
  13. package/dist/AnvilProvider.js +1 -1
  14. package/dist/{Breadcrumbs-DbV4ld8s.js → Breadcrumbs-VzOM2nBU.js} +4 -4
  15. package/dist/{Breadcrumbs-DbV4ld8s.js.map → Breadcrumbs-VzOM2nBU.js.map} +1 -1
  16. package/dist/Breadcrumbs.js +1 -1
  17. package/dist/{Button-CjeF1Agb.js → Button-BNzCI47m.js} +2 -2
  18. package/dist/{Button-CjeF1Agb.js.map → Button-BNzCI47m.js.map} +1 -1
  19. package/dist/Button.js +1 -1
  20. package/dist/{ButtonLink-BSReBbc3.js → ButtonLink-PlW08u41.js} +2 -2
  21. package/dist/{ButtonLink-BSReBbc3.js.map → ButtonLink-PlW08u41.js.map} +1 -1
  22. package/dist/ButtonLink.js +1 -1
  23. package/dist/{ButtonToggle-CnOsM7-u.js → ButtonToggle-DBGc7dIn.js} +2 -2
  24. package/dist/{ButtonToggle-CnOsM7-u.js.map → ButtonToggle-DBGc7dIn.js.map} +1 -1
  25. package/dist/ButtonToggle.js +1 -1
  26. package/dist/{Calendar-DqQczZgw.js → Calendar-CekTYzdT.js} +8 -3
  27. package/dist/Calendar-CekTYzdT.js.map +1 -0
  28. package/dist/{Calendar-B6DqiqoX.js → Calendar-MRUB0XU7.js} +2 -2
  29. package/dist/Calendar-MRUB0XU7.js.map +1 -0
  30. package/dist/Calendar.js +2 -2
  31. package/dist/{Checkbox-sgpRzk6a.js → Checkbox-C3rtd-Xe.js} +4 -4
  32. package/dist/{Checkbox-sgpRzk6a.js.map → Checkbox-C3rtd-Xe.js.map} +1 -1
  33. package/dist/{Checkbox-BkjA8p3F.js → Checkbox-zz9TyZWn.js} +2 -2
  34. package/dist/{Checkbox-BkjA8p3F.js.map → Checkbox-zz9TyZWn.js.map} +1 -1
  35. package/dist/Checkbox.js +1 -1
  36. package/dist/{Chip-DvmMbb5g.js → Chip-CxgryK86.js} +3 -3
  37. package/dist/{Chip-DvmMbb5g.js.map → Chip-CxgryK86.js.map} +1 -1
  38. package/dist/Chip.js +1 -1
  39. package/dist/Combobox.js +1 -1
  40. package/dist/{DataTable-DUTfew48.js → DataTable-BpqLvU92.js} +23 -9
  41. package/dist/{DataTable-DUTfew48.js.map → DataTable-BpqLvU92.js.map} +1 -1
  42. package/dist/{DateFieldRange-CjjqTRNu.js → DateFieldRange-CP7QgS6P.js} +5 -5
  43. package/dist/{DateFieldRange-CjjqTRNu.js.map → DateFieldRange-CP7QgS6P.js.map} +1 -1
  44. package/dist/DateFieldRange.js +1 -1
  45. package/dist/{DateFieldSingle-dSrWge6Y.js → DateFieldSingle-CgMPTi1v.js} +5 -5
  46. package/dist/{DateFieldSingle-dSrWge6Y.js.map → DateFieldSingle-CgMPTi1v.js.map} +1 -1
  47. package/dist/DateFieldSingle.js +1 -1
  48. package/dist/{DateFieldYearless-CuYYEkOz.js → DateFieldYearless-DYjvqxRb.js} +4 -4
  49. package/dist/{DateFieldYearless-CuYYEkOz.js.map → DateFieldYearless-DYjvqxRb.js.map} +1 -1
  50. package/dist/DateFieldYearless.js +1 -1
  51. package/dist/{DateFieldYearlessRange-CHj9OXZK.js → DateFieldYearlessRange-lQdJGOaS.js} +4 -4
  52. package/dist/DateFieldYearlessRange-lQdJGOaS.js.map +1 -0
  53. package/dist/DateFieldYearlessRange.js +1 -1
  54. package/dist/{DaysOfTheWeek-DXzW04I1.js → DaysOfTheWeek-Ci-SKebP.js} +3 -3
  55. package/dist/{DaysOfTheWeek-DXzW04I1.js.map → DaysOfTheWeek-Ci-SKebP.js.map} +1 -1
  56. package/dist/DaysOfTheWeek.js +1 -1
  57. package/dist/{Details-Xb49PJ-r.js → Details-DkteVZbk.js} +2 -2
  58. package/dist/{Details-Xb49PJ-r.js.map → Details-DkteVZbk.js.map} +1 -1
  59. package/dist/Details.js +1 -1
  60. package/dist/{Dialog-l0UzKEU0.js → Dialog-BxulNN8n.js} +22 -22
  61. package/dist/{Dialog-l0UzKEU0.js.map → Dialog-BxulNN8n.js.map} +1 -1
  62. package/dist/Dialog.css +32 -31
  63. package/dist/Dialog.js +1 -1
  64. package/dist/{DialogCancelButton-CIGGMaOE.js → DialogCancelButton-DmSUPuCR.js} +2 -2
  65. package/dist/{DialogCancelButton-CIGGMaOE.js.map → DialogCancelButton-DmSUPuCR.js.map} +1 -1
  66. package/dist/Dnd.js +2 -2
  67. package/dist/{DndHandleButton-B_Geiaeb.js → DndHandleButton-Ck5nc8w2.js} +2 -2
  68. package/dist/{DndHandleButton-B_Geiaeb.js.map → DndHandleButton-Ck5nc8w2.js.map} +1 -1
  69. package/dist/DndSort.js +2 -2
  70. package/dist/{Drawer-DaE-1UgB.js → Drawer-_spmOgwH.js} +5 -5
  71. package/dist/{Drawer-DaE-1UgB.js.map → Drawer-_spmOgwH.js.map} +1 -1
  72. package/dist/Drawer.js +1 -1
  73. package/dist/DrillDown.js +1 -1
  74. package/dist/{EditCard-2Qt5-k2B.js → EditCard-ZpF032WP.js} +4 -4
  75. package/dist/{EditCard-2Qt5-k2B.js.map → EditCard-ZpF032WP.js.map} +1 -1
  76. package/dist/EditCard.js +1 -1
  77. package/dist/{FieldLabel-BgVl8hnF.js → FieldLabel-Cm5A1Jcx.js} +3 -3
  78. package/dist/{FieldLabel-BgVl8hnF.js.map → FieldLabel-Cm5A1Jcx.js.map} +1 -1
  79. package/dist/FieldLabel.js +1 -1
  80. package/dist/{FilterBar-CryC93pB.js → FilterBar-CvyMubuw.js} +29 -8
  81. package/dist/FilterBar-CvyMubuw.js.map +1 -0
  82. package/dist/FilterBar.js +1 -1
  83. package/dist/Icon-B4uCvMU9.js +107 -0
  84. package/dist/Icon-B4uCvMU9.js.map +1 -0
  85. package/dist/Icon.js +1 -1
  86. package/dist/{InputMask-Bc0nDHzb.js → InputMask-CX6XiOOm.js} +3 -3
  87. package/dist/{InputMask-Bc0nDHzb.js.map → InputMask-CX6XiOOm.js.map} +1 -1
  88. package/dist/InputMask.js +1 -1
  89. package/dist/{InteractiveCard-CyUR_VLW.js → InteractiveCard-C0g5PxB6.js} +5 -2
  90. package/dist/InteractiveCard-C0g5PxB6.js.map +1 -0
  91. package/dist/InteractiveCard.js +1 -1
  92. package/dist/{Link-DI4eVVdI.js → Link-C7dtI5K6.js} +2 -2
  93. package/dist/{Link-DI4eVVdI.js.map → Link-C7dtI5K6.js.map} +1 -1
  94. package/dist/Link.js +1 -1
  95. package/dist/LinkButton-C0wps8r1.js.map +1 -1
  96. package/dist/{ListView-Blmts4nT.js → ListView-DpveXOsN.js} +2 -2
  97. package/dist/{ListView-Blmts4nT.js.map → ListView-DpveXOsN.js.map} +1 -1
  98. package/dist/ListView.js +1 -1
  99. package/dist/{Listbox-DkzL11gb.js → Listbox-Cdwaofd2.js} +21 -21
  100. package/dist/Listbox-Cdwaofd2.js.map +1 -0
  101. package/dist/Listbox.js +1 -1
  102. package/dist/{Menu-BAya9Qnd.js → Menu-DmEXQLXt.js} +3 -3
  103. package/dist/{Menu-BAya9Qnd.js.map → Menu-DmEXQLXt.js.map} +1 -1
  104. package/dist/Menu.js +1 -1
  105. package/dist/{MenuFooter-BZTsAaOz.js → MenuFooter-Ck9L599M.js} +2 -2
  106. package/dist/{MenuFooter-BZTsAaOz.js.map → MenuFooter-Ck9L599M.js.map} +1 -1
  107. package/dist/MultiSelectField.js +1 -1
  108. package/dist/{MultiSelectFieldSync-CSIU43BR.js → MultiSelectFieldSync-BHST0FEe.js} +14 -12
  109. package/dist/MultiSelectFieldSync-BHST0FEe.js.map +1 -0
  110. package/dist/MultiSelectMenu.js +1 -1
  111. package/dist/{MultiSelectMenuSync-CkjXjnXp.js → MultiSelectMenuSync-BaKxbMLu.js} +24 -11
  112. package/dist/MultiSelectMenuSync-BaKxbMLu.js.map +1 -0
  113. package/dist/{NumberField-Dp5tJkMC.js → NumberField-CjC6KHKl.js} +5 -5
  114. package/dist/NumberField-CjC6KHKl.js.map +1 -0
  115. package/dist/NumberField.js +1 -1
  116. package/dist/Overflow.js.map +1 -1
  117. package/dist/{Page-gMaR1lF5.js → Page-BreBQ3pG.js} +12 -12
  118. package/dist/{Page-gMaR1lF5.js.map → Page-BreBQ3pG.js.map} +1 -1
  119. package/dist/Page.js +1 -1
  120. package/dist/{Pagination-CfCUqyzB.js → Pagination-CmqAut6y.js} +5 -5
  121. package/dist/{Pagination-CfCUqyzB.js.map → Pagination-CmqAut6y.js.map} +1 -1
  122. package/dist/Pagination.js +1 -1
  123. package/dist/{Popover-80nFjp83.js → Popover-CdRuNv3C.js} +3 -3
  124. package/dist/{Popover-80nFjp83.js.map → Popover-CdRuNv3C.js.map} +1 -1
  125. package/dist/Popover.js +1 -1
  126. package/dist/{ProgressBar-3TSTcvbU.js → ProgressBar-065vjsQ0.js} +3 -3
  127. package/dist/{ProgressBar-3TSTcvbU.js.map → ProgressBar-065vjsQ0.js.map} +1 -1
  128. package/dist/ProgressBar.js +1 -1
  129. package/dist/{Radio-Dk7dH0oM.js → Radio-D9w_-JYw.js} +2 -2
  130. package/dist/{Radio-Dk7dH0oM.js.map → Radio-D9w_-JYw.js.map} +1 -1
  131. package/dist/{Radio-B30z0TdG.js → Radio-dyLcVmUw.js} +4 -4
  132. package/dist/{Radio-B30z0TdG.js.map → Radio-dyLcVmUw.js.map} +1 -1
  133. package/dist/Radio.js +1 -1
  134. package/dist/{RichTextEditor-DLIh_mzJ.js → RichTextEditor-byoMZaJy.js} +14172 -7454
  135. package/dist/RichTextEditor-byoMZaJy.js.map +1 -0
  136. package/dist/RichTextEditor.css +42 -40
  137. package/dist/RichTextEditor.js +1 -1
  138. package/dist/{SavedFiltersButton-Cd_cOR1F.js → SavedFiltersButton-DlzfvW03.js} +10 -10
  139. package/dist/{SavedFiltersButton-Cd_cOR1F.js.map → SavedFiltersButton-DlzfvW03.js.map} +1 -1
  140. package/dist/SavedFiltersButton.js +1 -1
  141. package/dist/{SearchField-BfOMhmIc.js → SearchField-B7fIOJf-.js} +2 -2
  142. package/dist/{SearchField-BfOMhmIc.js.map → SearchField-B7fIOJf-.js.map} +1 -1
  143. package/dist/{SearchField-D9ZMOcbo.js → SearchField-X4B7f23E.js} +3 -3
  144. package/dist/{SearchField-D9ZMOcbo.js.map → SearchField-X4B7f23E.js.map} +1 -1
  145. package/dist/SearchField.js +1 -1
  146. package/dist/{SegmentedControl-fBjqazBR.js → SegmentedControl-Be6jCglV.js} +2 -2
  147. package/dist/{SegmentedControl-fBjqazBR.js.map → SegmentedControl-Be6jCglV.js.map} +1 -1
  148. package/dist/SegmentedControl.js +1 -1
  149. package/dist/{SelectCard-BXXKD4Iy.js → SelectCard-CMSG_ba1.js} +4 -4
  150. package/dist/{SelectCard-BXXKD4Iy.js.map → SelectCard-CMSG_ba1.js.map} +1 -1
  151. package/dist/SelectCard.js +1 -1
  152. package/dist/SelectField.js +1 -1
  153. package/dist/{SelectFieldLabel-Dfdv0DQp.js → SelectFieldLabel-dKVBaki2.js} +2 -2
  154. package/dist/{SelectFieldLabel-Dfdv0DQp.js.map → SelectFieldLabel-dKVBaki2.js.map} +1 -1
  155. package/dist/{SelectFieldSync-BQIbfdka.js → SelectFieldSync-BqL3zlbZ.js} +8 -8
  156. package/dist/SelectFieldSync-BqL3zlbZ.js.map +1 -0
  157. package/dist/SelectMenu.js +1 -1
  158. package/dist/{SelectMenuSync-nFfKdEiV.js → SelectMenuSync-BRvi9YTw.js} +6 -6
  159. package/dist/{SelectMenuSync-nFfKdEiV.js.map → SelectMenuSync-BRvi9YTw.js.map} +1 -1
  160. package/dist/{SelectOptions-BjJ0JoQX.js → SelectOptions-LUHWLYgJ.js} +2 -2
  161. package/dist/{SelectOptions-BjJ0JoQX.js.map → SelectOptions-LUHWLYgJ.js.map} +1 -1
  162. package/dist/{SelectTrigger-BgzPogSC.js → SelectTrigger-APxYfL3V.js} +3 -3
  163. package/dist/SelectTrigger-APxYfL3V.js.map +1 -0
  164. package/dist/SelectTrigger.js +1 -1
  165. package/dist/{SelectTriggerBase-CnyyaWl-.js → SelectTriggerBase-lYieONTb.js} +4 -4
  166. package/dist/{SelectTriggerBase-CnyyaWl-.js.map → SelectTriggerBase-lYieONTb.js.map} +1 -1
  167. package/dist/{SideNav-BFkruKa4.js → SideNav-DoxX8Vi-.js} +6 -3
  168. package/dist/{SideNav-BFkruKa4.js.map → SideNav-DoxX8Vi-.js.map} +1 -1
  169. package/dist/SideNav.js +1 -1
  170. package/dist/{Stepper-Bp5XkY2q.js → Stepper-CvaR7OoT.js} +3 -3
  171. package/dist/{Stepper-Bp5XkY2q.js.map → Stepper-CvaR7OoT.js.map} +1 -1
  172. package/dist/Stepper.js +1 -1
  173. package/dist/{Switch-BlIZayq6.js → Switch-Bm3qqjd6.js} +3 -3
  174. package/dist/{Switch-BlIZayq6.js.map → Switch-Bm3qqjd6.js.map} +1 -1
  175. package/dist/Switch.js +1 -1
  176. package/dist/{Tab-FOIali7o.js → Tab-Cy4G562A.js} +2 -2
  177. package/dist/{Tab-FOIali7o.js.map → Tab-Cy4G562A.js.map} +1 -1
  178. package/dist/Tab.js +1 -1
  179. package/dist/Table.js +1 -1
  180. package/dist/{Text-LXIB1J3C.js → Text-mDcQHC2U.js} +2 -2
  181. package/dist/{Text-LXIB1J3C.js.map → Text-mDcQHC2U.js.map} +1 -1
  182. package/dist/Text.js +1 -1
  183. package/dist/{TextField-Syedf1LW.js → TextField-CUVsDfWo.js} +3 -3
  184. package/dist/{TextField-Syedf1LW.js.map → TextField-CUVsDfWo.js.map} +1 -1
  185. package/dist/{TextField-fE3_0jQJ.js → TextField-WQTlqKso.js} +2 -2
  186. package/dist/TextField-WQTlqKso.js.map +1 -0
  187. package/dist/TextField.js +1 -1
  188. package/dist/{Textarea-CIAHsoWa.js → Textarea-CW3KGuB9.js} +3 -3
  189. package/dist/{Textarea-CIAHsoWa.js.map → Textarea-CW3KGuB9.js.map} +1 -1
  190. package/dist/Textarea.js +1 -1
  191. package/dist/{TimeField-B3yhtYZm.js → TimeField-JA3gXyS7.js} +5 -5
  192. package/dist/{TimeField-B3yhtYZm.js.map → TimeField-JA3gXyS7.js.map} +1 -1
  193. package/dist/TimeField.js +1 -1
  194. package/dist/Toast.js +2 -2
  195. package/dist/{Toaster-BM998ekj.js → Toaster-DMZng3Im.js} +4 -4
  196. package/dist/{Toaster-BM998ekj.js.map → Toaster-DMZng3Im.js.map} +1 -1
  197. package/dist/{Toaster-DDKuhPXX.js → Toaster-fPcgIF7Q.js} +2 -2
  198. package/dist/{Toaster-DDKuhPXX.js.map → Toaster-fPcgIF7Q.js.map} +1 -1
  199. package/dist/{Toolbar-DMUTGhNa.js → Toolbar-BfGcDXgC.js} +8 -8
  200. package/dist/{Toolbar-DMUTGhNa.js.map → Toolbar-BfGcDXgC.js.map} +1 -1
  201. package/dist/{Toolbar-DD1ieJNQ.js → Toolbar-Dlu39v69.js} +6 -6
  202. package/dist/{Toolbar-DD1ieJNQ.js.map → Toolbar-Dlu39v69.js.map} +1 -1
  203. package/dist/Toolbar.js +2 -2
  204. package/dist/{ToolbarButtonToggle-DsaG1BWZ.js → ToolbarButtonToggle-3xbnm1Qr.js} +7 -4
  205. package/dist/ToolbarButtonToggle-3xbnm1Qr.js.map +1 -0
  206. package/dist/TreeSelectField.js +1 -1
  207. package/dist/{TreeSelectFieldSync-C-mUoPrS.js → TreeSelectFieldSync-CdtC8d3Q.js} +6 -6
  208. package/dist/{TreeSelectFieldSync-C-mUoPrS.js.map → TreeSelectFieldSync-CdtC8d3Q.js.map} +1 -1
  209. package/dist/TreeSelectMenu.js +1 -1
  210. package/dist/{TreeSelectMenuSync-BWVk3vWK.js → TreeSelectMenuSync-CPuQWUNU.js} +5 -5
  211. package/dist/{TreeSelectMenuSync-BWVk3vWK.js.map → TreeSelectMenuSync-CPuQWUNU.js.map} +1 -1
  212. package/dist/{TypeaheadTextField-DX3MZTgl.js → TypeaheadTextField-BkLECKZY.js} +3 -3
  213. package/dist/TypeaheadTextField-BkLECKZY.js.map +1 -0
  214. package/dist/TypeaheadTextField.js +1 -1
  215. package/dist/{YearlessDateInputWithPicker-KRKpi1-s.js → YearlessDateInputWithPicker-Bd8JnTaZ.js} +3 -3
  216. package/dist/{YearlessDateInputWithPicker-KRKpi1-s.js.map → YearlessDateInputWithPicker-Bd8JnTaZ.js.map} +1 -1
  217. package/dist/beta.js +17 -17
  218. package/dist/{useToggleSelection-B8OnmX8Q.js → bulkActionTypes-DPC382hi.js} +8 -3
  219. package/dist/bulkActionTypes-DPC382hi.js.map +1 -0
  220. package/dist/{filter-state-6m-E0d1i.js → filter-state-BdfBSXYO.js} +346 -68
  221. package/dist/filter-state-BdfBSXYO.js.map +1 -0
  222. package/dist/{index-BxdhXRLp.js → index-B7BIlotN.js} +289 -1074
  223. package/dist/index-B7BIlotN.js.map +1 -0
  224. package/dist/{index-Bg9IAYMO.js → index-SZMmvI3D.js} +2 -2
  225. package/dist/{index-Bg9IAYMO.js.map → index-SZMmvI3D.js.map} +1 -1
  226. package/dist/index.js +55 -55
  227. package/dist/src/beta/components/Calendar/Calendar.d.ts +19 -0
  228. package/dist/src/beta/components/Calendar/Calendar.figma.d.ts +1 -0
  229. package/dist/src/beta/components/FilterBar/FilterSearchField.d.ts +28 -0
  230. package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
  231. package/dist/src/beta/components/FilterBar/internal/adapters/search.d.ts +3 -0
  232. package/dist/src/beta/components/FilterBar/internal/adapters/types.d.ts +2 -1
  233. package/dist/src/beta/components/FilterBar/internal/types.d.ts +72 -6
  234. package/dist/src/beta/components/FilterBar/internal/utils/dateConstraints.d.ts +38 -0
  235. package/dist/src/beta/components/FilterBar/internal/utils/test.d.ts +2 -1
  236. package/dist/src/beta/components/InteractiveCard/InteractiveCard.figma.d.ts +1 -0
  237. package/dist/src/beta/components/InteractiveCard/types.d.ts +3 -3
  238. package/dist/src/beta/components/RichTextEditor/RichTextEditor.d.ts +4 -2
  239. package/dist/src/beta/components/RichTextEditor/RichTextEditor.figma.d.ts +1 -0
  240. package/dist/src/beta/components/RichTextEditor/internal/RichTextEditorProvider.d.ts +1 -1
  241. package/dist/src/beta/components/RichTextEditor/internal/extensions/SafeImageExtension.d.ts +13 -0
  242. package/dist/src/beta/components/RichTextEditor/internal/useRichTextEditor.d.ts +2 -2
  243. package/dist/src/beta/components/RichTextEditor/types.d.ts +42 -1
  244. package/dist/src/beta/components/Table/DataTable/DataTable.figma.d.ts +1 -0
  245. package/dist/src/beta/components/Toolbar/Toolbar.figma.d.ts +1 -0
  246. package/dist/src/beta/components/TypeaheadTextField/TypeaheadTextField.d.ts +19 -0
  247. package/dist/src/components/AiMark/AiMark.figma.d.ts +1 -0
  248. package/dist/src/components/ButtonLink/ButtonLink.figma.d.ts +1 -0
  249. package/dist/src/components/ButtonToggle/ButtonToggle.figma.d.ts +1 -0
  250. package/dist/src/components/Combobox/Combobox.d.ts +8 -4
  251. package/dist/src/components/Combobox/ComboboxSelect.d.ts +2 -2
  252. package/dist/src/components/DateFieldRange/DateFieldRange.d.ts +21 -0
  253. package/dist/src/components/DateFieldRange/DateFieldRange.figma.d.ts +1 -0
  254. package/dist/src/components/DateFieldSingle/DateFieldSingle.d.ts +20 -0
  255. package/dist/src/components/DateFieldSingle/DateFieldSingle.figma.d.ts +1 -0
  256. package/dist/src/components/DateFieldYearless/DateFieldYearless.figma.d.ts +1 -0
  257. package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +19 -0
  258. package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.figma.d.ts +1 -0
  259. package/dist/src/components/DaysOfTheWeek/DaysOfTheWeek.figma.d.ts +1 -0
  260. package/dist/src/components/Details/Details.figma.d.ts +1 -0
  261. package/dist/src/components/Dialog/Dialog.figma.d.ts +1 -0
  262. package/dist/src/components/Dnd/Dnd.figma.d.ts +1 -0
  263. package/dist/src/components/DndSort/DndSort.figma.d.ts +1 -0
  264. package/dist/src/components/Drawer/Drawer.figma.d.ts +1 -0
  265. package/dist/src/components/FieldLabel/FieldLabel.d.ts +36 -0
  266. package/dist/src/components/Layout/Layout.figma.d.ts +1 -0
  267. package/dist/src/components/LinkButton/LinkButton.d.ts +13 -0
  268. package/dist/src/components/LinkButton/LinkButton.figma.d.ts +1 -0
  269. package/dist/src/components/ListView/ListView.figma.d.ts +1 -0
  270. package/dist/src/components/Listbox/Listbox.d.ts +3 -3
  271. package/dist/src/components/Listbox/Listbox.figma.d.ts +1 -0
  272. package/dist/src/components/Menu/Menu.figma.d.ts +1 -0
  273. package/dist/src/components/MultiSelectField/MultiSelectField.figma.d.ts +1 -0
  274. package/dist/src/components/MultiSelectField/types.d.ts +3 -0
  275. package/dist/src/components/MultiSelectMenu/MultiSelectMenu.figma.d.ts +1 -0
  276. package/dist/src/components/MultiSelectMenu/types.d.ts +5 -0
  277. package/dist/src/components/NumberField/NumberField.d.ts +21 -0
  278. package/dist/src/components/NumberField/NumberField.figma.d.ts +1 -0
  279. package/dist/src/components/Overflow/Overflow.d.ts +22 -0
  280. package/dist/src/components/Overflow/Overflow.figma.d.ts +1 -0
  281. package/dist/src/components/Page/Page.figma.d.ts +1 -0
  282. package/dist/src/components/Pagination/Pagination.figma.d.ts +1 -0
  283. package/dist/src/components/Popover/Popover.figma.d.ts +1 -0
  284. package/dist/src/components/SearchField/SearchField.figma.d.ts +1 -0
  285. package/dist/src/components/SegmentedControl/SegmentedControl.figma.d.ts +1 -0
  286. package/dist/src/components/SelectCard/SelectCard.figma.d.ts +1 -0
  287. package/dist/src/components/SelectField/SelectField.figma.d.ts +1 -0
  288. package/dist/src/components/SelectMenu/SelectMenu.figma.d.ts +1 -0
  289. package/dist/src/components/SelectTrigger/SelectTrigger.d.ts +19 -0
  290. package/dist/src/components/SideNav/SideNav.figma.d.ts +1 -0
  291. package/dist/src/components/Skeleton/Skeleton.figma.d.ts +1 -0
  292. package/dist/src/components/Stepper/Stepper.figma.d.ts +1 -0
  293. package/dist/src/components/Tab/Tab.figma.d.ts +1 -0
  294. package/dist/src/components/Text/Text.figma.d.ts +1 -0
  295. package/dist/src/components/TextField/TextField.d.ts +14 -0
  296. package/dist/src/components/TextField/TextField.figma.d.ts +1 -0
  297. package/dist/src/components/Textarea/Textarea.figma.d.ts +1 -0
  298. package/dist/src/components/TimeField/TimeField.figma.d.ts +1 -0
  299. package/dist/src/internal/components/Popover/internal/PopoverContext.d.ts +4 -0
  300. package/dist/src/internal/types/bulkActionTypes.d.ts +27 -2
  301. package/dist/src/internal/utils/index.d.ts +1 -0
  302. package/dist/src/internal/utils/uniquifySvgDomIds.d.ts +12 -0
  303. package/dist/src/providers/AnvilProvider/AnvilProviderContext.d.ts +12 -0
  304. package/dist/{stripInlineMarkdown-mQ10Z5JU.js → stripInlineMarkdown-BZzgG-Zm.js} +2 -2
  305. package/dist/{stripInlineMarkdown-mQ10Z5JU.js.map → stripInlineMarkdown-BZzgG-Zm.js.map} +1 -1
  306. package/dist/{syncFilterUtils-DqvgB5sn.js → syncFilterUtils-Cec5y3hY.js} +5 -5
  307. package/dist/{syncFilterUtils-DqvgB5sn.js.map → syncFilterUtils-Cec5y3hY.js.map} +1 -1
  308. package/dist/{treeSync-BaEYV24N.js → treeSync-oC-VZpP0.js} +4 -4
  309. package/dist/{treeSync-BaEYV24N.js.map → treeSync-oC-VZpP0.js.map} +1 -1
  310. package/dist/{useAdaptiveView-BO9xU7Ym.js → useAdaptiveView-AvsDkChF.js} +9 -9
  311. package/dist/{useAdaptiveView-BO9xU7Ym.js.map → useAdaptiveView-AvsDkChF.js.map} +1 -1
  312. package/dist/useAdaptiveView.css +6 -4
  313. package/dist/{useDrilldown-22X8jHs_.js → useDrilldown-PmrZ4BXn.js} +4 -4
  314. package/dist/{useDrilldown-22X8jHs_.js.map → useDrilldown-PmrZ4BXn.js.map} +1 -1
  315. package/dist/{useInfiniteCombobox-COnx-GhH.js → useInfiniteCombobox-C78WQZx4.js} +9 -7
  316. package/dist/useInfiniteCombobox-C78WQZx4.js.map +1 -0
  317. package/dist/{useInitialFocus-BIvXK1Rp.js → useInitialFocus-BUxEDMEG.js} +2 -2
  318. package/dist/{useInitialFocus-BIvXK1Rp.js.map → useInitialFocus-BUxEDMEG.js.map} +1 -1
  319. package/dist/{usePopoverTransitionStates-B1opfxxn.js → usePopoverTransitionStates-CDXCdyKa.js} +2 -1
  320. package/dist/{usePopoverTransitionStates-B1opfxxn.js.map → usePopoverTransitionStates-CDXCdyKa.js.map} +1 -1
  321. package/package.json +17 -16
  322. package/dist/AnvilProvider-BQsp0VPq.js.map +0 -1
  323. package/dist/Calendar-B6DqiqoX.js.map +0 -1
  324. package/dist/Calendar-DqQczZgw.js.map +0 -1
  325. package/dist/DateFieldYearlessRange-CHj9OXZK.js.map +0 -1
  326. package/dist/FilterBar-CryC93pB.js.map +0 -1
  327. package/dist/Icon-BEwHECSM.js +0 -56
  328. package/dist/Icon-BEwHECSM.js.map +0 -1
  329. package/dist/InteractiveCard-CyUR_VLW.js.map +0 -1
  330. package/dist/Listbox-DkzL11gb.js.map +0 -1
  331. package/dist/MultiSelectFieldSync-CSIU43BR.js.map +0 -1
  332. package/dist/MultiSelectMenuSync-CkjXjnXp.js.map +0 -1
  333. package/dist/NumberField-Dp5tJkMC.js.map +0 -1
  334. package/dist/RichTextEditor-DLIh_mzJ.js.map +0 -1
  335. package/dist/SelectFieldSync-BQIbfdka.js.map +0 -1
  336. package/dist/SelectTrigger-BgzPogSC.js.map +0 -1
  337. package/dist/TextField-fE3_0jQJ.js.map +0 -1
  338. package/dist/ToolbarButtonToggle-DsaG1BWZ.js.map +0 -1
  339. package/dist/TypeaheadTextField-DX3MZTgl.js.map +0 -1
  340. package/dist/filter-state-6m-E0d1i.js.map +0 -1
  341. package/dist/index-BxdhXRLp.js.map +0 -1
  342. package/dist/useInfiniteCombobox-COnx-GhH.js.map +0 -1
  343. package/dist/useToggleSelection-B8OnmX8Q.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Overflow.js","sources":["../src/components/Overflow/Overflow.tsx","../src/components/Overflow/OverflowText.tsx","../src/components/Overflow/index.ts"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n MouseEvent,\n Ref,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { DataTrackingId, LayoutUtilProps } from \"../../types\";\nimport {\n childrenToString,\n getKeyboardFocusableElements,\n} from \"../../internal/functions\";\nimport cx from \"classnames\";\nimport styles from \"./Overflow.module.scss\";\nimport { Flex } from \"../Flex\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\n/**\n * Props for the Overflow component\n * @property {string} [children] - The content to be displayed in the overflow container\n * @property {number | string | \"inherit\"} [height] - The height of the overflow container\n * @property {boolean | object} [truncate] - Whether to truncate content with expand/collapse functionality\n */\nexport type OverflowProps = ComponentPropsWithoutRef<\"div\"> &\n Omit<LayoutUtilProps, \"direction\"> & {\n /**\n * The direction of the overflow container\n * @default column\n */\n direction?: LayoutUtilProps[\"flexDirection\"];\n /**\n * The height of the overflow container\n * @remarks \"inherit\" is not supported when truncate is enabled\n */\n height?: number | string | \"inherit\";\n /**\n * The width of the overflow container\n */\n width?: number | string;\n /**\n * Ref to the scrollable content element (the inner element with `overflow: auto`).\n * The component's own `ref` points at the outer wrapper, which does not scroll, so\n * use this when an integration must target the actual scroller — e.g. a virtualizer's\n * `getScrollElement`, an `IntersectionObserver` sentinel, or programmatic scrolling.\n */\n contentRef?: Ref<HTMLDivElement>;\n } & (\n | {\n /**\n * Whether to truncate content with expand/collapse functionality\n * @default false\n */\n truncate?: false;\n }\n | {\n /**\n * Direction must be column when truncate is enabled\n */\n direction: \"column\";\n /**\n * Truncation configuration with expand/collapse functionality\n */\n truncate:\n | boolean\n | {\n /**\n * Text to display on the expand button\n * @default \"Show more...\"\n */\n expandText?: string;\n /**\n * Text to display on the collapse button\n * @default \"Show less...\"\n */\n collapseText?: string;\n /**\n * Callback fired when content is expanded\n */\n onExpand?: (e: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Callback fired when content is collapsed\n */\n onCollapse?: (e: MouseEvent<HTMLButtonElement>) => void;\n };\n }\n ) &\n DataTrackingId;\n\n/**\n * Internal state for shadow indicators\n */\ntype ShadowState = {\n /**\n * Whether to show right shadow indicator\n */\n right: boolean;\n /**\n * Whether to show left shadow indicator\n */\n left: boolean;\n /**\n * Whether to show top shadow indicator\n */\n top: boolean;\n /**\n * Whether to show bottom shadow indicator\n */\n bottom: boolean;\n};\n\nexport const Overflow = forwardRef(\n ({ gap, ...props }: OverflowProps, ref: Ref<HTMLDivElement>) => {\n const data = {\n children: childrenToString(props.children),\n height: props.height,\n truncate: props.truncate,\n };\n\n const trackingId = useTrackingId({\n name: \"Overflow\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n children,\n className,\n direction = \"column\",\n style,\n height,\n width,\n truncate,\n contentRef: contentRefProp,\n ...rest\n } = componentProps;\n const contentRef = useRef<HTMLDivElement>(null);\n // Expose the scrollable content element to consumers while keeping the internal\n // ref the observers and scroll handlers depend on.\n const mergedContentRef = useMergeRefs([contentRef, contentRefProp]);\n const [expanded, setExpanded] = useState(false);\n const [shadow, setShadow] = useState<ShadowState>({\n left: false,\n right: false,\n top: false,\n bottom: false,\n });\n const [contentClipped, setContentClipped] = useState(false);\n\n const shadowUpdate = useCallback(() => {\n if (!contentRef.current) return;\n if (direction === \"row\") {\n const right =\n contentRef.current.offsetWidth < contentRef.current.scrollWidth;\n setShadow((prev) => {\n return {\n ...prev,\n right,\n };\n });\n return;\n }\n const bottom =\n contentRef.current.offsetHeight < contentRef.current.scrollHeight;\n setShadow((prev) => {\n return {\n ...prev,\n bottom,\n };\n });\n }, [direction]);\n\n useLayoutEffect(() => {\n if (!contentRef.current) return;\n\n const mutationCallback = () => {\n if (!contentRef.current) return;\n const contentHeight =\n typeof height === \"number\" ? height : contentRef.current.offsetHeight;\n if (contentHeight < contentRef.current.scrollHeight) {\n setContentClipped(true);\n return;\n }\n setExpanded(false);\n setContentClipped(false);\n };\n\n const observer = new MutationObserver(mutationCallback);\n observer.observe(contentRef.current, {\n childList: true, // Observe changes to child elements\n });\n return () => {\n observer.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n if (contentRef.current) {\n const observer = new ResizeObserver(() => {\n shadowUpdate();\n });\n\n observer.observe(contentRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }\n }, [shadowUpdate]);\n\n useEffect(() => {\n if (!contentRef.current) return;\n setContentClipped(\n contentRef.current.offsetHeight < contentRef.current.scrollHeight,\n );\n }, []);\n\n useEffect(() => {\n // account for loading children after initial render\n shadowUpdate();\n }, [children, shadowUpdate]);\n\n // update overflow position on scroll\n const handleOnScroll = () => {\n if (!contentRef.current) return;\n const target = contentRef.current;\n if (direction === \"row\") {\n const left = target.scrollLeft > 0;\n const right =\n target.scrollLeft < target.scrollWidth - target.offsetWidth;\n setShadow({\n left,\n right,\n top: false,\n bottom: false,\n });\n return;\n }\n const top = target.scrollTop > 0;\n const bottom =\n target.scrollTop < target.scrollHeight - target.offsetHeight;\n setShadow({\n top,\n bottom,\n left: false,\n right: false,\n });\n };\n const inertOverflowFocusables = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((element) => {\n if (!element.isIntersecting) {\n element.target.setAttribute(\"disabled\", \"true\");\n } else {\n element.target.removeAttribute(\"disabled\");\n }\n });\n };\n\n const overflowClassNames = cx([styles[\"overflow\"]], className, {\n [styles[\"horizontal\"]]: direction === \"row\",\n [styles[\"truncate\"]]: !!truncate,\n [styles[\"expanded\"]]: expanded,\n });\n\n useEffect(() => {\n if (!truncate) return;\n const observer = new IntersectionObserver(inertOverflowFocusables);\n const focusable = getKeyboardFocusableElements(contentRef.current);\n focusable.forEach((element) => {\n observer.observe(element);\n });\n }, [truncate]);\n\n if (truncate) {\n const wrapperStyle = {\n ...style,\n ...layoutStyles,\n };\n const contentStyle = {\n minHeight: height ?? undefined,\n minWidth: width ?? undefined,\n };\n\n const expandString =\n typeof truncate === \"object\" ? truncate.expandText : \"Show more...\";\n const collapseString =\n typeof truncate === \"object\" ? truncate.collapseText : \"Show less...\";\n\n const onExpandClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n setExpanded((prev) => !prev);\n setTimeout(() => {\n handleOnScroll();\n }, 100);\n if (typeof truncate !== \"object\") return;\n if (expanded) {\n truncate.onCollapse?.(e);\n return;\n }\n truncate.onExpand?.(e);\n };\n\n const showExpand = contentClipped;\n\n return (\n <div\n ref={ref}\n style={wrapperStyle}\n className={overflowClassNames}\n data-anv=\"overflow\"\n data-tracking-id={trackingId}\n {...rest}\n >\n {shadow.top && !truncate ? (\n <div className={styles[\"shadow-top\"]} />\n ) : null}\n {shadow.left && !truncate ? (\n <div className={styles[\"shadow-left\"]} />\n ) : null}\n <Flex\n className={styles[\"content\"]}\n onScroll={handleOnScroll}\n style={contentStyle}\n ref={mergedContentRef}\n direction={direction}\n gap={gap}\n /**\n * This is disabled because scrollable area much also be focusable.\n * References:\n * - {@link https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/0d5321a5457c5f0da0ca216053cc5b4f571b53ae/docs/rules/no-noninteractive-tabindex.md}\n * - {@link https://chromestatus.com/feature/5231964663578624}\n */\n tabIndex={0}\n >\n {children}\n </Flex>\n {shadow.bottom && !truncate ? (\n <div className={styles[\"shadow-bottom\"]} />\n ) : null}\n {shadow.right && !truncate ? (\n <div className={styles[\"shadow-right\"]} />\n ) : null}\n {truncate && showExpand ? (\n <button\n className={styles[\"expand-button\"]}\n onClick={onExpandClickHandler}\n >\n {expanded ? collapseString : expandString}\n </button>\n ) : null}\n </div>\n );\n }\n\n const wrapperStyle = {\n ...style,\n ...layoutStyles,\n };\n\n const contentStyle = {\n height: height ?? undefined,\n width: width ?? undefined,\n };\n\n return (\n <div\n ref={ref}\n style={wrapperStyle}\n className={overflowClassNames}\n data-anv=\"overflow\"\n data-tracking-id={trackingId}\n {...rest}\n >\n {shadow.left ? <div className={styles[\"shadow-left\"]} /> : null}\n {shadow.top ? <div className={styles[\"shadow-top\"]} /> : null}\n <Flex\n className={styles[\"content\"]}\n onScroll={handleOnScroll}\n ref={mergedContentRef}\n style={contentStyle}\n direction={direction}\n gap={gap}\n /**\n * This is disabled because scrollable area much also be focusable.\n * References:\n * - {@link https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/0d5321a5457c5f0da0ca216053cc5b4f571b53ae/docs/rules/no-noninteractive-tabindex.md}\n * - {@link https://chromestatus.com/feature/5231964663578624}\n */\n tabIndex={0}\n >\n {children}\n </Flex>\n {shadow.bottom ? <div className={styles[\"shadow-bottom\"]} /> : null}\n {shadow.right ? <div className={styles[\"shadow-right\"]} /> : null}\n </div>\n );\n },\n);\nOverflow.displayName = \"Overflow\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useState,\n MouseEvent,\n useRef,\n useEffect,\n} from \"react\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { DataTrackingId, LayoutUtilProps } from \"../../types\";\nimport {\n childrenToString,\n getKeyboardFocusableElements,\n} from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport overflowStyles from \"./Overflow.module.scss\";\nimport styles from \"./OverflowText.module.scss\";\n\n/**\n * Props for the OverflowText component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type OverflowTextProps = ComponentPropsWithoutRef<\"div\"> &\n LayoutUtilProps & {\n /**\n * Number of rows to display before truncation\n * @default 1\n */\n rows?: number | \"unlimited\";\n } & (\n | {\n /**\n * Whether the text is expandable\n * @default false\n */\n expandable?: false;\n /**\n * Text for expand button (not used when expandable is false)\n */\n expandText?: never;\n /**\n * Text for collapse button (not used when expandable is false)\n */\n collapseText?: never;\n /**\n * Callback for expand event (not used when expandable is false)\n */\n onExpand?: never;\n /**\n * Callback for collapse event (not used when expandable is false)\n */\n onCollapse?: never;\n }\n | {\n /**\n * Whether the text is expandable\n */\n expandable: true;\n /**\n * Text to display on the expand button\n * @default \"Show more...\"\n */\n expandText?: string;\n /**\n * Text to display on the collapse button\n * @default \"Show less...\"\n */\n collapseText?: string;\n /**\n * Callback fired when content is expanded\n */\n onExpand?: (e: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Callback fired when content is collapsed\n */\n onCollapse?: (e: MouseEvent<HTMLButtonElement>) => void;\n }\n ) &\n DataTrackingId;\n\n/**\n * OverflowText component for text content with line truncation and expansion.\n *\n * Features:\n * - Configurable line limit with row-based truncation\n * - Expandable content with custom expand/collapse text\n * - Automatic height calculation and overflow detection\n * - Keyboard navigation support for focusable elements\n * - Resize observer for dynamic content changes\n * - Accessibility features with proper focus management\n * - Support for unlimited rows or specific row limits\n * - Callback support for expand/collapse events\n * - Layout utility props support\n *\n * @example\n * <OverflowText rows={3} expandable>\n * <Text>\n * This is a long text that will be truncated to 3 rows\n * and can be expanded to show the full content.\n * </Text>\n * </OverflowText>\n */\nexport const OverflowText = forwardRef<HTMLDivElement, OverflowTextProps>(\n (props, ref) => {\n const data = {\n children: childrenToString(props.children),\n rows: props.rows,\n expandable: props.expandable,\n expandText: props.expandText,\n collapseText: props.collapseText,\n };\n\n const trackingId = useTrackingId({\n name: \"OverflowText\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n const { rows = 1, ...otherProps } = props;\n const { layoutStyles, componentProps } = useLayoutPropsUtil(otherProps);\n const [expanded, setExpanded] = useState(false);\n const [heights, setHeights] = useState<{\n clientHeight: number;\n scrollHeight: number;\n }>({ clientHeight: 0, scrollHeight: 0 });\n const { className, style, children, ...rest } = componentProps;\n\n const contentRef = useRef<HTMLDivElement>(null);\n\n const styledCombined = {\n ...style,\n ...layoutStyles,\n \"--a2-inline-overflow-text-row\":\n expanded || rows === \"unlimited\" ? \"initial\" : rows,\n };\n\n useEffect(() => {\n if (contentRef.current) {\n const observer = new ResizeObserver(() => {\n if (!contentRef.current) return;\n setHeights({\n clientHeight: contentRef.current.clientHeight,\n scrollHeight: contentRef.current.scrollHeight,\n });\n });\n\n observer.observe(contentRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }\n }, []);\n\n const inertOverflowFocusables = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((element) => {\n if (!element.isIntersecting) {\n element.target.setAttribute(\"disabled\", \"true\");\n } else {\n element.target.removeAttribute(\"disabled\");\n }\n });\n };\n\n useEffect(() => {\n if (!(\"expandable\" in props)) return;\n const observer = new IntersectionObserver(inertOverflowFocusables);\n const focusable = getKeyboardFocusableElements(contentRef.current);\n focusable.forEach((element) => {\n observer.observe(element);\n });\n // This is added because we don't need to watch for all props\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.expandable]);\n\n const showExpand = expanded || heights.clientHeight < heights.scrollHeight;\n\n if (\"expandable\" in props && props.expandable === true) {\n const {\n expandable,\n expandText,\n collapseText,\n onExpand,\n onCollapse,\n ...expandableRest\n } = rest;\n const expandString = expandText ?? \"Show more...\";\n const collapseString = collapseText ?? \"Show less...\";\n\n const onExpandClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n setExpanded((prev) => !prev);\n if (expanded) {\n onCollapse?.(e);\n return;\n }\n onExpand?.(e);\n };\n\n const overflowTextClassNames = cx([styles[\"overflow-text\"]], className, {\n [styles[\"expanded\"]]: expanded,\n });\n return (\n <div\n ref={ref}\n className={overflowTextClassNames}\n style={styledCombined}\n data-anv=\"overflow-text\"\n data-tracking-id={trackingId}\n {...expandableRest}\n >\n <div className={styles[\"content\"]} ref={contentRef}>\n {children}\n </div>\n {showExpand && (\n <button\n className={overflowStyles[\"expand-button\"]}\n onClick={onExpandClickHandler}\n >\n {expanded ? collapseString : expandString}\n </button>\n )}\n </div>\n );\n }\n\n const overflowTextClassNames = cx([styles[\"overflow-text\"], className]);\n return (\n <div\n ref={ref}\n className={overflowTextClassNames}\n style={styledCombined}\n data-anv=\"overflow-text\"\n data-tracking-id={trackingId}\n {...rest}\n >\n <div className={styles[\"content\"]}>{children}</div>\n </div>\n );\n },\n);\n\nOverflowText.displayName = \"OverflowText\";\n","import { Overflow as OverflowElement, type OverflowProps } from \"./Overflow\";\nimport { OverflowText, type OverflowTextProps } from \"./OverflowText\";\n\n/**\n * Overflow component for handling content that exceeds container boundaries.\n *\n * Features:\n * - Supports both horizontal and vertical overflow\n * - Automatic shadow indicators for scrollable content\n * - Truncation with expand/collapse functionality\n * - Keyboard navigation support for focusable elements\n * - Automatic height and width management\n * - Layout utility props support\n * - Resize observer for dynamic content changes\n * - Accessibility features with proper focus management\n * - Scroll event handling with shadow updates\n *\n * @example\n * <Overflow direction=\"column\" height={400} gap=\"4\">\n * {items.map((item, i) => (\n * <Card key={i} style={{ width: \"100%\", minHeight: 100 }}>\n * {item.content}\n * </Card>\n * ))}\n * </Overflow>\n */\nexport const Overflow = Object.assign(OverflowElement, {\n Text: OverflowText,\n});\n\nexport default Overflow;\n\nexport { type OverflowProps };\nexport { OverflowText, type OverflowTextProps };\n"],"names":["Overflow","styles","wrapperStyle","contentStyle","overflowTextClassNames","OverflowElement"],"mappings":"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"}
1
+ {"version":3,"file":"Overflow.js","sources":["../src/components/Overflow/Overflow.tsx","../src/components/Overflow/OverflowText.tsx","../src/components/Overflow/index.ts"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n MouseEvent,\n Ref,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { DataTrackingId, LayoutUtilProps } from \"../../types\";\nimport {\n childrenToString,\n getKeyboardFocusableElements,\n} from \"../../internal/functions\";\nimport cx from \"classnames\";\nimport styles from \"./Overflow.module.scss\";\nimport { Flex } from \"../Flex\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\n/**\n * Props for the Overflow component\n * @property {string} [children] - The content to be displayed in the overflow container\n * @property {number | string | \"inherit\"} [height] - The height of the overflow container\n * @property {boolean | object} [truncate] - Whether to truncate content with expand/collapse functionality\n */\nexport type OverflowProps = ComponentPropsWithoutRef<\"div\"> &\n Omit<LayoutUtilProps, \"direction\"> & {\n /**\n * The direction of the overflow container\n * @default column\n */\n direction?: LayoutUtilProps[\"flexDirection\"];\n /**\n * The height of the overflow container\n * @remarks \"inherit\" is not supported when truncate is enabled\n */\n height?: number | string | \"inherit\";\n /**\n * The width of the overflow container\n */\n width?: number | string;\n /**\n * Ref to the scrollable content element (the inner element with `overflow: auto`).\n * The component's own `ref` points at the outer wrapper, which does not scroll, so\n * use this when an integration must target the actual scroller — e.g. a virtualizer's\n * `getScrollElement`, an `IntersectionObserver` sentinel, or programmatic scrolling.\n */\n contentRef?: Ref<HTMLDivElement>;\n } & (\n | {\n /**\n * Whether to truncate content with expand/collapse functionality\n * @default false\n */\n truncate?: false;\n }\n | {\n /**\n * Direction must be column when truncate is enabled\n */\n direction: \"column\";\n /**\n * Truncation configuration with expand/collapse functionality\n */\n truncate:\n | boolean\n | {\n /**\n * Text to display on the expand button\n * @default \"Show more...\"\n */\n expandText?: string;\n /**\n * Text to display on the collapse button\n * @default \"Show less...\"\n */\n collapseText?: string;\n /**\n * Callback fired when content is expanded\n */\n onExpand?: (e: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Callback fired when content is collapsed\n */\n onCollapse?: (e: MouseEvent<HTMLButtonElement>) => void;\n };\n }\n ) &\n DataTrackingId;\n\n/**\n * Internal state for shadow indicators\n */\ntype ShadowState = {\n /**\n * Whether to show right shadow indicator\n */\n right: boolean;\n /**\n * Whether to show left shadow indicator\n */\n left: boolean;\n /**\n * Whether to show top shadow indicator\n */\n top: boolean;\n /**\n * Whether to show bottom shadow indicator\n */\n bottom: boolean;\n};\n\n/**\n * Overflow component for a scrollable container with edge shadow\n * indicators, and optional truncate-with-expand/collapse behavior.\n *\n * Features:\n * - Scrolls content that exceeds the configured `height`/`width`\n * - Shows shadow indicators on whichever edges have more content to scroll to\n * - Optional `truncate` mode (column direction only) with expand/collapse\n * buttons and customizable button text\n * - `contentRef` exposes the actual scrolling element, separate from the\n * outer wrapper `ref`, for integrations like virtualizers or IntersectionObserver\n *\n * @example\n * <Overflow height={200}>\n * <LongContent />\n * </Overflow>\n *\n * @example\n * <Overflow direction=\"column\" truncate={{ expandText: \"Show more\", collapseText: \"Show less\" }}>\n * <LongContent />\n * </Overflow>\n */\nexport const Overflow = forwardRef(\n ({ gap, ...props }: OverflowProps, ref: Ref<HTMLDivElement>) => {\n const data = {\n children: childrenToString(props.children),\n height: props.height,\n truncate: props.truncate,\n };\n\n const trackingId = useTrackingId({\n name: \"Overflow\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n children,\n className,\n direction = \"column\",\n style,\n height,\n width,\n truncate,\n contentRef: contentRefProp,\n ...rest\n } = componentProps;\n const contentRef = useRef<HTMLDivElement>(null);\n // Expose the scrollable content element to consumers while keeping the internal\n // ref the observers and scroll handlers depend on.\n const mergedContentRef = useMergeRefs([contentRef, contentRefProp]);\n const [expanded, setExpanded] = useState(false);\n const [shadow, setShadow] = useState<ShadowState>({\n left: false,\n right: false,\n top: false,\n bottom: false,\n });\n const [contentClipped, setContentClipped] = useState(false);\n\n const shadowUpdate = useCallback(() => {\n if (!contentRef.current) return;\n if (direction === \"row\") {\n const right =\n contentRef.current.offsetWidth < contentRef.current.scrollWidth;\n setShadow((prev) => {\n return {\n ...prev,\n right,\n };\n });\n return;\n }\n const bottom =\n contentRef.current.offsetHeight < contentRef.current.scrollHeight;\n setShadow((prev) => {\n return {\n ...prev,\n bottom,\n };\n });\n }, [direction]);\n\n useLayoutEffect(() => {\n if (!contentRef.current) return;\n\n const mutationCallback = () => {\n if (!contentRef.current) return;\n const contentHeight =\n typeof height === \"number\" ? height : contentRef.current.offsetHeight;\n if (contentHeight < contentRef.current.scrollHeight) {\n setContentClipped(true);\n return;\n }\n setExpanded(false);\n setContentClipped(false);\n };\n\n const observer = new MutationObserver(mutationCallback);\n observer.observe(contentRef.current, {\n childList: true, // Observe changes to child elements\n });\n return () => {\n observer.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n if (contentRef.current) {\n const observer = new ResizeObserver(() => {\n shadowUpdate();\n });\n\n observer.observe(contentRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }\n }, [shadowUpdate]);\n\n useEffect(() => {\n if (!contentRef.current) return;\n setContentClipped(\n contentRef.current.offsetHeight < contentRef.current.scrollHeight,\n );\n }, []);\n\n useEffect(() => {\n // account for loading children after initial render\n shadowUpdate();\n }, [children, shadowUpdate]);\n\n // update overflow position on scroll\n const handleOnScroll = () => {\n if (!contentRef.current) return;\n const target = contentRef.current;\n if (direction === \"row\") {\n const left = target.scrollLeft > 0;\n const right =\n target.scrollLeft < target.scrollWidth - target.offsetWidth;\n setShadow({\n left,\n right,\n top: false,\n bottom: false,\n });\n return;\n }\n const top = target.scrollTop > 0;\n const bottom =\n target.scrollTop < target.scrollHeight - target.offsetHeight;\n setShadow({\n top,\n bottom,\n left: false,\n right: false,\n });\n };\n const inertOverflowFocusables = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((element) => {\n if (!element.isIntersecting) {\n element.target.setAttribute(\"disabled\", \"true\");\n } else {\n element.target.removeAttribute(\"disabled\");\n }\n });\n };\n\n const overflowClassNames = cx([styles[\"overflow\"]], className, {\n [styles[\"horizontal\"]]: direction === \"row\",\n [styles[\"truncate\"]]: !!truncate,\n [styles[\"expanded\"]]: expanded,\n });\n\n useEffect(() => {\n if (!truncate) return;\n const observer = new IntersectionObserver(inertOverflowFocusables);\n const focusable = getKeyboardFocusableElements(contentRef.current);\n focusable.forEach((element) => {\n observer.observe(element);\n });\n }, [truncate]);\n\n if (truncate) {\n const wrapperStyle = {\n ...style,\n ...layoutStyles,\n };\n const contentStyle = {\n minHeight: height ?? undefined,\n minWidth: width ?? undefined,\n };\n\n const expandString =\n typeof truncate === \"object\" ? truncate.expandText : \"Show more...\";\n const collapseString =\n typeof truncate === \"object\" ? truncate.collapseText : \"Show less...\";\n\n const onExpandClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n setExpanded((prev) => !prev);\n setTimeout(() => {\n handleOnScroll();\n }, 100);\n if (typeof truncate !== \"object\") return;\n if (expanded) {\n truncate.onCollapse?.(e);\n return;\n }\n truncate.onExpand?.(e);\n };\n\n const showExpand = contentClipped;\n\n return (\n <div\n ref={ref}\n style={wrapperStyle}\n className={overflowClassNames}\n data-anv=\"overflow\"\n data-tracking-id={trackingId}\n {...rest}\n >\n {shadow.top && !truncate ? (\n <div className={styles[\"shadow-top\"]} />\n ) : null}\n {shadow.left && !truncate ? (\n <div className={styles[\"shadow-left\"]} />\n ) : null}\n <Flex\n className={styles[\"content\"]}\n onScroll={handleOnScroll}\n style={contentStyle}\n ref={mergedContentRef}\n direction={direction}\n gap={gap}\n /**\n * This is disabled because scrollable area much also be focusable.\n * References:\n * - {@link https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/0d5321a5457c5f0da0ca216053cc5b4f571b53ae/docs/rules/no-noninteractive-tabindex.md}\n * - {@link https://chromestatus.com/feature/5231964663578624}\n */\n tabIndex={0}\n >\n {children}\n </Flex>\n {shadow.bottom && !truncate ? (\n <div className={styles[\"shadow-bottom\"]} />\n ) : null}\n {shadow.right && !truncate ? (\n <div className={styles[\"shadow-right\"]} />\n ) : null}\n {truncate && showExpand ? (\n <button\n className={styles[\"expand-button\"]}\n onClick={onExpandClickHandler}\n >\n {expanded ? collapseString : expandString}\n </button>\n ) : null}\n </div>\n );\n }\n\n const wrapperStyle = {\n ...style,\n ...layoutStyles,\n };\n\n const contentStyle = {\n height: height ?? undefined,\n width: width ?? undefined,\n };\n\n return (\n <div\n ref={ref}\n style={wrapperStyle}\n className={overflowClassNames}\n data-anv=\"overflow\"\n data-tracking-id={trackingId}\n {...rest}\n >\n {shadow.left ? <div className={styles[\"shadow-left\"]} /> : null}\n {shadow.top ? <div className={styles[\"shadow-top\"]} /> : null}\n <Flex\n className={styles[\"content\"]}\n onScroll={handleOnScroll}\n ref={mergedContentRef}\n style={contentStyle}\n direction={direction}\n gap={gap}\n /**\n * This is disabled because scrollable area much also be focusable.\n * References:\n * - {@link https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/0d5321a5457c5f0da0ca216053cc5b4f571b53ae/docs/rules/no-noninteractive-tabindex.md}\n * - {@link https://chromestatus.com/feature/5231964663578624}\n */\n tabIndex={0}\n >\n {children}\n </Flex>\n {shadow.bottom ? <div className={styles[\"shadow-bottom\"]} /> : null}\n {shadow.right ? <div className={styles[\"shadow-right\"]} /> : null}\n </div>\n );\n },\n);\nOverflow.displayName = \"Overflow\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useState,\n MouseEvent,\n useRef,\n useEffect,\n} from \"react\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { DataTrackingId, LayoutUtilProps } from \"../../types\";\nimport {\n childrenToString,\n getKeyboardFocusableElements,\n} from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport overflowStyles from \"./Overflow.module.scss\";\nimport styles from \"./OverflowText.module.scss\";\n\n/**\n * Props for the OverflowText component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type OverflowTextProps = ComponentPropsWithoutRef<\"div\"> &\n LayoutUtilProps & {\n /**\n * Number of rows to display before truncation\n * @default 1\n */\n rows?: number | \"unlimited\";\n } & (\n | {\n /**\n * Whether the text is expandable\n * @default false\n */\n expandable?: false;\n /**\n * Text for expand button (not used when expandable is false)\n */\n expandText?: never;\n /**\n * Text for collapse button (not used when expandable is false)\n */\n collapseText?: never;\n /**\n * Callback for expand event (not used when expandable is false)\n */\n onExpand?: never;\n /**\n * Callback for collapse event (not used when expandable is false)\n */\n onCollapse?: never;\n }\n | {\n /**\n * Whether the text is expandable\n */\n expandable: true;\n /**\n * Text to display on the expand button\n * @default \"Show more...\"\n */\n expandText?: string;\n /**\n * Text to display on the collapse button\n * @default \"Show less...\"\n */\n collapseText?: string;\n /**\n * Callback fired when content is expanded\n */\n onExpand?: (e: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Callback fired when content is collapsed\n */\n onCollapse?: (e: MouseEvent<HTMLButtonElement>) => void;\n }\n ) &\n DataTrackingId;\n\n/**\n * OverflowText component for text content with line truncation and expansion.\n *\n * Features:\n * - Configurable line limit with row-based truncation\n * - Expandable content with custom expand/collapse text\n * - Automatic height calculation and overflow detection\n * - Keyboard navigation support for focusable elements\n * - Resize observer for dynamic content changes\n * - Accessibility features with proper focus management\n * - Support for unlimited rows or specific row limits\n * - Callback support for expand/collapse events\n * - Layout utility props support\n *\n * @example\n * <OverflowText rows={3} expandable>\n * <Text>\n * This is a long text that will be truncated to 3 rows\n * and can be expanded to show the full content.\n * </Text>\n * </OverflowText>\n */\nexport const OverflowText = forwardRef<HTMLDivElement, OverflowTextProps>(\n (props, ref) => {\n const data = {\n children: childrenToString(props.children),\n rows: props.rows,\n expandable: props.expandable,\n expandText: props.expandText,\n collapseText: props.collapseText,\n };\n\n const trackingId = useTrackingId({\n name: \"OverflowText\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n const { rows = 1, ...otherProps } = props;\n const { layoutStyles, componentProps } = useLayoutPropsUtil(otherProps);\n const [expanded, setExpanded] = useState(false);\n const [heights, setHeights] = useState<{\n clientHeight: number;\n scrollHeight: number;\n }>({ clientHeight: 0, scrollHeight: 0 });\n const { className, style, children, ...rest } = componentProps;\n\n const contentRef = useRef<HTMLDivElement>(null);\n\n const styledCombined = {\n ...style,\n ...layoutStyles,\n \"--a2-inline-overflow-text-row\":\n expanded || rows === \"unlimited\" ? \"initial\" : rows,\n };\n\n useEffect(() => {\n if (contentRef.current) {\n const observer = new ResizeObserver(() => {\n if (!contentRef.current) return;\n setHeights({\n clientHeight: contentRef.current.clientHeight,\n scrollHeight: contentRef.current.scrollHeight,\n });\n });\n\n observer.observe(contentRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }\n }, []);\n\n const inertOverflowFocusables = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((element) => {\n if (!element.isIntersecting) {\n element.target.setAttribute(\"disabled\", \"true\");\n } else {\n element.target.removeAttribute(\"disabled\");\n }\n });\n };\n\n useEffect(() => {\n if (!(\"expandable\" in props)) return;\n const observer = new IntersectionObserver(inertOverflowFocusables);\n const focusable = getKeyboardFocusableElements(contentRef.current);\n focusable.forEach((element) => {\n observer.observe(element);\n });\n // This is added because we don't need to watch for all props\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.expandable]);\n\n const showExpand = expanded || heights.clientHeight < heights.scrollHeight;\n\n if (\"expandable\" in props && props.expandable === true) {\n const {\n expandable,\n expandText,\n collapseText,\n onExpand,\n onCollapse,\n ...expandableRest\n } = rest;\n const expandString = expandText ?? \"Show more...\";\n const collapseString = collapseText ?? \"Show less...\";\n\n const onExpandClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n setExpanded((prev) => !prev);\n if (expanded) {\n onCollapse?.(e);\n return;\n }\n onExpand?.(e);\n };\n\n const overflowTextClassNames = cx([styles[\"overflow-text\"]], className, {\n [styles[\"expanded\"]]: expanded,\n });\n return (\n <div\n ref={ref}\n className={overflowTextClassNames}\n style={styledCombined}\n data-anv=\"overflow-text\"\n data-tracking-id={trackingId}\n {...expandableRest}\n >\n <div className={styles[\"content\"]} ref={contentRef}>\n {children}\n </div>\n {showExpand && (\n <button\n className={overflowStyles[\"expand-button\"]}\n onClick={onExpandClickHandler}\n >\n {expanded ? collapseString : expandString}\n </button>\n )}\n </div>\n );\n }\n\n const overflowTextClassNames = cx([styles[\"overflow-text\"], className]);\n return (\n <div\n ref={ref}\n className={overflowTextClassNames}\n style={styledCombined}\n data-anv=\"overflow-text\"\n data-tracking-id={trackingId}\n {...rest}\n >\n <div className={styles[\"content\"]}>{children}</div>\n </div>\n );\n },\n);\n\nOverflowText.displayName = \"OverflowText\";\n","import { Overflow as OverflowElement, type OverflowProps } from \"./Overflow\";\nimport { OverflowText, type OverflowTextProps } from \"./OverflowText\";\n\n/**\n * Overflow component for handling content that exceeds container boundaries.\n *\n * Features:\n * - Supports both horizontal and vertical overflow\n * - Automatic shadow indicators for scrollable content\n * - Truncation with expand/collapse functionality\n * - Keyboard navigation support for focusable elements\n * - Automatic height and width management\n * - Layout utility props support\n * - Resize observer for dynamic content changes\n * - Accessibility features with proper focus management\n * - Scroll event handling with shadow updates\n *\n * @example\n * <Overflow direction=\"column\" height={400} gap=\"4\">\n * {items.map((item, i) => (\n * <Card key={i} style={{ width: \"100%\", minHeight: 100 }}>\n * {item.content}\n * </Card>\n * ))}\n * </Overflow>\n */\nexport const Overflow = Object.assign(OverflowElement, {\n Text: OverflowText,\n});\n\nexport default Overflow;\n\nexport { type OverflowProps };\nexport { OverflowText, type OverflowTextProps };\n"],"names":["Overflow","styles","wrapperStyle","contentStyle","overflowTextClassNames","OverflowElement"],"mappings":"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"}
@@ -2,14 +2,14 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { createContext, forwardRef, useContext, useState, useLayoutEffect, useRef, useEffect, useMemo, useCallback } from 'react';
4
4
  import { c as cx } from './index-De1g9FRV.js';
5
- import { P as Popover, a as usePopoverContext } from './AiMark-BLBxE1Oj.js';
5
+ import { P as Popover, a as usePopoverContext } from './AiMark-voHPSerQ.js';
6
6
  import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
7
7
  import { S as SvgKeyboardArrowUp } from './keyboard_arrow_up-CxzK6LAl.js';
8
8
  import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
9
9
  import { b as BreakpointLg } from './primitive-BXgYQTTw.js';
10
10
  import { useTrackingId } from './useTrackingId.js';
11
- import { B as Button } from './Button-CjeF1Agb.js';
12
- import { I as Icon } from './Icon-BEwHECSM.js';
11
+ import { B as Button } from './Button-BNzCI47m.js';
12
+ import { I as Icon } from './Icon-B4uCvMU9.js';
13
13
  import { T as Tooltip } from './Tooltip-BC8lnFhe.js';
14
14
  import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
15
15
  import { F as Flex } from './Flex-Bb3iHExM.js';
@@ -18,16 +18,16 @@ import { S as SvgMoreVert } from './more_vert-C_lJSyxt.js';
18
18
  import { S as SvgEdit } from './edit-DQOiktcu.js';
19
19
  import { S as SvgCheck } from './check-Cf67OWrZ.js';
20
20
  import { S as SvgClose } from './close-DZj38AEh.js';
21
- import { B as ButtonLink } from './ButtonLink-BSReBbc3.js';
22
- import { B as Breadcrumbs } from './Breadcrumbs-DbV4ld8s.js';
23
- import { M as Menu } from './Menu-BAya9Qnd.js';
24
- import { T as TextField } from './TextField-fE3_0jQJ.js';
25
- import { T as Text } from './Text-LXIB1J3C.js';
26
- import { C as Chip } from './Chip-DvmMbb5g.js';
21
+ import { B as ButtonLink } from './ButtonLink-PlW08u41.js';
22
+ import { B as Breadcrumbs } from './Breadcrumbs-VzOM2nBU.js';
23
+ import { M as Menu } from './Menu-DmEXQLXt.js';
24
+ import { T as TextField } from './TextField-WQTlqKso.js';
25
+ import { T as Text } from './Text-mDcQHC2U.js';
26
+ import { C as Chip } from './Chip-CxgryK86.js';
27
27
  import { createPortal } from 'react-dom';
28
- import { D as Dialog } from './Dialog-l0UzKEU0.js';
28
+ import { D as Dialog } from './Dialog-BxulNN8n.js';
29
29
  import { d as drillDownStyles, D as DrillDownContext } from './DrillDown.module-D1Bf9_yP.js';
30
- import { u as useDrillDownContextState } from './useInitialFocus-BIvXK1Rp.js';
30
+ import { u as useDrillDownContextState } from './useInitialFocus-BUxEDMEG.js';
31
31
  import { u as useDrillDownContext } from './useDrillDownContext-iUvoTget.js';
32
32
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjqeAJZ9.js';
33
33
 
@@ -865,4 +865,4 @@ const Page = Object.assign(
865
865
  Page.displayName = "Page";
866
866
 
867
867
  export { Page as P };
868
- //# sourceMappingURL=Page-gMaR1lF5.js.map
868
+ //# sourceMappingURL=Page-BreBQ3pG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Page-gMaR1lF5.js","sources":["../../hammer-icon/mdi/round/segment.svg","../../hammer-icon/mdi/round/chevron_left.svg","../src/components/Page/PageSidebarContext.ts","../src/components/Page/PageContext.ts","../src/components/Page/pageBreakpoint.ts","../src/components/Page/PageSidebar.tsx","../src/components/Page/PageSidebarHeader.tsx","../../hammer-icon/mdi/round/settings.svg","../src/components/Page/PageHeader.tsx","../src/components/Page/PageContent.tsx","../src/components/Page/PagePanel.tsx","../src/components/Page/PageFooter.tsx","../src/components/Page/Page.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSegment = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10 18h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zM3 7c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm7 6h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1z\" }));\nexport default SvgSegment;\n","import * as React from \"react\";\nconst SvgChevronLeft = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.71 6.71a.996.996 0 0 0-1.41 0L8.71 11.3a.996.996 0 0 0 0 1.41l4.59 4.59a.996.996 0 1 0 1.41-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41z\" }));\nexport default SvgChevronLeft;\n","import { createContext } from \"react\";\n\ntype PageSideBarContextProps = {\n collapsed: boolean;\n};\n\nexport const PageSideBarContext = createContext<PageSideBarContextProps | null>(\n null,\n);\n","import { createContext } from \"react\";\n\nexport const PageContext = createContext<PageContextProps>({});\n\nexport type PageContextProps = {\n pageWidth?: number;\n contentWrapper?: HTMLElement | null;\n footerSlot?: HTMLElement | null;\n};\n","import { core } from \"@servicetitan/hammer-token\";\n\n/**\n * The Page's `lg` breakpoint width in px — the boundary between the stacked\n * \"mobile\" layout (sidebar collapses to a popover trigger, panel becomes a\n * dialog, virtual scrollbar hidden) and the desktop layout. Parsed once from the\n * design token; falls back to `0` if the token is unavailable.\n *\n * Single source of truth for every width-driven layout decision in Page\n * (`PageSidebar`, `PagePanel`, `PageContent`) so they can never drift apart.\n */\nexport const PAGE_LG_BREAKPOINT = +(\n core.primitive?.BreakpointLg?.value?.replace(\"px\", \"\") ?? 0\n);\n\n/**\n * Whether the given page width should use the mobile layout (below `lg`).\n * Used by `PageSidebar`/`PagePanel` to swap to their popover/dialog forms.\n */\nexport const isPageMobileWidth = (pageWidth: number | undefined): boolean =>\n (pageWidth ?? 0) < PAGE_LG_BREAKPOINT;\n\n/**\n * Whether the virtual scrollbar should render (desktop, `lg` and above).\n *\n * Gating the sized virtual-scroll spacer on this — rather than rendering it\n * unconditionally — is what prevents the `Page.Content` feedback loop: during\n * SSR/hydration `pageWidth` is `0` and the Page stylesheet has not yet pulled\n * the spacer out of flow, so an always-rendered spacer would round-trip through\n * the `document.scrollHeight` the ResizeObserver measures (\"Maximum update depth\n * exceeded\"). Below `lg` the spacer is never rendered, so it can never feed back.\n */\nexport const showsPageVirtualScroll = (\n pageWidth: number | undefined,\n): boolean => PAGE_LG_BREAKPOINT > 0 && (pageWidth ?? 0) >= PAGE_LG_BREAKPOINT;\n","import { Button, Icon, Flex, Tooltip } from \"../\";\nimport { Popover } from \"../../internal/components/Popover\";\nimport { usePopoverContext } from \"../../internal/components/Popover/internal/usePopoverContext\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n ReactNode,\n Ref,\n useContext,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport SegmentSVG from \"@servicetitan/hammer-icon/mdi/round/segment.svg\";\nimport RespOpen from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport RespClose from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport OpenSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport CloseSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_left.svg\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\n\nfunction AdaptiveSidebarContent({\n children,\n className,\n innerRef,\n}: {\n children: ReactNode;\n className?: string;\n innerRef?: Ref<HTMLDivElement>;\n}) {\n const { closePopover } = usePopoverContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([containerRef, innerRef]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const handleClick = (e: Event) => {\n if (!(e.target instanceof Element)) return;\n if (e.target.closest(\"a\")) closePopover();\n };\n el.addEventListener(\"click\", handleClick);\n return () => el.removeEventListener(\"click\", handleClick);\n }, [closePopover]);\n\n return (\n <Flex direction=\"column\" className={className} ref={mergedRef}>\n {children}\n </Flex>\n );\n}\n\n/**\n * Props for the PageSidebar component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Key for storing sidebar collapsed state in localStorage\n * @default \"sidebar-collapsed\"\n */\n localStorageKey?: string;\n /**\n * Custom tracking ID for analytics\n */\n [\"data-tracking-id\"]?: string;\n /**\n * Title to display in the adaptive trigger button\n */\n currentPageTitle?: string;\n};\n\n/**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\nexport const PageSidebar = forwardRef(\n (props: PageSidebarProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n className,\n currentPageTitle,\n localStorageKey = \"sidebar-collapsed\",\n ...rest\n } = props;\n\n const data = {\n localStorageKey,\n };\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n\n const [isMobile, setIsMobile] = useState<boolean>(() =>\n typeof window !== \"undefined\"\n ? isPageMobileWidth(window.innerWidth)\n : false,\n );\n\n useLayoutEffect(() => {\n if (!pageWidth) return;\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n const trackingId = useTrackingId({\n name: \"PageSidebarButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n // getting stored value\n const sidebarState = localStorage.getItem(localStorageKey);\n return sidebarState ? JSON.parse(sidebarState) : false;\n });\n const classNames = cx([styles[\"sidebar\"]], className, {\n [styles[\"collapsed\"]]: collapsed,\n });\n const onToggleButtonClick = () => {\n setCollapsed((prev) => {\n localStorage.setItem(localStorageKey, JSON.stringify(!prev));\n return !prev;\n });\n };\n\n if (isMobile) {\n return (\n <Popover fillAvailableHeight matchReferenceWidth noPadding>\n <Popover.Trigger>\n {(props) => {\n if (typeof document !== \"undefined\") {\n if (props[\"aria-expanded\"]) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }\n return (\n <div className={styles[\"sidebar-adaptive-trigger-container\"]}>\n <Button\n className={styles[\"sidebar-adaptive-trigger\"]}\n icon={SegmentSVG}\n appearance=\"ghost\"\n {...props}\n >\n {!currentPageTitle ? \"Menu\" : currentPageTitle}\n <Icon\n className={styles[\"sidebar-adaptive-trigger-icon\"]}\n justifyContent=\"end\"\n svg={props[\"aria-expanded\"] ? RespClose : RespOpen}\n />\n </Button>\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content className={styles[\"sidebar-adaptive-container\"]}>\n <AdaptiveSidebarContent\n className={styles[\"sidebar-adaptive\"]}\n innerRef={ref}\n >\n {children}\n </AdaptiveSidebarContent>\n </Popover.Content>\n </Popover>\n );\n }\n\n return (\n <PageSideBarContext.Provider value={{ collapsed }}>\n <div className={classNames} ref={ref} {...rest}>\n <div className={styles[\"sidebar-inner\"]} aria-hidden={collapsed}>\n <div>{children}</div>\n </div>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Tooltip placement=\"right\">\n <Tooltip.Trigger className={styles[\"toggle-button-tooltip\"]}>\n <Button\n size=\"small\"\n onClick={onToggleButtonClick}\n className={styles[\"toggle-button\"]}\n aria-label={collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n data-tracking-id={trackingId}\n icon={collapsed ? OpenSVG : CloseSVG}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n </Tooltip.Content>\n </Tooltip>\n </div>\n </div>\n </PageSideBarContext.Provider>\n );\n },\n);\n\nPageSidebar.displayName = \"Page.Sidebar\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref, useContext } from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\n\n/**\n * Props for the PageSidebarHeader component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarHeaderProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\nexport const PageSidebarHeader = forwardRef(\n (props: PageSidebarHeaderProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const context = useContext(PageSideBarContext);\n const classNames = cx([styles[\"sidebar-header\"]], className);\n\n return (\n <div className={classNames} ref={ref} {...rest}>\n <div\n className={styles[\"header-content\"]}\n aria-hidden={context?.collapsed}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nPageSidebarHeader.displayName = \"Page.SidebarHeader\";\n","import * as React from \"react\";\nconst SvgSettings = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.5 12c0-.23-.01-.45-.03-.68l1.86-1.41c.4-.3.51-.86.26-1.3l-1.87-3.23a.987.987 0 0 0-1.25-.42l-2.15.91c-.37-.26-.76-.49-1.17-.68l-.29-2.31c-.06-.5-.49-.88-.99-.88h-3.73c-.51 0-.94.38-1 .88l-.29 2.31c-.41.19-.8.42-1.17.68l-2.15-.91c-.46-.2-1-.02-1.25.42L2.41 8.62c-.25.44-.14.99.26 1.3l1.86 1.41a7.343 7.343 0 0 0 0 1.35l-1.86 1.41c-.4.3-.51.86-.26 1.3l1.87 3.23c.25.44.79.62 1.25.42l2.15-.91c.37.26.76.49 1.17.68l.29 2.31c.06.5.49.88.99.88h3.73c.5 0 .93-.38.99-.88l.29-2.31c.41-.19.8-.42 1.17-.68l2.15.91c.46.2 1 .02 1.25-.42l1.87-3.23c.25-.44.14-.99-.26-1.3l-1.86-1.41c.03-.23.04-.45.04-.68zm-7.46 3.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\" }));\nexport default SvgSettings;\n","import {\n ButtonProps,\n ButtonLinkProps,\n BreadcrumbsLinkProps,\n ChipProps,\n Tooltip,\n ButtonLink,\n Button,\n Flex,\n Menu,\n Breadcrumbs,\n Chip,\n Text,\n TextField,\n} from \"../\";\nimport {\n ComponentPropsWithoutRef,\n ReactNode,\n forwardRef,\n Ref,\n RefObject,\n useState,\n useRef,\n useEffect,\n KeyboardEvent,\n} from \"react\";\nimport Layout, { LayoutProps } from \"../Layout\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport LocalSettings from \"@servicetitan/hammer-icon/mdi/round/settings.svg\";\nimport MoreVert from \"@servicetitan/hammer-icon/mdi/round/more_vert.svg\";\nimport Edit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\n\n/**\n * Props for page header action buttons\n */\ntype PageHeaderActionProps = Omit<ButtonProps, \"appearance\"> & {\n /**\n * Label text for the action button\n */\n label: string;\n};\n\n/**\n * Props for page header actions configuration\n */\ntype PageHeaderActionsProps = {\n /**\n * Primary action button\n */\n primary?: PageHeaderActionProps;\n /**\n * Array of secondary action buttons\n */\n secondary?: PageHeaderActionProps[];\n};\n\n/**\n * Base props for preference actions\n */\ntype BasePreferenceProps = {\n /**\n * Accessible label for the preference action\n */\n \"aria-label\": string;\n};\n\n/**\n * Props for preference button actions\n */\ntype PreferenceButtonProps = Omit<\n ButtonProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\n/**\n * Props for preference link actions\n */\ntype PreferenceLinkProps = Omit<\n ButtonLinkProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\ntype PageHeaderTitleConfig = {\n text: string;\n onChange?: (title: string) => void | boolean;\n editButtonLabel?: string;\n editFieldLabel?: string;\n confirmButtonLabel?: string;\n cancelButtonLabel?: string;\n};\n\ntype PageHeaderTitle = PageHeaderTitleConfig[\"text\"] | PageHeaderTitleConfig;\n\n/**\n * Props for the PageHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type PageHeaderProps = Omit<\n ComponentPropsWithoutRef<\"header\">,\n \"title\"\n> & {\n /**\n * Main title of the page\n */\n title: PageHeaderTitle;\n /**\n * Breadcrumb navigation links\n */\n breadcrumbs?: BreadcrumbsLinkProps[];\n /**\n * Status chips to display\n */\n chips?: ChipProps[];\n /**\n * Description text or content below the title\n */\n description?: ReactNode;\n /**\n * Primary and secondary action buttons\n */\n actions?: PageHeaderActionsProps;\n /**\n * Preference action button or link\n */\n preferenceAction?: PreferenceButtonProps | PreferenceLinkProps;\n /**\n * Layout configuration for the header\n */\n layout?: LayoutProps;\n};\n\n/**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\nexport const PageHeader = forwardRef(\n (props: PageHeaderProps, ref: Ref<HTMLHeadElement>) => {\n const {\n title: titleProp,\n breadcrumbs,\n chips,\n description,\n actions,\n preferenceAction,\n layout,\n className,\n ...rest\n } = props;\n\n const title: PageHeaderTitleConfig =\n typeof titleProp === \"string\" ? { text: titleProp } : titleProp;\n\n const [editing, setEditing] = useState(false);\n const [editingTitle, setEditingTitle] = useState<\n PageHeaderTitleConfig[\"text\"]\n >(title.text);\n const editFieldRef = useRef<HTMLInputElement>(null);\n const editButtonRef = useRef<HTMLButtonElement>(null);\n const firstRenderRef = useRef(true);\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false;\n return;\n }\n\n if (editing === true && editFieldRef.current) {\n editFieldRef.current.focus();\n }\n\n if (editing === false && editButtonRef.current) {\n editButtonRef.current.focus();\n }\n }, [editing]);\n\n const { fluid, variant } = layout || {};\n\n const preferenceItem =\n preferenceAction &&\n (\"href\" in preferenceAction ? (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonLink\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceLinkProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceButtonProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ));\n\n const actionItems = actions && (\n <Flex justifyContent=\"flex-end\" className={styles.actions}>\n {/* Only primary action */}\n {actions.primary &&\n (!actions.secondary || actions.secondary.length === 0) && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n\n {/* Only secondary actions (1-2 buttons) */}\n {!!actions.secondary?.length &&\n actions.secondary.length < 3 &&\n !actions.primary &&\n actions.secondary.map((action, index) => (\n <Button key={index} appearance=\"secondary\" {...action}>\n {action.label}\n </Button>\n ))}\n\n {/* 1 secondary action + primary action */}\n {actions.primary &&\n !!actions.secondary?.length &&\n actions.secondary.length === 1 && (\n <>\n <Button appearance=\"secondary\" {...actions.secondary[0]}>\n {actions.secondary[0].label}\n </Button>\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n </>\n )}\n\n {/* Multiple secondary actions (3+) with optional primary */}\n {!!actions.secondary?.length &&\n (actions.secondary.length >= 3 ||\n (actions.secondary.length >= 2 && actions.primary)) && (\n <>\n <Menu\n trigger={({ ref, ...rest }) => (\n <Tooltip>\n <Tooltip.Trigger\n ref={ref as unknown as RefObject<HTMLDivElement>}\n >\n <Button\n appearance=\"secondary\"\n icon={MoreVert}\n aria-label=\"More actions\"\n {...rest}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>More actions</Tooltip.Content>\n </Tooltip>\n )}\n >\n {actions.secondary.map((action, index) => {\n const icon =\n typeof action.icon === \"function\"\n ? action.icon\n : action.icon && \"after\" in action.icon\n ? action.icon.after\n : undefined;\n return (\n <Menu.Item\n key={index}\n label={action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n icon={icon}\n className={action.className}\n />\n );\n })}\n </Menu>\n {actions.primary && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n </>\n )}\n </Flex>\n );\n\n const headerClassName = cx(styles.content, styles.header, className);\n\n const headerContentClassName = cx(\n styles[\"content-inner\"],\n styles[\"content-header-inner\"],\n );\n\n return (\n <header ref={ref} className={headerClassName} {...rest}>\n <div className={headerContentClassName}>\n <Layout fluid={fluid} variant={variant} className={styles[\"layout\"]}>\n {breadcrumbs && (\n <Layout.Item>\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => (\n <Breadcrumbs.Link key={index} {...breadcrumb} />\n ))}\n </Breadcrumbs>\n </Layout.Item>\n )}\n\n <Layout.Item sm={2} md={actionItems || editing ? 6 : 12}>\n <div className={styles[\"title-wrapper\"]}>\n {title.onChange && editing ? (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n style={{ display: \"flex\" }}\n >\n <Flex alignItems=\"center\" grow={1} gap={2}>\n <TextField\n aria-label={title.editFieldLabel ?? \"Page title\"}\n defaultValue={title.text}\n flexGrow={1}\n ref={editFieldRef}\n onChange={(event) =>\n setEditingTitle(event.target.value)\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.code === \"Escape\") {\n setEditing(false);\n setEditingTitle(title.text);\n }\n }}\n />\n\n <Flex alignItems=\"center\" gap={1}>\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Check}\n aria-label={\n title.confirmButtonLabel ?? \"Update title\"\n }\n size=\"small\"\n appearance=\"primary\"\n onClick={() => {\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.confirmButtonLabel ?? \"Update title\"}\n </Tooltip.Content>\n </Tooltip>\n\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Close}\n aria-label={title.cancelButtonLabel ?? \"Cancel\"}\n size=\"small\"\n onClick={() => {\n setEditing(false);\n setEditingTitle(title.text);\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.cancelButtonLabel ?? \"Cancel\"}\n </Tooltip.Content>\n </Tooltip>\n </Flex>\n </Flex>\n </form>\n ) : (\n <>\n <Text\n variant=\"headline\"\n size=\"large\"\n el=\"h1\"\n className={styles.title}\n >\n {title.text}\n </Text>\n\n {title.onChange != null ? (\n <>\n {\" \"}\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Edit}\n aria-label={title.editButtonLabel ?? \"Edit title\"}\n size=\"small\"\n appearance=\"ghost\"\n ref={editButtonRef}\n onClick={() => setEditing(true)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.editButtonLabel ?? \"Edit title\"}\n </Tooltip.Content>\n </Tooltip>\n </>\n ) : null}\n </>\n )}\n\n {preferenceItem}\n </div>\n\n {chips && (\n <Flex className={styles.chips}>\n {chips.map((chip, index) => (\n <Chip key={index} {...chip} />\n ))}\n </Flex>\n )}\n </Layout.Item>\n\n {actions && (\n <Layout.Item sm={2} md={6}>\n {actionItems}\n </Layout.Item>\n )}\n\n {description && (\n <Layout.Item md={12} className={styles.description}>\n {description}\n </Layout.Item>\n )}\n </Layout>\n </div>\n </header>\n );\n },\n);\n\nPageHeader.displayName = \"Page.Header\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useEffect,\n useRef,\n useState,\n UIEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\nimport { showsPageVirtualScroll } from \"./pageBreakpoint\";\nimport { useMergeRefs } from \"../../hooks\";\n\n/**\n * Props for the PageContent component\n * @extends ComponentPropsWithoutRef<\"section\">\n */\nexport type PageContentProps = ComponentPropsWithoutRef<\"section\">;\n\n/**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Renders as a section element inside Page's main landmark\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Portals into Page's content wrapper via context\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\nexport const PageContent = forwardRef(\n (props: PageContentProps, ref: Ref<HTMLElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx([styles[\"content\"]], className);\n const sectionRef = useRef<HTMLElement>(null);\n const virtualScrollRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([sectionRef, ref]);\n const blocker = useRef(true);\n // Coalesce a burst of ResizeObserver notifications into one frame so the read\n // of document.scrollHeight can never round-trip synchronously into setState\n // (see the \"Maximum update depth exceeded\" feedback loop).\n const rafIdRef = useRef(0);\n const [leftOffset, setLeftOffset] = useState(-9);\n const [contentHeight, setContentHeight] = useState(0);\n\n const { contentWrapper, pageWidth } = useContext(PageContext);\n\n // The virtual scrollbar only exists at lg+ (see Page.module.scss). Gating the\n // sized spacer on the same breakpoint keeps it out of normal flow during\n // SSR/hydration and below lg, where it would otherwise feed back into the\n // document height the observer measures.\n const showVirtualScroll = showsPageVirtualScroll(pageWidth);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!blocker.current) return;\n function updatePosition() {\n const newValue = window.scrollY;\n\n virtualScrollRef.current?.scrollTo(0, newValue ?? 0);\n }\n window?.addEventListener(\"scroll\", updatePosition, { passive: true });\n\n return () => {\n window?.removeEventListener(\"scroll\", updatePosition);\n };\n }, []);\n\n useEffect(() => {\n const section = sectionRef.current;\n if (!section) return;\n\n const wrapperParent = section.parentElement;\n const isWrapped =\n wrapperParent?.classList.contains(styles[\"content-wrapper\"]) ?? false;\n const heightTarget = isWrapped ? wrapperParent! : section;\n\n const observer = new ResizeObserver(() => {\n if (rafIdRef.current) return;\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = 0;\n if (!sectionRef.current) return;\n\n setLeftOffset(\n sectionRef.current.offsetLeft + sectionRef.current.offsetWidth - 9,\n );\n\n const offset =\n parseFloat(\n getComputedStyle(sectionRef.current).getPropertyValue(\"--offset\"),\n ) || 0;\n const rawHeight = document.documentElement.scrollHeight - offset;\n setContentHeight(\n Number.isFinite(rawHeight) ? Math.max(0, rawHeight) : 0,\n );\n });\n });\n\n observer.observe(section);\n if (isWrapped) observer.observe(heightTarget);\n\n return () => {\n observer.disconnect();\n if (rafIdRef.current) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = 0;\n }\n };\n }, [contentWrapper]);\n\n function scrollBody(e: UIEvent<HTMLElement>) {\n if (typeof window === \"undefined\") return;\n if (blocker.current) return;\n window.scrollTo(0, (e.target as HTMLDivElement).scrollTop);\n }\n\n const section = (\n <section className={classNames} ref={mergedRef} {...rest}>\n <div className={styles[\"content-inner\"]}>{children}</div>\n <div\n className={styles[\"virtual-scroll-container\"]}\n ref={virtualScrollRef}\n style={{\n left: leftOffset,\n }}\n onScrollCapture={scrollBody}\n onMouseEnter={() => {\n blocker.current = false;\n }}\n onMouseLeave={() => {\n blocker.current = true;\n }}\n >\n {showVirtualScroll && (\n <div style={{ width: 1, height: contentHeight }} />\n )}\n </div>\n </section>\n );\n\n if (contentWrapper) {\n return createPortal(section, contentWrapper);\n }\n\n if (contentWrapper === undefined) {\n return section;\n }\n\n return null;\n },\n);\n\nPageContent.displayName = \"PageContent\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useEffect,\n useLayoutEffect,\n useState,\n useMemo,\n CSSProperties,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport Dialog from \"../Dialog\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\nimport {\n DrillDownContext,\n DrillDownContextProps,\n} from \"../DrillDown/internal/DrillDownContext\";\nimport { useDrillDownContextState } from \"../DrillDown/internal/useDrillDownContextState\";\nimport drillDownStyles from \"../DrillDown/DrillDown.module.scss\";\nimport { useDrillDownContext } from \"../DrillDown/internal/useDrillDownContext\";\n\n/**\n * Props for the PagePanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PagePanelProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Whether the panel is open\n * @default true\n */\n open?: boolean;\n /**\n * Size of the panel\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Whether to remove default padding from the panel\n * @default false\n */\n noPadding?: boolean;\n /**\n * Sets the default DrillDown index when used in an uncontrolled way\n */\n defaultDrillDownIndex?: DrillDownContextProps[\"index\"];\n /**\n * Callback to pass context to useDrillDown hook\n */\n onDrillDownContextChange?: (context: DrillDownContextProps) => void;\n};\n\nconst PagePanelInner = ({\n style,\n open,\n children,\n}: {\n style?: CSSProperties;\n open?: boolean;\n children?: React.ReactNode;\n}) => {\n const { index } = useDrillDownContext();\n\n const classNames = cx([styles[\"panel-inner\"]], {\n [styles[\"drilldown-open\"]]: index !== undefined,\n });\n\n return (\n <div\n className={classNames}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={typeof open !== \"undefined\" && open ? 0 : -1}\n style={{ ...style, overflowY: index === undefined ? \"auto\" : \"hidden\" }}\n >\n <div>{children}</div>\n </div>\n );\n};\n\n/**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\nexport const PagePanel = forwardRef(\n (props: PagePanelProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n open,\n size = \"medium\",\n noPadding,\n style,\n className,\n defaultDrillDownIndex,\n onDrillDownContextChange,\n ...rest\n } = props;\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n const classNames = cx(\n [styles.panel, drillDownStyles.panel],\n [styles[size]],\n className,\n {\n [styles[\"open\"]]: typeof open === \"undefined\" ? true : open,\n [styles[\"persistent\"]]: typeof open === \"undefined\",\n [styles[\"noPadding\"]]: noPadding,\n },\n );\n\n const drillDownContextValue = useDrillDownContextState({\n defaultDrillDownIndex,\n });\n\n const drillDownContextProviderValue = useMemo(\n () => ({\n ...drillDownContextValue,\n hostIsInteractive: open !== false,\n }),\n [drillDownContextValue, open],\n );\n\n useLayoutEffect(() => {\n onDrillDownContextChange?.(drillDownContextProviderValue);\n }, [drillDownContextProviderValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n const previousOpenRef = useRef(open);\n\n useEffect(() => {\n if (isMobile) {\n previousOpenRef.current = open;\n return;\n }\n\n if (previousOpenRef.current && open === false) {\n drillDownContextValue.onHostClose?.();\n drillDownContextValue.onHostClosed?.();\n }\n\n previousOpenRef.current = open;\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n if (isMobile || !open || previousOpenRef.current) {\n return;\n }\n\n drillDownContextValue.setHostTrigger?.(\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null,\n );\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n if (typeof open !== \"undefined\" && isMobile) {\n return (\n <Dialog\n open={open}\n defaultDrillDownIndex={defaultDrillDownIndex}\n onDrillDownContextChange={onDrillDownContextChange}\n >\n <Dialog.Content>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </Dialog.Content>\n </Dialog>\n );\n }\n return (\n <DrillDownContext.Provider value={drillDownContextProviderValue}>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <PagePanelInner style={style} open={open}>\n {children}\n </PagePanelInner>\n </div>\n </DrillDownContext.Provider>\n );\n },\n);\n\nPagePanel.displayName = \"PagePanel\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref, useContext } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { LayoutUtilProps } from \"../../types\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\n\n/**\n * Props for the PageFooter component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type PageFooterProps = ComponentPropsWithoutRef<\"div\"> & LayoutUtilProps;\n\n/**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n * - Portals into Page's footer slot via context\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\nexport const PageFooter = forwardRef(\n (props: PageFooterProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n const { footerSlot } = useContext(PageContext);\n\n const classNames = cx([styles[\"content-footer\"]], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const footer = (\n <footer className={classNames} ref={ref} style={styleCombined} {...rest}>\n {children}\n </footer>\n );\n\n if (footerSlot) {\n return createPortal(footer, footerSlot);\n }\n\n if (footerSlot === undefined) {\n return footer;\n }\n\n return null;\n },\n);\nPageFooter.displayName = \"PageFooter\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSidebar } from \"./PageSidebar\";\nimport { PageSidebarHeader } from \"./PageSidebarHeader\";\nimport { PageHeader } from \"./PageHeader\";\nimport { PageContent } from \"./PageContent\";\nimport { PagePanel } from \"./PagePanel\";\nimport { PageFooter } from \"./PageFooter\";\nimport { PageContext } from \"./PageContext\";\nimport { useMergeRefs } from \"../../hooks\";\n\n//--- Start Page Element ---//\n/**\n * Props for the Page component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Page component for creating full-page layouts with navigation and content areas.\n *\n * Features:\n * - Container for complete page layouts\n * - Supports sidebar navigation with collapsible state\n * - Header with breadcrumbs, chips, and action buttons\n * - Main content area with virtual scrolling\n * - Optional slide-out panels with responsive dialog fallback\n * - Footer with layout utilities\n * - Responsive design with mobile adaptations\n * - Accessibility support with proper landmarks\n * - Automatic tracking ID generation for analytics\n * - Local storage persistence for sidebar state\n *\n * @example\n * <Page>\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Navigation</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[{ href: \"/\", children: \"Home\" }]}\n * actions={{ primary: { label: \"Save\", onClick: handleSave } }}\n * />\n * <Page.Content>\n * <Text>Main content</Text>\n * </Page.Content>\n * <Page.Panel open={isPanelOpen} size=\"medium\">\n * <Text>Panel content</Text>\n * </Page.Panel>\n * <Page.Footer>\n * <Text>Footer content</Text>\n * </Page.Footer>\n * </Page>\n */\nexport const Page = Object.assign(\n forwardRef<HTMLDivElement, PageProps>(function PageInner(props, ref) {\n const { children, className, ...rest } = props;\n const classNames = cx(styles[\"page\"], className);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n\n const [pageWidth, setPageWidth] = useState<number>(0);\n const [contentWrapper, setContentWrapper] = useState<HTMLElement | null>(\n null,\n );\n const [footerSlot, setFooterSlot] = useState<HTMLElement | null>(null);\n\n // Capture the portal targets with stable callback refs that ignore detach\n // (node === null). React calls a ref with null while it tears down/hides a\n // subtree (the disappearLayoutEffects phase); routing that null straight\n // into setState — as a bare `ref={setContentWrapper}` does — re-renders Page\n // mid-teardown, which detaches the ref again, looping until React throws\n // \"Maximum update depth exceeded\". The <main>/<div> below share Page's\n // lifetime, so they only truly unmount when Page does, making a retained\n // node after a real unmount harmless. Bailing when the node is unchanged\n // also avoids a redundant render if the same element is re-attached.\n const contentWrapperRef = useCallback((node: HTMLElement | null) => {\n setContentWrapper((prev) => (node && node !== prev ? node : prev));\n }, []);\n const footerSlotRef = useCallback((node: HTMLElement | null) => {\n setFooterSlot((prev) => (node && node !== prev ? node : prev));\n }, []);\n\n useLayoutEffect(() => {\n const element = elRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPageWidth(entry.contentRect.width);\n }\n });\n if (element) {\n resizeObserver.observe(element);\n }\n // disconnect() releases every observation, so an explicit unobserve here\n // would be redundant.\n return () => resizeObserver.disconnect();\n }, [elRef]);\n\n const contextValue = useMemo(\n () => ({ pageWidth, contentWrapper, footerSlot }),\n [pageWidth, contentWrapper, footerSlot],\n );\n\n return (\n <PageContext.Provider value={contextValue}>\n <div className={classNames} data-anv=\"Page\" ref={combinedRef} {...rest}>\n <div className={styles[\"container\"]}>\n {children}\n <main\n className={styles[\"content-wrapper\"]}\n ref={contentWrapperRef}\n />\n <div className={styles[\"footer-slot\"]} ref={footerSlotRef} />\n </div>\n </div>\n </PageContext.Provider>\n );\n }),\n {\n /**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\n Sidebar: PageSidebar,\n /**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\n SidebarHeader: PageSidebarHeader,\n /**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\n Header: PageHeader,\n /**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Renders as a section element inside Page's main landmark\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Portals into Page's content wrapper via context\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\n Content: PageContent,\n /**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\n Panel: PagePanel,\n /**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\n Footer: PageFooter,\n },\n);\nPage.displayName = \"Page\";\n"],"names":["core.primitive?.BreakpointLg","props","SegmentSVG","RespClose","RespOpen","OpenSVG","CloseSVG","LocalSettings","ref","rest","MoreVert","Check","Close","Edit","section"],"mappings":"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"}
1
+ {"version":3,"file":"Page-BreBQ3pG.js","sources":["../../hammer-icon/mdi/round/segment.svg","../../hammer-icon/mdi/round/chevron_left.svg","../src/components/Page/PageSidebarContext.ts","../src/components/Page/PageContext.ts","../src/components/Page/pageBreakpoint.ts","../src/components/Page/PageSidebar.tsx","../src/components/Page/PageSidebarHeader.tsx","../../hammer-icon/mdi/round/settings.svg","../src/components/Page/PageHeader.tsx","../src/components/Page/PageContent.tsx","../src/components/Page/PagePanel.tsx","../src/components/Page/PageFooter.tsx","../src/components/Page/Page.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSegment = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10 18h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zM3 7c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm7 6h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1z\" }));\nexport default SvgSegment;\n","import * as React from \"react\";\nconst SvgChevronLeft = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.71 6.71a.996.996 0 0 0-1.41 0L8.71 11.3a.996.996 0 0 0 0 1.41l4.59 4.59a.996.996 0 1 0 1.41-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41z\" }));\nexport default SvgChevronLeft;\n","import { createContext } from \"react\";\n\ntype PageSideBarContextProps = {\n collapsed: boolean;\n};\n\nexport const PageSideBarContext = createContext<PageSideBarContextProps | null>(\n null,\n);\n","import { createContext } from \"react\";\n\nexport const PageContext = createContext<PageContextProps>({});\n\nexport type PageContextProps = {\n pageWidth?: number;\n contentWrapper?: HTMLElement | null;\n footerSlot?: HTMLElement | null;\n};\n","import { core } from \"@servicetitan/hammer-token\";\n\n/**\n * The Page's `lg` breakpoint width in px — the boundary between the stacked\n * \"mobile\" layout (sidebar collapses to a popover trigger, panel becomes a\n * dialog, virtual scrollbar hidden) and the desktop layout. Parsed once from the\n * design token; falls back to `0` if the token is unavailable.\n *\n * Single source of truth for every width-driven layout decision in Page\n * (`PageSidebar`, `PagePanel`, `PageContent`) so they can never drift apart.\n */\nexport const PAGE_LG_BREAKPOINT = +(\n core.primitive?.BreakpointLg?.value?.replace(\"px\", \"\") ?? 0\n);\n\n/**\n * Whether the given page width should use the mobile layout (below `lg`).\n * Used by `PageSidebar`/`PagePanel` to swap to their popover/dialog forms.\n */\nexport const isPageMobileWidth = (pageWidth: number | undefined): boolean =>\n (pageWidth ?? 0) < PAGE_LG_BREAKPOINT;\n\n/**\n * Whether the virtual scrollbar should render (desktop, `lg` and above).\n *\n * Gating the sized virtual-scroll spacer on this — rather than rendering it\n * unconditionally — is what prevents the `Page.Content` feedback loop: during\n * SSR/hydration `pageWidth` is `0` and the Page stylesheet has not yet pulled\n * the spacer out of flow, so an always-rendered spacer would round-trip through\n * the `document.scrollHeight` the ResizeObserver measures (\"Maximum update depth\n * exceeded\"). Below `lg` the spacer is never rendered, so it can never feed back.\n */\nexport const showsPageVirtualScroll = (\n pageWidth: number | undefined,\n): boolean => PAGE_LG_BREAKPOINT > 0 && (pageWidth ?? 0) >= PAGE_LG_BREAKPOINT;\n","import { Button, Icon, Flex, Tooltip } from \"../\";\nimport { Popover } from \"../../internal/components/Popover\";\nimport { usePopoverContext } from \"../../internal/components/Popover/internal/usePopoverContext\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n ReactNode,\n Ref,\n useContext,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport SegmentSVG from \"@servicetitan/hammer-icon/mdi/round/segment.svg\";\nimport RespOpen from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport RespClose from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport OpenSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport CloseSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_left.svg\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\n\nfunction AdaptiveSidebarContent({\n children,\n className,\n innerRef,\n}: {\n children: ReactNode;\n className?: string;\n innerRef?: Ref<HTMLDivElement>;\n}) {\n const { closePopover } = usePopoverContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([containerRef, innerRef]);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const handleClick = (e: Event) => {\n if (!(e.target instanceof Element)) return;\n if (e.target.closest(\"a\")) closePopover();\n };\n el.addEventListener(\"click\", handleClick);\n return () => el.removeEventListener(\"click\", handleClick);\n }, [closePopover]);\n\n return (\n <Flex direction=\"column\" className={className} ref={mergedRef}>\n {children}\n </Flex>\n );\n}\n\n/**\n * Props for the PageSidebar component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Key for storing sidebar collapsed state in localStorage\n * @default \"sidebar-collapsed\"\n */\n localStorageKey?: string;\n /**\n * Custom tracking ID for analytics\n */\n [\"data-tracking-id\"]?: string;\n /**\n * Title to display in the adaptive trigger button\n */\n currentPageTitle?: string;\n};\n\n/**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\nexport const PageSidebar = forwardRef(\n (props: PageSidebarProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n className,\n currentPageTitle,\n localStorageKey = \"sidebar-collapsed\",\n ...rest\n } = props;\n\n const data = {\n localStorageKey,\n };\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n\n const [isMobile, setIsMobile] = useState<boolean>(() =>\n typeof window !== \"undefined\"\n ? isPageMobileWidth(window.innerWidth)\n : false,\n );\n\n useLayoutEffect(() => {\n if (!pageWidth) return;\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n const trackingId = useTrackingId({\n name: \"PageSidebarButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n // getting stored value\n const sidebarState = localStorage.getItem(localStorageKey);\n return sidebarState ? JSON.parse(sidebarState) : false;\n });\n const classNames = cx([styles[\"sidebar\"]], className, {\n [styles[\"collapsed\"]]: collapsed,\n });\n const onToggleButtonClick = () => {\n setCollapsed((prev) => {\n localStorage.setItem(localStorageKey, JSON.stringify(!prev));\n return !prev;\n });\n };\n\n if (isMobile) {\n return (\n <Popover fillAvailableHeight matchReferenceWidth noPadding>\n <Popover.Trigger>\n {(props) => {\n if (typeof document !== \"undefined\") {\n if (props[\"aria-expanded\"]) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }\n return (\n <div className={styles[\"sidebar-adaptive-trigger-container\"]}>\n <Button\n className={styles[\"sidebar-adaptive-trigger\"]}\n icon={SegmentSVG}\n appearance=\"ghost\"\n {...props}\n >\n {!currentPageTitle ? \"Menu\" : currentPageTitle}\n <Icon\n className={styles[\"sidebar-adaptive-trigger-icon\"]}\n justifyContent=\"end\"\n svg={props[\"aria-expanded\"] ? RespClose : RespOpen}\n />\n </Button>\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content className={styles[\"sidebar-adaptive-container\"]}>\n <AdaptiveSidebarContent\n className={styles[\"sidebar-adaptive\"]}\n innerRef={ref}\n >\n {children}\n </AdaptiveSidebarContent>\n </Popover.Content>\n </Popover>\n );\n }\n\n return (\n <PageSideBarContext.Provider value={{ collapsed }}>\n <div className={classNames} ref={ref} {...rest}>\n <div className={styles[\"sidebar-inner\"]} aria-hidden={collapsed}>\n <div>{children}</div>\n </div>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Tooltip placement=\"right\">\n <Tooltip.Trigger className={styles[\"toggle-button-tooltip\"]}>\n <Button\n size=\"small\"\n onClick={onToggleButtonClick}\n className={styles[\"toggle-button\"]}\n aria-label={collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n data-tracking-id={trackingId}\n icon={collapsed ? OpenSVG : CloseSVG}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n </Tooltip.Content>\n </Tooltip>\n </div>\n </div>\n </PageSideBarContext.Provider>\n );\n },\n);\n\nPageSidebar.displayName = \"Page.Sidebar\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref, useContext } from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\n\n/**\n * Props for the PageSidebarHeader component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarHeaderProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\nexport const PageSidebarHeader = forwardRef(\n (props: PageSidebarHeaderProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const context = useContext(PageSideBarContext);\n const classNames = cx([styles[\"sidebar-header\"]], className);\n\n return (\n <div className={classNames} ref={ref} {...rest}>\n <div\n className={styles[\"header-content\"]}\n aria-hidden={context?.collapsed}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nPageSidebarHeader.displayName = \"Page.SidebarHeader\";\n","import * as React from \"react\";\nconst SvgSettings = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.5 12c0-.23-.01-.45-.03-.68l1.86-1.41c.4-.3.51-.86.26-1.3l-1.87-3.23a.987.987 0 0 0-1.25-.42l-2.15.91c-.37-.26-.76-.49-1.17-.68l-.29-2.31c-.06-.5-.49-.88-.99-.88h-3.73c-.51 0-.94.38-1 .88l-.29 2.31c-.41.19-.8.42-1.17.68l-2.15-.91c-.46-.2-1-.02-1.25.42L2.41 8.62c-.25.44-.14.99.26 1.3l1.86 1.41a7.343 7.343 0 0 0 0 1.35l-1.86 1.41c-.4.3-.51.86-.26 1.3l1.87 3.23c.25.44.79.62 1.25.42l2.15-.91c.37.26.76.49 1.17.68l.29 2.31c.06.5.49.88.99.88h3.73c.5 0 .93-.38.99-.88l.29-2.31c.41-.19.8-.42 1.17-.68l2.15.91c.46.2 1 .02 1.25-.42l1.87-3.23c.25-.44.14-.99-.26-1.3l-1.86-1.41c.03-.23.04-.45.04-.68zm-7.46 3.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\" }));\nexport default SvgSettings;\n","import {\n ButtonProps,\n ButtonLinkProps,\n BreadcrumbsLinkProps,\n ChipProps,\n Tooltip,\n ButtonLink,\n Button,\n Flex,\n Menu,\n Breadcrumbs,\n Chip,\n Text,\n TextField,\n} from \"../\";\nimport {\n ComponentPropsWithoutRef,\n ReactNode,\n forwardRef,\n Ref,\n RefObject,\n useState,\n useRef,\n useEffect,\n KeyboardEvent,\n} from \"react\";\nimport Layout, { LayoutProps } from \"../Layout\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport LocalSettings from \"@servicetitan/hammer-icon/mdi/round/settings.svg\";\nimport MoreVert from \"@servicetitan/hammer-icon/mdi/round/more_vert.svg\";\nimport Edit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\n\n/**\n * Props for page header action buttons\n */\ntype PageHeaderActionProps = Omit<ButtonProps, \"appearance\"> & {\n /**\n * Label text for the action button\n */\n label: string;\n};\n\n/**\n * Props for page header actions configuration\n */\ntype PageHeaderActionsProps = {\n /**\n * Primary action button\n */\n primary?: PageHeaderActionProps;\n /**\n * Array of secondary action buttons\n */\n secondary?: PageHeaderActionProps[];\n};\n\n/**\n * Base props for preference actions\n */\ntype BasePreferenceProps = {\n /**\n * Accessible label for the preference action\n */\n \"aria-label\": string;\n};\n\n/**\n * Props for preference button actions\n */\ntype PreferenceButtonProps = Omit<\n ButtonProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\n/**\n * Props for preference link actions\n */\ntype PreferenceLinkProps = Omit<\n ButtonLinkProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\ntype PageHeaderTitleConfig = {\n text: string;\n onChange?: (title: string) => void | boolean;\n editButtonLabel?: string;\n editFieldLabel?: string;\n confirmButtonLabel?: string;\n cancelButtonLabel?: string;\n};\n\ntype PageHeaderTitle = PageHeaderTitleConfig[\"text\"] | PageHeaderTitleConfig;\n\n/**\n * Props for the PageHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type PageHeaderProps = Omit<\n ComponentPropsWithoutRef<\"header\">,\n \"title\"\n> & {\n /**\n * Main title of the page\n */\n title: PageHeaderTitle;\n /**\n * Breadcrumb navigation links\n */\n breadcrumbs?: BreadcrumbsLinkProps[];\n /**\n * Status chips to display\n */\n chips?: ChipProps[];\n /**\n * Description text or content below the title\n */\n description?: ReactNode;\n /**\n * Primary and secondary action buttons\n */\n actions?: PageHeaderActionsProps;\n /**\n * Preference action button or link\n */\n preferenceAction?: PreferenceButtonProps | PreferenceLinkProps;\n /**\n * Layout configuration for the header\n */\n layout?: LayoutProps;\n};\n\n/**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\nexport const PageHeader = forwardRef(\n (props: PageHeaderProps, ref: Ref<HTMLHeadElement>) => {\n const {\n title: titleProp,\n breadcrumbs,\n chips,\n description,\n actions,\n preferenceAction,\n layout,\n className,\n ...rest\n } = props;\n\n const title: PageHeaderTitleConfig =\n typeof titleProp === \"string\" ? { text: titleProp } : titleProp;\n\n const [editing, setEditing] = useState(false);\n const [editingTitle, setEditingTitle] = useState<\n PageHeaderTitleConfig[\"text\"]\n >(title.text);\n const editFieldRef = useRef<HTMLInputElement>(null);\n const editButtonRef = useRef<HTMLButtonElement>(null);\n const firstRenderRef = useRef(true);\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false;\n return;\n }\n\n if (editing === true && editFieldRef.current) {\n editFieldRef.current.focus();\n }\n\n if (editing === false && editButtonRef.current) {\n editButtonRef.current.focus();\n }\n }, [editing]);\n\n const { fluid, variant } = layout || {};\n\n const preferenceItem =\n preferenceAction &&\n (\"href\" in preferenceAction ? (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonLink\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceLinkProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceButtonProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ));\n\n const actionItems = actions && (\n <Flex justifyContent=\"flex-end\" className={styles.actions}>\n {/* Only primary action */}\n {actions.primary &&\n (!actions.secondary || actions.secondary.length === 0) && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n\n {/* Only secondary actions (1-2 buttons) */}\n {!!actions.secondary?.length &&\n actions.secondary.length < 3 &&\n !actions.primary &&\n actions.secondary.map((action, index) => (\n <Button key={index} appearance=\"secondary\" {...action}>\n {action.label}\n </Button>\n ))}\n\n {/* 1 secondary action + primary action */}\n {actions.primary &&\n !!actions.secondary?.length &&\n actions.secondary.length === 1 && (\n <>\n <Button appearance=\"secondary\" {...actions.secondary[0]}>\n {actions.secondary[0].label}\n </Button>\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n </>\n )}\n\n {/* Multiple secondary actions (3+) with optional primary */}\n {!!actions.secondary?.length &&\n (actions.secondary.length >= 3 ||\n (actions.secondary.length >= 2 && actions.primary)) && (\n <>\n <Menu\n trigger={({ ref, ...rest }) => (\n <Tooltip>\n <Tooltip.Trigger\n ref={ref as unknown as RefObject<HTMLDivElement>}\n >\n <Button\n appearance=\"secondary\"\n icon={MoreVert}\n aria-label=\"More actions\"\n {...rest}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>More actions</Tooltip.Content>\n </Tooltip>\n )}\n >\n {actions.secondary.map((action, index) => {\n const icon =\n typeof action.icon === \"function\"\n ? action.icon\n : action.icon && \"after\" in action.icon\n ? action.icon.after\n : undefined;\n return (\n <Menu.Item\n key={index}\n label={action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n icon={icon}\n className={action.className}\n />\n );\n })}\n </Menu>\n {actions.primary && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n </>\n )}\n </Flex>\n );\n\n const headerClassName = cx(styles.content, styles.header, className);\n\n const headerContentClassName = cx(\n styles[\"content-inner\"],\n styles[\"content-header-inner\"],\n );\n\n return (\n <header ref={ref} className={headerClassName} {...rest}>\n <div className={headerContentClassName}>\n <Layout fluid={fluid} variant={variant} className={styles[\"layout\"]}>\n {breadcrumbs && (\n <Layout.Item>\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => (\n <Breadcrumbs.Link key={index} {...breadcrumb} />\n ))}\n </Breadcrumbs>\n </Layout.Item>\n )}\n\n <Layout.Item sm={2} md={actionItems || editing ? 6 : 12}>\n <div className={styles[\"title-wrapper\"]}>\n {title.onChange && editing ? (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n style={{ display: \"flex\" }}\n >\n <Flex alignItems=\"center\" grow={1} gap={2}>\n <TextField\n aria-label={title.editFieldLabel ?? \"Page title\"}\n defaultValue={title.text}\n flexGrow={1}\n ref={editFieldRef}\n onChange={(event) =>\n setEditingTitle(event.target.value)\n }\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.code === \"Escape\") {\n setEditing(false);\n setEditingTitle(title.text);\n }\n }}\n />\n\n <Flex alignItems=\"center\" gap={1}>\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Check}\n aria-label={\n title.confirmButtonLabel ?? \"Update title\"\n }\n size=\"small\"\n appearance=\"primary\"\n onClick={() => {\n if (title.onChange?.(editingTitle) !== false) {\n setEditing(false);\n }\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.confirmButtonLabel ?? \"Update title\"}\n </Tooltip.Content>\n </Tooltip>\n\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Close}\n aria-label={title.cancelButtonLabel ?? \"Cancel\"}\n size=\"small\"\n onClick={() => {\n setEditing(false);\n setEditingTitle(title.text);\n }}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.cancelButtonLabel ?? \"Cancel\"}\n </Tooltip.Content>\n </Tooltip>\n </Flex>\n </Flex>\n </form>\n ) : (\n <>\n <Text\n variant=\"headline\"\n size=\"large\"\n el=\"h1\"\n className={styles.title}\n >\n {title.text}\n </Text>\n\n {title.onChange != null ? (\n <>\n {\" \"}\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n icon={Edit}\n aria-label={title.editButtonLabel ?? \"Edit title\"}\n size=\"small\"\n appearance=\"ghost\"\n ref={editButtonRef}\n onClick={() => setEditing(true)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {title.editButtonLabel ?? \"Edit title\"}\n </Tooltip.Content>\n </Tooltip>\n </>\n ) : null}\n </>\n )}\n\n {preferenceItem}\n </div>\n\n {chips && (\n <Flex className={styles.chips}>\n {chips.map((chip, index) => (\n <Chip key={index} {...chip} />\n ))}\n </Flex>\n )}\n </Layout.Item>\n\n {actions && (\n <Layout.Item sm={2} md={6}>\n {actionItems}\n </Layout.Item>\n )}\n\n {description && (\n <Layout.Item md={12} className={styles.description}>\n {description}\n </Layout.Item>\n )}\n </Layout>\n </div>\n </header>\n );\n },\n);\n\nPageHeader.displayName = \"Page.Header\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useEffect,\n useRef,\n useState,\n UIEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\nimport { showsPageVirtualScroll } from \"./pageBreakpoint\";\nimport { useMergeRefs } from \"../../hooks\";\n\n/**\n * Props for the PageContent component\n * @extends ComponentPropsWithoutRef<\"section\">\n */\nexport type PageContentProps = ComponentPropsWithoutRef<\"section\">;\n\n/**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Renders as a section element inside Page's main landmark\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Portals into Page's content wrapper via context\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\nexport const PageContent = forwardRef(\n (props: PageContentProps, ref: Ref<HTMLElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx([styles[\"content\"]], className);\n const sectionRef = useRef<HTMLElement>(null);\n const virtualScrollRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([sectionRef, ref]);\n const blocker = useRef(true);\n // Coalesce a burst of ResizeObserver notifications into one frame so the read\n // of document.scrollHeight can never round-trip synchronously into setState\n // (see the \"Maximum update depth exceeded\" feedback loop).\n const rafIdRef = useRef(0);\n const [leftOffset, setLeftOffset] = useState(-9);\n const [contentHeight, setContentHeight] = useState(0);\n\n const { contentWrapper, pageWidth } = useContext(PageContext);\n\n // The virtual scrollbar only exists at lg+ (see Page.module.scss). Gating the\n // sized spacer on the same breakpoint keeps it out of normal flow during\n // SSR/hydration and below lg, where it would otherwise feed back into the\n // document height the observer measures.\n const showVirtualScroll = showsPageVirtualScroll(pageWidth);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!blocker.current) return;\n function updatePosition() {\n const newValue = window.scrollY;\n\n virtualScrollRef.current?.scrollTo(0, newValue ?? 0);\n }\n window?.addEventListener(\"scroll\", updatePosition, { passive: true });\n\n return () => {\n window?.removeEventListener(\"scroll\", updatePosition);\n };\n }, []);\n\n useEffect(() => {\n const section = sectionRef.current;\n if (!section) return;\n\n const wrapperParent = section.parentElement;\n const isWrapped =\n wrapperParent?.classList.contains(styles[\"content-wrapper\"]) ?? false;\n const heightTarget = isWrapped ? wrapperParent! : section;\n\n const observer = new ResizeObserver(() => {\n if (rafIdRef.current) return;\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = 0;\n if (!sectionRef.current) return;\n\n setLeftOffset(\n sectionRef.current.offsetLeft + sectionRef.current.offsetWidth - 9,\n );\n\n const offset =\n parseFloat(\n getComputedStyle(sectionRef.current).getPropertyValue(\"--offset\"),\n ) || 0;\n const rawHeight = document.documentElement.scrollHeight - offset;\n setContentHeight(\n Number.isFinite(rawHeight) ? Math.max(0, rawHeight) : 0,\n );\n });\n });\n\n observer.observe(section);\n if (isWrapped) observer.observe(heightTarget);\n\n return () => {\n observer.disconnect();\n if (rafIdRef.current) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = 0;\n }\n };\n }, [contentWrapper]);\n\n function scrollBody(e: UIEvent<HTMLElement>) {\n if (typeof window === \"undefined\") return;\n if (blocker.current) return;\n window.scrollTo(0, (e.target as HTMLDivElement).scrollTop);\n }\n\n const section = (\n <section className={classNames} ref={mergedRef} {...rest}>\n <div className={styles[\"content-inner\"]}>{children}</div>\n <div\n className={styles[\"virtual-scroll-container\"]}\n ref={virtualScrollRef}\n style={{\n left: leftOffset,\n }}\n onScrollCapture={scrollBody}\n onMouseEnter={() => {\n blocker.current = false;\n }}\n onMouseLeave={() => {\n blocker.current = true;\n }}\n >\n {showVirtualScroll && (\n <div style={{ width: 1, height: contentHeight }} />\n )}\n </div>\n </section>\n );\n\n if (contentWrapper) {\n return createPortal(section, contentWrapper);\n }\n\n if (contentWrapper === undefined) {\n return section;\n }\n\n return null;\n },\n);\n\nPageContent.displayName = \"PageContent\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useEffect,\n useLayoutEffect,\n useState,\n useMemo,\n CSSProperties,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport Dialog from \"../Dialog\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\nimport { isPageMobileWidth } from \"./pageBreakpoint\";\nimport {\n DrillDownContext,\n DrillDownContextProps,\n} from \"../DrillDown/internal/DrillDownContext\";\nimport { useDrillDownContextState } from \"../DrillDown/internal/useDrillDownContextState\";\nimport drillDownStyles from \"../DrillDown/DrillDown.module.scss\";\nimport { useDrillDownContext } from \"../DrillDown/internal/useDrillDownContext\";\n\n/**\n * Props for the PagePanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PagePanelProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Whether the panel is open\n * @default true\n */\n open?: boolean;\n /**\n * Size of the panel\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Whether to remove default padding from the panel\n * @default false\n */\n noPadding?: boolean;\n /**\n * Sets the default DrillDown index when used in an uncontrolled way\n */\n defaultDrillDownIndex?: DrillDownContextProps[\"index\"];\n /**\n * Callback to pass context to useDrillDown hook\n */\n onDrillDownContextChange?: (context: DrillDownContextProps) => void;\n};\n\nconst PagePanelInner = ({\n style,\n open,\n children,\n}: {\n style?: CSSProperties;\n open?: boolean;\n children?: React.ReactNode;\n}) => {\n const { index } = useDrillDownContext();\n\n const classNames = cx([styles[\"panel-inner\"]], {\n [styles[\"drilldown-open\"]]: index !== undefined,\n });\n\n return (\n <div\n className={classNames}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={typeof open !== \"undefined\" && open ? 0 : -1}\n style={{ ...style, overflowY: index === undefined ? \"auto\" : \"hidden\" }}\n >\n <div>{children}</div>\n </div>\n );\n};\n\n/**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\nexport const PagePanel = forwardRef(\n (props: PagePanelProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n open,\n size = \"medium\",\n noPadding,\n style,\n className,\n defaultDrillDownIndex,\n onDrillDownContextChange,\n ...rest\n } = props;\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n const classNames = cx(\n [styles.panel, drillDownStyles.panel],\n [styles[size]],\n className,\n {\n [styles[\"open\"]]: typeof open === \"undefined\" ? true : open,\n [styles[\"persistent\"]]: typeof open === \"undefined\",\n [styles[\"noPadding\"]]: noPadding,\n },\n );\n\n const drillDownContextValue = useDrillDownContextState({\n defaultDrillDownIndex,\n });\n\n const drillDownContextProviderValue = useMemo(\n () => ({\n ...drillDownContextValue,\n hostIsInteractive: open !== false,\n }),\n [drillDownContextValue, open],\n );\n\n useLayoutEffect(() => {\n onDrillDownContextChange?.(drillDownContextProviderValue);\n }, [drillDownContextProviderValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n const previousOpenRef = useRef(open);\n\n useEffect(() => {\n if (isMobile) {\n previousOpenRef.current = open;\n return;\n }\n\n if (previousOpenRef.current && open === false) {\n drillDownContextValue.onHostClose?.();\n drillDownContextValue.onHostClosed?.();\n }\n\n previousOpenRef.current = open;\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n if (isMobile || !open || previousOpenRef.current) {\n return;\n }\n\n drillDownContextValue.setHostTrigger?.(\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null,\n );\n }, [open, isMobile, drillDownContextValue]);\n\n useLayoutEffect(() => {\n setIsMobile(isPageMobileWidth(pageWidth));\n }, [pageWidth]);\n\n if (typeof open !== \"undefined\" && isMobile) {\n return (\n <Dialog\n open={open}\n defaultDrillDownIndex={defaultDrillDownIndex}\n onDrillDownContextChange={onDrillDownContextChange}\n >\n <Dialog.Content>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </Dialog.Content>\n </Dialog>\n );\n }\n return (\n <DrillDownContext.Provider value={drillDownContextProviderValue}>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <PagePanelInner style={style} open={open}>\n {children}\n </PagePanelInner>\n </div>\n </DrillDownContext.Provider>\n );\n },\n);\n\nPagePanel.displayName = \"PagePanel\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref, useContext } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { LayoutUtilProps } from \"../../types\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageContext } from \"./PageContext\";\n\n/**\n * Props for the PageFooter component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type PageFooterProps = ComponentPropsWithoutRef<\"div\"> & LayoutUtilProps;\n\n/**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n * - Portals into Page's footer slot via context\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\nexport const PageFooter = forwardRef(\n (props: PageFooterProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n const { footerSlot } = useContext(PageContext);\n\n const classNames = cx([styles[\"content-footer\"]], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const footer = (\n <footer className={classNames} ref={ref} style={styleCombined} {...rest}>\n {children}\n </footer>\n );\n\n if (footerSlot) {\n return createPortal(footer, footerSlot);\n }\n\n if (footerSlot === undefined) {\n return footer;\n }\n\n return null;\n },\n);\nPageFooter.displayName = \"PageFooter\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSidebar } from \"./PageSidebar\";\nimport { PageSidebarHeader } from \"./PageSidebarHeader\";\nimport { PageHeader } from \"./PageHeader\";\nimport { PageContent } from \"./PageContent\";\nimport { PagePanel } from \"./PagePanel\";\nimport { PageFooter } from \"./PageFooter\";\nimport { PageContext } from \"./PageContext\";\nimport { useMergeRefs } from \"../../hooks\";\n\n//--- Start Page Element ---//\n/**\n * Props for the Page component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Page component for creating full-page layouts with navigation and content areas.\n *\n * Features:\n * - Container for complete page layouts\n * - Supports sidebar navigation with collapsible state\n * - Header with breadcrumbs, chips, and action buttons\n * - Main content area with virtual scrolling\n * - Optional slide-out panels with responsive dialog fallback\n * - Footer with layout utilities\n * - Responsive design with mobile adaptations\n * - Accessibility support with proper landmarks\n * - Automatic tracking ID generation for analytics\n * - Local storage persistence for sidebar state\n *\n * @example\n * <Page>\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Navigation</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[{ href: \"/\", children: \"Home\" }]}\n * actions={{ primary: { label: \"Save\", onClick: handleSave } }}\n * />\n * <Page.Content>\n * <Text>Main content</Text>\n * </Page.Content>\n * <Page.Panel open={isPanelOpen} size=\"medium\">\n * <Text>Panel content</Text>\n * </Page.Panel>\n * <Page.Footer>\n * <Text>Footer content</Text>\n * </Page.Footer>\n * </Page>\n */\nexport const Page = Object.assign(\n forwardRef<HTMLDivElement, PageProps>(function PageInner(props, ref) {\n const { children, className, ...rest } = props;\n const classNames = cx(styles[\"page\"], className);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n\n const [pageWidth, setPageWidth] = useState<number>(0);\n const [contentWrapper, setContentWrapper] = useState<HTMLElement | null>(\n null,\n );\n const [footerSlot, setFooterSlot] = useState<HTMLElement | null>(null);\n\n // Capture the portal targets with stable callback refs that ignore detach\n // (node === null). React calls a ref with null while it tears down/hides a\n // subtree (the disappearLayoutEffects phase); routing that null straight\n // into setState — as a bare `ref={setContentWrapper}` does — re-renders Page\n // mid-teardown, which detaches the ref again, looping until React throws\n // \"Maximum update depth exceeded\". The <main>/<div> below share Page's\n // lifetime, so they only truly unmount when Page does, making a retained\n // node after a real unmount harmless. Bailing when the node is unchanged\n // also avoids a redundant render if the same element is re-attached.\n const contentWrapperRef = useCallback((node: HTMLElement | null) => {\n setContentWrapper((prev) => (node && node !== prev ? node : prev));\n }, []);\n const footerSlotRef = useCallback((node: HTMLElement | null) => {\n setFooterSlot((prev) => (node && node !== prev ? node : prev));\n }, []);\n\n useLayoutEffect(() => {\n const element = elRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPageWidth(entry.contentRect.width);\n }\n });\n if (element) {\n resizeObserver.observe(element);\n }\n // disconnect() releases every observation, so an explicit unobserve here\n // would be redundant.\n return () => resizeObserver.disconnect();\n }, [elRef]);\n\n const contextValue = useMemo(\n () => ({ pageWidth, contentWrapper, footerSlot }),\n [pageWidth, contentWrapper, footerSlot],\n );\n\n return (\n <PageContext.Provider value={contextValue}>\n <div className={classNames} data-anv=\"Page\" ref={combinedRef} {...rest}>\n <div className={styles[\"container\"]}>\n {children}\n <main\n className={styles[\"content-wrapper\"]}\n ref={contentWrapperRef}\n />\n <div className={styles[\"footer-slot\"]} ref={footerSlotRef} />\n </div>\n </div>\n </PageContext.Provider>\n );\n }),\n {\n /**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\n Sidebar: PageSidebar,\n /**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\n SidebarHeader: PageSidebarHeader,\n /**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\n Header: PageHeader,\n /**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Renders as a section element inside Page's main landmark\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Portals into Page's content wrapper via context\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\n Content: PageContent,\n /**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\n Panel: PagePanel,\n /**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\n Footer: PageFooter,\n },\n);\nPage.displayName = \"Page\";\n"],"names":["core.primitive?.BreakpointLg","props","SegmentSVG","RespClose","RespOpen","OpenSVG","CloseSVG","LocalSettings","ref","rest","MoreVert","Check","Close","Edit","section"],"mappings":"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"}