@techzyapp/ui-library 1.0.29 → 1.0.31

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 (534) hide show
  1. package/dist/{Accordion-w-w_WxxV.js → Accordion-ClK2XpD7.js} +3 -3
  2. package/dist/{Accordion-w-w_WxxV.js.map → Accordion-ClK2XpD7.js.map} +1 -1
  3. package/dist/{Accordion-P3PNqSER.cjs → Accordion-CtvAYNKd.cjs} +2 -2
  4. package/dist/{Accordion-P3PNqSER.cjs.map → Accordion-CtvAYNKd.cjs.map} +1 -1
  5. package/dist/AdminRoot-BYkmCGNx.js +57 -0
  6. package/dist/AdminRoot-BYkmCGNx.js.map +1 -0
  7. package/dist/AdminRoot-BbkfFQEn.cjs +2 -0
  8. package/dist/AdminRoot-BbkfFQEn.cjs.map +1 -0
  9. package/dist/{Alert-CJono1TJ.js → Alert-BLqAcEoT.js} +5 -5
  10. package/dist/{Alert-CJono1TJ.js.map → Alert-BLqAcEoT.js.map} +1 -1
  11. package/dist/{Alert-VFQuuII6.cjs → Alert-BM5WOI_u.cjs} +2 -2
  12. package/dist/{Alert-VFQuuII6.cjs.map → Alert-BM5WOI_u.cjs.map} +1 -1
  13. package/dist/{AuthLayout-QAtW2GAT.cjs → AuthLayout-DIcR__vo.cjs} +2 -2
  14. package/dist/{AuthLayout-QAtW2GAT.cjs.map → AuthLayout-DIcR__vo.cjs.map} +1 -1
  15. package/dist/{AuthLayout-DOFYw_z5.js → AuthLayout-m1BQ6Ixx.js} +2 -2
  16. package/dist/{AuthLayout-DOFYw_z5.js.map → AuthLayout-m1BQ6Ixx.js.map} +1 -1
  17. package/dist/{Avatar-DrV_F7Ex.cjs → Avatar-CQ--wGWS.cjs} +2 -2
  18. package/dist/{Avatar-DrV_F7Ex.cjs.map → Avatar-CQ--wGWS.cjs.map} +1 -1
  19. package/dist/{Avatar-DXNPg23a.js → Avatar-MwWIcj8z.js} +3 -3
  20. package/dist/{Avatar-DXNPg23a.js.map → Avatar-MwWIcj8z.js.map} +1 -1
  21. package/dist/{AvatarGroup-CwlYqDCI.js → AvatarGroup-BxYQo0zZ.js} +2 -2
  22. package/dist/{AvatarGroup-CwlYqDCI.js.map → AvatarGroup-BxYQo0zZ.js.map} +1 -1
  23. package/dist/{AvatarGroup-CHesdo-M.cjs → AvatarGroup-Bzu2t6Sd.cjs} +2 -2
  24. package/dist/{AvatarGroup-CHesdo-M.cjs.map → AvatarGroup-Bzu2t6Sd.cjs.map} +1 -1
  25. package/dist/{Breadcrumbs-XWU8tRvs.js → Breadcrumbs-CzHGbN2c.js} +5 -5
  26. package/dist/{Breadcrumbs-XWU8tRvs.js.map → Breadcrumbs-CzHGbN2c.js.map} +1 -1
  27. package/dist/{Breadcrumbs-DCEHxpSi.cjs → Breadcrumbs-Di4-Acfb.cjs} +2 -2
  28. package/dist/{Breadcrumbs-DCEHxpSi.cjs.map → Breadcrumbs-Di4-Acfb.cjs.map} +1 -1
  29. package/dist/{Button-CWMNNiia.js → Button-9Qcdkw-y.js} +2 -2
  30. package/dist/{Button-CWMNNiia.js.map → Button-9Qcdkw-y.js.map} +1 -1
  31. package/dist/{Button-CusxDmfq.cjs → Button-BQhiJq8e.cjs} +2 -2
  32. package/dist/{Button-CusxDmfq.cjs.map → Button-BQhiJq8e.cjs.map} +1 -1
  33. package/dist/{Calendar-Db3rr1VD.js → Calendar-BB-C0qXO.js} +4 -4
  34. package/dist/{Calendar-Db3rr1VD.js.map → Calendar-BB-C0qXO.js.map} +1 -1
  35. package/dist/{Calendar-BEQbZixA.cjs → Calendar-dXhLgOUH.cjs} +2 -2
  36. package/dist/{Calendar-BEQbZixA.cjs.map → Calendar-dXhLgOUH.cjs.map} +1 -1
  37. package/dist/Card-BERQfyhJ.js +129 -0
  38. package/dist/Card-BERQfyhJ.js.map +1 -0
  39. package/dist/Card-DULpoOfj.cjs +2 -0
  40. package/dist/Card-DULpoOfj.cjs.map +1 -0
  41. package/dist/{Chip-D12KcV4_.cjs → Chip-BuydTI6V.cjs} +2 -2
  42. package/dist/{Chip-D12KcV4_.cjs.map → Chip-BuydTI6V.cjs.map} +1 -1
  43. package/dist/{Chip-Zh1OB9nV.js → Chip-DZ5Fz7jx.js} +3 -3
  44. package/dist/{Chip-Zh1OB9nV.js.map → Chip-DZ5Fz7jx.js.map} +1 -1
  45. package/dist/{ChoiceCardGroup-CEniY_HJ.js → ChoiceCardGroup-BTbKjJdp.js} +3 -3
  46. package/dist/{ChoiceCardGroup-CEniY_HJ.js.map → ChoiceCardGroup-BTbKjJdp.js.map} +1 -1
  47. package/dist/{ChoiceCardGroup-BSagRbPI.cjs → ChoiceCardGroup-Bg2jtFpe.cjs} +2 -2
  48. package/dist/{ChoiceCardGroup-BSagRbPI.cjs.map → ChoiceCardGroup-Bg2jtFpe.cjs.map} +1 -1
  49. package/dist/{CodeBlock-DAM7BkHK.cjs → CodeBlock-BPraYPoS.cjs} +2 -2
  50. package/dist/{CodeBlock-DAM7BkHK.cjs.map → CodeBlock-BPraYPoS.cjs.map} +1 -1
  51. package/dist/{CodeBlock-CkrTnpcj.js → CodeBlock-BySsTAtY.js} +5 -5
  52. package/dist/{CodeBlock-CkrTnpcj.js.map → CodeBlock-BySsTAtY.js.map} +1 -1
  53. package/dist/{ColorPicker-BcCozxIe.cjs → ColorPicker-BTBTQD39.cjs} +2 -2
  54. package/dist/{ColorPicker-BcCozxIe.cjs.map → ColorPicker-BTBTQD39.cjs.map} +1 -1
  55. package/dist/{ColorPicker-DqxVgUoD.js → ColorPicker-DJow7m2v.js} +4 -4
  56. package/dist/{ColorPicker-DqxVgUoD.js.map → ColorPicker-DJow7m2v.js.map} +1 -1
  57. package/dist/{ColorPickerPanel-DZjN8NNn.js → ColorPickerPanel-D6agWM6y.js} +3 -3
  58. package/dist/{ColorPickerPanel-DZjN8NNn.js.map → ColorPickerPanel-D6agWM6y.js.map} +1 -1
  59. package/dist/{ColorPickerPanel-DAOESLCe.cjs → ColorPickerPanel-DXIYwUoE.cjs} +2 -2
  60. package/dist/{ColorPickerPanel-DAOESLCe.cjs.map → ColorPickerPanel-DXIYwUoE.cjs.map} +1 -1
  61. package/dist/{ColorRamp-_KwlPQ-T.cjs → ColorRamp-B45Rtwgw.cjs} +2 -2
  62. package/dist/{ColorRamp-_KwlPQ-T.cjs.map → ColorRamp-B45Rtwgw.cjs.map} +1 -1
  63. package/dist/{ColorRamp-DS5LVpRF.js → ColorRamp-Bhj28c_6.js} +3 -3
  64. package/dist/{ColorRamp-DS5LVpRF.js.map → ColorRamp-Bhj28c_6.js.map} +1 -1
  65. package/dist/ConfigProvider-Ct0Pe3Ku.js +335 -0
  66. package/dist/ConfigProvider-Ct0Pe3Ku.js.map +1 -0
  67. package/dist/ConfigProvider-CtpfSy1i.cjs +2 -0
  68. package/dist/ConfigProvider-CtpfSy1i.cjs.map +1 -0
  69. package/dist/{CopyButton-SFwjKod9.cjs → CopyButton-Bfte6TJF.cjs} +2 -2
  70. package/dist/{CopyButton-SFwjKod9.cjs.map → CopyButton-Bfte6TJF.cjs.map} +1 -1
  71. package/dist/{CopyButton-D4s8aeSE.js → CopyButton-CBk85MQ7.js} +5 -5
  72. package/dist/{CopyButton-D4s8aeSE.js.map → CopyButton-CBk85MQ7.js.map} +1 -1
  73. package/dist/{DashedButton-iM7kzopW.js → DashedButton-BpiG8rab.js} +3 -3
  74. package/dist/{DashedButton-iM7kzopW.js.map → DashedButton-BpiG8rab.js.map} +1 -1
  75. package/dist/{DashedButton-B7xodc3N.cjs → DashedButton-DZmgxLMO.cjs} +2 -2
  76. package/dist/{DashedButton-B7xodc3N.cjs.map → DashedButton-DZmgxLMO.cjs.map} +1 -1
  77. package/dist/{DatePicker-ENbn2Vab.cjs → DatePicker-DBiU4Mb6.cjs} +2 -2
  78. package/dist/{DatePicker-ENbn2Vab.cjs.map → DatePicker-DBiU4Mb6.cjs.map} +1 -1
  79. package/dist/{DatePicker-DGwjCHfd.js → DatePicker-eAzDnO2Y.js} +6 -6
  80. package/dist/{DatePicker-DGwjCHfd.js.map → DatePicker-eAzDnO2Y.js.map} +1 -1
  81. package/dist/{DateTimePicker-BQUmsFwX.cjs → DateTimePicker-CvaD8IkF.cjs} +2 -2
  82. package/dist/{DateTimePicker-BQUmsFwX.cjs.map → DateTimePicker-CvaD8IkF.cjs.map} +1 -1
  83. package/dist/{DateTimePicker-CwVkQiun.js → DateTimePicker-M2UBjFVc.js} +9 -9
  84. package/dist/{DateTimePicker-CwVkQiun.js.map → DateTimePicker-M2UBjFVc.js.map} +1 -1
  85. package/dist/{DescriptionList-0qjKr6GN.js → DescriptionList-BhsmdtS1.js} +64 -64
  86. package/dist/{DescriptionList-0qjKr6GN.js.map → DescriptionList-BhsmdtS1.js.map} +1 -1
  87. package/dist/DescriptionList-DQHNOTWl.cjs +2 -0
  88. package/dist/{DescriptionList-U5z2Faf4.cjs.map → DescriptionList-DQHNOTWl.cjs.map} +1 -1
  89. package/dist/{Dropdown-DNZ9S_zQ.cjs → Dropdown-BbaU1WDC.cjs} +2 -2
  90. package/dist/{Dropdown-DNZ9S_zQ.cjs.map → Dropdown-BbaU1WDC.cjs.map} +1 -1
  91. package/dist/{Dropdown--1mNTVZJ.js → Dropdown-BlmbYp1X.js} +2 -2
  92. package/dist/{Dropdown--1mNTVZJ.js.map → Dropdown-BlmbYp1X.js.map} +1 -1
  93. package/dist/{EmptyState-DwT9_HW7.js → EmptyState-2pA3XlOX.js} +4 -4
  94. package/dist/{EmptyState-DwT9_HW7.js.map → EmptyState-2pA3XlOX.js.map} +1 -1
  95. package/dist/{EmptyState-B2_4BN4l.cjs → EmptyState-ByBpy2vN.cjs} +2 -2
  96. package/dist/{EmptyState-B2_4BN4l.cjs.map → EmptyState-ByBpy2vN.cjs.map} +1 -1
  97. package/dist/{ErrorBoundary-CsDHKYB4.js → ErrorBoundary-B-37hGZW.js} +6 -6
  98. package/dist/{ErrorBoundary-CsDHKYB4.js.map → ErrorBoundary-B-37hGZW.js.map} +1 -1
  99. package/dist/{ErrorBoundary-CYSOAQlB.cjs → ErrorBoundary-gRGxeuM1.cjs} +2 -2
  100. package/dist/{ErrorBoundary-CYSOAQlB.cjs.map → ErrorBoundary-gRGxeuM1.cjs.map} +1 -1
  101. package/dist/{FileCard-B9f9RoXS.js → FileCard-BNfUAgsF.js} +5 -5
  102. package/dist/{FileCard-B9f9RoXS.js.map → FileCard-BNfUAgsF.js.map} +1 -1
  103. package/dist/{FileCard-zuUYik-F.cjs → FileCard-BYNJVmp0.cjs} +2 -2
  104. package/dist/{FileCard-zuUYik-F.cjs.map → FileCard-BYNJVmp0.cjs.map} +1 -1
  105. package/dist/{FileUploader-Y8hiyIpp.cjs → FileUploader-DdICa5UC.cjs} +2 -2
  106. package/dist/{FileUploader-Y8hiyIpp.cjs.map → FileUploader-DdICa5UC.cjs.map} +1 -1
  107. package/dist/{FileUploader-Dh2zA50t.js → FileUploader-TOWwDOSS.js} +6 -6
  108. package/dist/{FileUploader-Dh2zA50t.js.map → FileUploader-TOWwDOSS.js.map} +1 -1
  109. package/dist/{Flag-CmDXvd7j.js → Flag-DDR6OANA.js} +2 -2
  110. package/dist/{Flag-CmDXvd7j.js.map → Flag-DDR6OANA.js.map} +1 -1
  111. package/dist/{Flag-BpTQAgbD.cjs → Flag-DXPQ2t8z.cjs} +2 -2
  112. package/dist/{Flag-BpTQAgbD.cjs.map → Flag-DXPQ2t8z.cjs.map} +1 -1
  113. package/dist/FloatingPanel-C5c_eMQ0.js +135 -0
  114. package/dist/{FloatingPanel-CeSOtE_D.js.map → FloatingPanel-C5c_eMQ0.js.map} +1 -1
  115. package/dist/FloatingPanel-tGCG2nhA.cjs +2 -0
  116. package/dist/{FloatingPanel-BIC4WrFa.cjs.map → FloatingPanel-tGCG2nhA.cjs.map} +1 -1
  117. package/dist/{FullscreenToggle-CeGgw3z1.cjs → FullscreenToggle-BKo1lDSE.cjs} +2 -2
  118. package/dist/{FullscreenToggle-CeGgw3z1.cjs.map → FullscreenToggle-BKo1lDSE.cjs.map} +1 -1
  119. package/dist/{FullscreenToggle-2IYIS5KF.js → FullscreenToggle-DmH1541W.js} +4 -4
  120. package/dist/{FullscreenToggle-2IYIS5KF.js.map → FullscreenToggle-DmH1541W.js.map} +1 -1
  121. package/dist/Icon-BUP5_kRs.cjs +2 -0
  122. package/dist/Icon-BUP5_kRs.cjs.map +1 -0
  123. package/dist/{Icon-DaTvzLBu.js → Icon-CGQ5yGSZ.js} +4 -3
  124. package/dist/Icon-CGQ5yGSZ.js.map +1 -0
  125. package/dist/{IconButton-GU3Ud4Zg.js → IconButton-CL_6iMQh.js} +2 -2
  126. package/dist/{IconButton-GU3Ud4Zg.js.map → IconButton-CL_6iMQh.js.map} +1 -1
  127. package/dist/{IconButton-BNa0yLcv.cjs → IconButton-CvIXSFsr.cjs} +2 -2
  128. package/dist/{IconButton-BNa0yLcv.cjs.map → IconButton-CvIXSFsr.cjs.map} +1 -1
  129. package/dist/{List-CZwNGxuP.js → List-BLPB3-B8.js} +3 -3
  130. package/dist/{List-CZwNGxuP.js.map → List-BLPB3-B8.js.map} +1 -1
  131. package/dist/{List-9lUjapQ5.cjs → List-ah2PNWeY.cjs} +2 -2
  132. package/dist/{List-9lUjapQ5.cjs.map → List-ah2PNWeY.cjs.map} +1 -1
  133. package/dist/{Loader-Cpr9-OOZ.cjs → Loader-CI1j71X8.cjs} +2 -2
  134. package/dist/{Loader-Cpr9-OOZ.cjs.map → Loader-CI1j71X8.cjs.map} +1 -1
  135. package/dist/{Loader-C1uaCtx6.js → Loader-Czzb450N.js} +2 -2
  136. package/dist/{Loader-C1uaCtx6.js.map → Loader-Czzb450N.js.map} +1 -1
  137. package/dist/{Modal-DHP2R3K3.js → Modal-DMJMw6kT.js} +5 -5
  138. package/dist/{Modal-DHP2R3K3.js.map → Modal-DMJMw6kT.js.map} +1 -1
  139. package/dist/{Modal-DFeBHv-Q.cjs → Modal-DPObz0b-.cjs} +2 -2
  140. package/dist/{Modal-DFeBHv-Q.cjs.map → Modal-DPObz0b-.cjs.map} +1 -1
  141. package/dist/{MultiSelect-B-FPQ08c.js → MultiSelect-BTR6w5Ot.js} +5 -5
  142. package/dist/{MultiSelect-B-FPQ08c.js.map → MultiSelect-BTR6w5Ot.js.map} +1 -1
  143. package/dist/{MultiSelect-S5VG9g3l.cjs → MultiSelect-IDAJ5a5K.cjs} +2 -2
  144. package/dist/{MultiSelect-S5VG9g3l.cjs.map → MultiSelect-IDAJ5a5K.cjs.map} +1 -1
  145. package/dist/{NumberField-SSGXlF8U.cjs → NumberField-Cg0XEDgW.cjs} +2 -2
  146. package/dist/{NumberField-SSGXlF8U.cjs.map → NumberField-Cg0XEDgW.cjs.map} +1 -1
  147. package/dist/{NumberField-CzyvDMRV.js → NumberField-DlaW-g3Z.js} +4 -4
  148. package/dist/{NumberField-CzyvDMRV.js.map → NumberField-DlaW-g3Z.js.map} +1 -1
  149. package/dist/{OtpField-Pr7Ch0El.cjs → OtpField-DsedK1nQ.cjs} +2 -2
  150. package/dist/{OtpField-Pr7Ch0El.cjs.map → OtpField-DsedK1nQ.cjs.map} +1 -1
  151. package/dist/{OtpField-CMoJqcx1.js → OtpField-vxQuo-uR.js} +2 -2
  152. package/dist/{OtpField-CMoJqcx1.js.map → OtpField-vxQuo-uR.js.map} +1 -1
  153. package/dist/{PageLayout-BIMkjq-q.cjs → PageLayout-BPbjTYS3.cjs} +2 -2
  154. package/dist/{PageLayout-BIMkjq-q.cjs.map → PageLayout-BPbjTYS3.cjs.map} +1 -1
  155. package/dist/{PageLayout-Ctr-IEzX.js → PageLayout-Rk6KSxmn.js} +2 -2
  156. package/dist/{PageLayout-Ctr-IEzX.js.map → PageLayout-Rk6KSxmn.js.map} +1 -1
  157. package/dist/{PageNotFound-KKJTeaRF.js → PageNotFound-CBNhKZ9Y.js} +5 -5
  158. package/dist/{PageNotFound-KKJTeaRF.js.map → PageNotFound-CBNhKZ9Y.js.map} +1 -1
  159. package/dist/{PageNotFound-CnhBheI4.cjs → PageNotFound-PUQ1o9R4.cjs} +2 -2
  160. package/dist/{PageNotFound-CnhBheI4.cjs.map → PageNotFound-PUQ1o9R4.cjs.map} +1 -1
  161. package/dist/{Pagination-Oyms2ERd.js → Pagination-CNdkfXp2.js} +3 -3
  162. package/dist/{Pagination-Oyms2ERd.js.map → Pagination-CNdkfXp2.js.map} +1 -1
  163. package/dist/{Pagination-BD5WOW98.cjs → Pagination-DNGKNQy0.cjs} +2 -2
  164. package/dist/{Pagination-BD5WOW98.cjs.map → Pagination-DNGKNQy0.cjs.map} +1 -1
  165. package/dist/{PaletteField-CCQGW5LC.cjs → PaletteField-BSIF5jI6.cjs} +2 -2
  166. package/dist/{PaletteField-CCQGW5LC.cjs.map → PaletteField-BSIF5jI6.cjs.map} +1 -1
  167. package/dist/{PaletteField-BHzzzdou.js → PaletteField-Bp5Fgygh.js} +3 -3
  168. package/dist/{PaletteField-BHzzzdou.js.map → PaletteField-Bp5Fgygh.js.map} +1 -1
  169. package/dist/{PhoneField-5zGY4Wko.cjs → PhoneField-BMhZeZkW.cjs} +2 -2
  170. package/dist/{PhoneField-5zGY4Wko.cjs.map → PhoneField-BMhZeZkW.cjs.map} +1 -1
  171. package/dist/{PhoneField-CBfmChPx.js → PhoneField-BdmvslXQ.js} +5 -5
  172. package/dist/{PhoneField-CBfmChPx.js.map → PhoneField-BdmvslXQ.js.map} +1 -1
  173. package/dist/{Popconfirm-BtGDhqrc.js → Popconfirm-Cyaeybtj.js} +6 -6
  174. package/dist/{Popconfirm-BtGDhqrc.js.map → Popconfirm-Cyaeybtj.js.map} +1 -1
  175. package/dist/{Popconfirm-CkBdntxV.cjs → Popconfirm-IhlIINtZ.cjs} +2 -2
  176. package/dist/{Popconfirm-CkBdntxV.cjs.map → Popconfirm-IhlIINtZ.cjs.map} +1 -1
  177. package/dist/{Popover-DAT6DcM9.cjs → Popover-DsYUT23r.cjs} +2 -2
  178. package/dist/{Popover-DAT6DcM9.cjs.map → Popover-DsYUT23r.cjs.map} +1 -1
  179. package/dist/{Popover-B82Id9Ut.js → Popover-WaVH3jsN.js} +2 -2
  180. package/dist/{Popover-B82Id9Ut.js.map → Popover-WaVH3jsN.js.map} +1 -1
  181. package/dist/{Progress-Bwxx71Ns.cjs → Progress-CAY1p06_.cjs} +2 -2
  182. package/dist/{Progress-Bwxx71Ns.cjs.map → Progress-CAY1p06_.cjs.map} +1 -1
  183. package/dist/{Progress-pTbaOSDd.js → Progress-T7PLrJ0Y.js} +2 -2
  184. package/dist/{Progress-pTbaOSDd.js.map → Progress-T7PLrJ0Y.js.map} +1 -1
  185. package/dist/{QueryError-C01oichG.cjs → QueryError-DP22IUnp.cjs} +2 -2
  186. package/dist/{QueryError-C01oichG.cjs.map → QueryError-DP22IUnp.cjs.map} +1 -1
  187. package/dist/{QueryError-Bu_MNGek.js → QueryError-Dtspj9l4.js} +2 -2
  188. package/dist/{QueryError-Bu_MNGek.js.map → QueryError-Dtspj9l4.js.map} +1 -1
  189. package/dist/RadioGroup-CTAayuMv.js +142 -0
  190. package/dist/RadioGroup-CTAayuMv.js.map +1 -0
  191. package/dist/RadioGroup-CvC2yc4p.cjs +2 -0
  192. package/dist/RadioGroup-CvC2yc4p.cjs.map +1 -0
  193. package/dist/{RemoveDialog-Bm2mJB3l.cjs → RemoveDialog-D12B4x80.cjs} +2 -2
  194. package/dist/{RemoveDialog-Bm2mJB3l.cjs.map → RemoveDialog-D12B4x80.cjs.map} +1 -1
  195. package/dist/{RemoveDialog-C2uJzWi-.js → RemoveDialog-DdGsqaWV.js} +6 -6
  196. package/dist/{RemoveDialog-C2uJzWi-.js.map → RemoveDialog-DdGsqaWV.js.map} +1 -1
  197. package/dist/RichTextEditor-BVXY25sz.cjs +2 -0
  198. package/dist/RichTextEditor-BVXY25sz.cjs.map +1 -0
  199. package/dist/RichTextEditor-DL4y5xVv.js +916 -0
  200. package/dist/RichTextEditor-DL4y5xVv.js.map +1 -0
  201. package/dist/RootLayout-BK3t6Mm0.js +604 -0
  202. package/dist/RootLayout-BK3t6Mm0.js.map +1 -0
  203. package/dist/RootLayout-DDuzPlJe.cjs +2 -0
  204. package/dist/RootLayout-DDuzPlJe.cjs.map +1 -0
  205. package/dist/{Select-CVVJKAtS.cjs → Select-DlFDOZtn.cjs} +2 -2
  206. package/dist/{Select-CVVJKAtS.cjs.map → Select-DlFDOZtn.cjs.map} +1 -1
  207. package/dist/{Select-d9LDI8O3.js → Select-tVI_qer3.js} +5 -5
  208. package/dist/{Select-d9LDI8O3.js.map → Select-tVI_qer3.js.map} +1 -1
  209. package/dist/{Sidebar-BgCfnZBF.js → Sidebar-CjrD3nNp.js} +7 -6
  210. package/dist/Sidebar-CjrD3nNp.js.map +1 -0
  211. package/dist/Sidebar-gB-X4VLX.cjs +2 -0
  212. package/dist/Sidebar-gB-X4VLX.cjs.map +1 -0
  213. package/dist/{SpeedDial-CEr2JWQb.cjs → SpeedDial-BIOkkLKO.cjs} +2 -2
  214. package/dist/{SpeedDial-CEr2JWQb.cjs.map → SpeedDial-BIOkkLKO.cjs.map} +1 -1
  215. package/dist/{SpeedDial-CBVwgnFp.js → SpeedDial-xQr4JH0x.js} +5 -5
  216. package/dist/{SpeedDial-CBVwgnFp.js.map → SpeedDial-xQr4JH0x.js.map} +1 -1
  217. package/dist/Stepper-CBdhvPoz.cjs +2 -0
  218. package/dist/Stepper-CBdhvPoz.cjs.map +1 -0
  219. package/dist/Stepper-CkYcIc15.js +169 -0
  220. package/dist/Stepper-CkYcIc15.js.map +1 -0
  221. package/dist/{SwatchPicker-Bpxk0IOe.js → SwatchPicker-BAKslSY4.js} +2 -2
  222. package/dist/{SwatchPicker-Bpxk0IOe.js.map → SwatchPicker-BAKslSY4.js.map} +1 -1
  223. package/dist/{SwatchPicker-BWXqgsEy.cjs → SwatchPicker-CpwVq0xp.cjs} +2 -2
  224. package/dist/{SwatchPicker-BWXqgsEy.cjs.map → SwatchPicker-CpwVq0xp.cjs.map} +1 -1
  225. package/dist/Table-CwQKfXGn.js +1210 -0
  226. package/dist/Table-CwQKfXGn.js.map +1 -0
  227. package/dist/Table-Cwxqo7Br.cjs +2 -0
  228. package/dist/Table-Cwxqo7Br.cjs.map +1 -0
  229. package/dist/Tabs-651xbRe4.cjs +2 -0
  230. package/dist/Tabs-651xbRe4.cjs.map +1 -0
  231. package/dist/Tabs-Bztnezt9.js +194 -0
  232. package/dist/Tabs-Bztnezt9.js.map +1 -0
  233. package/dist/{TagsField-DcuSn7wL.cjs → TagsField-B7ZARHzD.cjs} +2 -2
  234. package/dist/{TagsField-DcuSn7wL.cjs.map → TagsField-B7ZARHzD.cjs.map} +1 -1
  235. package/dist/{TagsField-DuQEFHZ3.js → TagsField-CdymON69.js} +5 -5
  236. package/dist/{TagsField-DuQEFHZ3.js.map → TagsField-CdymON69.js.map} +1 -1
  237. package/dist/{TextField-E85pvJQC.cjs → TextField-B22NRQ91.cjs} +2 -2
  238. package/dist/{TextField-E85pvJQC.cjs.map → TextField-B22NRQ91.cjs.map} +1 -1
  239. package/dist/{TextField-SGYWviFf.js → TextField-DkaYK1DI.js} +4 -4
  240. package/dist/{TextField-SGYWviFf.js.map → TextField-DkaYK1DI.js.map} +1 -1
  241. package/dist/{ThemeToggle-BdlxzYNt.cjs → ThemeToggle-D5dWHQFb.cjs} +2 -2
  242. package/dist/{ThemeToggle-BdlxzYNt.cjs.map → ThemeToggle-D5dWHQFb.cjs.map} +1 -1
  243. package/dist/{ThemeToggle-C2kjFrD_.js → ThemeToggle-DqzUvcK5.js} +4 -4
  244. package/dist/{ThemeToggle-C2kjFrD_.js.map → ThemeToggle-DqzUvcK5.js.map} +1 -1
  245. package/dist/{TimeColumns-BS1d0qOp.js → TimeColumns-BEoHh961.js} +2 -2
  246. package/dist/{TimeColumns-BS1d0qOp.js.map → TimeColumns-BEoHh961.js.map} +1 -1
  247. package/dist/{TimeColumns-D7-O4Qyt.cjs → TimeColumns-o2xhvSGE.cjs} +2 -2
  248. package/dist/{TimeColumns-D7-O4Qyt.cjs.map → TimeColumns-o2xhvSGE.cjs.map} +1 -1
  249. package/dist/{TimePicker-Dzb3gycP.cjs → TimePicker-CACmHwNn.cjs} +2 -2
  250. package/dist/{TimePicker-Dzb3gycP.cjs.map → TimePicker-CACmHwNn.cjs.map} +1 -1
  251. package/dist/{TimePicker-DlzYNDN1.js → TimePicker-DCryZCmh.js} +7 -7
  252. package/dist/{TimePicker-DlzYNDN1.js.map → TimePicker-DCryZCmh.js.map} +1 -1
  253. package/dist/{Timeline-CKEosWka.cjs → Timeline-CMP93APm.cjs} +2 -2
  254. package/dist/{Timeline-CKEosWka.cjs.map → Timeline-CMP93APm.cjs.map} +1 -1
  255. package/dist/{Timeline-ufVXmpMY.js → Timeline-Dri2dPsK.js} +3 -3
  256. package/dist/{Timeline-ufVXmpMY.js.map → Timeline-Dri2dPsK.js.map} +1 -1
  257. package/dist/{Toaster-Cummylmj.cjs → Toaster-BwREV06e.cjs} +2 -2
  258. package/dist/{Toaster-Cummylmj.cjs.map → Toaster-BwREV06e.cjs.map} +1 -1
  259. package/dist/{Toaster-cu5XyKeE.js → Toaster-DwVLab3k.js} +2 -2
  260. package/dist/{Toaster-cu5XyKeE.js.map → Toaster-DwVLab3k.js.map} +1 -1
  261. package/dist/{ToggleButtonGroup-D9odYMzD.js → ToggleButtonGroup-BtVDnQIF.js} +3 -3
  262. package/dist/{ToggleButtonGroup-D9odYMzD.js.map → ToggleButtonGroup-BtVDnQIF.js.map} +1 -1
  263. package/dist/{ToggleButtonGroup-M2oj_3mc.cjs → ToggleButtonGroup-UylpGJ16.cjs} +2 -2
  264. package/dist/{ToggleButtonGroup-M2oj_3mc.cjs.map → ToggleButtonGroup-UylpGJ16.cjs.map} +1 -1
  265. package/dist/Tooltip-Bw-1Xk2Z.cjs +2 -0
  266. package/dist/Tooltip-Bw-1Xk2Z.cjs.map +1 -0
  267. package/dist/Tooltip-DsDv4NOq.js +135 -0
  268. package/dist/Tooltip-DsDv4NOq.js.map +1 -0
  269. package/dist/{TranslatedFields-Ccjhq2YL.js → TranslatedFields-B0LMXgiu.js} +5 -5
  270. package/dist/{TranslatedFields-Ccjhq2YL.js.map → TranslatedFields-B0LMXgiu.js.map} +1 -1
  271. package/dist/{TranslatedFields-CbTlgKnh.cjs → TranslatedFields-sio1Qfy7.cjs} +2 -2
  272. package/dist/{TranslatedFields-CbTlgKnh.cjs.map → TranslatedFields-sio1Qfy7.cjs.map} +1 -1
  273. package/dist/{UserCard-Bs8kuV2j.js → UserCard-B5FVcJaK.js} +5 -5
  274. package/dist/{UserCard-Bs8kuV2j.js.map → UserCard-B5FVcJaK.js.map} +1 -1
  275. package/dist/{UserCard-BfHHfkDr.cjs → UserCard-Dzc4zmPj.cjs} +2 -2
  276. package/dist/{UserCard-BfHHfkDr.cjs.map → UserCard-Dzc4zmPj.cjs.map} +1 -1
  277. package/dist/app/AdminRoot.d.cts +7 -2
  278. package/dist/app/AdminRoot.d.ts +7 -2
  279. package/dist/components/Accordion/index.cjs +1 -1
  280. package/dist/components/Accordion/index.js +1 -1
  281. package/dist/components/Alert/index.cjs +1 -1
  282. package/dist/components/Alert/index.js +1 -1
  283. package/dist/components/AuthLayout/index.cjs +1 -1
  284. package/dist/components/AuthLayout/index.js +1 -1
  285. package/dist/components/Avatar/index.cjs +1 -1
  286. package/dist/components/Avatar/index.js +2 -2
  287. package/dist/components/Breadcrumbs/index.cjs +1 -1
  288. package/dist/components/Breadcrumbs/index.js +1 -1
  289. package/dist/components/Button/index.cjs +1 -1
  290. package/dist/components/Button/index.js +1 -1
  291. package/dist/components/Card/Card.d.cts +9 -1
  292. package/dist/components/Card/Card.d.ts +9 -1
  293. package/dist/components/Card/index.cjs +1 -1
  294. package/dist/components/Card/index.js +1 -1
  295. package/dist/components/Chip/index.cjs +1 -1
  296. package/dist/components/Chip/index.js +1 -1
  297. package/dist/components/ChoiceCard/index.cjs +1 -1
  298. package/dist/components/ChoiceCard/index.js +1 -1
  299. package/dist/components/CodeBlock/index.cjs +1 -1
  300. package/dist/components/CodeBlock/index.js +1 -1
  301. package/dist/components/ColorPicker/index.cjs +1 -1
  302. package/dist/components/ColorPicker/index.js +1 -1
  303. package/dist/components/ColorRamp/index.cjs +1 -1
  304. package/dist/components/ColorRamp/index.js +1 -1
  305. package/dist/components/CopyButton/index.cjs +1 -1
  306. package/dist/components/CopyButton/index.js +1 -1
  307. package/dist/components/DashedButton/index.cjs +1 -1
  308. package/dist/components/DashedButton/index.js +1 -1
  309. package/dist/components/DatePicker/index.cjs +1 -1
  310. package/dist/components/DatePicker/index.js +1 -1
  311. package/dist/components/DateTimePicker/index.cjs +1 -1
  312. package/dist/components/DateTimePicker/index.js +1 -1
  313. package/dist/components/DescriptionList/index.cjs +1 -1
  314. package/dist/components/DescriptionList/index.js +1 -1
  315. package/dist/components/Dropdown/index.cjs +1 -1
  316. package/dist/components/Dropdown/index.js +1 -1
  317. package/dist/components/EmptyState/index.cjs +1 -1
  318. package/dist/components/EmptyState/index.js +1 -1
  319. package/dist/components/ErrorState/index.cjs +1 -1
  320. package/dist/components/ErrorState/index.js +2 -2
  321. package/dist/components/FileCard/index.cjs +1 -1
  322. package/dist/components/FileCard/index.js +1 -1
  323. package/dist/components/FileUploader/index.cjs +1 -1
  324. package/dist/components/FileUploader/index.js +1 -1
  325. package/dist/components/Flag/index.cjs +1 -1
  326. package/dist/components/Flag/index.js +1 -1
  327. package/dist/components/FullscreenToggle/index.cjs +1 -1
  328. package/dist/components/FullscreenToggle/index.js +1 -1
  329. package/dist/components/Icon/index.cjs +1 -1
  330. package/dist/components/Icon/index.js +2 -2
  331. package/dist/components/IconButton/index.cjs +1 -1
  332. package/dist/components/IconButton/index.js +1 -1
  333. package/dist/components/List/index.cjs +1 -1
  334. package/dist/components/List/index.js +1 -1
  335. package/dist/components/Loader/index.cjs +1 -1
  336. package/dist/components/Loader/index.js +1 -1
  337. package/dist/components/Modal/index.cjs +1 -1
  338. package/dist/components/Modal/index.js +1 -1
  339. package/dist/components/MultiSelect/index.cjs +1 -1
  340. package/dist/components/MultiSelect/index.js +1 -1
  341. package/dist/components/NumberField/index.cjs +1 -1
  342. package/dist/components/NumberField/index.js +1 -1
  343. package/dist/components/OtpField/index.cjs +1 -1
  344. package/dist/components/OtpField/index.js +1 -1
  345. package/dist/components/PageLayout/index.cjs +1 -1
  346. package/dist/components/PageLayout/index.js +1 -1
  347. package/dist/components/PageNotFound/index.cjs +1 -1
  348. package/dist/components/PageNotFound/index.js +1 -1
  349. package/dist/components/Pagination/index.cjs +1 -1
  350. package/dist/components/Pagination/index.js +1 -1
  351. package/dist/components/PaletteField/index.cjs +1 -1
  352. package/dist/components/PaletteField/index.js +1 -1
  353. package/dist/components/PhoneField/index.cjs +1 -1
  354. package/dist/components/PhoneField/index.js +1 -1
  355. package/dist/components/Popconfirm/index.cjs +1 -1
  356. package/dist/components/Popconfirm/index.js +1 -1
  357. package/dist/components/Popover/index.cjs +1 -1
  358. package/dist/components/Popover/index.js +1 -1
  359. package/dist/components/Progress/index.cjs +1 -1
  360. package/dist/components/Progress/index.js +1 -1
  361. package/dist/components/Radio/RadioGroup.d.cts +1 -1
  362. package/dist/components/Radio/RadioGroup.d.ts +1 -1
  363. package/dist/components/Radio/index.cjs +1 -1
  364. package/dist/components/Radio/index.js +1 -1
  365. package/dist/components/RemoveDialog/index.cjs +1 -1
  366. package/dist/components/RemoveDialog/index.js +1 -1
  367. package/dist/components/RichTextEditor/RichTextEditor.d.cts +16 -1
  368. package/dist/components/RichTextEditor/RichTextEditor.d.ts +16 -1
  369. package/dist/components/RichTextEditor/index.cjs +1 -1
  370. package/dist/components/RichTextEditor/index.js +1 -1
  371. package/dist/components/RootLayout/RootLayout.d.cts +8 -1
  372. package/dist/components/RootLayout/RootLayout.d.ts +8 -1
  373. package/dist/components/RootLayout/SettingsDrawer.d.cts +4 -1
  374. package/dist/components/RootLayout/SettingsDrawer.d.ts +4 -1
  375. package/dist/components/RootLayout/index.cjs +1 -1
  376. package/dist/components/RootLayout/index.js +1 -1
  377. package/dist/components/Select/index.cjs +1 -1
  378. package/dist/components/Select/index.js +1 -1
  379. package/dist/components/Sidebar/Sidebar.d.cts +2 -0
  380. package/dist/components/Sidebar/Sidebar.d.ts +2 -0
  381. package/dist/components/Sidebar/index.cjs +1 -1
  382. package/dist/components/Sidebar/index.js +1 -1
  383. package/dist/components/SpeedDial/index.cjs +1 -1
  384. package/dist/components/SpeedDial/index.js +1 -1
  385. package/dist/components/Stepper/Stepper.d.cts +8 -1
  386. package/dist/components/Stepper/Stepper.d.ts +8 -1
  387. package/dist/components/Stepper/index.cjs +1 -1
  388. package/dist/components/Stepper/index.js +1 -1
  389. package/dist/components/SwatchPicker/index.cjs +1 -1
  390. package/dist/components/SwatchPicker/index.js +1 -1
  391. package/dist/components/Table/Table.d.cts +20 -3
  392. package/dist/components/Table/Table.d.ts +20 -3
  393. package/dist/components/Table/index.cjs +1 -1
  394. package/dist/components/Table/index.js +1 -1
  395. package/dist/components/Table/tableFilter.d.cts +12 -2
  396. package/dist/components/Table/tableFilter.d.ts +12 -2
  397. package/dist/components/Tabs/Tabs.d.cts +8 -1
  398. package/dist/components/Tabs/Tabs.d.ts +8 -1
  399. package/dist/components/Tabs/index.cjs +1 -1
  400. package/dist/components/Tabs/index.js +1 -1
  401. package/dist/components/TagsField/index.cjs +1 -1
  402. package/dist/components/TagsField/index.js +1 -1
  403. package/dist/components/TextField/index.cjs +1 -1
  404. package/dist/components/TextField/index.js +1 -1
  405. package/dist/components/ThemeToggle/index.cjs +1 -1
  406. package/dist/components/ThemeToggle/index.js +1 -1
  407. package/dist/components/TimePicker/index.cjs +1 -1
  408. package/dist/components/TimePicker/index.js +1 -1
  409. package/dist/components/Timeline/index.cjs +1 -1
  410. package/dist/components/Timeline/index.js +1 -1
  411. package/dist/components/Toast/index.cjs +1 -1
  412. package/dist/components/Toast/index.js +1 -1
  413. package/dist/components/ToggleButton/index.cjs +1 -1
  414. package/dist/components/ToggleButton/index.js +1 -1
  415. package/dist/components/Tooltip/Tooltip.d.cts +10 -3
  416. package/dist/components/Tooltip/Tooltip.d.ts +10 -3
  417. package/dist/components/Tooltip/index.cjs +1 -1
  418. package/dist/components/Tooltip/index.js +1 -1
  419. package/dist/components/TranslatedFields/index.cjs +1 -1
  420. package/dist/components/TranslatedFields/index.js +1 -1
  421. package/dist/components/UserCard/index.cjs +1 -1
  422. package/dist/components/UserCard/index.js +1 -1
  423. package/dist/entries/app.cjs +1 -1
  424. package/dist/entries/app.js +1 -1
  425. package/dist/entries/components.cjs +1 -1
  426. package/dist/entries/components.js +64 -64
  427. package/dist/entries/hooks.cjs +1 -1
  428. package/dist/entries/hooks.d.cts +2 -0
  429. package/dist/entries/hooks.d.ts +2 -0
  430. package/dist/entries/hooks.js +9 -8
  431. package/dist/entries/i18n.cjs +1 -1
  432. package/dist/entries/i18n.js +2 -2
  433. package/dist/entries/icons.cjs +1 -1
  434. package/dist/entries/icons.js +2 -2
  435. package/dist/entries/theme.cjs +1 -1
  436. package/dist/entries/theme.d.cts +1 -1
  437. package/dist/entries/theme.d.ts +1 -1
  438. package/dist/entries/theme.js +1 -1
  439. package/dist/hooks/index.d.cts +2 -0
  440. package/dist/hooks/index.d.ts +2 -0
  441. package/dist/hooks/useClearUrlOnUnmount.d.cts +19 -0
  442. package/dist/hooks/useClearUrlOnUnmount.d.ts +19 -0
  443. package/dist/hooks/useQueryModal.d.cts +40 -0
  444. package/dist/hooks/useQueryModal.d.ts +40 -0
  445. package/dist/i18n/messages.d.cts +12 -0
  446. package/dist/i18n/messages.d.ts +12 -0
  447. package/dist/icons/names.d.cts +3 -3
  448. package/dist/icons/names.d.ts +3 -3
  449. package/dist/index.cjs +1 -1
  450. package/dist/index.css +1 -1
  451. package/dist/index.js +251 -250
  452. package/dist/{messages-FiUqCKjJ.cjs → messages-DS38X5W2.cjs} +9 -9
  453. package/dist/messages-DS38X5W2.cjs.map +1 -0
  454. package/dist/{messages-DCefu6Pn.js → messages-DswDgGe2.js} +52 -10
  455. package/dist/messages-DswDgGe2.js.map +1 -0
  456. package/dist/{names-r21QPjcU.js → names-BR1uJs0-.js} +5 -4
  457. package/dist/names-BR1uJs0-.js.map +1 -0
  458. package/dist/names-YOCJ4B5J.cjs +2 -0
  459. package/dist/names-YOCJ4B5J.cjs.map +1 -0
  460. package/dist/theme/ConfigProvider.d.cts +48 -0
  461. package/dist/theme/ConfigProvider.d.ts +48 -0
  462. package/dist/theme/index.d.cts +1 -1
  463. package/dist/theme/index.d.ts +1 -1
  464. package/dist/useClearUrlOnUnmount-Cg7v2y5B.cjs +2 -0
  465. package/dist/useClearUrlOnUnmount-Cg7v2y5B.cjs.map +1 -0
  466. package/dist/useClearUrlOnUnmount-DOeh6CUN.js +37 -0
  467. package/dist/useClearUrlOnUnmount-DOeh6CUN.js.map +1 -0
  468. package/dist/useForm-CGbJ44Gp.js +194 -0
  469. package/dist/useForm-CGbJ44Gp.js.map +1 -0
  470. package/dist/useForm-CSw6r1n1.cjs +2 -0
  471. package/dist/useForm-CSw6r1n1.cjs.map +1 -0
  472. package/dist/{useOptionMenu-BoWyPgbY.cjs → useOptionMenu-BYeSUee6.cjs} +2 -2
  473. package/dist/{useOptionMenu-BoWyPgbY.cjs.map → useOptionMenu-BYeSUee6.cjs.map} +1 -1
  474. package/dist/{useOptionMenu-D7EbYG9A.js → useOptionMenu-DtTvY9EC.js} +6 -6
  475. package/dist/{useOptionMenu-D7EbYG9A.js.map → useOptionMenu-DtTvY9EC.js.map} +1 -1
  476. package/package.json +1 -1
  477. package/dist/AdminRoot-9HGp3Mds.js +0 -55
  478. package/dist/AdminRoot-9HGp3Mds.js.map +0 -1
  479. package/dist/AdminRoot-D24UJ-4a.cjs +0 -2
  480. package/dist/AdminRoot-D24UJ-4a.cjs.map +0 -1
  481. package/dist/Card-CUUh4mlB.cjs +0 -2
  482. package/dist/Card-CUUh4mlB.cjs.map +0 -1
  483. package/dist/Card-MxYfQTOY.js +0 -121
  484. package/dist/Card-MxYfQTOY.js.map +0 -1
  485. package/dist/ConfigProvider-BbsI15b-.js +0 -320
  486. package/dist/ConfigProvider-BbsI15b-.js.map +0 -1
  487. package/dist/ConfigProvider-ByLHqXpv.cjs +0 -2
  488. package/dist/ConfigProvider-ByLHqXpv.cjs.map +0 -1
  489. package/dist/DescriptionList-U5z2Faf4.cjs +0 -2
  490. package/dist/FloatingPanel-BIC4WrFa.cjs +0 -2
  491. package/dist/FloatingPanel-CeSOtE_D.js +0 -135
  492. package/dist/Icon-BVULqOJD.cjs +0 -2
  493. package/dist/Icon-BVULqOJD.cjs.map +0 -1
  494. package/dist/Icon-DaTvzLBu.js.map +0 -1
  495. package/dist/RadioGroup-BcFBdFhh.cjs +0 -2
  496. package/dist/RadioGroup-BcFBdFhh.cjs.map +0 -1
  497. package/dist/RadioGroup-dVx_hMCY.js +0 -141
  498. package/dist/RadioGroup-dVx_hMCY.js.map +0 -1
  499. package/dist/RichTextEditor-BDAWmQrN.js +0 -806
  500. package/dist/RichTextEditor-BDAWmQrN.js.map +0 -1
  501. package/dist/RichTextEditor-D4HpPT3C.cjs +0 -2
  502. package/dist/RichTextEditor-D4HpPT3C.cjs.map +0 -1
  503. package/dist/RootLayout-CxncyjCz.js +0 -515
  504. package/dist/RootLayout-CxncyjCz.js.map +0 -1
  505. package/dist/RootLayout-XEcU_MBs.cjs +0 -2
  506. package/dist/RootLayout-XEcU_MBs.cjs.map +0 -1
  507. package/dist/Sidebar-B8ecHwZr.cjs +0 -2
  508. package/dist/Sidebar-B8ecHwZr.cjs.map +0 -1
  509. package/dist/Sidebar-BgCfnZBF.js.map +0 -1
  510. package/dist/Stepper-DOSc03YV.cjs +0 -2
  511. package/dist/Stepper-DOSc03YV.cjs.map +0 -1
  512. package/dist/Stepper-DtYamv1q.js +0 -165
  513. package/dist/Stepper-DtYamv1q.js.map +0 -1
  514. package/dist/Table-AzNzUAkl.js +0 -1170
  515. package/dist/Table-AzNzUAkl.js.map +0 -1
  516. package/dist/Table-CrpWhZUg.cjs +0 -2
  517. package/dist/Table-CrpWhZUg.cjs.map +0 -1
  518. package/dist/Tabs-CMnLXRjA.cjs +0 -2
  519. package/dist/Tabs-CMnLXRjA.cjs.map +0 -1
  520. package/dist/Tabs-D1RGhKsa.js +0 -190
  521. package/dist/Tabs-D1RGhKsa.js.map +0 -1
  522. package/dist/Tooltip-Ao7az09p.cjs +0 -2
  523. package/dist/Tooltip-Ao7az09p.cjs.map +0 -1
  524. package/dist/Tooltip-Cb_FKxT9.js +0 -65
  525. package/dist/Tooltip-Cb_FKxT9.js.map +0 -1
  526. package/dist/messages-DCefu6Pn.js.map +0 -1
  527. package/dist/messages-FiUqCKjJ.cjs.map +0 -1
  528. package/dist/names-BJnFU_5m.cjs +0 -2
  529. package/dist/names-BJnFU_5m.cjs.map +0 -1
  530. package/dist/names-r21QPjcU.js.map +0 -1
  531. package/dist/useForm-CN-qCrP7.js +0 -144
  532. package/dist/useForm-CN-qCrP7.js.map +0 -1
  533. package/dist/useForm-WvV361y6.cjs +0 -2
  534. package/dist/useForm-WvV361y6.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingPanel-CeSOtE_D.js","sources":["../src/hooks/useFloatingPanel.ts","../src/components/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react'\nimport { useLockBodyScroll } from './useLockBodyScroll'\n\n/** Geometry computed for a floating panel anchored to a trigger. */\nexport interface FloatingPanelPosition {\n top: number\n left: number\n width: number\n side: 'top' | 'bottom'\n maxHeight: number\n}\n\nconst VIEWPORT_PADDING = 8\nconst OFFSET = 6\n\nexport interface UseFloatingPanelOptions {\n /** Whether the panel is open. */\n open: boolean\n /** Ref to the anchor/trigger element. */\n triggerRef: RefObject<HTMLElement | null>\n /**\n * Horizontal alignment to the trigger: `start` (panel's left edge at the trigger's left — grows\n * right, the default) or `end` (panel's right edge at the trigger's right — grows left).\n */\n align?: 'start' | 'end'\n /**\n * Dismiss request. Outside-pointerdown passes whether focus was parked inside the panel (so the\n * consumer can restore focus to the trigger); Escape passes `true`.\n */\n onClose: (refocus: boolean) => void\n}\n\nexport interface UseFloatingPanelResult {\n /** Attach to the portaled panel element. */\n popoverRef: RefObject<HTMLDivElement | null>\n /** Computed geometry (null until first measured). */\n position: FloatingPanelPosition | null\n /** Enter-animation flag (rAF-driven once open). */\n visible: boolean\n /** Force a re-measure (rarely needed — scroll/resize/ResizeObserver already drive it). */\n reposition: () => void\n}\n\n/**\n * Shared floating-panel plumbing — a `<body>`-portaled panel that opens below its trigger (flips above\n * only when it would overflow), exposes the trigger width (for select-like matching), clamps to the\n * viewport, re-positions on scroll/resize (+ `ResizeObserver`), locks page scroll while open, and\n * dismisses on outside-pointerdown / `Escape`. The consumer owns the trigger ref, the `open` state, and\n * the `onClose` cleanup; this hook owns the panel ref, geometry, the enter-animation flag, and the\n * listeners. Wrapped by the internal `FloatingPanel` component, which every popover in the library\n * (`Select` / `MultiSelect`, the date/time pickers, `ColorPicker`) renders. Internal (not public).\n */\nexport function useFloatingPanel({\n open,\n triggerRef,\n align = 'start',\n onClose,\n}: UseFloatingPanelOptions): UseFloatingPanelResult {\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [position, setPosition] = useState<FloatingPanelPosition | null>(null)\n const [visible, setVisible] = useState(false)\n\n useLockBodyScroll(open)\n\n const reposition = useCallback(() => {\n const trigger = triggerRef.current\n const panel = popoverRef.current\n if (!trigger || !panel) return\n const rect = trigger.getBoundingClientRect()\n const panelH = panel.offsetHeight\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n const spaceBelow = vh - rect.bottom - OFFSET - VIEWPORT_PADDING\n const spaceAbove = rect.top - OFFSET - VIEWPORT_PADDING\n // prefer below; flip up only when below can't fit AND above has more room\n let side: 'top' | 'bottom' = 'bottom'\n if (panelH > spaceBelow && spaceAbove > spaceBelow) side = 'top'\n\n const maxHeight = Math.max(0, side === 'bottom' ? spaceBelow : spaceAbove)\n const usedH = Math.min(panelH, maxHeight)\n let top = side === 'bottom' ? rect.bottom + OFFSET : rect.top - OFFSET - usedH\n top = Math.min(\n Math.max(top, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vh - VIEWPORT_PADDING - usedH),\n )\n // clamp using the panel's actual width (a panel can be wider than its trigger, e.g. a calendar);\n // `width` returns the trigger width for consumers that match it (Select/MultiSelect).\n const panelW = panel.offsetWidth\n // `end` pins the panel's right edge to the trigger's right (grows left); `start` pins left (grows right)\n const baseLeft = align === 'end' ? rect.right - panelW : rect.left\n const left = Math.min(\n Math.max(baseLeft, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vw - VIEWPORT_PADDING - panelW),\n )\n setPosition({ top, left, width: rect.width, side, maxHeight })\n }, [triggerRef, align])\n\n useLayoutEffect(() => {\n if (!open) {\n setVisible(false)\n return\n }\n reposition()\n }, [open, reposition])\n\n useEffect(() => {\n if (!open) return\n const raf = requestAnimationFrame(() => setVisible(true))\n const onReposition = () => reposition()\n window.addEventListener('resize', onReposition)\n window.addEventListener('scroll', onReposition, true)\n let ro: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(onReposition)\n if (popoverRef.current) ro.observe(popoverRef.current)\n if (triggerRef.current) ro.observe(triggerRef.current)\n }\n return () => {\n cancelAnimationFrame(raf)\n window.removeEventListener('resize', onReposition)\n window.removeEventListener('scroll', onReposition, true)\n ro?.disconnect()\n }\n }, [open, reposition, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const onPointerDown = (e: PointerEvent) => {\n const t = e.target as Node\n if (triggerRef.current?.contains(t) || popoverRef.current?.contains(t)) return\n // restore focus to the trigger only if it was parked inside the panel (e.g. a search box)\n onClose(!!popoverRef.current?.contains(document.activeElement))\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose(true)\n }\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKey)\n }\n }, [open, onClose, triggerRef])\n\n return { popoverRef, position, visible, reposition }\n}\n","import {\n forwardRef,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { clsx } from 'clsx'\nimport { useFloatingPanel } from '../../hooks/useFloatingPanel'\nimport styles from './FloatingPanel.module.css'\n\nexport interface FloatingPanelProps {\n /** Whether the panel is open — gates the portal and drives the enter animation. */\n open: boolean\n /** Ref to the anchor/trigger element the panel is positioned against. */\n triggerRef: RefObject<HTMLElement | null>\n /** Horizontal alignment to the trigger: `start` (default, grows right) or `end` (grows left). */\n align?: 'start' | 'end'\n /** Dismiss request: outside-pointerdown (arg = restore focus to the trigger?) or Escape (`true`). */\n onClose: (refocus: boolean) => void\n /** `id` for the panel element — pair with the trigger's `aria-controls`. */\n id?: string\n /** ARIA role for the panel element (e.g. `'dialog'`). Omit for a plain wrapper (e.g. around a listbox). */\n role?: string\n /** Accessible label, paired with `role`. */\n ariaLabel?: string\n /** `id` of the element that labels the panel (instead of `ariaLabel`). */\n ariaLabelledBy?: string\n /** `id` of the element that describes the panel. */\n ariaDescribedBy?: string\n /** Trap Tab focus inside the panel + mark it `aria-modal` (for modal dialogs like the date pickers). */\n trapFocus?: boolean\n /** Constrain the panel to the trigger's width (select-like). */\n matchTriggerWidth?: boolean\n /** Fixed panel width (px number or any CSS width). Wins over `matchTriggerWidth`. */\n width?: number | string\n /** Class(es) for the panel element, merged after the shared chrome (layout overrides live here). */\n className?: string\n /** Inline style merged onto the panel (e.g. a custom CSS var). */\n style?: CSSProperties\n /** Panel content. */\n children: ReactNode\n}\n\n/** Focusable descendants used by the optional focus trap. */\n// include inputs/selects/textareas/links — picker panels (DatePicker/ColorPicker/…) contain text\n// inputs, and a button-only selector let Shift+Tab escape the trap into the scroll-locked page\nconst FOCUSABLE =\n 'a[href]:not([tabindex=\"-1\"]), button:not([tabindex=\"-1\"]):not(:disabled), input:not([tabindex=\"-1\"]):not(:disabled), select:not([tabindex=\"-1\"]):not(:disabled), textarea:not([tabindex=\"-1\"]):not(:disabled), [tabindex=\"0\"]'\n\n/**\n * The shared floating popover used across the library — `Select` / `MultiSelect`, the date/time\n * pickers, `ColorPicker`, and the public `Popover`. Wraps `useFloatingPanel` and renders a `<body>`-portaled, viewport-clamped\n * panel that opens below its trigger (flips above only when it would overflow), locks page scroll while\n * open, animates in (opacity + translate, keyed off `data-open`/`data-side`), and dismisses on\n * outside-pointerdown / `Escape`. Optionally **traps Tab focus** (`trapFocus`, for modal dialogs — also\n * sets `aria-modal`). The forwarded ref points at the panel element, so a consumer can still read it for\n * blur/focus bookkeeping. Internal (not part of the public component surface).\n */\nexport const FloatingPanel = forwardRef<HTMLDivElement, FloatingPanelProps>(function FloatingPanel(\n {\n open,\n triggerRef,\n align,\n onClose,\n id,\n role,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n trapFocus = false,\n matchTriggerWidth = false,\n width,\n className,\n style,\n children,\n },\n forwardedRef,\n) {\n const {\n popoverRef,\n position: pos,\n visible,\n } = useFloatingPanel({\n open,\n triggerRef,\n align,\n onClose,\n })\n\n // attach the panel node to both the hook's ref (for positioning) and the forwarded ref (for the\n // consumer's blur/focus bookkeeping)\n const setRef = (node: HTMLDivElement | null) => {\n popoverRef.current = node\n if (typeof forwardedRef === 'function') forwardedRef(node)\n else if (forwardedRef) forwardedRef.current = node\n }\n\n // trap Tab within the dialog so focus can't strand on the scroll-locked page behind it\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Tab') return\n const panel = popoverRef.current\n if (!panel) return\n const focusables = panel.querySelectorAll<HTMLElement>(FOCUSABLE)\n if (focusables.length === 0) return\n const first = focusables[0]\n const last = focusables[focusables.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n if (!open) return null\n\n const resolvedWidth = width ?? (matchTriggerWidth ? pos?.width : undefined)\n\n return createPortal(\n <div\n ref={setRef}\n id={id}\n className={clsx(styles.panel, className)}\n role={role}\n aria-modal={(role === 'dialog' || role === 'alertdialog') && trapFocus ? true : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n data-open={visible ? 'true' : 'false'}\n data-side={pos?.side ?? 'bottom'}\n onKeyDown={trapFocus ? handleKeyDown : undefined}\n style={{\n position: 'fixed',\n top: pos?.top ?? 0,\n left: pos?.left ?? 0,\n width: resolvedWidth,\n maxHeight: pos?.maxHeight,\n visibility: pos ? 'visible' : 'hidden',\n ...style,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n})\n"],"names":["VIEWPORT_PADDING","OFFSET","useFloatingPanel","open","triggerRef","align","onClose","popoverRef","useRef","position","setPosition","useState","visible","setVisible","useLockBodyScroll","reposition","useCallback","trigger","panel","rect","panelH","vh","vw","spaceBelow","spaceAbove","side","maxHeight","usedH","top","panelW","baseLeft","left","useLayoutEffect","useEffect","raf","onReposition","ro","onPointerDown","t","_a","_b","_c","onKey","FOCUSABLE","FloatingPanel","forwardRef","id","role","ariaLabel","ariaLabelledBy","ariaDescribedBy","trapFocus","matchTriggerWidth","width","className","style","children","forwardedRef","pos","setRef","node","handleKeyDown","event","focusables","first","last","resolvedWidth","createPortal","jsx","clsx","styles"],"mappings":"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"}
1
+ {"version":3,"file":"FloatingPanel-C5c_eMQ0.js","sources":["../src/hooks/useFloatingPanel.ts","../src/components/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react'\nimport { useLockBodyScroll } from './useLockBodyScroll'\n\n/** Geometry computed for a floating panel anchored to a trigger. */\nexport interface FloatingPanelPosition {\n top: number\n left: number\n width: number\n side: 'top' | 'bottom'\n maxHeight: number\n}\n\nconst VIEWPORT_PADDING = 8\nconst OFFSET = 6\n\nexport interface UseFloatingPanelOptions {\n /** Whether the panel is open. */\n open: boolean\n /** Ref to the anchor/trigger element. */\n triggerRef: RefObject<HTMLElement | null>\n /**\n * Horizontal alignment to the trigger: `start` (panel's left edge at the trigger's left — grows\n * right, the default) or `end` (panel's right edge at the trigger's right — grows left).\n */\n align?: 'start' | 'end'\n /**\n * Dismiss request. Outside-pointerdown passes whether focus was parked inside the panel (so the\n * consumer can restore focus to the trigger); Escape passes `true`.\n */\n onClose: (refocus: boolean) => void\n}\n\nexport interface UseFloatingPanelResult {\n /** Attach to the portaled panel element. */\n popoverRef: RefObject<HTMLDivElement | null>\n /** Computed geometry (null until first measured). */\n position: FloatingPanelPosition | null\n /** Enter-animation flag (rAF-driven once open). */\n visible: boolean\n /** Force a re-measure (rarely needed — scroll/resize/ResizeObserver already drive it). */\n reposition: () => void\n}\n\n/**\n * Shared floating-panel plumbing — a `<body>`-portaled panel that opens below its trigger (flips above\n * only when it would overflow), exposes the trigger width (for select-like matching), clamps to the\n * viewport, re-positions on scroll/resize (+ `ResizeObserver`), locks page scroll while open, and\n * dismisses on outside-pointerdown / `Escape`. The consumer owns the trigger ref, the `open` state, and\n * the `onClose` cleanup; this hook owns the panel ref, geometry, the enter-animation flag, and the\n * listeners. Wrapped by the internal `FloatingPanel` component, which every popover in the library\n * (`Select` / `MultiSelect`, the date/time pickers, `ColorPicker`) renders. Internal (not public).\n */\nexport function useFloatingPanel({\n open,\n triggerRef,\n align = 'start',\n onClose,\n}: UseFloatingPanelOptions): UseFloatingPanelResult {\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [position, setPosition] = useState<FloatingPanelPosition | null>(null)\n const [visible, setVisible] = useState(false)\n\n useLockBodyScroll(open)\n\n const reposition = useCallback(() => {\n const trigger = triggerRef.current\n const panel = popoverRef.current\n if (!trigger || !panel) return\n const rect = trigger.getBoundingClientRect()\n const panelH = panel.offsetHeight\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n const spaceBelow = vh - rect.bottom - OFFSET - VIEWPORT_PADDING\n const spaceAbove = rect.top - OFFSET - VIEWPORT_PADDING\n // prefer below; flip up only when below can't fit AND above has more room\n let side: 'top' | 'bottom' = 'bottom'\n if (panelH > spaceBelow && spaceAbove > spaceBelow) side = 'top'\n\n const maxHeight = Math.max(0, side === 'bottom' ? spaceBelow : spaceAbove)\n const usedH = Math.min(panelH, maxHeight)\n let top = side === 'bottom' ? rect.bottom + OFFSET : rect.top - OFFSET - usedH\n top = Math.min(\n Math.max(top, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vh - VIEWPORT_PADDING - usedH),\n )\n // clamp using the panel's actual width (a panel can be wider than its trigger, e.g. a calendar);\n // `width` returns the trigger width for consumers that match it (Select/MultiSelect).\n const panelW = panel.offsetWidth\n // `end` pins the panel's right edge to the trigger's right (grows left); `start` pins left (grows right)\n const baseLeft = align === 'end' ? rect.right - panelW : rect.left\n const left = Math.min(\n Math.max(baseLeft, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vw - VIEWPORT_PADDING - panelW),\n )\n setPosition({ top, left, width: rect.width, side, maxHeight })\n }, [triggerRef, align])\n\n useLayoutEffect(() => {\n if (!open) {\n setVisible(false)\n return\n }\n reposition()\n }, [open, reposition])\n\n useEffect(() => {\n if (!open) return\n const raf = requestAnimationFrame(() => setVisible(true))\n const onReposition = () => reposition()\n window.addEventListener('resize', onReposition)\n window.addEventListener('scroll', onReposition, true)\n let ro: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(onReposition)\n if (popoverRef.current) ro.observe(popoverRef.current)\n if (triggerRef.current) ro.observe(triggerRef.current)\n }\n return () => {\n cancelAnimationFrame(raf)\n window.removeEventListener('resize', onReposition)\n window.removeEventListener('scroll', onReposition, true)\n ro?.disconnect()\n }\n }, [open, reposition, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const onPointerDown = (e: PointerEvent) => {\n const t = e.target as Node\n if (triggerRef.current?.contains(t) || popoverRef.current?.contains(t)) return\n // restore focus to the trigger only if it was parked inside the panel (e.g. a search box)\n onClose(!!popoverRef.current?.contains(document.activeElement))\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose(true)\n }\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKey)\n }\n }, [open, onClose, triggerRef])\n\n return { popoverRef, position, visible, reposition }\n}\n","import {\n forwardRef,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { clsx } from 'clsx'\nimport { useFloatingPanel } from '../../hooks/useFloatingPanel'\nimport styles from './FloatingPanel.module.css'\n\nexport interface FloatingPanelProps {\n /** Whether the panel is open — gates the portal and drives the enter animation. */\n open: boolean\n /** Ref to the anchor/trigger element the panel is positioned against. */\n triggerRef: RefObject<HTMLElement | null>\n /** Horizontal alignment to the trigger: `start` (default, grows right) or `end` (grows left). */\n align?: 'start' | 'end'\n /** Dismiss request: outside-pointerdown (arg = restore focus to the trigger?) or Escape (`true`). */\n onClose: (refocus: boolean) => void\n /** `id` for the panel element — pair with the trigger's `aria-controls`. */\n id?: string\n /** ARIA role for the panel element (e.g. `'dialog'`). Omit for a plain wrapper (e.g. around a listbox). */\n role?: string\n /** Accessible label, paired with `role`. */\n ariaLabel?: string\n /** `id` of the element that labels the panel (instead of `ariaLabel`). */\n ariaLabelledBy?: string\n /** `id` of the element that describes the panel. */\n ariaDescribedBy?: string\n /** Trap Tab focus inside the panel + mark it `aria-modal` (for modal dialogs like the date pickers). */\n trapFocus?: boolean\n /** Constrain the panel to the trigger's width (select-like). */\n matchTriggerWidth?: boolean\n /** Fixed panel width (px number or any CSS width). Wins over `matchTriggerWidth`. */\n width?: number | string\n /** Class(es) for the panel element, merged after the shared chrome (layout overrides live here). */\n className?: string\n /** Inline style merged onto the panel (e.g. a custom CSS var). */\n style?: CSSProperties\n /** Panel content. */\n children: ReactNode\n}\n\n/** Focusable descendants used by the optional focus trap. */\n// include inputs/selects/textareas/links — picker panels (DatePicker/ColorPicker/…) contain text\n// inputs, and a button-only selector let Shift+Tab escape the trap into the scroll-locked page\nconst FOCUSABLE =\n 'a[href]:not([tabindex=\"-1\"]), button:not([tabindex=\"-1\"]):not(:disabled), input:not([tabindex=\"-1\"]):not(:disabled), select:not([tabindex=\"-1\"]):not(:disabled), textarea:not([tabindex=\"-1\"]):not(:disabled), [tabindex=\"0\"]'\n\n/**\n * The shared floating popover used across the library — `Select` / `MultiSelect`, the date/time\n * pickers, `ColorPicker`, and the public `Popover`. Wraps `useFloatingPanel` and renders a `<body>`-portaled, viewport-clamped\n * panel that opens below its trigger (flips above only when it would overflow), locks page scroll while\n * open, animates in (opacity + translate, keyed off `data-open`/`data-side`), and dismisses on\n * outside-pointerdown / `Escape`. Optionally **traps Tab focus** (`trapFocus`, for modal dialogs — also\n * sets `aria-modal`). The forwarded ref points at the panel element, so a consumer can still read it for\n * blur/focus bookkeeping. Internal (not part of the public component surface).\n */\nexport const FloatingPanel = forwardRef<HTMLDivElement, FloatingPanelProps>(function FloatingPanel(\n {\n open,\n triggerRef,\n align,\n onClose,\n id,\n role,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n trapFocus = false,\n matchTriggerWidth = false,\n width,\n className,\n style,\n children,\n },\n forwardedRef,\n) {\n const {\n popoverRef,\n position: pos,\n visible,\n } = useFloatingPanel({\n open,\n triggerRef,\n align,\n onClose,\n })\n\n // attach the panel node to both the hook's ref (for positioning) and the forwarded ref (for the\n // consumer's blur/focus bookkeeping)\n const setRef = (node: HTMLDivElement | null) => {\n popoverRef.current = node\n if (typeof forwardedRef === 'function') forwardedRef(node)\n else if (forwardedRef) forwardedRef.current = node\n }\n\n // Escape inside the panel closes THIS panel only — stopped here so it can't bubble (through the React tree,\n // the panel is portaled) to an enclosing Modal / drawer's Overlay and dismiss that too. Stopping it also\n // keeps it from the document listener in `useFloatingPanel`, hence the explicit close.\n const handleEscape = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Escape') return false\n event.stopPropagation()\n onClose(true)\n return true\n }\n\n // trap Tab within the dialog so focus can't strand on the scroll-locked page behind it\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (handleEscape(event)) return\n if (!trapFocus) return\n if (event.key !== 'Tab') return\n const panel = popoverRef.current\n if (!panel) return\n const focusables = panel.querySelectorAll<HTMLElement>(FOCUSABLE)\n if (focusables.length === 0) return\n const first = focusables[0]\n const last = focusables[focusables.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n if (!open) return null\n\n const resolvedWidth = width ?? (matchTriggerWidth ? pos?.width : undefined)\n\n return createPortal(\n <div\n ref={setRef}\n id={id}\n className={clsx(styles.panel, className)}\n role={role}\n aria-modal={(role === 'dialog' || role === 'alertdialog') && trapFocus ? true : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n data-open={visible ? 'true' : 'false'}\n data-side={pos?.side ?? 'bottom'}\n onKeyDown={handleKeyDown}\n style={{\n position: 'fixed',\n top: pos?.top ?? 0,\n left: pos?.left ?? 0,\n width: resolvedWidth,\n maxHeight: pos?.maxHeight,\n visibility: pos ? 'visible' : 'hidden',\n ...style,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n})\n"],"names":["VIEWPORT_PADDING","OFFSET","useFloatingPanel","open","triggerRef","align","onClose","popoverRef","useRef","position","setPosition","useState","visible","setVisible","useLockBodyScroll","reposition","useCallback","trigger","panel","rect","panelH","vh","vw","spaceBelow","spaceAbove","side","maxHeight","usedH","top","panelW","baseLeft","left","useLayoutEffect","useEffect","raf","onReposition","ro","onPointerDown","t","_a","_b","_c","onKey","FOCUSABLE","FloatingPanel","forwardRef","id","role","ariaLabel","ariaLabelledBy","ariaDescribedBy","trapFocus","matchTriggerWidth","width","className","style","children","forwardedRef","pos","setRef","node","handleEscape","event","handleKeyDown","focusables","first","last","resolvedWidth","createPortal","jsx","clsx","styles"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const A=require("react/jsx-runtime"),u=require("react"),B=require("react-dom"),K=require("clsx"),O=require("./useLockBodyScroll-CIXHZo-Q.cjs"),l=8,q=6;function W({open:c,triggerRef:s,align:p="start",onClose:h}){const a=u.useRef(null),[D,v]=u.useState(null),[F,x]=u.useState(!1);O.useLockBodyScroll(c);const d=u.useCallback(()=>{const r=s.current,i=a.current;if(!r||!i)return;const e=r.getBoundingClientRect(),f=i.offsetHeight,m=window.innerHeight,b=window.innerWidth,o=m-e.bottom-q-l,w=e.top-q-l;let t="bottom";f>o&&w>o&&(t="top");const E=Math.max(0,t==="bottom"?o:w),L=Math.min(f,E);let y=t==="bottom"?e.bottom+q:e.top-q-L;y=Math.min(Math.max(y,l),Math.max(l,m-l-L));const P=i.offsetWidth,M=p==="end"?e.right-P:e.left,n=Math.min(Math.max(M,l),Math.max(l,b-l-P));v({top:y,left:n,width:e.width,side:t,maxHeight:E})},[s,p]);return u.useLayoutEffect(()=>{if(!c){x(!1);return}d()},[c,d]),u.useEffect(()=>{if(!c)return;const r=requestAnimationFrame(()=>x(!0)),i=()=>d();window.addEventListener("resize",i),window.addEventListener("scroll",i,!0);let e;return typeof ResizeObserver<"u"&&(e=new ResizeObserver(i),a.current&&e.observe(a.current),s.current&&e.observe(s.current)),()=>{cancelAnimationFrame(r),window.removeEventListener("resize",i),window.removeEventListener("scroll",i,!0),e==null||e.disconnect()}},[c,d,s]),u.useEffect(()=>{if(!c)return;const r=e=>{var m,b,o;const f=e.target;(m=s.current)!=null&&m.contains(f)||(b=a.current)!=null&&b.contains(f)||h(!!((o=a.current)!=null&&o.contains(document.activeElement)))},i=e=>{e.key==="Escape"&&h(!0)};return document.addEventListener("pointerdown",r,!0),document.addEventListener("keydown",i),()=>{document.removeEventListener("pointerdown",r,!0),document.removeEventListener("keydown",i)}},[c,h,s]),{popoverRef:a,position:D,visible:F,reposition:d}}const z="_panel_1cr9q_5",_={panel:z},T='a[href]:not([tabindex="-1"]), button:not([tabindex="-1"]):not(:disabled), input:not([tabindex="-1"]):not(:disabled), select:not([tabindex="-1"]):not(:disabled), textarea:not([tabindex="-1"]):not(:disabled), [tabindex="0"]',j=u.forwardRef(function({open:s,triggerRef:p,align:h,onClose:a,id:D,role:v,ariaLabel:F,ariaLabelledBy:x,ariaDescribedBy:d,trapFocus:r=!1,matchTriggerWidth:i=!1,width:e,className:f,style:m,children:b},o){const{popoverRef:w,position:t,visible:E}=W({open:s,triggerRef:p,align:h,onClose:a}),L=n=>{w.current=n,typeof o=="function"?o(n):o&&(o.current=n)},y=n=>n.key!=="Escape"?!1:(n.stopPropagation(),a(!0),!0),P=n=>{if(y(n)||!r||n.key!=="Tab")return;const g=w.current;if(!g)return;const k=g.querySelectorAll(T);if(k.length===0)return;const H=k[0],S=k[k.length-1];n.shiftKey&&document.activeElement===H?(n.preventDefault(),S.focus()):!n.shiftKey&&document.activeElement===S&&(n.preventDefault(),H.focus())};if(!s)return null;const M=e??(i?t==null?void 0:t.width:void 0);return B.createPortal(A.jsx("div",{ref:L,id:D,className:K.clsx(_.panel,f),role:v,"aria-modal":(v==="dialog"||v==="alertdialog")&&r?!0:void 0,"aria-label":F,"aria-labelledby":x,"aria-describedby":d,"data-open":E?"true":"false","data-side":(t==null?void 0:t.side)??"bottom",onKeyDown:P,style:{position:"fixed",top:(t==null?void 0:t.top)??0,left:(t==null?void 0:t.left)??0,width:M,maxHeight:t==null?void 0:t.maxHeight,visibility:t?"visible":"hidden",...m},children:b}),document.body)});exports.FloatingPanel=j;
2
+ //# sourceMappingURL=FloatingPanel-tGCG2nhA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingPanel-BIC4WrFa.cjs","sources":["../src/hooks/useFloatingPanel.ts","../src/components/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react'\nimport { useLockBodyScroll } from './useLockBodyScroll'\n\n/** Geometry computed for a floating panel anchored to a trigger. */\nexport interface FloatingPanelPosition {\n top: number\n left: number\n width: number\n side: 'top' | 'bottom'\n maxHeight: number\n}\n\nconst VIEWPORT_PADDING = 8\nconst OFFSET = 6\n\nexport interface UseFloatingPanelOptions {\n /** Whether the panel is open. */\n open: boolean\n /** Ref to the anchor/trigger element. */\n triggerRef: RefObject<HTMLElement | null>\n /**\n * Horizontal alignment to the trigger: `start` (panel's left edge at the trigger's left — grows\n * right, the default) or `end` (panel's right edge at the trigger's right — grows left).\n */\n align?: 'start' | 'end'\n /**\n * Dismiss request. Outside-pointerdown passes whether focus was parked inside the panel (so the\n * consumer can restore focus to the trigger); Escape passes `true`.\n */\n onClose: (refocus: boolean) => void\n}\n\nexport interface UseFloatingPanelResult {\n /** Attach to the portaled panel element. */\n popoverRef: RefObject<HTMLDivElement | null>\n /** Computed geometry (null until first measured). */\n position: FloatingPanelPosition | null\n /** Enter-animation flag (rAF-driven once open). */\n visible: boolean\n /** Force a re-measure (rarely needed — scroll/resize/ResizeObserver already drive it). */\n reposition: () => void\n}\n\n/**\n * Shared floating-panel plumbing — a `<body>`-portaled panel that opens below its trigger (flips above\n * only when it would overflow), exposes the trigger width (for select-like matching), clamps to the\n * viewport, re-positions on scroll/resize (+ `ResizeObserver`), locks page scroll while open, and\n * dismisses on outside-pointerdown / `Escape`. The consumer owns the trigger ref, the `open` state, and\n * the `onClose` cleanup; this hook owns the panel ref, geometry, the enter-animation flag, and the\n * listeners. Wrapped by the internal `FloatingPanel` component, which every popover in the library\n * (`Select` / `MultiSelect`, the date/time pickers, `ColorPicker`) renders. Internal (not public).\n */\nexport function useFloatingPanel({\n open,\n triggerRef,\n align = 'start',\n onClose,\n}: UseFloatingPanelOptions): UseFloatingPanelResult {\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [position, setPosition] = useState<FloatingPanelPosition | null>(null)\n const [visible, setVisible] = useState(false)\n\n useLockBodyScroll(open)\n\n const reposition = useCallback(() => {\n const trigger = triggerRef.current\n const panel = popoverRef.current\n if (!trigger || !panel) return\n const rect = trigger.getBoundingClientRect()\n const panelH = panel.offsetHeight\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n const spaceBelow = vh - rect.bottom - OFFSET - VIEWPORT_PADDING\n const spaceAbove = rect.top - OFFSET - VIEWPORT_PADDING\n // prefer below; flip up only when below can't fit AND above has more room\n let side: 'top' | 'bottom' = 'bottom'\n if (panelH > spaceBelow && spaceAbove > spaceBelow) side = 'top'\n\n const maxHeight = Math.max(0, side === 'bottom' ? spaceBelow : spaceAbove)\n const usedH = Math.min(panelH, maxHeight)\n let top = side === 'bottom' ? rect.bottom + OFFSET : rect.top - OFFSET - usedH\n top = Math.min(\n Math.max(top, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vh - VIEWPORT_PADDING - usedH),\n )\n // clamp using the panel's actual width (a panel can be wider than its trigger, e.g. a calendar);\n // `width` returns the trigger width for consumers that match it (Select/MultiSelect).\n const panelW = panel.offsetWidth\n // `end` pins the panel's right edge to the trigger's right (grows left); `start` pins left (grows right)\n const baseLeft = align === 'end' ? rect.right - panelW : rect.left\n const left = Math.min(\n Math.max(baseLeft, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vw - VIEWPORT_PADDING - panelW),\n )\n setPosition({ top, left, width: rect.width, side, maxHeight })\n }, [triggerRef, align])\n\n useLayoutEffect(() => {\n if (!open) {\n setVisible(false)\n return\n }\n reposition()\n }, [open, reposition])\n\n useEffect(() => {\n if (!open) return\n const raf = requestAnimationFrame(() => setVisible(true))\n const onReposition = () => reposition()\n window.addEventListener('resize', onReposition)\n window.addEventListener('scroll', onReposition, true)\n let ro: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(onReposition)\n if (popoverRef.current) ro.observe(popoverRef.current)\n if (triggerRef.current) ro.observe(triggerRef.current)\n }\n return () => {\n cancelAnimationFrame(raf)\n window.removeEventListener('resize', onReposition)\n window.removeEventListener('scroll', onReposition, true)\n ro?.disconnect()\n }\n }, [open, reposition, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const onPointerDown = (e: PointerEvent) => {\n const t = e.target as Node\n if (triggerRef.current?.contains(t) || popoverRef.current?.contains(t)) return\n // restore focus to the trigger only if it was parked inside the panel (e.g. a search box)\n onClose(!!popoverRef.current?.contains(document.activeElement))\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose(true)\n }\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKey)\n }\n }, [open, onClose, triggerRef])\n\n return { popoverRef, position, visible, reposition }\n}\n","import {\n forwardRef,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { clsx } from 'clsx'\nimport { useFloatingPanel } from '../../hooks/useFloatingPanel'\nimport styles from './FloatingPanel.module.css'\n\nexport interface FloatingPanelProps {\n /** Whether the panel is open — gates the portal and drives the enter animation. */\n open: boolean\n /** Ref to the anchor/trigger element the panel is positioned against. */\n triggerRef: RefObject<HTMLElement | null>\n /** Horizontal alignment to the trigger: `start` (default, grows right) or `end` (grows left). */\n align?: 'start' | 'end'\n /** Dismiss request: outside-pointerdown (arg = restore focus to the trigger?) or Escape (`true`). */\n onClose: (refocus: boolean) => void\n /** `id` for the panel element — pair with the trigger's `aria-controls`. */\n id?: string\n /** ARIA role for the panel element (e.g. `'dialog'`). Omit for a plain wrapper (e.g. around a listbox). */\n role?: string\n /** Accessible label, paired with `role`. */\n ariaLabel?: string\n /** `id` of the element that labels the panel (instead of `ariaLabel`). */\n ariaLabelledBy?: string\n /** `id` of the element that describes the panel. */\n ariaDescribedBy?: string\n /** Trap Tab focus inside the panel + mark it `aria-modal` (for modal dialogs like the date pickers). */\n trapFocus?: boolean\n /** Constrain the panel to the trigger's width (select-like). */\n matchTriggerWidth?: boolean\n /** Fixed panel width (px number or any CSS width). Wins over `matchTriggerWidth`. */\n width?: number | string\n /** Class(es) for the panel element, merged after the shared chrome (layout overrides live here). */\n className?: string\n /** Inline style merged onto the panel (e.g. a custom CSS var). */\n style?: CSSProperties\n /** Panel content. */\n children: ReactNode\n}\n\n/** Focusable descendants used by the optional focus trap. */\n// include inputs/selects/textareas/links — picker panels (DatePicker/ColorPicker/…) contain text\n// inputs, and a button-only selector let Shift+Tab escape the trap into the scroll-locked page\nconst FOCUSABLE =\n 'a[href]:not([tabindex=\"-1\"]), button:not([tabindex=\"-1\"]):not(:disabled), input:not([tabindex=\"-1\"]):not(:disabled), select:not([tabindex=\"-1\"]):not(:disabled), textarea:not([tabindex=\"-1\"]):not(:disabled), [tabindex=\"0\"]'\n\n/**\n * The shared floating popover used across the library — `Select` / `MultiSelect`, the date/time\n * pickers, `ColorPicker`, and the public `Popover`. Wraps `useFloatingPanel` and renders a `<body>`-portaled, viewport-clamped\n * panel that opens below its trigger (flips above only when it would overflow), locks page scroll while\n * open, animates in (opacity + translate, keyed off `data-open`/`data-side`), and dismisses on\n * outside-pointerdown / `Escape`. Optionally **traps Tab focus** (`trapFocus`, for modal dialogs — also\n * sets `aria-modal`). The forwarded ref points at the panel element, so a consumer can still read it for\n * blur/focus bookkeeping. Internal (not part of the public component surface).\n */\nexport const FloatingPanel = forwardRef<HTMLDivElement, FloatingPanelProps>(function FloatingPanel(\n {\n open,\n triggerRef,\n align,\n onClose,\n id,\n role,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n trapFocus = false,\n matchTriggerWidth = false,\n width,\n className,\n style,\n children,\n },\n forwardedRef,\n) {\n const {\n popoverRef,\n position: pos,\n visible,\n } = useFloatingPanel({\n open,\n triggerRef,\n align,\n onClose,\n })\n\n // attach the panel node to both the hook's ref (for positioning) and the forwarded ref (for the\n // consumer's blur/focus bookkeeping)\n const setRef = (node: HTMLDivElement | null) => {\n popoverRef.current = node\n if (typeof forwardedRef === 'function') forwardedRef(node)\n else if (forwardedRef) forwardedRef.current = node\n }\n\n // trap Tab within the dialog so focus can't strand on the scroll-locked page behind it\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Tab') return\n const panel = popoverRef.current\n if (!panel) return\n const focusables = panel.querySelectorAll<HTMLElement>(FOCUSABLE)\n if (focusables.length === 0) return\n const first = focusables[0]\n const last = focusables[focusables.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n if (!open) return null\n\n const resolvedWidth = width ?? (matchTriggerWidth ? pos?.width : undefined)\n\n return createPortal(\n <div\n ref={setRef}\n id={id}\n className={clsx(styles.panel, className)}\n role={role}\n aria-modal={(role === 'dialog' || role === 'alertdialog') && trapFocus ? true : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n data-open={visible ? 'true' : 'false'}\n data-side={pos?.side ?? 'bottom'}\n onKeyDown={trapFocus ? handleKeyDown : undefined}\n style={{\n position: 'fixed',\n top: pos?.top ?? 0,\n left: pos?.left ?? 0,\n width: resolvedWidth,\n maxHeight: pos?.maxHeight,\n visibility: pos ? 'visible' : 'hidden',\n ...style,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n})\n"],"names":["VIEWPORT_PADDING","OFFSET","useFloatingPanel","open","triggerRef","align","onClose","popoverRef","useRef","position","setPosition","useState","visible","setVisible","useLockBodyScroll","reposition","useCallback","trigger","panel","rect","panelH","vh","vw","spaceBelow","spaceAbove","side","maxHeight","usedH","top","panelW","baseLeft","left","useLayoutEffect","useEffect","raf","onReposition","ro","onPointerDown","t","_a","_b","_c","onKey","FOCUSABLE","FloatingPanel","forwardRef","id","role","ariaLabel","ariaLabelledBy","ariaDescribedBy","trapFocus","matchTriggerWidth","width","className","style","children","forwardedRef","pos","setRef","node","handleKeyDown","event","focusables","first","last","resolvedWidth","createPortal","jsx","clsx","styles"],"mappings":"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"}
1
+ {"version":3,"file":"FloatingPanel-tGCG2nhA.cjs","sources":["../src/hooks/useFloatingPanel.ts","../src/components/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react'\nimport { useLockBodyScroll } from './useLockBodyScroll'\n\n/** Geometry computed for a floating panel anchored to a trigger. */\nexport interface FloatingPanelPosition {\n top: number\n left: number\n width: number\n side: 'top' | 'bottom'\n maxHeight: number\n}\n\nconst VIEWPORT_PADDING = 8\nconst OFFSET = 6\n\nexport interface UseFloatingPanelOptions {\n /** Whether the panel is open. */\n open: boolean\n /** Ref to the anchor/trigger element. */\n triggerRef: RefObject<HTMLElement | null>\n /**\n * Horizontal alignment to the trigger: `start` (panel's left edge at the trigger's left — grows\n * right, the default) or `end` (panel's right edge at the trigger's right — grows left).\n */\n align?: 'start' | 'end'\n /**\n * Dismiss request. Outside-pointerdown passes whether focus was parked inside the panel (so the\n * consumer can restore focus to the trigger); Escape passes `true`.\n */\n onClose: (refocus: boolean) => void\n}\n\nexport interface UseFloatingPanelResult {\n /** Attach to the portaled panel element. */\n popoverRef: RefObject<HTMLDivElement | null>\n /** Computed geometry (null until first measured). */\n position: FloatingPanelPosition | null\n /** Enter-animation flag (rAF-driven once open). */\n visible: boolean\n /** Force a re-measure (rarely needed — scroll/resize/ResizeObserver already drive it). */\n reposition: () => void\n}\n\n/**\n * Shared floating-panel plumbing — a `<body>`-portaled panel that opens below its trigger (flips above\n * only when it would overflow), exposes the trigger width (for select-like matching), clamps to the\n * viewport, re-positions on scroll/resize (+ `ResizeObserver`), locks page scroll while open, and\n * dismisses on outside-pointerdown / `Escape`. The consumer owns the trigger ref, the `open` state, and\n * the `onClose` cleanup; this hook owns the panel ref, geometry, the enter-animation flag, and the\n * listeners. Wrapped by the internal `FloatingPanel` component, which every popover in the library\n * (`Select` / `MultiSelect`, the date/time pickers, `ColorPicker`) renders. Internal (not public).\n */\nexport function useFloatingPanel({\n open,\n triggerRef,\n align = 'start',\n onClose,\n}: UseFloatingPanelOptions): UseFloatingPanelResult {\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [position, setPosition] = useState<FloatingPanelPosition | null>(null)\n const [visible, setVisible] = useState(false)\n\n useLockBodyScroll(open)\n\n const reposition = useCallback(() => {\n const trigger = triggerRef.current\n const panel = popoverRef.current\n if (!trigger || !panel) return\n const rect = trigger.getBoundingClientRect()\n const panelH = panel.offsetHeight\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n const spaceBelow = vh - rect.bottom - OFFSET - VIEWPORT_PADDING\n const spaceAbove = rect.top - OFFSET - VIEWPORT_PADDING\n // prefer below; flip up only when below can't fit AND above has more room\n let side: 'top' | 'bottom' = 'bottom'\n if (panelH > spaceBelow && spaceAbove > spaceBelow) side = 'top'\n\n const maxHeight = Math.max(0, side === 'bottom' ? spaceBelow : spaceAbove)\n const usedH = Math.min(panelH, maxHeight)\n let top = side === 'bottom' ? rect.bottom + OFFSET : rect.top - OFFSET - usedH\n top = Math.min(\n Math.max(top, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vh - VIEWPORT_PADDING - usedH),\n )\n // clamp using the panel's actual width (a panel can be wider than its trigger, e.g. a calendar);\n // `width` returns the trigger width for consumers that match it (Select/MultiSelect).\n const panelW = panel.offsetWidth\n // `end` pins the panel's right edge to the trigger's right (grows left); `start` pins left (grows right)\n const baseLeft = align === 'end' ? rect.right - panelW : rect.left\n const left = Math.min(\n Math.max(baseLeft, VIEWPORT_PADDING),\n Math.max(VIEWPORT_PADDING, vw - VIEWPORT_PADDING - panelW),\n )\n setPosition({ top, left, width: rect.width, side, maxHeight })\n }, [triggerRef, align])\n\n useLayoutEffect(() => {\n if (!open) {\n setVisible(false)\n return\n }\n reposition()\n }, [open, reposition])\n\n useEffect(() => {\n if (!open) return\n const raf = requestAnimationFrame(() => setVisible(true))\n const onReposition = () => reposition()\n window.addEventListener('resize', onReposition)\n window.addEventListener('scroll', onReposition, true)\n let ro: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(onReposition)\n if (popoverRef.current) ro.observe(popoverRef.current)\n if (triggerRef.current) ro.observe(triggerRef.current)\n }\n return () => {\n cancelAnimationFrame(raf)\n window.removeEventListener('resize', onReposition)\n window.removeEventListener('scroll', onReposition, true)\n ro?.disconnect()\n }\n }, [open, reposition, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const onPointerDown = (e: PointerEvent) => {\n const t = e.target as Node\n if (triggerRef.current?.contains(t) || popoverRef.current?.contains(t)) return\n // restore focus to the trigger only if it was parked inside the panel (e.g. a search box)\n onClose(!!popoverRef.current?.contains(document.activeElement))\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose(true)\n }\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKey)\n }\n }, [open, onClose, triggerRef])\n\n return { popoverRef, position, visible, reposition }\n}\n","import {\n forwardRef,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { clsx } from 'clsx'\nimport { useFloatingPanel } from '../../hooks/useFloatingPanel'\nimport styles from './FloatingPanel.module.css'\n\nexport interface FloatingPanelProps {\n /** Whether the panel is open — gates the portal and drives the enter animation. */\n open: boolean\n /** Ref to the anchor/trigger element the panel is positioned against. */\n triggerRef: RefObject<HTMLElement | null>\n /** Horizontal alignment to the trigger: `start` (default, grows right) or `end` (grows left). */\n align?: 'start' | 'end'\n /** Dismiss request: outside-pointerdown (arg = restore focus to the trigger?) or Escape (`true`). */\n onClose: (refocus: boolean) => void\n /** `id` for the panel element — pair with the trigger's `aria-controls`. */\n id?: string\n /** ARIA role for the panel element (e.g. `'dialog'`). Omit for a plain wrapper (e.g. around a listbox). */\n role?: string\n /** Accessible label, paired with `role`. */\n ariaLabel?: string\n /** `id` of the element that labels the panel (instead of `ariaLabel`). */\n ariaLabelledBy?: string\n /** `id` of the element that describes the panel. */\n ariaDescribedBy?: string\n /** Trap Tab focus inside the panel + mark it `aria-modal` (for modal dialogs like the date pickers). */\n trapFocus?: boolean\n /** Constrain the panel to the trigger's width (select-like). */\n matchTriggerWidth?: boolean\n /** Fixed panel width (px number or any CSS width). Wins over `matchTriggerWidth`. */\n width?: number | string\n /** Class(es) for the panel element, merged after the shared chrome (layout overrides live here). */\n className?: string\n /** Inline style merged onto the panel (e.g. a custom CSS var). */\n style?: CSSProperties\n /** Panel content. */\n children: ReactNode\n}\n\n/** Focusable descendants used by the optional focus trap. */\n// include inputs/selects/textareas/links — picker panels (DatePicker/ColorPicker/…) contain text\n// inputs, and a button-only selector let Shift+Tab escape the trap into the scroll-locked page\nconst FOCUSABLE =\n 'a[href]:not([tabindex=\"-1\"]), button:not([tabindex=\"-1\"]):not(:disabled), input:not([tabindex=\"-1\"]):not(:disabled), select:not([tabindex=\"-1\"]):not(:disabled), textarea:not([tabindex=\"-1\"]):not(:disabled), [tabindex=\"0\"]'\n\n/**\n * The shared floating popover used across the library — `Select` / `MultiSelect`, the date/time\n * pickers, `ColorPicker`, and the public `Popover`. Wraps `useFloatingPanel` and renders a `<body>`-portaled, viewport-clamped\n * panel that opens below its trigger (flips above only when it would overflow), locks page scroll while\n * open, animates in (opacity + translate, keyed off `data-open`/`data-side`), and dismisses on\n * outside-pointerdown / `Escape`. Optionally **traps Tab focus** (`trapFocus`, for modal dialogs — also\n * sets `aria-modal`). The forwarded ref points at the panel element, so a consumer can still read it for\n * blur/focus bookkeeping. Internal (not part of the public component surface).\n */\nexport const FloatingPanel = forwardRef<HTMLDivElement, FloatingPanelProps>(function FloatingPanel(\n {\n open,\n triggerRef,\n align,\n onClose,\n id,\n role,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n trapFocus = false,\n matchTriggerWidth = false,\n width,\n className,\n style,\n children,\n },\n forwardedRef,\n) {\n const {\n popoverRef,\n position: pos,\n visible,\n } = useFloatingPanel({\n open,\n triggerRef,\n align,\n onClose,\n })\n\n // attach the panel node to both the hook's ref (for positioning) and the forwarded ref (for the\n // consumer's blur/focus bookkeeping)\n const setRef = (node: HTMLDivElement | null) => {\n popoverRef.current = node\n if (typeof forwardedRef === 'function') forwardedRef(node)\n else if (forwardedRef) forwardedRef.current = node\n }\n\n // Escape inside the panel closes THIS panel only — stopped here so it can't bubble (through the React tree,\n // the panel is portaled) to an enclosing Modal / drawer's Overlay and dismiss that too. Stopping it also\n // keeps it from the document listener in `useFloatingPanel`, hence the explicit close.\n const handleEscape = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Escape') return false\n event.stopPropagation()\n onClose(true)\n return true\n }\n\n // trap Tab within the dialog so focus can't strand on the scroll-locked page behind it\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (handleEscape(event)) return\n if (!trapFocus) return\n if (event.key !== 'Tab') return\n const panel = popoverRef.current\n if (!panel) return\n const focusables = panel.querySelectorAll<HTMLElement>(FOCUSABLE)\n if (focusables.length === 0) return\n const first = focusables[0]\n const last = focusables[focusables.length - 1]\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n if (!open) return null\n\n const resolvedWidth = width ?? (matchTriggerWidth ? pos?.width : undefined)\n\n return createPortal(\n <div\n ref={setRef}\n id={id}\n className={clsx(styles.panel, className)}\n role={role}\n aria-modal={(role === 'dialog' || role === 'alertdialog') && trapFocus ? true : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n data-open={visible ? 'true' : 'false'}\n data-side={pos?.side ?? 'bottom'}\n onKeyDown={handleKeyDown}\n style={{\n position: 'fixed',\n top: pos?.top ?? 0,\n left: pos?.left ?? 0,\n width: resolvedWidth,\n maxHeight: pos?.maxHeight,\n visibility: pos ? 'visible' : 'hidden',\n ...style,\n }}\n >\n {children}\n </div>,\n document.body,\n )\n})\n"],"names":["VIEWPORT_PADDING","OFFSET","useFloatingPanel","open","triggerRef","align","onClose","popoverRef","useRef","position","setPosition","useState","visible","setVisible","useLockBodyScroll","reposition","useCallback","trigger","panel","rect","panelH","vh","vw","spaceBelow","spaceAbove","side","maxHeight","usedH","top","panelW","baseLeft","left","useLayoutEffect","useEffect","raf","onReposition","ro","onPointerDown","t","_a","_b","_c","onKey","FOCUSABLE","FloatingPanel","forwardRef","id","role","ariaLabel","ariaLabelledBy","ariaDescribedBy","trapFocus","matchTriggerWidth","width","className","style","children","forwardedRef","pos","setRef","node","handleEscape","event","handleKeyDown","focusables","first","last","resolvedWidth","createPortal","jsx","clsx","styles"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const s=require("react/jsx-runtime"),c=require("react"),F=require("./Icon-BVULqOJD.cjs"),h=require("./IconButton-BNa0yLcv.cjs"),q=require("./ConfigProvider-ByLHqXpv.cjs"),E=c.forwardRef(function({variant:i="outlined",...t},d){const[a]=c.useState(()=>typeof document<"u"&&typeof document.documentElement.requestFullscreen=="function"),[l,f]=c.useState(!1),m=q.useT();if(c.useEffect(()=>{const e=()=>f(document.fullscreenElement!=null);return e(),document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]),!a)return null;const g=()=>{var e,n,u,o,r;document.fullscreenElement?(n=(e=document.exitFullscreen)==null?void 0:e.call(document))==null||n.catch(()=>{}):(r=(o=(u=document.documentElement).requestFullscreen)==null?void 0:o.call(u))==null||r.catch(()=>{})};return s.jsx(h.IconButton,{ref:d,variant:i,role:"switch","aria-checked":l,"aria-label":m("fullscreenToggle.label"),...t,onClick:e=>{var n;(n=t.onClick)==null||n.call(t,e),g()},children:s.jsx(F.Icon,{name:"Maximize3",style:l?{transform:"rotate(180deg)"}:void 0})})});exports.FullscreenToggle=E;
2
- //# sourceMappingURL=FullscreenToggle-CeGgw3z1.cjs.map
1
+ "use strict";const s=require("react/jsx-runtime"),c=require("react"),F=require("./Icon-BUP5_kRs.cjs"),h=require("./IconButton-CvIXSFsr.cjs"),q=require("./ConfigProvider-CtpfSy1i.cjs"),E=c.forwardRef(function({variant:i="outlined",...t},d){const[a]=c.useState(()=>typeof document<"u"&&typeof document.documentElement.requestFullscreen=="function"),[l,f]=c.useState(!1),m=q.useT();if(c.useEffect(()=>{const e=()=>f(document.fullscreenElement!=null);return e(),document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]),!a)return null;const g=()=>{var e,n,u,o,r;document.fullscreenElement?(n=(e=document.exitFullscreen)==null?void 0:e.call(document))==null||n.catch(()=>{}):(r=(o=(u=document.documentElement).requestFullscreen)==null?void 0:o.call(u))==null||r.catch(()=>{})};return s.jsx(h.IconButton,{ref:d,variant:i,role:"switch","aria-checked":l,"aria-label":m("fullscreenToggle.label"),...t,onClick:e=>{var n;(n=t.onClick)==null||n.call(t,e),g()},children:s.jsx(F.Icon,{name:"Maximize3",style:l?{transform:"rotate(180deg)"}:void 0})})});exports.FullscreenToggle=E;
2
+ //# sourceMappingURL=FullscreenToggle-BKo1lDSE.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FullscreenToggle-CeGgw3z1.cjs","sources":["../src/components/FullscreenToggle/FullscreenToggle.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport { IconButton, type IconButtonProps } from '../IconButton'\n\n/** Inherits `IconButton`'s look (variant, color, size); the icon and toggle behavior are built in. */\nexport type FullscreenToggleProps = Omit<IconButtonProps, 'children'>\n\n/**\n * A one-tap browser fullscreen switch. Renders an `IconButton` that calls the Fullscreen API —\n * `requestFullscreen` to maximize, `exitFullscreen` to restore — and flips its `Maximize3` icon 180°\n * while fullscreen (so it reads as \"minimize\"), keeping state in sync via the `fullscreenchange`\n * event. Renders **nothing** where the Fullscreen API is unavailable (e.g. iOS Safari on iPhone), so\n * it auto-hides on devices that can't go fullscreen. Styling comes from `IconButton`, so `variant`,\n * `color` and `size` pass through.\n */\nexport const FullscreenToggle = forwardRef<HTMLButtonElement, FullscreenToggleProps>(\n function FullscreenToggle({ variant = 'outlined', ...props }, ref) {\n // The Fullscreen API is absent on some devices (notably iOS Safari on iPhone); hide the control\n // there, since tapping it could never do anything.\n const [supported] = useState(\n () =>\n typeof document !== 'undefined' &&\n typeof document.documentElement.requestFullscreen === 'function',\n )\n const [isFullscreen, setIsFullscreen] = useState(false)\n const t = useT()\n\n useEffect(() => {\n const sync = () => setIsFullscreen(document.fullscreenElement != null)\n sync() // pick up a session that's already fullscreen on mount\n document.addEventListener('fullscreenchange', sync)\n return () => document.removeEventListener('fullscreenchange', sync)\n }, [])\n\n if (!supported) return null\n\n const toggle = () => {\n // `?.` guards environments without the Fullscreen API; `.catch` swallows a blocked request\n if (document.fullscreenElement) {\n document.exitFullscreen?.()?.catch(() => {})\n } else {\n document.documentElement.requestFullscreen?.()?.catch(() => {})\n }\n }\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n role=\"switch\"\n aria-checked={isFullscreen}\n aria-label={t('fullscreenToggle.label')}\n {...props}\n onClick={(event) => {\n props.onClick?.(event) // preserve a caller-supplied handler, then toggle\n toggle()\n }}\n >\n <Icon name=\"Maximize3\" style={isFullscreen ? { transform: 'rotate(180deg)' } : undefined} />\n </IconButton>\n )\n },\n)\n"],"names":["FullscreenToggle","forwardRef","variant","props","ref","supported","useState","isFullscreen","setIsFullscreen","t","useT","useEffect","sync","toggle","_b","_a","_e","_d","_c","jsx","IconButton","event","Icon"],"mappings":"wLAgBaA,EAAmBC,EAAAA,WAC9B,SAA0B,CAAE,QAAAC,EAAU,WAAY,GAAGC,CAAA,EAASC,EAAK,CAGjE,KAAM,CAACC,CAAS,EAAIC,EAAAA,SAClB,IACE,OAAO,SAAa,KACpB,OAAO,SAAS,gBAAgB,mBAAsB,UAAA,EAEpD,CAACC,EAAcC,CAAe,EAAIF,EAAAA,SAAS,EAAK,EAChDG,EAAIC,EAAAA,KAAA,EASV,GAPAC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAO,IAAMJ,EAAgB,SAAS,mBAAqB,IAAI,EACrE,OAAAI,EAAA,EACA,SAAS,iBAAiB,mBAAoBA,CAAI,EAC3C,IAAM,SAAS,oBAAoB,mBAAoBA,CAAI,CACpE,EAAG,CAAA,CAAE,EAED,CAACP,EAAW,OAAO,KAEvB,MAAMQ,EAAS,IAAM,eAEf,SAAS,mBACXC,GAAAC,EAAA,SAAS,iBAAT,YAAAA,EAAA,uBAAAD,EAA6B,MAAM,IAAM,CAAC,IAE1CE,GAAAC,GAAAC,EAAA,SAAS,iBAAgB,oBAAzB,YAAAD,EAAA,KAAAC,KAAA,MAAAF,EAAgD,MAAM,IAAM,CAAC,EAEjE,EAEA,OACEG,EAAAA,IAACC,EAAAA,WAAA,CACC,IAAAhB,EACA,QAAAF,EACA,KAAK,SACL,eAAcK,EACd,aAAYE,EAAE,wBAAwB,EACrC,GAAGN,EACJ,QAAUkB,GAAU,QAClBN,EAAAZ,EAAM,UAAN,MAAAY,EAAA,KAAAZ,EAAgBkB,GAChBR,EAAA,CACF,EAEA,SAAAM,EAAAA,IAACG,OAAA,CAAK,KAAK,YAAY,MAAOf,EAAe,CAAE,UAAW,gBAAA,EAAqB,MAAA,CAAW,CAAA,CAAA,CAGhG,CACF"}
1
+ {"version":3,"file":"FullscreenToggle-BKo1lDSE.cjs","sources":["../src/components/FullscreenToggle/FullscreenToggle.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport { IconButton, type IconButtonProps } from '../IconButton'\n\n/** Inherits `IconButton`'s look (variant, color, size); the icon and toggle behavior are built in. */\nexport type FullscreenToggleProps = Omit<IconButtonProps, 'children'>\n\n/**\n * A one-tap browser fullscreen switch. Renders an `IconButton` that calls the Fullscreen API —\n * `requestFullscreen` to maximize, `exitFullscreen` to restore — and flips its `Maximize3` icon 180°\n * while fullscreen (so it reads as \"minimize\"), keeping state in sync via the `fullscreenchange`\n * event. Renders **nothing** where the Fullscreen API is unavailable (e.g. iOS Safari on iPhone), so\n * it auto-hides on devices that can't go fullscreen. Styling comes from `IconButton`, so `variant`,\n * `color` and `size` pass through.\n */\nexport const FullscreenToggle = forwardRef<HTMLButtonElement, FullscreenToggleProps>(\n function FullscreenToggle({ variant = 'outlined', ...props }, ref) {\n // The Fullscreen API is absent on some devices (notably iOS Safari on iPhone); hide the control\n // there, since tapping it could never do anything.\n const [supported] = useState(\n () =>\n typeof document !== 'undefined' &&\n typeof document.documentElement.requestFullscreen === 'function',\n )\n const [isFullscreen, setIsFullscreen] = useState(false)\n const t = useT()\n\n useEffect(() => {\n const sync = () => setIsFullscreen(document.fullscreenElement != null)\n sync() // pick up a session that's already fullscreen on mount\n document.addEventListener('fullscreenchange', sync)\n return () => document.removeEventListener('fullscreenchange', sync)\n }, [])\n\n if (!supported) return null\n\n const toggle = () => {\n // `?.` guards environments without the Fullscreen API; `.catch` swallows a blocked request\n if (document.fullscreenElement) {\n document.exitFullscreen?.()?.catch(() => {})\n } else {\n document.documentElement.requestFullscreen?.()?.catch(() => {})\n }\n }\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n role=\"switch\"\n aria-checked={isFullscreen}\n aria-label={t('fullscreenToggle.label')}\n {...props}\n onClick={(event) => {\n props.onClick?.(event) // preserve a caller-supplied handler, then toggle\n toggle()\n }}\n >\n <Icon name=\"Maximize3\" style={isFullscreen ? { transform: 'rotate(180deg)' } : undefined} />\n </IconButton>\n )\n },\n)\n"],"names":["FullscreenToggle","forwardRef","variant","props","ref","supported","useState","isFullscreen","setIsFullscreen","t","useT","useEffect","sync","toggle","_b","_a","_e","_d","_c","jsx","IconButton","event","Icon"],"mappings":"wLAgBaA,EAAmBC,EAAAA,WAC9B,SAA0B,CAAE,QAAAC,EAAU,WAAY,GAAGC,CAAA,EAASC,EAAK,CAGjE,KAAM,CAACC,CAAS,EAAIC,EAAAA,SAClB,IACE,OAAO,SAAa,KACpB,OAAO,SAAS,gBAAgB,mBAAsB,UAAA,EAEpD,CAACC,EAAcC,CAAe,EAAIF,EAAAA,SAAS,EAAK,EAChDG,EAAIC,EAAAA,KAAA,EASV,GAPAC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAO,IAAMJ,EAAgB,SAAS,mBAAqB,IAAI,EACrE,OAAAI,EAAA,EACA,SAAS,iBAAiB,mBAAoBA,CAAI,EAC3C,IAAM,SAAS,oBAAoB,mBAAoBA,CAAI,CACpE,EAAG,CAAA,CAAE,EAED,CAACP,EAAW,OAAO,KAEvB,MAAMQ,EAAS,IAAM,eAEf,SAAS,mBACXC,GAAAC,EAAA,SAAS,iBAAT,YAAAA,EAAA,uBAAAD,EAA6B,MAAM,IAAM,CAAC,IAE1CE,GAAAC,GAAAC,EAAA,SAAS,iBAAgB,oBAAzB,YAAAD,EAAA,KAAAC,KAAA,MAAAF,EAAgD,MAAM,IAAM,CAAC,EAEjE,EAEA,OACEG,EAAAA,IAACC,EAAAA,WAAA,CACC,IAAAhB,EACA,QAAAF,EACA,KAAK,SACL,eAAcK,EACd,aAAYE,EAAE,wBAAwB,EACrC,GAAGN,EACJ,QAAUkB,GAAU,QAClBN,EAAAZ,EAAM,UAAN,MAAAY,EAAA,KAAAZ,EAAgBkB,GAChBR,EAAA,CACF,EAEA,SAAAM,EAAAA,IAACG,OAAA,CAAK,KAAK,YAAY,MAAOf,EAAe,CAAE,UAAW,gBAAA,EAAqB,MAAA,CAAW,CAAA,CAAA,CAGhG,CACF"}
@@ -1,8 +1,8 @@
1
1
  import { jsx as u } from "react/jsx-runtime";
2
2
  import { forwardRef as F, useState as s, useEffect as h } from "react";
3
- import { I as E } from "./Icon-DaTvzLBu.js";
4
- import { I } from "./IconButton-GU3Ud4Zg.js";
5
- import { a as v } from "./ConfigProvider-BbsI15b-.js";
3
+ import { I as E } from "./Icon-CGQ5yGSZ.js";
4
+ import { I } from "./IconButton-CL_6iMQh.js";
5
+ import { a as v } from "./ConfigProvider-Ct0Pe3Ku.js";
6
6
  const w = F(
7
7
  function({ variant: m = "outlined", ...t }, i) {
8
8
  const [a] = s(
@@ -39,4 +39,4 @@ const w = F(
39
39
  export {
40
40
  w as F
41
41
  };
42
- //# sourceMappingURL=FullscreenToggle-2IYIS5KF.js.map
42
+ //# sourceMappingURL=FullscreenToggle-DmH1541W.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FullscreenToggle-2IYIS5KF.js","sources":["../src/components/FullscreenToggle/FullscreenToggle.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport { IconButton, type IconButtonProps } from '../IconButton'\n\n/** Inherits `IconButton`'s look (variant, color, size); the icon and toggle behavior are built in. */\nexport type FullscreenToggleProps = Omit<IconButtonProps, 'children'>\n\n/**\n * A one-tap browser fullscreen switch. Renders an `IconButton` that calls the Fullscreen API —\n * `requestFullscreen` to maximize, `exitFullscreen` to restore — and flips its `Maximize3` icon 180°\n * while fullscreen (so it reads as \"minimize\"), keeping state in sync via the `fullscreenchange`\n * event. Renders **nothing** where the Fullscreen API is unavailable (e.g. iOS Safari on iPhone), so\n * it auto-hides on devices that can't go fullscreen. Styling comes from `IconButton`, so `variant`,\n * `color` and `size` pass through.\n */\nexport const FullscreenToggle = forwardRef<HTMLButtonElement, FullscreenToggleProps>(\n function FullscreenToggle({ variant = 'outlined', ...props }, ref) {\n // The Fullscreen API is absent on some devices (notably iOS Safari on iPhone); hide the control\n // there, since tapping it could never do anything.\n const [supported] = useState(\n () =>\n typeof document !== 'undefined' &&\n typeof document.documentElement.requestFullscreen === 'function',\n )\n const [isFullscreen, setIsFullscreen] = useState(false)\n const t = useT()\n\n useEffect(() => {\n const sync = () => setIsFullscreen(document.fullscreenElement != null)\n sync() // pick up a session that's already fullscreen on mount\n document.addEventListener('fullscreenchange', sync)\n return () => document.removeEventListener('fullscreenchange', sync)\n }, [])\n\n if (!supported) return null\n\n const toggle = () => {\n // `?.` guards environments without the Fullscreen API; `.catch` swallows a blocked request\n if (document.fullscreenElement) {\n document.exitFullscreen?.()?.catch(() => {})\n } else {\n document.documentElement.requestFullscreen?.()?.catch(() => {})\n }\n }\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n role=\"switch\"\n aria-checked={isFullscreen}\n aria-label={t('fullscreenToggle.label')}\n {...props}\n onClick={(event) => {\n props.onClick?.(event) // preserve a caller-supplied handler, then toggle\n toggle()\n }}\n >\n <Icon name=\"Maximize3\" style={isFullscreen ? { transform: 'rotate(180deg)' } : undefined} />\n </IconButton>\n )\n },\n)\n"],"names":["FullscreenToggle","forwardRef","variant","props","ref","supported","useState","isFullscreen","setIsFullscreen","t","useT","useEffect","sync","toggle","_b","_a","_e","_d","_c","jsx","IconButton","event","Icon"],"mappings":";;;;;AAgBO,MAAMA,IAAmBC;AAAA,EAC9B,SAA0B,EAAE,SAAAC,IAAU,YAAY,GAAGC,EAAA,GAASC,GAAK;AAGjE,UAAM,CAACC,CAAS,IAAIC;AAAA,MAClB,MACE,OAAO,WAAa,OACpB,OAAO,SAAS,gBAAgB,qBAAsB;AAAA,IAAA,GAEpD,CAACC,GAAcC,CAAe,IAAIF,EAAS,EAAK,GAChDG,IAAIC,EAAA;AASV,QAPAC,EAAU,MAAM;AACd,YAAMC,IAAO,MAAMJ,EAAgB,SAAS,qBAAqB,IAAI;AACrE,aAAAI,EAAA,GACA,SAAS,iBAAiB,oBAAoBA,CAAI,GAC3C,MAAM,SAAS,oBAAoB,oBAAoBA,CAAI;AAAA,IACpE,GAAG,CAAA,CAAE,GAED,CAACP,EAAW,QAAO;AAEvB,UAAMQ,IAAS,MAAM;;AAEnB,MAAI,SAAS,qBACXC,KAAAC,IAAA,SAAS,mBAAT,gBAAAA,EAAA,2BAAAD,EAA6B,MAAM,MAAM;AAAA,MAAC,MAE1CE,KAAAC,KAAAC,IAAA,SAAS,iBAAgB,sBAAzB,gBAAAD,EAAA,KAAAC,OAAA,QAAAF,EAAgD,MAAM,MAAM;AAAA,MAAC;AAAA,IAEjE;AAEA,WACE,gBAAAG;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAAhB;AAAA,QACA,SAAAF;AAAA,QACA,MAAK;AAAA,QACL,gBAAcK;AAAA,QACd,cAAYE,EAAE,wBAAwB;AAAA,QACrC,GAAGN;AAAA,QACJ,SAAS,CAACkB,MAAU;;AAClB,WAAAN,IAAAZ,EAAM,YAAN,QAAAY,EAAA,KAAAZ,GAAgBkB,IAChBR,EAAA;AAAA,QACF;AAAA,QAEA,UAAA,gBAAAM,EAACG,GAAA,EAAK,MAAK,aAAY,OAAOf,IAAe,EAAE,WAAW,iBAAA,IAAqB,OAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAGhG;AACF;"}
1
+ {"version":3,"file":"FullscreenToggle-DmH1541W.js","sources":["../src/components/FullscreenToggle/FullscreenToggle.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport { IconButton, type IconButtonProps } from '../IconButton'\n\n/** Inherits `IconButton`'s look (variant, color, size); the icon and toggle behavior are built in. */\nexport type FullscreenToggleProps = Omit<IconButtonProps, 'children'>\n\n/**\n * A one-tap browser fullscreen switch. Renders an `IconButton` that calls the Fullscreen API —\n * `requestFullscreen` to maximize, `exitFullscreen` to restore — and flips its `Maximize3` icon 180°\n * while fullscreen (so it reads as \"minimize\"), keeping state in sync via the `fullscreenchange`\n * event. Renders **nothing** where the Fullscreen API is unavailable (e.g. iOS Safari on iPhone), so\n * it auto-hides on devices that can't go fullscreen. Styling comes from `IconButton`, so `variant`,\n * `color` and `size` pass through.\n */\nexport const FullscreenToggle = forwardRef<HTMLButtonElement, FullscreenToggleProps>(\n function FullscreenToggle({ variant = 'outlined', ...props }, ref) {\n // The Fullscreen API is absent on some devices (notably iOS Safari on iPhone); hide the control\n // there, since tapping it could never do anything.\n const [supported] = useState(\n () =>\n typeof document !== 'undefined' &&\n typeof document.documentElement.requestFullscreen === 'function',\n )\n const [isFullscreen, setIsFullscreen] = useState(false)\n const t = useT()\n\n useEffect(() => {\n const sync = () => setIsFullscreen(document.fullscreenElement != null)\n sync() // pick up a session that's already fullscreen on mount\n document.addEventListener('fullscreenchange', sync)\n return () => document.removeEventListener('fullscreenchange', sync)\n }, [])\n\n if (!supported) return null\n\n const toggle = () => {\n // `?.` guards environments without the Fullscreen API; `.catch` swallows a blocked request\n if (document.fullscreenElement) {\n document.exitFullscreen?.()?.catch(() => {})\n } else {\n document.documentElement.requestFullscreen?.()?.catch(() => {})\n }\n }\n\n return (\n <IconButton\n ref={ref}\n variant={variant}\n role=\"switch\"\n aria-checked={isFullscreen}\n aria-label={t('fullscreenToggle.label')}\n {...props}\n onClick={(event) => {\n props.onClick?.(event) // preserve a caller-supplied handler, then toggle\n toggle()\n }}\n >\n <Icon name=\"Maximize3\" style={isFullscreen ? { transform: 'rotate(180deg)' } : undefined} />\n </IconButton>\n )\n },\n)\n"],"names":["FullscreenToggle","forwardRef","variant","props","ref","supported","useState","isFullscreen","setIsFullscreen","t","useT","useEffect","sync","toggle","_b","_a","_e","_d","_c","jsx","IconButton","event","Icon"],"mappings":";;;;;AAgBO,MAAMA,IAAmBC;AAAA,EAC9B,SAA0B,EAAE,SAAAC,IAAU,YAAY,GAAGC,EAAA,GAASC,GAAK;AAGjE,UAAM,CAACC,CAAS,IAAIC;AAAA,MAClB,MACE,OAAO,WAAa,OACpB,OAAO,SAAS,gBAAgB,qBAAsB;AAAA,IAAA,GAEpD,CAACC,GAAcC,CAAe,IAAIF,EAAS,EAAK,GAChDG,IAAIC,EAAA;AASV,QAPAC,EAAU,MAAM;AACd,YAAMC,IAAO,MAAMJ,EAAgB,SAAS,qBAAqB,IAAI;AACrE,aAAAI,EAAA,GACA,SAAS,iBAAiB,oBAAoBA,CAAI,GAC3C,MAAM,SAAS,oBAAoB,oBAAoBA,CAAI;AAAA,IACpE,GAAG,CAAA,CAAE,GAED,CAACP,EAAW,QAAO;AAEvB,UAAMQ,IAAS,MAAM;;AAEnB,MAAI,SAAS,qBACXC,KAAAC,IAAA,SAAS,mBAAT,gBAAAA,EAAA,2BAAAD,EAA6B,MAAM,MAAM;AAAA,MAAC,MAE1CE,KAAAC,KAAAC,IAAA,SAAS,iBAAgB,sBAAzB,gBAAAD,EAAA,KAAAC,OAAA,QAAAF,EAAgD,MAAM,MAAM;AAAA,MAAC;AAAA,IAEjE;AAEA,WACE,gBAAAG;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAAhB;AAAA,QACA,SAAAF;AAAA,QACA,MAAK;AAAA,QACL,gBAAcK;AAAA,QACd,cAAYE,EAAE,wBAAwB;AAAA,QACrC,GAAGN;AAAA,QACJ,SAAS,CAACkB,MAAU;;AAClB,WAAAN,IAAAZ,EAAM,YAAN,QAAAY,EAAA,KAAAZ,GAAgBkB,IAChBR,EAAA;AAAA,QACF;AAAA,QAEA,UAAA,gBAAAM,EAACG,GAAA,EAAK,MAAK,aAAY,OAAOf,IAAe,EAAE,WAAW,iBAAA,IAAqB,OAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAGhG;AACF;"}