@shapio/cms 0.5.6 → 0.5.8
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.
- package/dist/admin/assets/{AssetTile-_qRYsivK.js → AssetTile-BrMzsUZD.js} +2 -2
- package/dist/admin/assets/{AssetTile-_qRYsivK.js.map → AssetTile-BrMzsUZD.js.map} +1 -1
- package/dist/admin/assets/AssistError-Cs-r9Ssc.js +2 -0
- package/dist/admin/assets/{AssistError-CMXQWiQo.js.map → AssistError-Cs-r9Ssc.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-WIrbyv1a.js → BlockMenuItems-DsccXMc_.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-WIrbyv1a.js.map → BlockMenuItems-DsccXMc_.js.map} +1 -1
- package/dist/admin/assets/Body-BzZD-TZT.js +2 -0
- package/dist/admin/assets/{Body-BYc1IVsQ.js.map → Body-BzZD-TZT.js.map} +1 -1
- package/dist/admin/assets/Builder-DW-GJA_q.js +2 -0
- package/dist/admin/assets/Builder-DW-GJA_q.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-NMvrWgxT.js → CodeEditor-CBCR73Wd.js} +2 -2
- package/dist/admin/assets/{CodeEditor-NMvrWgxT.js.map → CodeEditor-CBCR73Wd.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-B0RuxynJ.js → CopyButton-CxFsBHfF.js} +2 -2
- package/dist/admin/assets/{CopyButton-B0RuxynJ.js.map → CopyButton-CxFsBHfF.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-CQZsKNxR.js → CursorPager-BW2U3v6l.js} +2 -2
- package/dist/admin/assets/{CursorPager-CQZsKNxR.js.map → CursorPager-BW2U3v6l.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-BNq7nAYL.js → ExternalLink-BITMgS1K.js} +2 -2
- package/dist/admin/assets/{ExternalLink-BNq7nAYL.js.map → ExternalLink-BITMgS1K.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-BYu2fOTb.js → FocalPoint-CpZTve1E.js} +2 -2
- package/dist/admin/assets/{FocalPoint-BYu2fOTb.js.map → FocalPoint-CpZTve1E.js.map} +1 -1
- package/dist/admin/assets/Form-lNrRHc0I.js +2 -0
- package/dist/admin/assets/Form-lNrRHc0I.js.map +1 -0
- package/dist/admin/assets/{FormCheckboxGroup-Bz8KERs1.js → FormCheckboxGroup-DeeaYnzB.js} +2 -2
- package/dist/admin/assets/FormCheckboxGroup-DeeaYnzB.js.map +1 -0
- package/dist/admin/assets/{FormRadioGroup-c-wyx7dq.js → FormRadioGroup-Cfx5pvzU.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-c-wyx7dq.js.map → FormRadioGroup-Cfx5pvzU.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-ijG9qPpb.js → FormSelectField-BzE9Lq9i.js} +2 -2
- package/dist/admin/assets/{FormSelectField-ijG9qPpb.js.map → FormSelectField-BzE9Lq9i.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-Bp3hNpeP.js → FormSwitchField-BLOh7qei.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-Bp3hNpeP.js.map → FormSwitchField-BLOh7qei.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-BSKMqHcW.js → FormTextareaField-CO115n_u.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-BSKMqHcW.js.map → FormTextareaField-CO115n_u.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-BrLH4NQW.js → HintedLabel-DzHnEdIK.js} +2 -2
- package/dist/admin/assets/{HintedLabel-BrLH4NQW.js.map → HintedLabel-DzHnEdIK.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-Dyzyf59c.js → InfoHint-CSEtcHjL.js} +2 -2
- package/dist/admin/assets/{InfoHint-Dyzyf59c.js.map → InfoHint-CSEtcHjL.js.map} +1 -1
- package/dist/admin/assets/InlineConfirm-yW-iUKFC.js +2 -0
- package/dist/admin/assets/InlineConfirm-yW-iUKFC.js.map +1 -0
- package/dist/admin/assets/InsertMenuItem-CCr9e0qY.js +2 -0
- package/dist/admin/assets/InsertMenuItem-CCr9e0qY.js.map +1 -0
- package/dist/admin/assets/{LinkTabs-ByB2eCIr.js → LinkTabs-8SmS1vCd.js} +2 -2
- package/dist/admin/assets/{LinkTabs-ByB2eCIr.js.map → LinkTabs-8SmS1vCd.js.map} +1 -1
- package/dist/admin/assets/{Match-Bixf1ygj.js → Match-CcD9KxHH.js} +2 -2
- package/dist/admin/assets/{Match-Bixf1ygj.js.map → Match-CcD9KxHH.js.map} +1 -1
- package/dist/admin/assets/NoAccess-C8RLPN0I.js +2 -0
- package/dist/admin/assets/NoAccess-C8RLPN0I.js.map +1 -0
- package/dist/admin/assets/Panel-Bcl09TtM.js +2 -0
- package/dist/admin/assets/Panel-Bcl09TtM.js.map +1 -0
- package/dist/admin/assets/{QueryView--_vvV7dC.js → QueryView-xMP_uJ_t.js} +2 -2
- package/dist/admin/assets/{QueryView--_vvV7dC.js.map → QueryView-xMP_uJ_t.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-BCp6auUz.js → RadioTile-DQFmni5A.js} +2 -2
- package/dist/admin/assets/{RadioTile-BCp6auUz.js.map → RadioTile-DQFmni5A.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-fWNjndUc.js → RichTextField-CVHRIbnu.js} +5 -5
- package/dist/admin/assets/{RichTextField-fWNjndUc.js.map → RichTextField-CVHRIbnu.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-B4CE8tt7.js → RowTitle-Bqt6evG9.js} +2 -2
- package/dist/admin/assets/{RowTitle-B4CE8tt7.js.map → RowTitle-Bqt6evG9.js.map} +1 -1
- package/dist/admin/assets/SecretReveal-Bm6nYg5J.js +2 -0
- package/dist/admin/assets/SecretReveal-Bm6nYg5J.js.map +1 -0
- package/dist/admin/assets/{SharedGlyph-71FTypoi.js → SharedGlyph-cUmTh0_C.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-71FTypoi.js.map → SharedGlyph-cUmTh0_C.js.map} +1 -1
- package/dist/admin/assets/StepList-BXGYD9eJ.js +2 -0
- package/dist/admin/assets/StepList-BXGYD9eJ.js.map +1 -0
- package/dist/admin/assets/Structure-D8csgrIt.js +2 -0
- package/dist/admin/assets/{Structure-Dk87778W.js.map → Structure-D8csgrIt.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-CPJFIt1j.js → SubNavLink-CiCaVV8U.js} +2 -2
- package/dist/admin/assets/{SubNavLink-CPJFIt1j.js.map → SubNavLink-CiCaVV8U.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-CxS8IR6m.js → SuggestAltButton-CvIoirnz.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CxS8IR6m.js.map → SuggestAltButton-CvIoirnz.js.map} +1 -1
- package/dist/admin/assets/{TextLink-DnrMaF2F.js → TextLink-HRn66VL1.js} +2 -2
- package/dist/admin/assets/{TextLink-DnrMaF2F.js.map → TextLink-HRn66VL1.js.map} +1 -1
- package/dist/admin/assets/Thumbnail-DNj5TRBI.js +2 -0
- package/dist/admin/assets/Thumbnail-DNj5TRBI.js.map +1 -0
- package/dist/admin/assets/UnsavedChangesGuard-CUiuMklN.js +2 -0
- package/dist/admin/assets/UnsavedChangesGuard-CUiuMklN.js.map +1 -0
- package/dist/admin/assets/{UserAvatar-D7IbSpsP.js → UserAvatar-p-jV-LoD.js} +2 -2
- package/dist/admin/assets/{UserAvatar-D7IbSpsP.js.map → UserAvatar-p-jV-LoD.js.map} +1 -1
- package/dist/admin/assets/auth-CQO4MBUj.js +2 -0
- package/dist/admin/assets/auth-CQO4MBUj.js.map +1 -0
- package/dist/admin/assets/badge-CqKF1pwz.js +2 -0
- package/dist/admin/assets/{badge-vLiQczOd.js.map → badge-CqKF1pwz.js.map} +1 -1
- package/dist/admin/assets/{boxes-D6Y4Cenx.js → boxes-CAygw8zF.js} +2 -2
- package/dist/admin/assets/{boxes-D6Y4Cenx.js.map → boxes-CAygw8zF.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-DFUgXWXg.js → calendar-clock-BZGtAvWR.js} +2 -2
- package/dist/admin/assets/{calendar-clock-DFUgXWXg.js.map → calendar-clock-BZGtAvWR.js.map} +1 -1
- package/dist/admin/assets/changeSets-8EburmT0.js +2 -0
- package/dist/admin/assets/changeSets-8EburmT0.js.map +1 -0
- package/dist/admin/assets/chevron-left-DGU3HGYG.js +2 -0
- package/dist/admin/assets/{chevron-left-CZXrLV99.js.map → chevron-left-DGU3HGYG.js.map} +1 -1
- package/dist/admin/assets/{circle-check-De27poaB.js → circle-check-C37MSJqX.js} +2 -2
- package/dist/admin/assets/{circle-check-De27poaB.js.map → circle-check-C37MSJqX.js.map} +1 -1
- package/dist/admin/assets/{clock-BGAXsuo4.js → clock-2arjsgZ4.js} +2 -2
- package/dist/admin/assets/{clock-BGAXsuo4.js.map → clock-2arjsgZ4.js.map} +1 -1
- package/dist/admin/assets/{constants-CKGh8uwT.js → constants-a_15vqOh.js} +2 -2
- package/dist/admin/assets/{constants-CKGh8uwT.js.map → constants-a_15vqOh.js.map} +1 -1
- package/dist/admin/assets/content-CAjkbZEY.js +3 -0
- package/dist/admin/assets/content-CAjkbZEY.js.map +1 -0
- package/dist/admin/assets/contentCounts-DP7YYeZZ.js +2 -0
- package/dist/admin/assets/{contentCounts-DknqJ4kh.js.map → contentCounts-DP7YYeZZ.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-DzQ_0v36.js → contentTypes-84uc0bjR.js} +2 -2
- package/dist/admin/assets/{contentTypes-DzQ_0v36.js.map → contentTypes-84uc0bjR.js.map} +1 -1
- package/dist/admin/assets/context-IKYdzQJ-.js +2 -0
- package/dist/admin/assets/{context-fImO9k99.js.map → context-IKYdzQJ-.js.map} +1 -1
- package/dist/admin/assets/{copy-B5owk67M.js → copy-CsSRHgKZ.js} +2 -2
- package/dist/admin/assets/{copy-B5owk67M.js.map → copy-CsSRHgKZ.js.map} +1 -1
- package/dist/admin/assets/createLucideIcon-CLmh7Go-.js +2 -0
- package/dist/admin/assets/createLucideIcon-CLmh7Go-.js.map +1 -0
- package/dist/admin/assets/develop-BOqvnlgt.js +11 -0
- package/dist/admin/assets/develop-BOqvnlgt.js.map +1 -0
- package/dist/admin/assets/{dropdown-menu-CVAnm22s.js → dropdown-menu-_xfaEp5C.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-CVAnm22s.js.map → dropdown-menu-_xfaEp5C.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-BHtU4ov6.js → ellipsis-F91991on.js} +2 -2
- package/dist/admin/assets/{ellipsis-BHtU4ov6.js.map → ellipsis-F91991on.js.map} +1 -1
- package/dist/admin/assets/entryLink-CVB-TdIn.js +2 -0
- package/dist/admin/assets/entryLink-CVB-TdIn.js.map +1 -0
- package/dist/admin/assets/es2015-BHmI7wjK.js +42 -0
- package/dist/admin/assets/es2015-BHmI7wjK.js.map +1 -0
- package/dist/admin/assets/{external-link-nZp2VpKw.js → external-link-CdG6kHfA.js} +2 -2
- package/dist/admin/assets/{external-link-nZp2VpKw.js.map → external-link-CdG6kHfA.js.map} +1 -1
- package/dist/admin/assets/{field-Bg-JRgsB.js → field-COOzRptX.js} +2 -2
- package/dist/admin/assets/{field-Bg-JRgsB.js.map → field-COOzRptX.js.map} +1 -1
- package/dist/admin/assets/{file-stack-8rRouTJj.js → file-stack-28ZtO1xW.js} +2 -2
- package/dist/admin/assets/{file-stack-8rRouTJj.js.map → file-stack-28ZtO1xW.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-DQCI1nMN.js → fileRoute-s7mCMYUJ.js} +2 -2
- package/dist/admin/assets/{fileRoute-DQCI1nMN.js.map → fileRoute-s7mCMYUJ.js.map} +1 -1
- package/dist/admin/assets/{folder-plus-B3L3b389.js → folder-plus-DIk0pWkP.js} +2 -2
- package/dist/admin/assets/{folder-plus-B3L3b389.js.map → folder-plus-DIk0pWkP.js.map} +1 -1
- package/dist/admin/assets/followPlural-Cm7v_Udv.js +2 -0
- package/dist/admin/assets/followPlural-Cm7v_Udv.js.map +1 -0
- package/dist/admin/assets/{globe-DKkjr9MZ.js → globe-DFr3Gd2w.js} +2 -2
- package/dist/admin/assets/{globe-DKkjr9MZ.js.map → globe-DFr3Gd2w.js.map} +1 -1
- package/dist/admin/assets/{image-B6aL7hP8.js → image-DT79QFa_.js} +2 -2
- package/dist/admin/assets/{image-B6aL7hP8.js.map → image-DT79QFa_.js.map} +1 -1
- package/dist/admin/assets/{image-off-TVxEyb74.js → image-off-DFs5upyX.js} +2 -2
- package/dist/admin/assets/{image-off-TVxEyb74.js.map → image-off-DFs5upyX.js.map} +1 -1
- package/dist/admin/assets/{inbox-BKqu1EfP.js → inbox-CySnQydm.js} +2 -2
- package/dist/admin/assets/{inbox-BKqu1EfP.js.map → inbox-CySnQydm.js.map} +1 -1
- package/dist/admin/assets/inbox-DGO2D8fa.js +2 -0
- package/dist/admin/assets/inbox-DGO2D8fa.js.map +1 -0
- package/dist/admin/assets/index-BIIU9ZI6.js +4 -0
- package/dist/admin/assets/index-BIIU9ZI6.js.map +1 -0
- package/dist/admin/assets/index-lxe7WimO.css +2 -0
- package/dist/admin/assets/{key-round-Dmdr1vP5.js → key-round-D36CePnN.js} +2 -2
- package/dist/admin/assets/{key-round-Dmdr1vP5.js.map → key-round-D36CePnN.js.map} +1 -1
- package/dist/admin/assets/{labels-BrwwGWnv.js → labels-DQckbLGW.js} +2 -2
- package/dist/admin/assets/{labels-BrwwGWnv.js.map → labels-DQckbLGW.js.map} +1 -1
- package/dist/admin/assets/{languages-BbfFIygP.js → languages-CzbTaQv9.js} +2 -2
- package/dist/admin/assets/{languages-BbfFIygP.js.map → languages-CzbTaQv9.js.map} +1 -1
- package/dist/admin/assets/{layers-B0jT4rc4.js → layers-BmcodiaH.js} +2 -2
- package/dist/admin/assets/{layers-B0jT4rc4.js.map → layers-BmcodiaH.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-DC06jLDj.js → link-2-off-CoJNwrxm.js} +2 -2
- package/dist/admin/assets/{link-2-off-DC06jLDj.js.map → link-2-off-CoJNwrxm.js.map} +1 -1
- package/dist/admin/assets/{link-B3O0VUVT.js → link-Pyr2Y35S.js} +2 -2
- package/dist/admin/assets/{link-B3O0VUVT.js.map → link-Pyr2Y35S.js.map} +1 -1
- package/dist/admin/assets/locales-Bg3htKo8.js +2 -0
- package/dist/admin/assets/{locales-e7B5t6id.js.map → locales-Bg3htKo8.js.map} +1 -1
- package/dist/admin/assets/media-BCnVhaDH.js +2 -0
- package/dist/admin/assets/{media-VCJUbYzJ.js.map → media-BCnVhaDH.js.map} +1 -1
- package/dist/admin/assets/media-CURizGns.js +2 -0
- package/dist/admin/assets/media-CURizGns.js.map +1 -0
- package/dist/admin/assets/network-BixABr0o.js +2 -0
- package/dist/admin/assets/network-BixABr0o.js.map +1 -0
- package/dist/admin/assets/{plus-WfYKHW7G.js → plus-BoDtdLCo.js} +2 -2
- package/dist/admin/assets/{plus-WfYKHW7G.js.map → plus-BoDtdLCo.js.map} +1 -1
- package/dist/admin/assets/publishing-Dke9bSKp.js +2 -0
- package/dist/admin/assets/{publishing-CpSDO3M7.js.map → publishing-Dke9bSKp.js.map} +1 -1
- package/dist/admin/assets/{radio-group-DQ3sC1ol.js → radio-group-4ok5evXq.js} +2 -2
- package/dist/admin/assets/{radio-group-DQ3sC1ol.js.map → radio-group-4ok5evXq.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-Cvc_uA58.js → rotate-ccw-DL6TzcZh.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-Cvc_uA58.js.map → rotate-ccw-DL6TzcZh.js.map} +1 -1
- package/dist/admin/assets/schedules-BmB9Y73z.js +2 -0
- package/dist/admin/assets/{schedules-CBGpjEg7.js.map → schedules-BmB9Y73z.js.map} +1 -1
- package/dist/admin/assets/schema-D-qo7XSF.js +2 -0
- package/dist/admin/assets/schema-D-qo7XSF.js.map +1 -0
- package/dist/admin/assets/{scroll-text-gKYBbibb.js → scroll-text-PqeZm472.js} +2 -2
- package/dist/admin/assets/{scroll-text-gKYBbibb.js.map → scroll-text-PqeZm472.js.map} +1 -1
- package/dist/admin/assets/{search-CW3iBC4k.js → search-BdwIwOzC.js} +2 -2
- package/dist/admin/assets/{search-CW3iBC4k.js.map → search-BdwIwOzC.js.map} +1 -1
- package/dist/admin/assets/searchSchemas-CSScloG8.js +2 -0
- package/dist/admin/assets/{searchSchemas-D4S2ceA0.js.map → searchSchemas-CSScloG8.js.map} +1 -1
- package/dist/admin/assets/{sections-CN5fIoAr.js → sections-BTS683ur.js} +2 -2
- package/dist/admin/assets/{sections-CN5fIoAr.js.map → sections-BTS683ur.js.map} +1 -1
- package/dist/admin/assets/sections-DqBzSKMP.js +2 -0
- package/dist/admin/assets/{sections-Cl1LrzqH.js.map → sections-DqBzSKMP.js.map} +1 -1
- package/dist/admin/assets/{select-DjCAH45V.js → select-C0USI-Ox.js} +2 -2
- package/dist/admin/assets/{select-DjCAH45V.js.map → select-C0USI-Ox.js.map} +1 -1
- package/dist/admin/assets/{send-DRA-Pe46.js → send-XPWo3m4u.js} +2 -2
- package/dist/admin/assets/{send-DRA-Pe46.js.map → send-XPWo3m4u.js.map} +1 -1
- package/dist/admin/assets/seo-CceGYTIX.js +2 -0
- package/dist/admin/assets/{seo-DJ4k3LtY.js.map → seo-CceGYTIX.js.map} +1 -1
- package/dist/admin/assets/settings-B60vHpZd.js +2 -0
- package/dist/admin/assets/settings-B60vHpZd.js.map +1 -0
- package/dist/admin/assets/settle-CFU6YpQ0.js +2 -0
- package/dist/admin/assets/settle-CFU6YpQ0.js.map +1 -0
- package/dist/admin/assets/shapes-B5twqZcp.js +6 -0
- package/dist/admin/assets/shapes-B5twqZcp.js.map +1 -0
- package/dist/admin/assets/{skeleton-D4eOLKLY.js → skeleton-B5MP72Kw.js} +2 -2
- package/dist/admin/assets/{skeleton-D4eOLKLY.js.map → skeleton-B5MP72Kw.js.map} +1 -1
- package/dist/admin/assets/slugify-rYFum3Sc.js +2 -0
- package/dist/admin/assets/slugify-rYFum3Sc.js.map +1 -0
- package/dist/admin/assets/snapshots-DUI2t-qF.js +2 -0
- package/dist/admin/assets/snapshots-DUI2t-qF.js.map +1 -0
- package/dist/admin/assets/{sparkles-DCRAqbqD.js → sparkles-CvT-jxrW.js} +2 -2
- package/dist/admin/assets/{sparkles-DCRAqbqD.js.map → sparkles-CvT-jxrW.js.map} +1 -1
- package/dist/admin/assets/src-ndgTSYLX.js +7 -0
- package/dist/admin/assets/src-ndgTSYLX.js.map +1 -0
- package/dist/admin/assets/{stableId-iRkUbVIP.js → stableId-BrtQedPy.js} +2 -2
- package/dist/admin/assets/{stableId-iRkUbVIP.js.map → stableId-BrtQedPy.js.map} +1 -1
- package/dist/admin/assets/store-CdIFG90N.js +2 -0
- package/dist/admin/assets/{store-DknnssoQ.js.map → store-CdIFG90N.js.map} +1 -1
- package/dist/admin/assets/{switch-B2R13aVU.js → switch-Dp6WYNam.js} +2 -2
- package/dist/admin/assets/{switch-B2R13aVU.js.map → switch-Dp6WYNam.js.map} +1 -1
- package/dist/admin/assets/theme-65PB8uAu.js +2 -0
- package/dist/admin/assets/{theme-X-qeg74W.js.map → theme-65PB8uAu.js.map} +1 -1
- package/dist/admin/assets/titles-CQiqqDw-.js +2 -0
- package/dist/admin/assets/titles-CQiqqDw-.js.map +1 -0
- package/dist/admin/assets/tokens-ixHjAkDK.js +2 -0
- package/dist/admin/assets/{tokens-BlIDIMY9.js.map → tokens-ixHjAkDK.js.map} +1 -1
- package/dist/admin/assets/{tooltip-u2epXfJF.js → tooltip-BGP1DVBt.js} +2 -2
- package/dist/admin/assets/{tooltip-u2epXfJF.js.map → tooltip-BGP1DVBt.js.map} +1 -1
- package/dist/admin/assets/{undo-2-Zd1OT6qk.js → undo-2-BiTANHFz.js} +2 -2
- package/dist/admin/assets/{undo-2-Zd1OT6qk.js.map → undo-2-BiTANHFz.js.map} +1 -1
- package/dist/admin/assets/useContentSchema-DtYfhsd2.js +2 -0
- package/dist/admin/assets/{useContentSchema-DaQHlL19.js.map → useContentSchema-DtYfhsd2.js.map} +1 -1
- package/dist/admin/assets/useCursorPager-0zHjlm-7.js +2 -0
- package/dist/admin/assets/{useCursorPager-Dc-9B67j.js.map → useCursorPager-0zHjlm-7.js.map} +1 -1
- package/dist/admin/assets/useDiscardGuard-BskWSlbT.js +2 -0
- package/dist/admin/assets/useDiscardGuard-BskWSlbT.js.map +1 -0
- package/dist/admin/assets/useMediaPickerDialog-CU-ekPqX.js +2 -0
- package/dist/admin/assets/{useMediaPickerDialog-C23eOHQR.js.map → useMediaPickerDialog-CU-ekPqX.js.map} +1 -1
- package/dist/admin/assets/useMediaUploader-CBcq1ICg.js +2 -0
- package/dist/admin/assets/{useMediaUploader-CTViR0LX.js.map → useMediaUploader-CBcq1ICg.js.map} +1 -1
- package/dist/admin/assets/useNetworkPermission-Cts98h9d.js +2 -0
- package/dist/admin/assets/{useNetworkPermission-CegwqQXR.js.map → useNetworkPermission-Cts98h9d.js.map} +1 -1
- package/dist/admin/assets/usePaletteItems-DtReWmkd.js +2 -0
- package/dist/admin/assets/{usePaletteItems-B3y2t7Ly.js.map → usePaletteItems-DtReWmkd.js.map} +1 -1
- package/dist/admin/assets/usePlaces-DC47wVeU.js +2 -0
- package/dist/admin/assets/{usePlaces-CAXr-IO9.js.map → usePlaces-DC47wVeU.js.map} +1 -1
- package/dist/admin/assets/useQueries-CirW3Mvp.js +2 -0
- package/dist/admin/assets/{useQueries-CX6eFr24.js.map → useQueries-CirW3Mvp.js.map} +1 -1
- package/dist/admin/assets/{useResolvedScheme-Cg8TdO85.js → useResolvedScheme-C8vcQVko.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-Cg8TdO85.js.map → useResolvedScheme-C8vcQVko.js.map} +1 -1
- package/dist/admin/assets/{useSchemaScopeAccess-DyfiZnzs.js → useSchemaScopeAccess-ByrxIdKM.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-DyfiZnzs.js.map → useSchemaScopeAccess-ByrxIdKM.js.map} +1 -1
- package/dist/admin/assets/users-2iJYwlJb.js +2 -0
- package/dist/admin/assets/users-2iJYwlJb.js.map +1 -0
- package/dist/admin/assets/{users-ohHZnBJW.js → users-DM7CXUBJ.js} +2 -2
- package/dist/admin/assets/{users-ohHZnBJW.js.map → users-DM7CXUBJ.js.map} +1 -1
- package/dist/admin/assets/{zod-D5i60ErJ.js → zod-Cry7YvLY.js} +2 -2
- package/dist/admin/assets/{zod-D5i60ErJ.js.map → zod-Cry7YvLY.js.map} +1 -1
- package/dist/admin/index.html +59 -60
- package/dist/cli.js +10 -5696
- package/dist/cli.js.map +1 -1
- package/dist/cliMain-papyXJDd.js +5771 -0
- package/dist/cliMain-papyXJDd.js.map +1 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -38
- package/dist/contentDisposition-DOL2Xt0l.js +90 -0
- package/dist/contentDisposition-DOL2Xt0l.js.map +1 -0
- package/dist/index.d.ts +23 -6
- package/dist/index.js +2 -2
- package/dist/public-B57h4F7Y.js +39 -0
- package/dist/public-B57h4F7Y.js.map +1 -0
- package/dist/{public-BO_wneBL.d.ts → public-COKbHR-N.d.ts} +47 -3
- package/dist/{s3Adapter-CtPzkzf0.js → s3Adapter-U01iEAcK.js} +2 -2
- package/dist/{s3Adapter-CtPzkzf0.js.map → s3Adapter-U01iEAcK.js.map} +1 -1
- package/dist/{worker-DRCCGGjl.js → worker-B-sC-eY2.js} +5735 -3982
- package/dist/worker-B-sC-eY2.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/AssistError-CMXQWiQo.js +0 -2
- package/dist/admin/assets/Body-BYc1IVsQ.js +0 -2
- package/dist/admin/assets/Builder-CwHpRhZN.js +0 -2
- package/dist/admin/assets/Builder-CwHpRhZN.js.map +0 -1
- package/dist/admin/assets/ConfirmDialog-Rd6WDt6q.js +0 -2
- package/dist/admin/assets/ConfirmDialog-Rd6WDt6q.js.map +0 -1
- package/dist/admin/assets/Form-CiZUsLPp.js +0 -2
- package/dist/admin/assets/Form-CiZUsLPp.js.map +0 -1
- package/dist/admin/assets/FormCheckboxGroup-Bz8KERs1.js.map +0 -1
- package/dist/admin/assets/InsertMenuItem-BvRDuXtd.js +0 -2
- package/dist/admin/assets/InsertMenuItem-BvRDuXtd.js.map +0 -1
- package/dist/admin/assets/Panel-B1TkcP8V.js +0 -2
- package/dist/admin/assets/Panel-B1TkcP8V.js.map +0 -1
- package/dist/admin/assets/SecretReveal-BhSqdWqh.js +0 -2
- package/dist/admin/assets/SecretReveal-BhSqdWqh.js.map +0 -1
- package/dist/admin/assets/StepList-CZJmwy9e.js +0 -2
- package/dist/admin/assets/StepList-CZJmwy9e.js.map +0 -1
- package/dist/admin/assets/Structure-Dk87778W.js +0 -2
- package/dist/admin/assets/Thumbnail-BwbCNpgQ.js +0 -2
- package/dist/admin/assets/Thumbnail-BwbCNpgQ.js.map +0 -1
- package/dist/admin/assets/UnsavedChangesGuard-C6nD55Fn.js +0 -2
- package/dist/admin/assets/UnsavedChangesGuard-C6nD55Fn.js.map +0 -1
- package/dist/admin/assets/auth-C4fHG9Iu.js +0 -2
- package/dist/admin/assets/auth-C4fHG9Iu.js.map +0 -1
- package/dist/admin/assets/badge-vLiQczOd.js +0 -2
- package/dist/admin/assets/changeSets-D5VevASj.js +0 -2
- package/dist/admin/assets/changeSets-D5VevASj.js.map +0 -1
- package/dist/admin/assets/chevron-left-CZXrLV99.js +0 -2
- package/dist/admin/assets/content-Cbavyq0x.js +0 -3
- package/dist/admin/assets/content-Cbavyq0x.js.map +0 -1
- package/dist/admin/assets/contentCounts-DknqJ4kh.js +0 -2
- package/dist/admin/assets/context-fImO9k99.js +0 -2
- package/dist/admin/assets/createLucideIcon-CqygG5K6.js +0 -2
- package/dist/admin/assets/createLucideIcon-CqygG5K6.js.map +0 -1
- package/dist/admin/assets/develop-BDqMOEql.js +0 -11
- package/dist/admin/assets/develop-BDqMOEql.js.map +0 -1
- package/dist/admin/assets/es2015-BKfbx3rz.js +0 -42
- package/dist/admin/assets/es2015-BKfbx3rz.js.map +0 -1
- package/dist/admin/assets/followPlural-D0bENI5E.js +0 -2
- package/dist/admin/assets/followPlural-D0bENI5E.js.map +0 -1
- package/dist/admin/assets/inbox-Dfy4YBZ2.js +0 -2
- package/dist/admin/assets/inbox-Dfy4YBZ2.js.map +0 -1
- package/dist/admin/assets/index-BEM45u2w.css +0 -2
- package/dist/admin/assets/index-M4TUI1dl.js +0 -4
- package/dist/admin/assets/index-M4TUI1dl.js.map +0 -1
- package/dist/admin/assets/loader-circle-C-9trZPI.js +0 -2
- package/dist/admin/assets/loader-circle-C-9trZPI.js.map +0 -1
- package/dist/admin/assets/locales-e7B5t6id.js +0 -2
- package/dist/admin/assets/media-DBdx-UmR.js +0 -2
- package/dist/admin/assets/media-DBdx-UmR.js.map +0 -1
- package/dist/admin/assets/media-VCJUbYzJ.js +0 -2
- package/dist/admin/assets/network-BpbMYp6D.js +0 -2
- package/dist/admin/assets/network-BpbMYp6D.js.map +0 -1
- package/dist/admin/assets/pencil-BVSFlU14.js +0 -2
- package/dist/admin/assets/pencil-BVSFlU14.js.map +0 -1
- package/dist/admin/assets/publishing-CpSDO3M7.js +0 -2
- package/dist/admin/assets/schedules-CBGpjEg7.js +0 -2
- package/dist/admin/assets/schema-D9BgCVzZ.js +0 -2
- package/dist/admin/assets/schema-D9BgCVzZ.js.map +0 -1
- package/dist/admin/assets/searchSchemas-D4S2ceA0.js +0 -2
- package/dist/admin/assets/sections-Cl1LrzqH.js +0 -2
- package/dist/admin/assets/seo-DJ4k3LtY.js +0 -2
- package/dist/admin/assets/settings-DRZ33PTg.js +0 -2
- package/dist/admin/assets/settings-DRZ33PTg.js.map +0 -1
- package/dist/admin/assets/settle-LRKtTN_e.js +0 -2
- package/dist/admin/assets/settle-LRKtTN_e.js.map +0 -1
- package/dist/admin/assets/shapes-BJe3IMuj.js +0 -6
- package/dist/admin/assets/shapes-BJe3IMuj.js.map +0 -1
- package/dist/admin/assets/snapshots-CT-zs6Up.js +0 -2
- package/dist/admin/assets/snapshots-CT-zs6Up.js.map +0 -1
- package/dist/admin/assets/src-DUpL-qwG.js +0 -7
- package/dist/admin/assets/src-DUpL-qwG.js.map +0 -1
- package/dist/admin/assets/store-DknnssoQ.js +0 -2
- package/dist/admin/assets/theme-X-qeg74W.js +0 -2
- package/dist/admin/assets/titles-CLh5ftA2.js +0 -2
- package/dist/admin/assets/titles-CLh5ftA2.js.map +0 -1
- package/dist/admin/assets/tokens-BlIDIMY9.js +0 -2
- package/dist/admin/assets/useAuditLabels-DWBpLOTB.js +0 -2
- package/dist/admin/assets/useAuditLabels-DWBpLOTB.js.map +0 -1
- package/dist/admin/assets/useContentSchema-DaQHlL19.js +0 -2
- package/dist/admin/assets/useCursorPager-Dc-9B67j.js +0 -2
- package/dist/admin/assets/useDiscardGuard-BVJGUCiH.js +0 -2
- package/dist/admin/assets/useDiscardGuard-BVJGUCiH.js.map +0 -1
- package/dist/admin/assets/useMediaPickerDialog-C23eOHQR.js +0 -2
- package/dist/admin/assets/useMediaUploader-CTViR0LX.js +0 -2
- package/dist/admin/assets/useNetworkPermission-CegwqQXR.js +0 -2
- package/dist/admin/assets/usePaletteItems-B3y2t7Ly.js +0 -2
- package/dist/admin/assets/usePlaces-CAXr-IO9.js +0 -2
- package/dist/admin/assets/useQueries-CX6eFr24.js +0 -2
- package/dist/admin/assets/users-CDoJRL24.js +0 -2
- package/dist/admin/assets/users-CDoJRL24.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/worker-DRCCGGjl.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings-DRZ33PTg.js","names":["z.object","z.string","z.enum","EMPTY","zodResolver","Table","TableRoot","useState","Table","useId","useState","_Fragment","i18next","useState","useState","z.object","z.string","z.array","zodResolver","i18next","useState","MoreHorizontal","_Fragment","Trash2","Table","TableRoot","useState","Table","z.object","zodResolver","i18next","z.string","zodResolver","i18next","useState","useCallback","z.string","z.object","z.record","useState","zodResolver","i18next","TableRoot","__toESM","require_jsx_runtime","useMutation","queryKeys","withCsrf","useQuery","useQueryClient","adminApi","useMediaAsset","isConflict","hasErrorCode","useChangePassword","useUpdateProfile","useMe","X","SubmitButton","Page","PageHeader","StatusChip","EmptyState","Badge","Outlet","useTranslation","createLucideIcon","formatRelativeTime","formatDateTime","formatMonth","RowTitle","createLazyRoute","UnsavedChangesGuard","LOCALE_CODE_PATTERN","SEO_TWITTER_HANDLE_PATTERN","isValidTitleTemplate","useSiteSeo","siteSeoQueryOptions","useUpdateSiteSeo","InfoHint","reportError","instance","describeError","ArrowDown","ImagePlus","ArrowUp","AssetTile","Button","Input","Label","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","FormError","InlineConfirm","ConfirmDialog","Trash","FieldGroup","FieldSet","FieldLegend","Field","Ellipsis","useMediaPermissions","Globe","KeyRound","DropdownMenuItem","DropdownMenuTrigger","DropdownMenuContent","DropdownMenu","MonitorSmartphone","ThemeSwatches","useLookSelection","SETTINGS_GROUPS","Pencil","Plus","RadioGroup","newPasswordField","useController","useWatch","FormTextField","requiredText","FormFieldError","withPasswordConfirmation","u","useForm","describedBy","settle","record","TableHeader","object","TableHead","_enum","TableBody","TableRow","TableCell","TableCard","Table$3","array","string","HintedLabel","QueryView","FormRadioGroup","useNetworkPermission","useUpdateLocale","useSetDefaultLocale","useDeleteLocale","useLocales","useCreateLocale","LocaleSelect","useMediaPickerDialog","useAssistStatus","useRewriteText","REWRITE_MAX_TEXT","ASSIST_DOCS_URL","AssistButton","AssistError","Textarea","Panel","ExternalLink","RadioTile","FormTextareaField","SubNav","SubNavGroup","SubNavLink","FormSheet","FormSelectField","useCreateApiToken","useRevokeApiToken","useApiTokens","useRoleNames","useDraftRoleIds","useRoles","SecretReveal","useConfirmTarget","__iconData","Star","import_jsx_runtime","Nav","permissions","t","sections","group","section","Icon","Settings","import_react","require_react","TOKEN_EXPIRY_OPTIONS","DAY_MS","expiryToDate","option","now","createTokenSchema","EMPTY$1","useCreateTokenForm","createToken","form","open","reset","network","scope","canChooseNetwork","roleId","created","expiry","onCreated","CreateSheet","roles","me","mayCreateNetwork","role","scopeOptions","roleOptions","expiryOptions","onCloseAutoFocus","onSubmit","event","Table$2","tokens","token","roleNames","draftRoleIds","siteName","onRevoke","ApiTokens","revoke","creating","setCreating","secret","setSecret","revokeToken","toast","createButton","data","Appearance","selectedLook","selectLook","looks","look","TryIt","id","text","setText","instruction","setInstruction","rewrite","ready","Usage","rows","usage","row","Assist","status","affectedHeadsOf","count","error","announceDeleted","locale","useDeleteLocaleFlow","deleteLocale","withContent","setWithContent","setOpen","LEGEND_ID","FallbackChain","adding","setAdding","chain","field","labelOf","locales","value","available","code","move","next","moved","from","to","index","entry","fieldState","localeSchema","valuesFor","useLocaleForm","createLocale","updateLocale","onDone","mutation","LocaleSheet","onOpenChange","Row","deleting","setDeleting","canManage","onDelete","onEdit","onMakeDefault","Table$1","defaultLocale","Locales","setDefault","makeDefault","deletion","sheet","setSheet","currentDefault","current","target","profileSchema","useProfileDetailsForm","updateProfile","name","formState","saved","values","EMAIL_ID","EMAIL_HINT_ID","Details","onDirtyChange","isDirty","email","changePasswordSchema","EMPTY","useChangePasswordForm","changePassword","password","Password","Profile","detailsDirty","setDetailsDirty","passwordDirty","setPasswordDirty","onDetailsDirtyChange","dirty","onPasswordDirtyChange","BUTTON_ID","HINT_ID","ERROR_ID","DefaultImage","imagePrivate","picker","choose","first","canWrite","SHORT_MAX","DESCRIPTION_MAX","optionalText","max","localeTextsSchema","seoSettingsSchema","EMPTY_TEXTS","toSeoSettingsValues","codes","seo","toSeoDefaults","texts","kept","key","handle","firstLocaleWithErrors","errors","SEO_IMAGE_INVALID","useSeoSettingsForm","queryClient","update","setLocale","version","setVersion","siteSeo","imageId","image","clearErrors","reload","fresh","invalid","LocaleTexts","onLocaleChange","SeoForm","Seo","list","useSessions","useRevokeSession","BROWSERS","SYSTEMS","firstMatch","table","pattern","describeUserAgent","userAgent","browser","system","Table","sessions","session","settingsLazyRoutes","revokeSession"],"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/star.mjs","../../src/features/Settings/Nav/index.tsx","../../src/features/Settings/index.tsx","../../src/features/Settings/ApiTokens/constants.ts","../../src/features/Settings/ApiTokens/hooks/useCreateTokenForm.ts","../../src/features/Settings/ApiTokens/CreateSheet/index.tsx","../../src/features/Settings/ApiTokens/Table/index.tsx","../../src/features/Settings/ApiTokens/index.tsx","../../src/features/Settings/Appearance/index.tsx","../../src/features/Settings/Assist/TryIt/index.tsx","../../src/features/Settings/Assist/Usage/index.tsx","../../src/features/Settings/Assist/index.tsx","../../src/features/Settings/Locales/hooks/useDeleteLocaleFlow.ts","../../src/features/Settings/Locales/FallbackChain/index.tsx","../../src/features/Settings/Locales/hooks/useLocaleForm.ts","../../src/features/Settings/Locales/LocaleSheet/index.tsx","../../src/features/Settings/Locales/Table/Row/index.tsx","../../src/features/Settings/Locales/Table/index.tsx","../../src/features/Settings/Locales/index.tsx","../../src/features/Settings/Profile/hooks/useProfileDetailsForm.ts","../../src/features/Settings/Profile/Details/index.tsx","../../src/features/Settings/Profile/hooks/useChangePasswordForm.ts","../../src/features/Settings/Profile/Password/index.tsx","../../src/features/Settings/Profile/index.tsx","../../src/features/Settings/Seo/DefaultImage/index.tsx","../../src/features/Settings/Seo/helpers.ts","../../src/features/Settings/Seo/hooks/useSeoSettingsForm.ts","../../src/features/Settings/Seo/LocaleTexts/index.tsx","../../src/features/Settings/Seo/index.tsx","../../src/api/sessions.ts","../../src/helpers/describeUserAgent.ts","../../src/features/Settings/Sessions/Table/index.tsx","../../src/features/Settings/Sessions/index.tsx","../../src/app/lazyRoutes/settings.tsx"],"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: \"star\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n ]\n};\n__iconData.node;\nconst Star = createLucideIcon(__iconData);\n\nexport { __iconData, Star as default };\n//# sourceMappingURL=star.mjs.map\n","import { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { SubNav, SubNavGroup } from '@/components/SubNav';\nimport { SubNavLink } from '@/components/SubNavLink';\nimport { SETTINGS_GROUPS } from '../sections';\n\n/** Settings sections, grouped (Account, Workspace, Developer); groups the admin can't use are hidden. */\nexport const Nav = () => {\n const { t } = useTranslation();\n const permissions = useMe().data?.globalPermissions ?? [];\n return (\n <SubNav label={t('settings.sections')}>\n {SETTINGS_GROUPS.map((group) => {\n const sections = group.sections.filter(\n (section) => !section.permission || permissions.includes(section.permission),\n );\n return sections.length === 0 ? null : (\n <SubNavGroup key={group.key} label={t(`settings.${group.key}`)}>\n {sections.map((section) => {\n const Icon = section.icon;\n return (\n <SubNavLink key={section.key} to={section.to}>\n <Icon aria-hidden=\"true\" />\n {t(`settings.${section.key}`)}\n </SubNavLink>\n );\n })}\n </SubNavGroup>\n );\n })}\n </SubNav>\n );\n};\n","import { Outlet } from '@tanstack/react-router';\nimport { Page } from '@/components/Page';\nimport { Nav } from './Nav';\n\n/** Settings: the section navigation beside the current section's screen. */\nexport const Settings = () => (\n <Page>\n <div className=\"flex flex-col gap-6 lg:flex-row lg:items-start lg:gap-8\">\n <Nav />\n <div className=\"min-w-0 flex-1\">\n <Outlet />\n </div>\n </div>\n </Page>\n);\n","/** Expiry choices in days; `never` keeps the token until it's revoked. */\nexport const TOKEN_EXPIRY_OPTIONS = ['never', '30', '90', '365'] as const;\n\nexport type TokenExpiryOption = (typeof TOKEN_EXPIRY_OPTIONS)[number];\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\nexport const expiryToDate = (option: TokenExpiryOption, now: Date = new Date()): string | null =>\n option === 'never' ? null : new Date(now.getTime() + Number(option) * DAY_MS).toISOString();\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { CreatedApiToken } from '@shapio/client';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { z } from 'zod';\nimport { useCreateApiToken } from '@/api/tokens';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\nimport { expiryToDate, TOKEN_EXPIRY_OPTIONS } from '../constants';\n\n/** `site`: the token works on this site only (the default). `network`: every site and network actions. */\nexport const TOKEN_SCOPES = ['site', 'network'] as const;\n\nconst createTokenSchema = z.object({\n name: requiredText(),\n roleId: z.string().min(1, 'validation.selectRole'),\n expiry: z.enum(TOKEN_EXPIRY_OPTIONS),\n scope: z.enum(TOKEN_SCOPES),\n});\n\nexport type CreateTokenValues = z.infer<typeof createTokenSchema>;\n\nconst EMPTY: CreateTokenValues = { name: '', roleId: '', expiry: '90', scope: 'site' };\n\n/**\n * `canChooseNetwork(roleId)`: whether a network token may be made with that role (the creator holds\n * `users.manage` and it is an admin role; delivery tokens always belong to a site). `network` is always sent,\n * so the server never picks the kind on its own.\n */\nexport const useCreateTokenForm = (\n open: boolean,\n onCreated: (created: CreatedApiToken) => void,\n canChooseNetwork: (roleId: string) => boolean,\n) => {\n const createToken = useCreateApiToken();\n const form = useForm<CreateTokenValues>({ resolver: zodResolver(createTokenSchema), defaultValues: EMPTY });\n const { reset } = form;\n useEffect(() => {\n if (open) {\n reset(EMPTY);\n }\n }, [open, reset]);\n const onSubmit = form.handleSubmit(async ({ name, roleId, expiry, scope }) => {\n const network = scope === 'network' && canChooseNetwork(roleId);\n const created = await settle(\n createToken.mutateAsync({ name, roleId, expiresAt: expiryToDate(expiry), network }),\n );\n if (!created.ok) {\n return;\n }\n reset(EMPTY);\n onCreated(created.value);\n });\n return { form, onSubmit, createToken };\n};\n","import type { CreatedApiToken } from '@shapio/client';\nimport { useWatch } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { useRoles } from '@/api/roles';\nimport { FormError } from '@/components/FormError';\nimport { FormRadioGroup } from '@/components/FormRadioGroup';\nimport { FormSelectField } from '@/components/FormSelectField';\nimport { FormSheet } from '@/components/FormSheet';\nimport { FormTextField } from '@/components/FormTextField';\nimport { TOKEN_EXPIRY_OPTIONS } from '../constants';\nimport { useCreateTokenForm } from '../hooks/useCreateTokenForm';\n\ntype CreateSheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onCreated: (created: CreatedApiToken) => void;\n /** See `FormSheet`: lets the page keep focus on the secret that replaces the sheet. */\n onCloseAutoFocus?: (event: Event) => void;\n};\n\nexport const CreateSheet = ({ open, onOpenChange, onCreated, onCloseAutoFocus }: CreateSheetProps) => {\n const { t } = useTranslation();\n const roles = useRoles();\n const { data: me } = useMe();\n const mayCreateNetwork = me?.networkPermissions.includes('users.manage') ?? false;\n const canChooseNetwork = (roleId: string) =>\n mayCreateNetwork && roles.data?.find((role) => role.id === roleId)?.kind === 'admin';\n const { form, onSubmit, createToken } = useCreateTokenForm(open, onCreated, canChooseNetwork);\n const roleId = useWatch({ control: form.control, name: 'roleId' });\n const scopeOptions = [\n {\n value: 'site',\n label: t('apiTokens.scopeSite', { name: me?.site.name ?? '' }),\n description: t('apiTokens.scopeSiteDescription'),\n },\n {\n value: 'network',\n label: t('apiTokens.scopeNetwork'),\n description: t('apiTokens.scopeNetworkDescription'),\n },\n ];\n const roleOptions = (roles.data ?? []).map((role) => ({ value: role.id, label: role.name }));\n const expiryOptions = TOKEN_EXPIRY_OPTIONS.map((option) => ({\n value: option,\n label:\n option === 'never' ? t('apiTokens.expiryNever') : t('apiTokens.expiryDays', { count: Number(option) }),\n }));\n return (\n <FormSheet\n open={open}\n onOpenChange={onOpenChange}\n size=\"md\"\n {...(onCloseAutoFocus ? { onCloseAutoFocus } : {})}\n title={t('apiTokens.createTitle')}\n dirty={form.formState.isDirty}\n pending={createToken.isPending}\n submitLabel={t('common.create')}\n pendingLabel={t('common.saving')}\n onSubmit={(event) => void onSubmit(event)}\n >\n <FormTextField control={form.control} name=\"name\" label={t('apiTokens.name')} autoComplete=\"off\" />\n <FormSelectField\n control={form.control}\n name=\"roleId\"\n label={t('apiTokens.role')}\n options={roleOptions}\n />\n {canChooseNetwork(roleId) ? (\n <FormRadioGroup\n control={form.control}\n name=\"scope\"\n legend={t('apiTokens.scope')}\n options={scopeOptions}\n />\n ) : null}\n <FormSelectField\n control={form.control}\n name=\"expiry\"\n label={t('apiTokens.expiry')}\n options={expiryOptions}\n />\n <FormError error={createToken.error ?? roles.error} />\n </FormSheet>\n );\n};\n","import type { ApiToken } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { InlineConfirm } from '@/components/InlineConfirm';\nimport { RowTitle } from '@/components/RowTitle';\nimport { StatusChip } from '@/components/StatusChip';\nimport { TableCard } from '@/components/TableCard';\nimport { Button } from '@/components/ui/button';\nimport {\n Table as TableRoot,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { formatDateTime, formatRelativeTime } from '@/helpers/formatDate';\n\ntype TableProps = {\n tokens: ApiToken[];\n roleNames: ReadonlyMap<string, string>;\n /** Roles that grant Read drafts: their tokens get a Drafts chip (development tokens). */\n draftRoleIds: ReadonlySet<string>;\n /** This site's name: every token not marked \"Every site\" belongs to it. */\n siteName: string;\n /** Resolves once the token is revoked (the confirmation waits for it). */\n onRevoke: (token: ApiToken) => Promise<unknown>;\n};\n\nexport const Table = ({ tokens, roleNames, draftRoleIds, siteName, onRevoke }: TableProps) => {\n const { t } = useTranslation();\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('apiTokens.name')}</TableHead>\n <TableHead>{t('apiTokens.prefix')}</TableHead>\n <TableHead>{t('apiTokens.role')}</TableHead>\n <TableHead>{t('apiTokens.appliesTo')}</TableHead>\n <TableHead>{t('apiTokens.status')}</TableHead>\n <TableHead>{t('apiTokens.lastUsed')}</TableHead>\n <TableHead>{t('apiTokens.expires')}</TableHead>\n <TableHead>\n <span className=\"sr-only\">{t('common.actions')}</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {tokens.map((token) => (\n <TableRow key={token.id}>\n <TableCell>\n <RowTitle>{token.name}</RowTitle>\n </TableCell>\n <TableCell className=\"font-mono text-xs\">{`${token.tokenPrefix}…`}</TableCell>\n <TableCell>\n <span className=\"flex items-center gap-2\">\n {roleNames.get(token.roleId) ?? t('common.unknown')}\n {draftRoleIds.has(token.roleId) ? (\n <StatusChip tone=\"warning\" size=\"sm\" label={t('apiTokens.draftsChip')} />\n ) : null}\n </span>\n </TableCell>\n <TableCell>{token.siteId === null ? t('sites.everySite') : siteName}</TableCell>\n <TableCell>\n {token.revokedAt ? (\n <StatusChip tone=\"muted\" label={t('apiTokens.revokedBadge')} />\n ) : (\n <StatusChip tone=\"success\" label={t('apiTokens.active')} />\n )}\n </TableCell>\n <TableCell title={formatDateTime(token.lastUsedAt) || undefined}>\n {token.lastUsedAt ? formatRelativeTime(token.lastUsedAt) : t('common.never')}\n </TableCell>\n <TableCell>{token.expiresAt ? formatDateTime(token.expiresAt) : t('common.never')}</TableCell>\n <TableCell className=\"text-right\">\n {token.revokedAt ? null : (\n <InlineConfirm\n tone=\"danger\"\n title={t('apiTokens.revokeTitle', { name: token.name })}\n description={t('apiTokens.revokeDescription')}\n confirmLabel={t('common.revoke')}\n onConfirm={() => onRevoke(token)}\n trigger={\n <Button variant=\"outline\" size=\"sm\" aria-label={`${t('common.revoke')}: ${token.name}`}>\n {t('common.revoke')}\n </Button>\n }\n />\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import type { ApiToken } from '@shapio/client';\nimport { KeyRound, Plus } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { toast } from 'sonner';\nimport { useMe } from '@/api/auth';\nimport { useDraftRoleIds, useRoleNames } from '@/api/roles';\nimport { useApiTokens, useRevokeApiToken } from '@/api/tokens';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { SecretReveal } from '@/components/SecretReveal';\nimport { Button } from '@/components/ui/button';\nimport { CreateSheet } from './CreateSheet';\nimport { Table } from './Table';\n\nexport const ApiTokens = () => {\n const { t } = useTranslation();\n const tokens = useApiTokens();\n const { names: roleNames } = useRoleNames();\n const { draftRoleIds } = useDraftRoleIds();\n const siteName = useMe().data?.site.name ?? '';\n const revoke = useRevokeApiToken();\n const [creating, setCreating] = useState(false);\n // The new token's secret, held only in memory until the admin says they've copied it.\n const [secret, setSecret] = useState<string | undefined>(undefined);\n const revokeToken = async (token: ApiToken) => {\n await revoke.mutateAsync(token.id);\n toast.success(t('apiTokens.revoked'));\n };\n const createButton = (\n <Button onClick={() => setCreating(true)}>\n <Plus aria-hidden=\"true\" />\n {t('apiTokens.create')}\n </Button>\n );\n return (\n <Page width=\"full\">\n <PageHeader title={t('apiTokens.title')} actions={createButton} />\n {secret ? (\n <SecretReveal\n title={t('apiTokens.secretTitle')}\n description={t('apiTokens.secretDescription')}\n label={t('apiTokens.secretLabel')}\n secret={secret}\n dismissLabel={t('apiTokens.secretDone')}\n onDismiss={() => setSecret(undefined)}\n />\n ) : null}\n <QueryView\n query={tokens}\n isEmpty={(data) => data.length === 0}\n empty={\n <EmptyState\n icon={KeyRound}\n title={t('apiTokens.empty')}\n description={t('apiTokens.emptyDescription')}\n action={createButton}\n />\n }\n >\n {(data) => (\n <Table\n tokens={data}\n roleNames={roleNames}\n draftRoleIds={draftRoleIds}\n siteName={siteName}\n onRevoke={revokeToken}\n />\n )}\n </QueryView>\n <CreateSheet\n open={creating}\n onOpenChange={setCreating}\n onCreated={(created) => {\n setSecret(created.token);\n setCreating(false);\n }}\n // The secret took focus as it appeared; don't hand it back to the \"New token\" button.\n onCloseAutoFocus={(event) => secret !== undefined && event.preventDefault()}\n />\n </Page>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { Panel } from '@/components/Panel';\nimport { RadioTile } from '@/components/RadioTile';\nimport { useLookSelection } from '@/components/ThemeMenu/hooks/useLookSelection';\nimport { ThemeSwatches } from '@/components/ThemeSwatches';\nimport { RadioGroup } from '@/components/ui/radio-group';\n\nexport const Appearance = () => {\n const { t } = useTranslation();\n const { looks, selectedLook, selectLook } = useLookSelection();\n return (\n <Page width=\"full\">\n <PageHeader title={t('appearance.title')} />\n <Panel title={t('appearance.theme')} description={t('appearance.storedHere')}>\n <RadioGroup\n aria-label={t('appearance.theme')}\n value={selectedLook}\n onValueChange={selectLook}\n className=\"sm:grid-cols-2 xl:grid-cols-3\"\n >\n {looks.map((look) => (\n <RadioTile\n key={look.value}\n value={look.value}\n label={look.name}\n description={look.description}\n media={<ThemeSwatches themeKey={look.themeKey} variant={look.variant} size=\"lg\" />}\n />\n ))}\n </RadioGroup>\n </Panel>\n </Page>\n );\n};\n","import { useId, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRewriteText } from '@/api/assist';\nimport { AssistButton } from '@/components/AssistButton';\nimport { AssistError } from '@/components/AssistError';\nimport { Panel } from '@/components/Panel';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Textarea } from '@/components/ui/textarea';\nimport { REWRITE_MAX_INSTRUCTION, REWRITE_MAX_TEXT } from '@/constants/assist';\n\n/** A rewrite to check the configured model answers (writes nothing anywhere). */\nexport const TryIt = () => {\n const { t } = useTranslation();\n const id = useId();\n const [text, setText] = useState('');\n const [instruction, setInstruction] = useState('');\n const rewrite = useRewriteText();\n const ready = text.trim() !== '' && instruction.trim() !== '';\n return (\n <Panel title={t('assist.settings.tryIt')} titleAs=\"h2\">\n <form\n className=\"space-y-4\"\n onSubmit={(event) => {\n event.preventDefault();\n if (ready) {\n rewrite.mutate({ text: text.trim(), instruction: instruction.trim() });\n }\n }}\n >\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-text`}>{t('assist.settings.tryText')}</Label>\n <Textarea\n id={`${id}-text`}\n value={text}\n rows={3}\n maxLength={REWRITE_MAX_TEXT}\n onChange={(event) => setText(event.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-instruction`}>{t('assist.rewrite.instruction')}</Label>\n <Input\n id={`${id}-instruction`}\n value={instruction}\n maxLength={REWRITE_MAX_INSTRUCTION}\n placeholder={t('assist.rewrite.instructionPlaceholder')}\n onChange={(event) => setInstruction(event.target.value)}\n />\n </div>\n <AssistError error={rewrite.error} />\n <div className=\"flex justify-end\">\n <AssistButton\n type=\"submit\"\n variant=\"default\"\n size=\"default\"\n pending={rewrite.isPending}\n pendingLabel={t('assist.working')}\n disabled={!ready}\n >\n {t('assist.rewrite.run')}\n </AssistButton>\n </div>\n <div aria-live=\"polite\">\n {rewrite.data ? (\n <figure className=\"space-y-1 rounded-lg border bg-muted/40 p-3\">\n <figcaption className=\"text-meta text-muted-foreground\">\n {t('assist.rewrite.proposal', { model: rewrite.data.model })}\n </figcaption>\n <p className=\"text-sm whitespace-pre-wrap\">{rewrite.data.text}</p>\n </figure>\n ) : null}\n </div>\n </form>\n </Panel>\n );\n};\n","import type { AssistUsage } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { Panel } from '@/components/Panel';\nimport { formatMonth } from '@/helpers/formatDate';\n\ntype UsageProps = { usage: AssistUsage };\n\n/** This month's assist runs and tokens on this site (only for those who manage changes). */\nexport const Usage = ({ usage }: UsageProps) => {\n const { t } = useTranslation();\n const rows = [\n { key: 'runs', label: t('assist.settings.runs'), value: usage.runs },\n { key: 'input', label: t('assist.settings.inputTokens'), value: usage.inputTokens },\n { key: 'output', label: t('assist.settings.outputTokens'), value: usage.outputTokens },\n ];\n return (\n <Panel title={t('assist.settings.usage', { month: formatMonth(usage.month) })} titleAs=\"h2\">\n <dl className=\"grid gap-4 sm:grid-cols-3\">\n {rows.map((row) => (\n <div key={row.key} className=\"space-y-1\">\n <dt className=\"text-meta text-muted-foreground\">{row.label}</dt>\n <dd className=\"text-2xl font-semibold tabular-nums\">{row.value.toLocaleString()}</dd>\n </div>\n ))}\n </dl>\n </Panel>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useAssistStatus } from '@/api/assist';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { Panel } from '@/components/Panel';\nimport { QueryView } from '@/components/QueryView';\nimport { StatusChip } from '@/components/StatusChip';\nimport { ASSIST_DOCS_URL } from '@/constants/assist';\nimport { ExternalLink } from '@/features/Publishing/ExternalLink';\nimport { TryIt } from './TryIt';\nimport { Usage } from './Usage';\n\n/**\n * Settings → Assist: whether editor assists are on, with which provider and model, this month's usage\n * (for those who manage changes) and a place to try a rewrite. Configuration is environment-only (no key\n * entry here, by design), so the page links to the guide.\n */\nexport const Assist = () => {\n const { t } = useTranslation();\n const status = useAssistStatus();\n return (\n <Page width=\"narrow\">\n <PageHeader title={t('settings.assist')} />\n <QueryView query={status} loadingRows={3}>\n {(data) => (\n <>\n <Panel\n title={t('assist.settings.status')}\n titleAs=\"h2\"\n actions={\n <StatusChip\n tone={data.enabled ? 'success' : 'muted'}\n label={data.enabled ? t('assist.settings.on') : t('assist.settings.off')}\n />\n }\n >\n {data.enabled ? (\n <dl className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between gap-3\">\n <dt className=\"text-muted-foreground\">{t('assist.settings.provider')}</dt>\n <dd className=\"font-mono\">{data.provider}</dd>\n </div>\n <div className=\"flex justify-between gap-3\">\n <dt className=\"text-muted-foreground\">{t('assist.settings.model')}</dt>\n <dd className=\"min-w-0 font-mono break-all\">{data.model}</dd>\n </div>\n </dl>\n ) : (\n <p className=\"text-sm\">{t('assist.settings.offDescription')}</p>\n )}\n <p className=\"mt-4 text-meta\">\n <ExternalLink href={ASSIST_DOCS_URL}>{t('assist.settings.guide')}</ExternalLink>\n </p>\n </Panel>\n {data.enabled && data.usage ? <Usage usage={data.usage} /> : null}\n {data.enabled ? <TryIt /> : null}\n </>\n )}\n </QueryView>\n </Page>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport { hasErrorCode } from '@/api/errors';\nimport { useDeleteLocale } from '@/api/locales';\nimport { i18next } from '@/app/i18n';\n\ntype WithContent = { locale: Locale; affectedHeads: number };\n\n/** The content count the server reports when a locale with content is deleted without acknowledgement. */\nconst affectedHeadsOf = (error: unknown): number | null => {\n const details = (error as { details?: { plan?: { impact?: { affectedHeads?: unknown } } } }).details;\n const count = details?.plan?.impact?.affectedHeads;\n return typeof count === 'number' ? count : null;\n};\n\nconst announceDeleted = (locale: Locale) =>\n toast.success(i18next.t('locales.deleted', { label: locale.label }));\n\n/**\n * Deleting a locale purges its content. The first attempt, from the row's inline confirmation, goes without\n * acknowledgement: an empty locale is simply removed. One holding content is refused with its content count,\n * and the question moves to a blocking dialog where the admin acknowledges that count.\n */\nexport const useDeleteLocaleFlow = () => {\n const deleteLocale = useDeleteLocale();\n const [withContent, setWithContent] = useState<WithContent | undefined>(undefined);\n const [open, setOpen] = useState(false);\n const attempt = async (locale: Locale) => {\n try {\n await deleteLocale.mutateAsync({ code: locale.code, acknowledged: false });\n } catch (error) {\n if (!hasErrorCode(error, 'SCHEMA_CHANGE_NOT_ACKNOWLEDGED')) {\n throw error;\n }\n deleteLocale.reset();\n setWithContent({ locale, affectedHeads: affectedHeadsOf(error) ?? 0 });\n setOpen(true);\n return;\n }\n announceDeleted(locale);\n };\n const confirm = () => {\n if (!withContent) {\n return;\n }\n deleteLocale.mutate(\n { code: withContent.locale.code, acknowledged: true },\n {\n onSuccess: () => {\n announceDeleted(withContent.locale);\n setOpen(false);\n },\n },\n );\n };\n return {\n attempt,\n withContent,\n open,\n onOpenChange: setOpen,\n confirm,\n pending: deleteLocale.isPending,\n error: deleteLocale.error,\n };\n};\n","import type { Locale } from '@shapio/client';\nimport { MAX_FALLBACK_CHAIN } from '@shapio/schema';\nimport { ArrowDown, ArrowUp, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { useController, type Control } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { FormFieldError } from '@/components/FormFieldError';\nimport { InfoHint } from '@/components/InfoHint';\nimport { Button } from '@/components/ui/button';\nimport { FieldLegend, FieldSet } from '@/components/ui/field';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport type { LocaleValues } from '../hooks/useLocaleForm';\n\nconst LEGEND_ID = 'locale-fallbacks-legend';\n\ntype FallbackChainProps = {\n control: Control<LocaleValues>;\n /** Every configured locale; the one being edited is excluded from the choices. */\n locales: readonly Locale[];\n code: string;\n};\n\n/** The ordered locales delivery tries when content is missing in this one (the default is always last). */\nexport const FallbackChain = ({ control, locales, code }: FallbackChainProps) => {\n const { t } = useTranslation();\n const { field, fieldState } = useController({ control, name: 'fallbacks' });\n const [adding, setAdding] = useState('');\n const chain = field.value;\n const labelOf = (value: string) => locales.find((locale) => locale.code === value)?.label ?? value;\n const available = locales.filter((locale) => locale.code !== code && !chain.includes(locale.code));\n const move = (from: number, to: number) => {\n const next = [...chain];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as string);\n field.onChange(next);\n };\n return (\n <FieldSet className=\"gap-3\" aria-labelledby={LEGEND_ID}>\n <FieldLegend variant=\"label\" className=\"mb-0 flex items-center gap-1\">\n <span id={LEGEND_ID}>{t('locales.fallbacks')}</span>\n <InfoHint about={t('locales.fallbacks')}>{t('locales.fallbacksHint')}</InfoHint>\n </FieldLegend>\n {chain.length > 0 ? (\n <ol className=\"space-y-1\">\n {chain.map((value, index) => (\n <li key={value} className=\"flex items-center gap-2 rounded-lg border py-1 pr-1 pl-3 text-sm\">\n <span className=\"w-5 text-muted-foreground\">{index + 1}.</span>\n <span className=\"flex-1\">\n {labelOf(value)} <span className=\"font-mono text-xs text-muted-foreground\">{value}</span>\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('locales.moveUp', { locale: labelOf(value) })}\n disabled={index === 0}\n onClick={() => move(index, index - 1)}\n >\n <ArrowUp aria-hidden=\"true\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('locales.moveDown', { locale: labelOf(value) })}\n disabled={index === chain.length - 1}\n onClick={() => move(index, index + 1)}\n >\n <ArrowDown aria-hidden=\"true\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('locales.removeFallback', { locale: labelOf(value) })}\n onClick={() => field.onChange(chain.filter((entry) => entry !== value))}\n >\n <X aria-hidden=\"true\" />\n </Button>\n </li>\n ))}\n </ol>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{t('locales.noFallbacks')}</p>\n )}\n {available.length > 0 && chain.length < MAX_FALLBACK_CHAIN ? (\n <Select\n value={adding}\n onValueChange={(value) => {\n field.onChange([...chain, value]);\n setAdding('');\n }}\n >\n <SelectTrigger className=\"w-full sm:w-64\" aria-label={t('locales.addFallback')}>\n <SelectValue placeholder={t('locales.addFallback')} />\n </SelectTrigger>\n <SelectContent>\n {available.map((locale) => (\n <SelectItem key={locale.code} value={locale.code}>\n {locale.label} ({locale.code})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <FormFieldError message={fieldState.error?.message} />\n </FieldSet>\n );\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { Locale } from '@shapio/client';\nimport { LOCALE_CODE_PATTERN } from '@shapio/schema';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useCreateLocale, useUpdateLocale } from '@/api/locales';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\n\nconst MAX_CODE_LENGTH = 35;\n\nconst localeSchema = z.object({\n code: z\n .string()\n .trim()\n .min(1, 'validation.required')\n .max(MAX_CODE_LENGTH, 'validation.localeCode')\n .regex(LOCALE_CODE_PATTERN, 'validation.localeCode'),\n label: requiredText(),\n fallbacks: z.array(z.string()),\n});\n\nexport type LocaleValues = z.infer<typeof localeSchema>;\n\nconst valuesFor = (locale: Locale | undefined): LocaleValues => ({\n code: locale?.code ?? '',\n label: locale?.label ?? '',\n fallbacks: locale?.fallbacks ?? [],\n});\n\n/** Adds a locale, or edits one's label and fallback chain (the code is its identity and never changes). */\nexport const useLocaleForm = (open: boolean, locale: Locale | undefined, onDone: () => void) => {\n const createLocale = useCreateLocale();\n const updateLocale = useUpdateLocale();\n const form = useForm<LocaleValues>({\n resolver: zodResolver(localeSchema),\n defaultValues: valuesFor(locale),\n });\n const { reset } = form;\n useEffect(() => {\n if (open) {\n reset(valuesFor(locale));\n createLocale.reset();\n updateLocale.reset();\n }\n // Only when the dialog opens; the mutation objects change identity on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, locale, reset]);\n const onSubmit = form.handleSubmit(async ({ code, label, fallbacks }) => {\n const result = await settle(\n locale\n ? updateLocale.mutateAsync({ code: locale.code, input: { label, fallbacks } })\n : createLocale.mutateAsync({ code, label, fallbacks }),\n );\n if (!result.ok) {\n return;\n }\n toast.success(i18next.t(locale ? 'locales.saved' : 'locales.created', { label }));\n onDone();\n });\n const mutation = locale ? updateLocale : createLocale;\n return { form, onSubmit, pending: mutation.isPending, error: mutation.error };\n};\n","import type { Locale } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormSheet } from '@/components/FormSheet';\nimport { FormTextField } from '@/components/FormTextField';\nimport { FallbackChain } from '../FallbackChain';\nimport { useLocaleForm } from '../hooks/useLocaleForm';\n\ntype LocaleSheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Edit this locale; add a new one when undefined. */\n locale: Locale | undefined;\n locales: readonly Locale[];\n};\n\nexport const LocaleSheet = ({ open, onOpenChange, locale, locales }: LocaleSheetProps) => {\n const { t } = useTranslation();\n const { form, onSubmit, pending, error } = useLocaleForm(open, locale, () => onOpenChange(false));\n const code = form.watch('code');\n return (\n <FormSheet\n open={open}\n onOpenChange={onOpenChange}\n size=\"md\"\n title={locale ? t('locales.editTitle', { label: locale.label }) : t('locales.addTitle')}\n dirty={form.formState.isDirty}\n pending={pending}\n submitLabel={locale ? t('common.saveChanges') : t('locales.add')}\n pendingLabel={t('common.saving')}\n onSubmit={(event) => void onSubmit(event)}\n >\n <FormTextField\n control={form.control}\n name=\"code\"\n label={t('locales.code')}\n hint={t('locales.codeHint')}\n autoComplete=\"off\"\n spellCheck={false}\n className=\"font-mono\"\n disabled={locale !== undefined}\n />\n <FormTextField control={form.control} name=\"label\" label={t('locales.label')} autoComplete=\"off\" />\n <FallbackChain control={form.control} locales={locales} code={code} />\n <FormError error={error} />\n </FormSheet>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { MoreHorizontal, Pencil, Star, Trash2 } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { InlineConfirm } from '@/components/InlineConfirm';\nimport { RowTitle } from '@/components/RowTitle';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { TableCell, TableRow } from '@/components/ui/table';\n\ntype RowProps = {\n locale: Locale;\n /** The fallbacks delivery tries, the default locale last. */\n chain: readonly string[];\n canManage: boolean;\n onEdit: (locale: Locale) => void;\n onMakeDefault: (locale: Locale) => void;\n /** The first delete attempt; resolves once it's done or handed to the content acknowledgement. */\n onDelete: (locale: Locale) => Promise<unknown>;\n};\n\n/** One locale. Delete asks inline, anchored to the row's menu button. */\nexport const Row = ({ locale, chain, canManage, onEdit, onMakeDefault, onDelete }: RowProps) => {\n const { t } = useTranslation();\n const [deleting, setDeleting] = useState(false);\n return (\n <TableRow>\n <TableCell>\n <span className=\"flex items-center gap-2\">\n <RowTitle>{locale.label}</RowTitle>\n {locale.isDefault ? <Badge variant=\"secondary\">{t('locales.default')}</Badge> : null}\n </span>\n </TableCell>\n <TableCell className=\"font-mono text-xs\">{locale.code}</TableCell>\n <TableCell className=\"font-mono text-xs\">\n {chain.length > 0 ? chain.join(' → ') : t('common.none')}\n </TableCell>\n <TableCell className=\"text-right\">\n {canManage ? (\n <DropdownMenu>\n <InlineConfirm\n tone=\"danger\"\n open={deleting}\n onOpenChange={setDeleting}\n title={t('locales.deleteTitle', { label: locale.label })}\n description={t('locales.deleteDescription')}\n confirmLabel={t('common.delete')}\n pendingLabel={t('locales.deleting')}\n onConfirm={() => onDelete(locale)}\n >\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label={`${t('common.actions')}: ${locale.label}`}>\n <MoreHorizontal aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n </InlineConfirm>\n <DropdownMenuContent align=\"end\" onCloseAutoFocus={(event) => deleting && event.preventDefault()}>\n <DropdownMenuItem onSelect={() => onEdit(locale)}>\n <Pencil aria-hidden=\"true\" />\n {t('common.edit')}\n </DropdownMenuItem>\n {locale.isDefault ? null : (\n <>\n <DropdownMenuItem onSelect={() => onMakeDefault(locale)}>\n <Star aria-hidden=\"true\" />\n {t('locales.makeDefault')}\n </DropdownMenuItem>\n <DropdownMenuItem variant=\"destructive\" onSelect={() => setDeleting(true)}>\n <Trash2 aria-hidden=\"true\" />\n {t('common.delete')}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n </TableCell>\n </TableRow>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { TableCard } from '@/components/TableCard';\nimport { Table as TableRoot, TableBody, TableHead, TableHeader, TableRow } from '@/components/ui/table';\nimport { Row } from './Row';\n\ntype TableProps = {\n locales: readonly Locale[];\n canManage: boolean;\n onEdit: (locale: Locale) => void;\n onMakeDefault: (locale: Locale) => void;\n onDelete: (locale: Locale) => Promise<unknown>;\n};\n\nexport const Table = ({ locales, canManage, onEdit, onMakeDefault, onDelete }: TableProps) => {\n const { t } = useTranslation();\n const defaultLocale = locales.find((locale) => locale.isDefault);\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('locales.label')}</TableHead>\n <TableHead>{t('locales.code')}</TableHead>\n <TableHead>{t('locales.fallbacks')}</TableHead>\n <TableHead>\n <span className=\"sr-only\">{t('common.actions')}</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {locales.map((locale) => (\n <Row\n key={locale.code}\n locale={locale}\n chain={[\n ...locale.fallbacks,\n ...(defaultLocale && !locale.isDefault && !locale.fallbacks.includes(defaultLocale.code)\n ? [defaultLocale.code]\n : []),\n ]}\n canManage={canManage}\n onEdit={onEdit}\n onMakeDefault={onMakeDefault}\n onDelete={onDelete}\n />\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { Globe, Plus } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { toast } from 'sonner';\nimport { useLocales, useSetDefaultLocale } from '@/api/locales';\nimport { ConfirmDialog } from '@/components/ConfirmDialog';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { Button } from '@/components/ui/button';\nimport { useNetworkPermission } from '@/features/Network/hooks/useNetworkPermission';\nimport { useConfirmTarget } from '@/hooks/useConfirmTarget';\nimport { useDeleteLocaleFlow } from './hooks/useDeleteLocaleFlow';\nimport { LocaleSheet } from './LocaleSheet';\nimport { Table } from './Table';\n\n/** Content locales (ADR 0004): code, label, the default locale and each locale's fallback chain. */\nexport const Locales = () => {\n const { t } = useTranslation();\n const locales = useLocales();\n // Locales are shared by every site: a role granting schema.create on one site doesn't manage them.\n const canManage = useNetworkPermission('schema.create');\n const setDefault = useSetDefaultLocale();\n const makeDefault = useConfirmTarget<Locale>();\n const deletion = useDeleteLocaleFlow();\n const [sheet, setSheet] = useState<{ open: boolean; locale: Locale | undefined }>({\n open: false,\n locale: undefined,\n });\n const currentDefault = locales.data?.find((locale) => locale.isDefault);\n const withContent = deletion.withContent;\n return (\n <Page width=\"full\">\n <PageHeader\n title={t('locales.title')}\n actions={\n canManage ? (\n <Button onClick={() => setSheet({ open: true, locale: undefined })}>\n <Plus aria-hidden=\"true\" />\n {t('locales.add')}\n </Button>\n ) : null\n }\n />\n <QueryView\n query={locales}\n isEmpty={(data) => data.length === 0}\n empty={<EmptyState icon={Globe} title={t('locales.empty')} />}\n >\n {(data) => (\n <Table\n locales={data}\n canManage={canManage}\n onEdit={(locale) => setSheet({ open: true, locale })}\n onMakeDefault={(locale) => {\n setDefault.reset();\n makeDefault.ask(locale);\n }}\n onDelete={deletion.attempt}\n />\n )}\n </QueryView>\n <LocaleSheet\n open={sheet.open}\n onOpenChange={(open) => setSheet((current) => ({ ...current, open }))}\n locale={sheet.locale}\n locales={locales.data ?? []}\n />\n <ConfirmDialog\n open={makeDefault.open}\n onOpenChange={makeDefault.onOpenChange}\n title={t('locales.defaultTitle', { label: makeDefault.target?.label ?? '' })}\n description={t('locales.defaultDescription', {\n label: makeDefault.target?.label ?? '',\n current: currentDefault?.label ?? '',\n })}\n acknowledgement={t('locales.defaultAcknowledge')}\n confirmLabel={t('locales.makeDefault')}\n destructive\n pending={setDefault.isPending}\n pendingLabel={t('common.saving')}\n error={setDefault.error}\n onConfirm={() => {\n const target = makeDefault.target;\n if (target) {\n setDefault.mutate(target.code, {\n onSuccess: () => {\n toast.success(t('locales.defaultChanged', { label: target.label }));\n makeDefault.close();\n },\n });\n }\n }}\n />\n <ConfirmDialog\n open={deletion.open}\n onOpenChange={deletion.onOpenChange}\n title={t('locales.deleteTitle', { label: withContent?.locale.label ?? '' })}\n description={t('locales.deleteContent', {\n count: withContent?.affectedHeads ?? 0,\n label: withContent?.locale.label ?? '',\n })}\n acknowledgement={t('locales.deleteAcknowledge', { count: withContent?.affectedHeads ?? 0 })}\n confirmLabel={t('common.delete')}\n destructive\n pending={deletion.pending}\n pendingLabel={t('locales.deleting')}\n error={deletion.error}\n onConfirm={deletion.confirm}\n />\n </Page>\n );\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useMe, useUpdateProfile } from '@/api/auth';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\n\nconst profileSchema = z.object({ name: requiredText() });\n\nexport type ProfileValues = z.infer<typeof profileSchema>;\n\n/** The signed-in admin's display name. Email changes go through an owner (Users), not self-service. */\nexport const useProfileDetailsForm = () => {\n const { data: me } = useMe();\n const updateProfile = useUpdateProfile();\n const form = useForm<ProfileValues>({\n resolver: zodResolver(profileSchema),\n defaultValues: { name: me?.user.name ?? '' },\n });\n const { reset, formState } = form;\n const name = me?.user.name;\n // Follow the server's value when it changes elsewhere, unless the user is mid-edit.\n useEffect(() => {\n if (!formState.isDirty && name !== undefined) {\n reset({ name });\n }\n }, [name, reset, formState.isDirty]);\n const onSubmit = form.handleSubmit(async (values) => {\n const saved = await settle(updateProfile.mutateAsync(values));\n if (!saved.ok) {\n return;\n }\n reset({ name: saved.value.name });\n toast.success(i18next.t('profile.detailsSaved'));\n });\n return { form, onSubmit, updateProfile, email: me?.user.email ?? '' };\n};\n","import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormTextField } from '@/components/FormTextField';\nimport { HintedLabel } from '@/components/HintedLabel';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { Field, FieldGroup } from '@/components/ui/field';\nimport { Input } from '@/components/ui/input';\nimport { useProfileDetailsForm } from '../hooks/useProfileDetailsForm';\n\ntype DetailsProps = { onDirtyChange: (dirty: boolean) => void };\n\nconst EMAIL_ID = 'profile-email';\nconst EMAIL_HINT_ID = 'profile-email-hint';\n\nexport const Details = ({ onDirtyChange }: DetailsProps) => {\n const { t } = useTranslation();\n const { form, onSubmit, updateProfile, email } = useProfileDetailsForm();\n const { isDirty } = form.formState;\n useEffect(() => onDirtyChange(isDirty), [isDirty, onDirtyChange]);\n return (\n <Panel title={t('profile.detailsTitle')}>\n <form noValidate onSubmit={(event) => void onSubmit(event)} className=\"max-w-md\">\n <FieldGroup>\n <FormTextField control={form.control} name=\"name\" label={t('auth.name')} autoComplete=\"name\" />\n <Field>\n <HintedLabel\n htmlFor={EMAIL_ID}\n label={t('auth.email')}\n hint={t('profile.emailHint')}\n hintId={EMAIL_HINT_ID}\n />\n <Input id={EMAIL_ID} value={email} readOnly aria-describedby={EMAIL_HINT_ID} />\n </Field>\n <FormError error={updateProfile.error} />\n <div>\n <SubmitButton\n pending={updateProfile.isPending}\n pendingLabel={t('common.saving')}\n disabled={!isDirty}\n >\n {t('common.saveChanges')}\n </SubmitButton>\n </div>\n </FieldGroup>\n </form>\n </Panel>\n );\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useChangePassword } from '@/api/auth';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { newPasswordField, withPasswordConfirmation } from '@/helpers/validation';\n\nconst changePasswordSchema = withPasswordConfirmation({\n currentPassword: z.string().min(1, 'validation.required'),\n password: newPasswordField(),\n});\n\nexport type ChangePasswordValues = z.infer<typeof changePasswordSchema>;\n\nconst EMPTY: ChangePasswordValues = { currentPassword: '', password: '', confirmPassword: '' };\n\nexport const useChangePasswordForm = () => {\n const changePassword = useChangePassword();\n const form = useForm<ChangePasswordValues>({\n resolver: zodResolver(changePasswordSchema),\n defaultValues: EMPTY,\n });\n const onSubmit = form.handleSubmit(async ({ currentPassword, password }) => {\n if (!(await settle(changePassword.mutateAsync({ currentPassword, newPassword: password }))).ok) {\n return;\n }\n form.reset(EMPTY);\n toast.success(i18next.t('profile.passwordChanged'));\n });\n return { form, onSubmit, changePassword };\n};\n","import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormTextField } from '@/components/FormTextField';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { FieldGroup } from '@/components/ui/field';\nimport { useChangePasswordForm } from '../hooks/useChangePasswordForm';\n\ntype PasswordProps = { onDirtyChange: (dirty: boolean) => void };\n\nexport const Password = ({ onDirtyChange }: PasswordProps) => {\n const { t } = useTranslation();\n const { form, onSubmit, changePassword } = useChangePasswordForm();\n const { isDirty } = form.formState;\n useEffect(() => onDirtyChange(isDirty), [isDirty, onDirtyChange]);\n return (\n <Panel title={t('profile.passwordTitle')} description={t('profile.passwordDescription')}>\n <form noValidate onSubmit={(event) => void onSubmit(event)} className=\"max-w-md\">\n <FieldGroup>\n <FormTextField\n control={form.control}\n name=\"currentPassword\"\n label={t('profile.currentPassword')}\n type=\"password\"\n autoComplete=\"current-password\"\n />\n <FormTextField\n control={form.control}\n name=\"password\"\n label={t('auth.newPassword')}\n description={t('auth.passwordHint')}\n type=\"password\"\n autoComplete=\"new-password\"\n />\n <FormTextField\n control={form.control}\n name=\"confirmPassword\"\n label={t('auth.confirmPassword')}\n type=\"password\"\n autoComplete=\"new-password\"\n />\n <FormError error={changePassword.error} />\n <div>\n <SubmitButton pending={changePassword.isPending} pendingLabel={t('common.saving')}>\n {t('profile.changePassword')}\n </SubmitButton>\n </div>\n </FieldGroup>\n </form>\n </Panel>\n );\n};\n","import { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { UnsavedChangesGuard } from '@/components/UnsavedChangesGuard';\nimport { Details } from './Details';\nimport { Password } from './Password';\n\nexport const Profile = () => {\n const { t } = useTranslation();\n const [detailsDirty, setDetailsDirty] = useState(false);\n const [passwordDirty, setPasswordDirty] = useState(false);\n const onDetailsDirtyChange = useCallback((dirty: boolean) => setDetailsDirty(dirty), []);\n const onPasswordDirtyChange = useCallback((dirty: boolean) => setPasswordDirty(dirty), []);\n return (\n <Page width=\"full\">\n <PageHeader title={t('profile.title')} />\n <Details onDirtyChange={onDetailsDirtyChange} />\n <Password onDirtyChange={onPasswordDirtyChange} />\n <UnsavedChangesGuard when={detailsDirty || passwordDirty} />\n </Page>\n );\n};\n","import { ImagePlus } from 'lucide-react';\nimport { useController, type Control } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { FormFieldError } from '@/components/FormFieldError';\nimport { HintedLabel } from '@/components/HintedLabel';\nimport { Button } from '@/components/ui/button';\nimport { Field } from '@/components/ui/field';\nimport { useMediaPickerDialog } from '@/fields/hooks/useMediaPickerDialog';\nimport { AssetTile } from '@/fields/MediaField/AssetTile';\nimport { describedBy } from '@/helpers/describedBy';\nimport { useMediaPermissions } from '@/hooks/useMediaPermissions';\nimport type { SeoSettingsValues } from '../helpers';\n\ntype DefaultImageProps = {\n control: Control<SeoSettingsValues>;\n /** The chosen asset is private: delivery would never show it. */\n imagePrivate: boolean;\n};\n\nconst BUTTON_ID = 'seo-default-image';\nconst HINT_ID = `${BUTTON_ID}-hint`;\nconst ERROR_ID = `${BUTTON_ID}-error`;\n\n/** The site's default social image: one public image from the library, chosen in the media sheet. */\nexport const DefaultImage = ({ control, imagePrivate }: DefaultImageProps) => {\n const { t } = useTranslation();\n const { field, fieldState } = useController({ control, name: 'imageId' });\n // A private choice is caught here; anything else the server refuses (SEO_IMAGE_INVALID) arrives as an error.\n const error = imagePrivate ? t('seo.settings.imagePrivate') : fieldState.error?.message;\n const { canWrite } = useMediaPermissions();\n const picker = useMediaPickerDialog();\n const choose = async () => {\n const picked = await picker.pickMedia({ multiple: false, allowedKinds: ['image'] });\n const first = picked?.[0];\n if (first) {\n field.onChange(first.id);\n }\n };\n return (\n <Field data-invalid={error ? true : undefined}>\n <HintedLabel\n htmlFor={BUTTON_ID}\n label={t('seo.settings.image')}\n hint={t('seo.settings.imageHint')}\n hintId={HINT_ID}\n />\n {field.value ? (\n <ul>\n <AssetTile\n assetId={field.value}\n inputId={BUTTON_ID}\n index={0}\n count={1}\n editable\n canEditAlt={canWrite}\n onRemove={() => field.onChange(null)}\n />\n </ul>\n ) : null}\n <div>\n <Button\n id={BUTTON_ID}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-describedby={describedBy(HINT_ID, error ? ERROR_ID : undefined)}\n onClick={() => void choose()}\n >\n <ImagePlus aria-hidden=\"true\" />\n {field.value ? t('seo.settings.changeImage') : t('seo.settings.chooseImage')}\n </Button>\n </div>\n <FormFieldError id={error ? ERROR_ID : undefined} message={error} />\n {picker.dialog}\n </Field>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport {\n isValidTitleTemplate,\n SEO_TWITTER_HANDLE_PATTERN,\n type SeoDefaults,\n type SeoLocaleDefaults,\n} from '@shapio/schema';\nimport { z } from 'zod';\n\n/** Lengths from `SeoLocaleDefaultsSchema` (the server checks them too). */\nconst SHORT_MAX = 200;\nconst DESCRIPTION_MAX = 1000;\n\nconst optionalText = (max: number) => z.string().trim().max(max, 'validation.tooLong');\n\nconst localeTextsSchema = z.object({\n siteName: optionalText(SHORT_MAX),\n titleTemplate: optionalText(SHORT_MAX).refine(\n (value) => value === '' || isValidTitleTemplate(value),\n 'validation.titleTemplate',\n ),\n description: optionalText(DESCRIPTION_MAX),\n});\n\nexport const seoSettingsSchema = z.object({\n locales: z.record(z.string(), localeTextsSchema),\n imageId: z.string().nullable(),\n twitterHandle: z\n .string()\n .trim()\n .refine((value) => value === '' || SEO_TWITTER_HANDLE_PATTERN.test(value), 'validation.twitterHandle'),\n});\n\nexport type SeoLocaleTexts = z.infer<typeof localeTextsSchema>;\nexport type SeoSettingsValues = z.infer<typeof seoSettingsSchema>;\n\nconst EMPTY_TEXTS: SeoLocaleTexts = { siteName: '', titleTemplate: '', description: '' };\n\n/**\n * The form's values: every locale of the instance (and any other locale the defaults still hold) with all\n * three texts, empty strings for unset ones, so switching locale never loses an edit.\n */\nexport const toSeoSettingsValues = (seo: SeoDefaults, locales: readonly Locale[]): SeoSettingsValues => {\n const codes = [...new Set([...locales.map((locale) => locale.code), ...Object.keys(seo.locales)])];\n return {\n locales: Object.fromEntries(codes.map((code) => [code, { ...EMPTY_TEXTS, ...seo.locales[code] }])),\n imageId: seo.imageId,\n twitterHandle: seo.twitterHandle ?? '',\n };\n};\n\n/** What is saved: unset texts and locales without any text are left out. */\nexport const toSeoDefaults = (values: SeoSettingsValues): SeoDefaults => {\n const locales: Record<string, SeoLocaleDefaults> = {};\n for (const [code, texts] of Object.entries(values.locales)) {\n const kept = Object.fromEntries(\n Object.entries(texts)\n .map(([key, value]) => [key, value.trim()] as const)\n .filter(([, value]) => value !== ''),\n ) as SeoLocaleDefaults;\n if (Object.keys(kept).length > 0) {\n locales[code] = kept;\n }\n }\n const handle = values.twitterHandle.trim();\n return { locales, imageId: values.imageId, twitterHandle: handle === '' ? null : handle };\n};\n\n/** The first locale with an invalid text, so a refused save can show it. */\nexport const firstLocaleWithErrors = (errors: { locales?: Record<string, unknown> }): string | undefined =>\n Object.keys(errors.locales ?? {})[0];\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { Locale } from '@shapio/client';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\nimport { useForm, useWatch, type FieldErrors } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { hasErrorCode, isConflict } from '@/api/errors';\nimport { useMediaAsset } from '@/api/media';\nimport { siteSeoQueryOptions, useUpdateSiteSeo, type SiteSeo } from '@/api/seo';\nimport { i18next } from '@/app/i18n';\nimport { describeError } from '@/helpers/describeError';\nimport { reportError } from '@/helpers/reportError';\nimport {\n firstLocaleWithErrors,\n seoSettingsSchema,\n toSeoDefaults,\n toSeoSettingsValues,\n type SeoSettingsValues,\n} from '../helpers';\n\n/** The server refused the default image (another site's, not an image, or private). */\nconst SEO_IMAGE_INVALID = 'SEO_IMAGE_INVALID';\n\n/**\n * Settings → SEO: the site's default texts per locale, default social image and Twitter handle, saved with\n * the site version they were read at (a conflict asks to reload). The image must be public: a private one is\n * refused here before the server would.\n */\nexport const useSeoSettingsForm = (siteSeo: SiteSeo, locales: readonly Locale[]) => {\n const queryClient = useQueryClient();\n const update = useUpdateSiteSeo();\n const defaultLocale = locales.find((locale) => locale.isDefault)?.code ?? locales[0]?.code ?? '';\n const [locale, setLocale] = useState(defaultLocale);\n const [version, setVersion] = useState(siteSeo.version);\n const form = useForm<SeoSettingsValues>({\n resolver: zodResolver(seoSettingsSchema),\n defaultValues: toSeoSettingsValues(siteSeo.seo, locales),\n });\n const imageId = useWatch({ control: form.control, name: 'imageId' });\n const image = useMediaAsset(imageId ?? undefined);\n const imagePrivate = imageId !== null && image.data?.visibility === 'private';\n const { clearErrors } = form;\n // The server's verdict on an image is about that image: another choice clears it.\n useEffect(() => clearErrors('imageId'), [imageId, clearErrors]);\n\n const reload = async () => {\n try {\n const fresh = await queryClient.fetchQuery({ ...siteSeoQueryOptions, staleTime: 0 });\n form.reset(toSeoSettingsValues(fresh.seo, locales));\n setVersion(fresh.version);\n } catch (error) {\n reportError(error, 'reloading the SEO settings');\n }\n };\n\n const save = async (values: SeoSettingsValues) => {\n if (imagePrivate) {\n return;\n }\n try {\n const saved = await update.mutateAsync({ expectedVersion: version, seo: toSeoDefaults(values) });\n form.reset(toSeoSettingsValues(saved.seo, locales));\n setVersion(saved.version);\n toast.success(i18next.t('seo.settings.saved'));\n } catch (error) {\n if (isConflict(error)) {\n toast.error(i18next.t('seo.settings.conflict'), {\n action: { label: i18next.t('seo.settings.reload'), onClick: () => void reload() },\n });\n return;\n }\n if (hasErrorCode(error, SEO_IMAGE_INVALID)) {\n form.setError('imageId', { message: describeError(error) }, { shouldFocus: false });\n return;\n }\n toast.error(describeError(error));\n }\n };\n\n const showInvalidLocale = (errors: FieldErrors<SeoSettingsValues>) => {\n const invalid = firstLocaleWithErrors(errors);\n if (invalid !== undefined) {\n setLocale(invalid);\n }\n };\n\n return {\n form,\n locale,\n setLocale,\n imagePrivate,\n pending: update.isPending,\n onSubmit: form.handleSubmit(save, showInvalidLocale),\n };\n};\n","import type { Locale } from '@shapio/client';\nimport type { Control } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { FormTextareaField } from '@/components/FormTextareaField';\nimport { FormTextField } from '@/components/FormTextField';\nimport { Panel } from '@/components/Panel';\nimport { FieldGroup } from '@/components/ui/field';\nimport { LocaleSelect } from '@/features/Content/LocaleSelect';\nimport type { SeoSettingsValues } from '../helpers';\n\ntype LocaleTextsProps = {\n control: Control<SeoSettingsValues>;\n locales: readonly Locale[];\n locale: string;\n onLocaleChange: (code: string) => void;\n};\n\n/** Site name, title template and description for one locale at a time; empty ones follow the fallbacks. */\nexport const LocaleTexts = ({ control, locales, locale, onLocaleChange }: LocaleTextsProps) => {\n const { t } = useTranslation();\n return (\n <Panel\n title={t('seo.settings.textsTitle')}\n titleAs=\"h2\"\n actions={\n locales.length > 1 ? (\n <LocaleSelect locales={locales} value={locale} onChange={onLocaleChange} size=\"sm\" />\n ) : null\n }\n >\n <FieldGroup key={locale} className=\"max-w-xl\">\n <FormTextField\n control={control}\n name={`locales.${locale}.siteName`}\n label={t('seo.settings.siteName')}\n hint={t('seo.settings.siteNameHint')}\n />\n <FormTextField\n control={control}\n name={`locales.${locale}.titleTemplate`}\n label={t('seo.settings.titleTemplate')}\n hint={t('seo.settings.titleTemplateHint')}\n placeholder={t('seo.settings.titleTemplatePlaceholder')}\n />\n <FormTextareaField\n control={control}\n name={`locales.${locale}.description`}\n label={t('seo.settings.description')}\n hint={t('seo.settings.descriptionHint')}\n rows={3}\n />\n </FieldGroup>\n </Panel>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { useLocales } from '@/api/locales';\nimport { useSiteSeo, type SiteSeo } from '@/api/seo';\nimport { FormTextField } from '@/components/FormTextField';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { Panel } from '@/components/Panel';\nimport { QueryView } from '@/components/QueryView';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { FieldGroup } from '@/components/ui/field';\nimport { UnsavedChangesGuard } from '@/components/UnsavedChangesGuard';\nimport { DefaultImage } from './DefaultImage';\nimport { useSeoSettingsForm } from './hooks/useSeoSettingsForm';\nimport { LocaleTexts } from './LocaleTexts';\n\ntype SeoFormProps = { siteSeo: SiteSeo; locales: readonly Locale[] };\n\nconst SeoForm = ({ siteSeo, locales }: SeoFormProps) => {\n const { t } = useTranslation();\n const { form, locale, setLocale, imagePrivate, pending, onSubmit } = useSeoSettingsForm(siteSeo, locales);\n const { isDirty } = form.formState;\n return (\n <form noValidate onSubmit={(event) => void onSubmit(event)} className=\"space-y-6\">\n <UnsavedChangesGuard when={isDirty} />\n <LocaleTexts control={form.control} locales={locales} locale={locale} onLocaleChange={setLocale} />\n <Panel title={t('seo.settings.socialTitle')} titleAs=\"h2\">\n <FieldGroup className=\"max-w-xl\">\n <DefaultImage control={form.control} imagePrivate={imagePrivate} />\n <FormTextField\n control={form.control}\n name=\"twitterHandle\"\n label={t('seo.settings.twitterHandle')}\n hint={t('seo.settings.twitterHandleHint')}\n placeholder={t('seo.settings.twitterHandlePlaceholder')}\n autoComplete=\"off\"\n />\n </FieldGroup>\n </Panel>\n <div>\n <SubmitButton pending={pending} pendingLabel={t('common.saving')} disabled={!isDirty || imagePrivate}>\n {t('common.saveChanges')}\n </SubmitButton>\n </div>\n </form>\n );\n};\n\n/** Settings → SEO: the current site's search and social defaults (`site.settings`). */\nexport const Seo = () => {\n const { t } = useTranslation();\n const siteSeo = useSiteSeo();\n const locales = useLocales();\n return (\n <Page width=\"full\">\n <PageHeader title={t('seo.settings.title')} />\n <QueryView query={siteSeo} loadingRows={4}>\n {(seo) => (\n <QueryView query={locales} loadingRows={4}>\n {(list) => <SeoForm siteSeo={seo} locales={list} />}\n </QueryView>\n )}\n </QueryView>\n </Page>\n );\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nexport const useSessions = () =>\n useQuery({ queryKey: queryKeys.sessions, queryFn: () => adminApi.sessions.list(), meta: { silent: true } });\n\nexport const useRevokeSession = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['sessions', 'revoke'],\n mutationFn: (id: string) => withCsrf(() => adminApi.sessions.revoke(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.sessions }),\n });\n};\n","const BROWSERS: readonly [RegExp, string][] = [\n [/Edg\\//, 'Edge'],\n [/OPR\\//, 'Opera'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\n\nconst SYSTEMS: readonly [RegExp, string][] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X|Macintosh/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstMatch = (value: string, table: readonly [RegExp, string][]) =>\n table.find(([pattern]) => pattern.test(value))?.[1];\n\n/**\n * \"Chrome on macOS\" from a user-agent string (product names are not translated). `undefined` when nothing\n * is recognised, so the caller can show its own \"unknown device\" label.\n */\nexport const describeUserAgent = (userAgent: string | null): string | undefined => {\n if (!userAgent) {\n return undefined;\n }\n const browser = firstMatch(userAgent, BROWSERS);\n const system = firstMatch(userAgent, SYSTEMS);\n if (browser && system) {\n return `${browser} · ${system}`;\n }\n return browser ?? system;\n};\n","import type { AdminSession } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { InlineConfirm } from '@/components/InlineConfirm';\nimport { RowTitle } from '@/components/RowTitle';\nimport { TableCard } from '@/components/TableCard';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport {\n Table as TableRoot,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { describeUserAgent } from '@/helpers/describeUserAgent';\nimport { formatDateTime, formatRelativeTime } from '@/helpers/formatDate';\n\ntype TableProps = {\n sessions: readonly AdminSession[];\n /** Resolves once the session is revoked (the confirmation waits for it). */\n onRevoke: (session: AdminSession) => Promise<unknown>;\n};\n\nexport const Table = ({ sessions, onRevoke }: TableProps) => {\n const { t } = useTranslation();\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('sessions.device')}</TableHead>\n <TableHead>{t('sessions.ipAddress')}</TableHead>\n <TableHead>{t('sessions.signedIn')}</TableHead>\n <TableHead>{t('sessions.lastActive')}</TableHead>\n <TableHead>\n <span className=\"sr-only\">{t('common.actions')}</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {sessions.map((session) => (\n <TableRow key={session.id}>\n <TableCell>\n <span className=\"flex items-center gap-2\">\n <RowTitle>{describeUserAgent(session.userAgent) ?? t('sessions.unknownDevice')}</RowTitle>\n {session.current ? <Badge variant=\"secondary\">{t('sessions.current')}</Badge> : null}\n </span>\n </TableCell>\n <TableCell className=\"font-mono text-xs\">{session.ip ?? t('common.unknown')}</TableCell>\n <TableCell title={formatDateTime(session.createdAt)}>\n {formatRelativeTime(session.createdAt)}\n </TableCell>\n <TableCell title={formatDateTime(session.lastSeenAt)}>\n {formatRelativeTime(session.lastSeenAt)}\n </TableCell>\n <TableCell className=\"text-right\">\n {session.current ? null : (\n <InlineConfirm\n tone=\"danger\"\n title={t('sessions.revokeTitle')}\n description={t('sessions.revokeDescription')}\n confirmLabel={t('common.revoke')}\n onConfirm={() => onRevoke(session)}\n trigger={\n <Button variant=\"outline\" size=\"sm\">\n {t('common.revoke')}\n </Button>\n }\n />\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import type { AdminSession } from '@shapio/client';\nimport { MonitorSmartphone } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { toast } from 'sonner';\nimport { useRevokeSession, useSessions } from '@/api/sessions';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { Table } from './Table';\n\nexport const Sessions = () => {\n const { t } = useTranslation();\n const sessions = useSessions();\n const revoke = useRevokeSession();\n const revokeSession = async (session: AdminSession) => {\n await revoke.mutateAsync(session.id);\n toast.success(t('sessions.revoked'));\n };\n return (\n <Page width=\"full\">\n <PageHeader title={t('sessions.title')} />\n <QueryView\n query={sessions}\n isEmpty={(data) => data.length === 0}\n empty={<EmptyState icon={MonitorSmartphone} title={t('sessions.empty')} />}\n >\n {(data) => <Table sessions={data} onRevoke={revokeSession} />}\n </QueryView>\n </Page>\n );\n};\n","import { createLazyRoute } from '@tanstack/react-router';\nimport { Settings } from '@/features/Settings';\nimport { ApiTokens } from '@/features/Settings/ApiTokens';\nimport { Appearance } from '@/features/Settings/Appearance';\nimport { Assist } from '@/features/Settings/Assist';\nimport { Locales } from '@/features/Settings/Locales';\nimport { Profile } from '@/features/Settings/Profile';\nimport { Seo } from '@/features/Settings/Seo';\nimport { Sessions } from '@/features/Settings/Sessions';\n\n/** Every settings screen, loaded together on the first visit to Settings. */\nexport const settingsLazyRoutes = {\n settings: createLazyRoute('/app/settings')({ component: Settings }),\n profile: createLazyRoute('/app/settings/profile')({ component: Profile }),\n sessions: createLazyRoute('/app/settings/sessions')({ component: Sessions }),\n theme: createLazyRoute('/app/settings/theme')({ component: Appearance }),\n locales: createLazyRoute('/app/settings/locales')({ component: Locales }),\n seo: createLazyRoute('/app/settings/seo')({ component: Seo }),\n assist: createLazyRoute('/app/settings/assist')({ component: Assist }),\n apiTokens: createLazyRoute('/app/settings/api-tokens')({ component: ApiTokens }),\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settle-LRKtTN_e.js","names":["describedBy","ids","settle","promise"],"sources":["../../src/helpers/describedBy.ts","../../src/helpers/settle.ts"],"sourcesContent":["/** Joins the ids that describe a control (hint, description, error), or undefined when there are none. */\nexport const describedBy = (...ids: Array<string | false | null | undefined>): string | undefined =>\n ids.filter(Boolean).join(' ') || undefined;\n","export type Settled<T> = { ok: true; value: T } | { ok: false };\n\n/**\n * Awaits a `mutateAsync` call without leaking an unhandled rejection. The failure is not lost: the mutation\n * holds it (forms render `mutation.error` inline) and the MutationCache logs it.\n */\nexport const settle = async <T>(promise: Promise<T>): Promise<Settled<T>> => {\n try {\n return { ok: true, value: await promise };\n } catch {\n return { ok: false };\n }\n};\n"],"mappings":"AACA,IAAaA,GAAe,GAAGC,IAC7BA,EAAI,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAAK,IAAA,GCItBC,EAAS,KAAU,IAA6C,CAC3E,GAAI,CACF,MAAO,CAAE,GAAI,GAAM,MAAO,MAAMC,CAAQ,CAC1C,MAAQ,CACN,MAAO,CAAE,GAAI,EAAM,CACrB,CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./RichTextField-fWNjndUc.js","./rolldown-runtime-Dd_uD5pT.js","./react-CQOZoUwg.js","./react-dom-pEVw9mjF.js","./jsx-runtime-DREnUpxT.js","./loader-circle-C-9trZPI.js","./createLucideIcon-CqygG5K6.js","./media-VCJUbYzJ.js","./src-DUpL-qwG.js","./InfoHint-Dyzyf59c.js","./es2015-BKfbx3rz.js","./cn-DVhJ55Mo.js","./skeleton-D4eOLKLY.js","./select-DjCAH45V.js","./field-Bg-JRgsB.js","./BlockMenuItems-WIrbyv1a.js","./image-B6aL7hP8.js","./dropdown-menu-CVAnm22s.js","./InsertMenuItem-BvRDuXtd.js","./stableId-iRkUbVIP.js","./link-B3O0VUVT.js","./image-off-TVxEyb74.js","./plus-WfYKHW7G.js","./sparkles-DCRAqbqD.js","./undo-2-Zd1OT6qk.js","./tooltip-u2epXfJF.js","./HintedLabel-BrLH4NQW.js","./context-fImO9k99.js","./AssistError-CMXQWiQo.js","./SuggestAltButton-CxS8IR6m.js","./textarea-BBjqMF-Y.js","./w3c-keyname-BOAvb0qz.js","./CodeEditor-NMvrWgxT.js","./useShortcutLabel-BJMslX8p.js","./preload-helper-BaNbYf_w.js","./props-SeFhTMCi.js","./labels-BrwwGWnv.js","./baseExtensions-TVKN1UwW.js","./dist-Cfu6KUZc.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
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,d as i,f as a,j as o,o as s,s as c}from"./loader-circle-C-9trZPI.js";import{i as l}from"./media-VCJUbYzJ.js";import{u}from"./auth-C4fHG9Iu.js";import{O as d,_ as f,c as p,f as m,h,l as g,m as _,n as v,o as y,p as b,r as x,s as ee,u as S,v as C}from"./badge-vLiQczOd.js";import{m as w,n as T,t as E}from"./createLucideIcon-CqygG5K6.js";import{$ as D,B as te,G as ne,I as re,M as O,N as ie,P as ae,R as oe,U as se,V as ce,W as le,_ as k,g as ue,h as de,i as fe,j as pe,ot as me,p as he,st as ge,t as _e,w as ve,z as ye}from"./src-DUpL-qwG.js";import{a as be,l as xe,s as Se}from"./seo-DJ4k3LtY.js";import{C as Ce,E as we,a as Te,i as Ee,n as De,w as Oe}from"./InfoHint-Dyzyf59c.js";import{T as A,d as ke,h as j,l as Ae,m as je,p as Me,u as Ne}from"./es2015-BKfbx3rz.js";import{i as Pe,n as Fe,r as Ie,t as Le}from"./AssetTile-_qRYsivK.js";import{n as Re,t as ze}from"./link-2-off-DC06jLDj.js";import{n as Be,r as Ve}from"./useSchemaScopeAccess-DyfiZnzs.js";import{t as He}from"./boxes-D6Y4Cenx.js";import{c as Ue,i as M,n as N,o as We,r as Ge,s as Ke,t as qe}from"./skeleton-D4eOLKLY.js";import{a as Je,i as Ye,n as Xe,r as Ze,s as Qe,t as $e}from"./select-DjCAH45V.js";import{n as et}from"./file-stack-8rRouTJj.js";import{i as tt,n as nt}from"./ConfirmDialog-Rd6WDt6q.js";import{_ as rt,d as it,f as at,p as ot,u as st}from"./field-Bg-JRgsB.js";import{t as ct}from"./copy-B5owk67M.js";import{c as lt,t as ut}from"./Thumbnail-BwbCNpgQ.js";import{t as dt}from"./search-CW3iBC4k.js";import{t as ft}from"./globe-DKkjr9MZ.js";import{n as pt}from"./stableId-iRkUbVIP.js";import{t as mt}from"./image-off-TVxEyb74.js";import{t as ht}from"./languages-BbfFIygP.js";import{t as gt}from"./layers-B0jT4rc4.js";import{a as _t,i as vt,n as yt,o as bt,p as xt,r as St,t as Ct}from"./dropdown-menu-CVAnm22s.js";import{t as wt}from"./plus-WfYKHW7G.js";import{t as P}from"./cn-DVhJ55Mo.js";import{n as Tt,t as Et}from"./radio-group-DQ3sC1ol.js";import{t as Dt}from"./switch-B2R13aVU.js";import{i as Ot,n as kt,t as At}from"./tooltip-u2epXfJF.js";import{t as jt}from"./preload-helper-BaNbYf_w.js";import{t as Mt}from"./useDebouncedValue-Dqs3wwhn.js";import{t as Nt}from"./useDiscardGuard-BVJGUCiH.js";import{n as Pt}from"./defineEditor-CiJc766Y.js";import{a as Ft,c as It,f as Lt,i as Rt,n as zt,r as Bt,t as Vt}from"./titles-CLh5ftA2.js";import{i as F,n as Ht,o as I,r as Ut,s as Wt,t as Gt}from"./context-fImO9k99.js";import{r as Kt}from"./locales-e7B5t6id.js";import{a as qt,c as Jt,d as L,f as Yt,i as Xt,l as R,n as Zt,o as Qt,r as z,s as B,t as $t,u as en}from"./InsertMenuItem-BvRDuXtd.js";import{i as V,n as tn,r as H,t as U}from"./props-SeFhTMCi.js";import{r as nn}from"./labels-BrwwGWnv.js";import{t as rn}from"./textarea-BBjqMF-Y.js";var an={title:`title`,description:`description`,image:`image`,canonical:`canonical`,noindex:`noindex`},on=e=>typeof e==`object`&&!!e&&!Array.isArray(e),sn=e=>typeof e==`string`&&e.trim()!==``?e:null,cn=(e,t)=>{let n=t.keys??an,r=on(e)?{...e}:{},i=e=>n[e]===void 0?void 0:r[n[e]],a=(e,t)=>{n[e]!==void 0&&(r[n[e]]=t)},o=sn(i(`title`))??sn(t.fallbackTitle);return a(`title`,o===null?t.defaults.siteName??null:Se(o,t.defaults.titleTemplate)),a(`description`,sn(i(`description`))??t.defaults.description??null),a(`image`,i(`image`)??t.image??null),a(`canonical`,sn(i(`canonical`))),a(`noindex`,i(`noindex`)===!0),r},ln={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};ln.node;var un=E(ln),dn={name:`chevrons-down-up`,size:24,node:[[`path`,{d:`m7 20 5-5 5 5`,key:`13a0gw`}],[`path`,{d:`m7 4 5 5 5-5`,key:`1kwcof`}]]};dn.node;var fn=E(dn),pn={name:`rotate-ccw-clock`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]],aliases:[`history`]};pn.node;var mn=E(pn),W=e(t(),1),G=e(n(),1),hn=Object.defineProperty,K=(e,t)=>hn(e,`name`,{value:t,configurable:!0}),gn=`Tabs`,[_n,vn]=je(gn,[at]),yn=at(),[bn,xn]=_n(gn),Sn=W.forwardRef(K(function(e,t){let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=ot(s),[d,f]=ke({prop:r,onChange:i,defaultProp:a??``,caller:gn});return(0,G.jsx)(bn,{scope:n,baseId:Ae(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,G.jsx)(j.div,{dir:u,"data-orientation":o,...l,ref:t})})},`Tabs`)),Cn=`TabsList`,wn=W.forwardRef(K(function(e,t){let{__scopeTabs:n,loop:r=!0,...i}=e,a=xn(Cn,n),o=yn(n);return(0,G.jsx)(it,{asChild:!0,...o,orientation:a.orientation,dir:a.dir,loop:r,children:(0,G.jsx)(j.div,{role:`tablist`,"aria-orientation":a.orientation,...i,ref:t})})},`TabsList`)),Tn=`TabsTrigger`,En=W.forwardRef(K(function(e,t){let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=xn(Tn,n),s=yn(n),c=kn(o.baseId,r),l=An(o.baseId,r),u=r===o.value;return(0,G.jsx)(st,{asChild:!0,...s,focusable:!i,active:u,children:(0,G.jsx)(j.button,{type:`button`,role:`tab`,"aria-selected":u,"aria-controls":l,"data-state":u?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c,...a,ref:t,onMouseDown:Me(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:Me(e.onKeyDown,e=>{i||e.target!==e.currentTarget||[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:Me(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})},`TabsTrigger`)),Dn=`TabsContent`,On=W.forwardRef(K(function(e,t){let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=xn(Dn,n),c=kn(s.baseId,r),l=An(s.baseId,r),u=r===s.value,d=W.useRef(u);return W.useEffect(()=>{let e=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,G.jsx)(Ne,{present:i||u,children:({present:n})=>(0,G.jsx)(j.div,{"data-state":u?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:l,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:d.current?`0s`:void 0},children:n&&a})})},`TabsContent`));function kn(e,t){return`${e}-trigger-${t}`}K(kn,`makeTriggerId`);function An(e,t){return`${e}-content-${t}`}K(An,`makeContentId`);var jn=Sn,Mn=wn,Nn=En,Pn=On,Fn=Object.defineProperty,In=(e,t)=>Fn(e,`name`,{value:t,configurable:!0}),Ln=`Toggle`,Rn=W.forwardRef(In(function(e,t){let{pressed:n,defaultPressed:r,onPressedChange:i,...a}=e,[o,s]=ke({prop:n,onChange:i,defaultProp:r??!1,caller:Ln});return(0,G.jsx)(j.button,{type:`button`,"aria-pressed":o,"data-state":o?`on`:`off`,"data-disabled":e.disabled?``:void 0,...a,ref:t,onClick:Me(e.onClick,()=>{e.disabled||s(!o)})})},`Toggle`)),zn=Object.defineProperty,q=(e,t)=>zn(e,`name`,{value:t,configurable:!0}),J=`ToggleGroup`,[Bn,Vn]=je(J,[at]),Hn=at(),Un=W.forwardRef(q(function(e,t){let{type:n,...r}=e;if(n===`single`)return(0,G.jsx)(Kn,{role:`radiogroup`,...r,ref:t});if(n===`multiple`)return(0,G.jsx)(qn,{role:`toolbar`,...r,ref:t});throw Error(`Missing prop \`type\` expected on \`${J}\``)},`ToggleGroup`)),[Wn,Gn]=Bn(J),Kn=W.forwardRef(q(function(e,t){let{value:n,defaultValue:r,onValueChange:i=q(()=>{},`onValueChange`),...a}=e,[o,s]=ke({prop:n,defaultProp:r??``,onChange:i,caller:J});return(0,G.jsx)(Wn,{scope:e.__scopeToggleGroup,type:`single`,value:W.useMemo(()=>o?[o]:[],[o]),onItemActivate:s,onItemDeactivate:W.useCallback(()=>s(``),[s]),children:(0,G.jsx)(Xn,{...a,ref:t})})},`ToggleGroupImplSingle`)),qn=W.forwardRef(q(function(e,t){let{value:n,defaultValue:r,onValueChange:i=q(()=>{},`onValueChange`),...a}=e,[o,s]=ke({prop:n,defaultProp:r??[],onChange:i,caller:J}),c=W.useCallback(e=>s((t=[])=>[...t,e]),[s]),l=W.useCallback(e=>s((t=[])=>t.filter(t=>t!==e)),[s]);return(0,G.jsx)(Wn,{scope:e.__scopeToggleGroup,type:`multiple`,value:o,onItemActivate:c,onItemDeactivate:l,children:(0,G.jsx)(Xn,{...a,ref:t})})},`ToggleGroupImplMultiple`)),[Jn,Yn]=Bn(J),Xn=W.forwardRef(q(function(e,t){let{__scopeToggleGroup:n,disabled:r=!1,rovingFocus:i=!0,orientation:a,dir:o,loop:s=!0,...c}=e,l=Hn(n),u=ot(o),d={dir:u,...c};return(0,G.jsx)(Jn,{scope:n,rovingFocus:i,disabled:r,children:i?(0,G.jsx)(it,{asChild:!0,...l,orientation:a,dir:u,loop:s,children:(0,G.jsx)(j.div,{...d,ref:t})}):(0,G.jsx)(j.div,{...d,ref:t})})},`ToggleGroupImpl`)),Zn=`ToggleGroupItem`,Qn=W.forwardRef(q(function(e,t){let n=Gn(Zn,e.__scopeToggleGroup),r=Yn(Zn,e.__scopeToggleGroup),i=Hn(e.__scopeToggleGroup),a=n.value.includes(e.value),o=r.disabled||e.disabled,s={...e,pressed:a,disabled:o},c=W.useRef(null);return r.rovingFocus?(0,G.jsx)(st,{asChild:!0,...i,focusable:!o,active:a,ref:c,children:(0,G.jsx)($n,{...s,ref:t})}):(0,G.jsx)($n,{...s,ref:t})},`ToggleGroupItem`)),$n=W.forwardRef(q(function(e,t){let{__scopeToggleGroup:n,value:r,...i}=e,a=Gn(Zn,n),o={role:`radio`,"aria-checked":e.pressed,"aria-pressed":void 0},s=a.type===`single`?o:void 0;return(0,G.jsx)(Rn,{...s,...i,ref:t,onPressedChange:e=>{e?a.onItemActivate(r):a.onItemDeactivate(r)}})},`ToggleGroupItemImpl`));function er({className:e,...t}){return(0,G.jsx)(jn,{"data-slot":`tabs`,className:P(`flex flex-col gap-2`,e),...t})}function tr({className:e,variant:t=`default`,...n}){return(0,G.jsx)(Mn,{"data-slot":`tabs-list`,"data-variant":t,className:P(`group/tabs-list inline-flex w-fit items-center text-muted-foreground`,t==="default"&&`h-9 justify-center rounded-lg bg-muted p-[3px]`,t===`underline`&&`h-10 w-full justify-start gap-5 border-b`,e),...n})}function nr({className:e,...t}){return(0,G.jsx)(Nn,{"data-slot":`tabs-trigger`,className:P(`inline-flex items-center justify-center gap-1.5 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=default]/tabs-list:h-[calc(100%-1px)] group-data-[variant=default]/tabs-list:flex-1 group-data-[variant=default]/tabs-list:rounded-md group-data-[variant=default]/tabs-list:border group-data-[variant=default]/tabs-list:border-transparent group-data-[variant=default]/tabs-list:px-2 group-data-[variant=default]/tabs-list:py-1 group-data-[variant=default]/tabs-list:font-medium group-data-[variant=default]/tabs-list:text-foreground group-data-[variant=default]/tabs-list:data-[state=active]:bg-background group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm dark:group-data-[variant=default]/tabs-list:text-muted-foreground dark:group-data-[variant=default]/tabs-list:data-[state=active]:border-input dark:group-data-[variant=default]/tabs-list:data-[state=active]:bg-input/30 dark:group-data-[variant=default]/tabs-list:data-[state=active]:text-foreground`,`group-data-[variant=underline]/tabs-list:relative group-data-[variant=underline]/tabs-list:h-full group-data-[variant=underline]/tabs-list:rounded-sm group-data-[variant=underline]/tabs-list:px-0.5 group-data-[variant=underline]/tabs-list:font-semibold group-data-[variant=underline]/tabs-list:after:absolute group-data-[variant=underline]/tabs-list:after:inset-x-0 group-data-[variant=underline]/tabs-list:after:-bottom-px group-data-[variant=underline]/tabs-list:after:h-0.5 group-data-[variant=underline]/tabs-list:after:rounded-full group-data-[variant=underline]/tabs-list:hover:text-foreground group-data-[variant=underline]/tabs-list:data-[state=active]:text-foreground group-data-[variant=underline]/tabs-list:data-[state=active]:after:bg-primary`,e),...t})}function rr({className:e,...t}){return(0,G.jsx)(Pn,{"data-slot":`tabs-content`,className:P(`flex-1 rounded-md outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,e),...t})}var ir=({children:e})=>{let{model:t}=I(),n=F(e=>e.values),r=(0,W.useMemo)(()=>({definition:t,values:n}),[t,n]);return(0,G.jsx)(Ut.Provider,{value:r,children:e})},ar=({environment:e,store:t,children:n})=>(0,G.jsx)(Ht.Provider,{value:e,children:(0,G.jsx)(Gt.Provider,{value:t,children:n})}),or=e=>{let t=F(t=>t.values[e.apiKey]),n=F(e=>e.setValue);return{value:t,onChange:(0,W.useCallback)(t=>n(e.apiKey,t),[n,e.apiKey])}},sr=class extends W.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(e,t){Ce(e,`custom editor ${this.props.editorId} crashed${t.componentStack??``}`)}render(){return this.state.failed?this.props.fallback:this.props.children}},cr=({control:e})=>{let{t}=T(),{resolved:n,builtIn:r,builtInProps:i,contractProps:a}=e,o=r.component;return(0,G.jsxs)(G.Fragment,{children:[n.kind===`runtime`?(0,G.jsx)(sr,{editorId:n.definition.id,fallback:(0,G.jsx)(o,{...i}),children:(0,G.jsx)(n.definition.component,{...a})}):(0,G.jsx)(W.Suspense,{fallback:(0,G.jsx)(qe,{className:`h-24 w-full`}),children:(0,G.jsx)(o,{...i})}),n.kind===`builtIn`&&n.missingCustomId?(0,G.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:t(`content.fields.customEditorMissing`,{id:n.missingCustomId})}):null]})},lr=({field:e,control:t})=>(0,G.jsxs)(G.Fragment,{children:[e.description?(0,G.jsx)(`p`,{id:t.descriptionId,className:`text-meta text-muted-foreground`,children:e.description}):null,t.messages.length>0?(0,G.jsx)(`ul`,{id:t.errorsId,className:`space-y-0.5 text-meta font-medium text-destructive`,children:t.messages.map(e=>(0,G.jsx)(`li`,{children:e},e))}):null]}),ur={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^(https?:\/\/[^\s]+|mailto:[^\s]+|tel:[^\s]+)$/i,slug:se,uid:ne,date:te,datetime:ye,time:le,decimal:ce,biginteger:oe},Y=e=>({code:e,message:e}),dr=(e,t)=>[...t.minLength!==void 0&&e.length<t.minLength?[Y(`TOO_SHORT`)]:[],...t.maxLength!==void 0&&e.length>t.maxLength?[Y(`TOO_LONG`)]:[]],fr=(e,t)=>[...t.min!==void 0&&e<Number(t.min)?[Y(`TOO_SMALL`)]:[],...t.max!==void 0&&e>Number(t.max)?[Y(`TOO_LARGE`)]:[]],pr=(e,t)=>[...t.min!==void 0&&e>0&&e<t.min?[Y(`TOO_FEW`)]:[],...t.max!==void 0&&e>t.max?[Y(`TOO_MANY`)]:[]],mr=e=>{try{return JSON.parse(e),!0}catch{return!1}},hr=(e,t)=>t.validate===!0&&t.language===`json`&&!mr(e)?[Y(`INVALID_FORMAT`)]:[],gr=(e,t)=>{let n=ur[e.type];if(n&&!n.test(t))return[Y(`INVALID_FORMAT`)];switch(e.type){case`string`:case`text`:case`slug`:case`uid`:return dr(t,e.settings);case`code`:return[...hr(t,e.settings),...dr(t,e.settings)];case`decimal`:case`biginteger`:return fr(Number(t),e.settings);case`enum`:return e.settings.values.some(e=>e.value===t)?[]:[Y(`NOT_ALLOWED`)];default:return[]}},_r=(e,t)=>{if(Qt(t))return[];switch(e.type){case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)||e.type===`integer`&&!Number.isInteger(t)?[Y(`INVALID_TYPE`)]:fr(t,e.settings);case`media`:case`relation`:case`component`:case`dynamiczone`:return pr(L(t).length,e.settings);default:return typeof t==`string`?gr(e,t):[]}},vr=(e,t)=>`${e}field${t.replace(/[^A-Za-z0-9_-]/g,`-`)}`,yr=e=>({id:e.id,apiKey:e.apiKey,label:e.label,description:e.description,type:e.type,required:e.required,localized:e.localized,settings:e.settings,options:e.editor.options}),br=e=>({id:e.id,apiKey:e.apiKey,label:e.label,kind:e.kind,localized:e.kind!==`component`&&e.localized}),xr=(e,t)=>t?e.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>String(t[n]??e)):e,Sr=A.t.bind(A),Cr=e=>({locale:e.locale,entryId:e.entryId,uiLanguage:A.language,pickMedia:e.pickMedia,translate:(e,t,n)=>A.exists(e)?Sr(e,n):xr(t,n)}),wr=(e,t)=>`${e}/${String(t).replace(/~/g,`~0`).replace(/\//g,`~1`)}`,Tr=e=>{let t=new Map;for(let n of e)t.set(n.path,[...t.get(n.path)??[],n]);return t},Er=(e,t)=>{let n=0;for(let[r,i]of e)(r===t||r.startsWith(`${t}/`))&&(n+=i.length);return n},Dr={email:`content.issues.format.email`,url:`content.issues.format.url`,slug:`content.issues.format.slug`,uid:`content.issues.format.uid`,date:`content.issues.format.date`,datetime:`content.issues.format.datetime`,time:`content.issues.format.time`,decimal:`content.issues.format.decimal`,biginteger:`content.issues.format.biginteger`,code:`content.issues.format.code`},Or=e=>Object.hasOwn(Dr,e),kr=(e,t)=>{let n=e?.settings?.[t];return typeof n==`number`||typeof n==`string`?n:void 0},Ar=(e,t)=>{let n=A.t.bind(A),r=(r,i)=>{let a=kr(t,i);return a===void 0?e.message:n(r,{count:Number(a),value:String(a)})};switch(e.code){case`REQUIRED`:return n(`content.issues.required`);case`INVALID_TYPE`:return n(`content.issues.invalidType`);case`INVALID_FORMAT`:return t&&Or(t.type)?n(Dr[t.type]):n(`content.issues.invalidFormat`);case`TOO_SHORT`:return r(`content.issues.tooShort`,`minLength`);case`TOO_LONG`:return r(`content.issues.tooLong`,`maxLength`);case`TOO_SMALL`:return r(`content.issues.tooSmall`,`min`);case`TOO_LARGE`:return r(`content.issues.tooLarge`,`max`);case`TOO_FEW`:return r(`content.issues.tooFew`,`min`);case`TOO_MANY`:return r(`content.issues.tooMany`,`max`);case`NOT_ALLOWED`:return n(`content.issues.notAllowed`);case`PATTERN_MISMATCH`:return n(`content.issues.patternMismatch`);case`DUPLICATE`:return n(`content.issues.duplicate`);case`UNKNOWN_FIELD`:return n(`content.issues.unknownField`);case`UNKNOWN_COMPONENT`:return n(`content.issues.unknownComponent`);case`INVALID_RICHTEXT`:return n(`content.issues.invalidRichText`);case`NOT_UNIQUE`:return n(`content.issues.notUnique`);case`RELATION_TARGET_MISSING`:return n(`content.issues.relationMissing`);case`MEDIA_MISSING`:return n(`content.issues.mediaMissing`);case`INVALID_JSON`:return n(`content.issues.invalidJson`);default:return e.message}},jr=e=>{let{definition:t}=e;return t.type===`enum`?t.settings.values.map(({value:e,label:t})=>({value:e,label:t})):[{value:`true`,label:H(e,`trueLabel`)??A.t(`content.fields.yes`)},{value:`false`,label:H(e,`falseLabel`)??A.t(`content.fields.no`)}]},Mr=(e,t)=>t===``?null:e.definition.type===`boolean`?t===`true`:t,Nr=e=>typeof e==`boolean`?String(e):typeof e==`string`?e:``,Pr=e=>e.definition.type===`enum`&&e.definition.settings.multiple,Fr=e=>{let{inputId:t,labelId:n,describedBy:r,value:i,onChange:a,onBlur:o,readOnly:s,disabled:c,validation:l}=e,u=L(i),d=jr(e),f=H(e,`layout`)===`horizontal`;return(0,G.jsx)(`div`,{role:`group`,"aria-labelledby":n,"aria-describedby":r,"aria-invalid":l.invalid||void 0,className:P(`grid gap-2`,f&&`flex flex-wrap gap-x-6`),onBlur:o,children:d.map(e=>(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(nt,{id:`${t}-${e.value}`,checked:u.includes(e.value),disabled:c||s,onCheckedChange:t=>{let n=d.map(e=>e.value).filter(n=>n===e.value?t===!0:u.includes(n));a(n.length>0?n:null)}}),(0,G.jsx)(Ge,{htmlFor:`${t}-${e.value}`,className:`font-normal`,children:e.label})]},e.value))})},Ir=e=>{let{value:t,onChange:n,onBlur:r,readOnly:i,disabled:a}=e;return(0,G.jsx)(nt,{...U(e),checked:t===!0,disabled:a||i,onCheckedChange:e=>n(e===!0),onBlur:r})},Lr=/^#[0-9a-f]{6}$/i,Rr=`#${`0`.repeat(6)}`,zr=e=>{let t=e.field.options.presets;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]},Br=e=>({"--swatch":e}),Vr=e=>{let{t}=T(),{value:n,onChange:r,onBlur:i,readOnly:a,disabled:o,field:s}=e,c=V(n),l=zr(e);return(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`input`,{type:`color`,"aria-label":t(`content.fields.color.picker`,{field:s.label}),value:Lr.test(c)?c.toLowerCase():Rr,disabled:o||a,className:`size-10 shrink-0 cursor-pointer rounded-lg border border-input bg-transparent p-1 disabled:cursor-not-allowed`,onChange:e=>r(e.target.value)}),(0,G.jsx)(N,{...U(e),value:c,spellCheck:!1,readOnly:a,disabled:o,className:`max-w-48 font-mono text-sm`,onChange:e=>r(e.target.value===``?null:e.target.value),onBlur:i})]}),l.length>0?(0,G.jsx)(`div`,{role:`group`,"aria-label":t(`content.fields.color.presets`),className:`flex flex-wrap gap-1.5`,children:l.map(e=>(0,G.jsx)(`button`,{type:`button`,"aria-label":e,"aria-pressed":e.toLowerCase()===c.toLowerCase(),disabled:o||a,style:Br(e),className:P(`size-7 rounded-md border border-input bg-(--swatch) outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,e.toLowerCase()===c.toLowerCase()&&`ring-2 ring-ring ring-offset-2 ring-offset-background`),onClick:()=>r(e)},e))}):null]})},Hr=({label:e,variant:t=`outline`,className:n,...r})=>(0,G.jsxs)(M,{type:`button`,variant:t,size:`sm`,className:P(t===`ghost`&&`-ml-2 text-muted-foreground`,n),...r,children:[(0,G.jsx)(wt,{"aria-hidden":`true`}),e]}),Ur=`inline-flex h-5 items-center gap-1 rounded-full px-2 text-2xs font-semibold [&_svg]:size-3 [&_svg]:shrink-0`,Wr=({localized:e})=>{let{t}=T();return e?(0,G.jsxs)(`span`,{className:P(Ur,`bg-accent text-accent-foreground`),children:[(0,G.jsx)(ht,{"aria-hidden":`true`}),t(`content.scope.localized`)]}):(0,G.jsxs)(De,{children:[(0,G.jsxs)(Te,{type:`button`,className:P(Ur,`border text-muted-foreground outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50`),children:[(0,G.jsx)(ft,{"aria-hidden":`true`}),t(`content.scope.shared`)]}),(0,G.jsx)(Ee,{align:`start`,className:`w-64 p-3 text-meta`,children:t(`content.scope.sharedHint`)})]})},Gr=({localized:e,className:t})=>{let{t:n}=T(),r=e?ht:ft,i=n(e?`content.scope.localized`:`content.scope.sharedHint`);return(0,G.jsxs)(At,{children:[(0,G.jsx)(Ot,{asChild:!0,children:(0,G.jsxs)(`span`,{className:P(`inline-flex shrink-0 text-muted-foreground [&_svg]:size-3.5`,t),"data-scope":e?`localized`:`shared`,children:[(0,G.jsx)(r,{"aria-hidden":`true`}),(0,G.jsx)(`span`,{className:`sr-only`,children:i})]})}),(0,G.jsx)(kt,{children:i})]})},Kr=(0,W.memo)(({field:e,owner:t,value:n,onChange:r,path:i,topLevel:a,layout:o=`stacked`,className:s})=>{let{t:c}=T(),l=I(),u=uo({field:e,owner:t,value:n,onChange:r,path:i}),d=u.labelling===`input`?Ge:`span`,f=o===`inline`;return(0,G.jsxs)(`div`,{className:P(`min-w-0 scroll-mt-24`,f?`grid gap-x-4 gap-y-1 sm:grid-cols-[9rem_minmax(0,1fr)]`:`space-y-2`,s),id:`${u.inputId}-section`,"data-field-path":i,children:[(0,G.jsxs)(`div`,{className:P(`flex min-h-5 flex-wrap items-center gap-2`,f&&`sm:min-h-10 sm:pt-0.5`,o===`bare`&&`sr-only`),children:[(0,G.jsxs)(d,{id:u.labelId,...u.labelling===`input`?{htmlFor:u.inputId}:{},className:P(`leading-5`,f?`text-meta font-medium text-muted-foreground`:`text-sm font-semibold`),children:[e.label,e.required?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`ml-0.5 text-destructive`,children:`*`}),(0,G.jsx)(`span`,{className:`sr-only`,children:c(`content.fields.required`)})]}):null]}),a&&l.model.localized?f?(0,G.jsx)(Gr,{localized:e.localized}):(0,G.jsx)(Wr,{localized:e.localized}):null]}),(0,G.jsxs)(`div`,{className:`min-w-0 space-y-2`,children:[(0,G.jsx)(cr,{control:u}),(0,G.jsx)(lr,{field:e,control:u})]})]})});Kr.displayName=`FieldControl`;var qr=`grid gap-5 @lg:grid-cols-6`,Jr={full:`@lg:col-span-6`,"two-thirds":`@lg:col-span-4`,half:`@lg:col-span-3`,third:`@lg:col-span-2`},Yr=e=>Jr[e??`full`],Xr=e=>ve(e)===`form`?`widths`:`compact`,Zr=new Set([`string`,`slug`,`email`,`url`,`uid`,`number`,`integer`,`decimal`,`biginteger`,`boolean`,`date`,`datetime`,`time`]),Qr=e=>Zr.has(e.type)||e.type===`enum`&&e.editor.id===`select`,$r=({fields:e,renderField:t,mode:n=`compact`})=>(0,G.jsx)(`div`,{className:`@container`,children:n===`widths`?(0,G.jsx)(`div`,{className:qr,children:e.map(e=>t(e,Yr(e.width)))}):(0,G.jsx)(`div`,{className:`grid gap-5 @2xl:grid-cols-2`,children:e.map(e=>t(e,Qr(e)?`@2xl:col-span-1`:`@2xl:col-span-2`))})}),ei=e=>B(e)&&typeof e.id==`string`&&typeof e.url==`string`,ti=(e,t)=>typeof e==`string`?e:ei(e)?(t?.(e),e.id):null,ni=e=>e.filter(e=>!e.deprecated),ri=(e,t,n)=>e.settings.components.map(e=>n.get(e)).find(e=>e?.apiKey===t[z]),ii=(e,t,n,r)=>{if(t==null)return null;switch(e.type){case`media`:return Array.isArray(t)?t.map(e=>ti(e,r)).filter(e=>e!==null):ti(t,r);case`component`:{let i=n.get(e.settings.component),a=e=>Yt(i&&B(e)?ai(i.fields,e,n,r):{});return e.settings.repeatable?Array.isArray(t)?t.map(a):[]:a(t)}case`dynamiczone`:return(Array.isArray(t)?t:[]).filter(B).map(t=>{let i=ri(e,t,n);return Yt({[z]:t[z],...i?ai(i.fields,t,n,r):{}})});default:return t}};function ai(e,t,n,r){let i={};for(let a of ni(e))i[a.apiKey]=ii(a,t[a.apiKey],n,r);return i}var oi=e=>Object.fromEntries(ni(e).map(e=>[e.apiKey,structuredClone(e.defaultValue??null)])),X=(e,t)=>Yt({...t?{[z]:e.apiKey}:{},...oi(e.fields)}),si=e=>Qt(e)?null:en(e),ci=(e,t)=>Object.keys(e).filter(n=>!Jt(e[n],t[n])),li=(e,t)=>Object.fromEntries(t.map(t=>[t,si(e[t])])),ui=e=>Object.fromEntries(Object.entries(e).filter(([,e])=>!Qt(e)).map(([e,t])=>[e,en(t)])),di=(e,t,n)=>{let r={...e},i={...n};for(let a of Object.keys(n))Object.is(e[a],t[a])&&(Jt(e[a],n[a])?i[a]=e[a]:r[a]=n[a]);return{values:r,baseline:i}},Z=({component:e,item:t,onItemChange:n,path:r,layout:i=`form`,renderFieldFooter:a})=>{let o=(0,W.useMemo)(()=>({definition:e,values:t}),[e,t]),s=ni(e.fields),c=(o,s)=>{let c=a!==void 0,l=(0,G.jsx)(Kr,{field:o,owner:e,value:t[o.apiKey],onChange:e=>n({...t,[o.apiKey]:e}),path:wr(r,o.apiKey),topLevel:!1,layout:i===`document`?`inline`:`stacked`,className:c?void 0:s},o.id);return c?(0,G.jsxs)(`div`,{className:P(`min-w-0 space-y-1.5`,s),children:[l,a(o,t[o.apiKey])]},o.id):l};return(0,G.jsx)(Ut.Provider,{value:o,children:i===`document`?(0,G.jsx)(`div`,{className:`space-y-3`,children:s.map(e=>c(e))}):(0,G.jsx)($r,{fields:s,renderField:c})})},fi=80,pi=e=>e.length>fi?`${e.slice(0,79)}…`:e,mi=(e,t)=>{if(Qt(t))return``;switch(e.type){case`richtext`:return pi(fe(t));case`boolean`:return t===!0?`✓`:`✗`;case`enum`:return L(t).map(t=>e.settings.values.find(e=>e.value===t)?.label??t).join(`, `);case`json`:return pi(JSON.stringify(t));case`code`:return A.t(`content.fields.code.summary`,{language:nn(e.settings.language),count:String(t).split(`
|
|
3
|
-
`).length});case`media`:case`relation`:case`component`:case`dynamiczone`:return String(L(t).length);default:return pi(String(t))}},hi=new Set([`string`,`text`,`slug`,`email`,`url`,`uid`,`enum`]),gi=(e,t)=>{if(!B(t))return``;let n=e.fields.find(t=>t.id===e.display.titleFieldId),r=n?[n,...e.fields]:e.fields;for(let e of r)if(hi.has(e.type)||e.type===`richtext`){let n=mi(e,t[e.apiKey]);if(n)return n}return``},_i=(e,t)=>{let[n,r]=(0,W.useState)(()=>new Set(t?e:[]));return{collapsed:n,toggle:(0,W.useCallback)(e=>r(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),[]),setAll:(0,W.useCallback)((e,t)=>r(new Set(t?e:[])),[])}},vi=(e,t)=>{let n=(0,W.useRef)(e);(0,W.useEffect)(()=>{let r=e.find(e=>!n.current.includes(e));n.current=e,r&&e.length>0&&document.getElementById(t(r))?.querySelector(`button[aria-expanded]`)?.focus()},[e,t])},yi=`application/x-shapio-item`,bi=e=>{let[t,n]=(0,W.useState)(null),[r,i]=(0,W.useState)(null),a=()=>{n(null),i(null)};return{handleProps:e=>({draggable:!0,onDragStart:t=>{n(e),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(yi,String(e));let r=t.currentTarget.closest(`li`);r&&t.dataTransfer.setDragImage(r,16,16)},onDragEnd:a}),targetProps:n=>({onDragOver:e=>{t!==null&&e.dataTransfer.types.includes(yi)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,i(n))},onDrop:r=>{t!==null&&(r.preventDefault(),t!==n&&e(t,n),a())}}),dropSide:e=>t===null||r!==e||t===e?void 0:t>e?`before`:`after`}},xi=e=>{let t=F(e=>e.issues);return(0,W.useMemo)(()=>Er(Tr(t),e),[t,e])},Si=({id:e,title:t,summary:n,index:r,count:i,collapsed:a,issueCount:o,editable:s,onToggle:c,onMove:l,onDuplicate:u,onRemove:d,appearance:f=`form`,drag:p,children:m})=>{let{t:h}=T(),g=`${e}-body`,_=e=>{e.altKey&&l&&(e.key===`ArrowUp`&&r>0?(e.preventDefault(),l(r-1)):e.key===`ArrowDown`&&r<i-1&&(e.preventDefault(),l(r+1)))},y=f===`canvas`,b=y?`opacity-0 transition-opacity group-focus-within/item:opacity-100 group-hover/item:opacity-100`:void 0;return(0,G.jsxs)(`li`,{id:e,className:P(`group/item scroll-mt-32 rounded-xl border bg-card data-invalid:border-destructive/60`,y&&`border-transparent bg-muted/40 focus-within:border-border hover:border-border`,p?.dropSide===`before`&&`shadow-[0_-3px_0_0_var(--color-ring)]`,p?.dropSide===`after`&&`shadow-[0_3px_0_0_var(--color-ring)]`),"data-invalid":o>0||void 0,...y?p?.target:{},children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1 py-1.5 pr-2 pl-1.5`,children:[y&&s&&p?(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-xs`,className:P(`cursor-grab text-muted-foreground active:cursor-grabbing`,b),"aria-label":h(`entry.blocks.dragItem`,{item:t,position:r+1}),...p.handle,children:(0,G.jsx)(pt,{"aria-hidden":`true`})}):null,(0,G.jsxs)(`button`,{type:`button`,"aria-expanded":!a,"aria-controls":g,onClick:c,onKeyDown:_,className:`flex h-8 min-w-0 flex-1 items-center gap-2 rounded-lg px-2 text-left outline-none hover:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:[(0,G.jsx)(Ke,{"aria-hidden":`true`,className:P(`size-4 shrink-0 text-muted-foreground transition-transform`,!a&&`rotate-90`)}),(0,G.jsx)(`span`,{className:`shrink-0 text-sm font-semibold`,children:t}),n?(0,G.jsx)(`span`,{className:`min-w-0 truncate text-meta text-muted-foreground`,children:n}):null,(0,G.jsx)(`span`,{className:`sr-only`,children:h(`content.items.position`,{index:r+1,count:i})})]}),o>0?(0,G.jsx)(v,{tone:`danger`,size:`sm`,label:h(`content.items.problems`,{count:o})}):null,(0,G.jsxs)(`span`,{className:P(`flex items-center gap-1`,b),children:[s&&l?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":h(`content.items.moveUp`,{item:t,position:r+1}),disabled:r===0,onClick:()=>l(r-1),children:(0,G.jsx)(Ie,{"aria-hidden":`true`})}),(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":h(`content.items.moveDown`,{item:t,position:r+1}),disabled:r===i-1,onClick:()=>l(r+1),children:(0,G.jsx)(Pe,{"aria-hidden":`true`})})]}):null,s&&u?(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":h(`content.items.duplicate`,{item:t,position:r+1}),onClick:u,children:(0,G.jsx)(ct,{"aria-hidden":`true`})}):null,s&&d?(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":h(`content.items.remove`,{item:t,position:r+1}),onClick:d,children:(0,G.jsx)(rt,{"aria-hidden":`true`})}):null]})]}),(0,G.jsx)(`div`,{id:g,hidden:a,className:P(y?`px-4 pt-1 pb-4`:`border-t p-5`),children:a?null:m})]})},Ci=({components:e,position:t,onInsert:n})=>{let{t:r}=T(),i=Zt();return(0,G.jsxs)(`li`,{className:`group/inserter relative flex h-4 items-center`,"data-item-inserter":!0,children:[(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`h-px flex-1 bg-border opacity-0 transition-opacity group-focus-within/inserter:opacity-100 group-hover/inserter:opacity-100`}),(0,G.jsxs)(Ct,{children:[(0,G.jsx)(xt,{asChild:!0,children:(0,G.jsx)(M,{type:`button`,variant:`outline`,size:`icon-xs`,className:`absolute left-1/2 -translate-x-1/2 rounded-full bg-background opacity-0 transition-opacity group-hover/inserter:opacity-100 focus-visible:opacity-100 data-[state=open]:opacity-100`,"aria-label":r(`entry.blocks.insertAt`,{position:t}),children:(0,G.jsx)(wt,{"aria-hidden":`true`})})}),(0,G.jsx)(St,{align:`center`,className:`w-72`,onCloseAutoFocus:i.onCloseAutoFocus,children:(0,G.jsxs)(vt,{children:[(0,G.jsx)(bt,{className:`text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:r(`entry.blocks.groupComponents`)}),e.map(e=>(0,G.jsx)($t,{icon:He,label:e.label,onSelect:()=>i.defer(()=>n(e))},e.id))]})})]})]})},wi=({list:e,item:t,itemKey:n,index:r,path:i,domId:a,editable:o,component:s,collapsed:c,onToggle:l,drag:u})=>{let{t:d}=T(),f=wr(i,r),p=xi(f),m=(0,W.useCallback)(t=>e.update(r,t),[e,r]);return(0,G.jsx)(Si,{id:a,appearance:`canvas`,title:s?.label??d(`content.items.unknownComponent`,{key:String(t.__component)}),summary:s?gi(s,t):``,index:r,count:e.items.length,collapsed:c,issueCount:p,editable:o,onToggle:()=>l(n),onMove:t=>e.move(r,t),onDuplicate:s?()=>e.duplicate(r):void 0,onRemove:()=>e.remove(r),drag:{handle:u.handleProps(r),target:u.targetProps(r),dropSide:u.dropSide(r)},children:s?(0,G.jsx)(Z,{component:s,item:t,onItemChange:m,path:f,layout:`document`}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:d(`content.items.unknownComponentHint`)})})},Ti=({list:e,labelId:t,inputId:n,path:r,editable:i,insertable:a,componentOf:o,newItem:s,startCollapsed:c})=>{let{collapsed:l,toggle:u}=_i(e.keys,c),d=(0,W.useCallback)(e=>`${n}-item-${e}`,[n]);vi(e.keys,d);let f=bi(e.move);return e.items.length===0?null:(0,G.jsx)(`ol`,{"aria-labelledby":t,className:`space-y-1 font-sans`,children:e.items.map((t,n)=>{let c=e.keys[n]??String(n);return(0,G.jsxs)(W.Fragment,{children:[n>0&&i&&a.length>0?(0,G.jsx)(Ci,{components:a,position:n+1,onInsert:t=>e.insertAt(n,s(t))}):null,(0,G.jsx)(wi,{list:e,item:t,itemKey:c,index:n,path:r,domId:d(c),editable:i,component:o(t),collapsed:l.has(c),onToggle:u,drag:f})]},c)})})},Ei=(e,t)=>t===void 0||e<t,Di=e=>e!==void 0&&e>1?e:void 0,Oi=({min:e,action:t})=>{let{t:n}=T(),r=Di(e);return(0,G.jsx)(y,{compact:!0,icon:He,title:n(`content.items.empty`),description:r===void 0?void 0:n(`content.issues.tooFew`,{count:r}),action:t,className:`rounded-xl border border-dashed px-4`})},ki=(e,t)=>{let n=L(e),r=(0,W.useCallback)(e=>t(e.length>0?e:null),[t]);return{items:n,keys:n.map((e,t)=>Xt(e,t)),add:e=>r([...n,e]),insertAt:(e,t)=>{let i=Math.min(Math.max(e,0),n.length);r([...n.slice(0,i),t,...n.slice(i)])},update:(e,t)=>r(n.map((n,r)=>r===e?t:n)),move:(e,t)=>r(R(n,e,t)),duplicate:e=>{let t=Yt(structuredClone(n[e]??{}));r([...n.slice(0,e+1),t,...n.slice(e+1)])},remove:e=>r(n.filter((t,n)=>n!==e))}},Ai=({component:e,item:t,itemKey:n,index:r,count:i,path:a,domId:o,collapsed:s,editable:c,list:l,onToggle:u})=>{let d=wr(a,r),f=xi(d),p=(0,W.useCallback)(e=>l.update(r,e),[l,r]);return(0,G.jsx)(Si,{id:o,title:e.label,summary:gi(e,t),index:r,count:i,collapsed:s,issueCount:f,editable:c,onToggle:()=>u(n),onMove:e=>l.move(r,e),onDuplicate:()=>l.duplicate(r),onRemove:()=>l.remove(r),children:(0,G.jsx)(Z,{component:e,item:t,onItemChange:p,path:d})})},ji=e=>{let{t}=T(),{component:n,value:r,onChange:i,path:a,labelId:o,inputId:s,readOnly:c,disabled:l,definition:u,field:d}=e,f=ki(r,i),p=u.type===`component`?u.settings:void 0,m=!c&&!l,h=Ei(f.items.length,p?.max),g=e=>m&&h?(0,G.jsx)(Hr,{label:t(`content.items.add`,{item:n.label}),variant:e,onClick:()=>f.add(X(n,!1))}):null,_=f.items.length===0;return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[_?(0,G.jsx)(Oi,{min:p?.min,action:g(`outline`)}):null,(0,G.jsx)(Ti,{list:f,labelId:o,inputId:s,path:a,editable:m,insertable:h?[n]:[],componentOf:()=>n,newItem:e=>X(e,!1),startCollapsed:d.options.collapsed===!0}),_?null:g(`ghost`)]})},Mi=e=>{let{t}=T(),{component:n,value:r,onChange:i,path:a,labelId:o,inputId:s,readOnly:c,disabled:l,definition:u}=e,d=ki(r,i),{collapsed:f,toggle:p}=_i(d.keys,e.field.options.collapsed===!0),m=(0,W.useCallback)(e=>`${s}-item-${e}`,[s]);vi(d.keys,m);let h=u.type===`component`?u.settings.max:void 0,g=!c&&!l;return(0,G.jsxs)(`div`,{className:`space-y-3`,children:[d.items.length>0?(0,G.jsx)(`ol`,{"aria-labelledby":o,className:`space-y-2`,children:d.items.map((e,t)=>{let r=d.keys[t]??String(t);return(0,G.jsx)(Ai,{component:n,item:e,itemKey:r,index:t,count:d.items.length,path:a,domId:m(r),collapsed:f.has(r),editable:g,list:d,onToggle:p},r)})}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`content.items.empty`)}),g&&Ei(d.items.length,h)?(0,G.jsx)(Hr,{label:t(`content.items.add`,{item:n.label}),onClick:()=>d.add(X(n,!1))}):null]})},Ni=e=>{let{t}=T(),{component:n,value:r,onChange:i,path:a,readOnly:o,disabled:s,field:c}=e,l=!o&&!s,u=(0,W.useCallback)(e=>i(e),[i]);return B(r)?(0,G.jsxs)(`div`,{className:`space-y-4 rounded-xl border bg-card p-5`,children:[(0,G.jsx)(Z,{component:n,item:r,onItemChange:u,path:a}),l&&!c.required?(0,G.jsxs)(M,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>i(null),children:[(0,G.jsx)(rt,{"aria-hidden":`true`}),t(`content.items.removeSingle`,{item:n.label})]}):null]}):l?(0,G.jsx)(Hr,{label:t(`content.items.add`,{item:n.label}),onClick:()=>i(X(n,!1))}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`content.items.empty`)})},Pi=e=>{let{t}=T(),{components:n}=I(),{definition:r}=e,i=r.type===`component`?n.get(r.settings.component):void 0;return!i||r.type!==`component`?(0,G.jsx)(`p`,{className:`text-sm text-destructive`,children:t(`content.items.componentMissing`)}):r.settings.repeatable&&e.appearance===`canvas`?(0,G.jsx)(ji,{...e,component:i}):r.settings.repeatable?(0,G.jsx)(Mi,{...e,component:i}):(0,G.jsx)(Ni,{...e,component:i})},Fi=({label:e,onClear:t,disabled:n})=>{let{t:r}=T();return(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,disabled:n,"aria-label":r(`content.fields.clearValue`,{field:e}),onClick:t,children:(0,G.jsx)(d,{"aria-hidden":`true`})})},Ii=e=>{let{value:t,onChange:n,onBlur:r,readOnly:i,disabled:a,definition:o,field:s}=e,c=o.type===`date`?o.settings:{},l=V(t);return(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(N,{...U(e),type:`date`,value:l,min:c.min,max:c.max,readOnly:i,disabled:a,className:`w-auto`,onChange:e=>n(e.target.value===``?null:e.target.value),onBlur:r}),l&&!i?(0,G.jsx)(Fi,{label:s.label,disabled:a,onClear:()=>n(null)}):null]})},Q=(e,t=2)=>String(e).padStart(t,`0`),Li=(e,t)=>{if(typeof e!=`string`)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let[r=0,i=1,a=1,o=0,s=0,c=0]=t?[n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds()]:[n.getFullYear(),n.getMonth()+1,n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds()];return`${Q(r,4)}-${Q(i)}-${Q(a)}T${Q(o)}:${Q(s)}:${Q(c)}`},Ri=(e,t)=>{if(e===``)return null;let n=/T\d{2}:\d{2}$/.test(e)?`${e}:00`:e,r=new Date(t?`${n}Z`:n);return Number.isNaN(r.getTime())?null:r.toISOString()},zi=()=>Intl.DateTimeFormat().resolvedOptions().timeZone,Bi=e=>{let{t}=T(),{inputId:n,value:r,onChange:i,onBlur:a,readOnly:o,disabled:s,field:c}=e,l=H(e,`display`)===`utc`,u=`${n}-zone`;return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(N,{...U(e,u),type:`datetime-local`,step:1,value:Li(r,l),readOnly:o,disabled:s,className:`w-auto`,onChange:e=>i(Ri(e.target.value,l)),onBlur:a}),r&&!o?(0,G.jsx)(Fi,{label:c.label,disabled:s,onClear:()=>i(null)}):null]}),(0,G.jsx)(`p`,{id:u,className:`text-meta text-muted-foreground`,children:l?t(`content.fields.dateTime.utc`):t(`content.fields.dateTime.local`,{zone:zi()})})]})},Vi=(e,t)=>(e.type===`dynamiczone`?e.settings.components:e.type===`component`?[e.settings.component]:[]).map(e=>t.get(e)).filter(e=>e!==void 0),Hi=e=>Vi(e,I().components),Ui=({allowed:e,onAdd:t})=>{let{t:n}=T(),r=Zt();return(0,G.jsxs)(Ct,{children:[(0,G.jsx)(xt,{asChild:!0,children:(0,G.jsx)(Hr,{label:n(`content.items.addSection`)})}),(0,G.jsx)(St,{align:`start`,onCloseAutoFocus:r.onCloseAutoFocus,children:e.map(e=>(0,G.jsx)(_t,{onSelect:()=>r.defer(()=>t(e)),children:e.label},e.id))})]})},Wi=({allowed:e,item:t,itemKey:n,index:r,count:i,path:a,domId:o,collapsed:s,editable:c,list:l,onToggle:u})=>{let{t:d}=T(),f=e.find(e=>e.apiKey===t[z]),p=wr(a,r),m=xi(p),h=(0,W.useCallback)(e=>l.update(r,e),[l,r]);return(0,G.jsx)(Si,{id:o,title:f?.label??d(`content.items.unknownComponent`,{key:String(t.__component)}),summary:f?gi(f,t):``,index:r,count:i,collapsed:s,issueCount:m,editable:c,onToggle:()=>u(n),onMove:e=>l.move(r,e),onDuplicate:f?()=>l.duplicate(r):void 0,onRemove:()=>l.remove(r),children:f?(0,G.jsx)(Z,{component:f,item:t,onItemChange:h,path:p}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:d(`content.items.unknownComponentHint`)})})},Gi=e=>{let{value:t,onChange:n,path:r,labelId:i,inputId:a,readOnly:o,disabled:s,definition:c,field:l}=e,u=ki(t,n),d=Hi(c),f=c.type===`dynamiczone`?c.settings:void 0,p=!o&&!s,m=Ei(u.items.length,f?.max);return(0,G.jsxs)(`div`,{children:[u.items.length===0?(0,G.jsx)(Oi,{min:f?.min,action:p&&m&&d.length>0?(0,G.jsx)(Ui,{allowed:d,onAdd:e=>u.add(X(e,!0))}):null}):null,(0,G.jsx)(Ti,{list:u,labelId:i,inputId:a,path:r,editable:p,insertable:m?d:[],componentOf:e=>d.find(t=>t.apiKey===e[z]),newItem:e=>X(e,!0),startCollapsed:l.options.collapsed===!0})]})},Ki=e=>e.appearance===`canvas`?(0,G.jsx)(Gi,{...e}):(0,G.jsx)(qi,{...e}),qi=e=>{let{t}=T(),{value:n,onChange:r,path:i,labelId:a,inputId:o,readOnly:s,disabled:c,definition:l,field:u}=e,d=ki(n,r),{collapsed:f,toggle:p,setAll:m}=_i(d.keys,u.options.collapsed===!0),h=(0,W.useCallback)(e=>`${o}-item-${e}`,[o]);vi(d.keys,h);let g=Hi(l),_=l.type===`dynamiczone`?l.settings.max:void 0,v=!s&&!c,y=d.keys.length>0&&d.keys.every(e=>f.has(e));return(0,G.jsxs)(`div`,{className:`space-y-3`,children:[d.items.length>1?(0,G.jsx)(`div`,{className:`flex justify-end`,children:(0,G.jsxs)(M,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>m(d.keys,!y),children:[y?(0,G.jsx)(et,{"aria-hidden":`true`}):(0,G.jsx)(fn,{"aria-hidden":`true`}),t(y?`content.items.expandAll`:`content.items.collapseAll`)]})}):null,d.items.length>0?(0,G.jsx)(`ol`,{"aria-labelledby":a,className:`space-y-2`,children:d.items.map((e,t)=>{let n=d.keys[t]??String(t);return(0,G.jsx)(Wi,{allowed:g,item:e,itemKey:n,index:t,count:d.items.length,path:i,domId:h(n),collapsed:f.has(n),editable:v,list:d,onToggle:p},n)})}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`content.items.emptyZone`)}),v&&Ei(d.items.length,_)?(0,G.jsx)(Ui,{allowed:g,onAdd:e=>d.add(X(e,!0))}):null]})},Ji=({id:e,message:t})=>t?(0,G.jsx)(`p`,{id:e,role:`alert`,className:`text-sm text-destructive`,children:t}):null,Yi=8,Xi=2,Zi=e=>e==null?``:JSON.stringify(e,null,Xi),Qi=e=>{if(e.trim()===``)return{ok:!0,value:null};try{return{ok:!0,value:JSON.parse(e)}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}},$i=e=>{let{t}=T(),{inputId:n,value:r,onChange:i,onBlur:a,readOnly:o,disabled:s}=e,[c,l]=(0,W.useState)(()=>Zi(r)),[u,d]=(0,W.useState)(),[f,p]=(0,W.useState)(r);if(!Object.is(f,r)){p(r);let e=Qi(c);(!e.ok||!qt(e.value,r??null))&&(l(Zi(r)),d(void 0))}let m=`${n}-parse`;return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsx)(rn,{...U(e,u?m:void 0),"aria-invalid":e.validation.invalid||u!==void 0||void 0,rows:tn(e,`rows`)??Yi,value:c,spellCheck:!1,readOnly:o,disabled:s,className:`font-mono text-sm`,onChange:e=>{l(e.target.value);let t=Qi(e.target.value);d(t.ok?void 0:t.message),t.ok&&i(t.value)},onBlur:a}),(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,G.jsx)(Ji,{id:m,message:u?t(`content.fields.json.invalid`,{reason:u}):void 0}),o?null:(0,G.jsxs)(M,{type:`button`,variant:`ghost`,size:`sm`,className:`ml-auto`,disabled:s||u!==void 0||c.trim()===``,onClick:()=>l(Zi(r)),children:[(0,G.jsx)(Ve,{"aria-hidden":`true`}),t(`content.fields.json.format`)]})]})]})},ea=({assetId:e,index:t,count:n,editable:r,onMove:i,onRemove:a})=>{let{t:o}=T(),s=l(e),c=s.data?.filename??e;return(0,G.jsxs)(`li`,{className:`group/tile relative space-y-1.5`,children:[s.data?(0,G.jsx)(ut,{asset:s.data,className:`aspect-square w-full rounded-xl`}):s.isPending?(0,G.jsx)(qe,{className:`aspect-square w-full rounded-xl`}):(0,G.jsx)(`div`,{className:`flex aspect-square w-full items-center justify-center rounded-xl bg-muted text-muted-foreground`,children:(0,G.jsx)(mt,{"aria-hidden":`true`,className:`size-5`})}),(0,G.jsx)(`p`,{className:`truncate text-meta text-muted-foreground`,children:s.isError?o(`content.media.missing`):c}),r?(0,G.jsxs)(`div`,{className:`absolute top-2 right-2 flex gap-1 rounded-lg bg-popover p-0.5 opacity-0 shadow-sm transition-opacity group-focus-within/tile:opacity-100 group-hover/tile:opacity-100`,children:[(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":o(`content.items.moveUp`,{item:c,position:t+1}),disabled:t===0,onClick:()=>i(t-1),children:(0,G.jsx)(un,{"aria-hidden":`true`})}),(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":o(`content.items.moveDown`,{item:c,position:t+1}),disabled:t===n-1,onClick:()=>i(t+1),children:(0,G.jsx)(Re,{"aria-hidden":`true`})}),(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":o(`content.media.remove`,{name:c}),onClick:a,children:(0,G.jsx)(rt,{"aria-hidden":`true`})})]}):null]})},ta=({ids:e,labelId:t,inputId:n,editable:r,canAdd:i,onPick:a,commit:o})=>{let{t:s}=T(),{uploadMedia:c}=I(),[l,u]=(0,W.useState)(!1),[d,f]=(0,W.useState)(0),p=r&&i&&c!==void 0,m=async t=>{u(!1);let n=[...t.dataTransfer.files];if(!p||n.length===0||!c)return;t.preventDefault(),f(e=>e+n.length);let r=[];for(let e of n)try{r.push((await c(e)).id)}catch(t){Ce(t,`uploading ${e.name} into a gallery`),we.error(s(`entry.upload.failed`,{name:e.name}))}finally{f(e=>e-1)}r.length>0&&o([...e,...r])};return(0,G.jsxs)(`div`,{className:P(`rounded-xl font-sans`,l&&`ring-[3px] ring-ring/50`),onDragOver:e=>{p&&e.dataTransfer.types.includes(`Files`)&&(e.preventDefault(),u(!0))},onDragLeave:()=>u(!1),onDrop:e=>void m(e),children:[(0,G.jsx)(`ul`,{"aria-labelledby":t,className:`grid grid-cols-2 gap-3 sm:grid-cols-3`,children:e.map((t,n)=>(0,G.jsx)(ea,{assetId:t,index:n,count:e.length,editable:r,onMove:t=>o(R(e,n,t)),onRemove:()=>o(e.filter(e=>e!==t))},t))}),r&&i?(0,G.jsxs)(`button`,{id:n,type:`button`,onClick:a,className:P(`mt-3 flex h-20 w-full items-center justify-center gap-2 rounded-xl border border-dashed text-sm text-muted-foreground outline-none hover:bg-muted/50 hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50`),children:[(0,G.jsx)(Fe,{"aria-hidden":`true`,className:`size-4`}),d>0?s(`entry.upload.uploadingCount`,{count:d}):s(c?`entry.gallery.addOrDrop`:`content.media.add`)]}):null]})},na=e=>{let{t}=T(),{canWrite:n}=lt(),{value:r,onChange:i,onBlur:a,readOnly:o,disabled:s,definition:c,context:l,inputId:u,labelId:d,describedBy:f}=e,p=c.type===`media`?c.settings:{multiple:!1},m=p.multiple,h=L(r).filter(e=>typeof e==`string`),g=!o&&!s,_=e=>{i(m?e.length>0?e:null:e[0]??null),a()},v=async()=>{try{let e=await l.pickMedia({multiple:m,...`allowedKinds`in p&&p.allowedKinds?{allowedKinds:p.allowedKinds}:{}});if(e&&e.length>0){let t=e.map(e=>e.id);_(m?[...h,...t.filter(e=>!h.includes(e))]:t.slice(0,1))}}catch(e){Oe(e,`picking media`)}},y=`max`in p?p.max:void 0;return m&&e.appearance===`canvas`?(0,G.jsx)(ta,{ids:h,labelId:d,inputId:u,editable:g,canAdd:y===void 0||h.length<y,onPick:()=>void v(),commit:_}):(0,G.jsxs)(`div`,{role:`group`,"aria-labelledby":d,"aria-describedby":f,className:`space-y-2`,children:[h.length>0?(0,G.jsx)(`ul`,{className:`space-y-2`,children:h.map((e,t)=>(0,G.jsx)(Le,{assetId:e,inputId:u,index:t,count:h.length,editable:g,canEditAlt:n&&!o,onMove:m?e=>_(R(h,t,e)):void 0,onRemove:()=>_(h.filter(t=>t!==e))},e))}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`content.media.empty`)}),g&&(!m||y===void 0||h.length<y)?(0,G.jsxs)(M,{id:u,type:`button`,variant:`outline`,size:`sm`,onClick:()=>void v(),children:[(0,G.jsx)(Fe,{"aria-hidden":`true`}),m?t(`content.media.add`):h.length>0?t(`content.media.replace`):t(`content.media.chooseOne`)]}):null]})},ra=/^-?\d+$/,ia=/^-?(\d+\.?\d*|\.\d+)([eE][-+]?\d+)?$/,aa=(e,t)=>{let n=t.trim();if(n===``)return{ok:!0,value:null};if(e===`decimal`||e===`biginteger`)return{ok:!0,value:n};if(!(e===`integer`?ra:ia).test(n))return{ok:!1};let r=Number(n);return Number.isFinite(r)&&(e!==`integer`||Number.isSafeInteger(r))?{ok:!0,value:r}:{ok:!1}},oa=e=>{let{t}=T(),{inputId:n,value:r,onChange:i,onBlur:a,readOnly:o,disabled:s,definition:c}=e,[l,u]=(0,W.useState)(()=>V(r)),[d,f]=(0,W.useState)(!1),[p,m]=(0,W.useState)(r);if(!Object.is(p,r)){m(r);let e=aa(c.type,l);(!e.ok||e.value!==r)&&(u(V(r)),f(!1))}let h=`${n}-parse`,g=c.type===`integer`||c.type===`biginteger`;return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsx)(N,{...U(e,d?h:void 0),"aria-invalid":e.validation.invalid||d||void 0,inputMode:g?`numeric`:`decimal`,value:l,placeholder:H(e,`placeholder`),step:tn(e,`step`),readOnly:o,disabled:s,className:`tabular-nums`,onChange:e=>{u(e.target.value);let t=aa(c.type,e.target.value);f(!t.ok),t.ok&&i(t.value)},onBlur:a}),(0,G.jsx)(Ji,{id:h,message:d?t(g?`content.fields.number.notInteger`:`content.fields.number.notNumber`):void 0})]})},sa=e=>{let{inputId:t,labelId:n,describedBy:r,value:i,onChange:a,onBlur:o,readOnly:s,disabled:c,field:l,validation:u}=e,d=Nr(i),f=H(e,`layout`)===`horizontal`;return(0,G.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,G.jsx)(Et,{"aria-labelledby":n,"aria-describedby":r,"aria-invalid":u.invalid||void 0,value:d,disabled:c||s,onValueChange:t=>a(Mr(e,t)),onBlur:o,className:P(f&&`flex flex-wrap gap-x-6`),children:jr(e).map(e=>(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(Tt,{id:`${t}-${e.value}`,value:e.value}),(0,G.jsx)(Ge,{htmlFor:`${t}-${e.value}`,className:`font-normal`,children:e.label})]},e.value))}),d&&!l.required&&!s?(0,G.jsx)(Fi,{label:l.label,disabled:c,onClear:()=>a(null)}):null]})},ca=100,la=(e,t,n)=>{let r=e?Ft(e):void 0,i=t.slice(0,ca),a={filters:{id:{$in:[...i].sort()}},pageSize:Math.max(i.length,1),...r?{fields:[r.apiKey]}:{},...n&&e?.localized?{locale:n}:{}},o=Lt(e?.apiKey??``,a,e!==void 0&&i.length>0),s=o.data?.items;return{byId:(0,W.useMemo)(()=>new Map((s??[]).map(e=>[e.id,e])),[s]),isLoading:o.isPending&&i.length>0,error:o.error}},ua=(0,W.memo)(({field:e,layout:t,className:n})=>{let{model:r}=I(),{value:i,onChange:a}=or(e);return(0,G.jsx)(Kr,{field:e,owner:r,value:i,onChange:a,path:`/${e.apiKey}`,topLevel:!0,layout:t,className:n})});ua.displayName=`TopLevelField`;var da=({fields:e,mode:t})=>(0,G.jsx)(ir,{children:(0,G.jsx)($r,{fields:e,mode:t,renderField:(e,t)=>(0,G.jsx)(ua,{field:e,layout:`stacked`,className:t},e.id)})}),fa=(e,t)=>{let n=`/${t}`;return e.filter(e=>e.path!==n&&!e.path.startsWith(`${n}/`))},pa=e=>a()(t=>({values:e,baseline:e,issues:[],touched:new Set,revealAll:!1,setValue:(e,n)=>t(t=>({values:{...t.values,[e]:n},issues:fa(t.issues,e)})),patchValues:e=>t(t=>({values:{...t.values,...e},issues:Object.keys(e).reduce(fa,t.issues)})),touch:e=>t(t=>t.touched.has(e)?t:{touched:new Set([...t.touched,e])}),reveal:()=>t({revealAll:!0}),setIssues:e=>t({issues:e}),load:e=>t({values:e,baseline:e,issues:[],touched:new Set,revealAll:!1}),rebase:(e,n)=>t({values:{...e,...n},baseline:e,issues:[]}),acceptSaved:(e,n)=>t(t=>di(t.values,e,n))})),ma=e=>ci(e.values,e.baseline),ha=e=>{if(!(e instanceof w)||e.code!==`CONTENT_INVALID`||!B(e.details))return[];let t=e.details.issues;return Array.isArray(t)?t.filter(e=>B(e)&&typeof e.path==`string`&&typeof e.code==`string`):[]},ga=e=>{if(!(e instanceof w)||e.code!==`ENTRY_REFERENCED`||!B(e.details))return[];let t=e.details.referrers;return Array.isArray(t)?t.filter(e=>B(e)):[]},_a=e=>e instanceof w&&e.status===409&&(e.code===`CONTENT_VERSION_CONFLICT`||e.code===`SCHEMA_CHANGED`),va=({target:e,onClose:t,onCreated:n})=>{let{t:r}=T(),a=I(),[o]=(0,W.useState)(()=>pa(oi(e.fields))),s=i(o,e=>ma(e).length>0),c=It(e.apiKey),{requestOpenChange:l,discardPrompt:u}=Nt({dirty:s,pending:c.isPending,onOpenChange:e=>e?void 0:t()}),d=e.localized?a.locale:null,h=(0,W.useMemo)(()=>({...a,idPrefix:`${a.idPrefix}inline-`,model:e,locale:d,entryId:null,readOnly:!1,disabled:c.isPending}),[a,e,d,c.isPending]),v=async()=>{o.getState().reveal();try{n((await c.mutateAsync({...d?{locale:d}:{},data:ui(o.getState().values)})).id)}catch(e){o.getState().setIssues(ha(e))}},y=ha(c.error);return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(p,{open:!0,onOpenChange:l,children:(0,G.jsxs)(S,{size:`md`,"aria-describedby":void 0,children:[(0,G.jsx)(b,{children:(0,G.jsx)(_,{children:r(`content.relation.createTitle`,{model:e.label})})}),(0,G.jsxs)(`form`,{noValidate:!0,className:`flex min-h-0 flex-1 flex-col`,onSubmit:e=>{e.preventDefault(),v()},children:[(0,G.jsxs)(g,{className:`space-y-5`,children:[(0,G.jsx)(ar,{environment:h,store:o,children:(0,G.jsx)(da,{fields:ni(e.fields),mode:Xr(e)})}),c.isError&&y.length===0?(0,G.jsx)(tt,{error:c.error}):null,y.length>0?(0,G.jsx)(`p`,{role:`alert`,className:`text-sm text-destructive`,children:r(`content.form.fixProblems`,{count:y.length})}):null]}),(0,G.jsxs)(m,{children:[(0,G.jsx)(M,{type:`button`,variant:`outline`,onClick:()=>l(!1),children:r(`common.cancel`)}),(0,G.jsx)(f,{pending:c.isPending,pendingLabel:r(`content.form.creating`),children:r(`content.relation.createAndLink`)})]})]})]})}),u]})},ya=`(min-width: 48rem)`,ba=e=>{let t=window.matchMedia(ya);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},xa=()=>window.matchMedia(ya).matches,Sa=()=>(0,W.useSyncExternalStore)(ba,xa,()=>!0),Ca=e=>{let[t,n]=(0,W.useState)(),r=t!==void 0&&e.includes(t)?t:void 0;return{activeId:r,setActiveId:n,move:t=>{if(e.length===0)return;let i=r===void 0?-1:e.indexOf(r),a=i===-1?t===1?0:e.length-1:i+t;n(e[Math.min(Math.max(a,0),e.length-1)])},first:()=>n(e[0]),last:()=>n(e.at(-1))}},wa=20,Ta=300,Ea=({target:e,locale:t,multiple:n,selected:r,exclude:i,full:a,onPick:o,onUnpick:s,className:c,listClassName:l})=>{let{t:u}=T(),d=(0,W.useId)(),[f,p]=(0,W.useState)(``),m=Mt(f.trim(),Ta),h=zt(e),g=Lt(e.apiKey,{pageSize:wa,...m&&h?{q:m}:{},...t&&e.localized?{locale:t}:{}}),_=(g.data?.items??[]).filter(e=>!i.includes(e.id)),v=Ca(_.map(e=>e.id)),y=e=>`${d}-${e}`,b=v.activeId?y(v.activeId):void 0;(0,W.useEffect)(()=>{b&&document.getElementById(b)?.scrollIntoView({block:`nearest`})},[b]);let ee=e=>{let t=r.includes(e);n&&t?s(e):n&&a||o(e)},S=e=>{e.altKey||e.ctrlKey||e.metaKey||(e.key===`ArrowDown`||e.key===`ArrowUp`?(e.preventDefault(),v.move(e.key===`ArrowDown`?1:-1)):(e.key===`Home`||e.key===`End`)&&!h?(e.preventDefault(),e.key===`Home`?v.first():v.last()):e.key===`Enter`&&v.activeId&&(e.preventDefault(),ee(v.activeId)))};return(0,G.jsxs)(`div`,{className:P(`flex min-h-0 flex-col gap-3`,c),children:[h?(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(dt,{"aria-hidden":`true`,className:`absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground`}),(0,G.jsx)(N,{type:`search`,role:`combobox`,"aria-expanded":`true`,"aria-controls":d,"aria-autocomplete":`list`,"aria-activedescendant":b,value:f,"aria-label":u(`content.relation.search`,{model:e.label}),placeholder:u(`content.relation.searchPlaceholder`),className:`pl-9`,onChange:e=>p(e.target.value),onKeyDown:S})]}):null,(0,G.jsx)(`ul`,{id:d,role:`listbox`,"aria-label":u(`content.relation.results`),"aria-multiselectable":n||void 0,"aria-busy":g.isPending||void 0,"aria-activedescendant":h?void 0:b,tabIndex:h?void 0:0,onKeyDown:h?void 0:S,className:P(`min-h-0 space-y-0.5 overflow-y-auto rounded-lg outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,l),children:_.map(t=>{let i=r.includes(t.id),o=n&&a&&!i;return(0,G.jsxs)(`li`,{id:y(t.id),role:`option`,"aria-selected":i,"aria-disabled":o||void 0,"data-active":t.id===v.activeId||void 0,className:P(`flex cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-sm select-none data-[active]:bg-accent data-[active]:text-accent-foreground`,o&&`cursor-not-allowed opacity-50`),onMouseDown:e=>e.preventDefault(),onPointerMove:()=>t.id===v.activeId?void 0:v.setActiveId(t.id),onClick:()=>ee(t.id),children:[(0,G.jsx)(Ue,{"aria-hidden":`true`,className:P(`size-4 shrink-0`,!i&&`invisible`)}),(0,G.jsx)(`span`,{className:`min-w-0 truncate`,children:Bt(e,t,u(`content.untitled`))})]},t.id)})}),g.isPending?(0,G.jsx)(C,{rows:3}):g.isError?(0,G.jsx)(x,{error:g.error,onRetry:()=>void g.refetch()}):_.length===0?(0,G.jsx)(`p`,{role:`status`,className:`py-4 text-center text-sm text-muted-foreground`,children:u(`content.relation.noResults`)}):null]})},Da=({open:e,onOpenChange:t,trigger:n,target:r,multiple:i,selected:a,exclude:o,locale:s,full:c,canCreate:l,onPick:u,onUnpick:d,onCreate:f,onFocusFallback:v})=>{let{t:y}=T(),x=Sa(),ee=(0,W.useId)(),C=(0,W.useRef)(null),w=(0,W.useRef)(!1),E=y(`content.relation.chooseTitle`,{model:r.label}),D=e=>{u(e),i||t(!1)},te=()=>{w.current=!0,t(!1)},ne=e=>{let t=w.current;w.current=!1;let n=C.current;(t||!n?.isConnected)&&(e.preventDefault(),n?.isConnected?n.focus({preventScroll:!0}):v(),t&&f())},re=e=>(0,G.jsx)(Ea,{target:r,locale:s,multiple:i,selected:a,exclude:o,full:c,onPick:D,onUnpick:d,className:`flex-1`,listClassName:e}),O=l||i?(0,G.jsxs)(G.Fragment,{children:[l?(0,G.jsxs)(M,{type:`button`,variant:`ghost`,size:`sm`,className:`mr-auto`,onClick:te,children:[(0,G.jsx)(wt,{"aria-hidden":`true`}),y(`content.relation.createNew`,{model:r.label})]}):null,i?(0,G.jsx)(M,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>t(!1),children:y(`content.relation.done`)}):null]}):null;return x?(0,G.jsxs)(De,{open:e,onOpenChange:t,modal:!0,children:[n?(0,G.jsx)(Te,{asChild:!0,ref:C,children:n}):null,(0,G.jsxs)(Ee,{"aria-labelledby":ee,align:`start`,collisionPadding:16,className:`flex max-h-(--radix-popover-content-available-height) w-96 flex-col gap-3 p-3`,onCloseAutoFocus:ne,children:[(0,G.jsx)(`p`,{id:ee,className:`text-sm font-semibold`,children:E}),re(`max-h-72`),O?(0,G.jsx)(`div`,{className:`flex items-center justify-end gap-2 border-t pt-3`,children:O}):null]})]}):(0,G.jsxs)(p,{open:e,onOpenChange:t,children:[n?(0,G.jsx)(h,{asChild:!0,ref:C,children:n}):null,(0,G.jsxs)(S,{side:`bottom`,"aria-describedby":void 0,onCloseAutoFocus:ne,children:[(0,G.jsx)(b,{children:(0,G.jsx)(_,{children:E})}),(0,G.jsx)(g,{className:`flex flex-col`,children:re()}),O?(0,G.jsx)(m,{children:O}):null]})]})},Oa=e=>{let{t}=T(),n=I(),{value:r,onChange:i,onBlur:a,readOnly:o,disabled:s,definition:c,field:l,inputId:u,labelId:f,describedBy:p}=e,[m,h]=(0,W.useState)(!1),[g,_]=(0,W.useState)(!1),v=(0,W.useRef)(null),y=c.type===`relation`?c.settings:void 0,b=y?n.models.get(y.target):void 0,x=y?.cardinality===`many`,S=L(r).filter(e=>typeof e==`string`),C=la(b,S,n.locale);if(!y||!b)return(0,G.jsx)(`p`,{className:`text-sm text-destructive`,children:t(`content.relation.targetMissing`)});let w=!o&&!s,E=e=>{i(x?e.length>0?e:null:e[0]??null),a()},D=e=>E(x?S.includes(e)?S:[...S,e]:[e]),te=!x||y.max===void 0||S.length<y.max,ne=e=>{let n=C.byId.get(e);return n?Vt(b,n.data)??`${t(`content.untitled`)} · ${Rt(e)}`:void 0};return(0,G.jsxs)(`div`,{role:`group`,"aria-labelledby":f,"aria-describedby":p,className:`space-y-2`,children:[S.length>0?(0,G.jsx)(`ul`,{ref:v,className:`space-y-2`,children:S.map((e,n)=>{let r=ne(e);return(0,G.jsxs)(`li`,{className:`flex items-center gap-3 rounded-lg border bg-card p-2 pl-3`,children:[(0,G.jsx)(ee,{icon:gt}),(0,G.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[r===void 0?C.isLoading?(0,G.jsx)(qe,{className:`h-4 w-40`}):(0,G.jsx)(`span`,{className:`block truncate text-sm text-destructive`,children:t(`content.relation.missingEntry`,{id:Rt(e)})}):(0,G.jsx)(`span`,{className:`block truncate text-sm font-semibold`,children:r}),(0,G.jsx)(`span`,{className:`block text-meta text-muted-foreground`,children:b.label})]}),w&&x?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":t(`content.items.moveUp`,{item:r??e,position:n+1}),disabled:n===0,onClick:()=>E(R(S,n,n-1)),children:(0,G.jsx)(Ie,{"aria-hidden":`true`})}),(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":t(`content.items.moveDown`,{item:r??e,position:n+1}),disabled:n===S.length-1,onClick:()=>E(R(S,n,n+1)),children:(0,G.jsx)(Pe,{"aria-hidden":`true`})})]}):null,w?(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":t(`content.relation.remove`,{item:r??e}),onClick:()=>E(S.filter(t=>t!==e)),children:(0,G.jsx)(d,{"aria-hidden":`true`})}):null]},e)})}):(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`content.relation.empty`)}),w?(0,G.jsx)(Da,{open:m,onOpenChange:h,trigger:te||m?(0,G.jsxs)(M,{id:u,type:`button`,variant:`outline`,size:`sm`,children:[(0,G.jsx)(wt,{"aria-hidden":`true`}),x?t(`content.relation.add`,{model:b.label}):S.length>0?t(`content.relation.change`):t(`content.relation.choose`,{model:b.label})]}):null,target:b,multiple:x,selected:S,exclude:n.entryId&&b.id===n.model.id?[n.entryId]:[],locale:n.locale,full:!te,canCreate:l.options.allowInlineCreate===!0,onPick:D,onUnpick:e=>E(S.filter(t=>t!==e)),onCreate:()=>_(!0),onFocusFallback:()=>v.current?.querySelector(`li:last-child button:last-child`)?.focus()}):null,g?(0,G.jsx)(va,{target:b,onClose:()=>_(!1),onCreated:e=>{_(!1),D(e)}}):null]})},ka=We(`inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-transparent`,outline:`border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground`},size:{default:`h-9 min-w-9 px-2`,sm:`h-8 min-w-8 px-1.5`,lg:`h-10 min-w-10 px-2.5`}},defaultVariants:{variant:`default`,size:`default`}}),Aa=W.createContext({size:`default`,variant:`default`});function ja({className:e,variant:t,size:n,children:r,...i}){return(0,G.jsx)(Un,{"data-slot":`toggle-group`,"data-variant":t,"data-size":n,className:P(`group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs`,e),...i,children:(0,G.jsx)(Aa.Provider,{value:{variant:t,size:n},children:r})})}function Ma({className:e,children:t,variant:n,size:r,...i}){let a=W.useContext(Aa);return(0,G.jsx)(Qn,{"data-slot":`toggle-group-item`,"data-variant":a.variant||n,"data-size":a.size||r,className:P(ka({variant:a.variant||n,size:a.size||r}),`min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l`,e),...i,children:t})}var Na=e=>{let{labelId:t,describedBy:n,value:r,onChange:i,onBlur:a,readOnly:o,disabled:s,validation:c}=e;return(0,G.jsx)(ja,{type:`single`,variant:`outline`,"aria-labelledby":t,"aria-describedby":n,"aria-invalid":c.invalid||void 0,value:Nr(r),disabled:s||o,onValueChange:t=>i(Mr(e,t)),onBlur:a,className:`flex-wrap`,children:jr(e).map(e=>(0,G.jsx)(Ma,{value:e.value,className:`px-3`,children:e.label},e.value))})},Pa=e=>{let{t}=T(),{value:n,onChange:r,readOnly:i,disabled:a,field:o}=e,s=L(n),c=jr(e),l=c.filter(e=>s.includes(e.value)).map(e=>e.label).join(`, `);return(0,G.jsxs)(Ct,{children:[(0,G.jsx)(xt,{asChild:!0,disabled:a||i,children:(0,G.jsxs)(M,{variant:`outline`,...U(e),className:`w-full justify-between font-normal`,children:[(0,G.jsx)(`span`,{className:`truncate`,children:l||H(e,`placeholder`)||t(`content.fields.choose`)}),(0,G.jsx)(Qe,{"aria-hidden":`true`,className:`opacity-50`})]})}),(0,G.jsx)(St,{align:`start`,className:`w-(--radix-dropdown-menu-trigger-width)`,"aria-label":o.label,children:c.map(e=>(0,G.jsx)(yt,{checked:s.includes(e.value),onSelect:e=>e.preventDefault(),onCheckedChange:t=>r(t?c.map(e=>e.value).filter(t=>t===e.value||s.includes(t)):s.filter(t=>t!==e.value)),children:e.label},e.value))})]})},Fa=e=>{let{t}=T(),{value:n,onChange:r,onBlur:i,readOnly:a,disabled:o,field:s}=e;if(Pr(e))return(0,G.jsx)(Pa,{...e});let c=Nr(n);return(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsxs)($e,{value:c,disabled:o||a,onValueChange:t=>r(Mr(e,t)),children:[(0,G.jsx)(Ye,{...U(e),className:`w-full`,onBlur:i,children:(0,G.jsx)(Je,{placeholder:H(e,`placeholder`)??t(`content.fields.choose`)})}),(0,G.jsx)(Xe,{children:jr(e).map(e=>(0,G.jsx)(Ze,{value:e.value,children:e.label},e.value))})]}),c&&!s.required&&!a?(0,G.jsx)(Fi,{label:s.label,disabled:o,onClear:()=>r(null)}):null]})},Ia=({counter:e})=>{let{t}=T();return(0,G.jsx)(`p`,{className:P(`text-meta tabular-nums`,e.over?`text-warning`:`text-muted-foreground`),children:t(e.over?`seo.field.counterOver`:`seo.field.counter`,{count:e.count,max:e.max})})},La={[ge.title]:70,[ge.description]:160},Ra=(e,t)=>{let n=La[e];if(n===void 0)return null;let r=typeof t==`string`?[...t].length:0;return r>=n-10?{count:r,max:n,over:r>n}:null},za=new Map(_e().fields.map(e=>[e.id,e.type])),Ba=e=>{let t={};for(let[n,r]of Object.entries(ge)){let i=e.fields.find(e=>e.id===r&&!e.deprecated);i&&i.type===za.get(r)&&(t[n]=i.apiKey)}return t},Va=(e,t)=>{let n=e.find(e=>e.isDefault)?.code,r=t??n,i=[r,...e.find(e=>e.code===r)?.fallbacks??[],n].filter(t=>t!==void 0&&e.some(e=>e.code===t));return i.filter((e,t)=>i.indexOf(e)===t)},Ha=({value:e,component:t,defaults:n,localeChain:r,fallbackTitle:i})=>{let a=Ba(t),o=xe(n,r),s=cn(e,{defaults:o,image:null,fallbackTitle:typeof i==`string`?i:null,keys:a}),c=e=>{let t=a[e]===void 0?void 0:s[a[e]];return typeof t==`string`&&t.trim()!==``?t:null};return{title:a.title===void 0?null:c(`title`),description:c(`description`),siteName:o.siteName??null}},Ua=(e,t)=>{let{model:n,locale:r}=I(),i=be(),a=Kt().data,o=u().data?.site.name??``,s=pe(n)?.apiKey,c=n.fields.find(e=>e.type===`slug`&&!e.deprecated)?.apiKey,l=F(e=>s?e.values[s]:void 0),d=F(e=>c?e.values[c]:void 0);return(0,W.useMemo)(()=>{let n=Ha({value:t,component:e,defaults:i,localeChain:Va(a??[],r),fallbackTitle:l}),s=n.siteName??o,c=typeof d==`string`&&d!==``?`${s} › ${d}`:s;return{...n,urlLine:c}},[t,e,i,a,r,l,o,d])},Wa=({preview:e,noindex:t})=>{let{t:n}=T(),r=(0,W.useId)();return(0,G.jsxs)(`section`,{"aria-labelledby":r,className:`space-y-2 rounded-lg border bg-muted/40 p-4`,children:[(0,G.jsx)(`h4`,{id:r,className:`text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:n(`seo.field.preview`)}),(0,G.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,G.jsx)(`p`,{className:`truncate text-meta text-muted-foreground`,children:e.urlLine}),(0,G.jsx)(`p`,{className:`line-clamp-2 text-base font-semibold break-words text-link`,children:e.title??n(`seo.field.noTitle`)}),e.description?(0,G.jsx)(`p`,{className:`line-clamp-3 text-sm break-words text-muted-foreground`,children:e.description}):null]}),t?(0,G.jsx)(`p`,{className:`text-meta text-warning`,children:n(`seo.field.noindex`)}):null]})},Ga=(e,t)=>{let n=Ra(e.id,t);return n?(0,G.jsx)(Ia,{counter:n}):null},Ka=({component:e,value:t,onChange:n,path:r})=>{let i=(0,W.useMemo)(()=>B(t)?t:X(e,!1),[t,e]),a=(0,W.useCallback)(e=>n(e),[n]),o=Ua(e,t),s=Ba(e).noindex;return(0,G.jsxs)(`div`,{className:`space-y-4 rounded-xl border bg-card p-5`,children:[(0,G.jsx)(Z,{component:e,item:i,onItemChange:a,path:r,renderFieldFooter:Ga}),(0,G.jsx)(Wa,{preview:o,noindex:s!==void 0&&i[s]===!0})]})},qa=e=>{let{components:t}=I(),{definition:n}=e,r=n.type===`component`&&re(n)?t.get(n.settings.component):void 0;return r?(0,G.jsx)(Ka,{...e,component:r}):(0,G.jsx)(Pi,{...e})},$=e=>e.normalize(`NFKD`).replace(/[̀-ͯ]/g,``).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),Ja=e=>{let t=Wt(),n=e.definition.type===`slug`?e.definition.settings.sourceFieldId:void 0,r=t?.definition.fields.find(e=>e.id===n);if(!r)return;let i=t?.values[r.apiKey];return typeof i==`string`?i:``},Ya=e=>{let{t}=T(),{value:n,onChange:r,onBlur:i,readOnly:a,disabled:o}=e,s=Ja(e),c=V(n),[l,u]=(0,W.useState)(()=>s!==void 0&&(c===``||c===$(s))),d=(0,W.useRef)(s);return(0,W.useEffect)(()=>{if(s!==void 0&&s!==d.current&&(d.current=s,l&&!a)){let e=$(s);r(e===``?null:e)}},[s,l,a,r]),(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(N,{...U(e),value:c,placeholder:H(e,`placeholder`),readOnly:a,disabled:o,spellCheck:!1,className:`font-mono text-sm`,onChange:e=>{u(!1),r(e.target.value===``?null:e.target.value)},onBlur:()=>{c&&$(c)!==c&&r($(c)||null),i()}}),s!==void 0&&!a?(0,G.jsx)(M,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-pressed":l,"aria-label":t(l?`content.fields.slug.unlink`:`content.fields.slug.link`),title:t(l?`content.fields.slug.unlink`:`content.fields.slug.link`),disabled:o,onClick:()=>{if(!l){let e=$(s);r(e===``?null:e)}u(!l)},children:l?(0,G.jsx)(Be,{"aria-hidden":`true`}):(0,G.jsx)(ze,{"aria-hidden":`true`})}):null]})},Xa=4,Za=e=>{let{t}=T(),{inputId:n,value:r,onChange:i,onBlur:a,readOnly:o,disabled:s,definition:c}=e,l=V(r),u=`maxLength`in c.settings?c.settings.maxLength:void 0,d=`${n}-count`;return(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsx)(rn,{...U(e,u?d:void 0),rows:tn(e,`rows`)??Xa,value:l,placeholder:H(e,`placeholder`),readOnly:o,disabled:s,onChange:e=>i(e.target.value===``?null:e.target.value),onBlur:a}),u?(0,G.jsx)(`p`,{id:d,className:`text-right text-meta text-muted-foreground tabular-nums`,children:t(`content.fields.characterCount`,{count:l.length,max:u})}):null]})},Qa={email:`email`,url:`url`},$a=e=>{let{value:t,onChange:n,onBlur:r,readOnly:i,disabled:a,definition:o}=e,s=`maxLength`in o.settings?o.settings.maxLength:void 0;return(0,G.jsx)(N,{...U(e),type:Qa[o.type]??`text`,value:V(t),placeholder:H(e,`placeholder`),maxLength:s,readOnly:i,disabled:a,spellCheck:o.type===`string`,onChange:e=>n(e.target.value===``?null:e.target.value),onBlur:r})},eo=60,to=e=>{let{value:t,onChange:n,onBlur:r,readOnly:i,disabled:a,field:o}=e,s=V(t);return(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(N,{...U(e),type:`time`,value:s,step:(tn(e,`stepMinutes`)??1)*eo,readOnly:i,disabled:a,className:`w-auto`,onChange:e=>n(e.target.value===``?null:e.target.value),onBlur:r}),s&&!i?(0,G.jsx)(Fi,{label:o.label,disabled:a,onClear:()=>n(null)}):null]})},no=e=>{let{value:t,onChange:n,onBlur:r,readOnly:i,disabled:a}=e;return(0,G.jsx)(Dt,{...U(e),checked:t===!0,disabled:a||i,onCheckedChange:e=>n(e),onBlur:r})},ro=(0,W.lazy)(()=>jt(()=>import(`./RichTextField-fWNjndUc.js`).then(e=>({default:e.RichTextField})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]),import.meta.url)),io=(0,W.lazy)(()=>jt(()=>import(`./CodeEditor-NMvrWgxT.js`).then(e=>({default:e.CodeEditor})),__vite__mapDeps([32,1,2,4,6,9,3,10,11,33,34,35,36,37,38,31]),import.meta.url)),ao={textInput:{component:$a,labelling:`input`},textarea:{component:Za,labelling:`input`},color:{component:Vr,labelling:`input`},richText:{component:ro,labelling:`group`},numberInput:{component:oa,labelling:`input`},toggle:{component:no,labelling:`input`},checkbox:{component:Ir,labelling:`input`},segmented:{component:Na,labelling:`group`},select:{component:Fa,labelling:`input`},radio:{component:sa,labelling:`group`},checkboxGroup:{component:Fr,labelling:`group`},datePicker:{component:Ii,labelling:`input`},dateTimePicker:{component:Bi,labelling:`input`},timePicker:{component:to,labelling:`input`},slugInput:{component:Ya,labelling:`input`},jsonEditor:{component:$i,labelling:`input`},codeEditor:{component:io,labelling:`group`},mediaPicker:{component:na,labelling:`group`},relationPicker:{component:Oa,labelling:`group`},componentEditor:{component:Pi,labelling:`group`},dynamicZoneEditor:{component:Ki,labelling:`group`},[me]:{component:qa,labelling:`group`}},oo=e=>{let t=ao[e.editor.id],n=ie.get(e.editor.id)?.dataTypes.includes(e.type)??!1,r=ao[O[e.type]];if(!r)throw Error(`No built-in editor for data type ${e.type}`);return t&&n?t:r},so=(e,t)=>{let n=oo(e);if(!ae(e.editor.id))return{kind:`builtIn`,editor:n,missingCustomId:void 0};let r=t.get(e.editor.id);return r&&r.dataTypes.includes(e.type)?{kind:`runtime`,definition:r,fallback:n}:{kind:`builtIn`,editor:n,missingCustomId:e.editor.id}},co=new Set([`component`,`dynamiczone`]),lo=(e,t,n)=>{let r=F(e=>e.issues),i=F(e=>e.revealAll||e.touched.has(n));return(0,W.useMemo)(()=>{let a=co.has(e.type),o=r.filter(e=>e.path===n||e.path.startsWith(`${n}/`)&&(!a||e.path===`${n}/__component`)),s=i?_r(e,t).filter(e=>!o.some(t=>t.code===e.code)):[];return[...new Set([...o,...s].map(t=>Ar(t,e)))]},[e,t,n,r,i])},uo=({field:e,owner:t,value:n,onChange:r,path:i,appearance:a=`form`})=>{let o=I(),s=F(e=>e.touch),c=lo(e,n,i),l=(0,W.useCallback)(()=>s(i),[s,i]),u=(0,W.useMemo)(()=>so(e,o.runtimeEditors),[e,o.runtimeEditors]),d=vr(o.idPrefix,i),f=`${d}-label`,p=e.description?`${d}-description`:void 0,m=c.length>0?`${d}-errors`:void 0,h=[p,m].filter(Boolean).join(` `)||void 0,g=(0,W.useMemo)(()=>yr(e),[e]),_=(0,W.useMemo)(()=>br(t),[t]),v=(0,W.useMemo)(()=>Cr(o),[o]),y={inputId:d,labelId:f,describedBy:h,value:n??null,onChange:r,onBlur:l,validation:{errors:c,invalid:c.length>0},readOnly:o.readOnly,disabled:o.disabled,field:g,model:_,context:v,definition:e,path:i,appearance:a},{definition:b,path:x,appearance:ee,...S}=y,C=u.kind===`builtIn`?u.editor:u.fallback;return{resolved:u,builtIn:C,builtInProps:y,contractProps:S,labelling:u.kind===`runtime`?`input`:C.labelling,inputId:d,labelId:f,descriptionId:p,errorsId:m,messages:c}},fo=()=>o({queryKey:r.editorManifest,queryFn:()=>s.extensions.editors(),staleTime:1/0,meta:{silent:!0}}),po={editors:new Map,problems:[]},mo=(e,t=c())=>new URL(e.replace(/^\/+/,``),t).href,ho=e=>jt(()=>import(e),[],import.meta.url),go=async(e,t=ho)=>{let n=new Map,r=[];for(let i of e.items){let e;try{e=await t(mo(i.path))}catch(e){Ce(e,`loading custom editor ${i.file}`),r.push({file:i.file,reason:`importFailed`,detail:String(e)});continue}let a=Object.values(e).filter(Pt);a.length===0&&r.push({file:i.file,reason:`noEditor`});for(let e of a)e.contractVersion===1?n.has(e.id)?r.push({file:i.file,reason:`duplicateId`,detail:e.id}):n.set(e.id,e):r.push({file:i.file,reason:`contractVersion`,detail:e.id})}return{editors:n,problems:r}},_o=()=>{let e=fo(),t=o({queryKey:[`extensions`,`editors`,`modules`,e.data??null],queryFn:()=>go(e.data??{items:[]}),enabled:e.data!==void 0,staleTime:1/0,gcTime:1/0,meta:{silent:!0}});return{...t.data??po,isLoading:e.isPending||e.data!==void 0&&t.isPending}},vo=e=>e.fields.filter(e=>!e.deprecated),yo=e=>{if(!D(e))return[];let t=`/api/content/${ue(e)}`,n=`/api/admin/content/${e.apiKey}`,r=e.kind===`collection`;return[{method:`GET`,path:t,scope:`delivery`},...r?[{method:`GET`,path:`${t}/{id}`,scope:`delivery`}]:[],{method:`GET`,path:n,scope:`admin`},{method:`POST`,path:n,scope:`admin`},{method:`GET`,path:`${n}/{id}`,scope:`admin`},{method:`PUT`,path:`${n}/{id}`,scope:`admin`},{method:`DELETE`,path:`${n}/{id}`,scope:`admin`},{method:`POST`,path:`${n}/{id}/publish`,scope:`admin`},{method:`POST`,path:`${n}/{id}/unpublish`,scope:`admin`}]},bo={format:`shapio-richtext`,version:1,doc:{type:`doc`,content:[]}},xo={id:`<uuid>`,url:`<url>`,mimeType:`<mime type>`,alt:``},So=2,Co=(e,t,n)=>{let r=(e,t)=>e?[t]:t;switch(e.type){case`number`:case`integer`:return 0;case`boolean`:return!1;case`json`:return{};case`richtext`:return bo;case`media`:return r(e.settings.multiple,xo);case`enum`:return r(e.settings.multiple,e.settings.values[0]?.value??``);case`relation`:return r(e.settings.cardinality===`many`,`<entry id>`);case`component`:{let i=t.get(e.settings.component);return r(e.settings.repeatable,i?wo(i,t,n+1):{})}case`dynamiczone`:return e.settings.components.slice(0,1).flatMap(e=>{let r=t.get(e);return r?[{__component:r.apiKey,...wo(r,t,n+1)}]:[]});default:return`<${e.type}>`}},wo=(e,t,n)=>n>So?{}:Object.fromEntries(vo(e).map(e=>[e.apiKey,Co(e,t,n)])),To={id:`<uuid>`,locale:`<locale>`,createdAt:`<datetime>`,updatedAt:`<datetime>`,publishedAt:`<datetime>`},Eo=(e,t)=>{let n={...To,...wo(e,t,0)};if(!D(e))return JSON.stringify(wo(e,t,0),null,2);let r={locale:`<locale>`,snapshot:0},i=e.kind===`collection`?{data:[n],meta:{...r,pagination:{page:1,pageSize:25,pageCount:1,total:1}}}:{data:n,meta:r};return JSON.stringify(i,null,2)},Do=(e,t)=>e?`[${t}!]`:t,Oo=(e,t,n)=>{let r=e=>{let t=n.get(e);return t?k(t.apiKey):`JSON`};switch(t.type){case`number`:return`Float`;case`integer`:return`Int53`;case`boolean`:return`Boolean`;case`json`:return`JSON`;case`richtext`:return`RichText`;case`media`:return Do(t.settings.multiple,`Media`);case`enum`:return Do(t.settings.multiple,`${k(e.apiKey)}${k(t.apiKey)}Enum`);case`relation`:return Do(t.settings.cardinality===`many`,r(t.settings.target));case`component`:return Do(t.settings.repeatable,r(t.settings.component));case`dynamiczone`:return`[${k(e.apiKey)}${k(t.apiKey)}Zone!]`;default:return`String`}},ko=`locale: String, fallback: Boolean = true, publicationState: PublicationState = PUBLISHED, snapshot: Int`,Ao=(e,t)=>{let n=k(e.apiKey),r=D(e)?[`id: ID!`,`locale: String!`,`createdAt: String!`,`updatedAt: String!`,`publishedAt: String`,`localizations: [${n}!]`]:[],i=vo(e).map(n=>`${n.apiKey}: ${Oo(e,n,t)}`),a=`type ${n} {\n${[...r,...i].map(e=>` ${e}`).join(`
|
|
4
|
-
`)}\n}`;if(!D(e))return`${a}\n`;let o=e.kind===`collection`?[`${e.apiKey}(id: ID!, ${ko}): ${n}`,`${de(e)}(filter: ${n}Filter, sort: [${n}Sort!], search: String, page: Int, pageSize: Int, ${ko}): ${n}Connection`]:[`${e.apiKey}(${ko}): ${n}`],s=he.map(e=>`${e}${n}`);return`${a}\n\ntype Query {\n${o.map(e=>` ${e}`).join(`
|
|
5
|
-
`)}\n}\n\n# Mutations: ${s.join(`, `)}\n`};export{Tr as A,nr as B,ni as C,Gr as D,Xr as E,ar as F,ir as I,er as L,lr as M,cr as N,Er as O,or as P,rr as R,ci as S,ai as T,mn as V,Ri as _,uo as a,li as b,ha as c,pa as d,ma as f,Vi as g,la as h,_o as i,vr as j,Ar as k,_a as l,ua as m,yo as n,$ as o,da as p,Eo as r,Sa as s,Ao as t,ga as u,mi as v,X as w,oi as x,ui as y,tr as z};
|
|
6
|
-
//# sourceMappingURL=shapes-BJe3IMuj.js.map
|