@actioneer/ads 0.5.7 → 0.5.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/bin/ads-init.mjs +6 -0
- package/components/accordion.js +50 -48
- package/components/agent-icon.d.ts +12 -0
- package/components/agent-icon.js +133 -120
- package/components/ai-elements/chain-of-thought.d.ts +1 -1
- package/components/ai-elements/chain-of-thought.js +108 -108
- package/components/ai-elements/chart.js +16 -14
- package/components/ai-elements/inline-citation.js +41 -41
- package/components/ai-elements/message.js +4 -4
- package/components/ai-elements/queue.js +7 -7
- package/components/ai-elements/research-activity.js +114 -114
- package/components/ai-elements/shimmer.d.ts +2 -2
- package/components/ai-elements/speech-input.js +28 -28
- package/components/ai-elements/task-progress.js +26 -16
- package/components/ai-elements/task.js +17 -17
- package/components/ai-elements/tool.js +6 -6
- package/components/ai-elements/transcript.js +6 -5
- package/components/ai-elements/voice.js +1 -1
- package/components/alert.js +10 -10
- package/components/answer-sources.js +1 -1
- package/components/answer.js +115 -114
- package/components/assistant-ui/action-bar.js +94 -48
- package/components/assistant-ui/attachment.js +103 -75
- package/components/assistant-ui/badge.d.ts +1 -1
- package/components/assistant-ui/badge.js +17 -17
- package/components/assistant-ui/chain-of-thought.d.ts +1 -1
- package/components/assistant-ui/composer-add-context.js +9 -9
- package/components/assistant-ui/composer-deep-research.js +5 -5
- package/components/assistant-ui/composer-harness.js +11 -9
- package/components/assistant-ui/composer-trigger-popover.js +45 -34
- package/components/assistant-ui/composer.js +59 -59
- package/components/assistant-ui/error.js +14 -14
- package/components/assistant-ui/file.d.ts +1 -1
- package/components/assistant-ui/image.d.ts +1 -1
- package/components/assistant-ui/image.js +113 -103
- package/components/assistant-ui/markdown-text.js +18 -18
- package/components/assistant-ui/message.js +46 -45
- package/components/assistant-ui/quote.js +1 -1
- package/components/assistant-ui/reasoning.d.ts +1 -1
- package/components/assistant-ui/reasoning.js +66 -77
- package/components/assistant-ui/suggestions.js +4 -4
- package/components/assistant-ui/thread.js +22 -22
- package/components/assistant-ui/tool-fallback.js +60 -63
- package/components/assistant-ui/tool-group.d.ts +1 -1
- package/components/assistant-ui/tool-group.js +36 -42
- package/components/audio-waveform.js +25 -24
- package/components/autocomplete.d.ts +1 -0
- package/components/autocomplete.js +45 -43
- package/components/avatar.d.ts +1 -0
- package/components/avatar.js +27 -26
- package/components/badge.d.ts +1 -1
- package/components/breadcrumbs.d.ts +2 -0
- package/components/breadcrumbs.js +52 -50
- package/components/button.d.ts +2 -2
- package/components/button.js +22 -20
- package/components/card.js +8 -8
- package/components/carousel.js +105 -104
- package/components/chart.d.ts +6 -0
- package/components/chart.js +743 -672
- package/components/checkbox.js +74 -38
- package/components/chip.d.ts +1 -1
- package/components/code-block.js +3 -3
- package/components/collapsible.js +67 -23
- package/components/connector-card.js +6 -6
- package/components/drawer.d.ts +18 -11
- package/components/drawer.js +81 -78
- package/components/dropdown.d.ts +2 -0
- package/components/dropdown.js +88 -79
- package/components/empty-state.d.ts +1 -1
- package/components/empty-state.js +7 -7
- package/components/field.d.ts +4 -0
- package/components/field.js +45 -34
- package/components/file-dropzone.js +12 -12
- package/components/index.d.ts +3 -0
- package/components/index.js +584 -558
- package/components/input-field.js +51 -46
- package/components/input.js +20 -20
- package/components/link.js +9 -9
- package/components/modal.d.ts +5 -1
- package/components/modal.js +121 -76
- package/components/navbar.d.ts +1 -1
- package/components/navbar.js +1 -1
- package/components/number-field.js +38 -29
- package/components/page-header.js +12 -12
- package/components/pagination.js +19 -19
- package/components/panel.js +2 -2
- package/components/pixel-blast-svg.js +3 -3
- package/components/pixel-icon.d.ts +4 -0
- package/components/pixel-icon.js +210 -164
- package/components/popover.d.ts +1 -1
- package/components/popover.js +66 -64
- package/components/progress-circle.js +36 -32
- package/components/progress.js +28 -24
- package/components/radio.js +59 -49
- package/components/resizable-panel.js +1 -1
- package/components/reveal.d.ts +2 -2
- package/components/ripple.d.ts +3 -3
- package/components/scroll-area.js +17 -16
- package/components/segmented.d.ts +1 -0
- package/components/segmented.js +39 -36
- package/components/select.d.ts +7 -0
- package/components/select.js +186 -137
- package/components/setting-row.js +45 -42
- package/components/sidebar.js +131 -127
- package/components/skeleton.js +5 -5
- package/components/spinner.d.ts +13 -4
- package/components/spinner.js +42 -42
- package/components/stepper.js +21 -21
- package/components/switch.js +41 -39
- package/components/table.d.ts +16 -0
- package/components/table.js +393 -260
- package/components/tabs.js +149 -137
- package/components/toast.js +66 -66
- package/components/tooltip.js +2 -2
- package/components/tree.js +62 -51
- package/components/typography.d.ts +2 -1
- package/components/typography.js +33 -32
- package/components/ui/button.d.ts +2 -2
- package/components/ui/button.js +19 -19
- package/components/ui/collapsible.d.ts +1 -5
- package/components/ui/dialog.d.ts +3 -3
- package/components/ui/dialog.js +95 -58
- package/components/ui/tooltip.d.ts +2 -2
- package/components/ui/tooltip.js +67 -33
- package/components/viz-charts.js +95 -95
- package/demo/components/add-to-artifact.js +363 -0
- package/demo/lib/artifact-library.js +142 -0
- package/demo/lib/artifact-pin-guard.js +12 -0
- package/fonts/aribau-grotesk-medium.woff2 +0 -0
- package/fonts/aribau-grotesk-regular.woff2 +0 -0
- package/fonts.css +11 -11
- package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +17 -16
- package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +21 -20
- package/lib/icons.d.ts +24 -0
- package/lib/icons.js +114 -108
- package/lib/motion.d.ts +42 -39
- package/lib/motion.js +112 -52
- package/lib/spinner-mark.d.ts +9 -0
- package/lib/spinner-mark.js +98 -0
- package/llms.txt +53 -19
- package/manifest.json +258 -36
- package/package.json +1 -1
- package/styles.css +143 -124
- package/theme.css +90 -93
- package/components/ui/collapsible.js +0 -35
- package/fonts/aribau-grotesk-500.otf +0 -0
- package/fonts/aribau-grotesk-600.woff2 +0 -0
package/components/viz-charts.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
2
|
+
import { jsx as l, jsxs as c, Fragment as J } from "react/jsx-runtime";
|
|
3
3
|
import * as $ from "react";
|
|
4
4
|
import { cn as D } from "../lib/cn.js";
|
|
5
5
|
import { fmtDuration as B, pct1 as z, abbr as V, commafy as H } from "../lib/viz-format.js";
|
|
@@ -13,9 +13,9 @@ const G = [
|
|
|
13
13
|
], O = (e) => G[e % G.length], A = "var(--color-chart-1)", E = "var(--color-ink-400)", U = "var(--border)", Q = "var(--foreground)";
|
|
14
14
|
function Y(e, s = 4) {
|
|
15
15
|
if (e <= 0) return { max: 1, ticks: [0, 1] };
|
|
16
|
-
const d = e / s, i = Math.pow(10, Math.floor(Math.log10(d))), o = ([1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10].find((w) => w * i >= d) ?? 10) * i,
|
|
17
|
-
for (let w = 0; w <=
|
|
18
|
-
return { max:
|
|
16
|
+
const d = e / s, i = Math.pow(10, Math.floor(Math.log10(d))), o = ([1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10].find((w) => w * i >= d) ?? 10) * i, r = Math.ceil(e / o) * o, y = [];
|
|
17
|
+
for (let w = 0; w <= r + o / 1e6; w += o) y.push(w);
|
|
18
|
+
return { max: r, ticks: y };
|
|
19
19
|
}
|
|
20
20
|
function Z(e, s = 8) {
|
|
21
21
|
if (e.length <= s) return e;
|
|
@@ -27,8 +27,8 @@ function P(e) {
|
|
|
27
27
|
if (e.length === 1) return `M${e[0][0]},${e[0][1]}`;
|
|
28
28
|
let s = `M${e[0][0]},${e[0][1]}`;
|
|
29
29
|
for (let d = 1; d < e.length; d++) {
|
|
30
|
-
const [i, u] = e[d - 1], [o,
|
|
31
|
-
s += `C${y},${u} ${y},${
|
|
30
|
+
const [i, u] = e[d - 1], [o, r] = e[d], y = (i + o) / 2;
|
|
31
|
+
s += `C${y},${u} ${y},${r} ${o},${r}`;
|
|
32
32
|
}
|
|
33
33
|
return s;
|
|
34
34
|
}
|
|
@@ -49,19 +49,19 @@ function _({
|
|
|
49
49
|
transform: `translate(${u ? "calc(-100% - 12px)" : "12px"}, -50%)`
|
|
50
50
|
},
|
|
51
51
|
children: [
|
|
52
|
-
/* @__PURE__ */
|
|
53
|
-
/* @__PURE__ */
|
|
54
|
-
o.dashed ? /* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ l("div", { className: "mb-1.5 text-xs text-background/60", children: d }),
|
|
53
|
+
/* @__PURE__ */ l("div", { className: "flex flex-col gap-1", children: i.map((o, r) => /* @__PURE__ */ c("div", { className: "flex items-center gap-2 text-xs", children: [
|
|
54
|
+
o.dashed ? /* @__PURE__ */ l(
|
|
55
55
|
"span",
|
|
56
56
|
{
|
|
57
57
|
"aria-hidden": !0,
|
|
58
58
|
className: "h-0 w-3 shrink-0 border-t border-dashed",
|
|
59
59
|
style: { borderColor: o.swatch ?? "currentColor" }
|
|
60
60
|
}
|
|
61
|
-
) : o.swatch ? /* @__PURE__ */
|
|
62
|
-
/* @__PURE__ */
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
] },
|
|
61
|
+
) : o.swatch ? /* @__PURE__ */ l("span", { "aria-hidden": !0, className: "size-2 shrink-0 rounded-dot", style: { background: o.swatch } }) : null,
|
|
62
|
+
/* @__PURE__ */ l("span", { className: "min-w-0 flex-1 truncate text-background/70", children: o.label }),
|
|
63
|
+
/* @__PURE__ */ l("span", { className: "shrink-0 font-medium tabular-nums", children: o.value })
|
|
64
|
+
] }, r)) })
|
|
65
65
|
]
|
|
66
66
|
}
|
|
67
67
|
);
|
|
@@ -69,8 +69,8 @@ function _({
|
|
|
69
69
|
function ee({
|
|
70
70
|
items: e
|
|
71
71
|
}) {
|
|
72
|
-
return /* @__PURE__ */
|
|
73
|
-
/* @__PURE__ */
|
|
72
|
+
return /* @__PURE__ */ l("div", { className: "mb-3 flex flex-wrap items-center justify-end gap-x-4 gap-y-1", children: e.map((s) => /* @__PURE__ */ c("span", { className: "inline-flex items-center gap-1.5 text-xs text-secondary", children: [
|
|
73
|
+
/* @__PURE__ */ l(
|
|
74
74
|
"span",
|
|
75
75
|
{
|
|
76
76
|
"aria-hidden": !0,
|
|
@@ -89,7 +89,7 @@ function ne({
|
|
|
89
89
|
height: i = 300,
|
|
90
90
|
formatAxis: u = V,
|
|
91
91
|
formatValue: o = H,
|
|
92
|
-
className:
|
|
92
|
+
className: r
|
|
93
93
|
}) {
|
|
94
94
|
const [y, w] = $.useState(720), N = $.useRef(null);
|
|
95
95
|
$.useEffect(() => {
|
|
@@ -97,9 +97,9 @@ function ne({
|
|
|
97
97
|
const t = new ResizeObserver(([x]) => w(x.contentRect.width));
|
|
98
98
|
return t.observe(N.current), () => t.disconnect();
|
|
99
99
|
}, []);
|
|
100
|
-
const [h, f] = $.useState(null), m = Math.max(0, y - b.l - b.r), M = Math.max(0, i - b.t - b.b),
|
|
101
|
-
return /* @__PURE__ */ c("div", { ref: N, className: D("relative w-full font-sans",
|
|
102
|
-
C.length > 1 && /* @__PURE__ */
|
|
100
|
+
const [h, f] = $.useState(null), m = Math.max(0, y - b.l - b.r), M = Math.max(0, i - b.t - b.b), a = d.filter((t) => !t.ghost), { max: n, ticks: p } = Y(Math.max(1, ...d.flatMap((t) => t.values))), k = (t) => b.t + M - t / n * M, R = s.length, v = (t) => e === "bar" ? b.l + (t + 0.5) / R * m : b.l + (R <= 1 ? m / 2 : t / (R - 1) * m), j = [...p].reverse(), C = a.map((t, x) => ({ label: t.name, color: t.color ?? O(x), dashed: t.dashed }));
|
|
101
|
+
return /* @__PURE__ */ c("div", { ref: N, className: D("relative w-full font-sans", r), children: [
|
|
102
|
+
C.length > 1 && /* @__PURE__ */ l(ee, { items: C }),
|
|
103
103
|
/* @__PURE__ */ c(
|
|
104
104
|
"svg",
|
|
105
105
|
{
|
|
@@ -113,7 +113,7 @@ function ne({
|
|
|
113
113
|
},
|
|
114
114
|
children: [
|
|
115
115
|
j.map((t, x) => /* @__PURE__ */ c("g", { children: [
|
|
116
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ l(
|
|
117
117
|
"line",
|
|
118
118
|
{
|
|
119
119
|
x1: b.l,
|
|
@@ -126,16 +126,16 @@ function ne({
|
|
|
126
126
|
opacity: t === 0 ? 0.9 : 0.6
|
|
127
127
|
}
|
|
128
128
|
),
|
|
129
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ l("text", { x: b.l - 10, y: k(t), dy: "0.32em", textAnchor: "end", className: "fill-tertiary text-[11px] tabular-nums", children: u(t) })
|
|
130
130
|
] }, x)),
|
|
131
131
|
Z(s).map(
|
|
132
|
-
(t, x) => t == null ? null : /* @__PURE__ */
|
|
132
|
+
(t, x) => t == null ? null : /* @__PURE__ */ l("text", { x: v(x), y: i - 12, textAnchor: "middle", className: "fill-tertiary text-[11px] tabular-nums", children: t }, x)
|
|
133
133
|
),
|
|
134
|
-
e === "bar" &&
|
|
135
|
-
const T = m / R, L = Math.min(T * 0.7, 64), F = (L - (
|
|
134
|
+
e === "bar" && a.map((t, x) => {
|
|
135
|
+
const T = m / R, L = Math.min(T * 0.7, 64), F = (L - (a.length - 1)) / a.length;
|
|
136
136
|
return t.values.map((I, S) => {
|
|
137
137
|
const K = b.l + S * T + (T - L) / 2 + x * (F + 1), q = h != null && h !== S;
|
|
138
|
-
return /* @__PURE__ */
|
|
138
|
+
return /* @__PURE__ */ l(
|
|
139
139
|
"rect",
|
|
140
140
|
{
|
|
141
141
|
x: K,
|
|
@@ -150,17 +150,17 @@ function ne({
|
|
|
150
150
|
);
|
|
151
151
|
});
|
|
152
152
|
}),
|
|
153
|
-
e === "area" &&
|
|
153
|
+
e === "area" && a[0] && /* @__PURE__ */ l(
|
|
154
154
|
"path",
|
|
155
155
|
{
|
|
156
|
-
d: `${P(
|
|
157
|
-
fill:
|
|
156
|
+
d: `${P(a[0].values.map((t, x) => [v(x), k(t)]))} L${v(R - 1)},${k(0)} L${v(0)},${k(0)} Z`,
|
|
157
|
+
fill: a[0].color ?? O(0),
|
|
158
158
|
opacity: 0.12
|
|
159
159
|
}
|
|
160
160
|
),
|
|
161
161
|
e !== "bar" && d.map((t, x) => {
|
|
162
|
-
const T = t.color ?? O(
|
|
163
|
-
return /* @__PURE__ */
|
|
162
|
+
const T = t.color ?? O(a.indexOf(t)), L = t.ghost ? "2 4" : t.dashed ? "6 5" : void 0, F = t.ghost ? 1.75 : x === 0 ? 2.5 : 2;
|
|
163
|
+
return /* @__PURE__ */ l(
|
|
164
164
|
"path",
|
|
165
165
|
{
|
|
166
166
|
d: P(t.values.map((I, S) => [v(S), k(I)])),
|
|
@@ -176,8 +176,8 @@ function ne({
|
|
|
176
176
|
);
|
|
177
177
|
}),
|
|
178
178
|
h != null && e !== "bar" && /* @__PURE__ */ c(J, { children: [
|
|
179
|
-
/* @__PURE__ */
|
|
180
|
-
|
|
179
|
+
/* @__PURE__ */ l("line", { x1: v(h), x2: v(h), y1: b.t, y2: b.t + M, stroke: Q, strokeWidth: 1, opacity: 0.18 }),
|
|
180
|
+
a.map((t, x) => /* @__PURE__ */ l(
|
|
181
181
|
"circle",
|
|
182
182
|
{
|
|
183
183
|
cx: v(h),
|
|
@@ -193,7 +193,7 @@ function ne({
|
|
|
193
193
|
]
|
|
194
194
|
}
|
|
195
195
|
),
|
|
196
|
-
h != null && /* @__PURE__ */
|
|
196
|
+
h != null && /* @__PURE__ */ l(
|
|
197
197
|
_,
|
|
198
198
|
{
|
|
199
199
|
x: v(h),
|
|
@@ -201,7 +201,7 @@ function ne({
|
|
|
201
201
|
flip: v(h) > b.l + m * 0.66,
|
|
202
202
|
title: s[h],
|
|
203
203
|
rows: d.map((t) => ({
|
|
204
|
-
swatch: t.color ?? O(
|
|
204
|
+
swatch: t.color ?? O(a.indexOf(t)),
|
|
205
205
|
dashed: t.ghost,
|
|
206
206
|
label: t.name,
|
|
207
207
|
value: o(t.values[h])
|
|
@@ -212,35 +212,35 @@ function ne({
|
|
|
212
212
|
}
|
|
213
213
|
const g = { l: 22, r: 16, t: 28, b: 98 }, X = "viz-funnel-hatch";
|
|
214
214
|
function oe({ steps: e, height: s = 320, className: d }) {
|
|
215
|
-
var
|
|
215
|
+
var a;
|
|
216
216
|
const [i, u] = $.useState(720), o = $.useRef(null);
|
|
217
217
|
$.useEffect(() => {
|
|
218
218
|
if (!o.current) return;
|
|
219
219
|
const n = new ResizeObserver(([p]) => u(p.contentRect.width));
|
|
220
220
|
return n.observe(o.current), () => n.disconnect();
|
|
221
221
|
}, []);
|
|
222
|
-
const [
|
|
222
|
+
const [r, y] = $.useState(null), w = Math.max(0, i - g.l - g.r), N = Math.max(0, s - g.t - g.b), h = ((a = e[0]) == null ? void 0 : a.value) || 1, f = (n) => g.t + N - n * N, m = w / Math.max(1, e.length), M = Math.min(m * 0.56, 120);
|
|
223
223
|
return /* @__PURE__ */ c("div", { ref: o, className: D("relative w-full font-sans", d), children: [
|
|
224
224
|
/* @__PURE__ */ c("svg", { width: i, height: s, className: "block select-none", children: [
|
|
225
|
-
/* @__PURE__ */
|
|
226
|
-
/* @__PURE__ */
|
|
227
|
-
/* @__PURE__ */
|
|
225
|
+
/* @__PURE__ */ l("defs", { children: /* @__PURE__ */ c("pattern", { id: X, width: 6, height: 6, patternTransform: "rotate(45)", patternUnits: "userSpaceOnUse", children: [
|
|
226
|
+
/* @__PURE__ */ l("rect", { width: 6, height: 6, fill: E, opacity: 0.07 }),
|
|
227
|
+
/* @__PURE__ */ l("line", { x1: 0, y1: 0, x2: 0, y2: 6, stroke: E, strokeWidth: 2.5, opacity: 0.22 })
|
|
228
228
|
] }) }),
|
|
229
229
|
[1, 0.75, 0.5, 0.25, 0].map((n) => /* @__PURE__ */ c("g", { children: [
|
|
230
|
-
/* @__PURE__ */
|
|
231
|
-
/* @__PURE__ */
|
|
230
|
+
/* @__PURE__ */ l("line", { x1: g.l, x2: g.l + w, y1: f(n), y2: f(n), stroke: U, strokeWidth: 1, strokeDasharray: n === 0 ? void 0 : "3 4", opacity: n === 0 ? 0.9 : 0.6 }),
|
|
231
|
+
/* @__PURE__ */ l("text", { x: g.l, y: f(n) - 4, className: "fill-tertiary text-[10px] tabular-nums", children: n * 100 })
|
|
232
232
|
] }, n)),
|
|
233
233
|
e.map((n, p) => {
|
|
234
|
-
const k = n.value / h, R = p === 0 ? 1 : e[p - 1].value / h, v = g.l + p * m + m / 2, j = v - M / 2, C = f(k), t =
|
|
234
|
+
const k = n.value / h, R = p === 0 ? 1 : e[p - 1].value / h, v = g.l + p * m + m / 2, j = v - M / 2, C = f(k), t = r != null && r !== p;
|
|
235
235
|
return /* @__PURE__ */ c("g", { opacity: t ? 0.55 : 1, onMouseEnter: () => y(p), onMouseLeave: () => y(null), children: [
|
|
236
|
-
p > 0 && /* @__PURE__ */
|
|
237
|
-
/* @__PURE__ */
|
|
238
|
-
/* @__PURE__ */
|
|
239
|
-
/* @__PURE__ */
|
|
236
|
+
p > 0 && /* @__PURE__ */ l("rect", { x: j, y: f(R), width: M, height: Math.max(0, C - f(R)), rx: 4, fill: `url(#${X})` }),
|
|
237
|
+
/* @__PURE__ */ l("rect", { x: j, y: C, width: M, height: Math.max(0, g.t + N - C), rx: 4, fill: A }),
|
|
238
|
+
/* @__PURE__ */ l("text", { x: v, y: C + 16, textAnchor: "middle", className: "fill-[var(--card)] text-[12px] font-medium tabular-nums", children: V(n.value) }),
|
|
239
|
+
/* @__PURE__ */ l("text", { x: v, y: g.t + N + 24, textAnchor: "middle", className: "fill-secondary text-[12.5px] font-medium", children: n.label }),
|
|
240
240
|
/* @__PURE__ */ c("text", { x: v, y: g.t + N + 45, textAnchor: "middle", className: "fill-foreground text-[12px] font-medium tabular-nums", children: [
|
|
241
241
|
H(n.value),
|
|
242
242
|
" ",
|
|
243
|
-
/* @__PURE__ */
|
|
243
|
+
/* @__PURE__ */ l("tspan", { className: "fill-tertiary", children: p === 0 ? "entered" : `→ ${z(k * 100)}` })
|
|
244
244
|
] }),
|
|
245
245
|
p > 0 && /* @__PURE__ */ c("text", { x: v, y: g.t + N + 66, textAnchor: "middle", className: "fill-tertiary text-[12px] font-medium tabular-nums", children: [
|
|
246
246
|
"↘ ",
|
|
@@ -253,20 +253,20 @@ function oe({ steps: e, height: s = 320, className: d }) {
|
|
|
253
253
|
] }, p);
|
|
254
254
|
})
|
|
255
255
|
] }),
|
|
256
|
-
|
|
256
|
+
r != null && e[r] && /* @__PURE__ */ l(
|
|
257
257
|
_,
|
|
258
258
|
{
|
|
259
|
-
x: g.l +
|
|
259
|
+
x: g.l + r * m + m / 2,
|
|
260
260
|
y: g.t + N / 2,
|
|
261
|
-
flip:
|
|
262
|
-
title: e[
|
|
261
|
+
flip: r >= e.length - 2,
|
|
262
|
+
title: e[r].label,
|
|
263
263
|
rows: [
|
|
264
|
-
{ swatch: A, label: "Converted", value: H(e[
|
|
265
|
-
...
|
|
266
|
-
{ swatch: E, label: "Dropped off", value: `−${H(e[
|
|
267
|
-
{ label: "Conversion so far", value: z(e[
|
|
268
|
-
{ label: "From previous", value: z(e[
|
|
269
|
-
{ label: "Median time", value: B(e[
|
|
264
|
+
{ swatch: A, label: "Converted", value: H(e[r].value) },
|
|
265
|
+
...r > 0 ? [
|
|
266
|
+
{ swatch: E, label: "Dropped off", value: `−${H(e[r - 1].value - e[r].value)}` },
|
|
267
|
+
{ label: "Conversion so far", value: z(e[r].value / h * 100) },
|
|
268
|
+
{ label: "From previous", value: z(e[r].value / e[r - 1].value * 100) },
|
|
269
|
+
{ label: "Median time", value: B(e[r].medianTime) }
|
|
270
270
|
] : []
|
|
271
271
|
]
|
|
272
272
|
}
|
|
@@ -276,8 +276,8 @@ function oe({ steps: e, height: s = 320, className: d }) {
|
|
|
276
276
|
function ce({ steps: e, className: s }) {
|
|
277
277
|
var i;
|
|
278
278
|
const d = ((i = e[0]) == null ? void 0 : i.value) || 1;
|
|
279
|
-
return /* @__PURE__ */
|
|
280
|
-
const
|
|
279
|
+
return /* @__PURE__ */ l("div", { className: D("flex w-full flex-col gap-[30px] font-sans", s), children: e.map((u, o) => {
|
|
280
|
+
const r = u.value / d, y = o === 0 ? 1 : e[o - 1].value / d;
|
|
281
281
|
return /* @__PURE__ */ c("div", { className: "w-full", children: [
|
|
282
282
|
/* @__PURE__ */ c("div", { className: "mb-1.5 flex items-baseline justify-between gap-3", children: [
|
|
283
283
|
/* @__PURE__ */ c("span", { className: "truncate text-[12.5px] font-medium text-secondary", children: [
|
|
@@ -293,11 +293,11 @@ function ce({ steps: e, className: s }) {
|
|
|
293
293
|
"Avg time ",
|
|
294
294
|
B(u.avgTime)
|
|
295
295
|
] }),
|
|
296
|
-
/* @__PURE__ */
|
|
296
|
+
/* @__PURE__ */ l("span", { className: "text-[12.5px] font-medium text-foreground tabular-nums", children: z(r * 100) })
|
|
297
297
|
] })
|
|
298
298
|
] }),
|
|
299
299
|
/* @__PURE__ */ c("div", { className: "relative h-[46px] w-full overflow-hidden rounded-lg bg-muted-foreground/[0.06]", children: [
|
|
300
|
-
o > 0 && /* @__PURE__ */
|
|
300
|
+
o > 0 && /* @__PURE__ */ l(
|
|
301
301
|
"div",
|
|
302
302
|
{
|
|
303
303
|
className: "absolute inset-y-0 left-0",
|
|
@@ -307,7 +307,7 @@ function ce({ steps: e, className: s }) {
|
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
),
|
|
310
|
-
/* @__PURE__ */
|
|
310
|
+
/* @__PURE__ */ l("div", { className: "absolute inset-y-0 left-0 flex items-center rounded-lg", style: { width: `${r * 100}%`, background: A }, children: /* @__PURE__ */ l("span", { className: "ml-3 text-[12px] font-medium text-ink-950 tabular-nums", children: V(u.value) }) })
|
|
311
311
|
] })
|
|
312
312
|
] }, o);
|
|
313
313
|
}) });
|
|
@@ -317,10 +317,10 @@ function se({ points: e, height: s = 300, className: d }) {
|
|
|
317
317
|
const [i, u] = $.useState(720), o = $.useRef(null);
|
|
318
318
|
$.useEffect(() => {
|
|
319
319
|
if (!o.current) return;
|
|
320
|
-
const
|
|
321
|
-
return
|
|
320
|
+
const a = new ResizeObserver(([n]) => u(n.contentRect.width));
|
|
321
|
+
return a.observe(o.current), () => a.disconnect();
|
|
322
322
|
}, []);
|
|
323
|
-
const [
|
|
323
|
+
const [r, y] = $.useState(null), w = Math.max(0, i - W.l - W.r), N = Math.max(0, s - W.t - W.b), h = e.length, f = (a) => W.l + (h <= 1 ? w / 2 : a / (h - 1) * w), m = (a) => W.t + N - a / 100 * N, M = e.map((a, n) => [f(n), m(a.v)]);
|
|
324
324
|
return /* @__PURE__ */ c("div", { ref: o, className: D("relative w-full font-sans", d), children: [
|
|
325
325
|
/* @__PURE__ */ c(
|
|
326
326
|
"svg",
|
|
@@ -329,41 +329,41 @@ function se({ points: e, height: s = 300, className: d }) {
|
|
|
329
329
|
height: s,
|
|
330
330
|
className: "block select-none",
|
|
331
331
|
onMouseLeave: () => y(null),
|
|
332
|
-
onMouseMove: (
|
|
333
|
-
const n =
|
|
332
|
+
onMouseMove: (a) => {
|
|
333
|
+
const n = a.currentTarget.getBoundingClientRect(), p = Math.round((a.clientX - n.left - W.l) / w * (h - 1));
|
|
334
334
|
y(Math.max(0, Math.min(h - 1, p)));
|
|
335
335
|
},
|
|
336
336
|
children: [
|
|
337
|
-
[100, 75, 50, 25, 0].map((
|
|
338
|
-
/* @__PURE__ */
|
|
339
|
-
/* @__PURE__ */ c("text", { x: W.l - 10, y: m(
|
|
340
|
-
|
|
337
|
+
[100, 75, 50, 25, 0].map((a) => /* @__PURE__ */ c("g", { children: [
|
|
338
|
+
/* @__PURE__ */ l("line", { x1: W.l, x2: W.l + w, y1: m(a), y2: m(a), stroke: U, strokeWidth: 1, strokeDasharray: a === 0 ? void 0 : "3 4", opacity: a === 0 ? 0.9 : 0.6 }),
|
|
339
|
+
/* @__PURE__ */ c("text", { x: W.l - 10, y: m(a), dy: "0.32em", textAnchor: "end", className: "fill-tertiary text-[11px] tabular-nums", children: [
|
|
340
|
+
a,
|
|
341
341
|
"%"
|
|
342
342
|
] })
|
|
343
|
-
] },
|
|
343
|
+
] }, a)),
|
|
344
344
|
Z(e).map(
|
|
345
|
-
(
|
|
345
|
+
(a, n) => a == null ? null : /* @__PURE__ */ l("text", { x: f(n), y: s - 12, textAnchor: "middle", className: "fill-tertiary text-[11px] tabular-nums", children: a.label }, n)
|
|
346
346
|
),
|
|
347
|
-
/* @__PURE__ */
|
|
348
|
-
/* @__PURE__ */
|
|
349
|
-
e.map((
|
|
350
|
-
/* @__PURE__ */ c("text", { x: f(n), y: m(
|
|
351
|
-
|
|
347
|
+
/* @__PURE__ */ l("path", { d: `${P(M)} L${f(h - 1)},${m(0)} L${f(0)},${m(0)} Z`, fill: A, opacity: 0.12 }),
|
|
348
|
+
/* @__PURE__ */ l("path", { d: P(M), fill: "none", stroke: A, strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }),
|
|
349
|
+
e.map((a, n) => /* @__PURE__ */ c("g", { children: [
|
|
350
|
+
/* @__PURE__ */ c("text", { x: f(n), y: m(a.v) - 12, textAnchor: "middle", className: "fill-foreground text-[11.5px] font-medium tabular-nums", children: [
|
|
351
|
+
a.v,
|
|
352
352
|
"%"
|
|
353
353
|
] }),
|
|
354
|
-
/* @__PURE__ */
|
|
354
|
+
/* @__PURE__ */ l("circle", { cx: f(n), cy: m(a.v), r: r === n ? 5 : 3.5, fill: "var(--card)", stroke: A, strokeWidth: 2 })
|
|
355
355
|
] }, n))
|
|
356
356
|
]
|
|
357
357
|
}
|
|
358
358
|
),
|
|
359
|
-
|
|
359
|
+
r != null && e[r] && /* @__PURE__ */ l(
|
|
360
360
|
_,
|
|
361
361
|
{
|
|
362
|
-
x: f(
|
|
363
|
-
y: m(e[
|
|
364
|
-
flip:
|
|
365
|
-
title: e[
|
|
366
|
-
rows: [{ swatch: A, label: "Retention", value: `${e[
|
|
362
|
+
x: f(r),
|
|
363
|
+
y: m(e[r].v),
|
|
364
|
+
flip: r >= h - 2,
|
|
365
|
+
title: e[r].label,
|
|
366
|
+
rows: [{ swatch: A, label: "Retention", value: `${e[r].v}%` }]
|
|
367
367
|
}
|
|
368
368
|
)
|
|
369
369
|
] });
|
|
@@ -373,21 +373,21 @@ function te(e) {
|
|
|
373
373
|
return `color-mix(in srgb, ${A} ${s}%, transparent)`;
|
|
374
374
|
}
|
|
375
375
|
function ie({ cols: e, cohorts: s, className: d }) {
|
|
376
|
-
return /* @__PURE__ */
|
|
377
|
-
/* @__PURE__ */
|
|
378
|
-
/* @__PURE__ */
|
|
379
|
-
/* @__PURE__ */
|
|
380
|
-
e.map((i) => /* @__PURE__ */
|
|
376
|
+
return /* @__PURE__ */ l("div", { className: D("w-full overflow-x-auto font-sans", d), children: /* @__PURE__ */ c("table", { className: "w-full border-collapse text-left", children: [
|
|
377
|
+
/* @__PURE__ */ l("thead", { children: /* @__PURE__ */ c("tr", { className: "text-xs font-medium text-tertiary", children: [
|
|
378
|
+
/* @__PURE__ */ l("th", { className: "sticky left-0 w-[1%] bg-card py-2 pr-4 whitespace-nowrap", children: "Cohort" }),
|
|
379
|
+
/* @__PURE__ */ l("th", { className: "w-[1%] py-2 pr-4 text-right whitespace-nowrap", children: "Users" }),
|
|
380
|
+
e.map((i) => /* @__PURE__ */ l("th", { className: "px-1.5 py-2 text-center tabular-nums", children: i }, i))
|
|
381
381
|
] }) }),
|
|
382
|
-
/* @__PURE__ */
|
|
383
|
-
/* @__PURE__ */
|
|
384
|
-
/* @__PURE__ */
|
|
385
|
-
i.values.map((u, o) => /* @__PURE__ */
|
|
382
|
+
/* @__PURE__ */ l("tbody", { children: s.map((i) => /* @__PURE__ */ c("tr", { children: [
|
|
383
|
+
/* @__PURE__ */ l("td", { className: "sticky left-0 w-[1%] bg-card py-1.5 pr-4 text-[12.5px] text-secondary whitespace-nowrap", children: i.label }),
|
|
384
|
+
/* @__PURE__ */ l("td", { className: "w-[1%] py-1.5 pr-4 text-right text-[12.5px] text-secondary tabular-nums whitespace-nowrap", children: H(i.size) }),
|
|
385
|
+
i.values.map((u, o) => /* @__PURE__ */ l("td", { className: "px-1 py-1", children: u == null ? /* @__PURE__ */ l("div", { className: "py-[9px] text-center text-[12.5px] text-tertiary tabular-nums", children: "—" }) : /* @__PURE__ */ c(
|
|
386
386
|
"div",
|
|
387
387
|
{
|
|
388
388
|
className: D(
|
|
389
389
|
"rounded-md py-[9px] text-center text-[12.5px] tabular-nums",
|
|
390
|
-
|
|
390
|
+
"text-ink-950"
|
|
391
391
|
),
|
|
392
392
|
style: { background: te(u) },
|
|
393
393
|
children: [
|