@flytedan/flytebot-design-system 0.12.13 → 0.12.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -405,14 +405,48 @@ var portal = (node) => {
405
405
  };
406
406
  var ROOT_LAYER = 0;
407
407
  var LAYER_STEP = 10;
408
+ var ROOT_STEP = 100;
409
+ var OVERLAY_CEILING = 1e4;
408
410
  var LayerContext = React2.createContext(ROOT_LAYER);
411
+ var openRootIds = [];
412
+ var rootListeners = /* @__PURE__ */ new Set();
413
+ var notifyRootListeners = () => {
414
+ rootListeners.forEach((listener) => listener());
415
+ };
416
+ var subscribeRootOverlays = (listener) => {
417
+ rootListeners.add(listener);
418
+ return () => {
419
+ rootListeners.delete(listener);
420
+ };
421
+ };
422
+ var getRootOverlaysSnapshot = () => openRootIds;
423
+ var registerRootOverlay = (id) => {
424
+ if (openRootIds.includes(id)) return;
425
+ openRootIds = [...openRootIds, id];
426
+ notifyRootListeners();
427
+ };
428
+ var unregisterRootOverlay = (id) => {
429
+ if (!openRootIds.includes(id)) return;
430
+ openRootIds = openRootIds.filter((existing) => existing !== id);
431
+ notifyRootListeners();
432
+ };
409
433
  var useLayer = () => React2.useContext(LayerContext);
410
- var useOverlayLayer = (base) => {
434
+ var useOverlayLayer = (isOpen) => {
411
435
  const parent = useLayer();
412
- return parent === ROOT_LAYER ? base : parent + LAYER_STEP;
436
+ const isRoot = parent === ROOT_LAYER;
437
+ const id = React2.useId();
438
+ const openIds = React2.useSyncExternalStore(subscribeRootOverlays, getRootOverlaysSnapshot, getRootOverlaysSnapshot);
439
+ React2.useLayoutEffect(() => {
440
+ if (!isRoot || !isOpen) return;
441
+ registerRootOverlay(id);
442
+ return () => unregisterRootOverlay(id);
443
+ }, [isRoot, isOpen, id]);
444
+ if (!isRoot) return parent + LAYER_STEP;
445
+ if (!isOpen) return ROOT_LAYER;
446
+ const index = openIds.indexOf(id);
447
+ return index === -1 ? ROOT_LAYER : (index + 1) * ROOT_STEP;
413
448
  };
414
449
  var LayerProvider = ({ zIndex, children }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(LayerContext.Provider, { value: zIndex, children });
415
- var POPOVER_BASE = 140;
416
450
  function Popover({
417
451
  open,
418
452
  anchorRef,
@@ -449,7 +483,7 @@ function Popover({
449
483
  layerRef: ref
450
484
  });
451
485
  const restore = React2.useRef(null);
452
- const zIndex = useOverlayLayer(POPOVER_BASE);
486
+ const zIndex = useOverlayLayer(!!open);
453
487
  React2.useEffect(() => {
454
488
  if (!open) return;
455
489
  restore.current = typeof document !== "undefined" ? document.activeElement : null;
@@ -778,7 +812,9 @@ function SegmentedControl({ options = [], value, onChange, className = "", ...re
778
812
 
779
813
  // src/components/textExposure.ts
780
814
  function truncationTitle(content) {
781
- return typeof content === "string" || typeof content === "number" ? String(content) : void 0;
815
+ if (typeof content !== "string" && typeof content !== "number") return void 0;
816
+ const text = String(content);
817
+ return text === "" ? void 0 : text;
782
818
  }
783
819
 
784
820
  // src/components/surfaces/Card.tsx
@@ -855,9 +891,8 @@ function Collapsible({
855
891
  var React4 = __toESM(require("react"), 1);
856
892
  var import_react_dom2 = require("react-dom");
857
893
  var import_jsx_runtime7 = require("react/jsx-runtime");
858
- var DRAWER_BASE = 90;
859
894
  function Drawer({ open = true, title, onClose, footer, children, className = "", ...rest }) {
860
- const zIndex = useOverlayLayer(DRAWER_BASE);
895
+ const zIndex = useOverlayLayer(open);
861
896
  const [closing, setClosing] = React4.useState(false);
862
897
  const close = React4.useCallback(() => {
863
898
  if (!onClose) return;
@@ -895,6 +930,7 @@ var import_react_dom3 = require("react-dom");
895
930
  var import_jsx_runtime8 = require("react/jsx-runtime");
896
931
  function Modal({ open = true, title, description, onClose, footer, wide = false, children, className = "", ...rest }) {
897
932
  const [closing, setClosing] = React5.useState(false);
933
+ const zIndex = useOverlayLayer(!!open);
898
934
  const close = React5.useCallback(() => {
899
935
  if (!onClose) return;
900
936
  setClosing(true);
@@ -910,10 +946,11 @@ function Modal({ open = true, title, description, onClose, footer, wide = false,
910
946
  }, [open, onClose, close]);
911
947
  if (!open) return null;
912
948
  return (0, import_react_dom3.createPortal)(
913
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
949
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(LayerProvider, { zIndex, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
914
950
  "div",
915
951
  {
916
952
  className: "fd-scrim" + (closing ? " is-closing" : ""),
953
+ style: { zIndex: zIndex - LAYER_STEP },
917
954
  onClick: onClose ? (e) => {
918
955
  if (e.target === e.currentTarget) close();
919
956
  } : void 0,
@@ -939,7 +976,7 @@ function Modal({ open = true, title, description, onClose, footer, wide = false,
939
976
  }
940
977
  )
941
978
  }
942
- ),
979
+ ) }),
943
980
  document.body
944
981
  );
945
982
  }
@@ -1074,7 +1111,7 @@ function SidebarNav({ brand, groups = [], current: current2, onNavigate, footer,
1074
1111
  onClick: onNavigate ? () => onNavigate(it.value) : void 0,
1075
1112
  children: [
1076
1113
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "fd-side-item-icon", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("i", { className: "ph ph-" + it.icon, "aria-hidden": "true" }) }),
1077
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: it.label }),
1114
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, title: truncationTitle(it.label), children: it.label }),
1078
1115
  it.preview ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Tip, { label: "Designed, backend not wired yet", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("i", { className: "ph ph-traffic-cone", style: { fontSize: 13, color: "var(--warn-solid)", flex: "none" } }) }) : null,
1079
1116
  it.locked ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Tip, { label: "You do not have permission for this", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("i", { className: "ph ph-lock-simple", style: { fontSize: 13, color: "var(--text-muted)", flex: "none" } }) }) : null,
1080
1117
  it.count !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "fd-side-item-count", children: it.count }) : null,
@@ -1177,7 +1214,6 @@ function Topbar({
1177
1214
  }
1178
1215
  )
1179
1216
  ] }, i)) }),
1180
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { flex: 1 } }),
1181
1217
  overflowActions != null ? narrow ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
1182
1218
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1183
1219
  "button",
@@ -1370,7 +1406,6 @@ function Toast({ title, children, tone = "success", onUndo, onDismiss, className
1370
1406
  // src/components/feedback/Tooltip.tsx
1371
1407
  var React7 = __toESM(require("react"), 1);
1372
1408
  var import_jsx_runtime24 = require("react/jsx-runtime");
1373
- var TOOLTIP_BASE = 150;
1374
1409
  var CLOSE_DELAY_MS = 120;
1375
1410
  function Tooltip({ label, placement = "top", children, className = "" }) {
1376
1411
  const anchorRef = React7.useRef(null);
@@ -1414,7 +1449,7 @@ function Tooltip({ label, placement = "top", children, className = "" }) {
1414
1449
  layerRef: bubbleRef,
1415
1450
  onDetach: hide
1416
1451
  });
1417
- const zIndex = useOverlayLayer(TOOLTIP_BASE);
1452
+ const zIndex = useOverlayLayer(open);
1418
1453
  React7.useEffect(() => {
1419
1454
  if (!open) return;
1420
1455
  const key = (e) => {
@@ -1657,11 +1692,10 @@ function DataTable({
1657
1692
  // src/components/data/FilterBar.tsx
1658
1693
  var React9 = __toESM(require("react"), 1);
1659
1694
  var import_jsx_runtime28 = require("react/jsx-runtime");
1660
- var FILTER_BAR_BASE = 120;
1661
1695
  var isSet = (v) => !(v == null || v === "" || v === false);
1662
1696
  function FilterBar({ fields = [], filters, onFilterChange, onFilterRemove, align = "left", className = "", ...rest }) {
1663
1697
  const [panel, setPanel] = React9.useState(null);
1664
- const zIndex = useOverlayLayer(FILTER_BAR_BASE);
1698
+ const zIndex = useOverlayLayer(!!panel);
1665
1699
  const rootRef = React9.useRef(null);
1666
1700
  const textInputRef = React9.useRef(null);
1667
1701
  const optionsRef = React9.useRef(null);
@@ -2857,10 +2891,9 @@ function ScoreMeter({
2857
2891
  // src/components/data/SortMenu.tsx
2858
2892
  var React15 = __toESM(require("react"), 1);
2859
2893
  var import_jsx_runtime37 = require("react/jsx-runtime");
2860
- var SORT_MENU_BASE = 120;
2861
2894
  function SortMenu({ fields = [], sort, onSort, align = "right", size = "md", className = "", ...rest }) {
2862
2895
  const [open, setOpen] = React15.useState(false);
2863
- const zIndex = useOverlayLayer(SORT_MENU_BASE);
2896
+ const zIndex = useOverlayLayer(open);
2864
2897
  const ref = React15.useRef(null);
2865
2898
  React15.useEffect(() => {
2866
2899
  if (!open) return;
@@ -2954,7 +2987,7 @@ function StepList({
2954
2987
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: ["fd-steps", dense ? "is-dense" : "", open ? "is-open" : "", className].filter(Boolean).join(" "), children: [
2955
2988
  /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("button", { type: "button", className: "fd-steps-head", onClick: toggle, "aria-expanded": open, children: [
2956
2989
  running ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-steps-spin", "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("i", { className: "ph ph-" + (failed ? "warning-circle" : "check-circle"), "aria-hidden": "true" }),
2957
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-steps-title", children: summary }),
2990
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-steps-title", title: truncationTitle(summary), children: summary }),
2958
2991
  /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "fd-steps-count fd-tabular", children: [
2959
2992
  steps.length,
2960
2993
  " step",
@@ -2982,11 +3015,11 @@ function StepList({
2982
3015
  "aria-expanded": isOpen,
2983
3016
  onClick: () => setExpanded((m) => Object.assign({}, m, { [id]: !isOpen })),
2984
3017
  children: [
2985
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: s.label }),
3018
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { title: truncationTitle(s.label), children: s.label }),
2986
3019
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("i", { className: "ph ph-caret-" + (isOpen ? "up" : "down"), "aria-hidden": "true" })
2987
3020
  ]
2988
3021
  }
2989
- ) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-step-label is-static", children: s.label }),
3022
+ ) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-step-label is-static", title: truncationTitle(s.label), children: s.label }),
2990
3023
  s.status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-step-badge is-error", children: "failed" }) : null,
2991
3024
  showDurations && s.durationMs ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "fd-step-dur fd-tabular", children: formatDuration(s.durationMs) }) : null
2992
3025
  ] }),
@@ -3212,7 +3245,7 @@ function EntityRow({
3212
3245
  // `title` is the exposure mechanism, same rule as every other identifier.
3213
3246
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "fd-erow-title fd-body-sm", title: truncationTitle(title), children: title })
3214
3247
  ),
3215
- meta ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "fd-erow-meta", children: meta }) : null
3248
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "fd-erow-meta", title: truncationTitle(meta), children: meta }) : null
3216
3249
  ] }),
3217
3250
  hasStrip ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("span", { className: "fd-erow-strip", children: [
3218
3251
  metrics && metrics.length ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(EntityRowMetrics, { metrics }) : null,
@@ -3548,7 +3581,7 @@ function TransferList({
3548
3581
  height: drag.height,
3549
3582
  transform: `translate(${drag.x - drag.offsetX}px, ${drag.y - drag.offsetY}px) rotate(-3deg)`,
3550
3583
  pointerEvents: "none",
3551
- zIndex: 1e3
3584
+ zIndex: OVERLAY_CEILING
3552
3585
  },
3553
3586
  children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(EntityRow, { ...renderRow(drag.item), draggable: true, className: "fd-erow-dragging" })
3554
3587
  }
@@ -3893,7 +3926,7 @@ function Select({
3893
3926
  style: { all: "unset", flex: 1, minWidth: 0, display: "flex", alignItems: "center", gap: 8, cursor: "inherit", overflow: "hidden" },
3894
3927
  children: [
3895
3928
  selected && selected.icon ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("i", { className: "ph ph-" + selected.icon, style: { flex: "none", color: "var(--text-2)" } }) : null,
3896
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: (multiple ? chosen.length : selected) ? "var(--text)" : "var(--text-muted)" }, children: boxText }),
3929
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { title: truncationTitle(boxText), style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: (multiple ? chosen.length : selected) ? "var(--text)" : "var(--text-muted)" }, children: boxText }),
3897
3930
  multiple && chosen.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("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
3898
3931
  ]
3899
3932
  }
@@ -4165,6 +4198,7 @@ function DatePicker({ label, help, error, required = false, disabled = false, ra
4165
4198
  type: "button",
4166
4199
  id: fieldId,
4167
4200
  "aria-labelledby": ariaLabelledBy,
4201
+ title: truncationTitle(display),
4168
4202
  disabled,
4169
4203
  onKeyDown: (e) => {
4170
4204
  if (e.key === "Enter" || e.key === " ") {
@@ -6989,7 +7023,7 @@ function AccountMenu({
6989
7023
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Avatar, { name: user.name }),
6990
7024
  /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "fd-stack", style: { gap: 1, minWidth: 0, flex: 1 }, children: [
6991
7025
  /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "fd-body-sm", style: { fontWeight: 700 }, children: user.name }),
6992
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "fd-body-sm fd-muted fd-table-trunc", children: user.email })
7026
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "fd-body-sm fd-muted fd-table-trunc", title: truncationTitle(user.email), children: user.email })
6993
7027
  ] })
6994
7028
  ] }),
6995
7029
  showRoles && session.roles.length ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "fd-row", style: { gap: 6, padding: "10px 14px", flexWrap: "wrap", borderBottom: "1px solid var(--border)" }, children: session.roles.map((r) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Badge, { tone: r.id === "owner" ? "success" : "neutral", children: r.name }, r.id)) }) : null,
@@ -7804,7 +7838,6 @@ function RoadmapTimeline({ onOpenFlag, title = "Roadmap", lede }) {
7804
7838
  var React36 = __toESM(require("react"), 1);
7805
7839
  var import_react_dom5 = require("react-dom");
7806
7840
  var import_jsx_runtime62 = require("react/jsx-runtime");
7807
- var SOON_HOVERCARD_BASE = 220;
7808
7841
  var BYPASS_STORE = "fd.soon.bypass.v1";
7809
7842
  function readBypassed() {
7810
7843
  try {
@@ -7999,7 +8032,7 @@ function ComingSoon({
7999
8032
  function InlineSoon({ label, detail, backend, eta, effort, onRoadmap, allowed, onBypass, blur, tip, className, rest, children }) {
8000
8033
  const [open, setOpen] = React36.useState(false);
8001
8034
  const [anchor, pos] = useHoverCard(open);
8002
- const zIndex = useOverlayLayer(SOON_HOVERCARD_BASE);
8035
+ const zIndex = useOverlayLayer(open);
8003
8036
  const close = React36.useRef(null);
8004
8037
  const show = () => {
8005
8038
  if (close.current) {
@@ -8188,11 +8221,10 @@ function PermissionHint({ perm, children }) {
8188
8221
  // src/components/platform/ModeSwitch.tsx
8189
8222
  var React37 = __toESM(require("react"), 1);
8190
8223
  var import_jsx_runtime64 = require("react/jsx-runtime");
8191
- var MODE_SWITCH_BASE = 140;
8192
8224
  function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog, onOpenSpec, summary }) {
8193
8225
  const mode2 = useRuntimeMode();
8194
8226
  const [open, setOpen] = React37.useState(false);
8195
- const zIndex = useOverlayLayer(MODE_SWITCH_BASE);
8227
+ const zIndex = useOverlayLayer(open);
8196
8228
  const ref = React37.useRef(null);
8197
8229
  React37.useEffect(() => {
8198
8230
  if (!open) return;
@@ -9299,7 +9331,7 @@ function PacketCard({ packet, schema, render, onApply, applied }) {
9299
9331
  return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("section", { className: "fdc-packet" + (invalid ? " is-invalid" : ""), "aria-label": title, children: [
9300
9332
  /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("header", { className: "fdc-packet-head", children: [
9301
9333
  /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("i", { className: "ph ph-" + (s.icon || "package"), "aria-hidden": "true" }),
9302
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "fdc-packet-title", children: title }),
9334
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "fdc-packet-title", title: truncationTitle(title), children: title }),
9303
9335
  packet.repaired ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "fdc-packet-badge", children: "Repaired" }) : null,
9304
9336
  invalid ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "fdc-packet-badge is-danger", children: "Invalid" }) : null
9305
9337
  ] }),
@@ -9804,7 +9836,7 @@ function ChatComposer({
9804
9836
  return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "fdc-composer" + (disabled ? " is-disabled" : "") + (narrow ? " is-narrow" : ""), children: [
9805
9837
  queue.length ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "fdc-queue", "aria-label": "Queued messages", children: queue.map((q) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "fdc-queue-row", children: [
9806
9838
  /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("i", { className: "ph ph-clock-countdown", "aria-hidden": "true" }),
9807
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "fdc-queue-text", children: q.text || (q.attachments ? q.attachments.length + " file(s)" : "") }),
9839
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("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)" : "") }),
9808
9840
  onRemoveQueued ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("button", { type: "button", className: "fdc-queue-x", onClick: () => onRemoveQueued(q.id), "aria-label": "Remove queued message", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("i", { className: "ph ph-x", "aria-hidden": "true" }) }) : null
9809
9841
  ] }, q.id)) }) : null,
9810
9842
  sessionBar,
@@ -9932,7 +9964,7 @@ function ChatSessionBar({ sessionStats, contextUsage, usageLimits, onClear, extr
9932
9964
  "aria-label": expandable ? "Usage details" : void 0,
9933
9965
  children: [
9934
9966
  cu ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "fdc-bar-mini", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(SegmentedMeter, { total, segments: cu.segments, height: 4, showTotal: false }) }) : null,
9935
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "fdc-bar-text", children: bits.join(" \xB7 ") }),
9967
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "fdc-bar-text", title: truncationTitle(bits.join(" \xB7 ")), children: bits.join(" \xB7 ") }),
9936
9968
  expandable ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("i", { className: "ph ph-caret-right fdc-bar-caret", "aria-hidden": "true" }) : null
9937
9969
  ]
9938
9970
  }
@@ -10326,8 +10358,8 @@ function AgentChatPanel({
10326
10358
  showHeader ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("header", { className: "fdc-head", children: [
10327
10359
  /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "fdc-head-mark", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("i", { className: "ph ph-" + assistantIcon }) }),
10328
10360
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("span", { className: "fdc-head-titles", children: [
10329
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "fdc-head-title", children: title }),
10330
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "fdc-head-sub", children: subtitle }) : null
10361
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "fdc-head-title", title: truncationTitle(title), children: title }),
10362
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "fdc-head-sub", title: truncationTitle(subtitle), children: subtitle }) : null
10331
10363
  ] }),
10332
10364
  /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("span", { className: "fdc-head-acts", children: [
10333
10365
  headerActions,