@pstdio/ui 0.5.2 → 0.7.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 (118) hide show
  1. package/dist/{MermaidComponent-DDCxR-Gs.js → MermaidComponent-D7Baqkwx.js} +2 -2
  2. package/dist/{MermaidComponent-DDCxR-Gs.js.map → MermaidComponent-D7Baqkwx.js.map} +1 -1
  3. package/dist/chat-ui.js +1272 -1080
  4. package/dist/chat-ui.js.map +1 -1
  5. package/dist/components/activity/activity-avatar.d.ts +9 -0
  6. package/dist/components/activity/activity-comment.d.ts +19 -0
  7. package/dist/components/activity/activity-composer.d.ts +18 -0
  8. package/dist/components/activity/activity-event.d.ts +12 -0
  9. package/dist/components/activity/activity-root.d.ts +15 -0
  10. package/dist/components/activity/activity-timeline.d.ts +6 -0
  11. package/dist/components/activity/activity.types.d.ts +5 -0
  12. package/dist/components/activity/index.d.ts +25 -0
  13. package/dist/components/chat-ui/components/ai-conversation.d.ts +4 -4
  14. package/dist/components/chat-ui/components/ai-message.d.ts +2 -0
  15. package/dist/components/chat-ui/components/chat-message-list.d.ts +12 -0
  16. package/dist/components/chat-ui/components/chat-panel.d.ts +3 -1
  17. package/dist/components/chat-ui/components/message-action-panel.d.ts +10 -0
  18. package/dist/components/chat-ui/performance/chat-mount-metrics.d.ts +37 -0
  19. package/dist/components/chat-ui/performance/chat-panel.perf.d.ts +18 -0
  20. package/dist/components/chat-ui/performance/chat-performance-fixtures.d.ts +29 -0
  21. package/dist/components/chat-ui/performance/chat-performance-panel.d.ts +23 -0
  22. package/dist/components/chat-ui/performance/chat-performance-story-utils.d.ts +30 -0
  23. package/dist/components/code-editor.d.ts +1 -1
  24. package/dist/components/diff-viewer/build-changed-files-tree.d.ts +4 -0
  25. package/dist/components/diff-viewer/diff-card-body.d.ts +34 -0
  26. package/dist/components/diff-viewer/diff-card-content.d.ts +22 -0
  27. package/dist/components/diff-viewer/diff-card-load-state.d.ts +9 -0
  28. package/dist/components/diff-viewer/diff-card.d.ts +43 -0
  29. package/dist/components/diff-viewer/diff-drawer.d.ts +33 -0
  30. package/dist/components/diff-viewer/diff-editor.d.ts +20 -0
  31. package/dist/components/diff-viewer/diff-size.d.ts +14 -0
  32. package/dist/components/diff-viewer/diff-view-adapter.d.ts +27 -0
  33. package/dist/components/diff-viewer/diff-viewer.d.ts +14 -0
  34. package/dist/components/diff-viewer/diff-viewer.store.d.ts +21 -0
  35. package/dist/components/diff-viewer/file-list-panel.d.ts +19 -0
  36. package/dist/components/diff-viewer/index.d.ts +5 -0
  37. package/dist/components/diff-viewer/types.d.ts +13 -0
  38. package/dist/components/integration-card.d.ts +12 -0
  39. package/dist/components/list-row/list-row-menu.d.ts +12 -0
  40. package/dist/components/list-row/list-row.types.d.ts +8 -0
  41. package/dist/components/palette-filter.d.ts +23 -0
  42. package/dist/components/palette-list.d.ts +11 -0
  43. package/dist/components/palette-shortcut.d.ts +4 -0
  44. package/dist/components/palette.d.ts +47 -0
  45. package/dist/components/panel-sidebar-registration-context.d.ts +12 -0
  46. package/dist/components/param-editor-label.d.ts +6 -0
  47. package/dist/components/param-editor.d.ts +2 -2
  48. package/dist/components/param-editor.types.d.ts +6 -1
  49. package/dist/components/performance-panel.d.ts +40 -0
  50. package/dist/components/{folder-picker-dialog.d.ts → repo-picker-dialog.d.ts} +6 -6
  51. package/dist/components/resizable-split-layout.d.ts +20 -0
  52. package/dist/components/resizable-split-layout.handle.d.ts +17 -0
  53. package/dist/components/resource-context-menu.d.ts +1 -0
  54. package/dist/components/rich-text/shared/editor-config.d.ts +1 -0
  55. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.d.ts +16 -0
  56. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/commands.d.ts +2 -0
  57. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/index.d.ts +3 -0
  58. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/link-editor-content.d.ts +18 -0
  59. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/link-edit-state.d.ts +1 -0
  60. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/selection-link-url.d.ts +2 -0
  61. package/dist/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.d.ts +1 -1
  62. package/dist/components/rich-text/shared/transformers/markdown-transformers-test-utils.d.ts +3 -0
  63. package/dist/components/rich-text/shared/transformers/markdown-transformers.d.ts +1 -0
  64. package/dist/components/session-indicator.d.ts +2 -2
  65. package/dist/components/sidebar/sidebar-header.d.ts +0 -1
  66. package/dist/components/sidebar/sidebar.types.d.ts +7 -1
  67. package/dist/components/simple-card.d.ts +5 -0
  68. package/dist/components/tree-list/tree-list.d.ts +28 -1
  69. package/dist/index.d.ts +20 -8
  70. package/dist/index.js +4771 -2446
  71. package/dist/index.js.map +1 -1
  72. package/dist/radio-DJtQY9po.js +286 -0
  73. package/dist/radio-DJtQY9po.js.map +1 -0
  74. package/dist/{rich-message-DeJwzVeV.js → rich-message-33DPxuWJ.js} +502 -464
  75. package/dist/rich-message-33DPxuWJ.js.map +1 -0
  76. package/dist/rich-text.js +738 -414
  77. package/dist/rich-text.js.map +1 -1
  78. package/dist/style.css +1 -1
  79. package/dist/theme/custom/index.d.ts +2 -0
  80. package/dist/theme/custom/vscode-theme.d.ts +32 -0
  81. package/dist/theme/index.d.ts +2 -1
  82. package/dist/theme/recipes/alert.d.ts +1 -1
  83. package/dist/theme/recipes/dialog.d.ts +1 -1
  84. package/dist/theme/recipes/drawer.d.ts +1 -1
  85. package/dist/theme/recipes/menu.d.ts +1 -1
  86. package/dist/theme/recipes/popover.d.ts +1 -1
  87. package/dist/theme/recipes/tabs.d.ts +18 -0
  88. package/dist/theme/tokens/borders.d.ts +6 -24
  89. package/dist/theme/tokens/colors.d.ts +168 -168
  90. package/dist/theme/tokens/shadows.d.ts +5 -5
  91. package/dist/{theme-Dq4r3aRE.js → theme-D-aCJqTf.js} +295 -236
  92. package/dist/theme-D-aCJqTf.js.map +1 -0
  93. package/dist/theme.js +6 -4
  94. package/dist/utils/apply-theme-preference.d.ts +2 -0
  95. package/package.json +4 -1
  96. package/dist/components/app-shell/app-shell.d.ts +0 -1
  97. package/dist/components/app-shell/command-palette.d.ts +0 -16
  98. package/dist/components/app-shell/file-tree.d.ts +0 -7
  99. package/dist/components/app-shell/mock-chat.d.ts +0 -2
  100. package/dist/components/app-shell/mock-data.d.ts +0 -37
  101. package/dist/components/app-shell/pages/project-list-page.d.ts +0 -7
  102. package/dist/components/app-shell/pages/sessions-page.d.ts +0 -6
  103. package/dist/components/app-shell/pages/settings-page.d.ts +0 -5
  104. package/dist/components/app-shell/pages/ticket-details-page.d.ts +0 -7
  105. package/dist/components/app-shell/pages/tickets-page.d.ts +0 -7
  106. package/dist/components/app-shell/pages/workspace-page.d.ts +0 -1
  107. package/dist/components/app-shell/resizable-panel.d.ts +0 -13
  108. package/dist/components/attached-panel.utils.d.ts +0 -6
  109. package/dist/components/diff-card.d.ts +0 -17
  110. package/dist/components/diff-drawer.d.ts +0 -7
  111. package/dist/components/diff-editor.d.ts +0 -11
  112. package/dist/components/diff-view-adapter.d.ts +0 -14
  113. package/dist/components/properties.d.ts +0 -18
  114. package/dist/radio-C42qncrD.js +0 -236
  115. package/dist/radio-C42qncrD.js.map +0 -1
  116. package/dist/rich-message-DeJwzVeV.js.map +0 -1
  117. package/dist/theme-Dq4r3aRE.js.map +0 -1
  118. /package/dist/components/{diff-bubble.d.ts → diff-viewer/diff-bubble.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text.js","sources":["../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/should-show-floating-toolbar.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.tsx","../src/components/rich-text/collaborative-markdown-editor/awareness-cursors.tsx","../src/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.tsx","../src/components/rich-text/markdown-editor/markdown-editor.tsx","../src/components/rich-text/utils/inferResourceType.ts","../src/components/rich-text/utils/mediaType.ts"],"sourcesContent":["import \"./CodeBlockActionsPlugin.css\";\n\nimport { IconButton } from \"@chakra-ui/react\";\nimport { $isCodeNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_CRITICAL, SELECTION_CHANGE_COMMAND } from \"lexical\";\nimport { Check, Copy } from \"lucide-react\";\nimport type React from \"react\";\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"../../../../tooltip\";\n\nfunction getCodeElementFromSelection(editor: ReturnType<typeof useLexicalComposerContext>[0]) {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return null;\n }\n\n const anchorNode = selection.anchor.getNode();\n const codeNode = $isCodeNode(anchorNode)\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n return $isCodeNode(node);\n });\n\n if (!$isCodeNode(codeNode)) {\n return null;\n }\n\n const codeElement = editor.getElementByKey(codeNode.getKey());\n return codeElement instanceof HTMLElement ? codeElement : null;\n}\n\nfunction getCodeElementFromTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return null;\n }\n\n return target.closest(\".rich-text__code\");\n}\n\nfunction getActionPosition(anchorElem: HTMLElement, codeElement: HTMLElement) {\n const anchorRect = anchorElem.getBoundingClientRect();\n const codeRect = codeElement.getBoundingClientRect();\n\n return {\n top: codeRect.top - anchorRect.top + 6,\n left: codeRect.right - anchorRect.left - 30,\n };\n}\n\nexport function CodeBlockActionsPlugin({ anchorElem }: { anchorElem?: HTMLElement | null }): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [activeCodeElement, setActiveCodeElement] = useState<HTMLElement | null>(null);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n const rootElement = editor.getRootElement();\n if (!rootElement) {\n return;\n }\n\n const handlePointerMove = (event: PointerEvent) => {\n const nextCodeElement = getCodeElementFromTarget(event.target);\n setActiveCodeElement(nextCodeElement instanceof HTMLElement ? nextCodeElement : null);\n };\n\n const handlePointerLeave = () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n setActiveCodeElement(selectionCodeElement);\n });\n };\n\n rootElement.addEventListener(\"pointermove\", handlePointerMove);\n rootElement.addEventListener(\"pointerleave\", handlePointerLeave);\n\n return () => {\n rootElement.removeEventListener(\"pointermove\", handlePointerMove);\n rootElement.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (selectionCodeElement) {\n setActiveCodeElement(selectionCodeElement);\n }\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (!selectionCodeElement) {\n setActiveCodeElement((current) => {\n return current?.matches(\":hover\") ? current : null;\n });\n return;\n }\n\n setActiveCodeElement(selectionCodeElement);\n });\n\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n );\n }, [editor]);\n\n if (!anchorElem || !activeCodeElement) {\n return null;\n }\n\n const position = getActionPosition(anchorElem, activeCodeElement);\n const style: CSSProperties = {\n position: \"absolute\",\n top: position.top,\n left: position.left,\n };\n\n return createPortal(\n <div className=\"code-block-actions\" style={style}>\n <Tooltip content={isCopied ? \"Copied\" : \"Copy code\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy code\"}\n variant=\"surface\"\n size=\"xs\"\n onClick={async () => {\n const code = activeCodeElement.textContent ?? \"\";\n try {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => {\n setIsCopied(false);\n }, 1200);\n } catch {\n setIsCopied(false);\n }\n }}\n >\n {isCopied ? <Check size={14} /> : <Copy size={14} />}\n </IconButton>\n </Tooltip>\n </div>,\n anchorElem,\n );\n}\n","const VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPos(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n let top = targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top += floatingElemRect.height + targetRect.height + verticalGap * 2;\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import { $isListNode } from \"@lexical/list\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport { $isRootOrShadowRoot, type LexicalNode } from \"lexical\";\n\nexport const blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nexport type BlockType = keyof typeof blockTypeToBlockName;\n\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as BlockType) : null;\n};\n\nconst findSelectionElement = (anchorNode: LexicalNode) => {\n const rootMatch =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n const parent = node.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n return rootMatch ?? anchorNode.getTopLevelElementOrThrow();\n};\n\nexport const resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as BlockType;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as BlockType;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\n};\n","interface ShouldShowFloatingToolbarParams {\n hasSelection: boolean;\n isRangeSelection: boolean;\n isCollapsed: boolean;\n hasNativeSelection: boolean;\n hasNativeRange: boolean;\n isAnchorInsideEditor: boolean;\n isEditorEditable: boolean;\n}\n\nexport function shouldShowFloatingToolbar(params: ShouldShowFloatingToolbarParams) {\n const {\n hasSelection,\n isRangeSelection,\n isCollapsed,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable,\n } = params;\n\n return (\n hasSelection &&\n isRangeSelection &&\n !isCollapsed &&\n hasNativeSelection &&\n hasNativeRange &&\n isAnchorInsideEditor &&\n isEditorEditable\n );\n}\n","import \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport { $createCodeNode } from \"@lexical/code\";\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHeadingNode, type HeadingTagType } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n FORMAT_TEXT_COMMAND,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { Code2, List, ListOrdered, ListTodo } from \"lucide-react\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"../../../../tooltip\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\nimport { type BlockType, resolveBlockTypeFromAnchor } from \"./resolve-block-type\";\nimport { shouldShowFloatingToolbar } from \"./should-show-floating-toolbar\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nfunction ToolbarSeparator() {\n return (\n <span\n style={{\n display: \"inline-flex\",\n height: \"1rem\",\n margin: \"0 0.25rem\",\n borderLeft: \"1px solid var(--chakra-colors-border-muted)\",\n }}\n />\n );\n}\n\nfunction FloatingTextToolbar({\n editor,\n anchorElem,\n isToolbarActive,\n setIsToolbarActive,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isToolbarActive: boolean;\n setIsToolbarActive: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const [blockType, setBlockType] = useState<BlockType>(\"paragraph\");\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const updateFloatingToolbarRef = useRef<() => boolean | undefined>(() => undefined);\n\n const formatHeading = (headingSize: HeadingTagType) => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === headingSize) {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n };\n\n const formatList = (type: \"bullet\" | \"number\" | \"check\") => {\n if (blockType === type) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n return;\n }\n const command = {\n bullet: INSERT_UNORDERED_LIST_COMMAND,\n number: INSERT_ORDERED_LIST_COMMAND,\n check: INSERT_CHECK_LIST_COMMAND,\n }[type];\n editor.dispatchCommand(command, undefined);\n };\n\n const formatCodeBlock = () => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n if (blockType === \"code\") {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, () => $createCodeNode());\n });\n };\n\n const updateToolbar = () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n\n const nextBlockType = resolveBlockTypeFromAnchor(selection.anchor.getNode());\n if (nextBlockType) {\n setBlockType(nextBlockType);\n }\n };\n\n updateFloatingToolbarRef.current = () => {\n const selection = $getSelection();\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeSelection = nativeSelection !== null;\n const hasNativeRange = hasNativeSelection && nativeSelection.rangeCount > 0;\n const isAnchorInsideEditor = Boolean(rootElement?.contains(hasNativeSelection ? nativeSelection.anchorNode : null));\n\n // Show floating toolbar when selection is inside the editor\n if (\n shouldShowFloatingToolbar({\n hasSelection: selection !== null,\n isRangeSelection: $isRangeSelection(selection),\n isCollapsed: $isRangeSelection(selection) ? selection.isCollapsed() : false,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable: editor.isEditable(),\n }) &&\n nativeSelection\n ) {\n const domRect: DOMRect | undefined = nativeSelection.getRangeAt(0).getBoundingClientRect();\n\n if (domRect) {\n // Anchor to the bottom of the selection to avoid overlap with tall selections\n const bottomRect = new DOMRect(domRect.left, domRect.bottom, 0, 0);\n setFloatingElemPos(bottomRect, editorElem, anchorElem, GAP);\n }\n\n setIsToolbarActive(true);\n } else {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem);\n }\n setIsToolbarActive(false);\n }\n\n updateToolbar();\n\n return true;\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateFloatingToolbarRef.current();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n updateFloatingToolbarRef.current();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (_payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n updateFloatingToolbarRef.current();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor]);\n\n return (\n <div ref={editorRef} className={`floating-text-format-toolbar ${isToolbarActive ? \"active\" : \"\"}`}>\n <Stack direction=\"row\" gap=\"0.5\" alignItems=\"center\">\n {/* Text formatting buttons */}\n <Tooltip content=\"Bold\">\n <IconButton\n data-active={isBold || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n }}\n variant=\"ghost\"\n aria-label=\"Bold\"\n size=\"xs\"\n >\n <Text fontWeight=\"bold\" fontSize=\".75rem\">\n B\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Italic\">\n <IconButton\n data-active={isItalic || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n }}\n variant=\"ghost\"\n aria-label=\"Italic\"\n size=\"xs\"\n >\n <Text fontStyle=\"italic\" fontSize=\".75rem\">\n I\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Underline\">\n <IconButton\n data-active={isUnderline || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\");\n }}\n variant=\"ghost\"\n aria-label=\"Underline\"\n size=\"xs\"\n >\n <Text textDecoration=\"underline\" fontSize=\".75rem\">\n U\n </Text>\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n {/* Heading buttons */}\n <Tooltip content=\"Heading 1\">\n <IconButton\n data-active={blockType === \"h1\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 1\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h1\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H1\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 2\">\n <IconButton\n data-active={blockType === \"h2\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 2\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h2\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H2\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 3\">\n <IconButton\n data-active={blockType === \"h3\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 3\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h3\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H3\n </Text>\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n <Tooltip content=\"Code Block\">\n <IconButton\n data-active={blockType === \"code\" || undefined}\n variant=\"ghost\"\n aria-label=\"Code Block\"\n size=\"xs\"\n onClick={formatCodeBlock}\n >\n <Code2 size={14} />\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n {/* List buttons */}\n <Tooltip content=\"Bulleted List\">\n <IconButton\n data-active={blockType === \"bullet\" || undefined}\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n size=\"xs\"\n onClick={() => formatList(\"bullet\")}\n >\n <List size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Numbered List\">\n <IconButton\n data-active={blockType === \"number\" || undefined}\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n size=\"xs\"\n onClick={() => formatList(\"number\")}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Check List\">\n <IconButton\n data-active={blockType === \"check\" || undefined}\n variant=\"ghost\"\n aria-label=\"Check List\"\n size=\"xs\"\n onClick={() => formatList(\"check\")}\n >\n <ListTodo size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n </div>\n );\n}\n\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [isToolbarActive, setIsToolbarActive] = useState(false);\n\n return createPortal(\n <FloatingTextToolbar\n editor={editor}\n anchorElem={anchorElem}\n isToolbarActive={isToolbarActive}\n setIsToolbarActive={setIsToolbarActive}\n />,\n anchorElem,\n );\n}\n","/**\n * Injects CSS for Yjs awareness cursor rendering in the collaborative editor.\n * @lexical/yjs injects cursor elements with data-* attributes; this styles them.\n */\nexport function AwarenessCursorsCSS() {\n return (\n <style>\n {`\n .collaboration-cursor-container {\n position: relative;\n display: inline;\n }\n\n .collaboration-cursor-caret {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n pointer-events: none;\n }\n\n .collaboration-cursor-label {\n position: absolute;\n top: -18px;\n left: -2px;\n padding: 1px 6px;\n font-size: 11px;\n font-weight: 600;\n line-height: 16px;\n white-space: nowrap;\n border-radius: 4px 4px 4px 0;\n color: #fff;\n pointer-events: none;\n user-select: none;\n }\n\n .collaboration-cursor-selection {\n position: absolute;\n pointer-events: none;\n opacity: 0.25;\n }\n `}\n </style>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { LexicalCollaboration } from \"@lexical/react/LexicalCollaborationContext\";\nimport { CollaborationPluginV2__EXPERIMENTAL } from \"@lexical/react/LexicalCollaborationPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport type { Provider } from \"@lexical/yjs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { WebsocketProvider } from \"y-websocket\";\nimport * as Y from \"yjs\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme } from \"../shared/editor-config\";\nimport { CodeBlockActionsPlugin } from \"../shared/plugins/CodePlugin/CodeBlockActionsPlugin\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { AwarenessCursorsCSS } from \"./awareness-cursors\";\n\nexport interface CollaborativeMarkdownEditorProps {\n roomId: string;\n wsUrl: string;\n wsParams?: Record<string, string>;\n userName?: string;\n userColor?: string;\n placeholder?: string;\n}\n\nexport function CollaborativeMarkdownEditor(props: CollaborativeMarkdownEditorProps) {\n const { roomId, wsUrl, wsParams = {}, userName = \"Anonymous\", userColor = \"#30bced\", placeholder } = props;\n\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n const [synced, setSynced] = useState(false);\n\n // Keep collaborative state stable for the component lifetime.\n const [doc] = useState(() => new Y.Doc());\n const [provider] = useState(() => {\n const nextProvider = new WebsocketProvider(wsUrl, roomId, doc, { params: wsParams, connect: false });\n\n nextProvider.on(\"sync\", (isSynced: boolean) => {\n if (isSynced) setSynced(true);\n });\n\n return nextProvider;\n });\n\n // Manage provider connect/disconnect lifecycle\n useEffect(() => {\n provider.connect();\n\n return () => {\n provider.disconnect();\n };\n }, [provider]);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"COLLABORATIVE_EDITOR\",\n nodes: editorNodes,\n editorState: null,\n onError: (error: Error) => console.error(error),\n editable: true,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <AwarenessCursorsCSS />\n\n <LexicalComposer initialConfig={initialConfig}>\n <LexicalCollaboration>\n <CollaborationPluginV2__EXPERIMENTAL\n id={roomId}\n doc={doc}\n provider={provider as unknown as Provider}\n __shouldBootstrapUnsafe={false}\n username={userName}\n cursorColor={userColor}\n />\n <LinkPlugin />\n <ListPlugin />\n <TabIndentationPlugin maxIndent={7} />\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} />}\n placeholder={\n synced && placeholder ? (\n <Box\n position=\"absolute\"\n top=\"0\"\n color=\"fg.muted\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n textStyle=\"paragraph/M/regular\"\n >\n {placeholder}\n </Box>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n </LexicalCollaboration>\n </LexicalComposer>\n </Flex>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { $convertFromMarkdownString, $convertToMarkdownString } from \"@lexical/markdown\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { CheckListPlugin } from \"@lexical/react/LexicalCheckListPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport { $getRoot } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme, editorTransformers } from \"../shared/editor-config\";\nimport { CodeBlockActionsPlugin } from \"../shared/plugins/CodePlugin/CodeBlockActionsPlugin\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { normalizeMarkdownListIndentation, splitFrontmatter } from \"../utils/markdown\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n isEditable?: boolean;\n placeholder?: string;\n scrollable?: boolean;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const {\n autoFocus = false,\n debug = false,\n defaultState = \"\",\n isEditable = false,\n placeholder,\n scrollable = true,\n onChange,\n } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"MARKDOWN_EDITOR\",\n nodes: editorNodes,\n editorState: () => {\n return $convertFromMarkdownString(normalizeMarkdownListIndentation(body), editorTransformers, undefined, false);\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height={scrollable ? \"100%\" : \"auto\"}\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <LexicalComposer initialConfig={initialConfig}>\n {autoFocus ? <AutoFocusPlugin /> : null}\n <HistoryPlugin />\n <LinkPlugin />\n <ListPlugin />\n {isEditable ? <TabIndentationPlugin maxIndent={7} /> : null}\n <CheckListPlugin />\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} padding=\"sm\" scrollable={scrollable} />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\n padding=\"sm\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n justifyContent=\"center\"\n >\n <Box width=\"100%\" maxWidth=\"720px\" color=\"fg.muted\" textStyle=\"paragraph/M/regular\">\n {placeholder}\n </Box>\n </Flex>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {isEditable && floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState) => {\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = $convertToMarkdownString(editorTransformers, root);\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </Flex>\n );\n}\n","import type { ResourceType } from \"../types\";\n\nexport function inferResourceTypeFromMediaType(mediaType: string) {\n const normalized = mediaType.toLowerCase().trim();\n if (!normalized) return \"text\";\n\n if (normalized.startsWith(\"image/\")) return \"image\";\n if (normalized === \"application/pdf\") return \"pdf\";\n if (normalized === \"text/markdown\") return \"markdown\";\n if (normalized === \"text/csv\" || normalized === \"text/tab-separated-values\") return \"table\";\n if (normalized === \"application/json\") return \"json\";\n if (normalized.startsWith(\"text/\")) return \"text\";\n if (normalized.startsWith(\"application/\")) return \"text\";\n\n const fallback: ResourceType = \"text\";\n return fallback;\n}\n","const extensionToMediaType: Record<string, string> = {\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\",\n mp4: \"video/mp4\",\n mov: \"video/quicktime\",\n ts: \"text/typescript\",\n tsx: \"text/typescript\",\n js: \"text/javascript\",\n jsx: \"text/javascript\",\n sql: \"text/x-sql\",\n yml: \"text/yaml\",\n yaml: \"text/yaml\",\n};\n\nexport function mediaTypeFromPath(path: string) {\n const cleaned = path.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = cleaned.split(\".\").pop()?.toLowerCase();\n if (!ext) return null;\n return extensionToMediaType[ext] ?? null;\n}\n"],"names":["getCodeElementFromSelection","editor","selection","$getSelection","$isRangeSelection","anchorNode","anchor","getNode","codeNode","$isCodeNode","$findMatchingParent","node","codeElement","getElementByKey","getKey","HTMLElement","getCodeElementFromTarget","target","closest","getActionPosition","anchorElem","anchorRect","getBoundingClientRect","codeRect","top","left","right","CodeBlockActionsPlugin","t0","$","_c","useLexicalComposerContext","activeCodeElement","setActiveCodeElement","useState","isCopied","setIsCopied","copyResetTimeoutRef","useRef","t1","t2","Symbol","for","current","window","clearTimeout","useEffect","t3","t4","rootElement","getRootElement","handlePointerMove","event","nextCodeElement","handlePointerLeave","getEditorState","read","selectionCodeElement","addEventListener","removeEventListener","t5","t6","mergeRegister","registerUpdateListener","t7","editorState","selectionCodeElement_0","registerCommand","SELECTION_CHANGE_COMMAND","selectionCodeElement_1","_temp","COMMAND_PRIORITY_CRITICAL","position","t8","style","t9","t10","t11","textContent","code","navigator","clipboard","writeText","setTimeout","t12","Check","jsx","Copy","t13","IconButton","t14","Tooltip","t15","t16","createPortal","matches","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","verticalGap","horizontalOffset","scrollerElem","parentElement","opacity","transform","floatingElemRect","anchorElementRect","editorScrollerRect","height","width","blockTypeToBlockName","bullet","check","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","shouldShowFloatingToolbar","params","hasSelection","isRangeSelection","isCollapsed","hasNativeSelection","hasNativeRange","isAnchorInsideEditor","isEditorEditable","GAP","ToolbarSeparator","display","margin","borderLeft","FloatingTextToolbar","isToolbarActive","setIsToolbarActive","editorRef","blockType","setBlockType","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","updateFloatingToolbarRef","formatHeading","headingSize","update","$setBlocksType","$createParagraphNode","$createHeadingNode","formatList","dispatchCommand","REMOVE_LIST_COMMAND","undefined","command","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_CHECK_LIST_COMMAND","formatCodeBlock","$createCodeNode","updateToolbar","hasFormat","nextBlockType","editorElem","nativeSelection","getSelection","rangeCount","Boolean","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","bottom","_payload","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","Stack","FORMAT_TEXT_COMMAND","Text","Code2","List","ListOrdered","ListTodo","FloatingTextFormatToolbarPlugin","document","body","AwarenessCursorsCSS","CollaborativeMarkdownEditor","props","roomId","wsUrl","wsParams","userName","userColor","placeholder","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","nextProvider","WebsocketProvider","connect","on","isSynced","provider","disconnect","namespace","nodes","editorNodes","onError","_temp2","editable","theme","editorTheme","initialConfig","CollaborationPluginV2__EXPERIMENTAL","t17","t18","LinkPlugin","ListPlugin","TabIndentationPlugin","HorizontalRulePlugin","CodeHighlightingPlugin","ImportCodeBlocksPlugin","t19","t20","EquationPlugin","t21","ContentEditable","t22","Box","t23","RichTextPlugin","LexicalErrorBoundary","t24","t25","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","Y","Doc","MarkdownEditor","autoFocus","debug","defaultState","scrollable","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","$convertFromMarkdownString","normalizeMarkdownListIndentation","editorTransformers","AutoFocusPlugin","HistoryPlugin","CheckListPlugin","t26","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","t27","ToggleEditablePlugin","t28","TreeViewPlugin","t29","t30","inferResourceTypeFromMediaType","mediaType","normalized","toLowerCase","trim","startsWith","extensionToMediaType","csv","tsv","json","md","markdown","txt","pdf","png","jpg","jpeg","gif","svg","webp","mp4","mov","ts","tsx","js","sql","yml","yaml","mediaTypeFromPath","path","ext","split","pop"],"mappings":"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"}
1
+ {"version":3,"file":"rich-text.js","sources":["../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/getSelectedNode.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/floating-toolbar-buttons.tsx","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/should-show-floating-toolbar.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.tsx","../src/components/rich-text/collaborative-markdown-editor/awareness-cursors.tsx","../src/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/link-editor-content.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/link-edit-state.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/selection-link-url.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/url.ts","../src/components/rich-text/shared/plugins/LinkEditorPlugin/LinkEditorPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/LinkPlugin.tsx","../src/components/rich-text/markdown-editor/markdown-editor.tsx","../src/components/rich-text/utils/inferResourceType.ts","../src/components/rich-text/utils/mediaType.ts"],"sourcesContent":["import \"./CodeBlockActionsPlugin.css\";\n\nimport { IconButton } from \"@chakra-ui/react\";\nimport { $isCodeNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_CRITICAL, SELECTION_CHANGE_COMMAND } from \"lexical\";\nimport { Check, Copy } from \"lucide-react\";\nimport type React from \"react\";\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"../../../../tooltip\";\n\nfunction getCodeElementFromSelection(editor: ReturnType<typeof useLexicalComposerContext>[0]) {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return null;\n }\n\n const anchorNode = selection.anchor.getNode();\n const codeNode = $isCodeNode(anchorNode)\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n return $isCodeNode(node);\n });\n\n if (!$isCodeNode(codeNode)) {\n return null;\n }\n\n const codeElement = editor.getElementByKey(codeNode.getKey());\n return codeElement instanceof HTMLElement ? codeElement : null;\n}\n\nfunction getCodeElementFromTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) {\n return null;\n }\n\n return target.closest(\".rich-text__code\");\n}\n\nfunction getActionPosition(anchorElem: HTMLElement, codeElement: HTMLElement) {\n const anchorRect = anchorElem.getBoundingClientRect();\n const codeRect = codeElement.getBoundingClientRect();\n\n return {\n top: codeRect.top - anchorRect.top + 6,\n left: codeRect.right - anchorRect.left - 30,\n };\n}\n\nexport function CodeBlockActionsPlugin({ anchorElem }: { anchorElem?: HTMLElement | null }): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [activeCodeElement, setActiveCodeElement] = useState<HTMLElement | null>(null);\n const [isCopied, setIsCopied] = useState(false);\n const copyResetTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n const rootElement = editor.getRootElement();\n if (!rootElement) {\n return;\n }\n\n const handlePointerMove = (event: PointerEvent) => {\n const nextCodeElement = getCodeElementFromTarget(event.target);\n setActiveCodeElement(nextCodeElement instanceof HTMLElement ? nextCodeElement : null);\n };\n\n const handlePointerLeave = () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n setActiveCodeElement(selectionCodeElement);\n });\n };\n\n rootElement.addEventListener(\"pointermove\", handlePointerMove);\n rootElement.addEventListener(\"pointerleave\", handlePointerLeave);\n\n return () => {\n rootElement.removeEventListener(\"pointermove\", handlePointerMove);\n rootElement.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (selectionCodeElement) {\n setActiveCodeElement(selectionCodeElement);\n }\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n editor.getEditorState().read(() => {\n const selectionCodeElement = getCodeElementFromSelection(editor);\n if (!selectionCodeElement) {\n setActiveCodeElement((current) => {\n return current?.matches(\":hover\") ? current : null;\n });\n return;\n }\n\n setActiveCodeElement(selectionCodeElement);\n });\n\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n );\n }, [editor]);\n\n if (!anchorElem || !activeCodeElement) {\n return null;\n }\n\n const position = getActionPosition(anchorElem, activeCodeElement);\n const style: CSSProperties = {\n position: \"absolute\",\n top: position.top,\n left: position.left,\n };\n\n return createPortal(\n <div className=\"code-block-actions\" style={style}>\n <Tooltip content={isCopied ? \"Copied\" : \"Copy code\"}>\n <IconButton\n aria-label={isCopied ? \"Copied\" : \"Copy code\"}\n variant=\"surface\"\n size=\"xs\"\n onClick={async () => {\n const code = activeCodeElement.textContent ?? \"\";\n try {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n if (copyResetTimeoutRef.current !== null) {\n window.clearTimeout(copyResetTimeoutRef.current);\n }\n copyResetTimeoutRef.current = window.setTimeout(() => {\n setIsCopied(false);\n }, 1200);\n } catch {\n setIsCopied(false);\n }\n }}\n >\n {isCopied ? <Check size={14} /> : <Copy size={14} />}\n </IconButton>\n </Tooltip>\n </div>,\n anchorElem,\n );\n}\n","import { $isAtNodeEnd } from \"@lexical/selection\";\nimport type { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n }\n return $isAtNodeEnd(anchor) ? anchorNode : focusNode;\n}\n","const VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPos(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n placement: \"above\" | \"legacy\" = \"legacy\",\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n let top =\n placement === \"above\" ? targetRect.top - floatingElemRect.height - verticalGap : targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top =\n placement === \"above\"\n ? targetRect.bottom + verticalGap\n : top + floatingElemRect.height + targetRect.height + verticalGap * 2;\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport { FORMAT_TEXT_COMMAND, type LexicalEditor } from \"lexical\";\nimport { Code2, Link as LinkIcon, List, ListOrdered, ListTodo } from \"lucide-react\";\nimport { Tooltip } from \"../../../../tooltip\";\nimport type { BlockType } from \"./resolve-block-type\";\n\ninterface FloatingToolbarButtonsProps {\n editor: LexicalEditor;\n blockType: BlockType;\n isBold: boolean;\n isItalic: boolean;\n isUnderline: boolean;\n isLink: boolean;\n formatHeading: (headingSize: \"h1\" | \"h2\" | \"h3\") => void;\n formatList: (type: \"bullet\" | \"number\" | \"check\") => void;\n formatCodeBlock: () => void;\n insertLink: () => void;\n}\n\nfunction ToolbarSeparator() {\n return (\n <span\n style={{\n display: \"inline-flex\",\n height: \"1rem\",\n margin: \"0 0.25rem\",\n borderLeft: \"1px solid var(--chakra-colors-border-muted)\",\n }}\n />\n );\n}\n\nexport function FloatingToolbarButtons(props: FloatingToolbarButtonsProps) {\n const {\n editor,\n blockType,\n isBold,\n isItalic,\n isUnderline,\n isLink,\n formatHeading,\n formatList,\n formatCodeBlock,\n insertLink,\n } = props;\n\n return (\n <Stack direction=\"row\" gap=\"0.5\" alignItems=\"center\">\n <Tooltip content=\"Bold\">\n <IconButton\n data-active={isBold || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\")}\n variant=\"ghost\"\n aria-label=\"Bold\"\n size=\"xs\"\n >\n <Text fontWeight=\"bold\" fontSize=\".75rem\">\n B\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Italic\">\n <IconButton\n data-active={isItalic || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\")}\n variant=\"ghost\"\n aria-label=\"Italic\"\n size=\"xs\"\n >\n <Text fontStyle=\"italic\" fontSize=\".75rem\">\n I\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Underline\">\n <IconButton\n data-active={isUnderline || undefined}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\")}\n variant=\"ghost\"\n aria-label=\"Underline\"\n size=\"xs\"\n >\n <Text textDecoration=\"underline\" fontSize=\".75rem\">\n U\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content={isLink ? \"Remove Link\" : \"Insert Link\"}>\n <IconButton\n data-active={isLink || undefined}\n variant=\"ghost\"\n aria-label={isLink ? \"Remove Link\" : \"Insert Link\"}\n size=\"xs\"\n onClick={insertLink}\n >\n <LinkIcon size={14} />\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n <Tooltip content=\"Heading 1\">\n <IconButton\n data-active={blockType === \"h1\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 1\"\n size=\"xs\"\n onClick={() => formatHeading(\"h1\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H1\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 2\">\n <IconButton\n data-active={blockType === \"h2\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 2\"\n size=\"xs\"\n onClick={() => formatHeading(\"h2\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H2\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 3\">\n <IconButton\n data-active={blockType === \"h3\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 3\"\n size=\"xs\"\n onClick={() => formatHeading(\"h3\")}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H3\n </Text>\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n <Tooltip content=\"Code Block\">\n <IconButton\n data-active={blockType === \"code\" || undefined}\n variant=\"ghost\"\n aria-label=\"Code Block\"\n size=\"xs\"\n onClick={formatCodeBlock}\n >\n <Code2 size={14} />\n </IconButton>\n </Tooltip>\n\n <ToolbarSeparator />\n\n <Tooltip content=\"Bulleted List\">\n <IconButton\n data-active={blockType === \"bullet\" || undefined}\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n size=\"xs\"\n onClick={() => formatList(\"bullet\")}\n >\n <List size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Numbered List\">\n <IconButton\n data-active={blockType === \"number\" || undefined}\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n size=\"xs\"\n onClick={() => formatList(\"number\")}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Check List\">\n <IconButton\n data-active={blockType === \"check\" || undefined}\n variant=\"ghost\"\n aria-label=\"Check List\"\n size=\"xs\"\n onClick={() => formatList(\"check\")}\n >\n <ListTodo size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n}\n","import { $isListNode } from \"@lexical/list\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport { $isRootOrShadowRoot, type LexicalNode } from \"lexical\";\n\nexport const blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nexport type BlockType = keyof typeof blockTypeToBlockName;\n\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as BlockType) : null;\n};\n\nconst findSelectionElement = (anchorNode: LexicalNode) => {\n const rootMatch =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n const parent = node.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n return rootMatch ?? anchorNode.getTopLevelElementOrThrow();\n};\n\nexport const resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as BlockType;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as BlockType;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\n};\n","interface ShouldShowFloatingToolbarParams {\n hasSelection: boolean;\n isRangeSelection: boolean;\n isCollapsed: boolean;\n hasNativeSelection: boolean;\n hasNativeRange: boolean;\n isAnchorInsideEditor: boolean;\n isEditorEditable: boolean;\n}\n\nexport function shouldShowFloatingToolbar(params: ShouldShowFloatingToolbarParams) {\n const {\n hasSelection,\n isRangeSelection,\n isCollapsed,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable,\n } = params;\n\n return (\n hasSelection &&\n isRangeSelection &&\n !isCollapsed &&\n hasNativeSelection &&\n hasNativeRange &&\n isAnchorInsideEditor &&\n isEditorEditable\n );\n}\n","import \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { $createCodeNode } from \"@lexical/code\";\nimport { $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHeadingNode, type HeadingTagType } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOGGLE_LINK_EDIT_MODE_COMMAND } from \"../LinkEditorPlugin/commands\";\nimport { getSelectedNode } from \"../LinkEditorPlugin/utils/getSelectedNode\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\nimport { FloatingToolbarButtons } from \"./floating-toolbar-buttons\";\nimport { type BlockType, resolveBlockTypeFromAnchor } from \"./resolve-block-type\";\nimport { shouldShowFloatingToolbar } from \"./should-show-floating-toolbar\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nfunction FloatingTextToolbar({\n editor,\n anchorElem,\n isToolbarActive,\n setIsToolbarActive,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isToolbarActive: boolean;\n setIsToolbarActive: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const [blockType, setBlockType] = useState<BlockType>(\"paragraph\");\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const updateFloatingToolbarRef = useRef<() => boolean | undefined>(() => undefined);\n\n const formatHeading = (headingSize: HeadingTagType) => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === headingSize) {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n };\n\n const formatList = (type: \"bullet\" | \"number\" | \"check\") => {\n if (blockType === type) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n return;\n }\n const command = {\n bullet: INSERT_UNORDERED_LIST_COMMAND,\n number: INSERT_ORDERED_LIST_COMMAND,\n check: INSERT_CHECK_LIST_COMMAND,\n }[type];\n editor.dispatchCommand(command, undefined);\n };\n\n const formatCodeBlock = () => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (blockType === \"code\") {\n $setBlocksType(selection, $createParagraphNode);\n return;\n }\n\n $setBlocksType(selection, () => $createCodeNode());\n });\n };\n\n const insertLink = () => {\n if (isLink) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n return;\n }\n editor.dispatchCommand(TOGGLE_LINK_EDIT_MODE_COMMAND, true);\n };\n\n const updateToolbar = () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n const autoLinkParent = $findMatchingParent(node, $isAutoLinkNode);\n setIsLink(linkParent !== null || autoLinkParent !== null);\n\n const nextBlockType = resolveBlockTypeFromAnchor(selection.anchor.getNode());\n if (nextBlockType) {\n setBlockType(nextBlockType);\n }\n };\n\n updateFloatingToolbarRef.current = () => {\n const selection = $getSelection();\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeSelection = nativeSelection !== null;\n const hasNativeRange = hasNativeSelection && nativeSelection.rangeCount > 0;\n const isAnchorInsideEditor = Boolean(rootElement?.contains(hasNativeSelection ? nativeSelection.anchorNode : null));\n\n if (\n shouldShowFloatingToolbar({\n hasSelection: selection !== null,\n isRangeSelection: $isRangeSelection(selection),\n isCollapsed: $isRangeSelection(selection) ? selection.isCollapsed() : false,\n hasNativeSelection,\n hasNativeRange,\n isAnchorInsideEditor,\n isEditorEditable: editor.isEditable(),\n }) &&\n nativeSelection\n ) {\n const domRect: DOMRect | undefined = nativeSelection.getRangeAt(0).getBoundingClientRect();\n\n if (domRect) {\n // Anchor to the bottom of the selection to avoid overlap with tall selections\n const bottomRect = new DOMRect(domRect.left, domRect.bottom, 0, 0);\n setFloatingElemPos(bottomRect, editorElem, anchorElem, GAP);\n }\n\n setIsToolbarActive(true);\n } else {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem);\n }\n setIsToolbarActive(false);\n }\n\n updateToolbar();\n\n return true;\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateFloatingToolbarRef.current();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n updateFloatingToolbarRef.current();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (_payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n updateFloatingToolbarRef.current();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor]);\n\n return (\n <div ref={editorRef} className={`floating-text-format-toolbar ${isToolbarActive ? \"active\" : \"\"}`}>\n <FloatingToolbarButtons\n editor={editor}\n blockType={blockType}\n isBold={isBold}\n isItalic={isItalic}\n isUnderline={isUnderline}\n isLink={isLink}\n formatHeading={formatHeading}\n formatList={formatList}\n formatCodeBlock={formatCodeBlock}\n insertLink={insertLink}\n />\n </div>\n );\n}\n\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n const [isToolbarActive, setIsToolbarActive] = useState(false);\n\n return createPortal(\n <FloatingTextToolbar\n editor={editor}\n anchorElem={anchorElem}\n isToolbarActive={isToolbarActive}\n setIsToolbarActive={setIsToolbarActive}\n />,\n anchorElem,\n );\n}\n","/**\n * Injects CSS for Yjs awareness cursor rendering in the collaborative editor.\n * @lexical/yjs injects cursor elements with data-* attributes; this styles them.\n */\nexport function AwarenessCursorsCSS() {\n return (\n <style>\n {`\n .collaboration-cursor-container {\n position: relative;\n display: inline;\n }\n\n .collaboration-cursor-caret {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n pointer-events: none;\n }\n\n .collaboration-cursor-label {\n position: absolute;\n top: -18px;\n left: -2px;\n padding: 1px 6px;\n font-size: 11px;\n font-weight: 600;\n line-height: 16px;\n white-space: nowrap;\n border-radius: 4px 4px 4px 0;\n color: #fff;\n pointer-events: none;\n user-select: none;\n }\n\n .collaboration-cursor-selection {\n position: absolute;\n pointer-events: none;\n opacity: 0.25;\n }\n `}\n </style>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { LexicalCollaboration } from \"@lexical/react/LexicalCollaborationContext\";\nimport { CollaborationPluginV2__EXPERIMENTAL } from \"@lexical/react/LexicalCollaborationPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport type { Provider } from \"@lexical/yjs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { WebsocketProvider } from \"y-websocket\";\nimport * as Y from \"yjs\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme } from \"../shared/editor-config\";\nimport { CodeBlockActionsPlugin } from \"../shared/plugins/CodePlugin/CodeBlockActionsPlugin\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { AwarenessCursorsCSS } from \"./awareness-cursors\";\n\nexport interface CollaborativeMarkdownEditorProps {\n roomId: string;\n wsUrl: string;\n wsParams?: Record<string, string>;\n userName?: string;\n userColor?: string;\n placeholder?: string;\n}\n\nexport function CollaborativeMarkdownEditor(props: CollaborativeMarkdownEditorProps) {\n const { roomId, wsUrl, wsParams = {}, userName = \"Anonymous\", userColor = \"#30bced\", placeholder } = props;\n\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n const [synced, setSynced] = useState(false);\n\n // Keep collaborative state stable for the component lifetime.\n const [doc] = useState(() => new Y.Doc());\n const [provider] = useState(() => {\n const nextProvider = new WebsocketProvider(wsUrl, roomId, doc, { params: wsParams, connect: false });\n\n nextProvider.on(\"sync\", (isSynced: boolean) => {\n if (isSynced) setSynced(true);\n });\n\n return nextProvider;\n });\n\n // Manage provider connect/disconnect lifecycle\n useEffect(() => {\n provider.connect();\n\n return () => {\n provider.disconnect();\n };\n }, [provider]);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"COLLABORATIVE_EDITOR\",\n nodes: editorNodes,\n editorState: null,\n onError: (error: Error) => console.error(error),\n editable: true,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <AwarenessCursorsCSS />\n\n <LexicalComposer initialConfig={initialConfig}>\n <LexicalCollaboration>\n <CollaborationPluginV2__EXPERIMENTAL\n id={roomId}\n doc={doc}\n provider={provider as unknown as Provider}\n __shouldBootstrapUnsafe={false}\n username={userName}\n cursorColor={userColor}\n />\n <LinkPlugin />\n <ListPlugin />\n <TabIndentationPlugin maxIndent={7} />\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} />}\n placeholder={\n synced && placeholder ? (\n <Box\n position=\"absolute\"\n top=\"0\"\n color=\"fg.muted\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n textStyle=\"paragraph/M/regular\"\n >\n {placeholder}\n </Box>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n </LexicalCollaboration>\n </LexicalComposer>\n </Flex>\n );\n}\n","import { Link as ChakraLink, IconButton, Input, Stack } from \"@chakra-ui/react\";\nimport { Check, Pencil, Trash2, X } from \"lucide-react\";\nimport type React from \"react\";\nimport { Tooltip } from \"../../../../tooltip\";\n\ninterface LinkEditorContentProps {\n isActive: boolean;\n isLinkEditMode: boolean;\n editedLinkUrl: string;\n editedLinkUrlIsValid: boolean;\n linkUrl: string;\n href: string;\n inputRef: React.RefObject<HTMLInputElement | null>;\n onEditedLinkUrlChange: (url: string) => void;\n onInputKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n onClose: () => void;\n onSubmit: () => void;\n onEdit: () => void;\n onRemove: () => void;\n}\n\nexport function LinkEditorContent(props: LinkEditorContentProps) {\n const {\n isActive,\n isLinkEditMode,\n editedLinkUrl,\n editedLinkUrlIsValid,\n linkUrl,\n href,\n inputRef,\n onEditedLinkUrlChange,\n onInputKeyDown,\n onClose,\n onSubmit,\n onEdit,\n onRemove,\n } = props;\n\n if (!isActive) {\n return null;\n }\n\n if (isLinkEditMode) {\n return (\n <Stack className=\"link-editor-content\" direction=\"row\" gap=\"1\" alignItems=\"center\" p=\"1\">\n <Input\n ref={inputRef}\n className=\"link-editor-url-field\"\n size=\"sm\"\n fontSize=\"sm\"\n value={editedLinkUrl}\n placeholder=\"https://\"\n aria-label=\"Link URL\"\n aria-invalid={!editedLinkUrlIsValid}\n onChange={(event) => {\n onEditedLinkUrlChange(event.target.value);\n }}\n onKeyDown={onInputKeyDown}\n />\n <Tooltip content=\"Cancel\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Cancel link edit\"\n onMouseDown={preventFocusLoss}\n onClick={onClose}\n >\n <X size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Confirm\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Confirm link edit\"\n disabled={!editedLinkUrlIsValid}\n onMouseDown={preventFocusLoss}\n onClick={onSubmit}\n >\n <Check size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n }\n\n return (\n <Stack className=\"link-editor-content\" direction=\"row\" gap=\"1\" alignItems=\"center\" p=\"1\">\n <ChakraLink\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"link-editor-url-field\"\n fontSize=\"sm\"\n textDecoration=\"underline\"\n px=\"2\"\n truncate\n >\n {linkUrl}\n </ChakraLink>\n <Tooltip content=\"Edit link\">\n <IconButton variant=\"ghost\" size=\"xs\" aria-label=\"Edit link\" onMouseDown={preventFocusLoss} onClick={onEdit}>\n <Pencil size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Remove link\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label=\"Remove link\"\n onMouseDown={preventFocusLoss}\n onClick={onRemove}\n >\n <Trash2 size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n );\n}\n\nfunction preventFocusLoss(event: React.MouseEvent) {\n event.preventDefault();\n}\n","export function shouldCancelLinkEdit(isLinkEditMode: boolean, isLink: boolean, linkUrl: string) {\n return isLinkEditMode && isLink && linkUrl === \"\";\n}\n","import { $isLinkNode } from \"@lexical/link\";\nimport { $findMatchingParent } from \"@lexical/utils\";\nimport type { RangeSelection } from \"lexical\";\nimport { getSelectedNode } from \"./getSelectedNode\";\n\nexport function getSelectionLinkUrl(selection: RangeSelection) {\n const node = getSelectedNode(selection);\n const linkParent = $findMatchingParent(node, $isLinkNode);\n\n if (linkParent) {\n return linkParent.getURL();\n }\n if ($isLinkNode(node)) {\n return node.getURL();\n }\n return \"\";\n}\n","const SUPPORTED_URL_PROTOCOLS = new Set([\"http:\", \"https:\", \"mailto:\", \"sms:\", \"tel:\"]);\n\nexport function sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return \"about:blank\";\n }\n } catch {\n return url;\n }\n return url;\n}\n\nexport function validateUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url);\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return false;\n }\n if (parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\") {\n return parsedUrl.hostname !== \"\";\n }\n return parsedUrl.pathname.trim() !== \"\";\n } catch {\n return false;\n }\n}\n","import \"./LinkEditorPlugin.css\";\n\nimport { Box } from \"@chakra-ui/react\";\nimport { $createLinkNode, $isAutoLinkNode, $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isLineBreakNode,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n COMMAND_PRIORITY_LOW,\n KEY_ESCAPE_COMMAND,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOGGLE_LINK_EDIT_MODE_COMMAND } from \"./commands\";\nimport { LinkEditorContent } from \"./link-editor-content\";\nimport { getSelectedNode } from \"./utils/getSelectedNode\";\nimport { shouldCancelLinkEdit } from \"./utils/link-edit-state\";\nimport { getSelectionLinkUrl } from \"./utils/selection-link-url\";\nimport { setFloatingElemPos } from \"./utils/setFloatingElemPos\";\nimport { sanitizeUrl, validateUrl } from \"./utils/url\";\n\nconst GAP = 8;\n\nfunction LinkEditor({\n editor,\n isLink,\n setIsLink,\n anchorElem,\n isLinkEditMode,\n setIsLinkEditMode,\n}: {\n editor: LexicalEditor;\n isLink: boolean;\n setIsLink: Dispatch<boolean>;\n anchorElem: HTMLElement;\n isLinkEditMode: boolean;\n setIsLinkEditMode: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const updateLinkEditorRef = useRef<() => void>(() => undefined);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const [editedLinkUrl, setEditedLinkUrl] = useState(\"https://\");\n const [lastSelection, setLastSelection] = useState<BaseSelection | null>(null);\n const isActive = isLink || isLinkEditMode;\n const editedLinkUrlIsValid = validateUrl(editedLinkUrl);\n\n updateLinkEditorRef.current = () => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const nextLinkUrl = getSelectionLinkUrl(selection);\n setLinkUrl(nextLinkUrl);\n if (shouldCancelLinkEdit(isLinkEditMode, isLink, nextLinkUrl)) {\n closeLinkEditor();\n }\n if (isLinkEditMode && nextLinkUrl !== \"\") {\n setEditedLinkUrl(nextLinkUrl);\n }\n }\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n const activeElement = document.activeElement;\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n const hasNativeRange = nativeSelection !== null && nativeSelection.rangeCount > 0;\n\n if (\n selection !== null &&\n nativeSelection !== null &&\n hasNativeRange &&\n rootElement?.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const rangeRect = nativeSelection.getRangeAt(0).getBoundingClientRect();\n const topRect = new DOMRect(rangeRect.left, rangeRect.top, 0, rangeRect.height);\n setFloatingElemPos(topRect, editorElem, anchorElem, GAP, undefined, \"above\");\n setLastSelection(selection);\n } else if (!editorElem.contains(activeElement)) {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem);\n }\n setLastSelection(null);\n setIsLinkEditMode(false);\n setLinkUrl(\"\");\n }\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem.parentElement, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateLinkEditorRef.current();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateLinkEditorRef.current();\n return true;\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n () => {\n if (isLink) {\n setIsLink(false);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor, setIsLink, isLink]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n }, [editor]);\n\n useLayoutEffect(() => {\n if (!isActive) {\n return;\n }\n\n editor.getEditorState().read(() => {\n updateLinkEditorRef.current();\n });\n }, [editor, isActive]);\n\n useEffect(() => {\n if (isLinkEditMode && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isLinkEditMode]);\n\n const monitorInputInteraction = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleLinkSubmission();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n closeLinkEditor();\n }\n };\n\n const closeLinkEditor = () => {\n setEditedLinkUrl(\"https://\");\n setIsLinkEditMode(false);\n };\n\n const handleLinkSubmission = () => {\n if (lastSelection === null || !editedLinkUrlIsValid) {\n return;\n }\n\n editor.update(() => {\n $setSelection(lastSelection);\n });\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(editedLinkUrl));\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const parent = getSelectedNode(selection).getParent();\n if ($isAutoLinkNode(parent)) {\n const linkNode = $createLinkNode(parent.getURL(), {\n rel: parent.__rel,\n target: parent.__target,\n title: parent.__title,\n });\n parent.replace(linkNode, true);\n }\n }\n });\n closeLinkEditor();\n };\n\n return (\n <Box ref={editorRef} className={`link-editor ${isActive ? \"active\" : \"\"}`}>\n <LinkEditorContent\n isActive={isActive}\n isLinkEditMode={isLinkEditMode}\n editedLinkUrl={editedLinkUrl}\n editedLinkUrlIsValid={editedLinkUrlIsValid}\n linkUrl={linkUrl}\n href={sanitizeUrl(linkUrl)}\n inputRef={inputRef}\n onEditedLinkUrlChange={setEditedLinkUrl}\n onInputKeyDown={monitorInputInteraction}\n onClose={closeLinkEditor}\n onSubmit={handleLinkSubmission}\n onEdit={() => {\n setEditedLinkUrl(linkUrl);\n setIsLinkEditMode(true);\n }}\n onRemove={() => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }}\n />\n </Box>\n );\n}\n\nfunction useLinkEditorToolbar(\n editor: LexicalEditor,\n anchorElem: HTMLElement,\n isLinkEditMode: boolean,\n setIsLinkEditMode: Dispatch<boolean>,\n): React.JSX.Element | null {\n const [activeEditor, setActiveEditor] = useState(editor);\n const [isLink, setIsLink] = useState(false);\n\n useEffect(() => {\n function $updateToolbar() {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const focusNode = getSelectedNode(selection);\n const focusLinkNode = $findMatchingParent(focusNode, $isLinkNode);\n const focusAutoLinkNode = $findMatchingParent(focusNode, $isAutoLinkNode);\n if (!(focusLinkNode || focusAutoLinkNode)) {\n setIsLink(false);\n return;\n }\n const badNode = selection\n .getNodes()\n .filter((node) => !$isLineBreakNode(node))\n .find((node) => {\n const linkNode = $findMatchingParent(node, $isLinkNode);\n const autoLinkNode = $findMatchingParent(node, $isAutoLinkNode);\n const autoLinkIsUnlinked = $isAutoLinkNode(autoLinkNode) && autoLinkNode.getIsUnlinked();\n return (\n (focusLinkNode && !focusLinkNode.is(linkNode)) ||\n (linkNode && !linkNode.is(focusLinkNode)) ||\n (focusAutoLinkNode && !focusAutoLinkNode.is(autoLinkNode)) ||\n (autoLinkNode && (!autoLinkNode.is(focusAutoLinkNode) || autoLinkIsUnlinked))\n );\n });\n if (!badNode) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n }\n }\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n $updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n const linkNode = $findMatchingParent(node, $isLinkNode);\n if ($isLinkNode(linkNode) && (payload.metaKey || payload.ctrlKey)) {\n window.open(sanitizeUrl(linkNode.getURL()), \"_blank\", \"noopener,noreferrer\");\n return true;\n }\n }\n return false;\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n TOGGLE_LINK_EDIT_MODE_COMMAND,\n (payload) => {\n setIsLinkEditMode(payload);\n return true;\n },\n COMMAND_PRIORITY_LOW,\n ),\n );\n }, [editor, setIsLinkEditMode]);\n\n return createPortal(\n <LinkEditor\n editor={activeEditor}\n isLink={isLink}\n anchorElem={anchorElem}\n setIsLink={setIsLink}\n isLinkEditMode={isLinkEditMode}\n setIsLinkEditMode={setIsLinkEditMode}\n />,\n anchorElem,\n );\n}\n\nexport default function LinkEditorPlugin({ anchorElem = document.body }: { anchorElem?: HTMLElement }) {\n const [isLinkEditMode, setIsLinkEditMode] = useState(false);\n const [editor] = useLexicalComposerContext();\n return useLinkEditorToolbar(editor, anchorElem, isLinkEditMode, setIsLinkEditMode);\n}\n","import { LinkPlugin as LexicalLinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { validateUrl } from \"./utils/url.ts\";\n\nexport default function LinkPlugin(): React.JSX.Element {\n return <LexicalLinkPlugin validateUrl={validateUrl} />;\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { $convertFromMarkdownString, $convertToMarkdownString } from \"@lexical/markdown\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { CheckListPlugin } from \"@lexical/react/LexicalCheckListPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { TabIndentationPlugin } from \"@lexical/react/LexicalTabIndentationPlugin\";\nimport { $getRoot } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme, editorTransformers } from \"../shared/editor-config\";\nimport { CodeBlockActionsPlugin } from \"../shared/plugins/CodePlugin/CodeBlockActionsPlugin\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { CodeHighlightingPlugin } from \"../shared/plugins/CodePlugin/CodeHighlightingPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { LinkEditorPlugin, LinkPlugin } from \"../shared/plugins/LinkEditorPlugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { normalizeMarkdownListIndentation, splitFrontmatter } from \"../utils/markdown\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n isEditable?: boolean;\n placeholder?: string;\n scrollable?: boolean;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const {\n autoFocus = false,\n debug = false,\n defaultState = \"\",\n isEditable = false,\n placeholder,\n scrollable = true,\n onChange,\n } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"MARKDOWN_EDITOR\",\n nodes: editorNodes,\n editorState: () => {\n return $convertFromMarkdownString(normalizeMarkdownListIndentation(body), editorTransformers, undefined, false);\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height={scrollable ? \"100%\" : \"auto\"}\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <LexicalComposer initialConfig={initialConfig}>\n {autoFocus ? <AutoFocusPlugin /> : null}\n <HistoryPlugin />\n <LinkPlugin />\n <ListPlugin />\n {isEditable ? <TabIndentationPlugin maxIndent={7} /> : null}\n <CheckListPlugin />\n <HorizontalRulePlugin />\n <CodeHighlightingPlugin />\n <ImportCodeBlocksPlugin />\n <CodeBlockActionsPlugin anchorElem={floatingToolbarAnchorElem} />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} padding=\"sm\" scrollable={scrollable} />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\n padding=\"sm\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n justifyContent=\"center\"\n >\n <Box width=\"100%\" maxWidth=\"720px\" color=\"fg.muted\" textStyle=\"paragraph/M/regular\">\n {placeholder}\n </Box>\n </Flex>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {isEditable && floatingToolbarAnchorElem ? (\n <>\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n <LinkEditorPlugin anchorElem={floatingToolbarAnchorElem} />\n </>\n ) : null}\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState) => {\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = $convertToMarkdownString(editorTransformers, root);\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </Flex>\n );\n}\n","import type { ResourceType } from \"../types\";\n\nexport function inferResourceTypeFromMediaType(mediaType: string) {\n const normalized = mediaType.toLowerCase().trim();\n if (!normalized) return \"text\";\n\n if (normalized.startsWith(\"image/\")) return \"image\";\n if (normalized === \"application/pdf\") return \"pdf\";\n if (normalized === \"text/markdown\") return \"markdown\";\n if (normalized === \"text/csv\" || normalized === \"text/tab-separated-values\") return \"table\";\n if (normalized === \"application/json\") return \"json\";\n if (normalized.startsWith(\"text/\")) return \"text\";\n if (normalized.startsWith(\"application/\")) return \"text\";\n\n const fallback: ResourceType = \"text\";\n return fallback;\n}\n","const extensionToMediaType: Record<string, string> = {\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\",\n mp4: \"video/mp4\",\n mov: \"video/quicktime\",\n ts: \"text/typescript\",\n tsx: \"text/typescript\",\n js: \"text/javascript\",\n jsx: \"text/javascript\",\n sql: \"text/x-sql\",\n yml: \"text/yaml\",\n yaml: \"text/yaml\",\n};\n\nexport function mediaTypeFromPath(path: string) {\n const cleaned = path.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = cleaned.split(\".\").pop()?.toLowerCase();\n if (!ext) return null;\n return extensionToMediaType[ext] ?? null;\n}\n"],"names":["getCodeElementFromSelection","editor","selection","$getSelection","$isRangeSelection","anchorNode","anchor","getNode","codeNode","$isCodeNode","$findMatchingParent","node","codeElement","getElementByKey","getKey","HTMLElement","getCodeElementFromTarget","target","closest","getActionPosition","anchorElem","anchorRect","getBoundingClientRect","codeRect","top","left","right","CodeBlockActionsPlugin","t0","$","_c","useLexicalComposerContext","activeCodeElement","setActiveCodeElement","useState","isCopied","setIsCopied","copyResetTimeoutRef","useRef","t1","t2","Symbol","for","current","window","clearTimeout","useEffect","t3","t4","rootElement","getRootElement","handlePointerMove","event","nextCodeElement","handlePointerLeave","getEditorState","read","selectionCodeElement","addEventListener","removeEventListener","t5","t6","mergeRegister","registerUpdateListener","t7","editorState","selectionCodeElement_0","registerCommand","SELECTION_CHANGE_COMMAND","selectionCodeElement_1","_temp","COMMAND_PRIORITY_CRITICAL","position","t8","style","t9","t10","t11","textContent","code","navigator","clipboard","writeText","setTimeout","t12","Check","jsx","Copy","t13","IconButton","t14","Tooltip","t15","t16","createPortal","matches","getSelectedNode","focus","focusNode","isBackward","$isAtNodeEnd","VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","verticalGap","horizontalOffset","placement","scrollerElem","parentElement","opacity","transform","floatingElemRect","anchorElementRect","editorScrollerRect","height","bottom","width","ToolbarSeparator","display","margin","borderLeft","FloatingToolbarButtons","props","blockType","isBold","isItalic","isUnderline","isLink","formatHeading","formatList","formatCodeBlock","insertLink","undefined","dispatchCommand","FORMAT_TEXT_COMMAND","Text","LinkIcon","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","Code2","t34","t35","t36","t37","t38","List","t39","t40","t41","t42","ListOrdered","t43","t44","t45","t46","ListTodo","t47","t48","Stack","blockTypeToBlockName","bullet","check","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","shouldShowFloatingToolbar","params","hasSelection","isRangeSelection","isCollapsed","hasNativeSelection","hasNativeRange","isAnchorInsideEditor","isEditorEditable","GAP","FloatingTextToolbar","isToolbarActive","setIsToolbarActive","editorRef","setBlockType","setIsBold","setIsItalic","setIsUnderline","setIsLink","updateFloatingToolbarRef","headingSize","update","$setBlocksType","$createParagraphNode","$createHeadingNode","REMOVE_LIST_COMMAND","command","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_CHECK_LIST_COMMAND","$createCodeNode","TOGGLE_LINK_COMMAND","TOGGLE_LINK_EDIT_MODE_COMMAND","updateToolbar","hasFormat","linkParent","$isLinkNode","autoLinkParent","$isAutoLinkNode","nextBlockType","editorElem","nativeSelection","getSelection","rangeCount","Boolean","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","_payload","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","FloatingTextFormatToolbarPlugin","document","body","AwarenessCursorsCSS","CollaborativeMarkdownEditor","roomId","wsUrl","wsParams","userName","userColor","placeholder","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","nextProvider","WebsocketProvider","connect","on","isSynced","provider","disconnect","namespace","nodes","editorNodes","onError","_temp2","editable","theme","editorTheme","initialConfig","CollaborationPluginV2__EXPERIMENTAL","LinkPlugin","ListPlugin","TabIndentationPlugin","HorizontalRulePlugin","CodeHighlightingPlugin","ImportCodeBlocksPlugin","EquationPlugin","ContentEditable","Box","RichTextPlugin","LexicalErrorBoundary","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","Y","Doc","LinkEditorContent","isActive","isLinkEditMode","editedLinkUrl","editedLinkUrlIsValid","linkUrl","href","inputRef","onEditedLinkUrlChange","onInputKeyDown","onClose","onSubmit","onEdit","onRemove","value","Input","X","preventFocusLoss","ChakraLink","Pencil","Trash2","preventDefault","shouldCancelLinkEdit","getSelectionLinkUrl","getURL","SUPPORTED_URL_PROTOCOLS","Set","sanitizeUrl","url","parsedUrl","URL","has","protocol","validateUrl","hostname","pathname","trim","LinkEditor","setIsLinkEditMode","updateLinkEditorRef","setLinkUrl","setEditedLinkUrl","lastSelection","setLastSelection","nextLinkUrl","closeLinkEditor","activeElement","rangeRect","topRect","COMMAND_PRIORITY_LOW","KEY_ESCAPE_COMMAND","useLayoutEffect","monitorInputInteraction","key","handleLinkSubmission","$setSelection","linkNode","$createLinkNode","rel","__rel","__target","title","__title","replace","useLinkEditorToolbar","activeEditor","setActiveEditor","$updateToolbar","focusLinkNode","focusAutoLinkNode","badNode","getNodes","filter","find","node_0","autoLinkNode","autoLinkIsUnlinked","getIsUnlinked","is","newEditor","payload_0","payload","selection_0","node_1","linkNode_0","metaKey","ctrlKey","open","$isLineBreakNode","LinkEditorPlugin","LexicalLinkPlugin","MarkdownEditor","autoFocus","debug","defaultState","scrollable","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","$convertFromMarkdownString","normalizeMarkdownListIndentation","editorTransformers","AutoFocusPlugin","HistoryPlugin","CheckListPlugin","Fragment","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","inferResourceTypeFromMediaType","mediaType","normalized","toLowerCase","startsWith","extensionToMediaType","csv","tsv","json","md","markdown","txt","pdf","png","jpg","jpeg","gif","svg","webp","mp4","mov","ts","tsx","js","sql","yml","yaml","mediaTypeFromPath","path","ext","split","pop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAASA,GAA4BC,GAAyD;AAC5F,QAAMC,IAAYC,GAAAA;AAClB,MAAI,CAACC,EAAkBF,CAAS;AAC9B,WAAO;AAGT,QAAMG,IAAaH,EAAUI,OAAOC,QAAAA,GAC9BC,IAAWC,GAAYJ,CAAU,IACnCA,IACAK,EAAoBL,GAAaM,CAAAA,MACxBF,GAAYE,CAAI,CACxB;AAEL,MAAI,CAACF,GAAYD,CAAQ;AACvB,WAAO;AAGT,QAAMI,IAAcX,EAAOY,gBAAgBL,EAASM,QAAQ;AAC5D,SAAOF,aAAuBG,cAAcH,IAAc;AAC5D;AAEA,SAASI,GAAyBC,GAA4B;AAC5D,SAAMA,aAAkBF,cAIjBE,EAAOC,QAAQ,kBAAkB,IAH/B;AAIX;AAEA,SAASC,GAAkBC,GAAyBR,GAA0B;AAC5E,QAAMS,IAAaD,EAAWE,sBAAAA,GACxBC,IAAWX,EAAYU,sBAAAA;AAE7B,SAAO;AAAA,IACLE,KAAKD,EAASC,MAAMH,EAAWG,MAAM;AAAA,IACrCC,MAAMF,EAASG,QAAQL,EAAWI,OAAO;AAAA,EAAA;AAE7C;AAEO,SAAAE,GAAAC,GAAA;AAAA,QAAAC,IAAAC,GAAA,EAAA,GAAgC;AAAA,IAAAV,YAAAA;AAAAA,EAAAA,IAAAQ,GACrC,CAAA3B,CAAA,IAAiB8B,GAAAA,GACjB,CAAAC,GAAAC,CAAA,IAAkDC,EAA6B,IAAI,GACnF,CAAAC,GAAAC,CAAA,IAAgCF,EAAS,EAAK,GAC9CG,IAA4BC,GAAsB,IAAI;AAAE,MAAAC,GAAAC;AAAA,EAAAX,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAE9CH,IAAAA,MACD,MAAA;AACL,IAAIF,EAAmBM,YAAa,QAClCC,OAAMC,aAAcR,EAAmBM,OAAQ;AAAA,EAChD,GAEFH,IAAA,CAAA,GAAEX,OAAAU,GAAAV,OAAAW,MAAAD,IAAAV,EAAA,CAAA,GAAAW,IAAAX,EAAA,CAAA,IANLiB,EAAUP,GAMPC,CAAE;AAAC,MAAAO,GAAAC;AAAA,EAAAnB,SAAA5B,KAEI8C,IAAAA,MAAA;AACR,UAAAE,IAAoBhD,EAAMiD,eAAAA;AAC1B,QAAI,CAACD;AAAW;AAIhB,UAAAE,IAA0BC,CAAAA,MAAA;AACxB,YAAAC,IAAwBrC,GAAyBoC,EAAKnC,MAAO;AAC7DgB,MAAAA,EAAqBoB,aAA2BtC,cAA3BsC,IAAA,IAA+D;AAAA,IAAC,GAGvFC,IAA2BA,MAAA;AACzBrD,MAAAA,EAAMsD,iBAAiBC,KAAM,MAAA;AAC3B,cAAAC,IAA6BzD,GAA4BC,CAAM;AAC/DgC,QAAAA,EAAqBwB,CAAoB;AAAA,MAAC,CAC3C;AAAA,IAAC;AAGJR,WAAAA,EAAWS,iBAAkB,eAAeP,CAAiB,GAC7DF,EAAWS,iBAAkB,gBAAgBJ,CAAkB,GAExD,MAAA;AACLL,MAAAA,EAAWU,oBAAqB,eAAeR,CAAiB,GAChEF,EAAWU,oBAAqB,gBAAgBL,CAAkB;AAAA,IAAC;AAAA,EACpE,GACAN,IAAA,CAAC/C,CAAM,GAAC4B,OAAA5B,GAAA4B,OAAAkB,GAAAlB,OAAAmB,MAAAD,IAAAlB,EAAA,CAAA,GAAAmB,IAAAnB,EAAA,CAAA,IAzBXiB,EAAUC,GAyBPC,CAAQ;AAAC,MAAAY,GAAAC;AAkCZ,MAlCYhC,SAAA5B,KAEF2D,IAAAA,MACDE,GACL7D,EAAM8D,uBAAwBC,CAAAA,MAAA;AAAC,UAAA;AAAA,MAAAC,aAAAA;AAAAA,IAAAA,IAAAD;AAC7BC,IAAAA,EAAWT,KAAM,MAAA;AACf,YAAAU,IAA6BlE,GAA4BC,CAAM;AAC/D,MAAIwD,KACFxB,EAAqBwB,CAAoB;AAAA,IAC1C,CACF;AAAA,EAAC,CACH,GACDxD,EAAMkE,gBACJC,IACA,OACEnE,EAAMsD,iBAAiBC,KAAM,MAAA;AAC3B,UAAAa,IAA6BrE,GAA4BC,CAAM;AAC/D,QAAI,CAACwD,GAAoB;AACvBxB,MAAAA,EAAqBqC,EAEpB;AAAC;AAAA,IAAA;AAIJrC,IAAAA,EAAqBwB,CAAoB;AAAA,EAAC,CAC3C,GAEM,KAETc,EACF,CACF,GACCV,IAAA,CAAC5D,CAAM,GAAC4B,OAAA5B,GAAA4B,OAAA+B,GAAA/B,OAAAgC,MAAAD,IAAA/B,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,IA9BXiB,EAAUc,GA8BPC,CAAQ,GAEP,CAACzC,KAAD,CAAgBY;AAAiB,WAC5B;AACR,MAAAgC;AAAA,EAAAnC,EAAA,CAAA,MAAAG,KAAAH,SAAAT,KAEgB4C,IAAA7C,GAAkBC,GAAYY,CAAiB,GAACH,OAAAG,GAAAH,OAAAT,GAAAS,QAAAmC,KAAAA,IAAAnC,EAAA,EAAA;AAAjE,QAAA2C,IAAiBR;AAAiD,MAAAS;AAAA,EAAA5C,EAAA,EAAA,MAAA2C,EAAA/C,QAAAI,EAAA,EAAA,MAAA2C,EAAAhD,OACrCiD,IAAA;AAAA,IAAAD,UACjB;AAAA,IAAUhD,KACfgD,EAAQhD;AAAAA,IAAIC,MACX+C,EAAQ/C;AAAAA,EAAAA,GACfI,EAAA,EAAA,IAAA2C,EAAA/C,MAAAI,EAAA,EAAA,IAAA2C,EAAAhD,KAAAK,QAAA4C,KAAAA,IAAA5C,EAAA,EAAA;AAJD,QAAA6C,IAA6BD,GAQPE,IAAAxC,IAAA,WAAA,aAEFyC,IAAAzC,IAAA,WAAA;AAAiC,MAAA0C;AAAA,EAAAhD,EAAA,EAAA,MAAAG,EAAA8C,eAGpCD,gBAAA;AACP,UAAAE,IAAa/C,EAAiB8C,eAAjB;AACb,QAAA;AACE,YAAME,UAASC,UAAUC,UAAWH,CAAI,GACxC3C,EAAY,EAAI,GACZC,EAAmBM,YAAa,QAClCC,OAAMC,aAAcR,EAAmBM,OAAQ,GAEjDN,EAAmBM,UAAWC,OAAMuC,WAAY,MAAA;AAC9C/C,QAAAA,EAAY,EAAK;AAAA,MAAC,GACjB,IAAI;AAAA,IAFoB,QAAA;AAI3BA,MAAAA,EAAY,EAAK;AAAA,IAAC;AAAA,EACnB,GACFP,EAAA,EAAA,IAAAG,EAAA8C,aAAAjD,QAAAgD,KAAAA,IAAAhD,EAAA,EAAA;AAAA,MAAAuD;AAAA,EAAAvD,UAAAM,KAEAiD,IAAAjD,sBAAYkD,IAAA,EAAY,MAAA,IAAE,IAAO,gBAAAC,EAACC,IAAA,EAAW,MAAA,GAAA,CAAE,GAAI1D,QAAAM,GAAAN,QAAAuD,KAAAA,IAAAvD,EAAA,EAAA;AAAA,MAAA2D;AAAA,EAAA3D,EAAA,EAAA,MAAA+C,KAAA/C,UAAAgD,KAAAhD,EAAA,EAAA,MAAAuD,KApBtDI,IAAA,gBAAAF,EAACG,GAAA,EACa,cAAAb,GACJ,SAAA,WACH,MAAA,MACI,SAAAC,GAgBRO,UAAAA,EAAAA,CACH,GAAavD,QAAA+C,GAAA/C,QAAAgD,GAAAhD,QAAAuD,GAAAvD,QAAA2D,KAAAA,IAAA3D,EAAA,EAAA;AAAA,MAAA6D;AAAA,EAAA7D,EAAA,EAAA,MAAA2D,KAAA3D,UAAA8C,KAtBfe,IAAA,gBAAAJ,EAACK,GAAA,EAAiB,SAAAhB,GAChBa,UAAAA,GAsBF,GAAU3D,QAAA2D,GAAA3D,QAAA8C,GAAA9C,QAAA6D,KAAAA,IAAA7D,EAAA,EAAA;AAAA,MAAA+D;AAAA,EAAA/D,EAAA,EAAA,MAAA6C,KAAA7C,UAAA6D,KAxBZE,IAAA,gBAAAN,EAAA,OAAA,EAAe,WAAA,sBAA4BZ,OAAAA,GACzCgB,UAAAA,GAwBF,GAAM7D,QAAA6C,GAAA7C,QAAA6D,GAAA7D,QAAA+D,KAAAA,IAAA/D,EAAA,EAAA;AAAA,MAAAgE;AAAA,SAAAhE,EAAA,EAAA,MAAAT,KAAAS,UAAA+D,KA1BDC,IAAAC,GACLF,GA0BAxE,CACF,GAACS,QAAAT,GAAAS,QAAA+D,GAAA/D,QAAAgE,KAAAA,IAAAhE,EAAA,EAAA,GA5BMgE;AA4BN;AAhHI,SAAAvB,GAAA3B,GAAA;AAAA,SA0DgBA,GAAOoD,QAAU,QAAyB,IAA1CpD,IAAA;AAA2C;AC3G3D,SAASqD,GAAgB9F,GAAmD;AACjF,QAAMI,IAASJ,EAAUI,QACnB2F,IAAQ/F,EAAU+F,OAClB5F,IAAaH,EAAUI,OAAOC,QAAAA,GAC9B2F,IAAYhG,EAAU+F,MAAM1F,QAAAA;AAClC,SAAIF,MAAe6F,IACV7F,IAEUH,EAAUiG,WAAAA,IAEpBC,GAAaH,CAAK,IAAI5F,IAAa6F,IAErCE,GAAa9F,CAAM,IAAID,IAAa6F;AAC7C;AChBA,MAAMG,KAAe,IACfC,KAAoB;AAEnB,SAASC,GACdC,GACAC,GACArF,GACAsF,IAAsBL,IACtBM,IAA2BL,IAC3BM,IAAgC,UAC1B;AACN,QAAMC,IAAezF,EAAW0F;AAEhC,MAAIN,MAAe,QAAQ,CAACK,GAAc;AACxCJ,IAAAA,EAAa/B,MAAMqC,UAAU,KAC7BN,EAAa/B,MAAMsC,YAAY;AAC/B;AAAA,EACF;AAEA,QAAMC,IAAmBR,EAAanF,sBAAAA,GAChC4F,IAAoB9F,EAAWE,sBAAAA,GAC/B6F,IAAqBN,EAAavF,sBAAAA;AAExC,MAAIE,IACFoF,MAAc,UAAUJ,EAAWhF,MAAMyF,EAAiBG,SAASV,IAAcF,EAAWhF,MAAMkF,GAChGjF,IAAO+E,EAAW/E,OAAOkF;AAE7B,EAAInF,IAAM2F,EAAmB3F,QAC3BA,IACEoF,MAAc,UACVJ,EAAWa,SAASX,IACpBlF,IAAMyF,EAAiBG,SAASZ,EAAWY,SAASV,IAAc,IAGtEjF,IAAOwF,EAAiBK,QAAQH,EAAmBzF,UACrDD,IAAO0F,EAAmBzF,QAAQuF,EAAiBK,QAAQX,IAG7DnF,KAAO0F,EAAkB1F,KACzBC,KAAQyF,EAAkBzF,MAE1BgF,EAAa/B,MAAMqC,UAAU,KAC7BN,EAAa/B,MAAMsC,YAAY,aAAavF,CAAI,OAAOD,CAAG;AAC5D;ACxBA,SAAA+F,KAAA;AAAA,QAAA1F,IAAAC,GAAA,CAAA;AAAA,MAAAF;AAAA,SAAAC,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEId,IAAA,gBAAA0D,EAAA,UACS,OAAA;AAAA,IAAAkC,SACI;AAAA,IAAaJ,QACd;AAAA,IAAMK,QACN;AAAA,IAAWC,YACP;AAAA,EAAA,GACb,GACD7F,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GAPFD;AAOE;AAIC,SAAA+F,GAAAC,GAAA;AAAA,QAAA/F,IAAAC,GAAA,EAAA,GACL;AAAA,IAAA7B,QAAAA;AAAAA,IAAA4H,WAAAA;AAAAA,IAAAC,QAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,QAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAWIT,GAMiBhG,IAAAkG,KAAAQ;AAAmB,MAAA/F;AAAA,EAAAV,SAAA5B,KACvBsC,IAAAA,MAAMtC,EAAMsI,gBAAiBC,IAAqB,MAAM,GAAC3G,OAAA5B,GAAA4B,OAAAU,KAAAA,IAAAV,EAAA,CAAA;AAAA,MAAAW;AAAA,EAAAX,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAKlEF,sBAACiG,IAAA,EAAgB,YAAA,QAAgB,UAAA,UAAS,UAAA,KAE1C,GAAO5G,OAAAW,KAAAA,IAAAX,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,CAAA,MAAAD,KAAAC,SAAAU,KAVXQ,sBAAC4C,GAAA,EAAgB,SAAA,QACf,UAAA,gBAAAL,EAACG,KACc,eAAA7D,GACJ,SAAAW,GACD,SAAA,SACG,cAAA,QACN,MAAA,MAELC,aAGF,GACF,GAAUX,OAAAD,GAAAC,OAAAU,GAAAV,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAGO,QAAAmB,IAAA+E,KAAAO;AAAqB,MAAA1E;AAAA,EAAA/B,SAAA5B,KACzB2D,IAAAA,MAAM3D,EAAMsI,gBAAiBC,IAAqB,QAAQ,GAAC3G,OAAA5B,GAAA4B,OAAA+B,KAAAA,IAAA/B,EAAA,CAAA;AAAA,MAAAgC;AAAA,EAAAhC,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAKpEmB,sBAAC4E,IAAA,EAAe,WAAA,UAAkB,UAAA,UAAS,UAAA,KAE3C,GAAO5G,OAAAgC,KAAAA,IAAAhC,EAAA,CAAA;AAAA,MAAAmC;AAAA,EAAAnC,EAAA,CAAA,MAAAmB,KAAAnB,UAAA+B,KAVXI,sBAAC2B,GAAA,EAAgB,SAAA,UACf,UAAA,gBAAAL,EAACG,KACc,eAAAzC,GACJ,SAAAY,GACD,SAAA,SACG,cAAA,UACN,MAAA,MAELC,aAGF,GACF,GAAUhC,OAAAmB,GAAAnB,QAAA+B,GAAA/B,QAAAmC,KAAAA,IAAAnC,EAAA,EAAA;AAGO,QAAA4C,IAAAuD,KAAAM;AAAwB,MAAA3D;AAAA,EAAA9C,UAAA5B,KAC5B0E,IAAAA,MAAM1E,EAAMsI,gBAAiBC,IAAqB,WAAW,GAAC3G,QAAA5B,GAAA4B,QAAA8C,KAAAA,IAAA9C,EAAA,EAAA;AAAA,MAAA+C;AAAA,EAAA/C,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAKvEkC,sBAAC6D,IAAA,EAAoB,gBAAA,aAAqB,UAAA,UAAS,UAAA,KAEnD,GAAO5G,QAAA+C,KAAAA,IAAA/C,EAAA,EAAA;AAAA,MAAAgD;AAAA,EAAAhD,EAAA,EAAA,MAAA4C,KAAA5C,UAAA8C,KAVXE,sBAACc,GAAA,EAAgB,SAAA,aACf,UAAA,gBAAAL,EAACG,KACc,eAAAhB,GACJ,SAAAE,GACD,SAAA,SACG,cAAA,aACN,MAAA,MAELC,aAGF,GACF,GAAU/C,QAAA4C,GAAA5C,QAAA8C,GAAA9C,QAAAgD,KAAAA,IAAAhD,EAAA,EAAA;AACQ,QAAAuD,IAAA6C,IAAA,gBAAA,eAEDzC,IAAAyC,KAAAK,QAED5C,IAAAuC,IAAA,gBAAA;AAAsC,MAAArC;AAAA,EAAA/D,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAIlDkD,sBAAC8C,IAAA,EAAe,MAAA,GAAA,CAAE,GAAI7G,QAAA+D,KAAAA,IAAA/D,EAAA,EAAA;AAAA,MAAAgE;AAAA,EAAAhE,EAAA,EAAA,MAAAwG,KAAAxG,UAAA2D,KAAA3D,EAAA,EAAA,MAAA6D,KAPxBG,IAAA,gBAAAP,EAACG,GAAA,EACc,eAAAD,GACL,SAAA,SACI,cAAAE,GACP,MAAA,MACI2C,SAAAA,GAETzC,UAAAA,GACF,GAAa/D,QAAAwG,GAAAxG,QAAA2D,GAAA3D,QAAA6D,GAAA7D,QAAAgE,KAAAA,IAAAhE,EAAA,EAAA;AAAA,MAAA8G;AAAA,EAAA9G,EAAA,EAAA,MAAAuD,KAAAvD,UAAAgE,KATf8C,IAAA,gBAAArD,EAACK,GAAA,EAAiB,SAAAP,GAChBS,UAAAA,GASF,GAAUhE,QAAAuD,GAAAvD,QAAAgE,GAAAhE,QAAA8G,KAAAA,IAAA9G,EAAA,EAAA;AAAA,MAAA+G;AAAA,EAAA/G,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEVkG,sBAACrB,IAAA,EAAgB,GAAG1F,QAAA+G,KAAAA,IAAA/G,EAAA,EAAA;AAIH,QAAAgH,IAAAhB,MAAc,QAAdS;AAA+B,MAAAQ;AAAA,EAAAjH,UAAAqG,KAInCY,IAAAA,MAAMZ,EAAc,IAAI,GAACrG,QAAAqG,GAAArG,QAAAiH,KAAAA,IAAAjH,EAAA,EAAA;AAAA,MAAAkH;AAAA,EAAAlH,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAElCqG,sBAACN,IAAA,EAAgB,YAAA,QAAgB,UAAA,SAAQ,UAAA,MAEzC,GAAO5G,QAAAkH,KAAAA,IAAAlH,EAAA,EAAA;AAAA,MAAAmH;AAAA,EAAAnH,EAAA,EAAA,MAAAgH,KAAAhH,UAAAiH,KAVXE,sBAACrD,GAAA,EAAgB,SAAA,aACf,UAAA,gBAAAL,EAACG,KACc,eAAAoD,GACL,SAAA,SACG,cAAA,aACN,MAAA,MACI,SAAAC,GAETC,aAGF,GACF,GAAUlH,QAAAgH,GAAAhH,QAAAiH,GAAAjH,QAAAmH,KAAAA,IAAAnH,EAAA,EAAA;AAGO,QAAAoH,IAAApB,MAAc,QAAdS;AAA+B,MAAAY;AAAA,EAAArH,UAAAqG,KAInCgB,IAAAA,MAAMhB,EAAc,IAAI,GAACrG,QAAAqG,GAAArG,QAAAqH,KAAAA,IAAArH,EAAA,EAAA;AAAA,MAAAsH;AAAA,EAAAtH,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAElCyG,sBAACV,IAAA,EAAgB,YAAA,QAAgB,UAAA,SAAQ,UAAA,MAEzC,GAAO5G,QAAAsH,KAAAA,IAAAtH,EAAA,EAAA;AAAA,MAAAuH;AAAA,EAAAvH,EAAA,EAAA,MAAAoH,KAAApH,UAAAqH,KAVXE,sBAACzD,GAAA,EAAgB,SAAA,aACf,UAAA,gBAAAL,EAACG,KACc,eAAAwD,GACL,SAAA,SACG,cAAA,aACN,MAAA,MACI,SAAAC,GAETC,aAGF,GACF,GAAUtH,QAAAoH,GAAApH,QAAAqH,GAAArH,QAAAuH,KAAAA,IAAAvH,EAAA,EAAA;AAGO,QAAAwH,IAAAxB,MAAc,QAAdS;AAA+B,MAAAgB;AAAA,EAAAzH,UAAAqG,KAInCoB,IAAAA,MAAMpB,EAAc,IAAI,GAACrG,QAAAqG,GAAArG,QAAAyH,KAAAA,IAAAzH,EAAA,EAAA;AAAA,MAAA0H;AAAA,EAAA1H,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAElC6G,sBAACd,IAAA,EAAgB,YAAA,QAAgB,UAAA,SAAQ,UAAA,MAEzC,GAAO5G,QAAA0H,KAAAA,IAAA1H,EAAA,EAAA;AAAA,MAAA2H;AAAA,EAAA3H,EAAA,EAAA,MAAAwH,KAAAxH,UAAAyH,KAVXE,sBAAC7D,GAAA,EAAgB,SAAA,aACf,UAAA,gBAAAL,EAACG,KACc,eAAA4D,GACL,SAAA,SACG,cAAA,aACN,MAAA,MACI,SAAAC,GAETC,aAGF,GACF,GAAU1H,QAAAwH,GAAAxH,QAAAyH,GAAAzH,QAAA2H,KAAAA,IAAA3H,EAAA,EAAA;AAAA,MAAA4H;AAAA,EAAA5H,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEV+G,sBAAClC,IAAA,EAAgB,GAAG1F,QAAA4H,KAAAA,IAAA5H,EAAA,EAAA;AAIH,QAAA6H,IAAA7B,MAAc,UAAdS;AAAiC,MAAAqB;AAAA,EAAA9H,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAM9CiH,sBAACC,IAAA,EAAY,MAAA,GAAA,CAAE,GAAI/H,QAAA8H,KAAAA,IAAA9H,EAAA,EAAA;AAAA,MAAAgI;AAAA,EAAAhI,EAAA,EAAA,MAAAuG,KAAAvG,UAAA6H,KARvBG,sBAAClE,GAAA,EAAgB,SAAA,cACf,UAAA,gBAAAL,EAACG,KACc,eAAAiE,GACL,SAAA,SACG,cAAA,cACN,MAAA,MACItB,SAAAA,GAETuB,aACF,GACF,GAAU9H,QAAAuG,GAAAvG,QAAA6H,GAAA7H,QAAAgI,KAAAA,IAAAhI,EAAA,EAAA;AAAA,MAAAiI;AAAA,EAAAjI,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEVoH,uBAACvC,IAAA,EAAgB,GAAG1F,QAAAiI,MAAAA,KAAAjI,EAAA,EAAA;AAIH,QAAAkI,KAAAlC,MAAc,YAAdS;AAAmC,MAAA0B;AAAA,EAAAnI,UAAAsG,KAIvC6B,KAAAA,MAAM7B,EAAW,QAAQ,GAACtG,QAAAsG,GAAAtG,QAAAmI,MAAAA,KAAAnI,EAAA,EAAA;AAAA,MAAAoI;AAAA,EAAApI,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEnCuH,uBAACC,IAAA,EAAW,MAAA,GAAA,CAAE,GAAIrI,QAAAoI,MAAAA,KAAApI,EAAA,EAAA;AAAA,MAAAsI;AAAA,EAAAtI,EAAA,EAAA,MAAAkI,MAAAlI,UAAAmI,MARtBG,uBAACxE,GAAA,EAAgB,SAAA,iBACf,UAAA,gBAAAL,EAACG,KACc,eAAAsE,IACL,SAAA,SACG,cAAA,iBACN,MAAA,MACI,SAAAC,IAETC,cACF,GACF,GAAUpI,QAAAkI,IAAAlI,QAAAmI,IAAAnI,QAAAsI,MAAAA,KAAAtI,EAAA,EAAA;AAGO,QAAAuI,KAAAvC,MAAc,YAAdS;AAAmC,MAAA+B;AAAA,EAAAxI,UAAAsG,KAIvCkC,KAAAA,MAAMlC,EAAW,QAAQ,GAACtG,QAAAsG,GAAAtG,QAAAwI,MAAAA,KAAAxI,EAAA,EAAA;AAAA,MAAAyI;AAAA,EAAAzI,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEnC4H,uBAACC,IAAA,EAAkB,MAAA,GAAA,CAAE,GAAI1I,QAAAyI,MAAAA,KAAAzI,EAAA,EAAA;AAAA,MAAA2I;AAAA,EAAA3I,EAAA,EAAA,MAAAuI,MAAAvI,UAAAwI,MAR7BG,uBAAC7E,GAAA,EAAgB,SAAA,iBACf,UAAA,gBAAAL,EAACG,KACc,eAAA2E,IACL,SAAA,SACG,cAAA,iBACN,MAAA,MACI,SAAAC,IAETC,cACF,GACF,GAAUzI,QAAAuI,IAAAvI,QAAAwI,IAAAxI,QAAA2I,MAAAA,KAAA3I,EAAA,EAAA;AAGO,QAAA4I,KAAA5C,MAAc,WAAdS;AAAkC,MAAAoC;AAAA,EAAA7I,UAAAsG,KAItCuC,KAAAA,MAAMvC,EAAW,OAAO,GAACtG,QAAAsG,GAAAtG,QAAA6I,MAAAA,KAAA7I,EAAA,EAAA;AAAA,MAAA8I;AAAA,EAAA9I,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAElCiI,uBAACC,IAAA,EAAe,MAAA,GAAA,CAAE,GAAI/I,QAAA8I,MAAAA,KAAA9I,EAAA,EAAA;AAAA,MAAAgJ;AAAA,EAAAhJ,EAAA,EAAA,MAAA4I,MAAA5I,UAAA6I,MAR1BG,uBAAClF,GAAA,EAAgB,SAAA,cACf,UAAA,gBAAAL,EAACG,KACc,eAAAgF,IACL,SAAA,SACG,cAAA,cACN,MAAA,MACI,SAAAC,IAETC,cACF,GACF,GAAU9I,QAAA4I,IAAA5I,QAAA6I,IAAA7I,QAAAgJ,MAAAA,KAAAhJ,EAAA,EAAA;AAAA,MAAAiJ;AAAA,SAAAjJ,EAAA,EAAA,MAAAgD,KAAAhD,EAAA,EAAA,MAAA8G,KAAA9G,UAAAmH,KAAAnH,EAAA,EAAA,MAAAuH,KAAAvH,EAAA,EAAA,MAAAkB,KAAAlB,EAAA,EAAA,MAAA2H,KAAA3H,EAAA,EAAA,MAAAgI,KAAAhI,UAAAsI,MAAAtI,EAAA,EAAA,MAAA2I,MAAA3I,EAAA,EAAA,MAAAgJ,MAAAhJ,UAAAmC,KA9IZ8G,wBAACC,IAAA,EAAgB,WAAA,OAAU,KAAA,OAAiB,YAAA,UAC1ChI,UAAAA;AAAAA,IAAAA;AAAAA,IAaAiB;AAAAA,IAaAa;AAAAA,IAaA8D;AAAAA,IAYAC;AAAAA,IAEAI;AAAAA,IAaAI;AAAAA,IAaAI;AAAAA,IAcAC;AAAAA,IAEAI;AAAAA,IAYAC;AAAAA,IAEAK;AAAAA,IAWAK;AAAAA,IAWAK;AAAAA,EAAAA,GAWF,GAAQhJ,QAAAgD,GAAAhD,QAAA8G,GAAA9G,QAAAmH,GAAAnH,QAAAuH,GAAAvH,QAAAkB,GAAAlB,QAAA2H,GAAA3H,QAAAgI,GAAAhI,QAAAsI,IAAAtI,QAAA2I,IAAA3I,QAAAgJ,IAAAhJ,QAAAmC,GAAAnC,QAAAiJ,MAAAA,KAAAjJ,EAAA,EAAA,GA/IRiJ;AA+IQ;ACzLL,MAAME,KAAuB;AAAA,EAClCC,QAAQ;AAAA,EACRC,OAAO;AAAA,EACPnG,MAAM;AAAA,EACNoG,IAAI;AAAA,EACJC,IAAI;AAAA,EACJC,IAAI;AAAA,EACJC,IAAI;AAAA,EACJC,IAAI;AAAA,EACJC,IAAI;AAAA,EACJC,QAAQ;AAAA,EACRC,WAAW;AAAA,EACXC,OAAO;AACT,GAIMC,KAAmBA,CAACC,MACjBA,KAAQb,KAAwBa,IAAqB,MAGxDC,KAAuBA,CAACzL,OAE1BA,EAAWS,aAAa,SACpBT,IACAK,EAAoBL,GAAaM,CAAAA,MAAS;AACxC,QAAMoL,IAASpL,EAAKqL,UAAAA;AACpB,SAAOD,MAAW,QAAQE,GAAoBF,CAAM;AACtD,CAAC,MAEa1L,EAAW6L,0BAAAA,GAGpBC,KAA6BA,CAAC9L,MAA4B;AACrE,QAAM+L,IAAUN,GAAqBzL,CAAU;AAE/C,MAAIgM,GAAYD,CAAO;AACrB,WAAOA,EAAQE,YAAAA;AAGjB,QAAMC,IAAa7L,EAAoBL,GAAaM,CAAAA,MAAS0L,GAAY1L,CAAI,CAAC;AAC9E,MAAI4L,MAAe,QAAQF,GAAYE,CAAU;AAC/C,WAAOA,EAAWD,YAAAA;AAGpB,QAAMT,IAAOW,GAAeJ,CAAO,IAAIA,EAAQK,OAAAA,IAAWL,EAAQM,QAAAA;AAClE,SAAOd,GAAiBC,CAAI;AAC9B;AC1CO,SAASc,GAA0BC,GAAyC;AACjF,QAAM;AAAA,IACJC,cAAAA;AAAAA,IACAC,kBAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,oBAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,sBAAAA;AAAAA,IACAC,kBAAAA;AAAAA,EAAAA,IACEP;AAEJ,SACEC,KACAC,KACA,CAACC,KACDC,KACAC,KACAC,KACAC;AAEJ;ACKA,MAAMC,KAAM;AAEZ,SAASC,GAAoB;AAAA,EAC3BpN,QAAAA;AAAAA,EACAmB,YAAAA;AAAAA,EACAkM,iBAAAA;AAAAA,EACAC,oBAAAA;AAMF,GAAsB;AACpB,QAAMC,IAAYlL,GAA8B,IAAI,GAC9C,CAACuF,GAAW4F,CAAY,IAAIvL,EAAoB,WAAW,GAC3D,CAAC4F,GAAQ4F,CAAS,IAAIxL,EAAS,EAAK,GACpC,CAAC6F,GAAU4F,CAAW,IAAIzL,EAAS,EAAK,GACxC,CAAC8F,GAAa4F,CAAc,IAAI1L,EAAS,EAAK,GAC9C,CAAC+F,GAAQ4F,CAAS,IAAI3L,EAAS,EAAK,GACpC4L,IAA2BxL,GAAkC,MAAA;AAAA,GAAe,GAE5E4F,IAAgBA,CAAC6F,MAAgC;AACrD9N,IAAAA,EAAO+N,OAAO,MAAM;AAClB,YAAM9N,IAAYC,GAAAA;AAClB,UAAKC,EAAkBF,CAAS,GAEhC;AAAA,YAAI2H,MAAckG,GAAa;AAC7BE,UAAAA,GAAe/N,GAAWgO,EAAoB;AAC9C;AAAA,QACF;AAEAD,QAAAA,GAAe/N,GAAW,MAAMiO,GAAmBJ,CAAW,CAAC;AAAA;AAAA,IACjE,CAAC;AAAA,EACH,GAEM5F,IAAaA,CAAC0D,MAAwC;AAC1D,QAAIhE,MAAcgE,GAAM;AACtB5L,MAAAA,EAAOsI,gBAAgB6F,IAAqB9F,MAAS;AACrD;AAAA,IACF;AACA,UAAM+F,IAAU;AAAA,MACdpD,QAAQqD;AAAAA,MACR7C,QAAQ8C;AAAAA,MACRrD,OAAOsD;AAAAA,IAAAA,EACP3C,CAAI;AACN5L,IAAAA,EAAOsI,gBAAgB8F,GAAS/F,MAAS;AAAA,EAC3C,GAEMF,IAAkBA,MAAM;AAC5BnI,IAAAA,EAAO+N,OAAO,MAAM;AAClB,YAAM9N,IAAYC,GAAAA;AAClB,UAAKC,EAAkBF,CAAS,GAEhC;AAAA,YAAI2H,MAAc,QAAQ;AACxBoG,UAAAA,GAAe/N,GAAWgO,EAAoB;AAC9C;AAAA,QACF;AAEAD,QAAAA,GAAe/N,GAAW,MAAMuO,IAAiB;AAAA;AAAA,IACnD,CAAC;AAAA,EACH,GAEMpG,IAAaA,MAAM;AACvB,QAAIJ,GAAQ;AACVhI,MAAAA,EAAOsI,gBAAgBmG,IAAqB,IAAI;AAChD;AAAA,IACF;AACAzO,IAAAA,EAAOsI,gBAAgBoG,IAA+B,EAAI;AAAA,EAC5D,GAEMC,IAAgBA,MAAM;AAC1B,UAAM1O,IAAYC,GAAAA;AAClB,QAAI,CAACC,EAAkBF,CAAS,EAAG;AAEnCwN,IAAAA,EAAUxN,EAAU2O,UAAU,MAAM,CAAC,GACrClB,EAAYzN,EAAU2O,UAAU,QAAQ,CAAC,GACzCjB,EAAe1N,EAAU2O,UAAU,WAAW,CAAC;AAE/C,UAAMlO,IAAOqF,GAAgB9F,CAAS,GAChC4O,IAAapO,EAAoBC,GAAMoO,EAAW,GAClDC,IAAiBtO,EAAoBC,GAAMsO,EAAe;AAChEpB,IAAAA,EAAUiB,MAAe,QAAQE,MAAmB,IAAI;AAExD,UAAME,IAAgB/C,GAA2BjM,EAAUI,OAAOC,SAAS;AAC3E,IAAI2O,KACFzB,EAAayB,CAAa;AAAA,EAE9B;AAEApB,SAAAA,EAAyBnL,UAAU,MAAM;AACvC,UAAMzC,IAAYC,GAAAA,GACZgP,IAAa3B,EAAU7K,SACvByM,IAAkBxM,OAAOyM,aAAAA;AAE/B,QAAIF,MAAe;AACjB;AAGF,UAAMlM,IAAchD,EAAOiD,eAAAA,GACrB8J,IAAqBoC,MAAoB,MACzCnC,IAAiBD,KAAsBoC,EAAgBE,aAAa,GACpEpC,IAAuBqC,EAAQtM,GAAauM,SAASxC,IAAqBoC,EAAgB/O,aAAa,IAAI;AAEjH,QACEsM,GAA0B;AAAA,MACxBE,cAAc3M,MAAc;AAAA,MAC5B4M,kBAAkB1M,EAAkBF,CAAS;AAAA,MAC7C6M,aAAa3M,EAAkBF,CAAS,IAAIA,EAAU6M,gBAAgB;AAAA,MACtEC,oBAAAA;AAAAA,MACAC,gBAAAA;AAAAA,MACAC,sBAAAA;AAAAA,MACAC,kBAAkBlN,EAAOwP,WAAAA;AAAAA,IAAW,CACrC,KACDL,GACA;AACA,YAAMM,IAA+BN,EAAgBO,WAAW,CAAC,EAAErO,sBAAAA;AAEnE,UAAIoO,GAAS;AAEX,cAAME,IAAa,IAAIC,QAAQH,EAAQjO,MAAMiO,EAAQrI,QAAQ,GAAG,CAAC;AACjEd,QAAAA,GAAmBqJ,GAAYT,GAAY/N,GAAYgM,EAAG;AAAA,MAC5D;AAEAG,MAAAA,EAAmB,EAAI;AAAA,IACzB;AACE,MAAItK,MAAgB,QAClBsD,GAAmB,MAAM4I,GAAY/N,CAAU,GAEjDmM,EAAmB,EAAK;AAG1BqB,WAAAA,EAAAA,GAEO;AAAA,EACT,GAEA9L,EAAU,MAAM;AACd,UAAM+D,IAAezF,EAAW0F,eAE1BkH,IAASA,MAAM;AACnB/N,MAAAA,EAAOsD,iBAAiBC,KAAK,MAAM;AACjCsK,QAAAA,EAAyBnL,QAAAA;AAAAA,MAC3B,CAAC;AAAA,IACH;AAEAC,kBAAOc,iBAAiB,UAAUsK,CAAM,GAEpCnH,KACFA,EAAanD,iBAAiB,UAAUsK,CAAM,GAGzC,MAAM;AACXpL,aAAOe,oBAAoB,UAAUqK,CAAM,GACvCnH,KACFA,EAAalD,oBAAoB,UAAUqK,CAAM;AAAA,IAErD;AAAA,EACF,GAAG,CAAC5M,GAAYnB,CAAM,CAAC,GAEvB6C,EAAU,MACDgB,GACL7D,EAAO8D,uBAAuB,CAAC;AAAA,IAAEE,aAAAA;AAAAA,EAAAA,MAAkB;AACjDA,IAAAA,EAAYT,KAAK,MAAM;AACrBsK,MAAAA,EAAyBnL,QAAAA;AAAAA,IAC3B,CAAC;AAAA,EACH,CAAC,GACD1C,EAAOkE,gBACLC,IACC0L,CAAAA,OACChC,EAAyBnL,QAAAA,GAClB,KAET4B,EACF,GACAtE,EAAOkE,gBACL4L,IACCD,CAAAA,MAAa;AACZ,UAAM5P,IAAYC,GAAAA;AAClB,WAAIC,EAAkBF,CAAS,KAC7B4N,EAAyBnL,QAAAA,GAEpB;AAAA,EACT,GACAqN,EACF,CACF,GACC,CAAC/P,CAAM,CAAC,GAGT,gBAAAqF,EAAC,SAAI,KAAKkI,GAAW,WAAW,gCAAgCF,IAAkB,WAAW,EAAE,IAC7F,UAAA,gBAAAhI,EAACqC,MACC,QAAA1H,GACA,WAAA4H,GACA,QAAAC,GACA,UAAAC,GACA,aAAAC,GACA,QAAAC,GACA,eAAAC,GACA,YAAAC,GACA,iBAAAC,GACA,YAAAC,EAAA,CAAuB,EAAA,CAE3B;AAEJ;AAEO,SAAA4H,GAAArO,GAAA;AAAA,QAAAC,IAAAC,GAAA,CAAA,GAAyC;AAAA,IAAAV,YAAAmB;AAAAA,EAAAA,IAAAX,GAC9CR,IAAAmB,MAAA+F,SAAa4H,SAAQC,OAArB5N,GAIA,CAAAtC,CAAA,IAAiB8B,GAAAA,GACjB,CAAAuL,GAAAC,CAAA,IAA8CrL,EAAS,EAAK;AAAE,MAAAM;AAAA,EAAAX,EAAA,CAAA,MAAAT,KAAAS,SAAA5B,KAAA4B,EAAA,CAAA,MAAAyL,KAG5D9K,IAAA,gBAAA8C,EAAC+H,IAAA,EACSpN,QAAAA,GACImB,YAAAA,GACKkM,iBAAAA,GACGC,oBAAAA,GAAkB,GACtC1L,OAAAT,GAAAS,OAAA5B,GAAA4B,OAAAyL,GAAAzL,OAAAW,KAAAA,IAAAX,EAAA,CAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,CAAA,MAAAT,KAAAS,SAAAW,KANGO,IAAA+C,GACLtD,GAMApB,CACF,GAACS,OAAAT,GAAAS,OAAAW,GAAAX,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA,GARMkB;AAQN;AC7PI,SAAAqN,KAAA;AAAA,QAAAvO,IAAAC,GAAA,CAAA;AAAA,MAAAF;AAAA,SAAAC,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEHd,IAAA,gBAAA0D,EAAA,WACG,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAmCH,GAAQzD,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GApCRD;AAoCQ;ACRL,SAAAyO,GAAAzI,GAAA;AAAA,QAAA/F,IAAAC,GAAA,EAAA,GACL;AAAA,IAAAwO,QAAAA;AAAAA,IAAAC,OAAAA;AAAAA,IAAAC,UAAA5O;AAAAA,IAAA6O,UAAAlO;AAAAA,IAAAmO,WAAAlO;AAAAA,IAAAmO,aAAAA;AAAAA,EAAAA,IAAqG/I;AAAM,MAAA7E;AAAA,EAAAlB,SAAAD,KAApFmB,IAAAnB,MAAA0G,SAAA,CAAA,IAAA1G,GAAaC,OAAAD,GAAAC,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAb,QAAA2O,IAAAzN,GAAe0N,IAAAlO,MAAA+F,SAAA,cAAA/F,GAAwBmO,IAAAlO,MAAA8F,SAAA,YAAA9F,GAE9DoO,IAA2BtO,GAAuB,IAAI,GACtD,CAAAuO,GAAAC,CAAA,IAAkE5O,EAA6B,IAAI,GACnG,CAAA6O,GAAAC,CAAA,IAA4B9O,EAAS,EAAK,GAG1C,CAAA+O,CAAA,IAAc/O,EAASoC,EAAiB;AAAE,MAAAtB;AAAA,EAAAnB,EAAA,CAAA,MAAAoP,KAAApP,EAAA,CAAA,MAAAyO,KAAAzO,EAAA,CAAA,MAAA2O,KAAA3O,SAAA0O,KACdvN,IAAAA,MAAA;AAC1B,UAAAkO,IAAqB,IAAIC,GAAkBZ,GAAOD,GAAQW,GAAK;AAAA,MAAArE,QAAU4D;AAAAA,MAAQY,SAAW;AAAA,IAAA,CAAO;AAEnGF,WAAAA,EAAYG,GAAI,QAAQC,CAAAA,MAAA;AACtB,MAAIA,KAAUN,EAAU,EAAI;AAAA,IAAE,CAC/B,GAEME;AAAAA,EAAY,GACpBrP,OAAAoP,GAAApP,OAAAyO,GAAAzO,OAAA2O,GAAA3O,OAAA0O,GAAA1O,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AARD,QAAA,CAAA0P,CAAA,IAAmBrP,EAASc,CAQ3B;AAAE,MAAAY,GAAAC;AAAA,EAAAhC,SAAA0P,KAGO3N,IAAAA,OACR2N,EAAQH,QAAAA,GAED,MAAA;AACLG,IAAAA,EAAQC,WAAAA;AAAAA,EAAa,IAEtB3N,IAAA,CAAC0N,CAAQ,GAAC1P,OAAA0P,GAAA1P,OAAA+B,GAAA/B,OAAAgC,MAAAD,IAAA/B,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,IANbiB,EAAUc,GAMPC,CAAU;AAAC,MAAAG,GAAAS;AAAA,EAAA5C,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEJsB,IAAAA,MAAA;AACR8M,IAAAA,EAA6BF,EAAkBjO,OAAQ;AAAA,EAAC,GACvD8B,IAAA,CAAA,GAAE5C,QAAAmC,GAAAnC,QAAA4C,MAAAT,IAAAnC,EAAA,EAAA,GAAA4C,IAAA5C,EAAA,EAAA,IAFLiB,EAAUkB,GAEPS,CAAE;AAAC,MAAAE;AAAA,EAAA9C,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAEgBiC,IAAA;AAAA,IAAA8M,WACT;AAAA,IAAsBC,OAC1BC;AAAAA,IAAW1N,aACL;AAAA,IAAI2N,SACRC;AAAAA,IAAsCC,UACrC;AAAA,IAAIC,OACPC;AAAAA,EAAAA,GACRnQ,QAAA8C,KAAAA,IAAA9C,EAAA,EAAA;AAPD,QAAAoQ,IAAsBtN;AAOpB,MAAAC;AAAA,EAAA/C,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAcEkC,sBAACwL,IAAA,EAAmB,GAAGvO,QAAA+C,KAAAA,IAAA/C,EAAA,EAAA;AAOP,QAAAgD,IAAA0M;AAA+B,MAAAnM;AAAA,EAAAvD,EAAA,EAAA,MAAAoP,KAAApP,EAAA,EAAA,MAAAyO,KAAAzO,EAAA,EAAA,MAAAgD,KAAAhD,EAAA,EAAA,MAAA6O,KAAA7O,UAAA4O,KAH3CrL,IAAA,gBAAAE,EAAC4M,IAAA,EACK5B,IAAAA,GACCW,KAAAA,GACK,UAAApM,GACe,yBAAA,IACf4L,UAAAA,GACGC,aAAAA,GAAS,GACtB7O,QAAAoP,GAAApP,QAAAyO,GAAAzO,QAAAgD,GAAAhD,QAAA6O,GAAA7O,QAAA4O,GAAA5O,QAAAuD,KAAAA,IAAAvD,EAAA,EAAA;AAAA,MAAA2D,GAAAE,GAAAE,GAAAC,GAAA8C,GAAAC;AAAA,EAAA/G,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KACF8C,sBAAC2M,IAAA,EAAU,GACXzM,sBAAC0M,IAAA,EAAU,GACXxM,sBAACyM,IAAA,EAAgC,cAAC,GAClCxM,sBAACyM,IAAA,EAAoB,GACrB3J,sBAAC4J,IAAA,EAAsB,GACvB3J,sBAAC4J,IAAA,EAAsB,GAAG3Q,QAAA2D,GAAA3D,QAAA6D,GAAA7D,QAAA+D,GAAA/D,QAAAgE,GAAAhE,QAAA8G,GAAA9G,QAAA+G,MAAApD,IAAA3D,EAAA,EAAA,GAAA6D,IAAA7D,EAAA,EAAA,GAAA+D,IAAA/D,EAAA,EAAA,GAAAgE,IAAAhE,EAAA,EAAA,GAAA8G,IAAA9G,EAAA,EAAA,GAAA+G,IAAA/G,EAAA,EAAA;AAAA,MAAAgH;AAAA,EAAAhH,UAAAgP,KAC1BhI,sBAAClH,IAAA,EAAmCkP,YAAAA,EAAAA,CAAyB,GAAIhP,QAAAgP,GAAAhP,QAAAgH,KAAAA,IAAAhH,EAAA,EAAA;AAAA,MAAAiH;AAAA,EAAAjH,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KACjEoG,sBAAC2J,IAAA,EAAc,GAAG5Q,QAAAiH,KAAAA,IAAAjH,EAAA,EAAA;AAAA,MAAAkH;AAAA,EAAAlH,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAECqG,sBAAC2J,IAAA,EAA2B,WAAA,GAAA,CAAK,GAAI7Q,QAAAkH,KAAAA,IAAAlH,EAAA,EAAA;AAAA,MAAAmH;AAAA,EAAAnH,EAAA,EAAA,MAAA8O,KAAA9O,UAAAkP,KAEpD/H,IAAA+H,KAAAJ,IACE,gBAAArL,EAACqN,IAAA,EACU,UAAA,YACL,KAAA,KACE,OAAA,YACQ,eAAA,QACH,YAAA,QACD,WAAA,uBAEThC,aACH,IAVF,MAWQ9O,QAAA8O,GAAA9O,QAAAkP,GAAAlP,QAAAmH,KAAAA,IAAAnH,EAAA,EAAA;AAAA,MAAAoH;AAAA,EAAApH,UAAAmH,KAdZC,sBAAC2J,IAAA,EACkB,iBAAA7J,GAEf,aAAAC,GAaa6J,eAAAA,IAAoB,GACnChR,QAAAmH,GAAAnH,QAAAoH,KAAAA,IAAApH,EAAA,EAAA;AAAA,MAAAqH;AAAA,EAAArH,UAAAgP,KACD3H,IAAA2H,IACC,gBAAAvL,EAAC2K,IAAA,EAA4CY,YAAAA,GAAyB,IADvE,MAEOhP,QAAAgP,GAAAhP,QAAAqH,KAAAA,IAAArH,EAAA,EAAA;AAAA,MAAAsH;AAAA,SAAAtH,EAAA,EAAA,MAAAuD,KAAAvD,EAAA,EAAA,MAAAgH,KAAAhH,EAAA,EAAA,MAAAoH,KAAApH,UAAAqH,KAnDdC,uBAAC2J,IAAA,EACMlC,KAAAA,GACK,WAAA,aACK,gBAAA,iBACT,OAAA,QACG,UAAA,QACF,QAAA,QACE,UAAA,YACC,WAAA,UACD,UAAA,WAEThM,UAAAA;AAAAA,IAAAA;AAAAA,IAEA,gBAAAU,EAACyN,IAAA,EAA+Bd,eAAAA,GAC9B,UAAA,gBAAAe,GAACC,IAAA,EACC7N,UAAAA;AAAAA,MAAAA;AAAAA,MAQAI;AAAAA,MACAE;AAAAA,MACAE;AAAAA,MACAC;AAAAA,MACA8C;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACAG;AAAAA,MAkBCC;AAAAA,IAAAA,EAAAA,CAGH,EAAA,CACF;AAAA,EAAA,GACF,GAAOrH,QAAAuD,GAAAvD,QAAAgH,GAAAhH,QAAAoH,GAAApH,QAAAqH,GAAArH,QAAAsH,KAAAA,IAAAtH,EAAA,EAAA,GAtDPsH;AAsDO;AAhGJ,SAAA0I,GAAAqB,GAAA;AAAA,SAoCwBC,QAAOD,MAAOA,CAAK;AAAC;AApC5C,SAAA5O,KAAA;AAAA,SAQwB,IAAI8O,GAACC,IAAAA;AAAM;ACrBnC,SAAAC,GAAA1L,GAAA;AAAA,QAAA/F,IAAAC,GAAA,EAAA,GACL;AAAA,IAAAyR,UAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,sBAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,QAAAA;AAAAA,IAAAC,UAAAA;AAAAA,EAAAA,IAcIvM;AAEJ,MAAI,CAAC2L;AAAQ,WACJ;AAGT,MAAIC,GAAc;AAWI,UAAA5R,KAAC8R;AAAoB,QAAAnR;AAAA,IAAAV,SAAAiS,KACzBvR,IAAAa,CAAAA,MAAA;AACR0Q,MAAAA,EAAsB1Q,EAAKnC,OAAOmT,KAAM;AAAA,IAAC,GAC1CvS,OAAAiS,GAAAjS,OAAAU,KAAAA,IAAAV,EAAA,CAAA;AAAA,QAAAW;AAAA,IAAAX,EAAA,CAAA,MAAA4R,KAAA5R,EAAA,CAAA,MAAAgS,KAAAhS,EAAA,CAAA,MAAAkS,KAAAlS,EAAA,CAAA,MAAAD,KAAAC,SAAAU,KAXHC,sBAAC6R,IAAA,EACMR,KAAAA,GACK,WAAA,yBACL,MAAA,MACI,UAAA,MACFJ,OAAAA,GACK,aAAA,YACD,cAAA,YACG,gBAAA7R,GACJ,UAAAW,GAGCwR,WAAAA,EAAAA,CAAc,GACzBlS,OAAA4R,GAAA5R,OAAAgS,GAAAhS,OAAAkS,GAAAlS,OAAAD,GAAAC,OAAAU,GAAAV,OAAAW,KAAAA,IAAAX,EAAA,CAAA;AAAA,QAAAkB;AAAA,IAAAlB,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KASEK,sBAACuR,IAAA,EAAQ,MAAA,GAAA,CAAE,GAAIzS,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,QAAAmB;AAAA,IAAAnB,SAAAmS,KARnBhR,sBAAC2C,GAAA,EAAgB,SAAA,UACf,UAAA,gBAAAL,EAACG,KACS,SAAA,SACH,MAAA,MACM,cAAA,oBACE8O,aAAAA,IACJP,SAAAA,GAETjR,UAAAA,GACF,GACF,GAAUlB,OAAAmS,GAAAnS,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAMI,UAAA+B,KAAC8P;AAAoB,QAAA7P;AAAA,IAAAhC,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAI/BmB,sBAACwB,IAAA,EAAY,MAAA,GAAA,CAAE,GAAIxD,QAAAgC,KAAAA,IAAAhC,EAAA,EAAA;AAAA,QAAAmC;AAAA,IAAAnC,EAAA,EAAA,MAAAoS,KAAApS,UAAA+B,KATvBI,sBAAC2B,GAAA,EAAgB,SAAA,WACf,UAAA,gBAAAL,EAACG,GAAA,EACS,SAAA,SACH,MAAA,MACM,cAAA,qBACD,UAAA7B,GACG2Q,aAAAA,IACJN,YAETpQ,aACF,EAAA,CACF,GAAUhC,QAAAoS,GAAApS,QAAA+B,GAAA/B,QAAAmC,KAAAA,IAAAnC,EAAA,EAAA;AAAA,QAAA4C;AAAA,WAAA5C,EAAA,EAAA,MAAAW,KAAAX,UAAAmB,KAAAnB,EAAA,EAAA,MAAAmC,KArCZS,IAAA,gBAAAuO,GAACjI,IAAA,EAAgB,WAAA,uBAAgC,WAAA,OAAU,KAAA,KAAe,YAAA,UAAW,GAAA,KACnFvI,UAAAA;AAAAA,MAAAA;AAAAA,MAcAQ;AAAAA,MAWAgB;AAAAA,IAAAA,GAYF,GAAQnC,QAAAW,GAAAX,QAAAmB,GAAAnB,QAAAmC,GAAAnC,QAAA4C,KAAAA,IAAA5C,EAAA,EAAA,GAtCR4C;AAAAA,EAsCQ;AAEX,MAAA7C;AAAA,EAAAC,EAAA,EAAA,MAAA+R,KAAA/R,UAAA8R,KAIG/R,sBAAC4S,IAAA,EACOZ,MAAAA,GACC,QAAA,UACH,KAAA,uBACM,WAAA,yBACD,UAAA,MACM,gBAAA,aACZ,IAAA,KACH,2BAGF,GAAa/R,QAAA+R,GAAA/R,QAAA8R,GAAA9R,QAAAD,KAAAA,IAAAC,EAAA,EAAA;AAAA,MAAAU;AAAA,EAAAV,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAGTH,sBAACkS,IAAA,EAAa,MAAA,GAAA,CAAE,GAAI5S,QAAAU,KAAAA,IAAAV,EAAA,EAAA;AAAA,MAAAW;AAAA,EAAAX,UAAAqS,KAFxB1R,sBAACmD,GAAA,EAAgB,SAAA,aACf,UAAA,gBAAAL,EAACG,KAAmB,SAAA,SAAa,MAAA,MAAgB,cAAA,aAAyB8O,aAAAA,IAA2BL,SAAAA,GACnG3R,aACF,GACF,GAAUV,QAAAqS,GAAArS,QAAAW,KAAAA,IAAAX,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KASNK,sBAAC2R,IAAA,EAAa,MAAA,GAAA,CAAE,GAAI7S,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAAsS,KARxBnR,sBAAC2C,GAAA,EAAgB,SAAA,eACf,UAAA,gBAAAL,EAACG,KACS,SAAA,SACH,MAAA,MACM,cAAA,eACE8O,aAAAA,IACJJ,SAAAA,GAETpR,aACF,GACF,GAAUlB,QAAAsS,GAAAtS,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAA+B;AAAA,SAAA/B,EAAA,EAAA,MAAAD,KAAAC,UAAAW,KAAAX,EAAA,EAAA,MAAAmB,KA5BZY,IAAA,gBAAAoP,GAACjI,IAAA,EAAgB,WAAA,uBAAgC,WAAA,OAAU,KAAA,KAAe,YAAA,UAAW,GAAA,KACnFnJ,UAAAA;AAAAA,IAAAA;AAAAA,IAYAY;AAAAA,IAKAQ;AAAAA,EAAAA,GAWF,GAAQnB,QAAAD,GAAAC,QAAAW,GAAAX,QAAAmB,GAAAnB,QAAA+B,KAAAA,IAAA/B,EAAA,EAAA,GA7BR+B;AA6BQ;AAIZ,SAAS2Q,GAAiBnR,GAAyB;AACjDA,EAAAA,EAAMuR,eAAAA;AACR;AC1HO,SAASC,GAAqBpB,GAAyBvL,GAAiB0L,GAAiB;AAC9F,SAAOH,KAAkBvL,KAAU0L,MAAY;AACjD;ACGO,SAASkB,GAAoB3U,GAA2B;AAC7D,QAAMS,IAAOqF,GAAgB9F,CAAS,GAChC4O,IAAapO,EAAoBC,GAAMoO,EAAW;AAExD,SAAID,IACKA,EAAWgG,OAAAA,IAEhB/F,GAAYpO,CAAI,IACXA,EAAKmU,OAAAA,IAEP;AACT;AChBA,MAAMC,yBAA8BC,IAAI,CAAC,SAAS,UAAU,WAAW,QAAQ,MAAM,CAAC;AAE/E,SAASC,GAAYC,GAAqB;AAC/C,MAAI;AACF,UAAMC,IAAY,IAAIC,IAAIF,CAAG;AAC7B,QAAI,CAACH,GAAwBM,IAAIF,EAAUG,QAAQ;AACjD,aAAO;AAAA,EAEX,QAAQ;AACN,WAAOJ;AAAAA,EACT;AACA,SAAOA;AACT;AAEO,SAASK,GAAYL,GAAsB;AAChD,MAAI;AACF,UAAMC,IAAY,IAAIC,IAAIF,CAAG;AAC7B,WAAKH,GAAwBM,IAAIF,EAAUG,QAAQ,IAG/CH,EAAUG,aAAa,WAAWH,EAAUG,aAAa,WACpDH,EAAUK,aAAa,KAEzBL,EAAUM,SAASC,KAAAA,MAAW,KAL5B;AAAA,EAMX,QAAQ;AACN,WAAO;AAAA,EACT;AACF;ACIA,MAAMtI,KAAM;AAEZ,SAASuI,GAAW;AAAA,EAClB1V,QAAAA;AAAAA,EACAgI,QAAAA;AAAAA,EACA4F,WAAAA;AAAAA,EACAzM,YAAAA;AAAAA,EACAoS,gBAAAA;AAAAA,EACAoC,mBAAAA;AAQF,GAAsB;AACpB,QAAMpI,IAAYlL,GAA8B,IAAI,GAC9CuR,IAAWvR,GAAyB,IAAI,GACxCuT,IAAsBvT,GAAmB,MAAA;AAAA,GAAe,GACxD,CAACqR,GAASmC,CAAU,IAAI5T,EAAS,EAAE,GACnC,CAACuR,GAAesC,CAAgB,IAAI7T,EAAS,UAAU,GACvD,CAAC8T,GAAeC,CAAgB,IAAI/T,EAA+B,IAAI,GACvEqR,IAAWtL,KAAUuL,GACrBE,IAAuB6B,GAAY9B,CAAa;AAEtDoC,EAAAA,EAAoBlT,UAAU,MAAM;AAClC,UAAMzC,IAAYC,GAAAA;AAClB,QAAIC,EAAkBF,CAAS,GAAG;AAChC,YAAMgW,IAAcrB,GAAoB3U,CAAS;AACjD4V,MAAAA,EAAWI,CAAW,GAClBtB,GAAqBpB,GAAgBvL,GAAQiO,CAAW,KAC1DC,EAAAA,GAEE3C,KAAkB0C,MAAgB,MACpCH,EAAiBG,CAAW;AAAA,IAEhC;AACA,UAAM/G,IAAa3B,EAAU7K,SACvByM,IAAkBxM,OAAOyM,aAAAA,GACzB+G,IAAgBlG,SAASkG;AAE/B,QAAIjH,MAAe;AACjB;AAGF,UAAMlM,IAAchD,EAAOiD,eAAAA,GACrB+J,IAAiBmC,MAAoB,QAAQA,EAAgBE,aAAa;AAEhF,QACEpP,MAAc,QACdkP,MAAoB,QACpBnC,KACAhK,GAAauM,SAASJ,EAAgB/O,UAAU,KAChDJ,EAAOwP,WAAAA,GACP;AACA,YAAM4G,IAAYjH,EAAgBO,WAAW,CAAC,EAAErO,sBAAAA,GAC1CgV,IAAU,IAAIzG,QAAQwG,EAAU5U,MAAM4U,EAAU7U,KAAK,GAAG6U,EAAUjP,MAAM;AAC9Eb,MAAAA,GAAmB+P,GAASnH,GAAY/N,GAAYgM,IAAK9E,QAAW,OAAO,GAC3E2N,EAAiB/V,CAAS;AAAA,IAC5B,MAAA,CAAYiP,EAAWK,SAAS4G,CAAa,MACvCnT,MAAgB,QAClBsD,GAAmB,MAAM4I,GAAY/N,CAAU,GAEjD6U,EAAiB,IAAI,GACrBL,EAAkB,EAAK,GACvBE,EAAW,EAAE;AAAA,EAEjB,GAEAhT,EAAU,MAAM;AACd,UAAM+D,IAAezF,EAAW0F,eAE1BkH,IAASA,MAAM;AACnB/N,MAAAA,EAAOsD,iBAAiBC,KAAK,MAAM;AACjCqS,QAAAA,EAAoBlT,QAAAA;AAAAA,MACtB,CAAC;AAAA,IACH;AAEAC,kBAAOc,iBAAiB,UAAUsK,CAAM,GAEpCnH,KACFA,EAAanD,iBAAiB,UAAUsK,CAAM,GAGzC,MAAM;AACXpL,aAAOe,oBAAoB,UAAUqK,CAAM,GAEvCnH,KACFA,EAAalD,oBAAoB,UAAUqK,CAAM;AAAA,IAErD;AAAA,EACF,GAAG,CAAC5M,EAAW0F,eAAe7G,CAAM,CAAC,GAErC6C,EAAU,MACDgB,GACL7D,EAAO8D,uBAAuB,CAAC;AAAA,IAAEE,aAAAA;AAAAA,EAAAA,MAAkB;AACjDA,IAAAA,EAAYT,KAAK,MAAM;AACrBqS,MAAAA,EAAoBlT,QAAAA;AAAAA,IACtB,CAAC;AAAA,EACH,CAAC,GAED1C,EAAOkE,gBACLC,IACA,OACEyR,EAAoBlT,QAAAA,GACb,KAET4T,EACF,GACAtW,EAAOkE,gBACLqS,IACA,MACMvO,KACF4F,EAAU,EAAK,GACR,MAEF,IAETmC,EACF,CACF,GACC,CAAC/P,GAAQ4N,GAAW5F,CAAM,CAAC,GAE9BnF,EAAU,MAAM;AACd7C,IAAAA,EAAOsD,iBAAiBC,KAAK,MAAM;AACjCqS,MAAAA,EAAoBlT,QAAAA;AAAAA,IACtB,CAAC;AAAA,EACH,GAAG,CAAC1C,CAAM,CAAC,GAEXwW,GAAgB,MAAM;AACpB,IAAKlD,KAILtT,EAAOsD,iBAAiBC,KAAK,MAAM;AACjCqS,MAAAA,EAAoBlT,QAAAA;AAAAA,IACtB,CAAC;AAAA,EACH,GAAG,CAAC1C,GAAQsT,CAAQ,CAAC,GAErBzQ,EAAU,MAAM;AACd,IAAI0Q,KAAkBK,EAASlR,WAC7BkR,EAASlR,QAAQsD,MAAAA;AAAAA,EAErB,GAAG,CAACuN,CAAc,CAAC;AAEnB,QAAMkD,IAA0BA,CAACtT,MAAiD;AAChF,IAAIA,EAAMuT,QAAQ,WAChBvT,EAAMuR,eAAAA,GACNiC,EAAAA,KACSxT,EAAMuT,QAAQ,aACvBvT,EAAMuR,eAAAA,GACNwB,EAAAA;AAAAA,EAEJ,GAEMA,IAAkBA,MAAM;AAC5BJ,IAAAA,EAAiB,UAAU,GAC3BH,EAAkB,EAAK;AAAA,EACzB,GAEMgB,IAAuBA,MAAM;AACjC,IAAIZ,MAAkB,QAAQ,CAACtC,MAI/BzT,EAAO+N,OAAO,MAAM;AAClB6I,MAAAA,GAAcb,CAAa;AAAA,IAC7B,CAAC,GACD/V,EAAOsI,gBAAgBmG,IAAqBuG,GAAYxB,CAAa,CAAC,GACtExT,EAAO+N,OAAO,MAAM;AAClB,YAAM9N,IAAYC,GAAAA;AAClB,UAAIC,EAAkBF,CAAS,GAAG;AAChC,cAAM6L,IAAS/F,GAAgB9F,CAAS,EAAE8L,UAAAA;AAC1C,YAAIiD,GAAgBlD,CAAM,GAAG;AAC3B,gBAAM+K,IAAWC,GAAgBhL,EAAO+I,OAAAA,GAAU;AAAA,YAChDkC,KAAKjL,EAAOkL;AAAAA,YACZhW,QAAQ8K,EAAOmL;AAAAA,YACfC,OAAOpL,EAAOqL;AAAAA,UAAAA,CACf;AACDrL,UAAAA,EAAOsL,QAAQP,GAAU,EAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC,GACDX,EAAAA;AAAAA,EACF;AAEA,SACE,gBAAA7Q,EAACqN,IAAA,EAAI,KAAKnF,GAAW,WAAW,eAAe+F,IAAW,WAAW,EAAE,IACrE,UAAA,gBAAAjO,EAACgO,IAAA,EACC,UAAAC,GACA,gBAAAC,GACA,eAAAC,GACA,sBAAAC,GACA,SAAAC,GACA,MAAMsB,GAAYtB,CAAO,GACzB,UAAAE,GACA,uBAAuBkC,GACvB,gBAAgBW,GAChB,SAASP,GACT,UAAUS,GACV,QAAQ,MAAM;AACZb,IAAAA,EAAiBpC,CAAO,GACxBiC,EAAkB,EAAI;AAAA,EACxB,GACA,UAAU,MAAM;AACd3V,IAAAA,EAAOsI,gBAAgBmG,IAAqB,IAAI;AAAA,EAClD,GAAE,EAAA,CAEN;AAEJ;AAEA,SAAA4I,GAAArX,GAAAmB,GAAAoS,GAAAoC,GAAA;AAAA,QAAA/T,IAAAC,GAAA,EAAA,GAME,CAAAyV,GAAAC,CAAA,IAAwCtV,EAASjC,CAAM,GACvD,CAAAgI,GAAA4F,CAAA,IAA4B3L,EAAS,EAAK;AAAE,MAAAN,GAAAW;AAAA,EAAAV,EAAA,CAAA,MAAA5B,KAAA4B,SAAA+T,KAElChU,IAAAA,MAAA;AACR,UAAA6V,eAAA;AACE,YAAAvX,IAAkBC,GAAAA;AAClB,UAAIC,EAAkBF,CAAS,GAAC;AAC9B,cAAAgG,IAAkBF,GAAgB9F,CAAS,GAC3CwX,IAAsBhX,EAAoBwF,GAAW6I,EAAW,GAChE4I,IAA0BjX,EAAoBwF,GAAW+I,EAAe;AACxE,YAAI,EAAEyI,KAAAC,IAAmC;AACvC9J,UAAAA,EAAU,EAAK;AAAC;AAAA,QAAA;AAGlB,cAAA+J,IAAgB1X,EAAS2X,SAAAA,EACZC,OACHxT,EAAiC,EAACyT,KACpCC,CAAAA,MAAA;AACJ,gBAAAlB,IAAiBpW,EAAoBC,GAAMoO,EAAW,GACtDkJ,IAAqBvX,EAAoBC,GAAMsO,EAAe,GAC9DiJ,IAA2BjJ,GAAgBgJ,CAA4C,KAA3BA,EAAYE,cAAAA;AAAiB,iBAEtFT,KAAA,CAAkBA,EAAaU,GAAItB,CAAQ,KAC3CA,KAAA,CAAaA,EAAQsB,GAAIV,CAAa,KACtCC,KAAA,CAAsBA,EAAiBS,GAAIH,CAAY,KACvDA,MAAiB,CAACA,EAAYG,GAAIT,CAAiB,KAAlCO;AAAAA,QAA2D,CAEhF;AACH,QAGErK,EAHG+J,CAAAA,CAGY;AAAA,MAChB;AAAA,IACF;AACF,WACM9T,GACL7D,EAAM8D,uBAAwBvB,CAAAA,MAAA;AAAC,YAAA;AAAA,QAAAyB,aAAAA;AAAAA,MAAAA,IAAAzB;AAC7ByB,MAAAA,EAAWT,KAAM,MAAA;AACfiU,QAAAA,EAAAA;AAAAA,MAAgB,CACjB;AAAA,IAAC,CACH,GACDxX,EAAMkE,gBACJC,IACA,CAAA0L,GAAAuI,OACEZ,EAAAA,GACAD,EAAgBa,CAAS,GAClB,KAET9T,EACF,GACAtE,EAAMkE,gBACJ4L,IACA8B,IAYA0E,EACF,GACAtW,EAAMkE,gBACJwK,IACA2J,CAAAA,OACE1C,EAAkB2C,CAAO,GAClB,KAEThC,EACF,CACF;AAAA,EAAC,GACAhU,IAAA,CAACtC,GAAQ2V,CAAiB,GAAC/T,OAAA5B,GAAA4B,OAAA+T,GAAA/T,OAAAD,GAAAC,OAAAU,MAAAX,IAAAC,EAAA,CAAA,GAAAU,IAAAV,EAAA,CAAA,IAxE9BiB,EAAUlB,GAwEPW,CAA2B;AAAC,MAAAC;AAAA,EAAAX,EAAA,CAAA,MAAA0V,KAAA1V,EAAA,CAAA,MAAAT,KAAAS,EAAA,CAAA,MAAAoG,KAAApG,EAAA,CAAA,MAAA2R,KAAA3R,SAAA+T,KAG7BpT,IAAA,gBAAA8C,EAACqQ,MACS4B,QAAAA,GACAtP,QAAAA,GACI7G,YAAAA,GACDyM,WAAAA,GACK2F,gBAAAA,GACGoC,mBAAAA,EAAAA,CAAiB,GACpC/T,OAAA0V,GAAA1V,OAAAT,GAAAS,OAAAoG,GAAApG,OAAA2R,GAAA3R,OAAA+T,GAAA/T,OAAAW,KAAAA,IAAAX,EAAA,CAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,EAAA,MAAAT,KAAAS,UAAAW,KARGO,IAAA+C,GACLtD,GAQApB,CACF,GAACS,QAAAT,GAAAS,QAAAW,GAAAX,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GAVMkB;AAUN;AA7FH,SAAA8O,GAAA0G,GAAA;AA2DU,QAAAC,IAAkBrY,GAAAA;AAClB,MAAIC,EAAkBF,CAAS,GAAC;AAC9B,UAAAuY,IAAazS,GAAgB9F,CAAS,GACtCwY,IAAiBhY,EAAoBC,GAAMoO,EAAW;AACtD,QAAIA,GAAY+H,CAAgD,MAAlCyB,EAAOI,WAAYJ,EAAOK;AACtDhW,oBAAMiW,KAAM5D,GAAY6B,EAAQhC,QAAS,GAAG,UAAU,qBAAqB,GACpE;AAAA,EACR;AACF,SACM;AAAK;AApEtB,SAAAxQ,GAAA3D,GAAA;AAAA,SAsB4B,CAACmY,GAAiBnY,CAAI;AAAC;AA0EnD,SAAeoY,GAAAnX,GAAA;AAA0B,QAAA;AAAA,IAAAR,YAAAmB;AAAAA,EAAAA,IAAAX,GAAER,IAAAmB,MAAA+F,SAAa4H,SAAQC,OAArB5N,GACzC,CAAAiR,GAAAoC,CAAA,IAA4C1T,EAAS,EAAK,GAC1D,CAAAjC,CAAA,IAAiB8B,GAAAA;AAA4B,SACtCuV,GAAqBrX,GAAQmB,GAAYoS,GAAgBoC,CAAiB;AAAC;ACpVpF,SAAezD,KAAA;AAAA,QAAAtQ,IAAAC,GAAA,CAAA;AAAA,MAAAF;AAAA,SAAAC,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KACNd,sBAACoX,MAA+BzD,aAAAA,GAAAA,CAAW,GAAI1T,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GAA/CD;AAA+C;ACkCjD,SAAAqX,GAAArR,GAAA;AAAA,QAAA/F,IAAAC,GAAA,EAAA,GACL;AAAA,IAAAoX,WAAAtX;AAAAA,IAAAuX,OAAA5W;AAAAA,IAAA6W,cAAA5W;AAAAA,IAAAiN,YAAA1M;AAAAA,IAAA4N,aAAAA;AAAAA,IAAA0I,YAAArW;AAAAA,IAAAsW,UAAAA;AAAAA,EAAAA,IAQI1R,GAPFsR,IAAAtX,MAAA0G,SAAA,KAAA1G,GACAuX,IAAA5W,MAAA+F,SAAA,KAAA/F,GACA6W,IAAA5W,MAAA8F,SAAA,KAAA9F,GACAiN,IAAA1M,MAAAuF,SAAA,KAAAvF,GAEAsW,IAAArW,MAAAsF,SAAA,KAAAtF;AAAiB,MAAAY;AAAA,EAAA/B,SAAAuX,KAGWxV,IAAA2V,GAAiBH,CAAY,GAACvX,OAAAuX,GAAAvX,OAAA+B,KAAAA,IAAA/B,EAAA,CAAA;AAA5D,QAAA;AAAA,IAAA2X,aAAAA;AAAAA,IAAArJ,MAAAA;AAAAA,EAAAA,IAA8BvM,GAC9B6V,IAA2BhK,KAAcF,EAAQ+J,GACjD1I,IAA2BtO,GAAuB,IAAI,GACtD,CAAAuO,GAAAC,CAAA,IAAkE5O,EAA6B,IAAI;AAAE,MAAA2B,GAAAG;AAAA,EAAAnC,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAE3FmB,IAAAA,MAAA;AACRiN,IAAAA,EAA6BF,EAAkBjO,OAAQ;AAAA,EAAC,GACvDqB,IAAA,CAAA,GAAEnC,OAAAgC,GAAAhC,OAAAmC,MAAAH,IAAAhC,EAAA,CAAA,GAAAmC,IAAAnC,EAAA,CAAA,IAFLiB,EAAUe,GAEPG,CAAE;AAAC,MAAAS;AAAA,EAAA5C,SAAAsO,KAKS1L,IAAAA,MACJiV,GAA2BC,GAAiCxJ,CAAI,GAAGyJ,IAAoBtR,QAAW,EAAK,GAC/GzG,OAAAsO,GAAAtO,OAAA4C,KAAAA,IAAA5C,EAAA,CAAA;AAAA,MAAA8C;AAAA,EAAA9C,EAAA,CAAA,MAAA4N,KAAA5N,SAAA4C,KALmBE,IAAA;AAAA,IAAA8M,WACT;AAAA,IAAiBC,OACrBC;AAAAA,IAAW1N,aACLQ;AAAAA,IAEZmN,SACQtN;AAAAA,IAAsCwN,UACrCrC;AAAAA,IAAUsC,OACbC;AAAAA,EAAAA,GACRnQ,OAAA4N,GAAA5N,OAAA4C,GAAA5C,OAAA8C,KAAAA,IAAA9C,EAAA,CAAA;AATD,QAAAoQ,IAAsBtN,GAkBVC,IAAAyU,IAAA,SAAA;AAA4B,MAAAxU;AAAA,EAAAhD,SAAAqX,KAMjCrU,IAAAqU,IAAY,gBAAA5T,EAACuU,IAAA,CAAA,CAAe,IAA5B,MAAsChY,OAAAqX,GAAArX,QAAAgD,KAAAA,IAAAhD,EAAA,EAAA;AAAA,MAAAuD,GAAAI,GAAAE;AAAA,EAAA7D,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KACvC0C,sBAAC0U,IAAA,EAAa,GACdtU,sBAAC2M,IAAA,EAAU,GACXzM,sBAAC0M,IAAA,EAAU,GAAGvQ,QAAAuD,GAAAvD,QAAA2D,GAAA3D,QAAA6D,MAAAN,IAAAvD,EAAA,EAAA,GAAA2D,IAAA3D,EAAA,EAAA,GAAA6D,IAAA7D,EAAA,EAAA;AAAA,MAAA+D;AAAA,EAAA/D,UAAA4N,KACb7J,IAAA6J,IAAa,gBAAAnK,EAAC+M,IAAA,EAAgC,WAAA,GAAC,IAA/C,MAA0DxQ,QAAA4N,GAAA5N,QAAA+D,KAAAA,IAAA/D,EAAA,EAAA;AAAA,MAAAgE,GAAA8C,GAAAC,GAAAC;AAAA,EAAAhH,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAC3DmD,sBAACkU,IAAA,EAAe,GAChBpR,sBAAC2J,IAAA,EAAoB,GACrB1J,sBAAC2J,IAAA,EAAsB,GACvB1J,sBAAC2J,IAAA,EAAsB,GAAG3Q,QAAAgE,GAAAhE,QAAA8G,GAAA9G,QAAA+G,GAAA/G,QAAAgH,MAAAhD,IAAAhE,EAAA,EAAA,GAAA8G,IAAA9G,EAAA,EAAA,GAAA+G,IAAA/G,EAAA,EAAA,GAAAgH,IAAAhH,EAAA,EAAA;AAAA,MAAAiH;AAAA,EAAAjH,UAAAgP,KAC1B/H,sBAACnH,IAAA,EAAmCkP,YAAAA,EAAAA,CAAyB,GAAIhP,QAAAgP,GAAAhP,QAAAiH,KAAAA,IAAAjH,EAAA,EAAA;AAAA,MAAAkH;AAAA,EAAAlH,EAAA,EAAA,MAAAY,uBAAAC,IAAA,2BAAA,KACjEqG,sBAAC0J,IAAA,EAAc,GAAG5Q,QAAAkH,KAAAA,IAAAlH,EAAA,EAAA;AAAA,MAAAmH;AAAA,EAAAnH,UAAAwX,KAECrQ,sBAAC0J,IAAA,EAA2B,eAAe,SAAA,MAAiB2G,YAAAA,GAAU,GAAIxX,QAAAwX,GAAAxX,QAAAmH,KAAAA,IAAAnH,EAAA,EAAA;AAAA,MAAAoH;AAAA,EAAApH,UAAA8O,KAEzF1H,IAAA0H,IACE,gBAAArL,EAACwN,IAAA,EACU,UAAA,YACD,SAAA,MACJ,KAAA,KACC,MAAA,KACC,OAAA,KACQ,eAAA,QACH,YAAA,QACI,gBAAA,UAEf,UAAA,gBAAAxN,EAACqN,IAAA,EAAU,OAAA,QAAgB,UAAA,SAAc,OAAA,YAAqB,WAAA,uBAC3DhC,UAAAA,EAAAA,CACH,GACF,IAdF,MAeQ9O,QAAA8O,GAAA9O,QAAAoH,KAAAA,IAAApH,EAAA,EAAA;AAAA,MAAAqH;AAAA,EAAArH,EAAA,EAAA,MAAAmH,KAAAnH,UAAAoH,KAlBZC,sBAAC0J,IAAA,EACkB,iBAAA5J,GAEf,aAAAC,GAiBa4J,eAAAA,IAAoB,GACnChR,QAAAmH,GAAAnH,QAAAoH,GAAApH,QAAAqH,KAAAA,IAAArH,EAAA,EAAA;AAAA,MAAAsH;AAAA,EAAAtH,EAAA,EAAA,MAAAgP,KAAAhP,UAAA4N,KACDtG,IAAAsG,KAAAoB,IAAA,gBAAAmC,GAAAgH,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAA1U,EAAC2K,IAAA,EAA4CY,YAAAA,EAAAA,CAAyB;AAAA,IACtE,gBAAAvL,EAACyT,IAAA,EAA6BlI,eAAyB;AAAA,EAAA,EAAA,CAAI,IAH9D,MAKOhP,QAAAgP,GAAAhP,QAAA4N,GAAA5N,QAAAsH,KAAAA,IAAAtH,EAAA,EAAA;AAAA,MAAAuH;AAAA,EAAAvH,EAAA,EAAA,MAAA2X,KAAA3X,UAAAyX,KAAAzX,EAAA,EAAA,MAAA4X,KACPrQ,IAAAqQ,sBACEQ,IAAA,EACC,uBAAA,IAC6B,6BAAA,IACnB,UAAAhW,CAAAA,OAAA;AACRA,IAAAA,GAAWT,KAAM,MAAA;AACf,YAAA0W,KAAaC,GAAAA,GACbC,KAAqBC,GAAyBT,IAAoBM,EAAI;AACtEZ,MAAAA,IAAWE,IAAcY,EAAY;AAAA,IAAC,CACvC;AAAA,EAAC,GACH,IAVJ,MAYOvY,QAAA2X,GAAA3X,QAAAyX,GAAAzX,QAAA4X,GAAA5X,QAAAuH,KAAAA,IAAAvH,EAAA,EAAA;AAAA,MAAAwH;AAAA,EAAAxH,UAAA4N,KACRpG,sBAACiR,MAAiC7K,YAAAA,EAAAA,CAAU,GAAI5N,QAAA4N,GAAA5N,QAAAwH,KAAAA,IAAAxH,EAAA,EAAA;AAAA,MAAAyH;AAAA,EAAAzH,UAAAsX,KAC/C7P,IAAA6P,uBAAUoB,IAAA,CAAA,CAAc,GAAG1Y,QAAAsX,GAAAtX,QAAAyH,KAAAA,IAAAzH,EAAA,EAAA;AAAA,MAAA0H;AAAA,EAAA1H,EAAA,EAAA,MAAAoQ,KAAApQ,EAAA,EAAA,MAAAgD,KAAAhD,UAAA+D,KAAA/D,EAAA,EAAA,MAAAiH,KAAAjH,EAAA,EAAA,MAAAqH,KAAArH,EAAA,EAAA,MAAAsH,KAAAtH,EAAA,EAAA,MAAAuH,KAAAvH,EAAA,EAAA,MAAAwH,KAAAxH,UAAAyH,KAtD9BC,IAAA,gBAAAyJ,GAACD,MAA+Bd,eAAAA,GAC7BpN,UAAAA;AAAAA,IAAAA;AAAAA,IACDO;AAAAA,IACAI;AAAAA,IACAE;AAAAA,IACCE;AAAAA,IACDC;AAAAA,IACA8C;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAG;AAAAA,IAsBCC;AAAAA,IAMAC;AAAAA,IAaDC;AAAAA,IACCC;AAAAA,EAAAA,GACH,GAAkBzH,QAAAoQ,GAAApQ,QAAAgD,GAAAhD,QAAA+D,GAAA/D,QAAAiH,GAAAjH,QAAAqH,GAAArH,QAAAsH,GAAAtH,QAAAuH,GAAAvH,QAAAwH,GAAAxH,QAAAyH,GAAAzH,QAAA0H,KAAAA,IAAA1H,EAAA,EAAA;AAAA,MAAA2H;AAAA,SAAA3H,EAAA,EAAA,MAAA+C,KAAA/C,UAAA0H,KAlEpBC,IAAA,gBAAAlE,EAACwN,MACMlC,KAAAA,GACK,WAAA,aACK,gBAAA,iBACT,OAAA,QACG,UAAA,QACD,QAAAhM,GACC,UAAA,YACC,WAAA,UACD,UAAA,WAET2E,UAAAA,EAAAA,CAwDF,GAAO1H,QAAA+C,GAAA/C,QAAA0H,GAAA1H,QAAA2H,KAAAA,IAAA3H,EAAA,EAAA,GAnEP2H;AAmEO;AAlGJ,SAAAlF,GAAA4O,GAAA;AAAA,SAyBwBC,QAAOD,MAAOA,CAAK;AAAC;AC7D5C,SAASsH,GAA+BC,GAAmB;AAChE,QAAMC,IAAaD,EAAUE,YAAAA,EAAcjF,KAAAA;AAC3C,SAAKgF,IAEDA,EAAWE,WAAW,QAAQ,IAAU,UACxCF,MAAe,oBAA0B,QACzCA,MAAe,kBAAwB,aACvCA,MAAe,cAAcA,MAAe,8BAAoC,UAChFA,MAAe,qBAA2B,UAC1CA,EAAWE,WAAW,OAAO,KAC7BF,EAAWE,WAAW,cAAc,GAAU,UAR1B;AAY1B;AChBA,MAAMC,KAA+C;AAAA,EACnDC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,MAAM;AAAA,EACNC,IAAI;AAAA,EACJC,UAAU;AAAA,EACVC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,MAAM;AAAA,EACNC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,MAAM;AAAA,EACNC,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,IAAI;AAAA,EACJC,KAAK;AAAA,EACLC,IAAI;AAAA,EACJzW,KAAK;AAAA,EACL0W,KAAK;AAAA,EACLC,KAAK;AAAA,EACLC,MAAM;AACR;AAEO,SAASC,GAAkBC,GAAc;AAE9C,QAAMC,KADUD,EAAKE,MAAM,GAAG,EAAE,CAAC,GAAGA,MAAM,GAAG,EAAE,CAAC,KAAK,IACjCA,MAAM,GAAG,EAAEC,IAAAA,GAAO5B,YAAAA;AACtC,SAAK0B,IACExB,GAAqBwB,CAAG,KAAK,OADnB;AAEnB;"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .rich-text__ltr{text-align:left}.rich-text__rtl{text-align:right}.rich-text{--rich-text-font-scale: 1;--rich-text-list-indent: 1.5rem;font-size:calc(1rem * var(--rich-text-font-scale))}.rich-text[data-rich-message=true]{--rich-text-font-scale: .9}.rich-text[data-rich-message=true] .rich-text__p:last-child{margin-bottom:0}.rich-text__paragraph{margin:0;position:relative}.rich-text__quote{margin:0;margin-top:var(--chakra-spacing-xl, 1.5rem);margin-left:var(--chakra-spacing-sm, .75rem);margin-bottom:var(--chakra-spacing-xl, 1.5rem);font-size:calc(15px * var(--rich-text-font-scale));color:var(--chakra-colors-fg-muted);border-left:4px solid var(--chakra-colors-border);padding-left:16px}.rich-text__indent{--lexical-indent-base-value: 40px}.rich-text__textBold{font-weight:700}.rich-text__reference{font:inherit;border-bottom:1px dotted currentColor;opacity:.9;white-space:nowrap}.rich-text__textStrikethrough{text-decoration:line-through}.rich-text__textUnderlineStrikethrough{text-decoration:underline line-through}.rich-text__textSubscript{font-size:.8em;vertical-align:sub}.rich-text__textSuperscript{font-size:.8em;vertical-align:super}.rich-text__textCode{background-color:var(--chakra-colors-bg-code);padding:1px .25rem;font-family:var(--chakra-fonts-mono);font-size:.94em}.rich-text__link{color:var(--chakra-colors-blue-600);text-decoration:none;cursor:pointer}.rich-text__link:hover{text-decoration:underline}.rich-text__code{background-color:var(--chakra-colors-bg-code);font-family:var(--chakra-fonts-mono);display:block;padding:8px 8px 8px 52px;line-height:1.53;font-size:calc(13px * var(--rich-text-font-scale));margin:0;margin-top:var(--chakra-spacing-md, 1rem);margin-bottom:var(--chakra-spacing-md, 1rem);overflow-x:auto;position:relative;tab-size:2}.rich-text__code:before{content:attr(data-gutter);position:absolute;background-color:var(--chakra-colors-bg-subtle);left:0;top:0;bottom:0;border-right:1px solid var(--chakra-colors-border);padding:8px;color:var(--chakra-colors-fg-muted);white-space:pre-wrap;text-align:right;min-width:25px}.rich-text__table{border-collapse:collapse;border-spacing:0;color:var(--chakra-colors-fg);font-size:calc(var(--chakra-font-sizes-sm) * var(--rich-text-font-scale));line-height:21px;overflow-y:auto;overflow-x:auto;table-layout:fixed;width:max-content}.rich-text__tableSelection *::selection{background-color:transparent}.rich-text__tableSelected{outline:2px solid var(--chakra-colors-blue-500)}.rich-text__tableCell{border:1px solid var(--chakra-colors-border);vertical-align:top;text-align:start;padding:6px 8px;position:relative;outline:none}.rich-text__tableCellSortedIndicator{display:block;opacity:.5;position:absolute;bottom:0;left:0;width:100%;height:4px;background-color:var(--chakra-colors-bg)}.rich-text__tableCellResizer{position:absolute;right:-4px;height:100%;width:8px;cursor:ew-resize;z-index:10;top:0}.rich-text__tableCellHeader{background-color:var(--chakra-colors-bg-muted);font-weight:400;text-align:start}.rich-text__tableCellSelected{background-color:var(--chakra-colors-blue-100)}.rich-text__tableCellPrimarySelected{border:2px solid var(--chakra-colors-blue-500);display:block;height:calc(100% - 2px);position:absolute;width:calc(100% - 2px);left:-1px;top:-1px;z-index:2}.rich-text__tableCellEditing{box-shadow:var(--chakra-shadows-sm);border-radius:3px}.rich-text__tableAddColumns,.rich-text__tableAddRows{position:absolute;background-color:var(--chakra-colors-bg-muted);animation:table-controls .2s ease;border:0;cursor:pointer}.rich-text__tableAddColumns{top:0;width:20px;height:100%;right:-25px}.rich-text__tableAddColumns:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddRows{bottom:-25px;width:calc(100% - 25px);height:20px;left:0}.rich-text__tableAddRows:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddColumns:hover,.rich-text__tableAddRows:hover{background-color:var(--chakra-colors-blue-100)}@keyframes table-controls{0%{opacity:0}to{opacity:1}}.rich-text__tableCellResizeRuler{display:block;position:absolute;width:1px;background-color:var(--chakra-colors-blue-500);height:100%;top:0}.rich-text__tableCellActionButtonContainer{display:block;right:5px;top:6px;position:absolute;z-index:4;width:20px;height:20px}.rich-text__tableCellActionButton{background-color:var(--chakra-colors-bg-muted);display:block;border:0;border-radius:20px;width:20px;height:20px;color:var(--chakra-colors-fg);cursor:pointer}.rich-text__tableCellActionButton:hover{background-color:var(--chakra-colors-bg-subtle)}.rich-text__characterLimit{display:inline;background-color:var(--chakra-colors-red-100)}ul.rich-text__ul,ul.rich-text__checklist,ol.rich-text__ol,ol.rich-text__ol1,ol.rich-text__ol2,ol.rich-text__ol3,ol.rich-text__ol4,ol.rich-text__ol5{list-style-position:outside;padding-inline-start:var(--rich-text-list-indent);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}ul.rich-text__ul{list-style-type:disc}ol.rich-text__ol,ol.rich-text__ol1{list-style-type:decimal}ol.rich-text__ol2{list-style-type:upper-alpha}ol.rich-text__ol3{list-style-type:lower-alpha}ol.rich-text__ol4{list-style-type:upper-roman}ol.rich-text__ol5{list-style-type:lower-roman}li.rich-text__listItem{display:list-item;list-style-position:outside;padding-inline-start:var(--chakra-spacing-1, .25rem)}li.rich-text__listItemUnchecked,li.rich-text__listItemChecked{position:relative;list-style-type:none;padding-left:26px;outline:none}li.rich-text__listItemUnchecked:before,li.rich-text__listItemChecked:before{content:"";position:absolute;left:0;top:2px;width:18px;height:18px;border-radius:var(--chakra-radii-xs, 4px);cursor:pointer}li.rich-text__listItemUnchecked:before{border:1px solid var(--chakra-colors-border)}li.rich-text__listItemChecked:before{background:var(--chakra-colors-fg);border:1px solid var(--chakra-colors-fg)}li.rich-text__listItemChecked:after{content:"";position:absolute;left:0;top:2px;width:18px;height:18px;cursor:pointer;background-color:var(--chakra-colors-bg);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");-webkit-mask-size:12px 12px;mask-size:12px 12px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}ul.rich-text__ul :where(ul,ol),ul.rich-text__checklist :where(ul,ol),ol.rich-text__ol :where(ul,ol),ol.rich-text__ol1 :where(ul,ol),ol.rich-text__ol2 :where(ul,ol),ol.rich-text__ol3 :where(ul,ol),ol.rich-text__ol4 :where(ul,ol),ol.rich-text__ol5 :where(ul,ol){padding-inline-start:var(--rich-text-list-indent)}li.rich-text__nestedListItem{list-style-type:none;padding-inline-start:0}.rich-text__nestedListItem:before,.rich-text__nestedListItem:after{display:none}.rich-text__tokenComment{color:var(--chakra-colors-gray-500)}.rich-text__tokenPunctuation{color:var(--chakra-colors-gray-400)}.rich-text__tokenProperty{color:var(--chakra-colors-purple-600)}.rich-text__tokenSelector{color:var(--chakra-colors-green-600)}.rich-text__tokenOperator{color:var(--chakra-colors-orange-600)}.rich-text__tokenAttr{color:var(--chakra-colors-blue-600)}.rich-text__tokenVariable{color:var(--chakra-colors-yellow-600)}.rich-text__tokenFunction{color:var(--chakra-colors-pink-600)}.rich-text__mark{background:var(--chakra-colors-yellow-100);border-bottom:2px solid var(--chakra-colors-yellow-200);padding-bottom:2px}.rich-text__markOverlap{background:var(--chakra-colors-yellow-200);border-bottom:2px solid var(--chakra-colors-yellow-300)}.rich-text__mark.selected{background:var(--chakra-colors-yellow-300);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__markOverlap.selected{background:var(--chakra-colors-yellow-400);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__layoutContainer{display:grid;gap:var(--chakra-spacing-2, .5rem)}.rich-text__layoutItem{border-radius:var(--chakra-radii-sm)}.rich-text__layoutItem>:first-child{margin-top:0;margin-bottom:0}.draggable-block-demo__row{display:flex;gap:var(--chakra-spacing-3, .75rem);padding-block:var(--chakra-spacing-2, .5rem);padding-inline:var(--chakra-spacing-4, 1rem);position:relative;transition:box-shadow .14s ease}.rich-text__row{border-radius:var(--chakra-radii-lg)}.draggable-block-demo__row:focus-within{box-shadow:0 0 0 2px var(--chakra-colors-blue-200)}.draggable-block-demo__content,.rich-text__content{position:relative;flex:1 1 0;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.draggable-block-demo__content--empty{color:var(--chakra-colors-fg-muted);border-style:dashed;background:var(--chakra-colors-bg-subtle)}.draggable-block-demo__handle-slot{position:absolute;inset:0;width:0;height:0;pointer-events:none}.draggable-block-demo__handle-controls{position:absolute;pointer-events:none;opacity:0;transform:translate(-10000px,-10000px);z-index:11;display:flex;flex-direction:column;align-items:center;gap:8px}.draggable-block-demo__floating-handle,.draggable-block-demo__delete-button{pointer-events:auto}.draggable-block-demo__floating-handle{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--chakra-radii-sm);border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);color:var(--chakra-colors-fg-muted);box-shadow:var(--chakra-shadows-sm);cursor:grab;transition:box-shadow .12s ease,transform .12s ease}.draggable-block-demo__floating-handle:active{cursor:grabbing}.draggable-block-demo__handle-icon{margin-left:-4px;display:inline-block;font-size:calc(12px * var(--rich-text-font-scale));letter-spacing:-4px;-webkit-user-select:none;user-select:none}.draggable-block-demo__delete-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--chakra-radii-sm);border:1px solid var(--chakra-colors-red-200);background:var(--chakra-colors-red-50);color:var(--chakra-colors-red-600);cursor:pointer;box-shadow:var(--chakra-shadows-xs);transition:background .12s ease,border-color .12s ease}.draggable-block-demo__delete-button:hover{background:var(--chakra-colors-red-100);border-color:var(--chakra-colors-red-300)}.draggable-block-demo__delete-icon{font-size:calc(16px * var(--rich-text-font-scale));line-height:1;-webkit-user-select:none;user-select:none}.draggable-block-demo__gap{position:absolute;left:0;width:100%;height:28px;display:flex;justify-content:center;align-items:center;pointer-events:auto;opacity:0;transition:opacity .12s ease}.draggable-block-demo__gap-line{width:100%;border-top:1px dashed var(--chakra-colors-border);position:absolute;top:50%;transform:translateY(-50%)}.draggable-block-demo__gap-button{pointer-events:auto;border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);border-radius:999px;width:20px;height:20px;font-size:calc(18px * var(--rich-text-font-scale));line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--chakra-colors-fg-muted);box-shadow:var(--chakra-shadows-xs);transition:background .12s ease,color .12s ease}.draggable-block-demo__gap:hover,.draggable-block-demo__gap.is-active{opacity:1}.draggable-block-demo__gap-button:hover{background:var(--chakra-colors-bg-subtle);color:var(--chakra-colors-fg)}.draggable-block-demo__indicator{position:absolute;background:var(--chakra-colors-blue-500);pointer-events:none;border-radius:2px;z-index:12}.draggable-block-demo__indicator--horizontal{height:2px}.draggable-block-demo__indicator--vertical{width:2px}.rich-text__h1{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-4xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:2.5rem;margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h1:first-of-type{margin-top:0}.rich-text__h1_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-2, .5rem)}.rich-text__h2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h2_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem);margin-bottom:var(--chakra-spacing-1, .125rem)}.rich-text__h3{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h3_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem)}.rich-text__p{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0;margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p:first-child{margin-top:0}.rich-text__p:only-child{margin-bottom:0}.rich-text[data-rich-message=true] .rich-text__quote{margin-top:var(--chakra-spacing-3, .75rem);margin-left:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__code{margin-top:8px;margin-bottom:8px}.rich-text[data-rich-message=true] .rich-text__h1{font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-5, 1.5rem);margin-bottom:var(--chakra-spacing-4, 1rem)}.rich-text[data-rich-message=true] .rich-text__h2{font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__h3{margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0}.rich-text__textUnderline{text-decoration:underline}.rich-text__textItalic{font-style:italic}span.editor-equation{display:inline-block}.editor-equation span{cursor:inherit}.editor-equation{-webkit-user-select:none;user-select:none}.katex-display{overflow-x:auto;overflow-y:hidden}.code-block-actions{z-index:1001;opacity:.95}.code-block-actions button{box-shadow:var(--chakra-shadows-sm)}.floating-text-format-toolbar{display:flex;position:absolute;top:0;left:0;z-index:1000;opacity:0;pointer-events:none;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-muted);box-shadow:0 5px 10px #0000001a;transition:opacity .2s;will-change:transform;padding:4px;gap:2px}.floating-text-format-toolbar.active{opacity:1;pointer-events:auto}.floating-text-format-toolbar button[data-active]{background-color:var(--chakra-colors-bg-accent-primary-medium);color:var(--chakra-colors-text-selectable-primary)}.rich-text__p--no-margin{margin:0}
1
+ .rich-text__ltr{text-align:left}.rich-text__rtl{text-align:right}.rich-text{--rich-text-font-scale: 1;--rich-text-list-indent: 1.5rem;font-size:calc(1rem * var(--rich-text-font-scale))}.rich-text[data-rich-message=true]{--rich-text-font-scale: .9}.rich-text[data-rich-message=true] .rich-text__p:last-child{margin-bottom:0}.rich-text__paragraph{margin:0;position:relative}.rich-text__quote{margin:0;margin-top:var(--chakra-spacing-xl, 1.5rem);margin-left:var(--chakra-spacing-sm, .75rem);margin-bottom:var(--chakra-spacing-xl, 1.5rem);font-size:calc(15px * var(--rich-text-font-scale));color:var(--chakra-colors-fg-muted);border-left:4px solid var(--chakra-colors-border);padding-left:16px}.rich-text__indent{--lexical-indent-base-value: 40px}.rich-text__textBold{font-weight:700}.rich-text__reference{font:inherit;border-bottom:1px dotted currentColor;opacity:.9;white-space:nowrap}.rich-text__textStrikethrough{text-decoration:line-through}.rich-text__textUnderlineStrikethrough{text-decoration:underline line-through}.rich-text__textSubscript{font-size:.8em;vertical-align:sub}.rich-text__textSuperscript{font-size:.8em;vertical-align:super}.rich-text__textCode{background-color:var(--chakra-colors-bg-code);padding:1px .25rem;font-family:var(--chakra-fonts-mono);font-size:.94em}.rich-text__link{color:var(--chakra-colors-blue-600);text-decoration:none;cursor:pointer}.rich-text__link:hover{text-decoration:underline}.rich-text__code{background-color:var(--chakra-colors-bg-code);font-family:var(--chakra-fonts-mono);display:block;padding:8px 8px 8px 52px;line-height:1.53;font-size:calc(13px * var(--rich-text-font-scale));margin:0;margin-top:var(--chakra-spacing-md, 1rem);margin-bottom:var(--chakra-spacing-md, 1rem);overflow-x:auto;position:relative;tab-size:2}.rich-text__code:before{content:attr(data-gutter);position:absolute;background-color:var(--chakra-colors-bg-subtle);left:0;top:0;bottom:0;border-right:1px solid var(--chakra-colors-border);padding:8px;color:var(--chakra-colors-fg-muted);white-space:pre-wrap;text-align:right;min-width:25px}.rich-text__table{border-collapse:collapse;border-spacing:0;color:var(--chakra-colors-fg);font-size:calc(var(--chakra-font-sizes-sm) * var(--rich-text-font-scale));line-height:21px;overflow-y:auto;overflow-x:auto;table-layout:fixed;width:max-content}.rich-text__tableSelection *::selection{background-color:transparent}.rich-text__tableSelected{outline:2px solid var(--chakra-colors-blue-500)}.rich-text__tableCell{border:1px solid var(--chakra-colors-border);vertical-align:top;text-align:start;padding:6px 8px;position:relative;outline:none}.rich-text__tableCellSortedIndicator{display:block;opacity:.5;position:absolute;bottom:0;left:0;width:100%;height:4px;background-color:var(--chakra-colors-bg)}.rich-text__tableCellResizer{position:absolute;right:-4px;height:100%;width:8px;cursor:ew-resize;z-index:10;top:0}.rich-text__tableCellHeader{background-color:var(--chakra-colors-bg-muted);font-weight:400;text-align:start}.rich-text__tableCellSelected{background-color:var(--chakra-colors-blue-100)}.rich-text__tableCellPrimarySelected{border:2px solid var(--chakra-colors-blue-500);display:block;height:calc(100% - 2px);position:absolute;width:calc(100% - 2px);left:-1px;top:-1px;z-index:2}.rich-text__tableCellEditing{box-shadow:var(--chakra-shadows-sm);border-radius:3px}.rich-text__tableAddColumns,.rich-text__tableAddRows{position:absolute;background-color:var(--chakra-colors-bg-muted);animation:table-controls .2s ease;border:0;cursor:pointer}.rich-text__tableAddColumns{top:0;width:20px;height:100%;right:-25px}.rich-text__tableAddColumns:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddRows{bottom:-25px;width:calc(100% - 25px);height:20px;left:0}.rich-text__tableAddRows:after{background-size:contain;background-position:center;background-repeat:no-repeat;display:block;content:" ";position:absolute;top:0;left:0;width:100%;height:100%;opacity:.4}.rich-text__tableAddColumns:hover,.rich-text__tableAddRows:hover{background-color:var(--chakra-colors-blue-100)}@keyframes table-controls{0%{opacity:0}to{opacity:1}}.rich-text__tableCellResizeRuler{display:block;position:absolute;width:1px;background-color:var(--chakra-colors-blue-500);height:100%;top:0}.rich-text__tableCellActionButtonContainer{display:block;right:5px;top:6px;position:absolute;z-index:4;width:20px;height:20px}.rich-text__tableCellActionButton{background-color:var(--chakra-colors-bg-muted);display:block;border:0;border-radius:20px;width:20px;height:20px;color:var(--chakra-colors-fg);cursor:pointer}.rich-text__tableCellActionButton:hover{background-color:var(--chakra-colors-bg-subtle)}.rich-text__characterLimit{display:inline;background-color:var(--chakra-colors-red-100)}ul.rich-text__ul,ul.rich-text__checklist,ol.rich-text__ol,ol.rich-text__ol1,ol.rich-text__ol2,ol.rich-text__ol3,ol.rich-text__ol4,ol.rich-text__ol5{list-style-position:outside;padding-inline-start:var(--rich-text-list-indent);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}ul.rich-text__ul{list-style-type:disc}ol.rich-text__ol,ol.rich-text__ol1{list-style-type:decimal}ol.rich-text__ol2{list-style-type:upper-alpha}ol.rich-text__ol3{list-style-type:lower-alpha}ol.rich-text__ol4{list-style-type:upper-roman}ol.rich-text__ol5{list-style-type:lower-roman}li.rich-text__listItem{display:list-item;list-style-position:outside;padding-inline-start:var(--chakra-spacing-1, .25rem)}li.rich-text__listItemUnchecked,li.rich-text__listItemChecked{position:relative;list-style-type:none;padding-left:24px;outline:none}li.rich-text__listItemUnchecked:before,li.rich-text__listItemChecked:before{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;border-radius:var(--chakra-radii-xs, 4px);cursor:pointer}li.rich-text__listItemUnchecked:before{border:1px solid var(--chakra-colors-border)}li.rich-text__listItemChecked:before{background:var(--chakra-colors-fg);border:1px solid var(--chakra-colors-fg)}li.rich-text__listItemChecked:after{content:"";position:absolute;left:0;top:3px;width:16px;height:16px;cursor:pointer;background-color:var(--chakra-colors-bg);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");-webkit-mask-size:10px 10px;mask-size:10px 10px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}ul.rich-text__ul :where(ul,ol),ul.rich-text__checklist :where(ul,ol),ol.rich-text__ol :where(ul,ol),ol.rich-text__ol1 :where(ul,ol),ol.rich-text__ol2 :where(ul,ol),ol.rich-text__ol3 :where(ul,ol),ol.rich-text__ol4 :where(ul,ol),ol.rich-text__ol5 :where(ul,ol){padding-inline-start:var(--rich-text-list-indent)}li.rich-text__nestedListItem{list-style-type:none;padding-inline-start:0}.rich-text__nestedListItem:before,.rich-text__nestedListItem:after{display:none}.rich-text__tokenComment{color:var(--chakra-colors-gray-500)}.rich-text__tokenPunctuation{color:var(--chakra-colors-gray-400)}.rich-text__tokenProperty{color:var(--chakra-colors-purple-600)}.rich-text__tokenSelector{color:var(--chakra-colors-green-600)}.rich-text__tokenOperator{color:var(--chakra-colors-orange-600)}.rich-text__tokenAttr{color:var(--chakra-colors-blue-600)}.rich-text__tokenVariable{color:var(--chakra-colors-yellow-600)}.rich-text__tokenFunction{color:var(--chakra-colors-pink-600)}.rich-text__mark{background:var(--chakra-colors-yellow-100);border-bottom:2px solid var(--chakra-colors-yellow-200);padding-bottom:2px}.rich-text__markOverlap{background:var(--chakra-colors-yellow-200);border-bottom:2px solid var(--chakra-colors-yellow-300)}.rich-text__mark.selected{background:var(--chakra-colors-yellow-300);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__markOverlap.selected{background:var(--chakra-colors-yellow-400);border-bottom:2px solid var(--chakra-colors-yellow-400)}.rich-text__layoutContainer{display:grid;gap:var(--chakra-spacing-2, .5rem)}.rich-text__layoutItem{border-radius:var(--chakra-radii-sm)}.rich-text__layoutItem>:first-child{margin-top:0;margin-bottom:0}.draggable-block-demo__row{display:flex;gap:var(--chakra-spacing-3, .75rem);padding-block:var(--chakra-spacing-2, .5rem);padding-inline:var(--chakra-spacing-4, 1rem);position:relative;transition:box-shadow .14s ease}.rich-text__row{border-radius:var(--chakra-radii-lg)}.draggable-block-demo__row:focus-within{box-shadow:0 0 0 2px var(--chakra-colors-blue-200)}.draggable-block-demo__content,.rich-text__content{position:relative;flex:1 1 0;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.draggable-block-demo__content--empty{color:var(--chakra-colors-fg-muted);border-style:dashed;background:var(--chakra-colors-bg-subtle)}.draggable-block-demo__handle-slot{position:absolute;inset:0;width:0;height:0;pointer-events:none}.draggable-block-demo__handle-controls{position:absolute;pointer-events:none;opacity:0;transform:translate(-10000px,-10000px);z-index:11;display:flex;flex-direction:column;align-items:center;gap:8px}.draggable-block-demo__floating-handle,.draggable-block-demo__delete-button{pointer-events:auto}.draggable-block-demo__floating-handle{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--chakra-radii-sm);border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);color:var(--chakra-colors-fg-muted);box-shadow:var(--chakra-shadows-sm);cursor:grab;transition:box-shadow .12s ease,transform .12s ease}.draggable-block-demo__floating-handle:active{cursor:grabbing}.draggable-block-demo__handle-icon{margin-left:-4px;display:inline-block;font-size:calc(12px * var(--rich-text-font-scale));letter-spacing:-4px;-webkit-user-select:none;user-select:none}.draggable-block-demo__delete-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--chakra-radii-sm);border:1px solid var(--chakra-colors-red-200);background:var(--chakra-colors-red-50);color:var(--chakra-colors-red-600);cursor:pointer;box-shadow:var(--chakra-shadows-xs);transition:background .12s ease,border-color .12s ease}.draggable-block-demo__delete-button:hover{background:var(--chakra-colors-red-100);border-color:var(--chakra-colors-red-300)}.draggable-block-demo__delete-icon{font-size:calc(16px * var(--rich-text-font-scale));line-height:1;-webkit-user-select:none;user-select:none}.draggable-block-demo__gap{position:absolute;left:0;width:100%;height:28px;display:flex;justify-content:center;align-items:center;pointer-events:auto;opacity:0;transition:opacity .12s ease}.draggable-block-demo__gap-line{width:100%;border-top:1px dashed var(--chakra-colors-border);position:absolute;top:50%;transform:translateY(-50%)}.draggable-block-demo__gap-button{pointer-events:auto;border:1px solid var(--chakra-colors-border);background:var(--chakra-colors-bg);border-radius:999px;width:20px;height:20px;font-size:calc(18px * var(--rich-text-font-scale));line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--chakra-colors-fg-muted);box-shadow:var(--chakra-shadows-xs);transition:background .12s ease,color .12s ease}.draggable-block-demo__gap:hover,.draggable-block-demo__gap.is-active{opacity:1}.draggable-block-demo__gap-button:hover{background:var(--chakra-colors-bg-subtle);color:var(--chakra-colors-fg)}.draggable-block-demo__indicator{position:absolute;background:var(--chakra-colors-blue-500);pointer-events:none;border-radius:2px;z-index:12}.draggable-block-demo__indicator--horizontal{height:2px}.draggable-block-demo__indicator--vertical{width:2px}.rich-text__h1{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-4xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:2.5rem;margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h1:first-of-type{margin-top:0}.rich-text__h1_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg);margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-2, .5rem)}.rich-text__h2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h2_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:120%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem);margin-bottom:var(--chakra-spacing-1, .125rem)}.rich-text__h3{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-lg, 1.5rem);margin-bottom:var(--chakra-spacing-md, 1rem)}.rich-text__h3_2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-lg) * var(--rich-text-font-scale));font-weight:var(--chakra-font-weights-medium);line-height:100%;color:var(--chakra-colors-fg, var(--chakra-colors-fg));margin-top:var(--chakra-spacing-2, .5rem)}.rich-text__p{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0;margin-top:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p:first-child{margin-top:0}.rich-text__p:only-child{margin-bottom:0}.rich-text[data-rich-message=true] .rich-text__quote{margin-top:var(--chakra-spacing-3, .75rem);margin-left:var(--chakra-spacing-3, .75rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__code{margin-top:8px;margin-bottom:8px}.rich-text[data-rich-message=true] .rich-text__h1{font-size:calc(var(--chakra-font-sizes-3xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-5, 1.5rem);margin-bottom:var(--chakra-spacing-4, 1rem)}.rich-text[data-rich-message=true] .rich-text__h2{font-size:calc(var(--chakra-font-sizes-2xl) * var(--rich-text-font-scale));margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text[data-rich-message=true] .rich-text__h3{margin-top:var(--chakra-spacing-4, 1rem);margin-bottom:var(--chakra-spacing-3, .75rem)}.rich-text__p2{font-family:var(--chakra-fonts-body);font-size:calc(var(--chakra-font-sizes-md) * var(--rich-text-font-scale));line-height:171%;letter-spacing:.14px;margin:0}.rich-text__textUnderline{text-decoration:underline}.rich-text__textItalic{font-style:italic}span.editor-equation{display:inline-block}.editor-equation span{cursor:inherit}.editor-equation{-webkit-user-select:none;user-select:none}.katex-display{overflow-x:auto;overflow-y:hidden}.code-block-actions{z-index:1001;opacity:.95}.code-block-actions button{box-shadow:var(--chakra-shadows-sm)}.floating-text-format-toolbar{display:flex;position:absolute;top:0;left:0;z-index:1000;opacity:0;pointer-events:none;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-muted);box-shadow:0 5px 10px #0000001a;transition:opacity .2s;will-change:transform;padding:4px;gap:2px}.floating-text-format-toolbar.active{opacity:1;pointer-events:auto}.floating-text-format-toolbar button[data-active]{background-color:var(--chakra-colors-bg-accent-primary-medium);color:var(--chakra-colors-text-selectable-primary)}.link-editor{position:absolute;top:0;left:0;z-index:1001;width:320px;opacity:0;pointer-events:none;transition:opacity .2s;will-change:transform}.link-editor.active{opacity:1;pointer-events:auto;background-color:var(--chakra-colors-bg);border-radius:8px;border:1px solid var(--chakra-colors-border-muted);box-shadow:0 5px 10px #0000001a}.link-editor-content{width:100%}.link-editor-url-field{flex:1;min-width:0}.rich-text__p--no-margin{margin:0}
@@ -1,3 +1,5 @@
1
1
  import { ThemePreferenceOption } from '../../utils/apply-theme-preference';
2
2
  export declare const monokaiThemePreference: ThemePreferenceOption;
3
3
  export declare const customThemePreferences: ThemePreferenceOption[];
4
+ export type { MonacoThemeData, VsCodeColorTheme } from './vscode-theme';
5
+ export { createMonacoThemeFromVsCodeTheme, createThemePreferenceFromVsCodeTheme } from './vscode-theme';
@@ -0,0 +1,32 @@
1
+ import { ThemePreferenceMode, ThemePreferenceOption } from '../../utils/apply-theme-preference';
2
+ export interface VsCodeColorTheme {
3
+ colors?: Record<string, string>;
4
+ tokenColors?: VsCodeTokenColor[];
5
+ }
6
+ interface VsCodeTokenColor {
7
+ scope?: string | string[];
8
+ settings?: {
9
+ foreground?: string;
10
+ fontStyle?: string;
11
+ };
12
+ }
13
+ export interface MonacoThemeData {
14
+ base: "vs" | "vs-dark";
15
+ inherit: true;
16
+ rules: {
17
+ token: string;
18
+ foreground?: string;
19
+ fontStyle?: string;
20
+ }[];
21
+ colors: Record<string, string>;
22
+ }
23
+ export declare const createThemePreferenceFromVsCodeTheme: (input: {
24
+ id: string;
25
+ mode: ThemePreferenceMode;
26
+ theme: VsCodeColorTheme;
27
+ }) => ThemePreferenceOption;
28
+ export declare const createMonacoThemeFromVsCodeTheme: (input: {
29
+ mode: ThemePreferenceMode;
30
+ theme: VsCodeColorTheme;
31
+ }) => MonacoThemeData;
32
+ export {};
@@ -1,2 +1,3 @@
1
- export { customThemePreferences, monokaiThemePreference } from './custom';
1
+ export type { MonacoThemeData, VsCodeColorTheme } from './custom';
2
+ export { createMonacoThemeFromVsCodeTheme, createThemePreferenceFromVsCodeTheme, customThemePreferences, monokaiThemePreference, } from './custom';
2
3
  export { default as psTheme } from './theme';
@@ -1 +1 @@
1
- export declare const alertSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"title" | "content" | "description" | "root" | "indicator", import('@chakra-ui/react').SlotRecipeVariantRecord<"title" | "content" | "description" | "root" | "indicator">>;
1
+ export declare const alertSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "title" | "root" | "indicator" | "description", import('@chakra-ui/react').SlotRecipeVariantRecord<"content" | "title" | "root" | "indicator" | "description">>;
@@ -1 +1 @@
1
- export declare const dialogSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"title" | "content" | "body" | "footer" | "header" | "description" | "trigger" | "positioner" | "backdrop" | "closeTrigger", import('@chakra-ui/react').SlotRecipeVariantRecord<"title" | "content" | "body" | "footer" | "header" | "description" | "trigger" | "positioner" | "backdrop" | "closeTrigger">>;
1
+ export declare const dialogSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "body" | "footer" | "header" | "title" | "trigger" | "positioner" | "description" | "closeTrigger" | "backdrop", import('@chakra-ui/react').SlotRecipeVariantRecord<"content" | "body" | "footer" | "header" | "title" | "trigger" | "positioner" | "description" | "closeTrigger" | "backdrop">>;
@@ -1 +1 @@
1
- export declare const drawerSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"title" | "content" | "body" | "footer" | "header" | "description" | "trigger" | "positioner" | "backdrop" | "closeTrigger", import('@chakra-ui/react').SlotRecipeVariantRecord<"title" | "content" | "body" | "footer" | "header" | "description" | "trigger" | "positioner" | "backdrop" | "closeTrigger">>;
1
+ export declare const drawerSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "body" | "footer" | "header" | "title" | "trigger" | "positioner" | "description" | "closeTrigger" | "backdrop", import('@chakra-ui/react').SlotRecipeVariantRecord<"content" | "body" | "footer" | "header" | "title" | "trigger" | "positioner" | "description" | "closeTrigger" | "backdrop">>;
@@ -1 +1 @@
1
- export declare const menuSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "indicator" | "separator" | "item" | "trigger" | "arrow" | "arrowTip" | "positioner" | "contextTrigger" | "itemGroup" | "itemGroupLabel" | "itemIndicator" | "itemText" | "triggerItem" | "itemCommand", import('@chakra-ui/react').SlotRecipeVariantRecord<"content" | "indicator" | "separator" | "item" | "trigger" | "arrow" | "arrowTip" | "positioner" | "contextTrigger" | "itemGroup" | "itemGroupLabel" | "itemIndicator" | "itemText" | "triggerItem" | "itemCommand">>;
1
+ export declare const menuSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "separator" | "trigger" | "arrow" | "arrowTip" | "positioner" | "item" | "indicator" | "itemIndicator" | "itemGroup" | "contextTrigger" | "itemGroupLabel" | "itemText" | "triggerItem" | "itemCommand", import('@chakra-ui/react').SlotRecipeVariantRecord<"content" | "separator" | "trigger" | "arrow" | "arrowTip" | "positioner" | "item" | "indicator" | "itemIndicator" | "itemGroup" | "contextTrigger" | "itemGroupLabel" | "itemText" | "triggerItem" | "itemCommand">>;
@@ -1,4 +1,4 @@
1
- export declare const popoverRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"title" | "content" | "body" | "footer" | "header" | "description" | "indicator" | "anchor" | "trigger" | "arrow" | "arrowTip" | "positioner" | "closeTrigger", {
1
+ export declare const popoverRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"content" | "body" | "footer" | "header" | "title" | "anchor" | "trigger" | "arrow" | "arrowTip" | "positioner" | "indicator" | "description" | "closeTrigger", {
2
2
  variant: {
3
3
  responsive: {
4
4
  content: {