@ai-matrx/design-system 0.86.354 → 0.86.356
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 +31 -2
- package/dist/carousel.js +3 -3
- package/dist/{chunk-UGQRAQTE.js → chunk-2PO3N42Q.js} +3 -3
- package/dist/{chunk-ZRHVA3DL.js → chunk-AV5C4YLL.js} +2 -1
- package/dist/{chunk-ZRHVA3DL.js.map → chunk-AV5C4YLL.js.map} +1 -1
- package/dist/chunk-LJKF267O.js +168 -0
- package/dist/chunk-LJKF267O.js.map +1 -0
- package/dist/{chunk-CFCWQDGC.js → chunk-RLM4RSED.js} +5 -23
- package/dist/chunk-RLM4RSED.js.map +1 -0
- package/dist/{chunk-FLWSEDUW.js → chunk-ZMUPFGQO.js} +2 -2
- package/dist/controls.cjs +86 -1
- package/dist/controls.cjs.map +1 -1
- package/dist/controls.js +3 -3
- package/dist/data-table/drill-chart.cjs +85 -1
- package/dist/data-table/drill-chart.cjs.map +1 -1
- package/dist/data-table/drill-chart.js +1 -1
- package/dist/data-table/index.cjs +85 -1
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.js +1 -1
- package/dist/desktop.cjs +159 -81
- package/dist/desktop.cjs.map +1 -1
- package/dist/desktop.css +8 -5
- package/dist/desktop.d.cts +0 -5
- package/dist/desktop.d.ts +0 -5
- package/dist/desktop.js +70 -70
- package/dist/desktop.js.map +1 -1
- package/dist/email-input-dialog.cjs +85 -1
- package/dist/email-input-dialog.cjs.map +1 -1
- package/dist/email-input-dialog.js +1 -1
- package/dist/index.cjs +114 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -22
- package/dist/index.d.ts +38 -22
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/lite-table.cjs +86 -19
- package/dist/lite-table.cjs.map +1 -1
- package/dist/lite-table.js +2 -2
- package/dist/notice-material.css +28 -0
- package/dist/record-list.cjs +86 -19
- package/dist/record-list.cjs.map +1 -1
- package/dist/record-list.js +2 -2
- package/dist/settings.cjs +1 -0
- package/dist/settings.cjs.map +1 -1
- package/dist/settings.js +1 -1
- package/dist/styles.css +1 -0
- package/dist/swipe-deck.cjs +95 -2
- package/dist/swipe-deck.cjs.map +1 -1
- package/dist/swipe-deck.css +2 -0
- package/dist/swipe-deck.js +11 -2
- package/dist/swipe-deck.js.map +1 -1
- package/dist/text-input-dialog.cjs +85 -1
- package/dist/text-input-dialog.cjs.map +1 -1
- package/dist/text-input-dialog.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-CFCWQDGC.js.map +0 -1
- package/dist/chunk-HKLIRHT2.js +0 -71
- package/dist/chunk-HKLIRHT2.js.map +0 -1
- /package/dist/{chunk-UGQRAQTE.js.map → chunk-2PO3N42Q.js.map} +0 -0
- /package/dist/{chunk-FLWSEDUW.js.map → chunk-ZMUPFGQO.js.map} +0 -0
package/dist/desktop.cjs
CHANGED
|
@@ -5431,7 +5431,6 @@ function PlaceStrip({ className, ...props }) {
|
|
|
5431
5431
|
|
|
5432
5432
|
// src/desktop/state.tsx
|
|
5433
5433
|
var React34 = __toESM(require("react"), 1);
|
|
5434
|
-
var import_clipboard = require("@ai-matrx/kit/clipboard");
|
|
5435
5434
|
|
|
5436
5435
|
// src/desktop/errors.ts
|
|
5437
5436
|
var RULES = [
|
|
@@ -5469,7 +5468,52 @@ function describeError(error, fallback = "Something went wrong. Try again.") {
|
|
|
5469
5468
|
return { cause: fallback, detail };
|
|
5470
5469
|
}
|
|
5471
5470
|
|
|
5471
|
+
// src/error-sentence.ts
|
|
5472
|
+
function errorSentenceOf(error) {
|
|
5473
|
+
if (error == null || error === true || error === false) return "";
|
|
5474
|
+
if (typeof error === "string") return error;
|
|
5475
|
+
if (typeof error !== "object") return String(error);
|
|
5476
|
+
const message = error.message;
|
|
5477
|
+
return typeof message === "string" ? message : "";
|
|
5478
|
+
}
|
|
5479
|
+
var TIMED_OUT_SENTENCE = "That took too long. Nothing was lost; try again.";
|
|
5480
|
+
var FALLBACK_ERROR_SENTENCE = "Something went wrong. Try again.";
|
|
5481
|
+
function isTimedOutError(error, message, code) {
|
|
5482
|
+
if (code === "57014" || code === "timed_out") return true;
|
|
5483
|
+
if (error && typeof error === "object") {
|
|
5484
|
+
const o = error;
|
|
5485
|
+
if (o.code === "57014" || o.code === "timed_out" || o.sqlstate === "57014") return true;
|
|
5486
|
+
}
|
|
5487
|
+
const text = `${message ?? ""} ${errorSentenceOf(error)}`;
|
|
5488
|
+
return /canceling statement due to statement timeout/i.test(text);
|
|
5489
|
+
}
|
|
5490
|
+
function offlineText(text) {
|
|
5491
|
+
const t = text.trim();
|
|
5492
|
+
return t !== "" && (describeError(t).code === "OFFLINE" || /networkerror|network request failed|load failed/i.test(t));
|
|
5493
|
+
}
|
|
5494
|
+
var ANY_HOST_CODES = /* @__PURE__ */ new Set(["OFFLINE", "TIMEOUT", "UNAUTHORIZED", "FORBIDDEN", "NOT_FOUND", "RATE_LIMIT", "SERVER"]);
|
|
5495
|
+
var MACHINE_PREFIX = /^\s*(?:\[[\w./-]+\]\s*|[a-z][\w]*(?:[._][\w]+)+:\s+)/;
|
|
5496
|
+
var RAW_TEXT = /\b(?:Type|Reference|Syntax|Range|Internal|Eval|URI)Error\b|\bat\s+[\w$.<>]+\s*\(|\.(?:[cm]?[jt]sx?|py):\d+|(?:^|[\s(])(?:\/[\w.@-]+){2,}|\bundefined is not\b|\bcannot read propert(?:y|ies)\b|\bis not a function\b|\bunexpected token\b/i;
|
|
5497
|
+
function isRawErrorText(text) {
|
|
5498
|
+
return MACHINE_PREFIX.test(text) || RAW_TEXT.test(text);
|
|
5499
|
+
}
|
|
5500
|
+
function peopleErrorSentence(error, message, options = {}) {
|
|
5501
|
+
if (isTimedOutError(error, message, options.code)) return TIMED_OUT_SENTENCE;
|
|
5502
|
+
const fallback = options.fallback ?? FALLBACK_ERROR_SENTENCE;
|
|
5503
|
+
const raw = message?.trim() || errorSentenceOf(error).trim();
|
|
5504
|
+
if (!raw) return fallback;
|
|
5505
|
+
let text = raw;
|
|
5506
|
+
for (let i = 0; i < 3 && MACHINE_PREFIX.test(text); i++) text = text.replace(MACHINE_PREFIX, "").trim();
|
|
5507
|
+
if (!text) return fallback;
|
|
5508
|
+
if (offlineText(text) || RAW_TEXT.test(text) || text !== raw) {
|
|
5509
|
+
const said = describeError(text, fallback);
|
|
5510
|
+
return said.code && ANY_HOST_CODES.has(said.code) ? said.cause : fallback;
|
|
5511
|
+
}
|
|
5512
|
+
return text;
|
|
5513
|
+
}
|
|
5514
|
+
|
|
5472
5515
|
// src/desktop/state.tsx
|
|
5516
|
+
var import_clipboard = require("@ai-matrx/kit/clipboard");
|
|
5473
5517
|
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
5474
5518
|
var EMPTY_ICON = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [
|
|
5475
5519
|
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { d: "M22 12h-6l-2 3h-4l-2-3H2" }),
|
|
@@ -5547,6 +5591,8 @@ var BANNER_ICON = {
|
|
|
5547
5591
|
};
|
|
5548
5592
|
function Banner({ tone, icon, title, message, actions, detail, onDismiss, count, className, ...props }) {
|
|
5549
5593
|
const [copied, setCopied] = React34.useState(false);
|
|
5594
|
+
if (typeof title === "string" && isRawErrorText(title)) title = peopleErrorSentence(null, title);
|
|
5595
|
+
if (typeof message === "string" && isRawErrorText(message)) message = peopleErrorSentence(null, message);
|
|
5550
5596
|
const registry3 = React34.useContext(NoticeStackContext);
|
|
5551
5597
|
const floating = registry3 !== null;
|
|
5552
5598
|
const id = React34.useId();
|
|
@@ -6873,15 +6919,47 @@ function EndOfList({ onEndReached }) {
|
|
|
6873
6919
|
}
|
|
6874
6920
|
|
|
6875
6921
|
// src/desktop/split-view.tsx
|
|
6922
|
+
var React39 = __toESM(require("react"), 1);
|
|
6876
6923
|
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
6877
6924
|
var LIST_WIDTH = { md: "w-70", lg: "w-85" };
|
|
6925
|
+
function useNoticeBounds(frame) {
|
|
6926
|
+
React39.useLayoutEffect(() => {
|
|
6927
|
+
const el = frame.current;
|
|
6928
|
+
if (!el) return;
|
|
6929
|
+
const measure = () => {
|
|
6930
|
+
const box = el.getBoundingClientRect();
|
|
6931
|
+
const columns2 = el.querySelector(':scope > [data-slot="split-columns"]');
|
|
6932
|
+
const viewer = columns2?.querySelector(':scope > [data-slot="split-view-detail"]');
|
|
6933
|
+
const top = columns2 ? columns2.getBoundingClientRect().top - box.top : 0;
|
|
6934
|
+
let left = 0;
|
|
6935
|
+
let below = 0;
|
|
6936
|
+
if (viewer && viewer.offsetWidth > 0) {
|
|
6937
|
+
left = viewer.getBoundingClientRect().left - box.left;
|
|
6938
|
+
} else {
|
|
6939
|
+
const listHeader = columns2?.querySelector('[data-slot="split-view-list-header"]');
|
|
6940
|
+
if (listHeader && listHeader.offsetHeight > 0) below = listHeader.getBoundingClientRect().bottom - box.top - top;
|
|
6941
|
+
}
|
|
6942
|
+
el.style.setProperty("--split-notices-left", `${Math.max(0, Math.round(left))}px`);
|
|
6943
|
+
el.style.setProperty("--split-notices-top", `${Math.max(0, Math.round(top + below))}px`);
|
|
6944
|
+
};
|
|
6945
|
+
measure();
|
|
6946
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
6947
|
+
const observer = new ResizeObserver(measure);
|
|
6948
|
+
observer.observe(el);
|
|
6949
|
+
const columns = el.querySelector(':scope > [data-slot="split-columns"]');
|
|
6950
|
+
if (columns) for (const child of Array.from(columns.children)) observer.observe(child);
|
|
6951
|
+
return () => observer.disconnect();
|
|
6952
|
+
});
|
|
6953
|
+
}
|
|
6878
6954
|
function SplitView({ header, notices, source, list, listHeader, listFooter, detail, listWidth = "lg", detailScrolls = true, narrow, className, ...props }) {
|
|
6879
|
-
|
|
6955
|
+
const frame = React39.useRef(null);
|
|
6956
|
+
useNoticeBounds(frame);
|
|
6957
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { ref: frame, "data-slot": "split-view", className: cn("relative flex h-full min-h-0 flex-col bg-content", className), ...props, children: [
|
|
6880
6958
|
header ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "shrink-0 px-5 empty:hidden", children: header }) : null,
|
|
6881
6959
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-slot": "split-columns", "data-narrow": detail !== void 0 ? narrow : void 0, "data-has-source": source ? "" : void 0, className: "flex min-h-0 flex-1", children: [
|
|
6882
6960
|
source ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "data-slot": "split-view-source", className: "flex w-52 min-w-40 shrink flex-col overflow-y-auto border-r border-separator py-2", children: source }) : null,
|
|
6883
6961
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-slot": "split-view-list", className: cn("flex flex-col", detail === void 0 ? "min-w-0 flex-1" : cn("min-w-56 shrink border-r border-separator", LIST_WIDTH[listWidth])), children: [
|
|
6884
|
-
listHeader ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex shrink-0 flex-col gap-2 px-3 pb-2 pt-1", children: listHeader }) : null,
|
|
6962
|
+
listHeader ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "data-slot": "split-view-list-header", className: "flex shrink-0 flex-col gap-2 px-3 pb-2 pt-1", children: listHeader }) : null,
|
|
6885
6963
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "min-h-0 flex-1 overflow-y-auto", children: list }),
|
|
6886
6964
|
listFooter ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex shrink-0 items-center justify-center border-t border-separator px-3 py-3", children: listFooter }) : null
|
|
6887
6965
|
] }),
|
|
@@ -6892,7 +6970,7 @@ function SplitView({ header, notices, source, list, listHeader, listFooter, deta
|
|
|
6892
6970
|
}
|
|
6893
6971
|
|
|
6894
6972
|
// src/desktop/resizable-pane.tsx
|
|
6895
|
-
var
|
|
6973
|
+
var React40 = __toESM(require("react"), 1);
|
|
6896
6974
|
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
6897
6975
|
var STEP = 16;
|
|
6898
6976
|
var key = (name) => `mx-split:${name}`;
|
|
@@ -6946,16 +7024,16 @@ function ResizablePane({
|
|
|
6946
7024
|
children,
|
|
6947
7025
|
...props
|
|
6948
7026
|
}) {
|
|
6949
|
-
const ref =
|
|
6950
|
-
const [size, setSize] =
|
|
6951
|
-
const [ownState, setOwnState] =
|
|
6952
|
-
const [room, setRoom] =
|
|
7027
|
+
const ref = React40.useRef(null);
|
|
7028
|
+
const [size, setSize] = React40.useState(() => saved(autosaveName) ?? defaultSize);
|
|
7029
|
+
const [ownState, setOwnState] = React40.useState(() => savedState(autosaveName) ?? (defaultCollapsed ? "collapsed" : "open"));
|
|
7030
|
+
const [room, setRoom] = React40.useState(null);
|
|
6953
7031
|
const collapsed = collapsedProp ?? ownState === "collapsed";
|
|
6954
7032
|
const maximized = !collapsed && (maximizedProp ?? ownState === "maximized");
|
|
6955
7033
|
const state = collapsed ? "collapsed" : maximized ? "maximized" : "open";
|
|
6956
|
-
const live =
|
|
7034
|
+
const live = React40.useRef({ state, onCollapsedChange, onMaximizedChange });
|
|
6957
7035
|
live.current = { state, onCollapsedChange, onMaximizedChange };
|
|
6958
|
-
const setState =
|
|
7036
|
+
const setState = React40.useCallback((next) => {
|
|
6959
7037
|
const { state: was, onCollapsedChange: oc, onMaximizedChange: om } = live.current;
|
|
6960
7038
|
if (next === was) return;
|
|
6961
7039
|
live.current = { ...live.current, state: next };
|
|
@@ -6963,8 +7041,8 @@ function ResizablePane({
|
|
|
6963
7041
|
if (was === "collapsed" !== (next === "collapsed")) oc?.(next === "collapsed");
|
|
6964
7042
|
if (was === "maximized" !== (next === "maximized")) om?.(next === "maximized");
|
|
6965
7043
|
}, []);
|
|
6966
|
-
|
|
6967
|
-
|
|
7044
|
+
React40.useEffect(() => saveState(autosaveName, state), [autosaveName, state]);
|
|
7045
|
+
React40.useLayoutEffect(() => {
|
|
6968
7046
|
const el = ref.current;
|
|
6969
7047
|
const frame = el?.closest('[data-slot="page-frame"], [data-slot="split-view"]') ?? el?.parentElement ?? null;
|
|
6970
7048
|
if (!frame) return;
|
|
@@ -7230,7 +7308,7 @@ function CallButton({ icon, label, tone = "default", className, type = "button",
|
|
|
7230
7308
|
}
|
|
7231
7309
|
|
|
7232
7310
|
// src/desktop/media.tsx
|
|
7233
|
-
var
|
|
7311
|
+
var React41 = __toESM(require("react"), 1);
|
|
7234
7312
|
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
7235
7313
|
function Waveform({ peaks, progress = 0, onSeek, className, "aria-label": label, ...props }) {
|
|
7236
7314
|
const bars = peaks.length;
|
|
@@ -7286,7 +7364,7 @@ function peaksOf(samples, bars) {
|
|
|
7286
7364
|
const loudest = Math.max(...out);
|
|
7287
7365
|
return loudest > 0 ? out.map((p) => p / loudest) : out;
|
|
7288
7366
|
}
|
|
7289
|
-
var RecordButton =
|
|
7367
|
+
var RecordButton = React41.forwardRef(function RecordButton2({ recording = false, label, className, type = "button", ...props }, ref) {
|
|
7290
7368
|
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
7291
7369
|
"button",
|
|
7292
7370
|
{
|
|
@@ -7399,7 +7477,7 @@ function SymbolTile({ children, color, size = "sm", className, ...props }) {
|
|
|
7399
7477
|
}
|
|
7400
7478
|
|
|
7401
7479
|
// src/desktop/library.tsx
|
|
7402
|
-
var
|
|
7480
|
+
var React42 = __toESM(require("react"), 1);
|
|
7403
7481
|
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
7404
7482
|
var TILE_COLOR = {
|
|
7405
7483
|
red: "bg-system-red",
|
|
@@ -7449,7 +7527,7 @@ function MoreGlyph() {
|
|
|
7449
7527
|
] });
|
|
7450
7528
|
}
|
|
7451
7529
|
function ShortcutTile({ color, glyph, title, selected, onSelect, onOpen, run, menu, className, onKeyDown, ...props }) {
|
|
7452
|
-
const [asking, setAsking] =
|
|
7530
|
+
const [asking, setAsking] = React42.useState(null);
|
|
7453
7531
|
const confirm = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
7454
7532
|
ConfirmDialog,
|
|
7455
7533
|
{
|
|
@@ -7570,7 +7648,7 @@ function FavoriteTile({ title, icon, className, ...props }) {
|
|
|
7570
7648
|
}
|
|
7571
7649
|
|
|
7572
7650
|
// src/desktop/store.tsx
|
|
7573
|
-
var
|
|
7651
|
+
var React43 = __toESM(require("react"), 1);
|
|
7574
7652
|
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
7575
7653
|
function ProgressRing({ value, label, className, ...props }) {
|
|
7576
7654
|
const r = 10;
|
|
@@ -7662,7 +7740,7 @@ function GetButton({ state, name, onPress, onStop, className, disabled, ...props
|
|
|
7662
7740
|
] });
|
|
7663
7741
|
}
|
|
7664
7742
|
function StoreShelf({ title, subtitle, action, className, children, ...props }) {
|
|
7665
|
-
const id =
|
|
7743
|
+
const id = React43.useId();
|
|
7666
7744
|
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("section", { "aria-labelledby": id, "data-slot": "store-shelf", className: cn("flex flex-col gap-2", className), ...props, children: [
|
|
7667
7745
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("header", { className: "flex items-end gap-3 border-t border-separator pt-3", children: [
|
|
7668
7746
|
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
@@ -7730,18 +7808,18 @@ function InfoStrip({ items, className, ...props }) {
|
|
|
7730
7808
|
}
|
|
7731
7809
|
|
|
7732
7810
|
// src/desktop/credentials.tsx
|
|
7733
|
-
var
|
|
7811
|
+
var React47 = __toESM(require("react"), 1);
|
|
7734
7812
|
var import_format = require("@ai-matrx/kit/format");
|
|
7735
7813
|
|
|
7736
7814
|
// src/controls/controls.tsx
|
|
7737
7815
|
var SwitchPrimitives = __toESM(require("@radix-ui/react-switch"), 1);
|
|
7738
7816
|
var import_react_slot4 = require("@radix-ui/react-slot");
|
|
7739
|
-
var
|
|
7817
|
+
var React46 = __toESM(require("react"), 1);
|
|
7740
7818
|
|
|
7741
7819
|
// src/button.tsx
|
|
7742
7820
|
var import_react_slot3 = require("@radix-ui/react-slot");
|
|
7743
7821
|
var import_class_variance_authority3 = require("class-variance-authority");
|
|
7744
|
-
var
|
|
7822
|
+
var React44 = __toESM(require("react"), 1);
|
|
7745
7823
|
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
7746
7824
|
var buttonVariants2 = (0, import_class_variance_authority3.cva)(
|
|
7747
7825
|
"matrx-glyph-trim inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:opacity-50 active:scale-[0.98] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
@@ -7809,7 +7887,7 @@ function swallowClick(event) {
|
|
|
7809
7887
|
event.preventDefault();
|
|
7810
7888
|
event.stopPropagation();
|
|
7811
7889
|
}
|
|
7812
|
-
var Button3 =
|
|
7890
|
+
var Button3 = React44.forwardRef(
|
|
7813
7891
|
({ className, variant, size, asChild = false, onClick, ...props }, ref) => {
|
|
7814
7892
|
const Component = asChild ? import_react_slot3.Slot : "button";
|
|
7815
7893
|
const resolvedSize = size ?? "default";
|
|
@@ -7835,7 +7913,7 @@ var Button3 = React43.forwardRef(
|
|
|
7835
7913
|
Button3.displayName = "Button";
|
|
7836
7914
|
|
|
7837
7915
|
// src/textarea.tsx
|
|
7838
|
-
var
|
|
7916
|
+
var React45 = __toESM(require("react"), 1);
|
|
7839
7917
|
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
7840
7918
|
var FILL_HEIGHT_REGEX = /(?:^|\s)(h-full|h-dvh|flex-1|grow)(?:\s|$)/;
|
|
7841
7919
|
var FILL_WIDTH_REGEX = /(?:^|\s)(w-full|w-screen)(?:\s|$)/;
|
|
@@ -7849,7 +7927,7 @@ function getStretchClasses(className) {
|
|
|
7849
7927
|
var TEXTAREA_ELEVATED_CLASS = `flex h-auto w-full rounded-md ${FIELD_SURFACE_CLASS} px-3 py-2 text-sm text-foreground shadow-textarea transition duration-400 placeholder:text-muted-foreground focus-visible:outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/15 disabled:cursor-not-allowed disabled:opacity-50`;
|
|
7850
7928
|
var TEXTAREA_CONTROL_CLASS = `flex w-full rounded-md ${FIELD_SURFACE_CLASS} px-3 py-2 text-sm text-foreground shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/15 disabled:cursor-not-allowed disabled:opacity-50`;
|
|
7851
7929
|
function useAutoGrow(ref, value, autoGrow = false, minHeight, maxHeight) {
|
|
7852
|
-
|
|
7930
|
+
React45.useEffect(() => {
|
|
7853
7931
|
if (!autoGrow || !ref.current) return;
|
|
7854
7932
|
const textarea = ref.current;
|
|
7855
7933
|
textarea.style.height = "auto";
|
|
@@ -7865,8 +7943,8 @@ function useAutoGrow(ref, value, autoGrow = false, minHeight, maxHeight) {
|
|
|
7865
7943
|
}, [value, autoGrow, minHeight, maxHeight, ref]);
|
|
7866
7944
|
}
|
|
7867
7945
|
function useMergedTextareaRef(forwarded) {
|
|
7868
|
-
const internal =
|
|
7869
|
-
const callback =
|
|
7946
|
+
const internal = React45.useRef(null);
|
|
7947
|
+
const callback = React45.useCallback(
|
|
7870
7948
|
(node) => {
|
|
7871
7949
|
internal.current = node;
|
|
7872
7950
|
if (typeof forwarded === "function") forwarded(node);
|
|
@@ -7883,7 +7961,7 @@ function boxStyle(minHeight, maxHeight) {
|
|
|
7883
7961
|
maxHeight: maxHeight ? `${maxHeight}px` : void 0
|
|
7884
7962
|
};
|
|
7885
7963
|
}
|
|
7886
|
-
var Textarea =
|
|
7964
|
+
var Textarea = React45.forwardRef(
|
|
7887
7965
|
({ className, autoGrow, minHeight, maxHeight, wrapperClassName, ...props }, forwarded) => {
|
|
7888
7966
|
const { ref, callback } = useMergedTextareaRef(forwarded);
|
|
7889
7967
|
const stretchClasses = getStretchClasses(className);
|
|
@@ -7909,7 +7987,7 @@ var Textarea = React44.forwardRef(
|
|
|
7909
7987
|
}
|
|
7910
7988
|
);
|
|
7911
7989
|
Textarea.displayName = "Textarea";
|
|
7912
|
-
var BasicTextarea =
|
|
7990
|
+
var BasicTextarea = React45.forwardRef(
|
|
7913
7991
|
({ className, autoGrow, minHeight, maxHeight, ...props }, forwarded) => {
|
|
7914
7992
|
const { ref, callback } = useMergedTextareaRef(forwarded);
|
|
7915
7993
|
useAutoGrow(ref, props.value, autoGrow, minHeight, maxHeight);
|
|
@@ -7931,7 +8009,7 @@ var BasicTextarea = React44.forwardRef(
|
|
|
7931
8009
|
}
|
|
7932
8010
|
);
|
|
7933
8011
|
BasicTextarea.displayName = "BasicTextarea";
|
|
7934
|
-
var TextareaWithPrefix =
|
|
8012
|
+
var TextareaWithPrefix = React45.forwardRef(
|
|
7935
8013
|
({
|
|
7936
8014
|
prefix,
|
|
7937
8015
|
className,
|
|
@@ -7974,7 +8052,7 @@ TextareaWithPrefix.displayName = "TextareaWithPrefix";
|
|
|
7974
8052
|
|
|
7975
8053
|
// src/controls/controls.tsx
|
|
7976
8054
|
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
7977
|
-
var ControlRow =
|
|
8055
|
+
var ControlRow = React46.forwardRef(
|
|
7978
8056
|
({ className, nowrap, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
7979
8057
|
"div",
|
|
7980
8058
|
{
|
|
@@ -7987,7 +8065,7 @@ var ControlRow = React45.forwardRef(
|
|
|
7987
8065
|
)
|
|
7988
8066
|
);
|
|
7989
8067
|
ControlRow.displayName = "ControlRow";
|
|
7990
|
-
var ControlScope =
|
|
8068
|
+
var ControlScope = React46.forwardRef(
|
|
7991
8069
|
(props, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { ref, "data-matrx-controls": "", ...props })
|
|
7992
8070
|
);
|
|
7993
8071
|
ControlScope.displayName = "ControlScope";
|
|
@@ -7998,14 +8076,14 @@ function glyphSlot(icon, iconEnd, label) {
|
|
|
7998
8076
|
if (iconEnd) return "end";
|
|
7999
8077
|
return void 0;
|
|
8000
8078
|
}
|
|
8001
|
-
var Button4 =
|
|
8079
|
+
var Button4 = React46.forwardRef(
|
|
8002
8080
|
({ className, variant = "outline", tone, icon, iconEnd, asChild = false, collapse, pressed, badge, glyphTone, removes, meta, width, hero, children, onClick, type, ...props }, ref) => {
|
|
8003
8081
|
const Component = asChild ? import_react_slot4.Slot : "button";
|
|
8004
8082
|
const badgeText = typeof badge === "number" ? badge > 0 ? badge > 99 ? "99+" : String(badge) : null : badge ? "" : null;
|
|
8005
8083
|
const ariaDisabled = props["aria-disabled"];
|
|
8006
8084
|
const disabledChild = asChild && Boolean(props.disabled);
|
|
8007
8085
|
const inert = disabledChild || ariaDisabled === true || ariaDisabled === "true";
|
|
8008
|
-
const label = asChild &&
|
|
8086
|
+
const label = asChild && React46.isValidElement(children) ? children.props.children : children;
|
|
8009
8087
|
const collapses = collapse === "container" && Boolean(icon) && Boolean(label);
|
|
8010
8088
|
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
8011
8089
|
Component,
|
|
@@ -8043,11 +8121,11 @@ var Button4 = React45.forwardRef(
|
|
|
8043
8121
|
}
|
|
8044
8122
|
);
|
|
8045
8123
|
Button4.displayName = "Button";
|
|
8046
|
-
var SplitButton =
|
|
8124
|
+
var SplitButton = React46.forwardRef(
|
|
8047
8125
|
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { ref, role: "group", "data-matrx-control": "split", className: cn2("matrx-control-split", className), ...props })
|
|
8048
8126
|
);
|
|
8049
8127
|
SplitButton.displayName = "SplitButton";
|
|
8050
|
-
var Field =
|
|
8128
|
+
var Field = React46.forwardRef(
|
|
8051
8129
|
({ className, style, icon, end, width, hero, filled, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
8052
8130
|
"label",
|
|
8053
8131
|
{
|
|
@@ -8067,7 +8145,7 @@ var Field = React45.forwardRef(
|
|
|
8067
8145
|
)
|
|
8068
8146
|
);
|
|
8069
8147
|
Field.displayName = "Field";
|
|
8070
|
-
var SearchField3 =
|
|
8148
|
+
var SearchField3 = React46.forwardRef(
|
|
8071
8149
|
({ placeholder = "Search", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
8072
8150
|
Field,
|
|
8073
8151
|
{
|
|
@@ -8081,7 +8159,7 @@ var SearchField3 = React45.forwardRef(
|
|
|
8081
8159
|
)
|
|
8082
8160
|
);
|
|
8083
8161
|
SearchField3.displayName = "SearchField";
|
|
8084
|
-
var Chip =
|
|
8162
|
+
var Chip = React46.forwardRef(
|
|
8085
8163
|
({ label, variant = "item", tone, icon, asChild = false, pressed, children, className, title, ...props }, ref) => {
|
|
8086
8164
|
const Component = asChild ? import_react_slot4.Slot : "span";
|
|
8087
8165
|
const glyph = variant === "add" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PlusIcon, { className: "lucide lucide-plus" }) : icon;
|
|
@@ -8111,7 +8189,7 @@ var Chip = React45.forwardRef(
|
|
|
8111
8189
|
}
|
|
8112
8190
|
);
|
|
8113
8191
|
Chip.displayName = "Chip";
|
|
8114
|
-
var ChipSet =
|
|
8192
|
+
var ChipSet = React46.forwardRef(
|
|
8115
8193
|
({ layout = "flow", className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
8116
8194
|
"div",
|
|
8117
8195
|
{
|
|
@@ -8124,7 +8202,7 @@ var ChipSet = React45.forwardRef(
|
|
|
8124
8202
|
)
|
|
8125
8203
|
);
|
|
8126
8204
|
ChipSet.displayName = "ChipSet";
|
|
8127
|
-
var Switch3 =
|
|
8205
|
+
var Switch3 = React46.forwardRef(
|
|
8128
8206
|
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
8129
8207
|
SwitchPrimitives.Root,
|
|
8130
8208
|
{
|
|
@@ -8137,7 +8215,7 @@ var Switch3 = React45.forwardRef(
|
|
|
8137
8215
|
)
|
|
8138
8216
|
);
|
|
8139
8217
|
Switch3.displayName = "Switch";
|
|
8140
|
-
var Textarea2 =
|
|
8218
|
+
var Textarea2 = React46.forwardRef(
|
|
8141
8219
|
({ className, style, variant = "field", mono, hero, joinedBottom, autoGrow, minHeight, maxHeight, reservedInlineEnd, reservedBlockEnd, ...props }, forwarded) => {
|
|
8142
8220
|
const { ref, callback } = useMergedTextareaRef(forwarded);
|
|
8143
8221
|
useAutoGrow(ref, props.value, autoGrow, minHeight, maxHeight);
|
|
@@ -8243,15 +8321,15 @@ function CodeTimer({ fraction, label, className }) {
|
|
|
8243
8321
|
] });
|
|
8244
8322
|
}
|
|
8245
8323
|
function TimedCode({ code, validUntilMs, periodSeconds, now = Date.now, onExpire, className, ...props }) {
|
|
8246
|
-
const [at, setAt] =
|
|
8247
|
-
const expired =
|
|
8248
|
-
|
|
8324
|
+
const [at, setAt] = React47.useState(() => now());
|
|
8325
|
+
const expired = React47.useRef(false);
|
|
8326
|
+
React47.useEffect(() => {
|
|
8249
8327
|
expired.current = false;
|
|
8250
8328
|
const id = setInterval(() => setAt(now()), 1e3);
|
|
8251
8329
|
return () => clearInterval(id);
|
|
8252
8330
|
}, [validUntilMs, now]);
|
|
8253
8331
|
const left = Math.max(0, validUntilMs - at);
|
|
8254
|
-
|
|
8332
|
+
React47.useEffect(() => {
|
|
8255
8333
|
if (left === 0 && !expired.current) {
|
|
8256
8334
|
expired.current = true;
|
|
8257
8335
|
onExpire?.();
|
|
@@ -8478,12 +8556,12 @@ var import_format4 = require("@ai-matrx/kit/format");
|
|
|
8478
8556
|
// src/confirm-host.tsx
|
|
8479
8557
|
var import_confirm_opener = require("@ai-matrx/kit/confirm-opener");
|
|
8480
8558
|
var import_opener_react = require("@ai-matrx/kit/opener-react");
|
|
8481
|
-
var
|
|
8559
|
+
var React49 = __toESM(require("react"), 1);
|
|
8482
8560
|
|
|
8483
8561
|
// src/alert-dialog.tsx
|
|
8484
8562
|
var AlertDialogPrimitive = __toESM(require("@radix-ui/react-alert-dialog"), 1);
|
|
8485
8563
|
var import_react_tree2 = require("@ai-matrx/kit/react-tree");
|
|
8486
|
-
var
|
|
8564
|
+
var React48 = __toESM(require("react"), 1);
|
|
8487
8565
|
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
8488
8566
|
var AlertDialog = AlertDialogPrimitive.Root;
|
|
8489
8567
|
var AlertDialogPortal = ({
|
|
@@ -8494,7 +8572,7 @@ var AlertDialogPortal = ({
|
|
|
8494
8572
|
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertDialogPrimitive.Portal, { container: resolved ?? null, ...props });
|
|
8495
8573
|
};
|
|
8496
8574
|
AlertDialogPortal.displayName = "AlertDialogPortal";
|
|
8497
|
-
var AlertDialogOverlay =
|
|
8575
|
+
var AlertDialogOverlay = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
8498
8576
|
AlertDialogPrimitive.Overlay,
|
|
8499
8577
|
{
|
|
8500
8578
|
ref,
|
|
@@ -8508,12 +8586,12 @@ var AlertDialogOverlay = React47.forwardRef(({ className, ...props }, ref) => /*
|
|
|
8508
8586
|
}
|
|
8509
8587
|
));
|
|
8510
8588
|
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
|
|
8511
|
-
var AlertDialogContentPrimitive =
|
|
8589
|
+
var AlertDialogContentPrimitive = React48.forwardRef(({ onCloseAutoFocus, ...props }, ref) => {
|
|
8512
8590
|
useModalLayer(true);
|
|
8513
8591
|
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertDialogPrimitive.Content, { ...props, ref, "aria-modal": "true", onCloseAutoFocus: keepMovedFocus(onCloseAutoFocus) });
|
|
8514
8592
|
});
|
|
8515
8593
|
AlertDialogContentPrimitive.displayName = "AlertDialogContentPrimitive";
|
|
8516
|
-
var AlertDialogDescription =
|
|
8594
|
+
var AlertDialogDescription = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
8517
8595
|
AlertDialogPrimitive.Description,
|
|
8518
8596
|
{
|
|
8519
8597
|
ref,
|
|
@@ -8523,7 +8601,7 @@ var AlertDialogDescription = React47.forwardRef(({ className, ...props }, ref) =
|
|
|
8523
8601
|
}
|
|
8524
8602
|
));
|
|
8525
8603
|
AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
|
|
8526
|
-
var AlertDialogContent =
|
|
8604
|
+
var AlertDialogContent = React48.forwardRef(({ className, children, container, animated = true, ...props }, ref) => {
|
|
8527
8605
|
const hasDescription = (0, import_react_tree2.treeContainsComponent)(children, AlertDialogDescription) || (0, import_react_tree2.treeContainsComponent)(children, AlertDialogPrimitive.Description);
|
|
8528
8606
|
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(AlertDialogPortal, { container, children: [
|
|
8529
8607
|
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertDialogOverlay, {}),
|
|
@@ -8602,7 +8680,7 @@ var AlertDialogFooter = ({
|
|
|
8602
8680
|
}
|
|
8603
8681
|
);
|
|
8604
8682
|
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
8605
|
-
var AlertDialogTitle =
|
|
8683
|
+
var AlertDialogTitle = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
8606
8684
|
AlertDialogPrimitive.Title,
|
|
8607
8685
|
{
|
|
8608
8686
|
ref,
|
|
@@ -8612,7 +8690,7 @@ var AlertDialogTitle = React47.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
8612
8690
|
}
|
|
8613
8691
|
));
|
|
8614
8692
|
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
|
|
8615
|
-
var AlertDialogAction =
|
|
8693
|
+
var AlertDialogAction = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
8616
8694
|
AlertDialogPrimitive.Action,
|
|
8617
8695
|
{
|
|
8618
8696
|
ref,
|
|
@@ -8622,7 +8700,7 @@ var AlertDialogAction = React47.forwardRef(({ className, ...props }, ref) => /*
|
|
|
8622
8700
|
}
|
|
8623
8701
|
));
|
|
8624
8702
|
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
|
|
8625
|
-
var AlertDialogCancel =
|
|
8703
|
+
var AlertDialogCancel = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
8626
8704
|
AlertDialogPrimitive.Cancel,
|
|
8627
8705
|
{
|
|
8628
8706
|
ref,
|
|
@@ -8699,9 +8777,9 @@ function ConfirmDialog2({
|
|
|
8699
8777
|
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
8700
8778
|
function ConfirmDialogHost() {
|
|
8701
8779
|
const { shown, open, settle } = (0, import_opener_react.useOpenerHost)(import_confirm_opener.confirmOpener);
|
|
8702
|
-
const [readyFor, setReadyFor] =
|
|
8780
|
+
const [readyFor, setReadyFor] = React49.useState(null);
|
|
8703
8781
|
const ready = shown?.ready;
|
|
8704
|
-
|
|
8782
|
+
React49.useEffect(() => {
|
|
8705
8783
|
if (!shown || !ready) return void 0;
|
|
8706
8784
|
let live = true;
|
|
8707
8785
|
const release = () => {
|
|
@@ -8713,8 +8791,8 @@ function ConfirmDialogHost() {
|
|
|
8713
8791
|
};
|
|
8714
8792
|
}, [shown, ready]);
|
|
8715
8793
|
const held = !!ready && readyFor !== shown;
|
|
8716
|
-
const handleConfirm =
|
|
8717
|
-
const handleOpenChange =
|
|
8794
|
+
const handleConfirm = React49.useCallback(() => settle(true), [settle]);
|
|
8795
|
+
const handleOpenChange = React49.useCallback(
|
|
8718
8796
|
(next) => {
|
|
8719
8797
|
if (!next) settle(false);
|
|
8720
8798
|
},
|
|
@@ -8738,10 +8816,10 @@ function ConfirmDialogHost() {
|
|
|
8738
8816
|
|
|
8739
8817
|
// src/desktop/popover.tsx
|
|
8740
8818
|
var PopoverPrimitive2 = __toESM(require("@radix-ui/react-popover"), 1);
|
|
8741
|
-
var
|
|
8819
|
+
var React50 = __toESM(require("react"), 1);
|
|
8742
8820
|
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
8743
8821
|
var POPOVER_ARROW = { width: 18, height: 9 };
|
|
8744
|
-
var PopoverContent2 =
|
|
8822
|
+
var PopoverContent2 = React50.forwardRef(
|
|
8745
8823
|
({ arrow = true, sideOffset, className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
|
|
8746
8824
|
PopoverContent,
|
|
8747
8825
|
{
|
|
@@ -8762,7 +8840,7 @@ PopoverContent2.displayName = "DesktopPopoverContent";
|
|
|
8762
8840
|
|
|
8763
8841
|
// src/controls/surfaces.tsx
|
|
8764
8842
|
var import_react_slot5 = require("@radix-ui/react-slot");
|
|
8765
|
-
var
|
|
8843
|
+
var React51 = __toESM(require("react"), 1);
|
|
8766
8844
|
|
|
8767
8845
|
// src/skeleton.tsx
|
|
8768
8846
|
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
@@ -8824,7 +8902,7 @@ function Skeleton({ className, animated = true, motion = "pulse", shape, height,
|
|
|
8824
8902
|
|
|
8825
8903
|
// src/controls/surfaces.tsx
|
|
8826
8904
|
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
8827
|
-
var Tile =
|
|
8905
|
+
var Tile = React51.forwardRef(
|
|
8828
8906
|
({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone, iconTone, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
|
|
8829
8907
|
const Component = asChild ? import_react_slot5.Slot : "button";
|
|
8830
8908
|
const ariaDisabled = props["aria-disabled"];
|
|
@@ -8865,13 +8943,13 @@ var Tile = React50.forwardRef(
|
|
|
8865
8943
|
className: cn2("matrx-tile", className),
|
|
8866
8944
|
...props,
|
|
8867
8945
|
onClick: inert ? swallowClick : onClick,
|
|
8868
|
-
children: asChild &&
|
|
8946
|
+
children: asChild && React51.isValidElement(children) ? React51.cloneElement(children, void 0, body) : body
|
|
8869
8947
|
}
|
|
8870
8948
|
);
|
|
8871
8949
|
}
|
|
8872
8950
|
);
|
|
8873
8951
|
Tile.displayName = "Tile";
|
|
8874
|
-
var DisclosureHeader =
|
|
8952
|
+
var DisclosureHeader = React51.forwardRef(
|
|
8875
8953
|
({ open, variant = "row", icon, glyphTone, title, meta, end, line, chevron = "start", className, type, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
|
|
8876
8954
|
"button",
|
|
8877
8955
|
{
|
|
@@ -8899,7 +8977,7 @@ var DisclosureHeader = React50.forwardRef(
|
|
|
8899
8977
|
)
|
|
8900
8978
|
);
|
|
8901
8979
|
DisclosureHeader.displayName = "DisclosureHeader";
|
|
8902
|
-
var DeleteButton =
|
|
8980
|
+
var DeleteButton = React51.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Button4, { ref, variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Trash2Icon, {}), "data-delete": "", title: props["aria-label"], ...props }));
|
|
8903
8981
|
DeleteButton.displayName = "DeleteButton";
|
|
8904
8982
|
|
|
8905
8983
|
// src/desktop/list-row.tsx
|
|
@@ -8924,7 +9002,7 @@ function ListRow({ icon, title, secondary, accessory, onSelect, selected = false
|
|
|
8924
9002
|
}
|
|
8925
9003
|
|
|
8926
9004
|
// src/desktop/info-hint.tsx
|
|
8927
|
-
var
|
|
9005
|
+
var React52 = __toESM(require("react"), 1);
|
|
8928
9006
|
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
8929
9007
|
var INFO_HINT_MAX = 140;
|
|
8930
9008
|
function infoHintText(label, text) {
|
|
@@ -8940,7 +9018,7 @@ function InfoGlyph2() {
|
|
|
8940
9018
|
] });
|
|
8941
9019
|
}
|
|
8942
9020
|
function InfoHint({ label, text, side = "top", className }) {
|
|
8943
|
-
const shown =
|
|
9021
|
+
const shown = React52.useMemo(() => infoHintText(label, text), [label, text]);
|
|
8944
9022
|
return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Popover, { children: [
|
|
8945
9023
|
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
8946
9024
|
Button4,
|
|
@@ -8959,11 +9037,11 @@ function InfoHint({ label, text, side = "top", className }) {
|
|
|
8959
9037
|
|
|
8960
9038
|
// src/collapsible.tsx
|
|
8961
9039
|
var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"), 1);
|
|
8962
|
-
var
|
|
9040
|
+
var React53 = __toESM(require("react"), 1);
|
|
8963
9041
|
var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
8964
9042
|
var Collapsible = CollapsiblePrimitive.Root;
|
|
8965
9043
|
var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
|
|
8966
|
-
var CollapsibleContent2 =
|
|
9044
|
+
var CollapsibleContent2 = React53.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
|
|
8967
9045
|
CollapsiblePrimitive.CollapsibleContent,
|
|
8968
9046
|
{
|
|
8969
9047
|
ref,
|
|
@@ -8978,7 +9056,7 @@ var CollapsibleContent2 = React52.forwardRef(({ className, animated = true, ...p
|
|
|
8978
9056
|
CollapsibleContent2.displayName = "CollapsibleContent";
|
|
8979
9057
|
|
|
8980
9058
|
// src/app-shell/app-rail.tsx
|
|
8981
|
-
var
|
|
9059
|
+
var React54 = __toESM(require("react"), 1);
|
|
8982
9060
|
|
|
8983
9061
|
// src/app-shell/status-dot.tsx
|
|
8984
9062
|
var import_jsx_runtime72 = require("react/jsx-runtime");
|
|
@@ -9047,7 +9125,7 @@ function AppRailGroup({ className, ...props }) {
|
|
|
9047
9125
|
function AppRailSpacer() {
|
|
9048
9126
|
return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { "data-slot": "app-rail-spacer", className: "flex-1" });
|
|
9049
9127
|
}
|
|
9050
|
-
var AppRailItem =
|
|
9128
|
+
var AppRailItem = React54.forwardRef(function AppRailItem2({ icon, label, shortcut, active = false, attention, attentionLabel, className, ...props }, ref) {
|
|
9051
9129
|
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(Tooltip, { children: [
|
|
9052
9130
|
/* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
|
|
9053
9131
|
"button",
|
|
@@ -9087,7 +9165,7 @@ var AppRailItem = React53.forwardRef(function AppRailItem2({ icon, label, shortc
|
|
|
9087
9165
|
] }) })
|
|
9088
9166
|
] });
|
|
9089
9167
|
});
|
|
9090
|
-
var AppRailAvatar =
|
|
9168
|
+
var AppRailAvatar = React54.forwardRef(function AppRailAvatar2({ initials: initials2 = "", label, className, children, ...props }, ref) {
|
|
9091
9169
|
return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(Tooltip, { children: [
|
|
9092
9170
|
/* @__PURE__ */ (0, import_jsx_runtime73.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
|
|
9093
9171
|
"button",
|
|
@@ -9110,7 +9188,7 @@ var AppRailAvatar = React53.forwardRef(function AppRailAvatar2({ initials: initi
|
|
|
9110
9188
|
});
|
|
9111
9189
|
|
|
9112
9190
|
// src/app-shell/canvas.tsx
|
|
9113
|
-
var
|
|
9191
|
+
var React55 = __toESM(require("react"), 1);
|
|
9114
9192
|
|
|
9115
9193
|
// src/resizable.tsx
|
|
9116
9194
|
var import_react_resizable_panels = require("react-resizable-panels");
|
|
@@ -9177,7 +9255,7 @@ function CanvasLayout({ columns, expandedId = null, className }) {
|
|
|
9177
9255
|
if (expanded) {
|
|
9178
9256
|
return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { "data-slot": "canvas-layout", "data-expanded": expanded.id, className: cn2("flex h-full w-full", className), children: expanded.node });
|
|
9179
9257
|
}
|
|
9180
|
-
return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResizablePanelGroup, { "data-slot": "canvas-layout", orientation: "horizontal", className: cn2("gap-0", className), children: visible.map((column, ci) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
|
|
9258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResizablePanelGroup, { "data-slot": "canvas-layout", orientation: "horizontal", className: cn2("gap-0", className), children: visible.map((column, ci) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(React55.Fragment, { children: [
|
|
9181
9259
|
ci > 0 ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResizableHandle, { "data-canvas-gap": "column", size: "md", className: GAP }) : null,
|
|
9182
9260
|
/* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
|
|
9183
9261
|
ResizablePanel,
|
|
@@ -9185,7 +9263,7 @@ function CanvasLayout({ columns, expandedId = null, className }) {
|
|
|
9185
9263
|
id: column.id,
|
|
9186
9264
|
minSize: column.minSize ?? 220,
|
|
9187
9265
|
...column.defaultSize !== void 0 ? { defaultSize: column.defaultSize } : {},
|
|
9188
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResizablePanelGroup, { "data-canvas-column": column.id, orientation: "vertical", children: column.panels.map((panel, pi) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
|
|
9266
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResizablePanelGroup, { "data-canvas-column": column.id, orientation: "vertical", children: column.panels.map((panel, pi) => /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(React55.Fragment, { children: [
|
|
9189
9267
|
pi > 0 ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(ResizableHandle, { "data-canvas-gap": "row", size: "md", className: GAP }) : null,
|
|
9190
9268
|
/* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
|
|
9191
9269
|
ResizablePanel,
|
|
@@ -9203,10 +9281,10 @@ function CanvasLayout({ columns, expandedId = null, className }) {
|
|
|
9203
9281
|
}
|
|
9204
9282
|
|
|
9205
9283
|
// src/app-shell/mode-switch.tsx
|
|
9206
|
-
var
|
|
9284
|
+
var React56 = __toESM(require("react"), 1);
|
|
9207
9285
|
var import_jsx_runtime76 = require("react/jsx-runtime");
|
|
9208
9286
|
function ModeSwitch({ value, onValueChange, options, label = "Mode", className }) {
|
|
9209
|
-
const refs =
|
|
9287
|
+
const refs = React56.useRef([]);
|
|
9210
9288
|
const move = (from, delta) => {
|
|
9211
9289
|
const next = (from + delta + options.length) % options.length;
|
|
9212
9290
|
const option = options[next];
|
|
@@ -9268,7 +9346,7 @@ function ModeSwitch({ value, onValueChange, options, label = "Mode", className }
|
|
|
9268
9346
|
}
|
|
9269
9347
|
|
|
9270
9348
|
// src/organization-picker.tsx
|
|
9271
|
-
var
|
|
9349
|
+
var React57 = __toESM(require("react"), 1);
|
|
9272
9350
|
var import_jsx_runtime77 = require("react/jsx-runtime");
|
|
9273
9351
|
function matchesOrganizationQuery(org, query) {
|
|
9274
9352
|
const q = query.trim().toLowerCase();
|
|
@@ -9330,7 +9408,7 @@ function orderOrganizationsForPicker(organizations, favoriteOrganizationIds, act
|
|
|
9330
9408
|
}
|
|
9331
9409
|
|
|
9332
9410
|
// src/desktop/organization-picker.tsx
|
|
9333
|
-
var
|
|
9411
|
+
var React58 = __toESM(require("react"), 1);
|
|
9334
9412
|
var import_jsx_runtime78 = require("react/jsx-runtime");
|
|
9335
9413
|
var ROLE = { owner: "Owner", admin: "Admin", member: "Member" };
|
|
9336
9414
|
function roleLabel(role) {
|
|
@@ -9345,9 +9423,9 @@ function OrganizationPickerSheet({
|
|
|
9345
9423
|
onSwitch,
|
|
9346
9424
|
onToggleFavorite
|
|
9347
9425
|
}) {
|
|
9348
|
-
const [query, setQuery] =
|
|
9349
|
-
const [chosen, setChosen] =
|
|
9350
|
-
|
|
9426
|
+
const [query, setQuery] = React58.useState("");
|
|
9427
|
+
const [chosen, setChosen] = React58.useState(activeOrganizationId);
|
|
9428
|
+
React58.useEffect(() => {
|
|
9351
9429
|
if (open) {
|
|
9352
9430
|
setQuery("");
|
|
9353
9431
|
setChosen(activeOrganizationId);
|