@shapio/cms 0.5.5 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/assets/{AssetTile-CaYPqR_F.js → AssetTile-H0hABhB2.js} +2 -2
- package/dist/admin/assets/{AssetTile-CaYPqR_F.js.map → AssetTile-H0hABhB2.js.map} +1 -1
- package/dist/admin/assets/AssistError-1s3PuY0X.js +2 -0
- package/dist/admin/assets/{AssistError-drmpXSbS.js.map → AssistError-1s3PuY0X.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-D-jZ0oaU.js → BlockMenuItems-a8zXdfcF.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-D-jZ0oaU.js.map → BlockMenuItems-a8zXdfcF.js.map} +1 -1
- package/dist/admin/assets/Body-BzZD-TZT.js +2 -0
- package/dist/admin/assets/{Body-Gn_z2KPN.js.map → Body-BzZD-TZT.js.map} +1 -1
- package/dist/admin/assets/Builder-60jO_nbS.js +2 -0
- package/dist/admin/assets/Builder-60jO_nbS.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-CzRU6och.js → CodeEditor-BLbJZE9v.js} +2 -2
- package/dist/admin/assets/{CodeEditor-CzRU6och.js.map → CodeEditor-BLbJZE9v.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-h4HYhnYp.js → CopyButton-BOtR_h1H.js} +2 -2
- package/dist/admin/assets/{CopyButton-h4HYhnYp.js.map → CopyButton-BOtR_h1H.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-H4SpVYw7.js → CursorPager-DwLW13ov.js} +2 -2
- package/dist/admin/assets/{CursorPager-H4SpVYw7.js.map → CursorPager-DwLW13ov.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-CSeKI4Iw.js → FocalPoint-n-a_AXKN.js} +2 -2
- package/dist/admin/assets/{FocalPoint-CSeKI4Iw.js.map → FocalPoint-n-a_AXKN.js.map} +1 -1
- package/dist/admin/assets/Form-D_4fhOy0.js +2 -0
- package/dist/admin/assets/Form-D_4fhOy0.js.map +1 -0
- package/dist/admin/assets/{FormCheckboxGroup-V3IKrvzc.js → FormCheckboxGroup-1fYisXrr.js} +2 -2
- package/dist/admin/assets/FormCheckboxGroup-1fYisXrr.js.map +1 -0
- package/dist/admin/assets/{FormRadioGroup-DIv-MYgn.js → FormRadioGroup-B0VZyb1t.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-DIv-MYgn.js.map → FormRadioGroup-B0VZyb1t.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-CUhaPIMY.js → FormSelectField-Br8bkwRF.js} +2 -2
- package/dist/admin/assets/{FormSelectField-CUhaPIMY.js.map → FormSelectField-Br8bkwRF.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-DW8ysyk_.js → FormSwitchField-d8G-YCSX.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-DW8ysyk_.js.map → FormSwitchField-d8G-YCSX.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-DbqZ-MwI.js → FormTextareaField-BSKNeTPW.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-DbqZ-MwI.js.map → FormTextareaField-BSKNeTPW.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-BlLtqVVz.js → HintedLabel-CiTDE112.js} +2 -2
- package/dist/admin/assets/{HintedLabel-BlLtqVVz.js.map → HintedLabel-CiTDE112.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-bYMd_t0J.js → InfoHint-B3XcXtiN.js} +2 -2
- package/dist/admin/assets/{InfoHint-bYMd_t0J.js.map → InfoHint-B3XcXtiN.js.map} +1 -1
- package/dist/admin/assets/InlineConfirm-BfsNH5S_.js +2 -0
- package/dist/admin/assets/InlineConfirm-BfsNH5S_.js.map +1 -0
- package/dist/admin/assets/InsertMenuItem-BGwDW_Lu.js +2 -0
- package/dist/admin/assets/InsertMenuItem-BGwDW_Lu.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-GDx_orOH.js → Match-Dc8bXsKo.js} +2 -2
- package/dist/admin/assets/{Match-GDx_orOH.js.map → Match-Dc8bXsKo.js.map} +1 -1
- package/dist/admin/assets/NoAccess-CKEKPmqD.js +2 -0
- package/dist/admin/assets/NoAccess-CKEKPmqD.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-UBO-U5Wo.js → QueryView-KFtwko9F.js} +2 -2
- package/dist/admin/assets/{QueryView-UBO-U5Wo.js.map → QueryView-KFtwko9F.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-CJbIIV8t.js → RadioTile-CzfxWgHx.js} +2 -2
- package/dist/admin/assets/{RadioTile-CJbIIV8t.js.map → RadioTile-CzfxWgHx.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-M7HyUhYF.js → RichTextField-BsBoOAP-.js} +5 -5
- package/dist/admin/assets/{RichTextField-M7HyUhYF.js.map → RichTextField-BsBoOAP-.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-DoxDM1XL.js → RowTitle-Cn5mAU58.js} +2 -2
- package/dist/admin/assets/{RowTitle-DoxDM1XL.js.map → RowTitle-Cn5mAU58.js.map} +1 -1
- package/dist/admin/assets/SecretReveal-BCOJAisI.js +2 -0
- package/dist/admin/assets/SecretReveal-BCOJAisI.js.map +1 -0
- package/dist/admin/assets/{SharedGlyph-D1OMHXPf.js → SharedGlyph-CA8tb7UH.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-D1OMHXPf.js.map → SharedGlyph-CA8tb7UH.js.map} +1 -1
- package/dist/admin/assets/StepList-sriwGP1e.js +2 -0
- package/dist/admin/assets/StepList-sriwGP1e.js.map +1 -0
- package/dist/admin/assets/{Structure-CO4aJZVP.js → Structure-B2HZ9UZu.js} +2 -2
- package/dist/admin/assets/{Structure-CO4aJZVP.js.map → Structure-B2HZ9UZu.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-CbRUxD5s.js → SuggestAltButton-CqDLAuoa.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CbRUxD5s.js.map → SuggestAltButton-CqDLAuoa.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-mFfESZiW.js +2 -0
- package/dist/admin/assets/Thumbnail-mFfESZiW.js.map +1 -0
- package/dist/admin/assets/UnsavedChangesGuard-C8cDQGEA.js +2 -0
- package/dist/admin/assets/UnsavedChangesGuard-C8cDQGEA.js.map +1 -0
- package/dist/admin/assets/{UserAvatar-Bl32IpG_.js → UserAvatar-BItYDTyH.js} +2 -2
- package/dist/admin/assets/{UserAvatar-Bl32IpG_.js.map → UserAvatar-BItYDTyH.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-DNQwGXBl.js +2 -0
- package/dist/admin/assets/{badge-ydvfgE8a.js.map → badge-DNQwGXBl.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-EMTUJT0M.js +2 -0
- package/dist/admin/assets/changeSets-EMTUJT0M.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-esJAnNTh.js → constants-miV4q1ur.js} +2 -2
- package/dist/admin/assets/{constants-esJAnNTh.js.map → constants-miV4q1ur.js.map} +1 -1
- package/dist/admin/assets/content-CgZS_S7P.js +3 -0
- package/dist/admin/assets/content-CgZS_S7P.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-C-AKiYu1.js → contentTypes-CQsHL657.js} +2 -2
- package/dist/admin/assets/{contentTypes-C-AKiYu1.js.map → contentTypes-CQsHL657.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-9ZeAjSIw.js +11 -0
- package/dist/admin/assets/develop-9ZeAjSIw.js.map +1 -0
- package/dist/admin/assets/{dropdown-menu-C53v9ioW.js → dropdown-menu-0dyAtBEd.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-C53v9ioW.js.map → dropdown-menu-0dyAtBEd.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-BJge4oQL.js +42 -0
- package/dist/admin/assets/es2015-BJge4oQL.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-W1dB_h6d.js → field-C6NmRYUN.js} +2 -2
- package/dist/admin/assets/{field-W1dB_h6d.js.map → field-C6NmRYUN.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-DzWMBrRx.js → fileRoute-Bm90K4UY.js} +2 -2
- package/dist/admin/assets/{fileRoute-DzWMBrRx.js.map → fileRoute-Bm90K4UY.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-DEr2kxEc.js +2 -0
- package/dist/admin/assets/followPlural-DEr2kxEc.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-B8XZ8L6s.js +2 -0
- package/dist/admin/assets/inbox-B8XZ8L6s.js.map +1 -0
- 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/index-DoJsnLI1.js +4 -0
- package/dist/admin/assets/index-DoJsnLI1.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-CHE0gg1n.js → labels-B2HIVxXg.js} +2 -2
- package/dist/admin/assets/{labels-CHE0gg1n.js.map → labels-B2HIVxXg.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-CtbfNgc-.js +2 -0
- package/dist/admin/assets/media-CtbfNgc-.js.map +1 -0
- package/dist/admin/assets/network--5X46kWN.js +2 -0
- package/dist/admin/assets/network--5X46kWN.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-DdmWXRaM.js +2 -0
- package/dist/admin/assets/{publishing-ClNjPLQ9.js.map → publishing-DdmWXRaM.js.map} +1 -1
- package/dist/admin/assets/{radio-group-rFxn7cz2.js → radio-group-BoN9R_3K.js} +2 -2
- package/dist/admin/assets/{radio-group-rFxn7cz2.js.map → radio-group-BoN9R_3K.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-DNjfDxmj.js +2 -0
- package/dist/admin/assets/{searchSchemas-C4qp-vCa.js.map → searchSchemas-DNjfDxmj.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-BfxPwK0u.js +2 -0
- package/dist/admin/assets/{sections-C7Z6Xd8r.js.map → sections-BfxPwK0u.js.map} +1 -1
- package/dist/admin/assets/{select-DUhL27UN.js → select-Bp8kO5Ko.js} +2 -2
- package/dist/admin/assets/{select-DUhL27UN.js.map → select-Bp8kO5Ko.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-l1ZORjtv.js.map → seo-CceGYTIX.js.map} +1 -1
- package/dist/admin/assets/settings-TEbLvC-v.js +2 -0
- package/dist/admin/assets/settings-TEbLvC-v.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-WrYO9Spf.js +6 -0
- package/dist/admin/assets/shapes-WrYO9Spf.js.map +1 -0
- package/dist/admin/assets/{skeleton-Dyi_b1wq.js → skeleton-vXOCdnJv.js} +2 -2
- package/dist/admin/assets/{skeleton-Dyi_b1wq.js.map → skeleton-vXOCdnJv.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-C3dDDUIk.js → switch-B1xClhNG.js} +2 -2
- package/dist/admin/assets/{switch-C3dDDUIk.js.map → switch-B1xClhNG.js.map} +1 -1
- package/dist/admin/assets/theme-65PB8uAu.js +2 -0
- package/dist/admin/assets/{theme-DPe080iG.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-BEaZkRPK.js → tooltip-CS_8cJu2.js} +2 -2
- package/dist/admin/assets/{tooltip-BEaZkRPK.js.map → tooltip-CS_8cJu2.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-wLDa2L3f.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-CMMJgkI2.js +2 -0
- package/dist/admin/assets/useDiscardGuard-CMMJgkI2.js.map +1 -0
- package/dist/admin/assets/useMediaPickerDialog-xvQ8cofO.js +2 -0
- package/dist/admin/assets/{useMediaPickerDialog-CFN9ZKfe.js.map → useMediaPickerDialog-xvQ8cofO.js.map} +1 -1
- package/dist/admin/assets/useMediaUploader-BVNTeSAU.js +2 -0
- package/dist/admin/assets/{useMediaUploader-B42H_CMG.js.map → useMediaUploader-BVNTeSAU.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-aV0QDPi3.js → useResolvedScheme-CScQpr-P.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-aV0QDPi3.js.map → useResolvedScheme-CScQpr-P.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-C-k48Hnc.js → zod-hUh5nXnX.js} +2 -2
- package/dist/admin/assets/{zod-C-k48Hnc.js.map → zod-hUh5nXnX.js.map} +1 -1
- package/dist/admin/index.html +59 -60
- package/dist/cli.js +10 -5689
- package/dist/cli.js.map +1 -1
- package/dist/cliMain-D08HeAd_.js +5771 -0
- package/dist/cliMain-D08HeAd_.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 +30 -8
- 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-sL1zP4Zl.js → s3Adapter-U01iEAcK.js} +2 -2
- package/dist/{s3Adapter-sL1zP4Zl.js.map → s3Adapter-U01iEAcK.js.map} +1 -1
- package/dist/{worker-DMES6pqh.js → worker-jspgh10V.js} +6384 -4527
- package/dist/worker-jspgh10V.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/AssistError-drmpXSbS.js +0 -2
- package/dist/admin/assets/Body-Gn_z2KPN.js +0 -2
- package/dist/admin/assets/Builder-DyCcikfS.js +0 -2
- package/dist/admin/assets/Builder-DyCcikfS.js.map +0 -1
- package/dist/admin/assets/ConfirmDialog-DZRJfdvH.js +0 -2
- package/dist/admin/assets/ConfirmDialog-DZRJfdvH.js.map +0 -1
- package/dist/admin/assets/Form-DF_YmR1G.js +0 -2
- package/dist/admin/assets/Form-DF_YmR1G.js.map +0 -1
- package/dist/admin/assets/FormCheckboxGroup-V3IKrvzc.js.map +0 -1
- package/dist/admin/assets/InsertMenuItem-D2HGERzb.js +0 -2
- package/dist/admin/assets/InsertMenuItem-D2HGERzb.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-kCkLH5jg.js +0 -2
- package/dist/admin/assets/SecretReveal-kCkLH5jg.js.map +0 -1
- package/dist/admin/assets/StepList-BIQjDaWQ.js +0 -2
- package/dist/admin/assets/StepList-BIQjDaWQ.js.map +0 -1
- package/dist/admin/assets/Thumbnail-D1XuDElk.js +0 -2
- package/dist/admin/assets/Thumbnail-D1XuDElk.js.map +0 -1
- package/dist/admin/assets/UnsavedChangesGuard-C1n7egF6.js +0 -2
- package/dist/admin/assets/UnsavedChangesGuard-C1n7egF6.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-ydvfgE8a.js +0 -2
- package/dist/admin/assets/changeSets-DgfCKja3.js +0 -2
- package/dist/admin/assets/changeSets-DgfCKja3.js.map +0 -1
- package/dist/admin/assets/chevron-left-CZXrLV99.js +0 -2
- package/dist/admin/assets/content-DsMSB6Wb.js +0 -3
- package/dist/admin/assets/content-DsMSB6Wb.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-DL-2W9jv.js +0 -11
- package/dist/admin/assets/develop-DL-2W9jv.js.map +0 -1
- package/dist/admin/assets/es2015-DrAA1N2V.js +0 -42
- package/dist/admin/assets/es2015-DrAA1N2V.js.map +0 -1
- package/dist/admin/assets/followPlural-D-5ZJqJF.js +0 -2
- package/dist/admin/assets/followPlural-D-5ZJqJF.js.map +0 -1
- package/dist/admin/assets/inbox-DUqOrFEA.js +0 -2
- package/dist/admin/assets/inbox-DUqOrFEA.js.map +0 -1
- package/dist/admin/assets/index-BEM45u2w.css +0 -2
- package/dist/admin/assets/index-D03RZB7e.js +0 -4
- package/dist/admin/assets/index-D03RZB7e.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-BUUEsWxd.js +0 -2
- package/dist/admin/assets/media-BUUEsWxd.js.map +0 -1
- package/dist/admin/assets/media-VCJUbYzJ.js +0 -2
- package/dist/admin/assets/network-Bolr2lmf.js +0 -2
- package/dist/admin/assets/network-Bolr2lmf.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-ClNjPLQ9.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-C4qp-vCa.js +0 -2
- package/dist/admin/assets/sections-C7Z6Xd8r.js +0 -2
- package/dist/admin/assets/seo-l1ZORjtv.js +0 -2
- package/dist/admin/assets/settings-DgoG3H8C.js +0 -2
- package/dist/admin/assets/settings-DgoG3H8C.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-BZ87ap5s.js +0 -6
- package/dist/admin/assets/shapes-BZ87ap5s.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-BcLeD2-K.js +0 -7
- package/dist/admin/assets/src-BcLeD2-K.js.map +0 -1
- package/dist/admin/assets/store-DknnssoQ.js +0 -2
- package/dist/admin/assets/theme-DPe080iG.js +0 -2
- package/dist/admin/assets/titles-C5PaMgFJ.js +0 -2
- package/dist/admin/assets/titles-C5PaMgFJ.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-wLDa2L3f.js +0 -2
- package/dist/admin/assets/useCursorPager-Dc-9B67j.js +0 -2
- package/dist/admin/assets/useDiscardGuard-WTUINqD5.js +0 -2
- package/dist/admin/assets/useDiscardGuard-WTUINqD5.js.map +0 -1
- package/dist/admin/assets/useMediaPickerDialog-CFN9ZKfe.js +0 -2
- package/dist/admin/assets/useMediaUploader-B42H_CMG.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-DMES6pqh.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{t as r}from"./loader-circle-C-9trZPI.js";import{C as i,D as a,E as o,S as s,T as c,b as l,g as u,w as d,x as f,y as p}from"./badge-ydvfgE8a.js";import{n as m,t as h}from"./createLucideIcon-CqygG5K6.js";import{a as g,i as _,n as v,r as y,x as b}from"./InfoHint-bYMd_t0J.js";import{b as x,d as S,h as C,m as w,p as T,u as E,x as D}from"./es2015-DrAA1N2V.js";import{a as O,c as k,i as A,o as j}from"./skeleton-Dyi_b1wq.js";import{o as M,t as N,v as P}from"./field-W1dB_h6d.js";import{t as F}from"./cn-DVhJ55Mo.js";var I={name:`circle-alert`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]],aliases:[`alert-circle`]};I.node;var L=h(I),R=e(t(),1),z=e(n(),1),ee=Object.defineProperty,B=(e,t)=>ee(e,`name`,{value:t,configurable:!0}),[te,ne]=w(`AlertDialog`,[a]),V=a(),re=B(e=>{let{__scopeAlertDialog:t,...n}=e,r=V(t);return(0,z.jsx)(p,{...r,...n,modal:!0})},`AlertDialog`);R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=V(n);return(0,z.jsx)(o,{...i,...r,ref:t})},`AlertDialogTrigger`));var ie=B(e=>{let{__scopeAlertDialog:t,...n}=e,r=V(t);return(0,z.jsx)(d,{...r,...n})},`AlertDialogPortal`),ae=R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,...r}=e,a=V(n);return(0,z.jsx)(i,{...a,...r,ref:t})},`AlertDialogOverlay`)),[oe,se]=te(`AlertDialogContent`),ce=R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,children:r,...i}=e,a=V(n),o=R.useRef(null),s=x(t,o),c=R.useRef(null);return(0,z.jsx)(oe,{scope:n,cancelRef:c,children:(0,z.jsx)(f,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:T(i.onOpenAutoFocus,e=>{e.preventDefault(),c.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:r})})},`AlertDialogContent`)),le=R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=V(n);return(0,z.jsx)(c,{...i,...r,ref:t})},`AlertDialogTitle`)),ue=R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=V(n);return(0,z.jsx)(s,{...i,...r,ref:t})},`AlertDialogDescription`)),de=R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,...r}=e,i=V(n);return(0,z.jsx)(l,{...i,...r,ref:t})},`AlertDialogAction`)),fe=`AlertDialogCancel`,pe=R.forwardRef(B(function(e,t){let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=se(fe,n),a=V(n),o=x(t,i);return(0,z.jsx)(l,{...a,...r,ref:o})},`AlertDialogCancel`)),me=re,he=ie,ge=ae,_e=ce,ve=de,ye=pe,be=le,xe=ue,Se=Object.defineProperty,H=(e,t)=>Se(e,`name`,{value:t,configurable:!0}),U=`Checkbox`,[Ce,we]=w(U),[Te,W]=Ce(U);function G(e){let{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:u=`on`,internal_do_not_use_render:d}=e,[f,p]=S({prop:n,defaultProp:i??!1,onChange:c,caller:U}),[m,h]=R.useState(null),[g,_]=R.useState(null),v=R.useRef(!1),[y,b]=R.useReducer(e=>e+1,0),x=!m||!!o||!!m.closest(`form`),C={checked:f,disabled:a,setChecked:p,control:m,setControl:h,name:s,form:o,value:u,hasConsumerStoppedPropagationRef:v,userInteractionCount:y,onUserInteraction:b,required:l,defaultChecked:!q(i)&&i,isFormControl:x,bubbleInput:g,setBubbleInput:_};return(0,z.jsx)(Te,{scope:t,...C,children:K(d)?d(C):r})}H(G,`CheckboxProvider`);var Ee=`CheckboxTrigger`,De=R.forwardRef(H(function({__scopeCheckbox:e,onKeyDown:t,onClick:n,...r},i){let{control:a,value:o,disabled:s,checked:c,required:l,setControl:u,setChecked:d,hasConsumerStoppedPropagationRef:f,onUserInteraction:p,isFormControl:m,bubbleInput:h}=W(Ee,e),g=x(i,u),_=R.useRef(c);return R.useEffect(()=>{let e=a?.form;if(e){let t=H(()=>d(_.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[a,d]),(0,z.jsx)(C.button,{type:`button`,role:`checkbox`,"aria-checked":q(c)?`mixed`:c,"aria-required":l,"data-state":J(c),"data-disabled":s?``:void 0,disabled:s,value:o,...r,ref:g,onKeyDown:T(t,e=>{e.key===`Enter`&&e.preventDefault()}),onClick:T(n,e=>{p(),d(e=>q(e)?!0:!e),h&&m&&(f.current=e.isPropagationStopped(),f.current||e.stopPropagation())})})},`CheckboxTrigger`)),Oe=R.forwardRef(H(function(e,t){let{__scopeCheckbox:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,z.jsx)(G,{__scopeCheckbox:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(De,{...d,ref:t,__scopeCheckbox:n}),e&&(0,z.jsx)(Me,{__scopeCheckbox:n})]})})},`Checkbox`)),ke=`CheckboxIndicator`,Ae=R.forwardRef(H(function(e,t){let{__scopeCheckbox:n,forceMount:r,...i}=e,a=W(ke,n);return(0,z.jsx)(E,{present:r||q(a.checked)||a.checked===!0,children:(0,z.jsx)(C.span,{"data-state":J(a.checked),"data-disabled":a.disabled?``:void 0,...i,ref:t,style:{pointerEvents:`none`,...e.style}})})},`CheckboxIndicator`)),je=`CheckboxBubbleInput`,Me=R.forwardRef(H(function({__scopeCheckbox:e,onClick:t,...n},r){let{control:i,hasConsumerStoppedPropagationRef:a,userInteractionCount:o,checked:s,defaultChecked:c,required:l,disabled:u,name:d,value:f,form:p,bubbleInput:m,setBubbleInput:h}=W(je,e),g=x(r,h),_=b(i),v=R.useRef(!1),y=R.useRef(s),S=R.useRef(o);R.useEffect(()=>{let e=m;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=o!==S.current;S.current=o;let i=y.current!==s;y.current=s;let c=!(r&&a.current);if(i&&n){v.current=!r;let t=new Event(`click`,{bubbles:c});e.indeterminate=q(s),n.call(e,!q(s)&&s),e.dispatchEvent(t),v.current=!1}},[m,s,a,o]);let w=R.useRef(!q(s)&&s);return(0,z.jsx)(C.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??w.current,required:l,disabled:u,name:d,value:f,form:p,...n,tabIndex:-1,ref:g,onClick:T(t,e=>{v.current&&e.stopPropagation()}),style:{...n.style,..._,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})},`CheckboxBubbleInput`));function K(e){return typeof e==`function`}H(K,`isFunction`);function q(e){return e===`indeterminate`}H(q,`isIndeterminate`);function J(e){return q(e)?`indeterminate`:e?`checked`:`unchecked`}H(J,`getState`);var Ne=j(`relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`border-destructive/30 bg-destructive-muted text-destructive *:data-[slot=alert-description]:text-destructive [&>svg]:text-current`,warning:`border-warning/30 bg-warning-muted text-warning *:data-[slot=alert-description]:text-warning [&>svg]:text-current`,info:`border-border bg-muted text-foreground *:data-[slot=alert-description]:text-muted-foreground dark:border-info/30 dark:bg-info-muted dark:text-info dark:*:data-[slot=alert-description]:text-info [&>svg]:text-info`,success:`border-success/30 bg-success-muted text-success *:data-[slot=alert-description]:text-success [&>svg]:text-current`}},defaultVariants:{variant:`default`}});function Y({className:e,variant:t,...n}){return(0,z.jsx)(`div`,{"data-slot":`alert`,role:`alert`,className:F(Ne({variant:t}),e),...n})}function Pe({className:e,...t}){return(0,z.jsx)(`div`,{"data-slot":`alert-title`,className:F(`col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight`,e),...t})}function X({className:e,...t}){return(0,z.jsx)(`div`,{"data-slot":`alert-description`,className:F(`col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed`,e),...t})}var Z=({error:e})=>e?(0,z.jsxs)(Y,{variant:`destructive`,children:[(0,z.jsx)(L,{"aria-hidden":`true`}),(0,z.jsx)(X,{children:D(e)})]}):null,Fe=e=>{let{title:t,description:n,confirmLabel:i,cancelLabel:a,pendingLabel:o,tone:s,onConfirm:c,align:l=`end`,side:d=`bottom`,onCloseAutoFocus:f}=e,{t:p}=m(),h=(0,R.useId)(),b=(0,R.useId)(),x=(0,R.useRef)(null),S=(0,R.useRef)(null),[C,w]=(0,R.useState)(!1),[T,E]=(0,R.useState)(!1),[D,O]=(0,R.useState)(null),k=e.trigger===void 0?e.open:C,j=t=>{t&&O(null),e.trigger===void 0?e.onOpenChange(t):w(t)},M=e=>T&&!e?void 0:j(e),N=()=>{let e=c();if(!(e instanceof Promise)){j(!1);return}E(!0),O(null),e.then(()=>{E(!1),j(!1)},e=>{E(!1),O(e)})},P=u(e=>{e.preventDefault(),(s===`danger`?x:S).current?.focus()},f);return(0,z.jsxs)(v,{open:k,onOpenChange:M,modal:!0,children:[e.trigger===void 0?(0,z.jsx)(y,{asChild:!0,children:e.children}):(0,z.jsx)(g,{asChild:!0,children:e.trigger}),(0,z.jsxs)(_,{role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":h,"aria-describedby":n?b:void 0,align:l,side:d,className:`w-80 space-y-4`,...P,children:[(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(`p`,{id:h,className:`text-sm font-semibold`,children:t}),n?(0,z.jsx)(`p`,{id:b,className:`text-meta text-muted-foreground`,children:n}):null]}),(0,z.jsx)(Z,{error:D}),(0,z.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,z.jsx)(A,{ref:x,type:`button`,size:`sm`,variant:`outline`,disabled:T,onClick:()=>j(!1),children:a??p(`common.cancel`)}),(0,z.jsx)(A,{ref:S,type:`button`,size:`sm`,variant:s===`danger`?`destructive`:`default`,disabled:T,"aria-busy":T||void 0,onClick:N,children:T?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(r,{className:`animate-spin`,"aria-hidden":`true`}),o??i]}):i})]})]})]})};function Q({className:e,...t}){return(0,z.jsx)(Oe,{"data-slot":`checkbox`,className:F(`peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary dark:data-[state=indeterminate]:bg-primary`,e),...t,children:(0,z.jsx)(Ae,{"data-slot":`checkbox-indicator`,className:`grid place-content-center text-current transition-none`,children:t.checked===`indeterminate`?(0,z.jsx)(P,{className:`size-3.5`}):(0,z.jsx)(k,{className:`size-3.5`})})})}function Ie({...e}){return(0,z.jsx)(me,{"data-slot":`alert-dialog`,...e})}function Le({...e}){return(0,z.jsx)(he,{"data-slot":`alert-dialog-portal`,...e})}function $({className:e,...t}){return(0,z.jsx)(ge,{"data-slot":`alert-dialog-overlay`,className:F(`fixed inset-0 z-50 bg-overlay/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0`,e),...t})}function Re({className:e,size:t=`default`,onOpenAutoFocus:n,onCloseAutoFocus:r,...i}){let a=u(n,r);return(0,z.jsxs)(Le,{children:[(0,z.jsx)($,{}),(0,z.jsx)(_e,{"data-slot":`alert-dialog-content`,"data-size":t,className:F(`group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-xl border bg-card p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg`,e),...i,...a})]})}function ze({className:e,...t}){return(0,z.jsx)(`div`,{"data-slot":`alert-dialog-header`,className:F(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]`,e),...t})}function Be({className:e,...t}){return(0,z.jsx)(`div`,{"data-slot":`alert-dialog-footer`,className:F(`flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,e),...t})}function Ve({className:e,...t}){return(0,z.jsx)(be,{"data-slot":`alert-dialog-title`,className:F(`text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2`,e),...t})}function He({className:e,...t}){return(0,z.jsx)(xe,{"data-slot":`alert-dialog-description`,className:F(`text-sm text-muted-foreground`,e),...t})}function Ue({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,z.jsx)(A,{variant:t,size:n,asChild:!0,children:(0,z.jsx)(ve,{"data-slot":`alert-dialog-action`,className:F(e),...r})})}function We({className:e,variant:t=`outline`,size:n=`default`,...r}){return(0,z.jsx)(A,{variant:t,size:n,asChild:!0,children:(0,z.jsx)(ye,{"data-slot":`alert-dialog-cancel`,className:F(e),...r})})}var Ge=({open:e,onOpenChange:t,title:n,description:i,confirmLabel:a,cancelLabel:o,destructive:s=!1,onConfirm:c,acknowledgement:l,pending:u,pendingLabel:d,error:f})=>{let{t:p}=m(),h=(0,R.useId)(),[g,_]=(0,R.useState)(!1),[v,y]=(0,R.useState)(e);e!==v&&(y(e),e&&_(!1));let b=u!==void 0,x=u===!0,S=l!==void 0&&!g,C=O({variant:s?`destructive`:`default`});return(0,z.jsx)(Ie,{open:e,onOpenChange:e=>x&&!e?void 0:t(e),children:(0,z.jsxs)(Re,{children:[(0,z.jsxs)(ze,{children:[(0,z.jsx)(Ve,{children:n}),(0,z.jsx)(He,{children:i})]}),l?(0,z.jsxs)(N,{orientation:`horizontal`,children:[(0,z.jsx)(Q,{id:h,checked:g,disabled:x,onCheckedChange:e=>_(e===!0)}),(0,z.jsx)(M,{htmlFor:h,className:`font-normal`,children:l})]}):null,b?(0,z.jsx)(Z,{error:f}):null,(0,z.jsxs)(Be,{children:[(0,z.jsx)(We,{disabled:x,children:o??p(`common.cancel`)}),b?(0,z.jsx)(A,{type:`button`,variant:s?`destructive`:`default`,disabled:x||S,"aria-busy":x||void 0,onClick:c,children:x?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(r,{className:`animate-spin`,"aria-hidden":`true`}),d??a]}):a}):(0,z.jsx)(Ue,{className:C,disabled:S,onClick:c,children:a})]})]})})};export{Y as a,L as c,Z as i,Q as n,X as o,Fe as r,Pe as s,Ge as t};
|
|
2
|
-
//# sourceMappingURL=ConfirmDialog-DZRJfdvH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog-DZRJfdvH.js","names":["__defProp","__name","AlertDialog","DialogPrimitive.Root","DialogPrimitive.Trigger","AlertDialogPortal","DialogPrimitive.Portal","AlertDialogOverlay","DialogPrimitive.Overlay","AlertDialogContent","DialogPrimitive.Content","AlertDialogTitle","DialogPrimitive.Title","AlertDialogDescription","DialogPrimitive.Description","AlertDialogAction","DialogPrimitive.Close","AlertDialogCancel","Checkbox","Fragment","AlertCircle","useId","useRef","useState","_Fragment","Loader2","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","MinusIcon","CheckIcon","AlertDialogPrimitive.Root","AlertDialogPrimitive.Portal","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel","useId","useState","_Fragment","Loader2","__toESM","require_jsx_runtime","LoaderCircle","DialogOverlay","createDialogScope","DialogTrigger","DialogDescription","DialogTitle","DialogClose","useReturnFocus","DialogPortal","DialogContent","Dialog","useTranslation","createLucideIcon","PopoverTrigger","PopoverContent","Popover","PopoverAnchor","useSize","useComposedRefs","useControllableState","Primitive","createContextScope","composeEventHandlers","Presence","describeError","buttonVariants","Check","Button","cva","FieldLabel","Field","Minus","cn","__iconData","CircleAlert","import_react","require_react","import_jsx_runtime","__defProp$1","__name$1","target","createAlertDialogContext","createAlertDialogScope","useDialogScope","AlertDialog$1","alertDialogProps","props","dialogScope","__scopeAlertDialog","triggerProps","forwardedRef","AlertDialogPortal$1","portalProps","AlertDialogOverlay$1","overlayProps","AlertDialogContentProvider","useAlertDialogContentContext","AlertDialogContent$1","contentProps","contentRef","composedRefs","cancelRef","event","AlertDialogTitle$1","titleProps","AlertDialogDescription$1","descriptionProps","AlertDialogAction$1","actionProps","CANCEL_NAME","AlertDialogCancel$1","cancelProps","ref","Root2","Portal2","Overlay2","Content2","Action","Cancel","Title2","Description2","__defProp","__name","CHECKBOX_NAME","createCheckboxContext","createCheckboxScope","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","checkedProp","checked","setChecked","defaultChecked","onCheckedChange","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","userInteractionCount","onUserInteraction","count","isFormControl","form","context","__scopeCheckbox","isFunction","internal_do_not_use_render","children","TRIGGER_NAME","CheckboxTrigger","checkboxProps","initialCheckedStateRef","reset","isIndeterminate","required","getState","disabled","onKeyDown","onClick","prevChecked","Checkbox$1","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","forceMount","BUBBLE_INPUT_NAME","controlSize","shouldStopClickPropagationRef","prevCheckedRef","prevUserInteractionCountRef","input","inputProto","isUserInteraction","checkedChanged","bubbles","defaultCheckedRef","value","alertVariants","Alert","className","AlertTitle","AlertDescription","FormError","error","InlineConfirm","titleId","descriptionId","confirmRef","uncontrolledOpen","setUncontrolledOpen","pending","setPending","setError","open","changeOpen","next","requestOpenChange","confirm","result","onConfirm","reason","returnFocus","tone","onCloseAutoFocus","description","title","cancelLabel","t","pendingLabel","confirmLabel","Checkbox","AlertDialog","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","onOpenAutoFocus","size","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","AlertDialogCancel","ConfirmDialog","acknowledgementId","acknowledged","setAcknowledged","wasOpen","setWasOpen","isAsync","busy","blocked","acknowledgement","confirmClassName","destructive","onOpenChange"],"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/circle-alert.mjs","../../../../node_modules/.pnpm/@radix-ui+react-alert-dialog@1.1.23_@types+react-dom@19.3.0_@types+react@19.3.0__@types_490aa920fbab0adbc2c4344386ab6831/node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-checkbox@1.3.11_@types+react-dom@19.3.0_@types+react@19.3.0__@types+rea_c6d869b9fcc94d95bd12a12175a8f53a/node_modules/@radix-ui/react-checkbox/dist/index.mjs","../../src/components/ui/alert.tsx","../../src/components/FormError/index.tsx","../../src/components/InlineConfirm/index.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/alert-dialog.tsx","../../src/components/ConfirmDialog/index.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: \"circle-alert\",\n size: 24,\n node: [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n ],\n aliases: [\"alert-circle\"]\n};\n__iconData.node;\nconst CircleAlert = createLucideIcon(__iconData);\n\nexport { __iconData, CircleAlert as default };\n//# sourceMappingURL=circle-alert.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = /* @__PURE__ */ __name((props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n}, \"AlertDialog\");\nvar AlertDialogTrigger = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogTrigger2(props, forwardedRef) {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }, \"AlertDialogTrigger\")\n);\nvar AlertDialogPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n}, \"AlertDialogPortal\");\nvar AlertDialogOverlay = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogOverlay2(props, forwardedRef) {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }, \"AlertDialogOverlay\")\n);\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar AlertDialogContent = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogContent2(props, forwardedRef) {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsx(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children\n }\n ) });\n }, \"AlertDialogContent\")\n);\nvar AlertDialogTitle = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogTitle2(props, forwardedRef) {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }, \"AlertDialogTitle\")\n);\nvar AlertDialogDescription = React.forwardRef(/* @__PURE__ */ __name(function AlertDialogDescription2(props, forwardedRef) {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n}, \"AlertDialogDescription\"));\nvar AlertDialogAction = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogAction2(props, forwardedRef) {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }, \"AlertDialogAction\")\n);\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n /* @__PURE__ */ __name(function AlertDialogCancel2(props, forwardedRef) {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }, \"AlertDialogCancel\")\n);\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const [userInteractionCount, onUserInteraction] = React.useReducer(\n (count) => count + 1,\n 0\n );\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n onUserInteraction,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\n__name(CheckboxProvider, \"CheckboxProvider\");\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function CheckboxTrigger2({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n onUserInteraction,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = /* @__PURE__ */ __name(() => setChecked(initialCheckedStateRef.current), \"reset\");\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n onUserInteraction();\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }, \"CheckboxTrigger\")\n);\nvar Checkbox = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Checkbox2(props, forwardedRef) {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }, \"Checkbox\")\n);\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function CheckboxIndicator2(props, forwardedRef) {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }, \"CheckboxIndicator\")\n);\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function CheckboxBubbleInput2({ __scopeCheckbox, onClick, ...props }, forwardedRef) {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n userInteractionCount,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const controlSize = useSize(control);\n const shouldStopClickPropagationRef = React.useRef(false);\n const prevCheckedRef = React.useRef(checked);\n const prevUserInteractionCountRef = React.useRef(userInteractionCount);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;\n prevUserInteractionCountRef.current = userInteractionCount;\n const checkedChanged = prevCheckedRef.current !== checked;\n prevCheckedRef.current = checked;\n const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);\n if (checkedChanged && setChecked) {\n shouldStopClickPropagationRef.current = !isUserInteraction;\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n shouldStopClickPropagationRef.current = false;\n }\n }, [bubbleInput, checked, hasConsumerStoppedPropagationRef, userInteractionCount]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n if (shouldStopClickPropagationRef.current) {\n event.stopPropagation();\n }\n }),\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }, \"CheckboxBubbleInput\")\n);\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\n__name(isIndeterminate, \"isIndeterminate\");\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\n__name(getState, \"getState\");\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'border-destructive/30 bg-destructive-muted text-destructive *:data-[slot=alert-description]:text-destructive [&>svg]:text-current',\n // Shapio: status alerts on the status tokens (DESIGN.md).\n warning:\n 'border-warning/30 bg-warning-muted text-warning *:data-[slot=alert-description]:text-warning [&>svg]:text-current',\n // Light: a neutral note with a cobalt icon (no blue surfaces outside the info chip); dark keeps the tint.\n info: 'border-border bg-muted text-foreground *:data-[slot=alert-description]:text-muted-foreground dark:border-info/30 dark:bg-info-muted dark:text-info dark:*:data-[slot=alert-description]:text-info [&>svg]:text-info',\n success:\n 'border-success/30 bg-success-muted text-success *:data-[slot=alert-description]:text-success [&>svg]:text-current',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div data-slot=\"alert\" role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","import { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription } from '@/components/ui/alert';\nimport { describeError } from '@/helpers/describeError';\n\ntype FormErrorProps = { error: unknown };\n\n/** The server's answer to a failed form submission, shown above the submit button and announced. */\nexport const FormError = ({ error }: FormErrorProps) => {\n if (!error) {\n return null;\n }\n return (\n <Alert variant=\"destructive\">\n <AlertCircle aria-hidden=\"true\" />\n <AlertDescription>{describeError(error)}</AlertDescription>\n </Alert>\n );\n};\n","import { Loader2 } from 'lucide-react';\nimport { useId, useRef, useState, type ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { useReturnFocus } from '@/hooks/useReturnFocus';\nimport { FormError } from '../FormError';\n\ntype InlineConfirmCommonProps = {\n /** The question, and the popover's accessible name (\"Delete “Hero”?\"). */\n title: string;\n /** The consequence, in one line. */\n description?: string;\n confirmLabel: string;\n cancelLabel?: string;\n /** Shown on Confirm while an async `onConfirm` runs. */\n pendingLabel?: string;\n /** `danger`: red Confirm, focus starts on Cancel. `default`: primary Confirm, focus starts on it. */\n tone: 'danger' | 'default';\n /**\n * Runs on Confirm. Return nothing to close at once; return a promise (`mutateAsync`) to keep the popover\n * open with a spinner until it settles: it closes when it resolves and shows the error when it rejects.\n */\n onConfirm: () => void | Promise<unknown>;\n align?: 'start' | 'center' | 'end';\n side?: 'top' | 'right' | 'bottom' | 'left';\n /**\n * Runs as the popover closes, before focus returns to the opener. Call `event.preventDefault()` to keep\n * focus where it is (e.g. on a `SecretReveal` that a confirmed rotate just showed).\n */\n onCloseAutoFocus?: (event: Event) => void;\n};\n\n/** Trigger mode: the popover opens from this button (it gets `aria-expanded` and returns focus to it). */\ntype TriggerModeProps = InlineConfirmCommonProps & {\n trigger: ReactElement;\n open?: never;\n onOpenChange?: never;\n children?: never;\n};\n\n/**\n * Anchored mode, for actions in a menu (a menu item disappears with its menu): the caller opens it (from\n * the item's `onSelect`) and the popover points at `children`, usually the menu's own trigger button.\n */\ntype AnchoredModeProps = InlineConfirmCommonProps & {\n trigger?: never;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactElement;\n};\n\ntype InlineConfirmProps = TriggerModeProps | AnchoredModeProps;\n\n/**\n * Confirms a routine destructive or consequential action where it was asked for (DESIGN.md \"Dialogs\"): a\n * modal popover with role `alertdialog`, the question, one line of consequence and Cancel / Confirm. Escape\n * or a click outside cancels, Enter activates the focused button, focus returns to the opener.\n */\nexport const InlineConfirm = (props: InlineConfirmProps) => {\n const {\n title,\n description,\n confirmLabel,\n cancelLabel,\n pendingLabel,\n tone,\n onConfirm,\n align = 'end',\n side = 'bottom',\n onCloseAutoFocus,\n } = props;\n const { t } = useTranslation();\n const titleId = useId();\n const descriptionId = useId();\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const open = props.trigger === undefined ? props.open : uncontrolledOpen;\n\n const changeOpen = (next: boolean) => {\n if (next) {\n setError(null);\n }\n if (props.trigger === undefined) {\n props.onOpenChange(next);\n } else {\n setUncontrolledOpen(next);\n }\n };\n // Nothing dismisses it while the action runs.\n const requestOpenChange = (next: boolean) => (pending && !next ? undefined : changeOpen(next));\n\n const confirm = () => {\n const result = onConfirm();\n if (!(result instanceof Promise)) {\n changeOpen(false);\n return;\n }\n setPending(true);\n setError(null);\n result.then(\n () => {\n setPending(false);\n changeOpen(false);\n },\n (reason: unknown) => {\n // Already logged and toasted by the mutation cache; shown here too, beside the action that failed.\n setPending(false);\n setError(reason);\n },\n );\n };\n\n const returnFocus = useReturnFocus((event) => {\n event.preventDefault();\n (tone === 'danger' ? cancelRef : confirmRef).current?.focus();\n }, onCloseAutoFocus);\n\n return (\n <Popover open={open} onOpenChange={requestOpenChange} modal>\n {props.trigger === undefined ? (\n <PopoverAnchor asChild>{props.children}</PopoverAnchor>\n ) : (\n <PopoverTrigger asChild>{props.trigger}</PopoverTrigger>\n )}\n <PopoverContent\n role=\"alertdialog\"\n // Modal like Radix's own dialogs: focus is trapped and the rest of the page is aria-hidden. Declaring\n // it lets assistive technology (and axe's aria-hidden-focus rule) know the hidden page is inert.\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n align={align}\n side={side}\n className=\"w-80 space-y-4\"\n {...returnFocus}\n >\n <div className=\"space-y-1\">\n <p id={titleId} className=\"text-sm font-semibold\">\n {title}\n </p>\n {description ? (\n <p id={descriptionId} className=\"text-meta text-muted-foreground\">\n {description}\n </p>\n ) : null}\n </div>\n <FormError error={error} />\n <div className=\"flex justify-end gap-2\">\n <Button\n ref={cancelRef}\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={pending}\n onClick={() => changeOpen(false)}\n >\n {cancelLabel ?? t('common.cancel')}\n </Button>\n <Button\n ref={confirmRef}\n type=\"button\"\n size=\"sm\"\n variant={tone === 'danger' ? 'destructive' : 'default'}\n disabled={pending}\n aria-busy={pending || undefined}\n onClick={confirm}\n >\n {pending ? (\n <>\n <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />\n {pendingLabel ?? confirmLabel}\n </>\n ) : (\n confirmLabel\n )}\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n","import { CheckIcon, MinusIcon } from 'lucide-react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary dark:data-[state=indeterminate]:bg-primary',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n {props.checked === 'indeterminate' ? (\n <MinusIcon className=\"size-3.5\" />\n ) : (\n <CheckIcon className=\"size-3.5\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/helpers/cn';\nimport { useReturnFocus } from '@/hooks/useReturnFocus';\n\nfunction AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-overlay/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n onOpenAutoFocus,\n onCloseAutoFocus,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n}) {\n const returnFocus = useReturnFocus(onOpenAutoFocus, onCloseAutoFocus);\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-xl border bg-card p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg',\n className,\n )}\n {...props}\n {...returnFocus}\n />\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action data-slot=\"alert-dialog-action\" className={cn(className)} {...props} />\n </Button>\n );\n}\n\nfunction AlertDialogCancel({\n className,\n variant = 'outline',\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel data-slot=\"alert-dialog-cancel\" className={cn(className)} {...props} />\n </Button>\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import { Loader2 } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\nimport { Button, buttonVariants } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Field, FieldLabel } from '@/components/ui/field';\nimport { FormError } from '../FormError';\n\ntype ConfirmDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description: string;\n confirmLabel: string;\n cancelLabel?: string;\n destructive?: boolean;\n onConfirm: () => void;\n /** When set, Confirm stays disabled until this statement is checked (unticked on every open). */\n acknowledgement?: string;\n /**\n * Async mode: pass the mutation's pending state. Confirm then doesn't close the dialog; the caller closes\n * it on success. While pending, Confirm shows `pendingLabel` and the dialog can't be dismissed.\n */\n pending?: boolean;\n pendingLabel?: string;\n /** The failed attempt's error, shown above the buttons (async mode). */\n error?: unknown;\n};\n\n/**\n * A blocking yes/no question, kept only for irreversible acknowledgements (DESIGN.md \"Dialogs\"). Focus starts\n * on Cancel (Radix default).\n */\nexport const ConfirmDialog = ({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n destructive = false,\n onConfirm,\n acknowledgement,\n pending,\n pendingLabel,\n error,\n}: ConfirmDialogProps) => {\n const { t } = useTranslation();\n const acknowledgementId = useId();\n const [acknowledged, setAcknowledged] = useState(false);\n const [wasOpen, setWasOpen] = useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n setAcknowledged(false);\n }\n }\n const isAsync = pending !== undefined;\n const busy = pending === true;\n const blocked = acknowledgement !== undefined && !acknowledged;\n const confirmClassName = buttonVariants({ variant: destructive ? 'destructive' : 'default' });\n return (\n <AlertDialog open={open} onOpenChange={(next) => (busy && !next ? undefined : onOpenChange(next))}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n {acknowledgement ? (\n <Field orientation=\"horizontal\">\n <Checkbox\n id={acknowledgementId}\n checked={acknowledged}\n disabled={busy}\n onCheckedChange={(checked) => setAcknowledged(checked === true)}\n />\n <FieldLabel htmlFor={acknowledgementId} className=\"font-normal\">\n {acknowledgement}\n </FieldLabel>\n </Field>\n ) : null}\n {isAsync ? <FormError error={error} /> : null}\n <AlertDialogFooter>\n <AlertDialogCancel disabled={busy}>{cancelLabel ?? t('common.cancel')}</AlertDialogCancel>\n {isAsync ? (\n <Button\n type=\"button\"\n variant={destructive ? 'destructive' : 'default'}\n disabled={busy || blocked}\n aria-busy={busy || undefined}\n onClick={onConfirm}\n >\n {busy ? (\n <>\n <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />\n {pendingLabel ?? confirmLabel}\n </>\n ) : (\n confirmLabel\n )}\n </Button>\n ) : (\n <AlertDialogAction className={confirmClassName} disabled={blocked} onClick={onConfirm}>\n {confirmLabel}\n </AlertDialogAction>\n )}\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n"],"ignoreList":[0,1,2],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{O as r,lt as i}from"./loader-circle-C-9trZPI.js";import{T as a,b as o,u as s,x as c}from"./auth-C4fHG9Iu.js";import{_ as l,a as u,i as ee,n as d}from"./badge-ydvfgE8a.js";import{n as f,t as p}from"./createLucideIcon-CqygG5K6.js";import{i as m,n as h,t as g}from"./RowTitle-DoxDM1XL.js";import{t as _}from"./UnsavedChangesGuard-C1n7egF6.js";import{$ as v,b as y,g as b,x,y as S}from"./src-BcLeD2-K.js";import{E as C,t as te}from"./InfoHint-bYMd_t0J.js";import{T as ne}from"./es2015-DrAA1N2V.js";import{a as w,i as re,l as ie,r as ae,u as oe}from"./constants-esJAnNTh.js";import{t as T}from"./useSchemaScopeAccess-DyfiZnzs.js";import{i as E}from"./skeleton-Dyi_b1wq.js";import{i as D}from"./ConfirmDialog-DZRJfdvH.js";import{a as O,c as k,s as A}from"./field-W1dB_h6d.js";import{t as j}from"./cn-DVhJ55Mo.js";import{t as M}from"./radio-group-rFxn7cz2.js";import{c as N,f as P,n as F,o as se,t as ce,u as le}from"./zod-C-k48Hnc.js";import{t as I}from"./settle-LRKtTN_e.js";import{a as L,d as R,g as z,i as B,l as V,n as H,o as U,r as W,s as ue,t as de,v as G}from"./table-zG68ipQc.js";import{t as fe}from"./SharedGlyph-D1OMHXPf.js";import{a as pe,h as me,r as he,u as ge}from"./schema-D9BgCVzZ.js";import{t as _e}from"./Panel-B1TkcP8V.js";import{a as ve,i as ye,n as K,r as be,t as xe}from"./followPlural-D-5ZJqJF.js";import{t as q}from"./RadioTile-CJbIIV8t.js";import{t as Se}from"./FormSwitchField-DW8ysyk_.js";import{t as Ce}from"./FormTextareaField-DbqZ-MwI.js";var J={name:`app-window`,size:24,node:[[`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`,key:`izxlao`}],[`path`,{d:`M10 4v4`,key:`pp8u80`}],[`path`,{d:`M2 8h20`,key:`d11cs7`}],[`path`,{d:`M6 4v4`,key:`1svtjw`}]]};J.node;var we=p(J),Y=e(n(),1),Te=({definition:e})=>(0,Y.jsx)(g,{asChild:!0,children:e.kind===`component`?(0,Y.jsx)(c,{to:`/models/components/$componentId`,params:{componentId:e.id},children:e.label}):(0,Y.jsx)(c,{to:`/models/$modelId`,params:{modelId:e.id},children:e.label})}),X=e(t(),1),Ee=({changeId:e})=>{let{t}=f(),n=ge(e),a=i(),o=n.data?.status,s=o!==void 0&&me.has(o);return(0,X.useEffect)(()=>{s&&a.invalidateQueries({queryKey:r.schema.all})},[s,a]),s||n.isError?null:(0,Y.jsx)(d,{tone:`progress`,size:`sm`,label:t(`models.pendingChange`)})},De=e=>e.kind===`collection`?`${e.apiKey} · ${b(e)}`:e.apiKey,Oe=({items:e,showKind:t=!1,markShared:n=!0})=>{let{t:r}=f(),{multiSite:i}=T(),a=n&&i;return(0,Y.jsx)(ue,{children:(0,Y.jsxs)(de,{children:[(0,Y.jsx)(L,{children:(0,Y.jsxs)(U,{children:[(0,Y.jsx)(B,{children:r(`models.columns.label`)}),t?(0,Y.jsx)(B,{children:r(`models.columns.kind`)}):null,(0,Y.jsx)(B,{children:r(`models.columns.apiKey`)}),(0,Y.jsx)(B,{className:`text-right`,children:r(`models.columns.fields`)}),(0,Y.jsx)(B,{className:`text-right`,children:r(`models.columns.version`)}),(0,Y.jsx)(B,{children:r(`models.columns.activated`)})]})}),(0,Y.jsx)(H,{children:e.map(({definition:e,scope:n,version:i,activatedAt:o,pendingChange:s})=>(0,Y.jsxs)(U,{children:[(0,Y.jsx)(W,{children:(0,Y.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Te,{definition:e}),a&&n===`network`?(0,Y.jsx)(fe,{}):null,s?(0,Y.jsx)(Ee,{changeId:s.id}):null]})}),t?(0,Y.jsx)(W,{className:`text-muted-foreground`,children:r(w[e.kind])}):null,(0,Y.jsx)(W,{className:`font-mono text-meta text-muted-foreground`,children:De(e)}),(0,Y.jsx)(W,{className:`text-right tabular-nums`,children:e.fields.length}),(0,Y.jsx)(W,{className:`text-right text-muted-foreground tabular-nums`,children:r(`models.versionNumber`,{version:i})}),(0,Y.jsx)(W,{className:`text-muted-foreground`,title:h(o),children:m(o)})]},e.id))})]})})},ke={API_KEY_INVALID:`validation.apiKeyInvalid`,API_KEY_TOO_LONG:`validation.apiKeyTooLong`,API_KEY_RESERVED_PREFIX:`validation.apiKeyReservedPrefix`},Z=e=>{let t=y(e);return t?ke[t.code]??`validation.apiKeyInvalid`:null},Ae=()=>G().trim().min(1,`validation.required`).superRefine((e,t)=>{let n=Z(e);n&&t.addIssue({code:`custom`,message:n})}),je=(e,t)=>Z(e)?null:t===``?`validation.required`:x(t)===x(e)?`validation.pluralApiKeySameAsSingular`:Z(t),Me=(e,t,n)=>{let r=(0,X.useRef)(e);(0,X.useEffect)(()=>{let i=t();(i===``||i===K(r.current))&&n(K(e)),r.current=e},[e,t,n])},Ne=(e,t,n)=>{let r=(0,X.useRef)(e);(0,X.useEffect)(()=>{let i=t(),a=xe(r.current,e,i);a!==i&&n(a),r.current=e},[e,t,n])},Pe=z({kind:V([`collection`,`singleton`,`component`]),label:se(),apiKey:Ae(),pluralApiKey:G().trim(),description:G().trim(),localized:R(),scope:V([`site`,`network`])}).superRefine((e,t)=>{let n=e.kind===`collection`?je(e.apiKey,e.pluralApiKey):null;n&&t.addIssue({code:`custom`,path:[`pluralApiKey`],message:n})}),Fe=(e,t)=>({kind:e,label:``,apiKey:``,pluralApiKey:``,description:``,localized:!1,scope:t}),Q=({kind:e,label:t,apiKey:n,pluralApiKey:r,description:i,localized:a})=>e===`component`?{kind:e,label:t,apiKey:n,description:i,fields:[]}:e===`collection`?{kind:e,label:t,apiKey:n,pluralApiKey:r,description:i,localized:a,fields:[]}:{kind:e,label:t,apiKey:n,description:i,localized:a,fields:[]},Ie=e=>new Set((e??[]).flatMap(({definition:e})=>[e.apiKey,...v(e)?[b(e)]:[]].map(x))),Le=[`apiKey`,`pluralApiKey`],Re=(e,t=`site`)=>{let n=pe(),{definitions:r}=he(),i=a(),s=le({resolver:ce(Pe),defaultValues:Fe(e,t)}),{setValue:c,setError:l,getValues:u}=s;return Me(P({control:s.control,name:`label`}),(0,X.useCallback)(()=>u(`apiKey`),[u]),(0,X.useCallback)(e=>c(`apiKey`,e,{shouldValidate:!1}),[c])),Ne(P({control:s.control,name:`apiKey`}),(0,X.useCallback)(()=>u(`pluralApiKey`),[u]),(0,X.useCallback)(e=>c(`pluralApiKey`,e,{shouldValidate:!1}),[c])),{form:s,onSubmit:s.handleSubmit(async e=>{let t=Ie(r);if(t.has(x(e.apiKey))){l(`apiKey`,{message:`validation.apiKeyTaken`});return}if(e.kind===`collection`&&t.has(x(e.pluralApiKey))){l(`pluralApiKey`,{message:`validation.apiKeyTaken`});return}let a=ie(e.kind),s=await I(n.mutateAsync({category:a,input:{definition:Q(e),scope:e.scope}}));if(!s.ok){let e=o(n.error);for(let t of Le){let n=e.find(e=>e.path===`/${t}`);n&&l(t,{message:be(n)})}return}C.success(ne.t(`models.created`));let c=s.value.definitionId;await i(a===`component`?{to:`/models/components/$componentId`,params:{componentId:c},ignoreBlocker:!0}:{to:`/models/$modelId`,params:{modelId:c},ignoreBlocker:!0})}),pending:n.isPending,error:n.error}},$=({label:e,names:t})=>(0,Y.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,Y.jsx)(`dt`,{className:`w-14 shrink-0`,children:e}),(0,Y.jsx)(`dd`,{className:`flex min-w-0 flex-wrap gap-1.5`,children:t.map(e=>(0,Y.jsx)(`code`,{className:`max-w-full truncate rounded bg-muted px-1.5 py-0.5 font-mono text-foreground/80`,children:e},e))})]}),ze=({apiKey:e,pluralApiKey:t,kind:n})=>{let{t:r}=f(),i=e.trim();if(i===``||n===`component`)return null;let a=t.trim()||S(i),o=n===`collection`?a:i,s=n===`collection`?[i,a]:[i];return(0,Y.jsxs)(`dl`,{className:`flex flex-col gap-1 text-xs text-muted-foreground`,children:[(0,Y.jsx)($,{label:r(`models.restLabel`),names:[r(`models.endpointPath`,{routeKey:o})]}),(0,Y.jsx)($,{label:r(`models.graphqlLabel`),names:s})]})},Be=({control:e,kinds:t})=>{let{t:n}=f(),{field:{ref:r,value:i,onChange:a}}=N({control:e,name:`kind`});return(0,Y.jsxs)(k,{className:`gap-3`,children:[(0,Y.jsx)(A,{variant:`label`,className:`mb-0`,children:n(`models.kind`)}),(0,Y.jsx)(M,{ref:r,value:i,onValueChange:a,className:j(`gap-3 sm:grid-cols-2`,t.length>2&&`sm:grid-cols-3`),children:t.map(e=>(0,Y.jsx)(q,{value:e,icon:re[e],label:n(w[e]),description:n(ae[e])},e))})]})},Ve=({control:e,canShare:t})=>{let{t:n}=f(),r=s().data?.site,{field:{ref:i,value:a,onChange:o}}=N({control:e,name:`scope`});return(0,Y.jsxs)(k,{className:`gap-3`,children:[(0,Y.jsxs)(A,{variant:`label`,className:`mb-0 flex items-center gap-1`,children:[n(`contentTypes.availableOn`),t?null:(0,Y.jsx)(te,{about:n(`contentTypes.allSites`),children:n(`contentTypes.allSitesNeedsNetwork`)})]}),(0,Y.jsxs)(M,{ref:i,value:a,onValueChange:o,className:`gap-3 sm:grid-cols-2`,children:[(0,Y.jsx)(q,{value:`site`,icon:we,label:n(`contentTypes.thisSite`),description:n(`contentTypes.thisSiteDescription`,{site:r?.name??``})}),(0,Y.jsx)(q,{value:`network`,icon:oe,label:n(`contentTypes.allSites`),description:n(`contentTypes.allSitesDescription`),disabled:!t})]})]})},He=({title:e,kinds:t,back:n,backLabel:r,intro:i,scope:a})=>{let{t:o}=f(),{locked:s,reason:d}=ve(),{multiSite:p,canShare:m}=T(),{form:h,onSubmit:g,pending:v,error:y}=Re(t[0],a),[b,x,S]=P({control:h.control,name:[`kind`,`apiKey`,`pluralApiKey`]}),C=b===`collection`;return(0,Y.jsxs)(u,{width:`narrow`,children:[(0,Y.jsx)(_,{when:h.formState.isDirty}),(0,Y.jsx)(ee,{breadcrumb:[{label:r,link:n}],title:e}),s?(0,Y.jsx)(ye,{reason:d}):null,i,(0,Y.jsx)(_e,{children:(0,Y.jsx)(`form`,{noValidate:!0,onSubmit:e=>void g(e),children:(0,Y.jsxs)(O,{className:`gap-5`,children:[t.length>1?(0,Y.jsx)(Be,{control:h.control,kinds:t}):null,a===void 0&&p?(0,Y.jsx)(Ve,{control:h.control,canShare:m}):null,(0,Y.jsx)(F,{control:h.control,name:`label`,label:o(`models.label`),autoComplete:`off`}),(0,Y.jsxs)(`div`,{className:j(`grid items-start gap-5`,C&&`sm:grid-cols-2`),children:[(0,Y.jsx)(F,{control:h.control,name:`apiKey`,label:o(`models.apiKey`),hint:o(`models.apiKeyHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`}),C?(0,Y.jsx)(F,{control:h.control,name:`pluralApiKey`,label:o(`models.pluralApiKey`),hint:o(`models.pluralApiKeyHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`}):null]}),(0,Y.jsx)(ze,{apiKey:x,pluralApiKey:S,kind:b}),(0,Y.jsx)(Ce,{control:h.control,name:`description`,label:o(`common.optionalLabel`,{label:o(`models.descriptionLabel`)}),rows:2}),b===`component`?null:(0,Y.jsx)(Se,{control:h.control,name:`localized`,label:o(`models.localized`),hint:o(`models.localizedHint`),variant:`bordered`}),(0,Y.jsx)(D,{error:y}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:[(0,Y.jsx)(E,{variant:`outline`,asChild:!0,children:(0,Y.jsx)(c,{...n,children:o(`common.cancel`)})}),(0,Y.jsx)(l,{pending:v,pendingLabel:o(`models.creating`),disabled:s,children:o(`common.create`)})]})]})})})]})};export{Oe as n,He as t};
|
|
2
|
-
//# sourceMappingURL=Form-DF_YmR1G.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Form-DF_YmR1G.js","names":["TableRoot","z.string","useRef","useRef","z.object","z.enum","z.string","z.boolean","zodResolver","useCallback","i18next","Globe2","__toESM","require_jsx_runtime","queryKeys","useQueryClient","useNavigate","schemaIssuesOf","useMe","Link","SubmitButton","Page","PageHeader","StatusChip","useTranslation","createLucideIcon","formatRelativeTime","formatDateTime","RowTitle","UnsavedChangesGuard","isModelDefinition","checkApiKeySyntax","routeKeyOf","suggestPlural","toast","InfoHint","instance","KIND_LABEL_KEYS","KIND_ICONS","categoryOfKind","KIND_DESCRIPTION_KEYS","Earth","useSchemaScopeAccess","Button","FormError","FieldGroup","FieldSet","FieldLegend","cn","RadioGroup","useController","useWatch","FormTextField","requiredText","u","useForm","settle","TableHeader","boolean","object","TableHead","_enum","TableBody","TableRow","TableCell","TableCard","Table","string","SharedGlyph","useCreateDefinition","FINAL_CHANGE_STATUSES","useAllDefinitions","useSchemaChange","Panel","useSchemaLock","LockNotice","deriveApiKey","describeIssue","followPlural","RadioTile","FormSwitchField","FormTextareaField","__iconData","AppWindow","import_jsx_runtime","DefinitionLink","definition","import_react","require_react","PendingChip","change","changeId","queryClient","status","finished","apiIdsOf","List","showShared","markShared","multiSite","t","showKind","items","scope","pendingChange","activatedAt","API_KEY_MESSAGES","syntaxMessage","problem","value","apiKeyField","message","context","pluralApiKeyMessage","apiKey","plural","foldApiKey","useApiKeyFromLabel","previousLabel","label","current","getApiKey","setApiKey","usePluralFromApiKey","previousApiKey","getPlural","next","setPlural","createSchema","values","blank","toDefinition","kind","takenKeys","definitions","ISSUE_FIELDS","useCreateDefinitionForm","createDefinition","navigate","form","initialKind","initialScope","getValues","setValue","taken","setError","category","created","issues","name","found","candidate","id","PreviewRow","names","EndpointPreview","pluralApiKey","routeKey","graphqlNames","KindPicker","onChange","kinds","ScopePicker","site","canShare","Form","isCollection","backLabel","back","locked","intro","onSubmit","event"],"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/app-window.mjs","../../src/features/Models/DefinitionLink/index.tsx","../../src/features/Models/PendingChip/index.tsx","../../src/features/Models/List/index.tsx","../../src/features/Models/helpers/apiKeyField.ts","../../src/features/Models/hooks/useApiKeyFromLabel.ts","../../src/features/Models/hooks/usePluralFromApiKey.ts","../../src/features/Models/hooks/useCreateDefinitionForm.ts","../../src/features/Content/New/EndpointPreview/index.tsx","../../src/features/Content/New/KindPicker/index.tsx","../../src/features/Content/New/ScopePicker/index.tsx","../../src/features/Content/New/Form/index.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: \"app-window\",\n size: 24,\n node: [\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }],\n [\"path\", { d: \"M10 4v4\", key: \"pp8u80\" }],\n [\"path\", { d: \"M2 8h20\", key: \"d11cs7\" }],\n [\"path\", { d: \"M6 4v4\", key: \"1svtjw\" }]\n ]\n};\n__iconData.node;\nconst AppWindow = createLucideIcon(__iconData);\n\nexport { __iconData, AppWindow as default };\n//# sourceMappingURL=app-window.mjs.map\n","import type { SchemaDefinition } from '@shapio/schema';\nimport { Link } from '@tanstack/react-router';\nimport { RowTitle } from '@/components/RowTitle';\n\ntype DefinitionLinkProps = { definition: Pick<SchemaDefinition, 'id' | 'kind' | 'label'> };\n\n/** A definition's name as a list row title, linking to its builder (models and components differ). */\nexport const DefinitionLink = ({ definition }: DefinitionLinkProps) => (\n <RowTitle asChild>\n {definition.kind === 'component' ? (\n <Link to=\"/models/components/$componentId\" params={{ componentId: definition.id }}>\n {definition.label}\n </Link>\n ) : (\n <Link to=\"/models/$modelId\" params={{ modelId: definition.id }}>\n {definition.label}\n </Link>\n )}\n </RowTitle>\n);\n","import { useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { queryKeys } from '@/api/queryKeys';\nimport { useSchemaChange } from '@/api/schema';\nimport { StatusChip } from '@/components/StatusChip';\nimport { FINAL_CHANGE_STATUSES } from '@/constants/schema';\n\ntype PendingChipProps = { changeId: string };\n\n/** \"Change in progress\" while a planned change runs; refreshes the schema and disappears when it ends. */\nexport const PendingChip = ({ changeId }: PendingChipProps) => {\n const { t } = useTranslation();\n const change = useSchemaChange(changeId);\n const queryClient = useQueryClient();\n const status = change.data?.status;\n const finished = status !== undefined && FINAL_CHANGE_STATUSES.has(status);\n useEffect(() => {\n if (finished) {\n void queryClient.invalidateQueries({ queryKey: queryKeys.schema.all });\n }\n }, [finished, queryClient]);\n if (finished || change.isError) {\n return null;\n }\n return <StatusChip tone=\"progress\" size=\"sm\" label={t('models.pendingChange')} />;\n};\n","import type { DefinitionListItem } from '@shapio/client';\nimport { routeKeyOf } from '@shapio/schema';\nimport { useTranslation } from 'react-i18next';\nimport { SharedGlyph } from '@/components/SharedGlyph';\nimport { TableCard } from '@/components/TableCard';\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';\nimport { useSchemaScopeAccess } from '@/hooks/useSchemaScopeAccess';\nimport { KIND_LABEL_KEYS } from '../constants';\nimport { DefinitionLink } from '../DefinitionLink';\nimport { PendingChip } from '../PendingChip';\n\ntype ListProps = {\n items: DefinitionListItem[];\n /** A Kind column, for lists that mix content types and components. */\n showKind?: boolean;\n /** Mark shared definitions with a globe (where there is more than one site); off where all are shared. */\n markShared?: boolean;\n};\n\n/** \"article · articles\" for a collection (singular and list names), the API ID alone otherwise. */\nconst apiIdsOf = (definition: DefinitionListItem['definition']) =>\n definition.kind === 'collection' ? `${definition.apiKey} · ${routeKeyOf(definition)}` : definition.apiKey;\n\nexport const List = ({ items, showKind = false, markShared = true }: ListProps) => {\n const { t } = useTranslation();\n const { multiSite } = useSchemaScopeAccess();\n const showShared = markShared && multiSite;\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('models.columns.label')}</TableHead>\n {showKind ? <TableHead>{t('models.columns.kind')}</TableHead> : null}\n <TableHead>{t('models.columns.apiKey')}</TableHead>\n <TableHead className=\"text-right\">{t('models.columns.fields')}</TableHead>\n <TableHead className=\"text-right\">{t('models.columns.version')}</TableHead>\n <TableHead>{t('models.columns.activated')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {items.map(({ definition, scope, version, activatedAt, pendingChange }) => (\n <TableRow key={definition.id}>\n <TableCell>\n <span className=\"flex items-center gap-2\">\n <DefinitionLink definition={definition} />\n {showShared && scope === 'network' ? <SharedGlyph /> : null}\n {pendingChange ? <PendingChip changeId={pendingChange.id} /> : null}\n </span>\n </TableCell>\n {showKind ? (\n <TableCell className=\"text-muted-foreground\">{t(KIND_LABEL_KEYS[definition.kind])}</TableCell>\n ) : null}\n <TableCell className=\"font-mono text-meta text-muted-foreground\">\n {apiIdsOf(definition)}\n </TableCell>\n <TableCell className=\"text-right tabular-nums\">{definition.fields.length}</TableCell>\n <TableCell className=\"text-right text-muted-foreground tabular-nums\">\n {t('models.versionNumber', { version })}\n </TableCell>\n <TableCell className=\"text-muted-foreground\" title={formatDateTime(activatedAt)}>\n {formatRelativeTime(activatedAt)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import { checkApiKeySyntax, foldApiKey } from '@shapio/schema';\nimport { z } from 'zod';\nimport type { ValidationMessageKey } from '@/helpers/validation';\n\nconst API_KEY_MESSAGES: Readonly<Record<string, ValidationMessageKey>> = {\n API_KEY_INVALID: 'validation.apiKeyInvalid',\n API_KEY_TOO_LONG: 'validation.apiKeyTooLong',\n API_KEY_RESERVED_PREFIX: 'validation.apiKeyReservedPrefix',\n};\n\n/** The message for an API key's syntax problem (`checkApiKeySyntax`), or null when it is valid. */\nconst syntaxMessage = (value: string): ValidationMessageKey | null => {\n const problem = checkApiKeySyntax(value);\n return problem ? (API_KEY_MESSAGES[problem.code] ?? 'validation.apiKeyInvalid') : null;\n};\n\n/** An API key: GraphQL-name syntax, checked by @shapio/schema's own `checkApiKeySyntax`. */\nexport const apiKeyField = () =>\n z\n .string()\n .trim()\n .min(1, 'validation.required')\n .superRefine((value, context) => {\n const message = syntaxMessage(value);\n if (message) {\n context.addIssue({ code: 'custom', message });\n }\n });\n\n/**\n * What is wrong with a collection's plural API ID, or null: required, API-key syntax, not the singular.\n * Nothing while the singular itself is invalid (same rule as the server's validator).\n */\nexport const pluralApiKeyMessage = (apiKey: string, plural: string): ValidationMessageKey | null => {\n // A plural derived from an invalid API ID is invalid too; the API ID's own message says it once.\n if (syntaxMessage(apiKey)) {\n return null;\n }\n if (plural === '') {\n return 'validation.required';\n }\n if (foldApiKey(plural) === foldApiKey(apiKey)) {\n return 'validation.pluralApiKeySameAsSingular';\n }\n return syntaxMessage(plural);\n};\n","import { useEffect, useRef } from 'react';\nimport { deriveApiKey } from '../helpers/deriveApiKey';\n\n/**\n * The API key follows the label until the user types a key of their own: it is replaced only while it is\n * empty or still the key derived from the previous label. (React Hook Form's dirty state cannot tell: it\n * marks the derived key dirty as soon as the label changes again, so typing a label key by key stopped\n * the key after its first letter.)\n */\nexport const useApiKeyFromLabel = (\n label: string,\n getApiKey: () => string,\n setApiKey: (apiKey: string) => void,\n) => {\n const previousLabel = useRef(label);\n useEffect(() => {\n const current = getApiKey();\n if (current === '' || current === deriveApiKey(previousLabel.current)) {\n setApiKey(deriveApiKey(label));\n }\n previousLabel.current = label;\n }, [label, getApiKey, setApiKey]);\n};\n","import { useEffect, useRef } from 'react';\nimport { followPlural } from '../helpers/followPlural';\n\n/**\n * The plural API ID follows the singular API ID until the user types one of their own (same rule as the\n * API ID following the label, see `useApiKeyFromLabel`).\n */\nexport const usePluralFromApiKey = (\n apiKey: string,\n getPlural: () => string,\n setPlural: (plural: string) => void,\n) => {\n const previousApiKey = useRef(apiKey);\n useEffect(() => {\n const current = getPlural();\n const next = followPlural(previousApiKey.current, apiKey, current);\n if (next !== current) {\n setPlural(next);\n }\n previousApiKey.current = apiKey;\n }, [apiKey, getPlural, setPlural]);\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { DefinitionScope } from '@shapio/client';\nimport {\n foldApiKey,\n isModelDefinition,\n routeKeyOf,\n type DefinitionInput,\n type SchemaDefinition,\n} from '@shapio/schema';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useCallback } from 'react';\nimport { useForm, useWatch } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { schemaIssuesOf } from '@/api/errors';\nimport { useAllDefinitions, useCreateDefinition } from '@/api/schema';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\nimport { categoryOfKind } from '../constants';\nimport { apiKeyField, pluralApiKeyMessage } from '../helpers/apiKeyField';\nimport { describeIssue } from '../helpers/describeIssue';\nimport { useApiKeyFromLabel } from './useApiKeyFromLabel';\nimport { usePluralFromApiKey } from './usePluralFromApiKey';\n\nconst createSchema = z\n .object({\n kind: z.enum(['collection', 'singleton', 'component']),\n label: requiredText(),\n apiKey: apiKeyField(),\n /** Collections only (hidden and ignored for the other kinds). */\n pluralApiKey: z.string().trim(),\n description: z.string().trim(),\n localized: z.boolean(),\n /** Where it lives: this site (the default) or shared with all sites. */\n scope: z.enum(['site', 'network']),\n })\n .superRefine((values, context) => {\n const message =\n values.kind === 'collection' ? pluralApiKeyMessage(values.apiKey, values.pluralApiKey) : null;\n if (message) {\n context.addIssue({ code: 'custom', path: ['pluralApiKey'], message });\n }\n });\n\nexport type CreateDefinitionValues = z.infer<typeof createSchema>;\n\nconst blank = (kind: CreateDefinitionValues['kind'], scope: DefinitionScope): CreateDefinitionValues => ({\n kind,\n label: '',\n apiKey: '',\n pluralApiKey: '',\n description: '',\n localized: false,\n scope,\n});\n\nconst toDefinition = ({\n kind,\n label,\n apiKey,\n pluralApiKey,\n description,\n localized,\n}: CreateDefinitionValues): DefinitionInput => {\n if (kind === 'component') {\n return { kind, label, apiKey, description, fields: [] };\n }\n return kind === 'collection'\n ? { kind, label, apiKey, pluralApiKey, description, localized, fields: [] }\n : { kind, label, apiKey, description, localized, fields: [] };\n};\n\n/** API IDs already claimed (case-folded): every definition's API ID and every collection's plural. */\nconst takenKeys = (definitions: ReadonlyArray<{ definition: SchemaDefinition }> | undefined) =>\n new Set(\n (definitions ?? []).flatMap(({ definition }) =>\n [definition.apiKey, ...(isModelDefinition(definition) ? [routeKeyOf(definition)] : [])].map(foldApiKey),\n ),\n );\n\n/** Server issues shown on a form field, by the definition property they point at. */\nconst ISSUE_FIELDS = ['apiKey', 'pluralApiKey'] as const;\n\n/**\n * Creates an empty model or component, live (a new definition has no content, so it activates at once),\n * then opens it in the builder. The API key follows the label, and a collection's plural API ID follows\n * the API key, until the user edits them. It belongs to this site unless `scope` says otherwise (the\n * network view creates shared definitions only).\n */\nexport const useCreateDefinitionForm = (\n initialKind: CreateDefinitionValues['kind'],\n initialScope: DefinitionScope = 'site',\n) => {\n const createDefinition = useCreateDefinition();\n const { definitions } = useAllDefinitions();\n const navigate = useNavigate();\n const form = useForm<CreateDefinitionValues>({\n resolver: zodResolver(createSchema),\n defaultValues: blank(initialKind, initialScope),\n });\n const { setValue, setError, getValues } = form;\n const label = useWatch({ control: form.control, name: 'label' });\n useApiKeyFromLabel(\n label,\n useCallback(() => getValues('apiKey'), [getValues]),\n useCallback((apiKey: string) => setValue('apiKey', apiKey, { shouldValidate: false }), [setValue]),\n );\n const apiKey = useWatch({ control: form.control, name: 'apiKey' });\n usePluralFromApiKey(\n apiKey,\n useCallback(() => getValues('pluralApiKey'), [getValues]),\n useCallback((plural: string) => setValue('pluralApiKey', plural, { shouldValidate: false }), [setValue]),\n );\n\n const onSubmit = form.handleSubmit(async (values) => {\n const taken = takenKeys(definitions);\n if (taken.has(foldApiKey(values.apiKey))) {\n setError('apiKey', { message: 'validation.apiKeyTaken' });\n return;\n }\n if (values.kind === 'collection' && taken.has(foldApiKey(values.pluralApiKey))) {\n setError('pluralApiKey', { message: 'validation.apiKeyTaken' });\n return;\n }\n const category = categoryOfKind(values.kind);\n const created = await settle(\n createDefinition.mutateAsync({\n category,\n input: { definition: toDefinition(values), scope: values.scope },\n }),\n );\n if (!created.ok) {\n const issues = schemaIssuesOf(createDefinition.error);\n for (const name of ISSUE_FIELDS) {\n const found = issues.find((candidate) => candidate.path === `/${name}`);\n if (found) {\n setError(name, { message: describeIssue(found) });\n }\n }\n return;\n }\n toast.success(i18next.t('models.created'));\n const id = created.value.definitionId;\n // The form is still dirty: the unsaved-changes guard must not ask about what was just created.\n await (category === 'component'\n ? navigate({ to: '/models/components/$componentId', params: { componentId: id }, ignoreBlocker: true })\n : navigate({ to: '/models/$modelId', params: { modelId: id }, ignoreBlocker: true }));\n });\n return { form, onSubmit, pending: createDefinition.isPending, error: createDefinition.error };\n};\n","import { suggestPlural, type DefinitionKind } from '@shapio/schema';\nimport { useTranslation } from 'react-i18next';\n\ntype EndpointPreviewProps = { apiKey: string; pluralApiKey: string; kind: DefinitionKind };\n\ntype PreviewRowProps = { label: string; names: string[] };\n\nconst PreviewRow = ({ label, names }: PreviewRowProps) => (\n <div className=\"flex min-w-0 items-baseline gap-2\">\n <dt className=\"w-14 shrink-0\">{label}</dt>\n <dd className=\"flex min-w-0 flex-wrap gap-1.5\">\n {names.map((name) => (\n <code\n key={name}\n className=\"max-w-full truncate rounded bg-muted px-1.5 py-0.5 font-mono text-foreground/80\"\n >\n {name}\n </code>\n ))}\n </dd>\n </div>\n);\n\n/**\n * Every API name a model's API IDs produce (REST path, GraphQL queries), updated as they are typed, so it\n * is clear there is nothing else to configure. A collection is listed under its plural API ID\n * (`/api/content/articles`, `articles`) and read one by one under the singular (`article`). Nothing for\n * components or while the ID is empty.\n */\nexport const EndpointPreview = ({ apiKey, pluralApiKey, kind }: EndpointPreviewProps) => {\n const { t } = useTranslation();\n const id = apiKey.trim();\n if (id === '' || kind === 'component') {\n return null;\n }\n const plural = pluralApiKey.trim() || suggestPlural(id);\n const routeKey = kind === 'collection' ? plural : id;\n const graphqlNames = kind === 'collection' ? [id, plural] : [id];\n return (\n <dl className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n <PreviewRow label={t('models.restLabel')} names={[t('models.endpointPath', { routeKey })]} />\n <PreviewRow label={t('models.graphqlLabel')} names={graphqlNames} />\n </dl>\n );\n};\n","import type { DefinitionKind } from '@shapio/schema';\nimport { useController, type Control } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { RadioTile } from '@/components/RadioTile';\nimport { FieldLegend, FieldSet } from '@/components/ui/field';\nimport { RadioGroup } from '@/components/ui/radio-group';\nimport { KIND_DESCRIPTION_KEYS, KIND_ICONS, KIND_LABEL_KEYS } from '@/features/Models/constants';\nimport type { CreateDefinitionValues } from '@/features/Models/hooks/useCreateDefinitionForm';\nimport { cn } from '@/helpers/cn';\n\ntype KindPickerProps = { control: Control<CreateDefinitionValues>; kinds: readonly DefinitionKind[] };\n\n/** The kinds offered here as cards (a radio group: arrow keys move between them). */\nexport const KindPicker = ({ control, kinds }: KindPickerProps) => {\n const { t } = useTranslation();\n const {\n field: { ref, value, onChange },\n } = useController({ control, name: 'kind' });\n return (\n <FieldSet className=\"gap-3\">\n <FieldLegend variant=\"label\" className=\"mb-0\">\n {t('models.kind')}\n </FieldLegend>\n <RadioGroup\n ref={ref}\n value={value}\n onValueChange={onChange}\n className={cn('gap-3 sm:grid-cols-2', kinds.length > 2 && 'sm:grid-cols-3')}\n >\n {kinds.map((kind) => (\n <RadioTile\n key={kind}\n value={kind}\n icon={KIND_ICONS[kind]}\n label={t(KIND_LABEL_KEYS[kind])}\n description={t(KIND_DESCRIPTION_KEYS[kind])}\n />\n ))}\n </RadioGroup>\n </FieldSet>\n );\n};\n","import { AppWindow, Globe2 } from 'lucide-react';\nimport { useController, type Control } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { InfoHint } from '@/components/InfoHint';\nimport { RadioTile } from '@/components/RadioTile';\nimport { FieldLegend, FieldSet } from '@/components/ui/field';\nimport { RadioGroup } from '@/components/ui/radio-group';\nimport type { CreateDefinitionValues } from '@/features/Models/hooks/useCreateDefinitionForm';\n\ntype ScopePickerProps = {\n control: Control<CreateDefinitionValues>;\n /** The admin may create shared definitions (`schema.create` on every site); otherwise \"All sites\" is off. */\n canShare: boolean;\n};\n\n/** \"Available on\": this site (the default) or all sites, as cards (a radio group). */\nexport const ScopePicker = ({ control, canShare }: ScopePickerProps) => {\n const { t } = useTranslation();\n const site = useMe().data?.site;\n const {\n field: { ref, value, onChange },\n } = useController({ control, name: 'scope' });\n return (\n <FieldSet className=\"gap-3\">\n <FieldLegend variant=\"label\" className=\"mb-0 flex items-center gap-1\">\n {t('contentTypes.availableOn')}\n {canShare ? null : (\n <InfoHint about={t('contentTypes.allSites')}>{t('contentTypes.allSitesNeedsNetwork')}</InfoHint>\n )}\n </FieldLegend>\n <RadioGroup ref={ref} value={value} onValueChange={onChange} className=\"gap-3 sm:grid-cols-2\">\n <RadioTile\n value=\"site\"\n icon={AppWindow}\n label={t('contentTypes.thisSite')}\n description={t('contentTypes.thisSiteDescription', { site: site?.name ?? '' })}\n />\n <RadioTile\n value=\"network\"\n icon={Globe2}\n label={t('contentTypes.allSites')}\n description={t('contentTypes.allSitesDescription')}\n disabled={!canShare}\n />\n </RadioGroup>\n </FieldSet>\n );\n};\n","import type { DefinitionScope } from '@shapio/client';\nimport type { DefinitionKind } from '@shapio/schema';\nimport { Link, type LinkOptions } from '@tanstack/react-router';\nimport type { ReactNode } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormSwitchField } from '@/components/FormSwitchField';\nimport { FormTextareaField } from '@/components/FormTextareaField';\nimport { FormTextField } from '@/components/FormTextField';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { Button } from '@/components/ui/button';\nimport { FieldGroup } from '@/components/ui/field';\nimport { UnsavedChangesGuard } from '@/components/UnsavedChangesGuard';\nimport { useCreateDefinitionForm } from '@/features/Models/hooks/useCreateDefinitionForm';\nimport { useSchemaLock } from '@/features/Models/hooks/useSchemaLock';\nimport { LockNotice } from '@/features/Models/LockNotice';\nimport { cn } from '@/helpers/cn';\nimport { useSchemaScopeAccess } from '@/hooks/useSchemaScopeAccess';\nimport { EndpointPreview } from '../EndpointPreview';\nimport { KindPicker } from '../KindPicker';\nimport { ScopePicker } from '../ScopePicker';\n\ntype FormProps = {\n title: string;\n /** The kinds offered; the picker is hidden when there is only one. */\n kinds: readonly [DefinitionKind, ...DefinitionKind[]];\n /** Where Cancel and the breadcrumb go. */\n back: LinkOptions;\n backLabel: string;\n /** Shown above the form (content types: \"Describe it\", when assist is on). */\n intro?: ReactNode;\n /** A fixed scope hides the \"Available on\" control (the network view creates shared definitions). */\n scope?: DefinitionScope;\n};\n\n/**\n * Creates a content type (collection or single type) or a component, live, then opens it for editing.\n * Shared by `/content/new`, `/develop/components/new` and `/network/content-types/new`. Where there is more\n * than one site, it asks where the definition is available (this site unless \"All sites\" is chosen).\n */\nexport const Form = ({ title, kinds, back, backLabel, intro, scope }: FormProps) => {\n const { t } = useTranslation();\n const { locked, reason } = useSchemaLock();\n const { multiSite, canShare } = useSchemaScopeAccess();\n const { form, onSubmit, pending, error } = useCreateDefinitionForm(kinds[0], scope);\n const [kind, apiKey, pluralApiKey] = useWatch({\n control: form.control,\n name: ['kind', 'apiKey', 'pluralApiKey'],\n });\n const isCollection = kind === 'collection';\n return (\n <Page width=\"narrow\">\n <UnsavedChangesGuard when={form.formState.isDirty} />\n <PageHeader breadcrumb={[{ label: backLabel, link: back }]} title={title} />\n {locked ? <LockNotice reason={reason} /> : null}\n {intro}\n <Panel>\n <form noValidate onSubmit={(event) => void onSubmit(event)}>\n <FieldGroup className=\"gap-5\">\n {kinds.length > 1 ? <KindPicker control={form.control} kinds={kinds} /> : null}\n {scope === undefined && multiSite ? (\n <ScopePicker control={form.control} canShare={canShare} />\n ) : null}\n <FormTextField control={form.control} name=\"label\" label={t('models.label')} autoComplete=\"off\" />\n {/* A collection's two API IDs sit side by side, with the names they produce below both. */}\n <div className={cn('grid items-start gap-5', isCollection && 'sm:grid-cols-2')}>\n <FormTextField\n control={form.control}\n name=\"apiKey\"\n label={t('models.apiKey')}\n hint={t('models.apiKeyHint')}\n autoComplete=\"off\"\n spellCheck={false}\n className=\"font-mono\"\n />\n {isCollection ? (\n <FormTextField\n control={form.control}\n name=\"pluralApiKey\"\n label={t('models.pluralApiKey')}\n hint={t('models.pluralApiKeyHint')}\n autoComplete=\"off\"\n spellCheck={false}\n className=\"font-mono\"\n />\n ) : null}\n </div>\n <EndpointPreview apiKey={apiKey} pluralApiKey={pluralApiKey} kind={kind} />\n <FormTextareaField\n control={form.control}\n name=\"description\"\n label={t('common.optionalLabel', { label: t('models.descriptionLabel') })}\n rows={2}\n />\n {kind === 'component' ? null : (\n <FormSwitchField\n control={form.control}\n name=\"localized\"\n label={t('models.localized')}\n hint={t('models.localizedHint')}\n variant=\"bordered\"\n />\n )}\n <FormError error={error} />\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button variant=\"outline\" asChild>\n <Link {...back}>{t('common.cancel')}</Link>\n </Button>\n <SubmitButton pending={pending} pendingLabel={t('models.creating')} disabled={locked}>\n {t('common.create')}\n </SubmitButton>\n </div>\n </FieldGroup>\n </form>\n </Panel>\n </Page>\n );\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormCheckboxGroup-V3IKrvzc.js","names":["__toESM","InfoHint","Checkbox","FieldSet","FieldLabel","FieldDescription","Field","useController","FormFieldError","PUBLICATION_ACTIONS","SCHEDULE_STATUSES","DEPLOYMENT_PROVIDERS","DEPLOYMENT_TRIGGERS","import_jsx_runtime","require_jsx_runtime","FormCheckboxGroup","selected","field","toggle","checked","value","item","errorMessage","fieldState","FieldLegend","legend","description","options","id","name","option","hintId"],"sources":["../../../../packages/client/src/admin/publishingTypes.ts","../../src/components/FormCheckboxGroup/index.tsx"],"sourcesContent":["/**\n * Publishing types (package H, `apps/api/src/routes/admin/{jobs,publishing,webhooks,deployments,preview}`).\n * Dates are ISO-8601 strings.\n */\nimport type { SiteRef } from './sitesTypes.js';\n\nexport type Page<T> = { items: T[]; nextCursor: string | null };\n\n// Jobs ---------------------------------------------------------------------------------------------\n\nexport const JOB_STATUSES = ['pending', 'running', 'succeeded', 'dead'] as const;\nexport type JobStatus = (typeof JOB_STATUSES)[number];\n\nexport type Job = {\n id: string;\n type: string;\n status: JobStatus;\n attempts: number;\n maxAttempts: number;\n /** When it runs next (pending) or ran last. */\n runAt: string;\n idempotencyKey: string | null;\n lockedBy: string | null;\n lockedUntil: string | null;\n /** Payload and result with secret-looking values replaced by `[redacted]`. */\n payload: unknown;\n result: unknown;\n /** Progress a long job saved (e.g. an import's phase and counts); null when it saved none. */\n progress: unknown;\n lastError: string | null;\n createdAt: string;\n updatedAt: string;\n finishedAt: string | null;\n};\n\nexport type JobQuery = { status?: JobStatus; type?: string; cursor?: string; limit?: number };\n\nexport type JobSummary = { counts: Record<JobStatus, number>; types: string[] };\n\n// Scheduled publications ---------------------------------------------------------------------------\n\nexport const PUBLICATION_ACTIONS = ['publish', 'unpublish'] as const;\nexport type PublicationAction = (typeof PUBLICATION_ACTIONS)[number];\n\nexport const SCHEDULE_STATUSES = ['scheduled', 'done', 'failed', 'cancelled'] as const;\nexport type ScheduleStatus = (typeof SCHEDULE_STATUSES)[number];\n\nexport type ScheduledPublication = {\n id: string;\n entryId: string;\n modelId: string;\n /** Null when the model no longer exists. */\n modelKey: string | null;\n locale: string;\n action: PublicationAction;\n runAt: string;\n status: ScheduleStatus;\n error: string | null;\n /** Publication sequence the change was published at (once done). */\n snapshot: number | null;\n createdBy: string | null;\n createdAt: string;\n executedAt: string | null;\n};\n\nexport type ScheduleQuery = { status?: ScheduleStatus; entryId?: string; cursor?: string; limit?: number };\n\nexport type CreateScheduleInput = {\n modelKey: string;\n entryId: string;\n /** Omit for non-localized models (and for the default locale). */\n locale?: string;\n action: PublicationAction;\n runAt: string;\n};\n\n// Webhooks -----------------------------------------------------------------------------------------\n\nexport type WebhookEventType = { type: string; group: string };\n\nexport type WebhookDeliveryStatus = 'pending' | 'retrying' | 'succeeded' | 'dead';\n\nexport type Webhook = {\n id: string;\n name: string;\n url: string;\n /** Event types or `group.*` patterns. */\n events: string[];\n enabled: boolean;\n allowPrivateNetwork: boolean;\n maxAttempts: number;\n /** The site whose events it receives; null for a network-wide webhook (every site's events). */\n site: SiteRef | null;\n lastDelivery: { status: WebhookDeliveryStatus; at: string } | null;\n createdBy: string | null;\n createdAt: string;\n updatedAt: string;\n version: number;\n};\n\nexport type CreateWebhookInput = {\n name: string;\n url: string;\n events: string[];\n enabled?: boolean;\n allowPrivateNetwork?: boolean;\n maxAttempts?: number;\n /** A network-wide webhook (every site's events); otherwise it belongs to the request's site. */\n network?: boolean;\n};\n\n/** A webhook's site is fixed once created. */\nexport type UpdateWebhookInput = Partial<Omit<CreateWebhookInput, 'network'>> & { expectedVersion: number };\n\n/** The JSON body every webhook delivery sends (signed; verify it with `verifyWebhookSignature`). */\nexport type WebhookEventBody = {\n id: string;\n type: string;\n createdAt: string;\n /** The site the event is about; null for events about no site (network-wide). */\n site: SiteRef | null;\n data: unknown;\n};\n\n/** `secret` is shown once: on creation and after rotation. */\nexport type WebhookWithSecret = { webhook: Webhook; secret: string };\n\nexport type WebhookAttempt = {\n attempt: number;\n at: string;\n durationMs: number;\n request: { method: string; url: string; headers: Record<string, string> };\n /** Null when no response arrived (refused, timeout, blocked by the network policy). */\n response: { status: number; headers: Record<string, string>; body: string; truncated: boolean } | null;\n error: string | null;\n};\n\nexport type WebhookDelivery = {\n id: string;\n webhookId: string;\n eventId: string | null;\n eventType: string;\n isTest: boolean;\n status: WebhookDeliveryStatus;\n attempts: number;\n lastResponseStatus: number | null;\n lastError: string | null;\n payload: unknown;\n attemptLog: WebhookAttempt[];\n createdAt: string;\n updatedAt: string;\n deliveredAt: string | null;\n};\n\n// Deployments --------------------------------------------------------------------------------------\n\nexport const DEPLOYMENT_PROVIDERS = [\n 'generic_webhook',\n 'cloudflare_pages',\n 'vercel',\n 'netlify',\n 'github',\n] as const;\nexport type DeploymentProvider = (typeof DEPLOYMENT_PROVIDERS)[number];\n\nexport const DEPLOYMENT_TRIGGERS = ['publish', 'change_set', 'schema', 'manual'] as const;\nexport type DeploymentTriggerPolicy = (typeof DEPLOYMENT_TRIGGERS)[number];\n\nexport const DEPLOYMENT_RUN_STATUSES = [\n 'queued',\n 'triggered',\n 'building',\n 'deployed',\n 'failed',\n 'unknown',\n] as const;\nexport type DeploymentRunStatus = (typeof DEPLOYMENT_RUN_STATUSES)[number];\n\nexport type DeploymentRunTrigger = 'publish' | 'change_set' | 'schema' | 'manual' | 'retry';\n\n/**\n * Provider settings (not secret). Generic: `{ url }`. Cloudflare Pages: `{ accountId, projectName }`.\n * GitHub: `{ owner, repo, branch, mode: 'commit' | 'pull_request', directory }`.\n */\nexport type DeploymentSettings = Record<string, string>;\n\n/**\n * Secret names per provider. Generic: `signingSecret` (generated when omitted). Cloudflare Pages:\n * `deployHookUrl`, `apiToken`. GitHub: `token`. Values are write-only. A value of `${ENV:VAR_NAME}`\n * makes the server read the secret from that environment variable instead of storing it.\n */\nexport type DeploymentSecretsInput = Record<string, string>;\n\n/** Which secrets are set; values never leave the server. `envVar`: read from this environment variable. */\nexport type DeploymentSecretState = Record<string, { set: boolean; envVar: string | null }>;\n\nexport type DeploymentTimelineEvent = {\n status: DeploymentRunStatus;\n at: string;\n source: 'shapio' | 'callback' | 'provider';\n message: string | null;\n};\n\nexport type DeploymentRun = {\n id: string;\n connectionId: string;\n connectionName: string;\n provider: DeploymentProvider;\n status: DeploymentRunStatus;\n trigger: DeploymentRunTrigger;\n /** Publication sequence the run was triggered at (`?snapshot=` on delivery). */\n snapshot: number | null;\n schemaVersion: number | null;\n retryOf: string | null;\n providerRef: string | null;\n logUrl: string | null;\n siteUrl: string | null;\n error: string | null;\n /** False for providers that cannot report completion without callbacks (shown as \"completion unknown\"). */\n completionReported: boolean;\n timeline: DeploymentTimelineEvent[];\n triggeredAt: string | null;\n finishedAt: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type DeploymentConnection = {\n id: string;\n name: string;\n provider: DeploymentProvider;\n settings: DeploymentSettings;\n secrets: DeploymentSecretState;\n previewUrlTemplate: string | null;\n /** Preview tokens issued for this connection show exactly what this delivery role reads. */\n deliveryRoleId: string | null;\n triggerPolicy: DeploymentTriggerPolicy[];\n debounceSeconds: number;\n allowPrivateNetwork: boolean;\n enabled: boolean;\n /** Where the site posts signed build callbacks (generic webhook connections). */\n callbackUrl: string;\n latestRun: DeploymentRun | null;\n /** The newest deployed run by snapshot: what the site is serving, as far as Shapio knows. */\n currentRun: DeploymentRun | null;\n createdBy: string | null;\n createdAt: string;\n updatedAt: string;\n version: number;\n /**\n * The stored secrets cannot be decrypted (the server's SESSION_SECRET changed): every literal secret reads\n * as not set until it is entered again; secrets read from the environment are unaffected.\n */\n secretsUnreadable: boolean;\n};\n\nexport type CreateDeploymentConnectionInput = {\n name: string;\n provider: DeploymentProvider;\n settings: DeploymentSettings;\n secrets: DeploymentSecretsInput;\n previewUrlTemplate?: string | null;\n triggerPolicy: DeploymentTriggerPolicy[];\n debounceSeconds?: number;\n allowPrivateNetwork?: boolean;\n enabled?: boolean;\n deliveryRoleId?: string | null;\n};\n\nexport type UpdateDeploymentConnectionInput = Partial<Omit<CreateDeploymentConnectionInput, 'provider'>> & {\n expectedVersion: number;\n};\n\n/** `generatedSecrets` holds secrets Shapio generated (the generic signing secret), shown once. */\nexport type DeploymentConnectionCreated = {\n connection: DeploymentConnection;\n generatedSecrets: Record<string, string>;\n};\n\n/** An update's result: `generatedSecrets` holds a secret Shapio minted to replace an unreadable one, shown once. */\nexport type DeploymentConnectionUpdated = DeploymentConnection & {\n generatedSecrets?: Record<string, string>;\n};\n\nexport type ConnectionTestResult = {\n ok: boolean;\n checks: Array<{ name: string; ok: boolean; message: string }>;\n};\n\nexport type DeploymentRunQuery = { connectionId?: string; cursor?: string; limit?: number };\n\n// Preview ------------------------------------------------------------------------------------------\n\nexport type PreviewToken = {\n id: string;\n tokenPrefix: string;\n modelId: string;\n modelKey: string | null;\n entryId: string | null;\n locale: string | null;\n connectionId: string | null;\n /** Fields follow this delivery role (within the creator's access); null = the public fields. */\n deliveryRoleId: string | null;\n createdBy: string;\n expiresAt: string;\n revokedAt: string | null;\n lastUsedAt: string | null;\n createdAt: string;\n};\n\nexport type CreatePreviewTokenInput = {\n modelKey: string;\n entryId?: string;\n locale?: string;\n /** Default 1 hour, at most 30 days. */\n ttlSeconds?: number;\n connectionId?: string;\n /** Defaults to the connection's delivery role. */\n deliveryRoleId?: string;\n};\n\n/** `token` is shown once. `url` is rendered from the connection's preview URL template (null without one). */\nexport type PreviewTokenCreated = { token: string; previewToken: PreviewToken; url: string | null };\n\nexport type OpenPreviewInput = {\n modelKey: string;\n entryId: string;\n locale?: string;\n /** Defaults to the first enabled connection with a preview URL template. */\n connectionId?: string;\n};\n\n/** What the entry form's Preview button opens. `apiUrl` is the preview read endpoint for this entry. */\nexport type OpenPreviewResult = {\n /** The token's ID (revoke it when the preview closes). */\n id: string;\n url: string | null;\n apiUrl: string;\n token: string;\n expiresAt: string;\n connectionId: string | null;\n};\n\n/** A connection the site's previews open on (names and origins only). */\nexport type PreviewTarget = {\n connectionId: string;\n name: string;\n /** null when the preview URL template's origin depends on a variable. */\n origin: string | null;\n /** Whether the admin can show it in its preview frame. */\n framable: boolean;\n};\n","import { useController, type Control, type FieldPath, type FieldValues } from 'react-hook-form';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Field, FieldDescription, FieldLabel, FieldLegend, FieldSet } from '@/components/ui/field';\nimport { FormFieldError } from '../FormFieldError';\nimport { InfoHint } from '../InfoHint';\n\nexport type CheckboxOption = {\n value: string;\n label: string;\n description?: string;\n /** An explanation behind an info icon beside the option's label (DESIGN.md, helper-text rule). */\n hint?: string;\n};\n\ntype FormCheckboxGroupProps<TValues extends FieldValues> = {\n control: Control<TValues>;\n name: FieldPath<TValues>;\n legend: string;\n description?: string;\n options: readonly CheckboxOption[];\n disabled?: boolean;\n};\n\n/** A fieldset of checkboxes bound to a `string[]` form value. */\nexport const FormCheckboxGroup = <TValues extends FieldValues>({\n control,\n name,\n legend,\n description,\n options,\n disabled,\n}: FormCheckboxGroupProps<TValues>) => {\n const { field, fieldState } = useController({ control, name });\n const selected = (field.value as string[] | undefined) ?? [];\n const toggle = (value: string, checked: boolean) =>\n field.onChange(checked ? [...selected, value] : selected.filter((item) => item !== value));\n const errorMessage = fieldState.error?.message;\n return (\n <FieldSet data-invalid={fieldState.invalid || undefined}>\n <FieldLegend variant=\"label\">{legend}</FieldLegend>\n {description ? <FieldDescription>{description}</FieldDescription> : null}\n <div data-slot=\"checkbox-group\" className=\"grid gap-3 sm:grid-cols-2\">\n {options.map((option) => {\n const id = `field-${name}-${option.value}`;\n const hintId = option.hint ? `${id}-hint` : undefined;\n return (\n <Field key={option.value} orientation=\"horizontal\">\n <Checkbox\n id={id}\n checked={selected.includes(option.value)}\n onCheckedChange={(checked) => toggle(option.value, checked === true)}\n onBlur={field.onBlur}\n disabled={disabled}\n aria-describedby={hintId}\n />\n {option.hint ? (\n <span className=\"flex items-center gap-1\">\n <FieldLabel htmlFor={id} className=\"font-normal\">\n {option.label}\n </FieldLabel>\n <InfoHint about={option.label} id={hintId}>\n {option.hint}\n </InfoHint>\n </span>\n ) : (\n <FieldLabel htmlFor={id} className=\"font-normal\">\n {option.label}\n </FieldLabel>\n )}\n </Field>\n );\n })}\n </div>\n <FormFieldError message={errorMessage} />\n </FieldSet>\n );\n};\n"],"mappings":"mSAyCA,IAAaS,EAAsB,CAAC,UAAW,WAAW,EAG7CC,EAAoB,CAAC,YAAa,OAAQ,SAAU,WAAW,EAgH/DC,EAAuB,CAClC,kBACA,mBACA,SACA,UACA,QACF,EAGaC,EAAsB,CAAC,UAAW,aAAc,SAAU,QAAQ,aC7IlEG,GAAkD,CAC7D,UACA,OACA,SACA,cACA,UACA,cACqC,CACrC,GAAM,CAAE,QAAO,cAAeR,EAAc,CAAE,UAAS,MAAK,CAAC,EACvDS,EAAYC,EAAM,OAAkC,CAAC,EACrDC,GAAU,EAAe,IAC7BD,EAAM,SAASE,EAAU,CAAC,GAAGH,EAAUI,CAAK,EAAIJ,EAAS,OAAQ,GAASK,IAASD,CAAK,CAAC,EACrFE,EAAeC,EAAW,OAAO,QACvC,OACE,EAAAV,EAAA,KAAA,CAACV,EAAD,CAAU,eAAcoB,EAAW,SAAW,IAAA,GAA9C,SAAA,EACE,EAAAV,EAAA,IAAA,CAACW,EAAD,CAAa,QAAQ,QAAS,SAAAC,CAAoB,CAAA,EACjDC,GAAc,EAAAb,EAAA,IAAA,CAACR,EAAD,CAAA,SAAmBqB,CAA8B,CAAA,EAAI,MACpE,EAAAb,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,iBAAiB,UAAU,4BACvC,SAAAc,EAAQ,IAAK,GAAW,CACvB,IAAMC,EAAK,SAASC,EAAK,GAAGC,EAAO,QAC7BC,EAASD,EAAO,KAAO,GAAGF,EAAG,OAAS,IAAA,GAC5C,OACE,EAAAf,EAAA,KAAA,CAACP,EAAD,CAA0B,YAAY,aAAtC,SAAA,EACE,EAAAO,EAAA,IAAA,CAACX,EAAD,CACM,KACJ,QAASc,EAAS,SAASc,EAAO,KAAK,EACvC,gBAAkB,GAAYZ,EAAOY,EAAO,MAAOX,IAAY,EAAI,EACnE,OAAQF,EAAM,OACJ,WACV,mBAAkBc,CACnB,CAAA,EACAD,EAAO,MACN,EAAAjB,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,0BAAhB,SAAA,EACE,EAAAA,EAAA,IAAA,CAACT,EAAD,CAAY,QAASwB,EAAI,UAAU,cAChC,SAAAE,EAAO,KACE,CAAA,GACZ,EAAAjB,EAAA,IAAA,CAACZ,EAAD,CAAU,MAAO6B,EAAO,MAAO,GAAIC,EAChC,SAAAD,EAAO,IACA,CAAA,CACN,CAEN,CAAA,GAAA,EAAAjB,EAAA,IAAA,CAACT,EAAD,CAAY,QAASwB,EAAI,UAAU,cAChC,SAAAE,EAAO,KACE,CAAA,CAET,CAvBK,EAAAA,EAAO,KAuBZ,CAEX,CAAC,CACE,CAAA,GACL,EAAAjB,EAAA,IAAA,CAACL,EAAD,CAAgB,QAASc,CAAe,CAAA,CAChC,GAEd"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{t as r}from"./stableId-iRkUbVIP.js";import{a as i}from"./dropdown-menu-C53v9ioW.js";var a=`__key`,o=`__component`,s=e=>typeof e==`object`&&!!e&&!Array.isArray(e),c=e=>{let t=e.doc;return!s(t)||(Array.isArray(t.content)?t.content:[]).every(e=>s(e)&&e.type===`paragraph`&&(!Array.isArray(e.content)||e.content.length===0))},l=e=>e==null||e===``?!0:Array.isArray(e)?e.length===0:s(e)&&e.format===`shapio-richtext`?c(e):!1,u=(e,t)=>{if(Object.is(e,t))return!0;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((e,n)=>u(e,t[n]));if(s(e)&&s(t)){let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.hasOwn(t,n)&&u(e[n],t[n]))}return!1},d=e=>Array.isArray(e)?e.map(d):s(e)?Object.fromEntries(Object.entries(e).filter(([e])=>e!==a).map(([e,t])=>[e,d(t)])):e,f=(e,t)=>l(e)&&l(t)||u(d(e),d(t)),p=e=>({...e,[a]:r()}),m=(e,t)=>s(e)&&typeof e.__key==`string`?e[a]:`item-${t}`,h=(e,t,n)=>{if(n<0||n>=e.length||t===n)return[...e];let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r},g=e=>Array.isArray(e)?e:e==null?[]:[e],_=e(t(),1),v=()=>{let e=(0,_.useRef)(null);return{defer:(0,_.useCallback)(t=>{e.current=t},[]),onCloseAutoFocus:(0,_.useCallback)(t=>{let n=e.current;n&&(e.current=null,t.preventDefault(),n())},[])}},y=e(n(),1),b=({icon:e,label:t,hint:n,disabled:r,onSelect:a})=>(0,y.jsxs)(i,{disabled:r,onSelect:a,className:`gap-3 py-1.5`,children:[(0,y.jsx)(`span`,{className:`flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground [&_svg]:size-4`,children:(0,y.jsx)(e,{"aria-hidden":`true`})}),(0,y.jsxs)(`span`,{className:`min-w-0`,children:[(0,y.jsx)(`span`,{className:`block`,children:t}),n?(0,y.jsx)(`span`,{className:`block text-meta text-muted-foreground`,children:n}):null]})]});export{u as a,f as c,g as d,p as f,m as i,h as l,v as n,l as o,o as r,s,b as t,d as u};
|
|
2
|
-
//# sourceMappingURL=InsertMenuItem-D2HGERzb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InsertMenuItem-D2HGERzb.js","names":["useRef","useCallback","__toESM","require_jsx_runtime","newStableId","DropdownMenuItem","CLIENT_KEY","COMPONENT_KEY","isRecord","value","isEmptyRichText","doc","node","isEmptyValue","isDeepEqual","left","right","item","index","leftKeys","key","stripClientKeys","child","isSameContent","withClientKey","clientKeyOf","\"__key\"","fallback","moveItem","to","items","from","next","moved","toList","import_react","require_react","useDeferredMenuAction","pending","action","event","import_jsx_runtime","InsertMenuItem","Icon","label","hint"],"sources":["../../src/fields/helpers/values.ts","../../src/fields/hooks/useDeferredMenuAction.ts","../../src/fields/InsertMenuItem/index.tsx"],"sourcesContent":["import { newStableId } from '@/helpers/stableId';\n\n/**\n * Field values as the entry form holds them: keyed by API key, like the admin API. List items of\n * repeatable components and dynamic zones carry a client-only `__key` so React can keep each item's\n * state (collapsed, focus) across reorders and saves; it is stripped before anything is sent.\n */\nexport const CLIENT_KEY = '__key';\n/** A dynamic-zone item's component API key (the API's `__component`). */\nexport const COMPONENT_KEY = '__component';\n\nexport type FormValues = Record<string, unknown>;\nexport type ItemValues = Record<string, unknown>;\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** Rich text with no text and no image/table/rule is empty, like the server's `isEmptyRichText`. */\nconst isEmptyRichText = (value: Record<string, unknown>): boolean => {\n const doc = value.doc;\n if (!isRecord(doc)) {\n return true;\n }\n const content = Array.isArray(doc.content) ? (doc.content as unknown[]) : [];\n return content.every(\n (node) =>\n isRecord(node) &&\n node.type === 'paragraph' &&\n (!Array.isArray(node.content) || node.content.length === 0),\n );\n};\n\n/** Absent, null, empty text, empty list or empty rich text: the server does not store these. */\nexport const isEmptyValue = (value: unknown): boolean => {\n if (value === undefined || value === null || value === '') {\n return true;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (isRecord(value) && value.format === 'shapio-richtext') {\n return isEmptyRichText(value);\n }\n return false;\n};\n\n/** Deep structural equality for JSON-like values (key order does not matter). */\nexport const isDeepEqual = (left: unknown, right: unknown): boolean => {\n if (Object.is(left, right)) {\n return true;\n }\n if (Array.isArray(left) && Array.isArray(right)) {\n return left.length === right.length && left.every((item, index) => isDeepEqual(item, right[index]));\n }\n if (isRecord(left) && isRecord(right)) {\n const leftKeys = Object.keys(left);\n return (\n leftKeys.length === Object.keys(right).length &&\n leftKeys.every((key) => Object.hasOwn(right, key) && isDeepEqual(left[key], right[key]))\n );\n }\n return false;\n};\n\n/** The value without client-only keys, ready to send or compare. */\nexport const stripClientKeys = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(stripClientKeys);\n }\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([key]) => key !== CLIENT_KEY)\n .map(([key, child]) => [key, stripClientKeys(child)]),\n );\n }\n return value;\n};\n\n/** Two values hold the same content (client keys and empty-vs-missing differences ignored). */\nexport const isSameContent = (left: unknown, right: unknown): boolean =>\n (isEmptyValue(left) && isEmptyValue(right)) || isDeepEqual(stripClientKeys(left), stripClientKeys(right));\n\nexport const withClientKey = (item: ItemValues): ItemValues => ({ ...item, [CLIENT_KEY]: newStableId() });\n\nexport const clientKeyOf = (item: unknown, fallback: number): string =>\n isRecord(item) && typeof item[CLIENT_KEY] === 'string' ? item[CLIENT_KEY] : `item-${fallback}`;\n\n/** Moves an item within a list (keyboard reordering). Out-of-range moves return the list unchanged. */\nexport const moveItem = <T>(items: readonly T[], from: number, to: number): T[] => {\n if (to < 0 || to >= items.length || from === to) {\n return [...items];\n }\n const next = [...items];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as T);\n return next;\n};\n\n/** A list value as an array (a single value becomes a one-item list, empty becomes []). */\nexport const toList = <T = unknown>(value: unknown): T[] => {\n if (Array.isArray(value)) {\n return value as T[];\n }\n return value === undefined || value === null ? [] : [value as T];\n};\n","import { useCallback, useRef } from 'react';\n\n/**\n * Runs a menu item's action after the menu has closed. A Radix menu holds focus while it is open and gives\n * it back to its trigger as it closes, so an action that moves focus (a new block, the cursor in rich text)\n * must run after that: `defer(action)` from the item's `onSelect`, and `onCloseAutoFocus` on the content.\n */\nexport const useDeferredMenuAction = () => {\n const pending = useRef<(() => void) | null>(null);\n const defer = useCallback((action: () => void) => {\n pending.current = action;\n }, []);\n const onCloseAutoFocus = useCallback((event: Event) => {\n const action = pending.current;\n if (action) {\n pending.current = null;\n event.preventDefault();\n action();\n }\n }, []);\n return { defer, onCloseAutoFocus };\n};\n","import type { LucideIcon } from 'lucide-react';\nimport { DropdownMenuItem } from '@/components/ui/dropdown-menu';\n\ntype InsertMenuItemProps = {\n icon: LucideIcon;\n label: string;\n /** One short line under the label (\"from the library or drop a file\"). */\n hint?: string;\n disabled?: boolean;\n onSelect: () => void;\n};\n\n/** One entry of a `+` menu in the entry document: an icon tile, the block's name and an optional hint. */\nexport const InsertMenuItem = ({ icon: Icon, label, hint, disabled, onSelect }: InsertMenuItemProps) => (\n <DropdownMenuItem disabled={disabled} onSelect={onSelect} className=\"gap-3 py-1.5\">\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground [&_svg]:size-4\">\n <Icon aria-hidden=\"true\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block\">{label}</span>\n {hint ? <span className=\"block text-meta text-muted-foreground\">{hint}</span> : null}\n </span>\n </DropdownMenuItem>\n);\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{t as r}from"./cn-DVhJ55Mo.js";var i=e(t(),1),a=e(n(),1),o=({title:e,titleAs:t=`h2`,description:n,actions:o,flush:s=!1,"aria-label":c,className:l,bodyClassName:u,children:d})=>{let f=(0,i.useId)(),p=!!(e||o);return(0,a.jsxs)(`section`,{"data-slot":`panel`,"aria-labelledby":e?f:void 0,"aria-label":e?void 0:c,className:r(`min-w-0 rounded-xl border bg-card text-card-foreground`,l),children:[p?(0,a.jsxs)(`div`,{"data-slot":`panel-header`,className:r(`flex items-start justify-between gap-3 px-5 pt-4`,s?`border-b pb-4`:`pb-3`),children:[(0,a.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[e?(0,a.jsx)(t,{id:f,className:`text-base leading-6 font-semibold`,children:e}):null,n?(0,a.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:n}):null]}),o?(0,a.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:o}):null]}):null,(0,a.jsx)(`div`,{"data-slot":`panel-body`,className:r(!s&&(p?`px-5 pb-5`:`p-5`),u),children:d})]})};export{o as t};
|
|
2
|
-
//# sourceMappingURL=Panel-B1TkcP8V.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Panel-B1TkcP8V.js","names":["useId","__toESM","require_jsx_runtime","cn","import_react","require_react","import_jsx_runtime","Panel","Heading","ariaLabel","titleId","hasHeader","title","actions","className","flush","description","bodyClassName"],"sources":["../../src/components/Panel/index.tsx"],"sourcesContent":["import { useId, type ReactNode } from 'react';\nimport { cn } from '@/helpers/cn';\n\ntype PanelProps = {\n /** Header title (16/600). With a title the panel is a labelled region. */\n title?: string;\n /** Heading level of the title in the page outline. */\n titleAs?: 'h2' | 'h3';\n /** One line under the title, or nothing (DESIGN.md, helper-text rule). */\n description?: string;\n /** Right side of the header row: buttons (size sm), a count, a menu. */\n actions?: ReactNode;\n /**\n * The body touches the panel edges (tables, lists, rails); the header then gets a bottom border.\n * Otherwise the body has the panel padding.\n */\n flush?: boolean;\n /** Accessible name when there is no visible title. */\n 'aria-label'?: string;\n className?: string;\n bodyClassName?: string;\n children: ReactNode;\n};\n\n/** A card surface with an optional header row: side panels, settings groups, dashboard blocks. */\nexport const Panel = ({\n title,\n titleAs: Heading = 'h2',\n description,\n actions,\n flush = false,\n 'aria-label': ariaLabel,\n className,\n bodyClassName,\n children,\n}: PanelProps) => {\n const titleId = useId();\n const hasHeader = Boolean(title || actions);\n return (\n <section\n data-slot=\"panel\"\n aria-labelledby={title ? titleId : undefined}\n aria-label={title ? undefined : ariaLabel}\n className={cn('min-w-0 rounded-xl border bg-card text-card-foreground', className)}\n >\n {hasHeader ? (\n <div\n data-slot=\"panel-header\"\n className={cn('flex items-start justify-between gap-3 px-5 pt-4', flush ? 'border-b pb-4' : 'pb-3')}\n >\n <div className=\"min-w-0 space-y-0.5\">\n {title ? (\n <Heading id={titleId} className=\"text-base leading-6 font-semibold\">\n {title}\n </Heading>\n ) : null}\n {description ? <p className=\"text-meta text-muted-foreground\">{description}</p> : null}\n </div>\n {actions ? <div className=\"flex shrink-0 items-center gap-2\">{actions}</div> : null}\n </div>\n ) : null}\n <div data-slot=\"panel-body\" className={cn(!flush && (hasHeader ? 'px-5 pb-5' : 'p-5'), bodyClassName)}>\n {children}\n </div>\n </section>\n );\n};\n"],"mappings":"mMAyBaO,GAAS,CACpB,QACA,QAASC,EAAU,KACnB,cACA,UACA,QAAQ,GACR,aAAcC,EACd,YACA,gBACA,cACgB,CAChB,IAAMC,GAAA,EAAUV,EAAAA,MAAAA,CAAM,EAChBW,EAAY,GAAQC,GAASC,GACnC,OACE,EAAAP,EAAA,KAAA,CAAC,UAAD,CACE,YAAU,QACV,kBAAiBM,EAAQF,EAAU,IAAA,GACnC,aAAYE,EAAQ,IAAA,GAAYH,EAChC,UAAWN,EAAG,yDAA0DW,CAAS,EAJnF,SAAA,CAMGH,GACC,EAAAL,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,eACV,UAAWH,EAAG,mDAAoDY,EAAQ,gBAAkB,MAAM,EAFpG,SAAA,EAIE,EAAAT,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sBAAf,SAAA,CACGM,GACC,EAAAN,EAAA,IAAA,CAACE,EAAD,CAAS,GAAIE,EAAS,UAAU,oCAC7B,SAAAE,CACM,CAAA,EACP,KACHI,GAAc,EAAAV,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,kCAAmC,SAAAU,CAAe,CAAA,EAAI,IAC/E,CACJ,CAAA,EAAAH,GAAU,EAAAP,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,mCAAoC,SAAAO,CAAa,CAAA,EAAI,IAC5E,CACH,CAAA,EAAA,MACJ,EAAAP,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,aAAa,UAAWH,EAAG,CAACY,IAAUJ,EAAY,YAAc,OAAQM,CAAa,EACjG,UACE,CAAA,CACE,GAEb"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{A as r,O as i,i as a,j as o,lt as s,o as c}from"./loader-circle-C-9trZPI.js";import{n as l}from"./createLucideIcon-CqygG5K6.js";import{t as u}from"./UnsavedChangesGuard-C1n7egF6.js";import{i as d,n as f}from"./skeleton-Dyi_b1wq.js";import{o as p,t as m}from"./field-W1dB_h6d.js";import{t as h}from"./cn-DVhJ55Mo.js";import{t as g}from"./Panel-B1TkcP8V.js";import{t as _}from"./CopyButton-h4HYhnYp.js";var v=e(t(),1),y=()=>o({queryKey:i.roles,queryFn:()=>c.roles.list(),meta:{silent:!0}}),b=()=>{let e=s();return r({mutationKey:[`roles`,`create`],meta:{silent:!0},mutationFn:e=>a(()=>c.roles.create(e)),onSuccess:()=>e.invalidateQueries({queryKey:i.roles})})},x=()=>{let e=s();return r({mutationKey:[`roles`,`update`],meta:{silent:!0},mutationFn:({id:e,input:t})=>a(()=>c.roles.update(e,t)),onSettled:()=>e.invalidateQueries({queryKey:i.roles})})},S=()=>{let e=s();return r({mutationKey:[`roles`,`delete`],mutationFn:e=>a(()=>c.roles.remove(e)),onSettled:()=>e.invalidateQueries({queryKey:i.roles})})},C=()=>{let e=y();return{draftRoleIds:(0,v.useMemo)(()=>new Set((e.data??[]).filter(e=>e.permissions.some(e=>e.action===`readDrafts`)).map(e=>e.id)),[e.data])}},w=()=>{let e=y();return{names:(0,v.useMemo)(()=>new Map((e.data??[]).map(e=>[e.id,e.name])),[e.data]),error:e.error}},T=e(n(),1),E=({title:e,description:t,label:n,secret:r,dismissLabel:i,onDismiss:a,hint:o,className:s})=>{let{t:c}=l(),y=(0,v.useId)(),b=(0,v.useRef)(null);return(0,v.useEffect)(()=>{b.current?.focus()},[]),(0,T.jsxs)(g,{title:e,description:t,className:h(`border-success/50`,s),children:[(0,T.jsxs)(`div`,{className:`space-y-4`,children:[(0,T.jsxs)(m,{children:[(0,T.jsx)(p,{htmlFor:y,children:n}),(0,T.jsxs)(`div`,{className:`flex gap-2`,children:[(0,T.jsx)(f,{id:y,readOnly:!0,value:r,inputSize:`sm`,className:`font-mono text-xs`,onFocus:e=>e.currentTarget.select()}),(0,T.jsx)(_,{ref:b,value:r})]})]}),o,(0,T.jsx)(`div`,{className:`flex justify-end`,children:(0,T.jsx)(d,{type:`button`,onClick:a,children:i??c(`secret.saved`)})})]}),(0,T.jsx)(u,{when:!0,title:c(`secret.leaveTitle`),description:c(`secret.leaveDescription`),stayLabel:c(`secret.stay`),leaveLabel:c(`secret.leave`)})]})};export{w as a,C as i,b as n,y as o,S as r,x as s,E as t};
|
|
2
|
-
//# sourceMappingURL=SecretReveal-kCkLH5jg.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SecretReveal-kCkLH5jg.js","names":["useMemo","useId","useRef","__toESM","require_jsx_runtime","useMutation","queryKeys","withCsrf","useQuery","useQueryClient","adminApi","useTranslation","UnsavedChangesGuard","Button","Input","FieldLabel","Field","cn","Panel","CopyButton","import_react","require_react","useRoles","useCreateRole","queryClient","input","useUpdateRole","id","useDeleteRole","useDraftRoleIds","roles","role","permission","useRoleNames","import_jsx_runtime","SecretReveal","copyRef","className","label","secret","event","hint","onDismiss","dismissLabel","t"],"sources":["../../src/api/roles.ts","../../src/components/SecretReveal/index.tsx"],"sourcesContent":["import type { CreateRoleInput, UpdateRoleInput } from '@shapio/client';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nexport const useRoles = () =>\n useQuery({ queryKey: queryKeys.roles, queryFn: () => adminApi.roles.list(), meta: { silent: true } });\n\nexport const useCreateRole = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['roles', 'create'],\n meta: { silent: true },\n mutationFn: (input: CreateRoleInput) => withCsrf(() => adminApi.roles.create(input)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.roles }),\n });\n};\n\nexport const useUpdateRole = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['roles', 'update'],\n meta: { silent: true },\n mutationFn: ({ id, input }: { id: string; input: UpdateRoleInput }) =>\n withCsrf(() => adminApi.roles.update(id, input)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.roles }),\n });\n};\n\nexport const useDeleteRole = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['roles', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.roles.remove(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.roles }),\n });\n};\n\n/**\n * IDs of the roles that grant Read drafts (drafts mode): the tokens screen marks their tokens, so a\n * development token is never mistaken for a production one.\n */\nexport const useDraftRoleIds = () => {\n const roles = useRoles();\n const draftRoleIds = useMemo(\n () =>\n new Set(\n (roles.data ?? [])\n .filter((role) => role.permissions.some((permission) => permission.action === 'readDrafts'))\n .map((role) => role.id),\n ),\n [roles.data],\n );\n return { draftRoleIds };\n};\n\n/** Role names by ID, for showing the roles that users, invitations and tokens reference. */\nexport const useRoleNames = () => {\n const roles = useRoles();\n const names = useMemo(() => new Map((roles.data ?? []).map((role) => [role.id, role.name])), [roles.data]);\n return { names, error: roles.error };\n};\n","import { useEffect, useId, useRef, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CopyButton } from '@/components/CopyButton';\nimport { Button } from '@/components/ui/button';\nimport { Field, FieldLabel } from '@/components/ui/field';\nimport { Input } from '@/components/ui/input';\nimport { cn } from '@/helpers/cn';\nimport { Panel } from '../Panel';\nimport { UnsavedChangesGuard } from '../UnsavedChangesGuard';\n\ntype SecretRevealProps = {\n /** \"Copy your new token\". The panel is a region named by it. */\n title: string;\n /** One line: it is shown only once, where to keep it. */\n description: string;\n /** The field label (\"Token\", \"Signing secret\"). */\n label: string;\n secret: string;\n /** \"I've copied it\"; defaults to \"I've saved it\". */\n dismissLabel?: string;\n onDismiss: () => void;\n /** Extra guidance under the secret (e.g. how to verify signatures). */\n hint?: ReactNode;\n className?: string;\n};\n\n/**\n * Shows a new secret exactly once (API tokens, webhook and deployment signing secrets), inline at the top of\n * the page where it was created, never in a URL. It takes focus (its copy button) when it appears, and\n * leaving the page before dismissing it asks first, since the secret can't be shown again.\n */\nexport const SecretReveal = ({\n title,\n description,\n label,\n secret,\n dismissLabel,\n onDismiss,\n hint,\n className,\n}: SecretRevealProps) => {\n const { t } = useTranslation();\n const id = useId();\n const copyRef = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n copyRef.current?.focus();\n }, []);\n return (\n <Panel title={title} description={description} className={cn('border-success/50', className)}>\n <div className=\"space-y-4\">\n <Field>\n <FieldLabel htmlFor={id}>{label}</FieldLabel>\n <div className=\"flex gap-2\">\n <Input\n id={id}\n readOnly\n value={secret}\n inputSize=\"sm\"\n className=\"font-mono text-xs\"\n onFocus={(event) => event.currentTarget.select()}\n />\n <CopyButton ref={copyRef} value={secret} />\n </div>\n </Field>\n {hint}\n <div className=\"flex justify-end\">\n <Button type=\"button\" onClick={onDismiss}>\n {dismissLabel ?? t('secret.saved')}\n </Button>\n </div>\n </div>\n <UnsavedChangesGuard\n when\n title={t('secret.leaveTitle')}\n description={t('secret.leaveDescription')}\n stayLabel={t('secret.stay')}\n leaveLabel={t('secret.leave')}\n />\n </Panel>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./jsx-runtime-DREnUpxT.js";import{k as n,n as r}from"./badge-ydvfgE8a.js";import{n as i,t as a}from"./createLucideIcon-CqygG5K6.js";import{nt as o}from"./src-BcLeD2-K.js";import{T as s,w as c}from"./es2015-DrAA1N2V.js";import{c as l}from"./constants-esJAnNTh.js";import{t as u}from"./clock-BGAXsuo4.js";import{t as d}from"./cn-DVhJ55Mo.js";import{n as f}from"./labels-CHE0gg1n.js";var p={name:`circle-dashed`,size:24,node:[[`path`,{d:`M10.1 2.182a10 10 0 0 1 3.8 0`,key:`5ilxe3`}],[`path`,{d:`M13.9 21.818a10 10 0 0 1-3.8 0`,key:`11zvb9`}],[`path`,{d:`M17.609 3.721a10 10 0 0 1 2.69 2.7`,key:`1iw5b2`}],[`path`,{d:`M2.182 13.9a10 10 0 0 1 0-3.8`,key:`c0bmvh`}],[`path`,{d:`M20.279 17.609a10 10 0 0 1-2.7 2.69`,key:`1ruxm7`}],[`path`,{d:`M21.818 10.1a10 10 0 0 1 0 3.8`,key:`qkgqxc`}],[`path`,{d:`M3.721 6.391a10 10 0 0 1 2.7-2.69`,key:`1mcia2`}],[`path`,{d:`M6.391 20.279a10 10 0 0 1-2.69-2.7`,key:`1fvljs`}]]};p.node;var m=a(p),h={name:`git-pull-request`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]};h.node;var g=a(h),_=(e,t={})=>({category:e,breaking:!1,destructive:!1,supported:!0,prerequisites:[],cleanup:[],...t}),v=(e,t)=>e?.fields.find(e=>e.id===t),y=e=>!!(e&&(e.filterable||e.sortable)),b={string:`String`,text:`String`,code:`String`,slug:`String`,email:`String`,url:`String`,uid:`String`,enum:`Enum`,date:`Date`,datetime:`DateTime`,time:`Time`,number:`Float`,integer:`Int`,decimal:`Decimal`,biginteger:`BigInt`,boolean:`Boolean`,json:`JSON`,richtext:`RichText`,media:`Media`,relation:`Relation`,component:`Component`,dynamiczone:`DynamicZone`},x=new Set([`string`,`text`]),S=new Set([`string`,`text`,`code`]),C=new Set([`jsonString`,`jsonNumber`,`numericString`,`boolean`]),w=e=>{let t=e?.settings??{};return t.minLength!==void 0||t.maxLength!==void 0||t.pattern!==void 0||t.validate===!0},T=(e,t,n)=>{let r=b[e]!==b[t]||t===`code`&&e!==`code`,i=o[e],a=o[t];if(i===a)return i===`jsonString`&&S.has(t)&&!w(n)||e===`integer`&&t===`number`||e===`biginteger`&&t===`decimal`&&n?.type===`decimal`&&n.settings.precision===void 0?_(`additive`,{breaking:r}):_(`validation`,{breaking:r,prerequisites:[`validateValues`]});let s=i===`jsonNumber`&&a===`numericString`||i===`numericString`&&a===`jsonNumber`,c=C.has(i)&&x.has(t),l=i===`jsonString`&&e!==`code`&&t===`richtext`,u=e===`richtext`&&x.has(t),d=s||c||l||u;return _(`conversion`,{breaking:r,supported:d,destructive:u,prerequisites:d?[`convert`,`validateValues`]:[]})},E=(e,t)=>{if(typeof e==`number`&&typeof t==`number`)return e-t;try{let n=BigInt(String(e))-BigInt(String(t));return n===0n?0:n>0n?1:-1}catch{let n=Number(e)-Number(t);return Number.isNaN(n)?String(e).localeCompare(String(t)):n}},D=(e,t,n)=>{if(n==null)return!1;if(t==null)return!0;let r=E(t,n);return e===`lower`?r<0:r>0},O=e=>Array.isArray(e)?e.map(e=>String(typeof e==`object`&&e?e.value:e)):[],k=(e,t)=>{let n=new Set(O(t));return O(e).some(e=>!n.has(e))},A=e=>e?_(`validation`,{prerequisites:[`validateValues`]}):_(`additive`),j=e=>{let{property:t,from:n,to:r}=e;switch(t){case`minLength`:case`min`:return A(D(`lower`,n,r));case`maxLength`:case`max`:case`precision`:case`scale`:return A(D(`upper`,n,r));case`pattern`:return A(r!==void 0);case`values`:return A(k(n,r));case`components`:case`allowedKinds`:case`protocols`:return A(r!==void 0&&(n===void 0||k(n,r)));case`sourceFieldId`:case`language`:return _(`metadata`);case`validate`:return A(r===!0);case`multiple`:case`repeatable`:case`cardinality`:return _(`conversion`,{breaking:!0,destructive:r===!1||r===`one`,prerequisites:[`convert`,`validateValues`]});case`formatVersion`:return _(`conversion`,{prerequisites:[`convert`,`validateValues`]});case`target`:case`component`:return _(`conversion`,{breaking:!0,destructive:!0,prerequisites:[`convert`]});default:return _(`validation`,{prerequisites:[`validateValues`]})}},M=(e,{before:t,after:n})=>{let r=v(t,e.fieldId),i=v(n,e.fieldId);switch(e.kind){case`field.added`:{let e=[];return i?.required&&e.push(i.defaultValue===void 0?`validateRequired`:`backfill`),i?.unique&&e.push(`checkUnique`),y(i)&&e.push(`buildIndex`),_(i?.required?`requiredField`:`additive`,{prerequisites:e})}case`field.removed`:return _(`removal`,{breaking:!0,cleanup:[...y(r)?[`dropIndex`]:[],...r?.unique?[`releaseUnique`]:[]]});case`field.order`:case`field.metadata`:return _(`metadata`);case`field.editor`:return _(`editorSwap`);case`field.apiKey`:return _(`contract`,{breaking:!0});case`field.type`:{let t=T(e.from,e.to,i);return i?.unique&&r?.unique&&!t.prerequisites.includes(`checkUnique`)?{...t,prerequisites:[...t.prerequisites,`checkUnique`]}:t}case`field.required`:return e.to===!0?_(`requiredField`,{prerequisites:[i?.defaultValue===void 0?`validateRequired`:`backfill`]}):_(`additive`);case`field.localized`:return n?.kind===`component`||n?.localized!==!0?_(`metadata`):e.to===!0?_(`additive`):_(`conversion`,{destructive:!0,prerequisites:[`convert`]});case`field.public`:case`field.deprecated`:return _(`metadata`,{breaking:e.kind===`field.public`?e.to===!1:e.to===!0});case`field.unique`:return e.to===!0?_(`constraint`,{prerequisites:[`checkUnique`]}):_(`additive`,{cleanup:[`releaseUnique`]});case`field.filterable`:case`field.sortable`:return y(i)&&!y(r)?_(`index`,{prerequisites:[`buildIndex`]}):!y(i)&&y(r)?_(`index`,{cleanup:[`dropIndex`]}):_(`metadata`);case`field.settings`:return j(e);default:return _(`metadata`)}},N=(e,t)=>{let n;switch(e.kind){case`definition.added`:n=_(`additive`);break;case`definition.removed`:n=_(`removal`,{breaking:!0});break;case`definition.apiKey`:case`definition.pluralApiKey`:n=_(`contract`,{breaking:!0});break;case`definition.metadata`:n=_(`metadata`);break;case`model.kind`:n=e.to===`singleton`?_(`validation`,{breaking:!0,prerequisites:[`validateValues`]}):_(`contract`,{breaking:!0});break;case`model.localized`:n=e.to===!0?_(`additive`):_(`conversion`,{destructive:!0,prerequisites:[`convert`]});break;case`model.draftAndPublish`:n=e.to===!0?_(`additive`):_(`conversion`,{destructive:!0,prerequisites:[`convert`]});break;default:n=M(e,t)}return{...e,...n}},P=(e,t)=>e.map(e=>N(e,t)),F=[`convert`,`backfill`,`validateRequired`,`validateValues`,`checkUnique`,`buildIndex`],I=e=>{let t=new Set(e.flatMap(e=>e.prerequisites));return{breaking:e.some(e=>e.breaking),destructive:e.some(e=>e.destructive),supported:e.every(e=>e.supported),prerequisites:F.filter(e=>t.has(e)),cleanup:[...new Set(e.flatMap(e=>e.cleanup))],metadataOnly:e.every(e=>e.category===`metadata`||e.category===`editorSwap`)}},L=[`breaking`,`prerequisites`,`live`,`metadata`],R=new Set([`metadata`,`editorSwap`]),z=e=>e.breaking||e.destructive?`breaking`:e.prerequisites.length>0?`prerequisites`:R.has(e.category)?`metadata`:`live`,B=e=>e.breaking||e.destructive?`breaking`:e.prerequisites.length>0?`prerequisites`:e.metadataOnly?`metadata`:`live`,V=e=>L.map(t=>({bucket:t,changes:e.filter(e=>z(e)===t)})).filter(e=>e.changes.length>0),H=e(t(),1),U={breaking:`warning`,prerequisites:`scheduled`,live:`success`,metadata:`neutral`},W=({bucket:e,className:t})=>{let{t:n}=i();return(0,H.jsx)(r,{tone:U[e],label:n(l[e]),className:t})},G={"definition.added":`models.changes.definitionAdded`,"definition.removed":`models.changes.definitionRemoved`,"definition.apiKey":`models.changes.definitionApiKey`,"definition.pluralApiKey":`models.changes.definitionPluralApiKey`,"definition.metadata":`models.changes.definitionMetadata`,"model.kind":`models.changes.modelKind`,"model.localized":`models.changes.modelLocalized`,"model.draftAndPublish":`models.changes.modelDraftAndPublish`,"field.added":`models.changes.fieldAdded`,"field.removed":`models.changes.fieldRemoved`,"field.order":`models.changes.fieldOrder`,"field.apiKey":`models.changes.fieldApiKey`,"field.metadata":`models.changes.fieldMetadata`,"field.editor":`models.changes.fieldEditor`,"field.type":`models.changes.fieldType`,"field.required":`models.changes.fieldRequired`,"field.localized":`models.changes.fieldLocalized`,"field.public":`models.changes.fieldPublic`,"field.deprecated":`models.changes.fieldDeprecated`,"field.unique":`models.changes.fieldUnique`,"field.filterable":`models.changes.fieldFilterable`,"field.sortable":`models.changes.fieldSortable`,"field.settings":`models.changes.fieldSettings`},K=new Set([`model.localized`,`model.draftAndPublish`,`field.required`,`field.localized`,`field.public`,`field.deprecated`,`field.unique`,`field.filterable`,`field.sortable`]),q=new Set([`field.type`,`field.added`]),J=e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):``,Y=e=>typeof e==`string`?s.t(`models.dataTypes.${e}.name`):``,X=(e,t,n)=>(n?.fields.find(t=>t.id===e)??t?.fields.find(t=>t.id===e))?.label??e??``,Z=(e,t,n)=>{let r=X(e.fieldId,t,n),i=e.kind===`field.added`&&typeof e.to==`object`&&e.to!==null?e.to.type:void 0,a=q.has(e.kind)?{from:Y(e.from),to:Y(e.to),type:Y(i)}:{from:J(e.from),to:J(e.to)};return s.t(G[e.kind],{field:r,name:n?.label??t?.label??``,property:e.property?f(e.property):``,...a,...K.has(e.kind)?{context:e.to===!0?`on`:`off`}:{}})},Q=e=>Object.hasOwn(c.models.steps,e),$=(e,t,n)=>{let r=X(e.fieldId,t,n);return Q(e.kind)?s.t(`models.steps.${e.kind}`,{field:r}):e.kind},ee=e=>{if(!e)return;let t=s.t(`models.plan.stepEntries`,{count:e.affectedHeads});return e.invalidHeads?`${t} · ${s.t(`models.plan.stepInvalid`,{count:e.invalidHeads})}`:t},te={waiting:`text-muted-foreground`,failing:`border-warning/40 bg-warning-muted text-warning`,later:`text-muted-foreground`},ne={waiting:u,failing:n,later:m},re=({steps:e,impacts:t,before:n,after:r,phase:i})=>(0,H.jsx)(`ol`,{className:`space-y-0`,children:e.map((a,o)=>{let s=t?.[o],c=i===`after`?`later`:s?.invalidHeads?`failing`:`waiting`,l=ne[c],u=ee(s);return(0,H.jsxs)(`li`,{className:`flex gap-3`,children:[(0,H.jsxs)(`span`,{className:`flex flex-col items-center`,children:[(0,H.jsx)(`span`,{className:d(`flex size-6 shrink-0 items-center justify-center rounded-full border bg-card`,te[c]),children:(0,H.jsx)(l,{"aria-hidden":`true`,className:`size-3.5`})}),o<e.length-1?(0,H.jsx)(`span`,{"aria-hidden":`true`,className:`my-1 w-px flex-1 bg-border`}):null]}),(0,H.jsxs)(`div`,{className:`min-w-0 pt-0.5 pb-4 text-sm`,children:[$(a,n,r),u?(0,H.jsx)(`span`,{className:`block text-meta text-muted-foreground`,children:u}):null]})]},`${a.kind}-${o}`)})});export{V as a,I as c,B as i,g as l,Z as n,N as o,W as r,P as s,re as t};
|
|
2
|
-
//# sourceMappingURL=StepList-BIQjDaWQ.js.map
|