@shapio/cms 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/assets/{AssetTile-CoNClUYS.js → AssetTile-zOf0K0nN.js} +2 -2
- package/dist/admin/assets/{AssetTile-CoNClUYS.js.map → AssetTile-zOf0K0nN.js.map} +1 -1
- package/dist/admin/assets/{AssistError-BoejyShH.js → AssistError-D_vY2CO0.js} +2 -2
- package/dist/admin/assets/{AssistError-BoejyShH.js.map → AssistError-D_vY2CO0.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-B2Jugisa.js → BlockMenuItems-BEnSpClj.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-B2Jugisa.js.map → BlockMenuItems-BEnSpClj.js.map} +1 -1
- package/dist/admin/assets/{Body-D3GwLGaB.js → Body-B_IVN5wp.js} +2 -2
- package/dist/admin/assets/{Body-D3GwLGaB.js.map → Body-B_IVN5wp.js.map} +1 -1
- package/dist/admin/assets/{Builder-CmT5-8hI.js → Builder-CnEtRudv.js} +2 -2
- package/dist/admin/assets/{Builder-CmT5-8hI.js.map → Builder-CnEtRudv.js.map} +1 -1
- package/dist/admin/assets/{ConfirmDialog-HS8Gc2t3.js → ConfirmDialog-BW-l3Whg.js} +2 -2
- package/dist/admin/assets/{ConfirmDialog-HS8Gc2t3.js.map → ConfirmDialog-BW-l3Whg.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-DS-bAA23.js → CopyButton-CyoUMStc.js} +2 -2
- package/dist/admin/assets/{CopyButton-DS-bAA23.js.map → CopyButton-CyoUMStc.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-C6PyD3wE.js → CursorPager-BW2Dl_hn.js} +2 -2
- package/dist/admin/assets/{CursorPager-C6PyD3wE.js.map → CursorPager-BW2Dl_hn.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-KdO72pTj.js → ExternalLink-BCI0q9ib.js} +2 -2
- package/dist/admin/assets/{ExternalLink-KdO72pTj.js.map → ExternalLink-BCI0q9ib.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-C62fRhmM.js → FocalPoint-CxicvlJO.js} +2 -2
- package/dist/admin/assets/{FocalPoint-C62fRhmM.js.map → FocalPoint-CxicvlJO.js.map} +1 -1
- package/dist/admin/assets/{Form-CLEr5Csd.js → Form-DB03drS9.js} +2 -2
- package/dist/admin/assets/{Form-CLEr5Csd.js.map → Form-DB03drS9.js.map} +1 -1
- package/dist/admin/assets/{FormCheckboxGroup-BrXY6qBg.js → FormCheckboxGroup-JP1xzReQ.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-BrXY6qBg.js.map → FormCheckboxGroup-JP1xzReQ.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-BjE1Jhar.js → FormRadioGroup-BvSC8SRm.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-BjE1Jhar.js.map → FormRadioGroup-BvSC8SRm.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-g4zrUlhv.js → FormSelectField-BDIVhZh6.js} +2 -2
- package/dist/admin/assets/{FormSelectField-g4zrUlhv.js.map → FormSelectField-BDIVhZh6.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-gciThNGV.js → FormSwitchField-OM4F8ln4.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-gciThNGV.js.map → FormSwitchField-OM4F8ln4.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-tsS-UXym.js → FormTextareaField-Bw7EkC4H.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-tsS-UXym.js.map → FormTextareaField-Bw7EkC4H.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-CVe-PIyv.js → HintedLabel-BGidukgy.js} +2 -2
- package/dist/admin/assets/{HintedLabel-CVe-PIyv.js.map → HintedLabel-BGidukgy.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-DtaHU1Cg.js → InfoHint-D3uwei-E.js} +2 -2
- package/dist/admin/assets/{InfoHint-DtaHU1Cg.js.map → InfoHint-D3uwei-E.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-DlzaD9zr.js → InsertMenuItem-DAihGvbw.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-DlzaD9zr.js.map → InsertMenuItem-DAihGvbw.js.map} +1 -1
- package/dist/admin/assets/{LinkTabs-stM3j4aH.js → LinkTabs-DBXbfzME.js} +2 -2
- package/dist/admin/assets/{LinkTabs-stM3j4aH.js.map → LinkTabs-DBXbfzME.js.map} +1 -1
- package/dist/admin/assets/{Match-ErAxnNAY.js → Match-CgfZTzqs.js} +2 -2
- package/dist/admin/assets/{Match-ErAxnNAY.js.map → Match-CgfZTzqs.js.map} +1 -1
- package/dist/admin/assets/{Panel-ClY9b33D.js → Panel-DDky5_x9.js} +2 -2
- package/dist/admin/assets/{Panel-ClY9b33D.js.map → Panel-DDky5_x9.js.map} +1 -1
- package/dist/admin/assets/{QueryView-C630REML.js → QueryView-C2d392ly.js} +2 -2
- package/dist/admin/assets/{QueryView-C630REML.js.map → QueryView-C2d392ly.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-CD4mel7U.js → RadioTile-CcP78eb_.js} +2 -2
- package/dist/admin/assets/{RadioTile-CD4mel7U.js.map → RadioTile-CcP78eb_.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-CxeVX6C-.js → RichTextField-CeztaFET.js} +2 -2
- package/dist/admin/assets/{RichTextField-CxeVX6C-.js.map → RichTextField-CeztaFET.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-B-7RptyN.js → RowTitle-mkKp4yfl.js} +2 -2
- package/dist/admin/assets/{RowTitle-B-7RptyN.js.map → RowTitle-mkKp4yfl.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-Dhw_dYxe.js → SecretReveal-mYCzxF96.js} +2 -2
- package/dist/admin/assets/{SecretReveal-Dhw_dYxe.js.map → SecretReveal-mYCzxF96.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-97RaO6Bh.js → SharedGlyph-CuDT7OUU.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-97RaO6Bh.js.map → SharedGlyph-CuDT7OUU.js.map} +1 -1
- package/dist/admin/assets/{StepList--0Fiqsq-.js → StepList-BDO0Q3Wc.js} +2 -2
- package/dist/admin/assets/{StepList--0Fiqsq-.js.map → StepList-BDO0Q3Wc.js.map} +1 -1
- package/dist/admin/assets/Structure-CL_0hVci.js +2 -0
- package/dist/admin/assets/{Structure-CoO3iah3.js.map → Structure-CL_0hVci.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-YjjaDN40.js → SubNavLink-C4eSybWd.js} +2 -2
- package/dist/admin/assets/{SubNavLink-YjjaDN40.js.map → SubNavLink-C4eSybWd.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-Dlyxoypu.js → SuggestAltButton-CxYlhwyd.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-Dlyxoypu.js.map → SuggestAltButton-CxYlhwyd.js.map} +1 -1
- package/dist/admin/assets/{TextLink-DIqr5zkJ.js → TextLink-DzNaAft6.js} +2 -2
- package/dist/admin/assets/{TextLink-DIqr5zkJ.js.map → TextLink-DzNaAft6.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-BUYOr4XJ.js → Thumbnail-DSPArZ9h.js} +2 -2
- package/dist/admin/assets/{Thumbnail-BUYOr4XJ.js.map → Thumbnail-DSPArZ9h.js.map} +1 -1
- package/dist/admin/assets/{UnsavedChangesGuard-BfzHgUkF.js → UnsavedChangesGuard-BPOCBD5T.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-BfzHgUkF.js.map → UnsavedChangesGuard-BPOCBD5T.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-DNOWhSWS.js → UserAvatar-BHNWHDVb.js} +2 -2
- package/dist/admin/assets/{UserAvatar-DNOWhSWS.js.map → UserAvatar-BHNWHDVb.js.map} +1 -1
- package/dist/admin/assets/{auth-YVfK3SxF.js → auth-BzCgJtgr.js} +2 -2
- package/dist/admin/assets/{auth-YVfK3SxF.js.map → auth-BzCgJtgr.js.map} +1 -1
- package/dist/admin/assets/{badge-lJ4Ih_Zn.js → badge-DBoaS0nQ.js} +2 -2
- package/dist/admin/assets/{badge-lJ4Ih_Zn.js.map → badge-DBoaS0nQ.js.map} +1 -1
- package/dist/admin/assets/{boxes-DRvd25_u.js → boxes-DhN0ctLo.js} +2 -2
- package/dist/admin/assets/{boxes-DRvd25_u.js.map → boxes-DhN0ctLo.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-VENf4s1R.js → calendar-clock-BEA3tG17.js} +2 -2
- package/dist/admin/assets/{calendar-clock-VENf4s1R.js.map → calendar-clock-BEA3tG17.js.map} +1 -1
- package/dist/admin/assets/{changeSets-JmSyu3tu.js → changeSets-C54Ku-X9.js} +2 -2
- package/dist/admin/assets/{changeSets-JmSyu3tu.js.map → changeSets-C54Ku-X9.js.map} +1 -1
- package/dist/admin/assets/chevron-left-BeJdUVAX.js +2 -0
- package/dist/admin/assets/{chevron-left-D2DnQyeV.js.map → chevron-left-BeJdUVAX.js.map} +1 -1
- package/dist/admin/assets/{circle-check-jmRQz1Jq.js → circle-check-ktACw37r.js} +2 -2
- package/dist/admin/assets/{circle-check-jmRQz1Jq.js.map → circle-check-ktACw37r.js.map} +1 -1
- package/dist/admin/assets/{clock-DrSTMGjp.js → clock-BKNNASKp.js} +2 -2
- package/dist/admin/assets/{clock-DrSTMGjp.js.map → clock-BKNNASKp.js.map} +1 -1
- package/dist/admin/assets/cn-h5ORT3LK.js +2 -0
- package/dist/admin/assets/cn-h5ORT3LK.js.map +1 -0
- package/dist/admin/assets/coerce-DDQ1vGLx.js +2 -0
- package/dist/admin/assets/{coerce-B4MJTGg1.js.map → coerce-DDQ1vGLx.js.map} +1 -1
- package/dist/admin/assets/{constants-ahk0YSYl.js → constants-DH7oqfO_.js} +2 -2
- package/dist/admin/assets/{constants-ahk0YSYl.js.map → constants-DH7oqfO_.js.map} +1 -1
- package/dist/admin/assets/{content-DcvNzKGe.js → content-BptqQO8c.js} +3 -3
- package/dist/admin/assets/{content-DcvNzKGe.js.map → content-BptqQO8c.js.map} +1 -1
- package/dist/admin/assets/{contentCounts-DzIvdeXR.js → contentCounts-BpGlmyeZ.js} +2 -2
- package/dist/admin/assets/{contentCounts-DzIvdeXR.js.map → contentCounts-BpGlmyeZ.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-YAd-AzOF.js → contentTypes-B_mAlIcH.js} +2 -2
- package/dist/admin/assets/{contentTypes-YAd-AzOF.js.map → contentTypes-B_mAlIcH.js.map} +1 -1
- package/dist/admin/assets/{context-4Jl20mYc.js → context-DyyMW7Md.js} +2 -2
- package/dist/admin/assets/{context-4Jl20mYc.js.map → context-DyyMW7Md.js.map} +1 -1
- package/dist/admin/assets/{copy-t6kAFw-O.js → copy-DjzlFY9u.js} +2 -2
- package/dist/admin/assets/{copy-t6kAFw-O.js.map → copy-DjzlFY9u.js.map} +1 -1
- package/dist/admin/assets/{dateTimeLocal-IDUOKulz.js → dateTimeLocal-DFXY779D.js} +2 -2
- package/dist/admin/assets/{dateTimeLocal-IDUOKulz.js.map → dateTimeLocal-DFXY779D.js.map} +1 -1
- package/dist/admin/assets/{develop-DYwiTd6R.js → develop-DJap_z-1.js} +2 -2
- package/dist/admin/assets/{develop-DYwiTd6R.js.map → develop-DJap_z-1.js.map} +1 -1
- package/dist/admin/assets/{dropdown-menu-DiYSm-g3.js → dropdown-menu-DGSMTf23.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-DiYSm-g3.js.map → dropdown-menu-DGSMTf23.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-DEHUaCkn.js → ellipsis-BMP-j3yO.js} +2 -2
- package/dist/admin/assets/{ellipsis-DEHUaCkn.js.map → ellipsis-BMP-j3yO.js.map} +1 -1
- package/dist/admin/assets/{external-link-B8UFREQ_.js → external-link-DzOkt97S.js} +2 -2
- package/dist/admin/assets/{external-link-B8UFREQ_.js.map → external-link-DzOkt97S.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-CVQpW8cj.js → fileRoute-CG0Dufvt.js} +2 -2
- package/dist/admin/assets/{fileRoute-CVQpW8cj.js.map → fileRoute-CG0Dufvt.js.map} +1 -1
- package/dist/admin/assets/{folder-plus-iDg1hhew.js → folder-plus-C-LhI4a2.js} +2 -2
- package/dist/admin/assets/{folder-plus-iDg1hhew.js.map → folder-plus-C-LhI4a2.js.map} +1 -1
- package/dist/admin/assets/{followPlural-BdqfEe48.js → followPlural-D-8kzFOe.js} +2 -2
- package/dist/admin/assets/{followPlural-BdqfEe48.js.map → followPlural-D-8kzFOe.js.map} +1 -1
- package/dist/admin/assets/{globe-TooNSp9V.js → globe-DOoGBy23.js} +2 -2
- package/dist/admin/assets/{globe-TooNSp9V.js.map → globe-DOoGBy23.js.map} +1 -1
- package/dist/admin/assets/{image-CXZXXH58.js → image-D9p_gGE2.js} +2 -2
- package/dist/admin/assets/{image-CXZXXH58.js.map → image-D9p_gGE2.js.map} +1 -1
- package/dist/admin/assets/{image-off-cxva5G-Y.js → image-off-G0M2Nh1I.js} +2 -2
- package/dist/admin/assets/{image-off-cxva5G-Y.js.map → image-off-G0M2Nh1I.js.map} +1 -1
- package/dist/admin/assets/{inbox-B8c9Kj_z.js → inbox-CMzYVMZo.js} +2 -2
- package/dist/admin/assets/{inbox-B8c9Kj_z.js.map → inbox-CMzYVMZo.js.map} +1 -1
- package/dist/admin/assets/{inbox-CnzNfqt9.js → inbox-XaM-nvsM.js} +2 -2
- package/dist/admin/assets/{inbox-CnzNfqt9.js.map → inbox-XaM-nvsM.js.map} +1 -1
- package/dist/admin/assets/{index-D9KL7arJ.js → index-DHmfMpqz.js} +4 -4
- package/dist/admin/assets/{index-D9KL7arJ.js.map → index-DHmfMpqz.js.map} +1 -1
- package/dist/admin/assets/{key-round-CFJ61iCd.js → key-round-HBvMrmMo.js} +2 -2
- package/dist/admin/assets/{key-round-CFJ61iCd.js.map → key-round-HBvMrmMo.js.map} +1 -1
- package/dist/admin/assets/{languages-eh7U4anI.js → languages-BOv0jYhe.js} +2 -2
- package/dist/admin/assets/{languages-eh7U4anI.js.map → languages-BOv0jYhe.js.map} +1 -1
- package/dist/admin/assets/{layers-mGfmMsKE.js → layers-CkZyCaeb.js} +2 -2
- package/dist/admin/assets/{layers-mGfmMsKE.js.map → layers-CkZyCaeb.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-DbZzRN_w.js → link-2-off-UUkSmPIL.js} +2 -2
- package/dist/admin/assets/{link-2-off-DbZzRN_w.js.map → link-2-off-UUkSmPIL.js.map} +1 -1
- package/dist/admin/assets/{link-b2pFaN-A.js → link-Bvqcg7db.js} +2 -2
- package/dist/admin/assets/{link-b2pFaN-A.js.map → link-Bvqcg7db.js.map} +1 -1
- package/dist/admin/assets/{locales-oBD0q1pN.js → locales-DbrcdhZi.js} +2 -2
- package/dist/admin/assets/{locales-oBD0q1pN.js.map → locales-DbrcdhZi.js.map} +1 -1
- package/dist/admin/assets/{media-Cs9LCQcz.js → media-CO0HSS3b.js} +2 -2
- package/dist/admin/assets/{media-Cs9LCQcz.js.map → media-CO0HSS3b.js.map} +1 -1
- package/dist/admin/assets/{media-5ks_0Rre.js → media-ugEyLgwN.js} +2 -2
- package/dist/admin/assets/{media-5ks_0Rre.js.map → media-ugEyLgwN.js.map} +1 -1
- package/dist/admin/assets/{network-DS8MW3AZ.js → network-BfDaUb7D.js} +2 -2
- package/dist/admin/assets/{network-DS8MW3AZ.js.map → network-BfDaUb7D.js.map} +1 -1
- package/dist/admin/assets/{pencil-C7eD5mlZ.js → pencil-BLNGNJmL.js} +2 -2
- package/dist/admin/assets/{pencil-C7eD5mlZ.js.map → pencil-BLNGNJmL.js.map} +1 -1
- package/dist/admin/assets/{plus-BDZHQBlU.js → plus-BXMBYPoB.js} +2 -2
- package/dist/admin/assets/{plus-BDZHQBlU.js.map → plus-BXMBYPoB.js.map} +1 -1
- package/dist/admin/assets/{preload-helper-CJNJ4S3k.js → preload-helper-DEbJbZwX.js} +2 -2
- package/dist/admin/assets/{preload-helper-CJNJ4S3k.js.map → preload-helper-DEbJbZwX.js.map} +1 -1
- package/dist/admin/assets/{publishing-C4YQ4XKt.js → publishing-DKrATBaj.js} +2 -2
- package/dist/admin/assets/{publishing-C4YQ4XKt.js.map → publishing-DKrATBaj.js.map} +1 -1
- package/dist/admin/assets/{radio-group-zOsGAYRP.js → radio-group-BIhT_uEK.js} +2 -2
- package/dist/admin/assets/{radio-group-zOsGAYRP.js.map → radio-group-BIhT_uEK.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-DCWwb4Ga.js → rotate-ccw-DqbffhiC.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-DCWwb4Ga.js.map → rotate-ccw-DqbffhiC.js.map} +1 -1
- package/dist/admin/assets/{schedules-DXrBSypK.js → schedules-CETl2eLe.js} +2 -2
- package/dist/admin/assets/{schedules-DXrBSypK.js.map → schedules-CETl2eLe.js.map} +1 -1
- package/dist/admin/assets/{schema-B7L9OJrX.js → schema-CWHuez0q.js} +2 -2
- package/dist/admin/assets/{schema-B7L9OJrX.js.map → schema-CWHuez0q.js.map} +1 -1
- package/dist/admin/assets/{scroll-text-BLThe4Ki.js → scroll-text-DlcDEi2k.js} +2 -2
- package/dist/admin/assets/{scroll-text-BLThe4Ki.js.map → scroll-text-DlcDEi2k.js.map} +1 -1
- package/dist/admin/assets/{search-CcJQqtRw.js → search-Dy2dtwyR.js} +2 -2
- package/dist/admin/assets/{search-CcJQqtRw.js.map → search-Dy2dtwyR.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-BCRZ1jyL.js → searchSchemas-Cz4P1iku.js} +2 -2
- package/dist/admin/assets/{searchSchemas-BCRZ1jyL.js.map → searchSchemas-Cz4P1iku.js.map} +1 -1
- package/dist/admin/assets/{sections-v5Flaor9.js → sections-BfG6DTFr.js} +2 -2
- package/dist/admin/assets/{sections-v5Flaor9.js.map → sections-BfG6DTFr.js.map} +1 -1
- package/dist/admin/assets/{sections-TIN_Nl1b.js → sections-EgXyXN3-.js} +2 -2
- package/dist/admin/assets/{sections-TIN_Nl1b.js.map → sections-EgXyXN3-.js.map} +1 -1
- package/dist/admin/assets/{select-CpHp3YOH.js → select--mePTdz8.js} +2 -2
- package/dist/admin/assets/{select-CpHp3YOH.js.map → select--mePTdz8.js.map} +1 -1
- package/dist/admin/assets/{send-CbP0Rc9_.js → send-DVgq5Iwg.js} +2 -2
- package/dist/admin/assets/{send-CbP0Rc9_.js.map → send-DVgq5Iwg.js.map} +1 -1
- package/dist/admin/assets/{seo-1n9s7YuX.js → seo-Zhb62Ojz.js} +2 -2
- package/dist/admin/assets/{seo-1n9s7YuX.js.map → seo-Zhb62Ojz.js.map} +1 -1
- package/dist/admin/assets/{settings-CuEO5l07.js → settings-Mscp6tN5.js} +2 -2
- package/dist/admin/assets/{settings-CuEO5l07.js.map → settings-Mscp6tN5.js.map} +1 -1
- package/dist/admin/assets/{skeleton-DElTumgk.js → skeleton-DJVukcn6.js} +2 -2
- package/dist/admin/assets/{skeleton-DElTumgk.js.map → skeleton-DJVukcn6.js.map} +1 -1
- package/dist/admin/assets/{snapshots-DkyyrWX3.js → snapshots-BpLhILlt.js} +2 -2
- package/dist/admin/assets/{snapshots-DkyyrWX3.js.map → snapshots-BpLhILlt.js.map} +1 -1
- package/dist/admin/assets/{sparkles-D88gf3vX.js → sparkles-Dd6S_roX.js} +2 -2
- package/dist/admin/assets/{sparkles-D88gf3vX.js.map → sparkles-Dd6S_roX.js.map} +1 -1
- package/dist/admin/assets/{stableId-DlNKh3HM.js → stableId-DFVM13gJ.js} +2 -2
- package/dist/admin/assets/{stableId-DlNKh3HM.js.map → stableId-DFVM13gJ.js.map} +1 -1
- package/dist/admin/assets/{store-jUWyOXDG.js → store-BP-xStwU.js} +2 -2
- package/dist/admin/assets/{store-jUWyOXDG.js.map → store-BP-xStwU.js.map} +1 -1
- package/dist/admin/assets/{switch-CijNGYkG.js → switch-skVypg5O.js} +2 -2
- package/dist/admin/assets/{switch-CijNGYkG.js.map → switch-skVypg5O.js.map} +1 -1
- package/dist/admin/assets/{table-DQ5ILlSh.js → table-BMbbRUK9.js} +2 -2
- package/dist/admin/assets/{table-DQ5ILlSh.js.map → table-BMbbRUK9.js.map} +1 -1
- package/dist/admin/assets/{tabs-CSqGW9Du.js → tabs-C1lgOg1B.js} +3 -3
- package/dist/admin/assets/{tabs-CSqGW9Du.js.map → tabs-C1lgOg1B.js.map} +1 -1
- package/dist/admin/assets/{textarea-FwSvwmyT.js → textarea-CffBBxoQ.js} +2 -2
- package/dist/admin/assets/{textarea-FwSvwmyT.js.map → textarea-CffBBxoQ.js.map} +1 -1
- package/dist/admin/assets/{theme-CHHVK8Ps.js → theme-RHTVnR9j.js} +2 -2
- package/dist/admin/assets/{theme-CHHVK8Ps.js.map → theme-RHTVnR9j.js.map} +1 -1
- package/dist/admin/assets/{titles-CQYc9nDQ.js → titles-DWiPmNvn.js} +2 -2
- package/dist/admin/assets/{titles-CQYc9nDQ.js.map → titles-DWiPmNvn.js.map} +1 -1
- package/dist/admin/assets/{tokens-C-20gLAT.js → tokens-BqyeN1D-.js} +2 -2
- package/dist/admin/assets/{tokens-C-20gLAT.js.map → tokens-BqyeN1D-.js.map} +1 -1
- package/dist/admin/assets/{tooltip-BXqFQv9N.js → tooltip-BfSF6EyR.js} +2 -2
- package/dist/admin/assets/{tooltip-BXqFQv9N.js.map → tooltip-BfSF6EyR.js.map} +1 -1
- package/dist/admin/assets/{undo-2-CLy2zklL.js → undo-2-p4YlNhBp.js} +2 -2
- package/dist/admin/assets/{undo-2-CLy2zklL.js.map → undo-2-p4YlNhBp.js.map} +1 -1
- package/dist/admin/assets/{useAuditLabels-BJF7M5RY.js → useAuditLabels-DV5gcaaG.js} +2 -2
- package/dist/admin/assets/{useAuditLabels-BJF7M5RY.js.map → useAuditLabels-DV5gcaaG.js.map} +1 -1
- package/dist/admin/assets/{useConfirmTarget-BUvlrGSW.js → useConfirmTarget-DCvnxNVg.js} +2 -2
- package/dist/admin/assets/{useConfirmTarget-BUvlrGSW.js.map → useConfirmTarget-DCvnxNVg.js.map} +1 -1
- package/dist/admin/assets/{useContentSchema-Cvtes34f.js → useContentSchema-z6tNif86.js} +2 -2
- package/dist/admin/assets/{useContentSchema-Cvtes34f.js.map → useContentSchema-z6tNif86.js.map} +1 -1
- package/dist/admin/assets/{useCursorPager-CzB6NDOB.js → useCursorPager-CQGX41_L.js} +2 -2
- package/dist/admin/assets/{useCursorPager-CzB6NDOB.js.map → useCursorPager-CQGX41_L.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-BAEGkGK9.js → useDiscardGuard-Dhbif7VL.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-BAEGkGK9.js.map → useDiscardGuard-Dhbif7VL.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-CiN_pias.js → useMediaPickerDialog-D-5uKsMG.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-CiN_pias.js.map → useMediaPickerDialog-D-5uKsMG.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-CapEHBIt.js → useMediaUploader-BtLoimmQ.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-CapEHBIt.js.map → useMediaUploader-BtLoimmQ.js.map} +1 -1
- package/dist/admin/assets/{usePaletteItems-wpn3ms6o.js → usePaletteItems-D3PZsW0Q.js} +2 -2
- package/dist/admin/assets/{usePaletteItems-wpn3ms6o.js.map → usePaletteItems-D3PZsW0Q.js.map} +1 -1
- package/dist/admin/assets/{usePlaces-6iTN15Xy.js → usePlaces-Cj5PljTy.js} +2 -2
- package/dist/admin/assets/{usePlaces-6iTN15Xy.js.map → usePlaces-Cj5PljTy.js.map} +1 -1
- package/dist/admin/assets/{useQueries-CYfcxI0Q.js → useQueries-CeDzli4Z.js} +2 -2
- package/dist/admin/assets/{useQueries-CYfcxI0Q.js.map → useQueries-CeDzli4Z.js.map} +1 -1
- package/dist/admin/assets/{useResolvedScheme-i1EwGHuF.js → useResolvedScheme-DHD-zisP.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-i1EwGHuF.js.map → useResolvedScheme-DHD-zisP.js.map} +1 -1
- package/dist/admin/assets/{useSchemaScopeAccess-WQKmj8_3.js → useSchemaScopeAccess-BNeVslcv.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-WQKmj8_3.js.map → useSchemaScopeAccess-BNeVslcv.js.map} +1 -1
- package/dist/admin/assets/{users-BgTNDPXx.js → users-BRefbzuS.js} +2 -2
- package/dist/admin/assets/{users-BgTNDPXx.js.map → users-BRefbzuS.js.map} +1 -1
- package/dist/admin/assets/{users-B01EH47o.js → users-CppI8ctO.js} +2 -2
- package/dist/admin/assets/{users-B01EH47o.js.map → users-CppI8ctO.js.map} +1 -1
- package/dist/admin/assets/{zod-79xzBIrW.js → zod-Dcwk-m8X.js} +2 -2
- package/dist/admin/assets/{zod-79xzBIrW.js.map → zod-Dcwk-m8X.js.map} +1 -1
- package/dist/admin/index.html +55 -55
- package/dist/cli.js +110 -18
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{public-CTK82y3t.d.ts → public-DYR4mtVQ.d.ts} +2 -1
- package/dist/s3Adapter-C8AgFVYw.js +125 -0
- package/dist/s3Adapter-C8AgFVYw.js.map +1 -0
- package/dist/{worker-BDYDbaea.js → worker-jz_0yAmS.js} +388 -358
- package/dist/worker-jz_0yAmS.js.map +1 -0
- package/package.json +8 -5
- package/dist/admin/assets/Structure-CoO3iah3.js +0 -2
- package/dist/admin/assets/chevron-left-D2DnQyeV.js +0 -2
- package/dist/admin/assets/cn-CL1YHRrS.js +0 -2
- package/dist/admin/assets/cn-CL1YHRrS.js.map +0 -1
- package/dist/admin/assets/coerce-B4MJTGg1.js +0 -2
- package/dist/worker-BDYDbaea.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-5ks_0Rre.js","names":["QueryObserver","useQuery","queryKeys","useBaseQuery","useMutation","useQueryClient","adminApi","hasPreviousPage","withCsrf","hasNextPage","keepPreviousData","InfiniteQueryObserver","client","options","query","parentResult","fetchDirection","state","isFetchNextPageError","isError","isFetchingNextPage","isFetching","isFetchPreviousPageError","isFetchingPreviousPage","isRefetchError","isRefetching","useInfiniteQuery","queryClient","silent","PROCESSING_POLL_MS","isProcessing","asset","variant","useMediaFolders","useMediaAssets","pageParam","page","useMediaAsset","id","useMediaUsage","useInvalidateMedia","useUpdateMediaAsset","invalidate","input","useDeleteMediaAsset","useMoveMediaAssets","useCreateMediaFolder","useUpdateMediaFolder","useDeleteMediaFolder"],"sources":["../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js","../../src/api/media.ts"],"sourcesContent":["import { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nimport { QueryObserver } from \"./queryObserver.js\";\n//#region src/infiniteQueryObserver.ts\n/**\n* An `InfiniteQueryObserver` extends `QueryObserver` to observe and switch\n* between infinite queries. It augments the base `QueryObserverResult` with\n* infinite-query-specific fields and methods, such as `hasNextPage` and\n* `fetchNextPage`, and is the primitive that framework adapters (e.g.\n* `useInfiniteQuery`) build their hooks on top of.\n*\n* @example\n* ```ts\n* const observer = new InfiniteQueryObserver(queryClient, {\n* queryKey: ['projects'],\n* queryFn: ({ pageParam }) => fetchProjects(pageParam),\n* initialPageParam: 0,\n* getNextPageParam: (lastPage) => lastPage.nextCursor,\n* })\n*\n* const unsubscribe = observer.subscribe((result) => console.log(result))\n* ```\n*/\nvar InfiniteQueryObserver = class extends QueryObserver {\n\tconstructor(client, options) {\n\t\tsuper(client, options);\n\t}\n\tbindMethods() {\n\t\tsuper.bindMethods();\n\t\tthis.fetchNextPage = this.fetchNextPage.bind(this);\n\t\tthis.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n\t}\n\t/**\n\t* Updates the observer's options. Behaves the same as\n\t* `QueryObserver.setOptions`, additionally marking the options as\n\t* belonging to an infinite query before delegating to the base\n\t* implementation.\n\t*/\n\tsetOptions(options) {\n\t\toptions._type = \"infinite\";\n\t\tsuper.setOptions(options);\n\t}\n\t/**\n\t* The infinite-query counterpart of {@link QueryObserver#getOptimisticResult}, marking the\n\t* options as an infinite query before delegating to it. Called by framework adapters (e.g.\n\t* `useInfiniteQuery`) ahead of subscribing, to compute the current `InfiniteQueryObserverResult`\n\t* synchronously.\n\t*/\n\tgetOptimisticResult(options) {\n\t\toptions._type = \"infinite\";\n\t\treturn super.getOptimisticResult(options);\n\t}\n\t/**\n\t* Fetches the next page of the infinite query and returns a promise that\n\t* resolves with the resulting `InfiniteQueryObserverResult`. The page\n\t* param used for the fetch is determined by `getNextPageParam`, which\n\t* receives the current pages/page params and whose result also determines\n\t* `hasNextPage`.\n\t*\n\t* @example\n\t* ```ts\n\t* const { hasNextPage } = observer.getCurrentResult()\n\t*\n\t* if (hasNextPage) {\n\t* await observer.fetchNextPage()\n\t* }\n\t* ```\n\t*\n\t* @see {@link InfiniteQueryObserver#fetchPreviousPage}\n\t*/\n\tfetchNextPage(options) {\n\t\treturn this.fetch({\n\t\t\t...options,\n\t\t\tmeta: { fetchMore: { direction: \"forward\" } }\n\t\t});\n\t}\n\t/**\n\t* Fetches the previous page of the infinite query and returns a promise\n\t* that resolves with the resulting `InfiniteQueryObserverResult`. The page\n\t* param used for the fetch is determined by `getPreviousPageParam`, which\n\t* receives the current pages/page params and whose result also determines\n\t* `hasPreviousPage`.\n\t*\n\t* @example\n\t* ```ts\n\t* const { hasPreviousPage } = observer.getCurrentResult()\n\t*\n\t* if (hasPreviousPage) {\n\t* await observer.fetchPreviousPage()\n\t* }\n\t* ```\n\t*\n\t* @see {@link InfiniteQueryObserver#fetchNextPage}\n\t*/\n\tfetchPreviousPage(options) {\n\t\treturn this.fetch({\n\t\t\t...options,\n\t\t\tmeta: { fetchMore: { direction: \"backward\" } }\n\t\t});\n\t}\n\tcreateResult(query, options) {\n\t\tconst { state } = query;\n\t\tconst parentResult = super.createResult(query, options);\n\t\tconst { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n\t\tconst fetchDirection = state.fetchMeta?.fetchMore?.direction;\n\t\tconst isFetchNextPageError = isError && fetchDirection === \"forward\";\n\t\tconst isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n\t\tconst isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n\t\tconst isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n\t\treturn {\n\t\t\t...parentResult,\n\t\t\tfetchNextPage: this.fetchNextPage,\n\t\t\tfetchPreviousPage: this.fetchPreviousPage,\n\t\t\thasNextPage: hasNextPage(options, state.data),\n\t\t\thasPreviousPage: hasPreviousPage(options, state.data),\n\t\t\tisFetchNextPageError,\n\t\t\tisFetchingNextPage,\n\t\t\tisFetchPreviousPageError,\n\t\t\tisFetchingPreviousPage,\n\t\t\tisRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n\t\t\tisRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n\t\t};\n\t}\n};\n//#endregion\nexport { InfiniteQueryObserver };\n\n//# sourceMappingURL=infiniteQueryObserver.js.map","\"use client\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\n//#region src/useInfiniteQuery.ts\nfunction useInfiniteQuery(options, queryClient) {\n\treturn useBaseQuery(options, InfiniteQueryObserver, queryClient);\n}\n//#endregion\nexport { useInfiniteQuery };\n\n//# sourceMappingURL=useInfiniteQuery.js.map","import type {\n CreateMediaFolderInput,\n MediaAsset,\n MediaAssetQuery,\n MoveMediaAssetsInput,\n UpdateMediaAssetInput,\n UpdateMediaFolderInput,\n} from '@shapio/client';\nimport {\n keepPreviousData,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const MEDIA_PAGE_SIZE = 48;\n/** How often an asset whose variants are still being made is re-read. */\nconst PROCESSING_POLL_MS = 2000;\n\nconst isProcessing = (asset: MediaAsset) =>\n asset.status === 'processing' || asset.variants.some((variant) => variant.status === 'pending');\n\nexport const useMediaFolders = () =>\n useQuery({ queryKey: queryKeys.media.folders, queryFn: () => adminApi.media.folders.list() });\n\n/** Newest first, a page at a time; refreshed while anything shown is still processing. */\nexport const useMediaAssets = (query: Omit<MediaAssetQuery, 'cursor' | 'limit'>) =>\n useInfiniteQuery({\n queryKey: queryKeys.media.assets(query),\n queryFn: ({ pageParam }) =>\n adminApi.media.assets.list({\n ...query,\n limit: MEDIA_PAGE_SIZE,\n ...(pageParam ? { cursor: pageParam } : {}),\n }),\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (page) => page.nextCursor ?? undefined,\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n state.state.data?.pages.some((page) => page.items.some(isProcessing)) ? PROCESSING_POLL_MS : false,\n });\n\nexport const useMediaAsset = (id: string | undefined) =>\n useQuery({\n queryKey: queryKeys.media.asset(id ?? ''),\n queryFn: () => adminApi.media.assets.get(id ?? ''),\n enabled: id !== undefined,\n refetchInterval: (state) =>\n state.state.data && isProcessing(state.state.data) ? PROCESSING_POLL_MS : false,\n });\n\nexport const useMediaUsage = (id: string | undefined) =>\n useQuery({\n queryKey: queryKeys.media.usage(id ?? ''),\n queryFn: () => adminApi.media.assets.usage(id ?? ''),\n enabled: id !== undefined,\n meta: silent,\n });\n\nconst useInvalidateMedia = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.media.all });\n};\n\nexport const useUpdateMediaAsset = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'assets', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateMediaAssetInput }) =>\n withCsrf(() => adminApi.media.assets.update(id, input)),\n onSuccess: (asset) => {\n queryClient.setQueryData(queryKeys.media.asset(asset.id), asset);\n return invalidate();\n },\n });\n};\n\n/** 409 MEDIA_IN_USE comes back to the caller (the delete dialog explains it), so no toast here. */\nexport const useDeleteMediaAsset = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'assets', 'delete'],\n meta: silent,\n mutationFn: ({ id, force }: { id: string; force: boolean }) =>\n withCsrf(() => adminApi.media.assets.remove(id, { force })),\n onSuccess: invalidate,\n });\n};\n\nexport const useMoveMediaAssets = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'assets', 'move'],\n mutationFn: (input: MoveMediaAssetsInput) => withCsrf(() => adminApi.media.assets.move(input)),\n onSettled: invalidate,\n });\n};\n\nexport const useCreateMediaFolder = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'folders', 'create'],\n meta: silent,\n mutationFn: (input: CreateMediaFolderInput) => withCsrf(() => adminApi.media.folders.create(input)),\n onSuccess: invalidate,\n });\n};\n\nexport const useUpdateMediaFolder = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'folders', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateMediaFolderInput }) =>\n withCsrf(() => adminApi.media.folders.update(id, input)),\n onSuccess: invalidate,\n });\n};\n\nexport const useDeleteMediaFolder = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'folders', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.media.folders.remove(id)),\n onSettled: invalidate,\n });\n};\n"],"ignoreList":[0,1],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-ugEyLgwN.js","names":["QueryObserver","useQuery","queryKeys","useBaseQuery","useMutation","useQueryClient","adminApi","hasPreviousPage","withCsrf","hasNextPage","keepPreviousData","InfiniteQueryObserver","client","options","query","parentResult","fetchDirection","state","isFetchNextPageError","isError","isFetchingNextPage","isFetching","isFetchPreviousPageError","isFetchingPreviousPage","isRefetchError","isRefetching","useInfiniteQuery","queryClient","silent","PROCESSING_POLL_MS","isProcessing","asset","variant","useMediaFolders","useMediaAssets","pageParam","page","useMediaAsset","id","useMediaUsage","useInvalidateMedia","useUpdateMediaAsset","invalidate","input","useDeleteMediaAsset","useMoveMediaAssets","useCreateMediaFolder","useUpdateMediaFolder","useDeleteMediaFolder"],"sources":["../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js","../../src/api/media.ts"],"sourcesContent":["import { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nimport { QueryObserver } from \"./queryObserver.js\";\n//#region src/infiniteQueryObserver.ts\n/**\n* An `InfiniteQueryObserver` extends `QueryObserver` to observe and switch\n* between infinite queries. It augments the base `QueryObserverResult` with\n* infinite-query-specific fields and methods, such as `hasNextPage` and\n* `fetchNextPage`, and is the primitive that framework adapters (e.g.\n* `useInfiniteQuery`) build their hooks on top of.\n*\n* @example\n* ```ts\n* const observer = new InfiniteQueryObserver(queryClient, {\n* queryKey: ['projects'],\n* queryFn: ({ pageParam }) => fetchProjects(pageParam),\n* initialPageParam: 0,\n* getNextPageParam: (lastPage) => lastPage.nextCursor,\n* })\n*\n* const unsubscribe = observer.subscribe((result) => console.log(result))\n* ```\n*/\nvar InfiniteQueryObserver = class extends QueryObserver {\n\tconstructor(client, options) {\n\t\tsuper(client, options);\n\t}\n\tbindMethods() {\n\t\tsuper.bindMethods();\n\t\tthis.fetchNextPage = this.fetchNextPage.bind(this);\n\t\tthis.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n\t}\n\t/**\n\t* Updates the observer's options. Behaves the same as\n\t* `QueryObserver.setOptions`, additionally marking the options as\n\t* belonging to an infinite query before delegating to the base\n\t* implementation.\n\t*/\n\tsetOptions(options) {\n\t\toptions._type = \"infinite\";\n\t\tsuper.setOptions(options);\n\t}\n\t/**\n\t* The infinite-query counterpart of {@link QueryObserver#getOptimisticResult}, marking the\n\t* options as an infinite query before delegating to it. Called by framework adapters (e.g.\n\t* `useInfiniteQuery`) ahead of subscribing, to compute the current `InfiniteQueryObserverResult`\n\t* synchronously.\n\t*/\n\tgetOptimisticResult(options) {\n\t\toptions._type = \"infinite\";\n\t\treturn super.getOptimisticResult(options);\n\t}\n\t/**\n\t* Fetches the next page of the infinite query and returns a promise that\n\t* resolves with the resulting `InfiniteQueryObserverResult`. The page\n\t* param used for the fetch is determined by `getNextPageParam`, which\n\t* receives the current pages/page params and whose result also determines\n\t* `hasNextPage`.\n\t*\n\t* @example\n\t* ```ts\n\t* const { hasNextPage } = observer.getCurrentResult()\n\t*\n\t* if (hasNextPage) {\n\t* await observer.fetchNextPage()\n\t* }\n\t* ```\n\t*\n\t* @see {@link InfiniteQueryObserver#fetchPreviousPage}\n\t*/\n\tfetchNextPage(options) {\n\t\treturn this.fetch({\n\t\t\t...options,\n\t\t\tmeta: { fetchMore: { direction: \"forward\" } }\n\t\t});\n\t}\n\t/**\n\t* Fetches the previous page of the infinite query and returns a promise\n\t* that resolves with the resulting `InfiniteQueryObserverResult`. The page\n\t* param used for the fetch is determined by `getPreviousPageParam`, which\n\t* receives the current pages/page params and whose result also determines\n\t* `hasPreviousPage`.\n\t*\n\t* @example\n\t* ```ts\n\t* const { hasPreviousPage } = observer.getCurrentResult()\n\t*\n\t* if (hasPreviousPage) {\n\t* await observer.fetchPreviousPage()\n\t* }\n\t* ```\n\t*\n\t* @see {@link InfiniteQueryObserver#fetchNextPage}\n\t*/\n\tfetchPreviousPage(options) {\n\t\treturn this.fetch({\n\t\t\t...options,\n\t\t\tmeta: { fetchMore: { direction: \"backward\" } }\n\t\t});\n\t}\n\tcreateResult(query, options) {\n\t\tconst { state } = query;\n\t\tconst parentResult = super.createResult(query, options);\n\t\tconst { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n\t\tconst fetchDirection = state.fetchMeta?.fetchMore?.direction;\n\t\tconst isFetchNextPageError = isError && fetchDirection === \"forward\";\n\t\tconst isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n\t\tconst isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n\t\tconst isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n\t\treturn {\n\t\t\t...parentResult,\n\t\t\tfetchNextPage: this.fetchNextPage,\n\t\t\tfetchPreviousPage: this.fetchPreviousPage,\n\t\t\thasNextPage: hasNextPage(options, state.data),\n\t\t\thasPreviousPage: hasPreviousPage(options, state.data),\n\t\t\tisFetchNextPageError,\n\t\t\tisFetchingNextPage,\n\t\t\tisFetchPreviousPageError,\n\t\t\tisFetchingPreviousPage,\n\t\t\tisRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n\t\t\tisRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n\t\t};\n\t}\n};\n//#endregion\nexport { InfiniteQueryObserver };\n\n//# sourceMappingURL=infiniteQueryObserver.js.map","\"use client\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\n//#region src/useInfiniteQuery.ts\nfunction useInfiniteQuery(options, queryClient) {\n\treturn useBaseQuery(options, InfiniteQueryObserver, queryClient);\n}\n//#endregion\nexport { useInfiniteQuery };\n\n//# sourceMappingURL=useInfiniteQuery.js.map","import type {\n CreateMediaFolderInput,\n MediaAsset,\n MediaAssetQuery,\n MoveMediaAssetsInput,\n UpdateMediaAssetInput,\n UpdateMediaFolderInput,\n} from '@shapio/client';\nimport {\n keepPreviousData,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const MEDIA_PAGE_SIZE = 48;\n/** How often an asset whose variants are still being made is re-read. */\nconst PROCESSING_POLL_MS = 2000;\n\nconst isProcessing = (asset: MediaAsset) =>\n asset.status === 'processing' || asset.variants.some((variant) => variant.status === 'pending');\n\nexport const useMediaFolders = () =>\n useQuery({ queryKey: queryKeys.media.folders, queryFn: () => adminApi.media.folders.list() });\n\n/** Newest first, a page at a time; refreshed while anything shown is still processing. */\nexport const useMediaAssets = (query: Omit<MediaAssetQuery, 'cursor' | 'limit'>) =>\n useInfiniteQuery({\n queryKey: queryKeys.media.assets(query),\n queryFn: ({ pageParam }) =>\n adminApi.media.assets.list({\n ...query,\n limit: MEDIA_PAGE_SIZE,\n ...(pageParam ? { cursor: pageParam } : {}),\n }),\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (page) => page.nextCursor ?? undefined,\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n state.state.data?.pages.some((page) => page.items.some(isProcessing)) ? PROCESSING_POLL_MS : false,\n });\n\nexport const useMediaAsset = (id: string | undefined) =>\n useQuery({\n queryKey: queryKeys.media.asset(id ?? ''),\n queryFn: () => adminApi.media.assets.get(id ?? ''),\n enabled: id !== undefined,\n refetchInterval: (state) =>\n state.state.data && isProcessing(state.state.data) ? PROCESSING_POLL_MS : false,\n });\n\nexport const useMediaUsage = (id: string | undefined) =>\n useQuery({\n queryKey: queryKeys.media.usage(id ?? ''),\n queryFn: () => adminApi.media.assets.usage(id ?? ''),\n enabled: id !== undefined,\n meta: silent,\n });\n\nconst useInvalidateMedia = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.media.all });\n};\n\nexport const useUpdateMediaAsset = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'assets', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateMediaAssetInput }) =>\n withCsrf(() => adminApi.media.assets.update(id, input)),\n onSuccess: (asset) => {\n queryClient.setQueryData(queryKeys.media.asset(asset.id), asset);\n return invalidate();\n },\n });\n};\n\n/** 409 MEDIA_IN_USE comes back to the caller (the delete dialog explains it), so no toast here. */\nexport const useDeleteMediaAsset = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'assets', 'delete'],\n meta: silent,\n mutationFn: ({ id, force }: { id: string; force: boolean }) =>\n withCsrf(() => adminApi.media.assets.remove(id, { force })),\n onSuccess: invalidate,\n });\n};\n\nexport const useMoveMediaAssets = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'assets', 'move'],\n mutationFn: (input: MoveMediaAssetsInput) => withCsrf(() => adminApi.media.assets.move(input)),\n onSettled: invalidate,\n });\n};\n\nexport const useCreateMediaFolder = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'folders', 'create'],\n meta: silent,\n mutationFn: (input: CreateMediaFolderInput) => withCsrf(() => adminApi.media.folders.create(input)),\n onSuccess: invalidate,\n });\n};\n\nexport const useUpdateMediaFolder = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'folders', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateMediaFolderInput }) =>\n withCsrf(() => adminApi.media.folders.update(id, input)),\n onSuccess: invalidate,\n });\n};\n\nexport const useDeleteMediaFolder = () => {\n const invalidate = useInvalidateMedia();\n return useMutation({\n mutationKey: ['media', 'folders', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.media.folders.remove(id)),\n onSettled: invalidate,\n });\n};\n"],"ignoreList":[0,1],"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{H as r,P as i,V as a,_ as o,bt as s,i as c,j as l,l as u,s as d,t as f,v as p,y as m}from"./cn-CL1YHRrS.js";import{C as h,T as ee,u as te,x as g}from"./auth-YVfK3SxF.js";import{O as ne,_ as re,a as _,i as v,j as ie,n as ae,o as y,r as oe,t as b}from"./badge-lJ4Ih_Zn.js";import{i as se,n as x,o as ce,t as S}from"./RowTitle-B-7RptyN.js";import{t as C}from"./fileRoute-CVQpW8cj.js";import{t as le}from"./UnsavedChangesGuard-BfzHgUkF.js";import{t as w}from"./FormCheckboxGroup-BrXY6qBg.js";import{q as ue}from"./src-Be3Ds5Dc.js";import{B as de,G as T,R as fe,d as E,f as pe,o as D,p as me,u as he}from"./InfoHint-DtaHU1Cg.js";import{N as O,i as k,k as ge,n as _e,r as ve}from"./skeleton-DElTumgk.js";import{n as ye,t as be}from"./Form-CLEr5Csd.js";import{u as xe}from"./constants-ahk0YSYl.js";import{t as Se}from"./boxes-DRvd25_u.js";import{a as Ce,i as we,n as Te,r as Ee,s as De,t as Oe}from"./select-CpHp3YOH.js";import{t as ke}from"./CursorPager-C6PyD3wE.js";import{a as Ae,i as A,n as je,o as Me,r as j,t as Ne}from"./ConfirmDialog-HS8Gc2t3.js";import{t as Pe}from"./ellipsis-DEHUaCkn.js";import{t as Fe}from"./search-CcJQqtRw.js";import{t as Ie}from"./link-b2pFaN-A.js";import{a as M,l as Le,p as Re,r as ze,t as Be}from"./dropdown-menu-DiYSm-g3.js";import{t as Ve}from"./pencil-C7eD5mlZ.js";import{t as N}from"./plus-BDZHQBlU.js";import{t as He}from"./scroll-text-BLThe4Ki.js";import{_ as Ue,b as We,d as Ge,f as Ke,g as qe,h as Je,p as Ye,v as Xe,x as Ze,y as Qe}from"./searchSchemas-BCRZ1jyL.js";import{i as $e,n as et,r as tt,t as nt}from"./useAuditLabels-BJF7M5RY.js";import{t as rt}from"./users-B01EH47o.js";import{t as it}from"./UserAvatar-DNOWhSWS.js";import{n as at,t as ot}from"./radio-group-zOsGAYRP.js";import{t as st}from"./switch-CijNGYkG.js";import{d as ct,f as lt,i as ut,l as dt,n as P,o as F,r as ft,t as I,u as L}from"./zod-79xzBIrW.js";import{t as R}from"./settle-LRKtTN_e.js";import{a as z,f as pt,g as B,i as V,l as mt,n as H,o as U,r as W,s as G,t as K,u as ht,v as q}from"./table-DQ5ILlSh.js";import{t as gt}from"./HintedLabel-CVe-PIyv.js";import{m as _t,s as vt}from"./schema-B7L9OJrX.js";import{t as J}from"./QueryView-C630REML.js";import{t as yt}from"./FormRadioGroup-BjE1Jhar.js";import{t as Y}from"./Panel-ClY9b33D.js";import{a as bt,i as xt}from"./followPlural-BdqfEe48.js";import{t as St}from"./FormTextareaField-tsS-UXym.js";import{n as X,t as Ct}from"./FormSelectField-g4zrUlhv.js";import{a as wt,c as Tt,i as Et,n as Dt,o as Ot,r as kt,s as At,t as jt}from"./users-BgTNDPXx.js";import{n as Mt,t as Nt}from"./useConfirmTarget-BUvlrGSW.js";import{a as Pt,i as Ft,n as It,o as Lt,r as Rt,t as zt}from"./SecretReveal-Dhw_dYxe.js";import{t as Bt}from"./LinkTabs-stM3j4aH.js";var Vt=[`read`,`create`,`update`,`delete`,`publish`,`schemaManage`],Ht=[`schema.create`,`users.manage`,`roles.manage`,`tokens.manage`,`audit.read`,`sites.manage`,`media.read`,`media.write`,`media.manage`,`publishing.manage`,`webhooks.manage`,`deployments.manage`,`deployments.trigger`,`changes.manage`,`changes.ship`,`site.settings`],Z=[`read`,`create`,`update`,`delete`,`publish`],Ut={name:`book-open`,size:24,node:[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]};Ut.node;var Wt=c(Ut),Gt={name:`sliders-horizontal`,size:24,node:[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]};Gt.node;var Kt=c(Gt),Q=e(n(),1),qt=()=>{let{t:e}=l(),t=_t(),{locked:n,reason:r}=bt(),i=n?null:(0,Q.jsx)(k,{asChild:!0,children:(0,Q.jsxs)(g,{to:`/network/content-types/new`,children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`contentTypes.network.create`)]})});return(0,Q.jsxs)(_,{children:[(0,Q.jsx)(v,{title:e(`contentTypes.network.title`),meta:t.data?e(`contentTypes.network.count`,{count:t.data.length}):void 0,actions:i}),n?(0,Q.jsx)(xt,{reason:r}):null,(0,Q.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:Se,title:e(`contentTypes.network.empty`),description:e(`contentTypes.network.emptyDescription`),action:i}),children:e=>(0,Q.jsx)(ye,{items:e,showKind:!0,markShared:!1})})]})},Jt=[`collection`,`singleton`,`component`],Yt=()=>{let{t:e}=l();return(0,Q.jsx)(be,{title:e(`contentTypes.network.newTitle`),kinds:Jt,back:h({to:`/network/content-types`}),backLabel:e(`contentTypes.network.title`),scope:`network`})},$=e(t(),1),Xt=e=>Promise.all([e.invalidateQueries({queryKey:i.sites.all}),e.invalidateQueries({queryKey:i.me})]),Zt=()=>r({queryKey:i.sites.all,queryFn:()=>u.sites.list(),meta:{silent:!0}}),Qt=e=>r({queryKey:i.sites.site(e),queryFn:()=>u.sites.get(e),meta:{silent:!0}}),$t=()=>{let e=Zt();return{names:(0,$.useMemo)(()=>new Map((e.data??[]).map(e=>[e.id,e.name])),[e.data]),error:e.error}},en=()=>{let e=s();return a({mutationKey:[`sites`,`create`],meta:{silent:!0},mutationFn:e=>d(()=>u.sites.create(e)),onSuccess:()=>Xt(e)})},tn=()=>{let e=s();return a({mutationKey:[`sites`,`update`],meta:{silent:!0},mutationFn:({id:e,input:t})=>d(()=>u.sites.update(e,t)),onSettled:()=>Xt(e)})},nn=()=>{let e=s();return a({mutationKey:[`sites`,`delete`],meta:{silent:!0},mutationFn:e=>d(()=>u.sites.remove(e.id)),onSuccess:(t,n)=>{if(n.key===o().key){m();return}return e.removeQueries({queryKey:i.sites.site(n.id)}),Xt(e)}})},rn=e=>r({queryKey:i.sites.appRoles(e),queryFn:()=>u.sites.appRoles.get(e),meta:{silent:!0}}),an=()=>{let e=s();return a({mutationKey:[`sites`,`appRoles`,`set`],meta:{silent:!0},mutationFn:({id:e,input:t})=>d(()=>u.sites.appRoles.set(e,t)),onSuccess:t=>e.setQueryData(i.sites.appRoles(t.siteId),t)})},on=e=>{let t=an(),n=L({defaultValues:{public:e.public,authenticated:e.authenticated}}),{reset:r,formState:i}=n;return(0,$.useEffect)(()=>{i.isDirty||r({public:e.public,authenticated:e.authenticated})},[e,r,i.isDirty]),{form:n,onSubmit:n.handleSubmit(async n=>{let i=await R(t.mutateAsync({id:e.siteId,input:n}));i.ok&&(r({public:i.value.public,authenticated:i.value.authenticated}),T.success(O.t(`sites.appRoles.saved`)))}),setBindings:t}},sn=({bindings:e,roles:t,canManage:n})=>{let{t:r}=l(),{form:i,onSubmit:a,setBindings:o}=on(e),s=t.map(e=>({value:e.id,label:e.name})),{isDirty:c}=i.formState;return(0,Q.jsxs)(`form`,{noValidate:!0,onSubmit:e=>void a(e),children:[(0,Q.jsxs)(he,{children:[(0,Q.jsx)(w,{control:i.control,name:`public`,legend:r(`sites.appRoles.public`),options:s,disabled:!n}),(0,Q.jsx)(w,{control:i.control,name:`authenticated`,legend:r(`sites.appRoles.authenticated`),options:s,disabled:!n}),(0,Q.jsx)(A,{error:o.error}),n?(0,Q.jsx)(`div`,{children:(0,Q.jsx)(re,{pending:o.isPending,pendingLabel:r(`common.saving`),disabled:!c,children:r(`common.saveChanges`)})}):null]}),(0,Q.jsx)(le,{when:c})]})},cn=({siteId:e,canManage:t})=>{let{t:n}=l(),r=rn(e),i=Je();return(0,Q.jsx)(Y,{title:n(`sites.appRoles.title`),description:n(`sites.appRoles.description`),children:(0,Q.jsx)(J,{query:r,children:e=>(0,Q.jsx)(J,{query:i,children:n=>(0,Q.jsx)(sn,{bindings:e,roles:n,canManage:t})})})})},ln=({site:e})=>{let{t}=l(),n=ee(),r=nn();return(0,Q.jsx)(Y,{title:t(`sites.danger`),description:t(`sites.deleteDescription`),children:(0,Q.jsx)(j,{tone:`danger`,title:t(`sites.deleteTitle`,{name:e.name}),description:t(`sites.deleteConsequence`),confirmLabel:t(`common.delete`),onConfirm:async()=>{await r.mutateAsync(e),e.key!==o().key&&(T.success(t(`sites.deleted`,{name:e.name})),n({to:`/network/sites`}))},trigger:(0,Q.jsx)(k,{variant:`destructive-ghost`,children:t(`sites.delete`)})})})},un=B({name:F().max(200,`validation.tooLong`)}),dn=e=>{let t=tn(),n=L({resolver:I(un),defaultValues:{name:e.name}}),{reset:r,formState:i}=n;return(0,$.useEffect)(()=>{i.isDirty||r({name:e.name})},[e.name,r,i.isDirty]),{form:n,onSubmit:n.handleSubmit(async({name:n})=>{let i=await R(t.mutateAsync({id:e.id,input:{expectedVersion:e.version,name:n}}));i.ok&&(r({name:i.value.name}),T.success(O.t(`sites.renamed`)))}),updateSite:t}},fn=`site-key`,pn=`site-key-hint`,mn=({site:e,canManage:t})=>{let{t:n}=l(),{form:r,onSubmit:i,updateSite:a}=dn(e),{isDirty:o}=r.formState;return(0,Q.jsxs)(Y,{title:n(`sites.details`),children:[(0,Q.jsx)(`form`,{noValidate:!0,onSubmit:e=>void i(e),className:`max-w-md`,children:(0,Q.jsxs)(he,{children:[(0,Q.jsx)(P,{control:r.control,name:`name`,label:n(`sites.name`),autoComplete:`off`,readOnly:!t}),(0,Q.jsxs)(D,{children:[(0,Q.jsx)(gt,{htmlFor:fn,label:n(`sites.key`),hint:n(`sites.keyHint`),hintId:pn}),(0,Q.jsx)(_e,{id:fn,value:e.key,readOnly:!0,className:`font-mono`,"aria-describedby":pn})]}),(0,Q.jsx)(A,{error:a.error}),t?(0,Q.jsx)(`div`,{children:(0,Q.jsx)(re,{pending:a.isPending,pendingLabel:n(`common.saving`),disabled:!o,children:n(`common.saveChanges`)})}):null]})}),(0,Q.jsx)(le,{when:o})]})},hn=()=>{let{t:e}=l(),{siteId:t}=ie({from:`/app/network/sites/$siteId`}),n=Qt(t),r=Mt(`sites.manage`),i=Mt(`roles.manage`);return(0,Q.jsx)(_,{width:`narrow`,children:(0,Q.jsx)(J,{query:n,children:t=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(v,{breadcrumb:[{label:e(`sites.title`),link:h({to:`/network/sites`})}],title:t.name,badge:t.isPrimary?(0,Q.jsx)(b,{variant:`secondary`,children:e(`sites.primary`)}):null,meta:t.key,actions:(0,Q.jsx)(k,{variant:`outline`,onClick:()=>p(t.key),children:e(`sites.open`)})}),(0,Q.jsx)(mn,{site:t,canManage:r},t.id),(0,Q.jsx)(cn,{siteId:t.id,canManage:i}),r&&!t.isPrimary?(0,Q.jsx)(ln,{site:t}):null]})})})},gn=B({name:F().max(200,`validation.tooLong`),key:q().trim().regex(/^[a-z][a-z0-9-]{0,62}$/,`validation.siteKey`)}),_n={name:``,key:``},vn=(e,t)=>{let n=en(),r=L({resolver:I(gn),defaultValues:_n}),{reset:i}=r;return(0,$.useEffect)(()=>{e&&i(_n)},[e,i]),{form:r,onSubmit:r.handleSubmit(async e=>{let r=await R(n.mutateAsync(e));r.ok&&(i(_n),t(r.value))}),createSite:n}},yn=({open:e,onOpenChange:t,onCreated:n})=>{let{t:r}=l(),{form:i,onSubmit:a,createSite:o}=vn(e,n);return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(`sites.createTitle`),dirty:i.formState.isDirty,pending:o.isPending,submitLabel:r(`common.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,Q.jsx)(P,{control:i.control,name:`name`,label:r(`sites.name`),autoComplete:`off`}),(0,Q.jsx)(P,{control:i.control,name:`key`,label:r(`sites.key`),autoComplete:`off`,spellCheck:!1,hint:r(`sites.keyHint`),description:r(`sites.keyFixed`)}),(0,Q.jsx)(A,{error:o.error})]})},bn=({sites:e})=>{let{t}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:t(`sites.name`)}),(0,Q.jsx)(V,{children:t(`sites.key`)}),(0,Q.jsx)(V,{children:t(`sites.createdAt`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:t(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(S,{asChild:!0,children:(0,Q.jsx)(g,{to:`/network/sites/$siteId`,params:{siteId:e.id},children:e.name})}),e.isPrimary?(0,Q.jsx)(b,{variant:`secondary`,children:t(`sites.primary`)}):null]})}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.key}),(0,Q.jsx)(W,{title:x(e.createdAt),children:se(e.createdAt)}),(0,Q.jsx)(W,{className:`text-right`,children:(0,Q.jsx)(k,{variant:`outline`,size:`sm`,"aria-label":t(`sites.openNamed`,{name:e.name}),onClick:()=>p(e.key),children:t(`sites.open`)})})]},e.id))})]})})},xn=()=>{let{t:e}=l(),t=ee(),n=Zt(),r=Mt(`sites.manage`),[i,a]=(0,$.useState)(!1);return(0,Q.jsxs)(_,{children:[(0,Q.jsx)(v,{title:e(`sites.title`),meta:n.data?e(`sites.count`,{count:n.data.length}):void 0,actions:r?(0,Q.jsxs)(k,{onClick:()=>a(!0),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`sites.create`)]}):null}),(0,Q.jsx)(J,{query:n,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:xe,title:e(`sites.empty`)}),children:e=>(0,Q.jsx)(bn,{sites:e})}),r?(0,Q.jsx)(yn,{open:i,onOpenChange:a,onCreated:n=>{a(!1),T.success(e(`sites.created`,{name:n.name})),t({to:`/network/sites/$siteId`,params:{siteId:n.id}})}}):null]})},Sn=`all`,Cn=e=>Ge.includes(e),wn=({action:e,actorType:t,onChange:n})=>{let{t:r}=l(),[i,a]=(0,$.useState)(e??``),o=!!e||!!t;return(0,Q.jsxs)(`form`,{role:`search`,className:`flex w-full flex-wrap items-center gap-2`,onSubmit:e=>{e.preventDefault(),n({action:i.trim()||void 0,actorType:t})},children:[(0,Q.jsx)(ve,{htmlFor:`audit-action`,className:`sr-only`,children:r(`audit.filterAction`)}),(0,Q.jsxs)(`div`,{className:`relative w-full sm:w-80`,children:[(0,Q.jsx)(Fe,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,Q.jsx)(_e,{id:`audit-action`,inputSize:`sm`,value:i,placeholder:r(`audit.filterActionPlaceholder`),onChange:e=>a(e.target.value),onBlur:()=>n({action:i.trim()||void 0,actorType:t}),className:`pl-8`})]}),(0,Q.jsx)(ve,{htmlFor:`audit-actor-type`,className:`sr-only`,children:r(`audit.filterActor`)}),(0,Q.jsxs)(Oe,{value:t??Sn,onValueChange:t=>n({action:e,actorType:Cn(t)?t:void 0}),children:[(0,Q.jsx)(we,{id:`audit-actor-type`,size:`sm`,className:`w-44`,children:(0,Q.jsx)(Ce,{})}),(0,Q.jsxs)(Te,{children:[(0,Q.jsx)(Ee,{value:Sn,children:r(`audit.allActors`)}),Ge.map(e=>(0,Q.jsx)(Ee,{value:e,children:r(`audit.actorTypes.${e}`)},e))]})]}),o?(0,Q.jsx)(k,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{a(``),n({action:void 0,actorType:void 0})},children:r(`audit.clearFilters`)}):null]})},Tn=()=>{let e=ce({from:`/app/network/audit-log`}),t=ee({from:`/network/audit-log`}),[n,r]=(0,$.useState)([]),i=e=>void t({search:t=>({...t,...e})});return{search:e,goFirst:e.cursor===void 0?void 0:()=>{r([]),i({cursor:void 0})},goPrevious:n.length===0?void 0:()=>{i({cursor:n.at(-1)}),r(e=>e.slice(0,-1))},goNext:t=>{r(t=>[...t,e.cursor]),i({cursor:t})},setFilters:e=>{r([]),i({...e,cursor:void 0})}}},En=e=>e.targetType?`${e.targetType}:${e.targetId??``}`:void 0,Dn=({events:e})=>{let{t}=l(),{actionLabel:n,targetLabel:r}=nt();return(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:t(`audit.actor`)}),(0,Q.jsx)(V,{children:t(`audit.action`)}),(0,Q.jsx)(V,{children:t(`audit.target`)}),(0,Q.jsx)(V,{children:t(`audit.outcome`)}),(0,Q.jsx)(V,{children:t(`audit.ipAddress`)}),(0,Q.jsx)(V,{children:t(`audit.when`)})]})}),(0,Q.jsx)(H,{children:e.map(e=>{let i=t(`audit.actorTypes.${e.actorType}`),a=e.actorName??e.actorEmail??i,o=e.actorName&&e.actorEmail?e.actorEmail:e.actorName||e.actorEmail?i:e.actorId??void 0,s=n(e.action),c=En(e),l=et(e.metadata);return(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsxs)(`span`,{className:`flex items-center gap-2.5`,children:[(0,Q.jsx)(it,{name:a,size:`sm`}),(0,Q.jsxs)(`span`,{className:`min-w-0`,children:[(0,Q.jsx)(`span`,{className:`block max-w-48 truncate text-sm font-semibold`,children:a}),o?(0,Q.jsx)(`span`,{className:`block max-w-48 truncate text-xs text-muted-foreground`,title:o,children:o}):null]})]})}),(0,Q.jsx)(W,{title:e.action,children:s?(0,Q.jsx)(b,{variant:`secondary`,children:s}):(0,Q.jsx)(b,{variant:`secondary`,className:`font-mono`,children:e.action})}),(0,Q.jsx)(W,{className:`max-w-64`,title:c,children:e.targetType?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`block truncate text-sm`,children:r(e.targetType)??(0,Q.jsx)(`span`,{className:`font-mono text-xs`,children:e.targetType})}),(0,Q.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:l??(0,Q.jsx)(`span`,{className:`font-mono`,children:e.targetId})})]}):(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:t(`common.none`)})}),(0,Q.jsx)(W,{children:(0,Q.jsx)(ae,{tone:e.outcome===`success`?`success`:`danger`,label:e.outcome===`success`?t(`audit.success`):t(`audit.failure`)})}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.ip??t(`common.unknown`)}),(0,Q.jsx)(W,{className:`whitespace-nowrap`,title:x(e.occurredAt),children:se(e.occurredAt)})]},e.id)})})]})},On=()=>{let{t:e}=l(),{search:t,goFirst:n,goPrevious:r,goNext:i,setFilters:a}=Tn(),o=tt({cursor:t.cursor,limit:50,action:t.action,actorType:t.actorType}),s=o.data?.nextCursor;return(0,Q.jsxs)(_,{width:`full`,children:[(0,Q.jsx)(v,{title:e(`audit.title`)}),(0,Q.jsx)(G,{toolbar:(0,Q.jsx)(wn,{action:t.action,actorType:t.actorType,onChange:a},`${t.action??``}|${t.actorType??``}`),footer:(0,Q.jsx)(ke,{onFirst:n,onPrevious:r,onNext:s?()=>i(s):void 0}),children:(0,Q.jsx)(J,{query:o,loadingRows:8,isEmpty:e=>e.items.length===0&&t.cursor===void 0,empty:(0,Q.jsx)(y,{size:`panel`,icon:He,title:e(`audit.empty`)}),children:e=>(0,Q.jsx)(Dn,{events:e.items})})})]})},kn=[...Vt,...Ht],An={read:`roles.actions.read`,create:`roles.actions.create`,update:`roles.actions.update`,delete:`roles.actions.delete`,publish:`roles.actions.publish`,schemaManage:`roles.actions.schemaManage`,"schema.create":`roles.actions.schemaCreate`,"users.manage":`roles.actions.usersManage`,"roles.manage":`roles.actions.rolesManage`,"tokens.manage":`roles.actions.tokensManage`,"audit.read":`roles.actions.auditRead`,"sites.manage":`roles.actions.sitesManage`,"media.read":`roles.actions.mediaRead`,"media.write":`roles.actions.mediaWrite`,"media.manage":`roles.actions.mediaManage`,"publishing.manage":`roles.actions.publishingManage`,"webhooks.manage":`roles.actions.webhooksManage`,"deployments.manage":`roles.actions.deploymentsManage`,"deployments.trigger":`roles.actions.deploymentsTrigger`,"changes.manage":`roles.actions.changesManage`,"changes.ship":`roles.actions.changesShip`,"site.settings":`roles.actions.siteSettings`},jn=[`admin`,`delivery`],Mn=/^[a-z][a-z0-9-]{0,62}$/,Nn=B({key:q().trim().regex(Mn,`validation.roleKey`),name:F(),description:q().trim(),kind:mt([`admin`,`delivery`]),actions:ht(pt(e=>kn.includes(e)))}),Pn=e=>e.modelId===null&&e.condition===null&&e.fieldIds===null,Fn=e=>({key:e?.key??``,name:e?.name??``,description:e?.description??``,kind:e?.kind??`admin`,actions:(e?.permissions??[]).filter(Pn).map(e=>e.action)}),In=e=>({action:e,modelId:null,condition:null,fieldIds:null}),Ln=(e,t,n)=>{let r=It(),i=Lt(),a=L({resolver:I(Nn),defaultValues:Fn(t)}),{reset:o}=a;(0,$.useEffect)(()=>{e&&o(Fn(t))},[e,t,o]);let s=a.handleSubmit(async({key:e,name:a,description:o,kind:s,actions:c})=>{if(t){let e=t.permissions.filter(e=>!Pn(e));if(!(await R(i.mutateAsync({id:t.id,input:{expectedVersion:t.version,name:a,description:o,permissions:[...e,...c.map(In)]}}))).ok)return;T.success(O.t(`roles.saved`))}else{if(!(await R(r.mutateAsync({key:e,name:a,description:o,kind:s,permissions:c.map(In)}))).ok)return;T.success(O.t(`roles.created`))}n()}),c=t?i:r;return{form:a,onSubmit:s,pending:c.isPending,error:c.error}},Rn={admin:`roles.kindAdmin`,delivery:`roles.kindDelivery`},zn=({open:e,onOpenChange:t,role:n})=>{let{t:r}=l(),{form:i,onSubmit:a,pending:o,error:s}=Ln(e,n,()=>t(!1)),c=n!==void 0,u=i.watch(`kind`);return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(c?`roles.editTitle`:`roles.createTitle`),dirty:i.formState.isDirty,pending:o,submitLabel:r(c?`common.saveChanges`:`common.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,Q.jsx)(P,{control:i.control,name:`name`,label:r(`roles.name`),autoComplete:`off`}),(0,Q.jsx)(P,{control:i.control,name:`key`,label:r(`roles.key`),hint:r(`roles.keyHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`,disabled:c}),(0,Q.jsx)(St,{control:i.control,name:`description`,label:r(`roles.roleDescription`),rows:2}),(0,Q.jsx)(Ct,{control:i.control,name:`kind`,label:r(`roles.kind`),hint:r(`roles.kindHint`),options:jn.map(e=>({value:e,label:r(Rn[e])})),disabled:c}),(0,Q.jsx)(w,{control:i.control,name:`actions`,legend:r(`roles.contentPermissions`),options:Vt.map(e=>({value:e,label:r(An[e])}))}),u===`admin`?(0,Q.jsx)(w,{control:i.control,name:`actions`,legend:r(`roles.instancePermissions`),options:Ht.map(e=>({value:e,label:r(An[e])}))}):null,(0,Q.jsx)(A,{error:s})]})},Bn=({roles:e,onEdit:t,onDelete:n})=>{let{t:r}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:r(`roles.name`)}),(0,Q.jsx)(V,{children:r(`roles.key`)}),(0,Q.jsx)(V,{children:r(`roles.kind`)}),(0,Q.jsx)(V,{children:r(`roles.permissions`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:r(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>(0,Q.jsxs)(U,{children:[(0,Q.jsxs)(W,{className:`max-w-xs`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(S,{children:e.name}),(0,Q.jsx)(b,{variant:e.isSystem?`secondary`:`outline`,children:e.isSystem?r(`roles.builtIn`):r(`roles.custom`)})]}),e.description?(0,Q.jsx)(`span`,{className:`block truncate text-meta whitespace-normal text-muted-foreground`,children:e.description}):null]}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.key}),(0,Q.jsx)(W,{children:e.kind===`admin`?r(`roles.kindAdmin`):r(`roles.kindDelivery`)}),(0,Q.jsx)(W,{children:r(`roles.permissionsCount`,{count:e.permissions.length})}),(0,Q.jsx)(W,{className:`text-right`,children:e.isSystem?null:(0,Q.jsxs)(Be,{children:[(0,Q.jsx)(Re,{asChild:!0,children:(0,Q.jsx)(k,{variant:`ghost`,size:`icon-sm`,"aria-label":`${r(`common.actions`)}: ${e.name}`,children:(0,Q.jsx)(Pe,{"aria-hidden":`true`})})}),(0,Q.jsxs)(ze,{align:`end`,children:[(0,Q.jsxs)(M,{onSelect:()=>t(e),children:[(0,Q.jsx)(Ve,{"aria-hidden":`true`}),r(`common.edit`)]}),(0,Q.jsxs)(M,{variant:`destructive`,onSelect:()=>n(e),children:[(0,Q.jsx)(fe,{"aria-hidden":`true`}),r(`common.delete`)]})]})]})})]},e.id))})]})})},Vn=()=>{let{t:e}=l();return(0,Q.jsx)(Bt,{label:e(`roles.sections`),tabs:[{to:`/network/roles`,label:e(`roles.tabAdmin`)},{to:`/network/roles/app`,label:e(`roles.tabApp`)}]})},Hn=()=>{let{t:e}=l(),t=Pt(),n=Rt(),r=Nt(),[i,a]=(0,$.useState)({open:!1,role:void 0});return(0,Q.jsxs)(_,{width:`full`,children:[(0,Q.jsx)(v,{title:e(`roles.title`),tabs:(0,Q.jsx)(Vn,{}),actions:(0,Q.jsxs)(k,{onClick:()=>a({open:!0,role:void 0}),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`roles.create`)]})}),(0,Q.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:Ze,title:e(`roles.empty`)}),children:e=>(0,Q.jsx)(Bn,{roles:e,onEdit:e=>a({open:!0,role:e}),onDelete:e=>r.ask(e)})}),(0,Q.jsx)(zn,{open:i.open,onOpenChange:e=>a(t=>({...t,open:e})),role:i.role}),(0,Q.jsx)(Ne,{open:r.open,onOpenChange:r.onOpenChange,title:e(`roles.deleteTitle`,{name:r.target?.name??``}),description:e(`roles.deleteDescription`),confirmLabel:e(`common.delete`),destructive:!0,onConfirm:()=>{r.target&&n.mutate(r.target.id,{onSuccess:()=>T.success(e(`roles.deleted`))})}})]})},Un=B({key:q().trim().regex(Mn,`validation.roleKey`),name:F(),description:q().trim()}),Wn={key:``,name:``,description:``},Gn=(e,t)=>{let n=qe(),r=L({resolver:I(Un),defaultValues:Wn}),{reset:i}=r;return(0,$.useEffect)(()=>{e&&i(Wn)},[e,i]),{form:r,onSubmit:r.handleSubmit(async e=>{let r=await R(n.mutateAsync({...e,permissions:[]}));r.ok&&(T.success(O.t(`appRoles.created`)),t(r.value))}),createAppRole:n}},Kn=({open:e,onOpenChange:t,onCreated:n})=>{let{t:r}=l(),{form:i,onSubmit:a,createAppRole:o}=Gn(e,n);return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(`appRoles.createTitle`),dirty:i.formState.isDirty,pending:o.isPending,submitLabel:r(`common.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,Q.jsx)(P,{control:i.control,name:`name`,label:r(`roles.name`),autoComplete:`off`}),(0,Q.jsx)(P,{control:i.control,name:`key`,label:r(`roles.key`),hint:r(`roles.keyHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`}),(0,Q.jsx)(St,{control:i.control,name:`description`,label:r(`roles.roleDescription`),rows:2}),(0,Q.jsx)(A,{error:o.error})]})},qn=e=>e.permissions.some(e=>e.action===`read`&&e.modelId===null&&e.condition===null),Jn=()=>{let e=Xe();return{grantReadAll:t=>e.mutate({id:t.id,input:{expectedVersion:t.version,permissions:[...t.permissions.filter(e=>e.action!==`read`||e.modelId!==null),{action:`read`,modelId:null,condition:null,fieldIds:null}]}},{onSuccess:()=>T.success(O.t(`appRoles.readAllGranted`,{name:t.name})),onError:e=>T.error(ge(e))}),pendingRoleId:e.isPending?e.variables?.id:void 0}},Yn=({role:e,onDelete:t})=>{let{t:n}=l(),[r,i]=(0,$.useState)(!1);return(0,Q.jsxs)(Be,{children:[(0,Q.jsx)(j,{tone:`danger`,open:r,onOpenChange:i,title:n(`roles.deleteTitle`,{name:e.name}),description:n(`appRoles.deleteDescription`),confirmLabel:n(`common.delete`),onConfirm:()=>t(e),children:(0,Q.jsx)(Re,{asChild:!0,children:(0,Q.jsx)(k,{variant:`ghost`,size:`icon-sm`,"aria-label":`${n(`common.actions`)}: ${e.name}`,children:(0,Q.jsx)(Pe,{"aria-hidden":`true`})})})}),(0,Q.jsxs)(ze,{align:`end`,onCloseAutoFocus:e=>r&&e.preventDefault(),children:[(0,Q.jsx)(M,{asChild:!0,children:(0,Q.jsxs)(g,{to:`/network/roles/app/$roleId`,params:{roleId:e.id},children:[(0,Q.jsx)(Kt,{"aria-hidden":`true`}),n(`appRoles.editPermissions`)]})}),e.isSystem?null:(0,Q.jsxs)(M,{variant:`destructive`,onSelect:()=>i(!0),children:[(0,Q.jsx)(fe,{"aria-hidden":`true`}),n(`common.delete`)]})]})]})},Xn={public:`appRoles.holdersPublic`,authenticated:`appRoles.holdersAuthenticated`},Zn=e=>Object.hasOwn(Xn,e)?Xn[e]:void 0,Qn=({roles:e,onDelete:t,onGrantReadAll:n,pendingRoleId:r})=>{let{t:i}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:i(`roles.name`)}),(0,Q.jsx)(V,{children:i(`roles.key`)}),(0,Q.jsx)(V,{children:i(`appRoles.heldBy`)}),(0,Q.jsx)(V,{children:i(`roles.permissions`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:i(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>{let a=e.isSystem?Zn(e.key):void 0;return(0,Q.jsxs)(U,{children:[(0,Q.jsxs)(W,{className:`max-w-xs`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(S,{asChild:!0,children:(0,Q.jsx)(g,{to:`/network/roles/app/$roleId`,params:{roleId:e.id},children:e.name})}),(0,Q.jsx)(b,{variant:e.isSystem?`secondary`:`outline`,children:e.isSystem?i(`roles.builtIn`):i(`roles.custom`)})]}),e.description?(0,Q.jsx)(`span`,{className:`block text-meta whitespace-normal text-muted-foreground`,children:e.description}):null]}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.key}),(0,Q.jsx)(W,{children:a?i(a):i(`appRoles.userCount`,{count:e.userCount})}),(0,Q.jsx)(W,{children:(0,Q.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[i(`roles.permissionsCount`,{count:e.permissions.length}),e.isSystem&&!qn(e)?(0,Q.jsxs)(k,{variant:`outline`,size:`sm`,disabled:r===e.id,"aria-label":`${i(`appRoles.grantReadAll`)}: ${e.name}`,onClick:()=>n(e),children:[(0,Q.jsx)(Wt,{"aria-hidden":`true`}),i(`appRoles.grantReadAll`)]}):null]})}),(0,Q.jsx)(W,{className:`text-right`,children:(0,Q.jsx)(Yn,{role:e,onDelete:t})})]},e.id)})})]})})},$n=()=>{let{t:e}=l(),t=ee(),n=Je(),r=Ue(),[i,a]=(0,$.useState)(!1),{grantReadAll:o,pendingRoleId:s}=Jn(),c=async t=>{await r.mutateAsync(t.id),T.success(e(`roles.deleted`))};return(0,Q.jsxs)(_,{width:`full`,children:[(0,Q.jsx)(v,{title:e(`appRoles.title`),tabs:(0,Q.jsx)(Vn,{}),actions:(0,Q.jsxs)(k,{onClick:()=>a(!0),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`appRoles.create`)]})}),(0,Q.jsx)(J,{query:n,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:Ze,title:e(`roles.empty`)}),children:t=>(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[t.some(e=>e.isSystem&&!qn(e))?(0,Q.jsxs)(Ae,{variant:`info`,role:`note`,children:[(0,Q.jsx)(de,{"aria-hidden":`true`}),(0,Q.jsx)(Me,{children:e(`appRoles.denyByDefault`)})]}):null,(0,Q.jsx)(Qn,{roles:t,onDelete:c,onGrantReadAll:o,pendingRoleId:s})]})}),(0,Q.jsx)(Kn,{open:i,onOpenChange:a,onCreated:e=>{a(!1),t({to:`/network/roles/app/$roleId`,params:{roleId:e.id}})}})]})},er=new Set([`read`,`update`,`delete`,`publish`]),tr=new Set([`read`,`create`,`update`]),nr={read:`appRoles.actions.read`,create:`appRoles.actions.create`,update:`appRoles.actions.update`,delete:`appRoles.actions.delete`,publish:`appRoles.actions.publish`},rr=e=>{let t={};for(let n of e){let e=n.modelId??`*`;t[e]={...t[e],[n.action]:{ownOnly:n.condition===`ownedByPrincipal`,fieldIds:n.fieldIds===null?null:[...n.fieldIds].sort()}}}return t},ir=e=>Object.keys(e).sort((e,t)=>e===`*`?-1:t===`*`?1:e.localeCompare(t)).flatMap(t=>Z.flatMap(n=>{let r=e[t]?.[n];return r?[{action:n,modelId:t===`*`?null:t,condition:r.ownOnly&&er.has(n)?`ownedByPrincipal`:null,fieldIds:tr.has(n)?r.fieldIds:null}]:[]})),ar=(e,t,n,r)=>{let i={...e[t]};return r?i[n]=r:delete i[n],{...e,[t]:i}},or=(e,t,n,r)=>ar(e,t,n,r?e[t]?.[n]??{ownOnly:!1,fieldIds:null}:void 0),sr=(e,t,n,r)=>{let i=e[t]?.[n];return i?ar(e,t,n,{...i,...r}):e},cr=(e,t)=>Z.some(n=>t?.[n]!==void 0&&(er.has(n)||e!==`*`&&tr.has(n))),lr=(e,t,n,r)=>t.reduce((e,t)=>or(e,t,n,r),e),ur=(e,t,n)=>{let r=t.filter(t=>e[t]?.[n]!==void 0).length;return r===0?!1:r===t.length||`indeterminate`},dr=B({name:F(),description:q().trim()}),fr=e=>{let t=Xe(),n=L({resolver:I(dr),defaultValues:{name:e.name,description:e.description}}),[r,i]=(0,$.useState)(()=>rr(e.permissions)),a=(0,$.useMemo)(()=>JSON.stringify(ir(rr(e.permissions))),[e.permissions]),o=(0,$.useMemo)(()=>ir(r),[r]),s=JSON.stringify(o)!==a,c=!e.isSystem&&n.formState.isDirty,l=n.handleSubmit(async n=>{(await R(t.mutateAsync({id:e.id,input:{expectedVersion:e.version,...c?n:{},...s?{permissions:o}:{}}}))).ok&&T.success(O.t(`roles.saved`))});return{form:n,matrix:r,setMatrix:i,dirty:s||c,onSubmit:l,pending:t.isPending,error:t.error}},pr=`all`,mr=`selected`,hr=({id:e,rowKey:t,fields:n,grants:r,onChange:i})=>{let{t:a}=l(),o=(n??[]).filter(e=>!e.deprecated);return(0,Q.jsx)(`div`,{id:e,className:`grid gap-6 border-t bg-muted/40 px-5 py-4 md:grid-cols-2`,children:Z.map(n=>{let s=r[n],c=er.has(n),l=t!==`*`&&tr.has(n);if(!s||!c&&!l)return null;let u=`${e}-${n}`;return(0,Q.jsxs)(me,{className:`gap-3`,children:[(0,Q.jsx)(pe,{variant:`label`,children:a(nr[n])}),c?(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(E,{htmlFor:`${u}-own`,children:a(`appRoles.ownOnly`)}),(0,Q.jsx)(st,{id:`${u}-own`,checked:s.ownOnly,onCheckedChange:e=>i(n,{ownOnly:e})})]}):null,l?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(ot,{"aria-label":a(`appRoles.fieldScope`),value:s.fieldIds===null?pr:mr,onValueChange:e=>i(n,{fieldIds:e===pr?null:o.filter(e=>e.public).map(e=>e.id)}),children:[(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(at,{id:`${u}-all`,value:pr}),(0,Q.jsx)(E,{htmlFor:`${u}-all`,className:`font-normal`,children:a(`appRoles.allPublicFields`)})]}),(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(at,{id:`${u}-selected`,value:mr}),(0,Q.jsx)(E,{htmlFor:`${u}-selected`,className:`font-normal`,children:a(`appRoles.selectedFields`)})]})]}),s.fieldIds===null?null:(0,Q.jsx)(`div`,{className:`grid gap-2 pl-6 sm:grid-cols-2`,children:o.map(e=>{let t=s.fieldIds??[],r=`${u}-field-${e.id}`;return(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(je,{id:r,checked:t.includes(e.id),onCheckedChange:r=>i(n,{fieldIds:r===!0?[...t,e.id].sort():t.filter(t=>t!==e.id)})}),(0,Q.jsxs)(E,{htmlFor:r,className:`font-normal`,children:[e.label,e.public?null:(0,Q.jsx)(b,{variant:`secondary`,children:a(`appRoles.notPublic`)})]})]},e.id)})})]}):null]},n)})})},gr=({label:e,detail:t,grants:n,optionsId:r,expanded:i,canExpand:a,onToggle:o,onToggleExpanded:s})=>{let{t:c}=l();return(0,Q.jsxs)(U,{className:`hover:bg-transparent has-aria-expanded:bg-transparent`,children:[(0,Q.jsx)(W,{className:`sticky left-0 z-10 h-9 bg-card py-0`,children:(0,Q.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,Q.jsx)(`span`,{className:`font-semibold`,children:e}),(0,Q.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:t})]})}),Z.map(t=>(0,Q.jsx)(W,{className:`h-9 py-0 text-center`,children:(0,Q.jsx)(je,{checked:n[t]!==void 0,onCheckedChange:e=>o(t,e===!0),"aria-label":`${c(nr[t])}: ${e}`,className:`align-middle`})},t)),(0,Q.jsx)(W,{className:`h-9 py-0 text-right`,children:(0,Q.jsxs)(k,{type:`button`,variant:`ghost`,size:`xs`,disabled:!a,"aria-expanded":i,"aria-controls":i?r:void 0,"aria-label":`${c(`appRoles.options`)}: ${e}`,onClick:s,children:[c(`appRoles.options`),(0,Q.jsx)(De,{"aria-hidden":`true`,className:f(`transition-transform`,i&&`rotate-180`)})]})})]})},_r=({matrix:e,models:t,onChange:n})=>{let{t:r}=l(),[i,a]=(0,$.useState)(new Set),o=e=>a(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),s=[{key:`*`,label:r(`appRoles.allModels`),detail:r(`appRoles.allModelsHint`),fields:void 0},...t.map(e=>e.definition).filter(ue).map(e=>({key:e.id,label:e.label,detail:e.apiKey,fields:e.fields}))],c=s.map(e=>e.key);return(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{className:`sticky left-0 z-10 min-w-60 bg-muted`,children:r(`appRoles.model`)}),Z.map(t=>{let i=r(nr[t]);return(0,Q.jsx)(V,{className:`w-24 bg-muted`,children:(0,Q.jsxs)(`span`,{className:`flex items-center justify-center gap-2`,children:[(0,Q.jsx)(je,{checked:ur(e,c,t),onCheckedChange:r=>n(lr(e,c,t,r===!0)),"aria-label":r(`appRoles.everyRow`,{action:i})}),i]})},t)}),(0,Q.jsx)(V,{className:`bg-muted`,children:(0,Q.jsx)(`span`,{className:`sr-only`,children:r(`appRoles.options`)})})]})}),(0,Q.jsx)(H,{children:s.map(t=>{let r=e[t.key]??{},a=cr(t.key,r),s=a&&i.has(t.key),c=`app-role-options-${t.key===`*`?`all`:t.key}`;return(0,Q.jsxs)($.Fragment,{children:[(0,Q.jsx)(gr,{label:t.label,detail:t.detail,grants:r,optionsId:c,expanded:s,canExpand:a,onToggle:(r,i)=>n(or(e,t.key,r,i)),onToggleExpanded:()=>o(t.key)}),s?(0,Q.jsx)(U,{className:`hover:bg-transparent`,children:(0,Q.jsx)(W,{colSpan:Z.length+2,className:`h-auto p-0 whitespace-normal`,children:(0,Q.jsx)(hr,{id:c,rowKey:t.key,fields:t.fields,grants:r,onChange:(r,i)=>n(sr(e,t.key,r,i))})})}):null]},t.key)})})]})},vr={public:`appRoles.publicExplained`,authenticated:`appRoles.authenticatedExplained`},yr=e=>Object.hasOwn(vr,e)?vr[e]:void 0,br=({role:e,models:t})=>{let{t:n}=l(),r=fr(e),i=e.isSystem?yr(e.key):void 0,a=[{label:n(`roles.title`),link:h({to:`/network/roles`})},{label:n(`appRoles.title`),link:h({to:`/network/roles/app`})}];return(0,Q.jsxs)(`form`,{noValidate:!0,className:`space-y-6`,onSubmit:e=>void r.onSubmit(e),children:[(0,Q.jsx)(v,{sticky:!0,breadcrumb:a,title:e.name,badge:e.isSystem?(0,Q.jsx)(b,{variant:`secondary`,children:n(`roles.builtIn`)}):null,meta:i?n(i):e.description||void 0,actions:(0,Q.jsx)(re,{pending:r.pending,pendingLabel:n(`common.saving`),disabled:!r.dirty,children:n(`common.saveChanges`)})}),e.isSystem?null:(0,Q.jsx)(Y,{title:n(`appRoles.details`),children:(0,Q.jsxs)(he,{className:`max-w-xl`,children:[(0,Q.jsx)(P,{control:r.form.control,name:`name`,label:n(`roles.name`),autoComplete:`off`}),(0,Q.jsx)(St,{control:r.form.control,name:`description`,label:n(`roles.roleDescription`),rows:2})]})}),(0,Q.jsx)(Y,{title:n(`roles.permissions`),description:n(`appRoles.permissionsHint`),flush:!0,children:(0,Q.jsx)(_r,{matrix:r.matrix,models:t,onChange:r.setMatrix})}),(0,Q.jsx)(A,{error:r.error}),(0,Q.jsx)(le,{when:r.dirty&&!r.pending})]})},xr=()=>{let{roleId:e}=ie({from:`/app/network/roles/app/$roleId`}),t=Ye(e),n=vt(`model`);return(0,Q.jsx)(_,{width:`full`,children:(0,Q.jsx)(J,{query:t,loadingRows:6,children:e=>(0,Q.jsx)(J,{query:n,loadingRows:6,children:t=>(0,Q.jsx)(br,{role:e,models:t},`${e.id}:${e.version}`)})})})},Sr=()=>{let{t:e}=l(),t=te().data?.emailDelivery,n=kt(),[r,i]=(0,$.useState)(void 0),a=async({id:e,email:t})=>{let r=await n.mutateAsync(e);i({...r,email:t})};return{revealed:r,emailDelivery:t,reveal:a,announceInvitation:async n=>{if(t===`console`){await a(n);return}T.success(e(`users.invited`,{email:n.email}),{action:{label:e(`users.copyLink`),onClick:()=>void R(a(n))}})},dismiss:()=>i(void 0),keepFocusOnReveal:e=>{r&&e.preventDefault()}}},Cr=({link:e,emailDelivery:t,onDismiss:n})=>{let{t:r}=l(),i=x(e.expiresAt);return(0,Q.jsx)(zt,{title:r(`users.invitationLink.title`,{email:e.email}),description:r(t===`console`?`users.invitationLink.noEmailDescription`:`users.invitationLink.description`,{date:i}),label:r(`users.invitationLink.label`),secret:e.acceptUrl,dismissLabel:r(`users.invitationLink.done`),onDismiss:n})},wr=({assignments:e,roleNames:t,siteNames:n})=>{let{t:r}=l(),i=n.size>1;return e.map(({roleId:e,siteId:a})=>{let o=t.get(e)??r(`common.unknown`),s=a===null?r(`sites.switcher.allSites`):n.get(a)??r(`common.unknown`);return(0,Q.jsx)(b,{variant:`outline`,children:i?r(`users.access.badge`,{role:o,site:s}):o},`${e}:${a??``}`)})},Tr=({siteNames:e,onCopyLink:t,onCloseAutoFocus:n})=>{let{t:r}=l(),i=jt(),{names:a}=Ft(),o=wt();return i.isError?(0,Q.jsx)(oe,{error:i.error,onRetry:()=>void i.refetch()}):!i.data||i.data.length===0?null:(0,Q.jsx)(Y,{title:r(`users.invitationsTitle`),flush:!0,children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:r(`users.email`)}),(0,Q.jsx)(V,{children:r(`users.roles`)}),(0,Q.jsx)(V,{children:r(`users.invitationExpires`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:r(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:i.data.map(i=>(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsx)(S,{children:i.email})}),(0,Q.jsx)(W,{children:(0,Q.jsx)(`span`,{className:`flex flex-wrap gap-1`,children:(0,Q.jsx)(wr,{assignments:i.assignments,roleNames:a,siteNames:e})})}),(0,Q.jsx)(W,{title:x(i.expiresAt),children:se(i.expiresAt)}),(0,Q.jsx)(W,{children:(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Q.jsx)(j,{tone:`default`,title:r(`users.invitationLink.confirmTitle`,{email:i.email}),description:r(`users.invitationLink.confirmDescription`),confirmLabel:r(`users.invitationLink.create`),onConfirm:()=>t(i),onCloseAutoFocus:n,trigger:(0,Q.jsxs)(k,{variant:`outline`,size:`sm`,"aria-label":`${r(`users.copyLink`)}: ${i.email}`,children:[(0,Q.jsx)(Ie,{"aria-hidden":`true`}),r(`users.copyLink`)]})}),(0,Q.jsx)(j,{tone:`danger`,title:r(`users.revokeInvitationTitle`,{email:i.email}),description:r(`users.revokeInvitationDescription`),confirmLabel:r(`common.revoke`),onConfirm:async()=>{await o.mutateAsync(i.id),T.success(r(`users.invitationRevoked`))},trigger:(0,Q.jsx)(k,{variant:`outline`,size:`sm`,"aria-label":`${r(`common.revoke`)}: ${i.email}`,children:r(`common.revoke`)})})]})})]},i.id))})]})})},Er=e=>e??`all`,Dr=(e,t)=>{let n=new Map;for(let{roleId:r,siteId:i}of e){let e=Er(i);(!n.has(e)||r===t)&&n.set(e,r)}return[...n].map(([e,t])=>({site:e,roleId:t}))},Or=e=>e.map(({site:e,roleId:t})=>({roleId:t,siteId:e===`all`?null:e})),kr=e=>ht(B({site:q().min(1),roleId:q().min(1,`validation.selectRole`)})).min(1).superRefine((t,n)=>{let r=new Set;t.forEach((t,i)=>{r.has(t.site)&&n.addIssue({code:`custom`,path:[i,`site`],message:`validation.siteTwice`}),r.add(t.site),e!==void 0&&t.roleId===e&&t.site!==`all`&&n.addIssue({code:`custom`,path:[i,`roleId`],message:`validation.ownerAllSites`})})}),Ar=(e,t,n)=>{let r=new Set(e.map(e=>e.site)),i=[`all`,...t].find(e=>!r.has(e));return i===void 0?void 0:{site:i,roleId:n}},jr=({control:e,roleOptions:t,siteOptions:n,siteIds:r,multiSite:i,defaultRoleId:a})=>{let{t:o}=l(),{fields:s,append:c,remove:u}=dt({control:e,name:`rows`}),{errors:d}=ct({control:e,name:`rows`}),f=lt({control:e,name:`rows`}),p=(e,t)=>`rows.${e}.${t}`;if(!i)return(0,Q.jsx)(yt,{control:e,name:p(0,`roleId`),legend:o(`users.role`),options:t});let m=Ar(f??[],r,a??``),h=d.rows;return(0,Q.jsxs)(me,{children:[(0,Q.jsx)(pe,{variant:`label`,children:o(`users.access.title`)}),(0,Q.jsx)(`div`,{className:`space-y-3`,children:s.map((r,i)=>(0,Q.jsxs)(`fieldset`,{"aria-label":o(`users.access.row`,{n:i+1}),className:`grid grid-cols-[1fr_1fr_auto] items-start gap-3`,children:[(0,Q.jsx)(Ct,{control:e,name:p(i,`site`),label:o(`users.access.site`),options:n}),(0,Q.jsx)(Ct,{control:e,name:p(i,`roleId`),label:o(`users.role`),options:t}),(0,Q.jsx)(k,{type:`button`,variant:`ghost`,size:`icon`,className:`mt-7`,disabled:s.length===1,"aria-label":o(`users.access.remove`,{n:i+1}),onClick:()=>u(i),children:(0,Q.jsx)(ne,{"aria-hidden":`true`})})]},r.id))}),(0,Q.jsx)(ft,{message:h?.root?.message??h?.message}),(0,Q.jsx)(`div`,{children:(0,Q.jsxs)(k,{type:`button`,variant:`outline`,size:`sm`,disabled:!m,onClick:()=>m&&c(m),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),o(`users.access.add`)]})})]})},Mr={owner:`owner`,editor:`editor`},Nr=({includeOwner:e,heldRoleIds:t=[]})=>{let n=Pt(),r=(n.data??[]).filter(e=>e.kind===`admin`),i=e=>e===Mr.owner;return{options:r.filter(n=>!i(n.key)||e||t.includes(n.id)).map(e=>({value:e.id,label:e.name,...e.description?{description:e.description}:{}})),editorRoleId:r.find(e=>e.key===Mr.editor)?.id,ownerRoleId:r.find(e=>i(e.key))?.id,isPending:n.isPending,error:n.error}},Pr=({includeOwner:e,heldRoleIds:t})=>{let{t:n}=l(),r=Nr({includeOwner:e,...t?{heldRoleIds:t}:{}}),i=Zt(),a=(0,$.useMemo)(()=>[{value:`all`,label:n(`sites.switcher.allSites`)},...(i.data??[]).map(e=>({value:e.id,label:e.name}))],[i.data,n]),o=(0,$.useMemo)(()=>(i.data??[]).map(e=>e.id),[i.data]);return{roleOptions:r.options,siteOptions:a,siteIds:o,multiSite:o.length>1,editorRoleId:r.editorRoleId,ownerRoleId:r.ownerRoleId,error:r.error??i.error}},Fr=e=>({email:``,rows:[{site:`all`,roleId:e}]}),Ir=({open:e,defaultRoleId:t,ownerRoleId:n,onInvited:r,onDone:i})=>{let a=Dt(),o=(0,$.useMemo)(()=>B({email:ut(),rows:kr(n)}),[n]),s=L({resolver:I(o),defaultValues:Fr(``)}),{reset:c}=s;return(0,$.useEffect)(()=>{e&&c(Fr(t??``))},[e,t,c]),{form:s,onSubmit:s.handleSubmit(async({email:e,rows:n})=>{let o=await R(a.mutateAsync({email:e,assignments:Or(n)}));o.ok&&(await R(r(o.value)),c(Fr(t??``)),i())}),invite:a}},Lr=({open:e,onOpenChange:t,onInvited:n,onCloseAutoFocus:r})=>{let{t:i}=l(),a=Pr({includeOwner:!1}),{form:o,onSubmit:s,invite:c}=Ir({open:e,defaultRoleId:a.editorRoleId,ownerRoleId:a.ownerRoleId,onInvited:n,onDone:()=>t(!1)});return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:i(`users.inviteTitle`),dirty:o.formState.isDirty,pending:o.formState.isSubmitting,submitLabel:i(`users.invite`),pendingLabel:i(`common.saving`),onSubmit:e=>void s(e),onCloseAutoFocus:r,children:[(0,Q.jsx)(P,{control:o.control,name:`email`,label:i(`users.email`),type:`email`,autoComplete:`off`}),(0,Q.jsx)(jr,{control:o.control,roleOptions:a.roleOptions,siteOptions:a.siteOptions,siteIds:a.siteIds,multiSite:a.multiSite,defaultRoleId:a.editorRoleId}),(0,Q.jsx)(A,{error:c.error??a.error})]})},Rr=(e,t,n,r)=>{let i=At(),a=(0,$.useMemo)(()=>B({rows:kr(n)}),[n]),o=L({resolver:I(a),defaultValues:{rows:[]}}),{reset:s}=o;return(0,$.useEffect)(()=>{e&&s({rows:Dr(t.assignments,n)})},[e,t.assignments,n,s]),{form:o,onSubmit:o.handleSubmit(async({rows:e})=>{(await R(i.mutateAsync({id:t.id,input:{assignments:Or(e)}}))).ok&&(T.success(O.t(`users.rolesSaved`)),r())}),updateUser:i}},zr=()=>te().data?.roles.some(e=>e.key===Mr.owner)??!1,Br=({open:e,onOpenChange:t,user:n})=>{let{t:r}=l(),i=Pr({includeOwner:zr(),heldRoleIds:n.assignments.map(e=>e.roleId)}),{form:a,onSubmit:o,updateUser:s}=Rr(e,n,i.ownerRoleId,()=>t(!1));return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(`users.accessTitle`,{name:n.name||n.email}),dirty:a.formState.isDirty,pending:s.isPending,submitLabel:r(`common.saveChanges`),pendingLabel:r(`common.saving`),onSubmit:e=>void o(e),children:[(0,Q.jsx)(jr,{control:a.control,roleOptions:i.roleOptions,siteOptions:i.siteOptions,siteIds:i.siteIds,multiSite:i.multiSite,defaultRoleId:i.editorRoleId}),(0,Q.jsx)(A,{error:s.error??i.error})]})},Vr=({user:e,roleNames:t,siteNames:n,isSelf:r,onToggleStatus:i,onRemove:a})=>{let{t:o}=l(),[s,c]=(0,$.useState)(void 0),[u,d]=(0,$.useState)(!1),f=e.name||e.email;return(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsx)(Ke,{name:f,email:e.email,badge:r?(0,Q.jsx)(b,{variant:`secondary`,children:o(`users.you`)}):null})}),(0,Q.jsxs)(W,{children:[(0,Q.jsx)(`span`,{className:`flex flex-wrap gap-1`,children:(0,Q.jsx)(wr,{assignments:e.assignments,roleNames:t,siteNames:n})}),s===void 0?null:(0,Q.jsx)(Br,{open:s,onOpenChange:c,user:e})]}),(0,Q.jsx)(W,{children:e.status===`active`?(0,Q.jsx)(ae,{tone:`success`,label:o(`users.active`)}):(0,Q.jsx)(ae,{tone:`muted`,label:o(`users.disabled`)})}),(0,Q.jsx)(W,{title:x(e.lastLoginAt)||void 0,children:e.lastLoginAt?se(e.lastLoginAt):o(`common.never`)}),(0,Q.jsx)(W,{className:`text-right`,children:r?null:(0,Q.jsxs)(Be,{children:[(0,Q.jsx)(j,{tone:`danger`,open:u,onOpenChange:d,title:o(`users.removeTitle`,{name:f}),description:o(`users.removeDescription`),confirmLabel:o(`common.remove`),onConfirm:()=>a(e),children:(0,Q.jsx)(Re,{asChild:!0,children:(0,Q.jsx)(k,{variant:`ghost`,size:`icon-sm`,"aria-label":`${o(`common.actions`)}: ${f}`,children:(0,Q.jsx)(Pe,{"aria-hidden":`true`})})})}),(0,Q.jsxs)(ze,{align:`end`,onCloseAutoFocus:e=>(u||s)&&e.preventDefault(),children:[(0,Q.jsxs)(M,{onSelect:()=>c(!0),children:[(0,Q.jsx)(Ze,{"aria-hidden":`true`}),o(`users.editAccess`)]}),(0,Q.jsxs)(M,{onSelect:()=>i(e),children:[e.status===`active`?(0,Q.jsx)(Qe,{"aria-hidden":`true`}):(0,Q.jsx)(We,{"aria-hidden":`true`}),e.status===`active`?o(`users.disable`):o(`users.enable`)]}),(0,Q.jsx)(Le,{}),(0,Q.jsxs)(M,{variant:`destructive`,onSelect:()=>d(!0),children:[(0,Q.jsx)(fe,{"aria-hidden":`true`}),o(`common.remove`)]})]})]})})]})},Hr=({users:e,roleNames:t,siteNames:n,currentUserId:r,onToggleStatus:i,onRemove:a})=>{let{t:o}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:o(`users.name`)}),(0,Q.jsx)(V,{children:o(`users.roles`)}),(0,Q.jsx)(V,{children:o(`users.status`)}),(0,Q.jsx)(V,{children:o(`users.lastLogin`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:o(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>(0,Q.jsx)(Vr,{user:e,roleNames:t,siteNames:n,isSelf:e.id===r,onToggleStatus:i,onRemove:a},e.id))})]})})},Ur={sites:C(`/app/network/sites`)({component:xn}),site:C(`/app/network/sites/$siteId`)({component:hn}),contentTypes:C(`/app/network/content-types/`)({component:qt}),newContentType:C(`/app/network/content-types/new`)({component:Yt}),users:C(`/app/network/users`)({component:()=>{let{t:e}=l(),{data:t}=te(),n=Tt(),{names:r}=Ft(),{names:i}=$t(),a=Ot(),o=Et(),[s,c]=(0,$.useState)(!1),u=Sr(),d=async t=>{await o.mutateAsync(t.id),T.success(e(`users.removed`))};return(0,Q.jsxs)(_,{children:[(0,Q.jsx)(v,{title:e(`users.title`),actions:(0,Q.jsxs)(k,{onClick:()=>c(!0),children:[(0,Q.jsx)($e,{"aria-hidden":`true`}),e(`users.invite`)]})}),(0,Q.jsx)(J,{query:n,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:rt,title:e(`users.empty`)}),children:n=>(0,Q.jsx)(Hr,{users:n,roleNames:r,siteNames:i,currentUserId:t?.user.id,onToggleStatus:t=>a.mutate({id:t.id,status:t.status===`active`?`disabled`:`active`},{onSuccess:()=>T.success(e(`users.statusChanged`))}),onRemove:d})}),u.revealed?(0,Q.jsx)(Cr,{link:u.revealed,emailDelivery:u.emailDelivery,onDismiss:u.dismiss},u.revealed.acceptUrl):null,(0,Q.jsx)(Tr,{siteNames:i,onCopyLink:u.reveal,onCloseAutoFocus:u.keepFocusOnReveal}),(0,Q.jsx)(Lr,{open:s,onOpenChange:c,onInvited:u.announceInvitation,onCloseAutoFocus:u.keepFocusOnReveal})]})}}),roles:C(`/app/network/roles`)({component:Hn}),appRoles:C(`/app/network/roles/app`)({component:$n}),appRole:C(`/app/network/roles/app/$roleId`)({component:xr}),auditLog:C(`/app/network/audit-log`)({component:On})};export{Ur as networkLazyRoutes};
|
|
2
|
-
//# sourceMappingURL=network-
|
|
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,V as a,_ as o,bt as s,i as c,j as l,l as u,s as d,t as f,v as p,y as m}from"./cn-h5ORT3LK.js";import{C as h,T as ee,u as te,x as g}from"./auth-BzCgJtgr.js";import{O as ne,_ as re,a as _,i as v,j as ie,n as ae,o as y,r as oe,t as b}from"./badge-DBoaS0nQ.js";import{i as se,n as x,o as ce,t as S}from"./RowTitle-mkKp4yfl.js";import{t as C}from"./fileRoute-CG0Dufvt.js";import{t as le}from"./UnsavedChangesGuard-BPOCBD5T.js";import{t as w}from"./FormCheckboxGroup-JP1xzReQ.js";import{q as ue}from"./src-Be3Ds5Dc.js";import{B as de,G as T,R as fe,d as E,f as pe,o as D,p as me,u as he}from"./InfoHint-D3uwei-E.js";import{N as O,i as k,k as ge,n as _e,r as ve}from"./skeleton-DJVukcn6.js";import{n as ye,t as be}from"./Form-DB03drS9.js";import{u as xe}from"./constants-DH7oqfO_.js";import{t as Se}from"./boxes-DhN0ctLo.js";import{a as Ce,i as we,n as Te,r as Ee,s as De,t as Oe}from"./select--mePTdz8.js";import{t as ke}from"./CursorPager-BW2Dl_hn.js";import{a as Ae,i as A,n as je,o as Me,r as j,t as Ne}from"./ConfirmDialog-BW-l3Whg.js";import{t as Pe}from"./ellipsis-BMP-j3yO.js";import{t as Fe}from"./search-Dy2dtwyR.js";import{t as Ie}from"./link-Bvqcg7db.js";import{a as M,l as Le,p as Re,r as ze,t as Be}from"./dropdown-menu-DGSMTf23.js";import{t as Ve}from"./pencil-BLNGNJmL.js";import{t as N}from"./plus-BXMBYPoB.js";import{t as He}from"./scroll-text-DlcDEi2k.js";import{_ as Ue,b as We,d as Ge,f as Ke,g as qe,h as Je,p as Ye,v as Xe,x as Ze,y as Qe}from"./searchSchemas-Cz4P1iku.js";import{i as $e,n as et,r as tt,t as nt}from"./useAuditLabels-DV5gcaaG.js";import{t as rt}from"./users-CppI8ctO.js";import{t as it}from"./UserAvatar-BHNWHDVb.js";import{n as at,t as ot}from"./radio-group-BIhT_uEK.js";import{t as st}from"./switch-skVypg5O.js";import{d as ct,f as lt,i as ut,l as dt,n as P,o as F,r as ft,t as I,u as L}from"./zod-Dcwk-m8X.js";import{t as R}from"./settle-LRKtTN_e.js";import{a as z,f as pt,g as B,i as V,l as mt,n as H,o as U,r as W,s as G,t as K,u as ht,v as q}from"./table-BMbbRUK9.js";import{t as gt}from"./HintedLabel-BGidukgy.js";import{m as _t,s as vt}from"./schema-CWHuez0q.js";import{t as J}from"./QueryView-C2d392ly.js";import{t as yt}from"./FormRadioGroup-BvSC8SRm.js";import{t as Y}from"./Panel-DDky5_x9.js";import{a as bt,i as xt}from"./followPlural-D-8kzFOe.js";import{t as St}from"./FormTextareaField-Bw7EkC4H.js";import{n as X,t as Ct}from"./FormSelectField-BDIVhZh6.js";import{a as wt,c as Tt,i as Et,n as Dt,o as Ot,r as kt,s as At,t as jt}from"./users-BRefbzuS.js";import{n as Mt,t as Nt}from"./useConfirmTarget-DCvnxNVg.js";import{a as Pt,i as Ft,n as It,o as Lt,r as Rt,t as zt}from"./SecretReveal-mYCzxF96.js";import{t as Bt}from"./LinkTabs-DBXbfzME.js";var Vt=[`read`,`create`,`update`,`delete`,`publish`,`schemaManage`],Ht=[`schema.create`,`users.manage`,`roles.manage`,`tokens.manage`,`audit.read`,`sites.manage`,`media.read`,`media.write`,`media.manage`,`publishing.manage`,`webhooks.manage`,`deployments.manage`,`deployments.trigger`,`changes.manage`,`changes.ship`,`site.settings`],Z=[`read`,`create`,`update`,`delete`,`publish`],Ut={name:`book-open`,size:24,node:[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]};Ut.node;var Wt=c(Ut),Gt={name:`sliders-horizontal`,size:24,node:[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]};Gt.node;var Kt=c(Gt),Q=e(n(),1),qt=()=>{let{t:e}=l(),t=_t(),{locked:n,reason:r}=bt(),i=n?null:(0,Q.jsx)(k,{asChild:!0,children:(0,Q.jsxs)(g,{to:`/network/content-types/new`,children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`contentTypes.network.create`)]})});return(0,Q.jsxs)(_,{children:[(0,Q.jsx)(v,{title:e(`contentTypes.network.title`),meta:t.data?e(`contentTypes.network.count`,{count:t.data.length}):void 0,actions:i}),n?(0,Q.jsx)(xt,{reason:r}):null,(0,Q.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:Se,title:e(`contentTypes.network.empty`),description:e(`contentTypes.network.emptyDescription`),action:i}),children:e=>(0,Q.jsx)(ye,{items:e,showKind:!0,markShared:!1})})]})},Jt=[`collection`,`singleton`,`component`],Yt=()=>{let{t:e}=l();return(0,Q.jsx)(be,{title:e(`contentTypes.network.newTitle`),kinds:Jt,back:h({to:`/network/content-types`}),backLabel:e(`contentTypes.network.title`),scope:`network`})},$=e(t(),1),Xt=e=>Promise.all([e.invalidateQueries({queryKey:i.sites.all}),e.invalidateQueries({queryKey:i.me})]),Zt=()=>r({queryKey:i.sites.all,queryFn:()=>u.sites.list(),meta:{silent:!0}}),Qt=e=>r({queryKey:i.sites.site(e),queryFn:()=>u.sites.get(e),meta:{silent:!0}}),$t=()=>{let e=Zt();return{names:(0,$.useMemo)(()=>new Map((e.data??[]).map(e=>[e.id,e.name])),[e.data]),error:e.error}},en=()=>{let e=s();return a({mutationKey:[`sites`,`create`],meta:{silent:!0},mutationFn:e=>d(()=>u.sites.create(e)),onSuccess:()=>Xt(e)})},tn=()=>{let e=s();return a({mutationKey:[`sites`,`update`],meta:{silent:!0},mutationFn:({id:e,input:t})=>d(()=>u.sites.update(e,t)),onSettled:()=>Xt(e)})},nn=()=>{let e=s();return a({mutationKey:[`sites`,`delete`],meta:{silent:!0},mutationFn:e=>d(()=>u.sites.remove(e.id)),onSuccess:(t,n)=>{if(n.key===o().key){m();return}return e.removeQueries({queryKey:i.sites.site(n.id)}),Xt(e)}})},rn=e=>r({queryKey:i.sites.appRoles(e),queryFn:()=>u.sites.appRoles.get(e),meta:{silent:!0}}),an=()=>{let e=s();return a({mutationKey:[`sites`,`appRoles`,`set`],meta:{silent:!0},mutationFn:({id:e,input:t})=>d(()=>u.sites.appRoles.set(e,t)),onSuccess:t=>e.setQueryData(i.sites.appRoles(t.siteId),t)})},on=e=>{let t=an(),n=L({defaultValues:{public:e.public,authenticated:e.authenticated}}),{reset:r,formState:i}=n;return(0,$.useEffect)(()=>{i.isDirty||r({public:e.public,authenticated:e.authenticated})},[e,r,i.isDirty]),{form:n,onSubmit:n.handleSubmit(async n=>{let i=await R(t.mutateAsync({id:e.siteId,input:n}));i.ok&&(r({public:i.value.public,authenticated:i.value.authenticated}),T.success(O.t(`sites.appRoles.saved`)))}),setBindings:t}},sn=({bindings:e,roles:t,canManage:n})=>{let{t:r}=l(),{form:i,onSubmit:a,setBindings:o}=on(e),s=t.map(e=>({value:e.id,label:e.name})),{isDirty:c}=i.formState;return(0,Q.jsxs)(`form`,{noValidate:!0,onSubmit:e=>void a(e),children:[(0,Q.jsxs)(he,{children:[(0,Q.jsx)(w,{control:i.control,name:`public`,legend:r(`sites.appRoles.public`),options:s,disabled:!n}),(0,Q.jsx)(w,{control:i.control,name:`authenticated`,legend:r(`sites.appRoles.authenticated`),options:s,disabled:!n}),(0,Q.jsx)(A,{error:o.error}),n?(0,Q.jsx)(`div`,{children:(0,Q.jsx)(re,{pending:o.isPending,pendingLabel:r(`common.saving`),disabled:!c,children:r(`common.saveChanges`)})}):null]}),(0,Q.jsx)(le,{when:c})]})},cn=({siteId:e,canManage:t})=>{let{t:n}=l(),r=rn(e),i=Je();return(0,Q.jsx)(Y,{title:n(`sites.appRoles.title`),description:n(`sites.appRoles.description`),children:(0,Q.jsx)(J,{query:r,children:e=>(0,Q.jsx)(J,{query:i,children:n=>(0,Q.jsx)(sn,{bindings:e,roles:n,canManage:t})})})})},ln=({site:e})=>{let{t}=l(),n=ee(),r=nn();return(0,Q.jsx)(Y,{title:t(`sites.danger`),description:t(`sites.deleteDescription`),children:(0,Q.jsx)(j,{tone:`danger`,title:t(`sites.deleteTitle`,{name:e.name}),description:t(`sites.deleteConsequence`),confirmLabel:t(`common.delete`),onConfirm:async()=>{await r.mutateAsync(e),e.key!==o().key&&(T.success(t(`sites.deleted`,{name:e.name})),n({to:`/network/sites`}))},trigger:(0,Q.jsx)(k,{variant:`destructive-ghost`,children:t(`sites.delete`)})})})},un=B({name:F().max(200,`validation.tooLong`)}),dn=e=>{let t=tn(),n=L({resolver:I(un),defaultValues:{name:e.name}}),{reset:r,formState:i}=n;return(0,$.useEffect)(()=>{i.isDirty||r({name:e.name})},[e.name,r,i.isDirty]),{form:n,onSubmit:n.handleSubmit(async({name:n})=>{let i=await R(t.mutateAsync({id:e.id,input:{expectedVersion:e.version,name:n}}));i.ok&&(r({name:i.value.name}),T.success(O.t(`sites.renamed`)))}),updateSite:t}},fn=`site-key`,pn=`site-key-hint`,mn=({site:e,canManage:t})=>{let{t:n}=l(),{form:r,onSubmit:i,updateSite:a}=dn(e),{isDirty:o}=r.formState;return(0,Q.jsxs)(Y,{title:n(`sites.details`),children:[(0,Q.jsx)(`form`,{noValidate:!0,onSubmit:e=>void i(e),className:`max-w-md`,children:(0,Q.jsxs)(he,{children:[(0,Q.jsx)(P,{control:r.control,name:`name`,label:n(`sites.name`),autoComplete:`off`,readOnly:!t}),(0,Q.jsxs)(D,{children:[(0,Q.jsx)(gt,{htmlFor:fn,label:n(`sites.key`),hint:n(`sites.keyHint`),hintId:pn}),(0,Q.jsx)(_e,{id:fn,value:e.key,readOnly:!0,className:`font-mono`,"aria-describedby":pn})]}),(0,Q.jsx)(A,{error:a.error}),t?(0,Q.jsx)(`div`,{children:(0,Q.jsx)(re,{pending:a.isPending,pendingLabel:n(`common.saving`),disabled:!o,children:n(`common.saveChanges`)})}):null]})}),(0,Q.jsx)(le,{when:o})]})},hn=()=>{let{t:e}=l(),{siteId:t}=ie({from:`/app/network/sites/$siteId`}),n=Qt(t),r=Mt(`sites.manage`),i=Mt(`roles.manage`);return(0,Q.jsx)(_,{width:`narrow`,children:(0,Q.jsx)(J,{query:n,children:t=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(v,{breadcrumb:[{label:e(`sites.title`),link:h({to:`/network/sites`})}],title:t.name,badge:t.isPrimary?(0,Q.jsx)(b,{variant:`secondary`,children:e(`sites.primary`)}):null,meta:t.key,actions:(0,Q.jsx)(k,{variant:`outline`,onClick:()=>p(t.key),children:e(`sites.open`)})}),(0,Q.jsx)(mn,{site:t,canManage:r},t.id),(0,Q.jsx)(cn,{siteId:t.id,canManage:i}),r&&!t.isPrimary?(0,Q.jsx)(ln,{site:t}):null]})})})},gn=B({name:F().max(200,`validation.tooLong`),key:q().trim().regex(/^[a-z][a-z0-9-]{0,62}$/,`validation.siteKey`)}),_n={name:``,key:``},vn=(e,t)=>{let n=en(),r=L({resolver:I(gn),defaultValues:_n}),{reset:i}=r;return(0,$.useEffect)(()=>{e&&i(_n)},[e,i]),{form:r,onSubmit:r.handleSubmit(async e=>{let r=await R(n.mutateAsync(e));r.ok&&(i(_n),t(r.value))}),createSite:n}},yn=({open:e,onOpenChange:t,onCreated:n})=>{let{t:r}=l(),{form:i,onSubmit:a,createSite:o}=vn(e,n);return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(`sites.createTitle`),dirty:i.formState.isDirty,pending:o.isPending,submitLabel:r(`common.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,Q.jsx)(P,{control:i.control,name:`name`,label:r(`sites.name`),autoComplete:`off`}),(0,Q.jsx)(P,{control:i.control,name:`key`,label:r(`sites.key`),autoComplete:`off`,spellCheck:!1,hint:r(`sites.keyHint`),description:r(`sites.keyFixed`)}),(0,Q.jsx)(A,{error:o.error})]})},bn=({sites:e})=>{let{t}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:t(`sites.name`)}),(0,Q.jsx)(V,{children:t(`sites.key`)}),(0,Q.jsx)(V,{children:t(`sites.createdAt`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:t(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(S,{asChild:!0,children:(0,Q.jsx)(g,{to:`/network/sites/$siteId`,params:{siteId:e.id},children:e.name})}),e.isPrimary?(0,Q.jsx)(b,{variant:`secondary`,children:t(`sites.primary`)}):null]})}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.key}),(0,Q.jsx)(W,{title:x(e.createdAt),children:se(e.createdAt)}),(0,Q.jsx)(W,{className:`text-right`,children:(0,Q.jsx)(k,{variant:`outline`,size:`sm`,"aria-label":t(`sites.openNamed`,{name:e.name}),onClick:()=>p(e.key),children:t(`sites.open`)})})]},e.id))})]})})},xn=()=>{let{t:e}=l(),t=ee(),n=Zt(),r=Mt(`sites.manage`),[i,a]=(0,$.useState)(!1);return(0,Q.jsxs)(_,{children:[(0,Q.jsx)(v,{title:e(`sites.title`),meta:n.data?e(`sites.count`,{count:n.data.length}):void 0,actions:r?(0,Q.jsxs)(k,{onClick:()=>a(!0),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`sites.create`)]}):null}),(0,Q.jsx)(J,{query:n,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:xe,title:e(`sites.empty`)}),children:e=>(0,Q.jsx)(bn,{sites:e})}),r?(0,Q.jsx)(yn,{open:i,onOpenChange:a,onCreated:n=>{a(!1),T.success(e(`sites.created`,{name:n.name})),t({to:`/network/sites/$siteId`,params:{siteId:n.id}})}}):null]})},Sn=`all`,Cn=e=>Ge.includes(e),wn=({action:e,actorType:t,onChange:n})=>{let{t:r}=l(),[i,a]=(0,$.useState)(e??``),o=!!e||!!t;return(0,Q.jsxs)(`form`,{role:`search`,className:`flex w-full flex-wrap items-center gap-2`,onSubmit:e=>{e.preventDefault(),n({action:i.trim()||void 0,actorType:t})},children:[(0,Q.jsx)(ve,{htmlFor:`audit-action`,className:`sr-only`,children:r(`audit.filterAction`)}),(0,Q.jsxs)(`div`,{className:`relative w-full sm:w-80`,children:[(0,Q.jsx)(Fe,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,Q.jsx)(_e,{id:`audit-action`,inputSize:`sm`,value:i,placeholder:r(`audit.filterActionPlaceholder`),onChange:e=>a(e.target.value),onBlur:()=>n({action:i.trim()||void 0,actorType:t}),className:`pl-8`})]}),(0,Q.jsx)(ve,{htmlFor:`audit-actor-type`,className:`sr-only`,children:r(`audit.filterActor`)}),(0,Q.jsxs)(Oe,{value:t??Sn,onValueChange:t=>n({action:e,actorType:Cn(t)?t:void 0}),children:[(0,Q.jsx)(we,{id:`audit-actor-type`,size:`sm`,className:`w-44`,children:(0,Q.jsx)(Ce,{})}),(0,Q.jsxs)(Te,{children:[(0,Q.jsx)(Ee,{value:Sn,children:r(`audit.allActors`)}),Ge.map(e=>(0,Q.jsx)(Ee,{value:e,children:r(`audit.actorTypes.${e}`)},e))]})]}),o?(0,Q.jsx)(k,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{a(``),n({action:void 0,actorType:void 0})},children:r(`audit.clearFilters`)}):null]})},Tn=()=>{let e=ce({from:`/app/network/audit-log`}),t=ee({from:`/network/audit-log`}),[n,r]=(0,$.useState)([]),i=e=>void t({search:t=>({...t,...e})});return{search:e,goFirst:e.cursor===void 0?void 0:()=>{r([]),i({cursor:void 0})},goPrevious:n.length===0?void 0:()=>{i({cursor:n.at(-1)}),r(e=>e.slice(0,-1))},goNext:t=>{r(t=>[...t,e.cursor]),i({cursor:t})},setFilters:e=>{r([]),i({...e,cursor:void 0})}}},En=e=>e.targetType?`${e.targetType}:${e.targetId??``}`:void 0,Dn=({events:e})=>{let{t}=l(),{actionLabel:n,targetLabel:r}=nt();return(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:t(`audit.actor`)}),(0,Q.jsx)(V,{children:t(`audit.action`)}),(0,Q.jsx)(V,{children:t(`audit.target`)}),(0,Q.jsx)(V,{children:t(`audit.outcome`)}),(0,Q.jsx)(V,{children:t(`audit.ipAddress`)}),(0,Q.jsx)(V,{children:t(`audit.when`)})]})}),(0,Q.jsx)(H,{children:e.map(e=>{let i=t(`audit.actorTypes.${e.actorType}`),a=e.actorName??e.actorEmail??i,o=e.actorName&&e.actorEmail?e.actorEmail:e.actorName||e.actorEmail?i:e.actorId??void 0,s=n(e.action),c=En(e),l=et(e.metadata);return(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsxs)(`span`,{className:`flex items-center gap-2.5`,children:[(0,Q.jsx)(it,{name:a,size:`sm`}),(0,Q.jsxs)(`span`,{className:`min-w-0`,children:[(0,Q.jsx)(`span`,{className:`block max-w-48 truncate text-sm font-semibold`,children:a}),o?(0,Q.jsx)(`span`,{className:`block max-w-48 truncate text-xs text-muted-foreground`,title:o,children:o}):null]})]})}),(0,Q.jsx)(W,{title:e.action,children:s?(0,Q.jsx)(b,{variant:`secondary`,children:s}):(0,Q.jsx)(b,{variant:`secondary`,className:`font-mono`,children:e.action})}),(0,Q.jsx)(W,{className:`max-w-64`,title:c,children:e.targetType?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`block truncate text-sm`,children:r(e.targetType)??(0,Q.jsx)(`span`,{className:`font-mono text-xs`,children:e.targetType})}),(0,Q.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:l??(0,Q.jsx)(`span`,{className:`font-mono`,children:e.targetId})})]}):(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:t(`common.none`)})}),(0,Q.jsx)(W,{children:(0,Q.jsx)(ae,{tone:e.outcome===`success`?`success`:`danger`,label:e.outcome===`success`?t(`audit.success`):t(`audit.failure`)})}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.ip??t(`common.unknown`)}),(0,Q.jsx)(W,{className:`whitespace-nowrap`,title:x(e.occurredAt),children:se(e.occurredAt)})]},e.id)})})]})},On=()=>{let{t:e}=l(),{search:t,goFirst:n,goPrevious:r,goNext:i,setFilters:a}=Tn(),o=tt({cursor:t.cursor,limit:50,action:t.action,actorType:t.actorType}),s=o.data?.nextCursor;return(0,Q.jsxs)(_,{width:`full`,children:[(0,Q.jsx)(v,{title:e(`audit.title`)}),(0,Q.jsx)(G,{toolbar:(0,Q.jsx)(wn,{action:t.action,actorType:t.actorType,onChange:a},`${t.action??``}|${t.actorType??``}`),footer:(0,Q.jsx)(ke,{onFirst:n,onPrevious:r,onNext:s?()=>i(s):void 0}),children:(0,Q.jsx)(J,{query:o,loadingRows:8,isEmpty:e=>e.items.length===0&&t.cursor===void 0,empty:(0,Q.jsx)(y,{size:`panel`,icon:He,title:e(`audit.empty`)}),children:e=>(0,Q.jsx)(Dn,{events:e.items})})})]})},kn=[...Vt,...Ht],An={read:`roles.actions.read`,create:`roles.actions.create`,update:`roles.actions.update`,delete:`roles.actions.delete`,publish:`roles.actions.publish`,schemaManage:`roles.actions.schemaManage`,"schema.create":`roles.actions.schemaCreate`,"users.manage":`roles.actions.usersManage`,"roles.manage":`roles.actions.rolesManage`,"tokens.manage":`roles.actions.tokensManage`,"audit.read":`roles.actions.auditRead`,"sites.manage":`roles.actions.sitesManage`,"media.read":`roles.actions.mediaRead`,"media.write":`roles.actions.mediaWrite`,"media.manage":`roles.actions.mediaManage`,"publishing.manage":`roles.actions.publishingManage`,"webhooks.manage":`roles.actions.webhooksManage`,"deployments.manage":`roles.actions.deploymentsManage`,"deployments.trigger":`roles.actions.deploymentsTrigger`,"changes.manage":`roles.actions.changesManage`,"changes.ship":`roles.actions.changesShip`,"site.settings":`roles.actions.siteSettings`},jn=[`admin`,`delivery`],Mn=/^[a-z][a-z0-9-]{0,62}$/,Nn=B({key:q().trim().regex(Mn,`validation.roleKey`),name:F(),description:q().trim(),kind:mt([`admin`,`delivery`]),actions:ht(pt(e=>kn.includes(e)))}),Pn=e=>e.modelId===null&&e.condition===null&&e.fieldIds===null,Fn=e=>({key:e?.key??``,name:e?.name??``,description:e?.description??``,kind:e?.kind??`admin`,actions:(e?.permissions??[]).filter(Pn).map(e=>e.action)}),In=e=>({action:e,modelId:null,condition:null,fieldIds:null}),Ln=(e,t,n)=>{let r=It(),i=Lt(),a=L({resolver:I(Nn),defaultValues:Fn(t)}),{reset:o}=a;(0,$.useEffect)(()=>{e&&o(Fn(t))},[e,t,o]);let s=a.handleSubmit(async({key:e,name:a,description:o,kind:s,actions:c})=>{if(t){let e=t.permissions.filter(e=>!Pn(e));if(!(await R(i.mutateAsync({id:t.id,input:{expectedVersion:t.version,name:a,description:o,permissions:[...e,...c.map(In)]}}))).ok)return;T.success(O.t(`roles.saved`))}else{if(!(await R(r.mutateAsync({key:e,name:a,description:o,kind:s,permissions:c.map(In)}))).ok)return;T.success(O.t(`roles.created`))}n()}),c=t?i:r;return{form:a,onSubmit:s,pending:c.isPending,error:c.error}},Rn={admin:`roles.kindAdmin`,delivery:`roles.kindDelivery`},zn=({open:e,onOpenChange:t,role:n})=>{let{t:r}=l(),{form:i,onSubmit:a,pending:o,error:s}=Ln(e,n,()=>t(!1)),c=n!==void 0,u=i.watch(`kind`);return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(c?`roles.editTitle`:`roles.createTitle`),dirty:i.formState.isDirty,pending:o,submitLabel:r(c?`common.saveChanges`:`common.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,Q.jsx)(P,{control:i.control,name:`name`,label:r(`roles.name`),autoComplete:`off`}),(0,Q.jsx)(P,{control:i.control,name:`key`,label:r(`roles.key`),hint:r(`roles.keyHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`,disabled:c}),(0,Q.jsx)(St,{control:i.control,name:`description`,label:r(`roles.roleDescription`),rows:2}),(0,Q.jsx)(Ct,{control:i.control,name:`kind`,label:r(`roles.kind`),hint:r(`roles.kindHint`),options:jn.map(e=>({value:e,label:r(Rn[e])})),disabled:c}),(0,Q.jsx)(w,{control:i.control,name:`actions`,legend:r(`roles.contentPermissions`),options:Vt.map(e=>({value:e,label:r(An[e])}))}),u===`admin`?(0,Q.jsx)(w,{control:i.control,name:`actions`,legend:r(`roles.instancePermissions`),options:Ht.map(e=>({value:e,label:r(An[e])}))}):null,(0,Q.jsx)(A,{error:s})]})},Bn=({roles:e,onEdit:t,onDelete:n})=>{let{t:r}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:r(`roles.name`)}),(0,Q.jsx)(V,{children:r(`roles.key`)}),(0,Q.jsx)(V,{children:r(`roles.kind`)}),(0,Q.jsx)(V,{children:r(`roles.permissions`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:r(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>(0,Q.jsxs)(U,{children:[(0,Q.jsxs)(W,{className:`max-w-xs`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(S,{children:e.name}),(0,Q.jsx)(b,{variant:e.isSystem?`secondary`:`outline`,children:e.isSystem?r(`roles.builtIn`):r(`roles.custom`)})]}),e.description?(0,Q.jsx)(`span`,{className:`block truncate text-meta whitespace-normal text-muted-foreground`,children:e.description}):null]}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.key}),(0,Q.jsx)(W,{children:e.kind===`admin`?r(`roles.kindAdmin`):r(`roles.kindDelivery`)}),(0,Q.jsx)(W,{children:r(`roles.permissionsCount`,{count:e.permissions.length})}),(0,Q.jsx)(W,{className:`text-right`,children:e.isSystem?null:(0,Q.jsxs)(Be,{children:[(0,Q.jsx)(Re,{asChild:!0,children:(0,Q.jsx)(k,{variant:`ghost`,size:`icon-sm`,"aria-label":`${r(`common.actions`)}: ${e.name}`,children:(0,Q.jsx)(Pe,{"aria-hidden":`true`})})}),(0,Q.jsxs)(ze,{align:`end`,children:[(0,Q.jsxs)(M,{onSelect:()=>t(e),children:[(0,Q.jsx)(Ve,{"aria-hidden":`true`}),r(`common.edit`)]}),(0,Q.jsxs)(M,{variant:`destructive`,onSelect:()=>n(e),children:[(0,Q.jsx)(fe,{"aria-hidden":`true`}),r(`common.delete`)]})]})]})})]},e.id))})]})})},Vn=()=>{let{t:e}=l();return(0,Q.jsx)(Bt,{label:e(`roles.sections`),tabs:[{to:`/network/roles`,label:e(`roles.tabAdmin`)},{to:`/network/roles/app`,label:e(`roles.tabApp`)}]})},Hn=()=>{let{t:e}=l(),t=Pt(),n=Rt(),r=Nt(),[i,a]=(0,$.useState)({open:!1,role:void 0});return(0,Q.jsxs)(_,{width:`full`,children:[(0,Q.jsx)(v,{title:e(`roles.title`),tabs:(0,Q.jsx)(Vn,{}),actions:(0,Q.jsxs)(k,{onClick:()=>a({open:!0,role:void 0}),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`roles.create`)]})}),(0,Q.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:Ze,title:e(`roles.empty`)}),children:e=>(0,Q.jsx)(Bn,{roles:e,onEdit:e=>a({open:!0,role:e}),onDelete:e=>r.ask(e)})}),(0,Q.jsx)(zn,{open:i.open,onOpenChange:e=>a(t=>({...t,open:e})),role:i.role}),(0,Q.jsx)(Ne,{open:r.open,onOpenChange:r.onOpenChange,title:e(`roles.deleteTitle`,{name:r.target?.name??``}),description:e(`roles.deleteDescription`),confirmLabel:e(`common.delete`),destructive:!0,onConfirm:()=>{r.target&&n.mutate(r.target.id,{onSuccess:()=>T.success(e(`roles.deleted`))})}})]})},Un=B({key:q().trim().regex(Mn,`validation.roleKey`),name:F(),description:q().trim()}),Wn={key:``,name:``,description:``},Gn=(e,t)=>{let n=qe(),r=L({resolver:I(Un),defaultValues:Wn}),{reset:i}=r;return(0,$.useEffect)(()=>{e&&i(Wn)},[e,i]),{form:r,onSubmit:r.handleSubmit(async e=>{let r=await R(n.mutateAsync({...e,permissions:[]}));r.ok&&(T.success(O.t(`appRoles.created`)),t(r.value))}),createAppRole:n}},Kn=({open:e,onOpenChange:t,onCreated:n})=>{let{t:r}=l(),{form:i,onSubmit:a,createAppRole:o}=Gn(e,n);return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(`appRoles.createTitle`),dirty:i.formState.isDirty,pending:o.isPending,submitLabel:r(`common.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,Q.jsx)(P,{control:i.control,name:`name`,label:r(`roles.name`),autoComplete:`off`}),(0,Q.jsx)(P,{control:i.control,name:`key`,label:r(`roles.key`),hint:r(`roles.keyHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`}),(0,Q.jsx)(St,{control:i.control,name:`description`,label:r(`roles.roleDescription`),rows:2}),(0,Q.jsx)(A,{error:o.error})]})},qn=e=>e.permissions.some(e=>e.action===`read`&&e.modelId===null&&e.condition===null),Jn=()=>{let e=Xe();return{grantReadAll:t=>e.mutate({id:t.id,input:{expectedVersion:t.version,permissions:[...t.permissions.filter(e=>e.action!==`read`||e.modelId!==null),{action:`read`,modelId:null,condition:null,fieldIds:null}]}},{onSuccess:()=>T.success(O.t(`appRoles.readAllGranted`,{name:t.name})),onError:e=>T.error(ge(e))}),pendingRoleId:e.isPending?e.variables?.id:void 0}},Yn=({role:e,onDelete:t})=>{let{t:n}=l(),[r,i]=(0,$.useState)(!1);return(0,Q.jsxs)(Be,{children:[(0,Q.jsx)(j,{tone:`danger`,open:r,onOpenChange:i,title:n(`roles.deleteTitle`,{name:e.name}),description:n(`appRoles.deleteDescription`),confirmLabel:n(`common.delete`),onConfirm:()=>t(e),children:(0,Q.jsx)(Re,{asChild:!0,children:(0,Q.jsx)(k,{variant:`ghost`,size:`icon-sm`,"aria-label":`${n(`common.actions`)}: ${e.name}`,children:(0,Q.jsx)(Pe,{"aria-hidden":`true`})})})}),(0,Q.jsxs)(ze,{align:`end`,onCloseAutoFocus:e=>r&&e.preventDefault(),children:[(0,Q.jsx)(M,{asChild:!0,children:(0,Q.jsxs)(g,{to:`/network/roles/app/$roleId`,params:{roleId:e.id},children:[(0,Q.jsx)(Kt,{"aria-hidden":`true`}),n(`appRoles.editPermissions`)]})}),e.isSystem?null:(0,Q.jsxs)(M,{variant:`destructive`,onSelect:()=>i(!0),children:[(0,Q.jsx)(fe,{"aria-hidden":`true`}),n(`common.delete`)]})]})]})},Xn={public:`appRoles.holdersPublic`,authenticated:`appRoles.holdersAuthenticated`},Zn=e=>Object.hasOwn(Xn,e)?Xn[e]:void 0,Qn=({roles:e,onDelete:t,onGrantReadAll:n,pendingRoleId:r})=>{let{t:i}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:i(`roles.name`)}),(0,Q.jsx)(V,{children:i(`roles.key`)}),(0,Q.jsx)(V,{children:i(`appRoles.heldBy`)}),(0,Q.jsx)(V,{children:i(`roles.permissions`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:i(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>{let a=e.isSystem?Zn(e.key):void 0;return(0,Q.jsxs)(U,{children:[(0,Q.jsxs)(W,{className:`max-w-xs`,children:[(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(S,{asChild:!0,children:(0,Q.jsx)(g,{to:`/network/roles/app/$roleId`,params:{roleId:e.id},children:e.name})}),(0,Q.jsx)(b,{variant:e.isSystem?`secondary`:`outline`,children:e.isSystem?i(`roles.builtIn`):i(`roles.custom`)})]}),e.description?(0,Q.jsx)(`span`,{className:`block text-meta whitespace-normal text-muted-foreground`,children:e.description}):null]}),(0,Q.jsx)(W,{className:`font-mono text-xs`,children:e.key}),(0,Q.jsx)(W,{children:a?i(a):i(`appRoles.userCount`,{count:e.userCount})}),(0,Q.jsx)(W,{children:(0,Q.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[i(`roles.permissionsCount`,{count:e.permissions.length}),e.isSystem&&!qn(e)?(0,Q.jsxs)(k,{variant:`outline`,size:`sm`,disabled:r===e.id,"aria-label":`${i(`appRoles.grantReadAll`)}: ${e.name}`,onClick:()=>n(e),children:[(0,Q.jsx)(Wt,{"aria-hidden":`true`}),i(`appRoles.grantReadAll`)]}):null]})}),(0,Q.jsx)(W,{className:`text-right`,children:(0,Q.jsx)(Yn,{role:e,onDelete:t})})]},e.id)})})]})})},$n=()=>{let{t:e}=l(),t=ee(),n=Je(),r=Ue(),[i,a]=(0,$.useState)(!1),{grantReadAll:o,pendingRoleId:s}=Jn(),c=async t=>{await r.mutateAsync(t.id),T.success(e(`roles.deleted`))};return(0,Q.jsxs)(_,{width:`full`,children:[(0,Q.jsx)(v,{title:e(`appRoles.title`),tabs:(0,Q.jsx)(Vn,{}),actions:(0,Q.jsxs)(k,{onClick:()=>a(!0),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),e(`appRoles.create`)]})}),(0,Q.jsx)(J,{query:n,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:Ze,title:e(`roles.empty`)}),children:t=>(0,Q.jsxs)(`div`,{className:`space-y-4`,children:[t.some(e=>e.isSystem&&!qn(e))?(0,Q.jsxs)(Ae,{variant:`info`,role:`note`,children:[(0,Q.jsx)(de,{"aria-hidden":`true`}),(0,Q.jsx)(Me,{children:e(`appRoles.denyByDefault`)})]}):null,(0,Q.jsx)(Qn,{roles:t,onDelete:c,onGrantReadAll:o,pendingRoleId:s})]})}),(0,Q.jsx)(Kn,{open:i,onOpenChange:a,onCreated:e=>{a(!1),t({to:`/network/roles/app/$roleId`,params:{roleId:e.id}})}})]})},er=new Set([`read`,`update`,`delete`,`publish`]),tr=new Set([`read`,`create`,`update`]),nr={read:`appRoles.actions.read`,create:`appRoles.actions.create`,update:`appRoles.actions.update`,delete:`appRoles.actions.delete`,publish:`appRoles.actions.publish`},rr=e=>{let t={};for(let n of e){let e=n.modelId??`*`;t[e]={...t[e],[n.action]:{ownOnly:n.condition===`ownedByPrincipal`,fieldIds:n.fieldIds===null?null:[...n.fieldIds].sort()}}}return t},ir=e=>Object.keys(e).sort((e,t)=>e===`*`?-1:t===`*`?1:e.localeCompare(t)).flatMap(t=>Z.flatMap(n=>{let r=e[t]?.[n];return r?[{action:n,modelId:t===`*`?null:t,condition:r.ownOnly&&er.has(n)?`ownedByPrincipal`:null,fieldIds:tr.has(n)?r.fieldIds:null}]:[]})),ar=(e,t,n,r)=>{let i={...e[t]};return r?i[n]=r:delete i[n],{...e,[t]:i}},or=(e,t,n,r)=>ar(e,t,n,r?e[t]?.[n]??{ownOnly:!1,fieldIds:null}:void 0),sr=(e,t,n,r)=>{let i=e[t]?.[n];return i?ar(e,t,n,{...i,...r}):e},cr=(e,t)=>Z.some(n=>t?.[n]!==void 0&&(er.has(n)||e!==`*`&&tr.has(n))),lr=(e,t,n,r)=>t.reduce((e,t)=>or(e,t,n,r),e),ur=(e,t,n)=>{let r=t.filter(t=>e[t]?.[n]!==void 0).length;return r===0?!1:r===t.length||`indeterminate`},dr=B({name:F(),description:q().trim()}),fr=e=>{let t=Xe(),n=L({resolver:I(dr),defaultValues:{name:e.name,description:e.description}}),[r,i]=(0,$.useState)(()=>rr(e.permissions)),a=(0,$.useMemo)(()=>JSON.stringify(ir(rr(e.permissions))),[e.permissions]),o=(0,$.useMemo)(()=>ir(r),[r]),s=JSON.stringify(o)!==a,c=!e.isSystem&&n.formState.isDirty,l=n.handleSubmit(async n=>{(await R(t.mutateAsync({id:e.id,input:{expectedVersion:e.version,...c?n:{},...s?{permissions:o}:{}}}))).ok&&T.success(O.t(`roles.saved`))});return{form:n,matrix:r,setMatrix:i,dirty:s||c,onSubmit:l,pending:t.isPending,error:t.error}},pr=`all`,mr=`selected`,hr=({id:e,rowKey:t,fields:n,grants:r,onChange:i})=>{let{t:a}=l(),o=(n??[]).filter(e=>!e.deprecated);return(0,Q.jsx)(`div`,{id:e,className:`grid gap-6 border-t bg-muted/40 px-5 py-4 md:grid-cols-2`,children:Z.map(n=>{let s=r[n],c=er.has(n),l=t!==`*`&&tr.has(n);if(!s||!c&&!l)return null;let u=`${e}-${n}`;return(0,Q.jsxs)(me,{className:`gap-3`,children:[(0,Q.jsx)(pe,{variant:`label`,children:a(nr[n])}),c?(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(E,{htmlFor:`${u}-own`,children:a(`appRoles.ownOnly`)}),(0,Q.jsx)(st,{id:`${u}-own`,checked:s.ownOnly,onCheckedChange:e=>i(n,{ownOnly:e})})]}):null,l?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(ot,{"aria-label":a(`appRoles.fieldScope`),value:s.fieldIds===null?pr:mr,onValueChange:e=>i(n,{fieldIds:e===pr?null:o.filter(e=>e.public).map(e=>e.id)}),children:[(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(at,{id:`${u}-all`,value:pr}),(0,Q.jsx)(E,{htmlFor:`${u}-all`,className:`font-normal`,children:a(`appRoles.allPublicFields`)})]}),(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(at,{id:`${u}-selected`,value:mr}),(0,Q.jsx)(E,{htmlFor:`${u}-selected`,className:`font-normal`,children:a(`appRoles.selectedFields`)})]})]}),s.fieldIds===null?null:(0,Q.jsx)(`div`,{className:`grid gap-2 pl-6 sm:grid-cols-2`,children:o.map(e=>{let t=s.fieldIds??[],r=`${u}-field-${e.id}`;return(0,Q.jsxs)(D,{orientation:`horizontal`,children:[(0,Q.jsx)(je,{id:r,checked:t.includes(e.id),onCheckedChange:r=>i(n,{fieldIds:r===!0?[...t,e.id].sort():t.filter(t=>t!==e.id)})}),(0,Q.jsxs)(E,{htmlFor:r,className:`font-normal`,children:[e.label,e.public?null:(0,Q.jsx)(b,{variant:`secondary`,children:a(`appRoles.notPublic`)})]})]},e.id)})})]}):null]},n)})})},gr=({label:e,detail:t,grants:n,optionsId:r,expanded:i,canExpand:a,onToggle:o,onToggleExpanded:s})=>{let{t:c}=l();return(0,Q.jsxs)(U,{className:`hover:bg-transparent has-aria-expanded:bg-transparent`,children:[(0,Q.jsx)(W,{className:`sticky left-0 z-10 h-9 bg-card py-0`,children:(0,Q.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,Q.jsx)(`span`,{className:`font-semibold`,children:e}),(0,Q.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:t})]})}),Z.map(t=>(0,Q.jsx)(W,{className:`h-9 py-0 text-center`,children:(0,Q.jsx)(je,{checked:n[t]!==void 0,onCheckedChange:e=>o(t,e===!0),"aria-label":`${c(nr[t])}: ${e}`,className:`align-middle`})},t)),(0,Q.jsx)(W,{className:`h-9 py-0 text-right`,children:(0,Q.jsxs)(k,{type:`button`,variant:`ghost`,size:`xs`,disabled:!a,"aria-expanded":i,"aria-controls":i?r:void 0,"aria-label":`${c(`appRoles.options`)}: ${e}`,onClick:s,children:[c(`appRoles.options`),(0,Q.jsx)(De,{"aria-hidden":`true`,className:f(`transition-transform`,i&&`rotate-180`)})]})})]})},_r=({matrix:e,models:t,onChange:n})=>{let{t:r}=l(),[i,a]=(0,$.useState)(new Set),o=e=>a(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),s=[{key:`*`,label:r(`appRoles.allModels`),detail:r(`appRoles.allModelsHint`),fields:void 0},...t.map(e=>e.definition).filter(ue).map(e=>({key:e.id,label:e.label,detail:e.apiKey,fields:e.fields}))],c=s.map(e=>e.key);return(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{className:`sticky left-0 z-10 min-w-60 bg-muted`,children:r(`appRoles.model`)}),Z.map(t=>{let i=r(nr[t]);return(0,Q.jsx)(V,{className:`w-24 bg-muted`,children:(0,Q.jsxs)(`span`,{className:`flex items-center justify-center gap-2`,children:[(0,Q.jsx)(je,{checked:ur(e,c,t),onCheckedChange:r=>n(lr(e,c,t,r===!0)),"aria-label":r(`appRoles.everyRow`,{action:i})}),i]})},t)}),(0,Q.jsx)(V,{className:`bg-muted`,children:(0,Q.jsx)(`span`,{className:`sr-only`,children:r(`appRoles.options`)})})]})}),(0,Q.jsx)(H,{children:s.map(t=>{let r=e[t.key]??{},a=cr(t.key,r),s=a&&i.has(t.key),c=`app-role-options-${t.key===`*`?`all`:t.key}`;return(0,Q.jsxs)($.Fragment,{children:[(0,Q.jsx)(gr,{label:t.label,detail:t.detail,grants:r,optionsId:c,expanded:s,canExpand:a,onToggle:(r,i)=>n(or(e,t.key,r,i)),onToggleExpanded:()=>o(t.key)}),s?(0,Q.jsx)(U,{className:`hover:bg-transparent`,children:(0,Q.jsx)(W,{colSpan:Z.length+2,className:`h-auto p-0 whitespace-normal`,children:(0,Q.jsx)(hr,{id:c,rowKey:t.key,fields:t.fields,grants:r,onChange:(r,i)=>n(sr(e,t.key,r,i))})})}):null]},t.key)})})]})},vr={public:`appRoles.publicExplained`,authenticated:`appRoles.authenticatedExplained`},yr=e=>Object.hasOwn(vr,e)?vr[e]:void 0,br=({role:e,models:t})=>{let{t:n}=l(),r=fr(e),i=e.isSystem?yr(e.key):void 0,a=[{label:n(`roles.title`),link:h({to:`/network/roles`})},{label:n(`appRoles.title`),link:h({to:`/network/roles/app`})}];return(0,Q.jsxs)(`form`,{noValidate:!0,className:`space-y-6`,onSubmit:e=>void r.onSubmit(e),children:[(0,Q.jsx)(v,{sticky:!0,breadcrumb:a,title:e.name,badge:e.isSystem?(0,Q.jsx)(b,{variant:`secondary`,children:n(`roles.builtIn`)}):null,meta:i?n(i):e.description||void 0,actions:(0,Q.jsx)(re,{pending:r.pending,pendingLabel:n(`common.saving`),disabled:!r.dirty,children:n(`common.saveChanges`)})}),e.isSystem?null:(0,Q.jsx)(Y,{title:n(`appRoles.details`),children:(0,Q.jsxs)(he,{className:`max-w-xl`,children:[(0,Q.jsx)(P,{control:r.form.control,name:`name`,label:n(`roles.name`),autoComplete:`off`}),(0,Q.jsx)(St,{control:r.form.control,name:`description`,label:n(`roles.roleDescription`),rows:2})]})}),(0,Q.jsx)(Y,{title:n(`roles.permissions`),description:n(`appRoles.permissionsHint`),flush:!0,children:(0,Q.jsx)(_r,{matrix:r.matrix,models:t,onChange:r.setMatrix})}),(0,Q.jsx)(A,{error:r.error}),(0,Q.jsx)(le,{when:r.dirty&&!r.pending})]})},xr=()=>{let{roleId:e}=ie({from:`/app/network/roles/app/$roleId`}),t=Ye(e),n=vt(`model`);return(0,Q.jsx)(_,{width:`full`,children:(0,Q.jsx)(J,{query:t,loadingRows:6,children:e=>(0,Q.jsx)(J,{query:n,loadingRows:6,children:t=>(0,Q.jsx)(br,{role:e,models:t},`${e.id}:${e.version}`)})})})},Sr=()=>{let{t:e}=l(),t=te().data?.emailDelivery,n=kt(),[r,i]=(0,$.useState)(void 0),a=async({id:e,email:t})=>{let r=await n.mutateAsync(e);i({...r,email:t})};return{revealed:r,emailDelivery:t,reveal:a,announceInvitation:async n=>{if(t===`console`){await a(n);return}T.success(e(`users.invited`,{email:n.email}),{action:{label:e(`users.copyLink`),onClick:()=>void R(a(n))}})},dismiss:()=>i(void 0),keepFocusOnReveal:e=>{r&&e.preventDefault()}}},Cr=({link:e,emailDelivery:t,onDismiss:n})=>{let{t:r}=l(),i=x(e.expiresAt);return(0,Q.jsx)(zt,{title:r(`users.invitationLink.title`,{email:e.email}),description:r(t===`console`?`users.invitationLink.noEmailDescription`:`users.invitationLink.description`,{date:i}),label:r(`users.invitationLink.label`),secret:e.acceptUrl,dismissLabel:r(`users.invitationLink.done`),onDismiss:n})},wr=({assignments:e,roleNames:t,siteNames:n})=>{let{t:r}=l(),i=n.size>1;return e.map(({roleId:e,siteId:a})=>{let o=t.get(e)??r(`common.unknown`),s=a===null?r(`sites.switcher.allSites`):n.get(a)??r(`common.unknown`);return(0,Q.jsx)(b,{variant:`outline`,children:i?r(`users.access.badge`,{role:o,site:s}):o},`${e}:${a??``}`)})},Tr=({siteNames:e,onCopyLink:t,onCloseAutoFocus:n})=>{let{t:r}=l(),i=jt(),{names:a}=Ft(),o=wt();return i.isError?(0,Q.jsx)(oe,{error:i.error,onRetry:()=>void i.refetch()}):!i.data||i.data.length===0?null:(0,Q.jsx)(Y,{title:r(`users.invitationsTitle`),flush:!0,children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:r(`users.email`)}),(0,Q.jsx)(V,{children:r(`users.roles`)}),(0,Q.jsx)(V,{children:r(`users.invitationExpires`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:r(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:i.data.map(i=>(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsx)(S,{children:i.email})}),(0,Q.jsx)(W,{children:(0,Q.jsx)(`span`,{className:`flex flex-wrap gap-1`,children:(0,Q.jsx)(wr,{assignments:i.assignments,roleNames:a,siteNames:e})})}),(0,Q.jsx)(W,{title:x(i.expiresAt),children:se(i.expiresAt)}),(0,Q.jsx)(W,{children:(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,Q.jsx)(j,{tone:`default`,title:r(`users.invitationLink.confirmTitle`,{email:i.email}),description:r(`users.invitationLink.confirmDescription`),confirmLabel:r(`users.invitationLink.create`),onConfirm:()=>t(i),onCloseAutoFocus:n,trigger:(0,Q.jsxs)(k,{variant:`outline`,size:`sm`,"aria-label":`${r(`users.copyLink`)}: ${i.email}`,children:[(0,Q.jsx)(Ie,{"aria-hidden":`true`}),r(`users.copyLink`)]})}),(0,Q.jsx)(j,{tone:`danger`,title:r(`users.revokeInvitationTitle`,{email:i.email}),description:r(`users.revokeInvitationDescription`),confirmLabel:r(`common.revoke`),onConfirm:async()=>{await o.mutateAsync(i.id),T.success(r(`users.invitationRevoked`))},trigger:(0,Q.jsx)(k,{variant:`outline`,size:`sm`,"aria-label":`${r(`common.revoke`)}: ${i.email}`,children:r(`common.revoke`)})})]})})]},i.id))})]})})},Er=e=>e??`all`,Dr=(e,t)=>{let n=new Map;for(let{roleId:r,siteId:i}of e){let e=Er(i);(!n.has(e)||r===t)&&n.set(e,r)}return[...n].map(([e,t])=>({site:e,roleId:t}))},Or=e=>e.map(({site:e,roleId:t})=>({roleId:t,siteId:e===`all`?null:e})),kr=e=>ht(B({site:q().min(1),roleId:q().min(1,`validation.selectRole`)})).min(1).superRefine((t,n)=>{let r=new Set;t.forEach((t,i)=>{r.has(t.site)&&n.addIssue({code:`custom`,path:[i,`site`],message:`validation.siteTwice`}),r.add(t.site),e!==void 0&&t.roleId===e&&t.site!==`all`&&n.addIssue({code:`custom`,path:[i,`roleId`],message:`validation.ownerAllSites`})})}),Ar=(e,t,n)=>{let r=new Set(e.map(e=>e.site)),i=[`all`,...t].find(e=>!r.has(e));return i===void 0?void 0:{site:i,roleId:n}},jr=({control:e,roleOptions:t,siteOptions:n,siteIds:r,multiSite:i,defaultRoleId:a})=>{let{t:o}=l(),{fields:s,append:c,remove:u}=dt({control:e,name:`rows`}),{errors:d}=ct({control:e,name:`rows`}),f=lt({control:e,name:`rows`}),p=(e,t)=>`rows.${e}.${t}`;if(!i)return(0,Q.jsx)(yt,{control:e,name:p(0,`roleId`),legend:o(`users.role`),options:t});let m=Ar(f??[],r,a??``),h=d.rows;return(0,Q.jsxs)(me,{children:[(0,Q.jsx)(pe,{variant:`label`,children:o(`users.access.title`)}),(0,Q.jsx)(`div`,{className:`space-y-3`,children:s.map((r,i)=>(0,Q.jsxs)(`fieldset`,{"aria-label":o(`users.access.row`,{n:i+1}),className:`grid grid-cols-[1fr_1fr_auto] items-start gap-3`,children:[(0,Q.jsx)(Ct,{control:e,name:p(i,`site`),label:o(`users.access.site`),options:n}),(0,Q.jsx)(Ct,{control:e,name:p(i,`roleId`),label:o(`users.role`),options:t}),(0,Q.jsx)(k,{type:`button`,variant:`ghost`,size:`icon`,className:`mt-7`,disabled:s.length===1,"aria-label":o(`users.access.remove`,{n:i+1}),onClick:()=>u(i),children:(0,Q.jsx)(ne,{"aria-hidden":`true`})})]},r.id))}),(0,Q.jsx)(ft,{message:h?.root?.message??h?.message}),(0,Q.jsx)(`div`,{children:(0,Q.jsxs)(k,{type:`button`,variant:`outline`,size:`sm`,disabled:!m,onClick:()=>m&&c(m),children:[(0,Q.jsx)(N,{"aria-hidden":`true`}),o(`users.access.add`)]})})]})},Mr={owner:`owner`,editor:`editor`},Nr=({includeOwner:e,heldRoleIds:t=[]})=>{let n=Pt(),r=(n.data??[]).filter(e=>e.kind===`admin`),i=e=>e===Mr.owner;return{options:r.filter(n=>!i(n.key)||e||t.includes(n.id)).map(e=>({value:e.id,label:e.name,...e.description?{description:e.description}:{}})),editorRoleId:r.find(e=>e.key===Mr.editor)?.id,ownerRoleId:r.find(e=>i(e.key))?.id,isPending:n.isPending,error:n.error}},Pr=({includeOwner:e,heldRoleIds:t})=>{let{t:n}=l(),r=Nr({includeOwner:e,...t?{heldRoleIds:t}:{}}),i=Zt(),a=(0,$.useMemo)(()=>[{value:`all`,label:n(`sites.switcher.allSites`)},...(i.data??[]).map(e=>({value:e.id,label:e.name}))],[i.data,n]),o=(0,$.useMemo)(()=>(i.data??[]).map(e=>e.id),[i.data]);return{roleOptions:r.options,siteOptions:a,siteIds:o,multiSite:o.length>1,editorRoleId:r.editorRoleId,ownerRoleId:r.ownerRoleId,error:r.error??i.error}},Fr=e=>({email:``,rows:[{site:`all`,roleId:e}]}),Ir=({open:e,defaultRoleId:t,ownerRoleId:n,onInvited:r,onDone:i})=>{let a=Dt(),o=(0,$.useMemo)(()=>B({email:ut(),rows:kr(n)}),[n]),s=L({resolver:I(o),defaultValues:Fr(``)}),{reset:c}=s;return(0,$.useEffect)(()=>{e&&c(Fr(t??``))},[e,t,c]),{form:s,onSubmit:s.handleSubmit(async({email:e,rows:n})=>{let o=await R(a.mutateAsync({email:e,assignments:Or(n)}));o.ok&&(await R(r(o.value)),c(Fr(t??``)),i())}),invite:a}},Lr=({open:e,onOpenChange:t,onInvited:n,onCloseAutoFocus:r})=>{let{t:i}=l(),a=Pr({includeOwner:!1}),{form:o,onSubmit:s,invite:c}=Ir({open:e,defaultRoleId:a.editorRoleId,ownerRoleId:a.ownerRoleId,onInvited:n,onDone:()=>t(!1)});return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:i(`users.inviteTitle`),dirty:o.formState.isDirty,pending:o.formState.isSubmitting,submitLabel:i(`users.invite`),pendingLabel:i(`common.saving`),onSubmit:e=>void s(e),onCloseAutoFocus:r,children:[(0,Q.jsx)(P,{control:o.control,name:`email`,label:i(`users.email`),type:`email`,autoComplete:`off`}),(0,Q.jsx)(jr,{control:o.control,roleOptions:a.roleOptions,siteOptions:a.siteOptions,siteIds:a.siteIds,multiSite:a.multiSite,defaultRoleId:a.editorRoleId}),(0,Q.jsx)(A,{error:c.error??a.error})]})},Rr=(e,t,n,r)=>{let i=At(),a=(0,$.useMemo)(()=>B({rows:kr(n)}),[n]),o=L({resolver:I(a),defaultValues:{rows:[]}}),{reset:s}=o;return(0,$.useEffect)(()=>{e&&s({rows:Dr(t.assignments,n)})},[e,t.assignments,n,s]),{form:o,onSubmit:o.handleSubmit(async({rows:e})=>{(await R(i.mutateAsync({id:t.id,input:{assignments:Or(e)}}))).ok&&(T.success(O.t(`users.rolesSaved`)),r())}),updateUser:i}},zr=()=>te().data?.roles.some(e=>e.key===Mr.owner)??!1,Br=({open:e,onOpenChange:t,user:n})=>{let{t:r}=l(),i=Pr({includeOwner:zr(),heldRoleIds:n.assignments.map(e=>e.roleId)}),{form:a,onSubmit:o,updateUser:s}=Rr(e,n,i.ownerRoleId,()=>t(!1));return(0,Q.jsxs)(X,{open:e,onOpenChange:t,size:`md`,title:r(`users.accessTitle`,{name:n.name||n.email}),dirty:a.formState.isDirty,pending:s.isPending,submitLabel:r(`common.saveChanges`),pendingLabel:r(`common.saving`),onSubmit:e=>void o(e),children:[(0,Q.jsx)(jr,{control:a.control,roleOptions:i.roleOptions,siteOptions:i.siteOptions,siteIds:i.siteIds,multiSite:i.multiSite,defaultRoleId:i.editorRoleId}),(0,Q.jsx)(A,{error:s.error??i.error})]})},Vr=({user:e,roleNames:t,siteNames:n,isSelf:r,onToggleStatus:i,onRemove:a})=>{let{t:o}=l(),[s,c]=(0,$.useState)(void 0),[u,d]=(0,$.useState)(!1),f=e.name||e.email;return(0,Q.jsxs)(U,{children:[(0,Q.jsx)(W,{children:(0,Q.jsx)(Ke,{name:f,email:e.email,badge:r?(0,Q.jsx)(b,{variant:`secondary`,children:o(`users.you`)}):null})}),(0,Q.jsxs)(W,{children:[(0,Q.jsx)(`span`,{className:`flex flex-wrap gap-1`,children:(0,Q.jsx)(wr,{assignments:e.assignments,roleNames:t,siteNames:n})}),s===void 0?null:(0,Q.jsx)(Br,{open:s,onOpenChange:c,user:e})]}),(0,Q.jsx)(W,{children:e.status===`active`?(0,Q.jsx)(ae,{tone:`success`,label:o(`users.active`)}):(0,Q.jsx)(ae,{tone:`muted`,label:o(`users.disabled`)})}),(0,Q.jsx)(W,{title:x(e.lastLoginAt)||void 0,children:e.lastLoginAt?se(e.lastLoginAt):o(`common.never`)}),(0,Q.jsx)(W,{className:`text-right`,children:r?null:(0,Q.jsxs)(Be,{children:[(0,Q.jsx)(j,{tone:`danger`,open:u,onOpenChange:d,title:o(`users.removeTitle`,{name:f}),description:o(`users.removeDescription`),confirmLabel:o(`common.remove`),onConfirm:()=>a(e),children:(0,Q.jsx)(Re,{asChild:!0,children:(0,Q.jsx)(k,{variant:`ghost`,size:`icon-sm`,"aria-label":`${o(`common.actions`)}: ${f}`,children:(0,Q.jsx)(Pe,{"aria-hidden":`true`})})})}),(0,Q.jsxs)(ze,{align:`end`,onCloseAutoFocus:e=>(u||s)&&e.preventDefault(),children:[(0,Q.jsxs)(M,{onSelect:()=>c(!0),children:[(0,Q.jsx)(Ze,{"aria-hidden":`true`}),o(`users.editAccess`)]}),(0,Q.jsxs)(M,{onSelect:()=>i(e),children:[e.status===`active`?(0,Q.jsx)(Qe,{"aria-hidden":`true`}):(0,Q.jsx)(We,{"aria-hidden":`true`}),e.status===`active`?o(`users.disable`):o(`users.enable`)]}),(0,Q.jsx)(Le,{}),(0,Q.jsxs)(M,{variant:`destructive`,onSelect:()=>d(!0),children:[(0,Q.jsx)(fe,{"aria-hidden":`true`}),o(`common.remove`)]})]})]})})]})},Hr=({users:e,roleNames:t,siteNames:n,currentUserId:r,onToggleStatus:i,onRemove:a})=>{let{t:o}=l();return(0,Q.jsx)(G,{children:(0,Q.jsxs)(K,{children:[(0,Q.jsx)(z,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(V,{children:o(`users.name`)}),(0,Q.jsx)(V,{children:o(`users.roles`)}),(0,Q.jsx)(V,{children:o(`users.status`)}),(0,Q.jsx)(V,{children:o(`users.lastLogin`)}),(0,Q.jsx)(V,{children:(0,Q.jsx)(`span`,{className:`sr-only`,children:o(`common.actions`)})})]})}),(0,Q.jsx)(H,{children:e.map(e=>(0,Q.jsx)(Vr,{user:e,roleNames:t,siteNames:n,isSelf:e.id===r,onToggleStatus:i,onRemove:a},e.id))})]})})},Ur={sites:C(`/app/network/sites`)({component:xn}),site:C(`/app/network/sites/$siteId`)({component:hn}),contentTypes:C(`/app/network/content-types/`)({component:qt}),newContentType:C(`/app/network/content-types/new`)({component:Yt}),users:C(`/app/network/users`)({component:()=>{let{t:e}=l(),{data:t}=te(),n=Tt(),{names:r}=Ft(),{names:i}=$t(),a=Ot(),o=Et(),[s,c]=(0,$.useState)(!1),u=Sr(),d=async t=>{await o.mutateAsync(t.id),T.success(e(`users.removed`))};return(0,Q.jsxs)(_,{children:[(0,Q.jsx)(v,{title:e(`users.title`),actions:(0,Q.jsxs)(k,{onClick:()=>c(!0),children:[(0,Q.jsx)($e,{"aria-hidden":`true`}),e(`users.invite`)]})}),(0,Q.jsx)(J,{query:n,isEmpty:e=>e.length===0,empty:(0,Q.jsx)(y,{icon:rt,title:e(`users.empty`)}),children:n=>(0,Q.jsx)(Hr,{users:n,roleNames:r,siteNames:i,currentUserId:t?.user.id,onToggleStatus:t=>a.mutate({id:t.id,status:t.status===`active`?`disabled`:`active`},{onSuccess:()=>T.success(e(`users.statusChanged`))}),onRemove:d})}),u.revealed?(0,Q.jsx)(Cr,{link:u.revealed,emailDelivery:u.emailDelivery,onDismiss:u.dismiss},u.revealed.acceptUrl):null,(0,Q.jsx)(Tr,{siteNames:i,onCopyLink:u.reveal,onCloseAutoFocus:u.keepFocusOnReveal}),(0,Q.jsx)(Lr,{open:s,onOpenChange:c,onInvited:u.announceInvitation,onCloseAutoFocus:u.keepFocusOnReveal})]})}}),roles:C(`/app/network/roles`)({component:Hn}),appRoles:C(`/app/network/roles/app`)({component:$n}),appRole:C(`/app/network/roles/app/$roleId`)({component:xr}),auditLog:C(`/app/network/audit-log`)({component:On})};export{Ur as networkLazyRoutes};
|
|
2
|
+
//# sourceMappingURL=network-BfDaUb7D.js.map
|