@actioneer/ads 1.0.8 → 1.0.10

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.
Files changed (64) hide show
  1. package/DESIGN.md +125 -50
  2. package/README.md +31 -7
  3. package/components/answer.js +1 -1
  4. package/components/assistant-ui/composer-harness.js +14 -10
  5. package/components/body-page-header.d.ts +9 -4
  6. package/components/body-page-header.js +10 -10
  7. package/components/breadcrumbs.js +15 -15
  8. package/components/button.d.ts +16 -1
  9. package/components/button.js +7 -4
  10. package/components/card.js +18 -18
  11. package/components/chart.d.ts +40 -4
  12. package/components/chart.js +824 -628
  13. package/components/chip.d.ts +2 -1
  14. package/components/chip.js +49 -46
  15. package/components/collection-header.js +4 -4
  16. package/components/connector-card.js +30 -30
  17. package/components/date-range-picker.js +1 -1
  18. package/components/detail-list.d.ts +28 -0
  19. package/components/detail-list.js +52 -0
  20. package/components/drawer.d.ts +38 -15
  21. package/components/drawer.js +150 -86
  22. package/components/empty-state.d.ts +3 -2
  23. package/components/empty-state.js +22 -22
  24. package/components/field.d.ts +16 -0
  25. package/components/field.js +63 -42
  26. package/components/file-dropzone.d.ts +15 -4
  27. package/components/file-dropzone.js +100 -64
  28. package/components/filter-bar.d.ts +44 -0
  29. package/components/filter-bar.js +89 -0
  30. package/components/filters.d.ts +37 -0
  31. package/components/filters.js +129 -0
  32. package/components/index.d.ts +4 -0
  33. package/components/index.js +526 -510
  34. package/components/input-field.d.ts +1 -1
  35. package/components/input-field.js +24 -22
  36. package/components/modal.d.ts +2 -1
  37. package/components/modal.js +120 -106
  38. package/components/panel.js +26 -27
  39. package/components/popover.d.ts +6 -1
  40. package/components/popover.js +74 -64
  41. package/components/sidebar.d.ts +15 -0
  42. package/components/sidebar.js +166 -129
  43. package/components/sparkline.d.ts +30 -0
  44. package/components/sparkline.js +69 -0
  45. package/components/table.d.ts +8 -0
  46. package/components/table.js +357 -350
  47. package/components/tabs.d.ts +6 -1
  48. package/components/tabs.js +28 -31
  49. package/demo/components/add-to-artifact.js +6 -2
  50. package/examples/README.md +5 -2
  51. package/examples/call-logs-screen.tsx +381 -0
  52. package/examples/campaign-analysis-screen.tsx +180 -0
  53. package/examples/campaigns-screen.tsx +497 -0
  54. package/examples/guardrails-settings-screen.tsx +123 -0
  55. package/fonts/geist-variable.woff2 +0 -0
  56. package/fonts.css +12 -17
  57. package/lib/icons.js +3 -3
  58. package/llms.txt +162 -30
  59. package/manifest.json +11604 -7878
  60. package/package.json +1 -1
  61. package/styles.css +102 -59
  62. package/theme.css +81 -37
  63. package/fonts/aribau-grotesk-medium.woff2 +0 -0
  64. package/fonts/aribau-grotesk-regular.woff2 +0 -0
@@ -1,13 +1,13 @@
1
1
  "use client";
2
- import { jsx as i, jsxs as y } from "react/jsx-runtime";
3
- import * as a from "react";
4
- import { createPortal as E } from "react-dom";
5
- import { MotionConfig as z, AnimatePresence as N, motion as w } from "motion/react";
6
- import { Close as R } from "../lib/icons.js";
7
- import { cva as j } from "class-variance-authority";
2
+ import { jsx as i, jsxs as d, Fragment as E } from "react/jsx-runtime";
3
+ import * as s from "react";
4
+ import { createPortal as R } from "react-dom";
5
+ import { MotionConfig as N, AnimatePresence as k, motion as x } from "motion/react";
6
+ import { Close as j } from "../lib/icons.js";
7
+ import { cva as F } from "class-variance-authority";
8
8
  import { cn as n } from "../lib/cn.js";
9
- import { springSheet as l, drawerOffset as h, drawerBackdropVariants as F } from "../lib/motion.js";
10
- const k = j(
9
+ import { springSheet as l, drawerOffset as g, drawerBackdropVariants as M } from "../lib/motion.js";
10
+ const D = F(
11
11
  [
12
12
  "relative flex flex-col",
13
13
  "bg-elevated text-foreground"
@@ -42,17 +42,17 @@ const k = j(
42
42
  ],
43
43
  defaultVariants: { side: "right", size: "md" }
44
44
  }
45
- ), A = {
45
+ ), S = {
46
46
  right: "justify-end items-stretch",
47
47
  left: "justify-start items-stretch",
48
48
  bottom: "justify-center items-end"
49
- }, B = {
49
+ }, A = {
50
50
  sm: "25%",
51
51
  md: "33.333333%",
52
52
  lg: "50%",
53
53
  xl: "66.666667%"
54
54
  };
55
- function D({
55
+ function z({
56
56
  onClick: t,
57
57
  className: e
58
58
  }) {
@@ -71,43 +71,43 @@ function D({
71
71
  "[&_svg]:size-4 [&_svg]:shrink-0",
72
72
  e
73
73
  ),
74
- children: /* @__PURE__ */ i(R, { "aria-hidden": !0 })
74
+ children: /* @__PURE__ */ i(j, { "aria-hidden": !0 })
75
75
  }
76
76
  );
77
77
  }
78
- function G({
78
+ function W({
79
79
  open: t,
80
80
  onOpenChange: e,
81
81
  side: r,
82
- size: x,
82
+ size: f,
83
83
  className: c,
84
- children: v,
85
- "aria-label": g
84
+ children: u,
85
+ "aria-label": v
86
86
  }) {
87
- const d = r ?? "right", m = a.useRef(null), s = a.useRef(null);
88
- return a.useEffect(() => {
87
+ const m = r ?? "right", w = s.useRef(null), o = s.useRef(null);
88
+ return s.useEffect(() => {
89
89
  if (!t) return;
90
- s.current = document.activeElement;
90
+ o.current = document.activeElement;
91
91
  const p = document.body.style.overflow;
92
92
  document.body.style.overflow = "hidden";
93
- const f = (o) => {
94
- o.key === "Escape" && (o.stopPropagation(), e(!1));
93
+ const h = (a) => {
94
+ a.key === "Escape" && (a.stopPropagation(), e(!1));
95
95
  };
96
- document.addEventListener("keydown", f);
97
- const u = requestAnimationFrame(() => {
98
- var o;
99
- (o = m.current) == null || o.focus();
96
+ document.addEventListener("keydown", h);
97
+ const b = requestAnimationFrame(() => {
98
+ var a;
99
+ (a = w.current) == null || a.focus();
100
100
  });
101
101
  return () => {
102
- var o, b;
103
- document.removeEventListener("keydown", f), document.body.style.overflow = p, cancelAnimationFrame(u), (b = (o = s.current) == null ? void 0 : o.focus) == null || b.call(o);
102
+ var a, y;
103
+ document.removeEventListener("keydown", h), document.body.style.overflow = p, cancelAnimationFrame(b), (y = (a = o.current) == null ? void 0 : a.focus) == null || y.call(a);
104
104
  };
105
- }, [t, e]), E(
106
- /* @__PURE__ */ i(z, { reducedMotion: "user", children: /* @__PURE__ */ i(N, { children: t && /* @__PURE__ */ y("div", { className: n("fixed inset-0 z-50 flex", A[d]), children: [
105
+ }, [t, e]), R(
106
+ /* @__PURE__ */ i(N, { reducedMotion: "user", children: /* @__PURE__ */ i(k, { children: t && /* @__PURE__ */ d("div", { className: n("fixed inset-0 z-50 flex", S[m]), children: [
107
107
  /* @__PURE__ */ i(
108
- w.div,
108
+ x.div,
109
109
  {
110
- variants: F,
110
+ variants: M,
111
111
  initial: "hidden",
112
112
  animate: "visible",
113
113
  exit: "hidden",
@@ -117,27 +117,27 @@ function G({
117
117
  },
118
118
  "backdrop"
119
119
  ),
120
- /* @__PURE__ */ y(
121
- w.div,
120
+ /* @__PURE__ */ d(
121
+ x.div,
122
122
  {
123
- ref: m,
124
- initial: h[d],
123
+ ref: w,
124
+ initial: g[m],
125
125
  animate: { transform: "translate3d(0, 0, 0)", opacity: 1, transition: l },
126
- exit: { ...h[d], pointerEvents: "none", transition: l },
126
+ exit: { ...g[m], pointerEvents: "none", transition: l },
127
127
  role: "dialog",
128
128
  "aria-modal": "true",
129
- "aria-label": g,
129
+ "aria-label": v,
130
130
  tabIndex: -1,
131
- className: n(k({ side: d, size: x }), "relative outline-none", c),
131
+ className: n(D({ side: m, size: f }), "relative outline-none", c),
132
132
  children: [
133
133
  /* @__PURE__ */ i(
134
- D,
134
+ z,
135
135
  {
136
136
  onClick: () => e(!1),
137
137
  className: "right-4 top-4"
138
138
  }
139
139
  ),
140
- v
140
+ u
141
141
  ]
142
142
  },
143
143
  "panel"
@@ -146,59 +146,62 @@ function G({
146
146
  document.body
147
147
  );
148
148
  }
149
- function L({
149
+ function B({
150
150
  open: t,
151
151
  onOpenChange: e,
152
152
  dismissible: r = !0,
153
- side: x,
153
+ side: f,
154
154
  size: c,
155
- containerClassName: v,
156
- className: g,
157
- children: d,
158
- "aria-label": m
155
+ containerClassName: u,
156
+ className: v,
157
+ children: m,
158
+ "aria-label": w
159
159
  }) {
160
- const s = x ?? "right", p = c ?? "md", f = a.useRef(null);
161
- return a.useEffect(() => {
160
+ const o = f ?? "right", p = c ?? "md", h = s.useRef(null);
161
+ return s.useEffect(() => {
162
162
  if (!t || !r) return;
163
- const u = (o) => {
164
- o.key === "Escape" && e(!1);
163
+ const b = (a) => {
164
+ a.key === "Escape" && e(!1);
165
165
  };
166
- return document.addEventListener("keydown", u), () => document.removeEventListener("keydown", u);
167
- }, [t, e, r]), /* @__PURE__ */ i(z, { reducedMotion: "user", children: /* @__PURE__ */ i(N, { initial: !1, children: t && /* @__PURE__ */ i(
168
- w.div,
166
+ return document.addEventListener("keydown", b), () => document.removeEventListener("keydown", b);
167
+ }, [t, e, r]), /* @__PURE__ */ i(N, { reducedMotion: "user", children: /* @__PURE__ */ i(k, { initial: !1, children: t && /* @__PURE__ */ i(
168
+ x.div,
169
169
  {
170
- initial: s === "bottom" ? { height: "0%" } : { width: 0 },
171
- animate: s === "bottom" ? { height: B[p], transition: l } : { width: "auto", transition: l },
172
- exit: s === "bottom" ? { height: "0%", pointerEvents: "none", transition: l } : { width: 0, pointerEvents: "none", transition: l },
170
+ initial: o === "bottom" ? { height: "0%" } : { width: 0 },
171
+ animate: o === "bottom" ? { height: A[p], transition: l } : { width: "auto", transition: l },
172
+ exit: o === "bottom" ? { height: "0%", pointerEvents: "none", transition: l } : { width: 0, pointerEvents: "none", transition: l },
173
173
  className: n(
174
174
  "shrink-0 overflow-hidden",
175
- s === "bottom" ? "w-full" : "h-full",
176
- v
175
+ o === "bottom" ? "w-full" : "h-full",
176
+ u
177
177
  ),
178
- children: /* @__PURE__ */ y(
179
- w.aside,
178
+ children: /* @__PURE__ */ d(
179
+ x.aside,
180
180
  {
181
- ref: f,
182
- initial: h[s],
181
+ ref: h,
182
+ initial: g[o],
183
183
  animate: { transform: "translate3d(0, 0, 0)", opacity: 1, transition: l },
184
- exit: { ...h[s], pointerEvents: "none", transition: l },
184
+ exit: { ...g[o], pointerEvents: "none", transition: l },
185
185
  role: "complementary",
186
- "aria-label": m,
186
+ "aria-label": w,
187
187
  className: n(
188
- k({ side: s, size: c }),
189
- "relative shrink-0 overflow-hidden rounded-lg border-0 bg-card shadow-none outline-none",
190
- s === "bottom" && "h-full",
191
- g
188
+ D({ side: o, size: c }),
189
+ "relative shrink-0 overflow-hidden rounded-none border-0 bg-card shadow-none outline-none",
190
+ o === "right" && "border-l border-border",
191
+ o === "left" && "border-r border-border",
192
+ o === "bottom" && "border-t border-border",
193
+ o === "bottom" && "h-full",
194
+ v
192
195
  ),
193
196
  children: [
194
197
  r && /* @__PURE__ */ i(
195
- D,
198
+ z,
196
199
  {
197
200
  onClick: () => e(!1),
198
201
  className: "right-2 top-1"
199
202
  }
200
203
  ),
201
- d
204
+ m
202
205
  ]
203
206
  }
204
207
  )
@@ -206,16 +209,30 @@ function L({
206
209
  "inline-drawer-slot"
207
210
  ) }) });
208
211
  }
209
- const J = L, M = a.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
212
+ const X = B, K = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
210
213
  "div",
211
214
  {
212
215
  ref: r,
213
- className: n("flex flex-col gap-1 px-6 py-4 pr-14", t),
216
+ "data-slot": "drawer-header",
217
+ className: n(
218
+ "flex shrink-0 flex-col gap-1 border-b border-border px-6 py-5 pr-14",
219
+ t
220
+ ),
221
+ ...e
222
+ }
223
+ ));
224
+ K.displayName = "DrawerHeader";
225
+ const L = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
226
+ "p",
227
+ {
228
+ ref: r,
229
+ "data-slot": "drawer-kicker",
230
+ className: n("m-0 text-xs uppercase tracking-wide text-on-white-secondary", t),
214
231
  ...e
215
232
  }
216
233
  ));
217
- M.displayName = "DrawerHeader";
218
- const V = a.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
234
+ L.displayName = "DrawerKicker";
235
+ const V = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
219
236
  "h2",
220
237
  {
221
238
  ref: r,
@@ -224,34 +241,81 @@ const V = a.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
224
241
  }
225
242
  ));
226
243
  V.displayName = "DrawerTitle";
227
- const I = a.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
244
+ const I = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
245
+ "div",
246
+ {
247
+ ref: r,
248
+ "data-slot": "drawer-meta",
249
+ className: n(
250
+ "mt-2 flex flex-wrap items-center gap-2 text-m text-on-white-secondary tabular-nums",
251
+ t
252
+ ),
253
+ ...e
254
+ }
255
+ ));
256
+ I.displayName = "DrawerMeta";
257
+ const P = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
228
258
  "div",
229
259
  {
230
260
  ref: r,
231
261
  tabIndex: 0,
232
- className: n("flex-1 overflow-y-auto px-6 py-4 text-xs text-foreground", t),
262
+ "data-slot": "drawer-body",
263
+ className: n(
264
+ "min-h-0 flex-1 overflow-y-auto overscroll-contain px-6 py-6 text-xs text-foreground outline-none focus-visible:ring-3 focus-visible:ring-ring focus-visible:ring-inset",
265
+ t
266
+ ),
233
267
  ...e
234
268
  }
235
269
  ));
236
- I.displayName = "DrawerBody";
237
- const P = a.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
270
+ P.displayName = "DrawerBody";
271
+ const C = s.forwardRef(
272
+ ({ className: t, title: e, count: r, children: f, ...c }, u) => /* @__PURE__ */ d(
273
+ "section",
274
+ {
275
+ ref: u,
276
+ "data-slot": "drawer-section",
277
+ "aria-label": typeof e == "string" ? e : void 0,
278
+ className: n("flex shrink-0 flex-col gap-3", t),
279
+ ...c,
280
+ children: [
281
+ /* @__PURE__ */ d("h3", { className: "m-0 text-m font-medium text-on-white-primary", children: [
282
+ e,
283
+ r != null && /* @__PURE__ */ d(E, { children: [
284
+ " ",
285
+ /* @__PURE__ */ d("span", { className: "font-normal text-on-white-secondary", children: [
286
+ "· ",
287
+ r
288
+ ] })
289
+ ] })
290
+ ] }),
291
+ f
292
+ ]
293
+ }
294
+ )
295
+ );
296
+ C.displayName = "DrawerSection";
297
+ const H = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ i(
238
298
  "div",
239
299
  {
240
300
  ref: r,
301
+ "data-slot": "drawer-footer",
241
302
  className: n(
242
- "flex items-center justify-end gap-2 px-6 py-4",
303
+ "flex shrink-0 items-center justify-end gap-2 border-t border-border px-6 py-4",
243
304
  t
244
305
  ),
245
306
  ...e
246
307
  }
247
308
  ));
248
- P.displayName = "DrawerFooter";
309
+ H.displayName = "DrawerFooter";
249
310
  export {
250
- L as Drawer,
251
- I as DrawerBody,
252
- P as DrawerFooter,
253
- M as DrawerHeader,
311
+ B as Drawer,
312
+ P as DrawerBody,
313
+ H as DrawerFooter,
314
+ K as DrawerHeader,
315
+ L as DrawerKicker,
316
+ I as DrawerMeta,
317
+ C as DrawerSection,
254
318
  V as DrawerTitle,
255
- J as InlineDrawer,
256
- G as ModalDrawer
319
+ X as InlineDrawer,
320
+ W as ModalDrawer
257
321
  };
@@ -3,7 +3,8 @@ import * as React from "react";
3
3
  * EmptyState — the "nothing here yet" placeholder.
4
4
  *
5
5
  * Two registers, chosen by which visual slot you fill:
6
- * - `icon` (default): a compact icon-in-a-circle for an in-panel empty list.
6
+ * - `icon` (default): a compact bare icon for an in-panel empty list (icons
7
+ * never sit on a tile or fill).
7
8
  * - `illustration`: a larger soft graphic for a full empty *screen*, with a
8
9
  * bigger title and more breathing room — the calm, centred pattern.
9
10
  *
@@ -15,7 +16,7 @@ import * as React from "react";
15
16
  * accent — and re-theme with the system since every fill flows from a token.
16
17
  */
17
18
  export interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
18
- /** Compact icon (rendered inside a muted circle). Ignored if `illustration` is set. */
19
+ /** Compact bare icon (24px, muted, no circle). Ignored if `illustration` is set. */
19
20
  icon?: React.ReactNode;
20
21
  /** Larger soft graphic for a full empty screen (see the Empty* illustrations). */
21
22
  illustration?: React.ReactNode;
@@ -4,8 +4,8 @@ import * as x from "react";
4
4
  import { Inbox as g } from "../lib/icons.js";
5
5
  import { cn as s } from "../lib/cn.js";
6
6
  const f = x.forwardRef(
7
- ({ className: r, icon: c, illustration: i, title: n, description: d, action: o, ...m }, h) => {
8
- const l = i != null;
7
+ ({ className: r, icon: d, illustration: l, title: n, description: c, action: o, ...m }, h) => {
8
+ const a = l != null;
9
9
  return /* @__PURE__ */ t(
10
10
  "div",
11
11
  {
@@ -14,30 +14,30 @@ const f = x.forwardRef(
14
14
  // No fill: the empty state is outlined by a dashed WG5 edge on
15
15
  // whatever surface it sits on.
16
16
  "flex flex-col items-center rounded-lg border border-dashed border-border-strong px-6 text-center",
17
- l ? "gap-5 py-16" : "gap-3 py-12",
17
+ a ? "gap-5 py-16" : "gap-3 py-12",
18
18
  r
19
19
  ),
20
20
  ...m,
21
21
  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 }) }),
22
+ a ? l : /* @__PURE__ */ e("span", { className: "inline-flex items-center justify-center text-muted-foreground [&_svg]:size-6", children: d ?? /* @__PURE__ */ e(g, { "aria-hidden": !0 }) }),
23
23
  /* @__PURE__ */ t("div", { className: "flex flex-col gap-1.5", children: [
24
24
  /* @__PURE__ */ e(
25
25
  "p",
26
26
  {
27
27
  className: s(
28
- l ? "text-lg font-medium text-foreground" : "font-normal"
28
+ a ? "text-lg font-medium text-foreground" : "font-normal"
29
29
  ),
30
30
  children: n
31
31
  }
32
32
  ),
33
- d && /* @__PURE__ */ e(
33
+ c && /* @__PURE__ */ e(
34
34
  "p",
35
35
  {
36
36
  className: s(
37
37
  "max-w-sm text-muted-foreground",
38
- l ? "text-sm" : "text-xs"
38
+ a ? "text-sm" : "text-xs"
39
39
  ),
40
- children: d
40
+ children: c
41
41
  }
42
42
  )
43
43
  ] }),
@@ -48,9 +48,9 @@ const f = x.forwardRef(
48
48
  }
49
49
  );
50
50
  f.displayName = "EmptyState";
51
- const a = "h-28 w-auto";
51
+ const i = "h-28 w-auto";
52
52
  function y({ className: r }) {
53
- return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
53
+ return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(i, r), children: [
54
54
  /* @__PURE__ */ e(
55
55
  "rect",
56
56
  {
@@ -84,8 +84,8 @@ function y({ className: r }) {
84
84
  ] });
85
85
  }
86
86
  y.displayName = "EmptyDocuments";
87
- function u({ className: r }) {
88
- return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
87
+ function N({ className: r }) {
88
+ return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(i, r), children: [
89
89
  /* @__PURE__ */ e(
90
90
  "rect",
91
91
  {
@@ -127,9 +127,9 @@ function u({ className: r }) {
127
127
  ] })
128
128
  ] });
129
129
  }
130
- u.displayName = "EmptySearch";
131
- function N({ className: r }) {
132
- return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
130
+ N.displayName = "EmptySearch";
131
+ function p({ className: r }) {
132
+ return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(i, r), children: [
133
133
  /* @__PURE__ */ e(
134
134
  "path",
135
135
  {
@@ -155,20 +155,20 @@ function N({ className: r }) {
155
155
  )
156
156
  ] });
157
157
  }
158
- N.displayName = "EmptyConnections";
159
- function p({ className: r }) {
160
- return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(a, r), children: [
158
+ p.displayName = "EmptyConnections";
159
+ function u({ className: r }) {
160
+ return /* @__PURE__ */ t("svg", { viewBox: "0 0 140 120", role: "img", "aria-hidden": !0, className: s(i, r), children: [
161
161
  /* @__PURE__ */ e("rect", { x: "34", y: "88", width: "72", height: "3", rx: "1.5", className: "fill-border-strong" }),
162
162
  /* @__PURE__ */ e("rect", { x: "40", y: "64", width: "15", height: "24", rx: "3", className: "fill-muted" }),
163
163
  /* @__PURE__ */ e("rect", { x: "62", y: "50", width: "15", height: "38", rx: "3", className: "fill-border-strong" }),
164
164
  /* @__PURE__ */ e("rect", { x: "84", y: "34", width: "15", height: "54", rx: "3", className: "fill-brand" })
165
165
  ] });
166
166
  }
167
- p.displayName = "EmptyInsights";
167
+ u.displayName = "EmptyInsights";
168
168
  export {
169
- N as EmptyConnections,
169
+ p as EmptyConnections,
170
170
  y as EmptyDocuments,
171
- p as EmptyInsights,
172
- u as EmptySearch,
171
+ u as EmptyInsights,
172
+ N as EmptySearch,
173
173
  f as EmptyState
174
174
  };
@@ -19,6 +19,22 @@ export interface FieldProps extends React.HTMLAttributes<HTMLDivElement> {
19
19
  errorId?: string;
20
20
  /** id put on the rendered description text, for the same wiring. */
21
21
  descriptionId?: string;
22
+ /**
23
+ * Optional guidance shown from an info icon right after the label, instead
24
+ * of a helper line under the control (principle `create-modals`). Use it for
25
+ * "optional / can change later" notes that most people never need.
26
+ */
27
+ info?: React.ReactNode;
28
+ /**
29
+ * Controls at the right end of the label row, e.g. a small SegmentedControl
30
+ * that picks the source for this field ("CSV upload | Empty audience").
31
+ */
32
+ actions?: React.ReactNode;
22
33
  }
34
+ /** 20px quiet info trigger: bare icon, no tile; teal on hover/focus. */
35
+ export declare function FieldInfo({ children, label }: {
36
+ children: React.ReactNode;
37
+ label?: string;
38
+ }): React.JSX.Element;
23
39
  /** Vertical stack: label · control · (description|error). */
24
40
  export declare const Field: React.ForwardRefExoticComponent<FieldProps & React.RefAttributes<HTMLDivElement>>;