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