@pstdio/ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/chat-ui.js +515 -565
  2. package/dist/chat-ui.js.map +1 -1
  3. package/dist/components/chat-ui/tool-rendering/build-timeline.d.ts +2 -2
  4. package/dist/components/checkbox.d.ts +8 -0
  5. package/dist/components/checkbox.stories.d.ts +15 -0
  6. package/dist/components/item-section.d.ts +1 -1
  7. package/dist/components/properties.d.ts +4 -4
  8. package/dist/components/rich-text/utils/inferResourceType.d.ts +1 -1
  9. package/dist/components/scroll-area.d.ts +16 -0
  10. package/dist/components/scroll-area.stories.d.ts +7 -0
  11. package/dist/components/sidebar-next/sidebar-next-footer.d.ts +6 -0
  12. package/dist/components/sidebar-next/sidebar-next-header.d.ts +7 -0
  13. package/dist/components/sidebar-next/sidebar-next.d.ts +2 -0
  14. package/dist/components/sidebar-next/sidebar-next.store.d.ts +47 -0
  15. package/dist/components/sidebar-next/sidebar-next.store.test.d.ts +1 -0
  16. package/dist/components/sidebar-next/sidebar-next.stories.d.ts +10 -0
  17. package/dist/components/sidebar-next/sidebar-next.types.d.ts +13 -0
  18. package/dist/components/sidebar-tree/sidebar-tree.d.ts +12 -0
  19. package/dist/components/sidebar-tree/sidebar-tree.stories.d.ts +13 -0
  20. package/dist/components/sidebar-tree/sidebar-tree.types.d.ts +46 -0
  21. package/dist/empty-state-B8mbv7ZH.js +128 -0
  22. package/dist/empty-state-B8mbv7ZH.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.js +1361 -873
  25. package/dist/index.js.map +1 -1
  26. package/dist/{rich-message-CNDoACE7.js → rich-message-B2gxL8oy.js} +301 -321
  27. package/dist/rich-message-B2gxL8oy.js.map +1 -0
  28. package/dist/rich-text.js +294 -375
  29. package/dist/rich-text.js.map +1 -1
  30. package/dist/theme/recipes/progress-circle.d.ts +3 -3
  31. package/package.json +6 -1
  32. package/dist/empty-state-Bu1ocnPz.js +0 -70
  33. package/dist/empty-state-Bu1ocnPz.js.map +0 -1
  34. package/dist/rich-message-CNDoACE7.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, 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 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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"}
@@ -13,8 +13,8 @@ export declare const progressCircleSlotRecipe: {
13
13
  };
14
14
  };
15
15
  className?: string | undefined;
16
- slots: ("label" | "track" | "circle" | "view" | "root" | "valueText" | "range" | "circleTrack" | "circleRange")[] | readonly ("label" | "track" | "circle" | "view" | "root" | "valueText" | "range" | "circleTrack" | "circleRange")[];
17
- base?: Partial<Record<"label" | "track" | "circle" | "view" | "root" | "valueText" | "range" | "circleTrack" | "circleRange", import('@chakra-ui/react').SystemStyleObject | undefined>> | undefined;
16
+ slots: ("label" | "track" | "circle" | "view" | "root" | "range" | "valueText" | "circleTrack" | "circleRange")[] | readonly ("label" | "track" | "circle" | "view" | "root" | "range" | "valueText" | "circleTrack" | "circleRange")[];
17
+ base?: Partial<Record<"label" | "track" | "circle" | "view" | "root" | "range" | "valueText" | "circleTrack" | "circleRange", import('@chakra-ui/react').SystemStyleObject | undefined>> | undefined;
18
18
  defaultVariants?: ({
19
19
  size?: import('@chakra-ui/react').ConditionalValue<"sm" | "md" | "lg" | "xl" | "xs" | undefined>;
20
20
  } & {
@@ -23,6 +23,6 @@ export declare const progressCircleSlotRecipe: {
23
23
  compoundVariants?: {
24
24
  size?: ("sm" | "md" | "lg" | "xl" | "xs" | ("sm" | "md" | "lg" | "xl" | "xs")[]) | undefined;
25
25
  colorPalette?: (import('@chakra-ui/react').ColorPalette | import('@chakra-ui/react').ColorPalette[]) | undefined;
26
- css: Partial<Record<"label" | "track" | "circle" | "view" | "root" | "valueText" | "range" | "circleTrack" | "circleRange", import('@chakra-ui/react').SystemStyleObject | undefined>>;
26
+ css: Partial<Record<"label" | "track" | "circle" | "view" | "root" | "range" | "valueText" | "circleTrack" | "circleRange", import('@chakra-ui/react').SystemStyleObject | undefined>>;
27
27
  }[] | undefined;
28
28
  };
package/package.json CHANGED
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "@pstdio/ui",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/pufflyai/prompt-studio"
7
+ },
4
8
  "publishConfig": {
5
9
  "access": "public"
6
10
  },
@@ -74,6 +78,7 @@
74
78
  "react": "19.2.4",
75
79
  "react-dom": "19.2.4",
76
80
  "use-stick-to-bottom": "^1.1.3",
81
+ "zustand": "^5.0.8",
77
82
  "y-protocols": "^1.0.7",
78
83
  "y-websocket": "^3.0.0",
79
84
  "yjs": "^13.6.29"
@@ -1,70 +0,0 @@
1
- import { jsx as d, jsxs as D } from "react/jsx-runtime";
2
- import { c as _ } from "react/compiler-runtime";
3
- import { Span as S, EmptyState as g, VStack as W } from "@chakra-ui/react";
4
- import * as j from "react";
5
- const A = (R) => {
6
- const e = _(18), {
7
- fileName: r,
8
- additions: t,
9
- deletions: a,
10
- label: o,
11
- variant: n,
12
- size: s,
13
- onClick: i,
14
- onClickFileLink: l
15
- } = R, c = n === void 0 ? "outline" : n, m = (s === void 0 ? "default" : s) === "small", k = c === "outline" ? "1px solid" : "none", y = c === "outline" ? m ? "3xs" : "2xs" : "2px", v = m ? "label/S/regular" : void 0, C = i ? "pointer" : "default";
16
- let x;
17
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (x = {
18
- background: "bg.muted"
19
- }, e[0] = x) : x = e[0];
20
- let u;
21
- e[1] !== r || e[2] !== l ? (u = r && /* @__PURE__ */ d(S, { display: "inline-block", maxW: "24ch", truncate: !0, mr: "xs", title: r, onClick: (z) => {
22
- z.stopPropagation(), l?.();
23
- }, cursor: l ? "pointer" : "default", _hover: {
24
- textDecoration: l ? "underline" : "none",
25
- color: l ? "fg.blue-dark" : "fg.muted"
26
- }, children: r }), e[1] = r, e[2] = l, e[3] = u) : u = e[3];
27
- const E = `+${t}`;
28
- let p;
29
- e[4] !== E ? (p = /* @__PURE__ */ d(S, { color: "fg.success", children: E }), e[4] = E, e[5] = p) : p = e[5];
30
- const $ = `-${a}`;
31
- let h;
32
- e[6] !== $ ? (h = /* @__PURE__ */ d(S, { color: "fg.error", children: $ }), e[6] = $, e[7] = h) : h = e[7];
33
- let b;
34
- return e[8] !== o || e[9] !== i || e[10] !== h || e[11] !== k || e[12] !== y || e[13] !== v || e[14] !== C || e[15] !== u || e[16] !== p ? (b = /* @__PURE__ */ D(S, { display: "inline-flex", alignItems: "center", gap: "2xs", border: k, borderColor: "border.muted", color: "fg.muted", paddingX: y, paddingY: "1px", borderRadius: "xs", textStyle: v, cursor: C, onClick: i, _hover: x, children: [
35
- o,
36
- u,
37
- p,
38
- h
39
- ] }), e[8] = o, e[9] = i, e[10] = h, e[11] = k, e[12] = y, e[13] = v, e[14] = C, e[15] = u, e[16] = p, e[17] = b) : b = e[17], b;
40
- }, B = j.forwardRef(function(e, r) {
41
- const t = _(19);
42
- let a, o, n, s, i;
43
- t[0] !== e ? ({
44
- title: i,
45
- description: o,
46
- icon: n,
47
- children: a,
48
- ...s
49
- } = e, t[0] = e, t[1] = a, t[2] = o, t[3] = n, t[4] = s, t[5] = i) : (a = t[1], o = t[2], n = t[3], s = t[4], i = t[5]);
50
- let l;
51
- t[6] !== n ? (l = n && /* @__PURE__ */ d(g.Indicator, { children: n }), t[6] = n, t[7] = l) : l = t[7];
52
- let c;
53
- t[8] !== o || t[9] !== i ? (c = o ? /* @__PURE__ */ D(W, { textAlign: "center", children: [
54
- /* @__PURE__ */ d(g.Title, { fontWeight: "normal", children: i }),
55
- /* @__PURE__ */ d(g.Description, { children: o })
56
- ] }) : /* @__PURE__ */ d(g.Title, { fontWeight: "normal", children: i }), t[8] = o, t[9] = i, t[10] = c) : c = t[10];
57
- let f;
58
- t[11] !== a || t[12] !== l || t[13] !== c ? (f = /* @__PURE__ */ D(g.Content, { children: [
59
- l,
60
- c,
61
- a
62
- ] }), t[11] = a, t[12] = l, t[13] = c, t[14] = f) : f = t[14];
63
- let m;
64
- return t[15] !== r || t[16] !== s || t[17] !== f ? (m = /* @__PURE__ */ d(g.Root, { ref: r, ...s, children: f }), t[15] = r, t[16] = s, t[17] = f, t[18] = m) : m = t[18], m;
65
- });
66
- export {
67
- A as D,
68
- B as E
69
- };
70
- //# sourceMappingURL=empty-state-Bu1ocnPz.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"empty-state-Bu1ocnPz.js","sources":["../src/components/diff-bubble.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 { 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","EmptyState","React","forwardRef","ref","children","description","icon","rest","title","ChakraEmptyState","jsxs","VStack"],"mappings":"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"}