@ai-matrx/detail 0.1.170 → 0.1.172

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/react.cjs CHANGED
@@ -551,111 +551,33 @@ function useOpenDetail(warmType) {
551
551
  var import_react7 = require("react");
552
552
 
553
553
  // src/react/icons.tsx
554
- var import_jsx_runtime2 = require("react/jsx-runtime");
555
- function glyph(name, children) {
556
- function Icon(props) {
557
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
558
- "svg",
559
- {
560
- xmlns: "http://www.w3.org/2000/svg",
561
- width: 24,
562
- height: 24,
563
- viewBox: "0 0 24 24",
564
- fill: "none",
565
- stroke: "currentColor",
566
- strokeWidth: 2,
567
- strokeLinecap: "round",
568
- strokeLinejoin: "round",
569
- "aria-hidden": "true",
570
- "data-detail-icon": name,
571
- ...props,
572
- children
573
- }
574
- );
575
- }
576
- Icon.displayName = `DetailIcon(${name})`;
577
- return Icon;
578
- }
579
- var AlertCircleIcon = glyph(
580
- "alert-circle",
581
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
582
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
583
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
584
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
585
- ] })
586
- );
587
- var HistoryIcon = glyph(
588
- "history",
589
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
590
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }),
591
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M3 3v5h5" }),
592
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 7v5l4 2" })
593
- ] })
594
- );
595
- var Link2Icon = glyph(
596
- "link-2",
597
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
598
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9 17H7A5 5 0 0 1 7 7h2" }),
599
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M15 7h2a5 5 0 1 1 0 10h-2" }),
600
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "8", x2: "16", y1: "12", y2: "12" })
601
- ] })
602
- );
603
- var SHIELD = "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z";
604
- var ShieldAlertIcon = glyph(
605
- "shield-alert",
606
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
607
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: SHIELD }),
608
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 8v4" }),
609
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 16h.01" })
610
- ] })
611
- );
612
- var ShieldCheckIcon = glyph(
613
- "shield-check",
614
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
615
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: SHIELD }),
616
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m9 12 2 2 4-4" })
617
- ] })
618
- );
619
- var ExpandIcon = glyph(
620
- "expand",
621
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
622
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m15 15 6 6" }),
623
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m15 9 6-6" }),
624
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M21 16v5h-5" }),
625
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M21 8V3h-5" }),
626
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M3 16v5h5" }),
627
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m3 21 6-6" }),
628
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M3 8V3h5" }),
629
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9 9 3 3" })
630
- ] })
631
- );
632
- var LoaderIcon = glyph("loader", /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" }));
633
- var Settings2Icon = glyph(
634
- "settings-2",
635
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
636
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M14 17H5" }),
637
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M19 7h-9" }),
638
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "17", cy: "17", r: "3" }),
639
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "7", cy: "7", r: "3" })
640
- ] })
641
- );
554
+ var import_icons = require("@ai-matrx/design-system/icons");
555
+ var sized = (Glyph) => (0, import_icons.withGlyphDefaults)(Glyph, { width: 24, height: 24 });
556
+ var AlertCircleIcon = sized(import_icons.CircleAlertIcon);
557
+ var HistoryIcon = sized(import_icons.HistoryIcon);
558
+ var Link2Icon = sized(import_icons.Link2Icon);
559
+ var ShieldAlertIcon = sized(import_icons.ShieldAlertIcon);
560
+ var ShieldCheckIcon = sized(import_icons.ShieldCheckIcon);
561
+ var ExpandIcon = sized(import_icons.ExpandIcon);
562
+ var LoaderIcon = sized(import_icons.Loader2Icon);
563
+ var Settings2Icon = sized(import_icons.Settings2Icon);
642
564
 
643
565
  // src/react/DetailHeader.tsx
644
- var import_icons2 = require("@ai-matrx/design-system/icons");
566
+ var import_icons3 = require("@ai-matrx/design-system/icons");
645
567
  var import_design_system = require("@ai-matrx/design-system");
646
- var import_jsx_runtime3 = require("react/jsx-runtime");
568
+ var import_jsx_runtime2 = require("react/jsx-runtime");
647
569
  var ICON_BUTTON = "inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 disabled:hover:bg-transparent pointer-coarse:h-10 pointer-coarse:w-10";
648
570
  var MENU_ITEM = "flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:py-2.5";
649
571
  var TYPE_CHIP = "shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide ring-1 ring-inset";
650
572
  var PRESENTATIONS = [
651
- { value: "window", label: "Open as window", Icon: import_icons2.AppWindowIcon },
652
- { value: "docked", label: "Open docked to the side", Icon: import_icons2.PanelRightIcon },
573
+ { value: "window", label: "Open as window", Icon: import_icons3.AppWindowIcon },
574
+ { value: "docked", label: "Open docked to the side", Icon: import_icons3.PanelRightIcon },
653
575
  { value: "page", label: "Open as page", Icon: ExpandIcon }
654
576
  ];
655
577
  function TypeChip({ core, className }) {
656
578
  const color = identityColor(core.recordType?.color);
657
579
  const accent = color ? null : core.recordType?.accent ?? null;
658
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
580
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
659
581
  "span",
660
582
  {
661
583
  className: (0, import_design_system.cn)(
@@ -682,9 +604,9 @@ function DetailTitle({ core }) {
682
604
  const color = identityColor(core.recordType?.color);
683
605
  const accent = core.recordType?.accent ?? null;
684
606
  const RecordDoors = host.doors.RecordDoors;
685
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
686
- Icon ? color ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "inline-flex shrink-0", style: { color }, "data-detail-identity-color": color, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { className: "h-4 w-4 shrink-0" }) }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { className: (0, import_design_system.cn)("h-4 w-4 shrink-0", accent?.text) }) : null,
687
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
607
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
608
+ Icon ? color ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "inline-flex shrink-0", style: { color }, "data-detail-identity-color": color, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { className: "h-4 w-4 shrink-0" }) }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { className: (0, import_design_system.cn)("h-4 w-4 shrink-0", accent?.text) }) : null,
609
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
688
610
  "span",
689
611
  {
690
612
  className: (0, import_design_system.cn)(
@@ -696,24 +618,24 @@ function DetailTitle({ core }) {
696
618
  children: core.title
697
619
  }
698
620
  ),
699
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TypeChip, { core, className: "hidden sm:inline-block" }),
700
- core.entityToken && core.doorsAvailable ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "hidden shrink-0 sm:inline-flex", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RecordDoors, { token: core.entityToken, id: core.ref.id, name: core.title }) }) : null
621
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TypeChip, { core, className: "hidden sm:inline-block" }),
622
+ core.entityToken && core.doorsAvailable ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "hidden shrink-0 sm:inline-flex", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RecordDoors, { token: core.entityToken, id: core.ref.id, name: core.title }) }) : null
701
623
  ] });
702
624
  }
703
625
  function DetailRecordMeta({ core }) {
704
626
  const host = useDetailHost();
705
627
  const RecordDoors = host.doors.RecordDoors;
706
628
  const trimmedFrom = core.list.context?.trimmedFrom;
707
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
629
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
708
630
  "div",
709
631
  {
710
632
  className: "flex flex-wrap items-center gap-2 border-b border-border/60 px-4 py-2",
711
633
  "data-detail-record-meta": true,
712
634
  children: [
713
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TypeChip, { core, className: "sm:hidden" }),
714
- core.entityToken && core.doorsAvailable ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "inline-flex sm:hidden", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RecordDoors, { token: core.entityToken, id: core.ref.id, name: core.title }) }) : null,
715
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "inline-flex min-w-0", "data-detail-id": true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system.RecordId, { value: core.ref.id, label: "Record", show: "full" }) }),
716
- trimmedFrom ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "w-full text-[10px] text-muted-foreground", "data-detail-list-trimmed": true, children: `Stepping through ${core.list.context?.items.length} of the ${trimmedFrom} records in the list this was opened from \u2014 a link can only carry that many, so the rest are not reachable from here. Open the list again to reach them.` }) : null
635
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TypeChip, { core, className: "sm:hidden" }),
636
+ core.entityToken && core.doorsAvailable ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "inline-flex sm:hidden", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RecordDoors, { token: core.entityToken, id: core.ref.id, name: core.title }) }) : null,
637
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "inline-flex min-w-0", "data-detail-id": true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_design_system.RecordId, { value: core.ref.id, label: "Record", show: "full" }) }),
638
+ trimmedFrom ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "w-full text-[10px] text-muted-foreground", "data-detail-list-trimmed": true, children: `Stepping through ${core.list.context?.items.length} of the ${trimmedFrom} records in the list this was opened from \u2014 a link can only carry that many, so the rest are not reachable from here. Open the list again to reach them.` }) : null
717
639
  ]
718
640
  }
719
641
  );
@@ -770,9 +692,9 @@ function DetailActions({ core, optional = "inline" }) {
770
692
  }, [menuOpen]);
771
693
  const list = core.list;
772
694
  const others = PRESENTATIONS.filter((p) => p.value !== core.presentation);
773
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex shrink-0 items-center gap-0.5", "data-detail-actions": true, children: [
774
- list.context ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
775
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
695
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex shrink-0 items-center gap-0.5", "data-detail-actions": true, children: [
696
+ list.context ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
697
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
776
698
  "button",
777
699
  {
778
700
  type: "button",
@@ -781,15 +703,15 @@ function DetailActions({ core, optional = "inline" }) {
781
703
  disabled: !list.hasPrev,
782
704
  "aria-label": "Previous record (Up arrow, or left bracket)",
783
705
  title: "Previous record \u2191 or [",
784
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.ChevronLeftIcon, { className: "h-4 w-4" })
706
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.ChevronLeftIcon, { className: "h-4 w-4" })
785
707
  }
786
708
  ),
787
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "px-1 text-[11px] tabular-nums text-muted-foreground", children: [
709
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "px-1 text-[11px] tabular-nums text-muted-foreground", children: [
788
710
  list.context.index + 1,
789
711
  "/",
790
712
  list.context.items.length
791
713
  ] }),
792
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
714
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
793
715
  "button",
794
716
  {
795
717
  type: "button",
@@ -798,19 +720,19 @@ function DetailActions({ core, optional = "inline" }) {
798
720
  disabled: !list.hasNext,
799
721
  "aria-label": "Next record (Down arrow, or right bracket)",
800
722
  title: "Next record \u2193 or ]",
801
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.ChevronRightIcon, { className: "h-4 w-4" })
723
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.ChevronRightIcon, { className: "h-4 w-4" })
802
724
  }
803
725
  ),
804
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-1 h-4 w-px bg-border", "aria-hidden": true })
726
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "mx-1 h-4 w-px bg-border", "aria-hidden": true })
805
727
  ] }) : null,
806
- optional === "none" ? null : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
807
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
728
+ optional === "none" ? null : /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
729
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
808
730
  "span",
809
731
  {
810
732
  className: "flex items-center gap-0.5 @max-[26rem]/window-header:hidden",
811
733
  "data-detail-actions-collapsible": true,
812
734
  children: [
813
- others.map(({ value, label, Icon }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
735
+ others.map(({ value, label, Icon }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
814
736
  "button",
815
737
  {
816
738
  type: "button",
@@ -818,11 +740,11 @@ function DetailActions({ core, optional = "inline" }) {
818
740
  onClick: () => core.switchTo(value),
819
741
  "aria-label": label,
820
742
  title: label,
821
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { className: "h-4 w-4" })
743
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { className: "h-4 w-4" })
822
744
  },
823
745
  value
824
746
  )),
825
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
747
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
826
748
  "button",
827
749
  {
828
750
  type: "button",
@@ -831,14 +753,14 @@ function DetailActions({ core, optional = "inline" }) {
831
753
  "aria-label": "Copy record id",
832
754
  title: "Copy record id",
833
755
  "data-detail-copy-id": true,
834
- children: copied ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.CheckIcon, { className: "h-3.5 w-3.5 text-primary" }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.CopyIcon, { className: "h-3.5 w-3.5" })
756
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.CheckIcon, { className: "h-3.5 w-3.5 text-primary" }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.CopyIcon, { className: "h-3.5 w-3.5" })
835
757
  }
836
758
  )
837
759
  ]
838
760
  }
839
761
  ),
840
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "relative hidden @max-[26rem]/window-header:inline-flex", ref: menuRef, children: [
841
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
762
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "relative hidden @max-[26rem]/window-header:inline-flex", ref: menuRef, children: [
763
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
842
764
  "button",
843
765
  {
844
766
  type: "button",
@@ -849,10 +771,10 @@ function DetailActions({ core, optional = "inline" }) {
849
771
  "aria-haspopup": "menu",
850
772
  "aria-expanded": menuOpen,
851
773
  "data-detail-actions-overflow": true,
852
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.MoreHorizontalIcon, { className: "h-4 w-4" })
774
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.MoreHorizontalIcon, { className: "h-4 w-4" })
853
775
  }
854
776
  ),
855
- menuOpen ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
777
+ menuOpen ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
856
778
  "div",
857
779
  {
858
780
  role: "menu",
@@ -860,7 +782,7 @@ function DetailActions({ core, optional = "inline" }) {
860
782
  className: "absolute right-0 top-full z-50 mt-1 min-w-44 rounded-md border border-border bg-card p-1 shadow-md",
861
783
  "data-detail-actions-menu": true,
862
784
  children: [
863
- others.map(({ value, label, Icon }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
785
+ others.map(({ value, label, Icon }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
864
786
  "button",
865
787
  {
866
788
  type: "button",
@@ -871,13 +793,13 @@ function DetailActions({ core, optional = "inline" }) {
871
793
  core.switchTo(value);
872
794
  },
873
795
  children: [
874
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { className: "h-3.5 w-3.5 shrink-0" }),
796
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { className: "h-3.5 w-3.5 shrink-0" }),
875
797
  label
876
798
  ]
877
799
  },
878
800
  value
879
801
  )),
880
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
802
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
881
803
  "button",
882
804
  {
883
805
  type: "button",
@@ -888,7 +810,7 @@ function DetailActions({ core, optional = "inline" }) {
888
810
  void copyId();
889
811
  },
890
812
  children: [
891
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.CopyIcon, { className: "h-3.5 w-3.5 shrink-0" }),
813
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.CopyIcon, { className: "h-3.5 w-3.5 shrink-0" }),
892
814
  "Copy record id"
893
815
  ]
894
816
  }
@@ -919,8 +841,8 @@ function formatWhen(iso) {
919
841
  // src/react/DetailPresentationPane.tsx
920
842
  var import_react8 = require("react");
921
843
  var import_design_system2 = require("@ai-matrx/design-system");
922
- var import_icons4 = require("@ai-matrx/design-system/icons");
923
- var import_jsx_runtime4 = require("react/jsx-runtime");
844
+ var import_icons5 = require("@ai-matrx/design-system/icons");
845
+ var import_jsx_runtime3 = require("react/jsx-runtime");
924
846
  var WORD = {
925
847
  window: "a window",
926
848
  docked: "a docked panel",
@@ -997,12 +919,12 @@ function DetailPresentationPane({ core }) {
997
919
  }, [open, save, registerSave]);
998
920
  if (!save) return null;
999
921
  if (!open) {
1000
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "w-full", children: [
1001
- setting.error ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "px-1 pt-1 text-[11px] text-muted-foreground", children: [
922
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "w-full", children: [
923
+ setting.error ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "px-1 pt-1 text-[11px] text-muted-foreground", children: [
1002
924
  `Your "open details as" setting could not be read (${setting.error}) \u2014 details are opening as ${WORD[core.presentation]}.`,
1003
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system2.ErrorActions, { origin: "detail/DetailPresentationPane", operation: "Read the open-details-as setting", error: setting.error })
925
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system2.ErrorActions, { origin: "detail/DetailPresentationPane", operation: "Read the open-details-as setting", error: setting.error })
1004
926
  ] }) : null,
1005
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
927
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1006
928
  "button",
1007
929
  {
1008
930
  type: "button",
@@ -1010,25 +932,25 @@ function DetailPresentationPane({ core }) {
1010
932
  className: "flex w-full items-center gap-1.5 rounded-md px-1 py-1 text-left text-[11px] text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1011
933
  "data-detail-presentation-pane": "collapsed",
1012
934
  children: [
1013
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Settings2Icon, { className: "h-3 w-3 shrink-0" }),
1014
- setting.error ? null : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: `Details open as ${WORD[effective]}.` }),
1015
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "underline underline-offset-2", children: "Change" })
935
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Settings2Icon, { className: "h-3 w-3 shrink-0" }),
936
+ setting.error ? null : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: `Details open as ${WORD[effective]}.` }),
937
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "underline underline-offset-2", children: "Change" })
1016
938
  ]
1017
939
  }
1018
940
  )
1019
941
  ] });
1020
942
  }
1021
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
943
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1022
944
  "section",
1023
945
  {
1024
946
  className: "space-y-2 rounded-md border border-border bg-muted/30 p-3",
1025
947
  "data-detail-presentation-pane": "open",
1026
948
  children: [
1027
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("h3", { className: "flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: [
1028
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Settings2Icon, { className: "h-3 w-3" }),
949
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("h3", { className: "flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: [
950
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Settings2Icon, { className: "h-3 w-3" }),
1029
951
  "How record details open"
1030
952
  ] }),
1031
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "flex flex-wrap gap-1", role: "group", "aria-label": "Open record details as", children: DETAIL_PRESENTATIONS.map((value) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
953
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex flex-wrap gap-1", role: "group", "aria-label": "Open record details as", children: DETAIL_PRESENTATIONS.map((value) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1032
954
  "button",
1033
955
  {
1034
956
  type: "button",
@@ -1045,7 +967,7 @@ function DetailPresentationPane({ core }) {
1045
967
  },
1046
968
  value
1047
969
  )) }),
1048
- hasTypeException ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
970
+ hasTypeException ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1049
971
  "button",
1050
972
  {
1051
973
  type: "button",
@@ -1056,8 +978,8 @@ function DetailPresentationPane({ core }) {
1056
978
  children: `Use the default for ${core.typeLabel.toLowerCase()} records`
1057
979
  }
1058
980
  ) : null,
1059
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
1060
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
981
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
982
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1061
983
  "input",
1062
984
  {
1063
985
  type: "checkbox",
@@ -1073,8 +995,8 @@ function DetailPresentationPane({ core }) {
1073
995
  core.typeLabel.toLowerCase(),
1074
996
  " records"
1075
997
  ] }),
1076
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex items-center gap-2", children: [
1077
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
998
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-2", children: [
999
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1078
1000
  "button",
1079
1001
  {
1080
1002
  type: "button",
@@ -1082,13 +1004,13 @@ function DetailPresentationPane({ core }) {
1082
1004
  disabled: state.status === "saving",
1083
1005
  className: "inline-flex items-center gap-1 rounded-md bg-primary px-2.5 py-1 text-xs text-primary-foreground transition-colors hover:bg-primary/90 disabled:opacity-60 pointer-coarse:py-2",
1084
1006
  children: [
1085
- state.status === "saving" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LoaderIcon, { className: "h-3 w-3 animate-spin" }) : state.status === "saved" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons4.CheckIcon, { className: "h-3 w-3" }) : null,
1007
+ state.status === "saving" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(LoaderIcon, { className: "h-3 w-3 animate-spin" }) : state.status === "saved" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons5.CheckIcon, { className: "h-3 w-3" }) : null,
1086
1008
  "Save"
1087
1009
  ]
1088
1010
  }
1089
1011
  ),
1090
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-[11px] text-muted-foreground", children: state.status === "saved" ? "Saved. It applies to the next record you open." : "\u2318/Ctrl + Enter" }),
1091
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1012
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-[11px] text-muted-foreground", children: state.status === "saved" ? "Saved. It applies to the next record you open." : "\u2318/Ctrl + Enter" }),
1013
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1092
1014
  "button",
1093
1015
  {
1094
1016
  type: "button",
@@ -1098,15 +1020,15 @@ function DetailPresentationPane({ core }) {
1098
1020
  }
1099
1021
  )
1100
1022
  ] }),
1101
- state.status === "refused" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "text-xs text-destructive", "data-detail-presentation-refusal": true, children: [
1023
+ state.status === "refused" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "text-xs text-destructive", "data-detail-presentation-refusal": true, children: [
1102
1024
  state.reason,
1103
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system2.ErrorActions, { origin: "detail/DetailPresentationPane", operation: "Change how details open", message: state.reason })
1025
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system2.ErrorActions, { origin: "detail/DetailPresentationPane", operation: "Change how details open", message: state.reason })
1104
1026
  ] }) : null,
1105
- setting.error ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1027
+ setting.error ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1106
1028
  "The saved setting could not be read here (",
1107
1029
  setting.error,
1108
1030
  "), so this shows what this detail is actually doing.",
1109
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system2.ErrorActions, { origin: "detail/DetailPresentationPane", operation: "Read the open-details-as setting", error: setting.error })
1031
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_design_system2.ErrorActions, { origin: "detail/DetailPresentationPane", operation: "Read the open-details-as setting", error: setting.error })
1110
1032
  ] }) : null
1111
1033
  ]
1112
1034
  }
@@ -1114,9 +1036,9 @@ function DetailPresentationPane({ core }) {
1114
1036
  }
1115
1037
 
1116
1038
  // src/react/DetailBody.tsx
1117
- var import_icons6 = require("@ai-matrx/design-system/icons");
1039
+ var import_icons7 = require("@ai-matrx/design-system/icons");
1118
1040
  var import_outbound_react = require("@ai-matrx/kit/outbound-react");
1119
- var import_jsx_runtime5 = require("react/jsx-runtime");
1041
+ var import_jsx_runtime4 = require("react/jsx-runtime");
1120
1042
  var SLOW_LOAD_NOTICE_MS = 6e3;
1121
1043
  function useSlowLoadNotice(active, key) {
1122
1044
  const [slow, setSlow] = (0, import_react9.useState)(false);
@@ -1132,7 +1054,7 @@ function useSlowLoadNotice(active, key) {
1132
1054
  return slow;
1133
1055
  }
1134
1056
  function SectionHeading({ icon, children }) {
1135
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("h3", { className: "flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: [
1057
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("h3", { className: "flex items-center gap-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: [
1136
1058
  icon,
1137
1059
  children
1138
1060
  ] });
@@ -1141,8 +1063,8 @@ function Notice({
1141
1063
  tone,
1142
1064
  children
1143
1065
  }) {
1144
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-col items-center gap-2 py-8 text-center", children: [
1145
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1066
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex flex-col items-center gap-2 py-8 text-center", children: [
1067
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1146
1068
  AlertCircleIcon,
1147
1069
  {
1148
1070
  className: (0, import_design_system3.cn)(
@@ -1153,7 +1075,7 @@ function Notice({
1153
1075
  )
1154
1076
  }
1155
1077
  ),
1156
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "max-w-prose text-sm text-muted-foreground", children })
1078
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "max-w-prose text-sm text-muted-foreground", children })
1157
1079
  ] });
1158
1080
  }
1159
1081
  var GRANT_WORD = {
@@ -1189,7 +1111,7 @@ function HealthStrip({ health }) {
1189
1111
  setRefreshing(false);
1190
1112
  }
1191
1113
  };
1192
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1114
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1193
1115
  "div",
1194
1116
  {
1195
1117
  className: (0, import_design_system3.cn)(
@@ -1198,9 +1120,9 @@ function HealthStrip({ health }) {
1198
1120
  ),
1199
1121
  "data-detail-health": true,
1200
1122
  children: [
1201
- ok ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ShieldCheckIcon, { className: "h-3.5 w-3.5 text-primary" }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ShieldAlertIcon, { className: "h-3.5 w-3.5 text-destructive" }),
1202
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "font-medium", children: health.source }),
1203
- ok ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1123
+ ok ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ShieldCheckIcon, { className: "h-3.5 w-3.5 text-primary" }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ShieldAlertIcon, { className: "h-3.5 w-3.5 text-destructive" }),
1124
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "font-medium", children: health.source }),
1125
+ ok ? null : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1204
1126
  "span",
1205
1127
  {
1206
1128
  className: "rounded bg-destructive/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-destructive",
@@ -1208,13 +1130,13 @@ function HealthStrip({ health }) {
1208
1130
  children: GRANT_WORD[health.grant]
1209
1131
  }
1210
1132
  ),
1211
- health.lastRefreshedAt ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { children: [
1133
+ health.lastRefreshedAt ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { children: [
1212
1134
  "Refreshed ",
1213
1135
  formatWhen(health.lastRefreshedAt)
1214
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: "Never refreshed" }),
1215
- health.grantDetail ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: health.grantDetail }) : null,
1216
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "ml-auto flex items-center gap-1", children: [
1217
- health.onRefresh ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1136
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: "Never refreshed" }),
1137
+ health.grantDetail ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: health.grantDetail }) : null,
1138
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "ml-auto flex items-center gap-1", children: [
1139
+ health.onRefresh ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1218
1140
  "button",
1219
1141
  {
1220
1142
  type: "button",
@@ -1222,12 +1144,12 @@ function HealthStrip({ health }) {
1222
1144
  disabled: refreshing,
1223
1145
  className: "inline-flex h-6 items-center gap-1 rounded px-1.5 hover:bg-accent hover:text-foreground disabled:opacity-50 pointer-coarse:h-10",
1224
1146
  children: [
1225
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_icons6.RefreshCwIcon, { className: (0, import_design_system3.cn)("h-3 w-3", refreshing && "animate-spin") }),
1147
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons7.RefreshCwIcon, { className: (0, import_design_system3.cn)("h-3 w-3", refreshing && "animate-spin") }),
1226
1148
  "Refresh"
1227
1149
  ]
1228
1150
  }
1229
1151
  ) : null,
1230
- !ok && health.onReconnect ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1152
+ !ok && health.onReconnect ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1231
1153
  "button",
1232
1154
  {
1233
1155
  type: "button",
@@ -1236,13 +1158,13 @@ function HealthStrip({ health }) {
1236
1158
  children: "Reconnect"
1237
1159
  }
1238
1160
  ) : null,
1239
- health.openAtSourceHref ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1161
+ health.openAtSourceHref ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1240
1162
  import_outbound_react.OutboundLink,
1241
1163
  {
1242
1164
  href: health.openAtSourceHref,
1243
1165
  className: "inline-flex h-6 items-center gap-1 rounded px-1.5 hover:bg-accent hover:text-foreground pointer-coarse:h-10",
1244
1166
  children: [
1245
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_icons6.ExternalLinkIcon, { className: "h-3 w-3" }),
1167
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons7.ExternalLinkIcon, { className: "h-3 w-3" }),
1246
1168
  health.openAtSourceLabel ?? deriveOpenAtSourceLabel(health.source)
1247
1169
  ]
1248
1170
  }
@@ -1260,16 +1182,16 @@ function FieldsSection({ core }) {
1260
1182
  const RefCell = host.doors.RefCell;
1261
1183
  const label = core.recordType?.label.toLowerCase() ?? "record";
1262
1184
  if (!core.recordType) {
1263
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Notice, { tone: "warn", children: `This is a ${core.ref.type} record. Nothing more about it is stored here yet, so there is nothing else to show. ${whatTheControlsDo(core)}` });
1185
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { tone: "warn", children: `This is a ${core.ref.type} record. Nothing more about it is stored here yet, so there is nothing else to show. ${whatTheControlsDo(core)}` });
1264
1186
  }
1265
1187
  if (core.status === "loading") {
1266
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(LoadingFields, { core, label });
1188
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LoadingFields, { core, label });
1267
1189
  }
1268
1190
  if (core.status === "not-found") {
1269
1191
  const sentence = `This ${label} couldn't be found \u2014 it may have been moved, deleted, or isn't shared with you.`;
1270
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Notice, { tone: "warn", children: [
1192
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Notice, { tone: "warn", children: [
1271
1193
  sentence,
1272
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1194
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1273
1195
  import_design_system3.ErrorActions,
1274
1196
  {
1275
1197
  origin: "detail/DetailBody",
@@ -1281,24 +1203,24 @@ function FieldsSection({ core }) {
1281
1203
  ] });
1282
1204
  }
1283
1205
  if (core.status === "error") {
1284
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Notice, { tone: "error", children: [
1206
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Notice, { tone: "error", children: [
1285
1207
  `Couldn't load the details for this ${label}. ${core.errorMessage ?? ""}`.trim(),
1286
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system3.ErrorActions, { origin: "detail/DetailBody", operation: `Load this ${label}`, error: core.errorMessage })
1208
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system3.ErrorActions, { origin: "detail/DetailBody", operation: `Load this ${label}`, error: core.errorMessage })
1287
1209
  ] });
1288
1210
  }
1289
1211
  if (core.status === "none") {
1290
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Notice, { tone: "muted", children: `Nothing more about this ${label} is stored here, so there is nothing else to show. ` + whatTheControlsDo(core) });
1212
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { tone: "muted", children: `Nothing more about this ${label} is stored here, so there is nothing else to show. ` + whatTheControlsDo(core) });
1291
1213
  }
1292
1214
  if (core.fields.length === 0) {
1293
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm text-muted-foreground", children: "No additional fields to show." });
1215
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-sm text-muted-foreground", children: "No additional fields to show." });
1294
1216
  }
1295
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dl", { className: "grid grid-cols-1 gap-x-4 gap-y-2.5", children: core.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1217
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("dl", { className: "grid grid-cols-1 gap-x-4 gap-y-2.5", children: core.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1296
1218
  "div",
1297
1219
  {
1298
1220
  className: "flex flex-col gap-0.5 border-b border-border/40 pb-2 last:border-b-0",
1299
1221
  children: [
1300
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { className: "text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: field.label }),
1301
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1222
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("dt", { className: "text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: field.label }),
1223
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1302
1224
  "dd",
1303
1225
  {
1304
1226
  className: (0, import_design_system3.cn)(
@@ -1310,7 +1232,7 @@ function FieldsSection({ core }) {
1310
1232
  // `field.ref.id` alone, so a field whose text was "Brightwater Robotics"
1311
1233
  // printed a truncated uuid. The ref's own `name` wins; otherwise the
1312
1234
  // field's text, unless that text IS the id and says nothing more.
1313
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1235
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1314
1236
  RefCell,
1315
1237
  {
1316
1238
  value: field.ref.id,
@@ -1329,8 +1251,8 @@ function FieldsSection({ core }) {
1329
1251
  }
1330
1252
  function LoadingFields({ core, label }) {
1331
1253
  const slow = useSlowLoadNotice(true, `${core.ref.type}:${core.ref.id}`);
1332
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "space-y-3", "aria-busy": "true", "aria-label": `Loading ${label} details`, children: [
1333
- slow ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-xs text-muted-foreground", "data-detail-slow-load": true, children: [
1254
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "space-y-3", "aria-busy": "true", "aria-label": `Loading ${label} details`, children: [
1255
+ slow ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "text-xs text-muted-foreground", "data-detail-slow-load": true, children: [
1334
1256
  "Still loading this ",
1335
1257
  label,
1336
1258
  " \u2014 the read has been running for more than",
@@ -1338,9 +1260,9 @@ function LoadingFields({ core, label }) {
1338
1260
  (0, import_format.formatDurationMs)(SLOW_LOAD_NOTICE_MS, { style: "long" }),
1339
1261
  ". If nothing appears, the record may be unreachable from here; closing and reopening it starts a fresh read."
1340
1262
  ] }) : null,
1341
- Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "space-y-1.5", children: [
1342
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system3.Skeleton, { className: "h-2.5 w-20" }),
1343
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system3.Skeleton, { className: (0, import_design_system3.cn)("h-4", i % 2 ? "w-3/4" : "w-1/2") })
1263
+ Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "space-y-1.5", children: [
1264
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system3.Skeleton, { className: "h-2.5 w-20" }),
1265
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system3.Skeleton, { className: (0, import_design_system3.cn)("h-4", i % 2 ? "w-3/4" : "w-1/2") })
1344
1266
  ] }, i))
1345
1267
  ] });
1346
1268
  }
@@ -1355,9 +1277,9 @@ function AssociationsSection({ core }) {
1355
1277
  const wanted = core.recordType?.associationTokens ?? host.associations.defaultTokens;
1356
1278
  const tokens = wanted.filter((t) => t !== token).filter(import_associations.isEntityTypeToken);
1357
1279
  if (tokens.length === 0) return null;
1358
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "space-y-2", "data-detail-section": "associations", children: [
1359
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeading, { icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Link2Icon, { className: "h-3 w-3" }), children: "Linked" }),
1360
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react10.PrimaryEntityProvider, { value: { type: token, id: core.ref.id, label: core.title }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react10.AssociationCardGrid, { tokens }) })
1280
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "space-y-2", "data-detail-section": "associations", children: [
1281
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionHeading, { icon: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Link2Icon, { className: "h-3 w-3" }), children: "Linked" }),
1282
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react10.PrimaryEntityProvider, { value: { type: token, id: core.ref.id, label: core.title }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react10.AssociationCardGrid, { tokens }) })
1361
1283
  ] });
1362
1284
  }
1363
1285
  var ACTOR_COLUMNS = ["actor_id", "user_id", "person_id", "created_by_id"];
@@ -1394,33 +1316,33 @@ function HistorySection({ core }) {
1394
1316
  (candidate) => Boolean(candidate)
1395
1317
  );
1396
1318
  const ActorName = host.history.ActorName ?? null;
1397
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "space-y-2", "data-detail-section": "history", children: [
1398
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeading, { icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HistoryIcon, { className: "h-3 w-3" }), children: "History" }),
1399
- state.status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "space-y-1.5", "aria-busy": "true", "aria-label": "Loading history", children: [
1400
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system3.Skeleton, { className: "h-3.5 w-2/3" }),
1401
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system3.Skeleton, { className: "h-3.5 w-1/2" })
1402
- ] }) : state.status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1319
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "space-y-2", "data-detail-section": "history", children: [
1320
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionHeading, { icon: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HistoryIcon, { className: "h-3 w-3" }), children: "History" }),
1321
+ state.status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "space-y-1.5", "aria-busy": "true", "aria-label": "Loading history", children: [
1322
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system3.Skeleton, { className: "h-3.5 w-2/3" }),
1323
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system3.Skeleton, { className: "h-3.5 w-1/2" })
1324
+ ] }) : state.status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1403
1325
  state.message.toLowerCase().includes("access denied") ? "History is only shown to people who can view this record." : `History could not be read: ${state.message}`,
1404
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system3.ErrorActions, { origin: "detail/DetailBody", operation: "Read the history", error: state.message })
1405
- ] }) : state.entries.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-muted-foreground", children: "No recorded changes yet." }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ol", { className: "space-y-1", children: state.entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1326
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system3.ErrorActions, { origin: "detail/DetailBody", operation: "Read the history", error: state.message })
1327
+ ] }) : state.entries.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-xs text-muted-foreground", children: "No recorded changes yet." }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ol", { className: "space-y-1", children: state.entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1406
1328
  "li",
1407
1329
  {
1408
1330
  className: "flex flex-wrap items-center gap-x-2 gap-y-0.5 text-xs",
1409
1331
  children: [
1410
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: [
1332
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: [
1411
1333
  "v",
1412
1334
  entry.version
1413
1335
  ] }),
1414
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "capitalize text-foreground", children: entry.operation.toLowerCase() }),
1415
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-muted-foreground", children: formatWhen(entry.occurredAt) }),
1416
- entry.isCurrent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-[10px] uppercase tracking-wide text-primary", children: "current" }) : null,
1417
- entry.actorId ? ActorName ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "text-muted-foreground", "data-detail-history-actor-person": true, children: [
1336
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "capitalize text-foreground", children: entry.operation.toLowerCase() }),
1337
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-muted-foreground", children: formatWhen(entry.occurredAt) }),
1338
+ entry.isCurrent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-[10px] uppercase tracking-wide text-primary", children: "current" }) : null,
1339
+ entry.actorId ? ActorName ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "text-muted-foreground", "data-detail-history-actor-person": true, children: [
1418
1340
  "Changed by ",
1419
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ActorName, { actorId: entry.actorId, row: core.row })
1420
- ] }) : actorToken ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "inline-flex items-center", "data-detail-history-actor": true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ActorCell, { value: entry.actorId, label: "Changed by", token: actorToken }) }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "text-muted-foreground", "data-detail-history-actor-raw": true, children: [
1341
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActorName, { actorId: entry.actorId, row: core.row })
1342
+ ] }) : actorToken ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "inline-flex items-center", "data-detail-history-actor": true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActorCell, { value: entry.actorId, label: "Changed by", token: actorToken }) }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "text-muted-foreground", "data-detail-history-actor-raw": true, children: [
1421
1343
  "Changed by",
1422
1344
  " ",
1423
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1345
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1424
1346
  "span",
1425
1347
  {
1426
1348
  className: "font-mono text-[10px]",
@@ -1428,7 +1350,7 @@ function HistorySection({ core }) {
1428
1350
  children: entry.actorId
1429
1351
  }
1430
1352
  )
1431
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-muted-foreground", "data-detail-history-actor-absent": true, children: "No person recorded for this change" })
1353
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "text-muted-foreground", "data-detail-history-actor-absent": true, children: "No person recorded for this change" })
1432
1354
  ]
1433
1355
  },
1434
1356
  `${entry.version}-${entry.occurredAt}`
@@ -1440,7 +1362,7 @@ function CustomFieldsPort({ core }) {
1440
1362
  const Section = host.customFields?.Section;
1441
1363
  const token = core.entityToken;
1442
1364
  if (!Section || !token) return null;
1443
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Section, { token, id: core.ref.id });
1365
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Section, { token, id: core.ref.id });
1444
1366
  }
1445
1367
  function DetailBody({ core }) {
1446
1368
  const extra = core.recordType?.extraSections && core.frameCtx ? core.recordType.extraSections(core.row, core.frameCtx) : [];
@@ -1448,32 +1370,35 @@ function DetailBody({ core }) {
1448
1370
  const body = (
1449
1371
  // `min-h-full` so a Frame's right-click menu answers anywhere in the body,
1450
1372
  // not only on the rows — a short dossier otherwise leaves a dead band.
1451
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex min-h-full flex-col", children: [
1452
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailRecordMeta, { core }),
1453
- core.health ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HealthStrip, { health: core.health }) : null,
1454
- core.about ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "line-clamp-3 border-b border-border/60 p-4 text-xs leading-snug text-muted-foreground", children: core.about }) : null,
1455
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "space-y-6 p-4", children: [
1456
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FieldsSection, { core }),
1457
- core.status === "ready" || core.status === "none" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
1458
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CustomFieldsPort, { core }),
1459
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AssociationsSection, { core }),
1460
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HistorySection, { core }),
1461
- extra.map((section) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "space-y-2", "data-detail-section": section.id, children: [
1462
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeading, { children: section.label }),
1373
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex min-h-full flex-col", children: [
1374
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DetailRecordMeta, { core }),
1375
+ core.health ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HealthStrip, { health: core.health }) : null,
1376
+ core.about ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "line-clamp-3 border-b border-border/60 p-4 text-xs leading-snug text-muted-foreground", children: core.about }) : null,
1377
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "space-y-6 p-4", children: [
1378
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FieldsSection, { core }),
1379
+ core.status === "ready" || core.status === "none" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
1380
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CustomFieldsPort, { core }),
1381
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AssociationsSection, { core }),
1382
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HistorySection, { core }),
1383
+ extra.map((section) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "space-y-2", "data-detail-section": section.id, children: [
1384
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionHeading, { children: section.label }),
1463
1385
  section.content
1464
1386
  ] }, section.id))
1465
1387
  ] }) : null,
1466
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailPresentationPane, { core })
1388
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DetailPresentationPane, { core })
1467
1389
  ] })
1468
1390
  ] })
1469
1391
  );
1470
- if (Frame && core.frameCtx) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Frame, { ctx: core.frameCtx, children: body });
1392
+ if (Frame && core.frameCtx) return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Frame, { ctx: core.frameCtx, children: body });
1471
1393
  return body;
1472
1394
  }
1473
1395
 
1474
1396
  // src/react/presentations.tsx
1475
1397
  var import_react11 = require("react");
1476
1398
 
1399
+ // src/presentation.ts
1400
+ var import_link_grammar = require("@ai-matrx/kit/link-grammar");
1401
+
1477
1402
  // src/listContext.ts
1478
1403
  var PERCENT_ESCAPE_TOO = /[.!~*'()]/g;
1479
1404
  function encodeRefPart(value) {
@@ -1487,9 +1412,9 @@ function detailInstanceKey(ref) {
1487
1412
  var DEFAULT_PANEL_URL_RESERVE_BYTES = Math.floor(DETAIL_URL_BUDGET_BYTES / 2);
1488
1413
 
1489
1414
  // src/react/presentations.tsx
1490
- var import_jsx_runtime6 = require("react/jsx-runtime");
1415
+ var import_jsx_runtime5 = require("react/jsx-runtime");
1491
1416
  function KeyboardSlot({ core, children }) {
1492
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1417
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1493
1418
  "div",
1494
1419
  {
1495
1420
  onKeyDownCapture: core.keyboard.rootProps.onKeyDownCapture,
@@ -1500,7 +1425,7 @@ function KeyboardSlot({ core, children }) {
1500
1425
  );
1501
1426
  }
1502
1427
  function KeyboardActionsSlot({ core, children }) {
1503
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1428
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1504
1429
  "div",
1505
1430
  {
1506
1431
  onKeyDownCapture: core.keyboard.rootProps.onKeyDownCapture,
@@ -1519,7 +1444,7 @@ function KeyboardRoot({ core, children }) {
1519
1444
  if (active instanceof HTMLElement && active !== document.body && root.contains(active)) return;
1520
1445
  root.focus({ preventScroll: true });
1521
1446
  }, [core.ref.id, core.ref.type]);
1522
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1447
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1523
1448
  "div",
1524
1449
  {
1525
1450
  ref: rootRef,
@@ -1537,19 +1462,19 @@ function DetailWindowPresentation({ data, onClose }) {
1537
1462
  const core = useDetailCore(data, "window", { onClose });
1538
1463
  const menuActions = useDetailMenuActions(core);
1539
1464
  const Shell = requireShell(host.shells, "Window");
1540
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1465
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1541
1466
  Shell,
1542
1467
  {
1543
1468
  instanceKey: detailInstanceKey(core.ref),
1544
1469
  target: core.ref,
1545
1470
  list: core.list.context,
1546
1471
  title: core.title,
1547
- titleNode: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailTitle, { core }) }),
1548
- actions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailActions, { core }) }),
1549
- navActions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailActions, { core, optional: "none" }) }),
1472
+ titleNode: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailTitle, { core }) }),
1473
+ actions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core }) }),
1474
+ navActions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core, optional: "none" }) }),
1550
1475
  menuActions,
1551
1476
  onClose: core.close,
1552
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailBody, { core }) })
1477
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailBody, { core }) })
1553
1478
  }
1554
1479
  );
1555
1480
  }
@@ -1558,18 +1483,18 @@ function DetailDockedPresentation({ data, onClose }) {
1558
1483
  const core = useDetailCore(data, "docked", { onClose });
1559
1484
  const menuActions = useDetailMenuActions(core);
1560
1485
  const Shell = requireShell(host.shells, "Docked");
1561
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1486
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1562
1487
  Shell,
1563
1488
  {
1564
1489
  instanceKey: detailInstanceKey(core.ref),
1565
1490
  target: core.ref,
1566
1491
  title: core.title,
1567
- titleNode: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailTitle, { core }) }),
1568
- actions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailActions, { core }) }),
1569
- navActions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailActions, { core, optional: "none" }) }),
1492
+ titleNode: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailTitle, { core }) }),
1493
+ actions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core }) }),
1494
+ navActions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core, optional: "none" }) }),
1570
1495
  menuActions,
1571
1496
  onClose: core.close,
1572
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailBody, { core }) })
1497
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailBody, { core }) })
1573
1498
  }
1574
1499
  );
1575
1500
  }
@@ -1578,18 +1503,18 @@ function DetailPagePresentation({ data }) {
1578
1503
  const core = useDetailCore(data, "page", {});
1579
1504
  const menuActions = useDetailMenuActions(core);
1580
1505
  const Shell = requireShell(host.shells, "Page");
1581
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1506
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1582
1507
  Shell,
1583
1508
  {
1584
1509
  target: core.ref,
1585
1510
  title: core.title,
1586
- titleNode: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailTitle, { core }) }),
1587
- actions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailActions, { core }) }),
1588
- navActions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailActions, { core, optional: "none" }) }),
1511
+ titleNode: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailTitle, { core }) }),
1512
+ actions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core }) }),
1513
+ navActions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core, optional: "none" }) }),
1589
1514
  menuActions,
1590
1515
  onClose: core.close,
1591
1516
  onBack: core.leave,
1592
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DetailBody, { core }) })
1517
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailBody, { core }) })
1593
1518
  }
1594
1519
  );
1595
1520
  }