@shapio/cms 0.5.6 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/dist/admin/assets/{AssetTile-_qRYsivK.js → AssetTile-H0hABhB2.js} +2 -2
  2. package/dist/admin/assets/{AssetTile-_qRYsivK.js.map → AssetTile-H0hABhB2.js.map} +1 -1
  3. package/dist/admin/assets/AssistError-1s3PuY0X.js +2 -0
  4. package/dist/admin/assets/{AssistError-CMXQWiQo.js.map → AssistError-1s3PuY0X.js.map} +1 -1
  5. package/dist/admin/assets/{BlockMenuItems-WIrbyv1a.js → BlockMenuItems-a8zXdfcF.js} +2 -2
  6. package/dist/admin/assets/{BlockMenuItems-WIrbyv1a.js.map → BlockMenuItems-a8zXdfcF.js.map} +1 -1
  7. package/dist/admin/assets/Body-BzZD-TZT.js +2 -0
  8. package/dist/admin/assets/{Body-BYc1IVsQ.js.map → Body-BzZD-TZT.js.map} +1 -1
  9. package/dist/admin/assets/Builder-60jO_nbS.js +2 -0
  10. package/dist/admin/assets/Builder-60jO_nbS.js.map +1 -0
  11. package/dist/admin/assets/{CodeEditor-NMvrWgxT.js → CodeEditor-BLbJZE9v.js} +2 -2
  12. package/dist/admin/assets/{CodeEditor-NMvrWgxT.js.map → CodeEditor-BLbJZE9v.js.map} +1 -1
  13. package/dist/admin/assets/{CopyButton-B0RuxynJ.js → CopyButton-BOtR_h1H.js} +2 -2
  14. package/dist/admin/assets/{CopyButton-B0RuxynJ.js.map → CopyButton-BOtR_h1H.js.map} +1 -1
  15. package/dist/admin/assets/{CursorPager-CQZsKNxR.js → CursorPager-DwLW13ov.js} +2 -2
  16. package/dist/admin/assets/{CursorPager-CQZsKNxR.js.map → CursorPager-DwLW13ov.js.map} +1 -1
  17. package/dist/admin/assets/{ExternalLink-BNq7nAYL.js → ExternalLink-BITMgS1K.js} +2 -2
  18. package/dist/admin/assets/{ExternalLink-BNq7nAYL.js.map → ExternalLink-BITMgS1K.js.map} +1 -1
  19. package/dist/admin/assets/{FocalPoint-BYu2fOTb.js → FocalPoint-n-a_AXKN.js} +2 -2
  20. package/dist/admin/assets/{FocalPoint-BYu2fOTb.js.map → FocalPoint-n-a_AXKN.js.map} +1 -1
  21. package/dist/admin/assets/Form-D_4fhOy0.js +2 -0
  22. package/dist/admin/assets/Form-D_4fhOy0.js.map +1 -0
  23. package/dist/admin/assets/{FormCheckboxGroup-Bz8KERs1.js → FormCheckboxGroup-1fYisXrr.js} +2 -2
  24. package/dist/admin/assets/FormCheckboxGroup-1fYisXrr.js.map +1 -0
  25. package/dist/admin/assets/{FormRadioGroup-c-wyx7dq.js → FormRadioGroup-B0VZyb1t.js} +2 -2
  26. package/dist/admin/assets/{FormRadioGroup-c-wyx7dq.js.map → FormRadioGroup-B0VZyb1t.js.map} +1 -1
  27. package/dist/admin/assets/{FormSelectField-ijG9qPpb.js → FormSelectField-Br8bkwRF.js} +2 -2
  28. package/dist/admin/assets/{FormSelectField-ijG9qPpb.js.map → FormSelectField-Br8bkwRF.js.map} +1 -1
  29. package/dist/admin/assets/{FormSwitchField-Bp3hNpeP.js → FormSwitchField-d8G-YCSX.js} +2 -2
  30. package/dist/admin/assets/{FormSwitchField-Bp3hNpeP.js.map → FormSwitchField-d8G-YCSX.js.map} +1 -1
  31. package/dist/admin/assets/{FormTextareaField-BSKMqHcW.js → FormTextareaField-BSKNeTPW.js} +2 -2
  32. package/dist/admin/assets/{FormTextareaField-BSKMqHcW.js.map → FormTextareaField-BSKNeTPW.js.map} +1 -1
  33. package/dist/admin/assets/{HintedLabel-BrLH4NQW.js → HintedLabel-CiTDE112.js} +2 -2
  34. package/dist/admin/assets/{HintedLabel-BrLH4NQW.js.map → HintedLabel-CiTDE112.js.map} +1 -1
  35. package/dist/admin/assets/{InfoHint-Dyzyf59c.js → InfoHint-B3XcXtiN.js} +2 -2
  36. package/dist/admin/assets/{InfoHint-Dyzyf59c.js.map → InfoHint-B3XcXtiN.js.map} +1 -1
  37. package/dist/admin/assets/InlineConfirm-BfsNH5S_.js +2 -0
  38. package/dist/admin/assets/InlineConfirm-BfsNH5S_.js.map +1 -0
  39. package/dist/admin/assets/InsertMenuItem-BGwDW_Lu.js +2 -0
  40. package/dist/admin/assets/InsertMenuItem-BGwDW_Lu.js.map +1 -0
  41. package/dist/admin/assets/{LinkTabs-ByB2eCIr.js → LinkTabs-8SmS1vCd.js} +2 -2
  42. package/dist/admin/assets/{LinkTabs-ByB2eCIr.js.map → LinkTabs-8SmS1vCd.js.map} +1 -1
  43. package/dist/admin/assets/{Match-Bixf1ygj.js → Match-Dc8bXsKo.js} +2 -2
  44. package/dist/admin/assets/{Match-Bixf1ygj.js.map → Match-Dc8bXsKo.js.map} +1 -1
  45. package/dist/admin/assets/NoAccess-CKEKPmqD.js +2 -0
  46. package/dist/admin/assets/NoAccess-CKEKPmqD.js.map +1 -0
  47. package/dist/admin/assets/Panel-Bcl09TtM.js +2 -0
  48. package/dist/admin/assets/Panel-Bcl09TtM.js.map +1 -0
  49. package/dist/admin/assets/{QueryView--_vvV7dC.js → QueryView-KFtwko9F.js} +2 -2
  50. package/dist/admin/assets/{QueryView--_vvV7dC.js.map → QueryView-KFtwko9F.js.map} +1 -1
  51. package/dist/admin/assets/{RadioTile-BCp6auUz.js → RadioTile-CzfxWgHx.js} +2 -2
  52. package/dist/admin/assets/{RadioTile-BCp6auUz.js.map → RadioTile-CzfxWgHx.js.map} +1 -1
  53. package/dist/admin/assets/{RichTextField-fWNjndUc.js → RichTextField-BsBoOAP-.js} +5 -5
  54. package/dist/admin/assets/{RichTextField-fWNjndUc.js.map → RichTextField-BsBoOAP-.js.map} +1 -1
  55. package/dist/admin/assets/{RowTitle-B4CE8tt7.js → RowTitle-Cn5mAU58.js} +2 -2
  56. package/dist/admin/assets/{RowTitle-B4CE8tt7.js.map → RowTitle-Cn5mAU58.js.map} +1 -1
  57. package/dist/admin/assets/SecretReveal-BCOJAisI.js +2 -0
  58. package/dist/admin/assets/SecretReveal-BCOJAisI.js.map +1 -0
  59. package/dist/admin/assets/{SharedGlyph-71FTypoi.js → SharedGlyph-CA8tb7UH.js} +2 -2
  60. package/dist/admin/assets/{SharedGlyph-71FTypoi.js.map → SharedGlyph-CA8tb7UH.js.map} +1 -1
  61. package/dist/admin/assets/StepList-sriwGP1e.js +2 -0
  62. package/dist/admin/assets/StepList-sriwGP1e.js.map +1 -0
  63. package/dist/admin/assets/Structure-B2HZ9UZu.js +2 -0
  64. package/dist/admin/assets/{Structure-Dk87778W.js.map → Structure-B2HZ9UZu.js.map} +1 -1
  65. package/dist/admin/assets/{SubNavLink-CPJFIt1j.js → SubNavLink-CiCaVV8U.js} +2 -2
  66. package/dist/admin/assets/{SubNavLink-CPJFIt1j.js.map → SubNavLink-CiCaVV8U.js.map} +1 -1
  67. package/dist/admin/assets/{SuggestAltButton-CxS8IR6m.js → SuggestAltButton-CqDLAuoa.js} +2 -2
  68. package/dist/admin/assets/{SuggestAltButton-CxS8IR6m.js.map → SuggestAltButton-CqDLAuoa.js.map} +1 -1
  69. package/dist/admin/assets/{TextLink-DnrMaF2F.js → TextLink-HRn66VL1.js} +2 -2
  70. package/dist/admin/assets/{TextLink-DnrMaF2F.js.map → TextLink-HRn66VL1.js.map} +1 -1
  71. package/dist/admin/assets/Thumbnail-mFfESZiW.js +2 -0
  72. package/dist/admin/assets/Thumbnail-mFfESZiW.js.map +1 -0
  73. package/dist/admin/assets/UnsavedChangesGuard-C8cDQGEA.js +2 -0
  74. package/dist/admin/assets/UnsavedChangesGuard-C8cDQGEA.js.map +1 -0
  75. package/dist/admin/assets/{UserAvatar-D7IbSpsP.js → UserAvatar-BItYDTyH.js} +2 -2
  76. package/dist/admin/assets/{UserAvatar-D7IbSpsP.js.map → UserAvatar-BItYDTyH.js.map} +1 -1
  77. package/dist/admin/assets/auth-CQO4MBUj.js +2 -0
  78. package/dist/admin/assets/auth-CQO4MBUj.js.map +1 -0
  79. package/dist/admin/assets/badge-DNQwGXBl.js +2 -0
  80. package/dist/admin/assets/{badge-vLiQczOd.js.map → badge-DNQwGXBl.js.map} +1 -1
  81. package/dist/admin/assets/{boxes-D6Y4Cenx.js → boxes-CAygw8zF.js} +2 -2
  82. package/dist/admin/assets/{boxes-D6Y4Cenx.js.map → boxes-CAygw8zF.js.map} +1 -1
  83. package/dist/admin/assets/{calendar-clock-DFUgXWXg.js → calendar-clock-BZGtAvWR.js} +2 -2
  84. package/dist/admin/assets/{calendar-clock-DFUgXWXg.js.map → calendar-clock-BZGtAvWR.js.map} +1 -1
  85. package/dist/admin/assets/changeSets-EMTUJT0M.js +2 -0
  86. package/dist/admin/assets/changeSets-EMTUJT0M.js.map +1 -0
  87. package/dist/admin/assets/chevron-left-DGU3HGYG.js +2 -0
  88. package/dist/admin/assets/{chevron-left-CZXrLV99.js.map → chevron-left-DGU3HGYG.js.map} +1 -1
  89. package/dist/admin/assets/{circle-check-De27poaB.js → circle-check-C37MSJqX.js} +2 -2
  90. package/dist/admin/assets/{circle-check-De27poaB.js.map → circle-check-C37MSJqX.js.map} +1 -1
  91. package/dist/admin/assets/{clock-BGAXsuo4.js → clock-2arjsgZ4.js} +2 -2
  92. package/dist/admin/assets/{clock-BGAXsuo4.js.map → clock-2arjsgZ4.js.map} +1 -1
  93. package/dist/admin/assets/{constants-CKGh8uwT.js → constants-miV4q1ur.js} +2 -2
  94. package/dist/admin/assets/{constants-CKGh8uwT.js.map → constants-miV4q1ur.js.map} +1 -1
  95. package/dist/admin/assets/content-CgZS_S7P.js +3 -0
  96. package/dist/admin/assets/content-CgZS_S7P.js.map +1 -0
  97. package/dist/admin/assets/contentCounts-DP7YYeZZ.js +2 -0
  98. package/dist/admin/assets/{contentCounts-DknqJ4kh.js.map → contentCounts-DP7YYeZZ.js.map} +1 -1
  99. package/dist/admin/assets/{contentTypes-DzQ_0v36.js → contentTypes-CQsHL657.js} +2 -2
  100. package/dist/admin/assets/{contentTypes-DzQ_0v36.js.map → contentTypes-CQsHL657.js.map} +1 -1
  101. package/dist/admin/assets/context-IKYdzQJ-.js +2 -0
  102. package/dist/admin/assets/{context-fImO9k99.js.map → context-IKYdzQJ-.js.map} +1 -1
  103. package/dist/admin/assets/{copy-B5owk67M.js → copy-CsSRHgKZ.js} +2 -2
  104. package/dist/admin/assets/{copy-B5owk67M.js.map → copy-CsSRHgKZ.js.map} +1 -1
  105. package/dist/admin/assets/createLucideIcon-CLmh7Go-.js +2 -0
  106. package/dist/admin/assets/createLucideIcon-CLmh7Go-.js.map +1 -0
  107. package/dist/admin/assets/develop-9ZeAjSIw.js +11 -0
  108. package/dist/admin/assets/develop-9ZeAjSIw.js.map +1 -0
  109. package/dist/admin/assets/{dropdown-menu-CVAnm22s.js → dropdown-menu-0dyAtBEd.js} +2 -2
  110. package/dist/admin/assets/{dropdown-menu-CVAnm22s.js.map → dropdown-menu-0dyAtBEd.js.map} +1 -1
  111. package/dist/admin/assets/{ellipsis-BHtU4ov6.js → ellipsis-F91991on.js} +2 -2
  112. package/dist/admin/assets/{ellipsis-BHtU4ov6.js.map → ellipsis-F91991on.js.map} +1 -1
  113. package/dist/admin/assets/entryLink-CVB-TdIn.js +2 -0
  114. package/dist/admin/assets/entryLink-CVB-TdIn.js.map +1 -0
  115. package/dist/admin/assets/es2015-BJge4oQL.js +42 -0
  116. package/dist/admin/assets/es2015-BJge4oQL.js.map +1 -0
  117. package/dist/admin/assets/{external-link-nZp2VpKw.js → external-link-CdG6kHfA.js} +2 -2
  118. package/dist/admin/assets/{external-link-nZp2VpKw.js.map → external-link-CdG6kHfA.js.map} +1 -1
  119. package/dist/admin/assets/{field-Bg-JRgsB.js → field-C6NmRYUN.js} +2 -2
  120. package/dist/admin/assets/{field-Bg-JRgsB.js.map → field-C6NmRYUN.js.map} +1 -1
  121. package/dist/admin/assets/{file-stack-8rRouTJj.js → file-stack-28ZtO1xW.js} +2 -2
  122. package/dist/admin/assets/{file-stack-8rRouTJj.js.map → file-stack-28ZtO1xW.js.map} +1 -1
  123. package/dist/admin/assets/{fileRoute-DQCI1nMN.js → fileRoute-Bm90K4UY.js} +2 -2
  124. package/dist/admin/assets/{fileRoute-DQCI1nMN.js.map → fileRoute-Bm90K4UY.js.map} +1 -1
  125. package/dist/admin/assets/{folder-plus-B3L3b389.js → folder-plus-DIk0pWkP.js} +2 -2
  126. package/dist/admin/assets/{folder-plus-B3L3b389.js.map → folder-plus-DIk0pWkP.js.map} +1 -1
  127. package/dist/admin/assets/followPlural-DEr2kxEc.js +2 -0
  128. package/dist/admin/assets/followPlural-DEr2kxEc.js.map +1 -0
  129. package/dist/admin/assets/{globe-DKkjr9MZ.js → globe-DFr3Gd2w.js} +2 -2
  130. package/dist/admin/assets/{globe-DKkjr9MZ.js.map → globe-DFr3Gd2w.js.map} +1 -1
  131. package/dist/admin/assets/{image-B6aL7hP8.js → image-DT79QFa_.js} +2 -2
  132. package/dist/admin/assets/{image-B6aL7hP8.js.map → image-DT79QFa_.js.map} +1 -1
  133. package/dist/admin/assets/{image-off-TVxEyb74.js → image-off-DFs5upyX.js} +2 -2
  134. package/dist/admin/assets/{image-off-TVxEyb74.js.map → image-off-DFs5upyX.js.map} +1 -1
  135. package/dist/admin/assets/inbox-B8XZ8L6s.js +2 -0
  136. package/dist/admin/assets/inbox-B8XZ8L6s.js.map +1 -0
  137. package/dist/admin/assets/{inbox-BKqu1EfP.js → inbox-CySnQydm.js} +2 -2
  138. package/dist/admin/assets/{inbox-BKqu1EfP.js.map → inbox-CySnQydm.js.map} +1 -1
  139. package/dist/admin/assets/index-DoJsnLI1.js +4 -0
  140. package/dist/admin/assets/index-DoJsnLI1.js.map +1 -0
  141. package/dist/admin/assets/index-lxe7WimO.css +2 -0
  142. package/dist/admin/assets/{key-round-Dmdr1vP5.js → key-round-D36CePnN.js} +2 -2
  143. package/dist/admin/assets/{key-round-Dmdr1vP5.js.map → key-round-D36CePnN.js.map} +1 -1
  144. package/dist/admin/assets/{labels-BrwwGWnv.js → labels-B2HIVxXg.js} +2 -2
  145. package/dist/admin/assets/{labels-BrwwGWnv.js.map → labels-B2HIVxXg.js.map} +1 -1
  146. package/dist/admin/assets/{languages-BbfFIygP.js → languages-CzbTaQv9.js} +2 -2
  147. package/dist/admin/assets/{languages-BbfFIygP.js.map → languages-CzbTaQv9.js.map} +1 -1
  148. package/dist/admin/assets/{layers-B0jT4rc4.js → layers-BmcodiaH.js} +2 -2
  149. package/dist/admin/assets/{layers-B0jT4rc4.js.map → layers-BmcodiaH.js.map} +1 -1
  150. package/dist/admin/assets/{link-2-off-DC06jLDj.js → link-2-off-CoJNwrxm.js} +2 -2
  151. package/dist/admin/assets/{link-2-off-DC06jLDj.js.map → link-2-off-CoJNwrxm.js.map} +1 -1
  152. package/dist/admin/assets/{link-B3O0VUVT.js → link-Pyr2Y35S.js} +2 -2
  153. package/dist/admin/assets/{link-B3O0VUVT.js.map → link-Pyr2Y35S.js.map} +1 -1
  154. package/dist/admin/assets/locales-Bg3htKo8.js +2 -0
  155. package/dist/admin/assets/{locales-e7B5t6id.js.map → locales-Bg3htKo8.js.map} +1 -1
  156. package/dist/admin/assets/media-BCnVhaDH.js +2 -0
  157. package/dist/admin/assets/{media-VCJUbYzJ.js.map → media-BCnVhaDH.js.map} +1 -1
  158. package/dist/admin/assets/media-CtbfNgc-.js +2 -0
  159. package/dist/admin/assets/media-CtbfNgc-.js.map +1 -0
  160. package/dist/admin/assets/network--5X46kWN.js +2 -0
  161. package/dist/admin/assets/network--5X46kWN.js.map +1 -0
  162. package/dist/admin/assets/{plus-WfYKHW7G.js → plus-BoDtdLCo.js} +2 -2
  163. package/dist/admin/assets/{plus-WfYKHW7G.js.map → plus-BoDtdLCo.js.map} +1 -1
  164. package/dist/admin/assets/publishing-DdmWXRaM.js +2 -0
  165. package/dist/admin/assets/{publishing-CpSDO3M7.js.map → publishing-DdmWXRaM.js.map} +1 -1
  166. package/dist/admin/assets/{radio-group-DQ3sC1ol.js → radio-group-BoN9R_3K.js} +2 -2
  167. package/dist/admin/assets/{radio-group-DQ3sC1ol.js.map → radio-group-BoN9R_3K.js.map} +1 -1
  168. package/dist/admin/assets/{rotate-ccw-Cvc_uA58.js → rotate-ccw-DL6TzcZh.js} +2 -2
  169. package/dist/admin/assets/{rotate-ccw-Cvc_uA58.js.map → rotate-ccw-DL6TzcZh.js.map} +1 -1
  170. package/dist/admin/assets/schedules-BmB9Y73z.js +2 -0
  171. package/dist/admin/assets/{schedules-CBGpjEg7.js.map → schedules-BmB9Y73z.js.map} +1 -1
  172. package/dist/admin/assets/schema-D-qo7XSF.js +2 -0
  173. package/dist/admin/assets/schema-D-qo7XSF.js.map +1 -0
  174. package/dist/admin/assets/{scroll-text-gKYBbibb.js → scroll-text-PqeZm472.js} +2 -2
  175. package/dist/admin/assets/{scroll-text-gKYBbibb.js.map → scroll-text-PqeZm472.js.map} +1 -1
  176. package/dist/admin/assets/{search-CW3iBC4k.js → search-BdwIwOzC.js} +2 -2
  177. package/dist/admin/assets/{search-CW3iBC4k.js.map → search-BdwIwOzC.js.map} +1 -1
  178. package/dist/admin/assets/searchSchemas-DNjfDxmj.js +2 -0
  179. package/dist/admin/assets/{searchSchemas-D4S2ceA0.js.map → searchSchemas-DNjfDxmj.js.map} +1 -1
  180. package/dist/admin/assets/{sections-CN5fIoAr.js → sections-BTS683ur.js} +2 -2
  181. package/dist/admin/assets/{sections-CN5fIoAr.js.map → sections-BTS683ur.js.map} +1 -1
  182. package/dist/admin/assets/sections-BfxPwK0u.js +2 -0
  183. package/dist/admin/assets/{sections-Cl1LrzqH.js.map → sections-BfxPwK0u.js.map} +1 -1
  184. package/dist/admin/assets/{select-DjCAH45V.js → select-Bp8kO5Ko.js} +2 -2
  185. package/dist/admin/assets/{select-DjCAH45V.js.map → select-Bp8kO5Ko.js.map} +1 -1
  186. package/dist/admin/assets/{send-DRA-Pe46.js → send-XPWo3m4u.js} +2 -2
  187. package/dist/admin/assets/{send-DRA-Pe46.js.map → send-XPWo3m4u.js.map} +1 -1
  188. package/dist/admin/assets/seo-CceGYTIX.js +2 -0
  189. package/dist/admin/assets/{seo-DJ4k3LtY.js.map → seo-CceGYTIX.js.map} +1 -1
  190. package/dist/admin/assets/settings-TEbLvC-v.js +2 -0
  191. package/dist/admin/assets/settings-TEbLvC-v.js.map +1 -0
  192. package/dist/admin/assets/settle-CFU6YpQ0.js +2 -0
  193. package/dist/admin/assets/settle-CFU6YpQ0.js.map +1 -0
  194. package/dist/admin/assets/shapes-WrYO9Spf.js +6 -0
  195. package/dist/admin/assets/shapes-WrYO9Spf.js.map +1 -0
  196. package/dist/admin/assets/{skeleton-D4eOLKLY.js → skeleton-vXOCdnJv.js} +2 -2
  197. package/dist/admin/assets/{skeleton-D4eOLKLY.js.map → skeleton-vXOCdnJv.js.map} +1 -1
  198. package/dist/admin/assets/slugify-rYFum3Sc.js +2 -0
  199. package/dist/admin/assets/slugify-rYFum3Sc.js.map +1 -0
  200. package/dist/admin/assets/snapshots-DUI2t-qF.js +2 -0
  201. package/dist/admin/assets/snapshots-DUI2t-qF.js.map +1 -0
  202. package/dist/admin/assets/{sparkles-DCRAqbqD.js → sparkles-CvT-jxrW.js} +2 -2
  203. package/dist/admin/assets/{sparkles-DCRAqbqD.js.map → sparkles-CvT-jxrW.js.map} +1 -1
  204. package/dist/admin/assets/src-ndgTSYLX.js +7 -0
  205. package/dist/admin/assets/src-ndgTSYLX.js.map +1 -0
  206. package/dist/admin/assets/{stableId-iRkUbVIP.js → stableId-BrtQedPy.js} +2 -2
  207. package/dist/admin/assets/{stableId-iRkUbVIP.js.map → stableId-BrtQedPy.js.map} +1 -1
  208. package/dist/admin/assets/store-CdIFG90N.js +2 -0
  209. package/dist/admin/assets/{store-DknnssoQ.js.map → store-CdIFG90N.js.map} +1 -1
  210. package/dist/admin/assets/{switch-B2R13aVU.js → switch-B1xClhNG.js} +2 -2
  211. package/dist/admin/assets/{switch-B2R13aVU.js.map → switch-B1xClhNG.js.map} +1 -1
  212. package/dist/admin/assets/theme-65PB8uAu.js +2 -0
  213. package/dist/admin/assets/{theme-X-qeg74W.js.map → theme-65PB8uAu.js.map} +1 -1
  214. package/dist/admin/assets/titles-CQiqqDw-.js +2 -0
  215. package/dist/admin/assets/titles-CQiqqDw-.js.map +1 -0
  216. package/dist/admin/assets/tokens-ixHjAkDK.js +2 -0
  217. package/dist/admin/assets/{tokens-BlIDIMY9.js.map → tokens-ixHjAkDK.js.map} +1 -1
  218. package/dist/admin/assets/{tooltip-u2epXfJF.js → tooltip-CS_8cJu2.js} +2 -2
  219. package/dist/admin/assets/{tooltip-u2epXfJF.js.map → tooltip-CS_8cJu2.js.map} +1 -1
  220. package/dist/admin/assets/{undo-2-Zd1OT6qk.js → undo-2-BiTANHFz.js} +2 -2
  221. package/dist/admin/assets/{undo-2-Zd1OT6qk.js.map → undo-2-BiTANHFz.js.map} +1 -1
  222. package/dist/admin/assets/useContentSchema-DtYfhsd2.js +2 -0
  223. package/dist/admin/assets/{useContentSchema-DaQHlL19.js.map → useContentSchema-DtYfhsd2.js.map} +1 -1
  224. package/dist/admin/assets/useCursorPager-0zHjlm-7.js +2 -0
  225. package/dist/admin/assets/{useCursorPager-Dc-9B67j.js.map → useCursorPager-0zHjlm-7.js.map} +1 -1
  226. package/dist/admin/assets/useDiscardGuard-CMMJgkI2.js +2 -0
  227. package/dist/admin/assets/useDiscardGuard-CMMJgkI2.js.map +1 -0
  228. package/dist/admin/assets/useMediaPickerDialog-xvQ8cofO.js +2 -0
  229. package/dist/admin/assets/{useMediaPickerDialog-C23eOHQR.js.map → useMediaPickerDialog-xvQ8cofO.js.map} +1 -1
  230. package/dist/admin/assets/useMediaUploader-BVNTeSAU.js +2 -0
  231. package/dist/admin/assets/{useMediaUploader-CTViR0LX.js.map → useMediaUploader-BVNTeSAU.js.map} +1 -1
  232. package/dist/admin/assets/useNetworkPermission-Cts98h9d.js +2 -0
  233. package/dist/admin/assets/{useNetworkPermission-CegwqQXR.js.map → useNetworkPermission-Cts98h9d.js.map} +1 -1
  234. package/dist/admin/assets/usePaletteItems-DtReWmkd.js +2 -0
  235. package/dist/admin/assets/{usePaletteItems-B3y2t7Ly.js.map → usePaletteItems-DtReWmkd.js.map} +1 -1
  236. package/dist/admin/assets/usePlaces-DC47wVeU.js +2 -0
  237. package/dist/admin/assets/{usePlaces-CAXr-IO9.js.map → usePlaces-DC47wVeU.js.map} +1 -1
  238. package/dist/admin/assets/useQueries-CirW3Mvp.js +2 -0
  239. package/dist/admin/assets/{useQueries-CX6eFr24.js.map → useQueries-CirW3Mvp.js.map} +1 -1
  240. package/dist/admin/assets/{useResolvedScheme-Cg8TdO85.js → useResolvedScheme-CScQpr-P.js} +2 -2
  241. package/dist/admin/assets/{useResolvedScheme-Cg8TdO85.js.map → useResolvedScheme-CScQpr-P.js.map} +1 -1
  242. package/dist/admin/assets/{useSchemaScopeAccess-DyfiZnzs.js → useSchemaScopeAccess-ByrxIdKM.js} +2 -2
  243. package/dist/admin/assets/{useSchemaScopeAccess-DyfiZnzs.js.map → useSchemaScopeAccess-ByrxIdKM.js.map} +1 -1
  244. package/dist/admin/assets/users-2iJYwlJb.js +2 -0
  245. package/dist/admin/assets/users-2iJYwlJb.js.map +1 -0
  246. package/dist/admin/assets/{users-ohHZnBJW.js → users-DM7CXUBJ.js} +2 -2
  247. package/dist/admin/assets/{users-ohHZnBJW.js.map → users-DM7CXUBJ.js.map} +1 -1
  248. package/dist/admin/assets/{zod-D5i60ErJ.js → zod-hUh5nXnX.js} +2 -2
  249. package/dist/admin/assets/{zod-D5i60ErJ.js.map → zod-hUh5nXnX.js.map} +1 -1
  250. package/dist/admin/index.html +59 -60
  251. package/dist/cli.js +10 -5696
  252. package/dist/cli.js.map +1 -1
  253. package/dist/cliMain-D08HeAd_.js +5771 -0
  254. package/dist/cliMain-D08HeAd_.js.map +1 -0
  255. package/dist/config.d.ts +1 -1
  256. package/dist/config.js +1 -38
  257. package/dist/contentDisposition-DOL2Xt0l.js +90 -0
  258. package/dist/contentDisposition-DOL2Xt0l.js.map +1 -0
  259. package/dist/index.d.ts +23 -6
  260. package/dist/index.js +2 -2
  261. package/dist/public-B57h4F7Y.js +39 -0
  262. package/dist/public-B57h4F7Y.js.map +1 -0
  263. package/dist/{public-BO_wneBL.d.ts → public-COKbHR-N.d.ts} +47 -3
  264. package/dist/{s3Adapter-CtPzkzf0.js → s3Adapter-U01iEAcK.js} +2 -2
  265. package/dist/{s3Adapter-CtPzkzf0.js.map → s3Adapter-U01iEAcK.js.map} +1 -1
  266. package/dist/{worker-DRCCGGjl.js → worker-jspgh10V.js} +5735 -3982
  267. package/dist/worker-jspgh10V.js.map +1 -0
  268. package/package.json +5 -5
  269. package/dist/admin/assets/AssistError-CMXQWiQo.js +0 -2
  270. package/dist/admin/assets/Body-BYc1IVsQ.js +0 -2
  271. package/dist/admin/assets/Builder-CwHpRhZN.js +0 -2
  272. package/dist/admin/assets/Builder-CwHpRhZN.js.map +0 -1
  273. package/dist/admin/assets/ConfirmDialog-Rd6WDt6q.js +0 -2
  274. package/dist/admin/assets/ConfirmDialog-Rd6WDt6q.js.map +0 -1
  275. package/dist/admin/assets/Form-CiZUsLPp.js +0 -2
  276. package/dist/admin/assets/Form-CiZUsLPp.js.map +0 -1
  277. package/dist/admin/assets/FormCheckboxGroup-Bz8KERs1.js.map +0 -1
  278. package/dist/admin/assets/InsertMenuItem-BvRDuXtd.js +0 -2
  279. package/dist/admin/assets/InsertMenuItem-BvRDuXtd.js.map +0 -1
  280. package/dist/admin/assets/Panel-B1TkcP8V.js +0 -2
  281. package/dist/admin/assets/Panel-B1TkcP8V.js.map +0 -1
  282. package/dist/admin/assets/SecretReveal-BhSqdWqh.js +0 -2
  283. package/dist/admin/assets/SecretReveal-BhSqdWqh.js.map +0 -1
  284. package/dist/admin/assets/StepList-CZJmwy9e.js +0 -2
  285. package/dist/admin/assets/StepList-CZJmwy9e.js.map +0 -1
  286. package/dist/admin/assets/Structure-Dk87778W.js +0 -2
  287. package/dist/admin/assets/Thumbnail-BwbCNpgQ.js +0 -2
  288. package/dist/admin/assets/Thumbnail-BwbCNpgQ.js.map +0 -1
  289. package/dist/admin/assets/UnsavedChangesGuard-C6nD55Fn.js +0 -2
  290. package/dist/admin/assets/UnsavedChangesGuard-C6nD55Fn.js.map +0 -1
  291. package/dist/admin/assets/auth-C4fHG9Iu.js +0 -2
  292. package/dist/admin/assets/auth-C4fHG9Iu.js.map +0 -1
  293. package/dist/admin/assets/badge-vLiQczOd.js +0 -2
  294. package/dist/admin/assets/changeSets-D5VevASj.js +0 -2
  295. package/dist/admin/assets/changeSets-D5VevASj.js.map +0 -1
  296. package/dist/admin/assets/chevron-left-CZXrLV99.js +0 -2
  297. package/dist/admin/assets/content-Cbavyq0x.js +0 -3
  298. package/dist/admin/assets/content-Cbavyq0x.js.map +0 -1
  299. package/dist/admin/assets/contentCounts-DknqJ4kh.js +0 -2
  300. package/dist/admin/assets/context-fImO9k99.js +0 -2
  301. package/dist/admin/assets/createLucideIcon-CqygG5K6.js +0 -2
  302. package/dist/admin/assets/createLucideIcon-CqygG5K6.js.map +0 -1
  303. package/dist/admin/assets/develop-BDqMOEql.js +0 -11
  304. package/dist/admin/assets/develop-BDqMOEql.js.map +0 -1
  305. package/dist/admin/assets/es2015-BKfbx3rz.js +0 -42
  306. package/dist/admin/assets/es2015-BKfbx3rz.js.map +0 -1
  307. package/dist/admin/assets/followPlural-D0bENI5E.js +0 -2
  308. package/dist/admin/assets/followPlural-D0bENI5E.js.map +0 -1
  309. package/dist/admin/assets/inbox-Dfy4YBZ2.js +0 -2
  310. package/dist/admin/assets/inbox-Dfy4YBZ2.js.map +0 -1
  311. package/dist/admin/assets/index-BEM45u2w.css +0 -2
  312. package/dist/admin/assets/index-M4TUI1dl.js +0 -4
  313. package/dist/admin/assets/index-M4TUI1dl.js.map +0 -1
  314. package/dist/admin/assets/loader-circle-C-9trZPI.js +0 -2
  315. package/dist/admin/assets/loader-circle-C-9trZPI.js.map +0 -1
  316. package/dist/admin/assets/locales-e7B5t6id.js +0 -2
  317. package/dist/admin/assets/media-DBdx-UmR.js +0 -2
  318. package/dist/admin/assets/media-DBdx-UmR.js.map +0 -1
  319. package/dist/admin/assets/media-VCJUbYzJ.js +0 -2
  320. package/dist/admin/assets/network-BpbMYp6D.js +0 -2
  321. package/dist/admin/assets/network-BpbMYp6D.js.map +0 -1
  322. package/dist/admin/assets/pencil-BVSFlU14.js +0 -2
  323. package/dist/admin/assets/pencil-BVSFlU14.js.map +0 -1
  324. package/dist/admin/assets/publishing-CpSDO3M7.js +0 -2
  325. package/dist/admin/assets/schedules-CBGpjEg7.js +0 -2
  326. package/dist/admin/assets/schema-D9BgCVzZ.js +0 -2
  327. package/dist/admin/assets/schema-D9BgCVzZ.js.map +0 -1
  328. package/dist/admin/assets/searchSchemas-D4S2ceA0.js +0 -2
  329. package/dist/admin/assets/sections-Cl1LrzqH.js +0 -2
  330. package/dist/admin/assets/seo-DJ4k3LtY.js +0 -2
  331. package/dist/admin/assets/settings-DRZ33PTg.js +0 -2
  332. package/dist/admin/assets/settings-DRZ33PTg.js.map +0 -1
  333. package/dist/admin/assets/settle-LRKtTN_e.js +0 -2
  334. package/dist/admin/assets/settle-LRKtTN_e.js.map +0 -1
  335. package/dist/admin/assets/shapes-BJe3IMuj.js +0 -6
  336. package/dist/admin/assets/shapes-BJe3IMuj.js.map +0 -1
  337. package/dist/admin/assets/snapshots-CT-zs6Up.js +0 -2
  338. package/dist/admin/assets/snapshots-CT-zs6Up.js.map +0 -1
  339. package/dist/admin/assets/src-DUpL-qwG.js +0 -7
  340. package/dist/admin/assets/src-DUpL-qwG.js.map +0 -1
  341. package/dist/admin/assets/store-DknnssoQ.js +0 -2
  342. package/dist/admin/assets/theme-X-qeg74W.js +0 -2
  343. package/dist/admin/assets/titles-CLh5ftA2.js +0 -2
  344. package/dist/admin/assets/titles-CLh5ftA2.js.map +0 -1
  345. package/dist/admin/assets/tokens-BlIDIMY9.js +0 -2
  346. package/dist/admin/assets/useAuditLabels-DWBpLOTB.js +0 -2
  347. package/dist/admin/assets/useAuditLabels-DWBpLOTB.js.map +0 -1
  348. package/dist/admin/assets/useContentSchema-DaQHlL19.js +0 -2
  349. package/dist/admin/assets/useCursorPager-Dc-9B67j.js +0 -2
  350. package/dist/admin/assets/useDiscardGuard-BVJGUCiH.js +0 -2
  351. package/dist/admin/assets/useDiscardGuard-BVJGUCiH.js.map +0 -1
  352. package/dist/admin/assets/useMediaPickerDialog-C23eOHQR.js +0 -2
  353. package/dist/admin/assets/useMediaUploader-CTViR0LX.js +0 -2
  354. package/dist/admin/assets/useNetworkPermission-CegwqQXR.js +0 -2
  355. package/dist/admin/assets/usePaletteItems-B3y2t7Ly.js +0 -2
  356. package/dist/admin/assets/usePlaces-CAXr-IO9.js +0 -2
  357. package/dist/admin/assets/useQueries-CX6eFr24.js +0 -2
  358. package/dist/admin/assets/users-CDoJRL24.js +0 -2
  359. package/dist/admin/assets/users-CDoJRL24.js.map +0 -1
  360. package/dist/config.js.map +0 -1
  361. package/dist/worker-DRCCGGjl.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{u as e}from"./loader-circle-C-9trZPI.js";var t=e()(e=>({open:!1,returnFocus:null,setOpen:t=>e(e=>t&&!e.open?{open:t,returnFocus:document.activeElement instanceof HTMLElement?document.activeElement:null}:{open:t}),registrations:new Map,register:(t,n)=>e(e=>({registrations:new Map(e.registrations).set(t,n)})),unregister:t=>e(e=>{let n=new Map(e.registrations);return n.delete(t),{registrations:n}})}));export{t};
2
- //# sourceMappingURL=store-DknnssoQ.js.map
@@ -1,2 +0,0 @@
1
- import{D as e,E as t,u as n}from"./loader-circle-C-9trZPI.js";import{n as r,r as i}from"./src-DUpL-qwG.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-X-qeg74W.js.map
@@ -1,2 +0,0 @@
1
- import{$ as e,A as t,O as n,i as r,j as i,lt as a,o}from"./loader-circle-C-9trZPI.js";import{et as s}from"./auth-C4fHG9Iu.js";import{A as c,j as l}from"./src-DUpL-qwG.js";var u={silent:!0},d=(t,r)=>s({queryKey:n.content.list(t,r),queryFn:()=>o.content.list(t,r),placeholderData:e,meta:u}),f=(e,t,n=!0)=>i({...d(e,t),enabled:n}),p=(e,t,r)=>s({queryKey:n.content.entry(e,t,r),queryFn:()=>o.content.get(e,t,r?{locale:r}:{}),staleTime:1/0,meta:u}),m=(e,t,n,r=!0)=>i({...p(e,t,n),enabled:r}),h=(e,t,r)=>(e.setQueryData(n.content.entry(t,r.id,r.locale),r),e.invalidateQueries({predicate:e=>e.queryKey[0]===`content`&&e.queryKey[1]===t&&(e.queryKey[2]===`list`||e.queryKey[2]===`revisions`)})),g=e=>{let n=a();return t({mutationKey:[`content`,e,`create`],meta:u,mutationFn:t=>r(()=>o.content.create(e,t)),onSuccess:t=>h(n,e,t)})},_=e=>{let n=a();return t({mutationKey:[`content`,e,`save`],meta:u,mutationFn:({id:t,input:n})=>r(()=>o.content.update(e,t,n)),onSuccess:t=>h(n,e,t)})},v=e=>e&&e.length>0?{locales:e}:{},y=e=>{let n=a();return t({mutationKey:[`content`,e,`publish`],meta:u,mutationFn:({id:t,locales:n})=>r(()=>o.content.publish(e,t,v(n))),onSuccess:t=>h(n,e,t)})},b=e=>{let n=a();return t({mutationKey:[`content`,e,`unpublish`],meta:u,mutationFn:({id:t,locales:n})=>r(()=>o.content.unpublish(e,t,v(n))),onSuccess:t=>h(n,e,t)})},x=e=>{let n=a();return t({mutationKey:[`content`,e,`duplicate`],mutationFn:t=>r(()=>o.content.duplicate(e,t)),onSuccess:t=>h(n,e,t)})},S=e=>{let i=a();return t({mutationKey:[`content`,e,`delete`],meta:u,mutationFn:t=>r(()=>o.content.remove(e,t)),onSuccess:()=>i.invalidateQueries({queryKey:n.content.model(e)})})},C=(e,t,r,a)=>i({queryKey:n.content.revisions(e,t,r),queryFn:()=>o.content.revisions(e,t,r?{locale:r}:{}),enabled:a,staleTime:0,meta:u}),w=(e,t,r)=>i({queryKey:n.content.revision(e,t,r??``),queryFn:()=>o.content.revision(e,t,r??``),enabled:r!==void 0,staleTime:1/0,meta:u}),T=e=>{let n=a();return t({mutationKey:[`content`,e,`restore`],meta:u,mutationFn:({id:t,revisionId:n,expectedVersion:i})=>r(()=>o.content.restore(e,t,n,i)),onSuccess:t=>h(n,e,t)})},E=e=>l(e),D=e=>{let t=E(e);return t!==void 0&&c.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-CLh5ftA2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"titles-CLh5ftA2.js","names":["keepPreviousData","useMutation","queryKeys","withCsrf","useQuery","useQueryClient","queryOptions","TEXT_TITLE_FIELD_TYPES","effectiveTitleField","silent","entryListQueryOptions","modelKey","query","adminApi","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 +0,0 @@
1
- import{A as e,O as t,i as n,j as r,lt as i,o as a}from"./loader-circle-C-9trZPI.js";var o=()=>r({queryKey:t.tokens,queryFn:()=>a.tokens.list(),meta:{silent:!0}}),s=()=>{let r=i();return e({mutationKey:[`tokens`,`create`],meta:{silent:!0},mutationFn:e=>n(()=>a.tokens.create(e)),onSuccess:()=>r.invalidateQueries({queryKey:t.tokens})})},c=()=>{let r=i();return e({mutationKey:[`tokens`,`revoke`],mutationFn:e=>n(()=>a.tokens.revoke(e)),onSettled:()=>r.invalidateQueries({queryKey:t.tokens})})};export{s as n,c as r,o as t};
2
- //# sourceMappingURL=tokens-BlIDIMY9.js.map
@@ -1,2 +0,0 @@
1
- import{$ as e,O as t,j as n,o as r}from"./loader-circle-C-9trZPI.js";import{n as i,t as a}from"./createLucideIcon-CqygG5K6.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=a(o),c=i=>n({queryKey:t.audit.list(i),queryFn:()=>r.audit.list(i),placeholderData:e,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}=i();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-DWBpLOTB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAuditLabels-DWBpLOTB.js","names":["keepPreviousData","queryKeys","useQuery","adminApi","useTranslation","createLucideIcon","__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 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{Q as n}from"./src-DUpL-qwG.js";import{r}from"./schema-D9BgCVzZ.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-DaQHlL19.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{$ as n,A as r,O as i,i as a,j as o,lt as s,o as c}from"./loader-circle-C-9trZPI.js";import{t as l}from"./createLucideIcon-CqygG5K6.js";import{a as u,n as d,t as f}from"./publishing-B7zv1e7j.js";var p={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};p.node;var m=l(p),h=e(t(),1),g=(e,t,n,r)=>{(0,h.useEffect)(()=>{e&&(t(n),r())},[e,t,n,r])},_={silent:!0},v=e=>e?u:!1,y=()=>o({queryKey:i.publishing.deployments.connections,queryFn:()=>c.deployments.connections.list(),refetchInterval:e=>v(e.state.data?.some(e=>e.latestRun?d.has(e.latestRun.status):!1)??!1),meta:_}),b=e=>o({queryKey:i.publishing.deployments.connection(e),queryFn:()=>c.deployments.connections.get(e),refetchInterval:e=>v(e.state.data?.latestRun?d.has(e.state.data.latestRun.status):!1),meta:_}),x=e=>o({queryKey:i.publishing.deployments.runs(e),queryFn:()=>c.deployments.runs.list(e),placeholderData:n,refetchInterval:e=>v(e.state.data?.items.some(e=>d.has(e.status))??!1),meta:_}),S=e=>o({queryKey:i.publishing.deployments.run(e),queryFn:()=>c.deployments.runs.get(e),refetchInterval:e=>v(e.state.data?d.has(e.state.data.status):!1),meta:_}),C=()=>{let e=s();return()=>e.invalidateQueries({queryKey:i.publishing.deployments.all})},w=()=>{let e=C();return r({mutationKey:[`deployments`,`create`],meta:_,mutationFn:e=>a(()=>c.deployments.connections.create(e)),onSuccess:e})},T=()=>{let e=s(),t=C();return r({mutationKey:[`deployments`,`update`],meta:_,mutationFn:({id:e,input:t})=>a(()=>c.deployments.connections.update(e,t)),onSuccess:({generatedSecrets:n,...r})=>(e.setQueryData(i.publishing.deployments.connection(r.id),r),t())})},E=()=>{let e=s(),t=C();return r({mutationKey:[`deployments`,`delete`],mutationFn:e=>a(()=>c.deployments.connections.remove(e)),onSuccess:(n,r)=>(e.removeQueries({queryKey:i.publishing.deployments.connection(r)}),t())})},D=()=>r({mutationKey:[`deployments`,`test`],mutationFn:e=>a(()=>c.deployments.connections.test(e))}),O=()=>{let e=C();return r({mutationKey:[`deployments`,`trigger`],mutationFn:e=>a(()=>c.deployments.connections.trigger(e)),onSuccess:e})},k=()=>{let e=C();return r({mutationKey:[`deployments`,`retry`],mutationFn:e=>a(()=>c.deployments.runs.retry(e)),onSuccess:e})},A={publish:`publishing.actions.publish`,unpublish:`publishing.actions.unpublish`},j={generic_webhook:`publishing.deployments.providers.generic_webhook`,cloudflare_pages:`publishing.deployments.providers.cloudflare_pages`,vercel:`publishing.deployments.providers.vercel`,netlify:`publishing.deployments.providers.netlify`,github:`publishing.deployments.providers.github`},M={publish:`publishing.deployments.triggers.publish`,change_set:`publishing.deployments.triggers.changeSet`,schema:`publishing.deployments.triggers.schema`,manual:`publishing.deployments.triggers.manual`},N={publish:`publishing.deployments.runTriggers.publish`,change_set:`publishing.deployments.runTriggers.changeSet`,schema:`publishing.deployments.runTriggers.schema`,manual:`publishing.deployments.runTriggers.manual`,retry:`publishing.deployments.runTriggers.retry`},P={shapio:`publishing.deployments.sources.shapio`,callback:`publishing.deployments.sources.callback`,provider:`publishing.deployments.sources.provider`},F={silent:!0},I=()=>o({queryKey:i.publishing.webhooks.list,queryFn:()=>c.webhooks.list(),meta:F}),L=()=>o({queryKey:i.publishing.webhooks.events,queryFn:()=>c.webhooks.events(),staleTime:1/0,meta:F}),R=e=>o({queryKey:i.publishing.webhooks.webhook(e),queryFn:()=>c.webhooks.get(e),meta:F}),z=(e,t)=>o({queryKey:i.publishing.webhooks.deliveries(e,t),queryFn:()=>c.webhooks.deliveries(e,{cursor:t,limit:25}),placeholderData:n,refetchInterval:e=>e.state.data?.items.some(e=>f.has(e.status))?u:!1,meta:F}),B=()=>{let e=s();return()=>e.invalidateQueries({queryKey:i.publishing.webhooks.all})},V=()=>{let e=B();return r({mutationKey:[`webhooks`,`create`],meta:F,mutationFn:e=>a(()=>c.webhooks.create(e)),onSuccess:e})},H=()=>{let e=s(),t=B();return r({mutationKey:[`webhooks`,`update`],meta:F,mutationFn:({id:e,input:t})=>a(()=>c.webhooks.update(e,t)),onSuccess:n=>(e.setQueryData(i.publishing.webhooks.webhook(n.id),n),t())})},U=()=>{let e=B();return r({mutationKey:[`webhooks`,`delete`],mutationFn:e=>a(()=>c.webhooks.remove(e)),onSuccess:e})},W=()=>{let e=B();return r({mutationKey:[`webhooks`,`rotateSecret`],mutationFn:e=>a(()=>c.webhooks.rotateSecret(e)),onSuccess:e})},G=()=>{let e=B();return r({mutationKey:[`webhooks`,`test`],mutationFn:e=>a(()=>c.webhooks.test(e)),onSuccess:e})},K=()=>{let e=B();return r({mutationKey:[`webhooks`,`redeliver`],mutationFn:({id:e,deliveryId:t})=>a(()=>c.webhooks.redeliver(e,t)),onSuccess:e})},q=(e,t)=>{let[n,r]=(0,h.useState)([]);return{pagerProps:i=>({onFirst:e===void 0?void 0:()=>{r([]),t(void 0)},onPrevious:n.length===0?void 0:()=>{t(n.at(-1)),r(e=>e.slice(0,-1))},onNext:i?()=>{r(t=>[...t,e]),t(i)}:void 0}),resetPager:()=>r([])}};export{k as C,g as D,T as E,m as O,x as S,O as T,w as _,W as a,y as b,R as c,I as d,j as f,M as g,P as h,K as i,z as l,N as m,V as n,G as o,A as p,U as r,H as s,q as t,L as u,E as v,D as w,S as x,b as y};
2
- //# sourceMappingURL=useCursorPager-Dc-9B67j.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{n as r}from"./createLucideIcon-CqygG5K6.js";import{t as i}from"./ConfirmDialog-Rd6WDt6q.js";var a=e(t(),1),o=e(n(),1),s=({dirty:e,pending:t=!1,onOpenChange:n})=>{let{t:s}=r(),[c,l]=(0,a.useState)(!1);return{requestOpenChange:r=>{if(!r&&e&&!t){l(!0);return}n(r)},discardPrompt:(0,o.jsx)(i,{open:c,onOpenChange:l,title:s(`unsaved.title`),description:s(`unsaved.description`),cancelLabel:s(`unsaved.stay`),confirmLabel:s(`unsaved.leave`),destructive:!0,onConfirm:()=>{l(!1),n(!1)}})}};export{s as t};
2
- //# sourceMappingURL=useDiscardGuard-BVJGUCiH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDiscardGuard-BVJGUCiH.js","names":["useState","_jsx","__toESM","require_jsx_runtime","useTranslation","ConfirmDialog","import_react","require_react","import_jsx_runtime","useDiscardGuard","confirmingDiscard","setConfirmingDiscard","open","dirty","pending","onOpenChange","t"],"sources":["../../src/hooks/useDiscardGuard.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '@/components/ConfirmDialog';\n\ntype UseDiscardGuardOptions = {\n /** Unsaved edits: closing asks before discarding them. */\n dirty: boolean;\n /** While a save runs, closing is not intercepted (the caller blocks it or lets it finish). */\n pending?: boolean;\n /** The overlay's own open/close handler, called once closing is allowed. */\n onOpenChange: (open: boolean) => void;\n};\n\n/**\n * Dirty-close protection for a sheet (or any overlay with `onOpenChange`). Pass `requestOpenChange` to the\n * overlay instead of `onOpenChange` and render `discardPrompt` beside it: Escape, the overlay, the close\n * button and Cancel then ask \"Discard unsaved changes?\" before closing over unsaved edits.\n */\nexport const useDiscardGuard = ({\n dirty,\n pending = false,\n onOpenChange,\n}: UseDiscardGuardOptions): { requestOpenChange: (open: boolean) => void; discardPrompt: ReactNode } => {\n const { t } = useTranslation();\n const [confirmingDiscard, setConfirmingDiscard] = useState(false);\n const requestOpenChange = (open: boolean) => {\n if (!open && dirty && !pending) {\n setConfirmingDiscard(true);\n return;\n }\n onOpenChange(open);\n };\n const discardPrompt = (\n <ConfirmDialog\n open={confirmingDiscard}\n onOpenChange={setConfirmingDiscard}\n title={t('unsaved.title')}\n description={t('unsaved.description')}\n cancelLabel={t('unsaved.stay')}\n confirmLabel={t('unsaved.leave')}\n destructive\n onConfirm={() => {\n setConfirmingDiscard(false);\n onOpenChange(false);\n }}\n />\n );\n return { requestOpenChange, discardPrompt };\n};\n"],"mappings":"iQAkBaS,GAAmB,CAC9B,QACA,UAAU,GACV,kBACsG,CACtG,GAAM,CAAE,KAAML,EAAe,EACvB,CAACM,EAAmBC,IAAA,EAAwBX,EAAAA,SAAAA,CAAS,EAAK,EAuBhE,MAAO,CAAE,kBAtBkB,GAAkB,CAC3C,GAAI,CAACY,GAAQC,GAAS,CAACC,EAAS,CAC9BH,EAAqB,EAAI,EACzB,MACF,CACAI,EAAaH,CAAI,CACnB,EAgB4B,eAAA,EAd1BX,EAAAA,IAAAA,CAACI,EAAD,CACE,KAAMK,EACN,aAAcC,EACd,MAAOK,EAAE,eAAe,EACxB,YAAaA,EAAE,qBAAqB,EACpC,YAAaA,EAAE,cAAc,EAC7B,aAAcA,EAAE,eAAe,EAC/B,YAAA,GACA,cAAiB,CACfL,EAAqB,EAAK,EAC1BI,EAAa,EAAK,CACpB,CACD,CAEyB,CAAc,CAC5C"}
@@ -1,2 +0,0 @@
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{O as r,lt as i,o as a}from"./loader-circle-C-9trZPI.js";import{c as o,d as s,f as c,l,m as u,p as d,u as f}from"./badge-vLiQczOd.js";import{n as p}from"./createLucideIcon-CqygG5K6.js";import{w as m}from"./InfoHint-Dyzyf59c.js";import{i as h}from"./skeleton-D4eOLKLY.js";import{a as g,i as _,n as v,r as y,t as b}from"./select-DjCAH45V.js";import{c as x}from"./Thumbnail-BwbCNpgQ.js";import{a as S,i as C,n as w,r as T,t as E}from"./useMediaUploader-CTViR0LX.js";import{t as D}from"./languages-BbfFIygP.js";import{t as O}from"./cn-DVhJ55Mo.js";import{r as k}from"./constants-DCtq_UOe.js";var A={draft:`content.status.draft`,published:`content.status.published`,modified:`content.status.modified`},j={draft:`neutral`,published:`success`,modified:`warning`},M=e(n(),1),N=({locales:e,value:t,onChange:n,states:r,size:i,id:a,className:o})=>{let{t:s}=p(),c=e=>{if(!r)return;let t=r.find(t=>t.locale===e);return s(t?A[t.status]:`content.locales.notCreated`)};return(0,M.jsxs)(b,{value:t,onValueChange:n,children:[(0,M.jsxs)(_,{id:a,size:i,"aria-label":a?void 0:s(`content.locales.label`),className:O(`w-full`,o),children:[(0,M.jsx)(D,{"aria-hidden":`true`}),(0,M.jsx)(g,{})]}),(0,M.jsx)(v,{children:e.map(e=>{let t=c(e.code);return(0,M.jsxs)(y,{value:e.code,children:[(0,M.jsx)(`span`,{children:e.label}),(0,M.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.code}),t?(0,M.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`· `,t]}):null]},e.code)})})]})},P=e(t(),1),F=e=>e.startsWith(`image/`)?`image`:e.startsWith(`video/`)?`video`:e.startsWith(`audio/`)?`audio`:e===`application/pdf`||e.startsWith(`text/`)||e.includes(`officedocument`)||e.includes(`opendocument`)||e===`application/msword`?`document`:`other`,I=e=>({id:e.id,filename:e.filename,mimeType:e.mimeType,url:e.url,alt:e.alt,width:e.width,height:e.height}),L=e=>{if(e?.length!==1)return;let[t]=e;return t===`image`||t===`video`||t===`audio`?`${t}/*`:void 0},R=({open:e,options:t,onPick:n,onCancel:g})=>{let{t:_}=p(),v=i(),{canWrite:y}=x(),b=E(),[D,O]=(0,P.useState)(),[A,j]=(0,P.useState)(),[N,I]=(0,P.useState)(`grid`),[R,z]=(0,P.useState)([]),[B,V]=(0,P.useState)(!1),H=t.multiple===!0,U=L(t.allowedKinds),W={...D?{search:D}:{},...U?{mimeType:U}:A?{mimeType:k[A]}:{}},G=(e,t)=>z(n=>t?H?[...n.filter(t=>t!==e),e]:[e]:n.filter(t=>t!==e)),K=()=>{z([]),g()},q=async()=>{V(!0);try{let e=(await Promise.all(R.map(e=>v.fetchQuery({queryKey:r.media.asset(e),queryFn:()=>a.media.assets.get(e)})))).filter(e=>!t.allowedKinds||t.allowedKinds.includes(F(e.mimeType)));z([]),n(e)}catch(e){m(e,`choosing media`)}finally{V(!1)}};return(0,M.jsx)(o,{open:e,onOpenChange:e=>e?void 0:K(),children:(0,M.jsxs)(f,{size:`lg`,...t.allowedKinds?{}:{"aria-describedby":void 0},children:[(0,M.jsxs)(d,{className:`pr-14`,children:[(0,M.jsx)(u,{children:_(H?`content.media.pickTitleMultiple`:`content.media.pickTitle`)}),t.allowedKinds?(0,M.jsx)(s,{children:_(`content.media.allowedKinds`,{kinds:t.allowedKinds.join(`, `)})}):null]}),(0,M.jsxs)(`div`,{className:`space-y-4 px-6 pb-4`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-start gap-2`,children:[(0,M.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,M.jsx)(C,{query:D,type:U?void 0:A,view:N,onQueryChange:O,onTypeChange:j,onViewChange:I})}),y?(0,M.jsx)(T,{variant:`outline`,label:_(`media.upload.action`),multiple:H,onFiles:e=>b.enqueue(e,{folderId:null,visibility:`public`})}):null]}),(0,M.jsx)(w,{onRetry:b.retry,onDismiss:b.dismiss})]}),(0,M.jsx)(l,{className:`pt-1`,children:(0,M.jsx)(S,{query:W,filtered:!!(D||A),view:N,selected:new Set(R),selectable:!0,activeId:void 0,onSelectChange:G,onOpen:e=>G(e.id,!R.includes(e.id))})}),(0,M.jsxs)(c,{children:[(0,M.jsx)(`span`,{role:`status`,className:`mr-auto text-sm text-muted-foreground`,children:_(`content.media.selectedCount`,{count:R.length})}),(0,M.jsx)(h,{type:`button`,variant:`outline`,onClick:K,children:_(`common.cancel`)}),(0,M.jsx)(h,{type:`button`,disabled:R.length===0||B,onClick:()=>void q(),children:_(`content.media.choose`,{count:R.length})})]})]})})},z=()=>{let[e,t]=(0,P.useState)(null),n=(0,P.useRef)(null),r=(0,P.useCallback)(e=>{n.current?.resolve(e),n.current=null,t(null)},[]);return{pickMedia:(0,P.useCallback)((e={})=>new Promise(r=>{n.current?.resolve(null);let i={options:e,resolve:r};n.current=i,t(i)}),[]),dialog:(0,M.jsx)(R,{open:e!==null,options:e?.options??{},onPick:e=>r(e.map(I)),onCancel:()=>r(null)})}};export{j as i,N as n,A as r,z as t};
2
- //# sourceMappingURL=useMediaPickerDialog-C23eOHQR.js.map
@@ -1,2 +0,0 @@
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{O as r,i,lt as a,o,s,t as c,u as l}from"./loader-circle-C-9trZPI.js";import{a as u}from"./media-VCJUbYzJ.js";import{A as d,O as f,n as p,o as ee,r as te,v as ne}from"./badge-vLiQczOd.js";import{g as re,h as m,n as h,t as g}from"./createLucideIcon-CqygG5K6.js";import{i as ie,n as ae,t as oe}from"./RowTitle-B4CE8tt7.js";import{C as se,E as _}from"./InfoHint-Dyzyf59c.js";import{T as v,x as ce}from"./es2015-BKfbx3rz.js";import{i as y,n as le}from"./skeleton-D4eOLKLY.js";import{a as b,i as x,n as S,o as ue,r as C,s as de,t as fe}from"./select-DjCAH45V.js";import{n as w}from"./ConfirmDialog-Rd6WDt6q.js";import{t as pe}from"./circle-check-De27poaB.js";import{n as me}from"./external-link-nZp2VpKw.js";import{n as T,o as E,s as D,t as O}from"./Thumbnail-BwbCNpgQ.js";import{t as k}from"./search-CW3iBC4k.js";import{m as A}from"./dropdown-menu-CVAnm22s.js";import{t as j}from"./rotate-ccw-Cvc_uA58.js";import{t as M}from"./cn-DVhJ55Mo.js";import{a as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./table-zG68ipQc.js";import{t as he}from"./useSearchInput-1fDoEtXe.js";import{t as ge}from"./constants-DCtq_UOe.js";import{t as _e}from"./Panel-B1TkcP8V.js";var B={name:`images`,size:24,node:[[`path`,{d:`m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16`,key:`9kzy35`}],[`path`,{d:`M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2`,key:`1t0f0t`}],[`circle`,{cx:`13`,cy:`7`,r:`1`,fill:`currentColor`,key:`1obus6`}],[`rect`,{x:`8`,y:`2`,width:`14`,height:`14`,rx:`2`,key:`1gvhby`}]]};B.node;var V=g(B),H={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};H.node;var U=g(H),W={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};W.node;var G=g(W),K=e(t(),1),ve=(e,t,n)=>{let r=t===void 0?-1:e.indexOf(t),i=e.indexOf(n);if(r!==-1&&i!==-1)return e.slice(Math.min(r,i),Math.max(r,i)+1)},q=(e,t)=>{let n=(0,K.useRef)(void 0);return{select:({id:r,checked:i,shiftKey:a})=>{let o=a?ve(e,n.current,r):void 0;if(o)for(let e of o)t(e,!0);else t(r,i);n.current=r}}},J=e(n(),1),ye=({asset:e,selected:t,selectable:n,active:r,onSelect:i,onOpen:a})=>{let{t:o}=h(),s=E[e.status];return(0,J.jsxs)(`li`,{className:M(`group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input`,(t||r)&&`border-primary ring-2 ring-primary hover:border-primary`),children:[(0,J.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.shiftKey&&n){i(!t,!0);return}a()},className:`flex w-full flex-col text-left outline-none`,"aria-label":o(`media.openDetails`,{name:e.filename}),children:[(0,J.jsx)(O,{asset:e,className:`aspect-square w-full border-b`}),(0,J.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5 px-3 py-2.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-sm font-medium`,title:e.filename,children:e.filename}),(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground`,children:[(0,J.jsxs)(`span`,{className:`truncate`,children:[T(e.filename,e.mimeType),` · `,D(e.sizeBytes)]}),e.visibility===`private`?(0,J.jsx)(d,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):null]})]})]}),e.status===`ready`?null:(0,J.jsx)(p,{tone:s.tone,label:o(s.labelKey),size:`sm`,className:`pointer-events-none absolute top-2 right-2`}),n?(0,J.jsx)(w,{checked:t,onClick:e=>{e.shiftKey&&(e.preventDefault(),i(!t,!0))},onCheckedChange:e=>i(e===!0,!1),"aria-label":o(`media.select`,{name:e.filename}),className:`absolute top-2 left-2 bg-card`}):null]})},be=({assets:e,selected:t,selectable:n,activeId:r,onSelectChange:i,onOpen:a})=>{let{t:o}=h(),s=q(e.map(e=>e.id),i);return(0,J.jsx)(`ul`,{"aria-label":o(`media.assetsLabel`,{count:e.length}),className:`grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4`,children:e.map(e=>(0,J.jsx)(ye,{asset:e,selected:t.has(e.id),selectable:n,active:e.id===r,onSelect:(t,n)=>s.select({id:e.id,checked:t,shiftKey:n}),onOpen:()=>a(e)},e.id))})},xe=({assets:e,selected:t,selectable:n,onSelectChange:r,onOpen:i})=>{let{t:a}=h(),o=q(e.map(e=>e.id),r);return(0,J.jsx)(R,{children:(0,J.jsxs)(z,{children:[(0,J.jsx)(N,{children:(0,J.jsxs)(I,{children:[n?(0,J.jsx)(P,{className:`w-10`,children:(0,J.jsx)(`span`,{className:`sr-only`,children:a(`media.selection`)})}):null,(0,J.jsx)(P,{children:a(`media.fields.filename`)}),(0,J.jsx)(P,{children:a(`media.fields.type`)}),(0,J.jsx)(P,{className:`text-right`,children:a(`media.fields.size`)}),(0,J.jsx)(P,{children:a(`media.fields.status`)}),(0,J.jsx)(P,{children:a(`media.fields.uploaded`)})]})}),(0,J.jsx)(F,{children:e.map(e=>{let r=E[e.status],s=t.has(e.id);return(0,J.jsxs)(I,{"data-state":s?`selected`:void 0,children:[n?(0,J.jsx)(L,{children:(0,J.jsx)(w,{checked:s,onClick:t=>{t.shiftKey&&(t.preventDefault(),o.select({id:e.id,checked:!s,shiftKey:!0}))},onCheckedChange:t=>o.select({id:e.id,checked:t===!0,shiftKey:!1}),"aria-label":a(`media.select`,{name:e.filename})})}):null,(0,J.jsx)(L,{className:`max-w-96`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-3`,children:[(0,J.jsx)(O,{asset:e,className:`size-8 shrink-0 rounded-md`}),(0,J.jsx)(oe,{asChild:!0,className:`min-w-0 truncate text-left`,children:(0,J.jsx)(`button`,{type:`button`,onClick:()=>i(e),children:e.filename})}),e.visibility===`private`?(0,J.jsx)(d,{role:`img`,"aria-label":a(`media.visibility.private`),className:`size-3.5 shrink-0 text-muted-foreground`}):null]})}),(0,J.jsx)(L,{className:`text-muted-foreground`,title:e.mimeType,children:T(e.filename,e.mimeType)}),(0,J.jsx)(L,{className:`text-right tabular-nums`,children:D(e.sizeBytes)}),(0,J.jsx)(L,{children:(0,J.jsx)(p,{tone:r.tone,label:a(r.labelKey),size:`sm`})}),(0,J.jsx)(L,{className:`whitespace-nowrap`,title:ae(e.createdAt),children:ie(e.createdAt)})]},e.id)})})]})})},Se=({query:e,filtered:t,view:n,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s})=>{let{t:c}=h(),l=u(e);if(l.isPending)return(0,J.jsx)(ne,{rows:4});if(l.isError)return(0,J.jsx)(te,{error:l.error,onRetry:()=>void l.refetch()});let d=l.data.pages.flatMap(e=>e.items);if(d.length===0){let n=t||e.folder!==void 0;return(0,J.jsx)(ee,{icon:V,size:n?`panel`:`page`,title:c(t?`media.emptyFiltered`:n?`media.emptyFolder`:`media.empty`)})}return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[n===`grid`?(0,J.jsx)(be,{assets:d,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s}):(0,J.jsx)(xe,{assets:d,selected:r,selectable:i,onSelectChange:o,onOpen:s}),l.hasNextPage?(0,J.jsx)(`div`,{className:`flex justify-center`,children:(0,J.jsx)(y,{variant:`outline`,disabled:l.isFetchingNextPage,"aria-busy":l.isFetchingNextPage||void 0,onClick:()=>void l.fetchNextPage(),children:l.isFetchingNextPage?c(`common.loading`):c(`media.loadMore`)})}):null]})},Y=`all`,Ce={image:`media.types.image`,video:`media.types.video`,audio:`media.types.audio`,pdf:`media.types.pdf`},we=({query:e,type:t,view:n,onQueryChange:r,onTypeChange:i,onViewChange:a})=>{let{t:o}=h(),{text:s,setText:c}=he(e,r);return(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsxs)(`div`,{className:`relative min-w-48 flex-1`,children:[(0,J.jsx)(k,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,J.jsx)(le,{type:`search`,value:s,onChange:e=>c(e.target.value),"aria-label":o(`media.search`),placeholder:o(`media.searchPlaceholder`),inputSize:`sm`,className:`pl-8`})]}),(0,J.jsxs)(fe,{value:t??Y,onValueChange:e=>i(e===Y?void 0:e),children:[(0,J.jsx)(x,{size:`sm`,"aria-label":o(`media.typeFilter`),className:`w-36`,children:(0,J.jsx)(b,{})}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{value:Y,children:o(`media.types.all`)}),ge.map(e=>(0,J.jsx)(C,{value:e,children:o(Ce[e])},e))]})]}),(0,J.jsxs)(`div`,{role:`group`,"aria-label":o(`media.view`),className:`flex h-9 items-center gap-0.5 rounded-lg border border-input px-px`,children:[(0,J.jsx)(y,{variant:n===`grid`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`grid`,"aria-label":o(`media.viewGrid`),onClick:()=>a(`grid`),children:(0,J.jsx)(U,{"aria-hidden":`true`})}),(0,J.jsx)(y,{variant:n===`list`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`list`,"aria-label":o(`media.viewList`),onClick:()=>a(`list`),children:(0,J.jsx)(A,{"aria-hidden":`true`})})]})]})},Te=({label:e,multiple:t=!0,onFiles:n,...r})=>{let i=(0,K.useRef)(null);return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(y,{...r,onClick:()=>i.current?.click(),children:[(0,J.jsx)(G,{"aria-hidden":`true`}),e]}),(0,J.jsx)(`input`,{ref:i,type:`file`,multiple:t,tabIndex:-1,"aria-hidden":`true`,className:`sr-only`,onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,t.length>0&&n(t)}})]})},X=l()(e=>({items:[],add:t=>e(e=>({items:[...e.items,t]})),update:(t,n)=>e(e=>({items:e.items.map(e=>e.id===t?{...e,...n}:e)})),remove:t=>e(e=>({items:e.items.filter(e=>e.id!==t)})),clearFinished:()=>e(e=>({items:e.items.filter(e=>e.status!==`done`)}))})),Z=class extends Error{status;body;constructor(e,t){super(`Upload failed with status ${e}`),this.name=`UploadTransferError`,this.status=e,this.body=t}},Ee=({url:e,form:t,onProgress:n,signal:r})=>new Promise((i,a)=>{let o=new XMLHttpRequest;o.open(`POST`,e),o.withCredentials=!1,o.upload.onprogress=e=>{e.lengthComputable&&e.total>0&&n(e.loaded/e.total)},o.onload=()=>{if(o.status>=200&&o.status<300){n(1),i();return}a(new Z(o.status,o.responseText))},o.onerror=()=>a(new Z(0,``)),o.onabort=()=>a(new DOMException(`Upload cancelled`,`AbortError`)),r?.addEventListener(`abort`,()=>o.abort(),{once:!0}),o.send(t)}),De=e=>e instanceof Z?e.status===0?v.t(`media.upload.unreachable`):e.status===413||/EntityTooLarge/.test(e.body)?v.t(`errors.codes.FILE_TOO_LARGE`):v.t(`media.upload.transferFailed`,{status:e.status}):ce(e),Q=100,Oe=({item:e,onRetry:t,onDismiss:n})=>{let{t:r}=h(),i=Math.round(e.progress*Q),a=e.status===`uploading`?r(`media.upload.uploading`,{percent:i}):e.status===`confirming`?r(`media.upload.checking`):e.status===`done`?r(`media.upload.done`):De(e.error);return(0,J.jsxs)(`li`,{className:`flex items-start gap-3 px-5 py-2.5`,children:[(0,J.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:e.status===`done`?(0,J.jsx)(pe,{"aria-hidden":`true`,className:`size-4 text-success`}):e.status===`failed`?(0,J.jsx)(me,{"aria-hidden":`true`,className:`size-4 text-destructive`}):(0,J.jsx)(c,{"aria-hidden":`true`,className:`size-4 animate-spin text-muted-foreground motion-reduce:animate-none`})}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,J.jsxs)(`p`,{className:`flex items-baseline gap-2 text-sm`,children:[(0,J.jsx)(`span`,{className:`truncate font-medium`,children:e.file.name}),(0,J.jsx)(`span`,{className:`shrink-0 text-meta text-muted-foreground`,children:D(e.file.size)})]}),e.status===`uploading`||e.status===`confirming`?(0,J.jsx)(`div`,{role:`progressbar`,"aria-label":r(`media.upload.progress`,{name:e.file.name}),"aria-valuemin":0,"aria-valuemax":Q,"aria-valuenow":i,className:`h-1.5 overflow-hidden rounded-full bg-muted`,style:{"--upload-progress":`${i}%`},children:(0,J.jsx)(`div`,{className:`h-full w-[var(--upload-progress)] bg-primary transition-[width]`})}):null,(0,J.jsx)(`p`,{className:M(`text-meta`,e.status===`failed`?`text-destructive`:`text-muted-foreground`),children:a})]}),e.status===`failed`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.retry`,{name:e.file.name}),onClick:t,children:(0,J.jsx)(j,{"aria-hidden":`true`})}):null,e.status===`failed`||e.status===`done`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.dismiss`,{name:e.file.name}),onClick:n,children:(0,J.jsx)(f,{"aria-hidden":`true`})}):null]})},ke=({onRetry:e,onDismiss:t})=>{let{t:n}=h(),r=X(e=>e.items),i=X(e=>e.clearFinished),[a,o]=(0,K.useState)(!1);if(r.length===0)return null;let s=r.filter(e=>e.status===`uploading`||e.status===`confirming`).length,c=r.filter(e=>e.status===`failed`).length,l=r.length-s-c,u=s===0&&c===0,d=!u||a;return(0,J.jsx)(_e,{title:n(`media.upload.queueTitle`),titleAs:`h2`,flush:d,actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-meta text-muted-foreground`,children:u?n(`media.upload.doneSummary`,{count:l}):n(`media.upload.summary`,{active:s,failed:c})}),u?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-expanded":d,"aria-label":n(d?`media.upload.hideFinished`:`media.upload.showFinished`),onClick:()=>o(e=>!e),children:d?(0,J.jsx)(ue,{"aria-hidden":`true`}):(0,J.jsx)(de,{"aria-hidden":`true`})}):null,l>0?(0,J.jsx)(y,{variant:`ghost`,size:`sm`,onClick:i,children:n(`media.upload.clearFinished`)}):null]}),bodyClassName:d?void 0:`hidden`,children:d?(0,J.jsx)(`ul`,{className:`max-h-64 divide-y overflow-y-auto`,children:r.map(n=>(0,J.jsx)(Oe,{item:n,onRetry:()=>e(n.id),onDismiss:()=>t(n.id)},n.id))}):null})},Ae=`application/octet-stream`,je=e=>{let t={filename:e.file.name,mimeType:e.file.type||Ae,sizeBytes:e.file.size};return i(()=>e.replaceAssetId?o.media.assets.replace(e.replaceAssetId,t):o.media.uploads.create({...t,folderId:e.folderId,visibility:e.visibility}))},$=async(e,t,n)=>{let r=await je(e);return await Ee({url:re(r,s()),form:m(r,e.file,e.file.name),onProgress:t}),n(),i(()=>o.media.uploads.confirm(r.grantId))},Me=()=>{let e=a(),{add:t,update:n,remove:i}=X.getState(),o=(0,K.useCallback)(async t=>{n(t.id,{status:`uploading`,progress:0,error:void 0});try{let e=await $(t,e=>n(t.id,{progress:e}),()=>n(t.id,{status:`confirming`}));n(t.id,{status:`done`,assetId:e.id}),t.replaceAssetId&&_.success(v.t(`media.upload.replaced`,{name:t.file.name}))}catch(e){se(e,`uploading ${t.file.name}`),n(t.id,{status:`failed`,error:e})}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e,n]);return{enqueue:(0,K.useCallback)((e,n)=>{for(let r of e){let e={id:crypto.randomUUID(),file:r,folderId:n.folderId,visibility:n.visibility,replaceAssetId:n.replaceAssetId,status:`uploading`,progress:0,error:void 0,assetId:void 0};t(e),o(e)}},[t,o]),retry:(0,K.useCallback)(e=>{let t=X.getState().items.find(t=>t.id===e);t&&o(t)},[o]),dismiss:i,uploadOne:(0,K.useCallback)(async t=>{try{let n=await $({file:t,folderId:null,visibility:`public`,replaceAssetId:void 0},()=>void 0,()=>void 0);return e.setQueryData(r.media.asset(n.id),n),{id:n.id,alt:n.alt||null}}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e])}};export{Se as a,V as c,we as i,ke as n,G as o,Te as r,U as s,Me as t};
2
- //# sourceMappingURL=useMediaUploader-CTViR0LX.js.map
@@ -1,2 +0,0 @@
1
- import{u as e}from"./auth-C4fHG9Iu.js";var t=t=>e().data?.networkPermissions.includes(t)??!1;export{t};
2
- //# sourceMappingURL=useNetworkPermission-CegwqQXR.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{D as n,E as r,u as i}from"./loader-circle-C-9trZPI.js";import{t as a}from"./store-DknnssoQ.js";var o=e(t(),1),s=`(max-width: 1023px)`,c=e=>{let t=window.matchMedia(s);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},l=()=>window.matchMedia(s).matches;function u(){return o.useSyncExternalStore(c,l,()=>!1)}var d=i()(n(e=>({sidebarOpen:!0,setSidebarOpen:t=>e({sidebarOpen:t}),entrySettingsOpen:!0,setEntrySettingsOpen:t=>e({entrySettingsOpen:t})}),{name:`shapio.ui`,storage:r,version:1})),f=(e,t)=>{let n=(0,o.useId)(),r=a(e=>e.register),i=a(e=>e.unregister);(0,o.useEffect)(()=>(r(n,{group:e,items:t}),()=>i(n)),[n,e,t,r,i])};export{d as n,u as r,f as t};
2
- //# sourceMappingURL=usePaletteItems-B3y2t7Ly.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{O as n,lt as r}from"./loader-circle-C-9trZPI.js";import{u as i}from"./auth-C4fHG9Iu.js";import{t as a}from"./createLucideIcon-CqygG5K6.js";import{s as o}from"./schema-D9BgCVzZ.js";import{t as s}from"./modelPermissions-DZ1lWfQZ.js";import{t as c}from"./contentCounts-DknqJ4kh.js";var l={name:`file-plus-corner`,size:24,node:[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]],aliases:[`file-plus-2`]};l.node;var u=a(l),d=e(t(),1),f=e=>{let t=r(),{data:a,isFetching:o}=i(),s=(0,d.useRef)(new Set);(0,d.useEffect)(()=>{if(!a||!e||o)return;let r=e.map(({definition:e})=>e.id).filter(e=>!(e in a.modelPermissions)&&!s.current.has(e));if(r.length>0){for(let e of r)s.current.add(e);t.invalidateQueries({queryKey:n.me})}},[e,a,o,t])},p={collection:0,singleton:1},m=()=>{let{data:e}=i(),{data:t}=o(`model`),n=c();return f(t),(0,d.useMemo)(()=>t?.flatMap(({definition:t,scope:r})=>t.kind!==`component`&&s(e,t.id,`read`)?[{id:t.id,apiKey:t.apiKey,label:t.label,kind:t.kind,count:t.kind===`collection`?n?.get(t.id):void 0,canCreate:s(e,t.id,`create`),shared:r===`network`}]:[]).sort((e,t)=>p[e.kind]-p[t.kind]||e.label.localeCompare(t.label)),[t,n,e])};export{u as n,m as t};
2
- //# sourceMappingURL=usePlaces-CAXr-IO9.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{B as n,F as r,H as i,I as a,L as o,N as s,P as c,R as l,Y as u,it as d,lt as f,nt as p,ot as m,q as h,z as g}from"./loader-circle-C-9trZPI.js";function _(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}var v=class extends u{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#m(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,h.batch(()=>{let e=this.#i,t=this.#p(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!m(e,n)});(o||s)&&(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(_(e,n).forEach(e=>{e.destroy()}),_(n,e).forEach(e=>{e.subscribe(t=>{this.#m(e,t)})})),this.#h()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#p(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){let n=new Set;return t.map((r,i)=>{let a=e[i];return r.defaultedQueryOptions.notifyOnChangeProps?a:r.observer.trackResult(a,e=>{n.has(e)||(n.add(e),t.forEach(t=>{t.observer.trackProp(e)}))})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=d(this.#a,t(e))),this.#a}return e}#f(){return!this.#r?.combine||this.#i.some((e,t)=>e.options.suspense&&this.#t[t]?.data===void 0)}#p(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),a=t.get(r.queryHash)?.shift()??new i(this.#e,r);n.push({defaultedQueryOptions:r,observer:a})}),n}#m(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=this.#t.slice(),this.#t[n]=t,this.#h())}#h(){if(this.hasListeners()){let e=this.#f(),t=this.#a,n=e?t:this.#d(this.#u(this.#t,this.#l),this.#r?.combine);(e||t!==n)&&h.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},y=e(t(),1);function b({queries:e,...t},u){let d=f(u),m=n(),_=g(),b=t.subscribed!==!1,x=y.useMemo(()=>e.map(e=>{let t=d.defaultQueryOptions(e);return t._optimisticResults=m?`isRestoring`:b?`optimistic`:void 0,t}),[e,d,m,b]);x.forEach(e=>{s(e);let t=d.getQueryCache().get(e.queryHash);a(e,_,t)}),l(_);let[S]=y.useState(()=>new v(d,x,t)),[C,w,T]=S.getOptimisticResult(x,t.combine),E=!m&&b;y.useSyncExternalStore(y.useCallback(e=>E?S.subscribe(h.batchCalls(e)):p,[S,E]),()=>S.getCurrentResult(),()=>S.getCurrentResult()),y.useEffect(()=>{S.setQueries(x,t)},[x,t,S]);let D=C.some((e,t)=>r(x[t],e))?C.flatMap((e,t)=>{let n=x[t];if(n&&r(n,e)){let e=new i(d,n);return c(n,e,_)}return[]}):[];if(D.length>0)throw Promise.all(D);let O=C.find((e,t)=>{let n=x[t];return n&&o({result:e,errorResetBoundary:_,throwOnError:n.throwOnError,query:d.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(O)throw O.error;return w(T())}export{b as t};
2
- //# sourceMappingURL=useQueries-CX6eFr24.js.map
@@ -1,2 +0,0 @@
1
- import{A as e,O as t,i as n,j as r,lt as i,o as a}from"./loader-circle-C-9trZPI.js";var o=()=>r({queryKey:t.users,queryFn:()=>a.users.list(),meta:{silent:!0}}),s=()=>r({queryKey:t.invitations,queryFn:()=>a.invitations.list(),meta:{silent:!0}}),c=()=>{let r=i();return e({mutationKey:[`invitations`,`create`],meta:{silent:!0},mutationFn:e=>n(()=>a.invitations.create(e)),onSuccess:()=>r.invalidateQueries({queryKey:t.invitations})})},l=()=>{let r=i();return e({mutationKey:[`invitations`,`revoke`],mutationFn:e=>n(()=>a.invitations.revoke(e)),onSettled:()=>r.invalidateQueries({queryKey:t.invitations})})},u=()=>e({mutationKey:[`invitations`,`link`],mutationFn:e=>n(()=>a.invitations.link(e))}),d=()=>{let r=i();return e({mutationKey:[`users`,`update`],meta:{silent:!0},mutationFn:({id:e,input:t})=>n(()=>a.users.update(e,t)),onSettled:()=>r.invalidateQueries({queryKey:t.users})})},f=()=>{let r=i();return e({mutationKey:[`users`,`setStatus`],mutationFn:({id:e,status:t})=>n(()=>a.users.update(e,{status:t})),onSettled:()=>r.invalidateQueries({queryKey:t.users})})},p=()=>{let r=i();return e({mutationKey:[`users`,`remove`],mutationFn:e=>n(()=>a.users.remove(e)),onSettled:()=>r.invalidateQueries({queryKey:t.users})})};export{l as a,o as c,p as i,c as n,f as o,u as r,d as s,s as t};
2
- //# sourceMappingURL=users-CDoJRL24.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"users-CDoJRL24.js","names":["useMutation","queryKeys","withCsrf","useQuery","useQueryClient","adminApi","useUsers","useInvitations","useInviteUser","queryClient","input","useRevokeInvitation","id","useIssueInvitationLink","useUpdateUser","useSetUserStatus","useRemoveUser"],"sources":["../../src/api/users.ts"],"sourcesContent":["import type { AdminUserStatus, InviteUserInput, UpdateAdminUserInput } 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 useUsers = () =>\n useQuery({ queryKey: queryKeys.users, queryFn: () => adminApi.users.list(), meta: { silent: true } });\n\nexport const useInvitations = () =>\n useQuery({\n queryKey: queryKeys.invitations,\n queryFn: () => adminApi.invitations.list(),\n meta: { silent: true },\n });\n\nexport const useInviteUser = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['invitations', 'create'],\n meta: { silent: true },\n mutationFn: (input: InviteUserInput) => withCsrf(() => adminApi.invitations.create(input)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.invitations }),\n });\n};\n\nexport const useRevokeInvitation = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['invitations', 'revoke'],\n mutationFn: (id: string) => withCsrf(() => adminApi.invitations.revoke(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.invitations }),\n });\n};\n\n/** A fresh accept link to send by hand; any earlier link for the invitation stops working. */\nexport const useIssueInvitationLink = () =>\n useMutation({\n mutationKey: ['invitations', 'link'],\n mutationFn: (id: string) => withCsrf(() => adminApi.invitations.link(id)),\n });\n\nexport const useUpdateUser = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['users', 'update'],\n meta: { silent: true },\n mutationFn: ({ id, input }: { id: string; input: UpdateAdminUserInput }) =>\n withCsrf(() => adminApi.users.update(id, input)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.users }),\n });\n};\n\nexport const useSetUserStatus = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['users', 'setStatus'],\n mutationFn: ({ id, status }: { id: string; status: AdminUserStatus }) =>\n withCsrf(() => adminApi.users.update(id, { status })),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.users }),\n });\n};\n\nexport const useRemoveUser = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['users', 'remove'],\n mutationFn: (id: string) => withCsrf(() => adminApi.users.remove(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.users }),\n });\n};\n"],"mappings":"oFAMA,IAAaM,MACXH,EAAS,CAAE,SAAUF,EAAU,MAAO,YAAeI,EAAS,MAAM,KAAK,EAAG,KAAM,CAAE,OAAQ,EAAK,CAAE,CAAC,EAEzFE,MACXJ,EAAS,CACP,SAAUF,EAAU,YACpB,YAAeI,EAAS,YAAY,KAAK,EACzC,KAAM,CAAE,OAAQ,EAAK,CACvB,CAAC,EAEUG,MAAsB,CACjC,IAAMC,EAAcL,EAAe,EACnC,OAAOJ,EAAY,CACjB,YAAa,CAAC,cAAe,QAAQ,EACrC,KAAM,CAAE,OAAQ,EAAK,EACrB,WAAa,GAA2BE,MAAeG,EAAS,YAAY,OAAOK,CAAK,CAAC,EACzF,cAAiBD,EAAY,kBAAkB,CAAE,SAAUR,EAAU,WAAY,CAAC,CACpF,CAAC,CACH,EAEaU,MAA4B,CACvC,IAAMF,EAAcL,EAAe,EACnC,OAAOJ,EAAY,CACjB,YAAa,CAAC,cAAe,QAAQ,EACrC,WAAa,GAAeE,MAAeG,EAAS,YAAY,OAAOO,CAAE,CAAC,EAC1E,cAAiBH,EAAY,kBAAkB,CAAE,SAAUR,EAAU,WAAY,CAAC,CACpF,CAAC,CACH,EAGaY,MACXb,EAAY,CACV,YAAa,CAAC,cAAe,MAAM,EACnC,WAAa,GAAeE,MAAeG,EAAS,YAAY,KAAKO,CAAE,CAAC,CAC1E,CAAC,EAEUE,MAAsB,CACjC,IAAML,EAAcL,EAAe,EACnC,OAAOJ,EAAY,CACjB,YAAa,CAAC,QAAS,QAAQ,EAC/B,KAAM,CAAE,OAAQ,EAAK,EACrB,YAAa,CAAE,KAAI,WACjBE,MAAeG,EAAS,MAAM,OAAOO,EAAIF,CAAK,CAAC,EACjD,cAAiBD,EAAY,kBAAkB,CAAE,SAAUR,EAAU,KAAM,CAAC,CAC9E,CAAC,CACH,EAEac,MAAyB,CACpC,IAAMN,EAAcL,EAAe,EACnC,OAAOJ,EAAY,CACjB,YAAa,CAAC,QAAS,WAAW,EAClC,YAAa,CAAE,KAAI,YACjBE,MAAeG,EAAS,MAAM,OAAOO,EAAI,CAAE,QAAO,CAAC,CAAC,EACtD,cAAiBH,EAAY,kBAAkB,CAAE,SAAUR,EAAU,KAAM,CAAC,CAC9E,CAAC,CACH,EAEae,MAAsB,CACjC,IAAMP,EAAcL,EAAe,EACnC,OAAOJ,EAAY,CACjB,YAAa,CAAC,QAAS,QAAQ,EAC/B,WAAa,GAAeE,MAAeG,EAAS,MAAM,OAAOO,CAAE,CAAC,EACpE,cAAiBH,EAAY,kBAAkB,CAAE,SAAUR,EAAU,KAAM,CAAC,CAC9E,CAAC,CACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","names":[],"sources":["../src/extensions/public.ts"],"sourcesContent":["import type { ThemeToken } from '@shapio/schema';\nimport type { FastifyBaseLogger, FastifyPluginAsync, preHandlerAsyncHookHandler } from 'fastify';\nimport type { Kysely, Transaction } from 'kysely';\nimport type { DB } from '../db/types.js';\nimport type { PermissionEvaluator, Principal } from '../permissions/types.js';\nimport type { RouteAuditConfig } from '../plugins/auditDeclaration.js';\n\n// What Shapio adds to Fastify, repeated here so custom route code is typed without the server's internals.\ndeclare module 'fastify' {\n interface FastifyRequest {\n /** Who is calling. Anonymous unless a session cookie or API token resolved. Never null after onRequest. */\n principal: Principal;\n /**\n * The request's site on a site route (custom routes are site routes): the credential's site, else the\n * `Shapio-Site` header or `?site=`, else the primary site. Undefined on a route declaring\n * `config.site = 'network'`.\n */\n site: { id: string; key: string } | undefined;\n }\n interface FastifyContextConfig {\n /** Required on every mutating route: the audit action recorded on success, or `{ exempt: '<why>' }`. */\n audit?: RouteAuditConfig;\n /** `'network'` for a custom route that is about the whole instance rather than one site. */\n site?: 'site' | 'network';\n }\n}\n\n/**\n * The project extension contract (ADR 0009), imported by project authors from `@shapio/cms/config`:\n *\n * ```ts\n * import { defineConfig } from '@shapio/cms/config';\n * export const config = defineConfig({ hooks: { article: { beforePublish: (ctx) => { ... } } } });\n * ```\n *\n * Extensions are code: changing them needs a restart of Shapio (never a rebuild). Content models are never\n * configured here; they change live in the admin. This file has no runtime imports from the server, so a\n * config that imports it stays cheap to load.\n *\n * Stability: everything exported here follows semver with `EXTENSION_CONTRACT_VERSION`; Shapio's database\n * tables (reachable through `trx`) are internal and may change in any release.\n */\nexport const EXTENSION_CONTRACT_VERSION = 1;\n\nexport type BeforeHookEvent = 'beforeCreate' | 'beforeUpdate' | 'beforePublish' | 'beforeDelete';\nexport type AfterHookEvent = 'afterCreate' | 'afterUpdate' | 'afterPublish' | 'afterDelete';\nexport type HookEvent = BeforeHookEvent | AfterHookEvent;\n\n/** A site of a multi-site instance: its stable ID and its key (sites share the schema, not content). */\nexport type ExtensionSite = { id: string; key: string };\n\n/** Entry data keyed by field API key (the admin API's shape; media and relations are IDs). */\nexport type EntryData = Readonly<Record<string, unknown>>;\n\nexport type HookModel = {\n /** Stable model ID (never changes). */\n id: string;\n apiKey: string;\n label: string;\n kind: 'collection' | 'singleton';\n localized: boolean;\n draftAndPublish: boolean;\n};\n\nexport type HookEntry = {\n id: string;\n locale: string | null;\n /** Which head the change is about: the draft (create/update), the live version (publish), or a delete. */\n state: 'draft' | 'published' | 'deleted';\n};\n\nexport type ContentReadOptions = {\n locale?: string;\n /** Read as this principal (its permissions apply). Default: Shapio itself (everything). */\n principal?: Principal;\n};\n\nexport type ContentReadEntry = {\n id: string;\n locale: string;\n status: string;\n data: Record<string, unknown>;\n};\n\n/** Read-only access to content (drafts, as the admin API shows them). Reads committed data. */\nexport type ContentReadService = {\n get: (modelKey: string, id: string, options?: ContentReadOptions) => Promise<ContentReadEntry>;\n /** `query` is a delivery-style querystring, e.g. `filters[title][$contains]=a&pageSize=10`. */\n list: (\n modelKey: string,\n query?: string,\n options?: Omit<ContentReadOptions, 'locale'>,\n ) => Promise<{ items: ContentReadEntry[]; total: number }>;\n /** Number of (non-deleted) entries of a model. */\n count: (modelKey: string) => Promise<number>;\n /** The active content models (collections and singletons) of this site: shared ones and its own. */\n models: () => Promise<HookModel[]>;\n};\n\nexport type MediaUsage = {\n entryId: string;\n modelId: string;\n fieldId: string;\n locale: string;\n state: string;\n};\n\nexport type MediaReferenceService = {\n /** Where an asset is used (up to 100 references, plus the total). */\n usages: (assetId: string) => Promise<{ items: MediaUsage[]; total: number }>;\n};\n\nexport type EnqueueOptions = {\n runAt?: Date;\n /** Enqueueing the same key twice creates one job. */\n idempotencyKey?: string;\n maxAttempts?: number;\n};\n\nexport type ExtensionJobService = {\n /** Enqueues one of the project's own jobs (`jobs` in the config), by its name without the `ext.` prefix. */\n enqueue: (\n name: string,\n payload?: Record<string, unknown>,\n options?: EnqueueOptions,\n ) => Promise<{ id: string; created: boolean }>;\n};\n\n/**\n * What Shapio offers extensions. Deliberately small; everything else goes through `trx` or HTTP.\n *\n * Content and media are per site. The services handed to a hook read the hook's site; the services given to\n * routes, jobs and service factories read the primary site. Use `forSite` for another one (in a custom\n * route: `services.forSite(request.site)`).\n */\nexport type ShapioServices = {\n /** The site `content` and `media` read. */\n site: ExtensionSite;\n /** The same services reading another site. */\n forSite: (site: ExtensionSite) => ShapioServices;\n content: ContentReadService;\n media: MediaReferenceService;\n jobs: ExtensionJobService;\n logger: FastifyBaseLogger;\n};\n\n/**\n * Your own services, by name. Augment it for typed access everywhere services appear:\n *\n * ```ts\n * declare module '@shapio/cms/config' {\n * interface CustomServices { stats: StatsService }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- augmented by projects\nexport interface CustomServices {}\n\nexport type ExtensionServices = ShapioServices & CustomServices;\n\ntype HookContextBase = {\n /** The site the entry belongs to; `services` read this site. */\n site: ExtensionSite;\n model: HookModel;\n entry: HookEntry;\n locale: string | null;\n /** The document after the change (absent for deletes). */\n data: EntryData | undefined;\n /** The document before the change: the previous draft (update) or the live version (publish). */\n before: EntryData | undefined;\n /** Who made the change (an admin, an API token, an app user, or Shapio itself for scheduled work). */\n principal: Principal;\n services: ExtensionServices;\n logger: FastifyBaseLogger;\n /** Aborted when Shapio shuts down. */\n signal: AbortSignal;\n};\n\n/**\n * `before*` hooks run INSIDE the write's transaction, before it commits. Throw `HookError` (or call\n * `reject`) to abort the write with 422 `HOOK_REJECTED`; nothing of the write is kept. Other errors abort it\n * too, as a 500. Database work through `trx` commits or rolls back with the write.\n */\nexport type BeforeHookContext = HookContextBase & {\n event: BeforeHookEvent;\n trx: Transaction<DB>;\n reject: (message: string, details?: Record<string, unknown>) => never;\n};\n\n/**\n * `after*` hooks run AFTER the write committed, as a job (retried with backoff on error, never rolling the\n * write back). Database work through `trx` is exactly once: it commits together with the record that the\n * hook ran. Other side effects (HTTP calls) are at least once: make them idempotent with `idempotencyKey`.\n */\nexport type AfterHookContext = HookContextBase & {\n event: AfterHookEvent;\n trx: Transaction<DB>;\n /** The outbox event the hook runs for. */\n eventId: string;\n /** `<eventId>:<hook name>`: stable across retries. */\n idempotencyKey: string;\n attempt: number;\n};\n\nexport type BeforeHook = (context: BeforeHookContext) => Promise<void> | void;\nexport type AfterHook = (context: AfterHookContext) => Promise<void> | void;\n\nexport type ModelHooks = { [E in BeforeHookEvent]?: BeforeHook } & { [E in AfterHookEvent]?: AfterHook };\n\nexport type ServiceFactoryContext = {\n /** Kysely on Shapio's database. Shapio's own tables are internal and may change between releases. */\n db: Kysely<DB>;\n config: ExtensionHostConfig;\n logger: FastifyBaseLogger;\n /** Shapio's services plus the custom services declared before this one. */\n services: ExtensionServices;\n};\n\nexport type ExtensionHostConfig = {\n nodeEnv: 'development' | 'production' | 'test';\n /** PUBLIC_URL origin, without a trailing slash. */\n publicUrl: string;\n basePath: string;\n /** The directory holding shapio.config and extensions/. */\n projectDir: string;\n};\n\nexport type ServiceFactory = (context: ServiceFactoryContext) => unknown;\n\n/** Options every custom route plugin receives (also available as `app.ext`). */\nexport type ExtensionRouteOptions = {\n services: ExtensionServices;\n /** Shapio's permission evaluator: `permissions.evaluate(request.principal, { action, modelId })`. */\n permissions: PermissionEvaluator;\n logger: FastifyBaseLogger;\n /** preHandler: 401/403 unless the caller is an admin user or an admin API token. */\n requireAdmin: preHandlerAsyncHookHandler;\n};\n\nexport type ExtensionRoute = {\n /** Mounted at `/api/ext/<prefix>` (under BASE_PATH). Lower-case letters, digits and dashes. */\n prefix: string;\n plugin: FastifyPluginAsync<ExtensionRouteOptions>;\n};\n\nexport type JobHandlerContext = {\n jobId: string;\n payload: Record<string, unknown>;\n attempt: number;\n maxAttempts: number;\n idempotencyKey: string | null;\n services: ExtensionServices;\n logger: FastifyBaseLogger;\n signal: AbortSignal;\n};\n\n/** Throw to retry with backoff; the return value (JSON) is stored as the job result. */\nexport type ExtensionJobHandler = (context: JobHandlerContext) => Promise<unknown>;\n\n/**\n * A colour theme for the admin: token values for a light variant, a dark variant, or both. Every UI token is\n * required in a variant; the `brand-*` tokens may be left out (Shapio's are used). Values are `#rrggbb`\n * (contrast is checked by `shapio extensions check`), `#rgb`, `#rrggbbaa`, or `rgb()`, `hsl()`, `oklch()`,\n * `oklab()` with plain arguments.\n */\nexport type ThemeTokens = Partial<Record<ThemeToken, string>>;\n\nexport type ThemeDefinition = {\n /** Lower-case letters, digits and dashes; not a built-in theme's key. Saved in each browser's setting. */\n key: string;\n /** Shown in the theme menu (not translated). */\n name: string;\n description?: string;\n light?: ThemeTokens;\n dark?: ThemeTokens;\n};\n\nexport type ShapioConfig = {\n /** Lifecycle hooks by model API ID (or stable model UUID); `*` runs for every model. */\n hooks?: Record<string, ModelHooks>;\n routes?: ExtensionRoute[];\n /** Constructed once at startup, in order, and shared by hooks, routes and jobs. */\n services?: Record<string, ServiceFactory>;\n /** Custom field editor modules: file names inside `extensions/editors/` (built ES modules). */\n editors?: string[];\n /** Job handlers by name; registered as `ext.<name>`. */\n jobs?: Record<string, ExtensionJobHandler>;\n /** Admin colour themes, listed after the built-in ones in the theme menu. */\n themes?: ThemeDefinition[];\n};\n\n/** Identity helper for completion and type checking in `shapio.config.ts`. */\nexport const defineConfig = (config: ShapioConfig): ShapioConfig => config;\n\nconst HOOK_ERROR_BRAND = Symbol.for('shapio.HookError');\n\n/**\n * Thrown by a `before*` hook to reject a write: the API answers 422 with code `HOOK_REJECTED`, this message\n * and the details. Recognised by a brand, not `instanceof`, so a copy of this class loaded from another\n * path (a project's own `node_modules`) works the same.\n */\nexport class HookError extends Error {\n readonly details: Record<string, unknown> | undefined;\n readonly [HOOK_ERROR_BRAND] = true;\n\n constructor(message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = 'HookError';\n this.details = details;\n }\n}\n\nexport const isHookError = (error: unknown): error is HookError =>\n typeof error === 'object' &&\n error !== null &&\n (error as Record<symbol, unknown>)[HOOK_ERROR_BRAND] === true;\n"],"mappings":";;;;;;;;;;;;;;;;AA0CA,MAAa,6BAA6B;;AA0P1C,MAAa,gBAAgB,WAAuC;AAEpE,MAAM,mBAAmB,OAAO,IAAI,kBAAkB;;;;;;AAOtD,IAAa,YAAb,cAA+B,MAAM;CACnC;CACA,CAAU,oBAAoB;CAE9B,YAAY,SAAiB,SAAmC;EAC9D,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,UAAU;CACjB;AACF;AAEA,MAAa,eAAe,UAC1B,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,sBAAsB"}