@lobehub/ui 5.23.5 → 5.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/A/index.mjs +2 -1
- package/es/A/index.mjs.map +1 -1
- package/es/Accordion/Accordion.mjs.map +1 -1
- package/es/Accordion/AccordionItem.mjs +0 -1
- package/es/Accordion/AccordionItem.mjs.map +1 -1
- package/es/Accordion/ArrowIcon.mjs.map +1 -1
- package/es/ActionIcon/ActionIcon.mjs.map +1 -1
- package/es/ActionIcon/components/utils.mjs +7 -9
- package/es/ActionIcon/components/utils.mjs.map +1 -1
- package/es/ActionIconGroup/ActionIconGroup.mjs.map +1 -1
- package/es/Alert/Alert.mjs.map +1 -1
- package/es/Avatar/Avatar.mjs.map +1 -1
- package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
- package/es/Burger/Burger.mjs.map +1 -1
- package/es/Checkbox/Checkbox.mjs.map +1 -1
- package/es/Checkbox/CheckboxGroup.mjs +4 -2
- package/es/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/es/CodeDiff/CodeDiff.mjs +20 -18
- package/es/CodeDiff/CodeDiff.mjs.map +1 -1
- package/es/CodeDiff/DiffPanel.mjs.map +1 -1
- package/es/CodeDiff/PatchDiff.mjs +18 -16
- package/es/CodeDiff/PatchDiff.mjs.map +1 -1
- package/es/CodeEditor/CodeEditor.mjs.map +1 -1
- package/es/Collapse/Collapse.mjs.map +1 -1
- package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
- package/es/ConfigProvider/index.mjs.map +1 -1
- package/es/ContextMenu/index.d.mts +2 -2
- package/es/ContextMenu/index.mjs +2 -2
- package/es/CopyButton/CopyButton.mjs +2 -1
- package/es/CopyButton/CopyButton.mjs.map +1 -1
- package/es/DraggablePanel/DraggablePanel.mjs.map +1 -1
- package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
- package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
- package/es/Drawer/Drawer.mjs.map +1 -1
- package/es/Dropdown/Dropdown.mjs.map +1 -1
- package/es/EditableText/ControlInput.mjs.map +1 -1
- package/es/EditableText/EditableText.mjs.map +1 -1
- package/es/EditorSlashMenu/EditorSlashMenu.mjs.map +1 -1
- package/es/EditorSlashMenu/MenuItemRenderer.mjs.map +1 -1
- package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
- package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
- package/es/Empty/Empty.mjs.map +1 -1
- package/es/FileTypeIcon/FileTypeIcon.mjs.map +1 -1
- package/es/FileTypeIcon/components/FileIcon.mjs.map +1 -1
- package/es/FileTypeIcon/components/FolderIcon.mjs.map +1 -1
- package/es/FluentEmoji/FluentEmoji.mjs.map +1 -1
- package/es/Footer/Footer.mjs.map +1 -1
- package/es/Form/Form.mjs.map +1 -1
- package/es/Form/components/FormGroup.mjs.map +1 -1
- package/es/Form/components/FormSubmitFooter.mjs.map +1 -1
- package/es/Form/components/FormTitle.mjs.map +1 -1
- package/es/FormModal/FormModal.mjs.map +1 -1
- package/es/Freeze/Freeze.mjs.map +1 -1
- package/es/GroupAvatar/GroupAvatar.mjs.map +1 -1
- package/es/GuideCard/GuideCard.mjs.map +1 -1
- package/es/Header/Header.mjs.map +1 -1
- package/es/Highlighter/FullFeatured.mjs.map +1 -1
- package/es/Highlighter/Highlighter.mjs.map +1 -1
- package/es/Highlighter/LangSelect.mjs +41 -40
- package/es/Highlighter/LangSelect.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs +2 -1
- package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/style.mjs +2 -2
- package/es/Highlighter/SyntaxHighlighter/style.mjs.map +1 -1
- package/es/Hotkey/Hotkey.mjs.map +1 -1
- package/es/HotkeyInput/HotkeyInput.mjs +3 -1
- package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
- package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
- package/es/HtmlPreview/Iframe.mjs.map +1 -1
- package/es/HtmlPreview/const.mjs +1 -1
- package/es/HtmlPreview/const.mjs.map +1 -1
- package/es/Icon/Icon.mjs.map +1 -1
- package/es/Icon/components/utils.mjs +7 -9
- package/es/Icon/components/utils.mjs.map +1 -1
- package/es/Image/Image.mjs.map +1 -1
- package/es/Image/components/Toolbar.mjs +2 -1
- package/es/Image/components/Toolbar.mjs.map +1 -1
- package/es/Image/components/usePreview.mjs.map +1 -1
- package/es/Image/components/usePreviewGroup.mjs.map +1 -1
- package/es/ImageSelect/ImageSelect.mjs.map +1 -1
- package/es/Img/index.mjs +2 -1
- package/es/Img/index.mjs.map +1 -1
- package/es/Layout/Layout.mjs.map +1 -1
- package/es/List/List.mjs.map +1 -1
- package/es/List/ListItem/index.mjs.map +1 -1
- package/es/Markdown/Markdown.mjs.map +1 -1
- package/es/Markdown/SyntaxMarkdown/MarkdownRender.mjs.map +1 -1
- package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs +2 -1
- package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs.map +1 -1
- package/es/Markdown/SyntaxMarkdown/style.mjs.map +1 -1
- package/es/Markdown/SyntaxMarkdown/useSmoothStreamContent.mjs +2 -2
- package/es/Markdown/SyntaxMarkdown/useSmoothStreamContent.mjs.map +1 -1
- package/es/Markdown/components/CodeBlock.mjs.map +1 -1
- package/es/Markdown/components/Footnotes.mjs.map +1 -1
- package/es/Markdown/components/MarkdownTable/index.mjs.map +1 -1
- package/es/Markdown/components/SearchResultCards/SearchResultCard.mjs.map +1 -1
- package/es/Markdown/components/SearchResultCards/index.mjs.map +1 -1
- package/es/MaterialFileTypeIcon/MaterialFileTypeIcon.mjs.map +1 -1
- package/es/Menu/Menu.mjs.map +1 -1
- package/es/Mermaid/FullFeatured.mjs.map +1 -1
- package/es/Mermaid/Mermaid.mjs.map +1 -1
- package/es/Mermaid/SyntaxMermaid/MermaidFallback.mjs +35 -0
- package/es/Mermaid/SyntaxMermaid/MermaidFallback.mjs.map +1 -0
- package/es/Mermaid/SyntaxMermaid/MermaidSvg.mjs +52 -0
- package/es/Mermaid/SyntaxMermaid/MermaidSvg.mjs.map +1 -0
- package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs +13 -42
- package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs.map +1 -1
- package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs +13 -43
- package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs.map +1 -1
- package/es/Mermaid/SyntaxMermaid/prepareInlineSvg.mjs +52 -0
- package/es/Mermaid/SyntaxMermaid/prepareInlineSvg.mjs.map +1 -0
- package/es/Mermaid/SyntaxMermaid/prepareMermaidSvg.mjs +20 -0
- package/es/Mermaid/SyntaxMermaid/prepareMermaidSvg.mjs.map +1 -0
- package/es/Mermaid/SyntaxMermaid/style.mjs +11 -0
- package/es/Mermaid/SyntaxMermaid/style.mjs.map +1 -1
- package/es/Mermaid/const.mjs +10 -31
- package/es/Mermaid/const.mjs.map +1 -1
- package/es/Mermaid/index.d.mts +2 -1
- package/es/Mermaid/index.mjs +2 -1
- package/es/Mermaid/type.d.mts +2 -2
- package/es/Modal/Modal.mjs.map +1 -1
- package/es/Modal/ModalStackItem.mjs.map +1 -1
- package/es/Modal/RawModalStackItem.mjs +6 -5
- package/es/Modal/RawModalStackItem.mjs.map +1 -1
- package/es/Modal/imperative.mjs +4 -2
- package/es/Modal/imperative.mjs.map +1 -1
- package/es/Modal/style.mjs.map +1 -1
- package/es/NeuralNetworkLoading/NeuralNetworkLoading.mjs +1 -1
- package/es/NeuralNetworkLoading/NeuralNetworkLoading.mjs.map +1 -1
- package/es/ScrollShadow/ScrollShadow.mjs +13 -12
- package/es/ScrollShadow/ScrollShadow.mjs.map +1 -1
- package/es/SearchBar/SearchBar.mjs.map +1 -1
- package/es/SideNav/SideNav.mjs.map +1 -1
- package/es/Skeleton/Skeleton.mjs.map +1 -1
- package/es/Skeleton/SkeletonButton.mjs +2 -1
- package/es/Skeleton/SkeletonButton.mjs.map +1 -1
- package/es/Skeleton/SkeletonParagraph.mjs.map +1 -1
- package/es/Skeleton/SkeletonTags.mjs.map +1 -1
- package/es/SliderWithInput/SliderWithInput.mjs.map +1 -1
- package/es/Snippet/Snippet.mjs.map +1 -1
- package/es/SortableList/SortableList.mjs +5 -1
- package/es/SortableList/SortableList.mjs.map +1 -1
- package/es/SortableList/components/SortableItem.mjs.map +1 -1
- package/es/Text/Text.mjs +22 -21
- package/es/Text/Text.mjs.map +1 -1
- package/es/ThemeProvider/ThemeProvider.mjs +4 -3
- package/es/ThemeProvider/ThemeProvider.mjs.map +1 -1
- package/es/ThemeSwitch/ThemeSwitch.mjs.map +1 -1
- package/es/Toc/Toc.mjs.map +1 -1
- package/es/Toc/TocMobile.mjs.map +1 -1
- package/es/Video/index.mjs.map +1 -1
- package/es/awesome/AuroraBackground/AuroraBackground.mjs.map +1 -1
- package/es/awesome/Features/FeatureItem.mjs.map +1 -1
- package/es/awesome/Giscus/Giscus.mjs.map +1 -1
- package/es/awesome/GradientButton/GradientButton.mjs +1 -3
- package/es/awesome/GradientButton/GradientButton.mjs.map +1 -1
- package/es/awesome/GridBackground/GridBackground.mjs.map +1 -1
- package/es/awesome/GridBackground/GridShowcase.mjs.map +1 -1
- package/es/awesome/GridBackground/components/Grid.mjs.map +1 -1
- package/es/awesome/Hero/Hero.mjs.map +1 -1
- package/es/awesome/Spline/ParentSize.mjs.map +1 -1
- package/es/awesome/Spline/Spine.mjs.map +1 -1
- package/es/awesome/Spotlight/Spotlight.mjs +2 -1
- package/es/awesome/Spotlight/Spotlight.mjs.map +1 -1
- package/es/awesome/SpotlightCard/SpotlightCard.mjs.map +1 -1
- package/es/awesome/SpotlightCard/SpotlightCardItem.mjs.map +1 -1
- package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
- package/es/base-ui/AutoComplete/AutoComplete.mjs.map +1 -1
- package/es/base-ui/Button/Button.mjs +13 -11
- package/es/base-ui/Button/Button.mjs.map +1 -1
- package/es/base-ui/Button/SplitButton.mjs +2 -1
- package/es/base-ui/Button/SplitButton.mjs.map +1 -1
- package/es/base-ui/Checkbox/Checkbox.mjs.map +1 -1
- package/es/base-ui/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
- package/es/base-ui/ContextMenu/ContextMenuTrigger.mjs +2 -1
- package/es/base-ui/ContextMenu/ContextMenuTrigger.mjs.map +1 -1
- package/es/base-ui/ContextMenu/imperative.d.mts +2 -2
- package/es/base-ui/ContextMenu/index.d.mts +2 -2
- package/es/base-ui/ContextMenu/renderItems.mjs +2 -1
- package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
- package/es/base-ui/ContextMenu/store.d.mts +13 -1
- package/es/base-ui/ContextMenu/store.mjs +29 -4
- package/es/base-ui/ContextMenu/store.mjs.map +1 -1
- package/es/base-ui/Drawer/Drawer.d.mts +6 -0
- package/es/base-ui/Drawer/Drawer.mjs +152 -0
- package/es/base-ui/Drawer/Drawer.mjs.map +1 -0
- package/es/base-ui/Drawer/DrawerLayerContext.mjs +10 -0
- package/es/base-ui/Drawer/DrawerLayerContext.mjs.map +1 -0
- package/es/base-ui/Drawer/DrawerPushContext.mjs +27 -0
- package/es/base-ui/Drawer/DrawerPushContext.mjs.map +1 -0
- package/es/base-ui/Drawer/atoms.d.mts +58 -0
- package/es/base-ui/Drawer/atoms.mjs +262 -0
- package/es/base-ui/Drawer/atoms.mjs.map +1 -0
- package/es/base-ui/Drawer/constants.d.mts +17 -0
- package/es/base-ui/Drawer/constants.mjs +72 -0
- package/es/base-ui/Drawer/constants.mjs.map +1 -0
- package/es/base-ui/Drawer/index.d.mts +5 -0
- package/es/base-ui/Drawer/style.mjs +295 -0
- package/es/base-ui/Drawer/style.mjs.map +1 -0
- package/es/base-ui/Drawer/type.d.mts +65 -0
- package/es/base-ui/DropdownMenu/DropdownMenu.mjs +2 -1
- package/es/base-ui/DropdownMenu/DropdownMenu.mjs.map +1 -1
- package/es/base-ui/DropdownMenu/atoms.mjs +2 -1
- package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
- package/es/base-ui/DropdownMenu/renderItems.mjs +2 -1
- package/es/base-ui/DropdownMenu/renderItems.mjs.map +1 -1
- package/es/base-ui/DropdownMenu/sharedStyle.mjs +3 -0
- package/es/base-ui/DropdownMenu/sharedStyle.mjs.map +1 -1
- package/es/base-ui/FloatingPanel/FloatingPanel.mjs.map +1 -1
- package/es/base-ui/FloatingSheet/FloatingSheet.mjs +4 -1
- package/es/base-ui/FloatingSheet/FloatingSheet.mjs.map +1 -1
- package/es/base-ui/FloatingSheet/FloatingSheetHeader.mjs.map +1 -1
- package/es/base-ui/Form/Form.mjs.map +1 -1
- package/es/base-ui/Form/components/FormField.mjs.map +1 -1
- package/es/base-ui/Form/components/FormGroup.mjs.map +1 -1
- package/es/base-ui/Form/components/FormSubmitFooter.mjs.map +1 -1
- package/es/base-ui/Form/components/FormTitle.mjs.map +1 -1
- package/es/base-ui/Input/Input.mjs.map +1 -1
- package/es/base-ui/Input/InputNumber.mjs.map +1 -1
- package/es/base-ui/Input/InputOTP.mjs.map +1 -1
- package/es/base-ui/Input/InputPassword.mjs.map +1 -1
- package/es/base-ui/Input/TextArea.mjs.map +1 -1
- package/es/base-ui/Modal/Modal.mjs.map +1 -1
- package/es/base-ui/Modal/atoms.mjs +7 -5
- package/es/base-ui/Modal/atoms.mjs.map +1 -1
- package/es/base-ui/Modal/imperative.mjs +2 -1
- package/es/base-ui/Modal/imperative.mjs.map +1 -1
- package/es/base-ui/Popover/ArrowIcon.mjs.map +1 -1
- package/es/base-ui/Popover/PopoverGroup.mjs.map +1 -1
- package/es/base-ui/Popover/PopoverStandalone.mjs.map +1 -1
- package/es/base-ui/Popover/atoms.mjs +2 -1
- package/es/base-ui/Popover/atoms.mjs.map +1 -1
- package/es/base-ui/Popover/context.mjs +4 -2
- package/es/base-ui/Popover/context.mjs.map +1 -1
- package/es/base-ui/Radio/Radio.mjs.map +1 -1
- package/es/base-ui/Radio/RadioGroup.mjs.map +1 -1
- package/es/base-ui/ScrollArea/ScrollArea.mjs.map +1 -1
- package/es/base-ui/Segmented/Segmented.mjs.map +1 -1
- package/es/base-ui/Select/Select.mjs.map +1 -1
- package/es/base-ui/Select/atoms.mjs +2 -1
- package/es/base-ui/Select/atoms.mjs.map +1 -1
- package/es/base-ui/Select/parts.mjs.map +1 -1
- package/es/base-ui/Select/renderOptions.mjs.map +1 -1
- package/es/base-ui/Slider/Slider.mjs.map +1 -1
- package/es/base-ui/Slider/SliderWithInput.mjs.map +1 -1
- package/es/base-ui/SubmenuArrowIcon.mjs.map +1 -1
- package/es/base-ui/Switch/Switch.mjs.map +1 -1
- package/es/base-ui/Switch/atoms.d.mts +3 -3
- package/es/base-ui/Switch/atoms.mjs +99 -50
- package/es/base-ui/Switch/atoms.mjs.map +1 -1
- package/es/base-ui/Switch/style.mjs +44 -1
- package/es/base-ui/Switch/style.mjs.map +1 -1
- package/es/base-ui/Switch/type.d.mts +3 -7
- package/es/base-ui/Tabs/Tabs.mjs.map +1 -1
- package/es/base-ui/Tabs/atoms.mjs.map +1 -1
- package/es/base-ui/Toast/Toast.mjs.map +1 -1
- package/es/base-ui/Toast/imperative.mjs.map +1 -1
- package/es/base-ui/Tooltip/ArrowIcon.mjs.map +1 -1
- package/es/base-ui/Tooltip/TooltipGroup.mjs.map +1 -1
- package/es/base-ui/Tooltip/TooltipStandalone.mjs.map +1 -1
- package/es/base-ui/index.d.mts +7 -2
- package/es/base-ui/index.mjs +5 -2
- package/es/brand/LobeChat/index.mjs +0 -1
- package/es/brand/LobeChat/index.mjs.map +1 -1
- package/es/brand/LobeChatText/index.mjs.map +1 -1
- package/es/brand/LobeHub/index.mjs +0 -1
- package/es/brand/LobeHub/index.mjs.map +1 -1
- package/es/brand/LobeHubText/index.mjs.map +1 -1
- package/es/brand/Logo3d/index.mjs +2 -1
- package/es/brand/Logo3d/index.mjs.map +1 -1
- package/es/brand/LogoThree/Loading.mjs.map +1 -1
- package/es/brand/LogoThree/LogoSpline.mjs.map +1 -1
- package/es/brand/LogoThree/index.mjs.map +1 -1
- package/es/brand/components/Divider.mjs.map +1 -1
- package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
- package/es/chat/ChatHeader/ChatHeader.mjs.map +1 -1
- package/es/chat/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
- package/es/chat/ChatInputArea/ChatInputArea.mjs.map +1 -1
- package/es/chat/ChatInputArea/components/ChatInputActionBar.mjs.map +1 -1
- package/es/chat/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
- package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
- package/es/chat/ChatItem/components/Actions.mjs +5 -4
- package/es/chat/ChatItem/components/Actions.mjs.map +1 -1
- package/es/chat/ChatItem/components/Avatar.mjs.map +1 -1
- package/es/chat/ChatItem/components/ErrorContent.mjs.map +1 -1
- package/es/chat/ChatItem/components/Loading.mjs.map +1 -1
- package/es/chat/ChatItem/components/MessageContent.mjs.map +1 -1
- package/es/chat/ChatItem/components/Title.mjs.map +1 -1
- package/es/chat/ChatList/ChatList.mjs +2 -1
- package/es/chat/ChatList/ChatList.mjs.map +1 -1
- package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
- package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
- package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
- package/es/chat/LoadingDots/LoadingDots.mjs.map +1 -1
- package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
- package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
- package/es/color/ColorScales/ScaleRow.mjs +0 -2
- package/es/color/ColorScales/ScaleRow.mjs.map +1 -1
- package/es/color/ColorScales/index.mjs.map +1 -1
- package/es/color/CssVar/ScaleRow.mjs.map +1 -1
- package/es/color/CssVar/VarRow.mjs.map +1 -1
- package/es/color/CssVar/index.mjs.map +1 -1
- package/es/hooks/useMarkdown/latex.mjs.map +1 -1
- package/es/hooks/useMarkdown/useMarkdownContent.mjs.map +1 -1
- package/es/hooks/useMermaid.mjs +81 -116
- package/es/hooks/useMermaid.mjs.map +1 -1
- package/es/hooks/useMermaidCdn.d.mts +10 -0
- package/es/hooks/useMermaidCdn.mjs +97 -0
- package/es/hooks/useMermaidCdn.mjs.map +1 -0
- package/es/hooks/useStreamMermaid.mjs +19 -70
- package/es/hooks/useStreamMermaid.mjs.map +1 -1
- package/es/icons/Auth0/components/Mono.mjs.map +1 -1
- package/es/icons/Authelia/components/Color.mjs.map +1 -1
- package/es/icons/Authelia/components/Mono.mjs.map +1 -1
- package/es/icons/Authentik/components/Color.mjs.map +1 -1
- package/es/icons/Authentik/components/Mono.mjs.map +1 -1
- package/es/icons/Casdoor/components/Color.mjs.map +1 -1
- package/es/icons/Casdoor/components/Mono.mjs.map +1 -1
- package/es/icons/Clerk/components/Color.mjs.map +1 -1
- package/es/icons/Clerk/components/Mono.mjs.map +1 -1
- package/es/icons/DingTalk/components/Color.mjs.map +1 -1
- package/es/icons/DingTalk/components/Mono.mjs.map +1 -1
- package/es/icons/Discord/components/Color.mjs.map +1 -1
- package/es/icons/Discord/components/Mono.mjs.map +1 -1
- package/es/icons/GoogleChat/components/Color.mjs.map +1 -1
- package/es/icons/GoogleChat/components/Mono.mjs.map +1 -1
- package/es/icons/IMessage/components/Color.mjs.map +1 -1
- package/es/icons/IMessage/components/Inner.mjs.map +1 -1
- package/es/icons/IMessage/components/Mono.mjs.map +1 -1
- package/es/icons/Lark/components/Color.mjs.map +1 -1
- package/es/icons/Lark/components/Mono.mjs.map +1 -1
- package/es/icons/Line/components/Color.mjs.map +1 -1
- package/es/icons/Line/components/Mono.mjs.map +1 -1
- package/es/icons/Logto/components/Color.mjs.map +1 -1
- package/es/icons/Logto/components/Mono.mjs.map +1 -1
- package/es/icons/MicrosoftEntra/components/Color.mjs.map +1 -1
- package/es/icons/MicrosoftEntra/components/Mono.mjs.map +1 -1
- package/es/icons/MicrosoftTeams/components/Color.mjs.map +1 -1
- package/es/icons/MicrosoftTeams/components/Mono.mjs.map +1 -1
- package/es/icons/NextAuth/components/Color.mjs.map +1 -1
- package/es/icons/NextAuth/components/Mono.mjs.map +1 -1
- package/es/icons/QQ/components/Color.mjs.map +1 -1
- package/es/icons/QQ/components/Mono.mjs.map +1 -1
- package/es/icons/Slack/components/Color.mjs.map +1 -1
- package/es/icons/Slack/components/Mono.mjs.map +1 -1
- package/es/icons/Telegram/components/Color.mjs.map +1 -1
- package/es/icons/Telegram/components/Inner.mjs.map +1 -1
- package/es/icons/Telegram/components/Mono.mjs.map +1 -1
- package/es/icons/WeChat/components/Color.mjs.map +1 -1
- package/es/icons/WeChat/components/Mono.mjs.map +1 -1
- package/es/icons/WhatsApp/components/Color.mjs.map +1 -1
- package/es/icons/WhatsApp/components/Mono.mjs.map +1 -1
- package/es/icons/Zitadel/components/Color.mjs.map +1 -1
- package/es/icons/Zitadel/components/Mono.mjs.map +1 -1
- package/es/index.d.mts +2 -2
- package/es/index.mjs +2 -2
- package/es/mdx/Callout/index.mjs.map +1 -1
- package/es/mdx/Cards/Card.mjs.map +1 -1
- package/es/mdx/FileTree/File.mjs.map +1 -1
- package/es/mdx/FileTree/Folder.mjs.map +1 -1
- package/es/mdx/Mdx/index.mjs.map +1 -1
- package/es/mdx/Tabs/Tab.mjs.map +1 -1
- package/es/mdx/Tabs/index.mjs.map +1 -1
- package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
- package/es/mdx/mdxComponents/Citation/index.mjs.map +1 -1
- package/es/mdx/mdxComponents/CodeBlock.mjs.map +1 -1
- package/es/mdx/mdxComponents/Link.mjs.map +1 -1
- package/es/mobile/ChatHeader/ChatHeader.mjs.map +1 -1
- package/es/mobile/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
- package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
- package/es/mobile/TabBar/TabBar.mjs.map +1 -1
- package/es/storybook/StoryBook/index.mjs.map +1 -1
- package/package.json +3 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchResultCard.mjs","names":["Flexbox"],"sources":["../../../../src/Markdown/components/SearchResultCards/SearchResultCard.tsx"],"sourcesContent":["'use client';\n\nimport { memo, type Ref, useMemo } from 'react';\n\nimport A from '@/A';\nimport Block from '@/Block';\nimport { Flexbox } from '@/Flex';\nimport Img from '@/Img';\nimport Text from '@/Text';\nimport { type AProps } from '@/types';\n\nimport { styles } from './style';\n\nexport interface SearchResultCardProps extends AProps {\n alt?: string;\n ref?: Ref<HTMLAnchorElement>;\n title?: string;\n url: string;\n}\n\nconst SearchResultCard = memo<SearchResultCardProps>(({ ref, url, title, alt, ...rest }) => {\n const [displayTitle, domain, host] = useMemo(() => {\n try {\n const urlObj = new URL(url);\n const domain = urlObj.hostname.replace('www.', '');\n const hostForUrl = urlObj.host;\n\n let displayTitle = title;\n if (title === url) {\n displayTitle = hostForUrl + urlObj.pathname;\n }\n\n return [displayTitle, domain, hostForUrl];\n } catch {\n return [title, url, url];\n }\n }, [url, title]);\n\n return (\n <A href={url} ref={ref} rel=\"noreferrer\" target={'_blank'} {...rest}>\n <Block\n clickable\n className={styles.container}\n gap={2}\n justify={'space-between'}\n key={url}\n paddingBlock={6}\n paddingInline={8}\n variant={'outlined'}\n >\n <Text ellipsis={{ rows: 2 }}>{displayTitle}</Text>\n <Flexbox horizontal align={'center'} gap={4}>\n <Img\n alt={alt || title || url}\n height={14}\n src={`https://icons.duckduckgo.com/ip3/${host}.ico`}\n width={14}\n />\n <Text ellipsis className={styles.url} type={'secondary'}>\n {domain}\n </Text>\n </Flexbox>\n </Block>\n </A>\n );\n});\n\nSearchResultCard.displayName = 'SearchResultCard';\n\nexport default SearchResultCard;\n"],"mappings":";;;;;;;;;;AAoBA,MAAM,mBAAmB,MAA6B,EAAE,KAAK,KAAK,OAAO,KAAK,GAAG,WAAW;CAC1F,MAAM,CAAC,cAAc,QAAQ,QAAQ,cAAc;EACjD,IAAI;GACF,MAAM,SAAS,IAAI,IAAI,GAAG;GAC1B,MAAM,SAAS,OAAO,SAAS,QAAQ,QAAQ,EAAE;GACjD,MAAM,aAAa,OAAO;GAE1B,IAAI,eAAe;GACnB,IAAI,UAAU,KACZ,eAAe,aAAa,OAAO;GAGrC,OAAO;IAAC;IAAc;IAAQ;GAAU;EAC1C,QAAQ;GACN,OAAO;IAAC;IAAO;IAAK;GAAG;EACzB;CACF,GAAG,CAAC,KAAK,KAAK,CAAC;CAEf,OACE,oBAAC,GAAD;EAAG,MAAM;EAAU;EAAK,KAAI;EAAa,QAAQ;EAAU,GAAI;
|
|
1
|
+
{"version":3,"file":"SearchResultCard.mjs","names":["Flexbox"],"sources":["../../../../src/Markdown/components/SearchResultCards/SearchResultCard.tsx"],"sourcesContent":["'use client';\n\nimport { memo, type Ref, useMemo } from 'react';\n\nimport A from '@/A';\nimport Block from '@/Block';\nimport { Flexbox } from '@/Flex';\nimport Img from '@/Img';\nimport Text from '@/Text';\nimport { type AProps } from '@/types';\n\nimport { styles } from './style';\n\nexport interface SearchResultCardProps extends AProps {\n alt?: string;\n ref?: Ref<HTMLAnchorElement>;\n title?: string;\n url: string;\n}\n\nconst SearchResultCard = memo<SearchResultCardProps>(({ ref, url, title, alt, ...rest }) => {\n const [displayTitle, domain, host] = useMemo(() => {\n try {\n const urlObj = new URL(url);\n const domain = urlObj.hostname.replace('www.', '');\n const hostForUrl = urlObj.host;\n\n let displayTitle = title;\n if (title === url) {\n displayTitle = hostForUrl + urlObj.pathname;\n }\n\n return [displayTitle, domain, hostForUrl];\n } catch {\n return [title, url, url];\n }\n }, [url, title]);\n\n return (\n <A href={url} ref={ref} rel=\"noreferrer\" target={'_blank'} {...rest}>\n <Block\n clickable\n className={styles.container}\n gap={2}\n justify={'space-between'}\n key={url}\n paddingBlock={6}\n paddingInline={8}\n variant={'outlined'}\n >\n <Text ellipsis={{ rows: 2 }}>{displayTitle}</Text>\n <Flexbox horizontal align={'center'} gap={4}>\n <Img\n alt={alt || title || url}\n height={14}\n src={`https://icons.duckduckgo.com/ip3/${host}.ico`}\n width={14}\n />\n <Text ellipsis className={styles.url} type={'secondary'}>\n {domain}\n </Text>\n </Flexbox>\n </Block>\n </A>\n );\n});\n\nSearchResultCard.displayName = 'SearchResultCard';\n\nexport default SearchResultCard;\n"],"mappings":";;;;;;;;;;AAoBA,MAAM,mBAAmB,MAA6B,EAAE,KAAK,KAAK,OAAO,KAAK,GAAG,WAAW;CAC1F,MAAM,CAAC,cAAc,QAAQ,QAAQ,cAAc;EACjD,IAAI;GACF,MAAM,SAAS,IAAI,IAAI,GAAG;GAC1B,MAAM,SAAS,OAAO,SAAS,QAAQ,QAAQ,EAAE;GACjD,MAAM,aAAa,OAAO;GAE1B,IAAI,eAAe;GACnB,IAAI,UAAU,KACZ,eAAe,aAAa,OAAO;GAGrC,OAAO;IAAC;IAAc;IAAQ;GAAU;EAC1C,QAAQ;GACN,OAAO;IAAC;IAAO;IAAK;GAAG;EACzB;CACF,GAAG,CAAC,KAAK,KAAK,CAAC;CAEf,OACE,oBAAC,GAAD;EAAG,MAAM;EAAU;EAAK,KAAI;EAAa,QAAQ;EAAU,GAAI;EAC7D,UAAA,qBAAC,OAAD;GACE,WAAA;GACA,WAAW,OAAO;GAClB,KAAK;GACL,SAAS;GAET,cAAc;GACd,eAAe;GACf,SAAS;GARX,UAAA,CAUE,oBAAC,MAAD;IAAM,UAAU,EAAE,MAAM,EAAE;IAAI,UAAA;GAAmB,CAAA,GACjD,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,KAAK;IAA1C,UAAA,CACE,oBAAC,KAAD;KACE,KAAK,OAAO,SAAS;KACrB,QAAQ;KACR,KAAK,oCAAoC,KAAK;KAC9C,OAAO;IACR,CAAA,GACD,oBAAC,MAAD;KAAM,UAAA;KAAS,WAAW,OAAO;KAAK,MAAM;KACzC,UAAA;IACG,CAAA,CACC;GACJ,CAAA,CAAA;EAjBA,GAAA,GAiBA;CACN,CAAA;AAEP,CAAC;AAED,iBAAiB,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/Markdown/components/SearchResultCards/index.tsx"],"sourcesContent":["'use client';\n\nimport { memo, type Ref } from 'react';\n\nimport { type FlexboxProps } from '@/Flex';\nimport ScrollShadow from '@/ScrollShadow';\n\nimport SearchResultCard from './SearchResultCard';\n\nexport interface SearchResultItem {\n alt?: string;\n summary?: string;\n title?: string;\n url: string;\n}\n\nexport interface SearchResultCardsProps extends FlexboxProps {\n dataSource: string[] | SearchResultItem[];\n ref?: Ref<HTMLDivElement>;\n}\n\nconst SearchResultCards = memo<SearchResultCardsProps>(({ ref, dataSource, style, ...rest }) => {\n return (\n <ScrollShadow\n hideScrollBar\n horizontal\n gap={12}\n orientation={'horizontal'}\n ref={ref}\n size={10}\n style={{ minHeight: 80, overflowX: 'scroll', paddingInlineEnd: 24, width: '100%', ...style }}\n {...rest}\n >\n {dataSource.map((link) =>\n typeof link === 'string' ? (\n <SearchResultCard key={link} url={link} />\n ) : (\n <SearchResultCard key={link.url} {...link} />\n ),\n )}\n </ScrollShadow>\n );\n});\n\nSearchResultCards.displayName = 'SearchResultCards';\n\nexport default SearchResultCards;\n"],"mappings":";;;;;;AAqBA,MAAM,oBAAoB,MAA8B,EAAE,KAAK,YAAY,OAAO,GAAG,WAAW;CAC9F,OACE,oBAAC,cAAD;EACE,eAAA;EACA,YAAA;EACA,KAAK;EACL,aAAa;EACR;EACL,MAAM;EACN,OAAO;GAAE,WAAW;GAAI,WAAW;GAAU,kBAAkB;GAAI,OAAO;GAAQ,GAAG;EAAM;EAC3F,GAAI;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/Markdown/components/SearchResultCards/index.tsx"],"sourcesContent":["'use client';\n\nimport { memo, type Ref } from 'react';\n\nimport { type FlexboxProps } from '@/Flex';\nimport ScrollShadow from '@/ScrollShadow';\n\nimport SearchResultCard from './SearchResultCard';\n\nexport interface SearchResultItem {\n alt?: string;\n summary?: string;\n title?: string;\n url: string;\n}\n\nexport interface SearchResultCardsProps extends FlexboxProps {\n dataSource: string[] | SearchResultItem[];\n ref?: Ref<HTMLDivElement>;\n}\n\nconst SearchResultCards = memo<SearchResultCardsProps>(({ ref, dataSource, style, ...rest }) => {\n return (\n <ScrollShadow\n hideScrollBar\n horizontal\n gap={12}\n orientation={'horizontal'}\n ref={ref}\n size={10}\n style={{ minHeight: 80, overflowX: 'scroll', paddingInlineEnd: 24, width: '100%', ...style }}\n {...rest}\n >\n {dataSource.map((link) =>\n typeof link === 'string' ? (\n <SearchResultCard key={link} url={link} />\n ) : (\n <SearchResultCard key={link.url} {...link} />\n ),\n )}\n </ScrollShadow>\n );\n});\n\nSearchResultCards.displayName = 'SearchResultCards';\n\nexport default SearchResultCards;\n"],"mappings":";;;;;;AAqBA,MAAM,oBAAoB,MAA8B,EAAE,KAAK,YAAY,OAAO,GAAG,WAAW;CAC9F,OACE,oBAAC,cAAD;EACE,eAAA;EACA,YAAA;EACA,KAAK;EACL,aAAa;EACR;EACL,MAAM;EACN,OAAO;GAAE,WAAW;GAAI,WAAW;GAAU,kBAAkB;GAAI,OAAO;GAAQ,GAAG;EAAM;EAC3F,GAAI;EAEH,UAAA,WAAW,KAAK,SACf,OAAO,SAAS,WACd,oBAAC,kBAAD,EAA6B,KAAK,KAAO,GAAlB,IAAkB,IAEzC,oBAAC,kBAAD,EAAiC,GAAI,KAAO,GAArB,KAAK,GAAgB,CAEhD;CACY,CAAA;AAElB,CAAC;AAED,kBAAkB,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaterialFileTypeIcon.mjs","names":[],"sources":["../../src/MaterialFileTypeIcon/MaterialFileTypeIcon.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, useMemo } from 'react';\n\nimport { useCdnFn } from '@/ConfigProvider';\nimport FileTypeIcon from '@/FileTypeIcon';\nimport { Center } from '@/Flex';\nimport Img from '@/Img';\n\nimport type { MaterialFileTypeIconProps } from './type';\nimport { getIconUrlForDirectoryPath, getIconUrlForFilePath } from './utils';\n\nconst MaterialFileTypeIcon: FC<MaterialFileTypeIconProps> = ({\n fallbackUnknownType = true,\n filename,\n size = 48,\n variant = 'raw',\n type,\n style,\n open,\n ...rest\n}) => {\n const genCdnUrl = useCdnFn();\n const ICONS_URL = genCdnUrl({\n path: 'assets',\n pkg: '@lobehub/assets-fileicon',\n version: '1.0.0',\n });\n\n const iconUrl: string = useMemo(() => {\n return type === 'file'\n ? getIconUrlForFilePath({ fallbackUnknownType, iconsUrl: ICONS_URL, path: filename })\n : getIconUrlForDirectoryPath({\n fallbackUnknownType,\n iconsUrl: ICONS_URL,\n open,\n path: filename,\n });\n }, [ICONS_URL, type, filename, open]);\n\n if (!iconUrl)\n return (\n <FileTypeIcon\n className={rest.className}\n filetype={filename.split('.')[1]}\n size={size}\n type={type}\n variant={'mono'}\n />\n );\n\n if (variant === 'raw')\n return <Img alt={filename} height={size} src={iconUrl} style={style} width={size} {...rest} />;\n\n return (\n <Center\n flex={'none'}\n height={size}\n style={{ position: 'relative', ...style }}\n width={size}\n {...rest}\n >\n <FileTypeIcon size={size} type={variant} variant={'mono'} />\n <Img\n alt={filename}\n height={size / 2}\n src={iconUrl}\n style={{ position: 'absolute', top: size / 3 }}\n width={size / 2}\n {...rest}\n />\n </Center>\n );\n};\n\nMaterialFileTypeIcon.displayName = 'MaterialFileTypeIcon';\n\nexport default MaterialFileTypeIcon;\n"],"mappings":";;;;;;;;;AAYA,MAAM,wBAAuD,EAC3D,sBAAsB,MACtB,UACA,OAAO,IACP,UAAU,OACV,MACA,OACA,MACA,GAAG,WACC;CAEJ,MAAM,YADY,SACQ,CAAC,CAAC;EAC1B,MAAM;EACN,KAAK;EACL,SAAS;CACX,CAAC;CAED,MAAM,UAAkB,cAAc;EACpC,OAAO,SAAS,SACZ,sBAAsB;GAAE;GAAqB,UAAU;GAAW,MAAM;EAAS,CAAC,IAClF,2BAA2B;GACzB;GACA,UAAU;GACV;GACA,MAAM;EACR,CAAC;CACP,GAAG;EAAC;EAAW;EAAM;EAAU;CAAI,CAAC;CAEpC,IAAI,CAAC,SACH,OACE,oBAAC,cAAD;EACE,WAAW,KAAK;EAChB,UAAU,SAAS,MAAM,GAAG,CAAC,CAAC;EACxB;EACA;EACN,SAAS;CACV,CAAA;CAGL,IAAI,YAAY,OACd,OAAO,oBAAC,KAAD;EAAK,KAAK;EAAU,QAAQ;EAAM,KAAK;EAAgB;EAAO,OAAO;EAAM,GAAI;CAAO,CAAA;CAE/F,OACE,qBAAC,QAAD;EACE,MAAM;EACN,QAAQ;EACR,OAAO;GAAE,UAAU;GAAY,GAAG;EAAM;EACxC,OAAO;EACP,GAAI;
|
|
1
|
+
{"version":3,"file":"MaterialFileTypeIcon.mjs","names":[],"sources":["../../src/MaterialFileTypeIcon/MaterialFileTypeIcon.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, useMemo } from 'react';\n\nimport { useCdnFn } from '@/ConfigProvider';\nimport FileTypeIcon from '@/FileTypeIcon';\nimport { Center } from '@/Flex';\nimport Img from '@/Img';\n\nimport type { MaterialFileTypeIconProps } from './type';\nimport { getIconUrlForDirectoryPath, getIconUrlForFilePath } from './utils';\n\nconst MaterialFileTypeIcon: FC<MaterialFileTypeIconProps> = ({\n fallbackUnknownType = true,\n filename,\n size = 48,\n variant = 'raw',\n type,\n style,\n open,\n ...rest\n}) => {\n const genCdnUrl = useCdnFn();\n const ICONS_URL = genCdnUrl({\n path: 'assets',\n pkg: '@lobehub/assets-fileicon',\n version: '1.0.0',\n });\n\n const iconUrl: string = useMemo(() => {\n return type === 'file'\n ? getIconUrlForFilePath({ fallbackUnknownType, iconsUrl: ICONS_URL, path: filename })\n : getIconUrlForDirectoryPath({\n fallbackUnknownType,\n iconsUrl: ICONS_URL,\n open,\n path: filename,\n });\n }, [ICONS_URL, type, filename, open]);\n\n if (!iconUrl)\n return (\n <FileTypeIcon\n className={rest.className}\n filetype={filename.split('.')[1]}\n size={size}\n type={type}\n variant={'mono'}\n />\n );\n\n if (variant === 'raw')\n return <Img alt={filename} height={size} src={iconUrl} style={style} width={size} {...rest} />;\n\n return (\n <Center\n flex={'none'}\n height={size}\n style={{ position: 'relative', ...style }}\n width={size}\n {...rest}\n >\n <FileTypeIcon size={size} type={variant} variant={'mono'} />\n <Img\n alt={filename}\n height={size / 2}\n src={iconUrl}\n style={{ position: 'absolute', top: size / 3 }}\n width={size / 2}\n {...rest}\n />\n </Center>\n );\n};\n\nMaterialFileTypeIcon.displayName = 'MaterialFileTypeIcon';\n\nexport default MaterialFileTypeIcon;\n"],"mappings":";;;;;;;;;AAYA,MAAM,wBAAuD,EAC3D,sBAAsB,MACtB,UACA,OAAO,IACP,UAAU,OACV,MACA,OACA,MACA,GAAG,WACC;CAEJ,MAAM,YADY,SACQ,CAAC,CAAC;EAC1B,MAAM;EACN,KAAK;EACL,SAAS;CACX,CAAC;CAED,MAAM,UAAkB,cAAc;EACpC,OAAO,SAAS,SACZ,sBAAsB;GAAE;GAAqB,UAAU;GAAW,MAAM;EAAS,CAAC,IAClF,2BAA2B;GACzB;GACA,UAAU;GACV;GACA,MAAM;EACR,CAAC;CACP,GAAG;EAAC;EAAW;EAAM;EAAU;CAAI,CAAC;CAEpC,IAAI,CAAC,SACH,OACE,oBAAC,cAAD;EACE,WAAW,KAAK;EAChB,UAAU,SAAS,MAAM,GAAG,CAAC,CAAC;EACxB;EACA;EACN,SAAS;CACV,CAAA;CAGL,IAAI,YAAY,OACd,OAAO,oBAAC,KAAD;EAAK,KAAK;EAAU,QAAQ;EAAM,KAAK;EAAgB;EAAO,OAAO;EAAM,GAAI;CAAO,CAAA;CAE/F,OACE,qBAAC,QAAD;EACE,MAAM;EACN,QAAQ;EACR,OAAO;GAAE,UAAU;GAAY,GAAG;EAAM;EACxC,OAAO;EACP,GAAI;EALN,UAAA,CAOE,oBAAC,cAAD;GAAoB;GAAM,MAAM;GAAS,SAAS;EAAS,CAAA,GAC3D,oBAAC,KAAD;GACE,KAAK;GACL,QAAQ,OAAO;GACf,KAAK;GACL,OAAO;IAAE,UAAU;IAAY,KAAK,OAAO;GAAE;GAC7C,OAAO,OAAO;GACd,GAAI;EACL,CAAA,CACK;;AAEZ;AAEA,qBAAqB,cAAc"}
|
package/es/Menu/Menu.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.mjs","names":["Menu","AntdMenu"],"sources":["../../src/Menu/Menu.tsx"],"sourcesContent":["'use client';\n\nimport { ConfigProvider, Menu as AntdMenu } from 'antd';\nimport { cx, useTheme } from 'antd-style';\nimport { memo, useMemo } from 'react';\n\nimport { IconProvider } from '@/Icon';\nimport { mapItems } from '@/Menu/utils';\n\nimport { variants } from './style';\nimport { type MenuProps } from './type';\n\nconst Menu = memo<MenuProps>(\n ({\n compact,\n shadow,\n variant = 'borderless',\n className,\n selectable,\n iconProps,\n items,\n ref,\n ...rest\n }) => {\n const theme = useTheme();\n\n const antdItems = useMemo(() => items.map((item) => mapItems(item)), [items]);\n\n return (\n <ConfigProvider\n theme={{\n components: {\n Menu: {\n controlHeightLG: 36,\n iconMarginInlineEnd: 8,\n iconSize: 16,\n itemActiveBg: theme.isDarkMode ? theme.colorFillQuaternary : theme.colorFillSecondary,\n itemBorderRadius: theme.borderRadius,\n itemColor: theme.colorTextSecondary,\n itemHoverBg: theme.colorFillTertiary,\n itemMarginBlock: 4,\n itemMarginInline: 4,\n itemSelectedBg: theme.colorFillSecondary,\n },\n },\n }}\n >\n <IconProvider\n config={{\n size: 'small',\n ...iconProps,\n }}\n >\n <AntdMenu\n className={cx(variants({ compact, shadow, variant }), className)}\n inlineIndent={12}\n items={antdItems}\n mode=\"vertical\"\n ref={ref}\n selectable={selectable}\n {...rest}\n />\n </IconProvider>\n </ConfigProvider>\n );\n },\n);\n\nMenu.displayName = 'Menu';\n\nexport default Menu;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,SAAO,MACV,EACC,SACA,QACA,UAAU,cACV,WACA,YACA,WACA,OACA,KACA,GAAG,WACC;CACJ,MAAM,QAAQ,SAAS;CAEvB,MAAM,YAAY,cAAc,MAAM,KAAK,SAAS,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;CAE5E,OACE,oBAAC,gBAAD;EACE,OAAO,EACL,YAAY,EACV,MAAM;GACJ,iBAAiB;GACjB,qBAAqB;GACrB,UAAU;GACV,cAAc,MAAM,aAAa,MAAM,sBAAsB,MAAM;GACnE,kBAAkB,MAAM;GACxB,WAAW,MAAM;GACjB,aAAa,MAAM;GACnB,iBAAiB;GACjB,kBAAkB;GAClB,gBAAgB,MAAM;EACxB,EACF,EACF;
|
|
1
|
+
{"version":3,"file":"Menu.mjs","names":["Menu","AntdMenu"],"sources":["../../src/Menu/Menu.tsx"],"sourcesContent":["'use client';\n\nimport { ConfigProvider, Menu as AntdMenu } from 'antd';\nimport { cx, useTheme } from 'antd-style';\nimport { memo, useMemo } from 'react';\n\nimport { IconProvider } from '@/Icon';\nimport { mapItems } from '@/Menu/utils';\n\nimport { variants } from './style';\nimport { type MenuProps } from './type';\n\nconst Menu = memo<MenuProps>(\n ({\n compact,\n shadow,\n variant = 'borderless',\n className,\n selectable,\n iconProps,\n items,\n ref,\n ...rest\n }) => {\n const theme = useTheme();\n\n const antdItems = useMemo(() => items.map((item) => mapItems(item)), [items]);\n\n return (\n <ConfigProvider\n theme={{\n components: {\n Menu: {\n controlHeightLG: 36,\n iconMarginInlineEnd: 8,\n iconSize: 16,\n itemActiveBg: theme.isDarkMode ? theme.colorFillQuaternary : theme.colorFillSecondary,\n itemBorderRadius: theme.borderRadius,\n itemColor: theme.colorTextSecondary,\n itemHoverBg: theme.colorFillTertiary,\n itemMarginBlock: 4,\n itemMarginInline: 4,\n itemSelectedBg: theme.colorFillSecondary,\n },\n },\n }}\n >\n <IconProvider\n config={{\n size: 'small',\n ...iconProps,\n }}\n >\n <AntdMenu\n className={cx(variants({ compact, shadow, variant }), className)}\n inlineIndent={12}\n items={antdItems}\n mode=\"vertical\"\n ref={ref}\n selectable={selectable}\n {...rest}\n />\n </IconProvider>\n </ConfigProvider>\n );\n },\n);\n\nMenu.displayName = 'Menu';\n\nexport default Menu;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,SAAO,MACV,EACC,SACA,QACA,UAAU,cACV,WACA,YACA,WACA,OACA,KACA,GAAG,WACC;CACJ,MAAM,QAAQ,SAAS;CAEvB,MAAM,YAAY,cAAc,MAAM,KAAK,SAAS,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;CAE5E,OACE,oBAAC,gBAAD;EACE,OAAO,EACL,YAAY,EACV,MAAM;GACJ,iBAAiB;GACjB,qBAAqB;GACrB,UAAU;GACV,cAAc,MAAM,aAAa,MAAM,sBAAsB,MAAM;GACnE,kBAAkB,MAAM;GACxB,WAAW,MAAM;GACjB,aAAa,MAAM;GACnB,iBAAiB;GACjB,kBAAkB;GAClB,gBAAgB,MAAM;EACxB,EACF,EACF;EAEA,UAAA,oBAAC,cAAD;GACE,QAAQ;IACN,MAAM;IACN,GAAG;GACL;GAEA,UAAA,oBAACC,MAAD;IACE,WAAW,GAAG,SAAS;KAAE;KAAS;KAAQ;IAAQ,CAAC,GAAG,SAAS;IAC/D,cAAc;IACd,OAAO;IACP,MAAK;IACA;IACO;IACZ,GAAI;GACL,CAAA;EACW,CAAA;CACA,CAAA;AAEpB,CACF;AAEA,OAAK,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullFeatured.mjs","names":["Flexbox"],"sources":["../../src/Mermaid/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { bodyVariants, headerVariants, variants } from '@/Highlighter/style';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport { type MermaidProps } from './type';\n\nconst MermaidHeaderLanguage = memo(\n ({\n fileName,\n language,\n showLanguage,\n }: {\n fileName?: string;\n language: string;\n showLanguage?: boolean;\n }) => {\n if (!showLanguage) return null;\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={'languageTitle'}\n flex={1}\n gap={4}\n justify={'flex-start'}\n paddingInline={8}\n >\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={fileName || language}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n\n <Text ellipsis fontSize={13}>\n {fileName || 'Mermaid'}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.fileName === next.fileName &&\n prev.language === next.language &&\n prev.showLanguage === next.showLanguage,\n);\n\nexport interface MermaidFullFeaturedProps extends Omit<MermaidProps, 'children'> {\n children: ReactNode;\n content: string;\n}\n\nexport const MermaidFullFeatured = memo<MermaidFullFeaturedProps>(\n ({\n showLanguage,\n styles: customStyles,\n classNames,\n content,\n children,\n className,\n copyable,\n actionsRender,\n style,\n variant,\n shadow,\n language = 'mermaid',\n fileName,\n defaultExpand = true,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, originalActions]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"mermaid\"\n style={style}\n {...rest}\n >\n <Flexbox\n horizontal\n align={'center'}\n className={cx(headerVariants({ variant }), classNames?.header)}\n justify={'space-between'}\n style={customStyles?.header}\n onClick={handleToggleExpand}\n >\n <MermaidHeaderLanguage\n fileName={fileName}\n language={language}\n showLanguage={showLanguage}\n />\n <Flexbox horizontal align={'center'} flex={'none'} gap={4} onClick={stopPropagation}>\n <Flexbox horizontal align={'center'} className={'panel-actions'} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size={'small'}\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n className={cx(bodyVariants({ expand }), classNames?.body)}\n style={customStyles?.body}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MermaidFullFeatured;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,wBAAwB,MAC3B,EACC,UACA,UACA,mBAKI;CACJ,IAAI,CAAC,cAAc,OAAO;CAE1B,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW;EACX,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;
|
|
1
|
+
{"version":3,"file":"FullFeatured.mjs","names":["Flexbox"],"sources":["../../src/Mermaid/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { bodyVariants, headerVariants, variants } from '@/Highlighter/style';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport { type MermaidProps } from './type';\n\nconst MermaidHeaderLanguage = memo(\n ({\n fileName,\n language,\n showLanguage,\n }: {\n fileName?: string;\n language: string;\n showLanguage?: boolean;\n }) => {\n if (!showLanguage) return null;\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={'languageTitle'}\n flex={1}\n gap={4}\n justify={'flex-start'}\n paddingInline={8}\n >\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={fileName || language}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n\n <Text ellipsis fontSize={13}>\n {fileName || 'Mermaid'}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.fileName === next.fileName &&\n prev.language === next.language &&\n prev.showLanguage === next.showLanguage,\n);\n\nexport interface MermaidFullFeaturedProps extends Omit<MermaidProps, 'children'> {\n children: ReactNode;\n content: string;\n}\n\nexport const MermaidFullFeatured = memo<MermaidFullFeaturedProps>(\n ({\n showLanguage,\n styles: customStyles,\n classNames,\n content,\n children,\n className,\n copyable,\n actionsRender,\n style,\n variant,\n shadow,\n language = 'mermaid',\n fileName,\n defaultExpand = true,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, originalActions]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"mermaid\"\n style={style}\n {...rest}\n >\n <Flexbox\n horizontal\n align={'center'}\n className={cx(headerVariants({ variant }), classNames?.header)}\n justify={'space-between'}\n style={customStyles?.header}\n onClick={handleToggleExpand}\n >\n <MermaidHeaderLanguage\n fileName={fileName}\n language={language}\n showLanguage={showLanguage}\n />\n <Flexbox horizontal align={'center'} flex={'none'} gap={4} onClick={stopPropagation}>\n <Flexbox horizontal align={'center'} className={'panel-actions'} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size={'small'}\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n className={cx(bodyVariants({ expand }), classNames?.body)}\n style={customStyles?.body}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MermaidFullFeatured;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,wBAAwB,MAC3B,EACC,UACA,UACA,mBAKI;CACJ,IAAI,CAAC,cAAc,OAAO;CAE1B,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW;EACX,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;EAPjB,UAAA,CASE,oBAAC,sBAAD;GACE,qBAAqB;GACrB,UAAU,YAAY;GACtB,MAAM;GACN,MAAM;GACN,SAAS;EACV,CAAA,GAED,oBAAC,MAAD;GAAM,UAAA;GAAS,UAAU;GACtB,UAAA,YAAY;EACT,CAAA,CACC;;AAEb,IACC,MAAM,SACL,KAAK,aAAa,KAAK,YACvB,KAAK,aAAa,KAAK,YACvB,KAAK,iBAAiB,KAAK,YAC/B;AAOA,MAAa,sBAAsB,MAChC,EACC,cACA,QAAQ,cACR,YACA,SACA,UACA,WACA,UACA,eACA,OACA,SACA,QACA,WAAW,WACX,UACA,gBAAgB,MAChB,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAClD,MAAM,aAAa,OAAO,OAAO;CAEjC,gBAAgB;EACd,WAAW,UAAU;CACvB,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,aAAa,kBAAkB,WAAW,SAAS,CAAC,CAAC;CAE3D,MAAM,kBAAkB,cAAc;EACpC,IAAI,CAAC,UAAU,OAAO;EACtB,OAAO,oBAAC,YAAD;GAAY,SAAS;GAAY,MAAM;EAAU,CAAA;CAC1D,GAAG,CAAC,UAAU,UAAU,CAAC;CAEzB,MAAM,UAAU,cAAc;EAC5B,IAAI,CAAC,eAAe,OAAO;EAC3B,OAAO,cAAc;GACnB,gBAAgB;GAChB;GACA;GACA,cAAc;EAChB,CAAC;CACH,GAAG;EAAC;EAAe;EAAS;EAAY;CAAe,CAAC;CAExD,MAAM,qBAAqB,kBAAkB;EAC3C,WAAW,SAAS,CAAC,IAAI;CAC3B,GAAG,CAAC,CAAC;CAEL,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAQ;EAAQ,CAAC,GAAG,SAAS;EACtD,kBAAe;EACR;EACP,GAAI;EAJN,UAAA,CAME,qBAACA,mBAAD;GACE,YAAA;GACA,OAAO;GACP,WAAW,GAAG,eAAe,EAAE,QAAQ,CAAC,GAAG,YAAY,MAAM;GAC7D,SAAS;GACT,OAAO,cAAc;GACrB,SAAS;GANX,UAAA,CAQE,oBAAC,uBAAD;IACY;IACA;IACI;GACf,CAAA,GACD,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,MAAM;IAAQ,KAAK;IAAG,SAAS;IAApE,UAAA,CACE,oBAACA,mBAAD;KAAS,YAAA;KAAW,OAAO;KAAU,WAAW;KAAiB,MAAM;KAAQ,KAAK;KACjF,UAAA;IACM,CAAA,GACT,oBAAC,YAAD;KACE,MAAM,SAAS,cAAc;KAC7B,MAAM;KACN,SAAS;IACV,CAAA,CACM;GACF,CAAA,CAAA;EACT,CAAA,GAAA,oBAACA,mBAAD;GACE,WAAW,GAAG,aAAa,EAAE,OAAO,CAAC,GAAG,YAAY,IAAI;GACxD,OAAO,cAAc;GAEpB;EACM,CAAA,CACF;;AAEb,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mermaid.mjs","names":["FullFeatured","Flexbox"],"sources":["../../src/Mermaid/Mermaid.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { styles, variants } from '@/Highlighter/style';\nimport Tag from '@/Tag';\n\nimport FullFeatured from './FullFeatured';\nimport SyntaxMermaid from './SyntaxMermaid';\nimport type { MermaidProps } from './type';\n\nconst Mermaid = memo<MermaidProps>(\n ({\n actionIconSize,\n animated,\n bodyRender,\n children,\n classNames,\n className,\n copyable = true,\n defaultExpand = true,\n fileName,\n fullFeatured,\n language = 'mermaid',\n actionsRender,\n shadow,\n showLanguage = true,\n style,\n styles: customStyles,\n theme,\n variant = 'filled',\n ...rest\n }) => {\n const tirmedChildren = children.trim();\n const copyContentRef = useRef(tirmedChildren);\n\n useEffect(() => {\n copyContentRef.current = tirmedChildren;\n }, [tirmedChildren]);\n\n const getCopyContent = useCallback(() => copyContentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return (\n <CopyButton content={getCopyContent} size={actionIconSize || { blockSize: 28, size: 16 }} />\n );\n }, [actionIconSize, copyable, getCopyContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize,\n content: tirmedChildren,\n getContent: getCopyContent,\n originalNode: originalActions,\n });\n }, [actionIconSize, actionsRender, getCopyContent, originalActions, tirmedChildren]);\n\n const defaultBody = useMemo(\n () => (\n <SyntaxMermaid\n animated={animated}\n className={classNames?.content}\n style={customStyles?.content}\n theme={theme}\n variant={variant}\n >\n {tirmedChildren}\n </SyntaxMermaid>\n ),\n [animated, theme, tirmedChildren, variant, classNames?.content, customStyles?.content],\n );\n\n const body = useMemo(() => {\n if (!bodyRender) return defaultBody;\n return bodyRender({ content: tirmedChildren, originalNode: defaultBody });\n }, [bodyRender, defaultBody, tirmedChildren]);\n\n if (fullFeatured)\n return (\n <FullFeatured\n actionsRender={actionsRender}\n className={className}\n classNames={classNames}\n content={tirmedChildren}\n copyable={copyable}\n defaultExpand={defaultExpand}\n fileName={fileName}\n language={language}\n shadow={shadow}\n showLanguage={showLanguage}\n style={style}\n styles={customStyles}\n variant={variant}\n {...rest}\n >\n {body}\n </FullFeatured>\n );\n\n return (\n <div\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"mermaid\"\n style={style}\n {...rest}\n >\n <Flexbox horizontal align={'center'} className={styles.actions} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n {showLanguage && <Tag className={styles.lang}>{language.toLowerCase()}</Tag>}\n {body}\n </div>\n );\n },\n);\n\nMermaid.displayName = 'Mermaid';\n\nexport default Mermaid;\n\nexport { type MermaidProps } from './type';\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,UAAU,MACb,EACC,gBACA,UACA,YACA,UACA,YACA,WACA,WAAW,MACX,gBAAgB,MAChB,UACA,cACA,WAAW,WACX,eACA,QACA,eAAe,MACf,OACA,QAAQ,cACR,OACA,UAAU,UACV,GAAG,WACC;CACJ,MAAM,iBAAiB,SAAS,KAAK;CACrC,MAAM,iBAAiB,OAAO,cAAc;CAE5C,gBAAgB;EACd,eAAe,UAAU;CAC3B,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,iBAAiB,kBAAkB,eAAe,SAAS,CAAC,CAAC;CAEnE,MAAM,kBAAkB,cAAc;EACpC,IAAI,CAAC,UAAU,OAAO;EACtB,OACE,oBAAC,YAAD;GAAY,SAAS;GAAgB,MAAM,kBAAkB;IAAE,WAAW;IAAI,MAAM;GAAG;EAAI,CAAA;CAE/F,GAAG;EAAC;EAAgB;EAAU;CAAc,CAAC;CAE7C,MAAM,UAAU,cAAc;EAC5B,IAAI,CAAC,eAAe,OAAO;EAC3B,OAAO,cAAc;GACnB;GACA,SAAS;GACT,YAAY;GACZ,cAAc;EAChB,CAAC;CACH,GAAG;EAAC;EAAgB;EAAe;EAAgB;EAAiB;CAAc,CAAC;CAEnF,MAAM,cAAc,cAEhB,oBAAC,eAAD;EACY;EACV,WAAW,YAAY;EACvB,OAAO,cAAc;EACd;EACE;
|
|
1
|
+
{"version":3,"file":"Mermaid.mjs","names":["FullFeatured","Flexbox"],"sources":["../../src/Mermaid/Mermaid.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { styles, variants } from '@/Highlighter/style';\nimport Tag from '@/Tag';\n\nimport FullFeatured from './FullFeatured';\nimport SyntaxMermaid from './SyntaxMermaid';\nimport type { MermaidProps } from './type';\n\nconst Mermaid = memo<MermaidProps>(\n ({\n actionIconSize,\n animated,\n bodyRender,\n children,\n classNames,\n className,\n copyable = true,\n defaultExpand = true,\n fileName,\n fullFeatured,\n language = 'mermaid',\n actionsRender,\n shadow,\n showLanguage = true,\n style,\n styles: customStyles,\n theme,\n variant = 'filled',\n ...rest\n }) => {\n const tirmedChildren = children.trim();\n const copyContentRef = useRef(tirmedChildren);\n\n useEffect(() => {\n copyContentRef.current = tirmedChildren;\n }, [tirmedChildren]);\n\n const getCopyContent = useCallback(() => copyContentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return (\n <CopyButton content={getCopyContent} size={actionIconSize || { blockSize: 28, size: 16 }} />\n );\n }, [actionIconSize, copyable, getCopyContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize,\n content: tirmedChildren,\n getContent: getCopyContent,\n originalNode: originalActions,\n });\n }, [actionIconSize, actionsRender, getCopyContent, originalActions, tirmedChildren]);\n\n const defaultBody = useMemo(\n () => (\n <SyntaxMermaid\n animated={animated}\n className={classNames?.content}\n style={customStyles?.content}\n theme={theme}\n variant={variant}\n >\n {tirmedChildren}\n </SyntaxMermaid>\n ),\n [animated, theme, tirmedChildren, variant, classNames?.content, customStyles?.content],\n );\n\n const body = useMemo(() => {\n if (!bodyRender) return defaultBody;\n return bodyRender({ content: tirmedChildren, originalNode: defaultBody });\n }, [bodyRender, defaultBody, tirmedChildren]);\n\n if (fullFeatured)\n return (\n <FullFeatured\n actionsRender={actionsRender}\n className={className}\n classNames={classNames}\n content={tirmedChildren}\n copyable={copyable}\n defaultExpand={defaultExpand}\n fileName={fileName}\n language={language}\n shadow={shadow}\n showLanguage={showLanguage}\n style={style}\n styles={customStyles}\n variant={variant}\n {...rest}\n >\n {body}\n </FullFeatured>\n );\n\n return (\n <div\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"mermaid\"\n style={style}\n {...rest}\n >\n <Flexbox horizontal align={'center'} className={styles.actions} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n {showLanguage && <Tag className={styles.lang}>{language.toLowerCase()}</Tag>}\n {body}\n </div>\n );\n },\n);\n\nMermaid.displayName = 'Mermaid';\n\nexport default Mermaid;\n\nexport { type MermaidProps } from './type';\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,UAAU,MACb,EACC,gBACA,UACA,YACA,UACA,YACA,WACA,WAAW,MACX,gBAAgB,MAChB,UACA,cACA,WAAW,WACX,eACA,QACA,eAAe,MACf,OACA,QAAQ,cACR,OACA,UAAU,UACV,GAAG,WACC;CACJ,MAAM,iBAAiB,SAAS,KAAK;CACrC,MAAM,iBAAiB,OAAO,cAAc;CAE5C,gBAAgB;EACd,eAAe,UAAU;CAC3B,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,iBAAiB,kBAAkB,eAAe,SAAS,CAAC,CAAC;CAEnE,MAAM,kBAAkB,cAAc;EACpC,IAAI,CAAC,UAAU,OAAO;EACtB,OACE,oBAAC,YAAD;GAAY,SAAS;GAAgB,MAAM,kBAAkB;IAAE,WAAW;IAAI,MAAM;GAAG;EAAI,CAAA;CAE/F,GAAG;EAAC;EAAgB;EAAU;CAAc,CAAC;CAE7C,MAAM,UAAU,cAAc;EAC5B,IAAI,CAAC,eAAe,OAAO;EAC3B,OAAO,cAAc;GACnB;GACA,SAAS;GACT,YAAY;GACZ,cAAc;EAChB,CAAC;CACH,GAAG;EAAC;EAAgB;EAAe;EAAgB;EAAiB;CAAc,CAAC;CAEnF,MAAM,cAAc,cAEhB,oBAAC,eAAD;EACY;EACV,WAAW,YAAY;EACvB,OAAO,cAAc;EACd;EACE;EAER,UAAA;CACY,CAAA,GAEjB;EAAC;EAAU;EAAO;EAAgB;EAAS,YAAY;EAAS,cAAc;CAAO,CACvF;CAEA,MAAM,OAAO,cAAc;EACzB,IAAI,CAAC,YAAY,OAAO;EACxB,OAAO,WAAW;GAAE,SAAS;GAAgB,cAAc;EAAY,CAAC;CAC1E,GAAG;EAAC;EAAY;EAAa;CAAc,CAAC;CAE5C,IAAI,cACF,OACE,oBAACA,qBAAD;EACiB;EACJ;EACC;EACZ,SAAS;EACC;EACK;EACL;EACA;EACF;EACM;EACP;EACP,QAAQ;EACC;EACT,GAAI;EAEH,UAAA;CACW,CAAA;CAGlB,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAQ;EAAQ,CAAC,GAAG,SAAS;EACtD,kBAAe;EACR;EACP,GAAI;EAJN,UAAA;GAME,oBAACC,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,WAAW,OAAO;IAAS,MAAM;IAAQ,KAAK;IAChF,UAAA;GACM,CAAA;GACR,gBAAgB,oBAAC,KAAD;IAAK,WAAW,OAAO;IAAO,UAAA,SAAS,YAAY;GAAO,CAAA;GAC1E;EACE;;AAET,CACF;AAEA,QAAQ,cAAc"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
3
|
+
import Text from "../../Text/Text.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/Mermaid/SyntaxMermaid/MermaidFallback.tsx
|
|
7
|
+
const MermaidFallback = memo(({ children, className, message, style }) => /* @__PURE__ */ jsx("div", {
|
|
8
|
+
className,
|
|
9
|
+
style,
|
|
10
|
+
children: /* @__PURE__ */ jsxs(FlexBasic_default, {
|
|
11
|
+
gap: 8,
|
|
12
|
+
padding: 16,
|
|
13
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
14
|
+
fontSize: 12,
|
|
15
|
+
type: "secondary",
|
|
16
|
+
children: message
|
|
17
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
18
|
+
code: true,
|
|
19
|
+
as: "pre",
|
|
20
|
+
fontSize: 12,
|
|
21
|
+
style: {
|
|
22
|
+
margin: 0,
|
|
23
|
+
overflowX: "auto",
|
|
24
|
+
whiteSpace: "pre-wrap",
|
|
25
|
+
wordBreak: "break-word"
|
|
26
|
+
},
|
|
27
|
+
children
|
|
28
|
+
})]
|
|
29
|
+
})
|
|
30
|
+
}));
|
|
31
|
+
MermaidFallback.displayName = "MermaidFallback";
|
|
32
|
+
//#endregion
|
|
33
|
+
export { MermaidFallback as default };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=MermaidFallback.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidFallback.mjs","names":["Flexbox"],"sources":["../../../src/Mermaid/SyntaxMermaid/MermaidFallback.tsx"],"sourcesContent":["'use client';\n\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport Text from '@/Text';\n\nimport { type SyntaxMermaidProps } from '../type';\n\ninterface MermaidFallbackProps {\n children: string;\n className?: string;\n message: string;\n style?: SyntaxMermaidProps['style'];\n}\n\nconst MermaidFallback = memo<MermaidFallbackProps>(({ children, className, message, style }) => (\n <div className={className} style={style}>\n <Flexbox gap={8} padding={16}>\n <Text fontSize={12} type={'secondary'}>\n {message}\n </Text>\n <Text\n code\n as={'pre'}\n fontSize={12}\n style={{ margin: 0, overflowX: 'auto', whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}\n >\n {children}\n </Text>\n </Flexbox>\n </div>\n));\n\nMermaidFallback.displayName = 'MermaidFallback';\n\nexport default MermaidFallback;\n"],"mappings":";;;;;;AAgBA,MAAM,kBAAkB,MAA4B,EAAE,UAAU,WAAW,SAAS,YAClF,oBAAC,OAAD;CAAgB;CAAkB;CAChC,UAAA,qBAACA,mBAAD;EAAS,KAAK;EAAG,SAAS;EAA1B,UAAA,CACE,oBAAC,MAAD;GAAM,UAAU;GAAI,MAAM;GACvB,UAAA;EACG,CAAA,GACN,oBAAC,MAAD;GACE,MAAA;GACA,IAAI;GACJ,UAAU;GACV,OAAO;IAAE,QAAQ;IAAG,WAAW;IAAQ,YAAY;IAAY,WAAW;GAAa;GAEtF;EACG,CAAA,CACC;;AACN,CAAA,CACN;AAED,gBAAgB,cAAc"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { toStandaloneSvgString } from "./prepareInlineSvg.mjs";
|
|
3
|
+
import { prepareMermaidSvgString } from "./prepareMermaidSvg.mjs";
|
|
4
|
+
import { memo, useCallback, useEffect, useRef, useState } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { Image } from "antd";
|
|
7
|
+
//#region src/Mermaid/SyntaxMermaid/MermaidSvg.tsx
|
|
8
|
+
const MermaidSvg = memo(({ className, ref, style, svg }) => {
|
|
9
|
+
const containerRef = useRef(null);
|
|
10
|
+
const [previewUrl, setPreviewUrl] = useState();
|
|
11
|
+
const [open, setOpen] = useState(false);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
return () => {
|
|
14
|
+
if (previewUrl) URL.revokeObjectURL(previewUrl);
|
|
15
|
+
};
|
|
16
|
+
}, [previewUrl]);
|
|
17
|
+
const handleOpen = useCallback(() => {
|
|
18
|
+
const element = containerRef.current?.querySelector("svg");
|
|
19
|
+
if (!element) return;
|
|
20
|
+
const standalone = prepareMermaidSvgString(toStandaloneSvgString(element));
|
|
21
|
+
setPreviewUrl((previous) => {
|
|
22
|
+
if (previous) URL.revokeObjectURL(previous);
|
|
23
|
+
return URL.createObjectURL(new Blob([standalone], { type: "image/svg+xml" }));
|
|
24
|
+
});
|
|
25
|
+
setOpen(true);
|
|
26
|
+
}, []);
|
|
27
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
28
|
+
className,
|
|
29
|
+
ref,
|
|
30
|
+
style,
|
|
31
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
32
|
+
dangerouslySetInnerHTML: { __html: svg },
|
|
33
|
+
ref: containerRef,
|
|
34
|
+
style: { cursor: "zoom-in" },
|
|
35
|
+
onClick: handleOpen
|
|
36
|
+
}), previewUrl && /* @__PURE__ */ jsx(Image, {
|
|
37
|
+
preview: {
|
|
38
|
+
onVisibleChange: setOpen,
|
|
39
|
+
src: previewUrl,
|
|
40
|
+
visible: open
|
|
41
|
+
},
|
|
42
|
+
src: previewUrl,
|
|
43
|
+
style: { display: "none" },
|
|
44
|
+
wrapperStyle: { display: "none" }
|
|
45
|
+
})]
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
MermaidSvg.displayName = "MermaidSvg";
|
|
49
|
+
//#endregion
|
|
50
|
+
export { MermaidSvg as default };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=MermaidSvg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidSvg.mjs","names":["AntImage"],"sources":["../../../src/Mermaid/SyntaxMermaid/MermaidSvg.tsx"],"sourcesContent":["'use client';\n\nimport { Image as AntImage } from 'antd';\nimport { memo, type Ref, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { toStandaloneSvgString } from './prepareInlineSvg';\nimport { prepareMermaidSvgString } from './prepareMermaidSvg';\n\ninterface MermaidSvgProps {\n className?: string;\n ref?: Ref<HTMLDivElement>;\n style?: React.CSSProperties;\n svg: string;\n}\n\nconst MermaidSvg = memo<MermaidSvgProps>(({ className, ref, style, svg }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [previewUrl, setPreviewUrl] = useState<string>();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n return () => {\n if (previewUrl) URL.revokeObjectURL(previewUrl);\n };\n }, [previewUrl]);\n\n // The preview copy is only built on demand: it has to bake in the resolved\n // CSS variables and be XML-well-formed, neither of which the inline copy needs.\n const handleOpen = useCallback(() => {\n const element = containerRef.current?.querySelector('svg');\n if (!element) return;\n\n const standalone = prepareMermaidSvgString(toStandaloneSvgString(element));\n setPreviewUrl((previous) => {\n if (previous) URL.revokeObjectURL(previous);\n return URL.createObjectURL(new Blob([standalone], { type: 'image/svg+xml' }));\n });\n setOpen(true);\n }, []);\n\n return (\n <div className={className} ref={ref} style={style}>\n <div\n dangerouslySetInnerHTML={{ __html: svg }}\n ref={containerRef}\n style={{ cursor: 'zoom-in' }}\n onClick={handleOpen}\n />\n {previewUrl && (\n <AntImage\n preview={{ onVisibleChange: setOpen, src: previewUrl, visible: open }}\n src={previewUrl}\n style={{ display: 'none' }}\n wrapperStyle={{ display: 'none' }}\n />\n )}\n </div>\n );\n});\n\nMermaidSvg.displayName = 'MermaidSvg';\n\nexport default MermaidSvg;\n"],"mappings":";;;;;;;AAeA,MAAM,aAAa,MAAuB,EAAE,WAAW,KAAK,OAAO,UAAU;CAC3E,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,CAAC,YAAY,iBAAiB,SAAiB;CACrD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,gBAAgB;EACd,aAAa;GACX,IAAI,YAAY,IAAI,gBAAgB,UAAU;EAChD;CACF,GAAG,CAAC,UAAU,CAAC;CAIf,MAAM,aAAa,kBAAkB;EACnC,MAAM,UAAU,aAAa,SAAS,cAAc,KAAK;EACzD,IAAI,CAAC,SAAS;EAEd,MAAM,aAAa,wBAAwB,sBAAsB,OAAO,CAAC;EACzE,eAAe,aAAa;GAC1B,IAAI,UAAU,IAAI,gBAAgB,QAAQ;GAC1C,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,gBAAgB,CAAC,CAAC;EAC9E,CAAC;EACD,QAAQ,IAAI;CACd,GAAG,CAAC,CAAC;CAEL,OACE,qBAAC,OAAD;EAAgB;EAAgB;EAAY;EAA5C,UAAA,CACE,oBAAC,OAAD;GACE,yBAAyB,EAAE,QAAQ,IAAI;GACvC,KAAK;GACL,OAAO,EAAE,QAAQ,UAAU;GAC3B,SAAS;EACV,CAAA,GACA,cACC,oBAACA,OAAD;GACE,SAAS;IAAE,iBAAiB;IAAS,KAAK;IAAY,SAAS;GAAK;GACpE,KAAK;GACL,OAAO,EAAE,SAAS,OAAO;GACzB,cAAc,EAAE,SAAS,OAAO;EACjC,CAAA,CAEA;;AAET,CAAC;AAED,WAAW,cAAc"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import Image from "../../Image/index.mjs";
|
|
3
2
|
import { mermaidThemes } from "../const.mjs";
|
|
4
3
|
import { useMermaid } from "../../hooks/useMermaid.mjs";
|
|
5
|
-
import
|
|
4
|
+
import MermaidFallback from "./MermaidFallback.mjs";
|
|
5
|
+
import MermaidSvg from "./MermaidSvg.mjs";
|
|
6
|
+
import { memo, useMemo } from "react";
|
|
6
7
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
-
import { kebabCase } from "es-toolkit/compat";
|
|
8
8
|
//#region src/Mermaid/SyntaxMermaid/StaticMermaid.tsx
|
|
9
9
|
const StaticMermaid = memo(({ children, className, fallbackClassName, ref, style, theme: customTheme, variant }) => {
|
|
10
10
|
const safeChildren = children ?? "";
|
|
@@ -13,36 +13,7 @@ const StaticMermaid = memo(({ children, className, fallbackClassName, ref, style
|
|
|
13
13
|
if (isDefaultTheme) return;
|
|
14
14
|
return mermaidThemes.find((item) => item.id === customTheme)?.background;
|
|
15
15
|
}, [isDefaultTheme, customTheme]);
|
|
16
|
-
const
|
|
17
|
-
id: kebabCase(`mermaid-${useId()}`),
|
|
18
|
-
theme: isDefaultTheme ? void 0 : customTheme
|
|
19
|
-
});
|
|
20
|
-
const isLoading = !data;
|
|
21
|
-
const [blobUrl, setBlobUrl] = useState();
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
return () => {
|
|
24
|
-
if (blobUrl) URL.revokeObjectURL(blobUrl);
|
|
25
|
-
};
|
|
26
|
-
}, [blobUrl]);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (isLoading || !data) return;
|
|
29
|
-
let finalSvgString = data;
|
|
30
|
-
if (typeof window !== "undefined" && typeof navigator !== "undefined" && navigator.userAgent.includes("Firefox")) {
|
|
31
|
-
const svgDoc = new DOMParser().parseFromString(data, "image/svg+xml");
|
|
32
|
-
const svgElement = svgDoc.documentElement;
|
|
33
|
-
if (svgElement && svgElement.hasAttribute("viewBox")) {
|
|
34
|
-
const viewBoxParts = svgElement.getAttribute("viewBox").split(" ");
|
|
35
|
-
if (Array.isArray(viewBoxParts) && viewBoxParts.length === 4) {
|
|
36
|
-
svgElement.setAttribute("width", viewBoxParts[2]);
|
|
37
|
-
svgElement.setAttribute("height", viewBoxParts[3]);
|
|
38
|
-
}
|
|
39
|
-
finalSvgString = new XMLSerializer().serializeToString(svgDoc);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const svgBlob = new Blob([finalSvgString], { type: "image/svg+xml" });
|
|
43
|
-
const url = URL.createObjectURL(svgBlob);
|
|
44
|
-
setBlobUrl(url);
|
|
45
|
-
}, [isLoading, data]);
|
|
16
|
+
const { svg, error, loading } = useMermaid(safeChildren, { theme: isDefaultTheme ? void 0 : customTheme });
|
|
46
17
|
const containerStyle = {
|
|
47
18
|
background: variant === "filled" ? background : void 0,
|
|
48
19
|
margin: 0,
|
|
@@ -52,7 +23,13 @@ const StaticMermaid = memo(({ children, className, fallbackClassName, ref, style
|
|
|
52
23
|
width: "100%",
|
|
53
24
|
...style
|
|
54
25
|
};
|
|
55
|
-
if (!
|
|
26
|
+
if (error && !loading) return /* @__PURE__ */ jsx(MermaidFallback, {
|
|
27
|
+
className: fallbackClassName,
|
|
28
|
+
message: error,
|
|
29
|
+
style,
|
|
30
|
+
children: safeChildren
|
|
31
|
+
});
|
|
32
|
+
if (!svg) return /* @__PURE__ */ jsx("div", {
|
|
56
33
|
className: fallbackClassName,
|
|
57
34
|
style,
|
|
58
35
|
children: /* @__PURE__ */ jsx("div", {
|
|
@@ -60,17 +37,11 @@ const StaticMermaid = memo(({ children, className, fallbackClassName, ref, style
|
|
|
60
37
|
children: "Loading..."
|
|
61
38
|
})
|
|
62
39
|
});
|
|
63
|
-
return /* @__PURE__ */ jsx(
|
|
64
|
-
alt: "mermaid",
|
|
40
|
+
return /* @__PURE__ */ jsx(MermaidSvg, {
|
|
65
41
|
className,
|
|
66
|
-
maxHeight: 480,
|
|
67
|
-
minWidth: 300,
|
|
68
|
-
objectFit: "contain",
|
|
69
42
|
ref,
|
|
70
|
-
src: blobUrl,
|
|
71
43
|
style: containerStyle,
|
|
72
|
-
|
|
73
|
-
width: "100%"
|
|
44
|
+
svg
|
|
74
45
|
});
|
|
75
46
|
});
|
|
76
47
|
StaticMermaid.displayName = "StaticMermaid";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticMermaid.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/StaticMermaid.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"file":"StaticMermaid.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/StaticMermaid.tsx"],"sourcesContent":["'use client';\n\nimport { type Ref } from 'react';\nimport { memo, useMemo } from 'react';\n\nimport { useMermaid } from '@/hooks/useMermaid';\n\nimport { mermaidThemes } from '../const';\nimport { type SyntaxMermaidProps } from '../type';\nimport MermaidFallback from './MermaidFallback';\nimport MermaidSvg from './MermaidSvg';\n\ninterface StaticMermaidProps {\n children: string;\n className?: string;\n fallbackClassName?: string;\n ref?: Ref<HTMLDivElement>;\n style?: SyntaxMermaidProps['style'];\n theme?: SyntaxMermaidProps['theme'];\n variant?: SyntaxMermaidProps['variant'];\n}\n\nconst StaticMermaid = memo<StaticMermaidProps>(\n ({ children, className, fallbackClassName, ref, style, theme: customTheme, variant }) => {\n const safeChildren = children ?? '';\n const isDefaultTheme = customTheme === 'lobe-theme' || !customTheme;\n\n const background = useMemo(() => {\n if (isDefaultTheme) return;\n return mermaidThemes.find((item) => item.id === customTheme)?.background;\n }, [isDefaultTheme, customTheme]);\n\n const { svg, error, loading } = useMermaid(safeChildren, {\n theme: isDefaultTheme ? undefined : customTheme,\n });\n\n const containerStyle = {\n background: variant === 'filled' ? background : undefined,\n margin: 0,\n minWidth: 300,\n padding: variant === 'borderless' ? 0 : 16,\n position: 'relative' as const,\n width: '100%',\n ...style,\n };\n\n if (error && !loading) {\n return (\n <MermaidFallback className={fallbackClassName} message={error} style={style}>\n {safeChildren}\n </MermaidFallback>\n );\n }\n\n if (!svg) {\n return (\n <div className={fallbackClassName} style={style}>\n <div style={{ padding: 16 }}>Loading...</div>\n </div>\n );\n }\n\n return <MermaidSvg className={className} ref={ref} style={containerStyle} svg={svg} />;\n },\n);\n\nStaticMermaid.displayName = 'StaticMermaid';\n\nexport default StaticMermaid;\n"],"mappings":";;;;;;;;AAsBA,MAAM,gBAAgB,MACnB,EAAE,UAAU,WAAW,mBAAmB,KAAK,OAAO,OAAO,aAAa,cAAc;CACvF,MAAM,eAAe,YAAY;CACjC,MAAM,iBAAiB,gBAAgB,gBAAgB,CAAC;CAExD,MAAM,aAAa,cAAc;EAC/B,IAAI,gBAAgB;EACpB,OAAO,cAAc,MAAM,SAAS,KAAK,OAAO,WAAW,CAAC,EAAE;CAChE,GAAG,CAAC,gBAAgB,WAAW,CAAC;CAEhC,MAAM,EAAE,KAAK,OAAO,YAAY,WAAW,cAAc,EACvD,OAAO,iBAAiB,KAAA,IAAY,YACtC,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY,YAAY,WAAW,aAAa,KAAA;EAChD,QAAQ;EACR,UAAU;EACV,SAAS,YAAY,eAAe,IAAI;EACxC,UAAU;EACV,OAAO;EACP,GAAG;CACL;CAEA,IAAI,SAAS,CAAC,SACZ,OACE,oBAAC,iBAAD;EAAiB,WAAW;EAAmB,SAAS;EAAc;EACnE,UAAA;CACc,CAAA;CAIrB,IAAI,CAAC,KACH,OACE,oBAAC,OAAD;EAAK,WAAW;EAA0B;EACxC,UAAA,oBAAC,OAAD;GAAK,OAAO,EAAE,SAAS,GAAG;GAAG,UAAA;EAAe,CAAA;CACzC,CAAA;CAIT,OAAO,oBAAC,YAAD;EAAuB;EAAgB;EAAK,OAAO;EAAqB;CAAM,CAAA;AACvF,CACF;AAEA,cAAc,cAAc"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import Image from "../../Image/index.mjs";
|
|
3
2
|
import { mermaidThemes } from "../const.mjs";
|
|
3
|
+
import MermaidFallback from "./MermaidFallback.mjs";
|
|
4
|
+
import MermaidSvg from "./MermaidSvg.mjs";
|
|
4
5
|
import { useStreamMermaid } from "../../hooks/useStreamMermaid.mjs";
|
|
5
|
-
import { memo,
|
|
6
|
+
import { memo, useMemo } from "react";
|
|
6
7
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
-
import { kebabCase } from "es-toolkit/compat";
|
|
8
8
|
//#region src/Mermaid/SyntaxMermaid/StreamMermaid.tsx
|
|
9
9
|
const StreamMermaid = memo(({ children, className, fallbackClassName, ref, style, theme: customTheme, variant }) => {
|
|
10
10
|
const safeChildren = children ?? "";
|
|
@@ -13,40 +13,10 @@ const StreamMermaid = memo(({ children, className, fallbackClassName, ref, style
|
|
|
13
13
|
if (isDefaultTheme) return;
|
|
14
14
|
return mermaidThemes.find((item) => item.id === customTheme)?.background;
|
|
15
15
|
}, [isDefaultTheme, customTheme]);
|
|
16
|
-
const
|
|
16
|
+
const { svg, error, loading } = useStreamMermaid(safeChildren, {
|
|
17
17
|
enabled: true,
|
|
18
|
-
id: kebabCase(`mermaid-${useId()}`),
|
|
19
18
|
theme: isDefaultTheme ? void 0 : customTheme
|
|
20
19
|
});
|
|
21
|
-
const isLoading = !data;
|
|
22
|
-
const [blobUrl, setBlobUrl] = useState();
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
return () => {
|
|
25
|
-
if (blobUrl) URL.revokeObjectURL(blobUrl);
|
|
26
|
-
};
|
|
27
|
-
}, [blobUrl]);
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
if (isLoading || !data) {
|
|
30
|
-
setBlobUrl(void 0);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
let finalSvgString = data;
|
|
34
|
-
if (typeof window !== "undefined" && typeof navigator !== "undefined" && navigator.userAgent.includes("Firefox")) {
|
|
35
|
-
const svgDoc = new DOMParser().parseFromString(data, "image/svg+xml");
|
|
36
|
-
const svgElement = svgDoc.documentElement;
|
|
37
|
-
if (svgElement && svgElement.hasAttribute("viewBox")) {
|
|
38
|
-
const viewBoxParts = svgElement.getAttribute("viewBox").split(" ");
|
|
39
|
-
if (Array.isArray(viewBoxParts) && viewBoxParts.length === 4) {
|
|
40
|
-
svgElement.setAttribute("width", viewBoxParts[2]);
|
|
41
|
-
svgElement.setAttribute("height", viewBoxParts[3]);
|
|
42
|
-
}
|
|
43
|
-
finalSvgString = new XMLSerializer().serializeToString(svgDoc);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const svgBlob = new Blob([finalSvgString], { type: "image/svg+xml" });
|
|
47
|
-
const url = URL.createObjectURL(svgBlob);
|
|
48
|
-
setBlobUrl(url);
|
|
49
|
-
}, [isLoading, data]);
|
|
50
20
|
const containerStyle = {
|
|
51
21
|
background: variant === "filled" ? background : void 0,
|
|
52
22
|
margin: 0,
|
|
@@ -56,7 +26,13 @@ const StreamMermaid = memo(({ children, className, fallbackClassName, ref, style
|
|
|
56
26
|
width: "100%",
|
|
57
27
|
...style
|
|
58
28
|
};
|
|
59
|
-
if (!
|
|
29
|
+
if (error && !loading) return /* @__PURE__ */ jsx(MermaidFallback, {
|
|
30
|
+
className: fallbackClassName,
|
|
31
|
+
message: error,
|
|
32
|
+
style,
|
|
33
|
+
children: safeChildren
|
|
34
|
+
});
|
|
35
|
+
if (!svg) return /* @__PURE__ */ jsx("div", {
|
|
60
36
|
className: fallbackClassName,
|
|
61
37
|
style,
|
|
62
38
|
children: /* @__PURE__ */ jsx("div", {
|
|
@@ -64,17 +40,11 @@ const StreamMermaid = memo(({ children, className, fallbackClassName, ref, style
|
|
|
64
40
|
children: "Rendering..."
|
|
65
41
|
})
|
|
66
42
|
});
|
|
67
|
-
return /* @__PURE__ */ jsx(
|
|
68
|
-
alt: "mermaid",
|
|
43
|
+
return /* @__PURE__ */ jsx(MermaidSvg, {
|
|
69
44
|
className,
|
|
70
|
-
maxHeight: 480,
|
|
71
|
-
minWidth: 300,
|
|
72
|
-
objectFit: "contain",
|
|
73
45
|
ref,
|
|
74
|
-
src: blobUrl,
|
|
75
46
|
style: containerStyle,
|
|
76
|
-
|
|
77
|
-
width: "100%"
|
|
47
|
+
svg
|
|
78
48
|
});
|
|
79
49
|
});
|
|
80
50
|
StreamMermaid.displayName = "StreamMermaid";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamMermaid.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/StreamMermaid.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"file":"StreamMermaid.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/StreamMermaid.tsx"],"sourcesContent":["'use client';\n\nimport { type Ref } from 'react';\nimport { memo, useMemo } from 'react';\n\nimport { useStreamMermaid } from '@/hooks/useStreamMermaid';\n\nimport { mermaidThemes } from '../const';\nimport { type SyntaxMermaidProps } from '../type';\nimport MermaidFallback from './MermaidFallback';\nimport MermaidSvg from './MermaidSvg';\n\ninterface StreamMermaidProps {\n children: string;\n className?: string;\n fallbackClassName?: string;\n ref?: Ref<HTMLDivElement>;\n style?: SyntaxMermaidProps['style'];\n theme?: SyntaxMermaidProps['theme'];\n variant?: SyntaxMermaidProps['variant'];\n}\n\nconst StreamMermaid = memo<StreamMermaidProps>(\n ({ children, className, fallbackClassName, ref, style, theme: customTheme, variant }) => {\n const safeChildren = children ?? '';\n const isDefaultTheme = customTheme === 'lobe-theme' || !customTheme;\n\n const background = useMemo(() => {\n if (isDefaultTheme) return;\n return mermaidThemes.find((item) => item.id === customTheme)?.background;\n }, [isDefaultTheme, customTheme]);\n\n const { svg, error, loading } = useStreamMermaid(safeChildren, {\n enabled: true,\n theme: isDefaultTheme ? undefined : customTheme,\n });\n\n const containerStyle = {\n background: variant === 'filled' ? background : undefined,\n margin: 0,\n minWidth: 300,\n padding: variant === 'borderless' ? 0 : 16,\n position: 'relative' as const,\n width: '100%',\n ...style,\n };\n\n if (error && !loading) {\n return (\n <MermaidFallback className={fallbackClassName} message={error} style={style}>\n {safeChildren}\n </MermaidFallback>\n );\n }\n\n if (!svg) {\n return (\n <div className={fallbackClassName} style={style}>\n <div style={{ padding: 16 }}>Rendering...</div>\n </div>\n );\n }\n\n return <MermaidSvg className={className} ref={ref} style={containerStyle} svg={svg} />;\n },\n);\n\nStreamMermaid.displayName = 'StreamMermaid';\n\nexport default StreamMermaid;\n"],"mappings":";;;;;;;;AAsBA,MAAM,gBAAgB,MACnB,EAAE,UAAU,WAAW,mBAAmB,KAAK,OAAO,OAAO,aAAa,cAAc;CACvF,MAAM,eAAe,YAAY;CACjC,MAAM,iBAAiB,gBAAgB,gBAAgB,CAAC;CAExD,MAAM,aAAa,cAAc;EAC/B,IAAI,gBAAgB;EACpB,OAAO,cAAc,MAAM,SAAS,KAAK,OAAO,WAAW,CAAC,EAAE;CAChE,GAAG,CAAC,gBAAgB,WAAW,CAAC;CAEhC,MAAM,EAAE,KAAK,OAAO,YAAY,iBAAiB,cAAc;EAC7D,SAAS;EACT,OAAO,iBAAiB,KAAA,IAAY;CACtC,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY,YAAY,WAAW,aAAa,KAAA;EAChD,QAAQ;EACR,UAAU;EACV,SAAS,YAAY,eAAe,IAAI;EACxC,UAAU;EACV,OAAO;EACP,GAAG;CACL;CAEA,IAAI,SAAS,CAAC,SACZ,OACE,oBAAC,iBAAD;EAAiB,WAAW;EAAmB,SAAS;EAAc;EACnE,UAAA;CACc,CAAA;CAIrB,IAAI,CAAC,KACH,OACE,oBAAC,OAAD;EAAK,WAAW;EAA0B;EACxC,UAAA,oBAAC,OAAD;GAAK,OAAO,EAAE,SAAS,GAAG;GAAG,UAAA;EAAiB,CAAA;CAC3C,CAAA;CAIT,OAAO,oBAAC,YAAD;EAAuB;EAAgB;EAAK,OAAO;EAAqB;CAAM,CAAA;AACvF,CACF;AAEA,cAAc,cAAc"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/Mermaid/SyntaxMermaid/prepareInlineSvg.ts
|
|
2
|
+
/**
|
|
3
|
+
* Root custom properties beautiful-mermaid reads; everything else in its
|
|
4
|
+
* stylesheet is derived from these via color-mix().
|
|
5
|
+
*/
|
|
6
|
+
const MERMAID_ROOT_VARS = [
|
|
7
|
+
"--bg",
|
|
8
|
+
"--fg",
|
|
9
|
+
"--line",
|
|
10
|
+
"--accent",
|
|
11
|
+
"--muted",
|
|
12
|
+
"--surface",
|
|
13
|
+
"--border"
|
|
14
|
+
];
|
|
15
|
+
const styleBlockPattern = /<style>([\s\S]*?)<\/style>/;
|
|
16
|
+
const scopeCssSelectors = (css, scope) => css.replaceAll(/(^|})([^{}@]+)\{/g, (_match, tail, selectors) => {
|
|
17
|
+
return `${tail}\n${selectors.split(",").map((selector) => selector.trim()).filter(Boolean).map((selector) => selector === "svg" ? scope : `${scope} ${selector}`).join(", ")} {`;
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* A <style> element inside inline SVG applies to the whole document, so the
|
|
21
|
+
* generated rules must be scoped to this diagram before being injected. The
|
|
22
|
+
* font @import is dropped because inline rendering would actually issue the
|
|
23
|
+
* Google Fonts request that an <img>-loaded SVG silently blocks, and the bare
|
|
24
|
+
* `text` rule is dropped so page CSS can supply the theme font instead.
|
|
25
|
+
*/
|
|
26
|
+
const prepareInlineMermaidSvg = (svg, scopeId) => {
|
|
27
|
+
if (!svg) return svg;
|
|
28
|
+
return svg.replace(/<svg\b/, `<svg id="${scopeId}"`).replace(styleBlockPattern, (_match, css) => {
|
|
29
|
+
const withoutFontRule = css.replaceAll(/@import[^;]*;/g, "").replaceAll(/(^|})\s*text\s*\{[^{}]*\}/g, "$1");
|
|
30
|
+
return `<style>${scopeCssSelectors(withoutFontRule, `#${scopeId}`)}</style>`;
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Inline SVG resolves `var(--ant-*)` from the page, but a Blob-loaded copy is an
|
|
35
|
+
* isolated document with no access to them, so the root variables are baked in
|
|
36
|
+
* as literal values before serializing for preview or download.
|
|
37
|
+
*/
|
|
38
|
+
const toStandaloneSvgString = (element) => {
|
|
39
|
+
const clone = element.cloneNode(true);
|
|
40
|
+
const computed = globalThis.getComputedStyle(element);
|
|
41
|
+
for (const name of MERMAID_ROOT_VARS) {
|
|
42
|
+
const value = computed.getPropertyValue(name).trim();
|
|
43
|
+
if (value) clone.style.setProperty(name, value);
|
|
44
|
+
}
|
|
45
|
+
const fontFamily = computed.fontFamily;
|
|
46
|
+
if (fontFamily) clone.style.setProperty("font-family", fontFamily);
|
|
47
|
+
return new XMLSerializer().serializeToString(clone);
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { MERMAID_ROOT_VARS, prepareInlineMermaidSvg, toStandaloneSvgString };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=prepareInlineSvg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareInlineSvg.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/prepareInlineSvg.ts"],"sourcesContent":["/**\n * Root custom properties beautiful-mermaid reads; everything else in its\n * stylesheet is derived from these via color-mix().\n */\nexport const MERMAID_ROOT_VARS = [\n '--bg',\n '--fg',\n '--line',\n '--accent',\n '--muted',\n '--surface',\n '--border',\n];\n\nconst styleBlockPattern = /<style>([\\s\\S]*?)<\\/style>/;\n\nconst scopeCssSelectors = (css: string, scope: string): string =>\n css.replaceAll(/(^|})([^{}@]+)\\{/g, (_match, tail: string, selectors: string) => {\n const scoped = selectors\n .split(',')\n .map((selector) => selector.trim())\n .filter(Boolean)\n // The generated sheet targets `svg` for the root itself, not a descendant\n .map((selector) => (selector === 'svg' ? scope : `${scope} ${selector}`))\n .join(', ');\n\n return `${tail}\\n${scoped} {`;\n });\n\n/**\n * A <style> element inside inline SVG applies to the whole document, so the\n * generated rules must be scoped to this diagram before being injected. The\n * font @import is dropped because inline rendering would actually issue the\n * Google Fonts request that an <img>-loaded SVG silently blocks, and the bare\n * `text` rule is dropped so page CSS can supply the theme font instead.\n */\nexport const prepareInlineMermaidSvg = (svg: string, scopeId: string): string => {\n if (!svg) return svg;\n\n const withId = svg.replace(/<svg\\b/, `<svg id=\"${scopeId}\"`);\n\n return withId.replace(styleBlockPattern, (_match, css: string) => {\n const withoutImports = css.replaceAll(/@import[^;]*;/g, '');\n const withoutFontRule = withoutImports.replaceAll(/(^|})\\s*text\\s*\\{[^{}]*\\}/g, '$1');\n\n return `<style>${scopeCssSelectors(withoutFontRule, `#${scopeId}`)}</style>`;\n });\n};\n\n/**\n * Inline SVG resolves `var(--ant-*)` from the page, but a Blob-loaded copy is an\n * isolated document with no access to them, so the root variables are baked in\n * as literal values before serializing for preview or download.\n */\nexport const toStandaloneSvgString = (element: SVGElement): string => {\n const clone = element.cloneNode(true) as SVGElement;\n const computed = globalThis.getComputedStyle(element);\n\n for (const name of MERMAID_ROOT_VARS) {\n const value = computed.getPropertyValue(name).trim();\n if (value) clone.style.setProperty(name, value);\n }\n\n const fontFamily = computed.fontFamily;\n if (fontFamily) clone.style.setProperty('font-family', fontFamily);\n\n return new XMLSerializer().serializeToString(clone);\n};\n"],"mappings":";;;;;AAIA,MAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,oBAAoB;AAE1B,MAAM,qBAAqB,KAAa,UACtC,IAAI,WAAW,sBAAsB,QAAQ,MAAc,cAAsB;CAS/E,OAAO,GAAG,KAAK,IARA,UACZ,MAAM,GAAG,CAAC,CACV,KAAK,aAAa,SAAS,KAAK,CAAC,CAAC,CAClC,OAAO,OAAO,CAAC,CAEf,KAAK,aAAc,aAAa,QAAQ,QAAQ,GAAG,MAAM,GAAG,UAAW,CAAC,CACxE,KAAK,IAEgB,EAAE;AAC5B,CAAC;;;;;;;;AASH,MAAa,2BAA2B,KAAa,YAA4B;CAC/E,IAAI,CAAC,KAAK,OAAO;CAIjB,OAFe,IAAI,QAAQ,UAAU,YAAY,QAAQ,EAE7C,CAAC,CAAC,QAAQ,oBAAoB,QAAQ,QAAgB;EAEhE,MAAM,kBADiB,IAAI,WAAW,kBAAkB,EACnB,CAAC,CAAC,WAAW,8BAA8B,IAAI;EAEpF,OAAO,UAAU,kBAAkB,iBAAiB,IAAI,SAAS,EAAE;CACrE,CAAC;AACH;;;;;;AAOA,MAAa,yBAAyB,YAAgC;CACpE,MAAM,QAAQ,QAAQ,UAAU,IAAI;CACpC,MAAM,WAAW,WAAW,iBAAiB,OAAO;CAEpD,KAAK,MAAM,QAAQ,mBAAmB;EACpC,MAAM,QAAQ,SAAS,iBAAiB,IAAI,CAAC,CAAC,KAAK;EACnD,IAAI,OAAO,MAAM,MAAM,YAAY,MAAM,KAAK;CAChD;CAEA,MAAM,aAAa,SAAS;CAC5B,IAAI,YAAY,MAAM,MAAM,YAAY,eAAe,UAAU;CAEjE,OAAO,IAAI,cAAc,CAAC,CAAC,kBAAkB,KAAK;AACpD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/Mermaid/SyntaxMermaid/prepareMermaidSvg.ts
|
|
2
|
+
const voidElementPattern = new RegExp(`<(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)((?:\\s[^>]*?)?)\\s*/?>`, "gi");
|
|
3
|
+
const ensureXmlSafeVoidElements = (svg) => svg.replaceAll(voidElementPattern, "<$1$2/>");
|
|
4
|
+
const applyFirefoxSizeFix = (svg) => {
|
|
5
|
+
if (typeof window === "undefined" || typeof navigator === "undefined" || !navigator.userAgent.includes("Firefox") || typeof DOMParser === "undefined") return svg;
|
|
6
|
+
const svgDoc = new DOMParser().parseFromString(svg, "image/svg+xml");
|
|
7
|
+
if (svgDoc.querySelector("parsererror")) return svg;
|
|
8
|
+
const svgElement = svgDoc.documentElement;
|
|
9
|
+
if (!svgElement || svgElement.localName !== "svg" || !svgElement.hasAttribute("viewBox")) return svg;
|
|
10
|
+
const viewBoxParts = svgElement.getAttribute("viewBox").split(" ");
|
|
11
|
+
if (viewBoxParts.length !== 4) return svg;
|
|
12
|
+
svgElement.setAttribute("width", viewBoxParts[2]);
|
|
13
|
+
svgElement.setAttribute("height", viewBoxParts[3]);
|
|
14
|
+
return new XMLSerializer().serializeToString(svgDoc);
|
|
15
|
+
};
|
|
16
|
+
const prepareMermaidSvgString = (svg) => applyFirefoxSizeFix(ensureXmlSafeVoidElements(svg));
|
|
17
|
+
//#endregion
|
|
18
|
+
export { prepareMermaidSvgString };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=prepareMermaidSvg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareMermaidSvg.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/prepareMermaidSvg.ts"],"sourcesContent":["const VOID_ELEMENTS = 'area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr';\nconst voidElementPattern = new RegExp(`<(${VOID_ELEMENTS})((?:\\\\s[^>]*?)?)\\\\s*/?>`, 'gi');\n\n// Mermaid serializes HTML labels (foreignObject) with HTML rules, leaving void elements\n// like <br> unclosed. When that SVG string is loaded as a standalone image/svg+xml Blob,\n// the browser parses it as strict XML, rejects the unclosed tag, and fails the whole image.\nconst ensureXmlSafeVoidElements = (svg: string): string =>\n svg.replaceAll(voidElementPattern, '<$1$2/>');\n\nconst applyFirefoxSizeFix = (svg: string): string => {\n if (\n typeof window === 'undefined' ||\n typeof navigator === 'undefined' ||\n !navigator.userAgent.includes('Firefox') ||\n typeof DOMParser === 'undefined'\n ) {\n return svg;\n }\n\n const svgDoc = new DOMParser().parseFromString(svg, 'image/svg+xml');\n if (svgDoc.querySelector('parsererror')) return svg;\n\n const svgElement = svgDoc.documentElement;\n if (!svgElement || svgElement.localName !== 'svg' || !svgElement.hasAttribute('viewBox')) {\n return svg;\n }\n\n const viewBoxParts = svgElement.getAttribute('viewBox')!.split(' ');\n if (viewBoxParts.length !== 4) return svg;\n\n svgElement.setAttribute('width', viewBoxParts[2]!);\n svgElement.setAttribute('height', viewBoxParts[3]!);\n return new XMLSerializer().serializeToString(svgDoc);\n};\n\nexport const prepareMermaidSvgString = (svg: string): string =>\n applyFirefoxSizeFix(ensureXmlSafeVoidElements(svg));\n"],"mappings":";AACA,MAAM,qBAAqB,IAAI,OAAO,kGAA8C,IAAI;AAKxF,MAAM,6BAA6B,QACjC,IAAI,WAAW,oBAAoB,SAAS;AAE9C,MAAM,uBAAuB,QAAwB;CACnD,IACE,OAAO,WAAW,eAClB,OAAO,cAAc,eACrB,CAAC,UAAU,UAAU,SAAS,SAAS,KACvC,OAAO,cAAc,aAErB,OAAO;CAGT,MAAM,SAAS,IAAI,UAAU,CAAC,CAAC,gBAAgB,KAAK,eAAe;CACnE,IAAI,OAAO,cAAc,aAAa,GAAG,OAAO;CAEhD,MAAM,aAAa,OAAO;CAC1B,IAAI,CAAC,cAAc,WAAW,cAAc,SAAS,CAAC,WAAW,aAAa,SAAS,GACrF,OAAO;CAGT,MAAM,eAAe,WAAW,aAAa,SAAS,CAAC,CAAE,MAAM,GAAG;CAClE,IAAI,aAAa,WAAW,GAAG,OAAO;CAEtC,WAAW,aAAa,SAAS,aAAa,EAAG;CACjD,WAAW,aAAa,UAAU,aAAa,EAAG;CAClD,OAAO,IAAI,cAAc,CAAC,CAAC,kBAAkB,MAAM;AACrD;AAEA,MAAa,2BAA2B,QACtC,oBAAoB,0BAA0B,GAAG,CAAC"}
|
|
@@ -23,6 +23,17 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
23
23
|
width: 100%;
|
|
24
24
|
height: auto;
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
svg {
|
|
28
|
+
display: block;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: auto;
|
|
31
|
+
max-height: 480px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
svg text {
|
|
35
|
+
font-family: ${cssVar.fontFamily};
|
|
36
|
+
}
|
|
26
37
|
`),
|
|
27
38
|
noBackground: css`
|
|
28
39
|
img {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/style.ts"],"sourcesContent":["import { createStaticStyles, cx, keyframes } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nconst fadeIn = keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n return {\n animated: css`\n img {\n opacity: 1;\n animation: ${fadeIn} 0.5s ease-in-out;\n }\n `,\n\n mermaid: cx(\n 'ant-mermaid-mermaid',\n css`\n img {\n display: block;\n width: 100%;\n height: auto;\n }\n `,\n ),\n\n noBackground: css`\n img {\n background: transparent !important;\n }\n `,\n\n noPadding: css`\n padding: 0;\n `,\n\n padding: css`\n padding: 16px;\n `,\n\n root: css`\n direction: ltr;\n margin: 0;\n padding: 0;\n text-align: start;\n `,\n\n unmermaid: css`\n color: ${cssVar.colorTextDescription};\n `,\n };\n});\n\nexport const variants = cva(styles.root, {\n defaultVariants: {\n animated: false,\n mermaid: true,\n showBackground: false,\n variant: 'borderless',\n },\n\n variants: {\n mermaid: {\n false: styles.unmermaid,\n true: styles.mermaid,\n },\n showBackground: {\n false: styles.noBackground,\n true: null,\n },\n animated: {\n true: styles.animated,\n false: null,\n },\n variant: {\n filled: styles.padding,\n outlined: styles.padding,\n borderless: styles.noPadding,\n },\n },\n});\n"],"mappings":";;;AAGA,MAAM,SAAS,SAAS;;;;;;;;AASxB,MAAa,SAAS,oBAAoB,EAAE,KAAK,aAAa;CAC5D,OAAO;EACL,UAAU,GAAG;;;qBAGI,OAAO;;;EAIxB,SAAS,GACP,uBACA,GAAG
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/Mermaid/SyntaxMermaid/style.ts"],"sourcesContent":["import { createStaticStyles, cx, keyframes } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nconst fadeIn = keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n return {\n animated: css`\n img {\n opacity: 1;\n animation: ${fadeIn} 0.5s ease-in-out;\n }\n `,\n\n mermaid: cx(\n 'ant-mermaid-mermaid',\n css`\n img {\n display: block;\n width: 100%;\n height: auto;\n }\n\n svg {\n display: block;\n width: 100%;\n height: auto;\n max-height: 480px;\n }\n\n svg text {\n font-family: ${cssVar.fontFamily};\n }\n `,\n ),\n\n noBackground: css`\n img {\n background: transparent !important;\n }\n `,\n\n noPadding: css`\n padding: 0;\n `,\n\n padding: css`\n padding: 16px;\n `,\n\n root: css`\n direction: ltr;\n margin: 0;\n padding: 0;\n text-align: start;\n `,\n\n unmermaid: css`\n color: ${cssVar.colorTextDescription};\n `,\n };\n});\n\nexport const variants = cva(styles.root, {\n defaultVariants: {\n animated: false,\n mermaid: true,\n showBackground: false,\n variant: 'borderless',\n },\n\n variants: {\n mermaid: {\n false: styles.unmermaid,\n true: styles.mermaid,\n },\n showBackground: {\n false: styles.noBackground,\n true: null,\n },\n animated: {\n true: styles.animated,\n false: null,\n },\n variant: {\n filled: styles.padding,\n outlined: styles.padding,\n borderless: styles.noPadding,\n },\n },\n});\n"],"mappings":";;;AAGA,MAAM,SAAS,SAAS;;;;;;;;AASxB,MAAa,SAAS,oBAAoB,EAAE,KAAK,aAAa;CAC5D,OAAO;EACL,UAAU,GAAG;;;qBAGI,OAAO;;;EAIxB,SAAS,GACP,uBACA,GAAG;;;;;;;;;;;;;;;yBAegB,OAAO,WAAW;;OAGvC;EAEA,cAAc,GAAG;;;;;EAMjB,WAAW,GAAG;;;EAId,SAAS,GAAG;;;EAIZ,MAAM,GAAG;;;;;;EAOT,WAAW,GAAG;eACH,OAAO,qBAAqB;;CAEzC;AACF,CAAC;AAED,MAAa,WAAW,IAAI,OAAO,MAAM;CACvC,iBAAiB;EACf,UAAU;EACV,SAAS;EACT,gBAAgB;EAChB,SAAS;CACX;CAEA,UAAU;EACR,SAAS;GACP,OAAO,OAAO;GACd,MAAM,OAAO;EACf;EACA,gBAAgB;GACd,OAAO,OAAO;GACd,MAAM;EACR;EACA,UAAU;GACR,MAAM,OAAO;GACb,OAAO;EACT;EACA,SAAS;GACP,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,YAAY,OAAO;EACrB;CACF;AACF,CAAC"}
|