@modern-admin/web 0.4.1 → 0.4.2
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/standalone/assets/{action-component-host-BrEZDHZt.js → action-component-host-P6HcuKj3.js} +2 -2
- package/dist/standalone/assets/action-component-host-P6HcuKj3.js.br +0 -0
- package/dist/standalone/assets/action-component-host-P6HcuKj3.js.gz +0 -0
- package/dist/standalone/assets/{action-component-host-BrEZDHZt.js.map → action-component-host-P6HcuKj3.js.map} +1 -1
- package/dist/standalone/assets/{action-page-Bx7kzeK7.js → action-page-kyqtK3oq.js} +2 -2
- package/dist/standalone/assets/action-page-kyqtK3oq.js.br +0 -0
- package/dist/standalone/assets/action-page-kyqtK3oq.js.gz +0 -0
- package/dist/standalone/assets/{action-page-Bx7kzeK7.js.map → action-page-kyqtK3oq.js.map} +1 -1
- package/dist/standalone/assets/{ai-assistant-widget-BbIXVrSu.js → ai-assistant-widget-DGanix6u.js} +2 -2
- package/dist/standalone/assets/ai-assistant-widget-DGanix6u.js.br +0 -0
- package/dist/standalone/assets/ai-assistant-widget-DGanix6u.js.gz +0 -0
- package/dist/standalone/assets/{ai-assistant-widget-BbIXVrSu.js.map → ai-assistant-widget-DGanix6u.js.map} +1 -1
- package/dist/standalone/assets/{audit-log-page-BoZh23oQ.js → audit-log-page-DozriTiA.js} +2 -2
- package/dist/standalone/assets/audit-log-page-DozriTiA.js.br +0 -0
- package/dist/standalone/assets/audit-log-page-DozriTiA.js.gz +0 -0
- package/dist/standalone/assets/{audit-log-page-BoZh23oQ.js.map → audit-log-page-DozriTiA.js.map} +1 -1
- package/dist/standalone/assets/{badge-6nyM5Jft.js → badge-lb2Nqx1b.js} +2 -2
- package/dist/standalone/assets/{badge-6nyM5Jft.js.map → badge-lb2Nqx1b.js.map} +1 -1
- package/dist/standalone/assets/{calendar-nvD_z7KQ.js → calendar-crtd4PEn.js} +2 -2
- package/dist/standalone/assets/calendar-crtd4PEn.js.br +0 -0
- package/dist/standalone/assets/calendar-crtd4PEn.js.gz +0 -0
- package/dist/standalone/assets/{calendar-nvD_z7KQ.js.map → calendar-crtd4PEn.js.map} +1 -1
- package/dist/standalone/assets/{card-4cS4uWCP.js → card-Dh44j2Nb.js} +2 -2
- package/dist/standalone/assets/card-Dh44j2Nb.js.br +0 -0
- package/dist/standalone/assets/card-Dh44j2Nb.js.gz +0 -0
- package/dist/standalone/assets/{card-4cS4uWCP.js.map → card-Dh44j2Nb.js.map} +1 -1
- package/dist/standalone/assets/chart-widget-B819aHsE.js +2 -0
- package/dist/standalone/assets/chart-widget-B819aHsE.js.br +0 -0
- package/dist/standalone/assets/chart-widget-B819aHsE.js.gz +0 -0
- package/dist/standalone/assets/chart-widget-B819aHsE.js.map +1 -0
- package/dist/standalone/assets/{command-Sb0xL-se.js → command-xJ-6Grpv.js} +2 -2
- package/dist/standalone/assets/command-xJ-6Grpv.js.br +0 -0
- package/dist/standalone/assets/command-xJ-6Grpv.js.gz +0 -0
- package/dist/standalone/assets/command-xJ-6Grpv.js.map +1 -0
- package/dist/standalone/assets/{date-picker-C4HcgidQ.js → date-picker-D0dWQEox.js} +2 -2
- package/dist/standalone/assets/date-picker-D0dWQEox.js.br +0 -0
- package/dist/standalone/assets/date-picker-D0dWQEox.js.gz +0 -0
- package/dist/standalone/assets/{date-picker-C4HcgidQ.js.map → date-picker-D0dWQEox.js.map} +1 -1
- package/dist/standalone/assets/{dist-BSbFjTlr.js → dist-CWGgVQiS.js} +2 -2
- package/dist/standalone/assets/dist-CWGgVQiS.js.br +0 -0
- package/dist/standalone/assets/dist-CWGgVQiS.js.gz +0 -0
- package/dist/standalone/assets/{dist-BSbFjTlr.js.map → dist-CWGgVQiS.js.map} +1 -1
- package/dist/standalone/assets/{dist-Dpg8xy_r.js → dist-UsTgBPww.js} +2 -2
- package/dist/standalone/assets/dist-UsTgBPww.js.br +0 -0
- package/dist/standalone/assets/dist-UsTgBPww.js.gz +0 -0
- package/dist/standalone/assets/{dist-Dpg8xy_r.js.map → dist-UsTgBPww.js.map} +1 -1
- package/dist/standalone/assets/dist-qlnAsTo_.js +2 -0
- package/dist/standalone/assets/dist-qlnAsTo_.js.br +0 -0
- package/dist/standalone/assets/dist-qlnAsTo_.js.gz +0 -0
- package/dist/standalone/assets/{dist-BcL2U6dT.js.map → dist-qlnAsTo_.js.map} +1 -1
- package/dist/standalone/assets/{edit-page-CW7-FAPC.js → edit-page-CFPwq1_5.js} +2 -2
- package/dist/standalone/assets/edit-page-CFPwq1_5.js.br +0 -0
- package/dist/standalone/assets/edit-page-CFPwq1_5.js.gz +0 -0
- package/dist/standalone/assets/{edit-page-CW7-FAPC.js.map → edit-page-CFPwq1_5.js.map} +1 -1
- package/dist/standalone/assets/empty-D9sUunOr.js +2 -0
- package/dist/standalone/assets/empty-D9sUunOr.js.br +0 -0
- package/dist/standalone/assets/empty-D9sUunOr.js.gz +0 -0
- package/dist/standalone/assets/{empty-Cposcczv.js.map → empty-D9sUunOr.js.map} +1 -1
- package/dist/standalone/assets/{global-search-dialog-DLv_nIvM.js → global-search-dialog-AfQmJSE7.js} +2 -2
- package/dist/standalone/assets/global-search-dialog-AfQmJSE7.js.br +0 -0
- package/dist/standalone/assets/global-search-dialog-AfQmJSE7.js.gz +0 -0
- package/dist/standalone/assets/{global-search-dialog-DLv_nIvM.js.map → global-search-dialog-AfQmJSE7.js.map} +1 -1
- package/dist/standalone/assets/{heavy-fields-BiCEgD2L.js → heavy-fields-_zVIBnm1.js} +4 -4
- package/dist/standalone/assets/heavy-fields-_zVIBnm1.js.br +0 -0
- package/dist/standalone/assets/heavy-fields-_zVIBnm1.js.gz +0 -0
- package/dist/standalone/assets/{heavy-fields-BiCEgD2L.js.map → heavy-fields-_zVIBnm1.js.map} +1 -1
- package/dist/standalone/assets/{home-page-BSz1wGk0.js → home-page-BdTrAXqk.js} +3 -3
- package/dist/standalone/assets/home-page-BdTrAXqk.js.br +0 -0
- package/dist/standalone/assets/home-page-BdTrAXqk.js.gz +0 -0
- package/dist/standalone/assets/{home-page-BSz1wGk0.js.map → home-page-BdTrAXqk.js.map} +1 -1
- package/dist/standalone/assets/{icon-registry-BQU4fIc4.js → icon-registry-CcMm2Zh3.js} +2 -2
- package/dist/standalone/assets/icon-registry-CcMm2Zh3.js.br +0 -0
- package/dist/standalone/assets/icon-registry-CcMm2Zh3.js.gz +0 -0
- package/dist/standalone/assets/{icon-registry-BQU4fIc4.js.map → icon-registry-CcMm2Zh3.js.map} +1 -1
- package/dist/standalone/assets/index-DHZwffoP.css +2 -0
- package/dist/standalone/assets/index-DHZwffoP.css.br +0 -0
- package/dist/standalone/assets/{index-95cwJ2RY.css.gz → index-DHZwffoP.css.gz} +0 -0
- package/dist/standalone/assets/index-uYpCUVT4.js +15 -0
- package/dist/standalone/assets/index-uYpCUVT4.js.br +0 -0
- package/dist/standalone/assets/index-uYpCUVT4.js.gz +0 -0
- package/dist/standalone/assets/index-uYpCUVT4.js.map +1 -0
- package/dist/standalone/assets/json-editor-yfO4TUB_.js +2 -0
- package/dist/standalone/assets/json-editor-yfO4TUB_.js.br +0 -0
- package/dist/standalone/assets/json-editor-yfO4TUB_.js.gz +0 -0
- package/dist/standalone/assets/{json-editor-CAIgxYb3.js.map → json-editor-yfO4TUB_.js.map} +1 -1
- package/dist/standalone/assets/{property-renderer-B8Md-EqW.js → property-renderer-CDKsa2KQ.js} +4 -4
- package/dist/standalone/assets/property-renderer-CDKsa2KQ.js.br +0 -0
- package/dist/standalone/assets/property-renderer-CDKsa2KQ.js.gz +0 -0
- package/dist/standalone/assets/property-renderer-CDKsa2KQ.js.map +1 -0
- package/dist/standalone/assets/reference-DWJEoGIf.js +2 -0
- package/dist/standalone/assets/reference-DWJEoGIf.js.br +0 -0
- package/dist/standalone/assets/reference-DWJEoGIf.js.gz +0 -0
- package/dist/standalone/assets/reference-DWJEoGIf.js.map +1 -0
- package/dist/standalone/assets/{revisions-button-0WtL6bsZ.js → revisions-button-DR0oW2wX.js} +2 -2
- package/dist/standalone/assets/revisions-button-DR0oW2wX.js.br +0 -0
- package/dist/standalone/assets/revisions-button-DR0oW2wX.js.gz +0 -0
- package/dist/standalone/assets/{revisions-button-0WtL6bsZ.js.map → revisions-button-DR0oW2wX.js.map} +1 -1
- package/dist/standalone/assets/{richtext-render-DnVcQ34I.js → richtext-render-VFCKGulc.js} +2 -2
- package/dist/standalone/assets/richtext-render-VFCKGulc.js.br +0 -0
- package/dist/standalone/assets/richtext-render-VFCKGulc.js.gz +0 -0
- package/dist/standalone/assets/{richtext-render-DnVcQ34I.js.map → richtext-render-VFCKGulc.js.map} +1 -1
- package/dist/standalone/assets/{router-wFvtgo77.js → router-BcZgB5cZ.js} +12 -12
- package/dist/standalone/assets/router-BcZgB5cZ.js.br +0 -0
- package/dist/standalone/assets/router-BcZgB5cZ.js.gz +0 -0
- package/dist/standalone/assets/router-BcZgB5cZ.js.map +1 -0
- package/dist/standalone/assets/select-BiV9bunJ.js +2 -0
- package/dist/standalone/assets/select-BiV9bunJ.js.br +0 -0
- package/dist/standalone/assets/select-BiV9bunJ.js.gz +0 -0
- package/dist/standalone/assets/{select-CR4acjX0.js.map → select-BiV9bunJ.js.map} +1 -1
- package/dist/standalone/assets/{settings-page-DtguXLAP.js → settings-page-DSWp2N6T.js} +2 -2
- package/dist/standalone/assets/settings-page-DSWp2N6T.js.br +0 -0
- package/dist/standalone/assets/settings-page-DSWp2N6T.js.gz +0 -0
- package/dist/standalone/assets/{settings-page-DtguXLAP.js.map → settings-page-DSWp2N6T.js.map} +1 -1
- package/dist/standalone/assets/{show-page-Dnox2NwO.js → show-page-CGzUAZoO.js} +2 -2
- package/dist/standalone/assets/show-page-CGzUAZoO.js.br +0 -0
- package/dist/standalone/assets/show-page-CGzUAZoO.js.gz +0 -0
- package/dist/standalone/assets/{show-page-Dnox2NwO.js.map → show-page-CGzUAZoO.js.map} +1 -1
- package/dist/standalone/assets/tabs-smdw70rV.js +2 -0
- package/dist/standalone/assets/tabs-smdw70rV.js.br +0 -0
- package/dist/standalone/assets/tabs-smdw70rV.js.gz +0 -0
- package/dist/standalone/assets/{tabs-DUS8e6dR.js.map → tabs-smdw70rV.js.map} +1 -1
- package/dist/standalone/assets/{textarea-CX_0QVSz.js → textarea-DBVf3GGt.js} +2 -2
- package/dist/standalone/assets/{textarea-CX_0QVSz.js.map → textarea-DBVf3GGt.js.map} +1 -1
- package/dist/standalone/assets/useQueries-Ba2PuYhZ.js +2 -0
- package/dist/standalone/assets/useQueries-Ba2PuYhZ.js.br +0 -0
- package/dist/standalone/assets/useQueries-Ba2PuYhZ.js.gz +0 -0
- package/dist/standalone/assets/useQueries-Ba2PuYhZ.js.map +1 -0
- package/dist/standalone/assets/{user-directory-9COoW6AO.js → user-directory-Df5X8VOe.js} +2 -2
- package/dist/standalone/assets/user-directory-Df5X8VOe.js.br +0 -0
- package/dist/standalone/assets/user-directory-Df5X8VOe.js.gz +0 -0
- package/dist/standalone/assets/{user-directory-9COoW6AO.js.map → user-directory-Df5X8VOe.js.map} +1 -1
- package/dist/standalone/assets/{value-format-Cgau0meh.js → value-format-BUeGtfH4.js} +16 -16
- package/dist/standalone/assets/value-format-BUeGtfH4.js.br +0 -0
- package/dist/standalone/assets/value-format-BUeGtfH4.js.gz +0 -0
- package/dist/standalone/assets/{value-format-Cgau0meh.js.map → value-format-BUeGtfH4.js.map} +1 -1
- package/dist/standalone/assets/with-selector-id7qGzTH.js +2 -0
- package/dist/standalone/assets/with-selector-id7qGzTH.js.br +0 -0
- package/dist/standalone/assets/with-selector-id7qGzTH.js.gz +0 -0
- package/dist/standalone/assets/with-selector-id7qGzTH.js.map +1 -0
- package/dist/standalone/assets/{wizard-create-page-v2-Aw8Oj.js → wizard-create-page-B8IcszRF.js} +2 -2
- package/dist/standalone/assets/wizard-create-page-B8IcszRF.js.br +0 -0
- package/dist/standalone/assets/wizard-create-page-B8IcszRF.js.gz +0 -0
- package/dist/standalone/assets/{wizard-create-page-v2-Aw8Oj.js.map → wizard-create-page-B8IcszRF.js.map} +1 -1
- package/dist/standalone/assets/{zod-BrelKLfy.js → zod-mi61gVha.js} +2 -2
- package/dist/standalone/assets/zod-mi61gVha.js.br +0 -0
- package/dist/standalone/assets/zod-mi61gVha.js.gz +0 -0
- package/dist/standalone/assets/{zod-BrelKLfy.js.map → zod-mi61gVha.js.map} +1 -1
- package/dist/standalone/index.html +10 -10
- package/dist/standalone/index.html.br +0 -0
- package/dist/standalone/index.html.gz +0 -0
- package/package.json +4 -4
- package/dist/standalone/assets/action-component-host-BrEZDHZt.js.br +0 -0
- package/dist/standalone/assets/action-component-host-BrEZDHZt.js.gz +0 -0
- package/dist/standalone/assets/action-page-Bx7kzeK7.js.br +0 -0
- package/dist/standalone/assets/action-page-Bx7kzeK7.js.gz +0 -0
- package/dist/standalone/assets/ai-assistant-widget-BbIXVrSu.js.br +0 -0
- package/dist/standalone/assets/ai-assistant-widget-BbIXVrSu.js.gz +0 -0
- package/dist/standalone/assets/audit-log-page-BoZh23oQ.js.br +0 -0
- package/dist/standalone/assets/audit-log-page-BoZh23oQ.js.gz +0 -0
- package/dist/standalone/assets/calendar-nvD_z7KQ.js.br +0 -0
- package/dist/standalone/assets/calendar-nvD_z7KQ.js.gz +0 -0
- package/dist/standalone/assets/card-4cS4uWCP.js.br +0 -0
- package/dist/standalone/assets/card-4cS4uWCP.js.gz +0 -0
- package/dist/standalone/assets/chart-widget-YeCL7jdB.js +0 -2
- package/dist/standalone/assets/chart-widget-YeCL7jdB.js.br +0 -0
- package/dist/standalone/assets/chart-widget-YeCL7jdB.js.gz +0 -0
- package/dist/standalone/assets/chart-widget-YeCL7jdB.js.map +0 -1
- package/dist/standalone/assets/command-Sb0xL-se.js.br +0 -0
- package/dist/standalone/assets/command-Sb0xL-se.js.gz +0 -0
- package/dist/standalone/assets/command-Sb0xL-se.js.map +0 -1
- package/dist/standalone/assets/date-picker-C4HcgidQ.js.br +0 -0
- package/dist/standalone/assets/date-picker-C4HcgidQ.js.gz +0 -0
- package/dist/standalone/assets/dist-BSbFjTlr.js.br +0 -0
- package/dist/standalone/assets/dist-BSbFjTlr.js.gz +0 -0
- package/dist/standalone/assets/dist-BcL2U6dT.js +0 -2
- package/dist/standalone/assets/dist-BcL2U6dT.js.br +0 -0
- package/dist/standalone/assets/dist-BcL2U6dT.js.gz +0 -0
- package/dist/standalone/assets/dist-Dpg8xy_r.js.br +0 -0
- package/dist/standalone/assets/dist-Dpg8xy_r.js.gz +0 -0
- package/dist/standalone/assets/edit-page-CW7-FAPC.js.br +0 -0
- package/dist/standalone/assets/edit-page-CW7-FAPC.js.gz +0 -0
- package/dist/standalone/assets/empty-Cposcczv.js +0 -2
- package/dist/standalone/assets/empty-Cposcczv.js.br +0 -0
- package/dist/standalone/assets/empty-Cposcczv.js.gz +0 -0
- package/dist/standalone/assets/global-search-dialog-DLv_nIvM.js.br +0 -0
- package/dist/standalone/assets/global-search-dialog-DLv_nIvM.js.gz +0 -0
- package/dist/standalone/assets/heavy-fields-BiCEgD2L.js.br +0 -0
- package/dist/standalone/assets/heavy-fields-BiCEgD2L.js.gz +0 -0
- package/dist/standalone/assets/home-page-BSz1wGk0.js.br +0 -0
- package/dist/standalone/assets/home-page-BSz1wGk0.js.gz +0 -0
- package/dist/standalone/assets/icon-registry-BQU4fIc4.js.br +0 -0
- package/dist/standalone/assets/icon-registry-BQU4fIc4.js.gz +0 -0
- package/dist/standalone/assets/index-95cwJ2RY.css +0 -2
- package/dist/standalone/assets/index-95cwJ2RY.css.br +0 -0
- package/dist/standalone/assets/index-BL8keDxQ.js +0 -15
- package/dist/standalone/assets/index-BL8keDxQ.js.br +0 -0
- package/dist/standalone/assets/index-BL8keDxQ.js.gz +0 -0
- package/dist/standalone/assets/index-BL8keDxQ.js.map +0 -1
- package/dist/standalone/assets/json-editor-CAIgxYb3.js +0 -2
- package/dist/standalone/assets/json-editor-CAIgxYb3.js.br +0 -0
- package/dist/standalone/assets/json-editor-CAIgxYb3.js.gz +0 -0
- package/dist/standalone/assets/property-renderer-B8Md-EqW.js.br +0 -0
- package/dist/standalone/assets/property-renderer-B8Md-EqW.js.gz +0 -0
- package/dist/standalone/assets/property-renderer-B8Md-EqW.js.map +0 -1
- package/dist/standalone/assets/reference-WPaf6IdD.js +0 -2
- package/dist/standalone/assets/reference-WPaf6IdD.js.br +0 -0
- package/dist/standalone/assets/reference-WPaf6IdD.js.gz +0 -0
- package/dist/standalone/assets/reference-WPaf6IdD.js.map +0 -1
- package/dist/standalone/assets/revisions-button-0WtL6bsZ.js.br +0 -0
- package/dist/standalone/assets/revisions-button-0WtL6bsZ.js.gz +0 -0
- package/dist/standalone/assets/richtext-render-DnVcQ34I.js.br +0 -0
- package/dist/standalone/assets/richtext-render-DnVcQ34I.js.gz +0 -0
- package/dist/standalone/assets/router-wFvtgo77.js.br +0 -0
- package/dist/standalone/assets/router-wFvtgo77.js.gz +0 -0
- package/dist/standalone/assets/router-wFvtgo77.js.map +0 -1
- package/dist/standalone/assets/select-CR4acjX0.js +0 -2
- package/dist/standalone/assets/select-CR4acjX0.js.br +0 -0
- package/dist/standalone/assets/select-CR4acjX0.js.gz +0 -0
- package/dist/standalone/assets/settings-page-DtguXLAP.js.br +0 -0
- package/dist/standalone/assets/settings-page-DtguXLAP.js.gz +0 -0
- package/dist/standalone/assets/show-page-Dnox2NwO.js.br +0 -0
- package/dist/standalone/assets/show-page-Dnox2NwO.js.gz +0 -0
- package/dist/standalone/assets/tabs-DUS8e6dR.js +0 -2
- package/dist/standalone/assets/tabs-DUS8e6dR.js.br +0 -0
- package/dist/standalone/assets/tabs-DUS8e6dR.js.gz +0 -0
- package/dist/standalone/assets/useQueries-BCUhWYX4.js +0 -2
- package/dist/standalone/assets/useQueries-BCUhWYX4.js.br +0 -0
- package/dist/standalone/assets/useQueries-BCUhWYX4.js.gz +0 -0
- package/dist/standalone/assets/useQueries-BCUhWYX4.js.map +0 -1
- package/dist/standalone/assets/user-directory-9COoW6AO.js.br +0 -0
- package/dist/standalone/assets/user-directory-9COoW6AO.js.gz +0 -0
- package/dist/standalone/assets/value-format-Cgau0meh.js.br +0 -0
- package/dist/standalone/assets/value-format-Cgau0meh.js.gz +0 -0
- package/dist/standalone/assets/with-selector-NDLhu4dT.js +0 -2
- package/dist/standalone/assets/with-selector-NDLhu4dT.js.br +0 -0
- package/dist/standalone/assets/with-selector-NDLhu4dT.js.gz +0 -0
- package/dist/standalone/assets/with-selector-NDLhu4dT.js.map +0 -1
- package/dist/standalone/assets/wizard-create-page-v2-Aw8Oj.js.br +0 -0
- package/dist/standalone/assets/wizard-create-page-v2-Aw8Oj.js.gz +0 -0
- package/dist/standalone/assets/zod-BrelKLfy.js.br +0 -0
- package/dist/standalone/assets/zod-BrelKLfy.js.gz +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,n as t}from"./createLucideIcon-CUopU_LC.js";import{E as n,d as r}from"./with-selector-id7qGzTH.js";import{t as i}from"./chevrons-up-down-BHCs46XQ.js";import{n as a}from"./pencil-BO-k3yTG.js";import{t as o}from"./x-C3kLunD6.js";import{s}from"./dist-UsTgBPww.js";import{K as c,Y as l,et as u,n as d,ot as f,rt as p}from"./router-BcZgB5cZ.js";import{a as m,i as h,n as g,t as _}from"./useQueries-Ba2PuYhZ.js";import{t as v}from"./badge-lb2Nqx1b.js";import{a as y,i as b,o as x,r as S,s as C,t as w}from"./command-xJ-6Grpv.js";import{yt as T}from"./index-uYpCUVT4.js";var E=e(t(),1),D=n();function O({resourceId:e,recordId:t,fallback:n,showIcon:i=!1,className:o,populated:s}){let l=p(),u=t==null?``:String(t),m=!!(u&&s&&s.title),h=c(e),g=h===void 0||h.actions.some(e=>e.name===`show`),{data:_}=f({queryKey:[`modern-admin`,e,`show`,u],queryFn:()=>l.show(e,u),enabled:!!u&&!m&&g,staleTime:3e4});if(!u)return n??null;let y=(m?s.title:_?.record?.title)||`#${u}`;return g?(0,D.jsxs)(d,{to:{name:`show`,resourceId:e,recordId:u},className:r(`inline-flex items-center gap-1 hover:underline`,o),onClick:e=>e.stopPropagation(),children:[(0,D.jsx)(v,{variant:`secondary`,children:y}),i&&(0,D.jsx)(a,{className:`size-3 opacity-50`})]}):(0,D.jsx)(`span`,{className:r(`inline-flex items-center`,o),children:(0,D.jsx)(v,{variant:`secondary`,children:y})})}function k({referenceResourceId:e,value:t,onChange:n,disabled:a,placeholder:o,className:c}){let[d,_]=E.useState(!1),[v,O]=E.useState(``),k=M(v,250),A=p(),{t:j}=u(),N=o??j(`common:select`),P=f({queryKey:[`modern-admin`,e,`show`,t],queryFn:()=>A.show(e,String(t)),enabled:t!=null&&t!==``,staleTime:3e4}),F=l(e,k,d),I=F.data?.records??[],L=P.data?.record?.title,R=L?`${L} <${t}>`:t!=null&&t!==``?`#${t}`:``;return(0,D.jsxs)(g,{open:d,onOpenChange:_,children:[(0,D.jsx)(m,{asChild:!0,children:(0,D.jsxs)(s,{variant:`outline`,role:`combobox`,"aria-expanded":d,disabled:a,className:r(`w-full justify-between font-normal`,c),children:[(0,D.jsx)(`span`,{className:r(`truncate`,!R&&`text-muted-foreground`),title:R||void 0,children:R||N}),(0,D.jsx)(i,{className:`size-4 shrink-0 opacity-50`})]})}),(0,D.jsx)(h,{className:`flex max-h-[var(--radix-popover-content-available-height)] w-[var(--radix-popover-trigger-width)] flex-col p-0`,align:`start`,children:(0,D.jsxs)(w,{shouldFilter:!1,className:`min-h-0`,children:[(0,D.jsx)(y,{placeholder:j(`common:searchPlaceholder`),value:v,onValueChange:O}),(0,D.jsxs)(C,{children:[F.isLoading&&(0,D.jsx)(`div`,{className:`p-3 text-sm text-muted-foreground`,children:j(`common:loading`)}),!F.isLoading&&I.length===0&&(0,D.jsx)(S,{children:j(`common:noRecords`)}),t!=null&&t!==``&&(0,D.jsx)(b,{children:(0,D.jsxs)(x,{onSelect:()=>{n(null),_(!1)},children:[(0,D.jsx)(T,{className:`size-4 opacity-0`}),(0,D.jsx)(`span`,{className:`text-muted-foreground`,children:j(`common:clearSelection`)})]})}),(0,D.jsx)(b,{children:I.map(e=>{let i=String(e.id)===String(t??``);return(0,D.jsxs)(x,{value:e.id,onSelect:()=>{n(e.id),_(!1)},children:[(0,D.jsx)(T,{className:r(`size-4`,i?`opacity-100`:`opacity-0`)}),(0,D.jsx)(`span`,{className:`truncate`,title:e.title?`${e.title} <${e.id}>`:`#${e.id}`,children:e.title?`${e.title} <${e.id}>`:`#${e.id}`})]},e.id)})})]})]})})]})}function A({resourceId:e,recordIds:t,className:n,populated:i,populatedKeyPrefix:a}){return!t||t.length===0?(0,D.jsx)(`span`,{className:`text-muted-foreground`,children:`—`}):(0,D.jsx)(`div`,{className:r(`flex flex-wrap gap-1`,n),children:t.map(t=>(0,D.jsx)(O,{resourceId:e,recordId:t,populated:i&&a?i[`${a}.${t}`]:void 0},String(t)))})}function j({referenceResourceId:e,value:t,onChange:n,disabled:a,placeholder:c}){let[d,f]=E.useState(!1),[O,k]=E.useState(``),A=M(O,250),j=p(),{t:N}=u(),P=c??N(`common:select`),F=E.useMemo(()=>(t??[]).map(String),[t]),I=_({queries:F.map(t=>({queryKey:[`modern-admin`,e,`show`,t],queryFn:()=>j.show(e,t),staleTime:3e4}))}),L=E.useMemo(()=>F.map((e,t)=>{let n=I[t]?.data?.record?.title;return{id:e,title:n?`${n} <${e}>`:`#${e}`}}),[F,I]),R=l(e,A,d),z=R.data?.records??[],B=e=>{let t=String(e);n(F.includes(t)?F.filter(e=>e!==t):[...F,t])},V=e=>{n(F.filter(t=>t!==e))};return(0,D.jsxs)(`div`,{className:`space-y-2`,children:[L.length>0&&(0,D.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:L.map(e=>(0,D.jsxs)(v,{variant:`secondary`,className:`gap-1 pr-1`,children:[e.title,(0,D.jsx)(`button`,{type:`button`,"aria-label":N(`common:removeItem`,{title:e.title}),disabled:a,onClick:()=>V(e.id),className:`rounded-sm opacity-60 hover:opacity-100`,children:(0,D.jsx)(o,{className:`size-3`})})]},e.id))}),(0,D.jsxs)(g,{open:d,onOpenChange:f,children:[(0,D.jsx)(m,{asChild:!0,children:(0,D.jsxs)(s,{variant:`outline`,role:`combobox`,"aria-expanded":d,disabled:a,className:`w-full justify-between font-normal`,children:[(0,D.jsx)(`span`,{className:`truncate text-muted-foreground`,children:F.length>0?N(`common:nSelectedAddMore`,{count:F.length}):P}),(0,D.jsx)(i,{className:`size-4 shrink-0 opacity-50`})]})}),(0,D.jsx)(h,{className:`flex max-h-[var(--radix-popover-content-available-height)] w-[var(--radix-popover-trigger-width)] flex-col p-0`,align:`start`,children:(0,D.jsxs)(w,{shouldFilter:!1,className:`min-h-0`,children:[(0,D.jsx)(y,{placeholder:N(`common:searchPlaceholder`),value:O,onValueChange:k}),(0,D.jsxs)(C,{children:[R.isLoading&&(0,D.jsx)(`div`,{className:`p-3 text-sm text-muted-foreground`,children:N(`common:loading`)}),!R.isLoading&&z.length===0&&(0,D.jsx)(S,{children:N(`common:noRecords`)}),(0,D.jsx)(b,{children:z.map(e=>{let t=F.includes(String(e.id));return(0,D.jsxs)(x,{value:String(e.id),onSelect:()=>B(e.id),children:[(0,D.jsx)(T,{className:r(`size-4`,t?`opacity-100`:`opacity-0`)}),(0,D.jsx)(`span`,{className:`truncate`,title:e.title?`${e.title} <${e.id}>`:`#${e.id}`,children:e.title?`${e.title} <${e.id}>`:`#${e.id}`})]},e.id)})})]})]})})]})]})}var M=(e,t)=>{let[n,r]=E.useState(e);return E.useEffect(()=>{let n=setTimeout(()=>r(e),t);return()=>clearTimeout(n)},[e,t]),n};export{j as i,O as n,A as r,k as t};
|
|
2
|
+
//# sourceMappingURL=reference-DWJEoGIf.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-DWJEoGIf.js","names":[],"sources":["../../../../react/src/reference.tsx"],"sourcesContent":["// Reference-field helpers. Three surfaces:\n// - <ReferenceLink>: read-only display (list/show views) — fetches the\n// referenced record's title and renders it as a hyperlink to its show page.\n// - <ReferenceCombobox>: single-value edit control — Command-driven popover\n// with live search against the referenced resource's `search` action.\n// - <ReferenceMultiCombobox>: multi-value variant for many-to-many fields\n// (an array of foreign IDs); selected items render as removable chips.\n\nimport * as React from 'react'\nimport {\n Badge,\n Button,\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@modern-admin/ui'\nimport { Check, ChevronsUpDown, ExternalLink, X } from 'lucide-react'\nimport { useQueries, useQuery } from '@tanstack/react-query'\nimport { useAdminClient } from './provider.js'\nimport { useResource, useSearchRecords } from './hooks.js'\nimport { useI18n } from './i18n.js'\nimport { Link } from './router.js'\n\n/** Read-only badge that links to the referenced record's show page.\n *\n * When `populated` is provided (e.g. supplied by the list/show endpoint via\n * `record.populated[propertyPath]`) the title is rendered directly from it\n * and no `show` request is fired — this is what prevents the N+1 fetch\n * storm on list pages with reference columns. */\nexport function ReferenceLink({\n resourceId,\n recordId,\n fallback,\n showIcon = false,\n className,\n populated,\n}: {\n resourceId: string\n recordId: string | number | null | undefined\n fallback?: React.ReactNode\n showIcon?: boolean\n className?: string\n populated?: { id?: string; title?: string } | null\n}): React.ReactElement | null {\n const client = useAdminClient()\n const id = recordId == null ? '' : String(recordId)\n const hasPopulated = !!(id && populated && populated.title)\n const referencedResource = useResource(resourceId)\n // When the SPA config has been loaded, its `actions` list is already\n // filtered against the current admin's access. Missing `show` = no\n // permission to view the referenced record → render plain text instead\n // of a clickable link. While the config is still loading (`undefined`)\n // we default to \"linkable\" so the first paint matches the steady state\n // for the common case.\n const canShow =\n referencedResource === undefined\n ? true\n : referencedResource.actions.some((a) => a.name === 'show')\n const { data } = useQuery({\n queryKey: ['modern-admin', resourceId, 'show', id],\n queryFn: () => client.show(resourceId, id),\n enabled: !!id && !hasPopulated && canShow,\n staleTime: 30_000,\n })\n if (!id) return (fallback as React.ReactElement | null) ?? null\n const title = (hasPopulated ? populated!.title : data?.record?.title) || `#${id}`\n if (!canShow) {\n return (\n <span className={cn('inline-flex items-center', className)}>\n <Badge variant=\"secondary\">{title}</Badge>\n </span>\n )\n }\n return (\n <Link\n to={{ name: 'show', resourceId, recordId: id }}\n className={cn('inline-flex items-center gap-1 hover:underline', className)}\n onClick={(e) => e.stopPropagation()}\n >\n <Badge variant=\"secondary\">{title}</Badge>\n {showIcon && <ExternalLink className=\"size-3 opacity-50\" />}\n </Link>\n )\n}\n\n/** Combobox bound to a referenced resource's `search` action. */\nexport function ReferenceCombobox({\n referenceResourceId,\n value,\n onChange,\n disabled,\n placeholder,\n className,\n}: {\n referenceResourceId: string\n value: string | number | null | undefined\n onChange(next: string | null): void\n disabled?: boolean\n placeholder?: string\n /** Extra classes applied to the trigger button (e.g. height override). */\n className?: string\n}): React.ReactElement {\n const [open, setOpen] = React.useState(false)\n const [query, setQuery] = React.useState('')\n const debounced = useDebounced(query, 250)\n const client = useAdminClient()\n const { t } = useI18n()\n const resolvedPlaceholder = placeholder ?? t('common:select')\n\n // The currently-selected record (loaded once for the trigger label).\n const selected = useQuery({\n queryKey: ['modern-admin', referenceResourceId, 'show', value],\n queryFn: () => client.show(referenceResourceId, String(value)),\n enabled: value != null && value !== '',\n staleTime: 30_000,\n })\n\n const search = useSearchRecords(referenceResourceId, debounced, open)\n const items = search.data?.records ?? []\n\n const _title = selected.data?.record?.title\n const selectedLabel =\n _title\n ? `${_title} <${value}>`\n : value != null && value !== ''\n ? `#${value}`\n : ''\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn('w-full justify-between font-normal', className)}\n >\n <span\n className={cn('truncate', !selectedLabel && 'text-muted-foreground')}\n title={selectedLabel || undefined}\n >\n {selectedLabel || resolvedPlaceholder}\n </span>\n <ChevronsUpDown className=\"size-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"flex max-h-[var(--radix-popover-content-available-height)] w-[var(--radix-popover-trigger-width)] flex-col p-0\"\n align=\"start\"\n >\n <Command shouldFilter={false} className=\"min-h-0\">\n <CommandInput\n placeholder={t('common:searchPlaceholder')}\n value={query}\n onValueChange={setQuery}\n />\n <CommandList>\n {search.isLoading && <div className=\"p-3 text-sm text-muted-foreground\">{t('common:loading')}</div>}\n {!search.isLoading && items.length === 0 && (\n <CommandEmpty>{t('common:noRecords')}</CommandEmpty>\n )}\n {value != null && value !== '' && (\n <CommandGroup>\n <CommandItem\n onSelect={() => {\n onChange(null)\n setOpen(false)\n }}\n >\n <Check className=\"size-4 opacity-0\" />\n <span className=\"text-muted-foreground\">{t('common:clearSelection')}</span>\n </CommandItem>\n </CommandGroup>\n )}\n <CommandGroup>\n {items.map((r) => {\n const isSelected = String(r.id) === String(value ?? '')\n return (\n <CommandItem\n key={r.id}\n value={r.id}\n onSelect={() => {\n onChange(r.id)\n setOpen(false)\n }}\n >\n <Check className={cn('size-4', isSelected ? 'opacity-100' : 'opacity-0')} />\n <span className=\"truncate\" title={r.title ? `${r.title} <${r.id}>` : `#${r.id}`}>\n {r.title ? `${r.title} <${r.id}>` : `#${r.id}`}\n </span>\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n\n/** Renders a list of comma-separated badge links, one per foreign key.\n *\n * When `populated` + `populatedKeyPrefix` are provided, each item is looked up\n * via `populated[`${prefix}.${id}`]` and threaded into its `<ReferenceLink>`\n * to suppress per-row `show` requests. The key shape matches what the m2m\n * feature's read-hook writes (see `packages/feature-m2m`) and what the list\n * action's `populateReferences` helper writes for array references. */\nexport function ReferenceLinkList({\n resourceId,\n recordIds,\n className,\n populated,\n populatedKeyPrefix,\n}: {\n resourceId: string\n recordIds: ReadonlyArray<string | number>\n className?: string\n populated?: Record<string, unknown>\n populatedKeyPrefix?: string\n}): React.ReactElement {\n if (!recordIds || recordIds.length === 0) {\n return <span className=\"text-muted-foreground\">—</span>\n }\n return (\n <div className={cn('flex flex-wrap gap-1', className)}>\n {recordIds.map((id) => {\n const entry =\n populated && populatedKeyPrefix\n ? (populated[`${populatedKeyPrefix}.${id}`] as\n | { id?: string; title?: string }\n | undefined)\n : undefined\n return (\n <ReferenceLink\n key={String(id)}\n resourceId={resourceId}\n recordId={id}\n populated={entry}\n />\n )\n })}\n </div>\n )\n}\n\n/** Multi-select combobox for many-to-many references. Renders selected items\n * as removable chips and feeds search results into a checkable command list. */\nexport function ReferenceMultiCombobox({\n referenceResourceId,\n value,\n onChange,\n disabled,\n placeholder,\n}: {\n referenceResourceId: string\n value: ReadonlyArray<string | number> | null | undefined\n onChange(next: Array<string | number>): void\n disabled?: boolean\n placeholder?: string\n}): React.ReactElement {\n const [open, setOpen] = React.useState(false)\n const [query, setQuery] = React.useState('')\n const debounced = useDebounced(query, 250)\n const client = useAdminClient()\n const { t } = useI18n()\n const resolvedPlaceholder = placeholder ?? t('common:select')\n const ids = React.useMemo(() => (value ?? []).map(String), [value])\n\n // Resolve labels per-id so adding/removing one item only fetches the new\n // one. Sharing the cache key with <ReferenceLink>'s single-record query\n // means already-known titles render instantly without flicker.\n const titleQueries = useQueries({\n queries: ids.map((id) => ({\n queryKey: ['modern-admin', referenceResourceId, 'show', id],\n queryFn: () => client.show(referenceResourceId, id),\n staleTime: 30_000,\n })),\n })\n const chips = React.useMemo(\n () =>\n ids.map((id, i) => {\n const t = titleQueries[i]?.data?.record?.title\n return { id, title: t ? `${t} <${id}>` : `#${id}` }\n }),\n [ids, titleQueries],\n )\n\n const search = useSearchRecords(referenceResourceId, debounced, open)\n const items = search.data?.records ?? []\n\n const toggle = (id: string | number): void => {\n const sid = String(id)\n const next = ids.includes(sid) ? ids.filter((x) => x !== sid) : [...ids, sid]\n onChange(next)\n }\n\n const remove = (id: string): void => {\n onChange(ids.filter((x) => x !== id))\n }\n\n return (\n <div className=\"space-y-2\">\n {chips.length > 0 && (\n <div className=\"flex flex-wrap gap-1\">\n {chips.map((s) => (\n <Badge key={s.id} variant=\"secondary\" className=\"gap-1 pr-1\">\n {s.title}\n <button\n type=\"button\"\n aria-label={t('common:removeItem', { title: s.title })}\n disabled={disabled}\n onClick={() => remove(s.id)}\n className=\"rounded-sm opacity-60 hover:opacity-100\"\n >\n <X className=\"size-3\" />\n </button>\n </Badge>\n ))}\n </div>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className=\"w-full justify-between font-normal\"\n >\n <span className=\"truncate text-muted-foreground\">\n {ids.length > 0 ? t('common:nSelectedAddMore', { count: ids.length }) : resolvedPlaceholder}\n </span>\n <ChevronsUpDown className=\"size-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"flex max-h-[var(--radix-popover-content-available-height)] w-[var(--radix-popover-trigger-width)] flex-col p-0\"\n align=\"start\"\n >\n <Command shouldFilter={false} className=\"min-h-0\">\n <CommandInput placeholder={t('common:searchPlaceholder')} value={query} onValueChange={setQuery} />\n <CommandList>\n {search.isLoading && (\n <div className=\"p-3 text-sm text-muted-foreground\">{t('common:loading')}</div>\n )}\n {!search.isLoading && items.length === 0 && (\n <CommandEmpty>{t('common:noRecords')}</CommandEmpty>\n )}\n <CommandGroup>\n {items.map((r) => {\n const isSelected = ids.includes(String(r.id))\n return (\n <CommandItem\n key={r.id}\n value={String(r.id)}\n onSelect={() => toggle(r.id)}\n >\n <Check\n className={cn('size-4', isSelected ? 'opacity-100' : 'opacity-0')}\n />\n <span className=\"truncate\" title={r.title ? `${r.title} <${r.id}>` : `#${r.id}`}>\n {r.title ? `${r.title} <${r.id}>` : `#${r.id}`}\n </span>\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n\nconst useDebounced = <T,>(value: T, ms: number): T => {\n const [v, setV] = React.useState(value)\n React.useEffect(() => {\n const id = setTimeout(() => setV(value), ms)\n return () => clearTimeout(id)\n }, [value, ms])\n return v\n}\n"],"mappings":"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"}
|
package/dist/standalone/assets/{revisions-button-0WtL6bsZ.js → revisions-button-DR0oW2wX.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,n as t}from"./createLucideIcon-CUopU_LC.js";import{
|
|
2
|
-
//# sourceMappingURL=revisions-button-
|
|
1
|
+
import{a as e,n as t}from"./createLucideIcon-CUopU_LC.js";import{E as n,d as r}from"./with-selector-id7qGzTH.js";import{t as i}from"./rotate-ccw-BLr0QLAg.js";import{s as a}from"./dist-UsTgBPww.js";import{a as o,i as s,n as c,r as l,t as u}from"./select-BiV9bunJ.js";import{J as d,K as f,W as p,et as m}from"./router-BcZgB5cZ.js";import{a as h,i as g,n as _,r as v}from"./user-directory-Df5X8VOe.js";import{H as y,d as b,f as x,i as S,l as C,p as w,r as T,s as E,ut as D}from"./index-uYpCUVT4.js";var O=e(t(),1),k=n(),A={create:`Created`,update:`Updated`,delete:`Deleted`,unknownUser:`Unknown user`,changes:`changes`};function j({items:e,selectedId:t,labels:n,className:i,formatDate:a=e=>e,onSelect:o}){let s={...A,...n};return(0,k.jsx)(`div`,{className:r(`space-y-2`,i),children:e.map(e=>(0,k.jsxs)(`button`,{type:`button`,onClick:()=>o?.(e),className:r(`relative flex w-full gap-3 rounded-md border p-3 text-left transition-colors`,e.id===t?`border-primary bg-primary/5`:`border-border bg-card hover:bg-muted/50`),children:[(0,k.jsx)(`span`,{className:`mt-1 size-2.5 shrink-0 rounded-full bg-primary`}),(0,k.jsxs)(`span`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,k.jsxs)(`span`,{className:`flex items-center justify-between gap-2`,children:[(0,k.jsx)(`span`,{className:`truncate text-sm font-medium`,children:M(e.op,s)}),e.changes!==void 0&&(0,k.jsxs)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:[e.changes,` `,s.changes]})]}),(0,k.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.userLabel??e.userId??s.unknownUser}),(0,k.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:a(e.createdAt)})]})]},e.id))})}function M(e,t){return e===`create`?t.create:e===`delete`?t.delete:t.update}function N({resourceId:e,recordId:t}){let{t:n,locale:r}=m(),A=f(e),M=p(e,t,{limit:50}),N=d(e,t),F=T(),I=S(),[L,R]=O.useState(!1),z=O.useMemo(()=>M.data?.revisions??[],[M.data?.revisions]),B=_(O.useMemo(()=>Array.from(new Set(z.map(e=>e.userId).filter(e=>!!e))),[z])),V=O.useCallback(e=>e?v(B.get(e),e):void 0,[B]),[H,U]=O.useState(),[W,G]=O.useState(``),K=z.find(e=>e.id===H)??z[0],q=W?z.find(e=>e.id===W):void 0,J=O.useMemo(()=>{let e={};for(let t of A?.properties??[])e[t.path]=t.label;return e},[A]),Y=O.useCallback(e=>e.map(e=>({...e,label:J[e.path]})),[J]),X=K?Y(q?g(q.snapshot,K.snapshot):P(K)):[];O.useEffect(()=>{!H&&z[0]&&U(z[0].id)},[z,H]),O.useEffect(()=>{K?.id&&W===K.id&&G(``)},[W,K?.id]);let Z=O.useCallback(e=>new Intl.DateTimeFormat(r,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e)),[r]),Q=async e=>{if(await F.confirm({title:n(`history:confirmRevert`),confirmLabel:n(`history:revert`),destructive:!0}))try{await N.mutateAsync({revisionId:e.id}),I.success({key:`history:revertSuccess`}),U(void 0),G(``),R(!1)}catch(e){I.error({key:`history:revertFailed`},{description:e instanceof Error?e.message:String(e)})}};return(0,k.jsxs)(E,{open:L,onOpenChange:R,children:[(0,k.jsx)(w,{asChild:!0,children:(0,k.jsxs)(a,{variant:`outline`,size:`sm`,"aria-label":n(`history:revisions`),children:[(0,k.jsx)(D,{className:`size-4`}),(0,k.jsx)(`span`,{className:`hidden sm:inline`,children:n(`history:revisions`)})]})}),(0,k.jsxs)(C,{side:`right`,className:`w-full overflow-y-auto sm:max-w-5xl`,children:[(0,k.jsx)(b,{children:(0,k.jsx)(x,{children:n(`history:revisions`)})}),M.isLoading?(0,k.jsxs)(`div`,{className:`mt-6 space-y-3`,children:[(0,k.jsx)(y,{className:`h-16 w-full`}),(0,k.jsx)(y,{className:`h-64 w-full`})]}):M.isError?(0,k.jsx)(`div`,{className:`mt-6 rounded-md border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive`,children:n(`history:loadError`)}):(0,k.jsxs)(`div`,{className:`mt-6 grid gap-4 lg:grid-cols-[20rem_1fr]`,children:[(0,k.jsx)(j,{items:z.map(e=>({id:e.id,op:e.op,userId:e.userId,userLabel:V(e.userId),createdAt:e.createdAt,changes:P(e).length})),selectedId:K?.id,onSelect:e=>U(e.id),formatDate:Z,labels:{create:n(`history:op.create`),update:n(`history:op.update`),delete:n(`history:op.delete`),unknownUser:n(`history:unknownUser`),changes:n(`history:changes`)}}),(0,k.jsx)(`div`,{className:`min-w-0 space-y-4`,children:K?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 rounded-md border border-border bg-card p-3`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-sm font-medium`,children:Z(K.createdAt)}),(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:V(K.userId)??n(`history:unknownUser`)})]}),(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsxs)(u,{value:W||`_none_`,onValueChange:e=>G(e===`_none_`?``:e),children:[(0,k.jsx)(s,{className:`h-8 w-auto text-xs`,"aria-label":n(`history:compareTo`),children:(0,k.jsx)(o,{})}),(0,k.jsxs)(c,{children:[(0,k.jsx)(l,{value:`_none_`,children:n(`history:storedDiff`)}),z.filter(e=>e.id!==K.id).map(e=>(0,k.jsx)(l,{value:e.id,children:Z(e.createdAt)},e.id))]})]}),(0,k.jsxs)(a,{variant:`destructive`,size:`sm`,disabled:N.isPending||K.op===`delete`,onClick:()=>void Q(K),children:[(0,k.jsx)(i,{className:`size-4`}),n(`history:revert`)]})]})]}),(0,k.jsx)(h,{fields:X,labels:{added:n(`diff:added`),changed:n(`diff:changed`),removed:n(`diff:removed`),before:n(`diff:before`),after:n(`diff:after`),noChanges:n(`diff:noChanges`)}})]}):(0,k.jsx)(`div`,{className:`rounded-md border border-dashed p-8 text-center text-sm text-muted-foreground`,children:n(`history:noRevisions`)})})]})]})]})}var P=e=>g(e.snapshotBefore??{},e.snapshot);export{N as t};
|
|
2
|
+
//# sourceMappingURL=revisions-button-DR0oW2wX.js.map
|
|
Binary file
|
|
Binary file
|
package/dist/standalone/assets/{revisions-button-0WtL6bsZ.js.map → revisions-button-DR0oW2wX.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revisions-button-0WtL6bsZ.js","names":[],"sources":["../../../../ui/src/components/revision-timeline.tsx","../../../../react/src/components/revisions-button.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../lib/utils.js'\n\nexport interface RevisionTimelineItem {\n id: string\n op: 'create' | 'update' | 'delete'\n userId?: string\n /** Resolved, human-readable label for the user who created the revision\n * (e.g. email or full name). When set, it's shown instead of the raw\n * `userId`. Resolution happens in the React layer so this UI component\n * stays i18n- and data-source-agnostic. */\n userLabel?: string\n createdAt: string\n changes?: number\n}\n\nexport interface RevisionTimelineLabels {\n create?: string\n update?: string\n delete?: string\n unknownUser?: string\n changes?: string\n}\n\nexport interface RevisionTimelineProps {\n items: ReadonlyArray<RevisionTimelineItem>\n selectedId?: string\n labels?: RevisionTimelineLabels\n className?: string\n formatDate?: (value: string) => string\n onSelect?: (item: RevisionTimelineItem) => void\n}\n\nconst DEFAULT_LABELS: Required<RevisionTimelineLabels> = {\n create: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n unknownUser: 'Unknown user',\n changes: 'changes',\n}\n\nexport function RevisionTimeline({\n items,\n selectedId,\n labels,\n className,\n formatDate = (v) => v,\n onSelect,\n}: RevisionTimelineProps): React.ReactElement {\n const l = { ...DEFAULT_LABELS, ...labels }\n return (\n <div className={cn('space-y-2', className)}>\n {items.map((item) => {\n const selected = item.id === selectedId\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => onSelect?.(item)}\n className={cn(\n 'relative flex w-full gap-3 rounded-md border p-3 text-left transition-colors',\n selected ? 'border-primary bg-primary/5' : 'border-border bg-card hover:bg-muted/50',\n )}\n >\n <span className=\"mt-1 size-2.5 shrink-0 rounded-full bg-primary\" />\n <span className=\"min-w-0 flex-1 space-y-1\">\n <span className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate text-sm font-medium\">{labelForOp(item.op, l)}</span>\n {item.changes !== undefined && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {item.changes} {l.changes}\n </span>\n )}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {item.userLabel ?? item.userId ?? l.unknownUser}\n </span>\n <span className=\"block text-xs text-muted-foreground\">\n {formatDate(item.createdAt)}\n </span>\n </span>\n </button>\n )\n })}\n </div>\n )\n}\n\nfunction labelForOp(op: RevisionTimelineItem['op'], labels: Required<RevisionTimelineLabels>): string {\n if (op === 'create') return labels.create\n if (op === 'delete') return labels.delete\n return labels.update\n}\n","import * as React from 'react'\nimport {\n Button,\n DiffView,\n RevisionTimeline,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n Skeleton,\n} from '@modern-admin/ui'\nimport { History, RotateCcw } from 'lucide-react'\nimport { diffSnapshots } from '@modern-admin/core'\nimport { useRecordHistory, useResource, useRevertRevision } from '../hooks.js'\nimport { useI18n } from '../i18n.js'\nimport { useDialogs } from '../dialogs.js'\nimport { useNotify } from '../notify.js'\nimport { useUserDirectory, userLabelOf } from '../user-directory.js'\nimport type { HistoryDiffEntry, HistoryRevision } from '../client.js'\n\nexport interface RevisionsButtonProps {\n resourceId: string\n recordId: string\n}\n\nexport function RevisionsButton({\n resourceId,\n recordId,\n}: RevisionsButtonProps): React.ReactElement {\n const { t, locale } = useI18n()\n const resource = useResource(resourceId)\n const history = useRecordHistory(resourceId, recordId, { limit: 50 })\n const revert = useRevertRevision(resourceId, recordId)\n const dialogs = useDialogs()\n const notify = useNotify()\n const [open, setOpen] = React.useState(false)\n const revisions = React.useMemo(\n () => history.data?.revisions ?? [],\n [history.data?.revisions],\n )\n // Resolve revision authors to human-readable labels (email / name)\n // instead of showing raw user UUIDs.\n const userIds = React.useMemo(\n () => Array.from(new Set(revisions.map((r) => r.userId).filter((v): v is string => !!v))),\n [revisions],\n )\n const users = useUserDirectory(userIds)\n const labelForUser = React.useCallback(\n (userId: string | undefined): string | undefined =>\n userId ? userLabelOf(users.get(userId), userId) : undefined,\n [users],\n )\n const [selectedId, setSelectedId] = React.useState<string | undefined>()\n const [compareToId, setCompareToId] = React.useState<string>('')\n const selected = revisions.find((r) => r.id === selectedId) ?? revisions[0]\n const compareTo = compareToId\n ? revisions.find((r) => r.id === compareToId)\n : undefined\n\n // Build a path → label map from the resource schema so each diff field\n // can show a human-readable name before its technical path.\n const labelByPath = React.useMemo<Record<string, string>>(() => {\n const map: Record<string, string> = {}\n for (const p of resource?.properties ?? []) map[p.path] = p.label\n return map\n }, [resource])\n\n const withLabels = React.useCallback(\n (fields: ReturnType<typeof diffSnapshots>) =>\n fields.map((f) => ({ ...f, label: labelByPath[f.path] })),\n [labelByPath],\n )\n\n const visibleFields = selected\n ? withLabels(\n compareTo\n ? diffSnapshots(compareTo.snapshot, selected.snapshot)\n : fieldsFor(selected),\n )\n : []\n\n React.useEffect(() => {\n if (!selectedId && revisions[0]) setSelectedId(revisions[0].id)\n }, [revisions, selectedId])\n\n React.useEffect(() => {\n if (selected?.id && compareToId === selected.id) setCompareToId('')\n }, [compareToId, selected?.id])\n\n const formatDate = React.useCallback(\n (value: string) => new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n }).format(new Date(value)),\n [locale],\n )\n\n const handleRevert = async (revision: HistoryRevision): Promise<void> => {\n const ok = await dialogs.confirm({\n title: t('history:confirmRevert'),\n confirmLabel: t('history:revert'),\n destructive: true,\n })\n if (!ok) return\n try {\n await revert.mutateAsync({ revisionId: revision.id })\n notify.success({ key: 'history:revertSuccess' })\n setSelectedId(undefined)\n setCompareToId('')\n setOpen(false)\n } catch (err) {\n notify.error(\n { key: 'history:revertFailed' },\n { description: err instanceof Error ? err.message : String(err) },\n )\n }\n }\n\n return (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" aria-label={t('history:revisions')}>\n <History className=\"size-4\" />\n <span className=\"hidden sm:inline\">{t('history:revisions')}</span>\n </Button>\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"w-full overflow-y-auto sm:max-w-5xl\">\n <SheetHeader>\n <SheetTitle>{t('history:revisions')}</SheetTitle>\n </SheetHeader>\n {history.isLoading ? (\n <div className=\"mt-6 space-y-3\">\n <Skeleton className=\"h-16 w-full\" />\n <Skeleton className=\"h-64 w-full\" />\n </div>\n ) : history.isError ? (\n <div className=\"mt-6 rounded-md border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive\">\n {t('history:loadError')}\n </div>\n ) : (\n <div className=\"mt-6 grid gap-4 lg:grid-cols-[20rem_1fr]\">\n <RevisionTimeline\n items={revisions.map((r) => ({\n id: r.id,\n op: r.op,\n userId: r.userId,\n userLabel: labelForUser(r.userId),\n createdAt: r.createdAt,\n changes: fieldsFor(r).length,\n }))}\n selectedId={selected?.id}\n onSelect={(item) => setSelectedId(item.id)}\n formatDate={formatDate}\n labels={{\n create: t('history:op.create'),\n update: t('history:op.update'),\n delete: t('history:op.delete'),\n unknownUser: t('history:unknownUser'),\n changes: t('history:changes'),\n }}\n />\n <div className=\"min-w-0 space-y-4\">\n {selected ? (\n <>\n <div className=\"flex flex-wrap items-center justify-between gap-3 rounded-md border border-border bg-card p-3\">\n <div>\n <p className=\"text-sm font-medium\">{formatDate(selected.createdAt)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {labelForUser(selected.userId) ?? t('history:unknownUser')}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Select\n value={compareToId || '_none_'}\n onValueChange={(v) => setCompareToId(v === '_none_' ? '' : v)}\n >\n <SelectTrigger\n className=\"h-8 w-auto text-xs\"\n aria-label={t('history:compareTo')}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"_none_\">{t('history:storedDiff')}</SelectItem>\n {revisions\n .filter((r) => r.id !== selected.id)\n .map((revision) => (\n <SelectItem key={revision.id} value={revision.id}>\n {formatDate(revision.createdAt)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n disabled={revert.isPending || selected.op === 'delete'}\n onClick={() => void handleRevert(selected)}\n >\n <RotateCcw className=\"size-4\" />\n {t('history:revert')}\n </Button>\n </div>\n </div>\n <DiffView\n fields={visibleFields}\n labels={{\n added: t('diff:added'),\n changed: t('diff:changed'),\n removed: t('diff:removed'),\n before: t('diff:before'),\n after: t('diff:after'),\n noChanges: t('diff:noChanges'),\n }}\n />\n </>\n ) : (\n <div className=\"rounded-md border border-dashed p-8 text-center text-sm text-muted-foreground\">\n {t('history:noRevisions')}\n </div>\n )}\n </div>\n </div>\n )}\n </SheetContent>\n </Sheet>\n )\n}\n\nconst fieldsFor = (revision: HistoryRevision): HistoryDiffEntry[] =>\n diffSnapshots(revision.snapshotBefore ?? {}, revision.snapshot)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"revisions-button-DR0oW2wX.js","names":[],"sources":["../../../../ui/src/components/revision-timeline.tsx","../../../../react/src/components/revisions-button.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../lib/utils.js'\n\nexport interface RevisionTimelineItem {\n id: string\n op: 'create' | 'update' | 'delete'\n userId?: string\n /** Resolved, human-readable label for the user who created the revision\n * (e.g. email or full name). When set, it's shown instead of the raw\n * `userId`. Resolution happens in the React layer so this UI component\n * stays i18n- and data-source-agnostic. */\n userLabel?: string\n createdAt: string\n changes?: number\n}\n\nexport interface RevisionTimelineLabels {\n create?: string\n update?: string\n delete?: string\n unknownUser?: string\n changes?: string\n}\n\nexport interface RevisionTimelineProps {\n items: ReadonlyArray<RevisionTimelineItem>\n selectedId?: string\n labels?: RevisionTimelineLabels\n className?: string\n formatDate?: (value: string) => string\n onSelect?: (item: RevisionTimelineItem) => void\n}\n\nconst DEFAULT_LABELS: Required<RevisionTimelineLabels> = {\n create: 'Created',\n update: 'Updated',\n delete: 'Deleted',\n unknownUser: 'Unknown user',\n changes: 'changes',\n}\n\nexport function RevisionTimeline({\n items,\n selectedId,\n labels,\n className,\n formatDate = (v) => v,\n onSelect,\n}: RevisionTimelineProps): React.ReactElement {\n const l = { ...DEFAULT_LABELS, ...labels }\n return (\n <div className={cn('space-y-2', className)}>\n {items.map((item) => {\n const selected = item.id === selectedId\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => onSelect?.(item)}\n className={cn(\n 'relative flex w-full gap-3 rounded-md border p-3 text-left transition-colors',\n selected ? 'border-primary bg-primary/5' : 'border-border bg-card hover:bg-muted/50',\n )}\n >\n <span className=\"mt-1 size-2.5 shrink-0 rounded-full bg-primary\" />\n <span className=\"min-w-0 flex-1 space-y-1\">\n <span className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate text-sm font-medium\">{labelForOp(item.op, l)}</span>\n {item.changes !== undefined && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {item.changes} {l.changes}\n </span>\n )}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {item.userLabel ?? item.userId ?? l.unknownUser}\n </span>\n <span className=\"block text-xs text-muted-foreground\">\n {formatDate(item.createdAt)}\n </span>\n </span>\n </button>\n )\n })}\n </div>\n )\n}\n\nfunction labelForOp(op: RevisionTimelineItem['op'], labels: Required<RevisionTimelineLabels>): string {\n if (op === 'create') return labels.create\n if (op === 'delete') return labels.delete\n return labels.update\n}\n","import * as React from 'react'\nimport {\n Button,\n DiffView,\n RevisionTimeline,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n Skeleton,\n} from '@modern-admin/ui'\nimport { History, RotateCcw } from 'lucide-react'\nimport { diffSnapshots } from '@modern-admin/core'\nimport { useRecordHistory, useResource, useRevertRevision } from '../hooks.js'\nimport { useI18n } from '../i18n.js'\nimport { useDialogs } from '../dialogs.js'\nimport { useNotify } from '../notify.js'\nimport { useUserDirectory, userLabelOf } from '../user-directory.js'\nimport type { HistoryDiffEntry, HistoryRevision } from '../client.js'\n\nexport interface RevisionsButtonProps {\n resourceId: string\n recordId: string\n}\n\nexport function RevisionsButton({\n resourceId,\n recordId,\n}: RevisionsButtonProps): React.ReactElement {\n const { t, locale } = useI18n()\n const resource = useResource(resourceId)\n const history = useRecordHistory(resourceId, recordId, { limit: 50 })\n const revert = useRevertRevision(resourceId, recordId)\n const dialogs = useDialogs()\n const notify = useNotify()\n const [open, setOpen] = React.useState(false)\n const revisions = React.useMemo(\n () => history.data?.revisions ?? [],\n [history.data?.revisions],\n )\n // Resolve revision authors to human-readable labels (email / name)\n // instead of showing raw user UUIDs.\n const userIds = React.useMemo(\n () => Array.from(new Set(revisions.map((r) => r.userId).filter((v): v is string => !!v))),\n [revisions],\n )\n const users = useUserDirectory(userIds)\n const labelForUser = React.useCallback(\n (userId: string | undefined): string | undefined =>\n userId ? userLabelOf(users.get(userId), userId) : undefined,\n [users],\n )\n const [selectedId, setSelectedId] = React.useState<string | undefined>()\n const [compareToId, setCompareToId] = React.useState<string>('')\n const selected = revisions.find((r) => r.id === selectedId) ?? revisions[0]\n const compareTo = compareToId\n ? revisions.find((r) => r.id === compareToId)\n : undefined\n\n // Build a path → label map from the resource schema so each diff field\n // can show a human-readable name before its technical path.\n const labelByPath = React.useMemo<Record<string, string>>(() => {\n const map: Record<string, string> = {}\n for (const p of resource?.properties ?? []) map[p.path] = p.label\n return map\n }, [resource])\n\n const withLabels = React.useCallback(\n (fields: ReturnType<typeof diffSnapshots>) =>\n fields.map((f) => ({ ...f, label: labelByPath[f.path] })),\n [labelByPath],\n )\n\n const visibleFields = selected\n ? withLabels(\n compareTo\n ? diffSnapshots(compareTo.snapshot, selected.snapshot)\n : fieldsFor(selected),\n )\n : []\n\n React.useEffect(() => {\n if (!selectedId && revisions[0]) setSelectedId(revisions[0].id)\n }, [revisions, selectedId])\n\n React.useEffect(() => {\n if (selected?.id && compareToId === selected.id) setCompareToId('')\n }, [compareToId, selected?.id])\n\n const formatDate = React.useCallback(\n (value: string) => new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n }).format(new Date(value)),\n [locale],\n )\n\n const handleRevert = async (revision: HistoryRevision): Promise<void> => {\n const ok = await dialogs.confirm({\n title: t('history:confirmRevert'),\n confirmLabel: t('history:revert'),\n destructive: true,\n })\n if (!ok) return\n try {\n await revert.mutateAsync({ revisionId: revision.id })\n notify.success({ key: 'history:revertSuccess' })\n setSelectedId(undefined)\n setCompareToId('')\n setOpen(false)\n } catch (err) {\n notify.error(\n { key: 'history:revertFailed' },\n { description: err instanceof Error ? err.message : String(err) },\n )\n }\n }\n\n return (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" aria-label={t('history:revisions')}>\n <History className=\"size-4\" />\n <span className=\"hidden sm:inline\">{t('history:revisions')}</span>\n </Button>\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"w-full overflow-y-auto sm:max-w-5xl\">\n <SheetHeader>\n <SheetTitle>{t('history:revisions')}</SheetTitle>\n </SheetHeader>\n {history.isLoading ? (\n <div className=\"mt-6 space-y-3\">\n <Skeleton className=\"h-16 w-full\" />\n <Skeleton className=\"h-64 w-full\" />\n </div>\n ) : history.isError ? (\n <div className=\"mt-6 rounded-md border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive\">\n {t('history:loadError')}\n </div>\n ) : (\n <div className=\"mt-6 grid gap-4 lg:grid-cols-[20rem_1fr]\">\n <RevisionTimeline\n items={revisions.map((r) => ({\n id: r.id,\n op: r.op,\n userId: r.userId,\n userLabel: labelForUser(r.userId),\n createdAt: r.createdAt,\n changes: fieldsFor(r).length,\n }))}\n selectedId={selected?.id}\n onSelect={(item) => setSelectedId(item.id)}\n formatDate={formatDate}\n labels={{\n create: t('history:op.create'),\n update: t('history:op.update'),\n delete: t('history:op.delete'),\n unknownUser: t('history:unknownUser'),\n changes: t('history:changes'),\n }}\n />\n <div className=\"min-w-0 space-y-4\">\n {selected ? (\n <>\n <div className=\"flex flex-wrap items-center justify-between gap-3 rounded-md border border-border bg-card p-3\">\n <div>\n <p className=\"text-sm font-medium\">{formatDate(selected.createdAt)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {labelForUser(selected.userId) ?? t('history:unknownUser')}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Select\n value={compareToId || '_none_'}\n onValueChange={(v) => setCompareToId(v === '_none_' ? '' : v)}\n >\n <SelectTrigger\n className=\"h-8 w-auto text-xs\"\n aria-label={t('history:compareTo')}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"_none_\">{t('history:storedDiff')}</SelectItem>\n {revisions\n .filter((r) => r.id !== selected.id)\n .map((revision) => (\n <SelectItem key={revision.id} value={revision.id}>\n {formatDate(revision.createdAt)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n disabled={revert.isPending || selected.op === 'delete'}\n onClick={() => void handleRevert(selected)}\n >\n <RotateCcw className=\"size-4\" />\n {t('history:revert')}\n </Button>\n </div>\n </div>\n <DiffView\n fields={visibleFields}\n labels={{\n added: t('diff:added'),\n changed: t('diff:changed'),\n removed: t('diff:removed'),\n before: t('diff:before'),\n after: t('diff:after'),\n noChanges: t('diff:noChanges'),\n }}\n />\n </>\n ) : (\n <div className=\"rounded-md border border-dashed p-8 text-center text-sm text-muted-foreground\">\n {t('history:noRevisions')}\n </div>\n )}\n </div>\n </div>\n )}\n </SheetContent>\n </Sheet>\n )\n}\n\nconst fieldsFor = (revision: HistoryRevision): HistoryDiffEntry[] =>\n diffSnapshots(revision.snapshotBefore ?? {}, revision.snapshot)\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,n as t}from"./createLucideIcon-CUopU_LC.js";import{
|
|
1
|
+
import{a as e,n as t}from"./createLucideIcon-CUopU_LC.js";import{E as n,d as r}from"./with-selector-id7qGzTH.js";var i=e(t(),1);function a(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function o(e){if(Array.isArray(e))return e}function s(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function c(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function l(e,t){return o(e)||s(e,t)||u(e,t)||c()}function u(e,t){if(e){if(typeof e==`string`)return a(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}var d=Object.entries,f=Object.setPrototypeOf,ee=Object.isFrozen,te=Object.getPrototypeOf,ne=Object.getOwnPropertyDescriptor,p=Object.freeze,m=Object.seal,re=Object.create,ie=typeof Reflect<`u`&&Reflect,ae=ie.apply,oe=ie.construct;p||=function(e){return e},m||=function(e){return e},ae||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},oe||=function(e){return new e(...[...arguments].slice(1))};var se=x(Array.prototype.forEach),ce=x(Array.prototype.lastIndexOf),le=x(Array.prototype.pop),ue=x(Array.prototype.push),de=x(Array.prototype.splice),fe=Array.isArray,pe=x(String.prototype.toLowerCase),me=x(String.prototype.toString),he=x(String.prototype.match),ge=x(String.prototype.replace),_e=x(String.prototype.indexOf),ve=x(String.prototype.trim),ye=x(Number.prototype.toString),h=x(Boolean.prototype.toString),g=typeof BigInt>`u`?null:x(BigInt.prototype.toString),_=typeof Symbol>`u`?null:x(Symbol.prototype.toString),v=x(Object.prototype.hasOwnProperty),y=x(Object.prototype.toString),b=x(RegExp.prototype.test),be=xe(TypeError);function x(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return ae(e,t,n)}}function xe(e){return function(){return oe(e,[...arguments])}}function S(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:pe;if(f&&f(e,null),!fe(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(ee(t)||(t[r]=e),i=e)}e[i]=!0}return e}function Se(e){for(let t=0;t<e.length;t++)v(e,t)||(e[t]=null);return e}function C(e){let t=re(null);for(let r of d(e)){var n=l(r,2);let i=n[0],a=n[1];v(e,i)&&(fe(a)?t[i]=Se(a):a&&typeof a==`object`&&a.constructor===Object?t[i]=C(a):t[i]=a)}return t}function Ce(e){switch(typeof e){case`string`:return e;case`number`:return ye(e);case`boolean`:return h(e);case`bigint`:return g?g(e):`0`;case`symbol`:return _?_(e):`Symbol()`;case`undefined`:return y(e);case`function`:case`object`:{if(e===null)return y(e);let t=e,n=w(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:y(e)}return y(e)}default:return y(e)}}function w(e,t){for(;e!==null;){let n=ne(e,t);if(n){if(n.get)return x(n.get);if(typeof n.value==`function`)return x(n.value)}e=te(e)}function n(){return null}return n}function we(e){try{return b(e,``),!0}catch{return!1}}var Te=p(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),Ee=p(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),De=p([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),Oe=p([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),ke=p(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),Ae=p([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),je=p([`#text`]),Me=p(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),Ne=p(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-rendering.textlength.type.u1.u2.unicode.values.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),Pe=p(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),Fe=p([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),Ie=m(/{{[\w\W]*|^[\w\W]*}}/g),Le=m(/<%[\w\W]*|^[\w\W]*%>/g),Re=m(/\${[\w\W]*/g),ze=m(/^data-[\-\w.\u00B7-\uFFFF]+$/),Be=m(/^aria-[\-\w]+$/),Ve=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),He=m(/^(?:\w+script|data):/i),Ue=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),We=m(/^html$/i),Ge=m(/^[a-z][.\w]*(-[.\w]+)+$/i),Ke=m(/<[/\w!]/g),qe=m(/<[/\w]/g),Je=m(/<\/no(script|embed|frames)/i),Ye=m(/\/>/i),T={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Xe=function(){return typeof window>`u`?null:window},Ze=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},Qe=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},E=function(e,t,n,r){return v(e,t)&&fe(e[t])?S(r.base?C(r.base):{},e[t],r.transform):n};function $e(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Xe(),t=e=>$e(e);if(t.version=`3.4.11`,t.removed=[],!e||!e.document||e.document.nodeType!==T.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,f=s.prototype,ee=w(f,`cloneNode`),te=w(f,`remove`),ne=w(f,`nextSibling`),ie=w(f,`childNodes`),ae=w(f,`parentNode`),oe=w(f,`shadowRoot`),ye=w(f,`attributes`),h=o&&o.prototype?w(o.prototype,`nodeType`):null,g=o&&o.prototype?w(o.prototype,`nodeName`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let _,y=``,x,xe=!1,Se=0,et=function(){if(Se>0)throw be(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},D=function(e){et(),Se++;try{return _.createHTML(e)}finally{Se--}},tt=function(e){et(),Se++;try{return _.createScriptURL(e)}finally{Se--}},nt=function(){return xe||=(x=Ze(u,i),!0),x},O=n,k=O.implementation,A=O.createNodeIterator,rt=O.createDocumentFragment,j=O.getElementsByTagName,it=r.importNode,M=Qe();t.isSupported=typeof d==`function`&&typeof ae==`function`&&k&&k.createHTMLDocument!==void 0;let at=Ie,ot=Le,st=Re,ct=ze,lt=Be,ut=He,dt=Ue,ft=Ge,pt=Ve,N=null,mt=S({},[...Te,...Ee,...De,...ke,...je]),P=null,ht=S({},[...Me,...Ne,...Pe,...Fe]),F=Object.seal(re(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),gt=null,_t=null,I=Object.seal(re(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),vt=!0,yt=!0,bt=!1,xt=!0,L=!1,St=!0,R=!1,z=!1,Ct=null,wt=null,Tt=!1,B=!1,Et=!1,Dt=!1,Ot=!0,kt=!1,At=`user-content-`,jt=!0,Mt=!1,Nt={},V=null,Pt=S({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),Ft=null,It=S({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Lt=null,Rt=S({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),zt=`http://www.w3.org/1998/Math/MathML`,Bt=`http://www.w3.org/2000/svg`,H=`http://www.w3.org/1999/xhtml`,Vt=H,Ht=!1,Ut=null,Wt=S({},[zt,Bt,H],me),Gt=p([`mi`,`mo`,`mn`,`ms`,`mtext`]),Kt=S({},Gt),qt=p([`annotation-xml`]),Jt=S({},qt),Yt=S({},[`title`,`style`,`font`,`a`,`script`]),U=null,Xt=[`application/xhtml+xml`,`text/html`],W=null,Zt=null,G=n.createElement(`form`),Qt=function(e){return e instanceof RegExp||e instanceof Function},$t=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Zt&&Zt===e)return;(!e||typeof e!=`object`)&&(e={}),e=C(e),U=Xt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,W=U===`application/xhtml+xml`?me:pe,N=E(e,`ALLOWED_TAGS`,mt,{transform:W}),P=E(e,`ALLOWED_ATTR`,ht,{transform:W}),Ut=E(e,`ALLOWED_NAMESPACES`,Wt,{transform:me}),Lt=E(e,`ADD_URI_SAFE_ATTR`,Rt,{transform:W,base:Rt}),Ft=E(e,`ADD_DATA_URI_TAGS`,It,{transform:W,base:It}),V=E(e,`FORBID_CONTENTS`,Pt,{transform:W}),gt=E(e,`FORBID_TAGS`,C({}),{transform:W}),_t=E(e,`FORBID_ATTR`,C({}),{transform:W}),Nt=v(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?C(e.USE_PROFILES):e.USE_PROFILES:!1,vt=e.ALLOW_ARIA_ATTR!==!1,yt=e.ALLOW_DATA_ATTR!==!1,bt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,xt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,L=e.SAFE_FOR_TEMPLATES||!1,St=e.SAFE_FOR_XML!==!1,R=e.WHOLE_DOCUMENT||!1,B=e.RETURN_DOM||!1,Et=e.RETURN_DOM_FRAGMENT||!1,Dt=e.RETURN_TRUSTED_TYPE||!1,Tt=e.FORCE_BODY||!1,Ot=e.SANITIZE_DOM!==!1,kt=e.SANITIZE_NAMED_PROPS||!1,jt=e.KEEP_CONTENT!==!1,Mt=e.IN_PLACE||!1,pt=we(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:Ve,Vt=typeof e.NAMESPACE==`string`?e.NAMESPACE:H,Kt=v(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?C(e.MATHML_TEXT_INTEGRATION_POINTS):S({},Gt),Jt=v(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?C(e.HTML_INTEGRATION_POINTS):S({},qt);let t=v(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?C(e.CUSTOM_ELEMENT_HANDLING):re(null);if(F=re(null),v(t,`tagNameCheck`)&&Qt(t.tagNameCheck)&&(F.tagNameCheck=t.tagNameCheck),v(t,`attributeNameCheck`)&&Qt(t.attributeNameCheck)&&(F.attributeNameCheck=t.attributeNameCheck),v(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(F.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),m(F),L&&(yt=!1),Et&&(B=!0),Nt&&(N=S({},je),P=re(null),Nt.html===!0&&(S(N,Te),S(P,Me)),Nt.svg===!0&&(S(N,Ee),S(P,Ne),S(P,Fe)),Nt.svgFilters===!0&&(S(N,De),S(P,Ne),S(P,Fe)),Nt.mathMl===!0&&(S(N,ke),S(P,Pe),S(P,Fe))),I.tagCheck=null,I.attributeCheck=null,v(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?I.tagCheck=e.ADD_TAGS:fe(e.ADD_TAGS)&&(N===mt&&(N=C(N)),S(N,e.ADD_TAGS,W))),v(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?I.attributeCheck=e.ADD_ATTR:fe(e.ADD_ATTR)&&(P===ht&&(P=C(P)),S(P,e.ADD_ATTR,W))),v(e,`ADD_URI_SAFE_ATTR`)&&fe(e.ADD_URI_SAFE_ATTR)&&S(Lt,e.ADD_URI_SAFE_ATTR,W),v(e,`FORBID_CONTENTS`)&&fe(e.FORBID_CONTENTS)&&(V===Pt&&(V=C(V)),S(V,e.FORBID_CONTENTS,W)),v(e,`ADD_FORBID_CONTENTS`)&&fe(e.ADD_FORBID_CONTENTS)&&(V===Pt&&(V=C(V)),S(V,e.ADD_FORBID_CONTENTS,W)),jt&&(N[`#text`]=!0),R&&S(N,[`html`,`head`,`body`]),N.table&&(S(N,[`tbody`]),delete gt.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw be(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw be(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=_;_=e.TRUSTED_TYPES_POLICY;try{y=D(``)}catch(e){throw _=t,e}}else e.TRUSTED_TYPES_POLICY===null?(_=void 0,y=``):(_===void 0&&(_=nt()),_&&typeof y==`string`&&(y=D(``)));p&&p(e),Zt=e},K=S({},[...Ee,...De,...Oe]),en=S({},[...ke,...Ae]),tn=function(e,t,n){return t.namespaceURI===H?e===`svg`:t.namespaceURI===zt?e===`svg`&&(n===`annotation-xml`||Kt[n]):!!K[e]},nn=function(e,t,n){return t.namespaceURI===H?e===`math`:t.namespaceURI===Bt?e===`math`&&Jt[n]:!!en[e]},rn=function(e,t,n){return t.namespaceURI===Bt&&!Jt[n]||t.namespaceURI===zt&&!Kt[n]?!1:!en[e]&&(Yt[e]||!K[e])},an=function(e){let t=ae(e);(!t||!t.tagName)&&(t={namespaceURI:Vt,tagName:`template`});let n=pe(e.tagName),r=pe(t.tagName);return Ut[e.namespaceURI]?e.namespaceURI===Bt?tn(n,t,r):e.namespaceURI===zt?nn(n,t,r):e.namespaceURI===H?rn(n,t,r):!!(U===`application/xhtml+xml`&&Ut[e.namespaceURI]):!1},q=function(e){ue(t.removed,{element:e});try{ae(e).removeChild(e)}catch{if(te(e),!ae(e))throw be(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},J=function(e){let t=ie(e);if(t){let e=[];se(t,t=>{ue(e,t)}),se(e,e=>{try{te(e)}catch{}})}let n=ye(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;if(typeof i==`string`)try{e.removeAttribute(i)}catch{}}},Y=function(e,n){try{ue(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{ue(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(B||Et)try{q(n)}catch{}else try{n.setAttribute(e,``)}catch{}},on=function(e){let t=ye(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;if(!(typeof i!=`string`||P[W(i)]))try{e.removeAttribute(i)}catch{}}},X=function(e){let t=[e];for(;t.length>0;){let e=t.pop();(h?h(e):e.nodeType)===T.element&&on(e);let n=ie(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},sn=function(e){let t=null,r=null;if(Tt)e=`<remove></remove>`+e;else{let t=he(e,/^[\r\n\t ]+/);r=t&&t[0]}U===`application/xhtml+xml`&&Vt===H&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=_?D(e):e;if(Vt===H)try{t=new l().parseFromString(i,U)}catch{}if(!t||!t.documentElement){t=k.createDocument(Vt,`template`,null);try{t.documentElement.innerHTML=Ht?y:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),Vt===H?j.call(t,R?`html`:`body`)[0]:R?t.documentElement:a},Z=function(e){return A.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Q=function(e){return e=ge(e,at,` `),e=ge(e,ot,` `),e=ge(e,st,` `),e},cn=function(e){e.normalize();let t=A.call(e.ownerDocument||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),n=t.nextNode();for(;n;)n.data=Q(n.data),n=t.nextNode();let r=e.querySelectorAll?.call(e,`template`);r&&se(r,e=>{un(e.content)&&cn(e.content)})},ln=function(e){let t=g?g(e):null;return typeof t!=`string`||W(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==ye(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==h(e)||e.childNodes!==ie(e)},un=function(e){if(!h||typeof e!=`object`||!e)return!1;try{return h(e)===T.documentFragment}catch{return!1}},dn=function(e){if(!h||typeof e!=`object`||!e)return!1;try{return typeof h(e)==`number`}catch{return!1}};function $(e,n,r){e.length!==0&&se(e,e=>{e.call(t,n,r,Zt)})}let fn=function(e,t){return!!(St&&e.hasChildNodes()&&!dn(e.firstElementChild)&&b(Ke,e.textContent)&&b(Ke,e.innerHTML)||St&&e.namespaceURI===H&&t===`style`&&dn(e.firstElementChild)||e.nodeType===T.processingInstruction||St&&e.nodeType===T.comment&&b(qe,e.data))},pn=function(e,t){if(!gt[t]&&_n(t)&&(F.tagNameCheck instanceof RegExp&&b(F.tagNameCheck,t)||F.tagNameCheck instanceof Function&&F.tagNameCheck(t)))return!1;if(jt&&!V[t]){let t=ae(e),n=ie(e);if(n&&t){let r=n.length;for(let i=r-1;i>=0;--i){let r=Mt?n[i]:ee(n[i],!0);t.insertBefore(r,ne(e))}}}return q(e),!0},mn=function(e){if($(M.beforeSanitizeElements,e,null),ln(e))return q(e),!0;let n=W(g?g(e):e.nodeName);if($(M.uponSanitizeElement,e,{tagName:n,allowedTags:N}),fn(e,n))return q(e),!0;if(gt[n]||!(I.tagCheck instanceof Function&&I.tagCheck(n))&&!N[n])return pn(e,n);if((h?h(e):e.nodeType)===T.element&&!an(e)||(n===`noscript`||n===`noembed`||n===`noframes`)&&b(Je,e.innerHTML))return q(e),!0;if(L&&e.nodeType===T.text){let n=Q(e.textContent);e.textContent!==n&&(ue(t.removed,{element:e.cloneNode()}),e.textContent=n)}return $(M.afterSanitizeElements,e,null),!1},hn=function(e,t,r){if(_t[t]||Ot&&(t===`id`||t===`name`)&&(r in n||r in G))return!1;let i=P[t]||I.attributeCheck instanceof Function&&I.attributeCheck(t,e);if(!(yt&&b(ct,t))&&!(vt&&b(lt,t))){if(!i){if(!(_n(e)&&(F.tagNameCheck instanceof RegExp&&b(F.tagNameCheck,e)||F.tagNameCheck instanceof Function&&F.tagNameCheck(e))&&(F.attributeNameCheck instanceof RegExp&&b(F.attributeNameCheck,t)||F.attributeNameCheck instanceof Function&&F.attributeNameCheck(t,e))||t===`is`&&F.allowCustomizedBuiltInElements&&(F.tagNameCheck instanceof RegExp&&b(F.tagNameCheck,r)||F.tagNameCheck instanceof Function&&F.tagNameCheck(r))))return!1}else if(!Lt[t]&&!b(pt,ge(r,dt,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&_e(r,`data:`)===0&&Ft[e])&&!(bt&&!b(ut,ge(r,dt,``)))&&r)return!1}return!0},gn=S({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),_n=function(e){return!gn[pe(e)]&&b(ft,e)},vn=function(e,t,n,r){if(_&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!n)switch(u.getAttributeType(e,t)){case`TrustedHTML`:return D(r);case`TrustedScriptURL`:return tt(r)}return r},yn=function(e,n,r,i){try{r?e.setAttributeNS(r,n,i):e.setAttribute(n,i),ln(e)?q(e):le(t.removed)}catch{Y(n,e)}},bn=function(e){$(M.beforeSanitizeAttributes,e,null);let t=e.attributes;if(!t||ln(e))return;let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:P,forceKeepAttr:void 0},r=t.length,i=W(e.nodeName);for(;r--;){let a=t[r],o=a.name,s=a.namespaceURI,c=a.value,l=W(o),u=c,d=o===`value`?u:ve(u);if(n.attrName=l,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,$(M.uponSanitizeAttribute,e,n),d=n.attrValue,kt&&(l===`id`||l===`name`)&&_e(d,At)!==0&&(Y(o,e),d=At+d),St&&b(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,d)){Y(o,e);continue}if(l===`attributename`&&he(d,`href`)){Y(o,e);continue}if(!n.forceKeepAttr){if(!n.keepAttr){Y(o,e);continue}if(!xt&&b(Ye,d)){Y(o,e);continue}if(L&&(d=Q(d)),!hn(i,l,d)){Y(o,e);continue}d=vn(i,l,s,d),d!==u&&yn(e,o,s,d)}}$(M.afterSanitizeAttributes,e,null)},xn=function(e){let t=null,n=Z(e);for($(M.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if($(M.uponSanitizeShadowNode,t,null),mn(t),bn(t),un(t.content)&&xn(t.content),(h?h(t):t.nodeType)===T.element){let e=oe(t);un(e)&&(Sn(e),xn(e))}$(M.afterSanitizeShadowDOM,e,null)},Sn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){xn(e.shadow);continue}let n=e.node,r=(h?h(n):n.nodeType)===T.element,i=ie(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=g?g(n):null;if(typeof e==`string`&&W(e)===`template`){let e=n.content;un(e)&&t.push({node:e,shadow:null})}}if(r){let e=oe(n);un(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(Ht=!e,Ht&&(e=`<!-->`),typeof e!=`string`&&!dn(e)&&(e=Ce(e),typeof e!=`string`))throw be(`dirty is not a string, aborting`);if(!t.isSupported)return e;z?(N=Ct,P=wt):$t(n),(M.uponSanitizeElement.length>0||M.uponSanitizeAttribute.length>0)&&(N=C(N)),M.uponSanitizeAttribute.length>0&&(P=C(P)),t.removed=[];let c=Mt&&typeof e!=`string`&&dn(e);if(c){let t=g?g(e):e.nodeName;if(typeof t==`string`){let e=W(t);if(!N[e]||gt[e])throw be(`root node is forbidden and cannot be sanitized in-place`)}if(ln(e))throw be(`root node is clobbered and cannot be sanitized in-place`);try{Sn(e)}catch(t){throw J(e),t}}else if(dn(e))i=sn(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===T.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),Sn(a);else{if(!B&&!L&&!R&&e.indexOf(`<`)===-1)return _&&Dt?D(e):e;if(i=sn(e),!i)return B?null:Dt?y:``}i&&Tt&&q(i.firstChild);let l=Z(c?e:i);try{for(;o=l.nextNode();)mn(o),bn(o),un(o.content)&&xn(o.content)}catch(t){throw c&&J(e),t}if(c)return se(t.removed,e=>{e.element&&X(e.element)}),L&&cn(e),e;if(B){if(L&&cn(i),Et)for(s=rt.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(P.shadowroot||P.shadowrootmode)&&(s=it.call(r,s,!0)),s}let u=R?i.outerHTML:i.innerHTML;return R&&N[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&b(We,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
3
3
|
`+u),L&&(u=Q(u)),_&&Dt?D(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};$t(e),z=!0,Ct=N,wt=P},t.clearConfig=function(){Zt=null,z=!1,Ct=null,wt=null,_=x,y=``},t.isValidAttribute=function(e,t,n){Zt||$t({});let r=W(e),i=W(t);return hn(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&v(M,e)&&ue(M[e],t)},t.removeHook=function(e,t){if(v(M,e)){if(t!==void 0){let n=ce(M[e],t);return n===-1?void 0:de(M[e],n,1)[0]}return le(M[e])}},t.removeHooks=function(e){v(M,e)&&(M[e]=[])},t.removeAllHooks=function(){M=Qe()},t}var et=$e();function D(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var tt=D();function nt(e){tt=e}var O={exec:()=>null};function k(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function A(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(j.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var rt=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),j={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:k(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:k(e=>RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:k(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:k(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:k(e=>RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,`i`)),blockquoteBeginRegex:k(e=>RegExp(`^ {0,${e}}>`))},it=/^(?:[ \t]*(?:\n|$))+/,M=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,at=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ot=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,st=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ct=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,lt=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ut=A(lt).replace(/bull/g,ct).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),dt=A(lt).replace(/bull/g,ct).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ft=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,pt=/^[^\n]+/,N=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,mt=A(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,N).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),P=A(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,ct).getRegex(),ht=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,F=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,gt=A(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,F).replace(`tag`,ht).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),_t=A(ft).replace(`hr`,ot).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,ht).getRegex(),I={blockquote:A(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,_t).getRegex(),code:M,def:mt,fences:at,heading:st,hr:ot,html:gt,lheading:ut,list:P,newline:it,paragraph:_t,table:O,text:pt},vt=A(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,ot).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,ht).getRegex(),yt={...I,lheading:dt,table:vt,paragraph:A(ft).replace(`hr`,ot).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,vt).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,ht).getRegex()},bt={...I,html:A(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,F).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:O,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:A(ft).replace(`hr`,ot).replace(`heading`,` *#{1,6} *[^
|
|
4
4
|
]`).replace(`lheading`,ut).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},xt=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,L=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,St=/^( {2,}|\\)\n(?!\s*$)/,R=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,z=/[\p{P}\p{S}]/u,Ct=/[\s\p{P}\p{S}]/u,wt=/[^\s\p{P}\p{S}]/u,Tt=A(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,Ct).getRegex(),B=/(?!~)[\p{P}\p{S}]/u,Et=/(?!~)[\s\p{P}\p{S}]/u,Dt=/(?:[^\s\p{P}\p{S}]|~)/u,Ot=A(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,rt?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),kt=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,At=A(kt,`u`).replace(/punct/g,z).getRegex(),jt=A(kt,`u`).replace(/punct/g,B).getRegex(),Mt=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Nt=A(Mt,`gu`).replace(/notPunctSpace/g,wt).replace(/punctSpace/g,Ct).replace(/punct/g,z).getRegex(),V=A(Mt,`gu`).replace(/notPunctSpace/g,Dt).replace(/punctSpace/g,Et).replace(/punct/g,B).getRegex(),Pt=A(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,wt).replace(/punctSpace/g,Ct).replace(/punct/g,z).getRegex(),Ft=A(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,z).getRegex(),It=A(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,wt).replace(/punctSpace/g,Ct).replace(/punct/g,z).getRegex(),Lt=A(/\\(punct)/,`gu`).replace(/punct/g,z).getRegex(),Rt=A(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),zt=A(F).replace(`(?:-->|$)`,`-->`).getRegex(),Bt=A(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,zt).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),H=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Vt=A(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,H).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ht=A(/^!?\[(label)\]\[(ref)\]/).replace(`label`,H).replace(`ref`,N).getRegex(),Ut=A(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,N).getRegex(),Wt=A(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,Ht).replace(`nolink`,Ut).getRegex(),Gt=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Kt={_backpedal:O,anyPunctuation:Lt,autolink:Rt,blockSkip:Ot,br:St,code:L,del:O,delLDelim:O,delRDelim:O,emStrongLDelim:At,emStrongRDelimAst:Nt,emStrongRDelimUnd:Pt,escape:xt,link:Vt,nolink:Ut,punctuation:Tt,reflink:Ht,reflinkSearch:Wt,tag:Bt,text:R,url:O},qt={...Kt,link:A(/^!?\[(label)\]\((.*?)\)/).replace(`label`,H).getRegex(),reflink:A(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,H).getRegex()},Jt={...Kt,emStrongRDelimAst:V,emStrongLDelim:jt,delLDelim:Ft,delRDelim:It,url:A(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,Gt).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:A(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,Gt).getRegex()},Yt={...Jt,br:A(St).replace(`{2,}`,`*`).getRegex(),text:A(Jt.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},U={normal:I,gfm:yt,pedantic:bt},Xt={normal:Kt,gfm:Jt,breaks:Yt,pedantic:qt},W={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Zt=e=>W[e];function G(e,t){if(t){if(j.escapeTest.test(e))return e.replace(j.escapeReplace,Zt)}else if(j.escapeTestNoEncode.test(e))return e.replace(j.escapeReplaceNoEncode,Zt);return e}function Qt(e){try{e=encodeURI(e).replace(j.percentDecode,`%`)}catch{return null}return e}function $t(e,t){let n=e.replace(j.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(j.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``);for(;r<n.length;r++)n[r]=n[r].trim().replace(j.slashPipe,`|`);return n}function K(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function en(e){let t=e.split(`
|
|
@@ -64,4 +64,4 @@ ${e}</tr>
|
|
|
64
64
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
65
65
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${G(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=Qt(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+G(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Qt(e);if(i===null)return G(n);e=i;let a=`<img src="${e}" alt="${G(n)}"`;return t&&(a+=` title="${G(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:G(e.text)}},on=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},X=class e{options;renderer;textRenderer;constructor(e){this.options=e||tt,this.options.renderer=this.options.renderer||new Y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new on}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},sn=class{options;block;constructor(e){this.options=e||tt}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?J.lex:J.lexInline}provideParser(e=this.block){return e?X.parse:X.parseInline}},Z=new class{defaults=D();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=X;Renderer=Y;TextRenderer=on;Lexer=J;Tokenizer=q;Hooks=sn;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new Y(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new q(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new sn;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];sn.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&sn.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return J.lex(e,t??this.defaults)}parser(e,t){return X.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?J.lex:J.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?X.parse:X.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?J.lex:J.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?X.parse:X.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
66
66
|
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+G(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function Q(e,t){return Z.parse(e,t)}Q.options=Q.setOptions=function(e){return Z.setOptions(e),Q.defaults=Z.defaults,nt(Q.defaults),Q},Q.getDefaults=D,Q.defaults=tt,Q.use=function(...e){return Z.use(...e),Q.defaults=Z.defaults,nt(Q.defaults),Q},Q.walkTokens=function(e,t){return Z.walkTokens(e,t)},Q.parseInline=Z.parseInline,Q.Parser=X,Q.parser=X.parse,Q.Renderer=Y,Q.TextRenderer=on,Q.Lexer=J,Q.lexer=J.lex,Q.Tokenizer=q,Q.Hooks=sn,Q.parse=Q,Q.options,Q.setOptions,Q.use,Q.walkTokens,Q.parseInline,X.parse,J.lex;var cn=n(),ln=`prose prose-sm max-w-none text-foreground prose-headings:text-foreground prose-p:text-foreground prose-strong:text-foreground prose-li:text-foreground prose-code:text-foreground prose-pre:text-foreground prose-pre:bg-muted prose-blockquote:text-muted-foreground prose-blockquote:border-border prose-a:text-foreground dark:prose-invert`;function un(e){return typeof window>`u`?e:et.sanitize(e,{USE_PROFILES:{html:!0}})}function dn({value:e,format:t=`html`,className:n}){let a=i.useMemo(()=>e?un(t===`markdown`?Q.parse(e,{async:!1}):e):``,[e,t]);return(0,cn.jsx)(`div`,{className:r(ln,n),dangerouslySetInnerHTML:{__html:a}})}export{dn as t};
|
|
67
|
-
//# sourceMappingURL=richtext-render-
|
|
67
|
+
//# sourceMappingURL=richtext-render-VFCKGulc.js.map
|
|
Binary file
|
|
Binary file
|