@shapio/cms 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/dist/admin/assets/AssetTile-C-Mu0BRF.js +2 -0
  2. package/dist/admin/assets/AssetTile-C-Mu0BRF.js.map +1 -0
  3. package/dist/admin/assets/{AssistError-BYR085vj.js → AssistError-B-bnaHhJ.js} +2 -2
  4. package/dist/admin/assets/{AssistError-BYR085vj.js.map → AssistError-B-bnaHhJ.js.map} +1 -1
  5. package/dist/admin/assets/{BlockMenuItems-BnLF3Efc.js → BlockMenuItems-Dn9WULjL.js} +3 -3
  6. package/dist/admin/assets/{BlockMenuItems-BnLF3Efc.js.map → BlockMenuItems-Dn9WULjL.js.map} +1 -1
  7. package/dist/admin/assets/Body-C0SwduLi.js +2 -0
  8. package/dist/admin/assets/{Body-CCOZq2q9.js.map → Body-C0SwduLi.js.map} +1 -1
  9. package/dist/admin/assets/Builder-C11yUgu9.js +2 -0
  10. package/dist/admin/assets/Builder-C11yUgu9.js.map +1 -0
  11. package/dist/admin/assets/{ConfirmDialog-Tu-gjEwm.js → ConfirmDialog-BfpN2MQx.js} +2 -2
  12. package/dist/admin/assets/{ConfirmDialog-Tu-gjEwm.js.map → ConfirmDialog-BfpN2MQx.js.map} +1 -1
  13. package/dist/admin/assets/{CopyButton-BuBaIlCk.js → CopyButton-Dxbzp7hC.js} +2 -2
  14. package/dist/admin/assets/{CopyButton-BuBaIlCk.js.map → CopyButton-Dxbzp7hC.js.map} +1 -1
  15. package/dist/admin/assets/{CursorPager-Bvu3CXpD.js → CursorPager-DkZs6rPg.js} +2 -2
  16. package/dist/admin/assets/{CursorPager-Bvu3CXpD.js.map → CursorPager-DkZs6rPg.js.map} +1 -1
  17. package/dist/admin/assets/{ExternalLink-CCr5oRXI.js → ExternalLink-KdO72pTj.js} +2 -2
  18. package/dist/admin/assets/{ExternalLink-CCr5oRXI.js.map → ExternalLink-KdO72pTj.js.map} +1 -1
  19. package/dist/admin/assets/FocalPoint-r1MG_y-r.js +2 -0
  20. package/dist/admin/assets/FocalPoint-r1MG_y-r.js.map +1 -0
  21. package/dist/admin/assets/Form-D8vp4Kd_.js +2 -0
  22. package/dist/admin/assets/{Form-Doc0JEzF.js.map → Form-D8vp4Kd_.js.map} +1 -1
  23. package/dist/admin/assets/{FormCheckboxGroup-eg39IJvf.js → FormCheckboxGroup-8ObPh9cH.js} +2 -2
  24. package/dist/admin/assets/{FormCheckboxGroup-eg39IJvf.js.map → FormCheckboxGroup-8ObPh9cH.js.map} +1 -1
  25. package/dist/admin/assets/{FormRadioGroup-ZppSTZK6.js → FormRadioGroup-CAB3qzVS.js} +2 -2
  26. package/dist/admin/assets/{FormRadioGroup-ZppSTZK6.js.map → FormRadioGroup-CAB3qzVS.js.map} +1 -1
  27. package/dist/admin/assets/{FormSelectField-Cosnxiz-.js → FormSelectField-C7hE05Wq.js} +2 -2
  28. package/dist/admin/assets/{FormSelectField-Cosnxiz-.js.map → FormSelectField-C7hE05Wq.js.map} +1 -1
  29. package/dist/admin/assets/{FormSwitchField-DsKQEZw6.js → FormSwitchField-7EEYkGOH.js} +2 -2
  30. package/dist/admin/assets/{FormSwitchField-DsKQEZw6.js.map → FormSwitchField-7EEYkGOH.js.map} +1 -1
  31. package/dist/admin/assets/{FormTextareaField-BXidSgIE.js → FormTextareaField-BasuRoXW.js} +2 -2
  32. package/dist/admin/assets/{FormTextareaField-BXidSgIE.js.map → FormTextareaField-BasuRoXW.js.map} +1 -1
  33. package/dist/admin/assets/{HintedLabel-USQku9Yt.js → HintedLabel-BDV81kIT.js} +2 -2
  34. package/dist/admin/assets/{HintedLabel-USQku9Yt.js.map → HintedLabel-BDV81kIT.js.map} +1 -1
  35. package/dist/admin/assets/{InfoHint-Bz_yvehr.js → InfoHint-DWn9kLf1.js} +2 -2
  36. package/dist/admin/assets/{InfoHint-Bz_yvehr.js.map → InfoHint-DWn9kLf1.js.map} +1 -1
  37. package/dist/admin/assets/InsertMenuItem-DhJk5BeH.js +2 -0
  38. package/dist/admin/assets/InsertMenuItem-DhJk5BeH.js.map +1 -0
  39. package/dist/admin/assets/{LinkTabs-D4U-rJyK.js → LinkTabs-stM3j4aH.js} +2 -2
  40. package/dist/admin/assets/{LinkTabs-D4U-rJyK.js.map → LinkTabs-stM3j4aH.js.map} +1 -1
  41. package/dist/admin/assets/{Match-UAw1Ss8a.js → Match-Zu4pwfCC.js} +2 -2
  42. package/dist/admin/assets/{Match-UAw1Ss8a.js.map → Match-Zu4pwfCC.js.map} +1 -1
  43. package/dist/admin/assets/{Panel-BdjqCkKs.js → Panel-ClY9b33D.js} +2 -2
  44. package/dist/admin/assets/{Panel-BdjqCkKs.js.map → Panel-ClY9b33D.js.map} +1 -1
  45. package/dist/admin/assets/{QueryView-Bkyizh1P.js → QueryView-Cu-KPtQI.js} +2 -2
  46. package/dist/admin/assets/{QueryView-Bkyizh1P.js.map → QueryView-Cu-KPtQI.js.map} +1 -1
  47. package/dist/admin/assets/{RadioTile-VHTPl88w.js → RadioTile-Ci0LucKI.js} +2 -2
  48. package/dist/admin/assets/{RadioTile-VHTPl88w.js.map → RadioTile-Ci0LucKI.js.map} +1 -1
  49. package/dist/admin/assets/RichTextField-BcYOFkeW.js +144 -0
  50. package/dist/admin/assets/{RichTextField-B21FqrT5.js.map → RichTextField-BcYOFkeW.js.map} +1 -1
  51. package/dist/admin/assets/{RowTitle-BD8QPs_v.js → RowTitle-BdDgA5Lb.js} +2 -2
  52. package/dist/admin/assets/{RowTitle-BD8QPs_v.js.map → RowTitle-BdDgA5Lb.js.map} +1 -1
  53. package/dist/admin/assets/{SecretReveal-BfJKUxXW.js → SecretReveal-ai1uMW_b.js} +2 -2
  54. package/dist/admin/assets/{SecretReveal-BfJKUxXW.js.map → SecretReveal-ai1uMW_b.js.map} +1 -1
  55. package/dist/admin/assets/{SharedGlyph-DDPdvsm_.js → SharedGlyph-y6ZsA_gz.js} +2 -2
  56. package/dist/admin/assets/{SharedGlyph-DDPdvsm_.js.map → SharedGlyph-y6ZsA_gz.js.map} +1 -1
  57. package/dist/admin/assets/{StepList-DKhkw1hN.js → StepList-xmD9CPZl.js} +2 -2
  58. package/dist/admin/assets/{StepList-DKhkw1hN.js.map → StepList-xmD9CPZl.js.map} +1 -1
  59. package/dist/admin/assets/Structure-DGt-TDk5.js +2 -0
  60. package/dist/admin/assets/{Structure-C7dr00Bp.js.map → Structure-DGt-TDk5.js.map} +1 -1
  61. package/dist/admin/assets/{SubNavLink-BAF2-wuF.js → SubNavLink-YjjaDN40.js} +2 -2
  62. package/dist/admin/assets/{SubNavLink-BAF2-wuF.js.map → SubNavLink-YjjaDN40.js.map} +1 -1
  63. package/dist/admin/assets/{SuggestAltButton-DEsbHvs4.js → SuggestAltButton-D1-v_0wB.js} +2 -2
  64. package/dist/admin/assets/{SuggestAltButton-DEsbHvs4.js.map → SuggestAltButton-D1-v_0wB.js.map} +1 -1
  65. package/dist/admin/assets/{TextLink-CegO3jom.js → TextLink-DIqr5zkJ.js} +2 -2
  66. package/dist/admin/assets/{TextLink-CegO3jom.js.map → TextLink-DIqr5zkJ.js.map} +1 -1
  67. package/dist/admin/assets/Thumbnail-cjA7fSWh.js +2 -0
  68. package/dist/admin/assets/Thumbnail-cjA7fSWh.js.map +1 -0
  69. package/dist/admin/assets/{UnsavedChangesGuard-Cbfg-Bgj.js → UnsavedChangesGuard-B57D0278.js} +2 -2
  70. package/dist/admin/assets/{UnsavedChangesGuard-Cbfg-Bgj.js.map → UnsavedChangesGuard-B57D0278.js.map} +1 -1
  71. package/dist/admin/assets/{UserAvatar-CiZ00-cr.js → UserAvatar--pMv2i3c.js} +2 -2
  72. package/dist/admin/assets/{UserAvatar-CiZ00-cr.js.map → UserAvatar--pMv2i3c.js.map} +1 -1
  73. package/dist/admin/assets/{auth-BaVAo0u_.js → auth-YVfK3SxF.js} +2 -2
  74. package/dist/admin/assets/{auth-BaVAo0u_.js.map → auth-YVfK3SxF.js.map} +1 -1
  75. package/dist/admin/assets/{badge-IBeVOhKd.js → badge-C5oMRtwJ.js} +2 -2
  76. package/dist/admin/assets/{badge-IBeVOhKd.js.map → badge-C5oMRtwJ.js.map} +1 -1
  77. package/dist/admin/assets/{boxes-BH0MDegO.js → boxes-DRvd25_u.js} +2 -2
  78. package/dist/admin/assets/{boxes-BH0MDegO.js.map → boxes-DRvd25_u.js.map} +1 -1
  79. package/dist/admin/assets/{calendar-clock-DKUk-w81.js → calendar-clock-VENf4s1R.js} +2 -2
  80. package/dist/admin/assets/{calendar-clock-DKUk-w81.js.map → calendar-clock-VENf4s1R.js.map} +1 -1
  81. package/dist/admin/assets/{changeSets-o_G67qPk.js → changeSets-CObZV8H2.js} +2 -2
  82. package/dist/admin/assets/{changeSets-o_G67qPk.js.map → changeSets-CObZV8H2.js.map} +1 -1
  83. package/dist/admin/assets/chevron-left-D2DnQyeV.js +2 -0
  84. package/dist/admin/assets/{chevron-left-D259hWJn.js.map → chevron-left-D2DnQyeV.js.map} +1 -1
  85. package/dist/admin/assets/{circle-check-Cidzt1Ww.js → circle-check-jmRQz1Jq.js} +2 -2
  86. package/dist/admin/assets/{circle-check-Cidzt1Ww.js.map → circle-check-jmRQz1Jq.js.map} +1 -1
  87. package/dist/admin/assets/{clock-BOtPNp9-.js → clock-DrSTMGjp.js} +2 -2
  88. package/dist/admin/assets/{clock-BOtPNp9-.js.map → clock-DrSTMGjp.js.map} +1 -1
  89. package/dist/admin/assets/cn-CL1YHRrS.js +2 -0
  90. package/dist/admin/assets/cn-CL1YHRrS.js.map +1 -0
  91. package/dist/admin/assets/coerce-B4MJTGg1.js +2 -0
  92. package/dist/admin/assets/{coerce-DWI5sgLW.js.map → coerce-B4MJTGg1.js.map} +1 -1
  93. package/dist/admin/assets/constants-DT4WPUvz.js +2 -0
  94. package/dist/admin/assets/{constants-CgUdkWmf.js.map → constants-DT4WPUvz.js.map} +1 -1
  95. package/dist/admin/assets/content-HvisCB5m.js +3 -0
  96. package/dist/admin/assets/content-HvisCB5m.js.map +1 -0
  97. package/dist/admin/assets/{contentCounts-T-LmvUf5.js → contentCounts-DzIvdeXR.js} +2 -2
  98. package/dist/admin/assets/{contentCounts-T-LmvUf5.js.map → contentCounts-DzIvdeXR.js.map} +1 -1
  99. package/dist/admin/assets/{contentTypes-BSlp81l1.js → contentTypes-ArLEfM29.js} +2 -2
  100. package/dist/admin/assets/{contentTypes-BSlp81l1.js.map → contentTypes-ArLEfM29.js.map} +1 -1
  101. package/dist/admin/assets/context-4Jl20mYc.js +2 -0
  102. package/dist/admin/assets/context-4Jl20mYc.js.map +1 -0
  103. package/dist/admin/assets/{copy-DT7dAzVm.js → copy-t6kAFw-O.js} +2 -2
  104. package/dist/admin/assets/{copy-DT7dAzVm.js.map → copy-t6kAFw-O.js.map} +1 -1
  105. package/dist/admin/assets/{dateTimeLocal-DRq7DuYO.js → dateTimeLocal-IDUOKulz.js} +2 -2
  106. package/dist/admin/assets/{dateTimeLocal-DRq7DuYO.js.map → dateTimeLocal-IDUOKulz.js.map} +1 -1
  107. package/dist/admin/assets/develop-DvKYqVeK.js +11 -0
  108. package/dist/admin/assets/develop-DvKYqVeK.js.map +1 -0
  109. package/dist/admin/assets/dropdown-menu-DPzDthV7.js +2 -0
  110. package/dist/admin/assets/dropdown-menu-DPzDthV7.js.map +1 -0
  111. package/dist/admin/assets/{ellipsis-xDmHl1SK.js → ellipsis-DEHUaCkn.js} +2 -2
  112. package/dist/admin/assets/{ellipsis-xDmHl1SK.js.map → ellipsis-DEHUaCkn.js.map} +1 -1
  113. package/dist/admin/assets/external-link-B8UFREQ_.js +2 -0
  114. package/dist/admin/assets/external-link-B8UFREQ_.js.map +1 -0
  115. package/dist/admin/assets/{fileRoute-Buucm0CU.js → fileRoute-sJvv4Ipn.js} +2 -2
  116. package/dist/admin/assets/{fileRoute-Buucm0CU.js.map → fileRoute-sJvv4Ipn.js.map} +1 -1
  117. package/dist/admin/assets/folder-plus-iDg1hhew.js +2 -0
  118. package/dist/admin/assets/folder-plus-iDg1hhew.js.map +1 -0
  119. package/dist/admin/assets/followPlural-tOh6gDgT.js +2 -0
  120. package/dist/admin/assets/{followPlural-Cuocm4Sv.js.map → followPlural-tOh6gDgT.js.map} +1 -1
  121. package/dist/admin/assets/{globe-CAhrwBgv.js → globe-TooNSp9V.js} +2 -2
  122. package/dist/admin/assets/{globe-CAhrwBgv.js.map → globe-TooNSp9V.js.map} +1 -1
  123. package/dist/admin/assets/{image-CGN6ffEu.js → image-CXZXXH58.js} +2 -2
  124. package/dist/admin/assets/{image-CGN6ffEu.js.map → image-CXZXXH58.js.map} +1 -1
  125. package/dist/admin/assets/{image-off-0zX_kODH.js → image-off-cxva5G-Y.js} +2 -2
  126. package/dist/admin/assets/{image-off-0zX_kODH.js.map → image-off-cxva5G-Y.js.map} +1 -1
  127. package/dist/admin/assets/{inbox-CukkApHK.js → inbox-B8c9Kj_z.js} +2 -2
  128. package/dist/admin/assets/{inbox-CukkApHK.js.map → inbox-B8c9Kj_z.js.map} +1 -1
  129. package/dist/admin/assets/{inbox-CWq1hHqK.js → inbox-nfR2K7f6.js} +2 -2
  130. package/dist/admin/assets/{inbox-CWq1hHqK.js.map → inbox-nfR2K7f6.js.map} +1 -1
  131. package/dist/admin/assets/index-Bbb2ER3l.css +2 -0
  132. package/dist/admin/assets/index-C6FrF34G.js +4 -0
  133. package/dist/admin/assets/index-C6FrF34G.js.map +1 -0
  134. package/dist/admin/assets/{key-round-DnE-2gr0.js → key-round-CFJ61iCd.js} +2 -2
  135. package/dist/admin/assets/{key-round-DnE-2gr0.js.map → key-round-CFJ61iCd.js.map} +1 -1
  136. package/dist/admin/assets/languages-eh7U4anI.js +2 -0
  137. package/dist/admin/assets/languages-eh7U4anI.js.map +1 -0
  138. package/dist/admin/assets/layers-mGfmMsKE.js +2 -0
  139. package/dist/admin/assets/layers-mGfmMsKE.js.map +1 -0
  140. package/dist/admin/assets/link-2-off-DbZzRN_w.js +2 -0
  141. package/dist/admin/assets/link-2-off-DbZzRN_w.js.map +1 -0
  142. package/dist/admin/assets/{link-DPniuk00.js → link-b2pFaN-A.js} +2 -2
  143. package/dist/admin/assets/{link-DPniuk00.js.map → link-b2pFaN-A.js.map} +1 -1
  144. package/dist/admin/assets/{locales-DFLQ17ow.js → locales-oBD0q1pN.js} +2 -2
  145. package/dist/admin/assets/{locales-DFLQ17ow.js.map → locales-oBD0q1pN.js.map} +1 -1
  146. package/dist/admin/assets/{media-CKTs3j83.js → media-5ks_0Rre.js} +2 -2
  147. package/dist/admin/assets/{media-CKTs3j83.js.map → media-5ks_0Rre.js.map} +1 -1
  148. package/dist/admin/assets/media-BzivlEh2.js +2 -0
  149. package/dist/admin/assets/{media-CUfV74JZ.js.map → media-BzivlEh2.js.map} +1 -1
  150. package/dist/admin/assets/network-Cj04CpFi.js +2 -0
  151. package/dist/admin/assets/network-Cj04CpFi.js.map +1 -0
  152. package/dist/admin/assets/{pencil-BqAgKC9v.js → pencil-C7eD5mlZ.js} +2 -2
  153. package/dist/admin/assets/{pencil-BqAgKC9v.js.map → pencil-C7eD5mlZ.js.map} +1 -1
  154. package/dist/admin/assets/{plus-DLRcpVhJ.js → plus-BDZHQBlU.js} +2 -2
  155. package/dist/admin/assets/{plus-DLRcpVhJ.js.map → plus-BDZHQBlU.js.map} +1 -1
  156. package/dist/admin/assets/{preload-helper-BHNBIF88.js → preload-helper-CJNJ4S3k.js} +2 -2
  157. package/dist/admin/assets/{preload-helper-BHNBIF88.js.map → preload-helper-CJNJ4S3k.js.map} +1 -1
  158. package/dist/admin/assets/publishing-ChHkrwvr.js +2 -0
  159. package/dist/admin/assets/{publishing-DaaE8PaU.js.map → publishing-ChHkrwvr.js.map} +1 -1
  160. package/dist/admin/assets/{radio-group-CA3XlQcc.js → radio-group-DSK5LPaM.js} +2 -2
  161. package/dist/admin/assets/{radio-group-CA3XlQcc.js.map → radio-group-DSK5LPaM.js.map} +1 -1
  162. package/dist/admin/assets/{rotate-ccw-CfrkcgYa.js → rotate-ccw-DCWwb4Ga.js} +2 -2
  163. package/dist/admin/assets/{rotate-ccw-CfrkcgYa.js.map → rotate-ccw-DCWwb4Ga.js.map} +1 -1
  164. package/dist/admin/assets/{schedules-hJQkjEhN.js → schedules-DXrBSypK.js} +2 -2
  165. package/dist/admin/assets/{schedules-hJQkjEhN.js.map → schedules-DXrBSypK.js.map} +1 -1
  166. package/dist/admin/assets/{schema--xSR7cf9.js → schema-B7L9OJrX.js} +2 -2
  167. package/dist/admin/assets/{schema--xSR7cf9.js.map → schema-B7L9OJrX.js.map} +1 -1
  168. package/dist/admin/assets/{scroll-text-BA9yh7Za.js → scroll-text-BLThe4Ki.js} +2 -2
  169. package/dist/admin/assets/{scroll-text-BA9yh7Za.js.map → scroll-text-BLThe4Ki.js.map} +1 -1
  170. package/dist/admin/assets/{file-text-BJkQMeQO.js → search-CcJQqtRw.js} +2 -2
  171. package/dist/admin/assets/search-CcJQqtRw.js.map +1 -0
  172. package/dist/admin/assets/{searchSchemas-C-nQbyhd.js → searchSchemas-BdwAFaVO.js} +2 -2
  173. package/dist/admin/assets/{searchSchemas-C-nQbyhd.js.map → searchSchemas-BdwAFaVO.js.map} +1 -1
  174. package/dist/admin/assets/{sections-D0OZozD2.js → sections-TIN_Nl1b.js} +2 -2
  175. package/dist/admin/assets/{sections-D0OZozD2.js.map → sections-TIN_Nl1b.js.map} +1 -1
  176. package/dist/admin/assets/sections-iNOzo7pL.js +2 -0
  177. package/dist/admin/assets/sections-iNOzo7pL.js.map +1 -0
  178. package/dist/admin/assets/{select-De48SQdZ.js → select-DyD7qIkJ.js} +2 -2
  179. package/dist/admin/assets/{select-De48SQdZ.js.map → select-DyD7qIkJ.js.map} +1 -1
  180. package/dist/admin/assets/{send-NuSmLVSD.js → send-CbP0Rc9_.js} +2 -2
  181. package/dist/admin/assets/{send-NuSmLVSD.js.map → send-CbP0Rc9_.js.map} +1 -1
  182. package/dist/admin/assets/seo-uMm2fGPB.js +2 -0
  183. package/dist/admin/assets/seo-uMm2fGPB.js.map +1 -0
  184. package/dist/admin/assets/settings-CJVORrIV.js +2 -0
  185. package/dist/admin/assets/settings-CJVORrIV.js.map +1 -0
  186. package/dist/admin/assets/skeleton-B5GJgv7y.js +42 -0
  187. package/dist/admin/assets/skeleton-B5GJgv7y.js.map +1 -0
  188. package/dist/admin/assets/snapshots-DkyyrWX3.js +2 -0
  189. package/dist/admin/assets/{snapshots-BQeFK5cj.js.map → snapshots-DkyyrWX3.js.map} +1 -1
  190. package/dist/admin/assets/{sparkles-B-0I44es.js → sparkles-D88gf3vX.js} +2 -2
  191. package/dist/admin/assets/{sparkles-B-0I44es.js.map → sparkles-D88gf3vX.js.map} +1 -1
  192. package/dist/admin/assets/src-B2qcqjNM.js +4 -0
  193. package/dist/admin/assets/src-B2qcqjNM.js.map +1 -0
  194. package/dist/admin/assets/{stableId-rPnYVF-A.js → stableId-DlNKh3HM.js} +2 -2
  195. package/dist/admin/assets/{stableId-rPnYVF-A.js.map → stableId-DlNKh3HM.js.map} +1 -1
  196. package/dist/admin/assets/{store-Bqd9L9DK.js → store-jUWyOXDG.js} +2 -2
  197. package/dist/admin/assets/{store-Bqd9L9DK.js.map → store-jUWyOXDG.js.map} +1 -1
  198. package/dist/admin/assets/{switch-JmfyFAQG.js → switch-DbIrjP3h.js} +2 -2
  199. package/dist/admin/assets/{switch-JmfyFAQG.js.map → switch-DbIrjP3h.js.map} +1 -1
  200. package/dist/admin/assets/table-DQ5ILlSh.js +56 -0
  201. package/dist/admin/assets/table-DQ5ILlSh.js.map +1 -0
  202. package/dist/admin/assets/tabs-BJhfL-lw.js +5 -0
  203. package/dist/admin/assets/tabs-BJhfL-lw.js.map +1 -0
  204. package/dist/admin/assets/{textarea-eatLAWE_.js → textarea-FwSvwmyT.js} +2 -2
  205. package/dist/admin/assets/{textarea-eatLAWE_.js.map → textarea-FwSvwmyT.js.map} +1 -1
  206. package/dist/admin/assets/theme-C0Tv6M38.js +2 -0
  207. package/dist/admin/assets/theme-C0Tv6M38.js.map +1 -0
  208. package/dist/admin/assets/{titles-Bi2fWNN4.js → titles-uL13bpi8.js} +2 -2
  209. package/dist/admin/assets/{titles-Bi2fWNN4.js.map → titles-uL13bpi8.js.map} +1 -1
  210. package/dist/admin/assets/{tokens-C2E7swse.js → tokens-C-20gLAT.js} +2 -2
  211. package/dist/admin/assets/{tokens-C2E7swse.js.map → tokens-C-20gLAT.js.map} +1 -1
  212. package/dist/admin/assets/{tooltip-Bji9fmSr.js → tooltip-BK5FqmJ0.js} +2 -2
  213. package/dist/admin/assets/{tooltip-Bji9fmSr.js.map → tooltip-BK5FqmJ0.js.map} +1 -1
  214. package/dist/admin/assets/{undo-2-BU-uqm7e.js → undo-2-CLy2zklL.js} +2 -2
  215. package/dist/admin/assets/{undo-2-BU-uqm7e.js.map → undo-2-CLy2zklL.js.map} +1 -1
  216. package/dist/admin/assets/{useAuditLabels-D5nmbXqN.js → useAuditLabels-BJF7M5RY.js} +2 -2
  217. package/dist/admin/assets/{useAuditLabels-D5nmbXqN.js.map → useAuditLabels-BJF7M5RY.js.map} +1 -1
  218. package/dist/admin/assets/{useConfirmTarget-Y7_8kVX5.js → useConfirmTarget-BUvlrGSW.js} +2 -2
  219. package/dist/admin/assets/{useConfirmTarget-Y7_8kVX5.js.map → useConfirmTarget-BUvlrGSW.js.map} +1 -1
  220. package/dist/admin/assets/{useContentSchema-DJTqjlUk.js → useContentSchema-BCdLYsKa.js} +2 -2
  221. package/dist/admin/assets/{useContentSchema-DJTqjlUk.js.map → useContentSchema-BCdLYsKa.js.map} +1 -1
  222. package/dist/admin/assets/{useCursorPager-CiJroOo7.js → useCursorPager-CzB6NDOB.js} +2 -2
  223. package/dist/admin/assets/{useCursorPager-CiJroOo7.js.map → useCursorPager-CzB6NDOB.js.map} +1 -1
  224. package/dist/admin/assets/{useDiscardGuard-t_N3l9TQ.js → useDiscardGuard-CGFgC3xY.js} +2 -2
  225. package/dist/admin/assets/{useDiscardGuard-t_N3l9TQ.js.map → useDiscardGuard-CGFgC3xY.js.map} +1 -1
  226. package/dist/admin/assets/useMediaPickerDialog-BOkGEyG7.js +2 -0
  227. package/dist/admin/assets/useMediaPickerDialog-BOkGEyG7.js.map +1 -0
  228. package/dist/admin/assets/useMediaUploader-D1ouV8jc.js +2 -0
  229. package/dist/admin/assets/useMediaUploader-D1ouV8jc.js.map +1 -0
  230. package/dist/admin/assets/{usePaletteItems-BVjWCdow.js → usePaletteItems-neKzBlys.js} +2 -2
  231. package/dist/admin/assets/{usePaletteItems-BVjWCdow.js.map → usePaletteItems-neKzBlys.js.map} +1 -1
  232. package/dist/admin/assets/{usePlaces-CnSOZwtO.js → usePlaces-6iTN15Xy.js} +2 -2
  233. package/dist/admin/assets/{usePlaces-CnSOZwtO.js.map → usePlaces-6iTN15Xy.js.map} +1 -1
  234. package/dist/admin/assets/{useQueries-BRolGUiw.js → useQueries-CYfcxI0Q.js} +2 -2
  235. package/dist/admin/assets/{useQueries-BRolGUiw.js.map → useQueries-CYfcxI0Q.js.map} +1 -1
  236. package/dist/admin/assets/useResolvedScheme-D0moXjaP.js +2 -0
  237. package/dist/admin/assets/{searchSchema-Ypl6gq9g.js.map → useResolvedScheme-D0moXjaP.js.map} +1 -1
  238. package/dist/admin/assets/useSchemaScopeAccess-WQKmj8_3.js +2 -0
  239. package/dist/admin/assets/useSchemaScopeAccess-WQKmj8_3.js.map +1 -0
  240. package/dist/admin/assets/{users-CbErtM7w.js → users-B01EH47o.js} +2 -2
  241. package/dist/admin/assets/{users-CbErtM7w.js.map → users-B01EH47o.js.map} +1 -1
  242. package/dist/admin/assets/{users-bDGYpSXg.js → users-BgTNDPXx.js} +2 -2
  243. package/dist/admin/assets/{users-bDGYpSXg.js.map → users-BgTNDPXx.js.map} +1 -1
  244. package/dist/admin/assets/{zod-Gtw4e0qi.js → zod-CS0EvbwG.js} +2 -2
  245. package/dist/admin/assets/{zod-Gtw4e0qi.js.map → zod-CS0EvbwG.js.map} +1 -1
  246. package/dist/admin/index.html +57 -57
  247. package/dist/admin/theme-init.js +23 -21
  248. package/dist/cli.js +19 -9
  249. package/dist/cli.js.map +1 -1
  250. package/dist/config.d.ts +1 -1
  251. package/dist/index.d.ts +4 -4
  252. package/dist/index.js +1 -1
  253. package/dist/{public-B7fFHMNr.d.ts → public-BSbOGbK-.d.ts} +19 -3
  254. package/dist/{worker-BAmQPoTJ.js → worker-i1rY2TIZ.js} +1894 -612
  255. package/dist/worker-i1rY2TIZ.js.map +1 -0
  256. package/package.json +5 -5
  257. package/dist/admin/assets/Body-CCOZq2q9.js +0 -2
  258. package/dist/admin/assets/Builder-BZy9mphs.js +0 -2
  259. package/dist/admin/assets/Builder-BZy9mphs.js.map +0 -1
  260. package/dist/admin/assets/Form-Doc0JEzF.js +0 -2
  261. package/dist/admin/assets/InsertMenuItem-DJXglsEd.js +0 -2
  262. package/dist/admin/assets/InsertMenuItem-DJXglsEd.js.map +0 -1
  263. package/dist/admin/assets/RichTextField-B21FqrT5.js +0 -144
  264. package/dist/admin/assets/Structure-C7dr00Bp.js +0 -2
  265. package/dist/admin/assets/Thumbnail-CTpKlrxR.js +0 -2
  266. package/dist/admin/assets/Thumbnail-CTpKlrxR.js.map +0 -1
  267. package/dist/admin/assets/arrow-up-DwMJqZVV.js +0 -2
  268. package/dist/admin/assets/arrow-up-DwMJqZVV.js.map +0 -1
  269. package/dist/admin/assets/chevron-left-D259hWJn.js +0 -2
  270. package/dist/admin/assets/circle-x-c1RwmC6j.js +0 -2
  271. package/dist/admin/assets/circle-x-c1RwmC6j.js.map +0 -1
  272. package/dist/admin/assets/cn-M4_WHiur.js +0 -2
  273. package/dist/admin/assets/cn-M4_WHiur.js.map +0 -1
  274. package/dist/admin/assets/coerce-DWI5sgLW.js +0 -2
  275. package/dist/admin/assets/constants-CgUdkWmf.js +0 -2
  276. package/dist/admin/assets/content-D25ainqV.js +0 -3
  277. package/dist/admin/assets/content-D25ainqV.js.map +0 -1
  278. package/dist/admin/assets/develop-qF10t9tM.js +0 -11
  279. package/dist/admin/assets/develop-qF10t9tM.js.map +0 -1
  280. package/dist/admin/assets/dropdown-menu-Cl20LCvY.js +0 -2
  281. package/dist/admin/assets/dropdown-menu-Cl20LCvY.js.map +0 -1
  282. package/dist/admin/assets/external-link-DtJAaOWk.js +0 -2
  283. package/dist/admin/assets/external-link-DtJAaOWk.js.map +0 -1
  284. package/dist/admin/assets/file-text-BJkQMeQO.js.map +0 -1
  285. package/dist/admin/assets/followPlural-Cuocm4Sv.js +0 -2
  286. package/dist/admin/assets/index-C9uJxg4J.js +0 -4
  287. package/dist/admin/assets/index-C9uJxg4J.js.map +0 -1
  288. package/dist/admin/assets/index-Cz3C-LxB.css +0 -2
  289. package/dist/admin/assets/link-2-off-Cbpvb3w4.js +0 -2
  290. package/dist/admin/assets/link-2-off-Cbpvb3w4.js.map +0 -1
  291. package/dist/admin/assets/list-CkHF_4xh.js +0 -2
  292. package/dist/admin/assets/list-CkHF_4xh.js.map +0 -1
  293. package/dist/admin/assets/media-CUfV74JZ.js +0 -2
  294. package/dist/admin/assets/network-Fri1cjMt.js +0 -2
  295. package/dist/admin/assets/network-Fri1cjMt.js.map +0 -1
  296. package/dist/admin/assets/publishing-DaaE8PaU.js +0 -2
  297. package/dist/admin/assets/search--71HzPvh.js +0 -2
  298. package/dist/admin/assets/search--71HzPvh.js.map +0 -1
  299. package/dist/admin/assets/searchSchema-Ypl6gq9g.js +0 -2
  300. package/dist/admin/assets/sections-BBN2JErq.js +0 -2
  301. package/dist/admin/assets/sections-BBN2JErq.js.map +0 -1
  302. package/dist/admin/assets/settings-CYXU73dP.js +0 -2
  303. package/dist/admin/assets/settings-CYXU73dP.js.map +0 -1
  304. package/dist/admin/assets/skeleton-CCwdO9oq.js +0 -42
  305. package/dist/admin/assets/skeleton-CCwdO9oq.js.map +0 -1
  306. package/dist/admin/assets/snapshots-BQeFK5cj.js +0 -2
  307. package/dist/admin/assets/src-CQu-YxUM.js +0 -4
  308. package/dist/admin/assets/src-CQu-YxUM.js.map +0 -1
  309. package/dist/admin/assets/table-BEDv9IRM.js +0 -56
  310. package/dist/admin/assets/table-BEDv9IRM.js.map +0 -1
  311. package/dist/admin/assets/tabs-DSS1c-Kf.js +0 -5
  312. package/dist/admin/assets/tabs-DSS1c-Kf.js.map +0 -1
  313. package/dist/admin/assets/useMediaUploader-CLHmKCwq.js +0 -2
  314. package/dist/admin/assets/useMediaUploader-CLHmKCwq.js.map +0 -1
  315. package/dist/admin/assets/useSchemaScopeAccess-bd8RQxuu.js +0 -2
  316. package/dist/admin/assets/useSchemaScopeAccess-bd8RQxuu.js.map +0 -1
  317. package/dist/worker-BAmQPoTJ.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{t as r}from"./cn-M4_WHiur.js";t();var i=e(n(),1);function a({className:e,...t}){return(0,i.jsx)(`textarea`,{"data-slot":`textarea`,className:r(`flex field-sizing-content min-h-20 w-full rounded-lg border border-input bg-card px-3 py-2 text-base text-foreground transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/20 dark:aria-invalid:ring-destructive/40`,e),...t})}export{a as t};
2
- //# sourceMappingURL=textarea-eatLAWE_.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{t as r}from"./cn-CL1YHRrS.js";t();var i=e(n(),1);function a({className:e,...t}){return(0,i.jsx)(`textarea`,{"data-slot":`textarea`,className:r(`flex field-sizing-content min-h-20 w-full rounded-lg border border-input bg-card px-3 py-2 text-base text-foreground transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/20 dark:aria-invalid:ring-destructive/40`,e),...t})}export{a as t};
2
+ //# sourceMappingURL=textarea-FwSvwmyT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textarea-eatLAWE_.js","names":["__toESM","require_jsx_runtime","cn","require_react","import_jsx_runtime","Textarea","props","className"],"sources":["../../src/components/ui/textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'flex field-sizing-content min-h-20 w-full rounded-lg border border-input bg-card px-3 py-2 text-base text-foreground transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/20 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n"],"mappings":"4LAGA,SAASK,EAAS,CAAE,YAAW,GAAGC,GAA2C,CAC3E,OACE,EAAAF,EAAA,IAAA,CAAC,WAAD,CACE,YAAU,WACV,UAAWF,EACT,qcACAK,CACF,EACA,GAAID,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"textarea-FwSvwmyT.js","names":["__toESM","require_jsx_runtime","cn","require_react","import_jsx_runtime","Textarea","props","className"],"sources":["../../src/components/ui/textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'flex field-sizing-content min-h-20 w-full rounded-lg border border-input bg-card px-3 py-2 text-base text-foreground transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/20 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n"],"mappings":"4LAGA,SAASK,EAAS,CAAE,YAAW,GAAGC,GAA2C,CAC3E,OACE,EAAAF,EAAA,IAAA,CAAC,WAAD,CACE,YAAU,WACV,UAAWF,EACT,qcACAK,CACF,EACA,GAAID,CACL,CAAA,CAEL"}
@@ -0,0 +1,2 @@
1
+ import{A as e,k as t,p as n}from"./cn-CL1YHRrS.js";import{n as r,r as i}from"./src-B2qcqjNM.js";var a=(e,t)=>t.includes(e)?e:t[0]??e,o=(e,t)=>`${e}:${t}`,s=[{key:`shapio`,variants:[`dark`]},{key:`classic`,variants:[`dark`]},{key:`murdered-out`,variants:[`dark`]},{key:`forest`,variants:[`dark`]},{key:`snowed`,variants:[`light`]},{key:`butter`,variants:[`light`]}],c=`shapio`,l=[`dark`],u=`shapio.theme`,d=3,f={theme:c,appearance:`dark`,variants:l},p={theme:`classic`,appearance:`dark`,variants:[`dark`]},m=e=>typeof e==`object`&&!!e,h=e=>typeof e==`string`&&i.includes(e),g=(e,t)=>t<2?p:_(m(e)?e:{}),_=e=>{let t=typeof e.theme==`string`&&r.test(e.theme)?e.theme:f.theme,n=Array.isArray(e.variants)?i.filter(t=>e.variants.includes(t)):[],o=s.find(e=>e.key===t)?.variants??(n.length>0?n:f.variants);return{theme:t,appearance:a(h(e.appearance)?e.appearance:o[0]??`dark`,o),variants:o}},v=n()(e(e=>({...f,setLook:(t,n,r)=>e({theme:t,appearance:n,variants:r})}),{name:u,storage:t,version:d,migrate:g,partialize:({theme:e,appearance:t,variants:n})=>({theme:e,appearance:t,variants:n}),merge:(e,t)=>({...t,..._(m(e)?e:{})})}));export{o as a,l as i,s as n,a as o,c as r,v as t};
2
+ //# sourceMappingURL=theme-C0Tv6M38.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-C0Tv6M38.js","names":["persist","persistentStorage","create","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":"gGAOA,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,EAAgB1B,EAAmB,CAAC,CAC/CF,EACG,IAAS,CACR,GAAGgB,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{H as e,P as t,V as n,bt as r,l as i,s as a,ut as o}from"./cn-M4_WHiur.js";import{et as s}from"./auth-BaVAo0u_.js";import{T as c,w as l}from"./src-CQu-YxUM.js";var u={silent:!0},d=(e,n)=>s({queryKey:t.content.list(e,n),queryFn:()=>i.content.list(e,n),placeholderData:o,meta:u}),f=(t,n,r=!0)=>e({...d(t,n),enabled:r}),p=(e,n,r)=>s({queryKey:t.content.entry(e,n,r),queryFn:()=>i.content.get(e,n,r?{locale:r}:{}),staleTime:1/0,meta:u}),m=(t,n,r,i=!0)=>e({...p(t,n,r),enabled:i}),h=(e,n,r)=>(e.setQueryData(t.content.entry(n,r.id,r.locale),r),e.invalidateQueries({predicate:e=>e.queryKey[0]===`content`&&e.queryKey[1]===n&&(e.queryKey[2]===`list`||e.queryKey[2]===`revisions`)})),g=e=>{let t=r();return n({mutationKey:[`content`,e,`create`],meta:u,mutationFn:t=>a(()=>i.content.create(e,t)),onSuccess:n=>h(t,e,n)})},_=e=>{let t=r();return n({mutationKey:[`content`,e,`save`],meta:u,mutationFn:({id:t,input:n})=>a(()=>i.content.update(e,t,n)),onSuccess:n=>h(t,e,n)})},v=e=>e&&e.length>0?{locales:e}:{},y=e=>{let t=r();return n({mutationKey:[`content`,e,`publish`],meta:u,mutationFn:({id:t,locales:n})=>a(()=>i.content.publish(e,t,v(n))),onSuccess:n=>h(t,e,n)})},b=e=>{let t=r();return n({mutationKey:[`content`,e,`unpublish`],meta:u,mutationFn:({id:t,locales:n})=>a(()=>i.content.unpublish(e,t,v(n))),onSuccess:n=>h(t,e,n)})},x=e=>{let t=r();return n({mutationKey:[`content`,e,`duplicate`],mutationFn:t=>a(()=>i.content.duplicate(e,t)),onSuccess:n=>h(t,e,n)})},S=e=>{let o=r();return n({mutationKey:[`content`,e,`delete`],meta:u,mutationFn:t=>a(()=>i.content.remove(e,t)),onSuccess:()=>o.invalidateQueries({queryKey:t.content.model(e)})})},C=(n,r,a,o)=>e({queryKey:t.content.revisions(n,r,a),queryFn:()=>i.content.revisions(n,r,a?{locale:a}:{}),enabled:o,staleTime:0,meta:u}),w=(n,r,a)=>e({queryKey:t.content.revision(n,r,a??``),queryFn:()=>i.content.revision(n,r,a??``),enabled:a!==void 0,staleTime:1/0,meta:u}),T=e=>{let t=r();return n({mutationKey:[`content`,e,`restore`],meta:u,mutationFn:({id:t,revisionId:n,expectedVersion:r})=>a(()=>i.content.restore(e,t,n,r)),onSuccess:n=>h(t,e,n)})},E=e=>c(e),D=e=>{let t=E(e);return t!==void 0&&l.has(t.type)},O=(e,t)=>{let n=E(e),r=n?t[n.apiKey]:void 0;return typeof r==`string`&&r.trim()!==``?r:typeof r==`number`?String(r):void 0},k=e=>e.slice(0,8),A=(e,t,n)=>O(e,t.data)??`${n} · ${k(t.id)}`;export{_,E as a,g as c,m as d,f,C as g,w as h,k as i,S as l,T as m,D as n,d as o,y as p,A as r,p as s,O as t,x as u,b as v};
2
- //# sourceMappingURL=titles-Bi2fWNN4.js.map
1
+ import{H as e,P as t,V as n,bt as r,l as i,s as a,ut as o}from"./cn-CL1YHRrS.js";import{et as s}from"./auth-YVfK3SxF.js";import{E as c,T as l}from"./src-B2qcqjNM.js";var u={silent:!0},d=(e,n)=>s({queryKey:t.content.list(e,n),queryFn:()=>i.content.list(e,n),placeholderData:o,meta:u}),f=(t,n,r=!0)=>e({...d(t,n),enabled:r}),p=(e,n,r)=>s({queryKey:t.content.entry(e,n,r),queryFn:()=>i.content.get(e,n,r?{locale:r}:{}),staleTime:1/0,meta:u}),m=(t,n,r,i=!0)=>e({...p(t,n,r),enabled:i}),h=(e,n,r)=>(e.setQueryData(t.content.entry(n,r.id,r.locale),r),e.invalidateQueries({predicate:e=>e.queryKey[0]===`content`&&e.queryKey[1]===n&&(e.queryKey[2]===`list`||e.queryKey[2]===`revisions`)})),g=e=>{let t=r();return n({mutationKey:[`content`,e,`create`],meta:u,mutationFn:t=>a(()=>i.content.create(e,t)),onSuccess:n=>h(t,e,n)})},_=e=>{let t=r();return n({mutationKey:[`content`,e,`save`],meta:u,mutationFn:({id:t,input:n})=>a(()=>i.content.update(e,t,n)),onSuccess:n=>h(t,e,n)})},v=e=>e&&e.length>0?{locales:e}:{},y=e=>{let t=r();return n({mutationKey:[`content`,e,`publish`],meta:u,mutationFn:({id:t,locales:n})=>a(()=>i.content.publish(e,t,v(n))),onSuccess:n=>h(t,e,n)})},b=e=>{let t=r();return n({mutationKey:[`content`,e,`unpublish`],meta:u,mutationFn:({id:t,locales:n})=>a(()=>i.content.unpublish(e,t,v(n))),onSuccess:n=>h(t,e,n)})},x=e=>{let t=r();return n({mutationKey:[`content`,e,`duplicate`],mutationFn:t=>a(()=>i.content.duplicate(e,t)),onSuccess:n=>h(t,e,n)})},S=e=>{let o=r();return n({mutationKey:[`content`,e,`delete`],meta:u,mutationFn:t=>a(()=>i.content.remove(e,t)),onSuccess:()=>o.invalidateQueries({queryKey:t.content.model(e)})})},C=(n,r,a,o)=>e({queryKey:t.content.revisions(n,r,a),queryFn:()=>i.content.revisions(n,r,a?{locale:a}:{}),enabled:o,staleTime:0,meta:u}),w=(n,r,a)=>e({queryKey:t.content.revision(n,r,a??``),queryFn:()=>i.content.revision(n,r,a??``),enabled:a!==void 0,staleTime:1/0,meta:u}),T=e=>{let t=r();return n({mutationKey:[`content`,e,`restore`],meta:u,mutationFn:({id:t,revisionId:n,expectedVersion:r})=>a(()=>i.content.restore(e,t,n,r)),onSuccess:n=>h(t,e,n)})},E=e=>c(e),D=e=>{let t=E(e);return t!==void 0&&l.has(t.type)},O=(e,t)=>{let n=E(e),r=n?t[n.apiKey]:void 0;return typeof r==`string`&&r.trim()!==``?r:typeof r==`number`?String(r):void 0},k=e=>e.slice(0,8),A=(e,t,n)=>O(e,t.data)??`${n} · ${k(t.id)}`;export{_,E as a,g as c,m as d,f,C as g,w as h,k as i,S as l,T as m,D as n,d as o,y as p,A as r,p as s,O as t,x as u,b as v};
2
+ //# sourceMappingURL=titles-uL13bpi8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"titles-Bi2fWNN4.js","names":["useQuery","queryKeys","useMutation","useQueryClient","adminApi","withCsrf","keepPreviousData","queryOptions","effectiveTitleField","TEXT_TITLE_FIELD_TYPES","silent","entryListQueryOptions","modelKey","query","useEntryList","entryQueryOptions","id","locale","useEntry","rememberEntry","queryClient","entry","useCreateEntry","input","useSaveEntry","localesBody","locales","usePublishEntry","useUnpublishEntry","useDuplicateEntry","useDeleteEntry","useRevisions","useRevision","revisionId","useRestoreRevision","expectedVersion","titleFieldOf","model","isSearchable","title","entryTitle","value","data","shortId","labelOf","item","untitled"],"sources":["../../src/api/content.ts","../../src/fields/helpers/titles.ts"],"sourcesContent":["import type { AdminEntry, ContentListQuery, CreateEntryInput, UpdateEntryInput } from '@shapio/client';\nimport {\n keepPreviousData,\n queryOptions,\n useMutation,\n useQuery,\n useQueryClient,\n type QueryClient,\n} from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\n/**\n * Content of any model (`/api/admin/content/:modelKey`). Mutations are silent: the entry form and list\n * show failures themselves (inline issues, the conflict dialog, the \"still referenced\" explanation).\n */\nconst silent = { silent: true } as const;\n\nexport const entryListQueryOptions = (modelKey: string, query: ContentListQuery) =>\n queryOptions({\n queryKey: queryKeys.content.list(modelKey, query),\n queryFn: () => adminApi.content.list(modelKey, query),\n placeholderData: keepPreviousData,\n meta: silent,\n });\n\nexport const useEntryList = (modelKey: string, query: ContentListQuery, enabled = true) =>\n useQuery({ ...entryListQueryOptions(modelKey, query), enabled });\n\nexport const entryQueryOptions = (modelKey: string, id: string, locale: string | undefined) =>\n queryOptions({\n queryKey: queryKeys.content.entry(modelKey, id, locale),\n queryFn: () => adminApi.content.get(modelKey, id, locale ? { locale } : {}),\n // The form owns the values once loaded; it is refreshed explicitly (conflicts, restores, locales).\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useEntry = (modelKey: string, id: string, locale: string | undefined, enabled = true) =>\n useQuery({ ...entryQueryOptions(modelKey, id, locale), enabled });\n\n/** Remembers a write's result as the entry's latest state and refreshes that model's lists. */\nconst rememberEntry = (queryClient: QueryClient, modelKey: string, entry: AdminEntry) => {\n queryClient.setQueryData(queryKeys.content.entry(modelKey, entry.id, entry.locale), entry);\n return queryClient.invalidateQueries({\n predicate: (query) =>\n query.queryKey[0] === 'content' &&\n query.queryKey[1] === modelKey &&\n (query.queryKey[2] === 'list' || query.queryKey[2] === 'revisions'),\n });\n};\n\nexport const useCreateEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'create'],\n meta: silent,\n mutationFn: (input: CreateEntryInput) => withCsrf(() => adminApi.content.create(modelKey, input)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useSaveEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'save'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateEntryInput }) =>\n withCsrf(() => adminApi.content.update(modelKey, id, input)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\n/** Omitting `locales` targets the request's default locale; it is the only form a non-localized model accepts. */\ntype LocalesVariables = { id: string; locales?: string[] };\n\n/** The body never carries an empty `locales` array: the API requires at least one locale when it is sent. */\nconst localesBody = (locales?: string[]) => (locales && locales.length > 0 ? { locales } : {});\n\nexport const usePublishEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'publish'],\n meta: silent,\n mutationFn: ({ id, locales }: LocalesVariables) =>\n withCsrf(() => adminApi.content.publish(modelKey, id, localesBody(locales))),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useUnpublishEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'unpublish'],\n meta: silent,\n mutationFn: ({ id, locales }: LocalesVariables) =>\n withCsrf(() => adminApi.content.unpublish(modelKey, id, localesBody(locales))),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useDuplicateEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'duplicate'],\n mutationFn: (id: string) => withCsrf(() => adminApi.content.duplicate(modelKey, id)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\n/** 409 ENTRY_REFERENCED comes back to the caller, which explains what still points at the entry. */\nexport const useDeleteEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'delete'],\n meta: silent,\n mutationFn: (id: string) => withCsrf(() => adminApi.content.remove(modelKey, id)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.content.model(modelKey) }),\n });\n};\n\nexport const useRevisions = (modelKey: string, id: string, locale: string | undefined, enabled: boolean) =>\n useQuery({\n queryKey: queryKeys.content.revisions(modelKey, id, locale),\n queryFn: () => adminApi.content.revisions(modelKey, id, locale ? { locale } : {}),\n enabled,\n staleTime: 0,\n meta: silent,\n });\n\nexport const useRevision = (modelKey: string, id: string, revisionId: string | undefined) =>\n useQuery({\n queryKey: queryKeys.content.revision(modelKey, id, revisionId ?? ''),\n queryFn: () => adminApi.content.revision(modelKey, id, revisionId ?? ''),\n enabled: revisionId !== undefined,\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useRestoreRevision = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'restore'],\n meta: silent,\n mutationFn: ({\n id,\n revisionId,\n expectedVersion,\n }: {\n id: string;\n revisionId: string;\n expectedVersion: number;\n }) => withCsrf(() => adminApi.content.restore(modelKey, id, revisionId, expectedVersion)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n","import type { AdminEntryListItem } from '@shapio/client';\nimport {\n effectiveTitleField,\n TEXT_TITLE_FIELD_TYPES,\n type FieldDefinition,\n type ModelDefinition,\n} from '@shapio/schema';\n\n/**\n * The field that labels a model's entries in lists, pickers and relation summaries: the configured title\n * field, or the first text field when none is set (the same rule the API's `q` search uses).\n */\nexport const titleFieldOf = (model: ModelDefinition): FieldDefinition | undefined =>\n effectiveTitleField(model);\n\n/** Whether the list API's `q` search works for this model (it searches the title field, if it is text). */\nexport const isSearchable = (model: ModelDefinition): boolean => {\n const title = titleFieldOf(model);\n return title !== undefined && TEXT_TITLE_FIELD_TYPES.has(title.type);\n};\n\n/** An entry's label: its title field's text, or undefined (callers show \"Untitled\"). */\nexport const entryTitle = (\n model: ModelDefinition,\n data: Readonly<Record<string, unknown>>,\n): string | undefined => {\n const title = titleFieldOf(model);\n const value = title ? data[title.apiKey] : undefined;\n return typeof value === 'string' && value.trim() !== ''\n ? value\n : typeof value === 'number'\n ? String(value)\n : undefined;\n};\n\nexport const shortId = (id: string) => id.slice(0, 8);\n\nexport const labelOf = (\n model: ModelDefinition,\n item: Pick<AdminEntryListItem, 'id' | 'data'>,\n untitled: string,\n) => entryTitle(model, item.data) ?? `${untitled} · ${shortId(item.id)}`;\n"],"mappings":"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"}
1
+ {"version":3,"file":"titles-uL13bpi8.js","names":["useQuery","queryKeys","useMutation","useQueryClient","adminApi","withCsrf","keepPreviousData","queryOptions","effectiveTitleField","TEXT_TITLE_FIELD_TYPES","silent","entryListQueryOptions","modelKey","query","useEntryList","entryQueryOptions","id","locale","useEntry","rememberEntry","queryClient","entry","useCreateEntry","input","useSaveEntry","localesBody","locales","usePublishEntry","useUnpublishEntry","useDuplicateEntry","useDeleteEntry","useRevisions","useRevision","revisionId","useRestoreRevision","expectedVersion","titleFieldOf","model","isSearchable","title","entryTitle","value","data","shortId","labelOf","item","untitled"],"sources":["../../src/api/content.ts","../../src/fields/helpers/titles.ts"],"sourcesContent":["import type { AdminEntry, ContentListQuery, CreateEntryInput, UpdateEntryInput } from '@shapio/client';\nimport {\n keepPreviousData,\n queryOptions,\n useMutation,\n useQuery,\n useQueryClient,\n type QueryClient,\n} from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\n/**\n * Content of any model (`/api/admin/content/:modelKey`). Mutations are silent: the entry form and list\n * show failures themselves (inline issues, the conflict dialog, the \"still referenced\" explanation).\n */\nconst silent = { silent: true } as const;\n\nexport const entryListQueryOptions = (modelKey: string, query: ContentListQuery) =>\n queryOptions({\n queryKey: queryKeys.content.list(modelKey, query),\n queryFn: () => adminApi.content.list(modelKey, query),\n placeholderData: keepPreviousData,\n meta: silent,\n });\n\nexport const useEntryList = (modelKey: string, query: ContentListQuery, enabled = true) =>\n useQuery({ ...entryListQueryOptions(modelKey, query), enabled });\n\nexport const entryQueryOptions = (modelKey: string, id: string, locale: string | undefined) =>\n queryOptions({\n queryKey: queryKeys.content.entry(modelKey, id, locale),\n queryFn: () => adminApi.content.get(modelKey, id, locale ? { locale } : {}),\n // The form owns the values once loaded; it is refreshed explicitly (conflicts, restores, locales).\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useEntry = (modelKey: string, id: string, locale: string | undefined, enabled = true) =>\n useQuery({ ...entryQueryOptions(modelKey, id, locale), enabled });\n\n/** Remembers a write's result as the entry's latest state and refreshes that model's lists. */\nconst rememberEntry = (queryClient: QueryClient, modelKey: string, entry: AdminEntry) => {\n queryClient.setQueryData(queryKeys.content.entry(modelKey, entry.id, entry.locale), entry);\n return queryClient.invalidateQueries({\n predicate: (query) =>\n query.queryKey[0] === 'content' &&\n query.queryKey[1] === modelKey &&\n (query.queryKey[2] === 'list' || query.queryKey[2] === 'revisions'),\n });\n};\n\nexport const useCreateEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'create'],\n meta: silent,\n mutationFn: (input: CreateEntryInput) => withCsrf(() => adminApi.content.create(modelKey, input)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useSaveEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'save'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateEntryInput }) =>\n withCsrf(() => adminApi.content.update(modelKey, id, input)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\n/** Omitting `locales` targets the request's default locale; it is the only form a non-localized model accepts. */\ntype LocalesVariables = { id: string; locales?: string[] };\n\n/** The body never carries an empty `locales` array: the API requires at least one locale when it is sent. */\nconst localesBody = (locales?: string[]) => (locales && locales.length > 0 ? { locales } : {});\n\nexport const usePublishEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'publish'],\n meta: silent,\n mutationFn: ({ id, locales }: LocalesVariables) =>\n withCsrf(() => adminApi.content.publish(modelKey, id, localesBody(locales))),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useUnpublishEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'unpublish'],\n meta: silent,\n mutationFn: ({ id, locales }: LocalesVariables) =>\n withCsrf(() => adminApi.content.unpublish(modelKey, id, localesBody(locales))),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useDuplicateEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'duplicate'],\n mutationFn: (id: string) => withCsrf(() => adminApi.content.duplicate(modelKey, id)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\n/** 409 ENTRY_REFERENCED comes back to the caller, which explains what still points at the entry. */\nexport const useDeleteEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'delete'],\n meta: silent,\n mutationFn: (id: string) => withCsrf(() => adminApi.content.remove(modelKey, id)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.content.model(modelKey) }),\n });\n};\n\nexport const useRevisions = (modelKey: string, id: string, locale: string | undefined, enabled: boolean) =>\n useQuery({\n queryKey: queryKeys.content.revisions(modelKey, id, locale),\n queryFn: () => adminApi.content.revisions(modelKey, id, locale ? { locale } : {}),\n enabled,\n staleTime: 0,\n meta: silent,\n });\n\nexport const useRevision = (modelKey: string, id: string, revisionId: string | undefined) =>\n useQuery({\n queryKey: queryKeys.content.revision(modelKey, id, revisionId ?? ''),\n queryFn: () => adminApi.content.revision(modelKey, id, revisionId ?? ''),\n enabled: revisionId !== undefined,\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useRestoreRevision = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'restore'],\n meta: silent,\n mutationFn: ({\n id,\n revisionId,\n expectedVersion,\n }: {\n id: string;\n revisionId: string;\n expectedVersion: number;\n }) => withCsrf(() => adminApi.content.restore(modelKey, id, revisionId, expectedVersion)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n","import type { AdminEntryListItem } from '@shapio/client';\nimport {\n effectiveTitleField,\n TEXT_TITLE_FIELD_TYPES,\n type FieldDefinition,\n type ModelDefinition,\n} from '@shapio/schema';\n\n/**\n * The field that labels a model's entries in lists, pickers and relation summaries: the configured title\n * field, or the first text field when none is set (the same rule the API's `q` search uses).\n */\nexport const titleFieldOf = (model: ModelDefinition): FieldDefinition | undefined =>\n effectiveTitleField(model);\n\n/** Whether the list API's `q` search works for this model (it searches the title field, if it is text). */\nexport const isSearchable = (model: ModelDefinition): boolean => {\n const title = titleFieldOf(model);\n return title !== undefined && TEXT_TITLE_FIELD_TYPES.has(title.type);\n};\n\n/** An entry's label: its title field's text, or undefined (callers show \"Untitled\"). */\nexport const entryTitle = (\n model: ModelDefinition,\n data: Readonly<Record<string, unknown>>,\n): string | undefined => {\n const title = titleFieldOf(model);\n const value = title ? data[title.apiKey] : undefined;\n return typeof value === 'string' && value.trim() !== ''\n ? value\n : typeof value === 'number'\n ? String(value)\n : undefined;\n};\n\nexport const shortId = (id: string) => id.slice(0, 8);\n\nexport const labelOf = (\n model: ModelDefinition,\n item: Pick<AdminEntryListItem, 'id' | 'data'>,\n untitled: string,\n) => entryTitle(model, item.data) ?? `${untitled} · ${shortId(item.id)}`;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{H as e,P as t,V as n,bt as r,l as i,s as a}from"./cn-M4_WHiur.js";var o=()=>e({queryKey:t.tokens,queryFn:()=>i.tokens.list(),meta:{silent:!0}}),s=()=>{let e=r();return n({mutationKey:[`tokens`,`create`],meta:{silent:!0},mutationFn:e=>a(()=>i.tokens.create(e)),onSuccess:()=>e.invalidateQueries({queryKey:t.tokens})})},c=()=>{let e=r();return n({mutationKey:[`tokens`,`revoke`],mutationFn:e=>a(()=>i.tokens.revoke(e)),onSettled:()=>e.invalidateQueries({queryKey:t.tokens})})};export{s as n,c as r,o as t};
2
- //# sourceMappingURL=tokens-C2E7swse.js.map
1
+ import{H as e,P as t,V as n,bt as r,l as i,s as a}from"./cn-CL1YHRrS.js";var o=()=>e({queryKey:t.tokens,queryFn:()=>i.tokens.list(),meta:{silent:!0}}),s=()=>{let e=r();return n({mutationKey:[`tokens`,`create`],meta:{silent:!0},mutationFn:e=>a(()=>i.tokens.create(e)),onSuccess:()=>e.invalidateQueries({queryKey:t.tokens})})},c=()=>{let e=r();return n({mutationKey:[`tokens`,`revoke`],mutationFn:e=>a(()=>i.tokens.revoke(e)),onSettled:()=>e.invalidateQueries({queryKey:t.tokens})})};export{s as n,c as r,o as t};
2
+ //# sourceMappingURL=tokens-C-20gLAT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens-C2E7swse.js","names":["useQuery","queryKeys","useMutation","useQueryClient","adminApi","withCsrf","useApiTokens","useCreateApiToken","queryClient","input","useRevokeApiToken","id"],"sources":["../../src/api/tokens.ts"],"sourcesContent":["import type { CreateApiTokenInput } from '@shapio/client';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nexport const useApiTokens = () =>\n useQuery({ queryKey: queryKeys.tokens, queryFn: () => adminApi.tokens.list(), meta: { silent: true } });\n\nexport const useCreateApiToken = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['tokens', 'create'],\n meta: { silent: true },\n mutationFn: (input: CreateApiTokenInput) => withCsrf(() => adminApi.tokens.create(input)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.tokens }),\n });\n};\n\nexport const useRevokeApiToken = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['tokens', 'revoke'],\n mutationFn: (id: string) => withCsrf(() => adminApi.tokens.revoke(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.tokens }),\n });\n};\n"],"mappings":"yEAMA,IAAaM,MACXN,EAAS,CAAE,SAAUC,EAAU,OAAQ,YAAeG,EAAS,OAAO,KAAK,EAAG,KAAM,CAAE,OAAQ,EAAK,CAAE,CAAC,EAE3FG,MAA0B,CACrC,IAAMC,EAAcL,EAAe,EACnC,OAAOD,EAAY,CACjB,YAAa,CAAC,SAAU,QAAQ,EAChC,KAAM,CAAE,OAAQ,EAAK,EACrB,WAAa,GAA+BG,MAAeD,EAAS,OAAO,OAAOK,CAAK,CAAC,EACxF,cAAiBD,EAAY,kBAAkB,CAAE,SAAUP,EAAU,MAAO,CAAC,CAC/E,CAAC,CACH,EAEaS,MAA0B,CACrC,IAAMF,EAAcL,EAAe,EACnC,OAAOD,EAAY,CACjB,YAAa,CAAC,SAAU,QAAQ,EAChC,WAAa,GAAeG,MAAeD,EAAS,OAAO,OAAOO,CAAE,CAAC,EACrE,cAAiBH,EAAY,kBAAkB,CAAE,SAAUP,EAAU,MAAO,CAAC,CAC/E,CAAC,CACH"}
1
+ {"version":3,"file":"tokens-C-20gLAT.js","names":["useQuery","queryKeys","useMutation","useQueryClient","adminApi","withCsrf","useApiTokens","useCreateApiToken","queryClient","input","useRevokeApiToken","id"],"sources":["../../src/api/tokens.ts"],"sourcesContent":["import type { CreateApiTokenInput } from '@shapio/client';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nexport const useApiTokens = () =>\n useQuery({ queryKey: queryKeys.tokens, queryFn: () => adminApi.tokens.list(), meta: { silent: true } });\n\nexport const useCreateApiToken = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['tokens', 'create'],\n meta: { silent: true },\n mutationFn: (input: CreateApiTokenInput) => withCsrf(() => adminApi.tokens.create(input)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.tokens }),\n });\n};\n\nexport const useRevokeApiToken = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['tokens', 'revoke'],\n mutationFn: (id: string) => withCsrf(() => adminApi.tokens.revoke(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.tokens }),\n });\n};\n"],"mappings":"yEAMA,IAAaM,MACXN,EAAS,CAAE,SAAUC,EAAU,OAAQ,YAAeG,EAAS,OAAO,KAAK,EAAG,KAAM,CAAE,OAAQ,EAAK,CAAE,CAAC,EAE3FG,MAA0B,CACrC,IAAMC,EAAcL,EAAe,EACnC,OAAOD,EAAY,CACjB,YAAa,CAAC,SAAU,QAAQ,EAChC,KAAM,CAAE,OAAQ,EAAK,EACrB,WAAa,GAA+BG,MAAeD,EAAS,OAAO,OAAOK,CAAK,CAAC,EACxF,cAAiBD,EAAY,kBAAkB,CAAE,SAAUP,EAAU,MAAO,CAAC,CAC/E,CAAC,CACH,EAEaS,MAA0B,CACrC,IAAMF,EAAcL,EAAe,EACnC,OAAOD,EAAY,CACjB,YAAa,CAAC,SAAU,QAAQ,EAChC,WAAa,GAAeG,MAAeD,EAAS,OAAO,OAAOO,CAAE,CAAC,EACrE,cAAiBH,EAAY,kBAAkB,CAAE,SAAUP,EAAU,MAAO,CAAC,CAC/E,CAAC,CACH"}
@@ -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{t as r}from"./cn-M4_WHiur.js";import{I as i,S as a,b as o,v as s,x as c,y as l}from"./InfoHint-Bz_yvehr.js";import{T as u,_ as d,b as f,d as p,g as m,h,l as g,m as _,v,w as y,y as b}from"./skeleton-CCwdO9oq.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]=b(`Tooltip`,[a]),D=a(),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:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,l=M(P,e.__scopeTooltip),u=D(t),[d,f]=x.useState(null),[p,h]=x.useState(void 0),g=_(),v=x.useRef(0),y=o??l.disableHoverableContent,b=s??l.delayDuration,C=x.useRef(!1),[T,E]=m({prop:r,defaultProp:i??!1,onChange:w(e=>{e?(l.onOpen(),document.dispatchEvent(new CustomEvent(A))):l.onClose(),a?.(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=p??g;return(0,S.jsx)(c,{...u,children:(0,S.jsx)(ee,{scope:t,contentId:F,setContentId:h,open:T,stateAttribute:O,trigger:d,onTriggerChange:f,onTriggerEnter:x.useCallback(()=>{l.isOpenDelayedRef.current?N():k()},[l.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),a=M(L,n),o=D(n),c=x.useRef(null),l=u(t,c,i.onTriggerChange),d=x.useRef(!1),p=x.useRef(!1),m=x.useCallback(()=>d.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener(`pointerup`,m),[m]),(0,S.jsx)(s,{asChild:!0,...o,children:(0,S.jsx)(f.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:l,onPointerMove:v(e.onPointerMove,e=>{e.pointerType!==`touch`&&!p.current&&!a.isPointerInTransitRef.current&&(i.onTriggerEnter(),p.current=!0)}),onPointerLeave:v(e.onPointerLeave,()=>{i.onTriggerLeave(),p.current=!1}),onPointerDown:v(e.onPointerDown,()=>{i.open&&i.onClose(),d.current=!0,document.addEventListener(`pointerup`,m,{once:!0})}),onFocus:v(e.onFocus,()=>{d.current||i.onOpen()}),onBlur:v(e.onBlur,i.onClose),onClick:v(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)(h,{present:n||a.open,children:(0,S.jsx)(g,{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)(h,{present:r||o.open,children:o.disableHoverableContent?(0,S.jsx)(K,{side:i,...a,ref:t}):(0,S.jsx)(W,{side:i,...a,ref:t})})},`TooltipContent`)),W=x.forwardRef(w(function(e,t){let n=F(U,e.__scopeTooltip),r=M(U,e.__scopeTooltip),i=x.useRef(null),a=u(t,i),[o,s]=x.useState(null),{trigger:c,onClose:l}=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=Y(r,J(r,n.getBoundingClientRect())),a=X(t.getBoundingClientRect()),o=Q([...i,...a]);s(o),f(!0)},[f]);return x.useEffect(()=>()=>p(),[p]),x.useEffect(()=>{if(c&&d){let e=w(e=>m(e,d),`handleTriggerLeave`),t=w(e=>m(e,c),`handleContentLeave`);return c.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[c,d,m,p]),x.useEffect(()=>{if(o){let e=w(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||d?.contains(t),i=!Z(n,o);r?p():i&&(p(),l())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,d,o,l,p]),(0,S.jsx)(K,{...e,ref:a})},`TooltipContentHoverable`)),G=y(`TooltipContent`),K=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,children:r,"aria-label":a,id:s,onEscapeKeyDown:c,onPointerDownOutside:l,...u}=e,f=F(U,n),m=D(n),{onClose:h}=f;x.useEffect(()=>(document.addEventListener(A,h),()=>document.removeEventListener(A,h)),[h]),x.useEffect(()=>{if(f.trigger){let e=w(e=>{e.target instanceof Node&&e.target.contains(f.trigger)&&h()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[f.trigger,h]);let{setContentId:g}=f;return d(()=>(g(s),()=>{g(void 0)}),[s,g]),(0,S.jsx)(p,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:c,onPointerDownOutside:l,onFocusOutside:e=>e.preventDefault(),onDismiss:h,children:(0,S.jsxs)(o,{"data-state":f.stateAttribute,role:a?void 0:`tooltip`,id:a?void 0:f.contentId,...m,...u,ref:t,style:{...u.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)(G,{children:r}),a?(0,S.jsx)(i,{id:f.contentId,role:`tooltip`,children:a}):null]})})},`TooltipContentImpl`)),q=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=D(n);return(0,S.jsx)(l,{...i,...r,ref:t})},`TooltipArrow`));function J(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(J,`getExitSideFromRect`);function Y(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(Y,`getPaddedExitPoints`);function X(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(X,`getPointsFromRect`);function Z(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(Z,`isPointInPolygon`);function Q(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)),$(t)}w(Q,`getHull`);function $(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($,`getHullPresorted`);var ne=N,re=I,ie=R,ae=H,oe=te,se=q;function ce({delayDuration:e=0,...t}){return(0,S.jsx)(ne,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function le({...e}){return(0,S.jsx)(re,{"data-slot":`tooltip`,...e})}function ue({...e}){return(0,S.jsx)(ie,{"data-slot":`tooltip-trigger`,...e})}function de({className:e,sideOffset:t=0,children:n,...i}){return(0,S.jsx)(ae,{children:(0,S.jsxs)(oe,{"data-slot":`tooltip-content`,sideOffset:t,className:r(`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),...i,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-Bji9fmSr.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{t as r}from"./cn-CL1YHRrS.js";import{I as i,S as a,b as o,v as s,x as c,y as l}from"./InfoHint-DWn9kLf1.js";import{T as u,_ as d,b as f,d as p,g as m,h,l as g,m as _,v,w as y,y as b}from"./skeleton-B5GJgv7y.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]=b(`Tooltip`,[a]),D=a(),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:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,l=M(P,e.__scopeTooltip),u=D(t),[d,f]=x.useState(null),[p,h]=x.useState(void 0),g=_(),v=x.useRef(0),y=o??l.disableHoverableContent,b=s??l.delayDuration,C=x.useRef(!1),[T,E]=m({prop:r,defaultProp:i??!1,onChange:w(e=>{e?(l.onOpen(),document.dispatchEvent(new CustomEvent(A))):l.onClose(),a?.(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=p??g;return(0,S.jsx)(c,{...u,children:(0,S.jsx)(ee,{scope:t,contentId:F,setContentId:h,open:T,stateAttribute:O,trigger:d,onTriggerChange:f,onTriggerEnter:x.useCallback(()=>{l.isOpenDelayedRef.current?N():k()},[l.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),a=M(L,n),o=D(n),c=x.useRef(null),l=u(t,c,i.onTriggerChange),d=x.useRef(!1),p=x.useRef(!1),m=x.useCallback(()=>d.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener(`pointerup`,m),[m]),(0,S.jsx)(s,{asChild:!0,...o,children:(0,S.jsx)(f.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:l,onPointerMove:v(e.onPointerMove,e=>{e.pointerType!==`touch`&&!p.current&&!a.isPointerInTransitRef.current&&(i.onTriggerEnter(),p.current=!0)}),onPointerLeave:v(e.onPointerLeave,()=>{i.onTriggerLeave(),p.current=!1}),onPointerDown:v(e.onPointerDown,()=>{i.open&&i.onClose(),d.current=!0,document.addEventListener(`pointerup`,m,{once:!0})}),onFocus:v(e.onFocus,()=>{d.current||i.onOpen()}),onBlur:v(e.onBlur,i.onClose),onClick:v(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)(h,{present:n||a.open,children:(0,S.jsx)(g,{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)(h,{present:r||o.open,children:o.disableHoverableContent?(0,S.jsx)(K,{side:i,...a,ref:t}):(0,S.jsx)(W,{side:i,...a,ref:t})})},`TooltipContent`)),W=x.forwardRef(w(function(e,t){let n=F(U,e.__scopeTooltip),r=M(U,e.__scopeTooltip),i=x.useRef(null),a=u(t,i),[o,s]=x.useState(null),{trigger:c,onClose:l}=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=Y(r,J(r,n.getBoundingClientRect())),a=X(t.getBoundingClientRect()),o=Q([...i,...a]);s(o),f(!0)},[f]);return x.useEffect(()=>()=>p(),[p]),x.useEffect(()=>{if(c&&d){let e=w(e=>m(e,d),`handleTriggerLeave`),t=w(e=>m(e,c),`handleContentLeave`);return c.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[c,d,m,p]),x.useEffect(()=>{if(o){let e=w(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||d?.contains(t),i=!Z(n,o);r?p():i&&(p(),l())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,d,o,l,p]),(0,S.jsx)(K,{...e,ref:a})},`TooltipContentHoverable`)),G=y(`TooltipContent`),K=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,children:r,"aria-label":a,id:s,onEscapeKeyDown:c,onPointerDownOutside:l,...u}=e,f=F(U,n),m=D(n),{onClose:h}=f;x.useEffect(()=>(document.addEventListener(A,h),()=>document.removeEventListener(A,h)),[h]),x.useEffect(()=>{if(f.trigger){let e=w(e=>{e.target instanceof Node&&e.target.contains(f.trigger)&&h()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[f.trigger,h]);let{setContentId:g}=f;return d(()=>(g(s),()=>{g(void 0)}),[s,g]),(0,S.jsx)(p,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:c,onPointerDownOutside:l,onFocusOutside:e=>e.preventDefault(),onDismiss:h,children:(0,S.jsxs)(o,{"data-state":f.stateAttribute,role:a?void 0:`tooltip`,id:a?void 0:f.contentId,...m,...u,ref:t,style:{...u.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)(G,{children:r}),a?(0,S.jsx)(i,{id:f.contentId,role:`tooltip`,children:a}):null]})})},`TooltipContentImpl`)),q=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=D(n);return(0,S.jsx)(l,{...i,...r,ref:t})},`TooltipArrow`));function J(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(J,`getExitSideFromRect`);function Y(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(Y,`getPaddedExitPoints`);function X(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(X,`getPointsFromRect`);function Z(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(Z,`isPointInPolygon`);function Q(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)),$(t)}w(Q,`getHull`);function $(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($,`getHullPresorted`);var ne=N,re=I,ie=R,ae=H,oe=te,se=q;function ce({delayDuration:e=0,...t}){return(0,S.jsx)(ne,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function le({...e}){return(0,S.jsx)(re,{"data-slot":`tooltip`,...e})}function ue({...e}){return(0,S.jsx)(ie,{"data-slot":`tooltip-trigger`,...e})}function de({className:e,sideOffset:t=0,children:n,...i}){return(0,S.jsx)(ae,{children:(0,S.jsxs)(oe,{"data-slot":`tooltip-content`,sideOffset:t,className:r(`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),...i,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-BK5FqmJ0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-Bji9fmSr.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","cn","Root","createPopperScope","Content","Anchor","Root2","Arrow","useComposedRefs","useLayoutEffect2","Primitive","DismissableLayer","useControllableState","Portal$1","useId","createSlottable","createContextScope","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","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","composeEventHandlers","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","Presence","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
+ {"version":3,"file":"tooltip-BK5FqmJ0.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","cn","Root","createPopperScope","Content","Anchor","Root2","Arrow","useComposedRefs","useLayoutEffect2","Primitive","DismissableLayer","useControllableState","Portal$1","useId","createSlottable","createContextScope","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","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","composeEventHandlers","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","Presence","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"./cn-M4_WHiur.js";var t={name:`undo-2`,size:24,node:[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]};t.node;var n=e(t);export{n as t};
2
- //# sourceMappingURL=undo-2-BU-uqm7e.js.map
1
+ import{i as e}from"./cn-CL1YHRrS.js";var t={name:`undo-2`,size:24,node:[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]};t.node;var n=e(t);export{n as t};
2
+ //# sourceMappingURL=undo-2-CLy2zklL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"undo-2-BU-uqm7e.js","names":["createLucideIcon","__iconData","Undo2"],"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/undo-2.mjs"],"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: \"undo-2\",\n size: 24,\n node: [\n [\"path\", { d: \"M9 14 4 9l5-5\", key: \"102s5s\" }],\n [\"path\", { d: \"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\", key: \"f3b9sd\" }]\n ]\n};\n__iconData.node;\nconst Undo2 = createLucideIcon(__iconData);\n\nexport { __iconData, Undo2 as default };\n//# sourceMappingURL=undo-2.mjs.map\n"],"ignoreList":[0],"mappings":"qCASA,IAAMC,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAS,CAAC,EAC9C,CAAC,OAAQ,CAAE,EAAG,2DAA4D,IAAK,QAAS,CAAC,CAC3F,CACF,EACAA,EAAW,KACX,IAAMC,EAAQF,EAAiBC,CAAU"}
1
+ {"version":3,"file":"undo-2-CLy2zklL.js","names":["createLucideIcon","__iconData","Undo2"],"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/undo-2.mjs"],"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: \"undo-2\",\n size: 24,\n node: [\n [\"path\", { d: \"M9 14 4 9l5-5\", key: \"102s5s\" }],\n [\"path\", { d: \"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\", key: \"f3b9sd\" }]\n ]\n};\n__iconData.node;\nconst Undo2 = createLucideIcon(__iconData);\n\nexport { __iconData, Undo2 as default };\n//# sourceMappingURL=undo-2.mjs.map\n"],"ignoreList":[0],"mappings":"qCASA,IAAMC,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAS,CAAC,EAC9C,CAAC,OAAQ,CAAE,EAAG,2DAA4D,IAAK,QAAS,CAAC,CAC3F,CACF,EACAA,EAAW,KACX,IAAMC,EAAQF,EAAiBC,CAAU"}
@@ -1,2 +1,2 @@
1
- import{H as e,P as t,i as n,j as r,l as i,ut as a}from"./cn-M4_WHiur.js";var o={name:`user-plus`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]};o.node;var s=n(o),c=n=>e({queryKey:t.audit.list(n),queryFn:()=>i.audit.list(n),placeholderData:a,meta:{silent:!0}}),l=[`name`,`title`,`label`,`email`,`filename`,`apiKey`],u=e=>{if(typeof e!=`object`||!e)return;let t=e;for(let e of l){let n=t[e];if(typeof n==`string`&&n.trim()!==``)return n}},d={"admin_user.create":`audit.actions.adminUserCreate`,"admin_user.delete":`audit.actions.adminUserDelete`,"admin_user.password_change":`audit.actions.adminUserPasswordChange`,"admin_user.update":`audit.actions.adminUserUpdate`,"api_token.create":`audit.actions.apiTokenCreate`,"api_token.revoke":`audit.actions.apiTokenRevoke`,"app_auth.refresh_reuse":`audit.actions.appAuthRefreshReuse`,"app_role.create":`audit.actions.appRoleCreate`,"app_role.delete":`audit.actions.appRoleDelete`,"app_role.update":`audit.actions.appRoleUpdate`,"app_user.block":`audit.actions.appUserBlock`,"app_user.unblock":`audit.actions.appUserUnblock`,"app_user.confirm_email":`audit.actions.appUserConfirmEmail`,"app_user.confirmation_resend":`audit.actions.appUserConfirmationResend`,"app_user.delete":`audit.actions.appUserDelete`,"app_user.oauth_link":`audit.actions.appUserOauthLink`,"app_user.password_change":`audit.actions.appUserPasswordChange`,"app_user.password_reset":`audit.actions.appUserPasswordReset`,"app_user.password_reset_request":`audit.actions.appUserPasswordResetRequest`,"app_user.register":`audit.actions.appUserRegister`,"app_user.roles_change":`audit.actions.appUserRolesChange`,"app_user.update":`audit.actions.appUserUpdate`,"assist.alt_text":`audit.actions.assistAltText`,"assist.content_ops":`audit.actions.assistContentOps`,"assist.rewrite":`audit.actions.assistRewrite`,"assist.schema_draft":`audit.actions.assistSchemaDraft`,"assist.summarize":`audit.actions.assistSummarize`,"assist.translate":`audit.actions.assistTranslate`,"auth.login":`audit.actions.authLogin`,"auth.logout":`audit.actions.authLogout`,"auth.password_reset":`audit.actions.authPasswordReset`,"auth.password_reset_request":`audit.actions.authPasswordResetRequest`,"change_set.create":`audit.actions.changeSetCreate`,"change_set.discard":`audit.actions.changeSetDiscard`,"change_set.item_add":`audit.actions.changeSetItemAdd`,"change_set.item_changed_after_review":`audit.actions.changeSetItemChangedAfterReview`,"change_set.item_remove":`audit.actions.changeSetItemRemove`,"change_set.schedule":`audit.actions.changeSetSchedule`,"change_set.schema_draft":`audit.actions.changeSetSchemaDraft`,"change_set.schema_draft_remove":`audit.actions.changeSetSchemaDraftRemove`,"change_set.ship":`audit.actions.changeSetShip`,"change_set.shipping":`audit.actions.changeSetShipping`,"change_set.unschedule":`audit.actions.changeSetUnschedule`,"change_set.update":`audit.actions.changeSetUpdate`,"content.delete":`audit.actions.contentDelete`,"content.publish":`audit.actions.contentPublish`,"content.restore":`audit.actions.contentRestore`,"content.unpublish":`audit.actions.contentUnpublish`,"deployment.retry":`audit.actions.deploymentRetry`,"deployment.trigger":`audit.actions.deploymentTrigger`,"deployment_connection.create":`audit.actions.deploymentConnectionCreate`,"deployment_connection.delete":`audit.actions.deploymentConnectionDelete`,"deployment_connection.update":`audit.actions.deploymentConnectionUpdate`,"invitation.accept":`audit.actions.invitationAccept`,"invitation.create":`audit.actions.invitationCreate`,"invitation.link":`audit.actions.invitationLink`,"invitation.revoke":`audit.actions.invitationRevoke`,"job.retry":`audit.actions.jobRetry`,"locale.create":`audit.actions.localeCreate`,"locale.delete":`audit.actions.localeDelete`,"locale.update":`audit.actions.localeUpdate`,"media.delete":`audit.actions.mediaDelete`,"media.folder.delete":`audit.actions.mediaFolderDelete`,"media.replace":`audit.actions.mediaReplace`,"media.upload":`audit.actions.mediaUpload`,"media.visibility.change":`audit.actions.mediaVisibilityChange`,"preview_token.create":`audit.actions.previewTokenCreate`,"preview_token.revoke":`audit.actions.previewTokenRevoke`,"publishing.schedule":`audit.actions.publishingSchedule`,"publishing.schedule.publish":`audit.actions.publishingSchedulePublish`,"publishing.schedule.unpublish":`audit.actions.publishingScheduleUnpublish`,"publishing.schedule.cancel":`audit.actions.publishingScheduleCancel`,"publishing.schedule.execute":`audit.actions.publishingScheduleExecute`,"role.create":`audit.actions.roleCreate`,"role.delete":`audit.actions.roleDelete`,"role.update":`audit.actions.roleUpdate`,"schema.activate":`audit.actions.schemaActivate`,"schema.change.request":`audit.actions.schemaChangeRequest`,"schema.create":`audit.actions.schemaCreate`,"schema.delete":`audit.actions.schemaDelete`,"schema.scope":`audit.actions.schemaScope`,"schema.settings.update":`audit.actions.schemaSettingsUpdate`,"session.revoke":`audit.actions.sessionRevoke`,"session.revoke_all":`audit.actions.sessionRevokeAll`,"setup.complete":`audit.actions.setupComplete`,"transfer.import":`audit.actions.transferImport`,"webhook.create":`audit.actions.webhookCreate`,"webhook.delete":`audit.actions.webhookDelete`,"webhook.redeliver":`audit.actions.webhookRedeliver`,"webhook.rotate_secret":`audit.actions.webhookRotateSecret`,"webhook.test":`audit.actions.webhookTest`,"webhook.update":`audit.actions.webhookUpdate`},f={admin_invitation:`audit.targets.adminInvitation`,admin_role:`audit.targets.adminRole`,admin_session:`audit.targets.adminSession`,admin_user:`audit.targets.adminUser`,api_token:`audit.targets.apiToken`,app_role:`audit.targets.appRole`,app_user:`audit.targets.appUser`,change_set:`audit.targets.changeSet`,component:`audit.targets.component`,deployment_connection:`audit.targets.deploymentConnection`,entry:`audit.targets.entry`,job:`audit.targets.job`,locale:`audit.targets.locale`,media_asset:`audit.targets.mediaAsset`,media_folder:`audit.targets.mediaFolder`,model:`audit.targets.model`,preview_token:`audit.targets.previewToken`,schemaSettings:`audit.targets.schemaSettings`,webhook:`audit.targets.webhook`},p=e=>Object.hasOwn(d,e),m=e=>Object.hasOwn(f,e),h=()=>{let{t:e}=r();return{actionLabel:t=>p(t)?e(d[t]):void 0,targetLabel:t=>m(t)?e(f[t]):void 0}};export{s as i,u as n,c as r,h as t};
2
- //# sourceMappingURL=useAuditLabels-D5nmbXqN.js.map
1
+ import{H as e,P as t,i as n,j as r,l as i,ut as a}from"./cn-CL1YHRrS.js";var o={name:`user-plus`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]};o.node;var s=n(o),c=n=>e({queryKey:t.audit.list(n),queryFn:()=>i.audit.list(n),placeholderData:a,meta:{silent:!0}}),l=[`name`,`title`,`label`,`email`,`filename`,`apiKey`],u=e=>{if(typeof e!=`object`||!e)return;let t=e;for(let e of l){let n=t[e];if(typeof n==`string`&&n.trim()!==``)return n}},d={"admin_user.create":`audit.actions.adminUserCreate`,"admin_user.delete":`audit.actions.adminUserDelete`,"admin_user.password_change":`audit.actions.adminUserPasswordChange`,"admin_user.update":`audit.actions.adminUserUpdate`,"api_token.create":`audit.actions.apiTokenCreate`,"api_token.revoke":`audit.actions.apiTokenRevoke`,"app_auth.refresh_reuse":`audit.actions.appAuthRefreshReuse`,"app_role.create":`audit.actions.appRoleCreate`,"app_role.delete":`audit.actions.appRoleDelete`,"app_role.update":`audit.actions.appRoleUpdate`,"app_user.block":`audit.actions.appUserBlock`,"app_user.unblock":`audit.actions.appUserUnblock`,"app_user.confirm_email":`audit.actions.appUserConfirmEmail`,"app_user.confirmation_resend":`audit.actions.appUserConfirmationResend`,"app_user.delete":`audit.actions.appUserDelete`,"app_user.oauth_link":`audit.actions.appUserOauthLink`,"app_user.password_change":`audit.actions.appUserPasswordChange`,"app_user.password_reset":`audit.actions.appUserPasswordReset`,"app_user.password_reset_request":`audit.actions.appUserPasswordResetRequest`,"app_user.register":`audit.actions.appUserRegister`,"app_user.roles_change":`audit.actions.appUserRolesChange`,"app_user.update":`audit.actions.appUserUpdate`,"assist.alt_text":`audit.actions.assistAltText`,"assist.content_ops":`audit.actions.assistContentOps`,"assist.rewrite":`audit.actions.assistRewrite`,"assist.schema_draft":`audit.actions.assistSchemaDraft`,"assist.summarize":`audit.actions.assistSummarize`,"assist.translate":`audit.actions.assistTranslate`,"auth.login":`audit.actions.authLogin`,"auth.logout":`audit.actions.authLogout`,"auth.password_reset":`audit.actions.authPasswordReset`,"auth.password_reset_request":`audit.actions.authPasswordResetRequest`,"change_set.create":`audit.actions.changeSetCreate`,"change_set.discard":`audit.actions.changeSetDiscard`,"change_set.item_add":`audit.actions.changeSetItemAdd`,"change_set.item_changed_after_review":`audit.actions.changeSetItemChangedAfterReview`,"change_set.item_remove":`audit.actions.changeSetItemRemove`,"change_set.schedule":`audit.actions.changeSetSchedule`,"change_set.schema_draft":`audit.actions.changeSetSchemaDraft`,"change_set.schema_draft_remove":`audit.actions.changeSetSchemaDraftRemove`,"change_set.ship":`audit.actions.changeSetShip`,"change_set.shipping":`audit.actions.changeSetShipping`,"change_set.unschedule":`audit.actions.changeSetUnschedule`,"change_set.update":`audit.actions.changeSetUpdate`,"content.delete":`audit.actions.contentDelete`,"content.publish":`audit.actions.contentPublish`,"content.restore":`audit.actions.contentRestore`,"content.unpublish":`audit.actions.contentUnpublish`,"deployment.retry":`audit.actions.deploymentRetry`,"deployment.trigger":`audit.actions.deploymentTrigger`,"deployment_connection.create":`audit.actions.deploymentConnectionCreate`,"deployment_connection.delete":`audit.actions.deploymentConnectionDelete`,"deployment_connection.update":`audit.actions.deploymentConnectionUpdate`,"invitation.accept":`audit.actions.invitationAccept`,"invitation.create":`audit.actions.invitationCreate`,"invitation.link":`audit.actions.invitationLink`,"invitation.revoke":`audit.actions.invitationRevoke`,"job.retry":`audit.actions.jobRetry`,"locale.create":`audit.actions.localeCreate`,"locale.delete":`audit.actions.localeDelete`,"locale.update":`audit.actions.localeUpdate`,"media.delete":`audit.actions.mediaDelete`,"media.folder.delete":`audit.actions.mediaFolderDelete`,"media.replace":`audit.actions.mediaReplace`,"media.upload":`audit.actions.mediaUpload`,"media.visibility.change":`audit.actions.mediaVisibilityChange`,"preview_token.create":`audit.actions.previewTokenCreate`,"preview_token.revoke":`audit.actions.previewTokenRevoke`,"publishing.schedule":`audit.actions.publishingSchedule`,"publishing.schedule.publish":`audit.actions.publishingSchedulePublish`,"publishing.schedule.unpublish":`audit.actions.publishingScheduleUnpublish`,"publishing.schedule.cancel":`audit.actions.publishingScheduleCancel`,"publishing.schedule.execute":`audit.actions.publishingScheduleExecute`,"role.create":`audit.actions.roleCreate`,"role.delete":`audit.actions.roleDelete`,"role.update":`audit.actions.roleUpdate`,"schema.activate":`audit.actions.schemaActivate`,"schema.change.request":`audit.actions.schemaChangeRequest`,"schema.create":`audit.actions.schemaCreate`,"schema.delete":`audit.actions.schemaDelete`,"schema.scope":`audit.actions.schemaScope`,"schema.settings.update":`audit.actions.schemaSettingsUpdate`,"session.revoke":`audit.actions.sessionRevoke`,"session.revoke_all":`audit.actions.sessionRevokeAll`,"setup.complete":`audit.actions.setupComplete`,"transfer.import":`audit.actions.transferImport`,"webhook.create":`audit.actions.webhookCreate`,"webhook.delete":`audit.actions.webhookDelete`,"webhook.redeliver":`audit.actions.webhookRedeliver`,"webhook.rotate_secret":`audit.actions.webhookRotateSecret`,"webhook.test":`audit.actions.webhookTest`,"webhook.update":`audit.actions.webhookUpdate`},f={admin_invitation:`audit.targets.adminInvitation`,admin_role:`audit.targets.adminRole`,admin_session:`audit.targets.adminSession`,admin_user:`audit.targets.adminUser`,api_token:`audit.targets.apiToken`,app_role:`audit.targets.appRole`,app_user:`audit.targets.appUser`,change_set:`audit.targets.changeSet`,component:`audit.targets.component`,deployment_connection:`audit.targets.deploymentConnection`,entry:`audit.targets.entry`,job:`audit.targets.job`,locale:`audit.targets.locale`,media_asset:`audit.targets.mediaAsset`,media_folder:`audit.targets.mediaFolder`,model:`audit.targets.model`,preview_token:`audit.targets.previewToken`,schemaSettings:`audit.targets.schemaSettings`,webhook:`audit.targets.webhook`},p=e=>Object.hasOwn(d,e),m=e=>Object.hasOwn(f,e),h=()=>{let{t:e}=r();return{actionLabel:t=>p(t)?e(d[t]):void 0,targetLabel:t=>m(t)?e(f[t]):void 0}};export{s as i,u as n,c as r,h as t};
2
+ //# sourceMappingURL=useAuditLabels-BJF7M5RY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAuditLabels-D5nmbXqN.js","names":["useQuery","queryKeys","createLucideIcon","useTranslation","adminApi","keepPreviousData","__iconData","UserPlus","useAuditEvents","query","NAME_FIELDS","auditTargetName","metadata","record","field","value","AUDIT_ACTION_LABEL_KEYS","AUDIT_TARGET_LABEL_KEYS","isActionCode","code","isTargetType","type","useAuditLabels","t"],"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/user-plus.mjs","../../src/api/audit.ts","../../src/helpers/auditTargetName.ts","../../src/constants/auditLabels.ts","../../src/hooks/useAuditLabels.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: \"user-plus\",\n size: 24,\n node: [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"8\", y2: \"14\", key: \"1bvyxn\" }],\n [\"line\", { x1: \"22\", x2: \"16\", y1: \"11\", y2: \"11\", key: \"1shjgl\" }]\n ]\n};\n__iconData.node;\nconst UserPlus = createLucideIcon(__iconData);\n\nexport { __iconData, UserPlus as default };\n//# sourceMappingURL=user-plus.mjs.map\n","import type { AuditQuery } from '@shapio/client';\nimport { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { queryKeys } from './queryKeys';\n\nexport const useAuditEvents = (query: AuditQuery) =>\n useQuery({\n queryKey: queryKeys.audit.list(query),\n queryFn: () => adminApi.audit.list(query),\n placeholderData: keepPreviousData,\n meta: { silent: true },\n });\n","/** Metadata fields that name an audit event's target, in order of preference. */\nconst NAME_FIELDS = ['name', 'title', 'label', 'email', 'filename', 'apiKey'] as const;\n\n/** The target's name as the server recorded it in the event's metadata, if it did. */\nexport const auditTargetName = (metadata: unknown): string | undefined => {\n if (typeof metadata !== 'object' || metadata === null) {\n return undefined;\n }\n const record = metadata as Record<string, unknown>;\n for (const field of NAME_FIELDS) {\n const value = record[field];\n if (typeof value === 'string' && value.trim() !== '') {\n return value;\n }\n }\n return undefined;\n};\n","/**\n * Translation keys for the audit action codes and target types the API records (apps/api: `recordAudit` and\n * route `config.audit` declarations). Codes contain dots, which i18next reads as nesting, hence the maps.\n * A code missing here is shown raw.\n */\nexport const AUDIT_ACTION_LABEL_KEYS = {\n 'admin_user.create': 'audit.actions.adminUserCreate',\n 'admin_user.delete': 'audit.actions.adminUserDelete',\n 'admin_user.password_change': 'audit.actions.adminUserPasswordChange',\n 'admin_user.update': 'audit.actions.adminUserUpdate',\n 'api_token.create': 'audit.actions.apiTokenCreate',\n 'api_token.revoke': 'audit.actions.apiTokenRevoke',\n 'app_auth.refresh_reuse': 'audit.actions.appAuthRefreshReuse',\n 'app_role.create': 'audit.actions.appRoleCreate',\n 'app_role.delete': 'audit.actions.appRoleDelete',\n 'app_role.update': 'audit.actions.appRoleUpdate',\n 'app_user.block': 'audit.actions.appUserBlock',\n 'app_user.unblock': 'audit.actions.appUserUnblock',\n 'app_user.confirm_email': 'audit.actions.appUserConfirmEmail',\n 'app_user.confirmation_resend': 'audit.actions.appUserConfirmationResend',\n 'app_user.delete': 'audit.actions.appUserDelete',\n 'app_user.oauth_link': 'audit.actions.appUserOauthLink',\n 'app_user.password_change': 'audit.actions.appUserPasswordChange',\n 'app_user.password_reset': 'audit.actions.appUserPasswordReset',\n 'app_user.password_reset_request': 'audit.actions.appUserPasswordResetRequest',\n 'app_user.register': 'audit.actions.appUserRegister',\n 'app_user.roles_change': 'audit.actions.appUserRolesChange',\n 'app_user.update': 'audit.actions.appUserUpdate',\n 'assist.alt_text': 'audit.actions.assistAltText',\n 'assist.content_ops': 'audit.actions.assistContentOps',\n 'assist.rewrite': 'audit.actions.assistRewrite',\n 'assist.schema_draft': 'audit.actions.assistSchemaDraft',\n 'assist.summarize': 'audit.actions.assistSummarize',\n 'assist.translate': 'audit.actions.assistTranslate',\n 'auth.login': 'audit.actions.authLogin',\n 'auth.logout': 'audit.actions.authLogout',\n 'auth.password_reset': 'audit.actions.authPasswordReset',\n 'auth.password_reset_request': 'audit.actions.authPasswordResetRequest',\n 'change_set.create': 'audit.actions.changeSetCreate',\n 'change_set.discard': 'audit.actions.changeSetDiscard',\n 'change_set.item_add': 'audit.actions.changeSetItemAdd',\n 'change_set.item_changed_after_review': 'audit.actions.changeSetItemChangedAfterReview',\n 'change_set.item_remove': 'audit.actions.changeSetItemRemove',\n 'change_set.schedule': 'audit.actions.changeSetSchedule',\n 'change_set.schema_draft': 'audit.actions.changeSetSchemaDraft',\n 'change_set.schema_draft_remove': 'audit.actions.changeSetSchemaDraftRemove',\n 'change_set.ship': 'audit.actions.changeSetShip',\n 'change_set.shipping': 'audit.actions.changeSetShipping',\n 'change_set.unschedule': 'audit.actions.changeSetUnschedule',\n 'change_set.update': 'audit.actions.changeSetUpdate',\n 'content.delete': 'audit.actions.contentDelete',\n 'content.publish': 'audit.actions.contentPublish',\n 'content.restore': 'audit.actions.contentRestore',\n 'content.unpublish': 'audit.actions.contentUnpublish',\n 'deployment.retry': 'audit.actions.deploymentRetry',\n 'deployment.trigger': 'audit.actions.deploymentTrigger',\n 'deployment_connection.create': 'audit.actions.deploymentConnectionCreate',\n 'deployment_connection.delete': 'audit.actions.deploymentConnectionDelete',\n 'deployment_connection.update': 'audit.actions.deploymentConnectionUpdate',\n 'invitation.accept': 'audit.actions.invitationAccept',\n 'invitation.create': 'audit.actions.invitationCreate',\n 'invitation.link': 'audit.actions.invitationLink',\n 'invitation.revoke': 'audit.actions.invitationRevoke',\n 'job.retry': 'audit.actions.jobRetry',\n 'locale.create': 'audit.actions.localeCreate',\n 'locale.delete': 'audit.actions.localeDelete',\n 'locale.update': 'audit.actions.localeUpdate',\n 'media.delete': 'audit.actions.mediaDelete',\n 'media.folder.delete': 'audit.actions.mediaFolderDelete',\n 'media.replace': 'audit.actions.mediaReplace',\n 'media.upload': 'audit.actions.mediaUpload',\n 'media.visibility.change': 'audit.actions.mediaVisibilityChange',\n 'preview_token.create': 'audit.actions.previewTokenCreate',\n 'preview_token.revoke': 'audit.actions.previewTokenRevoke',\n 'publishing.schedule': 'audit.actions.publishingSchedule',\n 'publishing.schedule.publish': 'audit.actions.publishingSchedulePublish',\n 'publishing.schedule.unpublish': 'audit.actions.publishingScheduleUnpublish',\n 'publishing.schedule.cancel': 'audit.actions.publishingScheduleCancel',\n 'publishing.schedule.execute': 'audit.actions.publishingScheduleExecute',\n 'role.create': 'audit.actions.roleCreate',\n 'role.delete': 'audit.actions.roleDelete',\n 'role.update': 'audit.actions.roleUpdate',\n 'schema.activate': 'audit.actions.schemaActivate',\n 'schema.change.request': 'audit.actions.schemaChangeRequest',\n 'schema.create': 'audit.actions.schemaCreate',\n 'schema.delete': 'audit.actions.schemaDelete',\n 'schema.scope': 'audit.actions.schemaScope',\n 'schema.settings.update': 'audit.actions.schemaSettingsUpdate',\n 'session.revoke': 'audit.actions.sessionRevoke',\n 'session.revoke_all': 'audit.actions.sessionRevokeAll',\n 'setup.complete': 'audit.actions.setupComplete',\n 'transfer.import': 'audit.actions.transferImport',\n 'webhook.create': 'audit.actions.webhookCreate',\n 'webhook.delete': 'audit.actions.webhookDelete',\n 'webhook.redeliver': 'audit.actions.webhookRedeliver',\n 'webhook.rotate_secret': 'audit.actions.webhookRotateSecret',\n 'webhook.test': 'audit.actions.webhookTest',\n 'webhook.update': 'audit.actions.webhookUpdate',\n} as const;\n\nexport const AUDIT_TARGET_LABEL_KEYS = {\n admin_invitation: 'audit.targets.adminInvitation',\n admin_role: 'audit.targets.adminRole',\n admin_session: 'audit.targets.adminSession',\n admin_user: 'audit.targets.adminUser',\n api_token: 'audit.targets.apiToken',\n app_role: 'audit.targets.appRole',\n app_user: 'audit.targets.appUser',\n change_set: 'audit.targets.changeSet',\n component: 'audit.targets.component',\n deployment_connection: 'audit.targets.deploymentConnection',\n entry: 'audit.targets.entry',\n job: 'audit.targets.job',\n locale: 'audit.targets.locale',\n media_asset: 'audit.targets.mediaAsset',\n media_folder: 'audit.targets.mediaFolder',\n model: 'audit.targets.model',\n preview_token: 'audit.targets.previewToken',\n schemaSettings: 'audit.targets.schemaSettings',\n webhook: 'audit.targets.webhook',\n} as const;\n","import { useTranslation } from 'react-i18next';\nimport { AUDIT_ACTION_LABEL_KEYS, AUDIT_TARGET_LABEL_KEYS } from '@/constants/auditLabels';\n\nconst isActionCode = (code: string): code is keyof typeof AUDIT_ACTION_LABEL_KEYS =>\n Object.hasOwn(AUDIT_ACTION_LABEL_KEYS, code);\n\nconst isTargetType = (type: string): type is keyof typeof AUDIT_TARGET_LABEL_KEYS =>\n Object.hasOwn(AUDIT_TARGET_LABEL_KEYS, type);\n\n/**\n * Human labels for audit action codes (\"auth.login\" → \"Signed in\") and target types (\"admin_user\" →\n * \"Admin user\"). Undefined for a code the admin doesn't know yet (a newer server, an extension's route):\n * callers then show the raw code.\n */\nexport const useAuditLabels = () => {\n const { t } = useTranslation();\n return {\n actionLabel: (code: string) => (isActionCode(code) ? t(AUDIT_ACTION_LABEL_KEYS[code]) : undefined),\n targetLabel: (type: string) => (isTargetType(type) ? t(AUDIT_TARGET_LABEL_KEYS[type]) : undefined),\n };\n};\n"],"ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"useAuditLabels-BJF7M5RY.js","names":["useQuery","queryKeys","createLucideIcon","useTranslation","adminApi","keepPreviousData","__iconData","UserPlus","useAuditEvents","query","NAME_FIELDS","auditTargetName","metadata","record","field","value","AUDIT_ACTION_LABEL_KEYS","AUDIT_TARGET_LABEL_KEYS","isActionCode","code","isTargetType","type","useAuditLabels","t"],"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/user-plus.mjs","../../src/api/audit.ts","../../src/helpers/auditTargetName.ts","../../src/constants/auditLabels.ts","../../src/hooks/useAuditLabels.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: \"user-plus\",\n size: 24,\n node: [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"8\", y2: \"14\", key: \"1bvyxn\" }],\n [\"line\", { x1: \"22\", x2: \"16\", y1: \"11\", y2: \"11\", key: \"1shjgl\" }]\n ]\n};\n__iconData.node;\nconst UserPlus = createLucideIcon(__iconData);\n\nexport { __iconData, UserPlus as default };\n//# sourceMappingURL=user-plus.mjs.map\n","import type { AuditQuery } from '@shapio/client';\nimport { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { queryKeys } from './queryKeys';\n\nexport const useAuditEvents = (query: AuditQuery) =>\n useQuery({\n queryKey: queryKeys.audit.list(query),\n queryFn: () => adminApi.audit.list(query),\n placeholderData: keepPreviousData,\n meta: { silent: true },\n });\n","/** Metadata fields that name an audit event's target, in order of preference. */\nconst NAME_FIELDS = ['name', 'title', 'label', 'email', 'filename', 'apiKey'] as const;\n\n/** The target's name as the server recorded it in the event's metadata, if it did. */\nexport const auditTargetName = (metadata: unknown): string | undefined => {\n if (typeof metadata !== 'object' || metadata === null) {\n return undefined;\n }\n const record = metadata as Record<string, unknown>;\n for (const field of NAME_FIELDS) {\n const value = record[field];\n if (typeof value === 'string' && value.trim() !== '') {\n return value;\n }\n }\n return undefined;\n};\n","/**\n * Translation keys for the audit action codes and target types the API records (apps/api: `recordAudit` and\n * route `config.audit` declarations). Codes contain dots, which i18next reads as nesting, hence the maps.\n * A code missing here is shown raw.\n */\nexport const AUDIT_ACTION_LABEL_KEYS = {\n 'admin_user.create': 'audit.actions.adminUserCreate',\n 'admin_user.delete': 'audit.actions.adminUserDelete',\n 'admin_user.password_change': 'audit.actions.adminUserPasswordChange',\n 'admin_user.update': 'audit.actions.adminUserUpdate',\n 'api_token.create': 'audit.actions.apiTokenCreate',\n 'api_token.revoke': 'audit.actions.apiTokenRevoke',\n 'app_auth.refresh_reuse': 'audit.actions.appAuthRefreshReuse',\n 'app_role.create': 'audit.actions.appRoleCreate',\n 'app_role.delete': 'audit.actions.appRoleDelete',\n 'app_role.update': 'audit.actions.appRoleUpdate',\n 'app_user.block': 'audit.actions.appUserBlock',\n 'app_user.unblock': 'audit.actions.appUserUnblock',\n 'app_user.confirm_email': 'audit.actions.appUserConfirmEmail',\n 'app_user.confirmation_resend': 'audit.actions.appUserConfirmationResend',\n 'app_user.delete': 'audit.actions.appUserDelete',\n 'app_user.oauth_link': 'audit.actions.appUserOauthLink',\n 'app_user.password_change': 'audit.actions.appUserPasswordChange',\n 'app_user.password_reset': 'audit.actions.appUserPasswordReset',\n 'app_user.password_reset_request': 'audit.actions.appUserPasswordResetRequest',\n 'app_user.register': 'audit.actions.appUserRegister',\n 'app_user.roles_change': 'audit.actions.appUserRolesChange',\n 'app_user.update': 'audit.actions.appUserUpdate',\n 'assist.alt_text': 'audit.actions.assistAltText',\n 'assist.content_ops': 'audit.actions.assistContentOps',\n 'assist.rewrite': 'audit.actions.assistRewrite',\n 'assist.schema_draft': 'audit.actions.assistSchemaDraft',\n 'assist.summarize': 'audit.actions.assistSummarize',\n 'assist.translate': 'audit.actions.assistTranslate',\n 'auth.login': 'audit.actions.authLogin',\n 'auth.logout': 'audit.actions.authLogout',\n 'auth.password_reset': 'audit.actions.authPasswordReset',\n 'auth.password_reset_request': 'audit.actions.authPasswordResetRequest',\n 'change_set.create': 'audit.actions.changeSetCreate',\n 'change_set.discard': 'audit.actions.changeSetDiscard',\n 'change_set.item_add': 'audit.actions.changeSetItemAdd',\n 'change_set.item_changed_after_review': 'audit.actions.changeSetItemChangedAfterReview',\n 'change_set.item_remove': 'audit.actions.changeSetItemRemove',\n 'change_set.schedule': 'audit.actions.changeSetSchedule',\n 'change_set.schema_draft': 'audit.actions.changeSetSchemaDraft',\n 'change_set.schema_draft_remove': 'audit.actions.changeSetSchemaDraftRemove',\n 'change_set.ship': 'audit.actions.changeSetShip',\n 'change_set.shipping': 'audit.actions.changeSetShipping',\n 'change_set.unschedule': 'audit.actions.changeSetUnschedule',\n 'change_set.update': 'audit.actions.changeSetUpdate',\n 'content.delete': 'audit.actions.contentDelete',\n 'content.publish': 'audit.actions.contentPublish',\n 'content.restore': 'audit.actions.contentRestore',\n 'content.unpublish': 'audit.actions.contentUnpublish',\n 'deployment.retry': 'audit.actions.deploymentRetry',\n 'deployment.trigger': 'audit.actions.deploymentTrigger',\n 'deployment_connection.create': 'audit.actions.deploymentConnectionCreate',\n 'deployment_connection.delete': 'audit.actions.deploymentConnectionDelete',\n 'deployment_connection.update': 'audit.actions.deploymentConnectionUpdate',\n 'invitation.accept': 'audit.actions.invitationAccept',\n 'invitation.create': 'audit.actions.invitationCreate',\n 'invitation.link': 'audit.actions.invitationLink',\n 'invitation.revoke': 'audit.actions.invitationRevoke',\n 'job.retry': 'audit.actions.jobRetry',\n 'locale.create': 'audit.actions.localeCreate',\n 'locale.delete': 'audit.actions.localeDelete',\n 'locale.update': 'audit.actions.localeUpdate',\n 'media.delete': 'audit.actions.mediaDelete',\n 'media.folder.delete': 'audit.actions.mediaFolderDelete',\n 'media.replace': 'audit.actions.mediaReplace',\n 'media.upload': 'audit.actions.mediaUpload',\n 'media.visibility.change': 'audit.actions.mediaVisibilityChange',\n 'preview_token.create': 'audit.actions.previewTokenCreate',\n 'preview_token.revoke': 'audit.actions.previewTokenRevoke',\n 'publishing.schedule': 'audit.actions.publishingSchedule',\n 'publishing.schedule.publish': 'audit.actions.publishingSchedulePublish',\n 'publishing.schedule.unpublish': 'audit.actions.publishingScheduleUnpublish',\n 'publishing.schedule.cancel': 'audit.actions.publishingScheduleCancel',\n 'publishing.schedule.execute': 'audit.actions.publishingScheduleExecute',\n 'role.create': 'audit.actions.roleCreate',\n 'role.delete': 'audit.actions.roleDelete',\n 'role.update': 'audit.actions.roleUpdate',\n 'schema.activate': 'audit.actions.schemaActivate',\n 'schema.change.request': 'audit.actions.schemaChangeRequest',\n 'schema.create': 'audit.actions.schemaCreate',\n 'schema.delete': 'audit.actions.schemaDelete',\n 'schema.scope': 'audit.actions.schemaScope',\n 'schema.settings.update': 'audit.actions.schemaSettingsUpdate',\n 'session.revoke': 'audit.actions.sessionRevoke',\n 'session.revoke_all': 'audit.actions.sessionRevokeAll',\n 'setup.complete': 'audit.actions.setupComplete',\n 'transfer.import': 'audit.actions.transferImport',\n 'webhook.create': 'audit.actions.webhookCreate',\n 'webhook.delete': 'audit.actions.webhookDelete',\n 'webhook.redeliver': 'audit.actions.webhookRedeliver',\n 'webhook.rotate_secret': 'audit.actions.webhookRotateSecret',\n 'webhook.test': 'audit.actions.webhookTest',\n 'webhook.update': 'audit.actions.webhookUpdate',\n} as const;\n\nexport const AUDIT_TARGET_LABEL_KEYS = {\n admin_invitation: 'audit.targets.adminInvitation',\n admin_role: 'audit.targets.adminRole',\n admin_session: 'audit.targets.adminSession',\n admin_user: 'audit.targets.adminUser',\n api_token: 'audit.targets.apiToken',\n app_role: 'audit.targets.appRole',\n app_user: 'audit.targets.appUser',\n change_set: 'audit.targets.changeSet',\n component: 'audit.targets.component',\n deployment_connection: 'audit.targets.deploymentConnection',\n entry: 'audit.targets.entry',\n job: 'audit.targets.job',\n locale: 'audit.targets.locale',\n media_asset: 'audit.targets.mediaAsset',\n media_folder: 'audit.targets.mediaFolder',\n model: 'audit.targets.model',\n preview_token: 'audit.targets.previewToken',\n schemaSettings: 'audit.targets.schemaSettings',\n webhook: 'audit.targets.webhook',\n} as const;\n","import { useTranslation } from 'react-i18next';\nimport { AUDIT_ACTION_LABEL_KEYS, AUDIT_TARGET_LABEL_KEYS } from '@/constants/auditLabels';\n\nconst isActionCode = (code: string): code is keyof typeof AUDIT_ACTION_LABEL_KEYS =>\n Object.hasOwn(AUDIT_ACTION_LABEL_KEYS, code);\n\nconst isTargetType = (type: string): type is keyof typeof AUDIT_TARGET_LABEL_KEYS =>\n Object.hasOwn(AUDIT_TARGET_LABEL_KEYS, type);\n\n/**\n * Human labels for audit action codes (\"auth.login\" → \"Signed in\") and target types (\"admin_user\" →\n * \"Admin user\"). Undefined for a code the admin doesn't know yet (a newer server, an extension's route):\n * callers then show the raw code.\n */\nexport const useAuditLabels = () => {\n const { t } = useTranslation();\n return {\n actionLabel: (code: string) => (isActionCode(code) ? t(AUDIT_ACTION_LABEL_KEYS[code]) : undefined),\n targetLabel: (type: string) => (isTargetType(type) ? t(AUDIT_TARGET_LABEL_KEYS[type]) : undefined),\n };\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{u as n}from"./auth-BaVAo0u_.js";var r=e=>n().data?.networkPermissions.includes(e)??!1,i=e(t(),1),a=()=>{let[e,t]=(0,i.useState)(void 0),[n,r]=(0,i.useState)(!1);return{target:e,open:n,ask:e=>{t(e),r(!0)},onOpenChange:r,close:()=>r(!1)}};export{r as n,a as t};
2
- //# sourceMappingURL=useConfirmTarget-Y7_8kVX5.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{u as n}from"./auth-YVfK3SxF.js";var r=e=>n().data?.networkPermissions.includes(e)??!1,i=e(t(),1),a=()=>{let[e,t]=(0,i.useState)(void 0),[n,r]=(0,i.useState)(!1);return{target:e,open:n,ask:e=>{t(e),r(!0)},onOpenChange:r,close:()=>r(!1)}};export{r as n,a as t};
2
+ //# sourceMappingURL=useConfirmTarget-BUvlrGSW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useConfirmTarget-Y7_8kVX5.js","names":["useState","__toESM","useMe","useNetworkPermission","action","import_react","require_react","useConfirmTarget","target","setTarget","open","setOpen","item"],"sources":["../../src/features/Network/hooks/useNetworkPermission.ts","../../src/hooks/useConfirmTarget.ts"],"sourcesContent":["import type { NetworkAction } from '@shapio/client';\nimport { useMe } from '@/api/auth';\n\n/** Whether the admin holds a network action (roles assigned on every site); the server enforces it either way. */\nexport const useNetworkPermission = (action: NetworkAction) =>\n useMe().data?.networkPermissions.includes(action) ?? false;\n","import { useState } from 'react';\n\n/**\n * The item a confirmation dialog is asking about. `target` is undefined while no dialog is open; keeping\n * the last target while the dialog animates out avoids its text flickering.\n */\nexport const useConfirmTarget = <T>() => {\n const [target, setTarget] = useState<T | undefined>(undefined);\n const [open, setOpen] = useState(false);\n return {\n target,\n open,\n ask: (item: T) => {\n setTarget(item);\n setOpen(true);\n },\n onOpenChange: setOpen,\n close: () => setOpen(false),\n };\n};\n"],"mappings":"6HAIA,IAAaG,EAAwB,GACnCD,EAAM,CAAC,CAAC,MAAM,mBAAmB,SAASE,CAAM,GAAK,cCC1CG,MAA4B,CACvC,GAAM,CAACC,EAAQC,IAAA,EAAaT,EAAAA,SAAAA,CAAwB,IAAA,EAAS,EACvD,CAACU,EAAMC,IAAA,EAAWX,EAAAA,SAAAA,CAAS,EAAK,EACtC,MAAO,CACL,SACA,OACA,IAAM,GAAY,CAChBS,EAAUG,CAAI,EACdD,EAAQ,EAAI,CACd,EACA,aAAcA,EACd,UAAaA,EAAQ,EAAK,CAC5B,CACF"}
1
+ {"version":3,"file":"useConfirmTarget-BUvlrGSW.js","names":["useState","__toESM","useMe","useNetworkPermission","action","import_react","require_react","useConfirmTarget","target","setTarget","open","setOpen","item"],"sources":["../../src/features/Network/hooks/useNetworkPermission.ts","../../src/hooks/useConfirmTarget.ts"],"sourcesContent":["import type { NetworkAction } from '@shapio/client';\nimport { useMe } from '@/api/auth';\n\n/** Whether the admin holds a network action (roles assigned on every site); the server enforces it either way. */\nexport const useNetworkPermission = (action: NetworkAction) =>\n useMe().data?.networkPermissions.includes(action) ?? false;\n","import { useState } from 'react';\n\n/**\n * The item a confirmation dialog is asking about. `target` is undefined while no dialog is open; keeping\n * the last target while the dialog animates out avoids its text flickering.\n */\nexport const useConfirmTarget = <T>() => {\n const [target, setTarget] = useState<T | undefined>(undefined);\n const [open, setOpen] = useState(false);\n return {\n target,\n open,\n ask: (item: T) => {\n setTarget(item);\n setOpen(true);\n },\n onOpenChange: setOpen,\n close: () => setOpen(false),\n };\n};\n"],"mappings":"6HAIA,IAAaG,EAAwB,GACnCD,EAAM,CAAC,CAAC,MAAM,mBAAmB,SAASE,CAAM,GAAK,cCC1CG,MAA4B,CACvC,GAAM,CAACC,EAAQC,IAAA,EAAaT,EAAAA,SAAAA,CAAwB,IAAA,EAAS,EACvD,CAACU,EAAMC,IAAA,EAAWX,EAAAA,SAAAA,CAAS,EAAK,EACtC,MAAO,CACL,SACA,OACA,IAAM,GAAY,CAChBS,EAAUG,CAAI,EACdD,EAAQ,EAAI,CACd,EACA,aAAcA,EACd,UAAaA,EAAQ,EAAK,CAC5B,CACF"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{U as n}from"./src-CQu-YxUM.js";import{r}from"./schema--xSR7cf9.js";var i=e(t(),1),a=()=>{let{definitions:e,error:t}=r();return{schema:(0,i.useMemo)(()=>{if(!e)return;let t=new Map,r=new Map;for(let{definition:i}of e)n(i)?r.set(i.id,i):t.set(i.id,i);return{models:t,components:r,sortedModels:[...t.values()].sort((e,t)=>e.label.localeCompare(t.label))}},[e]),error:t}},o=(e,t)=>e.sortedModels.find(e=>e.apiKey===t);export{a as n,o as t};
2
- //# sourceMappingURL=useContentSchema-DJTqjlUk.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{G as n}from"./src-B2qcqjNM.js";import{r}from"./schema-B7L9OJrX.js";var i=e(t(),1),a=()=>{let{definitions:e,error:t}=r();return{schema:(0,i.useMemo)(()=>{if(!e)return;let t=new Map,r=new Map;for(let{definition:i}of e)n(i)?r.set(i.id,i):t.set(i.id,i);return{models:t,components:r,sortedModels:[...t.values()].sort((e,t)=>e.label.localeCompare(t.label))}},[e]),error:t}},o=(e,t)=>e.sortedModels.find(e=>e.apiKey===t);export{a as n,o as t};
2
+ //# sourceMappingURL=useContentSchema-BCdLYsKa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useContentSchema-DJTqjlUk.js","names":["useMemo","__toESM","isComponentDefinition","import_react","require_react","useContentSchema","useAllDefinitions","definitions","models","components","definition","a","b","findModelByKey","schema","model","modelKey"],"sources":["../../src/features/Content/hooks/useContentSchema.ts"],"sourcesContent":["import { isComponentDefinition, type ComponentDefinition, type ModelDefinition } from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useAllDefinitions } from '@/api/schema';\n\nexport type ContentSchema = {\n models: ReadonlyMap<string, ModelDefinition>;\n components: ReadonlyMap<string, ComponentDefinition>;\n /** Collections and singletons, in label order (for navigation). */\n sortedModels: readonly ModelDefinition[];\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.\n */\nexport const useContentSchema = (): { schema: ContentSchema | undefined; error: unknown } => {\n const { definitions, error } = useAllDefinitions();\n const schema = useMemo(() => {\n if (!definitions) {\n return undefined;\n }\n const models = new Map<string, ModelDefinition>();\n const components = new Map<string, ComponentDefinition>();\n for (const { definition } of definitions) {\n if (isComponentDefinition(definition)) {\n components.set(definition.id, definition);\n } else {\n models.set(definition.id, definition);\n }\n }\n const sortedModels = [...models.values()].sort((a, b) => a.label.localeCompare(b.label));\n return { models, components, sortedModels };\n }, [definitions]);\n return { schema, error };\n};\n\nexport const findModelByKey = (schema: ContentSchema, modelKey: string): ModelDefinition | undefined =>\n schema.sortedModels.find((model) => model.apiKey === modelKey);\n"],"mappings":"+KAeaK,MAAgF,CAC3F,GAAM,CAAE,cAAa,SAAUC,EAAkB,EAiBjD,MAAO,CAAE,QAAA,EAhBMN,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACO,EACH,OAEF,IAAMC,EAAS,IAAI,IACbC,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EACvBL,EAAsBQ,CAAU,EAClCD,EAAW,IAAIC,EAAW,GAAIA,CAAU,EAExCF,EAAO,IAAIE,EAAW,GAAIA,CAAU,EAIxC,MAAO,CAAE,SAAQ,aAAY,aADR,CAAC,GAAGF,EAAO,OAAO,CAAC,CAAC,CAAC,MAAM,EAAG,IAAMG,EAAE,MAAM,cAAcC,EAAE,KAAK,CACzD,CAAa,CAC5C,EAAG,CAACL,CAAW,CACN,EAAQ,OAAM,CACzB,EAEaM,GAAkB,EAAuB,IACpDC,EAAO,aAAa,KAAM,GAAUC,EAAM,SAAWC,CAAQ"}
1
+ {"version":3,"file":"useContentSchema-BCdLYsKa.js","names":["useMemo","__toESM","isComponentDefinition","import_react","require_react","useContentSchema","useAllDefinitions","definitions","models","components","definition","a","b","findModelByKey","schema","model","modelKey"],"sources":["../../src/features/Content/hooks/useContentSchema.ts"],"sourcesContent":["import { isComponentDefinition, type ComponentDefinition, type ModelDefinition } from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useAllDefinitions } from '@/api/schema';\n\nexport type ContentSchema = {\n models: ReadonlyMap<string, ModelDefinition>;\n components: ReadonlyMap<string, ComponentDefinition>;\n /** Collections and singletons, in label order (for navigation). */\n sortedModels: readonly ModelDefinition[];\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.\n */\nexport const useContentSchema = (): { schema: ContentSchema | undefined; error: unknown } => {\n const { definitions, error } = useAllDefinitions();\n const schema = useMemo(() => {\n if (!definitions) {\n return undefined;\n }\n const models = new Map<string, ModelDefinition>();\n const components = new Map<string, ComponentDefinition>();\n for (const { definition } of definitions) {\n if (isComponentDefinition(definition)) {\n components.set(definition.id, definition);\n } else {\n models.set(definition.id, definition);\n }\n }\n const sortedModels = [...models.values()].sort((a, b) => a.label.localeCompare(b.label));\n return { models, components, sortedModels };\n }, [definitions]);\n return { schema, error };\n};\n\nexport const findModelByKey = (schema: ContentSchema, modelKey: string): ModelDefinition | undefined =>\n schema.sortedModels.find((model) => model.apiKey === modelKey);\n"],"mappings":"+KAeaK,MAAgF,CAC3F,GAAM,CAAE,cAAa,SAAUC,EAAkB,EAiBjD,MAAO,CAAE,QAAA,EAhBMN,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACO,EACH,OAEF,IAAMC,EAAS,IAAI,IACbC,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EACvBL,EAAsBQ,CAAU,EAClCD,EAAW,IAAIC,EAAW,GAAIA,CAAU,EAExCF,EAAO,IAAIE,EAAW,GAAIA,CAAU,EAIxC,MAAO,CAAE,SAAQ,aAAY,aADR,CAAC,GAAGF,EAAO,OAAO,CAAC,CAAC,CAAC,MAAM,EAAG,IAAMG,EAAE,MAAM,cAAcC,EAAE,KAAK,CACzD,CAAa,CAC5C,EAAG,CAACL,CAAW,CACN,EAAQ,OAAM,CACzB,EAEaM,GAAkB,EAAuB,IACpDC,EAAO,aAAa,KAAM,GAAUC,EAAM,SAAWC,CAAQ"}