@shapio/cms 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/dist/admin/apple-touch-icon.png +0 -0
- package/dist/admin/assets/AssistError-hVUWpP3F.js +2 -0
- package/dist/admin/assets/AssistError-hVUWpP3F.js.map +1 -0
- package/dist/admin/assets/BlockMenuItems-B0g93m6M.js +6 -0
- package/dist/admin/assets/BlockMenuItems-B0g93m6M.js.map +1 -0
- package/dist/admin/assets/Body-CFQKONK4.js +2 -0
- package/dist/admin/assets/Body-CFQKONK4.js.map +1 -0
- package/dist/admin/assets/Builder-Do5KVHV9.js +2 -0
- package/dist/admin/assets/Builder-Do5KVHV9.js.map +1 -0
- package/dist/admin/assets/ConfirmDialog-D6rs75TP.js +2 -0
- package/dist/admin/assets/ConfirmDialog-D6rs75TP.js.map +1 -0
- package/dist/admin/assets/CopyButton-Bc7crFDE.js +2 -0
- package/dist/admin/assets/CopyButton-Bc7crFDE.js.map +1 -0
- package/dist/admin/assets/CursorPager-BFPD_adV.js +2 -0
- package/dist/admin/assets/CursorPager-BFPD_adV.js.map +1 -0
- package/dist/admin/assets/ExternalLink-Cdfcyyed.js +2 -0
- package/dist/admin/assets/ExternalLink-Cdfcyyed.js.map +1 -0
- package/dist/admin/assets/FormCheckboxGroup-Bicl1CBP.js +2 -0
- package/dist/admin/assets/FormCheckboxGroup-Bicl1CBP.js.map +1 -0
- package/dist/admin/assets/FormRadioGroup-34iVSV4L.js +2 -0
- package/dist/admin/assets/FormRadioGroup-34iVSV4L.js.map +1 -0
- package/dist/admin/assets/FormSelectField-Ba4fIu-8.js +2 -0
- package/dist/admin/assets/FormSelectField-Ba4fIu-8.js.map +1 -0
- package/dist/admin/assets/FormSwitchField-DN6bfPC0.js +2 -0
- package/dist/admin/assets/FormSwitchField-DN6bfPC0.js.map +1 -0
- package/dist/admin/assets/FormTextareaField-WsNjLm32.js +2 -0
- package/dist/admin/assets/FormTextareaField-WsNjLm32.js.map +1 -0
- package/dist/admin/assets/HintedLabel-jKLM0ETt.js +2 -0
- package/dist/admin/assets/HintedLabel-jKLM0ETt.js.map +1 -0
- package/dist/admin/assets/InfoHint-DBqcrmZ3.js +2 -0
- package/dist/admin/assets/InfoHint-DBqcrmZ3.js.map +1 -0
- package/dist/admin/assets/InsertMenuItem-CRKXblK5.js +2 -0
- package/dist/admin/assets/InsertMenuItem-CRKXblK5.js.map +1 -0
- package/dist/admin/assets/LinkTabs-Bn2JVqOL.js +2 -0
- package/dist/admin/assets/LinkTabs-Bn2JVqOL.js.map +1 -0
- package/dist/admin/assets/Match-DaYgKrk7.js +2 -0
- package/dist/admin/assets/Match-DaYgKrk7.js.map +1 -0
- package/dist/admin/assets/Panel-6wFe96Gr.js +2 -0
- package/dist/admin/assets/Panel-6wFe96Gr.js.map +1 -0
- package/dist/admin/assets/QueryView-DFZtm0fn.js +2 -0
- package/dist/admin/assets/QueryView-DFZtm0fn.js.map +1 -0
- package/dist/admin/assets/RadioTile-DsTyz7ml.js +2 -0
- package/dist/admin/assets/RadioTile-DsTyz7ml.js.map +1 -0
- package/dist/admin/assets/RichTextField-BGkH403g.js +144 -0
- package/dist/admin/assets/RichTextField-BGkH403g.js.map +1 -0
- package/dist/admin/assets/RowTitle-sFt6NjO4.js +2 -0
- package/dist/admin/assets/RowTitle-sFt6NjO4.js.map +1 -0
- package/dist/admin/assets/SecretReveal-Z6MOFdcL.js +2 -0
- package/dist/admin/assets/SecretReveal-Z6MOFdcL.js.map +1 -0
- package/dist/admin/assets/StepList-BTP_EMzx.js +2 -0
- package/dist/admin/assets/StepList-BTP_EMzx.js.map +1 -0
- package/dist/admin/assets/Structure-D5-hCUuF.js +2 -0
- package/dist/admin/assets/Structure-D5-hCUuF.js.map +1 -0
- package/dist/admin/assets/SubNavLink-C5oN5mzB.js +2 -0
- package/dist/admin/assets/SubNavLink-C5oN5mzB.js.map +1 -0
- package/dist/admin/assets/SuggestAltButton-BuN35BBL.js +2 -0
- package/dist/admin/assets/SuggestAltButton-BuN35BBL.js.map +1 -0
- package/dist/admin/assets/TextLink-B4a6j3r6.js +2 -0
- package/dist/admin/assets/TextLink-B4a6j3r6.js.map +1 -0
- package/dist/admin/assets/Thumbnail-u8NE5NhQ.js +2 -0
- package/dist/admin/assets/Thumbnail-u8NE5NhQ.js.map +1 -0
- package/dist/admin/assets/UnsavedChangesGuard-BYwMTDsE.js +2 -0
- package/dist/admin/assets/UnsavedChangesGuard-BYwMTDsE.js.map +1 -0
- package/dist/admin/assets/UserAvatar-D-yX0ozh.js +2 -0
- package/dist/admin/assets/UserAvatar-D-yX0ozh.js.map +1 -0
- package/dist/admin/assets/View-BLsQYPow.js +11 -0
- package/dist/admin/assets/View-BLsQYPow.js.map +1 -0
- package/dist/admin/assets/arrow-up-Ws7W9KsZ.js +2 -0
- package/dist/admin/assets/arrow-up-Ws7W9KsZ.js.map +1 -0
- package/dist/admin/assets/auth-b3_9QbtL.js +2 -0
- package/dist/admin/assets/auth-b3_9QbtL.js.map +1 -0
- package/dist/admin/assets/badge-CMox6-v3.js +2 -0
- package/dist/admin/assets/badge-CMox6-v3.js.map +1 -0
- package/dist/admin/assets/calendar-clock-9W0Lkt89.js +2 -0
- package/dist/admin/assets/calendar-clock-9W0Lkt89.js.map +1 -0
- package/dist/admin/assets/changeSets-CO7JdILW.js +2 -0
- package/dist/admin/assets/changeSets-CO7JdILW.js.map +1 -0
- package/dist/admin/assets/chevron-left-DyqYjcMB.js +2 -0
- package/dist/admin/assets/chevron-left-DyqYjcMB.js.map +1 -0
- package/dist/admin/assets/circle-check-aJ2DW5t4.js +2 -0
- package/dist/admin/assets/circle-check-aJ2DW5t4.js.map +1 -0
- package/dist/admin/assets/circle-x-BnRBht9z.js +2 -0
- package/dist/admin/assets/circle-x-BnRBht9z.js.map +1 -0
- package/dist/admin/assets/client-C8vMCv-p.js +10 -0
- package/dist/admin/assets/client-C8vMCv-p.js.map +1 -0
- package/dist/admin/assets/clock-DRtFQbTs.js +2 -0
- package/dist/admin/assets/clock-DRtFQbTs.js.map +1 -0
- package/dist/admin/assets/cn-DnXL75B0.js +2 -0
- package/dist/admin/assets/cn-DnXL75B0.js.map +1 -0
- package/dist/admin/assets/coerce-COM3rk1i.js +2 -0
- package/dist/admin/assets/coerce-COM3rk1i.js.map +1 -0
- package/dist/admin/assets/constants-CS1ziZO0.js +2 -0
- package/dist/admin/assets/constants-CS1ziZO0.js.map +1 -0
- package/dist/admin/assets/constants-DCtq_UOe.js +2 -0
- package/dist/admin/assets/constants-DCtq_UOe.js.map +1 -0
- package/dist/admin/assets/constants-DUBUgzpU.js +2 -0
- package/dist/admin/assets/constants-DUBUgzpU.js.map +1 -0
- package/dist/admin/assets/content-Dic2fof_.js +3 -0
- package/dist/admin/assets/content-Dic2fof_.js.map +1 -0
- package/dist/admin/assets/contentCounts-Ct0tYgHD.js +2 -0
- package/dist/admin/assets/contentCounts-Ct0tYgHD.js.map +1 -0
- package/dist/admin/assets/contentTypes-D4_Ax9rb.js +2 -0
- package/dist/admin/assets/contentTypes-D4_Ax9rb.js.map +1 -0
- package/dist/admin/assets/copy-B5B8RjV0.js +2 -0
- package/dist/admin/assets/copy-B5B8RjV0.js.map +1 -0
- package/dist/admin/assets/dateTimeLocal-BuBv3it2.js +2 -0
- package/dist/admin/assets/dateTimeLocal-BuBv3it2.js.map +1 -0
- package/dist/admin/assets/defineEditor-CiJc766Y.js +2 -0
- package/dist/admin/assets/defineEditor-CiJc766Y.js.map +1 -0
- package/dist/admin/assets/develop-Brnb5YPC.js +11 -0
- package/dist/admin/assets/develop-Brnb5YPC.js.map +1 -0
- package/dist/admin/assets/dropdown-menu-CW3fabv5.js +2 -0
- package/dist/admin/assets/dropdown-menu-CW3fabv5.js.map +1 -0
- package/dist/admin/assets/ellipsis-DNdmromA.js +2 -0
- package/dist/admin/assets/ellipsis-DNdmromA.js.map +1 -0
- package/dist/admin/assets/errors-DfoXUVDI.js +2 -0
- package/dist/admin/assets/errors-DfoXUVDI.js.map +1 -0
- package/dist/admin/assets/external-link-YnuWXDBk.js +2 -0
- package/dist/admin/assets/external-link-YnuWXDBk.js.map +1 -0
- package/dist/admin/assets/file-text-CB7Bc0GA.js +2 -0
- package/dist/admin/assets/file-text-CB7Bc0GA.js.map +1 -0
- package/dist/admin/assets/fileRoute-BYwireXG.js +2 -0
- package/dist/admin/assets/fileRoute-BYwireXG.js.map +1 -0
- package/dist/admin/assets/globe-Bvs3UC3V.js +2 -0
- package/dist/admin/assets/globe-Bvs3UC3V.js.map +1 -0
- package/dist/admin/assets/image-CeoxwJeM.js +2 -0
- package/dist/admin/assets/image-CeoxwJeM.js.map +1 -0
- package/dist/admin/assets/image-off-iVqYw2Zc.js +2 -0
- package/dist/admin/assets/image-off-iVqYw2Zc.js.map +1 -0
- package/dist/admin/assets/inbox-DYbEOpaQ.js +2 -0
- package/dist/admin/assets/inbox-DYbEOpaQ.js.map +1 -0
- package/dist/admin/assets/inbox-wDoqym--.js +2 -0
- package/dist/admin/assets/inbox-wDoqym--.js.map +1 -0
- package/dist/admin/assets/index-57Mn6XLO.js +4 -0
- package/dist/admin/assets/index-57Mn6XLO.js.map +1 -0
- package/dist/admin/assets/index-BLYOgCKc.css +2 -0
- package/dist/admin/assets/jsx-runtime-DREnUpxT.js +2 -0
- package/dist/admin/assets/jsx-runtime-DREnUpxT.js.map +1 -0
- package/dist/admin/assets/key-round-Bcw6qqcb.js +2 -0
- package/dist/admin/assets/key-round-Bcw6qqcb.js.map +1 -0
- package/dist/admin/assets/link-2-DhM2vi4v.js +2 -0
- package/dist/admin/assets/link-2-DhM2vi4v.js.map +1 -0
- package/dist/admin/assets/link-2-off-DpDOMsa-.js +2 -0
- package/dist/admin/assets/link-2-off-DpDOMsa-.js.map +1 -0
- package/dist/admin/assets/link-CKr_uUfb.js +2 -0
- package/dist/admin/assets/link-CKr_uUfb.js.map +1 -0
- package/dist/admin/assets/list-BElvKZw_.js +2 -0
- package/dist/admin/assets/list-BElvKZw_.js.map +1 -0
- package/dist/admin/assets/locales-Bnv3qcdZ.js +2 -0
- package/dist/admin/assets/locales-Bnv3qcdZ.js.map +1 -0
- package/dist/admin/assets/media-BfDqe_2P.js +2 -0
- package/dist/admin/assets/media-BfDqe_2P.js.map +1 -0
- package/dist/admin/assets/media-DjK3xGFN.js +2 -0
- package/dist/admin/assets/media-DjK3xGFN.js.map +1 -0
- package/dist/admin/assets/modelPermissions-DZ1lWfQZ.js +2 -0
- package/dist/admin/assets/modelPermissions-DZ1lWfQZ.js.map +1 -0
- package/dist/admin/assets/network-CAJ76ILr.js +2 -0
- package/dist/admin/assets/network-CAJ76ILr.js.map +1 -0
- package/dist/admin/assets/pencil-Zd05MDs2.js +2 -0
- package/dist/admin/assets/pencil-Zd05MDs2.js.map +1 -0
- package/dist/admin/assets/plus-B0gd63Da.js +2 -0
- package/dist/admin/assets/plus-B0gd63Da.js.map +1 -0
- package/dist/admin/assets/preload-helper-CJKHb_rG.js +2 -0
- package/dist/admin/assets/preload-helper-CJKHb_rG.js.map +1 -0
- package/dist/admin/assets/publishing-B7zv1e7j.js +2 -0
- package/dist/admin/assets/publishing-B7zv1e7j.js.map +1 -0
- package/dist/admin/assets/publishing-vCVjaSGF.js +2 -0
- package/dist/admin/assets/publishing-vCVjaSGF.js.map +1 -0
- package/dist/admin/assets/radio-group-DVR0mTpo.js +2 -0
- package/dist/admin/assets/radio-group-DVR0mTpo.js.map +1 -0
- package/dist/admin/assets/react-CQOZoUwg.js +2 -0
- package/dist/admin/assets/react-CQOZoUwg.js.map +1 -0
- package/dist/admin/assets/react-dom-pEVw9mjF.js +2 -0
- package/dist/admin/assets/react-dom-pEVw9mjF.js.map +1 -0
- package/dist/admin/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
- package/dist/admin/assets/root-CDpNo7ef.js +2 -0
- package/dist/admin/assets/root-CDpNo7ef.js.map +1 -0
- package/dist/admin/assets/rotate-ccw-BOTDOdHf.js +2 -0
- package/dist/admin/assets/rotate-ccw-BOTDOdHf.js.map +1 -0
- package/dist/admin/assets/schedules-CG-ZphRK.js +2 -0
- package/dist/admin/assets/schedules-CG-ZphRK.js.map +1 -0
- package/dist/admin/assets/schema-KXXSPVJn.js +2 -0
- package/dist/admin/assets/schema-KXXSPVJn.js.map +1 -0
- package/dist/admin/assets/scroll-text-D-gHqYwR.js +2 -0
- package/dist/admin/assets/scroll-text-D-gHqYwR.js.map +1 -0
- package/dist/admin/assets/search-BcPL1qyc.js +2 -0
- package/dist/admin/assets/search-BcPL1qyc.js.map +1 -0
- package/dist/admin/assets/searchSchema-BGrRDBL_.js +2 -0
- package/dist/admin/assets/searchSchema-BGrRDBL_.js.map +1 -0
- package/dist/admin/assets/searchSchemas-ChN9hhuQ.js +2 -0
- package/dist/admin/assets/searchSchemas-ChN9hhuQ.js.map +1 -0
- package/dist/admin/assets/sections-BrGcWOnw.js +2 -0
- package/dist/admin/assets/sections-BrGcWOnw.js.map +1 -0
- package/dist/admin/assets/sections-i9TeeK-h.js +2 -0
- package/dist/admin/assets/sections-i9TeeK-h.js.map +1 -0
- package/dist/admin/assets/select--nGB4WjU.js +2 -0
- package/dist/admin/assets/select--nGB4WjU.js.map +1 -0
- package/dist/admin/assets/send-Bu3RRfdI.js +2 -0
- package/dist/admin/assets/send-Bu3RRfdI.js.map +1 -0
- package/dist/admin/assets/settings-68BAxrPM.js +2 -0
- package/dist/admin/assets/settings-68BAxrPM.js.map +1 -0
- package/dist/admin/assets/settle-LRKtTN_e.js +2 -0
- package/dist/admin/assets/settle-LRKtTN_e.js.map +1 -0
- package/dist/admin/assets/shared-react-KADNSNpb.js +1 -0
- package/dist/admin/assets/shared-react-dom-BpneAejY.js +1 -0
- package/dist/admin/assets/shared-react-dom-client-CnpZTXxo.js +1 -0
- package/dist/admin/assets/shared-react-jsx-runtime-CU_Fm1m8.js +1 -0
- package/dist/admin/assets/shared-shapio-editor-sdk-9ANIbEN0.js +1 -0
- package/dist/admin/assets/sites-C6_THCVK.js +2 -0
- package/dist/admin/assets/sites-C6_THCVK.js.map +1 -0
- package/dist/admin/assets/skeleton-DUvclBAr.js +42 -0
- package/dist/admin/assets/skeleton-DUvclBAr.js.map +1 -0
- package/dist/admin/assets/snapshots-CKjK-vkL.js +2 -0
- package/dist/admin/assets/snapshots-CKjK-vkL.js.map +1 -0
- package/dist/admin/assets/sparkles-B_NX7PAY.js +2 -0
- package/dist/admin/assets/sparkles-B_NX7PAY.js.map +1 -0
- package/dist/admin/assets/src-D6DABe5J.js +4 -0
- package/dist/admin/assets/src-D6DABe5J.js.map +1 -0
- package/dist/admin/assets/stableId-Dmr2Afn_.js +2 -0
- package/dist/admin/assets/stableId-Dmr2Afn_.js.map +1 -0
- package/dist/admin/assets/store-B5xrQ1Ex.js +2 -0
- package/dist/admin/assets/store-B5xrQ1Ex.js.map +1 -0
- package/dist/admin/assets/switch-B-FbT-l8.js +2 -0
- package/dist/admin/assets/switch-B-FbT-l8.js.map +1 -0
- package/dist/admin/assets/table-DQzCPm7J.js +56 -0
- package/dist/admin/assets/table-DQzCPm7J.js.map +1 -0
- package/dist/admin/assets/tabs-YThoOiE3.js +5 -0
- package/dist/admin/assets/tabs-YThoOiE3.js.map +1 -0
- package/dist/admin/assets/textarea-_wcx8Mn1.js +2 -0
- package/dist/admin/assets/textarea-_wcx8Mn1.js.map +1 -0
- package/dist/admin/assets/titles-DyCBLXue.js +2 -0
- package/dist/admin/assets/titles-DyCBLXue.js.map +1 -0
- package/dist/admin/assets/tokens-CqsxrApC.js +2 -0
- package/dist/admin/assets/tokens-CqsxrApC.js.map +1 -0
- package/dist/admin/assets/tooltip-BMe4HylJ.js +2 -0
- package/dist/admin/assets/tooltip-BMe4HylJ.js.map +1 -0
- package/dist/admin/assets/undo-2-DMOHOH6w.js +2 -0
- package/dist/admin/assets/undo-2-DMOHOH6w.js.map +1 -0
- package/dist/admin/assets/useAuditLabels-CSw_kwLs.js +2 -0
- package/dist/admin/assets/useAuditLabels-CSw_kwLs.js.map +1 -0
- package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js +2 -0
- package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js.map +1 -0
- package/dist/admin/assets/useContentSchema-CS5QQcRk.js +2 -0
- package/dist/admin/assets/useContentSchema-CS5QQcRk.js.map +1 -0
- package/dist/admin/assets/useCursorPager-Dt_axwd1.js +2 -0
- package/dist/admin/assets/useCursorPager-Dt_axwd1.js.map +1 -0
- package/dist/admin/assets/useDebouncedValue-Dqs3wwhn.js +2 -0
- package/dist/admin/assets/useDebouncedValue-Dqs3wwhn.js.map +1 -0
- package/dist/admin/assets/useDiscardGuard-7rRGpd4q.js +2 -0
- package/dist/admin/assets/useDiscardGuard-7rRGpd4q.js.map +1 -0
- package/dist/admin/assets/useMediaUploader-CBUcNW6d.js +2 -0
- package/dist/admin/assets/useMediaUploader-CBUcNW6d.js.map +1 -0
- package/dist/admin/assets/usePaletteItems-bbTIqpPu.js +2 -0
- package/dist/admin/assets/usePaletteItems-bbTIqpPu.js.map +1 -0
- package/dist/admin/assets/usePlaces-D1raoQ2s.js +2 -0
- package/dist/admin/assets/usePlaces-D1raoQ2s.js.map +1 -0
- package/dist/admin/assets/useQueries-DKGIdq6A.js +2 -0
- package/dist/admin/assets/useQueries-DKGIdq6A.js.map +1 -0
- package/dist/admin/assets/useSaveShortcut-rKtp1qK7.js +2 -0
- package/dist/admin/assets/useSaveShortcut-rKtp1qK7.js.map +1 -0
- package/dist/admin/assets/useSearchInput-1fDoEtXe.js +2 -0
- package/dist/admin/assets/useSearchInput-1fDoEtXe.js.map +1 -0
- package/dist/admin/assets/users-C1ZSee3N.js +2 -0
- package/dist/admin/assets/users-C1ZSee3N.js.map +1 -0
- package/dist/admin/assets/users-DMfQL0s4.js +2 -0
- package/dist/admin/assets/users-DMfQL0s4.js.map +1 -0
- package/dist/admin/assets/w3c-keyname-BOAvb0qz.js +2 -0
- package/dist/admin/assets/w3c-keyname-BOAvb0qz.js.map +1 -0
- package/dist/admin/assets/zod-Pf5A-ax4.js +2 -0
- package/dist/admin/assets/zod-Pf5A-ax4.js.map +1 -0
- package/dist/admin/favicon-32.png +0 -0
- package/dist/admin/favicon.svg +5 -0
- package/dist/admin/fonts/OFL-SourceSerif4.txt +93 -0
- package/dist/admin/fonts/OFL.txt +93 -0
- package/dist/admin/fonts/manrope-latin-ext-wght-normal.woff2 +0 -0
- package/dist/admin/fonts/manrope-latin-wght-normal.woff2 +0 -0
- package/dist/admin/fonts/source-serif-4-latin-ext-wght-italic.woff2 +0 -0
- package/dist/admin/fonts/source-serif-4-latin-ext-wght-normal.woff2 +0 -0
- package/dist/admin/fonts/source-serif-4-latin-wght-italic.woff2 +0 -0
- package/dist/admin/fonts/source-serif-4-latin-wght-normal.woff2 +0 -0
- package/dist/admin/index.html +89 -0
- package/dist/admin/theme-init.js +18 -0
- package/dist/cli.js +5163 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +39 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +1051 -0
- package/dist/index.js +3 -0
- package/dist/public-CKU0Gkfq.d.ts +1177 -0
- package/dist/worker-C-MSYr4l.js +46445 -0
- package/dist/worker-C-MSYr4l.js.map +1 -0
- package/package.json +98 -3
- package/vendor/graphiql/LICENSE.graphiql +21 -0
- package/vendor/graphiql/LICENSE.react +21 -0
- package/vendor/graphiql/LICENSE.react-dom +21 -0
- package/vendor/graphiql/graphiql.min.css +1 -0
- package/vendor/graphiql/graphiql.min.js +46 -0
- package/vendor/graphiql/react-dom.production.min.js +267 -0
- package/vendor/graphiql/react.production.min.js +31 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{t as r}from"./cn-DnXL75B0.js";t();var i=e(n(),1);function a({className:e,...t}){return(0,i.jsx)(`textarea`,{"data-slot":`textarea`,className:r(`flex field-sizing-content min-h-20 w-full rounded-lg border border-input bg-card px-3 py-2 text-base text-foreground transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/20 dark:aria-invalid:ring-destructive/40`,e),...t})}export{a as t};
|
|
2
|
+
//# sourceMappingURL=textarea-_wcx8Mn1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea-_wcx8Mn1.js","names":["__toESM","require_jsx_runtime","cn","require_react","import_jsx_runtime","Textarea","props","className"],"sources":["../../src/components/ui/textarea.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'flex field-sizing-content min-h-20 w-full rounded-lg border border-input bg-card px-3 py-2 text-base text-foreground transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/20 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n"],"mappings":"4LAGA,SAASK,EAAS,CAAE,YAAW,GAAGC,GAA2C,CAC3E,OACE,EAAAF,EAAA,IAAA,CAAC,WAAD,CACE,YAAU,WACV,UAAWF,EACT,qcACAK,CACF,EACA,GAAID,CACL,CAAA,CAEL"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{H as e,P as t,V as n,bt as r,l as i,s as a,ut as o}from"./cn-DnXL75B0.js";import{B as s}from"./errors-DfoXUVDI.js";import{C as c,S as l}from"./src-D6DABe5J.js";var u={silent:!0},d=(e,n)=>s({queryKey:t.content.list(e,n),queryFn:()=>i.content.list(e,n),placeholderData:o,meta:u}),f=(t,n,r=!0)=>e({...d(t,n),enabled:r}),p=(e,n,r)=>s({queryKey:t.content.entry(e,n,r),queryFn:()=>i.content.get(e,n,r?{locale:r}:{}),staleTime:1/0,meta:u}),m=(t,n,r,i=!0)=>e({...p(t,n,r),enabled:i}),h=(e,n,r)=>(e.setQueryData(t.content.entry(n,r.id,r.locale),r),e.invalidateQueries({predicate:e=>e.queryKey[0]===`content`&&e.queryKey[1]===n&&(e.queryKey[2]===`list`||e.queryKey[2]===`revisions`)})),g=e=>{let t=r();return n({mutationKey:[`content`,e,`create`],meta:u,mutationFn:t=>a(()=>i.content.create(e,t)),onSuccess:n=>h(t,e,n)})},_=e=>{let t=r();return n({mutationKey:[`content`,e,`save`],meta:u,mutationFn:({id:t,input:n})=>a(()=>i.content.update(e,t,n)),onSuccess:n=>h(t,e,n)})},v=e=>e&&e.length>0?{locales:e}:{},y=e=>{let t=r();return n({mutationKey:[`content`,e,`publish`],meta:u,mutationFn:({id:t,locales:n})=>a(()=>i.content.publish(e,t,v(n))),onSuccess:n=>h(t,e,n)})},b=e=>{let t=r();return n({mutationKey:[`content`,e,`unpublish`],meta:u,mutationFn:({id:t,locales:n})=>a(()=>i.content.unpublish(e,t,v(n))),onSuccess:n=>h(t,e,n)})},x=e=>{let t=r();return n({mutationKey:[`content`,e,`duplicate`],mutationFn:t=>a(()=>i.content.duplicate(e,t)),onSuccess:n=>h(t,e,n)})},S=e=>{let o=r();return n({mutationKey:[`content`,e,`delete`],meta:u,mutationFn:t=>a(()=>i.content.remove(e,t)),onSuccess:()=>o.invalidateQueries({queryKey:t.content.model(e)})})},C=(n,r,a,o)=>e({queryKey:t.content.revisions(n,r,a),queryFn:()=>i.content.revisions(n,r,a?{locale:a}:{}),enabled:o,staleTime:0,meta:u}),w=(n,r,a)=>e({queryKey:t.content.revision(n,r,a??``),queryFn:()=>i.content.revision(n,r,a??``),enabled:a!==void 0,staleTime:1/0,meta:u}),T=e=>{let t=r();return n({mutationKey:[`content`,e,`restore`],meta:u,mutationFn:({id:t,revisionId:n,expectedVersion:r})=>a(()=>i.content.restore(e,t,n,r)),onSuccess:n=>h(t,e,n)})},E=e=>c(e),D=e=>{let t=E(e);return t!==void 0&&l.has(t.type)},O=(e,t)=>{let n=E(e),r=n?t[n.apiKey]:void 0;return typeof r==`string`&&r.trim()!==``?r:typeof r==`number`?String(r):void 0},k=e=>e.slice(0,8),A=(e,t,n)=>O(e,t.data)??`${n} · ${k(t.id)}`;export{_,E as a,g as c,m as d,f,C as g,w as h,k as i,S as l,T as m,D as n,d as o,y as p,A as r,p as s,O as t,x as u,b as v};
|
|
2
|
+
//# sourceMappingURL=titles-DyCBLXue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"titles-DyCBLXue.js","names":["useQuery","queryKeys","useMutation","useQueryClient","adminApi","withCsrf","keepPreviousData","queryOptions","effectiveTitleField","TEXT_TITLE_FIELD_TYPES","silent","entryListQueryOptions","modelKey","query","useEntryList","entryQueryOptions","id","locale","useEntry","rememberEntry","queryClient","entry","useCreateEntry","input","useSaveEntry","localesBody","locales","usePublishEntry","useUnpublishEntry","useDuplicateEntry","useDeleteEntry","useRevisions","useRevision","revisionId","useRestoreRevision","expectedVersion","titleFieldOf","model","isSearchable","title","entryTitle","value","data","shortId","labelOf","item","untitled"],"sources":["../../src/api/content.ts","../../src/fields/helpers/titles.ts"],"sourcesContent":["import type { AdminEntry, ContentListQuery, CreateEntryInput, UpdateEntryInput } from '@shapio/client';\nimport {\n keepPreviousData,\n queryOptions,\n useMutation,\n useQuery,\n useQueryClient,\n type QueryClient,\n} from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\n/**\n * Content of any model (`/api/admin/content/:modelKey`). Mutations are silent: the entry form and list\n * show failures themselves (inline issues, the conflict dialog, the \"still referenced\" explanation).\n */\nconst silent = { silent: true } as const;\n\nexport const entryListQueryOptions = (modelKey: string, query: ContentListQuery) =>\n queryOptions({\n queryKey: queryKeys.content.list(modelKey, query),\n queryFn: () => adminApi.content.list(modelKey, query),\n placeholderData: keepPreviousData,\n meta: silent,\n });\n\nexport const useEntryList = (modelKey: string, query: ContentListQuery, enabled = true) =>\n useQuery({ ...entryListQueryOptions(modelKey, query), enabled });\n\nexport const entryQueryOptions = (modelKey: string, id: string, locale: string | undefined) =>\n queryOptions({\n queryKey: queryKeys.content.entry(modelKey, id, locale),\n queryFn: () => adminApi.content.get(modelKey, id, locale ? { locale } : {}),\n // The form owns the values once loaded; it is refreshed explicitly (conflicts, restores, locales).\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useEntry = (modelKey: string, id: string, locale: string | undefined, enabled = true) =>\n useQuery({ ...entryQueryOptions(modelKey, id, locale), enabled });\n\n/** Remembers a write's result as the entry's latest state and refreshes that model's lists. */\nconst rememberEntry = (queryClient: QueryClient, modelKey: string, entry: AdminEntry) => {\n queryClient.setQueryData(queryKeys.content.entry(modelKey, entry.id, entry.locale), entry);\n return queryClient.invalidateQueries({\n predicate: (query) =>\n query.queryKey[0] === 'content' &&\n query.queryKey[1] === modelKey &&\n (query.queryKey[2] === 'list' || query.queryKey[2] === 'revisions'),\n });\n};\n\nexport const useCreateEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'create'],\n meta: silent,\n mutationFn: (input: CreateEntryInput) => withCsrf(() => adminApi.content.create(modelKey, input)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useSaveEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'save'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateEntryInput }) =>\n withCsrf(() => adminApi.content.update(modelKey, id, input)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\n/** Omitting `locales` targets the request's default locale; it is the only form a non-localized model accepts. */\ntype LocalesVariables = { id: string; locales?: string[] };\n\n/** The body never carries an empty `locales` array: the API requires at least one locale when it is sent. */\nconst localesBody = (locales?: string[]) => (locales && locales.length > 0 ? { locales } : {});\n\nexport const usePublishEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'publish'],\n meta: silent,\n mutationFn: ({ id, locales }: LocalesVariables) =>\n withCsrf(() => adminApi.content.publish(modelKey, id, localesBody(locales))),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useUnpublishEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'unpublish'],\n meta: silent,\n mutationFn: ({ id, locales }: LocalesVariables) =>\n withCsrf(() => adminApi.content.unpublish(modelKey, id, localesBody(locales))),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\nexport const useDuplicateEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'duplicate'],\n mutationFn: (id: string) => withCsrf(() => adminApi.content.duplicate(modelKey, id)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n\n/** 409 ENTRY_REFERENCED comes back to the caller, which explains what still points at the entry. */\nexport const useDeleteEntry = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'delete'],\n meta: silent,\n mutationFn: (id: string) => withCsrf(() => adminApi.content.remove(modelKey, id)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.content.model(modelKey) }),\n });\n};\n\nexport const useRevisions = (modelKey: string, id: string, locale: string | undefined, enabled: boolean) =>\n useQuery({\n queryKey: queryKeys.content.revisions(modelKey, id, locale),\n queryFn: () => adminApi.content.revisions(modelKey, id, locale ? { locale } : {}),\n enabled,\n staleTime: 0,\n meta: silent,\n });\n\nexport const useRevision = (modelKey: string, id: string, revisionId: string | undefined) =>\n useQuery({\n queryKey: queryKeys.content.revision(modelKey, id, revisionId ?? ''),\n queryFn: () => adminApi.content.revision(modelKey, id, revisionId ?? ''),\n enabled: revisionId !== undefined,\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useRestoreRevision = (modelKey: string) => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['content', modelKey, 'restore'],\n meta: silent,\n mutationFn: ({\n id,\n revisionId,\n expectedVersion,\n }: {\n id: string;\n revisionId: string;\n expectedVersion: number;\n }) => withCsrf(() => adminApi.content.restore(modelKey, id, revisionId, expectedVersion)),\n onSuccess: (entry) => rememberEntry(queryClient, modelKey, entry),\n });\n};\n","import type { AdminEntryListItem } from '@shapio/client';\nimport {\n effectiveTitleField,\n TEXT_TITLE_FIELD_TYPES,\n type FieldDefinition,\n type ModelDefinition,\n} from '@shapio/schema';\n\n/**\n * The field that labels a model's entries in lists, pickers and relation summaries: the configured title\n * field, or the first text field when none is set (the same rule the API's `q` search uses).\n */\nexport const titleFieldOf = (model: ModelDefinition): FieldDefinition | undefined =>\n effectiveTitleField(model);\n\n/** Whether the list API's `q` search works for this model (it searches the title field, if it is text). */\nexport const isSearchable = (model: ModelDefinition): boolean => {\n const title = titleFieldOf(model);\n return title !== undefined && TEXT_TITLE_FIELD_TYPES.has(title.type);\n};\n\n/** An entry's label: its title field's text, or undefined (callers show \"Untitled\"). */\nexport const entryTitle = (\n model: ModelDefinition,\n data: Readonly<Record<string, unknown>>,\n): string | undefined => {\n const title = titleFieldOf(model);\n const value = title ? data[title.apiKey] : undefined;\n return typeof value === 'string' && value.trim() !== ''\n ? value\n : typeof value === 'number'\n ? String(value)\n : undefined;\n};\n\nexport const shortId = (id: string) => id.slice(0, 8);\n\nexport const labelOf = (\n model: ModelDefinition,\n item: Pick<AdminEntryListItem, 'id' | 'data'>,\n untitled: string,\n) => entryTitle(model, item.data) ?? `${untitled} · ${shortId(item.id)}`;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{H as e,P as t,V as n,bt as r,l as i,s as a}from"./cn-DnXL75B0.js";var o=()=>e({queryKey:t.tokens,queryFn:()=>i.tokens.list(),meta:{silent:!0}}),s=()=>{let e=r();return n({mutationKey:[`tokens`,`create`],meta:{silent:!0},mutationFn:e=>a(()=>i.tokens.create(e)),onSuccess:()=>e.invalidateQueries({queryKey:t.tokens})})},c=()=>{let e=r();return n({mutationKey:[`tokens`,`revoke`],mutationFn:e=>a(()=>i.tokens.revoke(e)),onSettled:()=>e.invalidateQueries({queryKey:t.tokens})})};export{s as n,c as r,o as t};
|
|
2
|
+
//# sourceMappingURL=tokens-CqsxrApC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens-CqsxrApC.js","names":["useQuery","queryKeys","useMutation","useQueryClient","adminApi","withCsrf","useApiTokens","useCreateApiToken","queryClient","input","useRevokeApiToken","id"],"sources":["../../src/api/tokens.ts"],"sourcesContent":["import type { CreateApiTokenInput } from '@shapio/client';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nexport const useApiTokens = () =>\n useQuery({ queryKey: queryKeys.tokens, queryFn: () => adminApi.tokens.list(), meta: { silent: true } });\n\nexport const useCreateApiToken = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['tokens', 'create'],\n meta: { silent: true },\n mutationFn: (input: CreateApiTokenInput) => withCsrf(() => adminApi.tokens.create(input)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.tokens }),\n });\n};\n\nexport const useRevokeApiToken = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['tokens', 'revoke'],\n mutationFn: (id: string) => withCsrf(() => adminApi.tokens.revoke(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.tokens }),\n });\n};\n"],"mappings":"yEAMA,IAAaM,MACXN,EAAS,CAAE,SAAUC,EAAU,OAAQ,YAAeG,EAAS,OAAO,KAAK,EAAG,KAAM,CAAE,OAAQ,EAAK,CAAE,CAAC,EAE3FG,MAA0B,CACrC,IAAMC,EAAcL,EAAe,EACnC,OAAOD,EAAY,CACjB,YAAa,CAAC,SAAU,QAAQ,EAChC,KAAM,CAAE,OAAQ,EAAK,EACrB,WAAa,GAA+BG,MAAeD,EAAS,OAAO,OAAOK,CAAK,CAAC,EACxF,cAAiBD,EAAY,kBAAkB,CAAE,SAAUP,EAAU,MAAO,CAAC,CAC/E,CAAC,CACH,EAEaS,MAA0B,CACrC,IAAMF,EAAcL,EAAe,EACnC,OAAOD,EAAY,CACjB,YAAa,CAAC,SAAU,QAAQ,EAChC,WAAa,GAAeG,MAAeD,EAAS,OAAO,OAAOO,CAAE,CAAC,EACrE,cAAiBH,EAAY,kBAAkB,CAAE,SAAUP,EAAU,MAAO,CAAC,CAC/E,CAAC,CACH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{t as r}from"./cn-DnXL75B0.js";import{I as i,S as a,b as o,v as s,x as c,y as l}from"./InfoHint-DBqcrmZ3.js";import{T as u,_ as d,b as f,d as p,g as m,h,l as g,m as _,v,w as y,y as b}from"./skeleton-DUvclBAr.js";var x=e(t(),1),S=e(n(),1),C=Object.defineProperty,w=(e,t)=>C(e,`name`,{value:t,configurable:!0}),[T,E]=b(`Tooltip`,[a]),D=a(),O=`TooltipProvider`,k=700,A=`tooltip.open`,[j,M]=T(O),N=w(e=>{let{__scopeTooltip:t,delayDuration:n=k,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=x.useRef(!0),s=x.useRef(!1),c=x.useRef(0);return x.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,S.jsx)(j,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:x.useCallback(()=>{r<=0||(window.clearTimeout(c.current),o.current=!1)},[r]),onClose:x.useCallback(()=>{r<=0||(window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r))},[r]),isPointerInTransitRef:s,onPointerInTransitChange:x.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})},`TooltipProvider`),P=`Tooltip`,[ee,F]=T(P),I=w(e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,l=M(P,e.__scopeTooltip),u=D(t),[d,f]=x.useState(null),[p,h]=x.useState(void 0),g=_(),v=x.useRef(0),y=o??l.disableHoverableContent,b=s??l.delayDuration,C=x.useRef(!1),[T,E]=m({prop:r,defaultProp:i??!1,onChange:w(e=>{e?(l.onOpen(),document.dispatchEvent(new CustomEvent(A))):l.onClose(),a?.(e)},`onChange`),caller:P}),O=x.useMemo(()=>T?C.current?`delayed-open`:`instant-open`:`closed`,[T]),k=x.useCallback(()=>{window.clearTimeout(v.current),v.current=0,C.current=!1,E(!0)},[E]),j=x.useCallback(()=>{window.clearTimeout(v.current),v.current=0,E(!1)},[E]),N=x.useCallback(()=>{window.clearTimeout(v.current),v.current=window.setTimeout(()=>{C.current=!0,E(!0),v.current=0},b)},[b,E]);x.useEffect(()=>()=>{v.current&&=(window.clearTimeout(v.current),0)},[]);let F=p??g;return(0,S.jsx)(c,{...u,children:(0,S.jsx)(ee,{scope:t,contentId:F,setContentId:h,open:T,stateAttribute:O,trigger:d,onTriggerChange:f,onTriggerEnter:x.useCallback(()=>{l.isOpenDelayedRef.current?N():k()},[l.isOpenDelayedRef,N,k]),onTriggerLeave:x.useCallback(()=>{y?j():(window.clearTimeout(v.current),v.current=0)},[j,y]),onOpen:k,onClose:j,disableHoverableContent:y,children:n})})},`Tooltip`),L=`TooltipTrigger`,R=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=F(L,n),a=M(L,n),o=D(n),c=x.useRef(null),l=u(t,c,i.onTriggerChange),d=x.useRef(!1),p=x.useRef(!1),m=x.useCallback(()=>d.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener(`pointerup`,m),[m]),(0,S.jsx)(s,{asChild:!0,...o,children:(0,S.jsx)(f.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:l,onPointerMove:v(e.onPointerMove,e=>{e.pointerType!==`touch`&&!p.current&&!a.isPointerInTransitRef.current&&(i.onTriggerEnter(),p.current=!0)}),onPointerLeave:v(e.onPointerLeave,()=>{i.onTriggerLeave(),p.current=!1}),onPointerDown:v(e.onPointerDown,()=>{i.open&&i.onClose(),d.current=!0,document.addEventListener(`pointerup`,m,{once:!0})}),onFocus:v(e.onFocus,()=>{d.current||i.onOpen()}),onBlur:v(e.onBlur,i.onClose),onClick:v(e.onClick,i.onClose)})})},`TooltipTrigger`)),z=`TooltipPortal`,[B,V]=T(z,{forceMount:void 0}),H=w(e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=F(z,t);return(0,S.jsx)(B,{scope:t,forceMount:n,children:(0,S.jsx)(h,{present:n||a.open,children:(0,S.jsx)(g,{asChild:!0,container:i,children:r})})})},`TooltipPortal`),U=`TooltipContent`,te=x.forwardRef(w(function(e,t){let n=V(U,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=F(U,e.__scopeTooltip);return(0,S.jsx)(h,{present:r||o.open,children:o.disableHoverableContent?(0,S.jsx)(K,{side:i,...a,ref:t}):(0,S.jsx)(W,{side:i,...a,ref:t})})},`TooltipContent`)),W=x.forwardRef(w(function(e,t){let n=F(U,e.__scopeTooltip),r=M(U,e.__scopeTooltip),i=x.useRef(null),a=u(t,i),[o,s]=x.useState(null),{trigger:c,onClose:l}=n,d=i.current,{onPointerInTransitChange:f}=r,p=x.useCallback(()=>{s(null),f(!1)},[f]),m=x.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=Y(r,J(r,n.getBoundingClientRect())),a=X(t.getBoundingClientRect()),o=Q([...i,...a]);s(o),f(!0)},[f]);return x.useEffect(()=>()=>p(),[p]),x.useEffect(()=>{if(c&&d){let e=w(e=>m(e,d),`handleTriggerLeave`),t=w(e=>m(e,c),`handleContentLeave`);return c.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[c,d,m,p]),x.useEffect(()=>{if(o){let e=w(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||d?.contains(t),i=!Z(n,o);r?p():i&&(p(),l())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,d,o,l,p]),(0,S.jsx)(K,{...e,ref:a})},`TooltipContentHoverable`)),G=y(`TooltipContent`),K=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,children:r,"aria-label":a,id:s,onEscapeKeyDown:c,onPointerDownOutside:l,...u}=e,f=F(U,n),m=D(n),{onClose:h}=f;x.useEffect(()=>(document.addEventListener(A,h),()=>document.removeEventListener(A,h)),[h]),x.useEffect(()=>{if(f.trigger){let e=w(e=>{e.target instanceof Node&&e.target.contains(f.trigger)&&h()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[f.trigger,h]);let{setContentId:g}=f;return d(()=>(g(s),()=>{g(void 0)}),[s,g]),(0,S.jsx)(p,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:c,onPointerDownOutside:l,onFocusOutside:e=>e.preventDefault(),onDismiss:h,children:(0,S.jsxs)(o,{"data-state":f.stateAttribute,role:a?void 0:`tooltip`,id:a?void 0:f.contentId,...m,...u,ref:t,style:{...u.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,S.jsx)(G,{children:r}),a?(0,S.jsx)(i,{id:f.contentId,role:`tooltip`,children:a}):null]})})},`TooltipContentImpl`)),q=x.forwardRef(w(function(e,t){let{__scopeTooltip:n,...r}=e,i=D(n);return(0,S.jsx)(l,{...i,...r,ref:t})},`TooltipArrow`));function J(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}w(J,`getExitSideFromRect`);function Y(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n})}return r}w(Y,`getPaddedExitPoints`);function X(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}w(X,`getPointsFromRect`);function Z(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}w(Z,`isPointInPolygon`);function Q(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:+(e.y>t.y)),$(t)}w(Q,`getHull`);function $(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}w($,`getHullPresorted`);var ne=N,re=I,ie=R,ae=H,oe=te,se=q;function ce({delayDuration:e=0,...t}){return(0,S.jsx)(ne,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function le({...e}){return(0,S.jsx)(re,{"data-slot":`tooltip`,...e})}function ue({...e}){return(0,S.jsx)(ie,{"data-slot":`tooltip-trigger`,...e})}function de({className:e,sideOffset:t=0,children:n,...i}){return(0,S.jsx)(ae,{children:(0,S.jsxs)(oe,{"data-slot":`tooltip-content`,sideOffset:t,className:r(`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`,e),...i,children:[n,(0,S.jsx)(se,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}export{ue as i,de as n,ce as r,le as t};
|
|
2
|
+
//# sourceMappingURL=tooltip-BMe4HylJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip-BMe4HylJ.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","cn","Root","createPopperScope","Content","Anchor","Root2","Arrow","useComposedRefs","useLayoutEffect2","Primitive","DismissableLayer","useControllableState","Portal$1","useId","createSlottable","createContextScope","import_react","require_react","import_jsx_runtime","__defProp","__name","target","createTooltipContext","createTooltipScope","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","composeEventHandlers","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","Presence","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":"wXACIqC,EAAY,OAAO,eACnBC,GAAU,EAAQ,IAAUD,EAAUE,EAAQ,OAAQ,CAAE,QAAO,aAAc,EAAK,CAAC,EAmBnF,CAACC,EAAsBC,GAAsBR,EAAmB,UAAW,CAC7Eb,CACF,CAAC,EACGsB,EAAiBtB,EAAkB,EACnCuB,EAAgB,kBAChBC,EAAyB,IACzBC,EAAe,eACf,CAACC,EAAgCC,GAA6BP,EAAqBG,CAAa,EAChG3C,EAAkCsC,EAAQ,GAAU,CACtD,GAAM,CACJ,iBACA,gBAAgBM,EAChB,oBAAoB,IACpB,0BAA0B,GAC1B,YACEK,EACEC,EAAAhB,EAAyB,OAAO,EAAI,EACpCiB,EAAAjB,EAA8B,OAAO,EAAK,EAC1CkB,EAAAlB,EAA0B,OAAO,CAAC,EAKxC,OAJAA,EAAM,cAAgB,CACpB,IAAMmB,EAAiBD,EAAkB,QACzC,UAAa,OAAO,aAAaC,CAAc,CACjD,EAAG,CAAC,CAAC,GACkB,EAAAjB,EAAA,IAAA,CACrBU,EACA,CACE,MAAOQ,EACP,mBACA,gBACA,OAAApB,EAAc,gBAAkB,CAC1BqB,GAAqB,IACzB,OAAO,aAAaH,EAAkB,OAAO,EAC7C,EAAiB,QAAU,GAC7B,EAAG,CAACG,CAAiB,CAAC,EACtB,QAAArB,EAAe,gBAAkB,CAC3BqB,GAAqB,IACzB,OAAO,aAAaH,EAAkB,OAAO,EAC7C,EAAkB,QAAU,OAAO,eAC3B,EAAiB,QAAU,GACjCG,CACF,EACF,EAAG,CAACA,CAAiB,CAAC,EACtB,wBACA,yBAAArB,EAAgC,YAAa,GAAc,CACzD,EAAsB,QAAUsB,CAClC,EAAG,CAAC,CAAC,EACL,0BACA,UACF,CACF,CACF,EAAG,iBAAiB,EAChBC,EAAe,UACf,CAACC,GAAwBC,GAAqBnB,EAAqBiB,CAAY,EAC/ExD,EAA0BqC,EAAQ,GAAU,CAC9C,GAAM,CACJ,iBACA,WACA,KAAMuB,EACN,cACA,eACA,wBAAyBC,EACzB,cAAeC,GACbd,EACEe,EAAkBjB,EAA0BU,EAAcR,EAAM,cAAc,EAC9EgB,EAAcvB,EAAeY,CAAc,EAC3C,CAACY,EAASC,GAAAjC,EAAoB,SAAS,IAAI,EAC3C,CAACkC,EAAgBC,GAAAnC,EAAsB,SAAS,IAAK,EAAC,EACtDoC,EAAqBvC,EAAM,EAC3BwC,EAAArC,EAAqB,OAAO,CAAC,EAC7BsC,EAA0BV,GAA+BE,EAAgB,wBACzES,EAAgBV,GAAqBC,EAAgB,cACrDU,EAAAxC,EAA0B,OAAO,EAAK,EACtC,CAACyC,EAAMC,GAAW/C,EAAqB,CAC3C,KAAMgC,EACN,YAAagB,GAAe,GAC5B,SAA0BvC,EAAQ,GAAU,CACtCwC,GACFd,EAAgB,OAAO,EACvB,SAAS,cAAc,IAAI,YAAYnB,CAAY,CAAC,GAEpDmB,EAAgB,QAAQ,EAE1Be,IAAeD,CAAK,CACtB,EAAG,UAAU,EACb,OAAQrB,CACV,CAAC,EACKuB,EAAA9C,EAAuB,YACpByC,EAAOD,EAAkB,QAAU,eAAiB,eAAiB,SAC3E,CAACC,CAAI,CAAC,EACHM,EAAA/C,EAAmB,gBAAkB,CACzC,OAAO,aAAaqC,EAAa,OAAO,EACxC,EAAa,QAAU,EACvB,EAAkB,QAAU,GAC5BK,EAAQ,EAAI,CACd,EAAG,CAACA,CAAO,CAAC,EACNM,EAAAhD,EAAoB,gBAAkB,CAC1C,OAAO,aAAaqC,EAAa,OAAO,EACxC,EAAa,QAAU,EACvBK,EAAQ,EAAK,CACf,EAAG,CAACA,CAAO,CAAC,EACNO,EAAAjD,EAA0B,gBAAkB,CAChD,OAAO,aAAaqC,EAAa,OAAO,EACxC,EAAa,QAAU,OAAO,eAAiB,CAC7C,EAAkB,QAAU,GAC5BK,EAAQ,EAAI,EACZ,EAAa,QAAU,CACzB,EAAGH,CAAa,CAClB,EAAG,CAACA,EAAeG,CAAO,CAAC,EAC3B1C,EAAM,kBACS,CACX,AAEEqC,EAAa,WADb,OAAO,aAAaA,EAAa,OAAO,EACjB,EAE3B,EACC,CAAC,CAAC,EACL,IAAMa,EAAYhB,GAAkBE,EACpC,OAAuB,EAAAlC,EAAA,IAAA,CAAIlC,EAAsB,CAAE,GAAG+D,EAAa,UAA0B,EAAA7B,EAAA,IAAA,CAC3FsB,GACA,CACE,MAAOJ,EACP,YACA,eACA,OACA,iBACA,UACA,gBAAiBa,EACjB,eAAAjC,EAAsB,gBAAkB,CAClC8B,EAAgB,iBAAiB,QAASmB,EAAkB,EAC3DF,EAAW,CAClB,EAAG,CAACjB,EAAgB,iBAAkBmB,EAAmBF,CAAU,CAAC,EACpE,eAAA/C,EAAsB,gBAAkB,CAClCsC,EACFU,EAAY,GAEZ,OAAO,aAAaX,EAAa,OAAO,EACxC,EAAa,QAAU,EAE3B,EAAG,CAACW,EAAaV,CAAuB,CAAC,EACzC,OAAQS,EACR,QAASC,EACT,0BACA,UACF,CACF,CAAE,CAAC,CACL,EAAG,SAAS,EACRG,EAAe,iBACflF,EAAiC+B,EAAM,WACzBI,EAAO,SAAyB,EAAO,EAAc,CACnE,GAAM,CAAE,iBAAgB,GAAGiD,GAAiBtC,EACtCuC,EAAU7B,EAAkB0B,EAAc/B,CAAc,EACxDU,EAAkBjB,EAA0BsC,EAAc/B,CAAc,EACxEW,EAAcvB,EAAeY,CAAc,EAC3CmC,EAAAvD,EAAY,OAAO,IAAI,EACvBwD,EAAejE,EAAgBkE,EAAcF,EAAKD,EAAQ,eAAe,EACzEI,EAAA1D,EAAyB,OAAO,EAAK,EACrC2D,EAAA3D,EAAgC,OAAO,EAAK,EAC5C4D,EAAA5D,EAAwB,gBAAkB,EAAiB,QAAU,GAAO,CAAC,CAAC,EAIpF,OAHAA,EAAM,kBACS,SAAS,oBAAoB,YAAa4D,CAAe,EACrE,CAACA,CAAe,CAAC,GACG,EAAA1D,EAAA,IAAA,CAAIhC,EAAwB,CAAE,QAAS,GAAM,GAAG6D,EAAa,UAA0B,EAAA7B,EAAA,IAAA,CAC5GT,EAAU,OACV,CACE,mBAAoB6D,EAAQ,KAAOA,EAAQ,UAAY,IAAK,GAC5D,aAAcA,EAAQ,eACtB,GAAGD,EACH,IAAKG,EACL,cAAeK,EAAqB9C,EAAM,cAAgB,GAAU,CAC9D+C,EAAM,cAAgB,SACtB,CAACH,EAAwB,SAAW,CAAC7B,EAAgB,sBAAsB,UAC7EwB,EAAQ,eAAe,EACvB,EAAwB,QAAU,GAEtC,CAAC,EACD,eAAgBO,EAAqB9C,EAAM,mBAAsB,CAC/DuC,EAAQ,eAAe,EACvB,EAAwB,QAAU,EACpC,CAAC,EACD,cAAeO,EAAqB9C,EAAM,kBAAqB,CACzDuC,EAAQ,MACVA,EAAQ,QAAQ,EAElB,EAAiB,QAAU,GAC3B,SAAS,iBAAiB,YAAaM,EAAiB,CAAE,KAAM,EAAK,CAAC,CACxE,CAAC,EACD,QAASC,EAAqB9C,EAAM,YAAe,CAC5C2C,EAAiB,SAASJ,EAAQ,OAAO,CAChD,CAAC,EACD,OAAQO,EAAqB9C,EAAM,OAAQuC,EAAQ,OAAO,EAC1D,QAASO,EAAqB9C,EAAM,QAASuC,EAAQ,OAAO,CAC9D,CACF,CAAE,CAAC,CACL,EAAG,gBAAgB,CACrB,EACIS,EAAc,gBACd,CAACC,EAAgBC,GAAoB3D,EAAqByD,EAAa,CACzE,WAAY,IAAK,EACnB,CAAC,EACGG,EAAgC9D,EAAQ,GAAU,CACpD,GAAM,CAAE,iBAAgB,aAAY,WAAU,aAAcW,EACtDuC,EAAU7B,EAAkBsC,EAAa3C,CAAc,EAC7D,OAAuB,EAAAlB,EAAA,IAAA,CAAI8D,EAAgB,CAAE,MAAO5C,EAAgB,aAAY,UAA0B,EAAAlB,EAAA,IAAA,CAAIiE,EAAU,CAAE,QAASC,GAAcd,EAAQ,KAAM,UAA0B,EAAApD,EAAA,IAAA,CAAI/B,EAAiB,CAAE,QAAS,GAAM,YAAW,UAAS,CAAC,CAAE,CAAC,CAAE,CAAC,CAC5P,EAAG,eAAe,EACdkG,EAAe,iBACfjG,GAAiC4B,EAAM,WACzBI,EAAO,SAAyB,EAAO,EAAc,CACnE,IAAMmE,EAAgBN,EAAiBI,EAActD,EAAM,cAAc,EACnE,CAAE,aAAawD,EAAc,WAAY,OAAO,MAAO,GAAGC,GAAiBzD,EAC3EuC,EAAU7B,EAAkB4C,EAActD,EAAM,cAAc,EACpE,OAAuB,EAAAb,EAAA,IAAA,CAAIiE,EAAU,CAAE,QAASC,GAAcd,EAAQ,KAAM,SAAUA,EAAQ,yBAA0C,EAAApD,EAAA,IAAA,CAAIuE,EAAoB,CAAE,OAAM,GAAGD,EAAc,IAAKf,CAAa,CAAC,GAAoB,EAAAvD,EAAA,IAAA,CAAIwE,EAAyB,CAAE,OAAM,GAAGF,EAAc,IAAKf,CAAa,CAAC,CAAE,CAAC,CAC9S,EAAG,gBAAgB,CACrB,EACIiB,EAA0C1E,EAAM,WAA2BI,EAAO,SAAkC,EAAO,EAAc,CAC3I,IAAMkD,EAAU7B,EAAkB4C,EAActD,EAAM,cAAc,EAC9De,EAAkBjB,EAA0BwD,EAActD,EAAM,cAAc,EAC9EwC,EAAAvD,EAAY,OAAO,IAAI,EACvBwD,EAAejE,EAAgBkE,EAAcF,CAAG,EAChD,CAACoB,EAAkBC,GAAA5E,EAA6B,SAAS,IAAI,EAC7D,CAAE,UAAS,WAAYsD,EACvBuB,EAAUtB,EAAI,QACd,CAAE,4BAA6BzB,EAC/BgD,EAAA9E,EAA8B,gBAAkB,CACpD4E,EAAoB,IAAI,EACxBG,EAAyB,EAAK,CAChC,EAAG,CAACA,CAAwB,CAAC,EACvBC,EAAAhF,EAA8B,aACjC,EAAO,IAAgB,CACtB,IAAMiF,EAAgBnB,EAAM,cACtBoB,EAAY,CAAE,EAAGpB,EAAM,QAAS,EAAGA,EAAM,OAAQ,EAEjDqB,EAAmBC,EAAoBF,EAD5BG,EAAoBH,EAAWD,EAAc,sBAAsB,CACrB,CAAC,EAC1DK,EAAoBC,EAAkBC,EAAY,sBAAsB,CAAC,EACzEC,EAAYC,EAAQ,CAAC,GAAGP,EAAkB,GAAGG,CAAiB,CAAC,EACrEV,EAAoBa,CAAS,EAC7BV,EAAyB,EAAI,CAC/B,EACA,CAACA,CAAwB,CAC3B,EAkCA,OAjCA/E,EAAM,kBACS8E,EAAsB,EAClC,CAACA,CAAqB,CAAC,EAC1B9E,EAAM,cAAgB,CACpB,GAAIgC,GAAW6C,EAAS,CACtB,IAAMc,EAAqCvF,EAAQ,GAAU4E,EAAsBlB,EAAOe,CAAO,EAAG,oBAAoB,EAClHe,EAAqCxF,EAAQ,GAAU4E,EAAsBlB,EAAO9B,CAAO,EAAG,oBAAoB,EAGxH,OAFAA,EAAQ,iBAAiB,eAAgB2D,CAAkB,EAC3Dd,EAAQ,iBAAiB,eAAgBe,CAAkB,MAC9C,CACX5D,EAAQ,oBAAoB,eAAgB2D,CAAkB,EAC9Dd,EAAQ,oBAAoB,eAAgBe,CAAkB,CAChE,CACF,CACF,EAAG,CAAC5D,EAAS6C,EAASG,EAAuBF,CAAqB,CAAC,EACnE9E,EAAM,cAAgB,CACpB,GAAI2E,EAAkB,CACpB,IAAMkB,EAA0CzF,EAAQ,GAAU,CAChE,IAAMC,EAASyD,EAAM,OACfgC,EAAkB,CAAE,EAAGhC,EAAM,QAAS,EAAGA,EAAM,OAAQ,EACvDiC,EAAmB/D,GAAS,SAAS3B,CAAM,GAAKwE,GAAS,SAASxE,CAAM,EACxE2F,EAA4B,CAACC,EAAiBH,EAAiBnB,CAAgB,EACjFoB,EACFjB,EAAsB,EACbkB,IACTlB,EAAsB,EACtBoB,EAAQ,EAEZ,EAAG,yBAAyB,EAE5B,OADA,SAAS,iBAAiB,cAAeL,CAAuB,MACnD,SAAS,oBAAoB,cAAeA,CAAuB,CAClF,CACF,EAAG,CAAC7D,EAAS6C,EAASF,EAAkBuB,EAASpB,CAAqB,CAAC,GAChD,EAAA5E,EAAA,IAAA,CAAIuE,EAAoB,CAAE,GAAG1D,EAAO,IAAKyC,CAAa,CAAC,CAChF,EAAG,yBAAyB,CAAC,EACzB2C,EAAYrG,EAAgB,gBAAgB,EAC5C2E,EAAqCzE,EAAM,WAE7BI,EAAO,SAA6B,EAAO,EAAc,CACvE,GAAM,CACJ,iBACA,WACA,aAAcgG,EACd,GAAIC,EACJ,kBACA,uBACA,GAAG7B,GACDzD,EACEuC,EAAU7B,EAAkB4C,EAAcjD,CAAc,EACxDW,EAAcvB,EAAeY,CAAc,EAC3C,CAAE,WAAYkC,EACpBtD,EAAM,eACJ,SAAS,iBAAiBW,EAAcuF,CAAO,MAClC,SAAS,oBAAoBvF,EAAcuF,CAAO,GAC9D,CAACA,CAAO,CAAC,EACZlG,EAAM,cAAgB,CACpB,GAAIsD,EAAQ,QAAS,CACnB,IAAMgD,EAA+BlG,EAAQ,GAAU,CACjD0D,EAAM,kBAAkB,MAAQA,EAAM,OAAO,SAASR,EAAQ,OAAO,GACvE4C,EAAQ,CAEZ,EAAG,cAAc,EAEjB,OADA,OAAO,iBAAiB,SAAUI,EAAc,CAAE,QAAS,EAAK,CAAC,MACpD,OAAO,oBAAoB,SAAUA,EAAc,CAAE,QAAS,EAAK,CAAC,CACnF,CACF,EAAG,CAAChD,EAAQ,QAAS4C,CAAO,CAAC,EAC7B,GAAM,CAAE,gBAAiB5C,EAOzB,OANA9D,OACE2C,EAAakE,CAAM,MACN,CACXlE,EAAa,IAAK,EAAC,CACrB,GACC,CAACkE,EAAQlE,CAAY,CAAC,GACF,EAAAjC,EAAA,IAAA,CACrBR,EACA,CACE,QAAS,GACT,4BAA6B,GAC7B,kBACA,uBACA,eAAiB,GAAUoE,EAAM,eAAe,EAChD,UAAWoC,EACX,UAA0B,EAAAhG,EAAA,KAAA,CACxB7B,EACA,CACE,aAAciF,EAAQ,eACtB,KAAM8C,EAAY,IAAK,GAAI,UAC3B,GAAIA,EAAY,IAAK,GAAI9C,EAAQ,UACjC,GAAGvB,EACH,GAAGyC,EACH,IAAKf,EACL,MAAO,CACL,GAAGe,EAAa,MAGd,2CAA4C,uCAC5C,0CAA2C,sCAC3C,2CAA4C,uCAC5C,gCAAiC,mCACjC,iCAAkC,mCAEtC,EACA,SAAU,EACQ,EAAAtE,EAAA,IAAA,CAAIiG,EAAW,CAAE,UAAS,CAAC,EAC3CC,GAA4B,EAAAlG,EAAA,IAAA,CAAI5B,EAA8B,CAAE,GAAIgF,EAAQ,UAAW,KAAM,UAAW,SAAU8C,CAAU,CAAC,EAAI,IACnI,CACF,CACF,CACF,CACF,CACF,EAAG,oBAAoB,CACzB,EACIG,EAA+BvG,EAAM,WACvBI,EAAO,SAAuB,EAAO,EAAc,CACjE,GAAM,CAAE,iBAAgB,GAAGoG,GAAezF,EACpCgB,EAAcvB,EAAeY,CAAc,EACjD,OAAuB,EAAAlB,EAAA,IAAA,CAAI3B,EAAuB,CAAE,GAAGwD,EAAa,GAAGyE,EAAY,IAAK/C,CAAa,CAAC,CACxG,EAAG,cAAc,CACnB,EACA,SAAS4B,EAAoB,EAAO,EAAM,CACxC,IAAMoB,EAAM,KAAK,IAAIC,EAAK,IAAMC,EAAM,CAAC,EACjCC,EAAS,KAAK,IAAIF,EAAK,OAASC,EAAM,CAAC,EACvCE,EAAQ,KAAK,IAAIH,EAAK,MAAQC,EAAM,CAAC,EACrCG,EAAO,KAAK,IAAIJ,EAAK,KAAOC,EAAM,CAAC,EACzC,OAAQ,KAAK,IAAIF,EAAKG,EAAQC,EAAOC,CAAI,EAAzC,CACE,KAAKA,EACH,MAAO,OACT,KAAKD,EACH,MAAO,QACT,KAAKJ,EACH,MAAO,MACT,KAAKG,EACH,MAAO,SACT,QACE,MAAU,MAAM,aAAa,CACjC,CACF,CACAxG,EAAOiF,EAAqB,qBAAqB,EACjD,SAASD,EAAoB,EAAW,EAAU,EAAU,EAAG,CAC7D,IAAMD,EAAmB,CAAC,EAC1B,OAAQ4B,EAAR,CACE,IAAK,MACH5B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,EACA,MACF,IAAK,SACH7B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,EACA,MACF,IAAK,OACH7B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,EACA,MACF,IAAK,QACH7B,EAAiB,KACf,CAAE,EAAGD,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,EACrD,CAAE,EAAG9B,EAAU,EAAI8B,EAAS,EAAG9B,EAAU,EAAI8B,CAAQ,CACvD,CAEJ,CACA,OAAO7B,CACT,CACA/E,EAAOgF,EAAqB,qBAAqB,EACjD,SAASG,EAAkB,EAAM,CAC/B,GAAM,CAAE,MAAK,QAAO,SAAQ,QAASmB,EACrC,MAAO,CACL,CAAE,EAAGI,EAAM,EAAGL,CAAI,EAClB,CAAE,EAAGI,EAAO,EAAGJ,CAAI,EACnB,CAAE,EAAGI,EAAO,EAAGD,CAAO,EACtB,CAAE,EAAGE,EAAM,EAAGF,CAAO,CACvB,CACF,CACAxG,EAAOmF,EAAmB,mBAAmB,EAC7C,SAASU,EAAiB,EAAO,EAAS,CACxC,GAAM,CAAE,IAAG,KAAMU,EACbM,EAAS,GACb,IAAK,IAAIC,EAAI,EAAGC,EAAIC,EAAQ,OAAS,EAAGF,EAAIE,EAAQ,OAAQ,EAAI,IAAK,CACnE,IAAMC,EAAKD,EAAQF,GACbI,EAAKF,EAAQD,GACbI,EAAKF,EAAG,EACRG,EAAKH,EAAG,EACRI,EAAKH,EAAG,EACRI,EAAKJ,EAAG,EACIE,EAAKG,GAAMD,EAAKC,GAAKC,GAAKH,EAAKF,IAAOI,EAAIH,IAAOE,EAAKF,GAAMD,IAC/D,EAAS,CAACN,EAC3B,CACA,OAAOA,CACT,CACA7G,EAAO6F,EAAkB,kBAAkB,EAC3C,SAASP,EAAQ,EAAQ,CACvB,IAAMmC,EAAYC,EAAO,MAAM,EAQ/B,OAPAD,EAAU,MAAM,EAAG,IACbE,EAAE,EAAIC,EAAE,EAAU,GACbD,EAAE,EAAIC,EAAE,EAAU,EAClBD,EAAE,EAAIC,EAAE,EAAU,GACtB,EAAID,EAAE,EAAIC,EAAE,EAElB,EACMC,EAAiBJ,CAAS,CACnC,CACAzH,EAAOsF,EAAS,SAAS,EACzB,SAASuC,EAAiB,EAAQ,CAChC,GAAIH,EAAO,QAAU,EAAG,OAAOA,EAAO,MAAM,EAC5C,IAAMI,EAAY,CAAC,EACnB,IAAK,IAAIhB,EAAI,EAAGA,EAAIY,EAAO,OAAQ,IAAK,CACtC,IAAMK,EAAIL,EAAOZ,GACjB,KAAOgB,EAAU,QAAU,GAAG,CAC5B,IAAME,EAAIF,EAAUA,EAAU,OAAS,GACjCG,EAAIH,EAAUA,EAAU,OAAS,GACvC,IAAKE,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,KAAOD,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,GAAIH,EAAU,IAAI,OACrE,KACP,CACAA,EAAU,KAAKC,CAAC,CAClB,CACAD,EAAU,IAAI,EACd,IAAMI,EAAY,CAAC,EACnB,IAAK,IAAIpB,EAAIY,EAAO,OAAS,EAAGZ,GAAK,EAAG,IAAK,CAC3C,IAAMiB,EAAIL,EAAOZ,GACjB,KAAOoB,EAAU,QAAU,GAAG,CAC5B,IAAMF,EAAIE,EAAUA,EAAU,OAAS,GACjCD,EAAIC,EAAUA,EAAU,OAAS,GACvC,IAAKF,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,KAAOD,EAAE,EAAIC,EAAE,IAAMF,EAAE,EAAIE,EAAE,GAAIC,EAAU,IAAI,OACrE,KACP,CACAA,EAAU,KAAKH,CAAC,CAClB,CAKE,OAJFG,EAAU,IAAI,EACVJ,EAAU,SAAW,GAAKI,EAAU,SAAW,GAAKJ,EAAU,EAAE,CAAC,IAAMI,EAAU,EAAE,CAAC,GAAKJ,EAAU,EAAE,CAAC,IAAMI,EAAU,EAAE,CAAC,EACpHJ,EAEAA,EAAU,OAAOI,CAAS,CAErC,CACAlI,EAAO6H,EAAkB,kBAAkB,EAC3C,IAAIM,GAAWzK,EACX0K,GAAQzK,EACR0K,GAAUxK,EACVyK,GAASxE,EACTyE,GAAWvK,GACXwK,GAASrC,ECrfb,SAASsC,GAAgB,CACvB,gBAAgB,EAChB,GAAG9H,GACsD,CACzD,OAAO,EAAAb,EAAA,IAAA,CAAC1B,GAAD,CAA2B,YAAU,mBAAkC,gBAAe,GAAIuC,CAAQ,CAAA,CAC3G,CAEA,SAAS+H,GAAQ,CAAE,GAAG/H,GAA6D,CACjF,OAAO,EAAAb,EAAA,IAAA,CAACzB,GAAD,CAAuB,YAAU,UAAU,GAAIsC,CAAQ,CAAA,CAChE,CAEA,SAASgI,GAAe,CAAE,GAAGhI,GAAgE,CAC3F,OAAO,EAAAb,EAAA,IAAA,CAACxB,GAAD,CAA0B,YAAU,kBAAkB,GAAIqC,CAAQ,CAAA,CAC3E,CAEA,SAASiI,GAAe,CACtB,YACA,aAAa,EACb,WACA,GAAGjI,GACqD,CACxD,OACE,EAAAb,EAAA,IAAA,CAACvB,GAAD,CAAA,UACE,EAAAuB,EAAA,KAAA,CAACtB,GAAD,CACE,YAAU,kBACE,aACZ,UAAWI,EACT,kbACAiK,CACF,EACA,GAAIlI,EAPN,SAAA,CASGmI,GACD,EAAAhJ,EAAA,IAAA,CAACrB,GAAD,CAAwB,UAAU,oGAAsG,CAAA,CAChH,CACH,CAAA,CAAA,CAAA,CAE7B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./cn-DnXL75B0.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-DMOHOH6w.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo-2-DMOHOH6w.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":"qCASA,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{H as e,P as t,i as n,j as r,l as i,ut as a}from"./cn-DnXL75B0.js";var o={name:`user-plus`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]};o.node;var s=n(o),c=n=>e({queryKey:t.audit.list(n),queryFn:()=>i.audit.list(n),placeholderData:a,meta:{silent:!0}}),l=[`name`,`title`,`label`,`email`,`filename`,`apiKey`],u=e=>{if(typeof e!=`object`||!e)return;let t=e;for(let e of l){let n=t[e];if(typeof n==`string`&&n.trim()!==``)return n}},d={"admin_user.create":`audit.actions.adminUserCreate`,"admin_user.delete":`audit.actions.adminUserDelete`,"admin_user.password_change":`audit.actions.adminUserPasswordChange`,"admin_user.update":`audit.actions.adminUserUpdate`,"api_token.create":`audit.actions.apiTokenCreate`,"api_token.revoke":`audit.actions.apiTokenRevoke`,"app_auth.refresh_reuse":`audit.actions.appAuthRefreshReuse`,"app_role.create":`audit.actions.appRoleCreate`,"app_role.delete":`audit.actions.appRoleDelete`,"app_role.update":`audit.actions.appRoleUpdate`,"app_user.block":`audit.actions.appUserBlock`,"app_user.unblock":`audit.actions.appUserUnblock`,"app_user.confirm_email":`audit.actions.appUserConfirmEmail`,"app_user.confirmation_resend":`audit.actions.appUserConfirmationResend`,"app_user.delete":`audit.actions.appUserDelete`,"app_user.oauth_link":`audit.actions.appUserOauthLink`,"app_user.password_change":`audit.actions.appUserPasswordChange`,"app_user.password_reset":`audit.actions.appUserPasswordReset`,"app_user.password_reset_request":`audit.actions.appUserPasswordResetRequest`,"app_user.register":`audit.actions.appUserRegister`,"app_user.roles_change":`audit.actions.appUserRolesChange`,"app_user.update":`audit.actions.appUserUpdate`,"assist.alt_text":`audit.actions.assistAltText`,"assist.content_ops":`audit.actions.assistContentOps`,"assist.rewrite":`audit.actions.assistRewrite`,"assist.schema_draft":`audit.actions.assistSchemaDraft`,"assist.summarize":`audit.actions.assistSummarize`,"assist.translate":`audit.actions.assistTranslate`,"auth.login":`audit.actions.authLogin`,"auth.logout":`audit.actions.authLogout`,"auth.password_reset":`audit.actions.authPasswordReset`,"auth.password_reset_request":`audit.actions.authPasswordResetRequest`,"change_set.create":`audit.actions.changeSetCreate`,"change_set.discard":`audit.actions.changeSetDiscard`,"change_set.item_add":`audit.actions.changeSetItemAdd`,"change_set.item_changed_after_review":`audit.actions.changeSetItemChangedAfterReview`,"change_set.item_remove":`audit.actions.changeSetItemRemove`,"change_set.schedule":`audit.actions.changeSetSchedule`,"change_set.schema_draft":`audit.actions.changeSetSchemaDraft`,"change_set.schema_draft_remove":`audit.actions.changeSetSchemaDraftRemove`,"change_set.ship":`audit.actions.changeSetShip`,"change_set.shipping":`audit.actions.changeSetShipping`,"change_set.unschedule":`audit.actions.changeSetUnschedule`,"change_set.update":`audit.actions.changeSetUpdate`,"content.delete":`audit.actions.contentDelete`,"content.publish":`audit.actions.contentPublish`,"content.restore":`audit.actions.contentRestore`,"content.unpublish":`audit.actions.contentUnpublish`,"deployment.retry":`audit.actions.deploymentRetry`,"deployment.trigger":`audit.actions.deploymentTrigger`,"deployment_connection.create":`audit.actions.deploymentConnectionCreate`,"deployment_connection.delete":`audit.actions.deploymentConnectionDelete`,"deployment_connection.update":`audit.actions.deploymentConnectionUpdate`,"invitation.accept":`audit.actions.invitationAccept`,"invitation.create":`audit.actions.invitationCreate`,"invitation.link":`audit.actions.invitationLink`,"invitation.revoke":`audit.actions.invitationRevoke`,"job.retry":`audit.actions.jobRetry`,"locale.create":`audit.actions.localeCreate`,"locale.delete":`audit.actions.localeDelete`,"locale.update":`audit.actions.localeUpdate`,"media.delete":`audit.actions.mediaDelete`,"media.folder.delete":`audit.actions.mediaFolderDelete`,"media.replace":`audit.actions.mediaReplace`,"media.upload":`audit.actions.mediaUpload`,"media.visibility.change":`audit.actions.mediaVisibilityChange`,"preview_token.create":`audit.actions.previewTokenCreate`,"preview_token.revoke":`audit.actions.previewTokenRevoke`,"publishing.schedule":`audit.actions.publishingSchedule`,"publishing.schedule.publish":`audit.actions.publishingSchedulePublish`,"publishing.schedule.unpublish":`audit.actions.publishingScheduleUnpublish`,"publishing.schedule.cancel":`audit.actions.publishingScheduleCancel`,"publishing.schedule.execute":`audit.actions.publishingScheduleExecute`,"role.create":`audit.actions.roleCreate`,"role.delete":`audit.actions.roleDelete`,"role.update":`audit.actions.roleUpdate`,"schema.activate":`audit.actions.schemaActivate`,"schema.change.request":`audit.actions.schemaChangeRequest`,"schema.create":`audit.actions.schemaCreate`,"schema.delete":`audit.actions.schemaDelete`,"schema.settings.update":`audit.actions.schemaSettingsUpdate`,"session.revoke":`audit.actions.sessionRevoke`,"session.revoke_all":`audit.actions.sessionRevokeAll`,"setup.complete":`audit.actions.setupComplete`,"transfer.import":`audit.actions.transferImport`,"webhook.create":`audit.actions.webhookCreate`,"webhook.delete":`audit.actions.webhookDelete`,"webhook.redeliver":`audit.actions.webhookRedeliver`,"webhook.rotate_secret":`audit.actions.webhookRotateSecret`,"webhook.test":`audit.actions.webhookTest`,"webhook.update":`audit.actions.webhookUpdate`},f={admin_invitation:`audit.targets.adminInvitation`,admin_role:`audit.targets.adminRole`,admin_session:`audit.targets.adminSession`,admin_user:`audit.targets.adminUser`,api_token:`audit.targets.apiToken`,app_role:`audit.targets.appRole`,app_user:`audit.targets.appUser`,change_set:`audit.targets.changeSet`,component:`audit.targets.component`,deployment_connection:`audit.targets.deploymentConnection`,entry:`audit.targets.entry`,job:`audit.targets.job`,locale:`audit.targets.locale`,media_asset:`audit.targets.mediaAsset`,media_folder:`audit.targets.mediaFolder`,model:`audit.targets.model`,preview_token:`audit.targets.previewToken`,schemaSettings:`audit.targets.schemaSettings`,webhook:`audit.targets.webhook`},p=e=>Object.hasOwn(d,e),m=e=>Object.hasOwn(f,e),h=()=>{let{t:e}=r();return{actionLabel:t=>p(t)?e(d[t]):void 0,targetLabel:t=>m(t)?e(f[t]):void 0}};export{s as i,u as n,c as r,h as t};
|
|
2
|
+
//# sourceMappingURL=useAuditLabels-CSw_kwLs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuditLabels-CSw_kwLs.js","names":["useQuery","queryKeys","createLucideIcon","useTranslation","adminApi","keepPreviousData","__iconData","UserPlus","useAuditEvents","query","NAME_FIELDS","auditTargetName","metadata","record","field","value","AUDIT_ACTION_LABEL_KEYS","AUDIT_TARGET_LABEL_KEYS","isActionCode","code","isTargetType","type","useAuditLabels","t"],"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/user-plus.mjs","../../src/api/audit.ts","../../src/helpers/auditTargetName.ts","../../src/constants/auditLabels.ts","../../src/hooks/useAuditLabels.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: \"user-plus\",\n size: 24,\n node: [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"8\", y2: \"14\", key: \"1bvyxn\" }],\n [\"line\", { x1: \"22\", x2: \"16\", y1: \"11\", y2: \"11\", key: \"1shjgl\" }]\n ]\n};\n__iconData.node;\nconst UserPlus = createLucideIcon(__iconData);\n\nexport { __iconData, UserPlus as default };\n//# sourceMappingURL=user-plus.mjs.map\n","import type { AuditQuery } from '@shapio/client';\nimport { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { queryKeys } from './queryKeys';\n\nexport const useAuditEvents = (query: AuditQuery) =>\n useQuery({\n queryKey: queryKeys.audit.list(query),\n queryFn: () => adminApi.audit.list(query),\n placeholderData: keepPreviousData,\n meta: { silent: true },\n });\n","/** Metadata fields that name an audit event's target, in order of preference. */\nconst NAME_FIELDS = ['name', 'title', 'label', 'email', 'filename', 'apiKey'] as const;\n\n/** The target's name as the server recorded it in the event's metadata, if it did. */\nexport const auditTargetName = (metadata: unknown): string | undefined => {\n if (typeof metadata !== 'object' || metadata === null) {\n return undefined;\n }\n const record = metadata as Record<string, unknown>;\n for (const field of NAME_FIELDS) {\n const value = record[field];\n if (typeof value === 'string' && value.trim() !== '') {\n return value;\n }\n }\n return undefined;\n};\n","/**\n * Translation keys for the audit action codes and target types the API records (apps/api: `recordAudit` and\n * route `config.audit` declarations). Codes contain dots, which i18next reads as nesting, hence the maps.\n * A code missing here is shown raw.\n */\nexport const AUDIT_ACTION_LABEL_KEYS = {\n 'admin_user.create': 'audit.actions.adminUserCreate',\n 'admin_user.delete': 'audit.actions.adminUserDelete',\n 'admin_user.password_change': 'audit.actions.adminUserPasswordChange',\n 'admin_user.update': 'audit.actions.adminUserUpdate',\n 'api_token.create': 'audit.actions.apiTokenCreate',\n 'api_token.revoke': 'audit.actions.apiTokenRevoke',\n 'app_auth.refresh_reuse': 'audit.actions.appAuthRefreshReuse',\n 'app_role.create': 'audit.actions.appRoleCreate',\n 'app_role.delete': 'audit.actions.appRoleDelete',\n 'app_role.update': 'audit.actions.appRoleUpdate',\n 'app_user.block': 'audit.actions.appUserBlock',\n 'app_user.unblock': 'audit.actions.appUserUnblock',\n 'app_user.confirm_email': 'audit.actions.appUserConfirmEmail',\n 'app_user.confirmation_resend': 'audit.actions.appUserConfirmationResend',\n 'app_user.delete': 'audit.actions.appUserDelete',\n 'app_user.oauth_link': 'audit.actions.appUserOauthLink',\n 'app_user.password_change': 'audit.actions.appUserPasswordChange',\n 'app_user.password_reset': 'audit.actions.appUserPasswordReset',\n 'app_user.password_reset_request': 'audit.actions.appUserPasswordResetRequest',\n 'app_user.register': 'audit.actions.appUserRegister',\n 'app_user.roles_change': 'audit.actions.appUserRolesChange',\n 'app_user.update': 'audit.actions.appUserUpdate',\n 'assist.alt_text': 'audit.actions.assistAltText',\n 'assist.content_ops': 'audit.actions.assistContentOps',\n 'assist.rewrite': 'audit.actions.assistRewrite',\n 'assist.schema_draft': 'audit.actions.assistSchemaDraft',\n 'assist.summarize': 'audit.actions.assistSummarize',\n 'assist.translate': 'audit.actions.assistTranslate',\n 'auth.login': 'audit.actions.authLogin',\n 'auth.logout': 'audit.actions.authLogout',\n 'auth.password_reset': 'audit.actions.authPasswordReset',\n 'auth.password_reset_request': 'audit.actions.authPasswordResetRequest',\n 'change_set.create': 'audit.actions.changeSetCreate',\n 'change_set.discard': 'audit.actions.changeSetDiscard',\n 'change_set.item_add': 'audit.actions.changeSetItemAdd',\n 'change_set.item_changed_after_review': 'audit.actions.changeSetItemChangedAfterReview',\n 'change_set.item_remove': 'audit.actions.changeSetItemRemove',\n 'change_set.schedule': 'audit.actions.changeSetSchedule',\n 'change_set.schema_draft': 'audit.actions.changeSetSchemaDraft',\n 'change_set.schema_draft_remove': 'audit.actions.changeSetSchemaDraftRemove',\n 'change_set.ship': 'audit.actions.changeSetShip',\n 'change_set.shipping': 'audit.actions.changeSetShipping',\n 'change_set.unschedule': 'audit.actions.changeSetUnschedule',\n 'change_set.update': 'audit.actions.changeSetUpdate',\n 'content.delete': 'audit.actions.contentDelete',\n 'content.publish': 'audit.actions.contentPublish',\n 'content.restore': 'audit.actions.contentRestore',\n 'content.unpublish': 'audit.actions.contentUnpublish',\n 'deployment.retry': 'audit.actions.deploymentRetry',\n 'deployment.trigger': 'audit.actions.deploymentTrigger',\n 'deployment_connection.create': 'audit.actions.deploymentConnectionCreate',\n 'deployment_connection.delete': 'audit.actions.deploymentConnectionDelete',\n 'deployment_connection.update': 'audit.actions.deploymentConnectionUpdate',\n 'invitation.accept': 'audit.actions.invitationAccept',\n 'invitation.create': 'audit.actions.invitationCreate',\n 'invitation.link': 'audit.actions.invitationLink',\n 'invitation.revoke': 'audit.actions.invitationRevoke',\n 'job.retry': 'audit.actions.jobRetry',\n 'locale.create': 'audit.actions.localeCreate',\n 'locale.delete': 'audit.actions.localeDelete',\n 'locale.update': 'audit.actions.localeUpdate',\n 'media.delete': 'audit.actions.mediaDelete',\n 'media.folder.delete': 'audit.actions.mediaFolderDelete',\n 'media.replace': 'audit.actions.mediaReplace',\n 'media.upload': 'audit.actions.mediaUpload',\n 'media.visibility.change': 'audit.actions.mediaVisibilityChange',\n 'preview_token.create': 'audit.actions.previewTokenCreate',\n 'preview_token.revoke': 'audit.actions.previewTokenRevoke',\n 'publishing.schedule': 'audit.actions.publishingSchedule',\n 'publishing.schedule.publish': 'audit.actions.publishingSchedulePublish',\n 'publishing.schedule.unpublish': 'audit.actions.publishingScheduleUnpublish',\n 'publishing.schedule.cancel': 'audit.actions.publishingScheduleCancel',\n 'publishing.schedule.execute': 'audit.actions.publishingScheduleExecute',\n 'role.create': 'audit.actions.roleCreate',\n 'role.delete': 'audit.actions.roleDelete',\n 'role.update': 'audit.actions.roleUpdate',\n 'schema.activate': 'audit.actions.schemaActivate',\n 'schema.change.request': 'audit.actions.schemaChangeRequest',\n 'schema.create': 'audit.actions.schemaCreate',\n 'schema.delete': 'audit.actions.schemaDelete',\n 'schema.settings.update': 'audit.actions.schemaSettingsUpdate',\n 'session.revoke': 'audit.actions.sessionRevoke',\n 'session.revoke_all': 'audit.actions.sessionRevokeAll',\n 'setup.complete': 'audit.actions.setupComplete',\n 'transfer.import': 'audit.actions.transferImport',\n 'webhook.create': 'audit.actions.webhookCreate',\n 'webhook.delete': 'audit.actions.webhookDelete',\n 'webhook.redeliver': 'audit.actions.webhookRedeliver',\n 'webhook.rotate_secret': 'audit.actions.webhookRotateSecret',\n 'webhook.test': 'audit.actions.webhookTest',\n 'webhook.update': 'audit.actions.webhookUpdate',\n} as const;\n\nexport const AUDIT_TARGET_LABEL_KEYS = {\n admin_invitation: 'audit.targets.adminInvitation',\n admin_role: 'audit.targets.adminRole',\n admin_session: 'audit.targets.adminSession',\n admin_user: 'audit.targets.adminUser',\n api_token: 'audit.targets.apiToken',\n app_role: 'audit.targets.appRole',\n app_user: 'audit.targets.appUser',\n change_set: 'audit.targets.changeSet',\n component: 'audit.targets.component',\n deployment_connection: 'audit.targets.deploymentConnection',\n entry: 'audit.targets.entry',\n job: 'audit.targets.job',\n locale: 'audit.targets.locale',\n media_asset: 'audit.targets.mediaAsset',\n media_folder: 'audit.targets.mediaFolder',\n model: 'audit.targets.model',\n preview_token: 'audit.targets.previewToken',\n schemaSettings: 'audit.targets.schemaSettings',\n webhook: 'audit.targets.webhook',\n} as const;\n","import { useTranslation } from 'react-i18next';\nimport { AUDIT_ACTION_LABEL_KEYS, AUDIT_TARGET_LABEL_KEYS } from '@/constants/auditLabels';\n\nconst isActionCode = (code: string): code is keyof typeof AUDIT_ACTION_LABEL_KEYS =>\n Object.hasOwn(AUDIT_ACTION_LABEL_KEYS, code);\n\nconst isTargetType = (type: string): type is keyof typeof AUDIT_TARGET_LABEL_KEYS =>\n Object.hasOwn(AUDIT_TARGET_LABEL_KEYS, type);\n\n/**\n * Human labels for audit action codes (\"auth.login\" → \"Signed in\") and target types (\"admin_user\" →\n * \"Admin user\"). Undefined for a code the admin doesn't know yet (a newer server, an extension's route):\n * callers then show the raw code.\n */\nexport const useAuditLabels = () => {\n const { t } = useTranslation();\n return {\n actionLabel: (code: string) => (isActionCode(code) ? t(AUDIT_ACTION_LABEL_KEYS[code]) : undefined),\n targetLabel: (type: string) => (isTargetType(type) ? t(AUDIT_TARGET_LABEL_KEYS[type]) : undefined),\n };\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";var n=e(t(),1),r=()=>{let[e,t]=(0,n.useState)(void 0),[r,i]=(0,n.useState)(!1);return{target:e,open:r,ask:e=>{t(e),i(!0)},onOpenChange:i,close:()=>i(!1)}};export{r as t};
|
|
2
|
+
//# sourceMappingURL=useConfirmTarget-9JmfiY2X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConfirmTarget-9JmfiY2X.js","names":["useState","__toESM","import_react","require_react","useConfirmTarget","target","setTarget","open","setOpen","item"],"sources":["../../src/hooks/useConfirmTarget.ts"],"sourcesContent":["import { useState } from 'react';\n\n/**\n * The item a confirmation dialog is asking about. `target` is undefined while no dialog is open; keeping\n * the last target while the dialog animates out avoids its text flickering.\n */\nexport const useConfirmTarget = <T>() => {\n const [target, setTarget] = useState<T | undefined>(undefined);\n const [open, setOpen] = useState(false);\n return {\n target,\n open,\n ask: (item: T) => {\n setTarget(item);\n setOpen(true);\n },\n onOpenChange: setOpen,\n close: () => setOpen(false),\n };\n};\n"],"mappings":"qGAMaI,MAA4B,CACvC,GAAM,CAACC,EAAQC,IAAA,EAAaN,EAAAA,SAAAA,CAAwB,IAAA,EAAS,EACvD,CAACO,EAAMC,IAAA,EAAWR,EAAAA,SAAAA,CAAS,EAAK,EACtC,MAAO,CACL,SACA,OACA,IAAM,GAAY,CAChBM,EAAUG,CAAI,EACdD,EAAQ,EAAI,CACd,EACA,aAAcA,EACd,UAAaA,EAAQ,EAAK,CAC5B,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{r as n}from"./schema-KXXSPVJn.js";import{V as r}from"./src-D6DABe5J.js";var i=e(t(),1),a=()=>{let{definitions:e,error:t}=n();return{schema:(0,i.useMemo)(()=>{if(!e)return;let t=new Map,n=new Map;for(let{definition:i}of e)r(i)?n.set(i.id,i):t.set(i.id,i);return{models:t,components:n,sortedModels:[...t.values()].sort((e,t)=>e.label.localeCompare(t.label))}},[e]),error:t}},o=(e,t)=>e.sortedModels.find(e=>e.apiKey===t);export{a as n,o as t};
|
|
2
|
+
//# sourceMappingURL=useContentSchema-CS5QQcRk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useContentSchema-CS5QQcRk.js","names":["useMemo","__toESM","useAllDefinitions","isComponentDefinition","import_react","require_react","useContentSchema","definitions","models","components","definition","a","b","findModelByKey","schema","model","modelKey"],"sources":["../../src/features/Content/hooks/useContentSchema.ts"],"sourcesContent":["import { isComponentDefinition, type ComponentDefinition, type ModelDefinition } from '@shapio/schema';\nimport { useMemo } from 'react';\nimport { useAllDefinitions } from '@/api/schema';\n\nexport type ContentSchema = {\n models: ReadonlyMap<string, ModelDefinition>;\n components: ReadonlyMap<string, ComponentDefinition>;\n /** Collections and singletons, in label order (for navigation). */\n sortedModels: readonly ModelDefinition[];\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.\n */\nexport const useContentSchema = (): { schema: ContentSchema | undefined; error: unknown } => {\n const { definitions, error } = useAllDefinitions();\n const schema = useMemo(() => {\n if (!definitions) {\n return undefined;\n }\n const models = new Map<string, ModelDefinition>();\n const components = new Map<string, ComponentDefinition>();\n for (const { definition } of definitions) {\n if (isComponentDefinition(definition)) {\n components.set(definition.id, definition);\n } else {\n models.set(definition.id, definition);\n }\n }\n const sortedModels = [...models.values()].sort((a, b) => a.label.localeCompare(b.label));\n return { models, components, sortedModels };\n }, [definitions]);\n return { schema, error };\n};\n\nexport const findModelByKey = (schema: ContentSchema, modelKey: string): ModelDefinition | undefined =>\n schema.sortedModels.find((model) => model.apiKey === modelKey);\n"],"mappings":"oLAeaM,MAAgF,CAC3F,GAAM,CAAE,cAAa,SAAUJ,EAAkB,EAiBjD,MAAO,CAAE,QAAA,EAhBMF,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACO,EACH,OAEF,IAAMC,EAAS,IAAI,IACbC,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EACvBJ,EAAsBO,CAAU,EAClCD,EAAW,IAAIC,EAAW,GAAIA,CAAU,EAExCF,EAAO,IAAIE,EAAW,GAAIA,CAAU,EAIxC,MAAO,CAAE,SAAQ,aAAY,aADR,CAAC,GAAGF,EAAO,OAAO,CAAC,CAAC,CAAC,MAAM,EAAG,IAAMG,EAAE,MAAM,cAAcC,EAAE,KAAK,CACzD,CAAa,CAC5C,EAAG,CAACL,CAAW,CACN,EAAQ,OAAM,CACzB,EAEaM,GAAkB,EAAuB,IACpDC,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{H as n,P as r,V as i,bt as a,i as o,l as s,s as c,ut as l}from"./cn-DnXL75B0.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=o(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=()=>n({queryKey:r.publishing.deployments.connections,queryFn:()=>s.deployments.connections.list(),refetchInterval:e=>v(e.state.data?.some(e=>e.latestRun?d.has(e.latestRun.status):!1)??!1),meta:_}),b=e=>n({queryKey:r.publishing.deployments.connection(e),queryFn:()=>s.deployments.connections.get(e),refetchInterval:e=>v(e.state.data?.latestRun?d.has(e.state.data.latestRun.status):!1),meta:_}),x=e=>n({queryKey:r.publishing.deployments.runs(e),queryFn:()=>s.deployments.runs.list(e),placeholderData:l,refetchInterval:e=>v(e.state.data?.items.some(e=>d.has(e.status))??!1),meta:_}),S=e=>n({queryKey:r.publishing.deployments.run(e),queryFn:()=>s.deployments.runs.get(e),refetchInterval:e=>v(e.state.data?d.has(e.state.data.status):!1),meta:_}),C=()=>{let e=a();return()=>e.invalidateQueries({queryKey:r.publishing.deployments.all})},w=()=>{let e=C();return i({mutationKey:[`deployments`,`create`],meta:_,mutationFn:e=>c(()=>s.deployments.connections.create(e)),onSuccess:e})},T=()=>{let e=a(),t=C();return i({mutationKey:[`deployments`,`update`],meta:_,mutationFn:({id:e,input:t})=>c(()=>s.deployments.connections.update(e,t)),onSuccess:n=>(e.setQueryData(r.publishing.deployments.connection(n.id),n),t())})},E=()=>{let e=a(),t=C();return i({mutationKey:[`deployments`,`delete`],mutationFn:e=>c(()=>s.deployments.connections.remove(e)),onSuccess:(n,i)=>(e.removeQueries({queryKey:r.publishing.deployments.connection(i)}),t())})},D=()=>i({mutationKey:[`deployments`,`test`],mutationFn:e=>c(()=>s.deployments.connections.test(e))}),O=()=>{let e=C();return i({mutationKey:[`deployments`,`trigger`],mutationFn:e=>c(()=>s.deployments.connections.trigger(e)),onSuccess:e})},k=()=>{let e=C();return i({mutationKey:[`deployments`,`retry`],mutationFn:e=>c(()=>s.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=()=>n({queryKey:r.publishing.webhooks.list,queryFn:()=>s.webhooks.list(),meta:F}),L=()=>n({queryKey:r.publishing.webhooks.events,queryFn:()=>s.webhooks.events(),staleTime:1/0,meta:F}),R=e=>n({queryKey:r.publishing.webhooks.webhook(e),queryFn:()=>s.webhooks.get(e),meta:F}),z=(e,t)=>n({queryKey:r.publishing.webhooks.deliveries(e,t),queryFn:()=>s.webhooks.deliveries(e,{cursor:t,limit:25}),placeholderData:l,refetchInterval:e=>e.state.data?.items.some(e=>f.has(e.status))?u:!1,meta:F}),B=()=>{let e=a();return()=>e.invalidateQueries({queryKey:r.publishing.webhooks.all})},V=()=>{let e=B();return i({mutationKey:[`webhooks`,`create`],meta:F,mutationFn:e=>c(()=>s.webhooks.create(e)),onSuccess:e})},H=()=>{let e=a(),t=B();return i({mutationKey:[`webhooks`,`update`],meta:F,mutationFn:({id:e,input:t})=>c(()=>s.webhooks.update(e,t)),onSuccess:n=>(e.setQueryData(r.publishing.webhooks.webhook(n.id),n),t())})},U=()=>{let e=B();return i({mutationKey:[`webhooks`,`delete`],mutationFn:e=>c(()=>s.webhooks.remove(e)),onSuccess:e})},W=()=>{let e=B();return i({mutationKey:[`webhooks`,`rotateSecret`],mutationFn:e=>c(()=>s.webhooks.rotateSecret(e)),onSuccess:e})},G=()=>{let e=B();return i({mutationKey:[`webhooks`,`test`],mutationFn:e=>c(()=>s.webhooks.test(e)),onSuccess:e})},K=()=>{let e=B();return i({mutationKey:[`webhooks`,`redeliver`],mutationFn:({id:e,deliveryId:t})=>c(()=>s.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-Dt_axwd1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCursorPager-Dt_axwd1.js","names":["silent","useState","__toESM","useQuery","queryKeys","useMutation","useQueryClient","createLucideIcon","adminApi","withCsrf","keepPreviousData","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","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 DeploymentConnection,\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/** 409 when `expectedVersion` is stale: the caller reloads and tells the user. */\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: (connection: DeploymentConnection) => {\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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";var n=e(t(),1),r=(e,t)=>{let[r,i]=(0,n.useState)(e);return(0,n.useEffect)(()=>{let n=setTimeout(()=>i(e),t);return()=>clearTimeout(n)},[e,t]),r};export{r as t};
|
|
2
|
+
//# sourceMappingURL=useDebouncedValue-Dqs3wwhn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDebouncedValue-Dqs3wwhn.js","names":["useState","__toESM","import_react","require_react","useDebouncedValue","debounced","setDebounced","value","timer","delayMs"],"sources":["../../src/hooks/useDebouncedValue.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/** `value`, once it has stopped changing for `delayMs`. */\nexport const useDebouncedValue = <T>(value: T, delayMs: number): T => {\n const [debounced, setDebounced] = useState(value);\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delayMs);\n return () => clearTimeout(timer);\n }, [value, delayMs]);\n return debounced;\n};\n"],"mappings":"qGAGaI,GAAwB,EAAU,IAAuB,CACpE,GAAM,CAACC,EAAWC,IAAA,EAAgBN,EAAAA,SAAAA,CAASO,CAAK,EAKhD,OAJA,EAAAL,EAAA,UAAA,KAAgB,CACd,IAAMM,EAAQ,eAAiBF,EAAaC,CAAK,EAAGE,CAAO,EAC3D,UAAa,aAAaD,CAAK,CACjC,EAAG,CAACD,EAAOE,CAAO,CAAC,EACZJ,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{j as r}from"./cn-DnXL75B0.js";import{t as i}from"./ConfirmDialog-D6rs75TP.js";var a=e(t(),1),o=e(n(),1),s=({dirty:e,pending:t=!1,onOpenChange:n})=>{let{t:s}=r(),[c,l]=(0,a.useState)(!1);return{requestOpenChange:r=>{if(!r&&e&&!t){l(!0);return}n(r)},discardPrompt:(0,o.jsx)(i,{open:c,onOpenChange:l,title:s(`unsaved.title`),description:s(`unsaved.description`),cancelLabel:s(`unsaved.stay`),confirmLabel:s(`unsaved.leave`),destructive:!0,onConfirm:()=>{l(!1),n(!1)}})}};export{s as t};
|
|
2
|
+
//# sourceMappingURL=useDiscardGuard-7rRGpd4q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDiscardGuard-7rRGpd4q.js","names":["useState","_jsx","__toESM","require_jsx_runtime","useTranslation","ConfirmDialog","import_react","require_react","import_jsx_runtime","useDiscardGuard","confirmingDiscard","setConfirmingDiscard","open","dirty","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';\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\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}: UseDiscardGuardOptions): { requestOpenChange: (open: boolean) => void; discardPrompt: ReactNode } => {\n const { t } = useTranslation();\n const [confirmingDiscard, setConfirmingDiscard] = useState(false);\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":"mPAkBaS,GAAmB,CAC9B,QACA,UAAU,GACV,kBACsG,CACtG,GAAM,CAAE,KAAML,EAAe,EACvB,CAACM,EAAmBC,IAAA,EAAwBX,EAAAA,SAAAA,CAAS,EAAK,EAuBhE,MAAO,CAAE,kBAtBkB,GAAkB,CAC3C,GAAI,CAACY,GAAQC,GAAS,CAACC,EAAS,CAC9BH,EAAqB,EAAI,EACzB,MACF,CACAI,EAAaH,CAAI,CACnB,EAgB4B,eAAA,EAd1BX,EAAAA,IAAAA,CAACI,EAAD,CACE,KAAMK,EACN,aAAcC,EACd,MAAOK,EAAE,eAAe,EACxB,YAAaA,EAAE,qBAAqB,EACpC,YAAaA,EAAE,cAAc,EAC7B,aAAcA,EAAE,eAAe,EAC/B,YAAA,GACA,cAAiB,CACfL,EAAqB,EAAK,EAC1BI,EAAa,EAAK,CACpB,CACD,CAEyB,CAAc,CAC5C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{I as r,L as i,P as a,bt as o,i as s,j as c,l,p as u,r as d,s as f,t as p,u as ee}from"./cn-DnXL75B0.js";import{a as te}from"./media-BfDqe_2P.js";import{A as m,O as h,n as g,o as ne,r as re,v as ie}from"./badge-CMox6-v3.js";import{i as ae,n as oe,t as _}from"./RowTitle-sFt6NjO4.js";import{G as se,H as ce,d as v,f as le,o as y,p as ue,t as de}from"./InfoHint-DBqcrmZ3.js";import{N as b,i as x,k as fe,n as S}from"./skeleton-DUvclBAr.js";import{a as pe,i as me,n as he,o as ge,r as C,s as _e,t as ve}from"./select--nGB4WjU.js";import{n as w}from"./ConfirmDialog-D6rs75TP.js";import{t as ye}from"./circle-check-aJ2DW5t4.js";import{t as be}from"./circle-x-BnRBht9z.js";import{n as T,o as E,s as D,t as O}from"./Thumbnail-u8NE5NhQ.js";import{t as k}from"./list-BElvKZw_.js";import{t as A}from"./rotate-ccw-BOTDOdHf.js";import{t as j}from"./search-BcPL1qyc.js";import{a as M,i as N,n as xe,o as P,r as F,s as Se,t as Ce}from"./table-DQzCPm7J.js";import{t as we}from"./useSearchInput-1fDoEtXe.js";import{t as Te}from"./constants-DCtq_UOe.js";import{t as Ee}from"./Panel-6wFe96Gr.js";var I={name:`crosshair`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`22`,x2:`18`,y1:`12`,y2:`12`,key:`l9bcsi`}],[`line`,{x1:`6`,x2:`2`,y1:`12`,y2:`12`,key:`13hhkx`}],[`line`,{x1:`12`,x2:`12`,y1:`6`,y2:`2`,key:`10w3f3`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`18`,key:`15g9kq`}]]};I.node;var L=s(I),R={name:`images`,size:24,node:[[`path`,{d:`m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16`,key:`9kzy35`}],[`path`,{d:`M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2`,key:`1t0f0t`}],[`circle`,{cx:`13`,cy:`7`,r:`1`,fill:`currentColor`,key:`1obus6`}],[`rect`,{x:`8`,y:`2`,width:`14`,height:`14`,rx:`2`,key:`1gvhby`}]]};R.node;var z=s(R),B={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};B.node;var V=s(B),H={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};H.node;var U=s(H),W=e(t(),1),G=e(n(),1),K=100,De={x:.5,y:.5},q=e=>Math.min(1,Math.max(0,e)),Oe=({imageUrl:e,value:t,onChange:n})=>{let{t:r}=c(),i=(0,W.useId)(),a=t??De,o=e=>{let t=e.currentTarget.getBoundingClientRect();n({x:q((e.clientX-t.left)/t.width),y:q((e.clientY-t.top)/t.height)})},s=(e,t)=>{let r=Number(t);t!==``&&Number.isFinite(r)&&n({...a,[e]:q(r/K)})};return(0,G.jsxs)(ue,{"aria-labelledby":`${i}-title`,children:[(0,G.jsxs)(le,{variant:`label`,className:`flex items-center gap-1`,children:[(0,G.jsx)(`span`,{id:`${i}-title`,children:r(`media.focal.title`)}),(0,G.jsx)(de,{about:r(`media.focal.title`),children:r(`media.focal.hint`)})]}),(0,G.jsxs)(`div`,{"aria-hidden":`true`,onClick:o,className:`relative w-fit max-w-full cursor-crosshair overflow-hidden rounded-lg border`,style:{"--focal-x":`${a.x*K}%`,"--focal-y":`${a.y*K}%`},children:[(0,G.jsx)(`img`,{src:e,alt:``,className:`block max-h-64 w-auto`,draggable:!1}),t?(0,G.jsx)(`span`,{className:`absolute top-[var(--focal-y)] left-[var(--focal-x)] flex size-6 -translate-1/2 items-center justify-center rounded-full border-2 border-background bg-primary text-primary-foreground shadow`,children:(0,G.jsx)(L,{className:`size-3.5`})}):null]}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,G.jsxs)(y,{className:`w-28`,children:[(0,G.jsx)(v,{htmlFor:`${i}-x`,children:r(`media.focal.x`)}),(0,G.jsx)(S,{id:`${i}-x`,type:`number`,min:0,max:K,step:1,value:t?Math.round(t.x*K):``,placeholder:r(`media.focal.unset`),onChange:e=>s(`x`,e.target.value)})]}),(0,G.jsxs)(y,{className:`w-28`,children:[(0,G.jsx)(v,{htmlFor:`${i}-y`,children:r(`media.focal.y`)}),(0,G.jsx)(S,{id:`${i}-y`,type:`number`,min:0,max:K,step:1,value:t?Math.round(t.y*K):``,placeholder:r(`media.focal.unset`),onChange:e=>s(`y`,e.target.value)})]}),(0,G.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,disabled:!t,onClick:()=>n(null),children:r(`media.focal.clear`)})]})]})},ke=(e,t,n)=>{let r=t===void 0?-1:e.indexOf(t),i=e.indexOf(n);if(r!==-1&&i!==-1)return e.slice(Math.min(r,i),Math.max(r,i)+1)},J=(e,t)=>{let n=(0,W.useRef)(void 0);return{select:({id:r,checked:i,shiftKey:a})=>{let o=a?ke(e,n.current,r):void 0;if(o)for(let e of o)t(e,!0);else t(r,i);n.current=r}}},Ae=({asset:e,selected:t,selectable:n,active:r,onSelect:i,onOpen:a})=>{let{t:o}=c(),s=E[e.status];return(0,G.jsxs)(`li`,{className:p(`group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input`,(t||r)&&`border-primary ring-2 ring-primary hover:border-primary`),children:[(0,G.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.shiftKey&&n){i(!t,!0);return}a()},className:`flex w-full flex-col text-left outline-none`,"aria-label":o(`media.openDetails`,{name:e.filename}),children:[(0,G.jsx)(O,{asset:e,className:`aspect-square w-full border-b`}),(0,G.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5 px-3 py-2.5`,children:[(0,G.jsx)(`span`,{className:`truncate text-sm font-medium`,title:e.filename,children:e.filename}),(0,G.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground`,children:[(0,G.jsxs)(`span`,{className:`truncate`,children:[T(e.filename,e.mimeType),` · `,D(e.sizeBytes)]}),e.visibility===`private`?(0,G.jsx)(m,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):null]})]})]}),e.status===`ready`?null:(0,G.jsx)(g,{tone:s.tone,label:o(s.labelKey),size:`sm`,className:`pointer-events-none absolute top-2 right-2`}),n?(0,G.jsx)(w,{checked:t,onClick:e=>{e.shiftKey&&(e.preventDefault(),i(!t,!0))},onCheckedChange:e=>i(e===!0,!1),"aria-label":o(`media.select`,{name:e.filename}),className:`absolute top-2 left-2 bg-card`}):null]})},je=({assets:e,selected:t,selectable:n,activeId:r,onSelectChange:i,onOpen:a})=>{let{t:o}=c(),s=J(e.map(e=>e.id),i);return(0,G.jsx)(`ul`,{"aria-label":o(`media.assetsLabel`,{count:e.length}),className:`grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4`,children:e.map(e=>(0,G.jsx)(Ae,{asset:e,selected:t.has(e.id),selectable:n,active:e.id===r,onSelect:(t,n)=>s.select({id:e.id,checked:t,shiftKey:n}),onOpen:()=>a(e)},e.id))})},Me=({assets:e,selected:t,selectable:n,onSelectChange:r,onOpen:i})=>{let{t:a}=c(),o=J(e.map(e=>e.id),r);return(0,G.jsx)(Se,{children:(0,G.jsxs)(Ce,{children:[(0,G.jsx)(M,{children:(0,G.jsxs)(P,{children:[n?(0,G.jsx)(N,{className:`w-10`,children:(0,G.jsx)(`span`,{className:`sr-only`,children:a(`media.selection`)})}):null,(0,G.jsx)(N,{children:a(`media.fields.filename`)}),(0,G.jsx)(N,{children:a(`media.fields.type`)}),(0,G.jsx)(N,{className:`text-right`,children:a(`media.fields.size`)}),(0,G.jsx)(N,{children:a(`media.fields.status`)}),(0,G.jsx)(N,{children:a(`media.fields.uploaded`)})]})}),(0,G.jsx)(xe,{children:e.map(e=>{let r=E[e.status],s=t.has(e.id);return(0,G.jsxs)(P,{"data-state":s?`selected`:void 0,children:[n?(0,G.jsx)(F,{children:(0,G.jsx)(w,{checked:s,onClick:t=>{t.shiftKey&&(t.preventDefault(),o.select({id:e.id,checked:!s,shiftKey:!0}))},onCheckedChange:t=>o.select({id:e.id,checked:t===!0,shiftKey:!1}),"aria-label":a(`media.select`,{name:e.filename})})}):null,(0,G.jsx)(F,{className:`max-w-96`,children:(0,G.jsxs)(`span`,{className:`flex min-w-0 items-center gap-3`,children:[(0,G.jsx)(O,{asset:e,className:`size-8 shrink-0 rounded-md`}),(0,G.jsx)(_,{asChild:!0,className:`min-w-0 truncate text-left`,children:(0,G.jsx)(`button`,{type:`button`,onClick:()=>i(e),children:e.filename})}),e.visibility===`private`?(0,G.jsx)(m,{role:`img`,"aria-label":a(`media.visibility.private`),className:`size-3.5 shrink-0 text-muted-foreground`}):null]})}),(0,G.jsx)(F,{className:`text-muted-foreground`,title:e.mimeType,children:T(e.filename,e.mimeType)}),(0,G.jsx)(F,{className:`text-right tabular-nums`,children:D(e.sizeBytes)}),(0,G.jsx)(F,{children:(0,G.jsx)(g,{tone:r.tone,label:a(r.labelKey),size:`sm`})}),(0,G.jsx)(F,{className:`whitespace-nowrap`,title:oe(e.createdAt),children:ae(e.createdAt)})]},e.id)})})]})})},Ne=({query:e,filtered:t,view:n,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s})=>{let{t:l}=c(),u=te(e);if(u.isPending)return(0,G.jsx)(ie,{rows:4});if(u.isError)return(0,G.jsx)(re,{error:u.error,onRetry:()=>void u.refetch()});let d=u.data.pages.flatMap(e=>e.items);if(d.length===0){let n=t||e.folder!==void 0;return(0,G.jsx)(ne,{icon:z,size:n?`panel`:`page`,title:l(t?`media.emptyFiltered`:n?`media.emptyFolder`:`media.empty`)})}return(0,G.jsxs)(`div`,{className:`space-y-4`,children:[n===`grid`?(0,G.jsx)(je,{assets:d,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s}):(0,G.jsx)(Me,{assets:d,selected:r,selectable:i,onSelectChange:o,onOpen:s}),u.hasNextPage?(0,G.jsx)(`div`,{className:`flex justify-center`,children:(0,G.jsx)(x,{variant:`outline`,disabled:u.isFetchingNextPage,"aria-busy":u.isFetchingNextPage||void 0,onClick:()=>void u.fetchNextPage(),children:u.isFetchingNextPage?l(`common.loading`):l(`media.loadMore`)})}):null]})},Y=`all`,Pe={image:`media.types.image`,video:`media.types.video`,audio:`media.types.audio`,pdf:`media.types.pdf`},Fe=({query:e,type:t,view:n,onQueryChange:r,onTypeChange:i,onViewChange:a})=>{let{t:o}=c(),{text:s,setText:l}=we(e,r);return(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,G.jsxs)(`div`,{className:`relative min-w-48 flex-1`,children:[(0,G.jsx)(j,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,G.jsx)(S,{type:`search`,value:s,onChange:e=>l(e.target.value),"aria-label":o(`media.search`),placeholder:o(`media.searchPlaceholder`),inputSize:`sm`,className:`pl-8`})]}),(0,G.jsxs)(ve,{value:t??Y,onValueChange:e=>i(e===Y?void 0:e),children:[(0,G.jsx)(me,{size:`sm`,"aria-label":o(`media.typeFilter`),className:`w-36`,children:(0,G.jsx)(pe,{})}),(0,G.jsxs)(he,{children:[(0,G.jsx)(C,{value:Y,children:o(`media.types.all`)}),Te.map(e=>(0,G.jsx)(C,{value:e,children:o(Pe[e])},e))]})]}),(0,G.jsxs)(`div`,{role:`group`,"aria-label":o(`media.view`),className:`flex h-9 items-center gap-0.5 rounded-lg border border-input px-px`,children:[(0,G.jsx)(x,{variant:n===`grid`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`grid`,"aria-label":o(`media.viewGrid`),onClick:()=>a(`grid`),children:(0,G.jsx)(V,{"aria-hidden":`true`})}),(0,G.jsx)(x,{variant:n===`list`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`list`,"aria-label":o(`media.viewList`),onClick:()=>a(`list`),children:(0,G.jsx)(k,{"aria-hidden":`true`})})]})]})},Ie=({label:e,multiple:t=!0,onFiles:n,...r})=>{let i=(0,W.useRef)(null);return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(x,{...r,onClick:()=>i.current?.click(),children:[(0,G.jsx)(U,{"aria-hidden":`true`}),e]}),(0,G.jsx)(`input`,{ref:i,type:`file`,multiple:t,tabIndex:-1,"aria-hidden":`true`,className:`sr-only`,onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,t.length>0&&n(t)}})]})},X=u()(e=>({items:[],add:t=>e(e=>({items:[...e.items,t]})),update:(t,n)=>e(e=>({items:e.items.map(e=>e.id===t?{...e,...n}:e)})),remove:t=>e(e=>({items:e.items.filter(e=>e.id!==t)})),clearFinished:()=>e(e=>({items:e.items.filter(e=>e.status!==`done`)}))})),Z=class extends Error{status;body;constructor(e,t){super(`Upload failed with status ${e}`),this.name=`UploadTransferError`,this.status=e,this.body=t}},Le=({url:e,form:t,onProgress:n,signal:r})=>new Promise((i,a)=>{let o=new XMLHttpRequest;o.open(`POST`,e),o.withCredentials=!1,o.upload.onprogress=e=>{e.lengthComputable&&e.total>0&&n(e.loaded/e.total)},o.onload=()=>{if(o.status>=200&&o.status<300){n(1),i();return}a(new Z(o.status,o.responseText))},o.onerror=()=>a(new Z(0,``)),o.onabort=()=>a(new DOMException(`Upload cancelled`,`AbortError`)),r?.addEventListener(`abort`,()=>o.abort(),{once:!0}),o.send(t)}),Re=e=>e instanceof Z?e.status===0?b.t(`media.upload.unreachable`):e.status===413||/EntityTooLarge/.test(e.body)?b.t(`errors.codes.FILE_TOO_LARGE`):b.t(`media.upload.transferFailed`,{status:e.status}):fe(e),Q=100,ze=({item:e,onRetry:t,onDismiss:n})=>{let{t:r}=c(),i=Math.round(e.progress*Q),a=e.status===`uploading`?r(`media.upload.uploading`,{percent:i}):e.status===`confirming`?r(`media.upload.checking`):e.status===`done`?r(`media.upload.done`):Re(e.error);return(0,G.jsxs)(`li`,{className:`flex items-start gap-3 px-5 py-2.5`,children:[(0,G.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:e.status===`done`?(0,G.jsx)(ye,{"aria-hidden":`true`,className:`size-4 text-success`}):e.status===`failed`?(0,G.jsx)(be,{"aria-hidden":`true`,className:`size-4 text-destructive`}):(0,G.jsx)(d,{"aria-hidden":`true`,className:`size-4 animate-spin text-muted-foreground motion-reduce:animate-none`})}),(0,G.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,G.jsxs)(`p`,{className:`flex items-baseline gap-2 text-sm`,children:[(0,G.jsx)(`span`,{className:`truncate font-medium`,children:e.file.name}),(0,G.jsx)(`span`,{className:`shrink-0 text-meta text-muted-foreground`,children:D(e.file.size)})]}),e.status===`uploading`||e.status===`confirming`?(0,G.jsx)(`div`,{role:`progressbar`,"aria-label":r(`media.upload.progress`,{name:e.file.name}),"aria-valuemin":0,"aria-valuemax":Q,"aria-valuenow":i,className:`h-1.5 overflow-hidden rounded-full bg-muted`,style:{"--upload-progress":`${i}%`},children:(0,G.jsx)(`div`,{className:`h-full w-[var(--upload-progress)] bg-primary transition-[width]`})}):null,(0,G.jsx)(`p`,{className:p(`text-meta`,e.status===`failed`?`text-destructive`:`text-muted-foreground`),children:a})]}),e.status===`failed`?(0,G.jsx)(x,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.retry`,{name:e.file.name}),onClick:t,children:(0,G.jsx)(A,{"aria-hidden":`true`})}):null,e.status===`failed`||e.status===`done`?(0,G.jsx)(x,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.dismiss`,{name:e.file.name}),onClick:n,children:(0,G.jsx)(h,{"aria-hidden":`true`})}):null]})},Be=({onRetry:e,onDismiss:t})=>{let{t:n}=c(),r=X(e=>e.items),i=X(e=>e.clearFinished),[a,o]=(0,W.useState)(!1);if(r.length===0)return null;let s=r.filter(e=>e.status===`uploading`||e.status===`confirming`).length,l=r.filter(e=>e.status===`failed`).length,u=r.length-s-l,d=s===0&&l===0,f=!d||a;return(0,G.jsx)(Ee,{title:n(`media.upload.queueTitle`),titleAs:`h2`,flush:f,actions:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-meta text-muted-foreground`,children:d?n(`media.upload.doneSummary`,{count:u}):n(`media.upload.summary`,{active:s,failed:l})}),d?(0,G.jsx)(x,{variant:`ghost`,size:`icon-sm`,"aria-expanded":f,"aria-label":n(f?`media.upload.hideFinished`:`media.upload.showFinished`),onClick:()=>o(e=>!e),children:f?(0,G.jsx)(ge,{"aria-hidden":`true`}):(0,G.jsx)(_e,{"aria-hidden":`true`})}):null,u>0?(0,G.jsx)(x,{variant:`ghost`,size:`sm`,onClick:i,children:n(`media.upload.clearFinished`)}):null]}),bodyClassName:f?void 0:`hidden`,children:f?(0,G.jsx)(`ul`,{className:`max-h-64 divide-y overflow-y-auto`,children:r.map(n=>(0,G.jsx)(ze,{item:n,onRetry:()=>e(n.id),onDismiss:()=>t(n.id)},n.id))}):null})},Ve=`application/octet-stream`,He=e=>{let t={filename:e.file.name,mimeType:e.file.type||Ve,sizeBytes:e.file.size};return f(()=>e.replaceAssetId?l.media.assets.replace(e.replaceAssetId,t):l.media.uploads.create({...t,folderId:e.folderId,visibility:e.visibility}))},$=async(e,t,n)=>{let a=await He(e);return await Le({url:i(a,ee()),form:r(a,e.file,e.file.name),onProgress:t}),n(),f(()=>l.media.uploads.confirm(a.grantId))},Ue=()=>{let e=o(),{add:t,update:n,remove:r}=X.getState(),i=(0,W.useCallback)(async t=>{n(t.id,{status:`uploading`,progress:0,error:void 0});try{let e=await $(t,e=>n(t.id,{progress:e}),()=>n(t.id,{status:`confirming`}));n(t.id,{status:`done`,assetId:e.id}),t.replaceAssetId&&se.success(b.t(`media.upload.replaced`,{name:t.file.name}))}catch(e){ce(e,`uploading ${t.file.name}`),n(t.id,{status:`failed`,error:e})}finally{await e.invalidateQueries({queryKey:a.media.all})}},[e,n]);return{enqueue:(0,W.useCallback)((e,n)=>{for(let r of e){let e={id:crypto.randomUUID(),file:r,folderId:n.folderId,visibility:n.visibility,replaceAssetId:n.replaceAssetId,status:`uploading`,progress:0,error:void 0,assetId:void 0};t(e),i(e)}},[t,i]),retry:(0,W.useCallback)(e=>{let t=X.getState().items.find(t=>t.id===e);t&&i(t)},[i]),dismiss:r,uploadOne:(0,W.useCallback)(async t=>{try{let n=await $({file:t,folderId:null,visibility:`public`,replaceAssetId:void 0},()=>void 0,()=>void 0);return e.setQueryData(a.media.asset(n.id),n),{id:n.id,alt:n.alt||null}}finally{await e.invalidateQueries({queryKey:a.media.all})}},[e])}};export{Ne as a,V as c,Fe as i,z as l,Be as n,Oe as o,Ie as r,U as s,Ue as t,L as u};
|
|
2
|
+
//# sourceMappingURL=useMediaUploader-CBUcNW6d.js.map
|