@keboola/design 4.3.0 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/classNames.ts","../src/utils/copyToClipboard.ts","../src/utils/createChangeInputEvent.ts","../src/constants/keyCodes.ts","../src/components/ThemeProvider/themeContext.ts","../src/components/internal/useIsLegacyBrand.ts","../src/components/Tooltip/TooltipContent.tsx","../src/components/Tooltip/TooltipRoot.tsx","../src/components/Tooltip/TooltipTrigger.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/index.ts","../src/utils/decorators.tsx","../src/utils/createPrefixedString.ts","../src/utils/escapeStringRegexp.ts","../src/utils/mergeRefs.ts","../src/utils/noop.ts","../src/utils/debounce.ts","../src/utils/isMac.ts","../src/utils/useSHA256.ts","../src/utils/index.ts","../src/components/Skeleton/Skeleton.tsx","../src/icons/Keboola.tsx","../src/icons/index.ts","../src/components/Button/styles.ts","../src/components/Button/Button.tsx","../src/components/Button/ButtonInline.tsx","../src/components/Button/index.ts","../src/components/Clipboard/Clipboard.tsx","../src/components/Clipboard/index.ts","../src/blocks/ClipboardButton/ClipboardButton.tsx","../src/blocks/ClipboardButton/index.ts","../src/components/ZoomableSvg/ZoomableSvg.tsx","../src/components/ZoomableSvg/index.ts","../src/blocks/MermaidDiagram/MermaidDiagram.tsx","../src/components/MarkdownEditor/MarkdownEditor.tsx","../src/components/MarkdownEditor/context.ts","../src/components/MarkdownEditor/nodes/ImageNodeComponent.tsx","../src/components/MarkdownEditor/nodes/ImageNode.tsx","../src/components/MarkdownEditor/nodes/MermaidNodeComponent.tsx","../src/components/MarkdownEditor/nodes/MermaidNode.tsx","../src/components/Toast/toast.tsx","../src/components/Toast/ToastRoot.tsx","../src/components/Toast/ToastAction.tsx","../src/components/Toast/ToastDescription.tsx","../src/components/Toast/ToastDismiss.tsx","../src/components/Toast/ToastDuration.tsx","../src/components/Toast/ToastTitle.tsx","../src/components/MarkdownEditor/plugins/ImagePastePlugin.tsx","../src/components/MarkdownEditor/plugins/KeyboardPlugin.tsx","../src/components/MarkdownEditor/transformers.ts","../src/components/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx","../src/components/MarkdownEditor/plugins/ToolbarPlugin.tsx","../src/components/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/DropdownMenu/DropdownMenuCheckboxItem.tsx","../src/components/DropdownMenu/DropdownMenuItemIndicator.tsx","../src/components/DropdownMenu/ItemIcon.tsx","../src/components/DropdownMenu/styles.ts","../src/components/DropdownMenu/DropdownMenuContent.tsx","../src/components/ScrollArea/ScrollArea.tsx","../src/components/ScrollArea/ScrollBar.tsx","../src/components/DropdownMenu/DropdownMenuContext.tsx","../src/components/DropdownMenu/DropdownMenuItem.tsx","../src/components/DropdownMenu/DropdownMenuItemDescription.tsx","../src/components/DropdownMenu/DropdownMenuLabel.tsx","../src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioGroup.tsx","../src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioItem.tsx","../src/components/DropdownMenu/DropdownMenuSeparator.tsx","../src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSub.tsx","../src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubContent.tsx","../src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubTrigger.tsx","../src/components/DropdownMenu/DropdownMenuTrigger.tsx","../src/components/MarkdownEditor/plugins/toolbar/BlockTypeDropdown.tsx","../src/components/MarkdownEditor/plugins/toolbar/LinkPanel.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/FormGroup/FormGroup.tsx","../src/components/FormGroup/context.ts","../src/components/InputGroup/InputGroup.tsx","../src/components/InputGroup/InputGroupAddon.tsx","../src/components/InputGroup/InputGroupButton.tsx","../src/components/InputGroup/InputGroupInput.tsx","../src/components/InputGroup/InputGroupText.tsx","../src/components/InputGroup/InputGroupTextArea.tsx","../src/blocks/ColorInput/ColorInput.tsx","../src/blocks/ColorInput/ColorPicker.tsx","../src/blocks/ColorInput/utils.ts","../src/components/FormGroup/FormGroupColorInput.tsx","../src/components/HelpBlock/HelpBlock.tsx","../src/components/FormGroup/FormGroupHelp.tsx","../src/blocks/NumberInput/NumberInput.tsx","../src/components/FormGroup/FormGroupNumberInput.tsx","../src/blocks/Textarea/Textarea.tsx","../src/components/FormGroup/FormGroupTextarea.tsx","../src/components/Input/Input.tsx","../src/components/Input/utils.ts","../src/components/Input/TextInput/TextInput.tsx","../src/components/FormGroup/FormGroupTextInput.tsx","../src/components/Label/Label.tsx","../src/components/MarkdownEditor/plugins/toolbar/ToolbarButton.tsx","../src/components/MarkdownEditor/plugins/toolbar/ToolbarDivider.tsx","../src/components/MarkdownEditor/theme.ts"],"names":["extendTailwindMerge","clsx","createContext","use","keboolaLegacy","cva","Portal","jsx","Content","Root","Trigger","useState","jsxs","init_Tooltip","useId","Fragment","forwardRef","lucide_react_star","Slottable","init_Button","text","init_Clipboard","init_ClipboardButton","useMemo","DOMPurify","useRef","useEffect","useCallback","init_ZoomableSvg","colors","renderMermaidSVG","DecoratorNode","MermaidDiagram","lazy","Suspense","variants","sonnerToast","toast","useLexicalComposerContext","$insertNodes","$getNodeByKey","PASTE_COMMAND","COMMAND_PRIORITY_CRITICAL","DROP_COMMAND","KEY_DOWN_COMMAND","COMMAND_PRIORITY_HIGH","HorizontalRuleNode","$isHorizontalRuleNode","$createHorizontalRuleNode","code","CHECK_LIST","TRANSFORMERS","$convertFromMarkdownString","$convertToMarkdownString","markdown","DropdownMenuPrimitive","DropdownMenuPrimitive2","ScrollAreaPrimitive","ScrollAreaPrimitive2","DropdownMenuPrimitive3","DropdownMenuPrimitive4","DropdownMenuPrimitive5","value","DropdownMenuPrimitive6","DropdownMenuPrimitive7","DropdownMenuPrimitive8","DropdownMenuPrimitive9","DropdownMenuPrimitive10","DropdownMenuPrimitive11","Group","$getSelection","$setSelection","FORMAT_ELEMENT_COMMAND","ListIcon","$isRangeSelection","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","$getNearestBlockElementAncestorOrThrow","$createHeadingNode","$createQuoteNode","$createCodeNode","$createParagraphNode","TextareaAutosize","Label","RLabel","TOGGLE_LINK_COMMAND","$createLinkNode","$createTextNode","LinkIcon","$isLinkNode","$isListNode","$isHeadingNode","$isCodeNode","$isQuoteNode","createPortal","FORMAT_TEXT_COMMAND","REMOVE_LIST_COMMAND","HeadingNode","QuoteNode","ListNode","ListItemNode","CodeNode","LinkNode","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","HistoryPlugin","LinkPlugin","ClickableLinkPlugin","ListPlugin","CheckListPlugin","HorizontalRulePlugin","TabIndentationPlugin","MarkdownShortcutPlugin","AutoFocusPlugin"],"mappings":"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","file":"markdown-editor.cjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n prefix: 'tw-',\n});\n\nexport const cn = (...classes: ClassValue[]) => twMerge(clsx(...classes));\n","export const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\n};\n","import type { ChangeEvent } from 'react';\n\nexport const createChangeInputEvent = (input: HTMLInputElement) => {\n const changeEvent: ChangeEvent<HTMLInputElement> = {\n target: input,\n currentTarget: input,\n type: 'change',\n nativeEvent: new Event('change', { bubbles: true }),\n bubbles: true,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 2, // AT_TARGET\n isTrusted: false, // Synthetic events are not trusted\n preventDefault: () => {}, // Provide dummy functions if not needed\n isDefaultPrevented: () => false,\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n persist: () => {},\n timeStamp: Date.now(),\n };\n\n Object.defineProperty(changeEvent, 'target', {\n value: input,\n writable: false,\n });\n\n return changeEvent;\n};\n","export const keyCodes = {\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SPACE: ' ',\n};\n","import { createContext } from 'react';\n\nimport type { Brand } from '@keboola/brand-registry';\n\nexport type ColorScheme = 'light' | 'dark' | 'system';\nexport type ResolvedMode = 'light' | 'dark';\n\nexport type ThemeContextValue = {\n brand: Brand;\n setBrand?: (brand: Brand) => void;\n /** The configured color scheme (may be `'system'`). */\n colorScheme: ColorScheme;\n /** The effective light/dark mode after resolving `'system'`. */\n resolvedMode: ResolvedMode;\n};\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n","import { use } from 'react';\n\nimport { keboolaLegacy } from '@keboola/brand-registry';\n\nimport { ThemeContext } from '../ThemeProvider/themeContext';\n\n// No provider mounted → legacy (preserves pre-brand-dispatch chrome for un-wrapped apps + tests).\nexport const useIsLegacyBrand = (): boolean => {\n const context = use(ThemeContext);\n return context === null || context.brand.id === keboolaLegacy.id;\n};\n","import type { ComponentProps } from 'react';\nimport { Content, Portal } from '@radix-ui/react-tooltip';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nconst tooltipVariants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-inline-block',\n 'tw-break-anywhere',\n 'tw-max-h-96',\n 'tw-overflow-y-auto',\n 'tw-z-[1060]',\n\n // legacy (dark) chrome — default\n 'tw-rounded',\n 'tw-bg-neutral-800',\n 'tw-text-white',\n\n // argo chrome overrides — semantic floating-panel tokens\n 'data-[argo=true]:tw-rounded-2xl',\n 'data-[argo=true]:tw-border',\n 'data-[argo=true]:tw-border-solid',\n 'data-[argo=true]:tw-border-border',\n 'data-[argo=true]:tw-bg-popover',\n 'data-[argo=true]:tw-text-popover-foreground',\n 'data-[argo=true]:tw-shadow-md',\n\n // argo open animation\n 'data-[argo=true]:data-[state=delayed-open]:tw-animate-in',\n 'data-[argo=true]:data-[state=instant-open]:tw-animate-in',\n 'data-[argo=true]:data-[state=delayed-open]:tw-fade-in-0',\n 'data-[argo=true]:data-[state=instant-open]:tw-fade-in-0',\n 'data-[argo=true]:data-[state=delayed-open]:tw-zoom-in-95',\n 'data-[argo=true]:data-[state=instant-open]:tw-zoom-in-95',\n\n // argo closed animation\n 'data-[argo=true]:data-[state=closed]:tw-animate-out',\n 'data-[argo=true]:data-[state=closed]:tw-fade-out-0',\n 'data-[argo=true]:data-[state=closed]:tw-zoom-out-95',\n\n // argo position animation\n 'data-[argo=true]:data-[side=bottom]:tw-slide-in-from-top-2',\n 'data-[argo=true]:data-[side=left]:tw-slide-in-from-right-2',\n 'data-[argo=true]:data-[side=right]:tw-slide-in-from-left-2',\n 'data-[argo=true]:data-[side=top]:tw-slide-in-from-bottom-2',\n ],\n {\n defaultVariants: {\n variant: 'action',\n },\n variants: {\n variant: {\n action: [\n 'tw-max-w-fit',\n 'tw-px-3',\n 'tw-py-2',\n\n 'tw-text-center',\n 'tw-text-xs',\n 'tw-font-medium',\n 'tw-uppercase',\n 'tw-tracking-wider',\n ],\n explanatory: [\n 'tw-max-w-80',\n 'tw-px-4',\n 'tw-py-3',\n 'tw-text-left',\n\n 'tw-text-sm',\n 'tw-font-normal',\n ],\n },\n },\n },\n);\n\ntype Props = {\n keepOpenOnPointerDownOutside?: boolean;\n placement?: ComponentProps<typeof Content>['side'];\n} & Omit<ComponentProps<typeof Content>, 'side'> &\n VariantProps<typeof tooltipVariants>;\n\nexport const TooltipContent = ({\n className,\n variant,\n keepOpenOnPointerDownOutside = false,\n children,\n onPointerDownOutside,\n sideOffset = 8,\n collisionPadding = 8,\n hideWhenDetached = true,\n placement = 'right',\n ...rest\n}: Props) => {\n const isLegacy = useIsLegacyBrand();\n const renderArgo = !isLegacy;\n\n const handlePointerDownOutside: ComponentProps<typeof Content>['onPointerDownOutside'] = (\n event,\n ) => {\n if (keepOpenOnPointerDownOutside) event.preventDefault();\n onPointerDownOutside?.(event);\n };\n\n return (\n <Portal>\n <Content\n {...rest}\n // Marks the dark (non-argo) tooltip chrome so styles.css can invert\n // nested `.tw-prose` for contrast.\n data-tooltip-content={renderArgo ? undefined : true}\n data-argo={renderArgo}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n onPointerDownOutside={handlePointerDownOutside}\n className={tooltipVariants({ className, variant })}\n hideWhenDetached={hideWhenDetached}\n side={placement}\n >\n {children}\n </Content>\n </Portal>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Root } from '@radix-ui/react-tooltip';\n\ntype Props = ComponentProps<typeof Root>;\n\nconst DELAY_SHOW_TOOLTIP = 300;\n\nexport const TooltipRoot = ({ children, delayDuration = DELAY_SHOW_TOOLTIP, ...rest }: Props) => (\n <Root {...rest} delayDuration={delayDuration}>\n {children}\n </Root>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Trigger } from '@radix-ui/react-tooltip';\n\nimport { cn } from '../../utils';\n\ntype Props = {\n keepOpenOnClick?: boolean;\n} & ComponentProps<typeof Trigger>;\n\nexport const TooltipTrigger = ({\n ref,\n children,\n className,\n keepOpenOnClick = false,\n onClick,\n onPointerDown,\n asChild,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const handleClick: ComponentProps<typeof Trigger>['onClick'] = (event) => {\n if (keepOpenOnClick) event.preventDefault();\n onClick?.(event);\n };\n\n const handlePointerDown: ComponentProps<typeof Trigger>['onPointerDown'] = (event) => {\n if (keepOpenOnClick) event.preventDefault();\n onPointerDown?.(event);\n };\n\n return (\n <Trigger\n {...rest}\n asChild\n ref={ref}\n className={cn('tailwindcss-preflight', className)}\n onClick={handleClick}\n onPointerDown={handlePointerDown}\n >\n {asChild ? (\n children\n ) : (\n // Default-mode trigger wraps children in a span so Radix has a\n // single DOM element to attach handlers to. `tailwindcss-preflight`\n // (merged in via Slot) activates Tailwind's preflight inside the\n // span, which sets `svg { display: block }` — without an inline-flex\n // container that would stack any bare Lucide icon onto its own\n // line. `tw-inline-flex tw-items-center` keeps icon + text aligned.\n <span className=\"tw-inline-flex tw-items-center\">{children}</span>\n )}\n </Trigger>\n );\n};\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { Content, Trigger } from '@radix-ui/react-tooltip';\nimport { Provider } from '@radix-ui/react-tooltip';\n\nimport { keyCodes } from '../../constants/keyCodes';\n\nimport { TooltipContent } from './TooltipContent';\nimport { TooltipRoot } from './TooltipRoot';\nimport { TooltipTrigger } from './TooltipTrigger';\n\nconst ACTION_TOOLTIP_LIMIT = 30;\n\ntype TriggerProps = {\n triggerAsChild?: boolean;\n};\n\n/**\n * Props for `Tooltip`. `tooltip` is the popup content; `children` is the trigger element.\n * `variant` auto-resolves to `\"explanatory\"` for strings >30 chars, else `\"action\"`.\n */\nexport type Props = {\n /** Keep the tooltip visible when the user clicks the trigger (useful for click-to-copy feedback). */\n keepOpenOnTriggerClick?: boolean;\n /** Content rendered inside the tooltip. Plain text only — no interactive elements (use `HoverCard` or `Popover` for that). */\n tooltip: ReactNode;\n children: ReactNode;\n placement?: ComponentProps<typeof Content>['side'];\n /** Forcibly hide the tooltip regardless of hover state. */\n forceHide?: boolean;\n /** Forcibly show the tooltip regardless of hover state. Useful for guided-tour overlays. */\n forceShow?: boolean;\n className?: string;\n} & TriggerProps &\n Pick<ComponentProps<typeof TooltipContent>, 'variant' | 'className'>;\n\n/** Re-export of Radix `Tooltip.Provider`. Mount once at the app root so tooltips share delay state. */\nexport const TooltipProvider = Provider;\n\n/**\n * Short plain-text label that appears on hover or focus.\n *\n * **When to use:** describing an icon-only `Button`, explaining a disabled control, or labelling a\n * truncated value. Plain text only — auto-switches to the longer `\"explanatory\"` variant when the string\n * exceeds 30 characters.\n * **When NOT to use:** for rich preview content (multiple lines, formatted text, structured data) use\n * `HoverCard`; for tooltips containing links or buttons use `Popover` (interactive elements break a11y\n * inside a `Tooltip`).\n * **Composition:** wrap any focusable element via `triggerAsChild` so the tooltip targets the underlying\n * native element. Mount `TooltipProvider` once at the app root.\n *\n * @see RECIPES.md#disabled-button-tooltip — for the disabled-button + tooltip pattern\n */\nexport const Tooltip = ({\n tooltip,\n children,\n className,\n keepOpenOnTriggerClick = false,\n variant,\n placement = 'right',\n forceHide = false,\n forceShow = false,\n // trigger props\n triggerAsChild = false,\n}: Props) => {\n const [open, setOpen] = useState(false);\n\n const resolvedVariant = (() => {\n if (!!variant) return variant;\n if (typeof tooltip === 'string' && tooltip.length > ACTION_TOOLTIP_LIMIT) return 'explanatory';\n\n return 'action';\n })();\n\n const isActionVariant = resolvedVariant === 'action';\n\n const handleKeyUp: ComponentProps<typeof Trigger>['onKeyUp'] = (event) => {\n if (![keyCodes.ENTER, keyCodes.SPACE].includes(event.key)) return;\n event.stopPropagation();\n };\n\n return (\n <TooltipRoot\n open={!!tooltip && (open || forceShow) && !forceHide}\n onOpenChange={setOpen}\n disableHoverableContent={isActionVariant}\n >\n <TooltipTrigger\n asChild={triggerAsChild}\n keepOpenOnClick={keepOpenOnTriggerClick}\n onKeyUp={handleKeyUp}\n >\n {children}\n </TooltipTrigger>\n\n <TooltipContent\n className={className}\n variant={resolvedVariant}\n placement={placement}\n keepOpenOnPointerDownOutside={keepOpenOnTriggerClick}\n >\n {tooltip}\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nTooltip.Root = TooltipRoot;\nTooltip.Content = TooltipContent;\nTooltip.Trigger = TooltipTrigger;\n","export * from './Tooltip';\n","import type { ComponentType } from 'react';\n\nimport { TooltipProvider } from '../components/Tooltip';\n\nexport const withTooltipProvider = (Story: ComponentType) => (\n <TooltipProvider>\n <Story />\n </TooltipProvider>\n);\n\n// position:fixed only fills the Storybook iframe, not the browser window.\nexport const withHiddenFullscreen = (Story: ComponentType) => (\n <div className=\"[&_[aria-label=Fullscreen]]:tw-hidden\">\n <Story />\n </div>\n);\n","export const createPrefixedString = (prefix: string) => (literals: TemplateStringsArray) =>\n literals.reduce((acc, literal) => acc + literal, `${prefix}-`);\n","// Escape characters with special meaning either inside or outside character sets.\n// Use a simple backslash escape when it's always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns' stricter grammar.\nexport const escapeStringRegexp = (string: string) =>\n string.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n","import type { MutableRefObject, RefCallback } from 'react';\n\ntype PossibleRef<T> = MutableRefObject<T> | RefCallback<T> | null;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nexport const mergeRefs = <T>(...refs: PossibleRef<T>[]) => {\n return (node: T) => refs.forEach((ref) => setRef(ref, node));\n};\n","export const noop = () => void 0;\n","type DebouncedFn<T extends (...args: any[]) => void> = {\n (...args: Parameters<T>): void;\n cancel: () => void;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n delay: number,\n): DebouncedFn<T> => {\n let timeoutId: ReturnType<typeof setTimeout>;\n const debounced = (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n debounced.cancel = () => clearTimeout(timeoutId);\n return debounced;\n};\n","// Platform detection\ntype NavigatorUAData = {\n platform: string;\n brands: { brand: string; version: string }[];\n mobile: boolean;\n};\n\nconst getIsMac = (): boolean => {\n // Modern approach using navigator.userAgentData\n if (typeof navigator !== 'undefined' && 'userAgentData' in navigator) {\n const platform = (navigator.userAgentData as NavigatorUAData).platform;\n\n if (typeof platform === 'string') {\n return platform.toLowerCase() === 'macos';\n }\n }\n\n if (typeof navigator !== 'undefined' && typeof navigator.platform === 'string') {\n return navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n }\n\n // Server-side rendering fallback\n return false;\n};\n\nexport const isMac = getIsMac();\n","import { useEffect, useState } from 'react';\n\n// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\nconst sha256 = async (text: string) => {\n const msgUint8 = new TextEncoder().encode(text);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\nexport const useSHA256 = (text?: string) => {\n const [hash, setHash] = useState('');\n\n useEffect(() => {\n if (!text) return;\n let cancelled = false;\n sha256(text).then((h) => {\n if (!cancelled) setHash(h);\n });\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n // Empty input has no hash — derive it during render instead of syncing state\n // in the effect (avoids the extra render and a stale-value frame).\n return text ? hash : '';\n};\n","export * from './classNames';\nexport * from './copyToClipboard';\nexport * from './createChangeInputEvent';\nexport * from './decorators';\nexport * from './createPrefixedString';\nexport * from './escapeStringRegexp';\nexport * from './mergeRefs';\nexport * from './noop';\nexport * from './debounce';\nexport * from './isMac';\nexport * from './useSHA256';\n","import { useId } from 'react';\n\nimport { cn } from '../../utils';\n\nexport type Height = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/**\n * Props for `Skeleton`. `height` maps to the named token (xxs 12px → 2xl 48px); `count` renders multiple\n * stacked placeholders sharing the same shape.\n */\ntype SkeletonProps = {\n /** Named height token — `xxs` (12px) through `2xl` (48px). */\n height?: Height;\n className?: string;\n /** Number of stacked placeholder rows. Use for list-style loading states. */\n count?: number;\n};\n\nconst HEIGHT_CLASS_NAME: Record<Height, string> = {\n xxs: 'tw-h-3 tw-rounded',\n xs: 'tw-h-4 tw-rounded',\n sm: 'tw-h-5 tw-rounded',\n md: 'tw-h-6 tw-rounded-md',\n lg: 'tw-h-8 tw-rounded-lg',\n xl: 'tw-h-10 tw-rounded-lg',\n '2xl': 'tw-h-12 tw-rounded-lg',\n};\n\nconst ANIMATION_CLASS_NAME = cn(\n // base styles\n 'tw-relative',\n 'tw-overflow-hidden',\n 'tw-pointer-events-none',\n 'tw-bg-muted',\n\n // before\n 'before:tw-content-[\"\"]',\n 'before:tw-opacity-100',\n 'before:tw-absolute',\n 'before:tw-inset-0',\n 'before:-tw-translate-x-full',\n 'before:tw-animate-[shimmer_2s_infinite]',\n 'before:tw-bg-gradient-to-r',\n 'before:tw-from-transparent',\n 'before:tw-to-transparent',\n 'before:tw-via-neutral-50',\n);\n\n/**\n * Animated placeholder shown in place of content that is still loading.\n *\n * **When to use:** during initial page or section load while the real content is fetched. Match the\n * placeholder shape to the eventual content (one `Skeleton height=\"lg\"` per title row, several `xs` for\n * paragraph lines). For list shells use `count` to render N stacked placeholders.\n * **When NOT to use:** for indeterminate background work without a layout slot use `DotsLoader` or\n * `Button isLoading`; for empty / error states once the request resolves use `EmptyState` / `ErrorState`.\n * **Composition:** drop directly into the slot the real content will occupy. `SkeletonList` is the typical\n * shell for `Table` / `Card`-list pages.\n *\n * @see RECIPES.md#data-card-with-skeleton — for a loading card pattern\n */\nexport const Skeleton = ({ height = 'md', className, count = 1 }: SkeletonProps) => {\n const prefixId = useId();\n const keys = Array.from({ length: count }, (_, i) => `${prefixId}-${i}`);\n\n return (\n <>\n {keys.map((key) => (\n <div\n key={key}\n data-skeleton=\"true\"\n className={cn(HEIGHT_CLASS_NAME[height], ANIMATION_CLASS_NAME, className)}\n />\n ))}\n </>\n );\n};\n","import { forwardRef } from 'react';\nimport type { LucideIcon, LucideProps } from 'lucide-react';\n\nimport { cn } from '../utils';\n\n// `forwardRef` here is required for type compatibility with `LucideIcon`\n// (a `ForwardRefExoticComponent` from lucide-react). React 19's ref-as-prop\n// pattern produces a plain function component which isn't structurally\n// assignable to `LucideIcon`, so consumers couldn't pass `Keboola`\n// interchangeably with imported Lucide icons (e.g. `<Button><Keboola className=\"tw-size-4\" /></Button>`).\n// oxlint-disable-next-line react-x/no-forward-ref\nexport const Keboola: LucideIcon = forwardRef<SVGSVGElement, LucideProps>(\n ({ size = 24, color = 'currentColor', className, children, ...rest }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 300 512\"\n fill={color}\n className={cn('lucide', className)}\n {...rest}\n >\n <path d=\"M152 320C79.7 320 24.5 233.9 24.5 124.7C24.5 15.6 70.5 0 152 0s123.6 15.6 123.6 124.7C275.5 233.9 217.7 320 152 320zm-8.7-50.5c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm55.7 0c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm68.9 115.1c10.2 9.3 20.2 20.5 29 35c5.9 9.7 2.6 22.1-7.5 27.8c-3.4 1.9-7.1 2.8-10.7 2.8c-7.2 0-14.3-3.6-18.3-10c-6.8-11.1-13.8-18.9-21.7-26.1c-7.3-6.7-15.6-12.7-24.9-19.5c-.7-.5-1.4-1-2.1-1.5c-5-3.6-10-6.8-14.9-9.4c.6 1 1.2 2.1 1.8 3.2c14.4 26.4 29.2 63.1 29.2 104.9c0 11.2-9.5 20.3-21.2 20.3c-11.7 0-21.2-9.1-21.2-20.3c.1-31.8-11.6-62.3-23.8-84.9c-4-7.4-8-13.9-11.6-19.3c-3.4 5.2-7.2 11.3-11 18.3c-12.5 22.7-24.5 53.8-24.4 86c0 11.2-9.5 20.3-21.2 20.3s-21.2-9.1-21.2-20.3c.1-41.8 14.9-78.4 29.2-104.9c.6-1.1 1.2-2.1 1.8-3.2c-5 2.7-9.9 5.8-14.9 9.4c-.6 .5-1.3 .9-1.9 1.4c-9.5 6.9-17.8 12.9-25.1 19.7c-7.9 7.2-14.9 15.1-21.7 26.1c-5.9 9.7-18.9 12.9-29 7.2C.5 441.8-2.9 429.3 3.1 419.7c8.9-14.4 18.8-25.7 29-35c9.2-8.4 18.5-15.1 27.6-21.7c1-.7 2-1.4 3-2.2c4.7-3.5 9.6-6.7 14.6-9.6c-5-2.9-9.8-6.1-14.6-9.6C39.8 325 19.9 302.5 3.1 275.1c-5.9-9.7-2.6-22.1 7.5-27.8c10.1-5.7 23.1-2.5 29 7.2c14.6 23.7 31.1 42 48.7 54.9c18.9 13.7 37.4 20.5 56.5 21.5c1.7-.1 3.5-.1 5.2-.1c1.8 0 3.5 .1 5.2 .1c0 0 0 0 0 0c19.1-1.1 37.6-7.9 56.5-21.5c17.6-12.8 34.2-31.2 48.7-54.9c6-9.7 18.9-12.9 29-7.2c10.1 5.7 13.4 18.1 7.5 27.8c-16.8 27.4-36.7 49.9-59.6 66.6c-4.7 3.5-9.6 6.7-14.5 9.6c4.9 2.9 9.8 6.1 14.5 9.6c.9 .7 1.8 1.3 2.7 2c9.2 6.7 18.5 13.5 27.9 22z\" />\n {children}\n </svg>\n ),\n);\n\nKeboola.displayName = 'Keboola';\n","export * from 'lucide-react';\nexport type { LucideIcon, LucideProps } from 'lucide-react';\n\nexport { Keboola } from './Keboola';\n","import { cva } from 'class-variance-authority';\n\nexport const variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-group/button',\n 'tw-border-box',\n\n // layout\n 'tw-relative',\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-gap-2',\n\n // text\n 'tw-text-xs',\n 'tw-leading-5',\n 'tw-font-medium',\n 'tw-tracking-[1px]',\n 'tw-uppercase',\n\n // border\n 'tw-rounded',\n 'tw-border',\n 'tw-border-transparent',\n\n // styling\n 'tw-shadow-none',\n '[a]:tw-cursor-pointer', // explicitly set for anchor\n\n 'focus-visible:tw-outline',\n 'focus-visible:tw-outline-1',\n 'focus-visible:-tw-outline-offset-1',\n 'focus-visible:tw-outline-ring',\n 'focus-visible:tw-ring-4',\n 'focus-visible:tw-ring-ring/30',\n\n // disabled\n 'disabled:tw-opacity-40',\n 'disabled:tw-cursor-not-allowed',\n\n // anchor support\n '!tw-no-underline',\n 'aria-disabled:tw-opacity-40',\n 'aria-disabled:tw-cursor-not-allowed',\n\n '[&_svg]:tw-shrink-0',\n ],\n {\n defaultVariants: {\n size: 'medium',\n variant: 'primary',\n block: false,\n },\n variants: {\n block: {\n true: ['tw-w-full'],\n },\n variant: {\n primary: [\n 'tw-text-white',\n 'tw-bg-primary-500',\n\n 'focus:tw-text-white',\n 'hover:tw-text-white',\n 'hover:not-disabled:tw-bg-primary-600',\n 'active:not-disabled:tw-bg-primary-800',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-primary-500',\n ],\n secondary: [\n 'tw-text-white',\n 'tw-bg-secondary-500',\n\n 'focus:tw-text-white',\n 'hover:tw-text-white',\n 'hover:not-disabled:tw-bg-secondary-700',\n 'active:not-disabled:tw-bg-secondary-800',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-secondary-500',\n ],\n danger: [\n 'tw-text-white',\n 'tw-bg-error-500',\n\n 'focus:tw-text-white',\n 'hover:tw-text-white',\n 'hover:not-disabled:tw-bg-error-600',\n 'active:not-disabled:tw-bg-error-700',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-error-500',\n ],\n invisible: [\n 'tw-text-neutral-800',\n 'tw-bg-transparent',\n\n 'focus:tw-text-neutral-800',\n 'hover:not-disabled:tw-bg-neutral-100',\n 'hover:tw-text-neutral-800',\n 'active:not-disabled:tw-bg-neutral-150',\n\n // contrasting icon on hover/active\n '[&_svg]:tw-text-neutral-400',\n '[&_svg]:hover:not-disabled:tw-text-secondary-600',\n '[&_svg]:active:not-disabled:tw-text-secondary-600',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-transparent',\n ],\n outline: [\n 'tw-text-neutral-800',\n 'tw-bg-white',\n // border\n '!tw-border-neutral-200',\n 'hover:tw-text-neutral-800',\n 'focus:tw-text-neutral-800',\n 'hover:not-disabled:!tw-border-neutral-300',\n 'hover:not-disabled:tw-bg-neutral-100',\n 'active:not-disabled:tw-bg-neutral-200',\n\n // contrasting icon hover, same as invisible\n '[&_svg]:tw-text-neutral-400',\n '[&_svg]:not-disabled:hover:tw-text-secondary-600',\n '[&_svg]:active:not-disabled:tw-text-secondary-600',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-white',\n 'aria-disabled:!tw-border-neutral-200',\n ],\n\n inline: [\n 'tw-text-neutral-800',\n 'tw-bg-transparent',\n 'tw-rounded-full',\n\n '[&_svg]:tw-text-neutral-400',\n '[&_svg]:not-disabled:hover:tw-text-secondary-600',\n '[&_svg]:not-disabled:focus:tw-text-secondary-600',\n ],\n },\n size: {\n medium: [\n 'tw-max-h-10',\n 'tw-min-h-10',\n 'tw-px-4',\n 'tw-py-2.5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n ],\n small: [\n 'tw-max-h-8',\n 'tw-min-h-8',\n 'tw-px-4',\n 'tw-py-1.5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n ],\n large: [\n 'tw-max-h-12',\n 'tw-min-h-12',\n 'tw-px-4',\n 'tw-py-3.5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n ],\n\n 'icon-lg': ['tw-size-12', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-6'],\n icon: ['tw-size-10', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n 'icon-sm': ['tw-size-8', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n 'icon-xs': ['tw-size-6', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n 'icon-2xs': [\n '!tw-inline-flex',\n 'tw-size-5',\n 'tw-max-h-5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-3',\n ],\n 'icon-3xs': ['tw-h-fit', 'tw-w-fit', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n },\n },\n },\n);\n\nexport const argoVariants = cva(\n [\n 'tailwindcss-preflight',\n\n // layout\n 'tw-relative',\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-whitespace-nowrap',\n 'tw-gap-2',\n\n // border\n 'tw-border',\n 'tw-border-transparent',\n 'tw-rounded-lg',\n\n // text\n 'tw-font-medium',\n 'tw-select-none',\n\n // focus visible\n '!tw-outline-none',\n 'focus-visible:tw-ring-2',\n\n // disabled\n 'disabled:tw-cursor-not-allowed',\n 'disabled:tw-opacity-50',\n 'active:tw-opacity-60',\n\n 'tw-transition-all',\n 'tw-bg-clip-padding',\n\n // anchor support\n '!tw-no-underline',\n 'aria-disabled:tw-cursor-not-allowed',\n 'aria-disabled:tw-opacity-50',\n\n // icon\n 'tw-shrink-0',\n '[&_svg]:tw-pointer-events-none',\n '[&_svg]:tw-shrink-0',\n \"[&_svg:not([class*='tw-size-'])]:tw-size-4\",\n ],\n {\n defaultVariants: {\n variant: 'primary',\n size: 'medium',\n },\n variants: {\n block: {\n true: ['tw-w-full'],\n },\n variant: {\n primary: [\n 'tw-bg-primary',\n 'tw-text-primary-foreground',\n '[a]:hover:tw-bg-primary/80',\n 'hover:not-disabled:tw-bg-primary/90',\n 'hover:tw-text-primary-foreground',\n 'focus:tw-text-primary-foreground',\n\n 'focus-visible:tw-border-primary',\n 'focus-visible:tw-ring-primary/50',\n ],\n secondary: [\n 'tw-bg-primary/10',\n 'tw-text-primary',\n 'hover:not-disabled:tw-bg-primary/20',\n\n 'focus-visible:tw-border-primary',\n 'focus-visible:tw-ring-primary/50',\n ],\n\n // should be called \"destructive\" by Figma\n danger: [\n 'tw-bg-destructive',\n 'tw-text-destructive-foreground',\n 'hover:tw-text-destructive-foreground',\n 'focus:tw-text-destructive-foreground',\n\n 'focus-visible:tw-border-destructive',\n 'focus-visible:tw-ring-destructive/20',\n ],\n outline: [\n '!tw-border-input',\n 'tw-bg-background',\n 'hover:not-disabled:tw-bg-accent',\n 'hover:not-disabled:tw-text-accent-foreground',\n 'hover:active:tw-bg-background',\n 'focus-visible:!tw-border-primary',\n 'focus-visible:tw-ring-primary/50',\n ],\n\n // should be called \"ghost\" by Figma\n invisible: [\n 'tw-bg-transparent',\n 'tw-text-foreground',\n 'hover:not-disabled:tw-bg-accent',\n 'hover:not-disabled:tw-text-accent-foreground',\n 'hover:not-disabled:tw-border-accent',\n\n 'focus-visible:tw-ring-primary/50',\n ],\n // should be called \"link\" by Figma\n inline: [\n 'tw-bg-transparent',\n 'tw-text-primary',\n 'hover:tw-underline',\n 'hover:active:tw-bg-transparent',\n 'focus-visible:tw-ring-primary/50',\n ],\n },\n size: {\n // should be called \"default\" by Figma\n medium: ['tw-max-h-9', 'tw-py-2', 'tw-px-4', 'tw-text-sm'],\n // should be called \"small\" by Figma\n small: ['tw-max-h-8', 'tw-py-2', 'tw-px-3', 'tw-text-xs'],\n // should be called \"large\" by Figma\n large: ['tw-max-h-10', 'tw-py-2.5', 'tw-px-6', 'tw-text-sm'],\n\n 'icon-lg': ['tw-size-10'],\n icon: ['tw-size-9'],\n 'icon-sm': ['tw-size-8'],\n // unsupported in ARGO, remove when old design is gone\n 'icon-xs': [],\n 'icon-2xs': [],\n 'icon-3xs': [],\n },\n },\n },\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Root, Slottable } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { Loader2 } from '../../icons';\nimport { cn } from '../../utils';\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { argoVariants, variants } from './styles';\n\n/**\n * Props for the `Button` component.\n *\n * Pass `variant` for primary/secondary/danger/outline/invisible looks, `size`\n * for height (including `icon-*` sizes when rendering icon-only). Icons are\n * composed as children — `<Button><Trash2 className=\"tw-size-4\" /> Delete</Button>`.\n */\ntype Props = {\n /** Replaces the leading content with a spinner and disables the button visually. The caller still controls `disabled`. */\n isLoading?: boolean;\n /** Render as a Radix `Slot` so the parent JSX (e.g. a `react-router` `<Link>`) becomes the button element. */\n asChild?: boolean;\n} & ComponentProps<'button'> &\n VariantProps<typeof variants>;\n\n/**\n * Primary action surface for the design system — covers all clickable controls except inline text links.\n *\n * **When to use:** any user-initiated action (submit, save, open modal, run job). Use `size=\"icon-*\"` with no\n * children for an icon-only button; there is no separate `IconButton` component.\n * **When NOT to use:** for inline text-link actions inside body copy use `ButtonInline`; for navigation that\n * opens a URL use `Link`; for \"primary action + dropdown of related actions\" use `SplitButton`.\n * **Composition:** wrap in `Tooltip` when icon-only or when disabled state needs an explanation; pair with\n * `Popconfirm` for destructive confirmations; pass through `Modal.Trigger` / `DropdownMenu.Trigger` via `asChild`.\n *\n * @see RECIPES.md#disabled-button-tooltip — for the disabled-button + tooltip pattern\n * @see RECIPES.md#confirm-dialog — for destructive-action confirmation\n */\nexport const Button = ({\n ref,\n children,\n disabled = false,\n className,\n type = 'button',\n isLoading = false,\n asChild = false,\n onClick,\n variant = 'primary',\n size = 'medium',\n block = false,\n ...buttonProps\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const isLegacy = useIsLegacyBrand();\n const renderArgo = !isLegacy;\n const Comp = asChild ? Root : 'button';\n const isIconOnly = String(size).startsWith('icon');\n const classNames = renderArgo\n ? argoVariants({ variant, size, block, className })\n : variants({ size, variant, block, className });\n\n const handleClick: ComponentProps<'button'>['onClick'] = (event) => {\n const isAnchor = event.currentTarget.tagName === 'A';\n\n // <a/> does not support disabled by default, and we cannot use pointer-events: none because cursor-not-allowed would not work.\n if (isAnchor && disabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Comp\n {...buttonProps}\n ref={ref}\n disabled={disabled}\n aria-disabled={disabled}\n data-variant={variant}\n // `size=\"icon\"` / `size=\"icon-*\"` flags the button as icon-only — needed\n // by `ButtonGroup space=\"block\"` which stretches non-icon children to\n // equal width.\n data-icon-only={isIconOnly}\n type={type}\n onClick={handleClick}\n className={cn(classNames)}\n >\n {isLoading && <Loader2 className=\"tw-size-4 tw-shrink-0 tw-animate-spin\" />}\n <Slottable>{isLoading && isIconOnly ? null : children}</Slottable>\n </Comp>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Root } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nconst buttonInlineVariants = cva(\n [\n 'tailwindcss-preflight',\n\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-gap-2',\n\n 'tw-underline-offset-2',\n\n 'disabled:tw-opacity-40',\n 'disabled:tw-cursor-not-allowed',\n 'disabled:tw-text-neutral-500',\n 'disabled:tw-no-underline',\n '[&_svg]:disabled:tw-text-neutral-400',\n\n // Default size for nested Lucide icons; callers can override on the icon.\n \"[&_svg.lucide:not([class*='tw-size-'])]:tw-size-4\",\n '[&_svg]:tw-shrink-0',\n ],\n {\n defaultVariants: {\n variant: 'link',\n color: 'link',\n },\n variants: {\n color: {\n link: ['tw-text-primary', 'hover:tw-text-primary/90', '[&_svg]:tw-text-primary'],\n dark: ['tw-text-neutral-800 [&_svg]:tw-text-neutral-400'],\n danger: ['tw-text-error-500 [&_svg]:tw-text-error-500'],\n muted: ['tw-text-muted-foreground [&_svg]:tw-text-muted-foreground'],\n custom: [],\n },\n variant: {\n link: ['tw-underline', 'hover:tw-no-underline'],\n 'link-reverse': ['tw-no-underline', '', 'hover:tw-underline'],\n custom: [],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'button'> &\n VariantProps<typeof buttonInlineVariants> & { asChild?: boolean };\n\nexport const ButtonInline = ({\n ref,\n children,\n className,\n variant,\n color,\n type = 'button',\n asChild = false,\n ...buttonProps\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const Comp = asChild ? Root : 'button';\n\n return (\n <Comp\n {...buttonProps}\n ref={ref}\n type={asChild ? undefined : type}\n className={buttonInlineVariants({ variant, color, className })}\n >\n {children}\n </Comp>\n );\n};\n","export * from './Button';\nexport * from './ButtonInline';\nexport { argoVariants } from './styles';\n","import { useState } from 'react';\nimport type { ComponentProps, ElementRef, MouseEventHandler, Ref } from 'react';\n\nimport { cn, copyToClipboard } from '../../utils';\nimport { type Props as TooltipProps, Tooltip } from '../Tooltip';\n\ntype Props = {\n tooltip?: TooltipProps['tooltip'];\n tooltipPlacement?: TooltipProps['placement'];\n tooltipVariant?: TooltipProps['variant'];\n asChild?: TooltipProps['triggerAsChild'];\n text?: string | (() => string);\n} & ComponentProps<'button'>;\n\nexport const Clipboard = ({\n ref,\n text: textProp,\n children,\n tooltip = 'Copy to Clipboard',\n tooltipPlacement = 'top',\n tooltipVariant: tooltipVariantProp = 'action',\n asChild = false,\n onClick,\n className,\n ...restButtonProps\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n const [state, setState] = useState<'ready' | 'copied' | 'error'>('ready');\n const text = typeof textProp === 'function' ? textProp() : textProp;\n\n const copy = async (text: string) => {\n try {\n // For the clipboard feature to work reliably, the window must be in focus for security reasons.\n // However, the button can be clicked without the window being focused.\n if (!document.hasFocus()) window.focus();\n\n await copyToClipboard(text);\n setState('copied');\n } catch {\n setState('error');\n }\n };\n\n const handleOnClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (text && state === 'ready') void copy(text);\n onClick?.(event);\n };\n\n const handleOnOpenChange: ComponentProps<typeof Tooltip.Root>['onOpenChange'] = (open) => {\n // Reset when the tooltip closes, allowing the user to leave the copy button.\n if (!open && state !== 'ready') setState('ready');\n setIsTooltipOpen(open);\n };\n\n const tooltipContent = (() => {\n if (!text) return 'Nothing to copy';\n if (state === 'error') return 'Failed to copy';\n if (state === 'copied') return 'Copied to Clipboard';\n return tooltip;\n })();\n\n const tooltipVariant: TooltipProps['variant'] =\n state === 'ready' && !!text ? tooltipVariantProp : 'action';\n\n return (\n <Tooltip.Root open={isTooltipOpen} onOpenChange={handleOnOpenChange}>\n <Tooltip.Trigger\n {...restButtonProps}\n asChild={asChild}\n keepOpenOnClick\n onClick={handleOnClick}\n className={cn('tw-cursor-pointer', className)}\n ref={ref}\n >\n {children ?? text}\n </Tooltip.Trigger>\n\n <Tooltip.Content\n keepOpenOnPointerDownOutside\n placement={tooltipPlacement}\n variant={tooltipVariant}\n >\n {tooltipContent}\n </Tooltip.Content>\n </Tooltip.Root>\n );\n};\n","export { Clipboard } from './Clipboard';\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { Clipboard } from '../../components/Clipboard';\nimport { Copy } from '../../icons';\n\ntype ClipboardProps = Pick<\n ComponentProps<typeof Clipboard>,\n 'text' | 'tooltip' | 'tooltipPlacement' | 'tooltipVariant'\n>;\n\ntype ButtonProps = Omit<ComponentProps<typeof Button>, 'disabled' | 'icon'>;\n\ntype Props = ClipboardProps & ButtonProps & { icon?: ReactNode };\n\nconst DEFAULT_ICON: ReactNode = <Copy />;\n\nexport const ClipboardButton = ({\n // clipboard props\n text,\n tooltip,\n tooltipPlacement,\n tooltipVariant,\n\n // button props\n icon = DEFAULT_ICON,\n variant = 'outline',\n children,\n ...rest\n}: Props) => (\n <Clipboard\n asChild\n tooltip={tooltip}\n tooltipPlacement={tooltipPlacement}\n tooltipVariant={tooltipVariant}\n text={text}\n >\n <Button {...rest} variant={variant} disabled={!text}>\n {icon}\n {children}\n </Button>\n </Clipboard>\n);\n","export { ClipboardButton } from './ClipboardButton';\nexport { ClipboardInline } from './ClipboardInline';\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport DOMPurify from 'dompurify';\n\nimport { ClipboardButton } from '../../blocks/ClipboardButton';\nimport { Maximize2, Minimize2 } from '../../icons';\nimport { cn } from '../../utils';\nimport { Button } from '../Button';\nimport { Tooltip } from '../Tooltip';\n\nconst MIN_SCALE = 0.5;\nconst MAX_SCALE = 3;\nconst ZOOM_STEP = 0.1;\n\ntype Props = {\n /** Raw SVG markup. Sanitized internally with DOMPurify (SVG profile) before rendering, so it is\n * safe even when it originates from user/LLM-controlled content. Non-SVG HTML is stripped. */\n html: string;\n copyText?: string;\n className?: string;\n};\n\nexport const ZoomableSvg = ({ html, copyText, className }: Props) => {\n const safeHtml = useMemo(\n () => DOMPurify.sanitize(html, { USE_PROFILES: { svg: true, svgFilters: true } }),\n [html],\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [scale, setScale] = useState(1);\n const [translate, setTranslate] = useState({ x: 0, y: 0 });\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n useEffect(() => {\n if (!isFullscreen) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n setIsFullscreen(false);\n }\n };\n document.addEventListener('keydown', onKeyDown, { capture: true });\n return () => document.removeEventListener('keydown', onKeyDown, { capture: true });\n }, [isFullscreen]);\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startTx: number;\n startTy: number;\n } | null>(null);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const onWheel = (e: WheelEvent) => {\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n const delta = e.deltaY > 0 ? -ZOOM_STEP : ZOOM_STEP;\n setScale((s) => Math.min(MAX_SCALE, Math.max(MIN_SCALE, s + delta)));\n };\n\n el.addEventListener('wheel', onWheel, { passive: false });\n return () => el.removeEventListener('wheel', onWheel);\n }, []);\n\n const didDragRef = useRef(false);\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n didDragRef.current = false;\n dragRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startTx: translate.x,\n startTy: translate.y,\n };\n },\n [translate],\n );\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (!dragRef.current) return;\n didDragRef.current = true;\n setTranslate({\n x: dragRef.current.startTx + e.clientX - dragRef.current.startX,\n y: dragRef.current.startTy + e.clientY - dragRef.current.startY,\n });\n }, []);\n\n const handleMouseUp = useCallback(() => {\n dragRef.current = null;\n }, []);\n\n const handleReset = useCallback(() => {\n setScale(1);\n setTranslate({ x: 0, y: 0 });\n }, []);\n\n const isZoomed = Math.abs(scale - 1) > 0.001 || translate.x !== 0 || translate.y !== 0;\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (didDragRef.current) {\n e.stopPropagation();\n }\n }, []);\n\n const stopPropagation = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n }, []);\n\n const diagramContent = (\n <div\n role=\"presentation\"\n className={cn('tw-group/zoom tw-relative', isFullscreen && 'tw-h-full')}\n onClick={handleClick}\n >\n <div\n role=\"presentation\"\n ref={containerRef}\n className={cn(\n 'tw-overflow-hidden tw-cursor-grab active:tw-cursor-grabbing tw-p-3',\n isFullscreen && 'tw-h-full',\n )}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n >\n <div\n className={cn(\n 'tw-flex tw-justify-center tw-origin-center',\n isFullscreen && 'tw-h-full [&>svg]:tw-h-full',\n )}\n style={{ transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` }}\n dangerouslySetInnerHTML={{ __html: safeHtml }}\n />\n </div>\n <div\n role=\"presentation\"\n className=\"tw-absolute tw-right-1 tw-top-1 tw-flex tw-gap-1 tw-opacity-0 tw-transition-opacity group-hover/zoom:tw-opacity-100\"\n onClick={stopPropagation}\n >\n {isZoomed && (\n <Tooltip tooltip=\"Reset zoom\" placement=\"top\" triggerAsChild>\n <Button size=\"small\" variant=\"outline\" onClick={handleReset}>\n Reset\n </Button>\n </Tooltip>\n )}\n {copyText && (\n <ClipboardButton text={copyText} tooltip=\"Copy code\" size=\"icon-sm\" variant=\"outline\" />\n )}\n <Tooltip\n tooltip={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n placement=\"top\"\n triggerAsChild\n >\n <Button\n size=\"icon-sm\"\n variant=\"outline\"\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n onClick={() => setIsFullscreen((f) => !f)}\n >\n {isFullscreen ? (\n <Minimize2 className=\"tw-size-4\" />\n ) : (\n <Maximize2 className=\"tw-size-4\" />\n )}\n </Button>\n </Tooltip>\n </div>\n </div>\n );\n\n if (isFullscreen) {\n return (\n <div\n role=\"presentation\"\n className=\"tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4\"\n onClick={stopPropagation}\n >\n {diagramContent}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n 'tw-overflow-hidden tw-rounded-md tw-border tw-border-border tw-bg-muted',\n className,\n )}\n >\n {diagramContent}\n </div>\n );\n};\n","export { ZoomableSvg } from './ZoomableSvg';\n","import { useEffect, useId, useRef, useState } from 'react';\nimport { renderMermaidSVG } from 'beautiful-mermaid';\nimport type mermaid from 'mermaid';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { Skeleton } from '../../components/Skeleton/Skeleton';\nimport { ZoomableSvg } from '../../components/ZoomableSvg';\nimport { cn } from '../../utils';\n\ntype MermaidModule = { default: typeof mermaid };\n\nconst PRIMARY_FALLBACK_CHANNELS = '31 143 255';\n\nconst resolvePrimary = (): string => {\n const channels =\n typeof document === 'undefined'\n ? PRIMARY_FALLBACK_CHANNELS\n : getComputedStyle(document.documentElement).getPropertyValue('--color-primary').trim() ||\n PRIMARY_FALLBACK_CHANNELS;\n return `rgb(${channels})`;\n};\n\nlet mermaidPromise: Promise<MermaidModule> | null = null;\n\nconst getMermaid = (): Promise<MermaidModule> => {\n if (!mermaidPromise) {\n mermaidPromise = import('mermaid')\n .then((m) => {\n m.default.initialize({\n startOnLoad: false,\n securityLevel: 'strict',\n theme: 'base',\n themeVariables: {\n primaryColor: colors.secondary[100],\n primaryTextColor: colors.neutral[800],\n primaryBorderColor: colors.secondary[700],\n secondaryColor: colors.white,\n secondaryTextColor: colors.neutral[800],\n secondaryBorderColor: colors.neutral[150],\n tertiaryColor: colors.warning[100],\n tertiaryTextColor: colors.neutral[800],\n tertiaryBorderColor: colors.warning[500],\n lineColor: colors.neutral[300],\n textColor: colors.neutral[800],\n mainBkg: colors.secondary[100],\n nodeBorder: colors.secondary[700],\n clusterBkg: colors.white,\n clusterBorder: colors.neutral[150],\n titleColor: colors.neutral[800],\n edgeLabelBackground: colors.white,\n nodeTextColor: colors.neutral[800],\n actorBorder: colors.secondary[700],\n actorBkg: colors.secondary[100],\n actorTextColor: colors.neutral[800],\n actorLineColor: colors.neutral[300],\n signalColor: colors.neutral[800],\n signalTextColor: colors.neutral[800],\n labelBoxBkgColor: colors.secondary[100],\n labelBoxBorderColor: colors.secondary[700],\n labelTextColor: colors.neutral[800],\n loopTextColor: colors.neutral[800],\n noteBorderColor: colors.warning[500],\n noteBkgColor: colors.warning[100],\n noteTextColor: colors.neutral[800],\n sectionBkgColor: colors.secondary[100],\n altSectionBkgColor: colors.white,\n sectionBkgColor2: colors.neutral[100],\n taskBorderColor: colors.secondary[700],\n taskBkgColor: colors.secondary[100],\n taskTextColor: colors.neutral[800],\n taskTextDarkColor: colors.neutral[800],\n taskTextLightColor: colors.neutral[800],\n activeTaskBorderColor: resolvePrimary(),\n activeTaskBkgColor: colors.secondary[200],\n doneTaskBorderColor: colors.primary[600],\n doneTaskBkgColor: colors.primary[100],\n critBorderColor: colors.error[500],\n critBkgColor: colors.error[100],\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: '14px',\n },\n });\n return m;\n })\n .catch((err) => {\n mermaidPromise = null;\n throw err;\n });\n }\n return mermaidPromise;\n};\n\nconst stripFontImports = (svg: string): string =>\n svg.replace(/@import\\s+url\\([^)]*fonts\\.googleapis\\.com[^)]*\\);?\\s*/g, '');\n\nconst tryFastRender = (code: string): string | null => {\n try {\n return stripFontImports(\n renderMermaidSVG(code, {\n bg: colors.white,\n fg: colors.neutral[800],\n transparent: true,\n font: 'Inter, system-ui, sans-serif',\n }),\n );\n } catch {\n return null;\n }\n};\n\nconst makeResponsive = (svgString: string): string => {\n const viewBoxMatch = svgString.match(/viewBox=\"[^\"]*\\s([\\d.]+)\\s[\\d.]+\"/);\n const vbWidth = viewBoxMatch ? Math.round(Number(viewBoxMatch[1])) : undefined;\n\n let result = svgString\n .replace(/(<svg[^>]*?)\\s+width=\"[^\"]*\"/i, '$1 width=\"100%\"')\n .replace(/(<svg[^>]*?)\\s+height=\"[^\"]*\"/i, '$1');\n\n if (!vbWidth) return result;\n\n const hasStyle = /(<svg[^>]*?)\\s+style=\"([^\"]*)\"/i.test(result);\n if (hasStyle) {\n result = result.replace(/(<svg[^>]*?)\\s+style=\"([^\"]*)\"/i, (_m, pre, styles) => {\n const cleaned = styles.replace(/max-width:\\s*[^;\"]*;?\\s*/g, '').trim();\n const combined = [cleaned, `max-width: ${vbWidth}px`].filter(Boolean).join('; ');\n return `${pre} style=\"${combined}\"`;\n });\n } else {\n result = result.replace(/<svg/, `<svg style=\"max-width: ${vbWidth}px\"`);\n }\n\n return result;\n};\n\nconst RENDER_DEBOUNCE_MS = 300;\n\n// Module-level SVG cache — persists across component remounts (e.g. tab switches\n// that cause React to remount the tree). Same code always produces the same SVG.\nconst svgCache = new Map<string, string>();\n\n// Resolve an SVG synchronously: cache hit first, otherwise a fast synchronous\n// render. Caches the result and returns it, or null when neither is available\n// (the caller then falls back to the async mermaid render).\nconst resolveSyncSvg = (code: string): string | null => {\n const cached = svgCache.get(code);\n if (cached) return cached;\n const fast = tryFastRender(code);\n if (fast) svgCache.set(code, fast);\n return fast;\n};\n\ntype Props = {\n /** Mermaid diagram source code. Supports flowchart, sequence, class, state, ER,\n * pie, gantt, and mindmap. Gantt `dateFormat HH:mm` (time-only) is not supported\n * by mermaid's dayjs parser — use `dateFormat YYYY-MM-DD HH:mm` with `axisFormat %H:%M` instead. */\n code: string;\n};\n\nexport const MermaidDiagram = ({ code }: Props) => {\n const id = useId();\n const [svg, setSvg] = useState<string | null>(() => resolveSyncSvg(code));\n const [renderFailed, setRenderFailed] = useState(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const renderIdRef = useRef(0);\n\n // Synchronously reset stale state when code changes to avoid one-frame flash\n const [prevCode, setPrevCode] = useState(code);\n if (code !== prevCode) {\n setPrevCode(code);\n setSvg(resolveSyncSvg(code));\n setRenderFailed(false);\n }\n\n useEffect(() => {\n // Synchronous results (cache hit / fast render) are already applied and\n // cached by the useState initializer (mount) and the render-phase reset\n // (code change). Only the async fallback needs an effect.\n if (svgCache.has(code)) return;\n\n const currentRenderId = ++renderIdRef.current;\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n debounceRef.current = setTimeout(() => {\n getMermaid()\n .then(async (mermaidModule) => {\n if (renderIdRef.current !== currentRenderId) return;\n const rendererId = `mermaid-${id.replaceAll(':', '')}`;\n const container = document.createElement('div');\n container.style.visibility = 'hidden';\n container.style.position = 'absolute';\n container.style.top = '-9999px';\n container.style.width = '900px';\n document.body.appendChild(container);\n try {\n const result = await mermaidModule.default.render(rendererId, code, container);\n if (renderIdRef.current === currentRenderId && result) {\n svgCache.set(code, result.svg);\n setSvg(result.svg);\n setRenderFailed(false);\n }\n } finally {\n container.remove();\n }\n })\n .catch((err) => {\n if (renderIdRef.current === currentRenderId) {\n console.error('[MermaidDiagram] fallback failed:', err);\n setSvg(null);\n setRenderFailed(true);\n }\n });\n }, RENDER_DEBOUNCE_MS);\n\n const timer = debounceRef.current;\n const renderId = renderIdRef;\n return () => {\n renderId.current++;\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [code, id]);\n\n const processedSvg = svg ? makeResponsive(svg) : null;\n\n if (renderFailed) {\n return (\n <pre\n className={cn(\n 'tw-my-3 tw-overflow-auto tw-whitespace-pre-wrap tw-break-all',\n 'tw-py-3 tw-px-4',\n 'tw-bg-neutral-50',\n 'tw-rounded-md tw-text-neutral-400',\n 'tw-text-sm tw-font-mono',\n )}\n >\n <code>{code}</code>\n </pre>\n );\n }\n\n if (processedSvg) {\n return (\n <ZoomableSvg\n key={code}\n html={processedSvg}\n copyText={`\\`\\`\\`mermaid\\n${code}\\n\\`\\`\\``}\n className=\"tw-my-3\"\n />\n );\n }\n\n return (\n <div className=\"tw-my-3 tw-overflow-hidden tw-rounded-md tw-border tw-border-neutral-150 tw-bg-neutral-50 tw-p-6\">\n <Skeleton className=\"tw-h-40\" />\n </div>\n );\n};\n","import { useRef, useState } from 'react';\nimport type { FocusEvent, ReactNode } from 'react';\nimport { CodeNode } from '@lexical/code';\nimport { LinkNode } from '@lexical/link';\nimport { ListItemNode, ListNode } from '@lexical/list';\nimport { $convertFromMarkdownString } from '@lexical/markdown';\nimport { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin';\nimport { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin';\nimport { ClickableLinkPlugin } from '@lexical/react/LexicalClickableLinkPlugin';\nimport type { InitialConfigType } from '@lexical/react/LexicalComposer';\nimport { LexicalComposer } from '@lexical/react/LexicalComposer';\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable';\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';\nimport { HorizontalRuleNode } from '@lexical/react/LexicalHorizontalRuleNode';\nimport { HorizontalRulePlugin } from '@lexical/react/LexicalHorizontalRulePlugin';\nimport { LinkPlugin } from '@lexical/react/LexicalLinkPlugin';\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin';\nimport { MarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin';\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';\nimport { TabIndentationPlugin } from '@lexical/react/LexicalTabIndentationPlugin';\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text';\n\nimport { cn } from '../../utils';\n\nimport { ImageNode } from './nodes/ImageNode';\nimport { MermaidNode } from './nodes/MermaidNode';\nimport { ImagePastePlugin } from './plugins/ImagePastePlugin';\nimport { KeyboardPlugin } from './plugins/KeyboardPlugin';\nimport { MarkdownSyncPlugin } from './plugins/MarkdownSyncPlugin';\nimport { ToolbarPlugin } from './plugins/ToolbarPlugin';\nimport { ImageRendererProvider } from './context';\nimport { editorTheme } from './theme';\nimport { CUSTOM_TRANSFORMERS, preprocessMarkdown, SINGLE_LINE_TRANSFORMERS } from './transformers';\n\nexport type MarkdownEditorProps = {\n /** Markdown string (controlled) */\n value: string;\n onChange?: (markdown: string) => void;\n /**\n * Renders content but never accepts input. Use for permanent view-only contexts\n * (e.g. a current user lacks edit permission). Toolbar is hidden.\n */\n readOnly?: boolean;\n /**\n * Temporarily blocks input but signals intent to re-enable\n * (e.g. while a save is in flight). Functionally identical to `readOnly` today.\n */\n disabled?: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n /** Invoked on Cmd/Ctrl+Enter — typically used to commit a form. */\n onSave?: () => void;\n /**\n * Invoked on Escape in inline-edit mode (`singleLine || saveOnBlur`). Per the\n * inline-editable-text pattern spec, Esc reverts the in-progress edit — callers\n * reset `value` to the last-committed state inside this handler.\n */\n onCancel?: () => void;\n /**\n * Async image upload. Resolved URL is embedded as the image src\n * (`![alt](url)` in the underlying markdown).\n */\n onImageUpload?: (file: File) => Promise<{ url: string }>;\n className?: string;\n imageRenderer?: (props: { src: string; alt: string }) => ReactNode;\n showToolbar?: boolean;\n /**\n * Strips the prose typography wrapper, removes the min-height, and tightens padding so\n * the editor visually blends with surrounding text. Use for inline / Linear-style edit\n * affordances inside headings, list rows, or table cells. Pair with `className` to set\n * the caller's typography.\n */\n compact?: boolean;\n /**\n * Calls `onSave` when focus leaves the editor (and is not moved into the toolbar).\n * `onChange` already keeps the caller's value in sync — `onSave` is the \"commit\" signal.\n */\n saveOnBlur?: boolean;\n /**\n * Disables block-level markdown (lists, headings, code blocks, HR) and makes a plain\n * Enter press trigger `onSave` and blur the editor. Shift+Enter still inserts a soft\n * line break. Use for editable titles.\n */\n singleLine?: boolean;\n /**\n * Clamps content to 2 lines (truncating with an ellipsis) in the display (not-focused)\n * state; focus expands the editor to full height (no clamp). `line-clamp` is self-gating,\n * so short/empty content renders fully with no truncation. Per the inline-editable-text\n * pattern spec for description-style slots.\n */\n clampDisplay?: boolean;\n /**\n * Minimum visible height in lines. `1` renders as a single line that grows with\n * content (Linear/Slack/GitHub-PR-comment pattern); `0` removes the floor entirely.\n * Omit to keep the default ~4-line floor. Ignored in `compact` mode (which has no floor).\n */\n minRows?: number;\n};\n\nconst EDITOR_NODES = [\n ImageNode,\n MermaidNode,\n HeadingNode,\n QuoteNode,\n ListNode,\n ListItemNode,\n CodeNode,\n LinkNode,\n HorizontalRuleNode,\n];\n\nexport const MarkdownEditor = ({\n value,\n onChange,\n readOnly = false,\n placeholder,\n autoFocus = false,\n disabled = false,\n onSave,\n onCancel,\n onImageUpload,\n className,\n imageRenderer,\n showToolbar = false,\n compact = false,\n saveOnBlur = false,\n singleLine = false,\n clampDisplay = false,\n minRows,\n}: MarkdownEditorProps) => {\n const editable = !readOnly && !disabled;\n const transformers = singleLine ? SINGLE_LINE_TRANSFORMERS : CUSTOM_TRANSFORMERS;\n const useDefaultMinHeight = !compact && minRows === undefined;\n const customMinHeight =\n !compact && minRows !== undefined ? { minHeight: `${minRows * 1.75}em` } : undefined;\n\n // Lexical reads editorState only on first render; later prop changes are applied by MarkdownSyncPlugin.\n const [initialConfig] = useState<InitialConfigType>(() => ({\n namespace: 'MarkdownEditor',\n theme: editorTheme,\n nodes: EDITOR_NODES,\n onError: (error: Error) => {\n console.error('[MarkdownEditor] uncaught editor error', error);\n },\n editable,\n editorState: () => {\n $convertFromMarkdownString(preprocessMarkdown(value), transformers);\n },\n }));\n\n // Set to `true` by KeyboardPlugin before it programmatically blurs on Escape so the\n // blur handler can skip its `onSave` — otherwise blur-after-cancel would commit the\n // value we just reverted. Reset on read inside handleBlur.\n const skipBlurSaveRef = useRef(false);\n\n const handleBlur =\n saveOnBlur && onSave\n ? (event: FocusEvent<HTMLDivElement>) => {\n if (skipBlurSaveRef.current) {\n skipBlurSaveRef.current = false;\n return;\n }\n // Only fire when focus leaves the editor wrapper entirely (not when moving into the toolbar).\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n onSave();\n }\n }\n : undefined;\n\n return (\n <LexicalComposer initialConfig={initialConfig}>\n <ImageRendererProvider value={imageRenderer ?? null}>\n <div\n className={cn(\n !compact && 'tw-prose',\n // Compact mode drops `tw-prose`, so Lexical's <p> wrappers fall back to the browser\n // default `margin: 1em 0` — visually huge at heading sizes. Zero them, and use the\n // adjacent-sibling selector for paragraph spacing so single-paragraph blocks (titles,\n // short descriptions) stay tight while multi-paragraph blocks still breathe.\n compact && '[&_p]:tw-m-0 [&_p+p]:tw-mt-2',\n // Display-state clamp: 2 lines, dropped in focus-within so editing expands to full\n // height. line-clamp is self-gating (no effect below 3 lines), so short/empty content\n // renders clean; a CSS fade can't gate on overflow without JS, so it's omitted.\n clampDisplay && '[&:not(:focus-within)]:tw-line-clamp-2',\n className,\n )}\n onBlur={handleBlur}\n >\n {showToolbar && editable && <ToolbarPlugin />}\n <div\n className={cn(\n 'tw-relative tw-rounded-md tw-transition-colors',\n // In compact mode the padding lets the hover bg / focus ring extend past the text,\n // but a matching negative margin shifts the wrapper outward so the text itself stays\n // aligned with the parent's content edge (i.e. with where static text would render).\n compact ? 'tw-px-1.5 tw-py-0.5 -tw-mx-1.5 -tw-my-0.5' : 'tw-p-2',\n editable &&\n 'tw-cursor-text hover:tw-bg-muted focus-within:tw-ring-2 focus-within:tw-ring-primary/40',\n )}\n >\n <RichTextPlugin\n contentEditable={\n <ContentEditable\n className={cn('tw-outline-none', useDefaultMinHeight && 'tw-min-h-[100px]')}\n style={customMinHeight}\n aria-placeholder={placeholder ?? ''}\n placeholder={\n placeholder ? (\n <div\n className={cn(\n 'tw-pointer-events-none tw-absolute tw-select-none tw-text-muted-foreground',\n compact\n ? 'tw-left-1.5 tw-top-0.5'\n : 'tw-left-2 tw-top-[calc(0.5rem+0.35em)]',\n )}\n >\n {placeholder}\n </div>\n ) : (\n <div />\n )\n }\n />\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n </div>\n <HistoryPlugin />\n <LinkPlugin />\n <ClickableLinkPlugin newTab />\n {!singleLine && <ListPlugin />}\n {!singleLine && <CheckListPlugin />}\n {!singleLine && <HorizontalRulePlugin />}\n <TabIndentationPlugin />\n <MarkdownShortcutPlugin transformers={transformers} />\n <MarkdownSyncPlugin\n value={value}\n editable={editable}\n onChange={onChange}\n transformers={transformers}\n singleLine={singleLine}\n />\n <ImagePastePlugin onImageUpload={onImageUpload} />\n <KeyboardPlugin\n onSave={onSave}\n onCancel={onCancel}\n singleLine={singleLine}\n blurOnEscape={singleLine || saveOnBlur}\n skipBlurSaveRef={skipBlurSaveRef}\n />\n {autoFocus && <AutoFocusPlugin />}\n </div>\n </ImageRendererProvider>\n </LexicalComposer>\n );\n};\n","import { createContext, use } from 'react';\nimport type { ReactNode } from 'react';\n\ntype ImageRenderer = (props: { src: string; alt: string }) => ReactNode;\n\nconst ImageRendererContext = createContext<ImageRenderer | null>(null);\n\nexport const ImageRendererProvider = ImageRendererContext;\n\nexport const useImageRenderer = (): ImageRenderer | null => use(ImageRendererContext);\n","import { useImageRenderer } from '../context';\n\nconst isPlaceholder = (src: string) => src.startsWith('upload-placeholder-');\n\nexport const ImageNodeComponent = ({ src, alt }: { src: string; alt: string }) => {\n const renderer = useImageRenderer();\n\n if (isPlaceholder(src)) {\n return (\n <span className=\"tw-inline-flex tw-items-center tw-gap-1 tw-rounded tw-bg-neutral-100 tw-px-2 tw-py-1 tw-text-xs tw-text-neutral-400\">\n Uploading image…\n </span>\n );\n }\n\n if (renderer) return <>{renderer({ src, alt })}</>;\n return <img src={src} alt={alt} />;\n};\n","/* eslint-disable react/only-export-components -- Lexical convention: $create/$is helpers co-locate with node */\nimport type { ReactNode } from 'react';\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from 'lexical';\nimport { DecoratorNode } from 'lexical';\n\nimport { ImageNodeComponent } from './ImageNodeComponent';\n\ntype SerializedImageNode = Spread<{ src: string; altText: string }, SerializedLexicalNode>;\n\nexport class ImageNode extends DecoratorNode<ReactNode> {\n __src: string;\n __altText: string;\n\n static override getType(): string {\n return 'image';\n }\n\n static override clone(node: ImageNode): ImageNode {\n return new ImageNode(node.__src, node.__altText, node.__key);\n }\n\n constructor(src: string, altText: string, key?: NodeKey) {\n super(key);\n this.__src = src;\n this.__altText = altText;\n }\n\n getSrc(): string {\n return this.__src;\n }\n\n getAlt(): string {\n return this.__altText;\n }\n\n setSrc(src: string): void {\n const writable = this.getWritable();\n writable.__src = src;\n }\n\n setAlt(altText: string): void {\n const writable = this.getWritable();\n writable.__altText = altText;\n }\n\n override createDOM(config: EditorConfig): HTMLElement {\n const span = document.createElement('span');\n const className = config.theme.image;\n if (typeof className === 'string') {\n span.className = className;\n }\n return span;\n }\n\n override updateDOM(): boolean {\n return false;\n }\n\n override decorate(): ReactNode {\n return <ImageNodeComponent src={this.__src} alt={this.__altText} />;\n }\n\n override isInline(): boolean {\n return true;\n }\n\n static override importJSON(serializedNode: SerializedImageNode): ImageNode {\n return $createImageNode(serializedNode.src, serializedNode.altText);\n }\n\n override exportJSON(): SerializedImageNode {\n return {\n type: 'image',\n version: 1,\n src: this.__src,\n altText: this.__altText,\n };\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('img');\n element.setAttribute('src', this.__src);\n element.setAttribute('alt', this.__altText);\n return { element };\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n img: () => ({\n conversion: (domNode: HTMLElement) => {\n const src = domNode.getAttribute('src') || '';\n const alt = domNode.getAttribute('alt') || '';\n return { node: $createImageNode(src, alt) };\n },\n priority: 0,\n }),\n };\n }\n}\n\nexport const $createImageNode = (src: string, altText: string): ImageNode => {\n return new ImageNode(src, altText);\n};\n\nexport const $isImageNode = (node: LexicalNode | null | undefined): node is ImageNode => {\n return node instanceof ImageNode;\n};\n","import { lazy, Suspense } from 'react';\n\nimport { Skeleton } from '../../../components/Skeleton/Skeleton';\n\nconst MermaidDiagram = lazy(() =>\n import('../../../blocks/MermaidDiagram/MermaidDiagram').then(\n (m) => ({ default: m.MermaidDiagram }),\n (error: unknown) => {\n // Falling back to raw code on chunk-load failure (typically a stale tab after deploy).\n // Logging so we don't silently swap implementations.\n console.error('[MarkdownEditor] failed to load MermaidDiagram chunk', error);\n return {\n default: ({ code }: { code: string }) => (\n <pre>\n <code>{code}</code>\n </pre>\n ),\n };\n },\n ),\n);\n\nexport const MermaidNodeComponent = ({ code }: { code: string }) => {\n return (\n <Suspense\n fallback={\n <div className=\"tw-my-3 tw-overflow-hidden tw-rounded-card tw-border tw-border-neutral-150 tw-bg-neutral-50 tw-p-6\">\n <Skeleton className=\"tw-h-40\" />\n </div>\n }\n >\n <MermaidDiagram code={code} />\n </Suspense>\n );\n};\n","/* eslint-disable react/only-export-components -- Lexical convention: $create/$is helpers co-locate with node */\nimport type { ReactNode } from 'react';\nimport type { LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical';\nimport { DecoratorNode } from 'lexical';\n\nimport { MermaidNodeComponent } from './MermaidNodeComponent';\n\ntype SerializedMermaidNode = Spread<{ code: string }, SerializedLexicalNode>;\n\nexport class MermaidNode extends DecoratorNode<ReactNode> {\n __code: string;\n\n static override getType(): string {\n return 'mermaid';\n }\n\n static override clone(node: MermaidNode): MermaidNode {\n return new MermaidNode(node.__code, node.__key);\n }\n\n constructor(code: string, key?: NodeKey) {\n super(key);\n this.__code = code;\n }\n\n getCode(): string {\n return this.__code;\n }\n\n setCode(code: string): void {\n const writable = this.getWritable();\n writable.__code = code;\n }\n\n override createDOM(): HTMLElement {\n const div = document.createElement('div');\n div.setAttribute('data-lexical-mermaid', 'true');\n return div;\n }\n\n override updateDOM(): boolean {\n return false;\n }\n\n override decorate(): ReactNode {\n return <MermaidNodeComponent code={this.__code} />;\n }\n\n override isInline(): boolean {\n return false;\n }\n\n static override importJSON(serializedNode: SerializedMermaidNode): MermaidNode {\n return $createMermaidNode(serializedNode.code);\n }\n\n override exportJSON(): SerializedMermaidNode {\n return {\n type: 'mermaid',\n version: 1,\n code: this.__code,\n };\n }\n}\n\nexport const $createMermaidNode = (code: string): MermaidNode => {\n return new MermaidNode(code);\n};\n\nexport const $isMermaidNode = (node: LexicalNode | null | undefined): node is MermaidNode => {\n return node instanceof MermaidNode;\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport { type ExternalToast, toast as sonnerToast } from 'sonner';\n\nimport { cn } from '../../utils';\n\nimport { ToastRoot } from './ToastRoot';\n\ntype ToastProps = ComponentProps<typeof ToastRoot>;\ntype Title = ToastProps['title'] | ((opts: { dismiss: () => void }) => ReactNode);\n\nexport type ToastOptions = { id?: string | number; title: Title } & Omit<\n ToastProps,\n 'id' | 'title'\n> &\n Pick<\n ExternalToast,\n 'onAutoClose' | 'onDismiss' | 'testId' | 'toasterId' | 'dismissible' | 'position'\n >;\ntype DerivedToastOptions = Omit<ToastOptions, 'title' | 'variant'>;\n\nexport const toast = ({\n onAutoClose,\n onDismiss,\n testId,\n toasterId,\n dismissible = true,\n position,\n title: titleProp,\n ...toast\n}: ToastOptions) => {\n const duration = (() => {\n if (typeof toast.duration === 'number') return toast.duration;\n if (toast.variant === 'error' || toast.variant === 'warning') return Infinity;\n return toast.duration ?? 5000;\n })();\n\n const renderCustomToast: Parameters<typeof sonnerToast.custom>[0] = (id) => {\n const title =\n typeof titleProp === 'function'\n ? titleProp({ dismiss: () => sonnerToast.dismiss(id) })\n : titleProp;\n\n return <ToastRoot {...toast} id={id} title={title} duration={duration} />;\n };\n\n return sonnerToast.custom(renderCustomToast, {\n // toast generated by sonner will always have an id, but we want to allow users to specify their own id if they want to\n // can not pass undefined, as it will break dismiss\n ...(toast.id != null ? { id: toast.id } : {}),\n unstyled: true,\n position,\n onAutoClose,\n onDismiss,\n testId,\n toasterId,\n dismissible,\n duration,\n // override defult focus-visible styles to match our design\n className: cn('tw-rounded-lg', 'focus-visible:!tw-ring-4', 'focus-visible:!tw-ring-primary/50'),\n });\n};\n\ntoast.success = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'success',\n });\n\ntoast.error = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'error',\n duration: options?.duration ?? Infinity,\n });\n\ntoast.warning = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'warning',\n duration: options?.duration ?? Infinity,\n });\n\ntoast.info = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'info',\n });\n\ntoast.dismiss = (toastId?: ToastOptions['id']) => sonnerToast.dismiss(toastId);\ntoast.dismissAll = () => sonnerToast.dismiss();\n","import type { MouseEventHandler, ReactNode } from 'react';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\nimport { type Action, toast as sonnerToast } from 'sonner';\n\nimport { AlertCircle, AlertTriangle, CircleCheck, Info, Loader2 } from '../../icons';\nimport { cn } from '../../utils';\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { ToastAction } from './ToastAction';\nimport { ToastDescription } from './ToastDescription';\nimport { ToastDismiss } from './ToastDismiss';\nimport { ToastDuration } from './ToastDuration';\nimport { ToastTitle } from './ToastTitle';\n\nconst variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-group/toast',\n 'tw-relative',\n\n // layout\n 'tw-grid',\n 'tw-grid-cols-[0_1fr_auto_auto]',\n 'tw-items-start',\n 'has-[[data-slot=toast-description]]:tw-grid-rows-[auto_auto]',\n 'has-[[data-slot=toast-icon]]:tw-grid-cols-[auto_1fr_auto_auto]',\n '[&_[data-slot=toast-icon]]:tw-mr-2',\n '[&_[data-slot=toast-title]]:tw-mr-2.5',\n '[&_[data-slot=toast-description]]:tw-mr-2.5',\n '[&_[data-slot=toast-action]]:tw-mr-2',\n '[&_[data-slot=toast-description]]:tw-col-end-3',\n 'tw-gap-y-0',\n\n // styles\n 'tw-p-4',\n 'tw-rounded-lg',\n 'tw-shadow-md',\n ],\n {\n defaultVariants: {\n variant: 'info',\n },\n variants: {\n variant: {\n default: 'tw-border tw-border-border tw-bg-popover',\n error: 'tw-bg-error-550',\n info: 'tw-bg-secondary-600',\n success: 'tw-bg-primary-700',\n warning: 'tw-bg-warning-550',\n },\n },\n },\n);\n\ntype Variants = VariantProps<typeof variants>;\ntype Variant = NonNullable<Variants['variant']>;\ntype VariantIcon = Exclude<Variant, 'default'>;\n\ntype Props = {\n id: string | number;\n title: ReactNode;\n icon?: ReactNode;\n description?: ReactNode;\n action?: Action;\n loading?: boolean;\n duration?: number;\n // offset?: number;\n} & Variants;\n\nconst DEFAULT_VARIANT_ICON: Record<VariantIcon, ReactNode> = {\n error: <AlertTriangle />,\n info: <Info />,\n success: <CircleCheck />,\n warning: <AlertCircle />,\n};\n\nexport const ToastRoot = ({\n id,\n title,\n description,\n action,\n duration = Infinity,\n variant = 'info',\n loading = false,\n icon: iconProp,\n}: Props) => {\n const isLegacy = useIsLegacyBrand();\n const renderArgo = !isLegacy;\n\n const icon: ReactNode = (() => {\n if (loading) return <Loader2 className=\"tw-animate-spin\" />;\n if (iconProp) return iconProp;\n if (variant === 'default' || variant === null) return null;\n return DEFAULT_VARIANT_ICON[variant];\n })();\n\n const handleActionClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n sonnerToast.dismiss(id);\n action?.onClick(event);\n };\n\n return (\n <div\n data-variant={variant}\n data-argo={renderArgo}\n className={cn(\n variants({ variant }),\n 'data-[variant=default]:data-[argo=true]:tw-bg-background',\n )}\n >\n {icon && (\n <span\n data-slot=\"toast-icon\"\n className={cn(\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-self-center',\n 'tw-aspect-square',\n 'tw-size-5',\n 'tw-shrink-0',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-5',\n 'tw-text-white',\n 'group-data-[variant=default]/toast:tw-text-popover-foreground',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground',\n )}\n >\n {icon}\n </span>\n )}\n\n <ToastTitle>{title}</ToastTitle>\n {description && <ToastDescription>{description}</ToastDescription>}\n {action && (\n <ToastAction style={action?.actionButtonStyle} onClick={handleActionClick}>\n {action.label}\n </ToastAction>\n )}\n <ToastDismiss onClick={() => sonnerToast.dismiss(id)} />\n {duration !== Infinity && <ToastDuration duration={duration} />}\n </div>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'button'>;\n\nexport const ToastAction = ({\n ref,\n className,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <button\n {...rest}\n ref={ref}\n data-slot=\"toast-action\"\n type=\"button\"\n className={cn(\n // layout\n 'tw-col-start-3',\n 'tw-row-start-1',\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n\n // font\n 'tw-text-xs',\n 'tw-font-medium',\n 'tw-text-primary',\n\n // sizing\n 'tw-px-2',\n 'tw-h-6',\n\n // styles\n 'tw-bg-primary-foreground',\n 'tw-rounded',\n className,\n )}\n />\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const ToastDescription = ({\n ref,\n className,\n children,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => (\n <div\n ref={ref}\n data-slot=\"toast-description\"\n className={cn(\n 'tw-col-start-2',\n 'tw-font-normal',\n 'tw-break-words',\n 'tw-text-white',\n 'group-data-[variant=default]/toast:tw-text-muted-foreground',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { X } from '../../icons';\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'button'>;\n\nexport const ToastDismiss = ({\n ref,\n className,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <button\n ref={ref}\n data-slot=\"toast-dismiss\"\n className={cn(\n 'tw-flex',\n 'tw-justify-center',\n 'tw-col-start-4',\n 'tw-row-start-1',\n 'tailwindcss-preflight',\n '[&_svg]:tw-aspect-square',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n '[&_svg]:tw-m-1',\n\n 'tw-text-white',\n 'group-data-[variant=default]/toast:[&_svg]:tw-text-popover-foreground',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:[&_svg]:tw-text-foreground',\n className,\n )}\n type=\"button\"\n {...rest}\n >\n <X />\n <span className=\"tw-sr-only\">Dismiss</span>\n </button>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype ToastDurationProps = ComponentProps<'span'> & {\n duration: number;\n};\n\nexport const ToastDuration = ({\n ref,\n duration,\n className,\n style,\n ...rest\n}: ToastDurationProps & { ref?: Ref<ElementRef<'span'>> }) => (\n <span\n {...rest}\n ref={ref}\n className={cn(\n 'tw-bg-white/30',\n 'group-data-[variant=default]/toast:tw-bg-popover-foreground/20',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-bg-foreground/20',\n 'tw-rounded-bl-lg',\n 'tw-mx-px',\n\n // positioning\n 'tw-absolute',\n 'tw-bottom-0',\n 'tw-left-0',\n\n // sizing\n 'tw-h-1',\n\n // animation\n 'tw-animate-toast-progress',\n 'group-hover/toast:[animation-play-state:paused]',\n className,\n )}\n style={{\n animationDuration: `${duration}ms`,\n ...style,\n }}\n />\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const ToastTitle = ({\n ref,\n className,\n children,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => (\n <div\n ref={ref}\n data-slot=\"toast-title\"\n className={cn(\n 'tw-col-start-2',\n 'tw-text-sm',\n 'tw-leading-6',\n 'tw-min-h-6',\n 'tw-self-center',\n 'tw-text-white',\n 'group-data-[variant=default]/toast:tw-text-popover-foreground',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground',\n\n 'tw-break-words',\n 'tw-font-medium',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n","import { useEffect, useRef } from 'react';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport type { NodeKey } from 'lexical';\nimport {\n $getNodeByKey,\n $insertNodes,\n COMMAND_PRIORITY_CRITICAL,\n DROP_COMMAND,\n PASTE_COMMAND,\n} from 'lexical';\n\nimport { toast } from '../../Toast/toast';\nimport { $createImageNode, $isImageNode } from '../nodes/ImageNode';\n\nconst ACCEPTED_IMAGE_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n];\n\nconst MAX_IMAGE_SIZE = 10 * 1024 * 1024; // 10 MB\n\nconst PLACEHOLDER_PREFIX = 'upload-placeholder-';\n\nconst generatePlaceholderId = (): string => {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n};\n\nconst isAcceptedImageType = (type: string) => ACCEPTED_IMAGE_TYPES.includes(type);\n\nconst getImageFilesFromDataTransfer = (dataTransfer: DataTransfer | null): File[] => {\n if (!dataTransfer) return [];\n\n if (dataTransfer.items.length > 0) {\n const files: File[] = [];\n for (const item of dataTransfer.items) {\n if (item.kind === 'file' && isAcceptedImageType(item.type)) {\n const file = item.getAsFile();\n if (file) files.push(file);\n }\n }\n if (files.length > 0) return files;\n }\n\n return Array.from(dataTransfer.files).filter((file) => isAcceptedImageType(file.type));\n};\n\nconst escapeMarkdownAlt = (text: string) => text.replace(/[[\\]()]/g, '');\n\ntype ImagePastePluginProps = {\n onImageUpload?: (file: File) => Promise<{ url: string }>;\n};\n\nexport const ImagePastePlugin = ({ onImageUpload }: ImagePastePluginProps) => {\n const [editor] = useLexicalComposerContext();\n const onImageUploadRef = useRef(onImageUpload);\n onImageUploadRef.current = onImageUpload;\n\n useEffect(() => {\n const uploadFile = (file: File) => {\n const upload = onImageUploadRef.current;\n if (!upload) return;\n\n if (file.size > MAX_IMAGE_SIZE) {\n toast.error(`Image \"${file.name}\" is too large. Maximum size is 10 MB.`);\n return;\n }\n\n // Insert placeholder and start upload outside the command handler\n // to avoid nested editor.update() batching issues\n let nodeKey: NodeKey | null = null;\n\n editor.update(() => {\n const placeholderNode = $createImageNode(\n `${PLACEHOLDER_PREFIX}${generatePlaceholderId()}`,\n 'Uploading image\\u2026',\n );\n $insertNodes([placeholderNode]);\n nodeKey = placeholderNode.getKey();\n });\n\n if (!nodeKey) return;\n const capturedKey: NodeKey = nodeKey;\n\n upload(file)\n .then(({ url }) => {\n editor.update(() => {\n const node = $getNodeByKey(capturedKey);\n if ($isImageNode(node)) {\n const altText = escapeMarkdownAlt(file.name.replace(/\\.[^.]+$/, '') || 'image');\n node.setSrc(url);\n node.setAlt(altText);\n }\n });\n })\n .catch((error: unknown) => {\n console.error('[MarkdownEditor] image upload failed', error);\n toast.error(`Failed to upload \"${file.name}\". Please try again.`);\n editor.update(() => {\n const node = $getNodeByKey(capturedKey);\n if (node) node.remove();\n });\n });\n };\n\n const removePaste = editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n if (!onImageUploadRef.current) return false;\n if (!(event instanceof ClipboardEvent)) return false;\n const files = getImageFilesFromDataTransfer(event.clipboardData);\n if (files.length === 0) return false;\n\n event.preventDefault();\n // Defer upload to next microtask to escape the command handler's update context\n Promise.resolve().then(() => files.forEach(uploadFile));\n return true;\n },\n COMMAND_PRIORITY_CRITICAL,\n );\n\n const removeDrop = editor.registerCommand(\n DROP_COMMAND,\n (event: DragEvent) => {\n if (!onImageUploadRef.current) return false;\n const files = getImageFilesFromDataTransfer(event.dataTransfer);\n if (files.length === 0) return false;\n\n event.preventDefault();\n // Defer upload to next microtask to escape the command handler's update context\n Promise.resolve().then(() => files.forEach(uploadFile));\n return true;\n },\n COMMAND_PRIORITY_CRITICAL,\n );\n\n return () => {\n removePaste();\n removeDrop();\n };\n }, [editor]);\n\n return null;\n};\n","import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { COMMAND_PRIORITY_HIGH, KEY_DOWN_COMMAND } from 'lexical';\n\ntype KeyboardPluginProps = {\n /** Invoked directly on Cmd/Ctrl+Enter (explicit commit shortcut, no blur). */\n onSave?: () => void;\n /**\n * Invoked on Escape in inline-edit mode. Per the inline-editable-text pattern spec\n * (evviku/design-system-docs), Escape reverts the in-progress edit — callers reset\n * `value` to the last-committed state inside this handler.\n */\n onCancel?: () => void;\n /**\n * When true, plain Enter blurs the editor instead of inserting a paragraph break.\n * For `saveOnBlur` callers this commits via blur; for non-saveOnBlur callers Enter\n * just exits edit mode. Shift+Enter still inserts a soft line break.\n */\n singleLine?: boolean;\n /**\n * When true, Escape blurs the editor (exits edit mode). Enable only for inline-edit\n * patterns (`singleLine` or `saveOnBlur`); in full-toolbar mode Esc stays a no-op so\n * existing call sites don't lose focus on a stray keypress.\n */\n blurOnEscape?: boolean;\n /**\n * Set to `true` before the plugin programmatically blurs on Escape so the wrapper's\n * blur handler can skip its `onSave` — otherwise blur-after-cancel would commit the\n * value we just reverted. Reset by the consumer on read.\n */\n skipBlurSaveRef?: RefObject<boolean>;\n};\n\nexport const KeyboardPlugin = ({\n onSave,\n onCancel,\n singleLine,\n blurOnEscape,\n skipBlurSaveRef,\n}: KeyboardPluginProps) => {\n const [editor] = useLexicalComposerContext();\n const onSaveRef = useRef(onSave);\n onSaveRef.current = onSave;\n const onCancelRef = useRef(onCancel);\n onCancelRef.current = onCancel;\n const singleLineRef = useRef(singleLine);\n singleLineRef.current = singleLine;\n const blurOnEscapeRef = useRef(blurOnEscape);\n blurOnEscapeRef.current = blurOnEscape;\n const skipBlurSaveExternalRef = skipBlurSaveRef;\n\n useEffect(() => {\n return editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n onSaveRef.current?.();\n return true;\n }\n if (event.key === 'Enter' && !event.shiftKey && !event.altKey && singleLineRef.current) {\n event.preventDefault();\n editor.getRootElement()?.blur();\n return true;\n }\n if (event.key === 'Escape' && blurOnEscapeRef.current) {\n // Suppress blur-driven onSave so the post-blur save doesn't commit the value we just reverted.\n if (skipBlurSaveExternalRef) skipBlurSaveExternalRef.current = true;\n onCancelRef.current?.();\n editor.getRootElement()?.blur();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n );\n }, [editor, skipBlurSaveExternalRef]);\n\n return null;\n};\n","import type {\n ElementTransformer,\n MultilineElementTransformer,\n TextMatchTransformer,\n Transformer,\n} from '@lexical/markdown';\nimport { CHECK_LIST, TRANSFORMERS } from '@lexical/markdown';\nimport {\n $createHorizontalRuleNode,\n $isHorizontalRuleNode,\n HorizontalRuleNode,\n} from '@lexical/react/LexicalHorizontalRuleNode';\n\nimport { $createImageNode, $isImageNode, ImageNode } from './nodes/ImageNode';\nimport { $createMermaidNode, $isMermaidNode, MermaidNode } from './nodes/MermaidNode';\n\n/** Markdown image: `![alt](src)` */\nconst IMAGE: TextMatchTransformer = {\n dependencies: [ImageNode],\n export: (node) => {\n if (!$isImageNode(node)) return null;\n return `![${node.getAlt()}](${node.getSrc()})`;\n },\n importRegExp: /!\\[([^\\]]*)\\]\\(([^)]+)\\)/,\n regExp: /!\\[([^\\]]*)\\]\\(([^)]+)\\)$/,\n replace: (textNode, match) => {\n const [, alt = '', src = ''] = match;\n const imageNode = $createImageNode(src, alt);\n textNode.replace(imageNode);\n },\n trigger: ')',\n type: 'text-match',\n};\n\n/** Horizontal rule: `---`, `***`, or `___` */\nconst HORIZONTAL_RULE: ElementTransformer = {\n dependencies: [HorizontalRuleNode],\n export: (node) => {\n return $isHorizontalRuleNode(node) ? '---' : null;\n },\n regExp: /^(---|\\*\\*\\*|___)$/,\n replace: (parentNode) => {\n const node = $createHorizontalRuleNode();\n parentNode.replace(node);\n },\n type: 'element',\n};\n\n/** Fenced mermaid block: ` ```mermaid ... ``` ` → MermaidNode (rendered as diagram) */\nconst MERMAID: MultilineElementTransformer = {\n dependencies: [MermaidNode],\n export: (node) => {\n if (!$isMermaidNode(node)) return null;\n return '```mermaid\\n' + node.getCode() + '\\n```';\n },\n regExpStart: /^[ \\t]*(`{3,})mermaid(?:\\s.*)?$/,\n regExpEnd: {\n optional: true,\n regExp: /^[ \\t]*`{3,}$/,\n },\n replace: (rootNode, _children, _startMatch, _endMatch, linesInBetween) => {\n if (!linesInBetween) return;\n const code = linesInBetween.join('\\n').trim();\n if (code) {\n rootNode.append($createMermaidNode(code));\n }\n },\n handleImportAfterStartMatch: ({\n lines,\n rootNode,\n startLineIndex,\n startMatch,\n }): [boolean, number] => {\n const fence = startMatch[1];\n if (!fence) return [false, startLineIndex];\n const fenceLength = fence.trim().length;\n const endRegex = new RegExp(`^[ \\\\t]*\\`{${fenceLength},}$`);\n\n for (let i = startLineIndex + 1; i < lines.length; i++) {\n if (endRegex.test(lines[i] ?? '')) {\n const code = lines\n .slice(startLineIndex + 1, i)\n .join('\\n')\n .trim();\n if (code) {\n rootNode.append($createMermaidNode(code));\n }\n return [true, i];\n }\n }\n\n // No closing fence — consume remaining lines\n const code = lines\n .slice(startLineIndex + 1)\n .join('\\n')\n .trim();\n if (code) {\n rootNode.append($createMermaidNode(code));\n }\n return [true, lines.length - 1];\n },\n type: 'multiline-element',\n};\n\n/**\n * Custom transformers = our additions + built-in Lexical transformers.\n * MERMAID is placed before TRANSFORMERS so it intercepts ` ```mermaid ``` ` before the generic CODE transformer.\n * IMAGE is placed before built-in LINK to prevent `![alt](url)` from being parsed as `!` + link.\n */\nexport const CUSTOM_TRANSFORMERS: Transformer[] = [\n IMAGE,\n HORIZONTAL_RULE,\n CHECK_LIST,\n MERMAID,\n ...TRANSFORMERS,\n];\n\n/**\n * No transformers = plain text. `singleLine` mode edits entity names / titles, which are\n * plain text, not markdown. Parsing inline formatting here corrupts ordinary names: e.g.\n * `staging_chargebee_invoices` would render the `_chargebee_` span as italics, and Lexical\n * escapes the underscores on export (`\\_`) to prevent exactly that — but those backslashes\n * then leak into the persisted name. Dropping every transformer keeps `_`, `*`, `` ` ``, `~`\n * literal on both import and export; pair the empty set with `unescapeMarkdownText` on export\n * to strip Lexical's escaping (see MarkdownSyncPlugin).\n */\nexport const SINGLE_LINE_TRANSFORMERS: Transformer[] = [];\n\n// --- Table pre/post-processing ---\n// GFM tables can't round-trip through Lexical's markdown (no built-in table transformer).\n// We wrap them in fenced code blocks on import and unwrap on export to preserve them exactly.\n\nconst TABLE_FENCE_LANG = '__kbc_table__';\n\nconst isTableLine = (line: string): boolean => {\n const trimmed = line.trim();\n return trimmed.startsWith('|') && trimmed.endsWith('|');\n};\n\nconst CODE_FENCE_REGEX = /^[ \\t]*`{3,}/;\n\n/** Wrap GFM tables in code fences so they survive Lexical's markdown round-trip. */\nexport const preprocessMarkdown = (markdown: string): string => {\n const lines = markdown.split('\\n');\n const result: string[] = [];\n let tableLines: string[] = [];\n let insideCodeFence = false;\n\n const flushTable = () => {\n if (tableLines.length >= 2) {\n result.push(`\\`\\`\\`${TABLE_FENCE_LANG}`);\n result.push(...tableLines);\n result.push('```');\n } else {\n // Single pipe line isn't a table — keep as-is\n result.push(...tableLines);\n }\n tableLines = [];\n };\n\n for (const line of lines) {\n if (CODE_FENCE_REGEX.test(line)) {\n if (tableLines.length > 0) flushTable();\n insideCodeFence = !insideCodeFence;\n result.push(line);\n continue;\n }\n\n if (insideCodeFence) {\n result.push(line);\n continue;\n }\n\n if (isTableLine(line)) {\n tableLines.push(line);\n } else {\n if (tableLines.length > 0) flushTable();\n result.push(line);\n }\n }\n if (tableLines.length > 0) flushTable();\n\n return result.join('\\n');\n};\n\n/** Unwrap code-fenced tables back to raw GFM table markdown. */\nexport const postprocessMarkdown = (markdown: string): string => {\n const regex = new RegExp(`\\`\\`\\`${TABLE_FENCE_LANG}\\\\n([\\\\s\\\\S]*?)\\\\n\\`\\`\\``, 'g');\n return markdown.replace(regex, '$1');\n};\n\n/**\n * Reverses the backslash-escaping Lexical applies to markdown punctuation (`* _ ` ~ \\`) when\n * exporting text nodes. Used for `singleLine` (plain-text) mode, where the export value is a\n * bare entity name — the escaping would otherwise persist as literal backslashes in the name.\n */\nexport const unescapeMarkdownText = (markdown: string): string =>\n markdown.replace(/\\\\([*_`~\\\\])/g, '$1');\n","import { useEffect, useRef } from 'react';\nimport type { Transformer } from '@lexical/markdown';\nimport { $convertFromMarkdownString, $convertToMarkdownString } from '@lexical/markdown';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\n\nimport {\n CUSTOM_TRANSFORMERS,\n postprocessMarkdown,\n preprocessMarkdown,\n unescapeMarkdownText,\n} from '../transformers';\n\nconst IMPORT_TAG = 'markdown-import';\n\ntype MarkdownSyncPluginProps = {\n value: string;\n editable: boolean;\n onChange?: (markdown: string) => void;\n transformers?: Transformer[];\n /**\n * Plain-text mode: export a bare entity name instead of markdown. Unescapes the punctuation\n * Lexical escapes on export (`\\_` → `_`), so names with underscores don't persist backslashes.\n */\n singleLine?: boolean;\n};\n\nexport const MarkdownSyncPlugin = ({\n value,\n editable,\n onChange,\n transformers = CUSTOM_TRANSFORMERS,\n singleLine = false,\n}: MarkdownSyncPluginProps) => {\n const [editor] = useLexicalComposerContext();\n const lastExportedRef = useRef(value);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const transformersRef = useRef(transformers);\n transformersRef.current = transformers;\n const singleLineRef = useRef(singleLine);\n singleLineRef.current = singleLine;\n\n // Sync editable state — only when it actually changes\n useEffect(() => {\n editor.setEditable(editable);\n }, [editor, editable]);\n\n // Import: external value -> editor state\n useEffect(() => {\n if (value === lastExportedRef.current) return;\n lastExportedRef.current = value;\n\n editor.update(\n () => {\n $convertFromMarkdownString(preprocessMarkdown(value), transformersRef.current);\n },\n { tag: IMPORT_TAG },\n );\n }, [editor, value]);\n\n // Export: editor state -> onChange (subscription)\n useEffect(() => {\n return editor.registerUpdateListener(({ tags }) => {\n if (tags.has(IMPORT_TAG)) return;\n\n editor.getEditorState().read(() => {\n const raw = $convertToMarkdownString(transformersRef.current);\n const markdown = singleLineRef.current\n ? unescapeMarkdownText(raw)\n : postprocessMarkdown(raw);\n if (markdown !== lastExportedRef.current) {\n lastExportedRef.current = markdown;\n onChangeRef.current?.(markdown);\n }\n });\n });\n }, [editor]);\n\n return null;\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { $createCodeNode, $isCodeNode } from '@lexical/code';\nimport { $isLinkNode } from '@lexical/link';\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 { $createQuoteNode, $isHeadingNode, $isQuoteNode } from '@lexical/rich-text';\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n type ElementFormatType,\n FORMAT_TEXT_COMMAND,\n} from 'lexical';\n\nimport {\n Bold,\n Code,\n Italic,\n List as ListIcon,\n ListOrdered,\n Quote,\n SquareCode,\n Strikethrough,\n Underline,\n} from '../../../icons';\n\nimport { AlignmentDropdown } from './toolbar/AlignmentDropdown';\nimport { BlockTypeDropdown } from './toolbar/BlockTypeDropdown';\nimport { LinkPanel } from './toolbar/LinkPanel';\nimport { ToolbarButton } from './toolbar/ToolbarButton';\nimport { ToolbarDivider } from './toolbar/ToolbarDivider';\n\nconst ELEMENT_FORMAT_TYPES = ['left', 'center', 'right', 'justify', 'start', 'end', ''] as const;\n\nconst isElementFormatType = (value: string): value is ElementFormatType =>\n (ELEMENT_FORMAT_TYPES as readonly string[]).includes(value);\n\nconst toElementFormatType = (value: string): ElementFormatType =>\n isElementFormatType(value) ? value : 'left';\n\nexport const ToolbarPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isStrikethrough, setIsStrikethrough] = useState(false);\n const [isCode, setIsCode] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const [blockType, setBlockType] = useState<string>('paragraph');\n const [alignment, setAlignment] = useState<ElementFormatType>('left');\n const [isVisible, setIsVisible] = useState(false);\n const [position, setPosition] = useState<{ top: number; left: number } | null>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const isMouseDownRef = useRef(false);\n const hasSelectionRef = useRef(false);\n\n const updatePosition = useCallback(() => {\n const nativeSelection = window.getSelection();\n if (!nativeSelection || nativeSelection.rangeCount === 0) return;\n const range = nativeSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (rect.width > 0) {\n const toolbarWidth = toolbarRef.current?.offsetWidth ?? 300;\n setPosition({\n top: rect.top + window.scrollY - 8,\n left: Math.max(8, rect.left + window.scrollX + rect.width / 2 - toolbarWidth / 2),\n });\n }\n }, []);\n\n useEffect(() => {\n const handleMouseDown = () => {\n isMouseDownRef.current = true;\n };\n const handleMouseUp = () => {\n isMouseDownRef.current = false;\n if (hasSelectionRef.current) {\n setIsVisible(true);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, []);\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n hasSelectionRef.current = false;\n setIsVisible(false);\n return;\n }\n\n const hasSelection = !selection.isCollapsed() && selection.getTextContent().length > 0;\n hasSelectionRef.current = hasSelection;\n\n if (!hasSelection) {\n setIsVisible(false);\n } else if (!isMouseDownRef.current) {\n setIsVisible(true);\n }\n\n if (hasSelection) {\n updatePosition();\n }\n\n setIsBold(selection.hasFormat('bold'));\n setIsItalic(selection.hasFormat('italic'));\n setIsUnderline(selection.hasFormat('underline'));\n setIsStrikethrough(selection.hasFormat('strikethrough'));\n setIsCode(selection.hasFormat('code'));\n\n const node = selection.anchor.getNode();\n const parent = node.getParent();\n setIsLink($isLinkNode(parent) || $isLinkNode(node));\n\n const blockElement = $getNearestBlockElementAncestorOrThrow(node);\n\n if ($isListNode(blockElement)) {\n const listType = blockElement.getListType();\n setBlockType(listType === 'number' ? 'number' : 'bullet');\n } else if ($isHeadingNode(blockElement)) {\n setBlockType(blockElement.getTag());\n } else if ($isCodeNode(blockElement)) {\n setBlockType('code');\n } else if ($isQuoteNode(blockElement)) {\n setBlockType('quote');\n } else {\n setBlockType('paragraph');\n }\n\n setAlignment(toElementFormatType(blockElement.getFormatType()));\n }, [updatePosition]);\n\n useEffect(() => {\n const unregisterUpdate = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n });\n\n return () => {\n unregisterUpdate();\n };\n }, [editor, updateToolbar]);\n\n if (!isVisible || !position) return null;\n\n return createPortal(\n <div\n ref={toolbarRef}\n role=\"toolbar\"\n aria-label=\"Formatting options\"\n onMouseDown={(e) => e.preventDefault()}\n style={{ top: position.top, left: position.left }}\n className=\"tw-absolute tw-z-[1060] tw-flex tw--translate-y-full tw-items-center tw-gap-0.5 tw-rounded-lg tw-border tw-border-neutral-200 tw-bg-white tw-px-1.5 tw-py-1 tw-shadow-lg\"\n >\n <BlockTypeDropdown editor={editor} blockType={blockType} />\n\n <ToolbarDivider />\n\n <ToolbarButton\n active={isBold}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')}\n tooltip=\"Bold (Ctrl+B)\"\n >\n <Bold className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isItalic}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')}\n tooltip=\"Italic (Ctrl+I)\"\n >\n <Italic className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isUnderline}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')}\n tooltip=\"Underline (Ctrl+U)\"\n >\n <Underline className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isStrikethrough}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')}\n tooltip=\"Strikethrough\"\n >\n <Strikethrough className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isCode}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code')}\n tooltip=\"Inline Code\"\n >\n <Code className=\"tw-size-4\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n <LinkPanel editor={editor} isLink={isLink} />\n\n <ToolbarDivider />\n\n <ToolbarButton\n active={blockType === 'bullet'}\n onClick={() => {\n if (blockType === 'bullet') {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }\n }}\n tooltip=\"Bullet List\"\n >\n <ListIcon className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={blockType === 'number'}\n onClick={() => {\n if (blockType === 'number') {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n }}\n tooltip=\"Numbered List\"\n >\n <ListOrdered className=\"tw-size-4\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n <AlignmentDropdown editor={editor} alignment={alignment} />\n\n <ToolbarDivider />\n\n <ToolbarButton\n active={blockType === 'quote'}\n onClick={() => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n const anchorNode = selection.anchor.getNode();\n const element = $getNearestBlockElementAncestorOrThrow(anchorNode);\n const newNode = blockType === 'quote' ? $createParagraphNode() : $createQuoteNode();\n element.getChildren().forEach((child) => newNode.append(child));\n element.replace(newNode);\n });\n }}\n tooltip=\"Quote\"\n >\n <Quote className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={blockType === 'code'}\n onClick={() => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n const anchorNode = selection.anchor.getNode();\n const element = $getNearestBlockElementAncestorOrThrow(anchorNode);\n const newNode = blockType === 'code' ? $createParagraphNode() : $createCodeNode();\n element.getChildren().forEach((child) => newNode.append(child));\n element.replace(newNode);\n });\n }}\n tooltip=\"Code Block\"\n >\n <SquareCode className=\"tw-size-4\" />\n </ToolbarButton>\n </div>,\n document.body,\n );\n};\n","import { useRef } from 'react';\nimport {\n $getSelection,\n $setSelection,\n type BaseSelection,\n type ElementFormatType,\n FORMAT_ELEMENT_COMMAND,\n type LexicalEditor,\n} from 'lexical';\n\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n ChevronDown,\n type LucideIcon,\n} from '../../../../icons';\nimport { cn } from '../../../../utils';\nimport { DropdownMenu } from '../../../DropdownMenu';\nimport { Tooltip } from '../../../Tooltip';\n\nconst ALIGNMENT_OPTIONS: { value: ElementFormatType; label: string; icon: LucideIcon }[] = [\n { value: 'left', label: 'Left', icon: AlignLeft },\n { value: 'center', label: 'Center', icon: AlignCenter },\n { value: 'right', label: 'Right', icon: AlignRight },\n { value: 'justify', label: 'Justify', icon: AlignJustify },\n];\n\nconst ALIGNMENT_ICONS: Record<string, LucideIcon> = Object.fromEntries(\n ALIGNMENT_OPTIONS.map(({ value, icon }) => [value, icon]),\n);\n\nexport const AlignmentDropdown = ({\n editor,\n alignment,\n}: {\n editor: LexicalEditor;\n alignment: ElementFormatType;\n}) => {\n const savedSelectionRef = useRef<BaseSelection | null>(null);\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n savedSelectionRef.current = selection ? selection.clone() : null;\n });\n }\n };\n\n const handleSelect = (align: ElementFormatType) => {\n // Restore selection and dispatch within the same update so the command sees\n // the restored selection (otherwise dispatchCommand may race with the queued\n // $setSelection and apply the format to the wrong block).\n editor.update(() => {\n if (savedSelectionRef.current) {\n $setSelection(savedSelectionRef.current);\n }\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, align);\n });\n };\n\n const CurrentAlignmentIcon = ALIGNMENT_ICONS[alignment] ?? AlignLeft;\n\n return (\n <DropdownMenu onOpenChange={handleOpenChange}>\n <Tooltip tooltip=\"Text alignment\" placement=\"top\" triggerAsChild>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n 'tw-flex tw-h-7 tw-cursor-pointer tw-items-center tw-gap-1 tw-rounded tw-border-0 tw-bg-transparent tw-px-1.5 tw-text-xs tw-text-neutral-600',\n 'hover:tw-bg-neutral-100',\n )}\n >\n <CurrentAlignmentIcon className=\"tw-size-4\" />\n <ChevronDown className=\"tw-size-3\" />\n </button>\n </DropdownMenu.Trigger>\n </Tooltip>\n <DropdownMenu.Content align=\"start\" className=\"tw-min-w-32\">\n {ALIGNMENT_OPTIONS.map(({ value, label, icon: IconComp }) => (\n <DropdownMenu.Item\n key={value}\n onSelect={() => handleSelect(value)}\n className={cn(\n 'tw-flex tw-items-center tw-gap-2',\n alignment === value && 'tw-bg-secondary-50 tw-text-secondary-500',\n )}\n >\n <IconComp className=\"tw-size-4\" />\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n};\n","import { useMemo } from 'react';\nimport type { ComponentProps } from 'react';\nimport { Group, Root } from '@radix-ui/react-dropdown-menu';\n\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem';\nimport { DropdownMenuContent } from './DropdownMenuContent';\nimport type { DropdownMenuVariant } from './DropdownMenuContext';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuItem } from './DropdownMenuItem';\nimport { DropdownMenuItemDescription } from './DropdownMenuItemDescription';\nimport { DropdownMenuLabel } from './DropdownMenuLabel';\nimport { DropdownMenuRadioGroup, DropdownMenuRadioItem } from './DropdownMenuRadioGroup';\nimport { DropdownMenuSeparator } from './DropdownMenuSeparator';\nimport { DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger } from './DropdownMenuSub';\nimport { DropdownMenuTrigger } from './DropdownMenuTrigger';\n\ntype Props = ComponentProps<typeof Root>;\n\nexport const DropdownMenu = ({\n // change a default value to false, for modal property, as it is not used in most cases\n modal = false,\n ...props\n}: Props) => {\n const isLegacy = useIsLegacyBrand();\n const effectiveVariant: DropdownMenuVariant = !isLegacy ? 'argo' : 'default';\n const contextValue = useMemo(() => ({ variant: effectiveVariant }), [effectiveVariant]);\n\n return (\n <DropdownMenuContext value={contextValue}>\n <Root {...props} modal={modal} />\n </DropdownMenuContext>\n );\n};\n\n/**\n * Main Layout\n */\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = DropdownMenuContent;\nDropdownMenu.Group = Group;\n\n/**\n * Sub Layout\n */\nDropdownMenu.Sub = DropdownMenuSub;\nDropdownMenu.SubContent = DropdownMenuSubContent;\nDropdownMenu.SubTrigger = DropdownMenuSubTrigger;\n\n/**\n * Items can be used either Sub ar Main Layout\n */\nDropdownMenu.Separator = DropdownMenuSeparator;\nDropdownMenu.Label = DropdownMenuLabel;\nDropdownMenu.Item = DropdownMenuItem;\nDropdownMenu.CheckboxItem = DropdownMenuCheckboxItem;\nDropdownMenu.RadioGroup = DropdownMenuRadioGroup;\nDropdownMenu.RadioItem = DropdownMenuRadioItem;\n\n// item content\nDropdownMenu.ItemDescription = DropdownMenuItemDescription;\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { Loader2 } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { DropdownMenuItemIndicator } from './DropdownMenuItemIndicator';\nimport { ItemIcon } from './ItemIcon';\nimport { itemVariants } from './styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n closeOnSelect?: boolean;\n indicator?: 'switch' | 'checkbox' | 'check';\n indicatorAlign?: 'start' | 'end';\n isLoading?: boolean;\n};\n\nexport const DropdownMenuCheckboxItem = ({\n className,\n children,\n checked,\n closeOnSelect = false,\n onSelect,\n indicatorAlign = 'start',\n indicator = 'checkbox',\n isLoading = false,\n ...props\n}: Props) => {\n const isAtStart = indicatorAlign === 'start';\n const indicatorEle = isLoading ? (\n <ItemIcon className={isAtStart ? '' : 'tw-ml-auto'}>\n <Loader2 className=\"tw-animate-spin\" />\n </ItemIcon>\n ) : (\n <DropdownMenuItemIndicator variant={indicator} className={isAtStart ? '' : 'tw-ml-auto'} />\n );\n\n const handleSelect = (event: Event) => {\n if (!closeOnSelect) event.preventDefault();\n onSelect?.(event);\n };\n\n return (\n <DropdownMenuPrimitive.CheckboxItem\n className={cn(itemVariants, className)}\n checked={checked}\n onSelect={handleSelect}\n {...props}\n >\n {isAtStart && indicatorEle}\n {children}\n {!isAtStart && indicatorEle}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nimport { Check, Circle, ToggleRight } from '../../icons';\n\nconst variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-pointer-events-none',\n\n // sizing\n 'tw-size-4',\n 'tw-aspect-square',\n 'tw-shrink-0',\n\n // layout\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n ],\n {\n variants: {\n variant: {\n none: [],\n radio: [\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-border',\n 'tw-rounded-full',\n 'tw-bg-white',\n\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-2',\n '[&_svg]:data-[state=unchecked]:tw-hidden',\n // Lucide Circle is stroke-only — force fill to match the stroke\n // (currentColor) so the indicator reads as a solid dot.\n '[&_svg]:tw-fill-current',\n 'group-data-[variant=argo]/dropdown-menu-content:[&_svg]:tw-text-primary',\n 'group-data-[variant=default]/dropdown-menu-content:[&_svg]:tw-text-secondary-500',\n ],\n check: ['[&_svg:not([class*=\"tw-size-\"])]:tw-size-3.5', '[&_svg]:tw-text-primary'],\n checkbox: [\n '[&_svg]:tw-text-white',\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-neutral-200',\n 'tw-rounded',\n\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-3',\n '[&_svg]:data-[state=unchecked]:tw-hidden',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-border-primary',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-bg-primary',\n 'group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-border-secondary-500',\n 'group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-bg-secondary-500',\n ],\n switch: [\n 'tw-size-5',\n // Lucide SVGs default to 24×24 — constrain the rendered ToggleRight\n // to the indicator slot so it doesn't overflow.\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-5',\n 'tw-text-neutral-400',\n 'data-[state=unchecked]:tw-rotate-180',\n 'group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-text-secondary-500',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-text-primary',\n ],\n },\n },\n },\n);\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.ItemIndicator> &\n VariantProps<typeof variants>;\n\nexport const DropdownMenuItemIndicator = ({\n variant,\n className,\n forceMount: forceMountProp,\n ...rest\n}: Props) => {\n const IconComp = (() => {\n if (variant === 'switch') return ToggleRight;\n if (variant === 'radio') return Circle;\n return Check;\n })();\n\n const forceMount = (() => {\n if (forceMountProp) return true;\n // All variants, except for check, require rendering at all times.\n return variant === 'check' ? undefined : true;\n })();\n\n if (variant === 'none') return null;\n\n return (\n <DropdownMenuPrimitive.ItemIndicator\n {...rest}\n forceMount={forceMount}\n className={variants({ variant, className })}\n >\n <IconComp />\n </DropdownMenuPrimitive.ItemIndicator>\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'span'> & {\n children: ReactNode;\n};\n\nexport const ItemIcon = ({ className, children, ...props }: Props) => (\n <span\n {...props}\n className={cn(\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-aspect-square',\n // 20px container fits the 16px Lucide glyph plus 2px breathing room\n // each side — the previous tw-size-4 + tw-p-0.5 clipped the 16px child.\n 'tw-size-5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n 'group-data-[variant=default]/dropdown-menu-content:tw-text-neutral-400',\n 'group-data-[variant=argo]/dropdown-menu-content:tw-text-primary',\n 'group-data-[variant=argo]/dropdown-menu-content:group-aria-disabled:tw-text-muted-foreground',\n 'group-data-[variant=default]/dropdown-menu-content:group-hover:tw-text-secondary-500',\n className,\n )}\n >\n {children}\n </span>\n);\n","import { cn } from '../../utils';\n\nexport const itemVariants = cn(\n // reset\n 'tailwindcss-preflight',\n 'tw-outline-none',\n 'tw-group',\n 'tw-peer',\n 'tw-relative',\n\n // positioning\n 'tw-flex',\n 'tw-flex-1',\n 'tw-items-center',\n 'tw-gap-2',\n\n 'tw-cursor-pointer',\n 'tw-select-none',\n 'tw-transition-colors',\n\n // spacing\n 'tw-p-2',\n\n // typography\n 'tw-font-sans',\n 'tw-text-sm',\n\n 'aria-disabled:tw-pointer-events-none',\n 'aria-disabled:tw-opacity-50',\n\n 'focus-visible:tw-outline-none',\n\n 'group-data-[variant=default]/dropdown-menu-content:tw-rounded',\n 'group-data-[variant=default]/dropdown-menu-content:focus:tw-bg-neutral-100',\n 'group-data-[variant=default]/dropdown-menu-content:focus:tw-text-neutral-900',\n 'group-data-[variant=default]/dropdown-menu-content:hover:tw-bg-neutral-100',\n 'group-data-[variant=default]/dropdown-menu-content:hover:tw-text-neutral-900',\n\n 'group-data-[variant=argo]/dropdown-menu-content:tw-rounded-md',\n 'group-data-[variant=argo]/dropdown-menu-content:tw-text-popover-foreground',\n 'group-data-[variant=argo]/dropdown-menu-content:focus:tw-text-accent-foreground',\n 'group-data-[variant=argo]/dropdown-menu-content:focus:tw-bg-accent',\n 'group-data-[variant=argo]/dropdown-menu-content:hover:tw-text-accent-foreground',\n 'group-data-[variant=argo]/dropdown-menu-content:hover:tw-bg-accent',\n);\n\nexport const contentVariants = cn(\n 'tailwindcss-preflight',\n 'tw-group/dropdown-menu-content',\n 'tw-z-[1040]',\n\n // positioning\n 'tw-flex',\n 'tw-flex-col',\n 'tw-origin-[--radix-dropdown-menu-content-transform-origin]',\n\n // sizing\n 'tw-max-h-[var(--radix-dropdown-menu-content-available-height)]',\n 'tw-min-w-32',\n\n // border\n 'tw-border',\n 'tw-shadow-md',\n\n // Legacy surface — fixed white panel.\n 'data-[variant=default]:tw-rounded-md',\n 'data-[variant=default]:tw-bg-white',\n 'data-[variant=default]:tw-border-neutral-100',\n 'data-[variant=default]:tw-text-neutral-800',\n // Argo surface — semantic popover tokens (brand + dark aware).\n 'data-[variant=argo]:tw-rounded-2xl',\n 'data-[variant=argo]:tw-bg-popover',\n 'data-[variant=argo]:tw-text-popover-foreground',\n 'data-[variant=argo]:tw-border-border',\n\n // animations\n 'data-[state=open]:tw-animate-in',\n 'data-[state=open]:tw-fade-in-0',\n 'data-[state=open]:tw-zoom-in-95',\n\n 'data-[state=closed]:tw-animate-out',\n 'data-[state=closed]:tw-fade-out-0',\n 'data-[state=closed]:tw-zoom-out-95',\n\n 'data-[side=bottom]:tw-slide-in-from-top-2',\n 'data-[side=left]:tw-slide-in-from-right-2',\n 'data-[side=right]:tw-slide-in-from-left-2',\n 'data-[side=top]:tw-slide-in-from-bottom-2',\n);\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\nimport { ScrollArea } from '../ScrollArea';\n\nimport { useDropdownMenuContext } from './DropdownMenuContext';\nimport { contentVariants } from './styles';\n\ntype Props = Omit<\n ComponentProps<typeof DropdownMenuPrimitive.Content>,\n 'forceMount' | 'asChild'\n> & {\n forceMount?: boolean;\n viewPortClassName?: string;\n container?: HTMLElement | null;\n};\n\nexport const DropdownMenuContent = ({\n className,\n sideOffset = 4,\n forceMount,\n children,\n viewPortClassName,\n container,\n ...props\n}: Props) => {\n const { variant } = useDropdownMenuContext();\n\n return (\n <DropdownMenuPrimitive.Portal forceMount={forceMount || undefined} container={container}>\n <DropdownMenuPrimitive.Content\n {...props}\n data-variant={variant}\n sideOffset={sideOffset}\n className={contentVariants}\n >\n <ScrollArea\n className={className}\n viewPortClassName={cn(\n 'tw-p-2',\n 'tw-max-h-[var(--radix-dropdown-menu-content-available-height)]',\n viewPortClassName,\n )}\n scrollBarClassName=\"tw-w-1.5\"\n >\n {children}\n </ScrollArea>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\n\nimport { cn } from '../../utils';\n\nimport { ScrollBar } from './ScrollBar';\n\ntype Props = ComponentProps<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\n scrollBarClassName?: string;\n orientation?: ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>['orientation'];\n};\n\nexport const ScrollArea = ({\n ref,\n className,\n children,\n viewPortClassName,\n orientation,\n scrollBarClassName,\n ...props\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\n 'tw-peer/scroll-area tw-relative tw-overflow-hidden focus-visible:tw-outline-none',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n className={cn(\n 'tw-h-full tw-w-full tw-rounded-[inherit] focus-visible:tw-outline-none',\n viewPortClassName,\n )}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n {orientation ? (\n <ScrollBar className={scrollBarClassName} orientation={orientation} />\n ) : (\n <>\n <ScrollBar className={scrollBarClassName} orientation=\"vertical\" />\n <ScrollBar className={scrollBarClassName} orientation=\"horizontal\" />\n </>\n )}\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n);\n","import type { ComponentProps } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>;\n\nexport const ScrollBar = ({ className, orientation = 'vertical', ...props }: Props) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n orientation={orientation}\n className={cn(\n 'tw-flex tw-touch-none tw-select-none tw-transition-color',\n {\n 'tw-h-full tw-w-2.5 tw-p-px': orientation === 'vertical',\n 'tw-h-2.5 tw-flex-col tw-p-px': orientation === 'horizontal',\n },\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n className={cn(\n 'tw-relative',\n 'tw-flex-1',\n 'tw-rounded-full',\n 'tw-bg-border',\n 'hover:tw-bg-muted-foreground',\n )}\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n);\n","import { createContext, use } from 'react';\n\nexport type DropdownMenuVariant = 'default' | 'argo';\n\ntype DropdownMenuContextType = {\n variant: DropdownMenuVariant;\n};\n\nexport const DropdownMenuContext = createContext<DropdownMenuContextType>({\n variant: 'default',\n});\n\nexport const useDropdownMenuContext = () => use(DropdownMenuContext);\n","import type { ComponentProps, ElementRef, PointerEventHandler, ReactNode, Ref } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Root, Slottable } from '@radix-ui/react-slot';\n\nimport { Loader2 } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { ItemIcon } from './ItemIcon';\nimport { itemVariants } from './styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n /**\n * Fix for `autoFocus` on inputs not working correctly in modals.\n * While the DropdownMenuItem was animating out and the modal was animating in, the dying DropdownMenuItem was constantly trying to steal focus while the Dialog was trying to correctly set the new focus.\n * https://github.com/radix-ui/primitives/issues/2193#issuecomment-2758461323\n */\n asModalTrigger?: boolean;\n /** Pass a Lucide icon node as a leading adornment. */\n icon?: ReactNode;\n isLoading?: boolean;\n iconClassName?: string;\n};\n\nexport const DropdownMenuItem = ({\n ref,\n className,\n asModalTrigger = false,\n onSelect,\n onPointerLeave,\n onPointerMove,\n children,\n asChild,\n icon,\n iconClassName,\n isLoading = false,\n ...props\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => {\n const Comp = asChild ? Root : 'div';\n const adornment = isLoading ? <Loader2 className=\"tw-animate-spin\" /> : icon;\n\n const handleOnSelect = (event: Event) => {\n // prevents dropdown menu from closing to prevent modal unmounting from dom\n if (asModalTrigger) event.preventDefault();\n onSelect?.(event);\n };\n\n const handlePointerLeave: PointerEventHandler<HTMLDivElement> = (event) => {\n // prevents focus stealing from modal\n if (asModalTrigger) event.preventDefault();\n onPointerLeave?.(event);\n };\n\n const handlePointerMove: PointerEventHandler<HTMLDivElement> = (event) => {\n // prevents focus stealing from modal\n if (asModalTrigger) event.preventDefault();\n onPointerMove?.(event);\n };\n\n return (\n <DropdownMenuPrimitive.Item\n {...props}\n ref={ref}\n onSelect={handleOnSelect}\n onPointerLeave={handlePointerLeave}\n onPointerMove={handlePointerMove}\n className={cn(itemVariants, className)}\n asChild\n >\n <Comp>\n {adornment && <ItemIcon className={iconClassName}>{adornment}</ItemIcon>}\n <Slottable>{children}</Slottable>\n </Comp>\n </DropdownMenuPrimitive.Item>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { cva } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\nconst descriptionVariants = cva(\n [\n 'tw-box-border',\n 'tw-ml-auto',\n 'tw-font-sans',\n 'tw-tracking-normal',\n 'tw-font-normal',\n 'tw-text-xs',\n 'tw-text-muted-foreground',\n ],\n {\n variants: {\n hideOnHover: {\n true: ['group-focus-within:tw-hidden', 'group-hover:tw-hidden'],\n false: [],\n },\n },\n defaultVariants: {},\n },\n);\n\ntype Props = ComponentProps<'span'> & {\n hideOnHover?: boolean;\n};\n\nexport const DropdownMenuItemDescription = ({\n className,\n children,\n hideOnHover = false,\n ...props\n}: Props) => {\n return (\n <span {...props} className={cn(descriptionVariants({ hideOnHover }), className)}>\n {children}\n </span>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.Label>;\n\nexport const DropdownMenuLabel = ({ className, ...props }: Props) => {\n return (\n <DropdownMenuPrimitive.Label\n className={cn(\n 'tw-p-2',\n 'tw-font-medium',\n 'tw-text-xs',\n 'tw-text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\ntype Props<Value> = Omit<\n ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>,\n 'value' | 'onValueChange' | 'defaultValue'\n> & {\n value?: Value;\n defaultValue?: Value;\n onValueChange?: (value: Value) => void;\n};\n\nexport const DropdownMenuRadioGroup = <Value extends string = string>({\n value,\n defaultValue,\n onValueChange,\n ...props\n}: Props<Value>) => {\n const handleChange = (value: string) => {\n onValueChange?.(value as Value);\n };\n\n return (\n <DropdownMenuPrimitive.RadioGroup\n {...props}\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleChange}\n />\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { Loader2 } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { DropdownMenuItemIndicator } from '../DropdownMenuItemIndicator';\nimport { ItemIcon } from '../ItemIcon';\nimport { itemVariants } from '../styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n closeOnSelect?: boolean;\n indicatorAlign?: 'start' | 'end';\n indicator?: 'radio' | 'check' | 'none';\n icon?: ReactNode;\n iconClassName?: string;\n isLoading?: boolean;\n};\n\nexport const DropdownMenuRadioItem = ({\n className,\n children,\n closeOnSelect,\n onSelect,\n indicatorAlign = 'start',\n indicator = 'radio',\n icon,\n iconClassName,\n isLoading = false,\n ...props\n}: Props) => {\n const isAtStart = indicatorAlign === 'start';\n const indicatorEle = isLoading ? (\n <ItemIcon className={iconClassName}>\n <Loader2 className=\"tw-animate-spin\" />\n </ItemIcon>\n ) : (\n <DropdownMenuItemIndicator variant={indicator} />\n );\n\n const handleSelect = (event: Event) => {\n if (!closeOnSelect) event.preventDefault();\n onSelect?.(event);\n };\n\n return (\n <DropdownMenuPrimitive.RadioItem\n className={cn(\n itemVariants,\n 'data-[state=checked]:tw-cursor-default',\n {\n 'data-[state=checked]:tw-bg-neutral-100': indicator === 'none',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-bg-sky-100':\n indicator === 'check',\n },\n className,\n )}\n onSelect={handleSelect}\n {...props}\n >\n {isAtStart && indicatorEle}\n {icon && <ItemIcon className={iconClassName}>{icon}</ItemIcon>}\n <span className=\"tw-flex tw-min-w-0 tw-flex-1 tw-items-center tw-gap-2\">{children}</span>\n {!isAtStart && indicatorEle}\n </DropdownMenuPrimitive.RadioItem>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.Separator>;\n\nexport const DropdownMenuSeparator = ({ className, ...props }: Props) => (\n <DropdownMenuPrimitive.Separator\n className={cn(\n 'tw-relative',\n 'tw-z-10',\n\n // layout\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-w-full',\n\n // separator line\n 'before:tw-content-[\"\"]',\n 'before:tw-w-full',\n 'before:tw-h-px',\n\n 'group-data-[variant=default]/dropdown-menu-content:tw-py-2',\n 'group-data-[variant=default]/dropdown-menu-content:before:tw-bg-neutral-150',\n\n 'group-data-[variant=argo]/dropdown-menu-content:tw-py-1',\n 'group-data-[variant=argo]/dropdown-menu-content:before:tw-bg-border',\n\n className,\n )}\n {...props}\n />\n);\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../../utils';\nimport { useDropdownMenuContext } from '../DropdownMenuContext';\nimport { contentVariants } from '../styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.SubContent>;\n\nexport const DropdownMenuSubContent = ({ className, ...props }: Props) => {\n const { variant } = useDropdownMenuContext();\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n data-variant={variant}\n className={cn(contentVariants, 'tw-z-[1041]', 'tw-p-2', className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { ChevronRight } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { itemVariants } from '../styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.SubTrigger>;\n\nexport const DropdownMenuSubTrigger = ({ className, children, ...props }: Props) => {\n return (\n <DropdownMenuPrimitive.SubTrigger className={cn(itemVariants, className)} {...props}>\n {children}\n <ChevronRight className=\"tw-ml-auto tw-size-5\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Trigger } from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof Trigger>;\n\nexport const DropdownMenuTrigger = ({\n ref,\n className,\n ...props\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <Trigger\n {...props}\n ref={ref}\n data-slot=\"dropdown-menu-trigger\"\n className={cn('tw-group/dropdown-menu-trigger', className)}\n />\n);\n","import { useRef } from 'react';\nimport { $createCodeNode } from '@lexical/code';\nimport { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND } from '@lexical/list';\nimport { $createHeadingNode, $createQuoteNode } from '@lexical/rich-text';\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n type LexicalEditor,\n} from 'lexical';\n\nimport {\n ChevronDown,\n Heading1,\n Heading2,\n Heading3,\n List as ListIcon,\n ListOrdered,\n type LucideIcon,\n Quote,\n SquareCode,\n Type,\n} from '../../../../icons';\nimport { cn } from '../../../../utils';\nimport { DropdownMenu } from '../../../DropdownMenu';\nimport { Tooltip } from '../../../Tooltip';\n\nconst BLOCK_TYPE_META = {\n paragraph: { label: 'Normal', icon: Type satisfies LucideIcon, selectable: true },\n h1: { label: 'Heading 1', icon: Heading1 satisfies LucideIcon, selectable: true },\n h2: { label: 'Heading 2', icon: Heading2 satisfies LucideIcon, selectable: true },\n h3: { label: 'Heading 3', icon: Heading3 satisfies LucideIcon, selectable: true },\n bullet: { label: 'Bullet List', icon: ListIcon satisfies LucideIcon, selectable: false },\n number: { label: 'Numbered List', icon: ListOrdered satisfies LucideIcon, selectable: false },\n quote: { label: 'Quote', icon: Quote satisfies LucideIcon, selectable: false },\n code: { label: 'Code Block', icon: SquareCode satisfies LucideIcon, selectable: false },\n} as const;\n\ntype BlockType = keyof typeof BLOCK_TYPE_META;\n\nconst BLOCK_TYPE_OPTIONS = (\n Object.entries(BLOCK_TYPE_META) as [BlockType, (typeof BLOCK_TYPE_META)[BlockType]][]\n)\n .filter(([, meta]) => meta.selectable)\n .map(([value, { label, icon }]) => ({ value, label, icon }));\n\nconst isBlockType = (value: string): value is BlockType =>\n Object.prototype.hasOwnProperty.call(BLOCK_TYPE_META, value);\n\nexport const BlockTypeDropdown = ({\n editor,\n blockType,\n}: {\n editor: LexicalEditor;\n blockType: string;\n}) => {\n const savedSelectionRef = useRef<BaseSelection | null>(null);\n const currentMeta = isBlockType(blockType) ? BLOCK_TYPE_META[blockType] : null;\n const CurrentBlockIcon = currentMeta?.icon ?? Type;\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n savedSelectionRef.current = selection ? selection.clone() : null;\n });\n }\n };\n\n const handleSelect = (type: BlockType) => {\n editor.update(() => {\n if (savedSelectionRef.current) {\n $setSelection(savedSelectionRef.current);\n }\n\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (type === 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n return;\n }\n if (type === 'number') {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n return;\n }\n\n const anchorNode = selection.anchor.getNode();\n const element = $getNearestBlockElementAncestorOrThrow(anchorNode);\n\n const newNode =\n type === 'h1' || type === 'h2' || type === 'h3'\n ? $createHeadingNode(type)\n : type === 'quote'\n ? $createQuoteNode()\n : type === 'code'\n ? $createCodeNode()\n : $createParagraphNode();\n\n element.getChildren().forEach((child) => newNode.append(child));\n element.replace(newNode);\n });\n };\n\n return (\n <DropdownMenu onOpenChange={handleOpenChange}>\n <Tooltip tooltip=\"Change block type\" placement=\"top\" triggerAsChild>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n 'tw-flex tw-h-7 tw-cursor-pointer tw-items-center tw-gap-1.5 tw-rounded tw-border-0 tw-bg-transparent tw-px-1.5 tw-text-xs tw-text-neutral-600',\n 'hover:tw-bg-neutral-100',\n )}\n >\n <CurrentBlockIcon className=\"tw-size-4\" />\n {currentMeta?.label ?? 'Normal'}\n <ChevronDown className=\"tw-size-3\" />\n </button>\n </DropdownMenu.Trigger>\n </Tooltip>\n <DropdownMenu.Content align=\"start\" className=\"tw-min-w-40\">\n {BLOCK_TYPE_OPTIONS.map(({ value, label, icon: IconComp }) => (\n <DropdownMenu.Item\n key={value}\n onSelect={() => handleSelect(value)}\n className={cn(\n 'tw-flex tw-items-center tw-gap-2',\n blockType === value && 'tw-bg-secondary-50 tw-text-secondary-500',\n )}\n >\n <IconComp className=\"tw-size-4\" />\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n};\n","import { useRef, useState } from 'react';\nimport type { KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { $createLinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link';\nimport {\n $createTextNode,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n type LexicalEditor,\n} from 'lexical';\n\nimport { Link as LinkIcon } from '../../../../icons';\nimport { Button } from '../../../Button';\nimport { ButtonGroup } from '../../../ButtonGroup';\nimport { FormGroup } from '../../../FormGroup';\nimport { TextInput } from '../../../Input';\nimport { Label } from '../../../Label';\n\nimport { ToolbarButton } from './ToolbarButton';\n\nconst insertLink = (\n editor: LexicalEditor,\n url: string,\n label: string,\n savedSelection: BaseSelection | null,\n) => {\n editor.update(() => {\n $setSelection(savedSelection);\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const selectedText = selection.getTextContent();\n if (selectedText && label === selectedText) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, url);\n return;\n }\n }\n\n const linkNode = $createLinkNode(url);\n const textNode = $createTextNode(label || url);\n linkNode.append(textNode);\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([linkNode]);\n }\n });\n};\n\nexport const LinkPanel = ({ editor, isLink }: { editor: LexicalEditor; isLink: boolean }) => {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState('');\n const [label, setLabel] = useState('');\n const savedSelectionRef = useRef<BaseSelection | null>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const handleOpen = () => {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n savedSelectionRef.current = selection ? selection.clone() : null;\n\n if ($isRangeSelection(selection)) {\n const text = selection.getTextContent();\n if (text) setLabel(text);\n }\n });\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n setUrl('');\n setLabel('');\n savedSelectionRef.current = null;\n editor.focus();\n };\n\n const handleSubmit = () => {\n const trimmedUrl = url.trim();\n if (!trimmedUrl) return;\n\n insertLink(editor, trimmedUrl, label.trim(), savedSelectionRef.current);\n handleClose();\n };\n\n const handleKeyDown = (e: ReactKeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n handleClose();\n }\n };\n\n if (isLink) {\n return (\n <ToolbarButton\n active\n onClick={() => editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)}\n tooltip=\"Remove Link\"\n >\n <LinkIcon className=\"tw-size-4\" />\n </ToolbarButton>\n );\n }\n\n return (\n <div className=\"tw-relative\">\n <ToolbarButton active={open} onClick={handleOpen} tooltip=\"Insert Link\">\n <LinkIcon className=\"tw-size-4\" />\n </ToolbarButton>\n {open && (\n <div\n ref={panelRef}\n className=\"tw-absolute tw-left-0 tw-top-full tw-z-50 tw-mt-1 tw-w-80 tw-rounded-md tw-border tw-border-neutral-200 tw-bg-white tw-p-3 tw-shadow-lg\"\n >\n <div className=\"tw-flex tw-flex-col tw-gap-2\">\n <FormGroup>\n <Label htmlFor=\"link-label\" className=\"tw-mb-1 tw-text-xs\">\n Label\n </Label>\n <TextInput\n id=\"link-label\"\n autoFocus\n placeholder=\"Link text\"\n value={label}\n onValueChange={setLabel}\n onKeyDown={handleKeyDown}\n variant=\"secondary\"\n />\n </FormGroup>\n <FormGroup>\n <Label htmlFor=\"link-url\" className=\"tw-mb-1 tw-text-xs\">\n URL\n </Label>\n <TextInput\n id=\"link-url\"\n placeholder=\"https://…\"\n value={url}\n onValueChange={setUrl}\n onKeyDown={handleKeyDown}\n variant=\"secondary\"\n />\n </FormGroup>\n <ButtonGroup>\n <Button size=\"small\" variant=\"outline\" onClick={handleClose}>\n Cancel\n </Button>\n <Button size=\"small\" onClick={handleSubmit} disabled={!url.trim()}>\n Add link\n </Button>\n </ButtonGroup>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import type { ComponentProps, ElementRef, ReactNode, Ref } from 'react';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nconst buttonGroupVariant = cva(\n ['tailwindcss-preflight', 'tw-inline-flex', 'tw-items-center', 'tw-group/button-group'],\n {\n defaultVariants: {\n variant: 'inline',\n space: 'small',\n },\n variants: {\n variant: {\n inline: [],\n block: [\n 'tw-w-full',\n 'tw-flex-col',\n 'sm:tw-flex-row',\n '[&_a]:tw-flex-1',\n '[&>button:not([data-icon-only=true])]:tw-flex-1',\n ],\n },\n space: {\n 'extra-small': 'tw-gap-1',\n 'little-small': 'tw-gap-2',\n small: 'tw-gap-3',\n medium: 'tw-gap-4',\n large: 'tw-gap-6',\n compact: [\n 'tw-border-collapse',\n '!tw-gap-0',\n\n // ensure that focus visible outline is at the top\n '[&>*:focus-visible]:!tw-z-10',\n\n '[&>*:not(:first-child)]:tw-rounded-l-none',\n '[&>*:not(:last-child)]:tw-rounded-r-none',\n '[&>*:not(:last-child)]:tw-border-r-0',\n '[&>*:not(:first-child)]:tw-border-l-0',\n\n // separator\n '[&>*:not(:first-child)]:before:tw-content',\n '[&>*:not(:first-child)]:before:tw-absolute',\n '[&>*:not(:first-child)]:before:tw-left-0',\n '[&>*:not(:first-child)]:before:tw-h-full',\n '[&>*:not(:first-child)]:before:tw-w-px',\n '[&>*:not(:first-child)]:before:tw-bg-black/10',\n ],\n },\n },\n },\n);\n\ntype Props = {\n children: ReactNode;\n className?: string;\n} & VariantProps<typeof buttonGroupVariant> &\n ComponentProps<'div'>;\n\nexport const ButtonGroup = ({\n ref,\n children,\n space = 'small',\n className,\n variant,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => {\n return (\n <div\n ref={ref}\n {...rest}\n role=\"group\"\n data-variant={variant}\n className={buttonGroupVariant({ variant, className, space })}\n >\n {children}\n </div>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { FormGroupProvider } from './context';\nimport { FormGroupColorInput } from './FormGroupColorInput';\nimport { FormGroupHelp } from './FormGroupHelp';\nimport { FormGroupNumberInput } from './FormGroupNumberInput';\nimport { FormGroupTextarea } from './FormGroupTextarea';\nimport { FormGroupTextInput } from './FormGroupTextInput';\nimport type { FormGroupContext } from './types';\n\n/**\n * Props for `FormGroup`. `state` from `FormGroupContext` (\"default\" | \"error\") propagates to nested inputs\n * and help text via context.\n */\ntype FormGroupProps = {\n children: ReactNode;\n className?: string;\n testId?: string;\n} & FormGroupContext;\n\n/**\n * Label + input + help-text grouping with shared validation state. Provides the chrome for a single field.\n *\n * **When to use:** rendering a label + bare input + help/error text outside `useAppForm` (e.g. one-off\n * filter fields, settings panes). The `state=\"error\"` flips both `FormGroup.TextInput` and `FormGroup.Help`\n * to error styling without per-component wiring.\n * **When NOT to use:** for a full form with validation and submit state, use `useAppForm` from `blocks/Form` —\n * it composes `FormGroup` internally via the typed field connectors.\n * **Composition:** nest a `Label`, then one of `FormGroup.TextInput` / `FormGroup.NumberInput` /\n * `FormGroup.ColorInput` / `FormGroup.Textarea`, optionally followed by `FormGroup.Help`.\n */\nexport const FormGroup = ({ className, children, state, testId }: FormGroupProps) => {\n return (\n <FormGroupProvider value={{ state }}>\n <div data-testid={testId} className={cn('tw-flex tw-flex-col tw-gap-1', className)}>\n {children}\n </div>\n </FormGroupProvider>\n );\n};\n\nFormGroup.Help = FormGroupHelp;\nFormGroup.TextInput = FormGroupTextInput;\nFormGroup.NumberInput = FormGroupNumberInput;\nFormGroup.ColorInput = FormGroupColorInput;\nFormGroup.Textarea = FormGroupTextarea;\n","import { createContext, use } from 'react';\n\nimport type { FormGroupContext } from './types';\n\nconst FormGroupContext = createContext<FormGroupContext>({\n state: 'default',\n});\n\nexport const FormGroupProvider = FormGroupContext;\n\nexport const useFormGroupContext = () => use(FormGroupContext);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { InputGroupAddon } from './InputGroupAddon';\nimport { InputGroupButton } from './InputGroupButton';\nimport { InputGroupInput } from './InputGroupInput';\nimport { InputGroupText } from './InputGroupText';\nimport { InputGroupTextArea } from './InputGroupTextArea';\n\nconst inputGroupVariants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-group',\n\n 'tw-overflow-hidden',\n 'tw-box-border',\n\n // positioning\n 'tw-flex',\n 'tw-items-center',\n\n // base\n 'tw-rounded',\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-neutral-200',\n 'tw-text-neutral-800',\n 'tw-transition',\n\n // focus\n 'has-[:is(input,textarea):focus]:tw-ring-4',\n\n // readonly\n 'has-[:is(input,textarea)[readonly]]:tw-bg-neutral-150',\n 'has-[:is(input,textarea)[readonly]]:focus-within:tw-ring-0',\n 'has-[:is(input,textarea)[readonly]]:tw-border-neutral-150',\n\n // disabled cursor (opacity owned by variant)\n 'has-[:is(input,textarea):disabled]:tw-cursor-not-allowed',\n\n // textarea: top-align addons, allow vertical expansion, own its y-padding\n 'has-[textarea]:tw-items-start',\n\n 'has-[[data-align=block-start]:not(:empty)]:tw-flex-wrap',\n 'has-[[data-align=block-end]:not(:empty)]:tw-flex-wrap',\n '[&>input]:has-[[data-align=block-start]:not(:empty)]:tw-w-auto',\n '[&>input]:has-[[data-align=block-start]:not(:empty)]:tw-flex-1',\n '[&>input]:has-[[data-align=block-end]:not(:empty)]:tw-w-auto',\n '[&>input]:has-[[data-align=block-end]:not(:empty)]:tw-flex-1',\n\n '[&>input]:tw-px-4',\n '[&>input]:has-[[data-align=inline-start]:not(:empty)]:tw-pl-2',\n '[&>input]:has-[[data-align=inline-end]:not(:empty)]:tw-pr-2',\n ],\n {\n defaultVariants: {\n variant: 'primary',\n state: 'default',\n sizing: 'medium',\n focusVariant: 'default',\n },\n compoundVariants: [\n {\n variant: 'secondary',\n state: 'error',\n className: ['tw-bg-error-100'],\n },\n {\n variant: 'secondary',\n state: 'warning',\n className: ['tw-bg-warning-100'],\n },\n {\n variant: 'primary',\n state: 'default',\n focusVariant: 'off',\n className: ['has-[:is(input,textarea):focus]:tw-border-neutral-200'],\n },\n {\n variant: 'secondary',\n state: 'default',\n focusVariant: 'off',\n className: ['has-[:is(input,textarea):focus]:tw-border-neutral-100'],\n },\n {\n variant: ['primary', 'secondary'],\n state: 'error',\n focusVariant: 'on',\n className: ['!tw-border-error-500', '!tw-ring-error-200'],\n },\n {\n variant: ['primary', 'secondary'],\n state: 'warning',\n focusVariant: 'on',\n className: ['!tw-border-warning-500', '!tw-ring-warning-200'],\n },\n // --- argo ---\n {\n variant: 'argo',\n state: 'default',\n className: [\n 'has-[:is(input,textarea):focus]:tw-border-primary',\n 'has-[:is(input,textarea):focus]:tw-ring-primary/50',\n ],\n },\n {\n variant: 'argo',\n state: 'error',\n className: [\n 'tw-border-destructive',\n 'has-[:is(input,textarea):focus]:tw-border-destructive',\n 'has-[:is(input,textarea):focus]:tw-ring-destructive/20',\n ],\n },\n {\n variant: 'argo',\n focusVariant: 'on',\n className: ['!tw-border-primary', '!tw-ring-primary/50'],\n },\n {\n variant: 'argo',\n state: 'error',\n focusVariant: 'on',\n className: ['!tw-border-destructive', '!tw-ring-destructive/20'],\n },\n {\n variant: 'argo',\n state: 'default',\n focusVariant: 'off',\n className: ['has-[:is(input,textarea):focus]:tw-border-input'],\n },\n ],\n variants: {\n focusVariant: {\n default: [],\n on: ['!tw-border-ring', '!tw-ring-ring/30', '!tw-ring-4'],\n off: ['has-[:is(input,textarea):focus]:!tw-ring-0'],\n },\n variant: {\n primary: ['tw-bg-white', 'has-[:is(input,textarea):disabled]:tw-opacity-40'],\n secondary: [\n 'tw-bg-neutral-100',\n 'tw-border-neutral-100',\n 'has-[:is(input,textarea):disabled]:tw-opacity-40',\n ],\n argo: [\n // muted filled input surface — gray, distinct from white containers; not the app-background token\n 'tw-bg-muted',\n 'tw-border-input',\n 'tw-rounded-lg',\n 'tw-text-foreground',\n 'has-[:is(input,textarea):disabled]:tw-opacity-50',\n // higher specificity than has-[:is(input,textarea):focus] — prevents focus border on readonly\n 'has-[:is(input,textarea)[readonly]:focus]:tw-border-neutral-150',\n ],\n },\n sizing: {\n default: [\n '[&>:is(input,textarea)]:tw-py-2.5',\n '[&>:is(input,textarea)]:tw-leading-[18px]',\n '[&>textarea]:!tw-min-h-[calc(2.5rem-2px)]',\n ],\n small: [\n '[&>:is(input,textarea)]:tw-py-2',\n '[&>:is(input,textarea)]:tw-leading-[16px]',\n '[&>textarea]:!tw-min-h-[calc(2rem-2px)]',\n ],\n medium: [\n '[&>:is(input,textarea)]:tw-py-2',\n '[&>:is(input,textarea)]:tw-leading-[18px]',\n '[&>textarea]:!tw-min-h-[calc(2.25rem-2px)]',\n ],\n },\n state: {\n default: [\n 'has-[:is(input,textarea):focus]:tw-border-ring',\n 'has-[:is(input,textarea):focus]:tw-ring-ring/30',\n ],\n error: [\n 'tw-border-error-500',\n 'has-[:is(input,textarea):focus]:tw-border-error-500',\n 'has-[:is(input,textarea):focus]:tw-ring-error-200',\n ],\n warning: [\n 'tw-border-warning-500',\n 'has-[:is(input,textarea):focus]:tw-border-warning-500',\n 'has-[:is(input,textarea):focus]:tw-ring-warning-200',\n ],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'div'> &\n Omit<VariantProps<typeof inputGroupVariants>, 'variant'> & {\n variant?: Exclude<VariantProps<typeof inputGroupVariants>['variant'], 'argo'>;\n };\n\nconst InputGroupRoot = ({\n ref,\n children,\n state,\n variant,\n sizing,\n focusVariant,\n className,\n ...props\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => {\n const isLegacy = useIsLegacyBrand();\n const effectiveVariant = !isLegacy ? 'argo' : variant;\n const effectiveSizing = effectiveVariant === 'argo' ? 'medium' : sizing;\n return (\n <div\n {...props}\n ref={ref}\n className={cn(\n inputGroupVariants({\n state,\n variant: effectiveVariant,\n sizing: effectiveSizing,\n focusVariant,\n className,\n }),\n )}\n >\n {children}\n </div>\n );\n};\n\nexport const InputGroup = InputGroupRoot as typeof InputGroupRoot & {\n Input: typeof InputGroupInput;\n Addon: typeof InputGroupAddon;\n Button: typeof InputGroupButton;\n TextArea: typeof InputGroupTextArea;\n Text: typeof InputGroupText;\n};\n\nInputGroup.Input = InputGroupInput;\nInputGroup.Addon = InputGroupAddon;\nInputGroup.Button = InputGroupButton;\nInputGroup.TextArea = InputGroupTextArea;\nInputGroup.Text = InputGroupText;\n","import type { ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\n// Padding only fires when the addon actually has content — keeps an empty\n// `<Addon>{maybeNull}</Addon>` from carving 16px out of the input row.\nconst addonVariants = cva(\n [\n 'tw-flex',\n 'tw-items-center',\n 'tw-gap-1',\n\n // Default size for nested Lucide icons in prefix/suffix slots; callers can override on the icon.\n \"[&_svg.lucide:not([class*='tw-size-'])]:tw-size-4\",\n '[&_svg]:tw-shrink-0',\n ],\n {\n defaultVariants: {\n align: 'inline-start',\n },\n variants: {\n align: {\n 'inline-start': ['tw-order-first', '[&:not(:empty)]:tw-pl-4'],\n 'inline-end': ['tw-order-last', '[&:not(:empty)]:tw-pr-4'],\n 'block-start': [\n 'tw-order-first',\n // `tw-w-full` needs to be empty-conditional too — when the addon\n // has no content the root stays in flex-row, and a 100%-wide\n // empty addon would claim half of the input row beside the input.\n '[&:not(:empty)]:tw-w-full',\n '[&:not(:empty)]:tw-px-4',\n '[&:not(:empty)]:tw-py-1.5',\n ],\n 'block-end': [\n 'tw-order-last',\n '[&:not(:empty)]:tw-w-full',\n '[&:not(:empty)]:tw-px-4',\n '[&:not(:empty)]:tw-py-1.5',\n ],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'div'> & VariantProps<typeof addonVariants>;\n\nexport const InputGroupAddon = ({\n children,\n align = 'inline-start',\n className,\n ...props\n}: Props) => (\n <div {...props} data-align={align} className={cn(addonVariants({ align, className }))}>\n {children}\n </div>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\nimport { Button } from '../Button';\n\ntype ButtonProps = ComponentProps<typeof Button>;\n\ntype Props = Omit<ButtonProps, 'size' | 'block' | 'variant'>;\n\nexport const InputGroupButton = ({\n ref,\n className,\n tabIndex = -1,\n ...props\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <Button\n {...props}\n tabIndex={tabIndex}\n ref={ref}\n variant=\"invisible\"\n size=\"icon-sm\"\n className={cn('tw-size-5', '[&_svg]:tw-text-muted-foreground', className)}\n />\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'input'>;\n\nexport const InputGroupInput = ({\n ref,\n className,\n ...inputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => (\n <input\n {...inputProps}\n ref={ref}\n className={cn(\n 'tw-w-full',\n 'tw-bg-transparent',\n 'tw-outline-none',\n\n // font\n 'tw-font-sans',\n 'tw-text-sm',\n\n // placeholder\n 'placeholder:tw-text-neutral-400',\n 'placeholder:tw-font-normal',\n\n // disabled\n 'disabled:tw-cursor-not-allowed',\n\n className,\n )}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'span'>;\n\nexport const InputGroupText = ({ className, ...props }: Props) => (\n <span\n className={cn(\n 'tw-flex',\n 'tw-items-center',\n 'tw-gap-2',\n 'tw-text-sm',\n 'tw-text-muted-foreground',\n '[&_svg]:tw-pointer-events-none',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n className,\n )}\n {...props}\n />\n);\n","import type { ChangeEventHandler, ComponentProps, ElementRef, FocusEventHandler, Ref } from 'react';\nimport TextareaAutosize from 'react-textarea-autosize';\n\nimport { cn } from '../../utils';\n\ntype TextareaNativeProps = Omit<\n ComponentProps<typeof TextareaAutosize>,\n 'value' | 'defaultValue' | 'rows' | 'maxRows'\n>;\n\ntype Props = TextareaNativeProps & {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n maxRows?: number | 'unlimited';\n disableResize?: boolean;\n};\n\nexport const InputGroupTextArea = ({\n ref,\n className,\n onChange,\n onValueChange,\n value,\n defaultValue,\n onBlur,\n onValueBlur,\n disableResize = false,\n minRows = 1,\n maxRows = 4,\n ...props\n}: Props & { ref?: Ref<ElementRef<'textarea'>> }) => {\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (event) => {\n onValueChange?.(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLTextAreaElement> = (event) => {\n onValueBlur?.(event.target.value);\n onBlur?.(event);\n };\n\n return (\n <TextareaAutosize\n {...props}\n ref={ref}\n value={value ?? undefined}\n defaultValue={defaultValue ?? undefined}\n onChange={handleChange}\n onBlur={handleBlur}\n minRows={minRows}\n maxRows={maxRows === 'unlimited' ? undefined : maxRows}\n className={cn(\n 'tw-w-full',\n 'tw-bg-transparent',\n 'tw-outline-none',\n 'tw-px-4',\n\n // font\n 'tw-font-sans',\n 'tw-text-sm',\n\n // placeholder\n 'placeholder:tw-text-neutral-400',\n 'placeholder:tw-font-normal',\n\n // disabled\n 'disabled:tw-cursor-not-allowed',\n {\n 'tw-resize-none': disableResize,\n },\n\n className,\n )}\n />\n );\n};\n","import { useRef, useState } from 'react';\nimport type {\n ChangeEventHandler,\n ComponentProps,\n ElementRef,\n FocusEventHandler,\n MouseEventHandler,\n Ref,\n} from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\nimport { X } from '../../icons';\nimport { cn, createChangeInputEvent, mergeRefs } from '../../utils';\n\nimport { ColorPicker } from './ColorPicker';\nimport { coerceHexInputValue, isCompleteHexColor } from './utils';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'state' | 'sizing'\n>;\n\ntype InputGroupInputProps = Omit<ComponentProps<typeof InputGroup.Input>, 'value' | 'defaultValue'>;\n\ntype Props = InputGroupProps &\n InputGroupInputProps & {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n allowClear?: boolean;\n };\n\nexport const ColorInput = ({\n ref,\n\n // group props\n state,\n variant,\n focusVariant,\n sizing,\n className,\n\n // own props\n value: valueProp,\n onValueChange,\n onValueBlur,\n onChange,\n onBlur,\n defaultValue,\n allowClear = false,\n\n // input props\n disabled,\n readOnly,\n ...restInputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const inputRef = useRef<ElementRef<'input'>>(null);\n\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const isControlled = valueProp !== undefined;\n\n const value = isControlled ? (valueProp ?? '') : internalValue;\n const setValue = (nextValue: string) => {\n if (!isControlled) setInternalValue(nextValue);\n onValueChange?.(nextValue);\n };\n\n const canClear = allowClear && !!value && !disabled && !readOnly;\n const swatchColor = coerceHexInputValue(value);\n const isValidSwatch = isCompleteHexColor(swatchColor);\n\n // Preserve raw text while the user is typing — sanitise on blur.\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n setValue(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n const newValue = event.target.value;\n const sanitizedNewValue = coerceHexInputValue(newValue);\n\n if (sanitizedNewValue !== newValue) {\n // In controlled mode, let the parent decide whether to apply the\n // sanitised value via `onValueChange` — don't fight its `value` prop.\n if (!isControlled) event.target.value = sanitizedNewValue;\n setValue(sanitizedNewValue);\n }\n\n onValueBlur?.(sanitizedNewValue);\n onBlur?.(event);\n };\n\n const handlePickerChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n setValue(coerceHexInputValue(event.target.value));\n onChange?.(event);\n };\n\n const handleClear: MouseEventHandler<HTMLButtonElement> = () => {\n if (!inputRef.current) return;\n inputRef.current.value = '';\n setValue('');\n onChange?.(createChangeInputEvent(inputRef.current));\n };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n >\n <InputGroup.Addon\n align=\"inline-start\"\n className={cn(\n { '-tw-ml-7 tw-opacity-0': !value },\n 'tw-transition-[opacity,margin]',\n 'tw-ease-linear',\n 'tw-duration-200',\n )}\n >\n <div\n style={isValidSwatch ? { background: swatchColor } : undefined}\n className={cn(\n 'tw-size-5',\n 'tw-shrink-0',\n 'tw-rounded-sm',\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-neutral-300',\n {\n 'tw-bg-[linear-gradient(to_top_right,transparent_calc(50%_-_1px),theme(colors.red.300)_calc(50%_-_1px),theme(colors.red.300)_calc(50%_+_1px),transparent_calc(50%_+_1px))]':\n !isValidSwatch,\n },\n )}\n />\n </InputGroup.Addon>\n\n <InputGroup.Input\n {...restInputProps}\n type=\"text\"\n ref={mergeRefs(ref ?? null, inputRef)}\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n readOnly={readOnly}\n />\n\n <InputGroup.Addon align=\"inline-end\">\n {canClear && (\n <InputGroup.Button\n // prevents input focus stealing\n onMouseDown={(event) => event.preventDefault()}\n onClick={handleClear}\n aria-label=\"Clear color\"\n >\n <X className=\"tw-size-4\" />\n </InputGroup.Button>\n )}\n <ColorPicker\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n onChange={handlePickerChange}\n />\n </InputGroup.Addon>\n </InputGroup>\n );\n};\n","import { type ComponentProps, type ElementRef, useRef } from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\nimport { Pipette } from '../../icons';\n\nimport { coerceColorPickerValue, showPicker } from './utils';\n\ntype Props = Omit<ComponentProps<'input'>, 'type'>;\n\nexport const ColorPicker = ({ value, disabled, readOnly, ...props }: Props) => {\n const pickerRef = useRef<ElementRef<'input'>>(null);\n\n const handleOpenPicker = () => {\n if (!pickerRef.current) return;\n showPicker(pickerRef.current);\n };\n\n return (\n <div className=\"tw-relative\">\n <input\n {...props}\n ref={pickerRef}\n type=\"color\"\n value={coerceColorPickerValue(value)}\n tabIndex={-1}\n aria-hidden\n className=\"tw-pointer-events-none tw-absolute tw-left-0 tw-top-full tw-size-0 tw-opacity-0\"\n disabled={disabled}\n readOnly={readOnly}\n />\n <InputGroup.Button\n onMouseDown={(event) => event.preventDefault()}\n disabled={disabled || readOnly}\n onClick={handleOpenPicker}\n aria-label=\"Pick color\"\n >\n <Pipette className=\"tw-size-4\" />\n </InputGroup.Button>\n </div>\n );\n};\n","import type { ComponentProps } from 'react';\n\nconst HEX_CHARSET = /^[0-9a-fA-F]+$/;\n// `#` + 3, 4, 6, or 8 hex digits — every length CSS accepts as a hex color.\nconst COMPLETE_HEX_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n// Longest hex body CSS accepts (`#rrggbbaa` without the hash).\nconst MAX_HEX_BODY_LENGTH = 8;\n// Native <input type=\"color\"> default when fed anything unparseable.\nconst PICKER_FALLBACK = '#000000';\n\nconst extractHexBody = (value: unknown): string | null => {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n if (trimmed === '') return null;\n return trimmed.startsWith('#') ? trimmed.slice(1) : trimmed;\n};\n\nexport const isCompleteHexColor = (value: string): boolean => COMPLETE_HEX_PATTERN.test(value);\n\n// @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker\nexport const showPicker = (input: HTMLInputElement) => {\n const isShowPickerSupported = 'showPicker' in HTMLInputElement.prototype;\n isShowPickerSupported ? input.showPicker() : input.click();\n};\n\n/**\n * Coerces free-form text into a partial hex color for the visible text\n * input. Allows up to 8 hex digits to support `#rrggbbaa` (RGBA / alpha).\n *\n * Behaviour:\n * - empty / null / undefined / non-string → `''`\n * - trims surrounding whitespace\n * - prepends `#` when the user types raw hex without it\n * - keeps only the leading run of valid hex digits, dropping the rest\n * - caps total length at `# + 8` hex digits\n * - returns `''` when no valid hex digits remain (e.g. bare `#`, `zz`) so\n * the input doesn't sit on a lonely `#`\n *\n * Note: the result may be a *prefix* (e.g. `#a`, `#ab`) that is not yet a\n * valid CSS color — gate any rendering on `isCompleteHexColor`.\n */\nexport const coerceHexInputValue = (value?: string | null): string => {\n const body = extractHexBody(value);\n if (body === null) return '';\n const [validBody] = body.match(/^[0-9a-fA-F]+/) ?? [];\n if (!validBody) return '';\n return `#${validBody.slice(0, MAX_HEX_BODY_LENGTH)}`;\n};\n\n/**\n * Coerces any value into the strict lowercase `#rrggbb` form required by the\n * native `<input type=\"color\">`. Anything the picker can't render is\n * collapsed to `#000000`.\n *\n * - 3-digit shorthand (`#abc`) → expanded to 6 digits (`#aabbcc`)\n * - 4/8-digit RGBA → alpha channel is dropped\n * - invalid characters, wrong length, or non-string types → `#000000`\n *\n * The native picker silently lowercases its value; we lowercase here too so\n * controlled consumers see the same string round-trip.\n */\nexport const coerceColorPickerValue = (value: ComponentProps<'input'>['value'] | null) => {\n const body = extractHexBody(value);\n if (body === null || !HEX_CHARSET.test(body)) return PICKER_FALLBACK;\n\n if (body.length === 3 || body.length === 4) {\n const [r, g, b] = body;\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\n }\n if (body.length === 6 || body.length === 8) {\n return `#${body.slice(0, 6).toLowerCase()}`;\n }\n return PICKER_FALLBACK;\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { ColorInput } from '../../blocks/ColorInput';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof ColorInput>, 'state'>;\n\nexport const FormGroupColorInput = ({\n ref,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const { state } = useFormGroupContext();\n return <ColorInput state={state} {...props} ref={ref} />;\n};\n","import type { ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst helpVariants = cva(['tw-m-0', 'tw-text-xs'], {\n defaultVariants: {\n state: 'default',\n },\n variants: {\n state: {\n default: ['tw-text-muted-foreground'],\n error: ['tw-text-destructive'],\n warning: ['tw-text-warning-500'],\n },\n },\n});\n\ntype Props = {\n className?: string;\n children?: ReactNode;\n testId?: string;\n} & VariantProps<typeof helpVariants>;\n\nexport const HelpBlock = ({ children, className, state = 'default', testId }: Props) => {\n if (!children) return null;\n\n return (\n <p data-testid={testId} className={helpVariants({ state, className })}>\n {children}\n </p>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { HelpBlock } from '../HelpBlock';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof HelpBlock>, 'testId' | 'state'>;\n\nexport const FormGroupHelp = ({ children, ...rest }: Props) => {\n const formGroupContext = useFormGroupContext();\n\n return (\n <HelpBlock state={formGroupContext.state} {...rest}>\n {children}\n </HelpBlock>\n );\n};\n","import type {\n ChangeEvent,\n ChangeEventHandler,\n ComponentProps,\n ElementRef,\n FocusEventHandler,\n ReactNode,\n Ref,\n} from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'state' | 'sizing'\n>;\n\ntype InputGroupInputProps = Omit<\n ComponentProps<typeof InputGroup.Input>,\n 'value' | 'defaultValue' | 'type' | 'prefix'\n>;\n\ntype Props = InputGroupProps &\n InputGroupInputProps & {\n value?: number | null;\n defaultValue?: number | null;\n onValueChange?: (value: number | null) => void;\n onValueBlur?: (value: number | null) => void;\n prefix?: ReactNode;\n suffix?: ReactNode;\n };\n\nconst toNumberOrNull = (event: ChangeEvent<HTMLInputElement>) =>\n Number.isNaN(event.target.valueAsNumber) ? null : event.target.valueAsNumber;\n\nexport const NumberInput = ({\n ref,\n state,\n variant,\n focusVariant,\n sizing,\n className,\n\n value,\n defaultValue,\n onValueChange,\n onValueBlur,\n onChange,\n onBlur,\n\n prefix,\n suffix,\n\n ...inputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n onValueChange?.(toNumberOrNull(event));\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n onValueBlur?.(toNumberOrNull(event));\n onBlur?.(event);\n };\n\n const isControlled = value !== undefined;\n const valueProp = isControlled ? { value: value ?? '' } : { defaultValue: defaultValue ?? '' };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n >\n {prefix && <InputGroup.Addon align=\"inline-start\">{prefix}</InputGroup.Addon>}\n <InputGroup.Input\n {...inputProps}\n {...valueProp}\n ref={ref}\n type=\"number\"\n onChange={handleChange}\n onBlur={handleBlur}\n />\n {suffix && <InputGroup.Addon align=\"inline-end\">{suffix}</InputGroup.Addon>}\n </InputGroup>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { NumberInput } from '../../blocks/NumberInput';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof NumberInput>, 'state'>;\n\nexport const FormGroupNumberInput = ({\n ref,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const { state } = useFormGroupContext();\n return <NumberInput {...props} ref={ref} state={state} />;\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'sizing' | 'focusVariant' | 'state'\n>;\n\ntype TextareaNativeProps = Omit<\n ComponentProps<typeof InputGroup.TextArea>,\n 'value' | 'defaultValue' | 'rows' | 'maxRows'\n>;\n\ntype TextareaOwnProps = {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n maxRows?: number | 'unlimited';\n disableResize?: boolean;\n containerClassName?: string;\n};\n\ntype Props = InputGroupProps & TextareaNativeProps & TextareaOwnProps;\n\n/**\n * Multi-line text input. Chrome resolves from the active brand automatically: a modern brand always\n * renders argo (any `variant` is ignored), while `variant` only tunes the legacy-brand chrome.\n */\nexport const Textarea = ({\n ref,\n containerClassName,\n\n // group props\n state = 'default',\n variant,\n sizing,\n focusVariant,\n\n ...rest\n}: Props & { ref?: Ref<ElementRef<'textarea'>> }) => {\n return (\n <InputGroup\n state={state}\n sizing={sizing}\n focusVariant={focusVariant}\n variant={variant}\n className={containerClassName}\n >\n <InputGroup.TextArea {...rest} ref={ref} />\n </InputGroup>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { Textarea } from '../../blocks/Textarea';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof Textarea>, 'state'>;\n\nexport const FormGroupTextarea = (props: Props) => {\n const { state } = useFormGroupContext();\n return <Textarea state={state} {...props} />;\n};\n","import { useRef, useState } from 'react';\nimport type {\n ChangeEventHandler,\n ComponentProps,\n ElementRef,\n FocusEventHandler,\n MouseEventHandler,\n ReactNode,\n Ref,\n} from 'react';\n\nimport { X } from '../../icons';\nimport { cn, createChangeInputEvent, mergeRefs } from '../../utils';\nimport { InputGroup } from '../InputGroup/InputGroup';\n\nimport { genInputTestId } from './utils';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'sizing' | 'state'\n>;\n\ntype OwnProps = {\n prefix?: ReactNode;\n rightSuffix?: ReactNode;\n rightSuffixVariant?: 'addon' | 'default';\n leftSuffix?: ReactNode;\n allowClear?: boolean;\n onClear?: () => void;\n testId?: string;\n value?: ComponentProps<'input'>['value'] | null;\n defaultValue?: ComponentProps<'input'>['defaultValue'] | null;\n};\n\n/**\n * Props for `Input`. Combines `InputGroup` chrome (variant / sizing / state / focusVariant) with\n * input-specific slots (`prefix`, `leftSuffix`, `rightSuffix`, `allowClear`).\n */\ntype Props = InputGroupProps &\n OwnProps &\n Omit<ComponentProps<'input'>, 'prefix' | 'value' | 'defaultValue'>;\n\n/**\n * Low-level text input with `InputGroup` chrome — addons, clear button, sizing, focus variants.\n *\n * **When to use:** when you need an input with prefix / suffix slots or a clear button and don't need the\n * `onValueChange` convenience callback. Rare on its own — most call sites should use `TextInput`.\n * **When NOT to use:** for plain text fields use `TextInput`; for fields inside a `FormGroup` use\n * `FormGroup.TextInput`; for search use `SearchInput`; for forms with validation use `useAppForm`.\n * **Composition:** wrap in `FormGroup` for shared error state, or render directly as a controlled input.\n */\nexport const Input = ({\n ref: forwardedRef,\n state = 'default',\n sizing = 'default',\n className,\n prefix = null,\n rightSuffix = null,\n rightSuffixVariant = 'default',\n leftSuffix = null,\n allowClear = false,\n onClear,\n disabled = false,\n testId: prefixTestId = '',\n autoFocus = false,\n id,\n name,\n variant,\n readOnly,\n type = 'text',\n focusVariant = 'default',\n onChange,\n onBlur,\n value,\n defaultValue,\n ...inputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const [hasUncontrolledValue, setHasUncontrolledValue] = useState(() => !!defaultValue);\n const hasValue = !!value || hasUncontrolledValue;\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const testId = genInputTestId(prefixTestId);\n const isClearButtonVisible = (hasValue && !disabled && !readOnly) || !!onClear;\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const val = event.target.value;\n setHasUncontrolledValue(val !== '');\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n const val = event.target.value;\n setHasUncontrolledValue(val !== '');\n onBlur?.(event);\n };\n\n const handleClear: MouseEventHandler<HTMLButtonElement> = () => {\n if (inputRef.current === null) return;\n inputRef.current.value = ''; // necessary for uncontrolled state\n inputRef.current.focus();\n onClear?.();\n setHasUncontrolledValue(false);\n onChange?.(createChangeInputEvent(inputRef.current));\n };\n\n const isControlled = value !== undefined;\n const valueProp = isControlled ? { value: value ?? '' } : { defaultValue: defaultValue ?? '' };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n data-testid={testId.inputWrapper}\n >\n {prefix && <InputGroup.Addon align=\"inline-start\">{prefix}</InputGroup.Addon>}\n\n <InputGroup.Input\n {...inputProps}\n {...valueProp}\n autoFocus={autoFocus}\n type={type}\n onChange={handleChange}\n onBlur={handleBlur}\n ref={mergeRefs(forwardedRef ?? null, inputRef)}\n disabled={disabled}\n id={id}\n name={name}\n readOnly={readOnly}\n data-testid={testId.input}\n />\n\n {(leftSuffix || allowClear || rightSuffix) && (\n <InputGroup.Addon align=\"inline-end\">\n {leftSuffix}\n {allowClear && isClearButtonVisible && (\n <InputGroup.Button\n aria-label=\"Clear\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n data-testid={testId.clearButton}\n >\n <X className=\"tw-size-4\" />\n </InputGroup.Button>\n )}\n {rightSuffix && (\n <div\n className={cn({\n 'tw-whitespace-nowrap tw-bg-muted tw-px-4 -tw-mr-4 tw-py-2.5':\n rightSuffixVariant === 'addon',\n })}\n >\n {rightSuffix}\n </div>\n )}\n </InputGroup.Addon>\n )}\n </InputGroup>\n );\n};\n","import { createPrefixedString } from '../../utils';\n\nexport const genInputTestId = (prefix: string = '') => {\n const ps = createPrefixedString(prefix);\n return {\n toString: () => prefix,\n inputWrapper: ps`input-wrapper`,\n input: ps`input`,\n clearButton: ps`clear-button`,\n };\n};\n","import type { ChangeEventHandler, ComponentProps, ElementRef, FocusEventHandler, Ref } from 'react';\n\nimport { Input } from '../Input';\n\ntype NativeProps = Omit<\n ComponentProps<typeof Input>,\n 'type' | 'value' | 'defaultValue' | 'accept' | 'step'\n>;\n\ntype OwnProps = {\n value?: string | null;\n defaultValue?: string | null;\n /** Called with the unwrapped string value on every change. For the raw event use `onChange`. */\n onValueChange?: (value: string) => void;\n /** Called with the unwrapped string value on blur. For the raw event use `onBlur`. */\n onValueBlur?: (value: string) => void;\n type?: 'text' | 'email' | 'password' | 'datetime-local' | 'date';\n};\n\n/**\n * Props for `TextInput`. Extends `Input` with string-typed `value` / `defaultValue` and convenience\n * `onValueChange` / `onValueBlur` callbacks. `null` / `undefined` are coerced to empty strings.\n */\nexport type Props = OwnProps & NativeProps;\n\nconst sanitizeTextInputValue = (value: string | null | undefined) => {\n if (typeof value === 'string' && value.trim() === '') return '';\n return value;\n};\n\n/**\n * Standard text input with a string-only API. The default choice for a bare text input.\n *\n * **When to use:** any plain text / email / password / date-input field outside `useAppForm`. Pair with\n * `onValueChange` instead of unwrapping `event.target.value` from `onChange`.\n * **When NOT to use:** for fields inside a labelled group use `FormGroup.TextInput`; for forms with\n * validation use `useAppForm` + `field.TextField`; for search use `SearchInput`.\n * **Composition:** wrap in a `FormGroup` for shared error / help-text state, or render directly inside\n * page layouts. Chrome resolves from the active brand automatically: a modern brand always renders argo\n * (any `variant` is ignored), while `variant` only tunes the legacy-brand chrome.\n */\nexport const TextInput = ({\n ref,\n value,\n defaultValue,\n type = 'text',\n variant,\n onValueChange,\n onChange,\n onValueBlur,\n onBlur,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n onValueChange?.(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n onValueBlur?.(event.target.value);\n onBlur?.(event);\n };\n\n return (\n <Input\n {...props}\n ref={ref}\n onChange={handleChange}\n onBlur={handleBlur}\n type={type}\n variant={variant}\n value={sanitizeTextInputValue(value)}\n defaultValue={sanitizeTextInputValue(defaultValue)}\n />\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { TextInput } from '../Input';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof TextInput>, 'state'>;\n\nexport const FormGroupTextInput = ({\n ref,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const { state } = useFormGroupContext();\n return <TextInput state={state} {...props} ref={ref} />;\n};\n","import type { LabelProps as RLabelProps } from '@radix-ui/react-label';\nimport * as RLabel from '@radix-ui/react-label';\n\nimport { cn } from '../../utils';\n\ntype LabelProps = { id?: string | number; htmlFor?: string | number } & Omit<\n RLabelProps,\n 'id' | 'htmlFor'\n>;\n\nconst Optional = ({ className }: { className?: string }) => (\n <span className={cn('tw-text-muted-foreground', className)}>(optional)</span>\n);\n\nexport const Label = ({ className, children, id, htmlFor, ...rest }: LabelProps) => {\n return (\n <RLabel.Root\n {...rest}\n id={id?.toString()}\n htmlFor={htmlFor?.toString()}\n className={cn(\n 'tw-m-0 tw-text-foreground tw-font-normal peer-disabled:tw-opacity-50',\n className,\n )}\n >\n {children}\n </RLabel.Root>\n );\n};\n\nLabel.Optional = Optional;\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../../../utils';\nimport { Tooltip } from '../../../Tooltip';\n\nexport const ToolbarButton = ({\n active,\n disabled,\n onClick,\n tooltip,\n children,\n className: extraClassName,\n}: {\n active?: boolean;\n disabled?: boolean;\n onClick: () => void;\n tooltip: ReactNode;\n children: ReactNode;\n className?: string;\n}) => (\n <Tooltip tooltip={tooltip} placement=\"top\" triggerAsChild>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n className={cn(\n 'tw-flex tw-h-7 tw-min-w-7 tw-cursor-pointer tw-items-center tw-justify-center tw-rounded tw-border-0 tw-bg-transparent tw-px-1 tw-text-xs tw-text-neutral-600',\n 'hover:tw-bg-neutral-100 disabled:tw-cursor-not-allowed disabled:tw-opacity-30',\n active && 'tw-bg-secondary-100 tw-text-secondary-500',\n extraClassName,\n )}\n >\n {children}\n </button>\n </Tooltip>\n);\n","export const ToolbarDivider = () => <div className=\"tw-mx-0.5 tw-h-5 tw-w-px tw-bg-neutral-200\" />;\n","import type { EditorThemeClasses } from 'lexical';\n\n/**\n * Lexical editor theme — maps node types to CSS classes.\n * The editor container uses `tw-prose` so semantic elements (headings, lists, blockquotes, etc.)\n * are styled by Tailwind Typography. We only need explicit classes for text formatting\n * (bold, italic, etc.) because Lexical renders those as `<span>` elements.\n */\nexport const editorTheme: EditorThemeClasses = {\n link: 'tw-cursor-pointer !tw-text-primary tw-underline',\n text: {\n bold: 'tw-font-bold',\n italic: 'tw-italic',\n strikethrough: 'tw-line-through',\n underline: 'tw-underline',\n code: 'tw-rounded tw-bg-muted tw-px-1 tw-py-0.5 tw-font-mono tw-text-[0.85em]',\n },\n list: {\n ol: '!tw-list-decimal',\n ul: '!tw-list-disc',\n checklist: '!tw-list-none !tw-pl-0',\n listitemChecked: [\n 'tw-relative !tw-pl-6 tw-list-none tw-outline-none tw-line-through tw-text-muted-foreground',\n 'before:tw-content-[\"\"] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',\n 'before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid',\n 'before:tw-bg-primary before:tw-border-primary before:tw-cursor-pointer',\n 'after:tw-content-[\"\"] after:tw-absolute after:tw-left-[5.5px] after:tw-top-[5.5px]',\n 'after:tw-w-1 after:tw-h-2 after:tw-border-primary-foreground after:tw-border-solid',\n 'after:tw-border-r-[1.5px] after:tw-border-b-[1.5px] after:tw-border-t-0 after:tw-border-l-0',\n 'after:tw-rotate-45',\n ].join(' '),\n listitemUnchecked: [\n 'tw-relative !tw-pl-6 tw-list-none tw-outline-none',\n 'before:tw-content-[\"\"] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',\n 'before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid',\n 'before:tw-border-input before:tw-bg-background before:tw-cursor-pointer',\n ].join(' '),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/classNames.ts","../src/utils/copyToClipboard.ts","../src/utils/createChangeInputEvent.ts","../src/constants/keyCodes.ts","../src/components/ThemeProvider/themeContext.ts","../src/components/internal/useIsLegacyBrand.ts","../src/components/Tooltip/TooltipContent.tsx","../src/components/Tooltip/TooltipRoot.tsx","../src/components/Tooltip/TooltipTrigger.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/index.ts","../src/utils/decorators.tsx","../src/utils/createPrefixedString.ts","../src/utils/escapeStringRegexp.ts","../src/utils/mergeRefs.ts","../src/utils/noop.ts","../src/utils/debounce.ts","../src/utils/isMac.ts","../src/utils/useSHA256.ts","../src/utils/index.ts","../src/components/Skeleton/Skeleton.tsx","../src/icons/Keboola.tsx","../src/icons/index.ts","../src/components/Button/styles.ts","../src/components/Button/Button.tsx","../src/components/Button/ButtonInline.tsx","../src/components/Button/index.ts","../src/components/Clipboard/Clipboard.tsx","../src/components/Clipboard/index.ts","../src/blocks/ClipboardButton/ClipboardButton.tsx","../src/blocks/ClipboardButton/index.ts","../src/components/ZoomableSvg/ZoomableSvg.tsx","../src/components/ZoomableSvg/index.ts","../src/blocks/MermaidDiagram/MermaidDiagram.tsx","../src/components/MarkdownEditor/MarkdownEditor.tsx","../src/components/MarkdownEditor/context.ts","../src/components/MarkdownEditor/nodes/ImageNodeComponent.tsx","../src/components/MarkdownEditor/nodes/ImageNode.tsx","../src/components/MarkdownEditor/nodes/MermaidNodeComponent.tsx","../src/components/MarkdownEditor/nodes/MermaidNode.tsx","../src/components/Toast/toast.tsx","../src/components/Toast/ToastRoot.tsx","../src/components/Toast/ToastAction.tsx","../src/components/Toast/ToastDescription.tsx","../src/components/Toast/ToastDismiss.tsx","../src/components/Toast/ToastDuration.tsx","../src/components/Toast/ToastTitle.tsx","../src/components/MarkdownEditor/plugins/ImagePastePlugin.tsx","../src/components/MarkdownEditor/plugins/KeyboardPlugin.tsx","../src/components/MarkdownEditor/transformers.ts","../src/components/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx","../src/components/MarkdownEditor/plugins/ToolbarPlugin.tsx","../src/components/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/DropdownMenu/DropdownMenuCheckboxItem.tsx","../src/components/DropdownMenu/DropdownMenuItemIndicator.tsx","../src/components/DropdownMenu/ItemIcon.tsx","../src/components/DropdownMenu/styles.ts","../src/components/DropdownMenu/DropdownMenuContent.tsx","../src/components/ScrollArea/ScrollArea.tsx","../src/components/ScrollArea/ScrollBar.tsx","../src/components/DropdownMenu/DropdownMenuContext.tsx","../src/components/DropdownMenu/DropdownMenuItem.tsx","../src/components/DropdownMenu/DropdownMenuItemDescription.tsx","../src/components/DropdownMenu/DropdownMenuLabel.tsx","../src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioGroup.tsx","../src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioItem.tsx","../src/components/DropdownMenu/DropdownMenuSeparator.tsx","../src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSub.tsx","../src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubContent.tsx","../src/components/DropdownMenu/DropdownMenuSub/DropdownMenuSubTrigger.tsx","../src/components/DropdownMenu/DropdownMenuTrigger.tsx","../src/components/MarkdownEditor/plugins/toolbar/BlockTypeDropdown.tsx","../src/components/MarkdownEditor/plugins/toolbar/LinkPanel.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/FormGroup/FormGroup.tsx","../src/components/FormGroup/context.ts","../src/components/InputGroup/InputGroup.tsx","../src/components/InputGroup/InputGroupAddon.tsx","../src/components/InputGroup/InputGroupButton.tsx","../src/components/InputGroup/InputGroupInput.tsx","../src/components/InputGroup/InputGroupText.tsx","../src/components/InputGroup/InputGroupTextArea.tsx","../src/blocks/ColorInput/ColorInput.tsx","../src/blocks/ColorInput/ColorPicker.tsx","../src/blocks/ColorInput/utils.ts","../src/components/FormGroup/FormGroupColorInput.tsx","../src/components/HelpBlock/HelpBlock.tsx","../src/components/FormGroup/FormGroupHelp.tsx","../src/blocks/NumberInput/NumberInput.tsx","../src/components/FormGroup/FormGroupNumberInput.tsx","../src/blocks/Textarea/Textarea.tsx","../src/components/FormGroup/FormGroupTextarea.tsx","../src/components/Input/Input.tsx","../src/components/Input/utils.ts","../src/components/Input/TextInput/TextInput.tsx","../src/components/FormGroup/FormGroupTextInput.tsx","../src/components/Label/Label.tsx","../src/components/MarkdownEditor/plugins/toolbar/ToolbarButton.tsx","../src/components/MarkdownEditor/plugins/toolbar/ToolbarDivider.tsx","../src/components/MarkdownEditor/theme.ts"],"names":["extendTailwindMerge","clsx","createContext","use","keboolaLegacy","cva","Portal","jsx","Content","Root","Trigger","useState","jsxs","init_Tooltip","useId","Fragment","forwardRef","lucide_react_star","Slottable","init_Button","text","init_Clipboard","init_ClipboardButton","useMemo","DOMPurify","useRef","useEffect","useCallback","init_ZoomableSvg","colors","renderMermaidSVG","DecoratorNode","MermaidDiagram","lazy","Suspense","variants","sonnerToast","toast","useLexicalComposerContext","$insertNodes","$getNodeByKey","PASTE_COMMAND","COMMAND_PRIORITY_CRITICAL","DROP_COMMAND","KEY_DOWN_COMMAND","COMMAND_PRIORITY_HIGH","HorizontalRuleNode","$isHorizontalRuleNode","$createHorizontalRuleNode","code","CHECK_LIST","TRANSFORMERS","$convertFromMarkdownString","$convertToMarkdownString","markdown","DropdownMenuPrimitive","DropdownMenuPrimitive2","ScrollAreaPrimitive","ScrollAreaPrimitive2","DropdownMenuPrimitive3","DropdownMenuPrimitive4","DropdownMenuPrimitive5","value","DropdownMenuPrimitive6","DropdownMenuPrimitive7","DropdownMenuPrimitive8","DropdownMenuPrimitive9","DropdownMenuPrimitive10","DropdownMenuPrimitive11","Group","$getSelection","$setSelection","FORMAT_ELEMENT_COMMAND","ListIcon","$isRangeSelection","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","$getNearestBlockElementAncestorOrThrow","$createHeadingNode","$createQuoteNode","$createCodeNode","$createParagraphNode","TextareaAutosize","Label","RLabel","TOGGLE_LINK_COMMAND","$createLinkNode","$createTextNode","LinkIcon","$isLinkNode","$isListNode","$isHeadingNode","$isCodeNode","$isQuoteNode","createPortal","FORMAT_TEXT_COMMAND","REMOVE_LIST_COMMAND","HeadingNode","QuoteNode","ListNode","ListItemNode","CodeNode","LinkNode","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","HistoryPlugin","LinkPlugin","ClickableLinkPlugin","ListPlugin","CheckListPlugin","HorizontalRulePlugin","TabIndentationPlugin","MarkdownShortcutPlugin","AutoFocusPlugin"],"mappings":"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","file":"markdown-editor.cjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n prefix: 'tw-',\n});\n\nexport const cn = (...classes: ClassValue[]) => twMerge(clsx(...classes));\n","export const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\n};\n","import type { ChangeEvent } from 'react';\n\nexport const createChangeInputEvent = (input: HTMLInputElement) => {\n const changeEvent: ChangeEvent<HTMLInputElement> = {\n target: input,\n currentTarget: input,\n type: 'change',\n nativeEvent: new Event('change', { bubbles: true }),\n bubbles: true,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 2, // AT_TARGET\n isTrusted: false, // Synthetic events are not trusted\n preventDefault: () => {}, // Provide dummy functions if not needed\n isDefaultPrevented: () => false,\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n persist: () => {},\n timeStamp: Date.now(),\n };\n\n Object.defineProperty(changeEvent, 'target', {\n value: input,\n writable: false,\n });\n\n return changeEvent;\n};\n","export const keyCodes = {\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SPACE: ' ',\n};\n","import { createContext } from 'react';\n\nimport type { Brand } from '@keboola/brand-registry';\n\nexport type ColorScheme = 'light' | 'dark' | 'system';\nexport type ResolvedMode = 'light' | 'dark';\n\nexport type ThemeContextValue = {\n brand: Brand;\n setBrand?: (brand: Brand) => void;\n /** The configured color scheme (may be `'system'`). */\n colorScheme: ColorScheme;\n /** The effective light/dark mode after resolving `'system'`. */\n resolvedMode: ResolvedMode;\n};\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n","import { use } from 'react';\n\nimport { keboolaLegacy } from '@keboola/brand-registry';\n\nimport { ThemeContext } from '../ThemeProvider/themeContext';\n\n// No provider mounted → legacy (preserves pre-brand-dispatch chrome for un-wrapped apps + tests).\nexport const useIsLegacyBrand = (): boolean => {\n const context = use(ThemeContext);\n return context === null || context.brand.id === keboolaLegacy.id;\n};\n","import type { ComponentProps } from 'react';\nimport { Content, Portal } from '@radix-ui/react-tooltip';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nconst tooltipVariants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-inline-block',\n 'tw-break-anywhere',\n 'tw-max-h-96',\n 'tw-overflow-y-auto',\n 'tw-z-[1060]',\n\n // legacy (dark) chrome — default\n 'tw-rounded',\n 'tw-bg-neutral-800',\n 'tw-text-white',\n\n // argo chrome overrides — semantic floating-panel tokens\n 'data-[argo=true]:tw-rounded-2xl',\n 'data-[argo=true]:tw-border',\n 'data-[argo=true]:tw-border-solid',\n 'data-[argo=true]:tw-border-border',\n 'data-[argo=true]:tw-bg-popover',\n 'data-[argo=true]:tw-text-popover-foreground',\n 'data-[argo=true]:tw-shadow-md',\n\n // argo open animation\n 'data-[argo=true]:data-[state=delayed-open]:tw-animate-in',\n 'data-[argo=true]:data-[state=instant-open]:tw-animate-in',\n 'data-[argo=true]:data-[state=delayed-open]:tw-fade-in-0',\n 'data-[argo=true]:data-[state=instant-open]:tw-fade-in-0',\n 'data-[argo=true]:data-[state=delayed-open]:tw-zoom-in-95',\n 'data-[argo=true]:data-[state=instant-open]:tw-zoom-in-95',\n\n // argo closed animation\n 'data-[argo=true]:data-[state=closed]:tw-animate-out',\n 'data-[argo=true]:data-[state=closed]:tw-fade-out-0',\n 'data-[argo=true]:data-[state=closed]:tw-zoom-out-95',\n\n // argo position animation\n 'data-[argo=true]:data-[side=bottom]:tw-slide-in-from-top-2',\n 'data-[argo=true]:data-[side=left]:tw-slide-in-from-right-2',\n 'data-[argo=true]:data-[side=right]:tw-slide-in-from-left-2',\n 'data-[argo=true]:data-[side=top]:tw-slide-in-from-bottom-2',\n ],\n {\n defaultVariants: {\n variant: 'action',\n },\n variants: {\n variant: {\n action: [\n 'tw-max-w-fit',\n 'tw-px-3',\n 'tw-py-2',\n\n 'tw-text-center',\n 'tw-text-xs',\n 'tw-font-medium',\n 'tw-uppercase',\n 'tw-tracking-wider',\n ],\n explanatory: [\n 'tw-max-w-80',\n 'tw-px-4',\n 'tw-py-3',\n 'tw-text-left',\n\n 'tw-text-sm',\n 'tw-font-normal',\n ],\n },\n },\n },\n);\n\ntype Props = {\n keepOpenOnPointerDownOutside?: boolean;\n placement?: ComponentProps<typeof Content>['side'];\n} & Omit<ComponentProps<typeof Content>, 'side'> &\n VariantProps<typeof tooltipVariants>;\n\nexport const TooltipContent = ({\n className,\n variant,\n keepOpenOnPointerDownOutside = false,\n children,\n onPointerDownOutside,\n sideOffset = 8,\n collisionPadding = 8,\n hideWhenDetached = true,\n placement = 'right',\n ...rest\n}: Props) => {\n const isLegacy = useIsLegacyBrand();\n const renderArgo = !isLegacy;\n\n const handlePointerDownOutside: ComponentProps<typeof Content>['onPointerDownOutside'] = (\n event,\n ) => {\n if (keepOpenOnPointerDownOutside) event.preventDefault();\n onPointerDownOutside?.(event);\n };\n\n return (\n <Portal>\n <Content\n {...rest}\n // Marks the dark (non-argo) tooltip chrome so styles.css can invert\n // nested `.tw-prose` for contrast.\n data-tooltip-content={renderArgo ? undefined : true}\n data-argo={renderArgo}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n onPointerDownOutside={handlePointerDownOutside}\n className={tooltipVariants({ className, variant })}\n hideWhenDetached={hideWhenDetached}\n side={placement}\n >\n {children}\n </Content>\n </Portal>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Root } from '@radix-ui/react-tooltip';\n\ntype Props = ComponentProps<typeof Root>;\n\nconst DELAY_SHOW_TOOLTIP = 300;\n\nexport const TooltipRoot = ({ children, delayDuration = DELAY_SHOW_TOOLTIP, ...rest }: Props) => (\n <Root {...rest} delayDuration={delayDuration}>\n {children}\n </Root>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Trigger } from '@radix-ui/react-tooltip';\n\nimport { cn } from '../../utils';\n\ntype Props = {\n keepOpenOnClick?: boolean;\n} & ComponentProps<typeof Trigger>;\n\nexport const TooltipTrigger = ({\n ref,\n children,\n className,\n keepOpenOnClick = false,\n onClick,\n onPointerDown,\n asChild,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const handleClick: ComponentProps<typeof Trigger>['onClick'] = (event) => {\n if (keepOpenOnClick) event.preventDefault();\n onClick?.(event);\n };\n\n const handlePointerDown: ComponentProps<typeof Trigger>['onPointerDown'] = (event) => {\n if (keepOpenOnClick) event.preventDefault();\n onPointerDown?.(event);\n };\n\n return (\n <Trigger\n {...rest}\n asChild\n ref={ref}\n className={cn('tailwindcss-preflight', className)}\n onClick={handleClick}\n onPointerDown={handlePointerDown}\n >\n {asChild ? (\n children\n ) : (\n // Default-mode trigger wraps children in a span so Radix has a\n // single DOM element to attach handlers to. `tailwindcss-preflight`\n // (merged in via Slot) activates Tailwind's preflight inside the\n // span, which sets `svg { display: block }` — without an inline-flex\n // container that would stack any bare Lucide icon onto its own\n // line. `tw-inline-flex tw-items-center` keeps icon + text aligned.\n <span className=\"tw-inline-flex tw-items-center\">{children}</span>\n )}\n </Trigger>\n );\n};\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { Content, Trigger } from '@radix-ui/react-tooltip';\nimport { Provider } from '@radix-ui/react-tooltip';\n\nimport { keyCodes } from '../../constants/keyCodes';\n\nimport { TooltipContent } from './TooltipContent';\nimport { TooltipRoot } from './TooltipRoot';\nimport { TooltipTrigger } from './TooltipTrigger';\n\nconst ACTION_TOOLTIP_LIMIT = 30;\n\ntype TriggerProps = {\n triggerAsChild?: boolean;\n};\n\n/**\n * Props for `Tooltip`. `tooltip` is the popup content; `children` is the trigger element.\n * `variant` auto-resolves to `\"explanatory\"` for strings >30 chars, else `\"action\"`.\n */\nexport type Props = {\n /** Keep the tooltip visible when the user clicks the trigger (useful for click-to-copy feedback). */\n keepOpenOnTriggerClick?: boolean;\n /** Content rendered inside the tooltip. Plain text only — no interactive elements (use `HoverCard` or `Popover` for that). */\n tooltip: ReactNode;\n children: ReactNode;\n placement?: ComponentProps<typeof Content>['side'];\n /** Forcibly hide the tooltip regardless of hover state. */\n forceHide?: boolean;\n /** Forcibly show the tooltip regardless of hover state. Useful for guided-tour overlays. */\n forceShow?: boolean;\n className?: string;\n} & TriggerProps &\n Pick<ComponentProps<typeof TooltipContent>, 'variant' | 'className'>;\n\n/** Re-export of Radix `Tooltip.Provider`. Mount once at the app root so tooltips share delay state. */\nexport const TooltipProvider = Provider;\n\n/**\n * Short plain-text label that appears on hover or focus.\n *\n * **When to use:** describing an icon-only `Button`, explaining a disabled control, or labelling a\n * truncated value. Plain text only — auto-switches to the longer `\"explanatory\"` variant when the string\n * exceeds 30 characters.\n * **When NOT to use:** for rich preview content (multiple lines, formatted text, structured data) use\n * `HoverCard`; for tooltips containing links or buttons use `Popover` (interactive elements break a11y\n * inside a `Tooltip`).\n * **Composition:** wrap any focusable element via `triggerAsChild` so the tooltip targets the underlying\n * native element. Mount `TooltipProvider` once at the app root.\n *\n * @see RECIPES.md#disabled-button-tooltip — for the disabled-button + tooltip pattern\n */\nexport const Tooltip = ({\n tooltip,\n children,\n className,\n keepOpenOnTriggerClick = false,\n variant,\n placement = 'right',\n forceHide = false,\n forceShow = false,\n // trigger props\n triggerAsChild = false,\n}: Props) => {\n const [open, setOpen] = useState(false);\n\n const resolvedVariant = (() => {\n if (!!variant) return variant;\n if (typeof tooltip === 'string' && tooltip.length > ACTION_TOOLTIP_LIMIT) return 'explanatory';\n\n return 'action';\n })();\n\n const isActionVariant = resolvedVariant === 'action';\n\n const handleKeyUp: ComponentProps<typeof Trigger>['onKeyUp'] = (event) => {\n if (![keyCodes.ENTER, keyCodes.SPACE].includes(event.key)) return;\n event.stopPropagation();\n };\n\n return (\n <TooltipRoot\n open={!!tooltip && (open || forceShow) && !forceHide}\n onOpenChange={setOpen}\n disableHoverableContent={isActionVariant}\n >\n <TooltipTrigger\n asChild={triggerAsChild}\n keepOpenOnClick={keepOpenOnTriggerClick}\n onKeyUp={handleKeyUp}\n >\n {children}\n </TooltipTrigger>\n\n <TooltipContent\n className={className}\n variant={resolvedVariant}\n placement={placement}\n keepOpenOnPointerDownOutside={keepOpenOnTriggerClick}\n >\n {tooltip}\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nTooltip.Root = TooltipRoot;\nTooltip.Content = TooltipContent;\nTooltip.Trigger = TooltipTrigger;\n","export * from './Tooltip';\n","import type { ComponentType } from 'react';\n\nimport { TooltipProvider } from '../components/Tooltip';\n\nexport const withTooltipProvider = (Story: ComponentType) => (\n <TooltipProvider>\n <Story />\n </TooltipProvider>\n);\n\n// position:fixed only fills the Storybook iframe, not the browser window.\nexport const withHiddenFullscreen = (Story: ComponentType) => (\n <div className=\"[&_[aria-label=Fullscreen]]:tw-hidden\">\n <Story />\n </div>\n);\n","export const createPrefixedString = (prefix: string) => (literals: TemplateStringsArray) =>\n literals.reduce((acc, literal) => acc + literal, `${prefix}-`);\n","// Escape characters with special meaning either inside or outside character sets.\n// Use a simple backslash escape when it's always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns' stricter grammar.\nexport const escapeStringRegexp = (string: string) =>\n string.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n","import type { MutableRefObject, RefCallback } from 'react';\n\ntype PossibleRef<T> = MutableRefObject<T> | RefCallback<T> | null;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nexport const mergeRefs = <T>(...refs: PossibleRef<T>[]) => {\n return (node: T) => refs.forEach((ref) => setRef(ref, node));\n};\n","export const noop = () => void 0;\n","type DebouncedFn<T extends (...args: any[]) => void> = {\n (...args: Parameters<T>): void;\n cancel: () => void;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n delay: number,\n): DebouncedFn<T> => {\n let timeoutId: ReturnType<typeof setTimeout>;\n const debounced = (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n debounced.cancel = () => clearTimeout(timeoutId);\n return debounced;\n};\n","// Platform detection\ntype NavigatorUAData = {\n platform: string;\n brands: { brand: string; version: string }[];\n mobile: boolean;\n};\n\nconst getIsMac = (): boolean => {\n // Modern approach using navigator.userAgentData\n if (typeof navigator !== 'undefined' && 'userAgentData' in navigator) {\n const platform = (navigator.userAgentData as NavigatorUAData).platform;\n\n if (typeof platform === 'string') {\n return platform.toLowerCase() === 'macos';\n }\n }\n\n if (typeof navigator !== 'undefined' && typeof navigator.platform === 'string') {\n return navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n }\n\n // Server-side rendering fallback\n return false;\n};\n\nexport const isMac = getIsMac();\n","import { useEffect, useState } from 'react';\n\n// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\nconst sha256 = async (text: string) => {\n const msgUint8 = new TextEncoder().encode(text);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\nexport const useSHA256 = (text?: string) => {\n const [hash, setHash] = useState('');\n\n useEffect(() => {\n if (!text) return;\n let cancelled = false;\n sha256(text).then((h) => {\n if (!cancelled) setHash(h);\n });\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n // Empty input has no hash — derive it during render instead of syncing state\n // in the effect (avoids the extra render and a stale-value frame).\n return text ? hash : '';\n};\n","export * from './classNames';\nexport * from './copyToClipboard';\nexport * from './createChangeInputEvent';\nexport * from './decorators';\nexport * from './createPrefixedString';\nexport * from './escapeStringRegexp';\nexport * from './mergeRefs';\nexport * from './noop';\nexport * from './debounce';\nexport * from './isMac';\nexport * from './useSHA256';\n","import { useId } from 'react';\n\nimport { cn } from '../../utils';\n\nexport type Height = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/**\n * Props for `Skeleton`. `height` maps to the named token (xxs 12px → 2xl 48px); `count` renders multiple\n * stacked placeholders sharing the same shape.\n */\ntype SkeletonProps = {\n /** Named height token — `xxs` (12px) through `2xl` (48px). */\n height?: Height;\n className?: string;\n /** Number of stacked placeholder rows. Use for list-style loading states. */\n count?: number;\n};\n\nconst HEIGHT_CLASS_NAME: Record<Height, string> = {\n xxs: 'tw-h-3 tw-rounded',\n xs: 'tw-h-4 tw-rounded',\n sm: 'tw-h-5 tw-rounded',\n md: 'tw-h-6 tw-rounded-md',\n lg: 'tw-h-8 tw-rounded-lg',\n xl: 'tw-h-10 tw-rounded-lg',\n '2xl': 'tw-h-12 tw-rounded-lg',\n};\n\nconst ANIMATION_CLASS_NAME = cn(\n // base styles\n 'tw-relative',\n 'tw-overflow-hidden',\n 'tw-pointer-events-none',\n 'tw-bg-muted',\n\n // before\n 'before:tw-content-[\"\"]',\n 'before:tw-opacity-100',\n 'before:tw-absolute',\n 'before:tw-inset-0',\n 'before:-tw-translate-x-full',\n 'before:tw-animate-[shimmer_2s_infinite]',\n 'before:tw-bg-gradient-to-r',\n 'before:tw-from-transparent',\n 'before:tw-to-transparent',\n 'before:tw-via-neutral-50',\n);\n\n/**\n * Animated placeholder shown in place of content that is still loading.\n *\n * **When to use:** during initial page or section load while the real content is fetched. Match the\n * placeholder shape to the eventual content (one `Skeleton height=\"lg\"` per title row, several `xs` for\n * paragraph lines). For list shells use `count` to render N stacked placeholders.\n * **When NOT to use:** for indeterminate background work without a layout slot use `DotsLoader` or\n * `Button isLoading`; for empty / error states once the request resolves use `EmptyState` / `ErrorState`.\n * **Composition:** drop directly into the slot the real content will occupy. `SkeletonList` is the typical\n * shell for `Table` / `Card`-list pages.\n *\n * @see RECIPES.md#data-card-with-skeleton — for a loading card pattern\n */\nexport const Skeleton = ({ height = 'md', className, count = 1 }: SkeletonProps) => {\n const prefixId = useId();\n const keys = Array.from({ length: count }, (_, i) => `${prefixId}-${i}`);\n\n return (\n <>\n {keys.map((key) => (\n <div\n key={key}\n data-skeleton=\"true\"\n className={cn(HEIGHT_CLASS_NAME[height], ANIMATION_CLASS_NAME, className)}\n />\n ))}\n </>\n );\n};\n","import { forwardRef } from 'react';\nimport type { LucideIcon, LucideProps } from 'lucide-react';\n\nimport { cn } from '../utils';\n\n// `forwardRef` here is required for type compatibility with `LucideIcon`\n// (a `ForwardRefExoticComponent` from lucide-react). React 19's ref-as-prop\n// pattern produces a plain function component which isn't structurally\n// assignable to `LucideIcon`, so consumers couldn't pass `Keboola`\n// interchangeably with imported Lucide icons (e.g. `<Button><Keboola className=\"tw-size-4\" /></Button>`).\n// oxlint-disable-next-line react-x/no-forward-ref\nexport const Keboola: LucideIcon = forwardRef<SVGSVGElement, LucideProps>(\n ({ size = 24, color = 'currentColor', className, children, ...rest }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 300 512\"\n fill={color}\n className={cn('lucide', className)}\n {...rest}\n >\n <path d=\"M152 320C79.7 320 24.5 233.9 24.5 124.7C24.5 15.6 70.5 0 152 0s123.6 15.6 123.6 124.7C275.5 233.9 217.7 320 152 320zm-8.7-50.5c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm55.7 0c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm68.9 115.1c10.2 9.3 20.2 20.5 29 35c5.9 9.7 2.6 22.1-7.5 27.8c-3.4 1.9-7.1 2.8-10.7 2.8c-7.2 0-14.3-3.6-18.3-10c-6.8-11.1-13.8-18.9-21.7-26.1c-7.3-6.7-15.6-12.7-24.9-19.5c-.7-.5-1.4-1-2.1-1.5c-5-3.6-10-6.8-14.9-9.4c.6 1 1.2 2.1 1.8 3.2c14.4 26.4 29.2 63.1 29.2 104.9c0 11.2-9.5 20.3-21.2 20.3c-11.7 0-21.2-9.1-21.2-20.3c.1-31.8-11.6-62.3-23.8-84.9c-4-7.4-8-13.9-11.6-19.3c-3.4 5.2-7.2 11.3-11 18.3c-12.5 22.7-24.5 53.8-24.4 86c0 11.2-9.5 20.3-21.2 20.3s-21.2-9.1-21.2-20.3c.1-41.8 14.9-78.4 29.2-104.9c.6-1.1 1.2-2.1 1.8-3.2c-5 2.7-9.9 5.8-14.9 9.4c-.6 .5-1.3 .9-1.9 1.4c-9.5 6.9-17.8 12.9-25.1 19.7c-7.9 7.2-14.9 15.1-21.7 26.1c-5.9 9.7-18.9 12.9-29 7.2C.5 441.8-2.9 429.3 3.1 419.7c8.9-14.4 18.8-25.7 29-35c9.2-8.4 18.5-15.1 27.6-21.7c1-.7 2-1.4 3-2.2c4.7-3.5 9.6-6.7 14.6-9.6c-5-2.9-9.8-6.1-14.6-9.6C39.8 325 19.9 302.5 3.1 275.1c-5.9-9.7-2.6-22.1 7.5-27.8c10.1-5.7 23.1-2.5 29 7.2c14.6 23.7 31.1 42 48.7 54.9c18.9 13.7 37.4 20.5 56.5 21.5c1.7-.1 3.5-.1 5.2-.1c1.8 0 3.5 .1 5.2 .1c0 0 0 0 0 0c19.1-1.1 37.6-7.9 56.5-21.5c17.6-12.8 34.2-31.2 48.7-54.9c6-9.7 18.9-12.9 29-7.2c10.1 5.7 13.4 18.1 7.5 27.8c-16.8 27.4-36.7 49.9-59.6 66.6c-4.7 3.5-9.6 6.7-14.5 9.6c4.9 2.9 9.8 6.1 14.5 9.6c.9 .7 1.8 1.3 2.7 2c9.2 6.7 18.5 13.5 27.9 22z\" />\n {children}\n </svg>\n ),\n);\n\nKeboola.displayName = 'Keboola';\n","export * from 'lucide-react';\nexport type { LucideIcon, LucideProps } from 'lucide-react';\n\nexport { Keboola } from './Keboola';\n","import { cva } from 'class-variance-authority';\n\nexport const variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-group/button',\n 'tw-border-box',\n\n // layout\n 'tw-relative',\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-gap-2',\n\n // text\n 'tw-text-xs',\n 'tw-leading-5',\n 'tw-font-medium',\n 'tw-tracking-[1px]',\n 'tw-uppercase',\n\n // border\n 'tw-rounded-[var(--radius-lg,0.25rem)]',\n 'tw-border',\n 'tw-border-transparent',\n\n // styling\n 'tw-shadow-none',\n '[a]:tw-cursor-pointer', // explicitly set for anchor\n\n 'focus-visible:tw-outline',\n 'focus-visible:tw-outline-1',\n 'focus-visible:-tw-outline-offset-1',\n 'focus-visible:tw-outline-ring',\n 'focus-visible:tw-ring-4',\n 'focus-visible:tw-ring-ring/30',\n\n // disabled\n 'disabled:tw-opacity-40',\n 'disabled:tw-cursor-not-allowed',\n\n // anchor support\n '!tw-no-underline',\n 'aria-disabled:tw-opacity-40',\n 'aria-disabled:tw-cursor-not-allowed',\n\n '[&_svg]:tw-shrink-0',\n ],\n {\n defaultVariants: {\n size: 'medium',\n variant: 'primary',\n block: false,\n },\n variants: {\n block: {\n true: ['tw-w-full'],\n },\n variant: {\n primary: [\n 'tw-text-white',\n 'tw-bg-primary-500',\n\n 'focus:tw-text-white',\n 'hover:tw-text-white',\n 'hover:not-disabled:tw-bg-primary-600',\n 'active:not-disabled:tw-bg-primary-800',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-primary-500',\n ],\n secondary: [\n 'tw-text-white',\n 'tw-bg-secondary-500',\n\n 'focus:tw-text-white',\n 'hover:tw-text-white',\n 'hover:not-disabled:tw-bg-secondary-700',\n 'active:not-disabled:tw-bg-secondary-800',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-secondary-500',\n ],\n danger: [\n 'tw-text-white',\n 'tw-bg-error-500',\n\n 'focus:tw-text-white',\n 'hover:tw-text-white',\n 'hover:not-disabled:tw-bg-error-600',\n 'active:not-disabled:tw-bg-error-700',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-error-500',\n ],\n invisible: [\n 'tw-text-neutral-800',\n 'tw-bg-transparent',\n\n 'focus:tw-text-neutral-800',\n 'hover:not-disabled:tw-bg-neutral-100',\n 'hover:tw-text-neutral-800',\n 'active:not-disabled:tw-bg-neutral-150',\n\n // contrasting icon on hover/active\n '[&_svg]:tw-text-neutral-400',\n '[&_svg]:hover:not-disabled:tw-text-secondary-600',\n '[&_svg]:active:not-disabled:tw-text-secondary-600',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-transparent',\n ],\n outline: [\n 'tw-text-neutral-800',\n 'tw-bg-white',\n // border\n '!tw-border-neutral-200',\n 'hover:tw-text-neutral-800',\n 'focus:tw-text-neutral-800',\n 'hover:not-disabled:!tw-border-neutral-300',\n 'hover:not-disabled:tw-bg-neutral-100',\n 'active:not-disabled:tw-bg-neutral-200',\n\n // contrasting icon hover, same as invisible\n '[&_svg]:tw-text-neutral-400',\n '[&_svg]:not-disabled:hover:tw-text-secondary-600',\n '[&_svg]:active:not-disabled:tw-text-secondary-600',\n\n // anchor disabled override\n 'aria-disabled:!tw-bg-white',\n 'aria-disabled:!tw-border-neutral-200',\n ],\n\n inline: [\n 'tw-text-neutral-800',\n 'tw-bg-transparent',\n 'tw-rounded-full',\n\n '[&_svg]:tw-text-neutral-400',\n '[&_svg]:not-disabled:hover:tw-text-secondary-600',\n '[&_svg]:not-disabled:focus:tw-text-secondary-600',\n ],\n },\n size: {\n medium: [\n 'tw-max-h-10',\n 'tw-min-h-10',\n 'tw-px-4',\n 'tw-py-2.5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n ],\n small: [\n 'tw-max-h-8',\n 'tw-min-h-8',\n 'tw-px-4',\n 'tw-py-1.5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n ],\n large: [\n 'tw-max-h-12',\n 'tw-min-h-12',\n 'tw-px-4',\n 'tw-py-3.5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n ],\n\n 'icon-lg': ['tw-size-12', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-6'],\n icon: ['tw-size-10', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n 'icon-sm': ['tw-size-8', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n 'icon-xs': ['tw-size-6', 'tw-p-0', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n 'icon-2xs': [\n '!tw-inline-flex',\n 'tw-size-5',\n 'tw-max-h-5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-3',\n ],\n 'icon-3xs': ['tw-h-fit', 'tw-w-fit', '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4'],\n },\n },\n },\n);\n\nexport const argoVariants = cva(\n [\n 'tailwindcss-preflight',\n\n // layout\n 'tw-relative',\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-whitespace-nowrap',\n 'tw-gap-2',\n\n // border\n 'tw-border',\n 'tw-border-transparent',\n 'tw-rounded-[var(--radius-lg,0.25rem)]',\n\n // text\n 'tw-font-medium',\n 'tw-select-none',\n\n // focus visible\n '!tw-outline-none',\n 'focus-visible:tw-ring-2',\n\n // disabled\n 'disabled:tw-cursor-not-allowed',\n 'disabled:tw-opacity-50',\n 'active:tw-opacity-60',\n\n 'tw-transition-all',\n 'tw-bg-clip-padding',\n\n // anchor support\n '!tw-no-underline',\n 'aria-disabled:tw-cursor-not-allowed',\n 'aria-disabled:tw-opacity-50',\n\n // icon\n 'tw-shrink-0',\n '[&_svg]:tw-pointer-events-none',\n '[&_svg]:tw-shrink-0',\n \"[&_svg:not([class*='tw-size-'])]:tw-size-4\",\n ],\n {\n defaultVariants: {\n variant: 'primary',\n size: 'medium',\n },\n variants: {\n block: {\n true: ['tw-w-full'],\n },\n variant: {\n primary: [\n 'tw-bg-primary',\n 'tw-text-primary-foreground',\n '[a]:hover:tw-bg-primary/80',\n 'hover:not-disabled:tw-bg-primary/90',\n 'hover:tw-text-primary-foreground',\n 'focus:tw-text-primary-foreground',\n\n 'focus-visible:tw-border-primary',\n 'focus-visible:tw-ring-primary/50',\n ],\n secondary: [\n 'tw-bg-primary/10',\n 'tw-text-primary',\n 'hover:not-disabled:tw-bg-primary/20',\n\n 'focus-visible:tw-border-primary',\n 'focus-visible:tw-ring-primary/50',\n ],\n\n // should be called \"destructive\" by Figma\n danger: [\n 'tw-bg-destructive',\n 'tw-text-destructive-foreground',\n 'hover:tw-text-destructive-foreground',\n 'focus:tw-text-destructive-foreground',\n\n 'focus-visible:tw-border-destructive',\n 'focus-visible:tw-ring-destructive/20',\n ],\n outline: [\n '!tw-border-input',\n 'tw-bg-background',\n // Semantic base text color so the label/icon flips in dark mode\n // (matches `invisible`); previously unset → inherited a fixed dark color.\n 'tw-text-foreground',\n 'hover:not-disabled:tw-bg-accent',\n 'hover:not-disabled:tw-text-accent-foreground',\n 'hover:active:tw-bg-background',\n 'focus-visible:!tw-border-primary',\n 'focus-visible:tw-ring-primary/50',\n ],\n\n // should be called \"ghost\" by Figma\n invisible: [\n 'tw-bg-transparent',\n 'tw-text-foreground',\n 'hover:not-disabled:tw-bg-accent',\n 'hover:not-disabled:tw-text-accent-foreground',\n 'hover:not-disabled:tw-border-accent',\n\n 'focus-visible:tw-ring-primary/50',\n ],\n // should be called \"link\" by Figma\n inline: [\n 'tw-bg-transparent',\n 'tw-text-primary',\n 'hover:tw-underline',\n 'hover:active:tw-bg-transparent',\n 'focus-visible:tw-ring-primary/50',\n ],\n },\n size: {\n // should be called \"default\" by Figma\n medium: ['tw-max-h-9', 'tw-py-2', 'tw-px-4', 'tw-text-sm'],\n // should be called \"small\" by Figma\n small: ['tw-max-h-8', 'tw-py-2', 'tw-px-3', 'tw-text-xs'],\n // should be called \"large\" by Figma\n large: ['tw-max-h-10', 'tw-py-2.5', 'tw-px-6', 'tw-text-sm'],\n\n 'icon-lg': ['tw-size-10'],\n icon: ['tw-size-9'],\n 'icon-sm': ['tw-size-8'],\n // unsupported in ARGO, remove when old design is gone\n 'icon-xs': [],\n 'icon-2xs': [],\n 'icon-3xs': [],\n },\n },\n },\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Root, Slottable } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { Loader2 } from '../../icons';\nimport { cn } from '../../utils';\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { argoVariants, variants } from './styles';\n\n/**\n * Props for the `Button` component.\n *\n * Pass `variant` for primary/secondary/danger/outline/invisible looks, `size`\n * for height (including `icon-*` sizes when rendering icon-only). Icons are\n * composed as children — `<Button><Trash2 className=\"tw-size-4\" /> Delete</Button>`.\n */\ntype Props = {\n /** Replaces the leading content with a spinner and disables the button visually. The caller still controls `disabled`. */\n isLoading?: boolean;\n /** Render as a Radix `Slot` so the parent JSX (e.g. a `react-router` `<Link>`) becomes the button element. */\n asChild?: boolean;\n} & ComponentProps<'button'> &\n VariantProps<typeof variants>;\n\n/**\n * Primary action surface for the design system — covers all clickable controls except inline text links.\n *\n * **When to use:** any user-initiated action (submit, save, open modal, run job). Use `size=\"icon-*\"` with no\n * children for an icon-only button; there is no separate `IconButton` component.\n * **When NOT to use:** for inline text-link actions inside body copy use `ButtonInline`; for navigation that\n * opens a URL use `Link`; for \"primary action + dropdown of related actions\" use `SplitButton`.\n * **Composition:** wrap in `Tooltip` when icon-only or when disabled state needs an explanation; pair with\n * `Popconfirm` for destructive confirmations; pass through `Modal.Trigger` / `DropdownMenu.Trigger` via `asChild`.\n *\n * @see RECIPES.md#disabled-button-tooltip — for the disabled-button + tooltip pattern\n * @see RECIPES.md#confirm-dialog — for destructive-action confirmation\n */\nexport const Button = ({\n ref,\n children,\n disabled = false,\n className,\n type = 'button',\n isLoading = false,\n asChild = false,\n onClick,\n variant = 'primary',\n size = 'medium',\n block = false,\n ...buttonProps\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const isLegacy = useIsLegacyBrand();\n const renderArgo = !isLegacy;\n const Comp = asChild ? Root : 'button';\n const isIconOnly = String(size).startsWith('icon');\n const classNames = renderArgo\n ? argoVariants({ variant, size, block, className })\n : variants({ size, variant, block, className });\n\n const handleClick: ComponentProps<'button'>['onClick'] = (event) => {\n const isAnchor = event.currentTarget.tagName === 'A';\n\n // <a/> does not support disabled by default, and we cannot use pointer-events: none because cursor-not-allowed would not work.\n if (isAnchor && disabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Comp\n {...buttonProps}\n ref={ref}\n disabled={disabled}\n aria-disabled={disabled}\n data-variant={variant}\n // `size=\"icon\"` / `size=\"icon-*\"` flags the button as icon-only — needed\n // by `ButtonGroup space=\"block\"` which stretches non-icon children to\n // equal width.\n data-icon-only={isIconOnly}\n type={type}\n onClick={handleClick}\n className={cn(classNames)}\n >\n {isLoading && <Loader2 className=\"tw-size-4 tw-shrink-0 tw-animate-spin\" />}\n <Slottable>{isLoading && isIconOnly ? null : children}</Slottable>\n </Comp>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Root } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nconst buttonInlineVariants = cva(\n [\n 'tailwindcss-preflight',\n\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-gap-2',\n\n 'tw-underline-offset-2',\n\n 'disabled:tw-opacity-40',\n 'disabled:tw-cursor-not-allowed',\n 'disabled:tw-text-neutral-500',\n 'disabled:tw-no-underline',\n '[&_svg]:disabled:tw-text-neutral-400',\n\n // Default size for nested Lucide icons; callers can override on the icon.\n \"[&_svg.lucide:not([class*='tw-size-'])]:tw-size-4\",\n '[&_svg]:tw-shrink-0',\n ],\n {\n defaultVariants: {\n variant: 'link',\n color: 'link',\n },\n variants: {\n color: {\n link: ['tw-text-primary', 'hover:tw-text-primary/90', '[&_svg]:tw-text-primary'],\n dark: ['tw-text-neutral-800 [&_svg]:tw-text-neutral-400'],\n danger: ['tw-text-error-500 [&_svg]:tw-text-error-500'],\n muted: ['tw-text-muted-foreground [&_svg]:tw-text-muted-foreground'],\n custom: [],\n },\n variant: {\n link: ['tw-underline', 'hover:tw-no-underline'],\n 'link-reverse': ['tw-no-underline', '', 'hover:tw-underline'],\n custom: [],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'button'> &\n VariantProps<typeof buttonInlineVariants> & { asChild?: boolean };\n\nexport const ButtonInline = ({\n ref,\n children,\n className,\n variant,\n color,\n type = 'button',\n asChild = false,\n ...buttonProps\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const Comp = asChild ? Root : 'button';\n\n return (\n <Comp\n {...buttonProps}\n ref={ref}\n type={asChild ? undefined : type}\n className={buttonInlineVariants({ variant, color, className })}\n >\n {children}\n </Comp>\n );\n};\n","export * from './Button';\nexport * from './ButtonInline';\nexport { argoVariants } from './styles';\n","import { useState } from 'react';\nimport type { ComponentProps, ElementRef, MouseEventHandler, Ref } from 'react';\n\nimport { cn, copyToClipboard } from '../../utils';\nimport { type Props as TooltipProps, Tooltip } from '../Tooltip';\n\ntype Props = {\n tooltip?: TooltipProps['tooltip'];\n tooltipPlacement?: TooltipProps['placement'];\n tooltipVariant?: TooltipProps['variant'];\n asChild?: TooltipProps['triggerAsChild'];\n text?: string | (() => string);\n} & ComponentProps<'button'>;\n\nexport const Clipboard = ({\n ref,\n text: textProp,\n children,\n tooltip = 'Copy to Clipboard',\n tooltipPlacement = 'top',\n tooltipVariant: tooltipVariantProp = 'action',\n asChild = false,\n onClick,\n className,\n ...restButtonProps\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n const [state, setState] = useState<'ready' | 'copied' | 'error'>('ready');\n const text = typeof textProp === 'function' ? textProp() : textProp;\n\n const copy = async (text: string) => {\n try {\n // For the clipboard feature to work reliably, the window must be in focus for security reasons.\n // However, the button can be clicked without the window being focused.\n if (!document.hasFocus()) window.focus();\n\n await copyToClipboard(text);\n setState('copied');\n } catch {\n setState('error');\n }\n };\n\n const handleOnClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (text && state === 'ready') void copy(text);\n onClick?.(event);\n };\n\n const handleOnOpenChange: ComponentProps<typeof Tooltip.Root>['onOpenChange'] = (open) => {\n // Reset when the tooltip closes, allowing the user to leave the copy button.\n if (!open && state !== 'ready') setState('ready');\n setIsTooltipOpen(open);\n };\n\n const tooltipContent = (() => {\n if (!text) return 'Nothing to copy';\n if (state === 'error') return 'Failed to copy';\n if (state === 'copied') return 'Copied to Clipboard';\n return tooltip;\n })();\n\n const tooltipVariant: TooltipProps['variant'] =\n state === 'ready' && !!text ? tooltipVariantProp : 'action';\n\n return (\n <Tooltip.Root open={isTooltipOpen} onOpenChange={handleOnOpenChange}>\n <Tooltip.Trigger\n {...restButtonProps}\n asChild={asChild}\n keepOpenOnClick\n onClick={handleOnClick}\n className={cn('tw-cursor-pointer', className)}\n ref={ref}\n >\n {children ?? text}\n </Tooltip.Trigger>\n\n <Tooltip.Content\n keepOpenOnPointerDownOutside\n placement={tooltipPlacement}\n variant={tooltipVariant}\n >\n {tooltipContent}\n </Tooltip.Content>\n </Tooltip.Root>\n );\n};\n","export { Clipboard } from './Clipboard';\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { Clipboard } from '../../components/Clipboard';\nimport { Copy } from '../../icons';\n\ntype ClipboardProps = Pick<\n ComponentProps<typeof Clipboard>,\n 'text' | 'tooltip' | 'tooltipPlacement' | 'tooltipVariant'\n>;\n\ntype ButtonProps = Omit<ComponentProps<typeof Button>, 'disabled' | 'icon'>;\n\ntype Props = ClipboardProps & ButtonProps & { icon?: ReactNode };\n\nconst DEFAULT_ICON: ReactNode = <Copy />;\n\nexport const ClipboardButton = ({\n // clipboard props\n text,\n tooltip,\n tooltipPlacement,\n tooltipVariant,\n\n // button props\n icon = DEFAULT_ICON,\n variant = 'outline',\n children,\n ...rest\n}: Props) => (\n <Clipboard\n asChild\n tooltip={tooltip}\n tooltipPlacement={tooltipPlacement}\n tooltipVariant={tooltipVariant}\n text={text}\n >\n <Button {...rest} variant={variant} disabled={!text}>\n {icon}\n {children}\n </Button>\n </Clipboard>\n);\n","export { ClipboardButton } from './ClipboardButton';\nexport { ClipboardInline } from './ClipboardInline';\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport DOMPurify from 'dompurify';\n\nimport { ClipboardButton } from '../../blocks/ClipboardButton';\nimport { Maximize2, Minimize2 } from '../../icons';\nimport { cn } from '../../utils';\nimport { Button } from '../Button';\nimport { Tooltip } from '../Tooltip';\n\nconst MIN_SCALE = 0.5;\nconst MAX_SCALE = 3;\nconst ZOOM_STEP = 0.1;\n\ntype Props = {\n /** Raw SVG markup. Sanitized internally with DOMPurify (SVG profile) before rendering, so it is\n * safe even when it originates from user/LLM-controlled content. Non-SVG HTML is stripped. */\n html: string;\n copyText?: string;\n className?: string;\n};\n\nexport const ZoomableSvg = ({ html, copyText, className }: Props) => {\n const safeHtml = useMemo(\n () => DOMPurify.sanitize(html, { USE_PROFILES: { svg: true, svgFilters: true } }),\n [html],\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [scale, setScale] = useState(1);\n const [translate, setTranslate] = useState({ x: 0, y: 0 });\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n useEffect(() => {\n if (!isFullscreen) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n setIsFullscreen(false);\n }\n };\n document.addEventListener('keydown', onKeyDown, { capture: true });\n return () => document.removeEventListener('keydown', onKeyDown, { capture: true });\n }, [isFullscreen]);\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startTx: number;\n startTy: number;\n } | null>(null);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const onWheel = (e: WheelEvent) => {\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n const delta = e.deltaY > 0 ? -ZOOM_STEP : ZOOM_STEP;\n setScale((s) => Math.min(MAX_SCALE, Math.max(MIN_SCALE, s + delta)));\n };\n\n el.addEventListener('wheel', onWheel, { passive: false });\n return () => el.removeEventListener('wheel', onWheel);\n }, []);\n\n const didDragRef = useRef(false);\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n didDragRef.current = false;\n dragRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startTx: translate.x,\n startTy: translate.y,\n };\n },\n [translate],\n );\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (!dragRef.current) return;\n didDragRef.current = true;\n setTranslate({\n x: dragRef.current.startTx + e.clientX - dragRef.current.startX,\n y: dragRef.current.startTy + e.clientY - dragRef.current.startY,\n });\n }, []);\n\n const handleMouseUp = useCallback(() => {\n dragRef.current = null;\n }, []);\n\n const handleReset = useCallback(() => {\n setScale(1);\n setTranslate({ x: 0, y: 0 });\n }, []);\n\n const isZoomed = Math.abs(scale - 1) > 0.001 || translate.x !== 0 || translate.y !== 0;\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (didDragRef.current) {\n e.stopPropagation();\n }\n }, []);\n\n const stopPropagation = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n }, []);\n\n const diagramContent = (\n <div\n role=\"presentation\"\n className={cn('tw-group/zoom tw-relative', isFullscreen && 'tw-h-full')}\n onClick={handleClick}\n >\n <div\n role=\"presentation\"\n ref={containerRef}\n className={cn(\n 'tw-overflow-hidden tw-cursor-grab active:tw-cursor-grabbing tw-p-3',\n isFullscreen && 'tw-h-full',\n )}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n >\n <div\n className={cn(\n 'tw-flex tw-justify-center tw-origin-center',\n isFullscreen && 'tw-h-full [&>svg]:tw-h-full',\n )}\n style={{ transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` }}\n dangerouslySetInnerHTML={{ __html: safeHtml }}\n />\n </div>\n <div\n role=\"presentation\"\n className=\"tw-absolute tw-right-1 tw-top-1 tw-flex tw-gap-1 tw-opacity-0 tw-transition-opacity group-hover/zoom:tw-opacity-100\"\n onClick={stopPropagation}\n >\n {isZoomed && (\n <Tooltip tooltip=\"Reset zoom\" placement=\"top\" triggerAsChild>\n <Button size=\"small\" variant=\"outline\" onClick={handleReset}>\n Reset\n </Button>\n </Tooltip>\n )}\n {copyText && (\n <ClipboardButton text={copyText} tooltip=\"Copy code\" size=\"icon-sm\" variant=\"outline\" />\n )}\n <Tooltip\n tooltip={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n placement=\"top\"\n triggerAsChild\n >\n <Button\n size=\"icon-sm\"\n variant=\"outline\"\n aria-label={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}\n onClick={() => setIsFullscreen((f) => !f)}\n >\n {isFullscreen ? (\n <Minimize2 className=\"tw-size-4\" />\n ) : (\n <Maximize2 className=\"tw-size-4\" />\n )}\n </Button>\n </Tooltip>\n </div>\n </div>\n );\n\n if (isFullscreen) {\n return (\n <div\n role=\"presentation\"\n className=\"tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4\"\n onClick={stopPropagation}\n >\n {diagramContent}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n 'tw-overflow-hidden tw-rounded-md tw-border tw-border-border tw-bg-muted',\n className,\n )}\n >\n {diagramContent}\n </div>\n );\n};\n","export { ZoomableSvg } from './ZoomableSvg';\n","import { useEffect, useId, useRef, useState } from 'react';\nimport { renderMermaidSVG } from 'beautiful-mermaid';\nimport type mermaid from 'mermaid';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { Skeleton } from '../../components/Skeleton/Skeleton';\nimport { ZoomableSvg } from '../../components/ZoomableSvg';\nimport { cn } from '../../utils';\n\ntype MermaidModule = { default: typeof mermaid };\n\nconst PRIMARY_FALLBACK_CHANNELS = '31 143 255';\n\nconst resolvePrimary = (): string => {\n const channels =\n typeof document === 'undefined'\n ? PRIMARY_FALLBACK_CHANNELS\n : getComputedStyle(document.documentElement).getPropertyValue('--color-primary').trim() ||\n PRIMARY_FALLBACK_CHANNELS;\n return `rgb(${channels})`;\n};\n\nlet mermaidPromise: Promise<MermaidModule> | null = null;\n\nconst getMermaid = (): Promise<MermaidModule> => {\n if (!mermaidPromise) {\n mermaidPromise = import('mermaid')\n .then((m) => {\n m.default.initialize({\n startOnLoad: false,\n securityLevel: 'strict',\n theme: 'base',\n themeVariables: {\n primaryColor: colors.secondary[100],\n primaryTextColor: colors.neutral[800],\n primaryBorderColor: colors.secondary[700],\n secondaryColor: colors.white,\n secondaryTextColor: colors.neutral[800],\n secondaryBorderColor: colors.neutral[150],\n tertiaryColor: colors.warning[100],\n tertiaryTextColor: colors.neutral[800],\n tertiaryBorderColor: colors.warning[500],\n lineColor: colors.neutral[300],\n textColor: colors.neutral[800],\n mainBkg: colors.secondary[100],\n nodeBorder: colors.secondary[700],\n clusterBkg: colors.white,\n clusterBorder: colors.neutral[150],\n titleColor: colors.neutral[800],\n edgeLabelBackground: colors.white,\n nodeTextColor: colors.neutral[800],\n actorBorder: colors.secondary[700],\n actorBkg: colors.secondary[100],\n actorTextColor: colors.neutral[800],\n actorLineColor: colors.neutral[300],\n signalColor: colors.neutral[800],\n signalTextColor: colors.neutral[800],\n labelBoxBkgColor: colors.secondary[100],\n labelBoxBorderColor: colors.secondary[700],\n labelTextColor: colors.neutral[800],\n loopTextColor: colors.neutral[800],\n noteBorderColor: colors.warning[500],\n noteBkgColor: colors.warning[100],\n noteTextColor: colors.neutral[800],\n sectionBkgColor: colors.secondary[100],\n altSectionBkgColor: colors.white,\n sectionBkgColor2: colors.neutral[100],\n taskBorderColor: colors.secondary[700],\n taskBkgColor: colors.secondary[100],\n taskTextColor: colors.neutral[800],\n taskTextDarkColor: colors.neutral[800],\n taskTextLightColor: colors.neutral[800],\n activeTaskBorderColor: resolvePrimary(),\n activeTaskBkgColor: colors.secondary[200],\n doneTaskBorderColor: colors.primary[600],\n doneTaskBkgColor: colors.primary[100],\n critBorderColor: colors.error[500],\n critBkgColor: colors.error[100],\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: '14px',\n },\n });\n return m;\n })\n .catch((err) => {\n mermaidPromise = null;\n throw err;\n });\n }\n return mermaidPromise;\n};\n\nconst stripFontImports = (svg: string): string =>\n svg.replace(/@import\\s+url\\([^)]*fonts\\.googleapis\\.com[^)]*\\);?\\s*/g, '');\n\nconst tryFastRender = (code: string): string | null => {\n try {\n return stripFontImports(\n renderMermaidSVG(code, {\n bg: colors.white,\n fg: colors.neutral[800],\n transparent: true,\n font: 'Inter, system-ui, sans-serif',\n }),\n );\n } catch {\n return null;\n }\n};\n\nconst makeResponsive = (svgString: string): string => {\n const viewBoxMatch = svgString.match(/viewBox=\"[^\"]*\\s([\\d.]+)\\s[\\d.]+\"/);\n const vbWidth = viewBoxMatch ? Math.round(Number(viewBoxMatch[1])) : undefined;\n\n let result = svgString\n .replace(/(<svg[^>]*?)\\s+width=\"[^\"]*\"/i, '$1 width=\"100%\"')\n .replace(/(<svg[^>]*?)\\s+height=\"[^\"]*\"/i, '$1');\n\n if (!vbWidth) return result;\n\n const hasStyle = /(<svg[^>]*?)\\s+style=\"([^\"]*)\"/i.test(result);\n if (hasStyle) {\n result = result.replace(/(<svg[^>]*?)\\s+style=\"([^\"]*)\"/i, (_m, pre, styles) => {\n const cleaned = styles.replace(/max-width:\\s*[^;\"]*;?\\s*/g, '').trim();\n const combined = [cleaned, `max-width: ${vbWidth}px`].filter(Boolean).join('; ');\n return `${pre} style=\"${combined}\"`;\n });\n } else {\n result = result.replace(/<svg/, `<svg style=\"max-width: ${vbWidth}px\"`);\n }\n\n return result;\n};\n\nconst RENDER_DEBOUNCE_MS = 300;\n\n// Module-level SVG cache — persists across component remounts (e.g. tab switches\n// that cause React to remount the tree). Same code always produces the same SVG.\nconst svgCache = new Map<string, string>();\n\n// Resolve an SVG synchronously: cache hit first, otherwise a fast synchronous\n// render. Caches the result and returns it, or null when neither is available\n// (the caller then falls back to the async mermaid render).\nconst resolveSyncSvg = (code: string): string | null => {\n const cached = svgCache.get(code);\n if (cached) return cached;\n const fast = tryFastRender(code);\n if (fast) svgCache.set(code, fast);\n return fast;\n};\n\ntype Props = {\n /** Mermaid diagram source code. Supports flowchart, sequence, class, state, ER,\n * pie, gantt, and mindmap. Gantt `dateFormat HH:mm` (time-only) is not supported\n * by mermaid's dayjs parser — use `dateFormat YYYY-MM-DD HH:mm` with `axisFormat %H:%M` instead. */\n code: string;\n};\n\nexport const MermaidDiagram = ({ code }: Props) => {\n const id = useId();\n const [svg, setSvg] = useState<string | null>(() => resolveSyncSvg(code));\n const [renderFailed, setRenderFailed] = useState(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const renderIdRef = useRef(0);\n\n // Synchronously reset stale state when code changes to avoid one-frame flash\n const [prevCode, setPrevCode] = useState(code);\n if (code !== prevCode) {\n setPrevCode(code);\n setSvg(resolveSyncSvg(code));\n setRenderFailed(false);\n }\n\n useEffect(() => {\n // Synchronous results (cache hit / fast render) are already applied and\n // cached by the useState initializer (mount) and the render-phase reset\n // (code change). Only the async fallback needs an effect.\n if (svgCache.has(code)) return;\n\n const currentRenderId = ++renderIdRef.current;\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n debounceRef.current = setTimeout(() => {\n getMermaid()\n .then(async (mermaidModule) => {\n if (renderIdRef.current !== currentRenderId) return;\n const rendererId = `mermaid-${id.replaceAll(':', '')}`;\n const container = document.createElement('div');\n container.style.visibility = 'hidden';\n container.style.position = 'absolute';\n container.style.top = '-9999px';\n container.style.width = '900px';\n document.body.appendChild(container);\n try {\n const result = await mermaidModule.default.render(rendererId, code, container);\n if (renderIdRef.current === currentRenderId && result) {\n svgCache.set(code, result.svg);\n setSvg(result.svg);\n setRenderFailed(false);\n }\n } finally {\n container.remove();\n }\n })\n .catch((err) => {\n if (renderIdRef.current === currentRenderId) {\n console.error('[MermaidDiagram] fallback failed:', err);\n setSvg(null);\n setRenderFailed(true);\n }\n });\n }, RENDER_DEBOUNCE_MS);\n\n const timer = debounceRef.current;\n const renderId = renderIdRef;\n return () => {\n renderId.current++;\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [code, id]);\n\n const processedSvg = svg ? makeResponsive(svg) : null;\n\n if (renderFailed) {\n return (\n <pre\n className={cn(\n 'tw-my-3 tw-overflow-auto tw-whitespace-pre-wrap tw-break-all',\n 'tw-py-3 tw-px-4',\n 'tw-bg-neutral-50',\n 'tw-rounded-md tw-text-neutral-400',\n 'tw-text-sm tw-font-mono',\n )}\n >\n <code>{code}</code>\n </pre>\n );\n }\n\n if (processedSvg) {\n return (\n <ZoomableSvg\n key={code}\n html={processedSvg}\n copyText={`\\`\\`\\`mermaid\\n${code}\\n\\`\\`\\``}\n className=\"tw-my-3\"\n />\n );\n }\n\n return (\n <div className=\"tw-my-3 tw-overflow-hidden tw-rounded-md tw-border tw-border-neutral-150 tw-bg-neutral-50 tw-p-6\">\n <Skeleton className=\"tw-h-40\" />\n </div>\n );\n};\n","import { useRef, useState } from 'react';\nimport type { FocusEvent, ReactNode } from 'react';\nimport { CodeNode } from '@lexical/code';\nimport { LinkNode } from '@lexical/link';\nimport { ListItemNode, ListNode } from '@lexical/list';\nimport { $convertFromMarkdownString } from '@lexical/markdown';\nimport { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin';\nimport { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin';\nimport { ClickableLinkPlugin } from '@lexical/react/LexicalClickableLinkPlugin';\nimport type { InitialConfigType } from '@lexical/react/LexicalComposer';\nimport { LexicalComposer } from '@lexical/react/LexicalComposer';\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable';\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';\nimport { HorizontalRuleNode } from '@lexical/react/LexicalHorizontalRuleNode';\nimport { HorizontalRulePlugin } from '@lexical/react/LexicalHorizontalRulePlugin';\nimport { LinkPlugin } from '@lexical/react/LexicalLinkPlugin';\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin';\nimport { MarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin';\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';\nimport { TabIndentationPlugin } from '@lexical/react/LexicalTabIndentationPlugin';\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text';\n\nimport { cn } from '../../utils';\n\nimport { ImageNode } from './nodes/ImageNode';\nimport { MermaidNode } from './nodes/MermaidNode';\nimport { ImagePastePlugin } from './plugins/ImagePastePlugin';\nimport { KeyboardPlugin } from './plugins/KeyboardPlugin';\nimport { MarkdownSyncPlugin } from './plugins/MarkdownSyncPlugin';\nimport { ToolbarPlugin } from './plugins/ToolbarPlugin';\nimport { ImageRendererProvider } from './context';\nimport { editorTheme } from './theme';\nimport { CUSTOM_TRANSFORMERS, preprocessMarkdown, SINGLE_LINE_TRANSFORMERS } from './transformers';\n\nexport type MarkdownEditorProps = {\n /** Markdown string (controlled) */\n value: string;\n onChange?: (markdown: string) => void;\n /**\n * Renders content but never accepts input. Use for permanent view-only contexts\n * (e.g. a current user lacks edit permission). Toolbar is hidden.\n */\n readOnly?: boolean;\n /**\n * Temporarily blocks input but signals intent to re-enable\n * (e.g. while a save is in flight). Functionally identical to `readOnly` today.\n */\n disabled?: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n /** Invoked on Cmd/Ctrl+Enter — typically used to commit a form. */\n onSave?: () => void;\n /**\n * Invoked on Escape in inline-edit mode (`singleLine || saveOnBlur`). Per the\n * inline-editable-text pattern spec, Esc reverts the in-progress edit — callers\n * reset `value` to the last-committed state inside this handler.\n */\n onCancel?: () => void;\n /**\n * Async image upload. Resolved URL is embedded as the image src\n * (`![alt](url)` in the underlying markdown).\n */\n onImageUpload?: (file: File) => Promise<{ url: string }>;\n className?: string;\n imageRenderer?: (props: { src: string; alt: string }) => ReactNode;\n showToolbar?: boolean;\n /**\n * Strips the prose typography wrapper, removes the min-height, and tightens padding so\n * the editor visually blends with surrounding text. Use for inline / Linear-style edit\n * affordances inside headings, list rows, or table cells. Pair with `className` to set\n * the caller's typography.\n */\n compact?: boolean;\n /**\n * Calls `onSave` when focus leaves the editor (and is not moved into the toolbar).\n * `onChange` already keeps the caller's value in sync — `onSave` is the \"commit\" signal.\n */\n saveOnBlur?: boolean;\n /**\n * Disables block-level markdown (lists, headings, code blocks, HR) and makes a plain\n * Enter press trigger `onSave` and blur the editor. Shift+Enter still inserts a soft\n * line break. Use for editable titles.\n */\n singleLine?: boolean;\n /**\n * Clamps content to 2 lines (truncating with an ellipsis) in the display (not-focused)\n * state; focus expands the editor to full height (no clamp). `line-clamp` is self-gating,\n * so short/empty content renders fully with no truncation. Per the inline-editable-text\n * pattern spec for description-style slots.\n */\n clampDisplay?: boolean;\n /**\n * Minimum visible height in lines. `1` renders as a single line that grows with\n * content (Linear/Slack/GitHub-PR-comment pattern); `0` removes the floor entirely.\n * Omit to keep the default ~4-line floor. Ignored in `compact` mode (which has no floor).\n */\n minRows?: number;\n};\n\nconst EDITOR_NODES = [\n ImageNode,\n MermaidNode,\n HeadingNode,\n QuoteNode,\n ListNode,\n ListItemNode,\n CodeNode,\n LinkNode,\n HorizontalRuleNode,\n];\n\nexport const MarkdownEditor = ({\n value,\n onChange,\n readOnly = false,\n placeholder,\n autoFocus = false,\n disabled = false,\n onSave,\n onCancel,\n onImageUpload,\n className,\n imageRenderer,\n showToolbar = false,\n compact = false,\n saveOnBlur = false,\n singleLine = false,\n clampDisplay = false,\n minRows,\n}: MarkdownEditorProps) => {\n const editable = !readOnly && !disabled;\n const transformers = singleLine ? SINGLE_LINE_TRANSFORMERS : CUSTOM_TRANSFORMERS;\n const useDefaultMinHeight = !compact && minRows === undefined;\n const customMinHeight =\n !compact && minRows !== undefined ? { minHeight: `${minRows * 1.75}em` } : undefined;\n\n // Lexical reads editorState only on first render; later prop changes are applied by MarkdownSyncPlugin.\n const [initialConfig] = useState<InitialConfigType>(() => ({\n namespace: 'MarkdownEditor',\n theme: editorTheme,\n nodes: EDITOR_NODES,\n onError: (error: Error) => {\n console.error('[MarkdownEditor] uncaught editor error', error);\n },\n editable,\n editorState: () => {\n $convertFromMarkdownString(preprocessMarkdown(value), transformers);\n },\n }));\n\n // Set to `true` by KeyboardPlugin before it programmatically blurs on Escape so the\n // blur handler can skip its `onSave` — otherwise blur-after-cancel would commit the\n // value we just reverted. Reset on read inside handleBlur.\n const skipBlurSaveRef = useRef(false);\n\n const handleBlur =\n saveOnBlur && onSave\n ? (event: FocusEvent<HTMLDivElement>) => {\n if (skipBlurSaveRef.current) {\n skipBlurSaveRef.current = false;\n return;\n }\n // Only fire when focus leaves the editor wrapper entirely (not when moving into the toolbar).\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n onSave();\n }\n }\n : undefined;\n\n return (\n <LexicalComposer initialConfig={initialConfig}>\n <ImageRendererProvider value={imageRenderer ?? null}>\n <div\n className={cn(\n !compact && 'tw-prose',\n // Compact mode drops `tw-prose`, so Lexical's <p> wrappers fall back to the browser\n // default `margin: 1em 0` — visually huge at heading sizes. Zero them, and use the\n // adjacent-sibling selector for paragraph spacing so single-paragraph blocks (titles,\n // short descriptions) stay tight while multi-paragraph blocks still breathe.\n compact && '[&_p]:tw-m-0 [&_p+p]:tw-mt-2',\n // Display-state clamp: 2 lines, dropped in focus-within so editing expands to full\n // height. line-clamp is self-gating (no effect below 3 lines), so short/empty content\n // renders clean; a CSS fade can't gate on overflow without JS, so it's omitted.\n clampDisplay && '[&:not(:focus-within)]:tw-line-clamp-2',\n className,\n )}\n onBlur={handleBlur}\n >\n {showToolbar && editable && <ToolbarPlugin />}\n <div\n className={cn(\n 'tw-relative tw-rounded-md tw-transition-colors',\n // In compact mode the padding lets the hover bg / focus ring extend past the text,\n // but a matching negative margin shifts the wrapper outward so the text itself stays\n // aligned with the parent's content edge (i.e. with where static text would render).\n compact ? 'tw-px-1.5 tw-py-0.5 -tw-mx-1.5 -tw-my-0.5' : 'tw-p-2',\n editable &&\n 'tw-cursor-text hover:tw-bg-muted focus-within:tw-ring-2 focus-within:tw-ring-primary/40',\n )}\n >\n <RichTextPlugin\n contentEditable={\n <ContentEditable\n className={cn('tw-outline-none', useDefaultMinHeight && 'tw-min-h-[100px]')}\n style={customMinHeight}\n aria-placeholder={placeholder ?? ''}\n placeholder={\n placeholder ? (\n <div\n className={cn(\n 'tw-pointer-events-none tw-absolute tw-select-none tw-text-muted-foreground',\n compact\n ? 'tw-left-1.5 tw-top-0.5'\n : 'tw-left-2 tw-top-[calc(0.5rem+0.35em)]',\n )}\n >\n {placeholder}\n </div>\n ) : (\n <div />\n )\n }\n />\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n </div>\n <HistoryPlugin />\n <LinkPlugin />\n <ClickableLinkPlugin newTab />\n {!singleLine && <ListPlugin />}\n {!singleLine && <CheckListPlugin />}\n {!singleLine && <HorizontalRulePlugin />}\n <TabIndentationPlugin />\n <MarkdownShortcutPlugin transformers={transformers} />\n <MarkdownSyncPlugin\n value={value}\n editable={editable}\n onChange={onChange}\n transformers={transformers}\n singleLine={singleLine}\n />\n <ImagePastePlugin onImageUpload={onImageUpload} />\n <KeyboardPlugin\n onSave={onSave}\n onCancel={onCancel}\n singleLine={singleLine}\n blurOnEscape={singleLine || saveOnBlur}\n skipBlurSaveRef={skipBlurSaveRef}\n />\n {autoFocus && <AutoFocusPlugin />}\n </div>\n </ImageRendererProvider>\n </LexicalComposer>\n );\n};\n","import { createContext, use } from 'react';\nimport type { ReactNode } from 'react';\n\ntype ImageRenderer = (props: { src: string; alt: string }) => ReactNode;\n\nconst ImageRendererContext = createContext<ImageRenderer | null>(null);\n\nexport const ImageRendererProvider = ImageRendererContext;\n\nexport const useImageRenderer = (): ImageRenderer | null => use(ImageRendererContext);\n","import { useImageRenderer } from '../context';\n\nconst isPlaceholder = (src: string) => src.startsWith('upload-placeholder-');\n\nexport const ImageNodeComponent = ({ src, alt }: { src: string; alt: string }) => {\n const renderer = useImageRenderer();\n\n if (isPlaceholder(src)) {\n return (\n <span className=\"tw-inline-flex tw-items-center tw-gap-1 tw-rounded tw-bg-neutral-100 tw-px-2 tw-py-1 tw-text-xs tw-text-neutral-400\">\n Uploading image…\n </span>\n );\n }\n\n if (renderer) return <>{renderer({ src, alt })}</>;\n return <img src={src} alt={alt} />;\n};\n","/* eslint-disable react/only-export-components -- Lexical convention: $create/$is helpers co-locate with node */\nimport type { ReactNode } from 'react';\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n SerializedLexicalNode,\n Spread,\n} from 'lexical';\nimport { DecoratorNode } from 'lexical';\n\nimport { ImageNodeComponent } from './ImageNodeComponent';\n\ntype SerializedImageNode = Spread<{ src: string; altText: string }, SerializedLexicalNode>;\n\nexport class ImageNode extends DecoratorNode<ReactNode> {\n __src: string;\n __altText: string;\n\n static override getType(): string {\n return 'image';\n }\n\n static override clone(node: ImageNode): ImageNode {\n return new ImageNode(node.__src, node.__altText, node.__key);\n }\n\n constructor(src: string, altText: string, key?: NodeKey) {\n super(key);\n this.__src = src;\n this.__altText = altText;\n }\n\n getSrc(): string {\n return this.__src;\n }\n\n getAlt(): string {\n return this.__altText;\n }\n\n setSrc(src: string): void {\n const writable = this.getWritable();\n writable.__src = src;\n }\n\n setAlt(altText: string): void {\n const writable = this.getWritable();\n writable.__altText = altText;\n }\n\n override createDOM(config: EditorConfig): HTMLElement {\n const span = document.createElement('span');\n const className = config.theme.image;\n if (typeof className === 'string') {\n span.className = className;\n }\n return span;\n }\n\n override updateDOM(): boolean {\n return false;\n }\n\n override decorate(): ReactNode {\n return <ImageNodeComponent src={this.__src} alt={this.__altText} />;\n }\n\n override isInline(): boolean {\n return true;\n }\n\n static override importJSON(serializedNode: SerializedImageNode): ImageNode {\n return $createImageNode(serializedNode.src, serializedNode.altText);\n }\n\n override exportJSON(): SerializedImageNode {\n return {\n type: 'image',\n version: 1,\n src: this.__src,\n altText: this.__altText,\n };\n }\n\n override exportDOM(): DOMExportOutput {\n const element = document.createElement('img');\n element.setAttribute('src', this.__src);\n element.setAttribute('alt', this.__altText);\n return { element };\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n img: () => ({\n conversion: (domNode: HTMLElement) => {\n const src = domNode.getAttribute('src') || '';\n const alt = domNode.getAttribute('alt') || '';\n return { node: $createImageNode(src, alt) };\n },\n priority: 0,\n }),\n };\n }\n}\n\nexport const $createImageNode = (src: string, altText: string): ImageNode => {\n return new ImageNode(src, altText);\n};\n\nexport const $isImageNode = (node: LexicalNode | null | undefined): node is ImageNode => {\n return node instanceof ImageNode;\n};\n","import { lazy, Suspense } from 'react';\n\nimport { Skeleton } from '../../../components/Skeleton/Skeleton';\n\nconst MermaidDiagram = lazy(() =>\n import('../../../blocks/MermaidDiagram/MermaidDiagram').then(\n (m) => ({ default: m.MermaidDiagram }),\n (error: unknown) => {\n // Falling back to raw code on chunk-load failure (typically a stale tab after deploy).\n // Logging so we don't silently swap implementations.\n console.error('[MarkdownEditor] failed to load MermaidDiagram chunk', error);\n return {\n default: ({ code }: { code: string }) => (\n <pre>\n <code>{code}</code>\n </pre>\n ),\n };\n },\n ),\n);\n\nexport const MermaidNodeComponent = ({ code }: { code: string }) => {\n return (\n <Suspense\n fallback={\n <div className=\"tw-my-3 tw-overflow-hidden tw-rounded-card tw-border tw-border-neutral-150 tw-bg-neutral-50 tw-p-6\">\n <Skeleton className=\"tw-h-40\" />\n </div>\n }\n >\n <MermaidDiagram code={code} />\n </Suspense>\n );\n};\n","/* eslint-disable react/only-export-components -- Lexical convention: $create/$is helpers co-locate with node */\nimport type { ReactNode } from 'react';\nimport type { LexicalNode, NodeKey, SerializedLexicalNode, Spread } from 'lexical';\nimport { DecoratorNode } from 'lexical';\n\nimport { MermaidNodeComponent } from './MermaidNodeComponent';\n\ntype SerializedMermaidNode = Spread<{ code: string }, SerializedLexicalNode>;\n\nexport class MermaidNode extends DecoratorNode<ReactNode> {\n __code: string;\n\n static override getType(): string {\n return 'mermaid';\n }\n\n static override clone(node: MermaidNode): MermaidNode {\n return new MermaidNode(node.__code, node.__key);\n }\n\n constructor(code: string, key?: NodeKey) {\n super(key);\n this.__code = code;\n }\n\n getCode(): string {\n return this.__code;\n }\n\n setCode(code: string): void {\n const writable = this.getWritable();\n writable.__code = code;\n }\n\n override createDOM(): HTMLElement {\n const div = document.createElement('div');\n div.setAttribute('data-lexical-mermaid', 'true');\n return div;\n }\n\n override updateDOM(): boolean {\n return false;\n }\n\n override decorate(): ReactNode {\n return <MermaidNodeComponent code={this.__code} />;\n }\n\n override isInline(): boolean {\n return false;\n }\n\n static override importJSON(serializedNode: SerializedMermaidNode): MermaidNode {\n return $createMermaidNode(serializedNode.code);\n }\n\n override exportJSON(): SerializedMermaidNode {\n return {\n type: 'mermaid',\n version: 1,\n code: this.__code,\n };\n }\n}\n\nexport const $createMermaidNode = (code: string): MermaidNode => {\n return new MermaidNode(code);\n};\n\nexport const $isMermaidNode = (node: LexicalNode | null | undefined): node is MermaidNode => {\n return node instanceof MermaidNode;\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport { type ExternalToast, toast as sonnerToast } from 'sonner';\n\nimport { cn } from '../../utils';\n\nimport { ToastRoot } from './ToastRoot';\n\ntype ToastProps = ComponentProps<typeof ToastRoot>;\ntype Title = ToastProps['title'] | ((opts: { dismiss: () => void }) => ReactNode);\n\nexport type ToastOptions = { id?: string | number; title: Title } & Omit<\n ToastProps,\n 'id' | 'title'\n> &\n Pick<\n ExternalToast,\n 'onAutoClose' | 'onDismiss' | 'testId' | 'toasterId' | 'dismissible' | 'position'\n >;\ntype DerivedToastOptions = Omit<ToastOptions, 'title' | 'variant'>;\n\nexport const toast = ({\n onAutoClose,\n onDismiss,\n testId,\n toasterId,\n dismissible = true,\n position,\n title: titleProp,\n ...toast\n}: ToastOptions) => {\n const duration = (() => {\n if (typeof toast.duration === 'number') return toast.duration;\n if (toast.variant === 'error' || toast.variant === 'warning') return Infinity;\n return toast.duration ?? 5000;\n })();\n\n const renderCustomToast: Parameters<typeof sonnerToast.custom>[0] = (id) => {\n const title =\n typeof titleProp === 'function'\n ? titleProp({ dismiss: () => sonnerToast.dismiss(id) })\n : titleProp;\n\n return <ToastRoot {...toast} id={id} title={title} duration={duration} />;\n };\n\n return sonnerToast.custom(renderCustomToast, {\n // toast generated by sonner will always have an id, but we want to allow users to specify their own id if they want to\n // can not pass undefined, as it will break dismiss\n ...(toast.id != null ? { id: toast.id } : {}),\n unstyled: true,\n position,\n onAutoClose,\n onDismiss,\n testId,\n toasterId,\n dismissible,\n duration,\n // override defult focus-visible styles to match our design\n className: cn('tw-rounded-lg', 'focus-visible:!tw-ring-4', 'focus-visible:!tw-ring-primary/50'),\n });\n};\n\ntoast.success = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'success',\n });\n\ntoast.error = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'error',\n duration: options?.duration ?? Infinity,\n });\n\ntoast.warning = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'warning',\n duration: options?.duration ?? Infinity,\n });\n\ntoast.info = (title: Title, options?: DerivedToastOptions) =>\n toast({\n ...options,\n title,\n variant: 'info',\n });\n\ntoast.dismiss = (toastId?: ToastOptions['id']) => sonnerToast.dismiss(toastId);\ntoast.dismissAll = () => sonnerToast.dismiss();\n","import type { MouseEventHandler, ReactNode } from 'react';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\nimport { type Action, toast as sonnerToast } from 'sonner';\n\nimport { AlertCircle, AlertTriangle, CircleCheck, Info, Loader2 } from '../../icons';\nimport { cn } from '../../utils';\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { ToastAction } from './ToastAction';\nimport { ToastDescription } from './ToastDescription';\nimport { ToastDismiss } from './ToastDismiss';\nimport { ToastDuration } from './ToastDuration';\nimport { ToastTitle } from './ToastTitle';\n\nconst variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-group/toast',\n 'tw-relative',\n\n // layout\n 'tw-grid',\n 'tw-grid-cols-[0_1fr_auto_auto]',\n 'tw-items-start',\n 'has-[[data-slot=toast-description]]:tw-grid-rows-[auto_auto]',\n 'has-[[data-slot=toast-icon]]:tw-grid-cols-[auto_1fr_auto_auto]',\n '[&_[data-slot=toast-icon]]:tw-mr-2',\n '[&_[data-slot=toast-title]]:tw-mr-2.5',\n '[&_[data-slot=toast-description]]:tw-mr-2.5',\n '[&_[data-slot=toast-action]]:tw-mr-2',\n '[&_[data-slot=toast-description]]:tw-col-end-3',\n 'tw-gap-y-0',\n\n // styles\n 'tw-p-4',\n 'tw-rounded-lg',\n 'tw-shadow-md',\n ],\n {\n defaultVariants: {\n variant: 'info',\n },\n variants: {\n variant: {\n default: 'tw-border tw-border-border tw-bg-popover',\n error: 'tw-bg-error-550',\n info: 'tw-bg-blue-600',\n success: 'tw-bg-green-700',\n warning: 'tw-bg-warning-550',\n },\n },\n },\n);\n\ntype Variants = VariantProps<typeof variants>;\ntype Variant = NonNullable<Variants['variant']>;\ntype VariantIcon = Exclude<Variant, 'default'>;\n\ntype Props = {\n id: string | number;\n title: ReactNode;\n icon?: ReactNode;\n description?: ReactNode;\n action?: Action;\n loading?: boolean;\n duration?: number;\n // offset?: number;\n} & Variants;\n\nconst DEFAULT_VARIANT_ICON: Record<VariantIcon, ReactNode> = {\n error: <AlertTriangle />,\n info: <Info />,\n success: <CircleCheck />,\n warning: <AlertCircle />,\n};\n\nexport const ToastRoot = ({\n id,\n title,\n description,\n action,\n duration = Infinity,\n variant = 'info',\n loading = false,\n icon: iconProp,\n}: Props) => {\n const isLegacy = useIsLegacyBrand();\n const renderArgo = !isLegacy;\n\n const icon: ReactNode = (() => {\n if (loading) return <Loader2 className=\"tw-animate-spin\" />;\n if (iconProp) return iconProp;\n if (variant === 'default' || variant === null) return null;\n return DEFAULT_VARIANT_ICON[variant];\n })();\n\n const handleActionClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n sonnerToast.dismiss(id);\n action?.onClick(event);\n };\n\n return (\n <div\n data-variant={variant}\n data-argo={renderArgo}\n className={cn(\n variants({ variant }),\n 'data-[variant=default]:data-[argo=true]:tw-bg-background',\n )}\n >\n {icon && (\n <span\n data-slot=\"toast-icon\"\n className={cn(\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-self-center',\n 'tw-aspect-square',\n 'tw-size-5',\n 'tw-shrink-0',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-5',\n 'tw-text-white',\n 'group-data-[variant=default]/toast:tw-text-popover-foreground',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground',\n )}\n >\n {icon}\n </span>\n )}\n\n <ToastTitle>{title}</ToastTitle>\n {description && <ToastDescription>{description}</ToastDescription>}\n {action && (\n <ToastAction style={action?.actionButtonStyle} onClick={handleActionClick}>\n {action.label}\n </ToastAction>\n )}\n <ToastDismiss onClick={() => sonnerToast.dismiss(id)} />\n {duration !== Infinity && <ToastDuration duration={duration} />}\n </div>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'button'>;\n\nexport const ToastAction = ({\n ref,\n className,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <button\n {...rest}\n ref={ref}\n data-slot=\"toast-action\"\n type=\"button\"\n className={cn(\n // layout\n 'tw-col-start-3',\n 'tw-row-start-1',\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n\n // font\n 'tw-text-xs',\n 'tw-font-medium',\n 'tw-text-primary',\n\n // sizing\n 'tw-px-2',\n 'tw-h-6',\n\n // styles\n 'tw-bg-primary-foreground',\n 'tw-rounded',\n className,\n )}\n />\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const ToastDescription = ({\n ref,\n className,\n children,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => (\n <div\n ref={ref}\n data-slot=\"toast-description\"\n className={cn(\n 'tw-col-start-2',\n 'tw-font-normal',\n 'tw-break-words',\n 'tw-text-white',\n 'group-data-[variant=default]/toast:tw-text-muted-foreground',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { X } from '../../icons';\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'button'>;\n\nexport const ToastDismiss = ({\n ref,\n className,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <button\n ref={ref}\n data-slot=\"toast-dismiss\"\n className={cn(\n 'tw-flex',\n 'tw-justify-center',\n 'tw-col-start-4',\n 'tw-row-start-1',\n 'tailwindcss-preflight',\n '[&_svg]:tw-aspect-square',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n '[&_svg]:tw-m-1',\n\n 'tw-text-white',\n 'group-data-[variant=default]/toast:[&_svg]:tw-text-popover-foreground',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:[&_svg]:tw-text-foreground',\n className,\n )}\n type=\"button\"\n {...rest}\n >\n <X />\n <span className=\"tw-sr-only\">Dismiss</span>\n </button>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype ToastDurationProps = ComponentProps<'span'> & {\n duration: number;\n};\n\nexport const ToastDuration = ({\n ref,\n duration,\n className,\n style,\n ...rest\n}: ToastDurationProps & { ref?: Ref<ElementRef<'span'>> }) => (\n <span\n {...rest}\n ref={ref}\n className={cn(\n 'tw-bg-white/30',\n 'group-data-[variant=default]/toast:tw-bg-popover-foreground/20',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-bg-foreground/20',\n 'tw-rounded-bl-lg',\n 'tw-mx-px',\n\n // positioning\n 'tw-absolute',\n 'tw-bottom-0',\n 'tw-left-0',\n\n // sizing\n 'tw-h-1',\n\n // animation\n 'tw-animate-toast-progress',\n 'group-hover/toast:[animation-play-state:paused]',\n className,\n )}\n style={{\n animationDuration: `${duration}ms`,\n ...style,\n }}\n />\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const ToastTitle = ({\n ref,\n className,\n children,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => (\n <div\n ref={ref}\n data-slot=\"toast-title\"\n className={cn(\n 'tw-col-start-2',\n 'tw-text-sm',\n 'tw-leading-6',\n 'tw-min-h-6',\n 'tw-self-center',\n 'tw-text-white',\n 'group-data-[variant=default]/toast:tw-text-popover-foreground',\n 'group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground',\n\n 'tw-break-words',\n 'tw-font-medium',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n","import { useEffect, useRef } from 'react';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport type { NodeKey } from 'lexical';\nimport {\n $getNodeByKey,\n $insertNodes,\n COMMAND_PRIORITY_CRITICAL,\n DROP_COMMAND,\n PASTE_COMMAND,\n} from 'lexical';\n\nimport { toast } from '../../Toast/toast';\nimport { $createImageNode, $isImageNode } from '../nodes/ImageNode';\n\nconst ACCEPTED_IMAGE_TYPES = [\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n];\n\nconst MAX_IMAGE_SIZE = 10 * 1024 * 1024; // 10 MB\n\nconst PLACEHOLDER_PREFIX = 'upload-placeholder-';\n\nconst generatePlaceholderId = (): string => {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n};\n\nconst isAcceptedImageType = (type: string) => ACCEPTED_IMAGE_TYPES.includes(type);\n\nconst getImageFilesFromDataTransfer = (dataTransfer: DataTransfer | null): File[] => {\n if (!dataTransfer) return [];\n\n if (dataTransfer.items.length > 0) {\n const files: File[] = [];\n for (const item of dataTransfer.items) {\n if (item.kind === 'file' && isAcceptedImageType(item.type)) {\n const file = item.getAsFile();\n if (file) files.push(file);\n }\n }\n if (files.length > 0) return files;\n }\n\n return Array.from(dataTransfer.files).filter((file) => isAcceptedImageType(file.type));\n};\n\nconst escapeMarkdownAlt = (text: string) => text.replace(/[[\\]()]/g, '');\n\ntype ImagePastePluginProps = {\n onImageUpload?: (file: File) => Promise<{ url: string }>;\n};\n\nexport const ImagePastePlugin = ({ onImageUpload }: ImagePastePluginProps) => {\n const [editor] = useLexicalComposerContext();\n const onImageUploadRef = useRef(onImageUpload);\n onImageUploadRef.current = onImageUpload;\n\n useEffect(() => {\n const uploadFile = (file: File) => {\n const upload = onImageUploadRef.current;\n if (!upload) return;\n\n if (file.size > MAX_IMAGE_SIZE) {\n toast.error(`Image \"${file.name}\" is too large. Maximum size is 10 MB.`);\n return;\n }\n\n // Insert placeholder and start upload outside the command handler\n // to avoid nested editor.update() batching issues\n let nodeKey: NodeKey | null = null;\n\n editor.update(() => {\n const placeholderNode = $createImageNode(\n `${PLACEHOLDER_PREFIX}${generatePlaceholderId()}`,\n 'Uploading image\\u2026',\n );\n $insertNodes([placeholderNode]);\n nodeKey = placeholderNode.getKey();\n });\n\n if (!nodeKey) return;\n const capturedKey: NodeKey = nodeKey;\n\n upload(file)\n .then(({ url }) => {\n editor.update(() => {\n const node = $getNodeByKey(capturedKey);\n if ($isImageNode(node)) {\n const altText = escapeMarkdownAlt(file.name.replace(/\\.[^.]+$/, '') || 'image');\n node.setSrc(url);\n node.setAlt(altText);\n }\n });\n })\n .catch((error: unknown) => {\n console.error('[MarkdownEditor] image upload failed', error);\n toast.error(`Failed to upload \"${file.name}\". Please try again.`);\n editor.update(() => {\n const node = $getNodeByKey(capturedKey);\n if (node) node.remove();\n });\n });\n };\n\n const removePaste = editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n if (!onImageUploadRef.current) return false;\n if (!(event instanceof ClipboardEvent)) return false;\n const files = getImageFilesFromDataTransfer(event.clipboardData);\n if (files.length === 0) return false;\n\n event.preventDefault();\n // Defer upload to next microtask to escape the command handler's update context\n Promise.resolve().then(() => files.forEach(uploadFile));\n return true;\n },\n COMMAND_PRIORITY_CRITICAL,\n );\n\n const removeDrop = editor.registerCommand(\n DROP_COMMAND,\n (event: DragEvent) => {\n if (!onImageUploadRef.current) return false;\n const files = getImageFilesFromDataTransfer(event.dataTransfer);\n if (files.length === 0) return false;\n\n event.preventDefault();\n // Defer upload to next microtask to escape the command handler's update context\n Promise.resolve().then(() => files.forEach(uploadFile));\n return true;\n },\n COMMAND_PRIORITY_CRITICAL,\n );\n\n return () => {\n removePaste();\n removeDrop();\n };\n }, [editor]);\n\n return null;\n};\n","import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { COMMAND_PRIORITY_HIGH, KEY_DOWN_COMMAND } from 'lexical';\n\ntype KeyboardPluginProps = {\n /** Invoked directly on Cmd/Ctrl+Enter (explicit commit shortcut, no blur). */\n onSave?: () => void;\n /**\n * Invoked on Escape in inline-edit mode. Per the inline-editable-text pattern spec\n * (evviku/design-system-docs), Escape reverts the in-progress edit — callers reset\n * `value` to the last-committed state inside this handler.\n */\n onCancel?: () => void;\n /**\n * When true, plain Enter blurs the editor instead of inserting a paragraph break.\n * For `saveOnBlur` callers this commits via blur; for non-saveOnBlur callers Enter\n * just exits edit mode. Shift+Enter still inserts a soft line break.\n */\n singleLine?: boolean;\n /**\n * When true, Escape blurs the editor (exits edit mode). Enable only for inline-edit\n * patterns (`singleLine` or `saveOnBlur`); in full-toolbar mode Esc stays a no-op so\n * existing call sites don't lose focus on a stray keypress.\n */\n blurOnEscape?: boolean;\n /**\n * Set to `true` before the plugin programmatically blurs on Escape so the wrapper's\n * blur handler can skip its `onSave` — otherwise blur-after-cancel would commit the\n * value we just reverted. Reset by the consumer on read.\n */\n skipBlurSaveRef?: RefObject<boolean>;\n};\n\nexport const KeyboardPlugin = ({\n onSave,\n onCancel,\n singleLine,\n blurOnEscape,\n skipBlurSaveRef,\n}: KeyboardPluginProps) => {\n const [editor] = useLexicalComposerContext();\n const onSaveRef = useRef(onSave);\n onSaveRef.current = onSave;\n const onCancelRef = useRef(onCancel);\n onCancelRef.current = onCancel;\n const singleLineRef = useRef(singleLine);\n singleLineRef.current = singleLine;\n const blurOnEscapeRef = useRef(blurOnEscape);\n blurOnEscapeRef.current = blurOnEscape;\n const skipBlurSaveExternalRef = skipBlurSaveRef;\n\n useEffect(() => {\n return editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n onSaveRef.current?.();\n return true;\n }\n if (event.key === 'Enter' && !event.shiftKey && !event.altKey && singleLineRef.current) {\n event.preventDefault();\n editor.getRootElement()?.blur();\n return true;\n }\n if (event.key === 'Escape' && blurOnEscapeRef.current) {\n // Suppress blur-driven onSave so the post-blur save doesn't commit the value we just reverted.\n if (skipBlurSaveExternalRef) skipBlurSaveExternalRef.current = true;\n onCancelRef.current?.();\n editor.getRootElement()?.blur();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n );\n }, [editor, skipBlurSaveExternalRef]);\n\n return null;\n};\n","import type {\n ElementTransformer,\n MultilineElementTransformer,\n TextMatchTransformer,\n Transformer,\n} from '@lexical/markdown';\nimport { CHECK_LIST, TRANSFORMERS } from '@lexical/markdown';\nimport {\n $createHorizontalRuleNode,\n $isHorizontalRuleNode,\n HorizontalRuleNode,\n} from '@lexical/react/LexicalHorizontalRuleNode';\n\nimport { $createImageNode, $isImageNode, ImageNode } from './nodes/ImageNode';\nimport { $createMermaidNode, $isMermaidNode, MermaidNode } from './nodes/MermaidNode';\n\n/** Markdown image: `![alt](src)` */\nconst IMAGE: TextMatchTransformer = {\n dependencies: [ImageNode],\n export: (node) => {\n if (!$isImageNode(node)) return null;\n return `![${node.getAlt()}](${node.getSrc()})`;\n },\n importRegExp: /!\\[([^\\]]*)\\]\\(([^)]+)\\)/,\n regExp: /!\\[([^\\]]*)\\]\\(([^)]+)\\)$/,\n replace: (textNode, match) => {\n const [, alt = '', src = ''] = match;\n const imageNode = $createImageNode(src, alt);\n textNode.replace(imageNode);\n },\n trigger: ')',\n type: 'text-match',\n};\n\n/** Horizontal rule: `---`, `***`, or `___` */\nconst HORIZONTAL_RULE: ElementTransformer = {\n dependencies: [HorizontalRuleNode],\n export: (node) => {\n return $isHorizontalRuleNode(node) ? '---' : null;\n },\n regExp: /^(---|\\*\\*\\*|___)$/,\n replace: (parentNode) => {\n const node = $createHorizontalRuleNode();\n parentNode.replace(node);\n },\n type: 'element',\n};\n\n/** Fenced mermaid block: ` ```mermaid ... ``` ` → MermaidNode (rendered as diagram) */\nconst MERMAID: MultilineElementTransformer = {\n dependencies: [MermaidNode],\n export: (node) => {\n if (!$isMermaidNode(node)) return null;\n return '```mermaid\\n' + node.getCode() + '\\n```';\n },\n regExpStart: /^[ \\t]*(`{3,})mermaid(?:\\s.*)?$/,\n regExpEnd: {\n optional: true,\n regExp: /^[ \\t]*`{3,}$/,\n },\n replace: (rootNode, _children, _startMatch, _endMatch, linesInBetween) => {\n if (!linesInBetween) return;\n const code = linesInBetween.join('\\n').trim();\n if (code) {\n rootNode.append($createMermaidNode(code));\n }\n },\n handleImportAfterStartMatch: ({\n lines,\n rootNode,\n startLineIndex,\n startMatch,\n }): [boolean, number] => {\n const fence = startMatch[1];\n if (!fence) return [false, startLineIndex];\n const fenceLength = fence.trim().length;\n const endRegex = new RegExp(`^[ \\\\t]*\\`{${fenceLength},}$`);\n\n for (let i = startLineIndex + 1; i < lines.length; i++) {\n if (endRegex.test(lines[i] ?? '')) {\n const code = lines\n .slice(startLineIndex + 1, i)\n .join('\\n')\n .trim();\n if (code) {\n rootNode.append($createMermaidNode(code));\n }\n return [true, i];\n }\n }\n\n // No closing fence — consume remaining lines\n const code = lines\n .slice(startLineIndex + 1)\n .join('\\n')\n .trim();\n if (code) {\n rootNode.append($createMermaidNode(code));\n }\n return [true, lines.length - 1];\n },\n type: 'multiline-element',\n};\n\n/**\n * Custom transformers = our additions + built-in Lexical transformers.\n * MERMAID is placed before TRANSFORMERS so it intercepts ` ```mermaid ``` ` before the generic CODE transformer.\n * IMAGE is placed before built-in LINK to prevent `![alt](url)` from being parsed as `!` + link.\n */\nexport const CUSTOM_TRANSFORMERS: Transformer[] = [\n IMAGE,\n HORIZONTAL_RULE,\n CHECK_LIST,\n MERMAID,\n ...TRANSFORMERS,\n];\n\n/**\n * No transformers = plain text. `singleLine` mode edits entity names / titles, which are\n * plain text, not markdown. Parsing inline formatting here corrupts ordinary names: e.g.\n * `staging_chargebee_invoices` would render the `_chargebee_` span as italics, and Lexical\n * escapes the underscores on export (`\\_`) to prevent exactly that — but those backslashes\n * then leak into the persisted name. Dropping every transformer keeps `_`, `*`, `` ` ``, `~`\n * literal on both import and export; pair the empty set with `unescapeMarkdownText` on export\n * to strip Lexical's escaping (see MarkdownSyncPlugin).\n */\nexport const SINGLE_LINE_TRANSFORMERS: Transformer[] = [];\n\n// --- Table pre/post-processing ---\n// GFM tables can't round-trip through Lexical's markdown (no built-in table transformer).\n// We wrap them in fenced code blocks on import and unwrap on export to preserve them exactly.\n\nconst TABLE_FENCE_LANG = '__kbc_table__';\n\nconst isTableLine = (line: string): boolean => {\n const trimmed = line.trim();\n return trimmed.startsWith('|') && trimmed.endsWith('|');\n};\n\nconst CODE_FENCE_REGEX = /^[ \\t]*`{3,}/;\n\n/** Wrap GFM tables in code fences so they survive Lexical's markdown round-trip. */\nexport const preprocessMarkdown = (markdown: string): string => {\n const lines = markdown.split('\\n');\n const result: string[] = [];\n let tableLines: string[] = [];\n let insideCodeFence = false;\n\n const flushTable = () => {\n if (tableLines.length >= 2) {\n result.push(`\\`\\`\\`${TABLE_FENCE_LANG}`);\n result.push(...tableLines);\n result.push('```');\n } else {\n // Single pipe line isn't a table — keep as-is\n result.push(...tableLines);\n }\n tableLines = [];\n };\n\n for (const line of lines) {\n if (CODE_FENCE_REGEX.test(line)) {\n if (tableLines.length > 0) flushTable();\n insideCodeFence = !insideCodeFence;\n result.push(line);\n continue;\n }\n\n if (insideCodeFence) {\n result.push(line);\n continue;\n }\n\n if (isTableLine(line)) {\n tableLines.push(line);\n } else {\n if (tableLines.length > 0) flushTable();\n result.push(line);\n }\n }\n if (tableLines.length > 0) flushTable();\n\n return result.join('\\n');\n};\n\n/** Unwrap code-fenced tables back to raw GFM table markdown. */\nexport const postprocessMarkdown = (markdown: string): string => {\n const regex = new RegExp(`\\`\\`\\`${TABLE_FENCE_LANG}\\\\n([\\\\s\\\\S]*?)\\\\n\\`\\`\\``, 'g');\n return markdown.replace(regex, '$1');\n};\n\n/**\n * Reverses the backslash-escaping Lexical applies to markdown punctuation (`* _ ` ~ \\`) when\n * exporting text nodes. Used for `singleLine` (plain-text) mode, where the export value is a\n * bare entity name — the escaping would otherwise persist as literal backslashes in the name.\n */\nexport const unescapeMarkdownText = (markdown: string): string =>\n markdown.replace(/\\\\([*_`~\\\\])/g, '$1');\n","import { useEffect, useRef } from 'react';\nimport type { Transformer } from '@lexical/markdown';\nimport { $convertFromMarkdownString, $convertToMarkdownString } from '@lexical/markdown';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\n\nimport {\n CUSTOM_TRANSFORMERS,\n postprocessMarkdown,\n preprocessMarkdown,\n unescapeMarkdownText,\n} from '../transformers';\n\nconst IMPORT_TAG = 'markdown-import';\n\ntype MarkdownSyncPluginProps = {\n value: string;\n editable: boolean;\n onChange?: (markdown: string) => void;\n transformers?: Transformer[];\n /**\n * Plain-text mode: export a bare entity name instead of markdown. Unescapes the punctuation\n * Lexical escapes on export (`\\_` → `_`), so names with underscores don't persist backslashes.\n */\n singleLine?: boolean;\n};\n\nexport const MarkdownSyncPlugin = ({\n value,\n editable,\n onChange,\n transformers = CUSTOM_TRANSFORMERS,\n singleLine = false,\n}: MarkdownSyncPluginProps) => {\n const [editor] = useLexicalComposerContext();\n const lastExportedRef = useRef(value);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const transformersRef = useRef(transformers);\n transformersRef.current = transformers;\n const singleLineRef = useRef(singleLine);\n singleLineRef.current = singleLine;\n\n // Sync editable state — only when it actually changes\n useEffect(() => {\n editor.setEditable(editable);\n }, [editor, editable]);\n\n // Import: external value -> editor state\n useEffect(() => {\n if (value === lastExportedRef.current) return;\n lastExportedRef.current = value;\n\n editor.update(\n () => {\n $convertFromMarkdownString(preprocessMarkdown(value), transformersRef.current);\n },\n { tag: IMPORT_TAG },\n );\n }, [editor, value]);\n\n // Export: editor state -> onChange (subscription)\n useEffect(() => {\n return editor.registerUpdateListener(({ tags }) => {\n if (tags.has(IMPORT_TAG)) return;\n\n editor.getEditorState().read(() => {\n const raw = $convertToMarkdownString(transformersRef.current);\n const markdown = singleLineRef.current\n ? unescapeMarkdownText(raw)\n : postprocessMarkdown(raw);\n if (markdown !== lastExportedRef.current) {\n lastExportedRef.current = markdown;\n onChangeRef.current?.(markdown);\n }\n });\n });\n }, [editor]);\n\n return null;\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { $createCodeNode, $isCodeNode } from '@lexical/code';\nimport { $isLinkNode } from '@lexical/link';\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 { $createQuoteNode, $isHeadingNode, $isQuoteNode } from '@lexical/rich-text';\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n type ElementFormatType,\n FORMAT_TEXT_COMMAND,\n} from 'lexical';\n\nimport {\n Bold,\n Code,\n Italic,\n List as ListIcon,\n ListOrdered,\n Quote,\n SquareCode,\n Strikethrough,\n Underline,\n} from '../../../icons';\n\nimport { AlignmentDropdown } from './toolbar/AlignmentDropdown';\nimport { BlockTypeDropdown } from './toolbar/BlockTypeDropdown';\nimport { LinkPanel } from './toolbar/LinkPanel';\nimport { ToolbarButton } from './toolbar/ToolbarButton';\nimport { ToolbarDivider } from './toolbar/ToolbarDivider';\n\nconst ELEMENT_FORMAT_TYPES = ['left', 'center', 'right', 'justify', 'start', 'end', ''] as const;\n\nconst isElementFormatType = (value: string): value is ElementFormatType =>\n (ELEMENT_FORMAT_TYPES as readonly string[]).includes(value);\n\nconst toElementFormatType = (value: string): ElementFormatType =>\n isElementFormatType(value) ? value : 'left';\n\nexport const ToolbarPlugin = () => {\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isStrikethrough, setIsStrikethrough] = useState(false);\n const [isCode, setIsCode] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const [blockType, setBlockType] = useState<string>('paragraph');\n const [alignment, setAlignment] = useState<ElementFormatType>('left');\n const [isVisible, setIsVisible] = useState(false);\n const [position, setPosition] = useState<{ top: number; left: number } | null>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const isMouseDownRef = useRef(false);\n const hasSelectionRef = useRef(false);\n\n const updatePosition = useCallback(() => {\n const nativeSelection = window.getSelection();\n if (!nativeSelection || nativeSelection.rangeCount === 0) return;\n const range = nativeSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (rect.width > 0) {\n const toolbarWidth = toolbarRef.current?.offsetWidth ?? 300;\n setPosition({\n top: rect.top + window.scrollY - 8,\n left: Math.max(8, rect.left + window.scrollX + rect.width / 2 - toolbarWidth / 2),\n });\n }\n }, []);\n\n useEffect(() => {\n const handleMouseDown = () => {\n isMouseDownRef.current = true;\n };\n const handleMouseUp = () => {\n isMouseDownRef.current = false;\n if (hasSelectionRef.current) {\n setIsVisible(true);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, []);\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n hasSelectionRef.current = false;\n setIsVisible(false);\n return;\n }\n\n const hasSelection = !selection.isCollapsed() && selection.getTextContent().length > 0;\n hasSelectionRef.current = hasSelection;\n\n if (!hasSelection) {\n setIsVisible(false);\n } else if (!isMouseDownRef.current) {\n setIsVisible(true);\n }\n\n if (hasSelection) {\n updatePosition();\n }\n\n setIsBold(selection.hasFormat('bold'));\n setIsItalic(selection.hasFormat('italic'));\n setIsUnderline(selection.hasFormat('underline'));\n setIsStrikethrough(selection.hasFormat('strikethrough'));\n setIsCode(selection.hasFormat('code'));\n\n const node = selection.anchor.getNode();\n const parent = node.getParent();\n setIsLink($isLinkNode(parent) || $isLinkNode(node));\n\n const blockElement = $getNearestBlockElementAncestorOrThrow(node);\n\n if ($isListNode(blockElement)) {\n const listType = blockElement.getListType();\n setBlockType(listType === 'number' ? 'number' : 'bullet');\n } else if ($isHeadingNode(blockElement)) {\n setBlockType(blockElement.getTag());\n } else if ($isCodeNode(blockElement)) {\n setBlockType('code');\n } else if ($isQuoteNode(blockElement)) {\n setBlockType('quote');\n } else {\n setBlockType('paragraph');\n }\n\n setAlignment(toElementFormatType(blockElement.getFormatType()));\n }, [updatePosition]);\n\n useEffect(() => {\n const unregisterUpdate = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n });\n\n return () => {\n unregisterUpdate();\n };\n }, [editor, updateToolbar]);\n\n if (!isVisible || !position) return null;\n\n return createPortal(\n <div\n ref={toolbarRef}\n role=\"toolbar\"\n aria-label=\"Formatting options\"\n onMouseDown={(e) => e.preventDefault()}\n style={{ top: position.top, left: position.left }}\n className=\"tw-absolute tw-z-[1060] tw-flex tw--translate-y-full tw-items-center tw-gap-0.5 tw-rounded-lg tw-border tw-border-neutral-200 tw-bg-white tw-px-1.5 tw-py-1 tw-shadow-lg\"\n >\n <BlockTypeDropdown editor={editor} blockType={blockType} />\n\n <ToolbarDivider />\n\n <ToolbarButton\n active={isBold}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')}\n tooltip=\"Bold (Ctrl+B)\"\n >\n <Bold className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isItalic}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')}\n tooltip=\"Italic (Ctrl+I)\"\n >\n <Italic className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isUnderline}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')}\n tooltip=\"Underline (Ctrl+U)\"\n >\n <Underline className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isStrikethrough}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')}\n tooltip=\"Strikethrough\"\n >\n <Strikethrough className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={isCode}\n onClick={() => editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'code')}\n tooltip=\"Inline Code\"\n >\n <Code className=\"tw-size-4\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n <LinkPanel editor={editor} isLink={isLink} />\n\n <ToolbarDivider />\n\n <ToolbarButton\n active={blockType === 'bullet'}\n onClick={() => {\n if (blockType === 'bullet') {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }\n }}\n tooltip=\"Bullet List\"\n >\n <ListIcon className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={blockType === 'number'}\n onClick={() => {\n if (blockType === 'number') {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n }}\n tooltip=\"Numbered List\"\n >\n <ListOrdered className=\"tw-size-4\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n <AlignmentDropdown editor={editor} alignment={alignment} />\n\n <ToolbarDivider />\n\n <ToolbarButton\n active={blockType === 'quote'}\n onClick={() => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n const anchorNode = selection.anchor.getNode();\n const element = $getNearestBlockElementAncestorOrThrow(anchorNode);\n const newNode = blockType === 'quote' ? $createParagraphNode() : $createQuoteNode();\n element.getChildren().forEach((child) => newNode.append(child));\n element.replace(newNode);\n });\n }}\n tooltip=\"Quote\"\n >\n <Quote className=\"tw-size-4\" />\n </ToolbarButton>\n <ToolbarButton\n active={blockType === 'code'}\n onClick={() => {\n editor.update(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n const anchorNode = selection.anchor.getNode();\n const element = $getNearestBlockElementAncestorOrThrow(anchorNode);\n const newNode = blockType === 'code' ? $createParagraphNode() : $createCodeNode();\n element.getChildren().forEach((child) => newNode.append(child));\n element.replace(newNode);\n });\n }}\n tooltip=\"Code Block\"\n >\n <SquareCode className=\"tw-size-4\" />\n </ToolbarButton>\n </div>,\n document.body,\n );\n};\n","import { useRef } from 'react';\nimport {\n $getSelection,\n $setSelection,\n type BaseSelection,\n type ElementFormatType,\n FORMAT_ELEMENT_COMMAND,\n type LexicalEditor,\n} from 'lexical';\n\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n ChevronDown,\n type LucideIcon,\n} from '../../../../icons';\nimport { cn } from '../../../../utils';\nimport { DropdownMenu } from '../../../DropdownMenu';\nimport { Tooltip } from '../../../Tooltip';\n\nconst ALIGNMENT_OPTIONS: { value: ElementFormatType; label: string; icon: LucideIcon }[] = [\n { value: 'left', label: 'Left', icon: AlignLeft },\n { value: 'center', label: 'Center', icon: AlignCenter },\n { value: 'right', label: 'Right', icon: AlignRight },\n { value: 'justify', label: 'Justify', icon: AlignJustify },\n];\n\nconst ALIGNMENT_ICONS: Record<string, LucideIcon> = Object.fromEntries(\n ALIGNMENT_OPTIONS.map(({ value, icon }) => [value, icon]),\n);\n\nexport const AlignmentDropdown = ({\n editor,\n alignment,\n}: {\n editor: LexicalEditor;\n alignment: ElementFormatType;\n}) => {\n const savedSelectionRef = useRef<BaseSelection | null>(null);\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n savedSelectionRef.current = selection ? selection.clone() : null;\n });\n }\n };\n\n const handleSelect = (align: ElementFormatType) => {\n // Restore selection and dispatch within the same update so the command sees\n // the restored selection (otherwise dispatchCommand may race with the queued\n // $setSelection and apply the format to the wrong block).\n editor.update(() => {\n if (savedSelectionRef.current) {\n $setSelection(savedSelectionRef.current);\n }\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, align);\n });\n };\n\n const CurrentAlignmentIcon = ALIGNMENT_ICONS[alignment] ?? AlignLeft;\n\n return (\n <DropdownMenu onOpenChange={handleOpenChange}>\n <Tooltip tooltip=\"Text alignment\" placement=\"top\" triggerAsChild>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n 'tw-flex tw-h-7 tw-cursor-pointer tw-items-center tw-gap-1 tw-rounded tw-border-0 tw-bg-transparent tw-px-1.5 tw-text-xs tw-text-neutral-600',\n 'hover:tw-bg-neutral-100',\n )}\n >\n <CurrentAlignmentIcon className=\"tw-size-4\" />\n <ChevronDown className=\"tw-size-3\" />\n </button>\n </DropdownMenu.Trigger>\n </Tooltip>\n <DropdownMenu.Content align=\"start\" className=\"tw-min-w-32\">\n {ALIGNMENT_OPTIONS.map(({ value, label, icon: IconComp }) => (\n <DropdownMenu.Item\n key={value}\n onSelect={() => handleSelect(value)}\n className={cn(\n 'tw-flex tw-items-center tw-gap-2',\n alignment === value && 'tw-bg-secondary-50 tw-text-secondary-500',\n )}\n >\n <IconComp className=\"tw-size-4\" />\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n};\n","import { useMemo } from 'react';\nimport type { ComponentProps } from 'react';\nimport { Group, Root } from '@radix-ui/react-dropdown-menu';\n\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem';\nimport { DropdownMenuContent } from './DropdownMenuContent';\nimport type { DropdownMenuVariant } from './DropdownMenuContext';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuItem } from './DropdownMenuItem';\nimport { DropdownMenuItemDescription } from './DropdownMenuItemDescription';\nimport { DropdownMenuLabel } from './DropdownMenuLabel';\nimport { DropdownMenuRadioGroup, DropdownMenuRadioItem } from './DropdownMenuRadioGroup';\nimport { DropdownMenuSeparator } from './DropdownMenuSeparator';\nimport { DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger } from './DropdownMenuSub';\nimport { DropdownMenuTrigger } from './DropdownMenuTrigger';\n\ntype Props = ComponentProps<typeof Root>;\n\nexport const DropdownMenu = ({\n // change a default value to false, for modal property, as it is not used in most cases\n modal = false,\n ...props\n}: Props) => {\n const isLegacy = useIsLegacyBrand();\n const effectiveVariant: DropdownMenuVariant = !isLegacy ? 'argo' : 'default';\n const contextValue = useMemo(() => ({ variant: effectiveVariant }), [effectiveVariant]);\n\n return (\n <DropdownMenuContext value={contextValue}>\n <Root {...props} modal={modal} />\n </DropdownMenuContext>\n );\n};\n\n/**\n * Main Layout\n */\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = DropdownMenuContent;\nDropdownMenu.Group = Group;\n\n/**\n * Sub Layout\n */\nDropdownMenu.Sub = DropdownMenuSub;\nDropdownMenu.SubContent = DropdownMenuSubContent;\nDropdownMenu.SubTrigger = DropdownMenuSubTrigger;\n\n/**\n * Items can be used either Sub ar Main Layout\n */\nDropdownMenu.Separator = DropdownMenuSeparator;\nDropdownMenu.Label = DropdownMenuLabel;\nDropdownMenu.Item = DropdownMenuItem;\nDropdownMenu.CheckboxItem = DropdownMenuCheckboxItem;\nDropdownMenu.RadioGroup = DropdownMenuRadioGroup;\nDropdownMenu.RadioItem = DropdownMenuRadioItem;\n\n// item content\nDropdownMenu.ItemDescription = DropdownMenuItemDescription;\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { Loader2 } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { DropdownMenuItemIndicator } from './DropdownMenuItemIndicator';\nimport { ItemIcon } from './ItemIcon';\nimport { itemVariants } from './styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n closeOnSelect?: boolean;\n indicator?: 'switch' | 'checkbox' | 'check';\n indicatorAlign?: 'start' | 'end';\n isLoading?: boolean;\n};\n\nexport const DropdownMenuCheckboxItem = ({\n className,\n children,\n checked,\n closeOnSelect = false,\n onSelect,\n indicatorAlign = 'start',\n indicator = 'checkbox',\n isLoading = false,\n ...props\n}: Props) => {\n const isAtStart = indicatorAlign === 'start';\n const indicatorEle = isLoading ? (\n <ItemIcon className={isAtStart ? '' : 'tw-ml-auto'}>\n <Loader2 className=\"tw-animate-spin\" />\n </ItemIcon>\n ) : (\n <DropdownMenuItemIndicator variant={indicator} className={isAtStart ? '' : 'tw-ml-auto'} />\n );\n\n const handleSelect = (event: Event) => {\n if (!closeOnSelect) event.preventDefault();\n onSelect?.(event);\n };\n\n return (\n <DropdownMenuPrimitive.CheckboxItem\n className={cn(itemVariants, className)}\n checked={checked}\n onSelect={handleSelect}\n {...props}\n >\n {isAtStart && indicatorEle}\n {children}\n {!isAtStart && indicatorEle}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nimport { Check, Circle, ToggleRight } from '../../icons';\n\nconst variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-pointer-events-none',\n\n // sizing\n 'tw-size-4',\n 'tw-aspect-square',\n 'tw-shrink-0',\n\n // layout\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n ],\n {\n variants: {\n variant: {\n none: [],\n radio: [\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-border',\n 'tw-rounded-full',\n 'tw-bg-white',\n\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-2',\n '[&_svg]:data-[state=unchecked]:tw-hidden',\n // Lucide Circle is stroke-only — force fill to match the stroke\n // (currentColor) so the indicator reads as a solid dot.\n '[&_svg]:tw-fill-current',\n 'group-data-[variant=argo]/dropdown-menu-content:[&_svg]:tw-text-primary',\n 'group-data-[variant=default]/dropdown-menu-content:[&_svg]:tw-text-secondary-500',\n ],\n check: ['[&_svg:not([class*=\"tw-size-\"])]:tw-size-3.5', '[&_svg]:tw-text-primary'],\n checkbox: [\n '[&_svg]:tw-text-white',\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-neutral-200',\n 'tw-rounded',\n\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-3',\n '[&_svg]:data-[state=unchecked]:tw-hidden',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-border-primary',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-bg-primary',\n 'group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-border-secondary-500',\n 'group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-bg-secondary-500',\n ],\n switch: [\n 'tw-size-5',\n // Lucide SVGs default to 24×24 — constrain the rendered ToggleRight\n // to the indicator slot so it doesn't overflow.\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-5',\n 'tw-text-neutral-400',\n 'data-[state=unchecked]:tw-rotate-180',\n 'group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-text-secondary-500',\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-text-primary',\n ],\n },\n },\n },\n);\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.ItemIndicator> &\n VariantProps<typeof variants>;\n\nexport const DropdownMenuItemIndicator = ({\n variant,\n className,\n forceMount: forceMountProp,\n ...rest\n}: Props) => {\n const IconComp = (() => {\n if (variant === 'switch') return ToggleRight;\n if (variant === 'radio') return Circle;\n return Check;\n })();\n\n const forceMount = (() => {\n if (forceMountProp) return true;\n // All variants, except for check, require rendering at all times.\n return variant === 'check' ? undefined : true;\n })();\n\n if (variant === 'none') return null;\n\n return (\n <DropdownMenuPrimitive.ItemIndicator\n {...rest}\n forceMount={forceMount}\n className={variants({ variant, className })}\n >\n <IconComp />\n </DropdownMenuPrimitive.ItemIndicator>\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'span'> & {\n children: ReactNode;\n};\n\nexport const ItemIcon = ({ className, children, ...props }: Props) => (\n <span\n {...props}\n className={cn(\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-aspect-square',\n // 20px container fits the 16px Lucide glyph plus 2px breathing room\n // each side — the previous tw-size-4 + tw-p-0.5 clipped the 16px child.\n 'tw-size-5',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n 'group-data-[variant=default]/dropdown-menu-content:tw-text-neutral-400',\n 'group-data-[variant=argo]/dropdown-menu-content:tw-text-primary',\n 'group-data-[variant=argo]/dropdown-menu-content:group-aria-disabled:tw-text-muted-foreground',\n 'group-data-[variant=default]/dropdown-menu-content:group-hover:tw-text-secondary-500',\n className,\n )}\n >\n {children}\n </span>\n);\n","import { cn } from '../../utils';\n\nexport const itemVariants = cn(\n // reset\n 'tailwindcss-preflight',\n 'tw-outline-none',\n 'tw-group',\n 'tw-peer',\n 'tw-relative',\n\n // positioning\n 'tw-flex',\n 'tw-flex-1',\n 'tw-items-center',\n 'tw-gap-2',\n\n 'tw-cursor-pointer',\n 'tw-select-none',\n 'tw-transition-colors',\n\n // spacing\n 'tw-p-2',\n\n // typography\n 'tw-font-sans',\n 'tw-text-sm',\n\n 'aria-disabled:tw-pointer-events-none',\n 'aria-disabled:tw-opacity-50',\n\n 'focus-visible:tw-outline-none',\n\n 'group-data-[variant=default]/dropdown-menu-content:tw-rounded',\n 'group-data-[variant=default]/dropdown-menu-content:focus:tw-bg-neutral-100',\n 'group-data-[variant=default]/dropdown-menu-content:focus:tw-text-neutral-900',\n 'group-data-[variant=default]/dropdown-menu-content:hover:tw-bg-neutral-100',\n 'group-data-[variant=default]/dropdown-menu-content:hover:tw-text-neutral-900',\n\n 'group-data-[variant=argo]/dropdown-menu-content:tw-rounded-md',\n 'group-data-[variant=argo]/dropdown-menu-content:tw-text-popover-foreground',\n 'group-data-[variant=argo]/dropdown-menu-content:focus:tw-text-accent-foreground',\n 'group-data-[variant=argo]/dropdown-menu-content:focus:tw-bg-accent',\n 'group-data-[variant=argo]/dropdown-menu-content:hover:tw-text-accent-foreground',\n 'group-data-[variant=argo]/dropdown-menu-content:hover:tw-bg-accent',\n);\n\nexport const contentVariants = cn(\n 'tailwindcss-preflight',\n 'tw-group/dropdown-menu-content',\n 'tw-z-[1040]',\n\n // positioning\n 'tw-flex',\n 'tw-flex-col',\n 'tw-origin-[--radix-dropdown-menu-content-transform-origin]',\n\n // sizing\n 'tw-max-h-[var(--radix-dropdown-menu-content-available-height)]',\n 'tw-min-w-32',\n\n // border\n 'tw-border',\n 'tw-shadow-md',\n\n // Legacy surface — fixed white panel.\n 'data-[variant=default]:tw-rounded-md',\n 'data-[variant=default]:tw-bg-white',\n 'data-[variant=default]:tw-border-neutral-100',\n 'data-[variant=default]:tw-text-neutral-800',\n // Argo surface — semantic popover tokens (brand + dark aware).\n 'data-[variant=argo]:tw-rounded-2xl',\n 'data-[variant=argo]:tw-bg-popover',\n 'data-[variant=argo]:tw-text-popover-foreground',\n 'data-[variant=argo]:tw-border-border',\n\n // animations\n 'data-[state=open]:tw-animate-in',\n 'data-[state=open]:tw-fade-in-0',\n 'data-[state=open]:tw-zoom-in-95',\n\n 'data-[state=closed]:tw-animate-out',\n 'data-[state=closed]:tw-fade-out-0',\n 'data-[state=closed]:tw-zoom-out-95',\n\n 'data-[side=bottom]:tw-slide-in-from-top-2',\n 'data-[side=left]:tw-slide-in-from-right-2',\n 'data-[side=right]:tw-slide-in-from-left-2',\n 'data-[side=top]:tw-slide-in-from-bottom-2',\n);\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\nimport { ScrollArea } from '../ScrollArea';\n\nimport { useDropdownMenuContext } from './DropdownMenuContext';\nimport { contentVariants } from './styles';\n\ntype Props = Omit<\n ComponentProps<typeof DropdownMenuPrimitive.Content>,\n 'forceMount' | 'asChild'\n> & {\n forceMount?: boolean;\n viewPortClassName?: string;\n container?: HTMLElement | null;\n};\n\nexport const DropdownMenuContent = ({\n className,\n sideOffset = 4,\n forceMount,\n children,\n viewPortClassName,\n container,\n ...props\n}: Props) => {\n const { variant } = useDropdownMenuContext();\n\n return (\n <DropdownMenuPrimitive.Portal forceMount={forceMount || undefined} container={container}>\n <DropdownMenuPrimitive.Content\n {...props}\n data-variant={variant}\n sideOffset={sideOffset}\n className={contentVariants}\n >\n <ScrollArea\n className={className}\n viewPortClassName={cn(\n 'tw-p-2',\n 'tw-max-h-[var(--radix-dropdown-menu-content-available-height)]',\n viewPortClassName,\n )}\n scrollBarClassName=\"tw-w-1.5\"\n >\n {children}\n </ScrollArea>\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\n\nimport { cn } from '../../utils';\n\nimport { ScrollBar } from './ScrollBar';\n\ntype Props = ComponentProps<typeof ScrollAreaPrimitive.Root> & {\n viewPortClassName?: string;\n scrollBarClassName?: string;\n orientation?: ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>['orientation'];\n};\n\nexport const ScrollArea = ({\n ref,\n className,\n children,\n viewPortClassName,\n orientation,\n scrollBarClassName,\n ...props\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\n 'tw-peer/scroll-area tw-relative tw-overflow-hidden focus-visible:tw-outline-none',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n className={cn(\n 'tw-h-full tw-w-full tw-rounded-[inherit] focus-visible:tw-outline-none',\n viewPortClassName,\n )}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n {orientation ? (\n <ScrollBar className={scrollBarClassName} orientation={orientation} />\n ) : (\n <>\n <ScrollBar className={scrollBarClassName} orientation=\"vertical\" />\n <ScrollBar className={scrollBarClassName} orientation=\"horizontal\" />\n </>\n )}\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n);\n","import type { ComponentProps } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>;\n\nexport const ScrollBar = ({ className, orientation = 'vertical', ...props }: Props) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n orientation={orientation}\n className={cn(\n 'tw-flex tw-touch-none tw-select-none tw-transition-color',\n {\n 'tw-h-full tw-w-2.5 tw-p-px': orientation === 'vertical',\n 'tw-h-2.5 tw-flex-col tw-p-px': orientation === 'horizontal',\n },\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n className={cn(\n 'tw-relative',\n 'tw-flex-1',\n 'tw-rounded-full',\n 'tw-bg-border',\n 'hover:tw-bg-muted-foreground',\n )}\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n);\n","import { createContext, use } from 'react';\n\nexport type DropdownMenuVariant = 'default' | 'argo';\n\ntype DropdownMenuContextType = {\n variant: DropdownMenuVariant;\n};\n\nexport const DropdownMenuContext = createContext<DropdownMenuContextType>({\n variant: 'default',\n});\n\nexport const useDropdownMenuContext = () => use(DropdownMenuContext);\n","import type { ComponentProps, ElementRef, PointerEventHandler, ReactNode, Ref } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Root, Slottable } from '@radix-ui/react-slot';\n\nimport { Loader2 } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { ItemIcon } from './ItemIcon';\nimport { itemVariants } from './styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n /**\n * Fix for `autoFocus` on inputs not working correctly in modals.\n * While the DropdownMenuItem was animating out and the modal was animating in, the dying DropdownMenuItem was constantly trying to steal focus while the Dialog was trying to correctly set the new focus.\n * https://github.com/radix-ui/primitives/issues/2193#issuecomment-2758461323\n */\n asModalTrigger?: boolean;\n /** Pass a Lucide icon node as a leading adornment. */\n icon?: ReactNode;\n isLoading?: boolean;\n iconClassName?: string;\n};\n\nexport const DropdownMenuItem = ({\n ref,\n className,\n asModalTrigger = false,\n onSelect,\n onPointerLeave,\n onPointerMove,\n children,\n asChild,\n icon,\n iconClassName,\n isLoading = false,\n ...props\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => {\n const Comp = asChild ? Root : 'div';\n const adornment = isLoading ? <Loader2 className=\"tw-animate-spin\" /> : icon;\n\n const handleOnSelect = (event: Event) => {\n // prevents dropdown menu from closing to prevent modal unmounting from dom\n if (asModalTrigger) event.preventDefault();\n onSelect?.(event);\n };\n\n const handlePointerLeave: PointerEventHandler<HTMLDivElement> = (event) => {\n // prevents focus stealing from modal\n if (asModalTrigger) event.preventDefault();\n onPointerLeave?.(event);\n };\n\n const handlePointerMove: PointerEventHandler<HTMLDivElement> = (event) => {\n // prevents focus stealing from modal\n if (asModalTrigger) event.preventDefault();\n onPointerMove?.(event);\n };\n\n return (\n <DropdownMenuPrimitive.Item\n {...props}\n ref={ref}\n onSelect={handleOnSelect}\n onPointerLeave={handlePointerLeave}\n onPointerMove={handlePointerMove}\n className={cn(itemVariants, className)}\n asChild\n >\n <Comp>\n {adornment && <ItemIcon className={iconClassName}>{adornment}</ItemIcon>}\n <Slottable>{children}</Slottable>\n </Comp>\n </DropdownMenuPrimitive.Item>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { cva } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\nconst descriptionVariants = cva(\n [\n 'tw-box-border',\n 'tw-ml-auto',\n 'tw-font-sans',\n 'tw-tracking-normal',\n 'tw-font-normal',\n 'tw-text-xs',\n 'tw-text-muted-foreground',\n ],\n {\n variants: {\n hideOnHover: {\n true: ['group-focus-within:tw-hidden', 'group-hover:tw-hidden'],\n false: [],\n },\n },\n defaultVariants: {},\n },\n);\n\ntype Props = ComponentProps<'span'> & {\n hideOnHover?: boolean;\n};\n\nexport const DropdownMenuItemDescription = ({\n className,\n children,\n hideOnHover = false,\n ...props\n}: Props) => {\n return (\n <span {...props} className={cn(descriptionVariants({ hideOnHover }), className)}>\n {children}\n </span>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.Label>;\n\nexport const DropdownMenuLabel = ({ className, ...props }: Props) => {\n return (\n <DropdownMenuPrimitive.Label\n className={cn(\n 'tw-p-2',\n 'tw-font-medium',\n 'tw-text-xs',\n 'tw-text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\ntype Props<Value> = Omit<\n ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>,\n 'value' | 'onValueChange' | 'defaultValue'\n> & {\n value?: Value;\n defaultValue?: Value;\n onValueChange?: (value: Value) => void;\n};\n\nexport const DropdownMenuRadioGroup = <Value extends string = string>({\n value,\n defaultValue,\n onValueChange,\n ...props\n}: Props<Value>) => {\n const handleChange = (value: string) => {\n onValueChange?.(value as Value);\n };\n\n return (\n <DropdownMenuPrimitive.RadioGroup\n {...props}\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleChange}\n />\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { Loader2 } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { DropdownMenuItemIndicator } from '../DropdownMenuItemIndicator';\nimport { ItemIcon } from '../ItemIcon';\nimport { itemVariants } from '../styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n closeOnSelect?: boolean;\n indicatorAlign?: 'start' | 'end';\n indicator?: 'radio' | 'check' | 'none';\n icon?: ReactNode;\n iconClassName?: string;\n isLoading?: boolean;\n};\n\nexport const DropdownMenuRadioItem = ({\n className,\n children,\n closeOnSelect,\n onSelect,\n indicatorAlign = 'start',\n indicator = 'radio',\n icon,\n iconClassName,\n isLoading = false,\n ...props\n}: Props) => {\n const isAtStart = indicatorAlign === 'start';\n const indicatorEle = isLoading ? (\n <ItemIcon className={iconClassName}>\n <Loader2 className=\"tw-animate-spin\" />\n </ItemIcon>\n ) : (\n <DropdownMenuItemIndicator variant={indicator} />\n );\n\n const handleSelect = (event: Event) => {\n if (!closeOnSelect) event.preventDefault();\n onSelect?.(event);\n };\n\n return (\n <DropdownMenuPrimitive.RadioItem\n className={cn(\n itemVariants,\n 'data-[state=checked]:tw-cursor-default',\n {\n 'data-[state=checked]:tw-bg-neutral-100': indicator === 'none',\n // Semantic brand tint (flips under `[data-theme='dark']`) instead of a\n // hardcoded `tw-bg-sky-100`, which stayed light in dark mode and left the\n // checked item's text near-invisible.\n 'group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-bg-primary/10':\n indicator === 'check',\n },\n className,\n )}\n onSelect={handleSelect}\n {...props}\n >\n {isAtStart && indicatorEle}\n {icon && <ItemIcon className={iconClassName}>{icon}</ItemIcon>}\n <span className=\"tw-flex tw-min-w-0 tw-flex-1 tw-items-center tw-gap-2\">{children}</span>\n {!isAtStart && indicatorEle}\n </DropdownMenuPrimitive.RadioItem>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.Separator>;\n\nexport const DropdownMenuSeparator = ({ className, ...props }: Props) => (\n <DropdownMenuPrimitive.Separator\n className={cn(\n 'tw-relative',\n 'tw-z-10',\n\n // layout\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-w-full',\n\n // separator line\n 'before:tw-content-[\"\"]',\n 'before:tw-w-full',\n 'before:tw-h-px',\n\n 'group-data-[variant=default]/dropdown-menu-content:tw-py-2',\n 'group-data-[variant=default]/dropdown-menu-content:before:tw-bg-neutral-150',\n\n 'group-data-[variant=argo]/dropdown-menu-content:tw-py-1',\n 'group-data-[variant=argo]/dropdown-menu-content:before:tw-bg-border',\n\n className,\n )}\n {...props}\n />\n);\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../../utils';\nimport { useDropdownMenuContext } from '../DropdownMenuContext';\nimport { contentVariants } from '../styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.SubContent>;\n\nexport const DropdownMenuSubContent = ({ className, ...props }: Props) => {\n const { variant } = useDropdownMenuContext();\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n data-variant={variant}\n className={cn(contentVariants, 'tw-z-[1041]', 'tw-p-2', className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n};\n","import type { ComponentProps } from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\n\nimport { ChevronRight } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { itemVariants } from '../styles';\n\ntype Props = ComponentProps<typeof DropdownMenuPrimitive.SubTrigger>;\n\nexport const DropdownMenuSubTrigger = ({ className, children, ...props }: Props) => {\n return (\n <DropdownMenuPrimitive.SubTrigger className={cn(itemVariants, className)} {...props}>\n {children}\n <ChevronRight className=\"tw-ml-auto tw-size-5\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { Trigger } from '@radix-ui/react-dropdown-menu';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof Trigger>;\n\nexport const DropdownMenuTrigger = ({\n ref,\n className,\n ...props\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <Trigger\n {...props}\n ref={ref}\n data-slot=\"dropdown-menu-trigger\"\n className={cn('tw-group/dropdown-menu-trigger', className)}\n />\n);\n","import { useRef } from 'react';\nimport { $createCodeNode } from '@lexical/code';\nimport { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND } from '@lexical/list';\nimport { $createHeadingNode, $createQuoteNode } from '@lexical/rich-text';\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n type LexicalEditor,\n} from 'lexical';\n\nimport {\n ChevronDown,\n Heading1,\n Heading2,\n Heading3,\n List as ListIcon,\n ListOrdered,\n type LucideIcon,\n Quote,\n SquareCode,\n Type,\n} from '../../../../icons';\nimport { cn } from '../../../../utils';\nimport { DropdownMenu } from '../../../DropdownMenu';\nimport { Tooltip } from '../../../Tooltip';\n\nconst BLOCK_TYPE_META = {\n paragraph: { label: 'Normal', icon: Type satisfies LucideIcon, selectable: true },\n h1: { label: 'Heading 1', icon: Heading1 satisfies LucideIcon, selectable: true },\n h2: { label: 'Heading 2', icon: Heading2 satisfies LucideIcon, selectable: true },\n h3: { label: 'Heading 3', icon: Heading3 satisfies LucideIcon, selectable: true },\n bullet: { label: 'Bullet List', icon: ListIcon satisfies LucideIcon, selectable: false },\n number: { label: 'Numbered List', icon: ListOrdered satisfies LucideIcon, selectable: false },\n quote: { label: 'Quote', icon: Quote satisfies LucideIcon, selectable: false },\n code: { label: 'Code Block', icon: SquareCode satisfies LucideIcon, selectable: false },\n} as const;\n\ntype BlockType = keyof typeof BLOCK_TYPE_META;\n\nconst BLOCK_TYPE_OPTIONS = (\n Object.entries(BLOCK_TYPE_META) as [BlockType, (typeof BLOCK_TYPE_META)[BlockType]][]\n)\n .filter(([, meta]) => meta.selectable)\n .map(([value, { label, icon }]) => ({ value, label, icon }));\n\nconst isBlockType = (value: string): value is BlockType =>\n Object.prototype.hasOwnProperty.call(BLOCK_TYPE_META, value);\n\nexport const BlockTypeDropdown = ({\n editor,\n blockType,\n}: {\n editor: LexicalEditor;\n blockType: string;\n}) => {\n const savedSelectionRef = useRef<BaseSelection | null>(null);\n const currentMeta = isBlockType(blockType) ? BLOCK_TYPE_META[blockType] : null;\n const CurrentBlockIcon = currentMeta?.icon ?? Type;\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n savedSelectionRef.current = selection ? selection.clone() : null;\n });\n }\n };\n\n const handleSelect = (type: BlockType) => {\n editor.update(() => {\n if (savedSelectionRef.current) {\n $setSelection(savedSelectionRef.current);\n }\n\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n if (type === 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n return;\n }\n if (type === 'number') {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n return;\n }\n\n const anchorNode = selection.anchor.getNode();\n const element = $getNearestBlockElementAncestorOrThrow(anchorNode);\n\n const newNode =\n type === 'h1' || type === 'h2' || type === 'h3'\n ? $createHeadingNode(type)\n : type === 'quote'\n ? $createQuoteNode()\n : type === 'code'\n ? $createCodeNode()\n : $createParagraphNode();\n\n element.getChildren().forEach((child) => newNode.append(child));\n element.replace(newNode);\n });\n };\n\n return (\n <DropdownMenu onOpenChange={handleOpenChange}>\n <Tooltip tooltip=\"Change block type\" placement=\"top\" triggerAsChild>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n 'tw-flex tw-h-7 tw-cursor-pointer tw-items-center tw-gap-1.5 tw-rounded tw-border-0 tw-bg-transparent tw-px-1.5 tw-text-xs tw-text-neutral-600',\n 'hover:tw-bg-neutral-100',\n )}\n >\n <CurrentBlockIcon className=\"tw-size-4\" />\n {currentMeta?.label ?? 'Normal'}\n <ChevronDown className=\"tw-size-3\" />\n </button>\n </DropdownMenu.Trigger>\n </Tooltip>\n <DropdownMenu.Content align=\"start\" className=\"tw-min-w-40\">\n {BLOCK_TYPE_OPTIONS.map(({ value, label, icon: IconComp }) => (\n <DropdownMenu.Item\n key={value}\n onSelect={() => handleSelect(value)}\n className={cn(\n 'tw-flex tw-items-center tw-gap-2',\n blockType === value && 'tw-bg-secondary-50 tw-text-secondary-500',\n )}\n >\n <IconComp className=\"tw-size-4\" />\n {label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n};\n","import { useRef, useState } from 'react';\nimport type { KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { $createLinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link';\nimport {\n $createTextNode,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n type BaseSelection,\n type LexicalEditor,\n} from 'lexical';\n\nimport { Link as LinkIcon } from '../../../../icons';\nimport { Button } from '../../../Button';\nimport { ButtonGroup } from '../../../ButtonGroup';\nimport { FormGroup } from '../../../FormGroup';\nimport { TextInput } from '../../../Input';\nimport { Label } from '../../../Label';\n\nimport { ToolbarButton } from './ToolbarButton';\n\nconst insertLink = (\n editor: LexicalEditor,\n url: string,\n label: string,\n savedSelection: BaseSelection | null,\n) => {\n editor.update(() => {\n $setSelection(savedSelection);\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const selectedText = selection.getTextContent();\n if (selectedText && label === selectedText) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, url);\n return;\n }\n }\n\n const linkNode = $createLinkNode(url);\n const textNode = $createTextNode(label || url);\n linkNode.append(textNode);\n\n if ($isRangeSelection(selection)) {\n selection.insertNodes([linkNode]);\n }\n });\n};\n\nexport const LinkPanel = ({ editor, isLink }: { editor: LexicalEditor; isLink: boolean }) => {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState('');\n const [label, setLabel] = useState('');\n const savedSelectionRef = useRef<BaseSelection | null>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const handleOpen = () => {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n savedSelectionRef.current = selection ? selection.clone() : null;\n\n if ($isRangeSelection(selection)) {\n const text = selection.getTextContent();\n if (text) setLabel(text);\n }\n });\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n setUrl('');\n setLabel('');\n savedSelectionRef.current = null;\n editor.focus();\n };\n\n const handleSubmit = () => {\n const trimmedUrl = url.trim();\n if (!trimmedUrl) return;\n\n insertLink(editor, trimmedUrl, label.trim(), savedSelectionRef.current);\n handleClose();\n };\n\n const handleKeyDown = (e: ReactKeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n handleClose();\n }\n };\n\n if (isLink) {\n return (\n <ToolbarButton\n active\n onClick={() => editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)}\n tooltip=\"Remove Link\"\n >\n <LinkIcon className=\"tw-size-4\" />\n </ToolbarButton>\n );\n }\n\n return (\n <div className=\"tw-relative\">\n <ToolbarButton active={open} onClick={handleOpen} tooltip=\"Insert Link\">\n <LinkIcon className=\"tw-size-4\" />\n </ToolbarButton>\n {open && (\n <div\n ref={panelRef}\n className=\"tw-absolute tw-left-0 tw-top-full tw-z-50 tw-mt-1 tw-w-80 tw-rounded-md tw-border tw-border-neutral-200 tw-bg-white tw-p-3 tw-shadow-lg\"\n >\n <div className=\"tw-flex tw-flex-col tw-gap-2\">\n <FormGroup>\n <Label htmlFor=\"link-label\" className=\"tw-mb-1 tw-text-xs\">\n Label\n </Label>\n <TextInput\n id=\"link-label\"\n autoFocus\n placeholder=\"Link text\"\n value={label}\n onValueChange={setLabel}\n onKeyDown={handleKeyDown}\n variant=\"secondary\"\n />\n </FormGroup>\n <FormGroup>\n <Label htmlFor=\"link-url\" className=\"tw-mb-1 tw-text-xs\">\n URL\n </Label>\n <TextInput\n id=\"link-url\"\n placeholder=\"https://…\"\n value={url}\n onValueChange={setUrl}\n onKeyDown={handleKeyDown}\n variant=\"secondary\"\n />\n </FormGroup>\n <ButtonGroup>\n <Button size=\"small\" variant=\"outline\" onClick={handleClose}>\n Cancel\n </Button>\n <Button size=\"small\" onClick={handleSubmit} disabled={!url.trim()}>\n Add link\n </Button>\n </ButtonGroup>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import type { ComponentProps, ElementRef, ReactNode, Ref } from 'react';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nconst buttonGroupVariant = cva(\n ['tailwindcss-preflight', 'tw-inline-flex', 'tw-items-center', 'tw-group/button-group'],\n {\n defaultVariants: {\n variant: 'inline',\n space: 'small',\n },\n variants: {\n variant: {\n inline: [],\n block: [\n 'tw-w-full',\n 'tw-flex-col',\n 'sm:tw-flex-row',\n '[&_a]:tw-flex-1',\n '[&>button:not([data-icon-only=true])]:tw-flex-1',\n ],\n },\n space: {\n 'extra-small': 'tw-gap-1',\n 'little-small': 'tw-gap-2',\n small: 'tw-gap-3',\n medium: 'tw-gap-4',\n large: 'tw-gap-6',\n compact: [\n 'tw-border-collapse',\n '!tw-gap-0',\n\n // ensure that focus visible outline is at the top\n '[&>*:focus-visible]:!tw-z-10',\n\n '[&>*:not(:first-child)]:tw-rounded-l-none',\n '[&>*:not(:last-child)]:tw-rounded-r-none',\n '[&>*:not(:last-child)]:tw-border-r-0',\n '[&>*:not(:first-child)]:tw-border-l-0',\n\n // separator\n '[&>*:not(:first-child)]:before:tw-content',\n '[&>*:not(:first-child)]:before:tw-absolute',\n '[&>*:not(:first-child)]:before:tw-left-0',\n '[&>*:not(:first-child)]:before:tw-h-full',\n '[&>*:not(:first-child)]:before:tw-w-px',\n '[&>*:not(:first-child)]:before:tw-bg-black/10',\n ],\n },\n },\n },\n);\n\ntype Props = {\n children: ReactNode;\n className?: string;\n} & VariantProps<typeof buttonGroupVariant> &\n ComponentProps<'div'>;\n\nexport const ButtonGroup = ({\n ref,\n children,\n space = 'small',\n className,\n variant,\n ...rest\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => {\n return (\n <div\n ref={ref}\n {...rest}\n role=\"group\"\n data-variant={variant}\n className={buttonGroupVariant({ variant, className, space })}\n >\n {children}\n </div>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { FormGroupProvider } from './context';\nimport { FormGroupColorInput } from './FormGroupColorInput';\nimport { FormGroupHelp } from './FormGroupHelp';\nimport { FormGroupNumberInput } from './FormGroupNumberInput';\nimport { FormGroupTextarea } from './FormGroupTextarea';\nimport { FormGroupTextInput } from './FormGroupTextInput';\nimport type { FormGroupContext } from './types';\n\n/**\n * Props for `FormGroup`. `state` from `FormGroupContext` (\"default\" | \"error\") propagates to nested inputs\n * and help text via context.\n */\ntype FormGroupProps = {\n children: ReactNode;\n className?: string;\n testId?: string;\n} & FormGroupContext;\n\n/**\n * Label + input + help-text grouping with shared validation state. Provides the chrome for a single field.\n *\n * **When to use:** rendering a label + bare input + help/error text outside `useAppForm` (e.g. one-off\n * filter fields, settings panes). The `state=\"error\"` flips both `FormGroup.TextInput` and `FormGroup.Help`\n * to error styling without per-component wiring.\n * **When NOT to use:** for a full form with validation and submit state, use `useAppForm` from `blocks/Form` —\n * it composes `FormGroup` internally via the typed field connectors.\n * **Composition:** nest a `Label`, then one of `FormGroup.TextInput` / `FormGroup.NumberInput` /\n * `FormGroup.ColorInput` / `FormGroup.Textarea`, optionally followed by `FormGroup.Help`.\n */\nexport const FormGroup = ({ className, children, state, testId }: FormGroupProps) => {\n return (\n <FormGroupProvider value={{ state }}>\n <div data-testid={testId} className={cn('tw-flex tw-flex-col tw-gap-1', className)}>\n {children}\n </div>\n </FormGroupProvider>\n );\n};\n\nFormGroup.Help = FormGroupHelp;\nFormGroup.TextInput = FormGroupTextInput;\nFormGroup.NumberInput = FormGroupNumberInput;\nFormGroup.ColorInput = FormGroupColorInput;\nFormGroup.Textarea = FormGroupTextarea;\n","import { createContext, use } from 'react';\n\nimport type { FormGroupContext } from './types';\n\nconst FormGroupContext = createContext<FormGroupContext>({\n state: 'default',\n});\n\nexport const FormGroupProvider = FormGroupContext;\n\nexport const useFormGroupContext = () => use(FormGroupContext);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\nimport { useIsLegacyBrand } from '../internal/useIsLegacyBrand';\n\nimport { InputGroupAddon } from './InputGroupAddon';\nimport { InputGroupButton } from './InputGroupButton';\nimport { InputGroupInput } from './InputGroupInput';\nimport { InputGroupText } from './InputGroupText';\nimport { InputGroupTextArea } from './InputGroupTextArea';\n\nconst inputGroupVariants = cva(\n [\n 'tailwindcss-preflight',\n 'tw-group',\n\n 'tw-overflow-hidden',\n 'tw-box-border',\n\n // positioning\n 'tw-flex',\n 'tw-items-center',\n\n // base\n 'tw-rounded-[var(--radius-lg,0.25rem)]',\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-neutral-200',\n 'tw-text-neutral-800',\n 'tw-transition',\n\n // focus\n 'has-[:is(input,textarea):focus]:tw-ring-4',\n\n // readonly\n 'has-[:is(input,textarea)[readonly]]:tw-bg-neutral-150',\n 'has-[:is(input,textarea)[readonly]]:focus-within:tw-ring-0',\n 'has-[:is(input,textarea)[readonly]]:tw-border-neutral-150',\n\n // disabled cursor (opacity owned by variant)\n 'has-[:is(input,textarea):disabled]:tw-cursor-not-allowed',\n\n // textarea: top-align addons, allow vertical expansion, own its y-padding\n 'has-[textarea]:tw-items-start',\n\n 'has-[[data-align=block-start]:not(:empty)]:tw-flex-wrap',\n 'has-[[data-align=block-end]:not(:empty)]:tw-flex-wrap',\n '[&>input]:has-[[data-align=block-start]:not(:empty)]:tw-w-auto',\n '[&>input]:has-[[data-align=block-start]:not(:empty)]:tw-flex-1',\n '[&>input]:has-[[data-align=block-end]:not(:empty)]:tw-w-auto',\n '[&>input]:has-[[data-align=block-end]:not(:empty)]:tw-flex-1',\n\n '[&>input]:tw-px-4',\n '[&>input]:has-[[data-align=inline-start]:not(:empty)]:tw-pl-2',\n '[&>input]:has-[[data-align=inline-end]:not(:empty)]:tw-pr-2',\n ],\n {\n defaultVariants: {\n variant: 'primary',\n state: 'default',\n sizing: 'medium',\n focusVariant: 'default',\n },\n compoundVariants: [\n {\n variant: 'secondary',\n state: 'error',\n className: ['tw-bg-error-100'],\n },\n {\n variant: 'secondary',\n state: 'warning',\n className: ['tw-bg-warning-100'],\n },\n {\n variant: 'primary',\n state: 'default',\n focusVariant: 'off',\n className: ['has-[:is(input,textarea):focus]:tw-border-neutral-200'],\n },\n {\n variant: 'secondary',\n state: 'default',\n focusVariant: 'off',\n className: ['has-[:is(input,textarea):focus]:tw-border-neutral-100'],\n },\n {\n variant: ['primary', 'secondary'],\n state: 'error',\n focusVariant: 'on',\n className: ['!tw-border-error-500', '!tw-ring-error-200'],\n },\n {\n variant: ['primary', 'secondary'],\n state: 'warning',\n focusVariant: 'on',\n className: ['!tw-border-warning-500', '!tw-ring-warning-200'],\n },\n // --- argo ---\n {\n variant: 'argo',\n state: 'default',\n className: [\n 'has-[:is(input,textarea):focus]:tw-border-primary',\n 'has-[:is(input,textarea):focus]:tw-ring-primary/50',\n ],\n },\n {\n variant: 'argo',\n state: 'error',\n className: [\n 'tw-border-destructive',\n 'has-[:is(input,textarea):focus]:tw-border-destructive',\n 'has-[:is(input,textarea):focus]:tw-ring-destructive/20',\n ],\n },\n {\n variant: 'argo',\n focusVariant: 'on',\n className: ['!tw-border-primary', '!tw-ring-primary/50'],\n },\n {\n variant: 'argo',\n state: 'error',\n focusVariant: 'on',\n className: ['!tw-border-destructive', '!tw-ring-destructive/20'],\n },\n {\n variant: 'argo',\n state: 'default',\n focusVariant: 'off',\n className: ['has-[:is(input,textarea):focus]:tw-border-input'],\n },\n ],\n variants: {\n focusVariant: {\n default: [],\n on: ['!tw-border-ring', '!tw-ring-ring/30', '!tw-ring-4'],\n off: ['has-[:is(input,textarea):focus]:!tw-ring-0'],\n },\n variant: {\n primary: ['tw-bg-white', 'has-[:is(input,textarea):disabled]:tw-opacity-40'],\n secondary: [\n 'tw-bg-neutral-100',\n 'tw-border-neutral-100',\n 'has-[:is(input,textarea):disabled]:tw-opacity-40',\n ],\n argo: [\n // muted filled input surface — gray, distinct from white containers; not the app-background token\n 'tw-bg-muted',\n 'tw-border-input',\n 'tw-text-foreground',\n 'has-[:is(input,textarea):disabled]:tw-opacity-50',\n // higher specificity than has-[:is(input,textarea):focus] — prevents focus border on readonly\n 'has-[:is(input,textarea)[readonly]:focus]:tw-border-neutral-150',\n ],\n },\n sizing: {\n default: [\n '[&>:is(input,textarea)]:tw-py-2.5',\n '[&>:is(input,textarea)]:tw-leading-[18px]',\n '[&>textarea]:!tw-min-h-[calc(2.5rem-2px)]',\n ],\n small: [\n '[&>:is(input,textarea)]:tw-py-2',\n '[&>:is(input,textarea)]:tw-leading-[16px]',\n '[&>textarea]:!tw-min-h-[calc(2rem-2px)]',\n ],\n medium: [\n '[&>:is(input,textarea)]:tw-py-2',\n '[&>:is(input,textarea)]:tw-leading-[18px]',\n '[&>textarea]:!tw-min-h-[calc(2.25rem-2px)]',\n ],\n },\n state: {\n default: [\n 'has-[:is(input,textarea):focus]:tw-border-ring',\n 'has-[:is(input,textarea):focus]:tw-ring-ring/30',\n ],\n error: [\n 'tw-border-error-500',\n 'has-[:is(input,textarea):focus]:tw-border-error-500',\n 'has-[:is(input,textarea):focus]:tw-ring-error-200',\n ],\n warning: [\n 'tw-border-warning-500',\n 'has-[:is(input,textarea):focus]:tw-border-warning-500',\n 'has-[:is(input,textarea):focus]:tw-ring-warning-200',\n ],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'div'> &\n Omit<VariantProps<typeof inputGroupVariants>, 'variant'> & {\n variant?: Exclude<VariantProps<typeof inputGroupVariants>['variant'], 'argo'>;\n };\n\nconst InputGroupRoot = ({\n ref,\n children,\n state,\n variant,\n sizing,\n focusVariant,\n className,\n ...props\n}: Props & { ref?: Ref<ElementRef<'div'>> }) => {\n const isLegacy = useIsLegacyBrand();\n const effectiveVariant = !isLegacy ? 'argo' : variant;\n const effectiveSizing = effectiveVariant === 'argo' ? 'medium' : sizing;\n return (\n <div\n {...props}\n ref={ref}\n className={cn(\n inputGroupVariants({\n state,\n variant: effectiveVariant,\n sizing: effectiveSizing,\n focusVariant,\n className,\n }),\n )}\n >\n {children}\n </div>\n );\n};\n\nexport const InputGroup = InputGroupRoot as typeof InputGroupRoot & {\n Input: typeof InputGroupInput;\n Addon: typeof InputGroupAddon;\n Button: typeof InputGroupButton;\n TextArea: typeof InputGroupTextArea;\n Text: typeof InputGroupText;\n};\n\nInputGroup.Input = InputGroupInput;\nInputGroup.Addon = InputGroupAddon;\nInputGroup.Button = InputGroupButton;\nInputGroup.TextArea = InputGroupTextArea;\nInputGroup.Text = InputGroupText;\n","import type { ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\n// Padding only fires when the addon actually has content — keeps an empty\n// `<Addon>{maybeNull}</Addon>` from carving 16px out of the input row.\nconst addonVariants = cva(\n [\n 'tw-flex',\n 'tw-items-center',\n 'tw-gap-1',\n\n // Default size for nested Lucide icons in prefix/suffix slots; callers can override on the icon.\n \"[&_svg.lucide:not([class*='tw-size-'])]:tw-size-4\",\n '[&_svg]:tw-shrink-0',\n ],\n {\n defaultVariants: {\n align: 'inline-start',\n },\n variants: {\n align: {\n 'inline-start': ['tw-order-first', '[&:not(:empty)]:tw-pl-4'],\n 'inline-end': ['tw-order-last', '[&:not(:empty)]:tw-pr-4'],\n 'block-start': [\n 'tw-order-first',\n // `tw-w-full` needs to be empty-conditional too — when the addon\n // has no content the root stays in flex-row, and a 100%-wide\n // empty addon would claim half of the input row beside the input.\n '[&:not(:empty)]:tw-w-full',\n '[&:not(:empty)]:tw-px-4',\n '[&:not(:empty)]:tw-py-1.5',\n ],\n 'block-end': [\n 'tw-order-last',\n '[&:not(:empty)]:tw-w-full',\n '[&:not(:empty)]:tw-px-4',\n '[&:not(:empty)]:tw-py-1.5',\n ],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'div'> & VariantProps<typeof addonVariants>;\n\nexport const InputGroupAddon = ({\n children,\n align = 'inline-start',\n className,\n ...props\n}: Props) => (\n <div {...props} data-align={align} className={cn(addonVariants({ align, className }))}>\n {children}\n </div>\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\nimport { Button } from '../Button';\n\ntype ButtonProps = ComponentProps<typeof Button>;\n\ntype Props = Omit<ButtonProps, 'size' | 'block' | 'variant'>;\n\nexport const InputGroupButton = ({\n ref,\n className,\n tabIndex = -1,\n ...props\n}: Props & { ref?: Ref<ElementRef<'button'>> }) => (\n <Button\n {...props}\n tabIndex={tabIndex}\n ref={ref}\n variant=\"invisible\"\n size=\"icon-sm\"\n className={cn('tw-size-5', '[&_svg]:tw-text-muted-foreground', className)}\n />\n);\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'input'>;\n\nexport const InputGroupInput = ({\n ref,\n className,\n ...inputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => (\n <input\n {...inputProps}\n ref={ref}\n className={cn(\n 'tw-w-full',\n 'tw-bg-transparent',\n 'tw-outline-none',\n\n // font\n 'tw-font-sans',\n 'tw-text-sm',\n\n // placeholder\n 'placeholder:tw-text-neutral-400',\n 'placeholder:tw-font-normal',\n\n // disabled\n 'disabled:tw-cursor-not-allowed',\n\n className,\n )}\n />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'span'>;\n\nexport const InputGroupText = ({ className, ...props }: Props) => (\n <span\n className={cn(\n 'tw-flex',\n 'tw-items-center',\n 'tw-gap-2',\n 'tw-text-sm',\n 'tw-text-muted-foreground',\n '[&_svg]:tw-pointer-events-none',\n '[&_svg:not([class*=\"tw-size-\"])]:tw-size-4',\n className,\n )}\n {...props}\n />\n);\n","import type { ChangeEventHandler, ComponentProps, ElementRef, FocusEventHandler, Ref } from 'react';\nimport TextareaAutosize from 'react-textarea-autosize';\n\nimport { cn } from '../../utils';\n\ntype TextareaNativeProps = Omit<\n ComponentProps<typeof TextareaAutosize>,\n 'value' | 'defaultValue' | 'rows' | 'maxRows'\n>;\n\ntype Props = TextareaNativeProps & {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n maxRows?: number | 'unlimited';\n disableResize?: boolean;\n};\n\nexport const InputGroupTextArea = ({\n ref,\n className,\n onChange,\n onValueChange,\n value,\n defaultValue,\n onBlur,\n onValueBlur,\n disableResize = false,\n minRows = 1,\n maxRows = 4,\n ...props\n}: Props & { ref?: Ref<ElementRef<'textarea'>> }) => {\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (event) => {\n onValueChange?.(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLTextAreaElement> = (event) => {\n onValueBlur?.(event.target.value);\n onBlur?.(event);\n };\n\n return (\n <TextareaAutosize\n {...props}\n ref={ref}\n value={value ?? undefined}\n defaultValue={defaultValue ?? undefined}\n onChange={handleChange}\n onBlur={handleBlur}\n minRows={minRows}\n maxRows={maxRows === 'unlimited' ? undefined : maxRows}\n className={cn(\n 'tw-w-full',\n 'tw-bg-transparent',\n 'tw-outline-none',\n 'tw-px-4',\n\n // font\n 'tw-font-sans',\n 'tw-text-sm',\n\n // placeholder\n 'placeholder:tw-text-neutral-400',\n 'placeholder:tw-font-normal',\n\n // disabled\n 'disabled:tw-cursor-not-allowed',\n {\n 'tw-resize-none': disableResize,\n },\n\n className,\n )}\n />\n );\n};\n","import { useRef, useState } from 'react';\nimport type {\n ChangeEventHandler,\n ComponentProps,\n ElementRef,\n FocusEventHandler,\n MouseEventHandler,\n Ref,\n} from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\nimport { X } from '../../icons';\nimport { cn, createChangeInputEvent, mergeRefs } from '../../utils';\n\nimport { ColorPicker } from './ColorPicker';\nimport { coerceHexInputValue, isCompleteHexColor } from './utils';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'state' | 'sizing'\n>;\n\ntype InputGroupInputProps = Omit<ComponentProps<typeof InputGroup.Input>, 'value' | 'defaultValue'>;\n\ntype Props = InputGroupProps &\n InputGroupInputProps & {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n allowClear?: boolean;\n };\n\nexport const ColorInput = ({\n ref,\n\n // group props\n state,\n variant,\n focusVariant,\n sizing,\n className,\n\n // own props\n value: valueProp,\n onValueChange,\n onValueBlur,\n onChange,\n onBlur,\n defaultValue,\n allowClear = false,\n\n // input props\n disabled,\n readOnly,\n ...restInputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const inputRef = useRef<ElementRef<'input'>>(null);\n\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const isControlled = valueProp !== undefined;\n\n const value = isControlled ? (valueProp ?? '') : internalValue;\n const setValue = (nextValue: string) => {\n if (!isControlled) setInternalValue(nextValue);\n onValueChange?.(nextValue);\n };\n\n const canClear = allowClear && !!value && !disabled && !readOnly;\n const swatchColor = coerceHexInputValue(value);\n const isValidSwatch = isCompleteHexColor(swatchColor);\n\n // Preserve raw text while the user is typing — sanitise on blur.\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n setValue(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n const newValue = event.target.value;\n const sanitizedNewValue = coerceHexInputValue(newValue);\n\n if (sanitizedNewValue !== newValue) {\n // In controlled mode, let the parent decide whether to apply the\n // sanitised value via `onValueChange` — don't fight its `value` prop.\n if (!isControlled) event.target.value = sanitizedNewValue;\n setValue(sanitizedNewValue);\n }\n\n onValueBlur?.(sanitizedNewValue);\n onBlur?.(event);\n };\n\n const handlePickerChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n setValue(coerceHexInputValue(event.target.value));\n onChange?.(event);\n };\n\n const handleClear: MouseEventHandler<HTMLButtonElement> = () => {\n if (!inputRef.current) return;\n inputRef.current.value = '';\n setValue('');\n onChange?.(createChangeInputEvent(inputRef.current));\n };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n >\n <InputGroup.Addon\n align=\"inline-start\"\n className={cn(\n { '-tw-ml-7 tw-opacity-0': !value },\n 'tw-transition-[opacity,margin]',\n 'tw-ease-linear',\n 'tw-duration-200',\n )}\n >\n <div\n style={isValidSwatch ? { background: swatchColor } : undefined}\n className={cn(\n 'tw-size-5',\n 'tw-shrink-0',\n 'tw-rounded-sm',\n 'tw-border',\n 'tw-border-solid',\n 'tw-border-neutral-300',\n {\n 'tw-bg-[linear-gradient(to_top_right,transparent_calc(50%_-_1px),theme(colors.red.300)_calc(50%_-_1px),theme(colors.red.300)_calc(50%_+_1px),transparent_calc(50%_+_1px))]':\n !isValidSwatch,\n },\n )}\n />\n </InputGroup.Addon>\n\n <InputGroup.Input\n {...restInputProps}\n type=\"text\"\n ref={mergeRefs(ref ?? null, inputRef)}\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n readOnly={readOnly}\n />\n\n <InputGroup.Addon align=\"inline-end\">\n {canClear && (\n <InputGroup.Button\n // prevents input focus stealing\n onMouseDown={(event) => event.preventDefault()}\n onClick={handleClear}\n aria-label=\"Clear color\"\n >\n <X className=\"tw-size-4\" />\n </InputGroup.Button>\n )}\n <ColorPicker\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n onChange={handlePickerChange}\n />\n </InputGroup.Addon>\n </InputGroup>\n );\n};\n","import { type ComponentProps, type ElementRef, useRef } from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\nimport { Pipette } from '../../icons';\n\nimport { coerceColorPickerValue, showPicker } from './utils';\n\ntype Props = Omit<ComponentProps<'input'>, 'type'>;\n\nexport const ColorPicker = ({ value, disabled, readOnly, ...props }: Props) => {\n const pickerRef = useRef<ElementRef<'input'>>(null);\n\n const handleOpenPicker = () => {\n if (!pickerRef.current) return;\n showPicker(pickerRef.current);\n };\n\n return (\n <div className=\"tw-relative\">\n <input\n {...props}\n ref={pickerRef}\n type=\"color\"\n value={coerceColorPickerValue(value)}\n tabIndex={-1}\n aria-hidden\n className=\"tw-pointer-events-none tw-absolute tw-left-0 tw-top-full tw-size-0 tw-opacity-0\"\n disabled={disabled}\n readOnly={readOnly}\n />\n <InputGroup.Button\n onMouseDown={(event) => event.preventDefault()}\n disabled={disabled || readOnly}\n onClick={handleOpenPicker}\n aria-label=\"Pick color\"\n >\n <Pipette className=\"tw-size-4\" />\n </InputGroup.Button>\n </div>\n );\n};\n","import type { ComponentProps } from 'react';\n\nconst HEX_CHARSET = /^[0-9a-fA-F]+$/;\n// `#` + 3, 4, 6, or 8 hex digits — every length CSS accepts as a hex color.\nconst COMPLETE_HEX_PATTERN = /^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n// Longest hex body CSS accepts (`#rrggbbaa` without the hash).\nconst MAX_HEX_BODY_LENGTH = 8;\n// Native <input type=\"color\"> default when fed anything unparseable.\nconst PICKER_FALLBACK = '#000000';\n\nconst extractHexBody = (value: unknown): string | null => {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n if (trimmed === '') return null;\n return trimmed.startsWith('#') ? trimmed.slice(1) : trimmed;\n};\n\nexport const isCompleteHexColor = (value: string): boolean => COMPLETE_HEX_PATTERN.test(value);\n\n// @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker\nexport const showPicker = (input: HTMLInputElement) => {\n const isShowPickerSupported = 'showPicker' in HTMLInputElement.prototype;\n isShowPickerSupported ? input.showPicker() : input.click();\n};\n\n/**\n * Coerces free-form text into a partial hex color for the visible text\n * input. Allows up to 8 hex digits to support `#rrggbbaa` (RGBA / alpha).\n *\n * Behaviour:\n * - empty / null / undefined / non-string → `''`\n * - trims surrounding whitespace\n * - prepends `#` when the user types raw hex without it\n * - keeps only the leading run of valid hex digits, dropping the rest\n * - caps total length at `# + 8` hex digits\n * - returns `''` when no valid hex digits remain (e.g. bare `#`, `zz`) so\n * the input doesn't sit on a lonely `#`\n *\n * Note: the result may be a *prefix* (e.g. `#a`, `#ab`) that is not yet a\n * valid CSS color — gate any rendering on `isCompleteHexColor`.\n */\nexport const coerceHexInputValue = (value?: string | null): string => {\n const body = extractHexBody(value);\n if (body === null) return '';\n const [validBody] = body.match(/^[0-9a-fA-F]+/) ?? [];\n if (!validBody) return '';\n return `#${validBody.slice(0, MAX_HEX_BODY_LENGTH)}`;\n};\n\n/**\n * Coerces any value into the strict lowercase `#rrggbb` form required by the\n * native `<input type=\"color\">`. Anything the picker can't render is\n * collapsed to `#000000`.\n *\n * - 3-digit shorthand (`#abc`) → expanded to 6 digits (`#aabbcc`)\n * - 4/8-digit RGBA → alpha channel is dropped\n * - invalid characters, wrong length, or non-string types → `#000000`\n *\n * The native picker silently lowercases its value; we lowercase here too so\n * controlled consumers see the same string round-trip.\n */\nexport const coerceColorPickerValue = (value: ComponentProps<'input'>['value'] | null) => {\n const body = extractHexBody(value);\n if (body === null || !HEX_CHARSET.test(body)) return PICKER_FALLBACK;\n\n if (body.length === 3 || body.length === 4) {\n const [r, g, b] = body;\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\n }\n if (body.length === 6 || body.length === 8) {\n return `#${body.slice(0, 6).toLowerCase()}`;\n }\n return PICKER_FALLBACK;\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { ColorInput } from '../../blocks/ColorInput';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof ColorInput>, 'state'>;\n\nexport const FormGroupColorInput = ({\n ref,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const { state } = useFormGroupContext();\n return <ColorInput state={state} {...props} ref={ref} />;\n};\n","import type { ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst helpVariants = cva(['tw-m-0', 'tw-text-xs'], {\n defaultVariants: {\n state: 'default',\n },\n variants: {\n state: {\n default: ['tw-text-muted-foreground'],\n error: ['tw-text-destructive'],\n warning: ['tw-text-warning-500'],\n },\n },\n});\n\ntype Props = {\n className?: string;\n children?: ReactNode;\n testId?: string;\n} & VariantProps<typeof helpVariants>;\n\nexport const HelpBlock = ({ children, className, state = 'default', testId }: Props) => {\n if (!children) return null;\n\n return (\n <p data-testid={testId} className={helpVariants({ state, className })}>\n {children}\n </p>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { HelpBlock } from '../HelpBlock';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof HelpBlock>, 'testId' | 'state'>;\n\nexport const FormGroupHelp = ({ children, ...rest }: Props) => {\n const formGroupContext = useFormGroupContext();\n\n return (\n <HelpBlock state={formGroupContext.state} {...rest}>\n {children}\n </HelpBlock>\n );\n};\n","import type {\n ChangeEvent,\n ChangeEventHandler,\n ComponentProps,\n ElementRef,\n FocusEventHandler,\n ReactNode,\n Ref,\n} from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'state' | 'sizing'\n>;\n\ntype InputGroupInputProps = Omit<\n ComponentProps<typeof InputGroup.Input>,\n 'value' | 'defaultValue' | 'type' | 'prefix'\n>;\n\ntype Props = InputGroupProps &\n InputGroupInputProps & {\n value?: number | null;\n defaultValue?: number | null;\n onValueChange?: (value: number | null) => void;\n onValueBlur?: (value: number | null) => void;\n prefix?: ReactNode;\n suffix?: ReactNode;\n };\n\nconst toNumberOrNull = (event: ChangeEvent<HTMLInputElement>) =>\n Number.isNaN(event.target.valueAsNumber) ? null : event.target.valueAsNumber;\n\nexport const NumberInput = ({\n ref,\n state,\n variant,\n focusVariant,\n sizing,\n className,\n\n value,\n defaultValue,\n onValueChange,\n onValueBlur,\n onChange,\n onBlur,\n\n prefix,\n suffix,\n\n ...inputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n onValueChange?.(toNumberOrNull(event));\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n onValueBlur?.(toNumberOrNull(event));\n onBlur?.(event);\n };\n\n const isControlled = value !== undefined;\n const valueProp = isControlled ? { value: value ?? '' } : { defaultValue: defaultValue ?? '' };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n >\n {prefix && <InputGroup.Addon align=\"inline-start\">{prefix}</InputGroup.Addon>}\n <InputGroup.Input\n {...inputProps}\n {...valueProp}\n ref={ref}\n type=\"number\"\n onChange={handleChange}\n onBlur={handleBlur}\n />\n {suffix && <InputGroup.Addon align=\"inline-end\">{suffix}</InputGroup.Addon>}\n </InputGroup>\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { NumberInput } from '../../blocks/NumberInput';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof NumberInput>, 'state'>;\n\nexport const FormGroupNumberInput = ({\n ref,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const { state } = useFormGroupContext();\n return <NumberInput {...props} ref={ref} state={state} />;\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { InputGroup } from '../../components/InputGroup';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'sizing' | 'focusVariant' | 'state'\n>;\n\ntype TextareaNativeProps = Omit<\n ComponentProps<typeof InputGroup.TextArea>,\n 'value' | 'defaultValue' | 'rows' | 'maxRows'\n>;\n\ntype TextareaOwnProps = {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n onValueBlur?: (value: string) => void;\n maxRows?: number | 'unlimited';\n disableResize?: boolean;\n containerClassName?: string;\n};\n\ntype Props = InputGroupProps & TextareaNativeProps & TextareaOwnProps;\n\n/**\n * Multi-line text input. Chrome resolves from the active brand automatically: a modern brand always\n * renders argo (any `variant` is ignored), while `variant` only tunes the legacy-brand chrome.\n */\nexport const Textarea = ({\n ref,\n containerClassName,\n\n // group props\n state = 'default',\n variant,\n sizing,\n focusVariant,\n\n ...rest\n}: Props & { ref?: Ref<ElementRef<'textarea'>> }) => {\n return (\n <InputGroup\n state={state}\n sizing={sizing}\n focusVariant={focusVariant}\n variant={variant}\n className={containerClassName}\n >\n <InputGroup.TextArea {...rest} ref={ref} />\n </InputGroup>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { Textarea } from '../../blocks/Textarea';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof Textarea>, 'state'>;\n\nexport const FormGroupTextarea = (props: Props) => {\n const { state } = useFormGroupContext();\n return <Textarea state={state} {...props} />;\n};\n","import { useRef, useState } from 'react';\nimport type {\n ChangeEventHandler,\n ComponentProps,\n ElementRef,\n FocusEventHandler,\n MouseEventHandler,\n ReactNode,\n Ref,\n} from 'react';\n\nimport { X } from '../../icons';\nimport { cn, createChangeInputEvent, mergeRefs } from '../../utils';\nimport { InputGroup } from '../InputGroup/InputGroup';\n\nimport { genInputTestId } from './utils';\n\ntype InputGroupProps = Pick<\n ComponentProps<typeof InputGroup>,\n 'variant' | 'focusVariant' | 'sizing' | 'state'\n>;\n\ntype OwnProps = {\n prefix?: ReactNode;\n rightSuffix?: ReactNode;\n rightSuffixVariant?: 'addon' | 'default';\n leftSuffix?: ReactNode;\n allowClear?: boolean;\n onClear?: () => void;\n testId?: string;\n value?: ComponentProps<'input'>['value'] | null;\n defaultValue?: ComponentProps<'input'>['defaultValue'] | null;\n};\n\n/**\n * Props for `Input`. Combines `InputGroup` chrome (variant / sizing / state / focusVariant) with\n * input-specific slots (`prefix`, `leftSuffix`, `rightSuffix`, `allowClear`).\n */\ntype Props = InputGroupProps &\n OwnProps &\n Omit<ComponentProps<'input'>, 'prefix' | 'value' | 'defaultValue'>;\n\n/**\n * Low-level text input with `InputGroup` chrome — addons, clear button, sizing, focus variants.\n *\n * **When to use:** when you need an input with prefix / suffix slots or a clear button and don't need the\n * `onValueChange` convenience callback. Rare on its own — most call sites should use `TextInput`.\n * **When NOT to use:** for plain text fields use `TextInput`; for fields inside a `FormGroup` use\n * `FormGroup.TextInput`; for search use `SearchInput`; for forms with validation use `useAppForm`.\n * **Composition:** wrap in `FormGroup` for shared error state, or render directly as a controlled input.\n */\nexport const Input = ({\n ref: forwardedRef,\n state = 'default',\n sizing = 'default',\n className,\n prefix = null,\n rightSuffix = null,\n rightSuffixVariant = 'default',\n leftSuffix = null,\n allowClear = false,\n onClear,\n disabled = false,\n testId: prefixTestId = '',\n autoFocus = false,\n id,\n name,\n variant,\n readOnly,\n type = 'text',\n focusVariant = 'default',\n onChange,\n onBlur,\n value,\n defaultValue,\n ...inputProps\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const [hasUncontrolledValue, setHasUncontrolledValue] = useState(() => !!defaultValue);\n const hasValue = !!value || hasUncontrolledValue;\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const testId = genInputTestId(prefixTestId);\n const isClearButtonVisible = (hasValue && !disabled && !readOnly) || !!onClear;\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const val = event.target.value;\n setHasUncontrolledValue(val !== '');\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n const val = event.target.value;\n setHasUncontrolledValue(val !== '');\n onBlur?.(event);\n };\n\n const handleClear: MouseEventHandler<HTMLButtonElement> = () => {\n if (inputRef.current === null) return;\n inputRef.current.value = ''; // necessary for uncontrolled state\n inputRef.current.focus();\n onClear?.();\n setHasUncontrolledValue(false);\n onChange?.(createChangeInputEvent(inputRef.current));\n };\n\n const isControlled = value !== undefined;\n const valueProp = isControlled ? { value: value ?? '' } : { defaultValue: defaultValue ?? '' };\n\n return (\n <InputGroup\n state={state}\n variant={variant}\n sizing={sizing}\n focusVariant={focusVariant}\n className={className}\n data-testid={testId.inputWrapper}\n >\n {prefix && <InputGroup.Addon align=\"inline-start\">{prefix}</InputGroup.Addon>}\n\n <InputGroup.Input\n {...inputProps}\n {...valueProp}\n autoFocus={autoFocus}\n type={type}\n onChange={handleChange}\n onBlur={handleBlur}\n ref={mergeRefs(forwardedRef ?? null, inputRef)}\n disabled={disabled}\n id={id}\n name={name}\n readOnly={readOnly}\n data-testid={testId.input}\n />\n\n {(leftSuffix || allowClear || rightSuffix) && (\n <InputGroup.Addon align=\"inline-end\">\n {leftSuffix}\n {allowClear && isClearButtonVisible && (\n <InputGroup.Button\n aria-label=\"Clear\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClear}\n data-testid={testId.clearButton}\n >\n <X className=\"tw-size-4\" />\n </InputGroup.Button>\n )}\n {rightSuffix && (\n <div\n className={cn({\n 'tw-whitespace-nowrap tw-bg-muted tw-px-4 -tw-mr-4 tw-py-2.5':\n rightSuffixVariant === 'addon',\n })}\n >\n {rightSuffix}\n </div>\n )}\n </InputGroup.Addon>\n )}\n </InputGroup>\n );\n};\n","import { createPrefixedString } from '../../utils';\n\nexport const genInputTestId = (prefix: string = '') => {\n const ps = createPrefixedString(prefix);\n return {\n toString: () => prefix,\n inputWrapper: ps`input-wrapper`,\n input: ps`input`,\n clearButton: ps`clear-button`,\n };\n};\n","import type { ChangeEventHandler, ComponentProps, ElementRef, FocusEventHandler, Ref } from 'react';\n\nimport { Input } from '../Input';\n\ntype NativeProps = Omit<\n ComponentProps<typeof Input>,\n 'type' | 'value' | 'defaultValue' | 'accept' | 'step'\n>;\n\ntype OwnProps = {\n value?: string | null;\n defaultValue?: string | null;\n /** Called with the unwrapped string value on every change. For the raw event use `onChange`. */\n onValueChange?: (value: string) => void;\n /** Called with the unwrapped string value on blur. For the raw event use `onBlur`. */\n onValueBlur?: (value: string) => void;\n type?: 'text' | 'email' | 'password' | 'datetime-local' | 'date';\n};\n\n/**\n * Props for `TextInput`. Extends `Input` with string-typed `value` / `defaultValue` and convenience\n * `onValueChange` / `onValueBlur` callbacks. `null` / `undefined` are coerced to empty strings.\n */\nexport type Props = OwnProps & NativeProps;\n\nconst sanitizeTextInputValue = (value: string | null | undefined) => {\n if (typeof value === 'string' && value.trim() === '') return '';\n return value;\n};\n\n/**\n * Standard text input with a string-only API. The default choice for a bare text input.\n *\n * **When to use:** any plain text / email / password / date-input field outside `useAppForm`. Pair with\n * `onValueChange` instead of unwrapping `event.target.value` from `onChange`.\n * **When NOT to use:** for fields inside a labelled group use `FormGroup.TextInput`; for forms with\n * validation use `useAppForm` + `field.TextField`; for search use `SearchInput`.\n * **Composition:** wrap in a `FormGroup` for shared error / help-text state, or render directly inside\n * page layouts. Chrome resolves from the active brand automatically: a modern brand always renders argo\n * (any `variant` is ignored), while `variant` only tunes the legacy-brand chrome.\n */\nexport const TextInput = ({\n ref,\n value,\n defaultValue,\n type = 'text',\n variant,\n onValueChange,\n onChange,\n onValueBlur,\n onBlur,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n onValueChange?.(event.target.value);\n onChange?.(event);\n };\n\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n onValueBlur?.(event.target.value);\n onBlur?.(event);\n };\n\n return (\n <Input\n {...props}\n ref={ref}\n onChange={handleChange}\n onBlur={handleBlur}\n type={type}\n variant={variant}\n value={sanitizeTextInputValue(value)}\n defaultValue={sanitizeTextInputValue(defaultValue)}\n />\n );\n};\n","import type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { TextInput } from '../Input';\n\nimport { useFormGroupContext } from './context';\n\ntype Props = Omit<ComponentProps<typeof TextInput>, 'state'>;\n\nexport const FormGroupTextInput = ({\n ref,\n ...props\n}: Props & { ref?: Ref<ElementRef<'input'>> }) => {\n const { state } = useFormGroupContext();\n return <TextInput state={state} {...props} ref={ref} />;\n};\n","import type { LabelProps as RLabelProps } from '@radix-ui/react-label';\nimport * as RLabel from '@radix-ui/react-label';\n\nimport { cn } from '../../utils';\n\ntype LabelProps = { id?: string | number; htmlFor?: string | number } & Omit<\n RLabelProps,\n 'id' | 'htmlFor'\n>;\n\nconst Optional = ({ className }: { className?: string }) => (\n <span className={cn('tw-text-muted-foreground', className)}>(optional)</span>\n);\n\nexport const Label = ({ className, children, id, htmlFor, ...rest }: LabelProps) => {\n return (\n <RLabel.Root\n {...rest}\n id={id?.toString()}\n htmlFor={htmlFor?.toString()}\n className={cn(\n 'tw-m-0 tw-text-foreground tw-font-normal peer-disabled:tw-opacity-50',\n className,\n )}\n >\n {children}\n </RLabel.Root>\n );\n};\n\nLabel.Optional = Optional;\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../../../utils';\nimport { Tooltip } from '../../../Tooltip';\n\nexport const ToolbarButton = ({\n active,\n disabled,\n onClick,\n tooltip,\n children,\n className: extraClassName,\n}: {\n active?: boolean;\n disabled?: boolean;\n onClick: () => void;\n tooltip: ReactNode;\n children: ReactNode;\n className?: string;\n}) => (\n <Tooltip tooltip={tooltip} placement=\"top\" triggerAsChild>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n className={cn(\n 'tw-flex tw-h-7 tw-min-w-7 tw-cursor-pointer tw-items-center tw-justify-center tw-rounded tw-border-0 tw-bg-transparent tw-px-1 tw-text-xs tw-text-neutral-600',\n 'hover:tw-bg-neutral-100 disabled:tw-cursor-not-allowed disabled:tw-opacity-30',\n active && 'tw-bg-secondary-100 tw-text-secondary-500',\n extraClassName,\n )}\n >\n {children}\n </button>\n </Tooltip>\n);\n","export const ToolbarDivider = () => <div className=\"tw-mx-0.5 tw-h-5 tw-w-px tw-bg-neutral-200\" />;\n","import type { EditorThemeClasses } from 'lexical';\n\n/**\n * Lexical editor theme — maps node types to CSS classes.\n * The editor container uses `tw-prose` so semantic elements (headings, lists, blockquotes, etc.)\n * are styled by Tailwind Typography. We only need explicit classes for text formatting\n * (bold, italic, etc.) because Lexical renders those as `<span>` elements.\n */\nexport const editorTheme: EditorThemeClasses = {\n link: 'tw-cursor-pointer !tw-text-primary tw-underline',\n text: {\n bold: 'tw-font-bold',\n italic: 'tw-italic',\n strikethrough: 'tw-line-through',\n underline: 'tw-underline',\n code: 'tw-rounded tw-bg-muted tw-px-1 tw-py-0.5 tw-font-mono tw-text-[0.85em]',\n },\n list: {\n ol: '!tw-list-decimal',\n ul: '!tw-list-disc',\n checklist: '!tw-list-none !tw-pl-0',\n listitemChecked: [\n 'tw-relative !tw-pl-6 tw-list-none tw-outline-none tw-line-through tw-text-muted-foreground',\n 'before:tw-content-[\"\"] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',\n 'before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid',\n 'before:tw-bg-primary before:tw-border-primary before:tw-cursor-pointer',\n 'after:tw-content-[\"\"] after:tw-absolute after:tw-left-[5.5px] after:tw-top-[5.5px]',\n 'after:tw-w-1 after:tw-h-2 after:tw-border-primary-foreground after:tw-border-solid',\n 'after:tw-border-r-[1.5px] after:tw-border-b-[1.5px] after:tw-border-t-0 after:tw-border-l-0',\n 'after:tw-rotate-45',\n ].join(' '),\n listitemUnchecked: [\n 'tw-relative !tw-pl-6 tw-list-none tw-outline-none',\n 'before:tw-content-[\"\"] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',\n 'before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid',\n 'before:tw-border-input before:tw-bg-background before:tw-cursor-pointer',\n ].join(' '),\n },\n};\n"]}