@shapio/cms 0.5.7 → 0.5.9
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-H0hABhB2.js → AssetTile-Da76KsyX.js} +2 -2
- package/dist/admin/assets/{AssetTile-H0hABhB2.js.map → AssetTile-Da76KsyX.js.map} +1 -1
- package/dist/admin/assets/AssistError-Wr62cDj3.js +2 -0
- package/dist/admin/assets/{AssistError-1s3PuY0X.js.map → AssistError-Wr62cDj3.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-a8zXdfcF.js → BlockMenuItems-BMiEVCIT.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-a8zXdfcF.js.map → BlockMenuItems-BMiEVCIT.js.map} +1 -1
- package/dist/admin/assets/Body-BEW1sAAB.js +2 -0
- package/dist/admin/assets/Body-BEW1sAAB.js.map +1 -0
- package/dist/admin/assets/Builder-Tk_5Orrl.js +2 -0
- package/dist/admin/assets/Builder-Tk_5Orrl.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-BLbJZE9v.js → CodeEditor-Ck7ggv6w.js} +2 -2
- package/dist/admin/assets/{CodeEditor-BLbJZE9v.js.map → CodeEditor-Ck7ggv6w.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-BOtR_h1H.js → CopyButton-WMWuSVsk.js} +2 -2
- package/dist/admin/assets/{CopyButton-BOtR_h1H.js.map → CopyButton-WMWuSVsk.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-DwLW13ov.js → CursorPager-CsnzX1P8.js} +2 -2
- package/dist/admin/assets/{CursorPager-DwLW13ov.js.map → CursorPager-CsnzX1P8.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-n-a_AXKN.js → FocalPoint-CstZuVmt.js} +2 -2
- package/dist/admin/assets/{FocalPoint-n-a_AXKN.js.map → FocalPoint-CstZuVmt.js.map} +1 -1
- package/dist/admin/assets/Form-CEOW2OFF.js +2 -0
- package/dist/admin/assets/Form-CEOW2OFF.js.map +1 -0
- package/dist/admin/assets/{FormCheckboxGroup-1fYisXrr.js → FormCheckboxGroup-VjWVMiF3.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-1fYisXrr.js.map → FormCheckboxGroup-VjWVMiF3.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-B0VZyb1t.js → FormRadioGroup-BQurJa8M.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-B0VZyb1t.js.map → FormRadioGroup-BQurJa8M.js.map} +1 -1
- package/dist/admin/assets/FormSelectField-B4sjP-pj.js +2 -0
- package/dist/admin/assets/FormSelectField-B4sjP-pj.js.map +1 -0
- package/dist/admin/assets/FormSheet-V99zdfQe.js +2 -0
- package/dist/admin/assets/FormSheet-V99zdfQe.js.map +1 -0
- package/dist/admin/assets/{FormSwitchField-d8G-YCSX.js → FormSwitchField-RZgoP--n.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-d8G-YCSX.js.map → FormSwitchField-RZgoP--n.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-BSKNeTPW.js → FormTextareaField-CzXgoQzf.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-BSKNeTPW.js.map → FormTextareaField-CzXgoQzf.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-CiTDE112.js → HintedLabel-Cd9nuSqV.js} +2 -2
- package/dist/admin/assets/{HintedLabel-CiTDE112.js.map → HintedLabel-Cd9nuSqV.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-B3XcXtiN.js → InfoHint-ymRmHKMr.js} +2 -2
- package/dist/admin/assets/{InfoHint-B3XcXtiN.js.map → InfoHint-ymRmHKMr.js.map} +1 -1
- package/dist/admin/assets/{InlineConfirm-BfsNH5S_.js → InlineConfirm-A4IqkrGp.js} +2 -2
- package/dist/admin/assets/{InlineConfirm-BfsNH5S_.js.map → InlineConfirm-A4IqkrGp.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-BGwDW_Lu.js → InsertMenuItem-Bf7S7qbm.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-BGwDW_Lu.js.map → InsertMenuItem-Bf7S7qbm.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-Dc8bXsKo.js → Match-DJq8wn3e.js} +2 -2
- package/dist/admin/assets/{Match-Dc8bXsKo.js.map → Match-DJq8wn3e.js.map} +1 -1
- package/dist/admin/assets/{NoAccess-CKEKPmqD.js → NoAccess-CZufdbPI.js} +2 -2
- package/dist/admin/assets/{NoAccess-CKEKPmqD.js.map → NoAccess-CZufdbPI.js.map} +1 -1
- package/dist/admin/assets/{QueryView-KFtwko9F.js → QueryView-DO9TFWYE.js} +2 -2
- package/dist/admin/assets/{QueryView-KFtwko9F.js.map → QueryView-DO9TFWYE.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-CzfxWgHx.js → RadioTile-DmKBFkpy.js} +2 -2
- package/dist/admin/assets/{RadioTile-CzfxWgHx.js.map → RadioTile-DmKBFkpy.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-BsBoOAP-.js → RichTextField-BpxyusP4.js} +4 -4
- package/dist/admin/assets/{RichTextField-BsBoOAP-.js.map → RichTextField-BpxyusP4.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-Cn5mAU58.js → RowTitle-DVOfgxOd.js} +2 -2
- package/dist/admin/assets/{RowTitle-Cn5mAU58.js.map → RowTitle-DVOfgxOd.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-BCOJAisI.js → SecretReveal-DRCqVEFF.js} +2 -2
- package/dist/admin/assets/{SecretReveal-BCOJAisI.js.map → SecretReveal-DRCqVEFF.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-CA8tb7UH.js → SharedGlyph-nsXJPCew.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-CA8tb7UH.js.map → SharedGlyph-nsXJPCew.js.map} +1 -1
- package/dist/admin/assets/StepList-CDZPRd3-.js +2 -0
- package/dist/admin/assets/StepList-CDZPRd3-.js.map +1 -0
- package/dist/admin/assets/Structure-CL51Bvbm.js +2 -0
- package/dist/admin/assets/{Structure-B2HZ9UZu.js.map → Structure-CL51Bvbm.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-CiCaVV8U.js → SubNavLink-7Cs1LqMv.js} +2 -2
- package/dist/admin/assets/{SubNavLink-CiCaVV8U.js.map → SubNavLink-7Cs1LqMv.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-CqDLAuoa.js → SuggestAltButton-4SaZQOJu.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CqDLAuoa.js.map → SuggestAltButton-4SaZQOJu.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-mFfESZiW.js → Thumbnail-DauHAkh8.js} +2 -2
- package/dist/admin/assets/{Thumbnail-mFfESZiW.js.map → Thumbnail-DauHAkh8.js.map} +1 -1
- package/dist/admin/assets/Trans-B3UWiZaU.js +2 -0
- package/dist/admin/assets/Trans-B3UWiZaU.js.map +1 -0
- package/dist/admin/assets/{UnsavedChangesGuard-C8cDQGEA.js → UnsavedChangesGuard-DPgih7BX.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-C8cDQGEA.js.map → UnsavedChangesGuard-DPgih7BX.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-BItYDTyH.js → UserAvatar-If-zlQNY.js} +2 -2
- package/dist/admin/assets/{UserAvatar-BItYDTyH.js.map → UserAvatar-If-zlQNY.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-DNQwGXBl.js → badge-DEe9tqLS.js} +2 -2
- package/dist/admin/assets/{badge-DNQwGXBl.js.map → badge-DEe9tqLS.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-D5i2SgFV.js +2 -0
- package/dist/admin/assets/{changeSets-EMTUJT0M.js.map → changeSets-D5i2SgFV.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/{constants-miV4q1ur.js → constants-FKg_ke3y.js} +2 -2
- package/dist/admin/assets/{constants-miV4q1ur.js.map → constants-FKg_ke3y.js.map} +1 -1
- package/dist/admin/assets/content-DKT2ziPH.js +3 -0
- package/dist/admin/assets/content-DKT2ziPH.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-CQsHL657.js → contentTypes-B5taZv3y.js} +2 -2
- package/dist/admin/assets/{contentTypes-CQsHL657.js.map → contentTypes-B5taZv3y.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-CFlv7IdP.js +11 -0
- package/dist/admin/assets/develop-CFlv7IdP.js.map +1 -0
- package/dist/admin/assets/{dropdown-menu-0dyAtBEd.js → dropdown-menu-B7dJyA8h.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-0dyAtBEd.js.map → dropdown-menu-B7dJyA8h.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-1nJWBurR.js +42 -0
- package/dist/admin/assets/es2015-1nJWBurR.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-C6NmRYUN.js → field-BDCHXkZE.js} +2 -2
- package/dist/admin/assets/{field-C6NmRYUN.js.map → field-BDCHXkZE.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-Bm90K4UY.js → fileRoute-c9UMUr9b.js} +2 -2
- package/dist/admin/assets/{fileRoute-Bm90K4UY.js.map → fileRoute-c9UMUr9b.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-CHpz-yo4.js +2 -0
- package/dist/admin/assets/followPlural-CHpz-yo4.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-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/inbox-Daw10v5C.js +2 -0
- package/dist/admin/assets/inbox-Daw10v5C.js.map +1 -0
- package/dist/admin/assets/index-BRx5mel0.js +4 -0
- package/dist/admin/assets/index-BRx5mel0.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-B2HIVxXg.js → labels-B83cEX9w.js} +2 -2
- package/dist/admin/assets/{labels-B2HIVxXg.js.map → labels-B83cEX9w.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-CtbfNgc-.js → media-CgxriwNL.js} +2 -2
- package/dist/admin/assets/{media-CtbfNgc-.js.map → media-CgxriwNL.js.map} +1 -1
- package/dist/admin/assets/network-Cc1TAyal.js +2 -0
- package/dist/admin/assets/network-Cc1TAyal.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-RQUj-CyN.js +2 -0
- package/dist/admin/assets/{publishing-DdmWXRaM.js.map → publishing-RQUj-CyN.js.map} +1 -1
- package/dist/admin/assets/{radio-group-BoN9R_3K.js → radio-group-Btmx7dlD.js} +2 -2
- package/dist/admin/assets/{radio-group-BoN9R_3K.js.map → radio-group-Btmx7dlD.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-BMQEabwO.js +2 -0
- package/dist/admin/assets/{schema-D-qo7XSF.js.map → schema-BMQEabwO.js.map} +1 -1
- 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-DNjfDxmj.js → searchSchemas-fO_49fDI.js} +2 -2
- package/dist/admin/assets/{searchSchemas-DNjfDxmj.js.map → searchSchemas-fO_49fDI.js.map} +1 -1
- 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/{sections-BfxPwK0u.js → sections-SX-oiQoE.js} +2 -2
- package/dist/admin/assets/{sections-BfxPwK0u.js.map → sections-SX-oiQoE.js.map} +1 -1
- package/dist/admin/assets/{select-Bp8kO5Ko.js → select-JB2Vv7ep.js} +2 -2
- package/dist/admin/assets/{select-Bp8kO5Ko.js.map → select-JB2Vv7ep.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-CrRFxhSo.js +2 -0
- package/dist/admin/assets/{settings-TEbLvC-v.js.map → settings-CrRFxhSo.js.map} +1 -1
- package/dist/admin/assets/shapes-EMjfYsXV.js +6 -0
- package/dist/admin/assets/shapes-EMjfYsXV.js.map +1 -0
- package/dist/admin/assets/{skeleton-vXOCdnJv.js → skeleton-Dk-qdg0z.js} +2 -2
- package/dist/admin/assets/{skeleton-vXOCdnJv.js.map → skeleton-Dk-qdg0z.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-B1xClhNG.js → switch-DyCRGDs7.js} +2 -2
- package/dist/admin/assets/{switch-B1xClhNG.js.map → switch-DyCRGDs7.js.map} +1 -1
- package/dist/admin/assets/{theme-65PB8uAu.js → theme-Cv-MfOv8.js} +2 -2
- package/dist/admin/assets/{theme-65PB8uAu.js.map → theme-Cv-MfOv8.js.map} +1 -1
- 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-CS_8cJu2.js → tooltip-CCOeMqiL.js} +2 -2
- package/dist/admin/assets/{tooltip-CS_8cJu2.js.map → tooltip-CCOeMqiL.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-uXOfT985.js +2 -0
- package/dist/admin/assets/useContentSchema-uXOfT985.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-CMMJgkI2.js → useDiscardGuard-DvBI3VIz.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-CMMJgkI2.js.map → useDiscardGuard-DvBI3VIz.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-xvQ8cofO.js → useMediaPickerDialog-CehOsykG.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-xvQ8cofO.js.map → useMediaPickerDialog-CehOsykG.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-BVNTeSAU.js → useMediaUploader-DvtxYXxD.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-BVNTeSAU.js.map → useMediaUploader-DvtxYXxD.js.map} +1 -1
- package/dist/admin/assets/useModelIndex-D8Q0oM4M.js +2 -0
- package/dist/admin/assets/useModelIndex-D8Q0oM4M.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-CySN2Vwz.js +2 -0
- package/dist/admin/assets/usePlaces-CySN2Vwz.js.map +1 -0
- package/dist/admin/assets/useResolvedDefinitions-C279ueCH.js +2 -0
- package/dist/admin/assets/useResolvedDefinitions-C279ueCH.js.map +1 -0
- package/dist/admin/assets/{useResolvedScheme-CScQpr-P.js → useResolvedScheme-DEq7P4R5.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-CScQpr-P.js.map → useResolvedScheme-DEq7P4R5.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-hUh5nXnX.js → zod-vPzaNsuW.js} +2 -2
- package/dist/admin/assets/{zod-hUh5nXnX.js.map → zod-vPzaNsuW.js.map} +1 -1
- package/dist/admin/index.html +60 -58
- package/dist/cli.js +1 -1
- package/dist/{cliMain-D08HeAd_.js → cliMain-DzBXO7Oa.js} +98 -21
- package/dist/cliMain-DzBXO7Oa.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/index.d.ts +42 -5
- package/dist/index.js +1 -1
- package/dist/public-B57h4F7Y.js.map +1 -1
- package/dist/{public-COKbHR-N.d.ts → public-jttKsns_.d.ts} +47 -5
- package/dist/{worker-jspgh10V.js → worker-6ru1tYBs.js} +2790 -1063
- package/dist/worker-6ru1tYBs.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/AssistError-1s3PuY0X.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-60jO_nbS.js +0 -2
- package/dist/admin/assets/Builder-60jO_nbS.js.map +0 -1
- package/dist/admin/assets/Form-D_4fhOy0.js +0 -2
- package/dist/admin/assets/Form-D_4fhOy0.js.map +0 -1
- package/dist/admin/assets/FormSelectField-Br8bkwRF.js +0 -2
- package/dist/admin/assets/FormSelectField-Br8bkwRF.js.map +0 -1
- package/dist/admin/assets/StepList-sriwGP1e.js +0 -2
- package/dist/admin/assets/StepList-sriwGP1e.js.map +0 -1
- package/dist/admin/assets/Structure-B2HZ9UZu.js +0 -2
- package/dist/admin/assets/auth-CQO4MBUj.js +0 -2
- package/dist/admin/assets/changeSets-EMTUJT0M.js +0 -2
- package/dist/admin/assets/chevron-left-DGU3HGYG.js +0 -2
- package/dist/admin/assets/content-CgZS_S7P.js +0 -3
- package/dist/admin/assets/content-CgZS_S7P.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-9ZeAjSIw.js +0 -11
- package/dist/admin/assets/develop-9ZeAjSIw.js.map +0 -1
- package/dist/admin/assets/es2015-BJge4oQL.js +0 -42
- package/dist/admin/assets/es2015-BJge4oQL.js.map +0 -1
- package/dist/admin/assets/followPlural-DEr2kxEc.js +0 -2
- package/dist/admin/assets/followPlural-DEr2kxEc.js.map +0 -1
- package/dist/admin/assets/inbox-B8XZ8L6s.js +0 -2
- package/dist/admin/assets/inbox-B8XZ8L6s.js.map +0 -1
- package/dist/admin/assets/index-DoJsnLI1.js +0 -4
- package/dist/admin/assets/index-DoJsnLI1.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--5X46kWN.js +0 -2
- package/dist/admin/assets/network--5X46kWN.js.map +0 -1
- package/dist/admin/assets/publishing-DdmWXRaM.js +0 -2
- package/dist/admin/assets/schedules-BmB9Y73z.js +0 -2
- package/dist/admin/assets/schema-D-qo7XSF.js +0 -2
- package/dist/admin/assets/seo-CceGYTIX.js +0 -2
- package/dist/admin/assets/settings-TEbLvC-v.js +0 -2
- package/dist/admin/assets/shapes-WrYO9Spf.js +0 -6
- package/dist/admin/assets/shapes-WrYO9Spf.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/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/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-D08HeAd_.js.map +0 -1
- package/dist/worker-jspgh10V.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip-CS_8cJu2.js","names":["TooltipProvider","Tooltip","PopperPrimitive.Root","TooltipTrigger","PopperPrimitive.Anchor","PortalPrimitive","TooltipContent","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","PopperPrimitive.Arrow","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","TooltipPrimitive.Arrow","__toESM","require_jsx_runtime","Content","Root2","Anchor","Arrow","createPopperScope","useComposedRefs","useControllableState","useLayoutEffect2","Primitive","Portal$1","useId","DismissableLayer","composeEventHandlers","Presence","createSlottable","Root","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","createContextScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider$1","props","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","__scopeTooltip","skipDelayDuration","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip$1","openProp","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentIdState","setContentId","generatedContentId","openTimerRef","disableHoverableContent","delayDuration","wasOpenDelayedRef","open","setOpen","defaultOpen","open2","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","contentId","TRIGGER_NAME","TooltipTrigger$1","triggerProps","context","ref","composedRefs","forwardedRef","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","forceMount","CONTENT_NAME","TooltipContent$1","portalContext","contentProps","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","content","handleRemoveGraceArea","onPointerInTransitChange","handleCreateGraceArea","currentTarget","exitPoint","paddedExitPoints","getPaddedExitPoints","getExitSideFromRect","hoverTargetPoints","getPointsFromRect","hoverTarget","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","onClose","Slottable","ariaLabel","idProp","handleScroll","TooltipArrow","arrowProps","top","rect","point","bottom","right","left","exitSide","padding","inside","i","j","polygon","ii","jj","xi","yi","xj","yj","y","x","newPoints","points","a","b","getHullPresorted","upperHull","p","q","r","lowerHull","Provider","Root3","Trigger","Portal","Content2","Arrow2","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","className","children"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.16_@types+react-dom@19.3.0_@types+react@19.3.0__@types+reac_410793db862c85b741943c612cdfda62/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, [skipDelayDuration]),\n onClose: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n}, \"TooltipProvider\");\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const [contentIdState, setContentId] = React.useState(void 0);\n const generatedContentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: /* @__PURE__ */ __name((open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n }, \"onChange\"),\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n const contentId = contentIdState ?? generatedContentId;\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n setContentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n}, \"Tooltip\");\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipTrigger2(props, forwardedRef) {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }, \"TooltipTrigger\")\n);\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n}, \"TooltipPortal\");\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }, \"TooltipContent\")\n);\nvar TooltipContentHoverable = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function TooltipContentHoverable2(props, forwardedRef) {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, content), \"handleTriggerLeave\");\n const handleContentLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, trigger), \"handleContentLeave\");\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = /* @__PURE__ */ __name((event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n }, \"handleTrackPointerGrace\");\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n}, \"TooltipContentHoverable\"));\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function TooltipContentImpl2(props, forwardedRef) {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n id: idProp,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = /* @__PURE__ */ __name((event) => {\n if (event.target instanceof Node && event.target.contains(context.trigger)) {\n onClose();\n }\n }, \"handleScroll\");\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n const { setContentId } = context;\n useLayoutEffect(() => {\n setContentId(idProp);\n return () => {\n setContentId(void 0);\n };\n }, [idProp, setContentId]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n role: ariaLabel ? void 0 : \"tooltip\",\n id: ariaLabel ? void 0 : context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n ariaLabel ? /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel }) : null\n ]\n }\n )\n }\n );\n }, \"TooltipContentImpl\")\n);\nvar TooltipArrow = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipArrow2(props, forwardedRef) {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }, \"TooltipArrow\")\n);\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\n__name(getExitSideFromRect, \"getExitSideFromRect\");\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n__name(getPaddedExitPoints, \"getPaddedExitPoints\");\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\n__name(getPointsFromRect, \"getPointsFromRect\");\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\n__name(isPointInPolygon, \"isPointInPolygon\");\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n__name(getHull, \"getHull\");\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n__name(getHullPresorted, \"getHullPresorted\");\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tooltip-CCOeMqiL.js","names":["TooltipProvider","Tooltip","PopperPrimitive.Root","TooltipTrigger","PopperPrimitive.Anchor","PortalPrimitive","TooltipContent","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","PopperPrimitive.Arrow","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","TooltipPrimitive.Arrow","__toESM","require_jsx_runtime","Content","Root2","Anchor","Arrow","createPopperScope","useComposedRefs","useControllableState","useLayoutEffect2","Primitive","Portal$1","useId","DismissableLayer","composeEventHandlers","Presence","createSlottable","Root","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","createContextScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider$1","props","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","__scopeTooltip","skipDelayDuration","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip$1","openProp","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentIdState","setContentId","generatedContentId","openTimerRef","disableHoverableContent","delayDuration","wasOpenDelayedRef","open","setOpen","defaultOpen","open2","onOpenChange","stateAttribute","handleOpen","handleClose","handleDelayedOpen","contentId","TRIGGER_NAME","TooltipTrigger$1","triggerProps","context","ref","composedRefs","forwardedRef","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","forceMount","CONTENT_NAME","TooltipContent$1","portalContext","contentProps","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","content","handleRemoveGraceArea","onPointerInTransitChange","handleCreateGraceArea","currentTarget","exitPoint","paddedExitPoints","getPaddedExitPoints","getExitSideFromRect","hoverTargetPoints","getPointsFromRect","hoverTarget","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","onClose","Slottable","ariaLabel","idProp","handleScroll","TooltipArrow","arrowProps","top","rect","point","bottom","right","left","exitSide","padding","inside","i","j","polygon","ii","jj","xi","yi","xj","yj","y","x","newPoints","points","a","b","getHullPresorted","upperHull","p","q","r","lowerHull","Provider","Root3","Trigger","Portal","Content2","Arrow2","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","className","children"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.16_@types+react-dom@19.3.0_@types+react@19.3.0__@types+reac_410793db862c85b741943c612cdfda62/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, [skipDelayDuration]),\n onClose: React.useCallback(() => {\n if (skipDelayDuration <= 0) return;\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n}, \"TooltipProvider\");\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = /* @__PURE__ */ __name((props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const [contentIdState, setContentId] = React.useState(void 0);\n const generatedContentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: /* @__PURE__ */ __name((open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n }, \"onChange\"),\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n const contentId = contentIdState ?? generatedContentId;\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n setContentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n}, \"Tooltip\");\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipTrigger2(props, forwardedRef) {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }, \"TooltipTrigger\")\n);\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n}, \"TooltipPortal\");\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }, \"TooltipContent\")\n);\nvar TooltipContentHoverable = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function TooltipContentHoverable2(props, forwardedRef) {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, content), \"handleTriggerLeave\");\n const handleContentLeave = /* @__PURE__ */ __name((event) => handleCreateGraceArea(event, trigger), \"handleContentLeave\");\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = /* @__PURE__ */ __name((event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n }, \"handleTrackPointerGrace\");\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n}, \"TooltipContentHoverable\"));\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function TooltipContentImpl2(props, forwardedRef) {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n id: idProp,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = /* @__PURE__ */ __name((event) => {\n if (event.target instanceof Node && event.target.contains(context.trigger)) {\n onClose();\n }\n }, \"handleScroll\");\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n const { setContentId } = context;\n useLayoutEffect(() => {\n setContentId(idProp);\n return () => {\n setContentId(void 0);\n };\n }, [idProp, setContentId]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n role: ariaLabel ? void 0 : \"tooltip\",\n id: ariaLabel ? void 0 : context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n ariaLabel ? /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel }) : null\n ]\n }\n )\n }\n );\n }, \"TooltipContentImpl\")\n);\nvar TooltipArrow = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function TooltipArrow2(props, forwardedRef) {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }, \"TooltipArrow\")\n);\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\n__name(getExitSideFromRect, \"getExitSideFromRect\");\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n__name(getPaddedExitPoints, \"getPaddedExitPoints\");\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\n__name(getPointsFromRect, \"getPointsFromRect\");\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\n__name(isPointInPolygon, \"isPointInPolygon\");\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n__name(getHull, \"getHull\");\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n__name(getHullPresorted, \"getHullPresorted\");\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./createLucideIcon-
|
|
2
|
-
//# sourceMappingURL=undo-2-
|
|
1
|
+
import{t as e}from"./createLucideIcon-BOsNKleB.js";var t={name:`undo-2`,size:24,node:[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]};t.node;var n=e(t);export{n as t};
|
|
2
|
+
//# sourceMappingURL=undo-2-DpwwRQTf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undo-2-
|
|
1
|
+
{"version":3,"file":"undo-2-DpwwRQTf.js","names":["createLucideIcon","__iconData","Undo2"],"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/undo-2.mjs"],"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: \"undo-2\",\n size: 24,\n node: [\n [\"path\", { d: \"M9 14 4 9l5-5\", key: \"102s5s\" }],\n [\"path\", { d: \"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\", key: \"f3b9sd\" }]\n ]\n};\n__iconData.node;\nconst Undo2 = createLucideIcon(__iconData);\n\nexport { __iconData, Undo2 as default };\n//# sourceMappingURL=undo-2.mjs.map\n"],"ignoreList":[0],"mappings":"mDASA,IAAMC,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAS,CAAC,EAC9C,CAAC,OAAQ,CAAE,EAAG,2DAA4D,IAAK,QAAS,CAAC,CAC3F,CACF,EACAA,EAAW,KACX,IAAMC,EAAQF,EAAiBC,CAAU"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{it as n}from"./src-CMor9izq.js";import{l as r}from"./schema-BMQEabwO.js";import{n as i}from"./useResolvedDefinitions-C279ueCH.js";var a=e(t(),1),o=()=>{let{resolved:e,error:t}=i(),o=r(`component`);return{schema:(0,a.useMemo)(()=>{if(!e||!o.data)return;let t=new Map;for(let{definition:e}of o.data)n(e)&&t.set(e.id,e);let r=[...e.byId.values()].sort((e,t)=>e.label.localeCompare(t.label));return{models:e.byId,components:t,sortedModels:r,index:e.index}},[e,o.data]),error:t??o.error}},s=(e,t)=>e.sortedModels.find(e=>e.apiKey===t);export{o as n,s as t};
|
|
2
|
+
//# sourceMappingURL=useContentSchema-uXOfT985.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useContentSchema-uXOfT985.js","names":["useMemo","__toESM","isComponentDefinition","useDefinitions","useResolvedDefinitions","import_react","require_react","useContentSchema","modelsError","componentList","resolved","components","definition","sortedModels","a","b","findModelByKey","schema","model","modelKey"],"sources":["../../src/features/Content/hooks/useContentSchema.ts"],"sourcesContent":["import {\n isComponentDefinition,\n type ComponentDefinition,\n type DefinitionIndex,\n type ResolvedModelDefinition,\n} from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useDefinitions } from '@/api/schema';\nimport { useResolvedDefinitions } from '@/hooks/useResolvedDefinitions';\n\nexport type ContentSchema = {\n /** Collections and singletons by stable ID, with their effective fields (inherited ones first). */\n models: ReadonlyMap<string, ResolvedModelDefinition>;\n components: ReadonlyMap<string, ComponentDefinition>;\n /** Collections and singletons, in label order (for navigation). */\n sortedModels: readonly ResolvedModelDefinition[];\n /** Families: a type's ancestors, children and descendants (plan polymorphic-types). */\n index: DefinitionIndex;\n};\n\n/**\n * The active schema as the content screens need it. Models are data (CONTRIBUTING.md rule 2): routes carry a\n * model's API key and resolve it here at render time, so a model created a moment ago works at once. A type\n * that extends another carries its effective fields, so every content screen sees inherited fields.\n */\nexport const useContentSchema = (): { schema: ContentSchema | undefined; error: unknown } => {\n const { resolved, error: modelsError } = useResolvedDefinitions();\n const componentList = useDefinitions('component');\n const schema = useMemo(() => {\n if (!resolved || !componentList.data) {\n return undefined;\n }\n const components = new Map<string, ComponentDefinition>();\n for (const { definition } of componentList.data) {\n if (isComponentDefinition(definition)) {\n components.set(definition.id, definition);\n }\n }\n const sortedModels = [...resolved.byId.values()].sort((a, b) => a.label.localeCompare(b.label));\n return { models: resolved.byId, components, sortedModels, index: resolved.index };\n }, [resolved, componentList.data]);\n return { schema, error: modelsError ?? componentList.error };\n};\n\nexport const findModelByKey = (\n schema: ContentSchema,\n modelKey: string,\n): ResolvedModelDefinition | undefined => schema.sortedModels.find((model) => model.apiKey === modelKey);\n"],"mappings":"8OAyBaO,MAAgF,CAC3F,GAAM,CAAE,WAAU,MAAOC,GAAgBJ,EAAuB,EAC1DK,EAAgBN,EAAe,WAAW,EAchD,MAAO,CAAE,QAAA,EAbMH,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACU,GAAY,CAACD,EAAc,KAC9B,OAEF,IAAME,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EAAc,KACrCP,EAAsBU,CAAU,GAClCD,EAAW,IAAIC,EAAW,GAAIA,CAAU,EAG5C,IAAMC,EAAe,CAAC,GAAGH,EAAS,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,EAAG,IAAMI,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAC9F,MAAO,CAAE,OAAQL,EAAS,KAAM,aAAY,eAAc,MAAOA,EAAS,KAAM,CAClF,EAAG,CAACA,EAAUD,EAAc,IAAI,CACvB,EAAQ,MAAOD,GAAeC,EAAc,KAAM,CAC7D,EAEaO,GACX,EACA,IACwCC,EAAO,aAAa,KAAM,GAAUC,EAAM,SAAWC,CAAQ"}
|
|
@@ -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,Jt as i,gn as a,gt as o,mt as s,qt as c}from"./src-CMor9izq.js";import{t as l}from"./createLucideIcon-BOsNKleB.js";import{a as u,n as d,t as f}from"./publishing-B7zv1e7j.js";var p={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};p.node;var m=l(p),h=e(t(),1),g=(e,t,n,r)=>{(0,h.useEffect)(()=>{e&&(t(n),r())},[e,t,n,r])},_={silent:!0},v=e=>e?u:!1,y=()=>i({queryKey:n.publishing.deployments.connections,queryFn:()=>o.deployments.connections.list(),refetchInterval:e=>v(e.state.data?.some(e=>e.latestRun?d.has(e.latestRun.status):!1)??!1),meta:_}),b=e=>i({queryKey:n.publishing.deployments.connection(e),queryFn:()=>o.deployments.connections.get(e),refetchInterval:e=>v(e.state.data?.latestRun?d.has(e.state.data.latestRun.status):!1),meta:_}),x=e=>i({queryKey:n.publishing.deployments.runs(e),queryFn:()=>o.deployments.runs.list(e),placeholderData:a,refetchInterval:e=>v(e.state.data?.items.some(e=>d.has(e.status))??!1),meta:_}),S=e=>i({queryKey:n.publishing.deployments.run(e),queryFn:()=>o.deployments.runs.get(e),refetchInterval:e=>v(e.state.data?d.has(e.state.data.status):!1),meta:_}),C=()=>{let e=r();return()=>e.invalidateQueries({queryKey:n.publishing.deployments.all})},w=()=>{let e=C();return c({mutationKey:[`deployments`,`create`],meta:_,mutationFn:e=>s(()=>o.deployments.connections.create(e)),onSuccess:e})},T=()=>{let e=r(),t=C();return c({mutationKey:[`deployments`,`update`],meta:_,mutationFn:({id:e,input:t})=>s(()=>o.deployments.connections.update(e,t)),onSuccess:({generatedSecrets:r,...i})=>(e.setQueryData(n.publishing.deployments.connection(i.id),i),t())})},E=()=>{let e=r(),t=C();return c({mutationKey:[`deployments`,`delete`],mutationFn:e=>s(()=>o.deployments.connections.remove(e)),onSuccess:(r,i)=>(e.removeQueries({queryKey:n.publishing.deployments.connection(i)}),t())})},D=()=>c({mutationKey:[`deployments`,`test`],mutationFn:e=>s(()=>o.deployments.connections.test(e))}),O=()=>{let e=C();return c({mutationKey:[`deployments`,`trigger`],mutationFn:e=>s(()=>o.deployments.connections.trigger(e)),onSuccess:e})},k=()=>{let e=C();return c({mutationKey:[`deployments`,`retry`],mutationFn:e=>s(()=>o.deployments.runs.retry(e)),onSuccess:e})},A={publish:`publishing.actions.publish`,unpublish:`publishing.actions.unpublish`},j={generic_webhook:`publishing.deployments.providers.generic_webhook`,cloudflare_pages:`publishing.deployments.providers.cloudflare_pages`,vercel:`publishing.deployments.providers.vercel`,netlify:`publishing.deployments.providers.netlify`,github:`publishing.deployments.providers.github`},M={publish:`publishing.deployments.triggers.publish`,change_set:`publishing.deployments.triggers.changeSet`,schema:`publishing.deployments.triggers.schema`,manual:`publishing.deployments.triggers.manual`},N={publish:`publishing.deployments.runTriggers.publish`,change_set:`publishing.deployments.runTriggers.changeSet`,schema:`publishing.deployments.runTriggers.schema`,manual:`publishing.deployments.runTriggers.manual`,retry:`publishing.deployments.runTriggers.retry`},P={shapio:`publishing.deployments.sources.shapio`,callback:`publishing.deployments.sources.callback`,provider:`publishing.deployments.sources.provider`},F={silent:!0},I=()=>i({queryKey:n.publishing.webhooks.list,queryFn:()=>o.webhooks.list(),meta:F}),L=()=>i({queryKey:n.publishing.webhooks.events,queryFn:()=>o.webhooks.events(),staleTime:1/0,meta:F}),R=e=>i({queryKey:n.publishing.webhooks.webhook(e),queryFn:()=>o.webhooks.get(e),meta:F}),z=(e,t)=>i({queryKey:n.publishing.webhooks.deliveries(e,t),queryFn:()=>o.webhooks.deliveries(e,{cursor:t,limit:25}),placeholderData:a,refetchInterval:e=>e.state.data?.items.some(e=>f.has(e.status))?u:!1,meta:F}),B=()=>{let e=r();return()=>e.invalidateQueries({queryKey:n.publishing.webhooks.all})},V=()=>{let e=B();return c({mutationKey:[`webhooks`,`create`],meta:F,mutationFn:e=>s(()=>o.webhooks.create(e)),onSuccess:e})},H=()=>{let e=r(),t=B();return c({mutationKey:[`webhooks`,`update`],meta:F,mutationFn:({id:e,input:t})=>s(()=>o.webhooks.update(e,t)),onSuccess:r=>(e.setQueryData(n.publishing.webhooks.webhook(r.id),r),t())})},U=()=>{let e=B();return c({mutationKey:[`webhooks`,`delete`],mutationFn:e=>s(()=>o.webhooks.remove(e)),onSuccess:e})},W=()=>{let e=B();return c({mutationKey:[`webhooks`,`rotateSecret`],mutationFn:e=>s(()=>o.webhooks.rotateSecret(e)),onSuccess:e})},G=()=>{let e=B();return c({mutationKey:[`webhooks`,`test`],mutationFn:e=>s(()=>o.webhooks.test(e)),onSuccess:e})},K=()=>{let e=B();return c({mutationKey:[`webhooks`,`redeliver`],mutationFn:({id:e,deliveryId:t})=>s(()=>o.webhooks.redeliver(e,t)),onSuccess:e})},q=(e,t)=>{let[n,r]=(0,h.useState)([]);return{pagerProps:i=>({onFirst:e===void 0?void 0:()=>{r([]),t(void 0)},onPrevious:n.length===0?void 0:()=>{t(n.at(-1)),r(e=>e.slice(0,-1))},onNext:i?()=>{r(t=>[...t,e]),t(i)}:void 0}),resetPager:()=>r([])}};export{k as C,g as D,T as E,m as O,x as S,O as T,w as _,W as a,y as b,R as c,I as d,j as f,M as g,P as h,K as i,z as l,N as m,V as n,G as o,A as p,U as r,H as s,q as t,L as u,E as v,D as w,S as x,b as y};
|
|
2
|
+
//# sourceMappingURL=useCursorPager-BHYqHb3M.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCursorPager-0zHjlm-7.js","names":["silent","useState","__toESM","useQuery","queryKeys","useMutation","useQueryClient","withCsrf","keepPreviousData","adminApi","createLucideIcon","PUBLISHING_POLL_INTERVAL_MS","ACTIVE_RUN_STATUSES","ACTIVE_DELIVERY_STATUSES","__iconData","Rocket","import_react","require_react","useResetOnOpen","open","reset","values","resetMutation","silent$1","pollWhileActive","active","useDeploymentConnections","query","connection","useDeploymentConnection","id","useDeploymentRuns","state","run","useDeploymentRun","useInvalidateDeployments","queryClient","useCreateDeploymentConnection","invalidate","input","useUpdateDeploymentConnection","_shownOnce","useDeleteDeploymentConnection","useTestDeploymentConnection","useTriggerDeployment","useRetryDeploymentRun","PUBLICATION_ACTION_LABELS","PROVIDER_LABELS","TRIGGER_POLICY_LABELS","RUN_TRIGGER_LABELS","TIMELINE_SOURCE_LABELS","silent","useWebhooks","useWebhookEvents","useWebhook","useWebhookDeliveries","cursor","delivery","useInvalidateWebhooks","useCreateWebhook","useUpdateWebhook","webhook","useDeleteWebhook","useRotateWebhookSecret","useTestWebhook","useRedeliverWebhook","deliveryId","useCursorPager","previousCursors","setPreviousCursors","setCursor","cursors","nextCursor"],"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/rocket.mjs","../../src/features/Publishing/hooks/useResetOnOpen.ts","../../src/api/deployments.ts","../../src/features/Publishing/constants.ts","../../src/api/webhooks.ts","../../src/features/Publishing/hooks/useCursorPager.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: \"rocket\",\n size: 24,\n node: [\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }],\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\",\n key: \"u4xsad\"\n }\n ],\n [\n \"path\",\n {\n d: \"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\",\n key: \"676m9\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\", key: \"92ym6u\" }]\n ]\n};\n__iconData.node;\nconst Rocket = createLucideIcon(__iconData);\n\nexport { __iconData, Rocket as default };\n//# sourceMappingURL=rocket.mjs.map\n","import { useEffect } from 'react';\nimport type { FieldValues, UseFormReset } from 'react-hook-form';\n\n/**\n * A sheet or popover form starts clean every time it opens: default values, and no error left over from the last\n * attempt. `values` must be stable (a module constant or memoized).\n */\nexport const useResetOnOpen = <TValues extends FieldValues>(\n open: boolean,\n reset: UseFormReset<TValues>,\n values: TValues,\n resetMutation: () => void,\n) => {\n useEffect(() => {\n if (open) {\n reset(values);\n resetMutation();\n }\n }, [open, reset, values, resetMutation]);\n};\n","import type {\n CreateDeploymentConnectionInput,\n DeploymentConnectionUpdated,\n DeploymentRunQuery,\n UpdateDeploymentConnectionInput,\n} from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ACTIVE_RUN_STATUSES, PUBLISHING_POLL_INTERVAL_MS } from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\n/** Polls while the latest runs are still in progress, so statuses move on screen without a reload. */\nconst pollWhileActive = (active: boolean) => (active ? PUBLISHING_POLL_INTERVAL_MS : false);\n\nexport const useDeploymentConnections = () =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connections,\n queryFn: () => adminApi.deployments.connections.list(),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.some((connection) =>\n connection.latestRun ? ACTIVE_RUN_STATUSES.has(connection.latestRun.status) : false,\n ) ?? false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentConnection = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connection(id),\n queryFn: () => adminApi.deployments.connections.get(id),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.latestRun ? ACTIVE_RUN_STATUSES.has(query.state.data.latestRun.status) : false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentRuns = (query: DeploymentRunQuery) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.runs(query),\n queryFn: () => adminApi.deployments.runs.list(query),\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n pollWhileActive(state.state.data?.items.some((run) => ACTIVE_RUN_STATUSES.has(run.status)) ?? false),\n meta: silent,\n });\n\n/** One run, polled until it reaches a final state (deployed, failed or unknown). */\nexport const useDeploymentRun = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.run(id),\n queryFn: () => adminApi.deployments.runs.get(id),\n refetchInterval: (query) =>\n pollWhileActive(query.state.data ? ACTIVE_RUN_STATUSES.has(query.state.data.status) : false),\n meta: silent,\n });\n\nconst useInvalidateDeployments = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.deployments.all });\n};\n\nexport const useCreateDeploymentConnection = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'create'],\n meta: silent,\n mutationFn: (input: CreateDeploymentConnectionInput) =>\n withCsrf(() => adminApi.deployments.connections.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/**\n * 409 when `expectedVersion` is stale: the caller reloads and tells the user. A secret Shapio generated\n * (`generatedSecrets`) is returned to the caller to show once and never kept in the query cache.\n */\nexport const useUpdateDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateDeploymentConnectionInput }) =>\n withCsrf(() => adminApi.deployments.connections.update(id, input)),\n onSuccess: ({ generatedSecrets: _shownOnce, ...connection }: DeploymentConnectionUpdated) => {\n queryClient.setQueryData(queryKeys.publishing.deployments.connection(connection.id), connection);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.remove(id)),\n onSuccess: (_result, id) => {\n queryClient.removeQueries({ queryKey: queryKeys.publishing.deployments.connection(id) });\n return invalidate();\n },\n });\n};\n\n/** Runs the provider's checks (credentials, reachability); the result is shown, not cached. */\nexport const useTestDeploymentConnection = () =>\n useMutation({\n mutationKey: ['deployments', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.test(id)),\n });\n\nexport const useTriggerDeployment = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'trigger'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.trigger(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRetryDeploymentRun = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'retry'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.runs.retry(id)),\n onSuccess: invalidate,\n });\n};\n","import type { DeploymentProvider, DeploymentTriggerPolicy, PublicationAction } from '@shapio/client';\n\nexport const PUBLICATION_ACTION_LABELS = {\n publish: 'publishing.actions.publish',\n unpublish: 'publishing.actions.unpublish',\n} as const satisfies Record<PublicationAction, string>;\n\nexport const PROVIDER_LABELS = {\n generic_webhook: 'publishing.deployments.providers.generic_webhook',\n cloudflare_pages: 'publishing.deployments.providers.cloudflare_pages',\n vercel: 'publishing.deployments.providers.vercel',\n netlify: 'publishing.deployments.providers.netlify',\n github: 'publishing.deployments.providers.github',\n} as const satisfies Record<DeploymentProvider, string>;\n\nexport const TRIGGER_POLICY_LABELS = {\n publish: 'publishing.deployments.triggers.publish',\n change_set: 'publishing.deployments.triggers.changeSet',\n schema: 'publishing.deployments.triggers.schema',\n manual: 'publishing.deployments.triggers.manual',\n} as const satisfies Record<DeploymentTriggerPolicy, string>;\n\nexport const RUN_TRIGGER_LABELS = {\n publish: 'publishing.deployments.runTriggers.publish',\n change_set: 'publishing.deployments.runTriggers.changeSet',\n schema: 'publishing.deployments.runTriggers.schema',\n manual: 'publishing.deployments.runTriggers.manual',\n retry: 'publishing.deployments.runTriggers.retry',\n} as const;\n\nexport const TIMELINE_SOURCE_LABELS = {\n shapio: 'publishing.deployments.sources.shapio',\n callback: 'publishing.deployments.sources.callback',\n provider: 'publishing.deployments.sources.provider',\n} as const;\n\n/** Longest error text shown in a table cell; the full text is in the details. */\nexport const ERROR_PREVIEW_LENGTH = 120;\n","import type { CreateWebhookInput, UpdateWebhookInput, Webhook } from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n ACTIVE_DELIVERY_STATUSES,\n PUBLISHING_PAGE_SIZE,\n PUBLISHING_POLL_INTERVAL_MS,\n} from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const useWebhooks = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.list,\n queryFn: () => adminApi.webhooks.list(),\n meta: silent,\n });\n\n/** The event types a webhook can subscribe to (a fixed catalogue: cached for the session). */\nexport const useWebhookEvents = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.events,\n queryFn: () => adminApi.webhooks.events(),\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useWebhook = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.webhook(id),\n queryFn: () => adminApi.webhooks.get(id),\n meta: silent,\n });\n\n/** One page of the delivery log, polled while a delivery on it still has attempts left. */\nexport const useWebhookDeliveries = (id: string, cursor: string | undefined) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.deliveries(id, cursor),\n queryFn: () => adminApi.webhooks.deliveries(id, { cursor, limit: PUBLISHING_PAGE_SIZE }),\n placeholderData: keepPreviousData,\n refetchInterval: (query) =>\n query.state.data?.items.some((delivery) => ACTIVE_DELIVERY_STATUSES.has(delivery.status))\n ? PUBLISHING_POLL_INTERVAL_MS\n : false,\n meta: silent,\n });\n\nconst useInvalidateWebhooks = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.webhooks.all });\n};\n\nexport const useCreateWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'create'],\n meta: silent,\n mutationFn: (input: CreateWebhookInput) => withCsrf(() => adminApi.webhooks.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/** 409 when `expectedVersion` is stale: the caller reloads and tells the user. */\nexport const useUpdateWebhook = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateWebhookInput }) =>\n withCsrf(() => adminApi.webhooks.update(id, input)),\n onSuccess: (webhook: Webhook) => {\n queryClient.setQueryData(queryKeys.publishing.webhooks.webhook(webhook.id), webhook);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.remove(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRotateWebhookSecret = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'rotateSecret'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.rotateSecret(id)),\n onSuccess: invalidate,\n });\n};\n\n/** Queues a `webhook.test` delivery; the delivery log shows its outcome. */\nexport const useTestWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.test(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRedeliverWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'redeliver'],\n mutationFn: ({ id, deliveryId }: { id: string; deliveryId: string }) =>\n withCsrf(() => adminApi.webhooks.redeliver(id, deliveryId)),\n onSuccess: invalidate,\n });\n};\n","import { useState } from 'react';\n\ntype CursorPagerProps = {\n onFirst: (() => void) | undefined;\n onPrevious: (() => void) | undefined;\n onNext: (() => void) | undefined;\n};\n\n/**\n * First / Previous / Next for a forward-only cursor list (newest first). The current cursor lives wherever\n * the caller keeps it (usually the URL); the cursors of earlier pages are remembered here.\n */\nexport const useCursorPager = (\n cursor: string | undefined,\n setCursor: (cursor: string | undefined) => void,\n) => {\n const [previousCursors, setPreviousCursors] = useState<(string | undefined)[]>([]);\n const pagerProps = (nextCursor: string | null): CursorPagerProps => ({\n onFirst:\n cursor === undefined\n ? undefined\n : () => {\n setPreviousCursors([]);\n setCursor(undefined);\n },\n onPrevious:\n previousCursors.length === 0\n ? undefined\n : () => {\n setCursor(previousCursors.at(-1));\n setPreviousCursors((cursors) => cursors.slice(0, -1));\n },\n onNext: nextCursor\n ? () => {\n setPreviousCursors((cursors) => [...cursors, cursor]);\n setCursor(nextCursor);\n }\n : undefined,\n });\n return { pagerProps, resetPager: () => setPreviousCursors([]) };\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCursorPager-BHYqHb3M.js","names":["silent","useState","__toESM","queryKeys","useQueryClient","useQuery","keepPreviousData","adminApi","withCsrf","useMutation","createLucideIcon","PUBLISHING_POLL_INTERVAL_MS","ACTIVE_RUN_STATUSES","ACTIVE_DELIVERY_STATUSES","__iconData","Rocket","import_react","require_react","useResetOnOpen","open","reset","values","resetMutation","silent$1","pollWhileActive","active","useDeploymentConnections","query","connection","useDeploymentConnection","id","useDeploymentRuns","state","run","useDeploymentRun","useInvalidateDeployments","queryClient","useCreateDeploymentConnection","invalidate","input","useUpdateDeploymentConnection","_shownOnce","useDeleteDeploymentConnection","useTestDeploymentConnection","useTriggerDeployment","useRetryDeploymentRun","PUBLICATION_ACTION_LABELS","PROVIDER_LABELS","TRIGGER_POLICY_LABELS","RUN_TRIGGER_LABELS","TIMELINE_SOURCE_LABELS","silent","useWebhooks","useWebhookEvents","useWebhook","useWebhookDeliveries","cursor","delivery","useInvalidateWebhooks","useCreateWebhook","useUpdateWebhook","webhook","useDeleteWebhook","useRotateWebhookSecret","useTestWebhook","useRedeliverWebhook","deliveryId","useCursorPager","previousCursors","setPreviousCursors","setCursor","cursors","nextCursor"],"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/rocket.mjs","../../src/features/Publishing/hooks/useResetOnOpen.ts","../../src/api/deployments.ts","../../src/features/Publishing/constants.ts","../../src/api/webhooks.ts","../../src/features/Publishing/hooks/useCursorPager.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: \"rocket\",\n size: 24,\n node: [\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }],\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\",\n key: \"u4xsad\"\n }\n ],\n [\n \"path\",\n {\n d: \"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\",\n key: \"676m9\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\", key: \"92ym6u\" }]\n ]\n};\n__iconData.node;\nconst Rocket = createLucideIcon(__iconData);\n\nexport { __iconData, Rocket as default };\n//# sourceMappingURL=rocket.mjs.map\n","import { useEffect } from 'react';\nimport type { FieldValues, UseFormReset } from 'react-hook-form';\n\n/**\n * A sheet or popover form starts clean every time it opens: default values, and no error left over from the last\n * attempt. `values` must be stable (a module constant or memoized).\n */\nexport const useResetOnOpen = <TValues extends FieldValues>(\n open: boolean,\n reset: UseFormReset<TValues>,\n values: TValues,\n resetMutation: () => void,\n) => {\n useEffect(() => {\n if (open) {\n reset(values);\n resetMutation();\n }\n }, [open, reset, values, resetMutation]);\n};\n","import type {\n CreateDeploymentConnectionInput,\n DeploymentConnectionUpdated,\n DeploymentRunQuery,\n UpdateDeploymentConnectionInput,\n} from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ACTIVE_RUN_STATUSES, PUBLISHING_POLL_INTERVAL_MS } from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\n/** Polls while the latest runs are still in progress, so statuses move on screen without a reload. */\nconst pollWhileActive = (active: boolean) => (active ? PUBLISHING_POLL_INTERVAL_MS : false);\n\nexport const useDeploymentConnections = () =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connections,\n queryFn: () => adminApi.deployments.connections.list(),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.some((connection) =>\n connection.latestRun ? ACTIVE_RUN_STATUSES.has(connection.latestRun.status) : false,\n ) ?? false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentConnection = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connection(id),\n queryFn: () => adminApi.deployments.connections.get(id),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.latestRun ? ACTIVE_RUN_STATUSES.has(query.state.data.latestRun.status) : false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentRuns = (query: DeploymentRunQuery) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.runs(query),\n queryFn: () => adminApi.deployments.runs.list(query),\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n pollWhileActive(state.state.data?.items.some((run) => ACTIVE_RUN_STATUSES.has(run.status)) ?? false),\n meta: silent,\n });\n\n/** One run, polled until it reaches a final state (deployed, failed or unknown). */\nexport const useDeploymentRun = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.run(id),\n queryFn: () => adminApi.deployments.runs.get(id),\n refetchInterval: (query) =>\n pollWhileActive(query.state.data ? ACTIVE_RUN_STATUSES.has(query.state.data.status) : false),\n meta: silent,\n });\n\nconst useInvalidateDeployments = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.deployments.all });\n};\n\nexport const useCreateDeploymentConnection = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'create'],\n meta: silent,\n mutationFn: (input: CreateDeploymentConnectionInput) =>\n withCsrf(() => adminApi.deployments.connections.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/**\n * 409 when `expectedVersion` is stale: the caller reloads and tells the user. A secret Shapio generated\n * (`generatedSecrets`) is returned to the caller to show once and never kept in the query cache.\n */\nexport const useUpdateDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateDeploymentConnectionInput }) =>\n withCsrf(() => adminApi.deployments.connections.update(id, input)),\n onSuccess: ({ generatedSecrets: _shownOnce, ...connection }: DeploymentConnectionUpdated) => {\n queryClient.setQueryData(queryKeys.publishing.deployments.connection(connection.id), connection);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.remove(id)),\n onSuccess: (_result, id) => {\n queryClient.removeQueries({ queryKey: queryKeys.publishing.deployments.connection(id) });\n return invalidate();\n },\n });\n};\n\n/** Runs the provider's checks (credentials, reachability); the result is shown, not cached. */\nexport const useTestDeploymentConnection = () =>\n useMutation({\n mutationKey: ['deployments', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.test(id)),\n });\n\nexport const useTriggerDeployment = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'trigger'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.trigger(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRetryDeploymentRun = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'retry'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.runs.retry(id)),\n onSuccess: invalidate,\n });\n};\n","import type { DeploymentProvider, DeploymentTriggerPolicy, PublicationAction } from '@shapio/client';\n\nexport const PUBLICATION_ACTION_LABELS = {\n publish: 'publishing.actions.publish',\n unpublish: 'publishing.actions.unpublish',\n} as const satisfies Record<PublicationAction, string>;\n\nexport const PROVIDER_LABELS = {\n generic_webhook: 'publishing.deployments.providers.generic_webhook',\n cloudflare_pages: 'publishing.deployments.providers.cloudflare_pages',\n vercel: 'publishing.deployments.providers.vercel',\n netlify: 'publishing.deployments.providers.netlify',\n github: 'publishing.deployments.providers.github',\n} as const satisfies Record<DeploymentProvider, string>;\n\nexport const TRIGGER_POLICY_LABELS = {\n publish: 'publishing.deployments.triggers.publish',\n change_set: 'publishing.deployments.triggers.changeSet',\n schema: 'publishing.deployments.triggers.schema',\n manual: 'publishing.deployments.triggers.manual',\n} as const satisfies Record<DeploymentTriggerPolicy, string>;\n\nexport const RUN_TRIGGER_LABELS = {\n publish: 'publishing.deployments.runTriggers.publish',\n change_set: 'publishing.deployments.runTriggers.changeSet',\n schema: 'publishing.deployments.runTriggers.schema',\n manual: 'publishing.deployments.runTriggers.manual',\n retry: 'publishing.deployments.runTriggers.retry',\n} as const;\n\nexport const TIMELINE_SOURCE_LABELS = {\n shapio: 'publishing.deployments.sources.shapio',\n callback: 'publishing.deployments.sources.callback',\n provider: 'publishing.deployments.sources.provider',\n} as const;\n\n/** Longest error text shown in a table cell; the full text is in the details. */\nexport const ERROR_PREVIEW_LENGTH = 120;\n","import type { CreateWebhookInput, UpdateWebhookInput, Webhook } from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n ACTIVE_DELIVERY_STATUSES,\n PUBLISHING_PAGE_SIZE,\n PUBLISHING_POLL_INTERVAL_MS,\n} from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const useWebhooks = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.list,\n queryFn: () => adminApi.webhooks.list(),\n meta: silent,\n });\n\n/** The event types a webhook can subscribe to (a fixed catalogue: cached for the session). */\nexport const useWebhookEvents = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.events,\n queryFn: () => adminApi.webhooks.events(),\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useWebhook = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.webhook(id),\n queryFn: () => adminApi.webhooks.get(id),\n meta: silent,\n });\n\n/** One page of the delivery log, polled while a delivery on it still has attempts left. */\nexport const useWebhookDeliveries = (id: string, cursor: string | undefined) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.deliveries(id, cursor),\n queryFn: () => adminApi.webhooks.deliveries(id, { cursor, limit: PUBLISHING_PAGE_SIZE }),\n placeholderData: keepPreviousData,\n refetchInterval: (query) =>\n query.state.data?.items.some((delivery) => ACTIVE_DELIVERY_STATUSES.has(delivery.status))\n ? PUBLISHING_POLL_INTERVAL_MS\n : false,\n meta: silent,\n });\n\nconst useInvalidateWebhooks = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.webhooks.all });\n};\n\nexport const useCreateWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'create'],\n meta: silent,\n mutationFn: (input: CreateWebhookInput) => withCsrf(() => adminApi.webhooks.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/** 409 when `expectedVersion` is stale: the caller reloads and tells the user. */\nexport const useUpdateWebhook = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateWebhookInput }) =>\n withCsrf(() => adminApi.webhooks.update(id, input)),\n onSuccess: (webhook: Webhook) => {\n queryClient.setQueryData(queryKeys.publishing.webhooks.webhook(webhook.id), webhook);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.remove(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRotateWebhookSecret = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'rotateSecret'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.rotateSecret(id)),\n onSuccess: invalidate,\n });\n};\n\n/** Queues a `webhook.test` delivery; the delivery log shows its outcome. */\nexport const useTestWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.test(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRedeliverWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'redeliver'],\n mutationFn: ({ id, deliveryId }: { id: string; deliveryId: string }) =>\n withCsrf(() => adminApi.webhooks.redeliver(id, deliveryId)),\n onSuccess: invalidate,\n });\n};\n","import { useState } from 'react';\n\ntype CursorPagerProps = {\n onFirst: (() => void) | undefined;\n onPrevious: (() => void) | undefined;\n onNext: (() => void) | undefined;\n};\n\n/**\n * First / Previous / Next for a forward-only cursor list (newest first). The current cursor lives wherever\n * the caller keeps it (usually the URL); the cursors of earlier pages are remembered here.\n */\nexport const useCursorPager = (\n cursor: string | undefined,\n setCursor: (cursor: string | undefined) => void,\n) => {\n const [previousCursors, setPreviousCursors] = useState<(string | undefined)[]>([]);\n const pagerProps = (nextCursor: string | null): CursorPagerProps => ({\n onFirst:\n cursor === undefined\n ? undefined\n : () => {\n setPreviousCursors([]);\n setCursor(undefined);\n },\n onPrevious:\n previousCursors.length === 0\n ? undefined\n : () => {\n setCursor(previousCursors.at(-1));\n setPreviousCursors((cursors) => cursors.slice(0, -1));\n },\n onNext: nextCursor\n ? () => {\n setPreviousCursors((cursors) => [...cursors, cursor]);\n setCursor(nextCursor);\n }\n : undefined,\n });\n return { pagerProps, resetPager: () => setPreviousCursors([]) };\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{n as r}from"./createLucideIcon-
|
|
2
|
-
//# sourceMappingURL=useDiscardGuard-
|
|
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{n as r}from"./createLucideIcon-BOsNKleB.js";import{n as i,r as a}from"./InlineConfirm-A4IqkrGp.js";var o=e(t(),1),s=e(n(),1),c=({dirty:e,pending:t=!1,onOpenChange:n,registersEdits:c=!0})=>{let{t:l}=r(),[u,d]=(0,o.useState)(!1);return i(c&&e),{requestOpenChange:r=>{if(!r&&e&&!t){d(!0);return}n(r)},discardPrompt:(0,s.jsx)(a,{open:u,onOpenChange:d,title:l(`unsaved.title`),description:l(`unsaved.description`),cancelLabel:l(`unsaved.stay`),confirmLabel:l(`unsaved.leave`),destructive:!0,onConfirm:()=>{d(!1),n(!1)}})}};export{c as t};
|
|
2
|
+
//# sourceMappingURL=useDiscardGuard-DvBI3VIz.js.map
|
package/dist/admin/assets/{useDiscardGuard-CMMJgkI2.js.map → useDiscardGuard-DvBI3VIz.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDiscardGuard-
|
|
1
|
+
{"version":3,"file":"useDiscardGuard-DvBI3VIz.js","names":["useState","_jsx","__toESM","require_jsx_runtime","useTranslation","useRegisterUnsavedEdits","ConfirmDialog","import_react","require_react","import_jsx_runtime","useDiscardGuard","confirmingDiscard","setConfirmingDiscard","registersEdits","dirty","open","pending","onOpenChange","t"],"sources":["../../src/hooks/useDiscardGuard.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '@/components/ConfirmDialog';\nimport { useRegisterUnsavedEdits } from './useRegisterUnsavedEdits';\n\ntype UseDiscardGuardOptions = {\n /** Unsaved edits: closing asks before discarding them. */\n dirty: boolean;\n /** While a save runs, closing is not intercepted (the caller blocks it or lets it finish). */\n pending?: boolean;\n /** The overlay's own open/close handler, called once closing is allowed. */\n onOpenChange: (open: boolean) => void;\n /**\n * Whether `dirty` counts as this screen's unsaved edits (default true), so an ended session is resumed in\n * place. False when `dirty` is itself derived from that count (Sign out asking over other screens' edits).\n */\n registersEdits?: boolean;\n};\n\n/**\n * Dirty-close protection for a sheet (or any overlay with `onOpenChange`). Pass `requestOpenChange` to the\n * overlay instead of `onOpenChange` and render `discardPrompt` beside it: Escape, the overlay, the close\n * button and Cancel then ask \"Discard unsaved changes?\" before closing over unsaved edits.\n */\nexport const useDiscardGuard = ({\n dirty,\n pending = false,\n onOpenChange,\n registersEdits = true,\n}: UseDiscardGuardOptions): { requestOpenChange: (open: boolean) => void; discardPrompt: ReactNode } => {\n const { t } = useTranslation();\n const [confirmingDiscard, setConfirmingDiscard] = useState(false);\n useRegisterUnsavedEdits(registersEdits && dirty);\n const requestOpenChange = (open: boolean) => {\n if (!open && dirty && !pending) {\n setConfirmingDiscard(true);\n return;\n }\n onOpenChange(open);\n };\n const discardPrompt = (\n <ConfirmDialog\n open={confirmingDiscard}\n onOpenChange={setConfirmingDiscard}\n title={t('unsaved.title')}\n description={t('unsaved.description')}\n cancelLabel={t('unsaved.stay')}\n confirmLabel={t('unsaved.leave')}\n destructive\n onConfirm={() => {\n setConfirmingDiscard(false);\n onOpenChange(false);\n }}\n />\n );\n return { requestOpenChange, discardPrompt };\n};\n"],"mappings":"wQAwBaU,GAAmB,CAC9B,QACA,UAAU,GACV,eACA,iBAAiB,MACqF,CACtG,GAAM,CAAE,KAAMN,EAAe,EACvB,CAACO,EAAmBC,IAAA,EAAwBZ,EAAAA,SAAAA,CAAS,EAAK,EAwBhE,OAvBAK,EAAwBQ,GAAkBC,CAAK,EAuBxC,CAAE,kBAtBkB,GAAkB,CAC3C,GAAI,CAACC,GAAQD,GAAS,CAACE,EAAS,CAC9BJ,EAAqB,EAAI,EACzB,MACF,CACAK,EAAaF,CAAI,CACnB,EAgB4B,eAAA,EAd1Bd,EAAAA,IAAAA,CAACK,EAAD,CACE,KAAMK,EACN,aAAcC,EACd,MAAOM,EAAE,eAAe,EACxB,YAAaA,EAAE,qBAAqB,EACpC,YAAaA,EAAE,cAAc,EAC7B,aAAcA,EAAE,eAAe,EAC/B,YAAA,GACA,cAAiB,CACfN,EAAqB,EAAK,EAC1BK,EAAa,EAAK,CACpB,CACD,CAEyB,CAAc,CAC5C"}
|
package/dist/admin/assets/{useMediaPickerDialog-xvQ8cofO.js → useMediaPickerDialog-CehOsykG.js}
RENAMED
|
@@ -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{
|
|
2
|
-
//# sourceMappingURL=useMediaPickerDialog-
|
|
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,gt as a}from"./src-CMor9izq.js";import{c as o,d as s,f as c,l,m as u,p as d,u as f}from"./badge-DEe9tqLS.js";import{n as p}from"./createLucideIcon-BOsNKleB.js";import{w as m}from"./InfoHint-ymRmHKMr.js";import{i as h}from"./skeleton-Dk-qdg0z.js";import{a as g,i as _,n as v,r as y,t as b}from"./select-JB2Vv7ep.js";import{c as x}from"./Thumbnail-DauHAkh8.js";import{a as S,i as C,n as w,r as T,t as E}from"./useMediaUploader-DvtxYXxD.js";import{t as D}from"./languages-DLjdz6gb.js";import{t as O}from"./cn-DVhJ55Mo.js";import{r as k}from"./constants-DCtq_UOe.js";var A={draft:`content.status.draft`,published:`content.status.published`,modified:`content.status.modified`},j={draft:`neutral`,published:`success`,modified:`warning`},M=e(n(),1),N=({locales:e,value:t,onChange:n,states:r,size:i,id:a,className:o})=>{let{t:s}=p(),c=e=>{if(!r)return;let t=r.find(t=>t.locale===e);return s(t?A[t.status]:`content.locales.notCreated`)};return(0,M.jsxs)(b,{value:t,onValueChange:n,children:[(0,M.jsxs)(_,{id:a,size:i,"aria-label":a?void 0:s(`content.locales.label`),className:O(`w-full`,o),children:[(0,M.jsx)(D,{"aria-hidden":`true`}),(0,M.jsx)(g,{})]}),(0,M.jsx)(v,{children:e.map(e=>{let t=c(e.code);return(0,M.jsxs)(y,{value:e.code,children:[(0,M.jsx)(`span`,{children:e.label}),(0,M.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.code}),t?(0,M.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`· `,t]}):null]},e.code)})})]})},P=e(t(),1),F=e=>e.startsWith(`image/`)?`image`:e.startsWith(`video/`)?`video`:e.startsWith(`audio/`)?`audio`:e===`application/pdf`||e.startsWith(`text/`)||e.includes(`officedocument`)||e.includes(`opendocument`)||e===`application/msword`?`document`:`other`,I=e=>({id:e.id,filename:e.filename,mimeType:e.mimeType,url:e.url,alt:e.alt,width:e.width,height:e.height}),L=e=>{if(e?.length!==1)return;let[t]=e;return t===`image`||t===`video`||t===`audio`?`${t}/*`:void 0},R=({open:e,options:t,onPick:n,onCancel:g})=>{let{t:_}=p(),v=i(),{canWrite:y}=x(),b=E(),[D,O]=(0,P.useState)(),[A,j]=(0,P.useState)(),[N,I]=(0,P.useState)(`grid`),[R,z]=(0,P.useState)([]),[B,V]=(0,P.useState)(!1),H=t.multiple===!0,U=L(t.allowedKinds),W={...D?{search:D}:{},...U?{mimeType:U}:A?{mimeType:k[A]}:{}},G=(e,t)=>z(n=>t?H?[...n.filter(t=>t!==e),e]:[e]:n.filter(t=>t!==e)),K=()=>{z([]),g()},q=async()=>{V(!0);try{let e=(await Promise.all(R.map(e=>v.fetchQuery({queryKey:r.media.asset(e),queryFn:()=>a.media.assets.get(e)})))).filter(e=>!t.allowedKinds||t.allowedKinds.includes(F(e.mimeType)));z([]),n(e)}catch(e){m(e,`choosing media`)}finally{V(!1)}};return(0,M.jsx)(o,{open:e,onOpenChange:e=>e?void 0:K(),children:(0,M.jsxs)(f,{size:`lg`,...t.allowedKinds?{}:{"aria-describedby":void 0},children:[(0,M.jsxs)(d,{className:`pr-14`,children:[(0,M.jsx)(u,{children:_(H?`content.media.pickTitleMultiple`:`content.media.pickTitle`)}),t.allowedKinds?(0,M.jsx)(s,{children:_(`content.media.allowedKinds`,{kinds:t.allowedKinds.join(`, `)})}):null]}),(0,M.jsxs)(`div`,{className:`space-y-4 px-6 pb-4`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-start gap-2`,children:[(0,M.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,M.jsx)(C,{query:D,type:U?void 0:A,view:N,onQueryChange:O,onTypeChange:j,onViewChange:I})}),y?(0,M.jsx)(T,{variant:`outline`,label:_(`media.upload.action`),multiple:H,onFiles:e=>b.enqueue(e,{folderId:null,visibility:`public`})}):null]}),(0,M.jsx)(w,{onRetry:b.retry,onDismiss:b.dismiss})]}),(0,M.jsx)(l,{className:`pt-1`,children:(0,M.jsx)(S,{query:W,filtered:!!(D||A),view:N,selected:new Set(R),selectable:!0,activeId:void 0,onSelectChange:G,onOpen:e=>G(e.id,!R.includes(e.id))})}),(0,M.jsxs)(c,{children:[(0,M.jsx)(`span`,{role:`status`,className:`mr-auto text-sm text-muted-foreground`,children:_(`content.media.selectedCount`,{count:R.length})}),(0,M.jsx)(h,{type:`button`,variant:`outline`,onClick:K,children:_(`common.cancel`)}),(0,M.jsx)(h,{type:`button`,disabled:R.length===0||B,onClick:()=>void q(),children:_(`content.media.choose`,{count:R.length})})]})]})})},z=()=>{let[e,t]=(0,P.useState)(null),n=(0,P.useRef)(null),r=(0,P.useCallback)(e=>{n.current?.resolve(e),n.current=null,t(null)},[]);return{pickMedia:(0,P.useCallback)((e={})=>new Promise(r=>{n.current?.resolve(null);let i={options:e,resolve:r};n.current=i,t(i)}),[]),dialog:(0,M.jsx)(R,{open:e!==null,options:e?.options??{},onPick:e=>r(e.map(I)),onCancel:()=>r(null)})}};export{j as i,N as n,A as r,z as t};
|
|
2
|
+
//# sourceMappingURL=useMediaPickerDialog-CehOsykG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaPickerDialog-xvQ8cofO.js","names":["useState","useState","useRef","useCallback","_jsx","__toESM","require_jsx_runtime","queryKeys","useQueryClient","adminApi","Sheet","SheetDescription","SheetFooter","SheetTitle","SheetHeader","SheetContent","useTranslation","reportError","Button","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","useMediaPermissions","Library","Toolbar","UploadQueue","UploadButton","useMediaUploader","Languages","cn","MIME_FILTER_BY_TYPE","ENTRY_STATUS_LABEL_KEYS","ENTRY_STATUS_TONES","import_jsx_runtime","LocaleSelect","statusOf","states","state","item","code","t","onChange","id","className","locales","status","locale","import_react","require_react","mediaKindOf","mimeType","toPickedMedia","asset","mimeFilterFor","kinds","kind","MediaPickerSheet","queryClient","uploader","search","setSearch","type","setType","view","setView","selected","setSelected","confirming","setConfirming","multiple","options","forcedMime","query","select","checked","current","close","onCancel","confirm","allowed","onPick","error","next","canWrite","files","SheetBody","useMediaPickerDialog","pending","setPending","pendingRef","settle","assets"],"sources":["../../src/features/Content/helpers/entryStatus.ts","../../src/features/Content/LocaleSelect/index.tsx","../../src/fields/helpers/media.ts","../../src/fields/MediaPickerSheet/index.tsx","../../src/fields/hooks/useMediaPickerDialog.tsx"],"sourcesContent":["import type { EntryStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\nexport const ENTRY_STATUS_LABEL_KEYS = {\n draft: 'content.status.draft',\n published: 'content.status.published',\n modified: 'content.status.modified',\n} as const satisfies Record<EntryStatus, string>;\n\n/** Draft is neutral, published is live (success), published with newer draft changes needs attention. */\nexport const ENTRY_STATUS_TONES = {\n draft: 'neutral',\n published: 'success',\n modified: 'warning',\n} as const satisfies Record<EntryStatus, StatusTone>;\n","import type { EntryLocaleState, Locale } from '@shapio/client';\nimport { Languages } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport { cn } from '@/helpers/cn';\nimport { ENTRY_STATUS_LABEL_KEYS } from '../helpers/entryStatus';\n\ntype LocaleSelectProps = {\n locales: readonly Locale[];\n value: string;\n onChange: (code: string) => void;\n /** Per-locale status of an entry; locales without a version are marked \"not created\". */\n states?: readonly EntryLocaleState[];\n /** `sm` (36px) in page headers and toolbars, `default` (40px) in panels. */\n size?: 'default' | 'sm';\n id?: string;\n className?: string;\n};\n\n/** Chooses the content locale (with each locale's status when editing an entry). */\nexport const LocaleSelect = ({\n locales,\n value,\n onChange,\n states,\n size,\n id,\n className,\n}: LocaleSelectProps) => {\n const { t } = useTranslation();\n const statusOf = (code: string) => {\n if (!states) {\n return undefined;\n }\n const state = states.find((item) => item.locale === code);\n return state ? t(ENTRY_STATUS_LABEL_KEYS[state.status]) : t('content.locales.notCreated');\n };\n return (\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger\n id={id}\n size={size}\n aria-label={id ? undefined : t('content.locales.label')}\n className={cn('w-full', className)}\n >\n <Languages aria-hidden=\"true\" />\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {locales.map((locale) => {\n const status = statusOf(locale.code);\n return (\n <SelectItem key={locale.code} value={locale.code}>\n <span>{locale.label}</span>\n <span className=\"font-mono text-xs text-muted-foreground\">{locale.code}</span>\n {status ? <span className=\"text-xs text-muted-foreground\">· {status}</span> : null}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaKind, PickedMedia } from '@shapio/editor-sdk';\n\n/** The media kind of a MIME type (the server's `allowedKinds` buckets). */\nexport const mediaKindOf = (mimeType: string): MediaKind => {\n if (mimeType.startsWith('image/')) {\n return 'image';\n }\n if (mimeType.startsWith('video/')) {\n return 'video';\n }\n if (mimeType.startsWith('audio/')) {\n return 'audio';\n }\n if (\n mimeType === 'application/pdf' ||\n mimeType.startsWith('text/') ||\n mimeType.includes('officedocument') ||\n mimeType.includes('opendocument') ||\n mimeType === 'application/msword'\n ) {\n return 'document';\n }\n return 'other';\n};\n\n/** What an editor gets back from the picker: never storage keys or attribution. */\nexport const toPickedMedia = (asset: MediaAsset): PickedMedia => ({\n id: asset.id,\n filename: asset.filename,\n mimeType: asset.mimeType,\n url: asset.url,\n alt: asset.alt,\n width: asset.width,\n height: asset.height,\n});\n\n/** The library's server-side type filter for a set of allowed kinds (only when it is one MIME family). */\nexport const mimeFilterFor = (kinds: readonly MediaKind[] | undefined): string | undefined => {\n if (kinds?.length !== 1) {\n return undefined;\n }\n const [kind] = kinds;\n return kind === 'image' || kind === 'video' || kind === 'audio' ? `${kind}/*` : undefined;\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaPickOptions } from '@shapio/editor-sdk';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { adminApi } from '@/api/client';\nimport { queryKeys } from '@/api/queryKeys';\nimport { Button } from '@/components/ui/button';\nimport {\n Sheet,\n SheetBody,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { MIME_FILTER_BY_TYPE, type MediaTypeFilter, type MediaView } from '@/features/Media/constants';\nimport { Library } from '@/features/Media/Library';\nimport { Toolbar } from '@/features/Media/Toolbar';\nimport { UploadButton } from '@/features/Media/UploadButton';\nimport { UploadQueue } from '@/features/Media/UploadQueue';\nimport { reportError } from '@/helpers/reportError';\nimport { useMediaPermissions } from '@/hooks/useMediaPermissions';\nimport { useMediaUploader } from '@/hooks/useMediaUploader';\nimport { mediaKindOf, mimeFilterFor } from '../helpers/media';\n\ntype MediaPickerSheetProps = {\n open: boolean;\n options: MediaPickOptions;\n onPick: (assets: MediaAsset[]) => void;\n onCancel: () => void;\n};\n\n/**\n * The media library's components in a large right-hand sheet, so the entry stays in view: search, filter,\n * upload, and choose one or several files. Files of kinds the field does not allow can be seen but not\n * chosen.\n */\nexport const MediaPickerSheet = ({ open, options, onPick, onCancel }: MediaPickerSheetProps) => {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { canWrite } = useMediaPermissions();\n const uploader = useMediaUploader();\n const [search, setSearch] = useState<string | undefined>();\n const [type, setType] = useState<MediaTypeFilter | undefined>();\n const [view, setView] = useState<MediaView>('grid');\n const [selected, setSelected] = useState<string[]>([]);\n const [confirming, setConfirming] = useState(false);\n const multiple = options.multiple === true;\n const forcedMime = mimeFilterFor(options.allowedKinds);\n const query = {\n ...(search ? { search } : {}),\n ...(forcedMime ? { mimeType: forcedMime } : type ? { mimeType: MIME_FILTER_BY_TYPE[type] } : {}),\n };\n const select = (id: string, checked: boolean) =>\n setSelected((current) => {\n if (!checked) {\n return current.filter((item) => item !== id);\n }\n return multiple ? [...current.filter((item) => item !== id), id] : [id];\n });\n const close = () => {\n setSelected([]);\n onCancel();\n };\n const confirm = async () => {\n setConfirming(true);\n try {\n const assets = await Promise.all(\n selected.map((id) =>\n queryClient.fetchQuery({\n queryKey: queryKeys.media.asset(id),\n queryFn: () => adminApi.media.assets.get(id),\n }),\n ),\n );\n const allowed = assets.filter(\n (asset) => !options.allowedKinds || options.allowedKinds.includes(mediaKindOf(asset.mimeType)),\n );\n setSelected([]);\n onPick(allowed);\n } catch (error) {\n reportError(error, 'choosing media');\n } finally {\n setConfirming(false);\n }\n };\n return (\n <Sheet open={open} onOpenChange={(next) => (next ? undefined : close())}>\n <SheetContent size=\"lg\" {...(options.allowedKinds ? {} : { 'aria-describedby': undefined })}>\n <SheetHeader className=\"pr-14\">\n <SheetTitle>\n {multiple ? t('content.media.pickTitleMultiple') : t('content.media.pickTitle')}\n </SheetTitle>\n {options.allowedKinds ? (\n <SheetDescription>\n {t('content.media.allowedKinds', { kinds: options.allowedKinds.join(', ') })}\n </SheetDescription>\n ) : null}\n </SheetHeader>\n <div className=\"space-y-4 px-6 pb-4\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <Toolbar\n query={search}\n type={forcedMime ? undefined : type}\n view={view}\n onQueryChange={setSearch}\n onTypeChange={setType}\n onViewChange={setView}\n />\n </div>\n {canWrite ? (\n <UploadButton\n variant=\"outline\"\n label={t('media.upload.action')}\n multiple={multiple}\n onFiles={(files) => uploader.enqueue(files, { folderId: null, visibility: 'public' })}\n />\n ) : null}\n </div>\n <UploadQueue onRetry={uploader.retry} onDismiss={uploader.dismiss} />\n </div>\n {/* A little top padding so the selected tiles' rings aren't clipped by the scroll area. */}\n <SheetBody className=\"pt-1\">\n <Library\n query={query}\n filtered={Boolean(search || type)}\n view={view}\n selected={new Set(selected)}\n selectable\n activeId={undefined}\n onSelectChange={select}\n onOpen={(asset) => select(asset.id, !selected.includes(asset.id))}\n />\n </SheetBody>\n <SheetFooter>\n <span role=\"status\" className=\"mr-auto text-sm text-muted-foreground\">\n {t('content.media.selectedCount', { count: selected.length })}\n </span>\n <Button type=\"button\" variant=\"outline\" onClick={close}>\n {t('common.cancel')}\n </Button>\n <Button type=\"button\" disabled={selected.length === 0 || confirming} onClick={() => void confirm()}>\n {t('content.media.choose', { count: selected.length })}\n </Button>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n );\n};\n","import type { MediaPickOptions, PickedMedia } from '@shapio/editor-sdk';\nimport { useCallback, useRef, useState } from 'react';\nimport { toPickedMedia } from '../helpers/media';\nimport { MediaPickerSheet } from '../MediaPickerSheet';\n\ntype PendingPick = { options: MediaPickOptions; resolve: (assets: PickedMedia[] | null) => void };\n\n/**\n * `pickMedia` for editors (the editor contract's media capability): opens the library in a sheet and resolves\n * with the chosen assets, or null when cancelled. Render `dialog` once in the form.\n */\nexport const useMediaPickerDialog = () => {\n const [pending, setPending] = useState<PendingPick | null>(null);\n const pendingRef = useRef<PendingPick | null>(null);\n const settle = useCallback((assets: PickedMedia[] | null) => {\n pendingRef.current?.resolve(assets);\n pendingRef.current = null;\n setPending(null);\n }, []);\n const pickMedia = useCallback(\n (options: MediaPickOptions = {}) =>\n new Promise<PickedMedia[] | null>((resolve) => {\n pendingRef.current?.resolve(null);\n const next = { options, resolve };\n pendingRef.current = next;\n setPending(next);\n }),\n [],\n );\n const dialog = (\n <MediaPickerSheet\n open={pending !== null}\n options={pending?.options ?? {}}\n onPick={(assets) => settle(assets.map(toPickedMedia))}\n onCancel={() => settle(null)}\n />\n );\n return { pickMedia, dialog };\n};\n"],"mappings":"8sBAGA,IAAaiC,EAA0B,CACrC,MAAO,uBACP,UAAW,2BACX,SAAU,yBACZ,EAGaC,EAAqB,CAChC,MAAO,UACP,UAAW,UACX,SAAU,SACZ,aCMaE,GAAgB,CAC3B,UACA,QACA,WACA,SACA,OACA,KACA,eACuB,CACvB,GAAM,CAAE,KAAMpB,EAAe,EACvBqB,EAAY,GAAiB,CACjC,GAAI,CAACC,EACH,OAEF,IAAMC,EAAQD,EAAO,KAAM,GAASE,EAAK,SAAWC,CAAI,EACxD,OAAeC,EAARH,EAAUN,EAAwBM,EAAM,QAAa,4BAA4B,CAC1F,EACA,OACE,EAAAJ,EAAA,KAAA,CAACZ,EAAD,CAAe,QAAO,cAAeoB,EAArC,SAAA,EACE,EAAAR,EAAA,KAAA,CAACf,EAAD,CACM,KACE,OACN,aAAYwB,EAAK,IAAA,GAAYF,EAAE,uBAAuB,EACtD,UAAWX,EAAG,SAAUc,CAAS,EAJnC,SAAA,EAME,EAAAV,EAAA,IAAA,CAACL,EAAD,CAAW,cAAY,MAAQ,CAAA,GAC/B,EAAAK,EAAA,IAAA,CAAChB,EAAD,CAAc,CAAA,CACD,CACf,CAAA,GAAA,EAAAgB,EAAA,IAAA,CAACd,EAAD,CAAA,SACGyB,EAAQ,IAAK,GAAW,CACvB,IAAMC,EAASV,EAASW,EAAO,IAAI,EACnC,OACE,EAAAb,EAAA,KAAA,CAACb,EAAD,CAA8B,MAAO0B,EAAO,KAA5C,SAAA,EACE,EAAAb,EAAA,IAAA,CAAC,OAAD,CAAA,SAAOa,EAAO,KAAY,CAAA,GAC1B,EAAAb,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,0CAA2C,SAAAa,EAAO,IAAW,CAAA,EAC5ED,GAAS,EAAAZ,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,gCAAhB,SAAA,CAAgD,KAAGY,CAAa,CAAI,CAAA,EAAA,IACpE,CAJK,EAAAC,EAAO,IAIZ,CAEhB,CAAC,CACY,CAAA,CACT,GAEZ,aC1DaG,EAAe,GACtBC,EAAS,WAAW,QAAQ,EACvB,QAELA,EAAS,WAAW,QAAQ,EACvB,QAELA,EAAS,WAAW,QAAQ,EACvB,QAGPA,IAAa,mBACbA,EAAS,WAAW,OAAO,GAC3BA,EAAS,SAAS,gBAAgB,GAClCA,EAAS,SAAS,cAAc,GAChCA,IAAa,qBAEN,WAEF,QAIIC,EAAiB,IAAoC,CAChE,GAAIC,EAAM,GACV,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,IAAKA,EAAM,IACX,IAAKA,EAAM,IACX,MAAOA,EAAM,MACb,OAAQA,EAAM,MAChB,GAGaC,EAAiB,GAAgE,CAC5F,GAAIC,GAAO,SAAW,EACpB,OAEF,GAAM,CAACC,GAAQD,EACf,OAAOC,IAAS,SAAWA,IAAS,SAAWA,IAAS,QAAU,GAAGA,EAAK,IAAM,IAAA,EAClF,ECLaC,GAAoB,CAAE,OAAM,UAAS,SAAQ,cAAsC,CAC9F,GAAM,CAAE,KAAM1C,EAAe,EACvB2C,EAAcnD,EAAe,EAC7B,CAAE,YAAagB,EAAoB,EACnCoC,EAAW/B,EAAiB,EAC5B,CAACgC,EAAQC,IAAA,EAAa9D,EAAAA,SAAAA,CAA6B,EACnD,CAAC+D,EAAMC,IAAA,EAAWhE,EAAAA,SAAAA,CAAsC,EACxD,CAACiE,EAAMC,IAAA,EAAWlE,EAAAA,SAAAA,CAAoB,MAAM,EAC5C,CAACmE,EAAUC,IAAA,EAAepE,EAAAA,SAAAA,CAAmB,CAAC,CAAC,EAC/C,CAACqE,EAAYC,IAAA,EAAiBtE,EAAAA,SAAAA,CAAS,EAAK,EAC5CuE,EAAWC,EAAQ,WAAa,GAChCC,EAAalB,EAAciB,EAAQ,YAAY,EAC/CE,EAAQ,CACZ,GAAIb,EAAS,CAAE,QAAO,EAAI,CAAC,EAC3B,GAAIY,EAAa,CAAE,SAAUA,CAAW,EAAIV,EAAO,CAAE,SAAU/B,EAAoB+B,EAAM,EAAI,CAAC,CAChG,EACMY,GAAU,EAAY,IAC1BP,EAAa,GACNQ,EAGEL,EAAW,CAAC,GAAGM,EAAQ,OAAQ,GAASrC,IAASI,CAAE,EAAGA,CAAE,EAAI,CAACA,CAAE,EAF7DiC,EAAQ,OAAQ,GAASrC,IAASI,CAAE,CAG9C,EACGkC,MAAc,CAClBV,EAAY,CAAC,CAAC,EACdW,EAAS,CACX,EACMC,EAAU,SAAY,CAC1BV,EAAc,EAAI,EAClB,GAAI,CASF,IAAMW,GAAU,MARK,QAAQ,IAC3Bd,EAAS,IAAK,GACZR,EAAY,WAAW,CACrB,SAAUpD,EAAU,MAAM,MAAMqC,CAAE,EAClC,YAAenC,EAAS,MAAM,OAAO,IAAImC,CAAE,CAC7C,CAAC,CACH,CACF,EAAA,CACuB,OACpB,GAAU,CAAC4B,EAAQ,cAAgBA,EAAQ,aAAa,SAASrB,EAAYG,EAAM,QAAQ,CAAC,CAC/F,EACAc,EAAY,CAAC,CAAC,EACdc,EAAOD,CAAO,CAChB,OAASE,EAAO,CACdlE,EAAYkE,EAAO,gBAAgB,CACrC,QAAU,CACRb,EAAc,EAAK,CACrB,CACF,EACA,OACE,EAAAnC,EAAA,IAAA,CAACzB,EAAD,CAAa,OAAM,aAAe,GAAU0E,EAAO,IAAA,GAAYN,EAAM,EACnE,UAAA,EAAA3C,EAAA,KAAA,CAACpB,EAAD,CAAc,KAAK,KAAK,GAAKyD,EAAQ,aAAe,CAAC,EAAI,CAAE,mBAAoB,IAAA,EAAU,EAAzF,SAAA,EACE,EAAArC,EAAA,KAAA,CAACrB,EAAD,CAAa,UAAU,QAAvB,SAAA,EACE,EAAAqB,EAAA,IAAA,CAACtB,EAAD,CAAA,SACc6B,EAAX6B,EAAa,kCAAuC,yBAAyB,CACpE,CAAA,EACXC,EAAQ,cACP,EAAArC,EAAA,IAAA,CAACxB,EAAD,CAAA,SACG+B,EAAE,6BAA8B,CAAE,MAAO8B,EAAQ,aAAa,KAAK,IAAI,CAAE,CAAC,CAC3D,CAAA,EAChB,IACO,KACb,EAAArC,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sBAAf,SAAA,EACE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mCAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,UAAA,EAAAA,EAAA,IAAA,CAACT,EAAD,CACE,MAAOmC,EACP,KAAMY,EAAa,IAAA,GAAYV,EACzB,OACN,cAAeD,EACf,aAAcE,EACd,aAAcE,CACf,CAAA,CACE,CAAA,EACJmB,GACC,EAAAlD,EAAA,IAAA,CAACP,EAAD,CACE,QAAQ,UACR,MAAOc,EAAE,qBAAqB,EACpB,WACV,QAAU,GAAUkB,EAAS,QAAQ0B,EAAO,CAAE,SAAU,KAAM,WAAY,QAAS,CAAC,CACrF,CAAA,EACC,IACD,CACL,CAAA,GAAA,EAAAnD,EAAA,IAAA,CAACR,EAAD,CAAa,QAASiC,EAAS,MAAO,UAAWA,EAAS,OAAU,CAAA,CACjE,KAEL,EAAAzB,EAAA,IAAA,CAACoD,EAAD,CAAW,UAAU,OACnB,UAAA,EAAApD,EAAA,IAAA,CAACV,EAAD,CACS,QACP,SAAU,GAAQoC,GAAUE,GACtB,OACN,SAAU,IAAI,IAAII,CAAQ,EAC1B,WAAA,GACA,SAAU,IAAA,GACV,eAAgBQ,EAChB,OAAS,GAAUA,EAAOrB,EAAM,GAAI,CAACa,EAAS,SAASb,EAAM,EAAE,CAAC,CACjE,CAAA,CACQ,CAAA,GACX,EAAAnB,EAAA,KAAA,CAACvB,EAAD,CAAA,SAAA,EACE,EAAAuB,EAAA,IAAA,CAAC,OAAD,CAAM,KAAK,SAAS,UAAU,wCAC3B,SAAAO,EAAE,8BAA+B,CAAE,MAAOyB,EAAS,MAAO,CAAC,CACxD,CAAA,GACN,EAAAhC,EAAA,IAAA,CAACjB,EAAD,CAAQ,KAAK,SAAS,QAAQ,UAAU,QAAS4D,EAC9C,SAAApC,EAAE,eAAe,CACZ,CAAA,GACR,EAAAP,EAAA,IAAA,CAACjB,EAAD,CAAQ,KAAK,SAAS,SAAUiD,EAAS,SAAW,GAAKE,EAAY,YAAe,KAAKW,EAAQ,EAC9F,SAAAtC,EAAE,uBAAwB,CAAE,MAAOyB,EAAS,MAAO,CAAC,CAC/C,CAAA,CACG,CAAA,CAAA,CACD,GACT,CAAA,CAEX,EC5IaqB,MAA6B,CACxC,GAAM,CAACC,EAASC,IAAA,EAAczF,EAAAA,SAAAA,CAA6B,IAAI,EACzD0F,GAAA,EAAazF,EAAAA,OAAAA,CAA2B,IAAI,EAC5C0F,GAAA,EAASzF,EAAAA,YAAAA,CAAa,GAAiC,CAC3DwF,EAAW,SAAS,QAAQE,CAAM,EAClC,EAAW,QAAU,KACrBH,EAAW,IAAI,CACjB,EAAG,CAAC,CAAC,EAmBL,MAAO,CAAE,WAAA,EAlBSvF,EAAAA,YAAAA,EACf,EAA4B,CAAC,IAC5B,IAAI,QAA+B,GAAY,CAC7CwF,EAAW,SAAS,QAAQ,IAAI,EAChC,IAAMP,EAAO,CAAE,UAAS,SAAQ,EAChC,EAAW,QAAUA,EACrBM,EAAWN,CAAI,CACjB,CAAC,EACH,CAAC,CAUM,EAAW,QAAA,EAPlBhF,EAAAA,IAAAA,CAACsD,EAAD,CACE,KAAM+B,IAAY,KAClB,QAASA,GAAS,SAAW,CAAC,EAC9B,OAAS,GAAWG,EAAOC,EAAO,IAAIxC,CAAa,CAAC,EACpD,aAAgBuC,EAAO,IAAI,CAC5B,CAEiB,CAAO,CAC7B"}
|
|
1
|
+
{"version":3,"file":"useMediaPickerDialog-CehOsykG.js","names":["useState","useState","useRef","useCallback","_jsx","__toESM","require_jsx_runtime","queryKeys","useQueryClient","adminApi","Sheet","SheetDescription","SheetFooter","SheetTitle","SheetHeader","SheetContent","useTranslation","reportError","Button","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","useMediaPermissions","Library","Toolbar","UploadQueue","UploadButton","useMediaUploader","Languages","cn","MIME_FILTER_BY_TYPE","ENTRY_STATUS_LABEL_KEYS","ENTRY_STATUS_TONES","import_jsx_runtime","LocaleSelect","statusOf","states","state","item","code","t","onChange","id","className","locales","status","locale","import_react","require_react","mediaKindOf","mimeType","toPickedMedia","asset","mimeFilterFor","kinds","kind","MediaPickerSheet","queryClient","uploader","search","setSearch","type","setType","view","setView","selected","setSelected","confirming","setConfirming","multiple","options","forcedMime","query","select","checked","current","close","onCancel","confirm","allowed","onPick","error","next","canWrite","files","SheetBody","useMediaPickerDialog","pending","setPending","pendingRef","settle","assets"],"sources":["../../src/features/Content/helpers/entryStatus.ts","../../src/features/Content/LocaleSelect/index.tsx","../../src/fields/helpers/media.ts","../../src/fields/MediaPickerSheet/index.tsx","../../src/fields/hooks/useMediaPickerDialog.tsx"],"sourcesContent":["import type { EntryStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\nexport const ENTRY_STATUS_LABEL_KEYS = {\n draft: 'content.status.draft',\n published: 'content.status.published',\n modified: 'content.status.modified',\n} as const satisfies Record<EntryStatus, string>;\n\n/** Draft is neutral, published is live (success), published with newer draft changes needs attention. */\nexport const ENTRY_STATUS_TONES = {\n draft: 'neutral',\n published: 'success',\n modified: 'warning',\n} as const satisfies Record<EntryStatus, StatusTone>;\n","import type { EntryLocaleState, Locale } from '@shapio/client';\nimport { Languages } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport { cn } from '@/helpers/cn';\nimport { ENTRY_STATUS_LABEL_KEYS } from '../helpers/entryStatus';\n\ntype LocaleSelectProps = {\n locales: readonly Locale[];\n value: string;\n onChange: (code: string) => void;\n /** Per-locale status of an entry; locales without a version are marked \"not created\". */\n states?: readonly EntryLocaleState[];\n /** `sm` (36px) in page headers and toolbars, `default` (40px) in panels. */\n size?: 'default' | 'sm';\n id?: string;\n className?: string;\n};\n\n/** Chooses the content locale (with each locale's status when editing an entry). */\nexport const LocaleSelect = ({\n locales,\n value,\n onChange,\n states,\n size,\n id,\n className,\n}: LocaleSelectProps) => {\n const { t } = useTranslation();\n const statusOf = (code: string) => {\n if (!states) {\n return undefined;\n }\n const state = states.find((item) => item.locale === code);\n return state ? t(ENTRY_STATUS_LABEL_KEYS[state.status]) : t('content.locales.notCreated');\n };\n return (\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger\n id={id}\n size={size}\n aria-label={id ? undefined : t('content.locales.label')}\n className={cn('w-full', className)}\n >\n <Languages aria-hidden=\"true\" />\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {locales.map((locale) => {\n const status = statusOf(locale.code);\n return (\n <SelectItem key={locale.code} value={locale.code}>\n <span>{locale.label}</span>\n <span className=\"font-mono text-xs text-muted-foreground\">{locale.code}</span>\n {status ? <span className=\"text-xs text-muted-foreground\">· {status}</span> : null}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaKind, PickedMedia } from '@shapio/editor-sdk';\n\n/** The media kind of a MIME type (the server's `allowedKinds` buckets). */\nexport const mediaKindOf = (mimeType: string): MediaKind => {\n if (mimeType.startsWith('image/')) {\n return 'image';\n }\n if (mimeType.startsWith('video/')) {\n return 'video';\n }\n if (mimeType.startsWith('audio/')) {\n return 'audio';\n }\n if (\n mimeType === 'application/pdf' ||\n mimeType.startsWith('text/') ||\n mimeType.includes('officedocument') ||\n mimeType.includes('opendocument') ||\n mimeType === 'application/msword'\n ) {\n return 'document';\n }\n return 'other';\n};\n\n/** What an editor gets back from the picker: never storage keys or attribution. */\nexport const toPickedMedia = (asset: MediaAsset): PickedMedia => ({\n id: asset.id,\n filename: asset.filename,\n mimeType: asset.mimeType,\n url: asset.url,\n alt: asset.alt,\n width: asset.width,\n height: asset.height,\n});\n\n/** The library's server-side type filter for a set of allowed kinds (only when it is one MIME family). */\nexport const mimeFilterFor = (kinds: readonly MediaKind[] | undefined): string | undefined => {\n if (kinds?.length !== 1) {\n return undefined;\n }\n const [kind] = kinds;\n return kind === 'image' || kind === 'video' || kind === 'audio' ? `${kind}/*` : undefined;\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaPickOptions } from '@shapio/editor-sdk';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { adminApi } from '@/api/client';\nimport { queryKeys } from '@/api/queryKeys';\nimport { Button } from '@/components/ui/button';\nimport {\n Sheet,\n SheetBody,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { MIME_FILTER_BY_TYPE, type MediaTypeFilter, type MediaView } from '@/features/Media/constants';\nimport { Library } from '@/features/Media/Library';\nimport { Toolbar } from '@/features/Media/Toolbar';\nimport { UploadButton } from '@/features/Media/UploadButton';\nimport { UploadQueue } from '@/features/Media/UploadQueue';\nimport { reportError } from '@/helpers/reportError';\nimport { useMediaPermissions } from '@/hooks/useMediaPermissions';\nimport { useMediaUploader } from '@/hooks/useMediaUploader';\nimport { mediaKindOf, mimeFilterFor } from '../helpers/media';\n\ntype MediaPickerSheetProps = {\n open: boolean;\n options: MediaPickOptions;\n onPick: (assets: MediaAsset[]) => void;\n onCancel: () => void;\n};\n\n/**\n * The media library's components in a large right-hand sheet, so the entry stays in view: search, filter,\n * upload, and choose one or several files. Files of kinds the field does not allow can be seen but not\n * chosen.\n */\nexport const MediaPickerSheet = ({ open, options, onPick, onCancel }: MediaPickerSheetProps) => {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { canWrite } = useMediaPermissions();\n const uploader = useMediaUploader();\n const [search, setSearch] = useState<string | undefined>();\n const [type, setType] = useState<MediaTypeFilter | undefined>();\n const [view, setView] = useState<MediaView>('grid');\n const [selected, setSelected] = useState<string[]>([]);\n const [confirming, setConfirming] = useState(false);\n const multiple = options.multiple === true;\n const forcedMime = mimeFilterFor(options.allowedKinds);\n const query = {\n ...(search ? { search } : {}),\n ...(forcedMime ? { mimeType: forcedMime } : type ? { mimeType: MIME_FILTER_BY_TYPE[type] } : {}),\n };\n const select = (id: string, checked: boolean) =>\n setSelected((current) => {\n if (!checked) {\n return current.filter((item) => item !== id);\n }\n return multiple ? [...current.filter((item) => item !== id), id] : [id];\n });\n const close = () => {\n setSelected([]);\n onCancel();\n };\n const confirm = async () => {\n setConfirming(true);\n try {\n const assets = await Promise.all(\n selected.map((id) =>\n queryClient.fetchQuery({\n queryKey: queryKeys.media.asset(id),\n queryFn: () => adminApi.media.assets.get(id),\n }),\n ),\n );\n const allowed = assets.filter(\n (asset) => !options.allowedKinds || options.allowedKinds.includes(mediaKindOf(asset.mimeType)),\n );\n setSelected([]);\n onPick(allowed);\n } catch (error) {\n reportError(error, 'choosing media');\n } finally {\n setConfirming(false);\n }\n };\n return (\n <Sheet open={open} onOpenChange={(next) => (next ? undefined : close())}>\n <SheetContent size=\"lg\" {...(options.allowedKinds ? {} : { 'aria-describedby': undefined })}>\n <SheetHeader className=\"pr-14\">\n <SheetTitle>\n {multiple ? t('content.media.pickTitleMultiple') : t('content.media.pickTitle')}\n </SheetTitle>\n {options.allowedKinds ? (\n <SheetDescription>\n {t('content.media.allowedKinds', { kinds: options.allowedKinds.join(', ') })}\n </SheetDescription>\n ) : null}\n </SheetHeader>\n <div className=\"space-y-4 px-6 pb-4\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <Toolbar\n query={search}\n type={forcedMime ? undefined : type}\n view={view}\n onQueryChange={setSearch}\n onTypeChange={setType}\n onViewChange={setView}\n />\n </div>\n {canWrite ? (\n <UploadButton\n variant=\"outline\"\n label={t('media.upload.action')}\n multiple={multiple}\n onFiles={(files) => uploader.enqueue(files, { folderId: null, visibility: 'public' })}\n />\n ) : null}\n </div>\n <UploadQueue onRetry={uploader.retry} onDismiss={uploader.dismiss} />\n </div>\n {/* A little top padding so the selected tiles' rings aren't clipped by the scroll area. */}\n <SheetBody className=\"pt-1\">\n <Library\n query={query}\n filtered={Boolean(search || type)}\n view={view}\n selected={new Set(selected)}\n selectable\n activeId={undefined}\n onSelectChange={select}\n onOpen={(asset) => select(asset.id, !selected.includes(asset.id))}\n />\n </SheetBody>\n <SheetFooter>\n <span role=\"status\" className=\"mr-auto text-sm text-muted-foreground\">\n {t('content.media.selectedCount', { count: selected.length })}\n </span>\n <Button type=\"button\" variant=\"outline\" onClick={close}>\n {t('common.cancel')}\n </Button>\n <Button type=\"button\" disabled={selected.length === 0 || confirming} onClick={() => void confirm()}>\n {t('content.media.choose', { count: selected.length })}\n </Button>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n );\n};\n","import type { MediaPickOptions, PickedMedia } from '@shapio/editor-sdk';\nimport { useCallback, useRef, useState } from 'react';\nimport { toPickedMedia } from '../helpers/media';\nimport { MediaPickerSheet } from '../MediaPickerSheet';\n\ntype PendingPick = { options: MediaPickOptions; resolve: (assets: PickedMedia[] | null) => void };\n\n/**\n * `pickMedia` for editors (the editor contract's media capability): opens the library in a sheet and resolves\n * with the chosen assets, or null when cancelled. Render `dialog` once in the form.\n */\nexport const useMediaPickerDialog = () => {\n const [pending, setPending] = useState<PendingPick | null>(null);\n const pendingRef = useRef<PendingPick | null>(null);\n const settle = useCallback((assets: PickedMedia[] | null) => {\n pendingRef.current?.resolve(assets);\n pendingRef.current = null;\n setPending(null);\n }, []);\n const pickMedia = useCallback(\n (options: MediaPickOptions = {}) =>\n new Promise<PickedMedia[] | null>((resolve) => {\n pendingRef.current?.resolve(null);\n const next = { options, resolve };\n pendingRef.current = next;\n setPending(next);\n }),\n [],\n );\n const dialog = (\n <MediaPickerSheet\n open={pending !== null}\n options={pending?.options ?? {}}\n onPick={(assets) => settle(assets.map(toPickedMedia))}\n onCancel={() => settle(null)}\n />\n );\n return { pickMedia, dialog };\n};\n"],"mappings":"8sBAGA,IAAaiC,EAA0B,CACrC,MAAO,uBACP,UAAW,2BACX,SAAU,yBACZ,EAGaC,EAAqB,CAChC,MAAO,UACP,UAAW,UACX,SAAU,SACZ,aCMaE,GAAgB,CAC3B,UACA,QACA,WACA,SACA,OACA,KACA,eACuB,CACvB,GAAM,CAAE,KAAMpB,EAAe,EACvBqB,EAAY,GAAiB,CACjC,GAAI,CAACC,EACH,OAEF,IAAMC,EAAQD,EAAO,KAAM,GAASE,EAAK,SAAWC,CAAI,EACxD,OAAeC,EAARH,EAAUN,EAAwBM,EAAM,QAAa,4BAA4B,CAC1F,EACA,OACE,EAAAJ,EAAA,KAAA,CAACZ,EAAD,CAAe,QAAO,cAAeoB,EAArC,SAAA,EACE,EAAAR,EAAA,KAAA,CAACf,EAAD,CACM,KACE,OACN,aAAYwB,EAAK,IAAA,GAAYF,EAAE,uBAAuB,EACtD,UAAWX,EAAG,SAAUc,CAAS,EAJnC,SAAA,EAME,EAAAV,EAAA,IAAA,CAACL,EAAD,CAAW,cAAY,MAAQ,CAAA,GAC/B,EAAAK,EAAA,IAAA,CAAChB,EAAD,CAAc,CAAA,CACD,CACf,CAAA,GAAA,EAAAgB,EAAA,IAAA,CAACd,EAAD,CAAA,SACGyB,EAAQ,IAAK,GAAW,CACvB,IAAMC,EAASV,EAASW,EAAO,IAAI,EACnC,OACE,EAAAb,EAAA,KAAA,CAACb,EAAD,CAA8B,MAAO0B,EAAO,KAA5C,SAAA,EACE,EAAAb,EAAA,IAAA,CAAC,OAAD,CAAA,SAAOa,EAAO,KAAY,CAAA,GAC1B,EAAAb,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,0CAA2C,SAAAa,EAAO,IAAW,CAAA,EAC5ED,GAAS,EAAAZ,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,gCAAhB,SAAA,CAAgD,KAAGY,CAAa,CAAI,CAAA,EAAA,IACpE,CAJK,EAAAC,EAAO,IAIZ,CAEhB,CAAC,CACY,CAAA,CACT,GAEZ,aC1DaG,EAAe,GACtBC,EAAS,WAAW,QAAQ,EACvB,QAELA,EAAS,WAAW,QAAQ,EACvB,QAELA,EAAS,WAAW,QAAQ,EACvB,QAGPA,IAAa,mBACbA,EAAS,WAAW,OAAO,GAC3BA,EAAS,SAAS,gBAAgB,GAClCA,EAAS,SAAS,cAAc,GAChCA,IAAa,qBAEN,WAEF,QAIIC,EAAiB,IAAoC,CAChE,GAAIC,EAAM,GACV,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,IAAKA,EAAM,IACX,IAAKA,EAAM,IACX,MAAOA,EAAM,MACb,OAAQA,EAAM,MAChB,GAGaC,EAAiB,GAAgE,CAC5F,GAAIC,GAAO,SAAW,EACpB,OAEF,GAAM,CAACC,GAAQD,EACf,OAAOC,IAAS,SAAWA,IAAS,SAAWA,IAAS,QAAU,GAAGA,EAAK,IAAM,IAAA,EAClF,ECLaC,GAAoB,CAAE,OAAM,UAAS,SAAQ,cAAsC,CAC9F,GAAM,CAAE,KAAM1C,EAAe,EACvB2C,EAAcnD,EAAe,EAC7B,CAAE,YAAagB,EAAoB,EACnCoC,EAAW/B,EAAiB,EAC5B,CAACgC,EAAQC,IAAA,EAAa9D,EAAAA,SAAAA,CAA6B,EACnD,CAAC+D,EAAMC,IAAA,EAAWhE,EAAAA,SAAAA,CAAsC,EACxD,CAACiE,EAAMC,IAAA,EAAWlE,EAAAA,SAAAA,CAAoB,MAAM,EAC5C,CAACmE,EAAUC,IAAA,EAAepE,EAAAA,SAAAA,CAAmB,CAAC,CAAC,EAC/C,CAACqE,EAAYC,IAAA,EAAiBtE,EAAAA,SAAAA,CAAS,EAAK,EAC5CuE,EAAWC,EAAQ,WAAa,GAChCC,EAAalB,EAAciB,EAAQ,YAAY,EAC/CE,EAAQ,CACZ,GAAIb,EAAS,CAAE,QAAO,EAAI,CAAC,EAC3B,GAAIY,EAAa,CAAE,SAAUA,CAAW,EAAIV,EAAO,CAAE,SAAU/B,EAAoB+B,EAAM,EAAI,CAAC,CAChG,EACMY,GAAU,EAAY,IAC1BP,EAAa,GACNQ,EAGEL,EAAW,CAAC,GAAGM,EAAQ,OAAQ,GAASrC,IAASI,CAAE,EAAGA,CAAE,EAAI,CAACA,CAAE,EAF7DiC,EAAQ,OAAQ,GAASrC,IAASI,CAAE,CAG9C,EACGkC,MAAc,CAClBV,EAAY,CAAC,CAAC,EACdW,EAAS,CACX,EACMC,EAAU,SAAY,CAC1BV,EAAc,EAAI,EAClB,GAAI,CASF,IAAMW,GAAU,MARK,QAAQ,IAC3Bd,EAAS,IAAK,GACZR,EAAY,WAAW,CACrB,SAAUpD,EAAU,MAAM,MAAMqC,CAAE,EAClC,YAAenC,EAAS,MAAM,OAAO,IAAImC,CAAE,CAC7C,CAAC,CACH,CACF,EAAA,CACuB,OACpB,GAAU,CAAC4B,EAAQ,cAAgBA,EAAQ,aAAa,SAASrB,EAAYG,EAAM,QAAQ,CAAC,CAC/F,EACAc,EAAY,CAAC,CAAC,EACdc,EAAOD,CAAO,CAChB,OAASE,EAAO,CACdlE,EAAYkE,EAAO,gBAAgB,CACrC,QAAU,CACRb,EAAc,EAAK,CACrB,CACF,EACA,OACE,EAAAnC,EAAA,IAAA,CAACzB,EAAD,CAAa,OAAM,aAAe,GAAU0E,EAAO,IAAA,GAAYN,EAAM,EACnE,UAAA,EAAA3C,EAAA,KAAA,CAACpB,EAAD,CAAc,KAAK,KAAK,GAAKyD,EAAQ,aAAe,CAAC,EAAI,CAAE,mBAAoB,IAAA,EAAU,EAAzF,SAAA,EACE,EAAArC,EAAA,KAAA,CAACrB,EAAD,CAAa,UAAU,QAAvB,SAAA,EACE,EAAAqB,EAAA,IAAA,CAACtB,EAAD,CAAA,SACc6B,EAAX6B,EAAa,kCAAuC,yBAAyB,CACpE,CAAA,EACXC,EAAQ,cACP,EAAArC,EAAA,IAAA,CAACxB,EAAD,CAAA,SACG+B,EAAE,6BAA8B,CAAE,MAAO8B,EAAQ,aAAa,KAAK,IAAI,CAAE,CAAC,CAC3D,CAAA,EAChB,IACO,KACb,EAAArC,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sBAAf,SAAA,EACE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mCAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,UAAA,EAAAA,EAAA,IAAA,CAACT,EAAD,CACE,MAAOmC,EACP,KAAMY,EAAa,IAAA,GAAYV,EACzB,OACN,cAAeD,EACf,aAAcE,EACd,aAAcE,CACf,CAAA,CACE,CAAA,EACJmB,GACC,EAAAlD,EAAA,IAAA,CAACP,EAAD,CACE,QAAQ,UACR,MAAOc,EAAE,qBAAqB,EACpB,WACV,QAAU,GAAUkB,EAAS,QAAQ0B,EAAO,CAAE,SAAU,KAAM,WAAY,QAAS,CAAC,CACrF,CAAA,EACC,IACD,CACL,CAAA,GAAA,EAAAnD,EAAA,IAAA,CAACR,EAAD,CAAa,QAASiC,EAAS,MAAO,UAAWA,EAAS,OAAU,CAAA,CACjE,KAEL,EAAAzB,EAAA,IAAA,CAACoD,EAAD,CAAW,UAAU,OACnB,UAAA,EAAApD,EAAA,IAAA,CAACV,EAAD,CACS,QACP,SAAU,GAAQoC,GAAUE,GACtB,OACN,SAAU,IAAI,IAAII,CAAQ,EAC1B,WAAA,GACA,SAAU,IAAA,GACV,eAAgBQ,EAChB,OAAS,GAAUA,EAAOrB,EAAM,GAAI,CAACa,EAAS,SAASb,EAAM,EAAE,CAAC,CACjE,CAAA,CACQ,CAAA,GACX,EAAAnB,EAAA,KAAA,CAACvB,EAAD,CAAA,SAAA,EACE,EAAAuB,EAAA,IAAA,CAAC,OAAD,CAAM,KAAK,SAAS,UAAU,wCAC3B,SAAAO,EAAE,8BAA+B,CAAE,MAAOyB,EAAS,MAAO,CAAC,CACxD,CAAA,GACN,EAAAhC,EAAA,IAAA,CAACjB,EAAD,CAAQ,KAAK,SAAS,QAAQ,UAAU,QAAS4D,EAC9C,SAAApC,EAAE,eAAe,CACZ,CAAA,GACR,EAAAP,EAAA,IAAA,CAACjB,EAAD,CAAQ,KAAK,SAAS,SAAUiD,EAAS,SAAW,GAAKE,EAAY,YAAe,KAAKW,EAAQ,EAC9F,SAAAtC,EAAE,uBAAwB,CAAE,MAAOyB,EAAS,MAAO,CAAC,CAC/C,CAAA,CACG,CAAA,CAAA,CACD,GACT,CAAA,CAEX,EC5IaqB,MAA6B,CACxC,GAAM,CAACC,EAASC,IAAA,EAAczF,EAAAA,SAAAA,CAA6B,IAAI,EACzD0F,GAAA,EAAazF,EAAAA,OAAAA,CAA2B,IAAI,EAC5C0F,GAAA,EAASzF,EAAAA,YAAAA,CAAa,GAAiC,CAC3DwF,EAAW,SAAS,QAAQE,CAAM,EAClC,EAAW,QAAU,KACrBH,EAAW,IAAI,CACjB,EAAG,CAAC,CAAC,EAmBL,MAAO,CAAE,WAAA,EAlBSvF,EAAAA,YAAAA,EACf,EAA4B,CAAC,IAC5B,IAAI,QAA+B,GAAY,CAC7CwF,EAAW,SAAS,QAAQ,IAAI,EAChC,IAAMP,EAAO,CAAE,UAAS,SAAQ,EAChC,EAAW,QAAUA,EACrBM,EAAWN,CAAI,CACjB,CAAC,EACH,CAAC,CAUM,EAAW,QAAA,EAPlBhF,EAAAA,IAAAA,CAACsD,EAAD,CACE,KAAM+B,IAAY,KAClB,QAASA,GAAS,SAAW,CAAC,EAC9B,OAAS,GAAWG,EAAOC,EAAO,IAAIxC,CAAa,CAAC,EACpD,aAAgBuC,EAAO,IAAI,CAC5B,CAEiB,CAAO,CAC7B"}
|