@shapio/cms 0.5.9 → 0.5.10

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 (192) hide show
  1. package/dist/admin/assets/{AssetTile-Da76KsyX.js → AssetTile-DecaDqjj.js} +2 -2
  2. package/dist/admin/assets/{AssetTile-Da76KsyX.js.map → AssetTile-DecaDqjj.js.map} +1 -1
  3. package/dist/admin/assets/{AssistError-Wr62cDj3.js → AssistError-rslPtgWB.js} +2 -2
  4. package/dist/admin/assets/{AssistError-Wr62cDj3.js.map → AssistError-rslPtgWB.js.map} +1 -1
  5. package/dist/admin/assets/{BlockMenuItems-BMiEVCIT.js → BlockMenuItems-JHFue7Qt.js} +2 -2
  6. package/dist/admin/assets/{BlockMenuItems-BMiEVCIT.js.map → BlockMenuItems-JHFue7Qt.js.map} +1 -1
  7. package/dist/admin/assets/{Body-BEW1sAAB.js → Body-7NgJl9Pi.js} +2 -2
  8. package/dist/admin/assets/Body-7NgJl9Pi.js.map +1 -0
  9. package/dist/admin/assets/Builder-DmlYcgiP.js +2 -0
  10. package/dist/admin/assets/Builder-DmlYcgiP.js.map +1 -0
  11. package/dist/admin/assets/{CodeEditor-Ck7ggv6w.js → CodeEditor-Dv1FtkvI.js} +2 -2
  12. package/dist/admin/assets/{CodeEditor-Ck7ggv6w.js.map → CodeEditor-Dv1FtkvI.js.map} +1 -1
  13. package/dist/admin/assets/{CopyButton-WMWuSVsk.js → CopyButton-Brnpfqe0.js} +2 -2
  14. package/dist/admin/assets/{CopyButton-WMWuSVsk.js.map → CopyButton-Brnpfqe0.js.map} +1 -1
  15. package/dist/admin/assets/{CursorPager-CsnzX1P8.js → CursorPager-C7cAK5Qe.js} +2 -2
  16. package/dist/admin/assets/{CursorPager-CsnzX1P8.js.map → CursorPager-C7cAK5Qe.js.map} +1 -1
  17. package/dist/admin/assets/{FocalPoint-CstZuVmt.js → FocalPoint-Bhtb1gUa.js} +2 -2
  18. package/dist/admin/assets/{FocalPoint-CstZuVmt.js.map → FocalPoint-Bhtb1gUa.js.map} +1 -1
  19. package/dist/admin/assets/{Form-CEOW2OFF.js → Form-Cf1ephPH.js} +2 -2
  20. package/dist/admin/assets/{Form-CEOW2OFF.js.map → Form-Cf1ephPH.js.map} +1 -1
  21. package/dist/admin/assets/FormCheckboxGroup-BzVZFR3W.js +2 -0
  22. package/dist/admin/assets/FormCheckboxGroup-BzVZFR3W.js.map +1 -0
  23. package/dist/admin/assets/{FormRadioGroup-BQurJa8M.js → FormRadioGroup-BzmLzRnI.js} +2 -2
  24. package/dist/admin/assets/{FormRadioGroup-BQurJa8M.js.map → FormRadioGroup-BzmLzRnI.js.map} +1 -1
  25. package/dist/admin/assets/{FormSelectField-B4sjP-pj.js → FormSelectField-Cl7EjXc3.js} +2 -2
  26. package/dist/admin/assets/{FormSelectField-B4sjP-pj.js.map → FormSelectField-Cl7EjXc3.js.map} +1 -1
  27. package/dist/admin/assets/{FormSheet-V99zdfQe.js → FormSheet-CLZpd_7B.js} +2 -2
  28. package/dist/admin/assets/FormSheet-CLZpd_7B.js.map +1 -0
  29. package/dist/admin/assets/{FormSwitchField-RZgoP--n.js → FormSwitchField-BbqQ3tx_.js} +2 -2
  30. package/dist/admin/assets/{FormSwitchField-RZgoP--n.js.map → FormSwitchField-BbqQ3tx_.js.map} +1 -1
  31. package/dist/admin/assets/{FormTextareaField-CzXgoQzf.js → FormTextareaField-9RN5Pt3B.js} +2 -2
  32. package/dist/admin/assets/{FormTextareaField-CzXgoQzf.js.map → FormTextareaField-9RN5Pt3B.js.map} +1 -1
  33. package/dist/admin/assets/{HintedLabel-Cd9nuSqV.js → HintedLabel-D9IVF0EE.js} +2 -2
  34. package/dist/admin/assets/{HintedLabel-Cd9nuSqV.js.map → HintedLabel-D9IVF0EE.js.map} +1 -1
  35. package/dist/admin/assets/{InfoHint-ymRmHKMr.js → InfoHint-tlSeZB9U.js} +2 -2
  36. package/dist/admin/assets/{InfoHint-ymRmHKMr.js.map → InfoHint-tlSeZB9U.js.map} +1 -1
  37. package/dist/admin/assets/{InlineConfirm-A4IqkrGp.js → InlineConfirm-Kj9AOIFO.js} +2 -2
  38. package/dist/admin/assets/{InlineConfirm-A4IqkrGp.js.map → InlineConfirm-Kj9AOIFO.js.map} +1 -1
  39. package/dist/admin/assets/{InsertMenuItem-Bf7S7qbm.js → InsertMenuItem-CHAp2tH7.js} +2 -2
  40. package/dist/admin/assets/{InsertMenuItem-Bf7S7qbm.js.map → InsertMenuItem-CHAp2tH7.js.map} +1 -1
  41. package/dist/admin/assets/{Match-DJq8wn3e.js → Match-BfNRwPfR.js} +2 -2
  42. package/dist/admin/assets/{Match-DJq8wn3e.js.map → Match-BfNRwPfR.js.map} +1 -1
  43. package/dist/admin/assets/{NoAccess-CZufdbPI.js → NoAccess-DnEpYj9l.js} +2 -2
  44. package/dist/admin/assets/{NoAccess-CZufdbPI.js.map → NoAccess-DnEpYj9l.js.map} +1 -1
  45. package/dist/admin/assets/Panel-Bcl09TtM.js.map +1 -1
  46. package/dist/admin/assets/{QueryView-DO9TFWYE.js → QueryView-B86NcRt5.js} +2 -2
  47. package/dist/admin/assets/{QueryView-DO9TFWYE.js.map → QueryView-B86NcRt5.js.map} +1 -1
  48. package/dist/admin/assets/{RadioTile-DmKBFkpy.js → RadioTile-Bwd2Pmlk.js} +2 -2
  49. package/dist/admin/assets/RadioTile-Bwd2Pmlk.js.map +1 -0
  50. package/dist/admin/assets/{RichTextField-BpxyusP4.js → RichTextField-Dou79MHF.js} +2 -2
  51. package/dist/admin/assets/RichTextField-Dou79MHF.js.map +1 -0
  52. package/dist/admin/assets/{RowTitle-DVOfgxOd.js → RowTitle-DH9OZs3g.js} +2 -2
  53. package/dist/admin/assets/{RowTitle-DVOfgxOd.js.map → RowTitle-DH9OZs3g.js.map} +1 -1
  54. package/dist/admin/assets/{SecretReveal-DRCqVEFF.js → SecretReveal-D95oACLj.js} +2 -2
  55. package/dist/admin/assets/{SecretReveal-DRCqVEFF.js.map → SecretReveal-D95oACLj.js.map} +1 -1
  56. package/dist/admin/assets/{SharedGlyph-nsXJPCew.js → SharedGlyph-Chwb1EIS.js} +2 -2
  57. package/dist/admin/assets/{SharedGlyph-nsXJPCew.js.map → SharedGlyph-Chwb1EIS.js.map} +1 -1
  58. package/dist/admin/assets/{StepList-CDZPRd3-.js → StepList-D9iHsUZJ.js} +2 -2
  59. package/dist/admin/assets/StepList-D9iHsUZJ.js.map +1 -0
  60. package/dist/admin/assets/Structure-CewJL1b3.js +2 -0
  61. package/dist/admin/assets/{Structure-CL51Bvbm.js.map → Structure-CewJL1b3.js.map} +1 -1
  62. package/dist/admin/assets/SubNavLink-7Cs1LqMv.js.map +1 -1
  63. package/dist/admin/assets/{SuggestAltButton-4SaZQOJu.js → SuggestAltButton-BK1uo4yC.js} +2 -2
  64. package/dist/admin/assets/{SuggestAltButton-4SaZQOJu.js.map → SuggestAltButton-BK1uo4yC.js.map} +1 -1
  65. package/dist/admin/assets/{Thumbnail-DauHAkh8.js → Thumbnail-C2A_Ub77.js} +2 -2
  66. package/dist/admin/assets/{Thumbnail-DauHAkh8.js.map → Thumbnail-C2A_Ub77.js.map} +1 -1
  67. package/dist/admin/assets/{Trans-B3UWiZaU.js → Trans-CPoNNUK1.js} +2 -2
  68. package/dist/admin/assets/{Trans-B3UWiZaU.js.map → Trans-CPoNNUK1.js.map} +1 -1
  69. package/dist/admin/assets/{UnsavedChangesGuard-DPgih7BX.js → UnsavedChangesGuard-BsEyn9oH.js} +2 -2
  70. package/dist/admin/assets/{UnsavedChangesGuard-DPgih7BX.js.map → UnsavedChangesGuard-BsEyn9oH.js.map} +1 -1
  71. package/dist/admin/assets/{UserAvatar-If-zlQNY.js → UserAvatar-CgGKOFfP.js} +2 -2
  72. package/dist/admin/assets/{UserAvatar-If-zlQNY.js.map → UserAvatar-CgGKOFfP.js.map} +1 -1
  73. package/dist/admin/assets/{badge-DEe9tqLS.js → badge-DGqA_yr_.js} +2 -2
  74. package/dist/admin/assets/{badge-DEe9tqLS.js.map → badge-DGqA_yr_.js.map} +1 -1
  75. package/dist/admin/assets/baseExtensions-TVKN1UwW.js.map +1 -1
  76. package/dist/admin/assets/{changeSets-D5i2SgFV.js → changeSets-B6HxCJ4A.js} +2 -2
  77. package/dist/admin/assets/{changeSets-D5i2SgFV.js.map → changeSets-B6HxCJ4A.js.map} +1 -1
  78. package/dist/admin/assets/cn-DVhJ55Mo.js.map +1 -1
  79. package/dist/admin/assets/{constants-FKg_ke3y.js → constants-DY3YJAKH.js} +2 -2
  80. package/dist/admin/assets/{constants-FKg_ke3y.js.map → constants-DY3YJAKH.js.map} +1 -1
  81. package/dist/admin/assets/content-BNZF26Ve.js +3 -0
  82. package/dist/admin/assets/content-BNZF26Ve.js.map +1 -0
  83. package/dist/admin/assets/{contentTypes-B5taZv3y.js → contentTypes-Bz2xpqGf.js} +2 -2
  84. package/dist/admin/assets/{contentTypes-B5taZv3y.js.map → contentTypes-Bz2xpqGf.js.map} +1 -1
  85. package/dist/admin/assets/createLucideIcon-BOsNKleB.js.map +1 -1
  86. package/dist/admin/assets/{develop-CFlv7IdP.js → develop-D6CtwuYj.js} +2 -2
  87. package/dist/admin/assets/develop-D6CtwuYj.js.map +1 -0
  88. package/dist/admin/assets/{dropdown-menu-B7dJyA8h.js → dropdown-menu-Bz7CLcRK.js} +2 -2
  89. package/dist/admin/assets/{dropdown-menu-B7dJyA8h.js.map → dropdown-menu-Bz7CLcRK.js.map} +1 -1
  90. package/dist/admin/assets/es2015-Cv57ynE1.js +42 -0
  91. package/dist/admin/assets/es2015-Cv57ynE1.js.map +1 -0
  92. package/dist/admin/assets/{field-BDCHXkZE.js → field-D-xWW2E7.js} +2 -2
  93. package/dist/admin/assets/{field-BDCHXkZE.js.map → field-D-xWW2E7.js.map} +1 -1
  94. package/dist/admin/assets/{fileRoute-c9UMUr9b.js → fileRoute-DMal-zYL.js} +2 -2
  95. package/dist/admin/assets/{fileRoute-c9UMUr9b.js.map → fileRoute-DMal-zYL.js.map} +1 -1
  96. package/dist/admin/assets/{followPlural-CHpz-yo4.js → followPlural-CsgeALTW.js} +2 -2
  97. package/dist/admin/assets/{followPlural-CHpz-yo4.js.map → followPlural-CsgeALTW.js.map} +1 -1
  98. package/dist/admin/assets/{inbox-Daw10v5C.js → inbox-C0PVc6UI.js} +2 -2
  99. package/dist/admin/assets/{inbox-Daw10v5C.js.map → inbox-C0PVc6UI.js.map} +1 -1
  100. package/dist/admin/assets/{index-BRx5mel0.js → index-BqtCXB0u.js} +4 -4
  101. package/dist/admin/assets/{index-BRx5mel0.js.map → index-BqtCXB0u.js.map} +1 -1
  102. package/dist/admin/assets/{labels-B83cEX9w.js → labels-BtktCNGw.js} +2 -2
  103. package/dist/admin/assets/{labels-B83cEX9w.js.map → labels-BtktCNGw.js.map} +1 -1
  104. package/dist/admin/assets/{media-CgxriwNL.js → media-CeZGDGh7.js} +2 -2
  105. package/dist/admin/assets/{media-CgxriwNL.js.map → media-CeZGDGh7.js.map} +1 -1
  106. package/dist/admin/assets/{network-Cc1TAyal.js → network-BflLSKFO.js} +2 -2
  107. package/dist/admin/assets/{network-Cc1TAyal.js.map → network-BflLSKFO.js.map} +1 -1
  108. package/dist/admin/assets/publishing-BkxBplUZ.js +2 -0
  109. package/dist/admin/assets/publishing-BkxBplUZ.js.map +1 -0
  110. package/dist/admin/assets/{radio-group-Btmx7dlD.js → radio-group-CRuWQnuV.js} +2 -2
  111. package/dist/admin/assets/{radio-group-Btmx7dlD.js.map → radio-group-CRuWQnuV.js.map} +1 -1
  112. package/dist/admin/assets/schema-6eUoC8fJ.js +2 -0
  113. package/dist/admin/assets/schema-6eUoC8fJ.js.map +1 -0
  114. package/dist/admin/assets/{searchSchemas-fO_49fDI.js → searchSchemas-DAnwh3I3.js} +2 -2
  115. package/dist/admin/assets/{searchSchemas-fO_49fDI.js.map → searchSchemas-DAnwh3I3.js.map} +1 -1
  116. package/dist/admin/assets/{sections-SX-oiQoE.js → sections-CWL-XD6m.js} +2 -2
  117. package/dist/admin/assets/sections-CWL-XD6m.js.map +1 -0
  118. package/dist/admin/assets/{select-JB2Vv7ep.js → select-DVrPV1b3.js} +2 -2
  119. package/dist/admin/assets/{select-JB2Vv7ep.js.map → select-DVrPV1b3.js.map} +1 -1
  120. package/dist/admin/assets/{settings-CrRFxhSo.js → settings-CqnrPmzR.js} +2 -2
  121. package/dist/admin/assets/{settings-CrRFxhSo.js.map → settings-CqnrPmzR.js.map} +1 -1
  122. package/dist/admin/assets/{shapes-EMjfYsXV.js → shapes-ZAkMBB-Z.js} +4 -4
  123. package/dist/admin/assets/shapes-ZAkMBB-Z.js.map +1 -0
  124. package/dist/admin/assets/{skeleton-Dk-qdg0z.js → skeleton-CiX26LnL.js} +2 -2
  125. package/dist/admin/assets/{skeleton-Dk-qdg0z.js.map → skeleton-CiX26LnL.js.map} +1 -1
  126. package/dist/admin/assets/src-CMor9izq.js.map +1 -1
  127. package/dist/admin/assets/{switch-DyCRGDs7.js → switch-CiVf05NF.js} +2 -2
  128. package/dist/admin/assets/{switch-DyCRGDs7.js.map → switch-CiVf05NF.js.map} +1 -1
  129. package/dist/admin/assets/theme-Cv-MfOv8.js.map +1 -1
  130. package/dist/admin/assets/{tooltip-CCOeMqiL.js → tooltip-Bqf3oyqC.js} +2 -2
  131. package/dist/admin/assets/{tooltip-CCOeMqiL.js.map → tooltip-Bqf3oyqC.js.map} +1 -1
  132. package/dist/admin/assets/{useContentSchema-uXOfT985.js → useContentSchema-B_q1rMrG.js} +2 -2
  133. package/dist/admin/assets/{useContentSchema-uXOfT985.js.map → useContentSchema-B_q1rMrG.js.map} +1 -1
  134. package/dist/admin/assets/useCursorPager-BHYqHb3M.js.map +1 -1
  135. package/dist/admin/assets/{useDiscardGuard-DvBI3VIz.js → useDiscardGuard-C4QTfiU4.js} +2 -2
  136. package/dist/admin/assets/{useDiscardGuard-DvBI3VIz.js.map → useDiscardGuard-C4QTfiU4.js.map} +1 -1
  137. package/dist/admin/assets/{useMediaPickerDialog-CehOsykG.js → useMediaPickerDialog-BLrVV1Kn.js} +2 -2
  138. package/dist/admin/assets/{useMediaPickerDialog-CehOsykG.js.map → useMediaPickerDialog-BLrVV1Kn.js.map} +1 -1
  139. package/dist/admin/assets/{useMediaUploader-DvtxYXxD.js → useMediaUploader-CFy6lasO.js} +2 -2
  140. package/dist/admin/assets/useMediaUploader-CFy6lasO.js.map +1 -0
  141. package/dist/admin/assets/{useModelIndex-D8Q0oM4M.js → useModelIndex-NU-WlHQY.js} +2 -2
  142. package/dist/admin/assets/{useModelIndex-D8Q0oM4M.js.map → useModelIndex-NU-WlHQY.js.map} +1 -1
  143. package/dist/admin/assets/{usePlaces-CySN2Vwz.js → usePlaces-BA4x6503.js} +2 -2
  144. package/dist/admin/assets/{usePlaces-CySN2Vwz.js.map → usePlaces-BA4x6503.js.map} +1 -1
  145. package/dist/admin/assets/{useResolvedDefinitions-C279ueCH.js → useResolvedDefinitions-30lnwFQ1.js} +2 -2
  146. package/dist/admin/assets/{useResolvedDefinitions-C279ueCH.js.map → useResolvedDefinitions-30lnwFQ1.js.map} +1 -1
  147. package/dist/admin/assets/{useResolvedScheme-DEq7P4R5.js → useResolvedScheme-BVM4qLct.js} +2 -2
  148. package/dist/admin/assets/{useResolvedScheme-DEq7P4R5.js.map → useResolvedScheme-BVM4qLct.js.map} +1 -1
  149. package/dist/admin/assets/{zod-vPzaNsuW.js → zod-ZaQjjiAq.js} +2 -2
  150. package/dist/admin/assets/{zod-vPzaNsuW.js.map → zod-ZaQjjiAq.js.map} +1 -1
  151. package/dist/admin/index.html +29 -29
  152. package/dist/cli.js +1 -1
  153. package/dist/{cliMain-DzBXO7Oa.js → cliMain-CTntiVc2.js} +11 -11
  154. package/dist/cliMain-CTntiVc2.js.map +1 -0
  155. package/dist/config.d.ts +1 -1
  156. package/dist/config.js +1 -1
  157. package/dist/{contentDisposition-DOL2Xt0l.js → contentDisposition-DzhPhncr.js} +2 -2
  158. package/dist/{contentDisposition-DOL2Xt0l.js.map → contentDisposition-DzhPhncr.js.map} +1 -1
  159. package/dist/index.d.ts +2 -2
  160. package/dist/index.js +2 -2
  161. package/dist/{public-jttKsns_.d.ts → public-CMFaGDyf.d.ts} +4 -4
  162. package/dist/{public-B57h4F7Y.js → public-sJCQaNaP.js} +2 -2
  163. package/dist/{public-B57h4F7Y.js.map → public-sJCQaNaP.js.map} +1 -1
  164. package/dist/{s3Adapter-U01iEAcK.js → s3Adapter-CZcCl0sy.js} +2 -2
  165. package/dist/{s3Adapter-U01iEAcK.js.map → s3Adapter-CZcCl0sy.js.map} +1 -1
  166. package/dist/{worker-6ru1tYBs.js → worker-DHm2JwMZ.js} +353 -232
  167. package/dist/worker-DHm2JwMZ.js.map +1 -0
  168. package/package.json +5 -5
  169. package/dist/admin/assets/Body-BEW1sAAB.js.map +0 -1
  170. package/dist/admin/assets/Builder-Tk_5Orrl.js +0 -2
  171. package/dist/admin/assets/Builder-Tk_5Orrl.js.map +0 -1
  172. package/dist/admin/assets/FormCheckboxGroup-VjWVMiF3.js +0 -2
  173. package/dist/admin/assets/FormCheckboxGroup-VjWVMiF3.js.map +0 -1
  174. package/dist/admin/assets/FormSheet-V99zdfQe.js.map +0 -1
  175. package/dist/admin/assets/RadioTile-DmKBFkpy.js.map +0 -1
  176. package/dist/admin/assets/RichTextField-BpxyusP4.js.map +0 -1
  177. package/dist/admin/assets/StepList-CDZPRd3-.js.map +0 -1
  178. package/dist/admin/assets/Structure-CL51Bvbm.js +0 -2
  179. package/dist/admin/assets/content-DKT2ziPH.js +0 -3
  180. package/dist/admin/assets/content-DKT2ziPH.js.map +0 -1
  181. package/dist/admin/assets/develop-CFlv7IdP.js.map +0 -1
  182. package/dist/admin/assets/es2015-1nJWBurR.js +0 -42
  183. package/dist/admin/assets/es2015-1nJWBurR.js.map +0 -1
  184. package/dist/admin/assets/publishing-RQUj-CyN.js +0 -2
  185. package/dist/admin/assets/publishing-RQUj-CyN.js.map +0 -1
  186. package/dist/admin/assets/schema-BMQEabwO.js +0 -2
  187. package/dist/admin/assets/schema-BMQEabwO.js.map +0 -1
  188. package/dist/admin/assets/sections-SX-oiQoE.js.map +0 -1
  189. package/dist/admin/assets/shapes-EMjfYsXV.js.map +0 -1
  190. package/dist/admin/assets/useMediaUploader-DvtxYXxD.js.map +0 -1
  191. package/dist/cliMain-DzBXO7Oa.js.map +0 -1
  192. package/dist/worker-6ru1tYBs.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{x as r}from"./InfoHint-ymRmHKMr.js";import{b as i,d as a,h as o,m as s,p as c}from"./es2015-1nJWBurR.js";import{t as l}from"./cn-DVhJ55Mo.js";var u=e(t(),1),d=e(n(),1),f=Object.defineProperty,p=(e,t)=>f(e,`name`,{value:t,configurable:!0}),m=`Switch`,[h,g]=s(m),[_,v]=h(m);function y(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:o,form:s,name:c,onCheckedChange:l,required:f,value:p=`on`,internal_do_not_use_render:h}=e,[g,v]=a({prop:n,defaultProp:i??!1,onChange:l,caller:m}),[y,b]=u.useState(null),[x,S]=u.useState(null),C=u.useRef(!1),[w,T]=u.useReducer(e=>e+1,0),E={checked:g,setChecked:v,disabled:o,control:y,setControl:b,name:c,form:s,value:p,hasConsumerStoppedPropagationRef:C,userInteractionCount:w,onUserInteraction:T,required:f,defaultChecked:i,isFormControl:!y||!!s||!!y.closest(`form`),bubbleInput:x,setBubbleInput:S};return(0,d.jsx)(_,{scope:t,...E,children:D(h)?h(E):r})}p(y,`SwitchProvider`);var b=`SwitchTrigger`,x=u.forwardRef(p(function({__scopeSwitch:e,onClick:t,...n},r){let{control:a,form:s,value:l,disabled:f,checked:m,required:h,setControl:g,setChecked:_,hasConsumerStoppedPropagationRef:y,onUserInteraction:x,isFormControl:S,bubbleInput:C}=v(b,e),w=i(r,g),T=u.useRef(m);return u.useEffect(()=>{let e=s?a?.ownerDocument.getElementById(s):a?.form;if(e instanceof HTMLFormElement){let t=p(()=>_(T.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[a,s,_]),(0,d.jsx)(o.button,{type:`button`,role:`switch`,"aria-checked":m,"aria-required":h,"data-state":O(m),"data-disabled":f?``:void 0,disabled:f,value:l,...n,ref:w,onClick:c(t,e=>{x(),_(e=>!e),C&&S&&(y.current=e.isPropagationStopped(),y.current||e.stopPropagation())})})},`SwitchTrigger`)),S=u.forwardRef(p(function(e,t){let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...f}=e;return(0,d.jsx)(y,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(x,{...f,ref:t,__scopeSwitch:n}),e&&(0,d.jsx)(E,{__scopeSwitch:n})]})})},`Switch`)),C=`SwitchThumb`,w=u.forwardRef(p(function(e,t){let{__scopeSwitch:n,...r}=e,i=v(C,n);return(0,d.jsx)(o.span,{"data-state":O(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})},`SwitchThumb`)),T=`SwitchBubbleInput`,E=u.forwardRef(p(function({__scopeSwitch:e,onClick:t,...n},a){let{control:s,hasConsumerStoppedPropagationRef:l,userInteractionCount:f,checked:p,defaultChecked:m,required:h,disabled:g,name:_,value:y,form:b,bubbleInput:x,setBubbleInput:S}=v(T,e),C=i(a,S),w=r(s),E=u.useRef(!1),D=u.useRef(p),O=u.useRef(f);u.useEffect(()=>{let e=x;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=f!==O.current;O.current=f;let i=D.current!==p;D.current=p;let a=!(r&&l.current);if(i&&n){E.current=!r;let t=new Event(`click`,{bubbles:a});n.call(e,p),e.dispatchEvent(t),E.current=!1}},[x,p,l,f]);let k=u.useRef(p);return(0,d.jsx)(o.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:m??k.current,required:h,disabled:g,name:_,value:y,form:b,...n,tabIndex:-1,ref:C,onClick:c(t,e=>{E.current&&e.stopPropagation()}),style:{...n.style,...w,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})},`SwitchBubbleInput`));function D(e){return typeof e==`function`}p(D,`isFunction`);function O(e){return e?`checked`:`unchecked`}p(O,`getState`);function k({className:e,size:t=`default`,...n}){return(0,d.jsx)(S,{"data-slot":`switch`,"data-size":t,className:l(`peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80`,e),...n,children:(0,d.jsx)(w,{"data-slot":`switch-thumb`,className:l(`pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground`)})})}export{k as t};
2
- //# sourceMappingURL=switch-DyCRGDs7.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{x as r}from"./InfoHint-tlSeZB9U.js";import{b as i,d as a,h as o,m as s,p as c}from"./es2015-Cv57ynE1.js";import{t as l}from"./cn-DVhJ55Mo.js";var u=e(t(),1),d=e(n(),1),f=Object.defineProperty,p=(e,t)=>f(e,`name`,{value:t,configurable:!0}),m=`Switch`,[h,g]=s(m),[_,v]=h(m);function y(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:o,form:s,name:c,onCheckedChange:l,required:f,value:p=`on`,internal_do_not_use_render:h}=e,[g,v]=a({prop:n,defaultProp:i??!1,onChange:l,caller:m}),[y,b]=u.useState(null),[x,S]=u.useState(null),C=u.useRef(!1),[w,T]=u.useReducer(e=>e+1,0),E={checked:g,setChecked:v,disabled:o,control:y,setControl:b,name:c,form:s,value:p,hasConsumerStoppedPropagationRef:C,userInteractionCount:w,onUserInteraction:T,required:f,defaultChecked:i,isFormControl:!y||!!s||!!y.closest(`form`),bubbleInput:x,setBubbleInput:S};return(0,d.jsx)(_,{scope:t,...E,children:D(h)?h(E):r})}p(y,`SwitchProvider`);var b=`SwitchTrigger`,x=u.forwardRef(p(function({__scopeSwitch:e,onClick:t,...n},r){let{control:a,form:s,value:l,disabled:f,checked:m,required:h,setControl:g,setChecked:_,hasConsumerStoppedPropagationRef:y,onUserInteraction:x,isFormControl:S,bubbleInput:C}=v(b,e),w=i(r,g),T=u.useRef(m);return u.useEffect(()=>{let e=s?a?.ownerDocument.getElementById(s):a?.form;if(e instanceof HTMLFormElement){let t=p(()=>_(T.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[a,s,_]),(0,d.jsx)(o.button,{type:`button`,role:`switch`,"aria-checked":m,"aria-required":h,"data-state":O(m),"data-disabled":f?``:void 0,disabled:f,value:l,...n,ref:w,onClick:c(t,e=>{x(),_(e=>!e),C&&S&&(y.current=e.isPropagationStopped(),y.current||e.stopPropagation())})})},`SwitchTrigger`)),S=u.forwardRef(p(function(e,t){let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...f}=e;return(0,d.jsx)(y,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(x,{...f,ref:t,__scopeSwitch:n}),e&&(0,d.jsx)(E,{__scopeSwitch:n})]})})},`Switch`)),C=`SwitchThumb`,w=u.forwardRef(p(function(e,t){let{__scopeSwitch:n,...r}=e,i=v(C,n);return(0,d.jsx)(o.span,{"data-state":O(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})},`SwitchThumb`)),T=`SwitchBubbleInput`,E=u.forwardRef(p(function({__scopeSwitch:e,onClick:t,...n},a){let{control:s,hasConsumerStoppedPropagationRef:l,userInteractionCount:f,checked:p,defaultChecked:m,required:h,disabled:g,name:_,value:y,form:b,bubbleInput:x,setBubbleInput:S}=v(T,e),C=i(a,S),w=r(s),E=u.useRef(!1),D=u.useRef(p),O=u.useRef(f);u.useEffect(()=>{let e=x;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=f!==O.current;O.current=f;let i=D.current!==p;D.current=p;let a=!(r&&l.current);if(i&&n){E.current=!r;let t=new Event(`click`,{bubbles:a});n.call(e,p),e.dispatchEvent(t),E.current=!1}},[x,p,l,f]);let k=u.useRef(p);return(0,d.jsx)(o.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:m??k.current,required:h,disabled:g,name:_,value:y,form:b,...n,tabIndex:-1,ref:C,onClick:c(t,e=>{E.current&&e.stopPropagation()}),style:{...n.style,...w,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})},`SwitchBubbleInput`));function D(e){return typeof e==`function`}p(D,`isFunction`);function O(e){return e?`checked`:`unchecked`}p(O,`getState`);function k({className:e,size:t=`default`,...n}){return(0,d.jsx)(S,{"data-slot":`switch`,"data-size":t,className:l(`peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80`,e),...n,children:(0,d.jsx)(w,{"data-slot":`switch-thumb`,className:l(`pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground`)})})}export{k as t};
2
+ //# sourceMappingURL=switch-CiVf05NF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch-DyCRGDs7.js","names":["Switch","Fragment","SwitchPrimitive.Root","SwitchPrimitive.Thumb","__toESM","require_jsx_runtime","useSize","useComposedRefs","useControllableState","Primitive","createContextScope","composeEventHandlers","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","checkedProp","props","checked","setChecked","defaultChecked","onCheckedChange","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","userInteractionCount","onUserInteraction","count","context","form","__scopeSwitch","isFunction","internal_do_not_use_render","children","TRIGGER_NAME","SwitchTrigger","switchProps","composedRefs","forwardedRef","initialCheckedStateRef","associatedForm","reset","required","getState","disabled","onClick","prevChecked","isFormControl","event","Switch$1","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","controlSize","shouldStopClickPropagationRef","prevCheckedRef","prevUserInteractionCountRef","input","inputProto","isUserInteraction","checkedChanged","bubbles","defaultCheckedRef","value","Switch","size","className"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-switch@1.3.7_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_b893b13323262102390249914712580a/node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/components/ui/switch.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const [userInteractionCount, onUserInteraction] = React.useReducer(\n (count) => count + 1,\n 0\n );\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n onUserInteraction,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\n__name(SwitchProvider, \"SwitchProvider\");\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SwitchTrigger2({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n onUserInteraction,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = /* @__PURE__ */ __name(() => setChecked(initialCheckedStateRef.current), \"reset\");\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n onUserInteraction();\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }, \"SwitchTrigger\")\n);\nvar Switch = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Switch2(props, forwardedRef) {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }, \"Switch\")\n);\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SwitchThumb2(props, forwardedRef) {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }, \"SwitchThumb\")\n);\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function SwitchBubbleInput2({ __scopeSwitch, onClick, ...props }, forwardedRef) {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const controlSize = useSize(control);\n const shouldStopClickPropagationRef = React.useRef(false);\n const prevCheckedRef = React.useRef(checked);\n const prevUserInteractionCountRef = React.useRef(userInteractionCount);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;\n prevUserInteractionCountRef.current = userInteractionCount;\n const checkedChanged = prevCheckedRef.current !== checked;\n prevCheckedRef.current = checked;\n const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);\n if (checkedChanged && setChecked) {\n shouldStopClickPropagationRef.current = !isUserInteraction;\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n shouldStopClickPropagationRef.current = false;\n }\n }, [bubbleInput, checked, hasConsumerStoppedPropagationRef, userInteractionCount]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n if (shouldStopClickPropagationRef.current) {\n event.stopPropagation();\n }\n }),\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }, \"SwitchBubbleInput\")\n);\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\n__name(getState, \"getState\");\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"switch-CiVf05NF.js","names":["Switch","Fragment","SwitchPrimitive.Root","SwitchPrimitive.Thumb","__toESM","require_jsx_runtime","useSize","useComposedRefs","useControllableState","Primitive","createContextScope","composeEventHandlers","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","checkedProp","props","checked","setChecked","defaultChecked","onCheckedChange","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","userInteractionCount","onUserInteraction","count","context","form","__scopeSwitch","isFunction","internal_do_not_use_render","children","TRIGGER_NAME","SwitchTrigger","switchProps","composedRefs","forwardedRef","initialCheckedStateRef","associatedForm","reset","required","getState","disabled","onClick","prevChecked","isFormControl","event","Switch$1","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","controlSize","shouldStopClickPropagationRef","prevCheckedRef","prevUserInteractionCountRef","input","inputProto","isUserInteraction","checkedChanged","bubbles","defaultCheckedRef","value","Switch","size","className"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-switch@1.3.7_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_b893b13323262102390249914712580a/node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/components/ui/switch.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const [userInteractionCount, onUserInteraction] = React.useReducer(\n (count) => count + 1,\n 0\n );\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n onUserInteraction,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\n__name(SwitchProvider, \"SwitchProvider\");\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SwitchTrigger2({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n onUserInteraction,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = /* @__PURE__ */ __name(() => setChecked(initialCheckedStateRef.current), \"reset\");\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n onUserInteraction();\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }, \"SwitchTrigger\")\n);\nvar Switch = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Switch2(props, forwardedRef) {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }, \"Switch\")\n);\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function SwitchThumb2(props, forwardedRef) {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }, \"SwitchThumb\")\n);\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function SwitchBubbleInput2({ __scopeSwitch, onClick, ...props }, forwardedRef) {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const controlSize = useSize(control);\n const shouldStopClickPropagationRef = React.useRef(false);\n const prevCheckedRef = React.useRef(checked);\n const prevUserInteractionCountRef = React.useRef(userInteractionCount);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;\n prevUserInteractionCountRef.current = userInteractionCount;\n const checkedChanged = prevCheckedRef.current !== checked;\n prevCheckedRef.current = checked;\n const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);\n if (checkedChanged && setChecked) {\n shouldStopClickPropagationRef.current = !isUserInteraction;\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n shouldStopClickPropagationRef.current = false;\n }\n }, [bubbleInput, checked, hasConsumerStoppedPropagationRef, userInteractionCount]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n if (shouldStopClickPropagationRef.current) {\n event.stopPropagation();\n }\n }),\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }, \"SwitchBubbleInput\")\n);\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\n__name(getState, \"getState\");\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"ignoreList":[0],"mappings":"mTACIgB,EAAY,OAAO,eACnBC,GAAU,EAAQ,IAAUD,EAAUE,EAAQ,OAAQ,CAAE,QAAO,aAAc,EAAK,CAAC,EAWnFC,EAAc,SACd,CAACC,EAAqBC,GAAqBX,EAAmBS,CAAW,EACzE,CAACG,EAAoBC,GAAoBH,EAAoBD,CAAW,EAC5E,SAASK,EAAe,EAAO,CAC7B,GAAM,CACJ,gBACA,QAASC,EACT,WACA,iBACA,WACA,OACA,OACA,kBACA,WACA,QAAQ,KAER,8BACEC,EACE,CAACC,EAASC,GAAcpB,EAAqB,CACjD,KAAMiB,EACN,YAAaI,GAAkB,GAC/B,SAAUC,EACV,OAAQX,CACV,CAAC,EACK,CAACY,EAASC,GAAAnB,EAAoB,SAAS,IAAI,EAC3C,CAACoB,EAAaC,GAAArB,EAAwB,SAAS,IAAI,EACnDsB,EAAAtB,EAAyC,OAAO,EAAK,EACrD,CAACuB,EAAsBC,GAAAxB,EAA2B,WACrD,GAAUyB,EAAQ,EACnB,CACF,EAKMC,EAAU,CACd,UACA,aACA,WACA,UACA,aACA,OACA,OACA,QACA,mCACA,uBACA,oBACA,WACA,iBACA,cAlBoB,IAAU,CAAC,CAACC,GAAQ,CAAC,CAACT,EAAQ,QAAQ,MAAM,EAmBhE,cACA,gBACF,EACA,OAAuB,EAAAhB,EAAA,IAAA,CAAIO,EAAoB,CAAE,MAAOmB,EAAe,GAAGF,EAAS,SAAUG,EAAWC,CAA0B,EAAIA,EAA2BJ,CAAO,EAAIK,CAAS,CAAC,CACxL,CACA3B,EAAOO,EAAgB,gBAAgB,EACvC,IAAIqB,EAAe,gBACfC,EAAgCjC,EAAM,WACxBI,EAAO,SAAwB,CAAE,gBAAe,UAAS,GAAG8B,GAAe,EAAc,CACvG,GAAM,CACJ,UACA,OACA,QACA,WACA,UACA,WACA,aACA,aACA,mCACA,oBACA,gBACA,eACExB,EAAiBsB,EAAcJ,CAAa,EAC1CO,EAAezC,EAAgB0C,EAAcjB,CAAU,EACvDkB,EAAArC,EAA+B,OAAOc,CAAO,EASnD,OARAd,EAAM,cAAgB,CACpB,IAAMsC,EAAiBX,EAAOT,GAAS,cAAc,eAAeS,CAAI,EAAIT,GAAS,KACrF,GAAIoB,aAA0B,gBAAiB,CAC7C,IAAMC,EAAwBnC,MAAaW,EAAWsB,EAAuB,OAAO,EAAG,OAAO,EAE9F,OADAC,EAAe,iBAAiB,QAASC,CAAK,MACjCD,EAAe,oBAAoB,QAASC,CAAK,CAChE,CACF,EAAG,CAACrB,EAASS,EAAMZ,CAAU,CAAC,GACP,EAAAb,EAAA,IAAA,CACrBN,EAAU,OACV,CACE,KAAM,SACN,KAAM,SACN,eAAgBkB,EAChB,gBAAiB0B,EACjB,aAAcC,EAAS3B,CAAO,EAC9B,gBAAiB4B,EAAW,GAAK,IAAK,GACtC,WACA,QACA,GAAGR,EACH,IAAKC,EACL,QAASrC,EAAqB6C,EAAU,GAAU,CAChDnB,EAAkB,EAClBT,EAAY,GAAgB,CAAC6B,CAAW,EACpCxB,GAAeyB,IACjB,EAAiC,QAAUC,EAAM,qBAAqB,EACjExB,EAAiC,SAASwB,EAAM,gBAAgB,EAEzE,CAAC,CACH,CACF,CACF,EAAG,eAAe,CACpB,EACI3D,EAAyBa,EAAM,WAEjBI,EAAO,SAAiB,EAAO,EAAc,CAC3D,GAAM,CACJ,gBACA,OACA,UACA,iBACA,WACA,WACA,QACA,kBACA,OACA,GAAG8B,GACDrB,EACJ,OAAuB,EAAAX,EAAA,IAAA,CACrBS,EACA,CACE,gBACA,UACA,iBACA,WACA,WACA,kBACA,OACA,OACA,QACA,4BAA6B,CAAE,oBAAoC,EAAAT,EAAA,KAAA,CAAKd,EAAAA,SAAU,CAAE,SAAU,EAC5E,EAAAc,EAAA,IAAA,CACd+B,EACA,CACE,GAAGC,EACH,IAAKE,EACL,eACF,CACF,EACAS,IAAiC,EAAA3C,EAAA,IAAA,CAC/B8C,EACA,CACE,eACF,CACF,CACF,CAAE,CAAC,CACL,CACF,CACF,EAAG,QAAQ,CACb,EACIC,EAAa,cACbC,EAA8BlD,EAAM,WACtBI,EAAO,SAAsB,EAAO,EAAc,CAChE,GAAM,CAAE,gBAAe,GAAG+C,GAAetC,EACnCa,EAAUhB,EAAiBuC,EAAYrB,CAAa,EAC1D,OAAuB,EAAA1B,EAAA,IAAA,CACrBN,EAAU,KACV,CACE,aAAc6C,EAASf,EAAQ,OAAO,EACtC,gBAAiBA,EAAQ,SAAW,GAAK,IAAK,GAC9C,GAAGyB,EACH,IAAKf,CACP,CACF,CACF,EAAG,aAAa,CAClB,EACIgB,EAAoB,oBACpBJ,EAAoChD,EAAM,WAE5BI,EAAO,SAA4B,CAAE,gBAAe,UAAS,GAAGS,GAAS,EAAc,CACrG,GAAM,CACJ,UACA,mCACA,uBACA,UACA,iBACA,WACA,WACA,OACA,QACA,OACA,cACA,kBACEH,EAAiB0C,EAAmBxB,CAAa,EAC/CO,EAAezC,EAAgB0C,EAAcf,CAAc,EAC3DgC,EAAc5D,EAAQyB,CAAO,EAC7BoC,EAAAtD,EAAsC,OAAO,EAAK,EAClDuD,EAAAvD,EAAuB,OAAOc,CAAO,EACrC0C,EAAAxD,EAAoC,OAAOuB,CAAoB,EACrEvB,EAAM,cAAgB,CACpB,IAAMyD,EAAQrC,EACd,GAAI,CAACqC,EAAO,OACZ,IAAMC,EAAa,OAAO,iBAAiB,UAKrC3C,EAJa,OAAO,yBACxB2C,EACA,SAE0B,CAAC,CAAC,IACxBC,EAAoBpC,IAAyBiC,EAA4B,QAC/E,EAA4B,QAAUjC,EACtC,IAAMqC,EAAiBL,EAAe,UAAYzC,EAClD,EAAe,QAAUA,EACzB,IAAM+C,EAAU,EAAEF,GAAqBrC,EAAiC,SACxE,GAAIsC,GAAkB7C,EAAY,CAChC,EAA8B,QAAU,CAAC4C,EACzC,IAAMb,EAAQ,IAAI,MAAM,QAAS,CAAE,SAAQ,CAAC,EAC5C/B,EAAW,KAAK0C,EAAO3C,CAAO,EAC9B2C,EAAM,cAAcX,CAAK,EACzB,EAA8B,QAAU,EAC1C,CACF,EAAG,CAAC1B,EAAaN,EAASQ,EAAkCC,CAAoB,CAAC,EACjF,IAAMuC,EAAA9D,EAA0B,OAAOc,CAAO,EAC9C,OAAuB,EAAAZ,EAAA,IAAA,CACrBN,EAAU,MACV,CACE,KAAM,WACN,cAAe,GACf,eAAgBoB,GAAkB8C,EAAkB,QACpD,WACA,WACA,OACA,QACA,OACA,GAAGjD,EACH,SAAU,GACV,IAAKsB,EACL,QAASrC,EAAqB6C,EAAU,GAAU,CAC5CW,EAA8B,SAChCR,EAAM,gBAAgB,CAE1B,CAAC,EACD,MAAO,CACL,GAAGjC,EAAM,MACT,GAAGwC,EACH,SAAU,WACV,cAAe,OACf,QAAS,EACT,OAAQ,EAIR,UAAW,mBACb,CACF,CACF,CACF,EAAG,mBAAmB,CACxB,EACA,SAASxB,EAAW,EAAO,CACzB,OAAO,OAAOkC,GAAU,UAC1B,CACA3D,EAAOyB,EAAY,YAAY,EAC/B,SAASY,EAAS,EAAS,CACzB,OAAO3B,EAAU,UAAY,WAC/B,CACAV,EAAOqC,EAAU,UAAU,EC1Q3B,SAASuB,EAAO,CACd,YACA,OAAO,UACP,GAAGnD,GAGF,CACD,OACE,EAAAX,EAAA,IAAA,CAACb,EAAD,CACE,YAAU,SACV,YAAW4E,EACX,UAAWlE,EACT,ycACAmE,CACF,EACA,GAAIrD,EAEJ,UAAA,EAAAX,EAAA,IAAA,CAACZ,EAAD,CACE,YAAU,eACV,UAAWS,EACT,8UACF,CACD,CAAA,CACmB,CAAA,CAE1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme-Cv-MfOv8.js","names":["create","persistentStorage","persist","THEME_KEY_PATTERN","THEME_VARIANTS","resolveScheme","variants","appearance","lookValue","theme","variant","BUILT_IN_THEMES","DEFAULT_THEME_KEY","DEFAULT_THEME_VARIANTS","THEME_STORAGE_KEY","THEME_STORAGE_VERSION","DEFAULT_THEME_STATE","LEGACY_THEME_STATE","isRecord","value","isThemeVariant","migrateThemeState","version","sanitizeThemeState","persisted","state","cached","meta","useThemeStore","set","current"],"sources":["../../src/helpers/theme.ts","../../src/constants/themes.ts","../../src/stores/theme.ts"],"sourcesContent":["import type { ThemeVariant } from '@shapio/schema';\n\n/**\n * The variant actually rendered: the saved one when the theme has it, else the theme's first. Nothing follows\n * the operating system. public/theme-init.js repeats this before first paint (test/themeInit.test.ts keeps\n * the two in step).\n */\nexport const resolveScheme = (appearance: ThemeVariant, variants: readonly ThemeVariant[]): ThemeVariant =>\n variants.includes(appearance) ? appearance : (variants[0] ?? appearance);\n\n/** A look is one variant of one theme; its radio value is `<theme key>:<variant>` (keys never hold a colon). */\nexport const lookValue = (theme: string, variant: ThemeVariant) => `${theme}:${variant}`;\n","import type { BuiltInThemeKey, ThemeVariant } from '@shapio/schema';\n\nexport type BuiltInThemeMeta = {\n key: BuiltInThemeKey;\n /** The one variant the theme defines (styles/themes/<key>.css): every built-in theme is a single look. */\n variants: readonly ThemeVariant[];\n};\n\n/** The admin's own looks, in menu order: dark, then light. Names and descriptions: `appearance.themes.<key>.*`. */\nexport const BUILT_IN_THEMES: readonly BuiltInThemeMeta[] = [\n { key: 'shapio', variants: ['dark'] },\n { key: 'classic', variants: ['dark'] },\n { key: 'murdered-out', variants: ['dark'] },\n { key: 'forest', variants: ['dark'] },\n { key: 'snowed', variants: ['light'] },\n { key: 'butter', variants: ['light'] },\n];\n\nexport const DEFAULT_THEME_KEY: BuiltInThemeKey = 'shapio';\n\nexport const DEFAULT_THEME_VARIANTS: readonly ThemeVariant[] = ['dark'];\n","import { THEME_KEY_PATTERN, THEME_VARIANTS, type ThemeVariant } from '@shapio/schema';\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { BUILT_IN_THEMES, DEFAULT_THEME_KEY, DEFAULT_THEME_VARIANTS } from '@/constants/themes';\nimport { persistentStorage } from '@/helpers/safeStorage';\nimport { resolveScheme } from '@/helpers/theme';\n\ntype ThemeState = {\n /** A theme key: built in (constants/themes.ts) or declared by an extension. */\n theme: string;\n /** The variant of that theme the person picked (a look is one theme in one variant). */\n appearance: ThemeVariant;\n /**\n * The chosen theme's variants, cached so public/theme-init.js can render an extension theme's look before\n * the admin has loaded the theme list.\n */\n variants: readonly ThemeVariant[];\n setLook: (theme: string, appearance: ThemeVariant, variants: readonly ThemeVariant[]) => void;\n};\n\n/** Key and shape are read before first paint by public/theme-init.js; keep them in sync. */\nexport const THEME_STORAGE_KEY = 'shapio.theme';\n\n/** 1: `{ preference }`, before themes. 2: themes plus System / Light / Dark. 3: one look, nothing follows the OS. */\nconst THEME_STORAGE_VERSION = 3;\n\ntype PersistedTheme = Pick<ThemeState, 'theme' | 'appearance' | 'variants'>;\n\nexport const DEFAULT_THEME_STATE: PersistedTheme = {\n theme: DEFAULT_THEME_KEY,\n appearance: 'dark',\n variants: DEFAULT_THEME_VARIANTS,\n};\n\n/** Version 1 (the original palette, any colour mode) becomes Cobalt, the original dark look. */\nconst LEGACY_THEME_STATE: PersistedTheme = { theme: 'classic', appearance: 'dark', variants: ['dark'] };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nconst isThemeVariant = (value: unknown): value is ThemeVariant =>\n typeof value === 'string' && (THEME_VARIANTS as readonly string[]).includes(value);\n\nexport const migrateThemeState = (persisted: unknown, version: number): PersistedTheme =>\n version < 2 ? LEGACY_THEME_STATE : sanitizeThemeState(isRecord(persisted) ? persisted : {});\n\n/**\n * Drops anything malformed (edited storage, an older admin) back to the defaults, field by field. A built-in\n * theme's variants come from the registry, not the cache (they changed in version 3), and the appearance is\n * always a variant the theme has: version 2's \"system\", or a variant a theme lost, becomes its first.\n */\nconst sanitizeThemeState = (state: Record<string, unknown>): PersistedTheme => {\n const theme =\n typeof state.theme === 'string' && THEME_KEY_PATTERN.test(state.theme)\n ? state.theme\n : DEFAULT_THEME_STATE.theme;\n const cached = Array.isArray(state.variants)\n ? THEME_VARIANTS.filter((variant) => (state.variants as unknown[]).includes(variant))\n : [];\n const variants =\n BUILT_IN_THEMES.find((meta) => meta.key === theme)?.variants ??\n (cached.length > 0 ? cached : DEFAULT_THEME_STATE.variants);\n const appearance = isThemeVariant(state.appearance) ? state.appearance : (variants[0] ?? 'dark');\n return { theme, appearance: resolveScheme(appearance, variants), variants };\n};\n\nexport const useThemeStore = create<ThemeState>()(\n persist(\n (set) => ({\n ...DEFAULT_THEME_STATE,\n setLook: (theme, appearance, variants) => set({ theme, appearance, variants }),\n }),\n {\n name: THEME_STORAGE_KEY,\n storage: persistentStorage,\n version: THEME_STORAGE_VERSION,\n migrate: migrateThemeState,\n partialize: ({ theme, appearance, variants }) => ({ theme, appearance, variants }),\n merge: (persisted, current) => ({\n ...current,\n ...sanitizeThemeState(isRecord(persisted) ? persisted : {}),\n }),\n },\n ),\n);\n"],"mappings":"qEAOA,IAAaK,GAAiB,EAA0B,IACtDC,EAAS,SAASC,CAAU,EAAIA,EAAcD,EAAS,IAAMC,EAGlDC,GAAa,EAAe,IAA0B,GAAGC,EAAM,GAAGC,ICFlEC,EAA+C,CAC1D,CAAE,IAAK,SAAU,SAAU,CAAC,MAAM,CAAE,EACpC,CAAE,IAAK,UAAW,SAAU,CAAC,MAAM,CAAE,EACrC,CAAE,IAAK,eAAgB,SAAU,CAAC,MAAM,CAAE,EAC1C,CAAE,IAAK,SAAU,SAAU,CAAC,MAAM,CAAE,EACpC,CAAE,IAAK,SAAU,SAAU,CAAC,OAAO,CAAE,EACrC,CAAE,IAAK,SAAU,SAAU,CAAC,OAAO,CAAE,CACvC,EAEaC,EAAqC,SAErCC,EAAkD,CAAC,MAAM,ECCzDC,EAAoB,eAG3BC,EAAwB,EAIjBC,EAAsC,CACjD,MAAOJ,EACP,WAAY,OACZ,SAAUC,CACZ,EAGMI,EAAqC,CAAE,MAAO,UAAW,WAAY,OAAQ,SAAU,CAAC,MAAM,CAAE,EAEhGC,EAAY,GAChB,OAAOC,GAAU,YAAYA,EAEzBC,EAAkB,GACtB,OAAOD,GAAU,UAAaf,EAAqC,SAASe,CAAK,EAEtEE,GAAqB,EAAoB,IACpDC,EAAU,EAAIL,EAAqBM,EAAmBL,EAASM,CAAS,EAAIA,EAAY,CAAC,CAAC,EAOtFD,EAAsB,GAAmD,CAC7E,IAAMd,EACJ,OAAOgB,EAAM,OAAU,UAAYtB,EAAkB,KAAKsB,EAAM,KAAK,EACjEA,EAAM,MACNT,EAAoB,MACpBU,EAAS,MAAM,QAAQD,EAAM,QAAQ,EACvCrB,EAAe,OAAQ,GAAaqB,EAAM,SAAuB,SAASf,CAAO,CAAC,EAClF,CAAC,EACCJ,EACJK,EAAgB,KAAM,GAASgB,EAAK,MAAQlB,CAAK,CAAC,EAAE,WACnDiB,EAAO,OAAS,EAAIA,EAASV,EAAoB,UAEpD,MAAO,CAAE,QAAO,WAAYX,EADTe,EAAeK,EAAM,UAAU,EAAIA,EAAM,WAAcnB,EAAS,IAAM,OACnCA,CAAQ,EAAG,UAAS,CAC5E,EAEasB,EAAgB5B,EAAmB,CAAC,CAC/CE,EACG,IAAS,CACR,GAAGc,EACH,SAAU,EAAO,EAAY,IAAaa,EAAI,CAAE,QAAO,aAAY,UAAS,CAAC,CAC/E,GACA,CACE,KAAMf,EACN,QAASb,EACT,QAASc,EACT,QAASM,EACT,YAAa,CAAE,QAAO,aAAY,eAAgB,CAAE,QAAO,aAAY,UAAS,GAChF,OAAQ,EAAW,KAAa,CAC9B,GAAGS,EACH,GAAGP,EAAmBL,EAASM,CAAS,EAAIA,EAAY,CAAC,CAAC,CAC5D,EACF,CACF,CACF"}
1
+ {"version":3,"file":"theme-Cv-MfOv8.js","names":["create","persistentStorage","persist","THEME_KEY_PATTERN","THEME_VARIANTS","resolveScheme","variants","appearance","lookValue","theme","variant","BUILT_IN_THEMES","DEFAULT_THEME_KEY","DEFAULT_THEME_VARIANTS","THEME_STORAGE_KEY","THEME_STORAGE_VERSION","DEFAULT_THEME_STATE","LEGACY_THEME_STATE","isRecord","value","isThemeVariant","migrateThemeState","version","sanitizeThemeState","persisted","state","cached","meta","useThemeStore","set","current"],"sources":["../../src/helpers/theme.ts","../../src/constants/themes.ts","../../src/stores/theme.ts"],"sourcesContent":["import type { ThemeVariant } from '@shapio/schema';\n\n/**\n * The variant actually rendered: the saved one when the theme has it, else the theme's first. Nothing follows\n * the operating system. public/theme-init.js repeats this before first paint (test/themeInit.test.ts keeps\n * the two in step).\n */\nexport const resolveScheme = (appearance: ThemeVariant, variants: readonly ThemeVariant[]): ThemeVariant =>\n variants.includes(appearance) ? appearance : (variants[0] ?? appearance);\n\n/** A look is one variant of one theme; its radio value is `<theme key>:<variant>` (keys never hold a colon). */\nexport const lookValue = (theme: string, variant: ThemeVariant) => `${theme}:${variant}`;\n","import type { BuiltInThemeKey, ThemeVariant } from '@shapio/schema';\n\nexport type BuiltInThemeMeta = {\n key: BuiltInThemeKey;\n /** The one variant the theme defines (styles/themes/<key>.css): every built-in theme is a single look. */\n variants: readonly ThemeVariant[];\n};\n\n/** The admin's own looks, in menu order: dark, then light. Names and descriptions: `appearance.themes.<key>.*`. */\nexport const BUILT_IN_THEMES: readonly BuiltInThemeMeta[] = [\n { key: 'shapio', variants: ['dark'] },\n { key: 'classic', variants: ['dark'] },\n { key: 'murdered-out', variants: ['dark'] },\n { key: 'forest', variants: ['dark'] },\n { key: 'snowed', variants: ['light'] },\n { key: 'butter', variants: ['light'] },\n];\n\nexport const DEFAULT_THEME_KEY: BuiltInThemeKey = 'shapio';\n\nexport const DEFAULT_THEME_VARIANTS: readonly ThemeVariant[] = ['dark'];\n","import { THEME_KEY_PATTERN, THEME_VARIANTS, type ThemeVariant } from '@shapio/schema';\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { BUILT_IN_THEMES, DEFAULT_THEME_KEY, DEFAULT_THEME_VARIANTS } from '@/constants/themes';\nimport { persistentStorage } from '@/helpers/safeStorage';\nimport { resolveScheme } from '@/helpers/theme';\n\ntype ThemeState = {\n /** A theme key: built in (constants/themes.ts) or declared by an extension. */\n theme: string;\n /** The variant of that theme the person picked (a look is one theme in one variant). */\n appearance: ThemeVariant;\n /**\n * The chosen theme's variants, cached so public/theme-init.js can render an extension theme's look before\n * the admin has loaded the theme list.\n */\n variants: readonly ThemeVariant[];\n setLook: (theme: string, appearance: ThemeVariant, variants: readonly ThemeVariant[]) => void;\n};\n\n/** Key and shape are read before first paint by public/theme-init.js; keep them in sync. */\nexport const THEME_STORAGE_KEY = 'shapio.theme';\n\n/** 1: `{ preference }`, before themes. 2: themes plus System / Light / Dark. 3: one look, nothing follows the OS. */\nconst THEME_STORAGE_VERSION = 3;\n\ntype PersistedTheme = Pick<ThemeState, 'theme' | 'appearance' | 'variants'>;\n\nexport const DEFAULT_THEME_STATE: PersistedTheme = {\n theme: DEFAULT_THEME_KEY,\n appearance: 'dark',\n variants: DEFAULT_THEME_VARIANTS,\n};\n\n/** Version 1 (the original palette, any color mode) becomes Cobalt, the original dark look. */\nconst LEGACY_THEME_STATE: PersistedTheme = { theme: 'classic', appearance: 'dark', variants: ['dark'] };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nconst isThemeVariant = (value: unknown): value is ThemeVariant =>\n typeof value === 'string' && (THEME_VARIANTS as readonly string[]).includes(value);\n\nexport const migrateThemeState = (persisted: unknown, version: number): PersistedTheme =>\n version < 2 ? LEGACY_THEME_STATE : sanitizeThemeState(isRecord(persisted) ? persisted : {});\n\n/**\n * Drops anything malformed (edited storage, an older admin) back to the defaults, field by field. A built-in\n * theme's variants come from the registry, not the cache (they changed in version 3), and the appearance is\n * always a variant the theme has: version 2's \"system\", or a variant a theme lost, becomes its first.\n */\nconst sanitizeThemeState = (state: Record<string, unknown>): PersistedTheme => {\n const theme =\n typeof state.theme === 'string' && THEME_KEY_PATTERN.test(state.theme)\n ? state.theme\n : DEFAULT_THEME_STATE.theme;\n const cached = Array.isArray(state.variants)\n ? THEME_VARIANTS.filter((variant) => (state.variants as unknown[]).includes(variant))\n : [];\n const variants =\n BUILT_IN_THEMES.find((meta) => meta.key === theme)?.variants ??\n (cached.length > 0 ? cached : DEFAULT_THEME_STATE.variants);\n const appearance = isThemeVariant(state.appearance) ? state.appearance : (variants[0] ?? 'dark');\n return { theme, appearance: resolveScheme(appearance, variants), variants };\n};\n\nexport const useThemeStore = create<ThemeState>()(\n persist(\n (set) => ({\n ...DEFAULT_THEME_STATE,\n setLook: (theme, appearance, variants) => set({ theme, appearance, variants }),\n }),\n {\n name: THEME_STORAGE_KEY,\n storage: persistentStorage,\n version: THEME_STORAGE_VERSION,\n migrate: migrateThemeState,\n partialize: ({ theme, appearance, variants }) => ({ theme, appearance, variants }),\n merge: (persisted, current) => ({\n ...current,\n ...sanitizeThemeState(isRecord(persisted) ? persisted : {}),\n }),\n },\n ),\n);\n"],"mappings":"qEAOA,IAAaK,GAAiB,EAA0B,IACtDC,EAAS,SAASC,CAAU,EAAIA,EAAcD,EAAS,IAAMC,EAGlDC,GAAa,EAAe,IAA0B,GAAGC,EAAM,GAAGC,ICFlEC,EAA+C,CAC1D,CAAE,IAAK,SAAU,SAAU,CAAC,MAAM,CAAE,EACpC,CAAE,IAAK,UAAW,SAAU,CAAC,MAAM,CAAE,EACrC,CAAE,IAAK,eAAgB,SAAU,CAAC,MAAM,CAAE,EAC1C,CAAE,IAAK,SAAU,SAAU,CAAC,MAAM,CAAE,EACpC,CAAE,IAAK,SAAU,SAAU,CAAC,OAAO,CAAE,EACrC,CAAE,IAAK,SAAU,SAAU,CAAC,OAAO,CAAE,CACvC,EAEaC,EAAqC,SAErCC,EAAkD,CAAC,MAAM,ECCzDC,EAAoB,eAG3BC,EAAwB,EAIjBC,EAAsC,CACjD,MAAOJ,EACP,WAAY,OACZ,SAAUC,CACZ,EAGMI,EAAqC,CAAE,MAAO,UAAW,WAAY,OAAQ,SAAU,CAAC,MAAM,CAAE,EAEhGC,EAAY,GAChB,OAAOC,GAAU,YAAYA,EAEzBC,EAAkB,GACtB,OAAOD,GAAU,UAAaf,EAAqC,SAASe,CAAK,EAEtEE,GAAqB,EAAoB,IACpDC,EAAU,EAAIL,EAAqBM,EAAmBL,EAASM,CAAS,EAAIA,EAAY,CAAC,CAAC,EAOtFD,EAAsB,GAAmD,CAC7E,IAAMd,EACJ,OAAOgB,EAAM,OAAU,UAAYtB,EAAkB,KAAKsB,EAAM,KAAK,EACjEA,EAAM,MACNT,EAAoB,MACpBU,EAAS,MAAM,QAAQD,EAAM,QAAQ,EACvCrB,EAAe,OAAQ,GAAaqB,EAAM,SAAuB,SAASf,CAAO,CAAC,EAClF,CAAC,EACCJ,EACJK,EAAgB,KAAM,GAASgB,EAAK,MAAQlB,CAAK,CAAC,EAAE,WACnDiB,EAAO,OAAS,EAAIA,EAASV,EAAoB,UAEpD,MAAO,CAAE,QAAO,WAAYX,EADTe,EAAeK,EAAM,UAAU,EAAIA,EAAM,WAAcnB,EAAS,IAAM,OACnCA,CAAQ,EAAG,UAAS,CAC5E,EAEasB,EAAgB5B,EAAmB,CAAC,CAC/CE,EACG,IAAS,CACR,GAAGc,EACH,SAAU,EAAO,EAAY,IAAaa,EAAI,CAAE,QAAO,aAAY,UAAS,CAAC,CAC/E,GACA,CACE,KAAMf,EACN,QAASb,EACT,QAASc,EACT,QAASM,EACT,YAAa,CAAE,QAAO,aAAY,eAAgB,CAAE,QAAO,aAAY,UAAS,GAChF,OAAQ,EAAW,KAAa,CAC9B,GAAGS,EACH,GAAGP,EAAmBL,EAASM,CAAS,EAAIA,EAAY,CAAC,CAAC,CAC5D,EACF,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{c as r,l as i,o as a,s as o,u as s}from"./InfoHint-ymRmHKMr.js";import{b as c,d as l,f as u,h as d,i as f,l as p,m,o as h,p as g,u as _,y as v}from"./es2015-1nJWBurR.js";import{h as y}from"./field-BDCHXkZE.js";import{t as b}from"./cn-DVhJ55Mo.js";var x=e(t(),1),S=e(n(),1),C=Object.defineProperty,w=(e,t)=>C(e,`name`,{value:t,configurable:!0}),[T,E]=m(`Tooltip`,[s]),D=s(),O=`TooltipProvider`,k=700,A=`tooltip.open`,[j,M]=T(O),N=w(e=>{let{__scopeTooltip:t,delayDuration:n=k,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=x.useRef(!0),s=x.useRef(!1),c=x.useRef(0);return x.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,S.jsx)(j,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:x.useCallback(()=>{r<=0||(window.clearTimeout(c.current),o.current=!1)},[r]),onClose:x.useCallback(()=>{r<=0||(window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r))},[r]),isPointerInTransitRef:s,onPointerInTransitChange:x.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})},`TooltipProvider`),P=`Tooltip`,[ee,F]=T(P),I=w(e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:a,onOpenChange:o,disableHoverableContent:s,delayDuration:c}=e,u=M(P,e.__scopeTooltip),d=D(t),[f,m]=x.useState(null),[h,g]=x.useState(void 0),_=p(),v=x.useRef(0),y=s??u.disableHoverableContent,b=c??u.delayDuration,C=x.useRef(!1),[T,E]=l({prop:r,defaultProp:a??!1,onChange:w(e=>{e?(u.onOpen(),document.dispatchEvent(new CustomEvent(A))):u.onClose(),o?.(e)},`onChange`),caller:P}),O=x.useMemo(()=>T?C.current?`delayed-open`:`instant-open`:`closed`,[T]),k=x.useCallback(()=>{window.clearTimeout(v.current),v.current=0,C.current=!1,E(!0)},[E]),j=x.useCallback(()=>{window.clearTimeout(v.current),v.current=0,E(!1)},[E]),N=x.useCallback(()=>{window.clearTimeout(v.current),v.current=window.setTimeout(()=>{C.current=!0,E(!0),v.current=0},b)},[b,E]);x.useEffect(()=>()=>{v.current&&=(window.clearTimeout(v.current),0)},[]);let F=h??_;return(0,S.jsx)(i,{...d,children:(0,S.jsx)(ee,{scope:t,contentId:F,setContentId:g,open:T,stateAttribute:O,trigger:f,onTriggerChange:m,onTriggerEnter:x.useCallback(()=>{u.isOpenDelayedRef.current?N():k()},[u.isOpenDelayedRef,N,k]),onTriggerLeave:x.useCallback(()=>{y?j():(window.clearTimeout(v.current),v.current=0)},[j,y]),onOpen:k,onClose:j,disableHoverableContent:y,children:n})})},`Tooltip`),L=`TooltipTrigger`,R=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=F(L,n),o=M(L,n),s=D(n),l=x.useRef(null),u=c(t,l,i.onTriggerChange),f=x.useRef(!1),p=x.useRef(!1),m=x.useCallback(()=>f.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener(`pointerup`,m),[m]),(0,S.jsx)(a,{asChild:!0,...s,children:(0,S.jsx)(d.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:u,onPointerMove:g(e.onPointerMove,e=>{e.pointerType!==`touch`&&!p.current&&!o.isPointerInTransitRef.current&&(i.onTriggerEnter(),p.current=!0)}),onPointerLeave:g(e.onPointerLeave,()=>{i.onTriggerLeave(),p.current=!1}),onPointerDown:g(e.onPointerDown,()=>{i.open&&i.onClose(),f.current=!0,document.addEventListener(`pointerup`,m,{once:!0})}),onFocus:g(e.onFocus,()=>{f.current||i.onOpen()}),onBlur:g(e.onBlur,i.onClose),onClick:g(e.onClick,i.onClose)})})},`TooltipTrigger`)),z=`TooltipPortal`,[B,V]=T(z,{forceMount:void 0}),H=w(e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=F(z,t);return(0,S.jsx)(B,{scope:t,forceMount:n,children:(0,S.jsx)(_,{present:n||a.open,children:(0,S.jsx)(f,{asChild:!0,container:i,children:r})})})},`TooltipPortal`),U=`TooltipContent`,te=x.forwardRef(w(function(e,t){let n=V(U,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=F(U,e.__scopeTooltip);return(0,S.jsx)(_,{present:r||o.open,children:o.disableHoverableContent?(0,S.jsx)(G,{side:i,...a,ref:t}):(0,S.jsx)(ne,{side:i,...a,ref:t})})},`TooltipContent`)),ne=x.forwardRef(w(function(e,t){let n=F(U,e.__scopeTooltip),r=M(U,e.__scopeTooltip),i=x.useRef(null),a=c(t,i),[o,s]=x.useState(null),{trigger:l,onClose:u}=n,d=i.current,{onPointerInTransitChange:f}=r,p=x.useCallback(()=>{s(null),f(!1)},[f]),m=x.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=J(r,q(r,n.getBoundingClientRect())),a=Y(t.getBoundingClientRect()),o=Z([...i,...a]);s(o),f(!0)},[f]);return x.useEffect(()=>()=>p(),[p]),x.useEffect(()=>{if(l&&d){let e=w(e=>m(e,d),`handleTriggerLeave`),t=w(e=>m(e,l),`handleContentLeave`);return l.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{l.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[l,d,m,p]),x.useEffect(()=>{if(o){let e=w(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=l?.contains(t)||d?.contains(t),i=!X(n,o);r?p():i&&(p(),u())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,o,u,p]),(0,S.jsx)(G,{...e,ref:a})},`TooltipContentHoverable`)),W=v(`TooltipContent`),G=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,children:i,"aria-label":a,id:o,onEscapeKeyDown:s,onPointerDownOutside:c,...l}=e,d=F(U,n),f=D(n),{onClose:p}=d;x.useEffect(()=>(document.addEventListener(A,p),()=>document.removeEventListener(A,p)),[p]),x.useEffect(()=>{if(d.trigger){let e=w(e=>{e.target instanceof Node&&e.target.contains(d.trigger)&&p()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[d.trigger,p]);let{setContentId:m}=d;return u(()=>(m(o),()=>{m(void 0)}),[o,m]),(0,S.jsx)(h,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:e=>e.preventDefault(),onDismiss:p,children:(0,S.jsxs)(r,{"data-state":d.stateAttribute,role:a?void 0:`tooltip`,id:a?void 0:d.contentId,...f,...l,ref:t,style:{...l.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,S.jsx)(W,{children:i}),a?(0,S.jsx)(y,{id:d.contentId,role:`tooltip`,children:a}):null]})})},`TooltipContentImpl`)),K=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=D(n);return(0,S.jsx)(o,{...i,...r,ref:t})},`TooltipArrow`));function q(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}w(q,`getExitSideFromRect`);function J(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n})}return r}w(J,`getPaddedExitPoints`);function Y(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}w(Y,`getPointsFromRect`);function X(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}w(X,`isPointInPolygon`);function Z(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:+(e.y>t.y)),Q(t)}w(Z,`getHull`);function Q(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}w(Q,`getHullPresorted`);var re=N,ie=I,$=R,ae=H,oe=te,se=K;function ce({delayDuration:e=0,...t}){return(0,S.jsx)(re,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function le({...e}){return(0,S.jsx)(ie,{"data-slot":`tooltip`,...e})}function ue({...e}){return(0,S.jsx)($,{"data-slot":`tooltip-trigger`,...e})}function de({className:e,sideOffset:t=0,children:n,...r}){return(0,S.jsx)(ae,{children:(0,S.jsxs)(oe,{"data-slot":`tooltip-content`,sideOffset:t,className:b(`z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,e),...r,children:[n,(0,S.jsx)(se,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}export{ue as i,de as n,ce as r,le as t};
2
- //# sourceMappingURL=tooltip-CCOeMqiL.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{c as r,l as i,o as a,s as o,u as s}from"./InfoHint-tlSeZB9U.js";import{b as c,d as l,f as u,h as d,i as f,l as p,m,o as h,p as g,u as _,y as v}from"./es2015-Cv57ynE1.js";import{h as y}from"./field-D-xWW2E7.js";import{t as b}from"./cn-DVhJ55Mo.js";var x=e(t(),1),S=e(n(),1),C=Object.defineProperty,w=(e,t)=>C(e,`name`,{value:t,configurable:!0}),[T,E]=m(`Tooltip`,[s]),D=s(),O=`TooltipProvider`,k=700,A=`tooltip.open`,[j,M]=T(O),N=w(e=>{let{__scopeTooltip:t,delayDuration:n=k,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=x.useRef(!0),s=x.useRef(!1),c=x.useRef(0);return x.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,S.jsx)(j,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:x.useCallback(()=>{r<=0||(window.clearTimeout(c.current),o.current=!1)},[r]),onClose:x.useCallback(()=>{r<=0||(window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r))},[r]),isPointerInTransitRef:s,onPointerInTransitChange:x.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})},`TooltipProvider`),P=`Tooltip`,[ee,F]=T(P),I=w(e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:a,onOpenChange:o,disableHoverableContent:s,delayDuration:c}=e,u=M(P,e.__scopeTooltip),d=D(t),[f,m]=x.useState(null),[h,g]=x.useState(void 0),_=p(),v=x.useRef(0),y=s??u.disableHoverableContent,b=c??u.delayDuration,C=x.useRef(!1),[T,E]=l({prop:r,defaultProp:a??!1,onChange:w(e=>{e?(u.onOpen(),document.dispatchEvent(new CustomEvent(A))):u.onClose(),o?.(e)},`onChange`),caller:P}),O=x.useMemo(()=>T?C.current?`delayed-open`:`instant-open`:`closed`,[T]),k=x.useCallback(()=>{window.clearTimeout(v.current),v.current=0,C.current=!1,E(!0)},[E]),j=x.useCallback(()=>{window.clearTimeout(v.current),v.current=0,E(!1)},[E]),N=x.useCallback(()=>{window.clearTimeout(v.current),v.current=window.setTimeout(()=>{C.current=!0,E(!0),v.current=0},b)},[b,E]);x.useEffect(()=>()=>{v.current&&=(window.clearTimeout(v.current),0)},[]);let F=h??_;return(0,S.jsx)(i,{...d,children:(0,S.jsx)(ee,{scope:t,contentId:F,setContentId:g,open:T,stateAttribute:O,trigger:f,onTriggerChange:m,onTriggerEnter:x.useCallback(()=>{u.isOpenDelayedRef.current?N():k()},[u.isOpenDelayedRef,N,k]),onTriggerLeave:x.useCallback(()=>{y?j():(window.clearTimeout(v.current),v.current=0)},[j,y]),onOpen:k,onClose:j,disableHoverableContent:y,children:n})})},`Tooltip`),L=`TooltipTrigger`,R=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=F(L,n),o=M(L,n),s=D(n),l=x.useRef(null),u=c(t,l,i.onTriggerChange),f=x.useRef(!1),p=x.useRef(!1),m=x.useCallback(()=>f.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener(`pointerup`,m),[m]),(0,S.jsx)(a,{asChild:!0,...s,children:(0,S.jsx)(d.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:u,onPointerMove:g(e.onPointerMove,e=>{e.pointerType!==`touch`&&!p.current&&!o.isPointerInTransitRef.current&&(i.onTriggerEnter(),p.current=!0)}),onPointerLeave:g(e.onPointerLeave,()=>{i.onTriggerLeave(),p.current=!1}),onPointerDown:g(e.onPointerDown,()=>{i.open&&i.onClose(),f.current=!0,document.addEventListener(`pointerup`,m,{once:!0})}),onFocus:g(e.onFocus,()=>{f.current||i.onOpen()}),onBlur:g(e.onBlur,i.onClose),onClick:g(e.onClick,i.onClose)})})},`TooltipTrigger`)),z=`TooltipPortal`,[B,V]=T(z,{forceMount:void 0}),H=w(e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=F(z,t);return(0,S.jsx)(B,{scope:t,forceMount:n,children:(0,S.jsx)(_,{present:n||a.open,children:(0,S.jsx)(f,{asChild:!0,container:i,children:r})})})},`TooltipPortal`),U=`TooltipContent`,te=x.forwardRef(w(function(e,t){let n=V(U,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=F(U,e.__scopeTooltip);return(0,S.jsx)(_,{present:r||o.open,children:o.disableHoverableContent?(0,S.jsx)(G,{side:i,...a,ref:t}):(0,S.jsx)(ne,{side:i,...a,ref:t})})},`TooltipContent`)),ne=x.forwardRef(w(function(e,t){let n=F(U,e.__scopeTooltip),r=M(U,e.__scopeTooltip),i=x.useRef(null),a=c(t,i),[o,s]=x.useState(null),{trigger:l,onClose:u}=n,d=i.current,{onPointerInTransitChange:f}=r,p=x.useCallback(()=>{s(null),f(!1)},[f]),m=x.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=J(r,q(r,n.getBoundingClientRect())),a=Y(t.getBoundingClientRect()),o=Z([...i,...a]);s(o),f(!0)},[f]);return x.useEffect(()=>()=>p(),[p]),x.useEffect(()=>{if(l&&d){let e=w(e=>m(e,d),`handleTriggerLeave`),t=w(e=>m(e,l),`handleContentLeave`);return l.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{l.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[l,d,m,p]),x.useEffect(()=>{if(o){let e=w(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=l?.contains(t)||d?.contains(t),i=!X(n,o);r?p():i&&(p(),u())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,o,u,p]),(0,S.jsx)(G,{...e,ref:a})},`TooltipContentHoverable`)),W=v(`TooltipContent`),G=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,children:i,"aria-label":a,id:o,onEscapeKeyDown:s,onPointerDownOutside:c,...l}=e,d=F(U,n),f=D(n),{onClose:p}=d;x.useEffect(()=>(document.addEventListener(A,p),()=>document.removeEventListener(A,p)),[p]),x.useEffect(()=>{if(d.trigger){let e=w(e=>{e.target instanceof Node&&e.target.contains(d.trigger)&&p()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[d.trigger,p]);let{setContentId:m}=d;return u(()=>(m(o),()=>{m(void 0)}),[o,m]),(0,S.jsx)(h,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:e=>e.preventDefault(),onDismiss:p,children:(0,S.jsxs)(r,{"data-state":d.stateAttribute,role:a?void 0:`tooltip`,id:a?void 0:d.contentId,...f,...l,ref:t,style:{...l.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,S.jsx)(W,{children:i}),a?(0,S.jsx)(y,{id:d.contentId,role:`tooltip`,children:a}):null]})})},`TooltipContentImpl`)),K=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=D(n);return(0,S.jsx)(o,{...i,...r,ref:t})},`TooltipArrow`));function q(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}w(q,`getExitSideFromRect`);function J(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n})}return r}w(J,`getPaddedExitPoints`);function Y(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}w(Y,`getPointsFromRect`);function X(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}w(X,`isPointInPolygon`);function Z(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:+(e.y>t.y)),Q(t)}w(Z,`getHull`);function Q(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}w(Q,`getHullPresorted`);var re=N,ie=I,$=R,ae=H,oe=te,se=K;function ce({delayDuration:e=0,...t}){return(0,S.jsx)(re,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function le({...e}){return(0,S.jsx)(ie,{"data-slot":`tooltip`,...e})}function ue({...e}){return(0,S.jsx)($,{"data-slot":`tooltip-trigger`,...e})}function de({className:e,sideOffset:t=0,children:n,...r}){return(0,S.jsx)(ae,{children:(0,S.jsxs)(oe,{"data-slot":`tooltip-content`,sideOffset:t,className:b(`z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,e),...r,children:[n,(0,S.jsx)(se,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}export{ue as i,de as n,ce as r,le as t};
2
+ //# sourceMappingURL=tooltip-Bqf3oyqC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-CCOeMqiL.js","names":["TooltipProvider","Tooltip","PopperPrimitive.Root","TooltipTrigger","PopperPrimitive.Anchor","PortalPrimitive","TooltipContent","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","PopperPrimitive.Arrow","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","TooltipPrimitive.Arrow","__toESM","require_jsx_runtime","Content","Root2","Anchor","Arrow","createPopperScope","useComposedRefs","useControllableState","useLayoutEffect2","Primitive","Portal$1","useId","DismissableLayer","composeEventHandlers","Presence","createSlottable","Root","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","createContextScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider$1","props","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","__scopeTooltip","skipDelayDuration","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip$1","openProp","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentIdState","setContentId","generatedContentId","openTimerRef","disableHoverableContent","delayDuration","wasOpenDelayedRef","open","setOpen","defaultOpen","open2","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","contentId","TRIGGER_NAME","TooltipTrigger$1","triggerProps","context","ref","composedRefs","forwardedRef","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","forceMount","CONTENT_NAME","TooltipContent$1","portalContext","contentProps","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","content","handleRemoveGraceArea","onPointerInTransitChange","handleCreateGraceArea","currentTarget","exitPoint","paddedExitPoints","getPaddedExitPoints","getExitSideFromRect","hoverTargetPoints","getPointsFromRect","hoverTarget","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","onClose","Slottable","ariaLabel","idProp","handleScroll","TooltipArrow","arrowProps","top","rect","point","bottom","right","left","exitSide","padding","inside","i","j","polygon","ii","jj","xi","yi","xj","yj","y","x","newPoints","points","a","b","getHullPresorted","upperHull","p","q","r","lowerHull","Provider","Root3","Trigger","Portal","Content2","Arrow2","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","className","children"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.16_@types+react-dom@19.3.0_@types+react@19.3.0__@types+reac_410793db862c85b741943c612cdfda62/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, [skipDelayDuration]),\n onClose: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n}, \"TooltipProvider\");\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const [contentIdState, setContentId] = React.useState(void 0);\n const generatedContentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: /* @__PURE__ */ __name((open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n }, \"onChange\"),\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n const contentId = contentIdState ?? generatedContentId;\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n setContentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n}, \"Tooltip\");\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipTrigger2(props, forwardedRef) {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }, \"TooltipTrigger\")\n);\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n}, \"TooltipPortal\");\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }, \"TooltipContent\")\n);\nvar TooltipContentHoverable = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function TooltipContentHoverable2(props, forwardedRef) {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, content), \"handleTriggerLeave\");\n const handleContentLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, trigger), \"handleContentLeave\");\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = /* @__PURE__ */ __name((event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n }, \"handleTrackPointerGrace\");\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n}, \"TooltipContentHoverable\"));\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function TooltipContentImpl2(props, forwardedRef) {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n id: idProp,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = /* @__PURE__ */ __name((event) => {\n if (event.target instanceof Node && event.target.contains(context.trigger)) {\n onClose();\n }\n }, \"handleScroll\");\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n const { setContentId } = context;\n useLayoutEffect(() => {\n setContentId(idProp);\n return () => {\n setContentId(void 0);\n };\n }, [idProp, setContentId]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n role: ariaLabel ? void 0 : \"tooltip\",\n id: ariaLabel ? void 0 : context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n ariaLabel ? /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel }) : null\n ]\n }\n )\n }\n );\n }, \"TooltipContentImpl\")\n);\nvar TooltipArrow = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipArrow2(props, forwardedRef) {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }, \"TooltipArrow\")\n);\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\n__name(getExitSideFromRect, \"getExitSideFromRect\");\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n__name(getPaddedExitPoints, \"getPaddedExitPoints\");\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\n__name(getPointsFromRect, \"getPointsFromRect\");\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\n__name(isPointInPolygon, \"isPointInPolygon\");\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n__name(getHull, \"getHull\");\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n__name(getHullPresorted, \"getHullPresorted\");\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"ignoreList":[0],"mappings":"4ZACIsC,EAAY,OAAO,eACnBC,GAAU,EAAQ,IAAUD,EAAUE,EAAQ,OAAQ,CAAE,QAAO,aAAc,EAAK,CAAC,EAmBnF,CAACC,EAAsBC,GAAsBC,EAAmB,UAAW,CAC7ErB,CACF,CAAC,EACGsB,EAAiBtB,EAAkB,EACnCuB,EAAgB,kBAChBC,EAAyB,IACzBC,EAAe,eACf,CAACC,EAAgCC,GAA6BR,EAAqBI,CAAa,EAChG7C,EAAkCuC,EAAQ,GAAU,CACtD,GAAM,CACJ,iBACA,gBAAgBO,EAChB,oBAAoB,IACpB,0BAA0B,GAC1B,YACEK,EACEC,EAAAjB,EAAyB,OAAO,EAAI,EACpCkB,EAAAlB,EAA8B,OAAO,EAAK,EAC1CmB,EAAAnB,EAA0B,OAAO,CAAC,EAKxC,OAJAA,EAAM,cAAgB,CACpB,IAAMoB,EAAiBD,EAAkB,QACzC,UAAa,OAAO,aAAaC,CAAc,CACjD,EAAG,CAAC,CAAC,GACkB,EAAAlB,EAAA,IAAA,CACrBW,EACA,CACE,MAAOQ,EACP,mBACA,gBACA,OAAArB,EAAc,gBAAkB,CAC1BsB,GAAqB,IACzB,OAAO,aAAaH,EAAkB,OAAO,EAC7C,EAAiB,QAAU,GAC7B,EAAG,CAACG,CAAiB,CAAC,EACtB,QAAAtB,EAAe,gBAAkB,CAC3BsB,GAAqB,IACzB,OAAO,aAAaH,EAAkB,OAAO,EAC7C,EAAkB,QAAU,OAAO,eAC3B,EAAiB,QAAU,GACjCG,CACF,EACF,EAAG,CAACA,CAAiB,CAAC,EACtB,wBACA,yBAAAtB,EAAgC,YAAa,GAAc,CACzD,EAAsB,QAAUuB,CAClC,EAAG,CAAC,CAAC,EACL,0BACA,UACF,CACF,CACF,EAAG,iBAAiB,EAChBC,EAAe,UACf,CAACC,GAAwBC,GAAqBpB,EAAqBkB,CAAY,EAC/E1D,EAA0BsC,EAAQ,GAAU,CAC9C,GAAM,CACJ,iBACA,WACA,KAAMwB,EACN,cACA,eACA,wBAAyBC,EACzB,cAAeC,GACbd,EACEe,EAAkBjB,EAA0BU,EAAcR,EAAM,cAAc,EAC9EgB,EAAcvB,EAAeY,CAAc,EAC3C,CAACY,EAASC,GAAAlC,EAAoB,SAAS,IAAI,EAC3C,CAACmC,EAAgBC,GAAApC,EAAsB,SAAS,IAAK,EAAC,EACtDqC,EAAqB5C,EAAM,EAC3B6C,EAAAtC,EAAqB,OAAO,CAAC,EAC7BuC,EAA0BV,GAA+BE,EAAgB,wBACzES,EAAgBV,GAAqBC,EAAgB,cACrDU,EAAAzC,EAA0B,OAAO,EAAK,EACtC,CAAC0C,EAAMC,GAAWtD,EAAqB,CAC3C,KAAMuC,EACN,YAAagB,GAAe,GAC5B,SAA0BxC,EAAQ,GAAU,CACtCyC,GACFd,EAAgB,OAAO,EACvB,SAAS,cAAc,IAAI,YAAYnB,CAAY,CAAC,GAEpDmB,EAAgB,QAAQ,EAE1Be,IAAeD,CAAK,CACtB,EAAG,UAAU,EACb,OAAQrB,CACV,CAAC,EACKuB,EAAA/C,EAAuB,YACpB0C,EAAOD,EAAkB,QAAU,eAAiB,eAAiB,SAC3E,CAACC,CAAI,CAAC,EACHM,EAAAhD,EAAmB,gBAAkB,CACzC,OAAO,aAAasC,EAAa,OAAO,EACxC,EAAa,QAAU,EACvB,EAAkB,QAAU,GAC5BK,EAAQ,EAAI,CACd,EAAG,CAACA,CAAO,CAAC,EACNM,EAAAjD,EAAoB,gBAAkB,CAC1C,OAAO,aAAasC,EAAa,OAAO,EACxC,EAAa,QAAU,EACvBK,EAAQ,EAAK,CACf,EAAG,CAACA,CAAO,CAAC,EACNO,EAAAlD,EAA0B,gBAAkB,CAChD,OAAO,aAAasC,EAAa,OAAO,EACxC,EAAa,QAAU,OAAO,eAAiB,CAC7C,EAAkB,QAAU,GAC5BK,EAAQ,EAAI,EACZ,EAAa,QAAU,CACzB,EAAGH,CAAa,CAClB,EAAG,CAACA,EAAeG,CAAO,CAAC,EAC3B3C,EAAM,kBACS,CACX,AAEEsC,EAAa,WADb,OAAO,aAAaA,EAAa,OAAO,EACjB,EAE3B,EACC,CAAC,CAAC,EACL,IAAMa,EAAYhB,GAAkBE,EACpC,OAAuB,EAAAnC,EAAA,IAAA,CAAInC,EAAsB,CAAE,GAAGiE,EAAa,UAA0B,EAAA9B,EAAA,IAAA,CAC3FuB,GACA,CACE,MAAOJ,EACP,YACA,eACA,OACA,iBACA,UACA,gBAAiBa,EACjB,eAAAlC,EAAsB,gBAAkB,CAClC+B,EAAgB,iBAAiB,QAASmB,EAAkB,EAC3DF,EAAW,CAClB,EAAG,CAACjB,EAAgB,iBAAkBmB,EAAmBF,CAAU,CAAC,EACpE,eAAAhD,EAAsB,gBAAkB,CAClCuC,EACFU,EAAY,GAEZ,OAAO,aAAaX,EAAa,OAAO,EACxC,EAAa,QAAU,EAE3B,EAAG,CAACW,EAAaV,CAAuB,CAAC,EACzC,OAAQS,EACR,QAASC,EACT,0BACA,UACF,CACF,CAAE,CAAC,CACL,EAAG,SAAS,EACRG,EAAe,iBACfpF,EAAiCgC,EAAM,WACzBI,EAAO,SAAyB,EAAO,EAAc,CACnE,GAAM,CAAE,iBAAgB,GAAGkD,GAAiBtC,EACtCuC,EAAU7B,EAAkB0B,EAAc/B,CAAc,EACxDU,EAAkBjB,EAA0BsC,EAAc/B,CAAc,EACxEW,EAAcvB,EAAeY,CAAc,EAC3CmC,EAAAxD,EAAY,OAAO,IAAI,EACvByD,EAAerE,EAAgBsE,EAAcF,EAAKD,EAAQ,eAAe,EACzEI,EAAA3D,EAAyB,OAAO,EAAK,EACrC4D,EAAA5D,EAAgC,OAAO,EAAK,EAC5C6D,EAAA7D,EAAwB,gBAAkB,EAAiB,QAAU,GAAO,CAAC,CAAC,EAIpF,OAHAA,EAAM,kBACS,SAAS,oBAAoB,YAAa6D,CAAe,EACrE,CAACA,CAAe,CAAC,GACG,EAAA3D,EAAA,IAAA,CAAIjC,EAAwB,CAAE,QAAS,GAAM,GAAG+D,EAAa,UAA0B,EAAA9B,EAAA,IAAA,CAC5GX,EAAU,OACV,CACE,mBAAoBgE,EAAQ,KAAOA,EAAQ,UAAY,IAAK,GAC5D,aAAcA,EAAQ,eACtB,GAAGD,EACH,IAAKG,EACL,cAAe9D,EAAqBqB,EAAM,cAAgB,GAAU,CAC9D8C,EAAM,cAAgB,SACtB,CAACF,EAAwB,SAAW,CAAC7B,EAAgB,sBAAsB,UAC7EwB,EAAQ,eAAe,EACvB,EAAwB,QAAU,GAEtC,CAAC,EACD,eAAgB5D,EAAqBqB,EAAM,mBAAsB,CAC/DuC,EAAQ,eAAe,EACvB,EAAwB,QAAU,EACpC,CAAC,EACD,cAAe5D,EAAqBqB,EAAM,kBAAqB,CACzDuC,EAAQ,MACVA,EAAQ,QAAQ,EAElB,EAAiB,QAAU,GAC3B,SAAS,iBAAiB,YAAaM,EAAiB,CAAE,KAAM,EAAK,CAAC,CACxE,CAAC,EACD,QAASlE,EAAqBqB,EAAM,YAAe,CAC5C2C,EAAiB,SAASJ,EAAQ,OAAO,CAChD,CAAC,EACD,OAAQ5D,EAAqBqB,EAAM,OAAQuC,EAAQ,OAAO,EAC1D,QAAS5D,EAAqBqB,EAAM,QAASuC,EAAQ,OAAO,CAC9D,CACF,CAAE,CAAC,CACL,EAAG,gBAAgB,CACrB,EACIQ,EAAc,gBACd,CAACC,EAAgBC,GAAoB3D,EAAqByD,EAAa,CACzE,WAAY,IAAK,EACnB,CAAC,EACGG,EAAgC9D,EAAQ,GAAU,CACpD,GAAM,CAAE,iBAAgB,aAAY,WAAU,aAAcY,EACtDuC,EAAU7B,EAAkBqC,EAAa1C,CAAc,EAC7D,OAAuB,EAAAnB,EAAA,IAAA,CAAI8D,EAAgB,CAAE,MAAO3C,EAAgB,aAAY,UAA0B,EAAAnB,EAAA,IAAA,CAAIN,EAAU,CAAE,QAASuE,GAAcZ,EAAQ,KAAM,UAA0B,EAAArD,EAAA,IAAA,CAAIhC,EAAiB,CAAE,QAAS,GAAM,YAAW,UAAS,CAAC,CAAE,CAAC,CAAE,CAAC,CAC5P,EAAG,eAAe,EACdkG,EAAe,iBACfjG,GAAiC6B,EAAM,WACzBI,EAAO,SAAyB,EAAO,EAAc,CACnE,IAAMkE,EAAgBL,EAAiBG,EAAcpD,EAAM,cAAc,EACnE,CAAE,aAAasD,EAAc,WAAY,OAAO,MAAO,GAAGC,GAAiBvD,EAC3EuC,EAAU7B,EAAkB0C,EAAcpD,EAAM,cAAc,EACpE,OAAuB,EAAAd,EAAA,IAAA,CAAIN,EAAU,CAAE,QAASuE,GAAcZ,EAAQ,KAAM,SAAUA,EAAQ,yBAA0C,EAAArD,EAAA,IAAA,CAAIsE,EAAoB,CAAE,OAAM,GAAGD,EAAc,IAAKb,CAAa,CAAC,GAAoB,EAAAxD,EAAA,IAAA,CAAIuE,GAAyB,CAAE,OAAM,GAAGF,EAAc,IAAKb,CAAa,CAAC,CAAE,CAAC,CAC9S,EAAG,gBAAgB,CACrB,EACIe,GAA0CzE,EAAM,WAA2BI,EAAO,SAAkC,EAAO,EAAc,CAC3I,IAAMmD,EAAU7B,EAAkB0C,EAAcpD,EAAM,cAAc,EAC9De,EAAkBjB,EAA0BsD,EAAcpD,EAAM,cAAc,EAC9EwC,EAAAxD,EAAY,OAAO,IAAI,EACvByD,EAAerE,EAAgBsE,EAAcF,CAAG,EAChD,CAACkB,EAAkBC,GAAA3E,EAA6B,SAAS,IAAI,EAC7D,CAAE,UAAS,WAAYuD,EACvBqB,EAAUpB,EAAI,QACd,CAAE,4BAA6BzB,EAC/B8C,EAAA7E,EAA8B,gBAAkB,CACpD2E,EAAoB,IAAI,EACxBG,EAAyB,EAAK,CAChC,EAAG,CAACA,CAAwB,CAAC,EACvBC,EAAA/E,EAA8B,aACjC,EAAO,IAAgB,CACtB,IAAMgF,EAAgBlB,EAAM,cACtBmB,EAAY,CAAE,EAAGnB,EAAM,QAAS,EAAGA,EAAM,OAAQ,EAEjDoB,EAAmBC,EAAoBF,EAD5BG,EAAoBH,EAAWD,EAAc,sBAAsB,CACrB,CAAC,EAC1DK,EAAoBC,EAAkBC,EAAY,sBAAsB,CAAC,EACzEC,EAAYC,EAAQ,CAAC,GAAGP,EAAkB,GAAGG,CAAiB,CAAC,EACrEV,EAAoBa,CAAS,EAC7BV,EAAyB,EAAI,CAC/B,EACA,CAACA,CAAwB,CAC3B,EAkCA,OAjCA9E,EAAM,kBACS6E,EAAsB,EAClC,CAACA,CAAqB,CAAC,EAC1B7E,EAAM,cAAgB,CACpB,GAAIiC,GAAW2C,EAAS,CACtB,IAAMc,EAAqCtF,EAAQ,GAAU2E,EAAsBjB,EAAOc,CAAO,EAAG,oBAAoB,EAClHe,EAAqCvF,EAAQ,GAAU2E,EAAsBjB,EAAO7B,CAAO,EAAG,oBAAoB,EAGxH,OAFAA,EAAQ,iBAAiB,eAAgByD,CAAkB,EAC3Dd,EAAQ,iBAAiB,eAAgBe,CAAkB,MAC9C,CACX1D,EAAQ,oBAAoB,eAAgByD,CAAkB,EAC9Dd,EAAQ,oBAAoB,eAAgBe,CAAkB,CAChE,CACF,CACF,EAAG,CAAC1D,EAAS2C,EAASG,EAAuBF,CAAqB,CAAC,EACnE7E,EAAM,cAAgB,CACpB,GAAI0E,EAAkB,CACpB,IAAMkB,EAA0CxF,EAAQ,GAAU,CAChE,IAAMC,EAASyD,EAAM,OACf+B,EAAkB,CAAE,EAAG/B,EAAM,QAAS,EAAGA,EAAM,OAAQ,EACvDgC,EAAmB7D,GAAS,SAAS5B,CAAM,GAAKuE,GAAS,SAASvE,CAAM,EACxE0F,EAA4B,CAACC,EAAiBH,EAAiBnB,CAAgB,EACjFoB,EACFjB,EAAsB,EACbkB,IACTlB,EAAsB,EACtBoB,EAAQ,EAEZ,EAAG,yBAAyB,EAE5B,OADA,SAAS,iBAAiB,cAAeL,CAAuB,MACnD,SAAS,oBAAoB,cAAeA,CAAuB,CAClF,CACF,EAAG,CAAC3D,EAAS2C,EAASF,EAAkBuB,EAASpB,CAAqB,CAAC,GAChD,EAAA3E,EAAA,IAAA,CAAIsE,EAAoB,CAAE,GAAGxD,EAAO,IAAKyC,CAAa,CAAC,CAChF,EAAG,yBAAyB,CAAC,EACzByC,EAAYrG,EAAgB,gBAAgB,EAC5C2E,EAAqCxE,EAAM,WAE7BI,EAAO,SAA6B,EAAO,EAAc,CACvE,GAAM,CACJ,iBACA,WACA,aAAc+F,EACd,GAAIC,EACJ,kBACA,uBACA,GAAG7B,GACDvD,EACEuC,EAAU7B,EAAkB0C,EAAc/C,CAAc,EACxDW,EAAcvB,EAAeY,CAAc,EAC3C,CAAE,WAAYkC,EACpBvD,EAAM,eACJ,SAAS,iBAAiBY,EAAcqF,CAAO,MAClC,SAAS,oBAAoBrF,EAAcqF,CAAO,GAC9D,CAACA,CAAO,CAAC,EACZjG,EAAM,cAAgB,CACpB,GAAIuD,EAAQ,QAAS,CACnB,IAAM8C,EAA+BjG,EAAQ,GAAU,CACjD0D,EAAM,kBAAkB,MAAQA,EAAM,OAAO,SAASP,EAAQ,OAAO,GACvE0C,EAAQ,CAEZ,EAAG,cAAc,EAEjB,OADA,OAAO,iBAAiB,SAAUI,EAAc,CAAE,QAAS,EAAK,CAAC,MACpD,OAAO,oBAAoB,SAAUA,EAAc,CAAE,QAAS,EAAK,CAAC,CACnF,CACF,EAAG,CAAC9C,EAAQ,QAAS0C,CAAO,CAAC,EAC7B,GAAM,CAAE,gBAAiB1C,EAOzB,OANAjE,OACE8C,EAAagE,CAAM,MACN,CACXhE,EAAa,IAAK,EAAC,CACrB,GACC,CAACgE,EAAQhE,CAAY,CAAC,GACF,EAAAlC,EAAA,IAAA,CACrBR,EACA,CACE,QAAS,GACT,4BAA6B,GAC7B,kBACA,uBACA,eAAiB,GAAUoE,EAAM,eAAe,EAChD,UAAWmC,EACX,UAA0B,EAAA/F,EAAA,KAAA,CACxB9B,EACA,CACE,aAAcmF,EAAQ,eACtB,KAAM4C,EAAY,IAAK,GAAI,UAC3B,GAAIA,EAAY,IAAK,GAAI5C,EAAQ,UACjC,GAAGvB,EACH,GAAGuC,EACH,IAAKb,EACL,MAAO,CACL,GAAGa,EAAa,MAGd,2CAA4C,uCAC5C,0CAA2C,sCAC3C,2CAA4C,uCAC5C,gCAAiC,mCACjC,iCAAkC,mCAEtC,EACA,SAAU,EACQ,EAAArE,EAAA,IAAA,CAAIgG,EAAW,CAAE,UAAS,CAAC,EAC3CC,GAA4B,EAAAjG,EAAA,IAAA,CAAI7B,EAA8B,CAAE,GAAIkF,EAAQ,UAAW,KAAM,UAAW,SAAU4C,CAAU,CAAC,EAAI,IACnI,CACF,CACF,CACF,CACF,CACF,EAAG,oBAAoB,CACzB,EACIG,EAA+BtG,EAAM,WACvBI,EAAO,SAAuB,EAAO,EAAc,CACjE,GAAM,CAAE,iBAAgB,GAAGmG,GAAevF,EACpCgB,EAAcvB,EAAeY,CAAc,EACjD,OAAuB,EAAAnB,EAAA,IAAA,CAAI5B,EAAuB,CAAE,GAAG0D,EAAa,GAAGuE,EAAY,IAAK7C,CAAa,CAAC,CACxG,EAAG,cAAc,CACnB,EACA,SAAS0B,EAAoB,EAAO,EAAM,CACxC,IAAMoB,EAAM,KAAK,IAAIC,EAAK,IAAMC,EAAM,CAAC,EACjCC,EAAS,KAAK,IAAIF,EAAK,OAASC,EAAM,CAAC,EACvCE,EAAQ,KAAK,IAAIH,EAAK,MAAQC,EAAM,CAAC,EACrCG,EAAO,KAAK,IAAIJ,EAAK,KAAOC,EAAM,CAAC,EACzC,OAAQ,KAAK,IAAIF,EAAKG,EAAQC,EAAOC,CAAI,EAAzC,CACE,KAAKA,EACH,MAAO,OACT,KAAKD,EACH,MAAO,QACT,KAAKJ,EACH,MAAO,MACT,KAAKG,EACH,MAAO,SACT,QACE,MAAU,MAAM,aAAa,CACjC,CACF,CACAvG,EAAOgF,EAAqB,qBAAqB,EACjD,SAASD,EAAoB,EAAW,EAAU,EAAU,EAAG,CAC7D,IAAMD,EAAmB,CAAC,EAC1B,OAAQ4B,EAAR,CACE,IAAK,MACH5B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,EACA,MACF,IAAK,SACH7B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,EACA,MACF,IAAK,OACH7B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,EACA,MACF,IAAK,QACH7B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,CAEJ,CACA,OAAO7B,CACT,CACA9E,EAAO+E,EAAqB,qBAAqB,EACjD,SAASG,EAAkB,EAAM,CAC/B,GAAM,CAAE,MAAK,QAAO,SAAQ,QAASmB,EACrC,MAAO,CACL,CAAE,EAAGI,EAAM,EAAGL,CAAI,EAClB,CAAE,EAAGI,EAAO,EAAGJ,CAAI,EACnB,CAAE,EAAGI,EAAO,EAAGD,CAAO,EACtB,CAAE,EAAGE,EAAM,EAAGF,CAAO,CACvB,CACF,CACAvG,EAAOkF,EAAmB,mBAAmB,EAC7C,SAASU,EAAiB,EAAO,EAAS,CACxC,GAAM,CAAE,IAAG,KAAMU,EACbM,EAAS,GACb,IAAK,IAAIC,EAAI,EAAGC,EAAIC,EAAQ,OAAS,EAAGF,EAAIE,EAAQ,OAAQ,EAAI,IAAK,CACnE,IAAMC,EAAKD,EAAQF,GACbI,EAAKF,EAAQD,GACbI,EAAKF,EAAG,EACRG,EAAKH,EAAG,EACRI,EAAKH,EAAG,EACRI,EAAKJ,EAAG,EACIE,EAAKG,GAAMD,EAAKC,GAAKC,GAAKH,EAAKF,IAAOI,EAAIH,IAAOE,EAAKF,GAAMD,IAC/D,EAAS,CAACN,EAC3B,CACA,OAAOA,CACT,CACA5G,EAAO4F,EAAkB,kBAAkB,EAC3C,SAASP,EAAQ,EAAQ,CACvB,IAAMmC,EAAYC,EAAO,MAAM,EAQ/B,OAPAD,EAAU,MAAM,EAAG,IACbE,EAAE,EAAIC,EAAE,EAAU,GACbD,EAAE,EAAIC,EAAE,EAAU,EAClBD,EAAE,EAAIC,EAAE,EAAU,GACtB,EAAID,EAAE,EAAIC,EAAE,EAElB,EACMC,EAAiBJ,CAAS,CACnC,CACAxH,EAAOqF,EAAS,SAAS,EACzB,SAASuC,EAAiB,EAAQ,CAChC,GAAIH,EAAO,QAAU,EAAG,OAAOA,EAAO,MAAM,EAC5C,IAAMI,EAAY,CAAC,EACnB,IAAK,IAAIhB,EAAI,EAAGA,EAAIY,EAAO,OAAQ,IAAK,CACtC,IAAMK,EAAIL,EAAOZ,GACjB,KAAOgB,EAAU,QAAU,GAAG,CAC5B,IAAME,EAAIF,EAAUA,EAAU,OAAS,GACjCG,EAAIH,EAAUA,EAAU,OAAS,GACvC,IAAKE,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,KAAOD,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,GAAIH,EAAU,IAAI,OACrE,KACP,CACAA,EAAU,KAAKC,CAAC,CAClB,CACAD,EAAU,IAAI,EACd,IAAMI,EAAY,CAAC,EACnB,IAAK,IAAIpB,EAAIY,EAAO,OAAS,EAAGZ,GAAK,EAAG,IAAK,CAC3C,IAAMiB,EAAIL,EAAOZ,GACjB,KAAOoB,EAAU,QAAU,GAAG,CAC5B,IAAMF,EAAIE,EAAUA,EAAU,OAAS,GACjCD,EAAIC,EAAUA,EAAU,OAAS,GACvC,IAAKF,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,KAAOD,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,GAAIC,EAAU,IAAI,OACrE,KACP,CACAA,EAAU,KAAKH,CAAC,CAClB,CAKE,OAJFG,EAAU,IAAI,EACVJ,EAAU,SAAW,GAAKI,EAAU,SAAW,GAAKJ,EAAU,EAAE,CAAC,IAAMI,EAAU,EAAE,CAAC,GAAKJ,EAAU,EAAE,CAAC,IAAMI,EAAU,EAAE,CAAC,EACpHJ,EAEAA,EAAU,OAAOI,CAAS,CAErC,CACAjI,EAAO4H,EAAkB,kBAAkB,EAC3C,IAAIM,GAAWzK,EACX0K,GAAQzK,EACR0K,EAAUxK,EACVyK,GAASvE,EACTwE,GAAWvK,GACXwK,GAASrC,ECrfb,SAASsC,GAAgB,CACvB,gBAAgB,EAChB,GAAG5H,GACsD,CACzD,OAAO,EAAAd,EAAA,IAAA,CAAC3B,GAAD,CAA2B,YAAU,mBAAkC,gBAAe,GAAIyC,CAAQ,CAAA,CAC3G,CAEA,SAAS6H,GAAQ,CAAE,GAAG7H,GAA6D,CACjF,OAAO,EAAAd,EAAA,IAAA,CAAC1B,GAAD,CAAuB,YAAU,UAAU,GAAIwC,CAAQ,CAAA,CAChE,CAEA,SAAS8H,GAAe,CAAE,GAAG9H,GAAgE,CAC3F,OAAO,EAAAd,EAAA,IAAA,CAACzB,EAAD,CAA0B,YAAU,kBAAkB,GAAIuC,CAAQ,CAAA,CAC3E,CAEA,SAAS+H,GAAe,CACtB,YACA,aAAa,EACb,WACA,GAAG/H,GACqD,CACxD,OACE,EAAAd,EAAA,IAAA,CAACxB,GAAD,CAAA,UACE,EAAAwB,EAAA,KAAA,CAACvB,GAAD,CACE,YAAU,kBACE,aACZ,UAAWoB,EACT,kbACAiJ,CACF,EACA,GAAIhI,EAPN,SAAA,CASGiI,GACD,EAAA/I,EAAA,IAAA,CAACtB,GAAD,CAAwB,UAAU,oGAAsG,CAAA,CAChH,CACH,CAAA,CAAA,CAAA,CAE7B"}
1
+ {"version":3,"file":"tooltip-Bqf3oyqC.js","names":["TooltipProvider","Tooltip","PopperPrimitive.Root","TooltipTrigger","PopperPrimitive.Anchor","PortalPrimitive","TooltipContent","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","PopperPrimitive.Arrow","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","TooltipPrimitive.Arrow","__toESM","require_jsx_runtime","Content","Root2","Anchor","Arrow","createPopperScope","useComposedRefs","useControllableState","useLayoutEffect2","Primitive","Portal$1","useId","DismissableLayer","composeEventHandlers","Presence","createSlottable","Root","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","createContextScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider$1","props","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","__scopeTooltip","skipDelayDuration","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip$1","openProp","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentIdState","setContentId","generatedContentId","openTimerRef","disableHoverableContent","delayDuration","wasOpenDelayedRef","open","setOpen","defaultOpen","open2","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","contentId","TRIGGER_NAME","TooltipTrigger$1","triggerProps","context","ref","composedRefs","forwardedRef","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","forceMount","CONTENT_NAME","TooltipContent$1","portalContext","contentProps","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","content","handleRemoveGraceArea","onPointerInTransitChange","handleCreateGraceArea","currentTarget","exitPoint","paddedExitPoints","getPaddedExitPoints","getExitSideFromRect","hoverTargetPoints","getPointsFromRect","hoverTarget","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","onClose","Slottable","ariaLabel","idProp","handleScroll","TooltipArrow","arrowProps","top","rect","point","bottom","right","left","exitSide","padding","inside","i","j","polygon","ii","jj","xi","yi","xj","yj","y","x","newPoints","points","a","b","getHullPresorted","upperHull","p","q","r","lowerHull","Provider","Root3","Trigger","Portal","Content2","Arrow2","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","className","children"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.16_@types+react-dom@19.3.0_@types+react@19.3.0__@types+reac_410793db862c85b741943c612cdfda62/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, [skipDelayDuration]),\n onClose: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n}, \"TooltipProvider\");\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const [contentIdState, setContentId] = React.useState(void 0);\n const generatedContentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: /* @__PURE__ */ __name((open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n }, \"onChange\"),\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n const contentId = contentIdState ?? generatedContentId;\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n setContentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n}, \"Tooltip\");\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipTrigger2(props, forwardedRef) {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }, \"TooltipTrigger\")\n);\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n}, \"TooltipPortal\");\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }, \"TooltipContent\")\n);\nvar TooltipContentHoverable = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function TooltipContentHoverable2(props, forwardedRef) {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, content), \"handleTriggerLeave\");\n const handleContentLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, trigger), \"handleContentLeave\");\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = /* @__PURE__ */ __name((event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n }, \"handleTrackPointerGrace\");\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n}, \"TooltipContentHoverable\"));\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function TooltipContentImpl2(props, forwardedRef) {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n id: idProp,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = /* @__PURE__ */ __name((event) => {\n if (event.target instanceof Node && event.target.contains(context.trigger)) {\n onClose();\n }\n }, \"handleScroll\");\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n const { setContentId } = context;\n useLayoutEffect(() => {\n setContentId(idProp);\n return () => {\n setContentId(void 0);\n };\n }, [idProp, setContentId]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n role: ariaLabel ? void 0 : \"tooltip\",\n id: ariaLabel ? void 0 : context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n ariaLabel ? /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel }) : null\n ]\n }\n )\n }\n );\n }, \"TooltipContentImpl\")\n);\nvar TooltipArrow = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipArrow2(props, forwardedRef) {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }, \"TooltipArrow\")\n);\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\n__name(getExitSideFromRect, \"getExitSideFromRect\");\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n__name(getPaddedExitPoints, \"getPaddedExitPoints\");\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\n__name(getPointsFromRect, \"getPointsFromRect\");\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\n__name(isPointInPolygon, \"isPointInPolygon\");\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n__name(getHull, \"getHull\");\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n__name(getHullPresorted, \"getHullPresorted\");\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{it as n}from"./src-CMor9izq.js";import{l as r}from"./schema-BMQEabwO.js";import{n as i}from"./useResolvedDefinitions-C279ueCH.js";var a=e(t(),1),o=()=>{let{resolved:e,error:t}=i(),o=r(`component`);return{schema:(0,a.useMemo)(()=>{if(!e||!o.data)return;let t=new Map;for(let{definition:e}of o.data)n(e)&&t.set(e.id,e);let r=[...e.byId.values()].sort((e,t)=>e.label.localeCompare(t.label));return{models:e.byId,components:t,sortedModels:r,index:e.index}},[e,o.data]),error:t??o.error}},s=(e,t)=>e.sortedModels.find(e=>e.apiKey===t);export{o as n,s as t};
2
- //# sourceMappingURL=useContentSchema-uXOfT985.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{it as n}from"./src-CMor9izq.js";import{l as r}from"./schema-6eUoC8fJ.js";import{n as i}from"./useResolvedDefinitions-30lnwFQ1.js";var a=e(t(),1),o=()=>{let{resolved:e,error:t}=i(),o=r(`component`);return{schema:(0,a.useMemo)(()=>{if(!e||!o.data)return;let t=new Map;for(let{definition:e}of o.data)n(e)&&t.set(e.id,e);let r=[...e.byId.values()].sort((e,t)=>e.label.localeCompare(t.label));return{models:e.byId,components:t,sortedModels:r,index:e.index}},[e,o.data]),error:t??o.error}},s=(e,t)=>e.sortedModels.find(e=>e.apiKey===t);export{o as n,s as t};
2
+ //# sourceMappingURL=useContentSchema-B_q1rMrG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useContentSchema-uXOfT985.js","names":["useMemo","__toESM","isComponentDefinition","useDefinitions","useResolvedDefinitions","import_react","require_react","useContentSchema","modelsError","componentList","resolved","components","definition","sortedModels","a","b","findModelByKey","schema","model","modelKey"],"sources":["../../src/features/Content/hooks/useContentSchema.ts"],"sourcesContent":["import {\n isComponentDefinition,\n type ComponentDefinition,\n type DefinitionIndex,\n type ResolvedModelDefinition,\n} from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useDefinitions } from '@/api/schema';\nimport { useResolvedDefinitions } from '@/hooks/useResolvedDefinitions';\n\nexport type ContentSchema = {\n /** Collections and singletons by stable ID, with their effective fields (inherited ones first). */\n models: ReadonlyMap<string, ResolvedModelDefinition>;\n components: ReadonlyMap<string, ComponentDefinition>;\n /** Collections and singletons, in label order (for navigation). */\n sortedModels: readonly ResolvedModelDefinition[];\n /** Families: a type's ancestors, children and descendants (plan polymorphic-types). */\n index: DefinitionIndex;\n};\n\n/**\n * The active schema as the content screens need it. Models are data (CONTRIBUTING.md rule 2): routes carry a\n * model's API key and resolve it here at render time, so a model created a moment ago works at once. A type\n * that extends another carries its effective fields, so every content screen sees inherited fields.\n */\nexport const useContentSchema = (): { schema: ContentSchema | undefined; error: unknown } => {\n const { resolved, error: modelsError } = useResolvedDefinitions();\n const componentList = useDefinitions('component');\n const schema = useMemo(() => {\n if (!resolved || !componentList.data) {\n return undefined;\n }\n const components = new Map<string, ComponentDefinition>();\n for (const { definition } of componentList.data) {\n if (isComponentDefinition(definition)) {\n components.set(definition.id, definition);\n }\n }\n const sortedModels = [...resolved.byId.values()].sort((a, b) => a.label.localeCompare(b.label));\n return { models: resolved.byId, components, sortedModels, index: resolved.index };\n }, [resolved, componentList.data]);\n return { schema, error: modelsError ?? componentList.error };\n};\n\nexport const findModelByKey = (\n schema: ContentSchema,\n modelKey: string,\n): ResolvedModelDefinition | undefined => schema.sortedModels.find((model) => model.apiKey === modelKey);\n"],"mappings":"8OAyBaO,MAAgF,CAC3F,GAAM,CAAE,WAAU,MAAOC,GAAgBJ,EAAuB,EAC1DK,EAAgBN,EAAe,WAAW,EAchD,MAAO,CAAE,QAAA,EAbMH,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACU,GAAY,CAACD,EAAc,KAC9B,OAEF,IAAME,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EAAc,KACrCP,EAAsBU,CAAU,GAClCD,EAAW,IAAIC,EAAW,GAAIA,CAAU,EAG5C,IAAMC,EAAe,CAAC,GAAGH,EAAS,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAG,IAAMI,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAC9F,MAAO,CAAE,OAAQL,EAAS,KAAM,aAAY,eAAc,MAAOA,EAAS,KAAM,CAClF,EAAG,CAACA,EAAUD,EAAc,IAAI,CACvB,EAAQ,MAAOD,GAAeC,EAAc,KAAM,CAC7D,EAEaO,GACX,EACA,IACwCC,EAAO,aAAa,KAAM,GAAUC,EAAM,SAAWC,CAAQ"}
1
+ {"version":3,"file":"useContentSchema-B_q1rMrG.js","names":["useMemo","__toESM","isComponentDefinition","useDefinitions","useResolvedDefinitions","import_react","require_react","useContentSchema","modelsError","componentList","resolved","components","definition","sortedModels","a","b","findModelByKey","schema","model","modelKey"],"sources":["../../src/features/Content/hooks/useContentSchema.ts"],"sourcesContent":["import {\n isComponentDefinition,\n type ComponentDefinition,\n type DefinitionIndex,\n type ResolvedModelDefinition,\n} from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useDefinitions } from '@/api/schema';\nimport { useResolvedDefinitions } from '@/hooks/useResolvedDefinitions';\n\nexport type ContentSchema = {\n /** Collections and singletons by stable ID, with their effective fields (inherited ones first). */\n models: ReadonlyMap<string, ResolvedModelDefinition>;\n components: ReadonlyMap<string, ComponentDefinition>;\n /** Collections and singletons, in label order (for navigation). */\n sortedModels: readonly ResolvedModelDefinition[];\n /** Families: a type's ancestors, children and descendants (plan polymorphic-types). */\n index: DefinitionIndex;\n};\n\n/**\n * The active schema as the content screens need it. Models are data (CONTRIBUTING.md rule 2): routes carry a\n * model's API key and resolve it here at render time, so a model created a moment ago works at once. A type\n * that extends another carries its effective fields, so every content screen sees inherited fields.\n */\nexport const useContentSchema = (): { schema: ContentSchema | undefined; error: unknown } => {\n const { resolved, error: modelsError } = useResolvedDefinitions();\n const componentList = useDefinitions('component');\n const schema = useMemo(() => {\n if (!resolved || !componentList.data) {\n return undefined;\n }\n const components = new Map<string, ComponentDefinition>();\n for (const { definition } of componentList.data) {\n if (isComponentDefinition(definition)) {\n components.set(definition.id, definition);\n }\n }\n const sortedModels = [...resolved.byId.values()].sort((a, b) => a.label.localeCompare(b.label));\n return { models: resolved.byId, components, sortedModels, index: resolved.index };\n }, [resolved, componentList.data]);\n return { schema, error: modelsError ?? componentList.error };\n};\n\nexport const findModelByKey = (\n schema: ContentSchema,\n modelKey: string,\n): ResolvedModelDefinition | undefined => schema.sortedModels.find((model) => model.apiKey === modelKey);\n"],"mappings":"8OAyBaO,MAAgF,CAC3F,GAAM,CAAE,WAAU,MAAOC,GAAgBJ,EAAuB,EAC1DK,EAAgBN,EAAe,WAAW,EAchD,MAAO,CAAE,QAAA,EAbMH,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACU,GAAY,CAACD,EAAc,KAC9B,OAEF,IAAME,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EAAc,KACrCP,EAAsBU,CAAU,GAClCD,EAAW,IAAIC,EAAW,GAAIA,CAAU,EAG5C,IAAMC,EAAe,CAAC,GAAGH,EAAS,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAG,IAAMI,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAC9F,MAAO,CAAE,OAAQL,EAAS,KAAM,aAAY,eAAc,MAAOA,EAAS,KAAM,CAClF,EAAG,CAACA,EAAUD,EAAc,IAAI,CACvB,EAAQ,MAAOD,GAAeC,EAAc,KAAM,CAC7D,EAEaO,GACX,EACA,IACwCC,EAAO,aAAa,KAAM,GAAUC,EAAM,SAAWC,CAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCursorPager-BHYqHb3M.js","names":["silent","useState","__toESM","queryKeys","useQueryClient","useQuery","keepPreviousData","adminApi","withCsrf","useMutation","createLucideIcon","PUBLISHING_POLL_INTERVAL_MS","ACTIVE_RUN_STATUSES","ACTIVE_DELIVERY_STATUSES","__iconData","Rocket","import_react","require_react","useResetOnOpen","open","reset","values","resetMutation","silent$1","pollWhileActive","active","useDeploymentConnections","query","connection","useDeploymentConnection","id","useDeploymentRuns","state","run","useDeploymentRun","useInvalidateDeployments","queryClient","useCreateDeploymentConnection","invalidate","input","useUpdateDeploymentConnection","_shownOnce","useDeleteDeploymentConnection","useTestDeploymentConnection","useTriggerDeployment","useRetryDeploymentRun","PUBLICATION_ACTION_LABELS","PROVIDER_LABELS","TRIGGER_POLICY_LABELS","RUN_TRIGGER_LABELS","TIMELINE_SOURCE_LABELS","silent","useWebhooks","useWebhookEvents","useWebhook","useWebhookDeliveries","cursor","delivery","useInvalidateWebhooks","useCreateWebhook","useUpdateWebhook","webhook","useDeleteWebhook","useRotateWebhookSecret","useTestWebhook","useRedeliverWebhook","deliveryId","useCursorPager","previousCursors","setPreviousCursors","setCursor","cursors","nextCursor"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/rocket.mjs","../../src/features/Publishing/hooks/useResetOnOpen.ts","../../src/api/deployments.ts","../../src/features/Publishing/constants.ts","../../src/api/webhooks.ts","../../src/features/Publishing/hooks/useCursorPager.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"rocket\",\n size: 24,\n node: [\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }],\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\",\n key: \"u4xsad\"\n }\n ],\n [\n \"path\",\n {\n d: \"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\",\n key: \"676m9\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\", key: \"92ym6u\" }]\n ]\n};\n__iconData.node;\nconst Rocket = createLucideIcon(__iconData);\n\nexport { __iconData, Rocket as default };\n//# sourceMappingURL=rocket.mjs.map\n","import { useEffect } from 'react';\nimport type { FieldValues, UseFormReset } from 'react-hook-form';\n\n/**\n * A sheet or popover form starts clean every time it opens: default values, and no error left over from the last\n * attempt. `values` must be stable (a module constant or memoized).\n */\nexport const useResetOnOpen = <TValues extends FieldValues>(\n open: boolean,\n reset: UseFormReset<TValues>,\n values: TValues,\n resetMutation: () => void,\n) => {\n useEffect(() => {\n if (open) {\n reset(values);\n resetMutation();\n }\n }, [open, reset, values, resetMutation]);\n};\n","import type {\n CreateDeploymentConnectionInput,\n DeploymentConnectionUpdated,\n DeploymentRunQuery,\n UpdateDeploymentConnectionInput,\n} from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ACTIVE_RUN_STATUSES, PUBLISHING_POLL_INTERVAL_MS } from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\n/** Polls while the latest runs are still in progress, so statuses move on screen without a reload. */\nconst pollWhileActive = (active: boolean) => (active ? PUBLISHING_POLL_INTERVAL_MS : false);\n\nexport const useDeploymentConnections = () =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connections,\n queryFn: () => adminApi.deployments.connections.list(),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.some((connection) =>\n connection.latestRun ? ACTIVE_RUN_STATUSES.has(connection.latestRun.status) : false,\n ) ?? false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentConnection = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connection(id),\n queryFn: () => adminApi.deployments.connections.get(id),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.latestRun ? ACTIVE_RUN_STATUSES.has(query.state.data.latestRun.status) : false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentRuns = (query: DeploymentRunQuery) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.runs(query),\n queryFn: () => adminApi.deployments.runs.list(query),\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n pollWhileActive(state.state.data?.items.some((run) => ACTIVE_RUN_STATUSES.has(run.status)) ?? false),\n meta: silent,\n });\n\n/** One run, polled until it reaches a final state (deployed, failed or unknown). */\nexport const useDeploymentRun = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.run(id),\n queryFn: () => adminApi.deployments.runs.get(id),\n refetchInterval: (query) =>\n pollWhileActive(query.state.data ? ACTIVE_RUN_STATUSES.has(query.state.data.status) : false),\n meta: silent,\n });\n\nconst useInvalidateDeployments = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.deployments.all });\n};\n\nexport const useCreateDeploymentConnection = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'create'],\n meta: silent,\n mutationFn: (input: CreateDeploymentConnectionInput) =>\n withCsrf(() => adminApi.deployments.connections.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/**\n * 409 when `expectedVersion` is stale: the caller reloads and tells the user. A secret Shapio generated\n * (`generatedSecrets`) is returned to the caller to show once and never kept in the query cache.\n */\nexport const useUpdateDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateDeploymentConnectionInput }) =>\n withCsrf(() => adminApi.deployments.connections.update(id, input)),\n onSuccess: ({ generatedSecrets: _shownOnce, ...connection }: DeploymentConnectionUpdated) => {\n queryClient.setQueryData(queryKeys.publishing.deployments.connection(connection.id), connection);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.remove(id)),\n onSuccess: (_result, id) => {\n queryClient.removeQueries({ queryKey: queryKeys.publishing.deployments.connection(id) });\n return invalidate();\n },\n });\n};\n\n/** Runs the provider's checks (credentials, reachability); the result is shown, not cached. */\nexport const useTestDeploymentConnection = () =>\n useMutation({\n mutationKey: ['deployments', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.test(id)),\n });\n\nexport const useTriggerDeployment = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'trigger'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.trigger(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRetryDeploymentRun = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'retry'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.runs.retry(id)),\n onSuccess: invalidate,\n });\n};\n","import type { DeploymentProvider, DeploymentTriggerPolicy, PublicationAction } from '@shapio/client';\n\nexport const PUBLICATION_ACTION_LABELS = {\n publish: 'publishing.actions.publish',\n unpublish: 'publishing.actions.unpublish',\n} as const satisfies Record<PublicationAction, string>;\n\nexport const PROVIDER_LABELS = {\n generic_webhook: 'publishing.deployments.providers.generic_webhook',\n cloudflare_pages: 'publishing.deployments.providers.cloudflare_pages',\n vercel: 'publishing.deployments.providers.vercel',\n netlify: 'publishing.deployments.providers.netlify',\n github: 'publishing.deployments.providers.github',\n} as const satisfies Record<DeploymentProvider, string>;\n\nexport const TRIGGER_POLICY_LABELS = {\n publish: 'publishing.deployments.triggers.publish',\n change_set: 'publishing.deployments.triggers.changeSet',\n schema: 'publishing.deployments.triggers.schema',\n manual: 'publishing.deployments.triggers.manual',\n} as const satisfies Record<DeploymentTriggerPolicy, string>;\n\nexport const RUN_TRIGGER_LABELS = {\n publish: 'publishing.deployments.runTriggers.publish',\n change_set: 'publishing.deployments.runTriggers.changeSet',\n schema: 'publishing.deployments.runTriggers.schema',\n manual: 'publishing.deployments.runTriggers.manual',\n retry: 'publishing.deployments.runTriggers.retry',\n} as const;\n\nexport const TIMELINE_SOURCE_LABELS = {\n shapio: 'publishing.deployments.sources.shapio',\n callback: 'publishing.deployments.sources.callback',\n provider: 'publishing.deployments.sources.provider',\n} as const;\n\n/** Longest error text shown in a table cell; the full text is in the details. */\nexport const ERROR_PREVIEW_LENGTH = 120;\n","import type { CreateWebhookInput, UpdateWebhookInput, Webhook } from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n ACTIVE_DELIVERY_STATUSES,\n PUBLISHING_PAGE_SIZE,\n PUBLISHING_POLL_INTERVAL_MS,\n} from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const useWebhooks = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.list,\n queryFn: () => adminApi.webhooks.list(),\n meta: silent,\n });\n\n/** The event types a webhook can subscribe to (a fixed catalogue: cached for the session). */\nexport const useWebhookEvents = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.events,\n queryFn: () => adminApi.webhooks.events(),\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useWebhook = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.webhook(id),\n queryFn: () => adminApi.webhooks.get(id),\n meta: silent,\n });\n\n/** One page of the delivery log, polled while a delivery on it still has attempts left. */\nexport const useWebhookDeliveries = (id: string, cursor: string | undefined) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.deliveries(id, cursor),\n queryFn: () => adminApi.webhooks.deliveries(id, { cursor, limit: PUBLISHING_PAGE_SIZE }),\n placeholderData: keepPreviousData,\n refetchInterval: (query) =>\n query.state.data?.items.some((delivery) => ACTIVE_DELIVERY_STATUSES.has(delivery.status))\n ? PUBLISHING_POLL_INTERVAL_MS\n : false,\n meta: silent,\n });\n\nconst useInvalidateWebhooks = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.webhooks.all });\n};\n\nexport const useCreateWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'create'],\n meta: silent,\n mutationFn: (input: CreateWebhookInput) => withCsrf(() => adminApi.webhooks.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/** 409 when `expectedVersion` is stale: the caller reloads and tells the user. */\nexport const useUpdateWebhook = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateWebhookInput }) =>\n withCsrf(() => adminApi.webhooks.update(id, input)),\n onSuccess: (webhook: Webhook) => {\n queryClient.setQueryData(queryKeys.publishing.webhooks.webhook(webhook.id), webhook);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.remove(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRotateWebhookSecret = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'rotateSecret'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.rotateSecret(id)),\n onSuccess: invalidate,\n });\n};\n\n/** Queues a `webhook.test` delivery; the delivery log shows its outcome. */\nexport const useTestWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.test(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRedeliverWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'redeliver'],\n mutationFn: ({ id, deliveryId }: { id: string; deliveryId: string }) =>\n withCsrf(() => adminApi.webhooks.redeliver(id, deliveryId)),\n onSuccess: invalidate,\n });\n};\n","import { useState } from 'react';\n\ntype CursorPagerProps = {\n onFirst: (() => void) | undefined;\n onPrevious: (() => void) | undefined;\n onNext: (() => void) | undefined;\n};\n\n/**\n * First / Previous / Next for a forward-only cursor list (newest first). The current cursor lives wherever\n * the caller keeps it (usually the URL); the cursors of earlier pages are remembered here.\n */\nexport const useCursorPager = (\n cursor: string | undefined,\n setCursor: (cursor: string | undefined) => void,\n) => {\n const [previousCursors, setPreviousCursors] = useState<(string | undefined)[]>([]);\n const pagerProps = (nextCursor: string | null): CursorPagerProps => ({\n onFirst:\n cursor === undefined\n ? undefined\n : () => {\n setPreviousCursors([]);\n setCursor(undefined);\n },\n onPrevious:\n previousCursors.length === 0\n ? undefined\n : () => {\n setCursor(previousCursors.at(-1));\n setPreviousCursors((cursors) => cursors.slice(0, -1));\n },\n onNext: nextCursor\n ? () => {\n setPreviousCursors((cursors) => [...cursors, cursor]);\n setCursor(nextCursor);\n }\n : undefined,\n });\n return { pagerProps, resetPager: () => setPreviousCursors([]) };\n};\n"],"ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"useCursorPager-BHYqHb3M.js","names":["silent","useState","__toESM","queryKeys","useQueryClient","useQuery","keepPreviousData","adminApi","withCsrf","useMutation","createLucideIcon","PUBLISHING_POLL_INTERVAL_MS","ACTIVE_RUN_STATUSES","ACTIVE_DELIVERY_STATUSES","__iconData","Rocket","import_react","require_react","useResetOnOpen","open","reset","values","resetMutation","silent$1","pollWhileActive","active","useDeploymentConnections","query","connection","useDeploymentConnection","id","useDeploymentRuns","state","run","useDeploymentRun","useInvalidateDeployments","queryClient","useCreateDeploymentConnection","invalidate","input","useUpdateDeploymentConnection","_shownOnce","useDeleteDeploymentConnection","useTestDeploymentConnection","useTriggerDeployment","useRetryDeploymentRun","PUBLICATION_ACTION_LABELS","PROVIDER_LABELS","TRIGGER_POLICY_LABELS","RUN_TRIGGER_LABELS","TIMELINE_SOURCE_LABELS","silent","useWebhooks","useWebhookEvents","useWebhook","useWebhookDeliveries","cursor","delivery","useInvalidateWebhooks","useCreateWebhook","useUpdateWebhook","webhook","useDeleteWebhook","useRotateWebhookSecret","useTestWebhook","useRedeliverWebhook","deliveryId","useCursorPager","previousCursors","setPreviousCursors","setCursor","cursors","nextCursor"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/rocket.mjs","../../src/features/Publishing/hooks/useResetOnOpen.ts","../../src/api/deployments.ts","../../src/features/Publishing/constants.ts","../../src/api/webhooks.ts","../../src/features/Publishing/hooks/useCursorPager.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"rocket\",\n size: 24,\n node: [\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }],\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\",\n key: \"u4xsad\"\n }\n ],\n [\n \"path\",\n {\n d: \"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\",\n key: \"676m9\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\", key: \"92ym6u\" }]\n ]\n};\n__iconData.node;\nconst Rocket = createLucideIcon(__iconData);\n\nexport { __iconData, Rocket as default };\n//# sourceMappingURL=rocket.mjs.map\n","import { useEffect } from 'react';\nimport type { FieldValues, UseFormReset } from 'react-hook-form';\n\n/**\n * A sheet or popover form starts clean every time it opens: default values, and no error left over from the last\n * attempt. `values` must be stable (a module constant or memoized).\n */\nexport const useResetOnOpen = <TValues extends FieldValues>(\n open: boolean,\n reset: UseFormReset<TValues>,\n values: TValues,\n resetMutation: () => void,\n) => {\n useEffect(() => {\n if (open) {\n reset(values);\n resetMutation();\n }\n }, [open, reset, values, resetMutation]);\n};\n","import type {\n CreateDeploymentConnectionInput,\n DeploymentConnectionUpdated,\n DeploymentRunQuery,\n UpdateDeploymentConnectionInput,\n} from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ACTIVE_RUN_STATUSES, PUBLISHING_POLL_INTERVAL_MS } from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\n/** Polls while the latest runs are still in progress, so statuses move on screen without a reload. */\nconst pollWhileActive = (active: boolean) => (active ? PUBLISHING_POLL_INTERVAL_MS : false);\n\nexport const useDeploymentConnections = () =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connections,\n queryFn: () => adminApi.deployments.connections.list(),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.some((connection) =>\n connection.latestRun ? ACTIVE_RUN_STATUSES.has(connection.latestRun.status) : false,\n ) ?? false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentConnection = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connection(id),\n queryFn: () => adminApi.deployments.connections.get(id),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.latestRun ? ACTIVE_RUN_STATUSES.has(query.state.data.latestRun.status) : false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentRuns = (query: DeploymentRunQuery) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.runs(query),\n queryFn: () => adminApi.deployments.runs.list(query),\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n pollWhileActive(state.state.data?.items.some((run) => ACTIVE_RUN_STATUSES.has(run.status)) ?? false),\n meta: silent,\n });\n\n/** One run, polled until it reaches a final state (deployed, failed or unknown). */\nexport const useDeploymentRun = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.run(id),\n queryFn: () => adminApi.deployments.runs.get(id),\n refetchInterval: (query) =>\n pollWhileActive(query.state.data ? ACTIVE_RUN_STATUSES.has(query.state.data.status) : false),\n meta: silent,\n });\n\nconst useInvalidateDeployments = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.deployments.all });\n};\n\nexport const useCreateDeploymentConnection = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'create'],\n meta: silent,\n mutationFn: (input: CreateDeploymentConnectionInput) =>\n withCsrf(() => adminApi.deployments.connections.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/**\n * 409 when `expectedVersion` is stale: the caller reloads and tells the user. A secret Shapio generated\n * (`generatedSecrets`) is returned to the caller to show once and never kept in the query cache.\n */\nexport const useUpdateDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateDeploymentConnectionInput }) =>\n withCsrf(() => adminApi.deployments.connections.update(id, input)),\n onSuccess: ({ generatedSecrets: _shownOnce, ...connection }: DeploymentConnectionUpdated) => {\n queryClient.setQueryData(queryKeys.publishing.deployments.connection(connection.id), connection);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.remove(id)),\n onSuccess: (_result, id) => {\n queryClient.removeQueries({ queryKey: queryKeys.publishing.deployments.connection(id) });\n return invalidate();\n },\n });\n};\n\n/** Runs the provider's checks (credentials, reachability); the result is shown, not cached. */\nexport const useTestDeploymentConnection = () =>\n useMutation({\n mutationKey: ['deployments', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.test(id)),\n });\n\nexport const useTriggerDeployment = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'trigger'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.trigger(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRetryDeploymentRun = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'retry'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.runs.retry(id)),\n onSuccess: invalidate,\n });\n};\n","import type { DeploymentProvider, DeploymentTriggerPolicy, PublicationAction } from '@shapio/client';\n\nexport const PUBLICATION_ACTION_LABELS = {\n publish: 'publishing.actions.publish',\n unpublish: 'publishing.actions.unpublish',\n} as const satisfies Record<PublicationAction, string>;\n\nexport const PROVIDER_LABELS = {\n generic_webhook: 'publishing.deployments.providers.generic_webhook',\n cloudflare_pages: 'publishing.deployments.providers.cloudflare_pages',\n vercel: 'publishing.deployments.providers.vercel',\n netlify: 'publishing.deployments.providers.netlify',\n github: 'publishing.deployments.providers.github',\n} as const satisfies Record<DeploymentProvider, string>;\n\nexport const TRIGGER_POLICY_LABELS = {\n publish: 'publishing.deployments.triggers.publish',\n change_set: 'publishing.deployments.triggers.changeSet',\n schema: 'publishing.deployments.triggers.schema',\n manual: 'publishing.deployments.triggers.manual',\n} as const satisfies Record<DeploymentTriggerPolicy, string>;\n\nexport const RUN_TRIGGER_LABELS = {\n publish: 'publishing.deployments.runTriggers.publish',\n change_set: 'publishing.deployments.runTriggers.changeSet',\n schema: 'publishing.deployments.runTriggers.schema',\n manual: 'publishing.deployments.runTriggers.manual',\n retry: 'publishing.deployments.runTriggers.retry',\n} as const;\n\nexport const TIMELINE_SOURCE_LABELS = {\n shapio: 'publishing.deployments.sources.shapio',\n callback: 'publishing.deployments.sources.callback',\n provider: 'publishing.deployments.sources.provider',\n} as const;\n\n/** Longest error text shown in a table cell; the full text is in the details. */\nexport const ERROR_PREVIEW_LENGTH = 120;\n","import type { CreateWebhookInput, UpdateWebhookInput, Webhook } from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n ACTIVE_DELIVERY_STATUSES,\n PUBLISHING_PAGE_SIZE,\n PUBLISHING_POLL_INTERVAL_MS,\n} from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const useWebhooks = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.list,\n queryFn: () => adminApi.webhooks.list(),\n meta: silent,\n });\n\n/** The event types a webhook can subscribe to (a fixed catalog: cached for the session). */\nexport const useWebhookEvents = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.events,\n queryFn: () => adminApi.webhooks.events(),\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useWebhook = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.webhook(id),\n queryFn: () => adminApi.webhooks.get(id),\n meta: silent,\n });\n\n/** One page of the delivery log, polled while a delivery on it still has attempts left. */\nexport const useWebhookDeliveries = (id: string, cursor: string | undefined) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.deliveries(id, cursor),\n queryFn: () => adminApi.webhooks.deliveries(id, { cursor, limit: PUBLISHING_PAGE_SIZE }),\n placeholderData: keepPreviousData,\n refetchInterval: (query) =>\n query.state.data?.items.some((delivery) => ACTIVE_DELIVERY_STATUSES.has(delivery.status))\n ? PUBLISHING_POLL_INTERVAL_MS\n : false,\n meta: silent,\n });\n\nconst useInvalidateWebhooks = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.webhooks.all });\n};\n\nexport const useCreateWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'create'],\n meta: silent,\n mutationFn: (input: CreateWebhookInput) => withCsrf(() => adminApi.webhooks.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/** 409 when `expectedVersion` is stale: the caller reloads and tells the user. */\nexport const useUpdateWebhook = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateWebhookInput }) =>\n withCsrf(() => adminApi.webhooks.update(id, input)),\n onSuccess: (webhook: Webhook) => {\n queryClient.setQueryData(queryKeys.publishing.webhooks.webhook(webhook.id), webhook);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.remove(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRotateWebhookSecret = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'rotateSecret'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.rotateSecret(id)),\n onSuccess: invalidate,\n });\n};\n\n/** Queues a `webhook.test` delivery; the delivery log shows its outcome. */\nexport const useTestWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.test(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRedeliverWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'redeliver'],\n mutationFn: ({ id, deliveryId }: { id: string; deliveryId: string }) =>\n withCsrf(() => adminApi.webhooks.redeliver(id, deliveryId)),\n onSuccess: invalidate,\n });\n};\n","import { useState } from 'react';\n\ntype CursorPagerProps = {\n onFirst: (() => void) | undefined;\n onPrevious: (() => void) | undefined;\n onNext: (() => void) | undefined;\n};\n\n/**\n * First / Previous / Next for a forward-only cursor list (newest first). The current cursor lives wherever\n * the caller keeps it (usually the URL); the cursors of earlier pages are remembered here.\n */\nexport const useCursorPager = (\n cursor: string | undefined,\n setCursor: (cursor: string | undefined) => void,\n) => {\n const [previousCursors, setPreviousCursors] = useState<(string | undefined)[]>([]);\n const pagerProps = (nextCursor: string | null): CursorPagerProps => ({\n onFirst:\n cursor === undefined\n ? undefined\n : () => {\n setPreviousCursors([]);\n setCursor(undefined);\n },\n onPrevious:\n previousCursors.length === 0\n ? undefined\n : () => {\n setCursor(previousCursors.at(-1));\n setPreviousCursors((cursors) => cursors.slice(0, -1));\n },\n onNext: nextCursor\n ? () => {\n setPreviousCursors((cursors) => [...cursors, cursor]);\n setCursor(nextCursor);\n }\n : undefined,\n });\n return { pagerProps, resetPager: () => setPreviousCursors([]) };\n};\n"],"ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{n as r}from"./createLucideIcon-BOsNKleB.js";import{n as i,r as a}from"./InlineConfirm-A4IqkrGp.js";var o=e(t(),1),s=e(n(),1),c=({dirty:e,pending:t=!1,onOpenChange:n,registersEdits:c=!0})=>{let{t:l}=r(),[u,d]=(0,o.useState)(!1);return i(c&&e),{requestOpenChange:r=>{if(!r&&e&&!t){d(!0);return}n(r)},discardPrompt:(0,s.jsx)(a,{open:u,onOpenChange:d,title:l(`unsaved.title`),description:l(`unsaved.description`),cancelLabel:l(`unsaved.stay`),confirmLabel:l(`unsaved.leave`),destructive:!0,onConfirm:()=>{d(!1),n(!1)}})}};export{c as t};
2
- //# sourceMappingURL=useDiscardGuard-DvBI3VIz.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{n as r}from"./createLucideIcon-BOsNKleB.js";import{n as i,r as a}from"./InlineConfirm-Kj9AOIFO.js";var o=e(t(),1),s=e(n(),1),c=({dirty:e,pending:t=!1,onOpenChange:n,registersEdits:c=!0})=>{let{t:l}=r(),[u,d]=(0,o.useState)(!1);return i(c&&e),{requestOpenChange:r=>{if(!r&&e&&!t){d(!0);return}n(r)},discardPrompt:(0,s.jsx)(a,{open:u,onOpenChange:d,title:l(`unsaved.title`),description:l(`unsaved.description`),cancelLabel:l(`unsaved.stay`),confirmLabel:l(`unsaved.leave`),destructive:!0,onConfirm:()=>{d(!1),n(!1)}})}};export{c as t};
2
+ //# sourceMappingURL=useDiscardGuard-C4QTfiU4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDiscardGuard-DvBI3VIz.js","names":["useState","_jsx","__toESM","require_jsx_runtime","useTranslation","useRegisterUnsavedEdits","ConfirmDialog","import_react","require_react","import_jsx_runtime","useDiscardGuard","confirmingDiscard","setConfirmingDiscard","registersEdits","dirty","open","pending","onOpenChange","t"],"sources":["../../src/hooks/useDiscardGuard.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '@/components/ConfirmDialog';\nimport { useRegisterUnsavedEdits } from './useRegisterUnsavedEdits';\n\ntype UseDiscardGuardOptions = {\n /** Unsaved edits: closing asks before discarding them. */\n dirty: boolean;\n /** While a save runs, closing is not intercepted (the caller blocks it or lets it finish). */\n pending?: boolean;\n /** The overlay's own open/close handler, called once closing is allowed. */\n onOpenChange: (open: boolean) => void;\n /**\n * Whether `dirty` counts as this screen's unsaved edits (default true), so an ended session is resumed in\n * place. False when `dirty` is itself derived from that count (Sign out asking over other screens' edits).\n */\n registersEdits?: boolean;\n};\n\n/**\n * Dirty-close protection for a sheet (or any overlay with `onOpenChange`). Pass `requestOpenChange` to the\n * overlay instead of `onOpenChange` and render `discardPrompt` beside it: Escape, the overlay, the close\n * button and Cancel then ask \"Discard unsaved changes?\" before closing over unsaved edits.\n */\nexport const useDiscardGuard = ({\n dirty,\n pending = false,\n onOpenChange,\n registersEdits = true,\n}: UseDiscardGuardOptions): { requestOpenChange: (open: boolean) => void; discardPrompt: ReactNode } => {\n const { t } = useTranslation();\n const [confirmingDiscard, setConfirmingDiscard] = useState(false);\n useRegisterUnsavedEdits(registersEdits && dirty);\n const requestOpenChange = (open: boolean) => {\n if (!open && dirty && !pending) {\n setConfirmingDiscard(true);\n return;\n }\n onOpenChange(open);\n };\n const discardPrompt = (\n <ConfirmDialog\n open={confirmingDiscard}\n onOpenChange={setConfirmingDiscard}\n title={t('unsaved.title')}\n description={t('unsaved.description')}\n cancelLabel={t('unsaved.stay')}\n confirmLabel={t('unsaved.leave')}\n destructive\n onConfirm={() => {\n setConfirmingDiscard(false);\n onOpenChange(false);\n }}\n />\n );\n return { requestOpenChange, discardPrompt };\n};\n"],"mappings":"wQAwBaU,GAAmB,CAC9B,QACA,UAAU,GACV,eACA,iBAAiB,MACqF,CACtG,GAAM,CAAE,KAAMN,EAAe,EACvB,CAACO,EAAmBC,IAAA,EAAwBZ,EAAAA,SAAAA,CAAS,EAAK,EAwBhE,OAvBAK,EAAwBQ,GAAkBC,CAAK,EAuBxC,CAAE,kBAtBkB,GAAkB,CAC3C,GAAI,CAACC,GAAQD,GAAS,CAACE,EAAS,CAC9BJ,EAAqB,EAAI,EACzB,MACF,CACAK,EAAaF,CAAI,CACnB,EAgB4B,eAAA,EAd1Bd,EAAAA,IAAAA,CAACK,EAAD,CACE,KAAMK,EACN,aAAcC,EACd,MAAOM,EAAE,eAAe,EACxB,YAAaA,EAAE,qBAAqB,EACpC,YAAaA,EAAE,cAAc,EAC7B,aAAcA,EAAE,eAAe,EAC/B,YAAA,GACA,cAAiB,CACfN,EAAqB,EAAK,EAC1BK,EAAa,EAAK,CACpB,CACD,CAEyB,CAAc,CAC5C"}
1
+ {"version":3,"file":"useDiscardGuard-C4QTfiU4.js","names":["useState","_jsx","__toESM","require_jsx_runtime","useTranslation","useRegisterUnsavedEdits","ConfirmDialog","import_react","require_react","import_jsx_runtime","useDiscardGuard","confirmingDiscard","setConfirmingDiscard","registersEdits","dirty","open","pending","onOpenChange","t"],"sources":["../../src/hooks/useDiscardGuard.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '@/components/ConfirmDialog';\nimport { useRegisterUnsavedEdits } from './useRegisterUnsavedEdits';\n\ntype UseDiscardGuardOptions = {\n /** Unsaved edits: closing asks before discarding them. */\n dirty: boolean;\n /** While a save runs, closing is not intercepted (the caller blocks it or lets it finish). */\n pending?: boolean;\n /** The overlay's own open/close handler, called once closing is allowed. */\n onOpenChange: (open: boolean) => void;\n /**\n * Whether `dirty` counts as this screen's unsaved edits (default true), so an ended session is resumed in\n * place. False when `dirty` is itself derived from that count (Sign out asking over other screens' edits).\n */\n registersEdits?: boolean;\n};\n\n/**\n * Dirty-close protection for a sheet (or any overlay with `onOpenChange`). Pass `requestOpenChange` to the\n * overlay instead of `onOpenChange` and render `discardPrompt` beside it: Escape, the overlay, the close\n * button and Cancel then ask \"Discard unsaved changes?\" before closing over unsaved edits.\n */\nexport const useDiscardGuard = ({\n dirty,\n pending = false,\n onOpenChange,\n registersEdits = true,\n}: UseDiscardGuardOptions): { requestOpenChange: (open: boolean) => void; discardPrompt: ReactNode } => {\n const { t } = useTranslation();\n const [confirmingDiscard, setConfirmingDiscard] = useState(false);\n useRegisterUnsavedEdits(registersEdits && dirty);\n const requestOpenChange = (open: boolean) => {\n if (!open && dirty && !pending) {\n setConfirmingDiscard(true);\n return;\n }\n onOpenChange(open);\n };\n const discardPrompt = (\n <ConfirmDialog\n open={confirmingDiscard}\n onOpenChange={setConfirmingDiscard}\n title={t('unsaved.title')}\n description={t('unsaved.description')}\n cancelLabel={t('unsaved.stay')}\n confirmLabel={t('unsaved.leave')}\n destructive\n onConfirm={() => {\n setConfirmingDiscard(false);\n onOpenChange(false);\n }}\n />\n );\n return { requestOpenChange, discardPrompt };\n};\n"],"mappings":"wQAwBaU,GAAmB,CAC9B,QACA,UAAU,GACV,eACA,iBAAiB,MACqF,CACtG,GAAM,CAAE,KAAMN,EAAe,EACvB,CAACO,EAAmBC,IAAA,EAAwBZ,EAAAA,SAAAA,CAAS,EAAK,EAwBhE,OAvBAK,EAAwBQ,GAAkBC,CAAK,EAuBxC,CAAE,kBAtBkB,GAAkB,CAC3C,GAAI,CAACC,GAAQD,GAAS,CAACE,EAAS,CAC9BJ,EAAqB,EAAI,EACzB,MACF,CACAK,EAAaF,CAAI,CACnB,EAgB4B,eAAA,EAd1Bd,EAAAA,IAAAA,CAACK,EAAD,CACE,KAAMK,EACN,aAAcC,EACd,MAAOM,EAAE,eAAe,EACxB,YAAaA,EAAE,qBAAqB,EACpC,YAAaA,EAAE,cAAc,EAC7B,aAAcA,EAAE,eAAe,EAC/B,YAAA,GACA,cAAiB,CACfN,EAAqB,EAAK,EAC1BK,EAAa,EAAK,CACpB,CACD,CAEyB,CAAc,CAC5C"}