@ai-matrx/detail 0.1.169 → 0.1.171
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/CHANGELOG.md +24 -3
- package/dist/{chunk-QKTMHP4O.js → chunk-D62JZJMB.js} +1 -1
- package/dist/chunk-D62JZJMB.js.map +1 -0
- package/dist/{host-Doo4S3OG.d.cts → host-BIPjYgZZ.d.cts} +5 -5
- package/dist/{host-Doo4S3OG.d.ts → host-BIPjYgZZ.d.ts} +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +162 -240
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +168 -236
- package/dist/react.js.map +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +2 -2
- package/dist/testing.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-QKTMHP4O.js.map +0 -1
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
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
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
|
|
566
|
+
var import_icons3 = require("@ai-matrx/design-system/icons");
|
|
645
567
|
var import_design_system = require("@ai-matrx/design-system");
|
|
646
|
-
var
|
|
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:
|
|
652
|
-
{ value: "docked", label: "Open docked to the side", Icon:
|
|
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,
|
|
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,
|
|
686
|
-
Icon ? color ? /* @__PURE__ */ (0,
|
|
687
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
700
|
-
core.entityToken && core.doorsAvailable ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
714
|
-
core.entityToken && core.doorsAvailable ? /* @__PURE__ */ (0,
|
|
715
|
-
/* @__PURE__ */ (0,
|
|
716
|
-
trimmedFrom ? /* @__PURE__ */ (0,
|
|
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,
|
|
774
|
-
list.context ? /* @__PURE__ */ (0,
|
|
775
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
706
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.ChevronLeftIcon, { className: "h-4 w-4" })
|
|
785
707
|
}
|
|
786
708
|
),
|
|
787
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
723
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.ChevronRightIcon, { className: "h-4 w-4" })
|
|
802
724
|
}
|
|
803
725
|
),
|
|
804
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
807
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
743
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { className: "h-4 w-4" })
|
|
822
744
|
},
|
|
823
745
|
value
|
|
824
746
|
)),
|
|
825
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
841
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
774
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons3.MoreHorizontalIcon, { className: "h-4 w-4" })
|
|
853
775
|
}
|
|
854
776
|
),
|
|
855
|
-
menuOpen ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
923
|
-
var
|
|
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,
|
|
1001
|
-
setting.error ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1014
|
-
setting.error ? null : /* @__PURE__ */ (0,
|
|
1015
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1028
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1060
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1077
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1091
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1039
|
+
var import_icons7 = require("@ai-matrx/design-system/icons");
|
|
1118
1040
|
var import_outbound_react = require("@ai-matrx/kit/outbound-react");
|
|
1119
|
-
var
|
|
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,
|
|
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,
|
|
1145
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1202
|
-
/* @__PURE__ */ (0,
|
|
1203
|
-
ok ? null : /* @__PURE__ */ (0,
|
|
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,
|
|
1133
|
+
health.lastRefreshedAt ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { children: [
|
|
1212
1134
|
"Refreshed ",
|
|
1213
1135
|
formatWhen(health.lastRefreshedAt)
|
|
1214
|
-
] }) : /* @__PURE__ */ (0,
|
|
1215
|
-
health.grantDetail ? /* @__PURE__ */ (0,
|
|
1216
|
-
/* @__PURE__ */ (0,
|
|
1217
|
-
health.onRefresh ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1192
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Notice, { tone: "warn", children: [
|
|
1271
1193
|
sentence,
|
|
1272
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1301
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1333
|
-
slow ? /* @__PURE__ */ (0,
|
|
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,
|
|
1342
|
-
/* @__PURE__ */ (0,
|
|
1343
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1359
|
-
/* @__PURE__ */ (0,
|
|
1360
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1398
|
-
/* @__PURE__ */ (0,
|
|
1399
|
-
state.status === "loading" ? /* @__PURE__ */ (0,
|
|
1400
|
-
/* @__PURE__ */ (0,
|
|
1401
|
-
/* @__PURE__ */ (0,
|
|
1402
|
-
] }) : state.status === "error" ? /* @__PURE__ */ (0,
|
|
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,
|
|
1405
|
-
] }) : state.entries.length === 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1415
|
-
/* @__PURE__ */ (0,
|
|
1416
|
-
entry.isCurrent ? /* @__PURE__ */ (0,
|
|
1417
|
-
entry.actorId ? ActorName ? /* @__PURE__ */ (0,
|
|
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,
|
|
1420
|
-
] }) : actorToken ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,26 +1370,26 @@ 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,
|
|
1452
|
-
/* @__PURE__ */ (0,
|
|
1453
|
-
core.health ? /* @__PURE__ */ (0,
|
|
1454
|
-
core.about ? /* @__PURE__ */ (0,
|
|
1455
|
-
/* @__PURE__ */ (0,
|
|
1456
|
-
/* @__PURE__ */ (0,
|
|
1457
|
-
core.status === "ready" || core.status === "none" ? /* @__PURE__ */ (0,
|
|
1458
|
-
/* @__PURE__ */ (0,
|
|
1459
|
-
/* @__PURE__ */ (0,
|
|
1460
|
-
/* @__PURE__ */ (0,
|
|
1461
|
-
extra.map((section) => /* @__PURE__ */ (0,
|
|
1462
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1388
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DetailPresentationPane, { core })
|
|
1467
1389
|
] })
|
|
1468
1390
|
] })
|
|
1469
1391
|
);
|
|
1470
|
-
if (Frame && core.frameCtx) return /* @__PURE__ */ (0,
|
|
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
|
|
|
@@ -1487,9 +1409,9 @@ function detailInstanceKey(ref) {
|
|
|
1487
1409
|
var DEFAULT_PANEL_URL_RESERVE_BYTES = Math.floor(DETAIL_URL_BUDGET_BYTES / 2);
|
|
1488
1410
|
|
|
1489
1411
|
// src/react/presentations.tsx
|
|
1490
|
-
var
|
|
1412
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
1491
1413
|
function KeyboardSlot({ core, children }) {
|
|
1492
|
-
return /* @__PURE__ */ (0,
|
|
1414
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1493
1415
|
"div",
|
|
1494
1416
|
{
|
|
1495
1417
|
onKeyDownCapture: core.keyboard.rootProps.onKeyDownCapture,
|
|
@@ -1500,7 +1422,7 @@ function KeyboardSlot({ core, children }) {
|
|
|
1500
1422
|
);
|
|
1501
1423
|
}
|
|
1502
1424
|
function KeyboardActionsSlot({ core, children }) {
|
|
1503
|
-
return /* @__PURE__ */ (0,
|
|
1425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1504
1426
|
"div",
|
|
1505
1427
|
{
|
|
1506
1428
|
onKeyDownCapture: core.keyboard.rootProps.onKeyDownCapture,
|
|
@@ -1519,7 +1441,7 @@ function KeyboardRoot({ core, children }) {
|
|
|
1519
1441
|
if (active instanceof HTMLElement && active !== document.body && root.contains(active)) return;
|
|
1520
1442
|
root.focus({ preventScroll: true });
|
|
1521
1443
|
}, [core.ref.id, core.ref.type]);
|
|
1522
|
-
return /* @__PURE__ */ (0,
|
|
1444
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1523
1445
|
"div",
|
|
1524
1446
|
{
|
|
1525
1447
|
ref: rootRef,
|
|
@@ -1537,19 +1459,19 @@ function DetailWindowPresentation({ data, onClose }) {
|
|
|
1537
1459
|
const core = useDetailCore(data, "window", { onClose });
|
|
1538
1460
|
const menuActions = useDetailMenuActions(core);
|
|
1539
1461
|
const Shell = requireShell(host.shells, "Window");
|
|
1540
|
-
return /* @__PURE__ */ (0,
|
|
1462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1541
1463
|
Shell,
|
|
1542
1464
|
{
|
|
1543
1465
|
instanceKey: detailInstanceKey(core.ref),
|
|
1544
1466
|
target: core.ref,
|
|
1545
1467
|
list: core.list.context,
|
|
1546
1468
|
title: core.title,
|
|
1547
|
-
titleNode: /* @__PURE__ */ (0,
|
|
1548
|
-
actions: /* @__PURE__ */ (0,
|
|
1549
|
-
navActions: /* @__PURE__ */ (0,
|
|
1469
|
+
titleNode: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailTitle, { core }) }),
|
|
1470
|
+
actions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core }) }),
|
|
1471
|
+
navActions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core, optional: "none" }) }),
|
|
1550
1472
|
menuActions,
|
|
1551
1473
|
onClose: core.close,
|
|
1552
|
-
children: /* @__PURE__ */ (0,
|
|
1474
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailBody, { core }) })
|
|
1553
1475
|
}
|
|
1554
1476
|
);
|
|
1555
1477
|
}
|
|
@@ -1558,18 +1480,18 @@ function DetailDockedPresentation({ data, onClose }) {
|
|
|
1558
1480
|
const core = useDetailCore(data, "docked", { onClose });
|
|
1559
1481
|
const menuActions = useDetailMenuActions(core);
|
|
1560
1482
|
const Shell = requireShell(host.shells, "Docked");
|
|
1561
|
-
return /* @__PURE__ */ (0,
|
|
1483
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1562
1484
|
Shell,
|
|
1563
1485
|
{
|
|
1564
1486
|
instanceKey: detailInstanceKey(core.ref),
|
|
1565
1487
|
target: core.ref,
|
|
1566
1488
|
title: core.title,
|
|
1567
|
-
titleNode: /* @__PURE__ */ (0,
|
|
1568
|
-
actions: /* @__PURE__ */ (0,
|
|
1569
|
-
navActions: /* @__PURE__ */ (0,
|
|
1489
|
+
titleNode: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailTitle, { core }) }),
|
|
1490
|
+
actions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core }) }),
|
|
1491
|
+
navActions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core, optional: "none" }) }),
|
|
1570
1492
|
menuActions,
|
|
1571
1493
|
onClose: core.close,
|
|
1572
|
-
children: /* @__PURE__ */ (0,
|
|
1494
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailBody, { core }) })
|
|
1573
1495
|
}
|
|
1574
1496
|
);
|
|
1575
1497
|
}
|
|
@@ -1578,18 +1500,18 @@ function DetailPagePresentation({ data }) {
|
|
|
1578
1500
|
const core = useDetailCore(data, "page", {});
|
|
1579
1501
|
const menuActions = useDetailMenuActions(core);
|
|
1580
1502
|
const Shell = requireShell(host.shells, "Page");
|
|
1581
|
-
return /* @__PURE__ */ (0,
|
|
1503
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1582
1504
|
Shell,
|
|
1583
1505
|
{
|
|
1584
1506
|
target: core.ref,
|
|
1585
1507
|
title: core.title,
|
|
1586
|
-
titleNode: /* @__PURE__ */ (0,
|
|
1587
|
-
actions: /* @__PURE__ */ (0,
|
|
1588
|
-
navActions: /* @__PURE__ */ (0,
|
|
1508
|
+
titleNode: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailTitle, { core }) }),
|
|
1509
|
+
actions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core }) }),
|
|
1510
|
+
navActions: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardActionsSlot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailActions, { core, optional: "none" }) }),
|
|
1589
1511
|
menuActions,
|
|
1590
1512
|
onClose: core.close,
|
|
1591
1513
|
onBack: core.leave,
|
|
1592
|
-
children: /* @__PURE__ */ (0,
|
|
1514
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardRoot, { core, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DetailBody, { core }) })
|
|
1593
1515
|
}
|
|
1594
1516
|
);
|
|
1595
1517
|
}
|