@nadicodeai/ui 2.1.0 → 3.1.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/agent-visual.js +1 -1
- package/dist/components/brand-field.d.ts +4 -4
- package/dist/components/brand-field.js +5 -5
- package/dist/components/button.js +2 -2
- package/dist/internal/agent-visual/color.d.ts +1 -1
- package/dist/internal/agent-visual/color.d.ts.map +1 -1
- package/dist/internal/agent-visual/color.js +1 -1
- package/dist/internal/agent-visual/poster.d.ts.map +1 -1
- package/dist/internal/agent-visual/poster.js +6 -6
- package/dist/internal/agent-visual/recipes.d.ts +3 -3
- package/dist/internal/agent-visual/recipes.d.ts.map +1 -1
- package/dist/internal/agent-visual/recipes.js +2 -2
- package/dist/internal/agent-visual/renderer.d.ts.map +1 -1
- package/dist/internal/agent-visual/renderer.js +4 -4
- package/docs/agent-visual.md +4 -2
- package/package.json +2 -2
|
@@ -58,6 +58,6 @@ function AgentVisual({ className, decorative = true, label, presentation = "card
|
|
|
58
58
|
return () => observer.disconnect();
|
|
59
59
|
}, []);
|
|
60
60
|
const hasAmbientRenderer = canAnimate && isInViewport;
|
|
61
|
-
return (_jsxs("div", { "aria-hidden": decorative || undefined, "aria-label": decorative ? undefined : label, className: cn("relative isolate size-full overflow-hidden rounded-xl bg-nc-
|
|
61
|
+
return (_jsxs("div", { "aria-hidden": decorative || undefined, "aria-label": decorative ? undefined : label, className: cn("relative isolate size-full overflow-hidden rounded-xl bg-nc-identity-ink", presentation === "card" && "min-h-20", presentation === "detail" && "min-h-48", className), "data-agent-visual-motion": hasAmbientRenderer ? "ambient" : "static", "data-agent-visual-presentation": presentation, "data-agent-visual-recipe": recipe, ref: hostRef, role: decorative ? undefined : "img", children: [_jsx(AgentVisualPoster, { recipe: recipe }), hasAmbientRenderer && hostRef.current ? (_jsx("div", { "aria-hidden": "true", className: cn("absolute inset-0 opacity-0 transition-opacity duration-[var(--nc-duration-close)] ease-[var(--nc-ease-out-strong)]", rendererReady && "opacity-100"), "data-agent-visual-renderer": "paper-metaballs", children: _jsx(AgentVisualErrorBoundary, { onUnavailable: handleUnavailable, children: _jsx(Suspense, { fallback: null, children: _jsx(LazyAgentVisualRenderer, { host: hostRef.current, onReady: handleReady, onUnavailable: handleUnavailable, recipe: recipe }) }) }) })) : null] }));
|
|
62
62
|
}
|
|
63
63
|
export { AgentVisual };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
/**
|
|
3
|
-
* BrandField is the fixed
|
|
3
|
+
* BrandField is the fixed white-on-ink identity plane for composition.
|
|
4
4
|
*
|
|
5
|
-
* It deliberately owns no interaction, state, or color variant:
|
|
6
|
-
*
|
|
7
|
-
* the canonical black-and-white paint remains internal to the primitive.
|
|
5
|
+
* It deliberately owns no interaction, state, or color variant: an identity
|
|
6
|
+
* plane is a plane, not a control. Callers may add structural layout classes,
|
|
7
|
+
* while the canonical black-and-white paint remains internal to the primitive.
|
|
8
8
|
*/
|
|
9
9
|
declare function BrandField({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
10
10
|
export { BrandField };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
/**
|
|
4
|
-
* BrandField is the fixed
|
|
4
|
+
* BrandField is the fixed white-on-ink identity plane for composition.
|
|
5
5
|
*
|
|
6
|
-
* It deliberately owns no interaction, state, or color variant:
|
|
7
|
-
*
|
|
8
|
-
* the canonical black-and-white paint remains internal to the primitive.
|
|
6
|
+
* It deliberately owns no interaction, state, or color variant: an identity
|
|
7
|
+
* plane is a plane, not a control. Callers may add structural layout classes,
|
|
8
|
+
* while the canonical black-and-white paint remains internal to the primitive.
|
|
9
9
|
*/
|
|
10
10
|
function BrandField({ className, ...props }) {
|
|
11
|
-
return (_jsx("div", { "data-slot": "brand-field", className: cn(className, "bg-nc-
|
|
11
|
+
return (_jsx("div", { "data-slot": "brand-field", className: cn(className, "bg-nc-identity-ink text-nc-identity-white"), ...props }));
|
|
12
12
|
}
|
|
13
13
|
export { BrandField };
|
|
@@ -9,8 +9,8 @@ const buttonVariants = cva("group/button inline-flex min-h-touch-target min-w-to
|
|
|
9
9
|
outline: "border-input bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
10
10
|
secondary: "bg-secondary text-secondary-foreground hover:bg-accent aria-expanded:bg-accent aria-expanded:text-accent-foreground",
|
|
11
11
|
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
12
|
-
brandGhost: "text-nc-
|
|
13
|
-
brandSolid: "bg-nc-
|
|
12
|
+
brandGhost: "text-nc-identity-white hover:bg-nc-identity-white/10 hover:text-nc-identity-white aria-expanded:bg-nc-identity-white/10 aria-expanded:text-nc-identity-white",
|
|
13
|
+
brandSolid: "bg-nc-identity-white text-nc-identity-ink hover:bg-nc-identity-white/90 hover:text-nc-identity-ink active:bg-nc-identity-white/80 active:text-nc-identity-ink",
|
|
14
14
|
destructive: "bg-[var(--nc-error-soft)] text-[var(--nc-error-deep)] hover:border-[var(--nc-error-deep)]",
|
|
15
15
|
link: "text-primary underline-offset-4 hover:underline",
|
|
16
16
|
onPrimary: "bg-primary-foreground text-primary hover:bg-primary-foreground/90",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
type ShaderColor = [number, number, number, number];
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function resolveIdentityColor(element: Element, variable: string): ShaderColor | null;
|
|
3
3
|
export {};
|
|
4
4
|
//# sourceMappingURL=color.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/color.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AA4EpD,wBAAgB,
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/color.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AA4EpD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAG3F"}
|
|
@@ -66,7 +66,7 @@ function parseLab(value) {
|
|
|
66
66
|
clamp(alpha),
|
|
67
67
|
];
|
|
68
68
|
}
|
|
69
|
-
export function
|
|
69
|
+
export function resolveIdentityColor(element, variable) {
|
|
70
70
|
const value = getComputedStyle(element).getPropertyValue(variable).trim();
|
|
71
71
|
return parseOklch(value) ?? parseLab(value);
|
|
72
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poster.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/poster.tsx"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"poster.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/poster.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAiHhG,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,MAAM,GACP,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,+BA0CA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useId } from "react";
|
|
3
3
|
import { cn } from "../../lib/utils.js";
|
|
4
|
-
import { AGENT_VISUAL_RECIPE_SPECS,
|
|
4
|
+
import { AGENT_VISUAL_RECIPE_SPECS, identityVariable } from "./recipes.js";
|
|
5
5
|
function Gradient({ id, recipe }) {
|
|
6
6
|
const colors = AGENT_VISUAL_RECIPE_SPECS[recipe].colors;
|
|
7
|
-
return (_jsx("linearGradient", { id: id, x1: "0", x2: "1", y1: "0", y2: "1", children: colors.map((color, index) => (_jsx("stop", { offset: `${(index / Math.max(colors.length - 1, 1)) * 100}%`, stopColor: `var(${
|
|
7
|
+
return (_jsx("linearGradient", { id: id, x1: "0", x2: "1", y1: "0", y2: "1", children: colors.map((color, index) => (_jsx("stop", { offset: `${(index / Math.max(colors.length - 1, 1)) * 100}%`, stopColor: `var(${identityVariable(color)})` }, color))) }));
|
|
8
8
|
}
|
|
9
9
|
function Surface({ clipId, gradientId, patternId, recipe, }) {
|
|
10
10
|
const { colors, material } = AGENT_VISUAL_RECIPE_SPECS[recipe];
|
|
@@ -12,17 +12,17 @@ function Surface({ clipId, gradientId, patternId, recipe, }) {
|
|
|
12
12
|
return (_jsx("rect", { width: "160", height: "120", fill: `url(#${gradientId})`, clipPath: `url(#${clipId})` }));
|
|
13
13
|
}
|
|
14
14
|
if (material === "points") {
|
|
15
|
-
return (_jsx("g", { clipPath: `url(#${clipId})`, children: colors.map((color, index) => (_jsx("g", { transform: `translate(${index * 3} ${index * 2})`, children: Array.from({ length: 8 }, (_, row) => Array.from({ length: 11 }, (__, column) => (_jsx("circle", { cx: column * 16, cy: row * 16, fill: `var(${
|
|
15
|
+
return (_jsx("g", { clipPath: `url(#${clipId})`, children: colors.map((color, index) => (_jsx("g", { transform: `translate(${index * 3} ${index * 2})`, children: Array.from({ length: 8 }, (_, row) => Array.from({ length: 11 }, (__, column) => (_jsx("circle", { cx: column * 16, cy: row * 16, fill: `var(${identityVariable(color)})`, r: 1.45 + ((row + column + index) % 3) * 0.35 }, `${row}-${column}`)))) }, color))) }));
|
|
16
16
|
}
|
|
17
17
|
if (material === "wire") {
|
|
18
|
-
return (_jsxs("g", { clipPath: `url(#${clipId})`, fill: "none", children: [Array.from({ length: 14 }, (_, index) => (_jsx("path", { d: `M ${-28 + index * 14} 0 L ${42 + index * 14} 120`, stroke: `var(${
|
|
18
|
+
return (_jsxs("g", { clipPath: `url(#${clipId})`, fill: "none", children: [Array.from({ length: 14 }, (_, index) => (_jsx("path", { d: `M ${-28 + index * 14} 0 L ${42 + index * 14} 120`, stroke: `var(${identityVariable(colors[index % colors.length])})`, strokeWidth: "1" }, `wire-a-${index}`))), Array.from({ length: 14 }, (_, index) => (_jsx("path", { d: `M ${-28 + index * 14} 120 L ${42 + index * 14} 0`, stroke: `var(${identityVariable(colors[(index + 1) % colors.length])})`, strokeWidth: "1" }, `wire-b-${index}`))), Array.from({ length: 9 }, (_, index) => (_jsx("path", { d: `M 0 ${index * 15} H 160`, stroke: `var(${identityVariable(colors[(index + 2) % colors.length])})`, strokeWidth: "0.8" }, `wire-c-${index}`)))] }));
|
|
19
19
|
}
|
|
20
20
|
return (_jsxs("g", { clipPath: `url(#${clipId})`, children: [_jsx("rect", { width: "160", height: "120", fill: `url(#${patternId})` }), Array.from({ length: 46 }, (_, index) => {
|
|
21
21
|
const color = colors[index % colors.length];
|
|
22
22
|
const x = 20 + ((index * 37) % 125);
|
|
23
23
|
const y = 12 + ((index * 53) % 98);
|
|
24
24
|
const radius = 0.8 + ((index * 7) % 8) * 0.28;
|
|
25
|
-
return (_jsx("circle", { cx: x, cy: y, fill: `var(${
|
|
25
|
+
return (_jsx("circle", { cx: x, cy: y, fill: `var(${identityVariable(color)})`, opacity: 0.48 + (index % 5) * 0.12, r: radius }, `particle-${index}`));
|
|
26
26
|
})] }));
|
|
27
27
|
}
|
|
28
28
|
export function AgentVisualPoster({ className, recipe, }) {
|
|
@@ -31,5 +31,5 @@ export function AgentVisualPoster({ className, recipe, }) {
|
|
|
31
31
|
const gradientId = `${id}-gradient`;
|
|
32
32
|
const patternId = `${id}-particles`;
|
|
33
33
|
const colors = AGENT_VISUAL_RECIPE_SPECS[recipe].colors;
|
|
34
|
-
return (_jsxs("svg", { "aria-hidden": "true", className: cn("size-full", className), "data-agent-visual-poster": "true", focusable: "false", preserveAspectRatio: "xMidYMid meet", viewBox: "0 0 160 120", children: [_jsxs("defs", { children: [_jsx("clipPath", { id: clipId, children: AGENT_VISUAL_RECIPE_SPECS[recipe].posterForm.map(([cx, cy, radius], index) => (_jsx("circle", { cx: cx, cy: cy, r: radius }, index))) }), _jsx(Gradient, { id: gradientId, recipe: recipe }), _jsxs("pattern", { id: patternId, width: "14", height: "14", patternUnits: "userSpaceOnUse", children: [_jsx("circle", { cx: "2", cy: "3", r: "1.1", fill: `var(${
|
|
34
|
+
return (_jsxs("svg", { "aria-hidden": "true", className: cn("size-full", className), "data-agent-visual-poster": "true", focusable: "false", preserveAspectRatio: "xMidYMid meet", viewBox: "0 0 160 120", children: [_jsxs("defs", { children: [_jsx("clipPath", { id: clipId, children: AGENT_VISUAL_RECIPE_SPECS[recipe].posterForm.map(([cx, cy, radius], index) => (_jsx("circle", { cx: cx, cy: cy, r: radius }, index))) }), _jsx(Gradient, { id: gradientId, recipe: recipe }), _jsxs("pattern", { id: patternId, width: "14", height: "14", patternUnits: "userSpaceOnUse", children: [_jsx("circle", { cx: "2", cy: "3", r: "1.1", fill: `var(${identityVariable(colors[0])})` }), _jsx("circle", { cx: "10", cy: "8", r: "2.1", fill: `var(${identityVariable(colors[1] ?? colors[0])})` }), _jsx("circle", { cx: "5", cy: "12", r: "0.7", fill: `var(${identityVariable(colors[2] ?? colors[0])})` })] })] }), _jsx(Surface, { clipId: clipId, gradientId: gradientId, patternId: patternId, recipe: recipe })] }));
|
|
35
35
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export type AgentVisualRecipe = "general" | "reasoning" | "coordination" | "communication" | "execution";
|
|
2
2
|
export type AgentVisualMaterial = "solid" | "points" | "wire" | "particles";
|
|
3
|
-
type
|
|
3
|
+
type IdentityColor = "arancio" | "cobalto" | "giallo" | "ink" | "rosso" | "verde";
|
|
4
4
|
export type AgentVisualRecipeSpec = {
|
|
5
|
-
colors: readonly
|
|
5
|
+
colors: readonly IdentityColor[];
|
|
6
6
|
count: number;
|
|
7
7
|
frame: number;
|
|
8
8
|
material: AgentVisualMaterial;
|
|
@@ -10,6 +10,6 @@ export type AgentVisualRecipeSpec = {
|
|
|
10
10
|
size: number;
|
|
11
11
|
};
|
|
12
12
|
export declare const AGENT_VISUAL_RECIPE_SPECS: Record<AgentVisualRecipe, AgentVisualRecipeSpec>;
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function identityVariable(color: IdentityColor): string;
|
|
14
14
|
export {};
|
|
15
15
|
//# sourceMappingURL=recipes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/recipes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,WAAW,GACX,cAAc,GACd,eAAe,GACf,WAAW,CAAC;AAEhB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE5E,KAAK,
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/recipes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,WAAW,GACX,cAAc,GACd,eAAe,GACf,WAAW,CAAC;AAEhB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE5E,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAElF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAoEtF,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,UAEpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/renderer.tsx"],"names":[],"mappings":"AAYA,OAAO,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/internal/agent-visual/renderer.tsx"],"names":[],"mappings":"AAYA,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAUhG,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,IAAI,EACJ,OAAO,EACP,aAAa,EACb,MAAM,GACP,EAAE,wBAAwB,+BA8G1B"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { defaultObjectSizing, getShaderNoiseTexture, metaballsFragmentShader, ShaderFitOptions, ShaderMount as PaperShaderMount, } from "@paper-design/shaders";
|
|
4
4
|
import { useEffect, useRef } from "react";
|
|
5
|
-
import {
|
|
6
|
-
import { AGENT_VISUAL_RECIPE_SPECS,
|
|
5
|
+
import { resolveIdentityColor } from "./color.js";
|
|
6
|
+
import { AGENT_VISUAL_RECIPE_SPECS, identityVariable } from "./recipes.js";
|
|
7
7
|
import { AGENT_VISUAL_SHADER } from "./shader.js";
|
|
8
8
|
const MATERIAL_INDEX = {
|
|
9
9
|
particles: 3,
|
|
@@ -19,8 +19,8 @@ export default function AgentVisualRenderer({ host, onReady, onUnavailable, reci
|
|
|
19
19
|
return;
|
|
20
20
|
const spec = AGENT_VISUAL_RECIPE_SPECS[recipe];
|
|
21
21
|
const isSolid = spec.material === "solid";
|
|
22
|
-
const colors = spec.colors.map((color) =>
|
|
23
|
-
const colorBack =
|
|
22
|
+
const colors = spec.colors.map((color) => resolveIdentityColor(host, identityVariable(color)));
|
|
23
|
+
const colorBack = resolveIdentityColor(host, identityVariable("ink"));
|
|
24
24
|
const hasPalette = colors.every((color) => color !== null) && colorBack !== null;
|
|
25
25
|
if (!hasPalette) {
|
|
26
26
|
onUnavailable();
|
package/docs/agent-visual.md
CHANGED
|
@@ -13,8 +13,10 @@ role-specific Agents that a company operates inside Nadia.
|
|
|
13
13
|
## Approved form
|
|
14
14
|
|
|
15
15
|
- One connected metaball entity sits on a true-black field.
|
|
16
|
-
- The entity is always multicolour and
|
|
17
|
-
Cobalto, Verde, Arancio, Giallo, and Rosso.
|
|
16
|
+
- The entity is always multicolour and draws its five hues from the Agent
|
|
17
|
+
identity palette: Cobalto, Verde, Arancio, Giallo, and Rosso. That palette
|
|
18
|
+
is owned by `packages/design-system/DESIGN.md`, which holds the token names
|
|
19
|
+
and values; this document holds the recipes that arrange them.
|
|
18
20
|
- The entity itself carries the surface. Texture never paints the background.
|
|
19
21
|
- The four approved surfaces are solid, ordered points, borderless triangular
|
|
20
22
|
wire, and irregular living particles.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadicodeai/ui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"@assistant-ui/react": "0.15.1",
|
|
64
64
|
"@assistant-ui/react-markdown": "0.14.8",
|
|
65
65
|
"@base-ui/react": "^1.6.0",
|
|
66
|
-
"@nadicodeai/design-system": "
|
|
66
|
+
"@nadicodeai/design-system": "3.1.0",
|
|
67
67
|
"@paper-design/shaders": "0.0.78",
|
|
68
68
|
"class-variance-authority": "^0.7.1",
|
|
69
69
|
"clsx": "^2.1.1",
|