@keboola/design 6.5.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +7 -7
- package/COMPONENT-API.md +3 -9
- package/README.md +1 -1
- package/dist/charts.cjs +22 -22
- package/dist/charts.cjs.map +1 -1
- package/dist/charts.d.cts +5 -5
- package/dist/charts.d.ts +5 -5
- package/dist/charts.js +22 -22
- package/dist/charts.js.map +1 -1
- package/dist/editors.cjs +590 -432
- package/dist/editors.cjs.map +1 -1
- package/dist/editors.d.cts +8 -4
- package/dist/editors.d.ts +8 -4
- package/dist/editors.js +591 -416
- package/dist/editors.js.map +1 -1
- package/dist/icons.cjs +23817 -45
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.d.cts +12 -3
- package/dist/icons.d.ts +12 -3
- package/dist/icons.js +297 -40
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +4702 -4755
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +183 -169
- package/dist/index.d.ts +183 -169
- package/dist/index.js +4700 -4754
- package/dist/index.js.map +1 -1
- package/dist/markdown-editor.cjs +817 -923
- package/dist/markdown-editor.cjs.map +1 -1
- package/dist/markdown-editor.js +818 -923
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.cjs +308 -425
- package/dist/mermaid.cjs.map +1 -1
- package/dist/mermaid.d.cts +5 -1
- package/dist/mermaid.d.ts +5 -1
- package/dist/mermaid.js +310 -408
- package/dist/mermaid.js.map +1 -1
- package/dist/rjsf.cjs +1398 -1225
- package/dist/rjsf.cjs.map +1 -1
- package/dist/rjsf.js +1399 -1225
- package/dist/rjsf.js.map +1 -1
- package/dist/styles.css +2 -5
- package/dist/testing.cjs +86 -82
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.js +86 -82
- package/dist/testing.js.map +1 -1
- package/package.json +26 -19
- package/src/styles.css +125 -105
- package/src/theme.css +264 -0
package/dist/testing.cjs
CHANGED
|
@@ -57,39 +57,39 @@ var ArgoDesignContext = react.createContext(true);
|
|
|
57
57
|
classVarianceAuthority.cva(
|
|
58
58
|
[
|
|
59
59
|
"tailwindcss-preflight",
|
|
60
|
-
"tw
|
|
61
|
-
"tw
|
|
62
|
-
"tw
|
|
63
|
-
"tw
|
|
64
|
-
"tw
|
|
60
|
+
"tw:inline-block",
|
|
61
|
+
"tw:break-anywhere",
|
|
62
|
+
"tw:max-h-96",
|
|
63
|
+
"tw:overflow-y-auto",
|
|
64
|
+
"tw:z-[1060]",
|
|
65
65
|
// legacy (dark) chrome — default
|
|
66
|
-
"tw
|
|
67
|
-
"tw
|
|
68
|
-
"tw
|
|
66
|
+
"tw:rounded",
|
|
67
|
+
"tw:bg-neutral-800",
|
|
68
|
+
"tw:text-white",
|
|
69
69
|
// argo chrome overrides — semantic floating-panel tokens
|
|
70
|
-
"data-[argo=true]:
|
|
71
|
-
"data-[argo=true]:
|
|
72
|
-
"data-[argo=true]:
|
|
73
|
-
"data-[argo=true]:
|
|
74
|
-
"data-[argo=true]:
|
|
75
|
-
"data-[argo=true]:
|
|
76
|
-
"data-[argo=true]:
|
|
70
|
+
"tw:data-[argo=true]:rounded-2xl",
|
|
71
|
+
"tw:data-[argo=true]:border",
|
|
72
|
+
"tw:data-[argo=true]:border-solid",
|
|
73
|
+
"tw:data-[argo=true]:border-border",
|
|
74
|
+
"tw:data-[argo=true]:bg-popover",
|
|
75
|
+
"tw:data-[argo=true]:text-popover-foreground",
|
|
76
|
+
"tw:data-[argo=true]:shadow-md",
|
|
77
77
|
// argo open animation
|
|
78
|
-
"data-[argo=true]:data-[state=delayed-open]:
|
|
79
|
-
"data-[argo=true]:data-[state=instant-open]:
|
|
80
|
-
"data-[argo=true]:data-[state=delayed-open]:
|
|
81
|
-
"data-[argo=true]:data-[state=instant-open]:
|
|
82
|
-
"data-[argo=true]:data-[state=delayed-open]:
|
|
83
|
-
"data-[argo=true]:data-[state=instant-open]:
|
|
78
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:animate-in",
|
|
79
|
+
"tw:data-[argo=true]:data-[state=instant-open]:animate-in",
|
|
80
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:fade-in-0",
|
|
81
|
+
"tw:data-[argo=true]:data-[state=instant-open]:fade-in-0",
|
|
82
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:zoom-in-95",
|
|
83
|
+
"tw:data-[argo=true]:data-[state=instant-open]:zoom-in-95",
|
|
84
84
|
// argo closed animation
|
|
85
|
-
"data-[argo=true]:data-[state=closed]:
|
|
86
|
-
"data-[argo=true]:data-[state=closed]:
|
|
87
|
-
"data-[argo=true]:data-[state=closed]:
|
|
85
|
+
"tw:data-[argo=true]:data-[state=closed]:animate-out",
|
|
86
|
+
"tw:data-[argo=true]:data-[state=closed]:fade-out-0",
|
|
87
|
+
"tw:data-[argo=true]:data-[state=closed]:zoom-out-95",
|
|
88
88
|
// argo position animation
|
|
89
|
-
"data-[argo=true]:data-[side=bottom]:
|
|
90
|
-
"data-[argo=true]:data-[side=left]:
|
|
91
|
-
"data-[argo=true]:data-[side=right]:
|
|
92
|
-
"data-[argo=true]:data-[side=top]:
|
|
89
|
+
"tw:data-[argo=true]:data-[side=bottom]:slide-in-from-top-2",
|
|
90
|
+
"tw:data-[argo=true]:data-[side=left]:slide-in-from-right-2",
|
|
91
|
+
"tw:data-[argo=true]:data-[side=right]:slide-in-from-left-2",
|
|
92
|
+
"tw:data-[argo=true]:data-[side=top]:slide-in-from-bottom-2"
|
|
93
93
|
],
|
|
94
94
|
{
|
|
95
95
|
defaultVariants: {
|
|
@@ -98,29 +98,33 @@ classVarianceAuthority.cva(
|
|
|
98
98
|
variants: {
|
|
99
99
|
variant: {
|
|
100
100
|
action: [
|
|
101
|
-
"tw
|
|
102
|
-
"tw
|
|
103
|
-
"tw
|
|
104
|
-
"tw
|
|
105
|
-
"tw
|
|
106
|
-
"tw
|
|
107
|
-
|
|
108
|
-
|
|
101
|
+
"tw:max-w-fit",
|
|
102
|
+
"tw:px-3",
|
|
103
|
+
"tw:py-2",
|
|
104
|
+
"tw:text-center",
|
|
105
|
+
"tw:text-xs",
|
|
106
|
+
"tw:font-medium",
|
|
107
|
+
// Legacy chrome uppercases the action tooltip; the Keboola V2 brand
|
|
108
|
+
// (`data-brand="keboola"`) renders it in standard case instead.
|
|
109
|
+
"tw:uppercase",
|
|
110
|
+
"tw:tracking-wider",
|
|
111
|
+
"tw:[[data-brand=keboola]_&]:normal-case",
|
|
112
|
+
"tw:[[data-brand=keboola]_&]:tracking-normal"
|
|
109
113
|
],
|
|
110
114
|
explanatory: [
|
|
111
|
-
"tw
|
|
112
|
-
"tw
|
|
113
|
-
"tw
|
|
114
|
-
"tw
|
|
115
|
-
"tw
|
|
116
|
-
"tw
|
|
115
|
+
"tw:max-w-80",
|
|
116
|
+
"tw:px-4",
|
|
117
|
+
"tw:py-3",
|
|
118
|
+
"tw:text-left",
|
|
119
|
+
"tw:text-sm",
|
|
120
|
+
"tw:font-normal"
|
|
117
121
|
]
|
|
118
122
|
}
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
125
|
);
|
|
122
126
|
tailwindMerge.extendTailwindMerge({
|
|
123
|
-
prefix: "tw
|
|
127
|
+
prefix: "tw"
|
|
124
128
|
});
|
|
125
129
|
var TooltipProvider = reactTooltip.Provider;
|
|
126
130
|
var AIGradientsSvg = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "0", height: "0", style: { position: "absolute", visibility: "hidden" }, children: /* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
|
|
@@ -213,45 +217,45 @@ var tokensToCssVars = ({
|
|
|
213
217
|
gradient
|
|
214
218
|
}) => {
|
|
215
219
|
const vars = createCssVars();
|
|
216
|
-
vars.set("--
|
|
217
|
-
vars.set("--
|
|
218
|
-
vars.set("--
|
|
219
|
-
vars.set("--
|
|
220
|
-
vars.set("--
|
|
221
|
-
vars.set("--
|
|
222
|
-
vars.set("--
|
|
223
|
-
vars.set("--
|
|
224
|
-
vars.set("--
|
|
225
|
-
vars.set("--
|
|
226
|
-
vars.set("--
|
|
227
|
-
vars.set("--
|
|
228
|
-
vars.set("--
|
|
229
|
-
vars.set("--
|
|
230
|
-
vars.set("--
|
|
231
|
-
vars.set("--
|
|
232
|
-
vars.set("--
|
|
233
|
-
vars.set("--
|
|
234
|
-
vars.set("--
|
|
235
|
-
vars.set("--
|
|
236
|
-
vars.set("--
|
|
237
|
-
vars.set("--
|
|
238
|
-
vars.set("--
|
|
239
|
-
vars.set("--
|
|
240
|
-
vars.set("--
|
|
241
|
-
vars.set("--
|
|
242
|
-
vars.set("--
|
|
243
|
-
vars.set("--
|
|
244
|
-
vars.set("--
|
|
245
|
-
vars.set("--
|
|
246
|
-
vars.set("--
|
|
247
|
-
vars.set("--
|
|
248
|
-
vars.set("--
|
|
249
|
-
vars.set("--
|
|
250
|
-
vars.set("--
|
|
251
|
-
vars.set("--
|
|
252
|
-
vars.set("--
|
|
253
|
-
vars.set("--
|
|
254
|
-
vars.set("--
|
|
220
|
+
vars.set("--background", colors?.background);
|
|
221
|
+
vars.set("--foreground", colors?.foreground);
|
|
222
|
+
vars.set("--muted", colors?.muted);
|
|
223
|
+
vars.set("--muted-foreground", colors?.mutedForeground);
|
|
224
|
+
vars.set("--border", colors?.border);
|
|
225
|
+
vars.set("--input", colors?.input);
|
|
226
|
+
vars.set("--ring", colors?.ring);
|
|
227
|
+
vars.set("--ring-offset", colors?.ringOffset);
|
|
228
|
+
vars.set("--primary", colors?.primary);
|
|
229
|
+
vars.set("--primary-foreground", colors?.primaryForeground);
|
|
230
|
+
vars.set("--secondary", colors?.secondary);
|
|
231
|
+
vars.set("--secondary-foreground", colors?.secondaryForeground);
|
|
232
|
+
vars.set("--accent", colors?.accent);
|
|
233
|
+
vars.set("--accent-foreground", colors?.accentForeground);
|
|
234
|
+
vars.set("--card", colors?.card);
|
|
235
|
+
vars.set("--card-foreground", colors?.cardForeground);
|
|
236
|
+
vars.set("--popover", colors?.popover);
|
|
237
|
+
vars.set("--popover-foreground", colors?.popoverForeground);
|
|
238
|
+
vars.set("--destructive", colors?.destructive);
|
|
239
|
+
vars.set("--destructive-foreground", colors?.destructiveForeground);
|
|
240
|
+
vars.set("--success", colors?.success);
|
|
241
|
+
vars.set("--success-foreground", colors?.successForeground);
|
|
242
|
+
vars.set("--warning", colors?.warning);
|
|
243
|
+
vars.set("--warning-foreground", colors?.warningForeground);
|
|
244
|
+
vars.set("--info", colors?.info);
|
|
245
|
+
vars.set("--info-foreground", colors?.infoForeground);
|
|
246
|
+
vars.set("--chart-1", colors?.chart?.chart1);
|
|
247
|
+
vars.set("--chart-2", colors?.chart?.chart2);
|
|
248
|
+
vars.set("--chart-3", colors?.chart?.chart3);
|
|
249
|
+
vars.set("--chart-4", colors?.chart?.chart4);
|
|
250
|
+
vars.set("--chart-5", colors?.chart?.chart5);
|
|
251
|
+
vars.set("--sidebar", colors?.sidebar?.sidebar);
|
|
252
|
+
vars.set("--sidebar-foreground", colors?.sidebar?.sidebarForeground);
|
|
253
|
+
vars.set("--sidebar-primary", colors?.sidebar?.sidebarPrimary);
|
|
254
|
+
vars.set("--sidebar-primary-foreground", colors?.sidebar?.sidebarPrimaryForeground);
|
|
255
|
+
vars.set("--sidebar-accent", colors?.sidebar?.sidebarAccent);
|
|
256
|
+
vars.set("--sidebar-accent-foreground", colors?.sidebar?.sidebarAccentForeground);
|
|
257
|
+
vars.set("--sidebar-border", colors?.sidebar?.sidebarBorder);
|
|
258
|
+
vars.set("--sidebar-ring", colors?.sidebar?.sidebarRing);
|
|
255
259
|
vars.set("--font-sans", typography?.fontFamily?.trim() || void 0);
|
|
256
260
|
vars.set("--font-display", typography?.fontDisplay?.trim() || void 0);
|
|
257
261
|
vars.set("--font-mono", typography?.fontMono?.trim() || void 0);
|
package/dist/testing.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ThemeProvider/utils.ts","../src/components/ThemeProvider/defaults.ts","../src/components/ThemeProvider/context.tsx","../src/components/Tooltip/TooltipContent.tsx","../src/utils/classNames.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/ThemeProvider/AIGradientSvg.tsx","../src/components/ThemeProvider/useBrandState.ts","../src/components/ThemeProvider/useColorSchemeState.ts","../src/components/ThemeProvider/useThemeTokens.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/testing/renderWithTheme.tsx"],"names":["keboolaLegacySidebar","keboolaLegacyTopnav","createContext","cva","extendTailwindMerge","Provider","jsx","jsxs","defaultBrand","useState","useCallback","useEffect","useInsertionEffect","useMemo","keboola","render"],"mappings":"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","file":"testing.cjs","sourcesContent":["import type { Brand } from '@keboola/brand-registry';\n\nimport type { Theme } from './types';\n\nexport const createTheme = (brand: Brand): Theme => ({\n id: brand.id,\n name: brand.name,\n shell: brand.shell,\n logo: brand.logo,\n});\n\nexport type CssVars = {\n set: (name: string, value: string | undefined) => void;\n expose: () => Record<string, string>;\n};\n\nexport const createCssVars = (): CssVars => {\n const vars: Record<string, string> = {};\n return {\n set: (name, value) => {\n if (value !== undefined) vars[name] = value;\n },\n expose: () => ({ ...vars }),\n };\n};\n","import type { Brand } from '@keboola/brand-registry';\nimport { keboolaLegacySidebar, keboolaLegacyTopnav } from '@keboola/brand-registry';\n\nimport type { ResolvedColorScheme } from './types';\nimport { createTheme } from './utils';\n\nexport const keboolaLegacyIds = [keboolaLegacySidebar.id, keboolaLegacyTopnav.id];\nexport const DEFAULT_COLOR_SCHEME: ResolvedColorScheme = 'light';\n\n// Sentinel active-brand id that maps to no registry brand. It resolves to\n// `defaultBrand` below, whose empty theme injects nothing — so the design-system\n// stylesheet defaults (`:root` / `[data-theme='dark']`) provide every token.\nexport const DEFAULT_BRAND_ID = 'design-system';\n\n// The \"no brand\" fallback: an empty theme → no CSS vars injected → the\n// stylesheet defaults win. Its shell/name still drive AppShell + switcher label.\nexport const defaultBrand: Brand = {\n id: DEFAULT_BRAND_ID,\n name: 'Design System',\n shell: 'sidebar',\n theme: {},\n};\nexport const defaultTheme = createTheme(defaultBrand);\n\nexport const DEFAULT_BRANDS: Brand[] = [];\n","import { createContext, use } from 'react';\n\nimport { DEFAULT_COLOR_SCHEME, defaultTheme } from './defaults';\nimport type { Theme } from './types';\nimport type { useBrandState } from './useBrandState';\nimport type { useColorSchemeState } from './useColorSchemeState';\n\nexport type ThemeContextValue = ReturnType<typeof useColorSchemeState> &\n ReturnType<typeof useBrandState> & {\n themes: Theme[];\n currentTheme: Theme;\n };\n\nconst noop = () => void 0;\n\nconst defaultContext: ThemeContextValue = {\n scheme: DEFAULT_COLOR_SCHEME,\n resolvedScheme: DEFAULT_COLOR_SCHEME,\n setScheme: noop,\n brandId: defaultTheme.id,\n setBrand: noop,\n\n themes: [defaultTheme],\n currentTheme: defaultTheme,\n};\n\nexport const ThemeContext = createContext(defaultContext);\n\nexport const useTheme = () => use(ThemeContext);\n\n/**\n * TEMPORARY — kbc-ui-internal only.\n *\n * Flags whether the subtree renders the argo design language. Defaults to argo\n * (`true`) — the modern default; legacy chrome is the exception. It exists\n * solely to bridge kbc-ui while its chrome is migrated off the legacy design\n * language: kbc-ui provides `false` for legacy brands/surfaces (see its\n * `AppThemeProvider`) and reads it via `useArgoDesign`. `ThemeProvider` does\n * not set it — argo is decoupled from the brand. Once every kbc-ui surface has\n * been migrated, this context and its hook can be deleted.\n */\nexport const ArgoDesignContext = createContext<boolean>(true);\n\nexport const useArgoDesign = () => use(ArgoDesignContext);\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 { useArgoDesign } from '../ThemeProvider/context';\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 renderArgo = useArgoDesign();\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 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","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 /** Hover delay before the tooltip opens, in ms. Defaults to the shared 300ms. */\n delayDuration?: number;\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 delayDuration,\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 delayDuration={delayDuration}\n disableHoverableContent={isActionVariant}\n >\n <TooltipTrigger\n asChild={triggerAsChild}\n keepOpenOnClick={keepOpenOnTriggerClick}\n onKeyUp={handleKeyUp}\n >\n {children}\n </TooltipTrigger>\n\n <TooltipContent\n className={className}\n variant={resolvedVariant}\n placement={placement}\n keepOpenOnPointerDownOutside={keepOpenOnTriggerClick}\n >\n {tooltip}\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nTooltip.Root = TooltipRoot;\nTooltip.Content = TooltipContent;\nTooltip.Trigger = TooltipTrigger;\n","export const AIGradientsSvg = () => (\n <svg width=\"0\" height=\"0\" style={{ position: 'absolute', visibility: 'hidden' }}>\n <defs>\n {/*aigradient-600*/}\n <linearGradient id=\"aigradient-600\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#61E4FF\" />\n <stop offset=\"50%\" stopColor=\"#1F8FFF\" />\n <stop offset=\"100%\" stopColor=\"#7C5CFF\" />\n </linearGradient>\n\n {/*aigradient-700*/}\n <linearGradient id=\"aigradient-700\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#075fb8\" />\n <stop offset=\"100%\" stopColor=\"#5b2cb8\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { DEFAULT_BRAND_ID } from './defaults';\nimport type { BrandId } from './types';\n\nexport const BRAND_ATTRIBUTE = 'data-brand';\n\nexport type UseBrandOptions = {\n /** Initial active brand id for uncontrolled use. Defaults to the design-system sentinel (`DEFAULT_BRAND_ID`) — no brand tokens injected, so the stylesheet defaults apply. */\n defaultBrandId?: BrandId;\n /** Controlled active brand id. When set, the parent owns the value and `setBrand` only notifies via `onBrandIdChange` (it does not mutate internal state). */\n brandId?: BrandId;\n /** Called with the next id whenever `setBrand` runs — required to persist the choice in controlled mode. */\n onBrandIdChange?: (brandId: BrandId) => void;\n};\n\nexport const useBrandState = ({\n defaultBrandId: defaultBrand = DEFAULT_BRAND_ID,\n brandId: controlledBrand,\n onBrandIdChange: onBrandChange,\n}: UseBrandOptions = {}) => {\n const [uncontrolledBrand, setUncontrolledBrand] = useState(defaultBrand);\n\n const isControlled = controlledBrand !== undefined;\n const brandId = isControlled ? controlledBrand : uncontrolledBrand;\n\n const setBrand = useCallback(\n (next: BrandId) => {\n if (!isControlled) setUncontrolledBrand(next);\n onBrandChange?.(next);\n },\n [isControlled, onBrandChange],\n );\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(BRAND_ATTRIBUTE, brandId);\n }, [brandId]);\n\n return { brandId, setBrand };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { DEFAULT_COLOR_SCHEME } from './defaults';\nimport type { ColorScheme, ResolvedColorScheme } from './types';\n\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\nexport const THEME_ATTRIBUTE = 'data-theme';\n\nconst getSystemColorScheme = (): ResolvedColorScheme => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return 'light';\n return window.matchMedia(DARK_QUERY).matches ? 'dark' : 'light';\n};\n\nexport type UseColorSchemeOptions = {\n /** Initial colour scheme for uncontrolled use. Defaults to `light` (`DEFAULT_COLOR_SCHEME`). */\n defaultScheme?: ColorScheme;\n /** Controlled colour scheme (`light` / `dark` / `system`). When set, the parent owns the value and `setScheme` only notifies via `onSchemeChange`. `system` follows `prefers-color-scheme` and resolves reactively. */\n scheme?: ColorScheme;\n /** Called with the next scheme whenever `setScheme` runs — required to persist the choice in controlled mode. */\n onSchemeChange?: (theme: ColorScheme) => void;\n};\n\nexport const useColorSchemeState = ({\n defaultScheme = DEFAULT_COLOR_SCHEME,\n scheme: propScheme,\n onSchemeChange,\n}: UseColorSchemeOptions = {}) => {\n const [uncontrolledScheme, setUncontrolledScheme] = useState(defaultScheme);\n const [systemScheme, setSystemScheme] = useState<ResolvedColorScheme>(getSystemColorScheme);\n\n const isControlled = propScheme !== undefined;\n const scheme = isControlled ? propScheme : uncontrolledScheme;\n\n const setScheme = useCallback(\n (next: ColorScheme) => {\n if (!isControlled) setUncontrolledScheme(next);\n onSchemeChange?.(next);\n },\n [isControlled, onSchemeChange],\n );\n\n // Track the OS preference so `system` stays live as the user flips it.\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const mq = window.matchMedia(DARK_QUERY);\n const onChange = () => setSystemScheme(mq.matches ? 'dark' : 'light');\n onChange();\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, []);\n\n const resolvedScheme: ResolvedColorScheme = scheme === 'system' ? systemScheme : scheme;\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(THEME_ATTRIBUTE, resolvedScheme);\n }, [resolvedScheme]);\n\n return { scheme, resolvedScheme, setScheme };\n};\n","import { useInsertionEffect } from 'react';\n\nimport type {\n BrandTheme,\n Colors,\n Gradient,\n Motion,\n Radii,\n Shadows,\n Spacing,\n Typography,\n} from '@keboola/brand-registry';\n\nimport type { ResolvedColorScheme } from './types';\nimport { createCssVars } from './utils';\n\nexport type ThemeTokens = {\n colors?: Colors;\n typography?: Typography;\n radii?: Radii;\n shadows?: Shadows;\n spacing?: Spacing;\n motion?: Motion;\n gradient?: Gradient;\n};\n\nexport const brandThemeToTokens = (\n theme: BrandTheme,\n scheme: ResolvedColorScheme,\n): ThemeTokens => ({\n colors: scheme === 'dark' ? theme.colorsDark : theme.colors,\n typography: theme.typography,\n radii: theme.radii,\n // Scheme-independent — the same values apply in light and dark.\n shadows: theme.shadows,\n spacing: theme.spacing,\n motion: theme.motion,\n gradient: theme.gradient,\n});\n\nexport const tokensToCssVars = ({\n colors,\n typography,\n radii,\n shadows,\n spacing,\n motion,\n gradient,\n}: ThemeTokens): Record<string, string> => {\n const vars = createCssVars();\n\n vars.set('--color-background', colors?.background);\n vars.set('--color-foreground', colors?.foreground);\n vars.set('--color-muted', colors?.muted);\n vars.set('--color-muted-foreground', colors?.mutedForeground);\n vars.set('--color-border', colors?.border);\n vars.set('--color-input', colors?.input);\n vars.set('--color-ring', colors?.ring);\n vars.set('--color-ring-offset', colors?.ringOffset);\n vars.set('--color-primary', colors?.primary);\n vars.set('--color-primary-foreground', colors?.primaryForeground);\n vars.set('--color-secondary', colors?.secondary);\n vars.set('--color-secondary-foreground', colors?.secondaryForeground);\n vars.set('--color-accent', colors?.accent);\n vars.set('--color-accent-foreground', colors?.accentForeground);\n vars.set('--color-card', colors?.card);\n vars.set('--color-card-foreground', colors?.cardForeground);\n vars.set('--color-popover', colors?.popover);\n vars.set('--color-popover-foreground', colors?.popoverForeground);\n vars.set('--color-destructive', colors?.destructive);\n vars.set('--color-destructive-foreground', colors?.destructiveForeground);\n vars.set('--color-success', colors?.success);\n vars.set('--color-success-foreground', colors?.successForeground);\n vars.set('--color-warning', colors?.warning);\n vars.set('--color-warning-foreground', colors?.warningForeground);\n vars.set('--color-info', colors?.info);\n vars.set('--color-info-foreground', colors?.infoForeground);\n\n vars.set('--color-chart-1', colors?.chart?.chart1);\n vars.set('--color-chart-2', colors?.chart?.chart2);\n vars.set('--color-chart-3', colors?.chart?.chart3);\n vars.set('--color-chart-4', colors?.chart?.chart4);\n vars.set('--color-chart-5', colors?.chart?.chart5);\n\n vars.set('--color-sidebar', colors?.sidebar?.sidebar);\n vars.set('--color-sidebar-foreground', colors?.sidebar?.sidebarForeground);\n vars.set('--color-sidebar-primary', colors?.sidebar?.sidebarPrimary);\n vars.set('--color-sidebar-primary-foreground', colors?.sidebar?.sidebarPrimaryForeground);\n vars.set('--color-sidebar-accent', colors?.sidebar?.sidebarAccent);\n vars.set('--color-sidebar-accent-foreground', colors?.sidebar?.sidebarAccentForeground);\n vars.set('--color-sidebar-border', colors?.sidebar?.sidebarBorder);\n vars.set('--color-sidebar-ring', colors?.sidebar?.sidebarRing);\n\n /**\n * TYPOGRAPHY\n */\n vars.set('--font-sans', typography?.fontFamily?.trim() || undefined);\n vars.set('--font-display', typography?.fontDisplay?.trim() || undefined);\n vars.set('--font-mono', typography?.fontMono?.trim() || undefined);\n\n // Chrome font-weight slots — read by Tailwind's `fontWeight` scale.\n vars.set('--font-weight-normal', typography?.weight?.normal);\n vars.set('--font-weight-medium', typography?.weight?.medium);\n vars.set('--font-weight-semibold', typography?.weight?.semibold);\n vars.set('--font-weight-bold', typography?.weight?.bold);\n\n // Chrome tracking — behind Button/Badge `tracking-chrome`.\n vars.set('--letter-spacing-chrome', typography?.letterSpacing?.chrome);\n\n // Type scale — display/heading/body steps read by `text-display/heading/body`.\n vars.set('--type-display-size', typography?.typeScale?.display?.size);\n vars.set('--type-display-weight', typography?.typeScale?.display?.weight);\n vars.set('--type-display-leading', typography?.typeScale?.display?.leading);\n vars.set('--type-display-tracking', typography?.typeScale?.display?.tracking);\n vars.set('--type-heading-size', typography?.typeScale?.heading?.size);\n vars.set('--type-heading-weight', typography?.typeScale?.heading?.weight);\n vars.set('--type-heading-leading', typography?.typeScale?.heading?.leading);\n vars.set('--type-heading-tracking', typography?.typeScale?.heading?.tracking);\n vars.set('--type-body-size', typography?.typeScale?.body?.size);\n vars.set('--type-body-weight', typography?.typeScale?.body?.weight);\n vars.set('--type-body-leading', typography?.typeScale?.body?.leading);\n vars.set('--type-body-tracking', typography?.typeScale?.body?.tracking);\n\n vars.set('--radius-sm', radii?.sm);\n vars.set('--radius-md', radii?.md);\n vars.set('--radius-lg', radii?.lg);\n\n /**\n * ELEVATION / DENSITY / MOTION / GRADIENT\n */\n vars.set('--shadow-sm', shadows?.sm);\n vars.set('--shadow-md', shadows?.md);\n vars.set('--shadow-lg', shadows?.lg);\n vars.set('--shadow-lift', shadows?.lift);\n\n vars.set('--space-gutter', spacing?.gutter);\n vars.set('--space-inset', spacing?.inset);\n\n vars.set('--motion-duration', motion?.duration);\n vars.set('--motion-easing', motion?.easing);\n\n vars.set('--gradient-brand', gradient?.brand);\n\n return vars.expose();\n};\n\nconst setTokens = (node: HTMLElement, vars: Record<string, string>) => {\n for (const [name, value] of Object.entries(vars)) {\n node.style.setProperty(name, value);\n }\n};\n\nconst removeTokens = (node: HTMLElement, vars: Record<string, string>) => {\n for (const name of Object.keys(vars)) {\n node.style.removeProperty(name);\n }\n};\n\nexport const useThemeTokens = (tokens: ThemeTokens) => {\n // Insertion effect: runs before the DOM mutates and before any (descendant)\n // layout effect measures token-dependent geometry. Write-only, so it fits the\n // hook's constraints. Only the brand's overrides are set; unset slots fall\n // through to the stylesheet's `:root` / `[data-theme='dark']` defaults.\n useInsertionEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const vars = tokensToCssVars(tokens);\n\n setTokens(root, vars);\n\n return () => removeTokens(root, vars);\n }, [tokens]);\n};\n","import { type ReactNode, useMemo } from 'react';\n\nimport type { Brand } from '@keboola/brand-registry';\n\nimport { TooltipProvider } from '../Tooltip';\n\nimport { AIGradientsSvg } from './AIGradientSvg';\nimport { ThemeContext, type ThemeContextValue } from './context';\nimport { DEFAULT_BRANDS, defaultBrand } from './defaults';\nimport { type UseBrandOptions, useBrandState } from './useBrandState';\nimport { type UseColorSchemeOptions, useColorSchemeState } from './useColorSchemeState';\nimport { brandThemeToTokens, useThemeTokens } from './useThemeTokens';\nimport { createTheme } from './utils';\n\ntype Props = UseColorSchemeOptions &\n UseBrandOptions & {\n /** Brands this provider knows about; the active brand id resolves against these. */\n brands?: readonly Brand[];\n children: ReactNode;\n };\n\nexport const ThemeProvider = ({\n defaultScheme,\n scheme,\n onSchemeChange,\n defaultBrandId,\n brandId,\n onBrandIdChange,\n brands = DEFAULT_BRANDS,\n children,\n}: Props) => {\n const colorSchemeState = useColorSchemeState({\n defaultScheme,\n scheme,\n onSchemeChange,\n });\n\n const brandState = useBrandState({\n defaultBrandId,\n brandId,\n onBrandIdChange,\n });\n\n // Resolve the active brand; an unknown id (incl. the default sentinel) falls\n // back to `defaultBrand`, whose empty theme injects nothing so the stylesheet\n // defaults apply.\n const brand = useMemo(\n () => brands.find((item) => item.id === brandState.brandId) ?? defaultBrand,\n [brands, brandState.brandId],\n );\n const themes = useMemo(() => brands.map(createTheme), [brands]);\n const currentTheme = useMemo(() => createTheme(brand), [brand]);\n\n // Only the brand's overrides for the resolved scheme are injected; every slot\n // it omits (including a missing dark palette) falls through to the stylesheet's\n // `:root` / `[data-theme='dark']` defaults — so dark mode works for any brand.\n const themeTokens = useMemo(\n () => brandThemeToTokens(brand.theme, colorSchemeState.resolvedScheme),\n [brand, colorSchemeState.resolvedScheme],\n );\n\n useThemeTokens(themeTokens);\n\n const { scheme: activeScheme, resolvedScheme, setScheme } = colorSchemeState;\n const { brandId: activeBrandId, setBrand } = brandState;\n const context = useMemo<ThemeContextValue>(\n () => ({\n scheme: activeScheme,\n resolvedScheme,\n setScheme,\n brandId: activeBrandId,\n setBrand,\n themes,\n currentTheme,\n }),\n [activeScheme, resolvedScheme, setScheme, activeBrandId, setBrand, themes, currentTheme],\n );\n\n return (\n <ThemeContext value={context}>\n <AIGradientsSvg />\n <TooltipProvider>{children}</TooltipProvider>\n </ThemeContext>\n );\n};\n","import type { ReactElement } from 'react';\nimport { render, type RenderOptions, type RenderResult } from '@testing-library/react';\n\nimport { type Brand, keboola } from '@keboola/brand-registry';\n\nimport { ArgoDesignContext, ThemeProvider } from '../components/ThemeProvider';\nimport { keboolaLegacyIds } from '../components/ThemeProvider/defaults';\n\ntype Options = Omit<RenderOptions, 'wrapper'> & {\n /** Brand to drive the wrapping `<ThemeProvider>`. Defaults to `keboola`. */\n brand?: Brand;\n};\n\n/**\n * `@testing-library/react` `render` wrapped in a `<ThemeProvider brand={...}>`.\n *\n * Use in unit tests for any component that calls `useTheme()` or relies on\n * the brand-driven CSS variables. Defaults to the canonical Keboola brand so\n * callers can opt into a specific brand only when they need to assert\n * brand-dependent behaviour (e.g. chrome re-skins under `keboola-legacy`).\n *\n * `ThemeProvider` no longer drives the argo/legacy design language (that is\n * kbc-ui-specific), so this helper also provides `ArgoDesignContext` derived\n * from the brand — a legacy brand renders legacy chrome, any other renders\n * argo — matching how kbc-ui wires it, so brand-dependent chrome tests keep\n * working through a single `brand` option.\n */\nexport const renderWithTheme = (ui: ReactElement, options: Options = {}): RenderResult => {\n const { brand = keboola, ...rest } = options;\n const isArgo = !keboolaLegacyIds.includes(brand.id);\n return render(ui, {\n ...rest,\n wrapper: ({ children }) => (\n <ThemeProvider brands={[brand]} brandId={brand.id}>\n <ArgoDesignContext value={isArgo}>{children}</ArgoDesignContext>\n </ThemeProvider>\n ),\n });\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ThemeProvider/utils.ts","../src/components/ThemeProvider/defaults.ts","../src/components/ThemeProvider/context.tsx","../src/components/Tooltip/TooltipContent.tsx","../src/utils/classNames.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/ThemeProvider/AIGradientSvg.tsx","../src/components/ThemeProvider/useBrandState.ts","../src/components/ThemeProvider/useColorSchemeState.ts","../src/components/ThemeProvider/useThemeTokens.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/testing/renderWithTheme.tsx"],"names":["keboolaLegacySidebar","keboolaLegacyTopnav","createContext","cva","extendTailwindMerge","Provider","jsx","jsxs","defaultBrand","useState","useCallback","useEffect","useInsertionEffect","useMemo","keboola","render"],"mappings":"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","file":"testing.cjs","sourcesContent":["import type { Brand } from '@keboola/brand-registry';\n\nimport type { Theme } from './types';\n\nexport const createTheme = (brand: Brand): Theme => ({\n id: brand.id,\n name: brand.name,\n shell: brand.shell,\n logo: brand.logo,\n});\n\nexport type CssVars = {\n set: (name: string, value: string | undefined) => void;\n expose: () => Record<string, string>;\n};\n\nexport const createCssVars = (): CssVars => {\n const vars: Record<string, string> = {};\n return {\n set: (name, value) => {\n if (value !== undefined) vars[name] = value;\n },\n expose: () => ({ ...vars }),\n };\n};\n","import type { Brand } from '@keboola/brand-registry';\nimport { keboolaLegacySidebar, keboolaLegacyTopnav } from '@keboola/brand-registry';\n\nimport type { ResolvedColorScheme } from './types';\nimport { createTheme } from './utils';\n\nexport const keboolaLegacyIds = [keboolaLegacySidebar.id, keboolaLegacyTopnav.id];\nexport const DEFAULT_COLOR_SCHEME: ResolvedColorScheme = 'light';\n\n// Sentinel active-brand id that maps to no registry brand. It resolves to\n// `defaultBrand` below, whose empty theme injects nothing — so the design-system\n// stylesheet defaults (`:root` / `[data-theme='dark']`) provide every token.\nexport const DEFAULT_BRAND_ID = 'design-system';\n\n// The \"no brand\" fallback: an empty theme → no CSS vars injected → the\n// stylesheet defaults win. Its shell/name still drive AppShell + switcher label.\nexport const defaultBrand: Brand = {\n id: DEFAULT_BRAND_ID,\n name: 'Design System',\n shell: 'sidebar',\n theme: {},\n};\nexport const defaultTheme = createTheme(defaultBrand);\n\nexport const DEFAULT_BRANDS: Brand[] = [];\n","import { createContext, use } from 'react';\n\nimport { DEFAULT_COLOR_SCHEME, defaultTheme } from './defaults';\nimport type { Theme } from './types';\nimport type { useBrandState } from './useBrandState';\nimport type { useColorSchemeState } from './useColorSchemeState';\n\nexport type ThemeContextValue = ReturnType<typeof useColorSchemeState> &\n ReturnType<typeof useBrandState> & {\n themes: Theme[];\n currentTheme: Theme;\n };\n\nconst noop = () => void 0;\n\nconst defaultContext: ThemeContextValue = {\n scheme: DEFAULT_COLOR_SCHEME,\n resolvedScheme: DEFAULT_COLOR_SCHEME,\n setScheme: noop,\n brandId: defaultTheme.id,\n setBrand: noop,\n\n themes: [defaultTheme],\n currentTheme: defaultTheme,\n};\n\nexport const ThemeContext = createContext(defaultContext);\n\nexport const useTheme = () => use(ThemeContext);\n\n/**\n * TEMPORARY — kbc-ui-internal only.\n *\n * Flags whether the subtree renders the argo design language. Defaults to argo\n * (`true`) — the modern default; legacy chrome is the exception. It exists\n * solely to bridge kbc-ui while its chrome is migrated off the legacy design\n * language: kbc-ui provides `false` for legacy brands/surfaces (see its\n * `AppThemeProvider`) and reads it via `useArgoDesign`. `ThemeProvider` does\n * not set it — argo is decoupled from the brand. Once every kbc-ui surface has\n * been migrated, this context and its hook can be deleted.\n */\nexport const ArgoDesignContext = createContext<boolean>(true);\n\nexport const useArgoDesign = () => use(ArgoDesignContext);\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 { useArgoDesign } from '../ThemeProvider/context';\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 'tw:data-[argo=true]:rounded-2xl',\n 'tw:data-[argo=true]:border',\n 'tw:data-[argo=true]:border-solid',\n 'tw:data-[argo=true]:border-border',\n 'tw:data-[argo=true]:bg-popover',\n 'tw:data-[argo=true]:text-popover-foreground',\n 'tw:data-[argo=true]:shadow-md',\n\n // argo open animation\n 'tw:data-[argo=true]:data-[state=delayed-open]:animate-in',\n 'tw:data-[argo=true]:data-[state=instant-open]:animate-in',\n 'tw:data-[argo=true]:data-[state=delayed-open]:fade-in-0',\n 'tw:data-[argo=true]:data-[state=instant-open]:fade-in-0',\n 'tw:data-[argo=true]:data-[state=delayed-open]:zoom-in-95',\n 'tw:data-[argo=true]:data-[state=instant-open]:zoom-in-95',\n\n // argo closed animation\n 'tw:data-[argo=true]:data-[state=closed]:animate-out',\n 'tw:data-[argo=true]:data-[state=closed]:fade-out-0',\n 'tw:data-[argo=true]:data-[state=closed]:zoom-out-95',\n\n // argo position animation\n 'tw:data-[argo=true]:data-[side=bottom]:slide-in-from-top-2',\n 'tw:data-[argo=true]:data-[side=left]:slide-in-from-right-2',\n 'tw:data-[argo=true]:data-[side=right]:slide-in-from-left-2',\n 'tw:data-[argo=true]:data-[side=top]: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 // Legacy chrome uppercases the action tooltip; the Keboola V2 brand\n // (`data-brand=\"keboola\"`) renders it in standard case instead.\n 'tw:uppercase',\n 'tw:tracking-wider',\n 'tw:[[data-brand=keboola]_&]:normal-case',\n 'tw:[[data-brand=keboola]_&]:tracking-normal',\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 renderArgo = useArgoDesign();\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 ClassValue, clsx } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge v3 (Tailwind v4): the prefix drops the trailing separator —\n// `tw:` → `tw` (the `:` separator is implied).\nconst twMerge = extendTailwindMerge({\n prefix: 'tw',\n});\n\nexport const cn = (...classes: ClassValue[]) => twMerge(clsx(...classes));\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 /** Hover delay before the tooltip opens, in ms. Defaults to the shared 300ms. */\n delayDuration?: number;\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 delayDuration,\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 delayDuration={delayDuration}\n disableHoverableContent={isActionVariant}\n >\n <TooltipTrigger\n asChild={triggerAsChild}\n keepOpenOnClick={keepOpenOnTriggerClick}\n onKeyUp={handleKeyUp}\n >\n {children}\n </TooltipTrigger>\n\n <TooltipContent\n className={className}\n variant={resolvedVariant}\n placement={placement}\n keepOpenOnPointerDownOutside={keepOpenOnTriggerClick}\n >\n {tooltip}\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nTooltip.Root = TooltipRoot;\nTooltip.Content = TooltipContent;\nTooltip.Trigger = TooltipTrigger;\n","export const AIGradientsSvg = () => (\n <svg width=\"0\" height=\"0\" style={{ position: 'absolute', visibility: 'hidden' }}>\n <defs>\n {/*aigradient-600*/}\n <linearGradient id=\"aigradient-600\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#61E4FF\" />\n <stop offset=\"50%\" stopColor=\"#1F8FFF\" />\n <stop offset=\"100%\" stopColor=\"#7C5CFF\" />\n </linearGradient>\n\n {/*aigradient-700*/}\n <linearGradient id=\"aigradient-700\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor=\"#075fb8\" />\n <stop offset=\"100%\" stopColor=\"#5b2cb8\" />\n </linearGradient>\n </defs>\n </svg>\n);\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { DEFAULT_BRAND_ID } from './defaults';\nimport type { BrandId } from './types';\n\nexport const BRAND_ATTRIBUTE = 'data-brand';\n\nexport type UseBrandOptions = {\n /** Initial active brand id for uncontrolled use. Defaults to the design-system sentinel (`DEFAULT_BRAND_ID`) — no brand tokens injected, so the stylesheet defaults apply. */\n defaultBrandId?: BrandId;\n /** Controlled active brand id. When set, the parent owns the value and `setBrand` only notifies via `onBrandIdChange` (it does not mutate internal state). */\n brandId?: BrandId;\n /** Called with the next id whenever `setBrand` runs — required to persist the choice in controlled mode. */\n onBrandIdChange?: (brandId: BrandId) => void;\n};\n\nexport const useBrandState = ({\n defaultBrandId: defaultBrand = DEFAULT_BRAND_ID,\n brandId: controlledBrand,\n onBrandIdChange: onBrandChange,\n}: UseBrandOptions = {}) => {\n const [uncontrolledBrand, setUncontrolledBrand] = useState(defaultBrand);\n\n const isControlled = controlledBrand !== undefined;\n const brandId = isControlled ? controlledBrand : uncontrolledBrand;\n\n const setBrand = useCallback(\n (next: BrandId) => {\n if (!isControlled) setUncontrolledBrand(next);\n onBrandChange?.(next);\n },\n [isControlled, onBrandChange],\n );\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(BRAND_ATTRIBUTE, brandId);\n }, [brandId]);\n\n return { brandId, setBrand };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { DEFAULT_COLOR_SCHEME } from './defaults';\nimport type { ColorScheme, ResolvedColorScheme } from './types';\n\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\nexport const THEME_ATTRIBUTE = 'data-theme';\n\nconst getSystemColorScheme = (): ResolvedColorScheme => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return 'light';\n return window.matchMedia(DARK_QUERY).matches ? 'dark' : 'light';\n};\n\nexport type UseColorSchemeOptions = {\n /** Initial colour scheme for uncontrolled use. Defaults to `light` (`DEFAULT_COLOR_SCHEME`). */\n defaultScheme?: ColorScheme;\n /** Controlled colour scheme (`light` / `dark` / `system`). When set, the parent owns the value and `setScheme` only notifies via `onSchemeChange`. `system` follows `prefers-color-scheme` and resolves reactively. */\n scheme?: ColorScheme;\n /** Called with the next scheme whenever `setScheme` runs — required to persist the choice in controlled mode. */\n onSchemeChange?: (theme: ColorScheme) => void;\n};\n\nexport const useColorSchemeState = ({\n defaultScheme = DEFAULT_COLOR_SCHEME,\n scheme: propScheme,\n onSchemeChange,\n}: UseColorSchemeOptions = {}) => {\n const [uncontrolledScheme, setUncontrolledScheme] = useState(defaultScheme);\n const [systemScheme, setSystemScheme] = useState<ResolvedColorScheme>(getSystemColorScheme);\n\n const isControlled = propScheme !== undefined;\n const scheme = isControlled ? propScheme : uncontrolledScheme;\n\n const setScheme = useCallback(\n (next: ColorScheme) => {\n if (!isControlled) setUncontrolledScheme(next);\n onSchemeChange?.(next);\n },\n [isControlled, onSchemeChange],\n );\n\n // Track the OS preference so `system` stays live as the user flips it.\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const mq = window.matchMedia(DARK_QUERY);\n const onChange = () => setSystemScheme(mq.matches ? 'dark' : 'light');\n onChange();\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, []);\n\n const resolvedScheme: ResolvedColorScheme = scheme === 'system' ? systemScheme : scheme;\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(THEME_ATTRIBUTE, resolvedScheme);\n }, [resolvedScheme]);\n\n return { scheme, resolvedScheme, setScheme };\n};\n","import { useInsertionEffect } from 'react';\n\nimport type {\n BrandTheme,\n Colors,\n Gradient,\n Motion,\n Radii,\n Shadows,\n Spacing,\n Typography,\n} from '@keboola/brand-registry';\n\nimport type { ResolvedColorScheme } from './types';\nimport { createCssVars } from './utils';\n\nexport type ThemeTokens = {\n colors?: Colors;\n typography?: Typography;\n radii?: Radii;\n shadows?: Shadows;\n spacing?: Spacing;\n motion?: Motion;\n gradient?: Gradient;\n};\n\nexport const brandThemeToTokens = (\n theme: BrandTheme,\n scheme: ResolvedColorScheme,\n): ThemeTokens => ({\n colors: scheme === 'dark' ? theme.colorsDark : theme.colors,\n typography: theme.typography,\n radii: theme.radii,\n // Scheme-independent — the same values apply in light and dark.\n shadows: theme.shadows,\n spacing: theme.spacing,\n motion: theme.motion,\n gradient: theme.gradient,\n});\n\nexport const tokensToCssVars = ({\n colors,\n typography,\n radii,\n shadows,\n spacing,\n motion,\n gradient,\n}: ThemeTokens): Record<string, string> => {\n const vars = createCssVars();\n\n vars.set('--background', colors?.background);\n vars.set('--foreground', colors?.foreground);\n vars.set('--muted', colors?.muted);\n vars.set('--muted-foreground', colors?.mutedForeground);\n vars.set('--border', colors?.border);\n vars.set('--input', colors?.input);\n vars.set('--ring', colors?.ring);\n vars.set('--ring-offset', colors?.ringOffset);\n vars.set('--primary', colors?.primary);\n vars.set('--primary-foreground', colors?.primaryForeground);\n vars.set('--secondary', colors?.secondary);\n vars.set('--secondary-foreground', colors?.secondaryForeground);\n vars.set('--accent', colors?.accent);\n vars.set('--accent-foreground', colors?.accentForeground);\n vars.set('--card', colors?.card);\n vars.set('--card-foreground', colors?.cardForeground);\n vars.set('--popover', colors?.popover);\n vars.set('--popover-foreground', colors?.popoverForeground);\n vars.set('--destructive', colors?.destructive);\n vars.set('--destructive-foreground', colors?.destructiveForeground);\n vars.set('--success', colors?.success);\n vars.set('--success-foreground', colors?.successForeground);\n vars.set('--warning', colors?.warning);\n vars.set('--warning-foreground', colors?.warningForeground);\n vars.set('--info', colors?.info);\n vars.set('--info-foreground', colors?.infoForeground);\n\n vars.set('--chart-1', colors?.chart?.chart1);\n vars.set('--chart-2', colors?.chart?.chart2);\n vars.set('--chart-3', colors?.chart?.chart3);\n vars.set('--chart-4', colors?.chart?.chart4);\n vars.set('--chart-5', colors?.chart?.chart5);\n\n vars.set('--sidebar', colors?.sidebar?.sidebar);\n vars.set('--sidebar-foreground', colors?.sidebar?.sidebarForeground);\n vars.set('--sidebar-primary', colors?.sidebar?.sidebarPrimary);\n vars.set('--sidebar-primary-foreground', colors?.sidebar?.sidebarPrimaryForeground);\n vars.set('--sidebar-accent', colors?.sidebar?.sidebarAccent);\n vars.set('--sidebar-accent-foreground', colors?.sidebar?.sidebarAccentForeground);\n vars.set('--sidebar-border', colors?.sidebar?.sidebarBorder);\n vars.set('--sidebar-ring', colors?.sidebar?.sidebarRing);\n\n /**\n * TYPOGRAPHY\n */\n vars.set('--font-sans', typography?.fontFamily?.trim() || undefined);\n vars.set('--font-display', typography?.fontDisplay?.trim() || undefined);\n vars.set('--font-mono', typography?.fontMono?.trim() || undefined);\n\n // Chrome font-weight slots — read by Tailwind's `fontWeight` scale.\n vars.set('--font-weight-normal', typography?.weight?.normal);\n vars.set('--font-weight-medium', typography?.weight?.medium);\n vars.set('--font-weight-semibold', typography?.weight?.semibold);\n vars.set('--font-weight-bold', typography?.weight?.bold);\n\n // Chrome tracking — behind Button/Badge `tracking-chrome`.\n vars.set('--letter-spacing-chrome', typography?.letterSpacing?.chrome);\n\n // Type scale — display/heading/body steps read by `text-display/heading/body`.\n vars.set('--type-display-size', typography?.typeScale?.display?.size);\n vars.set('--type-display-weight', typography?.typeScale?.display?.weight);\n vars.set('--type-display-leading', typography?.typeScale?.display?.leading);\n vars.set('--type-display-tracking', typography?.typeScale?.display?.tracking);\n vars.set('--type-heading-size', typography?.typeScale?.heading?.size);\n vars.set('--type-heading-weight', typography?.typeScale?.heading?.weight);\n vars.set('--type-heading-leading', typography?.typeScale?.heading?.leading);\n vars.set('--type-heading-tracking', typography?.typeScale?.heading?.tracking);\n vars.set('--type-body-size', typography?.typeScale?.body?.size);\n vars.set('--type-body-weight', typography?.typeScale?.body?.weight);\n vars.set('--type-body-leading', typography?.typeScale?.body?.leading);\n vars.set('--type-body-tracking', typography?.typeScale?.body?.tracking);\n\n vars.set('--radius-sm', radii?.sm);\n vars.set('--radius-md', radii?.md);\n vars.set('--radius-lg', radii?.lg);\n\n /**\n * ELEVATION / DENSITY / MOTION / GRADIENT\n */\n vars.set('--shadow-sm', shadows?.sm);\n vars.set('--shadow-md', shadows?.md);\n vars.set('--shadow-lg', shadows?.lg);\n vars.set('--shadow-lift', shadows?.lift);\n\n vars.set('--space-gutter', spacing?.gutter);\n vars.set('--space-inset', spacing?.inset);\n\n vars.set('--motion-duration', motion?.duration);\n vars.set('--motion-easing', motion?.easing);\n\n vars.set('--gradient-brand', gradient?.brand);\n\n return vars.expose();\n};\n\nconst setTokens = (node: HTMLElement, vars: Record<string, string>) => {\n for (const [name, value] of Object.entries(vars)) {\n node.style.setProperty(name, value);\n }\n};\n\nconst removeTokens = (node: HTMLElement, vars: Record<string, string>) => {\n for (const name of Object.keys(vars)) {\n node.style.removeProperty(name);\n }\n};\n\nexport const useThemeTokens = (tokens: ThemeTokens) => {\n // Insertion effect: runs before the DOM mutates and before any (descendant)\n // layout effect measures token-dependent geometry. Write-only, so it fits the\n // hook's constraints. Only the brand's overrides are set; unset slots fall\n // through to the stylesheet's `:root` / `[data-theme='dark']` defaults.\n useInsertionEffect(() => {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const vars = tokensToCssVars(tokens);\n\n setTokens(root, vars);\n\n return () => removeTokens(root, vars);\n }, [tokens]);\n};\n","import { type ReactNode, useMemo } from 'react';\n\nimport type { Brand } from '@keboola/brand-registry';\n\nimport { TooltipProvider } from '../Tooltip';\n\nimport { AIGradientsSvg } from './AIGradientSvg';\nimport { ThemeContext, type ThemeContextValue } from './context';\nimport { DEFAULT_BRANDS, defaultBrand } from './defaults';\nimport { type UseBrandOptions, useBrandState } from './useBrandState';\nimport { type UseColorSchemeOptions, useColorSchemeState } from './useColorSchemeState';\nimport { brandThemeToTokens, useThemeTokens } from './useThemeTokens';\nimport { createTheme } from './utils';\n\ntype Props = UseColorSchemeOptions &\n UseBrandOptions & {\n /** Brands this provider knows about; the active brand id resolves against these. */\n brands?: readonly Brand[];\n children: ReactNode;\n };\n\nexport const ThemeProvider = ({\n defaultScheme,\n scheme,\n onSchemeChange,\n defaultBrandId,\n brandId,\n onBrandIdChange,\n brands = DEFAULT_BRANDS,\n children,\n}: Props) => {\n const colorSchemeState = useColorSchemeState({\n defaultScheme,\n scheme,\n onSchemeChange,\n });\n\n const brandState = useBrandState({\n defaultBrandId,\n brandId,\n onBrandIdChange,\n });\n\n // Resolve the active brand; an unknown id (incl. the default sentinel) falls\n // back to `defaultBrand`, whose empty theme injects nothing so the stylesheet\n // defaults apply.\n const brand = useMemo(\n () => brands.find((item) => item.id === brandState.brandId) ?? defaultBrand,\n [brands, brandState.brandId],\n );\n const themes = useMemo(() => brands.map(createTheme), [brands]);\n const currentTheme = useMemo(() => createTheme(brand), [brand]);\n\n // Only the brand's overrides for the resolved scheme are injected; every slot\n // it omits (including a missing dark palette) falls through to the stylesheet's\n // `:root` / `[data-theme='dark']` defaults — so dark mode works for any brand.\n const themeTokens = useMemo(\n () => brandThemeToTokens(brand.theme, colorSchemeState.resolvedScheme),\n [brand, colorSchemeState.resolvedScheme],\n );\n\n useThemeTokens(themeTokens);\n\n const { scheme: activeScheme, resolvedScheme, setScheme } = colorSchemeState;\n const { brandId: activeBrandId, setBrand } = brandState;\n const context = useMemo<ThemeContextValue>(\n () => ({\n scheme: activeScheme,\n resolvedScheme,\n setScheme,\n brandId: activeBrandId,\n setBrand,\n themes,\n currentTheme,\n }),\n [activeScheme, resolvedScheme, setScheme, activeBrandId, setBrand, themes, currentTheme],\n );\n\n return (\n <ThemeContext value={context}>\n <AIGradientsSvg />\n <TooltipProvider>{children}</TooltipProvider>\n </ThemeContext>\n );\n};\n","import type { ReactElement } from 'react';\nimport { render, type RenderOptions, type RenderResult } from '@testing-library/react';\n\nimport { type Brand, keboola } from '@keboola/brand-registry';\n\nimport { ArgoDesignContext, ThemeProvider } from '../components/ThemeProvider';\nimport { keboolaLegacyIds } from '../components/ThemeProvider/defaults';\n\ntype Options = Omit<RenderOptions, 'wrapper'> & {\n /** Brand to drive the wrapping `<ThemeProvider>`. Defaults to `keboola`. */\n brand?: Brand;\n};\n\n/**\n * `@testing-library/react` `render` wrapped in a `<ThemeProvider brand={...}>`.\n *\n * Use in unit tests for any component that calls `useTheme()` or relies on\n * the brand-driven CSS variables. Defaults to the canonical Keboola brand so\n * callers can opt into a specific brand only when they need to assert\n * brand-dependent behaviour (e.g. chrome re-skins under `keboola-legacy`).\n *\n * `ThemeProvider` no longer drives the argo/legacy design language (that is\n * kbc-ui-specific), so this helper also provides `ArgoDesignContext` derived\n * from the brand — a legacy brand renders legacy chrome, any other renders\n * argo — matching how kbc-ui wires it, so brand-dependent chrome tests keep\n * working through a single `brand` option.\n */\nexport const renderWithTheme = (ui: ReactElement, options: Options = {}): RenderResult => {\n const { brand = keboola, ...rest } = options;\n const isArgo = !keboolaLegacyIds.includes(brand.id);\n return render(ui, {\n ...rest,\n wrapper: ({ children }) => (\n <ThemeProvider brands={[brand]} brandId={brand.id}>\n <ArgoDesignContext value={isArgo}>{children}</ArgoDesignContext>\n </ThemeProvider>\n ),\n });\n};\n"]}
|
package/dist/testing.js
CHANGED
|
@@ -55,39 +55,39 @@ var ArgoDesignContext = createContext(true);
|
|
|
55
55
|
cva(
|
|
56
56
|
[
|
|
57
57
|
"tailwindcss-preflight",
|
|
58
|
-
"tw
|
|
59
|
-
"tw
|
|
60
|
-
"tw
|
|
61
|
-
"tw
|
|
62
|
-
"tw
|
|
58
|
+
"tw:inline-block",
|
|
59
|
+
"tw:break-anywhere",
|
|
60
|
+
"tw:max-h-96",
|
|
61
|
+
"tw:overflow-y-auto",
|
|
62
|
+
"tw:z-[1060]",
|
|
63
63
|
// legacy (dark) chrome — default
|
|
64
|
-
"tw
|
|
65
|
-
"tw
|
|
66
|
-
"tw
|
|
64
|
+
"tw:rounded",
|
|
65
|
+
"tw:bg-neutral-800",
|
|
66
|
+
"tw:text-white",
|
|
67
67
|
// argo chrome overrides — semantic floating-panel tokens
|
|
68
|
-
"data-[argo=true]:
|
|
69
|
-
"data-[argo=true]:
|
|
70
|
-
"data-[argo=true]:
|
|
71
|
-
"data-[argo=true]:
|
|
72
|
-
"data-[argo=true]:
|
|
73
|
-
"data-[argo=true]:
|
|
74
|
-
"data-[argo=true]:
|
|
68
|
+
"tw:data-[argo=true]:rounded-2xl",
|
|
69
|
+
"tw:data-[argo=true]:border",
|
|
70
|
+
"tw:data-[argo=true]:border-solid",
|
|
71
|
+
"tw:data-[argo=true]:border-border",
|
|
72
|
+
"tw:data-[argo=true]:bg-popover",
|
|
73
|
+
"tw:data-[argo=true]:text-popover-foreground",
|
|
74
|
+
"tw:data-[argo=true]:shadow-md",
|
|
75
75
|
// argo open animation
|
|
76
|
-
"data-[argo=true]:data-[state=delayed-open]:
|
|
77
|
-
"data-[argo=true]:data-[state=instant-open]:
|
|
78
|
-
"data-[argo=true]:data-[state=delayed-open]:
|
|
79
|
-
"data-[argo=true]:data-[state=instant-open]:
|
|
80
|
-
"data-[argo=true]:data-[state=delayed-open]:
|
|
81
|
-
"data-[argo=true]:data-[state=instant-open]:
|
|
76
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:animate-in",
|
|
77
|
+
"tw:data-[argo=true]:data-[state=instant-open]:animate-in",
|
|
78
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:fade-in-0",
|
|
79
|
+
"tw:data-[argo=true]:data-[state=instant-open]:fade-in-0",
|
|
80
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:zoom-in-95",
|
|
81
|
+
"tw:data-[argo=true]:data-[state=instant-open]:zoom-in-95",
|
|
82
82
|
// argo closed animation
|
|
83
|
-
"data-[argo=true]:data-[state=closed]:
|
|
84
|
-
"data-[argo=true]:data-[state=closed]:
|
|
85
|
-
"data-[argo=true]:data-[state=closed]:
|
|
83
|
+
"tw:data-[argo=true]:data-[state=closed]:animate-out",
|
|
84
|
+
"tw:data-[argo=true]:data-[state=closed]:fade-out-0",
|
|
85
|
+
"tw:data-[argo=true]:data-[state=closed]:zoom-out-95",
|
|
86
86
|
// argo position animation
|
|
87
|
-
"data-[argo=true]:data-[side=bottom]:
|
|
88
|
-
"data-[argo=true]:data-[side=left]:
|
|
89
|
-
"data-[argo=true]:data-[side=right]:
|
|
90
|
-
"data-[argo=true]:data-[side=top]:
|
|
87
|
+
"tw:data-[argo=true]:data-[side=bottom]:slide-in-from-top-2",
|
|
88
|
+
"tw:data-[argo=true]:data-[side=left]:slide-in-from-right-2",
|
|
89
|
+
"tw:data-[argo=true]:data-[side=right]:slide-in-from-left-2",
|
|
90
|
+
"tw:data-[argo=true]:data-[side=top]:slide-in-from-bottom-2"
|
|
91
91
|
],
|
|
92
92
|
{
|
|
93
93
|
defaultVariants: {
|
|
@@ -96,29 +96,33 @@ cva(
|
|
|
96
96
|
variants: {
|
|
97
97
|
variant: {
|
|
98
98
|
action: [
|
|
99
|
-
"tw
|
|
100
|
-
"tw
|
|
101
|
-
"tw
|
|
102
|
-
"tw
|
|
103
|
-
"tw
|
|
104
|
-
"tw
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
"tw:max-w-fit",
|
|
100
|
+
"tw:px-3",
|
|
101
|
+
"tw:py-2",
|
|
102
|
+
"tw:text-center",
|
|
103
|
+
"tw:text-xs",
|
|
104
|
+
"tw:font-medium",
|
|
105
|
+
// Legacy chrome uppercases the action tooltip; the Keboola V2 brand
|
|
106
|
+
// (`data-brand="keboola"`) renders it in standard case instead.
|
|
107
|
+
"tw:uppercase",
|
|
108
|
+
"tw:tracking-wider",
|
|
109
|
+
"tw:[[data-brand=keboola]_&]:normal-case",
|
|
110
|
+
"tw:[[data-brand=keboola]_&]:tracking-normal"
|
|
107
111
|
],
|
|
108
112
|
explanatory: [
|
|
109
|
-
"tw
|
|
110
|
-
"tw
|
|
111
|
-
"tw
|
|
112
|
-
"tw
|
|
113
|
-
"tw
|
|
114
|
-
"tw
|
|
113
|
+
"tw:max-w-80",
|
|
114
|
+
"tw:px-4",
|
|
115
|
+
"tw:py-3",
|
|
116
|
+
"tw:text-left",
|
|
117
|
+
"tw:text-sm",
|
|
118
|
+
"tw:font-normal"
|
|
115
119
|
]
|
|
116
120
|
}
|
|
117
121
|
}
|
|
118
122
|
}
|
|
119
123
|
);
|
|
120
124
|
extendTailwindMerge({
|
|
121
|
-
prefix: "tw
|
|
125
|
+
prefix: "tw"
|
|
122
126
|
});
|
|
123
127
|
var TooltipProvider = Provider;
|
|
124
128
|
var AIGradientsSvg = () => /* @__PURE__ */ jsx("svg", { width: "0", height: "0", style: { position: "absolute", visibility: "hidden" }, children: /* @__PURE__ */ jsxs("defs", { children: [
|
|
@@ -211,45 +215,45 @@ var tokensToCssVars = ({
|
|
|
211
215
|
gradient
|
|
212
216
|
}) => {
|
|
213
217
|
const vars = createCssVars();
|
|
214
|
-
vars.set("--
|
|
215
|
-
vars.set("--
|
|
216
|
-
vars.set("--
|
|
217
|
-
vars.set("--
|
|
218
|
-
vars.set("--
|
|
219
|
-
vars.set("--
|
|
220
|
-
vars.set("--
|
|
221
|
-
vars.set("--
|
|
222
|
-
vars.set("--
|
|
223
|
-
vars.set("--
|
|
224
|
-
vars.set("--
|
|
225
|
-
vars.set("--
|
|
226
|
-
vars.set("--
|
|
227
|
-
vars.set("--
|
|
228
|
-
vars.set("--
|
|
229
|
-
vars.set("--
|
|
230
|
-
vars.set("--
|
|
231
|
-
vars.set("--
|
|
232
|
-
vars.set("--
|
|
233
|
-
vars.set("--
|
|
234
|
-
vars.set("--
|
|
235
|
-
vars.set("--
|
|
236
|
-
vars.set("--
|
|
237
|
-
vars.set("--
|
|
238
|
-
vars.set("--
|
|
239
|
-
vars.set("--
|
|
240
|
-
vars.set("--
|
|
241
|
-
vars.set("--
|
|
242
|
-
vars.set("--
|
|
243
|
-
vars.set("--
|
|
244
|
-
vars.set("--
|
|
245
|
-
vars.set("--
|
|
246
|
-
vars.set("--
|
|
247
|
-
vars.set("--
|
|
248
|
-
vars.set("--
|
|
249
|
-
vars.set("--
|
|
250
|
-
vars.set("--
|
|
251
|
-
vars.set("--
|
|
252
|
-
vars.set("--
|
|
218
|
+
vars.set("--background", colors?.background);
|
|
219
|
+
vars.set("--foreground", colors?.foreground);
|
|
220
|
+
vars.set("--muted", colors?.muted);
|
|
221
|
+
vars.set("--muted-foreground", colors?.mutedForeground);
|
|
222
|
+
vars.set("--border", colors?.border);
|
|
223
|
+
vars.set("--input", colors?.input);
|
|
224
|
+
vars.set("--ring", colors?.ring);
|
|
225
|
+
vars.set("--ring-offset", colors?.ringOffset);
|
|
226
|
+
vars.set("--primary", colors?.primary);
|
|
227
|
+
vars.set("--primary-foreground", colors?.primaryForeground);
|
|
228
|
+
vars.set("--secondary", colors?.secondary);
|
|
229
|
+
vars.set("--secondary-foreground", colors?.secondaryForeground);
|
|
230
|
+
vars.set("--accent", colors?.accent);
|
|
231
|
+
vars.set("--accent-foreground", colors?.accentForeground);
|
|
232
|
+
vars.set("--card", colors?.card);
|
|
233
|
+
vars.set("--card-foreground", colors?.cardForeground);
|
|
234
|
+
vars.set("--popover", colors?.popover);
|
|
235
|
+
vars.set("--popover-foreground", colors?.popoverForeground);
|
|
236
|
+
vars.set("--destructive", colors?.destructive);
|
|
237
|
+
vars.set("--destructive-foreground", colors?.destructiveForeground);
|
|
238
|
+
vars.set("--success", colors?.success);
|
|
239
|
+
vars.set("--success-foreground", colors?.successForeground);
|
|
240
|
+
vars.set("--warning", colors?.warning);
|
|
241
|
+
vars.set("--warning-foreground", colors?.warningForeground);
|
|
242
|
+
vars.set("--info", colors?.info);
|
|
243
|
+
vars.set("--info-foreground", colors?.infoForeground);
|
|
244
|
+
vars.set("--chart-1", colors?.chart?.chart1);
|
|
245
|
+
vars.set("--chart-2", colors?.chart?.chart2);
|
|
246
|
+
vars.set("--chart-3", colors?.chart?.chart3);
|
|
247
|
+
vars.set("--chart-4", colors?.chart?.chart4);
|
|
248
|
+
vars.set("--chart-5", colors?.chart?.chart5);
|
|
249
|
+
vars.set("--sidebar", colors?.sidebar?.sidebar);
|
|
250
|
+
vars.set("--sidebar-foreground", colors?.sidebar?.sidebarForeground);
|
|
251
|
+
vars.set("--sidebar-primary", colors?.sidebar?.sidebarPrimary);
|
|
252
|
+
vars.set("--sidebar-primary-foreground", colors?.sidebar?.sidebarPrimaryForeground);
|
|
253
|
+
vars.set("--sidebar-accent", colors?.sidebar?.sidebarAccent);
|
|
254
|
+
vars.set("--sidebar-accent-foreground", colors?.sidebar?.sidebarAccentForeground);
|
|
255
|
+
vars.set("--sidebar-border", colors?.sidebar?.sidebarBorder);
|
|
256
|
+
vars.set("--sidebar-ring", colors?.sidebar?.sidebarRing);
|
|
253
257
|
vars.set("--font-sans", typography?.fontFamily?.trim() || void 0);
|
|
254
258
|
vars.set("--font-display", typography?.fontDisplay?.trim() || void 0);
|
|
255
259
|
vars.set("--font-mono", typography?.fontMono?.trim() || void 0);
|