@actioneer/ads 1.0.7 → 1.0.9
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/DESIGN.md +119 -91
- package/README.md +19 -1
- package/components/ai-elements/chart.js +20 -20
- package/components/ai-elements/inline-citation.js +50 -50
- package/components/ai-elements/message.js +1 -1
- package/components/ai-elements/tool.js +5 -5
- package/components/alert.d.ts +3 -2
- package/components/alert.js +25 -25
- package/components/answer.js +1 -1
- package/components/assistant-ui/action-bar.js +1 -1
- package/components/assistant-ui/attachment.js +68 -49
- package/components/assistant-ui/composer-add-context.js +1 -1
- package/components/assistant-ui/composer-harness.js +5 -4
- package/components/assistant-ui/composer-trigger-popover.js +1 -1
- package/components/assistant-ui/composer.js +13 -13
- package/components/assistant-ui/message-timing.js +6 -6
- package/components/assistant-ui/selection-toolbar.js +5 -5
- package/components/assistant-ui/sources.js +15 -15
- package/components/assistant-ui/tooltip-icon-button.js +18 -14
- package/components/audio-waveform.d.ts +21 -8
- package/components/audio-waveform.js +371 -94
- package/components/autocomplete.js +9 -9
- package/components/breadcrumbs.js +36 -42
- package/components/button.d.ts +16 -1
- package/components/button.js +86 -73
- package/components/card.js +1 -1
- package/components/chart.d.ts +31 -4
- package/components/chart.js +900 -666
- package/components/chip.d.ts +2 -1
- package/components/chip.js +56 -51
- package/components/command-palette.js +12 -12
- package/components/connector-card.d.ts +1 -2
- package/components/connector-card.js +17 -17
- package/components/date-range-picker.js +1 -2
- package/components/drawer.js +9 -10
- package/components/dropdown.js +1 -1
- package/components/empty-state.d.ts +2 -0
- package/components/empty-state.js +17 -15
- package/components/field.js +9 -10
- package/components/file-dropzone.d.ts +6 -3
- package/components/file-dropzone.js +72 -60
- package/components/filters.d.ts +37 -0
- package/components/filters.js +129 -0
- package/components/index.d.ts +1 -0
- package/components/index.js +447 -444
- package/components/infinite-canvas.js +9 -9
- package/components/modal.d.ts +2 -1
- package/components/modal.js +102 -91
- package/components/page-body.js +8 -8
- package/components/popover.d.ts +6 -1
- package/components/popover.js +75 -65
- package/components/progress-circle.d.ts +1 -1
- package/components/progress-circle.js +57 -48
- package/components/segmented.d.ts +1 -0
- package/components/segmented.js +34 -36
- package/components/select.js +2 -2
- package/components/selection-action-bar.js +32 -31
- package/components/setting-row.js +10 -10
- package/components/sidebar.d.ts +15 -0
- package/components/sidebar.js +186 -149
- package/components/slider.js +5 -5
- package/components/stepper.d.ts +1 -1
- package/components/stepper.js +1 -1
- package/components/switch.js +10 -10
- package/components/table.d.ts +10 -2
- package/components/table.js +380 -366
- package/components/tabs.d.ts +6 -1
- package/components/tabs.js +32 -29
- package/components/timeline.js +3 -3
- package/components/toast.js +53 -56
- package/components/ui/button.js +4 -4
- package/components/ui/dialog.js +1 -1
- package/components/viz-charts.js +263 -221
- package/demo/components/add-to-artifact.js +3 -2
- package/examples/README.md +31 -0
- package/examples/agents-screen.tsx +477 -0
- package/examples/campaign-analysis-screen.tsx +138 -0
- package/examples/campaigns-screen.tsx +439 -0
- package/examples/settings-screen.tsx +90 -0
- package/examples/workspace-header.tsx +71 -0
- package/lib/icons.d.ts +8 -0
- package/lib/icons.js +171 -118
- package/llms.txt +93 -29
- package/manifest.json +1660 -113
- package/package.json +1 -1
- package/styles.css +55 -68
- package/theme.css +50 -59
package/components/chip.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
declare const chipVariants: (props?: ({
|
|
4
|
-
variant?: "outline" | "solid" | null | undefined;
|
|
4
|
+
variant?: "outline" | "solid" | "plain" | null | undefined;
|
|
5
5
|
color?: "success" | "warning" | "danger" | "info" | "default" | "primary" | null | undefined;
|
|
6
6
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
7
7
|
export type ChipInteraction = "actionable" | "non-actionable";
|
|
@@ -19,6 +19,7 @@ export interface ChipProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "
|
|
|
19
19
|
onClose?: () => void;
|
|
20
20
|
startContent?: React.ReactNode;
|
|
21
21
|
avatar?: React.ReactNode;
|
|
22
|
+
/** Leading square tone dot. Always on for `variant="plain"`. */
|
|
22
23
|
showDot?: boolean;
|
|
23
24
|
}
|
|
24
25
|
export declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLSpanElement>>;
|
package/components/chip.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
3
|
-
import * as
|
|
4
|
-
import { cva as
|
|
5
|
-
import { Close as
|
|
2
|
+
import { jsxs as v, Fragment as h, jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import * as N from "react";
|
|
4
|
+
import { cva as w } from "class-variance-authority";
|
|
5
|
+
import { Close as y } from "../lib/icons.js";
|
|
6
6
|
import { cn as i } from "../lib/cn.js";
|
|
7
|
-
const k =
|
|
7
|
+
const k = w(
|
|
8
8
|
"inline-flex h-6 items-center gap-1 whitespace-nowrap rounded-[4px] border px-2 py-0 text-s font-medium leading-[var(--text-s--line-height)]",
|
|
9
9
|
{
|
|
10
10
|
variants: {
|
|
11
11
|
variant: {
|
|
12
12
|
solid: "",
|
|
13
|
-
outline: ""
|
|
13
|
+
outline: "",
|
|
14
|
+
// Status text for table cells and detail panels: no container, an 8px
|
|
15
|
+
// tone dot, and a 14px Regular primary label. The dot carries the tone.
|
|
16
|
+
plain: "h-auto gap-2 rounded-none border-0 bg-transparent px-0 text-m font-normal leading-[var(--text-m--line-height)] text-on-white-primary"
|
|
14
17
|
},
|
|
15
18
|
color: {
|
|
16
19
|
default: "",
|
|
@@ -23,15 +26,15 @@ const k = N(
|
|
|
23
26
|
},
|
|
24
27
|
compoundVariants: [
|
|
25
28
|
// solid — the default tinted surface
|
|
26
|
-
{ variant: "solid", color: "default", className: "border-
|
|
27
|
-
{ variant: "solid", color: "primary", className: "border-
|
|
28
|
-
{ variant: "solid", color: "success", className: "border-success-
|
|
29
|
+
{ variant: "solid", color: "default", className: "border-wg4 bg-wg2 text-muted-foreground" },
|
|
30
|
+
{ variant: "solid", color: "primary", className: "border-t6 bg-action-primary-soft text-brand-text" },
|
|
31
|
+
{ variant: "solid", color: "success", className: "border-success-300 bg-success-50 text-success-700" },
|
|
29
32
|
{ variant: "solid", color: "warning", className: "border-warning-300 bg-warning-50 text-warning-700" },
|
|
30
33
|
{ variant: "solid", color: "danger", className: "border-danger-300 bg-danger-50 text-danger-700" },
|
|
31
34
|
{ variant: "solid", color: "info", className: "border-info-300 bg-info-50 text-info-700" },
|
|
32
35
|
// outline
|
|
33
|
-
{ variant: "outline", color: "default", className: "border-border
|
|
34
|
-
{ variant: "outline", color: "primary", className: "border-
|
|
36
|
+
{ variant: "outline", color: "default", className: "border-border bg-card text-foreground" },
|
|
37
|
+
{ variant: "outline", color: "primary", className: "border-t7 bg-card text-brand-text" },
|
|
35
38
|
{ variant: "outline", color: "success", className: "border-success-400 bg-success-50 text-success-700" },
|
|
36
39
|
{ variant: "outline", color: "warning", className: "border-warning-400 bg-warning-50 text-warning-700" },
|
|
37
40
|
{ variant: "outline", color: "danger", className: "border-danger-400 bg-danger-50 text-danger-700" },
|
|
@@ -46,74 +49,76 @@ const k = N(
|
|
|
46
49
|
warning: "bg-warning",
|
|
47
50
|
danger: "bg-danger",
|
|
48
51
|
info: "bg-info"
|
|
49
|
-
}, j =
|
|
52
|
+
}, j = N.forwardRef(
|
|
50
53
|
({
|
|
51
|
-
className:
|
|
52
|
-
variant:
|
|
53
|
-
color:
|
|
54
|
+
className: u,
|
|
55
|
+
variant: a = "solid",
|
|
56
|
+
color: o = "default",
|
|
54
57
|
interaction: m,
|
|
55
58
|
isPressable: f = !1,
|
|
56
|
-
onClose:
|
|
57
|
-
startContent:
|
|
58
|
-
avatar:
|
|
59
|
+
onClose: r,
|
|
60
|
+
startContent: s,
|
|
61
|
+
avatar: n,
|
|
59
62
|
showDot: p = !1,
|
|
60
|
-
children:
|
|
61
|
-
...
|
|
62
|
-
},
|
|
63
|
-
const
|
|
64
|
-
k({ variant:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
), b = /* @__PURE__ */
|
|
70
|
-
|
|
71
|
-
p && /* @__PURE__ */
|
|
63
|
+
children: x,
|
|
64
|
+
...c
|
|
65
|
+
}, l) => {
|
|
66
|
+
const t = r ? "actionable" : m ?? (f ? "actionable" : "non-actionable"), d = t === "actionable" && !r, g = i(
|
|
67
|
+
k({ variant: a, color: o }),
|
|
68
|
+
n && "pl-1",
|
|
69
|
+
r && "pr-1",
|
|
70
|
+
d && "cursor-pointer select-none outline-none transition-[background,border,color,box-shadow,transform] duration-150 ease-out data-[interaction=actionable]:border-action-primary data-[interaction=actionable]:bg-card data-[interaction=actionable]:text-action-primary-text hover:-translate-y-px hover:bg-action-primary-soft active:translate-y-0 active:scale-[0.97] active:bg-action-primary-soft aria-pressed:border-brand! aria-pressed:bg-action-primary-soft! aria-pressed:text-brand-text! focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background motion-reduce:transition-none motion-reduce:hover:translate-y-0 motion-reduce:active:scale-100",
|
|
71
|
+
u
|
|
72
|
+
), b = /* @__PURE__ */ v(h, { children: [
|
|
73
|
+
n && /* @__PURE__ */ e("span", { className: "-ml-0.5 inline-flex shrink-0", children: n }),
|
|
74
|
+
(p || a === "plain") && /* @__PURE__ */ e(
|
|
72
75
|
"span",
|
|
73
76
|
{
|
|
74
77
|
"aria-hidden": !0,
|
|
75
78
|
className: i(
|
|
76
|
-
"size-1.5",
|
|
79
|
+
a === "plain" ? "size-2 shrink-0" : "size-1.5",
|
|
77
80
|
"rounded-dot",
|
|
78
|
-
z[
|
|
81
|
+
z[o ?? "default"]
|
|
79
82
|
)
|
|
80
83
|
}
|
|
81
84
|
),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
s && /* @__PURE__ */ e("span", { className: "inline-flex shrink-0 [&_svg]:size-3.5", children: s }),
|
|
86
|
+
x,
|
|
87
|
+
r && /* @__PURE__ */ e(
|
|
85
88
|
"button",
|
|
86
89
|
{
|
|
87
90
|
type: "button",
|
|
88
91
|
"aria-label": "Remove",
|
|
89
|
-
onClick:
|
|
92
|
+
onClick: r,
|
|
90
93
|
className: i(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"
|
|
94
|
-
"[
|
|
94
|
+
// A 16px container tinted from the chip's own ink so the remove
|
|
95
|
+
// control reads as a button: 10% at rest, 20% on hover/press.
|
|
96
|
+
"inline-flex size-4 shrink-0 items-center justify-center rounded-xs",
|
|
97
|
+
"bg-current/10 transition-[background-color,transform] duration-150 ease-out hover:bg-current/20 active:scale-[0.97] active:bg-current/20",
|
|
98
|
+
"outline-none focus-visible:ring-3 focus-visible:ring-ring motion-reduce:transition-none",
|
|
99
|
+
"[&_svg]:size-2.5"
|
|
95
100
|
),
|
|
96
|
-
children: /* @__PURE__ */
|
|
101
|
+
children: /* @__PURE__ */ e(y, { "aria-hidden": !0, weight: "bold" })
|
|
97
102
|
}
|
|
98
103
|
)
|
|
99
104
|
] });
|
|
100
|
-
return
|
|
105
|
+
return d ? /* @__PURE__ */ e(
|
|
101
106
|
"button",
|
|
102
107
|
{
|
|
103
|
-
ref:
|
|
108
|
+
ref: l,
|
|
104
109
|
type: "button",
|
|
105
|
-
"data-interaction":
|
|
106
|
-
className:
|
|
107
|
-
...
|
|
110
|
+
"data-interaction": t,
|
|
111
|
+
className: g,
|
|
112
|
+
...c,
|
|
108
113
|
children: b
|
|
109
114
|
}
|
|
110
|
-
) : /* @__PURE__ */
|
|
115
|
+
) : /* @__PURE__ */ e(
|
|
111
116
|
"span",
|
|
112
117
|
{
|
|
113
|
-
ref:
|
|
114
|
-
"data-interaction":
|
|
115
|
-
className:
|
|
116
|
-
...
|
|
118
|
+
ref: l,
|
|
119
|
+
"data-interaction": t,
|
|
120
|
+
className: g,
|
|
121
|
+
...c,
|
|
117
122
|
children: b
|
|
118
123
|
}
|
|
119
124
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
2
|
+
import { jsxs as d, jsx as a } from "react/jsx-runtime";
|
|
3
3
|
import * as o from "react";
|
|
4
4
|
import { createPortal as S } from "react-dom";
|
|
5
5
|
import { Search as q } from "../lib/icons.js";
|
|
@@ -25,7 +25,7 @@ function L({
|
|
|
25
25
|
for (const t of l)
|
|
26
26
|
r.has(t.group) || (r.set(t.group, []), e.push(t.group)), r.get(t.group).push(t);
|
|
27
27
|
return e.map((t) => ({ group: t, items: r.get(t) }));
|
|
28
|
-
}, [l]),
|
|
28
|
+
}, [l]), u = l[c];
|
|
29
29
|
o.useEffect(() => {
|
|
30
30
|
x(0);
|
|
31
31
|
}, [m, s]), o.useEffect(() => {
|
|
@@ -43,15 +43,15 @@ function L({
|
|
|
43
43
|
};
|
|
44
44
|
}, [s]), o.useEffect(() => {
|
|
45
45
|
var e, r;
|
|
46
|
-
!s || !
|
|
47
|
-
}, [s,
|
|
46
|
+
!s || !u || (r = (e = g.current) == null ? void 0 : e.querySelector(`[data-index="${c}"]`)) == null || r.scrollIntoView({ block: "nearest" });
|
|
47
|
+
}, [s, u, c]);
|
|
48
48
|
const k = (e) => {
|
|
49
49
|
i(!1), R(e);
|
|
50
50
|
}, I = (e) => {
|
|
51
|
-
e.key === "Escape" ? (e.preventDefault(), i(!1)) : e.key === "ArrowDown" ? (e.preventDefault(), x((r) => Math.min(r + 1, l.length - 1))) : e.key === "ArrowUp" ? (e.preventDefault(), x((r) => Math.max(r - 1, 0))) : e.key === "Enter" &&
|
|
51
|
+
e.key === "Escape" ? (e.preventDefault(), i(!1)) : e.key === "ArrowDown" ? (e.preventDefault(), x((r) => Math.min(r + 1, l.length - 1))) : e.key === "ArrowUp" ? (e.preventDefault(), x((r) => Math.max(r - 1, 0))) : e.key === "Enter" && u && (e.preventDefault(), k(u));
|
|
52
52
|
};
|
|
53
53
|
return s ? S(
|
|
54
|
-
/* @__PURE__ */
|
|
54
|
+
/* @__PURE__ */ d("div", { className: "fixed inset-0 z-50 flex items-start justify-center px-4 pt-[15vh]", children: [
|
|
55
55
|
/* @__PURE__ */ a(
|
|
56
56
|
"div",
|
|
57
57
|
{
|
|
@@ -60,7 +60,7 @@ function L({
|
|
|
60
60
|
onClick: () => i(!1)
|
|
61
61
|
}
|
|
62
62
|
),
|
|
63
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ d(
|
|
64
64
|
"div",
|
|
65
65
|
{
|
|
66
66
|
role: "dialog",
|
|
@@ -68,13 +68,13 @@ function L({
|
|
|
68
68
|
"aria-label": D,
|
|
69
69
|
className: v(
|
|
70
70
|
"relative flex w-full max-w-lg flex-col overflow-hidden",
|
|
71
|
-
"rounded-xl bg-elevated text-foreground
|
|
71
|
+
"rounded-xl bg-elevated text-foreground",
|
|
72
72
|
E
|
|
73
73
|
),
|
|
74
74
|
onKeyDown: I,
|
|
75
75
|
children: [
|
|
76
76
|
/* @__PURE__ */ a(C, { origin: "top" }),
|
|
77
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ d("div", { className: "flex items-center gap-2.5 px-4 py-3", children: [
|
|
78
78
|
/* @__PURE__ */ a(q, { "aria-hidden": !0, className: "size-4 shrink-0 text-muted-foreground" }),
|
|
79
79
|
/* @__PURE__ */ a(
|
|
80
80
|
"input",
|
|
@@ -83,7 +83,7 @@ function L({
|
|
|
83
83
|
role: "combobox",
|
|
84
84
|
"aria-expanded": "true",
|
|
85
85
|
"aria-controls": f,
|
|
86
|
-
"aria-activedescendant":
|
|
86
|
+
"aria-activedescendant": u ? `${f}-${c}` : void 0,
|
|
87
87
|
"aria-autocomplete": "list",
|
|
88
88
|
value: m,
|
|
89
89
|
onChange: (e) => N(e.target.value),
|
|
@@ -100,11 +100,11 @@ function L({
|
|
|
100
100
|
role: "listbox",
|
|
101
101
|
"aria-label": "Results",
|
|
102
102
|
className: "max-h-80 overflow-y-auto p-1.5 pt-0",
|
|
103
|
-
children: l.length === 0 ? /* @__PURE__ */ a("p", { className: "px-2.5 py-6 text-center text-s text-muted-foreground", children: A }) : M.map(({ group: e, items: r }) => /* @__PURE__ */
|
|
103
|
+
children: l.length === 0 ? /* @__PURE__ */ a("p", { className: "px-2.5 py-6 text-center text-s text-muted-foreground", children: A }) : M.map(({ group: e, items: r }) => /* @__PURE__ */ d("div", { role: "group", "aria-label": e, children: [
|
|
104
104
|
e && /* @__PURE__ */ a("div", { className: "px-2.5 pb-1 pt-2.5 text-s font-normal text-muted-foreground select-none", children: e }),
|
|
105
105
|
r.map((t) => {
|
|
106
106
|
const n = l.indexOf(t), h = n === c;
|
|
107
|
-
return /* @__PURE__ */
|
|
107
|
+
return /* @__PURE__ */ d(
|
|
108
108
|
"div",
|
|
109
109
|
{
|
|
110
110
|
id: `${f}-${n}`,
|
|
@@ -4,8 +4,7 @@ import * as React from "react";
|
|
|
4
4
|
* screen. Structure: identity row (logo + name + schema + connection status),
|
|
5
5
|
* a tinted health strip, and a recessed footer with a usage metric + action.
|
|
6
6
|
*
|
|
7
|
-
* The clickable state
|
|
8
|
-
* add a numbered elevation utility only after an explicit user request. The
|
|
7
|
+
* The clickable state stays flat. The
|
|
9
8
|
* health strip uses a soft status tint and the footer
|
|
10
9
|
* steps down to `bg-muted`.
|
|
11
10
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
2
|
+
import { jsxs as i, Fragment as f, jsx as t } from "react/jsx-runtime";
|
|
3
3
|
import * as g from "react";
|
|
4
4
|
import { Chip as x } from "./chip.js";
|
|
5
5
|
import { Database as b, ChevronRight as p } from "../lib/icons.js";
|
|
@@ -17,11 +17,11 @@ function y(s) {
|
|
|
17
17
|
let a;
|
|
18
18
|
if (n < 7) a = `${n} days ago`;
|
|
19
19
|
else if (n < 30) {
|
|
20
|
-
const
|
|
21
|
-
a = `${
|
|
20
|
+
const r = Math.round(n / 7);
|
|
21
|
+
a = `${r} week${r > 1 ? "s" : ""} ago`;
|
|
22
22
|
} else {
|
|
23
|
-
const
|
|
24
|
-
a = `${
|
|
23
|
+
const r = Math.round(n / 30);
|
|
24
|
+
a = `${r} month${r > 1 ? "s" : ""} ago`;
|
|
25
25
|
}
|
|
26
26
|
return `Last sync from ${a}`;
|
|
27
27
|
}
|
|
@@ -31,7 +31,7 @@ function N({
|
|
|
31
31
|
label: n
|
|
32
32
|
}) {
|
|
33
33
|
const a = n ?? (s ? e ? y(e) : "Connected" : "Disconnected");
|
|
34
|
-
return s ? /* @__PURE__ */
|
|
34
|
+
return s ? /* @__PURE__ */ i("span", { className: "inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap text-xs text-tertiary", children: [
|
|
35
35
|
/* @__PURE__ */ t("span", { "aria-hidden": !0, className: "size-2 rounded-dot bg-success" }),
|
|
36
36
|
a
|
|
37
37
|
] }) : /* @__PURE__ */ t(
|
|
@@ -67,11 +67,11 @@ function v({ strip: s }) {
|
|
|
67
67
|
);
|
|
68
68
|
}
|
|
69
69
|
const w = g.forwardRef(
|
|
70
|
-
({ className: s, card: e, onOpen: n, ...a },
|
|
70
|
+
({ className: s, card: e, onOpen: n, ...a }, r) => {
|
|
71
71
|
var m;
|
|
72
|
-
const c = !!n, h = ((m = e.action) == null ? void 0 : m.tone) === "reconnect", l = /* @__PURE__ */
|
|
73
|
-
/* @__PURE__ */
|
|
74
|
-
/* @__PURE__ */
|
|
72
|
+
const c = !!n, h = ((m = e.action) == null ? void 0 : m.tone) === "reconnect", l = /* @__PURE__ */ i(f, { children: [
|
|
73
|
+
/* @__PURE__ */ i("div", { className: "rounded-t-xl p-[var(--card-padding)]", children: [
|
|
74
|
+
/* @__PURE__ */ i("div", { className: "mb-5 flex items-center gap-3.5", children: [
|
|
75
75
|
e.logo ? /* @__PURE__ */ t(
|
|
76
76
|
"img",
|
|
77
77
|
{
|
|
@@ -80,8 +80,8 @@ const w = g.forwardRef(
|
|
|
80
80
|
className: "size-10 shrink-0 rounded-md object-contain"
|
|
81
81
|
}
|
|
82
82
|
) : /* @__PURE__ */ t("span", { className: "grid size-10 shrink-0 place-items-center rounded-md bg-muted text-secondary", children: /* @__PURE__ */ t(b, { className: "size-5", "aria-hidden": !0 }) }),
|
|
83
|
-
/* @__PURE__ */
|
|
84
|
-
/* @__PURE__ */
|
|
83
|
+
/* @__PURE__ */ i("div", { className: "min-w-0 flex-1", children: [
|
|
84
|
+
/* @__PURE__ */ i("div", { className: "flex items-baseline justify-between gap-3", children: [
|
|
85
85
|
/* @__PURE__ */ t("div", { className: "min-w-0 truncate text-base font-medium leading-tight text-foreground", children: e.name }),
|
|
86
86
|
/* @__PURE__ */ t(
|
|
87
87
|
N,
|
|
@@ -96,7 +96,7 @@ const w = g.forwardRef(
|
|
|
96
96
|
] }),
|
|
97
97
|
/* @__PURE__ */ t(v, { strip: e.strip })
|
|
98
98
|
] }),
|
|
99
|
-
/* @__PURE__ */
|
|
99
|
+
/* @__PURE__ */ i("div", { className: "flex items-center justify-between gap-3 rounded-b-xl bg-ink-100 px-[var(--card-padding)] py-3", children: [
|
|
100
100
|
/* @__PURE__ */ t(
|
|
101
101
|
"span",
|
|
102
102
|
{
|
|
@@ -105,7 +105,7 @@ const w = g.forwardRef(
|
|
|
105
105
|
children: e.footer.text
|
|
106
106
|
}
|
|
107
107
|
),
|
|
108
|
-
e.action && /* @__PURE__ */
|
|
108
|
+
e.action && /* @__PURE__ */ i(
|
|
109
109
|
"span",
|
|
110
110
|
{
|
|
111
111
|
className: o(
|
|
@@ -126,13 +126,13 @@ const w = g.forwardRef(
|
|
|
126
126
|
// aliasing under transform is a real browser gotcha; forcing a
|
|
127
127
|
// compositor layer fixes it deterministically).
|
|
128
128
|
"rounded-xl bg-card text-card-foreground transform-gpu [will-change:transform] [backface-visibility:hidden]",
|
|
129
|
-
c && "
|
|
129
|
+
c && "transition-[transform,box-shadow] duration-150 ease-out motion-reduce:transition-none",
|
|
130
130
|
s
|
|
131
131
|
);
|
|
132
132
|
return c ? /* @__PURE__ */ t(
|
|
133
133
|
"button",
|
|
134
134
|
{
|
|
135
|
-
ref:
|
|
135
|
+
ref: r,
|
|
136
136
|
type: "button",
|
|
137
137
|
onClick: () => n == null ? void 0 : n(e),
|
|
138
138
|
className: o(
|
|
@@ -143,7 +143,7 @@ const w = g.forwardRef(
|
|
|
143
143
|
...a,
|
|
144
144
|
children: l
|
|
145
145
|
}
|
|
146
|
-
) : /* @__PURE__ */ t("div", { ref:
|
|
146
|
+
) : /* @__PURE__ */ t("div", { ref: r, className: d, ...a, children: l });
|
|
147
147
|
}
|
|
148
148
|
);
|
|
149
149
|
w.displayName = "ConnectorCard";
|
|
@@ -105,7 +105,6 @@ function se({
|
|
|
105
105
|
}),
|
|
106
106
|
"[--glow-border-rest:var(--input)]",
|
|
107
107
|
"[--glow-border-active:var(--field-focus)]",
|
|
108
|
-
"[--glow-inset:var(--inner-glow-field)]",
|
|
109
108
|
"data-[value-set]:text-on-white-primary!",
|
|
110
109
|
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
|
|
111
110
|
),
|
|
@@ -163,7 +162,7 @@ function se({
|
|
|
163
162
|
{
|
|
164
163
|
placement: "bottom end",
|
|
165
164
|
offset: 6,
|
|
166
|
-
className: "z-50 w-72 rounded-md border border-input bg-popover p-3 text-popover-foreground
|
|
165
|
+
className: "z-50 w-72 rounded-md border border-input bg-popover p-3 text-popover-foreground outline-none entering:animate-in entering:fade-in entering:zoom-in-95 exiting:animate-out exiting:fade-out exiting:zoom-out-95",
|
|
167
166
|
children: /* @__PURE__ */ t(E, { className: "outline-none", children: /* @__PURE__ */ d(T, { className: "w-full", visibleDuration: { months: 1 }, children: [
|
|
168
167
|
/* @__PURE__ */ d("header", { className: "mb-3 flex items-center justify-between gap-2", children: [
|
|
169
168
|
/* @__PURE__ */ t(
|
package/components/drawer.js
CHANGED
|
@@ -10,8 +10,7 @@ import { springSheet as l, drawerOffset as h, drawerBackdropVariants as F } from
|
|
|
10
10
|
const k = j(
|
|
11
11
|
[
|
|
12
12
|
"relative flex flex-col",
|
|
13
|
-
"bg-elevated text-foreground"
|
|
14
|
-
"shadow-elevation"
|
|
13
|
+
"bg-elevated text-foreground"
|
|
15
14
|
],
|
|
16
15
|
{
|
|
17
16
|
variants: {
|
|
@@ -80,9 +79,9 @@ function G({
|
|
|
80
79
|
open: t,
|
|
81
80
|
onOpenChange: e,
|
|
82
81
|
side: r,
|
|
83
|
-
size:
|
|
82
|
+
size: x,
|
|
84
83
|
className: c,
|
|
85
|
-
children:
|
|
84
|
+
children: v,
|
|
86
85
|
"aria-label": g
|
|
87
86
|
}) {
|
|
88
87
|
const d = r ?? "right", m = a.useRef(null), s = a.useRef(null);
|
|
@@ -129,7 +128,7 @@ function G({
|
|
|
129
128
|
"aria-modal": "true",
|
|
130
129
|
"aria-label": g,
|
|
131
130
|
tabIndex: -1,
|
|
132
|
-
className: n(k({ side: d, size:
|
|
131
|
+
className: n(k({ side: d, size: x }), "relative outline-none", c),
|
|
133
132
|
children: [
|
|
134
133
|
/* @__PURE__ */ i(
|
|
135
134
|
D,
|
|
@@ -138,7 +137,7 @@ function G({
|
|
|
138
137
|
className: "right-4 top-4"
|
|
139
138
|
}
|
|
140
139
|
),
|
|
141
|
-
|
|
140
|
+
v
|
|
142
141
|
]
|
|
143
142
|
},
|
|
144
143
|
"panel"
|
|
@@ -151,14 +150,14 @@ function L({
|
|
|
151
150
|
open: t,
|
|
152
151
|
onOpenChange: e,
|
|
153
152
|
dismissible: r = !0,
|
|
154
|
-
side:
|
|
153
|
+
side: x,
|
|
155
154
|
size: c,
|
|
156
|
-
containerClassName:
|
|
155
|
+
containerClassName: v,
|
|
157
156
|
className: g,
|
|
158
157
|
children: d,
|
|
159
158
|
"aria-label": m
|
|
160
159
|
}) {
|
|
161
|
-
const s =
|
|
160
|
+
const s = x ?? "right", p = c ?? "md", f = a.useRef(null);
|
|
162
161
|
return a.useEffect(() => {
|
|
163
162
|
if (!t || !r) return;
|
|
164
163
|
const u = (o) => {
|
|
@@ -174,7 +173,7 @@ function L({
|
|
|
174
173
|
className: n(
|
|
175
174
|
"shrink-0 overflow-hidden",
|
|
176
175
|
s === "bottom" ? "w-full" : "h-full",
|
|
177
|
-
|
|
176
|
+
v
|
|
178
177
|
),
|
|
179
178
|
children: /* @__PURE__ */ y(
|
|
180
179
|
w.aside,
|
package/components/dropdown.js
CHANGED
|
@@ -7,6 +7,8 @@ import * as React from "react";
|
|
|
7
7
|
* - `illustration`: a larger soft graphic for a full empty *screen*, with a
|
|
8
8
|
* bigger title and more breathing room — the calm, centred pattern.
|
|
9
9
|
*
|
|
10
|
+
* Both registers sit in a dashed WG5 outline with an 8px radius and no fill.
|
|
11
|
+
*
|
|
10
12
|
* Pass one or the other; `illustration` wins when both are present. The
|
|
11
13
|
* built-in illustrations (`EmptyDocuments`, `EmptySearch`, `EmptyConnections`,
|
|
12
14
|
* `EmptyInsights`) share one soft language — neutral-gray cards, a single ink
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as t, jsx as e } from "react/jsx-runtime";
|
|
3
3
|
import * as x from "react";
|
|
4
|
-
import { Inbox as
|
|
4
|
+
import { Inbox as g } from "../lib/icons.js";
|
|
5
5
|
import { cn as s } from "../lib/cn.js";
|
|
6
|
-
const
|
|
7
|
-
({ className: r, icon:
|
|
6
|
+
const f = x.forwardRef(
|
|
7
|
+
({ className: r, icon: c, illustration: i, title: n, description: d, action: o, ...m }, h) => {
|
|
8
8
|
const l = i != null;
|
|
9
9
|
return /* @__PURE__ */ t(
|
|
10
10
|
"div",
|
|
11
11
|
{
|
|
12
12
|
ref: h,
|
|
13
13
|
className: s(
|
|
14
|
-
|
|
14
|
+
// No fill: the empty state is outlined by a dashed WG5 edge on
|
|
15
|
+
// whatever surface it sits on.
|
|
16
|
+
"flex flex-col items-center rounded-lg border border-dashed border-border-strong px-6 text-center",
|
|
15
17
|
l ? "gap-5 py-16" : "gap-3 py-12",
|
|
16
18
|
r
|
|
17
19
|
),
|
|
18
20
|
...m,
|
|
19
21
|
children: [
|
|
20
|
-
l ? i : /* @__PURE__ */ e("span", { className: "inline-flex items-center justify-center rounded-full bg-muted p-3 text-muted-foreground [&_svg]:size-6", children:
|
|
22
|
+
l ? i : /* @__PURE__ */ e("span", { className: "inline-flex items-center justify-center rounded-full bg-muted p-3 text-muted-foreground [&_svg]:size-6", children: c ?? /* @__PURE__ */ e(g, { "aria-hidden": !0 }) }),
|
|
21
23
|
/* @__PURE__ */ t("div", { className: "flex flex-col gap-1.5", children: [
|
|
22
24
|
/* @__PURE__ */ e(
|
|
23
25
|
"p",
|
|
@@ -28,14 +30,14 @@ const g = x.forwardRef(
|
|
|
28
30
|
children: n
|
|
29
31
|
}
|
|
30
32
|
),
|
|
31
|
-
|
|
33
|
+
d && /* @__PURE__ */ e(
|
|
32
34
|
"p",
|
|
33
35
|
{
|
|
34
36
|
className: s(
|
|
35
37
|
"max-w-sm text-muted-foreground",
|
|
36
38
|
l ? "text-sm" : "text-xs"
|
|
37
39
|
),
|
|
38
|
-
children:
|
|
40
|
+
children: d
|
|
39
41
|
}
|
|
40
42
|
)
|
|
41
43
|
] }),
|
|
@@ -45,7 +47,7 @@ const g = x.forwardRef(
|
|
|
45
47
|
);
|
|
46
48
|
}
|
|
47
49
|
);
|
|
48
|
-
|
|
50
|
+
f.displayName = "EmptyState";
|
|
49
51
|
const a = "h-28 w-auto";
|
|
50
52
|
function y({ className: r }) {
|
|
51
53
|
return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
|
|
@@ -82,7 +84,7 @@ function y({ className: r }) {
|
|
|
82
84
|
] });
|
|
83
85
|
}
|
|
84
86
|
y.displayName = "EmptyDocuments";
|
|
85
|
-
function
|
|
87
|
+
function u({ className: r }) {
|
|
86
88
|
return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
|
|
87
89
|
/* @__PURE__ */ e(
|
|
88
90
|
"rect",
|
|
@@ -125,8 +127,8 @@ function N({ className: r }) {
|
|
|
125
127
|
] })
|
|
126
128
|
] });
|
|
127
129
|
}
|
|
128
|
-
|
|
129
|
-
function
|
|
130
|
+
u.displayName = "EmptySearch";
|
|
131
|
+
function N({ className: r }) {
|
|
130
132
|
return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
|
|
131
133
|
/* @__PURE__ */ e(
|
|
132
134
|
"path",
|
|
@@ -153,7 +155,7 @@ function u({ className: r }) {
|
|
|
153
155
|
)
|
|
154
156
|
] });
|
|
155
157
|
}
|
|
156
|
-
|
|
158
|
+
N.displayName = "EmptyConnections";
|
|
157
159
|
function p({ className: r }) {
|
|
158
160
|
return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
|
|
159
161
|
/* @__PURE__ */ e("rect", { x: "34", y: "88", width: "72", height: "3", rx: "1.5", className: "fill-border-strong" }),
|
|
@@ -164,9 +166,9 @@ function p({ className: r }) {
|
|
|
164
166
|
}
|
|
165
167
|
p.displayName = "EmptyInsights";
|
|
166
168
|
export {
|
|
167
|
-
|
|
169
|
+
N as EmptyConnections,
|
|
168
170
|
y as EmptyDocuments,
|
|
169
171
|
p as EmptyInsights,
|
|
170
|
-
|
|
171
|
-
|
|
172
|
+
u as EmptySearch,
|
|
173
|
+
f as EmptyState
|
|
172
174
|
};
|
package/components/field.js
CHANGED
|
@@ -22,12 +22,11 @@ const L = i(
|
|
|
22
22
|
R({ on: "all", color: "brand", intensity: "medium", animate: !0 }),
|
|
23
23
|
"[--glow-border-rest:var(--input)]",
|
|
24
24
|
"[--glow-border-hover:var(--input)]",
|
|
25
|
-
"[--glow-border-active:var(--field-focus)]"
|
|
26
|
-
|
|
27
|
-
), w = a.forwardRef(({ className: r, children: e, required: o, ...t }, d) => /* @__PURE__ */ v(
|
|
25
|
+
"[--glow-border-active:var(--field-focus)]"
|
|
26
|
+
), w = a.forwardRef(({ className: r, children: e, required: o, ...t }, n) => /* @__PURE__ */ v(
|
|
28
27
|
"label",
|
|
29
28
|
{
|
|
30
|
-
ref:
|
|
29
|
+
ref: n,
|
|
31
30
|
className: i(
|
|
32
31
|
"flex items-center gap-1 text-m font-medium text-secondary select-none",
|
|
33
32
|
"peer-disabled:cursor-not-allowed peer-disabled:opacity-60",
|
|
@@ -63,18 +62,18 @@ const h = a.forwardRef(
|
|
|
63
62
|
);
|
|
64
63
|
h.displayName = "FieldError";
|
|
65
64
|
const D = a.forwardRef(
|
|
66
|
-
({ className: r, label: e, description: o, error: t, required:
|
|
65
|
+
({ className: r, label: e, description: o, error: t, required: n, htmlFor: g, errorId: s, descriptionId: c, children: d, ...N }, F) => {
|
|
67
66
|
const m = a.useId(), p = s ?? `${m}-error`, f = c ?? `${m}-description`, u = t ? p : o ? f : void 0, E = s == null && c == null;
|
|
68
|
-
let x =
|
|
69
|
-
if (E && u && a.isValidElement(
|
|
70
|
-
const b =
|
|
71
|
-
x = a.cloneElement(
|
|
67
|
+
let x = d;
|
|
68
|
+
if (E && u && a.isValidElement(d)) {
|
|
69
|
+
const b = d.props;
|
|
70
|
+
x = a.cloneElement(d, {
|
|
72
71
|
"aria-describedby": [b["aria-describedby"], u].filter(Boolean).join(" ") || void 0,
|
|
73
72
|
"aria-invalid": b["aria-invalid"] ?? (t ? !0 : void 0)
|
|
74
73
|
});
|
|
75
74
|
}
|
|
76
75
|
return /* @__PURE__ */ v("div", { ref: F, className: i("flex flex-col gap-1.5", r), ...N, children: [
|
|
77
|
-
e && /* @__PURE__ */ l(w, { htmlFor: g, required:
|
|
76
|
+
e && /* @__PURE__ */ l(w, { htmlFor: g, required: n, children: e }),
|
|
78
77
|
x,
|
|
79
78
|
t ? /* @__PURE__ */ l(h, { id: p, children: t }) : o ? /* @__PURE__ */ l(y, { id: f, children: o }) : null
|
|
80
79
|
] });
|
|
@@ -5,11 +5,14 @@ import * as React from "react";
|
|
|
5
5
|
* `<input type="file">`.
|
|
6
6
|
*
|
|
7
7
|
* A dashed edge is the one sanctioned stroke here: it is the affordance
|
|
8
|
-
* ("something goes in this hole"), not decoration. The zone is
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* ("something goes in this hole"), not decoration. The empty zone is a White
|
|
9
|
+
* surface with a dashed WG5 edge and an outlined icon tile; hover warms it to
|
|
10
|
+
* WG1, and a drag-over turns it pale teal with a teal edge, so nothing jumps.
|
|
11
|
+
* Once files are chosen it becomes a solid-edged row: file tile, name and
|
|
12
|
+
* size, with Replace and Clear on the right.
|
|
11
13
|
*/
|
|
12
14
|
declare const fileDropzoneVariants: (props?: ({
|
|
15
|
+
hasFiles?: boolean | null | undefined;
|
|
13
16
|
isDragging?: boolean | null | undefined;
|
|
14
17
|
isDisabled?: boolean | null | undefined;
|
|
15
18
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|