@pstdio/ui 0.16.0 → 0.18.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.
- package/dist/{MermaidComponent-BCMQqPqu.js → MermaidComponent-BPiVFNYK.js} +2 -2
- package/dist/{MermaidComponent-BCMQqPqu.js.map → MermaidComponent-BPiVFNYK.js.map} +1 -1
- package/dist/chat-ui.js +1618 -1102
- package/dist/chat-ui.js.map +1 -1
- package/dist/{checkbox-D5AzFRlb.js → checkbox-B2zYVemL.js} +28 -28
- package/dist/checkbox-B2zYVemL.js.map +1 -0
- package/dist/components/chat-ui/components/chat-input-actions.d.ts +1 -0
- package/dist/components/chat-ui/components/chat-input.d.ts +8 -2
- package/dist/components/chat-ui/components/chat-panel.d.ts +11 -5
- package/dist/components/chat-ui/components/composer-constants.d.ts +1 -0
- package/dist/components/chat-ui/components/conversation-browse.d.ts +22 -0
- package/dist/components/chat-ui/components/message-types.d.ts +14 -0
- package/dist/components/chat-ui/components/queued-follow-up-list-state.d.ts +4 -0
- package/dist/components/chat-ui/components/queued-follow-up-list.d.ts +11 -0
- package/dist/components/chat-ui/components/timeline.d.ts +5 -0
- package/dist/components/chat-ui/components/working-indicator.d.ts +9 -0
- package/dist/components/chat-ui/components/workspace-hub.d.ts +8 -1
- package/dist/components/chat-ui/index.d.ts +4 -2
- package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -2
- package/dist/components/chat-ui/tool-rendering/question-prompt.d.ts +9 -0
- package/dist/components/data-table/build-columns.d.ts +13 -2
- package/dist/components/data-table/categorical-color-cell.d.ts +8 -0
- package/dist/components/data-table/color-cell-style.d.ts +13 -0
- package/dist/components/data-table/color-scale-cell.d.ts +7 -0
- package/dist/components/data-table/data-table-column-menu.d.ts +15 -0
- package/dist/components/data-table/data-table-header.d.ts +10 -0
- package/dist/components/data-table/data-table-stat-chart.d.ts +21 -0
- package/dist/components/data-table/data-table-state.d.ts +27 -0
- package/dist/components/data-table/data-table-stats-row.d.ts +11 -0
- package/dist/components/data-table/data-table-stats.d.ts +19 -0
- package/dist/components/data-table/data-table-table-parts.d.ts +21 -0
- package/dist/components/data-table/data-table.story-descriptions.d.ts +6 -0
- package/dist/components/data-table/data-table.story-fixtures.d.ts +6 -0
- package/dist/components/data-table/editable-cells-story.d.ts +9 -0
- package/dist/components/data-table/friendly-json-display.d.ts +31 -0
- package/dist/components/data-table/index.d.ts +3 -1
- package/dist/components/data-table/json-cell.d.ts +6 -0
- package/dist/components/data-table/pagination-footer.d.ts +4 -1
- package/dist/components/data-table/selection-toolbar.d.ts +3 -1
- package/dist/components/data-table/types.d.ts +72 -0
- package/dist/components/diff-viewer/code-editor.d.ts +2 -0
- package/dist/components/diff-viewer/index.d.ts +1 -1
- package/dist/components/diff-viewer/monaco-browser.d.ts +1 -0
- package/dist/components/{data-renderer → kanban-renderer}/display-menu.d.ts +4 -4
- package/dist/components/{data-renderer → kanban-renderer}/filter-menu.d.ts +3 -3
- package/dist/components/kanban-renderer/index.d.ts +19 -0
- package/dist/components/kanban-renderer/kanban-renderer-attribute-badge.d.ts +7 -0
- package/dist/components/{data-renderer/data-renderer-board-column-header.d.ts → kanban-renderer/kanban-renderer-board-column-header.d.ts} +2 -2
- package/dist/components/{data-renderer/data-renderer-board-group-section.d.ts → kanban-renderer/kanban-renderer-board-group-section.d.ts} +2 -2
- package/dist/components/{data-renderer/data-renderer-board-move.d.ts → kanban-renderer/kanban-renderer-board-move.d.ts} +3 -3
- package/dist/components/{data-renderer/data-renderer-board.d.ts → kanban-renderer/kanban-renderer-board.d.ts} +15 -14
- package/dist/components/{data-renderer/data-renderer-card.d.ts → kanban-renderer/kanban-renderer-card.d.ts} +4 -3
- package/dist/components/{data-renderer/data-renderer-content.d.ts → kanban-renderer/kanban-renderer-content.d.ts} +8 -8
- package/dist/components/kanban-renderer/kanban-renderer-create-dialog.d.ts +12 -0
- package/dist/components/kanban-renderer/kanban-renderer-create-field.d.ts +10 -0
- package/dist/components/kanban-renderer/kanban-renderer-grouping.d.ts +23 -0
- package/dist/components/{data-renderer/data-renderer-helpers.d.ts → kanban-renderer/kanban-renderer-helpers.d.ts} +15 -15
- package/dist/components/kanban-renderer/kanban-renderer-list-items.d.ts +25 -0
- package/dist/components/kanban-renderer/kanban-renderer-list.d.ts +43 -0
- package/dist/components/{data-renderer/data-renderer-story-fixtures.d.ts → kanban-renderer/kanban-renderer-story-fixtures.d.ts} +3 -2
- package/dist/components/kanban-renderer/kanban-renderer-toolbar.d.ts +15 -0
- package/dist/components/kanban-renderer/kanban-renderer-view-bar.d.ts +14 -0
- package/dist/components/kanban-renderer/kanban-renderer-views.d.ts +12 -0
- package/dist/components/{data-renderer/data-renderer.d.ts → kanban-renderer/kanban-renderer.d.ts} +11 -8
- package/dist/components/{data-renderer → kanban-renderer}/types.d.ts +51 -8
- package/dist/components/kanban-renderer/use-kanban-renderer-store.d.ts +78 -0
- package/dist/components/layout/index.d.ts +1 -0
- package/dist/components/layout/panel-header.constants.d.ts +2 -0
- package/dist/components/layout/resizable-split-layout.d.ts +3 -2
- package/dist/components/layout/resizable-split-layout.geometry.d.ts +56 -0
- package/dist/components/layout/resizable-split-layout.handle.d.ts +6 -2
- package/dist/components/layout/resizable-split-layout.panels.d.ts +25 -0
- package/dist/components/list-row/list-row-actions.d.ts +1 -0
- package/dist/components/list-row/list-row-content.d.ts +7 -0
- package/dist/components/list-row/list-row.types.d.ts +4 -1
- package/dist/components/overlays/attached-menu.d.ts +6 -0
- package/dist/components/overlays/attachment-chip.d.ts +13 -0
- package/dist/components/overlays/index.d.ts +6 -2
- package/dist/components/overlays/resource-context-menu.d.ts +13 -1
- package/dist/components/overlays/searchable-menu-input.d.ts +9 -0
- package/dist/components/param-editor/index.d.ts +6 -2
- package/dist/components/param-editor/inputs/action-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/boolean-input.d.ts +13 -0
- package/dist/components/param-editor/inputs/color-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/date-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/file-upload-input.d.ts +15 -0
- package/dist/components/param-editor/inputs/file-upload-value.d.ts +7 -0
- package/dist/components/param-editor/inputs/horizontal-text-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/markdown-input.d.ts +13 -0
- package/dist/components/param-editor/inputs/number-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/range-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/resource-input.d.ts +2 -0
- package/dist/components/param-editor/inputs/segmented-input.d.ts +1 -0
- package/dist/components/param-editor/inputs/selection-input.d.ts +7 -6
- package/dist/components/param-editor/inputs/selection-menu.d.ts +33 -0
- package/dist/components/param-editor/inputs/text-input.d.ts +1 -0
- package/dist/components/param-editor/param-editor-advanced-field.d.ts +14 -0
- package/dist/components/param-editor/param-editor-control-fixtures.d.ts +24 -0
- package/dist/components/param-editor/param-editor-field.d.ts +2 -0
- package/dist/components/param-editor/param-editor-horizontal.d.ts +3 -2
- package/dist/components/param-editor/param-editor-label.d.ts +1 -0
- package/dist/components/param-editor/param-editor-presentation.d.ts +3 -0
- package/dist/components/param-editor/param-editor-read-only-field.d.ts +9 -0
- package/dist/components/param-editor/param-editor-section.d.ts +1 -0
- package/dist/components/param-editor/param-editor.d.ts +1 -0
- package/dist/components/param-editor/param-editor.types.d.ts +59 -18
- package/dist/components/param-editor/resolve-param-value.d.ts +2 -0
- package/dist/components/primitives/chip.d.ts +4 -0
- package/dist/components/primitives/index.d.ts +2 -0
- package/dist/components/primitives/resource-badge.d.ts +12 -10
- package/dist/components/rich-text/index.d.ts +1 -0
- package/dist/components/rich-text/lazy-markdown-editor.d.ts +2 -0
- package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/ReferenceMenuPlugin.d.ts +2 -1
- package/dist/components/rich-text/prompt-input/plugins/ReferenceMenuPlugin/hooks/useContextLookup.d.ts +2 -1
- package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/ReferencePlugin.d.ts +2 -1
- package/dist/components/rich-text/prompt-input/prompt-input.d.ts +3 -2
- package/dist/components/rich-text/types.d.ts +1 -1
- package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
- package/dist/components/{sidebar/sidebar-footer.d.ts → sidenav/sidenav-footer.d.ts} +2 -2
- package/dist/components/{sidebar/sidebar-header.d.ts → sidenav/sidenav-header.d.ts} +2 -2
- package/dist/components/sidenav/sidenav.d.ts +2 -0
- package/dist/components/sidenav/sidenav.store.d.ts +49 -0
- package/dist/components/{sidebar/sidebar.types.d.ts → sidenav/sidenav.types.d.ts} +5 -5
- package/dist/components/tab-strip/tab-visibility-filter.d.ts +1 -0
- package/dist/components/terminal/terminal.d.ts +11 -0
- package/dist/components/tree-list/tree-list-visibility-filter.d.ts +0 -1
- package/dist/components/tree-list/tree-list.d.ts +1 -1
- package/dist/components/tree-list/tree-list.types.d.ts +4 -0
- package/dist/data-table.js +1321 -0
- package/dist/data-table.js.map +1 -0
- package/dist/diff.js +370 -366
- package/dist/diff.js.map +1 -1
- package/dist/font/css/prompt-studio-icons.css +690 -0
- package/dist/font/prompt-studio-icons.eot +0 -0
- package/dist/font/prompt-studio-icons.svg +1 -0
- package/dist/font/prompt-studio-icons.ttf +0 -0
- package/dist/font/prompt-studio-icons.woff +0 -0
- package/dist/font/prompt-studio-icons.woff2 +0 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1854 -3381
- package/dist/index.js.map +1 -1
- package/dist/kanban-renderer-toolbar-Db1mIWWd.js +1318 -0
- package/dist/kanban-renderer-toolbar-Db1mIWWd.js.map +1 -0
- package/dist/kanban-renderer.js +1101 -0
- package/dist/kanban-renderer.js.map +1 -0
- package/dist/lazy-markdown-editor-DwhqQ-NN.js +26 -0
- package/dist/lazy-markdown-editor-DwhqQ-NN.js.map +1 -0
- package/dist/list-row-BYWwcbGK.js +823 -0
- package/dist/list-row-BYWwcbGK.js.map +1 -0
- package/dist/markdown-DDd2ESoH.js +743 -0
- package/dist/markdown-DDd2ESoH.js.map +1 -0
- package/dist/markdown-editor-CYVkzt8t.js +741 -0
- package/dist/markdown-editor-CYVkzt8t.js.map +1 -0
- package/dist/monaco-browser-CO0NxK_Z.js +19 -0
- package/dist/monaco-browser-CO0NxK_Z.js.map +1 -0
- package/dist/param-editor-BCZOw5Gt.js +140 -0
- package/dist/param-editor-BCZOw5Gt.js.map +1 -0
- package/dist/param-editor-field-ZzZwgjZ_.js +2094 -0
- package/dist/param-editor-field-ZzZwgjZ_.js.map +1 -0
- package/dist/resource-badge-CuItchgL.js +98 -0
- package/dist/resource-badge-CuItchgL.js.map +1 -0
- package/dist/rich-message--eRzjWYK.js +730 -0
- package/dist/rich-message--eRzjWYK.js.map +1 -0
- package/dist/rich-text.js +114 -827
- package/dist/rich-text.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/terminal.js +197 -177
- package/dist/terminal.js.map +1 -1
- package/dist/theme/primitives/fonts.d.ts +3 -0
- package/dist/theme/primitives/sizes.d.ts +23 -0
- package/dist/theme/recipes/badge.d.ts +8 -0
- package/dist/theme/recipes/button.d.ts +6 -0
- package/dist/theme/recipes/color-picker.d.ts +18 -1
- package/dist/theme/recipes/switch.d.ts +17 -0
- package/dist/theme/recipes/tabs.d.ts +4 -4
- package/dist/theme/tokens/colors.d.ts +18 -24
- package/dist/{theme-CJBYBJaA.js → theme-poQlUgt0.js} +414 -240
- package/dist/theme-poQlUgt0.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/tree-list-BAja2eXU.js +1033 -0
- package/dist/tree-list-BAja2eXU.js.map +1 -0
- package/package.json +11 -4
- package/dist/checkbox-D5AzFRlb.js.map +0 -1
- package/dist/components/data-renderer/card-interaction-guard.d.ts +0 -2
- package/dist/components/data-renderer/data-renderer-attribute-badge.d.ts +0 -7
- package/dist/components/data-renderer/data-renderer-grouping.d.ts +0 -23
- package/dist/components/data-renderer/data-renderer-list.d.ts +0 -39
- package/dist/components/data-renderer/data-renderer-toolbar.d.ts +0 -12
- package/dist/components/data-renderer/index.d.ts +0 -18
- package/dist/components/data-renderer/use-data-renderer-store.d.ts +0 -59
- package/dist/components/param-editor/inputs/file-accept.d.ts +0 -22
- package/dist/components/param-editor/inputs/file-drop-input.d.ts +0 -14
- package/dist/components/sidebar/sidebar.d.ts +0 -2
- package/dist/components/sidebar/sidebar.store.d.ts +0 -49
- package/dist/data-renderer.js +0 -1669
- package/dist/data-renderer.js.map +0 -1
- package/dist/list-row-mi3Hn-Um.js +0 -740
- package/dist/list-row-mi3Hn-Um.js.map +0 -1
- package/dist/resource-badge-qCWHP-wQ.js +0 -99
- package/dist/resource-badge-qCWHP-wQ.js.map +0 -1
- package/dist/rich-message-DBf_5YlW.js +0 -1450
- package/dist/rich-message-DBf_5YlW.js.map +0 -1
- package/dist/theme-CJBYBJaA.js.map +0 -1
- package/dist/tree-list-CcuZMLS5.js +0 -930
- package/dist/tree-list-CcuZMLS5.js.map +0 -1
- package/dist/workspace-badge-Fuo-1zPj.js +0 -314
- package/dist/workspace-badge-Fuo-1zPj.js.map +0 -1
- /package/dist/components/{data-renderer/data-renderer-badge-helpers.d.ts → kanban-renderer/kanban-renderer-badge-helpers.d.ts} +0 -0
- /package/dist/components/{data-renderer/data-renderer-enum-helpers.d.ts → kanban-renderer/kanban-renderer-enum-helpers.d.ts} +0 -0
- /package/dist/components/{data-renderer → kanban-renderer}/use-resolved-attributes.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-editor-CYVkzt8t.js","sources":["../src/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.tsx","../src/components/rich-text/shared/plugins/LinkEditorPlugin/commands.ts","../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/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"],"sourcesContent":["import \"./CodeBlockActionsPlugin.css\";\n\nimport { IconButton } from \"@chakra-ui/react\";\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 \"@/components/primitives/tooltip\";\nimport { $isCodeNode } from \"../../lexical-code\";\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=\"subtle\"\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 { createCommand, type LexicalCommand } from \"lexical\";\n\nexport const TOGGLE_LINK_EDIT_MODE_COMMAND: LexicalCommand<boolean> = createCommand(\"TOGGLE_LINK_EDIT_MODE_COMMAND\");\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 \"@/components/primitives/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-subtle)\",\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 { $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 { $createCodeNode } from \"../../lexical-code\";\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","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 \"@/components/primitives/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 { MarkdownShortcutPlugin } from \"@lexical/react/LexicalMarkdownShortcutPlugin\";\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 {isEditable ? <MarkdownShortcutPlugin transformers={editorTransformers} /> : null}\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=\"45rem\" 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"],"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","TOGGLE_LINK_EDIT_MODE_COMMAND","createCommand","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","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","LinkEditorContent","isActive","isLinkEditMode","editedLinkUrl","editedLinkUrlIsValid","linkUrl","href","inputRef","onEditedLinkUrlChange","onInputKeyDown","onClose","onSubmit","onEdit","onRemove","value","Input","X","preventFocusLoss","jsxs","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","Box","useLinkEditorToolbar","activeEditor","setActiveEditor","$updateToolbar","focusLinkNode","focusAutoLinkNode","badNode","getNodes","filter","find","node_0","autoLinkNode","autoLinkIsUnlinked","getIsUnlinked","is","newEditor","_temp2","payload_0","payload","selection_0","node_1","linkNode_0","metaKey","ctrlKey","open","$isLineBreakNode","LinkEditorPlugin","LinkPlugin","LexicalLinkPlugin","MarkdownEditor","autoFocus","debug","defaultState","placeholder","scrollable","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","$convertFromMarkdownString","normalizeMarkdownListIndentation","editorTransformers","namespace","nodes","editorNodes","onError","editable","theme","editorTheme","initialConfig","AutoFocusPlugin","HistoryPlugin","ListPlugin","TabIndentationPlugin","CheckListPlugin","MarkdownShortcutPlugin","HorizontalRulePlugin","CodeHighlightingPlugin","ImportCodeBlocksPlugin","EquationPlugin","ContentEditable","Flex","RichTextPlugin","LexicalErrorBoundary","Fragment","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","LexicalComposer","error","console"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { loader as o } from "@monaco-editor/react";
|
|
2
|
+
import * as e from "monaco-editor";
|
|
3
|
+
import n from "monaco-editor/esm/vs/editor/editor.worker?worker";
|
|
4
|
+
import t from "monaco-editor/esm/vs/language/css/css.worker?worker";
|
|
5
|
+
import i from "monaco-editor/esm/vs/language/html/html.worker?worker";
|
|
6
|
+
import s from "monaco-editor/esm/vs/language/json/json.worker?worker";
|
|
7
|
+
import m from "monaco-editor/esm/vs/language/typescript/ts.worker?worker";
|
|
8
|
+
const W = () => (self.MonacoEnvironment = {
|
|
9
|
+
getWorker(c, r) {
|
|
10
|
+
return r === "json" ? new s() : ["css", "scss", "less"].includes(r) ? new t() : ["html", "handlebars", "razor"].includes(r) ? new i() : ["typescript", "javascript"].includes(r) ? new m() : new n();
|
|
11
|
+
}
|
|
12
|
+
}, o.config({
|
|
13
|
+
monaco: e
|
|
14
|
+
}), o.init().then(() => {
|
|
15
|
+
}));
|
|
16
|
+
export {
|
|
17
|
+
W as initializeMonaco
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=monaco-browser-CO0NxK_Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monaco-browser-CO0NxK_Z.js","sources":["../src/components/diff-viewer/monaco-browser.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\n\nimport { loader } from \"@monaco-editor/react\";\nimport * as monaco from \"monaco-editor\";\nimport editorWorker from \"monaco-editor/esm/vs/editor/editor.worker?worker\";\nimport cssWorker from \"monaco-editor/esm/vs/language/css/css.worker?worker\";\nimport htmlWorker from \"monaco-editor/esm/vs/language/html/html.worker?worker\";\nimport jsonWorker from \"monaco-editor/esm/vs/language/json/json.worker?worker\";\nimport tsWorker from \"monaco-editor/esm/vs/language/typescript/ts.worker?worker\";\n\nexport const initializeMonaco = () => {\n self.MonacoEnvironment = {\n getWorker(_, label) {\n if (label === \"json\") return new jsonWorker();\n if ([\"css\", \"scss\", \"less\"].includes(label)) return new cssWorker();\n if ([\"html\", \"handlebars\", \"razor\"].includes(label)) return new htmlWorker();\n if ([\"typescript\", \"javascript\"].includes(label)) return new tsWorker();\n return new editorWorker();\n },\n };\n\n loader.config({ monaco });\n return loader.init().then(() => undefined);\n};\n"],"names":["initializeMonaco","self","MonacoEnvironment","getWorker","_","label","jsonWorker","includes","cssWorker","htmlWorker","tsWorker","editorWorker","loader","config","monaco","init","then"],"mappings":";;;;;;;AAUO,MAAMA,IAAmBA,OAC9BC,KAAKC,oBAAoB;AAAA,EACvBC,UAAUC,GAAGC,GAAO;AAClB,WAAIA,MAAU,SAAe,IAAIC,EAAAA,IAC7B,CAAC,OAAO,QAAQ,MAAM,EAAEC,SAASF,CAAK,IAAU,IAAIG,EAAAA,IACpD,CAAC,QAAQ,cAAc,OAAO,EAAED,SAASF,CAAK,IAAU,IAAII,EAAAA,IAC5D,CAAC,cAAc,YAAY,EAAEF,SAASF,CAAK,IAAU,IAAIK,EAAAA,IACtD,IAAIC,EAAAA;AAAAA,EACb;AAAA,GAGFC,EAAOC,OAAO;AAAA,EAAEC,QAAAA;AAAAA,CAAQ,GACjBF,EAAOG,KAAAA,EAAOC,KAAK,MAAA;AAAA,CAAe;"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { jsx as p, jsxs as $ } from "react/jsx-runtime";
|
|
2
|
+
import { c as T } from "react/compiler-runtime";
|
|
3
|
+
import { Collapsible as R, Box as V, Stack as B, Flex as k, Icon as z, Button as H, Text as _ } from "@chakra-ui/react";
|
|
4
|
+
import { ChevronDown as I } from "lucide-react";
|
|
5
|
+
import { useState as A } from "react";
|
|
6
|
+
import { P as D } from "./param-editor-field-ZzZwgjZ_.js";
|
|
7
|
+
const j = (C) => {
|
|
8
|
+
const e = T(7), {
|
|
9
|
+
title: s,
|
|
10
|
+
description: l
|
|
11
|
+
} = C;
|
|
12
|
+
let n;
|
|
13
|
+
e[0] !== s ? (n = /* @__PURE__ */ p(_, { textStyle: "label/M/medium", color: "fg", truncate: !0, children: s }), e[0] = s, e[1] = n) : n = e[1];
|
|
14
|
+
let r;
|
|
15
|
+
e[2] !== l ? (r = l ? /* @__PURE__ */ p(_, { textStyle: "label/XS/regular", color: "fg.muted", lineClamp: 2, children: l }) : null, e[2] = l, e[3] = r) : r = e[3];
|
|
16
|
+
let t;
|
|
17
|
+
return e[4] !== n || e[5] !== r ? (t = /* @__PURE__ */ $(B, { gap: "2xs", minW: "0", textAlign: "left", children: [
|
|
18
|
+
n,
|
|
19
|
+
r
|
|
20
|
+
] }), e[4] = n, e[5] = r, e[6] = t) : t = e[6], t;
|
|
21
|
+
}, M = (C) => {
|
|
22
|
+
const e = T(14), {
|
|
23
|
+
title: s,
|
|
24
|
+
description: l,
|
|
25
|
+
open: n,
|
|
26
|
+
collapsible: r,
|
|
27
|
+
onToggle: t
|
|
28
|
+
} = C;
|
|
29
|
+
if (!r) {
|
|
30
|
+
let m;
|
|
31
|
+
return e[0] !== l || e[1] !== s ? (m = /* @__PURE__ */ p(k, { alignItems: "center", justifyContent: "space-between", minHeight: "2.25rem", px: "sm", py: "xs", children: /* @__PURE__ */ p(j, { title: s, description: l }) }), e[0] = l, e[1] = s, e[2] = m) : m = e[2], m;
|
|
32
|
+
}
|
|
33
|
+
let o;
|
|
34
|
+
e[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = {
|
|
35
|
+
bg: "transparent"
|
|
36
|
+
}, e[3] = o) : o = e[3];
|
|
37
|
+
let d;
|
|
38
|
+
e[4] !== l || e[5] !== s ? (d = /* @__PURE__ */ p(j, { title: s, description: l }), e[4] = l, e[5] = s, e[6] = d) : d = e[6];
|
|
39
|
+
const x = n ? "rotate(0deg)" : "rotate(-90deg)";
|
|
40
|
+
let a;
|
|
41
|
+
e[7] !== x ? (a = /* @__PURE__ */ p(z, { as: I, boxSize: "14px", color: "fg.muted", flexShrink: 0, transform: x, transition: "transform 120ms ease" }), e[7] = x, e[8] = a) : a = e[8];
|
|
42
|
+
let i;
|
|
43
|
+
return e[9] !== t || e[10] !== n || e[11] !== d || e[12] !== a ? (i = /* @__PURE__ */ $(H, { "aria-expanded": n, borderRadius: "0", height: "auto", justifyContent: "space-between", minHeight: "2.25rem", onClick: t, px: "sm", py: "xs", size: "xs", variant: "ghost", width: "full", _expanded: o, children: [
|
|
44
|
+
d,
|
|
45
|
+
a
|
|
46
|
+
] }), e[9] = t, e[10] = n, e[11] = d, e[12] = a, e[13] = i) : i = e[13], i;
|
|
47
|
+
}, X = (C) => {
|
|
48
|
+
const e = T(18), {
|
|
49
|
+
params: s,
|
|
50
|
+
defaultValues: l,
|
|
51
|
+
onChange: n,
|
|
52
|
+
onOpenResource: r,
|
|
53
|
+
readOnly: t,
|
|
54
|
+
fullWidth: o,
|
|
55
|
+
defaultCollapsed: d,
|
|
56
|
+
isFirst: x,
|
|
57
|
+
variant: a
|
|
58
|
+
} = C;
|
|
59
|
+
let i = d || x ? "2xs" : "xs";
|
|
60
|
+
a === "small" && (i = "none");
|
|
61
|
+
const m = i;
|
|
62
|
+
let h;
|
|
63
|
+
if (e[0] !== l || e[1] !== o || e[2] !== n || e[3] !== r || e[4] !== s || e[5] !== t || e[6] !== a) {
|
|
64
|
+
let c;
|
|
65
|
+
e[8] !== l || e[9] !== o || e[10] !== n || e[11] !== r || e[12] !== t || e[13] !== a ? (c = (f) => /* @__PURE__ */ p(V, { px: "sm", py: a === "small" ? "2xs" : "xs", children: /* @__PURE__ */ p(D, { param: f, defaultValues: l, onChange: n, onOpenResource: r, readOnly: t, fullWidth: o, size: a === "small" ? "xs" : "sm" }) }, f.id), e[8] = l, e[9] = o, e[10] = n, e[11] = r, e[12] = t, e[13] = a, e[14] = c) : c = e[14], h = s.map(c), e[0] = l, e[1] = o, e[2] = n, e[3] = r, e[4] = s, e[5] = t, e[6] = a, e[7] = h;
|
|
66
|
+
} else
|
|
67
|
+
h = e[7];
|
|
68
|
+
let u;
|
|
69
|
+
return e[15] !== i || e[16] !== h ? (u = /* @__PURE__ */ p(B, { gap: "0", py: m, children: h }), e[15] = i, e[16] = h, e[17] = u) : u = e[17], u;
|
|
70
|
+
}, w = (C) => {
|
|
71
|
+
const e = T(22), {
|
|
72
|
+
title: s,
|
|
73
|
+
description: l,
|
|
74
|
+
params: n,
|
|
75
|
+
defaultValues: r,
|
|
76
|
+
onChange: t,
|
|
77
|
+
onOpenResource: o,
|
|
78
|
+
readOnly: d,
|
|
79
|
+
fullWidth: x,
|
|
80
|
+
collapsible: a,
|
|
81
|
+
defaultCollapsed: i,
|
|
82
|
+
isFirst: m,
|
|
83
|
+
variant: h
|
|
84
|
+
} = C, u = i === void 0 ? !1 : i, c = m === void 0 ? !1 : m, f = h === void 0 ? "default" : h, [y, S] = A(!u), b = !!(!!s && a), v = b ? y : !0, P = c ? "0" : "1px";
|
|
85
|
+
let g;
|
|
86
|
+
e[0] !== b || e[1] !== v || e[2] !== l || e[3] !== s ? (g = s ? /* @__PURE__ */ p(M, { title: s, description: l, open: v, collapsible: b, onToggle: () => S(q) }) : null, e[0] = b, e[1] = v, e[2] = l, e[3] = s, e[4] = g) : g = e[4];
|
|
87
|
+
let O;
|
|
88
|
+
e[5] !== u || e[6] !== r || e[7] !== x || e[8] !== c || e[9] !== t || e[10] !== o || e[11] !== n || e[12] !== d || e[13] !== f ? (O = /* @__PURE__ */ p(R.Content, { children: /* @__PURE__ */ p(X, { params: n, defaultValues: r, onChange: t, onOpenResource: o, readOnly: d, fullWidth: x, defaultCollapsed: u, isFirst: c, variant: f }) }), e[5] = u, e[6] = r, e[7] = x, e[8] = c, e[9] = t, e[10] = o, e[11] = n, e[12] = d, e[13] = f, e[14] = O) : O = e[14];
|
|
89
|
+
let F;
|
|
90
|
+
e[15] !== v || e[16] !== O ? (F = /* @__PURE__ */ p(R.Root, { open: v, children: O }), e[15] = v, e[16] = O, e[17] = F) : F = e[17];
|
|
91
|
+
let E;
|
|
92
|
+
return e[18] !== P || e[19] !== g || e[20] !== F ? (E = /* @__PURE__ */ $(B, { as: "section", gap: "0", borderTopWidth: P, borderColor: "border.subtle", minW: "0", children: [
|
|
93
|
+
g,
|
|
94
|
+
F
|
|
95
|
+
] }), e[18] = P, e[19] = g, e[20] = F, e[21] = E) : E = e[21], E;
|
|
96
|
+
};
|
|
97
|
+
function q(C) {
|
|
98
|
+
return !C;
|
|
99
|
+
}
|
|
100
|
+
const Y = (C) => {
|
|
101
|
+
const e = T(34), {
|
|
102
|
+
params: s,
|
|
103
|
+
groups: l,
|
|
104
|
+
defaultValues: n,
|
|
105
|
+
onChange: r,
|
|
106
|
+
onOpenResource: t,
|
|
107
|
+
readOnly: o,
|
|
108
|
+
fullWidth: d,
|
|
109
|
+
variant: x
|
|
110
|
+
} = C;
|
|
111
|
+
let a;
|
|
112
|
+
e[0] !== s ? (a = s === void 0 ? [] : s, e[0] = s, e[1] = a) : a = e[1];
|
|
113
|
+
const i = a;
|
|
114
|
+
let m;
|
|
115
|
+
e[2] !== l ? (m = l === void 0 ? [] : l, e[2] = l, e[3] = m) : m = e[3];
|
|
116
|
+
const h = m;
|
|
117
|
+
let u;
|
|
118
|
+
e[4] !== n ? (u = n === void 0 ? {} : n, e[4] = n, e[5] = u) : u = e[5];
|
|
119
|
+
const c = u, f = d === void 0 ? !1 : d, y = x === void 0 ? "default" : x, S = r ?? G;
|
|
120
|
+
let W;
|
|
121
|
+
e[6] !== c || e[7] !== f || e[8] !== S || e[9] !== t || e[10] !== i || e[11] !== o || e[12] !== y ? (W = i.length > 0 ? /* @__PURE__ */ p(w, { params: i, defaultValues: c, onChange: S, onOpenResource: t, readOnly: o, fullWidth: f, variant: y, isFirst: !0 }) : null, e[6] = c, e[7] = f, e[8] = S, e[9] = t, e[10] = i, e[11] = o, e[12] = y, e[13] = W) : W = e[13];
|
|
122
|
+
let b;
|
|
123
|
+
if (e[14] !== c || e[15] !== f || e[16] !== h || e[17] !== S || e[18] !== t || e[19] !== i.length || e[20] !== o || e[21] !== y) {
|
|
124
|
+
let P;
|
|
125
|
+
e[23] !== c || e[24] !== f || e[25] !== S || e[26] !== t || e[27] !== i.length || e[28] !== o || e[29] !== y ? (P = (g, O) => /* @__PURE__ */ p(w, { title: g.title, description: g.description, params: g.params, defaultValues: c, onChange: S, onOpenResource: t, readOnly: o, fullWidth: f, variant: y, collapsible: g.collapsible, defaultCollapsed: g.defaultCollapsed, isFirst: i.length === 0 && O === 0 }, g.id), e[23] = c, e[24] = f, e[25] = S, e[26] = t, e[27] = i.length, e[28] = o, e[29] = y, e[30] = P) : P = e[30], b = h.map(P), e[14] = c, e[15] = f, e[16] = h, e[17] = S, e[18] = t, e[19] = i.length, e[20] = o, e[21] = y, e[22] = b;
|
|
126
|
+
} else
|
|
127
|
+
b = e[22];
|
|
128
|
+
let v;
|
|
129
|
+
return e[31] !== W || e[32] !== b ? (v = /* @__PURE__ */ $(B, { flex: "1", maxW: "full", gap: "0", children: [
|
|
130
|
+
W,
|
|
131
|
+
b
|
|
132
|
+
] }), e[31] = W, e[32] = b, e[33] = v) : v = e[33], v;
|
|
133
|
+
};
|
|
134
|
+
function G() {
|
|
135
|
+
}
|
|
136
|
+
export {
|
|
137
|
+
Y as P,
|
|
138
|
+
w as a
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=param-editor-BCZOw5Gt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-editor-BCZOw5Gt.js","sources":["../src/components/param-editor/param-editor-section.tsx","../src/components/param-editor/param-editor.tsx"],"sourcesContent":["import { Box, Button, Collapsible, Flex, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useState } from \"react\";\nimport type { Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorField } from \"./param-editor-field\";\n\ninterface ParamEditorSectionProps {\n title?: string;\n description?: string;\n params: Param[];\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n isFirst?: boolean;\n variant?: \"default\" | \"small\";\n}\n\nconst ParamEditorSectionTitle = (props: { title: string; description?: string }) => {\n const { title, description } = props;\n\n return (\n <Stack gap=\"2xs\" minW=\"0\" textAlign=\"left\">\n <Text textStyle=\"label/M/medium\" color=\"fg\" truncate>\n {title}\n </Text>\n {description ? (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\" lineClamp={2}>\n {description}\n </Text>\n ) : null}\n </Stack>\n );\n};\n\nconst ParamEditorSectionHeader = (props: {\n title: string;\n description?: string;\n open: boolean;\n collapsible?: boolean;\n onToggle: () => void;\n}) => {\n const { title, description, open, collapsible, onToggle } = props;\n\n if (!collapsible) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2.25rem\" px=\"sm\" py=\"xs\">\n <ParamEditorSectionTitle title={title} description={description} />\n </Flex>\n );\n }\n\n return (\n <Button\n aria-expanded={open}\n borderRadius=\"0\"\n height=\"auto\"\n justifyContent=\"space-between\"\n minHeight=\"2.25rem\"\n onClick={onToggle}\n px=\"sm\"\n py=\"xs\"\n size=\"xs\"\n variant=\"ghost\"\n width=\"full\"\n _expanded={{ bg: \"transparent\" }}\n >\n <ParamEditorSectionTitle title={title} description={description} />\n <Icon\n as={ChevronDown}\n boxSize=\"14px\"\n color=\"fg.muted\"\n flexShrink={0}\n transform={open ? \"rotate(0deg)\" : \"rotate(-90deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Button>\n );\n};\n\nconst ParamEditorSectionBody = (props: Omit<ParamEditorSectionProps, \"title\" | \"description\" | \"collapsible\">) => {\n const { params, defaultValues, onChange, onOpenResource, readOnly, fullWidth, defaultCollapsed, isFirst, variant } =\n props;\n let sectionPadding = defaultCollapsed || isFirst ? \"2xs\" : \"xs\";\n if (variant === \"small\") sectionPadding = \"none\";\n\n return (\n <Stack gap=\"0\" py={sectionPadding}>\n {params.map((param) => (\n <Box key={param.id} px=\"sm\" py={variant === \"small\" ? \"2xs\" : \"xs\"}>\n <ParamEditorField\n param={param}\n defaultValues={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n size={variant === \"small\" ? \"xs\" : \"sm\"}\n />\n </Box>\n ))}\n </Stack>\n );\n};\n\nexport const ParamEditorSection = (props: ParamEditorSectionProps) => {\n const {\n title,\n description,\n params,\n defaultValues,\n onChange,\n onOpenResource,\n readOnly,\n fullWidth,\n collapsible,\n defaultCollapsed = false,\n isFirst = false,\n variant = \"default\",\n } = props;\n const [open, setOpen] = useState(!defaultCollapsed);\n const hasTitle = Boolean(title);\n const canCollapse = Boolean(hasTitle && collapsible);\n const contentOpen = canCollapse ? open : true;\n\n return (\n <Stack as=\"section\" gap=\"0\" borderTopWidth={isFirst ? \"0\" : \"1px\"} borderColor=\"border.subtle\" minW=\"0\">\n {title ? (\n <ParamEditorSectionHeader\n title={title}\n description={description}\n open={contentOpen}\n collapsible={canCollapse}\n onToggle={() => setOpen((current) => !current)}\n />\n ) : null}\n <Collapsible.Root open={contentOpen}>\n <Collapsible.Content>\n <ParamEditorSectionBody\n params={params}\n defaultValues={defaultValues}\n onChange={onChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n defaultCollapsed={defaultCollapsed}\n isFirst={isFirst}\n variant={variant}\n />\n </Collapsible.Content>\n </Collapsible.Root>\n </Stack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap, ResourceRefValue } from \"./param-editor.types\";\nimport { ParamEditorSection } from \"./param-editor-section\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n onOpenResource?: (ref: ResourceRefValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n variant?: \"default\" | \"small\";\n}\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const {\n params = [],\n groups = [],\n defaultValues = {},\n onChange,\n onOpenResource,\n readOnly,\n fullWidth = false,\n variant = \"default\",\n } = props;\n const handleChange = onChange ?? (() => undefined);\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"0\">\n {params.length > 0 ? (\n <ParamEditorSection\n params={params}\n defaultValues={defaultValues}\n onChange={handleChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n variant={variant}\n isFirst\n />\n ) : null}\n {groups.map((group, index) => (\n <ParamEditorSection\n key={group.id}\n title={group.title}\n description={group.description}\n params={group.params}\n defaultValues={defaultValues}\n onChange={handleChange}\n onOpenResource={onOpenResource}\n readOnly={readOnly}\n fullWidth={fullWidth}\n variant={variant}\n collapsible={group.collapsible}\n defaultCollapsed={group.defaultCollapsed}\n isFirst={params.length === 0 && index === 0}\n />\n ))}\n </Stack>\n );\n};\n"],"names":["ParamEditorSectionTitle","props","$","_c","title","description","t0","jsx","Text","t1","t2","Stack","ParamEditorSectionHeader","open","collapsible","onToggle","Flex","Symbol","for","bg","t3","Icon","ChevronDown","t4","jsxs","Button","ParamEditorSectionBody","params","defaultValues","onChange","onOpenResource","readOnly","fullWidth","defaultCollapsed","isFirst","variant","sectionPadding","param","Box","ParamEditorField","id","map","ParamEditorSection","undefined","setOpen","useState","canCollapse","Boolean","contentOpen","_temp","t5","Collapsible","t6","t7","current","ParamEditor","groups","handleChange","t8","length","t9","t10","group","index"],"mappings":"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"}
|