@strapi/content-manager 0.0.0-experimental.32c4b04580cc12400710050c8198e46b3644cfd4 → 0.0.0-experimental.332a7d5b6b1d23635d7e205657f0ff39ec133c9e
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/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-BAgyHiMm.mjs → ComponentConfigurationPage-D4H-v0et.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-BAgyHiMm.mjs.map → ComponentConfigurationPage-D4H-v0et.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-5ukroXAh.js → ComponentConfigurationPage-DdkVGfXC.js} +5 -6
- package/dist/_chunks/{ComponentConfigurationPage-5ukroXAh.js.map → ComponentConfigurationPage-DdkVGfXC.js.map} +1 -1
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
- package/dist/_chunks/{EditConfigurationPage-DmoXawIh.mjs → EditConfigurationPage-D1nvB7Br.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DmoXawIh.mjs.map → EditConfigurationPage-D1nvB7Br.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Xp7lun0f.js → EditConfigurationPage-LYEvR4fW.js} +5 -6
- package/dist/_chunks/{EditConfigurationPage-Xp7lun0f.js.map → EditConfigurationPage-LYEvR4fW.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-BLsjc5F-.mjs → EditViewPage-Bcnff6Vd.mjs} +34 -46
- package/dist/_chunks/EditViewPage-Bcnff6Vd.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-C-ukDOB7.js → EditViewPage-DqelJ9UK.js} +36 -49
- package/dist/_chunks/EditViewPage-DqelJ9UK.js.map +1 -0
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
- package/dist/_chunks/{Form-CPYqIWDG.js → Form-CnHfBeiB.js} +39 -21
- package/dist/_chunks/Form-CnHfBeiB.js.map +1 -0
- package/dist/_chunks/{Form-Dg_GS5TQ.mjs → Form-CzPCJi3B.mjs} +37 -18
- package/dist/_chunks/Form-CzPCJi3B.mjs.map +1 -0
- package/dist/_chunks/{History-wrnHqf09.mjs → History-CcmSn3Mj.mjs} +71 -104
- package/dist/_chunks/History-CcmSn3Mj.mjs.map +1 -0
- package/dist/_chunks/{History-DNQkXANT.js → History-zArjENzj.js} +81 -115
- package/dist/_chunks/History-zArjENzj.js.map +1 -0
- package/dist/_chunks/{Field-Bfph5SOd.js → Input-CDHKQd7o.js} +1334 -1239
- package/dist/_chunks/Input-CDHKQd7o.js.map +1 -0
- package/dist/_chunks/{Field-Cs7duwWd.mjs → Input-aV8SSoTa.mjs} +1192 -1097
- package/dist/_chunks/Input-aV8SSoTa.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DScmJVkW.mjs → ListConfigurationPage-BPvzENJJ.mjs} +19 -8
- package/dist/_chunks/ListConfigurationPage-BPvzENJJ.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-CUQxfpjT.js → ListConfigurationPage-ByZAO_9H.js} +19 -9
- package/dist/_chunks/ListConfigurationPage-ByZAO_9H.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BsLiH2-2.js → ListViewPage-BVKBeQAA.js} +108 -74
- package/dist/_chunks/ListViewPage-BVKBeQAA.js.map +1 -0
- package/dist/_chunks/{ListViewPage-C4IvrMgY.mjs → ListViewPage-HljQVnFH.mjs} +109 -74
- package/dist/_chunks/ListViewPage-HljQVnFH.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-BZ-PnGAf.js → NoContentTypePage-BV5zfDxr.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BZ-PnGAf.js.map → NoContentTypePage-BV5zfDxr.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-Djg8nPlj.mjs → NoContentTypePage-BfHaSM-K.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-Djg8nPlj.mjs.map → NoContentTypePage-BfHaSM-K.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DSP7R-hv.mjs → NoPermissionsPage-D6ze2nQL.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DSP7R-hv.mjs.map → NoPermissionsPage-D6ze2nQL.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-_lUqjGW3.js → NoPermissionsPage-vdNpc6jb.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-_lUqjGW3.js.map → NoPermissionsPage-vdNpc6jb.js.map} +1 -1
- package/dist/_chunks/Preview-DEHdENT1.js +305 -0
- package/dist/_chunks/Preview-DEHdENT1.js.map +1 -0
- package/dist/_chunks/Preview-vfWOtPG5.mjs +287 -0
- package/dist/_chunks/Preview-vfWOtPG5.mjs.map +1 -0
- package/dist/_chunks/{Relations-BZr8tL0R.mjs → Relations-B7_hbF0w.mjs} +79 -44
- package/dist/_chunks/Relations-B7_hbF0w.mjs.map +1 -0
- package/dist/_chunks/{Relations-CtELXYIK.js → Relations-DcoOBejP.js} +79 -45
- package/dist/_chunks/Relations-DcoOBejP.js.map +1 -0
- package/dist/_chunks/{en-uOUIxfcQ.js → en-BR48D_RH.js} +35 -15
- package/dist/_chunks/{en-uOUIxfcQ.js.map → en-BR48D_RH.js.map} +1 -1
- package/dist/_chunks/{en-BrCTWlZv.mjs → en-D65uIF6Y.mjs} +35 -15
- package/dist/_chunks/{en-BrCTWlZv.mjs.map → en-D65uIF6Y.mjs.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-C43IbhA_.js} +16 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-C43IbhA_.js.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr-DBseuRuB.mjs} +16 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr-DBseuRuB.mjs.map} +1 -1
- package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-OerGjbAN.js → index-CxLSGwnk.js} +1304 -750
- package/dist/_chunks/index-CxLSGwnk.js.map +1 -0
- package/dist/_chunks/{index-c_5DdJi-.mjs → index-EH8ZtHd5.mjs} +1323 -769
- package/dist/_chunks/index-EH8ZtHd5.mjs.map +1 -0
- package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
- package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
- package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
- package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
- package/dist/_chunks/{layout-oPBiO7RY.mjs → layout-CxDMdJ13.mjs} +23 -10
- package/dist/_chunks/layout-CxDMdJ13.mjs.map +1 -0
- package/dist/_chunks/{layout-Ci7qHlFb.js → layout-DSeUTfMv.js} +23 -11
- package/dist/_chunks/layout-DSeUTfMv.js.map +1 -0
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-BIdWFjdq.mjs → relations-B8_Uu38Q.mjs} +21 -8
- package/dist/_chunks/relations-B8_Uu38Q.mjs.map +1 -0
- package/dist/_chunks/{relations-COBpStiF.js → relations-S5nNKdN3.js} +20 -7
- package/dist/_chunks/relations-S5nNKdN3.js.map +1 -0
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
- package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -1
- package/dist/_chunks/usePrev-DH6iah0A.mjs.map +1 -1
- package/dist/admin/index.js +3 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +6 -4
- package/dist/admin/src/content-manager.d.ts +3 -2
- package/dist/admin/src/exports.d.ts +2 -1
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +49 -1
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +4 -48
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -0
- package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
- package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +19 -20
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/validation.d.ts +4 -1
- package/dist/server/index.js +727 -406
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +728 -406
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +16 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts +3 -3
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +8 -12
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +7 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +16 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +32 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +19 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +12 -10
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +3 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +17 -16
- package/dist/_chunks/EditViewPage-BLsjc5F-.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-C-ukDOB7.js.map +0 -1
- package/dist/_chunks/Field-Bfph5SOd.js.map +0 -1
- package/dist/_chunks/Field-Cs7duwWd.mjs.map +0 -1
- package/dist/_chunks/Form-CPYqIWDG.js.map +0 -1
- package/dist/_chunks/Form-Dg_GS5TQ.mjs.map +0 -1
- package/dist/_chunks/History-DNQkXANT.js.map +0 -1
- package/dist/_chunks/History-wrnHqf09.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-CUQxfpjT.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-DScmJVkW.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BsLiH2-2.js.map +0 -1
- package/dist/_chunks/ListViewPage-C4IvrMgY.mjs.map +0 -1
- package/dist/_chunks/Relations-BZr8tL0R.mjs.map +0 -1
- package/dist/_chunks/Relations-CtELXYIK.js.map +0 -1
- package/dist/_chunks/index-OerGjbAN.js.map +0 -1
- package/dist/_chunks/index-c_5DdJi-.mjs.map +0 -1
- package/dist/_chunks/layout-Ci7qHlFb.js.map +0 -1
- package/dist/_chunks/layout-oPBiO7RY.mjs.map +0 -1
- package/dist/_chunks/relations-BIdWFjdq.mjs.map +0 -1
- package/dist/_chunks/relations-COBpStiF.js.map +0 -1
- package/strapi-server.js +0 -3
@@ -3,23 +3,74 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const React = require("react");
|
4
4
|
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
5
5
|
const designSystem = require("@strapi/design-system");
|
6
|
-
const pipe$1 = require("lodash/fp/pipe");
|
7
|
-
const reactIntl = require("react-intl");
|
8
|
-
const index = require("./index-OerGjbAN.js");
|
9
|
-
const fractionalIndexing = require("fractional-indexing");
|
10
|
-
const Relations = require("./Relations-CtELXYIK.js");
|
11
6
|
const Icons = require("@strapi/icons");
|
7
|
+
const reactIntl = require("react-intl");
|
8
|
+
const index = require("./index-CxLSGwnk.js");
|
12
9
|
const styledComponents = require("styled-components");
|
13
|
-
const ComponentIcon = require("./ComponentIcon-BXdiCGQp.js");
|
14
|
-
const reactDndHtml5Backend = require("react-dnd-html5-backend");
|
15
|
-
const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
|
16
|
-
const objects = require("./objects-gigeqt7s.js");
|
17
10
|
const slate = require("slate");
|
18
11
|
const slateHistory = require("slate-history");
|
19
12
|
const slateReact = require("slate-react");
|
13
|
+
const Prism = require("prismjs");
|
14
|
+
require("prismjs/themes/prism-solarizedlight.css");
|
15
|
+
require("prismjs/components/prism-asmatmel");
|
16
|
+
require("prismjs/components/prism-bash");
|
17
|
+
require("prismjs/components/prism-basic");
|
18
|
+
require("prismjs/components/prism-c");
|
19
|
+
require("prismjs/components/prism-clojure");
|
20
|
+
require("prismjs/components/prism-cobol");
|
21
|
+
require("prismjs/components/prism-cpp");
|
22
|
+
require("prismjs/components/prism-csharp");
|
23
|
+
require("prismjs/components/prism-dart");
|
24
|
+
require("prismjs/components/prism-docker");
|
25
|
+
require("prismjs/components/prism-elixir");
|
26
|
+
require("prismjs/components/prism-erlang");
|
27
|
+
require("prismjs/components/prism-fortran");
|
28
|
+
require("prismjs/components/prism-fsharp");
|
29
|
+
require("prismjs/components/prism-go");
|
30
|
+
require("prismjs/components/prism-graphql");
|
31
|
+
require("prismjs/components/prism-groovy");
|
32
|
+
require("prismjs/components/prism-haskell");
|
33
|
+
require("prismjs/components/prism-haxe");
|
34
|
+
require("prismjs/components/prism-ini");
|
35
|
+
require("prismjs/components/prism-java");
|
36
|
+
require("prismjs/components/prism-javascript");
|
37
|
+
require("prismjs/components/prism-jsx");
|
38
|
+
require("prismjs/components/prism-json");
|
39
|
+
require("prismjs/components/prism-julia");
|
40
|
+
require("prismjs/components/prism-kotlin");
|
41
|
+
require("prismjs/components/prism-latex");
|
42
|
+
require("prismjs/components/prism-lua");
|
43
|
+
require("prismjs/components/prism-markdown");
|
44
|
+
require("prismjs/components/prism-matlab");
|
45
|
+
require("prismjs/components/prism-makefile");
|
46
|
+
require("prismjs/components/prism-objectivec");
|
47
|
+
require("prismjs/components/prism-perl");
|
48
|
+
require("prismjs/components/prism-php");
|
49
|
+
require("prismjs/components/prism-powershell");
|
50
|
+
require("prismjs/components/prism-python");
|
51
|
+
require("prismjs/components/prism-r");
|
52
|
+
require("prismjs/components/prism-ruby");
|
53
|
+
require("prismjs/components/prism-rust");
|
54
|
+
require("prismjs/components/prism-sas");
|
55
|
+
require("prismjs/components/prism-scala");
|
56
|
+
require("prismjs/components/prism-scheme");
|
57
|
+
require("prismjs/components/prism-sql");
|
58
|
+
require("prismjs/components/prism-stata");
|
59
|
+
require("prismjs/components/prism-swift");
|
60
|
+
require("prismjs/components/prism-typescript");
|
61
|
+
require("prismjs/components/prism-tsx");
|
62
|
+
require("prismjs/components/prism-vbnet");
|
63
|
+
require("prismjs/components/prism-yaml");
|
20
64
|
const usePrev = require("./usePrev-B9w_-eYc.js");
|
65
|
+
const useDragAndDrop = require("./useDragAndDrop-BMtgCYzL.js");
|
21
66
|
const Toolbar = require("@radix-ui/react-toolbar");
|
67
|
+
const reactDndHtml5Backend = require("react-dnd-html5-backend");
|
22
68
|
const reactRouterDom = require("react-router-dom");
|
69
|
+
const objects = require("./objects-BcXOv6_9.js");
|
70
|
+
const Relations = require("./Relations-DcoOBejP.js");
|
71
|
+
const pipe$1 = require("lodash/fp/pipe");
|
72
|
+
const ComponentIcon = require("./ComponentIcon-CRbtQEUV.js");
|
73
|
+
const relations = require("./relations-S5nNKdN3.js");
|
23
74
|
const CodeMirror = require("codemirror5");
|
24
75
|
const sanitizeHtml = require("sanitize-html");
|
25
76
|
const highlight_js = require("highlight.js");
|
@@ -37,8 +88,7 @@ require("highlight.js/styles/solarized-dark.css");
|
|
37
88
|
require("codemirror5/addon/display/placeholder");
|
38
89
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
39
90
|
function _interopNamespace(e) {
|
40
|
-
if (e && e.__esModule)
|
41
|
-
return e;
|
91
|
+
if (e && e.__esModule) return e;
|
42
92
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
43
93
|
if (e) {
|
44
94
|
for (const k in e) {
|
@@ -55,8 +105,9 @@ function _interopNamespace(e) {
|
|
55
105
|
return Object.freeze(n);
|
56
106
|
}
|
57
107
|
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
58
|
-
const
|
108
|
+
const Prism__namespace = /* @__PURE__ */ _interopNamespace(Prism);
|
59
109
|
const Toolbar__namespace = /* @__PURE__ */ _interopNamespace(Toolbar);
|
110
|
+
const pipe__default = /* @__PURE__ */ _interopDefault(pipe$1);
|
60
111
|
const CodeMirror__default = /* @__PURE__ */ _interopDefault(CodeMirror);
|
61
112
|
const sanitizeHtml__default = /* @__PURE__ */ _interopDefault(sanitizeHtml);
|
62
113
|
const Markdown__default = /* @__PURE__ */ _interopDefault(Markdown);
|
@@ -69,93 +120,6 @@ const ins__default = /* @__PURE__ */ _interopDefault(ins);
|
|
69
120
|
const mark__default = /* @__PURE__ */ _interopDefault(mark);
|
70
121
|
const sub__default = /* @__PURE__ */ _interopDefault(sub);
|
71
122
|
const sup__default = /* @__PURE__ */ _interopDefault(sup);
|
72
|
-
const BLOCK_LIST_ATTRIBUTE_KEYS = ["__component", "__temp_key__"];
|
73
|
-
const traverseData = (predicate, transform) => (schema, components = {}) => (data = {}) => {
|
74
|
-
const traverse = (datum, attributes) => {
|
75
|
-
return Object.entries(datum).reduce((acc, [key, value]) => {
|
76
|
-
const attribute = attributes[key];
|
77
|
-
if (BLOCK_LIST_ATTRIBUTE_KEYS.includes(key) || value === null || value === void 0) {
|
78
|
-
acc[key] = value;
|
79
|
-
return acc;
|
80
|
-
}
|
81
|
-
if (attribute.type === "component") {
|
82
|
-
if (attribute.repeatable) {
|
83
|
-
const componentValue = predicate(attribute, value) ? transform(value, attribute) : value;
|
84
|
-
acc[key] = componentValue.map(
|
85
|
-
(componentData) => traverse(componentData, components[attribute.component]?.attributes ?? {})
|
86
|
-
);
|
87
|
-
} else {
|
88
|
-
const componentValue = predicate(attribute, value) ? transform(value, attribute) : value;
|
89
|
-
acc[key] = traverse(componentValue, components[attribute.component]?.attributes ?? {});
|
90
|
-
}
|
91
|
-
} else if (attribute.type === "dynamiczone") {
|
92
|
-
const dynamicZoneValue = predicate(attribute, value) ? transform(value, attribute) : value;
|
93
|
-
acc[key] = dynamicZoneValue.map(
|
94
|
-
(componentData) => traverse(componentData, components[componentData.__component]?.attributes ?? {})
|
95
|
-
);
|
96
|
-
} else if (predicate(attribute, value)) {
|
97
|
-
acc[key] = transform(value, attribute);
|
98
|
-
} else {
|
99
|
-
acc[key] = value;
|
100
|
-
}
|
101
|
-
return acc;
|
102
|
-
}, {});
|
103
|
-
};
|
104
|
-
return traverse(data, schema.attributes);
|
105
|
-
};
|
106
|
-
const removeProhibitedFields = (prohibitedFields) => traverseData(
|
107
|
-
(attribute) => prohibitedFields.includes(attribute.type),
|
108
|
-
() => ""
|
109
|
-
);
|
110
|
-
const prepareRelations = traverseData(
|
111
|
-
(attribute) => attribute.type === "relation",
|
112
|
-
() => ({
|
113
|
-
connect: [],
|
114
|
-
disconnect: []
|
115
|
-
})
|
116
|
-
);
|
117
|
-
const prepareTempKeys = traverseData(
|
118
|
-
(attribute) => attribute.type === "component" && attribute.repeatable || attribute.type === "dynamiczone",
|
119
|
-
(data) => {
|
120
|
-
if (Array.isArray(data) && data.length > 0) {
|
121
|
-
const keys = fractionalIndexing.generateNKeysBetween(void 0, void 0, data.length);
|
122
|
-
return data.map((datum, index2) => ({
|
123
|
-
...datum,
|
124
|
-
__temp_key__: keys[index2]
|
125
|
-
}));
|
126
|
-
}
|
127
|
-
return data;
|
128
|
-
}
|
129
|
-
);
|
130
|
-
const removeFieldsThatDontExistOnSchema = (schema) => (data) => {
|
131
|
-
const schemaKeys = Object.keys(schema.attributes);
|
132
|
-
const dataKeys = Object.keys(data);
|
133
|
-
const keysToRemove = dataKeys.filter((key) => !schemaKeys.includes(key));
|
134
|
-
const revisedData = [...keysToRemove, ...index.DOCUMENT_META_FIELDS].reduce((acc, key) => {
|
135
|
-
delete acc[key];
|
136
|
-
return acc;
|
137
|
-
}, structuredClone(data));
|
138
|
-
return revisedData;
|
139
|
-
};
|
140
|
-
const removeNullValues = (data) => {
|
141
|
-
return Object.entries(data).reduce((acc, [key, value]) => {
|
142
|
-
if (value === null) {
|
143
|
-
return acc;
|
144
|
-
}
|
145
|
-
acc[key] = value;
|
146
|
-
return acc;
|
147
|
-
}, {});
|
148
|
-
};
|
149
|
-
const transformDocument = (schema, components = {}) => (document2) => {
|
150
|
-
const transformations = pipe__default.default(
|
151
|
-
removeFieldsThatDontExistOnSchema(schema),
|
152
|
-
removeProhibitedFields(["password"])(schema, components),
|
153
|
-
removeNullValues,
|
154
|
-
prepareRelations(schema, components),
|
155
|
-
prepareTempKeys(schema, components)
|
156
|
-
);
|
157
|
-
return transformations(document2);
|
158
|
-
};
|
159
123
|
const componentStore = /* @__PURE__ */ new Map();
|
160
124
|
const useLazyComponents = (componentUids = []) => {
|
161
125
|
const [lazyComponentStore, setLazyComponentStore] = React.useState(Object.fromEntries(componentStore));
|
@@ -197,7 +161,8 @@ const useLazyComponents = (componentUids = []) => {
|
|
197
161
|
const codeLanguages = [
|
198
162
|
{
|
199
163
|
value: "asm",
|
200
|
-
label: "Assembly"
|
164
|
+
label: "Assembly",
|
165
|
+
decorate: "asmatmel"
|
201
166
|
},
|
202
167
|
{
|
203
168
|
value: "bash",
|
@@ -233,7 +198,8 @@ const codeLanguages = [
|
|
233
198
|
},
|
234
199
|
{
|
235
200
|
value: "dockerfile",
|
236
|
-
label: "Dockerfile"
|
201
|
+
label: "Dockerfile",
|
202
|
+
decorate: "docker"
|
237
203
|
},
|
238
204
|
{
|
239
205
|
value: "elixir",
|
@@ -389,7 +355,8 @@ const codeLanguages = [
|
|
389
355
|
},
|
390
356
|
{
|
391
357
|
value: "typescript",
|
392
|
-
label: "TypeScript"
|
358
|
+
label: "TypeScript",
|
359
|
+
decorate: "ts"
|
393
360
|
},
|
394
361
|
{
|
395
362
|
value: "tsx",
|
@@ -405,7 +372,8 @@ const codeLanguages = [
|
|
405
372
|
},
|
406
373
|
{
|
407
374
|
value: "yaml",
|
408
|
-
label: "YAML"
|
375
|
+
label: "YAML",
|
376
|
+
decorate: "yml"
|
409
377
|
}
|
410
378
|
];
|
411
379
|
const baseHandleConvert = (editor, attributesToSet) => {
|
@@ -471,6 +439,29 @@ const pressEnterTwiceToExit = (editor) => {
|
|
471
439
|
});
|
472
440
|
}
|
473
441
|
};
|
442
|
+
const decorateCode = ([node, path]) => {
|
443
|
+
const ranges = [];
|
444
|
+
if (!slate.Element.isElement(node) || node.type !== "code") return ranges;
|
445
|
+
const text = slate.Node.string(node);
|
446
|
+
const language = codeLanguages.find((lang) => lang.value === node.language);
|
447
|
+
const decorateKey = language?.decorate ?? language?.value;
|
448
|
+
const selectedLanguage = Prism__namespace.languages[decorateKey || "plaintext"];
|
449
|
+
const tokens = Prism__namespace.tokenize(text, selectedLanguage);
|
450
|
+
let start = 0;
|
451
|
+
for (const token of tokens) {
|
452
|
+
const length = token.length;
|
453
|
+
const end = start + length;
|
454
|
+
if (typeof token !== "string") {
|
455
|
+
ranges.push({
|
456
|
+
anchor: { path, offset: start },
|
457
|
+
focus: { path, offset: end },
|
458
|
+
className: `token ${token.type}`
|
459
|
+
});
|
460
|
+
}
|
461
|
+
start = end;
|
462
|
+
}
|
463
|
+
return ranges;
|
464
|
+
};
|
474
465
|
const CodeBlock = styledComponents.styled.pre`
|
475
466
|
border-radius: ${({ theme }) => theme.borderRadius};
|
476
467
|
background-color: ${({ theme }) => theme.colors.neutral100};
|
@@ -542,7 +533,7 @@ const CodeEditor = (props) => {
|
|
542
533
|
const codeBlocks = {
|
543
534
|
code: {
|
544
535
|
renderElement: (props) => /* @__PURE__ */ jsxRuntime.jsx(CodeEditor, { ...props }),
|
545
|
-
icon: Icons.
|
536
|
+
icon: Icons.CodeBlock,
|
546
537
|
label: {
|
547
538
|
id: "components.Blocks.blocks.code",
|
548
539
|
defaultMessage: "Code block"
|
@@ -555,8 +546,7 @@ const codeBlocks = {
|
|
555
546
|
handleEnterKey(editor) {
|
556
547
|
pressEnterTwiceToExit(editor);
|
557
548
|
},
|
558
|
-
snippets: ["```"]
|
559
|
-
dragHandleTopMargin: "10px"
|
549
|
+
snippets: ["```"]
|
560
550
|
}
|
561
551
|
};
|
562
552
|
const H1 = styledComponents.styled(designSystem.Typography).attrs({ tag: "h1" })`
|
@@ -731,8 +721,7 @@ const ImageDialog = () => {
|
|
731
721
|
const [isOpen, setIsOpen] = React__namespace.useState(true);
|
732
722
|
const { editor } = useBlocksEditorContext("ImageDialog");
|
733
723
|
const components = strapiAdmin.useStrapiApp("ImageDialog", (state) => state.components);
|
734
|
-
if (!components || !isOpen)
|
735
|
-
return null;
|
724
|
+
if (!components || !isOpen) return null;
|
736
725
|
const MediaLibraryDialog = components["media-library"];
|
737
726
|
const insertImages = (images) => {
|
738
727
|
slate.Transforms.unwrapNodes(editor, {
|
@@ -741,14 +730,12 @@ const ImageDialog = () => {
|
|
741
730
|
});
|
742
731
|
const nodeEntryBeingReplaced = slate.Editor.above(editor, {
|
743
732
|
match(node) {
|
744
|
-
if (slate.Editor.isEditor(node))
|
745
|
-
return false;
|
733
|
+
if (slate.Editor.isEditor(node)) return false;
|
746
734
|
const isInlineNode = ["text", "link"].includes(node.type);
|
747
735
|
return !isInlineNode;
|
748
736
|
}
|
749
737
|
});
|
750
|
-
if (!nodeEntryBeingReplaced)
|
751
|
-
return;
|
738
|
+
if (!nodeEntryBeingReplaced) return;
|
752
739
|
const [, pathToInsert] = nodeEntryBeingReplaced;
|
753
740
|
slate.Transforms.removeNodes(editor);
|
754
741
|
const nodesToInsert = images.map((image) => {
|
@@ -926,8 +913,7 @@ const LinkContent = React__namespace.forwardRef(
|
|
926
913
|
slateReact.ReactEditor.focus(editor);
|
927
914
|
};
|
928
915
|
React__namespace.useEffect(() => {
|
929
|
-
if (popoverOpen)
|
930
|
-
linkInputRef.current?.focus();
|
916
|
+
if (popoverOpen) linkInputRef.current?.focus();
|
931
917
|
}, [popoverOpen]);
|
932
918
|
const inputNotDirty = !linkText || !linkUrl || link.url && link.url === linkUrl && elementText && elementText === linkText;
|
933
919
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { open: popoverOpen, children: [
|
@@ -997,11 +983,11 @@ const LinkContent = React__namespace.forwardRef(
|
|
997
983
|
),
|
998
984
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
999
985
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", onClick: handleClose, children: formatMessage({
|
1000
|
-
id: "
|
986
|
+
id: "global.cancel",
|
1001
987
|
defaultMessage: "Cancel"
|
1002
988
|
}) }),
|
1003
989
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { disabled: Boolean(inputNotDirty) || isSaveDisabled, onClick: handleSave, children: formatMessage({
|
1004
|
-
id: "
|
990
|
+
id: "global.save",
|
1005
991
|
defaultMessage: "Save"
|
1006
992
|
}) })
|
1007
993
|
] })
|
@@ -1082,8 +1068,7 @@ const isText$1 = (node) => {
|
|
1082
1068
|
return slate.Node.isNode(node) && !slate.Editor.isEditor(node) && node.type === "text";
|
1083
1069
|
};
|
1084
1070
|
const handleBackspaceKeyOnList = (editor, event) => {
|
1085
|
-
if (!editor.selection)
|
1086
|
-
return;
|
1071
|
+
if (!editor.selection) return;
|
1087
1072
|
const [currentListItem, currentListItemPath] = slate.Editor.parent(editor, editor.selection.anchor);
|
1088
1073
|
const [currentList, currentListPath] = slate.Editor.parent(editor, currentListItemPath);
|
1089
1074
|
const isListEmpty = currentList.children.length === 1 && isText$1(currentListItem.children[0]) && currentListItem.children[0].text === "";
|
@@ -1192,8 +1177,7 @@ const handleEnterKeyOnList = (editor) => {
|
|
1192
1177
|
};
|
1193
1178
|
const handleConvertToList = (editor, format) => {
|
1194
1179
|
const convertedPath = baseHandleConvert(editor, { type: "list-item" });
|
1195
|
-
if (!convertedPath)
|
1196
|
-
return;
|
1180
|
+
if (!convertedPath) return;
|
1197
1181
|
slate.Transforms.wrapNodes(editor, { type: "list", format, children: [] }, { at: convertedPath });
|
1198
1182
|
};
|
1199
1183
|
const handleTabOnList = (editor) => {
|
@@ -1205,8 +1189,7 @@ const handleTabOnList = (editor) => {
|
|
1205
1189
|
}
|
1206
1190
|
const [currentListItem, currentListItemPath] = currentListItemEntry;
|
1207
1191
|
const [currentList] = slate.Editor.parent(editor, currentListItemPath);
|
1208
|
-
if (currentListItem === currentList.children[0])
|
1209
|
-
return;
|
1192
|
+
if (currentListItem === currentList.children[0]) return;
|
1210
1193
|
const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);
|
1211
1194
|
const previousNode = currentList.children[currentListItemIndex - 1];
|
1212
1195
|
if (previousNode.type === "list") {
|
@@ -1342,13 +1325,13 @@ const quoteBlocks = {
|
|
1342
1325
|
handleEnterKey(editor) {
|
1343
1326
|
pressEnterTwiceToExit(editor);
|
1344
1327
|
},
|
1345
|
-
snippets: [">"]
|
1346
|
-
dragHandleTopMargin: "6px"
|
1328
|
+
snippets: [">"]
|
1347
1329
|
}
|
1348
1330
|
};
|
1349
1331
|
const ToolbarWrapper = styledComponents.styled(designSystem.Flex)`
|
1350
1332
|
&[aria-disabled='true'] {
|
1351
1333
|
cursor: not-allowed;
|
1334
|
+
background: ${({ theme }) => theme.colors.neutral150};
|
1352
1335
|
}
|
1353
1336
|
`;
|
1354
1337
|
const Separator = styledComponents.styled(Toolbar__namespace.Separator)`
|
@@ -1359,7 +1342,7 @@ const Separator = styledComponents.styled(Toolbar__namespace.Separator)`
|
|
1359
1342
|
const FlexButton = styledComponents.styled(designSystem.Flex)`
|
1360
1343
|
// Inherit the not-allowed cursor from ToolbarWrapper when disabled
|
1361
1344
|
&[aria-disabled] {
|
1362
|
-
cursor:
|
1345
|
+
cursor: not-allowed;
|
1363
1346
|
}
|
1364
1347
|
|
1365
1348
|
&[aria-disabled='false'] {
|
@@ -1441,7 +1424,7 @@ const ToolbarButton = ({
|
|
1441
1424
|
width: 7,
|
1442
1425
|
height: 7,
|
1443
1426
|
hasRadius: true,
|
1444
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icon, {
|
1427
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { fill: disabled ? "neutral300" : enabledColor })
|
1445
1428
|
}
|
1446
1429
|
)
|
1447
1430
|
}
|
@@ -1573,8 +1556,7 @@ const isListNode = (node) => {
|
|
1573
1556
|
const ListButton = ({ block, format }) => {
|
1574
1557
|
const { editor, disabled, blocks } = useBlocksEditorContext("ListButton");
|
1575
1558
|
const isListActive = () => {
|
1576
|
-
if (!editor.selection)
|
1577
|
-
return false;
|
1559
|
+
if (!editor.selection) return false;
|
1578
1560
|
const currentListEntry = slate.Editor.above(editor, {
|
1579
1561
|
match: (node) => !slate.Editor.isEditor(node) && node.type === "list",
|
1580
1562
|
at: editor.selection.anchor
|
@@ -1648,8 +1630,7 @@ const LinkButton = ({ disabled }) => {
|
|
1648
1630
|
const { editor } = useBlocksEditorContext("LinkButton");
|
1649
1631
|
const isLinkActive = () => {
|
1650
1632
|
const { selection } = editor;
|
1651
|
-
if (!selection)
|
1652
|
-
return false;
|
1633
|
+
if (!selection) return false;
|
1653
1634
|
const [match] = Array.from(
|
1654
1635
|
slate.Editor.nodes(editor, {
|
1655
1636
|
at: slate.Editor.unhangRange(editor, selection),
|
@@ -1713,7 +1694,7 @@ const BlocksToolbar = () => {
|
|
1713
1694
|
return false;
|
1714
1695
|
};
|
1715
1696
|
const isButtonDisabled = checkButtonDisabled();
|
1716
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Toolbar__namespace.Root, { "aria-disabled": disabled, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarWrapper, { gap: 2, padding: 2, children: [
|
1697
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Toolbar__namespace.Root, { "aria-disabled": disabled, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarWrapper, { gap: 2, padding: 2, width: "100%", children: [
|
1717
1698
|
/* @__PURE__ */ jsxRuntime.jsx(BlocksDropdown, {}),
|
1718
1699
|
/* @__PURE__ */ jsxRuntime.jsx(Separator, {}),
|
1719
1700
|
/* @__PURE__ */ jsxRuntime.jsx(Toolbar__namespace.ToggleGroup, { type: "multiple", asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 1, children: [
|
@@ -1783,33 +1764,36 @@ const DragItem = styledComponents.styled(designSystem.Flex)`
|
|
1783
1764
|
}
|
1784
1765
|
`;
|
1785
1766
|
const DragIconButton = styledComponents.styled(designSystem.IconButton)`
|
1767
|
+
user-select: none;
|
1786
1768
|
display: flex;
|
1787
1769
|
align-items: center;
|
1788
1770
|
justify-content: center;
|
1771
|
+
border: none;
|
1789
1772
|
border-radius: ${({ theme }) => theme.borderRadius};
|
1790
|
-
|
1791
|
-
|
1773
|
+
padding-left: ${({ theme }) => theme.spaces[0]};
|
1774
|
+
padding-right: ${({ theme }) => theme.spaces[0]};
|
1775
|
+
padding-top: ${({ theme }) => theme.spaces[1]};
|
1776
|
+
padding-bottom: ${({ theme }) => theme.spaces[1]};
|
1792
1777
|
visibility: hidden;
|
1793
1778
|
cursor: grab;
|
1794
1779
|
opacity: inherit;
|
1795
1780
|
margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};
|
1796
1781
|
|
1797
1782
|
&:hover {
|
1798
|
-
background: ${({ theme }) => theme.colors.
|
1783
|
+
background: ${({ theme }) => theme.colors.neutral100};
|
1799
1784
|
}
|
1800
1785
|
&:active {
|
1801
1786
|
cursor: grabbing;
|
1787
|
+
background: ${({ theme }) => theme.colors.neutral150};
|
1802
1788
|
}
|
1803
1789
|
&[aria-disabled='true'] {
|
1804
|
-
|
1805
|
-
background: transparent;
|
1790
|
+
visibility: hidden;
|
1806
1791
|
}
|
1807
1792
|
svg {
|
1808
|
-
height: auto;
|
1809
1793
|
min-width: ${({ theme }) => theme.spaces[3]};
|
1810
1794
|
|
1811
1795
|
path {
|
1812
|
-
fill: ${({ theme }) => theme.colors.
|
1796
|
+
fill: ${({ theme }) => theme.colors.neutral500};
|
1813
1797
|
}
|
1814
1798
|
}
|
1815
1799
|
`;
|
@@ -1854,8 +1838,7 @@ const DragAndDropElement = ({
|
|
1854
1838
|
displayedValue: children
|
1855
1839
|
},
|
1856
1840
|
onDropItem(currentIndex, newIndex) {
|
1857
|
-
if (newIndex)
|
1858
|
-
handleMoveBlock(newIndex, currentIndex);
|
1841
|
+
if (newIndex) handleMoveBlock(newIndex, currentIndex);
|
1859
1842
|
}
|
1860
1843
|
});
|
1861
1844
|
const composedBoxRefs = designSystem.useComposedRefs(blockRef, dropRef);
|
@@ -1911,6 +1894,7 @@ const DragAndDropElement = ({
|
|
1911
1894
|
DragIconButton,
|
1912
1895
|
{
|
1913
1896
|
tag: "div",
|
1897
|
+
contentEditable: false,
|
1914
1898
|
role: "button",
|
1915
1899
|
tabIndex: 0,
|
1916
1900
|
withTooltip: false,
|
@@ -1960,7 +1944,7 @@ const baseRenderLeaf = (props, modifiers2) => {
|
|
1960
1944
|
}
|
1961
1945
|
return currentChildren;
|
1962
1946
|
}, props.children);
|
1963
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { ...props.attributes, children: wrappedChildren });
|
1947
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { ...props.attributes, className: props.leaf.className, children: wrappedChildren });
|
1964
1948
|
};
|
1965
1949
|
const baseRenderElement = ({
|
1966
1950
|
props,
|
@@ -1998,8 +1982,7 @@ const BlocksContent = ({ placeholder, ariaLabelId }) => {
|
|
1998
1982
|
[modifiers2]
|
1999
1983
|
);
|
2000
1984
|
const handleMoveBlocks = (editor2, event) => {
|
2001
|
-
if (!editor2.selection)
|
2002
|
-
return;
|
1985
|
+
if (!editor2.selection) return;
|
2003
1986
|
const start = slate.Range.start(editor2.selection);
|
2004
1987
|
const currentIndex = [start.path[0]];
|
2005
1988
|
let newIndexPosition = 0;
|
@@ -2136,8 +2119,7 @@ const BlocksContent = ({ placeholder, ariaLabelId }) => {
|
|
2136
2119
|
}
|
2137
2120
|
};
|
2138
2121
|
const handleScrollSelectionIntoView = () => {
|
2139
|
-
if (!editor.selection)
|
2140
|
-
return;
|
2122
|
+
if (!editor.selection) return;
|
2141
2123
|
const domRange = slateReact.ReactEditor.toDOMRange(editor, editor.selection);
|
2142
2124
|
const domRect = domRange.getBoundingClientRect();
|
2143
2125
|
const blocksInput = blocksRef.current;
|
@@ -2164,7 +2146,7 @@ const BlocksContent = ({ placeholder, ariaLabelId }) => {
|
|
2164
2146
|
background: "neutral0",
|
2165
2147
|
color: "neutral800",
|
2166
2148
|
lineHeight: 6,
|
2167
|
-
paddingRight:
|
2149
|
+
paddingRight: 7,
|
2168
2150
|
paddingTop: 6,
|
2169
2151
|
paddingBottom: 3,
|
2170
2152
|
children: [
|
@@ -2175,6 +2157,7 @@ const BlocksContent = ({ placeholder, ariaLabelId }) => {
|
|
2175
2157
|
readOnly: disabled,
|
2176
2158
|
placeholder,
|
2177
2159
|
isExpandedMode,
|
2160
|
+
decorate: decorateCode,
|
2178
2161
|
renderElement,
|
2179
2162
|
renderLeaf,
|
2180
2163
|
onKeyDown: handleKeyDown,
|
@@ -2331,8 +2314,7 @@ const InlineCode = styledComponents.styled.code`
|
|
2331
2314
|
`;
|
2332
2315
|
const baseCheckIsActive = (editor, name2) => {
|
2333
2316
|
const marks = slate.Editor.marks(editor);
|
2334
|
-
if (!marks)
|
2335
|
-
return false;
|
2317
|
+
if (!marks) return false;
|
2336
2318
|
return Boolean(marks[name2]);
|
2337
2319
|
};
|
2338
2320
|
const baseHandleToggle = (editor, name2) => {
|
@@ -2498,6 +2480,7 @@ const ExpandIconButton = styledComponents.styled(designSystem.IconButton)`
|
|
2498
2480
|
position: absolute;
|
2499
2481
|
bottom: 1.2rem;
|
2500
2482
|
right: 1.2rem;
|
2483
|
+
box-shadow: ${({ theme }) => theme.shadows.filterShadow};
|
2501
2484
|
`;
|
2502
2485
|
function useResetKey(value) {
|
2503
2486
|
const slateUpdatesCount = React__namespace.useRef(0);
|
@@ -2629,26 +2612,6 @@ const BlocksInput = React__namespace.forwardRef(
|
|
2629
2612
|
}
|
2630
2613
|
);
|
2631
2614
|
const MemoizedBlocksInput = React__namespace.memo(BlocksInput);
|
2632
|
-
const createDefaultForm = (contentType, components = {}) => {
|
2633
|
-
const traverseSchema = (attributes) => {
|
2634
|
-
return Object.entries(attributes).reduce((acc, [key, attribute]) => {
|
2635
|
-
if ("default" in attribute) {
|
2636
|
-
acc[key] = attribute.default;
|
2637
|
-
} else if (attribute.type === "component" && attribute.required) {
|
2638
|
-
const defaultComponentForm = traverseSchema(components[attribute.component].attributes);
|
2639
|
-
if (attribute.repeatable) {
|
2640
|
-
acc[key] = attribute.min ? [...Array(attribute.min).fill(defaultComponentForm)] : [];
|
2641
|
-
} else {
|
2642
|
-
acc[key] = defaultComponentForm;
|
2643
|
-
}
|
2644
|
-
} else if (attribute.type === "dynamiczone" && attribute.required) {
|
2645
|
-
acc[key] = [];
|
2646
|
-
}
|
2647
|
-
return acc;
|
2648
|
-
}, {});
|
2649
|
-
};
|
2650
|
-
return traverseSchema(contentType.attributes);
|
2651
|
-
};
|
2652
2615
|
const Initializer = ({ disabled, name: name2, onClick }) => {
|
2653
2616
|
const { formatMessage } = reactIntl.useIntl();
|
2654
2617
|
const field = strapiAdmin.useField(name2);
|
@@ -2656,7 +2619,7 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
|
|
2656
2619
|
designSystem.Box,
|
2657
2620
|
{
|
2658
2621
|
tag: "button",
|
2659
|
-
background: "neutral100",
|
2622
|
+
background: disabled ? "neutral150" : "neutral100",
|
2660
2623
|
borderColor: field.error ? "danger600" : "neutral200",
|
2661
2624
|
hasRadius: true,
|
2662
2625
|
disabled,
|
@@ -2664,109 +2627,470 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
|
|
2664
2627
|
paddingTop: 9,
|
2665
2628
|
paddingBottom: 9,
|
2666
2629
|
type: "button",
|
2630
|
+
style: { cursor: disabled ? "not-allowed" : "pointer" },
|
2667
2631
|
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
|
2668
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
2669
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2632
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", color: disabled ? "neutral500" : "primary600", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.PlusCircle, { width: "3.2rem", height: "3.2rem" }) }),
|
2633
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
2634
|
+
designSystem.Typography,
|
2635
|
+
{
|
2636
|
+
textColor: disabled ? "neutral600" : "primary600",
|
2637
|
+
variant: "pi",
|
2638
|
+
fontWeight: "bold",
|
2639
|
+
children: formatMessage({
|
2640
|
+
id: index.getTranslation("components.empty-repeatable"),
|
2641
|
+
defaultMessage: "No entry yet. Click to add one."
|
2642
|
+
})
|
2643
|
+
}
|
2644
|
+
) })
|
2673
2645
|
] })
|
2674
2646
|
}
|
2675
2647
|
) });
|
2676
2648
|
};
|
2677
|
-
const
|
2678
|
-
|
2679
|
-
|
2649
|
+
const AddComponentButton = ({
|
2650
|
+
hasError,
|
2651
|
+
isDisabled,
|
2652
|
+
isOpen,
|
2653
|
+
children,
|
2654
|
+
onClick
|
2655
|
+
}) => {
|
2656
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
2657
|
+
StyledButton,
|
2658
|
+
{
|
2659
|
+
type: "button",
|
2660
|
+
onClick,
|
2661
|
+
disabled: isDisabled,
|
2662
|
+
background: "neutral0",
|
2663
|
+
style: { cursor: isDisabled ? "not-allowed" : "pointer" },
|
2664
|
+
variant: "tertiary",
|
2665
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { tag: "span", gap: 2, children: [
|
2666
|
+
/* @__PURE__ */ jsxRuntime.jsx(StyledAddIcon, { "aria-hidden": true, $isOpen: isOpen, $hasError: hasError && !isOpen }),
|
2667
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
2668
|
+
designSystem.Typography,
|
2669
|
+
{
|
2670
|
+
variant: "pi",
|
2671
|
+
fontWeight: "bold",
|
2672
|
+
textColor: hasError && !isOpen ? "danger600" : "neutral600",
|
2673
|
+
children
|
2674
|
+
}
|
2675
|
+
)
|
2676
|
+
] })
|
2677
|
+
}
|
2678
|
+
);
|
2679
|
+
};
|
2680
|
+
const StyledAddIcon = styledComponents.styled(Icons.PlusCircle)`
|
2681
|
+
height: ${({ theme }) => theme.spaces[6]};
|
2682
|
+
width: ${({ theme }) => theme.spaces[6]};
|
2683
|
+
transform: ${({ $isOpen }) => $isOpen ? "rotate(45deg)" : "rotate(0deg)"};
|
2684
|
+
|
2680
2685
|
> circle {
|
2681
|
-
fill: ${({ theme }) => theme.colors.
|
2686
|
+
fill: ${({ theme, $hasError }) => $hasError ? theme.colors.danger200 : theme.colors.neutral150};
|
2682
2687
|
}
|
2683
2688
|
> path {
|
2684
|
-
fill: ${({ theme }) => theme.colors.
|
2689
|
+
fill: ${({ theme, $hasError }) => $hasError ? theme.colors.danger600 : theme.colors.neutral500};
|
2685
2690
|
}
|
2686
2691
|
`;
|
2687
|
-
const
|
2688
|
-
|
2689
|
-
|
2690
|
-
|
2691
|
-
|
2692
|
+
const StyledButton = styledComponents.styled(designSystem.Button)`
|
2693
|
+
padding-left: ${({ theme }) => theme.spaces[3]};
|
2694
|
+
border-radius: 26px;
|
2695
|
+
box-shadow: ${({ theme }) => theme.shadows.filterShadow};
|
2696
|
+
height: 5rem;
|
2697
|
+
`;
|
2698
|
+
const ComponentCategory = ({
|
2699
|
+
category,
|
2700
|
+
components = [],
|
2701
|
+
variant = "primary",
|
2702
|
+
onAddComponent
|
2692
2703
|
}) => {
|
2693
|
-
const {
|
2694
|
-
|
2695
|
-
|
2696
|
-
|
2704
|
+
const { formatMessage } = reactIntl.useIntl();
|
2705
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: category, children: [
|
2706
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { variant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { children: formatMessage({ id: category, defaultMessage: category }) }) }),
|
2707
|
+
/* @__PURE__ */ jsxRuntime.jsx(ResponsiveAccordionContent, { children: /* @__PURE__ */ jsxRuntime.jsx(Grid, { paddingTop: 4, paddingBottom: 4, paddingLeft: 3, paddingRight: 3, children: components.map(({ uid, displayName, icon }) => /* @__PURE__ */ jsxRuntime.jsx(
|
2708
|
+
ComponentBox,
|
2709
|
+
{
|
2710
|
+
tag: "button",
|
2711
|
+
type: "button",
|
2712
|
+
background: "neutral100",
|
2713
|
+
justifyContent: "center",
|
2714
|
+
onClick: onAddComponent(uid),
|
2715
|
+
hasRadius: true,
|
2716
|
+
height: "8.4rem",
|
2717
|
+
shrink: 0,
|
2718
|
+
borderColor: "neutral200",
|
2719
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 1, alignItems: "center", justifyContent: "center", children: [
|
2720
|
+
/* @__PURE__ */ jsxRuntime.jsx(ComponentIcon.ComponentIcon, { color: "currentColor", background: "primary200", icon }),
|
2721
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", children: displayName })
|
2722
|
+
] })
|
2723
|
+
},
|
2724
|
+
uid
|
2725
|
+
)) }) })
|
2726
|
+
] });
|
2727
|
+
};
|
2728
|
+
const ResponsiveAccordionContent = styledComponents.styled(designSystem.Accordion.Content)`
|
2729
|
+
container-type: inline-size;
|
2730
|
+
`;
|
2731
|
+
const Grid = styledComponents.styled(designSystem.Box)`
|
2732
|
+
display: grid;
|
2733
|
+
grid-template-columns: repeat(auto-fill, 100%);
|
2734
|
+
grid-gap: ${({ theme }) => theme.spaces[1]};
|
2735
|
+
|
2736
|
+
@container (min-width: ${() => RESPONSIVE_CONTAINER_BREAKPOINTS.sm}) {
|
2737
|
+
grid-template-columns: repeat(auto-fill, 14rem);
|
2738
|
+
}
|
2739
|
+
`;
|
2740
|
+
const ComponentBox = styledComponents.styled(designSystem.Flex)`
|
2741
|
+
color: ${({ theme }) => theme.colors.neutral600};
|
2742
|
+
cursor: pointer;
|
2743
|
+
|
2744
|
+
@media (prefers-reduced-motion: no-preference) {
|
2745
|
+
transition: color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};
|
2746
|
+
}
|
2747
|
+
|
2748
|
+
&:focus,
|
2749
|
+
&:hover {
|
2750
|
+
border: 1px solid ${({ theme }) => theme.colors.primary200};
|
2751
|
+
background: ${({ theme }) => theme.colors.primary100};
|
2752
|
+
color: ${({ theme }) => theme.colors.primary600};
|
2753
|
+
}
|
2754
|
+
`;
|
2755
|
+
const ComponentPicker = ({
|
2756
|
+
dynamicComponentsByCategory = {},
|
2757
|
+
isOpen,
|
2758
|
+
onClickAddComponent
|
2759
|
+
}) => {
|
2760
|
+
const { formatMessage } = reactIntl.useIntl();
|
2761
|
+
const handleAddComponentToDz = (componentUid) => () => {
|
2762
|
+
onClickAddComponent(componentUid);
|
2763
|
+
};
|
2764
|
+
if (!isOpen) {
|
2765
|
+
return null;
|
2766
|
+
}
|
2767
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
2697
2768
|
designSystem.Box,
|
2698
2769
|
{
|
2699
|
-
background: "neutral100",
|
2700
|
-
paddingLeft: 6,
|
2701
|
-
paddingRight: 6,
|
2702
2770
|
paddingTop: 6,
|
2703
2771
|
paddingBottom: 6,
|
2704
|
-
|
2705
|
-
|
2706
|
-
|
2707
|
-
|
2708
|
-
|
2709
|
-
|
2710
|
-
|
2711
|
-
|
2772
|
+
paddingLeft: 5,
|
2773
|
+
paddingRight: 5,
|
2774
|
+
background: "neutral0",
|
2775
|
+
shadow: "tableShadow",
|
2776
|
+
borderColor: "neutral150",
|
2777
|
+
hasRadius: true,
|
2778
|
+
children: [
|
2779
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", textColor: "neutral600", children: formatMessage({
|
2780
|
+
id: index.getTranslation("components.DynamicZone.ComponentPicker-label"),
|
2781
|
+
defaultMessage: "Pick one component"
|
2782
|
+
}) }) }),
|
2783
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 2, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { defaultValue: Object.keys(dynamicComponentsByCategory)[0], children: Object.entries(dynamicComponentsByCategory).map(([category, components], index2) => /* @__PURE__ */ jsxRuntime.jsx(
|
2784
|
+
ComponentCategory,
|
2785
|
+
{
|
2786
|
+
category,
|
2787
|
+
components,
|
2788
|
+
onAddComponent: handleAddComponentToDz,
|
2789
|
+
variant: index2 % 2 === 1 ? "primary" : "secondary"
|
2790
|
+
},
|
2791
|
+
category
|
2792
|
+
)) }) })
|
2793
|
+
]
|
2712
2794
|
}
|
2713
|
-
)
|
2795
|
+
);
|
2714
2796
|
};
|
2715
|
-
const
|
2716
|
-
|
2797
|
+
const DynamicComponent = ({
|
2798
|
+
componentUid,
|
2717
2799
|
disabled,
|
2800
|
+
index: index$1,
|
2718
2801
|
name: name2,
|
2719
|
-
|
2720
|
-
|
2721
|
-
|
2802
|
+
onRemoveComponentClick,
|
2803
|
+
onMoveComponent,
|
2804
|
+
onGrabItem,
|
2805
|
+
onDropItem,
|
2806
|
+
onCancel,
|
2807
|
+
dynamicComponentsByCategory = {},
|
2808
|
+
onAddComponent,
|
2809
|
+
children
|
2722
2810
|
}) => {
|
2723
|
-
const { toggleNotification } = strapiAdmin.useNotification();
|
2724
2811
|
const { formatMessage } = reactIntl.useIntl();
|
2725
|
-
const
|
2726
|
-
const
|
2727
|
-
|
2728
|
-
|
2729
|
-
const
|
2730
|
-
|
2731
|
-
|
2732
|
-
|
2733
|
-
|
2734
|
-
|
2735
|
-
|
2736
|
-
|
2737
|
-
|
2738
|
-
|
2739
|
-
|
2740
|
-
|
2741
|
-
|
2742
|
-
|
2743
|
-
|
2744
|
-
|
2745
|
-
|
2746
|
-
|
2747
|
-
|
2748
|
-
|
2749
|
-
|
2750
|
-
|
2751
|
-
|
2752
|
-
|
2753
|
-
|
2754
|
-
|
2812
|
+
const formValues = strapiAdmin.useForm("DynamicComponent", (state) => state.values);
|
2813
|
+
const {
|
2814
|
+
edit: { components }
|
2815
|
+
} = index.useDocLayout();
|
2816
|
+
const title = React__namespace.useMemo(() => {
|
2817
|
+
const { mainField } = components[componentUid]?.settings ?? { mainField: "id" };
|
2818
|
+
const mainFieldValue = objects.getIn(formValues, `${name2}.${index$1}.${mainField}`);
|
2819
|
+
const displayedValue = mainField === "id" || !mainFieldValue ? "" : String(mainFieldValue).trim();
|
2820
|
+
const mainValue = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;
|
2821
|
+
return mainValue;
|
2822
|
+
}, [componentUid, components, formValues, name2, index$1]);
|
2823
|
+
const { icon, displayName } = React__namespace.useMemo(() => {
|
2824
|
+
const [category] = componentUid.split(".");
|
2825
|
+
const { icon: icon2, displayName: displayName2 } = (dynamicComponentsByCategory[category] ?? []).find(
|
2826
|
+
(component) => component.uid === componentUid
|
2827
|
+
) ?? { icon: null, displayName: null };
|
2828
|
+
return { icon: icon2, displayName: displayName2 };
|
2829
|
+
}, [componentUid, dynamicComponentsByCategory]);
|
2830
|
+
const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop.useDragAndDrop(!disabled, {
|
2831
|
+
type: `${useDragAndDrop.ItemTypes.DYNAMIC_ZONE}_${name2}`,
|
2832
|
+
index: index$1,
|
2833
|
+
item: {
|
2834
|
+
index: index$1,
|
2835
|
+
displayedValue: `${displayName} ${title}`,
|
2836
|
+
icon
|
2837
|
+
},
|
2838
|
+
onMoveItem: onMoveComponent,
|
2839
|
+
onDropItem,
|
2840
|
+
onGrabItem,
|
2841
|
+
onCancel
|
2842
|
+
});
|
2755
2843
|
React__namespace.useEffect(() => {
|
2756
|
-
|
2757
|
-
|
2844
|
+
dragPreviewRef(reactDndHtml5Backend.getEmptyImage(), { captureDraggingState: false });
|
2845
|
+
}, [dragPreviewRef, index$1]);
|
2846
|
+
const accordionValue = React__namespace.useId();
|
2847
|
+
const { value = [], rawError } = strapiAdmin.useField(`${name2}.${index$1}`);
|
2848
|
+
const [collapseToOpen, setCollapseToOpen] = React__namespace.useState("");
|
2849
|
+
React__namespace.useEffect(() => {
|
2850
|
+
if (rawError && value) {
|
2851
|
+
setCollapseToOpen(accordionValue);
|
2758
2852
|
}
|
2759
|
-
}, [
|
2760
|
-
const
|
2761
|
-
|
2853
|
+
}, [rawError, value, accordionValue]);
|
2854
|
+
const composedBoxRefs = designSystem.useComposedRefs(boxRef, dropRef);
|
2855
|
+
const accordionActions = disabled ? null : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
2856
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
2857
|
+
designSystem.IconButton,
|
2858
|
+
{
|
2859
|
+
variant: "ghost",
|
2860
|
+
label: formatMessage(
|
2861
|
+
{
|
2862
|
+
id: index.getTranslation("components.DynamicZone.delete-label"),
|
2863
|
+
defaultMessage: "Delete {name}"
|
2864
|
+
},
|
2865
|
+
{ name: title }
|
2866
|
+
),
|
2867
|
+
onClick: onRemoveComponentClick,
|
2868
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {})
|
2869
|
+
}
|
2870
|
+
),
|
2871
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
2872
|
+
designSystem.IconButton,
|
2873
|
+
{
|
2874
|
+
variant: "ghost",
|
2875
|
+
onClick: (e) => e.stopPropagation(),
|
2876
|
+
"data-handler-id": handlerId,
|
2877
|
+
ref: dragRef,
|
2878
|
+
label: formatMessage({
|
2879
|
+
id: index.getTranslation("components.DragHandle-label"),
|
2880
|
+
defaultMessage: "Drag"
|
2881
|
+
}),
|
2882
|
+
onKeyDown: handleKeyDown,
|
2883
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {})
|
2884
|
+
}
|
2885
|
+
),
|
2886
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
|
2887
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Trigger, { size: "S", endIcon: null, paddingLeft: 0, paddingRight: 0, children: /* @__PURE__ */ jsxRuntime.jsx(
|
2888
|
+
designSystem.IconButton,
|
2889
|
+
{
|
2890
|
+
variant: "ghost",
|
2891
|
+
label: formatMessage({
|
2892
|
+
id: index.getTranslation("components.DynamicZone.more-actions"),
|
2893
|
+
defaultMessage: "More actions"
|
2894
|
+
}),
|
2895
|
+
tag: "span",
|
2896
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.More, { "aria-hidden": true, focusable: false })
|
2897
|
+
}
|
2898
|
+
) }),
|
2899
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { children: [
|
2900
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.SubRoot, { children: [
|
2901
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubTrigger, { children: formatMessage({
|
2902
|
+
id: index.getTranslation("components.DynamicZone.add-item-above"),
|
2903
|
+
defaultMessage: "Add component above"
|
2904
|
+
}) }),
|
2905
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubContent, { children: Object.entries(dynamicComponentsByCategory).map(([category, components2]) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
2906
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Label, { children: category }),
|
2907
|
+
components2.map(({ displayName: displayName2, uid }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MenuItem, { onSelect: () => onAddComponent(uid, index$1), children: displayName2 }, componentUid))
|
2908
|
+
] }, category)) })
|
2909
|
+
] }),
|
2910
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.SubRoot, { children: [
|
2911
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubTrigger, { children: formatMessage({
|
2912
|
+
id: index.getTranslation("components.DynamicZone.add-item-below"),
|
2913
|
+
defaultMessage: "Add component below"
|
2914
|
+
}) }),
|
2915
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubContent, { children: Object.entries(dynamicComponentsByCategory).map(([category, components2]) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
2916
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Label, { children: category }),
|
2917
|
+
components2.map(({ displayName: displayName2, uid }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MenuItem, { onSelect: () => onAddComponent(uid, index$1 + 1), children: displayName2 }, componentUid))
|
2918
|
+
] }, category)) })
|
2919
|
+
] })
|
2920
|
+
] })
|
2921
|
+
] })
|
2922
|
+
] });
|
2923
|
+
const accordionTitle = title ? `${displayName} ${title}` : displayName;
|
2924
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ComponentContainer, { tag: "li", width: "100%", children: [
|
2925
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Rectangle, { background: "neutral200" }) }),
|
2926
|
+
/* @__PURE__ */ jsxRuntime.jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview$1, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { value: collapseToOpen, onValueChange: setCollapseToOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: accordionValue, children: [
|
2927
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Header, { children: [
|
2928
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
2929
|
+
designSystem.Accordion.Trigger,
|
2930
|
+
{
|
2931
|
+
icon: icon && ComponentIcon.COMPONENT_ICONS[icon] ? ComponentIcon.COMPONENT_ICONS[icon] : ComponentIcon.COMPONENT_ICONS.dashboard,
|
2932
|
+
children: accordionTitle
|
2933
|
+
}
|
2934
|
+
),
|
2935
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Actions, { children: accordionActions })
|
2936
|
+
] }),
|
2937
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsxRuntime.jsx(
|
2938
|
+
designSystem.Grid.Item,
|
2939
|
+
{
|
2940
|
+
col: 12,
|
2941
|
+
s: 12,
|
2942
|
+
xs: 12,
|
2943
|
+
direction: "column",
|
2944
|
+
alignItems: "stretch",
|
2945
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ResponsiveGridRoot, { gap: 4, children: row.map(({ size, ...field }) => {
|
2946
|
+
const fieldName = `${name2}.${index$1}.${field.name}`;
|
2947
|
+
const fieldWithTranslatedLabel = {
|
2948
|
+
...field,
|
2949
|
+
label: formatMessage({
|
2950
|
+
id: `content-manager.components.${componentUid}.${field.name}`,
|
2951
|
+
defaultMessage: field.label
|
2952
|
+
})
|
2953
|
+
};
|
2954
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
2955
|
+
ResponsiveGridItem,
|
2956
|
+
{
|
2957
|
+
col: size,
|
2958
|
+
s: 12,
|
2959
|
+
xs: 12,
|
2960
|
+
direction: "column",
|
2961
|
+
alignItems: "stretch",
|
2962
|
+
children: children ? children({ ...fieldWithTranslatedLabel, name: fieldName }) : /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel, name: fieldName })
|
2963
|
+
},
|
2964
|
+
fieldName
|
2965
|
+
);
|
2966
|
+
}) })
|
2967
|
+
},
|
2968
|
+
rowInd
|
2969
|
+
)) }) }) }) })
|
2970
|
+
] }) }) })
|
2971
|
+
] });
|
2972
|
+
};
|
2973
|
+
const StyledBox = styledComponents.styled(designSystem.Box)`
|
2974
|
+
> div:first-child {
|
2975
|
+
box-shadow: ${({ theme }) => theme.shadows.tableShadow};
|
2976
|
+
}
|
2977
|
+
`;
|
2978
|
+
const AccordionContentRadius = styledComponents.styled(designSystem.Box)`
|
2979
|
+
border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};
|
2980
|
+
`;
|
2981
|
+
const Rectangle = styledComponents.styled(designSystem.Box)`
|
2982
|
+
width: ${({ theme }) => theme.spaces[2]};
|
2983
|
+
height: ${({ theme }) => theme.spaces[4]};
|
2984
|
+
`;
|
2985
|
+
const Preview$1 = styledComponents.styled.span`
|
2986
|
+
display: block;
|
2987
|
+
background-color: ${({ theme }) => theme.colors.primary100};
|
2988
|
+
outline: 1px dashed ${({ theme }) => theme.colors.primary500};
|
2989
|
+
outline-offset: -1px;
|
2990
|
+
padding: ${({ theme }) => theme.spaces[6]};
|
2991
|
+
`;
|
2992
|
+
const ComponentContainer = styledComponents.styled(designSystem.Box)`
|
2993
|
+
list-style: none;
|
2994
|
+
padding: 0;
|
2995
|
+
margin: 0;
|
2996
|
+
`;
|
2997
|
+
const DynamicZoneLabel = ({
|
2998
|
+
hint,
|
2999
|
+
label,
|
3000
|
+
labelAction,
|
3001
|
+
name: name2,
|
3002
|
+
numberOfComponents = 0,
|
3003
|
+
required
|
3004
|
+
}) => {
|
3005
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
3006
|
+
designSystem.Box,
|
3007
|
+
{
|
3008
|
+
paddingTop: 3,
|
3009
|
+
paddingBottom: 3,
|
3010
|
+
paddingRight: 4,
|
3011
|
+
paddingLeft: 4,
|
3012
|
+
borderRadius: "26px",
|
3013
|
+
background: "neutral0",
|
3014
|
+
shadow: "filterShadow",
|
3015
|
+
color: "neutral500",
|
3016
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", justifyContent: "center", children: [
|
3017
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { maxWidth: "35.6rem", children: [
|
3018
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", textColor: "neutral600", fontWeight: "bold", ellipsis: true, children: [
|
3019
|
+
label || name2,
|
3020
|
+
" "
|
3021
|
+
] }),
|
3022
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", textColor: "neutral600", fontWeight: "bold", children: [
|
3023
|
+
"(",
|
3024
|
+
numberOfComponents,
|
3025
|
+
")"
|
3026
|
+
] }),
|
3027
|
+
required && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", children: "*" }),
|
3028
|
+
labelAction && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 1, children: labelAction })
|
3029
|
+
] }),
|
3030
|
+
hint && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 1, maxWidth: "35.6rem", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", ellipsis: true, children: hint }) })
|
3031
|
+
] })
|
3032
|
+
}
|
3033
|
+
) });
|
3034
|
+
};
|
3035
|
+
const [DynamicZoneProvider, useDynamicZone] = strapiAdmin.createContext(
|
3036
|
+
"DynamicZone",
|
3037
|
+
{
|
3038
|
+
isInDynamicZone: false
|
3039
|
+
}
|
3040
|
+
);
|
3041
|
+
const DynamicZone = ({
|
3042
|
+
attribute,
|
3043
|
+
disabled: disabledProp,
|
3044
|
+
hint,
|
3045
|
+
label,
|
3046
|
+
labelAction,
|
3047
|
+
name: name2,
|
3048
|
+
required = false,
|
3049
|
+
children
|
3050
|
+
}) => {
|
3051
|
+
const { max = Infinity, min = -Infinity } = attribute ?? {};
|
3052
|
+
const [addComponentIsOpen, setAddComponentIsOpen] = React__namespace.useState(false);
|
3053
|
+
const [liveText, setLiveText] = React__namespace.useState("");
|
3054
|
+
const { components, isLoading } = index.useDoc();
|
3055
|
+
const disabled = disabledProp || isLoading;
|
3056
|
+
const { addFieldRow, removeFieldRow, moveFieldRow } = strapiAdmin.useForm(
|
3057
|
+
"DynamicZone",
|
3058
|
+
({ addFieldRow: addFieldRow2, removeFieldRow: removeFieldRow2, moveFieldRow: moveFieldRow2 }) => ({
|
3059
|
+
addFieldRow: addFieldRow2,
|
3060
|
+
removeFieldRow: removeFieldRow2,
|
3061
|
+
moveFieldRow: moveFieldRow2
|
3062
|
+
})
|
3063
|
+
);
|
3064
|
+
const { value = [], error } = strapiAdmin.useField(name2);
|
3065
|
+
const dynamicComponentsByCategory = React__namespace.useMemo(() => {
|
3066
|
+
return attribute.components.reduce((acc, componentUid) => {
|
3067
|
+
const { category, info } = components[componentUid] ?? { info: {} };
|
3068
|
+
const component = { uid: componentUid, displayName: info.displayName, icon: info.icon };
|
3069
|
+
if (!acc[category]) {
|
3070
|
+
acc[category] = [];
|
3071
|
+
}
|
3072
|
+
acc[category] = [...acc[category], component];
|
3073
|
+
return acc;
|
3074
|
+
}, {});
|
3075
|
+
}, [attribute.components, components]);
|
3076
|
+
const { formatMessage } = reactIntl.useIntl();
|
3077
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
3078
|
+
const dynamicDisplayedComponentsLength = value.length;
|
3079
|
+
const handleAddComponent = (uid, position) => {
|
3080
|
+
setAddComponentIsOpen(false);
|
3081
|
+
const schema = components[uid];
|
3082
|
+
const form = index.createDefaultForm(schema, components);
|
3083
|
+
const transformations = pipe__default.default(index.transformDocument(schema, components), (data2) => ({
|
3084
|
+
...data2,
|
3085
|
+
__component: uid
|
3086
|
+
}));
|
3087
|
+
const data = transformations(form);
|
3088
|
+
addFieldRow(name2, data, position);
|
2762
3089
|
};
|
2763
|
-
const
|
2764
|
-
if (
|
2765
|
-
|
2766
|
-
|
2767
|
-
const data = transformDocument(schema, components)(form);
|
2768
|
-
addFieldRow(name2, data);
|
2769
|
-
} else if (value.length >= max) {
|
3090
|
+
const handleClickOpenPicker = () => {
|
3091
|
+
if (dynamicDisplayedComponentsLength < max) {
|
3092
|
+
setAddComponentIsOpen((prev) => !prev);
|
3093
|
+
} else {
|
2770
3094
|
toggleNotification({
|
2771
3095
|
type: "info",
|
2772
3096
|
message: formatMessage({
|
@@ -2775,7 +3099,7 @@ const RepeatableComponent = ({
|
|
2775
3099
|
});
|
2776
3100
|
}
|
2777
3101
|
};
|
2778
|
-
const
|
3102
|
+
const handleMoveComponent = (newIndex, currentIndex) => {
|
2779
3103
|
setLiveText(
|
2780
3104
|
formatMessage(
|
2781
3105
|
{
|
@@ -2790,9 +3114,6 @@ const RepeatableComponent = ({
|
|
2790
3114
|
);
|
2791
3115
|
moveFieldRow(name2, currentIndex, newIndex);
|
2792
3116
|
};
|
2793
|
-
const handleValueChange = (key) => {
|
2794
|
-
setCollapseToOpen(key);
|
2795
|
-
};
|
2796
3117
|
const getItemPos = (index2) => `${index2 + 1} of ${value.length}`;
|
2797
3118
|
const handleCancel = (index$1) => {
|
2798
3119
|
setLiveText(
|
@@ -2835,419 +3156,109 @@ const RepeatableComponent = ({
|
|
2835
3156
|
)
|
2836
3157
|
);
|
2837
3158
|
};
|
2838
|
-
const
|
2839
|
-
|
2840
|
-
if (value.length === 0) {
|
2841
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Initializer, { disabled, name: name2, onClick: handleClick });
|
2842
|
-
}
|
2843
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { hasRadius: true, children: [
|
2844
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { id: ariaDescriptionId, children: formatMessage({
|
2845
|
-
id: index.getTranslation("dnd.instructions"),
|
2846
|
-
defaultMessage: `Press spacebar to grab and re-order`
|
2847
|
-
}) }),
|
2848
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { "aria-live": "assertive", children: liveText }),
|
2849
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
2850
|
-
AccordionRoot,
|
2851
|
-
{
|
2852
|
-
$error: error,
|
2853
|
-
value: collapseToOpen,
|
2854
|
-
onValueChange: handleValueChange,
|
2855
|
-
"aria-describedby": ariaDescriptionId,
|
2856
|
-
children: [
|
2857
|
-
value.map(({ __temp_key__: key, id }, index2) => {
|
2858
|
-
const nameWithIndex = `${name2}.${index2}`;
|
2859
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
2860
|
-
Relations.ComponentProvider,
|
2861
|
-
{
|
2862
|
-
id,
|
2863
|
-
uid: attribute.component,
|
2864
|
-
level: level + 1,
|
2865
|
-
type: "repeatable",
|
2866
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
2867
|
-
Component,
|
2868
|
-
{
|
2869
|
-
disabled,
|
2870
|
-
name: nameWithIndex,
|
2871
|
-
attribute,
|
2872
|
-
index: index2,
|
2873
|
-
mainField,
|
2874
|
-
onMoveItem: handleMoveComponentField,
|
2875
|
-
onDeleteComponent: () => {
|
2876
|
-
removeFieldRow(name2, index2);
|
2877
|
-
toggleCollapses();
|
2878
|
-
},
|
2879
|
-
toggleCollapses,
|
2880
|
-
onCancel: handleCancel,
|
2881
|
-
onDropItem: handleDropItem,
|
2882
|
-
onGrabItem: handleGrabItem,
|
2883
|
-
__temp_key__: key,
|
2884
|
-
children: layout.map((row, index22) => {
|
2885
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
|
2886
|
-
const completeFieldName = `${nameWithIndex}.${field.name}`;
|
2887
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, s: 12, xs: 12, children: children({ ...field, name: completeFieldName }) }, completeFieldName);
|
2888
|
-
}) }, index22);
|
2889
|
-
})
|
2890
|
-
}
|
2891
|
-
)
|
2892
|
-
},
|
2893
|
-
key
|
2894
|
-
);
|
2895
|
-
}),
|
2896
|
-
/* @__PURE__ */ jsxRuntime.jsx(TextButtonCustom, { disabled, onClick: handleClick, startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Plus, {}), children: formatMessage({
|
2897
|
-
id: index.getTranslation("containers.EditView.add.new-entry"),
|
2898
|
-
defaultMessage: "Add an entry"
|
2899
|
-
}) })
|
2900
|
-
]
|
2901
|
-
}
|
2902
|
-
)
|
2903
|
-
] });
|
2904
|
-
};
|
2905
|
-
const AccordionRoot = styledComponents.styled(designSystem.Accordion.Root)`
|
2906
|
-
border: 1px solid
|
2907
|
-
${({ theme, $error }) => $error ? theme.colors.danger600 : theme.colors.neutral200};
|
2908
|
-
`;
|
2909
|
-
const TextButtonCustom = styledComponents.styled(designSystem.TextButton)`
|
2910
|
-
width: 100%;
|
2911
|
-
display: flex;
|
2912
|
-
justify-content: center;
|
2913
|
-
border-top: 1px solid ${({ theme }) => theme.colors.neutral200};
|
2914
|
-
padding-inline: ${(props) => props.theme.spaces[6]};
|
2915
|
-
padding-block: ${(props) => props.theme.spaces[3]};
|
2916
|
-
|
2917
|
-
&:not([disabled]) {
|
2918
|
-
cursor: pointer;
|
2919
|
-
|
2920
|
-
&:hover {
|
2921
|
-
background-color: ${(props) => props.theme.colors.primary100};
|
2922
|
-
}
|
2923
|
-
}
|
2924
|
-
|
2925
|
-
span {
|
2926
|
-
font-weight: 600;
|
2927
|
-
font-size: 1.4rem;
|
2928
|
-
line-height: 2.4rem;
|
2929
|
-
}
|
2930
|
-
|
2931
|
-
@media (prefers-reduced-motion: no-preference) {
|
2932
|
-
transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};
|
2933
|
-
}
|
2934
|
-
`;
|
2935
|
-
const Component = ({
|
2936
|
-
disabled,
|
2937
|
-
index: index$1,
|
2938
|
-
name: name2,
|
2939
|
-
mainField = {
|
2940
|
-
name: "id",
|
2941
|
-
type: "integer"
|
2942
|
-
},
|
2943
|
-
children,
|
2944
|
-
onDeleteComponent,
|
2945
|
-
toggleCollapses,
|
2946
|
-
__temp_key__,
|
2947
|
-
...dragProps
|
2948
|
-
}) => {
|
2949
|
-
const { formatMessage } = reactIntl.useIntl();
|
2950
|
-
const displayValue = strapiAdmin.useForm("RepeatableComponent", (state) => {
|
2951
|
-
return objects.getIn(state.values, [...name2.split("."), mainField.name]);
|
2952
|
-
});
|
2953
|
-
const accordionRef = React__namespace.useRef(null);
|
2954
|
-
const componentKey = name2.split(".").slice(0, -1).join(".");
|
2955
|
-
const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop.useDragAndDrop(!disabled, {
|
2956
|
-
type: `${useDragAndDrop.ItemTypes.COMPONENT}_${componentKey}`,
|
2957
|
-
index: index$1,
|
2958
|
-
item: {
|
2959
|
-
index: index$1,
|
2960
|
-
displayedValue: displayValue
|
2961
|
-
},
|
2962
|
-
onStart() {
|
2963
|
-
toggleCollapses();
|
2964
|
-
},
|
2965
|
-
...dragProps
|
2966
|
-
});
|
2967
|
-
React__namespace.useEffect(() => {
|
2968
|
-
dragPreviewRef(reactDndHtml5Backend.getEmptyImage(), { captureDraggingState: false });
|
2969
|
-
}, [dragPreviewRef, index$1]);
|
2970
|
-
const composedAccordionRefs = designSystem.useComposedRefs(accordionRef, dragRef);
|
2971
|
-
const composedBoxRefs = designSystem.useComposedRefs(
|
2972
|
-
boxRef,
|
2973
|
-
dropRef
|
2974
|
-
);
|
2975
|
-
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview$1, {}) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { ref: composedBoxRefs, value: __temp_key__, children: [
|
2976
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Header, { children: [
|
2977
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { children: displayValue }),
|
2978
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Actions, { children: [
|
2979
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
2980
|
-
designSystem.IconButton,
|
2981
|
-
{
|
2982
|
-
borderWidth: 0,
|
2983
|
-
onClick: onDeleteComponent,
|
2984
|
-
label: formatMessage({
|
2985
|
-
id: index.getTranslation("containers.Edit.delete"),
|
2986
|
-
defaultMessage: "Delete"
|
2987
|
-
}),
|
2988
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {})
|
2989
|
-
}
|
2990
|
-
),
|
2991
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
2992
|
-
designSystem.IconButton,
|
2993
|
-
{
|
2994
|
-
ref: composedAccordionRefs,
|
2995
|
-
borderWidth: 0,
|
2996
|
-
onClick: (e) => e.stopPropagation(),
|
2997
|
-
"data-handler-id": handlerId,
|
2998
|
-
label: formatMessage({
|
2999
|
-
id: index.getTranslation("components.DragHandle-label"),
|
3000
|
-
defaultMessage: "Drag"
|
3001
|
-
}),
|
3002
|
-
onKeyDown: handleKeyDown,
|
3003
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {})
|
3004
|
-
}
|
3005
|
-
)
|
3006
|
-
] })
|
3007
|
-
] }),
|
3008
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
3009
|
-
designSystem.Flex,
|
3010
|
-
{
|
3011
|
-
direction: "column",
|
3012
|
-
alignItems: "stretch",
|
3013
|
-
background: "neutral100",
|
3014
|
-
padding: 6,
|
3015
|
-
gap: 6,
|
3016
|
-
children
|
3017
|
-
}
|
3018
|
-
) })
|
3019
|
-
] }) });
|
3020
|
-
};
|
3021
|
-
const Preview$1 = () => {
|
3022
|
-
return /* @__PURE__ */ jsxRuntime.jsx(StyledSpan, { tag: "span", padding: 6, background: "primary100" });
|
3023
|
-
};
|
3024
|
-
const StyledSpan = styledComponents.styled(designSystem.Box)`
|
3025
|
-
display: block;
|
3026
|
-
outline: 1px dashed ${({ theme }) => theme.colors.primary500};
|
3027
|
-
outline-offset: -1px;
|
3028
|
-
`;
|
3029
|
-
const ComponentInput = ({
|
3030
|
-
label,
|
3031
|
-
required,
|
3032
|
-
name: name2,
|
3033
|
-
attribute,
|
3034
|
-
disabled,
|
3035
|
-
labelAction,
|
3036
|
-
...props
|
3037
|
-
}) => {
|
3038
|
-
const { formatMessage } = reactIntl.useIntl();
|
3039
|
-
const field = strapiAdmin.useField(name2);
|
3040
|
-
const showResetComponent = !attribute.repeatable && field.value && !disabled;
|
3041
|
-
const { components } = index.useDoc();
|
3042
|
-
const handleInitialisationClick = () => {
|
3043
|
-
const schema = components[attribute.component];
|
3044
|
-
const form = createDefaultForm(schema, components);
|
3045
|
-
const data = transformDocument(schema, components)(form);
|
3046
|
-
field.onChange(name2, data);
|
3159
|
+
const handleRemoveComponent = (name22, currentIndex) => () => {
|
3160
|
+
removeFieldRow(name22, currentIndex);
|
3047
3161
|
};
|
3048
|
-
|
3049
|
-
|
3050
|
-
|
3051
|
-
|
3052
|
-
|
3053
|
-
|
3054
|
-
|
3055
|
-
")"
|
3056
|
-
] })
|
3057
|
-
] }),
|
3058
|
-
showResetComponent && /* @__PURE__ */ jsxRuntime.jsx(
|
3059
|
-
designSystem.IconButton,
|
3162
|
+
const hasError = error !== void 0;
|
3163
|
+
const renderButtonLabel = () => {
|
3164
|
+
if (addComponentIsOpen) {
|
3165
|
+
return formatMessage({ id: "app.utils.close-label", defaultMessage: "Close" });
|
3166
|
+
}
|
3167
|
+
if (hasError && dynamicDisplayedComponentsLength > max) {
|
3168
|
+
return formatMessage(
|
3060
3169
|
{
|
3061
|
-
|
3062
|
-
|
3063
|
-
|
3064
|
-
|
3065
|
-
|
3066
|
-
onClick: () => {
|
3067
|
-
field.onChange(name2, null);
|
3068
|
-
},
|
3069
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {})
|
3170
|
+
id: index.getTranslation(`components.DynamicZone.extra-components`),
|
3171
|
+
defaultMessage: "There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}"
|
3172
|
+
},
|
3173
|
+
{
|
3174
|
+
number: dynamicDisplayedComponentsLength - max
|
3070
3175
|
}
|
3071
|
-
)
|
3072
|
-
] }),
|
3073
|
-
!attribute.repeatable && !field.value && /* @__PURE__ */ jsxRuntime.jsx(Initializer, { disabled, name: name2, onClick: handleInitialisationClick }),
|
3074
|
-
!attribute.repeatable && field.value ? /* @__PURE__ */ jsxRuntime.jsx(NonRepeatableComponent, { attribute, name: name2, disabled, ...props, children: props.children }) : null,
|
3075
|
-
attribute.repeatable && /* @__PURE__ */ jsxRuntime.jsx(RepeatableComponent, { attribute, name: name2, disabled, ...props, children: props.children }),
|
3076
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
3077
|
-
] });
|
3078
|
-
};
|
3079
|
-
const MemoizedComponentInput = React__namespace.memo(ComponentInput);
|
3080
|
-
const AddComponentButton = ({
|
3081
|
-
hasError,
|
3082
|
-
isDisabled,
|
3083
|
-
isOpen,
|
3084
|
-
children,
|
3085
|
-
onClick
|
3086
|
-
}) => {
|
3087
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
3088
|
-
StyledButton,
|
3089
|
-
{
|
3090
|
-
type: "button",
|
3091
|
-
onClick,
|
3092
|
-
disabled: isDisabled,
|
3093
|
-
background: "neutral0",
|
3094
|
-
paddingTop: 3,
|
3095
|
-
paddingBottom: 3,
|
3096
|
-
paddingLeft: 4,
|
3097
|
-
paddingRight: 4,
|
3098
|
-
style: { cursor: isDisabled ? "not-allowed" : "pointer" },
|
3099
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { tag: "span", gap: 2, children: [
|
3100
|
-
/* @__PURE__ */ jsxRuntime.jsx(StyledAddIcon, { "aria-hidden": true, $isOpen: isOpen, $hasError: hasError && !isOpen }),
|
3101
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
3102
|
-
AddComponentTitle,
|
3103
|
-
{
|
3104
|
-
variant: "pi",
|
3105
|
-
fontWeight: "bold",
|
3106
|
-
textColor: hasError && !isOpen ? "danger600" : "neutral500",
|
3107
|
-
children
|
3108
|
-
}
|
3109
|
-
)
|
3110
|
-
] })
|
3111
|
-
}
|
3112
|
-
);
|
3113
|
-
};
|
3114
|
-
const StyledAddIcon = styledComponents.styled(Icons.PlusCircle)`
|
3115
|
-
height: ${({ theme }) => theme.spaces[6]};
|
3116
|
-
width: ${({ theme }) => theme.spaces[6]};
|
3117
|
-
transform: ${({ $isOpen }) => $isOpen ? "rotate(45deg)" : "rotate(0deg)"};
|
3118
|
-
|
3119
|
-
> circle {
|
3120
|
-
fill: ${({ theme, $hasError }) => $hasError ? theme.colors.danger200 : theme.colors.neutral150};
|
3121
|
-
}
|
3122
|
-
> path {
|
3123
|
-
fill: ${({ theme, $hasError }) => $hasError ? theme.colors.danger600 : theme.colors.neutral600};
|
3124
|
-
}
|
3125
|
-
`;
|
3126
|
-
const AddComponentTitle = styledComponents.styled(designSystem.Typography)``;
|
3127
|
-
const StyledButton = styledComponents.styled(designSystem.BaseButton)`
|
3128
|
-
border-radius: 26px;
|
3129
|
-
border-color: ${({ theme }) => theme.colors.neutral150};
|
3130
|
-
box-shadow: ${({ theme }) => theme.shadows.filterShadow};
|
3131
|
-
|
3132
|
-
&:hover {
|
3133
|
-
${AddComponentTitle} {
|
3134
|
-
color: ${({ theme }) => theme.colors.primary600};
|
3135
|
-
}
|
3136
|
-
|
3137
|
-
${StyledAddIcon} {
|
3138
|
-
> circle {
|
3139
|
-
fill: ${({ theme }) => theme.colors.primary600};
|
3140
|
-
}
|
3141
|
-
> path {
|
3142
|
-
fill: ${({ theme }) => theme.colors.neutral100};
|
3143
|
-
}
|
3144
|
-
}
|
3145
|
-
}
|
3146
|
-
&:active {
|
3147
|
-
${AddComponentTitle} {
|
3148
|
-
color: ${({ theme }) => theme.colors.primary600};
|
3176
|
+
);
|
3149
3177
|
}
|
3150
|
-
|
3151
|
-
|
3152
|
-
|
3153
|
-
|
3154
|
-
|
3155
|
-
|
3156
|
-
|
3178
|
+
if (hasError && dynamicDisplayedComponentsLength < min) {
|
3179
|
+
return formatMessage(
|
3180
|
+
{
|
3181
|
+
id: index.getTranslation(`components.DynamicZone.missing-components`),
|
3182
|
+
defaultMessage: "There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}"
|
3183
|
+
},
|
3184
|
+
{ number: min - dynamicDisplayedComponentsLength }
|
3185
|
+
);
|
3157
3186
|
}
|
3158
|
-
|
3159
|
-
`;
|
3160
|
-
const ComponentCategory = ({
|
3161
|
-
category,
|
3162
|
-
components = [],
|
3163
|
-
variant = "primary",
|
3164
|
-
onAddComponent
|
3165
|
-
}) => {
|
3166
|
-
const { formatMessage } = reactIntl.useIntl();
|
3167
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: category, children: [
|
3168
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { variant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { children: formatMessage({ id: category, defaultMessage: category }) }) }),
|
3169
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(Grid, { paddingTop: 4, paddingBottom: 4, paddingLeft: 3, paddingRight: 3, children: components.map(({ uid, displayName, icon }) => /* @__PURE__ */ jsxRuntime.jsx(
|
3170
|
-
ComponentBox,
|
3187
|
+
return formatMessage(
|
3171
3188
|
{
|
3172
|
-
|
3173
|
-
|
3174
|
-
background: "neutral100",
|
3175
|
-
justifyContent: "center",
|
3176
|
-
onClick: onAddComponent(uid),
|
3177
|
-
hasRadius: true,
|
3178
|
-
height: "8.4rem",
|
3179
|
-
shrink: 0,
|
3180
|
-
borderColor: "neutral200",
|
3181
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 1, alignItems: "center", justifyContent: "center", children: [
|
3182
|
-
/* @__PURE__ */ jsxRuntime.jsx(ComponentIcon.ComponentIcon, { color: "currentColor", background: "primary200", icon }),
|
3183
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", children: displayName })
|
3184
|
-
] })
|
3189
|
+
id: index.getTranslation("components.DynamicZone.add-component"),
|
3190
|
+
defaultMessage: "Add a component to {componentName}"
|
3185
3191
|
},
|
3186
|
-
|
3187
|
-
)
|
3188
|
-
] });
|
3189
|
-
};
|
3190
|
-
const Grid = styledComponents.styled(designSystem.Box)`
|
3191
|
-
display: grid;
|
3192
|
-
grid-template-columns: repeat(auto-fit, 14rem);
|
3193
|
-
grid-gap: ${({ theme }) => theme.spaces[1]};
|
3194
|
-
`;
|
3195
|
-
const ComponentBox = styledComponents.styled(designSystem.Flex)`
|
3196
|
-
color: ${({ theme }) => theme.colors.neutral600};
|
3197
|
-
cursor: pointer;
|
3198
|
-
|
3199
|
-
@media (prefers-reduced-motion: no-preference) {
|
3200
|
-
transition: color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};
|
3201
|
-
}
|
3202
|
-
|
3203
|
-
&:focus,
|
3204
|
-
&:hover {
|
3205
|
-
border: 1px solid ${({ theme }) => theme.colors.primary200};
|
3206
|
-
background: ${({ theme }) => theme.colors.primary100};
|
3207
|
-
color: ${({ theme }) => theme.colors.primary600};
|
3208
|
-
}
|
3209
|
-
`;
|
3210
|
-
const ComponentPicker = ({
|
3211
|
-
dynamicComponentsByCategory = {},
|
3212
|
-
isOpen,
|
3213
|
-
onClickAddComponent
|
3214
|
-
}) => {
|
3215
|
-
const { formatMessage } = reactIntl.useIntl();
|
3216
|
-
const handleAddComponentToDz = (componentUid) => () => {
|
3217
|
-
onClickAddComponent(componentUid);
|
3192
|
+
{ componentName: label || name2 }
|
3193
|
+
);
|
3218
3194
|
};
|
3219
|
-
|
3220
|
-
|
3221
|
-
|
3222
|
-
|
3223
|
-
|
3224
|
-
|
3225
|
-
|
3226
|
-
|
3227
|
-
|
3228
|
-
|
3229
|
-
|
3230
|
-
|
3231
|
-
|
3232
|
-
|
3233
|
-
|
3234
|
-
|
3235
|
-
|
3236
|
-
|
3237
|
-
|
3238
|
-
|
3239
|
-
|
3240
|
-
|
3241
|
-
|
3242
|
-
|
3243
|
-
|
3244
|
-
|
3245
|
-
|
3246
|
-
|
3247
|
-
|
3248
|
-
|
3249
|
-
|
3250
|
-
|
3195
|
+
const level = Relations.useComponent("DynamicZone", (state) => state.level);
|
3196
|
+
const ariaDescriptionId = React__namespace.useId();
|
3197
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DynamicZoneProvider, { isInDynamicZone: true, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
3198
|
+
dynamicDisplayedComponentsLength > 0 && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
|
3199
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
3200
|
+
DynamicZoneLabel,
|
3201
|
+
{
|
3202
|
+
hint,
|
3203
|
+
label,
|
3204
|
+
labelAction,
|
3205
|
+
name: name2,
|
3206
|
+
numberOfComponents: dynamicDisplayedComponentsLength,
|
3207
|
+
required
|
3208
|
+
}
|
3209
|
+
),
|
3210
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { id: ariaDescriptionId, children: formatMessage({
|
3211
|
+
id: index.getTranslation("dnd.instructions"),
|
3212
|
+
defaultMessage: `Press spacebar to grab and re-order`
|
3213
|
+
}) }),
|
3214
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { "aria-live": "assertive", children: liveText }),
|
3215
|
+
/* @__PURE__ */ jsxRuntime.jsx("ol", { "aria-describedby": ariaDescriptionId, children: value.map((field, index2) => /* @__PURE__ */ jsxRuntime.jsx(
|
3216
|
+
Relations.ComponentProvider,
|
3217
|
+
{
|
3218
|
+
level: level + 1,
|
3219
|
+
uid: field.__component,
|
3220
|
+
id: field.id,
|
3221
|
+
type: "dynamiczone",
|
3222
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
3223
|
+
DynamicComponent,
|
3224
|
+
{
|
3225
|
+
disabled,
|
3226
|
+
name: name2,
|
3227
|
+
index: index2,
|
3228
|
+
componentUid: field.__component,
|
3229
|
+
onMoveComponent: handleMoveComponent,
|
3230
|
+
onRemoveComponentClick: handleRemoveComponent(name2, index2),
|
3231
|
+
onCancel: handleCancel,
|
3232
|
+
onDropItem: handleDropItem,
|
3233
|
+
onGrabItem: handleGrabItem,
|
3234
|
+
onAddComponent: handleAddComponent,
|
3235
|
+
dynamicComponentsByCategory,
|
3236
|
+
children
|
3237
|
+
}
|
3238
|
+
)
|
3239
|
+
},
|
3240
|
+
field.__temp_key__
|
3241
|
+
)) })
|
3242
|
+
] }),
|
3243
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
3244
|
+
AddComponentButton,
|
3245
|
+
{
|
3246
|
+
hasError,
|
3247
|
+
isDisabled: disabled,
|
3248
|
+
isOpen: addComponentIsOpen,
|
3249
|
+
onClick: handleClickOpenPicker,
|
3250
|
+
children: renderButtonLabel()
|
3251
|
+
}
|
3252
|
+
) }),
|
3253
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
3254
|
+
ComponentPicker,
|
3255
|
+
{
|
3256
|
+
dynamicComponentsByCategory,
|
3257
|
+
isOpen: addComponentIsOpen,
|
3258
|
+
onClickAddComponent: handleAddComponent
|
3259
|
+
}
|
3260
|
+
)
|
3261
|
+
] }) });
|
3251
3262
|
};
|
3252
3263
|
const NotAllowedInput = ({ hint, label, required, name: name2 }) => {
|
3253
3264
|
const { formatMessage } = reactIntl.useIntl();
|
@@ -3270,18 +3281,6 @@ const NotAllowedInput = ({ hint, label, required, name: name2 }) => {
|
|
3270
3281
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
3271
3282
|
] });
|
3272
3283
|
};
|
3273
|
-
function useDebounce(value, delay) {
|
3274
|
-
const [debouncedValue, setDebouncedValue] = React.useState(value);
|
3275
|
-
React.useEffect(() => {
|
3276
|
-
const handler = setTimeout(() => {
|
3277
|
-
setDebouncedValue(value);
|
3278
|
-
}, delay);
|
3279
|
-
return () => {
|
3280
|
-
clearTimeout(handler);
|
3281
|
-
};
|
3282
|
-
}, [value, delay]);
|
3283
|
-
return debouncedValue;
|
3284
|
-
}
|
3285
3284
|
const uidApi = index.contentManagerApi.injectEndpoints({
|
3286
3285
|
endpoints: (builder) => ({
|
3287
3286
|
getDefaultUID: builder.query({
|
@@ -3316,7 +3315,10 @@ const uidApi = index.contentManagerApi.injectEndpoints({
|
|
3316
3315
|
config: {
|
3317
3316
|
params
|
3318
3317
|
}
|
3319
|
-
})
|
3318
|
+
}),
|
3319
|
+
providesTags: (_res, _error, params) => [
|
3320
|
+
{ type: "UidAvailability", id: params.contentTypeUID }
|
3321
|
+
]
|
3320
3322
|
})
|
3321
3323
|
})
|
3322
3324
|
});
|
@@ -3328,8 +3330,10 @@ const UIDInput = React__namespace.forwardRef(
|
|
3328
3330
|
const allFormValues = strapiAdmin.useForm("InputUID", (form) => form.values);
|
3329
3331
|
const [availability, setAvailability] = React__namespace.useState();
|
3330
3332
|
const [showRegenerate, setShowRegenerate] = React__namespace.useState(false);
|
3333
|
+
const isCloning = reactRouterDom.useMatch(index.CLONE_PATH) !== null;
|
3331
3334
|
const field = strapiAdmin.useField(name2);
|
3332
|
-
const debouncedValue = useDebounce(field.value, 300);
|
3335
|
+
const debouncedValue = relations.useDebounce(field.value, 300);
|
3336
|
+
const hasChanged = debouncedValue !== field.initialValue;
|
3333
3337
|
const { toggleNotification } = strapiAdmin.useNotification();
|
3334
3338
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
3335
3339
|
const { formatMessage } = reactIntl.useIntl();
|
@@ -3405,8 +3409,9 @@ const UIDInput = React__namespace.forwardRef(
|
|
3405
3409
|
params
|
3406
3410
|
},
|
3407
3411
|
{
|
3412
|
+
// Don't check availability if the value is empty or wasn't changed
|
3408
3413
|
skip: !Boolean(
|
3409
|
-
|
3414
|
+
(hasChanged || isCloning) && debouncedValue && UID_REGEX.test(debouncedValue.trim())
|
3410
3415
|
)
|
3411
3416
|
}
|
3412
3417
|
);
|
@@ -3435,6 +3440,7 @@ const UIDInput = React__namespace.forwardRef(
|
|
3435
3440
|
const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;
|
3436
3441
|
const fieldRef = strapiAdmin.useFocusInputField(name2);
|
3437
3442
|
const composedRefs = designSystem.useComposedRefs(ref, fieldRef);
|
3443
|
+
const shouldShowAvailability = (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;
|
3438
3444
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { hint, name: name2, error: field.error, required, children: [
|
3439
3445
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { action: labelAction, children: label }),
|
3440
3446
|
/* @__PURE__ */ jsxRuntime.jsx(
|
@@ -3443,7 +3449,7 @@ const UIDInput = React__namespace.forwardRef(
|
|
3443
3449
|
ref: composedRefs,
|
3444
3450
|
disabled: props.disabled,
|
3445
3451
|
endAction: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { position: "relative", gap: 1, children: [
|
3446
|
-
|
3452
|
+
shouldShowAvailability && /* @__PURE__ */ jsxRuntime.jsxs(
|
3447
3453
|
TextValidation,
|
3448
3454
|
{
|
3449
3455
|
alignItems: "center",
|
@@ -3732,8 +3738,7 @@ const Wrapper = styledComponents.styled.div`
|
|
3732
3738
|
`;
|
3733
3739
|
var listRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/, emptyListRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/, unorderedListRE = /[*+-]\s/;
|
3734
3740
|
function newlineAndIndentContinueMarkdownList(cm) {
|
3735
|
-
if (cm.getOption("disableInput"))
|
3736
|
-
return CodeMirror__default.default.Pass;
|
3741
|
+
if (cm.getOption("disableInput")) return CodeMirror__default.default.Pass;
|
3737
3742
|
var ranges = cm.listSelections(), replacements = [];
|
3738
3743
|
for (var i = 0; i < ranges.length; i++) {
|
3739
3744
|
var pos = ranges[i].head;
|
@@ -3767,8 +3772,7 @@ function newlineAndIndentContinueMarkdownList(cm) {
|
|
3767
3772
|
var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0);
|
3768
3773
|
var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace("x", " ");
|
3769
3774
|
replacements[i] = "\n" + indent + bullet + after;
|
3770
|
-
if (numbered)
|
3771
|
-
incrementRemainingMarkdownListNumbers(cm, pos);
|
3775
|
+
if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);
|
3772
3776
|
}
|
3773
3777
|
}
|
3774
3778
|
cm.replaceSelections(replacements);
|
@@ -3786,10 +3790,8 @@ function incrementRemainingMarkdownListNumbers(cm, pos) {
|
|
3786
3790
|
var newNumber = parseInt(startItem[3], 10) + lookAhead - skipCount;
|
3787
3791
|
var nextNumber = parseInt(nextItem[3], 10), itemNumber = nextNumber;
|
3788
3792
|
if (startIndent === nextIndent && !isNaN(nextNumber)) {
|
3789
|
-
if (newNumber === nextNumber)
|
3790
|
-
|
3791
|
-
if (newNumber > nextNumber)
|
3792
|
-
itemNumber = newNumber + 1;
|
3793
|
+
if (newNumber === nextNumber) itemNumber = nextNumber + 1;
|
3794
|
+
if (newNumber > nextNumber) itemNumber = newNumber + 1;
|
3793
3795
|
cm.replaceRange(
|
3794
3796
|
nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),
|
3795
3797
|
{
|
@@ -3802,10 +3804,8 @@ function incrementRemainingMarkdownListNumbers(cm, pos) {
|
|
3802
3804
|
}
|
3803
3805
|
);
|
3804
3806
|
} else {
|
3805
|
-
if (startIndent.length > nextIndent.length)
|
3806
|
-
|
3807
|
-
if (startIndent.length < nextIndent.length && lookAhead === 1)
|
3808
|
-
return;
|
3807
|
+
if (startIndent.length > nextIndent.length) return;
|
3808
|
+
if (startIndent.length < nextIndent.length && lookAhead === 1) return;
|
3809
3809
|
skipCount += 1;
|
3810
3810
|
}
|
3811
3811
|
}
|
@@ -4277,7 +4277,7 @@ const EditorLayout = ({
|
|
4277
4277
|
justifyContent: "flex-end",
|
4278
4278
|
shrink: 0,
|
4279
4279
|
width: "100%",
|
4280
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(ExpandButton$1, { onClick: onCollapse, children: [
|
4280
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(ExpandButton$1, { onClick: onCollapse, variant: "tertiary", size: "M", children: [
|
4281
4281
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
|
4282
4282
|
id: "components.Wysiwyg.collapse",
|
4283
4283
|
defaultMessage: "Collapse"
|
@@ -4295,12 +4295,14 @@ const EditorLayout = ({
|
|
4295
4295
|
) }) });
|
4296
4296
|
}
|
4297
4297
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
4298
|
-
designSystem.
|
4298
|
+
designSystem.Flex,
|
4299
4299
|
{
|
4300
4300
|
borderColor: error ? "danger600" : "neutral200",
|
4301
4301
|
borderStyle: "solid",
|
4302
4302
|
borderWidth: "1px",
|
4303
4303
|
hasRadius: true,
|
4304
|
+
direction: "column",
|
4305
|
+
alignItems: "stretch",
|
4304
4306
|
children
|
4305
4307
|
}
|
4306
4308
|
);
|
@@ -4311,11 +4313,19 @@ const ExpandWrapper = styledComponents.styled(designSystem.Flex)`
|
|
4311
4313
|
const BoxWithBorder = styledComponents.styled(designSystem.Box)`
|
4312
4314
|
border-right: 1px solid ${({ theme }) => theme.colors.neutral200};
|
4313
4315
|
`;
|
4314
|
-
const ExpandButton$1 = styledComponents.styled(designSystem.
|
4316
|
+
const ExpandButton$1 = styledComponents.styled(designSystem.Button)`
|
4315
4317
|
background-color: transparent;
|
4316
4318
|
border: none;
|
4317
4319
|
align-items: center;
|
4318
4320
|
|
4321
|
+
& > span {
|
4322
|
+
display: flex;
|
4323
|
+
justify-content: space-between;
|
4324
|
+
align-items: center;
|
4325
|
+
width: 100%;
|
4326
|
+
font-weight: ${({ theme }) => theme.fontWeights.regular};
|
4327
|
+
}
|
4328
|
+
|
4319
4329
|
svg {
|
4320
4330
|
margin-left: ${({ theme }) => `${theme.spaces[2]}`};
|
4321
4331
|
|
@@ -4582,40 +4592,28 @@ const quoteAndCodeHandler = (editor, markdownType) => {
|
|
4582
4592
|
insertWithoutTextToEdit(editor, markdownType, line, contentLength);
|
4583
4593
|
}
|
4584
4594
|
};
|
4585
|
-
const CustomIconButton = styledComponents.styled(designSystem.IconButton)`
|
4586
|
-
padding: ${({ theme }) => theme.spaces[2]};
|
4587
|
-
|
4588
|
-
svg {
|
4589
|
-
width: 1.8rem;
|
4590
|
-
height: 1.8rem;
|
4591
|
-
}
|
4592
|
-
`;
|
4593
|
-
const CustomLinkIconButton = styledComponents.styled(CustomIconButton)`
|
4594
|
-
svg {
|
4595
|
-
width: 0.8rem;
|
4596
|
-
height: 0.8rem;
|
4597
|
-
}
|
4598
|
-
`;
|
4599
4595
|
const MainButtons = styledComponents.styled(designSystem.IconButtonGroup)`
|
4600
4596
|
margin-left: ${({ theme }) => theme.spaces[4]};
|
4601
4597
|
`;
|
4602
4598
|
const MoreButton = styledComponents.styled(designSystem.IconButton)`
|
4603
4599
|
margin: ${({ theme }) => `0 ${theme.spaces[2]}`};
|
4604
|
-
padding: ${({ theme }) => theme.spaces[2]};
|
4605
|
-
|
4606
|
-
svg {
|
4607
|
-
width: 1.8rem;
|
4608
|
-
height: 1.8rem;
|
4609
|
-
}
|
4610
4600
|
`;
|
4611
4601
|
const IconButtonGroupMargin = styledComponents.styled(designSystem.IconButtonGroup)`
|
4612
4602
|
margin-right: ${({ theme }) => `${theme.spaces[2]}`};
|
4613
4603
|
`;
|
4614
|
-
const ExpandButton = styledComponents.styled(designSystem.
|
4604
|
+
const ExpandButton = styledComponents.styled(designSystem.Button)`
|
4615
4605
|
background-color: transparent;
|
4616
4606
|
border: none;
|
4617
4607
|
align-items: center;
|
4618
4608
|
|
4609
|
+
& > span {
|
4610
|
+
display: flex;
|
4611
|
+
justify-content: space-between;
|
4612
|
+
align-items: center;
|
4613
|
+
width: 100%;
|
4614
|
+
font-weight: ${({ theme }) => theme.fontWeights.regular};
|
4615
|
+
}
|
4616
|
+
|
4619
4617
|
svg {
|
4620
4618
|
margin-left: ${({ theme }) => `${theme.spaces[2]}`};
|
4621
4619
|
path {
|
@@ -4627,7 +4625,7 @@ const ExpandButton = styledComponents.styled(designSystem.BaseButton)`
|
|
4627
4625
|
`;
|
4628
4626
|
const WysiwygFooter = ({ onToggleExpand }) => {
|
4629
4627
|
const { formatMessage } = reactIntl.useIntl();
|
4630
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 2, background: "neutral100", borderRadius: `0 0 0.4rem 0.4rem`, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "flex-end", alignItems: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsxs(ExpandButton, { id: "expand", onClick: onToggleExpand, children: [
|
4628
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 2, background: "neutral100", borderRadius: `0 0 0.4rem 0.4rem`, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "flex-end", alignItems: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsxs(ExpandButton, { id: "expand", onClick: onToggleExpand, variant: "tertiary", size: "M", children: [
|
4631
4629
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: formatMessage({
|
4632
4630
|
id: "components.WysiwygBottomControls.fullscreen",
|
4633
4631
|
defaultMessage: "Expand"
|
@@ -4664,18 +4662,27 @@ const WysiwygNav = ({
|
|
4664
4662
|
borderRadius: `0.4rem 0.4rem 0 0`,
|
4665
4663
|
children: [
|
4666
4664
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { children: [
|
4667
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Root, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
4668
|
-
|
4669
|
-
|
4670
|
-
|
4671
|
-
|
4672
|
-
|
4673
|
-
|
4674
|
-
|
4665
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Root, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
4666
|
+
designSystem.SingleSelect,
|
4667
|
+
{
|
4668
|
+
disabled: true,
|
4669
|
+
placeholder: selectPlaceholder,
|
4670
|
+
"aria-label": selectPlaceholder,
|
4671
|
+
size: "S",
|
4672
|
+
children: [
|
4673
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h1", children: "h1" }),
|
4674
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h2", children: "h2" }),
|
4675
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h3", children: "h3" }),
|
4676
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h4", children: "h4" }),
|
4677
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h5", children: "h5" }),
|
4678
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h6", children: "h6" })
|
4679
|
+
]
|
4680
|
+
}
|
4681
|
+
) }),
|
4675
4682
|
/* @__PURE__ */ jsxRuntime.jsxs(MainButtons, { children: [
|
4676
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
4677
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
4678
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
4683
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { disabled: true, label: "Bold", name: "Bold", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Bold, {}) }),
|
4684
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { disabled: true, label: "Italic", name: "Italic", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Italic, {}) }),
|
4685
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { disabled: true, label: "Underline", name: "Underline", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Underline, {}) })
|
4679
4686
|
] }),
|
4680
4687
|
/* @__PURE__ */ jsxRuntime.jsx(MoreButton, { disabled: true, label: "More", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.More, {}) })
|
4681
4688
|
] }),
|
@@ -4702,6 +4709,7 @@ const WysiwygNav = ({
|
|
4702
4709
|
placeholder: selectPlaceholder,
|
4703
4710
|
"aria-label": selectPlaceholder,
|
4704
4711
|
onChange: (value) => onActionClick(value, editorRef),
|
4712
|
+
size: "S",
|
4705
4713
|
children: [
|
4706
4714
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h1", children: "h1" }),
|
4707
4715
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "h2", children: "h2" }),
|
@@ -4713,17 +4721,9 @@ const WysiwygNav = ({
|
|
4713
4721
|
}
|
4714
4722
|
) }),
|
4715
4723
|
/* @__PURE__ */ jsxRuntime.jsxs(MainButtons, { children: [
|
4724
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { onClick: () => onActionClick("Bold", editorRef), label: "Bold", name: "Bold", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Bold, {}) }),
|
4716
4725
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4717
|
-
|
4718
|
-
{
|
4719
|
-
onClick: () => onActionClick("Bold", editorRef),
|
4720
|
-
label: "Bold",
|
4721
|
-
name: "Bold",
|
4722
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Bold, {})
|
4723
|
-
}
|
4724
|
-
),
|
4725
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
4726
|
-
CustomIconButton,
|
4726
|
+
designSystem.IconButton,
|
4727
4727
|
{
|
4728
4728
|
onClick: () => onActionClick("Italic", editorRef),
|
4729
4729
|
label: "Italic",
|
@@ -4732,7 +4732,7 @@ const WysiwygNav = ({
|
|
4732
4732
|
}
|
4733
4733
|
),
|
4734
4734
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4735
|
-
|
4735
|
+
designSystem.IconButton,
|
4736
4736
|
{
|
4737
4737
|
onClick: () => onActionClick("Underline", editorRef),
|
4738
4738
|
label: "Underline",
|
@@ -4746,7 +4746,7 @@ const WysiwygNav = ({
|
|
4746
4746
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Content, { sideOffset: 12, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { padding: 2, children: [
|
4747
4747
|
/* @__PURE__ */ jsxRuntime.jsxs(IconButtonGroupMargin, { children: [
|
4748
4748
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4749
|
-
|
4749
|
+
designSystem.IconButton,
|
4750
4750
|
{
|
4751
4751
|
onClick: () => onActionClick("Strikethrough", editorRef, handleTogglePopover),
|
4752
4752
|
label: "Strikethrough",
|
@@ -4755,7 +4755,7 @@ const WysiwygNav = ({
|
|
4755
4755
|
}
|
4756
4756
|
),
|
4757
4757
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4758
|
-
|
4758
|
+
designSystem.IconButton,
|
4759
4759
|
{
|
4760
4760
|
onClick: () => onActionClick("BulletList", editorRef, handleTogglePopover),
|
4761
4761
|
label: "BulletList",
|
@@ -4764,7 +4764,7 @@ const WysiwygNav = ({
|
|
4764
4764
|
}
|
4765
4765
|
),
|
4766
4766
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4767
|
-
|
4767
|
+
designSystem.IconButton,
|
4768
4768
|
{
|
4769
4769
|
onClick: () => onActionClick("NumberList", editorRef, handleTogglePopover),
|
4770
4770
|
label: "NumberList",
|
@@ -4775,7 +4775,7 @@ const WysiwygNav = ({
|
|
4775
4775
|
] }),
|
4776
4776
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.IconButtonGroup, { children: [
|
4777
4777
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4778
|
-
|
4778
|
+
designSystem.IconButton,
|
4779
4779
|
{
|
4780
4780
|
onClick: () => onActionClick("Code", editorRef, handleTogglePopover),
|
4781
4781
|
label: "Code",
|
@@ -4784,7 +4784,7 @@ const WysiwygNav = ({
|
|
4784
4784
|
}
|
4785
4785
|
),
|
4786
4786
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4787
|
-
|
4787
|
+
designSystem.IconButton,
|
4788
4788
|
{
|
4789
4789
|
onClick: () => {
|
4790
4790
|
handleTogglePopover();
|
@@ -4796,7 +4796,7 @@ const WysiwygNav = ({
|
|
4796
4796
|
}
|
4797
4797
|
),
|
4798
4798
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4799
|
-
|
4799
|
+
designSystem.IconButton,
|
4800
4800
|
{
|
4801
4801
|
onClick: () => onActionClick("Link", editorRef, handleTogglePopover),
|
4802
4802
|
label: "Link",
|
@@ -4805,7 +4805,7 @@ const WysiwygNav = ({
|
|
4805
4805
|
}
|
4806
4806
|
),
|
4807
4807
|
/* @__PURE__ */ jsxRuntime.jsx(
|
4808
|
-
|
4808
|
+
designSystem.IconButton,
|
4809
4809
|
{
|
4810
4810
|
onClick: () => onActionClick("Quote", editorRef, handleTogglePopover),
|
4811
4811
|
label: "Quote",
|
@@ -4942,15 +4942,19 @@ const Wysiwyg = React__namespace.forwardRef(
|
|
4942
4942
|
);
|
4943
4943
|
const MemoizedWysiwyg = React__namespace.memo(Wysiwyg);
|
4944
4944
|
const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
|
4945
|
-
const { id } = index.useDoc();
|
4945
|
+
const { id, document: document2, collectionType } = index.useDoc();
|
4946
4946
|
const isFormDisabled = strapiAdmin.useForm("InputRenderer", (state) => state.disabled);
|
4947
4947
|
const isInDynamicZone = useDynamicZone("isInDynamicZone", (state) => state.isInDynamicZone);
|
4948
4948
|
const canCreateFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canCreateFields);
|
4949
4949
|
const canReadFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canReadFields);
|
4950
4950
|
const canUpdateFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canUpdateFields);
|
4951
4951
|
const canUserAction = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canUserAction);
|
4952
|
-
|
4953
|
-
|
4952
|
+
let idToCheck = id;
|
4953
|
+
if (collectionType === index.SINGLE_TYPES) {
|
4954
|
+
idToCheck = document2?.documentId;
|
4955
|
+
}
|
4956
|
+
const editableFields = idToCheck ? canUpdateFields : canCreateFields;
|
4957
|
+
const readableFields = idToCheck ? canReadFields : canCreateFields;
|
4954
4958
|
const canUserReadField = canUserAction(props.name, readableFields, props.type);
|
4955
4959
|
const canUserEditField = canUserAction(props.name, editableFields, props.type);
|
4956
4960
|
const fields = strapiAdmin.useStrapiApp("InputRenderer", (app) => app.fields);
|
@@ -4961,6 +4965,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
|
|
4961
4965
|
const {
|
4962
4966
|
edit: { components }
|
4963
4967
|
} = index.useDocLayout();
|
4968
|
+
const field = strapiAdmin.useField(props.name);
|
4964
4969
|
if (!visible) {
|
4965
4970
|
return null;
|
4966
4971
|
}
|
@@ -4971,553 +4976,643 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
|
|
4971
4976
|
if (attributeHasCustomFieldProperty(props.attribute)) {
|
4972
4977
|
const CustomInput = lazyComponentStore[props.attribute.customField];
|
4973
4978
|
if (CustomInput) {
|
4974
|
-
return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
|
4979
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, ...field, hint, disabled: fieldIsDisabled });
|
4980
|
+
}
|
4981
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
4982
|
+
strapiAdmin.InputRenderer,
|
4983
|
+
{
|
4984
|
+
...props,
|
4985
|
+
hint,
|
4986
|
+
type: props.attribute.customField,
|
4987
|
+
disabled: fieldIsDisabled
|
4988
|
+
}
|
4989
|
+
);
|
4990
|
+
}
|
4991
|
+
const addedInputTypes = Object.keys(fields);
|
4992
|
+
if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {
|
4993
|
+
const CustomInput = fields[props.type];
|
4994
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
|
4995
|
+
}
|
4996
|
+
switch (props.type) {
|
4997
|
+
case "blocks":
|
4998
|
+
return /* @__PURE__ */ jsxRuntime.jsx(MemoizedBlocksInput, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
|
4999
|
+
case "component":
|
5000
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5001
|
+
MemoizedComponentInput,
|
5002
|
+
{
|
5003
|
+
...props,
|
5004
|
+
hint,
|
5005
|
+
layout: components[props.attribute.component].layout,
|
5006
|
+
disabled: fieldIsDisabled,
|
5007
|
+
children: (inputProps) => /* @__PURE__ */ jsxRuntime.jsx(InputRenderer, { ...inputProps })
|
5008
|
+
}
|
5009
|
+
);
|
5010
|
+
case "dynamiczone":
|
5011
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DynamicZone, { ...props, hint, disabled: fieldIsDisabled });
|
5012
|
+
case "relation":
|
5013
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Relations.MemoizedRelationsField, { ...props, hint, disabled: fieldIsDisabled });
|
5014
|
+
case "richtext":
|
5015
|
+
return /* @__PURE__ */ jsxRuntime.jsx(MemoizedWysiwyg, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
|
5016
|
+
case "uid":
|
5017
|
+
return /* @__PURE__ */ jsxRuntime.jsx(MemoizedUIDInput, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
|
5018
|
+
case "enumeration":
|
5019
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5020
|
+
strapiAdmin.InputRenderer,
|
5021
|
+
{
|
5022
|
+
...props,
|
5023
|
+
hint,
|
5024
|
+
options: props.attribute.enum.map((value) => ({ value })),
|
5025
|
+
type: props.customField ? "custom-field" : props.type,
|
5026
|
+
disabled: fieldIsDisabled
|
5027
|
+
}
|
5028
|
+
);
|
5029
|
+
default:
|
5030
|
+
const { unique: _unique, mainField: _mainField, ...restProps } = props;
|
5031
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5032
|
+
strapiAdmin.InputRenderer,
|
5033
|
+
{
|
5034
|
+
...restProps,
|
5035
|
+
hint,
|
5036
|
+
type: props.customField ? "custom-field" : props.type,
|
5037
|
+
disabled: fieldIsDisabled
|
5038
|
+
}
|
5039
|
+
);
|
5040
|
+
}
|
5041
|
+
};
|
5042
|
+
const attributeHasCustomFieldProperty = (attribute) => "customField" in attribute && typeof attribute.customField === "string";
|
5043
|
+
const useFieldHint = (hint = void 0, attribute) => {
|
5044
|
+
const { formatMessage } = reactIntl.useIntl();
|
5045
|
+
const { maximum, minimum } = getMinMax(attribute);
|
5046
|
+
if (!maximum && !minimum) {
|
5047
|
+
return hint;
|
5048
|
+
}
|
5049
|
+
const units = !["biginteger", "integer", "number", "dynamiczone", "component"].includes(
|
5050
|
+
attribute.type
|
5051
|
+
) ? formatMessage(
|
5052
|
+
{
|
5053
|
+
id: "content-manager.form.Input.hint.character.unit",
|
5054
|
+
defaultMessage: "{maxValue, plural, one { character} other { characters}}"
|
5055
|
+
},
|
5056
|
+
{
|
5057
|
+
maxValue: Math.max(minimum || 0, maximum || 0)
|
5058
|
+
}
|
5059
|
+
) : null;
|
5060
|
+
const hasMinAndMax = typeof minimum === "number" && typeof maximum === "number";
|
5061
|
+
return formatMessage(
|
5062
|
+
{
|
5063
|
+
id: "content-manager.form.Input.hint.text",
|
5064
|
+
defaultMessage: "{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}"
|
5065
|
+
},
|
5066
|
+
{
|
5067
|
+
min: minimum,
|
5068
|
+
max: maximum,
|
5069
|
+
description: hint,
|
5070
|
+
unit: units,
|
5071
|
+
divider: hasMinAndMax ? formatMessage({
|
5072
|
+
id: "content-manager.form.Input.hint.minMaxDivider",
|
5073
|
+
defaultMessage: " / "
|
5074
|
+
}) : null,
|
5075
|
+
br: /* @__PURE__ */ jsxRuntime.jsx("br", {})
|
5076
|
+
}
|
5077
|
+
);
|
5078
|
+
};
|
5079
|
+
const getMinMax = (attribute) => {
|
5080
|
+
if ("min" in attribute || "max" in attribute) {
|
5081
|
+
return {
|
5082
|
+
maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : void 0,
|
5083
|
+
minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : void 0
|
5084
|
+
};
|
5085
|
+
} else if ("maxLength" in attribute || "minLength" in attribute) {
|
5086
|
+
return { maximum: attribute.maxLength, minimum: attribute.minLength };
|
5087
|
+
} else {
|
5088
|
+
return { maximum: void 0, minimum: void 0 };
|
5089
|
+
}
|
5090
|
+
};
|
5091
|
+
const MemoizedInputRenderer = React.memo(InputRenderer);
|
5092
|
+
const RESPONSIVE_CONTAINER_BREAKPOINTS = {
|
5093
|
+
sm: "27.5rem"
|
5094
|
+
// 440px
|
5095
|
+
};
|
5096
|
+
const ResponsiveGridRoot = styledComponents.styled(designSystem.Grid.Root)`
|
5097
|
+
container-type: inline-size;
|
5098
|
+
`;
|
5099
|
+
const ResponsiveGridItem = styledComponents.styled(designSystem.Grid.Item)`
|
5100
|
+
grid-column: span 12;
|
5101
|
+
|
5102
|
+
@container (min-width: ${RESPONSIVE_CONTAINER_BREAKPOINTS.sm}) {
|
5103
|
+
${({ col }) => col && `grid-column: span ${col};`}
|
5104
|
+
}
|
5105
|
+
`;
|
5106
|
+
const FormLayout = ({ layout }) => {
|
5107
|
+
const { formatMessage } = reactIntl.useIntl();
|
5108
|
+
const { model } = index.useDoc();
|
5109
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((panel, index2) => {
|
5110
|
+
if (panel.some((row) => row.some((field) => field.type === "dynamiczone"))) {
|
5111
|
+
const [row] = panel;
|
5112
|
+
const [field] = row;
|
5113
|
+
const fieldWithTranslatedLabel = {
|
5114
|
+
...field,
|
5115
|
+
label: formatMessage({
|
5116
|
+
id: `content-manager.content-types.${model}.${field.name}`,
|
5117
|
+
defaultMessage: field.label
|
5118
|
+
})
|
5119
|
+
};
|
5120
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel }) }) }, field.name);
|
5121
|
+
}
|
5122
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5123
|
+
designSystem.Box,
|
5124
|
+
{
|
5125
|
+
hasRadius: true,
|
5126
|
+
background: "neutral0",
|
5127
|
+
shadow: "tableShadow",
|
5128
|
+
paddingLeft: 6,
|
5129
|
+
paddingRight: 6,
|
5130
|
+
paddingTop: 6,
|
5131
|
+
paddingBottom: 6,
|
5132
|
+
borderColor: "neutral150",
|
5133
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsxRuntime.jsx(ResponsiveGridRoot, { gap: 4, children: row.map(({ size, ...field }) => {
|
5134
|
+
const fieldWithTranslatedLabel = {
|
5135
|
+
...field,
|
5136
|
+
label: formatMessage({
|
5137
|
+
id: `content-manager.content-types.${model}.${field.name}`,
|
5138
|
+
defaultMessage: field.label
|
5139
|
+
})
|
5140
|
+
};
|
5141
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5142
|
+
ResponsiveGridItem,
|
5143
|
+
{
|
5144
|
+
col: size,
|
5145
|
+
s: 12,
|
5146
|
+
xs: 12,
|
5147
|
+
direction: "column",
|
5148
|
+
alignItems: "stretch",
|
5149
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel })
|
5150
|
+
},
|
5151
|
+
field.name
|
5152
|
+
);
|
5153
|
+
}) }, gridRowIndex)) })
|
5154
|
+
},
|
5155
|
+
index2
|
5156
|
+
);
|
5157
|
+
}) });
|
5158
|
+
};
|
5159
|
+
const NonRepeatableComponent = ({
|
5160
|
+
attribute,
|
5161
|
+
name: name2,
|
5162
|
+
children,
|
5163
|
+
layout
|
5164
|
+
}) => {
|
5165
|
+
const { formatMessage } = reactIntl.useIntl();
|
5166
|
+
const { value } = strapiAdmin.useField(name2);
|
5167
|
+
const level = Relations.useComponent("NonRepeatableComponent", (state) => state.level);
|
5168
|
+
const isNested = level > 0;
|
5169
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Relations.ComponentProvider, { id: value?.id, uid: attribute.component, level: level + 1, type: "component", children: /* @__PURE__ */ jsxRuntime.jsx(
|
5170
|
+
designSystem.Box,
|
5171
|
+
{
|
5172
|
+
background: "neutral100",
|
5173
|
+
paddingLeft: 6,
|
5174
|
+
paddingRight: 6,
|
5175
|
+
paddingTop: 6,
|
5176
|
+
paddingBottom: 6,
|
5177
|
+
hasRadius: isNested,
|
5178
|
+
borderColor: isNested ? "neutral200" : void 0,
|
5179
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((row, index2) => {
|
5180
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ResponsiveGridRoot, { gap: 4, children: row.map(({ size, ...field }) => {
|
5181
|
+
const completeFieldName = `${name2}.${field.name}`;
|
5182
|
+
const translatedLabel = formatMessage({
|
5183
|
+
id: `content-manager.components.${attribute.component}.${field.name}`,
|
5184
|
+
defaultMessage: field.label
|
5185
|
+
});
|
5186
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5187
|
+
ResponsiveGridItem,
|
5188
|
+
{
|
5189
|
+
col: size,
|
5190
|
+
s: 12,
|
5191
|
+
xs: 12,
|
5192
|
+
direction: "column",
|
5193
|
+
alignItems: "stretch",
|
5194
|
+
children: children({ ...field, label: translatedLabel, name: completeFieldName })
|
5195
|
+
},
|
5196
|
+
completeFieldName
|
5197
|
+
);
|
5198
|
+
}) }, index2);
|
5199
|
+
}) })
|
5200
|
+
}
|
5201
|
+
) });
|
5202
|
+
};
|
5203
|
+
const RepeatableComponent = ({
|
5204
|
+
attribute,
|
5205
|
+
disabled,
|
5206
|
+
name: name2,
|
5207
|
+
mainField,
|
5208
|
+
children,
|
5209
|
+
layout
|
5210
|
+
}) => {
|
5211
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
5212
|
+
const { formatMessage } = reactIntl.useIntl();
|
5213
|
+
const { search: searchString } = reactRouterDom.useLocation();
|
5214
|
+
const search = React__namespace.useMemo(() => new URLSearchParams(searchString), [searchString]);
|
5215
|
+
const { components } = index.useDoc();
|
5216
|
+
const {
|
5217
|
+
value = [],
|
5218
|
+
error,
|
5219
|
+
rawError
|
5220
|
+
} = strapiAdmin.useField(name2);
|
5221
|
+
const addFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.addFieldRow);
|
5222
|
+
const moveFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.moveFieldRow);
|
5223
|
+
const removeFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.removeFieldRow);
|
5224
|
+
const { max = Infinity } = attribute;
|
5225
|
+
const [collapseToOpen, setCollapseToOpen] = React__namespace.useState("");
|
5226
|
+
const [liveText, setLiveText] = React__namespace.useState("");
|
5227
|
+
React__namespace.useEffect(() => {
|
5228
|
+
const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
|
5229
|
+
const hasNestedValue = value && Array.isArray(value) && value.length > 0;
|
5230
|
+
if (hasNestedErrors && hasNestedValue) {
|
5231
|
+
const errorOpenItems = rawError.map((_, idx) => {
|
5232
|
+
return value[idx] ? value[idx].__temp_key__ : null;
|
5233
|
+
}).filter((value2) => !!value2);
|
5234
|
+
if (errorOpenItems && errorOpenItems.length > 0) {
|
5235
|
+
setCollapseToOpen((collapseToOpen2) => {
|
5236
|
+
if (!errorOpenItems.includes(collapseToOpen2)) {
|
5237
|
+
return errorOpenItems[0];
|
5238
|
+
}
|
5239
|
+
return collapseToOpen2;
|
5240
|
+
});
|
5241
|
+
}
|
4975
5242
|
}
|
4976
|
-
|
4977
|
-
|
4978
|
-
|
4979
|
-
|
4980
|
-
|
4981
|
-
|
4982
|
-
disabled: fieldIsDisabled
|
5243
|
+
}, [rawError, value]);
|
5244
|
+
const componentTmpKeyWithFocussedField = React__namespace.useMemo(() => {
|
5245
|
+
if (search.has("field")) {
|
5246
|
+
const fieldParam = search.get("field");
|
5247
|
+
if (!fieldParam) {
|
5248
|
+
return void 0;
|
4983
5249
|
}
|
5250
|
+
const [, path] = fieldParam.split(`${name2}.`);
|
5251
|
+
if (objects.getIn(value, path, void 0) !== void 0) {
|
5252
|
+
const [subpath] = path.split(".");
|
5253
|
+
return objects.getIn(value, subpath, void 0)?.__temp_key__;
|
5254
|
+
}
|
5255
|
+
}
|
5256
|
+
return void 0;
|
5257
|
+
}, [search, name2, value]);
|
5258
|
+
const prevValue = usePrev.usePrev(value);
|
5259
|
+
React__namespace.useEffect(() => {
|
5260
|
+
if (prevValue && prevValue.length < value.length) {
|
5261
|
+
setCollapseToOpen(value[value.length - 1].__temp_key__);
|
5262
|
+
}
|
5263
|
+
}, [value, prevValue]);
|
5264
|
+
React__namespace.useEffect(() => {
|
5265
|
+
if (typeof componentTmpKeyWithFocussedField === "string") {
|
5266
|
+
setCollapseToOpen(componentTmpKeyWithFocussedField);
|
5267
|
+
}
|
5268
|
+
}, [componentTmpKeyWithFocussedField]);
|
5269
|
+
const toggleCollapses = () => {
|
5270
|
+
setCollapseToOpen("");
|
5271
|
+
};
|
5272
|
+
const handleClick = () => {
|
5273
|
+
if (value.length < max) {
|
5274
|
+
const schema = components[attribute.component];
|
5275
|
+
const form = index.createDefaultForm(schema, components);
|
5276
|
+
const data = index.transformDocument(schema, components)(form);
|
5277
|
+
addFieldRow(name2, data);
|
5278
|
+
} else if (value.length >= max) {
|
5279
|
+
toggleNotification({
|
5280
|
+
type: "info",
|
5281
|
+
message: formatMessage({
|
5282
|
+
id: index.getTranslation("components.notification.info.maximum-requirement")
|
5283
|
+
})
|
5284
|
+
});
|
5285
|
+
}
|
5286
|
+
};
|
5287
|
+
const handleMoveComponentField = (newIndex, currentIndex) => {
|
5288
|
+
setLiveText(
|
5289
|
+
formatMessage(
|
5290
|
+
{
|
5291
|
+
id: index.getTranslation("dnd.reorder"),
|
5292
|
+
defaultMessage: "{item}, moved. New position in list: {position}."
|
5293
|
+
},
|
5294
|
+
{
|
5295
|
+
item: `${name2}.${currentIndex}`,
|
5296
|
+
position: getItemPos(newIndex)
|
5297
|
+
}
|
5298
|
+
)
|
4984
5299
|
);
|
4985
|
-
|
4986
|
-
|
4987
|
-
|
4988
|
-
|
4989
|
-
|
4990
|
-
}
|
4991
|
-
|
4992
|
-
|
4993
|
-
|
4994
|
-
case "component":
|
4995
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
4996
|
-
MemoizedComponentInput,
|
5300
|
+
moveFieldRow(name2, currentIndex, newIndex);
|
5301
|
+
};
|
5302
|
+
const handleValueChange = (key) => {
|
5303
|
+
setCollapseToOpen(key);
|
5304
|
+
};
|
5305
|
+
const getItemPos = (index2) => `${index2 + 1} of ${value.length}`;
|
5306
|
+
const handleCancel = (index$1) => {
|
5307
|
+
setLiveText(
|
5308
|
+
formatMessage(
|
4997
5309
|
{
|
4998
|
-
|
4999
|
-
|
5000
|
-
|
5001
|
-
|
5002
|
-
|
5310
|
+
id: index.getTranslation("dnd.cancel-item"),
|
5311
|
+
defaultMessage: "{item}, dropped. Re-order cancelled."
|
5312
|
+
},
|
5313
|
+
{
|
5314
|
+
item: `${name2}.${index$1}`
|
5003
5315
|
}
|
5004
|
-
)
|
5005
|
-
|
5006
|
-
|
5007
|
-
|
5008
|
-
|
5009
|
-
|
5010
|
-
return /* @__PURE__ */ jsxRuntime.jsx(MemoizedWysiwyg, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
|
5011
|
-
case "uid":
|
5012
|
-
return /* @__PURE__ */ jsxRuntime.jsx(MemoizedUIDInput, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
|
5013
|
-
case "enumeration":
|
5014
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
5015
|
-
strapiAdmin.InputRenderer,
|
5316
|
+
)
|
5317
|
+
);
|
5318
|
+
};
|
5319
|
+
const handleGrabItem = (index$1) => {
|
5320
|
+
setLiveText(
|
5321
|
+
formatMessage(
|
5016
5322
|
{
|
5017
|
-
|
5018
|
-
|
5019
|
-
|
5020
|
-
|
5021
|
-
|
5323
|
+
id: index.getTranslation("dnd.grab-item"),
|
5324
|
+
defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`
|
5325
|
+
},
|
5326
|
+
{
|
5327
|
+
item: `${name2}.${index$1}`,
|
5328
|
+
position: getItemPos(index$1)
|
5022
5329
|
}
|
5023
|
-
)
|
5024
|
-
|
5025
|
-
|
5026
|
-
|
5027
|
-
|
5330
|
+
)
|
5331
|
+
);
|
5332
|
+
};
|
5333
|
+
const handleDropItem = (index$1) => {
|
5334
|
+
setLiveText(
|
5335
|
+
formatMessage(
|
5028
5336
|
{
|
5029
|
-
|
5030
|
-
|
5031
|
-
|
5032
|
-
|
5337
|
+
id: index.getTranslation("dnd.drop-item"),
|
5338
|
+
defaultMessage: `{item}, dropped. Final position in list: {position}.`
|
5339
|
+
},
|
5340
|
+
{
|
5341
|
+
item: `${name2}.${index$1}`,
|
5342
|
+
position: getItemPos(index$1)
|
5033
5343
|
}
|
5034
|
-
)
|
5344
|
+
)
|
5345
|
+
);
|
5346
|
+
};
|
5347
|
+
const ariaDescriptionId = React__namespace.useId();
|
5348
|
+
const level = Relations.useComponent("RepeatableComponent", (state) => state.level);
|
5349
|
+
if (value.length === 0) {
|
5350
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Initializer, { disabled, name: name2, onClick: handleClick });
|
5035
5351
|
}
|
5352
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { hasRadius: true, children: [
|
5353
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { id: ariaDescriptionId, children: formatMessage({
|
5354
|
+
id: index.getTranslation("dnd.instructions"),
|
5355
|
+
defaultMessage: `Press spacebar to grab and re-order`
|
5356
|
+
}) }),
|
5357
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { "aria-live": "assertive", children: liveText }),
|
5358
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
5359
|
+
AccordionRoot,
|
5360
|
+
{
|
5361
|
+
$error: error,
|
5362
|
+
value: collapseToOpen,
|
5363
|
+
onValueChange: handleValueChange,
|
5364
|
+
"aria-describedby": ariaDescriptionId,
|
5365
|
+
children: [
|
5366
|
+
value.map(({ __temp_key__: key, id }, index2) => {
|
5367
|
+
const nameWithIndex = `${name2}.${index2}`;
|
5368
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5369
|
+
Relations.ComponentProvider,
|
5370
|
+
{
|
5371
|
+
id,
|
5372
|
+
uid: attribute.component,
|
5373
|
+
level: level + 1,
|
5374
|
+
type: "repeatable",
|
5375
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
5376
|
+
Component,
|
5377
|
+
{
|
5378
|
+
disabled,
|
5379
|
+
name: nameWithIndex,
|
5380
|
+
attribute,
|
5381
|
+
index: index2,
|
5382
|
+
mainField,
|
5383
|
+
onMoveItem: handleMoveComponentField,
|
5384
|
+
onDeleteComponent: () => {
|
5385
|
+
removeFieldRow(name2, index2);
|
5386
|
+
toggleCollapses();
|
5387
|
+
},
|
5388
|
+
toggleCollapses,
|
5389
|
+
onCancel: handleCancel,
|
5390
|
+
onDropItem: handleDropItem,
|
5391
|
+
onGrabItem: handleGrabItem,
|
5392
|
+
__temp_key__: key,
|
5393
|
+
children: layout.map((row, index22) => {
|
5394
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ResponsiveGridRoot, { gap: 4, children: row.map(({ size, ...field }) => {
|
5395
|
+
const completeFieldName = `${nameWithIndex}.${field.name}`;
|
5396
|
+
const translatedLabel = formatMessage({
|
5397
|
+
id: `content-manager.components.${attribute.component}.${field.name}`,
|
5398
|
+
defaultMessage: field.label
|
5399
|
+
});
|
5400
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5401
|
+
ResponsiveGridItem,
|
5402
|
+
{
|
5403
|
+
col: size,
|
5404
|
+
s: 12,
|
5405
|
+
xs: 12,
|
5406
|
+
direction: "column",
|
5407
|
+
alignItems: "stretch",
|
5408
|
+
children: children({
|
5409
|
+
...field,
|
5410
|
+
label: translatedLabel,
|
5411
|
+
name: completeFieldName
|
5412
|
+
})
|
5413
|
+
},
|
5414
|
+
completeFieldName
|
5415
|
+
);
|
5416
|
+
}) }, index22);
|
5417
|
+
})
|
5418
|
+
}
|
5419
|
+
)
|
5420
|
+
},
|
5421
|
+
key
|
5422
|
+
);
|
5423
|
+
}),
|
5424
|
+
/* @__PURE__ */ jsxRuntime.jsx(TextButtonCustom, { disabled, onClick: handleClick, startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Plus, {}), children: formatMessage({
|
5425
|
+
id: index.getTranslation("containers.EditView.add.new-entry"),
|
5426
|
+
defaultMessage: "Add an entry"
|
5427
|
+
}) })
|
5428
|
+
]
|
5429
|
+
}
|
5430
|
+
)
|
5431
|
+
] });
|
5036
5432
|
};
|
5037
|
-
const
|
5038
|
-
|
5039
|
-
|
5040
|
-
|
5041
|
-
|
5042
|
-
|
5043
|
-
|
5044
|
-
|
5045
|
-
|
5046
|
-
)
|
5047
|
-
|
5048
|
-
|
5049
|
-
|
5050
|
-
|
5051
|
-
|
5052
|
-
|
5053
|
-
|
5054
|
-
) : null;
|
5055
|
-
const hasMinAndMax = typeof minimum === "number" && typeof maximum === "number";
|
5056
|
-
return formatMessage(
|
5057
|
-
{
|
5058
|
-
id: "content-manager.form.Input.hint.text",
|
5059
|
-
defaultMessage: "{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}"
|
5060
|
-
},
|
5061
|
-
{
|
5062
|
-
min: minimum,
|
5063
|
-
max: maximum,
|
5064
|
-
description: hint,
|
5065
|
-
unit: units,
|
5066
|
-
divider: hasMinAndMax ? formatMessage({
|
5067
|
-
id: "content-manager.form.Input.hint.minMaxDivider",
|
5068
|
-
defaultMessage: " / "
|
5069
|
-
}) : null,
|
5070
|
-
br: /* @__PURE__ */ jsxRuntime.jsx("br", {})
|
5433
|
+
const AccordionRoot = styledComponents.styled(designSystem.Accordion.Root)`
|
5434
|
+
border: 1px solid
|
5435
|
+
${({ theme, $error }) => $error ? theme.colors.danger600 : theme.colors.neutral200};
|
5436
|
+
`;
|
5437
|
+
const TextButtonCustom = styledComponents.styled(designSystem.TextButton)`
|
5438
|
+
width: 100%;
|
5439
|
+
display: flex;
|
5440
|
+
justify-content: center;
|
5441
|
+
border-top: 1px solid ${({ theme }) => theme.colors.neutral200};
|
5442
|
+
padding-inline: ${(props) => props.theme.spaces[6]};
|
5443
|
+
padding-block: ${(props) => props.theme.spaces[3]};
|
5444
|
+
|
5445
|
+
&:not([disabled]) {
|
5446
|
+
cursor: pointer;
|
5447
|
+
|
5448
|
+
&:hover {
|
5449
|
+
background-color: ${(props) => props.theme.colors.primary100};
|
5071
5450
|
}
|
5072
|
-
);
|
5073
|
-
};
|
5074
|
-
const getMinMax = (attribute) => {
|
5075
|
-
if ("min" in attribute || "max" in attribute) {
|
5076
|
-
return {
|
5077
|
-
maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : void 0,
|
5078
|
-
minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : void 0
|
5079
|
-
};
|
5080
|
-
} else if ("maxLength" in attribute || "minLength" in attribute) {
|
5081
|
-
return { maximum: attribute.maxLength, minimum: attribute.minLength };
|
5082
|
-
} else {
|
5083
|
-
return { maximum: void 0, minimum: void 0 };
|
5084
5451
|
}
|
5085
|
-
|
5086
|
-
|
5087
|
-
|
5088
|
-
|
5452
|
+
|
5453
|
+
span {
|
5454
|
+
font-weight: 600;
|
5455
|
+
font-size: 1.4rem;
|
5456
|
+
line-height: 2.4rem;
|
5457
|
+
}
|
5458
|
+
|
5459
|
+
@media (prefers-reduced-motion: no-preference) {
|
5460
|
+
transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};
|
5461
|
+
}
|
5462
|
+
`;
|
5463
|
+
const Component = ({
|
5089
5464
|
disabled,
|
5090
5465
|
index: index$1,
|
5091
5466
|
name: name2,
|
5092
|
-
|
5093
|
-
|
5094
|
-
|
5095
|
-
|
5096
|
-
|
5097
|
-
|
5098
|
-
|
5467
|
+
mainField = {
|
5468
|
+
name: "id",
|
5469
|
+
type: "integer"
|
5470
|
+
},
|
5471
|
+
children,
|
5472
|
+
onDeleteComponent,
|
5473
|
+
toggleCollapses,
|
5474
|
+
__temp_key__,
|
5475
|
+
...dragProps
|
5099
5476
|
}) => {
|
5100
5477
|
const { formatMessage } = reactIntl.useIntl();
|
5101
|
-
const
|
5102
|
-
|
5103
|
-
|
5104
|
-
|
5105
|
-
const
|
5106
|
-
const { mainField } = components[componentUid]?.settings ?? { mainField: "id" };
|
5107
|
-
const mainFieldValue = objects.getIn(formValues, `${name2}.${index$1}.${mainField}`);
|
5108
|
-
const displayedValue = mainField === "id" || !mainFieldValue ? "" : String(mainFieldValue).trim();
|
5109
|
-
const mainValue = displayedValue.length > 0 ? `- ${displayedValue}` : displayedValue;
|
5110
|
-
return mainValue;
|
5111
|
-
}, [componentUid, components, formValues, name2, index$1]);
|
5112
|
-
const { icon, displayName } = React__namespace.useMemo(() => {
|
5113
|
-
const [category] = componentUid.split(".");
|
5114
|
-
const { icon: icon2, displayName: displayName2 } = (dynamicComponentsByCategory[category] ?? []).find(
|
5115
|
-
(component) => component.uid === componentUid
|
5116
|
-
) ?? { icon: null, displayName: null };
|
5117
|
-
return { icon: icon2, displayName: displayName2 };
|
5118
|
-
}, [componentUid, dynamicComponentsByCategory]);
|
5478
|
+
const displayValue = strapiAdmin.useForm("RepeatableComponent", (state) => {
|
5479
|
+
return objects.getIn(state.values, [...name2.split("."), mainField.name]);
|
5480
|
+
});
|
5481
|
+
const accordionRef = React__namespace.useRef(null);
|
5482
|
+
const componentKey = name2.split(".").slice(0, -1).join(".");
|
5119
5483
|
const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop.useDragAndDrop(!disabled, {
|
5120
|
-
type: `${useDragAndDrop.ItemTypes.
|
5484
|
+
type: `${useDragAndDrop.ItemTypes.COMPONENT}_${componentKey}`,
|
5121
5485
|
index: index$1,
|
5122
5486
|
item: {
|
5123
5487
|
index: index$1,
|
5124
|
-
displayedValue:
|
5125
|
-
icon
|
5488
|
+
displayedValue: displayValue
|
5126
5489
|
},
|
5127
|
-
|
5128
|
-
|
5129
|
-
|
5130
|
-
|
5490
|
+
onStart() {
|
5491
|
+
toggleCollapses();
|
5492
|
+
},
|
5493
|
+
...dragProps
|
5131
5494
|
});
|
5132
5495
|
React__namespace.useEffect(() => {
|
5133
5496
|
dragPreviewRef(reactDndHtml5Backend.getEmptyImage(), { captureDraggingState: false });
|
5134
5497
|
}, [dragPreviewRef, index$1]);
|
5135
|
-
const
|
5136
|
-
const
|
5137
|
-
|
5138
|
-
|
5139
|
-
|
5140
|
-
|
5141
|
-
|
5498
|
+
const composedAccordionRefs = designSystem.useComposedRefs(accordionRef, dragRef);
|
5499
|
+
const composedBoxRefs = designSystem.useComposedRefs(
|
5500
|
+
boxRef,
|
5501
|
+
dropRef
|
5502
|
+
);
|
5503
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview, {}) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { ref: composedBoxRefs, value: __temp_key__, children: [
|
5504
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Header, { children: [
|
5505
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { children: displayValue }),
|
5506
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Actions, { children: [
|
5507
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
5508
|
+
designSystem.IconButton,
|
5142
5509
|
{
|
5143
|
-
|
5144
|
-
|
5145
|
-
|
5146
|
-
|
5510
|
+
variant: "ghost",
|
5511
|
+
onClick: onDeleteComponent,
|
5512
|
+
label: formatMessage({
|
5513
|
+
id: index.getTranslation("containers.Edit.delete"),
|
5514
|
+
defaultMessage: "Delete"
|
5515
|
+
}),
|
5516
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {})
|
5517
|
+
}
|
5147
5518
|
),
|
5148
|
-
onClick: onRemoveComponentClick,
|
5149
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {})
|
5150
|
-
}
|
5151
|
-
),
|
5152
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
5153
|
-
designSystem.IconButton,
|
5154
|
-
{
|
5155
|
-
borderWidth: 0,
|
5156
|
-
onClick: (e) => e.stopPropagation(),
|
5157
|
-
"data-handler-id": handlerId,
|
5158
|
-
ref: dragRef,
|
5159
|
-
label: formatMessage({
|
5160
|
-
id: index.getTranslation("components.DragHandle-label"),
|
5161
|
-
defaultMessage: "Drag"
|
5162
|
-
}),
|
5163
|
-
onKeyDown: handleKeyDown,
|
5164
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {})
|
5165
|
-
}
|
5166
|
-
),
|
5167
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
|
5168
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Trigger, { size: "S", endIcon: null, paddingLeft: 2, paddingRight: 2, children: [
|
5169
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icons.More, { "aria-hidden": true, focusable: false }),
|
5170
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { tag: "span", children: formatMessage({
|
5171
|
-
id: index.getTranslation("components.DynamicZone.more-actions"),
|
5172
|
-
defaultMessage: "More actions"
|
5173
|
-
}) })
|
5174
|
-
] }),
|
5175
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { children: [
|
5176
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.SubRoot, { children: [
|
5177
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubTrigger, { children: formatMessage({
|
5178
|
-
id: index.getTranslation("components.DynamicZone.add-item-above"),
|
5179
|
-
defaultMessage: "Add component above"
|
5180
|
-
}) }),
|
5181
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubContent, { children: Object.entries(dynamicComponentsByCategory).map(([category, components2]) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
5182
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Label, { children: category }),
|
5183
|
-
components2.map(({ displayName: displayName2, uid }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MenuItem, { onSelect: () => onAddComponent(uid, index$1), children: displayName2 }, componentUid))
|
5184
|
-
] }, category)) })
|
5185
|
-
] }),
|
5186
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.SubRoot, { children: [
|
5187
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubTrigger, { children: formatMessage({
|
5188
|
-
id: index.getTranslation("components.DynamicZone.add-item-below"),
|
5189
|
-
defaultMessage: "Add component below"
|
5190
|
-
}) }),
|
5191
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.SubContent, { children: Object.entries(dynamicComponentsByCategory).map(([category, components2]) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
5192
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Label, { children: category }),
|
5193
|
-
components2.map(({ displayName: displayName2, uid }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.MenuItem, { onSelect: () => onAddComponent(uid, index$1 + 1), children: displayName2 }, componentUid))
|
5194
|
-
] }, category)) })
|
5195
|
-
] })
|
5196
|
-
] })
|
5197
|
-
] })
|
5198
|
-
] });
|
5199
|
-
const accordionTitle = title ? `${displayName} ${title}` : displayName;
|
5200
|
-
const accordionValue = React__namespace.useId();
|
5201
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ComponentContainer, { tag: "li", width: "100%", children: [
|
5202
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Rectangle, { background: "neutral200" }) }),
|
5203
|
-
/* @__PURE__ */ jsxRuntime.jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: accordionValue, children: [
|
5204
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Header, { children: [
|
5205
5519
|
/* @__PURE__ */ jsxRuntime.jsx(
|
5206
|
-
designSystem.
|
5520
|
+
designSystem.IconButton,
|
5207
5521
|
{
|
5208
|
-
|
5209
|
-
|
5522
|
+
ref: composedAccordionRefs,
|
5523
|
+
variant: "ghost",
|
5524
|
+
onClick: (e) => e.stopPropagation(),
|
5525
|
+
"data-handler-id": handlerId,
|
5526
|
+
label: formatMessage({
|
5527
|
+
id: index.getTranslation("components.DragHandle-label"),
|
5528
|
+
defaultMessage: "Drag"
|
5529
|
+
}),
|
5530
|
+
onKeyDown: handleKeyDown,
|
5531
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {})
|
5210
5532
|
}
|
5211
|
-
)
|
5212
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Actions, { children: accordionActions })
|
5213
|
-
] }),
|
5214
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
|
5215
|
-
const fieldName = `${name2}.${index$1}.${field.name}`;
|
5216
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, s: 12, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...field, name: fieldName }) }, fieldName);
|
5217
|
-
}) }, rowInd)) }) }) })
|
5218
|
-
] }) }) })
|
5219
|
-
] });
|
5220
|
-
};
|
5221
|
-
const StyledBox = styledComponents.styled(designSystem.Box)`
|
5222
|
-
> div:first-child {
|
5223
|
-
box-shadow: ${({ theme }) => theme.shadows.tableShadow};
|
5224
|
-
}
|
5225
|
-
`;
|
5226
|
-
const AccordionContentRadius = styledComponents.styled(designSystem.Box)`
|
5227
|
-
border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};
|
5228
|
-
`;
|
5229
|
-
const Rectangle = styledComponents.styled(designSystem.Box)`
|
5230
|
-
width: ${({ theme }) => theme.spaces[2]};
|
5231
|
-
height: ${({ theme }) => theme.spaces[4]};
|
5232
|
-
`;
|
5233
|
-
const Preview = styledComponents.styled.span`
|
5234
|
-
display: block;
|
5235
|
-
background-color: ${({ theme }) => theme.colors.primary100};
|
5236
|
-
outline: 1px dashed ${({ theme }) => theme.colors.primary500};
|
5237
|
-
outline-offset: -1px;
|
5238
|
-
padding: ${({ theme }) => theme.spaces[6]};
|
5239
|
-
`;
|
5240
|
-
const ComponentContainer = styledComponents.styled(designSystem.Box)`
|
5241
|
-
list-style: none;
|
5242
|
-
padding: 0;
|
5243
|
-
margin: 0;
|
5244
|
-
`;
|
5245
|
-
const DynamicZoneLabel = ({
|
5246
|
-
hint,
|
5247
|
-
label,
|
5248
|
-
labelAction,
|
5249
|
-
name: name2,
|
5250
|
-
numberOfComponents = 0,
|
5251
|
-
required
|
5252
|
-
}) => {
|
5253
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
5254
|
-
designSystem.Box,
|
5255
|
-
{
|
5256
|
-
paddingTop: 3,
|
5257
|
-
paddingBottom: 3,
|
5258
|
-
paddingRight: 4,
|
5259
|
-
paddingLeft: 4,
|
5260
|
-
borderRadius: "26px",
|
5261
|
-
background: "neutral0",
|
5262
|
-
shadow: "filterShadow",
|
5263
|
-
color: "neutral500",
|
5264
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", justifyContent: "center", children: [
|
5265
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { maxWidth: "35.6rem", children: [
|
5266
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", textColor: "neutral600", fontWeight: "bold", ellipsis: true, children: [
|
5267
|
-
label || name2,
|
5268
|
-
" "
|
5269
|
-
] }),
|
5270
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", textColor: "neutral600", fontWeight: "bold", children: [
|
5271
|
-
"(",
|
5272
|
-
numberOfComponents,
|
5273
|
-
")"
|
5274
|
-
] }),
|
5275
|
-
required && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "danger600", children: "*" }),
|
5276
|
-
labelAction && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 1, children: labelAction })
|
5277
|
-
] }),
|
5278
|
-
hint && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 1, maxWidth: "35.6rem", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", ellipsis: true, children: hint }) })
|
5533
|
+
)
|
5279
5534
|
] })
|
5280
|
-
}
|
5281
|
-
|
5535
|
+
] }),
|
5536
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
5537
|
+
designSystem.Flex,
|
5538
|
+
{
|
5539
|
+
direction: "column",
|
5540
|
+
alignItems: "stretch",
|
5541
|
+
background: "neutral100",
|
5542
|
+
padding: 6,
|
5543
|
+
gap: 6,
|
5544
|
+
children
|
5545
|
+
}
|
5546
|
+
) })
|
5547
|
+
] }) });
|
5548
|
+
};
|
5549
|
+
const Preview = () => {
|
5550
|
+
return /* @__PURE__ */ jsxRuntime.jsx(StyledSpan, { tag: "span", padding: 6, background: "primary100" });
|
5282
5551
|
};
|
5283
|
-
const
|
5284
|
-
|
5285
|
-
{
|
5286
|
-
|
5287
|
-
|
5288
|
-
|
5289
|
-
const DynamicZone = ({
|
5290
|
-
attribute,
|
5291
|
-
disabled: disabledProp,
|
5292
|
-
hint,
|
5552
|
+
const StyledSpan = styledComponents.styled(designSystem.Box)`
|
5553
|
+
display: block;
|
5554
|
+
outline: 1px dashed ${({ theme }) => theme.colors.primary500};
|
5555
|
+
outline-offset: -1px;
|
5556
|
+
`;
|
5557
|
+
const ComponentInput = ({
|
5293
5558
|
label,
|
5294
|
-
|
5559
|
+
required,
|
5295
5560
|
name: name2,
|
5296
|
-
|
5561
|
+
attribute,
|
5562
|
+
disabled,
|
5563
|
+
labelAction,
|
5564
|
+
...props
|
5297
5565
|
}) => {
|
5298
|
-
const { max = Infinity, min = -Infinity } = attribute ?? {};
|
5299
|
-
const [addComponentIsOpen, setAddComponentIsOpen] = React__namespace.useState(false);
|
5300
|
-
const [liveText, setLiveText] = React__namespace.useState("");
|
5301
|
-
const { components, isLoading } = index.useDoc();
|
5302
|
-
const disabled = disabledProp || isLoading;
|
5303
|
-
const { addFieldRow, removeFieldRow, moveFieldRow } = strapiAdmin.useForm(
|
5304
|
-
"DynamicZone",
|
5305
|
-
({ addFieldRow: addFieldRow2, removeFieldRow: removeFieldRow2, moveFieldRow: moveFieldRow2 }) => ({
|
5306
|
-
addFieldRow: addFieldRow2,
|
5307
|
-
removeFieldRow: removeFieldRow2,
|
5308
|
-
moveFieldRow: moveFieldRow2
|
5309
|
-
})
|
5310
|
-
);
|
5311
|
-
const { value = [], error } = strapiAdmin.useField(name2);
|
5312
|
-
const dynamicComponentsByCategory = React__namespace.useMemo(() => {
|
5313
|
-
return attribute.components.reduce((acc, componentUid) => {
|
5314
|
-
const { category, info } = components[componentUid] ?? { info: {} };
|
5315
|
-
const component = { uid: componentUid, displayName: info.displayName, icon: info.icon };
|
5316
|
-
if (!acc[category]) {
|
5317
|
-
acc[category] = [];
|
5318
|
-
}
|
5319
|
-
acc[category] = [...acc[category], component];
|
5320
|
-
return acc;
|
5321
|
-
}, {});
|
5322
|
-
}, [attribute.components, components]);
|
5323
5566
|
const { formatMessage } = reactIntl.useIntl();
|
5324
|
-
const
|
5325
|
-
const
|
5326
|
-
const
|
5327
|
-
|
5328
|
-
const schema = components[
|
5329
|
-
const form = createDefaultForm(schema, components);
|
5330
|
-
const
|
5331
|
-
|
5332
|
-
__component: uid
|
5333
|
-
}));
|
5334
|
-
const data = transformations(form);
|
5335
|
-
addFieldRow(name2, data, position);
|
5336
|
-
};
|
5337
|
-
const handleClickOpenPicker = () => {
|
5338
|
-
if (dynamicDisplayedComponentsLength < max) {
|
5339
|
-
setAddComponentIsOpen((prev) => !prev);
|
5340
|
-
} else {
|
5341
|
-
toggleNotification({
|
5342
|
-
type: "info",
|
5343
|
-
message: formatMessage({
|
5344
|
-
id: index.getTranslation("components.notification.info.maximum-requirement")
|
5345
|
-
})
|
5346
|
-
});
|
5347
|
-
}
|
5348
|
-
};
|
5349
|
-
const handleMoveComponent = (newIndex, currentIndex) => {
|
5350
|
-
setLiveText(
|
5351
|
-
formatMessage(
|
5352
|
-
{
|
5353
|
-
id: index.getTranslation("dnd.reorder"),
|
5354
|
-
defaultMessage: "{item}, moved. New position in list: {position}."
|
5355
|
-
},
|
5356
|
-
{
|
5357
|
-
item: `${name2}.${currentIndex}`,
|
5358
|
-
position: getItemPos(newIndex)
|
5359
|
-
}
|
5360
|
-
)
|
5361
|
-
);
|
5362
|
-
moveFieldRow(name2, currentIndex, newIndex);
|
5363
|
-
};
|
5364
|
-
const getItemPos = (index2) => `${index2 + 1} of ${value.length}`;
|
5365
|
-
const handleCancel = (index$1) => {
|
5366
|
-
setLiveText(
|
5367
|
-
formatMessage(
|
5368
|
-
{
|
5369
|
-
id: index.getTranslation("dnd.cancel-item"),
|
5370
|
-
defaultMessage: "{item}, dropped. Re-order cancelled."
|
5371
|
-
},
|
5372
|
-
{
|
5373
|
-
item: `${name2}.${index$1}`
|
5374
|
-
}
|
5375
|
-
)
|
5376
|
-
);
|
5377
|
-
};
|
5378
|
-
const handleGrabItem = (index$1) => {
|
5379
|
-
setLiveText(
|
5380
|
-
formatMessage(
|
5381
|
-
{
|
5382
|
-
id: index.getTranslation("dnd.grab-item"),
|
5383
|
-
defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`
|
5384
|
-
},
|
5385
|
-
{
|
5386
|
-
item: `${name2}.${index$1}`,
|
5387
|
-
position: getItemPos(index$1)
|
5388
|
-
}
|
5389
|
-
)
|
5390
|
-
);
|
5567
|
+
const field = strapiAdmin.useField(name2);
|
5568
|
+
const showResetComponent = !attribute.repeatable && field.value && !disabled;
|
5569
|
+
const { components } = index.useDoc();
|
5570
|
+
const handleInitialisationClick = () => {
|
5571
|
+
const schema = components[attribute.component];
|
5572
|
+
const form = index.createDefaultForm(schema, components);
|
5573
|
+
const data = index.transformDocument(schema, components)(form);
|
5574
|
+
field.onChange(name2, data);
|
5391
5575
|
};
|
5392
|
-
|
5393
|
-
|
5394
|
-
|
5395
|
-
|
5396
|
-
|
5397
|
-
|
5398
|
-
|
5576
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { error: field.error, required, children: [
|
5577
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", children: [
|
5578
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Label, { action: labelAction, children: [
|
5579
|
+
label,
|
5580
|
+
attribute.repeatable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
5581
|
+
" (",
|
5582
|
+
Array.isArray(field.value) ? field.value.length : 0,
|
5583
|
+
")"
|
5584
|
+
] })
|
5585
|
+
] }),
|
5586
|
+
showResetComponent && /* @__PURE__ */ jsxRuntime.jsx(
|
5587
|
+
designSystem.IconButton,
|
5399
5588
|
{
|
5400
|
-
|
5401
|
-
|
5589
|
+
label: formatMessage({
|
5590
|
+
id: index.getTranslation("components.reset-entry"),
|
5591
|
+
defaultMessage: "Reset Entry"
|
5592
|
+
}),
|
5593
|
+
variant: "ghost",
|
5594
|
+
onClick: () => {
|
5595
|
+
field.onChange(name2, null);
|
5596
|
+
},
|
5597
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {})
|
5402
5598
|
}
|
5403
5599
|
)
|
5404
|
-
);
|
5405
|
-
};
|
5406
|
-
const handleRemoveComponent = (name22, currentIndex) => () => {
|
5407
|
-
removeFieldRow(name22, currentIndex);
|
5408
|
-
};
|
5409
|
-
const hasError = error !== void 0;
|
5410
|
-
const renderButtonLabel = () => {
|
5411
|
-
if (addComponentIsOpen) {
|
5412
|
-
return formatMessage({ id: "app.utils.close-label", defaultMessage: "Close" });
|
5413
|
-
}
|
5414
|
-
if (hasError && dynamicDisplayedComponentsLength > max) {
|
5415
|
-
return formatMessage(
|
5416
|
-
{
|
5417
|
-
id: index.getTranslation(`components.DynamicZone.extra-components`),
|
5418
|
-
defaultMessage: "There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}"
|
5419
|
-
},
|
5420
|
-
{
|
5421
|
-
number: dynamicDisplayedComponentsLength - max
|
5422
|
-
}
|
5423
|
-
);
|
5424
|
-
}
|
5425
|
-
if (hasError && dynamicDisplayedComponentsLength < min) {
|
5426
|
-
return formatMessage(
|
5427
|
-
{
|
5428
|
-
id: index.getTranslation(`components.DynamicZone.missing-components`),
|
5429
|
-
defaultMessage: "There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}"
|
5430
|
-
},
|
5431
|
-
{ number: min - dynamicDisplayedComponentsLength }
|
5432
|
-
);
|
5433
|
-
}
|
5434
|
-
return formatMessage(
|
5435
|
-
{
|
5436
|
-
id: index.getTranslation("components.DynamicZone.add-component"),
|
5437
|
-
defaultMessage: "Add a component to {componentName}"
|
5438
|
-
},
|
5439
|
-
{ componentName: label || name2 }
|
5440
|
-
);
|
5441
|
-
};
|
5442
|
-
const level = Relations.useComponent("DynamicZone", (state) => state.level);
|
5443
|
-
const ariaDescriptionId = React__namespace.useId();
|
5444
|
-
return /* @__PURE__ */ jsxRuntime.jsx(DynamicZoneProvider, { isInDynamicZone: true, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
5445
|
-
dynamicDisplayedComponentsLength > 0 && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
|
5446
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
5447
|
-
DynamicZoneLabel,
|
5448
|
-
{
|
5449
|
-
hint,
|
5450
|
-
label,
|
5451
|
-
labelAction,
|
5452
|
-
name: name2,
|
5453
|
-
numberOfComponents: dynamicDisplayedComponentsLength,
|
5454
|
-
required
|
5455
|
-
}
|
5456
|
-
),
|
5457
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { id: ariaDescriptionId, children: formatMessage({
|
5458
|
-
id: index.getTranslation("dnd.instructions"),
|
5459
|
-
defaultMessage: `Press spacebar to grab and re-order`
|
5460
|
-
}) }),
|
5461
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { "aria-live": "assertive", children: liveText }),
|
5462
|
-
/* @__PURE__ */ jsxRuntime.jsx("ol", { "aria-describedby": ariaDescriptionId, children: value.map((field, index2) => /* @__PURE__ */ jsxRuntime.jsx(
|
5463
|
-
Relations.ComponentProvider,
|
5464
|
-
{
|
5465
|
-
level: level + 1,
|
5466
|
-
uid: field.__component,
|
5467
|
-
id: field.id,
|
5468
|
-
type: "dynamiczone",
|
5469
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
5470
|
-
DynamicComponent,
|
5471
|
-
{
|
5472
|
-
disabled,
|
5473
|
-
name: name2,
|
5474
|
-
index: index2,
|
5475
|
-
componentUid: field.__component,
|
5476
|
-
onMoveComponent: handleMoveComponent,
|
5477
|
-
onRemoveComponentClick: handleRemoveComponent(name2, index2),
|
5478
|
-
onCancel: handleCancel,
|
5479
|
-
onDropItem: handleDropItem,
|
5480
|
-
onGrabItem: handleGrabItem,
|
5481
|
-
onAddComponent: handleAddComponent,
|
5482
|
-
dynamicComponentsByCategory
|
5483
|
-
}
|
5484
|
-
)
|
5485
|
-
},
|
5486
|
-
field.__temp_key__
|
5487
|
-
)) })
|
5488
5600
|
] }),
|
5489
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
5490
|
-
|
5491
|
-
|
5492
|
-
|
5493
|
-
|
5494
|
-
isOpen: addComponentIsOpen,
|
5495
|
-
onClick: handleClickOpenPicker,
|
5496
|
-
children: renderButtonLabel()
|
5497
|
-
}
|
5498
|
-
) }),
|
5499
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
5500
|
-
ComponentPicker,
|
5501
|
-
{
|
5502
|
-
dynamicComponentsByCategory,
|
5503
|
-
isOpen: addComponentIsOpen,
|
5504
|
-
onClickAddComponent: handleAddComponent
|
5505
|
-
}
|
5506
|
-
)
|
5507
|
-
] }) });
|
5601
|
+
!attribute.repeatable && !field.value && /* @__PURE__ */ jsxRuntime.jsx(Initializer, { disabled, name: name2, onClick: handleInitialisationClick }),
|
5602
|
+
!attribute.repeatable && field.value ? /* @__PURE__ */ jsxRuntime.jsx(NonRepeatableComponent, { attribute, name: name2, disabled, ...props, children: props.children }) : null,
|
5603
|
+
attribute.repeatable && /* @__PURE__ */ jsxRuntime.jsx(RepeatableComponent, { attribute, name: name2, disabled, ...props, children: props.children }),
|
5604
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {})
|
5605
|
+
] });
|
5508
5606
|
};
|
5607
|
+
const MemoizedComponentInput = React__namespace.memo(ComponentInput);
|
5509
5608
|
exports.DynamicZone = DynamicZone;
|
5609
|
+
exports.FormLayout = FormLayout;
|
5510
5610
|
exports.MemoizedBlocksInput = MemoizedBlocksInput;
|
5511
5611
|
exports.MemoizedComponentInput = MemoizedComponentInput;
|
5512
|
-
exports.MemoizedInputRenderer = MemoizedInputRenderer;
|
5513
5612
|
exports.MemoizedUIDInput = MemoizedUIDInput;
|
5514
5613
|
exports.MemoizedWysiwyg = MemoizedWysiwyg;
|
5515
5614
|
exports.NotAllowedInput = NotAllowedInput;
|
5516
|
-
exports.createDefaultForm = createDefaultForm;
|
5517
|
-
exports.prepareTempKeys = prepareTempKeys;
|
5518
|
-
exports.removeFieldsThatDontExistOnSchema = removeFieldsThatDontExistOnSchema;
|
5519
|
-
exports.transformDocument = transformDocument;
|
5520
5615
|
exports.useDynamicZone = useDynamicZone;
|
5521
5616
|
exports.useFieldHint = useFieldHint;
|
5522
5617
|
exports.useLazyComponents = useLazyComponents;
|
5523
|
-
//# sourceMappingURL=
|
5618
|
+
//# sourceMappingURL=Input-CDHKQd7o.js.map
|