@flytedan/flytebot-design-system 0.56.0 → 0.58.0
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 +163 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -10
- package/dist/index.d.ts +32 -10
- package/dist/index.js +182 -64
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/styles/components.css +7 -0
package/dist/index.js
CHANGED
|
@@ -1128,9 +1128,11 @@ import * as React10 from "react";
|
|
|
1128
1128
|
// src/kits/cornerStack.tsx
|
|
1129
1129
|
import * as React9 from "react";
|
|
1130
1130
|
import { createPortal as createPortal4 } from "react-dom";
|
|
1131
|
+
var CORNER_STACK_INSET_PROPERTY = "--fd-corner-stack-inset";
|
|
1131
1132
|
var SLOTS = ["jobs", "toasts"];
|
|
1132
1133
|
var references = /* @__PURE__ */ new Map();
|
|
1133
1134
|
var host = null;
|
|
1135
|
+
var hostObserver = null;
|
|
1134
1136
|
var slotElements = /* @__PURE__ */ new Map();
|
|
1135
1137
|
function createHost() {
|
|
1136
1138
|
const stack = document.createElement("div");
|
|
@@ -1144,8 +1146,18 @@ function createHost() {
|
|
|
1144
1146
|
slotElements.set(slot, element);
|
|
1145
1147
|
}
|
|
1146
1148
|
document.body.appendChild(stack);
|
|
1149
|
+
publishInset(stack);
|
|
1150
|
+
if (typeof ResizeObserver === "function") {
|
|
1151
|
+
hostObserver = new ResizeObserver(() => publishInset(stack));
|
|
1152
|
+
hostObserver.observe(stack);
|
|
1153
|
+
}
|
|
1147
1154
|
return stack;
|
|
1148
1155
|
}
|
|
1156
|
+
function publishInset(stack) {
|
|
1157
|
+
const height = stack.offsetHeight;
|
|
1158
|
+
const inset = height > 0 ? height + parseFloat(getComputedStyle(stack).bottom) : 0;
|
|
1159
|
+
document.documentElement.style.setProperty(CORNER_STACK_INSET_PROPERTY, `${inset}px`);
|
|
1160
|
+
}
|
|
1149
1161
|
function acquire(slot) {
|
|
1150
1162
|
host ??= createHost();
|
|
1151
1163
|
references.set(slot, (references.get(slot) ?? 0) + 1);
|
|
@@ -1156,6 +1168,9 @@ function release(slot) {
|
|
|
1156
1168
|
if (remaining > 0) references.set(slot, remaining);
|
|
1157
1169
|
else references.delete(slot);
|
|
1158
1170
|
if (references.size === 0 && host) {
|
|
1171
|
+
hostObserver?.disconnect();
|
|
1172
|
+
hostObserver = null;
|
|
1173
|
+
document.documentElement.style.removeProperty(CORNER_STACK_INSET_PROPERTY);
|
|
1159
1174
|
host.remove();
|
|
1160
1175
|
host = null;
|
|
1161
1176
|
slotElements.clear();
|
|
@@ -1594,7 +1609,7 @@ function AppShell({
|
|
|
1594
1609
|
/* @__PURE__ */ jsx21(
|
|
1595
1610
|
"div",
|
|
1596
1611
|
{
|
|
1597
|
-
className: contentClassName,
|
|
1612
|
+
className: ["fd-app-shell-content", contentClassName].filter(Boolean).join(" "),
|
|
1598
1613
|
style: {
|
|
1599
1614
|
flex: 1,
|
|
1600
1615
|
minWidth: 0,
|
|
@@ -1602,7 +1617,6 @@ function AppShell({
|
|
|
1602
1617
|
// table) is contained and clipped by this scroller, never stretching the document.
|
|
1603
1618
|
position: "relative",
|
|
1604
1619
|
overflowY: "auto",
|
|
1605
|
-
padding: 24,
|
|
1606
1620
|
maxWidth: contentMaxWidth,
|
|
1607
1621
|
margin: "0 auto",
|
|
1608
1622
|
width: "100%",
|
|
@@ -5427,53 +5441,156 @@ function InlinePanelSurface({ panel, align = "right", ...popover }) {
|
|
|
5427
5441
|
}
|
|
5428
5442
|
|
|
5429
5443
|
// src/components/data/SortMenu.tsx
|
|
5430
|
-
import { jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
5431
|
-
|
|
5444
|
+
import { Fragment as Fragment11, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
5445
|
+
var directionWord = (field, dir) => dir === "asc" ? field.numeric ? "lowest first" : "A to Z" : field.numeric ? "highest first" : "Z to A";
|
|
5446
|
+
function moved(sort, from, to) {
|
|
5447
|
+
const next = [...sort];
|
|
5448
|
+
const [entry] = next.splice(from, 1);
|
|
5449
|
+
next.splice(to, 0, entry);
|
|
5450
|
+
return next;
|
|
5451
|
+
}
|
|
5452
|
+
function SortMenu({
|
|
5453
|
+
fields = [],
|
|
5454
|
+
sort = [],
|
|
5455
|
+
onSortChange,
|
|
5456
|
+
multiple = false,
|
|
5457
|
+
align = "right",
|
|
5458
|
+
size = "md",
|
|
5459
|
+
className = "",
|
|
5460
|
+
...rest
|
|
5461
|
+
}) {
|
|
5432
5462
|
const panel = useInlinePanel();
|
|
5433
5463
|
const { open: open2, setOpen, ref } = panel;
|
|
5434
|
-
const
|
|
5435
|
-
const
|
|
5436
|
-
const
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5464
|
+
const change = (next) => onSortChange && onSortChange(next);
|
|
5465
|
+
const fieldOf = (key) => fields.find((f) => f.key === key);
|
|
5466
|
+
const active = sort.filter((entry) => fieldOf(entry.key));
|
|
5467
|
+
const first = active[0];
|
|
5468
|
+
const firstField = first && fieldOf(first.key);
|
|
5469
|
+
const triggerLabel = firstField ? firstField.label + (active.length > 1 ? " +" + (active.length - 1) : "") : "Unsorted";
|
|
5470
|
+
const triggerTitle = active.map((entry) => {
|
|
5471
|
+
const field = fieldOf(entry.key);
|
|
5472
|
+
return field.label + " " + directionWord(field, entry.dir);
|
|
5473
|
+
}).join(", then ");
|
|
5474
|
+
const arrow = (field, dir, on, onClick) => /* @__PURE__ */ jsx57(
|
|
5475
|
+
"button",
|
|
5476
|
+
{
|
|
5477
|
+
type: "button",
|
|
5478
|
+
"aria-label": field.label + ", " + directionWord(field, dir),
|
|
5479
|
+
"aria-pressed": on,
|
|
5480
|
+
onClick,
|
|
5481
|
+
style: {
|
|
5482
|
+
display: "grid",
|
|
5483
|
+
placeItems: "center",
|
|
5484
|
+
width: 26,
|
|
5485
|
+
height: 26,
|
|
5486
|
+
borderRadius: 6,
|
|
5487
|
+
cursor: "pointer",
|
|
5488
|
+
flex: "none",
|
|
5489
|
+
border: "1px solid " + (on ? "var(--brand)" : "var(--border)"),
|
|
5490
|
+
background: on ? "var(--brand)" : "var(--surface)",
|
|
5491
|
+
color: on ? "#fff" : "var(--text-muted)"
|
|
5492
|
+
},
|
|
5493
|
+
children: /* @__PURE__ */ jsx57("i", { className: "ph ph-arrow-" + (dir === "asc" ? "up" : "down"), style: { fontSize: 13 } })
|
|
5494
|
+
}
|
|
5495
|
+
);
|
|
5496
|
+
const rowStyle = (highlight) => ({
|
|
5497
|
+
gap: 8,
|
|
5498
|
+
padding: "4px 8px",
|
|
5499
|
+
borderRadius: 7,
|
|
5500
|
+
background: highlight ? "var(--surface-brand)" : "transparent"
|
|
5501
|
+
});
|
|
5502
|
+
const labelStyle = (highlight) => ({
|
|
5503
|
+
flex: 1,
|
|
5504
|
+
minWidth: 0,
|
|
5505
|
+
fontWeight: highlight ? 700 : 500,
|
|
5506
|
+
color: highlight ? "var(--text-on-surface-brand)" : "var(--text)"
|
|
5507
|
+
});
|
|
5508
|
+
const singleBody = fields.map((f) => {
|
|
5509
|
+
const on = !!first && first.key === f.key;
|
|
5510
|
+
return /* @__PURE__ */ jsxs49("span", { className: "fd-row", style: rowStyle(on), children: [
|
|
5511
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm", style: labelStyle(on), children: f.label }),
|
|
5512
|
+
arrow(f, "asc", on && first.dir === "asc", () => change([{ key: f.key, dir: "asc" }])),
|
|
5513
|
+
arrow(f, "desc", on && first.dir === "desc", () => change([{ key: f.key, dir: "desc" }]))
|
|
5514
|
+
] }, f.key);
|
|
5515
|
+
});
|
|
5516
|
+
const unused = fields.filter((f) => !active.some((entry) => entry.key === f.key));
|
|
5517
|
+
const multipleBody = /* @__PURE__ */ jsxs49(Fragment11, { children: [
|
|
5518
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-overline fd-muted", style: { padding: "4px 8px 6px" }, children: "Sorted by" }),
|
|
5519
|
+
active.length === 0 ? /* @__PURE__ */ jsx57("span", { className: "fd-body-sm fd-muted", style: { padding: "4px 8px" }, children: "Unsorted" }) : /* @__PURE__ */ jsx57("ol", { className: "fd-stack", style: { gap: 2, margin: 0, padding: 0, listStyle: "none" }, "aria-label": "Sort order", children: active.map((entry, index) => {
|
|
5520
|
+
const f = fieldOf(entry.key);
|
|
5521
|
+
const flipped = entry.dir === "asc" ? "desc" : "asc";
|
|
5522
|
+
return /* @__PURE__ */ jsxs49("li", { className: "fd-row", style: rowStyle(false), children: [
|
|
5523
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm fd-muted", "aria-hidden": "true", style: { width: 14, flex: "none" }, children: index + 1 }),
|
|
5524
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm", style: labelStyle(false), children: f.label }),
|
|
5525
|
+
/* @__PURE__ */ jsx57(
|
|
5526
|
+
IconButton,
|
|
5527
|
+
{
|
|
5528
|
+
size: "sm",
|
|
5529
|
+
variant: "outline",
|
|
5530
|
+
icon: entry.dir === "asc" ? "arrow-up" : "arrow-down",
|
|
5531
|
+
label: f.label + ", " + directionWord(f, entry.dir) + ". Switch to " + directionWord(f, flipped),
|
|
5532
|
+
onClick: () => change(active.map((e) => e.key === entry.key ? { key: e.key, dir: flipped } : e))
|
|
5533
|
+
}
|
|
5534
|
+
),
|
|
5535
|
+
/* @__PURE__ */ jsx57(
|
|
5536
|
+
IconButton,
|
|
5537
|
+
{
|
|
5538
|
+
size: "sm",
|
|
5539
|
+
icon: "caret-up",
|
|
5540
|
+
label: "Sort " + f.label + " earlier",
|
|
5541
|
+
disabled: index === 0,
|
|
5542
|
+
onClick: () => change(moved(active, index, index - 1))
|
|
5543
|
+
}
|
|
5544
|
+
),
|
|
5545
|
+
/* @__PURE__ */ jsx57(
|
|
5546
|
+
IconButton,
|
|
5547
|
+
{
|
|
5548
|
+
size: "sm",
|
|
5549
|
+
icon: "caret-down",
|
|
5550
|
+
label: "Sort " + f.label + " later",
|
|
5551
|
+
disabled: index === active.length - 1,
|
|
5552
|
+
onClick: () => change(moved(active, index, index + 1))
|
|
5553
|
+
}
|
|
5554
|
+
),
|
|
5555
|
+
/* @__PURE__ */ jsx57(
|
|
5556
|
+
IconButton,
|
|
5557
|
+
{
|
|
5558
|
+
size: "sm",
|
|
5559
|
+
icon: "x",
|
|
5560
|
+
label: "Remove " + f.label + " from the sort",
|
|
5561
|
+
onClick: () => change(active.filter((e) => e.key !== entry.key))
|
|
5562
|
+
}
|
|
5563
|
+
)
|
|
5564
|
+
] }, entry.key);
|
|
5565
|
+
}) }),
|
|
5566
|
+
unused.length > 0 ? /* @__PURE__ */ jsxs49(Fragment11, { children: [
|
|
5567
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-overline fd-muted", style: { padding: "10px 8px 6px" }, children: "Add a sort" }),
|
|
5568
|
+
unused.map((f) => /* @__PURE__ */ jsxs49("span", { className: "fd-row", style: rowStyle(false), children: [
|
|
5569
|
+
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm", style: labelStyle(false), children: f.label }),
|
|
5570
|
+
arrow(f, "asc", false, () => change([...active, { key: f.key, dir: "asc" }])),
|
|
5571
|
+
arrow(f, "desc", false, () => change([...active, { key: f.key, dir: "desc" }]))
|
|
5572
|
+
] }, f.key))
|
|
5573
|
+
] }) : null
|
|
5574
|
+
] });
|
|
5575
|
+
return /* @__PURE__ */ jsxs49("span", { className, style: { display: "inline-flex", minWidth: 0 }, ref, ...rest, children: [
|
|
5576
|
+
/* @__PURE__ */ jsxs49(
|
|
5577
|
+
Button,
|
|
5441
5578
|
{
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
"
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
borderRadius: 6,
|
|
5452
|
-
cursor: "pointer",
|
|
5453
|
-
border: "1px solid " + (on ? "var(--brand)" : "var(--border)"),
|
|
5454
|
-
background: on ? "var(--brand)" : "var(--surface)",
|
|
5455
|
-
color: on ? "#fff" : "var(--text-muted)"
|
|
5456
|
-
},
|
|
5457
|
-
children: /* @__PURE__ */ jsx57("i", { className: "ph ph-arrow-" + (d === "asc" ? "up" : "down"), style: { fontSize: 13 } })
|
|
5579
|
+
size,
|
|
5580
|
+
variant: "secondary",
|
|
5581
|
+
icon: first && first.dir === "asc" ? "sort-ascending" : "sort-descending",
|
|
5582
|
+
title: triggerTitle || void 0,
|
|
5583
|
+
onClick: () => setOpen(!open2),
|
|
5584
|
+
children: [
|
|
5585
|
+
triggerLabel,
|
|
5586
|
+
/* @__PURE__ */ jsx57("i", { className: "ph ph-" + (first && first.dir === "asc" ? "arrow-up" : "arrow-down"), style: { fontSize: 12, marginLeft: 6, opacity: 0.75 } })
|
|
5587
|
+
]
|
|
5458
5588
|
}
|
|
5459
|
-
)
|
|
5460
|
-
|
|
5461
|
-
return /* @__PURE__ */ jsxs49("span", { className, style: { display: "inline-flex" }, ref, ...rest, children: [
|
|
5462
|
-
/* @__PURE__ */ jsxs49(Button, { size, variant: "secondary", icon: dir === "asc" ? "sort-ascending" : "sort-descending", onClick: () => setOpen(!open2), children: [
|
|
5463
|
-
cur ? cur.label : "Unsorted",
|
|
5464
|
-
/* @__PURE__ */ jsx57("i", { className: "ph ph-" + (dir === "asc" ? "arrow-up" : "arrow-down"), style: { fontSize: 12, marginLeft: 6, opacity: 0.75 } })
|
|
5465
|
-
] }),
|
|
5466
|
-
/* @__PURE__ */ jsx57(InlinePanelSurface, { panel, align, offset: 6, width: 280, label: "Sort by", children: /* @__PURE__ */ jsxs49("span", { className: "fd-stack", style: { gap: 2, padding: 8 }, children: [
|
|
5589
|
+
),
|
|
5590
|
+
/* @__PURE__ */ jsx57(InlinePanelSurface, { panel, align, offset: 6, width: multiple ? 340 : 280, label: "Sort by", children: /* @__PURE__ */ jsx57("span", { className: "fd-stack", style: { gap: 2, padding: 8 }, children: multiple ? multipleBody : /* @__PURE__ */ jsxs49(Fragment11, { children: [
|
|
5467
5591
|
/* @__PURE__ */ jsx57("span", { className: "fd-overline fd-muted", style: { padding: "4px 8px 6px" }, children: "Sort by" }),
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
return /* @__PURE__ */ jsxs49("span", { className: "fd-row", style: { gap: 8, padding: "4px 8px", borderRadius: 7, background: active ? "var(--surface-brand)" : "transparent" }, children: [
|
|
5471
|
-
/* @__PURE__ */ jsx57("span", { className: "fd-body-sm", style: { flex: 1, fontWeight: active ? 700 : 500, color: active ? "var(--text-on-surface-brand)" : "var(--text)" }, children: f.label }),
|
|
5472
|
-
arrow(f, "asc"),
|
|
5473
|
-
arrow(f, "desc")
|
|
5474
|
-
] }, f.key);
|
|
5475
|
-
})
|
|
5476
|
-
] }) })
|
|
5592
|
+
singleBody
|
|
5593
|
+
] }) }) })
|
|
5477
5594
|
] });
|
|
5478
5595
|
}
|
|
5479
5596
|
|
|
@@ -6011,7 +6128,7 @@ function TransferList({
|
|
|
6011
6128
|
cfg.header ? /* @__PURE__ */ jsx63("div", { className: "fd-tlist-header", children: cfg.header }) : null,
|
|
6012
6129
|
/* @__PURE__ */ jsxs54("span", { className: "fd-row", style: { gap: 8 }, children: [
|
|
6013
6130
|
/* @__PURE__ */ jsx63(SearchField, { value: cfg.search, onChange: cfg.onSearchChange, placeholder: "Search", "aria-label": (cfg.label || side) + " search", style: { flex: 1 } }),
|
|
6014
|
-
/* @__PURE__ */ jsx63(SortMenu, { fields: cfg.sortFields, sort: cfg.sort,
|
|
6131
|
+
/* @__PURE__ */ jsx63(SortMenu, { fields: cfg.sortFields, sort: cfg.sort ? [cfg.sort] : [], onSortChange: (next) => next[0] && cfg.onSort(next[0].key, next[0].dir), align: side === "left" ? "left" : "right" })
|
|
6015
6132
|
] }),
|
|
6016
6133
|
/* @__PURE__ */ jsx63(
|
|
6017
6134
|
VirtualList,
|
|
@@ -7734,7 +7851,7 @@ function useSessionContext() {
|
|
|
7734
7851
|
}
|
|
7735
7852
|
|
|
7736
7853
|
// src/components/platform/AccountMenu.tsx
|
|
7737
|
-
import { Fragment as
|
|
7854
|
+
import { Fragment as Fragment17, jsx as jsx75, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
7738
7855
|
var DEFAULT_LINKS = [];
|
|
7739
7856
|
var DEFAULT_GROUPS = [];
|
|
7740
7857
|
function Item({ item, onPick }) {
|
|
@@ -7796,7 +7913,7 @@ function AccountMenu({
|
|
|
7796
7913
|
}
|
|
7797
7914
|
};
|
|
7798
7915
|
const showSwitcher = allowUserSwitch && !!demo;
|
|
7799
|
-
return /* @__PURE__ */ jsxs66(
|
|
7916
|
+
return /* @__PURE__ */ jsxs66(Fragment17, { children: [
|
|
7800
7917
|
/* @__PURE__ */ jsxs66(
|
|
7801
7918
|
"button",
|
|
7802
7919
|
{
|
|
@@ -8554,7 +8671,7 @@ function ProfilePage({
|
|
|
8554
8671
|
|
|
8555
8672
|
// src/components/platform/SessionScreen.tsx
|
|
8556
8673
|
import * as React55 from "react";
|
|
8557
|
-
import { Fragment as
|
|
8674
|
+
import { Fragment as Fragment20, jsx as jsx80, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
8558
8675
|
var COPY = {
|
|
8559
8676
|
"signing-in": { busy: "Signing you in\u2026" },
|
|
8560
8677
|
"session-expired": { busy: "Your session expired \u2014 signing you back in\u2026" },
|
|
@@ -8582,7 +8699,7 @@ function SessionScreen({ kind, error, onRetry, productName }) {
|
|
|
8582
8699
|
/* @__PURE__ */ jsx80("div", { className: "fd-session-screen-stripe" }),
|
|
8583
8700
|
/* @__PURE__ */ jsx80(Card, { children: /* @__PURE__ */ jsxs71("div", { className: "fd-session-screen-body", children: [
|
|
8584
8701
|
/* @__PURE__ */ jsx80("h1", { ref: titleRef, tabIndex: -1, className: "fd-h3 fd-session-screen-title", children: productName }),
|
|
8585
|
-
/* @__PURE__ */ jsx80("div", { role: "status", "aria-live": "polite", className: "fd-session-screen-status", children: busyMessage !== null ? /* @__PURE__ */ jsxs71(
|
|
8702
|
+
/* @__PURE__ */ jsx80("div", { role: "status", "aria-live": "polite", className: "fd-session-screen-status", children: busyMessage !== null ? /* @__PURE__ */ jsxs71(Fragment20, { children: [
|
|
8586
8703
|
/* @__PURE__ */ jsx80("span", { className: "fd-spinner fd-spinner-lg fd-session-screen-spinner", "aria-hidden": "true" }),
|
|
8587
8704
|
/* @__PURE__ */ jsx80("p", { className: "fd-body fd-session-screen-message", children: announced })
|
|
8588
8705
|
] }) : null }),
|
|
@@ -10609,7 +10726,7 @@ function RoadmapTimeline({ onOpenFlag, title = "Roadmap", lede }) {
|
|
|
10609
10726
|
// src/components/platform/ComingSoon.tsx
|
|
10610
10727
|
import * as React59 from "react";
|
|
10611
10728
|
import { createPortal as createPortal6 } from "react-dom";
|
|
10612
|
-
import { Fragment as
|
|
10729
|
+
import { Fragment as Fragment22, jsx as jsx82, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
10613
10730
|
var BYPASS_STORE = "fd.soon.bypass.v1";
|
|
10614
10731
|
function readBypassed() {
|
|
10615
10732
|
try {
|
|
@@ -10639,7 +10756,7 @@ function useBypass(key) {
|
|
|
10639
10756
|
return [on, set];
|
|
10640
10757
|
}
|
|
10641
10758
|
function SoonCard({ label, detail, backend, eta, effort, onRoadmap, allowed, onBypass }) {
|
|
10642
|
-
return /* @__PURE__ */ jsxs73(
|
|
10759
|
+
return /* @__PURE__ */ jsxs73(Fragment22, { children: [
|
|
10643
10760
|
/* @__PURE__ */ jsxs73("span", { className: "fd-soon-badge", children: [
|
|
10644
10761
|
/* @__PURE__ */ jsx82("i", { className: "ph ph-traffic-cone", "aria-hidden": "true" }),
|
|
10645
10762
|
label
|
|
@@ -11029,7 +11146,7 @@ function PermissionHint({ perm, children }) {
|
|
|
11029
11146
|
}
|
|
11030
11147
|
|
|
11031
11148
|
// src/components/platform/ModeSwitch.tsx
|
|
11032
|
-
import { Fragment as
|
|
11149
|
+
import { Fragment as Fragment23, jsx as jsx84, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
11033
11150
|
function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog, onOpenSpec, summary }) {
|
|
11034
11151
|
const mode2 = useRuntimeMode();
|
|
11035
11152
|
const panel = useInlinePanel();
|
|
@@ -11084,7 +11201,7 @@ function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog
|
|
|
11084
11201
|
s.total,
|
|
11085
11202
|
" features complete"
|
|
11086
11203
|
] }),
|
|
11087
|
-
onOpenSpec ? /* @__PURE__ */ jsxs75(
|
|
11204
|
+
onOpenSpec ? /* @__PURE__ */ jsxs75(Fragment23, { children: [
|
|
11088
11205
|
/* @__PURE__ */ jsx84("span", { style: { flex: 1 } }),
|
|
11089
11206
|
/* @__PURE__ */ jsxs75("button", { type: "button", className: "fd-soon-link", onClick: () => {
|
|
11090
11207
|
setOpen(false);
|
|
@@ -11276,7 +11393,7 @@ function SaturationDistribution({ campuses = [], floorBand, floorScore, onSelect
|
|
|
11276
11393
|
|
|
11277
11394
|
// src/components/planner/MixGap.tsx
|
|
11278
11395
|
import * as React60 from "react";
|
|
11279
|
-
import { Fragment as
|
|
11396
|
+
import { Fragment as Fragment24, jsx as jsx87, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
11280
11397
|
var MIX_GAP_LAYOUT = {
|
|
11281
11398
|
trackHeight: 30,
|
|
11282
11399
|
barHeight: 20,
|
|
@@ -11320,7 +11437,7 @@ function MixGap({ rows = [], loading = false, className = "" }) {
|
|
|
11320
11437
|
onMouseLeave: () => setHover(null),
|
|
11321
11438
|
children: [
|
|
11322
11439
|
/* @__PURE__ */ jsx87("span", { style: { width: 128, flex: "none" }, children: /* @__PURE__ */ jsx87(ChannelTag, { channel: r.channel, size: "sm" }) }),
|
|
11323
|
-
/* @__PURE__ */ jsx87("span", { style: { position: "relative", flex: 1, height: trackHeight, minWidth: 120 }, children: loading ? /* @__PURE__ */ jsx87("span", { className: "fd-skel", style: { position: "absolute", left: 0, right: 0, top: barTop, height: barHeight, borderRadius: 3 } }) : /* @__PURE__ */ jsxs78(
|
|
11440
|
+
/* @__PURE__ */ jsx87("span", { style: { position: "relative", flex: 1, height: trackHeight, minWidth: 120 }, children: loading ? /* @__PURE__ */ jsx87("span", { className: "fd-skel", style: { position: "absolute", left: 0, right: 0, top: barTop, height: barHeight, borderRadius: 3 } }) : /* @__PURE__ */ jsxs78(Fragment24, { children: [
|
|
11324
11441
|
/* @__PURE__ */ jsx87("span", { "data-mixgap-bar": "", style: { position: "absolute", left: 0, top: barTop, height: barHeight, width: mixGapOffset(r.realized, max), background: TONE[tone], borderRadius: "2px 3px 3px 2px", transition: "width var(--dur-slow) var(--ease), background var(--dur-base) var(--ease)" } }),
|
|
11325
11442
|
/* @__PURE__ */ jsx87("span", { "data-mixgap-target": "", style: { position: "absolute", left: `calc(${mixGapOffset(r.target, max)} - ${targetWidth / 2}px)`, top: 0, width: targetWidth, height: trackHeight, background: MIX_GAP_TARGET_STRIPE, borderRadius: 1 } }),
|
|
11326
11443
|
/* @__PURE__ */ jsxs78("span", { "data-mixgap-label": "", className: "fd-num", style: { position: "absolute", left: labelLeft, top: "50%", transform: "translateY(-50%)", fontSize: 12, color: "var(--text-muted)", whiteSpace: "nowrap" }, children: [
|
|
@@ -11434,7 +11551,7 @@ function ChannelContribution({
|
|
|
11434
11551
|
|
|
11435
11552
|
// src/components/planner/BudgetReallocator.tsx
|
|
11436
11553
|
import * as React61 from "react";
|
|
11437
|
-
import { Fragment as
|
|
11554
|
+
import { Fragment as Fragment25, jsx as jsx89, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
11438
11555
|
var bandFor = (crp) => crp >= 200 ? "dominant" : crp >= 100 ? "strong" : crp >= 50 ? "adequate" : "weak";
|
|
11439
11556
|
function BudgetReallocator({
|
|
11440
11557
|
campus,
|
|
@@ -11498,7 +11615,7 @@ function BudgetReallocator({
|
|
|
11498
11615
|
/* @__PURE__ */ jsxs80("div", { className: "fd-row", style: { gap: 12, flexWrap: "wrap" }, children: [
|
|
11499
11616
|
/* @__PURE__ */ jsx89("span", { className: "fd-h4", style: { flex: 1, minWidth: 140 }, children: campus }),
|
|
11500
11617
|
/* @__PURE__ */ jsx89(CsiBadge, { band: nowBand, crp, size: "medium" }),
|
|
11501
|
-
dirty ? /* @__PURE__ */ jsxs80(
|
|
11618
|
+
dirty ? /* @__PURE__ */ jsxs80(Fragment25, { children: [
|
|
11502
11619
|
/* @__PURE__ */ jsx89("i", { className: "ph ph-arrow-right fd-muted", "aria-hidden": "true" }),
|
|
11503
11620
|
/* @__PURE__ */ jsx89(CsiBadge, { band: nextBand, crp: nextCrp, size: "medium", preview: true })
|
|
11504
11621
|
] }) : null
|
|
@@ -13437,7 +13554,7 @@ function FileViewer({ file, resolveUrl, sidePanel, sidePanelLabel = "Details", o
|
|
|
13437
13554
|
|
|
13438
13555
|
// src/components/files/FileBrowser.tsx
|
|
13439
13556
|
import * as React70 from "react";
|
|
13440
|
-
import { Fragment as
|
|
13557
|
+
import { Fragment as Fragment29, jsx as jsx99, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
13441
13558
|
function childrenOf(folders, parentId) {
|
|
13442
13559
|
return folders.filter((f) => f.parentId === parentId).sort((a, b) => a.name.localeCompare(b.name));
|
|
13443
13560
|
}
|
|
@@ -13736,7 +13853,7 @@ function FileBrowser({
|
|
|
13736
13853
|
] }),
|
|
13737
13854
|
/* @__PURE__ */ jsxs90("span", { className: "fd-fb-actions", children: [
|
|
13738
13855
|
canCreateFolder ? /* @__PURE__ */ jsx99(Button, { variant: "secondary", size: "sm", icon: "folder-simple-plus", onClick: openCreate, children: "New folder" }) : null,
|
|
13739
|
-
canUpload ? /* @__PURE__ */ jsxs90(
|
|
13856
|
+
canUpload ? /* @__PURE__ */ jsxs90(Fragment29, { children: [
|
|
13740
13857
|
/* @__PURE__ */ jsx99(Button, { variant: "secondary", size: "sm", icon: "upload-simple", onClick: () => uploadInputRef.current && uploadInputRef.current.click(), children: "Upload" }),
|
|
13741
13858
|
/* @__PURE__ */ jsx99(
|
|
13742
13859
|
"input",
|
|
@@ -13803,7 +13920,7 @@ function FileBrowser({
|
|
|
13803
13920
|
draggableId: canMove ? { kind: "folder", id: f.id } : void 0,
|
|
13804
13921
|
isDropTarget: canMove,
|
|
13805
13922
|
onDropPayload: (p) => moveIntoFolder(p, f.id),
|
|
13806
|
-
actions: /* @__PURE__ */ jsxs90(
|
|
13923
|
+
actions: /* @__PURE__ */ jsxs90(Fragment29, { children: [
|
|
13807
13924
|
canRenameFolder ? /* @__PURE__ */ jsx99(IconButton, { icon: "pencil-simple", label: "Rename " + f.name, size: "sm", variant: "ghost", onClick: () => openRename(f) }) : null,
|
|
13808
13925
|
canMove ? /* @__PURE__ */ jsx99(
|
|
13809
13926
|
FolderPickerMenu,
|
|
@@ -13826,7 +13943,7 @@ function FileBrowser({
|
|
|
13826
13943
|
meta: file.size ? formatBytes(file.size) : void 0,
|
|
13827
13944
|
onOpen: onOpenFile ? () => onOpenFile(file) : void 0,
|
|
13828
13945
|
draggableId: canMove ? { kind: "file", id: file.id } : void 0,
|
|
13829
|
-
actions: /* @__PURE__ */ jsxs90(
|
|
13946
|
+
actions: /* @__PURE__ */ jsxs90(Fragment29, { children: [
|
|
13830
13947
|
canMove ? /* @__PURE__ */ jsx99(
|
|
13831
13948
|
FolderPickerMenu,
|
|
13832
13949
|
{
|
|
@@ -13844,7 +13961,7 @@ function FileBrowser({
|
|
|
13844
13961
|
}
|
|
13845
13962
|
) })
|
|
13846
13963
|
] }),
|
|
13847
|
-
/* @__PURE__ */ jsx99(Modal, { open: createOpen, title: "New folder", onClose: () => setCreateOpen(false), footer: /* @__PURE__ */ jsxs90(
|
|
13964
|
+
/* @__PURE__ */ jsx99(Modal, { open: createOpen, title: "New folder", onClose: () => setCreateOpen(false), footer: /* @__PURE__ */ jsxs90(Fragment29, { children: [
|
|
13848
13965
|
/* @__PURE__ */ jsx99(Button, { variant: "secondary", onClick: () => setCreateOpen(false), children: "Cancel" }),
|
|
13849
13966
|
/* @__PURE__ */ jsx99(Button, { onClick: submitCreate, disabled: !createName.trim(), children: "Create" })
|
|
13850
13967
|
] }), children: /* @__PURE__ */ jsx99(
|
|
@@ -13861,7 +13978,7 @@ function FileBrowser({
|
|
|
13861
13978
|
autoFocus: true
|
|
13862
13979
|
}
|
|
13863
13980
|
) }),
|
|
13864
|
-
/* @__PURE__ */ jsx99(Modal, { open: renameTarget != null, title: "Rename folder", onClose: () => setRenameTarget(null), footer: /* @__PURE__ */ jsxs90(
|
|
13981
|
+
/* @__PURE__ */ jsx99(Modal, { open: renameTarget != null, title: "Rename folder", onClose: () => setRenameTarget(null), footer: /* @__PURE__ */ jsxs90(Fragment29, { children: [
|
|
13865
13982
|
/* @__PURE__ */ jsx99(Button, { variant: "secondary", onClick: () => setRenameTarget(null), children: "Cancel" }),
|
|
13866
13983
|
/* @__PURE__ */ jsx99(Button, { onClick: submitRename, disabled: !renameValue.trim(), children: "Save" })
|
|
13867
13984
|
] }), children: /* @__PURE__ */ jsx99(
|
|
@@ -13885,7 +14002,7 @@ function FileBrowser({
|
|
|
13885
14002
|
title: deleteTarget ? "Delete \u201C" + deleteTarget.name + "\u201D?" : "Delete folder?",
|
|
13886
14003
|
description: "This can't be undone. The folder must be empty.",
|
|
13887
14004
|
onClose: () => setDeleteTarget(null),
|
|
13888
|
-
footer: /* @__PURE__ */ jsxs90(
|
|
14005
|
+
footer: /* @__PURE__ */ jsxs90(Fragment29, { children: [
|
|
13889
14006
|
/* @__PURE__ */ jsx99(Button, { variant: "secondary", onClick: () => setDeleteTarget(null), children: "Cancel" }),
|
|
13890
14007
|
/* @__PURE__ */ jsx99(Button, { variant: "danger", onClick: confirmDelete, children: "Delete" })
|
|
13891
14008
|
] })
|
|
@@ -14351,6 +14468,7 @@ export {
|
|
|
14351
14468
|
CHANNEL_WEIGHTS,
|
|
14352
14469
|
CHAT_UNAVAILABLE,
|
|
14353
14470
|
COPIED_FEEDBACK_MS,
|
|
14471
|
+
CORNER_STACK_INSET_PROPERTY,
|
|
14354
14472
|
Calendar,
|
|
14355
14473
|
Card,
|
|
14356
14474
|
CardGrid,
|