@pstdio/ui 0.2.0 → 0.2.2

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 (45) hide show
  1. package/dist/chat-ui.js +691 -637
  2. package/dist/chat-ui.js.map +1 -1
  3. package/dist/components/chat-ui/agent-types.d.ts +1 -0
  4. package/dist/components/chat-ui/components/ai-conversation.d.ts +21 -579
  5. package/dist/components/chat-ui/components/ai-conversation.test.d.ts +1 -0
  6. package/dist/components/chat-ui/components/ai-message.d.ts +8 -8
  7. package/dist/components/chat-ui/components/chat-panel.d.ts +2 -0
  8. package/dist/components/chat-ui/components/message-parts-renderer.stories.d.ts +1 -0
  9. package/dist/components/chat-ui/components/message-types.d.ts +8 -0
  10. package/dist/components/menu-item.d.ts +3 -1
  11. package/dist/components/menu-item.stories.d.ts +1 -1
  12. package/dist/components/rich-text/rich-message/rich-message.d.ts +1 -0
  13. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeNode.d.ts +2 -0
  14. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeNode.test.d.ts +1 -0
  15. package/dist/components/scroll-area.d.ts +1 -0
  16. package/dist/components/sidebar-next/sidebar-next-header.d.ts +1 -1
  17. package/dist/components/sidebar-next/sidebar-next.types.d.ts +3 -1
  18. package/dist/components/sidebar-tree/sidebar-tree.d.ts +2 -1
  19. package/dist/components/sidebar-tree/sidebar-tree.types.d.ts +9 -1
  20. package/dist/components/tickets/display-menu.d.ts +15 -0
  21. package/dist/components/tickets/display-menu.stories.d.ts +6 -0
  22. package/dist/components/tickets/filter-menu.d.ts +11 -0
  23. package/dist/components/tickets/filter-menu.stories.d.ts +6 -0
  24. package/dist/components/tickets/ticket-board.d.ts +7 -0
  25. package/dist/components/tickets/ticket-grouping.d.ts +22 -0
  26. package/dist/components/tickets/ticket-grouping.test.d.ts +1 -0
  27. package/dist/components/tickets/tickets-workspace.d.ts +29 -0
  28. package/dist/components/tickets/tickets-workspace.stories.d.ts +10 -0
  29. package/dist/components/tickets/types.d.ts +49 -0
  30. package/dist/components/tickets/use-workspace-store.d.ts +51 -0
  31. package/dist/components/tickets/use-workspace-store.test.d.ts +1 -0
  32. package/dist/index.d.ts +8 -1
  33. package/dist/index.js +2077 -1211
  34. package/dist/index.js.map +1 -1
  35. package/dist/{rich-message-B2gxL8oy.js → rich-message-C0_i-4Ux.js} +323 -308
  36. package/dist/rich-message-C0_i-4Ux.js.map +1 -0
  37. package/dist/rich-text.js +89 -88
  38. package/dist/rich-text.js.map +1 -1
  39. package/dist/scroll-area-DZs-GiIp.js +267 -0
  40. package/dist/scroll-area-DZs-GiIp.js.map +1 -0
  41. package/dist/style.css +1 -1
  42. package/package.json +2 -2
  43. package/dist/empty-state-B8mbv7ZH.js +0 -128
  44. package/dist/empty-state-B8mbv7ZH.js.map +0 -1
  45. package/dist/rich-message-B2gxL8oy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text.js","sources":["../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.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":["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 \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n $isListNode,\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, $isHeadingNode, 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 $isRootOrShadowRoot,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n FORMAT_TEXT_COMMAND,\n type LexicalEditor,\n type LexicalNode,\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 { Tooltip } from \"../../../../tooltip\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nconst 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\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as keyof typeof blockTypeToBlockName) : 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\nconst resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\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<keyof typeof blockTypeToBlockName>(\"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 if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n return;\n }\n\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createParagraphNode());\n });\n };\n\n const formatBulletList = () => {\n if (blockType !== \"bullet\") {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatNumberedList = () => {\n if (blockType !== \"number\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\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\n // Show floating toolbar when there's a non-collapsed text selection\n if (\n selection !== null &&\n $isRangeSelection(selection) &&\n !selection.isCollapsed() &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\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 {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\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 {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\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={formatBulletList}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n •\n </Text>\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={formatNumberedList}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n 1.\n </Text>\n </IconButton>\n </Tooltip>\n </Stack>\n </div>\n );\n}\n\nfunction useFloatingTextToolbar(editor: LexicalEditor, anchorElem: HTMLElement): React.JSX.Element | null {\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\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingTextToolbar(editor, anchorElem);\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 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 { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\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 <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\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 { 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 { $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 { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\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 { splitFrontmatter } from \"../utils/markdown\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n isEditable?: boolean;\n placeholder?: string;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const { autoFocus = false, debug = false, defaultState = \"\", isEditable = false, placeholder, onChange } = 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(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=\"100%\"\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 <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\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":["VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","anchorElem","verticalGap","horizontalOffset","scrollerElem","parentElement","style","opacity","transform","floatingElemRect","getBoundingClientRect","anchorElementRect","editorScrollerRect","top","left","height","width","right","GAP","blockTypeToBlockName","bullet","check","code","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","anchorNode","getKey","$findMatchingParent","node","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","FloatingTextToolbar","editor","isToolbarActive","setIsToolbarActive","editorRef","useRef","blockType","setBlockType","useState","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","updateFloatingToolbarRef","formatHeading","headingSize","update","selection","$getSelection","$setBlocksType","$createHeadingNode","$createParagraphNode","formatBulletList","dispatchCommand","INSERT_UNORDERED_LIST_COMMAND","undefined","REMOVE_LIST_COMMAND","formatNumberedList","INSERT_ORDERED_LIST_COMMAND","updateToolbar","$isRangeSelection","hasFormat","nextBlockType","anchor","getNode","current","editorElem","nativeSelection","window","getSelection","rootElement","getRootElement","isCollapsed","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","bottom","useEffect","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","editorState","registerCommand","SELECTION_CHANGE_COMMAND","_payload","COMMAND_PRIORITY_CRITICAL","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","Stack","jsx","Tooltip","IconButton","FORMAT_TEXT_COMMAND","Text","borderLeft","borderColor","useFloatingTextToolbar","$","_c","t0","t1","createPortal","FloatingTextFormatToolbarPlugin","document","body","useLexicalComposerContext","AwarenessCursorsCSS","Symbol","for","CollaborativeMarkdownEditor","props","roomId","wsUrl","wsParams","userName","userColor","t2","placeholder","t3","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","_temp","t4","nextProvider","WebsocketProvider","params","connect","on","isSynced","provider","t5","t6","disconnect","t7","t8","t9","namespace","nodes","editorNodes","onError","_temp2","editable","theme","editorTheme","initialConfig","t10","t11","t12","CollaborationPluginV2__EXPERIMENTAL","t13","t14","t15","t16","t17","LinkPlugin","ListPlugin","HorizontalRulePlugin","ImportCodeBlocksPlugin","EquationPlugin","t18","ContentEditable","t19","Box","t20","RichTextPlugin","LexicalErrorBoundary","t21","t22","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","Y","Doc","MarkdownEditor","autoFocus","debug","defaultState","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","Boolean","$convertFromMarkdownString","editorTransformers","AutoFocusPlugin","HistoryPlugin","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","t23","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/LinkEditorPlugin/utils/setFloatingElemPos.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":["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 \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n $isListNode,\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, $isHeadingNode, 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 $isRootOrShadowRoot,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n FORMAT_TEXT_COMMAND,\n type LexicalEditor,\n type LexicalNode,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { List, ListOrdered } 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\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nconst 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\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as keyof typeof blockTypeToBlockName) : 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\nconst resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\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<keyof typeof blockTypeToBlockName>(\"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 if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n return;\n }\n\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createParagraphNode());\n });\n };\n\n const formatBulletList = () => {\n if (blockType !== \"bullet\") {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatNumberedList = () => {\n if (blockType !== \"number\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\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\n // Show floating toolbar when there's a non-collapsed text selection\n if (\n selection !== null &&\n $isRangeSelection(selection) &&\n !selection.isCollapsed() &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\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 {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\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 {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\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={formatBulletList}\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={formatNumberedList}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n </div>\n );\n}\n\nfunction useFloatingTextToolbar(editor: LexicalEditor, anchorElem: HTMLElement): React.JSX.Element | null {\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\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingTextToolbar(editor, anchorElem);\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 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 { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\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 <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\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 { 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 { $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 { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\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 { splitFrontmatter } from \"../utils/markdown\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n isEditable?: boolean;\n placeholder?: string;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const { autoFocus = false, debug = false, defaultState = \"\", isEditable = false, placeholder, onChange } = 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(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=\"100%\"\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 <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\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":["VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","anchorElem","verticalGap","horizontalOffset","scrollerElem","parentElement","style","opacity","transform","floatingElemRect","getBoundingClientRect","anchorElementRect","editorScrollerRect","top","left","height","width","right","GAP","blockTypeToBlockName","bullet","check","code","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","anchorNode","getKey","$findMatchingParent","node","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","FloatingTextToolbar","editor","isToolbarActive","setIsToolbarActive","editorRef","useRef","blockType","setBlockType","useState","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","updateFloatingToolbarRef","formatHeading","headingSize","update","selection","$getSelection","$setBlocksType","$createHeadingNode","$createParagraphNode","formatBulletList","dispatchCommand","INSERT_UNORDERED_LIST_COMMAND","undefined","REMOVE_LIST_COMMAND","formatNumberedList","INSERT_ORDERED_LIST_COMMAND","updateToolbar","$isRangeSelection","hasFormat","nextBlockType","anchor","getNode","current","editorElem","nativeSelection","window","getSelection","rootElement","getRootElement","isCollapsed","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","bottom","useEffect","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","editorState","registerCommand","SELECTION_CHANGE_COMMAND","_payload","COMMAND_PRIORITY_CRITICAL","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","Stack","jsx","Tooltip","IconButton","FORMAT_TEXT_COMMAND","Text","borderLeft","borderColor","List","ListOrdered","useFloatingTextToolbar","$","_c","t0","t1","createPortal","FloatingTextFormatToolbarPlugin","document","body","useLexicalComposerContext","AwarenessCursorsCSS","Symbol","for","CollaborativeMarkdownEditor","props","roomId","wsUrl","wsParams","userName","userColor","t2","placeholder","t3","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","_temp","t4","nextProvider","WebsocketProvider","params","connect","on","isSynced","provider","t5","t6","disconnect","t7","t8","t9","namespace","nodes","editorNodes","onError","_temp2","editable","theme","editorTheme","initialConfig","t10","t11","t12","CollaborationPluginV2__EXPERIMENTAL","t13","t14","t15","t16","t17","LinkPlugin","ListPlugin","HorizontalRulePlugin","ImportCodeBlocksPlugin","EquationPlugin","t18","ContentEditable","t19","Box","t20","RichTextPlugin","LexicalErrorBoundary","t21","t22","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","Y","Doc","MarkdownEditor","autoFocus","debug","defaultState","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","Boolean","$convertFromMarkdownString","editorTransformers","AutoFocusPlugin","HistoryPlugin","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","t23","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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"}
@@ -0,0 +1,267 @@
1
+ import { jsx as p, jsxs as $ } from "react/jsx-runtime";
2
+ import { c as k } from "react/compiler-runtime";
3
+ import { Span as B, EmptyState as E, VStack as A, ScrollArea as R } from "@chakra-ui/react";
4
+ import { Editor as M, DiffEditor as L } from "@monaco-editor/react";
5
+ import * as _ from "react";
6
+ const D = {
7
+ base: "vs-dark",
8
+ inherit: !0,
9
+ rules: [],
10
+ colors: {
11
+ "editor.background": "#0a0d15",
12
+ "editor.foreground": "#f5f5f5",
13
+ "editor.lineHighlightBackground": "#22252C",
14
+ "editorCursor.foreground": "#A7A7A7",
15
+ "editorWhitespace.foreground": "#3B3B3B",
16
+ "editorIndentGuide.background": "#404040",
17
+ "editorIndentGuide.activeBackground": "#707070"
18
+ }
19
+ }, J = (m) => {
20
+ const e = k(15), {
21
+ defaultCode: f,
22
+ code: t,
23
+ showLineNumbers: u,
24
+ isEditable: d,
25
+ language: s,
26
+ onChange: r,
27
+ disableScroll: o
28
+ } = m, i = s === void 0 ? "javascript" : s;
29
+ let l;
30
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (l = {
31
+ enabled: !1
32
+ }, e[0] = l) : l = e[0];
33
+ const n = !d, a = u ? "on" : "off";
34
+ let c;
35
+ e[1] !== o ? (c = o ? {
36
+ scrollbar: {
37
+ vertical: "hidden",
38
+ horizontal: "hidden",
39
+ useShadows: !1,
40
+ alwaysConsumeMouseWheel: !1
41
+ },
42
+ scrollBeyondLastLine: !1,
43
+ mouseWheelScrollSensitivity: 0,
44
+ overviewRulerLanes: 0
45
+ } : {}, e[1] = o, e[2] = c) : c = e[2];
46
+ let h;
47
+ e[3] !== n || e[4] !== a || e[5] !== c ? (h = {
48
+ tabSize: 2,
49
+ minimap: l,
50
+ fontSize: 12,
51
+ readOnly: n,
52
+ lineNumbers: a,
53
+ ...c
54
+ }, e[3] = n, e[4] = a, e[5] = c, e[6] = h) : h = e[6];
55
+ const w = h;
56
+ let g;
57
+ e[7] !== r ? (g = (b) => {
58
+ r?.(b || "");
59
+ }, e[7] = r, e[8] = g) : g = e[8];
60
+ let S;
61
+ return e[9] !== t || e[10] !== f || e[11] !== i || e[12] !== w || e[13] !== g ? (S = /* @__PURE__ */ p(M, { width: "100%", height: "100%", language: i, defaultValue: f, value: t, theme: "ps-theme", options: w, onChange: g, beforeMount: T, onMount: j }), e[9] = t, e[10] = f, e[11] = i, e[12] = w, e[13] = g, e[14] = S) : S = e[14], S;
62
+ }, F = (m) => {
63
+ const e = k(11), {
64
+ original: f,
65
+ modified: t,
66
+ showLineNumbers: u,
67
+ language: d,
68
+ disableScroll: s
69
+ } = m, r = d === void 0 ? "javascript" : d;
70
+ let o;
71
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = {
72
+ enabled: !1
73
+ }, e[0] = o) : o = e[0];
74
+ const i = u ? "on" : "off";
75
+ let l;
76
+ e[1] !== s ? (l = s ? {
77
+ scrollbar: {
78
+ vertical: "hidden",
79
+ horizontal: "hidden",
80
+ useShadows: !1,
81
+ alwaysConsumeMouseWheel: !1
82
+ },
83
+ scrollBeyondLastLine: !1,
84
+ mouseWheelScrollSensitivity: 0,
85
+ overviewRulerLanes: 0
86
+ } : {}, e[1] = s, e[2] = l) : l = e[2];
87
+ let n;
88
+ e[3] !== i || e[4] !== l ? (n = {
89
+ tabSize: 2,
90
+ minimap: o,
91
+ fontSize: 12,
92
+ readOnly: !0,
93
+ originalEditable: !1,
94
+ renderSideBySide: !0,
95
+ useInlineViewWhenSpaceIsTooSmall: !0,
96
+ lineNumbers: i,
97
+ ...l
98
+ }, e[3] = i, e[4] = l, e[5] = n) : n = e[5];
99
+ const a = n;
100
+ let c;
101
+ return e[6] !== r || e[7] !== t || e[8] !== a || e[9] !== f ? (c = /* @__PURE__ */ p(L, { width: "100%", height: "100%", language: r, original: f, modified: t, theme: "ps-theme", options: a, beforeMount: I, onMount: V }), e[6] = r, e[7] = t, e[8] = a, e[9] = f, e[10] = c) : c = e[10], c;
102
+ };
103
+ function T(m) {
104
+ m.editor.defineTheme("ps-theme", D);
105
+ }
106
+ async function j(m, e) {
107
+ e.editor.setTheme("ps-theme"), e.languages.typescript.typescriptDefaults.setCompilerOptions({
108
+ jsx: e.languages.typescript.JsxEmit.React
109
+ }), m.addCommand(e.KeyMod.CtrlCmd | e.KeyCode.KeyS, async () => {
110
+ await m.getAction("editor.action.formatDocument")?.run();
111
+ }), await m.getAction("editor.action.formatDocument")?.run();
112
+ }
113
+ function I(m) {
114
+ m.editor.defineTheme("ps-theme", D);
115
+ }
116
+ function V(m, e) {
117
+ e.editor.setTheme("ps-theme"), e.languages.typescript.typescriptDefaults.setCompilerOptions({
118
+ jsx: e.languages.typescript.JsxEmit.React
119
+ });
120
+ }
121
+ const X = (m) => {
122
+ const e = k(18), {
123
+ fileName: f,
124
+ additions: t,
125
+ deletions: u,
126
+ label: d,
127
+ variant: s,
128
+ size: r,
129
+ onClick: o,
130
+ onClickFileLink: i
131
+ } = m, l = s === void 0 ? "outline" : s, a = (r === void 0 ? "default" : r) === "small", c = l === "outline" ? "1px solid" : "none", h = l === "outline" ? a ? "3xs" : "2xs" : "2px", w = a ? "label/S/regular" : void 0, g = o ? "pointer" : "default";
132
+ let S;
133
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (S = {
134
+ background: "bg.muted"
135
+ }, e[0] = S) : S = e[0];
136
+ let b;
137
+ e[1] !== f || e[2] !== i ? (b = f && /* @__PURE__ */ p(B, { display: "inline-block", maxW: "24ch", truncate: !0, mr: "xs", title: f, onClick: (W) => {
138
+ W.stopPropagation(), i?.();
139
+ }, cursor: i ? "pointer" : "default", _hover: {
140
+ textDecoration: i ? "underline" : "none",
141
+ color: i ? "fg.blue-dark" : "fg.muted"
142
+ }, children: f }), e[1] = f, e[2] = i, e[3] = b) : b = e[3];
143
+ const C = `+${t}`;
144
+ let y;
145
+ e[4] !== C ? (y = /* @__PURE__ */ p(B, { color: "fg.success", children: C }), e[4] = C, e[5] = y) : y = e[5];
146
+ const x = `-${u}`;
147
+ let v;
148
+ e[6] !== x ? (v = /* @__PURE__ */ p(B, { color: "fg.error", children: x }), e[6] = x, e[7] = v) : v = e[7];
149
+ let z;
150
+ return e[8] !== d || e[9] !== o || e[10] !== v || e[11] !== c || e[12] !== h || e[13] !== w || e[14] !== g || e[15] !== b || e[16] !== y ? (z = /* @__PURE__ */ $(B, { display: "inline-flex", alignItems: "center", gap: "2xs", border: c, borderColor: "border.muted", color: "fg.muted", paddingX: h, paddingY: "1px", borderRadius: "xs", textStyle: w, cursor: g, onClick: o, _hover: S, children: [
151
+ d,
152
+ b,
153
+ y,
154
+ v
155
+ ] }), e[8] = d, e[9] = o, e[10] = v, e[11] = c, e[12] = h, e[13] = w, e[14] = g, e[15] = b, e[16] = y, e[17] = z) : z = e[17], z;
156
+ };
157
+ function Y(m) {
158
+ const e = k(11), {
159
+ original: f,
160
+ modified: t,
161
+ language: u,
162
+ sideBySide: d,
163
+ disableScroll: s
164
+ } = m, r = u === void 0 ? "plaintext" : u, o = d === void 0 ? !1 : d, i = s === void 0 ? !0 : s;
165
+ let l;
166
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (l = {
167
+ enabled: !1
168
+ }, e[0] = l) : l = e[0];
169
+ let n;
170
+ e[1] !== i ? (n = i ? {
171
+ scrollbar: {
172
+ vertical: "hidden",
173
+ horizontal: "hidden",
174
+ useShadows: !1,
175
+ alwaysConsumeMouseWheel: !1
176
+ },
177
+ overviewRulerLanes: 0
178
+ } : {}, e[1] = i, e[2] = n) : n = e[2];
179
+ let a;
180
+ e[3] !== o || e[4] !== n ? (a = {
181
+ renderSideBySide: o,
182
+ readOnly: !0,
183
+ fontSize: 11,
184
+ minimap: l,
185
+ wordWrap: "on",
186
+ scrollBeyondLastLine: !1,
187
+ ...n
188
+ }, e[3] = o, e[4] = n, e[5] = a) : a = e[5];
189
+ const c = a;
190
+ let h;
191
+ return e[6] !== r || e[7] !== t || e[8] !== c || e[9] !== f ? (h = /* @__PURE__ */ p(L, { width: "100%", height: "100%", original: f, modified: t, language: r, theme: "ps-theme", options: c, beforeMount: O, onMount: N }), e[6] = r, e[7] = t, e[8] = c, e[9] = f, e[10] = h) : h = e[10], h;
192
+ }
193
+ function N(m, e) {
194
+ e.editor.setTheme("ps-theme");
195
+ }
196
+ function O(m) {
197
+ m.editor.defineTheme("ps-theme", D);
198
+ }
199
+ const q = _.forwardRef(function(e, f) {
200
+ const t = k(19);
201
+ let u, d, s, r, o;
202
+ t[0] !== e ? ({
203
+ title: o,
204
+ description: d,
205
+ icon: s,
206
+ children: u,
207
+ ...r
208
+ } = e, t[0] = e, t[1] = u, t[2] = d, t[3] = s, t[4] = r, t[5] = o) : (u = t[1], d = t[2], s = t[3], r = t[4], o = t[5]);
209
+ let i;
210
+ t[6] !== s ? (i = s && /* @__PURE__ */ p(E.Indicator, { children: s }), t[6] = s, t[7] = i) : i = t[7];
211
+ let l;
212
+ t[8] !== d || t[9] !== o ? (l = d ? /* @__PURE__ */ $(A, { textAlign: "center", children: [
213
+ /* @__PURE__ */ p(E.Title, { fontWeight: "normal", children: o }),
214
+ /* @__PURE__ */ p(E.Description, { children: d })
215
+ ] }) : /* @__PURE__ */ p(E.Title, { fontWeight: "normal", children: o }), t[8] = d, t[9] = o, t[10] = l) : l = t[10];
216
+ let n;
217
+ t[11] !== u || t[12] !== i || t[13] !== l ? (n = /* @__PURE__ */ $(E.Content, { children: [
218
+ i,
219
+ l,
220
+ u
221
+ ] }), t[11] = u, t[12] = i, t[13] = l, t[14] = n) : n = t[14];
222
+ let a;
223
+ return t[15] !== f || t[16] !== r || t[17] !== n ? (a = /* @__PURE__ */ p(E.Root, { ref: f, ...r, children: n }), t[15] = f, t[16] = r, t[17] = n, t[18] = a) : a = t[18], a;
224
+ }), Q = _.forwardRef(function(e, f) {
225
+ const t = k(35);
226
+ let u, d, s, r, o, i, l, n, a, c, h;
227
+ t[0] !== e ? ({
228
+ children: u,
229
+ viewportRef: h,
230
+ contentRef: s,
231
+ viewportProps: c,
232
+ contentProps: d,
233
+ verticalScrollbarProps: a,
234
+ horizontalScrollbarProps: r,
235
+ showVerticalScrollbar: i,
236
+ showHorizontalScrollbar: l,
237
+ showCorner: n,
238
+ ...o
239
+ } = e, t[0] = e, t[1] = u, t[2] = d, t[3] = s, t[4] = r, t[5] = o, t[6] = i, t[7] = l, t[8] = n, t[9] = a, t[10] = c, t[11] = h) : (u = t[1], d = t[2], s = t[3], r = t[4], o = t[5], i = t[6], l = t[7], n = t[8], a = t[9], c = t[10], h = t[11]);
240
+ const w = i === void 0 ? !0 : i, g = l === void 0 ? !1 : l, S = n === void 0 ? w && g : n;
241
+ let b;
242
+ t[12] !== u || t[13] !== d || t[14] !== s ? (b = /* @__PURE__ */ p(R.Content, { ...d, ref: s, children: u }), t[12] = u, t[13] = d, t[14] = s, t[15] = b) : b = t[15];
243
+ let C;
244
+ t[16] !== b || t[17] !== c || t[18] !== h ? (C = /* @__PURE__ */ p(R.Viewport, { ...c, ref: h, children: b }), t[16] = b, t[17] = c, t[18] = h, t[19] = C) : C = t[19];
245
+ let y;
246
+ t[20] !== w || t[21] !== a ? (y = w ? /* @__PURE__ */ p(R.Scrollbar, { ...a, borderRadius: "xs" }) : null, t[20] = w, t[21] = a, t[22] = y) : y = t[22];
247
+ let x;
248
+ t[23] !== r || t[24] !== g ? (x = g ? /* @__PURE__ */ p(R.Scrollbar, { orientation: "horizontal", ...r, borderRadius: "xs" }) : null, t[23] = r, t[24] = g, t[25] = x) : x = t[25];
249
+ let v;
250
+ t[26] !== S ? (v = S ? /* @__PURE__ */ p(R.Corner, {}) : null, t[26] = S, t[27] = v) : v = t[27];
251
+ let z;
252
+ return t[28] !== f || t[29] !== o || t[30] !== C || t[31] !== y || t[32] !== x || t[33] !== v ? (z = /* @__PURE__ */ $(R.Root, { ref: f, ...o, children: [
253
+ C,
254
+ y,
255
+ x,
256
+ v
257
+ ] }), t[28] = f, t[29] = o, t[30] = C, t[31] = y, t[32] = x, t[33] = v, t[34] = z) : z = t[34], z;
258
+ });
259
+ export {
260
+ F as C,
261
+ Y as D,
262
+ q as E,
263
+ Q as S,
264
+ X as a,
265
+ J as b
266
+ };
267
+ //# sourceMappingURL=scroll-area-DZs-GiIp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area-DZs-GiIp.js","sources":["../src/components/code-editor.tsx","../src/components/diff-bubble.tsx","../src/components/diff-editor.tsx","../src/components/empty-state.tsx","../src/components/scroll-area.tsx"],"sourcesContent":["import { DiffEditor, Editor } from \"@monaco-editor/react\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={\"ps-theme\"}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n monaco.editor.defineTheme(\"ps-theme\", customTheme);\n }}\n onMount={async (editor, monaco) => {\n monaco.editor.setTheme(\"ps-theme\");\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={\"ps-theme\"}\n options={options}\n beforeMount={(monaco) => {\n monaco.editor.defineTheme(\"ps-theme\", customTheme);\n }}\n onMount={(_, monaco) => {\n monaco.editor.setTheme(\"ps-theme\");\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","import { Span } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { ComponentProps, MouseEvent } from \"react\";\n\ninterface DiffBubbleProps extends Omit<ComponentProps<typeof Span>, \"onClick\"> {\n fileName?: string;\n additions: number;\n deletions: number;\n label?: React.ReactNode;\n variant?: \"outline\" | \"ghost\";\n size?: \"default\" | \"small\";\n onClick?: (event: MouseEvent<HTMLSpanElement>) => void;\n onClickFileLink?: () => void;\n}\n\nexport const DiffBubble = (props: DiffBubbleProps) => {\n const {\n fileName,\n additions,\n deletions,\n label,\n variant = \"outline\",\n size = \"default\",\n onClick,\n onClickFileLink,\n } = props;\n\n const isSmall = size === \"small\";\n\n return (\n <Span\n display=\"inline-flex\"\n alignItems=\"center\"\n gap={\"2xs\"}\n border={variant === \"outline\" ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n color=\"fg.muted\"\n paddingX={variant === \"outline\" ? (isSmall ? \"3xs\" : \"2xs\") : \"2px\"}\n paddingY=\"1px\"\n borderRadius=\"xs\"\n textStyle={isSmall ? \"label/S/regular\" : undefined}\n cursor={onClick ? \"pointer\" : \"default\"}\n onClick={onClick}\n _hover={{\n background: \"bg.muted\",\n }}\n >\n {label}\n {fileName && (\n <Span\n display=\"inline-block\"\n maxW=\"24ch\"\n truncate\n mr=\"xs\"\n title={fileName}\n onClick={(e) => {\n e.stopPropagation();\n onClickFileLink?.();\n }}\n cursor={onClickFileLink ? \"pointer\" : \"default\"}\n _hover={{\n textDecoration: onClickFileLink ? \"underline\" : \"none\",\n color: onClickFileLink ? \"fg.blue-dark\" : \"fg.muted\",\n }}\n >\n {fileName}\n </Span>\n )}\n <Span color=\"fg.success\">{`+${additions}`}</Span>\n <Span color=\"fg.error\">{`-${deletions}`}</Span>\n </Span>\n );\n};\n","import { DiffEditor as MonacoDiffEditor } from \"@monaco-editor/react\";\nimport { customTheme } from \"./code-editor\";\n\ninterface DiffEditorProps {\n original: string;\n modified: string;\n language?: string;\n sideBySide?: boolean;\n disableScroll?: boolean;\n}\n\nexport function DiffEditor(props: DiffEditorProps) {\n const { original, modified, language = \"plaintext\", sideBySide = false, disableScroll = true } = props;\n\n const options = {\n renderSideBySide: sideBySide,\n readOnly: true,\n fontSize: 11,\n minimap: { enabled: false },\n wordWrap: \"on\" as const,\n scrollBeyondLastLine: false,\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <MonacoDiffEditor\n width=\"100%\"\n height=\"100%\"\n original={original}\n modified={modified}\n language={language}\n theme=\"ps-theme\"\n options={options}\n beforeMount={(monaco) => {\n monaco.editor.defineTheme(\"ps-theme\", customTheme);\n }}\n onMount={(_editor, monaco) => {\n monaco.editor.setTheme(\"ps-theme\");\n }}\n />\n );\n}\n","import { EmptyState as ChakraEmptyState, VStack } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface EmptyStateProps extends ChakraEmptyState.RootProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(props, ref) {\n const { title, description, icon, children, ...rest } = props;\n return (\n <ChakraEmptyState.Root ref={ref} {...rest}>\n <ChakraEmptyState.Content>\n {icon && <ChakraEmptyState.Indicator>{icon}</ChakraEmptyState.Indicator>}\n {description ? (\n <VStack textAlign=\"center\">\n <ChakraEmptyState.Title fontWeight=\"normal\">{title}</ChakraEmptyState.Title>\n <ChakraEmptyState.Description>{description}</ChakraEmptyState.Description>\n </VStack>\n ) : (\n <ChakraEmptyState.Title fontWeight=\"normal\">{title}</ChakraEmptyState.Title>\n )}\n {children}\n </ChakraEmptyState.Content>\n </ChakraEmptyState.Root>\n );\n});\n","import { ScrollArea as ChakraScrollArea } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\ntype VerticalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\ntype HorizontalScrollbarProps = Omit<ChakraScrollArea.ScrollbarProps, \"orientation\">;\n\nexport interface ScrollAreaProps extends ChakraScrollArea.RootProps {\n viewportRef?: React.Ref<HTMLDivElement>;\n contentRef?: React.Ref<HTMLDivElement>;\n viewportProps?: ChakraScrollArea.ViewportProps;\n contentProps?: ChakraScrollArea.ContentProps;\n verticalScrollbarProps?: VerticalScrollbarProps;\n horizontalScrollbarProps?: HorizontalScrollbarProps;\n showVerticalScrollbar?: boolean;\n showHorizontalScrollbar?: boolean;\n showCorner?: boolean;\n}\n\nexport const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(function ScrollArea(props, ref) {\n const {\n children,\n viewportRef,\n contentRef,\n viewportProps,\n contentProps,\n verticalScrollbarProps,\n horizontalScrollbarProps,\n showVerticalScrollbar = true,\n showHorizontalScrollbar = false,\n showCorner = showVerticalScrollbar && showHorizontalScrollbar,\n ...rest\n } = props;\n\n return (\n <ChakraScrollArea.Root ref={ref} {...rest}>\n <ChakraScrollArea.Viewport {...viewportProps} ref={viewportRef}>\n <ChakraScrollArea.Content {...contentProps} ref={contentRef}>\n {children}\n </ChakraScrollArea.Content>\n </ChakraScrollArea.Viewport>\n {showVerticalScrollbar ? <ChakraScrollArea.Scrollbar {...verticalScrollbarProps} borderRadius={\"xs\"} /> : null}\n {showHorizontalScrollbar ? (\n <ChakraScrollArea.Scrollbar orientation=\"horizontal\" {...horizontalScrollbarProps} borderRadius={\"xs\"} />\n ) : null}\n {showCorner ? <ChakraScrollArea.Corner /> : null}\n </ChakraScrollArea.Root>\n );\n});\n"],"names":["customTheme","base","inherit","rules","colors","CodeEditor","props","$","_c","defaultCode","code","showLineNumbers","isEditable","language","t0","onChange","disableScroll","undefined","t1","Symbol","for","enabled","t2","t3","t4","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","t5","tabSize","minimap","fontSize","readOnly","lineNumbers","options","t6","value","t7","Editor","_temp","_temp2","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","jsx","DiffEditor","_temp3","_temp4","monaco","editor","defineTheme","monaco_0","setTheme","languages","typescript","typescriptDefaults","setCompilerOptions","JsxEmit","React","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","_","DiffBubble","fileName","additions","deletions","label","variant","size","onClick","onClickFileLink","isSmall","background","Span","e","stopPropagation","textDecoration","color","t8","t9","t10","t11","t12","sideBySide","wordWrap","MonacoDiffEditor","_editor","EmptyState","forwardRef","ref","children","description","icon","rest","title","ChakraEmptyState","jsxs","VStack","ScrollArea","contentProps","contentRef","horizontalScrollbarProps","verticalScrollbarProps","viewportProps","viewportRef","showVerticalScrollbar","showHorizontalScrollbar","showCorner","ChakraScrollArea"],"mappings":";;;;;AAEO,MAAMA,IAAc;AAAA,EACzBC,MAAM;AAAA,EACNC,SAAS;AAAA,EACTC,OAAO,CAAA;AAAA,EACPC,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA,EAAA;AAE1C,GAYaC,IAAaC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxB;AAAA,IAAAC,aAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,UAAAC;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAA6GV,GAArDO,IAAAC,MAAAG,SAAA,eAAAH;AAAuB,MAAAI;AAAA,EAAAX,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAIpEF,IAAA;AAAA,IAAAG,SACE;AAAA,EAAA,GACVd,OAAAW,KAAAA,IAAAX,EAAA,CAAA;AAES,QAAAe,KAACV,GACEW,IAAAZ,IAAA,OAAA;AAA8B,MAAAa;AAAA,EAAAjB,SAAAS,KACvCQ,IAAAR,IAAA;AAAA,IAAAS,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BC,sBACqB;AAAA,IAAKC,6BACE;AAAA,IAACC,oBACV;AAAA,EAAA,IAVtB,CAAA,GAYEzB,OAAAS,GAAAT,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAA0B;AAAA,EAAA1B,EAAA,CAAA,MAAAe,KAAAf,SAAAgB,KAAAhB,EAAA,CAAA,MAAAiB,KApBQS,IAAA;AAAA,IAAAC,SACL;AAAA,IAACC,SACDjB;AAAAA,IAERkB,UACS;AAAA,IAAEC,UACFf;AAAAA,IAAWgB,aACRf;AAAAA,IAA8B,GACvCC;AAAAA,EAAAA,GAaLjB,OAAAe,GAAAf,OAAAgB,GAAAhB,OAAAiB,GAAAjB,OAAA0B,KAAAA,IAAA1B,EAAA,CAAA;AArBD,QAAAgC,IAAgBN;AAqBL,MAAAO;AAAA,EAAAjC,SAAAQ,KAWGyB,IAAAC,CAAAA,MAAA;AACR1B,IAAAA,IAAW0B,KAAA,EAAW;AAAA,EAAC,GACxBlC,OAAAQ,GAAAR,OAAAiC,KAAAA,IAAAjC,EAAA,CAAA;AAAA,MAAAmC;AAAA,SAAAnC,EAAA,CAAA,MAAAG,KAAAH,EAAA,EAAA,MAAAE,KAAAF,EAAA,EAAA,MAAAM,KAAAN,EAAA,EAAA,MAAAgC,KAAAhC,UAAAiC,KAVHE,sBAACC,GAAA,EACO,OAAA,QACC,QAAA,QACG9B,UAAAA,GACIJ,cAAAA,GACPC,OAAAA,GACA,OAAA,YACE6B,SAAAA,GACC,UAAAC,GAGG,aAAAI,GAGJ,SAAAC,GAeR,GACDtC,OAAAG,GAAAH,QAAAE,GAAAF,QAAAM,GAAAN,QAAAgC,GAAAhC,QAAAiC,GAAAjC,QAAAmC,KAAAA,IAAAnC,EAAA,EAAA,GA9BFmC;AA8BE,GAYOI,IAAiBxC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAAuC,UAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAArC,iBAAAA;AAAAA,IAAAE,UAAAC;AAAAA,IAAAE,eAAAA;AAAAA,EAAAA,IAAwFV,GAA3CO,IAAAC,MAAAG,SAAA,eAAAH;AAAuB,MAAAI;AAAA,EAAAX,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAIzDF,IAAA;AAAA,IAAAG,SACE;AAAA,EAAA,GACVd,OAAAW,KAAAA,IAAAX,EAAA,CAAA;AAMY,QAAAe,IAAAX,IAAA,OAAA;AAA8B,MAAAY;AAAA,EAAAhB,SAAAS,KACvCO,IAAAP,IAAA;AAAA,IAAAS,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BC,sBACqB;AAAA,IAAKC,6BACE;AAAA,IAACC,oBACV;AAAA,EAAA,IAVtB,CAAA,GAYEzB,OAAAS,GAAAT,OAAAgB,KAAAA,IAAAhB,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAe,KAAAf,SAAAgB,KAvBQC,IAAA;AAAA,IAAAU,SACL;AAAA,IAACC,SACDjB;AAAAA,IAERkB,UACS;AAAA,IAAEC,UACF;AAAA,IAAIY,kBACI;AAAA,IAAKC,kBACL;AAAA,IAAIC,kCACY;AAAA,IAAIb,aACzBhB;AAAAA,IAA8B,GACvCC;AAAAA,EAAAA,GAaLhB,OAAAe,GAAAf,OAAAgB,GAAAhB,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAxBD,QAAAgC,IAAgBf;AAwBL,MAAAS;AAAA,SAAA1B,EAAA,CAAA,MAAAM,KAAAN,EAAA,CAAA,MAAAyC,KAAAzC,EAAA,CAAA,MAAAgC,KAAAhC,SAAAwC,KAGTd,IAAA,gBAAAmB,EAACC,GAAA,EACO,OAAA,QACC,QAAA,QACGxC,UAAAA,GACAkC,UAAAA,GACAC,UAAAA,GACH,OAAA,YACET,SAAAA,GACI,aAAAe,GAGJ,SAAAC,GAMR,GACDhD,OAAAM,GAAAN,OAAAyC,GAAAzC,OAAAgC,GAAAhC,OAAAwC,GAAAxC,QAAA0B,KAAAA,IAAA1B,EAAA,EAAA,GAlBF0B;AAkBE;AArHoB,SAAAW,EAAAY,GAAA;AAuClBA,EAAAA,EAAMC,OAAOC,YAAa,YAAY1D,CAAW;AAAC;AAvChC,eAAA6C,EAAAY,GAAAE,GAAA;AA0ClBH,EAAAA,EAAMC,OAAOG,SAAU,UAAU,GAGjCJ,EAAMK,UAAUC,WAAWC,mBAAmBC,mBAAoB;AAAA,IAAAZ,KAC3DI,EAAMK,UAAUC,WAAWG,QAAQC;AAAAA,EAAAA,CACzC,GAGDT,EAAMU,WAAYX,EAAMY,OAAOC,UAAWb,EAAMc,QAAQC,MAAO,YAAA;AAC7D,UAAMd,EAAMe,UAAW,8BAAmC,GAACC,IAAAA;AAAAA,EAAE,CAC9D,GAGD,MAAMhB,EAAMe,UAAW,8BAAmC,GAACC,IAAAA;AAAE;AAcvC,SAAAnB,EAAAE,GAAA;AAuCtBA,EAAAA,EAAMC,OAAOC,YAAa,YAAY1D,CAAW;AAAC;AAvC5B,SAAAuD,EAAAmB,GAAAf,GAAA;AA0CtBH,EAAAA,EAAMC,OAAOG,SAAU,UAAU,GAEjCJ,EAAMK,UAAUC,WAAWC,mBAAmBC,mBAAoB;AAAA,IAAAZ,KAC3DI,EAAMK,UAAUC,WAAWG,QAAQC;AAAAA,EAAAA,CACzC;AAAC;AC/HH,MAAMS,IAAarE,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxB;AAAA,IAAAoE,UAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,OAAAA;AAAAA,IAAAC,SAAAlE;AAAAA,IAAAmE,MAAA/D;AAAAA,IAAAgE,SAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,EAAAA,IASI7E,GAJF0E,IAAAlE,MAAAG,SAAA,YAAAH,GAMFsE,KALElE,MAAAD,SAAA,YAAAC,OAKuB,SAObI,IAAA0D,MAAY,YAAZ,cAAA,QAGEzD,IAAAyD,MAAY,YAAaI,IAAA,QAAA,QAAzB,OAGC5D,IAAA4D,IAAA,oBAAAnE,QACHgB,IAAAiD,IAAA,YAAA;AAA+B,MAAA1C;AAAA,EAAAjC,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAE/BoB,IAAA;AAAA,IAAA6C,YACM;AAAA,EAAA,GACb9E,OAAAiC,KAAAA,IAAAjC,EAAA,CAAA;AAAA,MAAAmC;AAAA,EAAAnC,EAAA,CAAA,MAAAqE,KAAArE,SAAA4E,KAGAzC,IAAAkC,KACC,gBAAAxB,EAACkC,GAAA,EACS,SAAA,gBACH,MAAA,QACL,UAAA,IACG,IAAA,MACIV,OAAAA,GACE,SAAAW,CAAAA,MAAA;AACPA,IAAAA,EAACC,gBAAAA,GACDL,IAAAA;AAAAA,EAAmB,GAEb,QAAAA,IAAA,YAAA,WACA,QAAA;AAAA,IAAAM,gBACUN,IAAA,cAAA;AAAA,IAAsCO,OAC/CP,IAAA,iBAAA;AAAA,EAAA,GAGRP,UAAAA,GACH,GACDrE,OAAAqE,GAAArE,OAAA4E,GAAA5E,OAAAmC,KAAAA,IAAAnC,EAAA,CAAA;AACyB,QAAAoF,IAAA,IAAId,CAAS;AAAE,MAAAe;AAAA,EAAArF,SAAAoF,KAAzCC,IAAA,gBAAAxC,EAACkC,GAAA,EAAW,OAAA,cAAcK,UAAAA,GAAgB,GAAOpF,OAAAoF,GAAApF,OAAAqF,KAAAA,IAAArF,EAAA,CAAA;AACzB,QAAAsF,IAAA,IAAIf,CAAS;AAAE,MAAAgB;AAAA,EAAAvF,SAAAsF,KAAvCC,IAAA,gBAAA1C,EAACkC,GAAA,EAAW,OAAA,YAAYO,UAAAA,GAAgB,GAAOtF,OAAAsF,GAAAtF,OAAAuF,KAAAA,IAAAvF,EAAA,CAAA;AAAA,MAAAwF;AAAA,SAAAxF,EAAA,CAAA,MAAAwE,KAAAxE,EAAA,CAAA,MAAA2E,KAAA3E,UAAAuF,KAAAvF,EAAA,EAAA,MAAAe,KAAAf,EAAA,EAAA,MAAAgB,KAAAhB,EAAA,EAAA,MAAAiB,KAAAjB,EAAA,EAAA,MAAA0B,KAAA1B,EAAA,EAAA,MAAAmC,KAAAnC,UAAAqF,KAvCjDG,sBAACT,GAAA,EACS,SAAA,eACG,YAAA,UACN,KAAA,OACG,QAAAhE,GACI,aAAA,gBACN,OAAA,YACI,UAAAC,GACD,UAAA,OACI,cAAA,MACF,WAAAC,GACH,QAAAS,GACCiD,SAAAA,GACD,QAAA1C,GAIPuC,UAAAA;AAAAA,IAAAA;AAAAA,IACArC;AAAAA,IAoBDkD;AAAAA,IACAE;AAAAA,EAAAA,GACF,GAAOvF,OAAAwE,GAAAxE,OAAA2E,GAAA3E,QAAAuF,GAAAvF,QAAAe,GAAAf,QAAAgB,GAAAhB,QAAAiB,GAAAjB,QAAA0B,GAAA1B,QAAAmC,GAAAnC,QAAAqF,GAAArF,QAAAwF,KAAAA,IAAAxF,EAAA,EAAA,GAxCPwF;AAwCO;AC3DJ,SAAA1C,EAAA/C,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAuC,UAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAnC,UAAAC;AAAAA,IAAAkF,YAAA9E;AAAAA,IAAAF,eAAAM;AAAAA,EAAAA,IAAiGhB,GAArEO,IAAAC,MAAAG,SAAA,cAAAH,GAAwBkF,IAAA9E,MAAAD,SAAA,KAAAC,GAAoBF,IAAAM,MAAAL,SAAA,KAAAK;AAAoB,MAAAC;AAAA,EAAAhB,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAMjFG,IAAA;AAAA,IAAAF,SAAW;AAAA,EAAA,GAAOd,OAAAgB,KAAAA,IAAAhB,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,SAAAS,KAGvBQ,IAAAR,IAAA;AAAA,IAAAS,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BG,oBACmB;AAAA,EAAA,IARtB,CAAA,GAUEzB,OAAAS,GAAAT,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAA0B;AAAA,EAAA1B,EAAA,CAAA,MAAAyF,KAAAzF,SAAAiB,KAjBQS,IAAA;AAAA,IAAAiB,kBACI8C;AAAAA,IAAU3D,UAClB;AAAA,IAAID,UACJ;AAAA,IAAED,SACHZ;AAAAA,IAAkB0E,UACjB;AAAA,IAAanE,sBACD;AAAA,IAAK,GACvBN;AAAAA,EAAAA,GAWLjB,OAAAyF,GAAAzF,OAAAiB,GAAAjB,OAAA0B,KAAAA,IAAA1B,EAAA,CAAA;AAlBD,QAAAgC,IAAgBN;AAkBL,MAAAO;AAAA,SAAAjC,EAAA,CAAA,MAAAM,KAAAN,EAAA,CAAA,MAAAyC,KAAAzC,EAAA,CAAA,MAAAgC,KAAAhC,SAAAwC,KAGTP,IAAA,gBAAAY,EAAC8C,GAAA,EACO,OAAA,QACC,QAAA,QACGnD,UAAAA,GACAC,UAAAA,GACAnC,UAAAA,GACJ,OAAA,YACG0B,SAAAA,GACI,aAAAK,GAGJ,SAAAC,GAER,GACDtC,OAAAM,GAAAN,OAAAyC,GAAAzC,OAAAgC,GAAAhC,OAAAwC,GAAAxC,QAAAiC,KAAAA,IAAAjC,EAAA,EAAA,GAdFiC;AAcE;AAtCC,SAAAK,EAAAsD,GAAAxC,GAAA;AAoCCH,EAAAA,EAAMC,OAAOG,SAAU,UAAU;AAAC;AApCnC,SAAAhB,EAAAY,GAAA;AAiCCA,EAAAA,EAAMC,OAAOC,YAAa,YAAY1D,CAAW;AAAC;ACnCnD,MAAMoG,IAAalC,EAAMmC,WAA4C,SAAA/F,GAAAgG,GAAA;AAAA,QAAA/F,IAAAC,EAAA,EAAA;AAAA,MAAA+F,GAAAC,GAAAC,GAAAC,GAAAC;AAAA,EAAApG,SAAAD,KAC1E;AAAA,IAAAqG,OAAAA;AAAAA,IAAAH,aAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAF,UAAAA;AAAAA,IAAA,GAAAG;AAAAA,EAAAA,IAAwDpG,GAAMC,OAAAD,GAAAC,OAAAgG,GAAAhG,OAAAiG,GAAAjG,OAAAkG,GAAAlG,OAAAmG,GAAAnG,OAAAoG,MAAAJ,IAAAhG,EAAA,CAAA,GAAAiG,IAAAjG,EAAA,CAAA,GAAAkG,IAAAlG,EAAA,CAAA,GAAAmG,IAAAnG,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,SAAAkG,KAIvD3F,IAAA2F,KAAQ,gBAAArD,EAAAwD,EAAA,WAAA,EAA6BH,UAAAA,GAAK,GAA6BlG,OAAAkG,GAAAlG,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAW;AAAA,EAAAX,EAAA,CAAA,MAAAiG,KAAAjG,SAAAoG,KACvEzF,IAAAsF,IACC,gBAAAK,EAACC,GAAA,EAAiB,WAAA,UAChB,UAAA;AAAA,IAAA,gBAAA1D,EAAAwD,EAAA,OAAA,EAAmC,YAAA,UAAUD,UAAAA,GAAM;AAAA,IACnD,gBAAAvD,EAAAwD,EAAA,aAAA,EAA+BJ,UAAAA,EAAAA,CAAY;AAAA,EAAA,GAC7C,IAEA,gBAAApD,EAAAwD,EAAA,OAAA,EAAmC,YAAA,UAAUD,UAAAA,GAAM,GACpDpG,OAAAiG,GAAAjG,OAAAoG,GAAApG,QAAAW,KAAAA,IAAAX,EAAA,EAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,EAAA,MAAAgG,KAAAhG,UAAAO,KAAAP,EAAA,EAAA,MAAAW,KATHI,IAAA,gBAAAuF,EAAAD,EAAA,SAAA,EACG9F,UAAAA;AAAAA,IAAAA;AAAAA,IACAI;AAAAA,IAQAqF;AAAAA,EAAAA,GACH,GAA2BhG,QAAAgG,GAAAhG,QAAAO,GAAAP,QAAAW,GAAAX,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAgB;AAAA,SAAAhB,EAAA,EAAA,MAAA+F,KAAA/F,UAAAmG,KAAAnG,EAAA,EAAA,MAAAe,KAZ7BC,sBAAAqF,EAAA,MAAA,EAA4BN,KAAAA,GAAG,GAAMI,GACnCpF,UAAAA,GAYF,GAAwBf,QAAA+F,GAAA/F,QAAAmG,GAAAnG,QAAAe,GAAAf,QAAAgB,KAAAA,IAAAhB,EAAA,EAAA,GAbxBgB;AAawB,CAE3B,GCTYwF,IAAa7C,EAAMmC,WAA4C,SAAA/F,GAAAgG,GAAA;AAAA,QAAA/F,IAAAC,EAAA,EAAA;AAAA,MAAA+F,GAAAS,GAAAC,GAAAC,GAAAR,GAAA5F,GAAAI,GAAAI,GAAA6F,GAAAC,GAAAC;AAAA,EAAA9G,SAAAD,KAC1E;AAAA,IAAAiG,UAAAA;AAAAA,IAAAc,aAAAA;AAAAA,IAAAJ,YAAAA;AAAAA,IAAAG,eAAAA;AAAAA,IAAAJ,cAAAA;AAAAA,IAAAG,wBAAAA;AAAAA,IAAAD,0BAAAA;AAAAA,IAAAI,uBAAAxG;AAAAA,IAAAyG,yBAAArG;AAAAA,IAAAsG,YAAAlG;AAAAA,IAAA,GAAAoF;AAAAA,EAAAA,IAYIpG,GAAMC,OAAAD,GAAAC,OAAAgG,GAAAhG,OAAAyG,GAAAzG,OAAA0G,GAAA1G,OAAA2G,GAAA3G,OAAAmG,GAAAnG,OAAAO,GAAAP,OAAAW,GAAAX,OAAAe,GAAAf,OAAA4G,GAAA5G,QAAA6G,GAAA7G,QAAA8G,MAAAd,IAAAhG,EAAA,CAAA,GAAAyG,IAAAzG,EAAA,CAAA,GAAA0G,IAAA1G,EAAA,CAAA,GAAA2G,IAAA3G,EAAA,CAAA,GAAAmG,IAAAnG,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA,GAAAW,IAAAX,EAAA,CAAA,GAAAe,IAAAf,EAAA,CAAA,GAAA4G,IAAA5G,EAAA,CAAA,GAAA6G,IAAA7G,EAAA,EAAA,GAAA8G,IAAA9G,EAAA,EAAA;AAJR,QAAA+G,IAAAxG,MAAAG,SAAA,KAAAH,GACAyG,IAAArG,MAAAD,SAAA,KAAAC,GACAsG,IAAAlG,MAAAL,SAAaqG,KAAAC,IAAbjG;AAA6D,MAAAC;AAAA,EAAAhB,EAAA,EAAA,MAAAgG,KAAAhG,UAAAyG,KAAAzG,EAAA,EAAA,MAAA0G,KAOzD1F,IAAA,gBAAA6B,EAAAqE,EAAA,SAAA,EAAA,GAA8BT,GAAmBC,QAC9CV,UAAAA,GACH,GAA2BhG,QAAAgG,GAAAhG,QAAAyG,GAAAzG,QAAA0G,GAAA1G,QAAAgB,KAAAA,IAAAhB,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,EAAA,MAAAgB,KAAAhB,UAAA6G,KAAA7G,EAAA,EAAA,MAAA8G,KAH7B7F,IAAA,gBAAA4B,EAAAqE,EAAA,UAAA,EAAA,GAA+BL,GAAoBC,KAAAA,GACjD9F,UAAAA,GAGF,GAA4BhB,QAAAgB,GAAAhB,QAAA6G,GAAA7G,QAAA8G,GAAA9G,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAA0B;AAAA,EAAA1B,EAAA,EAAA,MAAA+G,KAAA/G,UAAA4G,KAC3BlF,IAAAqF,sBAAwBG,EAAA,WAAA,EAAA,GAAgCN,GAAsC,cAAA,KAAA,CAAI,IAAlG,MAA6G5G,QAAA+G,GAAA/G,QAAA4G,GAAA5G,QAAA0B,KAAAA,IAAA1B,EAAA,EAAA;AAAA,MAAAiC;AAAA,EAAAjC,EAAA,EAAA,MAAA2G,KAAA3G,UAAAgH,KAC7G/E,IAAA+E,IACC,gBAAAnE,EAAAqE,EAAA,WAAA,EAAwC,aAAA,cAAY,GAAKP,GAAwC,cAAA,KAAA,CAAI,IADtG,MAEO3G,QAAA2G,GAAA3G,QAAAgH,GAAAhH,QAAAiC,KAAAA,IAAAjC,EAAA,EAAA;AAAA,MAAAmC;AAAA,EAAAnC,UAAAiH,KACP9E,IAAA8E,IAAa,gBAAApE,EAAAqE,EAAA,QAAA,CAAA,CAAA,IAAb,MAA+ClH,QAAAiH,GAAAjH,QAAAmC,KAAAA,IAAAnC,EAAA,EAAA;AAAA,MAAAoF;AAAA,SAAApF,UAAA+F,KAAA/F,EAAA,EAAA,MAAAmG,KAAAnG,EAAA,EAAA,MAAAiB,KAAAjB,EAAA,EAAA,MAAA0B,KAAA1B,UAAAiC,KAAAjC,EAAA,EAAA,MAAAmC,KAVlDiD,sBAAA8B,EAAA,MAAA,EAA4BnB,KAAAA,GAAG,GAAMI,GACnClF,UAAAA;AAAAA,IAAAA;AAAAA,IAKCS;AAAAA,IACAO;AAAAA,IAGAE;AAAAA,EAAAA,GACH,GAAwBnC,QAAA+F,GAAA/F,QAAAmG,GAAAnG,QAAAiB,GAAAjB,QAAA0B,GAAA1B,QAAAiC,GAAAjC,QAAAmC,GAAAnC,QAAAoF,KAAAA,IAAApF,EAAA,EAAA,GAXxBoF;AAWwB,CAE3B;"}