@strapi/content-manager 0.0.0-experimental.dd3311938ac827f1fa8560c8840a9a394f5896c0 → 0.0.0-experimental.e14656d3b8681880212c13260b9a2b340c182f2d

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.
Files changed (118) hide show
  1. package/LICENSE +18 -3
  2. package/dist/_chunks/{ComponentConfigurationPage-y_7iLdmB.js → ComponentConfigurationPage-D_M8iBw5.js} +3 -3
  3. package/dist/_chunks/{ComponentConfigurationPage-y_7iLdmB.js.map → ComponentConfigurationPage-D_M8iBw5.js.map} +1 -1
  4. package/dist/_chunks/{ComponentConfigurationPage-BMajAl1u.mjs → ComponentConfigurationPage-qemkOlnj.mjs} +3 -3
  5. package/dist/_chunks/{ComponentConfigurationPage-BMajAl1u.mjs.map → ComponentConfigurationPage-qemkOlnj.mjs.map} +1 -1
  6. package/dist/_chunks/{EditConfigurationPage-CPVB8Uqc.js → EditConfigurationPage-BePwPuHy.js} +3 -3
  7. package/dist/_chunks/{EditConfigurationPage-CPVB8Uqc.js.map → EditConfigurationPage-BePwPuHy.js.map} +1 -1
  8. package/dist/_chunks/{EditConfigurationPage-CcOoD26O.mjs → EditConfigurationPage-CjUrEewK.mjs} +3 -3
  9. package/dist/_chunks/{EditConfigurationPage-CcOoD26O.mjs.map → EditConfigurationPage-CjUrEewK.mjs.map} +1 -1
  10. package/dist/_chunks/{EditViewPage-CTTDHKkQ.js → EditViewPage-B-RJeiJD.js} +57 -46
  11. package/dist/_chunks/EditViewPage-B-RJeiJD.js.map +1 -0
  12. package/dist/_chunks/{EditViewPage-DWb0DE7R.mjs → EditViewPage-De8GyU8P.mjs} +58 -47
  13. package/dist/_chunks/EditViewPage-De8GyU8P.mjs.map +1 -0
  14. package/dist/_chunks/{Field-C5Z1Ivdv.js → Field-dq8Tg1M_.js} +514 -168
  15. package/dist/_chunks/Field-dq8Tg1M_.js.map +1 -0
  16. package/dist/_chunks/{Field-DnStdvQw.mjs → Field-pb2o8uBe.mjs} +516 -170
  17. package/dist/_chunks/Field-pb2o8uBe.mjs.map +1 -0
  18. package/dist/_chunks/{Form-B81OtW-k.js → Form-DGIf4jQU.js} +38 -28
  19. package/dist/_chunks/Form-DGIf4jQU.js.map +1 -0
  20. package/dist/_chunks/{Form-DqGgE55Q.mjs → Form-DJn0Dxha.mjs} +40 -30
  21. package/dist/_chunks/Form-DJn0Dxha.mjs.map +1 -0
  22. package/dist/_chunks/{History-DS6-HCYX.mjs → History-BowL3JKP.mjs} +52 -29
  23. package/dist/_chunks/History-BowL3JKP.mjs.map +1 -0
  24. package/dist/_chunks/{History-4NbOq2dX.js → History-Dh2NEHnR.js} +51 -28
  25. package/dist/_chunks/History-Dh2NEHnR.js.map +1 -0
  26. package/dist/_chunks/{ListConfigurationPage-DQJJltko.mjs → ListConfigurationPage-BpVOB-hn.mjs} +58 -48
  27. package/dist/_chunks/ListConfigurationPage-BpVOB-hn.mjs.map +1 -0
  28. package/dist/_chunks/{ListConfigurationPage-CpfstlYY.js → ListConfigurationPage-BxYCWz9e.js} +57 -46
  29. package/dist/_chunks/ListConfigurationPage-BxYCWz9e.js.map +1 -0
  30. package/dist/_chunks/{ListViewPage-CA3I75m5.js → ListViewPage-4XsciqHZ.js} +65 -68
  31. package/dist/_chunks/ListViewPage-4XsciqHZ.js.map +1 -0
  32. package/dist/_chunks/{ListViewPage-nQrOQuVo.mjs → ListViewPage-CXFUjZQC.mjs} +67 -70
  33. package/dist/_chunks/ListViewPage-CXFUjZQC.mjs.map +1 -0
  34. package/dist/_chunks/{NoContentTypePage-Dldu-_Mx.js → NoContentTypePage-C8OpoHeU.js} +2 -2
  35. package/dist/_chunks/{NoContentTypePage-Dldu-_Mx.js.map → NoContentTypePage-C8OpoHeU.js.map} +1 -1
  36. package/dist/_chunks/{NoContentTypePage-DbnHE22g.mjs → NoContentTypePage-DuhOTp3x.mjs} +2 -2
  37. package/dist/_chunks/{NoContentTypePage-DbnHE22g.mjs.map → NoContentTypePage-DuhOTp3x.mjs.map} +1 -1
  38. package/dist/_chunks/{NoPermissionsPage-fOIkQM0v.mjs → NoPermissionsPage-DVz3mzDz.mjs} +2 -2
  39. package/dist/_chunks/{NoPermissionsPage-fOIkQM0v.mjs.map → NoPermissionsPage-DVz3mzDz.mjs.map} +1 -1
  40. package/dist/_chunks/{NoPermissionsPage-CO2MK200.js → NoPermissionsPage-y_r7DVA2.js} +2 -2
  41. package/dist/_chunks/{NoPermissionsPage-CO2MK200.js.map → NoPermissionsPage-y_r7DVA2.js.map} +1 -1
  42. package/dist/_chunks/{Relations-BDRl99Ux.mjs → Relations-CVNLrn1Y.mjs} +4 -4
  43. package/dist/_chunks/Relations-CVNLrn1Y.mjs.map +1 -0
  44. package/dist/_chunks/{Relations-DG2jnOcr.js → Relations-DPFCAa7b.js} +4 -4
  45. package/dist/_chunks/Relations-DPFCAa7b.js.map +1 -0
  46. package/dist/_chunks/{en-Ux26r5pl.mjs → en-BrCTWlZv.mjs} +5 -4
  47. package/dist/_chunks/{en-Ux26r5pl.mjs.map → en-BrCTWlZv.mjs.map} +1 -1
  48. package/dist/_chunks/{en-fbKQxLGn.js → en-uOUIxfcQ.js} +5 -4
  49. package/dist/_chunks/{en-fbKQxLGn.js.map → en-uOUIxfcQ.js.map} +1 -1
  50. package/dist/_chunks/{index-BZoNZMXL.js → index-C3fJE-1-.js} +465 -422
  51. package/dist/_chunks/index-C3fJE-1-.js.map +1 -0
  52. package/dist/_chunks/{index-Drt2DN7v.mjs → index-DiMrfcfy.mjs} +472 -429
  53. package/dist/_chunks/index-DiMrfcfy.mjs.map +1 -0
  54. package/dist/_chunks/{layout-DEYBqgF1.js → layout-C788OmNr.js} +23 -11
  55. package/dist/_chunks/layout-C788OmNr.js.map +1 -0
  56. package/dist/_chunks/{layout-BzAbmoO6.mjs → layout-ls3gxfpH.mjs} +25 -13
  57. package/dist/_chunks/layout-ls3gxfpH.mjs.map +1 -0
  58. package/dist/_chunks/{relations-D26zVRdi.mjs → relations-CLcOmGO0.mjs} +2 -2
  59. package/dist/_chunks/{relations-D26zVRdi.mjs.map → relations-CLcOmGO0.mjs.map} +1 -1
  60. package/dist/_chunks/{relations-D0eZ4VWw.js → relations-DYeotliT.js} +2 -2
  61. package/dist/_chunks/{relations-D0eZ4VWw.js.map → relations-DYeotliT.js.map} +1 -1
  62. package/dist/admin/index.js +1 -1
  63. package/dist/admin/index.mjs +1 -1
  64. package/dist/admin/src/history/index.d.ts +3 -0
  65. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  66. package/dist/admin/src/index.d.ts +1 -0
  67. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +8 -3
  68. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +4 -0
  69. package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +20 -0
  70. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  71. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
  72. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +12 -32
  73. package/dist/admin/src/pages/ListView/components/BulkActions/Actions.d.ts +3 -30
  74. package/dist/admin/src/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +2 -2
  75. package/dist/admin/src/services/api.d.ts +1 -1
  76. package/dist/admin/src/services/components.d.ts +2 -2
  77. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  78. package/dist/admin/src/services/documents.d.ts +16 -16
  79. package/dist/admin/src/services/init.d.ts +1 -1
  80. package/dist/admin/src/services/relations.d.ts +2 -2
  81. package/dist/admin/src/services/uid.d.ts +3 -3
  82. package/dist/admin/src/utils/validation.d.ts +4 -1
  83. package/dist/server/index.js +166 -108
  84. package/dist/server/index.js.map +1 -1
  85. package/dist/server/index.mjs +167 -109
  86. package/dist/server/index.mjs.map +1 -1
  87. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  88. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  89. package/dist/server/src/controllers/uid.d.ts.map +1 -1
  90. package/dist/server/src/controllers/validation/dimensions.d.ts +4 -2
  91. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  92. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  93. package/dist/server/src/history/services/utils.d.ts +1 -1
  94. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  95. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  96. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  97. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  98. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  99. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  100. package/package.json +8 -8
  101. package/dist/_chunks/EditViewPage-CTTDHKkQ.js.map +0 -1
  102. package/dist/_chunks/EditViewPage-DWb0DE7R.mjs.map +0 -1
  103. package/dist/_chunks/Field-C5Z1Ivdv.js.map +0 -1
  104. package/dist/_chunks/Field-DnStdvQw.mjs.map +0 -1
  105. package/dist/_chunks/Form-B81OtW-k.js.map +0 -1
  106. package/dist/_chunks/Form-DqGgE55Q.mjs.map +0 -1
  107. package/dist/_chunks/History-4NbOq2dX.js.map +0 -1
  108. package/dist/_chunks/History-DS6-HCYX.mjs.map +0 -1
  109. package/dist/_chunks/ListConfigurationPage-CpfstlYY.js.map +0 -1
  110. package/dist/_chunks/ListConfigurationPage-DQJJltko.mjs.map +0 -1
  111. package/dist/_chunks/ListViewPage-CA3I75m5.js.map +0 -1
  112. package/dist/_chunks/ListViewPage-nQrOQuVo.mjs.map +0 -1
  113. package/dist/_chunks/Relations-BDRl99Ux.mjs.map +0 -1
  114. package/dist/_chunks/Relations-DG2jnOcr.js.map +0 -1
  115. package/dist/_chunks/index-BZoNZMXL.js.map +0 -1
  116. package/dist/_chunks/index-Drt2DN7v.mjs.map +0 -1
  117. package/dist/_chunks/layout-BzAbmoO6.mjs.map +0 -1
  118. package/dist/_chunks/layout-DEYBqgF1.js.map +0 -1
@@ -2,12 +2,12 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { useState, useEffect, useCallback, memo } from "react";
4
4
  import { useStrapiApp, createContext, useField, useNotification, useForm, useAPIErrorHandler, useQueryParams, useFocusInputField, InputRenderer as InputRenderer$1 } from "@strapi/admin/strapi-admin";
5
- import { Typography, Flex, Box, BaseLink, Button, useComposedRefs, Popover, Field, Tooltip, SingleSelect, SingleSelectOption, IconButton, Portal, FocusTrap, Divider, VisuallyHidden, Grid as Grid$1, GridItem, Accordion, TextButton, BaseButton, TextInput, IconButtonGroup, Menu, MenuItem } from "@strapi/design-system";
5
+ import { Box, SingleSelect, SingleSelectOption, Typography, Flex, BaseLink, Button, Popover, Field, Tooltip, IconButton, useComposedRefs, Portal, FocusTrap, Divider, VisuallyHidden, Grid as Grid$1, Accordion, TextButton, TextInput, IconButtonGroup, Menu, MenuItem } from "@strapi/design-system";
6
6
  import pipe$1 from "lodash/fp/pipe";
7
7
  import { useIntl } from "react-intl";
8
- import { m as DOCUMENT_META_FIELDS, g as getTranslation, c as useDoc, e as contentManagerApi, d as buildValidParams, f as useDocumentRBAC, n as useDocLayout } from "./index-Drt2DN7v.mjs";
8
+ import { m as DOCUMENT_META_FIELDS, g as getTranslation, c as useDoc, e as contentManagerApi, n as CLONE_PATH, d as buildValidParams, f as useDocumentRBAC, o as useDocLayout } from "./index-DiMrfcfy.mjs";
9
9
  import { generateNKeysBetween } from "fractional-indexing";
10
- import { u as useComponent, C as ComponentProvider, M as MemoizedRelationsField } from "./Relations-BDRl99Ux.mjs";
10
+ import { u as useComponent, C as ComponentProvider, M as MemoizedRelationsField } from "./Relations-CVNLrn1Y.mjs";
11
11
  import { Code, HeadingOne, HeadingTwo, HeadingThree, HeadingFour, HeadingFive, HeadingSix, Image as Image$1, NumberList, BulletList, Paragraph, Quotes, Link as Link$1, Drag, Collapse, Bold, Italic, Underline, StrikeThrough, Expand, PlusCircle, Plus, Trash, EyeStriked, CheckCircle, WarningCircle, Loader, ArrowClockwise, More } from "@strapi/icons";
12
12
  import { styled, css, keyframes } from "styled-components";
13
13
  import { C as ComponentIcon, a as COMPONENT_ICONS } from "./ComponentIcon-u4bIXTFY.mjs";
@@ -19,7 +19,7 @@ import { withHistory } from "slate-history";
19
19
  import { useFocused, useSelected, ReactEditor, Editable, useSlate, Slate, withReact } from "slate-react";
20
20
  import { p as prefixFileUrlWithBackendUrl, u as usePrev } from "./usePrev-DH6iah0A.mjs";
21
21
  import * as Toolbar from "@radix-ui/react-toolbar";
22
- import { useLocation } from "react-router-dom";
22
+ import { useLocation, useMatch } from "react-router-dom";
23
23
  import CodeMirror from "codemirror5";
24
24
  import sanitizeHtml from "sanitize-html";
25
25
  import { getLanguage, highlight, highlightAuto } from "highlight.js";
@@ -160,6 +160,220 @@ const useLazyComponents = (componentUids = []) => {
160
160
  }, []);
161
161
  return { isLazyLoading: loading, lazyComponentStore, cleanup };
162
162
  };
163
+ const codeLanguages = [
164
+ {
165
+ value: "asm",
166
+ label: "Assembly"
167
+ },
168
+ {
169
+ value: "bash",
170
+ label: "Bash"
171
+ },
172
+ {
173
+ value: "c",
174
+ label: "C"
175
+ },
176
+ {
177
+ value: "clojure",
178
+ label: "Clojure"
179
+ },
180
+ {
181
+ value: "cobol",
182
+ label: "COBOL"
183
+ },
184
+ {
185
+ value: "cpp",
186
+ label: "C++"
187
+ },
188
+ {
189
+ value: "csharp",
190
+ label: "C#"
191
+ },
192
+ {
193
+ value: "css",
194
+ label: "CSS"
195
+ },
196
+ {
197
+ value: "dart",
198
+ label: "Dart"
199
+ },
200
+ {
201
+ value: "dockerfile",
202
+ label: "Dockerfile"
203
+ },
204
+ {
205
+ value: "elixir",
206
+ label: "Elixir"
207
+ },
208
+ {
209
+ value: "erlang",
210
+ label: "Erlang"
211
+ },
212
+ {
213
+ value: "fortran",
214
+ label: "Fortran"
215
+ },
216
+ {
217
+ value: "fsharp",
218
+ label: "F#"
219
+ },
220
+ {
221
+ value: "go",
222
+ label: "Go"
223
+ },
224
+ {
225
+ value: "graphql",
226
+ label: "GraphQL"
227
+ },
228
+ {
229
+ value: "groovy",
230
+ label: "Groovy"
231
+ },
232
+ {
233
+ value: "haskell",
234
+ label: "Haskell"
235
+ },
236
+ {
237
+ value: "haxe",
238
+ label: "Haxe"
239
+ },
240
+ {
241
+ value: "html",
242
+ label: "HTML"
243
+ },
244
+ {
245
+ value: "ini",
246
+ label: "INI"
247
+ },
248
+ {
249
+ value: "java",
250
+ label: "Java"
251
+ },
252
+ {
253
+ value: "javascript",
254
+ label: "JavaScript"
255
+ },
256
+ {
257
+ value: "jsx",
258
+ label: "JavaScript (React)"
259
+ },
260
+ {
261
+ value: "json",
262
+ label: "JSON"
263
+ },
264
+ {
265
+ value: "julia",
266
+ label: "Julia"
267
+ },
268
+ {
269
+ value: "kotlin",
270
+ label: "Kotlin"
271
+ },
272
+ {
273
+ value: "latex",
274
+ label: "LaTeX"
275
+ },
276
+ {
277
+ value: "lua",
278
+ label: "Lua"
279
+ },
280
+ {
281
+ value: "markdown",
282
+ label: "Markdown"
283
+ },
284
+ {
285
+ value: "matlab",
286
+ label: "MATLAB"
287
+ },
288
+ {
289
+ value: "makefile",
290
+ label: "Makefile"
291
+ },
292
+ {
293
+ value: "objectivec",
294
+ label: "Objective-C"
295
+ },
296
+ {
297
+ value: "perl",
298
+ label: "Perl"
299
+ },
300
+ {
301
+ value: "php",
302
+ label: "PHP"
303
+ },
304
+ {
305
+ value: "plaintext",
306
+ label: "Plain text"
307
+ },
308
+ {
309
+ value: "powershell",
310
+ label: "PowerShell"
311
+ },
312
+ {
313
+ value: "python",
314
+ label: "Python"
315
+ },
316
+ {
317
+ value: "r",
318
+ label: "R"
319
+ },
320
+ {
321
+ value: "ruby",
322
+ label: "Ruby"
323
+ },
324
+ {
325
+ value: "rust",
326
+ label: "Rust"
327
+ },
328
+ {
329
+ value: "sas",
330
+ label: "SAS"
331
+ },
332
+ {
333
+ value: "scala",
334
+ label: "Scala"
335
+ },
336
+ {
337
+ value: "scheme",
338
+ label: "Scheme"
339
+ },
340
+ {
341
+ value: "shell",
342
+ label: "Shell"
343
+ },
344
+ {
345
+ value: "sql",
346
+ label: "SQL"
347
+ },
348
+ {
349
+ value: "stata",
350
+ label: "Stata"
351
+ },
352
+ {
353
+ value: "swift",
354
+ label: "Swift"
355
+ },
356
+ {
357
+ value: "typescript",
358
+ label: "TypeScript"
359
+ },
360
+ {
361
+ value: "tsx",
362
+ label: "TypeScript (React)"
363
+ },
364
+ {
365
+ value: "vbnet",
366
+ label: "VB.NET"
367
+ },
368
+ {
369
+ value: "xml",
370
+ label: "XML"
371
+ },
372
+ {
373
+ value: "yaml",
374
+ label: "YAML"
375
+ }
376
+ ];
163
377
  const baseHandleConvert = (editor, attributesToSet) => {
164
378
  const [_, lastNodePath] = Editor$1.last(editor, []);
165
379
  Transforms.unwrapNodes(editor, {
@@ -230,6 +444,7 @@ const CodeBlock = styled.pre`
230
444
  overflow: auto;
231
445
  padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};
232
446
  flex-shrink: 1;
447
+
233
448
  & > code {
234
449
  font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,
235
450
  monospace;
@@ -238,9 +453,61 @@ const CodeBlock = styled.pre`
238
453
  max-width: 100%;
239
454
  }
240
455
  `;
456
+ const CodeEditor = (props) => {
457
+ const { editor } = useBlocksEditorContext("ImageDialog");
458
+ const editorIsFocused = useFocused();
459
+ const imageIsSelected = useSelected();
460
+ const { formatMessage } = useIntl();
461
+ const [isSelectOpen, setIsSelectOpen] = React.useState(false);
462
+ const shouldDisplayLanguageSelect = editorIsFocused && imageIsSelected || isSelectOpen;
463
+ return /* @__PURE__ */ jsxs(Box, { position: "relative", width: "100%", children: [
464
+ /* @__PURE__ */ jsx(CodeBlock, { ...props.attributes, children: /* @__PURE__ */ jsx("code", { children: props.children }) }),
465
+ shouldDisplayLanguageSelect && /* @__PURE__ */ jsx(
466
+ Box,
467
+ {
468
+ position: "absolute",
469
+ background: "neutral0",
470
+ borderColor: "neutral150",
471
+ borderStyle: "solid",
472
+ borderWidth: "0.5px",
473
+ shadow: "tableShadow",
474
+ top: "100%",
475
+ marginTop: 1,
476
+ right: 0,
477
+ padding: 1,
478
+ hasRadius: true,
479
+ children: /* @__PURE__ */ jsx(
480
+ SingleSelect,
481
+ {
482
+ onChange: (open) => {
483
+ Transforms.setNodes(
484
+ editor,
485
+ { language: open.toString() },
486
+ { match: (node) => !Editor$1.isEditor(node) && node.type === "code" }
487
+ );
488
+ },
489
+ value: props.element.type === "code" && props.element.language || "plaintext",
490
+ onOpenChange: (open) => {
491
+ setIsSelectOpen(open);
492
+ if (!open) {
493
+ ReactEditor.focus(editor);
494
+ }
495
+ },
496
+ onCloseAutoFocus: (e) => e.preventDefault(),
497
+ "aria-label": formatMessage({
498
+ id: "components.Blocks.blocks.code.languageLabel",
499
+ defaultMessage: "Select a language"
500
+ }),
501
+ children: codeLanguages.map(({ value, label }) => /* @__PURE__ */ jsx(SingleSelectOption, { value, children: label }, value))
502
+ }
503
+ )
504
+ }
505
+ )
506
+ ] });
507
+ };
241
508
  const codeBlocks = {
242
509
  code: {
243
- renderElement: (props) => /* @__PURE__ */ jsx(CodeBlock, { ...props.attributes, children: /* @__PURE__ */ jsx("code", { children: props.children }) }),
510
+ renderElement: (props) => /* @__PURE__ */ jsx(CodeEditor, { ...props }),
244
511
  icon: Code,
245
512
  label: {
246
513
  id: "components.Blocks.blocks.code",
@@ -249,7 +516,7 @@ const codeBlocks = {
249
516
  matchNode: (node) => node.type === "code",
250
517
  isInBlocksSelector: true,
251
518
  handleConvert(editor) {
252
- baseHandleConvert(editor, { type: "code" });
519
+ baseHandleConvert(editor, { type: "code", language: "plaintext" });
253
520
  },
254
521
  handleEnterKey(editor) {
255
522
  pressEnterTwiceToExit(editor);
@@ -589,18 +856,12 @@ const LinkContent = React.forwardRef(
589
856
  const [popoverOpen, setPopoverOpen] = React.useState(
590
857
  editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false
591
858
  );
592
- const linkRef = React.useRef(null);
593
859
  const elementText = link.children.map((child) => child.text).join("");
594
860
  const [linkText, setLinkText] = React.useState(elementText);
595
861
  const [linkUrl, setLinkUrl] = React.useState(link.url);
596
862
  const linkInputRef = React.useRef(null);
597
- const [showRemoveButton, setShowRemoveButton] = React.useState(false);
863
+ const isLastInsertedLink = editor.lastInsertedLinkPath ? !Path.equals(path, editor.lastInsertedLinkPath) : true;
598
864
  const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);
599
- const handleOpenEditPopover = (e) => {
600
- e.preventDefault();
601
- setPopoverOpen(true);
602
- setShowRemoveButton(true);
603
- };
604
865
  const onLinkChange = (e) => {
605
866
  setIsSaveDisabled(false);
606
867
  setLinkUrl(e.target.value);
@@ -621,33 +882,33 @@ const LinkContent = React.forwardRef(
621
882
  editLink(editor, { url: linkUrl, text: linkText });
622
883
  setPopoverOpen(false);
623
884
  editor.lastInsertedLinkPath = null;
885
+ ReactEditor.focus(editor);
624
886
  };
625
- const handleDismiss = () => {
626
- setPopoverOpen(false);
887
+ const handleClose = () => {
627
888
  if (link.url === "") {
628
889
  removeLink(editor);
629
890
  }
891
+ setPopoverOpen(false);
630
892
  ReactEditor.focus(editor);
631
893
  };
632
- const inputNotDirty = !linkText || !linkUrl || link.url && link.url === linkUrl && elementText && elementText === linkText;
633
- const composedRefs = useComposedRefs(linkRef, forwardedRef);
634
894
  React.useEffect(() => {
635
895
  if (popoverOpen)
636
896
  linkInputRef.current?.focus();
637
897
  }, [popoverOpen]);
638
- return /* @__PURE__ */ jsxs(Fragment, { children: [
639
- /* @__PURE__ */ jsx(
898
+ const inputNotDirty = !linkText || !linkUrl || link.url && link.url === linkUrl && elementText && elementText === linkText;
899
+ return /* @__PURE__ */ jsxs(Popover.Root, { open: popoverOpen, children: [
900
+ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(
640
901
  StyledBaseLink,
641
902
  {
642
903
  ...attributes,
643
- ref: composedRefs,
904
+ ref: forwardedRef,
644
905
  href: link.url,
645
- onClick: handleOpenEditPopover,
906
+ onClick: () => setPopoverOpen(true),
646
907
  color: "primary600",
647
908
  children
648
909
  }
649
- ),
650
- popoverOpen && /* @__PURE__ */ jsx(Popover, { source: linkRef, onDismiss: handleDismiss, padding: 4, contentEditable: false, children: /* @__PURE__ */ jsxs(Flex, { tag: "form", onSubmit: handleSave, direction: "column", gap: 4, children: [
910
+ ) }),
911
+ /* @__PURE__ */ jsx(Popover.Content, { onPointerDownOutside: handleClose, children: /* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 4, children: [
651
912
  /* @__PURE__ */ jsx(Field.Root, { width: "368px", children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 1, alignItems: "stretch", children: [
652
913
  /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
653
914
  id: "components.Blocks.popover.text",
@@ -693,7 +954,7 @@ const LinkContent = React.forwardRef(
693
954
  {
694
955
  variant: "danger-light",
695
956
  onClick: () => removeLink(editor),
696
- $visible: showRemoveButton,
957
+ $visible: isLastInsertedLink,
697
958
  children: formatMessage({
698
959
  id: "components.Blocks.popover.remove",
699
960
  defaultMessage: "Remove"
@@ -701,11 +962,11 @@ const LinkContent = React.forwardRef(
701
962
  }
702
963
  ),
703
964
  /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
704
- /* @__PURE__ */ jsx(Button, { variant: "tertiary", onClick: handleDismiss, children: formatMessage({
965
+ /* @__PURE__ */ jsx(Button, { variant: "tertiary", onClick: handleClose, children: formatMessage({
705
966
  id: "components.Blocks.popover.cancel",
706
967
  defaultMessage: "Cancel"
707
968
  }) }),
708
- /* @__PURE__ */ jsx(Button, { type: "submit", disabled: Boolean(inputNotDirty) || isSaveDisabled, children: formatMessage({
969
+ /* @__PURE__ */ jsx(Button, { disabled: Boolean(inputNotDirty) || isSaveDisabled, onClick: handleSave, children: formatMessage({
709
970
  id: "components.Blocks.popover.save",
710
971
  defaultMessage: "Save"
711
972
  }) })
@@ -1291,6 +1552,26 @@ const ListButton = ({ block, format }) => {
1291
1552
  }
1292
1553
  return false;
1293
1554
  };
1555
+ const isListDisabled = () => {
1556
+ if (disabled) {
1557
+ return true;
1558
+ }
1559
+ if (!editor.selection) {
1560
+ return false;
1561
+ }
1562
+ const anchorNodeEntry = Editor$1.above(editor, {
1563
+ at: editor.selection.anchor,
1564
+ match: (node) => !Editor$1.isEditor(node) && node.type !== "text"
1565
+ });
1566
+ const focusNodeEntry = Editor$1.above(editor, {
1567
+ at: editor.selection.focus,
1568
+ match: (node) => !Editor$1.isEditor(node) && node.type !== "text"
1569
+ });
1570
+ if (!anchorNodeEntry || !focusNodeEntry) {
1571
+ return false;
1572
+ }
1573
+ return anchorNodeEntry[0] !== focusNodeEntry[0];
1574
+ };
1294
1575
  const toggleList = (format2) => {
1295
1576
  let currentListEntry;
1296
1577
  if (editor.selection) {
@@ -1324,7 +1605,7 @@ const ListButton = ({ block, format }) => {
1324
1605
  name: format,
1325
1606
  label: block.label,
1326
1607
  isActive: isListActive(),
1327
- disabled,
1608
+ disabled: isListDisabled(),
1328
1609
  handleClick: () => toggleList(format)
1329
1610
  }
1330
1611
  );
@@ -1491,7 +1772,7 @@ const DragIconButton = styled(IconButton)`
1491
1772
  }
1492
1773
  svg {
1493
1774
  height: auto;
1494
- width: ${({ theme }) => theme.spaces[3]};
1775
+ min-width: ${({ theme }) => theme.spaces[3]};
1495
1776
 
1496
1777
  path {
1497
1778
  fill: ${({ theme }) => theme.colors.neutral700};
@@ -1608,7 +1889,7 @@ const DragAndDropElement = ({
1608
1889
  disabled,
1609
1890
  draggable: true,
1610
1891
  $dragHandleTopMargin: dragHandleTopMargin,
1611
- children: /* @__PURE__ */ jsx(Drag, { color: "neutral600" })
1892
+ children: /* @__PURE__ */ jsx(Drag, { color: "primary500" })
1612
1893
  }
1613
1894
  ),
1614
1895
  children
@@ -1932,7 +2213,7 @@ const EditorLayout$1 = ({
1932
2213
  /* @__PURE__ */ jsx(
1933
2214
  CollapseIconButton,
1934
2215
  {
1935
- "aria-label": formatMessage({
2216
+ label: formatMessage({
1936
2217
  id: getTranslation("components.Blocks.collapse"),
1937
2218
  defaultMessage: "Collapse"
1938
2219
  }),
@@ -2271,7 +2552,7 @@ const BlocksEditor = React.forwardRef(
2271
2552
  !isExpandedMode && /* @__PURE__ */ jsx(
2272
2553
  ExpandIconButton,
2273
2554
  {
2274
- "aria-label": formatMessage({
2555
+ label: formatMessage({
2275
2556
  id: getTranslation("components.Blocks.expand"),
2276
2557
  defaultMessage: "Expand"
2277
2558
  }),
@@ -2337,30 +2618,27 @@ const createDefaultForm = (contentType, components = {}) => {
2337
2618
  const Initializer = ({ disabled, name: name2, onClick }) => {
2338
2619
  const { formatMessage } = useIntl();
2339
2620
  const field = useField(name2);
2340
- return /* @__PURE__ */ jsxs(Fragment, { children: [
2341
- /* @__PURE__ */ jsx(
2342
- Box,
2343
- {
2344
- tag: "button",
2345
- background: "neutral100",
2346
- borderColor: field.error ? "danger600" : "neutral200",
2347
- hasRadius: true,
2348
- disabled,
2349
- onClick,
2350
- paddingTop: 9,
2351
- paddingBottom: 9,
2352
- type: "button",
2353
- children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
2354
- /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(CircleIcon, {}) }),
2355
- /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { textColor: "primary600", variant: "pi", fontWeight: "bold", children: formatMessage({
2356
- id: getTranslation("components.empty-repeatable"),
2357
- defaultMessage: "No entry yet. Click on the button below to add one."
2358
- }) }) })
2359
- ] })
2360
- }
2361
- ),
2362
- field.error && /* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "pi", children: field.error })
2363
- ] });
2621
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
2622
+ Box,
2623
+ {
2624
+ tag: "button",
2625
+ background: "neutral100",
2626
+ borderColor: field.error ? "danger600" : "neutral200",
2627
+ hasRadius: true,
2628
+ disabled,
2629
+ onClick,
2630
+ paddingTop: 9,
2631
+ paddingBottom: 9,
2632
+ type: "button",
2633
+ children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
2634
+ /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(CircleIcon, {}) }),
2635
+ /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { textColor: "primary600", variant: "pi", fontWeight: "bold", children: formatMessage({
2636
+ id: getTranslation("components.empty-repeatable"),
2637
+ defaultMessage: "No entry yet. Click on the button below to add one."
2638
+ }) }) })
2639
+ ] })
2640
+ }
2641
+ ) });
2364
2642
  };
2365
2643
  const CircleIcon = styled(PlusCircle)`
2366
2644
  width: 2.4rem;
@@ -2392,9 +2670,20 @@ const NonRepeatableComponent = ({
2392
2670
  hasRadius: isNested,
2393
2671
  borderColor: isNested ? "neutral200" : void 0,
2394
2672
  children: /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((row, index) => {
2395
- return /* @__PURE__ */ jsx(Grid$1, { gap: 4, children: row.map(({ size, ...field }) => {
2673
+ return /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2396
2674
  const completeFieldName = `${name2}.${field.name}`;
2397
- return /* @__PURE__ */ jsx(GridItem, { col: size, s: 12, xs: 12, children: children({ ...field, name: completeFieldName }) }, completeFieldName);
2675
+ return /* @__PURE__ */ jsx(
2676
+ Grid$1.Item,
2677
+ {
2678
+ col: size,
2679
+ s: 12,
2680
+ xs: 12,
2681
+ direction: "column",
2682
+ alignItems: "stretch",
2683
+ children: children({ ...field, name: completeFieldName })
2684
+ },
2685
+ completeFieldName
2686
+ );
2398
2687
  }) }, index);
2399
2688
  }) })
2400
2689
  }
@@ -2570,9 +2859,20 @@ const RepeatableComponent = ({
2570
2859
  onGrabItem: handleGrabItem,
2571
2860
  __temp_key__: key,
2572
2861
  children: layout.map((row, index2) => {
2573
- return /* @__PURE__ */ jsx(Grid$1, { gap: 4, children: row.map(({ size, ...field }) => {
2862
+ return /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2574
2863
  const completeFieldName = `${nameWithIndex}.${field.name}`;
2575
- return /* @__PURE__ */ jsx(GridItem, { col: size, s: 12, xs: 12, children: children({ ...field, name: completeFieldName }) }, completeFieldName);
2864
+ return /* @__PURE__ */ jsx(
2865
+ Grid$1.Item,
2866
+ {
2867
+ col: size,
2868
+ s: 12,
2869
+ xs: 12,
2870
+ direction: "column",
2871
+ alignItems: "stretch",
2872
+ children: children({ ...field, name: completeFieldName })
2873
+ },
2874
+ completeFieldName
2875
+ );
2576
2876
  }) }, index2);
2577
2877
  })
2578
2878
  }
@@ -2617,7 +2917,7 @@ const TextButtonCustom = styled(TextButton)`
2617
2917
  }
2618
2918
 
2619
2919
  @media (prefers-reduced-motion: no-preference) {
2620
- transition: background-color 120ms ${(props) => props.theme.easings.easeOutQuad};
2920
+ transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};
2621
2921
  }
2622
2922
  `;
2623
2923
  const Component = ({
@@ -2667,7 +2967,7 @@ const Component = ({
2667
2967
  /* @__PURE__ */ jsx(
2668
2968
  IconButton,
2669
2969
  {
2670
- borderWidth: 0,
2970
+ variant: "ghost",
2671
2971
  onClick: onDeleteComponent,
2672
2972
  label: formatMessage({
2673
2973
  id: getTranslation("containers.Edit.delete"),
@@ -2680,7 +2980,7 @@ const Component = ({
2680
2980
  IconButton,
2681
2981
  {
2682
2982
  ref: composedAccordionRefs,
2683
- borderWidth: 0,
2983
+ variant: "ghost",
2684
2984
  onClick: (e) => e.stopPropagation(),
2685
2985
  "data-handler-id": handlerId,
2686
2986
  label: formatMessage({
@@ -2750,7 +3050,7 @@ const ComponentInput = ({
2750
3050
  id: getTranslation("components.reset-entry"),
2751
3051
  defaultMessage: "Reset Entry"
2752
3052
  }),
2753
- borderWidth: 0,
3053
+ variant: "ghost",
2754
3054
  onClick: () => {
2755
3055
  field.onChange(name2, null);
2756
3056
  },
@@ -2779,11 +3079,8 @@ const AddComponentButton = ({
2779
3079
  onClick,
2780
3080
  disabled: isDisabled,
2781
3081
  background: "neutral0",
2782
- paddingTop: 3,
2783
- paddingBottom: 3,
2784
- paddingLeft: 4,
2785
- paddingRight: 4,
2786
3082
  style: { cursor: isDisabled ? "not-allowed" : "pointer" },
3083
+ variant: "tertiary",
2787
3084
  children: /* @__PURE__ */ jsxs(Flex, { tag: "span", gap: 2, children: [
2788
3085
  /* @__PURE__ */ jsx(StyledAddIcon, { "aria-hidden": true, $isOpen: isOpen, $hasError: hasError && !isOpen }),
2789
3086
  /* @__PURE__ */ jsx(
@@ -2812,10 +3109,11 @@ const StyledAddIcon = styled(PlusCircle)`
2812
3109
  }
2813
3110
  `;
2814
3111
  const AddComponentTitle = styled(Typography)``;
2815
- const StyledButton = styled(BaseButton)`
3112
+ const StyledButton = styled(Button)`
2816
3113
  border-radius: 26px;
2817
3114
  border-color: ${({ theme }) => theme.colors.neutral150};
2818
3115
  box-shadow: ${({ theme }) => theme.shadows.filterShadow};
3116
+ height: 5rem;
2819
3117
 
2820
3118
  &:hover {
2821
3119
  ${AddComponentTitle} {
@@ -2827,7 +3125,7 @@ const StyledButton = styled(BaseButton)`
2827
3125
  fill: ${({ theme }) => theme.colors.primary600};
2828
3126
  }
2829
3127
  > path {
2830
- fill: ${({ theme }) => theme.colors.neutral100};
3128
+ fill: ${({ theme }) => theme.colors.primary600};
2831
3129
  }
2832
3130
  }
2833
3131
  }
@@ -2885,7 +3183,7 @@ const ComponentBox = styled(Flex)`
2885
3183
  cursor: pointer;
2886
3184
 
2887
3185
  @media (prefers-reduced-motion: no-preference) {
2888
- transition: color 120ms ${(props) => props.theme.easings.easeOutQuad};
3186
+ transition: color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};
2889
3187
  }
2890
3188
 
2891
3189
  &:focus,
@@ -3004,7 +3302,10 @@ const uidApi = contentManagerApi.injectEndpoints({
3004
3302
  config: {
3005
3303
  params
3006
3304
  }
3007
- })
3305
+ }),
3306
+ providesTags: (_res, _error, params) => [
3307
+ { type: "UidAvailability", id: params.contentTypeUID }
3308
+ ]
3008
3309
  })
3009
3310
  })
3010
3311
  });
@@ -3016,8 +3317,10 @@ const UIDInput = React.forwardRef(
3016
3317
  const allFormValues = useForm("InputUID", (form) => form.values);
3017
3318
  const [availability, setAvailability] = React.useState();
3018
3319
  const [showRegenerate, setShowRegenerate] = React.useState(false);
3320
+ const isCloning = useMatch(CLONE_PATH) !== null;
3019
3321
  const field = useField(name2);
3020
3322
  const debouncedValue = useDebounce(field.value, 300);
3323
+ const hasChanged = debouncedValue !== field.initialValue;
3021
3324
  const { toggleNotification } = useNotification();
3022
3325
  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
3023
3326
  const { formatMessage } = useIntl();
@@ -3093,8 +3396,9 @@ const UIDInput = React.forwardRef(
3093
3396
  params
3094
3397
  },
3095
3398
  {
3399
+ // Don't check availability if the value is empty or wasn't changed
3096
3400
  skip: !Boolean(
3097
- debouncedValue !== field.initialValue && debouncedValue && UID_REGEX.test(debouncedValue.trim())
3401
+ (hasChanged || isCloning) && debouncedValue && UID_REGEX.test(debouncedValue.trim())
3098
3402
  )
3099
3403
  }
3100
3404
  );
@@ -3123,6 +3427,7 @@ const UIDInput = React.forwardRef(
3123
3427
  const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;
3124
3428
  const fieldRef = useFocusInputField(name2);
3125
3429
  const composedRefs = useComposedRefs(ref, fieldRef);
3430
+ const shouldShowAvailability = (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;
3126
3431
  return /* @__PURE__ */ jsxs(Field.Root, { hint, name: name2, error: field.error, required, children: [
3127
3432
  /* @__PURE__ */ jsx(Field.Label, { action: labelAction, children: label }),
3128
3433
  /* @__PURE__ */ jsx(
@@ -3131,7 +3436,7 @@ const UIDInput = React.forwardRef(
3131
3436
  ref: composedRefs,
3132
3437
  disabled: props.disabled,
3133
3438
  endAction: /* @__PURE__ */ jsxs(Flex, { position: "relative", gap: 1, children: [
3134
- availability && !showRegenerate && /* @__PURE__ */ jsxs(
3439
+ shouldShowAvailability && /* @__PURE__ */ jsxs(
3135
3440
  TextValidation,
3136
3441
  {
3137
3442
  alignItems: "center",
@@ -3965,7 +4270,7 @@ const EditorLayout = ({
3965
4270
  justifyContent: "flex-end",
3966
4271
  shrink: 0,
3967
4272
  width: "100%",
3968
- children: /* @__PURE__ */ jsxs(ExpandButton$1, { onClick: onCollapse, children: [
4273
+ children: /* @__PURE__ */ jsxs(ExpandButton$1, { onClick: onCollapse, variant: "tertiary", size: "M", children: [
3969
4274
  /* @__PURE__ */ jsx(Typography, { children: formatMessage({
3970
4275
  id: "components.Wysiwyg.collapse",
3971
4276
  defaultMessage: "Collapse"
@@ -3983,12 +4288,14 @@ const EditorLayout = ({
3983
4288
  ) }) });
3984
4289
  }
3985
4290
  return /* @__PURE__ */ jsx(
3986
- Box,
4291
+ Flex,
3987
4292
  {
3988
4293
  borderColor: error ? "danger600" : "neutral200",
3989
4294
  borderStyle: "solid",
3990
4295
  borderWidth: "1px",
3991
4296
  hasRadius: true,
4297
+ direction: "column",
4298
+ alignItems: "stretch",
3992
4299
  children
3993
4300
  }
3994
4301
  );
@@ -3999,11 +4306,19 @@ const ExpandWrapper = styled(Flex)`
3999
4306
  const BoxWithBorder = styled(Box)`
4000
4307
  border-right: 1px solid ${({ theme }) => theme.colors.neutral200};
4001
4308
  `;
4002
- const ExpandButton$1 = styled(BaseButton)`
4309
+ const ExpandButton$1 = styled(Button)`
4003
4310
  background-color: transparent;
4004
4311
  border: none;
4005
4312
  align-items: center;
4006
4313
 
4314
+ & > span {
4315
+ display: flex;
4316
+ justify-content: space-between;
4317
+ align-items: center;
4318
+ width: 100%;
4319
+ font-weight: ${({ theme }) => theme.fontWeights.regular};
4320
+ }
4321
+
4007
4322
  svg {
4008
4323
  margin-left: ${({ theme }) => `${theme.spaces[2]}`};
4009
4324
 
@@ -4272,8 +4587,6 @@ const quoteAndCodeHandler = (editor, markdownType) => {
4272
4587
  };
4273
4588
  const CustomIconButton = styled(IconButton)`
4274
4589
  padding: ${({ theme }) => theme.spaces[2]};
4275
- /* Trick to prevent the outline from overflowing because of the general outline-offset */
4276
- outline-offset: -2px !important;
4277
4590
 
4278
4591
  svg {
4279
4592
  width: 1.8rem;
@@ -4301,11 +4614,19 @@ const MoreButton = styled(IconButton)`
4301
4614
  const IconButtonGroupMargin = styled(IconButtonGroup)`
4302
4615
  margin-right: ${({ theme }) => `${theme.spaces[2]}`};
4303
4616
  `;
4304
- const ExpandButton = styled(BaseButton)`
4617
+ const ExpandButton = styled(Button)`
4305
4618
  background-color: transparent;
4306
4619
  border: none;
4307
4620
  align-items: center;
4308
4621
 
4622
+ & > span {
4623
+ display: flex;
4624
+ justify-content: space-between;
4625
+ align-items: center;
4626
+ width: 100%;
4627
+ font-weight: ${({ theme }) => theme.fontWeights.regular};
4628
+ }
4629
+
4309
4630
  svg {
4310
4631
  margin-left: ${({ theme }) => `${theme.spaces[2]}`};
4311
4632
  path {
@@ -4317,8 +4638,8 @@ const ExpandButton = styled(BaseButton)`
4317
4638
  `;
4318
4639
  const WysiwygFooter = ({ onToggleExpand }) => {
4319
4640
  const { formatMessage } = useIntl();
4320
- return /* @__PURE__ */ jsx(Box, { padding: 2, background: "neutral100", borderRadius: `0 0 0.4rem 0.4rem`, children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", alignItems: "flex-end", children: /* @__PURE__ */ jsxs(ExpandButton, { id: "expand", onClick: onToggleExpand, children: [
4321
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
4641
+ return /* @__PURE__ */ jsx(Box, { padding: 2, background: "neutral100", borderRadius: `0 0 0.4rem 0.4rem`, children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", alignItems: "flex-end", children: /* @__PURE__ */ jsxs(ExpandButton, { id: "expand", onClick: onToggleExpand, variant: "tertiary", size: "M", children: [
4642
+ /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: formatMessage({
4322
4643
  id: "components.WysiwygBottomControls.fullscreen",
4323
4644
  defaultMessage: "Expand"
4324
4645
  }) }),
@@ -4340,7 +4661,7 @@ const WysiwygNav = ({
4340
4661
  id: "components.Wysiwyg.selectOptions.title",
4341
4662
  defaultMessage: "Add a title"
4342
4663
  });
4343
- const buttonMoreRef = React.useRef(null);
4664
+ React.useRef(null);
4344
4665
  const handleTogglePopover = () => {
4345
4666
  setVisiblePopover((prev) => !prev);
4346
4667
  };
@@ -4354,14 +4675,23 @@ const WysiwygNav = ({
4354
4675
  borderRadius: `0.4rem 0.4rem 0 0`,
4355
4676
  children: [
4356
4677
  /* @__PURE__ */ jsxs(Flex, { children: [
4357
- /* @__PURE__ */ jsx(Field.Root, { children: /* @__PURE__ */ jsxs(SingleSelect, { disabled: true, placeholder: selectPlaceholder, "aria-label": selectPlaceholder, children: [
4358
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "h1", children: "h1" }),
4359
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "h2", children: "h2" }),
4360
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "h3", children: "h3" }),
4361
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "h4", children: "h4" }),
4362
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "h5", children: "h5" }),
4363
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "h6", children: "h6" })
4364
- ] }) }),
4678
+ /* @__PURE__ */ jsx(Field.Root, { children: /* @__PURE__ */ jsxs(
4679
+ SingleSelect,
4680
+ {
4681
+ disabled: true,
4682
+ placeholder: selectPlaceholder,
4683
+ "aria-label": selectPlaceholder,
4684
+ size: "S",
4685
+ children: [
4686
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "h1", children: "h1" }),
4687
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "h2", children: "h2" }),
4688
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "h3", children: "h3" }),
4689
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "h4", children: "h4" }),
4690
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "h5", children: "h5" }),
4691
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "h6", children: "h6" })
4692
+ ]
4693
+ }
4694
+ ) }),
4365
4695
  /* @__PURE__ */ jsxs(MainButtons, { children: [
4366
4696
  /* @__PURE__ */ jsx(CustomIconButton, { disabled: true, label: "Bold", name: "Bold", children: /* @__PURE__ */ jsx(Bold, {}) }),
4367
4697
  /* @__PURE__ */ jsx(CustomIconButton, { disabled: true, label: "Italic", name: "Italic", children: /* @__PURE__ */ jsx(Italic, {}) }),
@@ -4392,6 +4722,7 @@ const WysiwygNav = ({
4392
4722
  placeholder: selectPlaceholder,
4393
4723
  "aria-label": selectPlaceholder,
4394
4724
  onChange: (value) => onActionClick(value, editorRef),
4725
+ size: "S",
4395
4726
  children: [
4396
4727
  /* @__PURE__ */ jsx(SingleSelectOption, { value: "h1", children: "h1" }),
4397
4728
  /* @__PURE__ */ jsx(SingleSelectOption, { value: "h2", children: "h2" }),
@@ -4431,79 +4762,81 @@ const WysiwygNav = ({
4431
4762
  }
4432
4763
  )
4433
4764
  ] }),
4434
- /* @__PURE__ */ jsx(MoreButton, { ref: buttonMoreRef, onClick: handleTogglePopover, label: "More", children: /* @__PURE__ */ jsx(More, {}) }),
4435
- visiblePopover && /* @__PURE__ */ jsx(Popover, { onDismiss: handleTogglePopover, centered: true, source: buttonMoreRef, spacing: 4, children: /* @__PURE__ */ jsxs(Flex, { children: [
4436
- /* @__PURE__ */ jsxs(IconButtonGroupMargin, { children: [
4437
- /* @__PURE__ */ jsx(
4438
- CustomIconButton,
4439
- {
4440
- onClick: () => onActionClick("Strikethrough", editorRef, handleTogglePopover),
4441
- label: "Strikethrough",
4442
- name: "Strikethrough",
4443
- children: /* @__PURE__ */ jsx(StrikeThrough, {})
4444
- }
4445
- ),
4446
- /* @__PURE__ */ jsx(
4447
- CustomIconButton,
4448
- {
4449
- onClick: () => onActionClick("BulletList", editorRef, handleTogglePopover),
4450
- label: "BulletList",
4451
- name: "BulletList",
4452
- children: /* @__PURE__ */ jsx(BulletList, {})
4453
- }
4454
- ),
4455
- /* @__PURE__ */ jsx(
4456
- CustomIconButton,
4457
- {
4458
- onClick: () => onActionClick("NumberList", editorRef, handleTogglePopover),
4459
- label: "NumberList",
4460
- name: "NumberList",
4461
- children: /* @__PURE__ */ jsx(NumberList, {})
4462
- }
4463
- )
4464
- ] }),
4465
- /* @__PURE__ */ jsxs(IconButtonGroup, { children: [
4466
- /* @__PURE__ */ jsx(
4467
- CustomIconButton,
4468
- {
4469
- onClick: () => onActionClick("Code", editorRef, handleTogglePopover),
4470
- label: "Code",
4471
- name: "Code",
4472
- children: /* @__PURE__ */ jsx(Code, {})
4473
- }
4474
- ),
4475
- /* @__PURE__ */ jsx(
4476
- CustomIconButton,
4477
- {
4478
- onClick: () => {
4479
- handleTogglePopover();
4480
- onToggleMediaLib();
4481
- },
4482
- label: "Image",
4483
- name: "Image",
4484
- children: /* @__PURE__ */ jsx(Image$1, {})
4485
- }
4486
- ),
4487
- /* @__PURE__ */ jsx(
4488
- CustomLinkIconButton,
4489
- {
4490
- onClick: () => onActionClick("Link", editorRef, handleTogglePopover),
4491
- label: "Link",
4492
- name: "Link",
4493
- children: /* @__PURE__ */ jsx(Link$1, {})
4494
- }
4495
- ),
4496
- /* @__PURE__ */ jsx(
4497
- CustomIconButton,
4498
- {
4499
- onClick: () => onActionClick("Quote", editorRef, handleTogglePopover),
4500
- label: "Quote",
4501
- name: "Quote",
4502
- children: /* @__PURE__ */ jsx(Quotes, {})
4503
- }
4504
- )
4505
- ] })
4506
- ] }) })
4765
+ /* @__PURE__ */ jsxs(Popover.Root, { children: [
4766
+ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(MoreButton, { label: "More", children: /* @__PURE__ */ jsx(More, {}) }) }),
4767
+ /* @__PURE__ */ jsx(Popover.Content, { sideOffset: 12, children: /* @__PURE__ */ jsxs(Flex, { padding: 2, children: [
4768
+ /* @__PURE__ */ jsxs(IconButtonGroupMargin, { children: [
4769
+ /* @__PURE__ */ jsx(
4770
+ CustomIconButton,
4771
+ {
4772
+ onClick: () => onActionClick("Strikethrough", editorRef, handleTogglePopover),
4773
+ label: "Strikethrough",
4774
+ name: "Strikethrough",
4775
+ children: /* @__PURE__ */ jsx(StrikeThrough, {})
4776
+ }
4777
+ ),
4778
+ /* @__PURE__ */ jsx(
4779
+ CustomIconButton,
4780
+ {
4781
+ onClick: () => onActionClick("BulletList", editorRef, handleTogglePopover),
4782
+ label: "BulletList",
4783
+ name: "BulletList",
4784
+ children: /* @__PURE__ */ jsx(BulletList, {})
4785
+ }
4786
+ ),
4787
+ /* @__PURE__ */ jsx(
4788
+ CustomIconButton,
4789
+ {
4790
+ onClick: () => onActionClick("NumberList", editorRef, handleTogglePopover),
4791
+ label: "NumberList",
4792
+ name: "NumberList",
4793
+ children: /* @__PURE__ */ jsx(NumberList, {})
4794
+ }
4795
+ )
4796
+ ] }),
4797
+ /* @__PURE__ */ jsxs(IconButtonGroup, { children: [
4798
+ /* @__PURE__ */ jsx(
4799
+ CustomIconButton,
4800
+ {
4801
+ onClick: () => onActionClick("Code", editorRef, handleTogglePopover),
4802
+ label: "Code",
4803
+ name: "Code",
4804
+ children: /* @__PURE__ */ jsx(Code, {})
4805
+ }
4806
+ ),
4807
+ /* @__PURE__ */ jsx(
4808
+ CustomIconButton,
4809
+ {
4810
+ onClick: () => {
4811
+ handleTogglePopover();
4812
+ onToggleMediaLib();
4813
+ },
4814
+ label: "Image",
4815
+ name: "Image",
4816
+ children: /* @__PURE__ */ jsx(Image$1, {})
4817
+ }
4818
+ ),
4819
+ /* @__PURE__ */ jsx(
4820
+ CustomLinkIconButton,
4821
+ {
4822
+ onClick: () => onActionClick("Link", editorRef, handleTogglePopover),
4823
+ label: "Link",
4824
+ name: "Link",
4825
+ children: /* @__PURE__ */ jsx(Link$1, {})
4826
+ }
4827
+ ),
4828
+ /* @__PURE__ */ jsx(
4829
+ CustomIconButton,
4830
+ {
4831
+ onClick: () => onActionClick("Quote", editorRef, handleTogglePopover),
4832
+ label: "Quote",
4833
+ name: "Quote",
4834
+ children: /* @__PURE__ */ jsx(Quotes, {})
4835
+ }
4836
+ )
4837
+ ] })
4838
+ ] }) })
4839
+ ] })
4507
4840
  ] }),
4508
4841
  onTogglePreviewMode && /* @__PURE__ */ jsx(Button, { onClick: onTogglePreviewMode, variant: "tertiary", children: formatMessage({
4509
4842
  id: "components.Wysiwyg.ToggleMode.preview-mode",
@@ -4729,7 +5062,9 @@ const useFieldHint = (hint = void 0, attribute) => {
4729
5062
  if (!maximum && !minimum) {
4730
5063
  return hint;
4731
5064
  }
4732
- const units = !["biginteger", "integer", "number"].includes(attribute.type) ? formatMessage(
5065
+ const units = !["biginteger", "integer", "number", "dynamiczone", "component"].includes(
5066
+ attribute.type
5067
+ ) ? formatMessage(
4733
5068
  {
4734
5069
  id: "content-manager.form.Input.hint.character.unit",
4735
5070
  defaultMessage: "{maxValue, plural, one { character} other { characters}}"
@@ -4823,7 +5158,7 @@ const DynamicComponent = ({
4823
5158
  /* @__PURE__ */ jsx(
4824
5159
  IconButton,
4825
5160
  {
4826
- borderWidth: 0,
5161
+ variant: "ghost",
4827
5162
  label: formatMessage(
4828
5163
  {
4829
5164
  id: getTranslation("components.DynamicZone.delete-label"),
@@ -4838,7 +5173,7 @@ const DynamicComponent = ({
4838
5173
  /* @__PURE__ */ jsx(
4839
5174
  IconButton,
4840
5175
  {
4841
- borderWidth: 0,
5176
+ variant: "ghost",
4842
5177
  onClick: (e) => e.stopPropagation(),
4843
5178
  "data-handler-id": handlerId,
4844
5179
  ref: dragRef,
@@ -4897,9 +5232,20 @@ const DynamicComponent = ({
4897
5232
  ),
4898
5233
  /* @__PURE__ */ jsx(Accordion.Actions, { children: accordionActions })
4899
5234
  ] }),
4900
- /* @__PURE__ */ jsx(Accordion.Content, { children: /* @__PURE__ */ jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsx(Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsx(Grid$1, { gap: 4, children: row.map(({ size, ...field }) => {
5235
+ /* @__PURE__ */ jsx(Accordion.Content, { children: /* @__PURE__ */ jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsx(Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsx(Grid$1.Root, { gap: 4, children: row.map(({ size, ...field }) => {
4901
5236
  const fieldName = `${name2}.${index}.${field.name}`;
4902
- return /* @__PURE__ */ jsx(GridItem, { col: size, s: 12, xs: 12, children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...field, name: fieldName }) }, fieldName);
5237
+ return /* @__PURE__ */ jsx(
5238
+ Grid$1.Item,
5239
+ {
5240
+ col: size,
5241
+ s: 12,
5242
+ xs: 12,
5243
+ direction: "column",
5244
+ alignItems: "stretch",
5245
+ children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...field, name: fieldName })
5246
+ },
5247
+ fieldName
5248
+ );
4903
5249
  }) }, rowInd)) }) }) })
4904
5250
  ] }) }) })
4905
5251
  ] });
@@ -5092,7 +5438,7 @@ const DynamicZone = ({
5092
5438
  const handleRemoveComponent = (name22, currentIndex) => () => {
5093
5439
  removeFieldRow(name22, currentIndex);
5094
5440
  };
5095
- const hasError = error !== void 0 || dynamicDisplayedComponentsLength < min || dynamicDisplayedComponentsLength > max;
5441
+ const hasError = error !== void 0;
5096
5442
  const renderButtonLabel = () => {
5097
5443
  if (addComponentIsOpen) {
5098
5444
  return formatMessage({ id: "app.utils.close-label", defaultMessage: "Close" });
@@ -5208,4 +5554,4 @@ export {
5208
5554
  transformDocument as t,
5209
5555
  useLazyComponents as u
5210
5556
  };
5211
- //# sourceMappingURL=Field-DnStdvQw.mjs.map
5557
+ //# sourceMappingURL=Field-pb2o8uBe.mjs.map