@shapio/cms 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/assets/{AssetTile-zOf0K0nN.js → AssetTile-B8ftUG4s.js} +2 -2
- package/dist/admin/assets/{AssetTile-zOf0K0nN.js.map → AssetTile-B8ftUG4s.js.map} +1 -1
- package/dist/admin/assets/{AssistError-D_vY2CO0.js → AssistError-BidlzaBY.js} +2 -2
- package/dist/admin/assets/{AssistError-D_vY2CO0.js.map → AssistError-BidlzaBY.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-BEnSpClj.js → BlockMenuItems-DfNBHqVM.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-BEnSpClj.js.map → BlockMenuItems-DfNBHqVM.js.map} +1 -1
- package/dist/admin/assets/{Body-B_IVN5wp.js → Body-C0oQSX6L.js} +2 -2
- package/dist/admin/assets/{Body-B_IVN5wp.js.map → Body-C0oQSX6L.js.map} +1 -1
- package/dist/admin/assets/{Builder-CnEtRudv.js → Builder-Z_hcyzNW.js} +2 -2
- package/dist/admin/assets/{Builder-CnEtRudv.js.map → Builder-Z_hcyzNW.js.map} +1 -1
- package/dist/admin/assets/{ConfirmDialog-BW-l3Whg.js → ConfirmDialog-DVN-n-tE.js} +2 -2
- package/dist/admin/assets/{ConfirmDialog-BW-l3Whg.js.map → ConfirmDialog-DVN-n-tE.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-CyoUMStc.js → CopyButton--tHegXQr.js} +2 -2
- package/dist/admin/assets/{CopyButton-CyoUMStc.js.map → CopyButton--tHegXQr.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-BW2Dl_hn.js → CursorPager-Cb94mITn.js} +2 -2
- package/dist/admin/assets/{CursorPager-BW2Dl_hn.js.map → CursorPager-Cb94mITn.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-BCI0q9ib.js → ExternalLink-M1cb1n2n.js} +2 -2
- package/dist/admin/assets/{ExternalLink-BCI0q9ib.js.map → ExternalLink-M1cb1n2n.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-CxicvlJO.js → FocalPoint-pTq17ngi.js} +2 -2
- package/dist/admin/assets/{FocalPoint-CxicvlJO.js.map → FocalPoint-pTq17ngi.js.map} +1 -1
- package/dist/admin/assets/{Form-DB03drS9.js → Form-4zah109J.js} +2 -2
- package/dist/admin/assets/{Form-DB03drS9.js.map → Form-4zah109J.js.map} +1 -1
- package/dist/admin/assets/FormCheckboxGroup-DAeuGKAU.js +2 -0
- package/dist/admin/assets/FormCheckboxGroup-DAeuGKAU.js.map +1 -0
- package/dist/admin/assets/{FormRadioGroup-BvSC8SRm.js → FormRadioGroup--xx08rw6.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-BvSC8SRm.js.map → FormRadioGroup--xx08rw6.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-BDIVhZh6.js → FormSelectField-DNOCQKqc.js} +2 -2
- package/dist/admin/assets/{FormSelectField-BDIVhZh6.js.map → FormSelectField-DNOCQKqc.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-OM4F8ln4.js → FormSwitchField-BECl-pzH.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-OM4F8ln4.js.map → FormSwitchField-BECl-pzH.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-Bw7EkC4H.js → FormTextareaField-DmRuKDJ_.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-Bw7EkC4H.js.map → FormTextareaField-DmRuKDJ_.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-BGidukgy.js → HintedLabel-DIEBvftx.js} +2 -2
- package/dist/admin/assets/{HintedLabel-BGidukgy.js.map → HintedLabel-DIEBvftx.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-D3uwei-E.js → InfoHint-BdAadb9U.js} +2 -2
- package/dist/admin/assets/{InfoHint-D3uwei-E.js.map → InfoHint-BdAadb9U.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-DAihGvbw.js → InsertMenuItem-oh0NJrhB.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-DAihGvbw.js.map → InsertMenuItem-oh0NJrhB.js.map} +1 -1
- package/dist/admin/assets/{LinkTabs-DBXbfzME.js → LinkTabs-EBgHX4Uh.js} +2 -2
- package/dist/admin/assets/{LinkTabs-DBXbfzME.js.map → LinkTabs-EBgHX4Uh.js.map} +1 -1
- package/dist/admin/assets/{Match-CgfZTzqs.js → Match-CvpSNEfi.js} +2 -2
- package/dist/admin/assets/{Match-CgfZTzqs.js.map → Match-CvpSNEfi.js.map} +1 -1
- package/dist/admin/assets/{Panel-DDky5_x9.js → Panel-BV1BpNCn.js} +2 -2
- package/dist/admin/assets/{Panel-DDky5_x9.js.map → Panel-BV1BpNCn.js.map} +1 -1
- package/dist/admin/assets/{QueryView-C2d392ly.js → QueryView-Bbw1eiV2.js} +2 -2
- package/dist/admin/assets/{QueryView-C2d392ly.js.map → QueryView-Bbw1eiV2.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-CcP78eb_.js → RadioTile-CSYW-8gL.js} +2 -2
- package/dist/admin/assets/{RadioTile-CcP78eb_.js.map → RadioTile-CSYW-8gL.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-CeztaFET.js → RichTextField-BDb67rCi.js} +2 -2
- package/dist/admin/assets/{RichTextField-CeztaFET.js.map → RichTextField-BDb67rCi.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-mkKp4yfl.js → RowTitle-Cted2GP8.js} +2 -2
- package/dist/admin/assets/{RowTitle-mkKp4yfl.js.map → RowTitle-Cted2GP8.js.map} +1 -1
- package/dist/admin/assets/SecretReveal-Ccaul96d.js +2 -0
- package/dist/admin/assets/SecretReveal-Ccaul96d.js.map +1 -0
- package/dist/admin/assets/{SharedGlyph-CuDT7OUU.js → SharedGlyph-BrLi3Hug.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-CuDT7OUU.js.map → SharedGlyph-BrLi3Hug.js.map} +1 -1
- package/dist/admin/assets/{StepList-BDO0Q3Wc.js → StepList-BLvElvPV.js} +2 -2
- package/dist/admin/assets/{StepList-BDO0Q3Wc.js.map → StepList-BLvElvPV.js.map} +1 -1
- package/dist/admin/assets/Structure-CRNAuVY7.js +2 -0
- package/dist/admin/assets/{Structure-CL_0hVci.js.map → Structure-CRNAuVY7.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-C4eSybWd.js → SubNavLink-biGV5ozd.js} +2 -2
- package/dist/admin/assets/{SubNavLink-C4eSybWd.js.map → SubNavLink-biGV5ozd.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-CxYlhwyd.js → SuggestAltButton-CrFiRWGr.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CxYlhwyd.js.map → SuggestAltButton-CrFiRWGr.js.map} +1 -1
- package/dist/admin/assets/{TextLink-DzNaAft6.js → TextLink-BPLbXw2n.js} +2 -2
- package/dist/admin/assets/{TextLink-DzNaAft6.js.map → TextLink-BPLbXw2n.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-DSPArZ9h.js → Thumbnail-B_TWlgEz.js} +2 -2
- package/dist/admin/assets/{Thumbnail-DSPArZ9h.js.map → Thumbnail-B_TWlgEz.js.map} +1 -1
- package/dist/admin/assets/{UnsavedChangesGuard-BPOCBD5T.js → UnsavedChangesGuard-CrzR2boF.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-BPOCBD5T.js.map → UnsavedChangesGuard-CrzR2boF.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-BHNWHDVb.js → UserAvatar-W-S3st7E.js} +2 -2
- package/dist/admin/assets/{UserAvatar-BHNWHDVb.js.map → UserAvatar-W-S3st7E.js.map} +1 -1
- package/dist/admin/assets/{auth-BzCgJtgr.js → auth-cXFFyABE.js} +2 -2
- package/dist/admin/assets/{auth-BzCgJtgr.js.map → auth-cXFFyABE.js.map} +1 -1
- package/dist/admin/assets/{badge-DBoaS0nQ.js → badge-DrPwivGk.js} +2 -2
- package/dist/admin/assets/{badge-DBoaS0nQ.js.map → badge-DrPwivGk.js.map} +1 -1
- package/dist/admin/assets/{boxes-DhN0ctLo.js → boxes-CKJ6P9VA.js} +2 -2
- package/dist/admin/assets/{boxes-DhN0ctLo.js.map → boxes-CKJ6P9VA.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-BEA3tG17.js → calendar-clock-DPyjti63.js} +2 -2
- package/dist/admin/assets/{calendar-clock-BEA3tG17.js.map → calendar-clock-DPyjti63.js.map} +1 -1
- package/dist/admin/assets/{changeSets-C54Ku-X9.js → changeSets-DYGm5j1A.js} +2 -2
- package/dist/admin/assets/{changeSets-C54Ku-X9.js.map → changeSets-DYGm5j1A.js.map} +1 -1
- package/dist/admin/assets/chevron-left-DIp5sJuv.js +2 -0
- package/dist/admin/assets/{chevron-left-BeJdUVAX.js.map → chevron-left-DIp5sJuv.js.map} +1 -1
- package/dist/admin/assets/{circle-check-ktACw37r.js → circle-check-VXPKg4cE.js} +2 -2
- package/dist/admin/assets/{circle-check-ktACw37r.js.map → circle-check-VXPKg4cE.js.map} +1 -1
- package/dist/admin/assets/{clock-BKNNASKp.js → clock-DNhupIko.js} +2 -2
- package/dist/admin/assets/{clock-BKNNASKp.js.map → clock-DNhupIko.js.map} +1 -1
- package/dist/admin/assets/cn-CEPUgFbZ.js +2 -0
- package/dist/admin/assets/cn-CEPUgFbZ.js.map +1 -0
- package/dist/admin/assets/coerce-BxuBjZdf.js +2 -0
- package/dist/admin/assets/{coerce-DDQ1vGLx.js.map → coerce-BxuBjZdf.js.map} +1 -1
- package/dist/admin/assets/{constants-DH7oqfO_.js → constants-B9cNrCXV.js} +2 -2
- package/dist/admin/assets/{constants-DH7oqfO_.js.map → constants-B9cNrCXV.js.map} +1 -1
- package/dist/admin/assets/{content-BptqQO8c.js → content-DjyCdi4c.js} +3 -3
- package/dist/admin/assets/{content-BptqQO8c.js.map → content-DjyCdi4c.js.map} +1 -1
- package/dist/admin/assets/{contentCounts-BpGlmyeZ.js → contentCounts-CX15iYcR.js} +2 -2
- package/dist/admin/assets/{contentCounts-BpGlmyeZ.js.map → contentCounts-CX15iYcR.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-B_mAlIcH.js → contentTypes-FgyxLhlk.js} +2 -2
- package/dist/admin/assets/{contentTypes-B_mAlIcH.js.map → contentTypes-FgyxLhlk.js.map} +1 -1
- package/dist/admin/assets/{context-DyyMW7Md.js → context-FqJXjS5k.js} +2 -2
- package/dist/admin/assets/{context-DyyMW7Md.js.map → context-FqJXjS5k.js.map} +1 -1
- package/dist/admin/assets/{copy-DjzlFY9u.js → copy-CoHbtS-Y.js} +2 -2
- package/dist/admin/assets/{copy-DjzlFY9u.js.map → copy-CoHbtS-Y.js.map} +1 -1
- package/dist/admin/assets/{dateTimeLocal-DFXY779D.js → dateTimeLocal-BxmDLO_H.js} +2 -2
- package/dist/admin/assets/{dateTimeLocal-DFXY779D.js.map → dateTimeLocal-BxmDLO_H.js.map} +1 -1
- package/dist/admin/assets/{develop-DJap_z-1.js → develop-gx8WeWv4.js} +2 -2
- package/dist/admin/assets/{develop-DJap_z-1.js.map → develop-gx8WeWv4.js.map} +1 -1
- package/dist/admin/assets/{dropdown-menu-DGSMTf23.js → dropdown-menu-BG1rctRQ.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-DGSMTf23.js.map → dropdown-menu-BG1rctRQ.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-BMP-j3yO.js → ellipsis-DHfP1Ah2.js} +2 -2
- package/dist/admin/assets/{ellipsis-BMP-j3yO.js.map → ellipsis-DHfP1Ah2.js.map} +1 -1
- package/dist/admin/assets/{external-link-DzOkt97S.js → external-link-itxcNtaX.js} +2 -2
- package/dist/admin/assets/{external-link-DzOkt97S.js.map → external-link-itxcNtaX.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-CG0Dufvt.js → fileRoute-BZ0pGGsh.js} +2 -2
- package/dist/admin/assets/{fileRoute-CG0Dufvt.js.map → fileRoute-BZ0pGGsh.js.map} +1 -1
- package/dist/admin/assets/{folder-plus-C-LhI4a2.js → folder-plus-BgsfY_6i.js} +2 -2
- package/dist/admin/assets/{folder-plus-C-LhI4a2.js.map → folder-plus-BgsfY_6i.js.map} +1 -1
- package/dist/admin/assets/{followPlural-D-8kzFOe.js → followPlural-BqjqhHmz.js} +2 -2
- package/dist/admin/assets/{followPlural-D-8kzFOe.js.map → followPlural-BqjqhHmz.js.map} +1 -1
- package/dist/admin/assets/{globe-DOoGBy23.js → globe-RjXj4P-A.js} +2 -2
- package/dist/admin/assets/{globe-DOoGBy23.js.map → globe-RjXj4P-A.js.map} +1 -1
- package/dist/admin/assets/{image-D9p_gGE2.js → image-4itB4TLl.js} +2 -2
- package/dist/admin/assets/{image-D9p_gGE2.js.map → image-4itB4TLl.js.map} +1 -1
- package/dist/admin/assets/{image-off-G0M2Nh1I.js → image-off-CokIymyg.js} +2 -2
- package/dist/admin/assets/{image-off-G0M2Nh1I.js.map → image-off-CokIymyg.js.map} +1 -1
- package/dist/admin/assets/{inbox-XaM-nvsM.js → inbox-8AAyyM0T.js} +2 -2
- package/dist/admin/assets/{inbox-XaM-nvsM.js.map → inbox-8AAyyM0T.js.map} +1 -1
- package/dist/admin/assets/{inbox-CMzYVMZo.js → inbox-97pzmuus.js} +2 -2
- package/dist/admin/assets/{inbox-CMzYVMZo.js.map → inbox-97pzmuus.js.map} +1 -1
- package/dist/admin/assets/{index-DHmfMpqz.js → index-cpiZvLck.js} +4 -4
- package/dist/admin/assets/{index-DHmfMpqz.js.map → index-cpiZvLck.js.map} +1 -1
- package/dist/admin/assets/{key-round-HBvMrmMo.js → key-round-Dc4_SOi-.js} +2 -2
- package/dist/admin/assets/{key-round-HBvMrmMo.js.map → key-round-Dc4_SOi-.js.map} +1 -1
- package/dist/admin/assets/{languages-BOv0jYhe.js → languages-DR2K97A5.js} +2 -2
- package/dist/admin/assets/{languages-BOv0jYhe.js.map → languages-DR2K97A5.js.map} +1 -1
- package/dist/admin/assets/{layers-CkZyCaeb.js → layers-ZPmcbieN.js} +2 -2
- package/dist/admin/assets/{layers-CkZyCaeb.js.map → layers-ZPmcbieN.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-UUkSmPIL.js → link-2-off-D_5_hkT7.js} +2 -2
- package/dist/admin/assets/{link-2-off-UUkSmPIL.js.map → link-2-off-D_5_hkT7.js.map} +1 -1
- package/dist/admin/assets/{link-Bvqcg7db.js → link-BnDFFyvi.js} +2 -2
- package/dist/admin/assets/{link-Bvqcg7db.js.map → link-BnDFFyvi.js.map} +1 -1
- package/dist/admin/assets/{locales-DbrcdhZi.js → locales-D-21t-l-.js} +2 -2
- package/dist/admin/assets/{locales-DbrcdhZi.js.map → locales-D-21t-l-.js.map} +1 -1
- package/dist/admin/assets/{media-ugEyLgwN.js → media-D7aimjyy.js} +2 -2
- package/dist/admin/assets/{media-ugEyLgwN.js.map → media-D7aimjyy.js.map} +1 -1
- package/dist/admin/assets/{media-CO0HSS3b.js → media-Db0cHYNY.js} +2 -2
- package/dist/admin/assets/{media-CO0HSS3b.js.map → media-Db0cHYNY.js.map} +1 -1
- package/dist/admin/assets/network-l_oLT5fa.js +2 -0
- package/dist/admin/assets/network-l_oLT5fa.js.map +1 -0
- package/dist/admin/assets/{pencil-BLNGNJmL.js → pencil-Cn8c_gtv.js} +2 -2
- package/dist/admin/assets/{pencil-BLNGNJmL.js.map → pencil-Cn8c_gtv.js.map} +1 -1
- package/dist/admin/assets/{plus-BXMBYPoB.js → plus-yxvf4aAT.js} +2 -2
- package/dist/admin/assets/{plus-BXMBYPoB.js.map → plus-yxvf4aAT.js.map} +1 -1
- package/dist/admin/assets/{preload-helper-DEbJbZwX.js → preload-helper-pwSesV5P.js} +2 -2
- package/dist/admin/assets/{preload-helper-DEbJbZwX.js.map → preload-helper-pwSesV5P.js.map} +1 -1
- package/dist/admin/assets/{publishing-DKrATBaj.js → publishing-PQLCOnvu.js} +2 -2
- package/dist/admin/assets/{publishing-DKrATBaj.js.map → publishing-PQLCOnvu.js.map} +1 -1
- package/dist/admin/assets/{radio-group-BIhT_uEK.js → radio-group-Fc2ENIMO.js} +2 -2
- package/dist/admin/assets/{radio-group-BIhT_uEK.js.map → radio-group-Fc2ENIMO.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-DqbffhiC.js → rotate-ccw-BHa0BHug.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-DqbffhiC.js.map → rotate-ccw-BHa0BHug.js.map} +1 -1
- package/dist/admin/assets/{schedules-CETl2eLe.js → schedules-B8y_GnqX.js} +2 -2
- package/dist/admin/assets/{schedules-CETl2eLe.js.map → schedules-B8y_GnqX.js.map} +1 -1
- package/dist/admin/assets/{schema-CWHuez0q.js → schema-BJHcYshf.js} +2 -2
- package/dist/admin/assets/{schema-CWHuez0q.js.map → schema-BJHcYshf.js.map} +1 -1
- package/dist/admin/assets/{scroll-text-DlcDEi2k.js → scroll-text-BHLmZpBB.js} +2 -2
- package/dist/admin/assets/{scroll-text-DlcDEi2k.js.map → scroll-text-BHLmZpBB.js.map} +1 -1
- package/dist/admin/assets/{search-Dy2dtwyR.js → search-D3GGSaSL.js} +2 -2
- package/dist/admin/assets/{search-Dy2dtwyR.js.map → search-D3GGSaSL.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-Cz4P1iku.js → searchSchemas-C4dnYI9a.js} +2 -2
- package/dist/admin/assets/{searchSchemas-Cz4P1iku.js.map → searchSchemas-C4dnYI9a.js.map} +1 -1
- package/dist/admin/assets/{sections-BfG6DTFr.js → sections-BWoTaw2B.js} +2 -2
- package/dist/admin/assets/{sections-BfG6DTFr.js.map → sections-BWoTaw2B.js.map} +1 -1
- package/dist/admin/assets/{sections-EgXyXN3-.js → sections-eeTU636D.js} +2 -2
- package/dist/admin/assets/{sections-EgXyXN3-.js.map → sections-eeTU636D.js.map} +1 -1
- package/dist/admin/assets/{select--mePTdz8.js → select-BMi4G1Ib.js} +2 -2
- package/dist/admin/assets/{select--mePTdz8.js.map → select-BMi4G1Ib.js.map} +1 -1
- package/dist/admin/assets/{send-DVgq5Iwg.js → send-Bqhmg9HP.js} +2 -2
- package/dist/admin/assets/{send-DVgq5Iwg.js.map → send-Bqhmg9HP.js.map} +1 -1
- package/dist/admin/assets/{seo-Zhb62Ojz.js → seo-BL9C7Yt3.js} +2 -2
- package/dist/admin/assets/{seo-Zhb62Ojz.js.map → seo-BL9C7Yt3.js.map} +1 -1
- package/dist/admin/assets/settings-D-nW3wQb.js +2 -0
- package/dist/admin/assets/settings-D-nW3wQb.js.map +1 -0
- package/dist/admin/assets/skeleton-BPLAzyDo.js +42 -0
- package/dist/admin/assets/skeleton-BPLAzyDo.js.map +1 -0
- package/dist/admin/assets/{snapshots-BpLhILlt.js → snapshots-COSUeZBP.js} +2 -2
- package/dist/admin/assets/{snapshots-BpLhILlt.js.map → snapshots-COSUeZBP.js.map} +1 -1
- package/dist/admin/assets/{sparkles-Dd6S_roX.js → sparkles-CykwtKTd.js} +2 -2
- package/dist/admin/assets/{sparkles-Dd6S_roX.js.map → sparkles-CykwtKTd.js.map} +1 -1
- package/dist/admin/assets/{stableId-DFVM13gJ.js → stableId-DfJkQUV3.js} +2 -2
- package/dist/admin/assets/{stableId-DFVM13gJ.js.map → stableId-DfJkQUV3.js.map} +1 -1
- package/dist/admin/assets/{store-BP-xStwU.js → store-GOGeP63I.js} +2 -2
- package/dist/admin/assets/{store-BP-xStwU.js.map → store-GOGeP63I.js.map} +1 -1
- package/dist/admin/assets/{switch-skVypg5O.js → switch-XRU_EOoM.js} +2 -2
- package/dist/admin/assets/{switch-skVypg5O.js.map → switch-XRU_EOoM.js.map} +1 -1
- package/dist/admin/assets/{table-BMbbRUK9.js → table-CLVW6uJB.js} +2 -2
- package/dist/admin/assets/{table-BMbbRUK9.js.map → table-CLVW6uJB.js.map} +1 -1
- package/dist/admin/assets/{tabs-C1lgOg1B.js → tabs-DB42Xljn.js} +3 -3
- package/dist/admin/assets/{tabs-C1lgOg1B.js.map → tabs-DB42Xljn.js.map} +1 -1
- package/dist/admin/assets/{textarea-CffBBxoQ.js → textarea-DcsLGCkq.js} +2 -2
- package/dist/admin/assets/{textarea-CffBBxoQ.js.map → textarea-DcsLGCkq.js.map} +1 -1
- package/dist/admin/assets/{theme-RHTVnR9j.js → theme-CnSar6tt.js} +2 -2
- package/dist/admin/assets/{theme-RHTVnR9j.js.map → theme-CnSar6tt.js.map} +1 -1
- package/dist/admin/assets/{titles-DWiPmNvn.js → titles-DluirfBO.js} +2 -2
- package/dist/admin/assets/{titles-DWiPmNvn.js.map → titles-DluirfBO.js.map} +1 -1
- package/dist/admin/assets/{tokens-BqyeN1D-.js → tokens-CQooB8Sf.js} +2 -2
- package/dist/admin/assets/{tokens-BqyeN1D-.js.map → tokens-CQooB8Sf.js.map} +1 -1
- package/dist/admin/assets/{tooltip-BfSF6EyR.js → tooltip-xfZn0Fla.js} +2 -2
- package/dist/admin/assets/{tooltip-BfSF6EyR.js.map → tooltip-xfZn0Fla.js.map} +1 -1
- package/dist/admin/assets/{undo-2-p4YlNhBp.js → undo-2-B_QjuGmR.js} +2 -2
- package/dist/admin/assets/{undo-2-p4YlNhBp.js.map → undo-2-B_QjuGmR.js.map} +1 -1
- package/dist/admin/assets/{useAuditLabels-DV5gcaaG.js → useAuditLabels-BZPAj3wG.js} +2 -2
- package/dist/admin/assets/{useAuditLabels-DV5gcaaG.js.map → useAuditLabels-BZPAj3wG.js.map} +1 -1
- package/dist/admin/assets/{useConfirmTarget-DCvnxNVg.js → useConfirmTarget-B7iLg66j.js} +2 -2
- package/dist/admin/assets/{useConfirmTarget-DCvnxNVg.js.map → useConfirmTarget-B7iLg66j.js.map} +1 -1
- package/dist/admin/assets/{useContentSchema-z6tNif86.js → useContentSchema-BTyBYURX.js} +2 -2
- package/dist/admin/assets/{useContentSchema-z6tNif86.js.map → useContentSchema-BTyBYURX.js.map} +1 -1
- package/dist/admin/assets/{useCursorPager-CQGX41_L.js → useCursorPager-CTGOzl69.js} +2 -2
- package/dist/admin/assets/{useCursorPager-CQGX41_L.js.map → useCursorPager-CTGOzl69.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-Dhbif7VL.js → useDiscardGuard-CSkPw8iq.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-Dhbif7VL.js.map → useDiscardGuard-CSkPw8iq.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-D-5uKsMG.js → useMediaPickerDialog-W0jhN-hi.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-D-5uKsMG.js.map → useMediaPickerDialog-W0jhN-hi.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-BtLoimmQ.js → useMediaUploader-BC5zCkQt.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-BtLoimmQ.js.map → useMediaUploader-BC5zCkQt.js.map} +1 -1
- package/dist/admin/assets/{usePaletteItems-D3PZsW0Q.js → usePaletteItems-CqcKndUT.js} +2 -2
- package/dist/admin/assets/{usePaletteItems-D3PZsW0Q.js.map → usePaletteItems-CqcKndUT.js.map} +1 -1
- package/dist/admin/assets/{usePlaces-Cj5PljTy.js → usePlaces-o4Os5Nbv.js} +2 -2
- package/dist/admin/assets/{usePlaces-Cj5PljTy.js.map → usePlaces-o4Os5Nbv.js.map} +1 -1
- package/dist/admin/assets/{useQueries-CeDzli4Z.js → useQueries-BTnSD0k5.js} +2 -2
- package/dist/admin/assets/{useQueries-CeDzli4Z.js.map → useQueries-BTnSD0k5.js.map} +1 -1
- package/dist/admin/assets/{useResolvedScheme-DHD-zisP.js → useResolvedScheme-SoI-2Faf.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-DHD-zisP.js.map → useResolvedScheme-SoI-2Faf.js.map} +1 -1
- package/dist/admin/assets/{useSchemaScopeAccess-BNeVslcv.js → useSchemaScopeAccess-B4-31q7m.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-BNeVslcv.js.map → useSchemaScopeAccess-B4-31q7m.js.map} +1 -1
- package/dist/admin/assets/{users-BRefbzuS.js → users-BVuapb3u.js} +2 -2
- package/dist/admin/assets/{users-BRefbzuS.js.map → users-BVuapb3u.js.map} +1 -1
- package/dist/admin/assets/{users-CppI8ctO.js → users-Oj5V5za_.js} +2 -2
- package/dist/admin/assets/{users-CppI8ctO.js.map → users-Oj5V5za_.js.map} +1 -1
- package/dist/admin/assets/{zod-Dcwk-m8X.js → zod-cTJwCa4E.js} +2 -2
- package/dist/admin/assets/{zod-Dcwk-m8X.js.map → zod-cTJwCa4E.js.map} +1 -1
- package/dist/admin/index.html +55 -55
- package/dist/cli.js +33 -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-DYR4mtVQ.d.ts → public-C027OJX6.d.ts} +12 -2
- package/dist/{s3Adapter-C8AgFVYw.js → s3Adapter-BipoQiwQ.js} +2 -2
- package/dist/{s3Adapter-C8AgFVYw.js.map → s3Adapter-BipoQiwQ.js.map} +1 -1
- package/dist/{worker-jz_0yAmS.js → worker-BU-V4qbH.js} +174 -60
- package/dist/worker-BU-V4qbH.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/FormCheckboxGroup-JP1xzReQ.js +0 -2
- package/dist/admin/assets/FormCheckboxGroup-JP1xzReQ.js.map +0 -1
- package/dist/admin/assets/SecretReveal-mYCzxF96.js +0 -2
- package/dist/admin/assets/SecretReveal-mYCzxF96.js.map +0 -1
- package/dist/admin/assets/Structure-CL_0hVci.js +0 -2
- package/dist/admin/assets/chevron-left-BeJdUVAX.js +0 -2
- package/dist/admin/assets/cn-h5ORT3LK.js +0 -2
- package/dist/admin/assets/cn-h5ORT3LK.js.map +0 -1
- package/dist/admin/assets/coerce-DDQ1vGLx.js +0 -2
- package/dist/admin/assets/network-BfDaUb7D.js +0 -2
- package/dist/admin/assets/network-BfDaUb7D.js.map +0 -1
- package/dist/admin/assets/settings-Mscp6tN5.js +0 -2
- package/dist/admin/assets/settings-Mscp6tN5.js.map +0 -1
- package/dist/admin/assets/skeleton-DJVukcn6.js +0 -42
- package/dist/admin/assets/skeleton-DJVukcn6.js.map +0 -1
- package/dist/worker-jz_0yAmS.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn-CEPUgFbZ.js","names":["isServer","getDefaultState","entryPath","createContext","useContext","useMemo","useRef","useCallback","useState","useSyncExternalStore","createContext","useContext","forwardRef","createElement","forwardRef","createElement","__toESM","require_react","require_jsx_runtime","import_react","import_jsx_runtime","QueryClientContext","useQueryClient","client","queryClient","QueryClientProvider","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","timeoutManager","#provider","provider","systemSetTimeoutZero","isServer$1","noop","functionalUpdate","updater","input","isValidTimeout","value","timeUntilStale","updatedAt","staleTime","resolveQueryValue","query","matchQuery","filters","queryKey","exact","hashQueryKeyByOptions","partialMatchKey","type","isActive","stale","fetchStatus","predicate","matchMutation","mutationKey","mutation","hashKey","status","options","isPlainObject","val","key","result","a","b","i","bKeys","hasOwn","replaceEqualDeep","depth","array","isPlainArray","aSize","bItems","bSize","copy","equalItems","aItem","bItem","v","shallowEqualObjects","hasObjectPrototype","o","objectPrototype","ctor","prot","sleep","resolve","timeout","replaceData","prevData","data","keepPreviousData","previousData","addToEnd","newItems","items","item","max","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","params","addConsumeAwareSignal","consumed","signal","object","getSignal","onCancelled","isServerFn","isServer","Subscribable","listener","focusManager","#setup","onFocus","#cleanup","setup","focused","#focused","isFocused","defaultScheduler","createNotifyManager","queue","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","flush","originalQueue","args","fn","notifyManager","onlineManager","onlineListener","onOnline","offlineListener","#online","online","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","isRetryCancelled","continueFn","promiseResolve","promiseReject","promise","reject","isResolved","cancel","error","cancelOptions","config","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","retry","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","infiniteQueryBehavior","context","direction","oldPages","oldPageParams","currentPage","fetchFn","cancelled","addSignalProperty","queryFn","fetchPage","param","queryFnContext","previous","page","addTo","maxPages","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pages","lastIndex","pageParams","hasNextPage","hasPreviousPage","Query","#abortSignalConsumed","#defaultOptions","#client","#cache","#initialState","getDefaultState$1","#queryType","#retryer","defaultState","successState","newData","#dispatch","observer","x","index","abortController","#revertState","retryer","reducer","action","state","fetchState","newState","dataUpdatedAt","hasData","initialDataUpdatedAt","QueryObserver","#selectError","#currentQuery","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","#updateQuery","mounted","shouldFetchOptionally","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#currentRefetchInterval","#updateRefetchInterval","#currentResult","#currentResultOptions","#currentResultState","onPropTracked","target","#trackedProps","defaultedOptions","unsubscribe","resolveEarly","cachePromise","event","#shouldScheduleTimer","#staleTimeoutId","nextInterval","#refetchIntervalId","prevResult","prevResultState","prevResultOptions","queryInitialState","#currentQueryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","skipSelect","placeholderData","#lastQueryWithDefinedData","#selectFn","#selectResult","selectError","isFetching","isPending","isError","isLoading","isStale","nextResult","notifyListeners","notifyOnChangePropsValue","notifyOnChangeProps","includedProps","typedKey","shouldLoadOnMount","field","Mutation","#mutationCache","#observers","getDefaultState","onContinue","mutationFnContext","variables","restored","isPaused","MutationObserver","#updateResult","#currentMutation","#notify","#mutateOptions","onMutateResult","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","suspense","ensureSuspenseTimers","MIN_SUSPENSE_TIME_MS","clamp","originalStaleTime","shouldSuspend","fetchOptimistic","useBaseQuery","isRestoring","subscribed","Observer","shouldSubscribe","onStoreChange","useQuery","useMutation","mutate","require_use_sync_external_store_shim_production","__commonJSMin","React","is","y","objectIs","useState","useEffect","useLayoutEffect","useDebugValue","useSyncExternalStore$2","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","subscribe","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","require_shim","require_with_selector_production","useSyncExternalStore","useRef","useMemo","instRef","memoizedSelector","hasMemo","nextSnapshot","selector","isEqual","currentSelection","memoizedSelection","memoizedSnapshot","nextSelection","maybeGetServerSnapshot","getServerSnapshot","require_with_selector","import_shim","ADMIN_PATHS","withId","base","id","toQueryString","serialised","createAppUsersApi","request","ASSIST_PATHS","createAssistApi","runId","setPath","draftPath","definitionId","createChangeSetsApi","itemId","seq","appendFilter","prefix","child","toContentQueryString","term","path","modelPath","modelKey","entryPath$1","revisionsPath","createContentApi","revisionId","entryPath","createEditingApi","createMediaApi","force","grantId","buildUploadForm","form","name","grant","file","filename","resolveUploadUrl","ownRoute","url","apiBaseUrl","createPublishingApi","deliveryId","DEFINITION_PATHS","createDefinitionApi","category","scope","createSchemaApi","changeId","code","acknowledgeDestructive","SITES_PATHS","SITE_HEADER","sitePath","createSitesApi","USAGE_PATHS","createUsageApi","createAdminApi","APP_AUTH_PATHS","createAppAuthApi","baseUrl","redirectTo","codeChallenge","TAG_PREFIX","shapioTags","siteKey","routeKey","entryId","isNextRuntime","nextFetchInit","drafts","read","configured","pinned","cache","revalidate","DELIVERY_PATH","routePath","deliveryQueryString","extra","snapshot","richText","seo","draftsPinned","createDeliveryApi","cacheContext","fetchInit","next","tags","siteTag","apiKey","DELIVERY_SITE_PATH","createSiteApi","SNAPSHOT_PATHS","createSnapshotsApi","changes","createDeliveryClient","isErrorBody","ShapioApiError","parsed","body","SITE_QUERY_PARAMETER","DELIVERY_READ_PREFIXES","isDeliveryRead","method","snapshotPath","namesSite","applySite","site","parameter","parseBody","text","response","createRequest","origin","siteHeaders","requestPath","requestHeaders","headers","token","init","credentials","fetch","createClient","reads","queryKeys","locale","cursor","from","to","modelId","days","warn","msg","rest","i18n","isString","alreadyWarned","warnOnce","loadedClb","cb","initialized","loadNamespaces","ns","loadLanguages","lng","n","hasLoadedNamespace","i18nInstance","loadNotPending","obj","isObject","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","m","defaultOptions","setDefaults","getDefaults","setI18n","instance","getI18n","I18nContext","ReportNamespaces","namespaces","notReadySnapshot","optsOrDefaultValue","k","last","dummySubscribe","useTranslation","i18nFromProps","props","i18nFromContext","defaultNSFromContext","i18nOptions","nsOrContext","unstableNamespaces","revisionRef","wrappedCallback","bindI18n","bindI18nStore","snapshotRef","calculatedReady","currentLng","currentRevision","lastSnapshot","keyPrefix","newSnapshot","loadCount","setLoadCount","ready","useSuspense","onLoaded","c","finalI18n","wrapperRef","wrapperLangRef","languageKey","createI18nWrapper","descriptors","original","wrapper","ret","lang","i18nWrapper","effectiveT","t","arr","inDevelopment","createJSONStorage","storage","getStorage","parse","str2","str","newValue","toThenable","onFulfilled","onRejected","persist","currentState","persistedState","baseOptions","hasHydrated","hydrationVersion","hydrationListeners","finishHydrationListeners","set","get","api","setItem","savedSetState","replace","configResult","stateFromStorage","hydrate","currentVersion","postRehydrationCallback","deserializedStorageValue","migration","migrated","migratedState","migrationResult","e","newOptions","safeLocalStorage","persistentStorage","routerBasePath","SITE_PREFIX","NETWORK_PATH","UNSITED_PATHS","isUnder","pathname","splitSitePath","match","isSitelessPath","isNetworkPath","withSitePrefix","needsSitePrefix","LAST_SITE_KEY","currentRouterPath","readLastSite","stored","resolveBootSite","currentSite","settleSiteKey","rememberSite","forgetSite","siteHomeUrl","networkUrl","goToSite","leaveDeletedSite","leaveUnknownSite","showSiteInAddressBar","search","hash","createStoreImpl","listeners","setState","nextState","partial","previousState","getState","initialState","createState","createStore","identity","arg","useStore","slice","createImpl","useBoundStore","create","useSessionStore","CSRF_HEADER","apiClient","adminApi","isCsrfRejection","setCsrfToken","refreshCsrfToken","csrfToken","withCsrf","call","resetCsrfToken","toKebabCase","string","toLucideIconData","iconNode","iconName","aliases","toCamelCase","out","upperNext","ch","toPascalCase","camelCase","mergeClasses","classes","className","defaultAttributes","isDefined","buildLucideIconNode","attributeNames","getAttributeName","attributeName","viewBoxWidth","icon","\"width\"","viewBoxHeight","\"height\"","aliasClassNames","alias","iconClassNames","classNamesFromClassName","calculatedStrokeWidth","attrName","attrs","children","nextAttrs","buildLucideIconForReact","hasA11yProp","prop","LucideContext","useLucideContext","Icon","contextSize","contextStrokeWidth","contextAbsoluteStrokeWidth","contextNonScalingStroke","contextColor","contextClass","hasAccessibleProp","svgAttributes","builtIconNode","color","width","size","height","strokeWidth","absoluteStrokeWidth","nonScalingStroke","tag","createLucideIcon","iconData","iconDataOrName","Component","__iconData","LoaderCircle","r","f","clsx","concatArrays","combinedArray","array1","array2","createClassValidatorObject","createClassPartObject","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","classMap","createClassMap","getGroupIdForArbitraryProperty","classParts","getGroupRecursive","hasPostfixModifier","modifierConflicts","conflictingClassGroupModifiers","classGroupId","baseConflicts","conflictingClassGroups","startIndex","classPartObject","currentClassPart","nextClassPartObject","validators","classRest","validatorsLength","validatorObj","content","colonIndex","property","processClassGroups","classGroups","theme","group","processClassesRecursively","len","classGroup","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","current","parts","part","func","createLruCache","maxCacheSize","cacheSize","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","createParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","baseClassName","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","experimentalParseClassName","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","createPostfixLookupClassGroupIds","lookup","classGroupIds","SPLIT_CLASSES_REGEX","mergeClassList","configUtils","classGroupsInConflict","classNames","classList","originalClassName","isExternal","getClassGroupId","classGroupIdWithPostfix","postfixLookupClassGroupIds","variantModifier","sortModifiers","modifierId","classId","conflictGroups","getConflictingClassGroupIds","twJoin","classLists","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","createConfigCurrent","previousConfig","createConfigFirst","tailwindMerge","cachedResult","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isNamedContainerQuery","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","mergeConfigs","overrideProperty","baseConfig","overrideConfigProperties","override","mergeConfigProperties","extend","mergeArrayProperties","overrideValue","overrideKey","overrideObject","baseObject","mergeObject","mergeValue","twMerge","createConfig","configExtension","cn","inputs"],"sources":["../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/utils.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/environmentManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/retryer.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/removable.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/query.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/mutation.js","../../../../node_modules/.pnpm/@tanstack+query-core@5.104.0/node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/suspense.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/useQuery.js","../../../../node_modules/.pnpm/@tanstack+react-query@5.104.0_react@19.3.0/node_modules/@tanstack/react-query/build/modern/useMutation.js","../../../../node_modules/.pnpm/use-sync-external-store@1.7.0_react@19.3.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.7.0_react@19.3.0/node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/.pnpm/use-sync-external-store@1.7.0_react@19.3.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.7.0_react@19.3.0/node_modules/use-sync-external-store/shim/with-selector.js","../../../../packages/client/src/admin/paths.ts","../../../../packages/client/src/admin/query.ts","../../../../packages/client/src/admin/appUsers.ts","../../../../packages/client/src/admin/assist.ts","../../../../packages/client/src/admin/changeSets.ts","../../../../packages/client/src/admin/contentQuery.ts","../../../../packages/client/src/admin/content.ts","../../../../packages/client/src/admin/editing.ts","../../../../packages/client/src/admin/media.ts","../../../../packages/client/src/admin/publishing.ts","../../../../packages/client/src/admin/schema.ts","../../../../packages/client/src/admin/sites.ts","../../../../packages/client/src/admin/usage.ts","../../../../packages/client/src/admin/index.ts","../../../../packages/client/src/appAuth/index.ts","../../../../packages/client/src/nextCache.ts","../../../../packages/client/src/delivery.ts","../../../../packages/client/src/siteDelivery.ts","../../../../packages/client/src/snapshots.ts","../../../../packages/client/src/deliveryClient.ts","../../../../packages/client/src/errors.ts","../../../../packages/client/src/site.ts","../../../../packages/client/src/request.ts","../../../../packages/client/src/client.ts","../../src/api/queryKeys.ts","../../../../node_modules/.pnpm/react-i18next@17.0.15_i18next@26.4.2_typescript@6.0.3__react-dom@19.3.0_react@19.3.0__react@19.3.0_typescript@6.0.3/node_modules/react-i18next/dist/es/utils.js","../../../../node_modules/.pnpm/react-i18next@17.0.15_i18next@26.4.2_typescript@6.0.3__react-dom@19.3.0_react@19.3.0__react@19.3.0_typescript@6.0.3/node_modules/react-i18next/dist/es/unescape.js","../../../../node_modules/.pnpm/react-i18next@17.0.15_i18next@26.4.2_typescript@6.0.3__react-dom@19.3.0_react@19.3.0__react@19.3.0_typescript@6.0.3/node_modules/react-i18next/dist/es/defaults.js","../../../../node_modules/.pnpm/react-i18next@17.0.15_i18next@26.4.2_typescript@6.0.3__react-dom@19.3.0_react@19.3.0__react@19.3.0_typescript@6.0.3/node_modules/react-i18next/dist/es/i18nInstance.js","../../../../node_modules/.pnpm/react-i18next@17.0.15_i18next@26.4.2_typescript@6.0.3__react-dom@19.3.0_react@19.3.0__react@19.3.0_typescript@6.0.3/node_modules/react-i18next/dist/es/context.js","../../../../node_modules/.pnpm/react-i18next@17.0.15_i18next@26.4.2_typescript@6.0.3__react-dom@19.3.0_react@19.3.0__react@19.3.0_typescript@6.0.3/node_modules/react-i18next/dist/es/useTranslation.js","../../../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.3.0_react@19.3.0_use-sync-external-store@1.7.0_react@19.3.0_/node_modules/zustand/esm/middleware.mjs","../../src/helpers/safeStorage.ts","../../src/app/basePath.ts","../../src/app/sitePaths.ts","../../src/app/currentSite.ts","../../../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.3.0_react@19.3.0_use-sync-external-store@1.7.0_react@19.3.0_/node_modules/zustand/esm/vanilla.mjs","../../../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.3.0_react@19.3.0_use-sync-external-store@1.7.0_react@19.3.0_/node_modules/zustand/esm/react.mjs","../../src/stores/session.ts","../../src/api/client.ts","../../src/api/csrf.ts","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/build/defaultAttributes.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/context.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/Icon.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/loader-circle.mjs","../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../../node_modules/.pnpm/tailwind-merge@3.7.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/helpers/cn.ts"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/QueryClientProvider.tsx\n/**\n* The context that `useQueryClient` reads from. `QueryClientProvider` is the normal way to set it.\n*/\nconst QueryClientContext = React.createContext(void 0);\n/**\n* The `useQueryClient` hook returns the current `QueryClient` instance.\n*\n* @param queryClient - Use this to use a custom `QueryClient`. Otherwise, the one from the nearest context will\n* be used.\n* @returns The current `QueryClient` instance.\n* @throws If no `queryClient` argument is passed and no `QueryClientProvider` is found in the component tree.\n*/\nconst useQueryClient = (queryClient) => {\n\tconst client = React.useContext(QueryClientContext);\n\tif (queryClient) return queryClient;\n\tif (!client) throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n\treturn client;\n};\n/**\n* Use the `QueryClientProvider` component to connect and provide a `QueryClient` to your application. Also\n* calls `client.mount()`/`client.unmount()` as this component mounts/unmounts, which subscribes the client to\n* focus/online events (resuming any paused mutations and refetching as needed when the app regains focus or\n* comes back online).\n*\n* @returns The provided `children`, wrapped so they can read the `QueryClient` via `useQueryClient`.\n*\n* @example\n* ```tsx\n* import { QueryClient, QueryClientProvider } from '@tanstack/react-query'\n*\n* const queryClient = new QueryClient()\n*\n* function App() {\n* return <QueryClientProvider client={queryClient}>...</QueryClientProvider>\n* }\n* ```\n*/\nconst QueryClientProvider = ({ client, children }) => {\n\tReact.useEffect(() => {\n\t\tclient.mount();\n\t\treturn () => {\n\t\t\tclient.unmount();\n\t\t};\n\t}, [client]);\n\treturn /* @__PURE__ */ jsx(QueryClientContext.Provider, {\n\t\tvalue: client,\n\t\tchildren\n\t});\n};\n//#endregion\nexport { QueryClientContext, QueryClientProvider, useQueryClient };\n\n//# sourceMappingURL=QueryClientProvider.js.map","//#region src/timeoutManager.ts\nconst defaultTimeoutProvider = {\n\tsetTimeout: (callback, delay) => setTimeout(callback, delay),\n\tclearTimeout: (timeoutId) => clearTimeout(timeoutId),\n\tsetInterval: (callback, delay) => setInterval(callback, delay),\n\tclearInterval: (intervalId) => clearInterval(intervalId)\n};\n/**\n* Allows customization of how timeouts are created.\n*\n* @tanstack/query-core makes liberal use of timeouts to implement `staleTime`\n* and `gcTime`. The default TimeoutManager provider uses the platform's global\n* `setTimeout` implementation, which is known to have scalability issues with\n* thousands of timeouts on the event loop.\n*\n* If you hit this limitation, consider providing a custom TimeoutProvider that\n* coalesces timeouts.\n*/\nvar TimeoutManager = class {\n\t#provider = defaultTimeoutProvider;\n\t#providerCalled = false;\n\t/**\n\t* `setTimeoutProvider` can be used to set a custom implementation of the\n\t* `setTimeout`, `clearTimeout`, `setInterval`, `clearInterval` functions,\n\t* called a `TimeoutProvider`.\n\t*\n\t* This may be useful if you notice event loop performance issues with\n\t* thousands of queries. A custom TimeoutProvider could also support timer\n\t* delays longer than the global `setTimeout` maximum delay value of about\n\t* 24 days.\n\t*\n\t* It is important to call `setTimeoutProvider` before creating a\n\t* QueryClient or queries, so that the same provider is used consistently\n\t* for all timers in the application, since different TimeoutProviders\n\t* cannot cancel each others' timers.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager, QueryClient } from '@tanstack/query-core'\n\t* import { CustomTimeoutProvider } from './CustomTimeoutProvider'\n\t*\n\t* timeoutManager.setTimeoutProvider(new CustomTimeoutProvider())\n\t*\n\t* export const queryClient = new QueryClient()\n\t* ```\n\t*/\n\tsetTimeoutProvider(provider) {\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (this.#providerCalled && provider !== this.#provider) console.error(`[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`, {\n\t\t\t\tprevious: this.#provider,\n\t\t\t\tprovider\n\t\t\t});\n\t\t}\n\t\tthis.#provider = provider;\n\t\tif (process.env.NODE_ENV !== \"production\") this.#providerCalled = false;\n\t}\n\t/**\n\t* `setTimeout` schedules a callback to run after approximately `delay`\n\t* milliseconds, like the global `setTimeout` function. The callback can be\n\t* canceled with `clearTimeout`.\n\t*\n\t* It returns a timer ID, which may be a number or an object that can be\n\t* coerced to a number via `Symbol.toPrimitive`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const timeoutId = timeoutManager.setTimeout(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t*\n\t* const timeoutIdNumber: number = Number(timeoutId)\n\t* ```\n\t*/\n\tsetTimeout(callback, delay) {\n\t\tif (process.env.NODE_ENV !== \"production\") this.#providerCalled = true;\n\t\treturn this.#provider.setTimeout(callback, delay);\n\t}\n\t/**\n\t* `clearTimeout` cancels a timeout callback scheduled with `setTimeout`,\n\t* like the global `clearTimeout` function. It should be called with a\n\t* timer ID returned by `setTimeout`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const timeoutId = timeoutManager.setTimeout(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t*\n\t* timeoutManager.clearTimeout(timeoutId)\n\t* ```\n\t*/\n\tclearTimeout(timeoutId) {\n\t\tthis.#provider.clearTimeout(timeoutId);\n\t}\n\t/**\n\t* `setInterval` schedules a callback to be called approximately every\n\t* `delay` milliseconds, like the global `setInterval` function.\n\t*\n\t* Like `setTimeout`, it returns a timer ID, which may be a number or an\n\t* object that can be coerced to a number via `Symbol.toPrimitive`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const intervalId = timeoutManager.setInterval(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t* ```\n\t*/\n\tsetInterval(callback, delay) {\n\t\tif (process.env.NODE_ENV !== \"production\") this.#providerCalled = true;\n\t\treturn this.#provider.setInterval(callback, delay);\n\t}\n\t/**\n\t* `clearInterval` can be used to cancel an interval, like the global\n\t* `clearInterval` function. It should be called with an interval ID\n\t* returned by `setInterval`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const intervalId = timeoutManager.setInterval(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t*\n\t* timeoutManager.clearInterval(intervalId)\n\t* ```\n\t*/\n\tclearInterval(intervalId) {\n\t\tthis.#provider.clearInterval(intervalId);\n\t}\n};\n/**\n* Singleton instance of {@link TimeoutManager}, used throughout TanStack Query to schedule and cancel timers.\n*/\nconst timeoutManager = new TimeoutManager();\n/**\n* In many cases code wants to delay to the next event loop tick; this is not\n* mediated by {@link timeoutManager}.\n*\n* This function is provided to make auditing the `tanstack/query-core` for\n* incorrect use of system `setTimeout` easier.\n*/\nfunction systemSetTimeoutZero(callback) {\n\tsetTimeout(callback, 0);\n}\n//#endregion\nexport { TimeoutManager, defaultTimeoutProvider, systemSetTimeoutZero, timeoutManager };\n\n//# sourceMappingURL=timeoutManager.js.map","import { timeoutManager } from \"./timeoutManager.js\";\n//#region src/utils.ts\n/** @deprecated\n* use `environmentManager.isServer()` instead.\n*/\nconst isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {}\nfunction functionalUpdate(updater, input) {\n\treturn typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n\treturn typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n\treturn Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveQueryValue(value, query) {\n\treturn typeof value === \"function\" ? value(query) : value;\n}\n/**\n* Checks whether a query matches the given {@link QueryFilters}.\n* Every filter that is specified must match; filters that are left unspecified are ignored.\n*\n* @example\n* ```ts\n* const queryCache = queryClient.getQueryCache()\n*\n* const matchingQueries = queryCache\n* .getAll()\n* .filter((query) => matchQuery({ queryKey: ['posts'] }, query))\n* ```\n*/\nfunction matchQuery(filters, query) {\n\tconst { type = \"all\", exact, fetchStatus, predicate, queryKey, stale } = filters;\n\tif (queryKey) {\n\t\tif (exact) {\n\t\t\tif (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) return false;\n\t\t} else if (!partialMatchKey(query.queryKey, queryKey)) return false;\n\t}\n\tif (type !== \"all\") {\n\t\tconst isActive = query.isActive();\n\t\tif (type === \"active\" && !isActive) return false;\n\t\tif (type === \"inactive\" && isActive) return false;\n\t}\n\tif (typeof stale === \"boolean\" && query.isStale() !== stale) return false;\n\tif (fetchStatus && fetchStatus !== query.state.fetchStatus) return false;\n\tif (predicate && !predicate(query)) return false;\n\treturn true;\n}\n/**\n* Checks whether a mutation matches the given {@link MutationFilters}.\n* Every filter that is specified must match; filters that are left unspecified are ignored.\n* If a `mutationKey` filter is provided but the mutation has no `mutationKey` of its own, it does not match.\n*\n* @example\n* ```ts\n* const mutationCache = queryClient.getMutationCache()\n*\n* const matchingMutations = mutationCache\n* .getAll()\n* .filter((mutation) => matchMutation({ mutationKey: ['addPost'] }, mutation))\n* ```\n*/\nfunction matchMutation(filters, mutation) {\n\tconst { exact, status, predicate, mutationKey } = filters;\n\tif (mutationKey) {\n\t\tif (!mutation.options.mutationKey) return false;\n\t\tif (exact) {\n\t\t\tif (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) return false;\n\t\t} else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) return false;\n\t}\n\tif (status && mutation.state.status !== status) return false;\n\tif (predicate && !predicate(mutation)) return false;\n\treturn true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n\treturn (options?.queryKeyHashFn || hashKey)(queryKey);\n}\n/**\n* Default query & mutation keys hash function.\n* Hashes the value into a stable hash.\n*\n* @example\n* ```ts\n* // Object keys are sorted, so key order doesn't affect the hash:\n* hashKey(['todos', { page: 1, filter: 'done' }]) // === '[\"todos\",{\"filter\":\"done\",\"page\":1}]'\n* ```\n*/\nfunction hashKey(queryKey) {\n\treturn JSON.stringify(queryKey, (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n\t\tresult[key] = val[key];\n\t\treturn result;\n\t}, {}) : val);\n}\nfunction partialMatchKey(a, b) {\n\tif (a === b) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (a && b && typeof a === \"object\" && typeof b === \"object\") {\n\t\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\t\tif (b.length > a.length) return false;\n\t\t\tfor (let i = 0; i < b.length; i++) if (!partialMatchKey(a[i], b[i])) return false;\n\t\t\treturn true;\n\t\t}\n\t\tconst bKeys = Object.keys(b);\n\t\tfor (const key of bKeys) if (!partialMatchKey(a[key], b[key])) return false;\n\t\treturn true;\n\t}\n\treturn false;\n}\nconst hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n\tif (a === b) return a;\n\tif (depth > 500) return b;\n\tconst array = isPlainArray(a) && isPlainArray(b);\n\tif (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n\tconst aSize = (array ? a : Object.keys(a)).length;\n\tconst bItems = array ? b : Object.keys(b);\n\tconst bSize = bItems.length;\n\tconst copy = array ? new Array(bSize) : {};\n\tlet equalItems = 0;\n\tfor (let i = 0; i < bSize; i++) {\n\t\tconst key = array ? i : bItems[i];\n\t\tconst aItem = a[key];\n\t\tconst bItem = b[key];\n\t\tif (aItem === bItem) {\n\t\t\tcopy[key] = aItem;\n\t\t\tif (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n\t\t\tcopy[key] = bItem;\n\t\t\tcontinue;\n\t\t}\n\t\tconst v = replaceEqualDeep(aItem, bItem, depth + 1);\n\t\tcopy[key] = v;\n\t\tif (v === aItem) equalItems++;\n\t}\n\treturn aSize === bSize && equalItems === aSize ? a : copy;\n}\n/**\n* Shallow compare objects.\n*/\nfunction shallowEqualObjects(a, b) {\n\tif (!b || Object.keys(a).length !== Object.keys(b).length) return false;\n\tfor (const key in a) if (a[key] !== b[key]) return false;\n\treturn true;\n}\nfunction isPlainArray(value) {\n\treturn Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n\tif (!hasObjectPrototype(o)) return false;\n\tconst objectPrototype = Object.getPrototypeOf(o);\n\tconst ctor = objectPrototype?.constructor;\n\tif (ctor === void 0) return true;\n\tif (typeof ctor !== \"function\") return false;\n\tconst prot = ctor.prototype;\n\tif (!hasObjectPrototype(prot)) return false;\n\tif (!prot.hasOwnProperty(\"isPrototypeOf\")) return false;\n\tif (objectPrototype !== Object.prototype) return false;\n\treturn true;\n}\nfunction hasObjectPrototype(o) {\n\treturn Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n\treturn new Promise((resolve) => {\n\t\ttimeoutManager.setTimeout(resolve, timeout);\n\t});\n}\nfunction replaceData(prevData, data, options) {\n\tif (typeof options.structuralSharing === \"function\") return options.structuralSharing(prevData, data);\n\telse if (options.structuralSharing !== false) {\n\t\tif (process.env.NODE_ENV !== \"production\") try {\n\t\t\treturn replaceEqualDeep(prevData, data);\n\t\t} catch (error) {\n\t\t\tconsole.error(`Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`);\n\t\t\tthrow error;\n\t\t}\n\t\treturn replaceEqualDeep(prevData, data);\n\t}\n\treturn data;\n}\n/**\n* Intended to be passed as a query's `placeholderData` option, for example\n* `placeholderData: keepPreviousData`. Instead of resetting the query's data to `undefined` while a new\n* query key is fetching, it keeps displaying the previously fetched data until the new data arrives.\n*\n* @example\n* ```ts\n* new QueryObserver(queryClient, {\n* queryKey: ['posts', page],\n* queryFn: () => fetchPosts(page),\n* placeholderData: keepPreviousData,\n* })\n* ```\n*/\nfunction keepPreviousData(previousData) {\n\treturn previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n\tconst newItems = [...items, item];\n\treturn max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n\tconst newItems = [item, ...items];\n\treturn max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\n/**\n* Sentinel value that can be passed as a query's `queryFn` to conditionally disable the query (equivalent\n* to `enabled: false`) while preserving full type inference for the query's data. Unlike `enabled: false`,\n* a query disabled via `skipToken` cannot be triggered with `refetch`.\n*\n* @example\n* ```ts\n* new QueryObserver(queryClient, {\n* queryKey: ['post', postId],\n* queryFn: postId != null ? () => fetchPost(postId) : skipToken,\n* })\n* ```\n*/\nconst skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (options.queryFn === skipToken) console.error(`Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`);\n\t}\n\tif (!options.queryFn && fetchOptions?.initialPromise) return () => fetchOptions.initialPromise;\n\tif (!options.queryFn || options.queryFn === skipToken) return () => Promise.reject(/* @__PURE__ */ new Error(`Missing queryFn: '${options.queryHash}'`));\n\treturn options.queryFn;\n}\n/**\n* Resolves a `throwOnError` option to a boolean.\n* If `throwOnError` is a function, it is called with `params` (e.g. the error and, depending on the caller,\n* additional context such as the query or mutation) and its result is returned, allowing the throwing\n* behavior to be decided per error. Otherwise, `throwOnError` itself is coerced to a boolean (`undefined`\n* resolves to `false`).\n*\n* @example\n* ```ts\n* const throwOnError =\n* query.state.error && typeof options.throwOnError === 'function'\n* ? shouldThrowError(options.throwOnError, [query.state.error, query])\n* : options.throwOnError\n* ```\n*/\nfunction shouldThrowError(throwOnError, params) {\n\tif (typeof throwOnError === \"function\") return throwOnError(...params);\n\treturn !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n\tlet consumed = false;\n\tlet signal;\n\tObject.defineProperty(object, \"signal\", {\n\t\tenumerable: true,\n\t\tget: () => {\n\t\t\tsignal ??= getSignal();\n\t\t\tif (consumed) return signal;\n\t\t\tconsumed = true;\n\t\t\tif (signal.aborted) onCancelled();\n\t\t\telse signal.addEventListener(\"abort\", onCancelled, { once: true });\n\t\t\treturn signal;\n\t\t}\n\t});\n\treturn object;\n}\n//#endregion\nexport { addConsumeAwareSignal, addToEnd, addToStart, ensureQueryFn, functionalUpdate, hashKey, hashQueryKeyByOptions, isPlainArray, isPlainObject, isServer, isValidTimeout, keepPreviousData, matchMutation, matchQuery, noop, partialMatchKey, replaceData, replaceEqualDeep, resolveQueryValue, shallowEqualObjects, shouldThrowError, skipToken, sleep, timeUntilStale };\n\n//# sourceMappingURL=utils.js.map","import { isServer as isServer$1 } from \"./utils.js\";\n//#region src/environmentManager.ts\nlet isServerFn = () => isServer$1;\n/**\n* Returns whether the current runtime should be treated as a server environment.\n*/\nconst isServer = () => isServerFn();\n/**\n* Manages how TanStack Query detects whether the current runtime should be treated as\n* server-side, which disables scheduling refetch timers and changes the default `retry` count\n* and `gcTime`. By default, the detection treats a missing `window` (or the presence of a\n* `Deno` global) as server.\n*\n* Override this for runtimes where that default detection would give the wrong answer — for\n* example, a Service Worker, where `window` is undefined even though the environment should\n* behave like a client.\n*\n* @example\n* ```ts\n* import { environmentManager } from '@tanstack/query-core'\n*\n* environmentManager.setIsServer(() => false)\n* ```\n*/\nconst environmentManager = {\n\tisServer,\n\t/**\n\t* Overrides the server check globally.\n\t*/\n\tsetIsServer(isServerValue) {\n\t\tisServerFn = isServerValue;\n\t}\n};\n//#endregion\nexport { environmentManager, isServer };\n\n//# sourceMappingURL=environmentManager.js.map","//#region src/subscribable.ts\n/**\n* The base class behind everything in Query that you can subscribe to: `QueryCache`, `MutationCache`,\n* the observers, and the `FocusManager`/`OnlineManager` behind `focusManager` and `onlineManager`.\n* Subclasses decide what a listener receives and when it is called.\n*/\nvar Subscribable = class {\n\tconstructor() {\n\t\tthis.listeners = /* @__PURE__ */ new Set();\n\t\tthis.subscribe = this.subscribe.bind(this);\n\t}\n\t/**\n\t* Registers a listener to be called on every update this object notifies about. Returns a function\n\t* that removes the listener again — call it to stop listening. The base class never drops a listener\n\t* on its own, though some subclasses clear all of theirs in `destroy()`.\n\t* @param listener - Called on each update, with whatever the subclass passes to its subscribers.\n\t* @example\n\t* ```ts\n\t* const unsubscribe = subscribable.subscribe(() => {\n\t* // react to the update\n\t* })\n\t*\n\t* unsubscribe()\n\t* ```\n\t*/\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\tthis.onSubscribe();\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t\tthis.onUnsubscribe();\n\t\t};\n\t}\n\t/**\n\t* Returns `true` while at least one listener is registered, `false` once they have all unsubscribed.\n\t*/\n\thasListeners() {\n\t\treturn this.listeners.size > 0;\n\t}\n\tonSubscribe() {}\n\tonUnsubscribe() {}\n};\n//#endregion\nexport { Subscribable };\n\n//# sourceMappingURL=subscribable.js.map","import { Subscribable } from \"./subscribable.js\";\n//#region src/focusManager.ts\n/**\n* The `FocusManager` manages the focus state within TanStack Query.\n*\n* It can be used to change the default event listeners or to manually change the focus state.\n*/\nvar FocusManager = class extends Subscribable {\n\t#focused;\n\t#cleanup;\n\t#setup;\n\tconstructor() {\n\t\tsuper();\n\t\tthis.#setup = (onFocus) => {\n\t\t\tif (typeof window !== \"undefined\" && window.addEventListener) {\n\t\t\t\tconst listener = () => onFocus();\n\t\t\t\twindow.addEventListener(\"visibilitychange\", listener, false);\n\t\t\t\treturn () => {\n\t\t\t\t\twindow.removeEventListener(\"visibilitychange\", listener);\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tonSubscribe() {\n\t\tif (!this.#cleanup) this.setEventListener(this.#setup);\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) {\n\t\t\tthis.#cleanup?.();\n\t\t\tthis.#cleanup = void 0;\n\t\t}\n\t}\n\t/**\n\t* `setEventListener` can be used to set a custom event listener that will\n\t* be used to determine the focus state. The provided `setup` function\n\t* receives a `setFocused` callback: call it with a `boolean` to manually\n\t* set the focus state, or with no arguments to re-evaluate the current\n\t* focus state and notify subscribers.\n\t*\n\t* @example\n\t* ```ts\n\t* import { focusManager } from '@tanstack/query-core'\n\t*\n\t* focusManager.setEventListener((handleFocus) => {\n\t* const listener = () => handleFocus()\n\t* // Listen to visibilitychange\n\t* if (typeof window !== 'undefined' && window.addEventListener) {\n\t* window.addEventListener('visibilitychange', listener, false)\n\t* }\n\t*\n\t* return () => {\n\t* // Be sure to unsubscribe if a new handler is set\n\t* window.removeEventListener('visibilitychange', listener)\n\t* }\n\t* })\n\t* ```\n\t*/\n\tsetEventListener(setup) {\n\t\tthis.#setup = setup;\n\t\tthis.#cleanup?.();\n\t\tthis.#cleanup = setup((focused) => {\n\t\t\tif (typeof focused === \"boolean\") this.setFocused(focused);\n\t\t\telse this.onFocus();\n\t\t});\n\t}\n\t/**\n\t* `setFocused` can be used to manually set the focus state. Set `undefined`\n\t* to fall back to the default focus check.\n\t*\n\t* @example\n\t* ```ts\n\t* import { focusManager } from '@tanstack/query-core'\n\t*\n\t* // Set focused\n\t* focusManager.setFocused(true)\n\t*\n\t* // Set unfocused\n\t* focusManager.setFocused(false)\n\t*\n\t* // Fallback to the default focus check\n\t* focusManager.setFocused(undefined)\n\t* ```\n\t*/\n\tsetFocused(focused) {\n\t\tif (this.#focused !== focused) {\n\t\t\tthis.#focused = focused;\n\t\t\tthis.onFocus();\n\t\t}\n\t}\n\t/**\n\t* `onFocus` notifies all subscribed listeners with the current focus state.\n\t*/\n\tonFocus() {\n\t\tconst isFocused = this.isFocused();\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistener(isFocused);\n\t\t});\n\t}\n\t/**\n\t* `isFocused` can be used to get the current focus state.\n\t*/\n\tisFocused() {\n\t\tif (typeof this.#focused === \"boolean\") return this.#focused;\n\t\treturn globalThis.document?.visibilityState !== \"hidden\";\n\t}\n};\n/**\n* Singleton instance of {@link FocusManager}, used to manage and observe the focus state within TanStack Query.\n*/\nconst focusManager = new FocusManager();\n//#endregion\nexport { FocusManager, focusManager };\n\n//# sourceMappingURL=focusManager.js.map","import { systemSetTimeoutZero } from \"./timeoutManager.js\";\n//#region src/notifyManager.ts\n/**\n* Default scheduling function used by the notify manager.\n* Schedules the callback with the system's `setTimeout(callback, 0)`.\n*/\nconst defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n\tlet queue = [];\n\tlet transactions = 0;\n\tlet notifyFn = (callback) => {\n\t\tcallback();\n\t};\n\tlet batchNotifyFn = (callback) => {\n\t\tcallback();\n\t};\n\tlet scheduleFn = defaultScheduler;\n\tconst schedule = (callback) => {\n\t\tif (transactions) queue.push(callback);\n\t\telse scheduleFn(() => {\n\t\t\tnotifyFn(callback);\n\t\t});\n\t};\n\tconst flush = () => {\n\t\tconst originalQueue = queue;\n\t\tqueue = [];\n\t\tif (originalQueue.length) scheduleFn(() => {\n\t\t\tbatchNotifyFn(() => {\n\t\t\t\toriginalQueue.forEach((callback) => {\n\t\t\t\t\tnotifyFn(callback);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\treturn {\n\t\t/**\n\t\t* Batches all updates scheduled inside the passed callback.\n\t\t* This is mainly used internally to optimize query client updating.\n\t\t* Batches can be nested; the queue is only flushed once the outermost `batch` call finishes.\n\t\t* The return value of `callback` is passed through.\n\t\t*/\n\t\tbatch: (callback) => {\n\t\t\tlet result;\n\t\t\ttransactions++;\n\t\t\ttry {\n\t\t\t\tresult = callback();\n\t\t\t} finally {\n\t\t\t\ttransactions--;\n\t\t\t\tif (!transactions) flush();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t/**\n\t\t* All calls to the wrapped function will be batched.\n\t\t*/\n\t\tbatchCalls: (callback) => {\n\t\t\treturn (...args) => {\n\t\t\t\tschedule(() => {\n\t\t\t\t\tcallback(...args);\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t\t/**\n\t\t* Schedules a function to be run on the next batch.\n\t\t* By default, the batch is run with a `setTimeout`, but this can be configured via `setScheduler`.\n\t\t*/\n\t\tschedule,\n\t\t/**\n\t\t* Use this method to set a custom notify function.\n\t\t* This can be used to for example wrap notifications with `React.act` while running tests.\n\t\t*/\n\t\tsetNotifyFunction: (fn) => {\n\t\t\tnotifyFn = fn;\n\t\t},\n\t\t/**\n\t\t* Use this method to set a custom function to batch notifications together into a single tick.\n\t\t* Framework adapters use this to plug in their own batching primitive, so that a single query\n\t\t* update only triggers one re-render instead of one per subscriber.\n\t\t*\n\t\t* @example\n\t\t* ```ts\n\t\t* import { notifyManager } from '@tanstack/query-core'\n\t\t* import { batch } from 'solid-js'\n\t\t*\n\t\t* notifyManager.setBatchNotifyFunction(batch)\n\t\t* ```\n\t\t*/\n\t\tsetBatchNotifyFunction: (fn) => {\n\t\t\tbatchNotifyFn = fn;\n\t\t},\n\t\t/**\n\t\t* Configures a custom callback that schedules when the next batch runs.\n\t\t* The default behavior is `setTimeout(callback, 0)`.\n\t\t*\n\t\t* @example\n\t\t* ```ts\n\t\t* import { notifyManager } from '@tanstack/query-core'\n\t\t*\n\t\t* // Schedule batches in the next microtask\n\t\t* notifyManager.setScheduler(queueMicrotask)\n\t\t*\n\t\t* // Schedule batches before the next frame is rendered\n\t\t* notifyManager.setScheduler(requestAnimationFrame)\n\t\t*\n\t\t* // Schedule batches some time in the future\n\t\t* notifyManager.setScheduler((cb) => setTimeout(cb, 10))\n\t\t* ```\n\t\t*/\n\t\tsetScheduler: (fn) => {\n\t\t\tscheduleFn = fn;\n\t\t}\n\t};\n}\n/**\n* Handles scheduling and batching callbacks in TanStack Query.\n*/\nconst notifyManager = createNotifyManager();\n//#endregion\nexport { createNotifyManager, defaultScheduler, notifyManager };\n\n//# sourceMappingURL=notifyManager.js.map","import { Subscribable } from \"./subscribable.js\";\n//#region src/onlineManager.ts\n/**\n* The `OnlineManager` manages the online state within TanStack Query. It can\n* be used to change the default event listeners or to manually change the\n* online state.\n*\n* By default, the `onlineManager` assumes an active network connection, and\n* listens to the `online` and `offline` events on the `window` object to\n* detect changes.\n*/\nvar OnlineManager = class extends Subscribable {\n\t#online = true;\n\t#cleanup;\n\t#setup;\n\tconstructor() {\n\t\tsuper();\n\t\tthis.#setup = (onOnline) => {\n\t\t\tif (typeof window !== \"undefined\" && window.addEventListener) {\n\t\t\t\tconst onlineListener = () => onOnline(true);\n\t\t\t\tconst offlineListener = () => onOnline(false);\n\t\t\t\twindow.addEventListener(\"online\", onlineListener, false);\n\t\t\t\twindow.addEventListener(\"offline\", offlineListener, false);\n\t\t\t\treturn () => {\n\t\t\t\t\twindow.removeEventListener(\"online\", onlineListener);\n\t\t\t\t\twindow.removeEventListener(\"offline\", offlineListener);\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tonSubscribe() {\n\t\tif (!this.#cleanup) this.setEventListener(this.#setup);\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) {\n\t\t\tthis.#cleanup?.();\n\t\t\tthis.#cleanup = void 0;\n\t\t}\n\t}\n\t/**\n\t* `setEventListener` can be used to set a custom event listener that will\n\t* be used to determine the online state. The provided `setup` function\n\t* receives a `setOnline` callback that should be called with a `boolean`\n\t* whenever the online state changes.\n\t*\n\t* @example\n\t* ```ts\n\t* import NetInfo from '@react-native-community/netinfo'\n\t* import { onlineManager } from '@tanstack/query-core'\n\t*\n\t* onlineManager.setEventListener((setOnline) => {\n\t* return NetInfo.addEventListener((state) => {\n\t* setOnline(!!state.isConnected)\n\t* })\n\t* })\n\t* ```\n\t*/\n\tsetEventListener(setup) {\n\t\tthis.#setup = setup;\n\t\tthis.#cleanup?.();\n\t\tthis.#cleanup = setup(this.setOnline.bind(this));\n\t}\n\t/**\n\t* `setOnline` can be used to manually set the online state.\n\t*\n\t* @example\n\t* ```ts\n\t* import { onlineManager } from '@tanstack/query-core'\n\t*\n\t* // Set to online\n\t* onlineManager.setOnline(true)\n\t*\n\t* // Set to offline\n\t* onlineManager.setOnline(false)\n\t* ```\n\t*/\n\tsetOnline(online) {\n\t\tif (this.#online !== online) {\n\t\t\tthis.#online = online;\n\t\t\tthis.listeners.forEach((listener) => {\n\t\t\t\tlistener(online);\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* `isOnline` can be used to get the current online state.\n\t*/\n\tisOnline() {\n\t\treturn this.#online;\n\t}\n};\n/**\n* Singleton instance of {@link OnlineManager}, used to manage and observe the online state within TanStack Query.\n*/\nconst onlineManager = new OnlineManager();\n//#endregion\nexport { OnlineManager, onlineManager };\n\n//# sourceMappingURL=onlineManager.js.map","import { noop, sleep } from \"./utils.js\";\nimport { isServer } from \"./environmentManager.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\n//#region src/retryer.ts\nfunction defaultRetryDelay(failureCount) {\n\treturn Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n\treturn (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\n/**\n* The error thrown by a `Retryer` (and surfaced to `query.promise`/`mutation`) when a fetch is cancelled, e.g. via\n* `query.cancel()`. `revert`, if `true`, tells the caller to restore the state the query was in before the fetch\n* started instead of surfacing the error. `silent`, if `true`, tells the caller to suppress this error and instead\n* resolve with the promise of the fetch that triggered the cancellation.\n* @example\n* ```ts\n* query.cancel()\n*\n* try {\n* await query.promise\n* } catch (error) {\n* if (error instanceof CancelledError) {\n* // the fetch was cancelled, e.g. via `query.cancel()`\n* }\n* }\n* ```\n*/\nvar CancelledError = class extends Error {\n\tconstructor(options) {\n\t\tsuper(\"CancelledError\");\n\t\tthis.revert = options?.revert;\n\t\tthis.silent = options?.silent;\n\t}\n};\n/**\n* @deprecated Use instanceof `CancelledError` instead.\n*/\nfunction isCancelledError(value) {\n\treturn value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n\tlet isRetryCancelled = false;\n\tlet failureCount = 0;\n\tlet continueFn;\n\tlet status = \"pending\";\n\tlet promiseResolve;\n\tlet promiseReject;\n\tconst promise = new Promise((resolve, reject) => {\n\t\tpromiseResolve = resolve;\n\t\tpromiseReject = reject;\n\t});\n\tpromise.catch(noop);\n\tconst isResolved = () => status !== \"pending\";\n\tconst cancel = (cancelOptions) => {\n\t\tif (!isResolved()) {\n\t\t\tconst error = new CancelledError(cancelOptions);\n\t\t\treject(error);\n\t\t\tconfig.onCancel?.(error);\n\t\t}\n\t};\n\tconst cancelRetry = () => {\n\t\tisRetryCancelled = true;\n\t};\n\tconst continueRetry = () => {\n\t\tisRetryCancelled = false;\n\t};\n\tconst canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n\tconst canStart = () => canFetch(config.networkMode) && config.canRun();\n\tconst resolve = (value) => {\n\t\tif (!isResolved()) {\n\t\t\tcontinueFn?.();\n\t\t\tstatus = \"resolved\";\n\t\t\tpromiseResolve(value);\n\t\t}\n\t};\n\tconst reject = (value) => {\n\t\tif (!isResolved()) {\n\t\t\tcontinueFn?.();\n\t\t\tstatus = \"rejected\";\n\t\t\tpromiseReject(value);\n\t\t}\n\t};\n\tconst pause = () => {\n\t\treturn new Promise((continueResolve) => {\n\t\t\tcontinueFn = (value) => {\n\t\t\t\tif (isResolved() || canContinue()) continueResolve(value);\n\t\t\t};\n\t\t\tconfig.onPause?.();\n\t\t}).then(() => {\n\t\t\tcontinueFn = void 0;\n\t\t\tif (!isResolved()) config.onContinue?.();\n\t\t});\n\t};\n\tconst run = () => {\n\t\tif (isResolved()) return;\n\t\tlet promiseOrValue;\n\t\tconst initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n\t\ttry {\n\t\t\tpromiseOrValue = initialPromise ?? config.fn();\n\t\t} catch (error) {\n\t\t\tpromiseOrValue = Promise.reject(error);\n\t\t}\n\t\tPromise.resolve(promiseOrValue).then(resolve).catch((error) => {\n\t\t\tif (isResolved()) return;\n\t\t\tconst retry = config.retry ?? (isServer() ? 0 : 3);\n\t\t\tconst retryDelay = config.retryDelay ?? defaultRetryDelay;\n\t\t\tconst delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n\t\t\tconst shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n\t\t\tif (isRetryCancelled || !shouldRetry) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailureCount++;\n\t\t\tconfig.onFail?.(failureCount, error);\n\t\t\tsleep(delay).then(() => {\n\t\t\t\treturn canContinue() ? void 0 : pause();\n\t\t\t}).then(() => {\n\t\t\t\tif (isRetryCancelled) reject(error);\n\t\t\t\telse run();\n\t\t\t});\n\t\t});\n\t};\n\treturn {\n\t\tpromise,\n\t\tstatus: () => status,\n\t\tcancel,\n\t\tcontinue: () => {\n\t\t\tcontinueFn?.();\n\t\t\treturn promise;\n\t\t},\n\t\tcancelRetry,\n\t\tcontinueRetry,\n\t\tcanStart,\n\t\tstart: () => {\n\t\t\tif (canStart()) run();\n\t\t\telse pause().then(run);\n\t\t\treturn promise;\n\t\t}\n\t};\n}\n//#endregion\nexport { CancelledError, canFetch, createRetryer, isCancelledError };\n\n//# sourceMappingURL=retryer.js.map","import { timeoutManager } from \"./timeoutManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nimport { isServer } from \"./environmentManager.js\";\n//#region src/removable.ts\n/**\n* The base class for cache entries that are garbage collected once nothing is using them —\n* `Query` and `Mutation` both extend it. `gcTime` controls how long an unused entry is kept.\n*/\nvar Removable = class {\n\t#gcTimeout;\n\t/**\n\t* Clears the pending garbage collection timeout, so the entry is no longer scheduled for removal.\n\t* A subclass may override this to release what it holds on to as well — `Query` also cancels any\n\t* in-flight fetch.\n\t*/\n\tdestroy() {\n\t\tthis.clearGcTimeout();\n\t}\n\tscheduleGc() {\n\t\tthis.clearGcTimeout();\n\t\tif (isValidTimeout(this.gcTime)) this.#gcTimeout = timeoutManager.setTimeout(() => {\n\t\t\tthis.optionalRemove();\n\t\t}, this.gcTime);\n\t}\n\tupdateGcTime(newGcTime) {\n\t\tthis.gcTime = Math.max(this.gcTime || 0, newGcTime ?? (isServer() ? Infinity : 3e5));\n\t}\n\tclearGcTimeout() {\n\t\tif (this.#gcTimeout !== void 0) {\n\t\t\ttimeoutManager.clearTimeout(this.#gcTimeout);\n\t\t\tthis.#gcTimeout = void 0;\n\t\t}\n\t}\n};\n//#endregion\nexport { Removable };\n\n//# sourceMappingURL=removable.js.map","import { addConsumeAwareSignal, addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\n//#region src/infiniteQueryBehavior.ts\nfunction infiniteQueryBehavior(pages) {\n\treturn { onFetch: (context, query) => {\n\t\tconst options = context.options;\n\t\tconst direction = context.fetchOptions?.meta?.fetchMore?.direction;\n\t\tconst oldPages = context.state.data?.pages || [];\n\t\tconst oldPageParams = context.state.data?.pageParams || [];\n\t\tlet result = {\n\t\t\tpages: [],\n\t\t\tpageParams: []\n\t\t};\n\t\tlet currentPage = 0;\n\t\tconst fetchFn = async () => {\n\t\t\tlet cancelled = false;\n\t\t\tconst addSignalProperty = (object) => {\n\t\t\t\taddConsumeAwareSignal(object, () => context.signal, () => cancelled = true);\n\t\t\t};\n\t\t\tconst queryFn = ensureQueryFn(context.options, context.fetchOptions);\n\t\t\tconst fetchPage = async (data, param, previous) => {\n\t\t\t\tif (cancelled) return Promise.reject(context.signal.reason);\n\t\t\t\tif (param == null && data.pages.length) return Promise.resolve(data);\n\t\t\t\tconst createQueryFnContext = () => {\n\t\t\t\t\tconst queryFnContext = {\n\t\t\t\t\t\tclient: context.client,\n\t\t\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\t\t\tpageParam: param,\n\t\t\t\t\t\tdirection: previous ? \"backward\" : \"forward\",\n\t\t\t\t\t\tmeta: context.options.meta\n\t\t\t\t\t};\n\t\t\t\t\taddSignalProperty(queryFnContext);\n\t\t\t\t\treturn queryFnContext;\n\t\t\t\t};\n\t\t\t\tconst queryFnContext = createQueryFnContext();\n\t\t\t\tconst page = await queryFn(queryFnContext);\n\t\t\t\tconst { maxPages } = context.options;\n\t\t\t\tconst addTo = previous ? addToStart : addToEnd;\n\t\t\t\treturn {\n\t\t\t\t\tpages: addTo(data.pages, page, maxPages),\n\t\t\t\t\tpageParams: addTo(data.pageParams, param, maxPages)\n\t\t\t\t};\n\t\t\t};\n\t\t\tif (direction && oldPages.length) {\n\t\t\t\tconst previous = direction === \"backward\";\n\t\t\t\tconst pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n\t\t\t\tconst oldData = {\n\t\t\t\t\tpages: oldPages,\n\t\t\t\t\tpageParams: oldPageParams\n\t\t\t\t};\n\t\t\t\tresult = await fetchPage(oldData, pageParamFn(options, oldData), previous);\n\t\t\t} else {\n\t\t\t\tconst remainingPages = pages ?? oldPages.length;\n\t\t\t\tdo {\n\t\t\t\t\tconst param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n\t\t\t\t\tif (currentPage > 0 && param == null) break;\n\t\t\t\t\tresult = await fetchPage(result, param);\n\t\t\t\t\tcurrentPage++;\n\t\t\t\t} while (currentPage < remainingPages);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tif (context.options.persister) context.fetchFn = () => {\n\t\t\treturn context.options.persister?.(fetchFn, {\n\t\t\t\tclient: context.client,\n\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\tmeta: context.options.meta,\n\t\t\t\tsignal: context.signal\n\t\t\t}, query);\n\t\t};\n\t\telse context.fetchFn = fetchFn;\n\t} };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n\tconst lastIndex = pages.length - 1;\n\treturn pages.length > 0 ? options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n\treturn pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\n/**\n* Checks if there is a next page.\n*/\nfunction hasNextPage(options, data) {\n\tif (!data) return false;\n\treturn getNextPageParam(options, data) != null;\n}\n/**\n* Checks if there is a previous page.\n*/\nfunction hasPreviousPage(options, data) {\n\tif (!data || !options.getPreviousPageParam) return false;\n\treturn getPreviousPageParam(options, data) != null;\n}\n//#endregion\nexport { hasNextPage, hasPreviousPage, infiniteQueryBehavior };\n\n//# sourceMappingURL=infiniteQueryBehavior.js.map","import { ensureQueryFn, noop, replaceData, resolveQueryValue, skipToken, timeUntilStale } from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\n//#region src/query.ts\n/**\n* Represents a single cached query. A `Query` holds the query's key, options,\n* state (data/error/status), and the observers currently subscribed to it.\n*\n* Instances are created and managed internally by `QueryCache`; application\n* code typically interacts with queries indirectly through `QueryClient` or\n* a framework hook like `useQuery`. Direct access to a `Query` instance is\n* possible via `queryCache.find()`/`findAll()` for inspecting cache state.\n*\n* @example\n* ```ts\n* const queryCache = queryClient.getQueryCache()\n* const query = queryCache.find({ queryKey: ['posts'] })\n*\n* if (query) {\n* console.log(query.state.dataUpdatedAt)\n* }\n* ```\n*/\nvar Query = class extends Removable {\n\t#queryType;\n\t#initialState;\n\t#revertState;\n\t#cache;\n\t#client;\n\t#retryer;\n\t#defaultOptions;\n\t#abortSignalConsumed;\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.#abortSignalConsumed = false;\n\t\tthis.#defaultOptions = config.defaultOptions;\n\t\tthis.setOptions(config.options);\n\t\tthis.observers = [];\n\t\tthis.#client = config.client;\n\t\tthis.#cache = this.#client.getQueryCache();\n\t\tthis.queryKey = config.queryKey;\n\t\tthis.queryHash = config.queryHash;\n\t\tthis.#initialState = getDefaultState(this.options);\n\t\tthis.state = config.state ?? this.#initialState;\n\t\tthis.scheduleGc();\n\t}\n\t/**\n\t* The `meta` object passed in the query's options, if any.\n\t*/\n\tget meta() {\n\t\treturn this.options.meta;\n\t}\n\t/** @internal */\n\tget queryType() {\n\t\treturn this.#queryType;\n\t}\n\t/**\n\t* The promise for the currently in-flight fetch, if the query is fetching.\n\t* `undefined` when the query is not fetching.\n\t*/\n\tget promise() {\n\t\treturn this.#retryer?.promise;\n\t}\n\t/** @internal */\n\tsetOptions(options) {\n\t\tthis.options = {\n\t\t\t...this.#defaultOptions,\n\t\t\t...options\n\t\t};\n\t\tif (options?._type) this.#queryType = options._type;\n\t\tthis.updateGcTime(this.options.gcTime);\n\t\tif (this.state && this.state.data === void 0) {\n\t\t\tconst defaultState = getDefaultState(this.options);\n\t\t\tif (defaultState.data !== void 0) {\n\t\t\t\tthis.setState(successState(defaultState.data, defaultState.dataUpdatedAt));\n\t\t\t\tthis.#initialState = defaultState;\n\t\t\t}\n\t\t}\n\t}\n\toptionalRemove() {\n\t\tif (!this.observers.length && this.state.fetchStatus === \"idle\") this.#cache.remove(this);\n\t}\n\t/** @internal */\n\tsetData(newData, options) {\n\t\tconst data = replaceData(this.state.data, newData, this.options);\n\t\tthis.#dispatch({\n\t\t\tdata,\n\t\t\ttype: \"success\",\n\t\t\tdataUpdatedAt: options?.updatedAt,\n\t\t\tmanual: options?.manual\n\t\t});\n\t\treturn data;\n\t}\n\t/**\n\t* Merges the given partial state directly into this query's state, notifying observers. Used\n\t* by persistence and broadcast plugins to restore a state snapshot, and by devtools to let a\n\t* user manually trigger a loading/error state or edit the cached data.\n\t*/\n\tsetState(state) {\n\t\tthis.#dispatch({\n\t\t\ttype: \"setState\",\n\t\t\tstate\n\t\t});\n\t}\n\t/**\n\t* Cancels the query's currently in-flight fetch, if any.\n\t* - Returns a promise that resolves once the cancellation has settled.\n\t* - If no fetch is in progress, resolves immediately.\n\t*\n\t* @example\n\t* ```ts\n\t* await query.cancel()\n\t* ```\n\t*/\n\tcancel(options) {\n\t\tconst promise = this.#retryer?.promise;\n\t\tthis.#retryer?.cancel(options);\n\t\treturn promise ? promise.then(noop).catch(noop) : Promise.resolve();\n\t}\n\t/**\n\t* Clears the query's garbage collection timeout and silently cancels any\n\t* in-flight fetch. Called by `QueryCache` when the query is removed from\n\t* the cache.\n\t*\n\t* @see {@link Query#cancel}\n\t*/\n\tdestroy() {\n\t\tsuper.destroy();\n\t\tthis.cancel({ silent: true });\n\t}\n\t/** @internal */\n\tget resetState() {\n\t\treturn this.#initialState;\n\t}\n\t/**\n\t* Resets the query back to its initial state (the state it had when it was\n\t* first created, e.g. any `initialData`), destroying it first to cancel any\n\t* in-flight fetch.\n\t*/\n\treset() {\n\t\tthis.destroy();\n\t\tthis.setState(this.resetState);\n\t}\n\t/**\n\t* Returns `true` if the query has at least one observer for which `enabled`\n\t* does not resolve to `false`.\n\t*/\n\tisActive() {\n\t\treturn this.observers.some((observer) => resolveQueryValue(observer.options.enabled, this) !== false);\n\t}\n\t/**\n\t* Returns `true` if the query is disabled, meaning it will not fetch\n\t* automatically.\n\t* - If the query has observers, it is disabled when none of them are active\n\t* (see `isActive`).\n\t* - If the query has no observers, it is disabled when its `queryFn` is\n\t* `skipToken` or it has never been fetched.\n\t*/\n\tisDisabled() {\n\t\tif (this.getObserversCount() > 0) return !this.isActive();\n\t\treturn this.options.queryFn === skipToken || !this.isFetched();\n\t}\n\t/**\n\t* Returns `true` if the query has been fetched, i.e. it has resolved with\n\t* either data or an error at least once.\n\t*/\n\tisFetched() {\n\t\treturn this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n\t}\n\t/**\n\t* Returns `true` if the query has at least one observer configured with\n\t* `staleTime: 'static'`, meaning it is treated as never stale.\n\t*/\n\tisStatic() {\n\t\tif (this.getObserversCount() > 0) return this.observers.some((observer) => resolveQueryValue(observer.options.staleTime, this) === \"static\");\n\t\treturn false;\n\t}\n\t/**\n\t* Returns `true` if the query is stale.\n\t* - If the query has observers, defers to whether any observer's current\n\t* result reports `isStale` (which accounts for each observer's own\n\t* `staleTime` and `enabled` state).\n\t* - If the query has no observers, it is considered stale when it has no\n\t* data or has been invalidated.\n\t*\n\t* @see {@link Query#isStaleByTime}\n\t* @example\n\t* ```ts\n\t* if (query.isStale()) {\n\t* // refetch or otherwise treat the cached data as outdated\n\t* }\n\t* ```\n\t*/\n\tisStale() {\n\t\tif (this.getObserversCount() > 0) return this.observers.some((observer) => observer.getCurrentResult().isStale);\n\t\treturn this.state.data === void 0 || this.state.isInvalidated;\n\t}\n\t/**\n\t* Returns `true` if the query's data is stale relative to the given\n\t* `staleTime` (defaults to `0`).\n\t* - A query with no data is always stale.\n\t* - `staleTime: 'static'` is never stale.\n\t* - An invalidated query is always stale.\n\t* - Otherwise, staleness is based on elapsed time since `dataUpdatedAt`.\n\t*\n\t* @see {@link Query#isStale}\n\t* @example\n\t* ```ts\n\t* const isStale = query.isStaleByTime(1000 * 60)\n\t* ```\n\t*/\n\tisStaleByTime(staleTime = 0) {\n\t\tif (this.state.data === void 0) return true;\n\t\tif (staleTime === \"static\") return false;\n\t\tif (this.state.isInvalidated) return true;\n\t\treturn !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n\t}\n\t/** @internal */\n\tonFocus() {\n\t\tthis.observers.find((x) => x.shouldFetchOnWindowFocus())?.refetch({ cancelRefetch: false });\n\t\tthis.#retryer?.continue();\n\t}\n\t/** @internal */\n\tonOnline() {\n\t\tthis.observers.find((x) => x.shouldFetchOnReconnect())?.refetch({ cancelRefetch: false });\n\t\tthis.#retryer?.continue();\n\t}\n\t/** @internal */\n\taddObserver(observer) {\n\t\tif (!this.observers.includes(observer)) {\n\t\t\tthis.observers.push(observer);\n\t\t\tthis.clearGcTimeout();\n\t\t\tthis.#cache.notify({\n\t\t\t\ttype: \"observerAdded\",\n\t\t\t\tquery: this,\n\t\t\t\tobserver\n\t\t\t});\n\t\t}\n\t}\n\t/** @internal */\n\tremoveObserver(observer) {\n\t\tconst index = this.observers.indexOf(observer);\n\t\tif (index !== -1) {\n\t\t\tthis.observers.splice(index, 1);\n\t\t\tif (!this.observers.length) {\n\t\t\t\tif (this.#retryer) {\n\t\t\t\t\tif (this.#abortSignalConsumed || this.state.fetchStatus === \"paused\" && this.state.status === \"pending\") this.#retryer.cancel({ revert: true });\n\t\t\t\t\telse this.#retryer.cancelRetry();\n\t\t\t\t}\n\t\t\t\tthis.scheduleGc();\n\t\t\t}\n\t\t\tthis.#cache.notify({\n\t\t\t\ttype: \"observerRemoved\",\n\t\t\t\tquery: this,\n\t\t\t\tobserver\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Returns the number of observers currently subscribed to this query.\n\t*\n\t* @example\n\t* ```ts\n\t* if (query.getObserversCount() === 0) {\n\t* // no component is currently watching this query\n\t* }\n\t* ```\n\t*/\n\tgetObserversCount() {\n\t\treturn this.observers.length;\n\t}\n\t/**\n\t* Marks the query as invalidated, unless it is already invalidated. This\n\t* updates `state.isInvalidated` and notifies observers, but does not by\n\t* itself trigger a refetch.\n\t*\n\t* @example\n\t* ```ts\n\t* query.invalidate()\n\t* ```\n\t*/\n\tinvalidate() {\n\t\tif (!this.state.isInvalidated) this.#dispatch({ type: \"invalidate\" });\n\t}\n\t/**\n\t* Fetches the query, i.e. runs its `queryFn` (through any configured\n\t* retryer/behavior) and updates the query's state with the result.\n\t* - If a fetch is already in flight, returns its promise instead of\n\t* starting a new one, unless `fetchOptions.cancelRefetch` is set and the\n\t* query already has data, in which case the current fetch is silently\n\t* cancelled first.\n\t* - If `options` is passed, it replaces the query's current options\n\t* before fetching.\n\t*/\n\tasync fetch(options, fetchOptions) {\n\t\tif (this.state.fetchStatus !== \"idle\" && this.#retryer?.status() !== \"rejected\") {\n\t\t\tif (this.state.data !== void 0 && fetchOptions?.cancelRefetch) this.cancel({ silent: true });\n\t\t\telse if (this.#retryer) {\n\t\t\t\tthis.#retryer.continueRetry();\n\t\t\t\treturn this.#retryer.promise;\n\t\t\t}\n\t\t}\n\t\tif (options) this.setOptions(options);\n\t\tif (!this.options.queryFn) {\n\t\t\tconst observer = this.observers.find((x) => x.options.queryFn);\n\t\t\tif (observer) this.setOptions(observer.options);\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (!Array.isArray(this.options.queryKey)) console.error(`As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`);\n\t\t}\n\t\tconst abortController = new AbortController();\n\t\tconst addSignalProperty = (object) => {\n\t\t\tObject.defineProperty(object, \"signal\", {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: () => {\n\t\t\t\t\tthis.#abortSignalConsumed = true;\n\t\t\t\t\treturn abortController.signal;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tconst fetchFn = () => {\n\t\t\tconst queryFn = ensureQueryFn(this.options, fetchOptions);\n\t\t\tconst createQueryFnContext = () => {\n\t\t\t\tconst queryFnContext = {\n\t\t\t\t\tclient: this.#client,\n\t\t\t\t\tqueryKey: this.queryKey,\n\t\t\t\t\tmeta: this.meta\n\t\t\t\t};\n\t\t\t\taddSignalProperty(queryFnContext);\n\t\t\t\treturn queryFnContext;\n\t\t\t};\n\t\t\tconst queryFnContext = createQueryFnContext();\n\t\t\tthis.#abortSignalConsumed = false;\n\t\t\tif (this.options.persister) return this.options.persister(queryFn, queryFnContext, this);\n\t\t\treturn queryFn(queryFnContext);\n\t\t};\n\t\tconst createFetchContext = () => {\n\t\t\tconst context = {\n\t\t\t\tfetchOptions,\n\t\t\t\toptions: this.options,\n\t\t\t\tqueryKey: this.queryKey,\n\t\t\t\tclient: this.#client,\n\t\t\t\tstate: this.state,\n\t\t\t\tfetchFn\n\t\t\t};\n\t\t\taddSignalProperty(context);\n\t\t\treturn context;\n\t\t};\n\t\tconst context = createFetchContext();\n\t\t(this.#queryType === \"infinite\" ? infiniteQueryBehavior(this.options.pages) : this.options.behavior)?.onFetch(context, this);\n\t\tthis.#revertState = this.state;\n\t\tif (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) this.#dispatch({\n\t\t\ttype: \"fetch\",\n\t\t\tmeta: context.fetchOptions?.meta\n\t\t});\n\t\tconst retryer = this.#retryer = createRetryer({\n\t\t\tinitialPromise: fetchOptions?.initialPromise,\n\t\t\tfn: context.fetchFn,\n\t\t\tonCancel: (error) => {\n\t\t\t\tif (error instanceof CancelledError && error.revert) this.setState({\n\t\t\t\t\t...this.#revertState,\n\t\t\t\t\tfetchStatus: \"idle\"\n\t\t\t\t});\n\t\t\t\tabortController.abort();\n\t\t\t},\n\t\t\tonFail: (failureCount, error) => {\n\t\t\t\tthis.#dispatch({\n\t\t\t\t\ttype: \"failed\",\n\t\t\t\t\tfailureCount,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t},\n\t\t\tonPause: () => {\n\t\t\t\tthis.#dispatch({ type: \"pause\" });\n\t\t\t},\n\t\t\tonContinue: () => {\n\t\t\t\tthis.#dispatch({ type: \"continue\" });\n\t\t\t},\n\t\t\tretry: context.options.retry,\n\t\t\tretryDelay: context.options.retryDelay,\n\t\t\tnetworkMode: context.options.networkMode,\n\t\t\tcanRun: () => true\n\t\t});\n\t\ttry {\n\t\t\tconst data = await retryer.start();\n\t\t\tif (data === void 0) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.error(`Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`);\n\t\t\t\tthrow new Error(`${this.queryHash} data is undefined`);\n\t\t\t}\n\t\t\tthis.setData(data);\n\t\t\tthis.#cache.config.onSuccess?.(data, this);\n\t\t\tthis.#cache.config.onSettled?.(data, this.state.error, this);\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\tif (error instanceof CancelledError) {\n\t\t\t\tif (error.silent) return this.#retryer.promise;\n\t\t\t\telse if (error.revert) {\n\t\t\t\t\tif (this.state.data === void 0) throw error;\n\t\t\t\t\treturn this.state.data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.#dispatch({\n\t\t\t\ttype: \"error\",\n\t\t\t\terror\n\t\t\t});\n\t\t\tthis.#cache.config.onError?.(error, this);\n\t\t\tthis.#cache.config.onSettled?.(this.state.data, error, this);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (this.#retryer === retryer) this.#retryer = void 0;\n\t\t\tthis.scheduleGc();\n\t\t}\n\t}\n\t#dispatch(action) {\n\t\tconst reducer = (state) => {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase \"failed\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfetchFailureCount: action.failureCount,\n\t\t\t\t\tfetchFailureReason: action.error\n\t\t\t\t};\n\t\t\t\tcase \"pause\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfetchStatus: \"paused\"\n\t\t\t\t};\n\t\t\t\tcase \"continue\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfetchStatus: \"fetching\"\n\t\t\t\t};\n\t\t\t\tcase \"fetch\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\t...fetchState(state.data, this.options),\n\t\t\t\t\tfetchMeta: action.meta ?? null\n\t\t\t\t};\n\t\t\t\tcase \"success\":\n\t\t\t\t\tconst newState = {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t...successState(action.data, action.dataUpdatedAt),\n\t\t\t\t\t\tdataUpdateCount: state.dataUpdateCount + 1,\n\t\t\t\t\t\t...!action.manual && {\n\t\t\t\t\t\t\tfetchStatus: \"idle\",\n\t\t\t\t\t\t\tfetchFailureCount: 0,\n\t\t\t\t\t\t\tfetchFailureReason: null\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tthis.#revertState = action.manual ? newState : void 0;\n\t\t\t\t\treturn newState;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tconst error = action.error;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\terrorUpdateCount: state.errorUpdateCount + 1,\n\t\t\t\t\t\terrorUpdatedAt: Date.now(),\n\t\t\t\t\t\tfetchFailureCount: state.fetchFailureCount + 1,\n\t\t\t\t\t\tfetchFailureReason: error,\n\t\t\t\t\t\tfetchStatus: \"idle\",\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\tisInvalidated: true\n\t\t\t\t\t};\n\t\t\t\tcase \"invalidate\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tisInvalidated: true\n\t\t\t\t};\n\t\t\t\tcase \"setState\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\t...action.state\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tthis.state = reducer(this.state);\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.observers.slice().forEach((observer) => {\n\t\t\t\tobserver.onQueryUpdate();\n\t\t\t});\n\t\t\tthis.#cache.notify({\n\t\t\t\tquery: this,\n\t\t\t\ttype: \"updated\",\n\t\t\t\taction\n\t\t\t});\n\t\t});\n\t}\n};\nfunction fetchState(data, options) {\n\treturn {\n\t\tfetchFailureCount: 0,\n\t\tfetchFailureReason: null,\n\t\tfetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n\t\t...data === void 0 && {\n\t\t\terror: null,\n\t\t\tstatus: \"pending\"\n\t\t}\n\t};\n}\nfunction successState(data, dataUpdatedAt) {\n\treturn {\n\t\tdata,\n\t\tdataUpdatedAt: dataUpdatedAt ?? Date.now(),\n\t\terror: null,\n\t\tisInvalidated: false,\n\t\tstatus: \"success\"\n\t};\n}\nfunction getDefaultState(options) {\n\tconst data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n\tconst hasData = data !== void 0;\n\tconst initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n\treturn {\n\t\tdata,\n\t\tdataUpdateCount: 0,\n\t\tdataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n\t\terror: null,\n\t\terrorUpdateCount: 0,\n\t\terrorUpdatedAt: 0,\n\t\tfetchFailureCount: 0,\n\t\tfetchFailureReason: null,\n\t\tfetchMeta: null,\n\t\tisInvalidated: false,\n\t\tstatus: hasData ? \"success\" : \"pending\",\n\t\tfetchStatus: \"idle\"\n\t};\n}\n//#endregion\nexport { Query, fetchState };\n\n//# sourceMappingURL=query.js.map","import { timeoutManager } from \"./timeoutManager.js\";\nimport { isValidTimeout, noop, replaceData, resolveQueryValue, shallowEqualObjects, timeUntilStale } from \"./utils.js\";\nimport { isServer } from \"./environmentManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\n//#region src/queryObserver.ts\n/**\n* A `QueryObserver` watches a single query in the `QueryCache` and computes a\n* `QueryObserverResult` from its state, recomputing and notifying subscribers\n* whenever the underlying query (or the observer's options) changes. It is\n* the primitive that framework adapters (e.g. `useQuery`) build their hooks\n* on top of, but it can also be used directly to observe and switch between\n* queries outside of any framework.\n*\n* @example\n* ```ts\n* const observer = new QueryObserver(queryClient, {\n* queryKey: ['posts'],\n* queryFn: fetchPosts,\n* })\n*\n* const unsubscribe = observer.subscribe((result) => {\n* console.log(result.data)\n* })\n* ```\n*/\nvar QueryObserver = class extends Subscribable {\n\t#client;\n\t#currentQuery = void 0;\n\t#currentQueryInitialState = void 0;\n\t#currentResult = void 0;\n\t#currentResultState;\n\t#currentResultOptions;\n\t#selectError;\n\t#selectFn;\n\t#selectResult;\n\t#lastQueryWithDefinedData;\n\t#staleTimeoutId;\n\t#refetchIntervalId;\n\t#currentRefetchInterval;\n\t#trackedProps = /* @__PURE__ */ new Set();\n\tconstructor(client, options) {\n\t\tsuper();\n\t\tthis.options = options;\n\t\tthis.#client = client;\n\t\tthis.#selectError = null;\n\t\tthis.bindMethods();\n\t\tthis.setOptions(options);\n\t}\n\tbindMethods() {\n\t\tthis.refetch = this.refetch.bind(this);\n\t}\n\tonSubscribe() {\n\t\tif (this.listeners.size === 1) {\n\t\t\tthis.#currentQuery.addObserver(this);\n\t\t\tif (shouldFetchOnMount(this.#currentQuery, this.options)) this.#executeFetch();\n\t\t\telse this.updateResult();\n\t\t\tthis.#updateTimers();\n\t\t}\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) this.destroy();\n\t}\n\t/**\n\t* Returns whether the observed query is currently stale and configured\n\t* (via the `refetchOnReconnect` option) to refetch when the network\n\t* reconnects.\n\t*/\n\tshouldFetchOnReconnect() {\n\t\treturn shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnReconnect);\n\t}\n\t/**\n\t* Returns whether the observed query is currently stale and configured\n\t* (via the `refetchOnWindowFocus` option) to refetch when the window\n\t* regains focus.\n\t*/\n\tshouldFetchOnWindowFocus() {\n\t\treturn shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnWindowFocus);\n\t}\n\t/**\n\t* Stops observing the current query: clears all listeners, cancels the\n\t* stale and refetch-interval timers, and removes this observer from the\n\t* query it was observing.\n\t*/\n\tdestroy() {\n\t\tthis.listeners = /* @__PURE__ */ new Set();\n\t\tthis.#clearStaleTimeout();\n\t\tthis.#clearRefetchInterval();\n\t\tthis.#currentQuery.removeObserver(this);\n\t}\n\t/**\n\t* Updates the observer's options. This will re-resolve the query being\n\t* observed (switching to a different query if the `queryKey` changed),\n\t* trigger a fetch if the new options require one and the observer has\n\t* subscribers, recompute the current result, and reschedule the stale and\n\t* refetch-interval timers as needed.\n\t*\n\t* @example\n\t* ```ts\n\t* observer.setOptions({ queryKey: ['posts', 1], queryFn: () => fetchPost(1) })\n\t* // later: switch to a different query, reusing the same observer\n\t* observer.setOptions({ queryKey: ['posts', 2], queryFn: () => fetchPost(2) })\n\t* ```\n\t*/\n\tsetOptions(options) {\n\t\tconst prevOptions = this.options;\n\t\tconst prevQuery = this.#currentQuery;\n\t\tthis.options = this.#client.defaultQueryOptions(options);\n\t\tif (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryValue(this.options.enabled, this.#currentQuery) !== \"boolean\") throw new Error(\"Expected enabled to be a boolean or a callback that returns a boolean\");\n\t\tthis.#updateQuery();\n\t\tthis.#currentQuery.setOptions(this.options);\n\t\tif (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) this.#client.getQueryCache().notify({\n\t\t\ttype: \"observerOptionsUpdated\",\n\t\t\tquery: this.#currentQuery,\n\t\t\tobserver: this\n\t\t});\n\t\tconst mounted = this.hasListeners();\n\t\tif (mounted && shouldFetchOptionally(this.#currentQuery, prevQuery, this.options, prevOptions)) this.#executeFetch();\n\t\tthis.updateResult();\n\t\tif (mounted && (this.#currentQuery !== prevQuery || resolveQueryValue(this.options.enabled, this.#currentQuery) !== resolveQueryValue(prevOptions.enabled, this.#currentQuery) || resolveQueryValue(this.options.staleTime, this.#currentQuery) !== resolveQueryValue(prevOptions.staleTime, this.#currentQuery))) this.#updateStaleTimeout();\n\t\tconst nextRefetchInterval = this.#computeRefetchInterval();\n\t\tif (mounted && (this.#currentQuery !== prevQuery || resolveQueryValue(this.options.enabled, this.#currentQuery) !== resolveQueryValue(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) this.#updateRefetchInterval(nextRefetchInterval);\n\t}\n\t/**\n\t* Computes the result the observer would produce for the given (already-defaulted) options\n\t* right now, building the underlying `Query` if it doesn't exist yet, without waiting for a\n\t* subscription callback. Called by framework adapters on every render (e.g. `useQuery`) so the\n\t* returned value is available synchronously, ahead of `setOptions` triggering an actual fetch.\n\t*/\n\tgetOptimisticResult(options) {\n\t\tconst query = this.#client.getQueryCache().build(this.#client, options);\n\t\tconst result = this.createResult(query, options);\n\t\tif (!shallowEqualObjects(this.getCurrentResult(), result)) {\n\t\t\tthis.#currentResult = result;\n\t\t\tthis.#currentResultOptions = this.options;\n\t\t\tthis.#currentResultState = this.#currentQuery.state;\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Returns the most recently computed `QueryObserverResult` for the\n\t* observed query. This is a point-in-time read; to be notified of updates\n\t* as they happen, subscribe to the observer instead (its inherited\n\t* `subscribe` method).\n\t*\n\t* @example\n\t* ```ts\n\t* const result = observer.getCurrentResult()\n\t* console.log(result.status, result.data)\n\t* ```\n\t*/\n\tgetCurrentResult() {\n\t\treturn this.#currentResult;\n\t}\n\t/**\n\t* Wraps a `QueryObserverResult` in a `Proxy` that records which properties are read, via\n\t* {@link QueryObserver#trackProp} (and an optional `onPropTracked` callback). Used by framework\n\t* adapters when `notifyOnChangeProps` is not set, to implement its default \"only re-render on\n\t* properties you actually read\" behavior.\n\t*/\n\ttrackResult(result, onPropTracked) {\n\t\treturn new Proxy(result, { get: (target, key) => {\n\t\t\tthis.trackProp(key);\n\t\t\tonPropTracked?.(key);\n\t\t\treturn Reflect.get(target, key);\n\t\t} });\n\t}\n\t/**\n\t* Records that the given `QueryObserverResult` property was read, so a subsequent update only\n\t* notifies this observer if a tracked property actually changed. Normally called indirectly via\n\t* {@link QueryObserver#trackResult}'s proxy; exposed directly for adapters that track property\n\t* access themselves (e.g. through their own reactivity system) instead of via the proxy.\n\t*/\n\ttrackProp(key) {\n\t\tthis.#trackedProps.add(key);\n\t}\n\t/**\n\t* Returns the `Query` instance this observer is currently observing.\n\t*/\n\tgetCurrentQuery() {\n\t\treturn this.#currentQuery;\n\t}\n\t/**\n\t* Refetches the observed query and returns a promise that resolves with\n\t* the resulting `QueryObserverResult`.\n\t*\n\t* @example\n\t* ```ts\n\t* const result = await observer.refetch({ cancelRefetch: false })\n\t* console.log(result.data)\n\t* ```\n\t*/\n\trefetch({ ...options } = {}) {\n\t\treturn this.fetch({ ...options });\n\t}\n\t/**\n\t* Fetches a query defined by the given options without affecting this\n\t* observer's own tracked query or result, and returns a promise that\n\t* resolves with the `QueryObserverResult` for that fetch. This is useful\n\t* for prefetching data that another observer (e.g. a query about to be\n\t* navigated to) will need, ahead of time.\n\t*\n\t* @example\n\t* ```ts\n\t* const result = await observer.fetchOptimistic({\n\t* queryKey: ['posts', 2],\n\t* queryFn: () => fetchPost(2),\n\t* })\n\t* console.log(result.data)\n\t* ```\n\t*/\n\tfetchOptimistic(options) {\n\t\tconst defaultedOptions = this.#client.defaultQueryOptions(options);\n\t\tconst query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n\t\tlet unsubscribe = () => {};\n\t\tlet resolveEarly;\n\t\tconst cachePromise = new Promise((resolve) => {\n\t\t\tresolveEarly = resolve;\n\t\t\tunsubscribe = this.#client.getQueryCache().subscribe((event) => {\n\t\t\t\tif (event.type === \"updated\" && event.query.queryHash === query.queryHash && query.state.data !== void 0) {\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tresolve(this.createResult(query, defaultedOptions));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn Promise.race([query.fetch().then(() => {\n\t\t\tconst result = this.createResult(query, defaultedOptions);\n\t\t\tresolveEarly?.(result);\n\t\t\treturn result;\n\t\t}).finally(() => {\n\t\t\tunsubscribe();\n\t\t}), cachePromise]);\n\t}\n\tfetch(fetchOptions) {\n\t\treturn this.#executeFetch({\n\t\t\t...fetchOptions,\n\t\t\tcancelRefetch: fetchOptions.cancelRefetch ?? true\n\t\t}).then(() => {\n\t\t\tthis.updateResult();\n\t\t\treturn this.#currentResult;\n\t\t});\n\t}\n\t#executeFetch(fetchOptions) {\n\t\tthis.#updateQuery();\n\t\tlet promise = this.#currentQuery.fetch(this.options, fetchOptions);\n\t\tif (!fetchOptions?.throwOnError) promise = promise.catch(noop);\n\t\treturn promise;\n\t}\n\t#shouldScheduleTimer(timeout) {\n\t\treturn !isServer() && resolveQueryValue(this.options.enabled, this.#currentQuery) !== false && isValidTimeout(timeout);\n\t}\n\t#updateStaleTimeout() {\n\t\tthis.#clearStaleTimeout();\n\t\tconst staleTime = resolveQueryValue(this.options.staleTime, this.#currentQuery);\n\t\tif (this.#currentResult.isStale || !this.#shouldScheduleTimer(staleTime)) return;\n\t\tconst timeout = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime) + 1;\n\t\tthis.#staleTimeoutId = timeoutManager.setTimeout(() => {\n\t\t\tif (!this.#currentResult.isStale) this.updateResult();\n\t\t}, timeout);\n\t}\n\t#computeRefetchInterval() {\n\t\treturn resolveQueryValue(this.options.refetchInterval, this.#currentQuery) ?? false;\n\t}\n\t#updateRefetchInterval(nextInterval) {\n\t\tthis.#clearRefetchInterval();\n\t\tthis.#currentRefetchInterval = nextInterval;\n\t\tif (this.#currentRefetchInterval === 0 || !this.#shouldScheduleTimer(this.#currentRefetchInterval)) return;\n\t\tthis.#refetchIntervalId = timeoutManager.setInterval(() => {\n\t\t\tif (this.options.refetchIntervalInBackground || focusManager.isFocused()) this.#executeFetch();\n\t\t}, this.#currentRefetchInterval);\n\t}\n\t#updateTimers() {\n\t\tthis.#updateStaleTimeout();\n\t\tthis.#updateRefetchInterval(this.#computeRefetchInterval());\n\t}\n\t#clearStaleTimeout() {\n\t\tif (this.#staleTimeoutId !== void 0) {\n\t\t\ttimeoutManager.clearTimeout(this.#staleTimeoutId);\n\t\t\tthis.#staleTimeoutId = void 0;\n\t\t}\n\t}\n\t#clearRefetchInterval() {\n\t\tif (this.#refetchIntervalId !== void 0) {\n\t\t\ttimeoutManager.clearInterval(this.#refetchIntervalId);\n\t\t\tthis.#refetchIntervalId = void 0;\n\t\t}\n\t}\n\tcreateResult(query, options) {\n\t\tconst prevQuery = this.#currentQuery;\n\t\tconst prevOptions = this.options;\n\t\tconst prevResult = this.#currentResult;\n\t\tconst prevResultState = this.#currentResultState;\n\t\tconst prevResultOptions = this.#currentResultOptions;\n\t\tconst queryInitialState = query !== prevQuery ? query.state : this.#currentQueryInitialState;\n\t\tconst { state } = query;\n\t\tlet newState = { ...state };\n\t\tlet isPlaceholderData = false;\n\t\tlet data;\n\t\tif (options._optimisticResults) {\n\t\t\tconst mounted = this.hasListeners();\n\t\t\tconst fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n\t\t\tconst fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n\t\t\tif (fetchOnMount || fetchOptionally) newState = {\n\t\t\t\t...newState,\n\t\t\t\t...fetchState(state.data, query.options)\n\t\t\t};\n\t\t\tif (options._optimisticResults === \"isRestoring\") newState.fetchStatus = \"idle\";\n\t\t}\n\t\tlet { error, errorUpdatedAt, status } = newState;\n\t\tdata = newState.data;\n\t\tlet skipSelect = false;\n\t\tif (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n\t\t\tlet placeholderData;\n\t\t\tif (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n\t\t\t\tplaceholderData = prevResult.data;\n\t\t\t\tskipSelect = true;\n\t\t\t} else placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(this.#lastQueryWithDefinedData?.state.data, this.#lastQueryWithDefinedData) : options.placeholderData;\n\t\t\tif (placeholderData !== void 0) {\n\t\t\t\tstatus = \"success\";\n\t\t\t\tdata = replaceData(prevResult?.data, placeholderData, options);\n\t\t\t\tisPlaceholderData = true;\n\t\t\t}\n\t\t}\n\t\tif (options.select && data !== void 0 && !skipSelect) {\n\t\t\tif (prevResult && data === prevResultState?.data && options.select === this.#selectFn) data = this.#selectResult;\n\t\t\telse try {\n\t\t\t\tthis.#selectFn = options.select;\n\t\t\t\tdata = options.select(data);\n\t\t\t\tdata = replaceData(prevResult?.data, data, options);\n\t\t\t\tthis.#selectResult = data;\n\t\t\t\tthis.#selectError = null;\n\t\t\t} catch (selectError) {\n\t\t\t\tthis.#selectError = selectError;\n\t\t\t}\n\t\t} else if (data === void 0) this.#selectError = null;\n\t\tif (this.#selectError) {\n\t\t\terror = this.#selectError;\n\t\t\tdata = this.#selectResult;\n\t\t\terrorUpdatedAt = Date.now();\n\t\t\tstatus = \"error\";\n\t\t\tisPlaceholderData = false;\n\t\t}\n\t\tconst isFetching = newState.fetchStatus === \"fetching\";\n\t\tconst isPending = status === \"pending\";\n\t\tconst isError = status === \"error\";\n\t\tconst isLoading = isPending && isFetching;\n\t\tconst hasData = data !== void 0;\n\t\treturn {\n\t\t\tstatus,\n\t\t\tfetchStatus: newState.fetchStatus,\n\t\t\tisPending,\n\t\t\tisSuccess: status === \"success\",\n\t\t\tisError,\n\t\t\tisInitialLoading: isLoading,\n\t\t\tisLoading,\n\t\t\tdata,\n\t\t\tdataUpdatedAt: newState.dataUpdatedAt,\n\t\t\terror,\n\t\t\terrorUpdatedAt,\n\t\t\tfailureCount: newState.fetchFailureCount,\n\t\t\tfailureReason: newState.fetchFailureReason,\n\t\t\terrorUpdateCount: newState.errorUpdateCount,\n\t\t\tisFetched: query.isFetched(),\n\t\t\tisFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n\t\t\tisFetching,\n\t\t\tisRefetching: isFetching && !isPending,\n\t\t\tisLoadingError: isError && !hasData,\n\t\t\tisPaused: newState.fetchStatus === \"paused\",\n\t\t\tisPlaceholderData,\n\t\t\tisRefetchError: isError && hasData,\n\t\t\tisStale: isStale(query, options),\n\t\t\trefetch: this.refetch,\n\t\t\tisEnabled: resolveQueryValue(options.enabled, query) !== false\n\t\t};\n\t}\n\t/**\n\t* Recomputes and stores the current result from the current query/options, notifying listeners\n\t* if it changed. Framework adapters call this right after subscribing to make sure no query\n\t* update was missed in the gap between creating the observer and subscribing to it.\n\t*/\n\tupdateResult() {\n\t\tconst prevResult = this.#currentResult;\n\t\tconst nextResult = this.createResult(this.#currentQuery, this.options);\n\t\tthis.#currentResultState = this.#currentQuery.state;\n\t\tthis.#currentResultOptions = this.options;\n\t\tif (this.#currentResultState.data !== void 0) this.#lastQueryWithDefinedData = this.#currentQuery;\n\t\tif (shallowEqualObjects(nextResult, prevResult)) return;\n\t\tthis.#currentResult = nextResult;\n\t\tconst shouldNotifyListeners = () => {\n\t\t\tif (!prevResult) return true;\n\t\t\tconst { notifyOnChangeProps } = this.options;\n\t\t\tconst notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n\t\t\tif (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) return true;\n\t\t\tconst includedProps = new Set(notifyOnChangePropsValue ?? this.#trackedProps);\n\t\t\tif (this.options.throwOnError) includedProps.add(\"error\");\n\t\t\treturn Object.keys(this.#currentResult).some((key) => {\n\t\t\t\tconst typedKey = key;\n\t\t\t\treturn this.#currentResult[typedKey] !== prevResult[typedKey] && includedProps.has(typedKey);\n\t\t\t});\n\t\t};\n\t\tconst notifyListeners = shouldNotifyListeners();\n\t\tnotifyManager.batch(() => {\n\t\t\tif (notifyListeners) this.listeners.forEach((listener) => {\n\t\t\t\tlistener(this.#currentResult);\n\t\t\t});\n\t\t\tthis.#client.getQueryCache().notify({\n\t\t\t\tquery: this.#currentQuery,\n\t\t\t\ttype: \"observerResultsUpdated\"\n\t\t\t});\n\t\t});\n\t}\n\t#updateQuery() {\n\t\tconst query = this.#client.getQueryCache().build(this.#client, this.options);\n\t\tif (query === this.#currentQuery) return;\n\t\tconst prevQuery = this.#currentQuery;\n\t\tthis.#currentQuery = query;\n\t\tthis.#currentQueryInitialState = query.state;\n\t\tif (this.hasListeners()) {\n\t\t\tprevQuery?.removeObserver(this);\n\t\t\tquery.addObserver(this);\n\t\t}\n\t}\n\t/** @internal */\n\tonQueryUpdate() {\n\t\tthis.updateResult();\n\t\tif (this.hasListeners()) this.#updateTimers();\n\t}\n};\nfunction shouldLoadOnMount(query, options) {\n\treturn resolveQueryValue(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryValue(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n\treturn shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n\tif (resolveQueryValue(options.enabled, query) !== false && resolveQueryValue(options.staleTime, query) !== \"static\") {\n\t\tconst value = resolveQueryValue(field, query);\n\t\treturn value === \"always\" || value !== false && isStale(query, options);\n\t}\n\treturn false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n\treturn (query !== prevQuery || resolveQueryValue(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n\treturn resolveQueryValue(options.enabled, query) !== false && query.isStaleByTime(resolveQueryValue(options.staleTime, query));\n}\n//#endregion\nexport { QueryObserver };\n\n//# sourceMappingURL=queryObserver.js.map","import { notifyManager } from \"./notifyManager.js\";\nimport { createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\n//#region src/mutation.ts\n/**\n* Represents a single mutation attempt. A `Mutation` holds the mutation's\n* options, state (data/error/status), and the `MutationObserver`s currently\n* subscribed to it.\n*\n* Instances are created and managed internally by `MutationCache`; application\n* code typically interacts with mutations indirectly through `QueryClient` or\n* a framework hook like `useMutation`. Direct access to a `Mutation` instance\n* is possible via `mutationCache.find()`/`getAll()` for inspecting cache state.\n*\n* @example\n* ```ts\n* const mutationCache = queryClient.getMutationCache()\n*\n* const mutation = mutationCache.find({ mutationKey: ['addPost'] })\n* ```\n*/\nvar Mutation = class extends Removable {\n\t#client;\n\t#observers;\n\t#mutationCache;\n\t#retryer;\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.#client = config.client;\n\t\tthis.mutationId = config.mutationId;\n\t\tthis.#mutationCache = config.mutationCache;\n\t\tthis.#observers = [];\n\t\tthis.state = config.state || getDefaultState();\n\t\tthis.setOptions(config.options);\n\t\tthis.scheduleGc();\n\t}\n\t/** @internal */\n\tsetOptions(options) {\n\t\tthis.options = options;\n\t\tthis.updateGcTime(this.options.gcTime);\n\t}\n\t/**\n\t* The `meta` object passed in the mutation's options, if any.\n\t*/\n\tget meta() {\n\t\treturn this.options.meta;\n\t}\n\t/** @internal */\n\taddObserver(observer) {\n\t\tif (!this.#observers.includes(observer)) {\n\t\t\tthis.#observers.push(observer);\n\t\t\tthis.clearGcTimeout();\n\t\t\tthis.#mutationCache.notify({\n\t\t\t\ttype: \"observerAdded\",\n\t\t\t\tmutation: this,\n\t\t\t\tobserver\n\t\t\t});\n\t\t}\n\t}\n\t/** @internal */\n\tremoveObserver(observer) {\n\t\tthis.#observers = this.#observers.filter((x) => x !== observer);\n\t\tthis.scheduleGc();\n\t\tthis.#mutationCache.notify({\n\t\t\ttype: \"observerRemoved\",\n\t\t\tmutation: this,\n\t\t\tobserver\n\t\t});\n\t}\n\toptionalRemove() {\n\t\tif (!this.#observers.length) {\n\t\t\tif (this.state.status === \"pending\") this.scheduleGc();\n\t\t\telse this.#mutationCache.remove(this);\n\t\t}\n\t}\n\t/**\n\t* Resumes a mutation that is currently paused or was restored from a\n\t* dehydrated, still-`pending` state.\n\t*\n\t* - If this mutation has an active retryer (it paused mid-attempt, e.g. due\n\t* to the network mode or scope-based queuing), its retryer is resumed.\n\t* - Otherwise, if the mutation's status is still `pending` (e.g. it was\n\t* dehydrated while an attempt was in flight and never got a retryer in\n\t* this instance), `execute` is called again with the last known variables.\n\t* - Otherwise the mutation has already settled and this resolves immediately\n\t* without running anything again.\n\t*\n\t* @example\n\t* ```ts\n\t* // typically driven by reconnect handling, e.g. queryClient.resumePausedMutations()\n\t* const mutation = mutationCache.find({ mutationKey: ['addPost'] })\n\t* await mutation?.continue()\n\t* ```\n\t*\n\t* @see {@link Mutation#execute}\n\t*/\n\tcontinue() {\n\t\treturn this.#retryer?.continue() ?? (this.state.status === \"pending\" ? this.execute(this.state.variables) : Promise.resolve());\n\t}\n\t/**\n\t* Runs the mutation function for the given variables through a retryer, and\n\t* drives the mutation's state and lifecycle callbacks through to settlement.\n\t*\n\t* If this mutation's state is already `pending` when `execute` is called\n\t* (i.e. it was restored, still in-flight, from a dehydrated state), the\n\t* `onMutate` step is skipped and a `continue` action is dispatched to\n\t* unpause it; otherwise a `pending` action is dispatched first, then the\n\t* mutation cache's `onMutate` and the mutation's own `onMutate` option are\n\t* awaited in that order, and the resulting context is stored.\n\t*\n\t* The mutation function is then run (subject to `retry`/`retryDelay`/\n\t* `networkMode`, and to the mutation cache's scope-based serialization).\n\t* On success, the cache's `onSuccess`/`onSettled` callbacks run before the\n\t* mutation's own `onSuccess`/`onSettled` options, a `success` action is\n\t* dispatched, and the resolved data is returned. On failure, the same\n\t* cache-then-option ordering is used for `onError`/`onSettled`, but each of\n\t* those four callbacks is individually caught so that a throwing callback\n\t* cannot mask the original error; an `error` action is then dispatched and\n\t* the original error is re-thrown.\n\t*\n\t* @example\n\t* ```ts\n\t* // Called internally by `MutationObserver.mutate` and `Mutation.continue` —\n\t* // applications normally trigger mutations through those, not this method.\n\t* const data = await mutation.execute(variables)\n\t* ```\n\t*\n\t* @see {@link Mutation#continue}\n\t*/\n\tasync execute(variables) {\n\t\tconst onContinue = () => {\n\t\t\tthis.#dispatch({ type: \"continue\" });\n\t\t};\n\t\tconst mutationFnContext = {\n\t\t\tclient: this.#client,\n\t\t\tmeta: this.options.meta,\n\t\t\tmutationKey: this.options.mutationKey\n\t\t};\n\t\tconst retryer = this.#retryer = createRetryer({\n\t\t\tfn: () => {\n\t\t\t\tif (!this.options.mutationFn) return Promise.reject(/* @__PURE__ */ new Error(\"No mutationFn found\"));\n\t\t\t\treturn this.options.mutationFn(variables, mutationFnContext);\n\t\t\t},\n\t\t\tonFail: (failureCount, error) => {\n\t\t\t\tthis.#dispatch({\n\t\t\t\t\ttype: \"failed\",\n\t\t\t\t\tfailureCount,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t},\n\t\t\tonPause: () => {\n\t\t\t\tthis.#dispatch({ type: \"pause\" });\n\t\t\t},\n\t\t\tonContinue,\n\t\t\tretry: this.options.retry ?? 0,\n\t\t\tretryDelay: this.options.retryDelay,\n\t\t\tnetworkMode: this.options.networkMode,\n\t\t\tcanRun: () => this.#mutationCache.canRun(this)\n\t\t});\n\t\tconst restored = this.state.status === \"pending\";\n\t\tconst isPaused = !retryer.canStart();\n\t\ttry {\n\t\t\tif (restored) onContinue();\n\t\t\telse {\n\t\t\t\tthis.#dispatch({\n\t\t\t\t\ttype: \"pending\",\n\t\t\t\t\tvariables,\n\t\t\t\t\tisPaused\n\t\t\t\t});\n\t\t\t\tif (this.#mutationCache.config.onMutate) await this.#mutationCache.config.onMutate(variables, this, mutationFnContext);\n\t\t\t\tconst context = await this.options.onMutate?.(variables, mutationFnContext);\n\t\t\t\tif (context !== this.state.context) this.#dispatch({\n\t\t\t\t\ttype: \"pending\",\n\t\t\t\t\tcontext,\n\t\t\t\t\tvariables,\n\t\t\t\t\tisPaused\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst data = await retryer.start();\n\t\t\tawait this.#mutationCache.config.onSuccess?.(data, variables, this.state.context, this, mutationFnContext);\n\t\t\tawait this.options.onSuccess?.(data, variables, this.state.context, mutationFnContext);\n\t\t\tawait this.#mutationCache.config.onSettled?.(data, null, this.state.variables, this.state.context, this, mutationFnContext);\n\t\t\tawait this.options.onSettled?.(data, null, variables, this.state.context, mutationFnContext);\n\t\t\tthis.#dispatch({\n\t\t\t\ttype: \"success\",\n\t\t\t\tdata\n\t\t\t});\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait this.#mutationCache.config.onError?.(error, variables, this.state.context, this, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.options.onError?.(error, variables, this.state.context, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.#mutationCache.config.onSettled?.(void 0, error, this.state.variables, this.state.context, this, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.options.onSettled?.(void 0, error, variables, this.state.context, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\tthis.#dispatch({\n\t\t\t\ttype: \"error\",\n\t\t\t\terror\n\t\t\t});\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (this.#retryer === retryer) this.#retryer = void 0;\n\t\t\tthis.#mutationCache.runNext(this);\n\t\t}\n\t}\n\t#dispatch(action) {\n\t\tconst reducer = (state) => {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase \"failed\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfailureCount: action.failureCount,\n\t\t\t\t\tfailureReason: action.error\n\t\t\t\t};\n\t\t\t\tcase \"pause\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tisPaused: true\n\t\t\t\t};\n\t\t\t\tcase \"continue\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tisPaused: false\n\t\t\t\t};\n\t\t\t\tcase \"pending\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tcontext: action.context,\n\t\t\t\t\tdata: void 0,\n\t\t\t\t\tfailureCount: 0,\n\t\t\t\t\tfailureReason: null,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPaused: action.isPaused,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tvariables: action.variables,\n\t\t\t\t\tsubmittedAt: Date.now()\n\t\t\t\t};\n\t\t\t\tcase \"success\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tdata: action.data,\n\t\t\t\t\tfailureCount: 0,\n\t\t\t\t\tfailureReason: null,\n\t\t\t\t\terror: null,\n\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\tisPaused: false\n\t\t\t\t};\n\t\t\t\tcase \"error\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tdata: void 0,\n\t\t\t\t\terror: action.error,\n\t\t\t\t\tfailureCount: state.failureCount + 1,\n\t\t\t\t\tfailureReason: action.error,\n\t\t\t\t\tisPaused: false,\n\t\t\t\t\tstatus: \"error\"\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tthis.state = reducer(this.state);\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.#observers.forEach((observer) => {\n\t\t\t\tobserver.onMutationUpdate(action);\n\t\t\t});\n\t\t\tthis.#mutationCache.notify({\n\t\t\t\tmutation: this,\n\t\t\t\ttype: \"updated\",\n\t\t\t\taction\n\t\t\t});\n\t\t});\n\t}\n};\nfunction getDefaultState() {\n\treturn {\n\t\tcontext: void 0,\n\t\tdata: void 0,\n\t\terror: null,\n\t\tfailureCount: 0,\n\t\tfailureReason: null,\n\t\tisPaused: false,\n\t\tstatus: \"idle\",\n\t\tvariables: void 0,\n\t\tsubmittedAt: 0\n\t};\n}\n//#endregion\nexport { Mutation, getDefaultState };\n\n//# sourceMappingURL=mutation.js.map","import { hashKey, shallowEqualObjects } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { getDefaultState } from \"./mutation.js\";\n//#region src/mutationObserver.ts\n/**\n* Observes a single mutation and derives a `MutationObserverResult` from it.\n* A framework hook like `useMutation` creates one `MutationObserver` per hook\n* call, keeps it stable across re-renders, calls `setOptions` when the options\n* passed to the hook change, subscribes to it to re-render on updates, and\n* reads `getCurrentResult()` for the value to return. Calling `mutate()`\n* builds a new underlying `Mutation` in the `MutationCache` and executes it.\n*\n* @example\n* ```ts\n* const observer = new MutationObserver(queryClient, {\n* mutationFn: (variables: { title: string }) => addPost(variables),\n* })\n* ```\n*/\nvar MutationObserver = class extends Subscribable {\n\t#client;\n\t#currentResult = void 0;\n\t#currentMutation;\n\t#mutateOptions;\n\tconstructor(client, options) {\n\t\tsuper();\n\t\tthis.#client = client;\n\t\tthis.setOptions(options);\n\t\tthis.bindMethods();\n\t\tthis.#updateResult();\n\t}\n\tbindMethods() {\n\t\tthis.mutate = this.mutate.bind(this);\n\t\tthis.reset = this.reset.bind(this);\n\t}\n\t/**\n\t* Updates the observer's options.\n\t*\n\t* If the new `mutationKey` differs from the previous one (and both were\n\t* defined), the observer is reset, detaching it from the mutation it was\n\t* observing. Otherwise, if the currently observed mutation is still\n\t* `pending`, its options are updated in place as well.\n\t*\n\t* @example\n\t* ```ts\n\t* observer.setOptions({\n\t* mutationFn: (variables: { title: string }) => addPost(variables),\n\t* onSuccess: (data) => console.log(data),\n\t* })\n\t* ```\n\t*/\n\tsetOptions(options) {\n\t\tconst prevOptions = this.options;\n\t\tthis.options = this.#client.defaultMutationOptions(options);\n\t\tif (!shallowEqualObjects(this.options, prevOptions)) this.#client.getMutationCache().notify({\n\t\t\ttype: \"observerOptionsUpdated\",\n\t\t\tmutation: this.#currentMutation,\n\t\t\tobserver: this\n\t\t});\n\t\tif (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) this.reset();\n\t\telse if (this.#currentMutation?.state.status === \"pending\") this.#currentMutation.setOptions(this.options);\n\t}\n\tonSubscribe() {\n\t\tif (this.listeners.size === 1 && this.#currentMutation) {\n\t\t\tthis.#currentMutation.addObserver(this);\n\t\t\tthis.#updateResult();\n\t\t}\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) this.#currentMutation?.removeObserver(this);\n\t}\n\t/** @internal */\n\tonMutationUpdate(action) {\n\t\tthis.#updateResult();\n\t\tthis.#notify(action);\n\t}\n\t/**\n\t* Returns the observer's current result, derived from the observed\n\t* mutation's state (or the default, `idle` state if no mutation has been\n\t* built yet, e.g. before the first `mutate()` call or after `reset()`).\n\t*/\n\tgetCurrentResult() {\n\t\treturn this.#currentResult;\n\t}\n\t/**\n\t* Detaches the observer from the mutation it is currently observing (if\n\t* any) and resets the observed result back to its default, `idle` state.\n\t*\n\t* This does not cancel an in-flight mutation; the mutation itself keeps\n\t* running to completion and its own callbacks still fire, but this\n\t* observer stops reflecting its state and a subsequent `mutate()` call\n\t* will build a brand new mutation.\n\t*\n\t* @example\n\t* ```ts\n\t* observer.reset()\n\t* ```\n\t*\n\t* @see {@link MutationObserver#mutate}\n\t*/\n\treset() {\n\t\tthis.#currentMutation?.removeObserver(this);\n\t\tthis.#currentMutation = void 0;\n\t\tthis.#updateResult();\n\t\tthis.#notify();\n\t}\n\t/**\n\t* Builds a new `Mutation` in the `MutationCache` using the observer's\n\t* current options, detaches this observer from any previously observed\n\t* mutation, attaches it to the new one, and executes it with the given\n\t* variables.\n\t*\n\t* The optional per-call `options` (`onSuccess`/`onError`/`onSettled`) are\n\t* invoked once the mutation settles, in addition to any callbacks defined\n\t* on the observer's own options.\n\t*\n\t* @example\n\t* ```ts\n\t* await observer.mutate(\n\t* { title: 'New post' },\n\t* { onSuccess: (data) => console.log(data) },\n\t* )\n\t* ```\n\t*/\n\tmutate(variables, options) {\n\t\tthis.#mutateOptions = options;\n\t\tthis.#currentMutation?.removeObserver(this);\n\t\tthis.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n\t\tthis.#currentMutation.addObserver(this);\n\t\treturn this.#currentMutation.execute(variables);\n\t}\n\t#updateResult() {\n\t\tconst state = this.#currentMutation?.state ?? getDefaultState();\n\t\tthis.#currentResult = {\n\t\t\t...state,\n\t\t\tisPending: state.status === \"pending\",\n\t\t\tisSuccess: state.status === \"success\",\n\t\t\tisError: state.status === \"error\",\n\t\t\tisIdle: state.status === \"idle\",\n\t\t\tmutate: this.mutate,\n\t\t\treset: this.reset\n\t\t};\n\t}\n\t#notify(action) {\n\t\tnotifyManager.batch(() => {\n\t\t\tif (this.#mutateOptions && this.hasListeners()) {\n\t\t\t\tconst variables = this.#currentResult.variables;\n\t\t\t\tconst onMutateResult = this.#currentResult.context;\n\t\t\t\tconst context = {\n\t\t\t\t\tclient: this.#client,\n\t\t\t\t\tmeta: this.options.meta,\n\t\t\t\t\tmutationKey: this.options.mutationKey\n\t\t\t\t};\n\t\t\t\tif (action?.type === \"success\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.#mutateOptions.onSuccess?.(action.data, variables, onMutateResult, context);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tPromise.reject(e);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.#mutateOptions.onSettled?.(action.data, null, variables, onMutateResult, context);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tPromise.reject(e);\n\t\t\t\t\t}\n\t\t\t\t} else if (action?.type === \"error\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.#mutateOptions.onError?.(action.error, variables, onMutateResult, context);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tPromise.reject(e);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.#mutateOptions.onSettled?.(void 0, action.error, variables, onMutateResult, context);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tPromise.reject(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.listeners.forEach((listener) => {\n\t\t\t\tlistener(this.#currentResult);\n\t\t\t});\n\t\t});\n\t}\n};\n//#endregion\nexport { MutationObserver };\n\n//# sourceMappingURL=mutationObserver.js.map","\"use client\";\nimport * as React from \"react\";\n//#region src/IsRestoringProvider.ts\nconst IsRestoringContext = React.createContext(false);\n/**\n* If you are using `PersistQueryClientProvider`, you can also use the `useIsRestoring` hook alongside it to\n* check if a restore is currently in progress. `useQuery` and friends also check this internally to avoid\n* race conditions between the restore and mounting queries.\n*\n* @returns `true` while a persisted client is being restored, `false` otherwise.\n*/\nconst useIsRestoring = () => React.useContext(IsRestoringContext);\n/**\n* The Provider that `PersistQueryClientProvider` uses to signal whether a persisted client is currently\n* being restored, read by `useIsRestoring`.\n*/\nconst IsRestoringProvider = IsRestoringContext.Provider;\n//#endregion\nexport { IsRestoringProvider, useIsRestoring };\n\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/QueryErrorResetBoundary.tsx\n/**\n* Resets any query errors within the boundary, so queries know they can try again.\n*/\nfunction createValue() {\n\tlet isReset = false;\n\treturn {\n\t\t/**\n\t\t* Clears the reset state, so queries know not to try again until the boundary is reset again.\n\t\t*/\n\t\tclearReset: () => {\n\t\t\tisReset = false;\n\t\t},\n\t\t/**\n\t\t* Resets any query errors within the boundary, so queries know they can try again.\n\t\t*/\n\t\treset: () => {\n\t\t\tisReset = true;\n\t\t},\n\t\t/**\n\t\t* Returns whether the boundary has been reset and not yet cleared.\n\t\t*/\n\t\tisReset: () => {\n\t\t\treturn isReset;\n\t\t}\n\t};\n}\nconst QueryErrorResetBoundaryContext = React.createContext(createValue());\n/**\n* This hook will reset any query errors within the closest `QueryErrorResetBoundary`. If there is no boundary\n* defined it will reset them globally.\n*\n* @returns The boundary's {@link QueryErrorResetBoundaryValue}.\n*\n* @example\n* ```tsx\n* import { ErrorBoundary } from 'react-error-boundary'\n* import { useQueryErrorResetBoundary } from '@tanstack/react-query'\n*\n* function App({ children }: { children: React.ReactNode }) {\n* const { reset } = useQueryErrorResetBoundary()\n*\n* return (\n* <ErrorBoundary\n* onReset={reset}\n* fallbackRender={({ resetErrorBoundary }) => (\n* <div>\n* There was an error!\n* <button onClick={() => resetErrorBoundary()}>Try again</button>\n* </div>\n* )}\n* >\n* {children}\n* </ErrorBoundary>\n* )\n* }\n* ```\n*/\nconst useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\n/**\n* When using `suspense` or `throwOnError` in your queries, you need a way to let queries know that you want to\n* try again when re-rendering after some error occurred. With the `QueryErrorResetBoundary` component you can\n* reset any query errors within the boundaries of the component.\n*\n* @returns The `children`, rendered as-is, or called with the boundary's {@link QueryErrorResetBoundaryValue}\n* if `children` is a function.\n*\n* @example\n* ```tsx\n* import { ErrorBoundary } from 'react-error-boundary'\n* import { QueryErrorResetBoundary } from '@tanstack/react-query'\n*\n* function App() {\n* return (\n* <QueryErrorResetBoundary>\n* {({ reset }) => (\n* <ErrorBoundary\n* onReset={reset}\n* fallbackRender={({ resetErrorBoundary }) => (\n* <div>\n* There was an error!\n* <button onClick={() => resetErrorBoundary()}>Try again</button>\n* </div>\n* )}\n* >\n* <Page />\n* </ErrorBoundary>\n* )}\n* </QueryErrorResetBoundary>\n* )\n* }\n* ```\n*/\nconst QueryErrorResetBoundary = ({ children }) => {\n\tconst [value] = React.useState(() => createValue());\n\treturn /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, {\n\t\tvalue,\n\t\tchildren: typeof children === \"function\" ? children(value) : children\n\t});\n};\n//#endregion\nexport { QueryErrorResetBoundary, useQueryErrorResetBoundary };\n\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\n//#region src/errorBoundaryUtils.ts\nconst ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n\tconst throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n\tif (options.suspense || throwOnError) {\n\t\tif (!errorResetBoundary.isReset()) options.retryOnMount = false;\n\t}\n};\nconst useClearResetErrorBoundary = (errorResetBoundary) => {\n\tReact.useEffect(() => {\n\t\terrorResetBoundary.clearReset();\n\t}, [errorResetBoundary]);\n};\nconst getHasError = ({ result, errorResetBoundary, throwOnError, query, suspense }) => {\n\treturn result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\n//#endregion\nexport { ensurePreventErrorBoundaryRetry, getHasError, useClearResetErrorBoundary };\n\n//# sourceMappingURL=errorBoundaryUtils.js.map","//#region src/suspense.ts\nconst defaultThrowOnError = (_error, query) => query.state.data === void 0;\nconst ensureSuspenseTimers = (defaultedOptions) => {\n\tif (defaultedOptions.suspense) {\n\t\tconst MIN_SUSPENSE_TIME_MS = 1e3;\n\t\tconst clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n\t\tconst originalStaleTime = defaultedOptions.staleTime;\n\t\tdefaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n\t\tif (typeof defaultedOptions.gcTime === \"number\") defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, MIN_SUSPENSE_TIME_MS);\n\t}\n};\nconst shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nconst fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n\terrorResetBoundary.clearReset();\n});\n//#endregion\nexport { defaultThrowOnError, ensureSuspenseTimers, fetchOptimistic, shouldSuspend };\n\n//# sourceMappingURL=suspense.js.map","\"use client\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport { ensurePreventErrorBoundaryRetry, getHasError, useClearResetErrorBoundary } from \"./errorBoundaryUtils.js\";\nimport { ensureSuspenseTimers, fetchOptimistic, shouldSuspend } from \"./suspense.js\";\nimport * as React from \"react\";\nimport { noop, notifyManager } from \"@tanstack/query-core\";\n//#region src/useBaseQuery.ts\nfunction useBaseQuery(options, Observer, queryClient) {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (typeof options !== \"object\" || Array.isArray(options)) throw new Error(\"Bad argument type. Starting with v5, only the \\\"Object\\\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object\");\n\t}\n\tconst isRestoring = useIsRestoring();\n\tconst errorResetBoundary = useQueryErrorResetBoundary();\n\tconst client = useQueryClient(queryClient);\n\tconst defaultedOptions = client.defaultQueryOptions(options);\n\tconst query = client.getQueryCache().get(defaultedOptions.queryHash);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (!defaultedOptions.queryFn) console.error(`[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`);\n\t}\n\tconst subscribed = options.subscribed !== false;\n\tdefaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : subscribed ? \"optimistic\" : void 0;\n\tensureSuspenseTimers(defaultedOptions);\n\tensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n\tuseClearResetErrorBoundary(errorResetBoundary);\n\tconst [observer] = React.useState(() => new Observer(client, defaultedOptions));\n\tconst result = observer.getOptimisticResult(defaultedOptions);\n\tconst shouldSubscribe = !isRestoring && subscribed;\n\tReact.useSyncExternalStore(React.useCallback((onStoreChange) => {\n\t\tconst unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n\t\tobserver.updateResult();\n\t\treturn unsubscribe;\n\t}, [observer, shouldSubscribe]), () => observer.getCurrentResult(), () => observer.getCurrentResult());\n\tReact.useEffect(() => {\n\t\tobserver.setOptions(defaultedOptions);\n\t}, [defaultedOptions, observer]);\n\tif (shouldSuspend(defaultedOptions, result)) throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n\tif (getHasError({\n\t\tresult,\n\t\terrorResetBoundary,\n\t\tthrowOnError: defaultedOptions.throwOnError,\n\t\tquery,\n\t\tsuspense: defaultedOptions.suspense\n\t})) throw result.error;\n\treturn !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\n//#endregion\nexport { useBaseQuery };\n\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { QueryObserver } from \"@tanstack/query-core\";\n//#region src/useQuery.ts\nfunction useQuery(options, queryClient) {\n\treturn useBaseQuery(options, QueryObserver, queryClient);\n}\n//#endregion\nexport { useQuery };\n\n//# sourceMappingURL=useQuery.js.map","\"use client\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport * as React from \"react\";\nimport { MutationObserver, noop, notifyManager, shouldThrowError } from \"@tanstack/query-core\";\n//#region src/useMutation.ts\n/**\n* Unlike queries, mutations are typically used to create/update/delete data or perform server side-effects.\n* `useMutation` is the hook for that.\n*\n* @see {@link mutationOptions} to share these options across multiple `useMutation` call sites, or to look\n* the mutation up elsewhere via its `mutationKey` (e.g. with `useMutationState`).\n* @param options - The {@link UseMutationOptions} to use — everything you can pass to `useMutation`.\n* @param queryClient - Use this to use a custom `QueryClient`. Otherwise, the one from the nearest context will\n* be used.\n* @returns `mutate`/`mutateAsync` also accept per-call `onSuccess`/`onError`/`onSettled` callbacks as a second\n* argument, useful for triggering call-site side effects (e.g. navigation) without coupling them to the shared\n* mutation definition. Hook-level callbacks (passed to `options`) fire for every mutation; per-call callbacks\n* fire only for the latest call you've made, and only while the component is still mounted — unmounting before\n* the mutation settles removes the subscription and prevents them from firing.\n*\n* @example\n* ```tsx\n* import { useMutation, useQueryClient } from '@tanstack/react-query'\n*\n* function AddTodo() {\n* const queryClient = useQueryClient()\n*\n* const addMutation = useMutation({\n* mutationFn: addTodo,\n* onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),\n* })\n*\n* return (\n* <button\n* onClick={() =>\n* addMutation.mutate('Item', {\n* onError: (error) => console.error('Failed to add item:', error),\n* })\n* }\n* >\n* Add\n* </button>\n* )\n* }\n* ```\n*\n* @example\n* Rendering the mutation's own state, rather than just firing it off:\n* ```tsx\n* import { useMutation, useQueryClient } from '@tanstack/react-query'\n*\n* function AddTodo() {\n* const queryClient = useQueryClient()\n*\n* const addMutation = useMutation({\n* mutationFn: addTodo,\n* onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),\n* })\n*\n* return (\n* <div>\n* {addMutation.isPending ? (\n* 'Adding todo...'\n* ) : (\n* <>\n* {addMutation.isError ? (\n* <div>An error occurred: {addMutation.error.message}</div>\n* ) : null}\n* <button onClick={() => addMutation.mutate('Item')}>Add</button>\n* </>\n* )}\n* </div>\n* )\n* }\n* ```\n*\n* @example\n* Optimistic update via `onMutate`, rolling back on `onError`:\n* ```tsx\n* import { useMutation, useQueryClient } from '@tanstack/react-query'\n*\n* function AddTodo() {\n* const queryClient = useQueryClient()\n*\n* const addMutation = useMutation({\n* mutationFn: addTodo,\n* onMutate: async (newTodo) => {\n* await queryClient.cancelQueries({ queryKey: ['todos'] })\n* const previousTodos = queryClient.getQueryData<Array<string>>(['todos'])\n*\n* queryClient.setQueryData<Array<string>>(['todos'], (old) => [\n* ...(old ?? []),\n* newTodo,\n* ])\n*\n* // Passed to `onError` as `onMutateResult` if the mutation fails.\n* return { previousTodos }\n* },\n* onError: (_err, _newTodo, onMutateResult) => {\n* queryClient.setQueryData(['todos'], onMutateResult?.previousTodos)\n* },\n* onSettled: () => {\n* queryClient.invalidateQueries({ queryKey: ['todos'] })\n* },\n* })\n*\n* return (\n* <button onClick={() => addMutation.mutate('Item')}>Add</button>\n* )\n* }\n* ```\n*\n* @example\n* Callbacks passed per call to `mutate` only fire for the last call — `mutateAsync` gives you a\n* promise per call instead, so you can wait for all of them when they succeed:\n* ```tsx\n* import { useMutation, useQueryClient } from '@tanstack/react-query'\n*\n* function AddTodos() {\n* const queryClient = useQueryClient()\n*\n* const addMutation = useMutation({\n* mutationFn: addTodo,\n* onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),\n* })\n*\n* async function handleAddAll(todos: Array<string>) {\n* try {\n* await Promise.all(todos.map((todo) => addMutation.mutateAsync(todo)))\n* } catch (error) {\n* console.error('Failed to add todos:', error)\n* }\n* }\n*\n* return (\n* <button onClick={() => handleAddAll(['Todo 1', 'Todo 2', 'Todo 3'])}>\n* Add all\n* </button>\n* )\n* }\n* ```\n*\n* @example\n* If some of the mutations above can fail independently of the others, and you want to know which ones\n* did — rather than losing that information the moment the first one rejects — swap `Promise.all` for\n* `Promise.allSettled`:\n* ```tsx\n* import { useMutation, useQueryClient } from '@tanstack/react-query'\n*\n* function AddTodos() {\n* const queryClient = useQueryClient()\n*\n* const addMutation = useMutation({\n* mutationFn: addTodo,\n* onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),\n* })\n*\n* async function handleAddAll(todos: Array<string>) {\n* const addResults = await Promise.allSettled(\n* todos.map((todo) => addMutation.mutateAsync(todo)),\n* )\n*\n* addResults.forEach((addResult, index) => {\n* if (addResult.status === 'rejected') {\n* console.error(`Failed to add \"${todos[index]}\":`, addResult.reason)\n* }\n* })\n* }\n*\n* return (\n* <button onClick={() => handleAddAll(['Todo 1', 'Todo 2', 'Todo 3'])}>\n* Add all\n* </button>\n* )\n* }\n* ```\n*/\nfunction useMutation(options, queryClient) {\n\tconst client = useQueryClient(queryClient);\n\tconst [observer] = React.useState(() => new MutationObserver(client, options));\n\tReact.useEffect(() => {\n\t\tobserver.setOptions(options);\n\t}, [observer, options]);\n\tconst result = React.useSyncExternalStore(React.useCallback((onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)), [observer]), () => observer.getCurrentResult(), () => observer.getCurrentResult());\n\tconst mutate = React.useCallback((...args) => {\n\t\tobserver.mutate(args[0], args[1]).catch(noop);\n\t}, [observer]);\n\tif (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) throw result.error;\n\treturn {\n\t\t...result,\n\t\tmutate,\n\t\tmutateAsync: result.mutate\n\t};\n}\n//#endregion\nexport { useMutation };\n\n//# sourceMappingURL=useMutation.js.map","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","/** Every admin route the client calls (packages B, D, F and G, `apps/api/src/routes/admin/**`). */\nexport const ADMIN_PATHS = {\n setup: '/api/admin/setup',\n csrf: '/api/admin/auth/csrf',\n login: '/api/admin/auth/login',\n logout: '/api/admin/auth/logout',\n me: '/api/admin/auth/me',\n password: '/api/admin/auth/me/password',\n sessions: '/api/admin/auth/sessions',\n passwordReset: '/api/admin/auth/password-reset',\n passwordResetConfirm: '/api/admin/auth/password-reset/confirm',\n users: '/api/admin/users',\n invitations: '/api/admin/invitations',\n inspectInvitation: '/api/admin/invitations/inspect',\n acceptInvitation: '/api/admin/invitations/accept',\n roles: '/api/admin/roles',\n tokens: '/api/admin/tokens',\n audit: '/api/admin/audit',\n models: '/api/admin/models',\n components: '/api/admin/components',\n schema: '/api/admin/schema',\n schemaChanges: '/api/admin/schema/changes',\n schemaExport: '/api/admin/schema/export',\n schemaApply: '/api/admin/schema/apply',\n schemaSettings: '/api/admin/schema/settings',\n locales: '/api/admin/locales',\n mediaFolders: '/api/admin/media/folders',\n mediaAssets: '/api/admin/media/assets',\n mediaUploads: '/api/admin/media/uploads',\n appUsers: '/api/admin/app-users',\n appRoles: '/api/admin/app-roles',\n content: '/api/admin/content',\n contentCounts: '/api/admin/content-counts',\n contentHealth: '/api/admin/content-health',\n presence: '/api/admin/presence',\n editorManifest: '/api/admin/extensions/editors',\n extensionThemes: '/api/admin/extensions/themes',\n jobs: '/api/admin/jobs',\n schedules: '/api/admin/publishing/schedules',\n changeSets: '/api/admin/change-sets',\n snapshots: '/api/admin/snapshots',\n webhooks: '/api/admin/webhooks',\n deploymentConnections: '/api/admin/deployments/connections',\n deploymentRuns: '/api/admin/deployments/runs',\n preview: '/api/admin/preview',\n previewTokens: '/api/admin/preview/tokens',\n} as const;\n\nexport const withId = (base: string, id: string) => `${base}/${encodeURIComponent(id)}`;\n","type QueryValue = string | number | boolean | null | undefined;\n\n/** Serialises defined values into a `?a=1&b=2` string (empty when nothing is set). */\nexport const toQueryString = (query: Readonly<Record<string, QueryValue>>): string => {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null && value !== '') {\n params.set(key, String(value));\n }\n }\n const serialised = params.toString();\n return serialised ? `?${serialised}` : '';\n};\n","import type { RequestFn } from '../request.js';\nimport type {\n AdminAppUser,\n AppRole,\n AppUserPage,\n AppUserQuery,\n CreateAppRoleInput,\n UpdateAppRoleInput,\n UpdateAppUserInput,\n} from './appUsersTypes.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport { toQueryString } from './query.js';\n\n/** App users (Users → App users) and app roles (Settings → Roles → App roles). */\nexport const createAppUsersApi = (request: RequestFn) => ({\n appUsers: {\n list: (query: AppUserQuery = {}) =>\n request<AppUserPage>(`${ADMIN_PATHS.appUsers}${toQueryString(query)}`),\n get: (id: string) => request<AdminAppUser>(withId(ADMIN_PATHS.appUsers, id)),\n /** Block/unblock and replace custom roles. Blocking takes effect on the user's next request. */\n update: (id: string, body: UpdateAppUserInput) =>\n request<AdminAppUser>(withId(ADMIN_PATHS.appUsers, id), { method: 'PATCH', body }),\n remove: (id: string) => request<void>(withId(ADMIN_PATHS.appUsers, id), { method: 'DELETE' }),\n /** 409 NOT_CONFIGURED without APP_AUTH_CONFIRM_EMAIL_URL; 409 ALREADY_CONFIRMED. */\n resendConfirmation: (id: string) =>\n request<void>(`${withId(ADMIN_PATHS.appUsers, id)}/resend-confirmation`, { method: 'POST' }),\n },\n appRoles: {\n list: () => request<AppRole[]>(ADMIN_PATHS.appRoles),\n get: (id: string) => request<AppRole>(withId(ADMIN_PATHS.appRoles, id)),\n create: (body: CreateAppRoleInput) => request<AppRole>(ADMIN_PATHS.appRoles, { method: 'POST', body }),\n /** 409 VERSION_CONFLICT when `expectedVersion` is stale. */\n update: (id: string, body: UpdateAppRoleInput) =>\n request<AppRole>(withId(ADMIN_PATHS.appRoles, id), { method: 'PATCH', body }),\n remove: (id: string) => request<void>(withId(ADMIN_PATHS.appRoles, id), { method: 'DELETE' }),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport type {\n AltTextInput,\n AltTextResult,\n AssistStatus,\n AssistTextResult,\n ContentOpsInput,\n ContentOpsRun,\n RewriteInput,\n SchemaDraftInput,\n SchemaDraftResult,\n SummarizeInput,\n TranslateInput,\n TranslateResult,\n} from './assistTypes.js';\nimport { withId } from './paths.js';\n\nexport const ASSIST_PATHS = {\n status: '/api/admin/assist/status',\n altText: '/api/admin/assist/alt-text',\n summarize: '/api/admin/assist/summarize',\n translate: '/api/admin/assist/translate',\n rewrite: '/api/admin/assist/rewrite',\n schemaDraft: '/api/admin/assist/schema/draft',\n contentOpsPropose: '/api/admin/assist/content-ops/propose',\n contentOps: '/api/admin/assist/content-ops',\n} as const;\n\n/** Editor assists with the instance's own model provider (documentation/assist.md). */\nexport const createAssistApi = (request: RequestFn) => ({\n assist: {\n status: () => request<AssistStatus>(ASSIST_PATHS.status),\n altText: (body: AltTextInput) => request<AltTextResult>(ASSIST_PATHS.altText, { method: 'POST', body }),\n summarize: (body: SummarizeInput) =>\n request<AssistTextResult>(ASSIST_PATHS.summarize, { method: 'POST', body }),\n translate: (body: TranslateInput) =>\n request<TranslateResult>(ASSIST_PATHS.translate, { method: 'POST', body }),\n rewrite: (body: RewriteInput) =>\n request<AssistTextResult>(ASSIST_PATHS.rewrite, { method: 'POST', body }),\n schemaDraft: (body: SchemaDraftInput) =>\n request<SchemaDraftResult>(ASSIST_PATHS.schemaDraft, { method: 'POST', body }),\n /** Starts a background run (202); poll it with `contentOpsRun`. */\n proposeContentOps: (body: ContentOpsInput) =>\n request<{ runId: string }>(ASSIST_PATHS.contentOpsPropose, { method: 'POST', body }),\n contentOpsRun: (runId: string) => request<ContentOpsRun>(withId(ASSIST_PATHS.contentOps, runId)),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport type {\n AddChangeSetEntryInput,\n ChangeSet,\n ChangeSetQuery,\n ChangeSetReview,\n ChangeSetSummary,\n ChangeSetTimelineEvent,\n CreateChangeSetInput,\n PutSchemaDraftInput,\n ScheduleChangeSetInput,\n SchemaDraft,\n ShipChangeSetInput,\n Snapshot,\n SnapshotPage,\n SnapshotQuery,\n UnassignedEntry,\n UpdateChangeSetInput,\n} from './changeSetTypes.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport type { Page } from './publishingTypes.js';\nimport { toQueryString } from './query.js';\n\nconst setPath = (id: string) => withId(ADMIN_PATHS.changeSets, id);\nconst draftPath = (id: string, definitionId: string) =>\n `${setPath(id)}/schema/${encodeURIComponent(definitionId)}`;\n\n/** Change sets (schema + content shipped as one snapshot) and the snapshot ledger. */\nexport const createChangeSetsApi = (request: RequestFn) => ({\n changeSets: {\n list: (query: ChangeSetQuery = {}) =>\n request<Page<ChangeSetSummary>>(`${ADMIN_PATHS.changeSets}${toQueryString(query)}`),\n get: (id: string) => request<ChangeSet>(setPath(id)),\n create: (body: CreateChangeSetInput) =>\n request<ChangeSet>(ADMIN_PATHS.changeSets, { method: 'POST', body }),\n update: (id: string, body: UpdateChangeSetInput) =>\n request<ChangeSet>(setPath(id), { method: 'PATCH', body }),\n /** Keeps the set as history (`discarded`) and deletes its schema drafts. */\n discard: (id: string) => request<ChangeSet>(`${setPath(id)}/discard`, { method: 'POST' }),\n addEntry: (id: string, body: AddChangeSetEntryInput) =>\n request<ChangeSet>(`${setPath(id)}/items`, { method: 'POST', body }),\n removeItem: (id: string, itemId: string) =>\n request<ChangeSet>(`${setPath(id)}/items/${encodeURIComponent(itemId)}`, { method: 'DELETE' }),\n getSchemaDraft: (id: string, definitionId: string) => request<SchemaDraft>(draftPath(id, definitionId)),\n putSchemaDraft: (id: string, definitionId: string, body: PutSchemaDraftInput) =>\n request<SchemaDraft>(draftPath(id, definitionId), { method: 'PUT', body }),\n removeSchemaDraft: (id: string, definitionId: string) =>\n request<ChangeSet>(draftPath(id, definitionId), { method: 'DELETE' }),\n review: (id: string) => request<ChangeSetReview>(`${setPath(id)}/review`),\n /**\n * Resolves with the set: `shipped` (or `failed`) when it shipped inline, `shipping` (HTTP 202) when\n * prerequisites run in the background. Poll `get` until it leaves `shipping`.\n */\n ship: (id: string, body: ShipChangeSetInput) =>\n request<ChangeSet>(`${setPath(id)}/ship`, { method: 'POST', body }),\n schedule: (id: string, body: ScheduleChangeSetInput) =>\n request<ChangeSet>(`${setPath(id)}/schedule`, { method: 'POST', body }),\n unschedule: (id: string) => request<ChangeSet>(`${setPath(id)}/unschedule`, { method: 'POST' }),\n timeline: async (id: string) =>\n (await request<{ items: ChangeSetTimelineEvent[] }>(`${setPath(id)}/timeline`)).items,\n unassigned: (query: { cursor?: string; limit?: number } = {}) =>\n request<Page<UnassignedEntry>>(`${ADMIN_PATHS.changeSets}/unassigned${toQueryString(query)}`),\n },\n snapshots: {\n list: (query: SnapshotQuery = {}) =>\n request<SnapshotPage>(`${ADMIN_PATHS.snapshots}${toQueryString(query)}`),\n get: (seq: number) => request<Snapshot>(`${ADMIN_PATHS.snapshots}/${seq}`),\n /** Creates an open restore change set (reviewable); nothing goes live until it ships. */\n restore: (seq: number) =>\n request<ChangeSet>(`${ADMIN_PATHS.snapshots}/${seq}/restore`, { method: 'POST' }),\n },\n});\n","import type { ContentFilter, ContentListQuery } from './contentTypes.js';\n\n/**\n * Serialises a content list query into the bracket querystring the content compiler parses\n * (`filters[title][$eq]=A&sort=title:asc&page=2`). Lists repeat the key (`filters[id][$in]=a&filters[id][$in]=b`).\n */\nconst appendFilter = (params: URLSearchParams, prefix: string, value: unknown) => {\n if (value === undefined || value === null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((item: unknown, index) => {\n if (typeof item === 'object' && item !== null) {\n appendFilter(params, `${prefix}[${index}]`, item);\n } else {\n params.append(prefix, String(item));\n }\n });\n return;\n }\n if (typeof value === 'object') {\n for (const [key, child] of Object.entries(value as ContentFilter)) {\n appendFilter(params, `${prefix}[${key}]`, child);\n }\n return;\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n params.append(prefix, String(value));\n }\n};\n\nexport const toContentQueryString = (query: ContentListQuery = {}): string => {\n const params = new URLSearchParams();\n if (query.filters) {\n appendFilter(params, 'filters', query.filters);\n }\n for (const term of query.sort ?? []) {\n params.append('sort', `${term.field}:${term.direction}`);\n }\n if (query.page !== undefined) {\n params.set('page', String(query.page));\n }\n if (query.pageSize !== undefined) {\n params.set('pageSize', String(query.pageSize));\n }\n if (query.q) {\n params.set('q', query.q);\n }\n if (query.locale) {\n params.set('locale', query.locale);\n }\n for (const field of query.fields ?? []) {\n params.append('fields', field);\n }\n for (const path of query.populate ?? []) {\n params.append('populate', path);\n }\n if (query.status) {\n params.set('status', query.status);\n }\n if (query.author) {\n params.set('author', query.author);\n }\n const serialised = params.toString();\n return serialised ? `?${serialised}` : '';\n};\n","import type { RequestFn } from '../request.js';\nimport { toContentQueryString } from './contentQuery.js';\nimport type {\n AdminEntry,\n AdminEntryPage,\n ContentListQuery,\n CreateEntryInput,\n EditorManifest,\n EntryLocalesInput,\n ExtensionThemeList,\n RevisionDetail,\n RevisionSummary,\n UpdateEntryInput,\n} from './contentTypes.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport { toQueryString } from './query.js';\n\nconst modelPath = (modelKey: string) => withId(ADMIN_PATHS.content, modelKey);\nconst entryPath = (modelKey: string, id: string) => withId(modelPath(modelKey), id);\nconst revisionsPath = (modelKey: string, id: string) => `${entryPath(modelKey, id)}/revisions`;\n\n/**\n * Content of any model through the generic admin routes (`/api/admin/content/:modelKey`, where `modelKey`\n * is the model's singular API ID for collections too; only the delivery API uses the plural). Drafts are read\n * and written here; publishing is per locale. Writes carry the draft `version` the editor saw and fail with\n * 409 CONTENT_VERSION_CONFLICT (or SCHEMA_CHANGED) when it moved.\n */\nexport const createContentApi = (request: RequestFn) => ({\n content: {\n list: (modelKey: string, query: ContentListQuery = {}) =>\n request<AdminEntryPage>(`${modelPath(modelKey)}${toContentQueryString(query)}`),\n get: (modelKey: string, id: string, { locale }: { locale?: string } = {}) =>\n request<AdminEntry>(`${entryPath(modelKey, id)}${toQueryString({ locale })}`),\n /** Fully validated (`required` included); 422 CONTENT_INVALID with `details.issues`. */\n create: (modelKey: string, body: CreateEntryInput) =>\n request<AdminEntry>(modelPath(modelKey), { method: 'POST', body }),\n /** Saves a patch of one locale's draft; `autosave` skips `required` and creates no revision. */\n update: (modelKey: string, id: string, body: UpdateEntryInput) =>\n request<AdminEntry>(entryPath(modelKey, id), { method: 'PUT', body }),\n /** 409 ENTRY_REFERENCED with `details.referrers` while other entries point at it. */\n remove: (modelKey: string, id: string) => request<void>(entryPath(modelKey, id), { method: 'DELETE' }),\n duplicate: (modelKey: string, id: string) =>\n request<AdminEntry>(`${entryPath(modelKey, id)}/duplicate`, { method: 'POST' }),\n publish: (modelKey: string, id: string, body: EntryLocalesInput = {}) =>\n request<AdminEntry>(`${entryPath(modelKey, id)}/publish`, { method: 'POST', body }),\n unpublish: (modelKey: string, id: string, body: EntryLocalesInput = {}) =>\n request<AdminEntry>(`${entryPath(modelKey, id)}/unpublish`, { method: 'POST', body }),\n revisions: async (modelKey: string, id: string, { locale }: { locale?: string } = {}) =>\n (\n await request<{ items: RevisionSummary[] }>(\n `${revisionsPath(modelKey, id)}${toQueryString({ locale })}`,\n )\n ).items,\n revision: (modelKey: string, id: string, revisionId: string) =>\n request<RevisionDetail>(withId(revisionsPath(modelKey, id), revisionId)),\n /** Brings an older revision back as the new draft of its locale (a new revision). */\n restore: (modelKey: string, id: string, revisionId: string, expectedVersion: number) =>\n request<AdminEntry>(`${withId(revisionsPath(modelKey, id), revisionId)}/restore`, {\n method: 'POST',\n body: { expectedVersion },\n }),\n },\n extensions: {\n /** Custom field editors the project installed (`shapio.config` + `extensions/editors/*.js`). */\n editors: () => request<EditorManifest>(ADMIN_PATHS.editorManifest),\n /** Admin colour themes the project declares (`shapio.config` `themes`). Public: no session needed. */\n themes: () => request<ExtensionThemeList>(ADMIN_PATHS.extensionThemes),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport type {\n ContentCounts,\n ContentHealthPage,\n ContentHealthQuery,\n ContentHealthSummary,\n EntryPresence,\n ModelPresence,\n PresenceHeartbeatInput,\n PreflightInput,\n PreflightResponse,\n} from './editingTypes.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport { toQueryString } from './query.js';\n\nconst entryPath = (base: string, modelKey: string, id: string) => withId(withId(base, modelKey), id);\n\n/** The entry document's endpoints: pre-flight, content health (the Inbox), presence and counts. */\nexport const createEditingApi = (request: RequestFn) => ({\n preflight: {\n /** What publishing these locales would run into, without publishing (no hooks, no locks). */\n run: (modelKey: string, id: string, body: PreflightInput = {}) =>\n request<PreflightResponse>(`${entryPath(ADMIN_PATHS.content, modelKey, id)}/preflight`, {\n method: 'POST',\n body,\n }),\n },\n contentHealth: {\n list: (query: ContentHealthQuery = {}) =>\n request<ContentHealthPage>(`${ADMIN_PATHS.contentHealth}${toQueryString(query)}`),\n summary: () => request<ContentHealthSummary>(`${ADMIN_PATHS.contentHealth}/summary`),\n },\n presence: {\n /** Heartbeat (every 15s while the document is visible); returns who else has the entry open. */\n heartbeat: (modelKey: string, id: string, body: PresenceHeartbeatInput) =>\n request<EntryPresence>(entryPath(ADMIN_PATHS.presence, modelKey, id), { method: 'PUT', body }),\n entry: (modelKey: string, id: string) =>\n request<EntryPresence>(entryPath(ADMIN_PATHS.presence, modelKey, id)),\n /** Everyone editing an entry of the model (list rows). */\n model: (modelKey: string) => request<ModelPresence>(withId(ADMIN_PATHS.presence, modelKey)),\n leave: (modelKey: string, id: string, tabId: string) =>\n request<void>(`${entryPath(ADMIN_PATHS.presence, modelKey, id)}${toQueryString({ tabId })}`, {\n method: 'DELETE',\n }),\n },\n contentCounts: {\n list: () => request<ContentCounts>(ADMIN_PATHS.contentCounts),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport type {\n CreateMediaFolderInput,\n CreateUploadInput,\n MediaAsset,\n MediaAssetPage,\n MediaAssetQuery,\n MediaFolder,\n MediaUsagePage,\n MoveMediaAssetsInput,\n MoveMediaAssetsResult,\n ReplaceUploadInput,\n UpdateMediaAssetInput,\n UpdateMediaFolderInput,\n UploadGrant,\n} from './mediaTypes.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport { toQueryString } from './query.js';\n\n/** The media library: folders, assets, and the two-step upload (grant, then confirm). */\nexport const createMediaApi = (request: RequestFn) => ({\n media: {\n folders: {\n /** The whole tree, flat: build it from `parentId`. */\n list: async () => (await request<{ items: MediaFolder[] }>(ADMIN_PATHS.mediaFolders)).items,\n create: (body: CreateMediaFolderInput) =>\n request<MediaFolder>(ADMIN_PATHS.mediaFolders, { method: 'POST', body }),\n /** Rename and/or move; 409 VERSION_CONFLICT when `expectedVersion` is stale. */\n update: (id: string, body: UpdateMediaFolderInput) =>\n request<MediaFolder>(withId(ADMIN_PATHS.mediaFolders, id), { method: 'PATCH', body }),\n /** Only empty folders: 409 FOLDER_NOT_EMPTY otherwise. */\n remove: (id: string) => request<void>(withId(ADMIN_PATHS.mediaFolders, id), { method: 'DELETE' }),\n },\n assets: {\n list: (query: MediaAssetQuery = {}) =>\n request<MediaAssetPage>(`${ADMIN_PATHS.mediaAssets}${toQueryString(query)}`),\n get: (id: string) => request<MediaAsset>(withId(ADMIN_PATHS.mediaAssets, id)),\n update: (id: string, body: UpdateMediaAssetInput) =>\n request<MediaAsset>(withId(ADMIN_PATHS.mediaAssets, id), { method: 'PATCH', body }),\n /** 409 MEDIA_IN_USE when content references the asset; owners may pass `force`. */\n remove: (id: string, { force = false }: { force?: boolean } = {}) =>\n request<void>(\n `${withId(ADMIN_PATHS.mediaAssets, id)}${toQueryString({ force: force || undefined })}`,\n {\n method: 'DELETE',\n },\n ),\n move: (body: MoveMediaAssetsInput) =>\n request<MoveMediaAssetsResult>(`${ADMIN_PATHS.mediaAssets}/move`, { method: 'POST', body }),\n /** \"Used in\": the entries that reference the asset. */\n usage: (id: string) => request<MediaUsagePage>(`${withId(ADMIN_PATHS.mediaAssets, id)}/usage`),\n /** An upload grant that replaces the asset's file and keeps its ID; confirm it like any upload. */\n replace: (id: string, body: ReplaceUploadInput) =>\n request<UploadGrant>(`${withId(ADMIN_PATHS.mediaAssets, id)}/replace`, { method: 'POST', body }),\n },\n uploads: {\n create: (body: CreateUploadInput) =>\n request<UploadGrant>(ADMIN_PATHS.mediaUploads, { method: 'POST', body }),\n /** Step 3: the server checks the stored bytes and records the asset (201 new, 200 replaced). */\n confirm: (grantId: string) =>\n request<MediaAsset>(`${withId(ADMIN_PATHS.mediaUploads, grantId)}/confirm`, { method: 'POST' }),\n },\n },\n});\n\n/** The form for step 2 of an upload: the grant's fields in order, then the file. */\nexport const buildUploadForm = (grant: UploadGrant, file: Blob, filename: string): FormData => {\n const form = new FormData();\n for (const [name, value] of Object.entries(grant.upload.fields)) {\n form.append(name, value);\n }\n form.append(grant.upload.fileField, file, filename);\n return form;\n};\n\n/**\n * Where to send a grant's bytes. Shapio's own upload route (local storage) is addressed through the base URL\n * the caller already talks to, which keeps it reachable when PUBLIC_URL differs from that address (the\n * admin's dev server, a proxy, a container network). Bucket URLs (presigned POST) are used as given.\n */\nexport const resolveUploadUrl = (grant: UploadGrant, apiBaseUrl: string): string => {\n const ownRoute = `/api/media/uploads/${encodeURIComponent(grant.grantId)}`;\n const url = new URL(grant.upload.url);\n const base = apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`;\n return url.pathname.endsWith(ownRoute) ? new URL(ownRoute.slice(1), base).href : grant.upload.url;\n};\n","import type { RequestFn } from '../request.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport type {\n ConnectionTestResult,\n CreateDeploymentConnectionInput,\n CreatePreviewTokenInput,\n CreateScheduleInput,\n CreateWebhookInput,\n DeploymentConnection,\n DeploymentConnectionCreated,\n DeploymentRun,\n DeploymentRunQuery,\n Job,\n JobQuery,\n JobSummary,\n OpenPreviewInput,\n OpenPreviewResult,\n PreviewTarget,\n Page,\n PreviewToken,\n PreviewTokenCreated,\n ScheduledPublication,\n ScheduleQuery,\n UpdateDeploymentConnectionInput,\n UpdateWebhookInput,\n Webhook,\n WebhookDelivery,\n WebhookEventType,\n WebhookWithSecret,\n} from './publishingTypes.js';\nimport { toQueryString } from './query.js';\n\n/** Jobs, scheduled publications, webhooks, deployment connections and runs, preview (package H). */\nexport const createPublishingApi = (request: RequestFn) => ({\n jobs: {\n list: (query: JobQuery = {}) => request<Page<Job>>(`${ADMIN_PATHS.jobs}${toQueryString(query)}`),\n summary: () => request<JobSummary>(`${ADMIN_PATHS.jobs}/summary`),\n get: (id: string) => request<Job>(withId(ADMIN_PATHS.jobs, id)),\n /** Dead jobs only: runs again from attempt 1. 409 JOB_NOT_RETRYABLE otherwise. */\n retry: (id: string) => request<Job>(`${withId(ADMIN_PATHS.jobs, id)}/retry`, { method: 'POST' }),\n },\n schedules: {\n list: (query: ScheduleQuery = {}) =>\n request<Page<ScheduledPublication>>(`${ADMIN_PATHS.schedules}${toQueryString(query)}`),\n create: (body: CreateScheduleInput) =>\n request<ScheduledPublication>(ADMIN_PATHS.schedules, { method: 'POST', body }),\n cancel: (id: string) => request<void>(withId(ADMIN_PATHS.schedules, id), { method: 'DELETE' }),\n },\n webhooks: {\n list: () => request<Webhook[]>(ADMIN_PATHS.webhooks),\n events: async () =>\n (await request<{ items: WebhookEventType[] }>(`${ADMIN_PATHS.webhooks}/events`)).items,\n get: (id: string) => request<Webhook>(withId(ADMIN_PATHS.webhooks, id)),\n create: (body: CreateWebhookInput) =>\n request<WebhookWithSecret>(ADMIN_PATHS.webhooks, { method: 'POST', body }),\n update: (id: string, body: UpdateWebhookInput) =>\n request<Webhook>(withId(ADMIN_PATHS.webhooks, id), { method: 'PATCH', body }),\n remove: (id: string) => request<void>(withId(ADMIN_PATHS.webhooks, id), { method: 'DELETE' }),\n rotateSecret: (id: string) =>\n request<WebhookWithSecret>(`${withId(ADMIN_PATHS.webhooks, id)}/rotate-secret`, { method: 'POST' }),\n /** Queues a `webhook.test` delivery; poll the delivery log for its outcome. */\n test: (id: string) =>\n request<WebhookDelivery>(`${withId(ADMIN_PATHS.webhooks, id)}/test`, { method: 'POST' }),\n deliveries: (id: string, query: { cursor?: string; limit?: number } = {}) =>\n request<Page<WebhookDelivery>>(`${withId(ADMIN_PATHS.webhooks, id)}/deliveries${toQueryString(query)}`),\n /** Sends the same payload again as a new delivery. */\n redeliver: (id: string, deliveryId: string) =>\n request<WebhookDelivery>(\n `${withId(ADMIN_PATHS.webhooks, id)}/deliveries/${encodeURIComponent(deliveryId)}/redeliver`,\n { method: 'POST' },\n ),\n },\n deployments: {\n connections: {\n list: () => request<DeploymentConnection[]>(ADMIN_PATHS.deploymentConnections),\n get: (id: string) => request<DeploymentConnection>(withId(ADMIN_PATHS.deploymentConnections, id)),\n create: (body: CreateDeploymentConnectionInput) =>\n request<DeploymentConnectionCreated>(ADMIN_PATHS.deploymentConnections, { method: 'POST', body }),\n update: (id: string, body: UpdateDeploymentConnectionInput) =>\n request<DeploymentConnection>(withId(ADMIN_PATHS.deploymentConnections, id), {\n method: 'PATCH',\n body,\n }),\n remove: (id: string) =>\n request<void>(withId(ADMIN_PATHS.deploymentConnections, id), { method: 'DELETE' }),\n test: (id: string) =>\n request<ConnectionTestResult>(`${withId(ADMIN_PATHS.deploymentConnections, id)}/test`, {\n method: 'POST',\n }),\n /** A manual run at the current publication snapshot. */\n trigger: (id: string) =>\n request<DeploymentRun>(`${withId(ADMIN_PATHS.deploymentConnections, id)}/runs`, { method: 'POST' }),\n },\n runs: {\n list: (query: DeploymentRunQuery = {}) =>\n request<Page<DeploymentRun>>(`${ADMIN_PATHS.deploymentRuns}${toQueryString(query)}`),\n get: (id: string) => request<DeploymentRun>(withId(ADMIN_PATHS.deploymentRuns, id)),\n /** A new run (linked by `retryOf`) at the current snapshot. */\n retry: (id: string) =>\n request<DeploymentRun>(`${withId(ADMIN_PATHS.deploymentRuns, id)}/retry`, { method: 'POST' }),\n },\n },\n preview: {\n tokens: {\n list: (query: { entryId?: string } = {}) =>\n request<PreviewToken[]>(`${ADMIN_PATHS.previewTokens}${toQueryString(query)}`),\n create: (body: CreatePreviewTokenInput) =>\n request<PreviewTokenCreated>(ADMIN_PATHS.previewTokens, { method: 'POST', body }),\n revoke: (id: string) => request<void>(withId(ADMIN_PATHS.previewTokens, id), { method: 'DELETE' }),\n },\n /** The site's connections with a preview URL (the entry form's Preview pane). */\n targets: () => request<PreviewTarget[]>(`${ADMIN_PATHS.preview}/targets`),\n /** The entry form's Preview action: a short-lived entry token and the rendered preview URL. */\n open: (body: OpenPreviewInput) =>\n request<OpenPreviewResult>(`${ADMIN_PATHS.preview}/open`, { method: 'POST', body }),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport { toQueryString } from './query.js';\nimport type { SchemaApplyInput, SchemaApplyResult, SchemaExport } from './schemaSyncTypes.js';\nimport type {\n ChangeOutcome,\n ChangeScopeInput,\n ChangeScopeOutcome,\n CreateDefinitionInput,\n CreateLocaleInput,\n DefinitionCategory,\n DefinitionPayload,\n DefinitionDetail,\n DefinitionScope,\n DefinitionListItem,\n DefinitionRevision,\n DeleteLocaleResult,\n Locale,\n PlanPreview,\n PlanUpdateInput,\n SchemaChangeJob,\n SchemaSettings,\n SchemaSummary,\n SetDefaultLocaleResult,\n UpdateDefinitionInput,\n UpdateLocaleInput,\n UpdateSchemaSettingsInput,\n} from './schemaTypes.js';\n\nconst DEFINITION_PATHS = {\n model: ADMIN_PATHS.models,\n component: ADMIN_PATHS.components,\n} as const satisfies Record<DefinitionCategory, string>;\n\n/** Models (collections and singletons) and components share one set of endpoints under their own base. */\nexport const createDefinitionApi = (request: RequestFn, category: DefinitionCategory) => {\n const base = DEFINITION_PATHS[category];\n return {\n /** The site's view (shared definitions and its own); `{ scope: 'network' }` lists the shared ones. */\n list: async (options: { scope?: DefinitionScope } = {}) =>\n (await request<{ items: DefinitionListItem[] }>(`${base}${toQueryString(options)}`)).items,\n get: (id: string) => request<DefinitionDetail>(withId(base, id)),\n /** Creates and activates a definition (`pending` when prerequisites must run first). */\n create: (body: CreateDefinitionInput) => request<ChangeOutcome>(base, { method: 'POST', body }),\n /** Plan preview of a create: classification and impact, nothing written. */\n planCreate: (definition: DefinitionPayload, scope?: DefinitionScope) =>\n request<PlanPreview>(`${base}/plan`, {\n method: 'POST',\n body: scope ? { definition, scope } : { definition },\n }),\n /** Shares a definition with all sites, or keeps it on one (needs schema.create on every site). */\n changeScope: (id: string, body: ChangeScopeInput) =>\n request<ChangeScopeOutcome>(`${withId(base, id)}/scope`, { method: 'PUT', body }),\n /** Changes a definition; 409 SCHEMA_VERSION_CONFLICT when `expectedVersion` is stale. */\n update: (id: string, body: UpdateDefinitionInput) =>\n request<ChangeOutcome>(withId(base, id), { method: 'PUT', body }),\n planUpdate: (id: string, body: PlanUpdateInput) =>\n request<PlanPreview>(`${withId(base, id)}/plan`, { method: 'POST', body }),\n /** Soft delete: entries are kept and reappear if the definition is applied again. */\n remove: (id: string, expectedVersion: number) =>\n request<ChangeOutcome>(`${withId(base, id)}${toQueryString({ expectedVersion })}`, {\n method: 'DELETE',\n }),\n revisions: async (id: string) =>\n (await request<{ items: DefinitionRevision[] }>(`${withId(base, id)}/revisions`)).items,\n changes: async (id: string) =>\n (await request<{ items: SchemaChangeJob[] }>(`${withId(base, id)}/changes`)).items,\n };\n};\n\n/** Schema-wide endpoints: the version summary, planned-change status, the read-only lock, locales. */\nexport const createSchemaApi = (request: RequestFn) => ({\n models: createDefinitionApi(request, 'model'),\n components: createDefinitionApi(request, 'component'),\n schema: {\n /** The global schema version and every visible definition's version (cheap; poll it for changes). */\n summary: () => request<SchemaSummary>(ADMIN_PATHS.schema),\n change: (changeId: string) => request<SchemaChangeJob>(withId(ADMIN_PATHS.schemaChanges, changeId)),\n /** Every definition in the pull format, with the schema version they come from (`shapio schema pull`). */\n export: (options: { scope?: DefinitionScope } = {}) =>\n request<SchemaExport>(`${ADMIN_PATHS.schemaExport}${toQueryString(options)}`),\n /** Applies definition files live through the change planner; refuses when the base moved (409). */\n apply: (body: SchemaApplyInput) =>\n request<SchemaApplyResult>(ADMIN_PATHS.schemaApply, { method: 'POST', body }),\n settings: () => request<SchemaSettings>(ADMIN_PATHS.schemaSettings),\n updateSettings: (body: UpdateSchemaSettingsInput) =>\n request<SchemaSettings>(ADMIN_PATHS.schemaSettings, { method: 'PUT', body }),\n },\n locales: {\n list: async () => (await request<{ items: Locale[] }>(ADMIN_PATHS.locales)).items,\n create: (body: CreateLocaleInput) => request<Locale>(ADMIN_PATHS.locales, { method: 'POST', body }),\n update: (code: string, body: UpdateLocaleInput) =>\n request<Locale>(withId(ADMIN_PATHS.locales, code), { method: 'PUT', body }),\n /** A contract change: without `acknowledgeBreaking` the server answers 409 SCHEMA_CHANGE_NOT_ACKNOWLEDGED. */\n setDefault: (code: string, acknowledgeBreaking: boolean) =>\n request<SetDefaultLocaleResult>(`${withId(ADMIN_PATHS.locales, code)}/default`, {\n method: 'POST',\n body: { acknowledgeBreaking },\n }),\n /**\n * Deletes a locale and purges its content. When content exists and `acknowledgeDestructive` is false,\n * the server answers 409 SCHEMA_CHANGE_NOT_ACKNOWLEDGED with `details.plan.impact.affectedHeads`.\n */\n remove: (code: string, acknowledgeDestructive: boolean) =>\n request<DeleteLocaleResult>(\n `${withId(ADMIN_PATHS.locales, code)}${toQueryString({ acknowledgeDestructive: acknowledgeDestructive || undefined })}`,\n { method: 'DELETE' },\n ),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport type {\n CreateSiteInput,\n SetSiteAppRolesInput,\n Site,\n SiteAppRoles,\n UpdateSiteInput,\n} from './sitesTypes.js';\n\nexport const SITES_PATHS = { sites: '/api/admin/sites' } as const;\n\n/** The admin API header that names the site a site-scoped request is about (default: the primary site). */\nexport const SITE_HEADER = 'shapio-site';\n\nconst sitePath = (id: string) => `${SITES_PATHS.sites}/${encodeURIComponent(id)}`;\n\n/** Sites (network routes): listing shows the sites the caller holds a role on; changes need `sites.manage`. */\nexport const createSitesApi = (request: RequestFn) => ({\n sites: {\n list: () => request<Site[]>(SITES_PATHS.sites),\n get: (id: string) => request<Site>(sitePath(id)),\n create: (body: CreateSiteInput) => request<Site>(SITES_PATHS.sites, { method: 'POST', body }),\n update: (id: string, body: UpdateSiteInput) => request<Site>(sitePath(id), { method: 'PATCH', body }),\n /** Only an empty site (409 `SITE_NOT_EMPTY`); never the primary site (409 `SITE_IS_PRIMARY`). */\n remove: (id: string) => request<void>(sitePath(id), { method: 'DELETE' }),\n /** The app roles bound to the site's anonymous callers (`public`) and signed-in app users (`authenticated`). */\n appRoles: {\n get: (id: string) => request<SiteAppRoles>(`${sitePath(id)}/app-roles`),\n /** Replaces both bindings (`roles.manage`). */\n set: (id: string, body: SetSiteAppRolesInput) =>\n request<SiteAppRoles>(`${sitePath(id)}/app-roles`, { method: 'PUT', body }),\n },\n },\n});\n","import type { RequestFn } from '../request.js';\nimport { toQueryString } from './query.js';\nimport type { FieldUsageQuery, FieldUsageResponse } from './usageTypes.js';\n\nexport const USAGE_PATHS = { fields: '/api/admin/usage/fields' } as const;\n\n/** Who reads which fields (needs `tokens.manage`). */\nexport const createUsageApi = (request: RequestFn) => ({\n usage: {\n fields: (query: FieldUsageQuery) =>\n request<FieldUsageResponse>(`${USAGE_PATHS.fields}${toQueryString(query)}`),\n },\n});\n","import type { RequestFn } from '../request.js';\nimport { createAppUsersApi } from './appUsers.js';\nimport { createAssistApi } from './assist.js';\nimport { createChangeSetsApi } from './changeSets.js';\nimport { createContentApi } from './content.js';\nimport { createEditingApi } from './editing.js';\nimport { createMediaApi } from './media.js';\nimport { ADMIN_PATHS, withId } from './paths.js';\nimport { createPublishingApi } from './publishing.js';\nimport { toQueryString } from './query.js';\nimport { createSchemaApi } from './schema.js';\nimport { createSitesApi } from './sites.js';\nimport type {\n AcceptInvitationInput,\n AdminSession,\n AdminUser,\n ApiToken,\n AuditPage,\n AuditQuery,\n ChangePasswordInput,\n CreateApiTokenInput,\n CreatedApiToken,\n CreateRoleInput,\n CsrfResponse,\n InspectInvitationResponse,\n Invitation,\n InvitationLink,\n InviteUserInput,\n LoginInput,\n MeResponse,\n PasswordResetConfirmInput,\n PasswordResetRequestInput,\n Role,\n SessionStarted,\n SetupInput,\n SetupStatusResponse,\n UpdateAdminUserInput,\n UpdateProfileInput,\n UpdateRoleInput,\n} from './types.js';\nimport { createUsageApi } from './usage.js';\n\n/**\n * Admin endpoints: identity (setup, auth, sessions, users, invitations, roles, tokens, audit) and the schema\n * registry (models, components, schema, locales), the media library and content.\n */\nexport const createAdminApi = (request: RequestFn) => ({\n setup: {\n status: () => request<SetupStatusResponse>(ADMIN_PATHS.setup),\n complete: (body: SetupInput) => request<SessionStarted>(ADMIN_PATHS.setup, { method: 'POST', body }),\n },\n auth: {\n csrf: () => request<CsrfResponse>(ADMIN_PATHS.csrf),\n login: (body: LoginInput) => request<SessionStarted>(ADMIN_PATHS.login, { method: 'POST', body }),\n logout: () => request<void>(ADMIN_PATHS.logout, { method: 'POST' }),\n me: () => request<MeResponse>(ADMIN_PATHS.me),\n updateProfile: (body: UpdateProfileInput) =>\n request<AdminUser>(ADMIN_PATHS.me, { method: 'PATCH', body }),\n /** The session is rotated: the response carries the new session's CSRF token. */\n changePassword: (body: ChangePasswordInput) =>\n request<CsrfResponse>(ADMIN_PATHS.password, { method: 'POST', body }),\n requestPasswordReset: (body: PasswordResetRequestInput) =>\n request<void>(ADMIN_PATHS.passwordReset, { method: 'POST', body }),\n confirmPasswordReset: (body: PasswordResetConfirmInput) =>\n request<void>(ADMIN_PATHS.passwordResetConfirm, { method: 'POST', body }),\n },\n sessions: {\n list: () => request<AdminSession[]>(ADMIN_PATHS.sessions),\n revoke: (id: string) => request<void>(withId(ADMIN_PATHS.sessions, id), { method: 'DELETE' }),\n },\n users: {\n list: () => request<AdminUser[]>(ADMIN_PATHS.users),\n get: (id: string) => request<AdminUser>(withId(ADMIN_PATHS.users, id)),\n update: (id: string, body: UpdateAdminUserInput) =>\n request<AdminUser>(withId(ADMIN_PATHS.users, id), { method: 'PATCH', body }),\n remove: (id: string) => request<void>(withId(ADMIN_PATHS.users, id), { method: 'DELETE' }),\n revokeSessions: (id: string) =>\n request<void>(`${withId(ADMIN_PATHS.users, id)}/sessions`, { method: 'DELETE' }),\n },\n invitations: {\n list: () => request<Invitation[]>(ADMIN_PATHS.invitations),\n create: (body: InviteUserInput) => request<Invitation>(ADMIN_PATHS.invitations, { method: 'POST', body }),\n revoke: (id: string) => request<void>(withId(ADMIN_PATHS.invitations, id), { method: 'DELETE' }),\n /** A fresh link to send by hand; any earlier link for this invitation stops working. */\n link: (id: string) =>\n request<InvitationLink>(`${withId(ADMIN_PATHS.invitations, id)}/link`, { method: 'POST' }),\n /** Public: the token travels in the body, never in a URL the server logs. */\n inspect: (token: string) =>\n request<InspectInvitationResponse>(ADMIN_PATHS.inspectInvitation, { method: 'POST', body: { token } }),\n accept: (body: AcceptInvitationInput) =>\n request<SessionStarted>(ADMIN_PATHS.acceptInvitation, { method: 'POST', body }),\n },\n roles: {\n list: () => request<Role[]>(ADMIN_PATHS.roles),\n get: (id: string) => request<Role>(withId(ADMIN_PATHS.roles, id)),\n create: (body: CreateRoleInput) => request<Role>(ADMIN_PATHS.roles, { method: 'POST', body }),\n update: (id: string, body: UpdateRoleInput) =>\n request<Role>(withId(ADMIN_PATHS.roles, id), { method: 'PATCH', body }),\n remove: (id: string) => request<void>(withId(ADMIN_PATHS.roles, id), { method: 'DELETE' }),\n },\n tokens: {\n list: () => request<ApiToken[]>(ADMIN_PATHS.tokens),\n create: (body: CreateApiTokenInput) =>\n request<CreatedApiToken>(ADMIN_PATHS.tokens, { method: 'POST', body }),\n revoke: (id: string) => request<void>(withId(ADMIN_PATHS.tokens, id), { method: 'DELETE' }),\n },\n audit: {\n list: (query: AuditQuery = {}) => request<AuditPage>(`${ADMIN_PATHS.audit}${toQueryString(query)}`),\n },\n ...createSchemaApi(request),\n ...createMediaApi(request),\n ...createContentApi(request),\n ...createEditingApi(request),\n ...createPublishingApi(request),\n ...createAppUsersApi(request),\n ...createChangeSetsApi(request),\n ...createUsageApi(request),\n ...createSitesApi(request),\n ...createAssistApi(request),\n});\n\nexport type AdminApi = ReturnType<typeof createAdminApi>;\nexport { ADMIN_PATHS } from './paths.js';\nexport * from './types.js';\nexport * from './schemaTypes.js';\nexport * from './schemaSyncTypes.js';\nexport * from './mediaTypes.js';\nexport * from './contentTypes.js';\nexport * from './publishingTypes.js';\nexport * from './appUsersTypes.js';\nexport * from './changeSetTypes.js';\nexport * from './usageTypes.js';\nexport * from './sitesTypes.js';\nexport { SITE_HEADER, SITES_PATHS } from './sites.js';\nexport { toContentQueryString } from './contentQuery.js';\nexport { buildUploadForm, resolveUploadUrl } from './media.js';\nexport { HEALTH_RULES } from './editingTypes.js';\nexport { ASSIST_PATHS } from './assist.js';\nexport { CONTENT_OPS_RULES } from './assistTypes.js';\n","import type { RequestFn } from '../request.js';\nimport type {\n AppChangePasswordInput,\n AppLoginInput,\n AppOAuthProvider,\n AppRegisterInput,\n AppRegisterResult,\n AppSession,\n AppUser,\n} from './types.js';\n\nexport const APP_AUTH_PATHS = {\n register: '/api/app-auth/register',\n login: '/api/app-auth/login',\n refresh: '/api/app-auth/refresh',\n logout: '/api/app-auth/logout',\n me: '/api/app-auth/me',\n password: '/api/app-auth/me/password',\n confirmEmail: '/api/app-auth/confirm-email',\n resendConfirmation: '/api/app-auth/confirm-email/resend',\n passwordReset: '/api/app-auth/password-reset',\n passwordResetConfirm: '/api/app-auth/password-reset/confirm',\n providers: '/api/app-auth/providers',\n oauthExchange: '/api/app-auth/oauth/exchange',\n} as const;\n\n/**\n * App-user endpoints. Calls that act as the signed-in user need a client created with `token: accessToken`.\n * `baseUrl` is the client's base URL, used to build the OAuth start link the browser navigates to.\n */\nexport const createAppAuthApi = (request: RequestFn, baseUrl: string) => ({\n register: (body: AppRegisterInput) =>\n request<AppRegisterResult>(APP_AUTH_PATHS.register, { method: 'POST', body }),\n login: (body: AppLoginInput) => request<AppSession>(APP_AUTH_PATHS.login, { method: 'POST', body }),\n refresh: (refreshToken: string) =>\n request<AppSession>(APP_AUTH_PATHS.refresh, { method: 'POST', body: { refreshToken } }),\n /**\n * Signs the account out everywhere: this login's refresh tokens are revoked, and every access token the\n * account holds (on any device) is refused from the next request. Other logins recover with their own\n * refresh token.\n */\n logout: (refreshToken: string) =>\n request<void>(APP_AUTH_PATHS.logout, { method: 'POST', body: { refreshToken } }),\n /** The signed-in user. Answers 401 once the account logged out anywhere, changed its password or was blocked. */\n me: () => request<AppUser>(APP_AUTH_PATHS.me),\n updateMe: (body: { name: string }) => request<AppUser>(APP_AUTH_PATHS.me, { method: 'PATCH', body }),\n /** Returns a new session; every other sign-in of the account is revoked. */\n changePassword: (body: AppChangePasswordInput) =>\n request<AppSession>(APP_AUTH_PATHS.password, { method: 'POST', body }),\n deleteMe: (body: { password?: string } = {}) =>\n request<void>(APP_AUTH_PATHS.me, { method: 'DELETE', body }),\n /** The token from the `#token=` fragment of the confirmation link. */\n confirmEmail: (token: string) =>\n request<void>(APP_AUTH_PATHS.confirmEmail, { method: 'POST', body: { token } }),\n resendConfirmation: (email: string) =>\n request<void>(APP_AUTH_PATHS.resendConfirmation, { method: 'POST', body: { email } }),\n requestPasswordReset: (email: string) =>\n request<void>(APP_AUTH_PATHS.passwordReset, { method: 'POST', body: { email } }),\n confirmPasswordReset: (body: { token: string; password: string }) =>\n request<void>(APP_AUTH_PATHS.passwordResetConfirm, { method: 'POST', body }),\n providers: async () =>\n (await request<{ providers: AppOAuthProvider[] }>(APP_AUTH_PATHS.providers)).providers,\n /**\n * Where to send the browser to sign in with a provider. `codeChallenge` comes from `createPkcePair()`;\n * keep its `codeVerifier` until the browser returns. It comes back to `redirectTo` (an allowed return URL,\n * by default an origin listed in CORS_ORIGINS) with `?code=` (pass it to `exchangeCode`) or `?error=`.\n */\n oauthStartUrl: (provider: AppOAuthProvider, redirectTo: string, codeChallenge: string) =>\n `${baseUrl.replace(/\\/+$/, '')}/api/app-auth/oauth/${provider}/start?redirectTo=${encodeURIComponent(redirectTo)}&codeChallenge=${encodeURIComponent(codeChallenge)}`,\n /** Trades the one-time code for a session. A wrong verifier spends the code: start the sign-in again. */\n exchangeCode: (code: string, codeVerifier: string) =>\n request<AppSession>(APP_AUTH_PATHS.oauthExchange, { method: 'POST', body: { code, codeVerifier } }),\n});\n\nexport type AppAuthApi = ReturnType<typeof createAppAuthApi>;\n","/**\n * Next.js data-cache support for delivery reads. Under Next (`process.env.NEXT_RUNTIME` is set) or when the\n * client is given a `next` option, every delivery read passes `next: { tags }` to `fetch`, so a site can\n * refresh exactly what changed with `revalidateTag`. The cache mode is only set when asked for, except that a\n * read pinned to a publication snapshot is immutable and always `force-cache`, and a drafts-mode read is never\n * cached or tagged (`no-store`). Elsewhere nothing is added.\n */\n\n/** Next's `fetch` cache modes the client passes through. */\nexport type NextCacheMode = 'force-cache' | 'no-store';\n\nexport type NextCacheOptions = {\n /** Next's `fetch` `cache` option. Unset: Next's own default, except pinned snapshot reads (`force-cache`). */\n cache?: NextCacheMode;\n /** Seconds a cached response stays fresh (`next.revalidate`); `false` keeps it until a tag is revalidated. */\n revalidate?: number | false;\n};\n\n/** The last argument of every delivery read: overrides the client's `next` option; `false` adds nothing. */\nexport type DeliveryReadOptions = { next?: NextCacheOptions | false };\n\n/** What a delivery read adds to its `fetch` init. */\nexport type NextFetchInit = {\n cache?: NextCacheMode;\n next?: { tags: string[]; revalidate?: number | false };\n};\n\nconst TAG_PREFIX = 'shapio';\n\n/**\n * The cache tags delivery reads carry (`revalidateTag(shapioTags.entry('articles', id), { expire: 0 })`).\n * Models are named by their route key: a collection's plural API ID, a singleton's API ID.\n */\nexport const shapioTags = {\n /** Every delivery read of the site; `shapio:site` when the client names no site. */\n site: (siteKey?: string) =>\n siteKey === undefined ? `${TAG_PREFIX}:site` : `${TAG_PREFIX}:site:${siteKey}`,\n /** Every read of one model (lists, singletons and its entries). */\n model: (routeKey: string) => `${TAG_PREFIX}:${routeKey}`,\n /** Reads of one entry by its ID. */\n entry: (routeKey: string, entryId: string) => `${TAG_PREFIX}:${routeKey}:${entryId}`,\n} as const;\n\n/** Spelled out so bundlers that inline `process.env.NEXT_RUNTIME` see it; guarded for browsers. */\nconst isNextRuntime = (): boolean => {\n try {\n return typeof process !== 'undefined' && Boolean(process.env.NEXT_RUNTIME);\n } catch {\n return false;\n }\n};\n\n/** What every delivery read needs to tag itself: the client's site, `next` option and drafts mode. */\nexport type DeliveryCacheContext = {\n site: string | undefined;\n next: NextCacheOptions | false | undefined;\n /** Drafts mode (`drafts: true`): reads ask for drafts, which are never cached. */\n drafts: boolean;\n};\n\nexport type NextReadInput = {\n /** The client's `next` option. */\n client: NextCacheOptions | false | undefined;\n /** The read's own `next` option. */\n read: NextCacheOptions | false | undefined;\n tags: string[];\n /** The read names a publication snapshot (immutable). */\n pinned: boolean;\n /** Drafts mode: under Next (or with any `next` option) the read is `no-store` and untagged. */\n drafts?: boolean;\n};\n\n/** The `cache` and `next` fetch options of one delivery read; empty outside Next unless asked for. */\nexport const nextFetchInit = ({\n client,\n read,\n tags,\n pinned,\n drafts = false,\n}: NextReadInput): NextFetchInit => {\n if (drafts) {\n // Drafts change on every save: never in Next's data cache, never tagged, whatever the `next` options say.\n const asked = (client !== undefined && client !== false) || (read !== undefined && read !== false);\n return asked || isNextRuntime() ? { cache: 'no-store' } : {};\n }\n if (read === false || (read === undefined && client === false)) {\n return {};\n }\n const configured = client === false ? read : read === undefined ? client : { ...client, ...read };\n if (configured === undefined && !isNextRuntime()) {\n return {};\n }\n if (pinned && read?.cache === undefined) {\n return { cache: 'force-cache', next: { tags } };\n }\n const cache = configured?.cache;\n const revalidate = configured?.revalidate;\n return {\n ...(cache === undefined ? {} : { cache }),\n next: { tags, ...(revalidate === undefined ? {} : { revalidate }) },\n };\n};\n","import { toContentQueryString } from './admin/contentQuery.js';\nimport type { DeliveryGetQuery, DeliveryItem, DeliveryList, DeliveryListQuery } from './deliveryTypes.js';\nimport {\n nextFetchInit,\n shapioTags,\n type DeliveryCacheContext,\n type DeliveryReadOptions,\n} from './nextCache.js';\nimport type { RequestFn } from './request.js';\n\nexport const DELIVERY_PATH = '/api/content';\n\nconst routePath = (routeKey: string) => `${DELIVERY_PATH}/${encodeURIComponent(routeKey)}`;\n\n/**\n * The content query string plus `snapshot`, `richText` and `seo`, which only delivery reads take, and\n * `publicationState=draft` in drafts mode.\n */\nconst deliveryQueryString = (\n { snapshot, richText, seo, ...query }: DeliveryListQuery,\n drafts: boolean,\n): string => {\n const extra = [\n ...(snapshot === undefined ? [] : [`snapshot=${encodeURIComponent(String(snapshot))}`]),\n ...(richText === undefined ? [] : [`richText=${encodeURIComponent(richText)}`]),\n ...(seo === undefined ? [] : [`seo=${encodeURIComponent(seo)}`]),\n ...(drafts ? ['publicationState=draft'] : []),\n ];\n const base = toContentQueryString(query);\n if (extra.length === 0) {\n return base;\n }\n return base ? `${base}&${extra.join('&')}` : `?${extra.join('&')}`;\n};\n\n/** Drafts cannot be pinned: the server refuses `snapshot` with drafts, and so does the client, before sending. */\nconst draftsPinned = () =>\n Promise.reject(\n new Error(\n 'Drafts mode reads saved drafts, which have no publication snapshot: leave `snapshot` out when the client has `drafts: true`',\n ),\n );\n\n/**\n * Published content, typed by the caller (`delivery.list<Article>('articles', { locale: 'fr', snapshot })`).\n * A collection is read with `list` (a page) and `get` (one entry); a singleton with `singleton`. Each read\n * takes Next.js cache options last and is tagged for `revalidateTag` (nextCache.ts): lists and singletons with\n * the site and model tags, `get` with the entry's tag too. In drafts mode (`drafts: true`) every read asks for\n * drafts (`publicationState=draft`), is never cached or tagged under Next, and refuses a pinned snapshot.\n */\nexport const createDeliveryApi = (request: RequestFn, cacheContext: DeliveryCacheContext) => {\n const { drafts } = cacheContext;\n const fetchInit = (tags: string[], query: DeliveryGetQuery, { next }: DeliveryReadOptions) =>\n nextFetchInit({\n client: cacheContext.next,\n read: next,\n tags,\n pinned: query.snapshot !== undefined,\n drafts,\n });\n const read = <R>(path: string, tags: string[], query: DeliveryListQuery, options: DeliveryReadOptions) =>\n drafts && query.snapshot !== undefined\n ? draftsPinned()\n : request<R>(`${path}${deliveryQueryString(query, drafts)}`, fetchInit(tags, query, options));\n const siteTag = shapioTags.site(cacheContext.site);\n return {\n list: <T = Record<string, unknown>>(\n routeKey: string,\n query: DeliveryListQuery = {},\n options: DeliveryReadOptions = {},\n ) => read<DeliveryList<T>>(routePath(routeKey), [siteTag, shapioTags.model(routeKey)], query, options),\n singleton: <T = Record<string, unknown>>(\n apiKey: string,\n query: DeliveryGetQuery = {},\n options: DeliveryReadOptions = {},\n ) => read<DeliveryItem<T>>(routePath(apiKey), [siteTag, shapioTags.model(apiKey)], query, options),\n get: <T = Record<string, unknown>>(\n routeKey: string,\n id: string,\n query: DeliveryGetQuery = {},\n options: DeliveryReadOptions = {},\n ) =>\n read<DeliveryItem<T>>(\n `${routePath(routeKey)}/${encodeURIComponent(id)}`,\n [siteTag, shapioTags.model(routeKey), shapioTags.entry(routeKey, id)],\n query,\n options,\n ),\n };\n};\n\nexport type DeliveryApi = ReturnType<typeof createDeliveryApi>;\n","import {\n nextFetchInit,\n shapioTags,\n type DeliveryCacheContext,\n type DeliveryReadOptions,\n} from './nextCache.js';\nimport type { RequestFn } from './request.js';\nimport type { DeliverySite } from './seoTypes.js';\n\nexport const DELIVERY_SITE_PATH = '/api/site';\n\n/**\n * The request's site as delivery sees it (key, name, SEO defaults), with the client's token and site. Under\n * Next.js the read carries the site tag (nextCache.ts); in drafts mode it is `no-store` and untagged instead\n * (the site has no draft state, so no `publicationState` is sent).\n */\nexport const createSiteApi = (request: RequestFn, cacheContext: DeliveryCacheContext) => ({\n get: ({ next }: DeliveryReadOptions = {}) =>\n request<DeliverySite>(\n DELIVERY_SITE_PATH,\n nextFetchInit({\n client: cacheContext.next,\n read: next,\n tags: [shapioTags.site(cacheContext.site)],\n pinned: false,\n drafts: cacheContext.drafts,\n }),\n ),\n});\n\nexport type SiteApi = ReturnType<typeof createSiteApi>;\n","import { toQueryString } from './admin/query.js';\nimport type { RequestFn } from './request.js';\nimport type {\n CurrentSnapshot,\n SnapshotChange,\n SnapshotChangesPage,\n SnapshotChangesQuery,\n} from './snapshotTypes.js';\n\nexport const SNAPSHOT_PATHS = {\n current: '/api/snapshots/current',\n changes: '/api/snapshots/changes',\n} as const;\n\n/** Snapshots and the diff between two of them, for incremental site builds (delivery credentials). */\nexport const createSnapshotsApi = (request: RequestFn) => {\n const changes = (query: SnapshotChangesQuery) =>\n request<SnapshotChangesPage>(`${SNAPSHOT_PATHS.changes}${toQueryString(query)}`);\n return {\n current: () => request<CurrentSnapshot>(SNAPSHOT_PATHS.current),\n changes,\n /** Every change between `from` and `to`, following `nextCursor` until the last page. */\n allChanges: async (query: Omit<SnapshotChangesQuery, 'after'>) => {\n const items: SnapshotChange[] = [];\n let page = await changes(query);\n items.push(...page.items);\n while (page.nextCursor !== null) {\n page = await changes({ ...query, to: page.to, after: page.nextCursor });\n items.push(...page.items);\n }\n return { from: page.from, to: page.to, schemaVersions: page.schemaVersions, items };\n },\n };\n};\n","import { createDeliveryApi } from './delivery.js';\nimport type { NextCacheOptions } from './nextCache.js';\nimport type { RequestFn } from './request.js';\nimport { createSiteApi } from './siteDelivery.js';\nimport { createSnapshotsApi } from './snapshots.js';\n\nexport type DeliveryClientOptions = {\n /** The site key the reads are tagged with (`shapioTags.site`); the transport names the site itself. */\n site?: string;\n /** Next.js data-cache options, as `createClient`'s `next` option. */\n next?: NextCacheOptions | false;\n /** Drafts mode, as `createClient`'s `drafts` option. */\n drafts?: boolean;\n};\n\n/**\n * The read side of the client over any transport: published content (`delivery`), the site (`site`) and\n * publication snapshots (`snapshots`). `createClient` builds it over HTTP; `@shapio/local` over the delivery\n * API running in the same process. The transport receives exactly the paths the HTTP client sends.\n */\nexport const createDeliveryClient = (\n request: RequestFn,\n { site, next, drafts = false }: DeliveryClientOptions = {},\n) => {\n const cacheContext = { site, next, drafts };\n return {\n /** Published content (the delivery API; drafts in drafts mode), typed by the caller. */\n delivery: createDeliveryApi(request, cacheContext),\n /** The site as delivery sees it: key, name and SEO defaults (`GET /api/site`). */\n site: createSiteApi(request, cacheContext),\n /** Publication snapshots and the diff between two (incremental builds). */\n snapshots: createSnapshotsApi(request),\n };\n};\n\nexport type ShapioDeliveryClient = ReturnType<typeof createDeliveryClient>;\n","/** The body every Shapio endpoint returns on failure. */\nexport type ShapioErrorBody = { error: { code: string; message: string; details?: unknown } };\n\nconst isErrorBody = (value: unknown): value is ShapioErrorBody => {\n if (typeof value !== 'object' || value === null || !('error' in value)) {\n return false;\n }\n const { error } = value;\n return (\n typeof error === 'object' &&\n error !== null &&\n typeof (error as { code?: unknown }).code === 'string' &&\n typeof (error as { message?: unknown }).message === 'string'\n );\n};\n\n/** Thrown for any non-2xx response. `code` is Shapio's error code, or `HTTP_<status>` if the body had none. */\nexport class ShapioApiError extends Error {\n readonly status: number;\n readonly code: string;\n readonly details: unknown;\n\n constructor(status: number, body: unknown) {\n const parsed = isErrorBody(body) ? body.error : undefined;\n super(parsed?.message ?? `Request failed with status ${status}`);\n this.name = 'ShapioApiError';\n this.status = status;\n this.code = parsed?.code ?? `HTTP_${status}`;\n this.details = parsed?.details;\n }\n}\n","import { SITE_HEADER } from './admin/sites.js';\nimport { DELIVERY_PATH } from './delivery.js';\nimport { DELIVERY_SITE_PATH } from './siteDelivery.js';\nimport { SNAPSHOT_PATHS } from './snapshots.js';\n\n/** Delivery reads name their site with `?site=`; everything else with the `Shapio-Site` header. */\nexport const SITE_QUERY_PARAMETER = 'site';\n\n/** Delivery reads (content, snapshots, the site): a GET there carries the site in its URL. */\nconst DELIVERY_READ_PREFIXES = [\n `${DELIVERY_PATH}/`,\n `${DELIVERY_PATH}?`,\n '/api/snapshots/',\n `${DELIVERY_SITE_PATH}?`,\n] as const;\n\nconst isDeliveryRead = (method: string, path: string) =>\n method === 'GET' &&\n (path === DELIVERY_PATH ||\n path === DELIVERY_SITE_PATH ||\n Object.values(SNAPSHOT_PATHS).some((snapshotPath) => path === snapshotPath) ||\n DELIVERY_READ_PREFIXES.some((prefix) => path.startsWith(prefix)));\n\nconst namesSite = (path: string) => {\n const index = path.indexOf('?');\n return index !== -1 && new URLSearchParams(path.slice(index + 1)).has(SITE_QUERY_PARAMETER);\n};\n\n/**\n * Where a request names the client's site (sites plan §H). Delivery GETs put it in the query string: a\n * simple cross-origin GET needs no CORS preflight, and URL-keyed CDN caches keep sites apart. Every other\n * request sends the `Shapio-Site` header. A path that already names a site is left as it is.\n */\nexport const applySite = (\n site: string | undefined,\n method: string,\n path: string,\n): { path: string; headers: Record<string, string> } => {\n if (site === undefined || namesSite(path)) {\n return { path, headers: {} };\n }\n if (isDeliveryRead(method, path)) {\n const parameter = `${SITE_QUERY_PARAMETER}=${encodeURIComponent(site)}`;\n return { path: `${path}${path.includes('?') ? '&' : '?'}${parameter}`, headers: {} };\n }\n return { path, headers: { [SITE_HEADER]: site } };\n};\n","import { ShapioApiError } from './errors.js';\nimport type { NextFetchInit } from './nextCache.js';\nimport { applySite } from './site.js';\n\n/** Fetch's `credentials` mode (spelled out: the DOM lib type is not available to Node consumers). */\nexport type FetchCredentials = 'omit' | 'same-origin' | 'include';\n\nexport type RequestOptions = {\n method?: string;\n body?: unknown;\n signal?: AbortSignal;\n} & NextFetchInit;\n\nexport type RequestFn = <T>(path: string, options?: RequestOptions) => Promise<T>;\n\nexport type RequestConfig = {\n baseUrl: string;\n token: string | undefined;\n fetch: typeof globalThis.fetch;\n credentials: FetchCredentials | undefined;\n headers: (() => Readonly<Record<string, string>>) | undefined;\n /** The site key every request names (see site.ts); undefined: the credential's site, else the primary. */\n site: string | undefined;\n};\n\nconst parseBody = async (response: Response): Promise<unknown> => {\n const text = await response.text();\n if (text.length === 0) {\n return undefined;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n};\n\n/** Builds the JSON request function every endpoint group uses. Non-2xx responses throw ShapioApiError. */\nexport const createRequest = ({\n baseUrl,\n token,\n fetch,\n credentials,\n headers,\n site,\n}: RequestConfig): RequestFn => {\n const origin = baseUrl.replace(/\\/+$/, '');\n return async <T>(\n requestPath: string,\n { method = 'GET', body, signal, cache, next }: RequestOptions = {},\n ): Promise<T> => {\n const { path, headers: siteHeaders } = applySite(site, method, requestPath);\n const requestHeaders: Record<string, string> = {\n accept: 'application/json',\n ...siteHeaders,\n ...headers?.(),\n };\n if (token) {\n requestHeaders.authorization = `Bearer ${token}`;\n }\n if (body !== undefined) {\n requestHeaders['content-type'] = 'application/json';\n }\n // `next` is Next.js's extension of fetch (cache tags); other runtimes ignore it, and it is only set there.\n const init: RequestInit & Pick<NextFetchInit, 'next'> = {\n method,\n headers: requestHeaders,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n ...(signal ? { signal } : {}),\n ...(credentials ? { credentials } : {}),\n ...(cache ? { cache } : {}),\n ...(next ? { next } : {}),\n };\n const response = await fetch(`${origin}${path}`, init);\n const parsed = await parseBody(response);\n if (!response.ok) {\n throw new ShapioApiError(response.status, parsed);\n }\n return parsed as T;\n };\n};\n","import { createAdminApi } from './admin/index.js';\nimport { createAppAuthApi } from './appAuth/index.js';\nimport { createDeliveryClient } from './deliveryClient.js';\nimport type { NextCacheOptions } from './nextCache.js';\nimport { createRequest, type FetchCredentials } from './request.js';\nimport type { HealthResponse, ReadyResponse, VersionResponse } from './types.js';\n\nexport type ShapioClientOptions = {\n /** Base URL of the Shapio server including any BASE_PATH, e.g. `https://cms.example.com/cms`. */\n baseUrl: string;\n /** API token sent as a bearer token. */\n token?: string;\n /** Defaults to the global fetch; injectable for tests and custom agents. */\n fetch?: typeof globalThis.fetch;\n /** Fetch credentials mode. The admin uses `same-origin` so its session cookie is sent. */\n credentials?: FetchCredentials;\n /** Extra headers computed per request (the admin's CSRF token). */\n headers?: () => Readonly<Record<string, string>>;\n /**\n * The site key (multi-site instances). Delivery reads send it as `?site=`, every other request as the\n * `Shapio-Site` header. Leave it out to use the token's site, else the primary site. A site token only\n * ever reads its own site: naming another one is refused (403 `SITE_MISMATCH`).\n */\n site?: string;\n /**\n * Next.js data-cache options for delivery reads (`delivery.*`, `site.get`), e.g. `{ cache: 'force-cache' }`.\n * Under Next the reads are tagged for `revalidateTag` whether or not this is set; the cache mode is only\n * passed when asked for, and reads pinned to a snapshot are always `force-cache`. Set it outside Next to send\n * the same fetch options; `false` sends none. A read's own `next` option overrides this one.\n */\n next?: NextCacheOptions | false;\n /**\n * Drafts mode, for a site's development server: every delivery read asks for drafts\n * (`publicationState=draft`) instead of published content, and under Next is never cached or tagged. Needs\n * a delivery token whose role grants Read drafts (the server refuses others with 403 `DRAFTS_FORBIDDEN`);\n * never set it on a production build. Reads pinned to a `snapshot` are refused. `snapshots` is unaffected.\n */\n drafts?: boolean;\n};\n\nexport const createClient = ({\n baseUrl,\n token,\n fetch = globalThis.fetch,\n credentials,\n headers,\n site,\n next,\n drafts,\n}: ShapioClientOptions) => {\n const request = createRequest({ baseUrl, token, fetch, credentials, headers, site });\n const reads = createDeliveryClient(request, { site, next, ...(drafts !== undefined ? { drafts } : {}) });\n\n return {\n /**\n * Any Shapio route, e.g. the delivery API. Delivery paths use the model's route key: a collection's\n * plural API ID (`request('/api/content/articles')`, `/api/content/articles/<id>`), a singleton's API ID\n * (`/api/content/homepage`). The admin API (`admin.*`) always uses the singular API ID.\n */\n request,\n system: {\n health: (signal?: AbortSignal) => request<HealthResponse>('/api/health', signal ? { signal } : {}),\n ready: (signal?: AbortSignal) => request<ReadyResponse>('/api/ready', signal ? { signal } : {}),\n version: (signal?: AbortSignal) => request<VersionResponse>('/api/version', signal ? { signal } : {}),\n },\n /** Published content (the delivery API), typed by the caller. */\n delivery: reads.delivery,\n /** The site as delivery sees it: key, name and SEO defaults (`GET /api/site`). */\n site: reads.site,\n admin: createAdminApi(request),\n /** Publication snapshots and the diff between two (incremental builds). */\n snapshots: reads.snapshots,\n /** End users of your sites and apps: sign-up, sign-in, tokens, OAuth. */\n appAuth: createAppAuthApi(request, baseUrl),\n };\n};\n\nexport type ShapioClient = ReturnType<typeof createClient>;\n","import type {\n AppUserQuery,\n AuditQuery,\n ContentHealthQuery,\n ContentListQuery,\n DefinitionCategory,\n DeploymentRunQuery,\n JobQuery,\n MediaAssetQuery,\n ScheduleQuery,\n} from '@shapio/client';\n\n/** Every TanStack Query key in the admin, so invalidation targets are explicit. */\nexport const queryKeys = {\n setupStatus: ['setup', 'status'] as const,\n me: ['auth', 'me'] as const,\n sessions: ['auth', 'sessions'] as const,\n users: ['users'] as const,\n invitationInspect: (token: string) => ['invitations', 'inspect', token] as const,\n invitations: ['invitations'] as const,\n roles: ['roles'] as const,\n /** App users (end users of the user's sites) and their roles (package I). */\n appUsers: {\n all: ['appUsers'] as const,\n list: (query: AppUserQuery) => ['appUsers', 'list', query] as const,\n },\n appRoles: {\n all: ['appRoles'] as const,\n role: (id: string) => ['appRoles', id] as const,\n },\n tokens: ['tokens'] as const,\n /** The current site's SEO defaults (Settings → SEO, the SEO field's preview). */\n siteSeo: ['site', 'seo'] as const,\n /** Sites (network view) and each site's app role bindings. */\n sites: {\n all: ['sites'] as const,\n site: (id: string) => ['sites', id] as const,\n appRoles: (id: string) => ['sites', id, 'appRoles'] as const,\n },\n audit: {\n all: ['audit'] as const,\n list: (query: AuditQuery) => ['audit', 'list', query] as const,\n },\n /** The media library; invalidate `media.all` after uploads and edits. */\n media: {\n all: ['media'] as const,\n folders: ['media', 'folders'] as const,\n assets: (query: Omit<MediaAssetQuery, 'cursor'>) => ['media', 'assets', query] as const,\n asset: (id: string) => ['media', 'asset', id] as const,\n usage: (id: string) => ['media', 'usage', id] as const,\n },\n /** Everything derived from the schema snapshot; invalidate `schema.all` when the schema version moves. */\n schema: {\n all: ['schema'] as const,\n summary: ['schema', 'summary'] as const,\n settings: ['schema', 'settings'] as const,\n locales: ['schema', 'locales'] as const,\n definitions: (category: DefinitionCategory) => ['schema', 'definitions', category] as const,\n definition: (category: DefinitionCategory, id: string) =>\n ['schema', 'definitions', category, id] as const,\n /** The models and components shared with all sites (the Network → Content types page). */\n sharedDefinitions: ['schema', 'shared'] as const,\n change: (changeId: string) => ['schema', 'changes', changeId] as const,\n },\n /** Entries per model; invalidate `content.model(key)` after any write to that model. */\n content: {\n all: ['content'] as const,\n model: (modelKey: string) => ['content', modelKey] as const,\n list: (modelKey: string, query: ContentListQuery) => ['content', modelKey, 'list', query] as const,\n entry: (modelKey: string, id: string, locale: string | undefined) =>\n ['content', modelKey, 'entry', id, locale ?? null] as const,\n revisions: (modelKey: string, id: string, locale: string | undefined) =>\n ['content', modelKey, 'revisions', id, locale ?? null] as const,\n revision: (modelKey: string, id: string, revisionId: string) =>\n ['content', modelKey, 'revision', id, revisionId] as const,\n },\n /** Change sets, the snapshot ledger and delivery usage (developer pages, plan developer-face). */\n develop: {\n changeSets: {\n all: ['develop', 'changeSets'] as const,\n list: (status: string) => ['develop', 'changeSets', 'list', status] as const,\n set: (id: string) => ['develop', 'changeSets', 'set', id] as const,\n review: (id: string) => ['develop', 'changeSets', 'review', id] as const,\n timeline: (id: string) => ['develop', 'changeSets', 'timeline', id] as const,\n draft: (id: string, definitionId: string) =>\n ['develop', 'changeSets', 'draft', id, definitionId] as const,\n unassigned: ['develop', 'changeSets', 'unassigned'] as const,\n },\n snapshots: {\n all: ['develop', 'snapshots'] as const,\n list: (cursor: string | undefined) => ['develop', 'snapshots', 'list', cursor ?? null] as const,\n snapshot: (seq: number) => ['develop', 'snapshots', 'snapshot', seq] as const,\n changes: (from: number, to: number) => ['develop', 'snapshots', 'changes', from, to] as const,\n ledger: ['develop', 'snapshots', 'ledger'] as const,\n /** One place read through delivery as it was at `seq`, in one locale. */\n place: (seq: number, routeKey: string, locale: string) =>\n ['develop', 'snapshots', 'place', seq, routeKey, locale] as const,\n },\n /**\n * One page of health findings per model for a change set's Checks (a plain query, so it can't share\n * `contentHealth.list`, which is an infinite query); under `contentHealth` so its invalidation hits it.\n */\n setHealthFindings: (query: ContentHealthQuery) => ['contentHealth', 'changeSet', query] as const,\n usage: {\n all: ['develop', 'usage'] as const,\n model: (modelId: string, days: number) => ['develop', 'usage', 'model', modelId, days] as const,\n },\n },\n /** Editor assists: on/off and usage (rarely changes), and content-ops runs by ID. */\n assist: {\n status: ['assist', 'status'] as const,\n run: (runId: string) => ['assist', 'runs', runId] as const,\n },\n /** Open content health findings (the Inbox) and entries per model (the sidebar's places). */\n contentHealth: {\n all: ['contentHealth'] as const,\n list: (query: ContentHealthQuery) => ['contentHealth', 'list', query] as const,\n summary: ['contentHealth', 'summary'] as const,\n },\n contentCounts: ['contentCounts'] as const,\n /** The live snapshot number (delivery route; the Inbox's \"Recently published\" diffs back from it). */\n currentSnapshot: ['snapshots', 'current'] as const,\n /**\n * Who has entries open: a model's list rows (`presence(modelKey)`) or one entry (`presence(modelKey, id)`).\n * The entry key extends the model key, so invalidating a model's presence refreshes both.\n */\n presence: (modelKey: string, entryId?: string) =>\n entryId === undefined ? (['presence', modelKey] as const) : (['presence', modelKey, entryId] as const),\n /** The entry document's pre-flight (E1); never cached across opens. */\n entryDocument: {\n preflight: (modelKey: string, id: string, locale: string | undefined) =>\n ['entryDocument', 'preflight', modelKey, id, locale ?? null] as const,\n },\n /** Custom field editors installed in the project (read once per session). */\n editorManifest: ['extensions', 'editors'] as const,\n extensionThemes: ['extensions', 'themes'] as const,\n /** Jobs, schedules, webhooks and deployments (package H). */\n publishing: {\n jobs: {\n all: ['publishing', 'jobs'] as const,\n list: (query: JobQuery) => ['publishing', 'jobs', 'list', query] as const,\n summary: ['publishing', 'jobs', 'summary'] as const,\n },\n schedules: {\n all: ['publishing', 'schedules'] as const,\n list: (query: ScheduleQuery) => ['publishing', 'schedules', 'list', query] as const,\n },\n webhooks: {\n all: ['publishing', 'webhooks'] as const,\n list: ['publishing', 'webhooks', 'list'] as const,\n events: ['publishing', 'webhooks', 'events'] as const,\n webhook: (id: string) => ['publishing', 'webhooks', 'webhook', id] as const,\n deliveries: (id: string, cursor: string | undefined) =>\n ['publishing', 'webhooks', 'deliveries', id, cursor ?? null] as const,\n },\n deployments: {\n all: ['publishing', 'deployments'] as const,\n connections: ['publishing', 'deployments', 'connections'] as const,\n connection: (id: string) => ['publishing', 'deployments', 'connections', id] as const,\n runs: (query: DeploymentRunQuery) => ['publishing', 'deployments', 'runs', 'list', query] as const,\n run: (id: string) => ['publishing', 'deployments', 'runs', 'run', id] as const,\n /** The connections previews open on: under `deployments`, so connection changes refresh it. */\n previewTargets: ['publishing', 'deployments', 'previewTargets'] as const,\n },\n },\n};\n","export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape,\n transDefaultProps: undefined\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n if (!i18n) {\n console.warn('react-i18next:: getInitialProps: You will need to pass in an i18next instance by using initReactI18next');\n return {};\n }\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useContext, useCallback, useMemo, useEffect, useRef, useState } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n if (typeof k === 'function') return '';\n if (Array.isArray(k)) {\n const last = k[k.length - 1];\n return typeof last === 'function' ? '' : last;\n }\n return k;\n};\nconst notReadySnapshot = {\n t: notReadyT,\n ready: false\n};\nconst dummySubscribe = () => () => {};\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.');\n }\n const i18nOptions = useMemo(() => ({\n ...getDefaults(),\n ...i18n?.options?.react,\n ...props\n }), [i18n, props]);\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n const nsOrContext = ns || defaultNSFromContext || i18n?.options?.defaultNS;\n const unstableNamespaces = isString(nsOrContext) ? [nsOrContext] : nsOrContext || ['translation'];\n const namespaces = useMemo(() => unstableNamespaces, unstableNamespaces);\n i18n?.reportNamespaces?.addUsedNamespaces?.(namespaces);\n const revisionRef = useRef(0);\n const subscribe = useCallback(callback => {\n if (!i18n) return dummySubscribe;\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n const wrappedCallback = () => {\n revisionRef.current += 1;\n callback();\n };\n if (bindI18n) i18n.on(bindI18n, wrappedCallback);\n if (bindI18nStore) i18n.store.on(bindI18nStore, wrappedCallback);\n return () => {\n if (bindI18n) bindI18n.split(' ').forEach(e => i18n.off(e, wrappedCallback));\n if (bindI18nStore) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, wrappedCallback));\n };\n }, [i18n, i18nOptions]);\n const snapshotRef = useRef();\n const getSnapshot = useCallback(() => {\n if (!i18n) {\n return notReadySnapshot;\n }\n const calculatedReady = !!(i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const currentLng = props.lng || i18n.language;\n const currentRevision = revisionRef.current;\n const lastSnapshot = snapshotRef.current;\n if (lastSnapshot && lastSnapshot.ready === calculatedReady && lastSnapshot.lng === currentLng && lastSnapshot.keyPrefix === keyPrefix && lastSnapshot.revision === currentRevision) {\n return lastSnapshot;\n }\n const calculatedT = i18n.getFixedT(currentLng, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix, {\n scopeNs: namespaces\n });\n const newSnapshot = {\n t: calculatedT,\n ready: calculatedReady,\n lng: currentLng,\n keyPrefix,\n revision: currentRevision\n };\n snapshotRef.current = newSnapshot;\n return newSnapshot;\n }, [i18n, namespaces, keyPrefix, i18nOptions, props.lng]);\n const [loadCount, setLoadCount] = useState(0);\n const {\n t,\n ready\n } = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n useEffect(() => {\n if (i18n && !ready && !useSuspense) {\n const onLoaded = () => setLoadCount(c => c + 1);\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n }\n }, [i18n, props.lng, namespaces, ready, useSuspense, loadCount]);\n const finalI18n = i18n || {};\n const wrapperRef = useRef(null);\n const wrapperLangRef = useRef();\n const languageKey = inst => `${inst.language}|${inst.resolvedLanguage}|${inst.languages?.join(',')}`;\n const createI18nWrapper = original => {\n const descriptors = Object.getOwnPropertyDescriptors(original);\n if (descriptors.__original) delete descriptors.__original;\n const wrapper = Object.create(Object.getPrototypeOf(original), descriptors);\n if (!Object.prototype.hasOwnProperty.call(wrapper, '__original')) {\n try {\n Object.defineProperty(wrapper, '__original', {\n value: original,\n writable: false,\n enumerable: false,\n configurable: false\n });\n } catch (_) {}\n }\n return wrapper;\n };\n const ret = useMemo(() => {\n const original = finalI18n;\n const lang = original && languageKey(original);\n let i18nWrapper = original;\n if (original) {\n if (wrapperRef.current && wrapperRef.current.__original === original) {\n if (wrapperLangRef.current !== lang) {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n } else {\n i18nWrapper = wrapperRef.current;\n }\n } else {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n }\n }\n const effectiveT = !ready && !useSuspense ? (...args) => {\n warnOnce(i18n, 'USE_T_BEFORE_READY', 'useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.');\n return t(...args);\n } : t;\n const arr = [effectiveT, i18nWrapper, ready];\n arr.t = effectiveT;\n arr.i18n = i18nWrapper;\n arr.ready = ready;\n return arr;\n }, [t, finalI18n, ready, finalI18n.resolvedLanguage, finalI18n.language, finalI18n.languages]);\n if (i18n && useSuspense && !ready) {\n let inDevelopment = false;\n try {\n inDevelopment = process.env.NODE_ENV !== 'production';\n } catch (e) {}\n if (inDevelopment) {\n warnOnce(i18n, 'SUSPENDED_WHILE_LOADING', 'useTranslation: suspended while translations are loading (useSuspense is true by default). Add a <Suspense> boundary above this component, or set react.useSuspense: false in the i18next init options. https://react.i18next.com/latest/usetranslation-hook');\n }\n throw new Promise(resolve => {\n const onLoaded = () => resolve();\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n });\n }\n return ret;\n};","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /^at (?:new |async )?(.+?) \\(/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n ++hydrationVersion;\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import { createJSONStorage, type StateStorage } from 'zustand/middleware';\n\n/**\n * localStorage that never throws: it is unavailable in private windows, with blocked site data, or when\n * full. Persisted state is a convenience (theme, sidebar), so failures fall back to in-memory defaults.\n */\nexport const safeLocalStorage: StateStorage = {\n getItem: (name) => {\n try {\n return window.localStorage.getItem(name);\n } catch {\n return null;\n }\n },\n setItem: (name, value) => {\n try {\n window.localStorage.setItem(name, value);\n } catch {\n // Not persisted this time; the in-memory store still holds the value.\n }\n },\n removeItem: (name) => {\n try {\n window.localStorage.removeItem(name);\n } catch {\n // Nothing to remove when storage is unavailable.\n }\n },\n};\n\nexport const persistentStorage = createJSONStorage(() => safeLocalStorage);\n","/**\n * The router's basename is the path of `<base href>`: `{BASE_PATH}/admin` in production (injected by the\n * API), `/admin` in development (injected by Vite). Trailing slash removed, as the router expects.\n */\nexport const routerBasePath = () => new URL(document.baseURI).pathname.replace(/\\/+$/, '') || '/';\n","/**\n * Where the site sits in an admin URL (sites plan §H, ADR 0011). Paths here are the router's: relative to\n * the router basepath (`{BASE_PATH}/admin`). Site pages carry the site as a prefix (`/s/blog/content/posts`);\n * network pages (`/network/*`) and the signed-out screens (sign-in, setup, password reset, invitations: the\n * links in emails) carry none.\n */\n\nconst SITE_PREFIX = /^\\/s\\/([a-z][a-z0-9-]{0,62})(?=\\/|$)/;\n\nexport const NETWORK_PATH = '/network';\n\n/** Screens outside any site: signed out, or reached from an email link. */\nconst UNSITED_PATHS: readonly string[] = [\n '/setup',\n '/login',\n '/forgot-password',\n '/reset-password',\n '/accept-invitation',\n];\n\nconst isUnder = (pathname: string, base: string) => pathname === base || pathname.startsWith(`${base}/`);\n\n/** The site key a path names, and the path without it (`/s/blog/content` → `blog`, `/content`). */\nexport const splitSitePath = (pathname: string): { key: string | undefined; rest: string } => {\n const match = SITE_PREFIX.exec(pathname);\n if (!match) {\n return { key: undefined, rest: pathname };\n }\n return { key: match[1], rest: pathname.slice(match[0].length) || '/' };\n};\n\n/** Network pages and signed-out screens: their URLs never carry a site. */\nexport const isSitelessPath = (pathname: string) =>\n isUnder(pathname, NETWORK_PATH) || UNSITED_PATHS.some((path) => isUnder(pathname, path));\n\nexport const isNetworkPath = (pathname: string) => isUnder(pathname, NETWORK_PATH);\n\n/** The public path of a router path on a site: `/content` → `/s/blog/content`; siteless paths unchanged. */\nexport const withSitePrefix = (pathname: string, key: string | undefined) =>\n key === undefined || isSitelessPath(pathname) ? pathname : `/s/${key}${pathname === '/' ? '/' : pathname}`;\n\n/**\n * A site page whose URL doesn't carry the site yet (`/admin/content/posts`, or `/admin/` itself): the\n * router rewrites it to the site's URL once the site is known.\n */\nexport const needsSitePrefix = (pathname: string) =>\n splitSitePath(pathname).key === undefined && !isSitelessPath(pathname);\n","import { safeLocalStorage } from '@/helpers/safeStorage';\nimport { routerBasePath } from './basePath';\nimport { splitSitePath, withSitePrefix } from './sitePaths';\n\n/**\n * The site this page load works on (sites plan §H). It is fixed for the life of the document: switching\n * sites is a full navigation, so no query cache, store or in-flight request ever crosses sites.\n *\n * - `explicit`: the URL named the site (`/admin/s/blog/...`).\n * - Otherwise the last site this browser worked on; or none yet, in which case the API answers for the\n * primary site and the site is taken from `me` (the primary site's key is never hardcoded).\n */\nexport type CurrentSite = { key: string | undefined; explicit: boolean };\n\nconst LAST_SITE_KEY = 'shapio.site';\n\n/** The router path of the current URL (the part after `{BASE_PATH}/admin`). */\nexport const currentRouterPath = () => {\n const base = routerBasePath();\n const { pathname } = window.location;\n const rest = base !== '/' && pathname.startsWith(base) ? pathname.slice(base.length) : pathname;\n return rest.startsWith('/') ? rest : `/${rest}`;\n};\n\nconst readLastSite = (): string | undefined => {\n const stored = safeLocalStorage.getItem(LAST_SITE_KEY);\n return typeof stored === 'string' && splitSitePath(`/s/${stored}`).key === stored ? stored : undefined;\n};\n\nconst resolveBootSite = (): CurrentSite => {\n const { key } = splitSitePath(currentRouterPath());\n return key === undefined ? { key: readLastSite(), explicit: false } : { key, explicit: true };\n};\n\nlet state: CurrentSite | undefined;\n\nexport const currentSite = (): CurrentSite => {\n state ??= resolveBootSite();\n return state;\n};\n\n/** Once `me` has said which site the API answered for (the primary site, when the URL named none). */\nexport const settleSiteKey = (key: string) => {\n state = { ...currentSite(), key };\n};\n\n/** Remembered for the next visit to a URL without a site. */\nexport const rememberSite = (key: string) => {\n void safeLocalStorage.setItem(LAST_SITE_KEY, key);\n};\n\nconst forgetSite = () => {\n void safeLocalStorage.removeItem(LAST_SITE_KEY);\n};\n\n/** The public URL of a site's home (its Inbox). */\nexport const siteHomeUrl = (key: string) => `${routerBasePath().replace(/\\/$/, '')}/s/${key}/`;\n\n/** The public URL of a network page (`/network/sites`). */\nexport const networkUrl = (path = '/network') => `${routerBasePath().replace(/\\/$/, '')}${path}`;\n\n/**\n * Opens another site: a full navigation, so the new document starts with an empty query cache and sends\n * the new site's header from its first request.\n */\nexport const goToSite = (key: string) => {\n rememberSite(key);\n window.location.assign(siteHomeUrl(key));\n};\n\n/**\n * This page load's site was just deleted (from the network view): its requests would now fail, so forget it\n * and load the sites list again, which answers for the primary site.\n */\nexport const leaveDeletedSite = () => {\n forgetSite();\n window.location.assign(networkUrl('/network/sites'));\n};\n\n/**\n * The remembered site no longer exists (deleted, or another instance on the same origin): forget it and load\n * the page again without it, so the API answers for the primary site.\n */\nexport const leaveUnknownSite = () => {\n forgetSite();\n window.location.reload();\n};\n\n/** Replaces the current history entry's URL with the same page on the current site (`/content` → `/s/blog/content`). */\nexport const showSiteInAddressBar = () => {\n const base = routerBasePath().replace(/\\/$/, '');\n const path = withSitePrefix(currentRouterPath(), currentSite().key);\n const { search, hash } = window.location;\n window.history.replaceState(window.history.state, '', `${base}${path}${search}${hash}`);\n};\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import { create } from 'zustand';\n\ntype SessionState = {\n /** CSRF token bound to the current admin session; fetched lazily, cleared whenever the session changes. */\n csrfToken: string | undefined;\n setCsrfToken: (token: string | undefined) => void;\n};\n\nexport const useSessionStore = create<SessionState>()((set) => ({\n csrfToken: undefined,\n setCsrfToken: (csrfToken) => set({ csrfToken }),\n}));\n","import { createClient } from '@shapio/client';\nimport { currentSite } from '@/app/currentSite';\nimport { useSessionStore } from '@/stores/session';\n\n/**\n * The API lives beside the admin: `<base href>` is `{BASE_PATH}/admin/`, so `..` is `{BASE_PATH}/`.\n * Same origin, so the session cookie travels with `same-origin` credentials and no CORS is involved.\n */\nexport const apiBaseUrl = () => new URL('..', document.baseURI).href;\n\nexport const CSRF_HEADER = 'x-csrf-token';\n\n/**\n * Every request names this page load's site (the `Shapio-Site` header; `?site=` on delivery reads). With no\n * site in the URL and none remembered, nothing is named and the API answers for the primary site, which is\n * then the page's site (see app/currentSite). The site never changes during a page load.\n */\nexport const apiClient = createClient({\n baseUrl: apiBaseUrl(),\n credentials: 'same-origin',\n site: currentSite().key,\n headers: (): Record<string, string> => {\n const token = useSessionStore.getState().csrfToken;\n return token ? { [CSRF_HEADER]: token } : {};\n },\n});\n\nexport const adminApi = apiClient.admin;\n","import { ShapioApiError } from '@shapio/client';\nimport { useSessionStore } from '@/stores/session';\nimport { adminApi } from './client';\n\n/**\n * The API reports CSRF failures as 403 FORBIDDEN with a CSRF message (@fastify/csrf-protection errors pass\n * through the generic error mapping); a dedicated code is matched too, should the API add one.\n */\nconst isCsrfRejection = (error: unknown) =>\n error instanceof ShapioApiError &&\n error.status === 403 &&\n (/csrf/i.test(error.code) || /csrf/i.test(error.message));\n\nexport const setCsrfToken = (token: string) => useSessionStore.getState().setCsrfToken(token);\n\nconst refreshCsrfToken = async () => {\n const { csrfToken } = await adminApi.auth.csrf();\n setCsrfToken(csrfToken);\n};\n\n/**\n * Runs a cookie-authenticated mutation with the session's CSRF token (delivered by login, setup and `me`).\n * If the server still rejects it as missing or stale, a fresh token is fetched and the call retried once.\n */\nexport const withCsrf = async <T>(call: () => Promise<T>): Promise<T> => {\n try {\n return await call();\n } catch (error) {\n if (!isCsrfRejection(error)) {\n throw error;\n }\n await refreshCsrfToken();\n return call();\n }\n};\n\n/** The CSRF secret belongs to the session: forget the token whenever the session changes. */\nexport const resetCsrfToken = () => useSessionStore.getState().setCsrfToken(undefined);\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string?.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toKebabCase } from './toKebabCase.mjs';\n\nfunction toLucideIconData(iconName, iconNode, aliases = []) {\n if (iconNode == null) {\n throw new Error(\"[lucide]: iconNode is required when icon name is used\");\n }\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...aliases.length > 0 ? { aliases } : {}\n };\n}\n\nexport { toLucideIconData };\n//# sourceMappingURL=toLucideIconData.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => {\n let out = \"\";\n let upperNext = false;\n for (const ch of string) {\n if (ch === \"-\" || ch === \"_\" || ch <= \" \") {\n upperNext = out.length > 0;\n continue;\n }\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n upperNext = false;\n }\n return out;\n};\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { mergeClasses } from '../utils/mergeClasses.mjs';\n\nfunction isDefined(value) {\n return value !== null && value !== void 0;\n}\nfunction buildLucideIconNode(icon, params = {}) {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName) => attributeNames[attributeName] ?? attributeName;\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes[\"width\"];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes[\"height\"];\n const aliasClassNames = icon.aliases?.filter((alias) => typeof alias === \"string\" && alias.trim() !== \"\").map((alias) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...icon.name ? [`lucide-${icon.name}`] : [], ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(\" \").filter(Boolean) ?? [];\n const className = params.includeDefaultClasses === false ? mergeClasses(...classNamesFromClassName) : mergeClasses(\"lucide\", ...iconClassNames, ...classNamesFromClassName);\n const calculatedStrokeWidth = params.absoluteStrokeWidth ? Number(params.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * Number(icon.size ?? icon.width ?? defaultAttributes[\"width\"]) / Number(params.size ?? params.width ?? defaultAttributes[\"width\"]) : params.strokeWidth ?? defaultAttributes[\"stroke-width\"];\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {}),\n ...\"color\" in params && params.color && {\n [getAttributeName(\"stroke\")]: params.color\n },\n ...\"size\" in params && isDefined(params.size) && {\n [getAttributeName(\"width\")]: params.size,\n [getAttributeName(\"height\")]: params.size\n },\n ...\"width\" in params && isDefined(params.width) && {\n [getAttributeName(\"width\")]: params.width\n },\n ...\"height\" in params && isDefined(params.height) && {\n [getAttributeName(\"height\")]: params.height\n },\n [getAttributeName(\"stroke-width\")]: calculatedStrokeWidth,\n ...className && {\n [getAttributeName(\"class\")]: className\n },\n [getAttributeName(\"viewBox\")]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...params.hasA11yProp === false ? {\n [getAttributeName(\"aria-hidden\")]: \"true\"\n } : {},\n ...\"attributes\" in params && params.attributes\n };\n return [\n \"svg\",\n attributes,\n icon.node.map((child) => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke ? { [getAttributeName(\"vector-effect\")]: \"non-scaling-stroke\", ...attrs } : attrs;\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n })\n ];\n}\n\nexport { buildLucideIconNode as default };\n//# sourceMappingURL=buildLucideIconNode.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport buildLucideIconNode from './buildLucideIconNode.mjs';\n\nfunction buildLucideIconForReact(icon, params = {}) {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: \"className\",\n \"stroke-width\": \"strokeWidth\",\n \"stroke-linecap\": \"strokeLinecap\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n \"vector-effect\": \"vectorEffect\"\n }\n });\n}\n\nexport { buildLucideIconForReact as default };\n//# sourceMappingURL=buildLucideIconForReact.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport buildLucideIconForReact from './shared/src/build/buildLucideIconForReact.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = \"\",\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24\n },\n ...rest\n }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest\n });\n return createElement(\n name,\n {\n ref,\n ...svgAttributes\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { toLucideIconData } from './shared/src/utils/toLucideIconData.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nfunction createLucideIcon(iconDataOrName, iconNode = [], aliases = []) {\n const iconData = typeof iconDataOrName === \"string\" ? toLucideIconData(iconDataOrName, iconNode, aliases) : iconDataOrName;\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props\n })\n );\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n return Component;\n}\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"loader-circle\",\n size: 24,\n node: [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]],\n aliases: [\"loader-2\"]\n};\n__iconData.node;\nconst LoaderCircle = createLucideIcon(__iconData);\n\nexport { __iconData, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n themeGetter.themeKey = key;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNamedContainerQuery,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [themeContainer, isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Container Type\n * @see https://tailwindcss.com/docs/responsive-design#container-queries\n */\n 'container-type': [{\n '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Container Name\n * @see https://tailwindcss.com/docs/responsive-design#named-containers\n */\n 'container-named': [isNamedContainerQuery],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, 'auto', isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/inline-size\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-inline-size\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-inline-size\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/block-size\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-block-size\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-block-size\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: ['', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n // Deprecated since Tailwind CSS v4.0.0\n 'inner', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n /**\n * Zoom\n * @see https://tailwindcss.com/docs/zoom\n */\n zoom: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['start', 'end', 'right', 'left'],\n 'inset-y': ['inset-bs', 'inset-be', 'top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['ps', 'pe', 'pr', 'pl'],\n py: ['pbs', 'pbe', 'pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['ms', 'me', 'mr', 'ml'],\n my: ['mbs', 'mbe', 'mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-s', 'border-w-e', 'border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-bs', 'border-w-be', 'border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-s', 'border-color-e', 'border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-bs', 'border-color-be', 'border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-ms', 'scroll-me', 'scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-ps', 'scroll-pe', 'scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n postfixLookupClassGroups: ['container-type'],\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n/**\n * Font sizes added in styles/index.css (`--text-*`). tailwind-merge treats an unknown `text-*` as a colour,\n * so without this `cn('text-title', 'text-muted-foreground')` would drop one of them.\n */\nconst CUSTOM_FONT_SIZES = ['display', 'title', 'canvas', 'meta', '2xs'];\n\nconst twMerge = extendTailwindMerge({ extend: { theme: { text: CUSTOM_FONT_SIZES } } });\n\n/** Joins conditional class names and resolves Tailwind conflicts (a caller's `p-2` beats a default `p-4`). */\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\n"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,51,52,53,54,55,56,57,62,63,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],"mappings":"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"}
|