@strapi/content-manager 5.45.1 → 5.46.0

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 (70) hide show
  1. package/dist/admin/content-manager.js +26 -2
  2. package/dist/admin/content-manager.js.map +1 -1
  3. package/dist/admin/content-manager.mjs +26 -2
  4. package/dist/admin/content-manager.mjs.map +1 -1
  5. package/dist/admin/hooks/usePersistentQueryParams.js +4 -1
  6. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  7. package/dist/admin/hooks/usePersistentQueryParams.mjs +4 -1
  8. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +21 -4
  10. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +19 -2
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +1 -1
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +9 -6
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +10 -7
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +1 -34
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +3 -35
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +33 -18
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +34 -19
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.js +22 -0
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.js.map +1 -0
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.mjs +20 -0
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.mjs.map +1 -0
  30. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +15 -4
  31. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  32. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +16 -5
  33. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  34. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +26 -4
  35. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  36. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +26 -4
  37. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  38. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +31 -0
  39. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +31 -0
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  42. package/dist/admin/preview/components/InputPopover.js +3 -0
  43. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  44. package/dist/admin/preview/components/InputPopover.mjs +3 -0
  45. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  46. package/dist/admin/preview/hooks/usePreviewInputManager.js +24 -0
  47. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  48. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +24 -0
  49. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
  50. package/dist/admin/preview/utils/previewScript.js +616 -78
  51. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  52. package/dist/admin/preview/utils/previewScript.mjs +616 -78
  53. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  54. package/dist/admin/src/content-manager.d.ts +26 -0
  55. package/dist/admin/src/exports.d.ts +1 -0
  56. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +14 -8
  57. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.d.ts +3 -0
  58. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCard.d.ts +1 -1
  59. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +11 -1
  60. package/dist/server/homepage/services/homepage.js +12 -8
  61. package/dist/server/homepage/services/homepage.js.map +1 -1
  62. package/dist/server/homepage/services/homepage.mjs +12 -8
  63. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  64. package/dist/server/services/metrics.js +1 -5
  65. package/dist/server/services/metrics.js.map +1 -1
  66. package/dist/server/services/metrics.mjs +1 -5
  67. package/dist/server/services/metrics.mjs.map +1 -1
  68. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  69. package/dist/server/src/services/metrics.d.ts.map +1 -1
  70. package/package.json +6 -6
@@ -159,7 +159,7 @@ const ToolbarButton = ({ icon: Icon, name, label, isActive, disabled, handleClic
159
159
  height: 7,
160
160
  hasRadius: true,
161
161
  type: "button",
162
- children: /*#__PURE__*/ jsxRuntime.jsx(Icon, {
162
+ children: Icon && /*#__PURE__*/ jsxRuntime.jsx(Icon, {
163
163
  fill: disabled ? 'neutral300' : enabledColor
164
164
  })
165
165
  })
@@ -171,16 +171,15 @@ const BlocksDropdown = ()=>{
171
171
  const { formatMessage } = reactIntl.useIntl();
172
172
  const { modalElement, handleConversionResult } = useConversionModal();
173
173
  const isMobile = strapiAdmin.useIsMobile();
174
- const blockKeysToInclude = types.getEntries(blocks).reduce((currentKeys, entry)=>{
175
- const [key, block] = entry;
176
- return block.isInBlocksSelector ? [
174
+ const blockKeysToInclude = types.getEntries(blocks).reduce((currentKeys, [key, block])=>{
175
+ return block?.isInBlocksSelector ? [
177
176
  ...currentKeys,
178
177
  key
179
178
  ] : currentKeys;
180
179
  }, []);
181
180
  const [blockSelected, setBlockSelected] = React__namespace.useState('paragraph');
182
181
  const handleSelect = (optionKey)=>{
183
- if (!BlocksEditor.isSelectorBlockKey(optionKey)) {
182
+ if (typeof optionKey !== 'string' || !blocks[optionKey]) {
184
183
  return;
185
184
  }
186
185
  const editorIsEmpty = editor.children.length === 1 && slate.Editor.isEmpty(editor, editor.children[0]);
@@ -229,7 +228,7 @@ const BlocksDropdown = ()=>{
229
228
  return;
230
229
  }
231
230
  // Let the block handle the Slate conversion logic
232
- const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);
231
+ const maybeRenderModal = blocks[optionKey]?.handleConvert?.(editor);
233
232
  handleConversionResult(maybeRenderModal);
234
233
  setBlockSelected(optionKey);
235
234
  slateReact.ReactEditor.focus(editor);
@@ -278,7 +277,7 @@ const BlocksDropdown = ()=>{
278
277
  }
279
278
  }
280
279
  // Find the block key that matches the anchor node
281
- const anchorBlockKey = types.getKeys(blocks).find((blockKey)=>!slate.Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode));
280
+ const anchorBlockKey = types.getKeys(blocks).find((blockKey)=>!slate.Editor.isEditor(selectedNode) && blocks[blockKey]?.matchNode(selectedNode));
282
281
  // Change the value selected in the dropdown if it doesn't match the anchor block key
283
282
  if (anchorBlockKey && anchorBlockKey !== blockSelected) {
284
283
  setBlockSelected(anchorBlockKey);
@@ -290,14 +289,27 @@ const BlocksDropdown = ()=>{
290
289
  blocks,
291
290
  blockSelected
292
291
  ]);
293
- const Icon = blocks[blockSelected].icon;
292
+ React__namespace.useEffect(()=>{
293
+ // If the selected block is not in the list of blocks to include, change the selected block to the first one
294
+ if (blockKeysToInclude.length > 0 && !blockKeysToInclude.includes(blockSelected)) {
295
+ setBlockSelected(blockKeysToInclude[0]);
296
+ }
297
+ }, [
298
+ blockKeysToInclude,
299
+ blockSelected
300
+ ]);
301
+ if (!blocks[blockSelected]) {
302
+ return null;
303
+ }
304
+ const selectedBlock = blocks[blockSelected];
305
+ const Icon = selectedBlock.icon;
294
306
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
295
307
  children: [
296
308
  /*#__PURE__*/ jsxRuntime.jsx(SelectWrapper, {
297
309
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
298
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
310
+ startIcon: Icon && /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
299
311
  onChange: handleSelect,
300
- customizeContent: ()=>isMobile ? '' : formatMessage(blocks[blockSelected].label),
312
+ customizeContent: ()=>isMobile ? '' : formatMessage(selectedBlock.label),
301
313
  value: blockSelected,
302
314
  onCloseAutoFocus: preventSelectFocus,
303
315
  "aria-label": formatMessage({
@@ -305,12 +317,15 @@ const BlocksDropdown = ()=>{
305
317
  defaultMessage: 'Select a block'
306
318
  }),
307
319
  disabled: disabled,
308
- children: blockKeysToInclude.map((key)=>/*#__PURE__*/ jsxRuntime.jsx(BlockOption, {
320
+ children: blockKeysToInclude.map((key)=>{
321
+ const selectorBlock = blocks[key];
322
+ return /*#__PURE__*/ jsxRuntime.jsx(BlockOption, {
309
323
  value: key,
310
- label: blocks[key].label,
311
- icon: blocks[key].icon,
324
+ label: selectorBlock.label,
325
+ icon: selectorBlock.icon,
312
326
  blockSelected: blockSelected
313
- }, key))
327
+ }, key);
328
+ })
314
329
  })
315
330
  }),
316
331
  modalElement
@@ -321,7 +336,7 @@ const BlockOption = ({ value, icon: Icon, label, blockSelected })=>{
321
336
  const { formatMessage } = reactIntl.useIntl();
322
337
  const isSelected = value === blockSelected;
323
338
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
324
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icon, {
339
+ startIcon: Icon && /*#__PURE__*/ jsxRuntime.jsx(Icon, {
325
340
  fill: isSelected ? 'primary600' : 'neutral500'
326
341
  }),
327
342
  value: value,
@@ -390,7 +405,7 @@ const ListButton = ({ block, format, location = 'toolbar' })=>{
390
405
  }
391
406
  if (!currentListEntry) {
392
407
  // If selection is not a list then convert it to list
393
- blocks[`list-${format}`].handleConvert(editor);
408
+ blocks[`list-${format}`]?.handleConvert(editor);
394
409
  return;
395
410
  }
396
411
  // If selection is already a list then toggle format
@@ -405,14 +420,14 @@ const ListButton = ({ block, format, location = 'toolbar' })=>{
405
420
  });
406
421
  } else {
407
422
  // Format is same, convert selected list-item to paragraph
408
- blocks['paragraph'].handleConvert(editor);
423
+ blocks['paragraph']?.handleConvert(editor);
409
424
  }
410
425
  }
411
426
  };
412
427
  if (location === 'menu') {
413
428
  const Icon = block.icon;
414
429
  return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
415
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
430
+ startIcon: Icon && /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
416
431
  onSelect: ()=>toggleList(format),
417
432
  isActive: isListActive(),
418
433
  disabled: isListDisabled(),
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksToolbar.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n} from '@strapi/design-system';\nimport { Link, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\nimport { EditorToolbarObserver, type ObservedComponent } from '../../EditorToolbarObserver';\n\nimport { insertLink } from './Blocks/Link';\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n margin-left: ${({ theme }) => theme.spaces[1]};\n margin-right: ${({ theme }) => theme.spaces[1]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n margin-left: ${({ theme }) => theme.spaces[2]};\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled on desktop\n ${({ theme }) => theme.breakpoints.medium} {\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n padding-left: ${({ theme }) => theme.spaces[4]};\n padding-right: ${({ theme }) => theme.spaces[4]};\n gap: ${({ theme }) => theme.spaces[2]};\n \n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n gap: ${({ theme }) => theme.spaces[4]};\n }\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n & > span:first-child {\n gap: ${({ theme }) => theme.spaces[0]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n gap: ${({ theme }) => theme.spaces[3]};\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onPointerDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <Icon fill={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n const isMobile = useIsMobile();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n const Icon = blocks[blockSelected].icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon />}\n onChange={handleSelect}\n customizeContent={() => (isMobile ? '' : formatMessage(blocks[blockSelected].label))}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon fill={isSelected ? 'primary600' : 'neutral500'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { formatMessage } = useIntl();\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n startIcon={<Icon />}\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem\n startIcon={<Link />}\n onSelect={addLink}\n isActive={isLinkActive()}\n disabled={isLinkDisabled()}\n >\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n ${(props) =>\n props.isActive &&\n css`\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 600;\n `}\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral500};\n }\n`;\n\nconst ReorderToolbarButtons = () => {\n const { editor, disabled, blocks, name, setLiveText } =\n useBlocksEditorContext('ReorderToolbarButtons');\n const { formatMessage } = useIntl();\n\n const selection = editor.selection;\n const totalBlocks = editor.children.length;\n\n const anchorIndex = selection ? selection.anchor.path[0] : null;\n const focusIndex = selection ? selection.focus.path[0] : null;\n const isSingleBlockSelection =\n anchorIndex !== null && focusIndex !== null && anchorIndex === focusIndex;\n\n const selectedTopLevelNode =\n isSingleBlockSelection && anchorIndex !== null ? editor.children[anchorIndex] : null;\n const selectedBlock =\n selectedTopLevelNode &&\n Object.values(blocks).find((block) => block.matchNode(selectedTopLevelNode));\n\n const isSelectedBlockDraggable =\n selectedTopLevelNode && selectedBlock\n ? (selectedBlock.isDraggable?.(selectedTopLevelNode) ?? true)\n : false;\n\n const canMoveUp =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex > 0;\n const canMoveDown =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex < totalBlocks - 1;\n\n const moveBlock = (direction: 'up' | 'down') => {\n if (!selection || anchorIndex === null) return;\n\n const currentIndex = [anchorIndex];\n const newIndex = [direction === 'up' ? anchorIndex - 1 : anchorIndex + 1];\n\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Keep the moved block focused so disabled states update immediately.\n Transforms.select(editor, Editor.start(editor, newIndex));\n ReactEditor.focus(editor);\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n };\n\n return (\n <Flex direction=\"row\" gap={1}>\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveUp) moveBlock('up');\n }}\n aria-disabled={!canMoveUp}\n disabled={!canMoveUp}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowUp fill={!canMoveUp ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveDown) moveBlock('down');\n }}\n aria-disabled={!canMoveDown}\n disabled={!canMoveDown}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowDown fill={!canMoveDown ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n </Flex>\n );\n};\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n const isMobile = useIsMobile();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n if (!selectedNode) return true;\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem startIcon={<Icon />} onSelect={handleSelect} isActive={isActive}>\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\">\n <ToolbarSeparator style={{ marginLeft: '0.4rem' }} />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper padding={{ initial: 1, medium: 2 }} width=\"100%\">\n <BlocksDropdown />\n {isMobile && (\n <>\n <ToolbarSeparator />\n <ReorderToolbarButtons />\n </>\n )}\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","spaces","breakpoints","medium","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onPointerDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","type","fill","BlocksDropdown","blocks","isMobile","useIsMobile","blockKeysToInclude","getEntries","reduce","currentKeys","entry","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","isSelectorBlockKey","editorIsEmpty","children","length","Editor","isEmpty","selection","Transforms","insertNodes","text","select","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","_jsxs","_Fragment","SingleSelect","startIcon","onChange","customizeContent","onCloseAutoFocus","id","defaultMessage","map","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","last","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","neutral500","ReorderToolbarButtons","setLiveText","totalBlocks","anchorIndex","path","focusIndex","isSingleBlockSelection","selectedTopLevelNode","selectedBlock","Object","values","isSelectedBlockDraggable","isDraggable","canMoveUp","canMoveDown","moveBlock","direction","currentIndex","newIndex","moveNodes","to","getTranslation","item","position","gap","Button","ArrowUp","ArrowDown","BlocksToolbar","modifiers","checkButtonDisabled","isButtonDisabled","observedComponents","entries","modifier","checkIsActive","handleToggle","toolbar","menu","style","marginLeft","ToggleGroup","Root","padding","initial","grow","overflow","EditorToolbarObserver"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksToolbar.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n} from '@strapi/design-system';\nimport { Link, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\nimport { EditorToolbarObserver, type ObservedComponent } from '../../EditorToolbarObserver';\n\nimport { insertLink } from './Blocks/Link';\nimport {\n type BlocksStore,\n type SelectorBlock,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n margin-left: ${({ theme }) => theme.spaces[1]};\n margin-right: ${({ theme }) => theme.spaces[1]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n margin-left: ${({ theme }) => theme.spaces[2]};\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled on desktop\n ${({ theme }) => theme.breakpoints.medium} {\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n padding-left: ${({ theme }) => theme.spaces[4]};\n padding-right: ${({ theme }) => theme.spaces[4]};\n gap: ${({ theme }) => theme.spaces[2]};\n \n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n gap: ${({ theme }) => theme.spaces[4]};\n }\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n & > span:first-child {\n gap: ${({ theme }) => theme.spaces[0]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n gap: ${({ theme }) => theme.spaces[3]};\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onPointerDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n {Icon && <Icon fill={disabled ? 'neutral300' : enabledColor} />}\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n const isMobile = useIsMobile();\n\n const blockKeysToInclude: string[] = getEntries(blocks).reduce<string[]>(\n (currentKeys, [key, block]) => {\n return block?.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n },\n []\n );\n\n const [blockSelected, setBlockSelected] = React.useState<string>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (typeof optionKey !== 'string' || !blocks[optionKey]) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey]?.handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey]?.matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n React.useEffect(() => {\n // If the selected block is not in the list of blocks to include, change the selected block to the first one\n if (blockKeysToInclude.length > 0 && !blockKeysToInclude.includes(blockSelected)) {\n setBlockSelected(blockKeysToInclude[0]);\n }\n }, [blockKeysToInclude, blockSelected]);\n\n if (!blocks[blockSelected]) {\n return null;\n }\n\n const selectedBlock = blocks[blockSelected] as SelectorBlock;\n const Icon = selectedBlock.icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={Icon && <Icon />}\n onChange={handleSelect}\n customizeContent={() => (isMobile ? '' : formatMessage(selectedBlock.label))}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => {\n const selectorBlock = blocks[key] as SelectorBlock;\n return (\n <BlockOption\n key={key}\n value={key}\n label={selectorBlock.label}\n icon={selectorBlock.icon}\n blockSelected={blockSelected}\n />\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon?: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={Icon && <Icon fill={isSelected ? 'primary600' : 'neutral500'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { formatMessage } = useIntl();\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`]?.handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph']?.handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n startIcon={Icon && <Icon />}\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem\n startIcon={<Link />}\n onSelect={addLink}\n isActive={isLinkActive()}\n disabled={isLinkDisabled()}\n >\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n ${(props) =>\n props.isActive &&\n css`\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 600;\n `}\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral500};\n }\n`;\n\nconst ReorderToolbarButtons = () => {\n const { editor, disabled, blocks, name, setLiveText } =\n useBlocksEditorContext('ReorderToolbarButtons');\n const { formatMessage } = useIntl();\n\n const selection = editor.selection;\n const totalBlocks = editor.children.length;\n\n const anchorIndex = selection ? selection.anchor.path[0] : null;\n const focusIndex = selection ? selection.focus.path[0] : null;\n const isSingleBlockSelection =\n anchorIndex !== null && focusIndex !== null && anchorIndex === focusIndex;\n\n const selectedTopLevelNode =\n isSingleBlockSelection && anchorIndex !== null ? editor.children[anchorIndex] : null;\n const selectedBlock =\n selectedTopLevelNode &&\n Object.values(blocks).find((block) => block.matchNode(selectedTopLevelNode));\n\n const isSelectedBlockDraggable =\n selectedTopLevelNode && selectedBlock\n ? (selectedBlock.isDraggable?.(selectedTopLevelNode) ?? true)\n : false;\n\n const canMoveUp =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex > 0;\n const canMoveDown =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex < totalBlocks - 1;\n\n const moveBlock = (direction: 'up' | 'down') => {\n if (!selection || anchorIndex === null) return;\n\n const currentIndex = [anchorIndex];\n const newIndex = [direction === 'up' ? anchorIndex - 1 : anchorIndex + 1];\n\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Keep the moved block focused so disabled states update immediately.\n Transforms.select(editor, Editor.start(editor, newIndex));\n ReactEditor.focus(editor);\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n };\n\n return (\n <Flex direction=\"row\" gap={1}>\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveUp) moveBlock('up');\n }}\n aria-disabled={!canMoveUp}\n disabled={!canMoveUp}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowUp fill={!canMoveUp ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveDown) moveBlock('down');\n }}\n aria-disabled={!canMoveDown}\n disabled={!canMoveDown}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowDown fill={!canMoveDown ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n </Flex>\n );\n};\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n const isMobile = useIsMobile();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n if (!selectedNode) return true;\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem startIcon={<Icon />} onSelect={handleSelect} isActive={isActive}>\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\">\n <ToolbarSeparator style={{ marginLeft: '0.4rem' }} />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']!} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']!} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']!} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']!} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper padding={{ initial: 1, medium: 2 }} width=\"100%\">\n <BlocksDropdown />\n {isMobile && (\n <>\n <ToolbarSeparator />\n <ReorderToolbarButtons />\n </>\n )}\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","spaces","breakpoints","medium","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onPointerDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","type","fill","BlocksDropdown","blocks","isMobile","useIsMobile","blockKeysToInclude","getEntries","reduce","currentKeys","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","editorIsEmpty","children","length","Editor","isEmpty","selection","Transforms","insertNodes","text","select","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","selectedBlock","_jsxs","_Fragment","SingleSelect","startIcon","onChange","customizeContent","onCloseAutoFocus","id","defaultMessage","map","selectorBlock","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","last","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","neutral500","ReorderToolbarButtons","setLiveText","totalBlocks","anchorIndex","path","focusIndex","isSingleBlockSelection","selectedTopLevelNode","Object","values","isSelectedBlockDraggable","isDraggable","canMoveUp","canMoveDown","moveBlock","direction","currentIndex","newIndex","moveNodes","to","getTranslation","item","position","gap","Button","ArrowUp","ArrowDown","BlocksToolbar","modifiers","checkButtonDisabled","isButtonDisabled","observedComponents","entries","modifier","checkIsActive","handleToggle","toolbar","menu","style","marginLeft","ToggleGroup","Root","padding","initial","grow","overflow","EditorToolbarObserver"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAMA,cAAAA,GAAiBC,uBAAAA,CAAsBC,iBAAAA,CAAK;;;gBAGlC,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAEzD,CAAC;AAED,MAAMC,gBAAAA,GAAmBL,uBAAAA,CAAOM,kBAAAA,CAAQC,SAAS,CAAC;cACpC,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;;eAGxC,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;gBAChC,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;;EAE/C,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMO,WAAW,CAACC,MAAM,CAAC;iBAC3B,EAAE,CAAC,EAAER,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;kBAChC,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;;AAEnD,CAAC;AAED,MAAMG,UAAAA,GAAaX,uBAAAA,CAAgCC,iBAAAA,CAAK;;;;;;;;;;IAUpD,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMO,WAAW,CAACC,MAAM,CAAC;;oBAE1B,EAAE,CAAC,EAAER,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACS,UAAU,CAAC;;;;AAI7D,CAAC;AAED,MAAMC,aAAAA,GAAgBb,uBAAAA,CAAqBc,gBAAAA,CAAI;;;;;;iBAM9B,EAAE,CAAC,EAAEZ,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;oBAC9B,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;kBACnC,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;mBAChC,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;SAC3C,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;;IAEtC,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMO,WAAW,CAACC,MAAM,CAAC;mBAC3B,EAAE,CAAC,EAAER,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;sBAC9B,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;WAC5C,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;kBAK1B,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACS,UAAU,CAAC;;;;;;;;;eAS5C,EAAE,CAAC,EAAEV,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACY,UAAU,CAAC;;;;;UAK9C,EAAE,CAAC,EAAEb,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;;KAEtC,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMO,WAAW,CAACC,MAAM,CAAC;WACpC,EAAE,CAAC,EAAER,KAAK,EAAE,GAAKA,KAAAA,CAAMM,MAAM,CAAC,CAAA,CAAE,CAAC;;;AAG5C,CAAC;AAED;;AAEC,IACD,SAASQ,kBAAAA,GAAAA;AACP,IAAA,MAAM,CAACC,YAAAA,EAAcC,iBAAAA,CAAkB,GAAGC,gBAAAA,CAAMC,QAAQ,CAA2B,IAAA,CAAA;AAEnF,IAAA,MAAMC,yBAAyB,CAACC,WAAAA,GAAAA;;AAE9B,QAAA,IAAIA,WAAAA,EAAa;;;YAGfJ,iBAAAA,eAAkBC,gBAAAA,CAAMI,YAAY,CAACD,WAAAA,EAAAA,EAAe;AAAEE,gBAAAA,GAAAA,EAAKC,KAAKC,GAAG;AAAG,aAAA,CAAA,CAAA;AACxE,QAAA;AACF,IAAA,CAAA;IAEA,OAAO;AAAET,QAAAA,YAAAA;AAAcI,QAAAA;AAAuB,KAAA;AAChD;AAWA,MAAMM,aAAAA,GAAgB,CAAC,EACrBC,IAAAA,EAAMC,IAAI,EACVC,IAAI,EACJC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,WAAW,EACQ,GAAA;AACnB,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,mCAAAA,CAAuB,eAAA,CAAA;IAC1C,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,eAAeF,aAAAA,CAAcN,KAAAA,CAAAA;IAEnC,MAAMS,YAAAA,GAAeR,WAAW,YAAA,GAAe,YAAA;AAE/C,IAAA,qBACES,cAAA,CAACC,oBAAAA,EAAAA;QAAQX,KAAAA,EAAOQ,YAAAA;gCACdE,cAAA,CAACnC,mBAAQqC,UAAU,EAAA;YACjBC,KAAAA,EAAOd,IAAAA;AACPe,YAAAA,YAAAA,EAAYb,WAAW,IAAA,GAAO,KAAA;AAC9Bc,YAAAA,aAAAA,EAAe,CAACC,CAAAA,GAAAA;AACdA,gBAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChBd,gBAAAA,WAAAA,EAAAA;AACAe,gBAAAA,sBAAAA,CAAYC,KAAK,CAACf,MAAAA,CAAAA;AACpB,YAAA,CAAA;YACAgB,eAAAA,EAAelB,QAAAA;YACfA,QAAAA,EAAUA,QAAAA;YACVmB,YAAAA,EAAYb,YAAAA;YACZc,OAAO,EAAA,IAAA;AAEP,YAAA,QAAA,gBAAAZ,cAAA,CAAC9B,UAAAA,EAAAA;gBACC2C,GAAAA,EAAI,QAAA;AACJC,gBAAAA,UAAAA,EAAYvB,WAAW,YAAA,GAAe,EAAA;gBACtCwB,UAAAA,EAAW,QAAA;gBACXC,cAAAA,EAAe,QAAA;gBACfC,KAAAA,EAAO,CAAA;gBACPC,MAAAA,EAAQ,CAAA;gBACRC,SAAS,EAAA,IAAA;gBACTC,IAAAA,EAAK,QAAA;AAEJhC,gBAAAA,QAAAA,EAAAA,IAAAA,kBAAQY,cAAA,CAACZ,IAAAA,EAAAA;AAAKiC,oBAAAA,IAAAA,EAAM7B,WAAW,YAAA,GAAeO;;;;;AAKzD,CAAA;AAEA,MAAMuB,cAAAA,GAAiB,IAAA;IACrB,MAAM,EAAE5B,MAAM,EAAE6B,MAAM,EAAE/B,QAAQ,EAAE,GAAGG,mCAAAA,CAAuB,gBAAA,CAAA;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAErB,YAAY,EAAEI,sBAAsB,EAAE,GAAGL,kBAAAA,EAAAA;AACjD,IAAA,MAAMiD,QAAAA,GAAWC,uBAAAA,EAAAA;IAEjB,MAAMC,kBAAAA,GAA+BC,iBAAWJ,MAAAA,CAAAA,CAAQK,MAAM,CAC5D,CAACC,WAAAA,EAAa,CAAC9C,GAAAA,EAAK+C,KAAAA,CAAM,GAAA;AACxB,QAAA,OAAOA,OAAOC,kBAAAA,GAAqB;AAAIF,YAAAA,GAAAA,WAAAA;AAAa9C,YAAAA;SAAI,GAAG8C,WAAAA;AAC7D,IAAA,CAAA,EACA,EAAE,CAAA;AAGJ,IAAA,MAAM,CAACG,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGvD,gBAAAA,CAAMC,QAAQ,CAAS,WAAA,CAAA;AAEjE,IAAA,MAAMuD,eAAe,CAACC,SAAAA,GAAAA;AACpB,QAAA,IAAI,OAAOA,SAAAA,KAAc,QAAA,IAAY,CAACZ,MAAM,CAACY,UAAU,EAAE;AACvD,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,aAAAA,GACJ1C,MAAAA,CAAO2C,QAAQ,CAACC,MAAM,KAAK,CAAA,IAAKC,YAAAA,CAAOC,OAAO,CAAC9C,MAAAA,EAAQA,MAAAA,CAAO2C,QAAQ,CAAC,CAAA,CAAE,CAAA;AAE3E,QAAA,IAAI,CAAC3C,MAAAA,CAAO+C,SAAS,IAAI,CAACL,aAAAA,EAAe;;;YAGvCM,gBAAAA,CAAWC,WAAW,CACpBjD,MAAAA,EACA;gBACE0B,IAAAA,EAAM,OAAA;gBACNiB,QAAAA,EAAU;AAAC,oBAAA;wBAAEjB,IAAAA,EAAM,MAAA;wBAAQwB,IAAAA,EAAM;AAAG;AAAE;aACxC,EACA;gBACEC,MAAAA,EAAQ;AAEV,aAAA,CAAA;AAEJ,QAAA,CAAA,MAAO,IAAI,CAACnD,MAAAA,CAAO+C,SAAS,IAAIL,aAAAA,EAAe;;;AAG7CM,YAAAA,gBAAAA,CAAWG,MAAM,CAACnD,MAAAA,EAAQ6C,YAAAA,CAAOO,KAAK,CAACpD,MAAAA,EAAQ;AAAC,gBAAA,CAAA;AAAG,gBAAA;AAAE,aAAA,CAAA,CAAA;AACvD,QAAA;;AAGA,QAAA,MAAMqD,gBAAAA,GAAmBR,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;YAC5CuD,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AAC3D,SAAA,CAAA;AAEA,QAAA,IAAI2B,gBAAAA,IAAoB;AAAC,YAAA,cAAA;AAAgB,YAAA;SAAiB,CAACK,QAAQ,CAACjB,SAAAA,CAAAA,EAAY;YAC9E,MAAM,CAACkB,WAAAA,EAAaC,eAAAA,CAAgB,GAAGP,gBAAAA;YACvC,MAAMQ,MAAAA,GAASpB,SAAAA,KAAc,cAAA,GAAiB,SAAA,GAAY,WAAA;AAE1D,YAAA,IAAI,CAACI,YAAAA,CAAOY,QAAQ,CAACE,WAAAA,CAAAA,IAAgBG,WAAWH,WAAAA,CAAAA,EAAc;;gBAE5D,IAAIA,WAAAA,CAAYE,MAAM,KAAKA,MAAAA,EAAQ;oBACjCb,gBAAAA,CAAWe,QAAQ,CAAC/D,MAAAA,EAAQ;AAAE6D,wBAAAA;qBAAO,EAAG;wBAAEG,EAAAA,EAAIJ;AAAgB,qBAAA,CAAA;AAChE,gBAAA;AACF,YAAA;AACA,YAAA;AACF,QAAA;;AAGA,QAAA,MAAMK,gBAAAA,GAAmBpC,MAAM,CAACY,SAAAA,CAAU,EAAEyB,aAAAA,GAAgBlE,MAAAA,CAAAA;QAC5Dd,sBAAAA,CAAuB+E,gBAAAA,CAAAA;QAEvB1B,gBAAAA,CAAiBE,SAAAA,CAAAA;AAEjB3B,QAAAA,sBAAAA,CAAYC,KAAK,CAACf,MAAAA,CAAAA;AACpB,IAAA,CAAA;AAEA;;;;;;;AAOC,MACD,MAAMmE,kBAAAA,GAAqB,CAACvD,CAAAA,GAAaA,EAAEC,cAAc,EAAA;;AAGzD7B,IAAAA,gBAAAA,CAAMoF,SAAS,CAAC,IAAA;QACd,IAAIpE,MAAAA,CAAO+C,SAAS,EAAE;YACpB,IAAIsB,YAAAA;;AAGJ,YAAA,MAAMhB,gBAAAA,GAAmBR,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;gBAC5CuD,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK,MAAA;gBACzDsC,EAAAA,EAAIhE,MAAAA,CAAO+C,SAAS,CAACuB;AACvB,aAAA,CAAA;AAEA,YAAA,IAAIjB,gBAAAA,EAAkB;gBACpB,MAAM,CAACM,YAAY,GAAGN,gBAAAA;gBACtBgB,YAAAA,GAAeV,WAAAA;YACjB,CAAA,MAAO;;gBAEL,MAAM,CAACY,UAAAA,CAAW,GAAG1B,YAAAA,CAAO2B,MAAM,CAACxE,MAAAA,EAAQA,MAAAA,CAAO+C,SAAS,CAACuB,MAAM,EAAE;oBAClEG,IAAAA,EAAM,OAAA;oBACNC,KAAAA,EAAO;AACT,iBAAA,CAAA;;gBAGA,IAAIH,UAAAA,CAAW7C,IAAI,KAAK,WAAA,EAAa;;;;oBAKnCsB,gBAAAA,CAAWe,QAAQ,CAAC/D,MAAAA,EAAQ;wBAAE0B,IAAAA,EAAM;AAAY,qBAAA,CAAA;;oBAEhD2C,YAAAA,GAAe;AAAE,wBAAA,GAAGE,UAAU;wBAAE7C,IAAAA,EAAM;AAAY,qBAAA;gBACpD,CAAA,MAAO;oBACL2C,YAAAA,GAAeE,UAAAA;AACjB,gBAAA;AACF,YAAA;;AAGA,YAAA,MAAMI,iBAAiBC,aAAAA,CAAQ/C,MAAAA,CAAAA,CAAQgD,IAAI,CACzC,CAACC,QAAAA,GAAa,CAACjC,YAAAA,CAAOY,QAAQ,CAACY,YAAAA,CAAAA,IAAiBxC,MAAM,CAACiD,QAAAA,CAAS,EAAEC,SAAAA,CAAUV,YAAAA,CAAAA,CAAAA;;YAI9E,IAAIM,cAAAA,IAAkBA,mBAAmBrC,aAAAA,EAAe;gBACtDC,gBAAAA,CAAiBoC,cAAAA,CAAAA;AACnB,YAAA;AACF,QAAA;IACF,CAAA,EAAG;AAAC3E,QAAAA,MAAAA,CAAO+C,SAAS;AAAE/C,QAAAA,MAAAA;AAAQ6B,QAAAA,MAAAA;AAAQS,QAAAA;AAAc,KAAA,CAAA;AAEpDtD,IAAAA,gBAAAA,CAAMoF,SAAS,CAAC,IAAA;;QAEd,IAAIpC,kBAAAA,CAAmBY,MAAM,GAAG,CAAA,IAAK,CAACZ,kBAAAA,CAAmB0B,QAAQ,CAACpB,aAAAA,CAAAA,EAAgB;YAChFC,gBAAAA,CAAiBP,kBAAkB,CAAC,CAAA,CAAE,CAAA;AACxC,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,kBAAAA;AAAoBM,QAAAA;AAAc,KAAA,CAAA;AAEtC,IAAA,IAAI,CAACT,MAAM,CAACS,aAAAA,CAAc,EAAE;QAC1B,OAAO,IAAA;AACT,IAAA;IAEA,MAAM0C,aAAAA,GAAgBnD,MAAM,CAACS,aAAAA,CAAc;IAC3C,MAAM5C,IAAAA,GAAOsF,cAAcvF,IAAI;IAE/B,qBACEwF,eAAA,CAAAC,mBAAA,EAAA;;0BACE5E,cAAA,CAAC5B,aAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAA4B,cAAA,CAAC6E,yBAAAA,EAAAA;AACCC,oBAAAA,SAAAA,EAAW1F,sBAAQY,cAAA,CAACZ,IAAAA,EAAAA,EAAAA,CAAAA;oBACpB2F,QAAAA,EAAU7C,YAAAA;AACV8C,oBAAAA,gBAAAA,EAAkB,IAAOxD,QAAAA,GAAW,EAAA,GAAK5B,aAAAA,CAAc8E,cAAcpF,KAAK,CAAA;oBAC1Ea,KAAAA,EAAO6B,aAAAA;oBACPiD,gBAAAA,EAAkBpB,kBAAAA;AAClBlD,oBAAAA,YAAAA,EAAYf,aAAAA,CAAc;wBACxBsF,EAAAA,EAAI,sCAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA,CAAA;oBACA3F,QAAAA,EAAUA,QAAAA;8BAETkC,kBAAAA,CAAmB0D,GAAG,CAAC,CAACrG,GAAAA,GAAAA;wBACvB,MAAMsG,aAAAA,GAAgB9D,MAAM,CAACxC,GAAAA,CAAI;AACjC,wBAAA,qBACEiB,cAAA,CAACsF,WAAAA,EAAAA;4BAECnF,KAAAA,EAAOpB,GAAAA;AACPO,4BAAAA,KAAAA,EAAO+F,cAAc/F,KAAK;AAC1BH,4BAAAA,IAAAA,EAAMkG,cAAclG,IAAI;4BACxB6C,aAAAA,EAAeA;AAJVjD,yBAAAA,EAAAA,GAAAA,CAAAA;AAOX,oBAAA,CAAA;;;AAGHP,YAAAA;;;AAGP,CAAA;AASA,MAAM8G,WAAAA,GAAc,CAAC,EAAEnF,KAAK,EAAEhB,IAAAA,EAAMC,IAAI,EAAEE,KAAK,EAAE0C,aAAa,EAAoB,GAAA;IAChF,MAAM,EAAEpC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAM0F,aAAapF,KAAAA,KAAU6B,aAAAA;AAE7B,IAAA,qBACEhC,cAAA,CAACwF,+BAAAA,EAAAA;AACCV,QAAAA,SAAAA,EAAW1F,sBAAQY,cAAA,CAACZ,IAAAA,EAAAA;AAAKiC,YAAAA,IAAAA,EAAMkE,aAAa,YAAA,GAAe;;QAC3DpF,KAAAA,EAAOA,KAAAA;kBAENP,aAAAA,CAAcN,KAAAA;;AAGrB,CAAA;AAEA,MAAMkE,aAAa,CAACN,IAAAA,GAAAA;IAClB,OAAOuC,UAAAA,CAAKC,MAAM,CAACxC,IAAAA,CAAAA,IAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK,MAAA;AACtE,CAAA;AAQA,MAAMuE,UAAAA,GAAa,CAAC,EAAE7D,KAAK,EAAEyB,MAAM,EAAEqC,QAAAA,GAAW,SAAS,EAAmB,GAAA;IAC1E,MAAM,EAAEhG,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEH,MAAM,EAAEF,QAAQ,EAAE+B,MAAM,EAAE,GAAG5B,mCAAAA,CAAuB,YAAA,CAAA;AAE5D,IAAA,MAAMkG,YAAAA,GAAe,IAAA;AACnB,QAAA,IAAI,CAACnG,MAAAA,CAAO+C,SAAS,EAAE,OAAO,KAAA;;AAG9B,QAAA,MAAMM,gBAAAA,GAAmBR,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;YAC5CuD,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK,MAAA;YACzDsC,EAAAA,EAAIhE,MAAAA,CAAO+C,SAAS,CAACuB;AACvB,SAAA,CAAA;AAEA,QAAA,IAAIjB,gBAAAA,EAAkB;YACpB,MAAM,CAACM,YAAY,GAAGN,gBAAAA;YACtB,IAAI,CAACR,YAAAA,CAAOY,QAAQ,CAACE,WAAAA,CAAAA,IAAgBG,UAAAA,CAAWH,WAAAA,CAAAA,IAAgBA,WAAAA,CAAYE,MAAM,KAAKA,MAAAA,EACrF,OAAO,IAAA;AACX,QAAA;QAEA,OAAO,KAAA;AACT,IAAA,CAAA;AAEA;;;AAGC,MACD,MAAMuC,cAAAA,GAAiB,IAAA;;AAErB,QAAA,IAAItG,QAAAA,EAAU;YACZ,OAAO,IAAA;AACT,QAAA;;QAGA,IAAI,CAACE,MAAAA,CAAO+C,SAAS,EAAE;YACrB,OAAO,KAAA;AACT,QAAA;;AAGA,QAAA,MAAMsD,eAAAA,GAAkBxD,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;YAC3CgE,EAAAA,EAAIhE,MAAAA,CAAO+C,SAAS,CAACuB,MAAM;YAC3Bf,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AAC3D,SAAA,CAAA;AACA,QAAA,MAAM4E,cAAAA,GAAiBzD,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;YAC1CgE,EAAAA,EAAIhE,MAAAA,CAAO+C,SAAS,CAAChC,KAAK;YAC1BwC,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AAC3D,SAAA,CAAA;QAEA,IAAI,CAAC2E,eAAAA,IAAmB,CAACC,cAAAA,EAAgB;YACvC,OAAO,KAAA;AACT,QAAA;;AAGA,QAAA,OAAOD,eAAe,CAAC,CAAA,CAAE,KAAKC,cAAc,CAAC,CAAA,CAAE;AACjD,IAAA,CAAA;AAEA,IAAA,MAAMC,aAAa,CAAC1C,MAAAA,GAAAA;QAClB,IAAIR,gBAAAA;QACJ,IAAIrD,MAAAA,CAAO+C,SAAS,EAAE;YACpBM,gBAAAA,GAAmBR,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;gBACtCuD,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AAC3D,aAAA,CAAA;QACF,CAAA,MAAO;;YAEL,MAAM,CAAC8E,GAAGC,YAAAA,CAAa,GAAG5D,aAAO6D,IAAI,CAAC1G,QAAQ,EAAE,CAAA;YAChDqD,gBAAAA,GAAmBR,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;gBACtCuD,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK,MAAA;gBACzDsC,EAAAA,EAAIyC;AACN,aAAA,CAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACpD,gBAAAA,EAAkB;;AAErBxB,YAAAA,MAAM,CAAC,CAAC,KAAK,EAAEgC,MAAAA,CAAAA,CAAQ,CAAC,EAAEK,aAAAA,CAAelE,MAAAA,CAAAA;AACzC,YAAA;AACF,QAAA;;QAGA,MAAM,CAAC2D,WAAAA,EAAaC,eAAAA,CAAgB,GAAGP,gBAAAA;AAEvC,QAAA,IAAI,CAACR,YAAAA,CAAOY,QAAQ,CAACE,WAAAA,CAAAA,IAAgBG,WAAWH,WAAAA,CAAAA,EAAc;YAC5D,IAAIA,WAAAA,CAAYE,MAAM,KAAKA,MAAAA,EAAQ;;gBAEjCb,gBAAAA,CAAWe,QAAQ,CAAC/D,MAAAA,EAAQ;AAAE6D,oBAAAA;iBAAO,EAAG;oBAAEG,EAAAA,EAAIJ;AAAgB,iBAAA,CAAA;YAChE,CAAA,MAAO;;gBAEL/B,MAAM,CAAC,WAAA,CAAY,EAAEqC,aAAAA,CAAelE,MAAAA,CAAAA;AACtC,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAIkG,aAAa,MAAA,EAAQ;QACvB,MAAMxG,IAAAA,GAAO0C,MAAM3C,IAAI;AAEvB,QAAA,qBACEa,cAAA,CAACqG,cAAAA,EAAAA;AACCvB,YAAAA,SAAAA,EAAW1F,sBAAQY,cAAA,CAACZ,IAAAA,EAAAA,EAAAA,CAAAA;AACpBkH,YAAAA,QAAAA,EAAU,IAAML,UAAAA,CAAW1C,MAAAA,CAAAA;YAC3BhE,QAAAA,EAAUsG,YAAAA,EAAAA;YACVrG,QAAAA,EAAUsG,cAAAA,EAAAA;AAETlG,YAAAA,QAAAA,EAAAA,aAAAA,CAAckC,MAAMxC,KAAK;;AAGhC,IAAA;AAEA,IAAA,qBACEU,cAAA,CAACd,aAAAA,EAAAA;AACCC,QAAAA,IAAAA,EAAM2C,MAAM3C,IAAI;QAChBE,IAAAA,EAAMkE,MAAAA;AACNjE,QAAAA,KAAAA,EAAOwC,MAAMxC,KAAK;QAClBC,QAAAA,EAAUsG,YAAAA,EAAAA;QACVrG,QAAAA,EAAUsG,cAAAA,EAAAA;AACVrG,QAAAA,WAAAA,EAAa,IAAMwG,UAAAA,CAAW1C,MAAAA;;AAGpC,CAAA;AAEA,MAAMgD,aAAa,CAAC,EAClB/G,QAAQ,EACRoG,QAAAA,GAAW,SAAS,EAIrB,GAAA;AACC,IAAA,MAAM,EAAElG,MAAM,EAAE,GAAGC,mCAAAA,CAAuB,YAAA,CAAA;IAC1C,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAM2G,YAAAA,GAAe,IAAA;QACnB,MAAM,EAAE/D,SAAS,EAAE,GAAG/C,MAAAA;QAEtB,IAAI,CAAC+C,WAAW,OAAO,KAAA;QAEvB,MAAM,CAACQ,MAAM,GAAGwD,KAAAA,CAAMC,IAAI,CACxBnE,YAAAA,CAAOoE,KAAK,CAACjH,MAAAA,EAAQ;YACnBgE,EAAAA,EAAInB,YAAAA,CAAOqE,WAAW,CAAClH,MAAAA,EAAQ+C,SAAAA,CAAAA;YAC/BQ,KAAAA,EAAO,CAACC,OAAS2D,aAAAA,CAAaC,SAAS,CAAC5D,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AACjE,SAAA,CAAA,CAAA;AAGF,QAAA,OAAO2F,OAAAA,CAAQ9D,KAAAA,CAAAA;AACjB,IAAA,CAAA;AAEA,IAAA,MAAM+D,cAAAA,GAAiB,IAAA;;AAErB,QAAA,IAAIxH,QAAAA,EAAU;YACZ,OAAO,IAAA;AACT,QAAA;;QAGA,IAAI,CAACE,MAAAA,CAAO+C,SAAS,EAAE;YACrB,OAAO,KAAA;AACT,QAAA;;AAGA,QAAA,MAAMsD,eAAAA,GAAkBxD,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;YAC3CgE,EAAAA,EAAIhE,MAAAA,CAAO+C,SAAS,CAACuB,MAAM;YAC3Bf,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AAC3D,SAAA,CAAA;AACA,QAAA,MAAM4E,cAAAA,GAAiBzD,YAAAA,CAAOS,KAAK,CAACtD,MAAAA,EAAQ;YAC1CgE,EAAAA,EAAIhE,MAAAA,CAAO+C,SAAS,CAAChC,KAAK;YAC1BwC,KAAAA,EAAO,CAACC,OAAS,CAACX,YAAAA,CAAOY,QAAQ,CAACD,IAAAA,CAAAA,IAASA,IAAAA,CAAK9B,IAAI,KAAK;AAC3D,SAAA,CAAA;QAEA,IAAI,CAAC2E,eAAAA,IAAmB,CAACC,cAAAA,EAAgB;YACvC,OAAO,KAAA;AACT,QAAA;;AAGA,QAAA,OAAOD,eAAe,CAAC,CAAA,CAAE,KAAKC,cAAc,CAAC,CAAA,CAAE;AACjD,IAAA,CAAA;AAEA,IAAA,MAAMiB,OAAAA,GAAU,IAAA;AACdvH,QAAAA,MAAAA,CAAOwH,kBAAkB,GAAG,IAAA;;AAE5BC,QAAAA,eAAAA,CAAWzH,MAAAA,EAAQ;YAAE0H,GAAAA,EAAK;AAAG,SAAA,CAAA;AAC/B,IAAA,CAAA;AAEA,IAAA,MAAM9H,KAAAA,GAAQ;QACZ4F,EAAAA,EAAI,wBAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA;AAEA,IAAA,IAAIS,aAAa,MAAA,EAAQ;AACvB,QAAA,qBACE5F,cAAA,CAACqG,cAAAA,EAAAA;AACCvB,YAAAA,SAAAA,gBAAW9E,cAAA,CAACqH,UAAAA,EAAAA,EAAAA,CAAAA;YACZf,QAAAA,EAAUW,OAAAA;YACV1H,QAAAA,EAAUiH,YAAAA,EAAAA;YACVhH,QAAAA,EAAUwH,cAAAA,EAAAA;sBAETpH,aAAAA,CAAcN,KAAAA;;AAGrB,IAAA;AAEA,IAAA,qBACEU,cAAA,CAACd,aAAAA,EAAAA;QACCC,IAAAA,EAAMkI,UAAAA;QACNhI,IAAAA,EAAK,MAAA;QACLC,KAAAA,EAAOA,KAAAA;QACPC,QAAAA,EAAUiH,YAAAA,EAAAA;QACV/G,WAAAA,EAAawH,OAAAA;QACbzH,QAAAA,EAAUwH,cAAAA;;AAGhB,CAAA;AAEA,MAAMX,cAAAA,GAAiB9I,uBAAAA,CAAO+J,iBAAAA,CAAKC,IAAI,CAAwB;AAC7D,EAAA,EAAE,CAACC,KAAAA,GACDA,KAAAA,CAAMjI,QAAQ,IACdkI,oBAAG;aACM,EAAE,CAAC,EAAEhK,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACgK,UAAU,CAAC;;AAElD,IAAA,CAAC;;;AAGK,UAAA,EAAE,CAAC,EAAEjK,KAAK,EAAE8B,QAAQ,EAAE,GAC1BA,QAAAA,GAAW9B,KAAAA,CAAMC,MAAM,CAACgK,UAAU,GAAGjK,MAAMC,MAAM,CAACiK,UAAU,CAAC;;AAEnE,CAAC;AAED,MAAMC,qBAAAA,GAAwB,IAAA;AAC5B,IAAA,MAAM,EAAElI,MAAM,EAAEF,QAAQ,EAAE+B,MAAM,EAAElC,IAAI,EAAEwI,WAAW,EAAE,GACnDlI,mCAAAA,CAAuB,uBAAA,CAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,MAAM4C,SAAAA,GAAY/C,OAAO+C,SAAS;AAClC,IAAA,MAAMqF,WAAAA,GAAcpI,MAAAA,CAAO2C,QAAQ,CAACC,MAAM;IAE1C,MAAMyF,WAAAA,GAActF,YAAYA,SAAAA,CAAUuB,MAAM,CAACgE,IAAI,CAAC,EAAE,GAAG,IAAA;IAC3D,MAAMC,UAAAA,GAAaxF,YAAYA,SAAAA,CAAUhC,KAAK,CAACuH,IAAI,CAAC,EAAE,GAAG,IAAA;AACzD,IAAA,MAAME,sBAAAA,GACJH,WAAAA,KAAgB,IAAA,IAAQE,UAAAA,KAAe,QAAQF,WAAAA,KAAgBE,UAAAA;IAEjE,MAAME,oBAAAA,GACJD,0BAA0BH,WAAAA,KAAgB,IAAA,GAAOrI,OAAO2C,QAAQ,CAAC0F,YAAY,GAAG,IAAA;AAClF,IAAA,MAAMrD,aAAAA,GACJyD,oBAAAA,IACAC,MAAAA,CAAOC,MAAM,CAAC9G,MAAAA,CAAAA,CAAQgD,IAAI,CAAC,CAACzC,KAAAA,GAAUA,KAAAA,CAAM2C,SAAS,CAAC0D,oBAAAA,CAAAA,CAAAA;AAExD,IAAA,MAAMG,2BACJH,oBAAAA,IAAwBzD,aAAAA,GACnBA,cAAc6D,WAAW,GAAGJ,yBAAyB,IAAA,GACtD,KAAA;AAEN,IAAA,MAAMK,YACJ,CAAChJ,QAAAA,IACD0I,0BACAI,wBAAAA,IACAP,WAAAA,KAAgB,QAChBA,WAAAA,GAAc,CAAA;IAChB,MAAMU,WAAAA,GACJ,CAACjJ,QAAAA,IACD0I,sBAAAA,IACAI,4BACAP,WAAAA,KAAgB,IAAA,IAChBA,cAAcD,WAAAA,GAAc,CAAA;AAE9B,IAAA,MAAMY,YAAY,CAACC,SAAAA,GAAAA;QACjB,IAAI,CAAClG,SAAAA,IAAasF,WAAAA,KAAgB,IAAA,EAAM;AAExC,QAAA,MAAMa,YAAAA,GAAe;AAACb,YAAAA;AAAY,SAAA;AAClC,QAAA,MAAMc,QAAAA,GAAW;YAACF,SAAAA,KAAc,IAAA,GAAOZ,WAAAA,GAAc,CAAA,GAAIA,WAAAA,GAAc;AAAE,SAAA;QAEzErF,gBAAAA,CAAWoG,SAAS,CAACpJ,MAAAA,EAAQ;YAC3BgE,EAAAA,EAAIkF,YAAAA;YACJG,EAAAA,EAAIF;AACN,SAAA,CAAA;;AAGAnG,QAAAA,gBAAAA,CAAWG,MAAM,CAACnD,MAAAA,EAAQ6C,YAAAA,CAAOO,KAAK,CAACpD,MAAAA,EAAQmJ,QAAAA,CAAAA,CAAAA;AAC/CrI,QAAAA,sBAAAA,CAAYC,KAAK,CAACf,MAAAA,CAAAA;AAElBmI,QAAAA,WAAAA,CACEjI,aAAAA,CACE;AACEsF,YAAAA,EAAAA,EAAI8D,2BAAAA,CAAe,+BAAA,CAAA;YACnB7D,cAAAA,EAAgB;SAClB,EACA;YACE8D,IAAAA,EAAM,CAAA,EAAG5J,KAAK,CAAC,EAAEuJ,YAAY,CAAC,CAAA,CAAE,GAAG,CAAA,CAAA,CAAG;AACtCM,YAAAA,QAAAA,EAAU,CAAA,EAAGL,QAAQ,CAAC,CAAA,CAAE,GAAG,CAAA,CAAE,IAAI,EAAEnJ,MAAAA,CAAO2C,QAAQ,CAACC,MAAM,CAAA;AAC3D,SAAA,CAAA,CAAA;AAGN,IAAA,CAAA;AAEA,IAAA,qBACEqC,eAAA,CAACnH,iBAAAA,EAAAA;QAAKmL,SAAAA,EAAU,KAAA;QAAMQ,GAAAA,EAAK,CAAA;;0BACzBnJ,cAAA,CAACC,oBAAAA,EAAAA;AACCX,gBAAAA,KAAAA,EAAOM,aAAAA,CAAc;AACnBsF,oBAAAA,EAAAA,EAAI8D,2BAAAA,CAAe,gCAAA,CAAA;oBACnB7D,cAAAA,EAAgB;AAClB,iBAAA,CAAA;wCAEAnF,cAAA,CAACnC,mBAAQuL,MAAM,EAAA;AACb/I,oBAAAA,aAAAA,EAAe,CAACC,CAAAA,GAAAA;AACdA,wBAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChB,wBAAA,IAAIiI,WAAWE,SAAAA,CAAU,IAAA,CAAA;AAC3B,oBAAA,CAAA;AACAhI,oBAAAA,eAAAA,EAAe,CAAC8H,SAAAA;AAChBhJ,oBAAAA,QAAAA,EAAU,CAACgJ,SAAAA;AACX7H,oBAAAA,YAAAA,EAAYf,aAAAA,CAAc;AACxBsF,wBAAAA,EAAAA,EAAI8D,2BAAAA,CAAe,gCAAA,CAAA;wBACnB7D,cAAAA,EAAgB;AAClB,qBAAA,CAAA;oBACAvE,OAAO,EAAA,IAAA;AAEP,oBAAA,QAAA,gBAAAZ,cAAA,CAAC9B,UAAAA,EAAAA;wBACC2C,GAAAA,EAAI,QAAA;wBACJE,UAAAA,EAAW,QAAA;wBACXC,cAAAA,EAAe,QAAA;wBACfC,KAAAA,EAAO,CAAA;wBACPC,MAAAA,EAAQ,CAAA;wBACRC,SAAS,EAAA,IAAA;wBACTC,IAAAA,EAAK,QAAA;AAEL,wBAAA,QAAA,gBAAApB,cAAA,CAACqJ,aAAAA,EAAAA;4BAAQhI,IAAAA,EAAM,CAACmH,YAAY,YAAA,GAAe;;;;;0BAKjDxI,cAAA,CAACC,oBAAAA,EAAAA;AACCX,gBAAAA,KAAAA,EAAOM,aAAAA,CAAc;AACnBsF,oBAAAA,EAAAA,EAAI8D,2BAAAA,CAAe,kCAAA,CAAA;oBACnB7D,cAAAA,EAAgB;AAClB,iBAAA,CAAA;wCAEAnF,cAAA,CAACnC,mBAAQuL,MAAM,EAAA;AACb/I,oBAAAA,aAAAA,EAAe,CAACC,CAAAA,GAAAA;AACdA,wBAAAA,CAAAA,CAAEC,cAAc,EAAA;AAChB,wBAAA,IAAIkI,aAAaC,SAAAA,CAAU,MAAA,CAAA;AAC7B,oBAAA,CAAA;AACAhI,oBAAAA,eAAAA,EAAe,CAAC+H,WAAAA;AAChBjJ,oBAAAA,QAAAA,EAAU,CAACiJ,WAAAA;AACX9H,oBAAAA,YAAAA,EAAYf,aAAAA,CAAc;AACxBsF,wBAAAA,EAAAA,EAAI8D,2BAAAA,CAAe,kCAAA,CAAA;wBACnB7D,cAAAA,EAAgB;AAClB,qBAAA,CAAA;oBACAvE,OAAO,EAAA,IAAA;AAEP,oBAAA,QAAA,gBAAAZ,cAAA,CAAC9B,UAAAA,EAAAA;wBACC2C,GAAAA,EAAI,QAAA;wBACJE,UAAAA,EAAW,QAAA;wBACXC,cAAAA,EAAe,QAAA;wBACfC,KAAAA,EAAO,CAAA;wBACPC,MAAAA,EAAQ,CAAA;wBACRC,SAAS,EAAA,IAAA;wBACTC,IAAAA,EAAK,QAAA;AAEL,wBAAA,QAAA,gBAAApB,cAAA,CAACsJ,eAAAA,EAAAA;4BAAUjI,IAAAA,EAAM,CAACoH,cAAc,YAAA,GAAe;;;;;;;AAM3D,CAAA;AAEA,MAAMc,aAAAA,GAAgB,IAAA;IACpB,MAAM,EAAE7J,MAAM,EAAE6B,MAAM,EAAEiI,SAAS,EAAEhK,QAAQ,EAAE,GAAGG,mCAAAA,CAAuB,eAAA,CAAA;IACvE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM2B,QAAAA,GAAWC,uBAAAA,EAAAA;AAEjB;;AAEC,MACD,MAAMgI,mBAAAA,GAAsB,IAAA;;AAE1B,QAAA,IAAIjK,QAAAA,EAAU;YACZ,OAAO,IAAA;AACT,QAAA;QAEA,IAAI,CAACE,MAAAA,CAAO+C,SAAS,EAAE;YACrB,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,MAAMsB,YAAAA,GAAerE,MAAAA,CAAO2C,QAAQ,CAAC3C,MAAAA,CAAO+C,SAAS,CAACuB,MAAM,CAACgE,IAAI,CAAC,CAAA,CAAE,CAAC;QACrE,IAAI,CAACjE,cAAc,OAAO,IAAA;QAE1B,IAAI;AAAC,YAAA,OAAA;AAAS,YAAA;AAAO,SAAA,CAACX,QAAQ,CAACW,YAAAA,CAAa3C,IAAI,CAAA,EAAG;YACjD,OAAO,IAAA;AACT,QAAA;QAEA,OAAO,KAAA;AACT,IAAA,CAAA;AAEA,IAAA,MAAMsI,gBAAAA,GAAmBD,mBAAAA,EAAAA;AAEzB;;;;;;AAMC,MACD,MAAME,kBAAAA,GAA0C;WAC3CvB,MAAAA,CAAOwB,OAAO,CAACJ,SAAAA,CAAAA,CAAWpE,GAAG,CAAC,CAAC,CAAC/F,MAAMwK,QAAAA,CAAS,GAAA;YAChD,MAAMzK,IAAAA,GAAOyK,SAAS1K,IAAI;YAC1B,MAAMI,QAAAA,GAAWsK,QAAAA,CAASC,aAAa,CAACpK,MAAAA,CAAAA;AACxC,YAAA,MAAMwC,YAAAA,GAAe,IAAM2H,QAAAA,CAASE,YAAY,CAACrK,MAAAA,CAAAA;YAEjD,OAAO;AACLsK,gBAAAA,OAAAA,gBACEhK,cAAA,CAACd,aAAAA,EAAAA;oBAECG,IAAAA,EAAMA,IAAAA;AACNF,oBAAAA,IAAAA,EAAM0K,SAAS1K,IAAI;AACnBG,oBAAAA,KAAAA,EAAOuK,SAASvK,KAAK;oBACrBC,QAAAA,EAAUsK,QAAAA,CAASC,aAAa,CAACpK,MAAAA,CAAAA;oBACjCD,WAAAA,EAAayC,YAAAA;oBACb1C,QAAAA,EAAUkK;AANLrK,iBAAAA,EAAAA,IAAAA,CAAAA;AAST4K,gBAAAA,IAAAA,gBACEjK,cAAA,CAACqG,cAAAA,EAAAA;AAAevB,oBAAAA,SAAAA,gBAAW9E,cAAA,CAACZ,IAAAA,EAAAA,EAAAA,CAAAA;oBAASkH,QAAAA,EAAUpE,YAAAA;oBAAc3C,QAAAA,EAAUA,QAAAA;AACpEK,oBAAAA,QAAAA,EAAAA,aAAAA,CAAciK,SAASvK,KAAK;;gBAGjCP,GAAAA,EAAK,CAAC,SAAS,EAAEM,IAAAA,CAAAA;AACnB,aAAA;AACF,QAAA,CAAA,CAAA;AACA,QAAA;AACE2K,YAAAA,OAAAA,gBAAShK,cAAA,CAACuG,UAAAA,EAAAA;gBAAW/G,QAAAA,EAAUkK,gBAAAA;gBAAkB9D,QAAAA,EAAS;;AAC1DqE,YAAAA,IAAAA,gBAAMjK,cAAA,CAACuG,UAAAA,EAAAA;gBAAW/G,QAAAA,EAAUkK,gBAAAA;gBAAkB9D,QAAAA,EAAS;;YACvD7G,GAAAA,EAAK;AACP,SAAA;AACA,QAAA;;AAEEiL,YAAAA,OAAAA,gBACErF,eAAA,CAACnH,iBAAAA,EAAAA;gBAAKmL,SAAAA,EAAU,KAAA;;kCACd3I,cAAA,CAACpC,gBAAAA,EAAAA;wBAAiBsM,KAAAA,EAAO;4BAAEC,UAAAA,EAAY;AAAS;;AAChD,kCAAAnK,cAAA,CAACnC,mBAAQuM,WAAW,EAAA;wBAAChJ,IAAAA,EAAK,QAAA;wBAASR,OAAO,EAAA,IAAA;AACxC,wBAAA,QAAA,gBAAA+D,eAAA,CAACnH,iBAAAA,EAAAA;4BAAK2L,GAAAA,EAAK,CAAA;;8CACTnJ,cAAA,CAAC2F,UAAAA,EAAAA;oCAAW7D,KAAAA,EAAOP,MAAM,CAAC,gBAAA,CAAiB;oCAAGgC,MAAAA,EAAO,WAAA;oCAAYqC,QAAAA,EAAS;;8CAC1E5F,cAAA,CAAC2F,UAAAA,EAAAA;oCAAW7D,KAAAA,EAAOP,MAAM,CAAC,cAAA,CAAe;oCAAGgC,MAAAA,EAAO,SAAA;oCAAUqC,QAAAA,EAAS;;;;;;;YAK9EqE,IAAAA,gBACEtF,eAAA,CAAAC,mBAAA,EAAA;;AACE,kCAAA5E,cAAA,CAACsH,kBAAKxJ,SAAS,EAAA,EAAA,CAAA;kCACfkC,cAAA,CAAC2F,UAAAA,EAAAA;wBAAW7D,KAAAA,EAAOP,MAAM,CAAC,gBAAA,CAAiB;wBAAGgC,MAAAA,EAAO,WAAA;wBAAYqC,QAAAA,EAAS;;kCAC1E5F,cAAA,CAAC2F,UAAAA,EAAAA;wBAAW7D,KAAAA,EAAOP,MAAM,CAAC,cAAA,CAAe;wBAAGgC,MAAAA,EAAO,SAAA;wBAAUqC,QAAAA,EAAS;;;;YAG1E7G,GAAAA,EAAK;AACP;AACD,KAAA;IAED,qBACEiB,cAAA,CAACnC,mBAAQwM,IAAI,EAAA;QAAC3J,eAAAA,EAAelB,QAAAA;QAAUoB,OAAO,EAAA,IAAA;AAC5C,QAAA,QAAA,gBAAA+D,eAAA,CAACrH,cAAAA,EAAAA;YAAegN,OAAAA,EAAS;gBAAEC,OAAAA,EAAS,CAAA;gBAAGtM,MAAAA,EAAQ;AAAE,aAAA;YAAGgD,KAAAA,EAAM,MAAA;;8BACxDjB,cAAA,CAACsB,cAAAA,EAAAA,EAAAA,CAAAA;gBACAE,QAAAA,kBACCmD,eAAA,CAAAC,mBAAA,EAAA;;sCACE5E,cAAA,CAACpC,gBAAAA,EAAAA,EAAAA,CAAAA;sCACDoC,cAAA,CAAC4H,qBAAAA,EAAAA,EAAAA;;;8BAGL5H,cAAA,CAACpC,gBAAAA,EAAAA,EAAAA,CAAAA;AACD,8BAAAoC,cAAA,CAACnC,mBAAQuM,WAAW,EAAA;oBAAChJ,IAAAA,EAAK,UAAA;oBAAWR,OAAO,EAAA,IAAA;AAC1C,oBAAA,QAAA,gBAAAZ,cAAA,CAACxC,iBAAAA,EAAAA;wBAAKmL,SAAAA,EAAU,KAAA;wBAAMQ,GAAAA,EAAK,CAAA;wBAAGqB,IAAAA,EAAM,CAAA;wBAAGC,QAAAA,EAAS,QAAA;AAC9C,wBAAA,QAAA,gBAAAzK,cAAA,CAAC0K,2CAAAA,EAAAA;4BAAsBf,kBAAAA,EAAoBA;;;;;;;AAMvD;;;;;"}
@@ -11,7 +11,7 @@ import { styled, css } from 'styled-components';
11
11
  import { getTranslation } from '../../../../../utils/translations.mjs';
12
12
  import { EditorToolbarObserver } from '../../EditorToolbarObserver.mjs';
13
13
  import { insertLink } from './Blocks/Link.mjs';
14
- import { useBlocksEditorContext, isSelectorBlockKey } from './BlocksEditor.mjs';
14
+ import { useBlocksEditorContext } from './BlocksEditor.mjs';
15
15
  import { getEntries, getKeys } from './utils/types.mjs';
16
16
 
17
17
  const ToolbarWrapper = styled(Flex)`
@@ -137,7 +137,7 @@ const ToolbarButton = ({ icon: Icon, name, label, isActive, disabled, handleClic
137
137
  height: 7,
138
138
  hasRadius: true,
139
139
  type: "button",
140
- children: /*#__PURE__*/ jsx(Icon, {
140
+ children: Icon && /*#__PURE__*/ jsx(Icon, {
141
141
  fill: disabled ? 'neutral300' : enabledColor
142
142
  })
143
143
  })
@@ -149,16 +149,15 @@ const BlocksDropdown = ()=>{
149
149
  const { formatMessage } = useIntl();
150
150
  const { modalElement, handleConversionResult } = useConversionModal();
151
151
  const isMobile = useIsMobile();
152
- const blockKeysToInclude = getEntries(blocks).reduce((currentKeys, entry)=>{
153
- const [key, block] = entry;
154
- return block.isInBlocksSelector ? [
152
+ const blockKeysToInclude = getEntries(blocks).reduce((currentKeys, [key, block])=>{
153
+ return block?.isInBlocksSelector ? [
155
154
  ...currentKeys,
156
155
  key
157
156
  ] : currentKeys;
158
157
  }, []);
159
158
  const [blockSelected, setBlockSelected] = React.useState('paragraph');
160
159
  const handleSelect = (optionKey)=>{
161
- if (!isSelectorBlockKey(optionKey)) {
160
+ if (typeof optionKey !== 'string' || !blocks[optionKey]) {
162
161
  return;
163
162
  }
164
163
  const editorIsEmpty = editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);
@@ -207,7 +206,7 @@ const BlocksDropdown = ()=>{
207
206
  return;
208
207
  }
209
208
  // Let the block handle the Slate conversion logic
210
- const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);
209
+ const maybeRenderModal = blocks[optionKey]?.handleConvert?.(editor);
211
210
  handleConversionResult(maybeRenderModal);
212
211
  setBlockSelected(optionKey);
213
212
  ReactEditor.focus(editor);
@@ -256,7 +255,7 @@ const BlocksDropdown = ()=>{
256
255
  }
257
256
  }
258
257
  // Find the block key that matches the anchor node
259
- const anchorBlockKey = getKeys(blocks).find((blockKey)=>!Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode));
258
+ const anchorBlockKey = getKeys(blocks).find((blockKey)=>!Editor.isEditor(selectedNode) && blocks[blockKey]?.matchNode(selectedNode));
260
259
  // Change the value selected in the dropdown if it doesn't match the anchor block key
261
260
  if (anchorBlockKey && anchorBlockKey !== blockSelected) {
262
261
  setBlockSelected(anchorBlockKey);
@@ -268,14 +267,27 @@ const BlocksDropdown = ()=>{
268
267
  blocks,
269
268
  blockSelected
270
269
  ]);
271
- const Icon = blocks[blockSelected].icon;
270
+ React.useEffect(()=>{
271
+ // If the selected block is not in the list of blocks to include, change the selected block to the first one
272
+ if (blockKeysToInclude.length > 0 && !blockKeysToInclude.includes(blockSelected)) {
273
+ setBlockSelected(blockKeysToInclude[0]);
274
+ }
275
+ }, [
276
+ blockKeysToInclude,
277
+ blockSelected
278
+ ]);
279
+ if (!blocks[blockSelected]) {
280
+ return null;
281
+ }
282
+ const selectedBlock = blocks[blockSelected];
283
+ const Icon = selectedBlock.icon;
272
284
  return /*#__PURE__*/ jsxs(Fragment, {
273
285
  children: [
274
286
  /*#__PURE__*/ jsx(SelectWrapper, {
275
287
  children: /*#__PURE__*/ jsx(SingleSelect, {
276
- startIcon: /*#__PURE__*/ jsx(Icon, {}),
288
+ startIcon: Icon && /*#__PURE__*/ jsx(Icon, {}),
277
289
  onChange: handleSelect,
278
- customizeContent: ()=>isMobile ? '' : formatMessage(blocks[blockSelected].label),
290
+ customizeContent: ()=>isMobile ? '' : formatMessage(selectedBlock.label),
279
291
  value: blockSelected,
280
292
  onCloseAutoFocus: preventSelectFocus,
281
293
  "aria-label": formatMessage({
@@ -283,12 +295,15 @@ const BlocksDropdown = ()=>{
283
295
  defaultMessage: 'Select a block'
284
296
  }),
285
297
  disabled: disabled,
286
- children: blockKeysToInclude.map((key)=>/*#__PURE__*/ jsx(BlockOption, {
298
+ children: blockKeysToInclude.map((key)=>{
299
+ const selectorBlock = blocks[key];
300
+ return /*#__PURE__*/ jsx(BlockOption, {
287
301
  value: key,
288
- label: blocks[key].label,
289
- icon: blocks[key].icon,
302
+ label: selectorBlock.label,
303
+ icon: selectorBlock.icon,
290
304
  blockSelected: blockSelected
291
- }, key))
305
+ }, key);
306
+ })
292
307
  })
293
308
  }),
294
309
  modalElement
@@ -299,7 +314,7 @@ const BlockOption = ({ value, icon: Icon, label, blockSelected })=>{
299
314
  const { formatMessage } = useIntl();
300
315
  const isSelected = value === blockSelected;
301
316
  return /*#__PURE__*/ jsx(SingleSelectOption, {
302
- startIcon: /*#__PURE__*/ jsx(Icon, {
317
+ startIcon: Icon && /*#__PURE__*/ jsx(Icon, {
303
318
  fill: isSelected ? 'primary600' : 'neutral500'
304
319
  }),
305
320
  value: value,
@@ -368,7 +383,7 @@ const ListButton = ({ block, format, location = 'toolbar' })=>{
368
383
  }
369
384
  if (!currentListEntry) {
370
385
  // If selection is not a list then convert it to list
371
- blocks[`list-${format}`].handleConvert(editor);
386
+ blocks[`list-${format}`]?.handleConvert(editor);
372
387
  return;
373
388
  }
374
389
  // If selection is already a list then toggle format
@@ -383,14 +398,14 @@ const ListButton = ({ block, format, location = 'toolbar' })=>{
383
398
  });
384
399
  } else {
385
400
  // Format is same, convert selected list-item to paragraph
386
- blocks['paragraph'].handleConvert(editor);
401
+ blocks['paragraph']?.handleConvert(editor);
387
402
  }
388
403
  }
389
404
  };
390
405
  if (location === 'menu') {
391
406
  const Icon = block.icon;
392
407
  return /*#__PURE__*/ jsx(StyledMenuItem, {
393
- startIcon: /*#__PURE__*/ jsx(Icon, {}),
408
+ startIcon: Icon && /*#__PURE__*/ jsx(Icon, {}),
394
409
  onSelect: ()=>toggleList(format),
395
410
  isActive: isListActive(),
396
411
  disabled: isListDisabled(),