@bergetai/ui 0.17.0 → 0.18.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/dist/components/code-block/CodeBlock.cjs +50 -48
- package/dist/components/code-block/CodeBlock.cjs.map +1 -1
- package/dist/components/code-block/CodeBlock.d.cts +27 -7
- package/dist/components/code-block/CodeBlock.d.cts.map +1 -1
- package/dist/components/code-block/CodeBlock.d.mts +27 -7
- package/dist/components/code-block/CodeBlock.d.mts.map +1 -1
- package/dist/components/code-block/CodeBlock.mjs +45 -50
- package/dist/components/code-block/CodeBlock.mjs.map +1 -1
- package/dist/components/code-block/index.d.cts +3 -0
- package/dist/components/code-block/index.d.mts +3 -0
- package/dist/components/container/Container.d.cts +2 -2
- package/dist/components/container/Container.d.mts +2 -2
- package/dist/hooks/use-highlighted-code.cjs +58 -0
- package/dist/hooks/use-highlighted-code.cjs.map +1 -0
- package/dist/hooks/use-highlighted-code.d.cts +5 -0
- package/dist/hooks/use-highlighted-code.d.cts.map +1 -0
- package/dist/hooks/use-highlighted-code.d.mts +5 -0
- package/dist/hooks/use-highlighted-code.d.mts.map +1 -0
- package/dist/hooks/use-highlighted-code.mjs +56 -0
- package/dist/hooks/use-highlighted-code.mjs.map +1 -0
- package/dist/index.cjs +10 -0
- package/dist/index.d.cts +5 -2
- package/dist/index.d.mts +5 -2
- package/dist/index.mjs +4 -2
- package/dist/lib/highlighter.cjs +81 -0
- package/dist/lib/highlighter.cjs.map +1 -0
- package/dist/lib/highlighter.mjs +79 -0
- package/dist/lib/highlighter.mjs.map +1 -0
- package/dist/primitives/button.d.cts +1 -1
- package/dist/primitives/button.d.mts +1 -1
- package/dist/primitives/code-block.cjs +133 -0
- package/dist/primitives/code-block.cjs.map +1 -0
- package/dist/primitives/code-block.d.cts +29 -0
- package/dist/primitives/code-block.d.cts.map +1 -0
- package/dist/primitives/code-block.d.mts +29 -0
- package/dist/primitives/code-block.d.mts.map +1 -0
- package/dist/primitives/code-block.mjs +124 -0
- package/dist/primitives/code-block.mjs.map +1 -0
- package/dist/styles/index.css +32 -0
- package/package.json +2 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Button } from "./button.mjs";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { cn } from "cn";
|
|
6
|
+
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
7
|
+
//#region src/primitives/code-block.tsx
|
|
8
|
+
const codeBlockVariants = cva("group/code-block relative flex w-full min-w-0 flex-col overflow-hidden rounded-lg text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 data-[size=sm]:text-xs", {
|
|
9
|
+
variants: { variant: {
|
|
10
|
+
default: "border border-input text-foreground has-[>[data-slot=code-block-content]:focus-visible]:border-ring dark:bg-input/30",
|
|
11
|
+
destructive: "border border-destructive/30 text-destructive dark:border-destructive/40"
|
|
12
|
+
} },
|
|
13
|
+
defaultVariants: { variant: "default" }
|
|
14
|
+
});
|
|
15
|
+
function CodeBlock({ className, variant = "default", size = "default", ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx("div", {
|
|
17
|
+
"data-slot": "code-block",
|
|
18
|
+
"data-variant": variant,
|
|
19
|
+
"data-size": size,
|
|
20
|
+
className: cn(codeBlockVariants({ variant }), className),
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function CodeBlockHeader({ className, ...props }) {
|
|
25
|
+
return /* @__PURE__ */ jsx("div", {
|
|
26
|
+
"data-slot": "code-block-header",
|
|
27
|
+
className: cn("flex min-w-0 shrink-0 items-center gap-2 px-3 pt-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pt-2.5 group-data-[variant=destructive]/code-block:text-destructive *:has-[>[data-slot=code-block-title]]:min-w-0", className),
|
|
28
|
+
...props
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function CodeBlockTitle({ className, ...props }) {
|
|
32
|
+
return /* @__PURE__ */ jsx("div", {
|
|
33
|
+
"data-slot": "code-block-title",
|
|
34
|
+
className: cn("min-w-0 truncate font-sans text-sm font-medium text-foreground group-data-[size=sm]/code-block:text-xs group-data-[variant=destructive]/code-block:text-destructive [&_svg]:pointer-events-none [&_svg]:inline-block [&_svg]:align-middle [&_svg:not([class*='size-'])]:size-3.5 *:[svg]:me-1.5", className),
|
|
35
|
+
...props
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function CodeBlockActions({ className, ...props }) {
|
|
39
|
+
return /* @__PURE__ */ jsx("div", {
|
|
40
|
+
"data-slot": "code-block-actions",
|
|
41
|
+
className: cn("-my-1 ms-auto -me-1.5 flex shrink-0 items-center gap-1 [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 [[data-slot=code-block]>&]:pointer-coarse:opacity-100 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10", className),
|
|
42
|
+
...props
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function CodeBlockCopyButton({ value, variant = "ghost", size = "icon-xs", className, onClick, ...props }) {
|
|
46
|
+
const [copied, setCopied] = React.useState(false);
|
|
47
|
+
React.useEffect(() => {
|
|
48
|
+
if (!copied) return;
|
|
49
|
+
const timeout = setTimeout(() => setCopied(false), 2e3);
|
|
50
|
+
return () => clearTimeout(timeout);
|
|
51
|
+
}, [copied]);
|
|
52
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Button, {
|
|
53
|
+
"data-slot": "code-block-copy-button",
|
|
54
|
+
"data-copied": copied || void 0,
|
|
55
|
+
variant,
|
|
56
|
+
size,
|
|
57
|
+
"aria-label": copied ? "Copied" : "Copy",
|
|
58
|
+
className: cn(className),
|
|
59
|
+
onClick: (event) => {
|
|
60
|
+
onClick?.(event);
|
|
61
|
+
navigator.clipboard.writeText(value).then(() => setCopied(true)).catch(() => {});
|
|
62
|
+
},
|
|
63
|
+
...props,
|
|
64
|
+
children: copied ? /* @__PURE__ */ jsx(CheckIcon, {}) : /* @__PURE__ */ jsx(CopyIcon, {})
|
|
65
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
66
|
+
"aria-live": "polite",
|
|
67
|
+
className: "sr-only",
|
|
68
|
+
children: copied ? "Copied" : ""
|
|
69
|
+
})] });
|
|
70
|
+
}
|
|
71
|
+
function CodeBlockContent({ className, children, style, wrap = false, lineNumbers = false, startLine = 1, ...props }) {
|
|
72
|
+
return /* @__PURE__ */ jsx("pre", {
|
|
73
|
+
"data-slot": "code-block-content",
|
|
74
|
+
"data-wrap": wrap || void 0,
|
|
75
|
+
"data-numbered": lineNumbers || void 0,
|
|
76
|
+
dir: "ltr",
|
|
77
|
+
tabIndex: 0,
|
|
78
|
+
style: {
|
|
79
|
+
counterReset: `line ${startLine - 1}`,
|
|
80
|
+
...style
|
|
81
|
+
},
|
|
82
|
+
className: cn("min-h-0 min-w-0 scroll-fade-x scrollbar-thin overflow-auto px-3 py-3 text-start font-mono leading-relaxed outline-none group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:py-2.5 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5 data-wrap:scroll-fade-y data-wrap:wrap-break-word data-wrap:whitespace-pre-wrap", className),
|
|
83
|
+
...props,
|
|
84
|
+
children: /* @__PURE__ */ jsx("code", {
|
|
85
|
+
"data-slot": "code-block-code",
|
|
86
|
+
className: "grid min-h-lh min-w-max content-start in-data-numbered:grid-cols-[auto_1fr] in-data-wrap:min-w-0",
|
|
87
|
+
children: lineNumbers && typeof children === "string" ? children.replace(/\n$/, "").split("\n").map((line, index) => /* @__PURE__ */ jsx(CodeBlockLine, { children: line }, index)) : children
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
const codeBlockLineVariants = cva("relative -mx-3 block min-h-lh px-3 group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5 before:min-w-6 before:text-end before:text-muted-foreground after:absolute after:start-1 after:top-0 after:text-muted-foreground after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:gap-x-3 in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:before:select-none in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']", {
|
|
92
|
+
variants: { variant: {
|
|
93
|
+
default: "",
|
|
94
|
+
added: "bg-muted after:content-['+']",
|
|
95
|
+
removed: "bg-destructive/10 after:text-destructive after:content-['−']",
|
|
96
|
+
highlighted: "bg-muted"
|
|
97
|
+
} },
|
|
98
|
+
defaultVariants: { variant: "default" }
|
|
99
|
+
});
|
|
100
|
+
function CodeBlockLine({ className, variant = "default", children, ...props }) {
|
|
101
|
+
const empty = children === void 0 || children === null || children === "" || Array.isArray(children) && children.length === 0;
|
|
102
|
+
return /* @__PURE__ */ jsx("span", {
|
|
103
|
+
"data-slot": "code-block-line",
|
|
104
|
+
"data-variant": variant,
|
|
105
|
+
className: cn(codeBlockLineVariants({ variant }), className),
|
|
106
|
+
...props,
|
|
107
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
108
|
+
"data-slot": "code-block-line-content",
|
|
109
|
+
className: "min-w-0",
|
|
110
|
+
children: empty ? "\n" : children
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function CodeBlockFooter({ className, ...props }) {
|
|
115
|
+
return /* @__PURE__ */ jsx("div", {
|
|
116
|
+
"data-slot": "code-block-footer",
|
|
117
|
+
className: cn("flex min-w-0 shrink-0 items-center gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pb-2.5", className),
|
|
118
|
+
...props
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//#endregion
|
|
122
|
+
export { CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=code-block.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-block.mjs","names":[],"sources":["../../src/primitives/code-block.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nimport { Button } from \"@/primitives/button\"\nimport { CheckIcon, CopyIcon } from \"lucide-react\"\n\nconst codeBlockVariants = cva(\n \"group/code-block relative flex w-full min-w-0 flex-col overflow-hidden rounded-lg text-sm has-[>[data-slot=code-block-content]:focus-visible]:ring-3 has-[>[data-slot=code-block-content]:focus-visible]:ring-ring/50 data-[size=sm]:text-xs\",\n {\n variants: {\n variant: {\n default:\n \"border border-input text-foreground has-[>[data-slot=code-block-content]:focus-visible]:border-ring dark:bg-input/30\",\n destructive:\n \"border border-destructive/30 text-destructive dark:border-destructive/40\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction CodeBlock({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof codeBlockVariants> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"code-block\"\n data-variant={variant}\n data-size={size}\n className={cn(codeBlockVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction CodeBlockHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"code-block-header\"\n className={cn(\n \"flex min-w-0 shrink-0 items-center gap-2 px-3 pt-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pt-2.5 group-data-[variant=destructive]/code-block:text-destructive *:has-[>[data-slot=code-block-title]]:min-w-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CodeBlockTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"code-block-title\"\n className={cn(\n \"min-w-0 truncate font-sans text-sm font-medium text-foreground group-data-[size=sm]/code-block:text-xs group-data-[variant=destructive]/code-block:text-destructive [&_svg]:pointer-events-none [&_svg]:inline-block [&_svg]:align-middle [&_svg:not([class*='size-'])]:size-3.5 *:[svg]:me-1.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CodeBlockActions({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"code-block-actions\"\n className={cn(\n \"-my-1 ms-auto -me-1.5 flex shrink-0 items-center gap-1 [[data-slot=code-block]>&]:absolute [[data-slot=code-block]>&]:end-2 [[data-slot=code-block]>&]:top-2 [[data-slot=code-block]>&]:z-10 [[data-slot=code-block]>&]:m-0 [[data-slot=code-block]>&]:opacity-0 [[data-slot=code-block]>&]:transition-opacity [[data-slot=code-block]>&]:group-focus-within/code-block:opacity-100 [[data-slot=code-block]>&]:group-hover/code-block:opacity-100 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:end-1.5 group-data-[size=sm]/code-block:[[data-slot=code-block]>&]:top-1.5 [[data-slot=code-block]>&]:pointer-coarse:opacity-100 [[data-slot=code-block]>&]:*:[button]:bg-background [[data-slot=code-block]>&]:*:[button]:ring-1 [[data-slot=code-block]>&]:*:[button]:ring-foreground/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CodeBlockCopyButton({\n value,\n variant = \"ghost\",\n size = \"icon-xs\",\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button> & { value: string }) {\n const [copied, setCopied] = React.useState(false)\n\n React.useEffect(() => {\n if (!copied) {\n return\n }\n\n const timeout = setTimeout(() => setCopied(false), 2000)\n return () => clearTimeout(timeout)\n }, [copied])\n\n return (\n <>\n <Button\n data-slot=\"code-block-copy-button\"\n data-copied={copied || undefined}\n variant={variant}\n size={size}\n aria-label={copied ? \"Copied\" : \"Copy\"}\n className={cn(className)}\n onClick={(event) => {\n onClick?.(event)\n navigator.clipboard\n .writeText(value)\n .then(() => setCopied(true))\n .catch(() => {})\n }}\n {...props}\n >\n {copied ? (\n <CheckIcon\n />\n ) : (\n <CopyIcon\n />\n )}\n </Button>\n <span aria-live=\"polite\" className=\"sr-only\">\n {copied ? \"Copied\" : \"\"}\n </span>\n </>\n )\n}\n\nfunction CodeBlockContent({\n className,\n children,\n style,\n wrap = false,\n lineNumbers = false,\n startLine = 1,\n ...props\n}: React.ComponentProps<\"pre\"> & {\n wrap?: boolean\n lineNumbers?: boolean\n startLine?: number\n}) {\n return (\n <pre\n data-slot=\"code-block-content\"\n data-wrap={wrap || undefined}\n data-numbered={lineNumbers || undefined}\n dir=\"ltr\"\n tabIndex={0}\n style={{ counterReset: `line ${startLine - 1}`, ...style }}\n className={cn(\n \"min-h-0 min-w-0 scroll-fade-x scrollbar-thin overflow-auto px-3 py-3 text-start font-mono leading-relaxed outline-none group-has-data-[slot=code-block-footer]/code-block:pb-2 group-has-data-[slot=code-block-header]/code-block:pt-2 group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:py-2.5 group-data-[size=sm]/code-block:group-has-data-[slot=code-block-header]/code-block:pt-1.5 data-wrap:scroll-fade-y data-wrap:wrap-break-word data-wrap:whitespace-pre-wrap\",\n className\n )}\n {...props}\n >\n <code\n data-slot=\"code-block-code\"\n className=\"grid min-h-lh min-w-max content-start in-data-numbered:grid-cols-[auto_1fr] in-data-wrap:min-w-0\"\n >\n {lineNumbers && typeof children === \"string\"\n ? children\n .replace(/\\n$/, \"\")\n .split(\"\\n\")\n .map((line, index) => (\n <CodeBlockLine key={index}>{line}</CodeBlockLine>\n ))\n : children}\n </code>\n </pre>\n )\n}\n\nconst codeBlockLineVariants = cva(\n \"relative -mx-3 block min-h-lh px-3 group-data-[size=sm]/code-block:-mx-2.5 group-data-[size=sm]/code-block:px-2.5 before:min-w-6 before:text-end before:text-muted-foreground after:absolute after:start-1 after:top-0 after:text-muted-foreground after:select-none in-data-numbered:col-span-2 in-data-numbered:grid in-data-numbered:grid-cols-subgrid in-data-numbered:gap-x-3 in-data-numbered:[counter-increment:line] in-data-numbered:before:content-[counter(line)] in-data-numbered:before:select-none in-data-numbered:supports-[content:counter(line)_/_'']:before:content-[counter(line)_/_'']\",\n {\n variants: {\n variant: {\n default: \"\",\n added: \"bg-muted after:content-['+']\",\n removed: \"bg-destructive/10 after:text-destructive after:content-['−']\",\n highlighted: \"bg-muted\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction CodeBlockLine({\n className,\n variant = \"default\",\n children,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof codeBlockLineVariants>) {\n // An empty line holds a newline so copying a selection keeps blank lines.\n const empty =\n children === undefined ||\n children === null ||\n children === \"\" ||\n (Array.isArray(children) && children.length === 0)\n\n return (\n <span\n data-slot=\"code-block-line\"\n data-variant={variant}\n className={cn(codeBlockLineVariants({ variant }), className)}\n {...props}\n >\n <span data-slot=\"code-block-line-content\" className=\"min-w-0\">\n {empty ? \"\\n\" : children}\n </span>\n </span>\n )\n}\n\nfunction CodeBlockFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"code-block-footer\"\n className={cn(\n \"flex min-w-0 shrink-0 items-center gap-2 px-3 pb-3 text-muted-foreground group-data-[size=sm]/code-block:px-2.5 group-data-[size=sm]/code-block:pb-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n CodeBlock,\n CodeBlockHeader,\n CodeBlockTitle,\n CodeBlockActions,\n CodeBlockCopyButton,\n CodeBlockContent,\n CodeBlockLine,\n CodeBlockFooter,\n}\n"],"mappings":"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"}
|
package/dist/styles/index.css
CHANGED
|
@@ -267,6 +267,22 @@
|
|
|
267
267
|
--berget-shiki-token-parameter: var(--berget-brand-granite-50);
|
|
268
268
|
--berget-shiki-token-string-expression: var(--berget-brand-moss-300);
|
|
269
269
|
--berget-shiki-token-punctuation: var(--berget-brand-granite-50);
|
|
270
|
+
--berget-shiki-ansi-black: var(--berget-brand-granite-400);
|
|
271
|
+
--berget-shiki-ansi-red: var(--berget-brand-muscaria-400);
|
|
272
|
+
--berget-shiki-ansi-green: var(--berget-brand-moss-400);
|
|
273
|
+
--berget-shiki-ansi-yellow: var(--berget-brand-chanterelle-300);
|
|
274
|
+
--berget-shiki-ansi-blue: var(--berget-brand-fjord-400);
|
|
275
|
+
--berget-shiki-ansi-magenta: var(--berget-brand-muscaria-300);
|
|
276
|
+
--berget-shiki-ansi-cyan: var(--berget-brand-fjord-300);
|
|
277
|
+
--berget-shiki-ansi-white: var(--berget-brand-granite-50);
|
|
278
|
+
--berget-shiki-ansi-bright-black: var(--berget-brand-granite-500);
|
|
279
|
+
--berget-shiki-ansi-bright-red: var(--berget-brand-muscaria-300);
|
|
280
|
+
--berget-shiki-ansi-bright-green: var(--berget-brand-moss-300);
|
|
281
|
+
--berget-shiki-ansi-bright-yellow: var(--berget-brand-chanterelle-200);
|
|
282
|
+
--berget-shiki-ansi-bright-blue: var(--berget-brand-fjord-300);
|
|
283
|
+
--berget-shiki-ansi-bright-magenta: var(--berget-brand-muscaria-200);
|
|
284
|
+
--berget-shiki-ansi-bright-cyan: var(--berget-brand-fjord-200);
|
|
285
|
+
--berget-shiki-ansi-bright-white: var(--berget-brand-granite-50);
|
|
270
286
|
|
|
271
287
|
/* ── Badge component-scoped tokens ──────────────────────────────── */
|
|
272
288
|
/* Tinted status style: 15% brand tint bg with a same-hue accent fg.
|
|
@@ -636,6 +652,22 @@
|
|
|
636
652
|
--berget-shiki-token-parameter: var(--berget-brand-granite-900);
|
|
637
653
|
--berget-shiki-token-string-expression: var(--berget-brand-moss-500);
|
|
638
654
|
--berget-shiki-token-punctuation: var(--berget-brand-granite-900);
|
|
655
|
+
--berget-shiki-ansi-black: var(--berget-brand-granite-800);
|
|
656
|
+
--berget-shiki-ansi-red: var(--berget-brand-muscaria-600);
|
|
657
|
+
--berget-shiki-ansi-green: var(--berget-brand-moss-600);
|
|
658
|
+
--berget-shiki-ansi-yellow: var(--berget-brand-chanterelle-400);
|
|
659
|
+
--berget-shiki-ansi-blue: var(--berget-brand-fjord-600);
|
|
660
|
+
--berget-shiki-ansi-magenta: var(--berget-brand-muscaria-500);
|
|
661
|
+
--berget-shiki-ansi-cyan: var(--berget-brand-fjord-500);
|
|
662
|
+
--berget-shiki-ansi-white: var(--berget-brand-granite-600);
|
|
663
|
+
--berget-shiki-ansi-bright-black: var(--berget-brand-granite-700);
|
|
664
|
+
--berget-shiki-ansi-bright-red: var(--berget-brand-muscaria-500);
|
|
665
|
+
--berget-shiki-ansi-bright-green: var(--berget-brand-moss-500);
|
|
666
|
+
--berget-shiki-ansi-bright-yellow: var(--berget-brand-chanterelle-300);
|
|
667
|
+
--berget-shiki-ansi-bright-blue: var(--berget-brand-fjord-500);
|
|
668
|
+
--berget-shiki-ansi-bright-magenta: var(--berget-brand-muscaria-400);
|
|
669
|
+
--berget-shiki-ansi-bright-cyan: var(--berget-brand-fjord-400);
|
|
670
|
+
--berget-shiki-ansi-bright-white: var(--berget-brand-granite-600);
|
|
639
671
|
|
|
640
672
|
/* ── Badge component-scoped tokens (light) ──────────────────────── */
|
|
641
673
|
--berget-badge-default-bg: color-mix(in oklch, var(--berget-brand-moss-400) 15%, transparent);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bergetai/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Berget Design System - Scandinavian-inspired design system with console aesthetic",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"clsx": "^2.1.1",
|
|
53
53
|
"cmdk": "^1.1.1",
|
|
54
54
|
"cn": "^0.2.4",
|
|
55
|
+
"shadcn": "^4.22.1",
|
|
55
56
|
"tailwind-merge": "^3.5.0"
|
|
56
57
|
},
|
|
57
58
|
"peerDependencies": {
|