@ship-it-ui/shipit 0.0.1 → 0.0.3

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