@shapio/cms 0.5.8 → 0.5.10
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-BrMzsUZD.js → AssetTile-DecaDqjj.js} +2 -2
- package/dist/admin/assets/{AssetTile-BrMzsUZD.js.map → AssetTile-DecaDqjj.js.map} +1 -1
- package/dist/admin/assets/AssistError-rslPtgWB.js +2 -0
- package/dist/admin/assets/{AssistError-Cs-r9Ssc.js.map → AssistError-rslPtgWB.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-DsccXMc_.js → BlockMenuItems-JHFue7Qt.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-DsccXMc_.js.map → BlockMenuItems-JHFue7Qt.js.map} +1 -1
- package/dist/admin/assets/Body-7NgJl9Pi.js +2 -0
- package/dist/admin/assets/Body-7NgJl9Pi.js.map +1 -0
- package/dist/admin/assets/Builder-DmlYcgiP.js +2 -0
- package/dist/admin/assets/Builder-DmlYcgiP.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-CBCR73Wd.js → CodeEditor-Dv1FtkvI.js} +2 -2
- package/dist/admin/assets/{CodeEditor-CBCR73Wd.js.map → CodeEditor-Dv1FtkvI.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-CxFsBHfF.js → CopyButton-Brnpfqe0.js} +2 -2
- package/dist/admin/assets/{CopyButton-CxFsBHfF.js.map → CopyButton-Brnpfqe0.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-BW2U3v6l.js → CursorPager-C7cAK5Qe.js} +2 -2
- package/dist/admin/assets/{CursorPager-BW2U3v6l.js.map → CursorPager-C7cAK5Qe.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-BITMgS1K.js → ExternalLink-D80sb5Jj.js} +2 -2
- package/dist/admin/assets/{ExternalLink-BITMgS1K.js.map → ExternalLink-D80sb5Jj.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-CpZTve1E.js → FocalPoint-Bhtb1gUa.js} +2 -2
- package/dist/admin/assets/{FocalPoint-CpZTve1E.js.map → FocalPoint-Bhtb1gUa.js.map} +1 -1
- package/dist/admin/assets/Form-Cf1ephPH.js +2 -0
- package/dist/admin/assets/Form-Cf1ephPH.js.map +1 -0
- package/dist/admin/assets/FormCheckboxGroup-BzVZFR3W.js +2 -0
- package/dist/admin/assets/FormCheckboxGroup-BzVZFR3W.js.map +1 -0
- package/dist/admin/assets/{FormRadioGroup-Cfx5pvzU.js → FormRadioGroup-BzmLzRnI.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-Cfx5pvzU.js.map → FormRadioGroup-BzmLzRnI.js.map} +1 -1
- package/dist/admin/assets/FormSelectField-Cl7EjXc3.js +2 -0
- package/dist/admin/assets/FormSelectField-Cl7EjXc3.js.map +1 -0
- package/dist/admin/assets/FormSheet-CLZpd_7B.js +2 -0
- package/dist/admin/assets/FormSheet-CLZpd_7B.js.map +1 -0
- package/dist/admin/assets/{FormSwitchField-BLOh7qei.js → FormSwitchField-BbqQ3tx_.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-BLOh7qei.js.map → FormSwitchField-BbqQ3tx_.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-CO115n_u.js → FormTextareaField-9RN5Pt3B.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-CO115n_u.js.map → FormTextareaField-9RN5Pt3B.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-DzHnEdIK.js → HintedLabel-D9IVF0EE.js} +2 -2
- package/dist/admin/assets/{HintedLabel-DzHnEdIK.js.map → HintedLabel-D9IVF0EE.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-CSEtcHjL.js → InfoHint-tlSeZB9U.js} +2 -2
- package/dist/admin/assets/{InfoHint-CSEtcHjL.js.map → InfoHint-tlSeZB9U.js.map} +1 -1
- package/dist/admin/assets/{InlineConfirm-yW-iUKFC.js → InlineConfirm-Kj9AOIFO.js} +2 -2
- package/dist/admin/assets/{InlineConfirm-yW-iUKFC.js.map → InlineConfirm-Kj9AOIFO.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-CCr9e0qY.js → InsertMenuItem-CHAp2tH7.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-CCr9e0qY.js.map → InsertMenuItem-CHAp2tH7.js.map} +1 -1
- package/dist/admin/assets/{LinkTabs-8SmS1vCd.js → LinkTabs-oQXsy1I3.js} +2 -2
- package/dist/admin/assets/{LinkTabs-8SmS1vCd.js.map → LinkTabs-oQXsy1I3.js.map} +1 -1
- package/dist/admin/assets/{Match-CcD9KxHH.js → Match-BfNRwPfR.js} +2 -2
- package/dist/admin/assets/{Match-CcD9KxHH.js.map → Match-BfNRwPfR.js.map} +1 -1
- package/dist/admin/assets/{NoAccess-C8RLPN0I.js → NoAccess-DnEpYj9l.js} +2 -2
- package/dist/admin/assets/{NoAccess-C8RLPN0I.js.map → NoAccess-DnEpYj9l.js.map} +1 -1
- package/dist/admin/assets/Panel-Bcl09TtM.js.map +1 -1
- package/dist/admin/assets/{QueryView-xMP_uJ_t.js → QueryView-B86NcRt5.js} +2 -2
- package/dist/admin/assets/{QueryView-xMP_uJ_t.js.map → QueryView-B86NcRt5.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-DQFmni5A.js → RadioTile-Bwd2Pmlk.js} +2 -2
- package/dist/admin/assets/RadioTile-Bwd2Pmlk.js.map +1 -0
- package/dist/admin/assets/{RichTextField-CVHRIbnu.js → RichTextField-Dou79MHF.js} +4 -4
- package/dist/admin/assets/RichTextField-Dou79MHF.js.map +1 -0
- package/dist/admin/assets/{RowTitle-Bqt6evG9.js → RowTitle-DH9OZs3g.js} +2 -2
- package/dist/admin/assets/{RowTitle-Bqt6evG9.js.map → RowTitle-DH9OZs3g.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-Bm6nYg5J.js → SecretReveal-D95oACLj.js} +2 -2
- package/dist/admin/assets/{SecretReveal-Bm6nYg5J.js.map → SecretReveal-D95oACLj.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-cUmTh0_C.js → SharedGlyph-Chwb1EIS.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-cUmTh0_C.js.map → SharedGlyph-Chwb1EIS.js.map} +1 -1
- package/dist/admin/assets/StepList-D9iHsUZJ.js +2 -0
- package/dist/admin/assets/StepList-D9iHsUZJ.js.map +1 -0
- package/dist/admin/assets/Structure-CewJL1b3.js +2 -0
- package/dist/admin/assets/{Structure-D8csgrIt.js.map → Structure-CewJL1b3.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-CiCaVV8U.js → SubNavLink-7Cs1LqMv.js} +2 -2
- package/dist/admin/assets/SubNavLink-7Cs1LqMv.js.map +1 -0
- package/dist/admin/assets/{SuggestAltButton-CvIoirnz.js → SuggestAltButton-BK1uo4yC.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CvIoirnz.js.map → SuggestAltButton-BK1uo4yC.js.map} +1 -1
- package/dist/admin/assets/{TextLink-HRn66VL1.js → TextLink-Dfs5wsc5.js} +2 -2
- package/dist/admin/assets/{TextLink-HRn66VL1.js.map → TextLink-Dfs5wsc5.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-DNj5TRBI.js → Thumbnail-C2A_Ub77.js} +2 -2
- package/dist/admin/assets/{Thumbnail-DNj5TRBI.js.map → Thumbnail-C2A_Ub77.js.map} +1 -1
- package/dist/admin/assets/Trans-CPoNNUK1.js +2 -0
- package/dist/admin/assets/Trans-CPoNNUK1.js.map +1 -0
- package/dist/admin/assets/{UnsavedChangesGuard-CUiuMklN.js → UnsavedChangesGuard-BsEyn9oH.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-CUiuMklN.js.map → UnsavedChangesGuard-BsEyn9oH.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-p-jV-LoD.js → UserAvatar-CgGKOFfP.js} +2 -2
- package/dist/admin/assets/{UserAvatar-p-jV-LoD.js.map → UserAvatar-CgGKOFfP.js.map} +1 -1
- package/dist/admin/assets/auth-BFSvtV59.js +2 -0
- package/dist/admin/assets/{auth-CQO4MBUj.js.map → auth-BFSvtV59.js.map} +1 -1
- package/dist/admin/assets/{badge-CqKF1pwz.js → badge-DGqA_yr_.js} +2 -2
- package/dist/admin/assets/{badge-CqKF1pwz.js.map → badge-DGqA_yr_.js.map} +1 -1
- package/dist/admin/assets/baseExtensions-TVKN1UwW.js.map +1 -1
- package/dist/admin/assets/{boxes-CAygw8zF.js → boxes-_5klpWNM.js} +2 -2
- package/dist/admin/assets/{boxes-CAygw8zF.js.map → boxes-_5klpWNM.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-BZGtAvWR.js → calendar-clock-VXok22Xj.js} +2 -2
- package/dist/admin/assets/{calendar-clock-BZGtAvWR.js.map → calendar-clock-VXok22Xj.js.map} +1 -1
- package/dist/admin/assets/changeSets-B6HxCJ4A.js +2 -0
- package/dist/admin/assets/{changeSets-8EburmT0.js.map → changeSets-B6HxCJ4A.js.map} +1 -1
- package/dist/admin/assets/chevron-left-CkRxDtvO.js +2 -0
- package/dist/admin/assets/{chevron-left-DGU3HGYG.js.map → chevron-left-CkRxDtvO.js.map} +1 -1
- package/dist/admin/assets/{circle-check-C37MSJqX.js → circle-check-DtDq7QMo.js} +2 -2
- package/dist/admin/assets/{circle-check-C37MSJqX.js.map → circle-check-DtDq7QMo.js.map} +1 -1
- package/dist/admin/assets/{clock-2arjsgZ4.js → clock-BtvZR9KD.js} +2 -2
- package/dist/admin/assets/{clock-2arjsgZ4.js.map → clock-BtvZR9KD.js.map} +1 -1
- package/dist/admin/assets/cn-DVhJ55Mo.js.map +1 -1
- package/dist/admin/assets/{constants-a_15vqOh.js → constants-DY3YJAKH.js} +2 -2
- package/dist/admin/assets/{constants-a_15vqOh.js.map → constants-DY3YJAKH.js.map} +1 -1
- package/dist/admin/assets/content-BNZF26Ve.js +3 -0
- package/dist/admin/assets/content-BNZF26Ve.js.map +1 -0
- package/dist/admin/assets/{contentCounts-DP7YYeZZ.js → contentCounts-BzC7IQqP.js} +2 -2
- package/dist/admin/assets/{contentCounts-DP7YYeZZ.js.map → contentCounts-BzC7IQqP.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-84uc0bjR.js → contentTypes-Bz2xpqGf.js} +2 -2
- package/dist/admin/assets/{contentTypes-84uc0bjR.js.map → contentTypes-Bz2xpqGf.js.map} +1 -1
- package/dist/admin/assets/{context-IKYdzQJ-.js → context-CEVKblBl.js} +2 -2
- package/dist/admin/assets/{context-IKYdzQJ-.js.map → context-CEVKblBl.js.map} +1 -1
- package/dist/admin/assets/{copy-CsSRHgKZ.js → copy-B7vIq8DS.js} +2 -2
- package/dist/admin/assets/{copy-CsSRHgKZ.js.map → copy-B7vIq8DS.js.map} +1 -1
- package/dist/admin/assets/createLucideIcon-BOsNKleB.js +2 -0
- package/dist/admin/assets/createLucideIcon-BOsNKleB.js.map +1 -0
- package/dist/admin/assets/develop-D6CtwuYj.js +11 -0
- package/dist/admin/assets/develop-D6CtwuYj.js.map +1 -0
- package/dist/admin/assets/{dropdown-menu-_xfaEp5C.js → dropdown-menu-Bz7CLcRK.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-_xfaEp5C.js.map → dropdown-menu-Bz7CLcRK.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-F91991on.js → ellipsis-Ci0rsbCJ.js} +2 -2
- package/dist/admin/assets/{ellipsis-F91991on.js.map → ellipsis-Ci0rsbCJ.js.map} +1 -1
- package/dist/admin/assets/{entryLink-CVB-TdIn.js → entryLink-B0hSb_dN.js} +2 -2
- package/dist/admin/assets/{entryLink-CVB-TdIn.js.map → entryLink-B0hSb_dN.js.map} +1 -1
- package/dist/admin/assets/es2015-Cv57ynE1.js +42 -0
- package/dist/admin/assets/es2015-Cv57ynE1.js.map +1 -0
- package/dist/admin/assets/{external-link-CdG6kHfA.js → external-link-Bs9YRzvY.js} +2 -2
- package/dist/admin/assets/{external-link-CdG6kHfA.js.map → external-link-Bs9YRzvY.js.map} +1 -1
- package/dist/admin/assets/{field-COOzRptX.js → field-D-xWW2E7.js} +2 -2
- package/dist/admin/assets/{field-COOzRptX.js.map → field-D-xWW2E7.js.map} +1 -1
- package/dist/admin/assets/{file-stack-28ZtO1xW.js → file-stack-X4OGmkLA.js} +2 -2
- package/dist/admin/assets/{file-stack-28ZtO1xW.js.map → file-stack-X4OGmkLA.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-s7mCMYUJ.js → fileRoute-DMal-zYL.js} +2 -2
- package/dist/admin/assets/{fileRoute-s7mCMYUJ.js.map → fileRoute-DMal-zYL.js.map} +1 -1
- package/dist/admin/assets/{folder-plus-DIk0pWkP.js → folder-plus-De2GNvry.js} +2 -2
- package/dist/admin/assets/{folder-plus-DIk0pWkP.js.map → folder-plus-De2GNvry.js.map} +1 -1
- package/dist/admin/assets/followPlural-CsgeALTW.js +2 -0
- package/dist/admin/assets/followPlural-CsgeALTW.js.map +1 -0
- package/dist/admin/assets/{globe-DFr3Gd2w.js → globe-DBw84s8Z.js} +2 -2
- package/dist/admin/assets/{globe-DFr3Gd2w.js.map → globe-DBw84s8Z.js.map} +1 -1
- package/dist/admin/assets/{image-DT79QFa_.js → image-CX4mT-_R.js} +2 -2
- package/dist/admin/assets/{image-DT79QFa_.js.map → image-CX4mT-_R.js.map} +1 -1
- package/dist/admin/assets/{image-off-DFs5upyX.js → image-off-CVaH_qKf.js} +2 -2
- package/dist/admin/assets/{image-off-DFs5upyX.js.map → image-off-CVaH_qKf.js.map} +1 -1
- package/dist/admin/assets/inbox-C0PVc6UI.js +2 -0
- package/dist/admin/assets/inbox-C0PVc6UI.js.map +1 -0
- package/dist/admin/assets/{inbox-CySnQydm.js → inbox-D9SmWt5L.js} +2 -2
- package/dist/admin/assets/{inbox-CySnQydm.js.map → inbox-D9SmWt5L.js.map} +1 -1
- package/dist/admin/assets/index-BqtCXB0u.js +4 -0
- package/dist/admin/assets/index-BqtCXB0u.js.map +1 -0
- package/dist/admin/assets/index-DZsQq6fY.css +2 -0
- package/dist/admin/assets/{key-round-D36CePnN.js → key-round-C8sd9CLN.js} +2 -2
- package/dist/admin/assets/{key-round-D36CePnN.js.map → key-round-C8sd9CLN.js.map} +1 -1
- package/dist/admin/assets/{labels-DQckbLGW.js → labels-BtktCNGw.js} +2 -2
- package/dist/admin/assets/{labels-DQckbLGW.js.map → labels-BtktCNGw.js.map} +1 -1
- package/dist/admin/assets/{languages-CzbTaQv9.js → languages-DLjdz6gb.js} +2 -2
- package/dist/admin/assets/{languages-CzbTaQv9.js.map → languages-DLjdz6gb.js.map} +1 -1
- package/dist/admin/assets/{layers-BmcodiaH.js → layers-swLuw-3a.js} +2 -2
- package/dist/admin/assets/{layers-BmcodiaH.js.map → layers-swLuw-3a.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-CoJNwrxm.js → link-2-off-CEsI5T8h.js} +2 -2
- package/dist/admin/assets/{link-2-off-CoJNwrxm.js.map → link-2-off-CEsI5T8h.js.map} +1 -1
- package/dist/admin/assets/{link-Pyr2Y35S.js → link-C98FG_p5.js} +2 -2
- package/dist/admin/assets/{link-Pyr2Y35S.js.map → link-C98FG_p5.js.map} +1 -1
- package/dist/admin/assets/locales-CkuC7TJ1.js +2 -0
- package/dist/admin/assets/{locales-Bg3htKo8.js.map → locales-CkuC7TJ1.js.map} +1 -1
- package/dist/admin/assets/media-CbGSd_Mw.js +2 -0
- package/dist/admin/assets/{media-BCnVhaDH.js.map → media-CbGSd_Mw.js.map} +1 -1
- package/dist/admin/assets/{media-CURizGns.js → media-CeZGDGh7.js} +2 -2
- package/dist/admin/assets/{media-CURizGns.js.map → media-CeZGDGh7.js.map} +1 -1
- package/dist/admin/assets/network-BflLSKFO.js +2 -0
- package/dist/admin/assets/network-BflLSKFO.js.map +1 -0
- package/dist/admin/assets/{plus-BoDtdLCo.js → plus-cr9ZfO6j.js} +2 -2
- package/dist/admin/assets/{plus-BoDtdLCo.js.map → plus-cr9ZfO6j.js.map} +1 -1
- package/dist/admin/assets/publishing-BkxBplUZ.js +2 -0
- package/dist/admin/assets/publishing-BkxBplUZ.js.map +1 -0
- package/dist/admin/assets/{radio-group-4ok5evXq.js → radio-group-CRuWQnuV.js} +2 -2
- package/dist/admin/assets/{radio-group-4ok5evXq.js.map → radio-group-CRuWQnuV.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-DL6TzcZh.js → rotate-ccw-BP8Ba-mY.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-DL6TzcZh.js.map → rotate-ccw-BP8Ba-mY.js.map} +1 -1
- package/dist/admin/assets/schedules-BIyBlsYZ.js +2 -0
- package/dist/admin/assets/{schedules-BmB9Y73z.js.map → schedules-BIyBlsYZ.js.map} +1 -1
- package/dist/admin/assets/schema-6eUoC8fJ.js +2 -0
- package/dist/admin/assets/schema-6eUoC8fJ.js.map +1 -0
- package/dist/admin/assets/{scroll-text-PqeZm472.js → scroll-text-B5vfi9fD.js} +2 -2
- package/dist/admin/assets/{scroll-text-PqeZm472.js.map → scroll-text-B5vfi9fD.js.map} +1 -1
- package/dist/admin/assets/{search-BdwIwOzC.js → search-wj7zbkx1.js} +2 -2
- package/dist/admin/assets/{search-BdwIwOzC.js.map → search-wj7zbkx1.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-CSScloG8.js → searchSchemas-DAnwh3I3.js} +2 -2
- package/dist/admin/assets/{searchSchemas-CSScloG8.js.map → searchSchemas-DAnwh3I3.js.map} +1 -1
- package/dist/admin/assets/{sections-DqBzSKMP.js → sections-CWL-XD6m.js} +2 -2
- package/dist/admin/assets/sections-CWL-XD6m.js.map +1 -0
- package/dist/admin/assets/{sections-BTS683ur.js → sections-DBQpB0uv.js} +2 -2
- package/dist/admin/assets/{sections-BTS683ur.js.map → sections-DBQpB0uv.js.map} +1 -1
- package/dist/admin/assets/{select-C0USI-Ox.js → select-DVrPV1b3.js} +2 -2
- package/dist/admin/assets/{select-C0USI-Ox.js.map → select-DVrPV1b3.js.map} +1 -1
- package/dist/admin/assets/{send-XPWo3m4u.js → send-CzFdgUc_.js} +2 -2
- package/dist/admin/assets/{send-XPWo3m4u.js.map → send-CzFdgUc_.js.map} +1 -1
- package/dist/admin/assets/seo-Bd0sWQMo.js +2 -0
- package/dist/admin/assets/{seo-CceGYTIX.js.map → seo-Bd0sWQMo.js.map} +1 -1
- package/dist/admin/assets/settings-CqnrPmzR.js +2 -0
- package/dist/admin/assets/{settings-B60vHpZd.js.map → settings-CqnrPmzR.js.map} +1 -1
- package/dist/admin/assets/shapes-ZAkMBB-Z.js +6 -0
- package/dist/admin/assets/shapes-ZAkMBB-Z.js.map +1 -0
- package/dist/admin/assets/{skeleton-B5MP72Kw.js → skeleton-CiX26LnL.js} +2 -2
- package/dist/admin/assets/{skeleton-B5MP72Kw.js.map → skeleton-CiX26LnL.js.map} +1 -1
- package/dist/admin/assets/{snapshots-DUI2t-qF.js → snapshots-DbFQNJgN.js} +2 -2
- package/dist/admin/assets/{snapshots-DUI2t-qF.js.map → snapshots-DbFQNJgN.js.map} +1 -1
- package/dist/admin/assets/{sparkles-CvT-jxrW.js → sparkles-D_kmZJVd.js} +2 -2
- package/dist/admin/assets/{sparkles-CvT-jxrW.js.map → sparkles-D_kmZJVd.js.map} +1 -1
- package/dist/admin/assets/src-CMor9izq.js +7 -0
- package/dist/admin/assets/src-CMor9izq.js.map +1 -0
- package/dist/admin/assets/{stableId-BrtQedPy.js → stableId-g1uxJGSz.js} +2 -2
- package/dist/admin/assets/{stableId-BrtQedPy.js.map → stableId-g1uxJGSz.js.map} +1 -1
- package/dist/admin/assets/{store-CdIFG90N.js → store-CznhNKEi.js} +2 -2
- package/dist/admin/assets/{store-CdIFG90N.js.map → store-CznhNKEi.js.map} +1 -1
- package/dist/admin/assets/{switch-Dp6WYNam.js → switch-CiVf05NF.js} +2 -2
- package/dist/admin/assets/{switch-Dp6WYNam.js.map → switch-CiVf05NF.js.map} +1 -1
- package/dist/admin/assets/{theme-65PB8uAu.js → theme-Cv-MfOv8.js} +2 -2
- package/dist/admin/assets/theme-Cv-MfOv8.js.map +1 -0
- package/dist/admin/assets/titles-DrQhW8z3.js +2 -0
- package/dist/admin/assets/titles-DrQhW8z3.js.map +1 -0
- package/dist/admin/assets/tokens-B1S81Epe.js +2 -0
- package/dist/admin/assets/{tokens-ixHjAkDK.js.map → tokens-B1S81Epe.js.map} +1 -1
- package/dist/admin/assets/{tooltip-BGP1DVBt.js → tooltip-Bqf3oyqC.js} +2 -2
- package/dist/admin/assets/{tooltip-BGP1DVBt.js.map → tooltip-Bqf3oyqC.js.map} +1 -1
- package/dist/admin/assets/{undo-2-BiTANHFz.js → undo-2-DpwwRQTf.js} +2 -2
- package/dist/admin/assets/{undo-2-BiTANHFz.js.map → undo-2-DpwwRQTf.js.map} +1 -1
- package/dist/admin/assets/useContentSchema-B_q1rMrG.js +2 -0
- package/dist/admin/assets/useContentSchema-B_q1rMrG.js.map +1 -0
- package/dist/admin/assets/useCursorPager-BHYqHb3M.js +2 -0
- package/dist/admin/assets/{useCursorPager-0zHjlm-7.js.map → useCursorPager-BHYqHb3M.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-BskWSlbT.js → useDiscardGuard-C4QTfiU4.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-BskWSlbT.js.map → useDiscardGuard-C4QTfiU4.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-CU-ekPqX.js → useMediaPickerDialog-BLrVV1Kn.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-CU-ekPqX.js.map → useMediaPickerDialog-BLrVV1Kn.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-CBcq1ICg.js → useMediaUploader-CFy6lasO.js} +2 -2
- package/dist/admin/assets/useMediaUploader-CFy6lasO.js.map +1 -0
- package/dist/admin/assets/useModelIndex-NU-WlHQY.js +2 -0
- package/dist/admin/assets/useModelIndex-NU-WlHQY.js.map +1 -0
- package/dist/admin/assets/useNetworkPermission-DehDln-U.js +2 -0
- package/dist/admin/assets/{useNetworkPermission-Cts98h9d.js.map → useNetworkPermission-DehDln-U.js.map} +1 -1
- package/dist/admin/assets/{usePaletteItems-DtReWmkd.js → usePaletteItems-CFpNlSOs.js} +2 -2
- package/dist/admin/assets/{usePaletteItems-DtReWmkd.js.map → usePaletteItems-CFpNlSOs.js.map} +1 -1
- package/dist/admin/assets/usePlaces-BA4x6503.js +2 -0
- package/dist/admin/assets/usePlaces-BA4x6503.js.map +1 -0
- package/dist/admin/assets/useResolvedDefinitions-30lnwFQ1.js +2 -0
- package/dist/admin/assets/useResolvedDefinitions-30lnwFQ1.js.map +1 -0
- package/dist/admin/assets/{useResolvedScheme-C8vcQVko.js → useResolvedScheme-BVM4qLct.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-C8vcQVko.js.map → useResolvedScheme-BVM4qLct.js.map} +1 -1
- package/dist/admin/assets/useSaveShortcut-DQuNL1uJ.js +2 -0
- package/dist/admin/assets/useSaveShortcut-DQuNL1uJ.js.map +1 -0
- package/dist/admin/assets/{useSchemaScopeAccess-ByrxIdKM.js → useSchemaScopeAccess-JXOMx51q.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-ByrxIdKM.js.map → useSchemaScopeAccess-JXOMx51q.js.map} +1 -1
- package/dist/admin/assets/users-38jLQ7zr.js +2 -0
- package/dist/admin/assets/users-38jLQ7zr.js.map +1 -0
- package/dist/admin/assets/{users-DM7CXUBJ.js → users-DYwcVDqp.js} +2 -2
- package/dist/admin/assets/{users-DM7CXUBJ.js.map → users-DYwcVDqp.js.map} +1 -1
- package/dist/admin/assets/{zod-Cry7YvLY.js → zod-ZaQjjiAq.js} +2 -2
- package/dist/admin/assets/{zod-Cry7YvLY.js.map → zod-ZaQjjiAq.js.map} +1 -1
- package/dist/admin/index.html +60 -58
- package/dist/cli.js +1 -1
- package/dist/{cliMain-papyXJDd.js → cliMain-CTntiVc2.js} +107 -30
- package/dist/cliMain-CTntiVc2.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.js +1 -1
- package/dist/{contentDisposition-DOL2Xt0l.js → contentDisposition-DzhPhncr.js} +2 -2
- package/dist/{contentDisposition-DOL2Xt0l.js.map → contentDisposition-DzhPhncr.js.map} +1 -1
- package/dist/index.d.ts +43 -6
- package/dist/index.js +2 -2
- package/dist/{public-COKbHR-N.d.ts → public-CMFaGDyf.d.ts} +50 -8
- package/dist/{public-B57h4F7Y.js → public-sJCQaNaP.js} +2 -2
- package/dist/public-sJCQaNaP.js.map +1 -0
- package/dist/{s3Adapter-U01iEAcK.js → s3Adapter-CZcCl0sy.js} +2 -2
- package/dist/{s3Adapter-U01iEAcK.js.map → s3Adapter-CZcCl0sy.js.map} +1 -1
- package/dist/{worker-B-sC-eY2.js → worker-DHm2JwMZ.js} +3140 -1292
- package/dist/worker-DHm2JwMZ.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/AssistError-Cs-r9Ssc.js +0 -2
- package/dist/admin/assets/Body-BzZD-TZT.js +0 -2
- package/dist/admin/assets/Body-BzZD-TZT.js.map +0 -1
- package/dist/admin/assets/Builder-DW-GJA_q.js +0 -2
- package/dist/admin/assets/Builder-DW-GJA_q.js.map +0 -1
- package/dist/admin/assets/Form-lNrRHc0I.js +0 -2
- package/dist/admin/assets/Form-lNrRHc0I.js.map +0 -1
- package/dist/admin/assets/FormCheckboxGroup-DeeaYnzB.js +0 -2
- package/dist/admin/assets/FormCheckboxGroup-DeeaYnzB.js.map +0 -1
- package/dist/admin/assets/FormSelectField-BzE9Lq9i.js +0 -2
- package/dist/admin/assets/FormSelectField-BzE9Lq9i.js.map +0 -1
- package/dist/admin/assets/RadioTile-DQFmni5A.js.map +0 -1
- package/dist/admin/assets/RichTextField-CVHRIbnu.js.map +0 -1
- package/dist/admin/assets/StepList-BXGYD9eJ.js +0 -2
- package/dist/admin/assets/StepList-BXGYD9eJ.js.map +0 -1
- package/dist/admin/assets/Structure-D8csgrIt.js +0 -2
- package/dist/admin/assets/SubNavLink-CiCaVV8U.js.map +0 -1
- package/dist/admin/assets/auth-CQO4MBUj.js +0 -2
- package/dist/admin/assets/changeSets-8EburmT0.js +0 -2
- package/dist/admin/assets/chevron-left-DGU3HGYG.js +0 -2
- package/dist/admin/assets/content-CAjkbZEY.js +0 -3
- package/dist/admin/assets/content-CAjkbZEY.js.map +0 -1
- package/dist/admin/assets/createLucideIcon-CLmh7Go-.js +0 -2
- package/dist/admin/assets/createLucideIcon-CLmh7Go-.js.map +0 -1
- package/dist/admin/assets/develop-BOqvnlgt.js +0 -11
- package/dist/admin/assets/develop-BOqvnlgt.js.map +0 -1
- package/dist/admin/assets/es2015-BHmI7wjK.js +0 -42
- package/dist/admin/assets/es2015-BHmI7wjK.js.map +0 -1
- package/dist/admin/assets/followPlural-Cm7v_Udv.js +0 -2
- package/dist/admin/assets/followPlural-Cm7v_Udv.js.map +0 -1
- package/dist/admin/assets/inbox-DGO2D8fa.js +0 -2
- package/dist/admin/assets/inbox-DGO2D8fa.js.map +0 -1
- package/dist/admin/assets/index-BIIU9ZI6.js +0 -4
- package/dist/admin/assets/index-BIIU9ZI6.js.map +0 -1
- package/dist/admin/assets/index-lxe7WimO.css +0 -2
- package/dist/admin/assets/locales-Bg3htKo8.js +0 -2
- package/dist/admin/assets/media-BCnVhaDH.js +0 -2
- package/dist/admin/assets/network-BixABr0o.js +0 -2
- package/dist/admin/assets/network-BixABr0o.js.map +0 -1
- package/dist/admin/assets/publishing-Dke9bSKp.js +0 -2
- package/dist/admin/assets/publishing-Dke9bSKp.js.map +0 -1
- package/dist/admin/assets/schedules-BmB9Y73z.js +0 -2
- package/dist/admin/assets/schema-D-qo7XSF.js +0 -2
- package/dist/admin/assets/schema-D-qo7XSF.js.map +0 -1
- package/dist/admin/assets/sections-DqBzSKMP.js.map +0 -1
- package/dist/admin/assets/seo-CceGYTIX.js +0 -2
- package/dist/admin/assets/settings-B60vHpZd.js +0 -2
- package/dist/admin/assets/shapes-B5twqZcp.js +0 -6
- package/dist/admin/assets/shapes-B5twqZcp.js.map +0 -1
- package/dist/admin/assets/src-ndgTSYLX.js +0 -7
- package/dist/admin/assets/src-ndgTSYLX.js.map +0 -1
- package/dist/admin/assets/theme-65PB8uAu.js.map +0 -1
- package/dist/admin/assets/titles-CQiqqDw-.js +0 -2
- package/dist/admin/assets/titles-CQiqqDw-.js.map +0 -1
- package/dist/admin/assets/tokens-ixHjAkDK.js +0 -2
- package/dist/admin/assets/useContentSchema-DtYfhsd2.js +0 -2
- package/dist/admin/assets/useContentSchema-DtYfhsd2.js.map +0 -1
- package/dist/admin/assets/useCursorPager-0zHjlm-7.js +0 -2
- package/dist/admin/assets/useMediaUploader-CBcq1ICg.js.map +0 -1
- package/dist/admin/assets/useNetworkPermission-Cts98h9d.js +0 -2
- package/dist/admin/assets/usePlaces-DC47wVeU.js +0 -2
- package/dist/admin/assets/usePlaces-DC47wVeU.js.map +0 -1
- package/dist/admin/assets/useQueries-CirW3Mvp.js +0 -2
- package/dist/admin/assets/useQueries-CirW3Mvp.js.map +0 -1
- package/dist/admin/assets/useSaveShortcut-rKtp1qK7.js +0 -2
- package/dist/admin/assets/useSaveShortcut-rKtp1qK7.js.map +0 -1
- package/dist/admin/assets/users-2iJYwlJb.js +0 -2
- package/dist/admin/assets/users-2iJYwlJb.js.map +0 -1
- package/dist/cliMain-papyXJDd.js.map +0 -1
- package/dist/public-B57h4F7Y.js.map +0 -1
- package/dist/worker-B-sC-eY2.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{Pt as r,at as i,bn as a,ct as o,dt as s,jt as c,ut as l}from"./src-ndgTSYLX.js";import{a as u}from"./media-BCnVhaDH.js";import{A as d,O as f,n as p,o as ee,r as te,v as ne}from"./badge-CqKF1pwz.js";import{g as re,h as m,n as h,t as g}from"./createLucideIcon-CLmh7Go-.js";import{i as ie,n as ae,t as oe}from"./RowTitle-Bqt6evG9.js";import{C as se,E as _}from"./InfoHint-CSEtcHjL.js";import{T as v,x as ce}from"./es2015-BHmI7wjK.js";import{i as y,n as le}from"./skeleton-B5MP72Kw.js";import{a as b,i as x,n as S,o as ue,r as C,s as de,t as fe}from"./select-C0USI-Ox.js";import{i as w}from"./InlineConfirm-yW-iUKFC.js";import{t as pe}from"./circle-check-C37MSJqX.js";import{n as me}from"./external-link-CdG6kHfA.js";import{n as T,o as E,s as D,t as O}from"./Thumbnail-DNj5TRBI.js";import{t as k}from"./search-BdwIwOzC.js";import{m as A}from"./dropdown-menu-_xfaEp5C.js";import{t as j}from"./rotate-ccw-DL6TzcZh.js";import{t as M}from"./cn-DVhJ55Mo.js";import{a as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./table-zG68ipQc.js";import{t as he}from"./useSearchInput-1fDoEtXe.js";import{t as ge}from"./constants-DCtq_UOe.js";import{t as _e}from"./Panel-Bcl09TtM.js";var B={name:`images`,size:24,node:[[`path`,{d:`m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16`,key:`9kzy35`}],[`path`,{d:`M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2`,key:`1t0f0t`}],[`circle`,{cx:`13`,cy:`7`,r:`1`,fill:`currentColor`,key:`1obus6`}],[`rect`,{x:`8`,y:`2`,width:`14`,height:`14`,rx:`2`,key:`1gvhby`}]]};B.node;var V=g(B),H={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};H.node;var U=g(H),W={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};W.node;var G=g(W),K=e(t(),1),ve=(e,t,n)=>{let r=t===void 0?-1:e.indexOf(t),i=e.indexOf(n);if(r!==-1&&i!==-1)return e.slice(Math.min(r,i),Math.max(r,i)+1)},q=(e,t)=>{let n=(0,K.useRef)(void 0);return{select:({id:r,checked:i,shiftKey:a})=>{let o=a?ve(e,n.current,r):void 0;if(o)for(let e of o)t(e,!0);else t(r,i);n.current=r}}},J=e(n(),1),ye=({asset:e,selected:t,selectable:n,active:r,onSelect:i,onOpen:a})=>{let{t:o}=h(),s=E[e.status];return(0,J.jsxs)(`li`,{className:M(`group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input`,(t||r)&&`border-primary ring-2 ring-primary hover:border-primary`),children:[(0,J.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.shiftKey&&n){i(!t,!0);return}a()},className:`flex w-full flex-col text-left outline-none`,"aria-label":o(`media.openDetails`,{name:e.filename}),children:[(0,J.jsx)(O,{asset:e,className:`aspect-square w-full border-b`}),(0,J.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5 px-3 py-2.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-sm font-medium`,title:e.filename,children:e.filename}),(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground`,children:[(0,J.jsxs)(`span`,{className:`truncate`,children:[T(e.filename,e.mimeType),` · `,D(e.sizeBytes)]}),e.visibility===`private`?(0,J.jsx)(d,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):null]})]})]}),e.status===`ready`?null:(0,J.jsx)(p,{tone:s.tone,label:o(s.labelKey),size:`sm`,className:`pointer-events-none absolute top-2 right-2`}),n?(0,J.jsx)(w,{checked:t,onClick:e=>{e.shiftKey&&(e.preventDefault(),i(!t,!0))},onCheckedChange:e=>i(e===!0,!1),"aria-label":o(`media.select`,{name:e.filename}),className:`absolute top-2 left-2 bg-card`}):null]})},be=({assets:e,selected:t,selectable:n,activeId:r,onSelectChange:i,onOpen:a})=>{let{t:o}=h(),s=q(e.map(e=>e.id),i);return(0,J.jsx)(`ul`,{"aria-label":o(`media.assetsLabel`,{count:e.length}),className:`grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4`,children:e.map(e=>(0,J.jsx)(ye,{asset:e,selected:t.has(e.id),selectable:n,active:e.id===r,onSelect:(t,n)=>s.select({id:e.id,checked:t,shiftKey:n}),onOpen:()=>a(e)},e.id))})},xe=({assets:e,selected:t,selectable:n,onSelectChange:r,onOpen:i})=>{let{t:a}=h(),o=q(e.map(e=>e.id),r);return(0,J.jsx)(R,{children:(0,J.jsxs)(z,{children:[(0,J.jsx)(N,{children:(0,J.jsxs)(I,{children:[n?(0,J.jsx)(P,{className:`w-10`,children:(0,J.jsx)(`span`,{className:`sr-only`,children:a(`media.selection`)})}):null,(0,J.jsx)(P,{children:a(`media.fields.filename`)}),(0,J.jsx)(P,{children:a(`media.fields.type`)}),(0,J.jsx)(P,{className:`text-right`,children:a(`media.fields.size`)}),(0,J.jsx)(P,{children:a(`media.fields.status`)}),(0,J.jsx)(P,{children:a(`media.fields.uploaded`)})]})}),(0,J.jsx)(F,{children:e.map(e=>{let r=E[e.status],s=t.has(e.id);return(0,J.jsxs)(I,{"data-state":s?`selected`:void 0,children:[n?(0,J.jsx)(L,{children:(0,J.jsx)(w,{checked:s,onClick:t=>{t.shiftKey&&(t.preventDefault(),o.select({id:e.id,checked:!s,shiftKey:!0}))},onCheckedChange:t=>o.select({id:e.id,checked:t===!0,shiftKey:!1}),"aria-label":a(`media.select`,{name:e.filename})})}):null,(0,J.jsx)(L,{className:`max-w-96`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-3`,children:[(0,J.jsx)(O,{asset:e,className:`size-8 shrink-0 rounded-md`}),(0,J.jsx)(oe,{asChild:!0,className:`min-w-0 truncate text-left`,children:(0,J.jsx)(`button`,{type:`button`,onClick:()=>i(e),children:e.filename})}),e.visibility===`private`?(0,J.jsx)(d,{role:`img`,"aria-label":a(`media.visibility.private`),className:`size-3.5 shrink-0 text-muted-foreground`}):null]})}),(0,J.jsx)(L,{className:`text-muted-foreground`,title:e.mimeType,children:T(e.filename,e.mimeType)}),(0,J.jsx)(L,{className:`text-right tabular-nums`,children:D(e.sizeBytes)}),(0,J.jsx)(L,{children:(0,J.jsx)(p,{tone:r.tone,label:a(r.labelKey),size:`sm`})}),(0,J.jsx)(L,{className:`whitespace-nowrap`,title:ae(e.createdAt),children:ie(e.createdAt)})]},e.id)})})]})})},Se=({query:e,filtered:t,view:n,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s})=>{let{t:c}=h(),l=u(e);if(l.isPending)return(0,J.jsx)(ne,{rows:4});if(l.isError)return(0,J.jsx)(te,{error:l.error,onRetry:()=>void l.refetch()});let d=l.data.pages.flatMap(e=>e.items);if(d.length===0){let n=t||e.folder!==void 0;return(0,J.jsx)(ee,{icon:V,size:n?`panel`:`page`,title:c(t?`media.emptyFiltered`:n?`media.emptyFolder`:`media.empty`)})}return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[n===`grid`?(0,J.jsx)(be,{assets:d,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s}):(0,J.jsx)(xe,{assets:d,selected:r,selectable:i,onSelectChange:o,onOpen:s}),l.hasNextPage?(0,J.jsx)(`div`,{className:`flex justify-center`,children:(0,J.jsx)(y,{variant:`outline`,disabled:l.isFetchingNextPage,"aria-busy":l.isFetchingNextPage||void 0,onClick:()=>void l.fetchNextPage(),children:l.isFetchingNextPage?c(`common.loading`):c(`media.loadMore`)})}):null]})},Y=`all`,Ce={image:`media.types.image`,video:`media.types.video`,audio:`media.types.audio`,pdf:`media.types.pdf`},we=({query:e,type:t,view:n,onQueryChange:r,onTypeChange:i,onViewChange:a})=>{let{t:o}=h(),{text:s,setText:c}=he(e,r);return(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsxs)(`div`,{className:`relative min-w-48 flex-1`,children:[(0,J.jsx)(k,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,J.jsx)(le,{type:`search`,value:s,onChange:e=>c(e.target.value),"aria-label":o(`media.search`),placeholder:o(`media.searchPlaceholder`),inputSize:`sm`,className:`pl-8`})]}),(0,J.jsxs)(fe,{value:t??Y,onValueChange:e=>i(e===Y?void 0:e),children:[(0,J.jsx)(x,{size:`sm`,"aria-label":o(`media.typeFilter`),className:`w-36`,children:(0,J.jsx)(b,{})}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{value:Y,children:o(`media.types.all`)}),ge.map(e=>(0,J.jsx)(C,{value:e,children:o(Ce[e])},e))]})]}),(0,J.jsxs)(`div`,{role:`group`,"aria-label":o(`media.view`),className:`flex h-9 items-center gap-0.5 rounded-lg border border-input px-px`,children:[(0,J.jsx)(y,{variant:n===`grid`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`grid`,"aria-label":o(`media.viewGrid`),onClick:()=>a(`grid`),children:(0,J.jsx)(U,{"aria-hidden":`true`})}),(0,J.jsx)(y,{variant:n===`list`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`list`,"aria-label":o(`media.viewList`),onClick:()=>a(`list`),children:(0,J.jsx)(A,{"aria-hidden":`true`})})]})]})},Te=({label:e,multiple:t=!0,onFiles:n,...r})=>{let i=(0,K.useRef)(null);return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(y,{...r,onClick:()=>i.current?.click(),children:[(0,J.jsx)(G,{"aria-hidden":`true`}),e]}),(0,J.jsx)(`input`,{ref:i,type:`file`,multiple:t,tabIndex:-1,"aria-hidden":`true`,className:`sr-only`,onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,t.length>0&&n(t)}})]})},X=c()(e=>({items:[],add:t=>e(e=>({items:[...e.items,t]})),update:(t,n)=>e(e=>({items:e.items.map(e=>e.id===t?{...e,...n}:e)})),remove:t=>e(e=>({items:e.items.filter(e=>e.id!==t)})),clearFinished:()=>e(e=>({items:e.items.filter(e=>e.status!==`done`)}))})),Z=class extends Error{status;body;constructor(e,t){super(`Upload failed with status ${e}`),this.name=`UploadTransferError`,this.status=e,this.body=t}},Ee=({url:e,form:t,onProgress:n,signal:r})=>new Promise((i,a)=>{let o=new XMLHttpRequest;o.open(`POST`,e),o.withCredentials=!1,o.upload.onprogress=e=>{e.lengthComputable&&e.total>0&&n(e.loaded/e.total)},o.onload=()=>{if(o.status>=200&&o.status<300){n(1),i();return}a(new Z(o.status,o.responseText))},o.onerror=()=>a(new Z(0,``)),o.onabort=()=>a(new DOMException(`Upload cancelled`,`AbortError`)),r?.addEventListener(`abort`,()=>o.abort(),{once:!0}),o.send(t)}),De=e=>e instanceof Z?e.status===0?v.t(`media.upload.unreachable`):e.status===413||/EntityTooLarge/.test(e.body)?v.t(`errors.codes.FILE_TOO_LARGE`):v.t(`media.upload.transferFailed`,{status:e.status}):ce(e),Q=100,Oe=({item:e,onRetry:t,onDismiss:n})=>{let{t:r}=h(),a=Math.round(e.progress*Q),o=e.status===`uploading`?r(`media.upload.uploading`,{percent:a}):e.status===`confirming`?r(`media.upload.checking`):e.status===`done`?r(`media.upload.done`):De(e.error);return(0,J.jsxs)(`li`,{className:`flex items-start gap-3 px-5 py-2.5`,children:[(0,J.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:e.status===`done`?(0,J.jsx)(pe,{"aria-hidden":`true`,className:`size-4 text-success`}):e.status===`failed`?(0,J.jsx)(me,{"aria-hidden":`true`,className:`size-4 text-destructive`}):(0,J.jsx)(i,{"aria-hidden":`true`,className:`size-4 animate-spin text-muted-foreground motion-reduce:animate-none`})}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,J.jsxs)(`p`,{className:`flex items-baseline gap-2 text-sm`,children:[(0,J.jsx)(`span`,{className:`truncate font-medium`,children:e.file.name}),(0,J.jsx)(`span`,{className:`shrink-0 text-meta text-muted-foreground`,children:D(e.file.size)})]}),e.status===`uploading`||e.status===`confirming`?(0,J.jsx)(`div`,{role:`progressbar`,"aria-label":r(`media.upload.progress`,{name:e.file.name}),"aria-valuemin":0,"aria-valuemax":Q,"aria-valuenow":a,className:`h-1.5 overflow-hidden rounded-full bg-muted`,style:{"--upload-progress":`${a}%`},children:(0,J.jsx)(`div`,{className:`h-full w-[var(--upload-progress)] bg-primary transition-[width]`})}):null,(0,J.jsx)(`p`,{className:M(`text-meta`,e.status===`failed`?`text-destructive`:`text-muted-foreground`),children:o})]}),e.status===`failed`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.retry`,{name:e.file.name}),onClick:t,children:(0,J.jsx)(j,{"aria-hidden":`true`})}):null,e.status===`failed`||e.status===`done`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.dismiss`,{name:e.file.name}),onClick:n,children:(0,J.jsx)(f,{"aria-hidden":`true`})}):null]})},ke=({onRetry:e,onDismiss:t})=>{let{t:n}=h(),r=X(e=>e.items),i=X(e=>e.clearFinished),[a,o]=(0,K.useState)(!1);if(r.length===0)return null;let s=r.filter(e=>e.status===`uploading`||e.status===`confirming`).length,c=r.filter(e=>e.status===`failed`).length,l=r.length-s-c,u=s===0&&c===0,d=!u||a;return(0,J.jsx)(_e,{title:n(`media.upload.queueTitle`),titleAs:`h2`,flush:d,actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-meta text-muted-foreground`,children:u?n(`media.upload.doneSummary`,{count:l}):n(`media.upload.summary`,{active:s,failed:c})}),u?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-expanded":d,"aria-label":n(d?`media.upload.hideFinished`:`media.upload.showFinished`),onClick:()=>o(e=>!e),children:d?(0,J.jsx)(ue,{"aria-hidden":`true`}):(0,J.jsx)(de,{"aria-hidden":`true`})}):null,l>0?(0,J.jsx)(y,{variant:`ghost`,size:`sm`,onClick:i,children:n(`media.upload.clearFinished`)}):null]}),bodyClassName:d?void 0:`hidden`,children:d?(0,J.jsx)(`ul`,{className:`max-h-64 divide-y overflow-y-auto`,children:r.map(n=>(0,J.jsx)(Oe,{item:n,onRetry:()=>e(n.id),onDismiss:()=>t(n.id)},n.id))}):null})},Ae=`application/octet-stream`,je=e=>{let t={filename:e.file.name,mimeType:e.file.type||Ae,sizeBytes:e.file.size};return o(()=>e.replaceAssetId?l.media.assets.replace(e.replaceAssetId,t):l.media.uploads.create({...t,folderId:e.folderId,visibility:e.visibility}))},$=async(e,t,n)=>{let r=await je(e);return await Ee({url:re(r,s()),form:m(r,e.file,e.file.name),onProgress:t}),n(),o(()=>l.media.uploads.confirm(r.grantId))},Me=()=>{let e=a(),{add:t,update:n,remove:i}=X.getState(),o=(0,K.useCallback)(async t=>{n(t.id,{status:`uploading`,progress:0,error:void 0});try{let e=await $(t,e=>n(t.id,{progress:e}),()=>n(t.id,{status:`confirming`}));n(t.id,{status:`done`,assetId:e.id}),t.replaceAssetId&&_.success(v.t(`media.upload.replaced`,{name:t.file.name}))}catch(e){se(e,`uploading ${t.file.name}`),n(t.id,{status:`failed`,error:e})}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e,n]);return{enqueue:(0,K.useCallback)((e,n)=>{for(let r of e){let e={id:crypto.randomUUID(),file:r,folderId:n.folderId,visibility:n.visibility,replaceAssetId:n.replaceAssetId,status:`uploading`,progress:0,error:void 0,assetId:void 0};t(e),o(e)}},[t,o]),retry:(0,K.useCallback)(e=>{let t=X.getState().items.find(t=>t.id===e);t&&o(t)},[o]),dismiss:i,uploadOne:(0,K.useCallback)(async t=>{try{let n=await $({file:t,folderId:null,visibility:`public`,replaceAssetId:void 0},()=>void 0,()=>void 0);return e.setQueryData(r.media.asset(n.id),n),{id:n.id,alt:n.alt||null}}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e])}};export{Se as a,V as c,we as i,ke as n,G as o,Te as r,U as s,Me as t};
|
|
2
|
-
//# sourceMappingURL=useMediaUploader-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{Bt as r,En as i,Lt as a,_t as o,dt as s,gt as c,mt as l}from"./src-CMor9izq.js";import{a as u}from"./media-CbGSd_Mw.js";import{A as d,O as f,n as p,o as ee,r as te,v as ne}from"./badge-DGqA_yr_.js";import{g as re,h as m,n as h,t as g}from"./createLucideIcon-BOsNKleB.js";import{i as ie,n as ae,t as oe}from"./RowTitle-DH9OZs3g.js";import{C as se,E as _}from"./InfoHint-tlSeZB9U.js";import{T as v,x as ce}from"./es2015-Cv57ynE1.js";import{i as y,n as le}from"./skeleton-CiX26LnL.js";import{a as b,i as x,n as S,o as ue,r as C,s as de,t as fe}from"./select-DVrPV1b3.js";import{i as w}from"./InlineConfirm-Kj9AOIFO.js";import{t as pe}from"./circle-check-DtDq7QMo.js";import{n as me}from"./external-link-Bs9YRzvY.js";import{n as T,o as E,s as D,t as O}from"./Thumbnail-C2A_Ub77.js";import{t as k}from"./search-wj7zbkx1.js";import{m as A}from"./dropdown-menu-Bz7CLcRK.js";import{t as j}from"./rotate-ccw-BP8Ba-mY.js";import{t as M}from"./cn-DVhJ55Mo.js";import{a as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./table-zG68ipQc.js";import{t as he}from"./useSearchInput-1fDoEtXe.js";import{t as ge}from"./constants-DCtq_UOe.js";import{t as _e}from"./Panel-Bcl09TtM.js";var B={name:`images`,size:24,node:[[`path`,{d:`m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16`,key:`9kzy35`}],[`path`,{d:`M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2`,key:`1t0f0t`}],[`circle`,{cx:`13`,cy:`7`,r:`1`,fill:`currentColor`,key:`1obus6`}],[`rect`,{x:`8`,y:`2`,width:`14`,height:`14`,rx:`2`,key:`1gvhby`}]]};B.node;var V=g(B),H={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};H.node;var U=g(H),W={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};W.node;var G=g(W),K=e(t(),1),ve=(e,t,n)=>{let r=t===void 0?-1:e.indexOf(t),i=e.indexOf(n);if(r!==-1&&i!==-1)return e.slice(Math.min(r,i),Math.max(r,i)+1)},q=(e,t)=>{let n=(0,K.useRef)(void 0);return{select:({id:r,checked:i,shiftKey:a})=>{let o=a?ve(e,n.current,r):void 0;if(o)for(let e of o)t(e,!0);else t(r,i);n.current=r}}},J=e(n(),1),ye=({asset:e,selected:t,selectable:n,active:r,onSelect:i,onOpen:a})=>{let{t:o}=h(),s=E[e.status];return(0,J.jsxs)(`li`,{className:M(`group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input`,(t||r)&&`border-primary ring-2 ring-primary hover:border-primary`),children:[(0,J.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.shiftKey&&n){i(!t,!0);return}a()},className:`flex w-full flex-col text-left outline-none`,"aria-label":o(`media.openDetails`,{name:e.filename}),children:[(0,J.jsx)(O,{asset:e,className:`aspect-square w-full border-b`}),(0,J.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5 px-3 py-2.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-sm font-medium`,title:e.filename,children:e.filename}),(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground`,children:[(0,J.jsxs)(`span`,{className:`truncate`,children:[T(e.filename,e.mimeType),` · `,D(e.sizeBytes)]}),e.visibility===`private`?(0,J.jsx)(d,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):null]})]})]}),e.status===`ready`?null:(0,J.jsx)(p,{tone:s.tone,label:o(s.labelKey),size:`sm`,className:`pointer-events-none absolute top-2 right-2`}),n?(0,J.jsx)(w,{checked:t,onClick:e=>{e.shiftKey&&(e.preventDefault(),i(!t,!0))},onCheckedChange:e=>i(e===!0,!1),"aria-label":o(`media.select`,{name:e.filename}),className:`absolute top-2 left-2 bg-card`}):null]})},be=({assets:e,selected:t,selectable:n,activeId:r,onSelectChange:i,onOpen:a})=>{let{t:o}=h(),s=q(e.map(e=>e.id),i);return(0,J.jsx)(`ul`,{"aria-label":o(`media.assetsLabel`,{count:e.length}),className:`grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4`,children:e.map(e=>(0,J.jsx)(ye,{asset:e,selected:t.has(e.id),selectable:n,active:e.id===r,onSelect:(t,n)=>s.select({id:e.id,checked:t,shiftKey:n}),onOpen:()=>a(e)},e.id))})},xe=({assets:e,selected:t,selectable:n,onSelectChange:r,onOpen:i})=>{let{t:a}=h(),o=q(e.map(e=>e.id),r);return(0,J.jsx)(R,{children:(0,J.jsxs)(z,{children:[(0,J.jsx)(N,{children:(0,J.jsxs)(I,{children:[n?(0,J.jsx)(P,{className:`w-10`,children:(0,J.jsx)(`span`,{className:`sr-only`,children:a(`media.selection`)})}):null,(0,J.jsx)(P,{children:a(`media.fields.filename`)}),(0,J.jsx)(P,{children:a(`media.fields.type`)}),(0,J.jsx)(P,{className:`text-right`,children:a(`media.fields.size`)}),(0,J.jsx)(P,{children:a(`media.fields.status`)}),(0,J.jsx)(P,{children:a(`media.fields.uploaded`)})]})}),(0,J.jsx)(F,{children:e.map(e=>{let r=E[e.status],s=t.has(e.id);return(0,J.jsxs)(I,{"data-state":s?`selected`:void 0,children:[n?(0,J.jsx)(L,{children:(0,J.jsx)(w,{checked:s,onClick:t=>{t.shiftKey&&(t.preventDefault(),o.select({id:e.id,checked:!s,shiftKey:!0}))},onCheckedChange:t=>o.select({id:e.id,checked:t===!0,shiftKey:!1}),"aria-label":a(`media.select`,{name:e.filename})})}):null,(0,J.jsx)(L,{className:`max-w-96`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-3`,children:[(0,J.jsx)(O,{asset:e,className:`size-8 shrink-0 rounded-md`}),(0,J.jsx)(oe,{asChild:!0,className:`min-w-0 truncate text-left`,children:(0,J.jsx)(`button`,{type:`button`,onClick:()=>i(e),children:e.filename})}),e.visibility===`private`?(0,J.jsx)(d,{role:`img`,"aria-label":a(`media.visibility.private`),className:`size-3.5 shrink-0 text-muted-foreground`}):null]})}),(0,J.jsx)(L,{className:`text-muted-foreground`,title:e.mimeType,children:T(e.filename,e.mimeType)}),(0,J.jsx)(L,{className:`text-right tabular-nums`,children:D(e.sizeBytes)}),(0,J.jsx)(L,{children:(0,J.jsx)(p,{tone:r.tone,label:a(r.labelKey),size:`sm`})}),(0,J.jsx)(L,{className:`whitespace-nowrap`,title:ae(e.createdAt),children:ie(e.createdAt)})]},e.id)})})]})})},Se=({query:e,filtered:t,view:n,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s})=>{let{t:c}=h(),l=u(e);if(l.isPending)return(0,J.jsx)(ne,{rows:4});if(l.isError)return(0,J.jsx)(te,{error:l.error,onRetry:()=>void l.refetch()});let d=l.data.pages.flatMap(e=>e.items);if(d.length===0){let n=t||e.folder!==void 0;return(0,J.jsx)(ee,{icon:V,size:n?`panel`:`page`,title:c(t?`media.emptyFiltered`:n?`media.emptyFolder`:`media.empty`)})}return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[n===`grid`?(0,J.jsx)(be,{assets:d,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s}):(0,J.jsx)(xe,{assets:d,selected:r,selectable:i,onSelectChange:o,onOpen:s}),l.hasNextPage?(0,J.jsx)(`div`,{className:`flex justify-center`,children:(0,J.jsx)(y,{variant:`outline`,disabled:l.isFetchingNextPage,"aria-busy":l.isFetchingNextPage||void 0,onClick:()=>void l.fetchNextPage(),children:l.isFetchingNextPage?c(`common.loading`):c(`media.loadMore`)})}):null]})},Y=`all`,Ce={image:`media.types.image`,video:`media.types.video`,audio:`media.types.audio`,pdf:`media.types.pdf`},we=({query:e,type:t,view:n,onQueryChange:r,onTypeChange:i,onViewChange:a})=>{let{t:o}=h(),{text:s,setText:c}=he(e,r);return(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsxs)(`div`,{className:`relative min-w-48 flex-1`,children:[(0,J.jsx)(k,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,J.jsx)(le,{type:`search`,value:s,onChange:e=>c(e.target.value),"aria-label":o(`media.search`),placeholder:o(`media.searchPlaceholder`),inputSize:`sm`,className:`pl-8`})]}),(0,J.jsxs)(fe,{value:t??Y,onValueChange:e=>i(e===Y?void 0:e),children:[(0,J.jsx)(x,{size:`sm`,"aria-label":o(`media.typeFilter`),className:`w-36`,children:(0,J.jsx)(b,{})}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{value:Y,children:o(`media.types.all`)}),ge.map(e=>(0,J.jsx)(C,{value:e,children:o(Ce[e])},e))]})]}),(0,J.jsxs)(`div`,{role:`group`,"aria-label":o(`media.view`),className:`flex h-9 items-center gap-0.5 rounded-lg border border-input px-px`,children:[(0,J.jsx)(y,{variant:n===`grid`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`grid`,"aria-label":o(`media.viewGrid`),onClick:()=>a(`grid`),children:(0,J.jsx)(U,{"aria-hidden":`true`})}),(0,J.jsx)(y,{variant:n===`list`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`list`,"aria-label":o(`media.viewList`),onClick:()=>a(`list`),children:(0,J.jsx)(A,{"aria-hidden":`true`})})]})]})},Te=({label:e,multiple:t=!0,onFiles:n,...r})=>{let i=(0,K.useRef)(null);return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(y,{...r,onClick:()=>i.current?.click(),children:[(0,J.jsx)(G,{"aria-hidden":`true`}),e]}),(0,J.jsx)(`input`,{ref:i,type:`file`,multiple:t,tabIndex:-1,"aria-hidden":`true`,className:`sr-only`,onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,t.length>0&&n(t)}})]})},X=a()(e=>({items:[],add:t=>e(e=>({items:[...e.items,t]})),update:(t,n)=>e(e=>({items:e.items.map(e=>e.id===t?{...e,...n}:e)})),remove:t=>e(e=>({items:e.items.filter(e=>e.id!==t)})),clearFinished:()=>e(e=>({items:e.items.filter(e=>e.status!==`done`)}))})),Z=class extends Error{status;body;constructor(e,t){super(`Upload failed with status ${e}`),this.name=`UploadTransferError`,this.status=e,this.body=t}},Ee=({url:e,form:t,onProgress:n,signal:r})=>new Promise((i,a)=>{let o=new XMLHttpRequest;o.open(`POST`,e),o.withCredentials=!1,o.upload.onprogress=e=>{e.lengthComputable&&e.total>0&&n(e.loaded/e.total)},o.onload=()=>{if(o.status>=200&&o.status<300){n(1),i();return}a(new Z(o.status,o.responseText))},o.onerror=()=>a(new Z(0,``)),o.onabort=()=>a(new DOMException(`Upload canceled`,`AbortError`)),r?.addEventListener(`abort`,()=>o.abort(),{once:!0}),o.send(t)}),De=e=>e instanceof Z?e.status===0?v.t(`media.upload.unreachable`):e.status===413||/EntityTooLarge/.test(e.body)?v.t(`errors.codes.FILE_TOO_LARGE`):v.t(`media.upload.transferFailed`,{status:e.status}):ce(e),Q=100,Oe=({item:e,onRetry:t,onDismiss:n})=>{let{t:r}=h(),i=Math.round(e.progress*Q),a=e.status===`uploading`?r(`media.upload.uploading`,{percent:i}):e.status===`confirming`?r(`media.upload.checking`):e.status===`done`?r(`media.upload.done`):De(e.error);return(0,J.jsxs)(`li`,{className:`flex items-start gap-3 px-5 py-2.5`,children:[(0,J.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:e.status===`done`?(0,J.jsx)(pe,{"aria-hidden":`true`,className:`size-4 text-success`}):e.status===`failed`?(0,J.jsx)(me,{"aria-hidden":`true`,className:`size-4 text-destructive`}):(0,J.jsx)(s,{"aria-hidden":`true`,className:`size-4 animate-spin text-muted-foreground motion-reduce:animate-none`})}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,J.jsxs)(`p`,{className:`flex items-baseline gap-2 text-sm`,children:[(0,J.jsx)(`span`,{className:`truncate font-medium`,children:e.file.name}),(0,J.jsx)(`span`,{className:`shrink-0 text-meta text-muted-foreground`,children:D(e.file.size)})]}),e.status===`uploading`||e.status===`confirming`?(0,J.jsx)(`div`,{role:`progressbar`,"aria-label":r(`media.upload.progress`,{name:e.file.name}),"aria-valuemin":0,"aria-valuemax":Q,"aria-valuenow":i,className:`h-1.5 overflow-hidden rounded-full bg-muted`,style:{"--upload-progress":`${i}%`},children:(0,J.jsx)(`div`,{className:`h-full w-[var(--upload-progress)] bg-primary transition-[width]`})}):null,(0,J.jsx)(`p`,{className:M(`text-meta`,e.status===`failed`?`text-destructive`:`text-muted-foreground`),children:a})]}),e.status===`failed`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.retry`,{name:e.file.name}),onClick:t,children:(0,J.jsx)(j,{"aria-hidden":`true`})}):null,e.status===`failed`||e.status===`done`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.dismiss`,{name:e.file.name}),onClick:n,children:(0,J.jsx)(f,{"aria-hidden":`true`})}):null]})},ke=({onRetry:e,onDismiss:t})=>{let{t:n}=h(),r=X(e=>e.items),i=X(e=>e.clearFinished),[a,o]=(0,K.useState)(!1);if(r.length===0)return null;let s=r.filter(e=>e.status===`uploading`||e.status===`confirming`).length,c=r.filter(e=>e.status===`failed`).length,l=r.length-s-c,u=s===0&&c===0,d=!u||a;return(0,J.jsx)(_e,{title:n(`media.upload.queueTitle`),titleAs:`h2`,flush:d,actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-meta text-muted-foreground`,children:u?n(`media.upload.doneSummary`,{count:l}):n(`media.upload.summary`,{active:s,failed:c})}),u?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-expanded":d,"aria-label":n(d?`media.upload.hideFinished`:`media.upload.showFinished`),onClick:()=>o(e=>!e),children:d?(0,J.jsx)(ue,{"aria-hidden":`true`}):(0,J.jsx)(de,{"aria-hidden":`true`})}):null,l>0?(0,J.jsx)(y,{variant:`ghost`,size:`sm`,onClick:i,children:n(`media.upload.clearFinished`)}):null]}),bodyClassName:d?void 0:`hidden`,children:d?(0,J.jsx)(`ul`,{className:`max-h-64 divide-y overflow-y-auto`,children:r.map(n=>(0,J.jsx)(Oe,{item:n,onRetry:()=>e(n.id),onDismiss:()=>t(n.id)},n.id))}):null})},Ae=`application/octet-stream`,je=e=>{let t={filename:e.file.name,mimeType:e.file.type||Ae,sizeBytes:e.file.size};return l(()=>e.replaceAssetId?c.media.assets.replace(e.replaceAssetId,t):c.media.uploads.create({...t,folderId:e.folderId,visibility:e.visibility}))},$=async(e,t,n)=>{let r=await je(e);return await Ee({url:re(r,o()),form:m(r,e.file,e.file.name),onProgress:t}),n(),l(()=>c.media.uploads.confirm(r.grantId))},Me=()=>{let e=i(),{add:t,update:n,remove:a}=X.getState(),o=(0,K.useCallback)(async t=>{n(t.id,{status:`uploading`,progress:0,error:void 0});try{let e=await $(t,e=>n(t.id,{progress:e}),()=>n(t.id,{status:`confirming`}));n(t.id,{status:`done`,assetId:e.id}),t.replaceAssetId&&_.success(v.t(`media.upload.replaced`,{name:t.file.name}))}catch(e){se(e,`uploading ${t.file.name}`),n(t.id,{status:`failed`,error:e})}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e,n]);return{enqueue:(0,K.useCallback)((e,n)=>{for(let r of e){let e={id:crypto.randomUUID(),file:r,folderId:n.folderId,visibility:n.visibility,replaceAssetId:n.replaceAssetId,status:`uploading`,progress:0,error:void 0,assetId:void 0};t(e),o(e)}},[t,o]),retry:(0,K.useCallback)(e=>{let t=X.getState().items.find(t=>t.id===e);t&&o(t)},[o]),dismiss:a,uploadOne:(0,K.useCallback)(async t=>{try{let n=await $({file:t,folderId:null,visibility:`public`,replaceAssetId:void 0},()=>void 0,()=>void 0);return e.setQueryData(r.media.asset(n.id),n),{id:n.id,alt:n.alt||null}}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e])}};export{Se as a,V as c,we as i,ke as n,G as o,Te as r,U as s,Me as t};
|
|
2
|
+
//# sourceMappingURL=useMediaUploader-CFy6lasO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMediaUploader-CFy6lasO.js","names":["__iconData","__iconData","useRef","useRef","_Fragment","i18next","CheckCircle2","XCircle","Loader2","useState","_Fragment","useCallback","i18next","__toESM","require_jsx_runtime","queryKeys","useQueryClient","create","apiBaseUrl","LoaderCircle","adminApi","withCsrf","useMediaAssets","Lock","X","StatusChip","EmptyState","ErrorState","LoadingState","resolveUploadUrl","buildUploadForm","useTranslation","createLucideIcon","formatRelativeTime","formatDateTime","RowTitle","logError","toast","instance","describeError","Button","Input","SelectValue","SelectTrigger","SelectContent","ChevronUp","SelectItem","ChevronDown","Select","Checkbox","CircleCheck","CircleX","fileKindLabel","MEDIA_STATUS_DISPLAY","formatBytes","Thumbnail","Search","List","RotateCcw","cn","TableHeader","TableHead","TableBody","TableRow","TableCell","TableCard","Table","useSearchInput","MEDIA_TYPE_FILTERS","Panel","__iconData$2","Images","__iconData$1","LayoutGrid","__iconData","Upload","import_react","require_react","selectionRange","from","anchor","ids","to","target","useRangeSelection","range","shiftKey","id","rangeId","onSelectChange","checked","import_jsx_runtime","Card","status","asset","selected","active","event","selectable","onSelect","onOpen","t","AssetGrid","assets","activeId","AssetTable","isSelected","Library","query","items","page","scoped","filtered","view","ALL_TYPES","TYPE_LABEL_KEYS","Toolbar","onQueryChange","text","setText","type","onTypeChange","value","filter","onViewChange","UploadButton","buttonProps","input","label","files","onFiles","useMediaUploadsStore","set","state","item","patch","UploadTransferError","body","uploadWithProgress","request","url","onProgress","resolve","reject","signal","form","describeUploadError","error","PERCENT","Row","percent","statusText","onRetry","onDismiss","UploadQueue","clearFinished","showFinished","setShowFinished","failed","done","settled","expanded","current","FALLBACK_MIME_TYPE","requestGrant","details","uploadFile","grant","onConfirming","useMediaUploader","queryClient","run","update","file","options","add","candidate","remove"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/images.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/layout-grid.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/upload.mjs","../../src/features/Media/helpers/selectionRange.ts","../../src/features/Media/hooks/useRangeSelection.ts","../../src/features/Media/AssetGrid/Card/index.tsx","../../src/features/Media/AssetGrid/index.tsx","../../src/features/Media/AssetTable/index.tsx","../../src/features/Media/Library/index.tsx","../../src/features/Media/Toolbar/index.tsx","../../src/features/Media/UploadButton/index.tsx","../../src/stores/mediaUploads.ts","../../src/helpers/uploadWithProgress.ts","../../src/features/Media/helpers/describeUploadError.ts","../../src/features/Media/UploadQueue/Row/index.tsx","../../src/features/Media/UploadQueue/index.tsx","../../src/hooks/useMediaUploader.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"images\",\n size: 24,\n node: [\n [\"path\", { d: \"m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16\", key: \"9kzy35\" }],\n [\"path\", { d: \"M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2\", key: \"1t0f0t\" }],\n [\"circle\", { cx: \"13\", cy: \"7\", r: \"1\", fill: \"currentColor\", key: \"1obus6\" }],\n [\"rect\", { x: \"8\", y: \"2\", width: \"14\", height: \"14\", rx: \"2\", key: \"1gvhby\" }]\n ]\n};\n__iconData.node;\nconst Images = createLucideIcon(__iconData);\n\nexport { __iconData, Images as default };\n//# sourceMappingURL=images.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: \"layout-grid\",\n size: 24,\n node: [\n [\"rect\", { width: \"7\", height: \"7\", x: \"3\", y: \"3\", rx: \"1\", key: \"1g98yp\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"14\", rx: \"1\", key: \"nxv5o0\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"3\", y: \"14\", rx: \"1\", key: \"1bb6yr\" }]\n ]\n};\n__iconData.node;\nconst LayoutGrid = createLucideIcon(__iconData);\n\nexport { __iconData, LayoutGrid as default };\n//# sourceMappingURL=layout-grid.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: \"upload\",\n size: 24,\n node: [\n [\"path\", { d: \"M12 3v12\", key: \"1x0j5s\" }],\n [\"path\", { d: \"m17 8-5-5-5 5\", key: \"7q97r8\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }]\n ]\n};\n__iconData.node;\nconst Upload = createLucideIcon(__iconData);\n\nexport { __iconData, Upload as default };\n//# sourceMappingURL=upload.mjs.map\n","/**\n * The items a shift-click selects: from the anchor (the last item toggled) to the clicked one, inclusive,\n * in list order. Undefined when there is no usable anchor (then the click toggles one item).\n */\nexport const selectionRange = (\n ids: readonly string[],\n anchor: string | undefined,\n target: string,\n): string[] | undefined => {\n const from = anchor === undefined ? -1 : ids.indexOf(anchor);\n const to = ids.indexOf(target);\n if (from === -1 || to === -1) {\n return undefined;\n }\n return ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n};\n","import { useRef } from 'react';\nimport { selectionRange } from '../helpers/selectionRange';\n\ntype SelectRequest = { id: string; checked: boolean; shiftKey: boolean };\n\n/**\n * Shift-click selection over an ordered list: a plain toggle sets the anchor; a shift toggle selects\n * everything from the anchor to the clicked item. Works through `onSelectChange` alone, so any owner of the\n * selection (the library, the media picker) gets ranges without new props.\n */\nexport const useRangeSelection = (\n ids: readonly string[],\n onSelectChange: (id: string, checked: boolean) => void,\n) => {\n const anchor = useRef<string | undefined>(undefined);\n const select = ({ id, checked, shiftKey }: SelectRequest) => {\n const range = shiftKey ? selectionRange(ids, anchor.current, id) : undefined;\n if (range) {\n for (const rangeId of range) {\n onSelectChange(rangeId, true);\n }\n } else {\n onSelectChange(id, checked);\n }\n anchor.current = id;\n };\n return { select };\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { Lock } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { StatusChip } from '@/components/StatusChip';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { cn } from '@/helpers/cn';\nimport { fileKindLabel } from '../../helpers/fileKind';\nimport { formatBytes } from '../../helpers/formatBytes';\nimport { MEDIA_STATUS_DISPLAY } from '../../helpers/statusDisplay';\nimport { Thumbnail } from '../../Thumbnail';\n\ntype CardProps = {\n asset: MediaAsset;\n selected: boolean;\n selectable: boolean;\n active: boolean;\n /** `shiftKey`: extend the selection to here from the last item toggled. */\n onSelect: (checked: boolean, shiftKey: boolean) => void;\n onOpen: () => void;\n};\n\n/**\n * One asset tile: a button that opens its details (shift-click selects instead), and a checkbox for bulk\n * actions. The square thumbnail, then the name and \"PNG · 120 kB\".\n */\nexport const Card = ({ asset, selected, selectable, active, onSelect, onOpen }: CardProps) => {\n const { t } = useTranslation();\n const status = MEDIA_STATUS_DISPLAY[asset.status];\n return (\n <li\n className={cn(\n 'group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input',\n (selected || active) && 'border-primary ring-2 ring-primary hover:border-primary',\n )}\n >\n <button\n type=\"button\"\n onClick={(event) => {\n if (event.shiftKey && selectable) {\n onSelect(!selected, true);\n return;\n }\n onOpen();\n }}\n className=\"flex w-full flex-col text-left outline-none\"\n aria-label={t('media.openDetails', { name: asset.filename })}\n >\n <Thumbnail asset={asset} className=\"aspect-square w-full border-b\" />\n <span className=\"flex min-w-0 flex-col gap-0.5 px-3 py-2.5\">\n <span className=\"truncate text-sm font-medium\" title={asset.filename}>\n {asset.filename}\n </span>\n <span className=\"flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground\">\n <span className=\"truncate\">\n {fileKindLabel(asset.filename, asset.mimeType)} · {formatBytes(asset.sizeBytes)}\n </span>\n {asset.visibility === 'private' ? (\n <Lock aria-hidden=\"true\" className=\"size-3.5 shrink-0\" />\n ) : null}\n </span>\n </span>\n </button>\n {asset.status === 'ready' ? null : (\n <StatusChip\n tone={status.tone}\n label={t(status.labelKey)}\n size=\"sm\"\n className=\"pointer-events-none absolute top-2 right-2\"\n />\n )}\n {selectable ? (\n <Checkbox\n checked={selected}\n onClick={(event) => {\n if (event.shiftKey) {\n event.preventDefault();\n onSelect(!selected, true);\n }\n }}\n onCheckedChange={(checked) => onSelect(checked === true, false)}\n aria-label={t('media.select', { name: asset.filename })}\n className=\"absolute top-2 left-2 bg-card\"\n />\n ) : null}\n </li>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { useRangeSelection } from '../hooks/useRangeSelection';\nimport { Card } from './Card';\n\ntype AssetGridProps = {\n assets: readonly MediaAsset[];\n selected: ReadonlySet<string>;\n selectable: boolean;\n activeId: string | undefined;\n onSelectChange: (id: string, checked: boolean) => void;\n onOpen: (asset: MediaAsset) => void;\n};\n\n/** Square tiles that fill the width; shift-click (tile or checkbox) selects a range. */\nexport const AssetGrid = ({\n assets,\n selected,\n selectable,\n activeId,\n onSelectChange,\n onOpen,\n}: AssetGridProps) => {\n const { t } = useTranslation();\n const range = useRangeSelection(\n assets.map((asset) => asset.id),\n onSelectChange,\n );\n return (\n <ul\n aria-label={t('media.assetsLabel', { count: assets.length })}\n className=\"grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4\"\n >\n {assets.map((asset) => (\n <Card\n key={asset.id}\n asset={asset}\n selected={selected.has(asset.id)}\n selectable={selectable}\n active={asset.id === activeId}\n onSelect={(checked, shiftKey) => range.select({ id: asset.id, checked, shiftKey })}\n onOpen={() => onOpen(asset)}\n />\n ))}\n </ul>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { Lock } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { RowTitle } from '@/components/RowTitle';\nimport { StatusChip } from '@/components/StatusChip';\nimport { TableCard } from '@/components/TableCard';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';\nimport { formatDateTime, formatRelativeTime } from '@/helpers/formatDate';\nimport { fileKindLabel } from '../helpers/fileKind';\nimport { formatBytes } from '../helpers/formatBytes';\nimport { MEDIA_STATUS_DISPLAY } from '../helpers/statusDisplay';\nimport { useRangeSelection } from '../hooks/useRangeSelection';\nimport { Thumbnail } from '../Thumbnail';\n\ntype AssetTableProps = {\n assets: readonly MediaAsset[];\n selected: ReadonlySet<string>;\n selectable: boolean;\n onSelectChange: (id: string, checked: boolean) => void;\n onOpen: (asset: MediaAsset) => void;\n};\n\n/** The list view: name, type, size, status and date per asset; shift-click a checkbox to select a range. */\nexport const AssetTable = ({ assets, selected, selectable, onSelectChange, onOpen }: AssetTableProps) => {\n const { t } = useTranslation();\n const range = useRangeSelection(\n assets.map((asset) => asset.id),\n onSelectChange,\n );\n return (\n <TableCard>\n <Table>\n <TableHeader>\n <TableRow>\n {selectable ? (\n <TableHead className=\"w-10\">\n <span className=\"sr-only\">{t('media.selection')}</span>\n </TableHead>\n ) : null}\n <TableHead>{t('media.fields.filename')}</TableHead>\n <TableHead>{t('media.fields.type')}</TableHead>\n <TableHead className=\"text-right\">{t('media.fields.size')}</TableHead>\n <TableHead>{t('media.fields.status')}</TableHead>\n <TableHead>{t('media.fields.uploaded')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {assets.map((asset) => {\n const status = MEDIA_STATUS_DISPLAY[asset.status];\n const isSelected = selected.has(asset.id);\n return (\n <TableRow key={asset.id} data-state={isSelected ? 'selected' : undefined}>\n {selectable ? (\n <TableCell>\n <Checkbox\n checked={isSelected}\n onClick={(event) => {\n if (event.shiftKey) {\n event.preventDefault();\n range.select({ id: asset.id, checked: !isSelected, shiftKey: true });\n }\n }}\n onCheckedChange={(checked) =>\n range.select({ id: asset.id, checked: checked === true, shiftKey: false })\n }\n aria-label={t('media.select', { name: asset.filename })}\n />\n </TableCell>\n ) : null}\n <TableCell className=\"max-w-96\">\n <span className=\"flex min-w-0 items-center gap-3\">\n <Thumbnail asset={asset} className=\"size-8 shrink-0 rounded-md\" />\n <RowTitle asChild className=\"min-w-0 truncate text-left\">\n <button type=\"button\" onClick={() => onOpen(asset)}>\n {asset.filename}\n </button>\n </RowTitle>\n {asset.visibility === 'private' ? (\n <Lock\n role=\"img\"\n aria-label={t('media.visibility.private')}\n className=\"size-3.5 shrink-0 text-muted-foreground\"\n />\n ) : null}\n </span>\n </TableCell>\n <TableCell className=\"text-muted-foreground\" title={asset.mimeType}>\n {fileKindLabel(asset.filename, asset.mimeType)}\n </TableCell>\n <TableCell className=\"text-right tabular-nums\">{formatBytes(asset.sizeBytes)}</TableCell>\n <TableCell>\n <StatusChip tone={status.tone} label={t(status.labelKey)} size=\"sm\" />\n </TableCell>\n <TableCell className=\"whitespace-nowrap\" title={formatDateTime(asset.createdAt)}>\n {formatRelativeTime(asset.createdAt)}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableCard>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { Images } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { useMediaAssets } from '@/api/media';\nimport { EmptyState } from '@/components/EmptyState';\nimport { ErrorState } from '@/components/ErrorState';\nimport { LoadingState } from '@/components/LoadingState';\nimport { Button } from '@/components/ui/button';\nimport { AssetGrid } from '../AssetGrid';\nimport { AssetTable } from '../AssetTable';\nimport type { MediaView } from '../constants';\n\ntype LibraryProps = {\n query: Parameters<typeof useMediaAssets>[0];\n filtered: boolean;\n view: MediaView;\n selected: ReadonlySet<string>;\n selectable: boolean;\n activeId: string | undefined;\n onSelectChange: (id: string, checked: boolean) => void;\n onOpen: (asset: MediaAsset) => void;\n};\n\n/** The assets of the current folder and filters: loading, error, empty, grid or list, and \"Load more\". */\nexport const Library = ({\n query,\n filtered,\n view,\n selected,\n selectable,\n activeId,\n onSelectChange,\n onOpen,\n}: LibraryProps) => {\n const { t } = useTranslation();\n const assets = useMediaAssets(query);\n if (assets.isPending) {\n return <LoadingState rows={4} />;\n }\n if (assets.isError) {\n return <ErrorState error={assets.error} onRetry={() => void assets.refetch()} />;\n }\n const items = assets.data.pages.flatMap((page) => page.items);\n if (items.length === 0) {\n // The whole library is empty: a page-sized empty state. An empty folder or search: a quieter one.\n const scoped = filtered || query.folder !== undefined;\n return (\n <EmptyState\n icon={Images}\n size={scoped ? 'panel' : 'page'}\n title={filtered ? t('media.emptyFiltered') : scoped ? t('media.emptyFolder') : t('media.empty')}\n />\n );\n }\n return (\n <div className=\"space-y-4\">\n {view === 'grid' ? (\n <AssetGrid\n assets={items}\n selected={selected}\n selectable={selectable}\n activeId={activeId}\n onSelectChange={onSelectChange}\n onOpen={onOpen}\n />\n ) : (\n <AssetTable\n assets={items}\n selected={selected}\n selectable={selectable}\n onSelectChange={onSelectChange}\n onOpen={onOpen}\n />\n )}\n {assets.hasNextPage ? (\n <div className=\"flex justify-center\">\n <Button\n variant=\"outline\"\n disabled={assets.isFetchingNextPage}\n aria-busy={assets.isFetchingNextPage || undefined}\n onClick={() => void assets.fetchNextPage()}\n >\n {assets.isFetchingNextPage ? t('common.loading') : t('media.loadMore')}\n </Button>\n </div>\n ) : null}\n </div>\n );\n};\n","import { LayoutGrid, List, Search } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport { useSearchInput } from '@/hooks/useSearchInput';\nimport { MEDIA_TYPE_FILTERS, type MediaTypeFilter, type MediaView } from '../constants';\n\ntype ToolbarProps = {\n query: string | undefined;\n type: MediaTypeFilter | undefined;\n view: MediaView;\n onQueryChange: (query: string | undefined) => void;\n onTypeChange: (type: MediaTypeFilter | undefined) => void;\n onViewChange: (view: MediaView) => void;\n};\n\nconst ALL_TYPES = 'all';\n\nconst TYPE_LABEL_KEYS = {\n image: 'media.types.image',\n video: 'media.types.video',\n audio: 'media.types.audio',\n pdf: 'media.types.pdf',\n} as const satisfies Record<MediaTypeFilter, string>;\n\n/** Search, type filter and grid/list switch. */\nexport const Toolbar = ({ query, type, view, onQueryChange, onTypeChange, onViewChange }: ToolbarProps) => {\n const { t } = useTranslation();\n const { text, setText } = useSearchInput(query, onQueryChange);\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"relative min-w-48 flex-1\">\n <Search\n aria-hidden=\"true\"\n className=\"absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground\"\n />\n <Input\n type=\"search\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n aria-label={t('media.search')}\n placeholder={t('media.searchPlaceholder')}\n inputSize=\"sm\"\n className=\"pl-8\"\n />\n </div>\n <Select\n value={type ?? ALL_TYPES}\n onValueChange={(value) => onTypeChange(value === ALL_TYPES ? undefined : (value as MediaTypeFilter))}\n >\n <SelectTrigger size=\"sm\" aria-label={t('media.typeFilter')} className=\"w-36\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL_TYPES}>{t('media.types.all')}</SelectItem>\n {MEDIA_TYPE_FILTERS.map((filter) => (\n <SelectItem key={filter} value={filter}>\n {t(TYPE_LABEL_KEYS[filter])}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <div\n role=\"group\"\n aria-label={t('media.view')}\n className=\"flex h-9 items-center gap-0.5 rounded-lg border border-input px-px\"\n >\n <Button\n variant={view === 'grid' ? 'secondary' : 'ghost'}\n size=\"icon-sm\"\n aria-pressed={view === 'grid'}\n aria-label={t('media.viewGrid')}\n onClick={() => onViewChange('grid')}\n >\n <LayoutGrid aria-hidden=\"true\" />\n </Button>\n <Button\n variant={view === 'list' ? 'secondary' : 'ghost'}\n size=\"icon-sm\"\n aria-pressed={view === 'list'}\n aria-label={t('media.viewList')}\n onClick={() => onViewChange('list')}\n >\n <List aria-hidden=\"true\" />\n </Button>\n </div>\n </div>\n );\n};\n","import { Upload } from 'lucide-react';\nimport { useRef, type ComponentProps } from 'react';\nimport { Button } from '@/components/ui/button';\n\ntype UploadButtonProps = Omit<ComponentProps<typeof Button>, 'onClick'> & {\n label: string;\n multiple?: boolean;\n onFiles: (files: File[]) => void;\n};\n\n/** A button that opens the file picker (the keyboard path; dropping files is the pointer shortcut). */\nexport const UploadButton = ({ label, multiple = true, onFiles, ...buttonProps }: UploadButtonProps) => {\n const input = useRef<HTMLInputElement>(null);\n return (\n <>\n <Button {...buttonProps} onClick={() => input.current?.click()}>\n <Upload aria-hidden=\"true\" />\n {label}\n </Button>\n <input\n ref={input}\n type=\"file\"\n multiple={multiple}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"sr-only\"\n onChange={(event) => {\n const files = [...(event.target.files ?? [])];\n event.target.value = '';\n if (files.length > 0) {\n onFiles(files);\n }\n }}\n />\n </>\n );\n};\n","import type { MediaVisibility } from '@shapio/client';\nimport { create } from 'zustand';\n\nexport type UploadStatus = 'uploading' | 'confirming' | 'done' | 'failed';\n\nexport type UploadItem = {\n id: string;\n file: File;\n folderId: string | null;\n visibility: MediaVisibility;\n /** Set when the upload replaces this asset's file. */\n replaceAssetId: string | undefined;\n status: UploadStatus;\n /** 0 to 1 while the bytes are sent. */\n progress: number;\n error: unknown;\n assetId: string | undefined;\n};\n\ntype MediaUploadsState = {\n items: UploadItem[];\n add: (item: UploadItem) => void;\n update: (id: string, patch: Partial<UploadItem>) => void;\n remove: (id: string) => void;\n clearFinished: () => void;\n};\n\n/** Uploads in flight and recently finished (client-only; kept while the admin is open, not persisted). */\nexport const useMediaUploadsStore = create<MediaUploadsState>()((set) => ({\n items: [],\n add: (item) => set((state) => ({ items: [...state.items, item] })),\n update: (id, patch) =>\n set((state) => ({ items: state.items.map((item) => (item.id === id ? { ...item, ...patch } : item)) })),\n remove: (id) => set((state) => ({ items: state.items.filter((item) => item.id !== id) })),\n clearFinished: () => set((state) => ({ items: state.items.filter((item) => item.status !== 'done') })),\n}));\n","/** The storage (bucket or Shapio's upload route) refused the bytes; `status` 0 means the request never completed. */\nexport class UploadTransferError extends Error {\n readonly status: number;\n readonly body: string;\n\n constructor(status: number, body: string) {\n super(`Upload failed with status ${status}`);\n this.name = 'UploadTransferError';\n this.status = status;\n this.body = body;\n }\n}\n\ntype UploadWithProgressInput = {\n url: string;\n form: FormData;\n onProgress: (fraction: number) => void;\n signal?: AbortSignal;\n};\n\n/**\n * POSTs a multipart form with upload progress (fetch cannot report it, so this uses XMLHttpRequest).\n * No credentials are sent: the grant's fields authorize the upload, whether it goes to a bucket or to Shapio.\n */\nexport const uploadWithProgress = ({ url, form, onProgress, signal }: UploadWithProgressInput) =>\n new Promise<void>((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open('POST', url);\n request.withCredentials = false;\n request.upload.onprogress = (event) => {\n if (event.lengthComputable && event.total > 0) {\n onProgress(event.loaded / event.total);\n }\n };\n request.onload = () => {\n if (request.status >= 200 && request.status < 300) {\n onProgress(1);\n resolve();\n return;\n }\n reject(new UploadTransferError(request.status, request.responseText));\n };\n request.onerror = () => reject(new UploadTransferError(0, ''));\n request.onabort = () => reject(new DOMException('Upload canceled', 'AbortError'));\n signal?.addEventListener('abort', () => request.abort(), { once: true });\n request.send(form);\n });\n","import { i18next } from '@/app/i18n';\nimport { describeError } from '@/helpers/describeError';\nimport { UploadTransferError } from '@/helpers/uploadWithProgress';\n\n/** Why an upload failed, for the queue. Storage refusals (bucket or upload route) get their own message. */\nexport const describeUploadError = (error: unknown): string => {\n if (error instanceof UploadTransferError) {\n if (error.status === 0) {\n return i18next.t('media.upload.unreachable');\n }\n if (error.status === 413 || /EntityTooLarge/.test(error.body)) {\n return i18next.t('errors.codes.FILE_TOO_LARGE');\n }\n return i18next.t('media.upload.transferFailed', { status: error.status });\n }\n return describeError(error);\n};\n","import { CheckCircle2, Loader2, RotateCcw, X, XCircle } from 'lucide-react';\nimport type { CSSProperties } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/helpers/cn';\nimport type { UploadItem } from '@/stores/mediaUploads';\nimport { describeUploadError } from '../../helpers/describeUploadError';\nimport { formatBytes } from '../../helpers/formatBytes';\n\ntype RowProps = { item: UploadItem; onRetry: () => void; onDismiss: () => void };\n\nconst PERCENT = 100;\n\n/** One upload: name, size, progress (a real progressbar), and Retry/Dismiss when it failed. */\nexport const Row = ({ item, onRetry, onDismiss }: RowProps) => {\n const { t } = useTranslation();\n const percent = Math.round(item.progress * PERCENT);\n const statusText =\n item.status === 'uploading'\n ? t('media.upload.uploading', { percent })\n : item.status === 'confirming'\n ? t('media.upload.checking')\n : item.status === 'done'\n ? t('media.upload.done')\n : describeUploadError(item.error);\n return (\n <li className=\"flex items-start gap-3 px-5 py-2.5\">\n <span className=\"mt-0.5 shrink-0\">\n {item.status === 'done' ? (\n <CheckCircle2 aria-hidden=\"true\" className=\"size-4 text-success\" />\n ) : item.status === 'failed' ? (\n <XCircle aria-hidden=\"true\" className=\"size-4 text-destructive\" />\n ) : (\n <Loader2\n aria-hidden=\"true\"\n className=\"size-4 animate-spin text-muted-foreground motion-reduce:animate-none\"\n />\n )}\n </span>\n <div className=\"min-w-0 flex-1 space-y-1\">\n <p className=\"flex items-baseline gap-2 text-sm\">\n <span className=\"truncate font-medium\">{item.file.name}</span>\n <span className=\"shrink-0 text-meta text-muted-foreground\">{formatBytes(item.file.size)}</span>\n </p>\n {item.status === 'uploading' || item.status === 'confirming' ? (\n <div\n role=\"progressbar\"\n aria-label={t('media.upload.progress', { name: item.file.name })}\n aria-valuemin={0}\n aria-valuemax={PERCENT}\n aria-valuenow={percent}\n className=\"h-1.5 overflow-hidden rounded-full bg-muted\"\n style={{ '--upload-progress': `${percent}%` } as CSSProperties}\n >\n <div className=\"h-full w-[var(--upload-progress)] bg-primary transition-[width]\" />\n </div>\n ) : null}\n <p\n className={cn('text-meta', item.status === 'failed' ? 'text-destructive' : 'text-muted-foreground')}\n >\n {statusText}\n </p>\n </div>\n {item.status === 'failed' ? (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('media.upload.retry', { name: item.file.name })}\n onClick={onRetry}\n >\n <RotateCcw aria-hidden=\"true\" />\n </Button>\n ) : null}\n {item.status === 'failed' || item.status === 'done' ? (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('media.upload.dismiss', { name: item.file.name })}\n onClick={onDismiss}\n >\n <X aria-hidden=\"true\" />\n </Button>\n ) : null}\n </li>\n );\n};\n","import { ChevronDown, ChevronUp } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Panel } from '@/components/Panel';\nimport { Button } from '@/components/ui/button';\nimport { useMediaUploadsStore } from '@/stores/mediaUploads';\nimport { Row } from './Row';\n\ntype UploadQueueProps = { onRetry: (id: string) => void; onDismiss: (id: string) => void };\n\n/**\n * Uploads in progress and recently finished, newest last, as a compact panel. Once nothing is running or\n * failed it collapses to one line (\"3 uploaded\"); failures stay open until retried or dismissed.\n */\nexport const UploadQueue = ({ onRetry, onDismiss }: UploadQueueProps) => {\n const { t } = useTranslation();\n const items = useMediaUploadsStore((state) => state.items);\n const clearFinished = useMediaUploadsStore((state) => state.clearFinished);\n const [showFinished, setShowFinished] = useState(false);\n if (items.length === 0) {\n return null;\n }\n const active = items.filter((item) => item.status === 'uploading' || item.status === 'confirming').length;\n const failed = items.filter((item) => item.status === 'failed').length;\n const done = items.length - active - failed;\n const settled = active === 0 && failed === 0;\n const expanded = !settled || showFinished;\n return (\n <Panel\n title={t('media.upload.queueTitle')}\n titleAs=\"h2\"\n flush={expanded}\n actions={\n <>\n <span role=\"status\" aria-live=\"polite\" className=\"text-meta text-muted-foreground\">\n {settled\n ? t('media.upload.doneSummary', { count: done })\n : t('media.upload.summary', { active, failed })}\n </span>\n {settled ? (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-expanded={expanded}\n aria-label={expanded ? t('media.upload.hideFinished') : t('media.upload.showFinished')}\n onClick={() => setShowFinished((current) => !current)}\n >\n {expanded ? <ChevronUp aria-hidden=\"true\" /> : <ChevronDown aria-hidden=\"true\" />}\n </Button>\n ) : null}\n {done > 0 ? (\n <Button variant=\"ghost\" size=\"sm\" onClick={clearFinished}>\n {t('media.upload.clearFinished')}\n </Button>\n ) : null}\n </>\n }\n bodyClassName={expanded ? undefined : 'hidden'}\n >\n {expanded ? (\n <ul className=\"max-h-64 divide-y overflow-y-auto\">\n {items.map((item) => (\n <Row\n key={item.id}\n item={item}\n onRetry={() => onRetry(item.id)}\n onDismiss={() => onDismiss(item.id)}\n />\n ))}\n </ul>\n ) : null}\n </Panel>\n );\n};\n","import { buildUploadForm, type MediaAsset, type MediaVisibility, type UploadGrant } from '@shapio/client';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useCallback } from 'react';\nimport { toast } from 'sonner';\nimport { adminApi, apiBaseUrl } from '@/api/client';\nimport { withCsrf } from '@/api/csrf';\nimport { queryKeys } from '@/api/queryKeys';\nimport { i18next } from '@/app/i18n';\nimport { logError } from '@/helpers/reportError';\nimport { resolveUploadUrl } from '@/helpers/resolveUploadUrl';\nimport { uploadWithProgress } from '@/helpers/uploadWithProgress';\nimport { useMediaUploadsStore, type UploadItem } from '@/stores/mediaUploads';\n\nconst FALLBACK_MIME_TYPE = 'application/octet-stream';\n\ntype UploadTarget = Pick<UploadItem, 'file' | 'folderId' | 'visibility' | 'replaceAssetId'>;\n\nconst requestGrant = (item: UploadTarget): Promise<UploadGrant> => {\n const details = {\n filename: item.file.name,\n mimeType: item.file.type || FALLBACK_MIME_TYPE,\n sizeBytes: item.file.size,\n };\n return withCsrf(() =>\n item.replaceAssetId\n ? adminApi.media.assets.replace(item.replaceAssetId, details)\n : adminApi.media.uploads.create({ ...details, folderId: item.folderId, visibility: item.visibility }),\n );\n};\n\n/** Grant, send (with progress), confirm: one file into the library. Throws when any step fails. */\nconst uploadFile = async (\n item: UploadTarget,\n onProgress: (progress: number) => void,\n onConfirming: () => void,\n): Promise<MediaAsset> => {\n const grant = await requestGrant(item);\n await uploadWithProgress({\n url: resolveUploadUrl(grant, apiBaseUrl()),\n form: buildUploadForm(grant, item.file, item.file.name),\n onProgress,\n });\n onConfirming();\n return withCsrf(() => adminApi.media.uploads.confirm(grant.grantId));\n};\n\n/** What an editor gets back from `uploadOne`: the new asset's ID and its library alt text. */\nexport type UploadedMedia = { id: string; alt: string | null };\n\ntype EnqueueOptions = { folderId: string | null; visibility: MediaVisibility; replaceAssetId?: string };\n\n/**\n * The upload flow, the same for local disk and S3: ask for a grant, send the form to the grant's URL\n * (with progress), then confirm so the server checks the bytes and records the asset. A failed upload stays\n * in the queue with its error; retrying starts again with a fresh grant (grants are single-use).\n */\nexport const useMediaUploader = () => {\n const queryClient = useQueryClient();\n const { add, update, remove } = useMediaUploadsStore.getState();\n\n const run = useCallback(\n async (item: UploadItem) => {\n update(item.id, { status: 'uploading', progress: 0, error: undefined });\n try {\n const asset = await uploadFile(\n item,\n (progress) => update(item.id, { progress }),\n () => update(item.id, { status: 'confirming' }),\n );\n update(item.id, { status: 'done', assetId: asset.id });\n if (item.replaceAssetId) {\n toast.success(i18next.t('media.upload.replaced', { name: item.file.name }));\n }\n } catch (error) {\n logError(error, `uploading ${item.file.name}`);\n update(item.id, { status: 'failed', error });\n } finally {\n await queryClient.invalidateQueries({ queryKey: queryKeys.media.all });\n }\n },\n [queryClient, update],\n );\n\n const enqueue = useCallback(\n (files: readonly File[], options: EnqueueOptions) => {\n for (const file of files) {\n const item: UploadItem = {\n id: crypto.randomUUID(),\n file,\n folderId: options.folderId,\n visibility: options.visibility,\n replaceAssetId: options.replaceAssetId,\n status: 'uploading',\n progress: 0,\n error: undefined,\n assetId: undefined,\n };\n add(item);\n void run(item);\n }\n },\n [add, run],\n );\n\n const retry = useCallback(\n (id: string) => {\n const item = useMediaUploadsStore.getState().items.find((candidate) => candidate.id === id);\n if (item) {\n void run(item);\n }\n },\n [run],\n );\n\n /**\n * One file uploaded outside the queue (a file dropped into rich text): resolves with the new asset, or\n * rejects so the caller can undo its placeholder. Public, in the root folder.\n */\n const uploadOne = useCallback(\n async (file: File): Promise<UploadedMedia> => {\n try {\n const asset = await uploadFile(\n { file, folderId: null, visibility: 'public', replaceAssetId: undefined },\n () => undefined,\n () => undefined,\n );\n queryClient.setQueryData(queryKeys.media.asset(asset.id), asset);\n return { id: asset.id, alt: asset.alt || null };\n } finally {\n await queryClient.invalidateQueries({ queryKey: queryKeys.media.all });\n }\n },\n [queryClient],\n );\n\n return { enqueue, retry, dismiss: remove, uploadOne };\n};\n"],"ignoreList":[0,1,2],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{S as n}from"./src-CMor9izq.js";import{l as r}from"./schema-6eUoC8fJ.js";var i=e(t(),1),a=n([]),o=()=>{let{data:e}=r(`model`);return{index:(0,i.useMemo)(()=>e?n(e.map(({definition:e})=>e)):a,[e])}};export{o as t};
|
|
2
|
+
//# sourceMappingURL=useModelIndex-NU-WlHQY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useModelIndex-NU-WlHQY.js","names":["useMemo","__toESM","createDefinitionIndex","useDefinitions","import_react","require_react","EMPTY_INDEX","useModelIndex","data","definition"],"sources":["../../src/features/Models/hooks/useModelIndex.ts"],"sourcesContent":["import { createDefinitionIndex, type DefinitionIndex } from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useDefinitions } from '@/api/schema';\n\nconst EMPTY_INDEX = createDefinitionIndex([]);\n\n/**\n * Inheritance lookups (`createDefinitionIndex`) over the active models of this site, stored as they are\n * (own fields, `extends`): parents, children, families and effective definitions. Empty while loading.\n */\nexport const useModelIndex = (): { index: DefinitionIndex } => {\n const { data } = useDefinitions('model');\n const index = useMemo(\n () => (data ? createDefinitionIndex(data.map(({ definition }) => definition)) : EMPTY_INDEX),\n [data],\n );\n return { index };\n};\n"],"mappings":"oLAIMM,EAAcJ,EAAsB,CAAC,CAAC,EAM/BK,MAAkD,CAC7D,GAAM,CAAE,QAASJ,EAAe,OAAO,EAKvC,MAAO,CAAE,OAAA,EAJKH,EAAAA,QAAAA,KACLQ,EAAON,EAAsBM,EAAK,KAAK,CAAE,gBAAiBC,CAAU,CAAC,EAAIH,EAChF,CAACE,CAAI,CAEE,CAAM,CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNetworkPermission-
|
|
1
|
+
{"version":3,"file":"useNetworkPermission-DehDln-U.js","names":["useMe","useNetworkPermission","action"],"sources":["../../src/features/Network/hooks/useNetworkPermission.ts"],"sourcesContent":["import type { NetworkAction } from '@shapio/client';\nimport { useMe } from '@/api/auth';\n\n/** Whether the admin holds a network action (roles assigned on every site); the server enforces it either way. */\nexport const useNetworkPermission = (action: NetworkAction) =>\n useMe().data?.networkPermissions.includes(action) ?? false;\n"],"mappings":"uCAIA,IAAaC,EAAwB,GACnCD,EAAM,CAAC,CAAC,MAAM,mBAAmB,SAASE,CAAM,GAAK"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{
|
|
2
|
-
//# sourceMappingURL=usePaletteItems-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{Lt as n,Nt as r,Pt as i}from"./src-CMor9izq.js";import{t as a}from"./store-CznhNKEi.js";var o=e(t(),1),s=`(max-width: 1023px)`,c=e=>{let t=window.matchMedia(s);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)},l=()=>window.matchMedia(s).matches;function u(){return o.useSyncExternalStore(c,l,()=>!1)}var d=n()(i(e=>({sidebarOpen:!0,setSidebarOpen:t=>e({sidebarOpen:t}),entrySettingsOpen:!0,setEntrySettingsOpen:t=>e({entrySettingsOpen:t})}),{name:`shapio.ui`,storage:r,version:1})),f=(e,t)=>{let n=(0,o.useId)(),r=a(e=>e.register),i=a(e=>e.unregister);(0,o.useEffect)(()=>(r(n,{group:e,items:t}),()=>i(n)),[n,e,t,r,i])};export{d as n,u as r,f as t};
|
|
2
|
+
//# sourceMappingURL=usePaletteItems-CFpNlSOs.js.map
|
package/dist/admin/assets/{usePaletteItems-DtReWmkd.js.map → usePaletteItems-CFpNlSOs.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePaletteItems-
|
|
1
|
+
{"version":3,"file":"usePaletteItems-CFpNlSOs.js","names":["useId","__toESM","create","persistentStorage","persist","usePaletteStore","import_react","require_react","MOBILE_QUERY","subscribe","mql","onChange","getSnapshot","useIsMobile","useUiStore","set","usePaletteItems","id","register","state","unregister","group","items"],"sources":["../../src/hooks/use-mobile.ts","../../src/stores/ui.ts","../../src/components/CommandPalette/hooks/usePaletteItems.ts"],"sourcesContent":["import * as React from 'react';\n\n// Shapio: the sidebar becomes a sheet below lg (DESIGN.md), not md.\nconst MOBILE_BREAKPOINT = 1024;\nconst MOBILE_QUERY = `(max-width: ${MOBILE_BREAKPOINT - 1}px)`;\n\n// Shapio: subscribes with useSyncExternalStore instead of setState in an effect (shadcn's original).\nconst subscribe = (onChange: () => void) => {\n const mql = window.matchMedia(MOBILE_QUERY);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n};\n\nconst getSnapshot = () => window.matchMedia(MOBILE_QUERY).matches;\n\nexport function useIsMobile() {\n return React.useSyncExternalStore(subscribe, getSnapshot, () => false);\n}\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { persistentStorage } from '@/helpers/safeStorage';\n\ntype UiState = {\n /** Desktop sidebar expanded (true) or collapsed to icons. */\n sidebarOpen: boolean;\n setSidebarOpen: (open: boolean) => void;\n /** The entry's Settings panel on wide screens: open unless the person closed it (remembered per browser). */\n entrySettingsOpen: boolean;\n setEntrySettingsOpen: (open: boolean) => void;\n};\n\nexport const useUiStore = create<UiState>()(\n persist(\n (set) => ({\n sidebarOpen: true,\n setSidebarOpen: (sidebarOpen) => set({ sidebarOpen }),\n entrySettingsOpen: true,\n setEntrySettingsOpen: (entrySettingsOpen) => set({ entrySettingsOpen }),\n }),\n { name: 'shapio.ui', storage: persistentStorage, version: 1 },\n ),\n);\n","import { useEffect, useId } from 'react';\nimport { usePaletteStore } from '../store';\nimport type { PaletteItem, RegisteredGroup } from '../types';\n\n/**\n * Offers `items` in the palette while the calling component is mounted. Pass a memoized array: a new\n * array re-registers.\n */\nexport const usePaletteItems = (group: RegisteredGroup, items: readonly PaletteItem[]) => {\n const id = useId();\n const register = usePaletteStore((state) => state.register);\n const unregister = usePaletteStore((state) => state.unregister);\n useEffect(() => {\n register(id, { group, items });\n return () => unregister(id);\n }, [id, group, items, register, unregister]);\n};\n"],"mappings":"oMAIMQ,EAAe,sBAGfC,EAAa,GAAyB,CAC1C,IAAMC,EAAM,OAAO,WAAWF,CAAY,EAE1C,OADAE,EAAI,iBAAiB,SAAUC,CAAQ,MAC1BD,EAAI,oBAAoB,SAAUC,CAAQ,CACzD,EAEMC,MAAoB,OAAO,WAAWJ,CAAY,CAAC,CAAC,QAE1D,SAAgBK,GAAc,CAC5B,OAAAP,EAAa,qBAAqBG,EAAWG,MAAmB,EAAK,CACvE,CCJA,IAAaE,EAAaZ,EAAgB,CAAC,CACzCE,EACG,IAAS,CACR,YAAa,GACb,eAAiB,GAAgBW,EAAI,CAAE,aAAY,CAAC,EACpD,kBAAmB,GACnB,qBAAuB,GAAsBA,EAAI,CAAE,mBAAkB,CAAC,CACxE,GACA,CAAE,KAAM,YAAa,QAASZ,EAAmB,QAAS,CAAE,CAC9D,CACF,ECfaa,GAAmB,EAAwB,IAAkC,CACxF,IAAMC,GAAA,EAAKjB,EAAAA,MAAAA,CAAM,EACXkB,EAAWb,EAAiB,GAAUc,EAAM,QAAQ,EACpDC,EAAaf,EAAiB,GAAUc,EAAM,UAAU,GAC9D,EAAAb,EAAA,UAAA,MACEY,EAASD,EAAI,CAAE,QAAO,OAAM,CAAC,MAChBG,EAAWH,CAAE,GACzB,CAACA,EAAII,EAAOC,EAAOJ,EAAUE,CAAU,CAAC,CAC7C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{Bt as n,En as r}from"./src-CMor9izq.js";import{u as i}from"./auth-BFSvtV59.js";import{t as a}from"./createLucideIcon-BOsNKleB.js";import{t as o}from"./modelPermissions-DZ1lWfQZ.js";import{t as s}from"./contentCounts-BzC7IQqP.js";import{n as c}from"./useResolvedDefinitions-30lnwFQ1.js";var l={name:`file-plus-corner`,size:24,node:[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]],aliases:[`file-plus-2`]};l.node;var u=a(l),d=e(t(),1),f={collection:0,singleton:1},p=(e,t)=>f[e.kind]-f[t.kind]||e.label.localeCompare(t.label),m=(e,t)=>{let n=new Map(e.map(e=>[e.id,e])),r=new Map,i=new Map;for(let a of e){let e=[...t(a.id)].reverse().find(e=>n.has(e));i.set(a.id,e),r.set(e,[...r.get(e)??[],a])}let a=e=>{let t=i.get(e.id);return{...e,children:(r.get(e.id)??[]).map(a).sort(p),...t?{parentId:t}:{}}};return(r.get(void 0)??[]).map(a).sort(p)},h=e=>e.flatMap(e=>[e,...h(e.children)]),g=e=>{let t=r(),{data:a,isFetching:o}=i(),s=(0,d.useRef)(new Set);(0,d.useEffect)(()=>{if(!a||!e||o)return;let r=e.map(({definition:e})=>e.id).filter(e=>!(e in a.modelPermissions)&&!s.current.has(e));if(r.length>0){for(let e of r)s.current.add(e);t.invalidateQueries({queryKey:n.me})}},[e,a,o,t])},_=()=>{let{data:e}=i(),{resolved:t}=c(),n=s();return g(t?.definitions),(0,d.useMemo)(()=>t?m(t.definitions.flatMap(({definition:t,scope:r})=>t.kind!==`component`&&o(e,t.id,`read`)?[{id:t.id,apiKey:t.apiKey,label:t.label,kind:t.kind,count:t.kind===`collection`?n?.get(t.id):void 0,canCreate:o(e,t.id,`create`),shared:r===`network`}]:[]),t.index.ancestors):void 0,[t,n,e])};export{h as n,u as r,_ as t};
|
|
2
|
+
//# sourceMappingURL=usePlaces-BA4x6503.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePlaces-BA4x6503.js","names":["useRef","useMemo","__toESM","queryKeys","useQueryClient","useMe","createLucideIcon","canOnModel","useContentCounts","useResolvedDefinitions","__iconData","FilePlusCorner","import_react","require_react","KIND_ORDER","byKindThenLabel","a","b","buildPlaceTree","readable","sources","source","children","parentOf","parentId","ancestors","id","build","flattenPlaces","places","place","useModelPermissionsRefresh","queryClient","me","asked","definitions","isFetching","unknown","definition","usePlaces","counts","resolved","scope"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-plus-corner.mjs","../../src/features/Shell/helpers/placeTree.ts","../../src/features/Shell/hooks/useModelPermissionsRefresh.ts","../../src/features/Shell/hooks/usePlaces.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-plus-corner\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35\",\n key: \"17jvcc\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M14 19h6\", key: \"bvotb8\" }],\n [\"path\", { d: \"M17 16v6\", key: \"18yu1i\" }]\n ],\n aliases: [\"file-plus-2\"]\n};\n__iconData.node;\nconst FilePlusCorner = createLucideIcon(__iconData);\n\nexport { __iconData, FilePlusCorner as default };\n//# sourceMappingURL=file-plus-corner.mjs.map\n","import type { Place } from '../hooks/usePlaces';\n\n/** A readable place before nesting. */\nexport type PlaceSource = Omit<Place, 'children' | 'parentId'>;\n\nconst KIND_ORDER = { collection: 0, singleton: 1 } as const;\n\nconst byKindThenLabel = (a: Place, b: Place) =>\n KIND_ORDER[a.kind] - KIND_ORDER[b.kind] || a.label.localeCompare(b.label);\n\n/**\n * Nests readable places under their nearest readable ancestor (`ancestors`: root first) and sorts every level\n * (collections, then single types, by label). A kind whose every ancestor is unreadable becomes a root.\n * Returns the roots.\n */\nexport const buildPlaceTree = (\n sources: readonly PlaceSource[],\n ancestors: (id: string) => readonly string[],\n): Place[] => {\n const readable = new Map(sources.map((source) => [source.id, source]));\n const children = new Map<string | undefined, PlaceSource[]>();\n const parentOf = new Map<string, string | undefined>();\n for (const source of sources) {\n const parentId = [...ancestors(source.id)].reverse().find((id) => readable.has(id));\n parentOf.set(source.id, parentId);\n children.set(parentId, [...(children.get(parentId) ?? []), source]);\n }\n const build = (source: PlaceSource): Place => {\n const parentId = parentOf.get(source.id);\n return {\n ...source,\n children: (children.get(source.id) ?? []).map(build).sort(byKindThenLabel),\n ...(parentId ? { parentId } : {}),\n };\n };\n return (children.get(undefined) ?? []).map(build).sort(byKindThenLabel);\n};\n\n/** Every place in tree order (each parent before its kinds). */\nexport const flattenPlaces = (places: readonly Place[]): Place[] =>\n places.flatMap((place) => [place, ...flattenPlaces(place.children)]);\n","import type { DefinitionListItem } from '@shapio/client';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useRef } from 'react';\nimport { useMe } from '@/api/auth';\nimport { queryKeys } from '@/api/queryKeys';\n\n/**\n * `me.modelPermissions` is keyed by model ID and read once a minute, so a model created since (here or in\n * another session) is missing from it. When the registry shows such a model, re-read `me` once for it.\n */\nexport const useModelPermissionsRefresh = (definitions: readonly DefinitionListItem[] | undefined) => {\n const queryClient = useQueryClient();\n const { data: me, isFetching } = useMe();\n const asked = useRef(new Set<string>());\n useEffect(() => {\n if (!me || !definitions || isFetching) {\n return;\n }\n const unknown = definitions\n .map(({ definition }) => definition.id)\n .filter((id) => !(id in me.modelPermissions) && !asked.current.has(id));\n if (unknown.length > 0) {\n for (const id of unknown) {\n asked.current.add(id);\n }\n void queryClient.invalidateQueries({ queryKey: queryKeys.me });\n }\n }, [definitions, me, isFetching, queryClient]);\n};\n","import { useMemo } from 'react';\nimport { useMe } from '@/api/auth';\nimport { useContentCounts } from '@/api/contentCounts';\nimport { canOnModel } from '@/helpers/modelPermissions';\nimport { useResolvedDefinitions } from '@/hooks/useResolvedDefinitions';\nimport { buildPlaceTree, type PlaceSource } from '../helpers/placeTree';\nimport { useModelPermissionsRefresh } from './useModelPermissionsRefresh';\n\n/** A content type as editors see it: a place in the sidebar. */\nexport type Place = {\n id: string;\n apiKey: string;\n label: string;\n kind: 'collection' | 'singleton';\n /**\n * Entries the admin can read, a type's including its kinds' (its list shows them all; the server counts\n * them so); undefined until counts load (or for single types, which need none).\n */\n count: number | undefined;\n canCreate: boolean;\n /** Shared with all sites (rather than this site's own). */\n shared: boolean;\n /** The nearest ancestor the admin can read (the place this one nests under); absent for a root. */\n parentId?: string;\n /** The kinds that extend this type (and that the admin can read): collections first, then by label. */\n children: Place[];\n};\n\n/**\n * The places the admin may read, from the model registry, as a tree: a type that extends another nests under\n * it. At each level collections come first, then single types, by label. Models are data (CONTRIBUTING.md\n * rule 2), so a model created a moment ago appears as soon as the registry refreshes. Returns the roots;\n * `flattenPlaces` lists every place.\n */\nexport const usePlaces = (): Place[] | undefined => {\n const { data: me } = useMe();\n const { resolved } = useResolvedDefinitions();\n const counts = useContentCounts();\n useModelPermissionsRefresh(resolved?.definitions);\n return useMemo(() => {\n if (!resolved) {\n return undefined;\n }\n const sources = resolved.definitions.flatMap(({ definition, scope }): PlaceSource[] =>\n definition.kind !== 'component' && canOnModel(me, definition.id, 'read')\n ? [\n {\n id: definition.id,\n apiKey: definition.apiKey,\n label: definition.label,\n kind: definition.kind,\n count: definition.kind === 'collection' ? counts?.get(definition.id) : undefined,\n canCreate: canOnModel(me, definition.id, 'create'),\n shared: scope === 'network',\n },\n ]\n : [],\n );\n return buildPlaceTree(sources, resolved.index.ancestors);\n }, [resolved, counts, me]);\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{S as n}from"./src-CMor9izq.js";import{l as r}from"./schema-6eUoC8fJ.js";var i=e(t(),1),a=e=>{let t=n(e.map(({definition:e})=>e)),r=new Map;for(let{definition:n}of e){let e=t.resolve(n.id);e&&r.set(n.id,e)}return{byId:r,index:t,definitions:e}},o=()=>{let{data:e,error:t}=r(`model`);return{resolved:(0,i.useMemo)(()=>e?a(e):void 0,[e]),error:t}},s=(e,t,n)=>{let r=e.get(n);return r?[r,...t.childrenOf(n).flatMap(t=>{let n=e.get(t);return n?[n]:[]}).sort((e,t)=>e.label.localeCompare(t.label)).flatMap(n=>s(e,t,n.id))]:[]};export{o as n,s as t};
|
|
2
|
+
//# sourceMappingURL=useResolvedDefinitions-30lnwFQ1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResolvedDefinitions-30lnwFQ1.js","names":["useMemo","__toESM","createDefinitionIndex","useDefinitions","import_react","require_react","resolveDefinitions","index","definitions","definition","byId","resolved","useResolvedDefinitions","data","familyKindsOf","model","models","id","child","childId","a","b"],"sources":["../../src/hooks/useResolvedDefinitions.ts"],"sourcesContent":["import type { DefinitionListItem } from '@shapio/client';\nimport { createDefinitionIndex, type DefinitionIndex, type ResolvedModelDefinition } from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useDefinitions } from '@/api/schema';\n\n/**\n * The model registry with inheritance resolved (plan polymorphic-types D1). The admin list holds stored\n * definitions (own fields plus `extends`); content screens want effective fields, so they read `byId`.\n */\nexport type ResolvedDefinitions = {\n /** Collections and single types by stable ID, with their effective fields (inherited first). */\n byId: ReadonlyMap<string, ResolvedModelDefinition>;\n /** Ancestors, children, descendants and families over the registry. */\n index: DefinitionIndex;\n /** The registry's items as the API sent them (stored definitions). */\n definitions: readonly DefinitionListItem[];\n};\n\n/** Resolves every model of a registry once; components are not models and are left out. */\nexport const resolveDefinitions = (definitions: readonly DefinitionListItem[]): ResolvedDefinitions => {\n const index = createDefinitionIndex(definitions.map(({ definition }) => definition));\n const byId = new Map<string, ResolvedModelDefinition>();\n for (const { definition } of definitions) {\n const resolved = index.resolve(definition.id);\n if (resolved) {\n byId.set(definition.id, resolved);\n }\n }\n return { byId, index, definitions };\n};\n\n/** The live registry, resolved; `resolved` is undefined while it loads (or when it failed: see `error`). */\nexport const useResolvedDefinitions = (): {\n resolved: ResolvedDefinitions | undefined;\n error: unknown;\n} => {\n const { data, error } = useDefinitions('model');\n const resolved = useMemo(() => (data ? resolveDefinitions(data) : undefined), [data]);\n return { resolved, error };\n};\n\n/**\n * A type and its kinds in tree order: the type itself, then each child (by label) followed by that child's\n * own kinds. Unknown IDs give an empty list. `models` and `index` come from `ResolvedDefinitions` (or the\n * content screens' `ContentSchema`, which carries the same two).\n */\nexport const familyKindsOf = (\n models: ReadonlyMap<string, ResolvedModelDefinition>,\n index: DefinitionIndex,\n id: string,\n): ResolvedModelDefinition[] => {\n const model = models.get(id);\n if (!model) {\n return [];\n }\n const children = index\n .childrenOf(id)\n .flatMap((childId) => {\n const child = models.get(childId);\n return child ? [child] : [];\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n return [model, ...children.flatMap((child) => familyKindsOf(models, index, child.id))];\n};\n"],"mappings":"oLAmBaM,EAAsB,GAAoE,CACrG,IAAMC,EAAQL,EAAsBM,EAAY,KAAK,CAAE,gBAAiBC,CAAU,CAAC,EAC7EC,EAAO,IAAI,IACjB,IAAK,GAAM,CAAE,gBAAgBF,EAAa,CACxC,IAAMG,EAAWJ,EAAM,QAAQE,EAAW,EAAE,EACxCE,GACFD,EAAK,IAAID,EAAW,GAAIE,CAAQ,CAEpC,CACA,MAAO,CAAE,OAAM,QAAO,aAAY,CACpC,EAGaC,MAGR,CACH,GAAM,CAAE,OAAM,SAAUT,EAAe,OAAO,EAE9C,MAAO,CAAE,UAAA,EADQH,EAAAA,QAAAA,KAAea,EAAOP,EAAmBO,CAAI,EAAI,IAAA,GAAY,CAACA,CAAI,CAC1E,EAAU,OAAM,CAC3B,EAOaC,GACX,EACA,EACA,IAC8B,CAC9B,IAAMC,EAAQC,EAAO,IAAIC,CAAE,EAW3B,OAVKF,EAUE,CAACA,EAAO,GAPER,EACd,WAAWU,CAAE,CAAC,CACd,QAAS,GAAY,CACpB,IAAMC,EAAQF,EAAO,IAAIG,CAAO,EAChC,OAAOD,EAAQ,CAACA,CAAK,EAAI,CAAC,CAC5B,CAAC,CAAC,CACD,MAAM,EAAG,IAAME,EAAE,MAAM,cAAcC,EAAE,KAAK,CAC7B,CAAA,CAAS,QAAS,GAAUP,EAAcE,EAAQT,EAAOW,EAAM,EAAE,CAAC,CAAC,EAT5E,CAAC,CAUZ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{E as r,I as i,L as a,O as o,S as s,j as c}from"./auth-
|
|
2
|
-
//# sourceMappingURL=useResolvedScheme-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{E as r,I as i,L as a,O as o,S as s,j as c}from"./auth-BFSvtV59.js";import{F as l,M as u,j as d}from"./badge-DGqA_yr_.js";import{r as f,t as p}from"./root-CDpNo7ef.js";import{t as m}from"./createLucideIcon-BOsNKleB.js";import{a as h,c as g,o as _,s as v}from"./RowTitle-DH9OZs3g.js";import{o as y,t as b}from"./theme-Cv-MfOv8.js";import{g as x,l as S,v as C}from"./table-zG68ipQc.js";import{t as w}from"./coerce-DSIVtcR-.js";function T(e){e.statusCode=e.statusCode||e.code||307;let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function E(e){return e instanceof Response&&!!e.options}var D=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e,this._branch=void 0;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=p:this.parentRoute||l();let r=n?p:t?.path;r&&r!==`/`&&(r=i(r));let o=t?.id||r,s=n?p:c((this.parentRoute.id===`__root__`?``:this.parentRoute.id)+`/`+(o??``));r===`__root__`&&(r=`/`);let u=s===`__root__`?`/`:r===void 0?this.parentRoute.fullPath:c(this.parentRoute.fullPath+`/`+r);this._path=r,this._id=s,this._fullPath=u,this._to=a(u)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>T({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},O=class{constructor({id:e}){this.notFound=e=>f({routeId:this.id,...e}),this.redirect=e=>T({from:this.id,...e}),this.id=e}},k=class extends D{constructor(e){super(e)}},A=e(t(),1),j=e(n(),1);function M(e){return new N({id:e})}var N=class extends O{constructor({id:e}){super({id:e}),this.useMatch=e=>u({...e,from:this.id}),this.useRouteContext=e=>h({...e,from:this.id}),this.useSearch=e=>_({...e,from:this.id}),this.useParams=e=>d({...e,from:this.id}),this.useLoaderDeps=e=>v({...e,from:this.id,strict:!1}),this.useLoaderData=e=>g({...e,from:this.id,strict:!1}),this.useNavigate=()=>r({from:o().routesById[this.id].fullPath}),this.notFound=e=>f({routeId:this.id,...e}),this.Link=A.forwardRef((e,t)=>{let n=o().routesById[this.id].fullPath;return(0,j.jsx)(s,{ref:t,from:n,...e})})}},P=class extends D{constructor(e){super(e),this.useMatch=e=>u({...e,from:this.id}),this.useRouteContext=e=>h({...e,from:this.id}),this.useSearch=e=>_({...e,from:this.id}),this.useParams=e=>d({...e,from:this.id}),this.useLoaderDeps=e=>v({...e,from:this.id}),this.useLoaderData=e=>g({...e,from:this.id}),this.useNavigate=()=>r({from:this.fullPath}),this.Link=A.forwardRef((e,t)=>(0,j.jsx)(s,{ref:t,from:this.fullPath,...e}))}};function F(e){return new P(e)}function I(){return e=>R(e)}var L=class extends k{constructor(e){super(e),this.useMatch=e=>u({...e,from:this.id}),this.useRouteContext=e=>h({...e,from:this.id}),this.useSearch=e=>_({...e,from:this.id}),this.useParams=e=>d({...e,from:this.id}),this.useLoaderDeps=e=>v({...e,from:this.id}),this.useLoaderData=e=>g({...e,from:this.id}),this.useNavigate=()=>r({from:this.fullPath}),this.Link=A.forwardRef((e,t)=>(0,j.jsx)(s,{ref:t,from:this.fullPath,...e}))}};function R(e){return new L(e)}var z={name:`camera`,size:24,node:[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]};z.node;var B=m(z),V={name:`file-code-corner`,size:24,node:[[`path`,{d:`M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]],aliases:[`file-code-2`]};V.node;var H=m(V),U=[`rest`,`graphql`],W=x({tab:S(U).optional().catch(void 0),op:C().trim().min(1).max(200).optional().catch(void 0)}),G=[`changes`,`checks`,`consumers`,`timeline`],K=x({tab:S(G).optional().catch(void 0)}),q=x({cursor:C().max(500).optional().catch(void 0)}),J=[`diff`,`timeline`],Y=w().int().min(0).optional().catch(void 0),X=x({from:Y,tab:S(J).optional().catch(void 0),at:Y}),Z=()=>{let e=b(e=>e.appearance),t=b(e=>e.variants);return y(e,t)};export{G as a,W as c,I as d,F as f,T as h,q as i,H as l,E as m,J as n,K as o,M as p,X as r,U as s,Z as t,B as u};
|
|
2
|
+
//# sourceMappingURL=useResolvedScheme-BVM4qLct.js.map
|
package/dist/admin/assets/{useResolvedScheme-C8vcQVko.js.map → useResolvedScheme-BVM4qLct.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResolvedScheme-C8vcQVko.js","names":["__iconData","z.object","z.enum","z.string","z.object","z.enum","z.object","z.string","z.coerce.number","z.enum","__toESM","require_jsx_runtime","useNavigate","trimPathLeft","trimPathRight","useRouter","Link","cleanPath","invariant","useMatch","useParams","notFound","rootRouteId","createLucideIcon","useRouteContext","useLoaderData","useSearch","useLoaderDeps","resolveScheme","useThemeStore","object","_enum","string","number","redirect","opts","headers","response","isRedirect","obj","BaseRoute","originalIndex","options","isRoot","path","customId","id","fullPath","children","lazyFn","BaseRouteApi","BaseRootRoute","import_react","require_react","import_jsx_runtime","getRouteApi","RouteApi","props","Route","createRoute","createRootRouteWithContext","createRootRoute","RootRoute","__iconData$1","Camera","__iconData","FileCodeCorner","EXPLORER_TABS","apiExplorerSearchSchema","CHANGE_SET_TABS","changeSetSearchSchema","snapshotsSearchSchema","SNAPSHOT_TABS","seq","snapshotSearchSchema","useResolvedScheme","appearance","state","variants"],"sources":["../../../../node_modules/.pnpm/@tanstack+router-core@1.171.34/node_modules/@tanstack/router-core/dist/esm/redirect.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.34/node_modules/@tanstack/router-core/dist/esm/route.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/route.js","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/camera.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/file-code-corner.mjs","../../src/features/Develop/ApiExplorer/searchSchema.ts","../../src/features/Develop/ChangeSet/searchSchema.ts","../../src/features/Develop/Snapshots/searchSchema.ts","../../src/hooks/useResolvedScheme.ts"],"sourcesContent":["//#region src/redirect.ts\n/**\n* Create a redirect Response understood by TanStack Router.\n*\n* Use from route `loader`/`beforeLoad` or server functions to trigger a\n* navigation. If `throw: true` is set, the redirect is thrown instead of\n* returned. External `href` values are classified as full-document\n* navigations when the router resolves the redirect.\n*\n* @param opts Options for the redirect. Common fields:\n* - `href`: absolute URL for external redirects.\n* - `statusCode`: HTTP status code to use (defaults to 307).\n* - `headers`: additional headers to include on the Response.\n* - Standard navigation options like `to`, `params`, `search`, `replace`,\n* and `reloadDocument` for internal redirects.\n* @returns A Response augmented with router navigation options.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction\n*/\nfunction redirect(opts) {\n\topts.statusCode = opts.statusCode || opts.code || 307;\n\tconst headers = new Headers(opts.headers);\n\tif (opts.href && headers.get(\"Location\") === null) headers.set(\"Location\", opts.href);\n\tconst response = new Response(null, {\n\t\tstatus: opts.statusCode,\n\t\theaders\n\t});\n\tresponse.options = opts;\n\tif (opts.throw) throw response;\n\treturn response;\n}\n/** Check whether a value is a TanStack Router redirect Response. */\nfunction isRedirect(obj) {\n\treturn obj instanceof Response && !!obj.options;\n}\n/** True if value is a redirect with a resolved `href` location. */\nfunction isResolvedRedirect(obj) {\n\treturn isRedirect(obj) && !!obj.options.href;\n}\n/** Parse a serialized redirect object back into a redirect Response. */\nfunction parseRedirect(obj) {\n\tif (obj !== null && typeof obj === \"object\" && obj.isSerializedRedirect) return redirect(obj);\n}\n//#endregion\nexport { isRedirect, isResolvedRedirect, parseRedirect, redirect };\n\n//# sourceMappingURL=redirect.js.map","import { invariant } from \"./invariant.js\";\nimport { cleanPath, trimPathLeft, trimPathRight } from \"./path.js\";\nimport { notFound } from \"./not-found.js\";\nimport { rootRouteId } from \"./root.js\";\nimport { redirect } from \"./redirect.js\";\n//#region src/route.ts\nvar BaseRoute = class {\n\tget to() {\n\t\treturn this._to;\n\t}\n\tget id() {\n\t\treturn this._id;\n\t}\n\tget path() {\n\t\treturn this._path;\n\t}\n\tget fullPath() {\n\t\treturn this._fullPath;\n\t}\n\tconstructor(options) {\n\t\tthis.init = (originalIndex) => {\n\t\t\tthis.originalIndex = originalIndex;\n\t\t\tthis._branch = void 0;\n\t\t\tconst options = this.options;\n\t\t\tconst isRoot = !options?.path && !options?.id;\n\t\t\tthis.parentRoute = this.options.getParentRoute?.();\n\t\t\tif (isRoot) this._path = rootRouteId;\n\t\t\telse if (!this.parentRoute) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Child Route instances must pass a 'getParentRoute: () => ParentRoute' option that returns a Route instance.`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\tlet path = isRoot ? rootRouteId : options?.path;\n\t\t\tif (path && path !== \"/\") path = trimPathLeft(path);\n\t\t\tconst customId = options?.id || path;\n\t\t\tconst id = isRoot ? rootRouteId : cleanPath((this.parentRoute.id === \"__root__\" ? \"\" : this.parentRoute.id) + \"/\" + (customId ?? \"\"));\n\t\t\tif (path === \"__root__\") path = \"/\";\n\t\t\tconst fullPath = id === \"__root__\" ? \"/\" : path === void 0 ? this.parentRoute.fullPath : cleanPath(this.parentRoute.fullPath + \"/\" + path);\n\t\t\tthis._path = path;\n\t\t\tthis._id = id;\n\t\t\tthis._fullPath = fullPath;\n\t\t\tthis._to = trimPathRight(fullPath);\n\t\t};\n\t\tthis.addChildren = (children) => {\n\t\t\treturn this._addFileChildren(children);\n\t\t};\n\t\tthis._addFileChildren = (children) => {\n\t\t\tif (Array.isArray(children)) this.children = children;\n\t\t\tif (typeof children === \"object\" && children !== null) this.children = Object.values(children);\n\t\t\treturn this;\n\t\t};\n\t\tthis._addFileTypes = () => {\n\t\t\treturn this;\n\t\t};\n\t\tthis.updateLoader = (options) => {\n\t\t\tObject.assign(this.options, options);\n\t\t\treturn this;\n\t\t};\n\t\tthis.update = (options) => {\n\t\t\tObject.assign(this.options, options);\n\t\t\treturn this;\n\t\t};\n\t\tthis.lazy = (lazyFn) => {\n\t\t\tthis.lazyFn = lazyFn;\n\t\t\treturn this;\n\t\t};\n\t\tthis.redirect = (opts) => redirect({\n\t\t\tfrom: this.fullPath,\n\t\t\t...opts\n\t\t});\n\t\tthis.options = options || {};\n\t\tthis.isRoot = !options?.getParentRoute;\n\t\tif (options?.id && options?.path) throw new Error(`Route cannot have both an 'id' and a 'path' option.`);\n\t}\n};\nvar BaseRouteApi = class {\n\tconstructor({ id }) {\n\t\tthis.notFound = (opts) => {\n\t\t\treturn notFound({\n\t\t\t\trouteId: this.id,\n\t\t\t\t...opts\n\t\t\t});\n\t\t};\n\t\tthis.redirect = (opts) => redirect({\n\t\t\tfrom: this.id,\n\t\t\t...opts\n\t\t});\n\t\tthis.id = id;\n\t}\n};\nvar BaseRootRoute = class extends BaseRoute {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n};\n//#endregion\nexport { BaseRootRoute, BaseRoute, BaseRouteApi };\n\n//# sourceMappingURL=route.js.map","import { useRouter } from \"./useRouter.js\";\nimport { useMatch } from \"./useMatch.js\";\nimport { useLoaderData } from \"./useLoaderData.js\";\nimport { useLoaderDeps } from \"./useLoaderDeps.js\";\nimport { useParams } from \"./useParams.js\";\nimport { useSearch } from \"./useSearch.js\";\nimport { useNavigate } from \"./useNavigate.js\";\nimport { useRouteContext } from \"./useRouteContext.js\";\nimport { Link } from \"./link.js\";\nimport { BaseRootRoute, BaseRoute, BaseRouteApi, notFound } from \"@tanstack/router-core\";\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/route.tsx\n/**\n* Returns a route-specific API that exposes type-safe hooks pre-bound\n* to a single route ID. Useful for consuming a route's APIs from files\n* where the route object isn't directly imported (e.g. code-split files).\n*\n* @param id Route ID string literal for the target route.\n* @returns A `RouteApi` instance bound to the given route ID.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/getRouteApiFunction\n*/\nfunction getRouteApi(id) {\n\treturn new RouteApi({ id });\n}\nvar RouteApi = class extends BaseRouteApi {\n\t/**\n\t* @deprecated Use the `getRouteApi` function instead.\n\t*/\n\tconstructor({ id }) {\n\t\tsuper({ id });\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstrict: false\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstrict: false\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: useRouter().routesById[this.id].fullPath });\n\t\t};\n\t\tthis.notFound = (opts) => {\n\t\t\treturn notFound({\n\t\t\t\trouteId: this.id,\n\t\t\t\t...opts\n\t\t\t});\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\tconst fullPath = useRouter().routesById[this.id].fullPath;\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\nvar Route = class extends BaseRoute {\n\t/**\n\t* @deprecated Use the `createRoute` function instead.\n\t*/\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: this.fullPath });\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: this.fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Creates a non-root Route instance for code-based routing.\n*\n* Use this to define a route that will be composed into a route tree\n* (typically via a parent route's `addChildren`). If you're using file-based\n* routing, prefer `createFileRoute`.\n*\n* @param options Route options (path, component, loader, context, etc.).\n* @returns A Route instance to be attached to the route tree.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRouteFunction\n*/\nfunction createRoute(options) {\n\treturn new Route(options);\n}\n/**\n* Creates a root route factory that requires a router context type.\n*\n* Use when your root route expects `context` to be provided to `createRouter`.\n* The returned function behaves like `createRootRoute` but enforces a context type.\n*\n* @returns A factory function to configure and return a root route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRootRouteWithContextFunction\n*/\nfunction createRootRouteWithContext() {\n\treturn (options) => {\n\t\treturn createRootRoute(options);\n\t};\n}\n/**\n* @deprecated Use the `createRootRouteWithContext` function instead.\n*/\nvar rootRouteWithContext = createRootRouteWithContext;\nvar RootRoute = class extends BaseRootRoute {\n\t/**\n\t* @deprecated `RootRoute` is now an internal implementation detail. Use `createRootRoute()` instead.\n\t*/\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: this.fullPath });\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: this.fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Creates a root Route instance used to build your route tree.\n*\n* Typically paired with `createRouter({ routeTree })`. If you need to require\n* a typed router context, use `createRootRouteWithContext` instead.\n*\n* @param options Root route options (component, error, pending, etc.).\n* @returns A root route instance.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRootRouteFunction\n*/\nfunction createRootRoute(options) {\n\treturn new RootRoute(options);\n}\nfunction createRouteMask(opts) {\n\treturn opts;\n}\nvar NotFoundRoute = class extends Route {\n\tconstructor(options) {\n\t\tsuper({\n\t\t\t...options,\n\t\t\tid: \"404\"\n\t\t});\n\t}\n};\n//#endregion\nexport { NotFoundRoute, RootRoute, Route, RouteApi, createRootRoute, createRootRouteWithContext, createRoute, createRouteMask, getRouteApi, rootRouteWithContext };\n\n//# sourceMappingURL=route.js.map","/**\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: \"camera\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\",\n key: \"18u6gg\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"13\", r: \"3\", key: \"1vg3eu\" }]\n ]\n};\n__iconData.node;\nconst Camera = createLucideIcon(__iconData);\n\nexport { __iconData, Camera as default };\n//# sourceMappingURL=camera.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: \"file-code-corner\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35\",\n key: \"1wthlu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"m5 16-3 3 3 3\", key: \"331omg\" }],\n [\"path\", { d: \"m9 22 3-3-3-3\", key: \"lsp7cz\" }]\n ],\n aliases: [\"file-code-2\"]\n};\n__iconData.node;\nconst FileCodeCorner = createLucideIcon(__iconData);\n\nexport { __iconData, FileCodeCorner as default };\n//# sourceMappingURL=file-code-corner.mjs.map\n","import { z } from 'zod';\n\nexport const EXPLORER_TABS = ['rest', 'graphql'] as const;\nexport type ExplorerTab = (typeof EXPLORER_TABS)[number];\n\n/** `/api-explorer?tab=rest&op=listArticle`: the tab and the selected operation (OpenAPI operationId or GraphQL root field). */\nexport const apiExplorerSearchSchema = z.object({\n tab: z.enum(EXPLORER_TABS).optional().catch(undefined),\n op: z.string().trim().min(1).max(200).optional().catch(undefined),\n});\n\nexport type ApiExplorerSearch = z.infer<typeof apiExplorerSearchSchema>;\n","import { z } from 'zod';\n\nexport const CHANGE_SET_TABS = ['changes', 'checks', 'consumers', 'timeline'] as const;\nexport type ChangeSetTab = (typeof CHANGE_SET_TABS)[number];\n\n/** `/changes/:id?tab=`: the review tab lives in the URL (bookmarkable, back-button friendly). */\nexport const changeSetSearchSchema = z.object({ tab: z.enum(CHANGE_SET_TABS).optional().catch(undefined) });\n","import { z } from 'zod';\n\nexport const snapshotsSearchSchema = z.object({ cursor: z.string().max(500).optional().catch(undefined) });\n\nexport const SNAPSHOT_TABS = ['diff', 'timeline'] as const;\nexport type SnapshotTab = (typeof SNAPSHOT_TABS)[number];\n\nconst seq = z.coerce.number().int().min(0).optional().catch(undefined);\n\n/** `/snapshots/:seq?from=&tab=&at=`: the compare base, the tab, and the scrubber's position. */\nexport const snapshotSearchSchema = z.object({\n from: seq,\n tab: z.enum(SNAPSHOT_TABS).optional().catch(undefined),\n at: seq,\n});\n","import type { ThemeVariant } from '@shapio/schema';\nimport { resolveScheme } from '@/helpers/theme';\nimport { useThemeStore } from '@/stores/theme';\n\n/** The variant rendered now (light or dark): the saved look's, or the theme's own if it lost that variant. */\nexport const useResolvedScheme = (): ThemeVariant => {\n const appearance = useThemeStore((state) => state.appearance);\n const variants = useThemeStore((state) => state.variants);\n return resolveScheme(appearance, variants);\n};\n"],"ignoreList":[0,1,2,3,4],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useResolvedScheme-BVM4qLct.js","names":["__iconData","z.object","z.enum","z.string","z.object","z.enum","z.object","z.string","z.coerce.number","z.enum","__toESM","require_jsx_runtime","useNavigate","trimPathLeft","trimPathRight","useRouter","Link","cleanPath","invariant","useMatch","useParams","notFound","rootRouteId","createLucideIcon","useRouteContext","useLoaderData","useSearch","useLoaderDeps","resolveScheme","useThemeStore","object","_enum","string","number","redirect","opts","headers","response","isRedirect","obj","BaseRoute","originalIndex","options","isRoot","path","customId","id","fullPath","children","lazyFn","BaseRouteApi","BaseRootRoute","import_react","require_react","import_jsx_runtime","getRouteApi","RouteApi","props","Route","createRoute","createRootRouteWithContext","createRootRoute","RootRoute","__iconData$1","Camera","__iconData","FileCodeCorner","EXPLORER_TABS","apiExplorerSearchSchema","CHANGE_SET_TABS","changeSetSearchSchema","snapshotsSearchSchema","SNAPSHOT_TABS","seq","snapshotSearchSchema","useResolvedScheme","appearance","state","variants"],"sources":["../../../../node_modules/.pnpm/@tanstack+router-core@1.171.34/node_modules/@tanstack/router-core/dist/esm/redirect.js","../../../../node_modules/.pnpm/@tanstack+router-core@1.171.34/node_modules/@tanstack/router-core/dist/esm/route.js","../../../../node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/route.js","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/camera.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/file-code-corner.mjs","../../src/features/Develop/ApiExplorer/searchSchema.ts","../../src/features/Develop/ChangeSet/searchSchema.ts","../../src/features/Develop/Snapshots/searchSchema.ts","../../src/hooks/useResolvedScheme.ts"],"sourcesContent":["//#region src/redirect.ts\n/**\n* Create a redirect Response understood by TanStack Router.\n*\n* Use from route `loader`/`beforeLoad` or server functions to trigger a\n* navigation. If `throw: true` is set, the redirect is thrown instead of\n* returned. External `href` values are classified as full-document\n* navigations when the router resolves the redirect.\n*\n* @param opts Options for the redirect. Common fields:\n* - `href`: absolute URL for external redirects.\n* - `statusCode`: HTTP status code to use (defaults to 307).\n* - `headers`: additional headers to include on the Response.\n* - Standard navigation options like `to`, `params`, `search`, `replace`,\n* and `reloadDocument` for internal redirects.\n* @returns A Response augmented with router navigation options.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction\n*/\nfunction redirect(opts) {\n\topts.statusCode = opts.statusCode || opts.code || 307;\n\tconst headers = new Headers(opts.headers);\n\tif (opts.href && headers.get(\"Location\") === null) headers.set(\"Location\", opts.href);\n\tconst response = new Response(null, {\n\t\tstatus: opts.statusCode,\n\t\theaders\n\t});\n\tresponse.options = opts;\n\tif (opts.throw) throw response;\n\treturn response;\n}\n/** Check whether a value is a TanStack Router redirect Response. */\nfunction isRedirect(obj) {\n\treturn obj instanceof Response && !!obj.options;\n}\n/** True if value is a redirect with a resolved `href` location. */\nfunction isResolvedRedirect(obj) {\n\treturn isRedirect(obj) && !!obj.options.href;\n}\n/** Parse a serialized redirect object back into a redirect Response. */\nfunction parseRedirect(obj) {\n\tif (obj !== null && typeof obj === \"object\" && obj.isSerializedRedirect) return redirect(obj);\n}\n//#endregion\nexport { isRedirect, isResolvedRedirect, parseRedirect, redirect };\n\n//# sourceMappingURL=redirect.js.map","import { invariant } from \"./invariant.js\";\nimport { cleanPath, trimPathLeft, trimPathRight } from \"./path.js\";\nimport { notFound } from \"./not-found.js\";\nimport { rootRouteId } from \"./root.js\";\nimport { redirect } from \"./redirect.js\";\n//#region src/route.ts\nvar BaseRoute = class {\n\tget to() {\n\t\treturn this._to;\n\t}\n\tget id() {\n\t\treturn this._id;\n\t}\n\tget path() {\n\t\treturn this._path;\n\t}\n\tget fullPath() {\n\t\treturn this._fullPath;\n\t}\n\tconstructor(options) {\n\t\tthis.init = (originalIndex) => {\n\t\t\tthis.originalIndex = originalIndex;\n\t\t\tthis._branch = void 0;\n\t\t\tconst options = this.options;\n\t\t\tconst isRoot = !options?.path && !options?.id;\n\t\t\tthis.parentRoute = this.options.getParentRoute?.();\n\t\t\tif (isRoot) this._path = rootRouteId;\n\t\t\telse if (!this.parentRoute) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Child Route instances must pass a 'getParentRoute: () => ParentRoute' option that returns a Route instance.`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\tlet path = isRoot ? rootRouteId : options?.path;\n\t\t\tif (path && path !== \"/\") path = trimPathLeft(path);\n\t\t\tconst customId = options?.id || path;\n\t\t\tconst id = isRoot ? rootRouteId : cleanPath((this.parentRoute.id === \"__root__\" ? \"\" : this.parentRoute.id) + \"/\" + (customId ?? \"\"));\n\t\t\tif (path === \"__root__\") path = \"/\";\n\t\t\tconst fullPath = id === \"__root__\" ? \"/\" : path === void 0 ? this.parentRoute.fullPath : cleanPath(this.parentRoute.fullPath + \"/\" + path);\n\t\t\tthis._path = path;\n\t\t\tthis._id = id;\n\t\t\tthis._fullPath = fullPath;\n\t\t\tthis._to = trimPathRight(fullPath);\n\t\t};\n\t\tthis.addChildren = (children) => {\n\t\t\treturn this._addFileChildren(children);\n\t\t};\n\t\tthis._addFileChildren = (children) => {\n\t\t\tif (Array.isArray(children)) this.children = children;\n\t\t\tif (typeof children === \"object\" && children !== null) this.children = Object.values(children);\n\t\t\treturn this;\n\t\t};\n\t\tthis._addFileTypes = () => {\n\t\t\treturn this;\n\t\t};\n\t\tthis.updateLoader = (options) => {\n\t\t\tObject.assign(this.options, options);\n\t\t\treturn this;\n\t\t};\n\t\tthis.update = (options) => {\n\t\t\tObject.assign(this.options, options);\n\t\t\treturn this;\n\t\t};\n\t\tthis.lazy = (lazyFn) => {\n\t\t\tthis.lazyFn = lazyFn;\n\t\t\treturn this;\n\t\t};\n\t\tthis.redirect = (opts) => redirect({\n\t\t\tfrom: this.fullPath,\n\t\t\t...opts\n\t\t});\n\t\tthis.options = options || {};\n\t\tthis.isRoot = !options?.getParentRoute;\n\t\tif (options?.id && options?.path) throw new Error(`Route cannot have both an 'id' and a 'path' option.`);\n\t}\n};\nvar BaseRouteApi = class {\n\tconstructor({ id }) {\n\t\tthis.notFound = (opts) => {\n\t\t\treturn notFound({\n\t\t\t\trouteId: this.id,\n\t\t\t\t...opts\n\t\t\t});\n\t\t};\n\t\tthis.redirect = (opts) => redirect({\n\t\t\tfrom: this.id,\n\t\t\t...opts\n\t\t});\n\t\tthis.id = id;\n\t}\n};\nvar BaseRootRoute = class extends BaseRoute {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n};\n//#endregion\nexport { BaseRootRoute, BaseRoute, BaseRouteApi };\n\n//# sourceMappingURL=route.js.map","import { useRouter } from \"./useRouter.js\";\nimport { useMatch } from \"./useMatch.js\";\nimport { useLoaderData } from \"./useLoaderData.js\";\nimport { useLoaderDeps } from \"./useLoaderDeps.js\";\nimport { useParams } from \"./useParams.js\";\nimport { useSearch } from \"./useSearch.js\";\nimport { useNavigate } from \"./useNavigate.js\";\nimport { useRouteContext } from \"./useRouteContext.js\";\nimport { Link } from \"./link.js\";\nimport { BaseRootRoute, BaseRoute, BaseRouteApi, notFound } from \"@tanstack/router-core\";\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/route.tsx\n/**\n* Returns a route-specific API that exposes type-safe hooks pre-bound\n* to a single route ID. Useful for consuming a route's APIs from files\n* where the route object isn't directly imported (e.g. code-split files).\n*\n* @param id Route ID string literal for the target route.\n* @returns A `RouteApi` instance bound to the given route ID.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/getRouteApiFunction\n*/\nfunction getRouteApi(id) {\n\treturn new RouteApi({ id });\n}\nvar RouteApi = class extends BaseRouteApi {\n\t/**\n\t* @deprecated Use the `getRouteApi` function instead.\n\t*/\n\tconstructor({ id }) {\n\t\tsuper({ id });\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstrict: false\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstrict: false\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: useRouter().routesById[this.id].fullPath });\n\t\t};\n\t\tthis.notFound = (opts) => {\n\t\t\treturn notFound({\n\t\t\t\trouteId: this.id,\n\t\t\t\t...opts\n\t\t\t});\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\tconst fullPath = useRouter().routesById[this.id].fullPath;\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\nvar Route = class extends BaseRoute {\n\t/**\n\t* @deprecated Use the `createRoute` function instead.\n\t*/\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: this.fullPath });\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: this.fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Creates a non-root Route instance for code-based routing.\n*\n* Use this to define a route that will be composed into a route tree\n* (typically via a parent route's `addChildren`). If you're using file-based\n* routing, prefer `createFileRoute`.\n*\n* @param options Route options (path, component, loader, context, etc.).\n* @returns A Route instance to be attached to the route tree.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRouteFunction\n*/\nfunction createRoute(options) {\n\treturn new Route(options);\n}\n/**\n* Creates a root route factory that requires a router context type.\n*\n* Use when your root route expects `context` to be provided to `createRouter`.\n* The returned function behaves like `createRootRoute` but enforces a context type.\n*\n* @returns A factory function to configure and return a root route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRootRouteWithContextFunction\n*/\nfunction createRootRouteWithContext() {\n\treturn (options) => {\n\t\treturn createRootRoute(options);\n\t};\n}\n/**\n* @deprecated Use the `createRootRouteWithContext` function instead.\n*/\nvar rootRouteWithContext = createRootRouteWithContext;\nvar RootRoute = class extends BaseRootRoute {\n\t/**\n\t* @deprecated `RootRoute` is now an internal implementation detail. Use `createRootRoute()` instead.\n\t*/\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: this.fullPath });\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: this.fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Creates a root Route instance used to build your route tree.\n*\n* Typically paired with `createRouter({ routeTree })`. If you need to require\n* a typed router context, use `createRootRouteWithContext` instead.\n*\n* @param options Root route options (component, error, pending, etc.).\n* @returns A root route instance.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRootRouteFunction\n*/\nfunction createRootRoute(options) {\n\treturn new RootRoute(options);\n}\nfunction createRouteMask(opts) {\n\treturn opts;\n}\nvar NotFoundRoute = class extends Route {\n\tconstructor(options) {\n\t\tsuper({\n\t\t\t...options,\n\t\t\tid: \"404\"\n\t\t});\n\t}\n};\n//#endregion\nexport { NotFoundRoute, RootRoute, Route, RouteApi, createRootRoute, createRootRouteWithContext, createRoute, createRouteMask, getRouteApi, rootRouteWithContext };\n\n//# sourceMappingURL=route.js.map","/**\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: \"camera\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z\",\n key: \"18u6gg\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"13\", r: \"3\", key: \"1vg3eu\" }]\n ]\n};\n__iconData.node;\nconst Camera = createLucideIcon(__iconData);\n\nexport { __iconData, Camera as default };\n//# sourceMappingURL=camera.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: \"file-code-corner\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35\",\n key: \"1wthlu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"m5 16-3 3 3 3\", key: \"331omg\" }],\n [\"path\", { d: \"m9 22 3-3-3-3\", key: \"lsp7cz\" }]\n ],\n aliases: [\"file-code-2\"]\n};\n__iconData.node;\nconst FileCodeCorner = createLucideIcon(__iconData);\n\nexport { __iconData, FileCodeCorner as default };\n//# sourceMappingURL=file-code-corner.mjs.map\n","import { z } from 'zod';\n\nexport const EXPLORER_TABS = ['rest', 'graphql'] as const;\nexport type ExplorerTab = (typeof EXPLORER_TABS)[number];\n\n/** `/api-explorer?tab=rest&op=listArticle`: the tab and the selected operation (OpenAPI operationId or GraphQL root field). */\nexport const apiExplorerSearchSchema = z.object({\n tab: z.enum(EXPLORER_TABS).optional().catch(undefined),\n op: z.string().trim().min(1).max(200).optional().catch(undefined),\n});\n\nexport type ApiExplorerSearch = z.infer<typeof apiExplorerSearchSchema>;\n","import { z } from 'zod';\n\nexport const CHANGE_SET_TABS = ['changes', 'checks', 'consumers', 'timeline'] as const;\nexport type ChangeSetTab = (typeof CHANGE_SET_TABS)[number];\n\n/** `/changes/:id?tab=`: the review tab lives in the URL (bookmarkable, back-button friendly). */\nexport const changeSetSearchSchema = z.object({ tab: z.enum(CHANGE_SET_TABS).optional().catch(undefined) });\n","import { z } from 'zod';\n\nexport const snapshotsSearchSchema = z.object({ cursor: z.string().max(500).optional().catch(undefined) });\n\nexport const SNAPSHOT_TABS = ['diff', 'timeline'] as const;\nexport type SnapshotTab = (typeof SNAPSHOT_TABS)[number];\n\nconst seq = z.coerce.number().int().min(0).optional().catch(undefined);\n\n/** `/snapshots/:seq?from=&tab=&at=`: the compare base, the tab, and the scrubber's position. */\nexport const snapshotSearchSchema = z.object({\n from: seq,\n tab: z.enum(SNAPSHOT_TABS).optional().catch(undefined),\n at: seq,\n});\n","import type { ThemeVariant } from '@shapio/schema';\nimport { resolveScheme } from '@/helpers/theme';\nimport { useThemeStore } from '@/stores/theme';\n\n/** The variant rendered now (light or dark): the saved look's, or the theme's own if it lost that variant. */\nexport const useResolvedScheme = (): ThemeVariant => {\n const appearance = useThemeStore((state) => state.appearance);\n const variants = useThemeStore((state) => state.variants);\n return resolveScheme(appearance, variants);\n};\n"],"ignoreList":[0,1,2,3,4],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./createLucideIcon-BOsNKleB.js";var r={name:`shapes`,size:24,node:[[`path`,{d:`M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z`,key:`1bo67w`}],[`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`,key:`1bkyp8`}],[`circle`,{cx:`17.5`,cy:`17.5`,r:`3.5`,key:`w3z12y`}]]};r.node;var i=n(r),a=e(t(),1),o=(e,t)=>{let n=(0,a.useRef)(e);(0,a.useEffect)(()=>{n.current=e}),(0,a.useEffect)(()=>{if(!t)return;let e=e=>{(e.metaKey||e.ctrlKey)&&!e.altKey&&e.key.toLowerCase()===`s`&&(e.preventDefault(),n.current())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t])};export{i as n,o as t};
|
|
2
|
+
//# sourceMappingURL=useSaveShortcut-DQuNL1uJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSaveShortcut-DQuNL1uJ.js","names":["useRef","__toESM","createLucideIcon","__iconData","Shapes","import_react","require_react","useSaveShortcut","latest","onSave","enabled","onKeyDown","event"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/shapes.mjs","../../src/hooks/useSaveShortcut.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"shapes\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z\",\n key: \"1bo67w\"\n }\n ],\n [\"rect\", { x: \"3\", y: \"14\", width: \"7\", height: \"7\", rx: \"1\", key: \"1bkyp8\" }],\n [\"circle\", { cx: \"17.5\", cy: \"17.5\", r: \"3.5\", key: \"w3z12y\" }]\n ]\n};\n__iconData.node;\nconst Shapes = createLucideIcon(__iconData);\n\nexport { __iconData, Shapes as default };\n//# sourceMappingURL=shapes.mjs.map\n","import { useEffect, useRef } from 'react';\n\n/**\n * Mod+S runs `onSave` (instead of the browser's \"save page\") while `enabled`. The entry form saves with it,\n * the model builder opens its review.\n */\nexport const useSaveShortcut = (onSave: () => void, enabled: boolean) => {\n const latest = useRef(onSave);\n useEffect(() => {\n latest.current = onSave;\n });\n useEffect(() => {\n if (!enabled) {\n return undefined;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && !event.altKey && event.key.toLowerCase() === 's') {\n event.preventDefault();\n latest.current();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [enabled]);\n};\n"],"ignoreList":[0],"mappings":"yIASA,IAAMG,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CACE,OACA,CACE,EAAG,2FACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,IAAK,EAAG,KAAM,MAAO,IAAK,OAAQ,IAAK,GAAI,IAAK,IAAK,QAAS,CAAC,EAC7E,CAAC,SAAU,CAAE,GAAI,OAAQ,GAAI,OAAQ,EAAG,MAAO,IAAK,QAAS,CAAC,CAChE,CACF,EACAA,EAAW,KACX,IAAMC,EAASF,EAAiBC,CAAU,aCnB7BI,GAAmB,EAAoB,IAAqB,CACvE,IAAMC,GAAA,EAASR,EAAAA,OAAAA,CAAOS,CAAM,GAC5B,EAAAJ,EAAA,UAAA,KAAgB,CACd,EAAO,QAAUI,CACnB,CAAC,GACD,EAAAJ,EAAA,UAAA,KAAgB,CACd,GAAI,CAACK,EACH,OAEF,IAAMC,EAAa,GAAyB,EACrCC,EAAM,SAAWA,EAAM,UAAY,CAACA,EAAM,QAAUA,EAAM,IAAI,YAAY,IAAM,MACnFA,EAAM,eAAe,EACrBJ,EAAO,QAAQ,EAEnB,EAEA,OADA,OAAO,iBAAiB,UAAWG,CAAS,MAC/B,OAAO,oBAAoB,UAAWA,CAAS,CAC9D,EAAG,CAACD,CAAO,CAAC,CACd"}
|
package/dist/admin/assets/{useSchemaScopeAccess-ByrxIdKM.js → useSchemaScopeAccess-JXOMx51q.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as e}from"./auth-
|
|
2
|
-
//# sourceMappingURL=useSchemaScopeAccess-
|
|
1
|
+
import{u as e}from"./auth-BFSvtV59.js";import{t}from"./createLucideIcon-BOsNKleB.js";var n={name:`braces`,size:24,node:[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]],aliases:[`curly-braces`]};n.node;var r=t(n),i={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};i.node;var a=t(i),o=()=>{let t=e().data;return{multiSite:(t?.siteCount??1)>1,canShare:t?.networkPermissions.includes(`schema.create`)??!1,canCreateOnSite:t?.sitePermissions.includes(`schema.create`)??!1}};export{a as n,r,o as t};
|
|
2
|
+
//# sourceMappingURL=useSchemaScopeAccess-JXOMx51q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSchemaScopeAccess-
|
|
1
|
+
{"version":3,"file":"useSchemaScopeAccess-JXOMx51q.js","names":["__iconData","useMe","__iconData$1","Braces","createLucideIcon","__iconData","Link2","useSchemaScopeAccess","me"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/braces.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/link-2.mjs","../../src/hooks/useSchemaScopeAccess.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"braces\",\n size: 24,\n node: [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n ],\n aliases: [\"curly-braces\"]\n};\n__iconData.node;\nconst Braces = createLucideIcon(__iconData);\n\nexport { __iconData, Braces as default };\n//# sourceMappingURL=braces.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: \"link-2\",\n size: 24,\n node: [\n [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7h2\", key: \"8i5ue5\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 1 1 0 10h-2\", key: \"1b9ql8\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"12\", y2: \"12\", key: \"1jonct\" }]\n ]\n};\n__iconData.node;\nconst Link2 = createLucideIcon(__iconData);\n\nexport { __iconData, Link2 as default };\n//# sourceMappingURL=link-2.mjs.map\n","import { useMe } from '@/api/auth';\n\n/**\n * Where definitions can live, for this admin: `multiSite` when the instance has more than one site (scope\n * is shown only then), `canShare` when the admin may create and change definitions shared with all sites\n * (`schema.create` on every site), and `canCreateOnSite` when a role on this site grants it for the site's\n * own definitions. The server enforces each of these.\n */\nexport const useSchemaScopeAccess = () => {\n const me = useMe().data;\n return {\n multiSite: (me?.siteCount ?? 1) > 1,\n canShare: me?.networkPermissions.includes('schema.create') ?? false,\n canCreateOnSite: me?.sitePermissions.includes('schema.create') ?? false,\n };\n};\n"],"ignoreList":[0,1],"mappings":"qFASA,IAAMA,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CACE,OACA,CAAE,EAAG,uEAAwE,IAAK,QAAS,CAC7F,EACA,CACE,OACA,CACE,EAAG,2EACH,IAAK,QACP,CACF,CACF,EACA,QAAS,CAAC,cAAc,CAC1B,EACAA,EAAW,KACX,IAAMG,EAASC,EAAiBJ,CAAU,ECnBpCK,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAS,CAAC,EACxD,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAS,CAAC,EAC1D,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAS,CAAC,CACnE,CACF,EACAA,EAAW,KACX,IAAMC,EAAQF,EAAiBC,CAAU,ECX5BE,MAA6B,CACxC,IAAMC,EAAKP,EAAM,CAAC,CAAC,KACnB,MAAO,CACL,WAAYO,GAAI,WAAa,GAAK,EAClC,SAAUA,GAAI,mBAAmB,SAAS,eAAe,GAAK,GAC9D,gBAAiBA,GAAI,gBAAgB,SAAS,eAAe,GAAK,EACpE,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Bt as e,En as t,Jt as n,gn as r,gt as i,mt as a,qt as o}from"./src-CMor9izq.js";import{n as s,t as c}from"./createLucideIcon-BOsNKleB.js";var l={name:`user-plus`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]};l.node;var u=c(l),d=t=>n({queryKey:e.audit.list(t),queryFn:()=>i.audit.list(t),placeholderData:r,meta:{silent:!0}}),f=[`name`,`title`,`label`,`email`,`filename`,`apiKey`],p=e=>{if(typeof e!=`object`||!e)return;let t=e;for(let e of f){let n=t[e];if(typeof n==`string`&&n.trim()!==``)return n}},m={"admin_user.create":`audit.actions.adminUserCreate`,"admin_user.delete":`audit.actions.adminUserDelete`,"admin_user.password_change":`audit.actions.adminUserPasswordChange`,"admin_user.update":`audit.actions.adminUserUpdate`,"api_token.create":`audit.actions.apiTokenCreate`,"api_token.revoke":`audit.actions.apiTokenRevoke`,"app_auth.refresh_reuse":`audit.actions.appAuthRefreshReuse`,"app_role.create":`audit.actions.appRoleCreate`,"app_role.delete":`audit.actions.appRoleDelete`,"app_role.update":`audit.actions.appRoleUpdate`,"app_user.block":`audit.actions.appUserBlock`,"app_user.unblock":`audit.actions.appUserUnblock`,"app_user.confirm_email":`audit.actions.appUserConfirmEmail`,"app_user.confirmation_resend":`audit.actions.appUserConfirmationResend`,"app_user.delete":`audit.actions.appUserDelete`,"app_user.oauth_link":`audit.actions.appUserOauthLink`,"app_user.password_change":`audit.actions.appUserPasswordChange`,"app_user.password_reset":`audit.actions.appUserPasswordReset`,"app_user.password_reset_request":`audit.actions.appUserPasswordResetRequest`,"app_user.register":`audit.actions.appUserRegister`,"app_user.roles_change":`audit.actions.appUserRolesChange`,"app_user.update":`audit.actions.appUserUpdate`,"assist.alt_text":`audit.actions.assistAltText`,"assist.content_ops":`audit.actions.assistContentOps`,"assist.rewrite":`audit.actions.assistRewrite`,"assist.schema_draft":`audit.actions.assistSchemaDraft`,"assist.summarize":`audit.actions.assistSummarize`,"assist.translate":`audit.actions.assistTranslate`,"auth.login":`audit.actions.authLogin`,"auth.logout":`audit.actions.authLogout`,"auth.password_reset":`audit.actions.authPasswordReset`,"auth.password_reset_request":`audit.actions.authPasswordResetRequest`,"change_set.create":`audit.actions.changeSetCreate`,"change_set.discard":`audit.actions.changeSetDiscard`,"change_set.item_add":`audit.actions.changeSetItemAdd`,"change_set.item_changed_after_review":`audit.actions.changeSetItemChangedAfterReview`,"change_set.item_remove":`audit.actions.changeSetItemRemove`,"change_set.schedule":`audit.actions.changeSetSchedule`,"change_set.schema_draft":`audit.actions.changeSetSchemaDraft`,"change_set.schema_draft_remove":`audit.actions.changeSetSchemaDraftRemove`,"change_set.ship":`audit.actions.changeSetShip`,"change_set.shipping":`audit.actions.changeSetShipping`,"change_set.unschedule":`audit.actions.changeSetUnschedule`,"change_set.update":`audit.actions.changeSetUpdate`,"content.change_kind":`audit.actions.contentChangeKind`,"content.delete":`audit.actions.contentDelete`,"content.publish":`audit.actions.contentPublish`,"content.restore":`audit.actions.contentRestore`,"content.unpublish":`audit.actions.contentUnpublish`,"deployment.retry":`audit.actions.deploymentRetry`,"deployment.trigger":`audit.actions.deploymentTrigger`,"deployment_connection.create":`audit.actions.deploymentConnectionCreate`,"deployment_connection.delete":`audit.actions.deploymentConnectionDelete`,"deployment_connection.update":`audit.actions.deploymentConnectionUpdate`,"invitation.accept":`audit.actions.invitationAccept`,"invitation.create":`audit.actions.invitationCreate`,"invitation.link":`audit.actions.invitationLink`,"invitation.revoke":`audit.actions.invitationRevoke`,"job.retry":`audit.actions.jobRetry`,"locale.create":`audit.actions.localeCreate`,"locale.delete":`audit.actions.localeDelete`,"locale.update":`audit.actions.localeUpdate`,"media.delete":`audit.actions.mediaDelete`,"media.folder.delete":`audit.actions.mediaFolderDelete`,"media.replace":`audit.actions.mediaReplace`,"media.upload":`audit.actions.mediaUpload`,"media.visibility.change":`audit.actions.mediaVisibilityChange`,"preview_token.create":`audit.actions.previewTokenCreate`,"preview_token.revoke":`audit.actions.previewTokenRevoke`,"publishing.schedule":`audit.actions.publishingSchedule`,"publishing.schedule.publish":`audit.actions.publishingSchedulePublish`,"publishing.schedule.unpublish":`audit.actions.publishingScheduleUnpublish`,"publishing.schedule.cancel":`audit.actions.publishingScheduleCancel`,"publishing.schedule.execute":`audit.actions.publishingScheduleExecute`,"role.create":`audit.actions.roleCreate`,"role.delete":`audit.actions.roleDelete`,"role.update":`audit.actions.roleUpdate`,"schema.activate":`audit.actions.schemaActivate`,"schema.change.request":`audit.actions.schemaChangeRequest`,"schema.create":`audit.actions.schemaCreate`,"schema.delete":`audit.actions.schemaDelete`,"schema.scope":`audit.actions.schemaScope`,"schema.settings.update":`audit.actions.schemaSettingsUpdate`,"session.revoke":`audit.actions.sessionRevoke`,"session.revoke_all":`audit.actions.sessionRevokeAll`,"setup.complete":`audit.actions.setupComplete`,"transfer.import":`audit.actions.transferImport`,"webhook.create":`audit.actions.webhookCreate`,"webhook.delete":`audit.actions.webhookDelete`,"webhook.redeliver":`audit.actions.webhookRedeliver`,"webhook.rotate_secret":`audit.actions.webhookRotateSecret`,"webhook.test":`audit.actions.webhookTest`,"webhook.update":`audit.actions.webhookUpdate`},h={admin_invitation:`audit.targets.adminInvitation`,admin_role:`audit.targets.adminRole`,admin_session:`audit.targets.adminSession`,admin_user:`audit.targets.adminUser`,api_token:`audit.targets.apiToken`,app_role:`audit.targets.appRole`,app_user:`audit.targets.appUser`,change_set:`audit.targets.changeSet`,component:`audit.targets.component`,deployment_connection:`audit.targets.deploymentConnection`,entry:`audit.targets.entry`,job:`audit.targets.job`,locale:`audit.targets.locale`,media_asset:`audit.targets.mediaAsset`,media_folder:`audit.targets.mediaFolder`,model:`audit.targets.model`,preview_token:`audit.targets.previewToken`,schemaSettings:`audit.targets.schemaSettings`,webhook:`audit.targets.webhook`},g=e=>Object.hasOwn(m,e),_=e=>Object.hasOwn(h,e),v=()=>{let{t:e}=s();return{actionLabel:t=>g(t)?e(m[t]):void 0,targetLabel:t=>_(t)?e(h[t]):void 0}},y=()=>n({queryKey:e.users,queryFn:()=>i.users.list(),meta:{silent:!0}}),b=()=>n({queryKey:e.invitations,queryFn:()=>i.invitations.list(),meta:{silent:!0}}),x=()=>{let n=t();return o({mutationKey:[`invitations`,`create`],meta:{silent:!0},mutationFn:e=>a(()=>i.invitations.create(e)),onSuccess:()=>n.invalidateQueries({queryKey:e.invitations})})},S=()=>{let n=t();return o({mutationKey:[`invitations`,`revoke`],mutationFn:e=>a(()=>i.invitations.revoke(e)),onSettled:()=>n.invalidateQueries({queryKey:e.invitations})})},C=()=>o({mutationKey:[`invitations`,`link`],mutationFn:e=>a(()=>i.invitations.link(e))}),w=()=>{let n=t();return o({mutationKey:[`users`,`update`],meta:{silent:!0},mutationFn:({id:e,input:t})=>a(()=>i.users.update(e,t)),onSettled:()=>n.invalidateQueries({queryKey:e.users})})},T=()=>{let n=t();return o({mutationKey:[`users`,`setStatus`],mutationFn:({id:e,status:t})=>a(()=>i.users.update(e,{status:t})),onSettled:()=>n.invalidateQueries({queryKey:e.users})})},E=()=>{let n=t();return o({mutationKey:[`users`,`remove`],mutationFn:e=>a(()=>i.users.remove(e)),onSettled:()=>n.invalidateQueries({queryKey:e.users})})};export{S as a,y as c,d,u as f,E as i,v as l,x as n,T as o,C as r,w as s,b as t,p as u};
|
|
2
|
+
//# sourceMappingURL=users-38jLQ7zr.js.map
|