@keboola/design 4.0.0 → 4.1.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/constants/keyCodes.ts","../src/utils/classNames.ts","../src/utils/copyToClipboard.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/utils/escapeStringRegexp.ts","../src/components/HelpBlock/HelpBlock.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/CodeEditor/ButtonToolbar.tsx","../src/components/CodeEditor/helpers.ts","../src/components/Kbd/KbdSeparator.tsx","../src/components/Kbd/KbdGroup.tsx","../src/components/Kbd/styles.ts","../src/components/Kbd/Kbd.tsx","../src/components/CodeEditor/ToggleComponentHelp.tsx","../src/components/CodeEditor/CodeEditor.tsx","../src/components/CodeEditor/activeQueryHighlight.ts","../src/components/CodeEditor/highlighting.ts","../src/components/CodeEditor/search.ts","../src/components/CodeEditor/SqlEditor.tsx","../src/components/MergeEditor/constants.ts","../src/components/MergeEditor/AcceptControls/AcceptButton.tsx","../src/components/MergeEditor/AcceptControls/AcceptControls.tsx","../src/components/MergeEditor/decorations.ts","../src/components/MergeEditor/MergePane.tsx","../src/components/MergeEditor/useScrollSync.ts","../src/components/MergeEditor/MergeEditor.tsx"],"names":["extendTailwindMerge","clsx","createContext","use","keboolaLegacy","cva","Portal","jsx","Content","Root","Trigger","useState","jsxs","lucide_react_star","forwardRef","Slottable","text","colors","githubLightInit","python","sql","StreamLanguage","sfsql","PLSQL","r","shell","javascript","json","Children","Fragment","useMemo","linter","jsonParseLinter","EditorView","EditorState","completeAnyWord","keymap","autocompletion","cmPlaceholder","unifiedMergeView","CodeMirror","Decoration","view","ViewPlugin","GutterMarker","StateEffect","StateField","gutter","RangeSet","BASIS_SETUP","useRef","defaultKeymap","installExtensions","useEffect","useCallback","RangeSetBuilder","gutterLineClass","theme","EMPTY_LINES","EMPTY_CLASSIFICATION"],"mappings":"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","file":"editors.cjs","sourcesContent":["export const keyCodes = {\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SPACE: ' ',\n};\n","import { clsx } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n prefix: 'tw-',\n});\n\ntype Mapping = Record<string, unknown>;\ntype Argument = string | boolean | undefined | Mapping;\n\nexport const cn = (...classes: Argument[]) => twMerge(clsx(...classes));\n\nexport const extractExternalClasses = (className?: string) => {\n if (!className) {\n return ['', ''];\n }\n\n const [extCls, rest] = className.split(' ').reduce(\n (acc, cls) => {\n acc[cls.startsWith('extCls-') ? 0 : 1].push(cls);\n return acc;\n },\n [[], []] as [string[], string[]],\n );\n\n return [extCls.join(' '), rest.join(' ')];\n};\n","export const copyToClipboard = (text: string) => {\n return navigator.clipboard.writeText(text);\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 /** @internal Transitional opt-in; removed once consumers wrap argo sections in `<ThemeProvider>`. */\n argo?: boolean;\n} & Omit<ComponentProps<typeof Content>, 'side'> &\n VariantProps<typeof tooltipVariants>;\n\nexport const TooltipContent = ({\n className,\n variant,\n argo,\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 || argo === true;\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' | 'argo'>;\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 argo,\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 argo={argo}\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","// 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 { 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","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-secondary-500',\n 'focus-visible:tw-ring-4',\n 'focus-visible:tw-ring-secondary-200',\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 * `argo` opts into the Argo redesign styling (PageHeader / sidebar contexts) —\n * required when nested inside `PageHeader` or `PageLayout.Footer` slots.\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 /** @internal Transitional opt-in; removed once consumers wrap argo sections in `<ThemeProvider>`. */\n argo?: 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 argo = false,\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 || argo;\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 type { ReactNode } from 'react';\n\nimport { ClipboardButton } from '../../blocks/ClipboardButton';\n\nexport const ButtonToolbar = ({ value, children }: { value?: string; children?: ReactNode }) => {\n if (!value && !children) return null;\n\n return (\n <div className=\"tw-pointer-events-auto tw-ml-auto tw-mr-4 tw-flex tw-w-fit tw-gap-1 tw-overflow-visible tw-rounded-lg tw-border tw-border-solid tw-border-border !tw-bg-background tw-p-[3px] tw-shadow\">\n {!!value && <ClipboardButton size=\"icon-sm\" variant=\"invisible\" text={value} />}\n {children}\n </div>\n );\n};\n","import { javascript } from '@codemirror/lang-javascript';\nimport { json } from '@codemirror/lang-json';\nimport { python } from '@codemirror/lang-python';\nimport { PLSQL, sql } from '@codemirror/lang-sql';\nimport { StreamLanguage } from '@codemirror/language';\nimport { r } from '@codemirror/legacy-modes/mode/r';\nimport { shell } from '@codemirror/legacy-modes/mode/shell';\nimport { githubLightInit } from '@uiw/codemirror-theme-github';\n\nimport { sfsql } from '@keboola/codemirror-lang-sfsql';\nimport colors from '@keboola/tailwind-config/colors';\n\nexport type LANGUAGE_MODE =\n | 'application/json'\n | 'text/x-python'\n | 'text/x-sql'\n | 'text/x-sfsql'\n | 'text/x-plsql'\n | 'text/x-rsrc'\n | 'text/x-sh'\n | 'text/javascript'\n | 'text/typescript';\n\nexport const baseThemeStyles = {\n '*': { lineHeight: '20px' },\n '*::selection': {\n backgroundColor: colors.secondary[500],\n color: `${colors.white} !important`,\n },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"])': { backgroundColor: colors.neutral[150] },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"]) .cm-gutters': {\n backgroundColor: colors.neutral[200],\n },\n '&.cm-editor .cm-scroller': { overflowAnchor: 'none' },\n '&.cm-editor, &.cm-editor .cm-scroller': {\n minHeight: '100%',\n flexGrow: 1,\n alignItems: 'stretch !important',\n outline: 'none',\n },\n '.cm-gutter.cm-foldGutter': { display: 'none !important' },\n '.cm-gutter.cm-lineNumbers': { paddingLeft: '20px', paddingRight: '6px' },\n '.cm-gutters': { height: 'auto' },\n\n // tokens overrides\n '.cm-line .tok-string': { color: colors.warning[700] },\n\n // merge (diff) view\n '&[class*=\"cm-merge-\"] .cm-deletedLine': { backgroundColor: colors.error[100] },\n '&[class*=\"cm-merge-\"] .cm-changedLine': { backgroundColor: colors.primary[100] },\n '&[class*=\"cm-merge-\"] .cm-deletedLineGutter': { backgroundColor: colors.error[200] },\n '&[class*=\"cm-merge-\"] .cm-changedLineGutter': { backgroundColor: colors.primary[200] },\n '&[class*=\"cm-merge-\"] .cm-deletedText': { background: colors.error[200] },\n '&[class*=\"cm-merge-\"] .cm-changedText': { background: colors.primary[200] },\n '&[class*=\"cm-merge-\"]': {\n backgroundColor: `${colors.white} !important`,\n },\n '&[class*=\"cm-merge-\"] .cm-gutters': {\n backgroundColor: `${colors.white} !important`,\n },\n '.cm-changeGutter': { position: 'absolute', zIndex: -1, width: '100%', paddingLeft: 0 },\n '&[class*=\"cm-merge-\"] .cm-changedLine,&[class*=\"cm-merge-\"] .cm-line, &[class*=\"cm-merge-\"] .cm-deletedChunk':\n { paddingLeft: 0 },\n};\n\nexport const BASIS_SETUP = { drawSelection: false };\n\nexport const customTheme = githubLightInit({\n settings: {\n fontFamily: `'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New'`,\n background: colors.neutral[50],\n gutterBackground: colors.neutral[100],\n gutterBorder: 'transparent',\n lineHighlight: 'transparent',\n selection: colors.secondary[500],\n },\n});\n\nexport const getLanguageMode = (mode?: LANGUAGE_MODE) => {\n switch (mode) {\n case 'text/x-python':\n return python();\n case 'text/x-sql':\n return sql({ upperCaseKeywords: true });\n case 'text/x-sfsql':\n return StreamLanguage.define(sfsql);\n case 'text/x-plsql':\n return sql({ upperCaseKeywords: true, dialect: PLSQL });\n case 'text/x-rsrc':\n return StreamLanguage.define(r);\n case 'text/x-sh':\n return StreamLanguage.define(shell);\n case 'text/javascript':\n return javascript({ jsx: true });\n case 'text/typescript':\n return javascript({ jsx: true, typescript: true });\n default:\n return json();\n }\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'span'>;\n\nexport const KbdSeparator = ({ className, ...props }: Props) => (\n <span {...props} className={cn('tw-text-xs tw-text-muted-foreground', className)} />\n);\n","import { Children, Fragment } from 'react';\nimport type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { KbdSeparator } from './KbdSeparator';\n\ntype Props = { separator?: string } & ComponentProps<'kbd'>;\n\nexport const KbdGroup = ({\n ref,\n className,\n children,\n separator,\n ...props\n}: Props & { ref?: Ref<ElementRef<'kbd'>> }) => {\n return (\n <kbd\n {...props}\n ref={ref}\n className={cn('tw-inline-flex', 'tw-items-center', 'tw-gap-1', className)}\n >\n {separator\n ? // oxlint-disable-next-line react-x/no-children-to-array\n Children.toArray(children).map((child, index) => (\n // oxlint-disable-next-line\n <Fragment key={index}>\n {index > 0 && <KbdSeparator>{separator}</KbdSeparator>}\n {child}\n </Fragment>\n ))\n : children}\n </kbd>\n );\n};\n","import { cva } from 'class-variance-authority';\n\nexport const kbdVariants = cva(\n [\n 'tailwindcss-preflight',\n // style\n 'tw-pointer-events-none',\n 'tw-w-fit',\n 'tw-h-5',\n 'tw-min-w-5',\n\n // layout\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-gap-1',\n 'tw-shrink-0',\n\n // spacing\n 'tw-px-1',\n '[&_svg:not([class*=\"size-\"])]:tw-size-2.5',\n\n 'tw-text-xs',\n 'tw-font-medium',\n\n 'tw-rounded',\n ],\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n default: 'tw-bg-muted tw-text-muted-foreground',\n primary: 'tw-bg-white/20 tw-text-white',\n },\n },\n },\n);\n","import type { ComponentProps } from 'react';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { KbdGroup } from './KbdGroup';\nimport { KbdSeparator } from './KbdSeparator';\nimport { kbdVariants } from './styles';\n\ntype Props = ComponentProps<'kbd'> & VariantProps<typeof kbdVariants>;\n\nexport const Kbd = ({ children, className, variant, ...rest }: Props) => (\n <kbd {...rest} className={kbdVariants({ className, variant })}>\n {children}\n </kbd>\n);\n\nKbd.Group = KbdGroup;\nKbd.Separator = KbdSeparator;\n","import { Kbd } from '../Kbd';\n\nexport const ToggleComponentHelp = () => (\n <div>\n Use <Kbd>Ctrl+/</Kbd> or <Kbd>Command+/</Kbd> to toggle comments.\n </div>\n);\n","import { useMemo } from 'react';\nimport type { KeyboardEvent, ReactNode } from 'react';\nimport { autocompletion, completeAnyWord } from '@codemirror/autocomplete';\nimport { jsonParseLinter } from '@codemirror/lang-json';\nimport { linter } from '@codemirror/lint';\nimport { unifiedMergeView } from '@codemirror/merge';\nimport { EditorView, keymap, placeholder as cmPlaceholder } from '@codemirror/view';\nimport CodeMirror, { EditorState, type Extension } from '@uiw/react-codemirror';\n\nimport { keyCodes } from '../../constants/keyCodes';\nimport { cn } from '../../utils';\nimport { HelpBlock } from '../HelpBlock';\n\nimport { ButtonToolbar } from './ButtonToolbar';\nimport type { LANGUAGE_MODE } from './helpers';\nimport { baseThemeStyles, BASIS_SETUP, customTheme, getLanguageMode } from './helpers';\nimport { ToggleComponentHelp } from './ToggleComponentHelp';\n\ntype Props = {\n value: string;\n previousValue?: string;\n mode?: LANGUAGE_MODE;\n placeholder?: string;\n readOnly?: boolean;\n autocompletions?: string[];\n extraKeys?: Record<string, () => void>;\n withToggleCommentHint?: boolean;\n withAutofocus?: boolean;\n withLineNumbers?: boolean;\n withLineWrapping?: boolean;\n withCollapseUnchanged?: boolean;\n withCopyButton?: boolean;\n completeAny?: boolean;\n help?: ReactNode;\n helpPostfix?: ReactNode;\n renderAdditionalButtons?: (value?: string) => ReactNode;\n className?: string;\n} & (\n | { readOnly: true; onChange?: never }\n | { readOnly?: false; onChange: (value: string) => void }\n);\n\nconst emptyArray: string[] = [];\nconst emptyObject = {};\n\nexport const CodeEditor = ({\n value,\n previousValue,\n onChange,\n mode = 'application/json',\n placeholder = '',\n readOnly = false,\n autocompletions = emptyArray,\n extraKeys = emptyObject,\n withToggleCommentHint = false,\n withAutofocus = false,\n withLineNumbers = true,\n withLineWrapping = true,\n withCollapseUnchanged = false,\n withCopyButton = true,\n completeAny = false,\n help = null,\n helpPostfix = null,\n renderAdditionalButtons,\n className,\n}: Props) => {\n const commonExtensions: Extension[] = useMemo(() => {\n return [\n getLanguageMode(mode),\n mode === 'application/json' && linter(jsonParseLinter()),\n withLineWrapping ? EditorView.lineWrapping : [],\n EditorState.languageData.of(() => [\n { autocomplete: completeAny ? completeAnyWord : autocompletions },\n ]),\n keymap.of(\n Object.entries(extraKeys).map(([key, run]) => ({\n key,\n run: () => {\n if (typeof run === 'string') return run;\n\n run();\n return true;\n },\n })),\n ),\n autocompletion({ activateOnTyping: completeAny }),\n EditorView.theme(baseThemeStyles),\n ].filter(Boolean) as Extension[];\n }, [autocompletions, completeAny, extraKeys, mode, withLineWrapping]);\n\n const extensions = useMemo(() => {\n return [\n ...commonExtensions,\n cmPlaceholder(placeholder),\n EditorView.editable.of(!readOnly),\n EditorState.readOnly.of(readOnly),\n previousValue\n ? unifiedMergeView({\n original: previousValue,\n mergeControls: false,\n highlightChanges: false,\n collapseUnchanged: withCollapseUnchanged ? {} : undefined,\n })\n : [],\n ];\n }, [commonExtensions, placeholder, readOnly, previousValue, withCollapseUnchanged]);\n\n const config = useMemo(() => {\n return {\n ...BASIS_SETUP,\n lineNumbers: withLineNumbers,\n };\n }, [withLineNumbers]);\n\n return (\n // oxlint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n className={cn(\n 'tw-relative tw-flex tw-min-h-0 tw-flex-col [&_.cm-mergeViewEditor]:tw-overflow-visible [&_.cm-mergeViewEditors]:tw-h-full [&_.cm-mergeView]:tw-h-full [&_>div]:tw-h-full [&_>div]:tw-overflow-auto [&_>div]:tw-bg-background',\n { 'tw-mt-5': !!renderAdditionalButtons },\n className,\n )}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === keyCodes.ESCAPE) {\n event.stopPropagation();\n }\n }}\n >\n {(withCopyButton || renderAdditionalButtons) && (\n <div className=\"tw-pointer-events-none tw-absolute tw-z-10 tw-flex !tw-h-auto tw-w-full tw-translate-y-[calc(-100%_+_8px)] !tw-overflow-visible !tw-bg-transparent\">\n <div className=\"tw-flex-1\">\n <ButtonToolbar value={withCopyButton ? value : undefined}>\n {renderAdditionalButtons?.(value)}\n </ButtonToolbar>\n </div>\n </div>\n )}\n <CodeMirror\n theme={customTheme}\n value={value}\n onChange={onChange}\n extensions={extensions}\n autoFocus={withAutofocus}\n basicSetup={config}\n />\n {!readOnly && (withToggleCommentHint || help || helpPostfix) && (\n <HelpBlock className=\"tw-mt-2 tw-flex tw-flex-wrap tw-gap-1\">\n {help}\n {withToggleCommentHint ? <ToggleComponentHelp /> : null}\n {helpPostfix}\n </HelpBlock>\n )}\n </div>\n );\n};\n","import type { ChangeSet, Range } from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nconst activeQueryFirstLine = Decoration.line({ class: 'cm-active-query cm-active-query-first' });\nconst activeQueryMiddleLine = Decoration.line({ class: 'cm-active-query' });\nconst activeQueryLastLine = Decoration.line({ class: 'cm-active-query cm-active-query-last' });\nconst activeQuerySingleLine = Decoration.line({\n class: 'cm-active-query cm-active-query-first cm-active-query-last',\n});\n\ntype QueryBoundary = { from: number; to: number };\n\n/**\n * Given pre-computed query boundaries and a cursor position, find which query\n * the cursor is in. Returns trimmed character offsets or null.\n */\nexport const findActiveQueryRange = (\n doc: string,\n cursorPos: number,\n boundaries: QueryBoundary[],\n): { from: number; to: number } | null => {\n if (boundaries.length === 0) return null;\n\n let match: QueryBoundary | undefined = boundaries[boundaries.length - 1];\n for (const boundary of boundaries) {\n if (cursorPos <= boundary.to) {\n match = boundary;\n break;\n }\n }\n\n if (!match) return null;\n\n // Trim leading/trailing whitespace from the query range for tighter boundaries\n const queryText = doc.slice(match.from, match.to);\n const leadingWhitespace = queryText.length - queryText.trimStart().length;\n const trailingWhitespace = queryText.length - queryText.trimEnd().length;\n\n const trimmedStart = match.from + leadingWhitespace;\n const trimmedEnd = match.to - trailingWhitespace;\n\n if (trimmedStart >= trimmedEnd) return null;\n\n return { from: trimmedStart, to: trimmedEnd };\n};\n\n/**\n * Convert splitSqlQueries result (array of query strings that join back to the\n * original doc) into character-offset boundaries.\n */\nconst computeBoundaries = (queries: string[]): QueryBoundary[] => {\n const boundaries: QueryBoundary[] = [];\n let offset = 0;\n for (const query of queries) {\n boundaries.push({ from: offset, to: offset + query.length });\n offset += query.length;\n }\n return boundaries;\n};\n\n/**\n * Synchronously map cached boundaries through a changeset.\n *\n * Boundaries can outlive the document state they were computed from (the async\n * re-parse in `scheduleDocParse` is debounced, so several edits may land\n * before new boundaries are produced). When that happens a cached position\n * can exceed the changeset's pre-change length and `ChangeSet.mapPos` throws\n * `RangeError: Position X is out of range for changeset of length Y`.\n *\n * Clamp positions into the valid `[0, changes.length]` range before mapping\n * and drop degenerate boundaries so the mapping is safe even with stale cache.\n */\nexport const mapBoundariesThroughChanges = (\n boundaries: QueryBoundary[],\n changes: ChangeSet,\n): QueryBoundary[] => {\n const prevLen = changes.length;\n const mapped: QueryBoundary[] = [];\n for (const b of boundaries) {\n const from = changes.mapPos(Math.max(0, Math.min(b.from, prevLen)), -1);\n const to = changes.mapPos(Math.max(0, Math.min(b.to, prevLen)), 1);\n if (from < to) mapped.push({ from, to });\n }\n return mapped;\n};\n\nconst buildDecorations = (view: EditorView, range: { from: number; to: number }) => {\n const startLine = view.state.doc.lineAt(range.from).number;\n const endLine = view.state.doc.lineAt(range.to).number;\n\n const decorations: Range<Decoration>[] = [];\n for (let lineNum = startLine; lineNum <= endLine; lineNum++) {\n const lineStart = view.state.doc.line(lineNum).from;\n if (startLine === endLine) {\n decorations.push(activeQuerySingleLine.range(lineStart));\n } else if (lineNum === startLine) {\n decorations.push(activeQueryFirstLine.range(lineStart));\n } else if (lineNum === endLine) {\n decorations.push(activeQueryLastLine.range(lineStart));\n } else {\n decorations.push(activeQueryMiddleLine.range(lineStart));\n }\n }\n\n return Decoration.set(decorations);\n};\n\nexport const activeQueryHighlight = (splitQueries: (sql: string) => Promise<string[]>) => {\n return [\n ViewPlugin.fromClass(\n class {\n decorations = Decoration.none;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private seq = 0;\n private cachedDoc = '';\n private cachedBoundaries: QueryBoundary[] = [];\n private destroyed = false;\n\n constructor(view: EditorView) {\n this.scheduleDocParse(view);\n }\n\n update(update: ViewUpdate) {\n if (update.focusChanged && !update.view.hasFocus) {\n this.decorations = Decoration.none;\n return;\n }\n\n if (update.docChanged) {\n // Synchronously map cached boundaries through document changes\n // so decorations update immediately without waiting for async re-parse.\n // Positions are clamped inside mapBoundariesThroughChanges because\n // the async re-parse is debounced and boundaries can be stale.\n if (this.cachedBoundaries.length > 0) {\n this.cachedBoundaries = mapBoundariesThroughChanges(\n this.cachedBoundaries,\n update.changes,\n );\n this.cachedDoc = update.state.doc.toString();\n this.updateFromCache(update.view);\n }\n // Still re-parse for accurate boundaries (handles structural changes like new semicolons)\n this.scheduleDocParse(update.view);\n } else if (update.selectionSet || (update.focusChanged && update.view.hasFocus)) {\n this.updateFromCache(update.view);\n }\n }\n\n destroy() {\n this.destroyed = true;\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n }\n\n /**\n * Update decorations using cached query boundaries.\n * Only mutates this.decorations — does NOT call view.dispatch().\n * When called from update() (sync), CodeMirror picks up the new\n * decorations via the accessor. When called from the async\n * scheduleDocParse callback, the caller must dispatch separately.\n */\n private updateFromCache(view: EditorView) {\n if (!view.hasFocus) {\n this.decorations = Decoration.none;\n return;\n }\n\n const { main } = view.state.selection;\n\n if (main.from !== main.to) {\n // User has text selected — hide highlight\n this.decorations = Decoration.none;\n return;\n }\n\n const doc = view.state.doc.toString();\n if (doc !== this.cachedDoc) return;\n if (this.cachedBoundaries.length === 0) {\n this.decorations = Decoration.none;\n return;\n }\n\n const range = findActiveQueryRange(doc, main.head, this.cachedBoundaries);\n this.decorations = range ? buildDecorations(view, range) : Decoration.none;\n }\n\n /** Parse queries async (debounced) and update decorations. */\n private scheduleDocParse(view: EditorView) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n\n this.debounceTimer = setTimeout(async () => {\n const seq = ++this.seq;\n const doc = view.state.doc.toString();\n\n if (!doc.trim()) {\n this.cachedDoc = doc;\n this.cachedBoundaries = [];\n if (this.decorations !== Decoration.none) {\n this.decorations = Decoration.none;\n if (!this.destroyed) view.dispatch();\n }\n return;\n }\n\n let queries: string[];\n try {\n queries = await splitQueries(doc);\n } catch {\n return;\n }\n\n // Discard stale results\n if (this.destroyed || seq !== this.seq) return;\n\n this.cachedDoc = doc;\n this.cachedBoundaries = computeBoundaries(queries);\n\n this.updateFromCache(view);\n if (!this.destroyed) view.dispatch();\n }, 100);\n }\n },\n { decorations: (v) => v.decorations },\n ),\n EditorView.baseTheme({\n '.cm-active-query': {\n boxShadow: `inset -1px 0 0 0 ${colors.secondary[300]}, inset 1px 0 0 0 ${colors.secondary[300]}`,\n marginRight: '8px',\n },\n '.cm-active-query-first': {\n boxShadow: `inset -1px 0 0 0 ${colors.secondary[300]}, inset 1px 0 0 0 ${colors.secondary[300]}, inset 0 1px 0 0 ${colors.secondary[300]}`,\n borderRadius: '4px 4px 0 0',\n },\n '.cm-active-query-last': {\n boxShadow: `inset -1px 0 0 0 ${colors.secondary[300]}, inset 1px 0 0 0 ${colors.secondary[300]}, inset 0 -1px 0 0 ${colors.secondary[300]}`,\n borderRadius: '0 0 4px 4px',\n },\n '.cm-active-query-first.cm-active-query-last': {\n boxShadow: `inset 0 0 0 1px ${colors.secondary[300]}`,\n borderRadius: '4px',\n },\n }),\n ];\n};\n","import type { Extension } from '@codemirror/state';\nimport { RangeSet, StateEffect, StateField } from '@codemirror/state';\nimport { Decoration, EditorView, gutter, GutterMarker } from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { activeQueryHighlight } from './activeQueryHighlight';\n\nexport type HighlightedLines = {\n from: number;\n to: number;\n error?: { from: number; to: number };\n processing?: { from: number; to: number };\n} | null;\n\n// Gutter markers for highlighting\nclass HighlightMarker extends GutterMarker {\n override toDOM() {\n const marker = document.createElement('div');\n marker.className = 'cm-highlight-marker';\n return marker;\n }\n}\n\nconst highlightMarker = new HighlightMarker();\n\n// Helper function to iterate over line range and apply a callback\nconst forEachLineInRange = <T>(\n doc: { lines: number; line: (n: number) => { from: number } },\n from: number,\n to: number,\n callback: (lineFrom: number) => T,\n): T[] => {\n const results: T[] = [];\n\n // Convert 0-based to 1-based for CodeMirror\n const fromLine = Math.max(1, from + 1);\n const toLine = Math.min(doc.lines, to + 1);\n\n for (let i = fromLine; i <= toLine; i++) {\n const line = doc.line(i);\n results.push(callback(line.from));\n }\n\n return results;\n};\n\n// State effect for setting highlighted lines\nconst setHighlightedLinesEffect = StateEffect.define<HighlightedLines>();\n\n// State field for storing highlighted lines info\nconst highlightedLinesField = StateField.define<HighlightedLines>({\n create() {\n return null;\n },\n update(value, transaction) {\n for (const effect of transaction.effects) {\n if (effect.is(setHighlightedLinesEffect)) {\n return effect.value;\n }\n }\n return value;\n },\n});\n\n// Gutter extension that displays highlight markers\nconst highlightGutter = gutter({\n class: 'cm-highlight-gutter',\n markers: (view): RangeSet<GutterMarker> => {\n const highlightInfo = view.state.field(highlightedLinesField, false);\n\n if (!highlightInfo) {\n return RangeSet.empty;\n }\n\n // Add blue markers for all running query lines\n const markers = forEachLineInRange(\n view.state.doc,\n highlightInfo.from,\n highlightInfo.to,\n (lineFrom) => highlightMarker.range(lineFrom),\n );\n\n return RangeSet.of(markers);\n },\n});\n\n// State field for error line background decorations\nconst errorLineDecorations = StateField.define({\n create() {\n return Decoration.none;\n },\n update(decorations, transaction) {\n decorations = decorations.map(transaction.changes);\n for (const effect of transaction.effects) {\n if (!effect.is(setHighlightedLinesEffect)) {\n continue;\n }\n\n if (!effect.value || !effect.value.error) {\n return Decoration.none;\n }\n\n // Add error line background decorations\n const decorationArray = forEachLineInRange(\n transaction.state.doc,\n effect.value.error.from,\n effect.value.error.to,\n (lineFrom) => Decoration.line({ class: 'cm-error-line' }).range(lineFrom),\n );\n\n return Decoration.set(decorationArray);\n }\n return decorations;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\n// State field for processing line background decorations\nconst processingLineDecorations = StateField.define({\n create() {\n return Decoration.none;\n },\n update(decorations, transaction) {\n decorations = decorations.map(transaction.changes);\n for (const effect of transaction.effects) {\n if (!effect.is(setHighlightedLinesEffect)) {\n continue;\n }\n\n if (!effect.value || !effect.value.processing) {\n return Decoration.none;\n }\n\n const decorationArray = forEachLineInRange(\n transaction.state.doc,\n effect.value.processing.from,\n effect.value.processing.to,\n (lineFrom) => Decoration.line({ class: 'cm-processing-line' }).range(lineFrom),\n );\n\n return Decoration.set(decorationArray);\n }\n return decorations;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\n// Theme for highlighted lines\nconst highlightedLinesTheme = EditorView.baseTheme({\n '.cm-highlight-gutter': {\n width: '2px',\n marginRight: '2px',\n },\n '.cm-highlight-marker': {\n width: '2px',\n height: '100%',\n backgroundColor: colors.secondary[500],\n },\n '.cm-error-line': {\n backgroundColor: `${colors.error[100]} !important`,\n },\n '.cm-processing-line': {\n backgroundColor: `${colors.secondary[100]} !important`,\n },\n});\n\n// Install highlight lines extension\nexport function highlightingExtension(\n queryParser?: (sql: string) => Promise<string[]>,\n): Extension[] {\n return [\n highlightedLinesField,\n highlightGutter,\n errorLineDecorations,\n processingLineDecorations,\n highlightedLinesTheme,\n ...(queryParser ? activeQueryHighlight(queryParser) : []),\n ];\n}\n\nexport function updateHighlighting(view: EditorView, lines?: HighlightedLines) {\n view.dispatch({ effects: setHighlightedLinesEffect.of(lines ?? null) });\n}\n","import { StateEffect, StateField, type Text } from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n ViewPlugin,\n type ViewUpdate,\n} from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { escapeStringRegexp } from '../../utils/escapeStringRegexp';\n\n// Represents a single search match in the editor\ntype SearchMatch = {\n /** Start position in document */\n from: number;\n /** End position in document */\n to: number;\n /** Text content of the match */\n text: string;\n /** Local match index within this editor (0-based) */\n localIndex: number;\n};\n\n// Effect to update search state\nconst setSearchEffect = StateEffect.define<{\n query: string;\n selectedMatchIndex?: number;\n}>();\n\n// State to track current search matches\ntype SearchState = {\n query: string;\n selectedMatchIndex?: number;\n matches: SearchMatch[];\n decorations: DecorationSet;\n};\n\n// Find all matches in the document\nfunction findMatches(doc: Text, query: string): SearchMatch[] {\n if (!query) return [];\n\n const text = doc.toString();\n\n try {\n const regex = new RegExp(escapeStringRegexp(query), 'gi');\n\n return Array.from(text.matchAll(regex)).map((match, index) => {\n const from = match.index!;\n const to = from + match[0].length;\n\n return { from, to, text: match[0], localIndex: index };\n });\n } catch (e) {\n // Invalid regex - return no matches\n console.warn('Invalid search regex:', e);\n return [];\n }\n}\n\n// Create decorations for search matches\nfunction createDecorations(matches: SearchMatch[], selectedLocalIndex?: number): DecorationSet {\n const decorations = matches.map((match) => {\n const isSelected = match.localIndex === selectedLocalIndex;\n\n const decoration = Decoration.mark({\n class: isSelected ? 'cm-searchMatch-selected' : 'cm-searchMatch',\n });\n\n return decoration.range(match.from, match.to);\n });\n\n return Decoration.set(decorations, true);\n}\n\n// StateField to manage search state\nconst searchField = StateField.define<SearchState>({\n create() {\n return {\n query: '',\n selectedMatchIndex: undefined,\n matches: [],\n decorations: Decoration.none,\n };\n },\n\n update(state, tr) {\n let newState = state;\n\n // Handle search effect\n for (const effect of tr.effects) {\n if (!effect.is(setSearchEffect)) {\n continue;\n }\n\n const { query, selectedMatchIndex } = effect.value;\n\n // Find matches\n const matches = findMatches(tr.state.doc, query);\n\n // Create decorations\n const decorations = createDecorations(matches, selectedMatchIndex);\n\n newState = {\n query,\n selectedMatchIndex,\n matches,\n decorations,\n };\n }\n\n // Map decorations through document changes\n if (tr.docChanged && newState.query) {\n const matches = findMatches(tr.state.doc, newState.query);\n const decorations = createDecorations(matches, newState.selectedMatchIndex);\n\n newState = {\n ...newState,\n matches,\n decorations,\n };\n }\n\n return newState;\n },\n\n provide: (field) => EditorView.decorations.from(field, (state) => state.decorations),\n});\n\n// View plugin to handle scrolling to selected match\nconst searchViewPlugin = ViewPlugin.fromClass(\n class {\n private lastSelectedIndex?: number;\n\n update(update: ViewUpdate) {\n const state = update.state.field(searchField);\n\n // Scroll to selected match when it changes\n if (\n state.selectedMatchIndex !== undefined &&\n state.selectedMatchIndex !== this.lastSelectedIndex\n ) {\n const match = state.matches[state.selectedMatchIndex];\n\n if (match) {\n requestAnimationFrame(() => {\n update.view.dispatch({\n effects: EditorView.scrollIntoView(match.from, { y: 'center' }),\n });\n });\n }\n\n this.lastSelectedIndex = state.selectedMatchIndex;\n }\n\n // Reset if no selection\n if (state.selectedMatchIndex === undefined) {\n this.lastSelectedIndex = undefined;\n }\n }\n },\n);\n\nconst searchTheme = EditorView.baseTheme({\n '.cm-searchMatch': {\n backgroundColor: colors.secondary[100],\n },\n '.cm-searchMatch > span': {\n color: `${colors.secondary[600]} !important`,\n },\n '.cm-searchMatch-selected': {\n backgroundColor: colors.secondary[600],\n },\n '.cm-searchMatch-selected > span': {\n color: `${colors.white} !important`,\n },\n});\n\nexport function searchExtension() {\n return [searchField, searchViewPlugin, searchTheme];\n}\n\nexport function updateSearch(view: EditorView, query: string, selectedMatchIndex?: number) {\n view.dispatch({ effects: setSearchEffect.of({ query, selectedMatchIndex }) });\n}\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { defaultKeymap } from '@codemirror/commands';\nimport type { SQLNamespace } from '@codemirror/lang-sql';\nimport type {\n EditorState,\n KeyBinding,\n ReactCodeMirrorRef,\n ViewUpdate,\n} from '@uiw/react-codemirror';\nimport CodeMirror, { EditorView, keymap } from '@uiw/react-codemirror';\n\nimport { installExtensions, type SqlDialectName } from '@keboola/codemirror-lang-sql';\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { baseThemeStyles, customTheme } from './helpers';\nimport type { HighlightedLines } from './highlighting';\nimport { highlightingExtension, updateHighlighting } from './highlighting';\nimport { searchExtension, updateSearch } from './search';\n\nconst BASIS_SETUP = {\n drawSelection: false,\n defaultKeymap: false,\n completionKeymap: false,\n searchKeymap: false,\n};\n\nconst CUSTOM_KEYMAP: KeyBinding[] = [\n {\n key: 'Escape',\n stopPropagation: true,\n run: (view: EditorView) => {\n view.contentDOM.blur();\n return true;\n },\n },\n];\n\nconst theme = {\n ...baseThemeStyles,\n '&.cm-editor': {\n border: 'solid 1px transparent',\n background: colors.white,\n borderRadius: '8px',\n paddingTop: '8px',\n paddingBottom: '8px',\n },\n '&.cm-editor:has(.cm-content[contenteditable=\"true\"]):hover': {\n borderColor: colors.secondary[500],\n },\n '&.cm-editor:has(.cm-content[contenteditable=\"true\"]):focus-within': {\n borderColor: colors.secondary[500],\n boxShadow: `0 0 0 4px ${colors.secondary[200]}`,\n },\n '&.cm-editor .cm-scroller': { overflowAnchor: 'none' },\n '&.cm-editor :is(.cm-gutters,.cm-scroller)': { background: colors.white },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"])': { background: colors.neutral[100] },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"]) :is(.cm-scroller,.cm-gutters)': {\n background: colors.neutral[100],\n },\n};\n\ntype Props = {\n value: string;\n onChange?: (value: string) => void;\n onSelectionChange?: (text: string) => void;\n onCreateEditor?: (view: EditorView, state: EditorState) => void;\n onDestroyEditor?: () => void;\n onBlurEditor?: (view: EditorView) => void;\n onFocusEditor?: (view: EditorView) => void;\n readOnly: boolean;\n placeholder?: string;\n searchQuery?: string;\n searchMatchIndex?: number;\n extraKeys?: KeyBinding[];\n queryParser?: (sql: string) => Promise<string[]>;\n autoFocus?: boolean;\n lineNumbers?: boolean;\n className?: string;\n schema?: SQLNamespace;\n variables?: string[];\n defaultSchema?: string;\n defaultDatabase?: string;\n highlightLines?: HighlightedLines;\n dialect?: SqlDialectName;\n};\n\nexport const SqlEditor = ({\n value,\n onChange,\n onSelectionChange,\n onCreateEditor,\n onDestroyEditor,\n onBlurEditor,\n onFocusEditor,\n placeholder = '',\n searchQuery = '',\n searchMatchIndex,\n readOnly = false,\n extraKeys,\n queryParser,\n autoFocus = false,\n lineNumbers = true,\n className,\n schema,\n variables,\n defaultDatabase,\n defaultSchema,\n highlightLines,\n dialect,\n}: Props) => {\n const editorRef = useRef<ReactCodeMirrorRef>(null);\n\n const extensions = useMemo(() => {\n const baseKeymap = [...defaultKeymap, ...CUSTOM_KEYMAP];\n\n return [\n EditorView.lineWrapping,\n keymap.of(extraKeys ? [...extraKeys, ...baseKeymap] : baseKeymap),\n ...installExtensions({ schema, defaultDatabase, defaultSchema, variables, dialect }),\n searchExtension(),\n highlightingExtension(queryParser),\n EditorView.theme(theme),\n onBlurEditor ? EditorView.domEventHandlers({ blur: (_, view) => onBlurEditor(view) }) : [],\n onFocusEditor ? EditorView.domEventHandlers({ focus: (_, view) => onFocusEditor(view) }) : [],\n ];\n }, [\n extraKeys,\n queryParser,\n schema,\n defaultDatabase,\n defaultSchema,\n variables,\n dialect,\n onBlurEditor,\n onFocusEditor,\n ]);\n\n const defaultSetup = useMemo(() => {\n return { ...BASIS_SETUP, lineNumbers };\n }, [lineNumbers]);\n\n useEffect(() => {\n if (editorRef.current?.view) {\n updateHighlighting(editorRef.current.view, highlightLines);\n }\n }, [highlightLines]);\n\n useEffect(() => {\n if (editorRef.current?.view) {\n updateSearch(editorRef.current.view, searchQuery, searchMatchIndex);\n }\n }, [searchQuery, searchMatchIndex]);\n\n useEffect(() => {\n if (!onDestroyEditor) return;\n\n return () => {\n onDestroyEditor();\n };\n }, [onDestroyEditor]);\n\n const handleOnCreate = useCallback(\n (view: EditorView, state: EditorState) => {\n onCreateEditor?.(view, state);\n\n if (highlightLines) {\n updateHighlighting(view, highlightLines);\n }\n\n if (searchQuery) {\n updateSearch(view, searchQuery, searchMatchIndex);\n }\n },\n [onCreateEditor, highlightLines, searchQuery, searchMatchIndex],\n );\n\n const handleOnUpdate = useCallback(\n (update: ViewUpdate) => {\n if (update.selectionSet) {\n const { main } = update.state.selection;\n const text = update.state.sliceDoc(main.from, main.to);\n\n onSelectionChange?.(text);\n }\n },\n [onSelectionChange],\n );\n\n return (\n <CodeMirror\n ref={editorRef}\n theme={customTheme}\n extensions={extensions}\n value={value}\n onChange={onChange}\n onUpdate={handleOnUpdate}\n onCreateEditor={handleOnCreate}\n autoFocus={autoFocus}\n placeholder={placeholder}\n className={className}\n readOnly={readOnly}\n editable={!readOnly}\n basicSetup={defaultSetup}\n />\n );\n};\n","export const CHUNK_TYPE = {\n UNCHANGED: 'unchanged',\n ADDED: 'added',\n REMOVED: 'removed',\n} as const;\n\ntype ChunkType = (typeof CHUNK_TYPE)[keyof typeof CHUNK_TYPE];\n\nexport type DiffChunk = {\n type: ChunkType;\n value: string;\n /** 1-indexed start line in the old (left) text */\n oldStart: number;\n /** 1-indexed end line in the old (left) text */\n oldEnd: number;\n /** 1-indexed start line in the new (right) text */\n newStart: number;\n /** 1-indexed end line in the new (right) text */\n newEnd: number;\n};\n\n/**\n * A paired conflict: adjacent REMOVED + ADDED chunks from diffLines,\n * representing a section that was modified. If only one side exists,\n * the other is empty (pure insertion or deletion).\n */\nexport type MergeConflict = {\n id: string;\n oldValue: string;\n oldStartLine: number;\n oldEndLine: number;\n newValue: string;\n newStartLine: number;\n newEndLine: number;\n};\n\nexport const CHANGE_CLASS = {\n SAFE: 'safe',\n CONFLICT: 'conflict',\n} as const;\n\nexport type ChangeClassification = (typeof CHANGE_CLASS)[keyof typeof CHANGE_CLASS];\n\n/** Must match the CodeMirror line-height set in MergePane */\nexport const LINE_HEIGHT_PX = 20;\n\n/** Must match the rendered header height in MergePane (py-3 + content + border) */\nexport const PANE_HEADER_HEIGHT_PX = 58;\n","import { ChevronsLeft, ChevronsRight } from '../../../icons';\nimport { Button } from '../../Button';\n\ntype Props = {\n side: 'left' | 'right';\n onAccept: () => void;\n /** @internal Transitional opt-in; removed once consumers wrap argo sections in `<ThemeProvider>`. */\n argo?: boolean;\n};\n\nexport const AcceptButton = ({ side, onAccept, argo }: Props) => {\n const label = `Accept ${side === 'left' ? 'production' : 'branch'} version`;\n const Chevron = side === 'left' ? ChevronsRight : ChevronsLeft;\n return (\n <Button\n onClick={onAccept}\n variant=\"outline\"\n size=\"icon-sm\"\n title={label}\n aria-label={label}\n argo={argo}\n >\n <Chevron className=\"tw-size-5\" />\n </Button>\n );\n};\n","import type { RefCallback } from 'react';\n\nimport { X } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { Button } from '../../Button';\nimport { LINE_HEIGHT_PX, type MergeConflict, PANE_HEADER_HEIGHT_PX } from '../constants';\n\nimport { AcceptButton } from './AcceptButton';\n\ntype Props = {\n conflicts: MergeConflict[];\n side: 'left' | 'right';\n onAccept: (conflict: MergeConflict) => void;\n onDismiss?: (conflict: MergeConflict) => void;\n contentRef?: RefCallback<HTMLDivElement>;\n /** @internal Transitional opt-in; removed once consumers wrap argo sections in `<ThemeProvider>`. */\n argo?: boolean;\n};\n\n// 28px column when there are conflicts to render — wide enough to fit the\n// 24px icon-xs accept chevron + dismiss icon without overflowing into the\n// adjacent panes (which use `tw-overflow-hidden` and would clip absolutely-\n// positioned children that crossed the boundary). Collapses to 0 when idle\n// so empty merges don't reserve a sliver of layout. Inner wrapper allows\n// horizontal overflow so the icon buttons' focus-visible ring stays visible\n// past the column edge. Buttons stay aligned with their source-pane chunk\n// via the parent's `translateY(-scrollTop)` follower applied to `contentRef`.\nexport const AcceptControls = ({\n conflicts,\n side,\n onAccept,\n onDismiss,\n contentRef,\n argo,\n}: Props) => (\n <div\n className={cn(\n 'tw-z-10 tw-flex tw-shrink-0 tw-flex-col tw-items-center',\n conflicts.length > 0 ? 'tw-w-7' : 'tw-w-0',\n )}\n >\n {conflicts.length > 0 && (\n <>\n <div className=\"tw-shrink-0\" style={{ height: `${PANE_HEADER_HEIGHT_PX}px` }} />\n <div className=\"tw-relative tw-w-full tw-flex-1 tw-overflow-y-clip tw-overflow-x-visible\">\n <div ref={contentRef} className=\"tw-relative tw-size-full\">\n {conflicts.map((conflict) => {\n const topLine = side === 'left' ? conflict.oldStartLine : conflict.newStartLine;\n const topOffset = (topLine - 1) * LINE_HEIGHT_PX - 2;\n\n return (\n <div\n key={conflict.id}\n className=\"tw-absolute tw-inset-x-0 tw-flex tw-flex-col tw-items-center tw-gap-0.5\"\n style={{ top: `${topOffset}px` }}\n >\n <AcceptButton side={side} onAccept={() => onAccept(conflict)} argo={argo} />\n {onDismiss && (\n <Button\n onClick={() => onDismiss(conflict)}\n variant=\"outline\"\n size=\"icon-sm\"\n title=\"Dismiss\"\n aria-label={`Dismiss ${side === 'left' ? 'production' : 'branch'} change`}\n argo={argo}\n >\n <X className=\"tw-size-4\" />\n </Button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n )}\n </div>\n);\n","import {\n type Extension,\n RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n} from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n gutterLineClass,\n GutterMarker,\n} from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport type { ChangeClassification } from './constants';\nimport { CHANGE_CLASS } from './constants';\n\ntype HighlightPayload = {\n lines: Set<number>;\n classification: Map<number, ChangeClassification>;\n};\n\nconst setHighlightedLines = StateEffect.define<HighlightPayload>();\n\nconst safeDecoration = Decoration.line({ class: 'cm-merge-safe-line' });\nconst conflictDecoration = Decoration.line({ class: 'cm-merge-conflict-line' });\n\nclass SafeGutterMarker extends GutterMarker {\n override elementClass = 'cm-merge-safe-gutter';\n}\n\nclass ConflictGutterMarker extends GutterMarker {\n override elementClass = 'cm-merge-conflict-gutter';\n}\n\nconst safeGutterMarker = new SafeGutterMarker();\nconst conflictGutterMarker = new ConflictGutterMarker();\n\ntype FieldValue = {\n decorations: DecorationSet;\n gutterMarkers: RangeSet<GutterMarker>;\n};\n\nexport const createDiffHighlightExtension = (): Extension => {\n const field = StateField.define<FieldValue>({\n create: () => ({ decorations: Decoration.none, gutterMarkers: RangeSet.empty }),\n update(value, tr) {\n // Use the last effect if multiple are dispatched in a single transaction\n let payload: HighlightPayload | null = null;\n for (const effect of tr.effects) {\n if (effect.is(setHighlightedLines)) {\n payload = effect.value;\n }\n }\n\n if (!payload) {\n return {\n decorations: value.decorations.map(tr.changes),\n gutterMarkers: value.gutterMarkers.map(tr.changes),\n };\n }\n\n const decoBuilder = new RangeSetBuilder<Decoration>();\n const gutterBuilder = new RangeSetBuilder<GutterMarker>();\n const doc = tr.state.doc;\n const { lines, classification } = payload;\n\n // Iterate the (typically small) highlighted set instead of all doc lines.\n // RangeSetBuilder requires positions in order, so sort first.\n const sorted = [...lines].filter((l) => l >= 1 && l <= doc.lines).sort((a, b) => a - b);\n for (const i of sorted) {\n const cls = classification.get(i);\n if (!cls) continue;\n\n const isSafe = cls === CHANGE_CLASS.SAFE;\n const line = doc.line(i);\n decoBuilder.add(line.from, line.from, isSafe ? safeDecoration : conflictDecoration);\n gutterBuilder.add(line.from, line.from, isSafe ? safeGutterMarker : conflictGutterMarker);\n }\n\n return {\n decorations: decoBuilder.finish(),\n gutterMarkers: gutterBuilder.finish(),\n };\n },\n provide: (f) => [\n EditorView.decorations.from(f, (val) => val.decorations),\n gutterLineClass.from(f, (val: FieldValue) => val.gutterMarkers),\n ],\n });\n\n // !important needed to override CodeMirror's built-in active-line and selection backgrounds.\n // SAFE = change present on one side only (green). CONFLICT = both sides edited this region\n // (amber/warning — NOT red, since red reads as \"deletion\" and the 3-pane editor only ever\n // displays additions in each side pane). The colored left border doubles as a scan-lane so\n // changes are easy to spot when zoomed out.\n const theme = EditorView.theme({\n '.cm-merge-safe-line': {\n backgroundColor: `${colors.primary[100]} !important`,\n boxShadow: `inset 3px 0 0 ${colors.primary[500]}`,\n },\n '.cm-merge-conflict-line': {\n backgroundColor: `${colors.warning[100]} !important`,\n boxShadow: `inset 3px 0 0 ${colors.warning[500]}`,\n },\n '.cm-merge-safe-gutter': {\n backgroundColor: `${colors.primary[200]} !important`,\n },\n '.cm-merge-conflict-gutter': {\n backgroundColor: `${colors.warning[200]} !important`,\n },\n });\n\n return [field, theme];\n};\n\nexport const updateHighlightedLines = (\n view: EditorView,\n lines: Set<number>,\n classification: Map<number, ChangeClassification>,\n) => {\n view.dispatch({ effects: setHighlightedLines.of({ lines, classification }) });\n};\n","import { type ReactNode, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { type Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport CodeMirror, { type ReactCodeMirrorRef } from '@uiw/react-codemirror';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { cn } from '../../utils';\n\nimport { type ChangeClassification, LINE_HEIGHT_PX } from './constants';\nimport { createDiffHighlightExtension, updateHighlightedLines } from './decorations';\n\nconst EMPTY_LINES: Set<number> = new Set();\nconst EMPTY_CLASSIFICATION: Map<number, ChangeClassification> = new Map();\n\ntype Props = {\n value: string;\n highlightedLines: Set<number>;\n lineClassification: Map<number, ChangeClassification>;\n readOnly?: boolean;\n onChange?: (value: string) => void;\n header?: ReactNode;\n headerClassName?: string;\n className?: string;\n onScrollDOMReady?: (el: HTMLElement | null) => void;\n /**\n * When true, the pane renders with the error palette to signal the side has\n * been deleted upstream. The CodeMirror editor is still mounted so the diff\n * remains visible — only the background, gutter, header, and border switch.\n */\n deleted?: boolean;\n};\n\nexport const MergePane = ({\n value,\n highlightedLines,\n lineClassification,\n readOnly = false,\n onChange,\n header,\n headerClassName,\n className,\n onScrollDOMReady,\n deleted = false,\n}: Props) => {\n const editorRef = useRef<ReactCodeMirrorRef>(null);\n\n const extensions = useMemo(\n (): Extension[] => [\n createDiffHighlightExtension(),\n EditorView.theme({\n '&.cm-editor': {\n height: '100%',\n backgroundColor: deleted ? colors.error[100] : colors.neutral[50],\n outline: 'none',\n },\n '.cm-gutters': {\n backgroundColor: deleted ? colors.error[200] : colors.neutral[100],\n },\n '*': { lineHeight: `${LINE_HEIGHT_PX}px` },\n '.cm-lineNumbers .cm-gutterElement': { padding: '0 0 0 25px' },\n }),\n // Recalc viewport after every doc change so late-settling layouts (alerts\n // appearing above the editor) don't leave trailing lines blank.\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n requestAnimationFrame(() => update.view.dispatch({}));\n }\n }),\n ],\n [deleted],\n );\n\n // A deleted side is a file-level conflict, not a line-level one — suppress\n // per-line markers so the pane wears only the red wash. Keeping `deleted` in\n // the dep list also re-applies highlights when the extension array is\n // reconfigured (which re-instantiates the diff-highlight StateField).\n useEffect(() => {\n const view = editorRef.current?.view;\n if (!view) return;\n updateHighlightedLines(\n view,\n deleted ? EMPTY_LINES : highlightedLines,\n deleted ? EMPTY_CLASSIFICATION : lineClassification,\n );\n }, [highlightedLines, lineClassification, deleted]);\n\n const handleCreateEditor = useCallback(\n (view: EditorView) => {\n updateHighlightedLines(\n view,\n deleted ? EMPTY_LINES : highlightedLines,\n deleted ? EMPTY_CLASSIFICATION : lineClassification,\n );\n onScrollDOMReady?.(view.scrollDOM);\n },\n [highlightedLines, lineClassification, onScrollDOMReady, deleted],\n );\n\n useEffect(() => {\n return () => onScrollDOMReady?.(null);\n }, [onScrollDOMReady]);\n\n // Re-measure on wrapper resize — parent dimensions settle after CM mounts\n // (fullscreen modal, alerts appearing above the editor).\n useEffect(() => {\n const view = editorRef.current?.view;\n const wrapper = view?.dom.parentElement;\n if (!view || !wrapper) return;\n\n const observer = new ResizeObserver(() => view.dispatch({}));\n observer.observe(wrapper);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n className={cn(\n 'tw-flex tw-min-w-0 tw-flex-1 tw-flex-col tw-overflow-hidden',\n className,\n deleted && 'tw-border-error-300',\n )}\n >\n {header && (\n <div\n className={cn(\n 'tw-px-4 tw-py-3',\n deleted ? 'tw-border-b tw-border-error-200 tw-bg-error-100' : 'tw-bg-background',\n headerClassName,\n )}\n >\n {header}\n </div>\n )}\n <div className=\"tw-flex tw-h-0 tw-flex-1 tw-flex-col [&_>div]:tw-h-full\">\n <CodeMirror\n ref={editorRef}\n height=\"100%\"\n value={value}\n onChange={onChange}\n extensions={extensions}\n readOnly={readOnly}\n onCreateEditor={handleCreateEditor}\n basicSetup={{ lineNumbers: true, drawSelection: false }}\n />\n </div>\n </div>\n );\n};\n","import { useCallback, useRef } from 'react';\n\nexport const useScrollSync = () => {\n const scrollersRef = useRef<(HTMLElement | null)[]>([]);\n const followersRef = useRef<Map<string, { paneIndex: number; el: HTMLElement }>>(new Map());\n const isSyncingRef = useRef(false);\n const scrollerCallbacksRef = useRef<Map<number, (el: HTMLElement | null) => void>>(new Map());\n const followerCallbacksRef = useRef<Map<string, (el: HTMLElement | null) => void>>(new Map());\n\n const updateFollowers = useCallback(() => {\n for (const [, { paneIndex, el }] of followersRef.current) {\n const scroller = scrollersRef.current[paneIndex];\n if (!scroller) continue;\n el.style.transform = `translateY(-${scroller.scrollTop}px)`;\n }\n }, []);\n\n const handleScroll = useCallback(\n (e: Event) => {\n if (isSyncingRef.current) return;\n isSyncingRef.current = true;\n\n // Px-aligned sync. All panes share LINE_HEIGHT_PX, so matching scrollTop is the same\n // as matching the line at the top of the viewport. Previous ratio-based sync drifted\n // badly when pane heights differed (e.g. 50 lines vs 500 — half-scrolling left snapped\n // right to its midpoint, not to the equivalent line). Clamp to each target's max so\n // the source can scroll past where shorter panes bottom out without errors.\n const sourceScrollTop = (e.target as HTMLElement).scrollTop;\n\n for (const scroller of scrollersRef.current) {\n if (!scroller || scroller === e.target) continue;\n const targetMax = Math.max(0, scroller.scrollHeight - scroller.clientHeight);\n scroller.scrollTop = Math.min(sourceScrollTop, targetMax);\n }\n\n updateFollowers();\n isSyncingRef.current = false;\n },\n [updateFollowers],\n );\n\n const registerScroller = useCallback(\n (index: number) => {\n const existing = scrollerCallbacksRef.current.get(index);\n if (existing) return existing;\n\n const callback = (el: HTMLElement | null) => {\n const prev = scrollersRef.current[index];\n if (prev === el) return;\n\n prev?.removeEventListener('scroll', handleScroll);\n scrollersRef.current[index] = el;\n el?.addEventListener('scroll', handleScroll, { passive: true });\n };\n\n scrollerCallbacksRef.current.set(index, callback);\n return callback;\n },\n [handleScroll],\n );\n\n const registerFollower = useCallback((paneIndex: number, key: string) => {\n const existing = followerCallbacksRef.current.get(key);\n if (existing) return existing;\n\n const callback = (el: HTMLElement | null) => {\n if (el) {\n followersRef.current.set(key, { paneIndex, el });\n } else {\n followersRef.current.delete(key);\n }\n };\n\n followerCallbacksRef.current.set(key, callback);\n return callback;\n }, []);\n\n return { registerScroller, registerFollower };\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { AcceptControls } from './AcceptControls/AcceptControls';\nimport type { ChangeClassification, MergeConflict } from './constants';\nimport { MergePane } from './MergePane';\nimport { useScrollSync } from './useScrollSync';\n\nconst EMPTY_LINES: Set<number> = new Set();\nconst EMPTY_CLASSIFICATION: Map<number, ChangeClassification> = new Map();\n\ntype Props = {\n mergeValue: string;\n handleMergeChange: (value: string) => void;\n leftText: string;\n rightText: string;\n leftConflicts: MergeConflict[];\n rightConflicts: MergeConflict[];\n leftHighlightedLines: Set<number>;\n rightHighlightedLines: Set<number>;\n leftClassification: Map<number, ChangeClassification>;\n rightClassification: Map<number, ChangeClassification>;\n mergeHighlightedLines: Set<number>;\n mergeClassification: Map<number, ChangeClassification>;\n acceptLeft: (conflict: MergeConflict) => void;\n acceptRight: (conflict: MergeConflict) => void;\n dismissLeft: (conflict: MergeConflict) => void;\n dismissRight: (conflict: MergeConflict) => void;\n leftHeader?: ReactNode;\n middleHeader?: ReactNode;\n middleHeaderClassName?: string;\n middleClassName?: string;\n rightHeader?: ReactNode;\n className?: string;\n /** @internal Transitional opt-in; removed once consumers wrap argo sections in `<ThemeProvider>`. */\n argo?: boolean;\n /**\n * Paint the corresponding read-only pane with the error palette to signal the\n * side has been deleted upstream. The diff is still rendered so the user can\n * see what was lost; accept/dismiss controls for that side are suppressed.\n */\n leftDeleted?: boolean;\n rightDeleted?: boolean;\n};\n\nexport const MergeEditor = ({\n mergeValue,\n handleMergeChange,\n leftText,\n rightText,\n leftConflicts,\n rightConflicts,\n leftHighlightedLines,\n rightHighlightedLines,\n leftClassification,\n rightClassification,\n mergeHighlightedLines,\n mergeClassification,\n acceptLeft,\n acceptRight,\n dismissLeft,\n dismissRight,\n leftHeader,\n middleHeader,\n middleHeaderClassName,\n middleClassName,\n rightHeader,\n className,\n argo,\n leftDeleted = false,\n rightDeleted = false,\n}: Props) => {\n const { registerScroller, registerFollower } = useScrollSync();\n\n // When either side is deleted the merge is a binary \"keep or drop the file\"\n // choice, not a line-level merge — suppress per-line markers in the middle\n // pane so the indicator/markers don't contradict the red deleted pane.\n const anySideDeleted = leftDeleted || rightDeleted;\n\n return (\n <div\n className={cn(\n 'tw-flex tw-h-full tw-min-h-0 tw-overflow-hidden tw-bg-background tw-gap-3',\n className,\n )}\n >\n <MergePane\n value={leftText}\n highlightedLines={leftHighlightedLines}\n lineClassification={leftClassification}\n readOnly\n header={leftHeader}\n className=\"tw-rounded-r-lg tw-border tw-border-border\"\n onScrollDOMReady={registerScroller(0)}\n deleted={leftDeleted}\n />\n\n <AcceptControls\n conflicts={leftDeleted ? [] : leftConflicts}\n side=\"left\"\n onAccept={acceptLeft}\n onDismiss={dismissLeft}\n contentRef={registerFollower(0, 'left-controls')}\n argo={argo}\n />\n\n <MergePane\n value={mergeValue}\n highlightedLines={anySideDeleted ? EMPTY_LINES : mergeHighlightedLines}\n lineClassification={anySideDeleted ? EMPTY_CLASSIFICATION : mergeClassification}\n onChange={handleMergeChange}\n header={middleHeader}\n headerClassName={middleHeaderClassName}\n className={cn('tw-border tw-border-border tw-rounded-lg', middleClassName)}\n onScrollDOMReady={registerScroller(1)}\n />\n\n <AcceptControls\n conflicts={rightDeleted ? [] : rightConflicts}\n side=\"right\"\n onAccept={acceptRight}\n onDismiss={dismissRight}\n contentRef={registerFollower(2, 'right-controls')}\n argo={argo}\n />\n\n <MergePane\n value={rightText}\n highlightedLines={rightHighlightedLines}\n lineClassification={rightClassification}\n readOnly\n header={rightHeader}\n className=\"tw-rounded-l-lg tw-border tw-border-border\"\n onScrollDOMReady={registerScroller(2)}\n deleted={rightDeleted}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/constants/keyCodes.ts","../src/utils/classNames.ts","../src/utils/copyToClipboard.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/utils/escapeStringRegexp.ts","../src/components/HelpBlock/HelpBlock.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/CodeEditor/ButtonToolbar.tsx","../src/components/CodeEditor/helpers.ts","../src/components/Kbd/KbdSeparator.tsx","../src/components/Kbd/KbdGroup.tsx","../src/components/Kbd/styles.ts","../src/components/Kbd/Kbd.tsx","../src/components/CodeEditor/ToggleComponentHelp.tsx","../src/components/CodeEditor/CodeEditor.tsx","../src/components/CodeEditor/activeQueryHighlight.ts","../src/components/CodeEditor/highlighting.ts","../src/components/CodeEditor/search.ts","../src/components/CodeEditor/SqlEditor.tsx","../src/components/MergeEditor/constants.ts","../src/components/MergeEditor/AcceptControls/AcceptButton.tsx","../src/components/MergeEditor/AcceptControls/AcceptControls.tsx","../src/components/MergeEditor/decorations.ts","../src/components/MergeEditor/MergePane.tsx","../src/components/MergeEditor/useScrollSync.ts","../src/components/MergeEditor/MergeEditor.tsx"],"names":["extendTailwindMerge","clsx","createContext","use","keboolaLegacy","cva","Portal","jsx","Content","Root","Trigger","useState","jsxs","lucide_react_star","forwardRef","Slottable","text","colors","githubLightInit","python","sql","StreamLanguage","sfsql","PLSQL","r","shell","javascript","json","Children","Fragment","useMemo","linter","jsonParseLinter","EditorView","EditorState","completeAnyWord","keymap","autocompletion","cmPlaceholder","unifiedMergeView","CodeMirror","Decoration","view","ViewPlugin","GutterMarker","StateEffect","StateField","gutter","RangeSet","BASIS_SETUP","useRef","defaultKeymap","installExtensions","useEffect","useCallback","RangeSetBuilder","gutterLineClass","theme","EMPTY_LINES","EMPTY_CLASSIFICATION"],"mappings":"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","file":"editors.cjs","sourcesContent":["export const keyCodes = {\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SPACE: ' ',\n};\n","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 { 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","// 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 { 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","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-secondary-500',\n 'focus-visible:tw-ring-4',\n 'focus-visible:tw-ring-secondary-200',\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 { 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 type { ReactNode } from 'react';\n\nimport { ClipboardButton } from '../../blocks/ClipboardButton';\n\nexport const ButtonToolbar = ({ value, children }: { value?: string; children?: ReactNode }) => {\n if (!value && !children) return null;\n\n return (\n <div className=\"tw-pointer-events-auto tw-ml-auto tw-mr-4 tw-flex tw-w-fit tw-gap-1 tw-overflow-visible tw-rounded-lg tw-border tw-border-solid tw-border-border !tw-bg-background tw-p-[3px] tw-shadow\">\n {!!value && <ClipboardButton size=\"icon-sm\" variant=\"invisible\" text={value} />}\n {children}\n </div>\n );\n};\n","import { javascript } from '@codemirror/lang-javascript';\nimport { json } from '@codemirror/lang-json';\nimport { python } from '@codemirror/lang-python';\nimport { PLSQL, sql } from '@codemirror/lang-sql';\nimport { StreamLanguage } from '@codemirror/language';\nimport { r } from '@codemirror/legacy-modes/mode/r';\nimport { shell } from '@codemirror/legacy-modes/mode/shell';\nimport { githubLightInit } from '@uiw/codemirror-theme-github';\n\nimport { sfsql } from '@keboola/codemirror-lang-sfsql';\nimport colors from '@keboola/tailwind-config/colors';\n\nexport type LANGUAGE_MODE =\n | 'application/json'\n | 'text/x-python'\n | 'text/x-sql'\n | 'text/x-sfsql'\n | 'text/x-plsql'\n | 'text/x-rsrc'\n | 'text/x-sh'\n | 'text/javascript'\n | 'text/typescript';\n\nexport const baseThemeStyles = {\n '*': { lineHeight: '20px' },\n '*::selection': {\n backgroundColor: colors.secondary[500],\n color: `${colors.white} !important`,\n },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"])': { backgroundColor: colors.neutral[150] },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"]) .cm-gutters': {\n backgroundColor: colors.neutral[200],\n },\n '&.cm-editor .cm-scroller': { overflowAnchor: 'none' },\n '&.cm-editor, &.cm-editor .cm-scroller': {\n minHeight: '100%',\n flexGrow: 1,\n alignItems: 'stretch !important',\n outline: 'none',\n },\n '.cm-gutter.cm-foldGutter': { display: 'none !important' },\n '.cm-gutter.cm-lineNumbers': { paddingLeft: '20px', paddingRight: '6px' },\n '.cm-gutters': { height: 'auto' },\n\n // tokens overrides\n '.cm-line .tok-string': { color: colors.warning[700] },\n\n // merge (diff) view\n '&[class*=\"cm-merge-\"] .cm-deletedLine': { backgroundColor: colors.error[100] },\n '&[class*=\"cm-merge-\"] .cm-changedLine': { backgroundColor: colors.primary[100] },\n '&[class*=\"cm-merge-\"] .cm-deletedLineGutter': { backgroundColor: colors.error[200] },\n '&[class*=\"cm-merge-\"] .cm-changedLineGutter': { backgroundColor: colors.primary[200] },\n '&[class*=\"cm-merge-\"] .cm-deletedText': { background: colors.error[200] },\n '&[class*=\"cm-merge-\"] .cm-changedText': { background: colors.primary[200] },\n '&[class*=\"cm-merge-\"]': {\n backgroundColor: `${colors.white} !important`,\n },\n '&[class*=\"cm-merge-\"] .cm-gutters': {\n backgroundColor: `${colors.white} !important`,\n },\n '.cm-changeGutter': { position: 'absolute', zIndex: -1, width: '100%', paddingLeft: 0 },\n '&[class*=\"cm-merge-\"] .cm-changedLine,&[class*=\"cm-merge-\"] .cm-line, &[class*=\"cm-merge-\"] .cm-deletedChunk':\n { paddingLeft: 0 },\n};\n\nexport const BASIS_SETUP = { drawSelection: false };\n\nexport const customTheme = githubLightInit({\n settings: {\n fontFamily: `'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New'`,\n background: colors.neutral[50],\n gutterBackground: colors.neutral[100],\n gutterBorder: 'transparent',\n lineHighlight: 'transparent',\n selection: colors.secondary[500],\n },\n});\n\nexport const getLanguageMode = (mode?: LANGUAGE_MODE) => {\n switch (mode) {\n case 'text/x-python':\n return python();\n case 'text/x-sql':\n return sql({ upperCaseKeywords: true });\n case 'text/x-sfsql':\n return StreamLanguage.define(sfsql);\n case 'text/x-plsql':\n return sql({ upperCaseKeywords: true, dialect: PLSQL });\n case 'text/x-rsrc':\n return StreamLanguage.define(r);\n case 'text/x-sh':\n return StreamLanguage.define(shell);\n case 'text/javascript':\n return javascript({ jsx: true });\n case 'text/typescript':\n return javascript({ jsx: true, typescript: true });\n default:\n return json();\n }\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'span'>;\n\nexport const KbdSeparator = ({ className, ...props }: Props) => (\n <span {...props} className={cn('tw-text-xs tw-text-muted-foreground', className)} />\n);\n","import { Children, Fragment } from 'react';\nimport type { ComponentProps, ElementRef, Ref } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { KbdSeparator } from './KbdSeparator';\n\ntype Props = { separator?: string } & ComponentProps<'kbd'>;\n\nexport const KbdGroup = ({\n ref,\n className,\n children,\n separator,\n ...props\n}: Props & { ref?: Ref<ElementRef<'kbd'>> }) => {\n return (\n <kbd\n {...props}\n ref={ref}\n className={cn('tw-inline-flex', 'tw-items-center', 'tw-gap-1', className)}\n >\n {separator\n ? // oxlint-disable-next-line react-x/no-children-to-array\n Children.toArray(children).map((child, index) => (\n // oxlint-disable-next-line\n <Fragment key={index}>\n {index > 0 && <KbdSeparator>{separator}</KbdSeparator>}\n {child}\n </Fragment>\n ))\n : children}\n </kbd>\n );\n};\n","import { cva } from 'class-variance-authority';\n\nexport const kbdVariants = cva(\n [\n 'tailwindcss-preflight',\n // style\n 'tw-pointer-events-none',\n 'tw-w-fit',\n 'tw-h-5',\n 'tw-min-w-5',\n\n // layout\n 'tw-inline-flex',\n 'tw-items-center',\n 'tw-justify-center',\n 'tw-gap-1',\n 'tw-shrink-0',\n\n // spacing\n 'tw-px-1',\n '[&_svg:not([class*=\"size-\"])]:tw-size-2.5',\n\n 'tw-text-xs',\n 'tw-font-medium',\n\n 'tw-rounded',\n ],\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n default: 'tw-bg-muted tw-text-muted-foreground',\n primary: 'tw-bg-white/20 tw-text-white',\n },\n },\n },\n);\n","import type { ComponentProps } from 'react';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { KbdGroup } from './KbdGroup';\nimport { KbdSeparator } from './KbdSeparator';\nimport { kbdVariants } from './styles';\n\ntype Props = ComponentProps<'kbd'> & VariantProps<typeof kbdVariants>;\n\nexport const Kbd = ({ children, className, variant, ...rest }: Props) => (\n <kbd {...rest} className={kbdVariants({ className, variant })}>\n {children}\n </kbd>\n);\n\nKbd.Group = KbdGroup;\nKbd.Separator = KbdSeparator;\n","import { Kbd } from '../Kbd';\n\nexport const ToggleComponentHelp = () => (\n <div>\n Use <Kbd>Ctrl+/</Kbd> or <Kbd>Command+/</Kbd> to toggle comments.\n </div>\n);\n","import { useMemo } from 'react';\nimport type { KeyboardEvent, ReactNode } from 'react';\nimport { autocompletion, completeAnyWord } from '@codemirror/autocomplete';\nimport { jsonParseLinter } from '@codemirror/lang-json';\nimport { linter } from '@codemirror/lint';\nimport { unifiedMergeView } from '@codemirror/merge';\nimport { EditorView, keymap, placeholder as cmPlaceholder } from '@codemirror/view';\nimport CodeMirror, { EditorState, type Extension } from '@uiw/react-codemirror';\n\nimport { keyCodes } from '../../constants/keyCodes';\nimport { cn } from '../../utils';\nimport { HelpBlock } from '../HelpBlock';\n\nimport { ButtonToolbar } from './ButtonToolbar';\nimport type { LANGUAGE_MODE } from './helpers';\nimport { baseThemeStyles, BASIS_SETUP, customTheme, getLanguageMode } from './helpers';\nimport { ToggleComponentHelp } from './ToggleComponentHelp';\n\ntype Props = {\n value: string;\n previousValue?: string;\n mode?: LANGUAGE_MODE;\n placeholder?: string;\n readOnly?: boolean;\n autocompletions?: string[];\n extraKeys?: Record<string, () => void>;\n withToggleCommentHint?: boolean;\n withAutofocus?: boolean;\n withLineNumbers?: boolean;\n withLineWrapping?: boolean;\n withCollapseUnchanged?: boolean;\n withCopyButton?: boolean;\n completeAny?: boolean;\n help?: ReactNode;\n helpPostfix?: ReactNode;\n renderAdditionalButtons?: (value?: string) => ReactNode;\n className?: string;\n} & (\n | { readOnly: true; onChange?: never }\n | { readOnly?: false; onChange: (value: string) => void }\n);\n\nconst emptyArray: string[] = [];\nconst emptyObject = {};\n\nexport const CodeEditor = ({\n value,\n previousValue,\n onChange,\n mode = 'application/json',\n placeholder = '',\n readOnly = false,\n autocompletions = emptyArray,\n extraKeys = emptyObject,\n withToggleCommentHint = false,\n withAutofocus = false,\n withLineNumbers = true,\n withLineWrapping = true,\n withCollapseUnchanged = false,\n withCopyButton = true,\n completeAny = false,\n help = null,\n helpPostfix = null,\n renderAdditionalButtons,\n className,\n}: Props) => {\n const commonExtensions: Extension[] = useMemo(() => {\n return [\n getLanguageMode(mode),\n mode === 'application/json' && linter(jsonParseLinter()),\n withLineWrapping ? EditorView.lineWrapping : [],\n EditorState.languageData.of(() => [\n { autocomplete: completeAny ? completeAnyWord : autocompletions },\n ]),\n keymap.of(\n Object.entries(extraKeys).map(([key, run]) => ({\n key,\n run: () => {\n if (typeof run === 'string') return run;\n\n run();\n return true;\n },\n })),\n ),\n autocompletion({ activateOnTyping: completeAny }),\n EditorView.theme(baseThemeStyles),\n ].filter(Boolean) as Extension[];\n }, [autocompletions, completeAny, extraKeys, mode, withLineWrapping]);\n\n const extensions = useMemo(() => {\n return [\n ...commonExtensions,\n cmPlaceholder(placeholder),\n EditorView.editable.of(!readOnly),\n EditorState.readOnly.of(readOnly),\n previousValue\n ? unifiedMergeView({\n original: previousValue,\n mergeControls: false,\n highlightChanges: false,\n collapseUnchanged: withCollapseUnchanged ? {} : undefined,\n })\n : [],\n ];\n }, [commonExtensions, placeholder, readOnly, previousValue, withCollapseUnchanged]);\n\n const config = useMemo(() => {\n return {\n ...BASIS_SETUP,\n lineNumbers: withLineNumbers,\n };\n }, [withLineNumbers]);\n\n return (\n // oxlint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n className={cn(\n 'tw-relative tw-flex tw-min-h-0 tw-flex-col [&_.cm-mergeViewEditor]:tw-overflow-visible [&_.cm-mergeViewEditors]:tw-h-full [&_.cm-mergeView]:tw-h-full [&_>div]:tw-h-full [&_>div]:tw-overflow-auto [&_>div]:tw-bg-background',\n { 'tw-mt-5': !!renderAdditionalButtons },\n className,\n )}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === keyCodes.ESCAPE) {\n event.stopPropagation();\n }\n }}\n >\n {(withCopyButton || renderAdditionalButtons) && (\n <div className=\"tw-pointer-events-none tw-absolute tw-z-10 tw-flex !tw-h-auto tw-w-full tw-translate-y-[calc(-100%_+_8px)] !tw-overflow-visible !tw-bg-transparent\">\n <div className=\"tw-flex-1\">\n <ButtonToolbar value={withCopyButton ? value : undefined}>\n {renderAdditionalButtons?.(value)}\n </ButtonToolbar>\n </div>\n </div>\n )}\n <CodeMirror\n theme={customTheme}\n value={value}\n onChange={onChange}\n extensions={extensions}\n autoFocus={withAutofocus}\n basicSetup={config}\n />\n {!readOnly && (withToggleCommentHint || help || helpPostfix) && (\n <HelpBlock className=\"tw-mt-2 tw-flex tw-flex-wrap tw-gap-1\">\n {help}\n {withToggleCommentHint ? <ToggleComponentHelp /> : null}\n {helpPostfix}\n </HelpBlock>\n )}\n </div>\n );\n};\n","import type { ChangeSet, Range } from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nconst activeQueryFirstLine = Decoration.line({ class: 'cm-active-query cm-active-query-first' });\nconst activeQueryMiddleLine = Decoration.line({ class: 'cm-active-query' });\nconst activeQueryLastLine = Decoration.line({ class: 'cm-active-query cm-active-query-last' });\nconst activeQuerySingleLine = Decoration.line({\n class: 'cm-active-query cm-active-query-first cm-active-query-last',\n});\n\ntype QueryBoundary = { from: number; to: number };\n\n/**\n * Given pre-computed query boundaries and a cursor position, find which query\n * the cursor is in. Returns trimmed character offsets or null.\n */\nexport const findActiveQueryRange = (\n doc: string,\n cursorPos: number,\n boundaries: QueryBoundary[],\n): { from: number; to: number } | null => {\n if (boundaries.length === 0) return null;\n\n let match: QueryBoundary | undefined = boundaries[boundaries.length - 1];\n for (const boundary of boundaries) {\n if (cursorPos <= boundary.to) {\n match = boundary;\n break;\n }\n }\n\n if (!match) return null;\n\n // Trim leading/trailing whitespace from the query range for tighter boundaries\n const queryText = doc.slice(match.from, match.to);\n const leadingWhitespace = queryText.length - queryText.trimStart().length;\n const trailingWhitespace = queryText.length - queryText.trimEnd().length;\n\n const trimmedStart = match.from + leadingWhitespace;\n const trimmedEnd = match.to - trailingWhitespace;\n\n if (trimmedStart >= trimmedEnd) return null;\n\n return { from: trimmedStart, to: trimmedEnd };\n};\n\n/**\n * Convert splitSqlQueries result (array of query strings that join back to the\n * original doc) into character-offset boundaries.\n */\nconst computeBoundaries = (queries: string[]): QueryBoundary[] => {\n const boundaries: QueryBoundary[] = [];\n let offset = 0;\n for (const query of queries) {\n boundaries.push({ from: offset, to: offset + query.length });\n offset += query.length;\n }\n return boundaries;\n};\n\n/**\n * Synchronously map cached boundaries through a changeset.\n *\n * Boundaries can outlive the document state they were computed from (the async\n * re-parse in `scheduleDocParse` is debounced, so several edits may land\n * before new boundaries are produced). When that happens a cached position\n * can exceed the changeset's pre-change length and `ChangeSet.mapPos` throws\n * `RangeError: Position X is out of range for changeset of length Y`.\n *\n * Clamp positions into the valid `[0, changes.length]` range before mapping\n * and drop degenerate boundaries so the mapping is safe even with stale cache.\n */\nexport const mapBoundariesThroughChanges = (\n boundaries: QueryBoundary[],\n changes: ChangeSet,\n): QueryBoundary[] => {\n const prevLen = changes.length;\n const mapped: QueryBoundary[] = [];\n for (const b of boundaries) {\n const from = changes.mapPos(Math.max(0, Math.min(b.from, prevLen)), -1);\n const to = changes.mapPos(Math.max(0, Math.min(b.to, prevLen)), 1);\n if (from < to) mapped.push({ from, to });\n }\n return mapped;\n};\n\nconst buildDecorations = (view: EditorView, range: { from: number; to: number }) => {\n const startLine = view.state.doc.lineAt(range.from).number;\n const endLine = view.state.doc.lineAt(range.to).number;\n\n const decorations: Range<Decoration>[] = [];\n for (let lineNum = startLine; lineNum <= endLine; lineNum++) {\n const lineStart = view.state.doc.line(lineNum).from;\n if (startLine === endLine) {\n decorations.push(activeQuerySingleLine.range(lineStart));\n } else if (lineNum === startLine) {\n decorations.push(activeQueryFirstLine.range(lineStart));\n } else if (lineNum === endLine) {\n decorations.push(activeQueryLastLine.range(lineStart));\n } else {\n decorations.push(activeQueryMiddleLine.range(lineStart));\n }\n }\n\n return Decoration.set(decorations);\n};\n\nexport const activeQueryHighlight = (splitQueries: (sql: string) => Promise<string[]>) => {\n return [\n ViewPlugin.fromClass(\n class {\n decorations = Decoration.none;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private seq = 0;\n private cachedDoc = '';\n private cachedBoundaries: QueryBoundary[] = [];\n private destroyed = false;\n\n constructor(view: EditorView) {\n this.scheduleDocParse(view);\n }\n\n update(update: ViewUpdate) {\n if (update.focusChanged && !update.view.hasFocus) {\n this.decorations = Decoration.none;\n return;\n }\n\n if (update.docChanged) {\n // Synchronously map cached boundaries through document changes\n // so decorations update immediately without waiting for async re-parse.\n // Positions are clamped inside mapBoundariesThroughChanges because\n // the async re-parse is debounced and boundaries can be stale.\n if (this.cachedBoundaries.length > 0) {\n this.cachedBoundaries = mapBoundariesThroughChanges(\n this.cachedBoundaries,\n update.changes,\n );\n this.cachedDoc = update.state.doc.toString();\n this.updateFromCache(update.view);\n }\n // Still re-parse for accurate boundaries (handles structural changes like new semicolons)\n this.scheduleDocParse(update.view);\n } else if (update.selectionSet || (update.focusChanged && update.view.hasFocus)) {\n this.updateFromCache(update.view);\n }\n }\n\n destroy() {\n this.destroyed = true;\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n }\n\n /**\n * Update decorations using cached query boundaries.\n * Only mutates this.decorations — does NOT call view.dispatch().\n * When called from update() (sync), CodeMirror picks up the new\n * decorations via the accessor. When called from the async\n * scheduleDocParse callback, the caller must dispatch separately.\n */\n private updateFromCache(view: EditorView) {\n if (!view.hasFocus) {\n this.decorations = Decoration.none;\n return;\n }\n\n const { main } = view.state.selection;\n\n if (main.from !== main.to) {\n // User has text selected — hide highlight\n this.decorations = Decoration.none;\n return;\n }\n\n const doc = view.state.doc.toString();\n if (doc !== this.cachedDoc) return;\n if (this.cachedBoundaries.length === 0) {\n this.decorations = Decoration.none;\n return;\n }\n\n const range = findActiveQueryRange(doc, main.head, this.cachedBoundaries);\n this.decorations = range ? buildDecorations(view, range) : Decoration.none;\n }\n\n /** Parse queries async (debounced) and update decorations. */\n private scheduleDocParse(view: EditorView) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n\n this.debounceTimer = setTimeout(async () => {\n const seq = ++this.seq;\n const doc = view.state.doc.toString();\n\n if (!doc.trim()) {\n this.cachedDoc = doc;\n this.cachedBoundaries = [];\n if (this.decorations !== Decoration.none) {\n this.decorations = Decoration.none;\n if (!this.destroyed) view.dispatch();\n }\n return;\n }\n\n let queries: string[];\n try {\n queries = await splitQueries(doc);\n } catch {\n return;\n }\n\n // Discard stale results\n if (this.destroyed || seq !== this.seq) return;\n\n this.cachedDoc = doc;\n this.cachedBoundaries = computeBoundaries(queries);\n\n this.updateFromCache(view);\n if (!this.destroyed) view.dispatch();\n }, 100);\n }\n },\n { decorations: (v) => v.decorations },\n ),\n EditorView.baseTheme({\n '.cm-active-query': {\n boxShadow: `inset -1px 0 0 0 ${colors.secondary[300]}, inset 1px 0 0 0 ${colors.secondary[300]}`,\n marginRight: '8px',\n },\n '.cm-active-query-first': {\n boxShadow: `inset -1px 0 0 0 ${colors.secondary[300]}, inset 1px 0 0 0 ${colors.secondary[300]}, inset 0 1px 0 0 ${colors.secondary[300]}`,\n borderRadius: '4px 4px 0 0',\n },\n '.cm-active-query-last': {\n boxShadow: `inset -1px 0 0 0 ${colors.secondary[300]}, inset 1px 0 0 0 ${colors.secondary[300]}, inset 0 -1px 0 0 ${colors.secondary[300]}`,\n borderRadius: '0 0 4px 4px',\n },\n '.cm-active-query-first.cm-active-query-last': {\n boxShadow: `inset 0 0 0 1px ${colors.secondary[300]}`,\n borderRadius: '4px',\n },\n }),\n ];\n};\n","import type { Extension } from '@codemirror/state';\nimport { RangeSet, StateEffect, StateField } from '@codemirror/state';\nimport { Decoration, EditorView, gutter, GutterMarker } from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { activeQueryHighlight } from './activeQueryHighlight';\n\nexport type HighlightedLines = {\n from: number;\n to: number;\n error?: { from: number; to: number };\n processing?: { from: number; to: number };\n} | null;\n\n// Gutter markers for highlighting\nclass HighlightMarker extends GutterMarker {\n override toDOM() {\n const marker = document.createElement('div');\n marker.className = 'cm-highlight-marker';\n return marker;\n }\n}\n\nconst highlightMarker = new HighlightMarker();\n\n// Helper function to iterate over line range and apply a callback\nconst forEachLineInRange = <T>(\n doc: { lines: number; line: (n: number) => { from: number } },\n from: number,\n to: number,\n callback: (lineFrom: number) => T,\n): T[] => {\n const results: T[] = [];\n\n // Convert 0-based to 1-based for CodeMirror\n const fromLine = Math.max(1, from + 1);\n const toLine = Math.min(doc.lines, to + 1);\n\n for (let i = fromLine; i <= toLine; i++) {\n const line = doc.line(i);\n results.push(callback(line.from));\n }\n\n return results;\n};\n\n// State effect for setting highlighted lines\nconst setHighlightedLinesEffect = StateEffect.define<HighlightedLines>();\n\n// State field for storing highlighted lines info\nconst highlightedLinesField = StateField.define<HighlightedLines>({\n create() {\n return null;\n },\n update(value, transaction) {\n for (const effect of transaction.effects) {\n if (effect.is(setHighlightedLinesEffect)) {\n return effect.value;\n }\n }\n return value;\n },\n});\n\n// Gutter extension that displays highlight markers\nconst highlightGutter = gutter({\n class: 'cm-highlight-gutter',\n markers: (view): RangeSet<GutterMarker> => {\n const highlightInfo = view.state.field(highlightedLinesField, false);\n\n if (!highlightInfo) {\n return RangeSet.empty;\n }\n\n // Add blue markers for all running query lines\n const markers = forEachLineInRange(\n view.state.doc,\n highlightInfo.from,\n highlightInfo.to,\n (lineFrom) => highlightMarker.range(lineFrom),\n );\n\n return RangeSet.of(markers);\n },\n});\n\n// State field for error line background decorations\nconst errorLineDecorations = StateField.define({\n create() {\n return Decoration.none;\n },\n update(decorations, transaction) {\n decorations = decorations.map(transaction.changes);\n for (const effect of transaction.effects) {\n if (!effect.is(setHighlightedLinesEffect)) {\n continue;\n }\n\n if (!effect.value || !effect.value.error) {\n return Decoration.none;\n }\n\n // Add error line background decorations\n const decorationArray = forEachLineInRange(\n transaction.state.doc,\n effect.value.error.from,\n effect.value.error.to,\n (lineFrom) => Decoration.line({ class: 'cm-error-line' }).range(lineFrom),\n );\n\n return Decoration.set(decorationArray);\n }\n return decorations;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\n// State field for processing line background decorations\nconst processingLineDecorations = StateField.define({\n create() {\n return Decoration.none;\n },\n update(decorations, transaction) {\n decorations = decorations.map(transaction.changes);\n for (const effect of transaction.effects) {\n if (!effect.is(setHighlightedLinesEffect)) {\n continue;\n }\n\n if (!effect.value || !effect.value.processing) {\n return Decoration.none;\n }\n\n const decorationArray = forEachLineInRange(\n transaction.state.doc,\n effect.value.processing.from,\n effect.value.processing.to,\n (lineFrom) => Decoration.line({ class: 'cm-processing-line' }).range(lineFrom),\n );\n\n return Decoration.set(decorationArray);\n }\n return decorations;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\n// Theme for highlighted lines\nconst highlightedLinesTheme = EditorView.baseTheme({\n '.cm-highlight-gutter': {\n width: '2px',\n marginRight: '2px',\n },\n '.cm-highlight-marker': {\n width: '2px',\n height: '100%',\n backgroundColor: colors.secondary[500],\n },\n '.cm-error-line': {\n backgroundColor: `${colors.error[100]} !important`,\n },\n '.cm-processing-line': {\n backgroundColor: `${colors.secondary[100]} !important`,\n },\n});\n\n// Install highlight lines extension\nexport function highlightingExtension(\n queryParser?: (sql: string) => Promise<string[]>,\n): Extension[] {\n return [\n highlightedLinesField,\n highlightGutter,\n errorLineDecorations,\n processingLineDecorations,\n highlightedLinesTheme,\n ...(queryParser ? activeQueryHighlight(queryParser) : []),\n ];\n}\n\nexport function updateHighlighting(view: EditorView, lines?: HighlightedLines) {\n view.dispatch({ effects: setHighlightedLinesEffect.of(lines ?? null) });\n}\n","import { StateEffect, StateField, type Text } from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n ViewPlugin,\n type ViewUpdate,\n} from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { escapeStringRegexp } from '../../utils/escapeStringRegexp';\n\n// Represents a single search match in the editor\ntype SearchMatch = {\n /** Start position in document */\n from: number;\n /** End position in document */\n to: number;\n /** Text content of the match */\n text: string;\n /** Local match index within this editor (0-based) */\n localIndex: number;\n};\n\n// Effect to update search state\nconst setSearchEffect = StateEffect.define<{\n query: string;\n selectedMatchIndex?: number;\n}>();\n\n// State to track current search matches\ntype SearchState = {\n query: string;\n selectedMatchIndex?: number;\n matches: SearchMatch[];\n decorations: DecorationSet;\n};\n\n// Find all matches in the document\nfunction findMatches(doc: Text, query: string): SearchMatch[] {\n if (!query) return [];\n\n const text = doc.toString();\n\n try {\n const regex = new RegExp(escapeStringRegexp(query), 'gi');\n\n return Array.from(text.matchAll(regex)).map((match, index) => {\n const from = match.index!;\n const to = from + match[0].length;\n\n return { from, to, text: match[0], localIndex: index };\n });\n } catch (e) {\n // Invalid regex - return no matches\n console.warn('Invalid search regex:', e);\n return [];\n }\n}\n\n// Create decorations for search matches\nfunction createDecorations(matches: SearchMatch[], selectedLocalIndex?: number): DecorationSet {\n const decorations = matches.map((match) => {\n const isSelected = match.localIndex === selectedLocalIndex;\n\n const decoration = Decoration.mark({\n class: isSelected ? 'cm-searchMatch-selected' : 'cm-searchMatch',\n });\n\n return decoration.range(match.from, match.to);\n });\n\n return Decoration.set(decorations, true);\n}\n\n// StateField to manage search state\nconst searchField = StateField.define<SearchState>({\n create() {\n return {\n query: '',\n selectedMatchIndex: undefined,\n matches: [],\n decorations: Decoration.none,\n };\n },\n\n update(state, tr) {\n let newState = state;\n\n // Handle search effect\n for (const effect of tr.effects) {\n if (!effect.is(setSearchEffect)) {\n continue;\n }\n\n const { query, selectedMatchIndex } = effect.value;\n\n // Find matches\n const matches = findMatches(tr.state.doc, query);\n\n // Create decorations\n const decorations = createDecorations(matches, selectedMatchIndex);\n\n newState = {\n query,\n selectedMatchIndex,\n matches,\n decorations,\n };\n }\n\n // Map decorations through document changes\n if (tr.docChanged && newState.query) {\n const matches = findMatches(tr.state.doc, newState.query);\n const decorations = createDecorations(matches, newState.selectedMatchIndex);\n\n newState = {\n ...newState,\n matches,\n decorations,\n };\n }\n\n return newState;\n },\n\n provide: (field) => EditorView.decorations.from(field, (state) => state.decorations),\n});\n\n// View plugin to handle scrolling to selected match\nconst searchViewPlugin = ViewPlugin.fromClass(\n class {\n private lastSelectedIndex?: number;\n\n update(update: ViewUpdate) {\n const state = update.state.field(searchField);\n\n // Scroll to selected match when it changes\n if (\n state.selectedMatchIndex !== undefined &&\n state.selectedMatchIndex !== this.lastSelectedIndex\n ) {\n const match = state.matches[state.selectedMatchIndex];\n\n if (match) {\n requestAnimationFrame(() => {\n update.view.dispatch({\n effects: EditorView.scrollIntoView(match.from, { y: 'center' }),\n });\n });\n }\n\n this.lastSelectedIndex = state.selectedMatchIndex;\n }\n\n // Reset if no selection\n if (state.selectedMatchIndex === undefined) {\n this.lastSelectedIndex = undefined;\n }\n }\n },\n);\n\nconst searchTheme = EditorView.baseTheme({\n '.cm-searchMatch': {\n backgroundColor: colors.secondary[100],\n },\n '.cm-searchMatch > span': {\n color: `${colors.secondary[600]} !important`,\n },\n '.cm-searchMatch-selected': {\n backgroundColor: colors.secondary[600],\n },\n '.cm-searchMatch-selected > span': {\n color: `${colors.white} !important`,\n },\n});\n\nexport function searchExtension() {\n return [searchField, searchViewPlugin, searchTheme];\n}\n\nexport function updateSearch(view: EditorView, query: string, selectedMatchIndex?: number) {\n view.dispatch({ effects: setSearchEffect.of({ query, selectedMatchIndex }) });\n}\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { defaultKeymap } from '@codemirror/commands';\nimport type { SQLNamespace } from '@codemirror/lang-sql';\nimport type {\n EditorState,\n KeyBinding,\n ReactCodeMirrorRef,\n ViewUpdate,\n} from '@uiw/react-codemirror';\nimport CodeMirror, { EditorView, keymap } from '@uiw/react-codemirror';\n\nimport { installExtensions, type SqlDialectName } from '@keboola/codemirror-lang-sql';\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { baseThemeStyles, customTheme } from './helpers';\nimport type { HighlightedLines } from './highlighting';\nimport { highlightingExtension, updateHighlighting } from './highlighting';\nimport { searchExtension, updateSearch } from './search';\n\nconst BASIS_SETUP = {\n drawSelection: false,\n defaultKeymap: false,\n completionKeymap: false,\n searchKeymap: false,\n};\n\nconst CUSTOM_KEYMAP: KeyBinding[] = [\n {\n key: 'Escape',\n stopPropagation: true,\n run: (view: EditorView) => {\n view.contentDOM.blur();\n return true;\n },\n },\n];\n\nconst theme = {\n ...baseThemeStyles,\n '&.cm-editor': {\n border: 'solid 1px transparent',\n background: colors.white,\n borderRadius: '8px',\n paddingTop: '8px',\n paddingBottom: '8px',\n },\n '&.cm-editor:has(.cm-content[contenteditable=\"true\"]):hover': {\n borderColor: colors.secondary[500],\n },\n '&.cm-editor:has(.cm-content[contenteditable=\"true\"]):focus-within': {\n borderColor: colors.secondary[500],\n boxShadow: `0 0 0 4px ${colors.secondary[200]}`,\n },\n '&.cm-editor .cm-scroller': { overflowAnchor: 'none' },\n '&.cm-editor :is(.cm-gutters,.cm-scroller)': { background: colors.white },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"])': { background: colors.neutral[100] },\n '&.cm-editor:has(.cm-content[contenteditable=\"false\"]) :is(.cm-scroller,.cm-gutters)': {\n background: colors.neutral[100],\n },\n};\n\ntype Props = {\n value: string;\n onChange?: (value: string) => void;\n onSelectionChange?: (text: string) => void;\n onCreateEditor?: (view: EditorView, state: EditorState) => void;\n onDestroyEditor?: () => void;\n onBlurEditor?: (view: EditorView) => void;\n onFocusEditor?: (view: EditorView) => void;\n readOnly: boolean;\n placeholder?: string;\n searchQuery?: string;\n searchMatchIndex?: number;\n extraKeys?: KeyBinding[];\n queryParser?: (sql: string) => Promise<string[]>;\n autoFocus?: boolean;\n lineNumbers?: boolean;\n className?: string;\n schema?: SQLNamespace;\n variables?: string[];\n defaultSchema?: string;\n defaultDatabase?: string;\n highlightLines?: HighlightedLines;\n dialect?: SqlDialectName;\n};\n\nexport const SqlEditor = ({\n value,\n onChange,\n onSelectionChange,\n onCreateEditor,\n onDestroyEditor,\n onBlurEditor,\n onFocusEditor,\n placeholder = '',\n searchQuery = '',\n searchMatchIndex,\n readOnly = false,\n extraKeys,\n queryParser,\n autoFocus = false,\n lineNumbers = true,\n className,\n schema,\n variables,\n defaultDatabase,\n defaultSchema,\n highlightLines,\n dialect,\n}: Props) => {\n const editorRef = useRef<ReactCodeMirrorRef>(null);\n\n const extensions = useMemo(() => {\n const baseKeymap = [...defaultKeymap, ...CUSTOM_KEYMAP];\n\n return [\n EditorView.lineWrapping,\n keymap.of(extraKeys ? [...extraKeys, ...baseKeymap] : baseKeymap),\n ...installExtensions({ schema, defaultDatabase, defaultSchema, variables, dialect }),\n searchExtension(),\n highlightingExtension(queryParser),\n EditorView.theme(theme),\n onBlurEditor ? EditorView.domEventHandlers({ blur: (_, view) => onBlurEditor(view) }) : [],\n onFocusEditor ? EditorView.domEventHandlers({ focus: (_, view) => onFocusEditor(view) }) : [],\n ];\n }, [\n extraKeys,\n queryParser,\n schema,\n defaultDatabase,\n defaultSchema,\n variables,\n dialect,\n onBlurEditor,\n onFocusEditor,\n ]);\n\n const defaultSetup = useMemo(() => {\n return { ...BASIS_SETUP, lineNumbers };\n }, [lineNumbers]);\n\n useEffect(() => {\n if (editorRef.current?.view) {\n updateHighlighting(editorRef.current.view, highlightLines);\n }\n }, [highlightLines]);\n\n useEffect(() => {\n if (editorRef.current?.view) {\n updateSearch(editorRef.current.view, searchQuery, searchMatchIndex);\n }\n }, [searchQuery, searchMatchIndex]);\n\n useEffect(() => {\n if (!onDestroyEditor) return;\n\n return () => {\n onDestroyEditor();\n };\n }, [onDestroyEditor]);\n\n const handleOnCreate = useCallback(\n (view: EditorView, state: EditorState) => {\n onCreateEditor?.(view, state);\n\n if (highlightLines) {\n updateHighlighting(view, highlightLines);\n }\n\n if (searchQuery) {\n updateSearch(view, searchQuery, searchMatchIndex);\n }\n },\n [onCreateEditor, highlightLines, searchQuery, searchMatchIndex],\n );\n\n const handleOnUpdate = useCallback(\n (update: ViewUpdate) => {\n if (update.selectionSet) {\n const { main } = update.state.selection;\n const text = update.state.sliceDoc(main.from, main.to);\n\n onSelectionChange?.(text);\n }\n },\n [onSelectionChange],\n );\n\n return (\n <CodeMirror\n ref={editorRef}\n theme={customTheme}\n extensions={extensions}\n value={value}\n onChange={onChange}\n onUpdate={handleOnUpdate}\n onCreateEditor={handleOnCreate}\n autoFocus={autoFocus}\n placeholder={placeholder}\n className={className}\n readOnly={readOnly}\n editable={!readOnly}\n basicSetup={defaultSetup}\n />\n );\n};\n","export const CHUNK_TYPE = {\n UNCHANGED: 'unchanged',\n ADDED: 'added',\n REMOVED: 'removed',\n} as const;\n\ntype ChunkType = (typeof CHUNK_TYPE)[keyof typeof CHUNK_TYPE];\n\nexport type DiffChunk = {\n type: ChunkType;\n value: string;\n /** 1-indexed start line in the old (left) text */\n oldStart: number;\n /** 1-indexed end line in the old (left) text */\n oldEnd: number;\n /** 1-indexed start line in the new (right) text */\n newStart: number;\n /** 1-indexed end line in the new (right) text */\n newEnd: number;\n};\n\n/**\n * A paired conflict: adjacent REMOVED + ADDED chunks from diffLines,\n * representing a section that was modified. If only one side exists,\n * the other is empty (pure insertion or deletion).\n */\nexport type MergeConflict = {\n id: string;\n oldValue: string;\n oldStartLine: number;\n oldEndLine: number;\n newValue: string;\n newStartLine: number;\n newEndLine: number;\n};\n\nexport const CHANGE_CLASS = {\n SAFE: 'safe',\n CONFLICT: 'conflict',\n} as const;\n\nexport type ChangeClassification = (typeof CHANGE_CLASS)[keyof typeof CHANGE_CLASS];\n\n/** Must match the CodeMirror line-height set in MergePane */\nexport const LINE_HEIGHT_PX = 20;\n\n/** Must match the rendered header height in MergePane (py-3 + content + border) */\nexport const PANE_HEADER_HEIGHT_PX = 58;\n","import { ChevronsLeft, ChevronsRight } from '../../../icons';\nimport { Button } from '../../Button';\n\ntype Props = {\n side: 'left' | 'right';\n onAccept: () => void;\n};\n\nexport const AcceptButton = ({ side, onAccept }: Props) => {\n const label = `Accept ${side === 'left' ? 'production' : 'branch'} version`;\n const Chevron = side === 'left' ? ChevronsRight : ChevronsLeft;\n return (\n <Button onClick={onAccept} variant=\"outline\" size=\"icon-sm\" title={label} aria-label={label}>\n <Chevron className=\"tw-size-5\" />\n </Button>\n );\n};\n","import type { RefCallback } from 'react';\n\nimport { X } from '../../../icons';\nimport { cn } from '../../../utils';\nimport { Button } from '../../Button';\nimport { LINE_HEIGHT_PX, type MergeConflict, PANE_HEADER_HEIGHT_PX } from '../constants';\n\nimport { AcceptButton } from './AcceptButton';\n\ntype Props = {\n conflicts: MergeConflict[];\n side: 'left' | 'right';\n onAccept: (conflict: MergeConflict) => void;\n onDismiss?: (conflict: MergeConflict) => void;\n contentRef?: RefCallback<HTMLDivElement>;\n};\n\n// 28px column when there are conflicts to render — wide enough to fit the\n// 24px icon-xs accept chevron + dismiss icon without overflowing into the\n// adjacent panes (which use `tw-overflow-hidden` and would clip absolutely-\n// positioned children that crossed the boundary). Collapses to 0 when idle\n// so empty merges don't reserve a sliver of layout. Inner wrapper allows\n// horizontal overflow so the icon buttons' focus-visible ring stays visible\n// past the column edge. Buttons stay aligned with their source-pane chunk\n// via the parent's `translateY(-scrollTop)` follower applied to `contentRef`.\nexport const AcceptControls = ({ conflicts, side, onAccept, onDismiss, contentRef }: Props) => (\n <div\n className={cn(\n 'tw-z-10 tw-flex tw-shrink-0 tw-flex-col tw-items-center',\n conflicts.length > 0 ? 'tw-w-7' : 'tw-w-0',\n )}\n >\n {conflicts.length > 0 && (\n <>\n <div className=\"tw-shrink-0\" style={{ height: `${PANE_HEADER_HEIGHT_PX}px` }} />\n <div className=\"tw-relative tw-w-full tw-flex-1 tw-overflow-y-clip tw-overflow-x-visible\">\n <div ref={contentRef} className=\"tw-relative tw-size-full\">\n {conflicts.map((conflict) => {\n const topLine = side === 'left' ? conflict.oldStartLine : conflict.newStartLine;\n const topOffset = (topLine - 1) * LINE_HEIGHT_PX - 2;\n\n return (\n <div\n key={conflict.id}\n className=\"tw-absolute tw-inset-x-0 tw-flex tw-flex-col tw-items-center tw-gap-0.5\"\n style={{ top: `${topOffset}px` }}\n >\n <AcceptButton side={side} onAccept={() => onAccept(conflict)} />\n {onDismiss && (\n <Button\n onClick={() => onDismiss(conflict)}\n variant=\"outline\"\n size=\"icon-sm\"\n title=\"Dismiss\"\n aria-label={`Dismiss ${side === 'left' ? 'production' : 'branch'} change`}\n >\n <X className=\"tw-size-4\" />\n </Button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n )}\n </div>\n);\n","import {\n type Extension,\n RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n} from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n EditorView,\n gutterLineClass,\n GutterMarker,\n} from '@codemirror/view';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport type { ChangeClassification } from './constants';\nimport { CHANGE_CLASS } from './constants';\n\ntype HighlightPayload = {\n lines: Set<number>;\n classification: Map<number, ChangeClassification>;\n};\n\nconst setHighlightedLines = StateEffect.define<HighlightPayload>();\n\nconst safeDecoration = Decoration.line({ class: 'cm-merge-safe-line' });\nconst conflictDecoration = Decoration.line({ class: 'cm-merge-conflict-line' });\n\nclass SafeGutterMarker extends GutterMarker {\n override elementClass = 'cm-merge-safe-gutter';\n}\n\nclass ConflictGutterMarker extends GutterMarker {\n override elementClass = 'cm-merge-conflict-gutter';\n}\n\nconst safeGutterMarker = new SafeGutterMarker();\nconst conflictGutterMarker = new ConflictGutterMarker();\n\ntype FieldValue = {\n decorations: DecorationSet;\n gutterMarkers: RangeSet<GutterMarker>;\n};\n\nexport const createDiffHighlightExtension = (): Extension => {\n const field = StateField.define<FieldValue>({\n create: () => ({ decorations: Decoration.none, gutterMarkers: RangeSet.empty }),\n update(value, tr) {\n // Use the last effect if multiple are dispatched in a single transaction\n let payload: HighlightPayload | null = null;\n for (const effect of tr.effects) {\n if (effect.is(setHighlightedLines)) {\n payload = effect.value;\n }\n }\n\n if (!payload) {\n return {\n decorations: value.decorations.map(tr.changes),\n gutterMarkers: value.gutterMarkers.map(tr.changes),\n };\n }\n\n const decoBuilder = new RangeSetBuilder<Decoration>();\n const gutterBuilder = new RangeSetBuilder<GutterMarker>();\n const doc = tr.state.doc;\n const { lines, classification } = payload;\n\n // Iterate the (typically small) highlighted set instead of all doc lines.\n // RangeSetBuilder requires positions in order, so sort first.\n const sorted = [...lines].filter((l) => l >= 1 && l <= doc.lines).sort((a, b) => a - b);\n for (const i of sorted) {\n const cls = classification.get(i);\n if (!cls) continue;\n\n const isSafe = cls === CHANGE_CLASS.SAFE;\n const line = doc.line(i);\n decoBuilder.add(line.from, line.from, isSafe ? safeDecoration : conflictDecoration);\n gutterBuilder.add(line.from, line.from, isSafe ? safeGutterMarker : conflictGutterMarker);\n }\n\n return {\n decorations: decoBuilder.finish(),\n gutterMarkers: gutterBuilder.finish(),\n };\n },\n provide: (f) => [\n EditorView.decorations.from(f, (val) => val.decorations),\n gutterLineClass.from(f, (val: FieldValue) => val.gutterMarkers),\n ],\n });\n\n // !important needed to override CodeMirror's built-in active-line and selection backgrounds.\n // SAFE = change present on one side only (green). CONFLICT = both sides edited this region\n // (amber/warning — NOT red, since red reads as \"deletion\" and the 3-pane editor only ever\n // displays additions in each side pane). The colored left border doubles as a scan-lane so\n // changes are easy to spot when zoomed out.\n const theme = EditorView.theme({\n '.cm-merge-safe-line': {\n backgroundColor: `${colors.primary[100]} !important`,\n boxShadow: `inset 3px 0 0 ${colors.primary[500]}`,\n },\n '.cm-merge-conflict-line': {\n backgroundColor: `${colors.warning[100]} !important`,\n boxShadow: `inset 3px 0 0 ${colors.warning[500]}`,\n },\n '.cm-merge-safe-gutter': {\n backgroundColor: `${colors.primary[200]} !important`,\n },\n '.cm-merge-conflict-gutter': {\n backgroundColor: `${colors.warning[200]} !important`,\n },\n });\n\n return [field, theme];\n};\n\nexport const updateHighlightedLines = (\n view: EditorView,\n lines: Set<number>,\n classification: Map<number, ChangeClassification>,\n) => {\n view.dispatch({ effects: setHighlightedLines.of({ lines, classification }) });\n};\n","import { type ReactNode, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { type Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport CodeMirror, { type ReactCodeMirrorRef } from '@uiw/react-codemirror';\n\nimport colors from '@keboola/tailwind-config/colors';\n\nimport { cn } from '../../utils';\n\nimport { type ChangeClassification, LINE_HEIGHT_PX } from './constants';\nimport { createDiffHighlightExtension, updateHighlightedLines } from './decorations';\n\nconst EMPTY_LINES: Set<number> = new Set();\nconst EMPTY_CLASSIFICATION: Map<number, ChangeClassification> = new Map();\n\ntype Props = {\n value: string;\n highlightedLines: Set<number>;\n lineClassification: Map<number, ChangeClassification>;\n readOnly?: boolean;\n onChange?: (value: string) => void;\n header?: ReactNode;\n headerClassName?: string;\n className?: string;\n onScrollDOMReady?: (el: HTMLElement | null) => void;\n /**\n * When true, the pane renders with the error palette to signal the side has\n * been deleted upstream. The CodeMirror editor is still mounted so the diff\n * remains visible — only the background, gutter, header, and border switch.\n */\n deleted?: boolean;\n};\n\nexport const MergePane = ({\n value,\n highlightedLines,\n lineClassification,\n readOnly = false,\n onChange,\n header,\n headerClassName,\n className,\n onScrollDOMReady,\n deleted = false,\n}: Props) => {\n const editorRef = useRef<ReactCodeMirrorRef>(null);\n\n const extensions = useMemo(\n (): Extension[] => [\n createDiffHighlightExtension(),\n EditorView.theme({\n '&.cm-editor': {\n height: '100%',\n backgroundColor: deleted ? colors.error[100] : colors.neutral[50],\n outline: 'none',\n },\n '.cm-gutters': {\n backgroundColor: deleted ? colors.error[200] : colors.neutral[100],\n },\n '*': { lineHeight: `${LINE_HEIGHT_PX}px` },\n '.cm-lineNumbers .cm-gutterElement': { padding: '0 0 0 25px' },\n }),\n // Recalc viewport after every doc change so late-settling layouts (alerts\n // appearing above the editor) don't leave trailing lines blank.\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n requestAnimationFrame(() => update.view.dispatch({}));\n }\n }),\n ],\n [deleted],\n );\n\n // A deleted side is a file-level conflict, not a line-level one — suppress\n // per-line markers so the pane wears only the red wash. Keeping `deleted` in\n // the dep list also re-applies highlights when the extension array is\n // reconfigured (which re-instantiates the diff-highlight StateField).\n useEffect(() => {\n const view = editorRef.current?.view;\n if (!view) return;\n updateHighlightedLines(\n view,\n deleted ? EMPTY_LINES : highlightedLines,\n deleted ? EMPTY_CLASSIFICATION : lineClassification,\n );\n }, [highlightedLines, lineClassification, deleted]);\n\n const handleCreateEditor = useCallback(\n (view: EditorView) => {\n updateHighlightedLines(\n view,\n deleted ? EMPTY_LINES : highlightedLines,\n deleted ? EMPTY_CLASSIFICATION : lineClassification,\n );\n onScrollDOMReady?.(view.scrollDOM);\n },\n [highlightedLines, lineClassification, onScrollDOMReady, deleted],\n );\n\n useEffect(() => {\n return () => onScrollDOMReady?.(null);\n }, [onScrollDOMReady]);\n\n // Re-measure on wrapper resize — parent dimensions settle after CM mounts\n // (fullscreen modal, alerts appearing above the editor).\n useEffect(() => {\n const view = editorRef.current?.view;\n const wrapper = view?.dom.parentElement;\n if (!view || !wrapper) return;\n\n const observer = new ResizeObserver(() => view.dispatch({}));\n observer.observe(wrapper);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n className={cn(\n 'tw-flex tw-min-w-0 tw-flex-1 tw-flex-col tw-overflow-hidden',\n className,\n deleted && 'tw-border-error-300',\n )}\n >\n {header && (\n <div\n className={cn(\n 'tw-px-4 tw-py-3',\n deleted ? 'tw-border-b tw-border-error-200 tw-bg-error-100' : 'tw-bg-background',\n headerClassName,\n )}\n >\n {header}\n </div>\n )}\n <div className=\"tw-flex tw-h-0 tw-flex-1 tw-flex-col [&_>div]:tw-h-full\">\n <CodeMirror\n ref={editorRef}\n height=\"100%\"\n value={value}\n onChange={onChange}\n extensions={extensions}\n readOnly={readOnly}\n onCreateEditor={handleCreateEditor}\n basicSetup={{ lineNumbers: true, drawSelection: false }}\n />\n </div>\n </div>\n );\n};\n","import { useCallback, useRef } from 'react';\n\nexport const useScrollSync = () => {\n const scrollersRef = useRef<(HTMLElement | null)[]>([]);\n const followersRef = useRef<Map<string, { paneIndex: number; el: HTMLElement }>>(new Map());\n const isSyncingRef = useRef(false);\n const scrollerCallbacksRef = useRef<Map<number, (el: HTMLElement | null) => void>>(new Map());\n const followerCallbacksRef = useRef<Map<string, (el: HTMLElement | null) => void>>(new Map());\n\n const updateFollowers = useCallback(() => {\n for (const [, { paneIndex, el }] of followersRef.current) {\n const scroller = scrollersRef.current[paneIndex];\n if (!scroller) continue;\n el.style.transform = `translateY(-${scroller.scrollTop}px)`;\n }\n }, []);\n\n const handleScroll = useCallback(\n (e: Event) => {\n if (isSyncingRef.current) return;\n isSyncingRef.current = true;\n\n // Px-aligned sync. All panes share LINE_HEIGHT_PX, so matching scrollTop is the same\n // as matching the line at the top of the viewport. Previous ratio-based sync drifted\n // badly when pane heights differed (e.g. 50 lines vs 500 — half-scrolling left snapped\n // right to its midpoint, not to the equivalent line). Clamp to each target's max so\n // the source can scroll past where shorter panes bottom out without errors.\n const sourceScrollTop = (e.target as HTMLElement).scrollTop;\n\n for (const scroller of scrollersRef.current) {\n if (!scroller || scroller === e.target) continue;\n const targetMax = Math.max(0, scroller.scrollHeight - scroller.clientHeight);\n scroller.scrollTop = Math.min(sourceScrollTop, targetMax);\n }\n\n updateFollowers();\n isSyncingRef.current = false;\n },\n [updateFollowers],\n );\n\n const registerScroller = useCallback(\n (index: number) => {\n const existing = scrollerCallbacksRef.current.get(index);\n if (existing) return existing;\n\n const callback = (el: HTMLElement | null) => {\n const prev = scrollersRef.current[index];\n if (prev === el) return;\n\n prev?.removeEventListener('scroll', handleScroll);\n scrollersRef.current[index] = el;\n el?.addEventListener('scroll', handleScroll, { passive: true });\n };\n\n scrollerCallbacksRef.current.set(index, callback);\n return callback;\n },\n [handleScroll],\n );\n\n const registerFollower = useCallback((paneIndex: number, key: string) => {\n const existing = followerCallbacksRef.current.get(key);\n if (existing) return existing;\n\n const callback = (el: HTMLElement | null) => {\n if (el) {\n followersRef.current.set(key, { paneIndex, el });\n } else {\n followersRef.current.delete(key);\n }\n };\n\n followerCallbacksRef.current.set(key, callback);\n return callback;\n }, []);\n\n return { registerScroller, registerFollower };\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { AcceptControls } from './AcceptControls/AcceptControls';\nimport type { ChangeClassification, MergeConflict } from './constants';\nimport { MergePane } from './MergePane';\nimport { useScrollSync } from './useScrollSync';\n\nconst EMPTY_LINES: Set<number> = new Set();\nconst EMPTY_CLASSIFICATION: Map<number, ChangeClassification> = new Map();\n\ntype Props = {\n mergeValue: string;\n handleMergeChange: (value: string) => void;\n leftText: string;\n rightText: string;\n leftConflicts: MergeConflict[];\n rightConflicts: MergeConflict[];\n leftHighlightedLines: Set<number>;\n rightHighlightedLines: Set<number>;\n leftClassification: Map<number, ChangeClassification>;\n rightClassification: Map<number, ChangeClassification>;\n mergeHighlightedLines: Set<number>;\n mergeClassification: Map<number, ChangeClassification>;\n acceptLeft: (conflict: MergeConflict) => void;\n acceptRight: (conflict: MergeConflict) => void;\n dismissLeft: (conflict: MergeConflict) => void;\n dismissRight: (conflict: MergeConflict) => void;\n leftHeader?: ReactNode;\n middleHeader?: ReactNode;\n middleHeaderClassName?: string;\n middleClassName?: string;\n rightHeader?: ReactNode;\n className?: string;\n /**\n * Paint the corresponding read-only pane with the error palette to signal the\n * side has been deleted upstream. The diff is still rendered so the user can\n * see what was lost; accept/dismiss controls for that side are suppressed.\n */\n leftDeleted?: boolean;\n rightDeleted?: boolean;\n};\n\nexport const MergeEditor = ({\n mergeValue,\n handleMergeChange,\n leftText,\n rightText,\n leftConflicts,\n rightConflicts,\n leftHighlightedLines,\n rightHighlightedLines,\n leftClassification,\n rightClassification,\n mergeHighlightedLines,\n mergeClassification,\n acceptLeft,\n acceptRight,\n dismissLeft,\n dismissRight,\n leftHeader,\n middleHeader,\n middleHeaderClassName,\n middleClassName,\n rightHeader,\n className,\n leftDeleted = false,\n rightDeleted = false,\n}: Props) => {\n const { registerScroller, registerFollower } = useScrollSync();\n\n // When either side is deleted the merge is a binary \"keep or drop the file\"\n // choice, not a line-level merge — suppress per-line markers in the middle\n // pane so the indicator/markers don't contradict the red deleted pane.\n const anySideDeleted = leftDeleted || rightDeleted;\n\n return (\n <div\n className={cn(\n 'tw-flex tw-h-full tw-min-h-0 tw-overflow-hidden tw-bg-background tw-gap-3',\n className,\n )}\n >\n <MergePane\n value={leftText}\n highlightedLines={leftHighlightedLines}\n lineClassification={leftClassification}\n readOnly\n header={leftHeader}\n className=\"tw-rounded-r-lg tw-border tw-border-border\"\n onScrollDOMReady={registerScroller(0)}\n deleted={leftDeleted}\n />\n\n <AcceptControls\n conflicts={leftDeleted ? [] : leftConflicts}\n side=\"left\"\n onAccept={acceptLeft}\n onDismiss={dismissLeft}\n contentRef={registerFollower(0, 'left-controls')}\n />\n\n <MergePane\n value={mergeValue}\n highlightedLines={anySideDeleted ? EMPTY_LINES : mergeHighlightedLines}\n lineClassification={anySideDeleted ? EMPTY_CLASSIFICATION : mergeClassification}\n onChange={handleMergeChange}\n header={middleHeader}\n headerClassName={middleHeaderClassName}\n className={cn('tw-border tw-border-border tw-rounded-lg', middleClassName)}\n onScrollDOMReady={registerScroller(1)}\n />\n\n <AcceptControls\n conflicts={rightDeleted ? [] : rightConflicts}\n side=\"right\"\n onAccept={acceptRight}\n onDismiss={dismissRight}\n contentRef={registerFollower(2, 'right-controls')}\n />\n\n <MergePane\n value={rightText}\n highlightedLines={rightHighlightedLines}\n lineClassification={rightClassification}\n readOnly\n header={rightHeader}\n className=\"tw-rounded-l-lg tw-border tw-border-border\"\n onScrollDOMReady={registerScroller(2)}\n deleted={rightDeleted}\n />\n </div>\n );\n};\n"]}