@pstdio/ui 0.1.1 → 0.2.1
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/chat-ui.js +552 -544
- package/dist/chat-ui.js.map +1 -1
- package/dist/components/chat-ui/components/chat-panel.d.ts +2 -0
- package/dist/components/sidebar-next/sidebar-next-footer.d.ts +6 -0
- package/dist/components/sidebar-next/sidebar-next-header.d.ts +7 -0
- package/dist/components/sidebar-next/sidebar-next.d.ts +2 -0
- package/dist/components/sidebar-next/sidebar-next.store.d.ts +47 -0
- package/dist/components/sidebar-next/sidebar-next.store.test.d.ts +1 -0
- package/dist/components/sidebar-next/sidebar-next.stories.d.ts +10 -0
- package/dist/components/sidebar-next/sidebar-next.types.d.ts +14 -0
- package/dist/components/sidebar-tree/sidebar-tree.d.ts +12 -0
- package/dist/components/sidebar-tree/sidebar-tree.stories.d.ts +13 -0
- package/dist/components/sidebar-tree/sidebar-tree.types.d.ts +46 -0
- package/dist/empty-state-kQR0gd4j.js +232 -0
- package/dist/empty-state-kQR0gd4j.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +1201 -876
- package/dist/index.js.map +1 -1
- package/dist/{rich-message-CNDoACE7.js → rich-message-B2gxL8oy.js} +301 -321
- package/dist/rich-message-B2gxL8oy.js.map +1 -0
- package/dist/rich-text.js +295 -375
- package/dist/rich-text.js.map +1 -1
- package/package.json +2 -1
- package/dist/empty-state-B8mbv7ZH.js +0 -128
- package/dist/empty-state-B8mbv7ZH.js.map +0 -1
- package/dist/rich-message-CNDoACE7.js.map +0 -1
package/dist/rich-text.js.map
CHANGED
|
@@ -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, useCallback, 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\n const formatHeading = useCallback(\n (headingSize: HeadingTagType) => {\n if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n } else {\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createParagraphNode());\n });\n }\n },\n [blockType, editor],\n );\n\n const formatBulletList = useCallback(() => {\n if (blockType !== \"bullet\") {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n }, [blockType, editor]);\n\n const formatNumberedList = useCallback(() => {\n if (blockType !== \"number\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n }, [blockType, editor]);\n\n const $updateToolbar = useCallback(() => {\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 const $updateFloatingToolbar = useCallback(() => {\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 }, [anchorElem, editor, setIsToolbarActive, $updateToolbar]);\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n $updateFloatingToolbar();\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.parentElement, editor, $updateFloatingToolbar]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n $updateFloatingToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n $updateFloatingToolbar();\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 $updateFloatingToolbar();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor, $updateFloatingToolbar]);\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, useMemo, 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 // Create Y.Doc once per component instance (survives React StrictMode remount)\n const doc = useMemo(() => new Y.Doc(), []);\n\n // Create WebsocketProvider once per component instance.\n // useMemo ensures the same provider survives StrictMode's cleanup/remount cycle,\n // avoiding the broken binding issue in CollaborationPlugin v1 (see Lexical #6640).\n const provider = useMemo(() => {\n const p = new WebsocketProvider(wsUrl, roomId, doc, { params: wsParams, connect: false });\n\n p.on(\"sync\", (isSynced: boolean) => {\n if (isSynced) setSynced(true);\n });\n\n return p;\n }, [wsUrl, roomId, doc, wsParams]);\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","t0","$","_c","editor","isToolbarActive","setIsToolbarActive","editorRef","useRef","blockType","setBlockType","useState","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","t1","headingSize","update","selection","$getSelection","$setBlocksType","$createHeadingNode","_temp2","formatHeading","t2","dispatchCommand","INSERT_UNORDERED_LIST_COMMAND","undefined","REMOVE_LIST_COMMAND","formatBulletList","t3","INSERT_ORDERED_LIST_COMMAND","formatNumberedList","t4","Symbol","for","selection_1","$isRangeSelection","hasFormat","nextBlockType","anchor","getNode","$updateToolbar","t5","selection_2","editorElem","current","nativeSelection","window","getSelection","rootElement","getRootElement","isCollapsed","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","bottom","$updateFloatingToolbar","t6","t7","getEditorState","read","addEventListener","removeEventListener","useEffect","t8","t9","mergeRegister","registerUpdateListener","t10","editorState","registerCommand","SELECTION_CHANGE_COMMAND","_payload","COMMAND_PRIORITY_CRITICAL","CLICK_COMMAND","_payload_0","selection_3","COMMAND_PRIORITY_HIGH","t11","t12","FORMAT_TEXT_COMMAND","t13","Text","t14","Tooltip","jsx","IconButton","t15","t16","t17","t18","t19","t20","t21","t22","t23","Stack","borderLeft","borderColor","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","selection_0","_temp","$createParagraphNode","useFloatingTextToolbar","createPortal","FloatingTextFormatToolbarPlugin","document","body","useLexicalComposerContext","AwarenessCursorsCSS","CollaborativeMarkdownEditor","props","roomId","wsUrl","wsParams","userName","userColor","placeholder","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","Y","Doc","doc","p","WebsocketProvider","params","connect","isSynced","on","provider","disconnect","namespace","nodes","editorNodes","onError","editable","theme","editorTheme","initialConfig","CollaborationPluginV2__EXPERIMENTAL","LinkPlugin","ListPlugin","HorizontalRulePlugin","ImportCodeBlocksPlugin","EquationPlugin","ContentEditable","Box","RichTextPlugin","LexicalErrorBoundary","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","MarkdownEditor","autoFocus","debug","defaultState","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","Boolean","$convertFromMarkdownString","editorTransformers","AutoFocusPlugin","HistoryPlugin","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pstdio/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/pufflyai/prompt-studio"
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
"react": "19.2.4",
|
|
79
79
|
"react-dom": "19.2.4",
|
|
80
80
|
"use-stick-to-bottom": "^1.1.3",
|
|
81
|
+
"zustand": "^5.0.8",
|
|
81
82
|
"y-protocols": "^1.0.7",
|
|
82
83
|
"y-websocket": "^3.0.0",
|
|
83
84
|
"yjs": "^13.6.29"
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { jsx as u, jsxs as D } from "react/jsx-runtime";
|
|
2
|
-
import { c as $ } from "react/compiler-runtime";
|
|
3
|
-
import { Span as k, EmptyState as x, VStack as W } from "@chakra-ui/react";
|
|
4
|
-
import { DiffEditor as z } from "@monaco-editor/react";
|
|
5
|
-
import * as R from "react";
|
|
6
|
-
const F = (h) => {
|
|
7
|
-
const e = $(18), {
|
|
8
|
-
fileName: s,
|
|
9
|
-
additions: t,
|
|
10
|
-
deletions: f,
|
|
11
|
-
label: n,
|
|
12
|
-
variant: d,
|
|
13
|
-
size: a,
|
|
14
|
-
onClick: i,
|
|
15
|
-
onClickFileLink: o
|
|
16
|
-
} = h, l = d === void 0 ? "outline" : d, c = (a === void 0 ? "default" : a) === "small", g = l === "outline" ? "1px solid" : "none", m = l === "outline" ? c ? "3xs" : "2xs" : "2px", B = c ? "label/S/regular" : void 0, _ = i ? "pointer" : "default";
|
|
17
|
-
let v;
|
|
18
|
-
e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (v = {
|
|
19
|
-
background: "bg.muted"
|
|
20
|
-
}, e[0] = v) : v = e[0];
|
|
21
|
-
let p;
|
|
22
|
-
e[1] !== s || e[2] !== o ? (p = s && /* @__PURE__ */ u(k, { display: "inline-block", maxW: "24ch", truncate: !0, mr: "xs", title: s, onClick: (w) => {
|
|
23
|
-
w.stopPropagation(), o?.();
|
|
24
|
-
}, cursor: o ? "pointer" : "default", _hover: {
|
|
25
|
-
textDecoration: o ? "underline" : "none",
|
|
26
|
-
color: o ? "fg.blue-dark" : "fg.muted"
|
|
27
|
-
}, children: s }), e[1] = s, e[2] = o, e[3] = p) : p = e[3];
|
|
28
|
-
const C = `+${t}`;
|
|
29
|
-
let b;
|
|
30
|
-
e[4] !== C ? (b = /* @__PURE__ */ u(k, { color: "fg.success", children: C }), e[4] = C, e[5] = b) : b = e[5];
|
|
31
|
-
const E = `-${f}`;
|
|
32
|
-
let S;
|
|
33
|
-
e[6] !== E ? (S = /* @__PURE__ */ u(k, { color: "fg.error", children: E }), e[6] = E, e[7] = S) : S = e[7];
|
|
34
|
-
let y;
|
|
35
|
-
return e[8] !== n || e[9] !== i || e[10] !== S || e[11] !== g || e[12] !== m || e[13] !== B || e[14] !== _ || e[15] !== p || e[16] !== b ? (y = /* @__PURE__ */ D(k, { display: "inline-flex", alignItems: "center", gap: "2xs", border: g, borderColor: "border.muted", color: "fg.muted", paddingX: m, paddingY: "1px", borderRadius: "xs", textStyle: B, cursor: _, onClick: i, _hover: v, children: [
|
|
36
|
-
n,
|
|
37
|
-
p,
|
|
38
|
-
b,
|
|
39
|
-
S
|
|
40
|
-
] }), e[8] = n, e[9] = i, e[10] = S, e[11] = g, e[12] = m, e[13] = B, e[14] = _, e[15] = p, e[16] = b, e[17] = y) : y = e[17], y;
|
|
41
|
-
}, T = {
|
|
42
|
-
base: "vs-dark",
|
|
43
|
-
inherit: !0,
|
|
44
|
-
rules: [],
|
|
45
|
-
colors: {
|
|
46
|
-
"editor.background": "#0a0d15",
|
|
47
|
-
"editor.foreground": "#f5f5f5",
|
|
48
|
-
"editor.lineHighlightBackground": "#22252C",
|
|
49
|
-
"editorCursor.foreground": "#A7A7A7",
|
|
50
|
-
"editorWhitespace.foreground": "#3B3B3B",
|
|
51
|
-
"editorIndentGuide.background": "#404040",
|
|
52
|
-
"editorIndentGuide.activeBackground": "#707070"
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
function H(h) {
|
|
56
|
-
const e = $(11), {
|
|
57
|
-
original: s,
|
|
58
|
-
modified: t,
|
|
59
|
-
language: f,
|
|
60
|
-
sideBySide: n,
|
|
61
|
-
disableScroll: d
|
|
62
|
-
} = h, a = f === void 0 ? "plaintext" : f, i = n === void 0 ? !1 : n, o = d === void 0 ? !0 : d;
|
|
63
|
-
let l;
|
|
64
|
-
e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (l = {
|
|
65
|
-
enabled: !1
|
|
66
|
-
}, e[0] = l) : l = e[0];
|
|
67
|
-
let r;
|
|
68
|
-
e[1] !== o ? (r = o ? {
|
|
69
|
-
scrollbar: {
|
|
70
|
-
vertical: "hidden",
|
|
71
|
-
horizontal: "hidden",
|
|
72
|
-
useShadows: !1,
|
|
73
|
-
alwaysConsumeMouseWheel: !1
|
|
74
|
-
},
|
|
75
|
-
overviewRulerLanes: 0
|
|
76
|
-
} : {}, e[1] = o, e[2] = r) : r = e[2];
|
|
77
|
-
let c;
|
|
78
|
-
e[3] !== i || e[4] !== r ? (c = {
|
|
79
|
-
renderSideBySide: i,
|
|
80
|
-
readOnly: !0,
|
|
81
|
-
fontSize: 11,
|
|
82
|
-
minimap: l,
|
|
83
|
-
wordWrap: "on",
|
|
84
|
-
scrollBeyondLastLine: !1,
|
|
85
|
-
...r
|
|
86
|
-
}, e[3] = i, e[4] = r, e[5] = c) : c = e[5];
|
|
87
|
-
const g = c;
|
|
88
|
-
let m;
|
|
89
|
-
return e[6] !== a || e[7] !== t || e[8] !== g || e[9] !== s ? (m = /* @__PURE__ */ u(z, { width: "100%", height: "100%", original: s, modified: t, language: a, theme: "ps-theme", options: g, beforeMount: I, onMount: A }), e[6] = a, e[7] = t, e[8] = g, e[9] = s, e[10] = m) : m = e[10], m;
|
|
90
|
-
}
|
|
91
|
-
function A(h, e) {
|
|
92
|
-
e.editor.setTheme("ps-theme");
|
|
93
|
-
}
|
|
94
|
-
function I(h) {
|
|
95
|
-
h.editor.defineTheme("ps-theme", T);
|
|
96
|
-
}
|
|
97
|
-
const N = R.forwardRef(function(e, s) {
|
|
98
|
-
const t = $(19);
|
|
99
|
-
let f, n, d, a, i;
|
|
100
|
-
t[0] !== e ? ({
|
|
101
|
-
title: i,
|
|
102
|
-
description: n,
|
|
103
|
-
icon: d,
|
|
104
|
-
children: f,
|
|
105
|
-
...a
|
|
106
|
-
} = e, t[0] = e, t[1] = f, t[2] = n, t[3] = d, t[4] = a, t[5] = i) : (f = t[1], n = t[2], d = t[3], a = t[4], i = t[5]);
|
|
107
|
-
let o;
|
|
108
|
-
t[6] !== d ? (o = d && /* @__PURE__ */ u(x.Indicator, { children: d }), t[6] = d, t[7] = o) : o = t[7];
|
|
109
|
-
let l;
|
|
110
|
-
t[8] !== n || t[9] !== i ? (l = n ? /* @__PURE__ */ D(W, { textAlign: "center", children: [
|
|
111
|
-
/* @__PURE__ */ u(x.Title, { fontWeight: "normal", children: i }),
|
|
112
|
-
/* @__PURE__ */ u(x.Description, { children: n })
|
|
113
|
-
] }) : /* @__PURE__ */ u(x.Title, { fontWeight: "normal", children: i }), t[8] = n, t[9] = i, t[10] = l) : l = t[10];
|
|
114
|
-
let r;
|
|
115
|
-
t[11] !== f || t[12] !== o || t[13] !== l ? (r = /* @__PURE__ */ D(x.Content, { children: [
|
|
116
|
-
o,
|
|
117
|
-
l,
|
|
118
|
-
f
|
|
119
|
-
] }), t[11] = f, t[12] = o, t[13] = l, t[14] = r) : r = t[14];
|
|
120
|
-
let c;
|
|
121
|
-
return t[15] !== s || t[16] !== a || t[17] !== r ? (c = /* @__PURE__ */ u(x.Root, { ref: s, ...a, children: r }), t[15] = s, t[16] = a, t[17] = r, t[18] = c) : c = t[18], c;
|
|
122
|
-
});
|
|
123
|
-
export {
|
|
124
|
-
H as D,
|
|
125
|
-
N as E,
|
|
126
|
-
F as a
|
|
127
|
-
};
|
|
128
|
-
//# sourceMappingURL=empty-state-B8mbv7ZH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"empty-state-B8mbv7ZH.js","sources":["../src/components/diff-bubble.tsx","../src/components/code-editor.tsx","../src/components/diff-editor.tsx","../src/components/empty-state.tsx"],"sourcesContent":["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, 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 { DiffEditor as MonacoDiffEditor } from \"@monaco-editor/react\";\nimport { useMemo } from \"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 = useMemo(() => {\n return {\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 }, [sideBySide, disableScroll]);\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"],"names":["DiffBubble","props","$","_c","fileName","additions","deletions","label","variant","t0","size","t1","onClick","onClickFileLink","undefined","isSmall","t2","t3","t4","t5","t6","Symbol","for","background","t7","jsx","Span","e","stopPropagation","textDecoration","color","t8","t9","t10","t11","t12","customTheme","base","inherit","rules","colors","DiffEditor","original","modified","language","sideBySide","disableScroll","enabled","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","overviewRulerLanes","renderSideBySide","readOnly","fontSize","minimap","wordWrap","scrollBeyondLastLine","options","MonacoDiffEditor","_temp","_temp2","_editor","monaco_0","monaco","editor","setTheme","defineTheme","EmptyState","React","forwardRef","ref","children","description","icon","rest","title","ChakraEmptyState","jsxs","VStack"],"mappings":"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"}
|