@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/README.md +6 -0
- package/dist/index.cjs +502 -249
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +87 -13
- package/dist/index.d.ts +87 -13
- package/dist/index.js +435 -205
- package/dist/index.js.map +1 -1
- package/package.json +19 -11
package/dist/index.cjs
CHANGED
|
@@ -1,16 +1,70 @@
|
|
|
1
|
-
'use
|
|
1
|
+
'use client';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
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/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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] =
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
142
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-wrap items-center gap-[6px]", children: [
|
|
89
143
|
children,
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
/* @__PURE__ */
|
|
93
|
-
|
|
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 =
|
|
172
|
+
var Citation = (0, import_react2.forwardRef)(function Citation2({ index, source, meta, inline, className, ...props }, ref) {
|
|
114
173
|
if (inline) {
|
|
115
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
127
|
-
/* @__PURE__ */
|
|
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__ */
|
|
136
|
-
source != null && /* @__PURE__ */
|
|
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__ */
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
228
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
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] =
|
|
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 ??
|
|
346
|
+
const inferredCount = stepCount ?? import_react5.Children.count(children);
|
|
271
347
|
const heading = label ?? `Reasoning \xB7 ${inferredCount} step${inferredCount === 1 ? "" : "s"}`;
|
|
272
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
288
|
-
/* @__PURE__ */
|
|
289
|
-
duration != null && /* @__PURE__ */
|
|
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__ */
|
|
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 =
|
|
301
|
-
return /* @__PURE__ */
|
|
302
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
335
|
-
|
|
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__ */
|
|
343
|
-
/* @__PURE__ */
|
|
344
|
-
/* @__PURE__ */
|
|
345
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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 =
|
|
405
|
-
return /* @__PURE__ */
|
|
406
|
-
!hideGlyph && /* @__PURE__ */
|
|
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 =
|
|
419
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
430
|
-
/* @__PURE__ */
|
|
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__ */
|
|
443
|
-
/* @__PURE__ */
|
|
444
|
-
/* @__PURE__ */
|
|
445
|
-
subtitle && /* @__PURE__ */
|
|
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__ */
|
|
448
|
-
description && /* @__PURE__ */
|
|
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__ */
|
|
550
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "shrink-0", children: actions })
|
|
451
551
|
] }),
|
|
452
|
-
stats && stats.length > 0 && /* @__PURE__ */
|
|
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__ */
|
|
458
|
-
/* @__PURE__ */
|
|
459
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
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__ */
|
|
495
|
-
relation && /* @__PURE__ */
|
|
496
|
-
meta && /* @__PURE__ */
|
|
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
|
-
|
|
499
|
-
|
|
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:
|
|
623
|
+
className: baseClassNames(true, className),
|
|
506
624
|
...props,
|
|
507
|
-
children:
|
|
625
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowInner, { type, name, relation, meta, hideGlyph })
|
|
508
626
|
}
|
|
509
627
|
);
|
|
510
628
|
}
|
|
511
|
-
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
702
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("line", { ref, x1, y1, x2, y2, ...sharedProps });
|
|
543
703
|
});
|
|
544
704
|
GraphEdge.displayName = "GraphEdge";
|
|
545
|
-
|
|
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__ */
|
|
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__ */
|
|
570
|
-
/* @__PURE__ */
|
|
571
|
-
entityId && /* @__PURE__ */
|
|
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__ */
|
|
574
|
-
/* @__PURE__ */
|
|
575
|
-
description && /* @__PURE__ */
|
|
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__ */
|
|
578
|
-
/* @__PURE__ */
|
|
579
|
-
/* @__PURE__ */
|
|
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__ */
|
|
585
|
-
/* @__PURE__ */
|
|
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__ */
|
|
592
|
-
/* @__PURE__ */
|
|
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__ */
|
|
597
|
-
/* @__PURE__ */
|
|
598
|
-
/* @__PURE__ */
|
|
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 =
|
|
621
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
635
|
-
/* @__PURE__ */
|
|
636
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
645
|
-
|
|
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__ */
|
|
658
|
-
points.map((p, i) => /* @__PURE__ */
|
|
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__ */
|
|
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: "
|
|
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 =
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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}${
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
743
|
-
halo && /* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
770
|
-
|
|
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,
|
|
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__ */
|
|
782
|
-
description && /* @__PURE__ */
|
|
783
|
-
actions && /* @__PURE__ */
|
|
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 =
|
|
795
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
802
|
-
/* @__PURE__ */
|
|
803
|
-
/* @__PURE__ */
|
|
804
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
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__ */
|
|
828
|
-
copyright && /* @__PURE__ */
|
|
829
|
-
closing && /* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
860
|
-
actions && /* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
869
|
-
|
|
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__ */
|
|
881
|
-
/* @__PURE__ */
|
|
882
|
-
/* @__PURE__ */
|
|
883
|
-
featured && /* @__PURE__ */
|
|
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__ */
|
|
1095
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-muted text-[12px]", children: description })
|
|
886
1096
|
] }),
|
|
887
|
-
/* @__PURE__ */
|
|
888
|
-
|
|
889
|
-
/* @__PURE__ */
|
|
890
|
-
|
|
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__ */
|
|
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
|
-
|
|
899
|
-
|
|
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__ */
|
|
907
|
-
/* @__PURE__ */
|
|
908
|
-
/* @__PURE__ */
|
|
909
|
-
typeof avatar === "string" ? /* @__PURE__ */
|
|
910
|
-
/* @__PURE__ */
|
|
911
|
-
/* @__PURE__ */
|
|
912
|
-
role && /* @__PURE__ */
|
|
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
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
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
|