@ship-it-ui/shipit 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -26,6 +26,7 @@ __export(index_exports, {
26
26
  CTAStrip: () => CTAStrip,
27
27
  Citation: () => Citation,
28
28
  ConfidenceIndicator: () => ConfidenceIndicator,
29
+ ConnectorCard: () => ConnectorCard,
29
30
  CopilotMessage: () => CopilotMessage,
30
31
  ENTITY_GLYPH: () => ENTITY_GLYPH,
31
32
  ENTITY_LABEL: () => ENTITY_LABEL,
@@ -36,6 +37,7 @@ __export(index_exports, {
36
37
  EntityListRow: () => EntityListRow,
37
38
  EntityListRowButton: () => EntityListRowButton,
38
39
  EntityListRowDiv: () => EntityListRowDiv,
40
+ EntityTable: () => EntityTable,
39
41
  FeatureGrid: () => FeatureGrid,
40
42
  Footer: () => Footer,
41
43
  GraphEdge: () => GraphEdge,
@@ -51,15 +53,22 @@ __export(index_exports, {
51
53
  SuggestionChip: () => SuggestionChip,
52
54
  Testimonial: () => Testimonial,
53
55
  ToolCallCard: () => ToolCallCard,
54
- cn: () => import_ui27.cn
56
+ cn: () => import_ui29.cn,
57
+ entityColumn: () => entityColumn,
58
+ entityTypeColumn: () => entityTypeColumn,
59
+ getEntityTypeMeta: () => getEntityTypeMeta,
60
+ listEntityTypes: () => listEntityTypes,
61
+ registerEntityType: () => registerEntityType,
62
+ registerEntityTypes: () => registerEntityTypes,
63
+ resetEntityTypeRegistry: () => resetEntityTypeRegistry
55
64
  });
56
65
  module.exports = __toCommonJS(index_exports);
57
- var import_ui27 = require("@ship-it-ui/ui");
66
+ var import_ui29 = require("@ship-it-ui/ui");
58
67
 
59
68
  // src/ai/AskBar.tsx
60
69
  var import_ui = require("@ship-it-ui/ui");
61
- var import_react = require("react");
62
70
  var import_ui2 = require("@ship-it-ui/ui");
71
+ var import_react = require("react");
63
72
  var import_jsx_runtime = require("react/jsx-runtime");
64
73
  var AskBar = (0, import_react.forwardRef)(function AskBar2({
65
74
  value: valueProp,
@@ -159,8 +168,8 @@ var AskBar = (0, import_react.forwardRef)(function AskBar2({
159
168
  AskBar.displayName = "AskBar";
160
169
 
161
170
  // src/ai/Citation.tsx
162
- var import_react2 = require("react");
163
171
  var import_ui3 = require("@ship-it-ui/ui");
172
+ var import_react2 = require("react");
164
173
  var import_jsx_runtime2 = require("react/jsx-runtime");
165
174
  var SUPERSCRIPTS = ["\u2070", "\xB9", "\xB2", "\xB3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"];
166
175
  function toSuperscript(n) {
@@ -201,8 +210,8 @@ var Citation = (0, import_react2.forwardRef)(function Citation2({ index, source,
201
210
  Citation.displayName = "Citation";
202
211
 
203
212
  // src/ai/ConfidenceIndicator.tsx
204
- var import_react3 = require("react");
205
213
  var import_ui4 = require("@ship-it-ui/ui");
214
+ var import_react3 = require("react");
206
215
  var import_jsx_runtime3 = require("react/jsx-runtime");
207
216
  var tierLabel = {
208
217
  high: "High",
@@ -270,8 +279,8 @@ ConfidenceIndicator.displayName = "ConfidenceIndicator";
270
279
 
271
280
  // src/ai/CopilotMessage.tsx
272
281
  var import_ui5 = require("@ship-it-ui/ui");
273
- var import_react4 = require("react");
274
282
  var import_ui6 = require("@ship-it-ui/ui");
283
+ var import_react4 = require("react");
275
284
  var import_jsx_runtime4 = require("react/jsx-runtime");
276
285
  var CopilotMessage = (0, import_react4.forwardRef)(
277
286
  function CopilotMessage2({ role, avatar, streaming, className, children, ...props }, ref) {
@@ -320,8 +329,8 @@ CopilotMessage.displayName = "CopilotMessage";
320
329
 
321
330
  // src/ai/ReasoningBlock.tsx
322
331
  var import_ui7 = require("@ship-it-ui/ui");
323
- var import_react5 = require("react");
324
332
  var import_ui8 = require("@ship-it-ui/ui");
333
+ var import_react5 = require("react");
325
334
  var import_jsx_runtime5 = require("react/jsx-runtime");
326
335
  var ReasoningBlock = (0, import_react5.forwardRef)(
327
336
  function ReasoningBlock2({
@@ -382,8 +391,8 @@ var ReasoningStep = (0, import_react5.forwardRef)(function ReasoningStep2({ step
382
391
  ReasoningStep.displayName = "ReasoningStep";
383
392
 
384
393
  // src/ai/SuggestionChip.tsx
385
- var import_react6 = require("react");
386
394
  var import_ui9 = require("@ship-it-ui/ui");
395
+ var import_react6 = require("react");
387
396
  var import_jsx_runtime6 = require("react/jsx-runtime");
388
397
  var SuggestionChip = (0, import_react6.forwardRef)(
389
398
  function SuggestionChip2({ glyph = "\u2726", className, children, type, ...props }, ref) {
@@ -412,8 +421,8 @@ SuggestionChip.displayName = "SuggestionChip";
412
421
 
413
422
  // src/ai/ToolCallCard.tsx
414
423
  var import_ui10 = require("@ship-it-ui/ui");
415
- var import_react7 = require("react");
416
424
  var import_ui11 = require("@ship-it-ui/ui");
425
+ var import_react7 = require("react");
417
426
  var import_jsx_runtime7 = require("react/jsx-runtime");
418
427
  var ToolCallCard = (0, import_react7.forwardRef)(function ToolCallCard2({ name, status, running, className, children, ...props }, ref) {
419
428
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
@@ -446,64 +455,140 @@ ToolCallCard.displayName = "ToolCallCard";
446
455
 
447
456
  // src/entity/EntityBadge.tsx
448
457
  var import_ui12 = require("@ship-it-ui/ui");
449
- var import_react8 = require("react");
450
458
  var import_ui13 = require("@ship-it-ui/ui");
459
+ var import_react8 = require("react");
451
460
 
452
461
  // src/entity/types.ts
462
+ var BUILTIN_META = {
463
+ service: {
464
+ glyph: "\u25C7",
465
+ label: "Service",
466
+ toneClass: "text-accent",
467
+ toneBg: "bg-accent-dim",
468
+ colorVar: "var(--color-accent)",
469
+ badgeVariant: "accent"
470
+ },
471
+ person: {
472
+ glyph: "\u25CB",
473
+ label: "Person",
474
+ toneClass: "text-text-muted",
475
+ toneBg: "bg-panel-2",
476
+ colorVar: "var(--color-purple)",
477
+ badgeVariant: "neutral"
478
+ },
479
+ document: {
480
+ glyph: "\u25A4",
481
+ label: "Document",
482
+ toneClass: "text-purple",
483
+ toneBg: "bg-[color-mix(in_oklab,var(--color-purple),transparent_85%)]",
484
+ colorVar: "var(--color-pink)",
485
+ badgeVariant: "purple"
486
+ },
487
+ deployment: {
488
+ glyph: "\u2191",
489
+ label: "Deployment",
490
+ toneClass: "text-ok",
491
+ toneBg: "bg-[color-mix(in_oklab,var(--color-ok),transparent_85%)]",
492
+ colorVar: "var(--color-ok)",
493
+ badgeVariant: "ok"
494
+ },
495
+ incident: {
496
+ glyph: "\u25CE",
497
+ label: "Incident",
498
+ toneClass: "text-err",
499
+ toneBg: "bg-[color-mix(in_oklab,var(--color-err),transparent_85%)]",
500
+ colorVar: "var(--color-warn)",
501
+ badgeVariant: "err"
502
+ },
503
+ ticket: {
504
+ glyph: "\u25A2",
505
+ label: "Ticket",
506
+ toneClass: "text-warn",
507
+ toneBg: "bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)]",
508
+ colorVar: "var(--color-text-muted)",
509
+ badgeVariant: "warn"
510
+ }
511
+ };
512
+ var FALLBACK = BUILTIN_META.service;
513
+ var registry = new Map(Object.entries(BUILTIN_META));
514
+ function registerEntityType(type, meta) {
515
+ registry.set(type, meta);
516
+ return meta;
517
+ }
518
+ function registerEntityTypes(map) {
519
+ for (const [key, meta] of Object.entries(map)) {
520
+ registry.set(key, meta);
521
+ }
522
+ }
523
+ function getEntityTypeMeta(type) {
524
+ return registry.get(type) ?? FALLBACK;
525
+ }
526
+ function listEntityTypes() {
527
+ return Array.from(registry.entries());
528
+ }
529
+ function resetEntityTypeRegistry() {
530
+ registry.clear();
531
+ for (const key of Object.keys(BUILTIN_META)) {
532
+ registry.set(key, BUILTIN_META[key]);
533
+ }
534
+ }
453
535
  var ENTITY_GLYPH = {
454
- service: "\u25C7",
455
- person: "\u25CB",
456
- document: "\u25A4",
457
- deployment: "\u2191",
458
- incident: "\u25CE",
459
- ticket: "\u25A2"
536
+ service: BUILTIN_META.service.glyph,
537
+ person: BUILTIN_META.person.glyph,
538
+ document: BUILTIN_META.document.glyph,
539
+ deployment: BUILTIN_META.deployment.glyph,
540
+ incident: BUILTIN_META.incident.glyph,
541
+ ticket: BUILTIN_META.ticket.glyph
460
542
  };
461
543
  var ENTITY_LABEL = {
462
- service: "Service",
463
- person: "Person",
464
- document: "Document",
465
- deployment: "Deployment",
466
- incident: "Incident",
467
- ticket: "Ticket"
544
+ service: BUILTIN_META.service.label,
545
+ person: BUILTIN_META.person.label,
546
+ document: BUILTIN_META.document.label,
547
+ deployment: BUILTIN_META.deployment.label,
548
+ incident: BUILTIN_META.incident.label,
549
+ ticket: BUILTIN_META.ticket.label
468
550
  };
469
551
  var ENTITY_TONE_CLASS = {
470
- service: "text-accent",
471
- person: "text-text-muted",
472
- document: "text-purple",
473
- deployment: "text-ok",
474
- incident: "text-err",
475
- ticket: "text-warn"
552
+ service: BUILTIN_META.service.toneClass,
553
+ person: BUILTIN_META.person.toneClass,
554
+ document: BUILTIN_META.document.toneClass,
555
+ deployment: BUILTIN_META.deployment.toneClass,
556
+ incident: BUILTIN_META.incident.toneClass,
557
+ ticket: BUILTIN_META.ticket.toneClass
476
558
  };
477
559
  var ENTITY_TONE_BG = {
478
- service: "bg-accent-dim",
479
- person: "bg-panel-2",
480
- document: "bg-[color-mix(in_oklab,var(--color-purple),transparent_85%)]",
481
- deployment: "bg-[color-mix(in_oklab,var(--color-ok),transparent_85%)]",
482
- incident: "bg-[color-mix(in_oklab,var(--color-err),transparent_85%)]",
483
- ticket: "bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)]"
560
+ service: BUILTIN_META.service.toneBg,
561
+ person: BUILTIN_META.person.toneBg,
562
+ document: BUILTIN_META.document.toneBg,
563
+ deployment: BUILTIN_META.deployment.toneBg,
564
+ incident: BUILTIN_META.incident.toneBg,
565
+ ticket: BUILTIN_META.ticket.toneBg
484
566
  };
485
567
 
486
568
  // src/entity/EntityBadge.tsx
487
569
  var import_jsx_runtime8 = require("react/jsx-runtime");
488
- var typeVariant = {
489
- service: "accent",
490
- person: "neutral",
491
- document: "purple",
492
- deployment: "ok",
493
- incident: "err",
494
- ticket: "warn"
495
- };
496
570
  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] }),
499
- children ?? label ?? ENTITY_LABEL[type]
500
- ] });
571
+ const meta = getEntityTypeMeta(type);
572
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
573
+ import_ui12.Badge,
574
+ {
575
+ ref,
576
+ variant: meta.badgeVariant,
577
+ "data-entity-type": type,
578
+ className: (0, import_ui13.cn)(className),
579
+ ...props,
580
+ children: [
581
+ !hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "aria-hidden": true, className: "font-mono", children: meta.glyph }),
582
+ children ?? label ?? meta.label
583
+ ]
584
+ }
585
+ );
501
586
  });
502
587
  EntityBadge.displayName = "EntityBadge";
503
588
 
504
589
  // src/entity/EntityCard.tsx
505
- var import_react9 = require("react");
506
590
  var import_ui14 = require("@ship-it-ui/ui");
591
+ var import_react9 = require("react");
507
592
  var import_jsx_runtime9 = require("react/jsx-runtime");
508
593
  var statToneClass = {
509
594
  accent: "text-accent",
@@ -513,10 +598,12 @@ var statToneClass = {
513
598
  muted: "text-text-muted"
514
599
  };
515
600
  var EntityCard = (0, import_react9.forwardRef)(function EntityCard2({ type, title, subtitle, description, stats, actions, glyph, className, ...props }, ref) {
601
+ const meta = getEntityTypeMeta(type);
516
602
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
517
603
  "div",
518
604
  {
519
605
  ref,
606
+ "data-entity-type": type,
520
607
  className: (0, import_ui14.cn)(
521
608
  "rounded-base border-border bg-panel flex flex-col gap-3 border p-5",
522
609
  className
@@ -530,10 +617,10 @@ var EntityCard = (0, import_react9.forwardRef)(function EntityCard2({ type, titl
530
617
  "aria-hidden": true,
531
618
  className: (0, import_ui14.cn)(
532
619
  "rounded-base grid h-12 w-12 shrink-0 place-items-center text-[20px]",
533
- ENTITY_TONE_BG[type],
534
- ENTITY_TONE_CLASS[type]
620
+ meta.toneBg,
621
+ meta.toneClass
535
622
  ),
536
- children: glyph ?? ENTITY_GLYPH[type]
623
+ children: glyph ?? meta.glyph
537
624
  }
538
625
  ),
539
626
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "min-w-0 flex-1", children: [
@@ -573,8 +660,8 @@ var EntityCard = (0, import_react9.forwardRef)(function EntityCard2({ type, titl
573
660
  EntityCard.displayName = "EntityCard";
574
661
 
575
662
  // src/entity/EntityListRow.tsx
576
- var import_react10 = require("react");
577
663
  var import_ui15 = require("@ship-it-ui/ui");
664
+ var import_react10 = require("react");
578
665
  var import_jsx_runtime10 = require("react/jsx-runtime");
579
666
  var baseClassNames = (interactive, className) => (0, import_ui15.cn)(
580
667
  "flex w-full items-center gap-3 border-0 bg-transparent px-2 py-2 text-left",
@@ -589,15 +676,9 @@ function RowInner({
589
676
  meta,
590
677
  hideGlyph
591
678
  }) {
679
+ const typeMeta = getEntityTypeMeta(type);
592
680
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
593
- !hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
594
- "span",
595
- {
596
- "aria-hidden": true,
597
- className: (0, import_ui15.cn)("font-mono text-[14px] leading-none", ENTITY_TONE_CLASS[type]),
598
- children: ENTITY_GLYPH[type]
599
- }
600
- ),
681
+ !hideGlyph && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "aria-hidden": true, className: (0, import_ui15.cn)("font-mono text-[14px] leading-none", typeMeta.toneClass), children: typeMeta.glyph }),
601
682
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-text min-w-0 flex-1 truncate font-mono text-[12px]", children: name }),
602
683
  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
684
  meta && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: meta })
@@ -605,7 +686,16 @@ function RowInner({
605
686
  }
606
687
  var EntityListRowDiv = (0, import_react10.forwardRef)(
607
688
  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 }) });
689
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
690
+ "div",
691
+ {
692
+ ref,
693
+ "data-entity-type": type,
694
+ className: baseClassNames(false, className),
695
+ ...props,
696
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(RowInner, { type, name, relation, meta, hideGlyph })
697
+ }
698
+ );
609
699
  }
610
700
  );
611
701
  EntityListRowDiv.displayName = "EntityListRowDiv";
@@ -616,6 +706,7 @@ var EntityListRowButton = (0, import_react10.forwardRef)(
616
706
  {
617
707
  ref,
618
708
  type: "button",
709
+ "data-entity-type": type,
619
710
  onClick,
620
711
  className: baseClassNames(true, className),
621
712
  ...props,
@@ -701,8 +792,8 @@ var GraphEdge = (0, import_react11.forwardRef)(function GraphEdge2({ x1, y1, x2,
701
792
  GraphEdge.displayName = "GraphEdge";
702
793
 
703
794
  // src/graph/GraphInspector.tsx
704
- var import_react12 = require("react");
705
795
  var import_ui16 = require("@ship-it-ui/ui");
796
+ var import_react12 = require("react");
706
797
  var import_jsx_runtime12 = require("react/jsx-runtime");
707
798
  var GraphInspector = (0, import_react12.forwardRef)(
708
799
  function GraphInspector2({
@@ -768,21 +859,13 @@ var GraphInspector = (0, import_react12.forwardRef)(
768
859
  GraphInspector.displayName = "GraphInspector";
769
860
 
770
861
  // src/graph/GraphLegend.tsx
771
- var import_react13 = require("react");
772
862
  var import_ui17 = require("@ship-it-ui/ui");
863
+ var import_react13 = require("react");
773
864
  var import_jsx_runtime13 = require("react/jsx-runtime");
774
- var typeColorVar = {
775
- service: "var(--color-accent)",
776
- person: "var(--color-purple)",
777
- document: "var(--color-pink)",
778
- deployment: "var(--color-ok)",
779
- incident: "var(--color-warn)",
780
- ticket: "var(--color-text-muted)"
781
- };
782
865
  var DEFAULT_ENTRIES = [
783
- { type: "service", label: ENTITY_LABEL.service },
784
- { type: "person", label: ENTITY_LABEL.person },
785
- { type: "document", label: ENTITY_LABEL.document }
866
+ { type: "service" },
867
+ { type: "person" },
868
+ { type: "document" }
786
869
  ];
787
870
  var GraphLegend = (0, import_react13.forwardRef)(function GraphLegend2({ entries = DEFAULT_ENTRIES, heading = "Legend", className, children, ...props }, ref) {
788
871
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
@@ -797,10 +880,12 @@ var GraphLegend = (0, import_react13.forwardRef)(function GraphLegend2({ entries
797
880
  children: [
798
881
  heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase", children: heading }),
799
882
  children ?? entries.map((entry, i) => {
800
- const color = entry.color ?? (entry.type ? typeColorVar[entry.type] : "currentColor");
883
+ const meta = entry.type ? getEntityTypeMeta(entry.type) : void 0;
884
+ const color = entry.color ?? meta?.colorVar ?? "currentColor";
885
+ const label = entry.label ?? meta?.label ?? "";
801
886
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-[6px]", children: [
802
887
  /* @__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 })
888
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: label })
804
889
  ] }, i);
805
890
  })
806
891
  ]
@@ -810,8 +895,8 @@ var GraphLegend = (0, import_react13.forwardRef)(function GraphLegend2({ entries
810
895
  GraphLegend.displayName = "GraphLegend";
811
896
 
812
897
  // src/graph/GraphMinimap.tsx
813
- var import_react14 = require("react");
814
898
  var import_ui18 = require("@ship-it-ui/ui");
899
+ var import_react14 = require("react");
815
900
  var import_jsx_runtime14 = require("react/jsx-runtime");
816
901
  var GraphMinimap = (0, import_react14.forwardRef)(function GraphMinimap2({ points, viewport, width = 120, height = 72, className, ...props }, ref) {
817
902
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
@@ -862,19 +947,12 @@ var GraphMinimap = (0, import_react14.forwardRef)(function GraphMinimap2({ point
862
947
  GraphMinimap.displayName = "GraphMinimap";
863
948
 
864
949
  // src/graph/GraphNode.tsx
865
- var import_react15 = require("react");
866
950
  var import_ui19 = require("@ship-it-ui/ui");
951
+ var import_react15 = require("react");
867
952
  var import_jsx_runtime15 = require("react/jsx-runtime");
868
- var typeColorVar2 = {
869
- service: "var(--color-accent)",
870
- person: "var(--color-purple)",
871
- document: "var(--color-pink)",
872
- deployment: "var(--color-ok)",
873
- incident: "var(--color-warn)",
874
- ticket: "var(--color-text-muted)"
875
- };
876
953
  var GraphNode = (0, import_react15.forwardRef)(function GraphNode2({ type, state = "default", glyph, label, size = 52, pathColor, className, style, ...props }, ref) {
877
- const color = state === "path" ? pathColor ?? "var(--color-purple)" : typeColorVar2[type];
954
+ const meta = getEntityTypeMeta(type);
955
+ const color = state === "path" ? pathColor ?? "var(--color-purple)" : meta.colorVar;
878
956
  const glowPct = state === "hover" ? 50 : 25;
879
957
  const opacity = state === "dim" ? 0.35 : 1;
880
958
  const showRing = state === "selected" || state === "path";
@@ -905,7 +983,7 @@ var GraphNode = (0, import_react15.forwardRef)(function GraphNode2({ type, state
905
983
  outlineOffset: showRing ? 4 : void 0,
906
984
  opacity
907
985
  },
908
- children: glyph ?? ENTITY_GLYPH[type]
986
+ children: glyph ?? meta.glyph
909
987
  }
910
988
  ),
911
989
  label && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: label })
@@ -950,8 +1028,8 @@ var PathOverlay = (0, import_react16.forwardRef)(function PathOverlay2({ points,
950
1028
  PathOverlay.displayName = "PathOverlay";
951
1029
 
952
1030
  // src/marketing/CTAStrip.tsx
953
- var import_react17 = require("react");
954
1031
  var import_ui20 = require("@ship-it-ui/ui");
1032
+ var import_react17 = require("react");
955
1033
  var import_jsx_runtime17 = require("react/jsx-runtime");
956
1034
  var CTAStrip = (0, import_react17.forwardRef)(function CTAStrip2({ title, description, actions, className, ...props }, ref) {
957
1035
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
@@ -975,8 +1053,8 @@ var CTAStrip = (0, import_react17.forwardRef)(function CTAStrip2({ title, descri
975
1053
  CTAStrip.displayName = "CTAStrip";
976
1054
 
977
1055
  // src/marketing/FeatureGrid.tsx
978
- var import_react18 = require("react");
979
1056
  var import_ui21 = require("@ship-it-ui/ui");
1057
+ var import_react18 = require("react");
980
1058
  var import_jsx_runtime18 = require("react/jsx-runtime");
981
1059
  var colsClass = {
982
1060
  2: "md:grid-cols-2",
@@ -1001,8 +1079,8 @@ var FeatureGrid = (0, import_react18.forwardRef)(function FeatureGrid2({ feature
1001
1079
  FeatureGrid.displayName = "FeatureGrid";
1002
1080
 
1003
1081
  // src/marketing/Footer.tsx
1004
- var import_react19 = require("react");
1005
1082
  var import_ui22 = require("@ship-it-ui/ui");
1083
+ var import_react19 = require("react");
1006
1084
  var import_jsx_runtime19 = require("react/jsx-runtime");
1007
1085
  var Footer = (0, import_react19.forwardRef)(function Footer2({ brand, columns, copyright, closing, className, ...props }, ref) {
1008
1086
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("footer", { ref, className: (0, import_ui22.cn)("px-7 py-7", className), ...props, children: [
@@ -1030,8 +1108,8 @@ var Footer = (0, import_react19.forwardRef)(function Footer2({ brand, columns, c
1030
1108
  Footer.displayName = "Footer";
1031
1109
 
1032
1110
  // src/marketing/Hero.tsx
1033
- var import_react20 = require("react");
1034
1111
  var import_ui23 = require("@ship-it-ui/ui");
1112
+ var import_react20 = require("react");
1035
1113
  var import_jsx_runtime20 = require("react/jsx-runtime");
1036
1114
  var Hero = (0, import_react20.forwardRef)(function Hero2({ eyebrow, title, description, actions, visual, className, ...props }, ref) {
1037
1115
  const hasVisual = visual != null;
@@ -1069,29 +1147,32 @@ var Hero = (0, import_react20.forwardRef)(function Hero2({ eyebrow, title, descr
1069
1147
  Hero.displayName = "Hero";
1070
1148
 
1071
1149
  // src/marketing/PricingCard.tsx
1072
- var import_react21 = require("react");
1073
1150
  var import_ui24 = require("@ship-it-ui/ui");
1151
+ var import_react21 = require("react");
1074
1152
  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) {
1153
+ var PricingCard = (0, import_react21.forwardRef)(function PricingCard2({ tier, price, priceUnit, description, features, action, featured, className, ...props }, ref) {
1076
1154
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1077
1155
  "div",
1078
1156
  {
1079
1157
  ref,
1080
1158
  className: (0, import_ui24.cn)(
1081
- "bg-panel flex flex-col gap-5 rounded-lg border p-6",
1159
+ "bg-panel @container flex flex-col gap-5 rounded-lg border p-5 @sm:p-6",
1082
1160
  featured ? "border-accent shadow-lg" : "border-border",
1083
1161
  className
1084
1162
  ),
1085
1163
  ...props,
1086
1164
  children: [
1087
1165
  /* @__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: [
1166
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mb-1 flex flex-wrap items-center gap-2", children: [
1089
1167
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-[14px] font-medium", children: tier }),
1090
1168
  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" })
1091
1169
  ] }),
1092
1170
  description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-muted text-[12px]", children: description })
1093
1171
  ] }),
1094
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "font-mono text-[28px] font-medium tracking-[-0.5px]", children: price }),
1172
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-wrap items-baseline justify-center gap-x-2 gap-y-1", children: [
1173
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "font-mono text-[22px] font-medium tracking-[-0.5px] text-balance @sm:text-[28px]", children: price }),
1174
+ priceUnit != null && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-text-dim text-[12px] whitespace-nowrap @sm:text-[13px]", children: priceUnit })
1175
+ ] }),
1095
1176
  /* @__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
1177
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { "aria-hidden": true, className: "text-accent", children: "\u2713" }),
1097
1178
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: f })
@@ -1105,8 +1186,8 @@ PricingCard.displayName = "PricingCard";
1105
1186
 
1106
1187
  // src/marketing/Testimonial.tsx
1107
1188
  var import_ui25 = require("@ship-it-ui/ui");
1108
- var import_react22 = require("react");
1109
1189
  var import_ui26 = require("@ship-it-ui/ui");
1190
+ var import_react22 = require("react");
1110
1191
  var import_jsx_runtime22 = require("react/jsx-runtime");
1111
1192
  var Testimonial = (0, import_react22.forwardRef)(function Testimonial2({ quote, author, role, avatar, className, ...props }, ref) {
1112
1193
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
@@ -1130,12 +1211,139 @@ var Testimonial = (0, import_react22.forwardRef)(function Testimonial2({ quote,
1130
1211
  );
1131
1212
  });
1132
1213
  Testimonial.displayName = "Testimonial";
1214
+
1215
+ // src/data/ConnectorCard.tsx
1216
+ var import_icons = require("@ship-it-ui/icons");
1217
+ var import_ui27 = require("@ship-it-ui/ui");
1218
+ var import_react23 = require("react");
1219
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1220
+ var statusDot = {
1221
+ connected: "ok",
1222
+ syncing: "sync",
1223
+ error: "err",
1224
+ disconnected: "off"
1225
+ };
1226
+ var statusLabel = {
1227
+ connected: "Connected",
1228
+ syncing: "Syncing",
1229
+ error: "Error",
1230
+ disconnected: "Disconnected"
1231
+ };
1232
+ var ConnectorCard = (0, import_react23.forwardRef)(function ConnectorCard2({
1233
+ connector,
1234
+ name,
1235
+ status,
1236
+ lastSyncedAt,
1237
+ relativeNow,
1238
+ summary,
1239
+ actions,
1240
+ onClick,
1241
+ accessibleName,
1242
+ className,
1243
+ ...props
1244
+ }, ref) {
1245
+ const interactive = typeof onClick === "function";
1246
+ const time = lastSyncedAt ? (0, import_ui27.formatRelative)(lastSyncedAt, relativeNow ?? /* @__PURE__ */ new Date()) : "";
1247
+ const labelBlock = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
1248
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1249
+ "span",
1250
+ {
1251
+ "aria-hidden": true,
1252
+ className: "bg-panel-2 grid h-10 w-10 shrink-0 place-items-center rounded-md font-mono text-[16px]",
1253
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_icons.IconGlyph, { name: connector, kind: "connector" })
1254
+ }
1255
+ ),
1256
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "min-w-0 flex-1", children: [
1257
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
1258
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "truncate text-[14px] font-medium", children: name }),
1259
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1260
+ import_ui27.StatusDot,
1261
+ {
1262
+ state: statusDot[status],
1263
+ pulse: status === "syncing",
1264
+ label: statusLabel[status]
1265
+ }
1266
+ )
1267
+ ] }),
1268
+ (summary || time) && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "text-text-muted mt-[2px] flex items-center gap-2 text-[12px]", children: [
1269
+ summary && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "truncate", children: summary }),
1270
+ summary && time && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { "aria-hidden": true, className: "text-text-dim", children: "\xB7" }),
1271
+ time && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("time", { className: "text-text-dim font-mono text-[11px]", children: [
1272
+ "last synced ",
1273
+ time
1274
+ ] })
1275
+ ] })
1276
+ ] })
1277
+ ] });
1278
+ const labelRegionClass = (0, import_ui27.cn)(
1279
+ "flex flex-1 items-start gap-3 rounded-md p-1 text-left transition-colors duration-(--duration-micro)",
1280
+ interactive && "hover:bg-panel-2 focus-visible:ring-accent-dim cursor-pointer outline-none focus-visible:ring-[3px]"
1281
+ );
1282
+ const labelRegion = interactive ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1283
+ "button",
1284
+ {
1285
+ type: "button",
1286
+ onClick,
1287
+ "aria-label": accessibleName ?? (typeof name === "string" ? `${name} connector` : statusLabel[status]),
1288
+ className: labelRegionClass,
1289
+ children: labelBlock
1290
+ }
1291
+ ) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: labelRegionClass, children: labelBlock });
1292
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1293
+ "div",
1294
+ {
1295
+ ref,
1296
+ className: (0, import_ui27.cn)(
1297
+ "rounded-base border-border bg-panel flex items-start gap-2 border p-3",
1298
+ className
1299
+ ),
1300
+ ...props,
1301
+ children: [
1302
+ labelRegion,
1303
+ actions && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "shrink-0 self-center pr-1", children: actions })
1304
+ ]
1305
+ }
1306
+ );
1307
+ });
1308
+ ConnectorCard.displayName = "ConnectorCard";
1309
+
1310
+ // src/data/EntityTable.tsx
1311
+ var import_ui28 = require("@ship-it-ui/ui");
1312
+ var import_react24 = require("react");
1313
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1314
+ function EntityTable(props) {
1315
+ const { rowKey, ...rest } = props;
1316
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_ui28.DataTable, { ...rest, rowKey: rowKey ?? ((row) => row.id) });
1317
+ }
1318
+ function entityColumn(options = {}) {
1319
+ return {
1320
+ key: options.key ?? "name",
1321
+ header: options.header ?? "Name",
1322
+ accessor: (row) => row.name,
1323
+ cell: (row) => {
1324
+ const meta = getEntityTypeMeta(row.type);
1325
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "flex items-center gap-2 font-mono", "data-entity-type": row.type, children: [
1326
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { "aria-hidden": true, className: meta.toneClass, children: meta.glyph }),
1327
+ row.name
1328
+ ] });
1329
+ }
1330
+ };
1331
+ }
1332
+ function entityTypeColumn(options = {}) {
1333
+ return {
1334
+ key: options.key ?? "type",
1335
+ header: options.header ?? "Type",
1336
+ accessor: (row) => row.type,
1337
+ cell: (row) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(EntityBadge, { type: row.type, size: "sm" })
1338
+ };
1339
+ }
1133
1340
  // Annotate the CommonJS export names for ESM import in node:
1134
1341
  0 && (module.exports = {
1135
1342
  AskBar,
1136
1343
  CTAStrip,
1137
1344
  Citation,
1138
1345
  ConfidenceIndicator,
1346
+ ConnectorCard,
1139
1347
  CopilotMessage,
1140
1348
  ENTITY_GLYPH,
1141
1349
  ENTITY_LABEL,
@@ -1146,6 +1354,7 @@ Testimonial.displayName = "Testimonial";
1146
1354
  EntityListRow,
1147
1355
  EntityListRowButton,
1148
1356
  EntityListRowDiv,
1357
+ EntityTable,
1149
1358
  FeatureGrid,
1150
1359
  Footer,
1151
1360
  GraphEdge,
@@ -1161,6 +1370,13 @@ Testimonial.displayName = "Testimonial";
1161
1370
  SuggestionChip,
1162
1371
  Testimonial,
1163
1372
  ToolCallCard,
1164
- cn
1373
+ cn,
1374
+ entityColumn,
1375
+ entityTypeColumn,
1376
+ getEntityTypeMeta,
1377
+ listEntityTypes,
1378
+ registerEntityType,
1379
+ registerEntityTypes,
1380
+ resetEntityTypeRegistry
1165
1381
  });
1166
1382
  //# sourceMappingURL=index.cjs.map