@shapio/cms 0.3.0 → 0.3.1
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/apple-touch-icon.png +0 -0
- package/dist/admin/assets/{AssistError-BITJ_tpg.js → AssistError-BYR085vj.js} +2 -2
- package/dist/admin/assets/{AssistError-BITJ_tpg.js.map → AssistError-BYR085vj.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-CcluK965.js → BlockMenuItems-BnLF3Efc.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-CcluK965.js.map → BlockMenuItems-BnLF3Efc.js.map} +1 -1
- package/dist/admin/assets/{Body-BXa9DhtH.js → Body-CCOZq2q9.js} +2 -2
- package/dist/admin/assets/{Body-BXa9DhtH.js.map → Body-CCOZq2q9.js.map} +1 -1
- package/dist/admin/assets/{Builder-DcpRfXuc.js → Builder-BZy9mphs.js} +2 -2
- package/dist/admin/assets/{Builder-DcpRfXuc.js.map → Builder-BZy9mphs.js.map} +1 -1
- package/dist/admin/assets/{ConfirmDialog-B9nWhIIz.js → ConfirmDialog-Tu-gjEwm.js} +2 -2
- package/dist/admin/assets/{ConfirmDialog-B9nWhIIz.js.map → ConfirmDialog-Tu-gjEwm.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-BoWb-xi1.js → CopyButton-BuBaIlCk.js} +2 -2
- package/dist/admin/assets/{CopyButton-BoWb-xi1.js.map → CopyButton-BuBaIlCk.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-BnxmTk47.js → CursorPager-Bvu3CXpD.js} +2 -2
- package/dist/admin/assets/{CursorPager-BnxmTk47.js.map → CursorPager-Bvu3CXpD.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-Eeb9mONJ.js → ExternalLink-CCr5oRXI.js} +2 -2
- package/dist/admin/assets/{ExternalLink-Eeb9mONJ.js.map → ExternalLink-CCr5oRXI.js.map} +1 -1
- package/dist/admin/assets/Form-Doc0JEzF.js +2 -0
- package/dist/admin/assets/{Form-DZRLD3vH.js.map → Form-Doc0JEzF.js.map} +1 -1
- package/dist/admin/assets/{FormCheckboxGroup-uIC2XQIL.js → FormCheckboxGroup-eg39IJvf.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-uIC2XQIL.js.map → FormCheckboxGroup-eg39IJvf.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-hd95vPOu.js → FormRadioGroup-ZppSTZK6.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-hd95vPOu.js.map → FormRadioGroup-ZppSTZK6.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-D7VHmnx5.js → FormSelectField-Cosnxiz-.js} +2 -2
- package/dist/admin/assets/{FormSelectField-D7VHmnx5.js.map → FormSelectField-Cosnxiz-.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-ft8Jbe6E.js → FormSwitchField-DsKQEZw6.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-ft8Jbe6E.js.map → FormSwitchField-DsKQEZw6.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-DzyOzfZb.js → FormTextareaField-BXidSgIE.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-DzyOzfZb.js.map → FormTextareaField-BXidSgIE.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-CvC46uy_.js → HintedLabel-USQku9Yt.js} +2 -2
- package/dist/admin/assets/{HintedLabel-CvC46uy_.js.map → HintedLabel-USQku9Yt.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-GJLRVumb.js → InfoHint-Bz_yvehr.js} +2 -2
- package/dist/admin/assets/{InfoHint-GJLRVumb.js.map → InfoHint-Bz_yvehr.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-D976G0Rj.js → InsertMenuItem-DJXglsEd.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-D976G0Rj.js.map → InsertMenuItem-DJXglsEd.js.map} +1 -1
- package/dist/admin/assets/{LinkTabs-BZSlA57U.js → LinkTabs-D4U-rJyK.js} +2 -2
- package/dist/admin/assets/{LinkTabs-BZSlA57U.js.map → LinkTabs-D4U-rJyK.js.map} +1 -1
- package/dist/admin/assets/{Match-DdxTHHM4.js → Match-UAw1Ss8a.js} +2 -2
- package/dist/admin/assets/{Match-DdxTHHM4.js.map → Match-UAw1Ss8a.js.map} +1 -1
- package/dist/admin/assets/{Panel-iIKjEURi.js → Panel-BdjqCkKs.js} +2 -2
- package/dist/admin/assets/{Panel-iIKjEURi.js.map → Panel-BdjqCkKs.js.map} +1 -1
- package/dist/admin/assets/{QueryView-D6aZQJRN.js → QueryView-Bkyizh1P.js} +2 -2
- package/dist/admin/assets/{QueryView-D6aZQJRN.js.map → QueryView-Bkyizh1P.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-BpB79rIK.js → RadioTile-VHTPl88w.js} +2 -2
- package/dist/admin/assets/RadioTile-VHTPl88w.js.map +1 -0
- package/dist/admin/assets/{RichTextField-BuHCONPu.js → RichTextField-B21FqrT5.js} +4 -4
- package/dist/admin/assets/{RichTextField-BuHCONPu.js.map → RichTextField-B21FqrT5.js.map} +1 -1
- package/dist/admin/assets/{RowTitle--uFCpx8n.js → RowTitle-BD8QPs_v.js} +2 -2
- package/dist/admin/assets/{RowTitle--uFCpx8n.js.map → RowTitle-BD8QPs_v.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-DFpzeNE0.js → SecretReveal-BfJKUxXW.js} +2 -2
- package/dist/admin/assets/{SecretReveal-DFpzeNE0.js.map → SecretReveal-BfJKUxXW.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-Cqkx30tn.js → SharedGlyph-DDPdvsm_.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-Cqkx30tn.js.map → SharedGlyph-DDPdvsm_.js.map} +1 -1
- package/dist/admin/assets/{StepList-BY5MuJPJ.js → StepList-DKhkw1hN.js} +2 -2
- package/dist/admin/assets/{StepList-BY5MuJPJ.js.map → StepList-DKhkw1hN.js.map} +1 -1
- package/dist/admin/assets/Structure-C7dr00Bp.js +2 -0
- package/dist/admin/assets/{Structure-CqRa2t7z.js.map → Structure-C7dr00Bp.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-B2o4kSZ9.js → SubNavLink-BAF2-wuF.js} +2 -2
- package/dist/admin/assets/{SubNavLink-B2o4kSZ9.js.map → SubNavLink-BAF2-wuF.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-4rf2xhEJ.js → SuggestAltButton-DEsbHvs4.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-4rf2xhEJ.js.map → SuggestAltButton-DEsbHvs4.js.map} +1 -1
- package/dist/admin/assets/{TextLink-D15oyXlc.js → TextLink-CegO3jom.js} +2 -2
- package/dist/admin/assets/{TextLink-D15oyXlc.js.map → TextLink-CegO3jom.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-CP5mfgNY.js → Thumbnail-CTpKlrxR.js} +2 -2
- package/dist/admin/assets/{Thumbnail-CP5mfgNY.js.map → Thumbnail-CTpKlrxR.js.map} +1 -1
- package/dist/admin/assets/{UnsavedChangesGuard-DgOASh0p.js → UnsavedChangesGuard-Cbfg-Bgj.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-DgOASh0p.js.map → UnsavedChangesGuard-Cbfg-Bgj.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-BocvNVL-.js → UserAvatar-CiZ00-cr.js} +2 -2
- package/dist/admin/assets/{UserAvatar-BocvNVL-.js.map → UserAvatar-CiZ00-cr.js.map} +1 -1
- package/dist/admin/assets/{arrow-up-gf_j6SVQ.js → arrow-up-DwMJqZVV.js} +2 -2
- package/dist/admin/assets/{arrow-up-gf_j6SVQ.js.map → arrow-up-DwMJqZVV.js.map} +1 -1
- package/dist/admin/assets/{auth-pcS9CCXu.js → auth-BaVAo0u_.js} +2 -2
- package/dist/admin/assets/{auth-pcS9CCXu.js.map → auth-BaVAo0u_.js.map} +1 -1
- package/dist/admin/assets/{badge-DD0mE96i.js → badge-IBeVOhKd.js} +2 -2
- package/dist/admin/assets/{badge-DD0mE96i.js.map → badge-IBeVOhKd.js.map} +1 -1
- package/dist/admin/assets/{boxes-DcK-kaSa.js → boxes-BH0MDegO.js} +2 -2
- package/dist/admin/assets/{boxes-DcK-kaSa.js.map → boxes-BH0MDegO.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-DEwACe0M.js → calendar-clock-DKUk-w81.js} +2 -2
- package/dist/admin/assets/{calendar-clock-DEwACe0M.js.map → calendar-clock-DKUk-w81.js.map} +1 -1
- package/dist/admin/assets/{changeSets-BjUEfYbj.js → changeSets-o_G67qPk.js} +2 -2
- package/dist/admin/assets/{changeSets-BjUEfYbj.js.map → changeSets-o_G67qPk.js.map} +1 -1
- package/dist/admin/assets/chevron-left-D259hWJn.js +2 -0
- package/dist/admin/assets/{chevron-left-BsQYDUEC.js.map → chevron-left-D259hWJn.js.map} +1 -1
- package/dist/admin/assets/{circle-check-Dq1owihe.js → circle-check-Cidzt1Ww.js} +2 -2
- package/dist/admin/assets/{circle-check-Dq1owihe.js.map → circle-check-Cidzt1Ww.js.map} +1 -1
- package/dist/admin/assets/{circle-x-Dx6zIZko.js → circle-x-c1RwmC6j.js} +2 -2
- package/dist/admin/assets/{circle-x-Dx6zIZko.js.map → circle-x-c1RwmC6j.js.map} +1 -1
- package/dist/admin/assets/{clock-DQvkffqQ.js → clock-BOtPNp9-.js} +2 -2
- package/dist/admin/assets/{clock-DQvkffqQ.js.map → clock-BOtPNp9-.js.map} +1 -1
- package/dist/admin/assets/cn-M4_WHiur.js +2 -0
- package/dist/admin/assets/cn-M4_WHiur.js.map +1 -0
- package/dist/admin/assets/coerce-DWI5sgLW.js +2 -0
- package/dist/admin/assets/{coerce-OsqQRj19.js.map → coerce-DWI5sgLW.js.map} +1 -1
- package/dist/admin/assets/{constants-SrImR6C3.js → constants-CgUdkWmf.js} +2 -2
- package/dist/admin/assets/{constants-SrImR6C3.js.map → constants-CgUdkWmf.js.map} +1 -1
- package/dist/admin/assets/content-D25ainqV.js +3 -0
- package/dist/admin/assets/{content-_SLbbnfX.js.map → content-D25ainqV.js.map} +1 -1
- package/dist/admin/assets/{contentCounts-Ch3uMXVU.js → contentCounts-T-LmvUf5.js} +2 -2
- package/dist/admin/assets/{contentCounts-Ch3uMXVU.js.map → contentCounts-T-LmvUf5.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-BCOdUK_Z.js → contentTypes-BSlp81l1.js} +2 -2
- package/dist/admin/assets/{contentTypes-BCOdUK_Z.js.map → contentTypes-BSlp81l1.js.map} +1 -1
- package/dist/admin/assets/{copy-BDc3r0fO.js → copy-DT7dAzVm.js} +2 -2
- package/dist/admin/assets/{copy-BDc3r0fO.js.map → copy-DT7dAzVm.js.map} +1 -1
- package/dist/admin/assets/{dateTimeLocal-C92tyKwz.js → dateTimeLocal-DRq7DuYO.js} +2 -2
- package/dist/admin/assets/{dateTimeLocal-C92tyKwz.js.map → dateTimeLocal-DRq7DuYO.js.map} +1 -1
- package/dist/admin/assets/{develop-DS9TlDmv.js → develop-qF10t9tM.js} +6 -6
- package/dist/admin/assets/{develop-DS9TlDmv.js.map → develop-qF10t9tM.js.map} +1 -1
- package/dist/admin/assets/{dropdown-menu-gmP2Rp3n.js → dropdown-menu-Cl20LCvY.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-gmP2Rp3n.js.map → dropdown-menu-Cl20LCvY.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-NK0pWgqU.js → ellipsis-xDmHl1SK.js} +2 -2
- package/dist/admin/assets/{ellipsis-NK0pWgqU.js.map → ellipsis-xDmHl1SK.js.map} +1 -1
- package/dist/admin/assets/{external-link-D3Aoi2yX.js → external-link-DtJAaOWk.js} +2 -2
- package/dist/admin/assets/{external-link-D3Aoi2yX.js.map → external-link-DtJAaOWk.js.map} +1 -1
- package/dist/admin/assets/{file-text-DxXAmmxL.js → file-text-BJkQMeQO.js} +2 -2
- package/dist/admin/assets/{file-text-DxXAmmxL.js.map → file-text-BJkQMeQO.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-C2tOrKhO.js → fileRoute-Buucm0CU.js} +2 -2
- package/dist/admin/assets/{fileRoute-C2tOrKhO.js.map → fileRoute-Buucm0CU.js.map} +1 -1
- package/dist/admin/assets/{followPlural-CN6cQfNk.js → followPlural-Cuocm4Sv.js} +2 -2
- package/dist/admin/assets/{followPlural-CN6cQfNk.js.map → followPlural-Cuocm4Sv.js.map} +1 -1
- package/dist/admin/assets/{globe-CuElSilX.js → globe-CAhrwBgv.js} +2 -2
- package/dist/admin/assets/{globe-CuElSilX.js.map → globe-CAhrwBgv.js.map} +1 -1
- package/dist/admin/assets/{image-CsH8dZve.js → image-CGN6ffEu.js} +2 -2
- package/dist/admin/assets/{image-CsH8dZve.js.map → image-CGN6ffEu.js.map} +1 -1
- package/dist/admin/assets/{image-off-B_uBCsYu.js → image-off-0zX_kODH.js} +2 -2
- package/dist/admin/assets/{image-off-B_uBCsYu.js.map → image-off-0zX_kODH.js.map} +1 -1
- package/dist/admin/assets/{inbox-DsuXNaKE.js → inbox-CWq1hHqK.js} +2 -2
- package/dist/admin/assets/{inbox-DsuXNaKE.js.map → inbox-CWq1hHqK.js.map} +1 -1
- package/dist/admin/assets/{inbox-3iAHL3pC.js → inbox-CukkApHK.js} +2 -2
- package/dist/admin/assets/{inbox-3iAHL3pC.js.map → inbox-CukkApHK.js.map} +1 -1
- package/dist/admin/assets/index-C9uJxg4J.js +4 -0
- package/dist/admin/assets/index-C9uJxg4J.js.map +1 -0
- package/dist/admin/assets/index-Cz3C-LxB.css +2 -0
- package/dist/admin/assets/{key-round-B17HiT3K.js → key-round-DnE-2gr0.js} +2 -2
- package/dist/admin/assets/{key-round-B17HiT3K.js.map → key-round-DnE-2gr0.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-hWGS8LW6.js → link-2-off-Cbpvb3w4.js} +2 -2
- package/dist/admin/assets/{link-2-off-hWGS8LW6.js.map → link-2-off-Cbpvb3w4.js.map} +1 -1
- package/dist/admin/assets/{link-bhHmG4Tc.js → link-DPniuk00.js} +2 -2
- package/dist/admin/assets/{link-bhHmG4Tc.js.map → link-DPniuk00.js.map} +1 -1
- package/dist/admin/assets/{list-DRtRdjBC.js → list-CkHF_4xh.js} +2 -2
- package/dist/admin/assets/{list-DRtRdjBC.js.map → list-CkHF_4xh.js.map} +1 -1
- package/dist/admin/assets/{locales-BzPbz8FF.js → locales-DFLQ17ow.js} +2 -2
- package/dist/admin/assets/{locales-BzPbz8FF.js.map → locales-DFLQ17ow.js.map} +1 -1
- package/dist/admin/assets/{media-Xzot1ueY.js → media-CKTs3j83.js} +2 -2
- package/dist/admin/assets/{media-Xzot1ueY.js.map → media-CKTs3j83.js.map} +1 -1
- package/dist/admin/assets/{media-WLnWaL7U.js → media-CUfV74JZ.js} +2 -2
- package/dist/admin/assets/{media-WLnWaL7U.js.map → media-CUfV74JZ.js.map} +1 -1
- package/dist/admin/assets/{network-DHGqLwji.js → network-Fri1cjMt.js} +2 -2
- package/dist/admin/assets/{network-DHGqLwji.js.map → network-Fri1cjMt.js.map} +1 -1
- package/dist/admin/assets/{pencil-Bdp2z9D_.js → pencil-BqAgKC9v.js} +2 -2
- package/dist/admin/assets/{pencil-Bdp2z9D_.js.map → pencil-BqAgKC9v.js.map} +1 -1
- package/dist/admin/assets/{plus-BN_iSsnp.js → plus-DLRcpVhJ.js} +2 -2
- package/dist/admin/assets/{plus-BN_iSsnp.js.map → plus-DLRcpVhJ.js.map} +1 -1
- package/dist/admin/assets/{preload-helper-DAbCfXID.js → preload-helper-BHNBIF88.js} +2 -2
- package/dist/admin/assets/{preload-helper-DAbCfXID.js.map → preload-helper-BHNBIF88.js.map} +1 -1
- package/dist/admin/assets/{publishing-d9yhMwgA.js → publishing-DaaE8PaU.js} +2 -2
- package/dist/admin/assets/{publishing-d9yhMwgA.js.map → publishing-DaaE8PaU.js.map} +1 -1
- package/dist/admin/assets/{radio-group-DHIxK-IU.js → radio-group-CA3XlQcc.js} +2 -2
- package/dist/admin/assets/{radio-group-DHIxK-IU.js.map → radio-group-CA3XlQcc.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-CBoZle-b.js → rotate-ccw-CfrkcgYa.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-CBoZle-b.js.map → rotate-ccw-CfrkcgYa.js.map} +1 -1
- package/dist/admin/assets/{schedules-Dy89Nm6P.js → schedules-hJQkjEhN.js} +2 -2
- package/dist/admin/assets/{schedules-Dy89Nm6P.js.map → schedules-hJQkjEhN.js.map} +1 -1
- package/dist/admin/assets/{schema-B4smPFcR.js → schema--xSR7cf9.js} +2 -2
- package/dist/admin/assets/{schema-B4smPFcR.js.map → schema--xSR7cf9.js.map} +1 -1
- package/dist/admin/assets/{scroll-text-UbyzpWh-.js → scroll-text-BA9yh7Za.js} +2 -2
- package/dist/admin/assets/{scroll-text-UbyzpWh-.js.map → scroll-text-BA9yh7Za.js.map} +1 -1
- package/dist/admin/assets/{search-_YlNpPvU.js → search--71HzPvh.js} +2 -2
- package/dist/admin/assets/{search-_YlNpPvU.js.map → search--71HzPvh.js.map} +1 -1
- package/dist/admin/assets/{searchSchema-CvOhn4FV.js → searchSchema-Ypl6gq9g.js} +2 -2
- package/dist/admin/assets/{searchSchema-CvOhn4FV.js.map → searchSchema-Ypl6gq9g.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-BxRnxenn.js → searchSchemas-C-nQbyhd.js} +2 -2
- package/dist/admin/assets/{searchSchemas-BxRnxenn.js.map → searchSchemas-C-nQbyhd.js.map} +1 -1
- package/dist/admin/assets/sections-BBN2JErq.js +2 -0
- package/dist/admin/assets/sections-BBN2JErq.js.map +1 -0
- package/dist/admin/assets/{sections-Bb3Q4bcY.js → sections-D0OZozD2.js} +2 -2
- package/dist/admin/assets/{sections-Bb3Q4bcY.js.map → sections-D0OZozD2.js.map} +1 -1
- package/dist/admin/assets/{select-tHVWX85X.js → select-De48SQdZ.js} +2 -2
- package/dist/admin/assets/{select-tHVWX85X.js.map → select-De48SQdZ.js.map} +1 -1
- package/dist/admin/assets/{send-BqECHYi6.js → send-NuSmLVSD.js} +2 -2
- package/dist/admin/assets/{send-BqECHYi6.js.map → send-NuSmLVSD.js.map} +1 -1
- package/dist/admin/assets/settings-CYXU73dP.js +2 -0
- package/dist/admin/assets/settings-CYXU73dP.js.map +1 -0
- package/dist/admin/assets/skeleton-CCwdO9oq.js +42 -0
- package/dist/admin/assets/skeleton-CCwdO9oq.js.map +1 -0
- package/dist/admin/assets/{snapshots-BQrhsCmC.js → snapshots-BQeFK5cj.js} +2 -2
- package/dist/admin/assets/{snapshots-BQrhsCmC.js.map → snapshots-BQeFK5cj.js.map} +1 -1
- package/dist/admin/assets/{sparkles-BW4CbD6W.js → sparkles-B-0I44es.js} +2 -2
- package/dist/admin/assets/{sparkles-BW4CbD6W.js.map → sparkles-B-0I44es.js.map} +1 -1
- package/dist/admin/assets/{src-XaU0N8C-.js → src-CQu-YxUM.js} +2 -2
- package/dist/admin/assets/src-CQu-YxUM.js.map +1 -0
- package/dist/admin/assets/{stableId-C9Yq5iUw.js → stableId-rPnYVF-A.js} +2 -2
- package/dist/admin/assets/{stableId-C9Yq5iUw.js.map → stableId-rPnYVF-A.js.map} +1 -1
- package/dist/admin/assets/{store-BphwUzV5.js → store-Bqd9L9DK.js} +2 -2
- package/dist/admin/assets/{store-BphwUzV5.js.map → store-Bqd9L9DK.js.map} +1 -1
- package/dist/admin/assets/{switch-BVy02Vc8.js → switch-JmfyFAQG.js} +2 -2
- package/dist/admin/assets/{switch-BVy02Vc8.js.map → switch-JmfyFAQG.js.map} +1 -1
- package/dist/admin/assets/{table-CZYtdoHn.js → table-BEDv9IRM.js} +2 -2
- package/dist/admin/assets/{table-CZYtdoHn.js.map → table-BEDv9IRM.js.map} +1 -1
- package/dist/admin/assets/{tabs-quHbeVxA.js → tabs-DSS1c-Kf.js} +4 -4
- package/dist/admin/assets/{tabs-quHbeVxA.js.map → tabs-DSS1c-Kf.js.map} +1 -1
- package/dist/admin/assets/{textarea-B8Vl5gJ1.js → textarea-eatLAWE_.js} +2 -2
- package/dist/admin/assets/{textarea-B8Vl5gJ1.js.map → textarea-eatLAWE_.js.map} +1 -1
- package/dist/admin/assets/{titles-B2z5ckxG.js → titles-Bi2fWNN4.js} +2 -2
- package/dist/admin/assets/{titles-B2z5ckxG.js.map → titles-Bi2fWNN4.js.map} +1 -1
- package/dist/admin/assets/{tokens-Fh_OeIlf.js → tokens-C2E7swse.js} +2 -2
- package/dist/admin/assets/{tokens-Fh_OeIlf.js.map → tokens-C2E7swse.js.map} +1 -1
- package/dist/admin/assets/{tooltip-DwqM3opE.js → tooltip-Bji9fmSr.js} +2 -2
- package/dist/admin/assets/{tooltip-DwqM3opE.js.map → tooltip-Bji9fmSr.js.map} +1 -1
- package/dist/admin/assets/{undo-2-D4Fz4JMZ.js → undo-2-BU-uqm7e.js} +2 -2
- package/dist/admin/assets/{undo-2-D4Fz4JMZ.js.map → undo-2-BU-uqm7e.js.map} +1 -1
- package/dist/admin/assets/{useAuditLabels-DKrsrciQ.js → useAuditLabels-D5nmbXqN.js} +2 -2
- package/dist/admin/assets/{useAuditLabels-DKrsrciQ.js.map → useAuditLabels-D5nmbXqN.js.map} +1 -1
- package/dist/admin/assets/{useConfirmTarget-Dp8mCulm.js → useConfirmTarget-Y7_8kVX5.js} +2 -2
- package/dist/admin/assets/{useConfirmTarget-Dp8mCulm.js.map → useConfirmTarget-Y7_8kVX5.js.map} +1 -1
- package/dist/admin/assets/useContentSchema-DJTqjlUk.js +2 -0
- package/dist/admin/assets/{useContentSchema-Bv4_6VJR.js.map → useContentSchema-DJTqjlUk.js.map} +1 -1
- package/dist/admin/assets/{useCursorPager-B1upg5EU.js → useCursorPager-CiJroOo7.js} +2 -2
- package/dist/admin/assets/{useCursorPager-B1upg5EU.js.map → useCursorPager-CiJroOo7.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-34ynGJIk.js → useDiscardGuard-t_N3l9TQ.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-34ynGJIk.js.map → useDiscardGuard-t_N3l9TQ.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-QXSjZStv.js → useMediaUploader-CLHmKCwq.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-QXSjZStv.js.map → useMediaUploader-CLHmKCwq.js.map} +1 -1
- package/dist/admin/assets/{usePaletteItems-62-TZhy7.js → usePaletteItems-BVjWCdow.js} +2 -2
- package/dist/admin/assets/{usePaletteItems-62-TZhy7.js.map → usePaletteItems-BVjWCdow.js.map} +1 -1
- package/dist/admin/assets/{usePlaces-CY6f2DmI.js → usePlaces-CnSOZwtO.js} +2 -2
- package/dist/admin/assets/{usePlaces-CY6f2DmI.js.map → usePlaces-CnSOZwtO.js.map} +1 -1
- package/dist/admin/assets/{useQueries-BuKJBA0M.js → useQueries-BRolGUiw.js} +2 -2
- package/dist/admin/assets/{useQueries-BuKJBA0M.js.map → useQueries-BRolGUiw.js.map} +1 -1
- package/dist/admin/assets/{useSchemaScopeAccess-DUBeS9kU.js → useSchemaScopeAccess-bd8RQxuu.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-DUBeS9kU.js.map → useSchemaScopeAccess-bd8RQxuu.js.map} +1 -1
- package/dist/admin/assets/{users-BOn2ohJQ.js → users-CbErtM7w.js} +2 -2
- package/dist/admin/assets/{users-BOn2ohJQ.js.map → users-CbErtM7w.js.map} +1 -1
- package/dist/admin/assets/{users-BkKc4MNB.js → users-bDGYpSXg.js} +2 -2
- package/dist/admin/assets/{users-BkKc4MNB.js.map → users-bDGYpSXg.js.map} +1 -1
- package/dist/admin/assets/{zod-BHAd1wTC.js → zod-Gtw4e0qi.js} +2 -2
- package/dist/admin/assets/{zod-BHAd1wTC.js.map → zod-Gtw4e0qi.js.map} +1 -1
- package/dist/admin/favicon-32.png +0 -0
- package/dist/admin/favicon.svg +2 -2
- package/dist/admin/index.html +60 -56
- package/dist/admin/theme-init.js +41 -9
- package/dist/cli.js +30 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +11 -224
- package/dist/index.js +1 -1
- package/dist/{public-CGO8RBn3.d.ts → public-B7fFHMNr.d.ts} +251 -5
- package/dist/{worker-BLXy8aRW.js → worker-BAmQPoTJ.js} +574 -108
- package/dist/worker-BAmQPoTJ.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/Form-DZRLD3vH.js +0 -2
- package/dist/admin/assets/RadioTile-BpB79rIK.js.map +0 -1
- package/dist/admin/assets/Structure-CqRa2t7z.js +0 -2
- package/dist/admin/assets/chevron-left-BsQYDUEC.js +0 -2
- package/dist/admin/assets/cn-BQ3voEft.js +0 -2
- package/dist/admin/assets/cn-BQ3voEft.js.map +0 -1
- package/dist/admin/assets/coerce-OsqQRj19.js +0 -2
- package/dist/admin/assets/content-_SLbbnfX.js +0 -3
- package/dist/admin/assets/index-BLYOgCKc.css +0 -2
- package/dist/admin/assets/index-BSzXA60W.js +0 -4
- package/dist/admin/assets/index-BSzXA60W.js.map +0 -1
- package/dist/admin/assets/sections-DiySZZHb.js +0 -2
- package/dist/admin/assets/sections-DiySZZHb.js.map +0 -1
- package/dist/admin/assets/settings-D-v8gL8F.js +0 -2
- package/dist/admin/assets/settings-D-v8gL8F.js.map +0 -1
- package/dist/admin/assets/skeleton-C3QLIh7W.js +0 -42
- package/dist/admin/assets/skeleton-C3QLIh7W.js.map +0 -1
- package/dist/admin/assets/src-XaU0N8C-.js.map +0 -1
- package/dist/admin/assets/useContentSchema-Bv4_6VJR.js +0 -2
- package/dist/worker-BLXy8aRW.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{H as r,P as i,i as a,j as o,l as s,r as c,t as l}from"./cn-
|
|
2
|
-
//# sourceMappingURL=Body-
|
|
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{H as r,P as i,i as a,j as o,l as s,r as c,t as l}from"./cn-M4_WHiur.js";import{t as u}from"./useQueries-BRolGUiw.js";import{C as d,T as f,o as p,u as m}from"./auth-BaVAo0u_.js";import{t as h}from"./clock-BOtPNp9-.js";import{t as g}from"./file-text-BJkQMeQO.js";import{t as _}from"./image-CGN6ffEu.js";import{t as v}from"./search--71HzPvh.js";import{W as y}from"./src-CQu-YxUM.js";import{t as b}from"./store-Bqd9L9DK.js";import{s as x}from"./schema--xSR7cf9.js";import{t as S}from"./modelPermissions-DZ1lWfQZ.js";import{t as C}from"./useDebouncedValue-Dqs3wwhn.js";import{a as w,n as T,o as E,r as D}from"./titles-Bi2fWNN4.js";var O={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]};O.node;var k=a(O),A=e(t(),1),j=(e,t)=>{let[n,r]=(0,A.useState)({key:t,index:0}),i=n.key===t?n.index:0,a=e===0?-1:Math.min(i,e-1),o=(0,A.useCallback)(e=>r({key:t,index:e}),[t]);return{activeIndex:a,setActiveIndex:o,onKeyDown:(0,A.useCallback)(t=>{if(e===0||t.key!==`ArrowDown`&&t.key!==`ArrowUp`)return;t.preventDefault();let n=t.key===`ArrowDown`?1:-1;o((Math.max(a,0)+n+e)%e)},[e,a,o])}},M=e=>e.normalize(`NFD`).replace(/\p{M}/gu,``).toLowerCase(),N=(e,t)=>t===0||!/[\p{L}\p{N}]/u.test(e[t-1]??``),P=(e,t)=>{let n=t.indexOf(e);if(n!==-1)return 10+e.length*2+(N(t,n)?5:0)+(n===0?3:0);let r=0,i=0,a=-2;for(let n of e){let e=t.indexOf(n,i);if(e===-1)return null;r+=1+(e===a+1?2:0)+(N(t,e)?3:0)-Math.min(e-i,3)*.5,a=e,i=e+1}return r},F=(e,t,n=[])=>{let r=M(e).split(/\s+/).filter(Boolean);if(r.length===0)return 0;let i=[M(t),...n.map(M)],a=0;for(let e of r){let t=i.flatMap((t,n)=>{let r=P(e,t);return r===null?[]:[n===0?r*1.2:r]});if(t.length===0)return null;a+=Math.max(...t)}return a},I=(e,t)=>t.map((t,n)=>({item:t,index:n,score:F(e,t.label,t.keywords)})).filter(e=>e.score!==null).sort((e,t)=>t.score-e.score||e.index-t.index).map(({item:e})=>e),L=(e,t)=>e.kind===`singleton`?d({to:`/content/$modelKey`,params:{modelKey:e.apiKey}}):d({to:`/content/$modelKey/$entryId`,params:{modelKey:e.apiKey,entryId:t}}),R=e=>{let{t}=o(),{data:n}=m(),{data:r}=x(`model`),i=e.trim(),a=i.length>=2,s=(0,A.useMemo)(()=>(r??[]).map(({definition:e})=>e).filter(y).filter(e=>T(e)&&S(n,e.id,`read`)).sort((e,t)=>e.label.localeCompare(t.label)),[r,n]);return u({queries:s.map(e=>{let t=w(e);return{...E(e.apiKey,{q:i,pageSize:3,...t?{fields:[t.apiKey]}:{}}),placeholderData:void 0,enabled:a}}),combine:e=>({isFetching:a&&e.some(e=>e.isFetching),items:a?e.flatMap((e,n)=>{let r=s[n],i=e.data;return r&&i?i.items.map(e=>({id:`entry:${r.id}:${e.id}`,label:D(r,e,t(`palette.untitled`)),hint:r.label,icon:g,link:L(r,e.id)})):[]}):[]})})},z=e=>{let t=p(`media.read`),n=e.trim(),a=t&&n.length>=2,o=r({queryKey:[...i.media.assets({search:n}),`palette`],queryFn:()=>s.media.assets.list({search:n,limit:5}),enabled:a,meta:{silent:!0}});return{items:(0,A.useMemo)(()=>a?(o.data?.items??[]).map(e=>({id:`media:${e.id}`,label:e.filename,...e.alt?{keywords:[e.alt]}:{},icon:_,link:d({to:`/media`,search:{asset:e.id}})})):[],[a,o.data]),isFetching:a&&o.isFetching}},B=[`page`,`create`,`goto`],V=e=>({id:`recent:${e.id}`,label:e.label,...e.hint?{hint:e.hint}:{},icon:h,link:e.link}),H=(e,t)=>{let n=b(e=>e.registrations),r=C(e,200),{items:i,isFetching:a}=R(r),{items:o,isFetching:s}=z(r);return{groups:(0,A.useMemo)(()=>{let a=new Map;for(let{group:e,items:t}of n.values())a.set(e,[...a.get(e)??[],...t]);let s=e.trim()!==``,[c,...l]=B.map(t=>{let n=a.get(t)??[];return{key:t,items:s?I(e,n).slice(0,8):n}}),u={key:`recent`,items:s?[]:t.map(V)},d=r.trim()===e.trim();return[...c?[c]:[],u,...l,{key:`entries`,items:s&&d?i:[]},{key:`media`,items:s&&d?o:[]}].filter(e=>e.items.length>0)},[n,e,r,t,i,o]),isSearching:a||s||r.trim()!==e.trim()}},U=`shapio.palette.recent`,W=e=>{if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&typeof t.label==`string`&&typeof t.group==`string`&&typeof t.link==`object`&&t.link!==null},G=()=>{try{let e=JSON.parse(window.localStorage.getItem(`shapio.palette.recent`)??`[]`);return Array.isArray(e)?e.filter(W).slice(0,6):[]}catch{return[]}},K=e=>{let t=[e,...G().filter(t=>t.id!==e.id)].slice(0,6);try{window.localStorage.setItem(U,JSON.stringify(t))}catch{}return t},q=()=>{let[e,t]=(0,A.useState)(G);return{recent:e,remember:(0,A.useCallback)(e=>t(K(e)),[])}},J=e(n(),1),Y=({id:e,item:t,active:n,onHover:r,onSelect:i})=>{let a=t.icon;return(0,J.jsxs)(`li`,{id:e,role:`option`,"aria-selected":n,"data-active":n,onPointerMove:r,onPointerDown:e=>e.preventDefault(),onClick:i,className:l(`flex h-10 cursor-pointer items-center gap-3 rounded-lg px-2 text-sm select-none`,n&&`bg-accent text-accent-foreground`),children:[a?(0,J.jsx)(a,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):null,(0,J.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:t.label}),t.hint?(0,J.jsx)(`span`,{className:`shrink-0 truncate text-meta text-muted-foreground`,children:t.hint}):null,(0,J.jsx)(k,{"aria-hidden":`true`,className:l(`size-3.5 shrink-0 text-muted-foreground`,n?`opacity-100`:`opacity-0`)})]})},X={page:`palette.groups.page`,recent:`palette.groups.recent`,create:`palette.groups.create`,goto:`palette.groups.goto`,entries:`palette.groups.entries`,media:`palette.groups.media`},Z=({onClose:e})=>{let{t}=o(),n=f(),r=(0,A.useId)(),[i,a]=(0,A.useState)(``),{recent:s,remember:l}=q(),{groups:u,isSearching:d}=H(i,s),p=(0,A.useMemo)(()=>u.flatMap(e=>e.items.map(t=>({group:e.key,item:t}))),[u]),m=(0,A.useMemo)(()=>u.map((e,t)=>u.slice(0,t).reduce((e,t)=>e+t.items.length,0)),[u]),h=`${i}\u0000${p.map(({item:e})=>e.id).join(`|`)}`,{activeIndex:g,setActiveIndex:_,onKeyDown:y}=j(p.length,h),b=(0,A.useCallback)(e=>`${r}-option-${e}`,[r]);(0,A.useEffect)(()=>{g>=0&&document.getElementById(b(g))?.scrollIntoView({block:`nearest`})},[g,b]);let x=(t,r)=>{if(e(),r.link){if(t!==`page`&&t!==`create`){let e=r.id.replace(/^recent:/,``);l({id:e,label:r.label,...r.hint?{hint:r.hint}:{},group:t,link:r.link})}n(r.link)}r.run?.()},S=i.trim().length>=2&&d,C=i.trim()===``?``:S?t(`palette.searching`):p.length===0?t(`palette.noResults`,{query:i.trim()}):t(`palette.resultCount`,{count:p.length});return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-3 border-b px-4`,children:[(0,J.jsx)(v,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}),(0,J.jsx)(`input`,{role:`combobox`,"aria-expanded":`true`,"aria-controls":r,"aria-autocomplete":`list`,"aria-activedescendant":g>=0?b(g):void 0,"aria-label":t(`palette.inputLabel`),placeholder:t(`palette.placeholder`),autoComplete:`off`,autoFocus:!0,spellCheck:!1,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{y(e);let t=p[g];e.key===`Enter`&&t&&!e.nativeEvent.isComposing&&(e.preventDefault(),x(t.group,t.item))},className:`h-12 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground`}),S?(0,J.jsx)(c,{"aria-hidden":`true`,className:`size-4 shrink-0 animate-spin text-muted-foreground`}):null]}),(0,J.jsxs)(`ul`,{id:r,role:`listbox`,"aria-label":t(`palette.results`),className:`max-h-[min(60dvh,26rem)] overflow-y-auto overscroll-contain p-2`,children:[u.map((e,n)=>{let i=`${r}-${e.key}`;return(0,J.jsx)(`li`,{role:`presentation`,children:(0,J.jsxs)(`ul`,{role:`group`,"aria-labelledby":i,children:[(0,J.jsx)(`li`,{id:i,role:`presentation`,className:`px-2 pt-2 pb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:t(X[e.key])}),e.items.map((t,r)=>{let i=(m[n]??0)+r;return(0,J.jsx)(Y,{id:b(i),item:t,active:i===g,onHover:()=>_(i),onSelect:()=>x(e.key,t)},t.id)})]})},e.key)}),p.length===0&&i.trim()!==``&&!S?(0,J.jsx)(`li`,{role:`presentation`,className:`px-2 py-8 text-center text-sm text-muted-foreground`,children:t(`palette.noResults`,{query:i.trim()})}):null]}),(0,J.jsx)(`div`,{role:`status`,className:`sr-only`,children:C}),(0,J.jsxs)(`div`,{className:`hidden items-center gap-4 border-t bg-muted/50 px-4 py-2 text-xs text-muted-foreground sm:flex`,children:[(0,J.jsx)(`span`,{children:t(`palette.hintMove`)}),(0,J.jsx)(`span`,{children:t(`palette.hintOpen`)}),(0,J.jsx)(`span`,{children:t(`palette.hintClose`)})]})]})};export{Z as Body};
|
|
2
|
+
//# sourceMappingURL=Body-CCOZq2q9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Body-BXa9DhtH.js","names":["useState","useCallback","useMemo","useMemo","useMemo","useState","useCallback","useId","useState","useMemo","useCallback","_Fragment","Loader2","__toESM","require_jsx_runtime","useQuery","queryKeys","createLucideIcon","useTranslation","adminApi","LoaderCircle","cn","useQueries","linkOptions","useNavigate","useHasGlobalPermission","useMe","Clock","FileText","Image","Search","usePaletteStore","useDefinitions","canOnModel","useDebouncedValue","titleFieldOf","isSearchable","entryListQueryOptions","labelOf","isModelDefinition","__iconData","CornerDownLeft","import_react","require_react","useActiveIndex","state","setState","resetKey","current","activeIndex","count","setActiveIndex","event","step","normalize","text","isWordStart","index","scoreToken","substring","token","score","from","previous","char","fuzzyScore","tokens","query","texts","label","keywords","total","scores","fuzzyFilter","items","item","entry","b","a","entryLink","model","useEntrySearch","me","definitions","q","enabled","models","definition","title","results","result","page","useMediaSearch","canRead","search","asset","REGISTERED_ORDER","toPaletteItem","usePaletteGroups","registrations","debounced","entryItems","entriesFetching","mediaItems","mediaFetching","registered","group","searching","rest","key","recentGroup","recent","RECENT_STORAGE_KEY","isRecentItem","value","readRecentItems","parsed","rememberRecentItem","next","existing","useRecentItems","setRecent","import_jsx_runtime","Option","Icon","active","onHover","onSelect","GROUP_LABEL_KEYS","Body","navigate","listboxId","setQuery","flat","groups","offsets","sum","optionId","position","select","onClose","id","remember","isSearching","status","onKeyDown","labelId","groupIndex","itemIndex"],"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/corner-down-left.mjs","../../src/components/CommandPalette/hooks/useActiveIndex.ts","../../src/components/CommandPalette/helpers/fuzzy.ts","../../src/components/CommandPalette/hooks/useEntrySearch.ts","../../src/components/CommandPalette/hooks/useMediaSearch.ts","../../src/components/CommandPalette/hooks/usePaletteGroups.ts","../../src/components/CommandPalette/helpers/recentItems.ts","../../src/components/CommandPalette/hooks/useRecentItems.ts","../../src/components/CommandPalette/Option/index.tsx","../../src/components/CommandPalette/Body/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: \"corner-down-left\",\n size: 24,\n node: [\n [\"path\", { d: \"M20 4v7a4 4 0 0 1-4 4H4\", key: \"6o5b7l\" }],\n [\"path\", { d: \"m9 10-5 5 5 5\", key: \"1kshq7\" }]\n ]\n};\n__iconData.node;\nconst CornerDownLeft = createLucideIcon(__iconData);\n\nexport { __iconData, CornerDownLeft as default };\n//# sourceMappingURL=corner-down-left.mjs.map\n","import { useCallback, useState, type KeyboardEvent } from 'react';\n\n/**\n * The highlighted row of a list driven from a text input: ↑/↓ move (wrapping), and the highlight returns\n * to the first row whenever `resetKey` changes (new text, new results).\n */\nexport const useActiveIndex = (count: number, resetKey: string) => {\n const [state, setState] = useState({ key: resetKey, index: 0 });\n const current = state.key === resetKey ? state.index : 0;\n const activeIndex = count === 0 ? -1 : Math.min(current, count - 1);\n const setActiveIndex = useCallback((index: number) => setState({ key: resetKey, index }), [resetKey]);\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (count === 0 || (event.key !== 'ArrowDown' && event.key !== 'ArrowUp')) {\n return;\n }\n event.preventDefault();\n const step = event.key === 'ArrowDown' ? 1 : -1;\n setActiveIndex((Math.max(activeIndex, 0) + step + count) % count);\n },\n [count, activeIndex, setActiveIndex],\n );\n return { activeIndex, setActiveIndex, onKeyDown };\n};\n","/** Lower case without accents, so \"cafe\" finds \"Café\". */\nconst normalize = (text: string) => text.normalize('NFD').replace(/\\p{M}/gu, '').toLowerCase();\n\nconst isWordStart = (text: string, index: number) =>\n index === 0 || !/[\\p{L}\\p{N}]/u.test(text[index - 1] ?? '');\n\n/** Score of one query token against one text: a subsequence match, rewarding word starts and runs. */\nconst scoreToken = (token: string, text: string): number | null => {\n const substring = text.indexOf(token);\n if (substring !== -1) {\n return 10 + token.length * 2 + (isWordStart(text, substring) ? 5 : 0) + (substring === 0 ? 3 : 0);\n }\n let score = 0;\n let from = 0;\n let previous = -2;\n for (const char of token) {\n const index = text.indexOf(char, from);\n if (index === -1) {\n return null;\n }\n score +=\n 1 +\n (index === previous + 1 ? 2 : 0) +\n (isWordStart(text, index) ? 3 : 0) -\n Math.min(index - from, 3) * 0.5;\n previous = index;\n from = index + 1;\n }\n return score;\n};\n\n/**\n * How well `query` finds an item with this label (and keywords): null when it doesn't, higher is better.\n * Every word of the query must match the label or a keyword; the label counts a little more.\n */\nexport const fuzzyScore = (query: string, label: string, keywords: readonly string[] = []): number | null => {\n const tokens = normalize(query).split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) {\n return 0;\n }\n const texts = [normalize(label), ...keywords.map(normalize)];\n let total = 0;\n for (const token of tokens) {\n const scores = texts.flatMap((text, index) => {\n const score = scoreToken(token, text);\n return score === null ? [] : [index === 0 ? score * 1.2 : score];\n });\n if (scores.length === 0) {\n return null;\n }\n total += Math.max(...scores);\n }\n return total;\n};\n\n/** The items `query` finds, best first (stable for equal scores); all of them for an empty query. */\nexport const fuzzyFilter = <T extends { label: string; keywords?: readonly string[] }>(\n query: string,\n items: readonly T[],\n): T[] =>\n items\n .map((item, index) => ({ item, index, score: fuzzyScore(query, item.label, item.keywords) }))\n .filter((entry): entry is { item: T; index: number; score: number } => entry.score !== null)\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map(({ item }) => item);\n","import type { AdminEntryPage } from '@shapio/client';\nimport { isModelDefinition, type ModelDefinition } from '@shapio/schema';\nimport { useQueries } from '@tanstack/react-query';\nimport { linkOptions } from '@tanstack/react-router';\nimport { FileText } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { entryListQueryOptions } from '@/api/content';\nimport { useDefinitions } from '@/api/schema';\nimport { isSearchable, labelOf, titleFieldOf } from '@/fields/helpers/titles';\nimport { canOnModel } from '@/helpers/modelPermissions';\nimport { ENTRY_RESULTS_PER_MODEL, MIN_SEARCH_LENGTH } from '../constants';\nimport type { PaletteItem } from '../types';\n\nconst entryLink = (model: ModelDefinition, entryId: string) =>\n model.kind === 'singleton'\n ? linkOptions({ to: '/content/$modelKey', params: { modelKey: model.apiKey } })\n : linkOptions({ to: '/content/$modelKey/$entryId', params: { modelKey: model.apiKey, entryId } });\n\n/**\n * Entries whose title matches `query`: the list API's `q` per readable place with a text title, the top few\n * of each, in place order. `query` should already be debounced.\n */\nexport const useEntrySearch = (query: string): { items: PaletteItem[]; isFetching: boolean } => {\n const { t } = useTranslation();\n const { data: me } = useMe();\n const { data: definitions } = useDefinitions('model');\n const q = query.trim();\n const enabled = q.length >= MIN_SEARCH_LENGTH;\n const models = useMemo(\n () =>\n (definitions ?? [])\n .map(({ definition }) => definition)\n .filter(isModelDefinition)\n .filter((model) => isSearchable(model) && canOnModel(me, model.id, 'read'))\n .sort((a, b) => a.label.localeCompare(b.label)),\n [definitions, me],\n );\n return useQueries({\n queries: models.map((model) => {\n const title = titleFieldOf(model);\n return {\n ...entryListQueryOptions(model.apiKey, {\n q,\n pageSize: ENTRY_RESULTS_PER_MODEL,\n ...(title ? { fields: [title.apiKey] } : {}),\n }),\n placeholderData: undefined,\n enabled,\n };\n }),\n combine: (results) => ({\n isFetching: enabled && results.some((result) => result.isFetching),\n items: enabled\n ? results.flatMap((result, index) => {\n const model = models[index];\n const page: AdminEntryPage | undefined = result.data;\n return model && page\n ? page.items.map((item): PaletteItem => ({\n id: `entry:${model.id}:${item.id}`,\n label: labelOf(model, item, t('palette.untitled')),\n hint: model.label,\n icon: FileText,\n link: entryLink(model, item.id),\n }))\n : [];\n })\n : [],\n }),\n });\n};\n","import { useQuery } from '@tanstack/react-query';\nimport { linkOptions } from '@tanstack/react-router';\nimport { Image } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useHasGlobalPermission } from '@/api/auth';\nimport { adminApi } from '@/api/client';\nimport { queryKeys } from '@/api/queryKeys';\nimport { MEDIA_RESULTS, MIN_SEARCH_LENGTH } from '../constants';\nimport type { PaletteItem } from '../types';\n\n/** Library files whose name or text matches `query` (already debounced), when the admin may read media. */\nexport const useMediaSearch = (query: string): { items: PaletteItem[]; isFetching: boolean } => {\n const canRead = useHasGlobalPermission('media.read');\n const search = query.trim();\n const enabled = canRead && search.length >= MIN_SEARCH_LENGTH;\n const result = useQuery({\n queryKey: [...queryKeys.media.assets({ search }), 'palette'],\n queryFn: () => adminApi.media.assets.list({ search, limit: MEDIA_RESULTS }),\n enabled,\n meta: { silent: true },\n });\n const items = useMemo(\n () =>\n enabled\n ? (result.data?.items ?? []).map((asset): PaletteItem => ({\n id: `media:${asset.id}`,\n label: asset.filename,\n ...(asset.alt ? { keywords: [asset.alt] } : {}),\n icon: Image,\n link: linkOptions({ to: '/media', search: { asset: asset.id } }),\n }))\n : [],\n [enabled, result.data],\n );\n return { items, isFetching: enabled && result.isFetching };\n};\n","import { Clock } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useDebouncedValue } from '@/hooks/useDebouncedValue';\nimport { SEARCH_DEBOUNCE_MS, STATIC_RESULTS } from '../constants';\nimport { fuzzyFilter } from '../helpers/fuzzy';\nimport type { RecentItem } from '../helpers/recentItems';\nimport { usePaletteStore } from '../store';\nimport type { PaletteGroup, PaletteItem, RegisteredGroup } from '../types';\nimport { useEntrySearch } from './useEntrySearch';\nimport { useMediaSearch } from './useMediaSearch';\n\nconst REGISTERED_ORDER: readonly RegisteredGroup[] = ['page', 'create', 'goto'];\n\nconst toPaletteItem = (item: RecentItem): PaletteItem => ({\n id: `recent:${item.id}`,\n label: item.label,\n ...(item.hint ? { hint: item.hint } : {}),\n icon: Clock,\n link: item.link,\n});\n\n/**\n * What the palette lists for `query`. Empty: actions on this page, recent items, create and go-to. Typing:\n * the registered items it finds (fuzzy, best first), then entries and media from the server.\n */\nexport const usePaletteGroups = (query: string, recent: readonly RecentItem[]) => {\n const registrations = usePaletteStore((state) => state.registrations);\n const debounced = useDebouncedValue(query, SEARCH_DEBOUNCE_MS);\n const { items: entryItems, isFetching: entriesFetching } = useEntrySearch(debounced);\n const { items: mediaItems, isFetching: mediaFetching } = useMediaSearch(debounced);\n const groups = useMemo((): PaletteGroup[] => {\n const registered = new Map<RegisteredGroup, PaletteItem[]>();\n for (const { group, items } of registrations.values()) {\n registered.set(group, [...(registered.get(group) ?? []), ...items]);\n }\n const searching = query.trim() !== '';\n const fromRegistered = REGISTERED_ORDER.map((key) => {\n const items = registered.get(key) ?? [];\n return { key, items: searching ? fuzzyFilter(query, items).slice(0, STATIC_RESULTS) : items };\n });\n const [page, ...rest] = fromRegistered;\n const recentGroup: PaletteGroup = { key: 'recent', items: searching ? [] : recent.map(toPaletteItem) };\n // Server results only for the query they were fetched for, so stale rows never flash under new text.\n const current = debounced.trim() === query.trim();\n return [\n ...(page ? [page] : []),\n recentGroup,\n ...rest,\n { key: 'entries' as const, items: searching && current ? entryItems : [] },\n { key: 'media' as const, items: searching && current ? mediaItems : [] },\n ].filter((group) => group.items.length > 0);\n }, [registrations, query, debounced, recent, entryItems, mediaItems]);\n return { groups, isSearching: entriesFetching || mediaFetching || debounced.trim() !== query.trim() };\n};\n","import type { LinkOptions } from '@tanstack/react-router';\nimport type { PaletteGroupKey } from '../types';\n\n/** A place the admin went through the palette; stored without icons or callbacks. */\nexport type RecentItem = {\n id: string;\n label: string;\n hint?: string;\n group: PaletteGroupKey;\n link: LinkOptions;\n};\n\nexport const RECENT_STORAGE_KEY = 'shapio.palette.recent';\nexport const RECENT_LIMIT = 6;\n\nconst isRecentItem = (value: unknown): value is RecentItem => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const item = value as Record<string, unknown>;\n return (\n typeof item.id === 'string' &&\n typeof item.label === 'string' &&\n typeof item.group === 'string' &&\n typeof item.link === 'object' &&\n item.link !== null\n );\n};\n\n/**\n * Recent items are a convenience: storage can be missing (private windows, blocked site data) or hold\n * anything, so every read and write is guarded and falls back to nothing.\n */\nexport const readRecentItems = (): RecentItem[] => {\n try {\n const parsed: unknown = JSON.parse(window.localStorage.getItem(RECENT_STORAGE_KEY) ?? '[]');\n return Array.isArray(parsed) ? parsed.filter(isRecentItem).slice(0, RECENT_LIMIT) : [];\n } catch {\n return [];\n }\n};\n\n/** Puts `item` first, without duplicates, and keeps the newest few. Returns the new list. */\nexport const rememberRecentItem = (item: RecentItem): RecentItem[] => {\n const next = [item, ...readRecentItems().filter((existing) => existing.id !== item.id)].slice(\n 0,\n RECENT_LIMIT,\n );\n try {\n window.localStorage.setItem(RECENT_STORAGE_KEY, JSON.stringify(next));\n } catch {\n // Not remembered this time; the palette works without it.\n }\n return next;\n};\n","import { useCallback, useState } from 'react';\nimport { readRecentItems, rememberRecentItem, type RecentItem } from '../helpers/recentItems';\n\n/** Recent palette destinations from this browser (localStorage, guarded), and a way to add one. */\nexport const useRecentItems = () => {\n const [recent, setRecent] = useState<RecentItem[]>(readRecentItems);\n const remember = useCallback((item: RecentItem) => setRecent(rememberRecentItem(item)), []);\n return { recent, remember };\n};\n","import { CornerDownLeft } from 'lucide-react';\nimport { cn } from '@/helpers/cn';\nimport type { PaletteItem } from '../types';\n\ntype OptionProps = {\n id: string;\n item: PaletteItem;\n active: boolean;\n onHover: () => void;\n onSelect: () => void;\n};\n\n/**\n * One result row (`role=\"option\"`). Focus stays in the search input; the active row is announced through\n * `aria-activedescendant`, highlighted with the selection colour and shows the Enter hint.\n */\nexport const Option = ({ id, item, active, onHover, onSelect }: OptionProps) => {\n const Icon = item.icon;\n return (\n <li\n id={id}\n role=\"option\"\n aria-selected={active}\n data-active={active}\n onPointerMove={onHover}\n // Keep focus in the input when a row is clicked.\n onPointerDown={(event) => event.preventDefault()}\n onClick={onSelect}\n className={cn(\n 'flex h-10 cursor-pointer items-center gap-3 rounded-lg px-2 text-sm select-none',\n active && 'bg-accent text-accent-foreground',\n )}\n >\n {Icon ? <Icon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground\" /> : null}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n {item.hint ? (\n <span className=\"shrink-0 truncate text-meta text-muted-foreground\">{item.hint}</span>\n ) : null}\n <CornerDownLeft\n aria-hidden=\"true\"\n className={cn('size-3.5 shrink-0 text-muted-foreground', active ? 'opacity-100' : 'opacity-0')}\n />\n </li>\n );\n};\n","import { useNavigate } from '@tanstack/react-router';\nimport { Loader2, Search } from 'lucide-react';\nimport { useCallback, useEffect, useId, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MIN_SEARCH_LENGTH } from '../constants';\nimport { useActiveIndex } from '../hooks/useActiveIndex';\nimport { usePaletteGroups } from '../hooks/usePaletteGroups';\nimport { useRecentItems } from '../hooks/useRecentItems';\nimport { Option } from '../Option';\nimport type { PaletteGroupKey, PaletteItem } from '../types';\n\nconst GROUP_LABEL_KEYS = {\n page: 'palette.groups.page',\n recent: 'palette.groups.recent',\n create: 'palette.groups.create',\n goto: 'palette.groups.goto',\n entries: 'palette.groups.entries',\n media: 'palette.groups.media',\n} as const satisfies Record<PaletteGroupKey, string>;\n\ntype BodyProps = { onClose: () => void };\n\n/**\n * The palette's search field and results: a combobox whose listbox is grouped. Loaded on first open, so the\n * schema helpers it searches with stay out of the first page load.\n */\nexport const Body = ({ onClose }: BodyProps) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const listboxId = useId();\n const [query, setQuery] = useState('');\n const { recent, remember } = useRecentItems();\n const { groups, isSearching } = usePaletteGroups(query, recent);\n const flat = useMemo(\n () => groups.flatMap((group) => group.items.map((item) => ({ group: group.key, item }))),\n [groups],\n );\n /** Where each group starts in `flat`, so every option knows its position. */\n const offsets = useMemo(\n () =>\n groups.map((_, index) => groups.slice(0, index).reduce((sum, group) => sum + group.items.length, 0)),\n [groups],\n );\n const resetKey = `${query}\\u0000${flat.map(({ item }) => item.id).join('|')}`;\n const { activeIndex, setActiveIndex, onKeyDown } = useActiveIndex(flat.length, resetKey);\n const optionId = useCallback((position: number) => `${listboxId}-option-${position}`, [listboxId]);\n\n useEffect(() => {\n if (activeIndex >= 0) {\n document.getElementById(optionId(activeIndex))?.scrollIntoView({ block: 'nearest' });\n }\n }, [activeIndex, optionId]);\n\n const select = (group: PaletteGroupKey, item: PaletteItem) => {\n onClose();\n if (item.link) {\n if (group !== 'page' && group !== 'create') {\n const id = item.id.replace(/^recent:/, '');\n remember({\n id,\n label: item.label,\n ...(item.hint ? { hint: item.hint } : {}),\n group,\n link: item.link,\n });\n }\n void navigate(item.link);\n }\n item.run?.();\n };\n\n const searching = query.trim().length >= MIN_SEARCH_LENGTH && isSearching;\n const status =\n query.trim() === ''\n ? ''\n : searching\n ? t('palette.searching')\n : flat.length === 0\n ? t('palette.noResults', { query: query.trim() })\n : t('palette.resultCount', { count: flat.length });\n\n return (\n <>\n <div className=\"flex items-center gap-3 border-b px-4\">\n <Search aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground\" />\n <input\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? optionId(activeIndex) : undefined}\n aria-label={t('palette.inputLabel')}\n placeholder={t('palette.placeholder')}\n autoComplete=\"off\"\n // The dialog focuses its content before this lazily loaded field exists.\n autoFocus\n spellCheck={false}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n onKeyDown(event);\n const active = flat[activeIndex];\n if (event.key === 'Enter' && active && !event.nativeEvent.isComposing) {\n event.preventDefault();\n select(active.group, active.item);\n }\n }}\n className=\"h-12 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n {searching ? (\n <Loader2 aria-hidden=\"true\" className=\"size-4 shrink-0 animate-spin text-muted-foreground\" />\n ) : null}\n </div>\n <ul\n id={listboxId}\n role=\"listbox\"\n aria-label={t('palette.results')}\n className=\"max-h-[min(60dvh,26rem)] overflow-y-auto overscroll-contain p-2\"\n >\n {groups.map((group, groupIndex) => {\n const labelId = `${listboxId}-${group.key}`;\n return (\n <li key={group.key} role=\"presentation\">\n <ul role=\"group\" aria-labelledby={labelId}>\n <li\n id={labelId}\n role=\"presentation\"\n className=\"px-2 pt-2 pb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase\"\n >\n {t(GROUP_LABEL_KEYS[group.key])}\n </li>\n {group.items.map((item, itemIndex) => {\n const position = (offsets[groupIndex] ?? 0) + itemIndex;\n return (\n <Option\n key={item.id}\n id={optionId(position)}\n item={item}\n active={position === activeIndex}\n onHover={() => setActiveIndex(position)}\n onSelect={() => select(group.key, item)}\n />\n );\n })}\n </ul>\n </li>\n );\n })}\n {flat.length === 0 && query.trim() !== '' && !searching ? (\n <li role=\"presentation\" className=\"px-2 py-8 text-center text-sm text-muted-foreground\">\n {t('palette.noResults', { query: query.trim() })}\n </li>\n ) : null}\n </ul>\n <div role=\"status\" className=\"sr-only\">\n {status}\n </div>\n <div className=\"hidden items-center gap-4 border-t bg-muted/50 px-4 py-2 text-xs text-muted-foreground sm:flex\">\n <span>{t('palette.hintMove')}</span>\n <span>{t('palette.hintOpen')}</span>\n <span>{t('palette.hintClose')}</span>\n </div>\n </>\n );\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Body-CCOZq2q9.js","names":["useState","useCallback","useMemo","useMemo","useMemo","useState","useCallback","useId","useState","useMemo","useCallback","_Fragment","Loader2","__toESM","require_jsx_runtime","useQuery","queryKeys","createLucideIcon","useTranslation","adminApi","LoaderCircle","cn","useQueries","linkOptions","useNavigate","useHasGlobalPermission","useMe","Clock","FileText","Image","Search","isModelDefinition","usePaletteStore","useDefinitions","canOnModel","useDebouncedValue","titleFieldOf","isSearchable","entryListQueryOptions","labelOf","__iconData","CornerDownLeft","import_react","require_react","useActiveIndex","state","setState","resetKey","current","activeIndex","count","setActiveIndex","event","step","normalize","text","isWordStart","index","scoreToken","substring","token","score","from","previous","char","fuzzyScore","tokens","query","texts","label","keywords","total","scores","fuzzyFilter","items","item","entry","b","a","entryLink","model","useEntrySearch","me","definitions","q","enabled","models","definition","title","results","result","page","useMediaSearch","canRead","search","asset","REGISTERED_ORDER","toPaletteItem","usePaletteGroups","registrations","debounced","entryItems","entriesFetching","mediaItems","mediaFetching","registered","group","searching","rest","key","recentGroup","recent","RECENT_STORAGE_KEY","isRecentItem","value","readRecentItems","parsed","rememberRecentItem","next","existing","useRecentItems","setRecent","import_jsx_runtime","Option","Icon","active","onHover","onSelect","GROUP_LABEL_KEYS","Body","navigate","listboxId","setQuery","flat","groups","offsets","sum","optionId","position","select","onClose","id","remember","isSearching","status","onKeyDown","labelId","groupIndex","itemIndex"],"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/corner-down-left.mjs","../../src/components/CommandPalette/hooks/useActiveIndex.ts","../../src/components/CommandPalette/helpers/fuzzy.ts","../../src/components/CommandPalette/hooks/useEntrySearch.ts","../../src/components/CommandPalette/hooks/useMediaSearch.ts","../../src/components/CommandPalette/hooks/usePaletteGroups.ts","../../src/components/CommandPalette/helpers/recentItems.ts","../../src/components/CommandPalette/hooks/useRecentItems.ts","../../src/components/CommandPalette/Option/index.tsx","../../src/components/CommandPalette/Body/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: \"corner-down-left\",\n size: 24,\n node: [\n [\"path\", { d: \"M20 4v7a4 4 0 0 1-4 4H4\", key: \"6o5b7l\" }],\n [\"path\", { d: \"m9 10-5 5 5 5\", key: \"1kshq7\" }]\n ]\n};\n__iconData.node;\nconst CornerDownLeft = createLucideIcon(__iconData);\n\nexport { __iconData, CornerDownLeft as default };\n//# sourceMappingURL=corner-down-left.mjs.map\n","import { useCallback, useState, type KeyboardEvent } from 'react';\n\n/**\n * The highlighted row of a list driven from a text input: ↑/↓ move (wrapping), and the highlight returns\n * to the first row whenever `resetKey` changes (new text, new results).\n */\nexport const useActiveIndex = (count: number, resetKey: string) => {\n const [state, setState] = useState({ key: resetKey, index: 0 });\n const current = state.key === resetKey ? state.index : 0;\n const activeIndex = count === 0 ? -1 : Math.min(current, count - 1);\n const setActiveIndex = useCallback((index: number) => setState({ key: resetKey, index }), [resetKey]);\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (count === 0 || (event.key !== 'ArrowDown' && event.key !== 'ArrowUp')) {\n return;\n }\n event.preventDefault();\n const step = event.key === 'ArrowDown' ? 1 : -1;\n setActiveIndex((Math.max(activeIndex, 0) + step + count) % count);\n },\n [count, activeIndex, setActiveIndex],\n );\n return { activeIndex, setActiveIndex, onKeyDown };\n};\n","/** Lower case without accents, so \"cafe\" finds \"Café\". */\nconst normalize = (text: string) => text.normalize('NFD').replace(/\\p{M}/gu, '').toLowerCase();\n\nconst isWordStart = (text: string, index: number) =>\n index === 0 || !/[\\p{L}\\p{N}]/u.test(text[index - 1] ?? '');\n\n/** Score of one query token against one text: a subsequence match, rewarding word starts and runs. */\nconst scoreToken = (token: string, text: string): number | null => {\n const substring = text.indexOf(token);\n if (substring !== -1) {\n return 10 + token.length * 2 + (isWordStart(text, substring) ? 5 : 0) + (substring === 0 ? 3 : 0);\n }\n let score = 0;\n let from = 0;\n let previous = -2;\n for (const char of token) {\n const index = text.indexOf(char, from);\n if (index === -1) {\n return null;\n }\n score +=\n 1 +\n (index === previous + 1 ? 2 : 0) +\n (isWordStart(text, index) ? 3 : 0) -\n Math.min(index - from, 3) * 0.5;\n previous = index;\n from = index + 1;\n }\n return score;\n};\n\n/**\n * How well `query` finds an item with this label (and keywords): null when it doesn't, higher is better.\n * Every word of the query must match the label or a keyword; the label counts a little more.\n */\nexport const fuzzyScore = (query: string, label: string, keywords: readonly string[] = []): number | null => {\n const tokens = normalize(query).split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) {\n return 0;\n }\n const texts = [normalize(label), ...keywords.map(normalize)];\n let total = 0;\n for (const token of tokens) {\n const scores = texts.flatMap((text, index) => {\n const score = scoreToken(token, text);\n return score === null ? [] : [index === 0 ? score * 1.2 : score];\n });\n if (scores.length === 0) {\n return null;\n }\n total += Math.max(...scores);\n }\n return total;\n};\n\n/** The items `query` finds, best first (stable for equal scores); all of them for an empty query. */\nexport const fuzzyFilter = <T extends { label: string; keywords?: readonly string[] }>(\n query: string,\n items: readonly T[],\n): T[] =>\n items\n .map((item, index) => ({ item, index, score: fuzzyScore(query, item.label, item.keywords) }))\n .filter((entry): entry is { item: T; index: number; score: number } => entry.score !== null)\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map(({ item }) => item);\n","import type { AdminEntryPage } from '@shapio/client';\nimport { isModelDefinition, type ModelDefinition } from '@shapio/schema';\nimport { useQueries } from '@tanstack/react-query';\nimport { linkOptions } from '@tanstack/react-router';\nimport { FileText } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { entryListQueryOptions } from '@/api/content';\nimport { useDefinitions } from '@/api/schema';\nimport { isSearchable, labelOf, titleFieldOf } from '@/fields/helpers/titles';\nimport { canOnModel } from '@/helpers/modelPermissions';\nimport { ENTRY_RESULTS_PER_MODEL, MIN_SEARCH_LENGTH } from '../constants';\nimport type { PaletteItem } from '../types';\n\nconst entryLink = (model: ModelDefinition, entryId: string) =>\n model.kind === 'singleton'\n ? linkOptions({ to: '/content/$modelKey', params: { modelKey: model.apiKey } })\n : linkOptions({ to: '/content/$modelKey/$entryId', params: { modelKey: model.apiKey, entryId } });\n\n/**\n * Entries whose title matches `query`: the list API's `q` per readable place with a text title, the top few\n * of each, in place order. `query` should already be debounced.\n */\nexport const useEntrySearch = (query: string): { items: PaletteItem[]; isFetching: boolean } => {\n const { t } = useTranslation();\n const { data: me } = useMe();\n const { data: definitions } = useDefinitions('model');\n const q = query.trim();\n const enabled = q.length >= MIN_SEARCH_LENGTH;\n const models = useMemo(\n () =>\n (definitions ?? [])\n .map(({ definition }) => definition)\n .filter(isModelDefinition)\n .filter((model) => isSearchable(model) && canOnModel(me, model.id, 'read'))\n .sort((a, b) => a.label.localeCompare(b.label)),\n [definitions, me],\n );\n return useQueries({\n queries: models.map((model) => {\n const title = titleFieldOf(model);\n return {\n ...entryListQueryOptions(model.apiKey, {\n q,\n pageSize: ENTRY_RESULTS_PER_MODEL,\n ...(title ? { fields: [title.apiKey] } : {}),\n }),\n placeholderData: undefined,\n enabled,\n };\n }),\n combine: (results) => ({\n isFetching: enabled && results.some((result) => result.isFetching),\n items: enabled\n ? results.flatMap((result, index) => {\n const model = models[index];\n const page: AdminEntryPage | undefined = result.data;\n return model && page\n ? page.items.map((item): PaletteItem => ({\n id: `entry:${model.id}:${item.id}`,\n label: labelOf(model, item, t('palette.untitled')),\n hint: model.label,\n icon: FileText,\n link: entryLink(model, item.id),\n }))\n : [];\n })\n : [],\n }),\n });\n};\n","import { useQuery } from '@tanstack/react-query';\nimport { linkOptions } from '@tanstack/react-router';\nimport { Image } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useHasGlobalPermission } from '@/api/auth';\nimport { adminApi } from '@/api/client';\nimport { queryKeys } from '@/api/queryKeys';\nimport { MEDIA_RESULTS, MIN_SEARCH_LENGTH } from '../constants';\nimport type { PaletteItem } from '../types';\n\n/** Library files whose name or text matches `query` (already debounced), when the admin may read media. */\nexport const useMediaSearch = (query: string): { items: PaletteItem[]; isFetching: boolean } => {\n const canRead = useHasGlobalPermission('media.read');\n const search = query.trim();\n const enabled = canRead && search.length >= MIN_SEARCH_LENGTH;\n const result = useQuery({\n queryKey: [...queryKeys.media.assets({ search }), 'palette'],\n queryFn: () => adminApi.media.assets.list({ search, limit: MEDIA_RESULTS }),\n enabled,\n meta: { silent: true },\n });\n const items = useMemo(\n () =>\n enabled\n ? (result.data?.items ?? []).map((asset): PaletteItem => ({\n id: `media:${asset.id}`,\n label: asset.filename,\n ...(asset.alt ? { keywords: [asset.alt] } : {}),\n icon: Image,\n link: linkOptions({ to: '/media', search: { asset: asset.id } }),\n }))\n : [],\n [enabled, result.data],\n );\n return { items, isFetching: enabled && result.isFetching };\n};\n","import { Clock } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useDebouncedValue } from '@/hooks/useDebouncedValue';\nimport { SEARCH_DEBOUNCE_MS, STATIC_RESULTS } from '../constants';\nimport { fuzzyFilter } from '../helpers/fuzzy';\nimport type { RecentItem } from '../helpers/recentItems';\nimport { usePaletteStore } from '../store';\nimport type { PaletteGroup, PaletteItem, RegisteredGroup } from '../types';\nimport { useEntrySearch } from './useEntrySearch';\nimport { useMediaSearch } from './useMediaSearch';\n\nconst REGISTERED_ORDER: readonly RegisteredGroup[] = ['page', 'create', 'goto'];\n\nconst toPaletteItem = (item: RecentItem): PaletteItem => ({\n id: `recent:${item.id}`,\n label: item.label,\n ...(item.hint ? { hint: item.hint } : {}),\n icon: Clock,\n link: item.link,\n});\n\n/**\n * What the palette lists for `query`. Empty: actions on this page, recent items, create and go-to. Typing:\n * the registered items it finds (fuzzy, best first), then entries and media from the server.\n */\nexport const usePaletteGroups = (query: string, recent: readonly RecentItem[]) => {\n const registrations = usePaletteStore((state) => state.registrations);\n const debounced = useDebouncedValue(query, SEARCH_DEBOUNCE_MS);\n const { items: entryItems, isFetching: entriesFetching } = useEntrySearch(debounced);\n const { items: mediaItems, isFetching: mediaFetching } = useMediaSearch(debounced);\n const groups = useMemo((): PaletteGroup[] => {\n const registered = new Map<RegisteredGroup, PaletteItem[]>();\n for (const { group, items } of registrations.values()) {\n registered.set(group, [...(registered.get(group) ?? []), ...items]);\n }\n const searching = query.trim() !== '';\n const fromRegistered = REGISTERED_ORDER.map((key) => {\n const items = registered.get(key) ?? [];\n return { key, items: searching ? fuzzyFilter(query, items).slice(0, STATIC_RESULTS) : items };\n });\n const [page, ...rest] = fromRegistered;\n const recentGroup: PaletteGroup = { key: 'recent', items: searching ? [] : recent.map(toPaletteItem) };\n // Server results only for the query they were fetched for, so stale rows never flash under new text.\n const current = debounced.trim() === query.trim();\n return [\n ...(page ? [page] : []),\n recentGroup,\n ...rest,\n { key: 'entries' as const, items: searching && current ? entryItems : [] },\n { key: 'media' as const, items: searching && current ? mediaItems : [] },\n ].filter((group) => group.items.length > 0);\n }, [registrations, query, debounced, recent, entryItems, mediaItems]);\n return { groups, isSearching: entriesFetching || mediaFetching || debounced.trim() !== query.trim() };\n};\n","import type { LinkOptions } from '@tanstack/react-router';\nimport type { PaletteGroupKey } from '../types';\n\n/** A place the admin went through the palette; stored without icons or callbacks. */\nexport type RecentItem = {\n id: string;\n label: string;\n hint?: string;\n group: PaletteGroupKey;\n link: LinkOptions;\n};\n\nexport const RECENT_STORAGE_KEY = 'shapio.palette.recent';\nexport const RECENT_LIMIT = 6;\n\nconst isRecentItem = (value: unknown): value is RecentItem => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const item = value as Record<string, unknown>;\n return (\n typeof item.id === 'string' &&\n typeof item.label === 'string' &&\n typeof item.group === 'string' &&\n typeof item.link === 'object' &&\n item.link !== null\n );\n};\n\n/**\n * Recent items are a convenience: storage can be missing (private windows, blocked site data) or hold\n * anything, so every read and write is guarded and falls back to nothing.\n */\nexport const readRecentItems = (): RecentItem[] => {\n try {\n const parsed: unknown = JSON.parse(window.localStorage.getItem(RECENT_STORAGE_KEY) ?? '[]');\n return Array.isArray(parsed) ? parsed.filter(isRecentItem).slice(0, RECENT_LIMIT) : [];\n } catch {\n return [];\n }\n};\n\n/** Puts `item` first, without duplicates, and keeps the newest few. Returns the new list. */\nexport const rememberRecentItem = (item: RecentItem): RecentItem[] => {\n const next = [item, ...readRecentItems().filter((existing) => existing.id !== item.id)].slice(\n 0,\n RECENT_LIMIT,\n );\n try {\n window.localStorage.setItem(RECENT_STORAGE_KEY, JSON.stringify(next));\n } catch {\n // Not remembered this time; the palette works without it.\n }\n return next;\n};\n","import { useCallback, useState } from 'react';\nimport { readRecentItems, rememberRecentItem, type RecentItem } from '../helpers/recentItems';\n\n/** Recent palette destinations from this browser (localStorage, guarded), and a way to add one. */\nexport const useRecentItems = () => {\n const [recent, setRecent] = useState<RecentItem[]>(readRecentItems);\n const remember = useCallback((item: RecentItem) => setRecent(rememberRecentItem(item)), []);\n return { recent, remember };\n};\n","import { CornerDownLeft } from 'lucide-react';\nimport { cn } from '@/helpers/cn';\nimport type { PaletteItem } from '../types';\n\ntype OptionProps = {\n id: string;\n item: PaletteItem;\n active: boolean;\n onHover: () => void;\n onSelect: () => void;\n};\n\n/**\n * One result row (`role=\"option\"`). Focus stays in the search input; the active row is announced through\n * `aria-activedescendant`, highlighted with the selection colour and shows the Enter hint.\n */\nexport const Option = ({ id, item, active, onHover, onSelect }: OptionProps) => {\n const Icon = item.icon;\n return (\n <li\n id={id}\n role=\"option\"\n aria-selected={active}\n data-active={active}\n onPointerMove={onHover}\n // Keep focus in the input when a row is clicked.\n onPointerDown={(event) => event.preventDefault()}\n onClick={onSelect}\n className={cn(\n 'flex h-10 cursor-pointer items-center gap-3 rounded-lg px-2 text-sm select-none',\n active && 'bg-accent text-accent-foreground',\n )}\n >\n {Icon ? <Icon aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground\" /> : null}\n <span className=\"min-w-0 flex-1 truncate\">{item.label}</span>\n {item.hint ? (\n <span className=\"shrink-0 truncate text-meta text-muted-foreground\">{item.hint}</span>\n ) : null}\n <CornerDownLeft\n aria-hidden=\"true\"\n className={cn('size-3.5 shrink-0 text-muted-foreground', active ? 'opacity-100' : 'opacity-0')}\n />\n </li>\n );\n};\n","import { useNavigate } from '@tanstack/react-router';\nimport { Loader2, Search } from 'lucide-react';\nimport { useCallback, useEffect, useId, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MIN_SEARCH_LENGTH } from '../constants';\nimport { useActiveIndex } from '../hooks/useActiveIndex';\nimport { usePaletteGroups } from '../hooks/usePaletteGroups';\nimport { useRecentItems } from '../hooks/useRecentItems';\nimport { Option } from '../Option';\nimport type { PaletteGroupKey, PaletteItem } from '../types';\n\nconst GROUP_LABEL_KEYS = {\n page: 'palette.groups.page',\n recent: 'palette.groups.recent',\n create: 'palette.groups.create',\n goto: 'palette.groups.goto',\n entries: 'palette.groups.entries',\n media: 'palette.groups.media',\n} as const satisfies Record<PaletteGroupKey, string>;\n\ntype BodyProps = { onClose: () => void };\n\n/**\n * The palette's search field and results: a combobox whose listbox is grouped. Loaded on first open, so the\n * schema helpers it searches with stay out of the first page load.\n */\nexport const Body = ({ onClose }: BodyProps) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const listboxId = useId();\n const [query, setQuery] = useState('');\n const { recent, remember } = useRecentItems();\n const { groups, isSearching } = usePaletteGroups(query, recent);\n const flat = useMemo(\n () => groups.flatMap((group) => group.items.map((item) => ({ group: group.key, item }))),\n [groups],\n );\n /** Where each group starts in `flat`, so every option knows its position. */\n const offsets = useMemo(\n () =>\n groups.map((_, index) => groups.slice(0, index).reduce((sum, group) => sum + group.items.length, 0)),\n [groups],\n );\n const resetKey = `${query}\\u0000${flat.map(({ item }) => item.id).join('|')}`;\n const { activeIndex, setActiveIndex, onKeyDown } = useActiveIndex(flat.length, resetKey);\n const optionId = useCallback((position: number) => `${listboxId}-option-${position}`, [listboxId]);\n\n useEffect(() => {\n if (activeIndex >= 0) {\n document.getElementById(optionId(activeIndex))?.scrollIntoView({ block: 'nearest' });\n }\n }, [activeIndex, optionId]);\n\n const select = (group: PaletteGroupKey, item: PaletteItem) => {\n onClose();\n if (item.link) {\n if (group !== 'page' && group !== 'create') {\n const id = item.id.replace(/^recent:/, '');\n remember({\n id,\n label: item.label,\n ...(item.hint ? { hint: item.hint } : {}),\n group,\n link: item.link,\n });\n }\n void navigate(item.link);\n }\n item.run?.();\n };\n\n const searching = query.trim().length >= MIN_SEARCH_LENGTH && isSearching;\n const status =\n query.trim() === ''\n ? ''\n : searching\n ? t('palette.searching')\n : flat.length === 0\n ? t('palette.noResults', { query: query.trim() })\n : t('palette.resultCount', { count: flat.length });\n\n return (\n <>\n <div className=\"flex items-center gap-3 border-b px-4\">\n <Search aria-hidden=\"true\" className=\"size-4 shrink-0 text-muted-foreground\" />\n <input\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? optionId(activeIndex) : undefined}\n aria-label={t('palette.inputLabel')}\n placeholder={t('palette.placeholder')}\n autoComplete=\"off\"\n // The dialog focuses its content before this lazily loaded field exists.\n autoFocus\n spellCheck={false}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n onKeyDown(event);\n const active = flat[activeIndex];\n if (event.key === 'Enter' && active && !event.nativeEvent.isComposing) {\n event.preventDefault();\n select(active.group, active.item);\n }\n }}\n className=\"h-12 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n {searching ? (\n <Loader2 aria-hidden=\"true\" className=\"size-4 shrink-0 animate-spin text-muted-foreground\" />\n ) : null}\n </div>\n <ul\n id={listboxId}\n role=\"listbox\"\n aria-label={t('palette.results')}\n className=\"max-h-[min(60dvh,26rem)] overflow-y-auto overscroll-contain p-2\"\n >\n {groups.map((group, groupIndex) => {\n const labelId = `${listboxId}-${group.key}`;\n return (\n <li key={group.key} role=\"presentation\">\n <ul role=\"group\" aria-labelledby={labelId}>\n <li\n id={labelId}\n role=\"presentation\"\n className=\"px-2 pt-2 pb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase\"\n >\n {t(GROUP_LABEL_KEYS[group.key])}\n </li>\n {group.items.map((item, itemIndex) => {\n const position = (offsets[groupIndex] ?? 0) + itemIndex;\n return (\n <Option\n key={item.id}\n id={optionId(position)}\n item={item}\n active={position === activeIndex}\n onHover={() => setActiveIndex(position)}\n onSelect={() => select(group.key, item)}\n />\n );\n })}\n </ul>\n </li>\n );\n })}\n {flat.length === 0 && query.trim() !== '' && !searching ? (\n <li role=\"presentation\" className=\"px-2 py-8 text-center text-sm text-muted-foreground\">\n {t('palette.noResults', { query: query.trim() })}\n </li>\n ) : null}\n </ul>\n <div role=\"status\" className=\"sr-only\">\n {status}\n </div>\n <div className=\"hidden items-center gap-4 border-t bg-muted/50 px-4 py-2 text-xs text-muted-foreground sm:flex\">\n <span>{t('palette.hintMove')}</span>\n <span>{t('palette.hintOpen')}</span>\n <span>{t('palette.hintClose')}</span>\n </div>\n </>\n );\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{bt as r,i,j as a,p as o,r as s,t as c}from"./cn-BQ3voEft.js";import{C as l,T as u,h as d,u as f}from"./auth-pcS9CCXu.js";import{_ as p,a as m,c as h,d as g,f as _,i as v,j as y,l as ee,m as b,n as x,o as S,p as te,s as ne,t as C,u as re,v as ie}from"./badge-DD0mE96i.js";import{t as w}from"./UnsavedChangesGuard-DgOASh0p.js";import{G as T,H as ae,R as E,c as D,d as oe,f as se,l as O,o as k,p as A,s as j,t as M,u as ce}from"./InfoHint-GJLRVumb.js";import{i as N,k as le,n as P}from"./skeleton-C3QLIh7W.js";import{a as ue,c as F,i as de,n as I,t as fe,u as pe}from"./constants-SrImR6C3.js";import{t as me}from"./useSchemaScopeAccess-DUBeS9kU.js";import{a as he,i as ge,n as _e,o as ve,r as ye,s as be,t as xe}from"./select-tHVWX85X.js";import{a as L,c as Se,i as Ce,n as we,o as R,r as Te,s as Ee,t as De}from"./ConfirmDialog-B9nWhIIz.js";import{a as Oe,c as ke,f as Ae,i as je,l as Me,n as Ne,o as Pe,r as Fe,s as Ie,t as Le}from"./StepList-BY5MuJPJ.js";import{t as Re}from"./ellipsis-NK0pWgqU.js";import{n as ze,t as Be}from"./stableId-C9Yq5iUw.js";import{t as Ve}from"./plus-BN_iSsnp.js";import{l as He,m as Ue,v as We}from"./changeSets-BjUEfYbj.js";import{t as Ge}from"./undo-2-D4Fz4JMZ.js";import{a as Ke,p as qe,r as Je,t as Ye}from"./dropdown-menu-gmP2Rp3n.js";import{t as Xe}from"./radio-group-DHIxK-IU.js";import{t as Ze}from"./switch-BVy02Vc8.js";import{n as Qe,t as $e}from"./settle-LRKtTN_e.js";import{t as z}from"./HintedLabel-CvC46uy_.js";import{t as et}from"./SharedGlyph-Cqkx30tn.js";import{c as tt,f as nt,h as rt,i as it,l as at,o as ot,r as st,t as ct,u as lt}from"./schema-B4smPFcR.js";import{t as ut}from"./QueryView-D6aZQJRN.js";import{B as dt,D as ft,E as pt,K as mt,O as ht,T as gt,U as _t,W as vt,_ as yt,b as bt,c as xt,f as B,i as V,m as St,o as Ct,s as wt,u as Tt,v as Et,w as Dt,y as Ot}from"./src-XaU0N8C-.js";import{t as kt}from"./useSaveShortcut-rKtp1qK7.js";import{t as At}from"./textarea-B8Vl5gJ1.js";import{t as H}from"./Panel-iIKjEURi.js";import{a as jt,i as Mt,n as Nt,r as Pt,t as Ft}from"./followPlural-CN6cQfNk.js";import{t as It}from"./RadioTile-BpB79rIK.js";var Lt={name:`eye-off`,size:24,node:[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]};Lt.node;var Rt=i(Lt),zt={name:`mouse-pointer-click`,size:24,node:[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]};zt.node;var Bt=i(zt),Vt={name:`shapes`,size:24,node:[[`path`,{d:`M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z`,key:`1bo67w`}],[`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`,key:`1bkyp8`}],[`circle`,{cx:`17.5`,cy:`17.5`,r:`3.5`,key:`w3z12y`}]]};Vt.node;var Ht=i(Vt),U=e(t(),1),Ut=(e,t)=>`${e}:${t}`,W=o()(e=>({key:null,category:`model`,base:null,baseVersion:0,draft:null,selection:{type:`definition`},load:(t,n,r)=>e(e=>{let i=Ut(t,n.id),{selection:a}=e;return{key:i,category:t,base:n,baseVersion:r,draft:n,selection:e.key===i&&(a.type===`definition`||n.fields.some(e=>e.id===a.fieldId))?a:{type:`definition`}}}),reset:()=>e({key:null,base:null,baseVersion:0,draft:null,selection:{type:`definition`}}),rebase:(t,n,r)=>e({base:t,baseVersion:n,draft:r}),update:t=>e(e=>e.draft?{draft:t(e.draft)}:{}),updateField:(t,n)=>e(e=>e.draft?{draft:{...e.draft,fields:e.draft.fields.map(e=>e.id===t?n(e):e)}}:{}),select:t=>e({selection:t})})),Wt=Ut,Gt=e=>{let{canShare:t}=me();return e===`network`&&!t},G=e(n(),1),Kt=()=>{let{t:e}=a();return(0,G.jsxs)(L,{children:[(0,G.jsx)(pe,{"aria-hidden":`true`}),(0,G.jsx)(R,{children:e(`models.scope.readOnly`)})]})},qt=({canDiscard:e,canReview:t,reviewing:n,onReview:r,onDiscard:i})=>{let{t:o}=a();return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Te,{tone:`danger`,title:o(`models.builder.discardTitle`),description:o(`models.builder.discardDescription`),confirmLabel:o(`models.builder.discard`),onConfirm:i,trigger:(0,G.jsxs)(N,{type:`button`,variant:`ghost`,disabled:!e,children:[(0,G.jsx)(Ge,{"aria-hidden":`true`}),o(`models.builder.discard`)]})}),(0,G.jsx)(p,{pending:n,pendingLabel:o(`models.builder.planning`),disabled:!t,onClick:r,children:o(`models.builder.review`)})]})},Jt=e=>(0,G.jsx)(`div`,{className:`sticky bottom-0 z-20 -mx-4 flex justify-end gap-2 border-t bg-background/95 px-4 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:-mx-8 sm:px-8 md:bottom-(--statusbar-h) xl:hidden`,children:(0,G.jsx)(qt,{...e})}),Yt=e=>typeof e==`object`&&e?e:{},Xt=({changeId:e,onFinished:t,onDismiss:n})=>{let{t:r}=a(),i=lt(e),o=i.data?.status,c=(0,U.useRef)(!1);if((0,U.useEffect)(()=>{o&&rt.has(o)&&!c.current&&(c.current=!0,t(o))},[o,t]),o===`activated`)return null;if(o===`failed`||o===`cancelled`){let e=Yt(i.data?.error);return(0,G.jsxs)(L,{variant:`destructive`,children:[(0,G.jsx)(Se,{"aria-hidden":`true`}),(0,G.jsx)(Ee,{children:r(`models.progress.failedTitle`)}),(0,G.jsxs)(R,{children:[(0,G.jsx)(`p`,{children:r(`models.progress.failedDescription`)}),typeof e.invalidCount==`number`?(0,G.jsx)(`p`,{children:r(`models.progress.invalidCount`,{count:e.invalidCount})}):null,typeof e.reason==`string`?(0,G.jsx)(`p`,{children:e.reason}):null,(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,className:`mt-2`,onClick:n,children:r(`common.close`)})]})]})}return(0,G.jsxs)(L,{variant:`info`,role:`status`,children:[(0,G.jsx)(s,{className:`animate-spin`,"aria-hidden":`true`}),(0,G.jsx)(Ee,{children:r(`models.progress.runningTitle`)}),(0,G.jsx)(R,{children:r(`models.progress.runningDescription`)})]})},Zt=(e,t)=>V(e??null)===V(t??null),Qt=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$t=(e,t,n)=>{if(Zt(t,e))return n;if(Zt(n,e))return t;if(Qt(e)&&Qt(t)&&Qt(n)){let r=new Set([...Object.keys(e),...Object.keys(t),...Object.keys(n)]),i={};for(let a of r){let r=$t(e[a],t[a],n[a]);r!==void 0&&(i[a]=r)}return i}return t},en=(e,t)=>e.filter(e=>t.has(e.id)).map(e=>e.id),tn=(e,t,n)=>{let r=new Map(e.map(e=>[e.id,e])),i=new Map(t.map(e=>[e.id,e])),a=new Map(n.map(e=>[e.id,e])),[o,s]=Zt(en(t,r),en(e,i))?[n,t]:[t,n];return[...new Set([...o,...s].map(e=>e.id))].flatMap(e=>{let t=r.get(e),n=i.get(e),o=a.get(e);return t&&!n?[]:t&&!o?n&&!Zt(n,t)?[n]:[]:t?[$t(t,n,o)]:[n??o]})},nn=(e,t,n)=>{let{fields:r,...i}=e,{fields:a,...o}=t,{fields:s,...c}=n;return{...$t(i,o,c),fields:tn(r,a,s)}},rn=(e,t)=>{let n=r(),i=W(e=>e.load),a=W(e=>e.rebase);return(0,U.useCallback)(async r=>{let o=await n.fetchQuery({...ct(e,t),staleTime:0}),{base:s,draft:c}=W.getState();return r===`rebase`&&s&&c?a(o.definition,o.version,nn(s,c,o.definition)):i(e,o.definition,o.version),o},[n,e,t,i,a])},an=(e,t,n)=>{let{t:r}=a(),i=it(),o=rn(e,t);return async a=>{let s=W.getState().baseVersion;try{await i.mutateAsync({category:e,id:t,input:{scope:a,version:s}})}catch(e){if(d(e,`SCHEMA_VERSION_CONFLICT`)){n();return}throw e}await o(`replace`),T.success(r(a===`network`?`models.scope.shared`:`models.scope.kept`))}},K=({title:e,titleId:t,className:n,children:r})=>(0,G.jsxs)(`section`,{className:c(`space-y-4 border-t pt-5 first:border-t-0 first:pt-0`,n),children:[(0,G.jsx)(`h3`,{id:t,className:`text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:e}),(0,G.jsx)(ce,{className:`gap-5`,children:r})]}),on=({category:e,id:t,label:n,scope:r,blocked:i,locked:o,onConflict:s})=>{let{t:c}=a(),l=f().data?.site,{canShare:u}=me(),d=an(e,t,s),p=(0,U.useId)(),m=r===`network`,h=m?`site`:`network`,g=l?.name??``;return(0,G.jsxs)(K,{title:c(`contentTypes.availableOn`),children:[(0,G.jsxs)(`p`,{className:`flex items-center gap-1.5 text-sm`,"data-scope":r,children:[m?(0,G.jsx)(et,{}):null,m?c(`contentTypes.sharedWithAllSites`):c(`models.scope.onlyOn`,{site:g})]}),u?(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(Te,{tone:`default`,title:m?c(`models.scope.keepTitle`,{label:n,site:g}):c(`models.scope.shareTitle`,{label:n}),description:c(m?`models.scope.keepDescription`:`models.scope.shareDescription`),confirmLabel:c(m?`models.scope.keep`:`models.scope.share`),pendingLabel:c(`common.saving`),onConfirm:()=>d(h),trigger:(0,G.jsx)(N,{type:`button`,variant:`outline`,size:`sm`,disabled:i||o,"aria-describedby":i?p:void 0,children:c(m?`models.scope.keep`:`models.scope.share`)})}),i?(0,G.jsx)(M,{about:c(m?`models.scope.keep`:`models.scope.share`),id:p,children:c(`models.scope.blocked`)}):null]}):null]})},sn={enum:{values:[]},relation:{target:``,cardinality:`one`},component:{component:``},dynamiczone:{components:[]}},cn=(e,t)=>{let n={id:Be(),apiKey:t.apiKey,label:t.label,type:t.type,settings:sn[t.type]??{}};return St({...e,fields:[n]}).fields[0]},q=(e,t,n)=>{let r={...e};return n===void 0?delete r[t]:r[t]=n,r},ln=(e,t,n)=>({...e,settings:q(e.settings,t,n)}),un=(e,t)=>V(St(e))!==V(St(t)),dn=(e,t,n)=>{if(t===n||t<0||n<0||t>=e.length||n>=e.length)return[...e];let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r},fn=(e,t)=>{let n=e.fields.filter(e=>e.id!==t).map(e=>e.type===`slug`&&e.settings.sourceFieldId===t?ln(e,`sourceFieldId`,void 0):e),r={...e.display};return r.titleFieldId===t&&delete r.titleFieldId,`listFieldIds`in e.display&&e.display.listFieldIds&&(r.listFieldIds=e.display.listFieldIds.filter(e=>e!==t)),`defaultSort`in e.display&&e.display.defaultSort?.fieldId===t&&delete r.defaultSort,e.display.groups&&(r.groups=e.display.groups.map(e=>({...e,fieldIds:e.fieldIds.filter(e=>e!==t)}))),pn({...e,fields:n,display:r})},pn=e=>{if(e.kind===`component`)return e;let{canvasFieldIds:t,coverFieldId:n,stripFieldIds:r}=e.display;if(t===void 0&&n===void 0&&r===void 0)return e;let i=new Map(e.fields.map(e=>[e.id,e])),a=(e,t)=>{let n=i.get(e);return n!==void 0&&t(n)},o=t?.filter(e=>a(e,Ot)),s=n!==void 0&&a(n,bt)&&!o?.includes(n)?n:void 0,c=r?.filter(e=>i.has(e)&&e!==s&&!(o??[]).includes(e)),l=q(e.display,`canvasFieldIds`,o);return l=q(l,`coverFieldId`,s),l=q(l,`stripFieldIds`,c),{...e,display:l}},mn=e=>{if(pt(e.editor.id))return e;let t=ft(e);return t.some(t=>t.id===e.editor.id)?e:{...e,editor:{id:t[0]?.id??Dt[e.type],options:{}}}},hn=(e,t,n)=>{let r=wt(e,{previous:t});if(!r.ok)return r.issues;let i=[...n.filter(t=>t.id!==e.id),r.definition];return Ct(i).filter(t=>t.definitionId===void 0||t.definitionId===e.id)},J=(e,t)=>e.filter(e=>e.path===t||e.path.startsWith(`${t}/`)),gn=e=>`/fields/${e}`,Y=({id:e,issues:t})=>{if(t.length===0)return null;let n=[...new Set(t.map(Pt))];return(0,G.jsx)(O,{id:e,errors:n.map(e=>({message:e}))})},X=e=>e.fields.filter(t=>{let n={...e,fields:[t],display:{titleFieldId:t.id}};return!xt(n).some(e=>e.path===`/display/titleFieldId`)}),_n=(e,t)=>{let n={...e,fields:[...e.fields,t]};return e.display.titleFieldId===void 0&&X(e).length===0&&X(n).some(e=>e.id===t.id)?{...n,display:{...n.display,titleFieldId:t.id}}:n},vn=e=>{let t=e.fields.filter(e=>!e.deprecated),n=Et(e),r=n.canvas.map(e=>e.id),i=t.filter(e=>Ot(e)&&!r.includes(e.id));return{coverOptions:t.filter(bt),canvasOptions:[...n.canvas,...i],canvas:r,stripOptions:n.properties}},yn=new Set(Tt.map(yt)),bn=(e,t)=>{let n=new Set(e.fields.map(e=>e.label)),r=new Set(e.fields.map(e=>yt(e.apiKey)));for(let e=1;;e+=1){let i=e===1?t:`${t} ${e}`,a=Nt(i),o=yt(a);if(!n.has(i)&&!r.has(o)&&!yn.has(o))return{label:i,apiKey:a}}},xn=(e,t,n)=>{let r=e.fields.find(e=>e.id===t);if(!r||r.type===n)return e;let i=cn(e,{type:n,label:r.label,apiKey:r.apiKey}),{defaultValue:a,...o}=r,s={...o,type:n,settings:i.settings,editor:i.editor},c=e.fields.map(e=>e.id===t?s:e),l={...e,fields:e.fields.filter(e=>e.id!==t)},u={...e.display},d={...e,fields:c,display:u},f=X(d).some(e=>e.id===t);return u.titleFieldId===t&&!f?delete u.titleFieldId:u.titleFieldId===void 0&&f&&X(l).length===0&&(u.titleFieldId=t),d},Sn=(e,t,n,r)=>{let i=xn(e,t,n);if(r?.type!==n)return i;let{settings:a,editor:o}=r,s=r.defaultValue;return{...i,fields:i.fields.map(e=>e.id===t?{...e,settings:a,editor:o,...s===void 0?{}:{defaultValue:s}}:e)}},Cn=`add-field-button`,wn=e=>`field-${e}-label`,Tn=e=>requestAnimationFrame(e),En=()=>{let{t:e}=a(),t=W(e=>e.update),n=W(e=>e.select),[r,i]=(0,U.useState)(null);return{add:()=>{let{draft:r}=W.getState();if(!r)return;let a=cn(r,{type:`string`,...bn(r,e(`models.builder.newField`))});t(e=>_n(e,a)),n({type:`field`,fieldId:a.id}),i(a),Tn(()=>{let e=document.getElementById(wn(a.id));e instanceof HTMLInputElement&&(e.scrollIntoView({block:`center`}),e.focus({preventScroll:!0}),e.select())})},isUntouched:e=>r!==null&&e.id===r.id&&V(e)===V(r),discard:e=>{t(t=>fn(t,e)),n({type:`definition`}),i(null),Tn(()=>document.getElementById(Cn)?.focus())}}},Dn=e=>`field-handle-${e}`,On=({field:e,index:t,total:n,selected:r,hasIssues:i,showLocalized:o,dropTarget:s,disabled:l,onSelect:u,onMove:d,onDragStart:f,onDragOver:p,onDrop:m,onDragEnd:h})=>{let{t:g}=a(),_=I[e.type];return(0,G.jsxs)(`li`,{draggable:!l,onDragStart:f,onDragOver:p,onDrop:m,onDragEnd:h,"data-selected":r||void 0,className:c(`group/row flex h-11 items-center gap-0.5 rounded-lg border border-transparent pr-1 transition-colors hover:bg-muted/50 data-[selected]:bg-accent`,s&&`border-dashed border-primary`),children:[(0,G.jsx)(`button`,{type:`button`,id:Dn(e.id),"aria-label":g(`models.builder.reorder`,{label:e.label}),"aria-describedby":`field-reorder-help`,onKeyDown:e=>{e.key===`ArrowUp`&&t>0?(e.preventDefault(),d(t-1)):e.key===`ArrowDown`&&t<n-1&&(e.preventDefault(),d(t+1))},disabled:l,className:`flex h-9 w-6 shrink-0 cursor-grab items-center justify-center rounded-md text-muted-foreground outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed`,children:(0,G.jsx)(ze,{className:`size-4`,"aria-hidden":`true`})}),(0,G.jsxs)(`button`,{type:`button`,onClick:u,"aria-current":r||void 0,className:`flex h-9 min-w-0 flex-1 items-center gap-2.5 rounded-md px-1.5 text-left outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:[(0,G.jsx)(_,{className:c(`size-4 shrink-0 text-muted-foreground`,r&&`text-accent-foreground`),"aria-hidden":`true`}),(0,G.jsxs)(`span`,{className:`min-w-0 flex-1 leading-tight`,children:[(0,G.jsx)(`span`,{className:`block truncate text-sm font-medium`,children:e.label}),(0,G.jsx)(`span`,{className:`block truncate font-mono text-2xs text-muted-foreground`,children:e.apiKey})]}),(0,G.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[e.required?(0,G.jsx)(C,{variant:`outline`,children:g(`models.builder.requiredBadge`)}):null,o&&e.localized?(0,G.jsx)(C,{variant:`outline`,children:g(`models.builder.localizedBadge`)}):null,e.public?null:(0,G.jsxs)(`span`,{title:g(`models.builder.hiddenBadge`),children:[(0,G.jsx)(Rt,{className:`size-4 text-muted-foreground`,"aria-hidden":`true`}),(0,G.jsx)(`span`,{className:`sr-only`,children:g(`models.builder.hiddenBadge`)})]}),i?(0,G.jsxs)(`span`,{title:g(`models.builder.hasProblems`),children:[(0,G.jsx)(Se,{className:`size-4 text-destructive`,"aria-hidden":`true`}),(0,G.jsx)(`span`,{className:`sr-only`,children:g(`models.builder.hasProblems`)})]}):null]})]}),(0,G.jsxs)(`span`,{className:`hidden shrink-0 items-center group-focus-within/row:flex group-hover/row:flex`,children:[(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-xs`,tabIndex:-1,disabled:l||t===0,"aria-label":g(`models.builder.moveUp`,{label:e.label}),onClick:()=>d(t-1),children:(0,G.jsx)(ve,{"aria-hidden":`true`})}),(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-xs`,tabIndex:-1,disabled:l||t===n-1,"aria-label":g(`models.builder.moveDown`,{label:e.label}),onClick:()=>d(t+1),children:(0,G.jsx)(be,{"aria-hidden":`true`})})]})]})},kn=[],An=({issues:e,disabled:t,onAdd:n})=>{let{t:r}=a(),i=W(e=>e.draft?.fields??kn),o=W(e=>e.draft?.kind!==`component`&&e.draft?.localized===!0),s=W(e=>e.selection),c=W(e=>e.select),l=W(e=>e.update),u=(0,U.useRef)(null),[d,f]=(0,U.useState)(null),[p,m]=(0,U.useState)(``),h=(e,t,n)=>{let a=i[e];a&&e!==t&&(l(n=>({...n,fields:dn(n.fields,e,t)})),m(r(`models.builder.moved`,{label:a.label,position:t+1,total:i.length})),n&&requestAnimationFrame(()=>document.getElementById(Dn(a.id))?.focus()))},g=J(e,`/fields`).filter(e=>!/^\/fields\/\d+/.test(e.path)),_=r(`models.builder.fields`,{count:i.length});return(0,G.jsxs)(H,{title:r(`models.builder.fieldsTitle`),flush:!0,actions:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(C,{variant:`secondary`,"aria-hidden":`true`,children:i.length}),(0,G.jsxs)(N,{id:Cn,type:`button`,size:`sm`,onClick:n,disabled:t,children:[(0,G.jsx)(Ve,{"aria-hidden":`true`}),r(`models.builder.addField`)]})]}),bodyClassName:`p-2`,children:[g.length>0?(0,G.jsx)(`div`,{className:`px-3 py-2`,children:(0,G.jsx)(Y,{issues:g})}):null,i.length===0?(0,G.jsx)(`p`,{className:`px-3 py-6 text-center text-meta text-muted-foreground`,children:r(`models.builder.noFields`)}):(0,G.jsx)(`ol`,{className:`space-y-0.5`,"aria-label":_,children:i.map((n,r)=>(0,G.jsx)(On,{field:n,index:r,total:i.length,selected:s.type===`field`&&s.fieldId===n.id,hasIssues:J(e,gn(r)).length>0,showLocalized:o,dropTarget:d===r,disabled:t,onSelect:()=>c({type:`field`,fieldId:n.id}),onMove:e=>h(r,e,!0),onDragStart:e=>{u.current=r,e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,n.id)},onDragOver:e=>{u.current!==null&&(e.preventDefault(),f(r))},onDrop:e=>{e.preventDefault(),u.current!==null&&h(u.current,r,!1),u.current=null,f(null)},onDragEnd:()=>{u.current=null,f(null)}},n.id))}),(0,G.jsx)(`p`,{id:`field-reorder-help`,className:`sr-only`,children:r(`models.builder.reorderHelp`)}),(0,G.jsx)(`p`,{"aria-live":`polite`,className:`sr-only`,children:p})]})},jn=new Set([`string`,`text`,`slug`,`email`,`url`,`uid`,`date`,`datetime`,`time`,`decimal`,`biginteger`]),Mn=e=>jn.has(e.type)||e.type===`number`||e.type===`integer`||e.type===`boolean`||e.type===`enum`&&!e.settings.multiple,Nn=(e,{hint:t,description:n,issues:r=[]})=>{let i=t?`${e}-hint`:void 0,a=n?`${e}-description`:void 0,o=r.length>0?`${e}-error`:void 0;return{hintId:i,descriptionId:a,errorId:o,describedBy:Qe(i,a,o)}},Z=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,value:o,onChange:s,emptyAsUndefined:l=!1,multiline:u=!1,monospace:d=!1,maxLength:f})=>{let p=Nn(e,{hint:n,description:r,issues:i}),m={id:e,value:o??``,disabled:a,maxLength:f,"aria-invalid":i.length>0||void 0,"aria-describedby":p.describedBy,onChange:e=>s(l&&e.target.value===``?void 0:e.target.value)};return(0,G.jsxs)(k,{"data-invalid":i.length>0||void 0,children:[(0,G.jsx)(z,{htmlFor:e,label:t,hint:n,hintId:p.hintId}),u?(0,G.jsx)(At,{...m,rows:2}):(0,G.jsx)(P,{...m,autoComplete:`off`,spellCheck:!d,className:c(d&&`font-mono`)}),r?(0,G.jsx)(D,{id:p.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:p.errorId,issues:i})]})},Pn=fe.flatMap(e=>e.types),Fn=e=>_t.includes(e),In=({labelledBy:e,value:t,unavailable:n,unavailableReason:r,notes:i,limitedNote:o,disabled:s,onChange:c})=>{let{t:l}=a(),u=(0,U.useId)();return(0,G.jsxs)(`div`,{className:`@container space-y-3`,children:[(0,G.jsx)(Xe,{value:t,disabled:s,onValueChange:e=>Fn(e)&&c(e),"aria-labelledby":e,"aria-describedby":u,className:`grid-cols-4 gap-2 @xl:grid-cols-6`,children:Pn.map(e=>(0,G.jsx)(It,{value:e,variant:`tile`,icon:I[e],label:l(`models.dataTypes.${e}.name`),disabled:n.has(e),description:n.has(e)?r(e):l(`models.dataTypes.${e}.description`)},e))}),(0,G.jsxs)(`p`,{id:u,className:`text-meta text-muted-foreground`,children:[(0,G.jsx)(`span`,{className:`font-semibold text-foreground`,children:l(`models.dataTypes.${t}.name`)}),` · `,l(`models.dataTypes.${t}.description`)]}),i.length>0?(0,G.jsx)(`p`,{role:`status`,className:`text-meta font-medium text-warning`,children:i.join(` `)}):null,o?(0,G.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:o}):null]})},Ln=(e,t)=>{if(e.trim()===``)return;let n=Number(e);if(Number.isFinite(n))return t?Math.trunc(n):n},Rn=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,value:o,onChange:s,integer:c=!1,min:l,max:u})=>{let[d,f]=(0,U.useState)(o===void 0?``:String(o)),[p,m]=(0,U.useState)(o);o!==p&&(m(o),Ln(d,c)!==o&&f(o===void 0?``:String(o)));let h=Nn(e,{hint:n,description:r,issues:i});return(0,G.jsxs)(k,{"data-invalid":i.length>0||void 0,children:[(0,G.jsx)(z,{htmlFor:e,label:t,hint:n,hintId:h.hintId}),(0,G.jsx)(P,{id:e,type:`number`,inputMode:c?`numeric`:`decimal`,step:c?1:`any`,min:l,max:u,value:d,disabled:a,"aria-invalid":i.length>0||void 0,"aria-describedby":h.describedBy,onChange:e=>{let t=Ln(e.target.value,c);f(e.target.value),m(t),s(t)}}),r?(0,G.jsx)(D,{id:h.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:h.errorId,issues:i})]})},zn=`__unset__`,Q=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:o,value:s,options:c,onChange:l,unsetLabel:u,placeholder:d})=>{let{t:f}=a(),p=Nn(e,{hint:n,description:r,issues:i}),m=s!==void 0&&c.some(e=>e.value===s);return(0,G.jsxs)(k,{"data-invalid":i.length>0||void 0,children:[(0,G.jsx)(z,{htmlFor:e,label:t,hint:n,hintId:p.hintId}),(0,G.jsxs)(xe,{value:m?s:u?zn:``,onValueChange:e=>l(e===zn?void 0:e),disabled:o,children:[(0,G.jsx)(ge,{id:e,className:`w-full`,"aria-invalid":i.length>0||void 0,"aria-describedby":p.describedBy,children:(0,G.jsx)(he,{placeholder:d??f(`models.choose`)})}),(0,G.jsxs)(_e,{children:[u?(0,G.jsx)(ye,{value:zn,children:u}):null,c.map(e=>(0,G.jsx)(ye,{value:e.value,children:e.label},e.value))]})]}),r?(0,G.jsx)(D,{id:p.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:p.errorId,issues:i})]})},Bn=({field:e,issues:t,disabled:n,onChange:r})=>{let{t:i}=a(),o={id:`field-${e.id}-default`,label:i(`models.builder.defaultValue`),hint:i(`models.builder.defaultValueHint`),issues:t,disabled:n},s=e.defaultValue;return e.type===`number`||e.type===`integer`?(0,G.jsx)(Rn,{...o,integer:e.type===`integer`,value:typeof s==`number`?s:void 0,onChange:r}):e.type===`boolean`?(0,G.jsx)(Q,{...o,value:typeof s==`boolean`?String(s):void 0,options:[{value:`true`,label:i(`models.builder.booleanTrue`)},{value:`false`,label:i(`models.builder.booleanFalse`)}],unsetLabel:i(`models.notSet`),onChange:e=>r(e===void 0?void 0:e===`true`)}):e.type===`enum`?(0,G.jsx)(Q,{...o,value:typeof s==`string`?s:void 0,options:e.settings.values.filter(e=>e.value!==``).map(e=>({value:e.value,label:e.label||e.value})),unsetLabel:i(`models.notSet`),onChange:r}):(0,G.jsx)(Z,{...o,value:typeof s==`string`?s:void 0,onChange:r,emptyAsUndefined:!0})},Vn=e=>e?.enum?.every(e=>typeof e==`string`)?e.enum:void 0,Hn=e=>{let t=Vn(e);if(t)return{kind:`choice`,options:t};switch(e.type){case`boolean`:return{kind:`boolean`};case`integer`:return{kind:`integer`,...e.minimum===void 0?{}:{minimum:e.minimum},...e.maximum===void 0?{}:{maximum:e.maximum}};case`number`:return{kind:`number`,...e.minimum===void 0?{}:{minimum:e.minimum}};case`string`:return{kind:`text`,...e.maxLength===void 0?{}:{maxLength:e.maxLength}};case`array`:{let t=Vn(e.items);return t?{kind:`choices`,options:t}:e.items?.type===`string`?{kind:`textList`}:{kind:`other`}}default:return{kind:`other`}}},Un=e=>{let t=e,n=new Set(t.required??[]);return Object.entries(t.properties??{}).map(([e,t])=>({key:e,control:Hn(t),required:n.has(e)}))},$=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,value:o,options:s,onChange:c,locked:l=[]})=>{let u=(e,t)=>{let n=new Set(o);t?n.add(e):n.delete(e),c(s.map(e=>e.value).filter(e=>n.has(e)))};return(0,G.jsxs)(A,{"data-invalid":i.length>0||void 0,className:`gap-3`,children:[(0,G.jsxs)(se,{variant:`label`,className:`mb-0 flex items-center gap-1`,children:[t,n?(0,G.jsx)(M,{about:t,children:n}):null]}),r?(0,G.jsx)(D,{children:r}):null,(0,G.jsx)(`div`,{"data-slot":`checkbox-group`,className:`grid gap-3 @sm/field-group:grid-cols-2`,children:s.map(t=>{let n=`${e}-${t.value}`;return(0,G.jsxs)(k,{orientation:`horizontal`,children:[(0,G.jsx)(we,{id:n,checked:o.includes(t.value),onCheckedChange:e=>u(t.value,e===!0),disabled:a||l.includes(t.value)}),(0,G.jsx)(oe,{htmlFor:n,className:`font-normal`,children:t.label})]},t.value)})}),(0,G.jsx)(Y,{issues:i})]})},Wn=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,checked:o,onChange:s,layout:l=`row`})=>{let u=Nn(e,{hint:n,description:r,issues:i}),d=(0,G.jsx)(Ze,{id:e,checked:o,onCheckedChange:s,disabled:a,"aria-invalid":i.length>0||void 0,"aria-describedby":u.describedBy,className:c(l===`compact`&&`mt-0.5 self-start`)});return(0,G.jsxs)(k,{orientation:`horizontal`,"data-invalid":i.length>0||void 0,children:[l===`compact`?d:null,(0,G.jsxs)(j,{children:[(0,G.jsx)(z,{htmlFor:e,label:t,hint:n,hintId:u.hintId}),r?(0,G.jsx)(D,{id:u.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:u.errorId,issues:i})]}),l===`row`?d:null]})},Gn=/\s*,\s*/,Kn=({idPrefix:e,property:{key:t,control:n,required:r},value:i,onChange:o,issues:s,description:c,hint:l,disabled:u})=>{let{t:d}=a(),f={id:`${e}-${t}`,label:Ie(t),issues:s,disabled:u,description:c,hint:l};switch(n.kind){case`boolean`:return(0,G.jsx)(Wn,{...f,checked:i===!0,onChange:e=>o(e||void 0)});case`integer`:case`number`:return(0,G.jsx)(Rn,{...f,integer:n.kind===`integer`,min:n.minimum,max:n.kind===`integer`?n.maximum:void 0,value:typeof i==`number`?i:void 0,onChange:o});case`choice`:return(0,G.jsx)(Q,{...f,value:typeof i==`string`?i:void 0,options:n.options.map(e=>({value:e,label:ke(e)})),onChange:o,...r?{}:{unsetLabel:d(`models.notSet`)}});case`choices`:return(0,G.jsx)($,{...f,value:Array.isArray(i)?i:[],options:n.options.map(e=>({value:e,label:ke(e)})),onChange:e=>o(e.length>0?e:void 0)});case`textList`:return(0,G.jsx)(Z,{...f,description:c??d(`models.commaSeparated`),value:Array.isArray(i)?i.join(`, `):``,onChange:e=>{let t=(e??``).split(Gn).filter(Boolean);o(t.length>0?t:void 0)}});case`text`:return(0,G.jsx)(Z,{...f,maxLength:n.maxLength,value:typeof i==`string`?i:void 0,onChange:o,emptyAsUndefined:!r});default:return null}},qn=({field:e,path:t,issues:n,disabled:r,onChange:i})=>{let{t:o}=a(),{id:s,options:c}=e.editor,l=ft(e).map(e=>e.id),u=pt(s)||!l.includes(s)?[...l,s]:l,d=gt.get(s),f=d?Un(d.optionsSchema):[];return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Q,{id:`field-${e.id}-editor`,label:o(`models.builder.editor`),hint:o(`models.builder.editorHint`),value:s,options:u.map(e=>({value:e,label:Pe(e)})),onChange:e=>e&&i({id:e,options:{}}),issues:J(n,`${t}/editor/id`),disabled:r}),f.map(a=>(0,G.jsx)(Kn,{idPrefix:`field-${e.id}-editor-options`,property:a,value:c[a.key],onChange:e=>i({id:s,options:q(c,a.key,e)}),issues:J(n,`${t}/editor/options/${a.key}`),disabled:r},`${s}-${a.key}`))]})},Jn={required:{label:`models.builder.required`,hint:`models.builder.requiredHint`},unique:{label:`models.builder.unique`,hint:`models.builder.uniqueHint`},localized:{label:`models.builder.fieldLocalized`,hint:`models.builder.fieldLocalizedHint`},public:{label:`models.builder.public`,hint:`models.builder.publicHint`},filterable:{label:`models.builder.filterable`,hint:`models.builder.indexHint`},sortable:{label:`models.builder.sortable`,hint:`models.builder.indexHint`},deprecated:{label:`models.builder.deprecated`,hint:`models.builder.deprecatedHint`}},Yn=(e,t)=>{let n=t.kind===`component`,r=t.kind!==`component`&&t.localized,i=!n&&vt.has(e.type)&&!(e.type===`enum`&&e.settings.multiple);return[`required`,...mt.has(e.type)&&!n?[`unique`]:[],...r?[`localized`]:[],`public`,...i?[`filterable`,`sortable`]:[],`deprecated`]},Xn=({field:e,draft:t,at:n,disabled:r,onChange:i})=>{let{t:o}=a();return(0,G.jsx)(`div`,{className:`grid gap-x-6 gap-y-4 @md/field-group:grid-cols-2`,children:Yn(e,t).map(t=>(0,G.jsx)(Wn,{id:`field-${e.id}-${t}`,layout:`compact`,label:o(Jn[t].label),hint:o(Jn[t].hint),checked:e[t],onChange:e=>i({[t]:e}),issues:n(t),disabled:r},t))})},Zn=(e,t,n)=>t.type===n?null:Me({kind:`field.type`,definitionId:e.id,fieldId:t.id,from:t.type,to:n},{before:e,after:xn(e,t.id,n)}),Qn=new Set,$n=(e,t,n)=>{let{t:r}=a(),i=(0,U.useMemo)(()=>e&&t?new Set(_t.filter(n=>Zn(e,t,n)?.supported===!1)):Qn,[e,t]),o=(0,U.useMemo)(()=>e&&t?Zn(e,t,n):null,[e,t,n]),s=[];o?.category===`conversion`?s.push(r(`models.builder.typeConverted`)):o?.category===`validation`&&s.push(r(`models.builder.typeChecked`)),o?.breaking&&s.push(r(`models.builder.typeBreaking`)),o?.destructive&&s.push(r(`models.builder.typeDestructive`));let c=t?r(`models.dataTypes.${t.type}.name`):``;return{unavailable:i,unavailableReason:e=>r(`models.builder.typeUnsupported`,{from:c,to:r(`models.dataTypes.${e}.name`)}),notes:s,limitedNote:i.size>0?r(`models.builder.typeLimited`,{type:c}):void 0}},er=({idPrefix:e,field:t,path:n,issues:r,disabled:i,onChange:o})=>{let{t:s}=a(),c=t.settings.values,l=(e,t)=>o(c.map((n,r)=>r===e?{...n,...t}:n)),u=r.filter(e=>e.path===n);return(0,G.jsxs)(A,{className:`gap-3`,"data-invalid":u.length>0||void 0,children:[(0,G.jsxs)(se,{variant:`label`,className:`mb-0 flex items-center gap-1`,children:[s(`models.properties.values`),(0,G.jsx)(M,{about:s(`models.properties.values`),children:s(`models.builder.enumValuesHint`)})]}),c.length>0?(0,G.jsx)(`ol`,{className:`space-y-2`,children:c.map((t,a)=>{let u=J(r,`${n}/${a}`),d=`${e}-value-${a}`,f=`${e}-label-${a}`;return(0,G.jsxs)(`li`,{className:`space-y-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`label`,{htmlFor:f,className:`sr-only`,children:s(`models.builder.enumLabel`,{position:a+1})}),(0,G.jsx)(P,{id:f,value:t.label,placeholder:s(`models.builder.enumLabelPlaceholder`),disabled:i,onChange:e=>l(a,{label:e.target.value})}),(0,G.jsx)(`label`,{htmlFor:d,className:`sr-only`,children:s(`models.builder.enumValue`,{position:a+1})}),(0,G.jsx)(P,{id:d,value:t.value,placeholder:s(`models.builder.enumValuePlaceholder`),className:`font-mono`,spellCheck:!1,disabled:i,"aria-invalid":u.length>0||void 0,onChange:e=>l(a,{value:e.target.value})}),(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-sm`,disabled:i,"aria-label":s(`models.builder.enumRemove`,{position:a+1}),onClick:()=>o(c.filter((e,t)=>t!==a)),children:(0,G.jsx)(E,{"aria-hidden":`true`})})]}),(0,G.jsx)(Y,{issues:u})]},a)})}):null,(0,G.jsx)(Y,{issues:u}),(0,G.jsxs)(N,{type:`button`,variant:`outline`,size:`sm`,className:`w-fit`,disabled:i,onClick:()=>o([...c,{value:``,label:``}]),children:[(0,G.jsx)(Ve,{"aria-hidden":`true`}),s(`models.builder.enumAdd`)]})]})},tr=new Set([`formatVersion`]),nr={date:`models.formats.date`,datetime:`models.formats.datetime`,time:`models.formats.time`,decimal:`models.formats.decimal`,biginteger:`models.formats.biginteger`},rr=new Set([`string`,`text`]),ir=({field:e,draft:t,path:n,issues:r,disabled:i,onChange:o})=>{let{t:s}=a(),{definitions:c}=st(),l=e.settings,u=`${n}/settings`,d=`field-${e.id}-settings`,f=[...(c??[]).map(({definition:e})=>e).filter(e=>e.id!==t.id),t],p=f.filter(e=>e.kind!==`component`),m=f.filter(e=>e.kind===`component`&&e.id!==t.id),h=e=>({value:e.id,label:e.label}),g=e=>J(r,`${u}/${e}`),_=n=>{let{key:a}=n,c={id:`${d}-${a}`,issues:g(a),disabled:i};if(e.type===`enum`&&a===`values`)return(0,G.jsx)(er,{idPrefix:c.id,field:e,path:`${u}/values`,issues:r,disabled:i,onChange:e=>o(`values`,e)},a);if(a===`target`)return(0,G.jsx)(Q,{...c,label:s(`models.properties.target`),value:l.target,options:p.map(h),onChange:e=>o(`target`,e??``),placeholder:s(`models.builder.chooseModel`)},a);if(a===`component`)return(0,G.jsx)(Q,{...c,label:s(`models.properties.component`),value:l.component,options:m.map(h),onChange:e=>o(`component`,e??``),placeholder:s(`models.builder.chooseComponent`),...m.length===0?{description:s(`models.builder.noComponents`)}:{}},a);if(a===`components`)return(0,G.jsx)($,{...c,label:s(`models.properties.components`),value:l.components??[],options:m.map(h),onChange:e=>o(`components`,e),...m.length===0?{description:s(`models.builder.noComponents`)}:{}},a);if(a===`sourceFieldId`)return(0,G.jsx)(Q,{...c,label:s(`models.properties.sourceFieldId`),hint:s(`models.builder.sourceFieldHint`),value:l.sourceFieldId,options:t.fields.filter(t=>t.id!==e.id&&rr.has(t.type)).map(e=>({value:e.id,label:e.label})),onChange:e=>o(`sourceFieldId`,e),unsetLabel:s(`models.notSet`)},a);let f=n.control.kind===`text`&&e.type in nr?nr[e.type]:void 0;return(0,G.jsx)(Kn,{idPrefix:d,property:n,value:l[a],onChange:e=>o(a,e),issues:c.issues,disabled:i,description:f===void 0?void 0:s(f),hint:a===`pattern`?s(`models.builder.patternHint`):void 0},a)},v=Un(ht[e.type]).filter(e=>!tr.has(e.key)),y=new Set(v.map(e=>e.key)),ee=J(r,u).filter(e=>!y.has(e.path.slice(u.length+1).split(`/`)[0]??``));return v.length===0?(0,G.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:s(`models.builder.noSettings`)}):(0,G.jsxs)(G.Fragment,{children:[v.map(_),(0,G.jsx)(Y,{issues:ee})]})},ar=new Set([`label`,`apiKey`,`description`,`required`,`unique`,`filterable`,`sortable`,`public`,`localized`,`deprecated`,`defaultValue`,`editor`,`settings`]),or=({field:e,index:t,issues:n,disabled:r,untouched:i,onDiscard:o})=>{let{t:s}=a(),c=W(e=>e.draft),l=W(e=>e.base),u=W(e=>e.updateField),d=W(e=>e.update),f=W(e=>e.select),p=l?.fields.find(t=>t.id===e.id),m=$n(l,p,e.type);if(!c)return null;let h=gn(t),g=e=>J(n,`${h}/${e}`),_=J(n,h).filter(e=>!ar.has(e.path.slice(h.length+1).split(`/`)[0]??``)),v=t=>u(e.id,e=>({...e,...t})),y=t=>`field-${e.id}-${t}`,ee=p!==void 0&&p.apiKey!==e.apiKey,b=l!==null&&p===void 0,x=e.label||s(`models.builder.untitled`),S=t=>{let n=b&&e.apiKey===Nt(e.label);v({label:t,...n?{apiKey:Nt(t)}:{}})};return(0,G.jsx)(`div`,{onKeyDown:e=>{e.key===`Escape`&&!e.nativeEvent.defaultPrevented&&i&&e.target instanceof Node&&e.currentTarget.contains(e.target)&&(e.preventDefault(),o())},children:(0,G.jsxs)(H,{"aria-label":s(`models.builder.fieldProperties`,{label:x}),flush:!0,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-b px-5 py-4`,children:[(0,G.jsx)(ne,{icon:I[e.type]}),(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-x-2.5 gap-y-1`,children:[(0,G.jsx)(`h2`,{className:`min-w-0 truncate text-base font-semibold`,children:x}),(0,G.jsx)(C,{variant:`secondary`,children:s(`models.dataTypes.${e.type}.name`)})]}),(0,G.jsxs)(N,{type:`button`,variant:`destructive-ghost`,size:`sm`,disabled:r,onClick:()=>{d(t=>fn(t,e.id)),f({type:`definition`})},children:[(0,G.jsx)(E,{"aria-hidden":`true`}),s(`models.builder.removeField`)]})]}),(0,G.jsxs)(`div`,{className:`space-y-5 p-5`,children:[(0,G.jsx)(Y,{issues:_}),(0,G.jsx)(K,{title:s(`models.builder.dataType`),titleId:y(`type-heading`),children:(0,G.jsx)(In,{labelledBy:y(`type-heading`),value:e.type,...m,disabled:r,onChange:t=>d(n=>pn(Sn(n,e.id,t,p)))})}),(0,G.jsxs)(K,{title:s(`models.builder.general`),children:[(0,G.jsxs)(`div`,{className:`grid items-start gap-5 @lg/field-group:grid-cols-2`,children:[(0,G.jsx)(Z,{id:wn(e.id),label:s(`models.label`),value:e.label,onChange:e=>S(e??``),issues:g(`label`),disabled:r}),(0,G.jsx)(Z,{id:y(`apiKey`),label:s(`models.apiKey`),hint:s(`models.fieldApiKeyHint`),description:ee?s(`models.builder.apiKeyRenameWarning`):void 0,value:e.apiKey,onChange:e=>v({apiKey:e??``}),issues:g(`apiKey`),disabled:r,monospace:!0})]}),(0,G.jsx)(Z,{id:y(`description`),label:s(`models.builder.helpText`),value:e.description,onChange:e=>v({description:e}),issues:g(`description`),disabled:r,emptyAsUndefined:!0,multiline:!0})]}),(0,G.jsx)(K,{title:s(`models.builder.options`),children:(0,G.jsx)(Xn,{field:e,draft:c,at:g,disabled:r,onChange:v})}),(0,G.jsxs)(K,{title:s(`models.builder.settings`),children:[(0,G.jsx)(ir,{field:e,draft:c,path:h,issues:n,disabled:r,onChange:(t,n)=>d(r=>pn({...r,fields:r.fields.map(r=>r.id===e.id?mn(ln(r,t,n)):r)}))}),Mn(e)?(0,G.jsx)(Bn,{field:e,issues:g(`defaultValue`),disabled:r,onChange:t=>u(e.id,e=>{let n={...e,defaultValue:t};return t===void 0&&delete n.defaultValue,n})}):null]}),(0,G.jsx)(K,{title:s(`models.builder.editorSection`),children:(0,G.jsx)(qn,{field:e,path:h,issues:n,disabled:r,onChange:e=>v({editor:e})})})]})]})})},sr=({draft:e,version:t,dirty:n,issueCount:r,deleteBlocked:i,onDelete:o,...s})=>{let{t:c}=a(),{modelKey:u=e.apiKey}=y({strict:!1}),d=e.kind===`component`?[{label:c(`shell.nav.components`),link:l({to:`/develop/components`})}]:[{label:e.label,link:l({to:`/content/$modelKey`,params:{modelKey:u}})},{label:c(`place.tabs.structure`)}];return(0,G.jsx)(v,{sticky:!0,breadcrumb:d,title:e.label||c(`models.builder.untitled`),badge:n||r>0?(0,G.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[n?(0,G.jsx)(x,{tone:`warning`,label:c(`models.builder.unsaved`)}):null,r>0?(0,G.jsx)(x,{tone:`danger`,label:c(`models.builder.problems`,{count:r})}):null]}):null,meta:e.kind===`collection`?c(`models.builder.subtitleCollection`,{apiKey:e.apiKey,pluralApiKey:B(e),version:t}):c(`models.builder.subtitle`,{apiKey:e.apiKey,version:t}),actions:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`hidden items-center gap-2 xl:flex`,children:(0,G.jsx)(qt,{...s})}),(0,G.jsxs)(Ye,{children:[(0,G.jsx)(qe,{asChild:!0,children:(0,G.jsx)(N,{variant:`ghost`,size:`icon`,"aria-label":c(`models.builder.more`),children:(0,G.jsx)(Re,{"aria-hidden":`true`})})}),(0,G.jsx)(Je,{align:`end`,children:(0,G.jsxs)(Ke,{variant:`destructive`,disabled:i,onSelect:o,children:[(0,G.jsx)(E,{"aria-hidden":`true`}),c(`models.builder.delete`)]})})]})]})})},cr=[],lr=()=>{let e=W(e=>e.draft),t=W(e=>e.base),{definitions:n}=st(),r=(0,U.useDeferredValue)(e);return{issues:(0,U.useMemo)(()=>r&&t?hn(r,t,(n??[]).map(({definition:e})=>e)):cr,[r,t,n])}},ur=()=>{let e=W(e=>e.draft),t=W(e=>e.base);return(0,U.useMemo)(()=>!!(e&&t&&un(e,t)),[e,t])},dr=(e,t,n)=>{let r=nt().data?.definitions.find(t=>t.id===e);return{changedElsewhere:!n&&r!==void 0&&r.version>t,remoteVersion:r?.version}},fr=e=>d(e,`SCHEMA_VERSION_CONFLICT`),pr=(e,t,n)=>{let{t:i}=a(),o=at(),s=r(),c=Ue(),[l,u]=(0,U.useState)({step:`idle`}),[d,f]=(0,U.useState)(void 0),p=e=>{if(fr(e)){u({step:`conflict`});return}T.error(le(e))},m=async()=>{T.success(i(`models.updated`));try{await n(`rebase`)}catch(e){ae(e,`reloading the definition after a schema change`),T.error(le(e))}};return{state:l,review:async()=>{let{draft:n,baseVersion:r}=W.getState();if(n){c.reset();try{let i=await o.mutateAsync({category:e,id:t,definition:n,expectedVersion:r});u({step:`review`,preview:i})}catch(e){p(e)}}},reviewing:o.isPending,confirm:async n=>{let{draft:r,baseVersion:a}=W.getState();if(r)try{let o=await c.mutateAsync({definitionId:t,input:{category:e,definition:r,baseVersion:a},acknowledgement:n,title:i(`changes.builderSetTitle`,{label:r.label})});if(u({step:`idle`}),o.status===`shipping`){let n=await s.fetchQuery(ct(e,t));f(n.pendingChange?.id),T.info(i(`models.builder.changeStarted`))}else await m()}catch(e){fr(e)&&u({step:`conflict`})}},applying:c.isPending,applyError:c.error,resetStep:()=>u({step:`idle`}),runningChangeId:d,dismissChange:()=>f(void 0),onChangeFinished:async e=>{e===`activated`&&(f(void 0),await m())}}},mr=()=>{let e=W(e=>e.selection),t=W(e=>e.draft?.fields);if(e.type!==`field`||!t)return{field:void 0,index:-1};let n=t.findIndex(t=>t.id===e.fieldId);return{field:t[n],index:n}},hr=e=>({value:e.id,label:e.label}),gr=({model:e,issues:t,disabled:n})=>{let{t:r}=a(),i=W(e=>e.update),o=(e,t)=>i(n=>pn({...n,display:q(n.display,e,t)})),s=e=>J(t,`/display/${e}`),c=vn(e);return(0,G.jsxs)(G.Fragment,{children:[c.coverOptions.length>0?(0,G.jsx)(Q,{id:`definition-cover-field`,label:r(`models.builder.coverField`),hint:r(`models.builder.coverFieldHint`),value:e.display.coverFieldId,options:c.coverOptions.map(hr),onChange:e=>o(`coverFieldId`,e),unsetLabel:r(`models.builder.automatic`),issues:s(`coverFieldId`),disabled:n}):null,c.canvasOptions.length>0?(0,G.jsx)($,{id:`definition-canvas-fields`,label:r(`models.builder.canvasFields`),hint:r(`models.builder.canvasFieldsHint`),value:c.canvas,options:c.canvasOptions.map(hr),locked:c.canvas.length===1?c.canvas:[],onChange:e=>o(`canvasFieldIds`,e.length>0?e:void 0),issues:s(`canvasFieldIds`),disabled:n}):null,c.stripOptions.length>0?(0,G.jsx)($,{id:`definition-strip-fields`,label:r(`models.builder.stripFields`),hint:r(`models.builder.stripFieldsHint`),value:e.display.stripFieldIds??[],options:c.stripOptions.map(hr),onChange:e=>o(`stripFieldIds`,e.length>0?e:void 0),issues:s(`stripFieldIds`),disabled:n}):null]})},_r={asc:`models.builder.sortAscending`,desc:`models.builder.sortDescending`},vr=({definition:e,issues:t,disabled:n})=>{let{t:r}=a(),i=W(e=>e.update),o=(e,t)=>i(n=>({...n,display:q(n.display,e,t)})),s=e=>J(t,`/display/${e}`),c=e=>({value:e.id,label:e.label}),{display:l}=e,u=(0,G.jsx)(Q,{id:`definition-title-field`,label:r(`models.builder.titleField`),hint:r(`models.builder.titleFieldHint`),value:l.titleFieldId,options:X(e).map(c),onChange:e=>o(`titleFieldId`,e),unsetLabel:r(`models.notSet`),issues:s(`titleFieldId`),disabled:n});if(e.kind===`component`)return u;let d=e.display.defaultSort,f=e.fields.filter(e=>e.sortable);return(0,G.jsxs)(G.Fragment,{children:[u,(0,G.jsx)(Q,{id:`definition-sort-field`,label:r(`models.builder.sortField`),hint:r(`models.builder.sortFieldHint`),value:d?.fieldId,options:f.map(c),onChange:e=>o(`defaultSort`,e?{fieldId:e,direction:d?.direction??`asc`}:void 0),unsetLabel:r(`models.builder.sortNewest`),issues:s(`defaultSort`),disabled:n}),d?(0,G.jsx)(Q,{id:`definition-sort-direction`,label:r(`models.builder.sortDirection`),value:d.direction,options:dt.map(e=>({value:e,label:r(_r[e])})),onChange:e=>e&&o(`defaultSort`,{...d,direction:e}),disabled:n}):null,(0,G.jsx)($,{id:`definition-list-fields`,label:r(`models.builder.listColumns`),value:e.display.listFieldIds??[],options:e.fields.map(c),onChange:e=>o(`listFieldIds`,e.length>0?e:void 0),issues:s(`listFieldIds`),disabled:n}),(0,G.jsx)(gr,{model:e,issues:t,disabled:n})]})},yr=({issues:e,disabled:t,scopeSection:n})=>{let{t:r}=a(),i=W(e=>e.draft),o=W(e=>e.base),s=W(e=>e.update);if(!i)return null;let c=e=>s(t=>({...t,...e})),l=t=>J(e,`/${t}`),u=o!==null&&o.apiKey!==i.apiKey,d=o?.kind===`collection`&&i.kind===`collection`&&B(o)!==B(i),f=e=>s(t=>t.kind===`collection`?{...t,apiKey:e,pluralApiKey:Ft(t.apiKey,e,t.pluralApiKey)}:{...t,apiKey:e});return(0,G.jsxs)(`div`,{className:`space-y-6`,children:[n,(0,G.jsxs)(K,{title:r(`models.builder.general`),children:[(0,G.jsx)(Z,{id:`definition-label`,label:r(`models.label`),value:i.label,onChange:e=>c({label:e??``}),issues:l(`label`),disabled:t}),(0,G.jsx)(Z,{id:`definition-apiKey`,label:r(`models.apiKey`),hint:r(`models.apiKeyHint`),description:u?r(`models.builder.apiKeyRenameWarning`):void 0,value:i.apiKey,onChange:e=>f(e??``),issues:l(`apiKey`),disabled:t,monospace:!0}),i.kind===`collection`?(0,G.jsx)(Z,{id:`definition-pluralApiKey`,label:r(`models.pluralApiKey`),hint:r(`models.pluralApiKeyHint`),description:d?r(`models.builder.pluralApiKeyRenameWarning`):void 0,value:i.pluralApiKey,onChange:e=>c({pluralApiKey:e}),issues:l(`pluralApiKey`),disabled:t,emptyAsUndefined:!0,monospace:!0}):null,(0,G.jsx)(Z,{id:`definition-description`,label:r(`models.descriptionLabel`),value:i.description,onChange:e=>c({description:e}),issues:l(`description`),disabled:t,emptyAsUndefined:!0,multiline:!0}),i.kind===`component`?(0,G.jsx)(Z,{id:`definition-category`,label:r(`models.builder.category`),hint:r(`models.builder.categoryHint`),value:i.category,onChange:e=>c({category:e}),issues:l(`category`),disabled:t,emptyAsUndefined:!0}):null]}),i.kind===`component`?null:(0,G.jsxs)(K,{title:r(`models.builder.content`),children:[(0,G.jsx)(Wn,{id:`definition-localized`,label:r(`models.localized`),hint:r(`models.builder.modelLocalizedHint`),checked:i.localized,onChange:e=>c({localized:e}),issues:l(`localized`),disabled:t}),(0,G.jsx)(Wn,{id:`definition-draftAndPublish`,label:r(`models.builder.draftAndPublish`),hint:r(`models.builder.draftAndPublishHint`),checked:i.draftAndPublish,onChange:e=>c({draftAndPublish:e}),issues:l(`draftAndPublish`),disabled:t})]}),(0,G.jsx)(K,{title:r(`models.builder.display`),children:(0,G.jsx)(vr,{definition:i,issues:e,disabled:t})})]})},br=({hasIssues:e})=>{let{t}=a(),n=W(e=>e.draft);if(!n)return null;let r=de[n.kind];return(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,G.jsxs)(C,{variant:`outline`,children:[(0,G.jsx)(r,{"aria-hidden":`true`}),t(ue[n.kind])]}),n.kind===`component`?null:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(C,{variant:`outline`,children:t(n.localized?`models.builder.summaryLocalized`:`models.builder.summaryNotLocalized`)}),(0,G.jsx)(C,{variant:`outline`,children:t(n.draftAndPublish?`models.builder.summaryDrafts`:`models.builder.summaryNoDrafts`)})]}),n.kind===`collection`?(0,G.jsxs)(C,{variant:`outline`,className:`font-mono font-medium`,children:[(0,G.jsxs)(`span`,{className:`sr-only`,children:[t(`models.pluralApiKey`),` `]}),B(n)]}):null,e?(0,G.jsx)(x,{tone:`danger`,size:`sm`,label:t(`models.builder.hasProblems`)}):null]})},xr=e=>!/^\/fields(\/|$)/.test(e.path),Sr=({issues:e,disabled:t,scopeSection:n})=>{let{t:r}=a(),[i,o]=(0,U.useState)(!1),s=(0,U.useId)();return(0,G.jsx)(H,{title:r(`models.builder.definitionSettings`),actions:(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-expanded":i,"aria-controls":s,"aria-label":r(`models.builder.definitionSettings`),onClick:()=>o(e=>!e),children:(0,G.jsx)(be,{"aria-hidden":`true`,className:c(`transition-transform`,i&&`rotate-180`)})}),children:(0,G.jsx)(`div`,{id:s,children:i?(0,G.jsx)(yr,{issues:e,disabled:t,scopeSection:n}):(0,G.jsx)(br,{hasIssues:e.some(xr)})})})},Cr=({hasFields:e})=>{let{t}=a();return(0,G.jsx)(H,{"aria-label":t(`models.builder.propertiesLabel`),className:`hidden xl:block`,children:e?(0,G.jsx)(S,{size:`panel`,icon:Bt,title:t(`models.builder.selectField`)}):(0,G.jsx)(S,{size:`panel`,icon:Ht,title:t(`models.builder.startTitle`)})})},wr=({reason:e,dirty:t,onReload:n,onKeepEdits:r})=>{let{t:i}=a(),o=t||e===`conflict`;return(0,G.jsxs)(L,{variant:`warning`,role:e===`conflict`?`alert`:`status`,className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,G.jsx)(We,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":`true`}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Ee,{children:i(`models.remote.title`)}),(0,G.jsx)(R,{children:i(o?`models.remote.chooseDescription`:`models.remote.description`)})]})]}),o?(0,G.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,onClick:r,children:i(`models.remote.keepEdits`)}),(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,onClick:n,children:i(`models.remote.reloadLatest`)})]}):(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,onClick:n,children:i(`models.remote.reload`)})]})},Tr=({changes:e,before:t,after:n})=>{let{t:r}=a();return(0,G.jsx)(`div`,{className:`space-y-4`,children:Oe(e).map(({bucket:e,changes:i})=>(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(Fe,{bucket:e}),(0,G.jsx)(`span`,{className:`text-meta text-muted-foreground tabular-nums`,children:i.length})]}),(0,G.jsx)(`ul`,{"aria-label":r(F[e]),className:`divide-y rounded-lg border`,children:i.map((e,r)=>(0,G.jsx)(`li`,{className:`px-3 py-2.5 text-sm`,children:Ne(e,t,n)},`${e.kind}-${e.fieldId??``}-${e.property??``}-${r}`))})]},e))})},Er=()=>{let{t:e}=a(),t=u(),n=He();return{reviewInChangeSet:async(r,i)=>{let{plan:a}=r,o=await $e(n.mutateAsync({definitionId:a.definitionId,newSetTitle:e(`changes.builderSetTitle`,{label:i.label}),input:{category:a.kind===`component`?`component`:`model`,definition:i,baseVersion:a.fromVersion}}));o.ok&&await t({to:`/changes/$changeSetId`,params:{changeSetId:o.value},ignoreBlocker:!0})},saving:n.isPending,saveError:n.error,resetSave:n.reset}},Dr={breaking:`models.plan.summary.breaking`,prerequisites:`models.plan.summary.prerequisites`,live:`models.plan.summary.live`,metadata:`models.plan.summary.metadata`},Or=({preview:e,before:t,after:n,applying:r,error:i,onApply:o,onClose:c})=>{let{t:l}=a(),[u,d]=(0,U.useState)(!1),[f,m]=(0,U.useState)(!1),[v,y]=(0,U.useState)(e),{reviewInChangeSet:x,saving:S,saveError:ne,resetSave:C}=Er(),ie=r||S;e!==void 0&&e!==v&&(y(e),d(!1),m(!1),C());let w=v?.plan,T=w?.summary,ae=T?je(T):`metadata`,E=T?.breaking??!1,D=T?.destructive??!1,se=(!E||u)&&(!D||f);return(0,G.jsx)(h,{open:e!==void 0,onOpenChange:e=>!e&&!ie&&c(),children:(0,G.jsxs)(re,{size:`lg`,children:[(0,G.jsxs)(te,{className:`pr-14`,children:[(0,G.jsx)(b,{children:l(`models.plan.title`,{label:n?.label??``})}),(0,G.jsx)(g,{children:l(Dr[ae])})]}),w&&v?(0,G.jsxs)(`form`,{noValidate:!0,className:`flex min-h-0 flex-1 flex-col`,onSubmit:e=>{e.preventDefault(),o({...E?{acknowledgeBreaking:!0}:{},...D?{acknowledgeDestructive:!0}:{}})},children:[(0,G.jsxs)(ee,{className:`space-y-6 pt-1`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 rounded-lg bg-muted px-3 py-2.5`,children:[(0,G.jsx)(Fe,{bucket:ae}),(0,G.jsx)(`span`,{className:`text-meta text-muted-foreground`,children:l(`models.plan.affected`,{count:v.impact.affectedHeads})})]}),(0,G.jsxs)(`section`,{className:`space-y-3`,"aria-labelledby":`plan-changes`,children:[(0,G.jsx)(`h3`,{id:`plan-changes`,className:`text-sm font-semibold`,children:l(`models.plan.changes`,{count:w.changes.length})}),(0,G.jsx)(Tr,{changes:w.changes,before:t,after:n})]}),w.prerequisites.length>0?(0,G.jsxs)(`section`,{className:`space-y-3`,"aria-labelledby":`plan-prerequisites`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(`h3`,{id:`plan-prerequisites`,className:`text-sm font-semibold`,children:l(`models.plan.prerequisites`)}),(0,G.jsx)(M,{about:l(`models.plan.prerequisites`),children:l(`models.plan.prerequisitesHint`)})]}),(0,G.jsx)(Le,{phase:`before`,steps:w.prerequisites,impacts:v.impact.steps,before:t,after:n})]}):null,w.followUps.length>0?(0,G.jsxs)(`section`,{className:`space-y-3`,"aria-labelledby":`plan-follow-ups`,children:[(0,G.jsx)(`h3`,{id:`plan-follow-ups`,className:`text-sm font-semibold`,children:l(`models.plan.followUps`)}),(0,G.jsx)(Le,{phase:`after`,steps:w.followUps,before:t,after:n})]}):null,E||D?(0,G.jsxs)(`fieldset`,{className:`space-y-3 rounded-lg border border-warning/40 bg-warning-muted/40 p-4`,children:[(0,G.jsx)(`legend`,{className:`px-1 text-sm font-semibold text-warning`,children:l(`models.plan.acknowledge`)}),E?(0,G.jsxs)(k,{orientation:`horizontal`,children:[(0,G.jsx)(we,{id:`plan-ack-breaking`,checked:u,onCheckedChange:e=>d(e===!0)}),(0,G.jsx)(oe,{htmlFor:`plan-ack-breaking`,className:`font-normal`,children:l(`models.plan.acknowledgeBreaking`)})]}):null,D?(0,G.jsxs)(k,{orientation:`horizontal`,children:[(0,G.jsx)(we,{id:`plan-ack-destructive`,checked:f,onCheckedChange:e=>m(e===!0)}),(0,G.jsx)(oe,{htmlFor:`plan-ack-destructive`,className:`font-normal`,children:l(`models.plan.acknowledgeDestructive`)})]}):null]}):null,(0,G.jsx)(Ce,{error:i??ne})]}),(0,G.jsxs)(_,{children:[(0,G.jsx)(N,{type:`button`,variant:`outline`,onClick:c,disabled:ie,children:l(`common.cancel`)}),(0,G.jsxs)(N,{type:`button`,variant:`outline`,disabled:ie||!n,"aria-busy":S||void 0,onClick:()=>n&&void x(v,n),children:[S?(0,G.jsx)(s,{className:`animate-spin motion-reduce:animate-none`,"aria-hidden":`true`}):(0,G.jsx)(Ae,{"aria-hidden":`true`}),l(S?`common.saving`:`changes.reviewInChangeSet`)]}),(0,G.jsx)(p,{pending:r,pendingLabel:l(`models.plan.applying`),disabled:!se||S,children:l(`models.plan.apply`)})]})]}):null]})})},kr=({category:e,id:t,detail:n})=>{let{t:r}=a(),i=u(),o=Wt(e,t),s=W(e=>e.key),c=W(e=>e.draft),l=W(e=>e.base),d=W(e=>e.baseVersion),f=W(e=>e.load),p=W(e=>e.reset),h=rn(e,t),g=pr(e,t,h),_=ur(),{issues:v}=lr(),{field:y,index:ee}=mr(),{locked:b,reason:x}=jt(),S=Gt(n.scope),{multiSite:te}=me(),ne=tt(),C=En(),[re,E]=(0,U.useState)(!1),[D,oe]=(0,U.useState)(void 0),[se,O]=(0,U.useState)(!1),k=(0,U.useRef)(n);(0,U.useEffect)(()=>(f(e,k.current.definition,k.current.version),p),[o,e,f,p]);let A=g.runningChangeId??n.pendingChange?.id,j=A===D?void 0:A,M=j!==void 0,{changedElsewhere:ce}=dr(t,d,M||g.applying),N=b||S||M,P=_&&v.length===0&&!N&&!g.reviewing,ue=g.state.step===`review`,F=g.state.step===`conflict`||se;if(kt(()=>void g.review(),P&&!ue),s!==o||!c)return(0,G.jsx)(ie,{});let de=e=>void h(e).catch(e=>{ae(e,`reloading the definition`),T.error(le(e))}),I=b||S,fe=te?(0,G.jsx)(on,{category:e,id:t,label:c.label,scope:n.scope,blocked:_||M||g.applying,locked:b,onConflict:()=>O(!0)}):null,pe={canDiscard:_,canReview:P,reviewing:g.reviewing,onReview:()=>void g.review(),onDiscard:()=>{l&&f(e,l,d)}};return(0,G.jsxs)(m,{width:`full`,children:[(0,G.jsx)(w,{when:_}),(0,G.jsx)(sr,{...pe,draft:c,version:d,dirty:_,issueCount:v.length,deleteBlocked:N,onDelete:()=>E(!0)}),b?(0,G.jsx)(Mt,{reason:x}):null,S?(0,G.jsx)(Kt,{}):null,ce||F?(0,G.jsx)(wr,{reason:F?`conflict`:`remote`,dirty:_,onReload:()=>{g.resetStep(),O(!1),de(`replace`)},onKeepEdits:()=>{g.resetStep(),O(!1),de(`rebase`)}},F?`conflict`:`remote`):null,j?(0,G.jsx)(Xt,{changeId:j,onFinished:e=>void g.onChangeFinished(e),onDismiss:()=>{oe(j),g.dismissChange()}},j):null,(0,G.jsxs)(`div`,{className:`grid min-w-0 gap-6 xl:grid-cols-[22.5rem_minmax(0,1fr)] xl:items-start`,children:[(0,G.jsxs)(`div`,{className:`min-w-0 space-y-6`,children:[(0,G.jsx)(Sr,{issues:v,disabled:I,scopeSection:fe}),(0,G.jsx)(An,{issues:v,disabled:I,onAdd:C.add})]}),y?(0,G.jsx)(or,{field:y,index:ee,issues:v,disabled:I,untouched:C.isUntouched(y),onDiscard:()=>C.discard(y.id)},y.id):(0,G.jsx)(Cr,{hasFields:c.fields.length>0})]}),(0,G.jsx)(Jt,{...pe}),(0,G.jsx)(Or,{preview:g.state.step===`review`?g.state.preview:void 0,before:l,after:c,applying:g.applying,error:g.applyError,onApply:e=>void g.confirm(e),onClose:g.resetStep}),(0,G.jsx)(De,{open:re,onOpenChange:E,title:r(`models.builder.deleteTitle`,{label:c.label}),description:r(`models.builder.deleteDescription`),confirmLabel:r(`common.delete`),destructive:!0,onConfirm:()=>ne.mutate({category:e,id:t,expectedVersion:d},{onSuccess:()=>{p(),T.success(r(`models.deleted`)),i({to:`/models`})}})})]})},Ar=({category:e,id:t})=>{let n=ot(e,t);return(0,G.jsx)(ut,{query:n,children:n=>(0,G.jsx)(kr,{category:e,id:t,detail:n},t)})};export{Ar as t};
|
|
2
|
-
//# sourceMappingURL=Builder-
|
|
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{bt as r,i,j as a,p as o,r as s,t as c}from"./cn-M4_WHiur.js";import{C as l,T as u,h as d,u as f}from"./auth-BaVAo0u_.js";import{_ as p,a as m,c as h,d as g,f as _,i as v,j as y,l as ee,m as b,n as x,o as S,p as te,s as ne,t as C,u as re,v as ie}from"./badge-IBeVOhKd.js";import{t as w}from"./UnsavedChangesGuard-Cbfg-Bgj.js";import{G as T,H as ae,R as E,c as D,d as oe,f as se,l as O,o as k,p as A,s as j,t as M,u as ce}from"./InfoHint-Bz_yvehr.js";import{i as N,k as le,n as P}from"./skeleton-CCwdO9oq.js";import{a as ue,c as F,i as de,n as I,t as fe,u as pe}from"./constants-CgUdkWmf.js";import{t as me}from"./useSchemaScopeAccess-bd8RQxuu.js";import{a as he,i as ge,n as _e,o as ve,r as ye,s as be,t as xe}from"./select-De48SQdZ.js";import{a as L,c as Se,i as Ce,n as we,o as R,r as Te,s as Ee,t as De}from"./ConfirmDialog-Tu-gjEwm.js";import{a as Oe,c as ke,f as Ae,i as je,l as Me,n as Ne,o as Pe,r as Fe,s as Ie,t as Le}from"./StepList-DKhkw1hN.js";import{t as Re}from"./ellipsis-xDmHl1SK.js";import{n as ze,t as Be}from"./stableId-rPnYVF-A.js";import{t as Ve}from"./plus-DLRcpVhJ.js";import{l as He,m as Ue,v as We}from"./changeSets-o_G67qPk.js";import{t as Ge}from"./undo-2-BU-uqm7e.js";import{a as Ke,p as qe,r as Je,t as Ye}from"./dropdown-menu-Cl20LCvY.js";import{t as Xe}from"./radio-group-CA3XlQcc.js";import{t as Ze}from"./switch-JmfyFAQG.js";import{A as Qe,D as $e,E as et,G as tt,H as nt,J as rt,K as it,O as at,S as ot,b as st,c as ct,f as lt,g as ut,k as dt,l as ft,m as z,o as B,u as pt,x as mt,y as ht}from"./src-CQu-YxUM.js";import{n as gt,t as _t}from"./settle-LRKtTN_e.js";import{t as V}from"./HintedLabel-USQku9Yt.js";import{t as vt}from"./SharedGlyph-DDPdvsm_.js";import{c as yt,f as bt,h as xt,i as St,l as Ct,o as wt,r as Tt,t as Et,u as Dt}from"./schema--xSR7cf9.js";import{t as Ot}from"./QueryView-Bkyizh1P.js";import{t as kt}from"./useSaveShortcut-rKtp1qK7.js";import{t as At}from"./textarea-eatLAWE_.js";import{t as H}from"./Panel-BdjqCkKs.js";import{a as jt,i as Mt,n as Nt,r as Pt,t as Ft}from"./followPlural-Cuocm4Sv.js";import{t as It}from"./RadioTile-VHTPl88w.js";var Lt={name:`eye-off`,size:24,node:[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]};Lt.node;var Rt=i(Lt),zt={name:`mouse-pointer-click`,size:24,node:[[`path`,{d:`M14 4.1 12 6`,key:`ita8i4`}],[`path`,{d:`m5.1 8-2.9-.8`,key:`1go3kf`}],[`path`,{d:`m6 12-1.9 2`,key:`mnht97`}],[`path`,{d:`M7.2 2.2 8 5.1`,key:`1cfko1`}],[`path`,{d:`M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z`,key:`s0h3yz`}]]};zt.node;var Bt=i(zt),Vt={name:`shapes`,size:24,node:[[`path`,{d:`M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z`,key:`1bo67w`}],[`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`,key:`1bkyp8`}],[`circle`,{cx:`17.5`,cy:`17.5`,r:`3.5`,key:`w3z12y`}]]};Vt.node;var Ht=i(Vt),U=e(t(),1),Ut=(e,t)=>`${e}:${t}`,W=o()(e=>({key:null,category:`model`,base:null,baseVersion:0,draft:null,selection:{type:`definition`},load:(t,n,r)=>e(e=>{let i=Ut(t,n.id),{selection:a}=e;return{key:i,category:t,base:n,baseVersion:r,draft:n,selection:e.key===i&&(a.type===`definition`||n.fields.some(e=>e.id===a.fieldId))?a:{type:`definition`}}}),reset:()=>e({key:null,base:null,baseVersion:0,draft:null,selection:{type:`definition`}}),rebase:(t,n,r)=>e({base:t,baseVersion:n,draft:r}),update:t=>e(e=>e.draft?{draft:t(e.draft)}:{}),updateField:(t,n)=>e(e=>e.draft?{draft:{...e.draft,fields:e.draft.fields.map(e=>e.id===t?n(e):e)}}:{}),select:t=>e({selection:t})})),Wt=Ut,Gt=e=>{let{canShare:t}=me();return e===`network`&&!t},G=e(n(),1),Kt=()=>{let{t:e}=a();return(0,G.jsxs)(L,{children:[(0,G.jsx)(pe,{"aria-hidden":`true`}),(0,G.jsx)(R,{children:e(`models.scope.readOnly`)})]})},qt=({canDiscard:e,canReview:t,reviewing:n,onReview:r,onDiscard:i})=>{let{t:o}=a();return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Te,{tone:`danger`,title:o(`models.builder.discardTitle`),description:o(`models.builder.discardDescription`),confirmLabel:o(`models.builder.discard`),onConfirm:i,trigger:(0,G.jsxs)(N,{type:`button`,variant:`ghost`,disabled:!e,children:[(0,G.jsx)(Ge,{"aria-hidden":`true`}),o(`models.builder.discard`)]})}),(0,G.jsx)(p,{pending:n,pendingLabel:o(`models.builder.planning`),disabled:!t,onClick:r,children:o(`models.builder.review`)})]})},Jt=e=>(0,G.jsx)(`div`,{className:`sticky bottom-0 z-20 -mx-4 flex justify-end gap-2 border-t bg-background/95 px-4 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:-mx-8 sm:px-8 md:bottom-(--statusbar-h) xl:hidden`,children:(0,G.jsx)(qt,{...e})}),Yt=e=>typeof e==`object`&&e?e:{},Xt=({changeId:e,onFinished:t,onDismiss:n})=>{let{t:r}=a(),i=Dt(e),o=i.data?.status,c=(0,U.useRef)(!1);if((0,U.useEffect)(()=>{o&&xt.has(o)&&!c.current&&(c.current=!0,t(o))},[o,t]),o===`activated`)return null;if(o===`failed`||o===`cancelled`){let e=Yt(i.data?.error);return(0,G.jsxs)(L,{variant:`destructive`,children:[(0,G.jsx)(Se,{"aria-hidden":`true`}),(0,G.jsx)(Ee,{children:r(`models.progress.failedTitle`)}),(0,G.jsxs)(R,{children:[(0,G.jsx)(`p`,{children:r(`models.progress.failedDescription`)}),typeof e.invalidCount==`number`?(0,G.jsx)(`p`,{children:r(`models.progress.invalidCount`,{count:e.invalidCount})}):null,typeof e.reason==`string`?(0,G.jsx)(`p`,{children:e.reason}):null,(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,className:`mt-2`,onClick:n,children:r(`common.close`)})]})]})}return(0,G.jsxs)(L,{variant:`info`,role:`status`,children:[(0,G.jsx)(s,{className:`animate-spin`,"aria-hidden":`true`}),(0,G.jsx)(Ee,{children:r(`models.progress.runningTitle`)}),(0,G.jsx)(R,{children:r(`models.progress.runningDescription`)})]})},Zt=(e,t)=>B(e??null)===B(t??null),Qt=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$t=(e,t,n)=>{if(Zt(t,e))return n;if(Zt(n,e))return t;if(Qt(e)&&Qt(t)&&Qt(n)){let r=new Set([...Object.keys(e),...Object.keys(t),...Object.keys(n)]),i={};for(let a of r){let r=$t(e[a],t[a],n[a]);r!==void 0&&(i[a]=r)}return i}return t},en=(e,t)=>e.filter(e=>t.has(e.id)).map(e=>e.id),tn=(e,t,n)=>{let r=new Map(e.map(e=>[e.id,e])),i=new Map(t.map(e=>[e.id,e])),a=new Map(n.map(e=>[e.id,e])),[o,s]=Zt(en(t,r),en(e,i))?[n,t]:[t,n];return[...new Set([...o,...s].map(e=>e.id))].flatMap(e=>{let t=r.get(e),n=i.get(e),o=a.get(e);return t&&!n?[]:t&&!o?n&&!Zt(n,t)?[n]:[]:t?[$t(t,n,o)]:[n??o]})},nn=(e,t,n)=>{let{fields:r,...i}=e,{fields:a,...o}=t,{fields:s,...c}=n;return{...$t(i,o,c),fields:tn(r,a,s)}},rn=(e,t)=>{let n=r(),i=W(e=>e.load),a=W(e=>e.rebase);return(0,U.useCallback)(async r=>{let o=await n.fetchQuery({...Et(e,t),staleTime:0}),{base:s,draft:c}=W.getState();return r===`rebase`&&s&&c?a(o.definition,o.version,nn(s,c,o.definition)):i(e,o.definition,o.version),o},[n,e,t,i,a])},an=(e,t,n)=>{let{t:r}=a(),i=St(),o=rn(e,t);return async a=>{let s=W.getState().baseVersion;try{await i.mutateAsync({category:e,id:t,input:{scope:a,version:s}})}catch(e){if(d(e,`SCHEMA_VERSION_CONFLICT`)){n();return}throw e}await o(`replace`),T.success(r(a===`network`?`models.scope.shared`:`models.scope.kept`))}},K=({title:e,titleId:t,className:n,children:r})=>(0,G.jsxs)(`section`,{className:c(`space-y-4 border-t pt-5 first:border-t-0 first:pt-0`,n),children:[(0,G.jsx)(`h3`,{id:t,className:`text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:e}),(0,G.jsx)(ce,{className:`gap-5`,children:r})]}),on=({category:e,id:t,label:n,scope:r,blocked:i,locked:o,onConflict:s})=>{let{t:c}=a(),l=f().data?.site,{canShare:u}=me(),d=an(e,t,s),p=(0,U.useId)(),m=r===`network`,h=m?`site`:`network`,g=l?.name??``;return(0,G.jsxs)(K,{title:c(`contentTypes.availableOn`),children:[(0,G.jsxs)(`p`,{className:`flex items-center gap-1.5 text-sm`,"data-scope":r,children:[m?(0,G.jsx)(vt,{}):null,m?c(`contentTypes.sharedWithAllSites`):c(`models.scope.onlyOn`,{site:g})]}),u?(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(Te,{tone:`default`,title:m?c(`models.scope.keepTitle`,{label:n,site:g}):c(`models.scope.shareTitle`,{label:n}),description:c(m?`models.scope.keepDescription`:`models.scope.shareDescription`),confirmLabel:c(m?`models.scope.keep`:`models.scope.share`),pendingLabel:c(`common.saving`),onConfirm:()=>d(h),trigger:(0,G.jsx)(N,{type:`button`,variant:`outline`,size:`sm`,disabled:i||o,"aria-describedby":i?p:void 0,children:c(m?`models.scope.keep`:`models.scope.share`)})}),i?(0,G.jsx)(M,{about:c(m?`models.scope.keep`:`models.scope.share`),id:p,children:c(`models.scope.blocked`)}):null]}):null]})},sn={enum:{values:[]},relation:{target:``,cardinality:`one`},component:{component:``},dynamiczone:{components:[]}},cn=(e,t)=>{let n={id:Be(),apiKey:t.apiKey,label:t.label,type:t.type,settings:sn[t.type]??{}};return ut({...e,fields:[n]}).fields[0]},q=(e,t,n)=>{let r={...e};return n===void 0?delete r[t]:r[t]=n,r},ln=(e,t,n)=>({...e,settings:q(e.settings,t,n)}),un=(e,t)=>B(ut(e))!==B(ut(t)),dn=(e,t,n)=>{if(t===n||t<0||n<0||t>=e.length||n>=e.length)return[...e];let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r},fn=(e,t)=>{let n=e.fields.filter(e=>e.id!==t).map(e=>e.type===`slug`&&e.settings.sourceFieldId===t?ln(e,`sourceFieldId`,void 0):e),r={...e.display};return r.titleFieldId===t&&delete r.titleFieldId,`listFieldIds`in e.display&&e.display.listFieldIds&&(r.listFieldIds=e.display.listFieldIds.filter(e=>e!==t)),`defaultSort`in e.display&&e.display.defaultSort?.fieldId===t&&delete r.defaultSort,e.display.groups&&(r.groups=e.display.groups.map(e=>({...e,fieldIds:e.fieldIds.filter(e=>e!==t)}))),pn({...e,fields:n,display:r})},pn=e=>{if(e.kind===`component`)return e;let{canvasFieldIds:t,coverFieldId:n,stripFieldIds:r}=e.display;if(t===void 0&&n===void 0&&r===void 0)return e;let i=new Map(e.fields.map(e=>[e.id,e])),a=(e,t)=>{let n=i.get(e);return n!==void 0&&t(n)},o=t?.filter(e=>a(e,mt)),s=n!==void 0&&a(n,ot)&&!o?.includes(n)?n:void 0,c=r?.filter(e=>i.has(e)&&e!==s&&!(o??[]).includes(e)),l=q(e.display,`canvasFieldIds`,o);return l=q(l,`coverFieldId`,s),l=q(l,`stripFieldIds`,c),{...e,display:l}},mn=e=>{if(at(e.editor.id))return e;let t=dt(e);return t.some(t=>t.id===e.editor.id)?e:{...e,editor:{id:t[0]?.id??et[e.type],options:{}}}},hn=(e,t,n)=>{let r=ft(e,{previous:t});if(!r.ok)return r.issues;let i=[...n.filter(t=>t.id!==e.id),r.definition];return ct(i).filter(t=>t.definitionId===void 0||t.definitionId===e.id)},J=(e,t)=>e.filter(e=>e.path===t||e.path.startsWith(`${t}/`)),gn=e=>`/fields/${e}`,Y=({id:e,issues:t})=>{if(t.length===0)return null;let n=[...new Set(t.map(Pt))];return(0,G.jsx)(O,{id:e,errors:n.map(e=>({message:e}))})},X=e=>e.fields.filter(t=>{let n={...e,fields:[t],display:{titleFieldId:t.id}};return!pt(n).some(e=>e.path===`/display/titleFieldId`)}),_n=(e,t)=>{let n={...e,fields:[...e.fields,t]};return e.display.titleFieldId===void 0&&X(e).length===0&&X(n).some(e=>e.id===t.id)?{...n,display:{...n.display,titleFieldId:t.id}}:n},vn=e=>{let t=e.fields.filter(e=>!e.deprecated),n=st(e),r=n.canvas.map(e=>e.id),i=t.filter(e=>mt(e)&&!r.includes(e.id));return{coverOptions:t.filter(ot),canvasOptions:[...n.canvas,...i],canvas:r,stripOptions:n.properties}},yn=new Set(lt.map(ht)),bn=(e,t)=>{let n=new Set(e.fields.map(e=>e.label)),r=new Set(e.fields.map(e=>ht(e.apiKey)));for(let e=1;;e+=1){let i=e===1?t:`${t} ${e}`,a=Nt(i),o=ht(a);if(!n.has(i)&&!r.has(o)&&!yn.has(o))return{label:i,apiKey:a}}},xn=(e,t,n)=>{let r=e.fields.find(e=>e.id===t);if(!r||r.type===n)return e;let i=cn(e,{type:n,label:r.label,apiKey:r.apiKey}),{defaultValue:a,...o}=r,s={...o,type:n,settings:i.settings,editor:i.editor},c=e.fields.map(e=>e.id===t?s:e),l={...e,fields:e.fields.filter(e=>e.id!==t)},u={...e.display},d={...e,fields:c,display:u},f=X(d).some(e=>e.id===t);return u.titleFieldId===t&&!f?delete u.titleFieldId:u.titleFieldId===void 0&&f&&X(l).length===0&&(u.titleFieldId=t),d},Sn=(e,t,n,r)=>{let i=xn(e,t,n);if(r?.type!==n)return i;let{settings:a,editor:o}=r,s=r.defaultValue;return{...i,fields:i.fields.map(e=>e.id===t?{...e,settings:a,editor:o,...s===void 0?{}:{defaultValue:s}}:e)}},Cn=`add-field-button`,wn=e=>`field-${e}-label`,Tn=e=>requestAnimationFrame(e),En=()=>{let{t:e}=a(),t=W(e=>e.update),n=W(e=>e.select),[r,i]=(0,U.useState)(null);return{add:()=>{let{draft:r}=W.getState();if(!r)return;let a=cn(r,{type:`string`,...bn(r,e(`models.builder.newField`))});t(e=>_n(e,a)),n({type:`field`,fieldId:a.id}),i(a),Tn(()=>{let e=document.getElementById(wn(a.id));e instanceof HTMLInputElement&&(e.scrollIntoView({block:`center`}),e.focus({preventScroll:!0}),e.select())})},isUntouched:e=>r!==null&&e.id===r.id&&B(e)===B(r),discard:e=>{t(t=>fn(t,e)),n({type:`definition`}),i(null),Tn(()=>document.getElementById(Cn)?.focus())}}},Dn=e=>`field-handle-${e}`,On=({field:e,index:t,total:n,selected:r,hasIssues:i,showLocalized:o,dropTarget:s,disabled:l,onSelect:u,onMove:d,onDragStart:f,onDragOver:p,onDrop:m,onDragEnd:h})=>{let{t:g}=a(),_=I[e.type];return(0,G.jsxs)(`li`,{draggable:!l,onDragStart:f,onDragOver:p,onDrop:m,onDragEnd:h,"data-selected":r||void 0,className:c(`group/row flex h-11 items-center gap-0.5 rounded-lg border border-transparent pr-1 transition-colors hover:bg-muted/50 data-[selected]:bg-accent`,s&&`border-dashed border-primary`),children:[(0,G.jsx)(`button`,{type:`button`,id:Dn(e.id),"aria-label":g(`models.builder.reorder`,{label:e.label}),"aria-describedby":`field-reorder-help`,onKeyDown:e=>{e.key===`ArrowUp`&&t>0?(e.preventDefault(),d(t-1)):e.key===`ArrowDown`&&t<n-1&&(e.preventDefault(),d(t+1))},disabled:l,className:`flex h-9 w-6 shrink-0 cursor-grab items-center justify-center rounded-md text-muted-foreground outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed`,children:(0,G.jsx)(ze,{className:`size-4`,"aria-hidden":`true`})}),(0,G.jsxs)(`button`,{type:`button`,onClick:u,"aria-current":r||void 0,className:`flex h-9 min-w-0 flex-1 items-center gap-2.5 rounded-md px-1.5 text-left outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:[(0,G.jsx)(_,{className:c(`size-4 shrink-0 text-muted-foreground`,r&&`text-accent-foreground`),"aria-hidden":`true`}),(0,G.jsxs)(`span`,{className:`min-w-0 flex-1 leading-tight`,children:[(0,G.jsx)(`span`,{className:`block truncate text-sm font-medium`,children:e.label}),(0,G.jsx)(`span`,{className:`block truncate font-mono text-2xs text-muted-foreground`,children:e.apiKey})]}),(0,G.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[e.required?(0,G.jsx)(C,{variant:`outline`,children:g(`models.builder.requiredBadge`)}):null,o&&e.localized?(0,G.jsx)(C,{variant:`outline`,children:g(`models.builder.localizedBadge`)}):null,e.public?null:(0,G.jsxs)(`span`,{title:g(`models.builder.hiddenBadge`),children:[(0,G.jsx)(Rt,{className:`size-4 text-muted-foreground`,"aria-hidden":`true`}),(0,G.jsx)(`span`,{className:`sr-only`,children:g(`models.builder.hiddenBadge`)})]}),i?(0,G.jsxs)(`span`,{title:g(`models.builder.hasProblems`),children:[(0,G.jsx)(Se,{className:`size-4 text-destructive`,"aria-hidden":`true`}),(0,G.jsx)(`span`,{className:`sr-only`,children:g(`models.builder.hasProblems`)})]}):null]})]}),(0,G.jsxs)(`span`,{className:`hidden shrink-0 items-center group-focus-within/row:flex group-hover/row:flex`,children:[(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-xs`,tabIndex:-1,disabled:l||t===0,"aria-label":g(`models.builder.moveUp`,{label:e.label}),onClick:()=>d(t-1),children:(0,G.jsx)(ve,{"aria-hidden":`true`})}),(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-xs`,tabIndex:-1,disabled:l||t===n-1,"aria-label":g(`models.builder.moveDown`,{label:e.label}),onClick:()=>d(t+1),children:(0,G.jsx)(be,{"aria-hidden":`true`})})]})]})},kn=[],An=({issues:e,disabled:t,onAdd:n})=>{let{t:r}=a(),i=W(e=>e.draft?.fields??kn),o=W(e=>e.draft?.kind!==`component`&&e.draft?.localized===!0),s=W(e=>e.selection),c=W(e=>e.select),l=W(e=>e.update),u=(0,U.useRef)(null),[d,f]=(0,U.useState)(null),[p,m]=(0,U.useState)(``),h=(e,t,n)=>{let a=i[e];a&&e!==t&&(l(n=>({...n,fields:dn(n.fields,e,t)})),m(r(`models.builder.moved`,{label:a.label,position:t+1,total:i.length})),n&&requestAnimationFrame(()=>document.getElementById(Dn(a.id))?.focus()))},g=J(e,`/fields`).filter(e=>!/^\/fields\/\d+/.test(e.path)),_=r(`models.builder.fields`,{count:i.length});return(0,G.jsxs)(H,{title:r(`models.builder.fieldsTitle`),flush:!0,actions:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(C,{variant:`secondary`,"aria-hidden":`true`,children:i.length}),(0,G.jsxs)(N,{id:Cn,type:`button`,size:`sm`,onClick:n,disabled:t,children:[(0,G.jsx)(Ve,{"aria-hidden":`true`}),r(`models.builder.addField`)]})]}),bodyClassName:`p-2`,children:[g.length>0?(0,G.jsx)(`div`,{className:`px-3 py-2`,children:(0,G.jsx)(Y,{issues:g})}):null,i.length===0?(0,G.jsx)(`p`,{className:`px-3 py-6 text-center text-meta text-muted-foreground`,children:r(`models.builder.noFields`)}):(0,G.jsx)(`ol`,{className:`space-y-0.5`,"aria-label":_,children:i.map((n,r)=>(0,G.jsx)(On,{field:n,index:r,total:i.length,selected:s.type===`field`&&s.fieldId===n.id,hasIssues:J(e,gn(r)).length>0,showLocalized:o,dropTarget:d===r,disabled:t,onSelect:()=>c({type:`field`,fieldId:n.id}),onMove:e=>h(r,e,!0),onDragStart:e=>{u.current=r,e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,n.id)},onDragOver:e=>{u.current!==null&&(e.preventDefault(),f(r))},onDrop:e=>{e.preventDefault(),u.current!==null&&h(u.current,r,!1),u.current=null,f(null)},onDragEnd:()=>{u.current=null,f(null)}},n.id))}),(0,G.jsx)(`p`,{id:`field-reorder-help`,className:`sr-only`,children:r(`models.builder.reorderHelp`)}),(0,G.jsx)(`p`,{"aria-live":`polite`,className:`sr-only`,children:p})]})},jn=new Set([`string`,`text`,`slug`,`email`,`url`,`uid`,`date`,`datetime`,`time`,`decimal`,`biginteger`]),Mn=e=>jn.has(e.type)||e.type===`number`||e.type===`integer`||e.type===`boolean`||e.type===`enum`&&!e.settings.multiple,Nn=(e,{hint:t,description:n,issues:r=[]})=>{let i=t?`${e}-hint`:void 0,a=n?`${e}-description`:void 0,o=r.length>0?`${e}-error`:void 0;return{hintId:i,descriptionId:a,errorId:o,describedBy:gt(i,a,o)}},Z=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,value:o,onChange:s,emptyAsUndefined:l=!1,multiline:u=!1,monospace:d=!1,maxLength:f})=>{let p=Nn(e,{hint:n,description:r,issues:i}),m={id:e,value:o??``,disabled:a,maxLength:f,"aria-invalid":i.length>0||void 0,"aria-describedby":p.describedBy,onChange:e=>s(l&&e.target.value===``?void 0:e.target.value)};return(0,G.jsxs)(k,{"data-invalid":i.length>0||void 0,children:[(0,G.jsx)(V,{htmlFor:e,label:t,hint:n,hintId:p.hintId}),u?(0,G.jsx)(At,{...m,rows:2}):(0,G.jsx)(P,{...m,autoComplete:`off`,spellCheck:!d,className:c(d&&`font-mono`)}),r?(0,G.jsx)(D,{id:p.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:p.errorId,issues:i})]})},Pn=fe.flatMap(e=>e.types),Fn=e=>tt.includes(e),In=({labelledBy:e,value:t,unavailable:n,unavailableReason:r,notes:i,limitedNote:o,disabled:s,onChange:c})=>{let{t:l}=a(),u=(0,U.useId)();return(0,G.jsxs)(`div`,{className:`@container space-y-3`,children:[(0,G.jsx)(Xe,{value:t,disabled:s,onValueChange:e=>Fn(e)&&c(e),"aria-labelledby":e,"aria-describedby":u,className:`grid-cols-4 gap-2 @xl:grid-cols-6`,children:Pn.map(e=>(0,G.jsx)(It,{value:e,variant:`tile`,icon:I[e],label:l(`models.dataTypes.${e}.name`),disabled:n.has(e),description:n.has(e)?r(e):l(`models.dataTypes.${e}.description`)},e))}),(0,G.jsxs)(`p`,{id:u,className:`text-meta text-muted-foreground`,children:[(0,G.jsx)(`span`,{className:`font-semibold text-foreground`,children:l(`models.dataTypes.${t}.name`)}),` · `,l(`models.dataTypes.${t}.description`)]}),i.length>0?(0,G.jsx)(`p`,{role:`status`,className:`text-meta font-medium text-warning`,children:i.join(` `)}):null,o?(0,G.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:o}):null]})},Ln=(e,t)=>{if(e.trim()===``)return;let n=Number(e);if(Number.isFinite(n))return t?Math.trunc(n):n},Rn=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,value:o,onChange:s,integer:c=!1,min:l,max:u})=>{let[d,f]=(0,U.useState)(o===void 0?``:String(o)),[p,m]=(0,U.useState)(o);o!==p&&(m(o),Ln(d,c)!==o&&f(o===void 0?``:String(o)));let h=Nn(e,{hint:n,description:r,issues:i});return(0,G.jsxs)(k,{"data-invalid":i.length>0||void 0,children:[(0,G.jsx)(V,{htmlFor:e,label:t,hint:n,hintId:h.hintId}),(0,G.jsx)(P,{id:e,type:`number`,inputMode:c?`numeric`:`decimal`,step:c?1:`any`,min:l,max:u,value:d,disabled:a,"aria-invalid":i.length>0||void 0,"aria-describedby":h.describedBy,onChange:e=>{let t=Ln(e.target.value,c);f(e.target.value),m(t),s(t)}}),r?(0,G.jsx)(D,{id:h.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:h.errorId,issues:i})]})},zn=`__unset__`,Q=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:o,value:s,options:c,onChange:l,unsetLabel:u,placeholder:d})=>{let{t:f}=a(),p=Nn(e,{hint:n,description:r,issues:i}),m=s!==void 0&&c.some(e=>e.value===s);return(0,G.jsxs)(k,{"data-invalid":i.length>0||void 0,children:[(0,G.jsx)(V,{htmlFor:e,label:t,hint:n,hintId:p.hintId}),(0,G.jsxs)(xe,{value:m?s:u?zn:``,onValueChange:e=>l(e===zn?void 0:e),disabled:o,children:[(0,G.jsx)(ge,{id:e,className:`w-full`,"aria-invalid":i.length>0||void 0,"aria-describedby":p.describedBy,children:(0,G.jsx)(he,{placeholder:d??f(`models.choose`)})}),(0,G.jsxs)(_e,{children:[u?(0,G.jsx)(ye,{value:zn,children:u}):null,c.map(e=>(0,G.jsx)(ye,{value:e.value,children:e.label},e.value))]})]}),r?(0,G.jsx)(D,{id:p.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:p.errorId,issues:i})]})},Bn=({field:e,issues:t,disabled:n,onChange:r})=>{let{t:i}=a(),o={id:`field-${e.id}-default`,label:i(`models.builder.defaultValue`),hint:i(`models.builder.defaultValueHint`),issues:t,disabled:n},s=e.defaultValue;return e.type===`number`||e.type===`integer`?(0,G.jsx)(Rn,{...o,integer:e.type===`integer`,value:typeof s==`number`?s:void 0,onChange:r}):e.type===`boolean`?(0,G.jsx)(Q,{...o,value:typeof s==`boolean`?String(s):void 0,options:[{value:`true`,label:i(`models.builder.booleanTrue`)},{value:`false`,label:i(`models.builder.booleanFalse`)}],unsetLabel:i(`models.notSet`),onChange:e=>r(e===void 0?void 0:e===`true`)}):e.type===`enum`?(0,G.jsx)(Q,{...o,value:typeof s==`string`?s:void 0,options:e.settings.values.filter(e=>e.value!==``).map(e=>({value:e.value,label:e.label||e.value})),unsetLabel:i(`models.notSet`),onChange:r}):(0,G.jsx)(Z,{...o,value:typeof s==`string`?s:void 0,onChange:r,emptyAsUndefined:!0})},Vn=e=>e?.enum?.every(e=>typeof e==`string`)?e.enum:void 0,Hn=e=>{let t=Vn(e);if(t)return{kind:`choice`,options:t};switch(e.type){case`boolean`:return{kind:`boolean`};case`integer`:return{kind:`integer`,...e.minimum===void 0?{}:{minimum:e.minimum},...e.maximum===void 0?{}:{maximum:e.maximum}};case`number`:return{kind:`number`,...e.minimum===void 0?{}:{minimum:e.minimum}};case`string`:return{kind:`text`,...e.maxLength===void 0?{}:{maxLength:e.maxLength}};case`array`:{let t=Vn(e.items);return t?{kind:`choices`,options:t}:e.items?.type===`string`?{kind:`textList`}:{kind:`other`}}default:return{kind:`other`}}},Un=e=>{let t=e,n=new Set(t.required??[]);return Object.entries(t.properties??{}).map(([e,t])=>({key:e,control:Hn(t),required:n.has(e)}))},$=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,value:o,options:s,onChange:c,locked:l=[]})=>{let u=(e,t)=>{let n=new Set(o);t?n.add(e):n.delete(e),c(s.map(e=>e.value).filter(e=>n.has(e)))};return(0,G.jsxs)(A,{"data-invalid":i.length>0||void 0,className:`gap-3`,children:[(0,G.jsxs)(se,{variant:`label`,className:`mb-0 flex items-center gap-1`,children:[t,n?(0,G.jsx)(M,{about:t,children:n}):null]}),r?(0,G.jsx)(D,{children:r}):null,(0,G.jsx)(`div`,{"data-slot":`checkbox-group`,className:`grid gap-3 @sm/field-group:grid-cols-2`,children:s.map(t=>{let n=`${e}-${t.value}`;return(0,G.jsxs)(k,{orientation:`horizontal`,children:[(0,G.jsx)(we,{id:n,checked:o.includes(t.value),onCheckedChange:e=>u(t.value,e===!0),disabled:a||l.includes(t.value)}),(0,G.jsx)(oe,{htmlFor:n,className:`font-normal`,children:t.label})]},t.value)})}),(0,G.jsx)(Y,{issues:i})]})},Wn=({id:e,label:t,hint:n,description:r,issues:i=[],disabled:a,checked:o,onChange:s,layout:l=`row`})=>{let u=Nn(e,{hint:n,description:r,issues:i}),d=(0,G.jsx)(Ze,{id:e,checked:o,onCheckedChange:s,disabled:a,"aria-invalid":i.length>0||void 0,"aria-describedby":u.describedBy,className:c(l===`compact`&&`mt-0.5 self-start`)});return(0,G.jsxs)(k,{orientation:`horizontal`,"data-invalid":i.length>0||void 0,children:[l===`compact`?d:null,(0,G.jsxs)(j,{children:[(0,G.jsx)(V,{htmlFor:e,label:t,hint:n,hintId:u.hintId}),r?(0,G.jsx)(D,{id:u.descriptionId,children:r}):null,(0,G.jsx)(Y,{id:u.errorId,issues:i})]}),l===`row`?d:null]})},Gn=/\s*,\s*/,Kn=({idPrefix:e,property:{key:t,control:n,required:r},value:i,onChange:o,issues:s,description:c,hint:l,disabled:u})=>{let{t:d}=a(),f={id:`${e}-${t}`,label:Ie(t),issues:s,disabled:u,description:c,hint:l};switch(n.kind){case`boolean`:return(0,G.jsx)(Wn,{...f,checked:i===!0,onChange:e=>o(e||void 0)});case`integer`:case`number`:return(0,G.jsx)(Rn,{...f,integer:n.kind===`integer`,min:n.minimum,max:n.kind===`integer`?n.maximum:void 0,value:typeof i==`number`?i:void 0,onChange:o});case`choice`:return(0,G.jsx)(Q,{...f,value:typeof i==`string`?i:void 0,options:n.options.map(e=>({value:e,label:ke(e)})),onChange:o,...r?{}:{unsetLabel:d(`models.notSet`)}});case`choices`:return(0,G.jsx)($,{...f,value:Array.isArray(i)?i:[],options:n.options.map(e=>({value:e,label:ke(e)})),onChange:e=>o(e.length>0?e:void 0)});case`textList`:return(0,G.jsx)(Z,{...f,description:c??d(`models.commaSeparated`),value:Array.isArray(i)?i.join(`, `):``,onChange:e=>{let t=(e??``).split(Gn).filter(Boolean);o(t.length>0?t:void 0)}});case`text`:return(0,G.jsx)(Z,{...f,maxLength:n.maxLength,value:typeof i==`string`?i:void 0,onChange:o,emptyAsUndefined:!r});default:return null}},qn=({field:e,path:t,issues:n,disabled:r,onChange:i})=>{let{t:o}=a(),{id:s,options:c}=e.editor,l=dt(e).map(e=>e.id),u=at(s)||!l.includes(s)?[...l,s]:l,d=$e.get(s),f=d?Un(d.optionsSchema):[];return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Q,{id:`field-${e.id}-editor`,label:o(`models.builder.editor`),hint:o(`models.builder.editorHint`),value:s,options:u.map(e=>({value:e,label:Pe(e)})),onChange:e=>e&&i({id:e,options:{}}),issues:J(n,`${t}/editor/id`),disabled:r}),f.map(a=>(0,G.jsx)(Kn,{idPrefix:`field-${e.id}-editor-options`,property:a,value:c[a.key],onChange:e=>i({id:s,options:q(c,a.key,e)}),issues:J(n,`${t}/editor/options/${a.key}`),disabled:r},`${s}-${a.key}`))]})},Jn={required:{label:`models.builder.required`,hint:`models.builder.requiredHint`},unique:{label:`models.builder.unique`,hint:`models.builder.uniqueHint`},localized:{label:`models.builder.fieldLocalized`,hint:`models.builder.fieldLocalizedHint`},public:{label:`models.builder.public`,hint:`models.builder.publicHint`},filterable:{label:`models.builder.filterable`,hint:`models.builder.indexHint`},sortable:{label:`models.builder.sortable`,hint:`models.builder.indexHint`},deprecated:{label:`models.builder.deprecated`,hint:`models.builder.deprecatedHint`}},Yn=(e,t)=>{let n=t.kind===`component`,r=t.kind!==`component`&&t.localized,i=!n&&it.has(e.type)&&!(e.type===`enum`&&e.settings.multiple);return[`required`,...rt.has(e.type)&&!n?[`unique`]:[],...r?[`localized`]:[],`public`,...i?[`filterable`,`sortable`]:[],`deprecated`]},Xn=({field:e,draft:t,at:n,disabled:r,onChange:i})=>{let{t:o}=a();return(0,G.jsx)(`div`,{className:`grid gap-x-6 gap-y-4 @md/field-group:grid-cols-2`,children:Yn(e,t).map(t=>(0,G.jsx)(Wn,{id:`field-${e.id}-${t}`,layout:`compact`,label:o(Jn[t].label),hint:o(Jn[t].hint),checked:e[t],onChange:e=>i({[t]:e}),issues:n(t),disabled:r},t))})},Zn=(e,t,n)=>t.type===n?null:Me({kind:`field.type`,definitionId:e.id,fieldId:t.id,from:t.type,to:n},{before:e,after:xn(e,t.id,n)}),Qn=new Set,$n=(e,t,n)=>{let{t:r}=a(),i=(0,U.useMemo)(()=>e&&t?new Set(tt.filter(n=>Zn(e,t,n)?.supported===!1)):Qn,[e,t]),o=(0,U.useMemo)(()=>e&&t?Zn(e,t,n):null,[e,t,n]),s=[];o?.category===`conversion`?s.push(r(`models.builder.typeConverted`)):o?.category===`validation`&&s.push(r(`models.builder.typeChecked`)),o?.breaking&&s.push(r(`models.builder.typeBreaking`)),o?.destructive&&s.push(r(`models.builder.typeDestructive`));let c=t?r(`models.dataTypes.${t.type}.name`):``;return{unavailable:i,unavailableReason:e=>r(`models.builder.typeUnsupported`,{from:c,to:r(`models.dataTypes.${e}.name`)}),notes:s,limitedNote:i.size>0?r(`models.builder.typeLimited`,{type:c}):void 0}},er=({idPrefix:e,field:t,path:n,issues:r,disabled:i,onChange:o})=>{let{t:s}=a(),c=t.settings.values,l=(e,t)=>o(c.map((n,r)=>r===e?{...n,...t}:n)),u=r.filter(e=>e.path===n);return(0,G.jsxs)(A,{className:`gap-3`,"data-invalid":u.length>0||void 0,children:[(0,G.jsxs)(se,{variant:`label`,className:`mb-0 flex items-center gap-1`,children:[s(`models.properties.values`),(0,G.jsx)(M,{about:s(`models.properties.values`),children:s(`models.builder.enumValuesHint`)})]}),c.length>0?(0,G.jsx)(`ol`,{className:`space-y-2`,children:c.map((t,a)=>{let u=J(r,`${n}/${a}`),d=`${e}-value-${a}`,f=`${e}-label-${a}`;return(0,G.jsxs)(`li`,{className:`space-y-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`label`,{htmlFor:f,className:`sr-only`,children:s(`models.builder.enumLabel`,{position:a+1})}),(0,G.jsx)(P,{id:f,value:t.label,placeholder:s(`models.builder.enumLabelPlaceholder`),disabled:i,onChange:e=>l(a,{label:e.target.value})}),(0,G.jsx)(`label`,{htmlFor:d,className:`sr-only`,children:s(`models.builder.enumValue`,{position:a+1})}),(0,G.jsx)(P,{id:d,value:t.value,placeholder:s(`models.builder.enumValuePlaceholder`),className:`font-mono`,spellCheck:!1,disabled:i,"aria-invalid":u.length>0||void 0,onChange:e=>l(a,{value:e.target.value})}),(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-sm`,disabled:i,"aria-label":s(`models.builder.enumRemove`,{position:a+1}),onClick:()=>o(c.filter((e,t)=>t!==a)),children:(0,G.jsx)(E,{"aria-hidden":`true`})})]}),(0,G.jsx)(Y,{issues:u})]},a)})}):null,(0,G.jsx)(Y,{issues:u}),(0,G.jsxs)(N,{type:`button`,variant:`outline`,size:`sm`,className:`w-fit`,disabled:i,onClick:()=>o([...c,{value:``,label:``}]),children:[(0,G.jsx)(Ve,{"aria-hidden":`true`}),s(`models.builder.enumAdd`)]})]})},tr=new Set([`formatVersion`]),nr={date:`models.formats.date`,datetime:`models.formats.datetime`,time:`models.formats.time`,decimal:`models.formats.decimal`,biginteger:`models.formats.biginteger`},rr=new Set([`string`,`text`]),ir=({field:e,draft:t,path:n,issues:r,disabled:i,onChange:o})=>{let{t:s}=a(),{definitions:c}=Tt(),l=e.settings,u=`${n}/settings`,d=`field-${e.id}-settings`,f=[...(c??[]).map(({definition:e})=>e).filter(e=>e.id!==t.id),t],p=f.filter(e=>e.kind!==`component`),m=f.filter(e=>e.kind===`component`&&e.id!==t.id),h=e=>({value:e.id,label:e.label}),g=e=>J(r,`${u}/${e}`),_=n=>{let{key:a}=n,c={id:`${d}-${a}`,issues:g(a),disabled:i};if(e.type===`enum`&&a===`values`)return(0,G.jsx)(er,{idPrefix:c.id,field:e,path:`${u}/values`,issues:r,disabled:i,onChange:e=>o(`values`,e)},a);if(a===`target`)return(0,G.jsx)(Q,{...c,label:s(`models.properties.target`),value:l.target,options:p.map(h),onChange:e=>o(`target`,e??``),placeholder:s(`models.builder.chooseModel`)},a);if(a===`component`)return(0,G.jsx)(Q,{...c,label:s(`models.properties.component`),value:l.component,options:m.map(h),onChange:e=>o(`component`,e??``),placeholder:s(`models.builder.chooseComponent`),...m.length===0?{description:s(`models.builder.noComponents`)}:{}},a);if(a===`components`)return(0,G.jsx)($,{...c,label:s(`models.properties.components`),value:l.components??[],options:m.map(h),onChange:e=>o(`components`,e),...m.length===0?{description:s(`models.builder.noComponents`)}:{}},a);if(a===`sourceFieldId`)return(0,G.jsx)(Q,{...c,label:s(`models.properties.sourceFieldId`),hint:s(`models.builder.sourceFieldHint`),value:l.sourceFieldId,options:t.fields.filter(t=>t.id!==e.id&&rr.has(t.type)).map(e=>({value:e.id,label:e.label})),onChange:e=>o(`sourceFieldId`,e),unsetLabel:s(`models.notSet`)},a);let f=n.control.kind===`text`&&e.type in nr?nr[e.type]:void 0;return(0,G.jsx)(Kn,{idPrefix:d,property:n,value:l[a],onChange:e=>o(a,e),issues:c.issues,disabled:i,description:f===void 0?void 0:s(f),hint:a===`pattern`?s(`models.builder.patternHint`):void 0},a)},v=Un(Qe[e.type]).filter(e=>!tr.has(e.key)),y=new Set(v.map(e=>e.key)),ee=J(r,u).filter(e=>!y.has(e.path.slice(u.length+1).split(`/`)[0]??``));return v.length===0?(0,G.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:s(`models.builder.noSettings`)}):(0,G.jsxs)(G.Fragment,{children:[v.map(_),(0,G.jsx)(Y,{issues:ee})]})},ar=new Set([`label`,`apiKey`,`description`,`required`,`unique`,`filterable`,`sortable`,`public`,`localized`,`deprecated`,`defaultValue`,`editor`,`settings`]),or=({field:e,index:t,issues:n,disabled:r,untouched:i,onDiscard:o})=>{let{t:s}=a(),c=W(e=>e.draft),l=W(e=>e.base),u=W(e=>e.updateField),d=W(e=>e.update),f=W(e=>e.select),p=l?.fields.find(t=>t.id===e.id),m=$n(l,p,e.type);if(!c)return null;let h=gn(t),g=e=>J(n,`${h}/${e}`),_=J(n,h).filter(e=>!ar.has(e.path.slice(h.length+1).split(`/`)[0]??``)),v=t=>u(e.id,e=>({...e,...t})),y=t=>`field-${e.id}-${t}`,ee=p!==void 0&&p.apiKey!==e.apiKey,b=l!==null&&p===void 0,x=e.label||s(`models.builder.untitled`),S=t=>{let n=b&&e.apiKey===Nt(e.label);v({label:t,...n?{apiKey:Nt(t)}:{}})};return(0,G.jsx)(`div`,{onKeyDown:e=>{e.key===`Escape`&&!e.nativeEvent.defaultPrevented&&i&&e.target instanceof Node&&e.currentTarget.contains(e.target)&&(e.preventDefault(),o())},children:(0,G.jsxs)(H,{"aria-label":s(`models.builder.fieldProperties`,{label:x}),flush:!0,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 border-b px-5 py-4`,children:[(0,G.jsx)(ne,{icon:I[e.type]}),(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-x-2.5 gap-y-1`,children:[(0,G.jsx)(`h2`,{className:`min-w-0 truncate text-base font-semibold`,children:x}),(0,G.jsx)(C,{variant:`secondary`,children:s(`models.dataTypes.${e.type}.name`)})]}),(0,G.jsxs)(N,{type:`button`,variant:`destructive-ghost`,size:`sm`,disabled:r,onClick:()=>{d(t=>fn(t,e.id)),f({type:`definition`})},children:[(0,G.jsx)(E,{"aria-hidden":`true`}),s(`models.builder.removeField`)]})]}),(0,G.jsxs)(`div`,{className:`space-y-5 p-5`,children:[(0,G.jsx)(Y,{issues:_}),(0,G.jsx)(K,{title:s(`models.builder.dataType`),titleId:y(`type-heading`),children:(0,G.jsx)(In,{labelledBy:y(`type-heading`),value:e.type,...m,disabled:r,onChange:t=>d(n=>pn(Sn(n,e.id,t,p)))})}),(0,G.jsxs)(K,{title:s(`models.builder.general`),children:[(0,G.jsxs)(`div`,{className:`grid items-start gap-5 @lg/field-group:grid-cols-2`,children:[(0,G.jsx)(Z,{id:wn(e.id),label:s(`models.label`),value:e.label,onChange:e=>S(e??``),issues:g(`label`),disabled:r}),(0,G.jsx)(Z,{id:y(`apiKey`),label:s(`models.apiKey`),hint:s(`models.fieldApiKeyHint`),description:ee?s(`models.builder.apiKeyRenameWarning`):void 0,value:e.apiKey,onChange:e=>v({apiKey:e??``}),issues:g(`apiKey`),disabled:r,monospace:!0})]}),(0,G.jsx)(Z,{id:y(`description`),label:s(`models.builder.helpText`),value:e.description,onChange:e=>v({description:e}),issues:g(`description`),disabled:r,emptyAsUndefined:!0,multiline:!0})]}),(0,G.jsx)(K,{title:s(`models.builder.options`),children:(0,G.jsx)(Xn,{field:e,draft:c,at:g,disabled:r,onChange:v})}),(0,G.jsxs)(K,{title:s(`models.builder.settings`),children:[(0,G.jsx)(ir,{field:e,draft:c,path:h,issues:n,disabled:r,onChange:(t,n)=>d(r=>pn({...r,fields:r.fields.map(r=>r.id===e.id?mn(ln(r,t,n)):r)}))}),Mn(e)?(0,G.jsx)(Bn,{field:e,issues:g(`defaultValue`),disabled:r,onChange:t=>u(e.id,e=>{let n={...e,defaultValue:t};return t===void 0&&delete n.defaultValue,n})}):null]}),(0,G.jsx)(K,{title:s(`models.builder.editorSection`),children:(0,G.jsx)(qn,{field:e,path:h,issues:n,disabled:r,onChange:e=>v({editor:e})})})]})]})})},sr=({draft:e,version:t,dirty:n,issueCount:r,deleteBlocked:i,onDelete:o,...s})=>{let{t:c}=a(),{modelKey:u=e.apiKey}=y({strict:!1}),d=e.kind===`component`?[{label:c(`shell.nav.components`),link:l({to:`/develop/components`})}]:[{label:e.label,link:l({to:`/content/$modelKey`,params:{modelKey:u}})},{label:c(`place.tabs.structure`)}];return(0,G.jsx)(v,{sticky:!0,breadcrumb:d,title:e.label||c(`models.builder.untitled`),badge:n||r>0?(0,G.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[n?(0,G.jsx)(x,{tone:`warning`,label:c(`models.builder.unsaved`)}):null,r>0?(0,G.jsx)(x,{tone:`danger`,label:c(`models.builder.problems`,{count:r})}):null]}):null,meta:e.kind===`collection`?c(`models.builder.subtitleCollection`,{apiKey:e.apiKey,pluralApiKey:z(e),version:t}):c(`models.builder.subtitle`,{apiKey:e.apiKey,version:t}),actions:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`hidden items-center gap-2 xl:flex`,children:(0,G.jsx)(qt,{...s})}),(0,G.jsxs)(Ye,{children:[(0,G.jsx)(qe,{asChild:!0,children:(0,G.jsx)(N,{variant:`ghost`,size:`icon`,"aria-label":c(`models.builder.more`),children:(0,G.jsx)(Re,{"aria-hidden":`true`})})}),(0,G.jsx)(Je,{align:`end`,children:(0,G.jsxs)(Ke,{variant:`destructive`,disabled:i,onSelect:o,children:[(0,G.jsx)(E,{"aria-hidden":`true`}),c(`models.builder.delete`)]})})]})]})})},cr=[],lr=()=>{let e=W(e=>e.draft),t=W(e=>e.base),{definitions:n}=Tt(),r=(0,U.useDeferredValue)(e);return{issues:(0,U.useMemo)(()=>r&&t?hn(r,t,(n??[]).map(({definition:e})=>e)):cr,[r,t,n])}},ur=()=>{let e=W(e=>e.draft),t=W(e=>e.base);return(0,U.useMemo)(()=>!!(e&&t&&un(e,t)),[e,t])},dr=(e,t,n)=>{let r=bt().data?.definitions.find(t=>t.id===e);return{changedElsewhere:!n&&r!==void 0&&r.version>t,remoteVersion:r?.version}},fr=e=>d(e,`SCHEMA_VERSION_CONFLICT`),pr=(e,t,n)=>{let{t:i}=a(),o=Ct(),s=r(),c=Ue(),[l,u]=(0,U.useState)({step:`idle`}),[d,f]=(0,U.useState)(void 0),p=e=>{if(fr(e)){u({step:`conflict`});return}T.error(le(e))},m=async()=>{T.success(i(`models.updated`));try{await n(`rebase`)}catch(e){ae(e,`reloading the definition after a schema change`),T.error(le(e))}};return{state:l,review:async()=>{let{draft:n,baseVersion:r}=W.getState();if(n){c.reset();try{let i=await o.mutateAsync({category:e,id:t,definition:n,expectedVersion:r});u({step:`review`,preview:i})}catch(e){p(e)}}},reviewing:o.isPending,confirm:async n=>{let{draft:r,baseVersion:a}=W.getState();if(r)try{let o=await c.mutateAsync({definitionId:t,input:{category:e,definition:r,baseVersion:a},acknowledgement:n,title:i(`changes.builderSetTitle`,{label:r.label})});if(u({step:`idle`}),o.status===`shipping`){let n=await s.fetchQuery(Et(e,t));f(n.pendingChange?.id),T.info(i(`models.builder.changeStarted`))}else await m()}catch(e){fr(e)&&u({step:`conflict`})}},applying:c.isPending,applyError:c.error,resetStep:()=>u({step:`idle`}),runningChangeId:d,dismissChange:()=>f(void 0),onChangeFinished:async e=>{e===`activated`&&(f(void 0),await m())}}},mr=()=>{let e=W(e=>e.selection),t=W(e=>e.draft?.fields);if(e.type!==`field`||!t)return{field:void 0,index:-1};let n=t.findIndex(t=>t.id===e.fieldId);return{field:t[n],index:n}},hr=e=>({value:e.id,label:e.label}),gr=({model:e,issues:t,disabled:n})=>{let{t:r}=a(),i=W(e=>e.update),o=(e,t)=>i(n=>pn({...n,display:q(n.display,e,t)})),s=e=>J(t,`/display/${e}`),c=vn(e);return(0,G.jsxs)(G.Fragment,{children:[c.coverOptions.length>0?(0,G.jsx)(Q,{id:`definition-cover-field`,label:r(`models.builder.coverField`),hint:r(`models.builder.coverFieldHint`),value:e.display.coverFieldId,options:c.coverOptions.map(hr),onChange:e=>o(`coverFieldId`,e),unsetLabel:r(`models.builder.automatic`),issues:s(`coverFieldId`),disabled:n}):null,c.canvasOptions.length>0?(0,G.jsx)($,{id:`definition-canvas-fields`,label:r(`models.builder.canvasFields`),hint:r(`models.builder.canvasFieldsHint`),value:c.canvas,options:c.canvasOptions.map(hr),locked:c.canvas.length===1?c.canvas:[],onChange:e=>o(`canvasFieldIds`,e.length>0?e:void 0),issues:s(`canvasFieldIds`),disabled:n}):null,c.stripOptions.length>0?(0,G.jsx)($,{id:`definition-strip-fields`,label:r(`models.builder.stripFields`),hint:r(`models.builder.stripFieldsHint`),value:e.display.stripFieldIds??[],options:c.stripOptions.map(hr),onChange:e=>o(`stripFieldIds`,e.length>0?e:void 0),issues:s(`stripFieldIds`),disabled:n}):null]})},_r={asc:`models.builder.sortAscending`,desc:`models.builder.sortDescending`},vr=({definition:e,issues:t,disabled:n})=>{let{t:r}=a(),i=W(e=>e.update),o=(e,t)=>i(n=>({...n,display:q(n.display,e,t)})),s=e=>J(t,`/display/${e}`),c=e=>({value:e.id,label:e.label}),{display:l}=e,u=(0,G.jsx)(Q,{id:`definition-title-field`,label:r(`models.builder.titleField`),hint:r(`models.builder.titleFieldHint`),value:l.titleFieldId,options:X(e).map(c),onChange:e=>o(`titleFieldId`,e),unsetLabel:r(`models.notSet`),issues:s(`titleFieldId`),disabled:n});if(e.kind===`component`)return u;let d=e.display.defaultSort,f=e.fields.filter(e=>e.sortable);return(0,G.jsxs)(G.Fragment,{children:[u,(0,G.jsx)(Q,{id:`definition-sort-field`,label:r(`models.builder.sortField`),hint:r(`models.builder.sortFieldHint`),value:d?.fieldId,options:f.map(c),onChange:e=>o(`defaultSort`,e?{fieldId:e,direction:d?.direction??`asc`}:void 0),unsetLabel:r(`models.builder.sortNewest`),issues:s(`defaultSort`),disabled:n}),d?(0,G.jsx)(Q,{id:`definition-sort-direction`,label:r(`models.builder.sortDirection`),value:d.direction,options:nt.map(e=>({value:e,label:r(_r[e])})),onChange:e=>e&&o(`defaultSort`,{...d,direction:e}),disabled:n}):null,(0,G.jsx)($,{id:`definition-list-fields`,label:r(`models.builder.listColumns`),value:e.display.listFieldIds??[],options:e.fields.map(c),onChange:e=>o(`listFieldIds`,e.length>0?e:void 0),issues:s(`listFieldIds`),disabled:n}),(0,G.jsx)(gr,{model:e,issues:t,disabled:n})]})},yr=({issues:e,disabled:t,scopeSection:n})=>{let{t:r}=a(),i=W(e=>e.draft),o=W(e=>e.base),s=W(e=>e.update);if(!i)return null;let c=e=>s(t=>({...t,...e})),l=t=>J(e,`/${t}`),u=o!==null&&o.apiKey!==i.apiKey,d=o?.kind===`collection`&&i.kind===`collection`&&z(o)!==z(i),f=e=>s(t=>t.kind===`collection`?{...t,apiKey:e,pluralApiKey:Ft(t.apiKey,e,t.pluralApiKey)}:{...t,apiKey:e});return(0,G.jsxs)(`div`,{className:`space-y-6`,children:[n,(0,G.jsxs)(K,{title:r(`models.builder.general`),children:[(0,G.jsx)(Z,{id:`definition-label`,label:r(`models.label`),value:i.label,onChange:e=>c({label:e??``}),issues:l(`label`),disabled:t}),(0,G.jsx)(Z,{id:`definition-apiKey`,label:r(`models.apiKey`),hint:r(`models.apiKeyHint`),description:u?r(`models.builder.apiKeyRenameWarning`):void 0,value:i.apiKey,onChange:e=>f(e??``),issues:l(`apiKey`),disabled:t,monospace:!0}),i.kind===`collection`?(0,G.jsx)(Z,{id:`definition-pluralApiKey`,label:r(`models.pluralApiKey`),hint:r(`models.pluralApiKeyHint`),description:d?r(`models.builder.pluralApiKeyRenameWarning`):void 0,value:i.pluralApiKey,onChange:e=>c({pluralApiKey:e}),issues:l(`pluralApiKey`),disabled:t,emptyAsUndefined:!0,monospace:!0}):null,(0,G.jsx)(Z,{id:`definition-description`,label:r(`models.descriptionLabel`),value:i.description,onChange:e=>c({description:e}),issues:l(`description`),disabled:t,emptyAsUndefined:!0,multiline:!0}),i.kind===`component`?(0,G.jsx)(Z,{id:`definition-category`,label:r(`models.builder.category`),hint:r(`models.builder.categoryHint`),value:i.category,onChange:e=>c({category:e}),issues:l(`category`),disabled:t,emptyAsUndefined:!0}):null]}),i.kind===`component`?null:(0,G.jsxs)(K,{title:r(`models.builder.content`),children:[(0,G.jsx)(Wn,{id:`definition-localized`,label:r(`models.localized`),hint:r(`models.builder.modelLocalizedHint`),checked:i.localized,onChange:e=>c({localized:e}),issues:l(`localized`),disabled:t}),(0,G.jsx)(Wn,{id:`definition-draftAndPublish`,label:r(`models.builder.draftAndPublish`),hint:r(`models.builder.draftAndPublishHint`),checked:i.draftAndPublish,onChange:e=>c({draftAndPublish:e}),issues:l(`draftAndPublish`),disabled:t})]}),(0,G.jsx)(K,{title:r(`models.builder.display`),children:(0,G.jsx)(vr,{definition:i,issues:e,disabled:t})})]})},br=({hasIssues:e})=>{let{t}=a(),n=W(e=>e.draft);if(!n)return null;let r=de[n.kind];return(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,G.jsxs)(C,{variant:`outline`,children:[(0,G.jsx)(r,{"aria-hidden":`true`}),t(ue[n.kind])]}),n.kind===`component`?null:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(C,{variant:`outline`,children:t(n.localized?`models.builder.summaryLocalized`:`models.builder.summaryNotLocalized`)}),(0,G.jsx)(C,{variant:`outline`,children:t(n.draftAndPublish?`models.builder.summaryDrafts`:`models.builder.summaryNoDrafts`)})]}),n.kind===`collection`?(0,G.jsxs)(C,{variant:`outline`,className:`font-mono font-medium`,children:[(0,G.jsxs)(`span`,{className:`sr-only`,children:[t(`models.pluralApiKey`),` `]}),z(n)]}):null,e?(0,G.jsx)(x,{tone:`danger`,size:`sm`,label:t(`models.builder.hasProblems`)}):null]})},xr=e=>!/^\/fields(\/|$)/.test(e.path),Sr=({issues:e,disabled:t,scopeSection:n})=>{let{t:r}=a(),[i,o]=(0,U.useState)(!1),s=(0,U.useId)();return(0,G.jsx)(H,{title:r(`models.builder.definitionSettings`),actions:(0,G.jsx)(N,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-expanded":i,"aria-controls":s,"aria-label":r(`models.builder.definitionSettings`),onClick:()=>o(e=>!e),children:(0,G.jsx)(be,{"aria-hidden":`true`,className:c(`transition-transform`,i&&`rotate-180`)})}),children:(0,G.jsx)(`div`,{id:s,children:i?(0,G.jsx)(yr,{issues:e,disabled:t,scopeSection:n}):(0,G.jsx)(br,{hasIssues:e.some(xr)})})})},Cr=({hasFields:e})=>{let{t}=a();return(0,G.jsx)(H,{"aria-label":t(`models.builder.propertiesLabel`),className:`hidden xl:block`,children:e?(0,G.jsx)(S,{size:`panel`,icon:Bt,title:t(`models.builder.selectField`)}):(0,G.jsx)(S,{size:`panel`,icon:Ht,title:t(`models.builder.startTitle`)})})},wr=({reason:e,dirty:t,onReload:n,onKeepEdits:r})=>{let{t:i}=a(),o=t||e===`conflict`;return(0,G.jsxs)(L,{variant:`warning`,role:e===`conflict`?`alert`:`status`,className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,G.jsx)(We,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":`true`}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(Ee,{children:i(`models.remote.title`)}),(0,G.jsx)(R,{children:i(o?`models.remote.chooseDescription`:`models.remote.description`)})]})]}),o?(0,G.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,onClick:r,children:i(`models.remote.keepEdits`)}),(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,onClick:n,children:i(`models.remote.reloadLatest`)})]}):(0,G.jsx)(N,{type:`button`,size:`sm`,variant:`outline`,onClick:n,children:i(`models.remote.reload`)})]})},Tr=({changes:e,before:t,after:n})=>{let{t:r}=a();return(0,G.jsx)(`div`,{className:`space-y-4`,children:Oe(e).map(({bucket:e,changes:i})=>(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(Fe,{bucket:e}),(0,G.jsx)(`span`,{className:`text-meta text-muted-foreground tabular-nums`,children:i.length})]}),(0,G.jsx)(`ul`,{"aria-label":r(F[e]),className:`divide-y rounded-lg border`,children:i.map((e,r)=>(0,G.jsx)(`li`,{className:`px-3 py-2.5 text-sm`,children:Ne(e,t,n)},`${e.kind}-${e.fieldId??``}-${e.property??``}-${r}`))})]},e))})},Er=()=>{let{t:e}=a(),t=u(),n=He();return{reviewInChangeSet:async(r,i)=>{let{plan:a}=r,o=await _t(n.mutateAsync({definitionId:a.definitionId,newSetTitle:e(`changes.builderSetTitle`,{label:i.label}),input:{category:a.kind===`component`?`component`:`model`,definition:i,baseVersion:a.fromVersion}}));o.ok&&await t({to:`/changes/$changeSetId`,params:{changeSetId:o.value},ignoreBlocker:!0})},saving:n.isPending,saveError:n.error,resetSave:n.reset}},Dr={breaking:`models.plan.summary.breaking`,prerequisites:`models.plan.summary.prerequisites`,live:`models.plan.summary.live`,metadata:`models.plan.summary.metadata`},Or=({preview:e,before:t,after:n,applying:r,error:i,onApply:o,onClose:c})=>{let{t:l}=a(),[u,d]=(0,U.useState)(!1),[f,m]=(0,U.useState)(!1),[v,y]=(0,U.useState)(e),{reviewInChangeSet:x,saving:S,saveError:ne,resetSave:C}=Er(),ie=r||S;e!==void 0&&e!==v&&(y(e),d(!1),m(!1),C());let w=v?.plan,T=w?.summary,ae=T?je(T):`metadata`,E=T?.breaking??!1,D=T?.destructive??!1,se=(!E||u)&&(!D||f);return(0,G.jsx)(h,{open:e!==void 0,onOpenChange:e=>!e&&!ie&&c(),children:(0,G.jsxs)(re,{size:`lg`,children:[(0,G.jsxs)(te,{className:`pr-14`,children:[(0,G.jsx)(b,{children:l(`models.plan.title`,{label:n?.label??``})}),(0,G.jsx)(g,{children:l(Dr[ae])})]}),w&&v?(0,G.jsxs)(`form`,{noValidate:!0,className:`flex min-h-0 flex-1 flex-col`,onSubmit:e=>{e.preventDefault(),o({...E?{acknowledgeBreaking:!0}:{},...D?{acknowledgeDestructive:!0}:{}})},children:[(0,G.jsxs)(ee,{className:`space-y-6 pt-1`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 rounded-lg bg-muted px-3 py-2.5`,children:[(0,G.jsx)(Fe,{bucket:ae}),(0,G.jsx)(`span`,{className:`text-meta text-muted-foreground`,children:l(`models.plan.affected`,{count:v.impact.affectedHeads})})]}),(0,G.jsxs)(`section`,{className:`space-y-3`,"aria-labelledby":`plan-changes`,children:[(0,G.jsx)(`h3`,{id:`plan-changes`,className:`text-sm font-semibold`,children:l(`models.plan.changes`,{count:w.changes.length})}),(0,G.jsx)(Tr,{changes:w.changes,before:t,after:n})]}),w.prerequisites.length>0?(0,G.jsxs)(`section`,{className:`space-y-3`,"aria-labelledby":`plan-prerequisites`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(`h3`,{id:`plan-prerequisites`,className:`text-sm font-semibold`,children:l(`models.plan.prerequisites`)}),(0,G.jsx)(M,{about:l(`models.plan.prerequisites`),children:l(`models.plan.prerequisitesHint`)})]}),(0,G.jsx)(Le,{phase:`before`,steps:w.prerequisites,impacts:v.impact.steps,before:t,after:n})]}):null,w.followUps.length>0?(0,G.jsxs)(`section`,{className:`space-y-3`,"aria-labelledby":`plan-follow-ups`,children:[(0,G.jsx)(`h3`,{id:`plan-follow-ups`,className:`text-sm font-semibold`,children:l(`models.plan.followUps`)}),(0,G.jsx)(Le,{phase:`after`,steps:w.followUps,before:t,after:n})]}):null,E||D?(0,G.jsxs)(`fieldset`,{className:`space-y-3 rounded-lg border border-warning/40 bg-warning-muted/40 p-4`,children:[(0,G.jsx)(`legend`,{className:`px-1 text-sm font-semibold text-warning`,children:l(`models.plan.acknowledge`)}),E?(0,G.jsxs)(k,{orientation:`horizontal`,children:[(0,G.jsx)(we,{id:`plan-ack-breaking`,checked:u,onCheckedChange:e=>d(e===!0)}),(0,G.jsx)(oe,{htmlFor:`plan-ack-breaking`,className:`font-normal`,children:l(`models.plan.acknowledgeBreaking`)})]}):null,D?(0,G.jsxs)(k,{orientation:`horizontal`,children:[(0,G.jsx)(we,{id:`plan-ack-destructive`,checked:f,onCheckedChange:e=>m(e===!0)}),(0,G.jsx)(oe,{htmlFor:`plan-ack-destructive`,className:`font-normal`,children:l(`models.plan.acknowledgeDestructive`)})]}):null]}):null,(0,G.jsx)(Ce,{error:i??ne})]}),(0,G.jsxs)(_,{children:[(0,G.jsx)(N,{type:`button`,variant:`outline`,onClick:c,disabled:ie,children:l(`common.cancel`)}),(0,G.jsxs)(N,{type:`button`,variant:`outline`,disabled:ie||!n,"aria-busy":S||void 0,onClick:()=>n&&void x(v,n),children:[S?(0,G.jsx)(s,{className:`animate-spin motion-reduce:animate-none`,"aria-hidden":`true`}):(0,G.jsx)(Ae,{"aria-hidden":`true`}),l(S?`common.saving`:`changes.reviewInChangeSet`)]}),(0,G.jsx)(p,{pending:r,pendingLabel:l(`models.plan.applying`),disabled:!se||S,children:l(`models.plan.apply`)})]})]}):null]})})},kr=({category:e,id:t,detail:n})=>{let{t:r}=a(),i=u(),o=Wt(e,t),s=W(e=>e.key),c=W(e=>e.draft),l=W(e=>e.base),d=W(e=>e.baseVersion),f=W(e=>e.load),p=W(e=>e.reset),h=rn(e,t),g=pr(e,t,h),_=ur(),{issues:v}=lr(),{field:y,index:ee}=mr(),{locked:b,reason:x}=jt(),S=Gt(n.scope),{multiSite:te}=me(),ne=yt(),C=En(),[re,E]=(0,U.useState)(!1),[D,oe]=(0,U.useState)(void 0),[se,O]=(0,U.useState)(!1),k=(0,U.useRef)(n);(0,U.useEffect)(()=>(f(e,k.current.definition,k.current.version),p),[o,e,f,p]);let A=g.runningChangeId??n.pendingChange?.id,j=A===D?void 0:A,M=j!==void 0,{changedElsewhere:ce}=dr(t,d,M||g.applying),N=b||S||M,P=_&&v.length===0&&!N&&!g.reviewing,ue=g.state.step===`review`,F=g.state.step===`conflict`||se;if(kt(()=>void g.review(),P&&!ue),s!==o||!c)return(0,G.jsx)(ie,{});let de=e=>void h(e).catch(e=>{ae(e,`reloading the definition`),T.error(le(e))}),I=b||S,fe=te?(0,G.jsx)(on,{category:e,id:t,label:c.label,scope:n.scope,blocked:_||M||g.applying,locked:b,onConflict:()=>O(!0)}):null,pe={canDiscard:_,canReview:P,reviewing:g.reviewing,onReview:()=>void g.review(),onDiscard:()=>{l&&f(e,l,d)}};return(0,G.jsxs)(m,{width:`full`,children:[(0,G.jsx)(w,{when:_}),(0,G.jsx)(sr,{...pe,draft:c,version:d,dirty:_,issueCount:v.length,deleteBlocked:N,onDelete:()=>E(!0)}),b?(0,G.jsx)(Mt,{reason:x}):null,S?(0,G.jsx)(Kt,{}):null,ce||F?(0,G.jsx)(wr,{reason:F?`conflict`:`remote`,dirty:_,onReload:()=>{g.resetStep(),O(!1),de(`replace`)},onKeepEdits:()=>{g.resetStep(),O(!1),de(`rebase`)}},F?`conflict`:`remote`):null,j?(0,G.jsx)(Xt,{changeId:j,onFinished:e=>void g.onChangeFinished(e),onDismiss:()=>{oe(j),g.dismissChange()}},j):null,(0,G.jsxs)(`div`,{className:`grid min-w-0 gap-6 xl:grid-cols-[22.5rem_minmax(0,1fr)] xl:items-start`,children:[(0,G.jsxs)(`div`,{className:`min-w-0 space-y-6`,children:[(0,G.jsx)(Sr,{issues:v,disabled:I,scopeSection:fe}),(0,G.jsx)(An,{issues:v,disabled:I,onAdd:C.add})]}),y?(0,G.jsx)(or,{field:y,index:ee,issues:v,disabled:I,untouched:C.isUntouched(y),onDiscard:()=>C.discard(y.id)},y.id):(0,G.jsx)(Cr,{hasFields:c.fields.length>0})]}),(0,G.jsx)(Jt,{...pe}),(0,G.jsx)(Or,{preview:g.state.step===`review`?g.state.preview:void 0,before:l,after:c,applying:g.applying,error:g.applyError,onApply:e=>void g.confirm(e),onClose:g.resetStep}),(0,G.jsx)(De,{open:re,onOpenChange:E,title:r(`models.builder.deleteTitle`,{label:c.label}),description:r(`models.builder.deleteDescription`),confirmLabel:r(`common.delete`),destructive:!0,onConfirm:()=>ne.mutate({category:e,id:t,expectedVersion:d},{onSuccess:()=>{p(),T.success(r(`models.deleted`)),i({to:`/models`})}})})]})},Ar=({category:e,id:t})=>{let n=wt(e,t);return(0,G.jsx)(Ot,{query:n,children:n=>(0,G.jsx)(kr,{category:e,id:t,detail:n},t)})};export{Ar as t};
|
|
2
|
+
//# sourceMappingURL=Builder-BZy9mphs.js.map
|