@qball-inc/react 1.0.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/index.cjs ADDED
@@ -0,0 +1,3899 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var reactSlot = require('@radix-ui/react-slot');
5
+ var react = require('react');
6
+ var RSelect = require('@radix-ui/react-select');
7
+ var cmdk = require('cmdk');
8
+ var AlertDialog = require('@radix-ui/react-alert-dialog');
9
+ var Dialog = require('@radix-ui/react-dialog');
10
+ var sonner = require('sonner');
11
+ var TabsPrimitive = require('@radix-ui/react-tabs');
12
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
13
+ var reactTable = require('@tanstack/react-table');
14
+ var d3 = require('d3');
15
+ var DropdownMenu = require('@radix-ui/react-dropdown-menu');
16
+ var Popover = require('@radix-ui/react-popover');
17
+ var Markdown = require('react-markdown');
18
+
19
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
20
+
21
+ function _interopNamespace(e) {
22
+ if (e && e.__esModule) return e;
23
+ var n = Object.create(null);
24
+ if (e) {
25
+ Object.keys(e).forEach(function (k) {
26
+ if (k !== 'default') {
27
+ var d = Object.getOwnPropertyDescriptor(e, k);
28
+ Object.defineProperty(n, k, d.get ? d : {
29
+ enumerable: true,
30
+ get: function () { return e[k]; }
31
+ });
32
+ }
33
+ });
34
+ }
35
+ n.default = e;
36
+ return Object.freeze(n);
37
+ }
38
+
39
+ var RSelect__namespace = /*#__PURE__*/_interopNamespace(RSelect);
40
+ var AlertDialog__namespace = /*#__PURE__*/_interopNamespace(AlertDialog);
41
+ var Dialog__namespace = /*#__PURE__*/_interopNamespace(Dialog);
42
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
43
+ var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
44
+ var d3__namespace = /*#__PURE__*/_interopNamespace(d3);
45
+ var DropdownMenu__namespace = /*#__PURE__*/_interopNamespace(DropdownMenu);
46
+ var Popover__namespace = /*#__PURE__*/_interopNamespace(Popover);
47
+ var Markdown__default = /*#__PURE__*/_interopDefault(Markdown);
48
+
49
+ // src/smoke/Surface.tsx
50
+ function Surface({ children, style }) {
51
+ const base = {
52
+ background: "var(--bg-surface)",
53
+ color: "var(--text-primary)",
54
+ border: "1px solid var(--border-default)"
55
+ };
56
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { ...base, ...style }, children });
57
+ }
58
+ var Button = react.forwardRef(function Button2({ variant = "primary", icon, loading, asChild, disabled, type, className, children, ...rest }, ref) {
59
+ const isDisabled = disabled === true || loading === true;
60
+ const cls = [
61
+ "btn",
62
+ `btn--${variant}`,
63
+ icon === true ? "btn--icon" : "",
64
+ loading === true ? "btn--loading" : "",
65
+ className ?? ""
66
+ ].filter(Boolean).join(" ");
67
+ if (asChild === true) {
68
+ return /* @__PURE__ */ jsxRuntime.jsx(
69
+ reactSlot.Slot,
70
+ {
71
+ ref,
72
+ className: cls,
73
+ "aria-busy": loading === true ? true : void 0,
74
+ "aria-disabled": isDisabled ? true : void 0,
75
+ ...rest,
76
+ children
77
+ }
78
+ );
79
+ }
80
+ return /* @__PURE__ */ jsxRuntime.jsx(
81
+ "button",
82
+ {
83
+ ref,
84
+ type: type ?? "button",
85
+ className: cls,
86
+ disabled: isDisabled,
87
+ "aria-busy": loading === true ? true : void 0,
88
+ ...rest,
89
+ children
90
+ }
91
+ );
92
+ });
93
+ var Input = react.forwardRef(function Input2({ numeric, type, inputMode, className, "aria-invalid": ariaInvalid, ...rest }, ref) {
94
+ const invalid = ariaInvalid === true || ariaInvalid === "true";
95
+ const cls = [
96
+ "input",
97
+ numeric === true ? "num" : "",
98
+ invalid ? "input--error" : "",
99
+ className ?? ""
100
+ ].filter(Boolean).join(" ");
101
+ return /* @__PURE__ */ jsxRuntime.jsx(
102
+ "input",
103
+ {
104
+ ref,
105
+ type: type ?? "text",
106
+ inputMode: inputMode ?? (numeric === true ? "decimal" : void 0),
107
+ className: cls,
108
+ "aria-invalid": ariaInvalid,
109
+ ...rest
110
+ }
111
+ );
112
+ });
113
+ function Field({ label, helpText, errorText, required, children }) {
114
+ const baseId = react.useId();
115
+ const controlId = `${baseId}-control`;
116
+ const helpId = helpText !== void 0 ? `${baseId}-help` : void 0;
117
+ const errorId = errorText !== void 0 ? `${baseId}-error` : void 0;
118
+ const ownDescribedBy = [errorId, helpId].filter((v) => v !== void 0 && v !== "").join(" ");
119
+ const childDescribedBy = children.props["aria-describedby"];
120
+ const describedBy = [childDescribedBy, ownDescribedBy].filter((v) => v !== void 0 && v !== "").join(" ") || void 0;
121
+ const control = react.cloneElement(children, {
122
+ id: controlId,
123
+ "aria-invalid": errorText !== void 0 ? true : children.props["aria-invalid"],
124
+ "aria-describedby": describedBy
125
+ });
126
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "field", children: [
127
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "field__label", htmlFor: controlId, children: [
128
+ label,
129
+ required === true ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "field__req", children: " *" }) : null
130
+ ] }),
131
+ control,
132
+ helpText !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "field__help", id: helpId, children: helpText }) : null,
133
+ errorText !== void 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "field__error", id: errorId, role: "alert", children: [
134
+ /* @__PURE__ */ jsxRuntime.jsxs(
135
+ "svg",
136
+ {
137
+ width: "13",
138
+ height: "13",
139
+ viewBox: "0 0 24 24",
140
+ fill: "none",
141
+ stroke: "currentColor",
142
+ strokeWidth: "1.8",
143
+ strokeLinecap: "round",
144
+ strokeLinejoin: "round",
145
+ "aria-hidden": "true",
146
+ children: [
147
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
148
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8v4" }),
149
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16h.01" })
150
+ ]
151
+ }
152
+ ),
153
+ errorText
154
+ ] }) : null
155
+ ] });
156
+ }
157
+ var Select = react.forwardRef(function Select2({ value, defaultValue, onValueChange, placeholder, disabled, children, className, ...rest }, ref) {
158
+ const triggerCls = ["select", className ?? ""].filter(Boolean).join(" ");
159
+ return /* @__PURE__ */ jsxRuntime.jsxs(
160
+ RSelect__namespace.Root,
161
+ {
162
+ ...value !== void 0 ? { value } : {},
163
+ ...defaultValue !== void 0 ? { defaultValue } : {},
164
+ ...onValueChange !== void 0 ? { onValueChange } : {},
165
+ ...disabled !== void 0 ? { disabled } : {},
166
+ children: [
167
+ /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.Trigger, { ref, className: triggerCls, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.Value, { placeholder }) }),
168
+ /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.Content, { className: "menu", position: "popper", sideOffset: 4, children: /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.Viewport, { children }) }) })
169
+ ]
170
+ }
171
+ );
172
+ });
173
+ var SelectItem = react.forwardRef(function SelectItem2({ value, disabled, children, className }, ref) {
174
+ const itemCls = ["menu__item", className ?? ""].filter(Boolean).join(" ");
175
+ return /* @__PURE__ */ jsxRuntime.jsxs(
176
+ RSelect__namespace.Item,
177
+ {
178
+ ref,
179
+ className: itemCls,
180
+ value,
181
+ ...disabled !== void 0 ? { disabled } : {},
182
+ children: [
183
+ /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.ItemText, { children }),
184
+ /* @__PURE__ */ jsxRuntime.jsx(RSelect__namespace.ItemIndicator, { className: "menu__check", children: /* @__PURE__ */ jsxRuntime.jsx(
185
+ "svg",
186
+ {
187
+ width: "15",
188
+ height: "15",
189
+ viewBox: "0 0 24 24",
190
+ fill: "none",
191
+ stroke: "currentColor",
192
+ strokeWidth: "2",
193
+ strokeLinecap: "round",
194
+ strokeLinejoin: "round",
195
+ "aria-hidden": "true",
196
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 6 9 17l-5-5" })
197
+ }
198
+ ) })
199
+ ]
200
+ }
201
+ );
202
+ });
203
+ var Switch = react.forwardRef(function Switch2({ checked, onCheckedChange, onChange, disabled, className, children, ...rest }, ref) {
204
+ const labelCls = ["switch", className ?? ""].filter(Boolean).join(" ");
205
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: labelCls, children: [
206
+ /* @__PURE__ */ jsxRuntime.jsx(
207
+ "input",
208
+ {
209
+ ref,
210
+ type: "checkbox",
211
+ role: "switch",
212
+ checked,
213
+ disabled,
214
+ onChange: (event) => {
215
+ onCheckedChange?.(event.target.checked);
216
+ onChange?.(event);
217
+ },
218
+ ...rest
219
+ }
220
+ ),
221
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "switch__ui", "aria-hidden": "true" }),
222
+ children
223
+ ] });
224
+ });
225
+ var SegmentedContext = react.createContext(null);
226
+ function Segmented({
227
+ value,
228
+ defaultValue,
229
+ onValueChange,
230
+ children,
231
+ className,
232
+ "aria-label": ariaLabel
233
+ }) {
234
+ const [internal, setInternal] = react.useState(defaultValue);
235
+ const isControlled = value !== void 0;
236
+ const current = isControlled ? value : internal;
237
+ const onSelect = (next) => {
238
+ if (next === current) return;
239
+ if (!isControlled) setInternal(next);
240
+ onValueChange?.(next);
241
+ };
242
+ const groupCls = ["segmented", className ?? ""].filter(Boolean).join(" ");
243
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: groupCls, role: "group", "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(SegmentedContext.Provider, { value: { value: current, onSelect }, children }) });
244
+ }
245
+ var SegmentedItem = react.forwardRef(
246
+ function SegmentedItem2({ value, children, onClick, ...rest }, ref) {
247
+ const ctx = react.useContext(SegmentedContext);
248
+ if (ctx === null) {
249
+ throw new Error("SegmentedItem must be rendered inside a <Segmented>.");
250
+ }
251
+ const pressed = ctx.value === value;
252
+ return /* @__PURE__ */ jsxRuntime.jsx(
253
+ "button",
254
+ {
255
+ ref,
256
+ type: "button",
257
+ "aria-pressed": pressed,
258
+ onClick: (event) => {
259
+ ctx.onSelect(value);
260
+ onClick?.(event);
261
+ },
262
+ ...rest,
263
+ children
264
+ }
265
+ );
266
+ }
267
+ );
268
+ function IconBase({
269
+ size = 24,
270
+ strokeWidth = 1.5,
271
+ className,
272
+ title,
273
+ children,
274
+ filled = false,
275
+ ...rest
276
+ }) {
277
+ const titleId = react.useId();
278
+ const labelled = title !== void 0 || rest["aria-label"] !== void 0;
279
+ const cls = ["ic", className].filter(Boolean).join(" ");
280
+ return /* @__PURE__ */ jsxRuntime.jsxs(
281
+ "svg",
282
+ {
283
+ viewBox: "0 0 24 24",
284
+ width: size,
285
+ height: size,
286
+ fill: filled ? "currentColor" : "none",
287
+ stroke: filled ? void 0 : "currentColor",
288
+ strokeWidth: filled ? void 0 : strokeWidth,
289
+ strokeLinecap: filled ? void 0 : "round",
290
+ strokeLinejoin: filled ? void 0 : "round",
291
+ className: cls,
292
+ ...rest,
293
+ role: labelled ? "img" : void 0,
294
+ "aria-hidden": labelled ? void 0 : true,
295
+ "aria-labelledby": title !== void 0 ? titleId : void 0,
296
+ children: [
297
+ title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { id: titleId, children: title }) : null,
298
+ children
299
+ ]
300
+ }
301
+ );
302
+ }
303
+ function ChevronUp(props) {
304
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m18 15-6-6-6 6" }) });
305
+ }
306
+ function ChevronDown(props) {
307
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 9 6 6 6-6" }) });
308
+ }
309
+ function ChevronLeft(props) {
310
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m15 18-6-6 6-6" }) });
311
+ }
312
+ function ChevronRight(props) {
313
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 18 6-6-6-6" }) });
314
+ }
315
+ function ArrowUp(props) {
316
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
317
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m5 12 7-7 7 7" }),
318
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 19V5" })
319
+ ] });
320
+ }
321
+ function ArrowDown(props) {
322
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
323
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14" }),
324
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m19 12-7 7-7-7" })
325
+ ] });
326
+ }
327
+ function ArrowLeft(props) {
328
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
329
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m12 19-7-7 7-7" }),
330
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 12H5" })
331
+ ] });
332
+ }
333
+ function ArrowRight(props) {
334
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
335
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14" }),
336
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m12 5 7 7-7 7" })
337
+ ] });
338
+ }
339
+ function ArrowUpRight(props) {
340
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
341
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 7h10v10" }),
342
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 17 17 7" })
343
+ ] });
344
+ }
345
+ function ArrowUpLeft(props) {
346
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
347
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 17V7h10" }),
348
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 17 7 7" })
349
+ ] });
350
+ }
351
+ function ArrowDownRight(props) {
352
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
353
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m7 7 10 10" }),
354
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 7v10H7" })
355
+ ] });
356
+ }
357
+ function ArrowDownLeft(props) {
358
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
359
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 7 7 17" }),
360
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 17H7V7" })
361
+ ] });
362
+ }
363
+ function ExternalLink(props) {
364
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
365
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 3h6v6" }),
366
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 14 21 3" }),
367
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" })
368
+ ] });
369
+ }
370
+ function Menu(props) {
371
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
372
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 5h16" }),
373
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 12h16" }),
374
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 19h16" })
375
+ ] });
376
+ }
377
+ function X(props) {
378
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
379
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6 6 18" }),
380
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 6 12 12" })
381
+ ] });
382
+ }
383
+ function SearchIcon(props) {
384
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
385
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 21-4.34-4.34" }),
386
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" })
387
+ ] });
388
+ }
389
+ function Plus(props) {
390
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
391
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14" }),
392
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14" })
393
+ ] });
394
+ }
395
+ function Minus(props) {
396
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14" }) });
397
+ }
398
+ function SquarePen(props) {
399
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
400
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
401
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z" })
402
+ ] });
403
+ }
404
+ function Trash2(props) {
405
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
406
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 11v6" }),
407
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 11v6" }),
408
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }),
409
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 6h18" }),
410
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
411
+ ] });
412
+ }
413
+ function Download(props) {
414
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
415
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 15V3" }),
416
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
417
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m7 10 5 5 5-5" })
418
+ ] });
419
+ }
420
+ function Upload(props) {
421
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
422
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 3v12" }),
423
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m17 8-5-5-5 5" }),
424
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" })
425
+ ] });
426
+ }
427
+ function Copy(props) {
428
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
429
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }),
430
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })
431
+ ] });
432
+ }
433
+ function Share2(props) {
434
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
435
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "18", cy: "5", r: "3" }),
436
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "6", cy: "12", r: "3" }),
437
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "18", cy: "19", r: "3" }),
438
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "8.59", x2: "15.42", y1: "13.51", y2: "17.49" }),
439
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "15.41", x2: "8.59", y1: "6.51", y2: "10.49" })
440
+ ] });
441
+ }
442
+ function Funnel(props) {
443
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z" }) });
444
+ }
445
+ function ArrowUpDown(props) {
446
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
447
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 16-4 4-4-4" }),
448
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 20V4" }),
449
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m3 8 4-4 4 4" }),
450
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 4v16" })
451
+ ] });
452
+ }
453
+ function Settings(props) {
454
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
455
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" }),
456
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3" })
457
+ ] });
458
+ }
459
+ function RefreshCw(props) {
460
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
461
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }),
462
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 3v5h-5" }),
463
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }),
464
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 16H3v5" })
465
+ ] });
466
+ }
467
+ function Check(props) {
468
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 6 9 17l-5-5" }) });
469
+ }
470
+ function Send(props) {
471
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
472
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z" }),
473
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21.854 2.147-10.94 10.939" })
474
+ ] });
475
+ }
476
+ function Eye(props) {
477
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
478
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }),
479
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3" })
480
+ ] });
481
+ }
482
+ function EyeOff(props) {
483
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
484
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }),
485
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.084 14.158a3 3 0 0 1-4.242-4.242" }),
486
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }),
487
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m2 2 20 20" })
488
+ ] });
489
+ }
490
+ function Bell(props) {
491
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
492
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.268 21a2 2 0 0 0 3.464 0" }),
493
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" })
494
+ ] });
495
+ }
496
+ function BellOff(props) {
497
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
498
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10.268 21a2 2 0 0 0 3.464 0" }),
499
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742" }),
500
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m2 2 20 20" }),
501
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05" })
502
+ ] });
503
+ }
504
+ function Ellipsis(props) {
505
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
506
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "1" }),
507
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "19", cy: "12", r: "1" }),
508
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "5", cy: "12", r: "1" })
509
+ ] });
510
+ }
511
+ function EllipsisVertical(props) {
512
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
513
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "1" }),
514
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "5", r: "1" }),
515
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "19", r: "1" })
516
+ ] });
517
+ }
518
+ function Save(props) {
519
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
520
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z" }),
521
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7" }),
522
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 3v4a1 1 0 0 0 1 1h7" })
523
+ ] });
524
+ }
525
+ function Info(props) {
526
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
527
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
528
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16v-4" }),
529
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8h.01" })
530
+ ] });
531
+ }
532
+ function TriangleAlert(props) {
533
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
534
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }),
535
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 9v4" }),
536
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 17h.01" })
537
+ ] });
538
+ }
539
+ function CircleX(props) {
540
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
541
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
542
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m15 9-6 6" }),
543
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 9 6 6" })
544
+ ] });
545
+ }
546
+ function CircleCheck(props) {
547
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
548
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
549
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 12 2 2 4-4" })
550
+ ] });
551
+ }
552
+ function CircleCheckBig(props) {
553
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
554
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21.801 10A10 10 0 1 1 17 3.335" }),
555
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 11 3 3L22 4" })
556
+ ] });
557
+ }
558
+ function Clock(props) {
559
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
560
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
561
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6v6l4 2" })
562
+ ] });
563
+ }
564
+ function Loader(props) {
565
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
566
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2v4" }),
567
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m16.2 7.8 2.9-2.9" }),
568
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 12h4" }),
569
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m16.2 16.2 2.9 2.9" }),
570
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 18v4" }),
571
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4.9 19.1 2.9-2.9" }),
572
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h4" }),
573
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4.9 4.9 2.9 2.9" })
574
+ ] });
575
+ }
576
+ function Sun(props) {
577
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
578
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "4" }),
579
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2v2" }),
580
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 20v2" }),
581
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4.93 4.93 1.41 1.41" }),
582
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m17.66 17.66 1.41 1.41" }),
583
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h2" }),
584
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 12h2" }),
585
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6.34 17.66-1.41 1.41" }),
586
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m19.07 4.93-1.41 1.41" })
587
+ ] });
588
+ }
589
+ function Moon(props) {
590
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }) });
591
+ }
592
+ function Lock(props) {
593
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
594
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2" }),
595
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
596
+ ] });
597
+ }
598
+ function LockOpen(props) {
599
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
600
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2" }),
601
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 9.9-1" })
602
+ ] });
603
+ }
604
+ function CircleQuestionMark(props) {
605
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
606
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
607
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }),
608
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 17h.01" })
609
+ ] });
610
+ }
611
+ function Ban(props) {
612
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
613
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
614
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.929 4.929 19.07 19.071" })
615
+ ] });
616
+ }
617
+ function CheckCheck(props) {
618
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
619
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6 7 17l-5-5" }),
620
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m22 10-7.5 7.5L13 16" })
621
+ ] });
622
+ }
623
+ function OctagonAlert(props) {
624
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
625
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16h.01" }),
626
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8v4" }),
627
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z" })
628
+ ] });
629
+ }
630
+ function Play(props) {
631
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z" }) });
632
+ }
633
+ function Pause(props) {
634
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
635
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "3", width: "5", height: "18", rx: "1" }),
636
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "5", y: "3", width: "5", height: "18", rx: "1" })
637
+ ] });
638
+ }
639
+ function Square(props) {
640
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }) });
641
+ }
642
+ function Globe(props) {
643
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
644
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
645
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }),
646
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h20" })
647
+ ] });
648
+ }
649
+ function Image(props) {
650
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
651
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2" }),
652
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "9", r: "2" }),
653
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" })
654
+ ] });
655
+ }
656
+ function File(props) {
657
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
658
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }),
659
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 2v5a1 1 0 0 0 1 1h5" })
660
+ ] });
661
+ }
662
+ function Link(props) {
663
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
664
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }),
665
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })
666
+ ] });
667
+ }
668
+ function Package(props) {
669
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
670
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z" }),
671
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 22V12" }),
672
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "3.29 7 12 12 20.71 7" }),
673
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m7.5 4.27 9 5.15" })
674
+ ] });
675
+ }
676
+ function Rocket(props) {
677
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
678
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" }),
679
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09" }),
680
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z" }),
681
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05" })
682
+ ] });
683
+ }
684
+ function Grid3x3(props) {
685
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
686
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
687
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 9h18" }),
688
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 15h18" }),
689
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 3v18" }),
690
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 3v18" })
691
+ ] });
692
+ }
693
+ function NotebookPen(props) {
694
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
695
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4" }),
696
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 6h4" }),
697
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 10h4" }),
698
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 14h4" }),
699
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 18h4" }),
700
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z" })
701
+ ] });
702
+ }
703
+ function CodeXml(props) {
704
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
705
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m18 16 4-4-4-4" }),
706
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 8-4 4 4 4" }),
707
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m14.5 4-5 16" })
708
+ ] });
709
+ }
710
+ function TrendingUp(props) {
711
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
712
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 7h6v6" }),
713
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m22 7-8.5 8.5-5-5L2 17" })
714
+ ] });
715
+ }
716
+ function TrendingDown(props) {
717
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
718
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 17h6v-6" }),
719
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m22 17-8.5-8.5-5 5L2 7" })
720
+ ] });
721
+ }
722
+ function ChartLine(props) {
723
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
724
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 3v16a2 2 0 0 0 2 2h16" }),
725
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m19 9-5 5-4-4-3 3" })
726
+ ] });
727
+ }
728
+ function ChartColumn(props) {
729
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
730
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 3v16a2 2 0 0 0 2 2h16" }),
731
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 17V9" }),
732
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13 17V5" }),
733
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 17v-3" })
734
+ ] });
735
+ }
736
+ function ChartCandlestick(props) {
737
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
738
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 5v4" }),
739
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "4", height: "6", x: "7", y: "9", rx: "1" }),
740
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 15v2" }),
741
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 3v2" }),
742
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "4", height: "8", x: "15", y: "5", rx: "1" }),
743
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 13v3" }),
744
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 3v16a2 2 0 0 0 2 2h16" })
745
+ ] });
746
+ }
747
+ function ChartPie(props) {
748
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
749
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z" }),
750
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21.21 15.89A10 10 0 1 1 8 2.83" })
751
+ ] });
752
+ }
753
+ function Wallet(props) {
754
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
755
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1" }),
756
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4" })
757
+ ] });
758
+ }
759
+ function Briefcase(props) {
760
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
761
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16" }),
762
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "20", height: "14", x: "2", y: "6", rx: "2" })
763
+ ] });
764
+ }
765
+ function Calendar(props) {
766
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
767
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 2v4" }),
768
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 2v4" }),
769
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
770
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 10h18" })
771
+ ] });
772
+ }
773
+ function Bookmark(props) {
774
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z" }) });
775
+ }
776
+ function Percent(props) {
777
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
778
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19", x2: "5", y1: "5", y2: "19" }),
779
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "6.5", cy: "6.5", r: "2.5" }),
780
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "17.5", cy: "17.5", r: "2.5" })
781
+ ] });
782
+ }
783
+ function DollarSign(props) {
784
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
785
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", x2: "12", y1: "2", y2: "22" }),
786
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" })
787
+ ] });
788
+ }
789
+ function Activity(props) {
790
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" }) });
791
+ }
792
+ function Target(props) {
793
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
794
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
795
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "6" }),
796
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "2" })
797
+ ] });
798
+ }
799
+ function Scale(props) {
800
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
801
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 3v18" }),
802
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m19 8 3 8a5 5 0 0 1-6 0zV7" }),
803
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1" }),
804
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m5 8 3 8a5 5 0 0 1-6 0zV7" }),
805
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 21h10" })
806
+ ] });
807
+ }
808
+ function Banknote(props) {
809
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
810
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "20", height: "12", x: "2", y: "6", rx: "2" }),
811
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "2" }),
812
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 12h.01M18 12h.01" })
813
+ ] });
814
+ }
815
+ function AiSparkle(props) {
816
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
817
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" }),
818
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 2v4" }),
819
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 4h-4" }),
820
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "4", cy: "20", r: "2" })
821
+ ] });
822
+ }
823
+ function Bot(props) {
824
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
825
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8V4H8" }),
826
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "16", height: "12", x: "4", y: "8", rx: "2" }),
827
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 14h2" }),
828
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 14h2" }),
829
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 13v2" }),
830
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 13v2" })
831
+ ] });
832
+ }
833
+ function BotMessageSquare(props) {
834
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
835
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6V2H8" }),
836
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 11v2" }),
837
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h2" }),
838
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 12h2" }),
839
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 16a2 2 0 0 1-2 2H8.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 4 20.286V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2z" }),
840
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 11v2" })
841
+ ] });
842
+ }
843
+ function Cpu(props) {
844
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
845
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 20v2" }),
846
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2v2" }),
847
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 20v2" }),
848
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 2v2" }),
849
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h2" }),
850
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 17h2" }),
851
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 7h2" }),
852
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 12h2" }),
853
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 17h2" }),
854
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 7h2" }),
855
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 20v2" }),
856
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 2v2" }),
857
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2" }),
858
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "8", y: "8", width: "8", height: "8", rx: "1" })
859
+ ] });
860
+ }
861
+ function AgentStocky(props) {
862
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
863
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6 8.6 2.25" }),
864
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6 15.4 2.25" }),
865
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8.6", cy: "2.25", r: "1.05", fill: "currentColor" }),
866
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "15.4", cy: "2.25", r: "1.05", fill: "currentColor" }),
867
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "6", width: "18", height: "15", rx: "3.4" }),
868
+ /* @__PURE__ */ jsxRuntime.jsx(
869
+ "rect",
870
+ {
871
+ x: "5.25",
872
+ y: "8.25",
873
+ width: "13.5",
874
+ height: "10.1",
875
+ rx: "1.9",
876
+ fill: "currentColor",
877
+ opacity: "0.12"
878
+ }
879
+ ),
880
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9.45", cy: "13.2", r: "1.46", fill: "currentColor" }),
881
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "14.55", cy: "13.2", r: "1.46", fill: "currentColor" }),
882
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.1 21v1.5M16.9 21v1.5" })
883
+ ] });
884
+ }
885
+ function AgentOrb(props) {
886
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
887
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3" }),
888
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.6 7.6a8 8 0 0 0 0 8.8" }),
889
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.4 7.6a8 8 0 0 1 0 8.8" }),
890
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.8 5a12 12 0 0 0 0 14" }),
891
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20.2 5a12 12 0 0 1 0 14" })
892
+ ] });
893
+ }
894
+ function AgentDroid(props) {
895
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
896
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12a7 7 0 0 1 14 0v5a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2z" }),
897
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5V3.5" }),
898
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "2.6", r: "1" }),
899
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "8", y: "11.5", width: "8", height: "3.6", rx: "1.8" })
900
+ ] });
901
+ }
902
+ function AgentHex(props) {
903
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
904
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m12 3 7.5 4.3v8.6L12 20.2 4.5 15.9V7.3z" }),
905
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9.6", cy: "11.4", r: "1" }),
906
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "14.4", cy: "11.4", r: "1" }),
907
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.6 15h4.8" })
908
+ ] });
909
+ }
910
+ function GitHub(props) {
911
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" }) });
912
+ }
913
+ function NPM(props) {
914
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z" }) });
915
+ }
916
+ function Figma(props) {
917
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.852 8.981h-4.588V0h4.588c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.491-4.49 4.491zM12.735 7.51h3.117c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-3.117V7.51zm0 1.471H8.148c-2.476 0-4.49-2.014-4.49-4.49S5.672 0 8.148 0h4.588v8.981zm-4.587-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.354 3.02 3.019 3.02h3.117V1.471H8.148zm4.587 15.019H8.148c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.98zM8.148 8.981c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V8.981H8.148zM8.172 24c-2.489 0-4.515-2.014-4.515-4.49s2.014-4.49 4.49-4.49h4.588v4.441c0 2.503-2.047 4.539-4.563 4.539zm-.024-7.51a3.023 3.023 0 0 0-3.019 3.019c0 1.665 1.365 3.019 3.044 3.019 1.705 0 3.093-1.376 3.093-3.068v-2.97H8.148zm7.704 0h-.098c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h.098c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.49-4.49 4.49zm-.097-7.509c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h.098c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-.098z" }) });
918
+ }
919
+ function Notion(props) {
920
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z" }) });
921
+ }
922
+ function Vercel(props) {
923
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m12 1.608 12 20.784H0Z" }) });
924
+ }
925
+ function ChromeWebStore(props) {
926
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 1.637v19.09c0 .9.736 1.636 1.636 1.636h.131a10.4 10.4 0 0 1-.13-1.636 10.3 10.3 0 0 1 1.667-5.64l4.202 7.276h1.128A3.77 3.77 0 0 1 12 16.958a3.77 3.77 0 0 1 3.366 5.406h1.048a4.7 4.7 0 0 0-1.587-5.406h6.83a10.34 10.34 0 0 1 .577 5.406h.13c.9 0 1.636-.737 1.636-1.637V1.637Zm9.273 2.181h5.454a1.09 1.09 0 1 1 0 2.182H9.273a1.09 1.09 0 1 1 0-2.182M12 10.364a10.36 10.36 0 0 1 9.233 5.652H12a4.71 4.71 0 0 0-4.677 4.149L3.91 14.25A10.34 10.34 0 0 1 12 10.364" }) });
927
+ }
928
+ function VSCode(props) {
929
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.583.54a1.467 1.467 0 0 0-.441 2.032c2.426 3.758 2.999 6.592 2.75 9.075-1.004 4.756-3.187 5.721-5.094 5.721-1.863 0-1.364-3.065.036-3.962.836-.522 1.906-.861 2.728-.861.814 0 1.474-.658 1.474-1.47 0-.812-.66-1.47-1.474-1.47-.96 0-1.901.202-2.78.545.18-.847.246-1.762.014-2.735-.352-1.477-1.367-2.889-3.128-4.257a1.476 1.476 0 0 0-2.069.256c-.5.64-.384 1.564.259 2.063 1.435 1.114 1.908 1.939 2.07 2.618.162.679.032 1.407-.293 2.408-.416 1.349-.9 2.553-1.11 3.708-.105.568-.114 1.187-.14 1.68-1.034-1.006-1.438-2.336-1.438-4.279 0-.811-.66-1.47-1.474-1.47-.814.001-1.473.659-1.473 1.47 0 2.654.776 5.179 2.855 6.863 1.883 1.793 6.67 1.13 6.67 4.01 0 .812 1.19 1.208 2.004 1.208.834 0 1.885-.558 1.885-1.208 0-3.267 3.443-5.253 9.11-5.244A1.472 1.472 0 0 0 24 15.773 1.472 1.472 0 0 0 22.53 14.3c-.388 0-.765.013-1.138.035.634-1.49.915-3.13.857-4.903a1.473 1.473 0 0 0-1.522-1.42 1.472 1.472 0 0 0-1.425 1.517c.076 2.32-.01 4.393-1.74 5.485-.49.31-1.062.58-1.604.58.42-1.145.738-2.353.869-3.655.083-.83.091-1.818-.003-2.585-.148-1.188-.325-2.535.126-3.55.405-.874 1.313-1.24 2.645-1.24.814 0 1.473-.659 1.473-1.47 0-.811-.659-1.47-1.473-1.47-1.98 0-3.481 1.042-4.332 2.3-.445-.95-.987-1.929-1.642-2.943a1.474 1.474 0 0 0-2.037-.44z" }) });
930
+ }
931
+ function Linear(props) {
932
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z" }) });
933
+ }
934
+ function LinkedIn(props) {
935
+ return /* @__PURE__ */ jsxRuntime.jsxs(IconBase, { ...props, children: [
936
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-4 0v7h-4v-7a6 6 0 0 1 6-6z" }),
937
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "4", height: "12", x: "2", y: "9" }),
938
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "4", cy: "4", r: "2" })
939
+ ] });
940
+ }
941
+ function XTwitter(props) {
942
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z" }) });
943
+ }
944
+ function YouTube(props) {
945
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z" }) });
946
+ }
947
+ function Google(props) {
948
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z" }) });
949
+ }
950
+ function Reddit(props) {
951
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z" }) });
952
+ }
953
+ function OpenAI(props) {
954
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z" }) });
955
+ }
956
+ function Anthropic(props) {
957
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z" }) });
958
+ }
959
+ function Claude(props) {
960
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z" }) });
961
+ }
962
+ function Gemini(props) {
963
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81" }) });
964
+ }
965
+ function DeepSeek(props) {
966
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M23.748 4.651c-.254-.124-.364.113-.512.233-.051.04-.094.09-.137.137-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.155-.708-.311-.955-.65-.172-.24-.219-.509-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.094.172.187.129.323-.082.28-.18.553-.266.833-.055.179-.137.218-.328.14a5.5 5.5 0 0 1-1.737-1.179c-.857-.828-1.631-1.743-2.597-2.46a12 12 0 0 0-.689-.47c-.985-.957.13-1.743.387-1.836.27-.098.094-.433-.778-.428-.872.003-1.67.295-2.687.685a3 3 0 0 1-.465.136 9.6 9.6 0 0 0-2.883-.101c-1.885.21-3.39 1.1-4.497 2.622C.082 8.776-.231 10.854.152 13.02c.403 2.284 1.568 4.175 3.36 5.653 1.857 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.132-.284 4.994-1.86.47.234.962.328 1.78.398.629.058 1.235-.031 1.705-.129.735-.155.684-.836.418-.961-2.155-1.004-1.682-.595-2.112-.926 1.095-1.295 2.768-3.598 3.284-6.733.05-.346.115-.834.108-1.114-.004-.171.035-.238.23-.257a4.2 4.2 0 0 0 1.545-.475c1.397-.763 1.96-2.016 2.093-3.517.02-.23-.004-.467-.247-.588M11.58 18.168c-2.088-1.642-3.101-2.183-3.52-2.16-.39.024-.32.472-.234.763.09.288.207.487.371.74.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.168-1.361-.801-2.5-1.86-3.301-3.306-.775-1.393-1.225-2.888-1.299-4.482-.02-.385.094-.522.477-.592a4.7 4.7 0 0 1 1.53-.038c2.131.311 3.946 1.264 5.467 2.774.868.86 1.525 1.887 2.202 2.89.72 1.066 1.494 2.082 2.48 2.915.348.291.626.513.892.677-.802.09-2.14.109-3.055-.615zm1.001-6.44a.306.306 0 0 1 .415-.287.3.3 0 0 1 .113.074.3.3 0 0 1 .086.214c0 .17-.136.307-.308.307a.303.303 0 0 1-.306-.307m3.11 1.596c-.2.081-.4.151-.591.16a1.25 1.25 0 0 1-.798-.254c-.274-.23-.47-.358-.551-.758a1.7 1.7 0 0 1 .015-.588c.07-.327-.007-.537-.238-.727-.188-.156-.426-.199-.689-.199a.6.6 0 0 1-.254-.078.253.253 0 0 1-.114-.358 1 1 0 0 1 .192-.21c.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.392.451.462.576.685.915.176.264.336.536.446.848.066.194-.02.353-.25.45" }) });
967
+ }
968
+ function Moonshot(props) {
969
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m1.053 16.91 9.538 2.55a21 20.981 0 0 0 .06 2.031l5.956 1.592a12 11.99 0 0 1-15.554-6.172m-1.02-5.79 11.352 3.035a21 20.981 0 0 0-.469 2.01l10.817 2.89a12 11.99 0 0 1-1.845 2.004L.658 15.918a12 11.99 0 0 1-.625-4.796m1.593-5.146L13.573 9.17a21 20.981 0 0 0-1.01 1.874l11.297 3.02a21 20.981 0 0 1-.67 2.362l-11.55-3.087L.125 10.26a12 11.99 0 0 1 1.499-4.285ZM6.067 1.58l11.285 3.016a21 20.981 0 0 0-1.688 1.719l7.824 2.091a21 20.981 0 0 1 .513 2.664L2.107 5.218a12 11.99 0 0 1 3.96-3.638M21.68 4.866 7.222 1.003A12 11.99 0 0 1 21.68 4.866" }) });
970
+ }
971
+ function GLM(props) {
972
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsxs("g", { fillRule: "evenodd", children: [
973
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19.028 3.853a1.31 1.31 0 101.309 1.309 1.31 1.31 0 00-1.31-1.31zm.594 1.987a.664.664 0 11.001-1.329.664.664 0 01-.001 1.329z" }),
974
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19.67 4.814a.348.348 0 000 .695.348.348 0 000-.695zM14.117 16.317a.037.037 0 00-.027-.061c-.314-.005-1.499-.093-2.105-1.082a2.088 2.088 0 01-.089-2.027.04.04 0 000-.033l-1.005-1.81c-.008-.016-.027-.02-.044-.017-2.018.396-3.194 2.104-2.838 3.788.096.458.285.864.578 1.237.748.95 1.859 1.26 2.675 1.235 1.69-.05 2.63-.977 2.856-1.23zM4.766 6.906a9.903 9.903 0 012.487-2.153L5.63 1.829a.58.58 0 00-.514-.298l-4.809.04a.31.31 0 00-.268.46l3.62 6.525c.41-.756.823-1.311 1.106-1.65zM17.52 10.93c-.422.01-.824-.01-1.044.027-.183.031-.657.121-1.14.574a.037.037 0 00.016.062c.329.087.633.237.928.416.63.383 1.205 1.346 1.383 1.8.01.03.051.032.066.004l1.72-3.27c.015-.03-.015-.064-.047-.051-.806.328-1.476.43-1.883.439h.001zM23.687 1.512l-4.546.037a.58.58 0 00-.507.306l-.126.27c.364-.009 2.426.152 4.158 2.308l1.298-2.467a.31.31 0 00-.277-.455v.001zM10.846 21.497l.843 1.517a.31.31 0 00.533.016l1.31-2.064a8.27 8.27 0 01-2.686.53z" }),
975
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22.327 5.379c-1.461-2.435-3.529-2.393-3.529-2.393-.951-.186-1.436-1.263-3.626-1.797-2.046-.5-3.188.112-2.368.451 1.322.548 2.075 2.73 2.462 4.374.494 2.1 1.569 2.14 2.758 2.011.924-.098 2.775-1.058 3.721-1.256 1.03-.216 1.353-.101.58-1.39h.002zm-3.373 1.538a1.757 1.757 0 11.001-3.514 1.757 1.757 0 010 3.514zM12.756 13.364c-.261.623.032 1.57 1.316 1.656.08 0 .12-.053.12-.12 0-.065-.058-.097-.12-.119-.062-.022-.654-.226-.524-.918.042-.23.248-.438.5-.533-.142-.265-.143-.622.06-.965-.343 0-1.015.194-1.353 1v-.001zM16.836 14.624c0-.684-.451-1.41-.805-1.64-.307-.107-.816.06-1.103.487.337.22.553.572.59 1.48.046 1.174-.844 2.184-2.035 2.76 1.764-.34 3.353-1.79 3.353-3.087zM6.201 16.591C2.802 12.248 4.841 6.44 9.795 4.472c-6.168 2.08-8.01 8.89-4.547 13.168 2.299 2.84 6.254 2.937 8.373 2.2-2.571-.213-5.33-.578-7.42-3.248zM15.09 10.445c.03-.012.03-.054 0-.067-.06-.028-.175-.05-.387.004-.411.102-1.42.264-1.34-.226.055-.349.614-.46 1.023-1.128.202-.33-.06-.875-.59-.875-.408 0-.828.186-1.285.67-.64.676-.766 1.31-.518 1.776.234.442.784.633 1.702.48.628-.103.82-.381 1.396-.635v.001z" }),
976
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14.685 12.364s-.492.177-.436.934c.183-.046.239-.028.488.092.114-.338.407-.623.84-.623.078 0 .155.009.23.024-.29-.219-.591-.4-1.12-.427h-.002zM18.253 9.573c-2.444.515-2.48-1.58-4.28-1.985-2.423-.544-5.526.905-6.888 3.545-.554 1.074-1.076 3.178.283 4.97-.854-2.323.434-4.032 1.264-4.702.782-.629 1.738-1.026 2.682-1.267a.035.035 0 00.027-.034c.016-.51.276-1.055.767-1.574.521-.552 1.055-.819 1.631-.819.422 0 .793.215.994.573.185.33.185.725 0 1.026-.11.18-.228.326-.345.447-.022.021-.006.06.024.06 1.132.071 2.063.347 2.893.284 3.134-.24 4.25-1.91 4.652-2.217.365-.278-2.385 1.413-3.706 1.69l.002.003z" }),
977
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.159 16.452c-.916.916-2.416 2.208-5.318 1.665-2.105-.394-3.719-3.312-3.25-6.832.252-1.883 1.712-3.64 3.082-4.206 2.995-1.24 4.57.081 5.298.897.516.579 1.106 1.773 3.014 1.757 1.456-.012 3.978-1.726 4.678-2.372.24-.221-.021-.343-.418-.308-1.514.136-2.916 1.752-4.976 1.664-1.017-.043-2.298-.742-2.75-2.25-.542-1.812-.553-2.19-1.176-2.297-.653-.112-1.648-.173-3.087.275-1.863.583-4.784 3.436-4.97 6.84-.324 5.884 2.306 8.243 6.36 8.743.459.056 1.462-.066 1.909-.162a5.727 5.727 0 001.565-.967c1.01-.908 1.626-1.918 1.77-3.376.05-.49-.069-1.14-.135-1.425-.023.302-.623 1.376-1.597 2.35v.004z" })
978
+ ] }) });
979
+ }
980
+ function Mistral(props) {
981
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z" }) });
982
+ }
983
+ function Perplexity(props) {
984
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm12.7086.0248-5.7766-5.1509V9.0618l5.7766 5.7766v6.5588zm2.8882-5.0652h-1.733v-1.9723L13.3948 8.245h7.8478v8.087z" }) });
985
+ }
986
+ function HuggingFace(props) {
987
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378 0 1.112.178 2.181.503 3.185.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284.278.173.48.408.71.694.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542.01.026.653 1.552 1.657 2.54.616.605 1.01 1.223 1.082 1.912.055.537-.096 1.059-.38 1.572.637.121 1.294.187 1.967.187.657 0 1.298-.063 1.921-.178-.287-.517-.44-1.041-.384-1.581.07-.69.465-1.307 1.081-1.913 1.004-.987 1.647-2.513 1.657-2.539.021-.074.083-.285.233-.542.09-.154.208-.323.4-.467a1.08 1.08 0 0 1 .787-.203c.359.056.604.29.762.543s.247.55.265.874v.015c.225-.34.457-.67.683-.952.23-.286.432-.52.71-.694.257-.16.547-.284.84-.285a.97.97 0 0 1 .524.151c.228.143.373.388.43.625l.006.04a10.3 10.3 0 0 0 .534-3.273c0-5.731-4.678-10.378-10.449-10.378M8.327 6.583a1.5 1.5 0 0 1 .713.174 1.487 1.487 0 0 1 .617 2.013c-.183.343-.762-.214-1.102-.094-.38.134-.532.914-.917.71a1.487 1.487 0 0 1 .69-2.803m7.486 0a1.487 1.487 0 0 1 .689 2.803c-.385.204-.536-.576-.916-.71-.34-.12-.92.437-1.103.094a1.487 1.487 0 0 1 .617-2.013 1.5 1.5 0 0 1 .713-.174m-10.68 1.55a.96.96 0 1 1 0 1.921.96.96 0 0 1 0-1.92m13.838 0a.96.96 0 1 1 0 1.92.96.96 0 0 1 0-1.92M8.489 11.458c.588.01 1.965 1.157 3.572 1.164 1.607-.007 2.984-1.155 3.572-1.164.196-.003.305.12.305.454 0 .886-.424 2.328-1.563 3.202-.22-.756-1.396-1.366-1.63-1.32q-.011.001-.02.006l-.044.026-.01.008-.03.024q-.018.017-.035.036l-.032.04a1 1 0 0 0-.058.09l-.014.025q-.049.088-.11.19a1 1 0 0 1-.083.116 1.2 1.2 0 0 1-.173.18q-.035.029-.075.058a1.3 1.3 0 0 1-.251-.243 1 1 0 0 1-.076-.107c-.124-.193-.177-.363-.337-.444-.034-.016-.104-.008-.2.022q-.094.03-.216.087-.06.028-.125.063l-.13.074q-.067.04-.136.086a3 3 0 0 0-.135.096 3 3 0 0 0-.26.219 2 2 0 0 0-.12.121 2 2 0 0 0-.106.128l-.002.002a2 2 0 0 0-.09.132l-.001.001a1.2 1.2 0 0 0-.105.212q-.013.036-.024.073c-1.139-.875-1.563-2.317-1.563-3.203 0-.334.109-.457.305-.454m.836 10.354c.824-1.19.766-2.082-.365-3.194-1.13-1.112-1.789-2.738-1.789-2.738s-.246-.945-.806-.858-.97 1.499.202 2.362c1.173.864-.233 1.45-.685.64-.45-.812-1.683-2.896-2.322-3.295s-1.089-.175-.938.647 2.822 2.813 2.562 3.244-1.176-.506-1.176-.506-2.866-2.567-3.49-1.898.473 1.23 2.037 2.16c1.564.932 1.686 1.178 1.464 1.53s-3.675-2.511-4-1.297c-.323 1.214 3.524 1.567 3.287 2.405-.238.839-2.71-1.587-3.216-.642-.506.946 3.49 2.056 3.522 2.064 1.29.33 4.568 1.028 5.713-.624m5.349 0c-.824-1.19-.766-2.082.365-3.194 1.13-1.112 1.789-2.738 1.789-2.738s.246-.945.806-.858.97 1.499-.202 2.362c-1.173.864.233 1.45.685.64.451-.812 1.683-2.896 2.322-3.295s1.089-.175.938.647-2.822 2.813-2.562 3.244 1.176-.506 1.176-.506 2.866-2.567 3.49-1.898-.473 1.23-2.037 2.16c-1.564.932-1.686 1.178-1.464 1.53s3.675-2.511 4-1.297c.323 1.214-3.524 1.567-3.287 2.405.238.839 2.71-1.587 3.216-.642.506.946-3.49 2.056-3.522 2.064-1.29.33-4.568 1.028-5.713-.624" }) });
988
+ }
989
+ function Ollama(props) {
990
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z" }) });
991
+ }
992
+ function Qwen(props) {
993
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M23.919 14.545 20.817 9.17l1.47-2.544a.56.56 0 0 0 0-.566l-1.633-2.83a.57.57 0 0 0-.49-.283h-6.207L12.487.402a.57.57 0 0 0-.49-.284H8.732a.56.56 0 0 0-.49.284L5.139 5.775h-2.94a.56.56 0 0 0-.49.284L.077 8.887a.56.56 0 0 0 0 .567L3.18 14.83l-1.47 2.545a.56.56 0 0 0 0 .566l1.634 2.83a.57.57 0 0 0 .49.283h6.205l1.47 2.545a.57.57 0 0 0 .49.284h3.266a.57.57 0 0 0 .49-.284l3.104-5.375h2.94a.57.57 0 0 0 .49-.283l1.634-2.828a.55.55 0 0 0-.004-.568M8.733.686l1.634 2.828-1.634 2.828H21.8L20.164 9.17H7.425L5.63 6.06Zm1.306 19.801-6.205-.002 1.634-2.83h3.265L2.201 6.344h3.267q3.182 5.517 6.367 11.032zm10.124-5.66L18.53 12l-6.532 11.315-1.634-2.83c2.129-3.673 4.25-7.351 6.373-11.028h3.592l3.102 5.374z" }) });
994
+ }
995
+ function Meta(props) {
996
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBase, { filled: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z" }) });
997
+ }
998
+ var SecretInput = react.forwardRef(function SecretInput2({
999
+ value,
1000
+ onChange,
1001
+ onSet,
1002
+ onRemove,
1003
+ label,
1004
+ isSet = false,
1005
+ disabled = false,
1006
+ placeholder,
1007
+ name,
1008
+ helpText,
1009
+ required = false,
1010
+ setLabel = "Set",
1011
+ updateLabel = "Update",
1012
+ rotateLabel = "Rotate",
1013
+ removeLabel = "Remove",
1014
+ cancelLabel = "Cancel",
1015
+ showSecretLabel = "Show secret",
1016
+ hideSecretLabel = "Hide secret"
1017
+ }, ref) {
1018
+ const [showSecret, setShowSecret] = react.useState(false);
1019
+ const [editing, setEditing] = react.useState(false);
1020
+ const baseId = react.useId();
1021
+ const inputId = `${baseId}-secret`;
1022
+ const helpId = helpText !== void 0 ? `${baseId}-help` : void 0;
1023
+ const editable = isSet !== true || editing;
1024
+ const canCommit = value.trim().length > 0;
1025
+ const commit = () => {
1026
+ if (!canCommit) return;
1027
+ onSet(value);
1028
+ setEditing(false);
1029
+ setShowSecret(false);
1030
+ };
1031
+ const cancelRotate = () => {
1032
+ setEditing(false);
1033
+ setShowSecret(false);
1034
+ };
1035
+ const remove = () => {
1036
+ onRemove();
1037
+ setShowSecret(false);
1038
+ };
1039
+ const handleKeyDown = (event) => {
1040
+ if (event.key === "Enter" && editable && canCommit) {
1041
+ event.preventDefault();
1042
+ commit();
1043
+ }
1044
+ };
1045
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "field", children: [
1046
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "field__label", htmlFor: inputId, children: [
1047
+ label,
1048
+ required ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "field__req", children: " *" }) : null
1049
+ ] }),
1050
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "input-wrap", children: [
1051
+ /* @__PURE__ */ jsxRuntime.jsx(
1052
+ "input",
1053
+ {
1054
+ ref,
1055
+ id: inputId,
1056
+ name,
1057
+ className: "input num",
1058
+ type: showSecret ? "text" : "password",
1059
+ value,
1060
+ placeholder,
1061
+ disabled,
1062
+ readOnly: !editable,
1063
+ autoComplete: "new-password",
1064
+ "aria-describedby": helpId,
1065
+ onChange: (event) => {
1066
+ onChange(event.target.value);
1067
+ },
1068
+ onKeyDown: handleKeyDown
1069
+ }
1070
+ ),
1071
+ /* @__PURE__ */ jsxRuntime.jsx(
1072
+ "button",
1073
+ {
1074
+ type: "button",
1075
+ className: "input-wrap__affix",
1076
+ "aria-label": showSecret ? hideSecretLabel : showSecretLabel,
1077
+ "aria-pressed": showSecret,
1078
+ disabled,
1079
+ onClick: () => {
1080
+ setShowSecret((shown) => !shown);
1081
+ },
1082
+ children: showSecret ? /* @__PURE__ */ jsxRuntime.jsx(EyeOff, { size: 16 }) : /* @__PURE__ */ jsxRuntime.jsx(Eye, { size: 16 })
1083
+ }
1084
+ )
1085
+ ] }),
1086
+ helpText !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "field__help", id: helpId, children: helpText }) : null,
1087
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: "var(--space-sm)" }, children: editable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1088
+ /* @__PURE__ */ jsxRuntime.jsx(
1089
+ "button",
1090
+ {
1091
+ type: "button",
1092
+ className: "btn btn--primary",
1093
+ disabled: disabled || !canCommit,
1094
+ onClick: commit,
1095
+ children: isSet ? updateLabel : setLabel
1096
+ }
1097
+ ),
1098
+ isSet && editing ? /* @__PURE__ */ jsxRuntime.jsx(
1099
+ "button",
1100
+ {
1101
+ type: "button",
1102
+ className: "btn btn--ghost",
1103
+ disabled,
1104
+ onClick: cancelRotate,
1105
+ children: cancelLabel
1106
+ }
1107
+ ) : null
1108
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1109
+ /* @__PURE__ */ jsxRuntime.jsx(
1110
+ "button",
1111
+ {
1112
+ type: "button",
1113
+ className: "btn btn--secondary",
1114
+ disabled,
1115
+ onClick: () => {
1116
+ setEditing(true);
1117
+ },
1118
+ children: rotateLabel
1119
+ }
1120
+ ),
1121
+ /* @__PURE__ */ jsxRuntime.jsx(
1122
+ "button",
1123
+ {
1124
+ type: "button",
1125
+ className: "btn btn--ghost",
1126
+ style: { color: "var(--data-down)" },
1127
+ disabled,
1128
+ onClick: remove,
1129
+ children: removeLabel
1130
+ }
1131
+ )
1132
+ ] }) })
1133
+ ] });
1134
+ });
1135
+ var mutedRowStyle = { padding: "var(--space-sm)", color: "var(--text-muted)" };
1136
+ function Search({
1137
+ items,
1138
+ onSelect,
1139
+ placeholder,
1140
+ emptyText = "No results found.",
1141
+ isLoading = false,
1142
+ disabled = false,
1143
+ label = "Search"
1144
+ }) {
1145
+ const { ungrouped, groups } = react.useMemo(() => {
1146
+ const ungroupedItems = [];
1147
+ const grouped = /* @__PURE__ */ new Map();
1148
+ for (const item of items) {
1149
+ if (item.group === void 0 || item.group === "") {
1150
+ ungroupedItems.push(item);
1151
+ } else {
1152
+ const bucket = grouped.get(item.group) ?? [];
1153
+ bucket.push(item);
1154
+ grouped.set(item.group, bucket);
1155
+ }
1156
+ }
1157
+ return { ungrouped: ungroupedItems, groups: grouped };
1158
+ }, [items]);
1159
+ const renderItem = (item) => (
1160
+ // cmdk keys an item's selection/highlight identity on `value`; using the
1161
+ // unique `id` (not `label`) keeps two same-label items distinct, while
1162
+ // `keywords` preserves label-based filtering through cmdk's default matcher.
1163
+ /* @__PURE__ */ jsxRuntime.jsx(
1164
+ cmdk.Command.Item,
1165
+ {
1166
+ value: item.id,
1167
+ keywords: [item.label],
1168
+ disabled,
1169
+ className: "menu__item",
1170
+ onSelect: () => {
1171
+ onSelect(item);
1172
+ },
1173
+ children: item.label
1174
+ },
1175
+ item.id
1176
+ )
1177
+ );
1178
+ return /* @__PURE__ */ jsxRuntime.jsxs(cmdk.Command, { label, children: [
1179
+ /* @__PURE__ */ jsxRuntime.jsx(
1180
+ cmdk.Command.Input,
1181
+ {
1182
+ className: "input",
1183
+ placeholder,
1184
+ "aria-label": label,
1185
+ disabled
1186
+ }
1187
+ ),
1188
+ /* @__PURE__ */ jsxRuntime.jsxs(cmdk.Command.List, { className: "menu", children: [
1189
+ isLoading ? /* @__PURE__ */ jsxRuntime.jsx(cmdk.Command.Loading, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: mutedRowStyle, children: "Loading\u2026" }) }) : null,
1190
+ /* @__PURE__ */ jsxRuntime.jsx(cmdk.Command.Empty, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: mutedRowStyle, children: emptyText }) }),
1191
+ ungrouped.map(renderItem),
1192
+ [...groups.entries()].map(([groupName, groupItems]) => /* @__PURE__ */ jsxRuntime.jsx(cmdk.Command.Group, { heading: groupName, children: groupItems.map(renderItem) }, groupName))
1193
+ ] })
1194
+ ] });
1195
+ }
1196
+ var CONTENT_STYLE = {
1197
+ position: "fixed",
1198
+ top: "50%",
1199
+ left: "50%",
1200
+ transform: "translate(-50%, -50%)",
1201
+ width: "100%",
1202
+ maxWidth: "min(92vw, 440px)"
1203
+ };
1204
+ var ALERT_HEAD_STYLE = {
1205
+ paddingBottom: "18px"
1206
+ };
1207
+ var WARN_BADGE_STYLE = {
1208
+ flex: "none",
1209
+ width: "30px",
1210
+ height: "30px",
1211
+ display: "grid",
1212
+ placeItems: "center",
1213
+ borderRadius: "var(--radius-sm)",
1214
+ background: "var(--data-down-bg)",
1215
+ color: "var(--data-down)"
1216
+ };
1217
+ var ALERT_HEAD_ROW_STYLE = {
1218
+ display: "flex",
1219
+ gap: "12px",
1220
+ alignItems: "flex-start"
1221
+ };
1222
+ var Modal = Dialog__namespace.Root;
1223
+ var ModalTrigger = Dialog__namespace.Trigger;
1224
+ var ModalContent = react.forwardRef(
1225
+ function ModalContent2({
1226
+ className,
1227
+ style,
1228
+ children,
1229
+ closeOnEscape = true,
1230
+ closeOnOverlayClick = true,
1231
+ onEscapeKeyDown,
1232
+ onPointerDownOutside,
1233
+ ...rest
1234
+ }, ref) {
1235
+ return /* @__PURE__ */ jsxRuntime.jsxs(Dialog__namespace.Portal, { children: [
1236
+ /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Overlay, { className: "scrim" }),
1237
+ /* @__PURE__ */ jsxRuntime.jsx(
1238
+ Dialog__namespace.Content,
1239
+ {
1240
+ ref,
1241
+ className: ["modal", className].filter(Boolean).join(" "),
1242
+ style: { ...CONTENT_STYLE, ...style },
1243
+ onEscapeKeyDown: (event) => {
1244
+ if (!closeOnEscape) event.preventDefault();
1245
+ onEscapeKeyDown?.(event);
1246
+ },
1247
+ onPointerDownOutside: (event) => {
1248
+ if (!closeOnOverlayClick) event.preventDefault();
1249
+ onPointerDownOutside?.(event);
1250
+ },
1251
+ ...rest,
1252
+ children
1253
+ }
1254
+ )
1255
+ ] });
1256
+ }
1257
+ );
1258
+ var ModalTitle = react.forwardRef(function ModalTitle2({ className, ...rest }, ref) {
1259
+ return /* @__PURE__ */ jsxRuntime.jsx(
1260
+ Dialog__namespace.Title,
1261
+ {
1262
+ ref,
1263
+ className: ["modal__title", className].filter(Boolean).join(" "),
1264
+ ...rest
1265
+ }
1266
+ );
1267
+ });
1268
+ var ModalDescription = react.forwardRef(function ModalDescription2({ className, ...rest }, ref) {
1269
+ return /* @__PURE__ */ jsxRuntime.jsx(
1270
+ Dialog__namespace.Description,
1271
+ {
1272
+ ref,
1273
+ className: ["modal__sub", className].filter(Boolean).join(" "),
1274
+ ...rest
1275
+ }
1276
+ );
1277
+ });
1278
+ var ModalClose = react.forwardRef(function ModalClose2({ className, children, asChild, "aria-label": ariaLabel, ...rest }, ref) {
1279
+ if (asChild === true) {
1280
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Close, { ref, asChild: true, ...rest, children });
1281
+ }
1282
+ return /* @__PURE__ */ jsxRuntime.jsx(
1283
+ Dialog__namespace.Close,
1284
+ {
1285
+ ref,
1286
+ className: ["modal__x", className].filter(Boolean).join(" "),
1287
+ "aria-label": ariaLabel ?? "Close",
1288
+ ...rest,
1289
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsx(X, { size: 16 })
1290
+ }
1291
+ );
1292
+ });
1293
+ function AlertModal({
1294
+ open,
1295
+ defaultOpen,
1296
+ onOpenChange,
1297
+ trigger,
1298
+ title,
1299
+ description,
1300
+ children,
1301
+ confirmLabel = "Confirm",
1302
+ cancelLabel = "Cancel",
1303
+ onConfirm,
1304
+ destructive = true,
1305
+ "aria-label": ariaLabel,
1306
+ style
1307
+ }) {
1308
+ return (
1309
+ // Conditional spread omits undefined props under exactOptionalPropertyTypes
1310
+ // (same idiom as Select's optional passthrough).
1311
+ /* @__PURE__ */ jsxRuntime.jsxs(
1312
+ AlertDialog__namespace.Root,
1313
+ {
1314
+ ...open !== void 0 ? { open } : {},
1315
+ ...defaultOpen !== void 0 ? { defaultOpen } : {},
1316
+ ...onOpenChange !== void 0 ? { onOpenChange } : {},
1317
+ children: [
1318
+ trigger !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(AlertDialog__namespace.Trigger, { asChild: true, children: trigger }) : null,
1319
+ /* @__PURE__ */ jsxRuntime.jsxs(AlertDialog__namespace.Portal, { children: [
1320
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDialog__namespace.Overlay, { className: "scrim" }),
1321
+ /* @__PURE__ */ jsxRuntime.jsxs(
1322
+ AlertDialog__namespace.Content,
1323
+ {
1324
+ className: "modal",
1325
+ style: { ...CONTENT_STYLE, maxWidth: "min(92vw, 360px)", ...style },
1326
+ "aria-label": ariaLabel,
1327
+ children: [
1328
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal__head", style: ALERT_HEAD_STYLE, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: ALERT_HEAD_ROW_STYLE, children: [
1329
+ destructive ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: WARN_BADGE_STYLE, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(TriangleAlert, { size: 17, strokeWidth: 1.6 }) }) : null,
1330
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1331
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDialog__namespace.Title, { className: "modal__title", children: title }),
1332
+ description !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(AlertDialog__namespace.Description, { className: "modal__sub", children: description }) : null
1333
+ ] })
1334
+ ] }) }),
1335
+ children !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal__body", children }) : null,
1336
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "modal__foot", children: [
1337
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDialog__namespace.Cancel, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "btn btn--ghost", children: cancelLabel }) }),
1338
+ /* @__PURE__ */ jsxRuntime.jsx(AlertDialog__namespace.Action, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1339
+ "button",
1340
+ {
1341
+ type: "button",
1342
+ className: destructive ? "btn btn--destructive" : "btn btn--primary",
1343
+ onClick: onConfirm,
1344
+ children: confirmLabel
1345
+ }
1346
+ ) })
1347
+ ] })
1348
+ ]
1349
+ }
1350
+ )
1351
+ ] })
1352
+ ]
1353
+ }
1354
+ )
1355
+ );
1356
+ }
1357
+ var DEFAULT_DURATION_MS = 4e3;
1358
+ function VariantIcon({ variant }) {
1359
+ switch (variant) {
1360
+ case "success":
1361
+ return /* @__PURE__ */ jsxRuntime.jsx(CircleCheckBig, { size: 17, strokeWidth: 1.6 });
1362
+ case "warning":
1363
+ return /* @__PURE__ */ jsxRuntime.jsx(TriangleAlert, { size: 17, strokeWidth: 1.6 });
1364
+ case "error":
1365
+ return /* @__PURE__ */ jsxRuntime.jsx(CircleX, { size: 17, strokeWidth: 1.6 });
1366
+ case "info":
1367
+ default:
1368
+ return /* @__PURE__ */ jsxRuntime.jsx(Info, { size: 17, strokeWidth: 1.6 });
1369
+ }
1370
+ }
1371
+ function ToastCard({
1372
+ variant,
1373
+ title,
1374
+ description,
1375
+ onDismiss,
1376
+ dismissLabel = "Dismiss"
1377
+ }) {
1378
+ const role = variant === "error" ? "alert" : "status";
1379
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `toast toast--${variant}`, role, children: [
1380
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "toast__icon", children: /* @__PURE__ */ jsxRuntime.jsx(VariantIcon, { variant }) }),
1381
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "toast__body", children: [
1382
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "toast__title", children: title }),
1383
+ description !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "toast__msg", children: description }) : null
1384
+ ] }),
1385
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast__x", "aria-label": dismissLabel, onClick: onDismiss, children: /* @__PURE__ */ jsxRuntime.jsx(X, { size: 14, strokeWidth: 1.6 }) })
1386
+ ] });
1387
+ }
1388
+ function show(variant, title, options) {
1389
+ return sonner.toast.custom(
1390
+ (id) => /* @__PURE__ */ jsxRuntime.jsx(
1391
+ ToastCard,
1392
+ {
1393
+ variant,
1394
+ title,
1395
+ ...options?.description !== void 0 ? { description: options.description } : {},
1396
+ ...options?.dismissLabel !== void 0 ? { dismissLabel: options.dismissLabel } : {},
1397
+ onDismiss: () => {
1398
+ sonner.toast.dismiss(id);
1399
+ }
1400
+ }
1401
+ ),
1402
+ { duration: options?.duration ?? DEFAULT_DURATION_MS }
1403
+ );
1404
+ }
1405
+ var toast = {
1406
+ info: (title, options) => show("info", title, options),
1407
+ success: (title, options) => show("success", title, options),
1408
+ warning: (title, options) => show("warning", title, options),
1409
+ error: (title, options) => show("error", title, options),
1410
+ /** Dismiss a specific toast by id, or all toasts when called with no id. */
1411
+ dismiss: (id) => sonner.toast.dismiss(id)
1412
+ };
1413
+ function Toaster({ position = "top-center", toastOptions, ...rest }) {
1414
+ return /* @__PURE__ */ jsxRuntime.jsx(
1415
+ sonner.Toaster,
1416
+ {
1417
+ position,
1418
+ toastOptions: { unstyled: true, ...toastOptions },
1419
+ ...rest
1420
+ }
1421
+ );
1422
+ }
1423
+ var VARIANT_CLASS = {
1424
+ warning: "callout--warn",
1425
+ error: "callout--error",
1426
+ neutral: "callout--neutral"
1427
+ };
1428
+ var VARIANT_ROLE = {
1429
+ info: "status",
1430
+ warning: "status",
1431
+ error: "alert",
1432
+ neutral: "note"
1433
+ };
1434
+ function CalloutIcon({ variant }) {
1435
+ if (variant === "warning") return /* @__PURE__ */ jsxRuntime.jsx(TriangleAlert, { size: 17, strokeWidth: 1.6 });
1436
+ if (variant === "error") return /* @__PURE__ */ jsxRuntime.jsx(CircleX, { size: 17, strokeWidth: 1.6 });
1437
+ return /* @__PURE__ */ jsxRuntime.jsx(Info, { size: 17, strokeWidth: 1.6 });
1438
+ }
1439
+ function Callout({
1440
+ variant = "info",
1441
+ title,
1442
+ children,
1443
+ dismissible = false,
1444
+ onDismiss,
1445
+ dismissLabel = "Dismiss",
1446
+ icon = true,
1447
+ className
1448
+ }) {
1449
+ const cls = ["callout", VARIANT_CLASS[variant], className].filter(Boolean).join(" ");
1450
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, role: VARIANT_ROLE[variant], children: [
1451
+ icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "callout__icon", children: /* @__PURE__ */ jsxRuntime.jsx(CalloutIcon, { variant }) }) : null,
1452
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "callout__body", children: [
1453
+ title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "callout__title", children: title }) : null,
1454
+ children !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "callout__msg", children }) : null
1455
+ ] }),
1456
+ dismissible ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "callout__x", "aria-label": dismissLabel, onClick: onDismiss, children: /* @__PURE__ */ jsxRuntime.jsx(X, { size: 14, strokeWidth: 1.6 }) }) : null
1457
+ ] });
1458
+ }
1459
+ var SHAPE_CLASS = {
1460
+ text: "skel--text",
1461
+ line: "skel--line",
1462
+ title: "skel--title",
1463
+ block: "skel--block",
1464
+ circle: "skel--circle"
1465
+ };
1466
+ function Skeleton({
1467
+ shape = "line",
1468
+ width,
1469
+ height,
1470
+ className,
1471
+ style,
1472
+ ...rest
1473
+ }) {
1474
+ const cls = ["skel", SHAPE_CLASS[shape], className].filter(Boolean).join(" ");
1475
+ const mergedStyle = {
1476
+ ...style,
1477
+ ...width !== void 0 ? { width } : {},
1478
+ ...height !== void 0 ? { height } : {}
1479
+ };
1480
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, ...rest, className: cls, style: mergedStyle });
1481
+ }
1482
+ var SIZE_CLASS = {
1483
+ sm: "spinner--sm",
1484
+ lg: "spinner--lg"
1485
+ };
1486
+ function Spinner({ size = "md", label = "Loading", className, ...rest }) {
1487
+ const cls = ["spinner", SIZE_CLASS[size], className].filter(Boolean).join(" ");
1488
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", "aria-label": label, ...rest, className: cls });
1489
+ }
1490
+ function StateFigBody({ icon, title, body }) {
1491
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1492
+ icon !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "state-fig__icon", children: icon }) : null,
1493
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "state-fig__title", children: title }),
1494
+ body !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "state-fig__msg", children: body }) : null
1495
+ ] });
1496
+ }
1497
+ function EmptyStateFig({ icon, title, body, action, className }) {
1498
+ const cls = ["state-fig", className].filter(Boolean).join(" ");
1499
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
1500
+ /* @__PURE__ */ jsxRuntime.jsx(StateFigBody, { icon, title, body }),
1501
+ action !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "state-fig__actions", children: action }) : null
1502
+ ] });
1503
+ }
1504
+ function ErrorStateFig({
1505
+ icon,
1506
+ title,
1507
+ body,
1508
+ retry,
1509
+ retryLabel = "Retry",
1510
+ onDismiss,
1511
+ dismissLabel = "Dismiss",
1512
+ className
1513
+ }) {
1514
+ const cls = ["state-fig", "state-fig--error", className].filter(Boolean).join(" ");
1515
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
1516
+ /* @__PURE__ */ jsxRuntime.jsx(StateFigBody, { icon, title, body }),
1517
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "state-fig__actions", children: [
1518
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", onClick: retry, children: retryLabel }),
1519
+ onDismiss !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", onClick: onDismiss, children: dismissLabel }) : null
1520
+ ] })
1521
+ ] });
1522
+ }
1523
+ var DELTA_CUE = { up: "\u25B2", down: "\u25BC", flat: "\u2014" };
1524
+ var EM_DASH = "\u2014";
1525
+ function Stat({ label, value, unit, direction, delta, foot, spark, className }) {
1526
+ const cls = ["stat", className].filter(Boolean).join(" ");
1527
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
1528
+ label !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat__label", children: label }) : null,
1529
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "stat__row", children: [
1530
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat__value", children: value == null ? EM_DASH : value }),
1531
+ unit !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat__unit", children: unit }) : null,
1532
+ direction !== void 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `stat__delta stat__delta--${direction}`, children: [
1533
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: DELTA_CUE[direction] }),
1534
+ delta !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: delta }) : null
1535
+ ] }) : null
1536
+ ] }),
1537
+ spark !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat__spark", children: spark }) : null,
1538
+ foot !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat__foot", children: foot }) : null
1539
+ ] });
1540
+ }
1541
+ var VARIANT_CLASS2 = {
1542
+ warn: "meter--warn",
1543
+ over: "meter--over"
1544
+ };
1545
+ function Meter({
1546
+ value,
1547
+ max: max2 = 100,
1548
+ label,
1549
+ readout,
1550
+ variant = "normal",
1551
+ ariaLabel,
1552
+ className
1553
+ }) {
1554
+ const cls = ["meter", VARIANT_CLASS2[variant], className].filter(Boolean).join(" ");
1555
+ const raw = max2 > 0 ? value / max2 * 100 : 0;
1556
+ const pct = Math.round(Math.max(0, Math.min(100, raw)) * 100) / 100;
1557
+ const name = ariaLabel ?? (typeof label === "string" ? label : void 0);
1558
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, children: [
1559
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "meter__head", children: [
1560
+ label !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "meter__label", children: label }) : null,
1561
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "meter__val", children: readout !== void 0 ? readout : `${value} / ${max2}` })
1562
+ ] }),
1563
+ /* @__PURE__ */ jsxRuntime.jsx(
1564
+ "div",
1565
+ {
1566
+ className: "meter__track",
1567
+ role: "meter",
1568
+ "aria-valuenow": value,
1569
+ "aria-valuemin": 0,
1570
+ "aria-valuemax": max2,
1571
+ "aria-label": name,
1572
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "meter__fill", style: { width: `${pct}%` } })
1573
+ }
1574
+ )
1575
+ ] });
1576
+ }
1577
+ var VARIANT_CLASS3 = {
1578
+ info: "badge--info",
1579
+ success: "badge--success",
1580
+ warning: "badge--warn",
1581
+ error: "badge--error",
1582
+ up: "badge--up",
1583
+ down: "badge--down",
1584
+ flat: "badge--flat"
1585
+ };
1586
+ var FINANCE_CUE = {
1587
+ up: "\u25B2",
1588
+ down: "\u25BC",
1589
+ flat: "\u2014"
1590
+ };
1591
+ function Badge({ variant = "neutral", children, dot = false, className }) {
1592
+ const cls = ["badge", VARIANT_CLASS3[variant], className].filter(Boolean).join(" ");
1593
+ const cue = FINANCE_CUE[variant];
1594
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cls, children: [
1595
+ dot ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "badge__dot" }) : null,
1596
+ cue !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: cue }) : null,
1597
+ children
1598
+ ] });
1599
+ }
1600
+ function Card({
1601
+ children,
1602
+ interactive = false,
1603
+ selected = false,
1604
+ className,
1605
+ ...rest
1606
+ }) {
1607
+ const cls = [
1608
+ "card",
1609
+ interactive ? "card--interactive" : null,
1610
+ selected ? "card--selected" : null,
1611
+ className
1612
+ ].filter(Boolean).join(" ");
1613
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cls, ...rest, children });
1614
+ }
1615
+ function Divider({ className, ...rest }) {
1616
+ const cls = ["rule", className].filter(Boolean).join(" ");
1617
+ return /* @__PURE__ */ jsxRuntime.jsx("hr", { className: cls, ...rest });
1618
+ }
1619
+ var Tabs = react.forwardRef(function Tabs2({ className, ...rest }, ref) {
1620
+ return /* @__PURE__ */ jsxRuntime.jsx(
1621
+ TabsPrimitive__namespace.Root,
1622
+ {
1623
+ ref,
1624
+ className: ["tabs", className].filter(Boolean).join(" "),
1625
+ ...rest
1626
+ }
1627
+ );
1628
+ });
1629
+ var TabsList = react.forwardRef(
1630
+ function TabsList2({ className, ...rest }, ref) {
1631
+ return /* @__PURE__ */ jsxRuntime.jsx(
1632
+ TabsPrimitive__namespace.List,
1633
+ {
1634
+ ref,
1635
+ className: ["tab-list", className].filter(Boolean).join(" "),
1636
+ ...rest
1637
+ }
1638
+ );
1639
+ }
1640
+ );
1641
+ var TabsTrigger = react.forwardRef(
1642
+ function TabsTrigger2({ className, ...rest }, ref) {
1643
+ return /* @__PURE__ */ jsxRuntime.jsx(
1644
+ TabsPrimitive__namespace.Trigger,
1645
+ {
1646
+ ref,
1647
+ className: ["tab", className].filter(Boolean).join(" "),
1648
+ ...rest
1649
+ }
1650
+ );
1651
+ }
1652
+ );
1653
+ var TabsContent = react.forwardRef(
1654
+ function TabsContent2({ className, ...rest }, ref) {
1655
+ return /* @__PURE__ */ jsxRuntime.jsx(
1656
+ TabsPrimitive__namespace.Content,
1657
+ {
1658
+ ref,
1659
+ className: ["tab-panel", className].filter(Boolean).join(" "),
1660
+ ...rest
1661
+ }
1662
+ );
1663
+ }
1664
+ );
1665
+ var PAD = 2;
1666
+ var STROKE_WIDTH = 1.6;
1667
+ function round(n) {
1668
+ return (Math.round(n * 100) / 100).toString();
1669
+ }
1670
+ function buildPoints(data, width, height) {
1671
+ const midY = height / 2;
1672
+ const flat = `${round(PAD)},${round(midY)} ${round(width - PAD)},${round(midY)}`;
1673
+ const finite = data.filter((n) => Number.isFinite(n));
1674
+ if (finite.length < 2) return flat;
1675
+ const min2 = Math.min(...finite);
1676
+ const max2 = Math.max(...finite);
1677
+ const range2 = max2 - min2;
1678
+ if (range2 === 0) return flat;
1679
+ const usableW = width - PAD * 2;
1680
+ const usableH = height - PAD * 2;
1681
+ return finite.map((v, i) => {
1682
+ const x = PAD + i / (finite.length - 1) * usableW;
1683
+ const y = PAD + (1 - (v - min2) / range2) * usableH;
1684
+ return `${round(x)},${round(y)}`;
1685
+ }).join(" ");
1686
+ }
1687
+ function Sparkline({
1688
+ data,
1689
+ direction,
1690
+ ariaLabel,
1691
+ caption,
1692
+ width = 64,
1693
+ height = 20,
1694
+ className
1695
+ }) {
1696
+ const wrapCls = ["sparkline", className].filter(Boolean).join(" ");
1697
+ const points = buildPoints(data, width, height);
1698
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: wrapCls, children: [
1699
+ /* @__PURE__ */ jsxRuntime.jsx(
1700
+ "svg",
1701
+ {
1702
+ className: `trend-${direction}`,
1703
+ role: "img",
1704
+ "aria-label": ariaLabel,
1705
+ width,
1706
+ height,
1707
+ viewBox: `0 0 ${width} ${height}`,
1708
+ fill: "none",
1709
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1710
+ "polyline",
1711
+ {
1712
+ points,
1713
+ fill: "none",
1714
+ stroke: "currentColor",
1715
+ strokeWidth: STROKE_WIDTH,
1716
+ strokeLinecap: "round",
1717
+ strokeLinejoin: "round"
1718
+ }
1719
+ )
1720
+ }
1721
+ ),
1722
+ caption !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sparkline__cap", children: caption }) : null
1723
+ ] });
1724
+ }
1725
+ var TooltipProvider = TooltipPrimitive__namespace.Provider;
1726
+ var Tooltip = TooltipPrimitive__namespace.Root;
1727
+ var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
1728
+ var TooltipContent = react.forwardRef(function TooltipContent2({ className, children, sideOffset = 8, ...rest }, ref) {
1729
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
1730
+ TooltipPrimitive__namespace.Content,
1731
+ {
1732
+ ref,
1733
+ sideOffset,
1734
+ className: ["tip-pop", className].filter(Boolean).join(" "),
1735
+ ...rest,
1736
+ children: [
1737
+ children,
1738
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Arrow, { className: "tip-pop__arrow" })
1739
+ ]
1740
+ }
1741
+ ) });
1742
+ });
1743
+ var SIZE_CLASS2 = {
1744
+ sm: "avatar--sm",
1745
+ lg: "avatar--lg",
1746
+ xl: "avatar--xl"
1747
+ };
1748
+ var STATUS_CLASS = {
1749
+ offline: "avatar__status--offline",
1750
+ busy: "avatar__status--busy",
1751
+ away: "avatar__status--away"
1752
+ };
1753
+ var INITIALS_PALETTE = [
1754
+ { background: "var(--signal-bg)", color: "var(--color-signal)" },
1755
+ { background: "var(--data-info-bg)", color: "var(--data-info)" },
1756
+ { background: "var(--data-up-bg)", color: "var(--data-up)" },
1757
+ { background: "var(--data-warn-bg)", color: "var(--data-warn)" },
1758
+ { background: "var(--bg-surface)", color: "var(--text-secondary)" }
1759
+ ];
1760
+ var OVERFLOW_STYLE = {
1761
+ background: "var(--data-info-bg)",
1762
+ color: "var(--data-info)"
1763
+ };
1764
+ var SAFE_SRC_RE = /^(?:https?:\/\/|\/|\.\.?\/|data:image\/)/i;
1765
+ function initialsFrom(name) {
1766
+ const parts = name.trim().split(/\s+/).filter(Boolean);
1767
+ if (parts.length === 0) return "";
1768
+ const first = parts[0] ?? "";
1769
+ if (parts.length === 1) return first.charAt(0).toUpperCase();
1770
+ const last = parts[parts.length - 1] ?? "";
1771
+ return (first.charAt(0) + last.charAt(0)).toUpperCase();
1772
+ }
1773
+ function paletteIndex(name) {
1774
+ let sum = 0;
1775
+ for (let i = 0; i < name.length; i += 1) sum += name.charCodeAt(i);
1776
+ return sum % INITIALS_PALETTE.length;
1777
+ }
1778
+ function Avatar({
1779
+ src,
1780
+ alt,
1781
+ name,
1782
+ size = "md",
1783
+ status,
1784
+ round: round2 = false,
1785
+ className
1786
+ }) {
1787
+ const [imgFailed, setImgFailed] = react.useState(false);
1788
+ const showImage = src !== void 0 && src !== "" && SAFE_SRC_RE.test(src) && !imgFailed;
1789
+ const cls = ["avatar", SIZE_CLASS2[size], round2 ? "avatar--round" : null, className].filter(Boolean).join(" ");
1790
+ const tileStyle = !showImage && name !== void 0 ? INITIALS_PALETTE[paletteIndex(name)] : void 0;
1791
+ const statusCls = status !== void 0 ? ["avatar__status", STATUS_CLASS[status]].filter(Boolean).join(" ") : null;
1792
+ const labelProps = !showImage && name !== void 0 ? { role: "img", "aria-label": status !== void 0 ? `${name} (${status})` : name } : {};
1793
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cls, style: tileStyle, ...labelProps, children: [
1794
+ showImage ? /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt: alt ?? name ?? "", onError: () => setImgFailed(true) }) : initialsFrom(name ?? ""),
1795
+ statusCls !== null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: statusCls, "aria-hidden": "true" }) : null
1796
+ ] });
1797
+ }
1798
+ function AvatarGroup({ children, max: max2, round: round2 = false, className }) {
1799
+ const items = react.Children.toArray(children);
1800
+ const visible = max2 !== void 0 && items.length > max2 ? items.slice(0, max2) : items;
1801
+ const overflow = items.length - visible.length;
1802
+ const cls = ["avatar-group", className].filter(Boolean).join(" ");
1803
+ const tileCls = ["avatar", round2 ? "avatar--round" : null].filter(Boolean).join(" ");
1804
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cls, children: [
1805
+ visible,
1806
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tileCls, style: OVERFLOW_STYLE, role: "img", "aria-label": `${overflow} more`, children: [
1807
+ "+",
1808
+ overflow
1809
+ ] }) : null
1810
+ ] });
1811
+ }
1812
+ var FINANCE_EPSILON = 0.05;
1813
+ function financeDirection(value) {
1814
+ if (value > FINANCE_EPSILON) return "up";
1815
+ if (value < -FINANCE_EPSILON) return "down";
1816
+ return "flat";
1817
+ }
1818
+ function defaultFinanceFormat(value) {
1819
+ return `${value > 0 ? "+" : ""}${value.toFixed(2)}%`;
1820
+ }
1821
+ var ACTIONS_COLUMN_ID = "__actions";
1822
+ var NOOP = () => void 0;
1823
+ function DataTable({
1824
+ columns,
1825
+ data,
1826
+ loading = false,
1827
+ skeletonRowCount = 4,
1828
+ error,
1829
+ errorTitle = "Couldn't load data",
1830
+ onRetry,
1831
+ emptyMessage,
1832
+ actions,
1833
+ actionsAlwaysVisible = false,
1834
+ enableRowSelection,
1835
+ rowSelection,
1836
+ onRowSelectionChange,
1837
+ getRowId,
1838
+ className
1839
+ }) {
1840
+ const allColumns = react.useMemo(() => {
1841
+ if (!actions) return columns;
1842
+ const actionsColumn = {
1843
+ id: ACTIONS_COLUMN_ID,
1844
+ header: "",
1845
+ cell: ({ row }) => actions(row.original),
1846
+ meta: { numeric: true },
1847
+ enableSorting: false
1848
+ };
1849
+ return [...columns, actionsColumn];
1850
+ }, [columns, actions]);
1851
+ const table = reactTable.useReactTable({
1852
+ data,
1853
+ columns: allColumns,
1854
+ getCoreRowModel: reactTable.getCoreRowModel(),
1855
+ ...enableRowSelection !== void 0 ? { enableRowSelection } : {},
1856
+ ...getRowId !== void 0 ? { getRowId } : {},
1857
+ ...rowSelection !== void 0 ? { state: { rowSelection } } : {},
1858
+ ...onRowSelectionChange !== void 0 ? { onRowSelectionChange } : {}
1859
+ });
1860
+ const leafColumns = table.getAllLeafColumns();
1861
+ const colCount = leafColumns.length;
1862
+ const selectable = enableRowSelection !== void 0 && enableRowSelection !== false;
1863
+ const tableClass = ["dt", actionsAlwaysVisible ? "dt--actions-visible" : null, className].filter(Boolean).join(" ");
1864
+ const columnIsNumeric = leafColumns.map(
1865
+ (col) => col.columnDef.meta?.numeric === true || col.columnDef.meta?.finance === true
1866
+ );
1867
+ function renderBody() {
1868
+ if (loading) {
1869
+ return Array.from({ length: skeletonRowCount }, (_, rowIndex) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: leafColumns.map((col, colIndex) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: columnIsNumeric[colIndex] ? "num" : void 0, children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, {}) }, col.id)) }, `skeleton-${String(rowIndex)}`));
1870
+ }
1871
+ if (error !== void 0) {
1872
+ const message = typeof error === "string" ? error : error.message;
1873
+ return /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: colCount, children: /* @__PURE__ */ jsxRuntime.jsx(ErrorStateFig, { title: errorTitle, body: message, retry: onRetry ?? NOOP }) }) });
1874
+ }
1875
+ if (data.length === 0) {
1876
+ return /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: colCount, children: /* @__PURE__ */ jsxRuntime.jsx(EmptyStateFig, { title: emptyMessage ?? "No data" }) }) });
1877
+ }
1878
+ return table.getRowModel().rows.map((row) => /* @__PURE__ */ jsxRuntime.jsx("tr", { "aria-selected": selectable ? row.getIsSelected() : void 0, children: row.getVisibleCells().map((cell) => {
1879
+ const { columnDef } = cell.column;
1880
+ const meta = columnDef.meta;
1881
+ const headerLabel = typeof columnDef.header === "string" ? columnDef.header : meta?.label;
1882
+ const dataLabel = headerLabel || void 0;
1883
+ if (meta?.finance) {
1884
+ const raw = cell.getValue();
1885
+ if (typeof raw === "number") {
1886
+ const direction = financeDirection(raw);
1887
+ const format2 = meta.financeFormat ?? defaultFinanceFormat;
1888
+ return /* @__PURE__ */ jsxRuntime.jsx("td", { "data-label": dataLabel, className: `num ${direction}`, children: format2(raw) }, cell.id);
1889
+ }
1890
+ }
1891
+ return /* @__PURE__ */ jsxRuntime.jsx(
1892
+ "td",
1893
+ {
1894
+ "data-label": dataLabel,
1895
+ className: meta?.numeric || meta?.finance ? "num" : void 0,
1896
+ children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())
1897
+ },
1898
+ cell.id
1899
+ );
1900
+ }) }, row.id));
1901
+ }
1902
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dt-wrap", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: tableClass, "aria-busy": loading || void 0, children: [
1903
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsxRuntime.jsx("tr", { children: headerGroup.headers.map((header, colIndex) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: columnIsNumeric[colIndex] ? "num" : void 0, children: header.isPlaceholder ? null : reactTable.flexRender(header.column.columnDef.header, header.getContext()) }, header.id)) }, headerGroup.id)) }),
1904
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: renderBody() })
1905
+ ] }) });
1906
+ }
1907
+ var DEFAULT_WIDTH = 480;
1908
+ var DEFAULT_HEIGHT = 300;
1909
+ var ALL_RANGES = ["1D", "5D", "1M", "3M", "1Y"];
1910
+ var MARGIN = { top: 14, right: 10, bottom: 22, left: 34 };
1911
+ var MIN_BODY_HEIGHT = 1.2;
1912
+ function normalize(data) {
1913
+ const out = [];
1914
+ for (const d of data) {
1915
+ const date = d.date instanceof Date ? d.date : new Date(d.date);
1916
+ if (Number.isNaN(date.getTime())) continue;
1917
+ if (![d.open, d.high, d.low, d.close].every((n) => Number.isFinite(n))) continue;
1918
+ out.push({ date, open: d.open, high: d.high, low: d.low, close: d.close });
1919
+ }
1920
+ return out;
1921
+ }
1922
+ function Candlestick({
1923
+ data,
1924
+ range: range2,
1925
+ ranges = ALL_RANGES,
1926
+ onRangeChange,
1927
+ theme,
1928
+ width: widthProp,
1929
+ height: heightProp,
1930
+ interactive = true,
1931
+ showGrid,
1932
+ showAxis = true,
1933
+ ariaLabel = "Candlestick chart",
1934
+ onDraw,
1935
+ className
1936
+ }) {
1937
+ const containerRef = react.useRef(null);
1938
+ const svgRef = react.useRef(null);
1939
+ const [measuredWidth, setMeasuredWidth] = react.useState(null);
1940
+ const [hover, setHover] = react.useState(null);
1941
+ const bars = react.useMemo(() => normalize(data), [data]);
1942
+ const fmt = react.useMemo(
1943
+ () => ({ date: d3__namespace.timeFormat("%b %d"), price: d3__namespace.format(".2f"), axis: d3__namespace.format("~s") }),
1944
+ []
1945
+ );
1946
+ const onDrawRef = react.useRef(onDraw);
1947
+ react.useEffect(() => {
1948
+ onDrawRef.current = onDraw;
1949
+ }, [onDraw]);
1950
+ const width = widthProp ?? measuredWidth ?? DEFAULT_WIDTH;
1951
+ const height = heightProp ?? DEFAULT_HEIGHT;
1952
+ const grid = showGrid ?? interactive;
1953
+ react.useEffect(() => {
1954
+ if (widthProp != null) return;
1955
+ const el = containerRef.current;
1956
+ if (!el) return;
1957
+ const ro = new ResizeObserver((entries) => {
1958
+ const cr = entries[0]?.contentRect;
1959
+ if (cr && cr.width > 0) setMeasuredWidth(cr.width);
1960
+ });
1961
+ ro.observe(el);
1962
+ return () => {
1963
+ ro.disconnect();
1964
+ };
1965
+ }, [widthProp]);
1966
+ react.useEffect(() => {
1967
+ const svgEl = svgRef.current;
1968
+ if (!svgEl) return;
1969
+ const svg = d3__namespace.select(svgEl).attr("viewBox", `0 0 ${width} ${height}`).attr("preserveAspectRatio", "xMidYMid meet");
1970
+ svg.selectAll("*").remove();
1971
+ let overlay = null;
1972
+ if (bars.length > 0) {
1973
+ const plotBottom = height - MARGIN.bottom;
1974
+ const x = d3__namespace.scaleBand().domain(d3__namespace.range(bars.length)).range([MARGIN.left, width - MARGIN.right]).padding(0.3);
1975
+ const lo = d3__namespace.min(bars, (d) => d.low) ?? 0;
1976
+ const hi = d3__namespace.max(bars, (d) => d.high) ?? 1;
1977
+ const pad = lo === hi ? Math.abs(lo) * 0.05 || 1 : 0;
1978
+ const y = d3__namespace.scaleLinear().domain([lo - pad, hi + pad]).nice().range([plotBottom, MARGIN.top]);
1979
+ const bw = x.bandwidth();
1980
+ const cxOf = (i) => (x(i) ?? 0) + bw / 2;
1981
+ if (grid) {
1982
+ svg.append("g").selectAll("line").data(y.ticks(4)).join("line").attr("x1", MARGIN.left).attr("x2", width - MARGIN.right).attr("y1", (d) => y(d)).attr("y2", (d) => y(d)).style("stroke", "var(--border-default)").style("stroke-dasharray", "2 3");
1983
+ }
1984
+ if (showAxis) {
1985
+ const everyN = Math.max(1, Math.ceil(bars.length / 5));
1986
+ const ay = svg.append("g").attr("transform", `translate(${MARGIN.left},0)`).call(
1987
+ d3__namespace.axisLeft(y).ticks(5).tickSize(0).tickFormat((v) => fmt.axis(v))
1988
+ );
1989
+ ay.select(".domain").remove();
1990
+ const ax = svg.append("g").attr("transform", `translate(0,${plotBottom})`).call(
1991
+ d3__namespace.axisBottom(x).tickValues(x.domain().filter((_, i) => i % everyN === 0)).tickSize(0).tickFormat((i) => {
1992
+ const b = bars[i];
1993
+ return b ? fmt.date(b.date) : "";
1994
+ })
1995
+ );
1996
+ ax.select(".domain").remove();
1997
+ svg.selectAll(".tick text").style("fill", "var(--text-muted)").style("font-family", "var(--font-display)").style("font-size", "9.5px");
1998
+ svg.selectAll(".tick line").style("stroke", "var(--border-default)");
1999
+ }
2000
+ const candle = svg.append("g").selectAll("g").data(bars).join("g").attr("class", (d) => d.close >= d.open ? "trend-up" : "trend-down");
2001
+ candle.append("line").attr("x1", (_, i) => cxOf(i)).attr("x2", (_, i) => cxOf(i)).attr("y1", (d) => y(d.high)).attr("y2", (d) => y(d.low)).attr("stroke", "currentColor").attr("stroke-width", 1);
2002
+ candle.append("rect").attr("x", (_, i) => x(i) ?? 0).attr("y", (d) => y(Math.max(d.open, d.close))).attr("width", bw).attr("height", (d) => Math.max(MIN_BODY_HEIGHT, Math.abs(y(d.open) - y(d.close)))).attr("fill", "currentColor").attr("stroke", "currentColor").attr("stroke-width", 1);
2003
+ if (interactive) {
2004
+ const crosshair = svg.append("g").attr("class", "crosshair").style("opacity", 0);
2005
+ const vline = crosshair.append("line").attr("y1", MARGIN.top).attr("y2", plotBottom).style("stroke", "var(--text-muted)").style("stroke-width", 1).style("stroke-dasharray", "3 3");
2006
+ const hline = crosshair.append("line").attr("x1", MARGIN.left).attr("x2", width - MARGIN.right).style("stroke", "var(--text-muted)").style("stroke-width", 1).style("stroke-dasharray", "3 3");
2007
+ const dot = crosshair.append("circle").attr("r", 3.5).style("fill", "none").style("stroke", "var(--text-primary)").style("stroke-width", 1.5);
2008
+ const nearestIndex = (mx) => {
2009
+ const raw = Math.round((mx - MARGIN.left - bw / 2) / x.step());
2010
+ return Math.max(0, Math.min(bars.length - 1, raw));
2011
+ };
2012
+ overlay = svg.append("rect").attr("x", MARGIN.left).attr("y", MARGIN.top).attr("width", Math.max(0, width - MARGIN.right - MARGIN.left)).attr("height", Math.max(0, plotBottom - MARGIN.top)).attr("fill", "transparent").style("cursor", "crosshair");
2013
+ overlay.on("pointermove", (event) => {
2014
+ const [mx] = d3__namespace.pointer(event, svgEl);
2015
+ const index = nearestIndex(mx);
2016
+ const d = bars[index];
2017
+ if (!d) return;
2018
+ const cx = cxOf(index);
2019
+ const cy = y(d.close);
2020
+ crosshair.style("opacity", 1);
2021
+ vline.attr("x1", cx).attr("x2", cx);
2022
+ hline.attr("y1", cy).attr("y2", cy);
2023
+ dot.attr("cx", cx).attr("cy", cy);
2024
+ setHover((prev) => prev?.index === index ? prev : { index, cx, cy });
2025
+ }).on("pointerleave", () => {
2026
+ crosshair.style("opacity", 0);
2027
+ setHover(null);
2028
+ });
2029
+ }
2030
+ }
2031
+ onDrawRef.current?.();
2032
+ return () => {
2033
+ setHover(null);
2034
+ overlay?.on("pointermove", null).on("pointerleave", null);
2035
+ svg.selectAll("*").interrupt();
2036
+ svg.selectAll("*").remove();
2037
+ };
2038
+ }, [bars, range2, theme, width, height, interactive, grid, showAxis, fmt]);
2039
+ const hoverBar = hover ? bars[hover.index] : null;
2040
+ const change = hoverBar ? hoverBar.close - hoverBar.open : 0;
2041
+ const up = change >= 0;
2042
+ const pct = hoverBar && hoverBar.open !== 0 ? change / hoverBar.open * 100 : 0;
2043
+ const leftPct = hover ? hover.cx / width * 100 : 0;
2044
+ const flip = leftPct > 60;
2045
+ const wrapCls = ["candlestick", className].filter(Boolean).join(" ");
2046
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2047
+ "figure",
2048
+ {
2049
+ ref: containerRef,
2050
+ className: wrapCls,
2051
+ style: {
2052
+ position: "relative",
2053
+ margin: 0,
2054
+ display: "flex",
2055
+ flexDirection: "column",
2056
+ gap: "10px"
2057
+ },
2058
+ children: [
2059
+ ranges.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "segmented", role: "group", "aria-label": "Time range", children: ranges.map((r) => /* @__PURE__ */ jsxRuntime.jsx(
2060
+ "button",
2061
+ {
2062
+ type: "button",
2063
+ "aria-pressed": r === range2,
2064
+ onClick: () => onRangeChange?.(r),
2065
+ children: r
2066
+ },
2067
+ r
2068
+ )) }) : null,
2069
+ /* @__PURE__ */ jsxRuntime.jsx(
2070
+ "svg",
2071
+ {
2072
+ ref: svgRef,
2073
+ role: "img",
2074
+ "aria-label": ariaLabel,
2075
+ style: {
2076
+ width: "100%",
2077
+ height: "auto",
2078
+ display: "block",
2079
+ border: ".5px solid var(--border-default)",
2080
+ borderRadius: "var(--radius-md)",
2081
+ background: "var(--bg-surface)"
2082
+ }
2083
+ }
2084
+ ),
2085
+ interactive && hover && hoverBar ? /* @__PURE__ */ jsxRuntime.jsxs(
2086
+ "div",
2087
+ {
2088
+ role: "tooltip",
2089
+ "aria-hidden": "true",
2090
+ style: {
2091
+ position: "absolute",
2092
+ left: `${leftPct}%`,
2093
+ top: "8px",
2094
+ transform: flip ? "translateX(calc(-100% - 12px))" : "translateX(12px)",
2095
+ pointerEvents: "none",
2096
+ minWidth: "118px",
2097
+ padding: "8px 10px",
2098
+ background: "var(--bg-primary)",
2099
+ border: "1px solid var(--border-strong)",
2100
+ borderRadius: "var(--radius-sm)",
2101
+ fontFamily: "var(--font-display)",
2102
+ fontSize: "11px",
2103
+ lineHeight: 1.5,
2104
+ color: "var(--text-secondary)",
2105
+ zIndex: 5
2106
+ },
2107
+ children: [
2108
+ /* @__PURE__ */ jsxRuntime.jsx(
2109
+ "div",
2110
+ {
2111
+ style: {
2112
+ fontFamily: "var(--font-ui)",
2113
+ fontSize: "9.5px",
2114
+ letterSpacing: "1px",
2115
+ textTransform: "uppercase",
2116
+ color: "var(--text-muted)",
2117
+ marginBottom: "4px"
2118
+ },
2119
+ children: fmt.date(hoverBar.date)
2120
+ }
2121
+ ),
2122
+ ["open", "high", "low", "close"].map((k) => /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", gap: "14px" }, children: [
2123
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--text-muted)" }, children: k.charAt(0).toUpperCase() }),
2124
+ /* @__PURE__ */ jsxRuntime.jsx("b", { style: { color: "var(--text-primary)", fontVariantNumeric: "tabular-nums" }, children: fmt.price(hoverBar[k]) })
2125
+ ] }, k)),
2126
+ /* @__PURE__ */ jsxRuntime.jsxs(
2127
+ "div",
2128
+ {
2129
+ style: {
2130
+ marginTop: "4px",
2131
+ fontWeight: 600,
2132
+ fontVariantNumeric: "tabular-nums",
2133
+ color: up ? "var(--data-up)" : "var(--data-down)"
2134
+ },
2135
+ children: [
2136
+ up ? "\u25B2" : "\u25BC",
2137
+ " ",
2138
+ up ? "+" : "",
2139
+ fmt.price(change),
2140
+ " (",
2141
+ up ? "+" : "",
2142
+ pct.toFixed(2),
2143
+ "%)"
2144
+ ]
2145
+ }
2146
+ )
2147
+ ]
2148
+ }
2149
+ ) : null
2150
+ ]
2151
+ }
2152
+ );
2153
+ }
2154
+ var NotificationBell = react.forwardRef(
2155
+ function NotificationBell2({ className, unreadCount, children, "aria-label": ariaLabel, ...rest }, ref) {
2156
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2157
+ "button",
2158
+ {
2159
+ ref,
2160
+ type: "button",
2161
+ className: ["iconbtn", className].filter(Boolean).join(" "),
2162
+ "aria-label": ariaLabel ?? "Notifications",
2163
+ ...rest,
2164
+ children: [
2165
+ children ?? /* @__PURE__ */ jsxRuntime.jsx(Bell, { size: 19 }),
2166
+ unreadCount !== void 0 && unreadCount >= 1 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "badge-count", children: unreadCount }) : null
2167
+ ]
2168
+ }
2169
+ );
2170
+ }
2171
+ );
2172
+ var AppBar = react.forwardRef(function AppBar2({
2173
+ brand,
2174
+ nav,
2175
+ actions,
2176
+ floating,
2177
+ hidden,
2178
+ hideOnScroll,
2179
+ scrollContainer,
2180
+ className,
2181
+ style,
2182
+ ...rest
2183
+ }, ref) {
2184
+ const [scrolling, setScrolling] = react.useState(false);
2185
+ react.useEffect(() => {
2186
+ if (hideOnScroll !== true) return;
2187
+ const target = scrollContainer ?? window;
2188
+ let timer;
2189
+ function onScroll() {
2190
+ setScrolling(true);
2191
+ if (timer !== void 0) clearTimeout(timer);
2192
+ timer = setTimeout(() => setScrolling(false), 220);
2193
+ }
2194
+ target.addEventListener("scroll", onScroll, { passive: true });
2195
+ return () => {
2196
+ target.removeEventListener("scroll", onScroll);
2197
+ if (timer !== void 0) clearTimeout(timer);
2198
+ };
2199
+ }, [hideOnScroll, scrollContainer]);
2200
+ const isFloating = floating === true || hideOnScroll === true;
2201
+ const isHidden = hidden === true || scrolling;
2202
+ const floatStyle = isFloating ? {
2203
+ position: "absolute",
2204
+ top: 0,
2205
+ left: 0,
2206
+ right: 0,
2207
+ zIndex: 30,
2208
+ background: "color-mix(in oklab, var(--bg-primary) 80%, transparent)",
2209
+ backdropFilter: "blur(14px) saturate(1.15)",
2210
+ WebkitBackdropFilter: "blur(14px) saturate(1.15)",
2211
+ transition: "transform 0.34s var(--ease-out), opacity 0.28s var(--ease-out)"
2212
+ } : {};
2213
+ const hiddenStyle = isHidden ? { transform: "translateY(-130%)", opacity: 0, pointerEvents: "none" } : {};
2214
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2215
+ "header",
2216
+ {
2217
+ ref,
2218
+ className: ["appbar", className].filter(Boolean).join(" "),
2219
+ style: { ...floatStyle, ...hiddenStyle, ...style },
2220
+ "data-hidden": isHidden ? "true" : void 0,
2221
+ ...rest,
2222
+ children: [
2223
+ brand !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "appbar__brand", children: brand }) : null,
2224
+ nav !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "appnav", children: nav }) : null,
2225
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "appbar__spacer" }),
2226
+ actions !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "appbar__right", children: actions }) : null
2227
+ ]
2228
+ }
2229
+ );
2230
+ });
2231
+ var UserMenu = DropdownMenu__namespace.Root;
2232
+ var UserMenuTrigger = react.forwardRef(function UserMenuTrigger2({ className, asChild, children, ...rest }, ref) {
2233
+ if (asChild === true) {
2234
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Trigger, { ref, asChild: true, ...rest, children });
2235
+ }
2236
+ return /* @__PURE__ */ jsxRuntime.jsx(
2237
+ DropdownMenu__namespace.Trigger,
2238
+ {
2239
+ ref,
2240
+ className: ["usermenu", className].filter(Boolean).join(" "),
2241
+ ...rest,
2242
+ children
2243
+ }
2244
+ );
2245
+ });
2246
+ var UserMenuContent = react.forwardRef(function UserMenuContent2({ className, children, sideOffset = 6, align = "end", ...rest }, ref) {
2247
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
2248
+ DropdownMenu__namespace.Content,
2249
+ {
2250
+ ref,
2251
+ className: ["dropdown", className].filter(Boolean).join(" "),
2252
+ sideOffset,
2253
+ align,
2254
+ ...rest,
2255
+ children
2256
+ }
2257
+ ) });
2258
+ });
2259
+ function UserMenuHeader({ avatar, name, email }) {
2260
+ return /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu__namespace.Label, { className: "dropdown__head", children: [
2261
+ avatar,
2262
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2263
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dropdown__name", children: name }),
2264
+ email !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dropdown__mail", children: email }) : null
2265
+ ] })
2266
+ ] });
2267
+ }
2268
+ var UserMenuGroup = react.forwardRef(
2269
+ function UserMenuGroup2({ className, ...rest }, ref) {
2270
+ return /* @__PURE__ */ jsxRuntime.jsx(
2271
+ DropdownMenu__namespace.Group,
2272
+ {
2273
+ ref,
2274
+ className: ["dropdown__sec", className].filter(Boolean).join(" "),
2275
+ ...rest
2276
+ }
2277
+ );
2278
+ }
2279
+ );
2280
+ var UserMenuItem = react.forwardRef(
2281
+ function UserMenuItem2({ className, danger, icon, children, ...rest }, ref) {
2282
+ const cls = ["dropdown__row", danger === true ? "dropdown__row--danger" : "", className].filter(Boolean).join(" ");
2283
+ return /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu__namespace.Item, { ref, className: cls, ...rest, children: [
2284
+ icon,
2285
+ children
2286
+ ] });
2287
+ }
2288
+ );
2289
+ var UserMenuSeparator = react.forwardRef(function UserMenuSeparator2({ className, ...rest }, ref) {
2290
+ return /* @__PURE__ */ jsxRuntime.jsx(
2291
+ DropdownMenu__namespace.Separator,
2292
+ {
2293
+ ref,
2294
+ className: ["dropdown__rule", className].filter(Boolean).join(" "),
2295
+ ...rest
2296
+ }
2297
+ );
2298
+ });
2299
+ function readTheme() {
2300
+ return document.documentElement.getAttribute("data-theme") === "dark" ? "dark" : "light";
2301
+ }
2302
+ var ThemeToggle = react.forwardRef(function ThemeToggle2({ className, onClick, onThemeChange, "aria-label": ariaLabel, ...rest }, ref) {
2303
+ function handleClick(event) {
2304
+ onClick?.(event);
2305
+ if (event.defaultPrevented) return;
2306
+ const next = readTheme() === "dark" ? "light" : "dark";
2307
+ document.documentElement.setAttribute("data-theme", next);
2308
+ onThemeChange?.(next);
2309
+ }
2310
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2311
+ "button",
2312
+ {
2313
+ ref,
2314
+ type: "button",
2315
+ className: ["iconbtn", "theme-toggle", className].filter(Boolean).join(" "),
2316
+ "aria-label": ariaLabel ?? "Toggle theme",
2317
+ onClick: handleClick,
2318
+ ...rest,
2319
+ children: [
2320
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ic-sun", children: /* @__PURE__ */ jsxRuntime.jsx(Sun, { size: 19 }) }),
2321
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ic-moon", children: /* @__PURE__ */ jsxRuntime.jsx(Moon, { size: 19 }) })
2322
+ ]
2323
+ }
2324
+ );
2325
+ });
2326
+ var Scrim = react.forwardRef(function Scrim2({ open, className, ...rest }, ref) {
2327
+ react.useEffect(() => {
2328
+ if (!open) return;
2329
+ const previousOverflow = document.body.style.overflow;
2330
+ document.body.style.overflow = "hidden";
2331
+ return () => {
2332
+ document.body.style.overflow = previousOverflow;
2333
+ };
2334
+ }, [open]);
2335
+ if (!open) return null;
2336
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: ["scrim", className].filter(Boolean).join(" "), ...rest });
2337
+ });
2338
+ function StockyIcon() {
2339
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stocky-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 32 32", fill: "none", children: [
2340
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", children: [
2341
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 8 11.5 3" }),
2342
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 8 20.5 3" })
2343
+ ] }),
2344
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11.5", cy: "3", r: "1.4", fill: "currentColor" }),
2345
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20.5", cy: "3", r: "1.4", fill: "currentColor" }),
2346
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "4", y: "8", width: "24", height: "20", rx: "4.5", stroke: "currentColor", strokeWidth: "1.6" }),
2347
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { className: "stocky-screen", x: "7", y: "11", width: "18", height: "13.5", rx: "2.5" }),
2348
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { className: "stocky-scan", x: "7.6", y: "11.4", width: "16.8", height: "1.3", rx: "0.6" }),
2349
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "stocky-eye", cx: "12.6", cy: "17.6", r: "1.95" }),
2350
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "stocky-eye stocky-eye--r", cx: "19.4", cy: "17.6", r: "1.95" }),
2351
+ /* @__PURE__ */ jsxRuntime.jsx(
2352
+ "path",
2353
+ {
2354
+ d: "M9.5 28v2M22.5 28v2",
2355
+ stroke: "currentColor",
2356
+ strokeWidth: "1.6",
2357
+ strokeLinecap: "round"
2358
+ }
2359
+ )
2360
+ ] }) });
2361
+ }
2362
+ var POP_SIDE_OFFSET = 14;
2363
+ var CommandDock = react.forwardRef(function CommandDock2({
2364
+ actions = [],
2365
+ searchPlaceholder = "Search symbols & briefings\u2026",
2366
+ noResultsLabel = "No results",
2367
+ aiEnabled = false,
2368
+ onAiSubmit,
2369
+ aiPlaceholder = "type a question\u2026",
2370
+ aiDisabledLabel = "Add your API key to enable AI",
2371
+ addSuggestions = [],
2372
+ addPlaceholder = "Add a ticker \u2014 name or symbol\u2026",
2373
+ onAddQueryChange,
2374
+ hideOnScroll,
2375
+ scrollContainer,
2376
+ hidden,
2377
+ className,
2378
+ ...rest
2379
+ }, ref) {
2380
+ const [openId, setOpenId] = react.useState(null);
2381
+ const [scrolling, setScrolling] = react.useState(false);
2382
+ const [searchQuery, setSearchQuery] = react.useState("");
2383
+ const [addQuery, setAddQuery] = react.useState("");
2384
+ const [prompt, setPrompt] = react.useState("");
2385
+ const searchInputRef = react.useRef(null);
2386
+ react.useEffect(() => {
2387
+ if (hideOnScroll !== true) return;
2388
+ const target = scrollContainer ?? window;
2389
+ let timer;
2390
+ function onScroll() {
2391
+ setScrolling(true);
2392
+ setOpenId(null);
2393
+ setSearchQuery("");
2394
+ setAddQuery("");
2395
+ if (timer !== void 0) clearTimeout(timer);
2396
+ timer = setTimeout(() => setScrolling(false), 220);
2397
+ }
2398
+ target.addEventListener("scroll", onScroll, { passive: true });
2399
+ return () => {
2400
+ target.removeEventListener("scroll", onScroll);
2401
+ if (timer !== void 0) clearTimeout(timer);
2402
+ };
2403
+ }, [hideOnScroll, scrollContainer]);
2404
+ const isHidden = hidden === true || scrolling;
2405
+ const filteredActions = react.useMemo(() => {
2406
+ const q = searchQuery.trim().toLowerCase();
2407
+ if (q === "") return actions;
2408
+ return actions.filter((a) => a.label.toLowerCase().includes(q));
2409
+ }, [actions, searchQuery]);
2410
+ const filteredAdd = react.useMemo(() => {
2411
+ const q = addQuery.trim().toLowerCase();
2412
+ if (q === "") return addSuggestions;
2413
+ return addSuggestions.filter((a) => a.label.toLowerCase().includes(q));
2414
+ }, [addSuggestions, addQuery]);
2415
+ const handleOpenChange = react.useCallback((id, open) => {
2416
+ setOpenId(open ? id : null);
2417
+ if (!open && id === "search") setSearchQuery("");
2418
+ if (!open && id === "add") setAddQuery("");
2419
+ }, []);
2420
+ function runAction(action) {
2421
+ action.onSelect();
2422
+ setOpenId(null);
2423
+ }
2424
+ function handleAiSubmit(event) {
2425
+ event.preventDefault();
2426
+ if (!aiEnabled) return;
2427
+ const text = prompt.trim();
2428
+ if (text === "") return;
2429
+ onAiSubmit?.(text);
2430
+ setPrompt("");
2431
+ }
2432
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2433
+ "div",
2434
+ {
2435
+ ref,
2436
+ className: ["dock", isHidden ? "dock--hidden" : "", className].filter(Boolean).join(" "),
2437
+ "data-hidden": isHidden ? "true" : void 0,
2438
+ ...rest,
2439
+ children: [
2440
+ /* @__PURE__ */ jsxRuntime.jsxs(Popover__namespace.Root, { open: openId === "search", onOpenChange: (o) => handleOpenChange("search", o), children: [
2441
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Trigger, { className: "btn btn--ghost btn--icon", "aria-label": "Search", children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: 21 }) }),
2442
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
2443
+ Popover__namespace.Content,
2444
+ {
2445
+ className: "dock-pop",
2446
+ side: "top",
2447
+ sideOffset: POP_SIDE_OFFSET,
2448
+ onOpenAutoFocus: (e) => {
2449
+ e.preventDefault();
2450
+ searchInputRef.current?.focus();
2451
+ },
2452
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "dropdown", style: { width: "min(440px, 86vw)" }, children: [
2453
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "12px 14px" }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "input-wrap", children: [
2454
+ /* @__PURE__ */ jsxRuntime.jsx(
2455
+ "input",
2456
+ {
2457
+ ref: searchInputRef,
2458
+ className: "input",
2459
+ type: "text",
2460
+ placeholder: searchPlaceholder,
2461
+ value: searchQuery,
2462
+ "aria-label": "Search",
2463
+ onChange: (e) => setSearchQuery(e.target.value)
2464
+ }
2465
+ ),
2466
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "input-wrap__affix", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: 21 }) })
2467
+ ] }) }),
2468
+ actions.length > 0 ? filteredActions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dropdown__sec", children: filteredActions.map((a) => /* @__PURE__ */ jsxRuntime.jsxs(
2469
+ "button",
2470
+ {
2471
+ type: "button",
2472
+ className: "dropdown__row",
2473
+ onClick: () => runAction(a),
2474
+ children: [
2475
+ a.icon,
2476
+ a.label
2477
+ ]
2478
+ },
2479
+ a.id
2480
+ )) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dropdown__sec", children: /* @__PURE__ */ jsxRuntime.jsx(
2481
+ "div",
2482
+ {
2483
+ className: "dropdown__row",
2484
+ role: "status",
2485
+ style: { color: "var(--text-muted)", cursor: "default" },
2486
+ children: noResultsLabel
2487
+ }
2488
+ ) }) : null
2489
+ ] })
2490
+ }
2491
+ ) })
2492
+ ] }),
2493
+ /* @__PURE__ */ jsxRuntime.jsxs(Popover__namespace.Root, { open: openId === "ai", onOpenChange: (o) => handleOpenChange("ai", o), children: [
2494
+ /* @__PURE__ */ jsxRuntime.jsx(
2495
+ Popover__namespace.Trigger,
2496
+ {
2497
+ className: "btn btn--ghost btn--icon iconbtn--stocky",
2498
+ "aria-label": "Ask Stocky",
2499
+ children: /* @__PURE__ */ jsxRuntime.jsx(StockyIcon, {})
2500
+ }
2501
+ ),
2502
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Content, { className: "dock-pop", side: "top", sideOffset: POP_SIDE_OFFSET, children: /* @__PURE__ */ jsxRuntime.jsxs(
2503
+ "form",
2504
+ {
2505
+ className: "dropdown",
2506
+ style: {
2507
+ width: "min(440px, 86vw)",
2508
+ padding: "12px 14px",
2509
+ display: "grid",
2510
+ gap: "10px"
2511
+ },
2512
+ onSubmit: handleAiSubmit,
2513
+ children: [
2514
+ /* @__PURE__ */ jsxRuntime.jsx(
2515
+ "textarea",
2516
+ {
2517
+ className: "input",
2518
+ rows: 2,
2519
+ placeholder: aiPlaceholder,
2520
+ "aria-label": "Ask Stocky",
2521
+ value: prompt,
2522
+ disabled: !aiEnabled,
2523
+ onChange: (e) => setPrompt(e.target.value),
2524
+ style: { resize: "none" }
2525
+ }
2526
+ ),
2527
+ !aiEnabled ? /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: 0, fontSize: "11.5px", color: "var(--text-muted)" }, children: aiDisabledLabel }) : null,
2528
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", className: "btn btn--primary", disabled: !aiEnabled, children: "Ask" }) })
2529
+ ]
2530
+ }
2531
+ ) }) })
2532
+ ] }),
2533
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "dock__div" }),
2534
+ /* @__PURE__ */ jsxRuntime.jsxs(Popover__namespace.Root, { open: openId === "add", onOpenChange: (o) => handleOpenChange("add", o), children: [
2535
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Trigger, { className: "btn btn--primary btn--icon", "aria-label": "Add stock", children: /* @__PURE__ */ jsxRuntime.jsx(Plus, { size: 22, strokeWidth: 1.8 }) }),
2536
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Content, { className: "dock-pop", side: "top", sideOffset: POP_SIDE_OFFSET, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "dropdown", style: { width: "min(440px, 86vw)" }, children: [
2537
+ /* @__PURE__ */ jsxRuntime.jsx(
2538
+ "div",
2539
+ {
2540
+ style: {
2541
+ padding: "12px 14px",
2542
+ borderBottom: filteredAdd.length > 0 ? "0.5px solid var(--border-default)" : void 0
2543
+ },
2544
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "input-wrap", children: [
2545
+ /* @__PURE__ */ jsxRuntime.jsx(
2546
+ "input",
2547
+ {
2548
+ className: "input",
2549
+ type: "text",
2550
+ placeholder: addPlaceholder,
2551
+ value: addQuery,
2552
+ "aria-label": "Add stock",
2553
+ onChange: (e) => {
2554
+ setAddQuery(e.target.value);
2555
+ onAddQueryChange?.(e.target.value);
2556
+ }
2557
+ }
2558
+ ),
2559
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "input-wrap__affix", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(Plus, { size: 22, strokeWidth: 1.8 }) })
2560
+ ] })
2561
+ }
2562
+ ),
2563
+ filteredAdd.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dropdown__sec", children: filteredAdd.map((a) => /* @__PURE__ */ jsxRuntime.jsxs(
2564
+ "button",
2565
+ {
2566
+ type: "button",
2567
+ className: "dropdown__row",
2568
+ onClick: () => runAction(a),
2569
+ children: [
2570
+ a.icon,
2571
+ a.label
2572
+ ]
2573
+ },
2574
+ a.id
2575
+ )) }) : null
2576
+ ] }) }) })
2577
+ ] })
2578
+ ]
2579
+ }
2580
+ );
2581
+ });
2582
+ function MarkIcon({ kind }) {
2583
+ if (kind === "up") return /* @__PURE__ */ jsxRuntime.jsx(ArrowUpRight, { size: 15, strokeWidth: 1.8 });
2584
+ if (kind === "down") return /* @__PURE__ */ jsxRuntime.jsx(ArrowDownRight, { size: 15, strokeWidth: 1.8 });
2585
+ if (kind === "warn") return /* @__PURE__ */ jsxRuntime.jsx(TriangleAlert, { size: 15, strokeWidth: 1.7 });
2586
+ return /* @__PURE__ */ jsxRuntime.jsx(Info, { size: 15, strokeWidth: 1.7 });
2587
+ }
2588
+ function NotificationRow({ item }) {
2589
+ const { id, kind, title, body, timestamp, read, onMarkRead } = item;
2590
+ const markClass = kind !== void 0 ? `notif__mark notif__mark--${kind}` : "notif__mark";
2591
+ const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2592
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: markClass, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(MarkIcon, { kind }) }),
2593
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2594
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "notif__txt", children: [
2595
+ title,
2596
+ body !== void 0 && body !== null ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2597
+ " ",
2598
+ body
2599
+ ] }) : null
2600
+ ] }),
2601
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "notif__time", children: timestamp })
2602
+ ] })
2603
+ ] });
2604
+ if (read) {
2605
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "notif__item", children: inner });
2606
+ }
2607
+ function onKeyDown(event) {
2608
+ if (event.key === "Enter" || event.key === " ") {
2609
+ event.preventDefault();
2610
+ onMarkRead(id);
2611
+ }
2612
+ }
2613
+ const ariaLabel = typeof title === "string" ? `Mark read: ${title}` : "Mark notification read";
2614
+ return /* @__PURE__ */ jsxRuntime.jsx(
2615
+ "div",
2616
+ {
2617
+ className: "notif__item notif__item--unread",
2618
+ role: "button",
2619
+ tabIndex: 0,
2620
+ "aria-label": ariaLabel,
2621
+ onClick: () => onMarkRead(id),
2622
+ onKeyDown,
2623
+ children: inner
2624
+ }
2625
+ );
2626
+ }
2627
+ function NotificationCenter({
2628
+ items,
2629
+ title = "Notifications",
2630
+ onMarkAllRead,
2631
+ markAllLabel = "Mark all read",
2632
+ emptyLabel = "No notifications",
2633
+ viewAllHref,
2634
+ viewAllLabel = "View all",
2635
+ bellLabel,
2636
+ align = "end",
2637
+ sideOffset = 6
2638
+ }) {
2639
+ const unreadCount = items.filter((i) => !i.read).length;
2640
+ return /* @__PURE__ */ jsxRuntime.jsxs(Popover__namespace.Root, { children: [
2641
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(NotificationBell, { unreadCount, "aria-label": bellLabel }) }),
2642
+ /* @__PURE__ */ jsxRuntime.jsx(Popover__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(Popover__namespace.Content, { className: "dropdown notif", align, sideOffset, children: [
2643
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "notif__head", children: [
2644
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "notif__title", children: title }),
2645
+ onMarkAllRead !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "notif__clear", onClick: onMarkAllRead, children: markAllLabel }) : null
2646
+ ] }),
2647
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "notif__list", children: items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
2648
+ "div",
2649
+ {
2650
+ style: {
2651
+ display: "grid",
2652
+ placeItems: "center",
2653
+ gap: "10px",
2654
+ padding: "34px 16px",
2655
+ color: "var(--text-muted)"
2656
+ },
2657
+ children: [
2658
+ /* @__PURE__ */ jsxRuntime.jsx(BellOff, { size: 26, strokeWidth: 1.4 }),
2659
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "12.5px" }, children: emptyLabel })
2660
+ ]
2661
+ }
2662
+ ) : items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(NotificationRow, { item }, item.id)) }),
2663
+ viewAllHref !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "notif__foot", children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: viewAllHref, children: viewAllLabel }) }) : null
2664
+ ] }) })
2665
+ ] });
2666
+ }
2667
+ var DEFAULT_DISCLAIMER = "Stocky is AI and can get things wrong \u2014 not financial advice. Double-check before you trade.";
2668
+ var ROLE_PREFIX = {
2669
+ user: { label: "you \u203A", preClass: "term__pre--you", txtClass: "term__txt--you" },
2670
+ assistant: { label: "stocky \u203A", preClass: "term__pre--bot", txtClass: "term__txt--bot" }
2671
+ };
2672
+ function toText(content) {
2673
+ return typeof content === "string" ? content : content.map((t) => t.text).join("");
2674
+ }
2675
+ function Terminal({
2676
+ messages,
2677
+ streaming = false,
2678
+ error = null,
2679
+ onRetry,
2680
+ composer,
2681
+ disclaimer = DEFAULT_DISCLAIMER,
2682
+ title = "stocky",
2683
+ maxHeight,
2684
+ className
2685
+ }) {
2686
+ const endRef = react.useRef(null);
2687
+ react.useEffect(() => {
2688
+ endRef.current?.scrollIntoView({ block: "end" });
2689
+ }, [messages, streaming, error]);
2690
+ const lastIndex = messages.length - 1;
2691
+ const bodyStyle = maxHeight === void 0 ? void 0 : { maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight };
2692
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ["term", className].filter(Boolean).join(" "), children: [
2693
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "term__head", children: [
2694
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "term__caret", "aria-hidden": "true", children: "\u203A_" }),
2695
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "term__title", children: title })
2696
+ ] }),
2697
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "term__body", style: bodyStyle, "aria-live": "polite", "aria-atomic": "false", children: [
2698
+ messages.map((m, i) => {
2699
+ const { label, preClass, txtClass } = ROLE_PREFIX[m.role];
2700
+ const showCursor = streaming && i === lastIndex && m.role === "assistant";
2701
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2702
+ i > 0 ? /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "term__sep" }) : null,
2703
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "term__turn", children: [
2704
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: preClass, children: label }),
2705
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: txtClass, children: [
2706
+ toText(m.content),
2707
+ showCursor ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "term__cursor", "data-testid": "term-cursor", "aria-hidden": "true" }) : null
2708
+ ] })
2709
+ ] })
2710
+ ] }, m.id ?? i);
2711
+ }),
2712
+ error ? /* @__PURE__ */ jsxRuntime.jsxs(
2713
+ Callout,
2714
+ {
2715
+ variant: error.retryable ? "warning" : "error",
2716
+ title: error.retryable ? "Retrying\u2026" : "Error",
2717
+ className: "term__errrow",
2718
+ children: [
2719
+ error.message,
2720
+ !error.retryable && onRetry !== void 0 ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2721
+ " ",
2722
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", onClick: onRetry, children: "Try again" })
2723
+ ] }) : null
2724
+ ]
2725
+ }
2726
+ ) : null,
2727
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: endRef })
2728
+ ] }),
2729
+ composer,
2730
+ /* @__PURE__ */ jsxRuntime.jsx(Callout, { variant: "neutral", icon: false, className: "term__disc", children: disclaimer })
2731
+ ] });
2732
+ }
2733
+ function Composer({
2734
+ onSend,
2735
+ keyProvided = true,
2736
+ placeholder = "type a question\u2026",
2737
+ prompt = "you \u203A",
2738
+ keyPrompt = "Add your key to start chatting.",
2739
+ sendLabel = "Send",
2740
+ inputLabel = "Message",
2741
+ className
2742
+ }) {
2743
+ const [value, setValue] = react.useState("");
2744
+ const taRef = react.useRef(null);
2745
+ const disabled = !keyProvided;
2746
+ function grow() {
2747
+ const ta = taRef.current;
2748
+ if (ta === null) return;
2749
+ ta.style.height = "auto";
2750
+ ta.style.height = `${ta.scrollHeight}px`;
2751
+ }
2752
+ function send() {
2753
+ if (disabled) return;
2754
+ const text = value.trim();
2755
+ if (text === "") return;
2756
+ onSend(text);
2757
+ setValue("");
2758
+ const ta = taRef.current;
2759
+ if (ta !== null) ta.style.height = "auto";
2760
+ }
2761
+ function handleChange(e) {
2762
+ setValue(e.target.value);
2763
+ grow();
2764
+ }
2765
+ function handleKeyDown(e) {
2766
+ if (e.key === "Enter" && !e.shiftKey) {
2767
+ e.preventDefault();
2768
+ send();
2769
+ }
2770
+ }
2771
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ["term__composer", className].filter(Boolean).join(" "), children: [
2772
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "term__prompt", children: prompt }),
2773
+ /* @__PURE__ */ jsxRuntime.jsx(
2774
+ "textarea",
2775
+ {
2776
+ ref: taRef,
2777
+ className: "term__input",
2778
+ rows: 1,
2779
+ value,
2780
+ placeholder,
2781
+ disabled,
2782
+ onChange: handleChange,
2783
+ onKeyDown: handleKeyDown,
2784
+ "aria-label": inputLabel
2785
+ }
2786
+ ),
2787
+ /* @__PURE__ */ jsxRuntime.jsx(
2788
+ "button",
2789
+ {
2790
+ type: "button",
2791
+ className: "iconbtn term__send",
2792
+ onClick: send,
2793
+ disabled,
2794
+ "aria-label": sendLabel,
2795
+ children: /* @__PURE__ */ jsxRuntime.jsx(ArrowRight, { size: 16, strokeWidth: 1.6 })
2796
+ }
2797
+ ),
2798
+ disabled ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "term__keyhint", children: keyPrompt }) : null
2799
+ ] });
2800
+ }
2801
+ function parseStreamFrame(frame) {
2802
+ let event = "message";
2803
+ const dataLines = [];
2804
+ for (const raw of frame.split("\n")) {
2805
+ const line = raw.replace(/\r$/, "");
2806
+ if (line.startsWith("event:")) {
2807
+ event = line.slice("event:".length).trim();
2808
+ } else if (line.startsWith("data:")) {
2809
+ dataLines.push(line.slice("data:".length).trim());
2810
+ }
2811
+ }
2812
+ if (dataLines.length === 0) return null;
2813
+ const data = dataLines.join("\n");
2814
+ if (data === "[DONE]") return { type: "done" };
2815
+ if (event === "error") {
2816
+ try {
2817
+ const parsed = JSON.parse(data);
2818
+ return {
2819
+ type: "error",
2820
+ retryable: parsed.retryable === true,
2821
+ message: typeof parsed.message === "string" ? parsed.message : "Stream error"
2822
+ };
2823
+ } catch {
2824
+ return { type: "error", retryable: false, message: data };
2825
+ }
2826
+ }
2827
+ return { type: "token", text: data };
2828
+ }
2829
+ async function* streamFromResponse(response) {
2830
+ const body = response.body;
2831
+ if (body === null) return;
2832
+ const reader = body.getReader();
2833
+ const decoder = new TextDecoder();
2834
+ let buffer = "";
2835
+ try {
2836
+ for (; ; ) {
2837
+ const { done, value } = await reader.read();
2838
+ if (done) break;
2839
+ buffer += decoder.decode(value, { stream: true });
2840
+ let sep = buffer.indexOf("\n\n");
2841
+ while (sep !== -1) {
2842
+ const frame = buffer.slice(0, sep);
2843
+ buffer = buffer.slice(sep + 2);
2844
+ const ev = parseStreamFrame(frame);
2845
+ if (ev !== null) yield ev;
2846
+ sep = buffer.indexOf("\n\n");
2847
+ }
2848
+ }
2849
+ buffer += decoder.decode();
2850
+ const tail = parseStreamFrame(buffer);
2851
+ if (tail !== null) yield tail;
2852
+ } finally {
2853
+ reader.releaseLock();
2854
+ }
2855
+ }
2856
+ function updateLastAssistant(prev, text) {
2857
+ const next = prev.slice();
2858
+ for (let i = next.length - 1; i >= 0; i -= 1) {
2859
+ const m = next[i];
2860
+ if (m !== void 0 && m.role === "assistant") {
2861
+ next[i] = { role: "assistant", content: text };
2862
+ return next;
2863
+ }
2864
+ }
2865
+ return next;
2866
+ }
2867
+ function useStreaming(initial = []) {
2868
+ const [messages, setMessages] = react.useState(initial);
2869
+ const [streaming, setStreaming] = react.useState(false);
2870
+ const [error, setError] = react.useState(null);
2871
+ const activeRef = react.useRef(false);
2872
+ const send = react.useCallback((text) => {
2873
+ setMessages((prev) => [...prev, { role: "user", content: text }]);
2874
+ }, []);
2875
+ const reset = react.useCallback(() => {
2876
+ setError(null);
2877
+ }, []);
2878
+ const start = react.useCallback(async (events) => {
2879
+ if (activeRef.current) return;
2880
+ activeRef.current = true;
2881
+ setError(null);
2882
+ setStreaming(true);
2883
+ setMessages((prev) => [...prev, { role: "assistant", content: "" }]);
2884
+ let acc = "";
2885
+ try {
2886
+ for await (const ev of events) {
2887
+ if (ev.type === "token") {
2888
+ acc += ev.text;
2889
+ setError(null);
2890
+ setMessages((prev) => updateLastAssistant(prev, acc));
2891
+ } else if (ev.type === "error") {
2892
+ setError({ kind: "error", retryable: ev.retryable, message: ev.message });
2893
+ if (!ev.retryable) return;
2894
+ } else {
2895
+ return;
2896
+ }
2897
+ }
2898
+ } finally {
2899
+ setStreaming(false);
2900
+ activeRef.current = false;
2901
+ if (acc === "") {
2902
+ setMessages((prev) => {
2903
+ const last = prev[prev.length - 1];
2904
+ return last !== void 0 && last.role === "assistant" && last.content === "" ? prev.slice(0, -1) : prev;
2905
+ });
2906
+ }
2907
+ }
2908
+ }, []);
2909
+ return { messages, streaming, error, send, start, reset };
2910
+ }
2911
+ var HOVER_DELAY_MS = 200;
2912
+ var DEFAULT_LABEL = {
2913
+ source: "[source]",
2914
+ unverified: "[unverified]"
2915
+ };
2916
+ var KICKER = {
2917
+ source: "Source",
2918
+ unverified: "Unverified"
2919
+ };
2920
+ var TIP_MODIFIER = {
2921
+ source: "gtip--cited",
2922
+ unverified: "gtip--unverified"
2923
+ };
2924
+ function GroundingFlag({ variant, explainer, children, defaultOpen }) {
2925
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Provider, { delayDuration: HOVER_DELAY_MS, children: /* @__PURE__ */ jsxRuntime.jsxs(TooltipPrimitive__namespace.Root, { defaultOpen: defaultOpen ?? false, children: [
2926
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "gwrap", tabIndex: 0, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `ground-wave ground-wave--${variant}`, children: children ?? DEFAULT_LABEL[variant] }) }) }),
2927
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
2928
+ TooltipPrimitive__namespace.Content,
2929
+ {
2930
+ className: `gtip-pop ${TIP_MODIFIER[variant]}`,
2931
+ side: "top",
2932
+ sideOffset: 8,
2933
+ collisionPadding: 8,
2934
+ children: [
2935
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "gtip__k", children: KICKER[variant] }),
2936
+ explainer
2937
+ ]
2938
+ }
2939
+ ) })
2940
+ ] }) });
2941
+ }
2942
+ var ALLOWED_ELEMENTS = [
2943
+ "h1",
2944
+ "h2",
2945
+ "h3",
2946
+ "h4",
2947
+ "p",
2948
+ "code",
2949
+ "pre",
2950
+ "blockquote",
2951
+ "a",
2952
+ "em",
2953
+ "strong",
2954
+ "ol",
2955
+ "ul",
2956
+ "li",
2957
+ "hr"
2958
+ ];
2959
+ var MD_COMPONENTS = {
2960
+ a: ({ children, href }) => (
2961
+ // `urlTransform` (defaultUrlTransform) already ran on this href upstream; we
2962
+ // re-apply it here so the anchor stays safe even if that prop is ever removed or
2963
+ // its contract changes — a self-contained second barrier on the link sink.
2964
+ /* @__PURE__ */ jsxRuntime.jsx(
2965
+ "a",
2966
+ {
2967
+ className: "link",
2968
+ href: href === void 0 ? void 0 : Markdown.defaultUrlTransform(href),
2969
+ rel: "noopener noreferrer",
2970
+ children
2971
+ }
2972
+ )
2973
+ )
2974
+ };
2975
+ function MarkdownRenderer({ content, streaming = false, className }) {
2976
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
2977
+ /* @__PURE__ */ jsxRuntime.jsx(
2978
+ Markdown__default.default,
2979
+ {
2980
+ allowedElements: ALLOWED_ELEMENTS,
2981
+ unwrapDisallowed: true,
2982
+ skipHtml: true,
2983
+ urlTransform: Markdown.defaultUrlTransform,
2984
+ components: MD_COMPONENTS,
2985
+ children: content
2986
+ }
2987
+ ),
2988
+ streaming ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "term__cursor", "aria-hidden": "true", "data-testid": "md-cursor" }) : null
2989
+ ] });
2990
+ }
2991
+ var DEFAULT_VERB = {
2992
+ pending: "queued",
2993
+ running: "running",
2994
+ success: "done",
2995
+ error: "failed",
2996
+ partial: "partial"
2997
+ };
2998
+ function leadingGlyph(state, streaming) {
2999
+ switch (state) {
3000
+ case "pending":
3001
+ return /* @__PURE__ */ jsxRuntime.jsx(Clock, { size: 16 });
3002
+ case "running":
3003
+ return streaming ? null : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "spinner spinner--sm", "aria-hidden": true });
3004
+ case "success":
3005
+ return /* @__PURE__ */ jsxRuntime.jsx(Check, { size: 16 });
3006
+ case "error":
3007
+ return /* @__PURE__ */ jsxRuntime.jsx(CircleX, { size: 16 });
3008
+ case "partial":
3009
+ return /* @__PURE__ */ jsxRuntime.jsx(TriangleAlert, { size: 16 });
3010
+ }
3011
+ }
3012
+ function ToolUseIndicator({
3013
+ state,
3014
+ skill,
3015
+ verb,
3016
+ meta,
3017
+ streaming = false,
3018
+ children,
3019
+ className
3020
+ }) {
3021
+ if (state === "idle") return null;
3022
+ const glyph = leadingGlyph(state, streaming);
3023
+ const resolvedVerb = verb ?? DEFAULT_VERB[state];
3024
+ const cls = ["tuf", className].filter(Boolean).join(" ");
3025
+ return (
3026
+ // role=status: announce the async tool call's lifecycle politely to assistive
3027
+ // tech (pending → running → success/error) from the visible text label.
3028
+ // (aria-busy is intentionally not on the chip — it lives on the parent
3029
+ // Terminal region, which owns the "a response is in progress" state.)
3030
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cls, "data-state": state, role: "status", children: [
3031
+ glyph !== null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tuf__glyph", children: glyph }) : null,
3032
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "tuf__label", children: [
3033
+ children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3034
+ skill !== void 0 && skill !== "" ? `${skill} \xB7 ` : null,
3035
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tuf__verb", children: resolvedVerb })
3036
+ ] }),
3037
+ state === "running" && streaming ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "term__cursor", "aria-hidden": true }) : null
3038
+ ] }),
3039
+ meta !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tuf__meta", children: meta }) : null
3040
+ ] })
3041
+ );
3042
+ }
3043
+ function join(...parts) {
3044
+ return parts.filter(Boolean).join(" ");
3045
+ }
3046
+ function DigestCard({
3047
+ state,
3048
+ period,
3049
+ title,
3050
+ children,
3051
+ time,
3052
+ actions,
3053
+ emptyIcon,
3054
+ emptyTitle,
3055
+ emptyBody,
3056
+ emptyAction,
3057
+ className
3058
+ }) {
3059
+ if (state === "loading") {
3060
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: join("digest", className), "aria-busy": true, children: [
3061
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "digest__head", children: [
3062
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { shape: "circle", width: 7, height: 7 }),
3063
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 140, height: 9 })
3064
+ ] }),
3065
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { shape: "title", width: "70%" }),
3066
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "digest__skel", children: [
3067
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { shape: "text", width: "100%" }),
3068
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { shape: "text", width: "96%" }),
3069
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { shape: "text", width: "62%" })
3070
+ ] }),
3071
+ /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 120, height: 9, style: { marginTop: 2 } })
3072
+ ] });
3073
+ }
3074
+ if (state === "empty") {
3075
+ return /* @__PURE__ */ jsxRuntime.jsx("article", { className: join("digest", className), children: /* @__PURE__ */ jsxRuntime.jsx(
3076
+ EmptyStateFig,
3077
+ {
3078
+ icon: emptyIcon,
3079
+ title: emptyTitle ?? "No briefings yet",
3080
+ body: emptyBody,
3081
+ action: emptyAction
3082
+ }
3083
+ ) });
3084
+ }
3085
+ const isUnread = state === "unread";
3086
+ const hasFoot = time !== void 0 || actions !== void 0;
3087
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: join("digest", isUnread ? "digest--unread" : "digest--read", className), children: [
3088
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "digest__head", children: [
3089
+ isUnread ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "digest__dot", "data-testid": "digest-dot", "aria-hidden": true }) : null,
3090
+ period !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "digest__period", children: period }) : null
3091
+ ] }),
3092
+ title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "digest__title", children: title }) : null,
3093
+ children !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "digest__body", children }) : null,
3094
+ hasFoot ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "digest__foot", children: [
3095
+ time !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "digest__time", children: time }) : null,
3096
+ actions !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "digest__actions", children: actions }) : null
3097
+ ] }) : null
3098
+ ] });
3099
+ }
3100
+
3101
+ // src/primitives/backgrounds/tokens.ts
3102
+ function readBackgroundStyles() {
3103
+ const cs = getComputedStyle(document.documentElement);
3104
+ const read = (name) => cs.getPropertyValue(name).trim();
3105
+ return {
3106
+ signal: read("--color-signal"),
3107
+ highlight: read("--color-highlight"),
3108
+ font: read("--font-display") || '"Fira Code", monospace'
3109
+ };
3110
+ }
3111
+ function useCanvas2D(draw, deps = []) {
3112
+ const ref = react.useRef(null);
3113
+ react.useEffect(() => {
3114
+ const canvas = ref.current;
3115
+ if (!canvas) return;
3116
+ const ctx = canvas.getContext("2d");
3117
+ if (!ctx) return;
3118
+ let rafId = 0;
3119
+ let running = true;
3120
+ const t0 = performance.now();
3121
+ const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
3122
+ const renderFrame = (now) => {
3123
+ const { width, height } = canvas.getBoundingClientRect();
3124
+ ctx.save();
3125
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
3126
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
3127
+ ctx.restore();
3128
+ draw(ctx, { t: (now - t0) / 1e3, w: width, h: height, reduceMotion });
3129
+ };
3130
+ const fit = () => {
3131
+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
3132
+ const { width, height } = canvas.getBoundingClientRect();
3133
+ canvas.width = Math.max(1, Math.floor(width * dpr));
3134
+ canvas.height = Math.max(1, Math.floor(height * dpr));
3135
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
3136
+ };
3137
+ fit();
3138
+ const ro = new ResizeObserver(() => {
3139
+ fit();
3140
+ if (reduceMotion) renderFrame(performance.now());
3141
+ });
3142
+ ro.observe(canvas);
3143
+ if (reduceMotion) {
3144
+ renderFrame(performance.now());
3145
+ } else {
3146
+ const loop = (now) => {
3147
+ if (!running) return;
3148
+ renderFrame(now);
3149
+ rafId = requestAnimationFrame(loop);
3150
+ };
3151
+ rafId = requestAnimationFrame(loop);
3152
+ }
3153
+ return () => {
3154
+ running = false;
3155
+ cancelAnimationFrame(rafId);
3156
+ ro.disconnect();
3157
+ };
3158
+ }, deps);
3159
+ return ref;
3160
+ }
3161
+ function GridBg(props) {
3162
+ const ref = useCanvas2D((ctx, { t, w, h, reduceMotion }) => {
3163
+ const { signal } = readBackgroundStyles();
3164
+ if (!signal) return;
3165
+ ctx.fillStyle = signal;
3166
+ const step = 28;
3167
+ const cols = Math.ceil(w / step);
3168
+ const rows = Math.ceil(h / step);
3169
+ const offX = (w - cols * step) / 2;
3170
+ const offY = (h - rows * step) / 2;
3171
+ for (let i = 0; i < cols; i++) {
3172
+ for (let j = 0; j < rows; j++) {
3173
+ const x = offX + i * step + step / 2;
3174
+ const y = offY + j * step + step / 2;
3175
+ const tt = reduceMotion ? 0 : t * 0.15;
3176
+ const n = Math.sin(i * 0.31 + j * 0.21 + tt) * 0.5 + Math.sin(i * 0.13 - j * 0.41 + tt * 0.7) * 0.5;
3177
+ const focal = 1 - Math.min(1, Math.max(0, (1 - x / w) * 0.7 + (1 - y / h) * 0.7));
3178
+ const a = Math.max(0, n * 0.5 + 0.5) * 0.35 * focal;
3179
+ if (a < 0.02) continue;
3180
+ ctx.globalAlpha = a;
3181
+ const r = 1.1 + Math.max(0, n) * 0.9;
3182
+ ctx.beginPath();
3183
+ ctx.arc(x, y, r, 0, Math.PI * 2);
3184
+ ctx.fill();
3185
+ }
3186
+ }
3187
+ ctx.globalAlpha = 1;
3188
+ });
3189
+ return /* @__PURE__ */ jsxRuntime.jsx("canvas", { ...props, ref, "aria-hidden": "true" });
3190
+ }
3191
+ var ASCII_CHARS = "01\xB7\u2192/\\><+=-:.";
3192
+ function AsciiBg(props) {
3193
+ const stateRef = react.useRef(null);
3194
+ const ref = useCanvas2D((ctx, { t, w, h, reduceMotion }) => {
3195
+ const { signal, highlight, font } = readBackgroundStyles();
3196
+ if (!signal || !highlight) return;
3197
+ const colW = 14;
3198
+ const lineH = 20;
3199
+ if (!stateRef.current || Math.abs(stateRef.current.w - w) > colW) {
3200
+ const nCols = Math.floor(w / colW);
3201
+ const cols = [];
3202
+ for (let i = 0; i < nCols; i++) {
3203
+ if (Math.random() > 0.85) continue;
3204
+ cols.push({
3205
+ x: i * colW + colW / 2,
3206
+ head: Math.random() * h,
3207
+ speed: 10 + Math.random() * 22,
3208
+ // px/sec — slow but varied
3209
+ len: 10 + Math.floor(Math.random() * 18),
3210
+ glyphs: Array.from(
3211
+ { length: 30 },
3212
+ () => ASCII_CHARS.charAt(Math.floor(Math.random() * ASCII_CHARS.length))
3213
+ )
3214
+ });
3215
+ }
3216
+ stateRef.current = { w, cols, lastT: t };
3217
+ }
3218
+ const dt = reduceMotion ? 0 : Math.min(0.05, t - stateRef.current.lastT);
3219
+ stateRef.current.lastT = t;
3220
+ const cycle = reduceMotion ? 0 : Math.floor(t * 2);
3221
+ ctx.font = `400 13px ${font}`;
3222
+ ctx.textBaseline = "top";
3223
+ for (const col of stateRef.current.cols) {
3224
+ col.head += col.speed * dt;
3225
+ if (col.head - col.len * lineH > h) {
3226
+ col.head = -Math.random() * 200;
3227
+ }
3228
+ for (let k = 0; k < col.len; k++) {
3229
+ const y = col.head - k * lineH;
3230
+ if (y < -lineH || y > h) continue;
3231
+ const fade = 1 - k / col.len;
3232
+ const focal = 0.45 + 0.55 * Math.min(1, y / h);
3233
+ ctx.globalAlpha = 0.55 * fade * focal;
3234
+ ctx.fillStyle = k === 0 ? highlight : signal;
3235
+ const g = col.glyphs[(k + cycle) % col.glyphs.length] ?? "";
3236
+ ctx.fillText(g, col.x, y);
3237
+ }
3238
+ }
3239
+ ctx.globalAlpha = 1;
3240
+ });
3241
+ return /* @__PURE__ */ jsxRuntime.jsx("canvas", { ...props, ref, "aria-hidden": "true" });
3242
+ }
3243
+ var GLYPHS = ["\u2192", "\u21B3", "/", "\\", "\xB7", "<", ">", "+", "*", "\u221E", "\u25C7"];
3244
+ function GlyphsBg(props) {
3245
+ const stateRef = react.useRef(null);
3246
+ const ref = useCanvas2D((ctx, { t, w, h, reduceMotion }) => {
3247
+ const { signal, highlight, font } = readBackgroundStyles();
3248
+ if (!signal || !highlight) return;
3249
+ if (!stateRef.current || Math.abs(stateRef.current.w - w) > 8) {
3250
+ const n = Math.min(28, Math.max(14, Math.floor(w * h / 6e4)));
3251
+ const items = [];
3252
+ for (let i = 0; i < n; i++) {
3253
+ items.push({
3254
+ g: GLYPHS[Math.floor(Math.random() * GLYPHS.length)] ?? "\xB7",
3255
+ x: Math.random() * w,
3256
+ y: Math.random() * h,
3257
+ vx: (Math.random() - 0.5) * 4,
3258
+ // very slow drift, px/sec
3259
+ vy: (Math.random() - 0.5) * 4,
3260
+ size: 14 + Math.random() * 36,
3261
+ highlight: Math.random() < 0.18,
3262
+ // ~1 in 6 is amber
3263
+ base: 0.18 + Math.random() * 0.22,
3264
+ phase: Math.random() * Math.PI * 2
3265
+ });
3266
+ }
3267
+ stateRef.current = { w, items, lastT: t };
3268
+ }
3269
+ const dt = reduceMotion ? 0 : Math.min(0.05, t - stateRef.current.lastT);
3270
+ stateRef.current.lastT = t;
3271
+ const tt = reduceMotion ? 0 : t;
3272
+ ctx.textBaseline = "middle";
3273
+ ctx.textAlign = "center";
3274
+ for (const it of stateRef.current.items) {
3275
+ it.x += it.vx * dt;
3276
+ it.y += it.vy * dt;
3277
+ const m = 60;
3278
+ if (it.x < -m) it.x = w + m;
3279
+ if (it.x > w + m) it.x = -m;
3280
+ if (it.y < -m) it.y = h + m;
3281
+ if (it.y > h + m) it.y = -m;
3282
+ ctx.globalAlpha = it.base * (0.6 + 0.4 * Math.sin(tt * 0.4 + it.phase));
3283
+ ctx.fillStyle = it.highlight ? highlight : signal;
3284
+ ctx.font = `300 ${it.size}px ${font}`;
3285
+ ctx.fillText(it.g, it.x, it.y);
3286
+ }
3287
+ ctx.globalAlpha = 1;
3288
+ });
3289
+ return /* @__PURE__ */ jsxRuntime.jsx("canvas", { ...props, ref, "aria-hidden": "true" });
3290
+ }
3291
+
3292
+ // src/icons/generated/registry.ts
3293
+ var ICON_NAMES = [
3294
+ "chevron-up",
3295
+ "chevron-down",
3296
+ "chevron-left",
3297
+ "chevron-right",
3298
+ "arrow-up",
3299
+ "arrow-down",
3300
+ "arrow-left",
3301
+ "arrow-right",
3302
+ "arrow-up-right",
3303
+ "arrow-up-left",
3304
+ "arrow-down-right",
3305
+ "arrow-down-left",
3306
+ "external-link",
3307
+ "menu",
3308
+ "x",
3309
+ "search",
3310
+ "plus",
3311
+ "minus",
3312
+ "square-pen",
3313
+ "trash-2",
3314
+ "download",
3315
+ "upload",
3316
+ "copy",
3317
+ "share-2",
3318
+ "funnel",
3319
+ "filter",
3320
+ "arrow-up-down",
3321
+ "settings",
3322
+ "refresh-cw",
3323
+ "check",
3324
+ "send",
3325
+ "eye",
3326
+ "eye-off",
3327
+ "bell",
3328
+ "bell-off",
3329
+ "ellipsis",
3330
+ "ellipsis-vertical",
3331
+ "save",
3332
+ "info",
3333
+ "triangle-alert",
3334
+ "circle-x",
3335
+ "circle-check",
3336
+ "circle-check-big",
3337
+ "clock",
3338
+ "loader",
3339
+ "sun",
3340
+ "moon",
3341
+ "lock",
3342
+ "lock-open",
3343
+ "circle-question-mark",
3344
+ "circle-help",
3345
+ "ban",
3346
+ "check-check",
3347
+ "octagon-alert",
3348
+ "play",
3349
+ "pause",
3350
+ "square",
3351
+ "globe",
3352
+ "image",
3353
+ "file",
3354
+ "link",
3355
+ "package",
3356
+ "rocket",
3357
+ "grid-3x3",
3358
+ "notebook-pen",
3359
+ "code-xml",
3360
+ "trending-up",
3361
+ "trending-down",
3362
+ "chart-line",
3363
+ "chart-column",
3364
+ "chart-candlestick",
3365
+ "chart-pie",
3366
+ "wallet",
3367
+ "briefcase",
3368
+ "calendar",
3369
+ "bookmark",
3370
+ "percent",
3371
+ "dollar-sign",
3372
+ "activity",
3373
+ "target",
3374
+ "scale",
3375
+ "banknote",
3376
+ "ai-sparkle",
3377
+ "bot",
3378
+ "bot-message-square",
3379
+ "cpu",
3380
+ "agent-stocky",
3381
+ "agent-orb",
3382
+ "agent-droid",
3383
+ "agent-hex"
3384
+ ];
3385
+ var ICON_REGISTRY = {
3386
+ "chevron-up": ChevronUp,
3387
+ "chevron-down": ChevronDown,
3388
+ "chevron-left": ChevronLeft,
3389
+ "chevron-right": ChevronRight,
3390
+ "arrow-up": ArrowUp,
3391
+ "arrow-down": ArrowDown,
3392
+ "arrow-left": ArrowLeft,
3393
+ "arrow-right": ArrowRight,
3394
+ "arrow-up-right": ArrowUpRight,
3395
+ "arrow-up-left": ArrowUpLeft,
3396
+ "arrow-down-right": ArrowDownRight,
3397
+ "arrow-down-left": ArrowDownLeft,
3398
+ "external-link": ExternalLink,
3399
+ menu: Menu,
3400
+ x: X,
3401
+ search: SearchIcon,
3402
+ plus: Plus,
3403
+ minus: Minus,
3404
+ "square-pen": SquarePen,
3405
+ "trash-2": Trash2,
3406
+ download: Download,
3407
+ upload: Upload,
3408
+ copy: Copy,
3409
+ "share-2": Share2,
3410
+ funnel: Funnel,
3411
+ filter: Funnel,
3412
+ "arrow-up-down": ArrowUpDown,
3413
+ settings: Settings,
3414
+ "refresh-cw": RefreshCw,
3415
+ check: Check,
3416
+ send: Send,
3417
+ eye: Eye,
3418
+ "eye-off": EyeOff,
3419
+ bell: Bell,
3420
+ "bell-off": BellOff,
3421
+ ellipsis: Ellipsis,
3422
+ "ellipsis-vertical": EllipsisVertical,
3423
+ save: Save,
3424
+ info: Info,
3425
+ "triangle-alert": TriangleAlert,
3426
+ "circle-x": CircleX,
3427
+ "circle-check": CircleCheck,
3428
+ "circle-check-big": CircleCheckBig,
3429
+ clock: Clock,
3430
+ loader: Loader,
3431
+ sun: Sun,
3432
+ moon: Moon,
3433
+ lock: Lock,
3434
+ "lock-open": LockOpen,
3435
+ "circle-question-mark": CircleQuestionMark,
3436
+ "circle-help": CircleQuestionMark,
3437
+ ban: Ban,
3438
+ "check-check": CheckCheck,
3439
+ "octagon-alert": OctagonAlert,
3440
+ play: Play,
3441
+ pause: Pause,
3442
+ square: Square,
3443
+ globe: Globe,
3444
+ image: Image,
3445
+ file: File,
3446
+ link: Link,
3447
+ package: Package,
3448
+ rocket: Rocket,
3449
+ "grid-3x3": Grid3x3,
3450
+ "notebook-pen": NotebookPen,
3451
+ "code-xml": CodeXml,
3452
+ "trending-up": TrendingUp,
3453
+ "trending-down": TrendingDown,
3454
+ "chart-line": ChartLine,
3455
+ "chart-column": ChartColumn,
3456
+ "chart-candlestick": ChartCandlestick,
3457
+ "chart-pie": ChartPie,
3458
+ wallet: Wallet,
3459
+ briefcase: Briefcase,
3460
+ calendar: Calendar,
3461
+ bookmark: Bookmark,
3462
+ percent: Percent,
3463
+ "dollar-sign": DollarSign,
3464
+ activity: Activity,
3465
+ target: Target,
3466
+ scale: Scale,
3467
+ banknote: Banknote,
3468
+ "ai-sparkle": AiSparkle,
3469
+ bot: Bot,
3470
+ "bot-message-square": BotMessageSquare,
3471
+ cpu: Cpu,
3472
+ "agent-stocky": AgentStocky,
3473
+ "agent-orb": AgentOrb,
3474
+ "agent-droid": AgentDroid,
3475
+ "agent-hex": AgentHex
3476
+ };
3477
+ var BRAND_ICON_NAMES = [
3478
+ "github",
3479
+ "npm",
3480
+ "figma",
3481
+ "notion",
3482
+ "vercel",
3483
+ "chromestore",
3484
+ "vscode",
3485
+ "linear",
3486
+ "linkedin",
3487
+ "x-twitter",
3488
+ "youtube",
3489
+ "google",
3490
+ "reddit",
3491
+ "openai",
3492
+ "anthropic",
3493
+ "claude",
3494
+ "gemini",
3495
+ "deepseek",
3496
+ "moonshot",
3497
+ "glm",
3498
+ "mistral",
3499
+ "perplexity",
3500
+ "huggingface",
3501
+ "ollama",
3502
+ "qwen",
3503
+ "meta"
3504
+ ];
3505
+ function Icon({ name, ...props }) {
3506
+ const Glyph = ICON_REGISTRY[name];
3507
+ if (!Glyph) return null;
3508
+ return /* @__PURE__ */ jsxRuntime.jsx(Glyph, { ...props });
3509
+ }
3510
+ var SAFE_MEDIA_SRC = /^(?:https?:\/\/|\/|\.\.?\/|data:(?:image|video)\/|blob:)/i;
3511
+ var SAFE_EMBED_SRC = /^https:\/\//i;
3512
+ var YOUTUBE_RE = /(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([\w-]{11})/;
3513
+ var VIMEO_RE = /vimeo\.com\/(?:video\/)?(\d+)/;
3514
+ function safeMediaUrl(url) {
3515
+ return url !== void 0 && SAFE_MEDIA_SRC.test(url) ? url : void 0;
3516
+ }
3517
+ function resolveEmbed(src, provider, thumbnail) {
3518
+ const yt = YOUTUBE_RE.exec(src);
3519
+ if ((provider === void 0 || provider === "youtube") && yt?.[1] !== void 0) {
3520
+ const id = yt[1];
3521
+ return {
3522
+ iframeSrc: `https://www.youtube.com/embed/${id}?autoplay=1`,
3523
+ poster: thumbnail ?? `https://img.youtube.com/vi/${id}/maxresdefault.jpg`,
3524
+ // Only the derived maxres thumbnail has an hqdefault fallback; an explicit
3525
+ // thumbnail does not (and is honored as-is).
3526
+ ...thumbnail === void 0 ? { posterFallback: `https://img.youtube.com/vi/${id}/hqdefault.jpg` } : {}
3527
+ };
3528
+ }
3529
+ const vm = VIMEO_RE.exec(src);
3530
+ if ((provider === void 0 || provider === "vimeo") && vm?.[1] !== void 0) {
3531
+ return {
3532
+ iframeSrc: `https://player.vimeo.com/video/${vm[1]}?autoplay=1`,
3533
+ ...thumbnail !== void 0 ? { poster: thumbnail } : {}
3534
+ };
3535
+ }
3536
+ return { iframeSrc: src, ...thumbnail !== void 0 ? { poster: thumbnail } : {} };
3537
+ }
3538
+ function usePrefersReducedMotion() {
3539
+ const [reduced, setReduced] = react.useState(false);
3540
+ react.useEffect(() => {
3541
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
3542
+ const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
3543
+ const update = () => {
3544
+ setReduced(mq.matches);
3545
+ };
3546
+ update();
3547
+ mq.addEventListener("change", update);
3548
+ return () => {
3549
+ mq.removeEventListener("change", update);
3550
+ };
3551
+ }, []);
3552
+ return reduced;
3553
+ }
3554
+ function DefaultMediaGlyph() {
3555
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: [
3556
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
3557
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8.5", cy: "8.5", r: "1.5" }),
3558
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 15l-5-5L5 21" })
3559
+ ] });
3560
+ }
3561
+ function MediaSlot({
3562
+ src,
3563
+ type,
3564
+ shape = "rounded",
3565
+ radius,
3566
+ mask,
3567
+ fit = "cover",
3568
+ position = "50% 50%",
3569
+ aspectRatio,
3570
+ lazy = true,
3571
+ poster,
3572
+ placeholder,
3573
+ controls,
3574
+ autoPlay = false,
3575
+ muted = true,
3576
+ loop = false,
3577
+ provider,
3578
+ thumbnail,
3579
+ alt,
3580
+ badge,
3581
+ className
3582
+ }) {
3583
+ const reducedMotion = usePrefersReducedMotion();
3584
+ const [activated, setActivated] = react.useState(false);
3585
+ const [posterErrored, setPosterErrored] = react.useState(false);
3586
+ const identity = `${src ?? ""}|${provider ?? ""}`;
3587
+ const [prevIdentity, setPrevIdentity] = react.useState(identity);
3588
+ if (identity !== prevIdentity) {
3589
+ setPrevIdentity(identity);
3590
+ setActivated(false);
3591
+ setPosterErrored(false);
3592
+ }
3593
+ function renderPlaceholder() {
3594
+ if (placeholder !== void 0) {
3595
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "media-slot__placeholder", children: placeholder });
3596
+ }
3597
+ const iconOnly = shape === "circle";
3598
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3599
+ "div",
3600
+ {
3601
+ className: iconOnly ? "media-slot__placeholder media-slot__placeholder--icon" : "media-slot__placeholder",
3602
+ children: [
3603
+ /* @__PURE__ */ jsxRuntime.jsx(DefaultMediaGlyph, {}),
3604
+ iconOnly ? null : /* @__PURE__ */ jsxRuntime.jsx("span", { children: "No media" })
3605
+ ]
3606
+ }
3607
+ );
3608
+ }
3609
+ function renderImageOrGif() {
3610
+ const safeSrc = safeMediaUrl(src);
3611
+ if (safeSrc === void 0) return { node: renderPlaceholder(), empty: true };
3612
+ return {
3613
+ node: /* @__PURE__ */ jsxRuntime.jsx("img", { src: safeSrc, alt: alt ?? "", loading: lazy ? "lazy" : void 0 }),
3614
+ empty: false
3615
+ };
3616
+ }
3617
+ function renderVideo() {
3618
+ const safeSrc = safeMediaUrl(src);
3619
+ if (safeSrc === void 0) return { node: renderPlaceholder(), empty: true };
3620
+ const gifAsVideo = autoPlay && loop && muted;
3621
+ return {
3622
+ node: /* @__PURE__ */ jsxRuntime.jsx(
3623
+ "video",
3624
+ {
3625
+ src: safeSrc,
3626
+ poster: safeMediaUrl(poster),
3627
+ preload: lazy ? "none" : "metadata",
3628
+ muted,
3629
+ controls: controls ?? !gifAsVideo,
3630
+ autoPlay: autoPlay && !reducedMotion,
3631
+ loop,
3632
+ playsInline: gifAsVideo
3633
+ }
3634
+ ),
3635
+ empty: false
3636
+ };
3637
+ }
3638
+ function renderEmbed() {
3639
+ if (src === void 0 || src === "") return { node: renderPlaceholder(), empty: true };
3640
+ const resolved = resolveEmbed(src, provider, thumbnail);
3641
+ if (resolved === null || !SAFE_EMBED_SRC.test(resolved.iframeSrc)) {
3642
+ return { node: renderPlaceholder(), empty: true };
3643
+ }
3644
+ if (activated) {
3645
+ return {
3646
+ node: /* @__PURE__ */ jsxRuntime.jsx(
3647
+ "iframe",
3648
+ {
3649
+ src: resolved.iframeSrc,
3650
+ title: alt !== void 0 && alt !== "" ? alt : "Embedded video",
3651
+ allow: "autoplay; fullscreen; encrypted-media; picture-in-picture",
3652
+ referrerPolicy: "strict-origin-when-cross-origin",
3653
+ allowFullScreen: true
3654
+ }
3655
+ ),
3656
+ empty: false
3657
+ };
3658
+ }
3659
+ const rawPoster = posterErrored && resolved.posterFallback !== void 0 ? resolved.posterFallback : resolved.poster;
3660
+ const posterSrc = safeMediaUrl(rawPoster);
3661
+ return {
3662
+ node: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3663
+ posterSrc !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
3664
+ "img",
3665
+ {
3666
+ className: "media-slot__poster",
3667
+ src: posterSrc,
3668
+ alt: alt ?? "",
3669
+ loading: lazy ? "lazy" : void 0,
3670
+ onError: resolved.posterFallback !== void 0 ? () => {
3671
+ setPosterErrored(true);
3672
+ } : void 0
3673
+ }
3674
+ ) : null,
3675
+ /* @__PURE__ */ jsxRuntime.jsx(
3676
+ "button",
3677
+ {
3678
+ type: "button",
3679
+ className: "media-slot__play",
3680
+ "aria-label": alt !== void 0 && alt !== "" ? `Play: ${alt}` : "Play video",
3681
+ onClick: () => {
3682
+ setActivated(true);
3683
+ },
3684
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tri", "aria-hidden": "true" })
3685
+ }
3686
+ )
3687
+ ] }),
3688
+ empty: false
3689
+ };
3690
+ }
3691
+ const { node: inner, empty } = type === "embed" ? renderEmbed() : type === "video" ? renderVideo() : renderImageOrGif();
3692
+ const shapeClass = mask !== void 0 ? null : `media-slot--${shape}`;
3693
+ const emptyClass = empty ? "media-slot--empty" : null;
3694
+ const cls = ["media-slot", shapeClass, emptyClass, className].filter(Boolean).join(" ");
3695
+ const slotStyle = {
3696
+ "--ms-fit": fit,
3697
+ "--ms-pos": position,
3698
+ ...aspectRatio !== void 0 || shape === "circle" ? { "--ms-aspect": aspectRatio ?? "1 / 1" } : {},
3699
+ ...shape === "rounded" && radius !== void 0 ? { "--ms-radius": `${radius}px` } : {},
3700
+ ...mask !== void 0 ? { clipPath: mask } : {}
3701
+ };
3702
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, style: slotStyle, "data-media-type": type, children: [
3703
+ inner,
3704
+ badge !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "media-slot__badge", children: badge }) : null
3705
+ ] });
3706
+ }
3707
+
3708
+ exports.ALLOWED_ELEMENTS = ALLOWED_ELEMENTS;
3709
+ exports.Activity = Activity;
3710
+ exports.AgentDroid = AgentDroid;
3711
+ exports.AgentHex = AgentHex;
3712
+ exports.AgentOrb = AgentOrb;
3713
+ exports.AgentStocky = AgentStocky;
3714
+ exports.AiSparkle = AiSparkle;
3715
+ exports.AlertModal = AlertModal;
3716
+ exports.Anthropic = Anthropic;
3717
+ exports.AppBar = AppBar;
3718
+ exports.ArrowDown = ArrowDown;
3719
+ exports.ArrowDownLeft = ArrowDownLeft;
3720
+ exports.ArrowDownRight = ArrowDownRight;
3721
+ exports.ArrowLeft = ArrowLeft;
3722
+ exports.ArrowRight = ArrowRight;
3723
+ exports.ArrowUp = ArrowUp;
3724
+ exports.ArrowUpDown = ArrowUpDown;
3725
+ exports.ArrowUpLeft = ArrowUpLeft;
3726
+ exports.ArrowUpRight = ArrowUpRight;
3727
+ exports.AsciiBg = AsciiBg;
3728
+ exports.Avatar = Avatar;
3729
+ exports.AvatarGroup = AvatarGroup;
3730
+ exports.BRAND_ICON_NAMES = BRAND_ICON_NAMES;
3731
+ exports.Badge = Badge;
3732
+ exports.Ban = Ban;
3733
+ exports.Banknote = Banknote;
3734
+ exports.Bell = Bell;
3735
+ exports.BellOff = BellOff;
3736
+ exports.Bookmark = Bookmark;
3737
+ exports.Bot = Bot;
3738
+ exports.BotMessageSquare = BotMessageSquare;
3739
+ exports.Briefcase = Briefcase;
3740
+ exports.Button = Button;
3741
+ exports.Calendar = Calendar;
3742
+ exports.Callout = Callout;
3743
+ exports.Candlestick = Candlestick;
3744
+ exports.Card = Card;
3745
+ exports.ChartCandlestick = ChartCandlestick;
3746
+ exports.ChartColumn = ChartColumn;
3747
+ exports.ChartLine = ChartLine;
3748
+ exports.ChartPie = ChartPie;
3749
+ exports.Check = Check;
3750
+ exports.CheckCheck = CheckCheck;
3751
+ exports.ChevronDown = ChevronDown;
3752
+ exports.ChevronLeft = ChevronLeft;
3753
+ exports.ChevronRight = ChevronRight;
3754
+ exports.ChevronUp = ChevronUp;
3755
+ exports.ChromeWebStore = ChromeWebStore;
3756
+ exports.CircleCheck = CircleCheck;
3757
+ exports.CircleCheckBig = CircleCheckBig;
3758
+ exports.CircleHelp = CircleQuestionMark;
3759
+ exports.CircleQuestionMark = CircleQuestionMark;
3760
+ exports.CircleX = CircleX;
3761
+ exports.Claude = Claude;
3762
+ exports.Clock = Clock;
3763
+ exports.CodeXml = CodeXml;
3764
+ exports.CommandDock = CommandDock;
3765
+ exports.Composer = Composer;
3766
+ exports.Copy = Copy;
3767
+ exports.Cpu = Cpu;
3768
+ exports.DataTable = DataTable;
3769
+ exports.DeepSeek = DeepSeek;
3770
+ exports.DigestCard = DigestCard;
3771
+ exports.Divider = Divider;
3772
+ exports.DollarSign = DollarSign;
3773
+ exports.Download = Download;
3774
+ exports.Ellipsis = Ellipsis;
3775
+ exports.EllipsisVertical = EllipsisVertical;
3776
+ exports.EmptyStateFig = EmptyStateFig;
3777
+ exports.ErrorStateFig = ErrorStateFig;
3778
+ exports.ExternalLink = ExternalLink;
3779
+ exports.Eye = Eye;
3780
+ exports.EyeOff = EyeOff;
3781
+ exports.Field = Field;
3782
+ exports.Figma = Figma;
3783
+ exports.File = File;
3784
+ exports.Filter = Funnel;
3785
+ exports.Funnel = Funnel;
3786
+ exports.GLM = GLM;
3787
+ exports.Gemini = Gemini;
3788
+ exports.GitHub = GitHub;
3789
+ exports.Globe = Globe;
3790
+ exports.GlyphsBg = GlyphsBg;
3791
+ exports.Google = Google;
3792
+ exports.Grid3x3 = Grid3x3;
3793
+ exports.GridBg = GridBg;
3794
+ exports.GroundingFlag = GroundingFlag;
3795
+ exports.HuggingFace = HuggingFace;
3796
+ exports.ICON_NAMES = ICON_NAMES;
3797
+ exports.Icon = Icon;
3798
+ exports.Image = Image;
3799
+ exports.Info = Info;
3800
+ exports.Input = Input;
3801
+ exports.Linear = Linear;
3802
+ exports.Link = Link;
3803
+ exports.LinkedIn = LinkedIn;
3804
+ exports.Loader = Loader;
3805
+ exports.Lock = Lock;
3806
+ exports.LockOpen = LockOpen;
3807
+ exports.MarkdownRenderer = MarkdownRenderer;
3808
+ exports.MediaSlot = MediaSlot;
3809
+ exports.Menu = Menu;
3810
+ exports.Meta = Meta;
3811
+ exports.Meter = Meter;
3812
+ exports.Minus = Minus;
3813
+ exports.Mistral = Mistral;
3814
+ exports.Modal = Modal;
3815
+ exports.ModalClose = ModalClose;
3816
+ exports.ModalContent = ModalContent;
3817
+ exports.ModalDescription = ModalDescription;
3818
+ exports.ModalTitle = ModalTitle;
3819
+ exports.ModalTrigger = ModalTrigger;
3820
+ exports.Moon = Moon;
3821
+ exports.Moonshot = Moonshot;
3822
+ exports.NPM = NPM;
3823
+ exports.NotebookPen = NotebookPen;
3824
+ exports.NotificationBell = NotificationBell;
3825
+ exports.NotificationCenter = NotificationCenter;
3826
+ exports.Notion = Notion;
3827
+ exports.OctagonAlert = OctagonAlert;
3828
+ exports.Ollama = Ollama;
3829
+ exports.OpenAI = OpenAI;
3830
+ exports.Package = Package;
3831
+ exports.Pause = Pause;
3832
+ exports.Percent = Percent;
3833
+ exports.Perplexity = Perplexity;
3834
+ exports.Play = Play;
3835
+ exports.Plus = Plus;
3836
+ exports.Qwen = Qwen;
3837
+ exports.Reddit = Reddit;
3838
+ exports.RefreshCw = RefreshCw;
3839
+ exports.Rocket = Rocket;
3840
+ exports.Save = Save;
3841
+ exports.Scale = Scale;
3842
+ exports.Scrim = Scrim;
3843
+ exports.Search = Search;
3844
+ exports.SearchIcon = SearchIcon;
3845
+ exports.SecretInput = SecretInput;
3846
+ exports.Segmented = Segmented;
3847
+ exports.SegmentedItem = SegmentedItem;
3848
+ exports.Select = Select;
3849
+ exports.SelectItem = SelectItem;
3850
+ exports.Send = Send;
3851
+ exports.Settings = Settings;
3852
+ exports.Share2 = Share2;
3853
+ exports.Skeleton = Skeleton;
3854
+ exports.Sparkline = Sparkline;
3855
+ exports.Spinner = Spinner;
3856
+ exports.Square = Square;
3857
+ exports.SquarePen = SquarePen;
3858
+ exports.Stat = Stat;
3859
+ exports.Sun = Sun;
3860
+ exports.Surface = Surface;
3861
+ exports.Switch = Switch;
3862
+ exports.Tabs = Tabs;
3863
+ exports.TabsContent = TabsContent;
3864
+ exports.TabsList = TabsList;
3865
+ exports.TabsTrigger = TabsTrigger;
3866
+ exports.Target = Target;
3867
+ exports.Terminal = Terminal;
3868
+ exports.ThemeToggle = ThemeToggle;
3869
+ exports.Toaster = Toaster;
3870
+ exports.ToolUseIndicator = ToolUseIndicator;
3871
+ exports.Tooltip = Tooltip;
3872
+ exports.TooltipContent = TooltipContent;
3873
+ exports.TooltipProvider = TooltipProvider;
3874
+ exports.TooltipTrigger = TooltipTrigger;
3875
+ exports.Trash2 = Trash2;
3876
+ exports.TrendingDown = TrendingDown;
3877
+ exports.TrendingUp = TrendingUp;
3878
+ exports.TriangleAlert = TriangleAlert;
3879
+ exports.Upload = Upload;
3880
+ exports.UserMenu = UserMenu;
3881
+ exports.UserMenuContent = UserMenuContent;
3882
+ exports.UserMenuGroup = UserMenuGroup;
3883
+ exports.UserMenuHeader = UserMenuHeader;
3884
+ exports.UserMenuItem = UserMenuItem;
3885
+ exports.UserMenuSeparator = UserMenuSeparator;
3886
+ exports.UserMenuTrigger = UserMenuTrigger;
3887
+ exports.VSCode = VSCode;
3888
+ exports.Vercel = Vercel;
3889
+ exports.Wallet = Wallet;
3890
+ exports.X = X;
3891
+ exports.XTwitter = XTwitter;
3892
+ exports.YouTube = YouTube;
3893
+ exports.parseStreamFrame = parseStreamFrame;
3894
+ exports.streamFromResponse = streamFromResponse;
3895
+ exports.toast = toast;
3896
+ exports.useCanvas2D = useCanvas2D;
3897
+ exports.useStreaming = useStreaming;
3898
+ //# sourceMappingURL=index.cjs.map
3899
+ //# sourceMappingURL=index.cjs.map