@ship-it-ui/shipit 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +450 -274
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +108 -10
- package/dist/index.d.ts +108 -10
- package/dist/index.js +436 -262
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -28,12 +28,12 @@ __export(index_exports, {
|
|
|
28
28
|
ConfidenceIndicator: () => ConfidenceIndicator,
|
|
29
29
|
ConnectorCard: () => ConnectorCard,
|
|
30
30
|
CopilotMessage: () => CopilotMessage,
|
|
31
|
-
ENTITY_GLYPH: () => ENTITY_GLYPH,
|
|
32
31
|
ENTITY_LABEL: () => ENTITY_LABEL,
|
|
33
32
|
ENTITY_TONE_BG: () => ENTITY_TONE_BG,
|
|
34
33
|
ENTITY_TONE_CLASS: () => ENTITY_TONE_CLASS,
|
|
35
34
|
EntityBadge: () => EntityBadge,
|
|
36
35
|
EntityCard: () => EntityCard,
|
|
36
|
+
EntityList: () => EntityList,
|
|
37
37
|
EntityListRow: () => EntityListRow,
|
|
38
38
|
EntityListRowButton: () => EntityListRowButton,
|
|
39
39
|
EntityListRowDiv: () => EntityListRowDiv,
|
|
@@ -51,12 +51,14 @@ __export(index_exports, {
|
|
|
51
51
|
PricingCard: () => PricingCard,
|
|
52
52
|
ReasoningBlock: () => ReasoningBlock,
|
|
53
53
|
ReasoningStep: () => ReasoningStep,
|
|
54
|
+
StalenessChip: () => StalenessChip,
|
|
54
55
|
SuggestionChip: () => SuggestionChip,
|
|
55
56
|
Testimonial: () => Testimonial,
|
|
56
57
|
ToolCallCard: () => ToolCallCard,
|
|
57
|
-
cn: () =>
|
|
58
|
+
cn: () => import_ui32.cn,
|
|
58
59
|
entityColumn: () => entityColumn,
|
|
59
60
|
entityTypeColumn: () => entityTypeColumn,
|
|
61
|
+
formatAge: () => formatAge,
|
|
60
62
|
getEntityTypeMeta: () => getEntityTypeMeta,
|
|
61
63
|
listEntityTypes: () => listEntityTypes,
|
|
62
64
|
registerEntityType: () => registerEntityType,
|
|
@@ -64,7 +66,7 @@ __export(index_exports, {
|
|
|
64
66
|
resetEntityTypeRegistry: () => resetEntityTypeRegistry
|
|
65
67
|
});
|
|
66
68
|
module.exports = __toCommonJS(index_exports);
|
|
67
|
-
var
|
|
69
|
+
var import_ui32 = require("@ship-it-ui/ui");
|
|
68
70
|
|
|
69
71
|
// src/ai/AskBar.tsx
|
|
70
72
|
var import_ui = require("@ship-it-ui/ui");
|
|
@@ -440,18 +442,50 @@ var ReasoningStep = (0, import_react5.forwardRef)(function ReasoningStep2({ step
|
|
|
440
442
|
});
|
|
441
443
|
ReasoningStep.displayName = "ReasoningStep";
|
|
442
444
|
|
|
443
|
-
// src/ai/
|
|
445
|
+
// src/ai/StalenessChip.tsx
|
|
444
446
|
var import_ui9 = require("@ship-it-ui/ui");
|
|
445
447
|
var import_react6 = require("react");
|
|
446
448
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
447
|
-
var
|
|
449
|
+
var DEFAULT_THRESHOLDS = [3600, 86400];
|
|
450
|
+
function formatAge(ageSeconds) {
|
|
451
|
+
const age = Math.max(0, Math.floor(ageSeconds));
|
|
452
|
+
if (age < 60) return "just now";
|
|
453
|
+
if (age < 3600) return `${Math.floor(age / 60)}m`;
|
|
454
|
+
if (age < 86400) return `${Math.floor(age / 3600)}h`;
|
|
455
|
+
return `${Math.floor(age / 86400)}d`;
|
|
456
|
+
}
|
|
457
|
+
function deriveTier2(ageSeconds, [okMax, warnMax]) {
|
|
458
|
+
if (ageSeconds <= okMax) return "ok";
|
|
459
|
+
if (ageSeconds <= warnMax) return "warn";
|
|
460
|
+
return "err";
|
|
461
|
+
}
|
|
462
|
+
var StalenessChip = (0, import_react6.forwardRef)(function StalenessChip2({ ageSeconds, thresholds = DEFAULT_THRESHOLDS, prefix, tooltip, ...props }, ref) {
|
|
463
|
+
const tier = deriveTier2(ageSeconds, thresholds);
|
|
464
|
+
const humanised = formatAge(ageSeconds);
|
|
465
|
+
const isInstant = humanised === "just now";
|
|
466
|
+
const chip = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_ui9.Badge, { ref, variant: tier, size: "sm", dot: true, ...props, children: [
|
|
467
|
+
prefix && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: prefix }),
|
|
468
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "font-mono tabular-nums", children: isInstant ? humanised : `${humanised} ago` })
|
|
469
|
+
] });
|
|
470
|
+
if (tooltip) {
|
|
471
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ui9.SimpleTooltip, { content: tooltip, children: chip });
|
|
472
|
+
}
|
|
473
|
+
return chip;
|
|
474
|
+
});
|
|
475
|
+
StalenessChip.displayName = "StalenessChip";
|
|
476
|
+
|
|
477
|
+
// src/ai/SuggestionChip.tsx
|
|
478
|
+
var import_ui10 = require("@ship-it-ui/ui");
|
|
479
|
+
var import_react7 = require("react");
|
|
480
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
481
|
+
var SuggestionChip = (0, import_react7.forwardRef)(
|
|
448
482
|
function SuggestionChip2({ glyph = "\u2726", className, children, type, ...props }, ref) {
|
|
449
|
-
return /* @__PURE__ */ (0,
|
|
483
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
450
484
|
"button",
|
|
451
485
|
{
|
|
452
486
|
ref,
|
|
453
487
|
type: type ?? "button",
|
|
454
|
-
className: (0,
|
|
488
|
+
className: (0, import_ui10.cn)(
|
|
455
489
|
"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",
|
|
456
490
|
"transition-colors duration-(--duration-micro)",
|
|
457
491
|
"hover:border-border-strong hover:bg-panel-2",
|
|
@@ -460,7 +494,7 @@ var SuggestionChip = (0, import_react6.forwardRef)(
|
|
|
460
494
|
),
|
|
461
495
|
...props,
|
|
462
496
|
children: [
|
|
463
|
-
/* @__PURE__ */ (0,
|
|
497
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { "aria-hidden": true, className: "text-accent", children: glyph }),
|
|
464
498
|
children
|
|
465
499
|
]
|
|
466
500
|
}
|
|
@@ -470,24 +504,24 @@ var SuggestionChip = (0, import_react6.forwardRef)(
|
|
|
470
504
|
SuggestionChip.displayName = "SuggestionChip";
|
|
471
505
|
|
|
472
506
|
// src/ai/ToolCallCard.tsx
|
|
473
|
-
var import_ui10 = require("@ship-it-ui/ui");
|
|
474
507
|
var import_ui11 = require("@ship-it-ui/ui");
|
|
475
|
-
var
|
|
476
|
-
var
|
|
477
|
-
var
|
|
478
|
-
|
|
508
|
+
var import_ui12 = require("@ship-it-ui/ui");
|
|
509
|
+
var import_react8 = require("react");
|
|
510
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
511
|
+
var ToolCallCard = (0, import_react8.forwardRef)(function ToolCallCard2({ name, status, running, className, children, ...props }, ref) {
|
|
512
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
479
513
|
"div",
|
|
480
514
|
{
|
|
481
515
|
ref,
|
|
482
|
-
className: (0,
|
|
516
|
+
className: (0, import_ui12.cn)("border-border bg-panel rounded-md border px-[14px] py-[10px]", className),
|
|
483
517
|
...props,
|
|
484
518
|
children: [
|
|
485
|
-
/* @__PURE__ */ (0,
|
|
486
|
-
/* @__PURE__ */ (0,
|
|
487
|
-
/* @__PURE__ */ (0,
|
|
488
|
-
/* @__PURE__ */ (0,
|
|
519
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center gap-[10px]", children: [
|
|
520
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ui11.Badge, { size: "sm", variant: "accent", children: "TOOL" }),
|
|
521
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "font-mono text-[12px] font-medium", children: name }),
|
|
522
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "text-text-dim ml-auto inline-flex items-center font-mono text-[10px]", children: running ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
|
|
489
523
|
"running",
|
|
490
|
-
/* @__PURE__ */ (0,
|
|
524
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
491
525
|
"span",
|
|
492
526
|
{
|
|
493
527
|
"aria-hidden": true,
|
|
@@ -496,7 +530,7 @@ var ToolCallCard = (0, import_react7.forwardRef)(function ToolCallCard2({ name,
|
|
|
496
530
|
)
|
|
497
531
|
] }) : status })
|
|
498
532
|
] }),
|
|
499
|
-
children && /* @__PURE__ */ (0,
|
|
533
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("pre", { className: "text-text-muted m-0 mt-[6px] font-mono text-[11px] leading-[1.6] break-words whitespace-pre-wrap", children })
|
|
500
534
|
]
|
|
501
535
|
}
|
|
502
536
|
);
|
|
@@ -504,14 +538,15 @@ var ToolCallCard = (0, import_react7.forwardRef)(function ToolCallCard2({ name,
|
|
|
504
538
|
ToolCallCard.displayName = "ToolCallCard";
|
|
505
539
|
|
|
506
540
|
// src/entity/EntityBadge.tsx
|
|
507
|
-
var
|
|
541
|
+
var import_icons = require("@ship-it-ui/icons");
|
|
508
542
|
var import_ui13 = require("@ship-it-ui/ui");
|
|
509
|
-
var
|
|
543
|
+
var import_ui14 = require("@ship-it-ui/ui");
|
|
544
|
+
var import_react9 = require("react");
|
|
510
545
|
|
|
511
546
|
// src/entity/types.ts
|
|
512
547
|
var BUILTIN_META = {
|
|
513
548
|
service: {
|
|
514
|
-
|
|
549
|
+
iconName: "service",
|
|
515
550
|
label: "Service",
|
|
516
551
|
toneClass: "text-accent",
|
|
517
552
|
toneBg: "bg-accent-dim",
|
|
@@ -519,7 +554,7 @@ var BUILTIN_META = {
|
|
|
519
554
|
badgeVariant: "accent"
|
|
520
555
|
},
|
|
521
556
|
person: {
|
|
522
|
-
|
|
557
|
+
iconName: "person",
|
|
523
558
|
label: "Person",
|
|
524
559
|
toneClass: "text-text-muted",
|
|
525
560
|
toneBg: "bg-panel-2",
|
|
@@ -527,7 +562,7 @@ var BUILTIN_META = {
|
|
|
527
562
|
badgeVariant: "neutral"
|
|
528
563
|
},
|
|
529
564
|
document: {
|
|
530
|
-
|
|
565
|
+
iconName: "document",
|
|
531
566
|
label: "Document",
|
|
532
567
|
toneClass: "text-purple",
|
|
533
568
|
toneBg: "bg-[color-mix(in_oklab,var(--color-purple),transparent_85%)]",
|
|
@@ -535,7 +570,7 @@ var BUILTIN_META = {
|
|
|
535
570
|
badgeVariant: "purple"
|
|
536
571
|
},
|
|
537
572
|
deployment: {
|
|
538
|
-
|
|
573
|
+
iconName: "deployment",
|
|
539
574
|
label: "Deployment",
|
|
540
575
|
toneClass: "text-ok",
|
|
541
576
|
toneBg: "bg-[color-mix(in_oklab,var(--color-ok),transparent_85%)]",
|
|
@@ -543,7 +578,7 @@ var BUILTIN_META = {
|
|
|
543
578
|
badgeVariant: "ok"
|
|
544
579
|
},
|
|
545
580
|
incident: {
|
|
546
|
-
|
|
581
|
+
iconName: "incident",
|
|
547
582
|
label: "Incident",
|
|
548
583
|
toneClass: "text-err",
|
|
549
584
|
toneBg: "bg-[color-mix(in_oklab,var(--color-err),transparent_85%)]",
|
|
@@ -551,7 +586,7 @@ var BUILTIN_META = {
|
|
|
551
586
|
badgeVariant: "err"
|
|
552
587
|
},
|
|
553
588
|
ticket: {
|
|
554
|
-
|
|
589
|
+
iconName: "ticket",
|
|
555
590
|
label: "Ticket",
|
|
556
591
|
toneClass: "text-warn",
|
|
557
592
|
toneBg: "bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)]",
|
|
@@ -582,14 +617,6 @@ function resetEntityTypeRegistry() {
|
|
|
582
617
|
registry.set(key, BUILTIN_META[key]);
|
|
583
618
|
}
|
|
584
619
|
}
|
|
585
|
-
var ENTITY_GLYPH = {
|
|
586
|
-
service: BUILTIN_META.service.glyph,
|
|
587
|
-
person: BUILTIN_META.person.glyph,
|
|
588
|
-
document: BUILTIN_META.document.glyph,
|
|
589
|
-
deployment: BUILTIN_META.deployment.glyph,
|
|
590
|
-
incident: BUILTIN_META.incident.glyph,
|
|
591
|
-
ticket: BUILTIN_META.ticket.glyph
|
|
592
|
-
};
|
|
593
620
|
var ENTITY_LABEL = {
|
|
594
621
|
service: BUILTIN_META.service.label,
|
|
595
622
|
person: BUILTIN_META.person.label,
|
|
@@ -616,19 +643,19 @@ var ENTITY_TONE_BG = {
|
|
|
616
643
|
};
|
|
617
644
|
|
|
618
645
|
// src/entity/EntityBadge.tsx
|
|
619
|
-
var
|
|
620
|
-
var EntityBadge = (0,
|
|
646
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
647
|
+
var EntityBadge = (0, import_react9.forwardRef)(function EntityBadge2({ type, label, hideGlyph, className, children, ...props }, ref) {
|
|
621
648
|
const meta = getEntityTypeMeta(type);
|
|
622
|
-
return /* @__PURE__ */ (0,
|
|
623
|
-
|
|
649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
650
|
+
import_ui13.Badge,
|
|
624
651
|
{
|
|
625
652
|
ref,
|
|
626
653
|
variant: meta.badgeVariant,
|
|
627
654
|
"data-entity-type": type,
|
|
628
|
-
className: (0,
|
|
655
|
+
className: (0, import_ui14.cn)(className),
|
|
629
656
|
...props,
|
|
630
657
|
children: [
|
|
631
|
-
!hideGlyph && /* @__PURE__ */ (0,
|
|
658
|
+
!hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons.DynamicIconGlyph, { name: meta.iconName, size: 11 }),
|
|
632
659
|
children ?? label ?? meta.label
|
|
633
660
|
]
|
|
634
661
|
}
|
|
@@ -637,9 +664,10 @@ var EntityBadge = (0, import_react8.forwardRef)(function EntityBadge2({ type, la
|
|
|
637
664
|
EntityBadge.displayName = "EntityBadge";
|
|
638
665
|
|
|
639
666
|
// src/entity/EntityCard.tsx
|
|
640
|
-
var
|
|
641
|
-
var
|
|
642
|
-
var
|
|
667
|
+
var import_icons2 = require("@ship-it-ui/icons");
|
|
668
|
+
var import_ui15 = require("@ship-it-ui/ui");
|
|
669
|
+
var import_react10 = require("react");
|
|
670
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
643
671
|
var statToneClass = {
|
|
644
672
|
accent: "text-accent",
|
|
645
673
|
ok: "text-ok",
|
|
@@ -647,53 +675,53 @@ var statToneClass = {
|
|
|
647
675
|
err: "text-err",
|
|
648
676
|
muted: "text-text-muted"
|
|
649
677
|
};
|
|
650
|
-
var EntityCard = (0,
|
|
678
|
+
var EntityCard = (0, import_react10.forwardRef)(function EntityCard2({ type, title, subtitle, description, stats, actions, glyph, className, ...props }, ref) {
|
|
651
679
|
const meta = getEntityTypeMeta(type);
|
|
652
|
-
return /* @__PURE__ */ (0,
|
|
680
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
653
681
|
"div",
|
|
654
682
|
{
|
|
655
683
|
ref,
|
|
656
684
|
"data-entity-type": type,
|
|
657
|
-
className: (0,
|
|
685
|
+
className: (0, import_ui15.cn)(
|
|
658
686
|
"rounded-base border-border bg-panel flex flex-col gap-3 border p-5",
|
|
659
687
|
className
|
|
660
688
|
),
|
|
661
689
|
...props,
|
|
662
690
|
children: [
|
|
663
|
-
/* @__PURE__ */ (0,
|
|
664
|
-
/* @__PURE__ */ (0,
|
|
691
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
692
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
665
693
|
"span",
|
|
666
694
|
{
|
|
667
695
|
"aria-hidden": true,
|
|
668
|
-
className: (0,
|
|
696
|
+
className: (0, import_ui15.cn)(
|
|
669
697
|
"rounded-base grid h-12 w-12 shrink-0 place-items-center text-[20px]",
|
|
670
698
|
meta.toneBg,
|
|
671
699
|
meta.toneClass
|
|
672
700
|
),
|
|
673
|
-
children: glyph ?? meta.
|
|
701
|
+
children: glyph ?? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_icons2.DynamicIconGlyph, { name: meta.iconName, size: 20 })
|
|
674
702
|
}
|
|
675
703
|
),
|
|
676
|
-
/* @__PURE__ */ (0,
|
|
677
|
-
/* @__PURE__ */ (0,
|
|
678
|
-
/* @__PURE__ */ (0,
|
|
679
|
-
subtitle && /* @__PURE__ */ (0,
|
|
704
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
705
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
706
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EntityBadge, { type, size: "sm" }),
|
|
707
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-text-dim font-mono text-[11px]", children: subtitle })
|
|
680
708
|
] }),
|
|
681
|
-
/* @__PURE__ */ (0,
|
|
682
|
-
description && /* @__PURE__ */ (0,
|
|
709
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mt-1 truncate font-mono text-[18px] font-medium tracking-tight", children: title }),
|
|
710
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-text-muted mt-1 text-[13px] leading-[1.5]", children: description })
|
|
683
711
|
] }),
|
|
684
|
-
actions && /* @__PURE__ */ (0,
|
|
712
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "shrink-0", children: actions })
|
|
685
713
|
] }),
|
|
686
|
-
stats && stats.length > 0 && /* @__PURE__ */ (0,
|
|
714
|
+
stats && stats.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
687
715
|
"div",
|
|
688
716
|
{
|
|
689
717
|
className: "divide-border border-border bg-panel-2 grid divide-x rounded-md border",
|
|
690
718
|
style: { gridTemplateColumns: `repeat(${Math.min(stats.length, 6)}, 1fr)` },
|
|
691
|
-
children: stats.map((stat, i) => /* @__PURE__ */ (0,
|
|
692
|
-
/* @__PURE__ */ (0,
|
|
693
|
-
/* @__PURE__ */ (0,
|
|
719
|
+
children: stats.map((stat, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "px-4 py-3", children: [
|
|
720
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.3px] uppercase", children: stat.label }),
|
|
721
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
694
722
|
"div",
|
|
695
723
|
{
|
|
696
|
-
className: (0,
|
|
724
|
+
className: (0, import_ui15.cn)(
|
|
697
725
|
"mt-1 text-[16px] font-medium tracking-tight",
|
|
698
726
|
stat.tone ? statToneClass[stat.tone] : "text-text"
|
|
699
727
|
),
|
|
@@ -709,13 +737,101 @@ var EntityCard = (0, import_react9.forwardRef)(function EntityCard2({ type, titl
|
|
|
709
737
|
});
|
|
710
738
|
EntityCard.displayName = "EntityCard";
|
|
711
739
|
|
|
740
|
+
// src/entity/EntityList.tsx
|
|
741
|
+
var import_icons3 = require("@ship-it-ui/icons");
|
|
742
|
+
var import_ui16 = require("@ship-it-ui/ui");
|
|
743
|
+
var import_react11 = require("react");
|
|
744
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
745
|
+
var framedClasses = "rounded-base border-border bg-panel overflow-hidden border";
|
|
746
|
+
var dividerWrapperClasses = "[&>*+*]:border-t [&>*+*]:border-border";
|
|
747
|
+
function Header({ title, subtitle }) {
|
|
748
|
+
if (!title && !subtitle) return null;
|
|
749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "border-border flex flex-col gap-[2px] border-b px-3 py-2", children: [
|
|
750
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-text text-[12px] font-medium", children: title }),
|
|
751
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-text-muted text-[11px]", children: subtitle })
|
|
752
|
+
] });
|
|
753
|
+
}
|
|
754
|
+
function Rows({ dividers, children }) {
|
|
755
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: (0, import_ui16.cn)("flex flex-col", dividers && dividerWrapperClasses), children });
|
|
756
|
+
}
|
|
757
|
+
var EntityList = (0, import_react11.forwardRef)(function EntityList2({
|
|
758
|
+
title,
|
|
759
|
+
subtitle,
|
|
760
|
+
framed = true,
|
|
761
|
+
dividers = true,
|
|
762
|
+
collapsible,
|
|
763
|
+
defaultCollapsed = false,
|
|
764
|
+
className,
|
|
765
|
+
children,
|
|
766
|
+
...props
|
|
767
|
+
}, ref) {
|
|
768
|
+
const [open, setOpen] = (0, import_react11.useState)(!defaultCollapsed);
|
|
769
|
+
if (collapsible) {
|
|
770
|
+
const fallbackLabel = !title && !subtitle ? "Toggle section" : void 0;
|
|
771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
772
|
+
"details",
|
|
773
|
+
{
|
|
774
|
+
ref,
|
|
775
|
+
open,
|
|
776
|
+
onToggle: (e) => setOpen(e.currentTarget.open),
|
|
777
|
+
className: (0, import_ui16.cn)(framed && framedClasses, "group", className),
|
|
778
|
+
...props,
|
|
779
|
+
children: [
|
|
780
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
781
|
+
"summary",
|
|
782
|
+
{
|
|
783
|
+
"aria-label": fallbackLabel,
|
|
784
|
+
className: (0, import_ui16.cn)(
|
|
785
|
+
"border-border flex cursor-pointer list-none items-center gap-2 border-b px-3 py-2",
|
|
786
|
+
"focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]",
|
|
787
|
+
// Hide the default disclosure marker on WebKit.
|
|
788
|
+
"[&::-webkit-details-marker]:hidden"
|
|
789
|
+
),
|
|
790
|
+
children: [
|
|
791
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
792
|
+
import_icons3.IconGlyph,
|
|
793
|
+
{
|
|
794
|
+
name: "caretDown",
|
|
795
|
+
size: 12,
|
|
796
|
+
className: "text-text-muted -rotate-90 transition-transform group-open:rotate-0",
|
|
797
|
+
"aria-hidden": true
|
|
798
|
+
}
|
|
799
|
+
),
|
|
800
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-[2px]", children: [
|
|
801
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-text text-[12px] font-medium", children: title }),
|
|
802
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-text-muted text-[11px]", children: subtitle })
|
|
803
|
+
] })
|
|
804
|
+
]
|
|
805
|
+
}
|
|
806
|
+
),
|
|
807
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Rows, { dividers, children })
|
|
808
|
+
]
|
|
809
|
+
}
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
813
|
+
"section",
|
|
814
|
+
{
|
|
815
|
+
ref,
|
|
816
|
+
className: (0, import_ui16.cn)(framed && framedClasses, className),
|
|
817
|
+
...props,
|
|
818
|
+
children: [
|
|
819
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Header, { title, subtitle }),
|
|
820
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Rows, { dividers, children })
|
|
821
|
+
]
|
|
822
|
+
}
|
|
823
|
+
);
|
|
824
|
+
});
|
|
825
|
+
EntityList.displayName = "EntityList";
|
|
826
|
+
|
|
712
827
|
// src/entity/EntityListRow.tsx
|
|
713
|
-
var
|
|
714
|
-
var
|
|
715
|
-
var
|
|
716
|
-
var
|
|
828
|
+
var import_icons4 = require("@ship-it-ui/icons");
|
|
829
|
+
var import_ui17 = require("@ship-it-ui/ui");
|
|
830
|
+
var import_react12 = require("react");
|
|
831
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
832
|
+
var dividerClass = "border-b border-border last:border-0";
|
|
833
|
+
var labelClass = (interactive, className) => (0, import_ui17.cn)(
|
|
717
834
|
"flex w-full items-center gap-3 border-0 bg-transparent px-2 py-2 text-left",
|
|
718
|
-
"border-b border-border last:border-0",
|
|
719
835
|
interactive && "cursor-pointer outline-none transition-colors duration-(--duration-micro) hover:bg-panel-2 focus-visible:ring-[3px] focus-visible:ring-accent-dim",
|
|
720
836
|
className
|
|
721
837
|
);
|
|
@@ -727,40 +843,93 @@ function RowInner({
|
|
|
727
843
|
hideGlyph
|
|
728
844
|
}) {
|
|
729
845
|
const typeMeta = getEntityTypeMeta(type);
|
|
730
|
-
return /* @__PURE__ */ (0,
|
|
731
|
-
!hideGlyph && /* @__PURE__ */ (0,
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
846
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
847
|
+
!hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
848
|
+
import_icons4.DynamicIconGlyph,
|
|
849
|
+
{
|
|
850
|
+
name: typeMeta.iconName,
|
|
851
|
+
size: 14,
|
|
852
|
+
className: (0, import_ui17.cn)("shrink-0", typeMeta.toneClass)
|
|
853
|
+
}
|
|
854
|
+
),
|
|
855
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-text min-w-0 flex-1 truncate font-mono text-[12px]", children: name }),
|
|
856
|
+
relation && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "border-border bg-panel-2 text-text-muted rounded-full border px-2 py-[2px] font-mono text-[10px]", children: relation }),
|
|
857
|
+
meta && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: meta })
|
|
735
858
|
] });
|
|
736
859
|
}
|
|
737
|
-
var EntityListRowDiv = (0,
|
|
738
|
-
function EntityListRowDiv2({ type, name, relation, meta, hideGlyph, className, ...props }, ref) {
|
|
739
|
-
|
|
860
|
+
var EntityListRowDiv = (0, import_react12.forwardRef)(
|
|
861
|
+
function EntityListRowDiv2({ type, name, relation, meta, hideGlyph, actions, className, ...props }, ref) {
|
|
862
|
+
if (actions) {
|
|
863
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
864
|
+
"div",
|
|
865
|
+
{
|
|
866
|
+
ref,
|
|
867
|
+
"data-entity-type": type,
|
|
868
|
+
className: (0, import_ui17.cn)("flex w-full items-center gap-1", dividerClass, className),
|
|
869
|
+
...props,
|
|
870
|
+
children: [
|
|
871
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: labelClass(false), children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
872
|
+
RowInner,
|
|
873
|
+
{
|
|
874
|
+
type,
|
|
875
|
+
name,
|
|
876
|
+
relation,
|
|
877
|
+
meta,
|
|
878
|
+
hideGlyph
|
|
879
|
+
}
|
|
880
|
+
) }),
|
|
881
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "shrink-0 self-center pr-1", children: actions })
|
|
882
|
+
]
|
|
883
|
+
}
|
|
884
|
+
);
|
|
885
|
+
}
|
|
886
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
740
887
|
"div",
|
|
741
888
|
{
|
|
742
889
|
ref,
|
|
743
890
|
"data-entity-type": type,
|
|
744
|
-
className:
|
|
891
|
+
className: (0, import_ui17.cn)(labelClass(false), dividerClass, className),
|
|
745
892
|
...props,
|
|
746
|
-
children: /* @__PURE__ */ (0,
|
|
893
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RowInner, { type, name, relation, meta, hideGlyph })
|
|
747
894
|
}
|
|
748
895
|
);
|
|
749
896
|
}
|
|
750
897
|
);
|
|
751
898
|
EntityListRowDiv.displayName = "EntityListRowDiv";
|
|
752
|
-
var EntityListRowButton = (0,
|
|
753
|
-
function EntityListRowButton2({ type, name, relation, meta, hideGlyph, className, onClick, ...props }, ref) {
|
|
754
|
-
|
|
899
|
+
var EntityListRowButton = (0, import_react12.forwardRef)(
|
|
900
|
+
function EntityListRowButton2({ type, name, relation, meta, hideGlyph, actions, className, onClick, ...props }, ref) {
|
|
901
|
+
if (actions) {
|
|
902
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
903
|
+
"div",
|
|
904
|
+
{
|
|
905
|
+
"data-entity-type": type,
|
|
906
|
+
className: (0, import_ui17.cn)("flex w-full items-stretch gap-1", dividerClass, className),
|
|
907
|
+
children: [
|
|
908
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("button", { ref, type: "button", onClick, className: labelClass(true), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
909
|
+
RowInner,
|
|
910
|
+
{
|
|
911
|
+
type,
|
|
912
|
+
name,
|
|
913
|
+
relation,
|
|
914
|
+
meta,
|
|
915
|
+
hideGlyph
|
|
916
|
+
}
|
|
917
|
+
) }),
|
|
918
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "shrink-0 self-center pr-1", children: actions })
|
|
919
|
+
]
|
|
920
|
+
}
|
|
921
|
+
);
|
|
922
|
+
}
|
|
923
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
755
924
|
"button",
|
|
756
925
|
{
|
|
757
926
|
ref,
|
|
758
927
|
type: "button",
|
|
759
928
|
"data-entity-type": type,
|
|
760
929
|
onClick,
|
|
761
|
-
className:
|
|
930
|
+
className: (0, import_ui17.cn)(labelClass(true), dividerClass, className),
|
|
762
931
|
...props,
|
|
763
|
-
children: /* @__PURE__ */ (0,
|
|
932
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RowInner, { type, name, relation, meta, hideGlyph })
|
|
764
933
|
}
|
|
765
934
|
);
|
|
766
935
|
}
|
|
@@ -772,12 +941,13 @@ function EntityListRow({
|
|
|
772
941
|
relation,
|
|
773
942
|
meta,
|
|
774
943
|
hideGlyph,
|
|
944
|
+
actions,
|
|
775
945
|
onClick,
|
|
776
946
|
className,
|
|
777
947
|
...props
|
|
778
948
|
}) {
|
|
779
949
|
if (typeof onClick === "function") {
|
|
780
|
-
return /* @__PURE__ */ (0,
|
|
950
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
781
951
|
EntityListRowButton,
|
|
782
952
|
{
|
|
783
953
|
type,
|
|
@@ -785,13 +955,14 @@ function EntityListRow({
|
|
|
785
955
|
relation,
|
|
786
956
|
meta,
|
|
787
957
|
hideGlyph,
|
|
958
|
+
actions,
|
|
788
959
|
onClick,
|
|
789
960
|
className,
|
|
790
961
|
...props
|
|
791
962
|
}
|
|
792
963
|
);
|
|
793
964
|
}
|
|
794
|
-
return /* @__PURE__ */ (0,
|
|
965
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
795
966
|
EntityListRowDiv,
|
|
796
967
|
{
|
|
797
968
|
type,
|
|
@@ -799,6 +970,7 @@ function EntityListRow({
|
|
|
799
970
|
relation,
|
|
800
971
|
meta,
|
|
801
972
|
hideGlyph,
|
|
973
|
+
actions,
|
|
802
974
|
className,
|
|
803
975
|
...props
|
|
804
976
|
}
|
|
@@ -807,15 +979,15 @@ function EntityListRow({
|
|
|
807
979
|
EntityListRow.displayName = "EntityListRow";
|
|
808
980
|
|
|
809
981
|
// src/graph/GraphEdge.tsx
|
|
810
|
-
var
|
|
811
|
-
var
|
|
982
|
+
var import_react13 = require("react");
|
|
983
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
812
984
|
var styleProps = {
|
|
813
985
|
solid: { stroke: "var(--color-accent)", strokeWidth: 1.5 },
|
|
814
986
|
dashed: { stroke: "var(--color-accent)", strokeWidth: 1.5, strokeDasharray: "4 3" },
|
|
815
987
|
highlighted: { stroke: "var(--color-purple)", strokeWidth: 2.5 },
|
|
816
988
|
dim: { stroke: "var(--color-text-dim)", strokeWidth: 1, opacity: 0.4 }
|
|
817
989
|
};
|
|
818
|
-
var GraphEdge = (0,
|
|
990
|
+
var GraphEdge = (0, import_react13.forwardRef)(function GraphEdge2({ x1, y1, x2, y2, curve, edgeStyle = "solid", color, arrowheadId, ...props }, ref) {
|
|
819
991
|
const base = styleProps[edgeStyle];
|
|
820
992
|
const stroke = color ?? base.stroke;
|
|
821
993
|
const sharedProps = {
|
|
@@ -828,7 +1000,7 @@ var GraphEdge = (0, import_react11.forwardRef)(function GraphEdge2({ x1, y1, x2,
|
|
|
828
1000
|
...props
|
|
829
1001
|
};
|
|
830
1002
|
if (curve) {
|
|
831
|
-
return /* @__PURE__ */ (0,
|
|
1003
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
832
1004
|
"path",
|
|
833
1005
|
{
|
|
834
1006
|
ref,
|
|
@@ -837,15 +1009,15 @@ var GraphEdge = (0, import_react11.forwardRef)(function GraphEdge2({ x1, y1, x2,
|
|
|
837
1009
|
}
|
|
838
1010
|
);
|
|
839
1011
|
}
|
|
840
|
-
return /* @__PURE__ */ (0,
|
|
1012
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("line", { ref, x1, y1, x2, y2, ...sharedProps });
|
|
841
1013
|
});
|
|
842
1014
|
GraphEdge.displayName = "GraphEdge";
|
|
843
1015
|
|
|
844
1016
|
// src/graph/GraphInspector.tsx
|
|
845
|
-
var
|
|
846
|
-
var
|
|
847
|
-
var
|
|
848
|
-
var GraphInspector = (0,
|
|
1017
|
+
var import_ui18 = require("@ship-it-ui/ui");
|
|
1018
|
+
var import_react14 = require("react");
|
|
1019
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1020
|
+
var GraphInspector = (0, import_react14.forwardRef)(
|
|
849
1021
|
function GraphInspector2({
|
|
850
1022
|
type,
|
|
851
1023
|
entityId,
|
|
@@ -858,47 +1030,47 @@ var GraphInspector = (0, import_react12.forwardRef)(
|
|
|
858
1030
|
...props
|
|
859
1031
|
}, ref) {
|
|
860
1032
|
const total = relationCount ?? relations?.length ?? 0;
|
|
861
|
-
return /* @__PURE__ */ (0,
|
|
1033
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
862
1034
|
"aside",
|
|
863
1035
|
{
|
|
864
1036
|
ref,
|
|
865
1037
|
"aria-label": typeof title === "string" ? `${title} inspector` : "Node inspector",
|
|
866
|
-
className: (0,
|
|
1038
|
+
className: (0, import_ui18.cn)(
|
|
867
1039
|
"rounded-base border-border bg-panel flex w-[340px] flex-col gap-3 border p-4",
|
|
868
1040
|
className
|
|
869
1041
|
),
|
|
870
1042
|
...props,
|
|
871
1043
|
children: [
|
|
872
|
-
/* @__PURE__ */ (0,
|
|
873
|
-
/* @__PURE__ */ (0,
|
|
874
|
-
entityId && /* @__PURE__ */ (0,
|
|
1044
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center", children: [
|
|
1045
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EntityBadge, { type, size: "sm" }),
|
|
1046
|
+
entityId && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[10px]", children: entityId })
|
|
875
1047
|
] }),
|
|
876
|
-
/* @__PURE__ */ (0,
|
|
877
|
-
/* @__PURE__ */ (0,
|
|
878
|
-
description && /* @__PURE__ */ (0,
|
|
1048
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
|
|
1049
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "text-[17px] font-medium", children: title }),
|
|
1050
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "text-text-muted mt-[2px] text-[12px]", children: description })
|
|
879
1051
|
] }),
|
|
880
|
-
properties && properties.length > 0 && /* @__PURE__ */ (0,
|
|
881
|
-
/* @__PURE__ */ (0,
|
|
882
|
-
/* @__PURE__ */ (0,
|
|
1052
|
+
properties && properties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("section", { children: [
|
|
1053
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase", children: "Properties" }),
|
|
1054
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dl", { className: "m-0 flex flex-col gap-1 font-mono text-[11px]", children: properties.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
883
1055
|
"div",
|
|
884
1056
|
{
|
|
885
|
-
className: (0,
|
|
1057
|
+
className: (0, import_ui18.cn)("border-border flex py-1", i < properties.length - 1 && "border-b"),
|
|
886
1058
|
children: [
|
|
887
|
-
/* @__PURE__ */ (0,
|
|
888
|
-
/* @__PURE__ */ (0,
|
|
1059
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dt", { className: "text-text-dim w-[70px]", children: p.key }),
|
|
1060
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dd", { className: "m-0 flex-1", children: p.value })
|
|
889
1061
|
]
|
|
890
1062
|
},
|
|
891
1063
|
i
|
|
892
1064
|
)) })
|
|
893
1065
|
] }),
|
|
894
|
-
relations && relations.length > 0 && /* @__PURE__ */ (0,
|
|
895
|
-
/* @__PURE__ */ (0,
|
|
1066
|
+
relations && relations.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("section", { children: [
|
|
1067
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase", children: [
|
|
896
1068
|
"Relations \xB7 ",
|
|
897
1069
|
total
|
|
898
1070
|
] }),
|
|
899
|
-
/* @__PURE__ */ (0,
|
|
900
|
-
/* @__PURE__ */ (0,
|
|
901
|
-
/* @__PURE__ */ (0,
|
|
1071
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.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_runtime14.jsxs)("li", { className: "flex gap-2", children: [
|
|
1072
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-text-dim w-[100px] font-mono", children: r.relation }),
|
|
1073
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: r.entity })
|
|
902
1074
|
] }, i)) })
|
|
903
1075
|
] })
|
|
904
1076
|
]
|
|
@@ -909,33 +1081,33 @@ var GraphInspector = (0, import_react12.forwardRef)(
|
|
|
909
1081
|
GraphInspector.displayName = "GraphInspector";
|
|
910
1082
|
|
|
911
1083
|
// src/graph/GraphLegend.tsx
|
|
912
|
-
var
|
|
913
|
-
var
|
|
914
|
-
var
|
|
1084
|
+
var import_ui19 = require("@ship-it-ui/ui");
|
|
1085
|
+
var import_react15 = require("react");
|
|
1086
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
915
1087
|
var DEFAULT_ENTRIES = [
|
|
916
1088
|
{ type: "service" },
|
|
917
1089
|
{ type: "person" },
|
|
918
1090
|
{ type: "document" }
|
|
919
1091
|
];
|
|
920
|
-
var GraphLegend = (0,
|
|
921
|
-
return /* @__PURE__ */ (0,
|
|
1092
|
+
var GraphLegend = (0, import_react15.forwardRef)(function GraphLegend2({ entries = DEFAULT_ENTRIES, heading = "Legend", className, children, ...props }, ref) {
|
|
1093
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
922
1094
|
"div",
|
|
923
1095
|
{
|
|
924
1096
|
ref,
|
|
925
|
-
className: (0,
|
|
1097
|
+
className: (0, import_ui19.cn)(
|
|
926
1098
|
"rounded-base border-border bg-panel/85 inline-flex flex-col gap-[6px] border p-[10px] text-[11px] backdrop-blur-[8px]",
|
|
927
1099
|
className
|
|
928
1100
|
),
|
|
929
1101
|
...props,
|
|
930
1102
|
children: [
|
|
931
|
-
heading && /* @__PURE__ */ (0,
|
|
1103
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase", children: heading }),
|
|
932
1104
|
children ?? entries.map((entry, i) => {
|
|
933
1105
|
const meta = entry.type ? getEntityTypeMeta(entry.type) : void 0;
|
|
934
1106
|
const color = entry.color ?? meta?.colorVar ?? "currentColor";
|
|
935
1107
|
const label = entry.label ?? meta?.label ?? "";
|
|
936
|
-
return /* @__PURE__ */ (0,
|
|
937
|
-
/* @__PURE__ */ (0,
|
|
938
|
-
/* @__PURE__ */ (0,
|
|
1108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-[6px]", children: [
|
|
1109
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "aria-hidden": true, className: "h-2 w-2 rounded-full", style: { background: color } }),
|
|
1110
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: label })
|
|
939
1111
|
] }, i);
|
|
940
1112
|
})
|
|
941
1113
|
]
|
|
@@ -945,24 +1117,24 @@ var GraphLegend = (0, import_react13.forwardRef)(function GraphLegend2({ entries
|
|
|
945
1117
|
GraphLegend.displayName = "GraphLegend";
|
|
946
1118
|
|
|
947
1119
|
// src/graph/GraphMinimap.tsx
|
|
948
|
-
var
|
|
949
|
-
var
|
|
950
|
-
var
|
|
951
|
-
var GraphMinimap = (0,
|
|
952
|
-
return /* @__PURE__ */ (0,
|
|
1120
|
+
var import_ui20 = require("@ship-it-ui/ui");
|
|
1121
|
+
var import_react16 = require("react");
|
|
1122
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1123
|
+
var GraphMinimap = (0, import_react16.forwardRef)(function GraphMinimap2({ points, viewport, width = 120, height = 72, className, ...props }, ref) {
|
|
1124
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
953
1125
|
"div",
|
|
954
1126
|
{
|
|
955
1127
|
ref,
|
|
956
1128
|
role: "img",
|
|
957
1129
|
"aria-label": "Graph minimap",
|
|
958
|
-
className: (0,
|
|
1130
|
+
className: (0, import_ui20.cn)(
|
|
959
1131
|
"border-border bg-panel/85 relative rounded-md border p-1 backdrop-blur-[8px]",
|
|
960
1132
|
className
|
|
961
1133
|
),
|
|
962
1134
|
style: { width, height },
|
|
963
1135
|
...props,
|
|
964
|
-
children: /* @__PURE__ */ (0,
|
|
965
|
-
points.map((p, i) => /* @__PURE__ */ (0,
|
|
1136
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "relative h-full w-full", children: [
|
|
1137
|
+
points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
966
1138
|
"span",
|
|
967
1139
|
{
|
|
968
1140
|
"aria-hidden": true,
|
|
@@ -975,7 +1147,7 @@ var GraphMinimap = (0, import_react14.forwardRef)(function GraphMinimap2({ point
|
|
|
975
1147
|
},
|
|
976
1148
|
i
|
|
977
1149
|
)),
|
|
978
|
-
viewport && /* @__PURE__ */ (0,
|
|
1150
|
+
viewport && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
979
1151
|
"span",
|
|
980
1152
|
{
|
|
981
1153
|
"aria-hidden": true,
|
|
@@ -997,16 +1169,17 @@ var GraphMinimap = (0, import_react14.forwardRef)(function GraphMinimap2({ point
|
|
|
997
1169
|
GraphMinimap.displayName = "GraphMinimap";
|
|
998
1170
|
|
|
999
1171
|
// src/graph/GraphNode.tsx
|
|
1000
|
-
var
|
|
1001
|
-
var
|
|
1002
|
-
var
|
|
1003
|
-
var
|
|
1172
|
+
var import_icons5 = require("@ship-it-ui/icons");
|
|
1173
|
+
var import_ui21 = require("@ship-it-ui/ui");
|
|
1174
|
+
var import_react17 = require("react");
|
|
1175
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1176
|
+
var GraphNode = (0, import_react17.forwardRef)(function GraphNode2({ type, state = "default", glyph, label, size = 52, pathColor, className, style, ...props }, ref) {
|
|
1004
1177
|
const meta = getEntityTypeMeta(type);
|
|
1005
1178
|
const color = state === "path" ? pathColor ?? "var(--color-purple)" : meta.colorVar;
|
|
1006
1179
|
const glowPct = state === "hover" ? 50 : 25;
|
|
1007
1180
|
const opacity = state === "dim" ? 0.35 : 1;
|
|
1008
1181
|
const showRing = state === "selected" || state === "path";
|
|
1009
|
-
return /* @__PURE__ */ (0,
|
|
1182
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
1010
1183
|
"div",
|
|
1011
1184
|
{
|
|
1012
1185
|
ref,
|
|
@@ -1014,11 +1187,11 @@ var GraphNode = (0, import_react15.forwardRef)(function GraphNode2({ type, state
|
|
|
1014
1187
|
"aria-label": typeof label === "string" ? label : `${type} node`,
|
|
1015
1188
|
"data-state": state,
|
|
1016
1189
|
"data-entity-type": type,
|
|
1017
|
-
className: (0,
|
|
1190
|
+
className: (0, import_ui21.cn)("inline-flex flex-col items-center gap-[6px]", className),
|
|
1018
1191
|
style,
|
|
1019
1192
|
...props,
|
|
1020
1193
|
children: [
|
|
1021
|
-
/* @__PURE__ */ (0,
|
|
1194
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1022
1195
|
"div",
|
|
1023
1196
|
{
|
|
1024
1197
|
className: "bg-panel grid place-items-center rounded-[14px] border-[1.5px] transition-all duration-(--duration-micro)",
|
|
@@ -1033,10 +1206,10 @@ var GraphNode = (0, import_react15.forwardRef)(function GraphNode2({ type, state
|
|
|
1033
1206
|
outlineOffset: showRing ? 4 : void 0,
|
|
1034
1207
|
opacity
|
|
1035
1208
|
},
|
|
1036
|
-
children: glyph ?? meta.
|
|
1209
|
+
children: glyph ?? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_icons5.DynamicIconGlyph, { name: meta.iconName, size: Math.round(size * 0.42) })
|
|
1037
1210
|
}
|
|
1038
1211
|
),
|
|
1039
|
-
label && /* @__PURE__ */ (0,
|
|
1212
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: label })
|
|
1040
1213
|
]
|
|
1041
1214
|
}
|
|
1042
1215
|
);
|
|
@@ -1044,13 +1217,13 @@ var GraphNode = (0, import_react15.forwardRef)(function GraphNode2({ type, state
|
|
|
1044
1217
|
GraphNode.displayName = "GraphNode";
|
|
1045
1218
|
|
|
1046
1219
|
// src/graph/PathOverlay.tsx
|
|
1047
|
-
var
|
|
1048
|
-
var
|
|
1049
|
-
var PathOverlay = (0,
|
|
1220
|
+
var import_react18 = require("react");
|
|
1221
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1222
|
+
var PathOverlay = (0, import_react18.forwardRef)(function PathOverlay2({ points, color = "var(--color-purple)", width = 2.5, halo = true, ...props }, ref) {
|
|
1050
1223
|
if (points.length < 2) return null;
|
|
1051
1224
|
const coords = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
1052
|
-
return /* @__PURE__ */ (0,
|
|
1053
|
-
halo && /* @__PURE__ */ (0,
|
|
1225
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("g", { ref, ...props, children: [
|
|
1226
|
+
halo && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1054
1227
|
"polyline",
|
|
1055
1228
|
{
|
|
1056
1229
|
points: coords,
|
|
@@ -1062,7 +1235,7 @@ var PathOverlay = (0, import_react16.forwardRef)(function PathOverlay2({ points,
|
|
|
1062
1235
|
opacity: 0.65
|
|
1063
1236
|
}
|
|
1064
1237
|
),
|
|
1065
|
-
/* @__PURE__ */ (0,
|
|
1238
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1066
1239
|
"polyline",
|
|
1067
1240
|
{
|
|
1068
1241
|
points: coords,
|
|
@@ -1078,24 +1251,24 @@ var PathOverlay = (0, import_react16.forwardRef)(function PathOverlay2({ points,
|
|
|
1078
1251
|
PathOverlay.displayName = "PathOverlay";
|
|
1079
1252
|
|
|
1080
1253
|
// src/marketing/CTAStrip.tsx
|
|
1081
|
-
var
|
|
1082
|
-
var
|
|
1083
|
-
var
|
|
1084
|
-
var CTAStrip = (0,
|
|
1085
|
-
return /* @__PURE__ */ (0,
|
|
1254
|
+
var import_ui22 = require("@ship-it-ui/ui");
|
|
1255
|
+
var import_react19 = require("react");
|
|
1256
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1257
|
+
var CTAStrip = (0, import_react19.forwardRef)(function CTAStrip2({ title, description, actions, className, ...props }, ref) {
|
|
1258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1086
1259
|
"section",
|
|
1087
1260
|
{
|
|
1088
1261
|
ref,
|
|
1089
|
-
className: (0,
|
|
1262
|
+
className: (0, import_ui22.cn)(
|
|
1090
1263
|
"rounded-xl px-10 py-12 text-center",
|
|
1091
1264
|
"bg-[linear-gradient(135deg,var(--color-cta-from),var(--color-cta-to))]",
|
|
1092
1265
|
className
|
|
1093
1266
|
),
|
|
1094
1267
|
...props,
|
|
1095
1268
|
children: [
|
|
1096
|
-
/* @__PURE__ */ (0,
|
|
1097
|
-
description && /* @__PURE__ */ (0,
|
|
1098
|
-
actions && /* @__PURE__ */ (0,
|
|
1269
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h2", { className: "m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]", children: title }),
|
|
1270
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-text-muted m-0 mb-5 text-[13px]", children: description }),
|
|
1271
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex flex-wrap justify-center gap-2", children: actions })
|
|
1099
1272
|
]
|
|
1100
1273
|
}
|
|
1101
1274
|
);
|
|
@@ -1103,25 +1276,25 @@ var CTAStrip = (0, import_react17.forwardRef)(function CTAStrip2({ title, descri
|
|
|
1103
1276
|
CTAStrip.displayName = "CTAStrip";
|
|
1104
1277
|
|
|
1105
1278
|
// src/marketing/FeatureGrid.tsx
|
|
1106
|
-
var
|
|
1107
|
-
var
|
|
1108
|
-
var
|
|
1279
|
+
var import_ui23 = require("@ship-it-ui/ui");
|
|
1280
|
+
var import_react20 = require("react");
|
|
1281
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1109
1282
|
var colsClass = {
|
|
1110
1283
|
2: "md:grid-cols-2",
|
|
1111
1284
|
3: "md:grid-cols-3",
|
|
1112
1285
|
4: "md:grid-cols-2 lg:grid-cols-4"
|
|
1113
1286
|
};
|
|
1114
|
-
var FeatureGrid = (0,
|
|
1115
|
-
return /* @__PURE__ */ (0,
|
|
1287
|
+
var FeatureGrid = (0, import_react20.forwardRef)(function FeatureGrid2({ features, columns = 3, className, ...props }, ref) {
|
|
1288
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1116
1289
|
"div",
|
|
1117
1290
|
{
|
|
1118
1291
|
ref,
|
|
1119
|
-
className: (0,
|
|
1292
|
+
className: (0, import_ui23.cn)("grid grid-cols-1 gap-3", colsClass[columns], className),
|
|
1120
1293
|
...props,
|
|
1121
|
-
children: features.map((f, i) => /* @__PURE__ */ (0,
|
|
1122
|
-
/* @__PURE__ */ (0,
|
|
1123
|
-
/* @__PURE__ */ (0,
|
|
1124
|
-
/* @__PURE__ */ (0,
|
|
1294
|
+
children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "rounded-base border-border bg-panel border p-5", children: [
|
|
1295
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-hidden": true, className: "text-accent mb-3 text-[22px]", children: f.glyph }),
|
|
1296
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "mb-[6px] text-[14px] font-medium", children: f.title }),
|
|
1297
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "text-text-muted text-[12px] leading-[1.55]", children: f.description })
|
|
1125
1298
|
] }, i))
|
|
1126
1299
|
}
|
|
1127
1300
|
);
|
|
@@ -1129,16 +1302,16 @@ var FeatureGrid = (0, import_react18.forwardRef)(function FeatureGrid2({ feature
|
|
|
1129
1302
|
FeatureGrid.displayName = "FeatureGrid";
|
|
1130
1303
|
|
|
1131
1304
|
// src/marketing/Footer.tsx
|
|
1132
|
-
var
|
|
1133
|
-
var
|
|
1134
|
-
var
|
|
1135
|
-
var Footer = (0,
|
|
1136
|
-
return /* @__PURE__ */ (0,
|
|
1137
|
-
/* @__PURE__ */ (0,
|
|
1138
|
-
brand && /* @__PURE__ */ (0,
|
|
1139
|
-
/* @__PURE__ */ (0,
|
|
1140
|
-
/* @__PURE__ */ (0,
|
|
1141
|
-
col.links.map((link, j) => /* @__PURE__ */ (0,
|
|
1305
|
+
var import_ui24 = require("@ship-it-ui/ui");
|
|
1306
|
+
var import_react21 = require("react");
|
|
1307
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1308
|
+
var Footer = (0, import_react21.forwardRef)(function Footer2({ brand, columns, copyright, closing, className, ...props }, ref) {
|
|
1309
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("footer", { ref, className: (0, import_ui24.cn)("px-7 py-7", className), ...props, children: [
|
|
1310
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mb-7 flex flex-wrap gap-8", children: [
|
|
1311
|
+
brand && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { children: brand }),
|
|
1312
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-muted ml-auto flex flex-wrap gap-6 text-[12px]", children: columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-col gap-[6px]", children: [
|
|
1313
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.2px] uppercase", children: col.heading }),
|
|
1314
|
+
col.links.map((link, j) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1142
1315
|
"a",
|
|
1143
1316
|
{
|
|
1144
1317
|
href: link.href,
|
|
@@ -1149,47 +1322,47 @@ var Footer = (0, import_react19.forwardRef)(function Footer2({ brand, columns, c
|
|
|
1149
1322
|
))
|
|
1150
1323
|
] }, i)) })
|
|
1151
1324
|
] }),
|
|
1152
|
-
/* @__PURE__ */ (0,
|
|
1153
|
-
copyright && /* @__PURE__ */ (0,
|
|
1154
|
-
closing && /* @__PURE__ */ (0,
|
|
1325
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "border-border text-text-dim flex border-t pt-4 font-mono text-[11px]", children: [
|
|
1326
|
+
copyright && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: copyright }),
|
|
1327
|
+
closing && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "ml-auto", children: closing })
|
|
1155
1328
|
] })
|
|
1156
1329
|
] });
|
|
1157
1330
|
});
|
|
1158
1331
|
Footer.displayName = "Footer";
|
|
1159
1332
|
|
|
1160
1333
|
// src/marketing/Hero.tsx
|
|
1161
|
-
var
|
|
1162
|
-
var
|
|
1163
|
-
var
|
|
1164
|
-
var Hero = (0,
|
|
1334
|
+
var import_ui25 = require("@ship-it-ui/ui");
|
|
1335
|
+
var import_react22 = require("react");
|
|
1336
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1337
|
+
var Hero = (0, import_react22.forwardRef)(function Hero2({ eyebrow, title, description, actions, visual, className, ...props }, ref) {
|
|
1165
1338
|
const hasVisual = visual != null;
|
|
1166
|
-
return /* @__PURE__ */ (0,
|
|
1339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
1167
1340
|
"section",
|
|
1168
1341
|
{
|
|
1169
1342
|
ref,
|
|
1170
|
-
className: (0,
|
|
1343
|
+
className: (0, import_ui25.cn)(
|
|
1171
1344
|
"flex flex-col items-center justify-between gap-10 px-6 py-16 md:py-24",
|
|
1172
1345
|
hasVisual && "md:flex-row md:items-center md:gap-16",
|
|
1173
1346
|
className
|
|
1174
1347
|
),
|
|
1175
1348
|
...props,
|
|
1176
1349
|
children: [
|
|
1177
|
-
/* @__PURE__ */ (0,
|
|
1350
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: (0, import_ui25.cn)("max-w-[680px]", !hasVisual && "mx-auto text-center"), children: [
|
|
1178
1351
|
eyebrow,
|
|
1179
|
-
/* @__PURE__ */ (0,
|
|
1352
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1180
1353
|
"h1",
|
|
1181
1354
|
{
|
|
1182
|
-
className: (0,
|
|
1355
|
+
className: (0, import_ui25.cn)(
|
|
1183
1356
|
"mb-4 text-[44px] leading-[1.05] font-medium tracking-[-1.6px] md:text-[56px]",
|
|
1184
1357
|
eyebrow && "mt-5"
|
|
1185
1358
|
),
|
|
1186
1359
|
children: title
|
|
1187
1360
|
}
|
|
1188
1361
|
),
|
|
1189
|
-
description && /* @__PURE__ */ (0,
|
|
1190
|
-
actions && /* @__PURE__ */ (0,
|
|
1362
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-text-muted mb-7 text-[17px] leading-[1.6]", children: description }),
|
|
1363
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: (0, import_ui25.cn)("flex flex-wrap gap-2", !hasVisual && "justify-center"), children: actions })
|
|
1191
1364
|
] }),
|
|
1192
|
-
visual && /* @__PURE__ */ (0,
|
|
1365
|
+
visual && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex-1", children: visual })
|
|
1193
1366
|
]
|
|
1194
1367
|
}
|
|
1195
1368
|
);
|
|
@@ -1197,37 +1370,37 @@ var Hero = (0, import_react20.forwardRef)(function Hero2({ eyebrow, title, descr
|
|
|
1197
1370
|
Hero.displayName = "Hero";
|
|
1198
1371
|
|
|
1199
1372
|
// src/marketing/PricingCard.tsx
|
|
1200
|
-
var
|
|
1201
|
-
var
|
|
1202
|
-
var
|
|
1203
|
-
var PricingCard = (0,
|
|
1204
|
-
return /* @__PURE__ */ (0,
|
|
1373
|
+
var import_ui26 = require("@ship-it-ui/ui");
|
|
1374
|
+
var import_react23 = require("react");
|
|
1375
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1376
|
+
var PricingCard = (0, import_react23.forwardRef)(function PricingCard2({ tier, price, priceUnit, description, features, action, featured, className, ...props }, ref) {
|
|
1377
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
1205
1378
|
"div",
|
|
1206
1379
|
{
|
|
1207
1380
|
ref,
|
|
1208
|
-
className: (0,
|
|
1381
|
+
className: (0, import_ui26.cn)(
|
|
1209
1382
|
"bg-panel @container flex flex-col gap-5 rounded-lg border p-5 @sm:p-6",
|
|
1210
1383
|
featured ? "border-accent shadow-lg" : "border-border",
|
|
1211
1384
|
className
|
|
1212
1385
|
),
|
|
1213
1386
|
...props,
|
|
1214
1387
|
children: [
|
|
1215
|
-
/* @__PURE__ */ (0,
|
|
1216
|
-
/* @__PURE__ */ (0,
|
|
1217
|
-
/* @__PURE__ */ (0,
|
|
1218
|
-
featured && /* @__PURE__ */ (0,
|
|
1388
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
|
|
1389
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "mb-1 flex flex-wrap items-center gap-2", children: [
|
|
1390
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-[14px] font-medium", children: tier }),
|
|
1391
|
+
featured && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "bg-accent-dim text-accent rounded-full px-[6px] py-[1px] font-mono text-[10px]", children: "recommended" })
|
|
1219
1392
|
] }),
|
|
1220
|
-
description && /* @__PURE__ */ (0,
|
|
1393
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-text-muted text-[12px]", children: description })
|
|
1221
1394
|
] }),
|
|
1222
|
-
/* @__PURE__ */ (0,
|
|
1223
|
-
/* @__PURE__ */ (0,
|
|
1224
|
-
priceUnit != null && /* @__PURE__ */ (0,
|
|
1395
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex flex-wrap items-baseline justify-center gap-x-2 gap-y-1", children: [
|
|
1396
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "font-mono text-[22px] font-medium tracking-[-0.5px] text-balance @sm:text-[28px]", children: price }),
|
|
1397
|
+
priceUnit != null && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-text-dim text-[12px] whitespace-nowrap @sm:text-[13px]", children: priceUnit })
|
|
1225
1398
|
] }),
|
|
1226
|
-
/* @__PURE__ */ (0,
|
|
1227
|
-
/* @__PURE__ */ (0,
|
|
1228
|
-
/* @__PURE__ */ (0,
|
|
1399
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("ul", { className: "m-0 flex list-none flex-col gap-2 p-0", children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("li", { className: "flex items-start gap-2 text-[13px]", children: [
|
|
1400
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { "aria-hidden": true, className: "text-accent", children: "\u2713" }),
|
|
1401
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: f })
|
|
1229
1402
|
] }, i)) }),
|
|
1230
|
-
action && /* @__PURE__ */ (0,
|
|
1403
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "mt-auto", children: action })
|
|
1231
1404
|
]
|
|
1232
1405
|
}
|
|
1233
1406
|
);
|
|
@@ -1235,25 +1408,25 @@ var PricingCard = (0, import_react21.forwardRef)(function PricingCard2({ tier, p
|
|
|
1235
1408
|
PricingCard.displayName = "PricingCard";
|
|
1236
1409
|
|
|
1237
1410
|
// src/marketing/Testimonial.tsx
|
|
1238
|
-
var
|
|
1239
|
-
var
|
|
1240
|
-
var
|
|
1241
|
-
var
|
|
1242
|
-
var Testimonial = (0,
|
|
1243
|
-
return /* @__PURE__ */ (0,
|
|
1411
|
+
var import_ui27 = require("@ship-it-ui/ui");
|
|
1412
|
+
var import_ui28 = require("@ship-it-ui/ui");
|
|
1413
|
+
var import_react24 = require("react");
|
|
1414
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1415
|
+
var Testimonial = (0, import_react24.forwardRef)(function Testimonial2({ quote, author, role, avatar, className, ...props }, ref) {
|
|
1416
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
1244
1417
|
"figure",
|
|
1245
1418
|
{
|
|
1246
1419
|
ref,
|
|
1247
|
-
className: (0,
|
|
1420
|
+
className: (0, import_ui28.cn)("mx-auto max-w-[620px] px-6 py-10 text-center", className),
|
|
1248
1421
|
...props,
|
|
1249
1422
|
children: [
|
|
1250
|
-
/* @__PURE__ */ (0,
|
|
1251
|
-
/* @__PURE__ */ (0,
|
|
1252
|
-
/* @__PURE__ */ (0,
|
|
1253
|
-
typeof avatar === "string" ? /* @__PURE__ */ (0,
|
|
1254
|
-
/* @__PURE__ */ (0,
|
|
1255
|
-
/* @__PURE__ */ (0,
|
|
1256
|
-
role && /* @__PURE__ */ (0,
|
|
1423
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { "aria-hidden": true, className: "text-accent mb-4 text-[40px] leading-none", children: "\u201C" }),
|
|
1424
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("blockquote", { className: "m-0 text-[22px] leading-[1.45] font-medium tracking-[-0.3px]", children: quote }),
|
|
1425
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("figcaption", { className: "mt-5 flex items-center justify-center gap-[10px]", children: [
|
|
1426
|
+
typeof avatar === "string" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_ui27.Avatar, { size: "md", name: avatar }) : avatar,
|
|
1427
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "text-left", children: [
|
|
1428
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "text-[13px] font-medium", children: author }),
|
|
1429
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "text-text-dim text-[11px]", children: role })
|
|
1257
1430
|
] })
|
|
1258
1431
|
] })
|
|
1259
1432
|
]
|
|
@@ -1263,10 +1436,10 @@ var Testimonial = (0, import_react22.forwardRef)(function Testimonial2({ quote,
|
|
|
1263
1436
|
Testimonial.displayName = "Testimonial";
|
|
1264
1437
|
|
|
1265
1438
|
// src/data/ConnectorCard.tsx
|
|
1266
|
-
var
|
|
1267
|
-
var
|
|
1268
|
-
var
|
|
1269
|
-
var
|
|
1439
|
+
var import_icons6 = require("@ship-it-ui/icons");
|
|
1440
|
+
var import_ui29 = require("@ship-it-ui/ui");
|
|
1441
|
+
var import_react25 = require("react");
|
|
1442
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1270
1443
|
var statusDot = {
|
|
1271
1444
|
connected: "ok",
|
|
1272
1445
|
syncing: "sync",
|
|
@@ -1279,7 +1452,7 @@ var statusLabel = {
|
|
|
1279
1452
|
error: "Error",
|
|
1280
1453
|
disconnected: "Disconnected"
|
|
1281
1454
|
};
|
|
1282
|
-
var ConnectorCard = (0,
|
|
1455
|
+
var ConnectorCard = (0, import_react25.forwardRef)(function ConnectorCard2({
|
|
1283
1456
|
connector,
|
|
1284
1457
|
name,
|
|
1285
1458
|
status,
|
|
@@ -1293,21 +1466,21 @@ var ConnectorCard = (0, import_react23.forwardRef)(function ConnectorCard2({
|
|
|
1293
1466
|
...props
|
|
1294
1467
|
}, ref) {
|
|
1295
1468
|
const interactive = typeof onClick === "function";
|
|
1296
|
-
const time = lastSyncedAt ? (0,
|
|
1297
|
-
const labelBlock = /* @__PURE__ */ (0,
|
|
1298
|
-
/* @__PURE__ */ (0,
|
|
1469
|
+
const time = lastSyncedAt ? (0, import_ui29.formatRelative)(lastSyncedAt, relativeNow ?? /* @__PURE__ */ new Date()) : "";
|
|
1470
|
+
const labelBlock = /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
|
|
1471
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1299
1472
|
"span",
|
|
1300
1473
|
{
|
|
1301
1474
|
"aria-hidden": true,
|
|
1302
1475
|
className: "bg-panel-2 grid h-10 w-10 shrink-0 place-items-center rounded-md font-mono text-[16px]",
|
|
1303
|
-
children: /* @__PURE__ */ (0,
|
|
1476
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_icons6.DynamicIconGlyph, { name: connector, kind: "connector" })
|
|
1304
1477
|
}
|
|
1305
1478
|
),
|
|
1306
|
-
/* @__PURE__ */ (0,
|
|
1307
|
-
/* @__PURE__ */ (0,
|
|
1308
|
-
/* @__PURE__ */ (0,
|
|
1309
|
-
/* @__PURE__ */ (0,
|
|
1310
|
-
|
|
1479
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1480
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
1481
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "truncate text-[14px] font-medium", children: name }),
|
|
1482
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1483
|
+
import_ui29.StatusDot,
|
|
1311
1484
|
{
|
|
1312
1485
|
state: statusDot[status],
|
|
1313
1486
|
pulse: status === "syncing",
|
|
@@ -1315,21 +1488,21 @@ var ConnectorCard = (0, import_react23.forwardRef)(function ConnectorCard2({
|
|
|
1315
1488
|
}
|
|
1316
1489
|
)
|
|
1317
1490
|
] }),
|
|
1318
|
-
(summary || time) && /* @__PURE__ */ (0,
|
|
1319
|
-
summary && /* @__PURE__ */ (0,
|
|
1320
|
-
summary && time && /* @__PURE__ */ (0,
|
|
1321
|
-
time && /* @__PURE__ */ (0,
|
|
1491
|
+
(summary || time) && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "text-text-muted mt-[2px] flex items-center gap-2 text-[12px]", children: [
|
|
1492
|
+
summary && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "truncate", children: summary }),
|
|
1493
|
+
summary && time && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { "aria-hidden": true, className: "text-text-dim", children: "\xB7" }),
|
|
1494
|
+
time && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("time", { className: "text-text-dim font-mono text-[11px]", children: [
|
|
1322
1495
|
"last synced ",
|
|
1323
1496
|
time
|
|
1324
1497
|
] })
|
|
1325
1498
|
] })
|
|
1326
1499
|
] })
|
|
1327
1500
|
] });
|
|
1328
|
-
const labelRegionClass = (0,
|
|
1501
|
+
const labelRegionClass = (0, import_ui29.cn)(
|
|
1329
1502
|
"flex flex-1 items-start gap-3 rounded-md p-1 text-left transition-colors duration-(--duration-micro)",
|
|
1330
1503
|
interactive && "hover:bg-panel-2 focus-visible:ring-accent-dim cursor-pointer outline-none focus-visible:ring-[3px]"
|
|
1331
1504
|
);
|
|
1332
|
-
const labelRegion = interactive ? /* @__PURE__ */ (0,
|
|
1505
|
+
const labelRegion = interactive ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1333
1506
|
"button",
|
|
1334
1507
|
{
|
|
1335
1508
|
type: "button",
|
|
@@ -1338,19 +1511,19 @@ var ConnectorCard = (0, import_react23.forwardRef)(function ConnectorCard2({
|
|
|
1338
1511
|
className: labelRegionClass,
|
|
1339
1512
|
children: labelBlock
|
|
1340
1513
|
}
|
|
1341
|
-
) : /* @__PURE__ */ (0,
|
|
1342
|
-
return /* @__PURE__ */ (0,
|
|
1514
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: labelRegionClass, children: labelBlock });
|
|
1515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
1343
1516
|
"div",
|
|
1344
1517
|
{
|
|
1345
1518
|
ref,
|
|
1346
|
-
className: (0,
|
|
1519
|
+
className: (0, import_ui29.cn)(
|
|
1347
1520
|
"rounded-base border-border bg-panel flex items-start gap-2 border p-3",
|
|
1348
1521
|
className
|
|
1349
1522
|
),
|
|
1350
1523
|
...props,
|
|
1351
1524
|
children: [
|
|
1352
1525
|
labelRegion,
|
|
1353
|
-
actions && /* @__PURE__ */ (0,
|
|
1526
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "shrink-0 self-center pr-1", children: actions })
|
|
1354
1527
|
]
|
|
1355
1528
|
}
|
|
1356
1529
|
);
|
|
@@ -1358,12 +1531,13 @@ var ConnectorCard = (0, import_react23.forwardRef)(function ConnectorCard2({
|
|
|
1358
1531
|
ConnectorCard.displayName = "ConnectorCard";
|
|
1359
1532
|
|
|
1360
1533
|
// src/data/EntityTable.tsx
|
|
1361
|
-
var
|
|
1362
|
-
var
|
|
1363
|
-
var
|
|
1534
|
+
var import_icons7 = require("@ship-it-ui/icons");
|
|
1535
|
+
var import_ui30 = require("@ship-it-ui/ui");
|
|
1536
|
+
var import_react26 = require("react");
|
|
1537
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1364
1538
|
function EntityTable(props) {
|
|
1365
1539
|
const { rowKey, ...rest } = props;
|
|
1366
|
-
return /* @__PURE__ */ (0,
|
|
1540
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_ui30.DataTable, { ...rest, rowKey: rowKey ?? ((row) => row.id) });
|
|
1367
1541
|
}
|
|
1368
1542
|
function entityColumn(options = {}) {
|
|
1369
1543
|
return {
|
|
@@ -1372,8 +1546,8 @@ function entityColumn(options = {}) {
|
|
|
1372
1546
|
accessor: (row) => row.name,
|
|
1373
1547
|
cell: (row) => {
|
|
1374
1548
|
const meta = getEntityTypeMeta(row.type);
|
|
1375
|
-
return /* @__PURE__ */ (0,
|
|
1376
|
-
/* @__PURE__ */ (0,
|
|
1549
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "flex items-center gap-2 font-mono", "data-entity-type": row.type, children: [
|
|
1550
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_icons7.DynamicIconGlyph, { name: meta.iconName, size: 14, className: meta.toneClass }),
|
|
1377
1551
|
row.name
|
|
1378
1552
|
] });
|
|
1379
1553
|
}
|
|
@@ -1384,21 +1558,21 @@ function entityTypeColumn(options = {}) {
|
|
|
1384
1558
|
key: options.key ?? "type",
|
|
1385
1559
|
header: options.header ?? "Type",
|
|
1386
1560
|
accessor: (row) => row.type,
|
|
1387
|
-
cell: (row) => /* @__PURE__ */ (0,
|
|
1561
|
+
cell: (row) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(EntityBadge, { type: row.type, size: "sm" })
|
|
1388
1562
|
};
|
|
1389
1563
|
}
|
|
1390
1564
|
|
|
1391
1565
|
// src/notifications/NotifRow.tsx
|
|
1392
|
-
var
|
|
1393
|
-
var
|
|
1394
|
-
var
|
|
1566
|
+
var import_ui31 = require("@ship-it-ui/ui");
|
|
1567
|
+
var import_react27 = require("react");
|
|
1568
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1395
1569
|
var toneClass = {
|
|
1396
1570
|
ok: "bg-ok",
|
|
1397
1571
|
warn: "bg-warn",
|
|
1398
1572
|
err: "bg-err",
|
|
1399
1573
|
neutral: "bg-accent-text"
|
|
1400
1574
|
};
|
|
1401
|
-
var NotifRow = (0,
|
|
1575
|
+
var NotifRow = (0, import_react27.forwardRef)(function NotifRow2({
|
|
1402
1576
|
title,
|
|
1403
1577
|
body,
|
|
1404
1578
|
time,
|
|
@@ -1411,22 +1585,22 @@ var NotifRow = (0, import_react25.forwardRef)(function NotifRow2({
|
|
|
1411
1585
|
onClick,
|
|
1412
1586
|
...props
|
|
1413
1587
|
}, ref) {
|
|
1414
|
-
const content = /* @__PURE__ */ (0,
|
|
1415
|
-
/* @__PURE__ */ (0,
|
|
1588
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
1589
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "pt-1", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1416
1590
|
"div",
|
|
1417
1591
|
{
|
|
1418
|
-
className: (0,
|
|
1592
|
+
className: (0, import_ui31.cn)("h-2 w-2 rounded-full", unread ? toneClass[tone] : "bg-border-strong")
|
|
1419
1593
|
}
|
|
1420
1594
|
) }),
|
|
1421
|
-
/* @__PURE__ */ (0,
|
|
1422
|
-
/* @__PURE__ */ (0,
|
|
1423
|
-
/* @__PURE__ */ (0,
|
|
1424
|
-
time != null && /* @__PURE__ */ (0,
|
|
1595
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1596
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
1597
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "truncate text-[14px] font-medium tracking-tight", children: title }),
|
|
1598
|
+
time != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-text-muted shrink-0 font-mono text-[11px] whitespace-nowrap", children: time })
|
|
1425
1599
|
] }),
|
|
1426
|
-
body && /* @__PURE__ */ (0,
|
|
1600
|
+
body && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-text-muted mt-[3px] text-[13px] leading-tight", children: body })
|
|
1427
1601
|
] })
|
|
1428
1602
|
] });
|
|
1429
|
-
const baseClass = (0,
|
|
1603
|
+
const baseClass = (0, import_ui31.cn)(
|
|
1430
1604
|
"flex gap-3 p-[14px] bg-panel border-border border-l border-r",
|
|
1431
1605
|
isFirst ? "border-t rounded-t-m-card" : "",
|
|
1432
1606
|
"border-b",
|
|
@@ -1435,13 +1609,13 @@ var NotifRow = (0, import_react25.forwardRef)(function NotifRow2({
|
|
|
1435
1609
|
className
|
|
1436
1610
|
);
|
|
1437
1611
|
if (href) {
|
|
1438
|
-
return /* @__PURE__ */ (0,
|
|
1612
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1439
1613
|
"a",
|
|
1440
1614
|
{
|
|
1441
1615
|
ref,
|
|
1442
1616
|
href,
|
|
1443
1617
|
onClick,
|
|
1444
|
-
className: (0,
|
|
1618
|
+
className: (0, import_ui31.cn)(
|
|
1445
1619
|
baseClass,
|
|
1446
1620
|
"text-text focus-visible:ring-accent-dim no-underline outline-none focus-visible:ring-[3px]"
|
|
1447
1621
|
),
|
|
@@ -1451,13 +1625,13 @@ var NotifRow = (0, import_react25.forwardRef)(function NotifRow2({
|
|
|
1451
1625
|
);
|
|
1452
1626
|
}
|
|
1453
1627
|
if (onClick) {
|
|
1454
|
-
return /* @__PURE__ */ (0,
|
|
1628
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1455
1629
|
"button",
|
|
1456
1630
|
{
|
|
1457
1631
|
type: "button",
|
|
1458
1632
|
ref,
|
|
1459
1633
|
onClick,
|
|
1460
|
-
className: (0,
|
|
1634
|
+
className: (0, import_ui31.cn)(
|
|
1461
1635
|
baseClass,
|
|
1462
1636
|
"focus-visible:ring-accent-dim text-left outline-none focus-visible:ring-[3px]"
|
|
1463
1637
|
),
|
|
@@ -1466,7 +1640,7 @@ var NotifRow = (0, import_react25.forwardRef)(function NotifRow2({
|
|
|
1466
1640
|
}
|
|
1467
1641
|
);
|
|
1468
1642
|
}
|
|
1469
|
-
return /* @__PURE__ */ (0,
|
|
1643
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { ref, className: baseClass, ...props, children: content });
|
|
1470
1644
|
});
|
|
1471
1645
|
NotifRow.displayName = "NotifRow";
|
|
1472
1646
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1477,12 +1651,12 @@ NotifRow.displayName = "NotifRow";
|
|
|
1477
1651
|
ConfidenceIndicator,
|
|
1478
1652
|
ConnectorCard,
|
|
1479
1653
|
CopilotMessage,
|
|
1480
|
-
ENTITY_GLYPH,
|
|
1481
1654
|
ENTITY_LABEL,
|
|
1482
1655
|
ENTITY_TONE_BG,
|
|
1483
1656
|
ENTITY_TONE_CLASS,
|
|
1484
1657
|
EntityBadge,
|
|
1485
1658
|
EntityCard,
|
|
1659
|
+
EntityList,
|
|
1486
1660
|
EntityListRow,
|
|
1487
1661
|
EntityListRowButton,
|
|
1488
1662
|
EntityListRowDiv,
|
|
@@ -1500,12 +1674,14 @@ NotifRow.displayName = "NotifRow";
|
|
|
1500
1674
|
PricingCard,
|
|
1501
1675
|
ReasoningBlock,
|
|
1502
1676
|
ReasoningStep,
|
|
1677
|
+
StalenessChip,
|
|
1503
1678
|
SuggestionChip,
|
|
1504
1679
|
Testimonial,
|
|
1505
1680
|
ToolCallCard,
|
|
1506
1681
|
cn,
|
|
1507
1682
|
entityColumn,
|
|
1508
1683
|
entityTypeColumn,
|
|
1684
|
+
formatAge,
|
|
1509
1685
|
getEntityTypeMeta,
|
|
1510
1686
|
listEntityTypes,
|
|
1511
1687
|
registerEntityType,
|