@shapio/cms 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/assets/{AssetTile-DWaHjfcU.js → AssetTile-CaYPqR_F.js} +2 -2
- package/dist/admin/assets/{AssetTile-DWaHjfcU.js.map → AssetTile-CaYPqR_F.js.map} +1 -1
- package/dist/admin/assets/{AssistError-CYV_H4uu.js → AssistError-drmpXSbS.js} +2 -2
- package/dist/admin/assets/{AssistError-CYV_H4uu.js.map → AssistError-drmpXSbS.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-BRKp5YAK.js → BlockMenuItems-D-jZ0oaU.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-BRKp5YAK.js.map → BlockMenuItems-D-jZ0oaU.js.map} +1 -1
- package/dist/admin/assets/{Body-CdlxJrnW.js → Body-Gn_z2KPN.js} +2 -2
- package/dist/admin/assets/{Body-CdlxJrnW.js.map → Body-Gn_z2KPN.js.map} +1 -1
- package/dist/admin/assets/Builder-DyCcikfS.js +2 -0
- package/dist/admin/assets/Builder-DyCcikfS.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-h7SDbh8e.js → CodeEditor-CzRU6och.js} +2 -2
- package/dist/admin/assets/{CodeEditor-h7SDbh8e.js.map → CodeEditor-CzRU6och.js.map} +1 -1
- package/dist/admin/assets/{ConfirmDialog-Dq6IrmS9.js → ConfirmDialog-DZRJfdvH.js} +2 -2
- package/dist/admin/assets/{ConfirmDialog-Dq6IrmS9.js.map → ConfirmDialog-DZRJfdvH.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-BiMHd8OL.js → CopyButton-h4HYhnYp.js} +2 -2
- package/dist/admin/assets/{CopyButton-BiMHd8OL.js.map → CopyButton-h4HYhnYp.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-CXI-RhTJ.js → CursorPager-H4SpVYw7.js} +2 -2
- package/dist/admin/assets/{CursorPager-CXI-RhTJ.js.map → CursorPager-H4SpVYw7.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-xUrKyqHx.js → ExternalLink-BNq7nAYL.js} +2 -2
- package/dist/admin/assets/{ExternalLink-xUrKyqHx.js.map → ExternalLink-BNq7nAYL.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-D_Ccn0US.js → FocalPoint-CSeKI4Iw.js} +2 -2
- package/dist/admin/assets/{FocalPoint-D_Ccn0US.js.map → FocalPoint-CSeKI4Iw.js.map} +1 -1
- package/dist/admin/assets/Form-DF_YmR1G.js +2 -0
- package/dist/admin/assets/{Form-DKfQ6_lP.js.map → Form-DF_YmR1G.js.map} +1 -1
- package/dist/admin/assets/{FormCheckboxGroup-CNexUHvc.js → FormCheckboxGroup-V3IKrvzc.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-CNexUHvc.js.map → FormCheckboxGroup-V3IKrvzc.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-Bz09LqOn.js → FormRadioGroup-DIv-MYgn.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-Bz09LqOn.js.map → FormRadioGroup-DIv-MYgn.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-rX_rC7NA.js → FormSelectField-CUhaPIMY.js} +2 -2
- package/dist/admin/assets/{FormSelectField-rX_rC7NA.js.map → FormSelectField-CUhaPIMY.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-B0wQTcF3.js → FormSwitchField-DW8ysyk_.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-B0wQTcF3.js.map → FormSwitchField-DW8ysyk_.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-CQ6wnIlF.js → FormTextareaField-DbqZ-MwI.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-CQ6wnIlF.js.map → FormTextareaField-DbqZ-MwI.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-BPZ7Qd6n.js → HintedLabel-BlLtqVVz.js} +2 -2
- package/dist/admin/assets/{HintedLabel-BPZ7Qd6n.js.map → HintedLabel-BlLtqVVz.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-2HZJCzwW.js → InfoHint-bYMd_t0J.js} +2 -2
- package/dist/admin/assets/{InfoHint-2HZJCzwW.js.map → InfoHint-bYMd_t0J.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-DBjeJAgk.js → InsertMenuItem-D2HGERzb.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-DBjeJAgk.js.map → InsertMenuItem-D2HGERzb.js.map} +1 -1
- package/dist/admin/assets/{LinkTabs-uqCcqqdx.js → LinkTabs-ByB2eCIr.js} +2 -2
- package/dist/admin/assets/{LinkTabs-uqCcqqdx.js.map → LinkTabs-ByB2eCIr.js.map} +1 -1
- package/dist/admin/assets/{Match-CH4OI7xo.js → Match-GDx_orOH.js} +2 -2
- package/dist/admin/assets/{Match-CH4OI7xo.js.map → Match-GDx_orOH.js.map} +1 -1
- package/dist/admin/assets/{QueryView-UMDuxj-g.js → QueryView-UBO-U5Wo.js} +2 -2
- package/dist/admin/assets/{QueryView-UMDuxj-g.js.map → QueryView-UBO-U5Wo.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-D_mY8BQv.js → RadioTile-CJbIIV8t.js} +2 -2
- package/dist/admin/assets/{RadioTile-D_mY8BQv.js.map → RadioTile-CJbIIV8t.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-jy6R2FE-.js → RichTextField-M7HyUhYF.js} +5 -5
- package/dist/admin/assets/{RichTextField-jy6R2FE-.js.map → RichTextField-M7HyUhYF.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-DuN-jQxy.js → RowTitle-DoxDM1XL.js} +2 -2
- package/dist/admin/assets/{RowTitle-DuN-jQxy.js.map → RowTitle-DoxDM1XL.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-TM7VYAeY.js → SecretReveal-kCkLH5jg.js} +2 -2
- package/dist/admin/assets/{SecretReveal-TM7VYAeY.js.map → SecretReveal-kCkLH5jg.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-DcbEGwSL.js → SharedGlyph-D1OMHXPf.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-DcbEGwSL.js.map → SharedGlyph-D1OMHXPf.js.map} +1 -1
- package/dist/admin/assets/StepList-BIQjDaWQ.js +2 -0
- package/dist/admin/assets/{StepList-B4I59Yl_.js.map → StepList-BIQjDaWQ.js.map} +1 -1
- package/dist/admin/assets/Structure-CO4aJZVP.js +2 -0
- package/dist/admin/assets/{Structure-BYK71uPq.js.map → Structure-CO4aJZVP.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-Ccx9PJyM.js → SubNavLink-CPJFIt1j.js} +2 -2
- package/dist/admin/assets/{SubNavLink-Ccx9PJyM.js.map → SubNavLink-CPJFIt1j.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-Vvg9XEqL.js → SuggestAltButton-CbRUxD5s.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-Vvg9XEqL.js.map → SuggestAltButton-CbRUxD5s.js.map} +1 -1
- package/dist/admin/assets/{TextLink-_2c_cSwP.js → TextLink-DnrMaF2F.js} +2 -2
- package/dist/admin/assets/{TextLink-_2c_cSwP.js.map → TextLink-DnrMaF2F.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-B1iRlbxI.js → Thumbnail-D1XuDElk.js} +2 -2
- package/dist/admin/assets/{Thumbnail-B1iRlbxI.js.map → Thumbnail-D1XuDElk.js.map} +1 -1
- package/dist/admin/assets/{UnsavedChangesGuard-CrtHd2la.js → UnsavedChangesGuard-C1n7egF6.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-CrtHd2la.js.map → UnsavedChangesGuard-C1n7egF6.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-C-_SZaBb.js → UserAvatar-Bl32IpG_.js} +2 -2
- package/dist/admin/assets/{UserAvatar-C-_SZaBb.js.map → UserAvatar-Bl32IpG_.js.map} +1 -1
- package/dist/admin/assets/auth-C4fHG9Iu.js +2 -0
- package/dist/admin/assets/{auth-kvLrpCst.js.map → auth-C4fHG9Iu.js.map} +1 -1
- package/dist/admin/assets/{badge-CB016qlm.js → badge-ydvfgE8a.js} +2 -2
- package/dist/admin/assets/{badge-CB016qlm.js.map → badge-ydvfgE8a.js.map} +1 -1
- package/dist/admin/assets/{boxes-CYCCewHl.js → boxes-D6Y4Cenx.js} +2 -2
- package/dist/admin/assets/{boxes-CYCCewHl.js.map → boxes-D6Y4Cenx.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-BJHRssUa.js → calendar-clock-DFUgXWXg.js} +2 -2
- package/dist/admin/assets/{calendar-clock-BJHRssUa.js.map → calendar-clock-DFUgXWXg.js.map} +1 -1
- package/dist/admin/assets/changeSets-DgfCKja3.js +2 -0
- package/dist/admin/assets/{changeSets-BjP6UzCi.js.map → changeSets-DgfCKja3.js.map} +1 -1
- package/dist/admin/assets/chevron-left-CZXrLV99.js +2 -0
- package/dist/admin/assets/{chevron-left-uCIwt51T.js.map → chevron-left-CZXrLV99.js.map} +1 -1
- package/dist/admin/assets/{circle-check-nVBFETQc.js → circle-check-De27poaB.js} +2 -2
- package/dist/admin/assets/{circle-check-nVBFETQc.js.map → circle-check-De27poaB.js.map} +1 -1
- package/dist/admin/assets/{clock-BJiK6mtP.js → clock-BGAXsuo4.js} +2 -2
- package/dist/admin/assets/{clock-BJiK6mtP.js.map → clock-BGAXsuo4.js.map} +1 -1
- package/dist/admin/assets/{constants-DgCYLdxl.js → constants-esJAnNTh.js} +2 -2
- package/dist/admin/assets/{constants-DgCYLdxl.js.map → constants-esJAnNTh.js.map} +1 -1
- package/dist/admin/assets/content-DsMSB6Wb.js +3 -0
- package/dist/admin/assets/content-DsMSB6Wb.js.map +1 -0
- package/dist/admin/assets/{contentCounts-K6UCGeqH.js → contentCounts-DknqJ4kh.js} +2 -2
- package/dist/admin/assets/{contentCounts-K6UCGeqH.js.map → contentCounts-DknqJ4kh.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-DDb1tieq.js → contentTypes-C-AKiYu1.js} +2 -2
- package/dist/admin/assets/{contentTypes-DDb1tieq.js.map → contentTypes-C-AKiYu1.js.map} +1 -1
- package/dist/admin/assets/{context-BJ7ilMj9.js → context-fImO9k99.js} +2 -2
- package/dist/admin/assets/{context-BJ7ilMj9.js.map → context-fImO9k99.js.map} +1 -1
- package/dist/admin/assets/{copy-CWYrWaJy.js → copy-B5owk67M.js} +2 -2
- package/dist/admin/assets/{copy-CWYrWaJy.js.map → copy-B5owk67M.js.map} +1 -1
- package/dist/admin/assets/createLucideIcon-CqygG5K6.js +2 -0
- package/dist/admin/assets/createLucideIcon-CqygG5K6.js.map +1 -0
- package/dist/admin/assets/develop-DL-2W9jv.js +11 -0
- package/dist/admin/assets/develop-DL-2W9jv.js.map +1 -0
- package/dist/admin/assets/{dropdown-menu-jrFjkuhR.js → dropdown-menu-C53v9ioW.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-jrFjkuhR.js.map → dropdown-menu-C53v9ioW.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-D304Uu9C.js → ellipsis-BHtU4ov6.js} +2 -2
- package/dist/admin/assets/{ellipsis-D304Uu9C.js.map → ellipsis-BHtU4ov6.js.map} +1 -1
- package/dist/admin/assets/es2015-DrAA1N2V.js +42 -0
- package/dist/admin/assets/es2015-DrAA1N2V.js.map +1 -0
- package/dist/admin/assets/{external-link-s_y1Tlvw.js → external-link-nZp2VpKw.js} +2 -2
- package/dist/admin/assets/{external-link-s_y1Tlvw.js.map → external-link-nZp2VpKw.js.map} +1 -1
- package/dist/admin/assets/{field-DkUe0lrH.js → field-W1dB_h6d.js} +2 -2
- package/dist/admin/assets/{field-DkUe0lrH.js.map → field-W1dB_h6d.js.map} +1 -1
- package/dist/admin/assets/{file-stack-DV3BHV7A.js → file-stack-8rRouTJj.js} +2 -2
- package/dist/admin/assets/{file-stack-DV3BHV7A.js.map → file-stack-8rRouTJj.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-BTxwuLEP.js → fileRoute-DzWMBrRx.js} +2 -2
- package/dist/admin/assets/{fileRoute-BTxwuLEP.js.map → fileRoute-DzWMBrRx.js.map} +1 -1
- package/dist/admin/assets/{folder-plus-AIA7s5Da.js → folder-plus-B3L3b389.js} +2 -2
- package/dist/admin/assets/{folder-plus-AIA7s5Da.js.map → folder-plus-B3L3b389.js.map} +1 -1
- package/dist/admin/assets/{followPlural-xUd57Rcj.js → followPlural-D-5ZJqJF.js} +2 -2
- package/dist/admin/assets/{followPlural-xUd57Rcj.js.map → followPlural-D-5ZJqJF.js.map} +1 -1
- package/dist/admin/assets/{globe-DXrE-_sR.js → globe-DKkjr9MZ.js} +2 -2
- package/dist/admin/assets/{globe-DXrE-_sR.js.map → globe-DKkjr9MZ.js.map} +1 -1
- package/dist/admin/assets/{image-BImUdARR.js → image-B6aL7hP8.js} +2 -2
- package/dist/admin/assets/{image-BImUdARR.js.map → image-B6aL7hP8.js.map} +1 -1
- package/dist/admin/assets/{image-off-CEBznyUC.js → image-off-TVxEyb74.js} +2 -2
- package/dist/admin/assets/{image-off-CEBznyUC.js.map → image-off-TVxEyb74.js.map} +1 -1
- package/dist/admin/assets/{inbox-BQ_HOjFd.js → inbox-BKqu1EfP.js} +2 -2
- package/dist/admin/assets/{inbox-BQ_HOjFd.js.map → inbox-BKqu1EfP.js.map} +1 -1
- package/dist/admin/assets/{inbox-BZGf97fS.js → inbox-DUqOrFEA.js} +2 -2
- package/dist/admin/assets/{inbox-BZGf97fS.js.map → inbox-DUqOrFEA.js.map} +1 -1
- package/dist/admin/assets/index-BEM45u2w.css +2 -0
- package/dist/admin/assets/index-D03RZB7e.js +4 -0
- package/dist/admin/assets/index-D03RZB7e.js.map +1 -0
- package/dist/admin/assets/{key-round-BJTVRy3_.js → key-round-Dmdr1vP5.js} +2 -2
- package/dist/admin/assets/{key-round-BJTVRy3_.js.map → key-round-Dmdr1vP5.js.map} +1 -1
- package/dist/admin/assets/{labels-S4ZMHvJW.js → labels-CHE0gg1n.js} +2 -2
- package/dist/admin/assets/{labels-S4ZMHvJW.js.map → labels-CHE0gg1n.js.map} +1 -1
- package/dist/admin/assets/{languages-L4cGzT6V.js → languages-BbfFIygP.js} +2 -2
- package/dist/admin/assets/{languages-L4cGzT6V.js.map → languages-BbfFIygP.js.map} +1 -1
- package/dist/admin/assets/{layers-BGHZayyB.js → layers-B0jT4rc4.js} +2 -2
- package/dist/admin/assets/{layers-BGHZayyB.js.map → layers-B0jT4rc4.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-c1sYGivC.js → link-2-off-DC06jLDj.js} +2 -2
- package/dist/admin/assets/{link-2-off-c1sYGivC.js.map → link-2-off-DC06jLDj.js.map} +1 -1
- package/dist/admin/assets/{link-BGUl1m0y.js → link-B3O0VUVT.js} +2 -2
- package/dist/admin/assets/{link-BGUl1m0y.js.map → link-B3O0VUVT.js.map} +1 -1
- package/dist/admin/assets/{loader-circle-BaUsKfL8.js → loader-circle-C-9trZPI.js} +2 -2
- package/dist/admin/assets/{loader-circle-BaUsKfL8.js.map → loader-circle-C-9trZPI.js.map} +1 -1
- package/dist/admin/assets/{locales-CLqYl3dG.js → locales-e7B5t6id.js} +2 -2
- package/dist/admin/assets/{locales-CLqYl3dG.js.map → locales-e7B5t6id.js.map} +1 -1
- package/dist/admin/assets/{media-D6kY5Cj6.js → media-BUUEsWxd.js} +2 -2
- package/dist/admin/assets/{media-D6kY5Cj6.js.map → media-BUUEsWxd.js.map} +1 -1
- package/dist/admin/assets/{media-azW3_Am5.js → media-VCJUbYzJ.js} +2 -2
- package/dist/admin/assets/{media-azW3_Am5.js.map → media-VCJUbYzJ.js.map} +1 -1
- package/dist/admin/assets/network-Bolr2lmf.js +2 -0
- package/dist/admin/assets/{network-BbLrO3ZX.js.map → network-Bolr2lmf.js.map} +1 -1
- package/dist/admin/assets/{pencil-BQpwTTXw.js → pencil-BVSFlU14.js} +2 -2
- package/dist/admin/assets/{pencil-BQpwTTXw.js.map → pencil-BVSFlU14.js.map} +1 -1
- package/dist/admin/assets/{plus-BYBGXiDV.js → plus-WfYKHW7G.js} +2 -2
- package/dist/admin/assets/{plus-BYBGXiDV.js.map → plus-WfYKHW7G.js.map} +1 -1
- package/dist/admin/assets/publishing-ClNjPLQ9.js +2 -0
- package/dist/admin/assets/publishing-ClNjPLQ9.js.map +1 -0
- package/dist/admin/assets/{radio-group-szmd95N4.js → radio-group-rFxn7cz2.js} +2 -2
- package/dist/admin/assets/{radio-group-szmd95N4.js.map → radio-group-rFxn7cz2.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-TD7gQ_S5.js → rotate-ccw-Cvc_uA58.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-TD7gQ_S5.js.map → rotate-ccw-Cvc_uA58.js.map} +1 -1
- package/dist/admin/assets/{schedules-DdnCCx_b.js → schedules-CBGpjEg7.js} +2 -2
- package/dist/admin/assets/{schedules-DdnCCx_b.js.map → schedules-CBGpjEg7.js.map} +1 -1
- package/dist/admin/assets/{schema-BzJ3fK72.js → schema-D9BgCVzZ.js} +2 -2
- package/dist/admin/assets/{schema-BzJ3fK72.js.map → schema-D9BgCVzZ.js.map} +1 -1
- package/dist/admin/assets/{scroll-text-DdRRr86a.js → scroll-text-gKYBbibb.js} +2 -2
- package/dist/admin/assets/{scroll-text-DdRRr86a.js.map → scroll-text-gKYBbibb.js.map} +1 -1
- package/dist/admin/assets/{search-JRmBbB7P.js → search-CW3iBC4k.js} +2 -2
- package/dist/admin/assets/{search-JRmBbB7P.js.map → search-CW3iBC4k.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-VaNHAlfp.js → searchSchemas-C4qp-vCa.js} +2 -2
- package/dist/admin/assets/{searchSchemas-VaNHAlfp.js.map → searchSchemas-C4qp-vCa.js.map} +1 -1
- package/dist/admin/assets/{sections-CbJVJmgY.js → sections-C7Z6Xd8r.js} +2 -2
- package/dist/admin/assets/{sections-CbJVJmgY.js.map → sections-C7Z6Xd8r.js.map} +1 -1
- package/dist/admin/assets/{sections-BsLTv5pq.js → sections-CN5fIoAr.js} +2 -2
- package/dist/admin/assets/{sections-BsLTv5pq.js.map → sections-CN5fIoAr.js.map} +1 -1
- package/dist/admin/assets/{select-p7RjCHS1.js → select-DUhL27UN.js} +2 -2
- package/dist/admin/assets/{select-p7RjCHS1.js.map → select-DUhL27UN.js.map} +1 -1
- package/dist/admin/assets/{send-BcDsf__t.js → send-DRA-Pe46.js} +2 -2
- package/dist/admin/assets/{send-BcDsf__t.js.map → send-DRA-Pe46.js.map} +1 -1
- package/dist/admin/assets/{seo-C88lYd48.js → seo-l1ZORjtv.js} +2 -2
- package/dist/admin/assets/{seo-C88lYd48.js.map → seo-l1ZORjtv.js.map} +1 -1
- package/dist/admin/assets/settings-DgoG3H8C.js +2 -0
- package/dist/admin/assets/{settings-2YUiWx9J.js.map → settings-DgoG3H8C.js.map} +1 -1
- package/dist/admin/assets/shapes-BZ87ap5s.js +6 -0
- package/dist/admin/assets/shapes-BZ87ap5s.js.map +1 -0
- package/dist/admin/assets/{skeleton-BUvrrXQ7.js → skeleton-Dyi_b1wq.js} +2 -2
- package/dist/admin/assets/{skeleton-BUvrrXQ7.js.map → skeleton-Dyi_b1wq.js.map} +1 -1
- package/dist/admin/assets/{snapshots-IQxgEhwm.js → snapshots-CT-zs6Up.js} +2 -2
- package/dist/admin/assets/{snapshots-IQxgEhwm.js.map → snapshots-CT-zs6Up.js.map} +1 -1
- package/dist/admin/assets/{sparkles-DSj-egu-.js → sparkles-DCRAqbqD.js} +2 -2
- package/dist/admin/assets/{sparkles-DSj-egu-.js.map → sparkles-DCRAqbqD.js.map} +1 -1
- package/dist/admin/assets/src-BcLeD2-K.js +7 -0
- package/dist/admin/assets/src-BcLeD2-K.js.map +1 -0
- package/dist/admin/assets/{stableId-DQQ5viUn.js → stableId-iRkUbVIP.js} +2 -2
- package/dist/admin/assets/{stableId-DQQ5viUn.js.map → stableId-iRkUbVIP.js.map} +1 -1
- package/dist/admin/assets/{store-Rdj8W9EY.js → store-DknnssoQ.js} +2 -2
- package/dist/admin/assets/{store-Rdj8W9EY.js.map → store-DknnssoQ.js.map} +1 -1
- package/dist/admin/assets/{switch-Co2wfi3S.js → switch-C3dDDUIk.js} +2 -2
- package/dist/admin/assets/{switch-Co2wfi3S.js.map → switch-C3dDDUIk.js.map} +1 -1
- package/dist/admin/assets/{theme-xFjfWxsg.js → theme-DPe080iG.js} +2 -2
- package/dist/admin/assets/{theme-xFjfWxsg.js.map → theme-DPe080iG.js.map} +1 -1
- package/dist/admin/assets/{titles-BMPQZALy.js → titles-C5PaMgFJ.js} +2 -2
- package/dist/admin/assets/{titles-BMPQZALy.js.map → titles-C5PaMgFJ.js.map} +1 -1
- package/dist/admin/assets/{tokens-DB2OodVc.js → tokens-BlIDIMY9.js} +2 -2
- package/dist/admin/assets/{tokens-DB2OodVc.js.map → tokens-BlIDIMY9.js.map} +1 -1
- package/dist/admin/assets/{tooltip-B_8HZ1Wu.js → tooltip-BEaZkRPK.js} +2 -2
- package/dist/admin/assets/{tooltip-B_8HZ1Wu.js.map → tooltip-BEaZkRPK.js.map} +1 -1
- package/dist/admin/assets/{undo-2-CagAc44E.js → undo-2-Zd1OT6qk.js} +2 -2
- package/dist/admin/assets/{undo-2-CagAc44E.js.map → undo-2-Zd1OT6qk.js.map} +1 -1
- package/dist/admin/assets/{useAuditLabels-CT1QmcqM.js → useAuditLabels-DWBpLOTB.js} +2 -2
- package/dist/admin/assets/{useAuditLabels-CT1QmcqM.js.map → useAuditLabels-DWBpLOTB.js.map} +1 -1
- package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js +2 -0
- package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js.map +1 -0
- package/dist/admin/assets/{useContentSchema-Ca1tmrC5.js → useContentSchema-wLDa2L3f.js} +2 -2
- package/dist/admin/assets/{useContentSchema-Ca1tmrC5.js.map → useContentSchema-wLDa2L3f.js.map} +1 -1
- package/dist/admin/assets/useCursorPager-Dc-9B67j.js +2 -0
- package/dist/admin/assets/useCursorPager-Dc-9B67j.js.map +1 -0
- package/dist/admin/assets/{useDiscardGuard-B8dlCh6M.js → useDiscardGuard-WTUINqD5.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-B8dlCh6M.js.map → useDiscardGuard-WTUINqD5.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-Cr7frtLB.js → useMediaPickerDialog-CFN9ZKfe.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-Cr7frtLB.js.map → useMediaPickerDialog-CFN9ZKfe.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-DjpdBcVv.js → useMediaUploader-B42H_CMG.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-DjpdBcVv.js.map → useMediaUploader-B42H_CMG.js.map} +1 -1
- package/dist/admin/assets/useNetworkPermission-CegwqQXR.js +2 -0
- package/dist/admin/assets/useNetworkPermission-CegwqQXR.js.map +1 -0
- package/dist/admin/assets/{usePaletteItems-B3OEkGXv.js → usePaletteItems-B3y2t7Ly.js} +2 -2
- package/dist/admin/assets/{usePaletteItems-B3OEkGXv.js.map → usePaletteItems-B3y2t7Ly.js.map} +1 -1
- package/dist/admin/assets/{usePlaces-CdX6q9xt.js → usePlaces-CAXr-IO9.js} +2 -2
- package/dist/admin/assets/{usePlaces-CdX6q9xt.js.map → usePlaces-CAXr-IO9.js.map} +1 -1
- package/dist/admin/assets/{useQueries-P7D4677o.js → useQueries-CX6eFr24.js} +2 -2
- package/dist/admin/assets/{useQueries-P7D4677o.js.map → useQueries-CX6eFr24.js.map} +1 -1
- package/dist/admin/assets/{useResolvedScheme-O1g9lYxQ.js → useResolvedScheme-aV0QDPi3.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-O1g9lYxQ.js.map → useResolvedScheme-aV0QDPi3.js.map} +1 -1
- package/dist/admin/assets/{useSchemaScopeAccess-DJo7rYB7.js → useSchemaScopeAccess-DyfiZnzs.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-DJo7rYB7.js.map → useSchemaScopeAccess-DyfiZnzs.js.map} +1 -1
- package/dist/admin/assets/{users-eCGpE8u4.js → users-CDoJRL24.js} +2 -2
- package/dist/admin/assets/{users-eCGpE8u4.js.map → users-CDoJRL24.js.map} +1 -1
- package/dist/admin/assets/{users-sDlmJ2ml.js → users-ohHZnBJW.js} +2 -2
- package/dist/admin/assets/{users-sDlmJ2ml.js.map → users-ohHZnBJW.js.map} +1 -1
- package/dist/admin/assets/{zod-DtMsJRUH.js → zod-C-k48Hnc.js} +2 -2
- package/dist/admin/assets/{zod-DtMsJRUH.js.map → zod-C-k48Hnc.js.map} +1 -1
- package/dist/admin/index.html +59 -58
- package/dist/cli.js +129 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{public-rn-FEAIR.d.ts → public-BO_wneBL.d.ts} +18 -1
- package/dist/{s3Adapter-Bs5SUqE1.js → s3Adapter-sL1zP4Zl.js} +2 -2
- package/dist/{s3Adapter-Bs5SUqE1.js.map → s3Adapter-sL1zP4Zl.js.map} +1 -1
- package/dist/{worker-CFEk-WtR.js → worker-DMES6pqh.js} +486 -161
- package/dist/worker-DMES6pqh.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/Builder-D8AVakt1.js +0 -2
- package/dist/admin/assets/Builder-D8AVakt1.js.map +0 -1
- package/dist/admin/assets/Form-DKfQ6_lP.js +0 -2
- package/dist/admin/assets/StepList-B4I59Yl_.js +0 -2
- package/dist/admin/assets/Structure-BYK71uPq.js +0 -2
- package/dist/admin/assets/auth-kvLrpCst.js +0 -2
- package/dist/admin/assets/changeSets-BjP6UzCi.js +0 -2
- package/dist/admin/assets/chevron-left-uCIwt51T.js +0 -2
- package/dist/admin/assets/content-DTKf5anG.js +0 -3
- package/dist/admin/assets/content-DTKf5anG.js.map +0 -1
- package/dist/admin/assets/createLucideIcon-CJwW5JJW.js +0 -2
- package/dist/admin/assets/createLucideIcon-CJwW5JJW.js.map +0 -1
- package/dist/admin/assets/develop-CXljZJGt.js +0 -11
- package/dist/admin/assets/develop-CXljZJGt.js.map +0 -1
- package/dist/admin/assets/es2015-DgNe6MPq.js +0 -42
- package/dist/admin/assets/es2015-DgNe6MPq.js.map +0 -1
- package/dist/admin/assets/index-BF63XIym.js +0 -4
- package/dist/admin/assets/index-BF63XIym.js.map +0 -1
- package/dist/admin/assets/index-DJe1l94K.css +0 -2
- package/dist/admin/assets/network-BbLrO3ZX.js +0 -2
- package/dist/admin/assets/publishing-sgYacQ-C.js +0 -2
- package/dist/admin/assets/publishing-sgYacQ-C.js.map +0 -1
- package/dist/admin/assets/settings-2YUiWx9J.js +0 -2
- package/dist/admin/assets/src-CeOxD_sk.js +0 -4
- package/dist/admin/assets/src-CeOxD_sk.js.map +0 -1
- package/dist/admin/assets/tabs-Dyd8Q_Ja.js +0 -6
- package/dist/admin/assets/tabs-Dyd8Q_Ja.js.map +0 -1
- package/dist/admin/assets/useConfirmTarget-D6FvyjDd.js +0 -2
- package/dist/admin/assets/useConfirmTarget-D6FvyjDd.js.map +0 -1
- package/dist/admin/assets/useCursorPager-DTe6uEBE.js +0 -2
- package/dist/admin/assets/useCursorPager-DTe6uEBE.js.map +0 -1
- package/dist/worker-CFEk-WtR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undo-2-
|
|
1
|
+
{"version":3,"file":"undo-2-Zd1OT6qk.js","names":["createLucideIcon","__iconData","Undo2"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/undo-2.mjs"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"undo-2\",\n size: 24,\n node: [\n [\"path\", { d: \"M9 14 4 9l5-5\", key: \"102s5s\" }],\n [\"path\", { d: \"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\", key: \"f3b9sd\" }]\n ]\n};\n__iconData.node;\nconst Undo2 = createLucideIcon(__iconData);\n\nexport { __iconData, Undo2 as default };\n//# sourceMappingURL=undo-2.mjs.map\n"],"ignoreList":[0],"mappings":"mDASA,IAAMC,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAS,CAAC,EAC9C,CAAC,OAAQ,CAAE,EAAG,2DAA4D,IAAK,QAAS,CAAC,CAC3F,CACF,EACAA,EAAW,KACX,IAAMC,EAAQF,EAAiBC,CAAU"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{$ as e,O as t,j as n,o as r}from"./loader-circle-
|
|
2
|
-
//# sourceMappingURL=useAuditLabels-
|
|
1
|
+
import{$ as e,O as t,j as n,o as r}from"./loader-circle-C-9trZPI.js";import{n as i,t as a}from"./createLucideIcon-CqygG5K6.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=a(o),c=i=>n({queryKey:t.audit.list(i),queryFn:()=>r.audit.list(i),placeholderData:e,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.scope":`audit.actions.schemaScope`,"schema.settings.update":`audit.actions.schemaSettingsUpdate`,"session.revoke":`audit.actions.sessionRevoke`,"session.revoke_all":`audit.actions.sessionRevokeAll`,"setup.complete":`audit.actions.setupComplete`,"transfer.import":`audit.actions.transferImport`,"webhook.create":`audit.actions.webhookCreate`,"webhook.delete":`audit.actions.webhookDelete`,"webhook.redeliver":`audit.actions.webhookRedeliver`,"webhook.rotate_secret":`audit.actions.webhookRotateSecret`,"webhook.test":`audit.actions.webhookTest`,"webhook.update":`audit.actions.webhookUpdate`},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}=i();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-DWBpLOTB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuditLabels-CT1QmcqM.js","names":["keepPreviousData","queryKeys","useQuery","adminApi","useTranslation","createLucideIcon","__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.scope': 'audit.actions.schemaScope',\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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"}
|
|
1
|
+
{"version":3,"file":"useAuditLabels-DWBpLOTB.js","names":["keepPreviousData","queryKeys","useQuery","adminApi","useTranslation","createLucideIcon","__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.scope': 'audit.actions.schemaScope',\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":"+HASA,IAAMM,EAAa,CACjB,KAAM,YACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAS,CAAC,EAC1E,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,IAAK,OAAQ,CAAC,EACrD,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,GAAI,KAAM,IAAK,QAAS,CAAC,EACjE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAS,CAAC,CACpE,CACF,EACAA,EAAW,KACX,IAAMC,EAAWF,EAAiBC,CAAU,ECf/BE,EAAkB,GAC7BN,EAAS,CACP,SAAUD,EAAU,MAAM,KAAKQ,CAAK,EACpC,YAAeN,EAAS,MAAM,KAAKM,CAAK,EACxC,gBAAiBT,EACjB,KAAM,CAAE,OAAQ,EAAK,CACvB,CAAC,ECVGU,EAAc,CAAC,OAAQ,QAAS,QAAS,QAAS,WAAY,QAAQ,EAG/DC,EAAmB,GAA0C,CACxE,GAAI,OAAOC,GAAa,WAAYA,EAClC,OAEF,IAAMC,EAASD,EACf,IAAK,IAAME,KAASJ,EAAa,CAC/B,IAAMK,EAAQF,EAAOC,GACrB,GAAI,OAAOC,GAAU,UAAYA,EAAM,KAAK,IAAM,GAChD,OAAOA,CAEX,CAEF,ECXaC,EAA0B,CACrC,oBAAqB,gCACrB,oBAAqB,gCACrB,6BAA8B,wCAC9B,oBAAqB,gCACrB,mBAAoB,+BACpB,mBAAoB,+BACpB,yBAA0B,oCAC1B,kBAAmB,8BACnB,kBAAmB,8BACnB,kBAAmB,8BACnB,iBAAkB,6BAClB,mBAAoB,+BACpB,yBAA0B,oCAC1B,+BAAgC,0CAChC,kBAAmB,8BACnB,sBAAuB,iCACvB,2BAA4B,sCAC5B,0BAA2B,qCAC3B,kCAAmC,4CACnC,oBAAqB,gCACrB,wBAAyB,mCACzB,kBAAmB,8BACnB,kBAAmB,8BACnB,qBAAsB,iCACtB,iBAAkB,8BAClB,sBAAuB,kCACvB,mBAAoB,gCACpB,mBAAoB,gCACpB,aAAc,0BACd,cAAe,2BACf,sBAAuB,kCACvB,8BAA+B,yCAC/B,oBAAqB,gCACrB,qBAAsB,iCACtB,sBAAuB,iCACvB,uCAAwC,gDACxC,yBAA0B,oCAC1B,sBAAuB,kCACvB,0BAA2B,qCAC3B,iCAAkC,2CAClC,kBAAmB,8BACnB,sBAAuB,kCACvB,wBAAyB,oCACzB,oBAAqB,gCACrB,iBAAkB,8BAClB,kBAAmB,+BACnB,kBAAmB,+BACnB,oBAAqB,iCACrB,mBAAoB,gCACpB,qBAAsB,kCACtB,+BAAgC,2CAChC,+BAAgC,2CAChC,+BAAgC,2CAChC,oBAAqB,iCACrB,oBAAqB,iCACrB,kBAAmB,+BACnB,oBAAqB,iCACrB,YAAa,yBACb,gBAAiB,6BACjB,gBAAiB,6BACjB,gBAAiB,6BACjB,eAAgB,4BAChB,sBAAuB,kCACvB,gBAAiB,6BACjB,eAAgB,4BAChB,0BAA2B,sCAC3B,uBAAwB,mCACxB,uBAAwB,mCACxB,sBAAuB,mCACvB,8BAA+B,0CAC/B,gCAAiC,4CACjC,6BAA8B,yCAC9B,8BAA+B,0CAC/B,cAAe,2BACf,cAAe,2BACf,cAAe,2BACf,kBAAmB,+BACnB,wBAAyB,oCACzB,gBAAiB,6BACjB,gBAAiB,6BACjB,eAAgB,4BAChB,yBAA0B,qCAC1B,iBAAkB,8BAClB,qBAAsB,iCACtB,iBAAkB,8BAClB,kBAAmB,+BACnB,iBAAkB,8BAClB,iBAAkB,8BAClB,oBAAqB,iCACrB,wBAAyB,oCACzB,eAAgB,4BAChB,iBAAkB,6BACpB,EAEaC,EAA0B,CACrC,iBAAkB,gCAClB,WAAY,0BACZ,cAAe,6BACf,WAAY,0BACZ,UAAW,yBACX,SAAU,wBACV,SAAU,wBACV,WAAY,0BACZ,UAAW,0BACX,sBAAuB,qCACvB,MAAO,sBACP,IAAK,oBACL,OAAQ,uBACR,YAAa,2BACb,aAAc,4BACd,MAAO,sBACP,cAAe,6BACf,eAAgB,+BAChB,QAAS,uBACX,ECrHMC,EAAgB,GACpB,OAAO,OAAOF,EAAyBG,CAAI,EAEvCC,EAAgB,GACpB,OAAO,OAAOH,EAAyBI,CAAI,EAOhCC,MAAuB,CAClC,GAAM,CAAE,KAAMlB,EAAe,EAC7B,MAAO,CACL,YAAc,GAAkBc,EAAaC,CAAI,EAAII,EAAEP,EAAwBG,EAAK,EAAI,IAAA,GACxF,YAAc,GAAkBC,EAAaC,CAAI,EAAIE,EAAEN,EAAwBI,EAAK,EAAI,IAAA,EAC1F,CACF"}
|
|
@@ -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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{
|
|
2
|
-
//# sourceMappingURL=useContentSchema-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{Q as n}from"./src-BcLeD2-K.js";import{r}from"./schema-D9BgCVzZ.js";var i=e(t(),1),a=()=>{let{definitions:e,error:t}=r();return{schema:(0,i.useMemo)(()=>{if(!e)return;let t=new Map,r=new Map;for(let{definition:i}of e)n(i)?r.set(i.id,i):t.set(i.id,i);return{models:t,components:r,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-wLDa2L3f.js.map
|
package/dist/admin/assets/{useContentSchema-Ca1tmrC5.js.map → useContentSchema-wLDa2L3f.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentSchema-
|
|
1
|
+
{"version":3,"file":"useContentSchema-wLDa2L3f.js","names":["useMemo","__toESM","isComponentDefinition","import_react","require_react","useContentSchema","useAllDefinitions","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":"+KAeaK,MAAgF,CAC3F,GAAM,CAAE,cAAa,SAAUC,EAAkB,EAiBjD,MAAO,CAAE,QAAA,EAhBMN,EAAAA,QAAAA,KAAc,CAC3B,GAAI,CAACO,EACH,OAEF,IAAMC,EAAS,IAAI,IACbC,EAAa,IAAI,IACvB,IAAK,GAAM,CAAE,gBAAgBF,EACvBL,EAAsBQ,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{$ as n,A as r,O as i,i as a,j as o,lt as s,o as c}from"./loader-circle-C-9trZPI.js";import{t as l}from"./createLucideIcon-CqygG5K6.js";import{a as u,n as d,t as f}from"./publishing-B7zv1e7j.js";var p={name:`rocket`,size:24,node:[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]};p.node;var m=l(p),h=e(t(),1),g=(e,t,n,r)=>{(0,h.useEffect)(()=>{e&&(t(n),r())},[e,t,n,r])},_={silent:!0},v=e=>e?u:!1,y=()=>o({queryKey:i.publishing.deployments.connections,queryFn:()=>c.deployments.connections.list(),refetchInterval:e=>v(e.state.data?.some(e=>e.latestRun?d.has(e.latestRun.status):!1)??!1),meta:_}),b=e=>o({queryKey:i.publishing.deployments.connection(e),queryFn:()=>c.deployments.connections.get(e),refetchInterval:e=>v(e.state.data?.latestRun?d.has(e.state.data.latestRun.status):!1),meta:_}),x=e=>o({queryKey:i.publishing.deployments.runs(e),queryFn:()=>c.deployments.runs.list(e),placeholderData:n,refetchInterval:e=>v(e.state.data?.items.some(e=>d.has(e.status))??!1),meta:_}),S=e=>o({queryKey:i.publishing.deployments.run(e),queryFn:()=>c.deployments.runs.get(e),refetchInterval:e=>v(e.state.data?d.has(e.state.data.status):!1),meta:_}),C=()=>{let e=s();return()=>e.invalidateQueries({queryKey:i.publishing.deployments.all})},w=()=>{let e=C();return r({mutationKey:[`deployments`,`create`],meta:_,mutationFn:e=>a(()=>c.deployments.connections.create(e)),onSuccess:e})},T=()=>{let e=s(),t=C();return r({mutationKey:[`deployments`,`update`],meta:_,mutationFn:({id:e,input:t})=>a(()=>c.deployments.connections.update(e,t)),onSuccess:({generatedSecrets:n,...r})=>(e.setQueryData(i.publishing.deployments.connection(r.id),r),t())})},E=()=>{let e=s(),t=C();return r({mutationKey:[`deployments`,`delete`],mutationFn:e=>a(()=>c.deployments.connections.remove(e)),onSuccess:(n,r)=>(e.removeQueries({queryKey:i.publishing.deployments.connection(r)}),t())})},D=()=>r({mutationKey:[`deployments`,`test`],mutationFn:e=>a(()=>c.deployments.connections.test(e))}),O=()=>{let e=C();return r({mutationKey:[`deployments`,`trigger`],mutationFn:e=>a(()=>c.deployments.connections.trigger(e)),onSuccess:e})},k=()=>{let e=C();return r({mutationKey:[`deployments`,`retry`],mutationFn:e=>a(()=>c.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=()=>o({queryKey:i.publishing.webhooks.list,queryFn:()=>c.webhooks.list(),meta:F}),L=()=>o({queryKey:i.publishing.webhooks.events,queryFn:()=>c.webhooks.events(),staleTime:1/0,meta:F}),R=e=>o({queryKey:i.publishing.webhooks.webhook(e),queryFn:()=>c.webhooks.get(e),meta:F}),z=(e,t)=>o({queryKey:i.publishing.webhooks.deliveries(e,t),queryFn:()=>c.webhooks.deliveries(e,{cursor:t,limit:25}),placeholderData:n,refetchInterval:e=>e.state.data?.items.some(e=>f.has(e.status))?u:!1,meta:F}),B=()=>{let e=s();return()=>e.invalidateQueries({queryKey:i.publishing.webhooks.all})},V=()=>{let e=B();return r({mutationKey:[`webhooks`,`create`],meta:F,mutationFn:e=>a(()=>c.webhooks.create(e)),onSuccess:e})},H=()=>{let e=s(),t=B();return r({mutationKey:[`webhooks`,`update`],meta:F,mutationFn:({id:e,input:t})=>a(()=>c.webhooks.update(e,t)),onSuccess:n=>(e.setQueryData(i.publishing.webhooks.webhook(n.id),n),t())})},U=()=>{let e=B();return r({mutationKey:[`webhooks`,`delete`],mutationFn:e=>a(()=>c.webhooks.remove(e)),onSuccess:e})},W=()=>{let e=B();return r({mutationKey:[`webhooks`,`rotateSecret`],mutationFn:e=>a(()=>c.webhooks.rotateSecret(e)),onSuccess:e})},G=()=>{let e=B();return r({mutationKey:[`webhooks`,`test`],mutationFn:e=>a(()=>c.webhooks.test(e)),onSuccess:e})},K=()=>{let e=B();return r({mutationKey:[`webhooks`,`redeliver`],mutationFn:({id:e,deliveryId:t})=>a(()=>c.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-Dc-9B67j.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCursorPager-Dc-9B67j.js","names":["silent","useState","__toESM","keepPreviousData","useMutation","queryKeys","withCsrf","useQuery","useQueryClient","adminApi","createLucideIcon","PUBLISHING_POLL_INTERVAL_MS","ACTIVE_RUN_STATUSES","ACTIVE_DELIVERY_STATUSES","__iconData","Rocket","import_react","require_react","useResetOnOpen","open","reset","values","resetMutation","silent$1","pollWhileActive","active","useDeploymentConnections","query","connection","useDeploymentConnection","id","useDeploymentRuns","state","run","useDeploymentRun","useInvalidateDeployments","queryClient","useCreateDeploymentConnection","invalidate","input","useUpdateDeploymentConnection","_shownOnce","useDeleteDeploymentConnection","useTestDeploymentConnection","useTriggerDeployment","useRetryDeploymentRun","PUBLICATION_ACTION_LABELS","PROVIDER_LABELS","TRIGGER_POLICY_LABELS","RUN_TRIGGER_LABELS","TIMELINE_SOURCE_LABELS","silent","useWebhooks","useWebhookEvents","useWebhook","useWebhookDeliveries","cursor","delivery","useInvalidateWebhooks","useCreateWebhook","useUpdateWebhook","webhook","useDeleteWebhook","useRotateWebhookSecret","useTestWebhook","useRedeliverWebhook","deliveryId","useCursorPager","previousCursors","setPreviousCursors","setCursor","cursors","nextCursor"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/rocket.mjs","../../src/features/Publishing/hooks/useResetOnOpen.ts","../../src/api/deployments.ts","../../src/features/Publishing/constants.ts","../../src/api/webhooks.ts","../../src/features/Publishing/hooks/useCursorPager.ts"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"rocket\",\n size: 24,\n node: [\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }],\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\",\n key: \"u4xsad\"\n }\n ],\n [\n \"path\",\n {\n d: \"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\",\n key: \"676m9\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\", key: \"92ym6u\" }]\n ]\n};\n__iconData.node;\nconst Rocket = createLucideIcon(__iconData);\n\nexport { __iconData, Rocket as default };\n//# sourceMappingURL=rocket.mjs.map\n","import { useEffect } from 'react';\nimport type { FieldValues, UseFormReset } from 'react-hook-form';\n\n/**\n * A sheet or popover form starts clean every time it opens: default values, and no error left over from the last\n * attempt. `values` must be stable (a module constant or memoized).\n */\nexport const useResetOnOpen = <TValues extends FieldValues>(\n open: boolean,\n reset: UseFormReset<TValues>,\n values: TValues,\n resetMutation: () => void,\n) => {\n useEffect(() => {\n if (open) {\n reset(values);\n resetMutation();\n }\n }, [open, reset, values, resetMutation]);\n};\n","import type {\n CreateDeploymentConnectionInput,\n DeploymentConnectionUpdated,\n DeploymentRunQuery,\n UpdateDeploymentConnectionInput,\n} from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ACTIVE_RUN_STATUSES, PUBLISHING_POLL_INTERVAL_MS } from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\n/** Polls while the latest runs are still in progress, so statuses move on screen without a reload. */\nconst pollWhileActive = (active: boolean) => (active ? PUBLISHING_POLL_INTERVAL_MS : false);\n\nexport const useDeploymentConnections = () =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connections,\n queryFn: () => adminApi.deployments.connections.list(),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.some((connection) =>\n connection.latestRun ? ACTIVE_RUN_STATUSES.has(connection.latestRun.status) : false,\n ) ?? false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentConnection = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.connection(id),\n queryFn: () => adminApi.deployments.connections.get(id),\n refetchInterval: (query) =>\n pollWhileActive(\n query.state.data?.latestRun ? ACTIVE_RUN_STATUSES.has(query.state.data.latestRun.status) : false,\n ),\n meta: silent,\n });\n\nexport const useDeploymentRuns = (query: DeploymentRunQuery) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.runs(query),\n queryFn: () => adminApi.deployments.runs.list(query),\n placeholderData: keepPreviousData,\n refetchInterval: (state) =>\n pollWhileActive(state.state.data?.items.some((run) => ACTIVE_RUN_STATUSES.has(run.status)) ?? false),\n meta: silent,\n });\n\n/** One run, polled until it reaches a final state (deployed, failed or unknown). */\nexport const useDeploymentRun = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.deployments.run(id),\n queryFn: () => adminApi.deployments.runs.get(id),\n refetchInterval: (query) =>\n pollWhileActive(query.state.data ? ACTIVE_RUN_STATUSES.has(query.state.data.status) : false),\n meta: silent,\n });\n\nconst useInvalidateDeployments = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.deployments.all });\n};\n\nexport const useCreateDeploymentConnection = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'create'],\n meta: silent,\n mutationFn: (input: CreateDeploymentConnectionInput) =>\n withCsrf(() => adminApi.deployments.connections.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/**\n * 409 when `expectedVersion` is stale: the caller reloads and tells the user. A secret Shapio generated\n * (`generatedSecrets`) is returned to the caller to show once and never kept in the query cache.\n */\nexport const useUpdateDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateDeploymentConnectionInput }) =>\n withCsrf(() => adminApi.deployments.connections.update(id, input)),\n onSuccess: ({ generatedSecrets: _shownOnce, ...connection }: DeploymentConnectionUpdated) => {\n queryClient.setQueryData(queryKeys.publishing.deployments.connection(connection.id), connection);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteDeploymentConnection = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.remove(id)),\n onSuccess: (_result, id) => {\n queryClient.removeQueries({ queryKey: queryKeys.publishing.deployments.connection(id) });\n return invalidate();\n },\n });\n};\n\n/** Runs the provider's checks (credentials, reachability); the result is shown, not cached. */\nexport const useTestDeploymentConnection = () =>\n useMutation({\n mutationKey: ['deployments', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.test(id)),\n });\n\nexport const useTriggerDeployment = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'trigger'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.connections.trigger(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRetryDeploymentRun = () => {\n const invalidate = useInvalidateDeployments();\n return useMutation({\n mutationKey: ['deployments', 'retry'],\n mutationFn: (id: string) => withCsrf(() => adminApi.deployments.runs.retry(id)),\n onSuccess: invalidate,\n });\n};\n","import type { DeploymentProvider, DeploymentTriggerPolicy, PublicationAction } from '@shapio/client';\n\nexport const PUBLICATION_ACTION_LABELS = {\n publish: 'publishing.actions.publish',\n unpublish: 'publishing.actions.unpublish',\n} as const satisfies Record<PublicationAction, string>;\n\nexport const PROVIDER_LABELS = {\n generic_webhook: 'publishing.deployments.providers.generic_webhook',\n cloudflare_pages: 'publishing.deployments.providers.cloudflare_pages',\n vercel: 'publishing.deployments.providers.vercel',\n netlify: 'publishing.deployments.providers.netlify',\n github: 'publishing.deployments.providers.github',\n} as const satisfies Record<DeploymentProvider, string>;\n\nexport const TRIGGER_POLICY_LABELS = {\n publish: 'publishing.deployments.triggers.publish',\n change_set: 'publishing.deployments.triggers.changeSet',\n schema: 'publishing.deployments.triggers.schema',\n manual: 'publishing.deployments.triggers.manual',\n} as const satisfies Record<DeploymentTriggerPolicy, string>;\n\nexport const RUN_TRIGGER_LABELS = {\n publish: 'publishing.deployments.runTriggers.publish',\n change_set: 'publishing.deployments.runTriggers.changeSet',\n schema: 'publishing.deployments.runTriggers.schema',\n manual: 'publishing.deployments.runTriggers.manual',\n retry: 'publishing.deployments.runTriggers.retry',\n} as const;\n\nexport const TIMELINE_SOURCE_LABELS = {\n shapio: 'publishing.deployments.sources.shapio',\n callback: 'publishing.deployments.sources.callback',\n provider: 'publishing.deployments.sources.provider',\n} as const;\n\n/** Longest error text shown in a table cell; the full text is in the details. */\nexport const ERROR_PREVIEW_LENGTH = 120;\n","import type { CreateWebhookInput, UpdateWebhookInput, Webhook } from '@shapio/client';\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n ACTIVE_DELIVERY_STATUSES,\n PUBLISHING_PAGE_SIZE,\n PUBLISHING_POLL_INTERVAL_MS,\n} from '@/constants/publishing';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nconst silent = { silent: true } as const;\n\nexport const useWebhooks = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.list,\n queryFn: () => adminApi.webhooks.list(),\n meta: silent,\n });\n\n/** The event types a webhook can subscribe to (a fixed catalogue: cached for the session). */\nexport const useWebhookEvents = () =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.events,\n queryFn: () => adminApi.webhooks.events(),\n staleTime: Infinity,\n meta: silent,\n });\n\nexport const useWebhook = (id: string) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.webhook(id),\n queryFn: () => adminApi.webhooks.get(id),\n meta: silent,\n });\n\n/** One page of the delivery log, polled while a delivery on it still has attempts left. */\nexport const useWebhookDeliveries = (id: string, cursor: string | undefined) =>\n useQuery({\n queryKey: queryKeys.publishing.webhooks.deliveries(id, cursor),\n queryFn: () => adminApi.webhooks.deliveries(id, { cursor, limit: PUBLISHING_PAGE_SIZE }),\n placeholderData: keepPreviousData,\n refetchInterval: (query) =>\n query.state.data?.items.some((delivery) => ACTIVE_DELIVERY_STATUSES.has(delivery.status))\n ? PUBLISHING_POLL_INTERVAL_MS\n : false,\n meta: silent,\n });\n\nconst useInvalidateWebhooks = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: queryKeys.publishing.webhooks.all });\n};\n\nexport const useCreateWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'create'],\n meta: silent,\n mutationFn: (input: CreateWebhookInput) => withCsrf(() => adminApi.webhooks.create(input)),\n onSuccess: invalidate,\n });\n};\n\n/** 409 when `expectedVersion` is stale: the caller reloads and tells the user. */\nexport const useUpdateWebhook = () => {\n const queryClient = useQueryClient();\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'update'],\n meta: silent,\n mutationFn: ({ id, input }: { id: string; input: UpdateWebhookInput }) =>\n withCsrf(() => adminApi.webhooks.update(id, input)),\n onSuccess: (webhook: Webhook) => {\n queryClient.setQueryData(queryKeys.publishing.webhooks.webhook(webhook.id), webhook);\n return invalidate();\n },\n });\n};\n\nexport const useDeleteWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'delete'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.remove(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRotateWebhookSecret = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'rotateSecret'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.rotateSecret(id)),\n onSuccess: invalidate,\n });\n};\n\n/** Queues a `webhook.test` delivery; the delivery log shows its outcome. */\nexport const useTestWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'test'],\n mutationFn: (id: string) => withCsrf(() => adminApi.webhooks.test(id)),\n onSuccess: invalidate,\n });\n};\n\nexport const useRedeliverWebhook = () => {\n const invalidate = useInvalidateWebhooks();\n return useMutation({\n mutationKey: ['webhooks', 'redeliver'],\n mutationFn: ({ id, deliveryId }: { id: string; deliveryId: string }) =>\n withCsrf(() => adminApi.webhooks.redeliver(id, deliveryId)),\n onSuccess: invalidate,\n });\n};\n","import { useState } from 'react';\n\ntype CursorPagerProps = {\n onFirst: (() => void) | undefined;\n onPrevious: (() => void) | undefined;\n onNext: (() => void) | undefined;\n};\n\n/**\n * First / Previous / Next for a forward-only cursor list (newest first). The current cursor lives wherever\n * the caller keeps it (usually the URL); the cursors of earlier pages are remembered here.\n */\nexport const useCursorPager = (\n cursor: string | undefined,\n setCursor: (cursor: string | undefined) => void,\n) => {\n const [previousCursors, setPreviousCursors] = useState<(string | undefined)[]>([]);\n const pagerProps = (nextCursor: string | null): CursorPagerProps => ({\n onFirst:\n cursor === undefined\n ? undefined\n : () => {\n setPreviousCursors([]);\n setCursor(undefined);\n },\n onPrevious:\n previousCursors.length === 0\n ? undefined\n : () => {\n setCursor(previousCursors.at(-1));\n setPreviousCursors((cursors) => cursors.slice(0, -1));\n },\n onNext: nextCursor\n ? () => {\n setPreviousCursors((cursors) => [...cursors, cursor]);\n setCursor(nextCursor);\n }\n : undefined,\n });\n return { pagerProps, resetPager: () => setPreviousCursors([]) };\n};\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{n as r}from"./createLucideIcon-
|
|
2
|
-
//# sourceMappingURL=useDiscardGuard-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{n as r}from"./createLucideIcon-CqygG5K6.js";import{t as i}from"./ConfirmDialog-DZRJfdvH.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-WTUINqD5.js.map
|
package/dist/admin/assets/{useDiscardGuard-B8dlCh6M.js.map → useDiscardGuard-WTUINqD5.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDiscardGuard-
|
|
1
|
+
{"version":3,"file":"useDiscardGuard-WTUINqD5.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":"iQAkBaS,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"}
|
package/dist/admin/assets/{useMediaPickerDialog-Cr7frtLB.js → useMediaPickerDialog-CFN9ZKfe.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{O as r,lt as i,o as a}from"./loader-circle-
|
|
2
|
-
//# sourceMappingURL=useMediaPickerDialog-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{O as r,lt as i,o as a}from"./loader-circle-C-9trZPI.js";import{c as o,d as s,f as c,l,m as u,p as d,u as f}from"./badge-ydvfgE8a.js";import{n as p}from"./createLucideIcon-CqygG5K6.js";import{w as m}from"./InfoHint-bYMd_t0J.js";import{i as h}from"./skeleton-Dyi_b1wq.js";import{a as g,i as _,n as v,r as y,t as b}from"./select-DUhL27UN.js";import{c as x}from"./Thumbnail-D1XuDElk.js";import{a as S,i as C,n as w,r as T,t as E}from"./useMediaUploader-B42H_CMG.js";import{t as D}from"./languages-BbfFIygP.js";import{t as O}from"./cn-DVhJ55Mo.js";import{r as k}from"./constants-DCtq_UOe.js";var A={draft:`content.status.draft`,published:`content.status.published`,modified:`content.status.modified`},j={draft:`neutral`,published:`success`,modified:`warning`},M=e(n(),1),N=({locales:e,value:t,onChange:n,states:r,size:i,id:a,className:o})=>{let{t:s}=p(),c=e=>{if(!r)return;let t=r.find(t=>t.locale===e);return s(t?A[t.status]:`content.locales.notCreated`)};return(0,M.jsxs)(b,{value:t,onValueChange:n,children:[(0,M.jsxs)(_,{id:a,size:i,"aria-label":a?void 0:s(`content.locales.label`),className:O(`w-full`,o),children:[(0,M.jsx)(D,{"aria-hidden":`true`}),(0,M.jsx)(g,{})]}),(0,M.jsx)(v,{children:e.map(e=>{let t=c(e.code);return(0,M.jsxs)(y,{value:e.code,children:[(0,M.jsx)(`span`,{children:e.label}),(0,M.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.code}),t?(0,M.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`· `,t]}):null]},e.code)})})]})},P=e(t(),1),F=e=>e.startsWith(`image/`)?`image`:e.startsWith(`video/`)?`video`:e.startsWith(`audio/`)?`audio`:e===`application/pdf`||e.startsWith(`text/`)||e.includes(`officedocument`)||e.includes(`opendocument`)||e===`application/msword`?`document`:`other`,I=e=>({id:e.id,filename:e.filename,mimeType:e.mimeType,url:e.url,alt:e.alt,width:e.width,height:e.height}),L=e=>{if(e?.length!==1)return;let[t]=e;return t===`image`||t===`video`||t===`audio`?`${t}/*`:void 0},R=({open:e,options:t,onPick:n,onCancel:g})=>{let{t:_}=p(),v=i(),{canWrite:y}=x(),b=E(),[D,O]=(0,P.useState)(),[A,j]=(0,P.useState)(),[N,I]=(0,P.useState)(`grid`),[R,z]=(0,P.useState)([]),[B,V]=(0,P.useState)(!1),H=t.multiple===!0,U=L(t.allowedKinds),W={...D?{search:D}:{},...U?{mimeType:U}:A?{mimeType:k[A]}:{}},G=(e,t)=>z(n=>t?H?[...n.filter(t=>t!==e),e]:[e]:n.filter(t=>t!==e)),K=()=>{z([]),g()},q=async()=>{V(!0);try{let e=(await Promise.all(R.map(e=>v.fetchQuery({queryKey:r.media.asset(e),queryFn:()=>a.media.assets.get(e)})))).filter(e=>!t.allowedKinds||t.allowedKinds.includes(F(e.mimeType)));z([]),n(e)}catch(e){m(e,`choosing media`)}finally{V(!1)}};return(0,M.jsx)(o,{open:e,onOpenChange:e=>e?void 0:K(),children:(0,M.jsxs)(f,{size:`lg`,...t.allowedKinds?{}:{"aria-describedby":void 0},children:[(0,M.jsxs)(d,{className:`pr-14`,children:[(0,M.jsx)(u,{children:_(H?`content.media.pickTitleMultiple`:`content.media.pickTitle`)}),t.allowedKinds?(0,M.jsx)(s,{children:_(`content.media.allowedKinds`,{kinds:t.allowedKinds.join(`, `)})}):null]}),(0,M.jsxs)(`div`,{className:`space-y-4 px-6 pb-4`,children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-start gap-2`,children:[(0,M.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,M.jsx)(C,{query:D,type:U?void 0:A,view:N,onQueryChange:O,onTypeChange:j,onViewChange:I})}),y?(0,M.jsx)(T,{variant:`outline`,label:_(`media.upload.action`),multiple:H,onFiles:e=>b.enqueue(e,{folderId:null,visibility:`public`})}):null]}),(0,M.jsx)(w,{onRetry:b.retry,onDismiss:b.dismiss})]}),(0,M.jsx)(l,{className:`pt-1`,children:(0,M.jsx)(S,{query:W,filtered:!!(D||A),view:N,selected:new Set(R),selectable:!0,activeId:void 0,onSelectChange:G,onOpen:e=>G(e.id,!R.includes(e.id))})}),(0,M.jsxs)(c,{children:[(0,M.jsx)(`span`,{role:`status`,className:`mr-auto text-sm text-muted-foreground`,children:_(`content.media.selectedCount`,{count:R.length})}),(0,M.jsx)(h,{type:`button`,variant:`outline`,onClick:K,children:_(`common.cancel`)}),(0,M.jsx)(h,{type:`button`,disabled:R.length===0||B,onClick:()=>void q(),children:_(`content.media.choose`,{count:R.length})})]})]})})},z=()=>{let[e,t]=(0,P.useState)(null),n=(0,P.useRef)(null),r=(0,P.useCallback)(e=>{n.current?.resolve(e),n.current=null,t(null)},[]);return{pickMedia:(0,P.useCallback)((e={})=>new Promise(r=>{n.current?.resolve(null);let i={options:e,resolve:r};n.current=i,t(i)}),[]),dialog:(0,M.jsx)(R,{open:e!==null,options:e?.options??{},onPick:e=>r(e.map(I)),onCancel:()=>r(null)})}};export{j as i,N as n,A as r,z as t};
|
|
2
|
+
//# sourceMappingURL=useMediaPickerDialog-CFN9ZKfe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaPickerDialog-Cr7frtLB.js","names":["useState","useState","useRef","useCallback","_jsx","__toESM","require_jsx_runtime","queryKeys","useQueryClient","adminApi","Sheet","SheetDescription","SheetFooter","SheetTitle","SheetHeader","SheetContent","useTranslation","reportError","Button","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","useMediaPermissions","Library","Toolbar","UploadQueue","UploadButton","useMediaUploader","Languages","cn","MIME_FILTER_BY_TYPE","ENTRY_STATUS_LABEL_KEYS","ENTRY_STATUS_TONES","import_jsx_runtime","LocaleSelect","statusOf","states","state","item","code","t","onChange","id","className","locales","status","locale","import_react","require_react","mediaKindOf","mimeType","toPickedMedia","asset","mimeFilterFor","kinds","kind","MediaPickerSheet","queryClient","uploader","search","setSearch","type","setType","view","setView","selected","setSelected","confirming","setConfirming","multiple","options","forcedMime","query","select","checked","current","close","onCancel","confirm","allowed","onPick","error","next","canWrite","files","SheetBody","useMediaPickerDialog","pending","setPending","pendingRef","settle","assets"],"sources":["../../src/features/Content/helpers/entryStatus.ts","../../src/features/Content/LocaleSelect/index.tsx","../../src/fields/helpers/media.ts","../../src/fields/MediaPickerSheet/index.tsx","../../src/fields/hooks/useMediaPickerDialog.tsx"],"sourcesContent":["import type { EntryStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\nexport const ENTRY_STATUS_LABEL_KEYS = {\n draft: 'content.status.draft',\n published: 'content.status.published',\n modified: 'content.status.modified',\n} as const satisfies Record<EntryStatus, string>;\n\n/** Draft is neutral, published is live (success), published with newer draft changes needs attention. */\nexport const ENTRY_STATUS_TONES = {\n draft: 'neutral',\n published: 'success',\n modified: 'warning',\n} as const satisfies Record<EntryStatus, StatusTone>;\n","import type { EntryLocaleState, Locale } from '@shapio/client';\nimport { Languages } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport { cn } from '@/helpers/cn';\nimport { ENTRY_STATUS_LABEL_KEYS } from '../helpers/entryStatus';\n\ntype LocaleSelectProps = {\n locales: readonly Locale[];\n value: string;\n onChange: (code: string) => void;\n /** Per-locale status of an entry; locales without a version are marked \"not created\". */\n states?: readonly EntryLocaleState[];\n /** `sm` (36px) in page headers and toolbars, `default` (40px) in panels. */\n size?: 'default' | 'sm';\n id?: string;\n className?: string;\n};\n\n/** Chooses the content locale (with each locale's status when editing an entry). */\nexport const LocaleSelect = ({\n locales,\n value,\n onChange,\n states,\n size,\n id,\n className,\n}: LocaleSelectProps) => {\n const { t } = useTranslation();\n const statusOf = (code: string) => {\n if (!states) {\n return undefined;\n }\n const state = states.find((item) => item.locale === code);\n return state ? t(ENTRY_STATUS_LABEL_KEYS[state.status]) : t('content.locales.notCreated');\n };\n return (\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger\n id={id}\n size={size}\n aria-label={id ? undefined : t('content.locales.label')}\n className={cn('w-full', className)}\n >\n <Languages aria-hidden=\"true\" />\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {locales.map((locale) => {\n const status = statusOf(locale.code);\n return (\n <SelectItem key={locale.code} value={locale.code}>\n <span>{locale.label}</span>\n <span className=\"font-mono text-xs text-muted-foreground\">{locale.code}</span>\n {status ? <span className=\"text-xs text-muted-foreground\">· {status}</span> : null}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaKind, PickedMedia } from '@shapio/editor-sdk';\n\n/** The media kind of a MIME type (the server's `allowedKinds` buckets). */\nexport const mediaKindOf = (mimeType: string): MediaKind => {\n if (mimeType.startsWith('image/')) {\n return 'image';\n }\n if (mimeType.startsWith('video/')) {\n return 'video';\n }\n if (mimeType.startsWith('audio/')) {\n return 'audio';\n }\n if (\n mimeType === 'application/pdf' ||\n mimeType.startsWith('text/') ||\n mimeType.includes('officedocument') ||\n mimeType.includes('opendocument') ||\n mimeType === 'application/msword'\n ) {\n return 'document';\n }\n return 'other';\n};\n\n/** What an editor gets back from the picker: never storage keys or attribution. */\nexport const toPickedMedia = (asset: MediaAsset): PickedMedia => ({\n id: asset.id,\n filename: asset.filename,\n mimeType: asset.mimeType,\n url: asset.url,\n alt: asset.alt,\n width: asset.width,\n height: asset.height,\n});\n\n/** The library's server-side type filter for a set of allowed kinds (only when it is one MIME family). */\nexport const mimeFilterFor = (kinds: readonly MediaKind[] | undefined): string | undefined => {\n if (kinds?.length !== 1) {\n return undefined;\n }\n const [kind] = kinds;\n return kind === 'image' || kind === 'video' || kind === 'audio' ? `${kind}/*` : undefined;\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaPickOptions } from '@shapio/editor-sdk';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { adminApi } from '@/api/client';\nimport { queryKeys } from '@/api/queryKeys';\nimport { Button } from '@/components/ui/button';\nimport {\n Sheet,\n SheetBody,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { MIME_FILTER_BY_TYPE, type MediaTypeFilter, type MediaView } from '@/features/Media/constants';\nimport { Library } from '@/features/Media/Library';\nimport { Toolbar } from '@/features/Media/Toolbar';\nimport { UploadButton } from '@/features/Media/UploadButton';\nimport { UploadQueue } from '@/features/Media/UploadQueue';\nimport { reportError } from '@/helpers/reportError';\nimport { useMediaPermissions } from '@/hooks/useMediaPermissions';\nimport { useMediaUploader } from '@/hooks/useMediaUploader';\nimport { mediaKindOf, mimeFilterFor } from '../helpers/media';\n\ntype MediaPickerSheetProps = {\n open: boolean;\n options: MediaPickOptions;\n onPick: (assets: MediaAsset[]) => void;\n onCancel: () => void;\n};\n\n/**\n * The media library's components in a large right-hand sheet, so the entry stays in view: search, filter,\n * upload, and choose one or several files. Files of kinds the field does not allow can be seen but not\n * chosen.\n */\nexport const MediaPickerSheet = ({ open, options, onPick, onCancel }: MediaPickerSheetProps) => {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { canWrite } = useMediaPermissions();\n const uploader = useMediaUploader();\n const [search, setSearch] = useState<string | undefined>();\n const [type, setType] = useState<MediaTypeFilter | undefined>();\n const [view, setView] = useState<MediaView>('grid');\n const [selected, setSelected] = useState<string[]>([]);\n const [confirming, setConfirming] = useState(false);\n const multiple = options.multiple === true;\n const forcedMime = mimeFilterFor(options.allowedKinds);\n const query = {\n ...(search ? { search } : {}),\n ...(forcedMime ? { mimeType: forcedMime } : type ? { mimeType: MIME_FILTER_BY_TYPE[type] } : {}),\n };\n const select = (id: string, checked: boolean) =>\n setSelected((current) => {\n if (!checked) {\n return current.filter((item) => item !== id);\n }\n return multiple ? [...current.filter((item) => item !== id), id] : [id];\n });\n const close = () => {\n setSelected([]);\n onCancel();\n };\n const confirm = async () => {\n setConfirming(true);\n try {\n const assets = await Promise.all(\n selected.map((id) =>\n queryClient.fetchQuery({\n queryKey: queryKeys.media.asset(id),\n queryFn: () => adminApi.media.assets.get(id),\n }),\n ),\n );\n const allowed = assets.filter(\n (asset) => !options.allowedKinds || options.allowedKinds.includes(mediaKindOf(asset.mimeType)),\n );\n setSelected([]);\n onPick(allowed);\n } catch (error) {\n reportError(error, 'choosing media');\n } finally {\n setConfirming(false);\n }\n };\n return (\n <Sheet open={open} onOpenChange={(next) => (next ? undefined : close())}>\n <SheetContent size=\"lg\" {...(options.allowedKinds ? {} : { 'aria-describedby': undefined })}>\n <SheetHeader className=\"pr-14\">\n <SheetTitle>\n {multiple ? t('content.media.pickTitleMultiple') : t('content.media.pickTitle')}\n </SheetTitle>\n {options.allowedKinds ? (\n <SheetDescription>\n {t('content.media.allowedKinds', { kinds: options.allowedKinds.join(', ') })}\n </SheetDescription>\n ) : null}\n </SheetHeader>\n <div className=\"space-y-4 px-6 pb-4\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <Toolbar\n query={search}\n type={forcedMime ? undefined : type}\n view={view}\n onQueryChange={setSearch}\n onTypeChange={setType}\n onViewChange={setView}\n />\n </div>\n {canWrite ? (\n <UploadButton\n variant=\"outline\"\n label={t('media.upload.action')}\n multiple={multiple}\n onFiles={(files) => uploader.enqueue(files, { folderId: null, visibility: 'public' })}\n />\n ) : null}\n </div>\n <UploadQueue onRetry={uploader.retry} onDismiss={uploader.dismiss} />\n </div>\n {/* A little top padding so the selected tiles' rings aren't clipped by the scroll area. */}\n <SheetBody className=\"pt-1\">\n <Library\n query={query}\n filtered={Boolean(search || type)}\n view={view}\n selected={new Set(selected)}\n selectable\n activeId={undefined}\n onSelectChange={select}\n onOpen={(asset) => select(asset.id, !selected.includes(asset.id))}\n />\n </SheetBody>\n <SheetFooter>\n <span role=\"status\" className=\"mr-auto text-sm text-muted-foreground\">\n {t('content.media.selectedCount', { count: selected.length })}\n </span>\n <Button type=\"button\" variant=\"outline\" onClick={close}>\n {t('common.cancel')}\n </Button>\n <Button type=\"button\" disabled={selected.length === 0 || confirming} onClick={() => void confirm()}>\n {t('content.media.choose', { count: selected.length })}\n </Button>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n );\n};\n","import type { MediaPickOptions, PickedMedia } from '@shapio/editor-sdk';\nimport { useCallback, useRef, useState } from 'react';\nimport { toPickedMedia } from '../helpers/media';\nimport { MediaPickerSheet } from '../MediaPickerSheet';\n\ntype PendingPick = { options: MediaPickOptions; resolve: (assets: PickedMedia[] | null) => void };\n\n/**\n * `pickMedia` for editors (the editor contract's media capability): opens the library in a sheet and resolves\n * with the chosen assets, or null when cancelled. Render `dialog` once in the form.\n */\nexport const useMediaPickerDialog = () => {\n const [pending, setPending] = useState<PendingPick | null>(null);\n const pendingRef = useRef<PendingPick | null>(null);\n const settle = useCallback((assets: PickedMedia[] | null) => {\n pendingRef.current?.resolve(assets);\n pendingRef.current = null;\n setPending(null);\n }, []);\n const pickMedia = useCallback(\n (options: MediaPickOptions = {}) =>\n new Promise<PickedMedia[] | null>((resolve) => {\n pendingRef.current?.resolve(null);\n const next = { options, resolve };\n pendingRef.current = next;\n setPending(next);\n }),\n [],\n );\n const dialog = (\n <MediaPickerSheet\n open={pending !== null}\n options={pending?.options ?? {}}\n onPick={(assets) => settle(assets.map(toPickedMedia))}\n onCancel={() => settle(null)}\n />\n );\n return { pickMedia, dialog };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useMediaPickerDialog-CFN9ZKfe.js","names":["useState","useState","useRef","useCallback","_jsx","__toESM","require_jsx_runtime","queryKeys","useQueryClient","adminApi","Sheet","SheetDescription","SheetFooter","SheetTitle","SheetHeader","SheetContent","useTranslation","reportError","Button","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","useMediaPermissions","Library","Toolbar","UploadQueue","UploadButton","useMediaUploader","Languages","cn","MIME_FILTER_BY_TYPE","ENTRY_STATUS_LABEL_KEYS","ENTRY_STATUS_TONES","import_jsx_runtime","LocaleSelect","statusOf","states","state","item","code","t","onChange","id","className","locales","status","locale","import_react","require_react","mediaKindOf","mimeType","toPickedMedia","asset","mimeFilterFor","kinds","kind","MediaPickerSheet","queryClient","uploader","search","setSearch","type","setType","view","setView","selected","setSelected","confirming","setConfirming","multiple","options","forcedMime","query","select","checked","current","close","onCancel","confirm","allowed","onPick","error","next","canWrite","files","SheetBody","useMediaPickerDialog","pending","setPending","pendingRef","settle","assets"],"sources":["../../src/features/Content/helpers/entryStatus.ts","../../src/features/Content/LocaleSelect/index.tsx","../../src/fields/helpers/media.ts","../../src/fields/MediaPickerSheet/index.tsx","../../src/fields/hooks/useMediaPickerDialog.tsx"],"sourcesContent":["import type { EntryStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\nexport const ENTRY_STATUS_LABEL_KEYS = {\n draft: 'content.status.draft',\n published: 'content.status.published',\n modified: 'content.status.modified',\n} as const satisfies Record<EntryStatus, string>;\n\n/** Draft is neutral, published is live (success), published with newer draft changes needs attention. */\nexport const ENTRY_STATUS_TONES = {\n draft: 'neutral',\n published: 'success',\n modified: 'warning',\n} as const satisfies Record<EntryStatus, StatusTone>;\n","import type { EntryLocaleState, Locale } from '@shapio/client';\nimport { Languages } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport { cn } from '@/helpers/cn';\nimport { ENTRY_STATUS_LABEL_KEYS } from '../helpers/entryStatus';\n\ntype LocaleSelectProps = {\n locales: readonly Locale[];\n value: string;\n onChange: (code: string) => void;\n /** Per-locale status of an entry; locales without a version are marked \"not created\". */\n states?: readonly EntryLocaleState[];\n /** `sm` (36px) in page headers and toolbars, `default` (40px) in panels. */\n size?: 'default' | 'sm';\n id?: string;\n className?: string;\n};\n\n/** Chooses the content locale (with each locale's status when editing an entry). */\nexport const LocaleSelect = ({\n locales,\n value,\n onChange,\n states,\n size,\n id,\n className,\n}: LocaleSelectProps) => {\n const { t } = useTranslation();\n const statusOf = (code: string) => {\n if (!states) {\n return undefined;\n }\n const state = states.find((item) => item.locale === code);\n return state ? t(ENTRY_STATUS_LABEL_KEYS[state.status]) : t('content.locales.notCreated');\n };\n return (\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger\n id={id}\n size={size}\n aria-label={id ? undefined : t('content.locales.label')}\n className={cn('w-full', className)}\n >\n <Languages aria-hidden=\"true\" />\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {locales.map((locale) => {\n const status = statusOf(locale.code);\n return (\n <SelectItem key={locale.code} value={locale.code}>\n <span>{locale.label}</span>\n <span className=\"font-mono text-xs text-muted-foreground\">{locale.code}</span>\n {status ? <span className=\"text-xs text-muted-foreground\">· {status}</span> : null}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaKind, PickedMedia } from '@shapio/editor-sdk';\n\n/** The media kind of a MIME type (the server's `allowedKinds` buckets). */\nexport const mediaKindOf = (mimeType: string): MediaKind => {\n if (mimeType.startsWith('image/')) {\n return 'image';\n }\n if (mimeType.startsWith('video/')) {\n return 'video';\n }\n if (mimeType.startsWith('audio/')) {\n return 'audio';\n }\n if (\n mimeType === 'application/pdf' ||\n mimeType.startsWith('text/') ||\n mimeType.includes('officedocument') ||\n mimeType.includes('opendocument') ||\n mimeType === 'application/msword'\n ) {\n return 'document';\n }\n return 'other';\n};\n\n/** What an editor gets back from the picker: never storage keys or attribution. */\nexport const toPickedMedia = (asset: MediaAsset): PickedMedia => ({\n id: asset.id,\n filename: asset.filename,\n mimeType: asset.mimeType,\n url: asset.url,\n alt: asset.alt,\n width: asset.width,\n height: asset.height,\n});\n\n/** The library's server-side type filter for a set of allowed kinds (only when it is one MIME family). */\nexport const mimeFilterFor = (kinds: readonly MediaKind[] | undefined): string | undefined => {\n if (kinds?.length !== 1) {\n return undefined;\n }\n const [kind] = kinds;\n return kind === 'image' || kind === 'video' || kind === 'audio' ? `${kind}/*` : undefined;\n};\n","import type { MediaAsset } from '@shapio/client';\nimport type { MediaPickOptions } from '@shapio/editor-sdk';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { adminApi } from '@/api/client';\nimport { queryKeys } from '@/api/queryKeys';\nimport { Button } from '@/components/ui/button';\nimport {\n Sheet,\n SheetBody,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet';\nimport { MIME_FILTER_BY_TYPE, type MediaTypeFilter, type MediaView } from '@/features/Media/constants';\nimport { Library } from '@/features/Media/Library';\nimport { Toolbar } from '@/features/Media/Toolbar';\nimport { UploadButton } from '@/features/Media/UploadButton';\nimport { UploadQueue } from '@/features/Media/UploadQueue';\nimport { reportError } from '@/helpers/reportError';\nimport { useMediaPermissions } from '@/hooks/useMediaPermissions';\nimport { useMediaUploader } from '@/hooks/useMediaUploader';\nimport { mediaKindOf, mimeFilterFor } from '../helpers/media';\n\ntype MediaPickerSheetProps = {\n open: boolean;\n options: MediaPickOptions;\n onPick: (assets: MediaAsset[]) => void;\n onCancel: () => void;\n};\n\n/**\n * The media library's components in a large right-hand sheet, so the entry stays in view: search, filter,\n * upload, and choose one or several files. Files of kinds the field does not allow can be seen but not\n * chosen.\n */\nexport const MediaPickerSheet = ({ open, options, onPick, onCancel }: MediaPickerSheetProps) => {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const { canWrite } = useMediaPermissions();\n const uploader = useMediaUploader();\n const [search, setSearch] = useState<string | undefined>();\n const [type, setType] = useState<MediaTypeFilter | undefined>();\n const [view, setView] = useState<MediaView>('grid');\n const [selected, setSelected] = useState<string[]>([]);\n const [confirming, setConfirming] = useState(false);\n const multiple = options.multiple === true;\n const forcedMime = mimeFilterFor(options.allowedKinds);\n const query = {\n ...(search ? { search } : {}),\n ...(forcedMime ? { mimeType: forcedMime } : type ? { mimeType: MIME_FILTER_BY_TYPE[type] } : {}),\n };\n const select = (id: string, checked: boolean) =>\n setSelected((current) => {\n if (!checked) {\n return current.filter((item) => item !== id);\n }\n return multiple ? [...current.filter((item) => item !== id), id] : [id];\n });\n const close = () => {\n setSelected([]);\n onCancel();\n };\n const confirm = async () => {\n setConfirming(true);\n try {\n const assets = await Promise.all(\n selected.map((id) =>\n queryClient.fetchQuery({\n queryKey: queryKeys.media.asset(id),\n queryFn: () => adminApi.media.assets.get(id),\n }),\n ),\n );\n const allowed = assets.filter(\n (asset) => !options.allowedKinds || options.allowedKinds.includes(mediaKindOf(asset.mimeType)),\n );\n setSelected([]);\n onPick(allowed);\n } catch (error) {\n reportError(error, 'choosing media');\n } finally {\n setConfirming(false);\n }\n };\n return (\n <Sheet open={open} onOpenChange={(next) => (next ? undefined : close())}>\n <SheetContent size=\"lg\" {...(options.allowedKinds ? {} : { 'aria-describedby': undefined })}>\n <SheetHeader className=\"pr-14\">\n <SheetTitle>\n {multiple ? t('content.media.pickTitleMultiple') : t('content.media.pickTitle')}\n </SheetTitle>\n {options.allowedKinds ? (\n <SheetDescription>\n {t('content.media.allowedKinds', { kinds: options.allowedKinds.join(', ') })}\n </SheetDescription>\n ) : null}\n </SheetHeader>\n <div className=\"space-y-4 px-6 pb-4\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <Toolbar\n query={search}\n type={forcedMime ? undefined : type}\n view={view}\n onQueryChange={setSearch}\n onTypeChange={setType}\n onViewChange={setView}\n />\n </div>\n {canWrite ? (\n <UploadButton\n variant=\"outline\"\n label={t('media.upload.action')}\n multiple={multiple}\n onFiles={(files) => uploader.enqueue(files, { folderId: null, visibility: 'public' })}\n />\n ) : null}\n </div>\n <UploadQueue onRetry={uploader.retry} onDismiss={uploader.dismiss} />\n </div>\n {/* A little top padding so the selected tiles' rings aren't clipped by the scroll area. */}\n <SheetBody className=\"pt-1\">\n <Library\n query={query}\n filtered={Boolean(search || type)}\n view={view}\n selected={new Set(selected)}\n selectable\n activeId={undefined}\n onSelectChange={select}\n onOpen={(asset) => select(asset.id, !selected.includes(asset.id))}\n />\n </SheetBody>\n <SheetFooter>\n <span role=\"status\" className=\"mr-auto text-sm text-muted-foreground\">\n {t('content.media.selectedCount', { count: selected.length })}\n </span>\n <Button type=\"button\" variant=\"outline\" onClick={close}>\n {t('common.cancel')}\n </Button>\n <Button type=\"button\" disabled={selected.length === 0 || confirming} onClick={() => void confirm()}>\n {t('content.media.choose', { count: selected.length })}\n </Button>\n </SheetFooter>\n </SheetContent>\n </Sheet>\n );\n};\n","import type { MediaPickOptions, PickedMedia } from '@shapio/editor-sdk';\nimport { useCallback, useRef, useState } from 'react';\nimport { toPickedMedia } from '../helpers/media';\nimport { MediaPickerSheet } from '../MediaPickerSheet';\n\ntype PendingPick = { options: MediaPickOptions; resolve: (assets: PickedMedia[] | null) => void };\n\n/**\n * `pickMedia` for editors (the editor contract's media capability): opens the library in a sheet and resolves\n * with the chosen assets, or null when cancelled. Render `dialog` once in the form.\n */\nexport const useMediaPickerDialog = () => {\n const [pending, setPending] = useState<PendingPick | null>(null);\n const pendingRef = useRef<PendingPick | null>(null);\n const settle = useCallback((assets: PickedMedia[] | null) => {\n pendingRef.current?.resolve(assets);\n pendingRef.current = null;\n setPending(null);\n }, []);\n const pickMedia = useCallback(\n (options: MediaPickOptions = {}) =>\n new Promise<PickedMedia[] | null>((resolve) => {\n pendingRef.current?.resolve(null);\n const next = { options, resolve };\n pendingRef.current = next;\n setPending(next);\n }),\n [],\n );\n const dialog = (\n <MediaPickerSheet\n open={pending !== null}\n options={pending?.options ?? {}}\n onPick={(assets) => settle(assets.map(toPickedMedia))}\n onCancel={() => settle(null)}\n />\n );\n return { pickMedia, dialog };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{O as r,i,lt as a,o,s,t as c,u as l}from"./loader-circle-BaUsKfL8.js";import{a as u}from"./media-azW3_Am5.js";import{A as d,O as f,n as p,o as ee,r as te,v as ne}from"./badge-CB016qlm.js";import{c as re,n as m,s as h,t as g}from"./createLucideIcon-CJwW5JJW.js";import{i as ie,n as ae,t as oe}from"./RowTitle-DuN-jQxy.js";import{C as se,E as _}from"./InfoHint-2HZJCzwW.js";import{T as v,x as ce}from"./es2015-DgNe6MPq.js";import{i as y,n as le}from"./skeleton-BUvrrXQ7.js";import{a as b,i as x,n as S,o as ue,r as C,s as de,t as fe}from"./select-p7RjCHS1.js";import{n as w}from"./ConfirmDialog-Dq6IrmS9.js";import{t as pe}from"./circle-check-nVBFETQc.js";import{n as me}from"./external-link-s_y1Tlvw.js";import{n as T,o as E,s as D,t as O}from"./Thumbnail-B1iRlbxI.js";import{t as k}from"./search-JRmBbB7P.js";import{m as A}from"./dropdown-menu-jrFjkuhR.js";import{t as j}from"./rotate-ccw-TD7gQ_S5.js";import{t as M}from"./cn-DVhJ55Mo.js";import{a as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./table-zG68ipQc.js";import{t as he}from"./useSearchInput-1fDoEtXe.js";import{t as ge}from"./constants-DCtq_UOe.js";import{t as _e}from"./Panel-B1TkcP8V.js";var B={name:`images`,size:24,node:[[`path`,{d:`m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16`,key:`9kzy35`}],[`path`,{d:`M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2`,key:`1t0f0t`}],[`circle`,{cx:`13`,cy:`7`,r:`1`,fill:`currentColor`,key:`1obus6`}],[`rect`,{x:`8`,y:`2`,width:`14`,height:`14`,rx:`2`,key:`1gvhby`}]]};B.node;var V=g(B),H={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};H.node;var U=g(H),W={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};W.node;var G=g(W),K=e(t(),1),ve=(e,t,n)=>{let r=t===void 0?-1:e.indexOf(t),i=e.indexOf(n);if(r!==-1&&i!==-1)return e.slice(Math.min(r,i),Math.max(r,i)+1)},q=(e,t)=>{let n=(0,K.useRef)(void 0);return{select:({id:r,checked:i,shiftKey:a})=>{let o=a?ve(e,n.current,r):void 0;if(o)for(let e of o)t(e,!0);else t(r,i);n.current=r}}},J=e(n(),1),ye=({asset:e,selected:t,selectable:n,active:r,onSelect:i,onOpen:a})=>{let{t:o}=m(),s=E[e.status];return(0,J.jsxs)(`li`,{className:M(`group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input`,(t||r)&&`border-primary ring-2 ring-primary hover:border-primary`),children:[(0,J.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.shiftKey&&n){i(!t,!0);return}a()},className:`flex w-full flex-col text-left outline-none`,"aria-label":o(`media.openDetails`,{name:e.filename}),children:[(0,J.jsx)(O,{asset:e,className:`aspect-square w-full border-b`}),(0,J.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5 px-3 py-2.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-sm font-medium`,title:e.filename,children:e.filename}),(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground`,children:[(0,J.jsxs)(`span`,{className:`truncate`,children:[T(e.filename,e.mimeType),` · `,D(e.sizeBytes)]}),e.visibility===`private`?(0,J.jsx)(d,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):null]})]})]}),e.status===`ready`?null:(0,J.jsx)(p,{tone:s.tone,label:o(s.labelKey),size:`sm`,className:`pointer-events-none absolute top-2 right-2`}),n?(0,J.jsx)(w,{checked:t,onClick:e=>{e.shiftKey&&(e.preventDefault(),i(!t,!0))},onCheckedChange:e=>i(e===!0,!1),"aria-label":o(`media.select`,{name:e.filename}),className:`absolute top-2 left-2 bg-card`}):null]})},be=({assets:e,selected:t,selectable:n,activeId:r,onSelectChange:i,onOpen:a})=>{let{t:o}=m(),s=q(e.map(e=>e.id),i);return(0,J.jsx)(`ul`,{"aria-label":o(`media.assetsLabel`,{count:e.length}),className:`grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4`,children:e.map(e=>(0,J.jsx)(ye,{asset:e,selected:t.has(e.id),selectable:n,active:e.id===r,onSelect:(t,n)=>s.select({id:e.id,checked:t,shiftKey:n}),onOpen:()=>a(e)},e.id))})},xe=({assets:e,selected:t,selectable:n,onSelectChange:r,onOpen:i})=>{let{t:a}=m(),o=q(e.map(e=>e.id),r);return(0,J.jsx)(R,{children:(0,J.jsxs)(z,{children:[(0,J.jsx)(N,{children:(0,J.jsxs)(I,{children:[n?(0,J.jsx)(P,{className:`w-10`,children:(0,J.jsx)(`span`,{className:`sr-only`,children:a(`media.selection`)})}):null,(0,J.jsx)(P,{children:a(`media.fields.filename`)}),(0,J.jsx)(P,{children:a(`media.fields.type`)}),(0,J.jsx)(P,{className:`text-right`,children:a(`media.fields.size`)}),(0,J.jsx)(P,{children:a(`media.fields.status`)}),(0,J.jsx)(P,{children:a(`media.fields.uploaded`)})]})}),(0,J.jsx)(F,{children:e.map(e=>{let r=E[e.status],s=t.has(e.id);return(0,J.jsxs)(I,{"data-state":s?`selected`:void 0,children:[n?(0,J.jsx)(L,{children:(0,J.jsx)(w,{checked:s,onClick:t=>{t.shiftKey&&(t.preventDefault(),o.select({id:e.id,checked:!s,shiftKey:!0}))},onCheckedChange:t=>o.select({id:e.id,checked:t===!0,shiftKey:!1}),"aria-label":a(`media.select`,{name:e.filename})})}):null,(0,J.jsx)(L,{className:`max-w-96`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-3`,children:[(0,J.jsx)(O,{asset:e,className:`size-8 shrink-0 rounded-md`}),(0,J.jsx)(oe,{asChild:!0,className:`min-w-0 truncate text-left`,children:(0,J.jsx)(`button`,{type:`button`,onClick:()=>i(e),children:e.filename})}),e.visibility===`private`?(0,J.jsx)(d,{role:`img`,"aria-label":a(`media.visibility.private`),className:`size-3.5 shrink-0 text-muted-foreground`}):null]})}),(0,J.jsx)(L,{className:`text-muted-foreground`,title:e.mimeType,children:T(e.filename,e.mimeType)}),(0,J.jsx)(L,{className:`text-right tabular-nums`,children:D(e.sizeBytes)}),(0,J.jsx)(L,{children:(0,J.jsx)(p,{tone:r.tone,label:a(r.labelKey),size:`sm`})}),(0,J.jsx)(L,{className:`whitespace-nowrap`,title:ae(e.createdAt),children:ie(e.createdAt)})]},e.id)})})]})})},Se=({query:e,filtered:t,view:n,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s})=>{let{t:c}=m(),l=u(e);if(l.isPending)return(0,J.jsx)(ne,{rows:4});if(l.isError)return(0,J.jsx)(te,{error:l.error,onRetry:()=>void l.refetch()});let d=l.data.pages.flatMap(e=>e.items);if(d.length===0){let n=t||e.folder!==void 0;return(0,J.jsx)(ee,{icon:V,size:n?`panel`:`page`,title:c(t?`media.emptyFiltered`:n?`media.emptyFolder`:`media.empty`)})}return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[n===`grid`?(0,J.jsx)(be,{assets:d,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s}):(0,J.jsx)(xe,{assets:d,selected:r,selectable:i,onSelectChange:o,onOpen:s}),l.hasNextPage?(0,J.jsx)(`div`,{className:`flex justify-center`,children:(0,J.jsx)(y,{variant:`outline`,disabled:l.isFetchingNextPage,"aria-busy":l.isFetchingNextPage||void 0,onClick:()=>void l.fetchNextPage(),children:l.isFetchingNextPage?c(`common.loading`):c(`media.loadMore`)})}):null]})},Y=`all`,Ce={image:`media.types.image`,video:`media.types.video`,audio:`media.types.audio`,pdf:`media.types.pdf`},we=({query:e,type:t,view:n,onQueryChange:r,onTypeChange:i,onViewChange:a})=>{let{t:o}=m(),{text:s,setText:c}=he(e,r);return(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsxs)(`div`,{className:`relative min-w-48 flex-1`,children:[(0,J.jsx)(k,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,J.jsx)(le,{type:`search`,value:s,onChange:e=>c(e.target.value),"aria-label":o(`media.search`),placeholder:o(`media.searchPlaceholder`),inputSize:`sm`,className:`pl-8`})]}),(0,J.jsxs)(fe,{value:t??Y,onValueChange:e=>i(e===Y?void 0:e),children:[(0,J.jsx)(x,{size:`sm`,"aria-label":o(`media.typeFilter`),className:`w-36`,children:(0,J.jsx)(b,{})}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{value:Y,children:o(`media.types.all`)}),ge.map(e=>(0,J.jsx)(C,{value:e,children:o(Ce[e])},e))]})]}),(0,J.jsxs)(`div`,{role:`group`,"aria-label":o(`media.view`),className:`flex h-9 items-center gap-0.5 rounded-lg border border-input px-px`,children:[(0,J.jsx)(y,{variant:n===`grid`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`grid`,"aria-label":o(`media.viewGrid`),onClick:()=>a(`grid`),children:(0,J.jsx)(U,{"aria-hidden":`true`})}),(0,J.jsx)(y,{variant:n===`list`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`list`,"aria-label":o(`media.viewList`),onClick:()=>a(`list`),children:(0,J.jsx)(A,{"aria-hidden":`true`})})]})]})},Te=({label:e,multiple:t=!0,onFiles:n,...r})=>{let i=(0,K.useRef)(null);return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(y,{...r,onClick:()=>i.current?.click(),children:[(0,J.jsx)(G,{"aria-hidden":`true`}),e]}),(0,J.jsx)(`input`,{ref:i,type:`file`,multiple:t,tabIndex:-1,"aria-hidden":`true`,className:`sr-only`,onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,t.length>0&&n(t)}})]})},X=l()(e=>({items:[],add:t=>e(e=>({items:[...e.items,t]})),update:(t,n)=>e(e=>({items:e.items.map(e=>e.id===t?{...e,...n}:e)})),remove:t=>e(e=>({items:e.items.filter(e=>e.id!==t)})),clearFinished:()=>e(e=>({items:e.items.filter(e=>e.status!==`done`)}))})),Z=class extends Error{status;body;constructor(e,t){super(`Upload failed with status ${e}`),this.name=`UploadTransferError`,this.status=e,this.body=t}},Ee=({url:e,form:t,onProgress:n,signal:r})=>new Promise((i,a)=>{let o=new XMLHttpRequest;o.open(`POST`,e),o.withCredentials=!1,o.upload.onprogress=e=>{e.lengthComputable&&e.total>0&&n(e.loaded/e.total)},o.onload=()=>{if(o.status>=200&&o.status<300){n(1),i();return}a(new Z(o.status,o.responseText))},o.onerror=()=>a(new Z(0,``)),o.onabort=()=>a(new DOMException(`Upload cancelled`,`AbortError`)),r?.addEventListener(`abort`,()=>o.abort(),{once:!0}),o.send(t)}),De=e=>e instanceof Z?e.status===0?v.t(`media.upload.unreachable`):e.status===413||/EntityTooLarge/.test(e.body)?v.t(`errors.codes.FILE_TOO_LARGE`):v.t(`media.upload.transferFailed`,{status:e.status}):ce(e),Q=100,Oe=({item:e,onRetry:t,onDismiss:n})=>{let{t:r}=m(),i=Math.round(e.progress*Q),a=e.status===`uploading`?r(`media.upload.uploading`,{percent:i}):e.status===`confirming`?r(`media.upload.checking`):e.status===`done`?r(`media.upload.done`):De(e.error);return(0,J.jsxs)(`li`,{className:`flex items-start gap-3 px-5 py-2.5`,children:[(0,J.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:e.status===`done`?(0,J.jsx)(pe,{"aria-hidden":`true`,className:`size-4 text-success`}):e.status===`failed`?(0,J.jsx)(me,{"aria-hidden":`true`,className:`size-4 text-destructive`}):(0,J.jsx)(c,{"aria-hidden":`true`,className:`size-4 animate-spin text-muted-foreground motion-reduce:animate-none`})}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,J.jsxs)(`p`,{className:`flex items-baseline gap-2 text-sm`,children:[(0,J.jsx)(`span`,{className:`truncate font-medium`,children:e.file.name}),(0,J.jsx)(`span`,{className:`shrink-0 text-meta text-muted-foreground`,children:D(e.file.size)})]}),e.status===`uploading`||e.status===`confirming`?(0,J.jsx)(`div`,{role:`progressbar`,"aria-label":r(`media.upload.progress`,{name:e.file.name}),"aria-valuemin":0,"aria-valuemax":Q,"aria-valuenow":i,className:`h-1.5 overflow-hidden rounded-full bg-muted`,style:{"--upload-progress":`${i}%`},children:(0,J.jsx)(`div`,{className:`h-full w-[var(--upload-progress)] bg-primary transition-[width]`})}):null,(0,J.jsx)(`p`,{className:M(`text-meta`,e.status===`failed`?`text-destructive`:`text-muted-foreground`),children:a})]}),e.status===`failed`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.retry`,{name:e.file.name}),onClick:t,children:(0,J.jsx)(j,{"aria-hidden":`true`})}):null,e.status===`failed`||e.status===`done`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.dismiss`,{name:e.file.name}),onClick:n,children:(0,J.jsx)(f,{"aria-hidden":`true`})}):null]})},ke=({onRetry:e,onDismiss:t})=>{let{t:n}=m(),r=X(e=>e.items),i=X(e=>e.clearFinished),[a,o]=(0,K.useState)(!1);if(r.length===0)return null;let s=r.filter(e=>e.status===`uploading`||e.status===`confirming`).length,c=r.filter(e=>e.status===`failed`).length,l=r.length-s-c,u=s===0&&c===0,d=!u||a;return(0,J.jsx)(_e,{title:n(`media.upload.queueTitle`),titleAs:`h2`,flush:d,actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-meta text-muted-foreground`,children:u?n(`media.upload.doneSummary`,{count:l}):n(`media.upload.summary`,{active:s,failed:c})}),u?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-expanded":d,"aria-label":n(d?`media.upload.hideFinished`:`media.upload.showFinished`),onClick:()=>o(e=>!e),children:d?(0,J.jsx)(ue,{"aria-hidden":`true`}):(0,J.jsx)(de,{"aria-hidden":`true`})}):null,l>0?(0,J.jsx)(y,{variant:`ghost`,size:`sm`,onClick:i,children:n(`media.upload.clearFinished`)}):null]}),bodyClassName:d?void 0:`hidden`,children:d?(0,J.jsx)(`ul`,{className:`max-h-64 divide-y overflow-y-auto`,children:r.map(n=>(0,J.jsx)(Oe,{item:n,onRetry:()=>e(n.id),onDismiss:()=>t(n.id)},n.id))}):null})},Ae=`application/octet-stream`,je=e=>{let t={filename:e.file.name,mimeType:e.file.type||Ae,sizeBytes:e.file.size};return i(()=>e.replaceAssetId?o.media.assets.replace(e.replaceAssetId,t):o.media.uploads.create({...t,folderId:e.folderId,visibility:e.visibility}))},$=async(e,t,n)=>{let r=await je(e);return await Ee({url:re(r,s()),form:h(r,e.file,e.file.name),onProgress:t}),n(),i(()=>o.media.uploads.confirm(r.grantId))},Me=()=>{let e=a(),{add:t,update:n,remove:i}=X.getState(),o=(0,K.useCallback)(async t=>{n(t.id,{status:`uploading`,progress:0,error:void 0});try{let e=await $(t,e=>n(t.id,{progress:e}),()=>n(t.id,{status:`confirming`}));n(t.id,{status:`done`,assetId:e.id}),t.replaceAssetId&&_.success(v.t(`media.upload.replaced`,{name:t.file.name}))}catch(e){se(e,`uploading ${t.file.name}`),n(t.id,{status:`failed`,error:e})}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e,n]);return{enqueue:(0,K.useCallback)((e,n)=>{for(let r of e){let e={id:crypto.randomUUID(),file:r,folderId:n.folderId,visibility:n.visibility,replaceAssetId:n.replaceAssetId,status:`uploading`,progress:0,error:void 0,assetId:void 0};t(e),o(e)}},[t,o]),retry:(0,K.useCallback)(e=>{let t=X.getState().items.find(t=>t.id===e);t&&o(t)},[o]),dismiss:i,uploadOne:(0,K.useCallback)(async t=>{try{let n=await $({file:t,folderId:null,visibility:`public`,replaceAssetId:void 0},()=>void 0,()=>void 0);return e.setQueryData(r.media.asset(n.id),n),{id:n.id,alt:n.alt||null}}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e])}};export{Se as a,V as c,we as i,ke as n,G as o,Te as r,U as s,Me as t};
|
|
2
|
-
//# sourceMappingURL=useMediaUploader-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{O as r,i,lt as a,o,s,t as c,u as l}from"./loader-circle-C-9trZPI.js";import{a as u}from"./media-VCJUbYzJ.js";import{A as d,O as f,n as p,o as ee,r as te,v as ne}from"./badge-ydvfgE8a.js";import{g as re,h as m,n as h,t as g}from"./createLucideIcon-CqygG5K6.js";import{i as ie,n as ae,t as oe}from"./RowTitle-DoxDM1XL.js";import{C as se,E as _}from"./InfoHint-bYMd_t0J.js";import{T as v,x as ce}from"./es2015-DrAA1N2V.js";import{i as y,n as le}from"./skeleton-Dyi_b1wq.js";import{a as b,i as x,n as S,o as ue,r as C,s as de,t as fe}from"./select-DUhL27UN.js";import{n as w}from"./ConfirmDialog-DZRJfdvH.js";import{t as pe}from"./circle-check-De27poaB.js";import{n as me}from"./external-link-nZp2VpKw.js";import{n as T,o as E,s as D,t as O}from"./Thumbnail-D1XuDElk.js";import{t as k}from"./search-CW3iBC4k.js";import{m as A}from"./dropdown-menu-C53v9ioW.js";import{t as j}from"./rotate-ccw-Cvc_uA58.js";import{t as M}from"./cn-DVhJ55Mo.js";import{a as N,i as P,n as F,o as I,r as L,s as R,t as z}from"./table-zG68ipQc.js";import{t as he}from"./useSearchInput-1fDoEtXe.js";import{t as ge}from"./constants-DCtq_UOe.js";import{t as _e}from"./Panel-B1TkcP8V.js";var B={name:`images`,size:24,node:[[`path`,{d:`m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16`,key:`9kzy35`}],[`path`,{d:`M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2`,key:`1t0f0t`}],[`circle`,{cx:`13`,cy:`7`,r:`1`,fill:`currentColor`,key:`1obus6`}],[`rect`,{x:`8`,y:`2`,width:`14`,height:`14`,rx:`2`,key:`1gvhby`}]]};B.node;var V=g(B),H={name:`layout-grid`,size:24,node:[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]};H.node;var U=g(H),W={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};W.node;var G=g(W),K=e(t(),1),ve=(e,t,n)=>{let r=t===void 0?-1:e.indexOf(t),i=e.indexOf(n);if(r!==-1&&i!==-1)return e.slice(Math.min(r,i),Math.max(r,i)+1)},q=(e,t)=>{let n=(0,K.useRef)(void 0);return{select:({id:r,checked:i,shiftKey:a})=>{let o=a?ve(e,n.current,r):void 0;if(o)for(let e of o)t(e,!0);else t(r,i);n.current=r}}},J=e(n(),1),ye=({asset:e,selected:t,selectable:n,active:r,onSelect:i,onOpen:a})=>{let{t:o}=h(),s=E[e.status];return(0,J.jsxs)(`li`,{className:M(`group relative overflow-hidden rounded-xl border bg-card transition-shadow focus-within:ring-[3px] focus-within:ring-ring/50 hover:border-input`,(t||r)&&`border-primary ring-2 ring-primary hover:border-primary`),children:[(0,J.jsxs)(`button`,{type:`button`,onClick:e=>{if(e.shiftKey&&n){i(!t,!0);return}a()},className:`flex w-full flex-col text-left outline-none`,"aria-label":o(`media.openDetails`,{name:e.filename}),children:[(0,J.jsx)(O,{asset:e,className:`aspect-square w-full border-b`}),(0,J.jsxs)(`span`,{className:`flex min-w-0 flex-col gap-0.5 px-3 py-2.5`,children:[(0,J.jsx)(`span`,{className:`truncate text-sm font-medium`,title:e.filename,children:e.filename}),(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5 text-meta text-muted-foreground`,children:[(0,J.jsxs)(`span`,{className:`truncate`,children:[T(e.filename,e.mimeType),` · `,D(e.sizeBytes)]}),e.visibility===`private`?(0,J.jsx)(d,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}):null]})]})]}),e.status===`ready`?null:(0,J.jsx)(p,{tone:s.tone,label:o(s.labelKey),size:`sm`,className:`pointer-events-none absolute top-2 right-2`}),n?(0,J.jsx)(w,{checked:t,onClick:e=>{e.shiftKey&&(e.preventDefault(),i(!t,!0))},onCheckedChange:e=>i(e===!0,!1),"aria-label":o(`media.select`,{name:e.filename}),className:`absolute top-2 left-2 bg-card`}):null]})},be=({assets:e,selected:t,selectable:n,activeId:r,onSelectChange:i,onOpen:a})=>{let{t:o}=h(),s=q(e.map(e=>e.id),i);return(0,J.jsx)(`ul`,{"aria-label":o(`media.assetsLabel`,{count:e.length}),className:`grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-4`,children:e.map(e=>(0,J.jsx)(ye,{asset:e,selected:t.has(e.id),selectable:n,active:e.id===r,onSelect:(t,n)=>s.select({id:e.id,checked:t,shiftKey:n}),onOpen:()=>a(e)},e.id))})},xe=({assets:e,selected:t,selectable:n,onSelectChange:r,onOpen:i})=>{let{t:a}=h(),o=q(e.map(e=>e.id),r);return(0,J.jsx)(R,{children:(0,J.jsxs)(z,{children:[(0,J.jsx)(N,{children:(0,J.jsxs)(I,{children:[n?(0,J.jsx)(P,{className:`w-10`,children:(0,J.jsx)(`span`,{className:`sr-only`,children:a(`media.selection`)})}):null,(0,J.jsx)(P,{children:a(`media.fields.filename`)}),(0,J.jsx)(P,{children:a(`media.fields.type`)}),(0,J.jsx)(P,{className:`text-right`,children:a(`media.fields.size`)}),(0,J.jsx)(P,{children:a(`media.fields.status`)}),(0,J.jsx)(P,{children:a(`media.fields.uploaded`)})]})}),(0,J.jsx)(F,{children:e.map(e=>{let r=E[e.status],s=t.has(e.id);return(0,J.jsxs)(I,{"data-state":s?`selected`:void 0,children:[n?(0,J.jsx)(L,{children:(0,J.jsx)(w,{checked:s,onClick:t=>{t.shiftKey&&(t.preventDefault(),o.select({id:e.id,checked:!s,shiftKey:!0}))},onCheckedChange:t=>o.select({id:e.id,checked:t===!0,shiftKey:!1}),"aria-label":a(`media.select`,{name:e.filename})})}):null,(0,J.jsx)(L,{className:`max-w-96`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-3`,children:[(0,J.jsx)(O,{asset:e,className:`size-8 shrink-0 rounded-md`}),(0,J.jsx)(oe,{asChild:!0,className:`min-w-0 truncate text-left`,children:(0,J.jsx)(`button`,{type:`button`,onClick:()=>i(e),children:e.filename})}),e.visibility===`private`?(0,J.jsx)(d,{role:`img`,"aria-label":a(`media.visibility.private`),className:`size-3.5 shrink-0 text-muted-foreground`}):null]})}),(0,J.jsx)(L,{className:`text-muted-foreground`,title:e.mimeType,children:T(e.filename,e.mimeType)}),(0,J.jsx)(L,{className:`text-right tabular-nums`,children:D(e.sizeBytes)}),(0,J.jsx)(L,{children:(0,J.jsx)(p,{tone:r.tone,label:a(r.labelKey),size:`sm`})}),(0,J.jsx)(L,{className:`whitespace-nowrap`,title:ae(e.createdAt),children:ie(e.createdAt)})]},e.id)})})]})})},Se=({query:e,filtered:t,view:n,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s})=>{let{t:c}=h(),l=u(e);if(l.isPending)return(0,J.jsx)(ne,{rows:4});if(l.isError)return(0,J.jsx)(te,{error:l.error,onRetry:()=>void l.refetch()});let d=l.data.pages.flatMap(e=>e.items);if(d.length===0){let n=t||e.folder!==void 0;return(0,J.jsx)(ee,{icon:V,size:n?`panel`:`page`,title:c(t?`media.emptyFiltered`:n?`media.emptyFolder`:`media.empty`)})}return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[n===`grid`?(0,J.jsx)(be,{assets:d,selected:r,selectable:i,activeId:a,onSelectChange:o,onOpen:s}):(0,J.jsx)(xe,{assets:d,selected:r,selectable:i,onSelectChange:o,onOpen:s}),l.hasNextPage?(0,J.jsx)(`div`,{className:`flex justify-center`,children:(0,J.jsx)(y,{variant:`outline`,disabled:l.isFetchingNextPage,"aria-busy":l.isFetchingNextPage||void 0,onClick:()=>void l.fetchNextPage(),children:l.isFetchingNextPage?c(`common.loading`):c(`media.loadMore`)})}):null]})},Y=`all`,Ce={image:`media.types.image`,video:`media.types.video`,audio:`media.types.audio`,pdf:`media.types.pdf`},we=({query:e,type:t,view:n,onQueryChange:r,onTypeChange:i,onViewChange:a})=>{let{t:o}=h(),{text:s,setText:c}=he(e,r);return(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsxs)(`div`,{className:`relative min-w-48 flex-1`,children:[(0,J.jsx)(k,{"aria-hidden":`true`,className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,J.jsx)(le,{type:`search`,value:s,onChange:e=>c(e.target.value),"aria-label":o(`media.search`),placeholder:o(`media.searchPlaceholder`),inputSize:`sm`,className:`pl-8`})]}),(0,J.jsxs)(fe,{value:t??Y,onValueChange:e=>i(e===Y?void 0:e),children:[(0,J.jsx)(x,{size:`sm`,"aria-label":o(`media.typeFilter`),className:`w-36`,children:(0,J.jsx)(b,{})}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{value:Y,children:o(`media.types.all`)}),ge.map(e=>(0,J.jsx)(C,{value:e,children:o(Ce[e])},e))]})]}),(0,J.jsxs)(`div`,{role:`group`,"aria-label":o(`media.view`),className:`flex h-9 items-center gap-0.5 rounded-lg border border-input px-px`,children:[(0,J.jsx)(y,{variant:n===`grid`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`grid`,"aria-label":o(`media.viewGrid`),onClick:()=>a(`grid`),children:(0,J.jsx)(U,{"aria-hidden":`true`})}),(0,J.jsx)(y,{variant:n===`list`?`secondary`:`ghost`,size:`icon-sm`,"aria-pressed":n===`list`,"aria-label":o(`media.viewList`),onClick:()=>a(`list`),children:(0,J.jsx)(A,{"aria-hidden":`true`})})]})]})},Te=({label:e,multiple:t=!0,onFiles:n,...r})=>{let i=(0,K.useRef)(null);return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(y,{...r,onClick:()=>i.current?.click(),children:[(0,J.jsx)(G,{"aria-hidden":`true`}),e]}),(0,J.jsx)(`input`,{ref:i,type:`file`,multiple:t,tabIndex:-1,"aria-hidden":`true`,className:`sr-only`,onChange:e=>{let t=[...e.target.files??[]];e.target.value=``,t.length>0&&n(t)}})]})},X=l()(e=>({items:[],add:t=>e(e=>({items:[...e.items,t]})),update:(t,n)=>e(e=>({items:e.items.map(e=>e.id===t?{...e,...n}:e)})),remove:t=>e(e=>({items:e.items.filter(e=>e.id!==t)})),clearFinished:()=>e(e=>({items:e.items.filter(e=>e.status!==`done`)}))})),Z=class extends Error{status;body;constructor(e,t){super(`Upload failed with status ${e}`),this.name=`UploadTransferError`,this.status=e,this.body=t}},Ee=({url:e,form:t,onProgress:n,signal:r})=>new Promise((i,a)=>{let o=new XMLHttpRequest;o.open(`POST`,e),o.withCredentials=!1,o.upload.onprogress=e=>{e.lengthComputable&&e.total>0&&n(e.loaded/e.total)},o.onload=()=>{if(o.status>=200&&o.status<300){n(1),i();return}a(new Z(o.status,o.responseText))},o.onerror=()=>a(new Z(0,``)),o.onabort=()=>a(new DOMException(`Upload cancelled`,`AbortError`)),r?.addEventListener(`abort`,()=>o.abort(),{once:!0}),o.send(t)}),De=e=>e instanceof Z?e.status===0?v.t(`media.upload.unreachable`):e.status===413||/EntityTooLarge/.test(e.body)?v.t(`errors.codes.FILE_TOO_LARGE`):v.t(`media.upload.transferFailed`,{status:e.status}):ce(e),Q=100,Oe=({item:e,onRetry:t,onDismiss:n})=>{let{t:r}=h(),i=Math.round(e.progress*Q),a=e.status===`uploading`?r(`media.upload.uploading`,{percent:i}):e.status===`confirming`?r(`media.upload.checking`):e.status===`done`?r(`media.upload.done`):De(e.error);return(0,J.jsxs)(`li`,{className:`flex items-start gap-3 px-5 py-2.5`,children:[(0,J.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:e.status===`done`?(0,J.jsx)(pe,{"aria-hidden":`true`,className:`size-4 text-success`}):e.status===`failed`?(0,J.jsx)(me,{"aria-hidden":`true`,className:`size-4 text-destructive`}):(0,J.jsx)(c,{"aria-hidden":`true`,className:`size-4 animate-spin text-muted-foreground motion-reduce:animate-none`})}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,J.jsxs)(`p`,{className:`flex items-baseline gap-2 text-sm`,children:[(0,J.jsx)(`span`,{className:`truncate font-medium`,children:e.file.name}),(0,J.jsx)(`span`,{className:`shrink-0 text-meta text-muted-foreground`,children:D(e.file.size)})]}),e.status===`uploading`||e.status===`confirming`?(0,J.jsx)(`div`,{role:`progressbar`,"aria-label":r(`media.upload.progress`,{name:e.file.name}),"aria-valuemin":0,"aria-valuemax":Q,"aria-valuenow":i,className:`h-1.5 overflow-hidden rounded-full bg-muted`,style:{"--upload-progress":`${i}%`},children:(0,J.jsx)(`div`,{className:`h-full w-[var(--upload-progress)] bg-primary transition-[width]`})}):null,(0,J.jsx)(`p`,{className:M(`text-meta`,e.status===`failed`?`text-destructive`:`text-muted-foreground`),children:a})]}),e.status===`failed`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.retry`,{name:e.file.name}),onClick:t,children:(0,J.jsx)(j,{"aria-hidden":`true`})}):null,e.status===`failed`||e.status===`done`?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-label":r(`media.upload.dismiss`,{name:e.file.name}),onClick:n,children:(0,J.jsx)(f,{"aria-hidden":`true`})}):null]})},ke=({onRetry:e,onDismiss:t})=>{let{t:n}=h(),r=X(e=>e.items),i=X(e=>e.clearFinished),[a,o]=(0,K.useState)(!1);if(r.length===0)return null;let s=r.filter(e=>e.status===`uploading`||e.status===`confirming`).length,c=r.filter(e=>e.status===`failed`).length,l=r.length-s-c,u=s===0&&c===0,d=!u||a;return(0,J.jsx)(_e,{title:n(`media.upload.queueTitle`),titleAs:`h2`,flush:d,actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`text-meta text-muted-foreground`,children:u?n(`media.upload.doneSummary`,{count:l}):n(`media.upload.summary`,{active:s,failed:c})}),u?(0,J.jsx)(y,{variant:`ghost`,size:`icon-sm`,"aria-expanded":d,"aria-label":n(d?`media.upload.hideFinished`:`media.upload.showFinished`),onClick:()=>o(e=>!e),children:d?(0,J.jsx)(ue,{"aria-hidden":`true`}):(0,J.jsx)(de,{"aria-hidden":`true`})}):null,l>0?(0,J.jsx)(y,{variant:`ghost`,size:`sm`,onClick:i,children:n(`media.upload.clearFinished`)}):null]}),bodyClassName:d?void 0:`hidden`,children:d?(0,J.jsx)(`ul`,{className:`max-h-64 divide-y overflow-y-auto`,children:r.map(n=>(0,J.jsx)(Oe,{item:n,onRetry:()=>e(n.id),onDismiss:()=>t(n.id)},n.id))}):null})},Ae=`application/octet-stream`,je=e=>{let t={filename:e.file.name,mimeType:e.file.type||Ae,sizeBytes:e.file.size};return i(()=>e.replaceAssetId?o.media.assets.replace(e.replaceAssetId,t):o.media.uploads.create({...t,folderId:e.folderId,visibility:e.visibility}))},$=async(e,t,n)=>{let r=await je(e);return await Ee({url:re(r,s()),form:m(r,e.file,e.file.name),onProgress:t}),n(),i(()=>o.media.uploads.confirm(r.grantId))},Me=()=>{let e=a(),{add:t,update:n,remove:i}=X.getState(),o=(0,K.useCallback)(async t=>{n(t.id,{status:`uploading`,progress:0,error:void 0});try{let e=await $(t,e=>n(t.id,{progress:e}),()=>n(t.id,{status:`confirming`}));n(t.id,{status:`done`,assetId:e.id}),t.replaceAssetId&&_.success(v.t(`media.upload.replaced`,{name:t.file.name}))}catch(e){se(e,`uploading ${t.file.name}`),n(t.id,{status:`failed`,error:e})}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e,n]);return{enqueue:(0,K.useCallback)((e,n)=>{for(let r of e){let e={id:crypto.randomUUID(),file:r,folderId:n.folderId,visibility:n.visibility,replaceAssetId:n.replaceAssetId,status:`uploading`,progress:0,error:void 0,assetId:void 0};t(e),o(e)}},[t,o]),retry:(0,K.useCallback)(e=>{let t=X.getState().items.find(t=>t.id===e);t&&o(t)},[o]),dismiss:i,uploadOne:(0,K.useCallback)(async t=>{try{let n=await $({file:t,folderId:null,visibility:`public`,replaceAssetId:void 0},()=>void 0,()=>void 0);return e.setQueryData(r.media.asset(n.id),n),{id:n.id,alt:n.alt||null}}finally{await e.invalidateQueries({queryKey:r.media.all})}},[e])}};export{Se as a,V as c,we as i,ke as n,G as o,Te as r,U as s,Me as t};
|
|
2
|
+
//# sourceMappingURL=useMediaUploader-B42H_CMG.js.map
|