@keboola/design 4.3.1 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/classNames.ts","../src/utils/copyToClipboard.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/Skeleton/Skeleton.tsx","../src/icons/index.ts","../src/icons/Keboola.tsx","../src/components/Button/styles.ts","../src/components/Button/Button.tsx","../src/components/Clipboard/Clipboard.tsx","../src/blocks/ClipboardButton/ClipboardButton.tsx","../src/components/ZoomableSvg/ZoomableSvg.tsx","../src/blocks/MermaidDiagram/MermaidDiagram.tsx"],"names":["jsx","Root","jsxs","cva","useState","text","useId","useRef","useEffect"],"mappings":"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","file":"mermaid.js","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","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","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","export * from 'lucide-react';\nexport type { LucideIcon, LucideProps } from 'lucide-react';\n\nexport { Keboola } from './Keboola';\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","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 // 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 { 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","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","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","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"]}
1
+ {"version":3,"sources":["../src/utils/classNames.ts","../src/utils/copyToClipboard.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/Skeleton/Skeleton.tsx","../src/icons/index.ts","../src/icons/Keboola.tsx","../src/components/Button/styles.ts","../src/components/Button/Button.tsx","../src/components/Clipboard/Clipboard.tsx","../src/blocks/ClipboardButton/ClipboardButton.tsx","../src/components/ZoomableSvg/ZoomableSvg.tsx","../src/blocks/MermaidDiagram/MermaidDiagram.tsx"],"names":["jsx","Root","jsxs","cva","useState","text","useId","useRef","useEffect"],"mappings":"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","file":"mermaid.js","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","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","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","export * from 'lucide-react';\nexport type { LucideIcon, LucideProps } from 'lucide-react';\n\nexport { Keboola } from './Keboola';\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","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 { 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","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","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","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"]}