@flytedan/flytebot-design-system 0.12.12 → 0.12.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +84 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +84 -37
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/styles/components.css +26 -60
package/dist/index.js
CHANGED
|
@@ -197,14 +197,48 @@ var portal = (node) => {
|
|
|
197
197
|
};
|
|
198
198
|
var ROOT_LAYER = 0;
|
|
199
199
|
var LAYER_STEP = 10;
|
|
200
|
+
var ROOT_STEP = 100;
|
|
201
|
+
var OVERLAY_CEILING = 1e4;
|
|
200
202
|
var LayerContext = React2.createContext(ROOT_LAYER);
|
|
203
|
+
var openRootIds = [];
|
|
204
|
+
var rootListeners = /* @__PURE__ */ new Set();
|
|
205
|
+
var notifyRootListeners = () => {
|
|
206
|
+
rootListeners.forEach((listener) => listener());
|
|
207
|
+
};
|
|
208
|
+
var subscribeRootOverlays = (listener) => {
|
|
209
|
+
rootListeners.add(listener);
|
|
210
|
+
return () => {
|
|
211
|
+
rootListeners.delete(listener);
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
var getRootOverlaysSnapshot = () => openRootIds;
|
|
215
|
+
var registerRootOverlay = (id) => {
|
|
216
|
+
if (openRootIds.includes(id)) return;
|
|
217
|
+
openRootIds = [...openRootIds, id];
|
|
218
|
+
notifyRootListeners();
|
|
219
|
+
};
|
|
220
|
+
var unregisterRootOverlay = (id) => {
|
|
221
|
+
if (!openRootIds.includes(id)) return;
|
|
222
|
+
openRootIds = openRootIds.filter((existing) => existing !== id);
|
|
223
|
+
notifyRootListeners();
|
|
224
|
+
};
|
|
201
225
|
var useLayer = () => React2.useContext(LayerContext);
|
|
202
|
-
var useOverlayLayer = (
|
|
226
|
+
var useOverlayLayer = (isOpen) => {
|
|
203
227
|
const parent = useLayer();
|
|
204
|
-
|
|
228
|
+
const isRoot = parent === ROOT_LAYER;
|
|
229
|
+
const id = React2.useId();
|
|
230
|
+
const openIds = React2.useSyncExternalStore(subscribeRootOverlays, getRootOverlaysSnapshot, getRootOverlaysSnapshot);
|
|
231
|
+
React2.useLayoutEffect(() => {
|
|
232
|
+
if (!isRoot || !isOpen) return;
|
|
233
|
+
registerRootOverlay(id);
|
|
234
|
+
return () => unregisterRootOverlay(id);
|
|
235
|
+
}, [isRoot, isOpen, id]);
|
|
236
|
+
if (!isRoot) return parent + LAYER_STEP;
|
|
237
|
+
if (!isOpen) return ROOT_LAYER;
|
|
238
|
+
const index = openIds.indexOf(id);
|
|
239
|
+
return index === -1 ? ROOT_LAYER : (index + 1) * ROOT_STEP;
|
|
205
240
|
};
|
|
206
241
|
var LayerProvider = ({ zIndex, children }) => /* @__PURE__ */ jsx3(LayerContext.Provider, { value: zIndex, children });
|
|
207
|
-
var POPOVER_BASE = 140;
|
|
208
242
|
function Popover({
|
|
209
243
|
open,
|
|
210
244
|
anchorRef,
|
|
@@ -241,7 +275,7 @@ function Popover({
|
|
|
241
275
|
layerRef: ref
|
|
242
276
|
});
|
|
243
277
|
const restore = React2.useRef(null);
|
|
244
|
-
const zIndex = useOverlayLayer(
|
|
278
|
+
const zIndex = useOverlayLayer(!!open);
|
|
245
279
|
React2.useEffect(() => {
|
|
246
280
|
if (!open) return;
|
|
247
281
|
restore.current = typeof document !== "undefined" ? document.activeElement : null;
|
|
@@ -568,6 +602,13 @@ function SegmentedControl({ options = [], value, onChange, className = "", ...re
|
|
|
568
602
|
}) });
|
|
569
603
|
}
|
|
570
604
|
|
|
605
|
+
// src/components/textExposure.ts
|
|
606
|
+
function truncationTitle(content) {
|
|
607
|
+
if (typeof content !== "string" && typeof content !== "number") return void 0;
|
|
608
|
+
const text = String(content);
|
|
609
|
+
return text === "" ? void 0 : text;
|
|
610
|
+
}
|
|
611
|
+
|
|
571
612
|
// src/components/surfaces/Card.tsx
|
|
572
613
|
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
573
614
|
function Card({
|
|
@@ -589,7 +630,7 @@ function Card({
|
|
|
589
630
|
].filter(Boolean).join(" ");
|
|
590
631
|
return /* @__PURE__ */ jsxs4("div", { className: cls, ...rest, children: [
|
|
591
632
|
title ? /* @__PURE__ */ jsxs4("div", { className: "fd-card-head", children: [
|
|
592
|
-
/* @__PURE__ */ jsx5("span", { className: "fd-card-head-title", children: title }),
|
|
633
|
+
/* @__PURE__ */ jsx5("span", { className: "fd-card-head-title", title: truncationTitle(title), children: title }),
|
|
593
634
|
action
|
|
594
635
|
] }) : null,
|
|
595
636
|
padded ? /* @__PURE__ */ jsx5("div", { className: "fd-card-body", children }) : children,
|
|
@@ -642,9 +683,8 @@ function Collapsible({
|
|
|
642
683
|
import * as React4 from "react";
|
|
643
684
|
import { createPortal as createPortal2 } from "react-dom";
|
|
644
685
|
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
645
|
-
var DRAWER_BASE = 90;
|
|
646
686
|
function Drawer({ open = true, title, onClose, footer, children, className = "", ...rest }) {
|
|
647
|
-
const zIndex = useOverlayLayer(
|
|
687
|
+
const zIndex = useOverlayLayer(open);
|
|
648
688
|
const [closing, setClosing] = React4.useState(false);
|
|
649
689
|
const close = React4.useCallback(() => {
|
|
650
690
|
if (!onClose) return;
|
|
@@ -665,7 +705,7 @@ function Drawer({ open = true, title, onClose, footer, children, className = "",
|
|
|
665
705
|
/* @__PURE__ */ jsx7("div", { className: "fd-scrim" + (closing ? " is-closing" : ""), style: { display: "block", zIndex: zIndex - LAYER_STEP }, onClick: close }),
|
|
666
706
|
/* @__PURE__ */ jsxs6("aside", { className: ["fd-drawer", closing ? "is-closing" : "", className].filter(Boolean).join(" "), role: "dialog", "aria-modal": "true", ...rest, style: { zIndex }, children: [
|
|
667
707
|
/* @__PURE__ */ jsxs6("div", { className: "fd-card-head", style: { flex: "none" }, children: [
|
|
668
|
-
/* @__PURE__ */ jsx7("span", { className: "fd-card-head-title", children: title }),
|
|
708
|
+
/* @__PURE__ */ jsx7("span", { className: "fd-card-head-title", title: truncationTitle(title), children: title }),
|
|
669
709
|
onClose ? /* @__PURE__ */ jsx7("button", { type: "button", className: "fd-btn-icon", "aria-label": "Close", onClick: close, children: /* @__PURE__ */ jsx7("i", { className: "ph ph-x" }) }) : null
|
|
670
710
|
] }),
|
|
671
711
|
/* @__PURE__ */ jsx7("div", { style: { flex: "1 1 auto", minHeight: 0, overflow: "auto", padding: 20 }, children }),
|
|
@@ -682,6 +722,7 @@ import { createPortal as createPortal3 } from "react-dom";
|
|
|
682
722
|
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
683
723
|
function Modal({ open = true, title, description, onClose, footer, wide = false, children, className = "", ...rest }) {
|
|
684
724
|
const [closing, setClosing] = React5.useState(false);
|
|
725
|
+
const zIndex = useOverlayLayer(!!open);
|
|
685
726
|
const close = React5.useCallback(() => {
|
|
686
727
|
if (!onClose) return;
|
|
687
728
|
setClosing(true);
|
|
@@ -697,10 +738,11 @@ function Modal({ open = true, title, description, onClose, footer, wide = false,
|
|
|
697
738
|
}, [open, onClose, close]);
|
|
698
739
|
if (!open) return null;
|
|
699
740
|
return createPortal3(
|
|
700
|
-
/* @__PURE__ */ jsx8(
|
|
741
|
+
/* @__PURE__ */ jsx8(LayerProvider, { zIndex, children: /* @__PURE__ */ jsx8(
|
|
701
742
|
"div",
|
|
702
743
|
{
|
|
703
744
|
className: "fd-scrim" + (closing ? " is-closing" : ""),
|
|
745
|
+
style: { zIndex: zIndex - LAYER_STEP },
|
|
704
746
|
onClick: onClose ? (e) => {
|
|
705
747
|
if (e.target === e.currentTarget) close();
|
|
706
748
|
} : void 0,
|
|
@@ -726,7 +768,7 @@ function Modal({ open = true, title, description, onClose, footer, wide = false,
|
|
|
726
768
|
}
|
|
727
769
|
)
|
|
728
770
|
}
|
|
729
|
-
),
|
|
771
|
+
) }),
|
|
730
772
|
document.body
|
|
731
773
|
);
|
|
732
774
|
}
|
|
@@ -861,7 +903,7 @@ function SidebarNav({ brand, groups = [], current: current2, onNavigate, footer,
|
|
|
861
903
|
onClick: onNavigate ? () => onNavigate(it.value) : void 0,
|
|
862
904
|
children: [
|
|
863
905
|
/* @__PURE__ */ jsx13("span", { className: "fd-side-item-icon", children: /* @__PURE__ */ jsx13("i", { className: "ph ph-" + it.icon, "aria-hidden": "true" }) }),
|
|
864
|
-
/* @__PURE__ */ jsx13("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: it.label }),
|
|
906
|
+
/* @__PURE__ */ jsx13("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, title: truncationTitle(it.label), children: it.label }),
|
|
865
907
|
it.preview ? /* @__PURE__ */ jsx13(Tip, { label: "Designed, backend not wired yet", children: /* @__PURE__ */ jsx13("i", { className: "ph ph-traffic-cone", style: { fontSize: 13, color: "var(--warn-solid)", flex: "none" } }) }) : null,
|
|
866
908
|
it.locked ? /* @__PURE__ */ jsx13(Tip, { label: "You do not have permission for this", children: /* @__PURE__ */ jsx13("i", { className: "ph ph-lock-simple", style: { fontSize: 13, color: "var(--text-muted)", flex: "none" } }) }) : null,
|
|
867
909
|
it.count !== void 0 ? /* @__PURE__ */ jsx13("span", { className: "fd-side-item-count", children: it.count }) : null,
|
|
@@ -947,7 +989,12 @@ function Topbar({
|
|
|
947
989
|
onMenu ? /* @__PURE__ */ jsx16("button", { type: "button", className: "fd-btn-icon", "aria-label": "Menu", onClick: onMenu, children: /* @__PURE__ */ jsx16("i", { className: "ph ph-list" }) }) : null,
|
|
948
990
|
/* @__PURE__ */ jsx16("nav", { className: "fd-crumb", "aria-label": "Breadcrumb", children: crumbs.map((c, i) => /* @__PURE__ */ jsxs13(React6.Fragment, { children: [
|
|
949
991
|
i > 0 ? /* @__PURE__ */ jsx16("i", { className: "ph ph-caret-right", style: { fontSize: 11, opacity: 0.6 }, "aria-hidden": "true" }) : null,
|
|
950
|
-
i === crumbs.length - 1 ?
|
|
992
|
+
i === crumbs.length - 1 ? (
|
|
993
|
+
// MP-141: the current crumb mixes a static route label with (usually) a
|
|
994
|
+
// user-entered campaign name and is single-line by design — exposure,
|
|
995
|
+
// not wrapping, is the fix here, same rule as every other identifier.
|
|
996
|
+
/* @__PURE__ */ jsx16("span", { className: "fd-crumb-current", title: truncationTitle(c.label), children: c.label })
|
|
997
|
+
) : /* @__PURE__ */ jsx16(
|
|
951
998
|
"a",
|
|
952
999
|
{
|
|
953
1000
|
href: c.href || "#",
|
|
@@ -1152,7 +1199,6 @@ function Toast({ title, children, tone = "success", onUndo, onDismiss, className
|
|
|
1152
1199
|
// src/components/feedback/Tooltip.tsx
|
|
1153
1200
|
import * as React7 from "react";
|
|
1154
1201
|
import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1155
|
-
var TOOLTIP_BASE = 150;
|
|
1156
1202
|
var CLOSE_DELAY_MS = 120;
|
|
1157
1203
|
function Tooltip({ label, placement = "top", children, className = "" }) {
|
|
1158
1204
|
const anchorRef = React7.useRef(null);
|
|
@@ -1196,7 +1242,7 @@ function Tooltip({ label, placement = "top", children, className = "" }) {
|
|
|
1196
1242
|
layerRef: bubbleRef,
|
|
1197
1243
|
onDetach: hide
|
|
1198
1244
|
});
|
|
1199
|
-
const zIndex = useOverlayLayer(
|
|
1245
|
+
const zIndex = useOverlayLayer(open);
|
|
1200
1246
|
React7.useEffect(() => {
|
|
1201
1247
|
if (!open) return;
|
|
1202
1248
|
const key = (e) => {
|
|
@@ -1439,11 +1485,10 @@ function DataTable({
|
|
|
1439
1485
|
// src/components/data/FilterBar.tsx
|
|
1440
1486
|
import * as React9 from "react";
|
|
1441
1487
|
import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1442
|
-
var FILTER_BAR_BASE = 120;
|
|
1443
1488
|
var isSet = (v) => !(v == null || v === "" || v === false);
|
|
1444
1489
|
function FilterBar({ fields = [], filters, onFilterChange, onFilterRemove, align = "left", className = "", ...rest }) {
|
|
1445
1490
|
const [panel, setPanel] = React9.useState(null);
|
|
1446
|
-
const zIndex = useOverlayLayer(
|
|
1491
|
+
const zIndex = useOverlayLayer(!!panel);
|
|
1447
1492
|
const rootRef = React9.useRef(null);
|
|
1448
1493
|
const textInputRef = React9.useRef(null);
|
|
1449
1494
|
const optionsRef = React9.useRef(null);
|
|
@@ -2542,12 +2587,12 @@ function SegmentedMeter({
|
|
|
2542
2587
|
legend ? /* @__PURE__ */ jsxs31("ul", { className: "fd-segmeter-legend", children: [
|
|
2543
2588
|
items.map((s, i) => /* @__PURE__ */ jsxs31("li", { children: [
|
|
2544
2589
|
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-dot", style: { background: fill(s, i) }, "aria-hidden": "true" }),
|
|
2545
|
-
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-key", children: s.label }),
|
|
2590
|
+
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-key", title: truncationTitle(s.label), children: s.label }),
|
|
2546
2591
|
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-val fd-tabular", children: format(s.value) })
|
|
2547
2592
|
] }, s.id || s.label || i)),
|
|
2548
2593
|
safeTotal && used < safeTotal ? /* @__PURE__ */ jsxs31("li", { className: "is-remainder", children: [
|
|
2549
2594
|
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-dot is-empty", "aria-hidden": "true" }),
|
|
2550
|
-
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-key", children: remainderLabel }),
|
|
2595
|
+
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-key", title: truncationTitle(remainderLabel), children: remainderLabel }),
|
|
2551
2596
|
/* @__PURE__ */ jsx34("span", { className: "fd-segmeter-val fd-tabular", children: format(safeTotal - used) })
|
|
2552
2597
|
] }) : null
|
|
2553
2598
|
] }) : null
|
|
@@ -2639,10 +2684,9 @@ function ScoreMeter({
|
|
|
2639
2684
|
// src/components/data/SortMenu.tsx
|
|
2640
2685
|
import * as React15 from "react";
|
|
2641
2686
|
import { jsx as jsx36, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
2642
|
-
var SORT_MENU_BASE = 120;
|
|
2643
2687
|
function SortMenu({ fields = [], sort, onSort, align = "right", size = "md", className = "", ...rest }) {
|
|
2644
2688
|
const [open, setOpen] = React15.useState(false);
|
|
2645
|
-
const zIndex = useOverlayLayer(
|
|
2689
|
+
const zIndex = useOverlayLayer(open);
|
|
2646
2690
|
const ref = React15.useRef(null);
|
|
2647
2691
|
React15.useEffect(() => {
|
|
2648
2692
|
if (!open) return;
|
|
@@ -2736,7 +2780,7 @@ function StepList({
|
|
|
2736
2780
|
return /* @__PURE__ */ jsxs34("div", { className: ["fd-steps", dense ? "is-dense" : "", open ? "is-open" : "", className].filter(Boolean).join(" "), children: [
|
|
2737
2781
|
/* @__PURE__ */ jsxs34("button", { type: "button", className: "fd-steps-head", onClick: toggle, "aria-expanded": open, children: [
|
|
2738
2782
|
running ? /* @__PURE__ */ jsx37("span", { className: "fd-steps-spin", "aria-hidden": "true" }) : /* @__PURE__ */ jsx37("i", { className: "ph ph-" + (failed ? "warning-circle" : "check-circle"), "aria-hidden": "true" }),
|
|
2739
|
-
/* @__PURE__ */ jsx37("span", { className: "fd-steps-title", children: summary }),
|
|
2783
|
+
/* @__PURE__ */ jsx37("span", { className: "fd-steps-title", title: truncationTitle(summary), children: summary }),
|
|
2740
2784
|
/* @__PURE__ */ jsxs34("span", { className: "fd-steps-count fd-tabular", children: [
|
|
2741
2785
|
steps.length,
|
|
2742
2786
|
" step",
|
|
@@ -2764,11 +2808,11 @@ function StepList({
|
|
|
2764
2808
|
"aria-expanded": isOpen,
|
|
2765
2809
|
onClick: () => setExpanded((m) => Object.assign({}, m, { [id]: !isOpen })),
|
|
2766
2810
|
children: [
|
|
2767
|
-
/* @__PURE__ */ jsx37("span", { children: s.label }),
|
|
2811
|
+
/* @__PURE__ */ jsx37("span", { title: truncationTitle(s.label), children: s.label }),
|
|
2768
2812
|
/* @__PURE__ */ jsx37("i", { className: "ph ph-caret-" + (isOpen ? "up" : "down"), "aria-hidden": "true" })
|
|
2769
2813
|
]
|
|
2770
2814
|
}
|
|
2771
|
-
) : /* @__PURE__ */ jsx37("span", { className: "fd-step-label is-static", children: s.label }),
|
|
2815
|
+
) : /* @__PURE__ */ jsx37("span", { className: "fd-step-label is-static", title: truncationTitle(s.label), children: s.label }),
|
|
2772
2816
|
s.status === "error" ? /* @__PURE__ */ jsx37("span", { className: "fd-step-badge is-error", children: "failed" }) : null,
|
|
2773
2817
|
showDurations && s.durationMs ? /* @__PURE__ */ jsx37("span", { className: "fd-step-dur fd-tabular", children: formatDuration(s.durationMs) }) : null
|
|
2774
2818
|
] }),
|
|
@@ -2989,8 +3033,12 @@ function EntityRow({
|
|
|
2989
3033
|
/* @__PURE__ */ jsx39("span", { className: "fd-erow-title fd-body-sm", children: title })
|
|
2990
3034
|
]
|
|
2991
3035
|
}
|
|
2992
|
-
) }) :
|
|
2993
|
-
|
|
3036
|
+
) }) : (
|
|
3037
|
+
// MP-141: dense-row identifier, no Tooltip wrapper in this branch — a native
|
|
3038
|
+
// `title` is the exposure mechanism, same rule as every other identifier.
|
|
3039
|
+
/* @__PURE__ */ jsx39("span", { className: "fd-erow-title fd-body-sm", title: truncationTitle(title), children: title })
|
|
3040
|
+
),
|
|
3041
|
+
meta ? /* @__PURE__ */ jsx39("span", { className: "fd-erow-meta", title: truncationTitle(meta), children: meta }) : null
|
|
2994
3042
|
] }),
|
|
2995
3043
|
hasStrip ? /* @__PURE__ */ jsxs36("span", { className: "fd-erow-strip", children: [
|
|
2996
3044
|
metrics && metrics.length ? /* @__PURE__ */ jsx39(EntityRowMetrics, { metrics }) : null,
|
|
@@ -3326,7 +3374,7 @@ function TransferList({
|
|
|
3326
3374
|
height: drag.height,
|
|
3327
3375
|
transform: `translate(${drag.x - drag.offsetX}px, ${drag.y - drag.offsetY}px) rotate(-3deg)`,
|
|
3328
3376
|
pointerEvents: "none",
|
|
3329
|
-
zIndex:
|
|
3377
|
+
zIndex: OVERLAY_CEILING
|
|
3330
3378
|
},
|
|
3331
3379
|
children: /* @__PURE__ */ jsx43(EntityRow, { ...renderRow(drag.item), draggable: true, className: "fd-erow-dragging" })
|
|
3332
3380
|
}
|
|
@@ -3671,7 +3719,7 @@ function Select({
|
|
|
3671
3719
|
style: { all: "unset", flex: 1, minWidth: 0, display: "flex", alignItems: "center", gap: 8, cursor: "inherit", overflow: "hidden" },
|
|
3672
3720
|
children: [
|
|
3673
3721
|
selected && selected.icon ? /* @__PURE__ */ jsx49("i", { className: "ph ph-" + selected.icon, style: { flex: "none", color: "var(--text-2)" } }) : null,
|
|
3674
|
-
/* @__PURE__ */ jsx49("span", { style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: (multiple ? chosen.length : selected) ? "var(--text)" : "var(--text-muted)" }, children: boxText }),
|
|
3722
|
+
/* @__PURE__ */ jsx49("span", { title: truncationTitle(boxText), style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: (multiple ? chosen.length : selected) ? "var(--text)" : "var(--text-muted)" }, children: boxText }),
|
|
3675
3723
|
multiple && chosen.length > 1 ? /* @__PURE__ */ jsx49("span", { className: "fd-mono", style: { flex: "none", fontSize: 11, fontWeight: 700, padding: "1px 6px", borderRadius: 99, background: "var(--brand)", color: "#fff" }, children: chosen.length }) : null
|
|
3676
3724
|
]
|
|
3677
3725
|
}
|
|
@@ -3943,6 +3991,7 @@ function DatePicker({ label, help, error, required = false, disabled = false, ra
|
|
|
3943
3991
|
type: "button",
|
|
3944
3992
|
id: fieldId,
|
|
3945
3993
|
"aria-labelledby": ariaLabelledBy,
|
|
3994
|
+
title: truncationTitle(display),
|
|
3946
3995
|
disabled,
|
|
3947
3996
|
onKeyDown: (e) => {
|
|
3948
3997
|
if (e.key === "Enter" || e.key === " ") {
|
|
@@ -6767,7 +6816,7 @@ function AccountMenu({
|
|
|
6767
6816
|
/* @__PURE__ */ jsx57(Avatar, { name: user.name }),
|
|
6768
6817
|
/* @__PURE__ */ jsxs53("span", { className: "fd-stack", style: { gap: 1, minWidth: 0, flex: 1 }, children: [
|
|
6769
6818
|
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm", style: { fontWeight: 700 }, children: user.name }),
|
|
6770
|
-
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm fd-muted fd-table-trunc", children: user.email })
|
|
6819
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm fd-muted fd-table-trunc", title: truncationTitle(user.email), children: user.email })
|
|
6771
6820
|
] })
|
|
6772
6821
|
] }),
|
|
6773
6822
|
showRoles && session.roles.length ? /* @__PURE__ */ jsx57("div", { className: "fd-row", style: { gap: 6, padding: "10px 14px", flexWrap: "wrap", borderBottom: "1px solid var(--border)" }, children: session.roles.map((r) => /* @__PURE__ */ jsx57(Badge, { tone: r.id === "owner" ? "success" : "neutral", children: r.name }, r.id)) }) : null,
|
|
@@ -7582,7 +7631,6 @@ function RoadmapTimeline({ onOpenFlag, title = "Roadmap", lede }) {
|
|
|
7582
7631
|
import * as React36 from "react";
|
|
7583
7632
|
import { createPortal as createPortal5 } from "react-dom";
|
|
7584
7633
|
import { Fragment as Fragment16, jsx as jsx61, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
7585
|
-
var SOON_HOVERCARD_BASE = 220;
|
|
7586
7634
|
var BYPASS_STORE = "fd.soon.bypass.v1";
|
|
7587
7635
|
function readBypassed() {
|
|
7588
7636
|
try {
|
|
@@ -7777,7 +7825,7 @@ function ComingSoon({
|
|
|
7777
7825
|
function InlineSoon({ label, detail, backend, eta, effort, onRoadmap, allowed, onBypass, blur, tip, className, rest, children }) {
|
|
7778
7826
|
const [open, setOpen] = React36.useState(false);
|
|
7779
7827
|
const [anchor, pos] = useHoverCard(open);
|
|
7780
|
-
const zIndex = useOverlayLayer(
|
|
7828
|
+
const zIndex = useOverlayLayer(open);
|
|
7781
7829
|
const close = React36.useRef(null);
|
|
7782
7830
|
const show = () => {
|
|
7783
7831
|
if (close.current) {
|
|
@@ -7966,11 +8014,10 @@ function PermissionHint({ perm, children }) {
|
|
|
7966
8014
|
// src/components/platform/ModeSwitch.tsx
|
|
7967
8015
|
import * as React37 from "react";
|
|
7968
8016
|
import { Fragment as Fragment17, jsx as jsx63, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
7969
|
-
var MODE_SWITCH_BASE = 140;
|
|
7970
8017
|
function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog, onOpenSpec, summary }) {
|
|
7971
8018
|
const mode2 = useRuntimeMode();
|
|
7972
8019
|
const [open, setOpen] = React37.useState(false);
|
|
7973
|
-
const zIndex = useOverlayLayer(
|
|
8020
|
+
const zIndex = useOverlayLayer(open);
|
|
7974
8021
|
const ref = React37.useRef(null);
|
|
7975
8022
|
React37.useEffect(() => {
|
|
7976
8023
|
if (!open) return;
|
|
@@ -9077,7 +9124,7 @@ function PacketCard({ packet, schema, render, onApply, applied }) {
|
|
|
9077
9124
|
return /* @__PURE__ */ jsxs68("section", { className: "fdc-packet" + (invalid ? " is-invalid" : ""), "aria-label": title, children: [
|
|
9078
9125
|
/* @__PURE__ */ jsxs68("header", { className: "fdc-packet-head", children: [
|
|
9079
9126
|
/* @__PURE__ */ jsx72("i", { className: "ph ph-" + (s.icon || "package"), "aria-hidden": "true" }),
|
|
9080
|
-
/* @__PURE__ */ jsx72("span", { className: "fdc-packet-title", children: title }),
|
|
9127
|
+
/* @__PURE__ */ jsx72("span", { className: "fdc-packet-title", title: truncationTitle(title), children: title }),
|
|
9081
9128
|
packet.repaired ? /* @__PURE__ */ jsx72("span", { className: "fdc-packet-badge", children: "Repaired" }) : null,
|
|
9082
9129
|
invalid ? /* @__PURE__ */ jsx72("span", { className: "fdc-packet-badge is-danger", children: "Invalid" }) : null
|
|
9083
9130
|
] }),
|
|
@@ -9582,7 +9629,7 @@ function ChatComposer({
|
|
|
9582
9629
|
return /* @__PURE__ */ jsxs70("div", { className: "fdc-composer" + (disabled ? " is-disabled" : "") + (narrow ? " is-narrow" : ""), children: [
|
|
9583
9630
|
queue.length ? /* @__PURE__ */ jsx74("div", { className: "fdc-queue", "aria-label": "Queued messages", children: queue.map((q) => /* @__PURE__ */ jsxs70("div", { className: "fdc-queue-row", children: [
|
|
9584
9631
|
/* @__PURE__ */ jsx74("i", { className: "ph ph-clock-countdown", "aria-hidden": "true" }),
|
|
9585
|
-
/* @__PURE__ */ jsx74("span", { className: "fdc-queue-text", children: q.text || (q.attachments ? q.attachments.length + " file(s)" : "") }),
|
|
9632
|
+
/* @__PURE__ */ jsx74("span", { className: "fdc-queue-text", title: truncationTitle(q.text || (q.attachments ? q.attachments.length + " file(s)" : "")), children: q.text || (q.attachments ? q.attachments.length + " file(s)" : "") }),
|
|
9586
9633
|
onRemoveQueued ? /* @__PURE__ */ jsx74("button", { type: "button", className: "fdc-queue-x", onClick: () => onRemoveQueued(q.id), "aria-label": "Remove queued message", children: /* @__PURE__ */ jsx74("i", { className: "ph ph-x", "aria-hidden": "true" }) }) : null
|
|
9587
9634
|
] }, q.id)) }) : null,
|
|
9588
9635
|
sessionBar,
|
|
@@ -9710,7 +9757,7 @@ function ChatSessionBar({ sessionStats, contextUsage, usageLimits, onClear, extr
|
|
|
9710
9757
|
"aria-label": expandable ? "Usage details" : void 0,
|
|
9711
9758
|
children: [
|
|
9712
9759
|
cu ? /* @__PURE__ */ jsx75("span", { className: "fdc-bar-mini", "aria-hidden": "true", children: /* @__PURE__ */ jsx75(SegmentedMeter, { total, segments: cu.segments, height: 4, showTotal: false }) }) : null,
|
|
9713
|
-
/* @__PURE__ */ jsx75("span", { className: "fdc-bar-text", children: bits.join(" \xB7 ") }),
|
|
9760
|
+
/* @__PURE__ */ jsx75("span", { className: "fdc-bar-text", title: truncationTitle(bits.join(" \xB7 ")), children: bits.join(" \xB7 ") }),
|
|
9714
9761
|
expandable ? /* @__PURE__ */ jsx75("i", { className: "ph ph-caret-right fdc-bar-caret", "aria-hidden": "true" }) : null
|
|
9715
9762
|
]
|
|
9716
9763
|
}
|
|
@@ -10104,8 +10151,8 @@ function AgentChatPanel({
|
|
|
10104
10151
|
showHeader ? /* @__PURE__ */ jsxs72("header", { className: "fdc-head", children: [
|
|
10105
10152
|
/* @__PURE__ */ jsx76("span", { className: "fdc-head-mark", "aria-hidden": "true", children: /* @__PURE__ */ jsx76("i", { className: "ph ph-" + assistantIcon }) }),
|
|
10106
10153
|
/* @__PURE__ */ jsxs72("span", { className: "fdc-head-titles", children: [
|
|
10107
|
-
/* @__PURE__ */ jsx76("span", { className: "fdc-head-title", children: title }),
|
|
10108
|
-
subtitle ? /* @__PURE__ */ jsx76("span", { className: "fdc-head-sub", children: subtitle }) : null
|
|
10154
|
+
/* @__PURE__ */ jsx76("span", { className: "fdc-head-title", title: truncationTitle(title), children: title }),
|
|
10155
|
+
subtitle ? /* @__PURE__ */ jsx76("span", { className: "fdc-head-sub", title: truncationTitle(subtitle), children: subtitle }) : null
|
|
10109
10156
|
] }),
|
|
10110
10157
|
/* @__PURE__ */ jsxs72("span", { className: "fdc-head-acts", children: [
|
|
10111
10158
|
headerActions,
|