@ship-it-ui/shipit 0.0.1 → 0.0.2

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 CHANGED
@@ -1,16 +1,67 @@
1
- 'use strict';
1
+ 'use client';
2
2
 
3
- var clsx = require('clsx');
4
- var tailwindMerge = require('tailwind-merge');
5
- var ui = require('@ship-it-ui/ui');
6
- var react = require('react');
7
- var jsxRuntime = require('react/jsx-runtime');
3
+ "use strict";
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
8
21
 
9
- // src/utils/cn.ts
10
- function cn(...inputs) {
11
- return tailwindMerge.twMerge(clsx.clsx(inputs));
12
- }
13
- var AskBar = react.forwardRef(function AskBar2({
22
+ // src/index.ts
23
+ var index_exports = {};
24
+ __export(index_exports, {
25
+ AskBar: () => AskBar,
26
+ CTAStrip: () => CTAStrip,
27
+ Citation: () => Citation,
28
+ ConfidenceIndicator: () => ConfidenceIndicator,
29
+ CopilotMessage: () => CopilotMessage,
30
+ ENTITY_GLYPH: () => ENTITY_GLYPH,
31
+ ENTITY_LABEL: () => ENTITY_LABEL,
32
+ ENTITY_TONE_BG: () => ENTITY_TONE_BG,
33
+ ENTITY_TONE_CLASS: () => ENTITY_TONE_CLASS,
34
+ EntityBadge: () => EntityBadge,
35
+ EntityCard: () => EntityCard,
36
+ EntityListRow: () => EntityListRow,
37
+ EntityListRowButton: () => EntityListRowButton,
38
+ EntityListRowDiv: () => EntityListRowDiv,
39
+ FeatureGrid: () => FeatureGrid,
40
+ Footer: () => Footer,
41
+ GraphEdge: () => GraphEdge,
42
+ GraphInspector: () => GraphInspector,
43
+ GraphLegend: () => GraphLegend,
44
+ GraphMinimap: () => GraphMinimap,
45
+ GraphNode: () => GraphNode,
46
+ Hero: () => Hero,
47
+ PathOverlay: () => PathOverlay,
48
+ PricingCard: () => PricingCard,
49
+ ReasoningBlock: () => ReasoningBlock,
50
+ ReasoningStep: () => ReasoningStep,
51
+ SuggestionChip: () => SuggestionChip,
52
+ Testimonial: () => Testimonial,
53
+ ToolCallCard: () => ToolCallCard,
54
+ cn: () => import_ui27.cn
55
+ });
56
+ module.exports = __toCommonJS(index_exports);
57
+ var import_ui27 = require("@ship-it-ui/ui");
58
+
59
+ // src/ai/AskBar.tsx
60
+ var import_ui = require("@ship-it-ui/ui");
61
+ var import_react = require("react");
62
+ var import_ui2 = require("@ship-it-ui/ui");
63
+ var import_jsx_runtime = require("react/jsx-runtime");
64
+ var AskBar = (0, import_react.forwardRef)(function AskBar2({
14
65
  value: valueProp,
15
66
  defaultValue,
16
67
  onValueChange,
@@ -24,12 +75,12 @@ var AskBar = react.forwardRef(function AskBar2({
24
75
  children,
25
76
  ...props
26
77
  }, ref) {
27
- const [value, setValue] = ui.useControllableState({
78
+ const [value, setValue] = (0, import_ui.useControllableState)({
28
79
  value: valueProp,
29
80
  defaultValue: defaultValue ?? "",
30
81
  onChange: onValueChange
31
82
  });
32
- const inputRef = react.useRef(null);
83
+ const inputRef = (0, import_react.useRef)(null);
33
84
  const submit = () => {
34
85
  const v = (value ?? "").trim();
35
86
  if (!v) return;
@@ -45,23 +96,23 @@ var AskBar = react.forwardRef(function AskBar2({
45
96
  submit();
46
97
  }
47
98
  };
48
- return /* @__PURE__ */ jsxRuntime.jsxs(
99
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
49
100
  "form",
50
101
  {
51
102
  ref,
52
103
  role: "search",
53
104
  onSubmit: handleSubmit,
54
105
  style: { maxWidth },
55
- className: cn(
106
+ className: (0, import_ui2.cn)(
56
107
  "border-border-strong bg-panel w-full rounded-xl border p-[14px] shadow",
57
108
  "focus-within:border-accent focus-within:ring-accent-dim focus-within:ring-[3px]",
58
109
  className
59
110
  ),
60
111
  ...props,
61
112
  children: [
62
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-[10px] flex items-start gap-[10px]", children: [
63
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-accent text-[16px]", children: "\u2726" }),
64
- /* @__PURE__ */ jsxRuntime.jsx(
113
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-[10px] flex items-start gap-[10px]", children: [
114
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": true, className: "text-accent text-[16px]", children: "\u2726" }),
115
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
116
  "textarea",
66
117
  {
67
118
  ref: inputRef,
@@ -71,13 +122,13 @@ var AskBar = react.forwardRef(function AskBar2({
71
122
  placeholder,
72
123
  "aria-label": placeholder,
73
124
  rows: 1,
74
- className: cn(
125
+ className: (0, import_ui2.cn)(
75
126
  "text-text flex-1 resize-none border-0 bg-transparent text-[14px] leading-[1.5] outline-none",
76
127
  "placeholder:text-text-dim"
77
128
  )
78
129
  }
79
130
  ),
80
- streaming && /* @__PURE__ */ jsxRuntime.jsx(
131
+ streaming && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
81
132
  "span",
82
133
  {
83
134
  "aria-hidden": true,
@@ -85,12 +136,12 @@ var AskBar = react.forwardRef(function AskBar2({
85
136
  }
86
137
  )
87
138
  ] }),
88
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-[6px]", children: [
139
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-wrap items-center gap-[6px]", children: [
89
140
  children,
90
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
91
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-text-dim font-mono text-[11px]", children: "\u2318\u21B5" }),
92
- /* @__PURE__ */ jsxRuntime.jsx(
93
- ui.Button,
141
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "ml-auto flex items-center gap-2", children: [
142
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": true, className: "text-text-dim font-mono text-[11px]", children: "\u2318\u21B5" }),
143
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
144
+ import_ui.Button,
94
145
  {
95
146
  type: "submit",
96
147
  size: "sm",
@@ -106,25 +157,30 @@ var AskBar = react.forwardRef(function AskBar2({
106
157
  );
107
158
  });
108
159
  AskBar.displayName = "AskBar";
160
+
161
+ // src/ai/Citation.tsx
162
+ var import_react2 = require("react");
163
+ var import_ui3 = require("@ship-it-ui/ui");
164
+ var import_jsx_runtime2 = require("react/jsx-runtime");
109
165
  var SUPERSCRIPTS = ["\u2070", "\xB9", "\xB2", "\xB3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"];
110
166
  function toSuperscript(n) {
111
167
  return String(n).split("").map((d) => SUPERSCRIPTS[Number(d)] ?? d).join("");
112
168
  }
113
- var Citation = react.forwardRef(function Citation2({ index, source, meta, inline, className, ...props }, ref) {
169
+ var Citation = (0, import_react2.forwardRef)(function Citation2({ index, source, meta, inline, className, ...props }, ref) {
114
170
  if (inline) {
115
- return /* @__PURE__ */ jsxRuntime.jsx(
171
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
116
172
  "sup",
117
173
  {
118
174
  ref,
119
175
  "aria-label": typeof source === "string" ? `Citation ${index}: ${source}` : `Citation ${index}`,
120
- className: cn("text-accent ml-[2px] font-mono text-[10px]", className),
176
+ className: (0, import_ui3.cn)("text-accent ml-[2px] font-mono text-[10px]", className),
121
177
  ...props,
122
178
  children: toSuperscript(index)
123
179
  }
124
180
  );
125
181
  }
126
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { ref, className: cn("inline-flex items-center gap-2", className), ...props, children: [
127
- /* @__PURE__ */ jsxRuntime.jsx(
182
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { ref, className: (0, import_ui3.cn)("inline-flex items-center gap-2", className), ...props, children: [
183
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
128
184
  "span",
129
185
  {
130
186
  "aria-hidden": true,
@@ -132,17 +188,22 @@ var Citation = react.forwardRef(function Citation2({ index, source, meta, inline
132
188
  children: toSuperscript(index)
133
189
  }
134
190
  ),
135
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-text-muted text-[12px]", children: [
136
- source != null && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
191
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "text-text-muted text-[12px]", children: [
192
+ source != null && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
137
193
  "from ",
138
194
  source
139
195
  ] }),
140
- source != null && meta != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim", children: " \xB7 " }),
196
+ source != null && meta != null && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "text-text-dim", children: " \xB7 " }),
141
197
  meta
142
198
  ] })
143
199
  ] });
144
200
  });
145
201
  Citation.displayName = "Citation";
202
+
203
+ // src/ai/ConfidenceIndicator.tsx
204
+ var import_react3 = require("react");
205
+ var import_ui4 = require("@ship-it-ui/ui");
206
+ var import_jsx_runtime3 = require("react/jsx-runtime");
146
207
  var tierLabel = {
147
208
  high: "High",
148
209
  medium: "Medium",
@@ -167,12 +228,12 @@ function deriveTier(value) {
167
228
  if (value >= 50) return "low";
168
229
  return "unverified";
169
230
  }
170
- var ConfidenceIndicator = react.forwardRef(
231
+ var ConfidenceIndicator = (0, import_react3.forwardRef)(
171
232
  function ConfidenceIndicator2({ value, tier: tierProp, label, width = 120, hideValue, className, ...props }, ref) {
172
233
  const tier = tierProp ?? deriveTier(value);
173
234
  const pct = Math.max(0, Math.min(100, value));
174
235
  const display = label ?? tierLabel[tier];
175
- return /* @__PURE__ */ jsxRuntime.jsxs(
236
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
176
237
  "div",
177
238
  {
178
239
  ref,
@@ -182,59 +243,65 @@ var ConfidenceIndicator = react.forwardRef(
182
243
  "aria-valuemax": 100,
183
244
  "aria-valuenow": Math.round(pct),
184
245
  "aria-valuetext": `${Math.round(pct)}% \u2014 ${typeof display === "string" ? display : tierLabel[tier]}`,
185
- className: cn("inline-flex items-center gap-[10px] text-[11px]", className),
246
+ className: (0, import_ui4.cn)("inline-flex items-center gap-[10px] text-[11px]", className),
186
247
  ...props,
187
248
  children: [
188
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, style: { width }, className: "bg-panel-2 h-1 overflow-hidden rounded-full", children: /* @__PURE__ */ jsxRuntime.jsx(
249
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { "aria-hidden": true, style: { width }, className: "bg-panel-2 h-1 overflow-hidden rounded-full", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
189
250
  "span",
190
251
  {
191
- className: cn(
252
+ className: (0, import_ui4.cn)(
192
253
  "block h-full rounded-full transition-[width] duration-(--duration-step)",
193
254
  tierBarClass[tier]
194
255
  ),
195
256
  style: { width: `${pct}%` }
196
257
  }
197
258
  ) }),
198
- !hideValue && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-text min-w-[44px] font-mono tabular-nums", children: [
259
+ !hideValue && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "text-text min-w-[44px] font-mono tabular-nums", children: [
199
260
  pct.toFixed(1),
200
261
  "%"
201
262
  ] }),
202
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: tierTextClass[tier], children: display })
263
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: tierTextClass[tier], children: display })
203
264
  ]
204
265
  }
205
266
  );
206
267
  }
207
268
  );
208
269
  ConfidenceIndicator.displayName = "ConfidenceIndicator";
209
- var CopilotMessage = react.forwardRef(
270
+
271
+ // src/ai/CopilotMessage.tsx
272
+ var import_ui5 = require("@ship-it-ui/ui");
273
+ var import_react4 = require("react");
274
+ var import_ui6 = require("@ship-it-ui/ui");
275
+ var import_jsx_runtime4 = require("react/jsx-runtime");
276
+ var CopilotMessage = (0, import_react4.forwardRef)(
210
277
  function CopilotMessage2({ role, avatar, streaming, className, children, ...props }, ref) {
211
278
  const isAssistant = role === "assistant";
212
- return /* @__PURE__ */ jsxRuntime.jsxs(
279
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
213
280
  "div",
214
281
  {
215
282
  ref,
216
- className: cn("flex items-start gap-[10px]", className),
283
+ className: (0, import_ui6.cn)("flex items-start gap-[10px]", className),
217
284
  "data-role": role,
218
285
  ...props,
219
286
  children: [
220
- isAssistant ? /* @__PURE__ */ jsxRuntime.jsx(
287
+ isAssistant ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
221
288
  "span",
222
289
  {
223
290
  "aria-hidden": true,
224
291
  className: "bg-accent-dim text-accent grid h-6 w-6 shrink-0 place-items-center rounded-full text-[11px] font-semibold",
225
292
  children: "\u2726"
226
293
  }
227
- ) : typeof avatar === "string" ? /* @__PURE__ */ jsxRuntime.jsx(ui.Avatar, { size: "sm", name: avatar }) : avatar ?? null,
228
- /* @__PURE__ */ jsxRuntime.jsxs(
294
+ ) : typeof avatar === "string" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_ui5.Avatar, { size: "sm", name: avatar }) : avatar ?? null,
295
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
229
296
  "div",
230
297
  {
231
- className: cn(
298
+ className: (0, import_ui6.cn)(
232
299
  "rounded-base min-w-0 flex-1 px-[14px] py-3 text-[13px] leading-[1.6]",
233
300
  isAssistant ? "bg-panel border-border border" : "bg-panel-2"
234
301
  ),
235
302
  children: [
236
303
  children,
237
- streaming && /* @__PURE__ */ jsxRuntime.jsx(
304
+ streaming && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
238
305
  "span",
239
306
  {
240
307
  "aria-hidden": true,
@@ -250,7 +317,13 @@ var CopilotMessage = react.forwardRef(
250
317
  }
251
318
  );
252
319
  CopilotMessage.displayName = "CopilotMessage";
253
- var ReasoningBlock = react.forwardRef(
320
+
321
+ // src/ai/ReasoningBlock.tsx
322
+ var import_ui7 = require("@ship-it-ui/ui");
323
+ var import_react5 = require("react");
324
+ var import_ui8 = require("@ship-it-ui/ui");
325
+ var import_jsx_runtime5 = require("react/jsx-runtime");
326
+ var ReasoningBlock = (0, import_react5.forwardRef)(
254
327
  function ReasoningBlock2({
255
328
  label,
256
329
  stepCount,
@@ -262,21 +335,21 @@ var ReasoningBlock = react.forwardRef(
262
335
  children,
263
336
  ...props
264
337
  }, ref) {
265
- const [open, setOpen] = ui.useControllableState({
338
+ const [open, setOpen] = (0, import_ui7.useControllableState)({
266
339
  value: openProp,
267
340
  defaultValue: defaultOpen,
268
341
  onChange: onOpenChange
269
342
  });
270
- const inferredCount = stepCount ?? react.Children.count(children);
343
+ const inferredCount = stepCount ?? import_react5.Children.count(children);
271
344
  const heading = label ?? `Reasoning \xB7 ${inferredCount} step${inferredCount === 1 ? "" : "s"}`;
272
- return /* @__PURE__ */ jsxRuntime.jsxs(
345
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
273
346
  "div",
274
347
  {
275
348
  ref,
276
- className: cn("border-border bg-panel-2 overflow-hidden rounded-md border", className),
349
+ className: (0, import_ui8.cn)("border-border bg-panel-2 overflow-hidden rounded-md border", className),
277
350
  ...props,
278
351
  children: [
279
- /* @__PURE__ */ jsxRuntime.jsxs(
352
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
280
353
  "button",
281
354
  {
282
355
  type: "button",
@@ -284,22 +357,22 @@ var ReasoningBlock = react.forwardRef(
284
357
  onClick: () => setOpen(!open),
285
358
  className: "focus-visible:ring-accent-dim flex w-full cursor-pointer items-center gap-[10px] border-0 bg-transparent px-[14px] py-[10px] text-left outline-none focus-visible:ring-[3px]",
286
359
  children: [
287
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-text-dim font-mono text-[11px]", children: open ? "\u25BE" : "\u25B8" }),
288
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] font-medium", children: heading }),
289
- duration != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim ml-auto font-mono text-[10px]", children: duration })
360
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "aria-hidden": true, className: "text-text-dim font-mono text-[11px]", children: open ? "\u25BE" : "\u25B8" }),
361
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-[12px] font-medium", children: heading }),
362
+ duration != null && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[10px]", children: duration })
290
363
  ]
291
364
  }
292
365
  ),
293
- open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border text-text-muted border-t px-[14px] py-[10px] pl-9 text-[11px] leading-[1.7]", children })
366
+ open && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "border-border text-text-muted border-t px-[14px] py-[10px] pl-9 text-[11px] leading-[1.7]", children })
294
367
  ]
295
368
  }
296
369
  );
297
370
  }
298
371
  );
299
372
  ReasoningBlock.displayName = "ReasoningBlock";
300
- var ReasoningStep = react.forwardRef(function ReasoningStep2({ step, className, children, ...props }, ref) {
301
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn("mb-[2px] last:mb-0", className), ...props, children: [
302
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-accent mr-[6px] font-mono", children: [
373
+ var ReasoningStep = (0, import_react5.forwardRef)(function ReasoningStep2({ step, className, children, ...props }, ref) {
374
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { ref, className: (0, import_ui8.cn)("mb-[2px] last:mb-0", className), ...props, children: [
375
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "text-accent mr-[6px] font-mono", children: [
303
376
  step,
304
377
  "."
305
378
  ] }),
@@ -307,14 +380,19 @@ var ReasoningStep = react.forwardRef(function ReasoningStep2({ step, className,
307
380
  ] });
308
381
  });
309
382
  ReasoningStep.displayName = "ReasoningStep";
310
- var SuggestionChip = react.forwardRef(
383
+
384
+ // src/ai/SuggestionChip.tsx
385
+ var import_react6 = require("react");
386
+ var import_ui9 = require("@ship-it-ui/ui");
387
+ var import_jsx_runtime6 = require("react/jsx-runtime");
388
+ var SuggestionChip = (0, import_react6.forwardRef)(
311
389
  function SuggestionChip2({ glyph = "\u2726", className, children, type, ...props }, ref) {
312
- return /* @__PURE__ */ jsxRuntime.jsxs(
390
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
313
391
  "button",
314
392
  {
315
393
  ref,
316
394
  type: type ?? "button",
317
- className: cn(
395
+ className: (0, import_ui9.cn)(
318
396
  "border-border bg-panel text-text inline-flex cursor-pointer items-center gap-[6px] rounded-full border px-[10px] py-[6px] text-[12px] outline-none",
319
397
  "transition-colors duration-(--duration-micro)",
320
398
  "hover:border-border-strong hover:bg-panel-2",
@@ -323,7 +401,7 @@ var SuggestionChip = react.forwardRef(
323
401
  ),
324
402
  ...props,
325
403
  children: [
326
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-accent", children: glyph }),
404
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "aria-hidden": true, className: "text-accent", children: glyph }),
327
405
  children
328
406
  ]
329
407
  }
@@ -331,20 +409,26 @@ var SuggestionChip = react.forwardRef(
331
409
  }
332
410
  );
333
411
  SuggestionChip.displayName = "SuggestionChip";
334
- var ToolCallCard = react.forwardRef(function ToolCallCard2({ name, status, running, className, children, ...props }, ref) {
335
- return /* @__PURE__ */ jsxRuntime.jsxs(
412
+
413
+ // src/ai/ToolCallCard.tsx
414
+ var import_ui10 = require("@ship-it-ui/ui");
415
+ var import_react7 = require("react");
416
+ var import_ui11 = require("@ship-it-ui/ui");
417
+ var import_jsx_runtime7 = require("react/jsx-runtime");
418
+ var ToolCallCard = (0, import_react7.forwardRef)(function ToolCallCard2({ name, status, running, className, children, ...props }, ref) {
419
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
336
420
  "div",
337
421
  {
338
422
  ref,
339
- className: cn("border-border bg-panel rounded-md border px-[14px] py-[10px]", className),
423
+ className: (0, import_ui11.cn)("border-border bg-panel rounded-md border px-[14px] py-[10px]", className),
340
424
  ...props,
341
425
  children: [
342
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-[10px]", children: [
343
- /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { size: "sm", variant: "accent", children: "TOOL" }),
344
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-[12px] font-medium", children: name }),
345
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim ml-auto inline-flex items-center font-mono text-[10px]", children: running ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
426
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-center gap-[10px]", children: [
427
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_ui10.Badge, { size: "sm", variant: "accent", children: "TOOL" }),
428
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "font-mono text-[12px] font-medium", children: name }),
429
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-text-dim ml-auto inline-flex items-center font-mono text-[10px]", children: running ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
346
430
  "running",
347
- /* @__PURE__ */ jsxRuntime.jsx(
431
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
348
432
  "span",
349
433
  {
350
434
  "aria-hidden": true,
@@ -353,13 +437,18 @@ var ToolCallCard = react.forwardRef(function ToolCallCard2({ name, status, runni
353
437
  )
354
438
  ] }) : status })
355
439
  ] }),
356
- children && /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-text-muted m-0 mt-[6px] font-mono text-[11px] leading-[1.6] break-words whitespace-pre-wrap", children })
440
+ children && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("pre", { className: "text-text-muted m-0 mt-[6px] font-mono text-[11px] leading-[1.6] break-words whitespace-pre-wrap", children })
357
441
  ]
358
442
  }
359
443
  );
360
444
  });
361
445
  ToolCallCard.displayName = "ToolCallCard";
362
446
 
447
+ // src/entity/EntityBadge.tsx
448
+ var import_ui12 = require("@ship-it-ui/ui");
449
+ var import_react8 = require("react");
450
+ var import_ui13 = require("@ship-it-ui/ui");
451
+
363
452
  // src/entity/types.ts
364
453
  var ENTITY_GLYPH = {
365
454
  service: "\u25C7",
@@ -393,6 +482,9 @@ var ENTITY_TONE_BG = {
393
482
  incident: "bg-[color-mix(in_oklab,var(--color-err),transparent_85%)]",
394
483
  ticket: "bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)]"
395
484
  };
485
+
486
+ // src/entity/EntityBadge.tsx
487
+ var import_jsx_runtime8 = require("react/jsx-runtime");
396
488
  var typeVariant = {
397
489
  service: "accent",
398
490
  person: "neutral",
@@ -401,13 +493,18 @@ var typeVariant = {
401
493
  incident: "err",
402
494
  ticket: "warn"
403
495
  };
404
- var EntityBadge = react.forwardRef(function EntityBadge2({ type, label, hideGlyph, className, children, ...props }, ref) {
405
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Badge, { ref, variant: typeVariant[type], className: cn(className), ...props, children: [
406
- !hideGlyph && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "font-mono", children: ENTITY_GLYPH[type] }),
496
+ var EntityBadge = (0, import_react8.forwardRef)(function EntityBadge2({ type, label, hideGlyph, className, children, ...props }, ref) {
497
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_ui12.Badge, { ref, variant: typeVariant[type], className: (0, import_ui13.cn)(className), ...props, children: [
498
+ !hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "aria-hidden": true, className: "font-mono", children: ENTITY_GLYPH[type] }),
407
499
  children ?? label ?? ENTITY_LABEL[type]
408
500
  ] });
409
501
  });
410
502
  EntityBadge.displayName = "EntityBadge";
503
+
504
+ // src/entity/EntityCard.tsx
505
+ var import_react9 = require("react");
506
+ var import_ui14 = require("@ship-it-ui/ui");
507
+ var import_jsx_runtime9 = require("react/jsx-runtime");
411
508
  var statToneClass = {
412
509
  accent: "text-accent",
413
510
  ok: "text-ok",
@@ -415,23 +512,23 @@ var statToneClass = {
415
512
  err: "text-err",
416
513
  muted: "text-text-muted"
417
514
  };
418
- var EntityCard = react.forwardRef(function EntityCard2({ type, title, subtitle, description, stats, actions, glyph, className, ...props }, ref) {
419
- return /* @__PURE__ */ jsxRuntime.jsxs(
515
+ var EntityCard = (0, import_react9.forwardRef)(function EntityCard2({ type, title, subtitle, description, stats, actions, glyph, className, ...props }, ref) {
516
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
420
517
  "div",
421
518
  {
422
519
  ref,
423
- className: cn(
520
+ className: (0, import_ui14.cn)(
424
521
  "rounded-base border-border bg-panel flex flex-col gap-3 border p-5",
425
522
  className
426
523
  ),
427
524
  ...props,
428
525
  children: [
429
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
430
- /* @__PURE__ */ jsxRuntime.jsx(
526
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-start gap-3", children: [
527
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
431
528
  "span",
432
529
  {
433
530
  "aria-hidden": true,
434
- className: cn(
531
+ className: (0, import_ui14.cn)(
435
532
  "rounded-base grid h-12 w-12 shrink-0 place-items-center text-[20px]",
436
533
  ENTITY_TONE_BG[type],
437
534
  ENTITY_TONE_CLASS[type]
@@ -439,27 +536,27 @@ var EntityCard = react.forwardRef(function EntityCard2({ type, title, subtitle,
439
536
  children: glyph ?? ENTITY_GLYPH[type]
440
537
  }
441
538
  ),
442
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
443
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
444
- /* @__PURE__ */ jsxRuntime.jsx(EntityBadge, { type, size: "sm" }),
445
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim font-mono text-[11px]", children: subtitle })
539
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "min-w-0 flex-1", children: [
540
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
541
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(EntityBadge, { type, size: "sm" }),
542
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-text-dim font-mono text-[11px]", children: subtitle })
446
543
  ] }),
447
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 truncate font-mono text-[18px] font-medium tracking-tight", children: title }),
448
- description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-muted mt-1 text-[13px] leading-[1.5]", children: description })
544
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "mt-1 truncate font-mono text-[18px] font-medium tracking-tight", children: title }),
545
+ description && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-text-muted mt-1 text-[13px] leading-[1.5]", children: description })
449
546
  ] }),
450
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: actions })
547
+ actions && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "shrink-0", children: actions })
451
548
  ] }),
452
- stats && stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
549
+ stats && stats.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
453
550
  "div",
454
551
  {
455
552
  className: "divide-border border-border bg-panel-2 grid divide-x rounded-md border",
456
553
  style: { gridTemplateColumns: `repeat(${Math.min(stats.length, 6)}, 1fr)` },
457
- children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-3", children: [
458
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.3px] uppercase", children: stat.label }),
459
- /* @__PURE__ */ jsxRuntime.jsx(
554
+ children: stats.map((stat, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "px-4 py-3", children: [
555
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.3px] uppercase", children: stat.label }),
556
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
460
557
  "div",
461
558
  {
462
- className: cn(
559
+ className: (0, import_ui14.cn)(
463
560
  "mt-1 text-[16px] font-medium tracking-tight",
464
561
  stat.tone ? statToneClass[stat.tone] : "text-text"
465
562
  ),
@@ -474,50 +571,110 @@ var EntityCard = react.forwardRef(function EntityCard2({ type, title, subtitle,
474
571
  );
475
572
  });
476
573
  EntityCard.displayName = "EntityCard";
477
- var EntityListRow = react.forwardRef(function EntityListRow2({ type, name, relation, meta, onClick, hideGlyph, className, ...props }, ref) {
478
- const interactive = typeof onClick === "function";
479
- const baseClass = cn(
480
- "flex w-full items-center gap-3 border-0 bg-transparent px-2 py-2 text-left",
481
- "border-b border-border last:border-0",
482
- interactive && "cursor-pointer outline-none transition-colors duration-(--duration-micro) hover:bg-panel-2 focus-visible:ring-[3px] focus-visible:ring-accent-dim",
483
- className
484
- );
485
- const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
486
- !hideGlyph && /* @__PURE__ */ jsxRuntime.jsx(
574
+
575
+ // src/entity/EntityListRow.tsx
576
+ var import_react10 = require("react");
577
+ var import_ui15 = require("@ship-it-ui/ui");
578
+ var import_jsx_runtime10 = require("react/jsx-runtime");
579
+ var baseClassNames = (interactive, className) => (0, import_ui15.cn)(
580
+ "flex w-full items-center gap-3 border-0 bg-transparent px-2 py-2 text-left",
581
+ "border-b border-border last:border-0",
582
+ interactive && "cursor-pointer outline-none transition-colors duration-(--duration-micro) hover:bg-panel-2 focus-visible:ring-[3px] focus-visible:ring-accent-dim",
583
+ className
584
+ );
585
+ function RowInner({
586
+ type,
587
+ name,
588
+ relation,
589
+ meta,
590
+ hideGlyph
591
+ }) {
592
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
593
+ !hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
487
594
  "span",
488
595
  {
489
596
  "aria-hidden": true,
490
- className: cn("font-mono text-[14px] leading-none", ENTITY_TONE_CLASS[type]),
597
+ className: (0, import_ui15.cn)("font-mono text-[14px] leading-none", ENTITY_TONE_CLASS[type]),
491
598
  children: ENTITY_GLYPH[type]
492
599
  }
493
600
  ),
494
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text min-w-0 flex-1 truncate font-mono text-[12px]", children: name }),
495
- relation && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "border-border bg-panel-2 text-text-muted rounded-full border px-2 py-[2px] font-mono text-[10px]", children: relation }),
496
- meta && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim font-mono text-[10px]", children: meta })
601
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-text min-w-0 flex-1 truncate font-mono text-[12px]", children: name }),
602
+ relation && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "border-border bg-panel-2 text-text-muted rounded-full border px-2 py-[2px] font-mono text-[10px]", children: relation }),
603
+ meta && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: meta })
497
604
  ] });
498
- if (interactive) {
499
- return /* @__PURE__ */ jsxRuntime.jsx(
605
+ }
606
+ var EntityListRowDiv = (0, import_react10.forwardRef)(
607
+ function EntityListRowDiv2({ type, name, relation, meta, hideGlyph, className, ...props }, ref) {
608
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: baseClassNames(false, className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowInner, { type, name, relation, meta, hideGlyph }) });
609
+ }
610
+ );
611
+ EntityListRowDiv.displayName = "EntityListRowDiv";
612
+ var EntityListRowButton = (0, import_react10.forwardRef)(
613
+ function EntityListRowButton2({ type, name, relation, meta, hideGlyph, className, onClick, ...props }, ref) {
614
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
500
615
  "button",
501
616
  {
502
617
  ref,
503
618
  type: "button",
504
619
  onClick,
505
- className: baseClass,
620
+ className: baseClassNames(true, className),
506
621
  ...props,
507
- children: inner
622
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowInner, { type, name, relation, meta, hideGlyph })
508
623
  }
509
624
  );
510
625
  }
511
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: baseClass, ...props, children: inner });
512
- });
626
+ );
627
+ EntityListRowButton.displayName = "EntityListRowButton";
628
+ function EntityListRow({
629
+ type,
630
+ name,
631
+ relation,
632
+ meta,
633
+ hideGlyph,
634
+ onClick,
635
+ className,
636
+ ...props
637
+ }) {
638
+ if (typeof onClick === "function") {
639
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
640
+ EntityListRowButton,
641
+ {
642
+ type,
643
+ name,
644
+ relation,
645
+ meta,
646
+ hideGlyph,
647
+ onClick,
648
+ className,
649
+ ...props
650
+ }
651
+ );
652
+ }
653
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
654
+ EntityListRowDiv,
655
+ {
656
+ type,
657
+ name,
658
+ relation,
659
+ meta,
660
+ hideGlyph,
661
+ className,
662
+ ...props
663
+ }
664
+ );
665
+ }
513
666
  EntityListRow.displayName = "EntityListRow";
667
+
668
+ // src/graph/GraphEdge.tsx
669
+ var import_react11 = require("react");
670
+ var import_jsx_runtime11 = require("react/jsx-runtime");
514
671
  var styleProps = {
515
672
  solid: { stroke: "var(--color-accent)", strokeWidth: 1.5 },
516
673
  dashed: { stroke: "var(--color-accent)", strokeWidth: 1.5, strokeDasharray: "4 3" },
517
674
  highlighted: { stroke: "var(--color-purple)", strokeWidth: 2.5 },
518
675
  dim: { stroke: "var(--color-text-dim)", strokeWidth: 1, opacity: 0.4 }
519
676
  };
520
- var GraphEdge = react.forwardRef(function GraphEdge2({ x1, y1, x2, y2, curve, edgeStyle = "solid", color, arrowheadId, ...props }, ref) {
677
+ var GraphEdge = (0, import_react11.forwardRef)(function GraphEdge2({ x1, y1, x2, y2, curve, edgeStyle = "solid", color, arrowheadId, ...props }, ref) {
521
678
  const base = styleProps[edgeStyle];
522
679
  const stroke = color ?? base.stroke;
523
680
  const sharedProps = {
@@ -530,7 +687,7 @@ var GraphEdge = react.forwardRef(function GraphEdge2({ x1, y1, x2, y2, curve, ed
530
687
  ...props
531
688
  };
532
689
  if (curve) {
533
- return /* @__PURE__ */ jsxRuntime.jsx(
690
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
534
691
  "path",
535
692
  {
536
693
  ref,
@@ -539,10 +696,15 @@ var GraphEdge = react.forwardRef(function GraphEdge2({ x1, y1, x2, y2, curve, ed
539
696
  }
540
697
  );
541
698
  }
542
- return /* @__PURE__ */ jsxRuntime.jsx("line", { ref, x1, y1, x2, y2, ...sharedProps });
699
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("line", { ref, x1, y1, x2, y2, ...sharedProps });
543
700
  });
544
701
  GraphEdge.displayName = "GraphEdge";
545
- var GraphInspector = react.forwardRef(
702
+
703
+ // src/graph/GraphInspector.tsx
704
+ var import_react12 = require("react");
705
+ var import_ui16 = require("@ship-it-ui/ui");
706
+ var import_jsx_runtime12 = require("react/jsx-runtime");
707
+ var GraphInspector = (0, import_react12.forwardRef)(
546
708
  function GraphInspector2({
547
709
  type,
548
710
  entityId,
@@ -555,47 +717,47 @@ var GraphInspector = react.forwardRef(
555
717
  ...props
556
718
  }, ref) {
557
719
  const total = relationCount ?? relations?.length ?? 0;
558
- return /* @__PURE__ */ jsxRuntime.jsxs(
720
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
559
721
  "aside",
560
722
  {
561
723
  ref,
562
724
  "aria-label": typeof title === "string" ? `${title} inspector` : "Node inspector",
563
- className: cn(
725
+ className: (0, import_ui16.cn)(
564
726
  "rounded-base border-border bg-panel flex w-[340px] flex-col gap-3 border p-4",
565
727
  className
566
728
  ),
567
729
  ...props,
568
730
  children: [
569
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
570
- /* @__PURE__ */ jsxRuntime.jsx(EntityBadge, { type, size: "sm" }),
571
- entityId && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim ml-auto font-mono text-[10px]", children: entityId })
731
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center", children: [
732
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(EntityBadge, { type, size: "sm" }),
733
+ entityId && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[10px]", children: entityId })
572
734
  ] }),
573
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
574
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[17px] font-medium", children: title }),
575
- description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-muted mt-[2px] text-[12px]", children: description })
735
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { children: [
736
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "text-[17px] font-medium", children: title }),
737
+ description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "text-text-muted mt-[2px] text-[12px]", children: description })
576
738
  ] }),
577
- properties && properties.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
578
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase", children: "Properties" }),
579
- /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "m-0 flex flex-col gap-1 font-mono text-[11px]", children: properties.map((p, i) => /* @__PURE__ */ jsxRuntime.jsxs(
739
+ properties && properties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("section", { children: [
740
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase", children: "Properties" }),
741
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dl", { className: "m-0 flex flex-col gap-1 font-mono text-[11px]", children: properties.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
580
742
  "div",
581
743
  {
582
- className: cn("border-border flex py-1", i < properties.length - 1 && "border-b"),
744
+ className: (0, import_ui16.cn)("border-border flex py-1", i < properties.length - 1 && "border-b"),
583
745
  children: [
584
- /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "text-text-dim w-[70px]", children: p.key }),
585
- /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "m-0 flex-1", children: p.value })
746
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dt", { className: "text-text-dim w-[70px]", children: p.key }),
747
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dd", { className: "m-0 flex-1", children: p.value })
586
748
  ]
587
749
  },
588
750
  i
589
751
  )) })
590
752
  ] }),
591
- relations && relations.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
592
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase", children: [
753
+ relations && relations.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("section", { children: [
754
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase", children: [
593
755
  "Relations \xB7 ",
594
756
  total
595
757
  ] }),
596
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "m-0 flex list-none flex-col gap-1 p-0 text-[11px]", children: relations.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex gap-2", children: [
597
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim w-[100px] font-mono", children: r.relation }),
598
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: r.entity })
758
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "m-0 flex list-none flex-col gap-1 p-0 text-[11px]", children: relations.map((r, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("li", { className: "flex gap-2", children: [
759
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-text-dim w-[100px] font-mono", children: r.relation }),
760
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: r.entity })
599
761
  ] }, i)) })
600
762
  ] })
601
763
  ]
@@ -604,6 +766,11 @@ var GraphInspector = react.forwardRef(
604
766
  }
605
767
  );
606
768
  GraphInspector.displayName = "GraphInspector";
769
+
770
+ // src/graph/GraphLegend.tsx
771
+ var import_react13 = require("react");
772
+ var import_ui17 = require("@ship-it-ui/ui");
773
+ var import_jsx_runtime13 = require("react/jsx-runtime");
607
774
  var typeColorVar = {
608
775
  service: "var(--color-accent)",
609
776
  person: "var(--color-purple)",
@@ -617,23 +784,23 @@ var DEFAULT_ENTRIES = [
617
784
  { type: "person", label: ENTITY_LABEL.person },
618
785
  { type: "document", label: ENTITY_LABEL.document }
619
786
  ];
620
- var GraphLegend = react.forwardRef(function GraphLegend2({ entries = DEFAULT_ENTRIES, heading = "Legend", className, children, ...props }, ref) {
621
- return /* @__PURE__ */ jsxRuntime.jsxs(
787
+ var GraphLegend = (0, import_react13.forwardRef)(function GraphLegend2({ entries = DEFAULT_ENTRIES, heading = "Legend", className, children, ...props }, ref) {
788
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
622
789
  "div",
623
790
  {
624
791
  ref,
625
- className: cn(
792
+ className: (0, import_ui17.cn)(
626
793
  "rounded-base border-border bg-panel/85 inline-flex flex-col gap-[6px] border p-[10px] text-[11px] backdrop-blur-[8px]",
627
794
  className
628
795
  ),
629
796
  ...props,
630
797
  children: [
631
- heading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase", children: heading }),
798
+ heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase", children: heading }),
632
799
  children ?? entries.map((entry, i) => {
633
800
  const color = entry.color ?? (entry.type ? typeColorVar[entry.type] : "currentColor");
634
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-[6px]", children: [
635
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "h-2 w-2 rounded-full", style: { background: color } }),
636
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: entry.label })
801
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-[6px]", children: [
802
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { "aria-hidden": true, className: "h-2 w-2 rounded-full", style: { background: color } }),
803
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: entry.label })
637
804
  ] }, i);
638
805
  })
639
806
  ]
@@ -641,21 +808,26 @@ var GraphLegend = react.forwardRef(function GraphLegend2({ entries = DEFAULT_ENT
641
808
  );
642
809
  });
643
810
  GraphLegend.displayName = "GraphLegend";
644
- var GraphMinimap = react.forwardRef(function GraphMinimap2({ points, viewport, width = 120, height = 72, className, ...props }, ref) {
645
- return /* @__PURE__ */ jsxRuntime.jsx(
811
+
812
+ // src/graph/GraphMinimap.tsx
813
+ var import_react14 = require("react");
814
+ var import_ui18 = require("@ship-it-ui/ui");
815
+ var import_jsx_runtime14 = require("react/jsx-runtime");
816
+ var GraphMinimap = (0, import_react14.forwardRef)(function GraphMinimap2({ points, viewport, width = 120, height = 72, className, ...props }, ref) {
817
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
646
818
  "div",
647
819
  {
648
820
  ref,
649
821
  role: "img",
650
822
  "aria-label": "Graph minimap",
651
- className: cn(
823
+ className: (0, import_ui18.cn)(
652
824
  "border-border bg-panel/85 relative rounded-md border p-1 backdrop-blur-[8px]",
653
825
  className
654
826
  ),
655
827
  style: { width, height },
656
828
  ...props,
657
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-full w-full", children: [
658
- points.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx(
829
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "relative h-full w-full", children: [
830
+ points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
659
831
  "span",
660
832
  {
661
833
  "aria-hidden": true,
@@ -668,17 +840,18 @@ var GraphMinimap = react.forwardRef(function GraphMinimap2({ points, viewport, w
668
840
  },
669
841
  i
670
842
  )),
671
- viewport && /* @__PURE__ */ jsxRuntime.jsx(
843
+ viewport && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
672
844
  "span",
673
845
  {
674
846
  "aria-hidden": true,
847
+ "data-testid": "minimap-viewport",
675
848
  className: "border-accent absolute rounded-[2px] border",
676
849
  style: {
677
850
  left: `${viewport.x * 100}%`,
678
851
  top: `${viewport.y * 100}%`,
679
852
  width: `${viewport.width * 100}%`,
680
853
  height: `${viewport.height * 100}%`,
681
- background: "oklch(0.8 0.12 200 / 0.12)"
854
+ background: "var(--color-accent-glow)"
682
855
  }
683
856
  }
684
857
  )
@@ -687,6 +860,11 @@ var GraphMinimap = react.forwardRef(function GraphMinimap2({ points, viewport, w
687
860
  );
688
861
  });
689
862
  GraphMinimap.displayName = "GraphMinimap";
863
+
864
+ // src/graph/GraphNode.tsx
865
+ var import_react15 = require("react");
866
+ var import_ui19 = require("@ship-it-ui/ui");
867
+ var import_jsx_runtime15 = require("react/jsx-runtime");
690
868
  var typeColorVar2 = {
691
869
  service: "var(--color-accent)",
692
870
  person: "var(--color-purple)",
@@ -695,12 +873,12 @@ var typeColorVar2 = {
695
873
  incident: "var(--color-warn)",
696
874
  ticket: "var(--color-text-muted)"
697
875
  };
698
- var GraphNode = react.forwardRef(function GraphNode2({ type, state = "default", glyph, label, size = 52, pathColor, className, style, ...props }, ref) {
876
+ var GraphNode = (0, import_react15.forwardRef)(function GraphNode2({ type, state = "default", glyph, label, size = 52, pathColor, className, style, ...props }, ref) {
699
877
  const color = state === "path" ? pathColor ?? "var(--color-purple)" : typeColorVar2[type];
700
- const glowAlpha = state === "hover" ? "80" : "40";
878
+ const glowPct = state === "hover" ? 50 : 25;
701
879
  const opacity = state === "dim" ? 0.35 : 1;
702
880
  const showRing = state === "selected" || state === "path";
703
- return /* @__PURE__ */ jsxRuntime.jsxs(
881
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
704
882
  "div",
705
883
  {
706
884
  ref,
@@ -708,11 +886,11 @@ var GraphNode = react.forwardRef(function GraphNode2({ type, state = "default",
708
886
  "aria-label": typeof label === "string" ? label : `${type} node`,
709
887
  "data-state": state,
710
888
  "data-entity-type": type,
711
- className: cn("inline-flex flex-col items-center gap-[6px]", className),
889
+ className: (0, import_ui19.cn)("inline-flex flex-col items-center gap-[6px]", className),
712
890
  style,
713
891
  ...props,
714
892
  children: [
715
- /* @__PURE__ */ jsxRuntime.jsx(
893
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
716
894
  "div",
717
895
  {
718
896
  className: "bg-panel grid place-items-center rounded-[14px] border-[1.5px] transition-all duration-(--duration-micro)",
@@ -722,7 +900,7 @@ var GraphNode = react.forwardRef(function GraphNode2({ type, state = "default",
722
900
  borderColor: color,
723
901
  color,
724
902
  fontSize: Math.round(size * 0.42),
725
- boxShadow: `0 0 ${state === "hover" ? 30 : 20}px ${color}${glowAlpha}`,
903
+ boxShadow: `0 0 ${state === "hover" ? 30 : 20}px color-mix(in oklab, ${color} ${glowPct}%, transparent)`,
726
904
  outline: showRing ? `2px solid ${color}` : void 0,
727
905
  outlineOffset: showRing ? 4 : void 0,
728
906
  opacity
@@ -730,17 +908,21 @@ var GraphNode = react.forwardRef(function GraphNode2({ type, state = "default",
730
908
  children: glyph ?? ENTITY_GLYPH[type]
731
909
  }
732
910
  ),
733
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-dim font-mono text-[10px]", children: label })
911
+ label && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: label })
734
912
  ]
735
913
  }
736
914
  );
737
915
  });
738
916
  GraphNode.displayName = "GraphNode";
739
- var PathOverlay = react.forwardRef(function PathOverlay2({ points, color = "var(--color-purple)", width = 2.5, halo = true, ...props }, ref) {
917
+
918
+ // src/graph/PathOverlay.tsx
919
+ var import_react16 = require("react");
920
+ var import_jsx_runtime16 = require("react/jsx-runtime");
921
+ var PathOverlay = (0, import_react16.forwardRef)(function PathOverlay2({ points, color = "var(--color-purple)", width = 2.5, halo = true, ...props }, ref) {
740
922
  if (points.length < 2) return null;
741
923
  const coords = points.map((p) => `${p.x},${p.y}`).join(" ");
742
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { ref, ...props, children: [
743
- halo && /* @__PURE__ */ jsxRuntime.jsx(
924
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("g", { ref, ...props, children: [
925
+ halo && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
744
926
  "polyline",
745
927
  {
746
928
  points: coords,
@@ -752,7 +934,7 @@ var PathOverlay = react.forwardRef(function PathOverlay2({ points, color = "var(
752
934
  opacity: 0.65
753
935
  }
754
936
  ),
755
- /* @__PURE__ */ jsxRuntime.jsx(
937
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
756
938
  "polyline",
757
939
  {
758
940
  points: coords,
@@ -766,54 +948,69 @@ var PathOverlay = react.forwardRef(function PathOverlay2({ points, color = "var(
766
948
  ] });
767
949
  });
768
950
  PathOverlay.displayName = "PathOverlay";
769
- var CTAStrip = react.forwardRef(function CTAStrip2({ title, description, actions, className, ...props }, ref) {
770
- return /* @__PURE__ */ jsxRuntime.jsxs(
951
+
952
+ // src/marketing/CTAStrip.tsx
953
+ var import_react17 = require("react");
954
+ var import_ui20 = require("@ship-it-ui/ui");
955
+ var import_jsx_runtime17 = require("react/jsx-runtime");
956
+ var CTAStrip = (0, import_react17.forwardRef)(function CTAStrip2({ title, description, actions, className, ...props }, ref) {
957
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
771
958
  "section",
772
959
  {
773
960
  ref,
774
- className: cn(
961
+ className: (0, import_ui20.cn)(
775
962
  "rounded-xl px-10 py-12 text-center",
776
- "bg-[linear-gradient(135deg,oklch(0.2_0.08_260),oklch(0.16_0.06_300))]",
963
+ "bg-[linear-gradient(135deg,var(--color-cta-from),var(--color-cta-to))]",
777
964
  className
778
965
  ),
779
966
  ...props,
780
967
  children: [
781
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]", children: title }),
782
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-text-muted m-0 mb-5 text-[13px]", children: description }),
783
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap justify-center gap-2", children: actions })
968
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h2", { className: "m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]", children: title }),
969
+ description && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-text-muted m-0 mb-5 text-[13px]", children: description }),
970
+ actions && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex flex-wrap justify-center gap-2", children: actions })
784
971
  ]
785
972
  }
786
973
  );
787
974
  });
788
975
  CTAStrip.displayName = "CTAStrip";
976
+
977
+ // src/marketing/FeatureGrid.tsx
978
+ var import_react18 = require("react");
979
+ var import_ui21 = require("@ship-it-ui/ui");
980
+ var import_jsx_runtime18 = require("react/jsx-runtime");
789
981
  var colsClass = {
790
982
  2: "md:grid-cols-2",
791
983
  3: "md:grid-cols-3",
792
984
  4: "md:grid-cols-2 lg:grid-cols-4"
793
985
  };
794
- var FeatureGrid = react.forwardRef(function FeatureGrid2({ features, columns = 3, className, ...props }, ref) {
795
- return /* @__PURE__ */ jsxRuntime.jsx(
986
+ var FeatureGrid = (0, import_react18.forwardRef)(function FeatureGrid2({ features, columns = 3, className, ...props }, ref) {
987
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
796
988
  "div",
797
989
  {
798
990
  ref,
799
- className: cn("grid grid-cols-1 gap-3", colsClass[columns], className),
991
+ className: (0, import_ui21.cn)("grid grid-cols-1 gap-3", colsClass[columns], className),
800
992
  ...props,
801
- children: features.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-base border-border bg-panel border p-5", children: [
802
- /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": true, className: "text-accent mb-3 text-[22px]", children: f.glyph }),
803
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-[6px] text-[14px] font-medium", children: f.title }),
804
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-muted text-[12px] leading-[1.55]", children: f.description })
993
+ children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "rounded-base border-border bg-panel border p-5", children: [
994
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { "aria-hidden": true, className: "text-accent mb-3 text-[22px]", children: f.glyph }),
995
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "mb-[6px] text-[14px] font-medium", children: f.title }),
996
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-text-muted text-[12px] leading-[1.55]", children: f.description })
805
997
  ] }, i))
806
998
  }
807
999
  );
808
1000
  });
809
1001
  FeatureGrid.displayName = "FeatureGrid";
810
- var Footer = react.forwardRef(function Footer2({ brand, columns, copyright, closing, className, ...props }, ref) {
811
- return /* @__PURE__ */ jsxRuntime.jsxs("footer", { ref, className: cn("px-7 py-7", className), ...props, children: [
812
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-7 flex flex-wrap gap-8", children: [
813
- brand && /* @__PURE__ */ jsxRuntime.jsx("div", { children: brand }),
814
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-muted ml-auto flex flex-wrap gap-6 text-[12px]", children: columns.map((col, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-[6px]", children: [
815
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.2px] uppercase", children: col.heading }),
816
- col.links.map((link, j) => /* @__PURE__ */ jsxRuntime.jsx(
1002
+
1003
+ // src/marketing/Footer.tsx
1004
+ var import_react19 = require("react");
1005
+ var import_ui22 = require("@ship-it-ui/ui");
1006
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1007
+ var Footer = (0, import_react19.forwardRef)(function Footer2({ brand, columns, copyright, closing, className, ...props }, ref) {
1008
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("footer", { ref, className: (0, import_ui22.cn)("px-7 py-7", className), ...props, children: [
1009
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "mb-7 flex flex-wrap gap-8", children: [
1010
+ brand && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { children: brand }),
1011
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-text-muted ml-auto flex flex-wrap gap-6 text-[12px]", children: columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex flex-col gap-[6px]", children: [
1012
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.2px] uppercase", children: col.heading }),
1013
+ col.links.map((link, j) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
817
1014
  "a",
818
1015
  {
819
1016
  href: link.href,
@@ -824,92 +1021,108 @@ var Footer = react.forwardRef(function Footer2({ brand, columns, copyright, clos
824
1021
  ))
825
1022
  ] }, i)) })
826
1023
  ] }),
827
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-border text-text-dim flex border-t pt-4 font-mono text-[11px]", children: [
828
- copyright && /* @__PURE__ */ jsxRuntime.jsx("span", { children: copyright }),
829
- closing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto", children: closing })
1024
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "border-border text-text-dim flex border-t pt-4 font-mono text-[11px]", children: [
1025
+ copyright && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { children: copyright }),
1026
+ closing && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "ml-auto", children: closing })
830
1027
  ] })
831
1028
  ] });
832
1029
  });
833
1030
  Footer.displayName = "Footer";
834
- var Hero = react.forwardRef(function Hero2({ eyebrow, title, description, actions, visual, className, ...props }, ref) {
1031
+
1032
+ // src/marketing/Hero.tsx
1033
+ var import_react20 = require("react");
1034
+ var import_ui23 = require("@ship-it-ui/ui");
1035
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1036
+ var Hero = (0, import_react20.forwardRef)(function Hero2({ eyebrow, title, description, actions, visual, className, ...props }, ref) {
835
1037
  const hasVisual = visual != null;
836
- return /* @__PURE__ */ jsxRuntime.jsxs(
1038
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
837
1039
  "section",
838
1040
  {
839
1041
  ref,
840
- className: cn(
1042
+ className: (0, import_ui23.cn)(
841
1043
  "flex flex-col items-center justify-between gap-10 px-6 py-16 md:py-24",
842
1044
  hasVisual && "md:flex-row md:items-center md:gap-16",
843
1045
  className
844
1046
  ),
845
1047
  ...props,
846
1048
  children: [
847
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-[680px]", !hasVisual && "mx-auto text-center"), children: [
1049
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_ui23.cn)("max-w-[680px]", !hasVisual && "mx-auto text-center"), children: [
848
1050
  eyebrow,
849
- /* @__PURE__ */ jsxRuntime.jsx(
1051
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
850
1052
  "h1",
851
1053
  {
852
- className: cn(
1054
+ className: (0, import_ui23.cn)(
853
1055
  "mb-4 text-[44px] leading-[1.05] font-medium tracking-[-1.6px] md:text-[56px]",
854
1056
  eyebrow && "mt-5"
855
1057
  ),
856
1058
  children: title
857
1059
  }
858
1060
  ),
859
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-text-muted mb-7 text-[17px] leading-[1.6]", children: description }),
860
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-wrap gap-2", !hasVisual && "justify-center"), children: actions })
1061
+ description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-text-muted mb-7 text-[17px] leading-[1.6]", children: description }),
1062
+ actions && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: (0, import_ui23.cn)("flex flex-wrap gap-2", !hasVisual && "justify-center"), children: actions })
861
1063
  ] }),
862
- visual && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: visual })
1064
+ visual && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex-1", children: visual })
863
1065
  ]
864
1066
  }
865
1067
  );
866
1068
  });
867
1069
  Hero.displayName = "Hero";
868
- var PricingCard = react.forwardRef(function PricingCard2({ tier, price, description, features, action, featured, className, ...props }, ref) {
869
- return /* @__PURE__ */ jsxRuntime.jsxs(
1070
+
1071
+ // src/marketing/PricingCard.tsx
1072
+ var import_react21 = require("react");
1073
+ var import_ui24 = require("@ship-it-ui/ui");
1074
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1075
+ var PricingCard = (0, import_react21.forwardRef)(function PricingCard2({ tier, price, description, features, action, featured, className, ...props }, ref) {
1076
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
870
1077
  "div",
871
1078
  {
872
1079
  ref,
873
- className: cn(
1080
+ className: (0, import_ui24.cn)(
874
1081
  "bg-panel flex flex-col gap-5 rounded-lg border p-6",
875
1082
  featured ? "border-accent shadow-lg" : "border-border",
876
1083
  className
877
1084
  ),
878
1085
  ...props,
879
1086
  children: [
880
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
881
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center gap-2", children: [
882
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[14px] font-medium", children: tier }),
883
- featured && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-accent-dim text-accent rounded-full px-[6px] py-[1px] font-mono text-[10px]", children: "recommended" })
1087
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
1088
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mb-1 flex items-center gap-2", children: [
1089
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-[14px] font-medium", children: tier }),
1090
+ featured && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "bg-accent-dim text-accent rounded-full px-[6px] py-[1px] font-mono text-[10px]", children: "recommended" })
884
1091
  ] }),
885
- description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-muted text-[12px]", children: description })
1092
+ description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-muted text-[12px]", children: description })
886
1093
  ] }),
887
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-mono text-[28px] font-medium tracking-[-0.5px]", children: price }),
888
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "m-0 flex list-none flex-col gap-2 p-0", children: features.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2 text-[13px]", children: [
889
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-accent", children: "\u2713" }),
890
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: f })
1094
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "font-mono text-[28px] font-medium tracking-[-0.5px]", children: price }),
1095
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { className: "m-0 flex list-none flex-col gap-2 p-0", children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("li", { className: "flex items-start gap-2 text-[13px]", children: [
1096
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { "aria-hidden": true, className: "text-accent", children: "\u2713" }),
1097
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: f })
891
1098
  ] }, i)) }),
892
- action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto", children: action })
1099
+ action && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "mt-auto", children: action })
893
1100
  ]
894
1101
  }
895
1102
  );
896
1103
  });
897
1104
  PricingCard.displayName = "PricingCard";
898
- var Testimonial = react.forwardRef(function Testimonial2({ quote, author, role, avatar, className, ...props }, ref) {
899
- return /* @__PURE__ */ jsxRuntime.jsxs(
1105
+
1106
+ // src/marketing/Testimonial.tsx
1107
+ var import_ui25 = require("@ship-it-ui/ui");
1108
+ var import_react22 = require("react");
1109
+ var import_ui26 = require("@ship-it-ui/ui");
1110
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1111
+ var Testimonial = (0, import_react22.forwardRef)(function Testimonial2({ quote, author, role, avatar, className, ...props }, ref) {
1112
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
900
1113
  "figure",
901
1114
  {
902
1115
  ref,
903
- className: cn("mx-auto max-w-[620px] px-6 py-10 text-center", className),
1116
+ className: (0, import_ui26.cn)("mx-auto max-w-[620px] px-6 py-10 text-center", className),
904
1117
  ...props,
905
1118
  children: [
906
- /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": true, className: "text-accent mb-4 text-[40px] leading-none", children: "\u201C" }),
907
- /* @__PURE__ */ jsxRuntime.jsx("blockquote", { className: "m-0 text-[22px] leading-[1.45] font-medium tracking-[-0.3px]", children: quote }),
908
- /* @__PURE__ */ jsxRuntime.jsxs("figcaption", { className: "mt-5 flex items-center justify-center gap-[10px]", children: [
909
- typeof avatar === "string" ? /* @__PURE__ */ jsxRuntime.jsx(ui.Avatar, { size: "md", name: avatar }) : avatar,
910
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-left", children: [
911
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[13px] font-medium", children: author }),
912
- role && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-dim text-[11px]", children: role })
1119
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "aria-hidden": true, className: "text-accent mb-4 text-[40px] leading-none", children: "\u201C" }),
1120
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("blockquote", { className: "m-0 text-[22px] leading-[1.45] font-medium tracking-[-0.3px]", children: quote }),
1121
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("figcaption", { className: "mt-5 flex items-center justify-center gap-[10px]", children: [
1122
+ typeof avatar === "string" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_ui25.Avatar, { size: "md", name: avatar }) : avatar,
1123
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "text-left", children: [
1124
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "text-[13px] font-medium", children: author }),
1125
+ role && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "text-text-dim text-[11px]", children: role })
913
1126
  ] })
914
1127
  ] })
915
1128
  ]
@@ -917,34 +1130,37 @@ var Testimonial = react.forwardRef(function Testimonial2({ quote, author, role,
917
1130
  );
918
1131
  });
919
1132
  Testimonial.displayName = "Testimonial";
920
-
921
- exports.AskBar = AskBar;
922
- exports.CTAStrip = CTAStrip;
923
- exports.Citation = Citation;
924
- exports.ConfidenceIndicator = ConfidenceIndicator;
925
- exports.CopilotMessage = CopilotMessage;
926
- exports.ENTITY_GLYPH = ENTITY_GLYPH;
927
- exports.ENTITY_LABEL = ENTITY_LABEL;
928
- exports.ENTITY_TONE_BG = ENTITY_TONE_BG;
929
- exports.ENTITY_TONE_CLASS = ENTITY_TONE_CLASS;
930
- exports.EntityBadge = EntityBadge;
931
- exports.EntityCard = EntityCard;
932
- exports.EntityListRow = EntityListRow;
933
- exports.FeatureGrid = FeatureGrid;
934
- exports.Footer = Footer;
935
- exports.GraphEdge = GraphEdge;
936
- exports.GraphInspector = GraphInspector;
937
- exports.GraphLegend = GraphLegend;
938
- exports.GraphMinimap = GraphMinimap;
939
- exports.GraphNode = GraphNode;
940
- exports.Hero = Hero;
941
- exports.PathOverlay = PathOverlay;
942
- exports.PricingCard = PricingCard;
943
- exports.ReasoningBlock = ReasoningBlock;
944
- exports.ReasoningStep = ReasoningStep;
945
- exports.SuggestionChip = SuggestionChip;
946
- exports.Testimonial = Testimonial;
947
- exports.ToolCallCard = ToolCallCard;
948
- exports.cn = cn;
949
- //# sourceMappingURL=index.cjs.map
1133
+ // Annotate the CommonJS export names for ESM import in node:
1134
+ 0 && (module.exports = {
1135
+ AskBar,
1136
+ CTAStrip,
1137
+ Citation,
1138
+ ConfidenceIndicator,
1139
+ CopilotMessage,
1140
+ ENTITY_GLYPH,
1141
+ ENTITY_LABEL,
1142
+ ENTITY_TONE_BG,
1143
+ ENTITY_TONE_CLASS,
1144
+ EntityBadge,
1145
+ EntityCard,
1146
+ EntityListRow,
1147
+ EntityListRowButton,
1148
+ EntityListRowDiv,
1149
+ FeatureGrid,
1150
+ Footer,
1151
+ GraphEdge,
1152
+ GraphInspector,
1153
+ GraphLegend,
1154
+ GraphMinimap,
1155
+ GraphNode,
1156
+ Hero,
1157
+ PathOverlay,
1158
+ PricingCard,
1159
+ ReasoningBlock,
1160
+ ReasoningStep,
1161
+ SuggestionChip,
1162
+ Testimonial,
1163
+ ToolCallCard,
1164
+ cn
1165
+ });
950
1166
  //# sourceMappingURL=index.cjs.map