@ai-matrx/design-system 0.86.350 → 0.86.351
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 +5 -0
- package/dist/carousel.js +2 -2
- package/dist/{chunk-BCGNEWZM.js → chunk-FLWSEDUW.js} +2 -2
- package/dist/{chunk-UTADJKVR.js → chunk-GMNROZQJ.js} +3 -3
- package/dist/{chunk-UTADJKVR.js.map → chunk-GMNROZQJ.js.map} +1 -1
- package/dist/{chunk-SC3XPADZ.js → chunk-UGQRAQTE.js} +431 -342
- package/dist/chunk-UGQRAQTE.js.map +1 -0
- package/dist/controls.cjs +547 -458
- package/dist/controls.cjs.map +1 -1
- package/dist/controls.css +27 -18
- package/dist/controls.d.cts +51 -3
- package/dist/controls.d.ts +51 -3
- package/dist/controls.js +10 -2
- package/dist/data-table/index.cjs +45 -38
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.js +44 -37
- package/dist/data-table/index.js.map +1 -1
- package/dist/desktop.cjs +90 -29
- package/dist/desktop.cjs.map +1 -1
- package/dist/desktop.css +19 -0
- package/dist/desktop.d.cts +1 -1
- package/dist/desktop.d.ts +1 -1
- package/dist/desktop.js +90 -29
- package/dist/desktop.js.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/settings.cjs +2 -2
- package/dist/settings.cjs.map +1 -1
- package/dist/settings.js +1 -1
- package/dist/writing-field.cjs +2 -2
- package/dist/writing-field.cjs.map +1 -1
- package/dist/writing-field.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-SC3XPADZ.js.map +0 -1
- /package/dist/{chunk-BCGNEWZM.js.map → chunk-FLWSEDUW.js.map} +0 -0
package/dist/controls.cjs
CHANGED
|
@@ -44,6 +44,10 @@ __export(controls_exports, {
|
|
|
44
44
|
CONTROLS_CONTAINER_CLASS: () => CONTROLS_CONTAINER_CLASS,
|
|
45
45
|
CONTROLS_CONTAINER_NAME: () => CONTROLS_CONTAINER_NAME,
|
|
46
46
|
CalloutBanner: () => CalloutBanner,
|
|
47
|
+
Checklist: () => Checklist,
|
|
48
|
+
ChecklistItem: () => ChecklistItem,
|
|
49
|
+
ChecklistMark: () => ChecklistMark,
|
|
50
|
+
ChecklistMeter: () => ChecklistMeter,
|
|
47
51
|
Chip: () => Chip,
|
|
48
52
|
ChipSet: () => ChipSet,
|
|
49
53
|
CitationChip: () => CitationChip,
|
|
@@ -3621,12 +3625,12 @@ function SettingRow({ label, line, htmlFor, children, className }) {
|
|
|
3621
3625
|
] });
|
|
3622
3626
|
}
|
|
3623
3627
|
var Tile = React20.forwardRef(
|
|
3624
|
-
({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone: tone2, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
|
|
3628
|
+
({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone: tone2, iconTone, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
|
|
3625
3629
|
const Component = asChild ? import_react_slot4.Slot : "button";
|
|
3626
3630
|
const ariaDisabled = props["aria-disabled"];
|
|
3627
3631
|
const inert = ariaDisabled === true || ariaDisabled === "true";
|
|
3628
3632
|
const body = /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
|
|
3629
|
-
icon ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-icon", children: icon }) : null,
|
|
3633
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-icon", "data-tone": iconTone && iconTone !== "neutral" ? iconTone : void 0, children: icon }) : null,
|
|
3630
3634
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "matrx-tile-text", children: [
|
|
3631
3635
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-title", children: title }),
|
|
3632
3636
|
line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-line", children: line }) : null
|
|
@@ -4048,9 +4052,94 @@ function StageSteps({ steps, current, labels = "all", maxVisible, className, ...
|
|
|
4048
4052
|
}) });
|
|
4049
4053
|
}
|
|
4050
4054
|
|
|
4055
|
+
// src/controls/checklist.tsx
|
|
4056
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
4057
|
+
var STATE_WORD = {
|
|
4058
|
+
done: "Met",
|
|
4059
|
+
open: "Missing",
|
|
4060
|
+
unknown: "Not measured"
|
|
4061
|
+
};
|
|
4062
|
+
function ChecklistMark({ state, className }) {
|
|
4063
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
4064
|
+
"span",
|
|
4065
|
+
{
|
|
4066
|
+
"data-matrx-checklist-mark": "",
|
|
4067
|
+
"data-state": state,
|
|
4068
|
+
role: "img",
|
|
4069
|
+
"aria-label": STATE_WORD[state],
|
|
4070
|
+
className: cn(
|
|
4071
|
+
"grid size-4 shrink-0 place-items-center rounded-full",
|
|
4072
|
+
state === "done" && "bg-success text-success-foreground",
|
|
4073
|
+
state === "open" && "border-2 border-warning",
|
|
4074
|
+
state === "unknown" && "border-2 border-dashed border-muted-foreground",
|
|
4075
|
+
className
|
|
4076
|
+
),
|
|
4077
|
+
children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CheckIcon, { className: "size-3", strokeWidth: 3 }) : null
|
|
4078
|
+
}
|
|
4079
|
+
);
|
|
4080
|
+
}
|
|
4081
|
+
function Checklist({ className, children, ...props }) {
|
|
4082
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { "data-matrx-checklist": "", className: cn("grid min-w-0", className), ...props, children });
|
|
4083
|
+
}
|
|
4084
|
+
function ChecklistItem({ state, title, line, end, className, ...props }) {
|
|
4085
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
4086
|
+
"li",
|
|
4087
|
+
{
|
|
4088
|
+
"data-matrx-checklist-item": "",
|
|
4089
|
+
"data-state": state,
|
|
4090
|
+
className: cn(
|
|
4091
|
+
"grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-x-2 py-1.5 sm:grid-cols-[auto_minmax(0,1fr)_auto]",
|
|
4092
|
+
className
|
|
4093
|
+
),
|
|
4094
|
+
...props,
|
|
4095
|
+
children: [
|
|
4096
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ChecklistMark, { state, className: "mt-0.5" }),
|
|
4097
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "min-w-0", children: [
|
|
4098
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "type-title truncate text-foreground", children: title }),
|
|
4099
|
+
line ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "type-secondary truncate text-muted-foreground", title: line, children: line }) : null
|
|
4100
|
+
] }),
|
|
4101
|
+
end ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "col-start-2 mt-1.5 flex justify-start sm:col-start-3 sm:row-start-1 sm:mt-0 sm:justify-end sm:self-center", children: end }) : null
|
|
4102
|
+
]
|
|
4103
|
+
}
|
|
4104
|
+
);
|
|
4105
|
+
}
|
|
4106
|
+
function ChecklistMeter({ label, met, total, end, className }) {
|
|
4107
|
+
const done = Math.max(0, Math.min(total, met));
|
|
4108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "data-matrx-checklist-meter": "", className: cn("grid min-w-0 gap-1.5", className), children: [
|
|
4109
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
4110
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "type-title min-w-0 truncate text-foreground", children: label }),
|
|
4111
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "type-meta shrink-0 tabular-nums text-muted-foreground", children: [
|
|
4112
|
+
done,
|
|
4113
|
+
" of ",
|
|
4114
|
+
total
|
|
4115
|
+
] }),
|
|
4116
|
+
end ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "ml-auto flex shrink-0 items-center", children: end }) : null
|
|
4117
|
+
] }),
|
|
4118
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
4119
|
+
"div",
|
|
4120
|
+
{
|
|
4121
|
+
role: "meter",
|
|
4122
|
+
"aria-valuemin": 0,
|
|
4123
|
+
"aria-valuemax": total,
|
|
4124
|
+
"aria-valuenow": done,
|
|
4125
|
+
"aria-label": `${done} of ${total} met`,
|
|
4126
|
+
className: "flex gap-1",
|
|
4127
|
+
children: Array.from({ length: total }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
4128
|
+
"span",
|
|
4129
|
+
{
|
|
4130
|
+
"data-filled": i < done ? "" : void 0,
|
|
4131
|
+
className: cn("h-1.5 flex-1 rounded-full", i < done ? "bg-success" : "bg-border")
|
|
4132
|
+
},
|
|
4133
|
+
i
|
|
4134
|
+
))
|
|
4135
|
+
}
|
|
4136
|
+
)
|
|
4137
|
+
] });
|
|
4138
|
+
}
|
|
4139
|
+
|
|
4051
4140
|
// src/controls/clamped-number-input.tsx
|
|
4052
4141
|
var import_react3 = require("react");
|
|
4053
|
-
var
|
|
4142
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
4054
4143
|
function shownDraft(raw, min, max, decimal = false) {
|
|
4055
4144
|
const next = clampDraft(raw, min, max, decimal);
|
|
4056
4145
|
if (next === null) return null;
|
|
@@ -4095,7 +4184,7 @@ function ClampedNumberInput({
|
|
|
4095
4184
|
setDraft(String(next));
|
|
4096
4185
|
if (next !== value) onChange(next);
|
|
4097
4186
|
};
|
|
4098
|
-
return /* @__PURE__ */ (0,
|
|
4187
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
4099
4188
|
Input,
|
|
4100
4189
|
{
|
|
4101
4190
|
id,
|
|
@@ -4128,7 +4217,7 @@ function ClampedNumberInput({
|
|
|
4128
4217
|
|
|
4129
4218
|
// src/controls/light-switch-toggle.tsx
|
|
4130
4219
|
var import_react4 = require("react");
|
|
4131
|
-
var
|
|
4220
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
4132
4221
|
var defaultSizes = {
|
|
4133
4222
|
width: "w-48",
|
|
4134
4223
|
height: "h-16"
|
|
@@ -4166,7 +4255,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
|
|
|
4166
4255
|
const buttonBaseClasses = "relative w-1/2 h-full transition-all duration-300";
|
|
4167
4256
|
const activeButtonClasses = "bg-primary transform -translate-y-px shadow-[inset_0_1px_3px_rgba(0,0,0,0.2)]";
|
|
4168
4257
|
const inactiveButtonClasses = "bg-muted/60 transform -translate-y-1.5";
|
|
4169
|
-
const renderOption = (isActive, label, side, onClick) => /* @__PURE__ */ (0,
|
|
4258
|
+
const renderOption = (isActive, label, side, onClick) => /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
4170
4259
|
"button",
|
|
4171
4260
|
{
|
|
4172
4261
|
type: "button",
|
|
@@ -4178,7 +4267,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
|
|
|
4178
4267
|
isActive ? activeButtonClasses : inactiveButtonClasses
|
|
4179
4268
|
),
|
|
4180
4269
|
children: [
|
|
4181
|
-
/* @__PURE__ */ (0,
|
|
4270
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4182
4271
|
"div",
|
|
4183
4272
|
{
|
|
4184
4273
|
className: cn(
|
|
@@ -4189,7 +4278,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
|
|
|
4189
4278
|
)
|
|
4190
4279
|
}
|
|
4191
4280
|
),
|
|
4192
|
-
/* @__PURE__ */ (0,
|
|
4281
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
4193
4282
|
"span",
|
|
4194
4283
|
{
|
|
4195
4284
|
className: cn(
|
|
@@ -4202,8 +4291,8 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
|
|
|
4202
4291
|
]
|
|
4203
4292
|
}
|
|
4204
4293
|
);
|
|
4205
|
-
return /* @__PURE__ */ (0,
|
|
4206
|
-
/* @__PURE__ */ (0,
|
|
4294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { ref, className: containerClasses, children: [
|
|
4295
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "absolute left-1/2 top-0 bottom-0 w-[2px] bg-border transform -translate-x-1/2 z-10" }),
|
|
4207
4296
|
renderOption(!isOn, labels.off, "left", () => handleToggle(false)),
|
|
4208
4297
|
renderOption(isOn, labels.on, "right", () => handleToggle(true))
|
|
4209
4298
|
] }) });
|
|
@@ -4222,12 +4311,12 @@ var React23 = __toESM(require("react"), 1);
|
|
|
4222
4311
|
// src/close-slot.tsx
|
|
4223
4312
|
var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
|
|
4224
4313
|
var React22 = __toESM(require("react"), 1);
|
|
4225
|
-
var
|
|
4314
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
4226
4315
|
var CLOSE_CONTROL_CLASSES = "flex h-11 w-11 shrink-0 items-center justify-center rounded-sm text-muted-foreground ring-offset-background transition-colors hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none lg:h-8 lg:w-8";
|
|
4227
4316
|
function CloseControl({ className }) {
|
|
4228
|
-
return /* @__PURE__ */ (0,
|
|
4229
|
-
/* @__PURE__ */ (0,
|
|
4230
|
-
/* @__PURE__ */ (0,
|
|
4317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPrimitive.Close, { "data-slot": "dialog-close", "aria-label": "Close", className: cn(CLOSE_CONTROL_CLASSES, className), children: [
|
|
4318
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(XIcon, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
4319
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "sr-only", children: "Close" })
|
|
4231
4320
|
] });
|
|
4232
4321
|
}
|
|
4233
4322
|
var CloseSlotContext = React22.createContext(null);
|
|
@@ -4259,7 +4348,7 @@ function useSearchRowCloseSlotClaim() {
|
|
|
4259
4348
|
return useClaim(SearchRowCloseSlotContext, false);
|
|
4260
4349
|
}
|
|
4261
4350
|
function CloseRow({ className }) {
|
|
4262
|
-
return /* @__PURE__ */ (0,
|
|
4351
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { "data-slot": "close-row", className: cn("flex justify-end", className), children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseControl, {}) });
|
|
4263
4352
|
}
|
|
4264
4353
|
var BODY_LAYOUT = /^!?(?:[a-z0-9]+:)*(?:flex|grid|flex-(?:row|col)(?:-reverse)?|grid-(?:cols|rows|flow)-\S+|place-\S+|items-\S+|justify-\S+|content-\S+|gap(?:-[xy])?-\S+|space-[xy]-\S+|text-(?:left|center|right|start|end)|flex-wrap|flex-nowrap)$/;
|
|
4265
4354
|
var OLD_CLOSE_RESERVE = /^pr-(?:8|9|10|11|12|14|16)$/;
|
|
@@ -4282,19 +4371,19 @@ function HeaderWithClose({
|
|
|
4282
4371
|
}) {
|
|
4283
4372
|
const owns = useCloseSlotClaim(/(?:^|\s)(?:sr-only|hidden)(?:\s|$)/.test(className ?? ""));
|
|
4284
4373
|
if (!owns) {
|
|
4285
|
-
return /* @__PURE__ */ (0,
|
|
4374
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { "data-slot": slotName, className: cn(baseClassName, className), ...props, children });
|
|
4286
4375
|
}
|
|
4287
4376
|
const { row, body } = splitHeaderClasses(className);
|
|
4288
4377
|
const rowish = /(?:^|\s)(?:[a-z0-9]+:)*flex-row(?:\s|$)/.test(body);
|
|
4289
|
-
return /* @__PURE__ */ (0,
|
|
4290
|
-
/* @__PURE__ */ (0,
|
|
4291
|
-
/* @__PURE__ */ (0,
|
|
4378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { "data-slot": slotName, "data-has-close": "", className: cn("flex gap-2", rowish ? "items-center" : "items-start", row), ...props, children: [
|
|
4379
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { "data-slot": `${slotName}-body`, className: cn("min-w-0 flex-1", baseClassName, body), children }),
|
|
4380
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseControl, { className: cn("-mr-2", !rowish && closeOffsetClassName) })
|
|
4292
4381
|
] });
|
|
4293
4382
|
}
|
|
4294
4383
|
|
|
4295
4384
|
// src/command.tsx
|
|
4296
|
-
var
|
|
4297
|
-
var Command = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4385
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
4386
|
+
var Command = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4298
4387
|
import_cmdk.Command,
|
|
4299
4388
|
{
|
|
4300
4389
|
ref,
|
|
@@ -4315,8 +4404,8 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
|
|
|
4315
4404
|
useModalLayer(isModal);
|
|
4316
4405
|
const portalContainer = usePortalContainer(container);
|
|
4317
4406
|
const closeSlot = useCloseSlot(true);
|
|
4318
|
-
return /* @__PURE__ */ (0,
|
|
4319
|
-
isModal ? /* @__PURE__ */ (0,
|
|
4407
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(DialogPrimitive2.Portal, { container: portalContainer, children: [
|
|
4408
|
+
isModal ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4320
4409
|
DialogPrimitive2.Overlay,
|
|
4321
4410
|
{
|
|
4322
4411
|
className: cn(
|
|
@@ -4325,7 +4414,7 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
|
|
|
4325
4414
|
)
|
|
4326
4415
|
}
|
|
4327
4416
|
) : null,
|
|
4328
|
-
/* @__PURE__ */ (0,
|
|
4417
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
4329
4418
|
DialogPrimitive2.Content,
|
|
4330
4419
|
{
|
|
4331
4420
|
ref,
|
|
@@ -4341,8 +4430,8 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
|
|
|
4341
4430
|
...props,
|
|
4342
4431
|
onInteractOutside: keepFloatingLayersInside(onInteractOutside),
|
|
4343
4432
|
children: [
|
|
4344
|
-
closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0,
|
|
4345
|
-
/* @__PURE__ */ (0,
|
|
4433
|
+
closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CloseRow, { className: "px-4 pt-4" }) : null,
|
|
4434
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CloseSlotProvider, { value: null, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SearchRowCloseSlotProvider, { value: closeSlot.slot, children }) })
|
|
4346
4435
|
]
|
|
4347
4436
|
}
|
|
4348
4437
|
)
|
|
@@ -4351,9 +4440,9 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
|
|
|
4351
4440
|
CommandDialogContent.displayName = "CommandDialogContent";
|
|
4352
4441
|
var CommandInput = React23.forwardRef(({ className, ...props }, ref) => {
|
|
4353
4442
|
const ownsClose = useSearchRowCloseSlotClaim();
|
|
4354
|
-
return /* @__PURE__ */ (0,
|
|
4355
|
-
/* @__PURE__ */ (0,
|
|
4356
|
-
/* @__PURE__ */ (0,
|
|
4443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2 border-b px-3", "cmdk-input-wrapper": "", children: [
|
|
4444
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(MagnifyingGlassIcon, { className: "h-4 w-4 shrink-0 opacity-50" }),
|
|
4445
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4357
4446
|
import_cmdk.Command.Input,
|
|
4358
4447
|
{
|
|
4359
4448
|
ref,
|
|
@@ -4364,11 +4453,11 @@ var CommandInput = React23.forwardRef(({ className, ...props }, ref) => {
|
|
|
4364
4453
|
...props
|
|
4365
4454
|
}
|
|
4366
4455
|
),
|
|
4367
|
-
ownsClose ? /* @__PURE__ */ (0,
|
|
4456
|
+
ownsClose ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CloseControl, { className: "-mr-1" }) : null
|
|
4368
4457
|
] });
|
|
4369
4458
|
});
|
|
4370
4459
|
CommandInput.displayName = import_cmdk.Command.Input.displayName;
|
|
4371
|
-
var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4460
|
+
var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4372
4461
|
import_cmdk.Command.List,
|
|
4373
4462
|
{
|
|
4374
4463
|
ref,
|
|
@@ -4377,7 +4466,7 @@ var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
4377
4466
|
}
|
|
4378
4467
|
));
|
|
4379
4468
|
CommandList.displayName = import_cmdk.Command.List.displayName;
|
|
4380
|
-
var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0,
|
|
4469
|
+
var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4381
4470
|
import_cmdk.Command.Empty,
|
|
4382
4471
|
{
|
|
4383
4472
|
ref,
|
|
@@ -4386,7 +4475,7 @@ var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0, import
|
|
|
4386
4475
|
}
|
|
4387
4476
|
));
|
|
4388
4477
|
CommandEmpty.displayName = import_cmdk.Command.Empty.displayName;
|
|
4389
|
-
var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4478
|
+
var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4390
4479
|
import_cmdk.Command.Group,
|
|
4391
4480
|
{
|
|
4392
4481
|
ref,
|
|
@@ -4398,7 +4487,7 @@ var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PU
|
|
|
4398
4487
|
}
|
|
4399
4488
|
));
|
|
4400
4489
|
CommandGroup.displayName = import_cmdk.Command.Group.displayName;
|
|
4401
|
-
var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4490
|
+
var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4402
4491
|
import_cmdk.Command.Separator,
|
|
4403
4492
|
{
|
|
4404
4493
|
ref,
|
|
@@ -4407,7 +4496,7 @@ var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
4407
4496
|
}
|
|
4408
4497
|
));
|
|
4409
4498
|
CommandSeparator.displayName = import_cmdk.Command.Separator.displayName;
|
|
4410
|
-
var CommandItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4499
|
+
var CommandItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4411
4500
|
import_cmdk.Command.Item,
|
|
4412
4501
|
{
|
|
4413
4502
|
ref,
|
|
@@ -4423,7 +4512,7 @@ var CommandShortcut = ({
|
|
|
4423
4512
|
className,
|
|
4424
4513
|
...props
|
|
4425
4514
|
}) => {
|
|
4426
|
-
return /* @__PURE__ */ (0,
|
|
4515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
4427
4516
|
"span",
|
|
4428
4517
|
{
|
|
4429
4518
|
className: cn(
|
|
@@ -4437,7 +4526,7 @@ var CommandShortcut = ({
|
|
|
4437
4526
|
CommandShortcut.displayName = "CommandShortcut";
|
|
4438
4527
|
|
|
4439
4528
|
// src/controls/option-combobox.tsx
|
|
4440
|
-
var
|
|
4529
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
4441
4530
|
function OptionCombobox({
|
|
4442
4531
|
value,
|
|
4443
4532
|
onChange,
|
|
@@ -4471,7 +4560,7 @@ function OptionCombobox({
|
|
|
4471
4560
|
setOpen(false);
|
|
4472
4561
|
setQuery("");
|
|
4473
4562
|
};
|
|
4474
|
-
return /* @__PURE__ */ (0,
|
|
4563
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
4475
4564
|
Popover,
|
|
4476
4565
|
{
|
|
4477
4566
|
open,
|
|
@@ -4483,7 +4572,7 @@ function OptionCombobox({
|
|
|
4483
4572
|
}
|
|
4484
4573
|
},
|
|
4485
4574
|
children: [
|
|
4486
|
-
/* @__PURE__ */ (0,
|
|
4575
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
4487
4576
|
"button",
|
|
4488
4577
|
{
|
|
4489
4578
|
id,
|
|
@@ -4504,7 +4593,7 @@ function OptionCombobox({
|
|
|
4504
4593
|
),
|
|
4505
4594
|
children: [
|
|
4506
4595
|
hasValue && renderIcon?.(value),
|
|
4507
|
-
/* @__PURE__ */ (0,
|
|
4596
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
4508
4597
|
"span",
|
|
4509
4598
|
{
|
|
4510
4599
|
className: cn(
|
|
@@ -4513,22 +4602,22 @@ function OptionCombobox({
|
|
|
4513
4602
|
),
|
|
4514
4603
|
children: [
|
|
4515
4604
|
hasValue ? getLabel(value) : placeholder,
|
|
4516
|
-
hint && /* @__PURE__ */ (0,
|
|
4605
|
+
hint && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: hint })
|
|
4517
4606
|
]
|
|
4518
4607
|
}
|
|
4519
4608
|
),
|
|
4520
|
-
/* @__PURE__ */ (0,
|
|
4609
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectChevron, { size: "sm", className: variant === "inline" ? "h-3 w-3" : void 0 })
|
|
4521
4610
|
]
|
|
4522
4611
|
}
|
|
4523
4612
|
) }),
|
|
4524
|
-
/* @__PURE__ */ (0,
|
|
4613
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
4525
4614
|
PopoverContent,
|
|
4526
4615
|
{
|
|
4527
4616
|
sizing: "content",
|
|
4528
4617
|
align: "start",
|
|
4529
4618
|
className: "p-0",
|
|
4530
|
-
children: /* @__PURE__ */ (0,
|
|
4531
|
-
searchable && /* @__PURE__ */ (0,
|
|
4619
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Command, { shouldFilter: false, children: [
|
|
4620
|
+
searchable && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
4532
4621
|
CommandInput,
|
|
4533
4622
|
{
|
|
4534
4623
|
placeholder: searchPlaceholder,
|
|
@@ -4536,8 +4625,8 @@ function OptionCombobox({
|
|
|
4536
4625
|
onValueChange: setQuery
|
|
4537
4626
|
}
|
|
4538
4627
|
),
|
|
4539
|
-
/* @__PURE__ */ (0,
|
|
4540
|
-
/* @__PURE__ */ (0,
|
|
4628
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(CommandList, { className: "max-h-72", children: [
|
|
4629
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(CommandEmpty, { children: [
|
|
4541
4630
|
"No match for \u201C",
|
|
4542
4631
|
query,
|
|
4543
4632
|
"\u201D."
|
|
@@ -4547,24 +4636,24 @@ function OptionCombobox({
|
|
|
4547
4636
|
if (visible.length === 0) return null;
|
|
4548
4637
|
const folded = group.collapsed && !showMore && !q && !group.options.includes(value);
|
|
4549
4638
|
if (folded) {
|
|
4550
|
-
return /* @__PURE__ */ (0,
|
|
4639
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CommandGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
4551
4640
|
CommandItem,
|
|
4552
4641
|
{
|
|
4553
4642
|
value: `__more_${gi}`,
|
|
4554
4643
|
onSelect: () => setShowMore(true),
|
|
4555
4644
|
className: "text-muted-foreground",
|
|
4556
4645
|
children: [
|
|
4557
|
-
/* @__PURE__ */ (0,
|
|
4646
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
|
|
4558
4647
|
group.heading ?? "More",
|
|
4559
|
-
/* @__PURE__ */ (0,
|
|
4648
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "ml-auto type-secondary tabular-nums", children: group.options.length })
|
|
4560
4649
|
]
|
|
4561
4650
|
}
|
|
4562
4651
|
) }, `g-${gi}`);
|
|
4563
4652
|
}
|
|
4564
|
-
return /* @__PURE__ */ (0,
|
|
4653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CommandGroup, { heading: group.heading, children: visible.map((o) => {
|
|
4565
4654
|
const selected = o === value;
|
|
4566
4655
|
const h = getHint?.(o);
|
|
4567
|
-
return /* @__PURE__ */ (0,
|
|
4656
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
4568
4657
|
CommandItem,
|
|
4569
4658
|
{
|
|
4570
4659
|
value: o,
|
|
@@ -4572,11 +4661,11 @@ function OptionCombobox({
|
|
|
4572
4661
|
className: "gap-2",
|
|
4573
4662
|
children: [
|
|
4574
4663
|
renderIcon?.(o),
|
|
4575
|
-
/* @__PURE__ */ (0,
|
|
4664
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "min-w-0 flex-1 truncate", children: [
|
|
4576
4665
|
getLabel(o),
|
|
4577
|
-
h && /* @__PURE__ */ (0,
|
|
4666
|
+
h && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: h })
|
|
4578
4667
|
] }),
|
|
4579
|
-
/* @__PURE__ */ (0,
|
|
4668
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
4580
4669
|
CheckIcon,
|
|
4581
4670
|
{
|
|
4582
4671
|
className: cn(
|
|
@@ -4678,7 +4767,7 @@ function groupRatioOptions(options) {
|
|
|
4678
4767
|
}
|
|
4679
4768
|
|
|
4680
4769
|
// src/controls/aspect-ratio-select.tsx
|
|
4681
|
-
var
|
|
4770
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
4682
4771
|
function AspectRatioGlyph({
|
|
4683
4772
|
value,
|
|
4684
4773
|
className
|
|
@@ -4686,7 +4775,7 @@ function AspectRatioGlyph({
|
|
|
4686
4775
|
const r = parseRatio(value);
|
|
4687
4776
|
const box = 14;
|
|
4688
4777
|
if (!r) {
|
|
4689
|
-
return /* @__PURE__ */ (0,
|
|
4778
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
4690
4779
|
"span",
|
|
4691
4780
|
{
|
|
4692
4781
|
"aria-hidden": true,
|
|
@@ -4694,14 +4783,14 @@ function AspectRatioGlyph({
|
|
|
4694
4783
|
"inline-flex h-3.5 w-3.5 shrink-0 items-center justify-center",
|
|
4695
4784
|
className
|
|
4696
4785
|
),
|
|
4697
|
-
children: /* @__PURE__ */ (0,
|
|
4786
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "h-2.5 w-2.5 rounded-[2px] border border-dashed border-current opacity-60" })
|
|
4698
4787
|
}
|
|
4699
4788
|
);
|
|
4700
4789
|
}
|
|
4701
4790
|
const k = r.w / r.h;
|
|
4702
4791
|
const w = k >= 1 ? box : Math.max(3, box * k);
|
|
4703
4792
|
const h = k >= 1 ? Math.max(3, box / k) : box;
|
|
4704
|
-
return /* @__PURE__ */ (0,
|
|
4793
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
4705
4794
|
"span",
|
|
4706
4795
|
{
|
|
4707
4796
|
"aria-hidden": true,
|
|
@@ -4709,7 +4798,7 @@ function AspectRatioGlyph({
|
|
|
4709
4798
|
"inline-flex h-3.5 w-3.5 shrink-0 items-center justify-center",
|
|
4710
4799
|
className
|
|
4711
4800
|
),
|
|
4712
|
-
children: /* @__PURE__ */ (0,
|
|
4801
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
4713
4802
|
"span",
|
|
4714
4803
|
{
|
|
4715
4804
|
className: "rounded-[2px] border-[1.5px] border-current opacity-80",
|
|
@@ -4736,7 +4825,7 @@ function AspectRatioSelect({
|
|
|
4736
4825
|
{ options: common },
|
|
4737
4826
|
...more.length ? [{ heading: "More ratios", options: more, collapsed: true }] : []
|
|
4738
4827
|
];
|
|
4739
|
-
return /* @__PURE__ */ (0,
|
|
4828
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
4740
4829
|
OptionCombobox,
|
|
4741
4830
|
{
|
|
4742
4831
|
value,
|
|
@@ -4744,7 +4833,7 @@ function AspectRatioSelect({
|
|
|
4744
4833
|
groups,
|
|
4745
4834
|
getLabel: (o) => parseRatio(o) ? o : humanizeRatioWord(o),
|
|
4746
4835
|
getHint: (o) => ratioShapeName(o),
|
|
4747
|
-
renderIcon: (o) => /* @__PURE__ */ (0,
|
|
4836
|
+
renderIcon: (o) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(AspectRatioGlyph, { value: o, className: "text-muted-foreground" }),
|
|
4748
4837
|
searchable: options.length > 12,
|
|
4749
4838
|
searchPlaceholder: "Search ratios\u2026",
|
|
4750
4839
|
placeholder,
|
|
@@ -4762,7 +4851,7 @@ var import_react6 = require("react");
|
|
|
4762
4851
|
|
|
4763
4852
|
// src/table.tsx
|
|
4764
4853
|
var React24 = __toESM(require("react"), 1);
|
|
4765
|
-
var
|
|
4854
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
4766
4855
|
var TABLE_SIZES = {
|
|
4767
4856
|
sm: { head: "px-2", cell: "p-2" },
|
|
4768
4857
|
md: { head: "px-3", cell: "p-3" }
|
|
@@ -4773,7 +4862,7 @@ function useTableSize() {
|
|
|
4773
4862
|
}
|
|
4774
4863
|
var Table = React24.forwardRef(
|
|
4775
4864
|
({ className, size = "md", wrap = true, wrapperClassName, ...props }, ref) => {
|
|
4776
|
-
const table = /* @__PURE__ */ (0,
|
|
4865
|
+
const table = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4777
4866
|
"table",
|
|
4778
4867
|
{
|
|
4779
4868
|
ref,
|
|
@@ -4783,7 +4872,7 @@ var Table = React24.forwardRef(
|
|
|
4783
4872
|
...props
|
|
4784
4873
|
}
|
|
4785
4874
|
);
|
|
4786
|
-
return /* @__PURE__ */ (0,
|
|
4875
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableSizeContext.Provider, { value: size, children: wrap ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4787
4876
|
"div",
|
|
4788
4877
|
{
|
|
4789
4878
|
"data-slot": "table-wrapper",
|
|
@@ -4794,7 +4883,7 @@ var Table = React24.forwardRef(
|
|
|
4794
4883
|
}
|
|
4795
4884
|
);
|
|
4796
4885
|
Table.displayName = "Table";
|
|
4797
|
-
var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4886
|
+
var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4798
4887
|
"thead",
|
|
4799
4888
|
{
|
|
4800
4889
|
ref,
|
|
@@ -4808,7 +4897,7 @@ var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, r
|
|
|
4808
4897
|
}
|
|
4809
4898
|
));
|
|
4810
4899
|
TableHeader.displayName = "TableHeader";
|
|
4811
|
-
var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4900
|
+
var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4812
4901
|
"tbody",
|
|
4813
4902
|
{
|
|
4814
4903
|
ref,
|
|
@@ -4818,7 +4907,7 @@ var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
4818
4907
|
}
|
|
4819
4908
|
));
|
|
4820
4909
|
TableBody.displayName = "TableBody";
|
|
4821
|
-
var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4910
|
+
var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4822
4911
|
"tfoot",
|
|
4823
4912
|
{
|
|
4824
4913
|
ref,
|
|
@@ -4831,7 +4920,7 @@ var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
4831
4920
|
}
|
|
4832
4921
|
));
|
|
4833
4922
|
TableFooter.displayName = "TableFooter";
|
|
4834
|
-
var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4923
|
+
var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4835
4924
|
"tr",
|
|
4836
4925
|
{
|
|
4837
4926
|
ref,
|
|
@@ -4846,7 +4935,7 @@ var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
4846
4935
|
TableRow.displayName = "TableRow";
|
|
4847
4936
|
var TableHead = React24.forwardRef(({ className, ...props }, ref) => {
|
|
4848
4937
|
const size = useTableSize();
|
|
4849
|
-
return /* @__PURE__ */ (0,
|
|
4938
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4850
4939
|
"th",
|
|
4851
4940
|
{
|
|
4852
4941
|
ref,
|
|
@@ -4863,7 +4952,7 @@ var TableHead = React24.forwardRef(({ className, ...props }, ref) => {
|
|
|
4863
4952
|
TableHead.displayName = "TableHead";
|
|
4864
4953
|
var TableCell = React24.forwardRef(({ className, ...props }, ref) => {
|
|
4865
4954
|
const size = useTableSize();
|
|
4866
|
-
return /* @__PURE__ */ (0,
|
|
4955
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4867
4956
|
"td",
|
|
4868
4957
|
{
|
|
4869
4958
|
ref,
|
|
@@ -4878,7 +4967,7 @@ var TableCell = React24.forwardRef(({ className, ...props }, ref) => {
|
|
|
4878
4967
|
);
|
|
4879
4968
|
});
|
|
4880
4969
|
TableCell.displayName = "TableCell";
|
|
4881
|
-
var TableCaption = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
4970
|
+
var TableCaption = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
4882
4971
|
"caption",
|
|
4883
4972
|
{
|
|
4884
4973
|
ref,
|
|
@@ -4929,7 +5018,7 @@ function isReactElementLike(value) {
|
|
|
4929
5018
|
}
|
|
4930
5019
|
|
|
4931
5020
|
// src/controls/configuration-fields.tsx
|
|
4932
|
-
var
|
|
5021
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
4933
5022
|
var CONFIGURATION_CHOICE_SIZE = "h-[34px] min-h-[34px] rounded-lg px-2.5 text-[11.5px] font-medium";
|
|
4934
5023
|
var FIELD_HELP_OPEN = "matrx:field-help-open";
|
|
4935
5024
|
function FieldHelp({
|
|
@@ -4986,8 +5075,8 @@ function FieldHelp({
|
|
|
4986
5075
|
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
4987
5076
|
};
|
|
4988
5077
|
}, [id]);
|
|
4989
|
-
return /* @__PURE__ */ (0,
|
|
4990
|
-
/* @__PURE__ */ (0,
|
|
5078
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Popover, { open, onOpenChange: changeOpen, children: [
|
|
5079
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
4991
5080
|
"button",
|
|
4992
5081
|
{
|
|
4993
5082
|
ref: trigger,
|
|
@@ -5023,10 +5112,10 @@ function FieldHelp({
|
|
|
5023
5112
|
event.preventDefault();
|
|
5024
5113
|
changeOpen(true);
|
|
5025
5114
|
},
|
|
5026
|
-
children: triggerIcon ?? /* @__PURE__ */ (0,
|
|
5115
|
+
children: triggerIcon ?? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(CircleHelpIcon, { className: "size-3.5", "aria-hidden": "true" })
|
|
5027
5116
|
}
|
|
5028
5117
|
) }),
|
|
5029
|
-
/* @__PURE__ */ (0,
|
|
5118
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5030
5119
|
PopoverContent,
|
|
5031
5120
|
{
|
|
5032
5121
|
ref: content,
|
|
@@ -5061,11 +5150,11 @@ function FieldHelp({
|
|
|
5061
5150
|
),
|
|
5062
5151
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
5063
5152
|
children: [
|
|
5064
|
-
/* @__PURE__ */ (0,
|
|
5065
|
-
/* @__PURE__ */ (0,
|
|
5066
|
-
/* @__PURE__ */ (0,
|
|
5153
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
5154
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium", children: label }),
|
|
5155
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(XIcon, {}), "aria-label": `Close help: ${label}`, onClick: () => changeOpen(false), className: "shrink-0" })
|
|
5067
5156
|
] }),
|
|
5068
|
-
/* @__PURE__ */ (0,
|
|
5157
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "whitespace-pre-wrap break-words text-foreground", children })
|
|
5069
5158
|
]
|
|
5070
5159
|
}
|
|
5071
5160
|
)
|
|
@@ -5091,7 +5180,7 @@ function StatusToken({
|
|
|
5091
5180
|
label
|
|
5092
5181
|
}) {
|
|
5093
5182
|
const { Icon: Icon3, color, label: defaultLabel } = STATUS[status];
|
|
5094
|
-
return /* @__PURE__ */ (0,
|
|
5183
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5095
5184
|
"span",
|
|
5096
5185
|
{
|
|
5097
5186
|
className: cn(
|
|
@@ -5100,14 +5189,14 @@ function StatusToken({
|
|
|
5100
5189
|
color
|
|
5101
5190
|
),
|
|
5102
5191
|
children: [
|
|
5103
|
-
Icon3 ? /* @__PURE__ */ (0,
|
|
5104
|
-
/* @__PURE__ */ (0,
|
|
5192
|
+
Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon3, { className: "size-3.5 shrink-0", "aria-hidden": "true" }) : null,
|
|
5193
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "break-words", children: label ?? defaultLabel })
|
|
5105
5194
|
]
|
|
5106
5195
|
}
|
|
5107
5196
|
);
|
|
5108
5197
|
}
|
|
5109
5198
|
function MissingTag({ children = "Not provided" }) {
|
|
5110
|
-
return /* @__PURE__ */ (0,
|
|
5199
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5111
5200
|
"span",
|
|
5112
5201
|
{
|
|
5113
5202
|
"data-matrx-missing": "",
|
|
@@ -5118,18 +5207,18 @@ function MissingTag({ children = "Not provided" }) {
|
|
|
5118
5207
|
}
|
|
5119
5208
|
function RowHelp({ label, help }) {
|
|
5120
5209
|
if (typeof help === "string" || typeof help === "number") {
|
|
5121
|
-
return /* @__PURE__ */ (0,
|
|
5210
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5122
5211
|
"span",
|
|
5123
5212
|
{
|
|
5124
5213
|
title: String(help),
|
|
5125
5214
|
"aria-label": String(help),
|
|
5126
5215
|
"data-matrx-row-help": "",
|
|
5127
5216
|
className: "inline-flex shrink-0 cursor-help text-muted-foreground hover:text-foreground",
|
|
5128
|
-
children: /* @__PURE__ */ (0,
|
|
5217
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" })
|
|
5129
5218
|
}
|
|
5130
5219
|
);
|
|
5131
5220
|
}
|
|
5132
|
-
return /* @__PURE__ */ (0,
|
|
5221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FieldHelp, { label, triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" }), children: help });
|
|
5133
5222
|
}
|
|
5134
5223
|
function isBlank(v) {
|
|
5135
5224
|
return v === null || v === void 0 || v === false || v === "";
|
|
@@ -5161,7 +5250,7 @@ function PropertyRow({
|
|
|
5161
5250
|
const valueClass = cn("min-w-0 type-value leading-5 [overflow-wrap:anywhere]", mono && "font-mono");
|
|
5162
5251
|
const focusRing = "rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
5163
5252
|
if (layout === "inline") {
|
|
5164
|
-
return /* @__PURE__ */ (0,
|
|
5253
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5165
5254
|
"div",
|
|
5166
5255
|
{
|
|
5167
5256
|
"data-matrx-property-row": "inline",
|
|
@@ -5171,32 +5260,32 @@ function PropertyRow({
|
|
|
5171
5260
|
className
|
|
5172
5261
|
),
|
|
5173
5262
|
children: [
|
|
5174
|
-
/* @__PURE__ */ (0,
|
|
5175
|
-
/* @__PURE__ */ (0,
|
|
5176
|
-
help != null ? /* @__PURE__ */ (0,
|
|
5263
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex min-w-0 shrink-0 items-center gap-1.5 type-label leading-4 sm:w-44", children: [
|
|
5264
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "break-words", children: label }),
|
|
5265
|
+
help != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RowHelp, { label, help }) : null
|
|
5177
5266
|
] }),
|
|
5178
|
-
/* @__PURE__ */ (0,
|
|
5179
|
-
/* @__PURE__ */ (0,
|
|
5180
|
-
source != null || state != null ? /* @__PURE__ */ (0,
|
|
5181
|
-
source != null ? /* @__PURE__ */ (0,
|
|
5182
|
-
/* @__PURE__ */ (0,
|
|
5267
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-6 gap-y-1", children: [
|
|
5268
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: cn("flex-1", valueClass), children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(MissingTag, { children: missingText }) : content }),
|
|
5269
|
+
source != null || state != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 type-secondary text-foreground", children: [
|
|
5270
|
+
source != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
|
|
5271
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium", children: "Source:" }),
|
|
5183
5272
|
" ",
|
|
5184
5273
|
source
|
|
5185
5274
|
] }) : null,
|
|
5186
|
-
state != null ? /* @__PURE__ */ (0,
|
|
5187
|
-
/* @__PURE__ */ (0,
|
|
5275
|
+
state != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
|
|
5276
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium", children: "State:" }),
|
|
5188
5277
|
" ",
|
|
5189
5278
|
state
|
|
5190
5279
|
] }) : null
|
|
5191
5280
|
] }) : null,
|
|
5192
|
-
meta != null ? /* @__PURE__ */ (0,
|
|
5281
|
+
meta != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "flex shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
|
|
5193
5282
|
] })
|
|
5194
5283
|
]
|
|
5195
5284
|
}
|
|
5196
5285
|
);
|
|
5197
5286
|
}
|
|
5198
5287
|
const margin = expandable || gutter;
|
|
5199
|
-
return /* @__PURE__ */ (0,
|
|
5288
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5200
5289
|
"div",
|
|
5201
5290
|
{
|
|
5202
5291
|
"data-matrx-property-row": "stacked",
|
|
@@ -5207,7 +5296,7 @@ function PropertyRow({
|
|
|
5207
5296
|
className
|
|
5208
5297
|
),
|
|
5209
5298
|
children: [
|
|
5210
|
-
margin ? /* @__PURE__ */ (0,
|
|
5299
|
+
margin ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "flex h-4 items-center", children: expandable ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5211
5300
|
"button",
|
|
5212
5301
|
{
|
|
5213
5302
|
type: "button",
|
|
@@ -5215,15 +5304,15 @@ function PropertyRow({
|
|
|
5215
5304
|
"aria-expanded": open,
|
|
5216
5305
|
"aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
|
|
5217
5306
|
className: cn("inline-flex text-muted-foreground hover:text-foreground", focusRing),
|
|
5218
|
-
children: open ? /* @__PURE__ */ (0,
|
|
5307
|
+
children: open ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ChevronDownIcon, { className: "size-3.5", "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
|
|
5219
5308
|
}
|
|
5220
5309
|
) : null }) : null,
|
|
5221
|
-
/* @__PURE__ */ (0,
|
|
5222
|
-
/* @__PURE__ */ (0,
|
|
5223
|
-
help != null ? /* @__PURE__ */ (0,
|
|
5224
|
-
meta != null ? /* @__PURE__ */ (0,
|
|
5310
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex h-4 min-w-0 items-center gap-1.5", children: [
|
|
5311
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "truncate type-label leading-4", children: label }),
|
|
5312
|
+
help != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RowHelp, { label, help }) : null,
|
|
5313
|
+
meta != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "ml-auto flex min-w-0 shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
|
|
5225
5314
|
] }),
|
|
5226
|
-
/* @__PURE__ */ (0,
|
|
5315
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5227
5316
|
"div",
|
|
5228
5317
|
{
|
|
5229
5318
|
className: cn(
|
|
@@ -5232,7 +5321,7 @@ function PropertyRow({
|
|
|
5232
5321
|
// A "Not provided" row is exactly as tall as a text row: the value line is a fixed 20px.
|
|
5233
5322
|
isMissing ? "flex h-5 items-center" : expandable && open ? "mt-1" : "flex min-h-5 items-center"
|
|
5234
5323
|
),
|
|
5235
|
-
children: isMissing ? /* @__PURE__ */ (0,
|
|
5324
|
+
children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(MissingTag, { children: missingText }) : expandable && open ? expanded : expandable ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5236
5325
|
"button",
|
|
5237
5326
|
{
|
|
5238
5327
|
type: "button",
|
|
@@ -5240,7 +5329,7 @@ function PropertyRow({
|
|
|
5240
5329
|
className: cn("block max-w-full truncate text-left", valueClass, focusRing),
|
|
5241
5330
|
children: content
|
|
5242
5331
|
}
|
|
5243
|
-
) : /* @__PURE__ */ (0,
|
|
5332
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: valueClass, children: content })
|
|
5244
5333
|
}
|
|
5245
5334
|
)
|
|
5246
5335
|
]
|
|
@@ -5251,9 +5340,9 @@ function ConfigurationValueList({
|
|
|
5251
5340
|
label,
|
|
5252
5341
|
entries
|
|
5253
5342
|
}) {
|
|
5254
|
-
return /* @__PURE__ */ (0,
|
|
5255
|
-
/* @__PURE__ */ (0,
|
|
5256
|
-
/* @__PURE__ */ (0,
|
|
5343
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("dl", { "aria-label": label, className: "min-w-0 divide-y divide-border rounded-lg border border-border bg-card type-body text-foreground", children: entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "min-w-0 p-3", children: [
|
|
5344
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("dt", { className: "mb-2 break-words font-semibold", children: entry.label }),
|
|
5345
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("dd", { className: "min-w-0 [overflow-wrap:anywhere]", children: entry.value })
|
|
5257
5346
|
] }, entry.key)) });
|
|
5258
5347
|
}
|
|
5259
5348
|
function ConfigurationTable({
|
|
@@ -5261,7 +5350,7 @@ function ConfigurationTable({
|
|
|
5261
5350
|
columns,
|
|
5262
5351
|
children
|
|
5263
5352
|
}) {
|
|
5264
|
-
return /* @__PURE__ */ (0,
|
|
5353
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "min-w-0 rounded-lg border border-border bg-card", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5265
5354
|
Table,
|
|
5266
5355
|
{
|
|
5267
5356
|
size: "sm",
|
|
@@ -5269,19 +5358,19 @@ function ConfigurationTable({
|
|
|
5269
5358
|
"aria-label": label,
|
|
5270
5359
|
className: cn("matrx-config-table", "type-body text-foreground"),
|
|
5271
5360
|
children: [
|
|
5272
|
-
/* @__PURE__ */ (0,
|
|
5361
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableHeader, { className: "matrx-config-head", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableRow, { className: "bg-accent/40 hover:bg-accent/40", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5273
5362
|
TableHead,
|
|
5274
5363
|
{
|
|
5275
5364
|
scope: "col",
|
|
5276
5365
|
className: "whitespace-normal align-middle font-semibold text-foreground",
|
|
5277
|
-
children: /* @__PURE__ */ (0,
|
|
5366
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "matrx-config-heading", children: [
|
|
5278
5367
|
column.label,
|
|
5279
|
-
column.help ? /* @__PURE__ */ (0,
|
|
5368
|
+
column.help ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
|
|
5280
5369
|
] })
|
|
5281
5370
|
},
|
|
5282
5371
|
column.key
|
|
5283
5372
|
)) }) }),
|
|
5284
|
-
/* @__PURE__ */ (0,
|
|
5373
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableBody, { className: "matrx-config-body", children })
|
|
5285
5374
|
]
|
|
5286
5375
|
}
|
|
5287
5376
|
) });
|
|
@@ -5290,16 +5379,16 @@ function ConfigurationTableRow({
|
|
|
5290
5379
|
columns,
|
|
5291
5380
|
cells
|
|
5292
5381
|
}) {
|
|
5293
|
-
return /* @__PURE__ */ (0,
|
|
5382
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
5294
5383
|
TableRow,
|
|
5295
5384
|
{
|
|
5296
5385
|
className: cn("matrx-config-row", "border-b border-border last:border-b-0"),
|
|
5297
|
-
children: columns.map((column) => /* @__PURE__ */ (0,
|
|
5386
|
+
children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5298
5387
|
TableCell,
|
|
5299
5388
|
{
|
|
5300
5389
|
className: cn("matrx-config-cell", "min-w-0 whitespace-normal align-middle"),
|
|
5301
5390
|
children: [
|
|
5302
|
-
/* @__PURE__ */ (0,
|
|
5391
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
5303
5392
|
"span",
|
|
5304
5393
|
{
|
|
5305
5394
|
className: cn(
|
|
@@ -5309,11 +5398,11 @@ function ConfigurationTableRow({
|
|
|
5309
5398
|
children: [
|
|
5310
5399
|
column.label,
|
|
5311
5400
|
":",
|
|
5312
|
-
column.help ? /* @__PURE__ */ (0,
|
|
5401
|
+
column.help ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
|
|
5313
5402
|
]
|
|
5314
5403
|
}
|
|
5315
5404
|
),
|
|
5316
|
-
/* @__PURE__ */ (0,
|
|
5405
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "matrx-config-cell-content", children: cells[column.key] ?? "Not specified" })
|
|
5317
5406
|
]
|
|
5318
5407
|
},
|
|
5319
5408
|
column.key
|
|
@@ -5323,7 +5412,7 @@ function ConfigurationTableRow({
|
|
|
5323
5412
|
}
|
|
5324
5413
|
|
|
5325
5414
|
// src/indicator-strip.tsx
|
|
5326
|
-
var
|
|
5415
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
5327
5416
|
var TONE = {
|
|
5328
5417
|
danger: "text-destructive",
|
|
5329
5418
|
warning: "text-warning",
|
|
@@ -5336,7 +5425,7 @@ function indicatorText(item) {
|
|
|
5336
5425
|
return item.detail ? `${item.label}: yes \u2014 ${item.detail}` : `${item.label}: yes`;
|
|
5337
5426
|
}
|
|
5338
5427
|
function IndicatorStrip({ items, className, ...props }) {
|
|
5339
|
-
return /* @__PURE__ */ (0,
|
|
5428
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
5340
5429
|
"span",
|
|
5341
5430
|
{
|
|
5342
5431
|
"data-slot": "indicator-strip",
|
|
@@ -5346,7 +5435,7 @@ function IndicatorStrip({ items, className, ...props }) {
|
|
|
5346
5435
|
children: items.map((item) => {
|
|
5347
5436
|
const Icon3 = item.icon;
|
|
5348
5437
|
const text = indicatorText(item);
|
|
5349
|
-
return /* @__PURE__ */ (0,
|
|
5438
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
5350
5439
|
"span",
|
|
5351
5440
|
{
|
|
5352
5441
|
role: "listitem",
|
|
@@ -5359,7 +5448,7 @@ function IndicatorStrip({ items, className, ...props }) {
|
|
|
5359
5448
|
item.on ? TONE[item.tone ?? "warning"] : "text-muted-foreground opacity-30",
|
|
5360
5449
|
item.on && item.soft && "opacity-55"
|
|
5361
5450
|
),
|
|
5362
|
-
children: /* @__PURE__ */ (0,
|
|
5451
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon3, { className: "size-3.5", "aria-hidden": true })
|
|
5363
5452
|
},
|
|
5364
5453
|
item.id
|
|
5365
5454
|
);
|
|
@@ -5369,7 +5458,7 @@ function IndicatorStrip({ items, className, ...props }) {
|
|
|
5369
5458
|
}
|
|
5370
5459
|
|
|
5371
5460
|
// src/controls/middle-truncate.tsx
|
|
5372
|
-
var
|
|
5461
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
5373
5462
|
var DEFAULT_TAIL = 10;
|
|
5374
5463
|
function splitForMiddleTruncate(text, tail = DEFAULT_TAIL) {
|
|
5375
5464
|
const keep = Math.min(tail, Math.floor(text.length / 2));
|
|
@@ -5382,15 +5471,15 @@ function MiddleTruncate({
|
|
|
5382
5471
|
className
|
|
5383
5472
|
}) {
|
|
5384
5473
|
const { head, end } = splitForMiddleTruncate(text, tail);
|
|
5385
|
-
return /* @__PURE__ */ (0,
|
|
5386
|
-
/* @__PURE__ */ (0,
|
|
5387
|
-
/* @__PURE__ */ (0,
|
|
5388
|
-
end ? /* @__PURE__ */ (0,
|
|
5474
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: cn("flex min-w-0 items-baseline", className), title: text, children: [
|
|
5475
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "sr-only", children: text }),
|
|
5476
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "min-w-0 truncate whitespace-pre", children: head }),
|
|
5477
|
+
end ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "shrink-0 whitespace-pre", children: end }) : null
|
|
5389
5478
|
] });
|
|
5390
5479
|
}
|
|
5391
5480
|
|
|
5392
5481
|
// src/controls/callout-banner.tsx
|
|
5393
|
-
var
|
|
5482
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
5394
5483
|
var TONE2 = {
|
|
5395
5484
|
destructive: { container: "border-destructive/30 bg-destructive/10", icon: "text-destructive" },
|
|
5396
5485
|
warning: { container: "border-warning/30 bg-warning/10", icon: "text-warning" },
|
|
@@ -5408,7 +5497,7 @@ function CalloutBanner({
|
|
|
5408
5497
|
className
|
|
5409
5498
|
}) {
|
|
5410
5499
|
const t = TONE2[tone2];
|
|
5411
|
-
return /* @__PURE__ */ (0,
|
|
5500
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
5412
5501
|
"div",
|
|
5413
5502
|
{
|
|
5414
5503
|
className: cn(
|
|
@@ -5418,16 +5507,16 @@ function CalloutBanner({
|
|
|
5418
5507
|
),
|
|
5419
5508
|
role: "status",
|
|
5420
5509
|
children: [
|
|
5421
|
-
/* @__PURE__ */ (0,
|
|
5422
|
-
Icon3 && /* @__PURE__ */ (0,
|
|
5423
|
-
/* @__PURE__ */ (0,
|
|
5424
|
-
/* @__PURE__ */ (0,
|
|
5425
|
-
description && /* @__PURE__ */ (0,
|
|
5510
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-2", children: [
|
|
5511
|
+
Icon3 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon3, { className: cn("mt-0.5 h-4 w-4 shrink-0", t.icon), "aria-hidden": true }),
|
|
5512
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "min-w-0", children: [
|
|
5513
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "type-title text-foreground", children: title }),
|
|
5514
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "mt-0.5 type-secondary text-muted-foreground", children: description })
|
|
5426
5515
|
] })
|
|
5427
5516
|
] }),
|
|
5428
|
-
/* @__PURE__ */ (0,
|
|
5517
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5 sm:ml-2", children: [
|
|
5429
5518
|
actions,
|
|
5430
|
-
onDismiss && /* @__PURE__ */ (0,
|
|
5519
|
+
onDismiss && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(XIcon, {}), "aria-label": "Dismiss", onClick: onDismiss, disabled: dismissing })
|
|
5431
5520
|
] })
|
|
5432
5521
|
]
|
|
5433
5522
|
}
|
|
@@ -5436,7 +5525,7 @@ function CalloutBanner({
|
|
|
5436
5525
|
|
|
5437
5526
|
// src/controls/gated-action-button.tsx
|
|
5438
5527
|
var React25 = __toESM(require("react"), 1);
|
|
5439
|
-
var
|
|
5528
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
5440
5529
|
function firstBlockingReason(checks) {
|
|
5441
5530
|
for (const check of checks) {
|
|
5442
5531
|
if (check && check.when) return check.reason;
|
|
@@ -5455,7 +5544,7 @@ function GatedActionButton({
|
|
|
5455
5544
|
const reactId = React25.useId();
|
|
5456
5545
|
const blocked = Boolean(reason && reason.trim());
|
|
5457
5546
|
const reasonId = `gated-action-reason-${reactId}`;
|
|
5458
|
-
return /* @__PURE__ */ (0,
|
|
5547
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
5459
5548
|
"span",
|
|
5460
5549
|
{
|
|
5461
5550
|
className: cn(
|
|
@@ -5463,7 +5552,7 @@ function GatedActionButton({
|
|
|
5463
5552
|
wrapperClassName
|
|
5464
5553
|
),
|
|
5465
5554
|
children: [
|
|
5466
|
-
blocked ? /* @__PURE__ */ (0,
|
|
5555
|
+
blocked ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
5467
5556
|
"span",
|
|
5468
5557
|
{
|
|
5469
5558
|
id: reasonId,
|
|
@@ -5476,7 +5565,7 @@ function GatedActionButton({
|
|
|
5476
5565
|
children: reason
|
|
5477
5566
|
}
|
|
5478
5567
|
) : null,
|
|
5479
|
-
/* @__PURE__ */ (0,
|
|
5568
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
5480
5569
|
Button,
|
|
5481
5570
|
{
|
|
5482
5571
|
...buttonProps,
|
|
@@ -5494,7 +5583,7 @@ GatedActionButton.displayName = "GatedActionButton";
|
|
|
5494
5583
|
|
|
5495
5584
|
// src/controls/search-input.tsx
|
|
5496
5585
|
var import_react7 = require("react");
|
|
5497
|
-
var
|
|
5586
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
5498
5587
|
function SearchInput({
|
|
5499
5588
|
value,
|
|
5500
5589
|
defaultValue = "",
|
|
@@ -5550,21 +5639,21 @@ function SearchInput({
|
|
|
5550
5639
|
onSearch?.("");
|
|
5551
5640
|
inputRef.current?.focus();
|
|
5552
5641
|
};
|
|
5553
|
-
return /* @__PURE__ */ (0,
|
|
5642
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
5554
5643
|
"form",
|
|
5555
5644
|
{
|
|
5556
5645
|
onSubmit: handleSubmit,
|
|
5557
5646
|
className: cn("flex min-w-0 items-center gap-2", className),
|
|
5558
5647
|
children: [
|
|
5559
|
-
/* @__PURE__ */ (0,
|
|
5560
|
-
/* @__PURE__ */ (0,
|
|
5648
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
|
|
5649
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
5561
5650
|
SearchIcon,
|
|
5562
5651
|
{
|
|
5563
5652
|
className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
|
|
5564
5653
|
"aria-hidden": true
|
|
5565
5654
|
}
|
|
5566
5655
|
),
|
|
5567
|
-
/* @__PURE__ */ (0,
|
|
5656
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
5568
5657
|
Input,
|
|
5569
5658
|
{
|
|
5570
5659
|
ref: inputRef,
|
|
@@ -5578,7 +5667,7 @@ function SearchInput({
|
|
|
5578
5667
|
adornment: showClearButton && searchValue ? "both" : "start"
|
|
5579
5668
|
}
|
|
5580
5669
|
),
|
|
5581
|
-
showClearButton && searchValue ? /* @__PURE__ */ (0,
|
|
5670
|
+
showClearButton && searchValue ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
5582
5671
|
"button",
|
|
5583
5672
|
{
|
|
5584
5673
|
type: "button",
|
|
@@ -5586,14 +5675,14 @@ function SearchInput({
|
|
|
5586
5675
|
disabled,
|
|
5587
5676
|
"aria-label": "Clear search",
|
|
5588
5677
|
className: "absolute right-2 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:text-disabled-foreground",
|
|
5589
|
-
children: /* @__PURE__ */ (0,
|
|
5678
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(XIcon, { className: "h-3.5 w-3.5" })
|
|
5590
5679
|
}
|
|
5591
5680
|
) : null
|
|
5592
5681
|
] }),
|
|
5593
|
-
showSubmitButton ? /* @__PURE__ */ (0,
|
|
5682
|
+
showSubmitButton ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
5594
5683
|
Button2,
|
|
5595
5684
|
{
|
|
5596
|
-
icon: loading ? /* @__PURE__ */ (0,
|
|
5685
|
+
icon: loading ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Loader2Icon, { className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SearchIcon, {}),
|
|
5597
5686
|
variant: "primary",
|
|
5598
5687
|
type: "submit",
|
|
5599
5688
|
disabled: disabled || loading,
|
|
@@ -5612,13 +5701,13 @@ var import_react8 = require("react");
|
|
|
5612
5701
|
// src/tooltip.tsx
|
|
5613
5702
|
var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"), 1);
|
|
5614
5703
|
var React27 = __toESM(require("react"), 1);
|
|
5615
|
-
var
|
|
5704
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
5616
5705
|
function TooltipProvider({ titleTooltips = true, disableHoverableContent = false, ...props }) {
|
|
5617
5706
|
React27.useEffect(() => {
|
|
5618
5707
|
if (!titleTooltips) return;
|
|
5619
5708
|
return acquireTitleTooltips();
|
|
5620
5709
|
}, [titleTooltips]);
|
|
5621
|
-
return /* @__PURE__ */ (0,
|
|
5710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipPrimitive.Provider, { ...props, disableHoverableContent });
|
|
5622
5711
|
}
|
|
5623
5712
|
var TriggerContext = React27.createContext(null);
|
|
5624
5713
|
var Tooltip = ({ onOpenChange, ...props }) => {
|
|
@@ -5626,7 +5715,7 @@ var Tooltip = ({ onOpenChange, ...props }) => {
|
|
|
5626
5715
|
const [open, setOpen] = React27.useState(Boolean(props.open ?? props.defaultOpen));
|
|
5627
5716
|
const shown = props.open ?? open;
|
|
5628
5717
|
const value = React27.useMemo(() => ({ ref, open: shown }), [shown]);
|
|
5629
|
-
return /* @__PURE__ */ (0,
|
|
5718
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TriggerContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
5630
5719
|
TooltipPrimitive.Root,
|
|
5631
5720
|
{
|
|
5632
5721
|
...props,
|
|
@@ -5648,14 +5737,14 @@ var TooltipTrigger = React27.forwardRef((props, ref) => {
|
|
|
5648
5737
|
},
|
|
5649
5738
|
[trigger, ref]
|
|
5650
5739
|
);
|
|
5651
|
-
return /* @__PURE__ */ (0,
|
|
5740
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipPrimitive.Trigger, { ref: setRef, ...{ [TOOLTIP_TRIGGER_ATTR]: "" }, ...props });
|
|
5652
5741
|
});
|
|
5653
5742
|
TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
|
|
5654
5743
|
var TooltipContent = React27.forwardRef(({ className, side, fallbackSide, sideOffset = 4, collisionPadding = TOOLTIP_EDGE_PX, container, animated = true, children, style, ...props }, ref) => {
|
|
5655
5744
|
const resolved = usePortalContainer(container);
|
|
5656
5745
|
const trigger = React27.useContext(TriggerContext);
|
|
5657
5746
|
const placed = side ?? (trigger?.open ? tooltipSide(trigger.ref.current, fallbackSide) : fallbackSide ?? "top");
|
|
5658
|
-
return /* @__PURE__ */ (0,
|
|
5747
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipPrimitive.Portal, { container: resolved ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
5659
5748
|
TooltipPrimitive.Content,
|
|
5660
5749
|
{
|
|
5661
5750
|
ref,
|
|
@@ -5678,7 +5767,7 @@ var TooltipContent = React27.forwardRef(({ className, side, fallbackSide, sideOf
|
|
|
5678
5767
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
5679
5768
|
|
|
5680
5769
|
// src/controls/collapsible-text.tsx
|
|
5681
|
-
var
|
|
5770
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
5682
5771
|
function CollapsibleText({
|
|
5683
5772
|
children,
|
|
5684
5773
|
expanded,
|
|
@@ -5712,8 +5801,8 @@ function CollapsibleText({
|
|
|
5712
5801
|
}, [children, collapsedLines]);
|
|
5713
5802
|
const isCollapsed = isOverflowing && !expanded;
|
|
5714
5803
|
if (showLabel) {
|
|
5715
|
-
return /* @__PURE__ */ (0,
|
|
5716
|
-
/* @__PURE__ */ (0,
|
|
5804
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "relative min-w-0", children: [
|
|
5805
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5717
5806
|
"div",
|
|
5718
5807
|
{
|
|
5719
5808
|
ref: contentRef,
|
|
@@ -5726,7 +5815,7 @@ function CollapsibleText({
|
|
|
5726
5815
|
children
|
|
5727
5816
|
}
|
|
5728
5817
|
),
|
|
5729
|
-
isOverflowing ? /* @__PURE__ */ (0,
|
|
5818
|
+
isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
5730
5819
|
"button",
|
|
5731
5820
|
{
|
|
5732
5821
|
type: "button",
|
|
@@ -5737,15 +5826,15 @@ function CollapsibleText({
|
|
|
5737
5826
|
},
|
|
5738
5827
|
className: "mt-0.5 inline-flex min-h-6 items-center gap-0.5 rounded text-xs font-medium text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring",
|
|
5739
5828
|
children: [
|
|
5740
|
-
isCollapsed ? /* @__PURE__ */ (0,
|
|
5829
|
+
isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronDownIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronUpIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }),
|
|
5741
5830
|
isCollapsed ? expandLabel : collapseLabel
|
|
5742
5831
|
]
|
|
5743
5832
|
}
|
|
5744
5833
|
) : null
|
|
5745
5834
|
] });
|
|
5746
5835
|
}
|
|
5747
|
-
return /* @__PURE__ */ (0,
|
|
5748
|
-
/* @__PURE__ */ (0,
|
|
5836
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "relative min-w-0", children: [
|
|
5837
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5749
5838
|
"div",
|
|
5750
5839
|
{
|
|
5751
5840
|
ref: contentRef,
|
|
@@ -5758,10 +5847,10 @@ function CollapsibleText({
|
|
|
5758
5847
|
children
|
|
5759
5848
|
}
|
|
5760
5849
|
),
|
|
5761
|
-
isCollapsed ? /* @__PURE__ */ (0,
|
|
5850
|
+
isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5762
5851
|
Button2,
|
|
5763
5852
|
{
|
|
5764
|
-
icon: /* @__PURE__ */ (0,
|
|
5853
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronDownIcon, {}),
|
|
5765
5854
|
type: "button",
|
|
5766
5855
|
variant: "outline",
|
|
5767
5856
|
"aria-label": expandLabel,
|
|
@@ -5772,10 +5861,10 @@ function CollapsibleText({
|
|
|
5772
5861
|
},
|
|
5773
5862
|
className: "pointer-events-auto"
|
|
5774
5863
|
}
|
|
5775
|
-
) }) : isOverflowing ? /* @__PURE__ */ (0,
|
|
5864
|
+
) }) : isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex justify-center pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5776
5865
|
Button2,
|
|
5777
5866
|
{
|
|
5778
|
-
icon: /* @__PURE__ */ (0,
|
|
5867
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronUpIcon, {}),
|
|
5779
5868
|
type: "button",
|
|
5780
5869
|
variant: "quiet",
|
|
5781
5870
|
"aria-label": collapseLabel,
|
|
@@ -5795,12 +5884,12 @@ function CollapsibleTextGroupControls({
|
|
|
5795
5884
|
anyExpanded,
|
|
5796
5885
|
disabled = false
|
|
5797
5886
|
}) {
|
|
5798
|
-
return /* @__PURE__ */ (0,
|
|
5799
|
-
/* @__PURE__ */ (0,
|
|
5800
|
-
/* @__PURE__ */ (0,
|
|
5887
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-0.5", children: [
|
|
5888
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { children: [
|
|
5889
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5801
5890
|
Button2,
|
|
5802
5891
|
{
|
|
5803
|
-
icon: /* @__PURE__ */ (0,
|
|
5892
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronsDownIcon, { className: "!size-[18px] lg:!size-3.5" }),
|
|
5804
5893
|
type: "button",
|
|
5805
5894
|
variant: "quiet",
|
|
5806
5895
|
"aria-label": "Expand all",
|
|
@@ -5808,13 +5897,13 @@ function CollapsibleTextGroupControls({
|
|
|
5808
5897
|
disabled: disabled || allExpanded
|
|
5809
5898
|
}
|
|
5810
5899
|
) }),
|
|
5811
|
-
/* @__PURE__ */ (0,
|
|
5900
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { side: "top", children: "Expand all" })
|
|
5812
5901
|
] }),
|
|
5813
|
-
/* @__PURE__ */ (0,
|
|
5814
|
-
/* @__PURE__ */ (0,
|
|
5902
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { children: [
|
|
5903
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5815
5904
|
Button2,
|
|
5816
5905
|
{
|
|
5817
|
-
icon: /* @__PURE__ */ (0,
|
|
5906
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronsUpIcon, { className: "!size-[18px] lg:!size-3.5" }),
|
|
5818
5907
|
type: "button",
|
|
5819
5908
|
variant: "quiet",
|
|
5820
5909
|
"aria-label": "Collapse all",
|
|
@@ -5822,14 +5911,14 @@ function CollapsibleTextGroupControls({
|
|
|
5822
5911
|
disabled: disabled || !anyExpanded
|
|
5823
5912
|
}
|
|
5824
5913
|
) }),
|
|
5825
|
-
/* @__PURE__ */ (0,
|
|
5914
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { side: "top", children: "Collapse all" })
|
|
5826
5915
|
] })
|
|
5827
5916
|
] });
|
|
5828
5917
|
}
|
|
5829
5918
|
|
|
5830
5919
|
// src/controls/info-hint.tsx
|
|
5831
5920
|
var import_react9 = require("react");
|
|
5832
|
-
var
|
|
5921
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
5833
5922
|
var COARSE_POINTER_QUERY = "(pointer: coarse)";
|
|
5834
5923
|
function subscribeCoarse(onChange) {
|
|
5835
5924
|
const mq = window.matchMedia(COARSE_POINTER_QUERY);
|
|
@@ -5853,10 +5942,10 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
|
|
|
5853
5942
|
const coarse = useCoarsePointer();
|
|
5854
5943
|
const isMobile = (0, import_media_query.useIsMobile)();
|
|
5855
5944
|
const [open, setOpen] = (0, import_react9.useState)(false);
|
|
5856
|
-
const glyph = /* @__PURE__ */ (0,
|
|
5945
|
+
const glyph = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(InfoIcon, { "aria-hidden": true, className: "h-3.5 w-3.5", strokeWidth: 2 });
|
|
5857
5946
|
if (coarse || isMobile) {
|
|
5858
|
-
return /* @__PURE__ */ (0,
|
|
5859
|
-
/* @__PURE__ */ (0,
|
|
5947
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
|
|
5948
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
5860
5949
|
"button",
|
|
5861
5950
|
{
|
|
5862
5951
|
type: "button",
|
|
@@ -5870,7 +5959,7 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
|
|
|
5870
5959
|
children: glyph
|
|
5871
5960
|
}
|
|
5872
5961
|
) }),
|
|
5873
|
-
/* @__PURE__ */ (0,
|
|
5962
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
5874
5963
|
PopoverContent,
|
|
5875
5964
|
{
|
|
5876
5965
|
side,
|
|
@@ -5887,8 +5976,8 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
|
|
|
5887
5976
|
return (
|
|
5888
5977
|
// Brings its own provider: an official component works wherever it is imported (a
|
|
5889
5978
|
// test, a portal, a page without the app shell) — 2026-09-30, final-switch tests.
|
|
5890
|
-
/* @__PURE__ */ (0,
|
|
5891
|
-
/* @__PURE__ */ (0,
|
|
5979
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Tooltip, { open, onOpenChange: setOpen, children: [
|
|
5980
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
5892
5981
|
"button",
|
|
5893
5982
|
{
|
|
5894
5983
|
type: "button",
|
|
@@ -5904,13 +5993,13 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
|
|
|
5904
5993
|
children: glyph
|
|
5905
5994
|
}
|
|
5906
5995
|
) }),
|
|
5907
|
-
/* @__PURE__ */ (0,
|
|
5996
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipContent, { side, className: CONTENT_CLASS, onClick: isolate, children: text })
|
|
5908
5997
|
] }) })
|
|
5909
5998
|
);
|
|
5910
5999
|
}
|
|
5911
6000
|
|
|
5912
6001
|
// src/controls/status-badge.tsx
|
|
5913
|
-
var
|
|
6002
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
5914
6003
|
var STATUS_TONES = ["success", "warning", "danger", "neutral", "info"];
|
|
5915
6004
|
var TONE_CLASS = {
|
|
5916
6005
|
success: "border-success/40 bg-success/15 text-success-ink",
|
|
@@ -5926,7 +6015,7 @@ var SIZE_CLASS = {
|
|
|
5926
6015
|
};
|
|
5927
6016
|
function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trailing, className }) {
|
|
5928
6017
|
const s = SIZE_CLASS[size];
|
|
5929
|
-
return /* @__PURE__ */ (0,
|
|
6018
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
|
|
5930
6019
|
"span",
|
|
5931
6020
|
{
|
|
5932
6021
|
role: "status",
|
|
@@ -5942,7 +6031,7 @@ function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trai
|
|
|
5942
6031
|
className
|
|
5943
6032
|
),
|
|
5944
6033
|
children: [
|
|
5945
|
-
Icon3 ? /* @__PURE__ */ (0,
|
|
6034
|
+
Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon3, { "aria-hidden": true, className: cn("shrink-0", s.icon) }) : null,
|
|
5946
6035
|
label,
|
|
5947
6036
|
trailing
|
|
5948
6037
|
]
|
|
@@ -5952,7 +6041,7 @@ function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trai
|
|
|
5952
6041
|
|
|
5953
6042
|
// src/controls/structured-section-card.tsx
|
|
5954
6043
|
var React28 = __toESM(require("react"), 1);
|
|
5955
|
-
var
|
|
6044
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
5956
6045
|
var TITLE_TONE = {
|
|
5957
6046
|
primary: "text-primary-ink",
|
|
5958
6047
|
foreground: "text-foreground"
|
|
@@ -5969,24 +6058,24 @@ function StructuredSectionCard({
|
|
|
5969
6058
|
className
|
|
5970
6059
|
}) {
|
|
5971
6060
|
const hasFooter = footerLeft || footerCenter || footerRight;
|
|
5972
|
-
return /* @__PURE__ */ (0,
|
|
6061
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
5973
6062
|
"div",
|
|
5974
6063
|
{
|
|
5975
6064
|
"data-slot": "structured-section-card",
|
|
5976
6065
|
className: cn("overflow-hidden rounded-xl border-border bg-textured shadow-sm", className),
|
|
5977
6066
|
children: [
|
|
5978
|
-
/* @__PURE__ */ (0,
|
|
5979
|
-
/* @__PURE__ */ (0,
|
|
5980
|
-
/* @__PURE__ */ (0,
|
|
5981
|
-
description && /* @__PURE__ */ (0,
|
|
6067
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-muted px-4 py-3", children: [
|
|
6068
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "min-w-0", children: [
|
|
6069
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("h3", { className: cn("font-medium", TITLE_TONE[titleTone]), children: title }),
|
|
6070
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "type-body text-muted-foreground", children: description })
|
|
5982
6071
|
] }),
|
|
5983
|
-
headerActions.length > 0 && /* @__PURE__ */ (0,
|
|
6072
|
+
headerActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "ml-4 flex shrink-0 items-center space-x-2", children: headerActions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(React28.Fragment, { children: action }, index)) })
|
|
5984
6073
|
] }),
|
|
5985
|
-
/* @__PURE__ */ (0,
|
|
5986
|
-
hasFooter && /* @__PURE__ */ (0,
|
|
5987
|
-
/* @__PURE__ */ (0,
|
|
5988
|
-
/* @__PURE__ */ (0,
|
|
5989
|
-
/* @__PURE__ */ (0,
|
|
6074
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "p-4", children }),
|
|
6075
|
+
hasFooter && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex flex-wrap items-center border-t border-border px-4 py-3", children: [
|
|
6076
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "flex min-w-[33%] flex-1 justify-start space-x-2 sm:min-w-0", children: footerLeft }),
|
|
6077
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-center space-x-2 sm:mt-0 sm:min-w-0", children: footerCenter }),
|
|
6078
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-end space-x-2 sm:mt-0 sm:min-w-0", children: footerRight })
|
|
5990
6079
|
] })
|
|
5991
6080
|
]
|
|
5992
6081
|
}
|
|
@@ -5994,7 +6083,7 @@ function StructuredSectionCard({
|
|
|
5994
6083
|
}
|
|
5995
6084
|
|
|
5996
6085
|
// src/controls/icon-dropdown-menu.tsx
|
|
5997
|
-
var
|
|
6086
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
5998
6087
|
function IconDropdownMenu({
|
|
5999
6088
|
options,
|
|
6000
6089
|
value,
|
|
@@ -6009,21 +6098,21 @@ function IconDropdownMenu({
|
|
|
6009
6098
|
console.warn("IconDropdownMenu: no option to show \u2014 pass at least one option.");
|
|
6010
6099
|
return null;
|
|
6011
6100
|
}
|
|
6012
|
-
return /* @__PURE__ */ (0,
|
|
6013
|
-
/* @__PURE__ */ (0,
|
|
6101
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(DropdownMenu, { children: [
|
|
6102
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
6014
6103
|
Button2,
|
|
6015
6104
|
{
|
|
6016
|
-
icon: /* @__PURE__ */ (0,
|
|
6017
|
-
iconEnd: /* @__PURE__ */ (0,
|
|
6105
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SelectedIcon, {}),
|
|
6106
|
+
iconEnd: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ChevronDownIcon, {}),
|
|
6018
6107
|
variant: "outline",
|
|
6019
6108
|
"aria-label": selected.label,
|
|
6020
6109
|
...className ? { className } : {}
|
|
6021
6110
|
}
|
|
6022
6111
|
) }),
|
|
6023
|
-
/* @__PURE__ */ (0,
|
|
6112
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuContent, { align, className: cn("rounded-2xl p-1", menuWidth), children: options.map((option) => {
|
|
6024
6113
|
const isSelected = option.value === value;
|
|
6025
6114
|
const OptionIcon = option.icon;
|
|
6026
|
-
return /* @__PURE__ */ (0,
|
|
6115
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
6027
6116
|
DropdownMenuItem,
|
|
6028
6117
|
{
|
|
6029
6118
|
onClick: () => onValueChange(option.value),
|
|
@@ -6033,9 +6122,9 @@ function IconDropdownMenu({
|
|
|
6033
6122
|
isSelected && "bg-primary/10"
|
|
6034
6123
|
),
|
|
6035
6124
|
children: [
|
|
6036
|
-
/* @__PURE__ */ (0,
|
|
6037
|
-
/* @__PURE__ */ (0,
|
|
6038
|
-
isSelected && /* @__PURE__ */ (0,
|
|
6125
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(OptionIcon, { className: cn("h-4 w-4 shrink-0", isSelected ? "text-primary-ink" : "text-muted-foreground") }),
|
|
6126
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: cn("type-body flex-1 leading-tight", isSelected ? "font-medium text-primary-ink" : "text-foreground"), children: option.label }),
|
|
6127
|
+
isSelected && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0 text-primary-ink" })
|
|
6039
6128
|
]
|
|
6040
6129
|
},
|
|
6041
6130
|
String(option.value)
|
|
@@ -6046,7 +6135,7 @@ function IconDropdownMenu({
|
|
|
6046
6135
|
|
|
6047
6136
|
// src/error-box.tsx
|
|
6048
6137
|
var React29 = __toESM(require("react"), 1);
|
|
6049
|
-
var
|
|
6138
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
6050
6139
|
var CONTEXT_KEY = /* @__PURE__ */ Symbol.for("@ai-matrx/design-system/error-actions");
|
|
6051
6140
|
var registry2 = globalThis;
|
|
6052
6141
|
var ErrorActionsContext = registry2[CONTEXT_KEY] ?? (registry2[CONTEXT_KEY] = React29.createContext(null));
|
|
@@ -6059,7 +6148,7 @@ function useErrorActions() {
|
|
|
6059
6148
|
function ErrorActions(props) {
|
|
6060
6149
|
const render = useErrorActions();
|
|
6061
6150
|
if (!render) return null;
|
|
6062
|
-
return /* @__PURE__ */ (0,
|
|
6151
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_jsx_runtime46.Fragment, { children: render(props) });
|
|
6063
6152
|
}
|
|
6064
6153
|
var ErrorBox = React29.forwardRef(function ErrorBox2({
|
|
6065
6154
|
as = "p",
|
|
@@ -6083,17 +6172,17 @@ var ErrorBox = React29.forwardRef(function ErrorBox2({
|
|
|
6083
6172
|
...unsavedInput !== void 0 ? { unsavedInput } : {},
|
|
6084
6173
|
...origin !== void 0 ? { origin } : {}
|
|
6085
6174
|
};
|
|
6086
|
-
return /* @__PURE__ */ (0,
|
|
6175
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Tag, { ref, role: "alert", "data-error-box": "", ...rest, children: [
|
|
6087
6176
|
children ?? message,
|
|
6088
|
-
/* @__PURE__ */ (0,
|
|
6177
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ErrorActions, { ...facts })
|
|
6089
6178
|
] });
|
|
6090
6179
|
});
|
|
6091
6180
|
|
|
6092
6181
|
// src/label.tsx
|
|
6093
6182
|
var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
|
|
6094
6183
|
var React30 = __toESM(require("react"), 1);
|
|
6095
|
-
var
|
|
6096
|
-
var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
6184
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
6185
|
+
var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
6097
6186
|
LabelPrimitive.Root,
|
|
6098
6187
|
{
|
|
6099
6188
|
ref,
|
|
@@ -6107,7 +6196,7 @@ var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
|
|
|
6107
6196
|
Label3.displayName = LabelPrimitive.Root.displayName;
|
|
6108
6197
|
|
|
6109
6198
|
// src/controls/field.tsx
|
|
6110
|
-
var
|
|
6199
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
6111
6200
|
function LabeledField({
|
|
6112
6201
|
label,
|
|
6113
6202
|
htmlFor,
|
|
@@ -6126,9 +6215,9 @@ function LabeledField({
|
|
|
6126
6215
|
const hasCounter = typeof count === "number";
|
|
6127
6216
|
const overLimit = hasCounter && maxCount != null && count > maxCount;
|
|
6128
6217
|
const nearLimit = hasCounter && maxCount != null && count > maxCount * 0.9 && !overLimit;
|
|
6129
|
-
return /* @__PURE__ */ (0,
|
|
6130
|
-
/* @__PURE__ */ (0,
|
|
6131
|
-
/* @__PURE__ */ (0,
|
|
6218
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { "data-field-root": "", className: cn("group/field space-y-1.5", className), children: [
|
|
6219
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
6220
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
6132
6221
|
Label3,
|
|
6133
6222
|
{
|
|
6134
6223
|
htmlFor,
|
|
@@ -6138,27 +6227,27 @@ function LabeledField({
|
|
|
6138
6227
|
),
|
|
6139
6228
|
children: [
|
|
6140
6229
|
label,
|
|
6141
|
-
required && /* @__PURE__ */ (0,
|
|
6142
|
-
!required && optional && /* @__PURE__ */ (0,
|
|
6230
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-destructive ml-1", "aria-hidden": true, children: "*" }),
|
|
6231
|
+
!required && optional && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-muted-foreground ml-1.5 type-secondary font-normal", children: "(optional)" })
|
|
6143
6232
|
]
|
|
6144
6233
|
}
|
|
6145
6234
|
),
|
|
6146
|
-
typeof help === "string" && help && /* @__PURE__ */ (0,
|
|
6147
|
-
help && typeof help !== "string" && /* @__PURE__ */ (0,
|
|
6148
|
-
/* @__PURE__ */ (0,
|
|
6235
|
+
typeof help === "string" && help && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(InfoHint, { text: help, label: typeof label === "string" ? `About ${label}` : "Help" }),
|
|
6236
|
+
help && typeof help !== "string" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Tooltip, { children: [
|
|
6237
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
6149
6238
|
"button",
|
|
6150
6239
|
{
|
|
6151
6240
|
type: "button",
|
|
6152
6241
|
"aria-label": "Help",
|
|
6153
6242
|
className: "inline-flex items-center justify-center h-4 w-4 rounded-full text-muted-foreground hover:text-foreground transition-colors",
|
|
6154
|
-
children: /* @__PURE__ */ (0,
|
|
6243
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleHelpIcon, { className: "h-3.5 w-3.5" })
|
|
6155
6244
|
}
|
|
6156
6245
|
) }),
|
|
6157
|
-
/* @__PURE__ */ (0,
|
|
6246
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipContent, { side: "top", className: "max-w-xs type-secondary", children: help })
|
|
6158
6247
|
] }) })
|
|
6159
6248
|
] }),
|
|
6160
|
-
description && !error && /* @__PURE__ */ (0,
|
|
6161
|
-
/* @__PURE__ */ (0,
|
|
6249
|
+
description && !error && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "type-secondary text-muted-foreground", children: description }),
|
|
6250
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
6162
6251
|
"div",
|
|
6163
6252
|
{
|
|
6164
6253
|
"data-slot": "field-control",
|
|
@@ -6169,7 +6258,7 @@ function LabeledField({
|
|
|
6169
6258
|
children
|
|
6170
6259
|
}
|
|
6171
6260
|
),
|
|
6172
|
-
(error || hasCounter || requiredEmpty) && /* @__PURE__ */ (0,
|
|
6261
|
+
(error || hasCounter || requiredEmpty) && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
6173
6262
|
"div",
|
|
6174
6263
|
{
|
|
6175
6264
|
className: cn(
|
|
@@ -6181,10 +6270,10 @@ function LabeledField({
|
|
|
6181
6270
|
!error && !hasCounter && "hidden [[data-field-root]:has(:placeholder-shown)_&]:flex"
|
|
6182
6271
|
),
|
|
6183
6272
|
children: [
|
|
6184
|
-
error ? /* @__PURE__ */ (0,
|
|
6185
|
-
/* @__PURE__ */ (0,
|
|
6186
|
-
/* @__PURE__ */ (0,
|
|
6187
|
-
/* @__PURE__ */ (0,
|
|
6273
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("p", { className: "type-secondary text-destructive flex items-center gap-1", children: [
|
|
6274
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
|
|
6275
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: error }),
|
|
6276
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
6188
6277
|
ErrorActions,
|
|
6189
6278
|
{
|
|
6190
6279
|
...typeof error === "string" ? { message: error } : {},
|
|
@@ -6192,18 +6281,18 @@ function LabeledField({
|
|
|
6192
6281
|
origin: "design-system/LabeledField"
|
|
6193
6282
|
}
|
|
6194
6283
|
)
|
|
6195
|
-
] }) : requiredEmpty ? /* @__PURE__ */ (0,
|
|
6284
|
+
] }) : requiredEmpty ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
6196
6285
|
"p",
|
|
6197
6286
|
{
|
|
6198
6287
|
"data-slot": "field-empty-notice",
|
|
6199
6288
|
className: "hidden type-secondary text-muted-foreground items-center gap-1 [[data-field-root]:has(:placeholder-shown)_&]:flex",
|
|
6200
6289
|
children: [
|
|
6201
|
-
/* @__PURE__ */ (0,
|
|
6202
|
-
/* @__PURE__ */ (0,
|
|
6290
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
|
|
6291
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: "Empty \u2014 the gray text is an example, not your answer." })
|
|
6203
6292
|
]
|
|
6204
6293
|
}
|
|
6205
|
-
) : /* @__PURE__ */ (0,
|
|
6206
|
-
hasCounter && /* @__PURE__ */ (0,
|
|
6294
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", {}),
|
|
6295
|
+
hasCounter && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
6207
6296
|
"span",
|
|
6208
6297
|
{
|
|
6209
6298
|
className: cn(
|
|
@@ -6226,7 +6315,7 @@ var import_clipboard_fallback_opener = require("@ai-matrx/kit/clipboard-fallback
|
|
|
6226
6315
|
var import_notify = require("@ai-matrx/kit/notify");
|
|
6227
6316
|
var React31 = __toESM(require("react"), 1);
|
|
6228
6317
|
var import_react_dom = require("react-dom");
|
|
6229
|
-
var
|
|
6318
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
6230
6319
|
var { useState: useState17, useLayoutEffect: useLayoutEffect4, useRef: useRef12 } = React31;
|
|
6231
6320
|
function HelpIcon({
|
|
6232
6321
|
text,
|
|
@@ -6325,13 +6414,13 @@ function HelpIcon({
|
|
|
6325
6414
|
}, [isVisible]);
|
|
6326
6415
|
const formatTextWithLineBreaks = (text2) => {
|
|
6327
6416
|
const processedText = text2.replace(/\\n/g, "\n");
|
|
6328
|
-
return processedText.split("\n").map((line, index) => /* @__PURE__ */ (0,
|
|
6329
|
-
index > 0 && /* @__PURE__ */ (0,
|
|
6417
|
+
return processedText.split("\n").map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(React31.Fragment, { children: [
|
|
6418
|
+
index > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("br", {}),
|
|
6330
6419
|
line
|
|
6331
6420
|
] }, index));
|
|
6332
6421
|
};
|
|
6333
6422
|
if (!text && !content) return null;
|
|
6334
|
-
return /* @__PURE__ */ (0,
|
|
6423
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
|
|
6335
6424
|
"div",
|
|
6336
6425
|
{
|
|
6337
6426
|
className: `inline-block relative cursor-help ${className}`,
|
|
@@ -6339,9 +6428,9 @@ function HelpIcon({
|
|
|
6339
6428
|
onMouseEnter: showTooltip,
|
|
6340
6429
|
onMouseLeave: hideTooltip,
|
|
6341
6430
|
children: [
|
|
6342
|
-
/* @__PURE__ */ (0,
|
|
6431
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(InfoIcon, { className: "h-4 w-4 text-muted-foreground transition-colors duration-200" }),
|
|
6343
6432
|
isVisible && typeof document !== "undefined" && (0, import_react_dom.createPortal)(
|
|
6344
|
-
/* @__PURE__ */ (0,
|
|
6433
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
|
|
6345
6434
|
"div",
|
|
6346
6435
|
{
|
|
6347
6436
|
ref: tooltipRef,
|
|
@@ -6354,29 +6443,29 @@ function HelpIcon({
|
|
|
6354
6443
|
onMouseEnter: cancelHideTooltip,
|
|
6355
6444
|
onMouseLeave: hideTooltip,
|
|
6356
6445
|
children: [
|
|
6357
|
-
/* @__PURE__ */ (0,
|
|
6358
|
-
/* @__PURE__ */ (0,
|
|
6359
|
-
/* @__PURE__ */ (0,
|
|
6360
|
-
title && /* @__PURE__ */ (0,
|
|
6361
|
-
text && /* @__PURE__ */ (0,
|
|
6446
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "p-3", children: [
|
|
6447
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
6448
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CircleHelpIcon, { className: "h-4 w-4 flex-shrink-0 text-info-ink" }),
|
|
6449
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "text-foreground type-title", children: title }),
|
|
6450
|
+
text && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
6362
6451
|
Button2,
|
|
6363
6452
|
{
|
|
6364
6453
|
variant: "quiet",
|
|
6365
6454
|
className: "ml-auto",
|
|
6366
|
-
icon: copied ? /* @__PURE__ */ (0,
|
|
6455
|
+
icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CopyIcon, {}),
|
|
6367
6456
|
"aria-label": "Copy to clipboard",
|
|
6368
6457
|
onClick: handleCopy
|
|
6369
6458
|
}
|
|
6370
6459
|
)
|
|
6371
6460
|
] }),
|
|
6372
|
-
/* @__PURE__ */ (0,
|
|
6373
|
-
required && /* @__PURE__ */ (0,
|
|
6374
|
-
/* @__PURE__ */ (0,
|
|
6461
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "type-body text-foreground leading-relaxed", children: content ? content : text && formatTextWithLineBreaks(text) }),
|
|
6462
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "mt-3 inline-flex items-center gap-1.5 px-2.5 py-1 bg-warning/15 text-warning-ink type-secondary font-medium rounded-full", children: [
|
|
6463
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "w-1.5 h-1.5 bg-warning-ink rounded-full" }),
|
|
6375
6464
|
"Required Field"
|
|
6376
6465
|
] }),
|
|
6377
|
-
onAiAssistance && /* @__PURE__ */ (0,
|
|
6466
|
+
onAiAssistance && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button2, { variant: "primary", icon: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CircleDotIcon, {}), className: "mt-3 w-full", onClick: handleAiClick, children: "Get Help From Matrx AI" })
|
|
6378
6467
|
] }),
|
|
6379
|
-
/* @__PURE__ */ (0,
|
|
6468
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "absolute -bottom-1.5 left-1/2 -translate-x-1/2 w-3 h-3 bg-textured border-r border-b border-border rotate-45" })
|
|
6380
6469
|
]
|
|
6381
6470
|
}
|
|
6382
6471
|
),
|
|
@@ -6392,7 +6481,7 @@ var import_clipboard2 = require("@ai-matrx/kit/clipboard");
|
|
|
6392
6481
|
var import_notify2 = require("@ai-matrx/kit/notify");
|
|
6393
6482
|
var import_clipboard_fallback_opener2 = require("@ai-matrx/kit/clipboard-fallback-opener");
|
|
6394
6483
|
var React32 = __toESM(require("react"), 1);
|
|
6395
|
-
var
|
|
6484
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
6396
6485
|
function cleanUrl(url) {
|
|
6397
6486
|
try {
|
|
6398
6487
|
const parsed = new URL(url);
|
|
@@ -6448,9 +6537,9 @@ function TextArrayInput({
|
|
|
6448
6537
|
handleChange([...value, ...added]);
|
|
6449
6538
|
setInputValue("");
|
|
6450
6539
|
};
|
|
6451
|
-
return /* @__PURE__ */ (0,
|
|
6452
|
-
/* @__PURE__ */ (0,
|
|
6453
|
-
/* @__PURE__ */ (0,
|
|
6540
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: `space-y-3 ${className}`, children: [
|
|
6541
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full", children: [
|
|
6542
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
6454
6543
|
Input,
|
|
6455
6544
|
{
|
|
6456
6545
|
adornment: "end",
|
|
@@ -6464,12 +6553,12 @@ function TextArrayInput({
|
|
|
6464
6553
|
className: "w-full"
|
|
6465
6554
|
}
|
|
6466
6555
|
),
|
|
6467
|
-
showCopyIcon && value.length > 0 && /* @__PURE__ */ (0,
|
|
6556
|
+
showCopyIcon && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
6468
6557
|
Button2,
|
|
6469
6558
|
{
|
|
6470
6559
|
...tabIndexProp,
|
|
6471
6560
|
variant: "quiet",
|
|
6472
|
-
icon: copied ? /* @__PURE__ */ (0,
|
|
6561
|
+
icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CopyIcon, {}),
|
|
6473
6562
|
...copied ? { glyphTone: "success" } : {},
|
|
6474
6563
|
"aria-label": "Copy values",
|
|
6475
6564
|
onClick: handleCopy,
|
|
@@ -6477,13 +6566,13 @@ function TextArrayInput({
|
|
|
6477
6566
|
}
|
|
6478
6567
|
)
|
|
6479
6568
|
] }),
|
|
6480
|
-
/* @__PURE__ */ (0,
|
|
6569
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex flex-wrap gap-2", children: value.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "type-body inline-flex items-center rounded-full bg-muted px-3 py-1 text-muted-foreground", children: "None Added" }) : value.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
6481
6570
|
"span",
|
|
6482
6571
|
{
|
|
6483
6572
|
className: `inline-flex cursor-default items-center gap-1 rounded-full px-3 py-1 text-sm transition-all duration-200 ${chipClassName}`,
|
|
6484
6573
|
children: [
|
|
6485
6574
|
item,
|
|
6486
|
-
/* @__PURE__ */ (0,
|
|
6575
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
6487
6576
|
"button",
|
|
6488
6577
|
{
|
|
6489
6578
|
...tabIndexProp,
|
|
@@ -6494,7 +6583,7 @@ function TextArrayInput({
|
|
|
6494
6583
|
},
|
|
6495
6584
|
className: "cursor-pointer rounded-full p-0.5 transition-colors duration-200 hover:bg-primary-foreground/20",
|
|
6496
6585
|
"aria-label": `Remove ${item}`,
|
|
6497
|
-
children: /* @__PURE__ */ (0,
|
|
6586
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(XIcon, { className: "h-3.5 w-3.5" })
|
|
6498
6587
|
}
|
|
6499
6588
|
)
|
|
6500
6589
|
]
|
|
@@ -6523,21 +6612,21 @@ function getTapTargetLinkComponent() {
|
|
|
6523
6612
|
}
|
|
6524
6613
|
|
|
6525
6614
|
// src/host-link.tsx
|
|
6526
|
-
var
|
|
6615
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
6527
6616
|
var HostLink = React33.forwardRef(function HostLink2({ href, prefetch, ...rest }, ref) {
|
|
6528
6617
|
const Registered = getTapTargetLinkComponent();
|
|
6529
6618
|
if (Registered) {
|
|
6530
|
-
return /* @__PURE__ */ (0,
|
|
6619
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Registered, { ref, href, ...prefetch === void 0 ? {} : { prefetch }, ...rest });
|
|
6531
6620
|
}
|
|
6532
6621
|
announceStandIn(
|
|
6533
6622
|
"link-host",
|
|
6534
6623
|
"HostLink drew a plain <a>: register the app's link component once with setTapTargetLinkComponent() from @ai-matrx/design-system/tap-target."
|
|
6535
6624
|
);
|
|
6536
|
-
return /* @__PURE__ */ (0,
|
|
6625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("a", { ref, href, "data-link-host": UNCONFIGURED, ...rest });
|
|
6537
6626
|
});
|
|
6538
6627
|
|
|
6539
6628
|
// src/read-state/untrusted-count.tsx
|
|
6540
|
-
var
|
|
6629
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
6541
6630
|
function countReadState(input) {
|
|
6542
6631
|
const { read, trustworthy } = input;
|
|
6543
6632
|
if (trustworthy === false) return "failed";
|
|
@@ -6554,7 +6643,7 @@ function unavailableCountLabel(label) {
|
|
|
6554
6643
|
}
|
|
6555
6644
|
|
|
6556
6645
|
// src/controls/kpi-tile.tsx
|
|
6557
|
-
var
|
|
6646
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
6558
6647
|
var TONE_VALUE = {
|
|
6559
6648
|
neutral: "text-foreground",
|
|
6560
6649
|
good: "text-success-ink",
|
|
@@ -6577,7 +6666,7 @@ function KpiSparkline({ trend, label }) {
|
|
|
6577
6666
|
const range = Math.max(max - min, Math.abs(max) * 0.1) || 1;
|
|
6578
6667
|
const y = (v) => max === min ? SPARK_H / 2 : SPARK_H - 2 - (v - min) / range * (SPARK_H - 4);
|
|
6579
6668
|
const pts = trend.values.map((v, i) => `${(i / (n - 1) * SPARK_W).toFixed(1)},${y(v).toFixed(1)}`).join(" ");
|
|
6580
|
-
return /* @__PURE__ */ (0,
|
|
6669
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
6581
6670
|
"svg",
|
|
6582
6671
|
{
|
|
6583
6672
|
viewBox: `0 0 ${SPARK_W} ${SPARK_H}`,
|
|
@@ -6586,9 +6675,9 @@ function KpiSparkline({ trend, label }) {
|
|
|
6586
6675
|
"aria-label": `${trend.label ?? label}, last ${trend.period}`,
|
|
6587
6676
|
className: "h-5 w-16 shrink-0 text-primary",
|
|
6588
6677
|
children: [
|
|
6589
|
-
/* @__PURE__ */ (0,
|
|
6590
|
-
max === min ? null : /* @__PURE__ */ (0,
|
|
6591
|
-
/* @__PURE__ */ (0,
|
|
6678
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("title", { children: `${trend.label ?? label}, last ${trend.period}` }),
|
|
6679
|
+
max === min ? null : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("polygon", { points: `0,${SPARK_H} ${pts} ${SPARK_W},${SPARK_H}`, fill: "currentColor", fillOpacity: 0.15 }),
|
|
6680
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("polyline", { points: pts, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" })
|
|
6592
6681
|
]
|
|
6593
6682
|
}
|
|
6594
6683
|
);
|
|
@@ -6610,19 +6699,19 @@ function KpiTile({
|
|
|
6610
6699
|
const failed = readState === "failed";
|
|
6611
6700
|
const shown = failed ? null : value;
|
|
6612
6701
|
const dot = TONE_DOT[tone2];
|
|
6613
|
-
const body = /* @__PURE__ */ (0,
|
|
6614
|
-
/* @__PURE__ */ (0,
|
|
6615
|
-
dot ? /* @__PURE__ */ (0,
|
|
6616
|
-
/* @__PURE__ */ (0,
|
|
6702
|
+
const body = /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
6703
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex min-w-0 items-start gap-1.5 type-meta font-medium uppercase tracking-wide text-muted-foreground", children: [
|
|
6704
|
+
dot ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { "aria-hidden": true, className: cn("mt-1 inline-block h-2 w-2 shrink-0 rounded-sm", dot) }) : null,
|
|
6705
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "line-clamp-2 break-words", children: [
|
|
6617
6706
|
label,
|
|
6618
|
-
title ? /* @__PURE__ */ (0,
|
|
6707
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
6619
6708
|
" ",
|
|
6620
|
-
/* @__PURE__ */ (0,
|
|
6709
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(InfoHint, { text: title, label: `What ${label} means` })
|
|
6621
6710
|
] }) : null
|
|
6622
6711
|
] })
|
|
6623
6712
|
] }),
|
|
6624
|
-
loading ? /* @__PURE__ */ (0,
|
|
6625
|
-
/* @__PURE__ */ (0,
|
|
6713
|
+
loading ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "my-0.5 h-6 w-12 animate-pulse rounded bg-muted", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex min-w-0 items-end justify-between gap-2", children: [
|
|
6714
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
6626
6715
|
"div",
|
|
6627
6716
|
{
|
|
6628
6717
|
className: cn(
|
|
@@ -6634,16 +6723,16 @@ function KpiTile({
|
|
|
6634
6723
|
children: shown === null ? "\u2014" : shown
|
|
6635
6724
|
}
|
|
6636
6725
|
),
|
|
6637
|
-
trend && shown !== null ? /* @__PURE__ */ (0,
|
|
6726
|
+
trend && shown !== null ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KpiSparkline, { trend, label }) : null
|
|
6638
6727
|
] }),
|
|
6639
|
-
hint ? /* @__PURE__ */ (0,
|
|
6728
|
+
hint ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "truncate type-meta text-muted-foreground", children: hint }) : null
|
|
6640
6729
|
] });
|
|
6641
6730
|
const shell = cn(
|
|
6642
6731
|
"flex min-w-0 flex-col gap-0.5 rounded-md border border-border bg-card px-3 py-2",
|
|
6643
6732
|
className
|
|
6644
6733
|
);
|
|
6645
6734
|
if (href && !loading && shown !== null) {
|
|
6646
|
-
return /* @__PURE__ */ (0,
|
|
6735
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
6647
6736
|
HostLink,
|
|
6648
6737
|
{
|
|
6649
6738
|
href,
|
|
@@ -6656,13 +6745,13 @@ function KpiTile({
|
|
|
6656
6745
|
}
|
|
6657
6746
|
);
|
|
6658
6747
|
}
|
|
6659
|
-
return /* @__PURE__ */ (0,
|
|
6748
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: shell, "data-look-surface": "card", "aria-busy": loading || void 0, children: body });
|
|
6660
6749
|
}
|
|
6661
6750
|
function KpiGrid({
|
|
6662
6751
|
children,
|
|
6663
6752
|
className
|
|
6664
6753
|
}) {
|
|
6665
|
-
return /* @__PURE__ */ (0,
|
|
6754
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
6666
6755
|
"div",
|
|
6667
6756
|
{
|
|
6668
6757
|
className: cn(
|
|
@@ -6676,7 +6765,7 @@ function KpiGrid({
|
|
|
6676
6765
|
|
|
6677
6766
|
// src/controls/action-feedback-button.tsx
|
|
6678
6767
|
var React34 = __toESM(require("react"), 1);
|
|
6679
|
-
var
|
|
6768
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
6680
6769
|
function ActionFeedbackButton({
|
|
6681
6770
|
icon,
|
|
6682
6771
|
tooltip,
|
|
@@ -6702,11 +6791,11 @@ function ActionFeedbackButton({
|
|
|
6702
6791
|
timer.current = setTimeout(() => setShowSuccess(false), feedbackDuration);
|
|
6703
6792
|
};
|
|
6704
6793
|
const text = showSuccess ? successTooltip : disabled && disabledTooltip ? disabledTooltip : tooltip;
|
|
6705
|
-
const button = /* @__PURE__ */ (0,
|
|
6794
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
6706
6795
|
Button2,
|
|
6707
6796
|
{
|
|
6708
6797
|
variant,
|
|
6709
|
-
icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0,
|
|
6798
|
+
icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CheckCircle2Icon, {}) : icon,
|
|
6710
6799
|
...showSuccess ? { glyphTone: "success" } : glyphTone ? { glyphTone } : {},
|
|
6711
6800
|
...props,
|
|
6712
6801
|
"aria-label": text,
|
|
@@ -6714,15 +6803,15 @@ function ActionFeedbackButton({
|
|
|
6714
6803
|
onClick: handleClick
|
|
6715
6804
|
}
|
|
6716
6805
|
);
|
|
6717
|
-
return /* @__PURE__ */ (0,
|
|
6718
|
-
/* @__PURE__ */ (0,
|
|
6719
|
-
/* @__PURE__ */ (0,
|
|
6806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Tooltip, { children: [
|
|
6807
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "inline-flex", children: button }) : button }),
|
|
6808
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipContent, { side: "bottom", sideOffset: 5, className: "z-[9999]", children: text })
|
|
6720
6809
|
] });
|
|
6721
6810
|
}
|
|
6722
6811
|
|
|
6723
6812
|
// src/controls/citation-chip.tsx
|
|
6724
6813
|
var import_react10 = require("react");
|
|
6725
|
-
var
|
|
6814
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
6726
6815
|
function CitationPopoverBody({
|
|
6727
6816
|
icon: Icon3,
|
|
6728
6817
|
label,
|
|
@@ -6732,32 +6821,32 @@ function CitationPopoverBody({
|
|
|
6732
6821
|
onOpen,
|
|
6733
6822
|
openLabel = "Open source"
|
|
6734
6823
|
}) {
|
|
6735
|
-
return /* @__PURE__ */ (0,
|
|
6736
|
-
/* @__PURE__ */ (0,
|
|
6737
|
-
/* @__PURE__ */ (0,
|
|
6824
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
6825
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-start gap-2", children: [
|
|
6826
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6738
6827
|
Icon3,
|
|
6739
6828
|
{
|
|
6740
6829
|
className: "mt-0.5 h-4 w-4 shrink-0 text-muted-foreground",
|
|
6741
6830
|
"aria-hidden": true
|
|
6742
6831
|
}
|
|
6743
6832
|
),
|
|
6744
|
-
/* @__PURE__ */ (0,
|
|
6745
|
-
/* @__PURE__ */ (0,
|
|
6746
|
-
locator && /* @__PURE__ */ (0,
|
|
6833
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "min-w-0", children: [
|
|
6834
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "truncate type-title text-foreground", children: label }),
|
|
6835
|
+
locator && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "type-secondary text-muted-foreground", children: locator })
|
|
6747
6836
|
] })
|
|
6748
6837
|
] }),
|
|
6749
|
-
excerpt && /* @__PURE__ */ (0,
|
|
6750
|
-
/* @__PURE__ */ (0,
|
|
6751
|
-
/* @__PURE__ */ (0,
|
|
6838
|
+
excerpt && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("blockquote", { className: "flex gap-2 rounded-md bg-muted/60 p-2 type-secondary italic text-muted-foreground", children: [
|
|
6839
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(QuoteIcon, { className: "h-3 w-3 shrink-0", "aria-hidden": true }),
|
|
6840
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: cn("not-italic", clampExcerpt && "line-clamp-6"), children: excerpt })
|
|
6752
6841
|
] }),
|
|
6753
|
-
onOpen && /* @__PURE__ */ (0,
|
|
6842
|
+
onOpen && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
|
|
6754
6843
|
"button",
|
|
6755
6844
|
{
|
|
6756
6845
|
type: "button",
|
|
6757
6846
|
onClick: onOpen,
|
|
6758
6847
|
className: "inline-flex items-center gap-1 self-start text-xs font-medium text-primary hover:underline",
|
|
6759
6848
|
children: [
|
|
6760
|
-
/* @__PURE__ */ (0,
|
|
6849
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ArrowUpRightIcon, { className: "h-3 w-3", "aria-hidden": true }),
|
|
6761
6850
|
openLabel
|
|
6762
6851
|
]
|
|
6763
6852
|
}
|
|
@@ -6777,8 +6866,8 @@ function CitationChip({
|
|
|
6777
6866
|
setOpen(false);
|
|
6778
6867
|
body.onOpen?.();
|
|
6779
6868
|
} : void 0;
|
|
6780
|
-
return /* @__PURE__ */ (0,
|
|
6781
|
-
/* @__PURE__ */ (0,
|
|
6869
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
|
|
6870
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
|
|
6782
6871
|
"button",
|
|
6783
6872
|
{
|
|
6784
6873
|
type: "button",
|
|
@@ -6788,20 +6877,20 @@ function CitationChip({
|
|
|
6788
6877
|
chipClassName
|
|
6789
6878
|
),
|
|
6790
6879
|
children: [
|
|
6791
|
-
number != null && /* @__PURE__ */ (0,
|
|
6792
|
-
/* @__PURE__ */ (0,
|
|
6793
|
-
/* @__PURE__ */ (0,
|
|
6794
|
-
chipSuffix && /* @__PURE__ */ (0,
|
|
6880
|
+
number != null && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full bg-muted px-1 text-[0.65rem] font-medium leading-none text-muted-foreground", children: number }),
|
|
6881
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon3, { className: "h-3 w-3 shrink-0 text-muted-foreground", "aria-hidden": true }),
|
|
6882
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "truncate", children: label }),
|
|
6883
|
+
chipSuffix && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "shrink-0 text-muted-foreground", children: chipSuffix })
|
|
6795
6884
|
]
|
|
6796
6885
|
}
|
|
6797
6886
|
) }),
|
|
6798
|
-
/* @__PURE__ */ (0,
|
|
6887
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverContent, { sizing: "content", align: "start", className: "p-3", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CitationPopoverBody, { ...body, onOpen }) })
|
|
6799
6888
|
] });
|
|
6800
6889
|
}
|
|
6801
6890
|
|
|
6802
6891
|
// src/controls/tool-rail.tsx
|
|
6803
6892
|
var React35 = __toESM(require("react"), 1);
|
|
6804
|
-
var
|
|
6893
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
6805
6894
|
function ToolRail({
|
|
6806
6895
|
groups,
|
|
6807
6896
|
value,
|
|
@@ -6841,7 +6930,7 @@ function ToolRail({
|
|
|
6841
6930
|
focusAt(enabled[enabled.length - 1]?.id);
|
|
6842
6931
|
}
|
|
6843
6932
|
};
|
|
6844
|
-
return /* @__PURE__ */ (0,
|
|
6933
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6845
6934
|
"div",
|
|
6846
6935
|
{
|
|
6847
6936
|
role: "toolbar",
|
|
@@ -6850,8 +6939,8 @@ function ToolRail({
|
|
|
6850
6939
|
"data-matrx-tool-rail": "",
|
|
6851
6940
|
"data-orientation": orientation,
|
|
6852
6941
|
className: cn("flex w-fit shrink-0 items-center gap-1", vertical ? "flex-col" : "flex-row", className),
|
|
6853
|
-
children: groups.map((group, gi) => /* @__PURE__ */ (0,
|
|
6854
|
-
gi > 0 ? /* @__PURE__ */ (0,
|
|
6942
|
+
children: groups.map((group, gi) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(React35.Fragment, { children: [
|
|
6943
|
+
gi > 0 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6855
6944
|
"div",
|
|
6856
6945
|
{
|
|
6857
6946
|
role: "separator",
|
|
@@ -6863,8 +6952,8 @@ function ToolRail({
|
|
|
6863
6952
|
const on = tool.id === value;
|
|
6864
6953
|
const Icon3 = tool.icon;
|
|
6865
6954
|
const name = tool.shortcut ? `${tool.label} (${tool.shortcut})` : tool.label;
|
|
6866
|
-
return /* @__PURE__ */ (0,
|
|
6867
|
-
/* @__PURE__ */ (0,
|
|
6955
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Tooltip, { children: [
|
|
6956
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6868
6957
|
Button2,
|
|
6869
6958
|
{
|
|
6870
6959
|
ref: (el) => {
|
|
@@ -6872,7 +6961,7 @@ function ToolRail({
|
|
|
6872
6961
|
else refs.current.delete(tool.id);
|
|
6873
6962
|
},
|
|
6874
6963
|
variant: on ? "primary" : "quiet",
|
|
6875
|
-
icon: /* @__PURE__ */ (0,
|
|
6964
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon3, {}),
|
|
6876
6965
|
"aria-label": name,
|
|
6877
6966
|
pressed: on,
|
|
6878
6967
|
disabled: tool.disabled,
|
|
@@ -6883,7 +6972,7 @@ function ToolRail({
|
|
|
6883
6972
|
onClick: () => onValueChange(on && allowDeselect ? null : tool.id, tool)
|
|
6884
6973
|
}
|
|
6885
6974
|
) }),
|
|
6886
|
-
/* @__PURE__ */ (0,
|
|
6975
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TooltipContent, { side: vertical ? "right" : "bottom", sideOffset: 6, children: name })
|
|
6887
6976
|
] }, tool.id);
|
|
6888
6977
|
})
|
|
6889
6978
|
] }, gi))
|
|
@@ -6963,7 +7052,7 @@ function formatPageRanges(pages) {
|
|
|
6963
7052
|
}
|
|
6964
7053
|
|
|
6965
7054
|
// src/controls/page-range-input.tsx
|
|
6966
|
-
var
|
|
7055
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
6967
7056
|
function PageRangeInput({
|
|
6968
7057
|
value,
|
|
6969
7058
|
onChange,
|
|
@@ -6980,8 +7069,8 @@ function PageRangeInput({
|
|
|
6980
7069
|
const parsed = React36.useMemo(() => parsePageRanges(value, pageCount), [value, pageCount]);
|
|
6981
7070
|
const first = parsed.issues[0];
|
|
6982
7071
|
const hint = parsed.empty ? `${pageCount} page${pageCount === 1 ? "" : "s"}` : first ? first.hint : `${parsed.pages.length} page${parsed.pages.length === 1 ? "" : "s"}: ${formatPageRanges(parsed.pages)}`;
|
|
6983
|
-
return /* @__PURE__ */ (0,
|
|
6984
|
-
/* @__PURE__ */ (0,
|
|
7072
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex min-w-0 flex-col gap-1", className), "data-matrx-page-range-input": "", children: [
|
|
7073
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6985
7074
|
Input,
|
|
6986
7075
|
{
|
|
6987
7076
|
id,
|
|
@@ -7000,7 +7089,7 @@ function PageRangeInput({
|
|
|
7000
7089
|
}
|
|
7001
7090
|
}
|
|
7002
7091
|
),
|
|
7003
|
-
/* @__PURE__ */ (0,
|
|
7092
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
7004
7093
|
"p",
|
|
7005
7094
|
{
|
|
7006
7095
|
id: hintId,
|
|
@@ -7015,7 +7104,7 @@ function PageRangeInput({
|
|
|
7015
7104
|
|
|
7016
7105
|
// src/controls/opacity-slider.tsx
|
|
7017
7106
|
var React37 = __toESM(require("react"), 1);
|
|
7018
|
-
var
|
|
7107
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
7019
7108
|
var clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
|
|
7020
7109
|
var toPercent = (v) => Math.round(v * 100);
|
|
7021
7110
|
function OpacitySlider({
|
|
@@ -7035,8 +7124,8 @@ function OpacitySlider({
|
|
|
7035
7124
|
}
|
|
7036
7125
|
setDraft(null);
|
|
7037
7126
|
};
|
|
7038
|
-
return /* @__PURE__ */ (0,
|
|
7039
|
-
/* @__PURE__ */ (0,
|
|
7127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: cn("flex min-w-0 items-center gap-2", className), "data-matrx-opacity-slider": "", children: [
|
|
7128
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
7040
7129
|
Slider,
|
|
7041
7130
|
{
|
|
7042
7131
|
className: "min-w-0 flex-1",
|
|
@@ -7049,8 +7138,8 @@ function OpacitySlider({
|
|
|
7049
7138
|
onValueChange: ([v]) => onChange(clamp((v ?? 0) / 100, min, max))
|
|
7050
7139
|
}
|
|
7051
7140
|
),
|
|
7052
|
-
/* @__PURE__ */ (0,
|
|
7053
|
-
/* @__PURE__ */ (0,
|
|
7141
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex w-16 shrink-0 items-center gap-1", style: { ["--matrx-control-field-min"]: "0px" }, children: [
|
|
7142
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
7054
7143
|
Input,
|
|
7055
7144
|
{
|
|
7056
7145
|
numeric: true,
|
|
@@ -7069,14 +7158,14 @@ function OpacitySlider({
|
|
|
7069
7158
|
}
|
|
7070
7159
|
}
|
|
7071
7160
|
),
|
|
7072
|
-
/* @__PURE__ */ (0,
|
|
7161
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { "aria-hidden": true, className: "text-xs text-muted-foreground", children: "%" })
|
|
7073
7162
|
] })
|
|
7074
7163
|
] });
|
|
7075
7164
|
}
|
|
7076
7165
|
|
|
7077
7166
|
// src/controls/color-swatch-row.tsx
|
|
7078
7167
|
var React38 = __toESM(require("react"), 1);
|
|
7079
|
-
var
|
|
7168
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
7080
7169
|
function ColorSwatchRow({
|
|
7081
7170
|
colors,
|
|
7082
7171
|
value,
|
|
@@ -7095,7 +7184,7 @@ function ColorSwatchRow({
|
|
|
7095
7184
|
refs.current[i]?.focus();
|
|
7096
7185
|
onChange(c.value, c);
|
|
7097
7186
|
};
|
|
7098
|
-
return /* @__PURE__ */ (0,
|
|
7187
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
7099
7188
|
"div",
|
|
7100
7189
|
{
|
|
7101
7190
|
role: "radiogroup",
|
|
@@ -7105,7 +7194,7 @@ function ColorSwatchRow({
|
|
|
7105
7194
|
"data-matrx-color-swatch-row": "",
|
|
7106
7195
|
children: colors.map((c, i) => {
|
|
7107
7196
|
const on = i === chosen;
|
|
7108
|
-
return /* @__PURE__ */ (0,
|
|
7197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
7109
7198
|
"button",
|
|
7110
7199
|
{
|
|
7111
7200
|
ref: (el) => {
|
|
@@ -7143,7 +7232,7 @@ function ColorSwatchRow({
|
|
|
7143
7232
|
on && "ring-2 ring-foreground ring-offset-1 ring-offset-background"
|
|
7144
7233
|
),
|
|
7145
7234
|
style: { backgroundColor: c.value },
|
|
7146
|
-
children: on ? /* @__PURE__ */ (0,
|
|
7235
|
+
children: on ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(RadixCheckIcon, { className: "size-3 mix-blend-difference text-white" }) : null
|
|
7147
7236
|
},
|
|
7148
7237
|
`${c.value}-${i}`
|
|
7149
7238
|
);
|
|
@@ -7154,7 +7243,7 @@ function ColorSwatchRow({
|
|
|
7154
7243
|
|
|
7155
7244
|
// src/controls/anchored-toolbar.tsx
|
|
7156
7245
|
var React39 = __toESM(require("react"), 1);
|
|
7157
|
-
var
|
|
7246
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
7158
7247
|
function virtualFor(rect) {
|
|
7159
7248
|
return {
|
|
7160
7249
|
getBoundingClientRect: () => ({
|
|
@@ -7187,9 +7276,9 @@ function AnchoredToolbar({
|
|
|
7187
7276
|
[x, y, w, h]
|
|
7188
7277
|
);
|
|
7189
7278
|
const visible = open && rect !== null;
|
|
7190
|
-
return /* @__PURE__ */ (0,
|
|
7191
|
-
/* @__PURE__ */ (0,
|
|
7192
|
-
/* @__PURE__ */ (0,
|
|
7279
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Popover, { open: visible, ...onOpenChange ? { onOpenChange } : {}, children: [
|
|
7280
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PopoverAnchor, { virtualRef }),
|
|
7281
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
7193
7282
|
PopoverContent,
|
|
7194
7283
|
{
|
|
7195
7284
|
role: "toolbar",
|
|
@@ -7214,7 +7303,7 @@ function AnchoredToolbar({
|
|
|
7214
7303
|
// src/controls/icon-select.tsx
|
|
7215
7304
|
var React40 = __toESM(require("react"), 1);
|
|
7216
7305
|
var import_outbound = require("@ai-matrx/kit/outbound");
|
|
7217
|
-
var
|
|
7306
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
7218
7307
|
function wantsNewTab(e) {
|
|
7219
7308
|
return Boolean(e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button === 1);
|
|
7220
7309
|
}
|
|
@@ -7224,7 +7313,7 @@ var TRIGGER_SIZE = {
|
|
|
7224
7313
|
};
|
|
7225
7314
|
var TRIGGER_FACE = "h-7 w-7 justify-center border-none bg-muted px-0 focus:outline-none focus:ring-0";
|
|
7226
7315
|
var IconSelectTrigger = React40.forwardRef(function IconSelectTrigger2({ icon, disabled, ariaLabel, size = "default", className, ...rest }, ref) {
|
|
7227
|
-
return /* @__PURE__ */ (0,
|
|
7316
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
7228
7317
|
Button2,
|
|
7229
7318
|
{
|
|
7230
7319
|
ref,
|
|
@@ -7252,13 +7341,13 @@ function IconSelect({
|
|
|
7252
7341
|
const [open, setOpen] = React40.useState(false);
|
|
7253
7342
|
const skipSelectRef = React40.useRef(false);
|
|
7254
7343
|
if (searchable) {
|
|
7255
|
-
return /* @__PURE__ */ (0,
|
|
7256
|
-
/* @__PURE__ */ (0,
|
|
7257
|
-
/* @__PURE__ */ (0,
|
|
7258
|
-
/* @__PURE__ */ (0,
|
|
7259
|
-
/* @__PURE__ */ (0,
|
|
7260
|
-
/* @__PURE__ */ (0,
|
|
7261
|
-
/* @__PURE__ */ (0,
|
|
7344
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
|
|
7345
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(IconSelectTrigger, { icon, disabled, ariaLabel, size, className }) }),
|
|
7346
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(PopoverContent, { sizing: "content", className: "p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Command, { children: [
|
|
7347
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CommandInput, { placeholder: searchPlaceholder, className: "h-9 text-sm" }),
|
|
7348
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(CommandList, { children: [
|
|
7349
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CommandEmpty, { children: "No results found." }),
|
|
7350
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CommandGroup, { className: "max-h-72 overflow-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
7262
7351
|
CommandItem,
|
|
7263
7352
|
{
|
|
7264
7353
|
value: item.label,
|
|
@@ -7278,8 +7367,8 @@ function IconSelect({
|
|
|
7278
7367
|
onValueChange?.(item.value);
|
|
7279
7368
|
setOpen(false);
|
|
7280
7369
|
},
|
|
7281
|
-
children: /* @__PURE__ */ (0,
|
|
7282
|
-
item.icon && /* @__PURE__ */ (0,
|
|
7370
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center", children: [
|
|
7371
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "mr-2", children: item.icon }),
|
|
7283
7372
|
item.label
|
|
7284
7373
|
] })
|
|
7285
7374
|
},
|
|
@@ -7289,8 +7378,8 @@ function IconSelect({
|
|
|
7289
7378
|
] }) })
|
|
7290
7379
|
] });
|
|
7291
7380
|
}
|
|
7292
|
-
return /* @__PURE__ */ (0,
|
|
7293
|
-
/* @__PURE__ */ (0,
|
|
7381
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Select, { ...value === void 0 ? {} : { value }, ...onValueChange ? { onValueChange } : {}, disabled, children: [
|
|
7382
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
7294
7383
|
SelectTrigger,
|
|
7295
7384
|
{
|
|
7296
7385
|
"aria-label": ariaLabel,
|
|
@@ -7299,7 +7388,7 @@ function IconSelect({
|
|
|
7299
7388
|
children: icon
|
|
7300
7389
|
}
|
|
7301
7390
|
),
|
|
7302
|
-
/* @__PURE__ */ (0,
|
|
7391
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectContent, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectGroup, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
7303
7392
|
SelectItem,
|
|
7304
7393
|
{
|
|
7305
7394
|
value: item.value,
|
|
@@ -7309,8 +7398,8 @@ function IconSelect({
|
|
|
7309
7398
|
(0, import_outbound.openOutbound)(item.href, "_blank", "noopener");
|
|
7310
7399
|
}
|
|
7311
7400
|
},
|
|
7312
|
-
children: /* @__PURE__ */ (0,
|
|
7313
|
-
item.icon && /* @__PURE__ */ (0,
|
|
7401
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center", children: [
|
|
7402
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "mr-2", children: item.icon }),
|
|
7314
7403
|
item.label
|
|
7315
7404
|
] })
|
|
7316
7405
|
},
|
|
@@ -7328,10 +7417,10 @@ var import_notify3 = require("@ai-matrx/kit/notify");
|
|
|
7328
7417
|
// src/collapsible.tsx
|
|
7329
7418
|
var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"), 1);
|
|
7330
7419
|
var React41 = __toESM(require("react"), 1);
|
|
7331
|
-
var
|
|
7420
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
7332
7421
|
var Collapsible = CollapsiblePrimitive.Root;
|
|
7333
7422
|
var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
|
|
7334
|
-
var CollapsibleContent2 = React41.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0,
|
|
7423
|
+
var CollapsibleContent2 = React41.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
7335
7424
|
CollapsiblePrimitive.CollapsibleContent,
|
|
7336
7425
|
{
|
|
7337
7426
|
ref,
|
|
@@ -7353,7 +7442,7 @@ var React43 = __toESM(require("react"), 1);
|
|
|
7353
7442
|
|
|
7354
7443
|
// src/look.tsx
|
|
7355
7444
|
var React42 = __toESM(require("react"), 1);
|
|
7356
|
-
var
|
|
7445
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
7357
7446
|
var CONTEXT_SLOT3 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.look-context");
|
|
7358
7447
|
var registry3 = globalThis;
|
|
7359
7448
|
var LookContext = registry3[CONTEXT_SLOT3] ??= React42.createContext("web");
|
|
@@ -7609,7 +7698,7 @@ function useDragMove(options) {
|
|
|
7609
7698
|
}
|
|
7610
7699
|
|
|
7611
7700
|
// src/dialog.tsx
|
|
7612
|
-
var
|
|
7701
|
+
var import_jsx_runtime64 = require("react/jsx-runtime");
|
|
7613
7702
|
var DialogWindowedByDefaultContext = React43.createContext(false);
|
|
7614
7703
|
var Dialog = ({
|
|
7615
7704
|
children,
|
|
@@ -7618,7 +7707,7 @@ var Dialog = ({
|
|
|
7618
7707
|
const isMobile = (0, import_media_query.useIsMobile)();
|
|
7619
7708
|
const desktopLook = useLook() === "desktop";
|
|
7620
7709
|
const modal = desktopLook || (props.modal ?? isMobile);
|
|
7621
|
-
return /* @__PURE__ */ (0,
|
|
7710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogWindowedByDefaultContext.Provider, { value: !desktopLook && props.modal === void 0, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(RadixDialogModalProvider, { modal, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogPrimitive3.Root, { ...props, modal, children }) }) });
|
|
7622
7711
|
};
|
|
7623
7712
|
Dialog.displayName = "Dialog";
|
|
7624
7713
|
var DialogPortal = ({
|
|
@@ -7626,13 +7715,13 @@ var DialogPortal = ({
|
|
|
7626
7715
|
...props
|
|
7627
7716
|
}) => {
|
|
7628
7717
|
const resolved = usePortalContainer(container);
|
|
7629
|
-
return /* @__PURE__ */ (0,
|
|
7718
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogPrimitive3.Portal, { container: resolved ?? null, ...props });
|
|
7630
7719
|
};
|
|
7631
7720
|
DialogPortal.displayName = "DialogPortal";
|
|
7632
7721
|
var CONTEXT_SLOT4 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.dialog-container-context");
|
|
7633
7722
|
var contextRegistry3 = globalThis;
|
|
7634
7723
|
var DialogContainerContext = contextRegistry3[CONTEXT_SLOT4] ??= React43.createContext(null);
|
|
7635
|
-
var DialogOverlay = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
7724
|
+
var DialogOverlay = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7636
7725
|
DialogPrimitive3.Overlay,
|
|
7637
7726
|
{
|
|
7638
7727
|
ref,
|
|
@@ -7651,7 +7740,7 @@ DialogOverlay.displayName = DialogPrimitive3.Overlay.displayName;
|
|
|
7651
7740
|
var DialogContentPrimitive = React43.forwardRef(({ onInteractOutside, onCloseAutoFocus, ...props }, ref) => {
|
|
7652
7741
|
const isModal = useRadixDialogModal();
|
|
7653
7742
|
useModalLayer(isModal);
|
|
7654
|
-
return /* @__PURE__ */ (0,
|
|
7743
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7655
7744
|
DialogPrimitive3.Content,
|
|
7656
7745
|
{
|
|
7657
7746
|
...props,
|
|
@@ -7749,9 +7838,9 @@ var DialogContent = React43.forwardRef(
|
|
|
7749
7838
|
const closeSlot = useCloseSlot(showCloseButton && !desktopLook);
|
|
7750
7839
|
const hasTitle = (0, import_react_tree3.treeContainsComponent)(children, DialogTitle) || (0, import_react_tree3.treeContainsComponent)(children, DialogPrimitive3.Title);
|
|
7751
7840
|
const hasDescription = (0, import_react_tree3.treeContainsComponent)(children, DialogDescription) || (0, import_react_tree3.treeContainsComponent)(children, DialogPrimitive3.Description);
|
|
7752
|
-
return /* @__PURE__ */ (0,
|
|
7753
|
-
isModal ? /* @__PURE__ */ (0,
|
|
7754
|
-
/* @__PURE__ */ (0,
|
|
7841
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(DialogPortal, { container, children: [
|
|
7842
|
+
isModal ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogOverlay, {}) : null,
|
|
7843
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
|
|
7755
7844
|
DialogContentPrimitive,
|
|
7756
7845
|
{
|
|
7757
7846
|
ref: mergedRef,
|
|
@@ -7802,9 +7891,9 @@ var DialogContent = React43.forwardRef(
|
|
|
7802
7891
|
...hasDescription ? {} : { "aria-describedby": void 0 },
|
|
7803
7892
|
...props,
|
|
7804
7893
|
children: [
|
|
7805
|
-
hasTitle ? null : /* @__PURE__ */ (0,
|
|
7806
|
-
closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0,
|
|
7807
|
-
/* @__PURE__ */ (0,
|
|
7894
|
+
hasTitle ? null : /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(VisuallyHidden2.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogPrimitive3.Title, { children: "Dialog" }) }),
|
|
7895
|
+
closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CloseRow, {}) : null,
|
|
7896
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CloseSlotProvider, { value: closeSlot.slot, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogContainerContext.Provider, { value: containerEl, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogWindowHandleContext.Provider, { value: handle, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7808
7897
|
PortalContainerProvider,
|
|
7809
7898
|
{
|
|
7810
7899
|
container: containerEl ?? injectedContainer ?? null,
|
|
@@ -7823,7 +7912,7 @@ var DialogHeader = ({
|
|
|
7823
7912
|
...props
|
|
7824
7913
|
}) => {
|
|
7825
7914
|
const handle = React43.useContext(DialogWindowHandleContext);
|
|
7826
|
-
return /* @__PURE__ */ (0,
|
|
7915
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7827
7916
|
HeaderWithClose,
|
|
7828
7917
|
{
|
|
7829
7918
|
slotName: "dialog-header",
|
|
@@ -7843,7 +7932,7 @@ DialogHeader.displayName = "DialogHeader";
|
|
|
7843
7932
|
var DialogFooter = ({
|
|
7844
7933
|
className,
|
|
7845
7934
|
...props
|
|
7846
|
-
}) => /* @__PURE__ */ (0,
|
|
7935
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7847
7936
|
"div",
|
|
7848
7937
|
{
|
|
7849
7938
|
"data-slot": "dialog-footer",
|
|
@@ -7877,7 +7966,7 @@ var DialogFooter = ({
|
|
|
7877
7966
|
}
|
|
7878
7967
|
);
|
|
7879
7968
|
DialogFooter.displayName = "DialogFooter";
|
|
7880
|
-
var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
7969
|
+
var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7881
7970
|
DialogPrimitive3.Title,
|
|
7882
7971
|
{
|
|
7883
7972
|
ref,
|
|
@@ -7887,7 +7976,7 @@ var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
7887
7976
|
}
|
|
7888
7977
|
));
|
|
7889
7978
|
DialogTitle.displayName = DialogPrimitive3.Title.displayName;
|
|
7890
|
-
var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
7979
|
+
var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7891
7980
|
DialogPrimitive3.Description,
|
|
7892
7981
|
{
|
|
7893
7982
|
ref,
|
|
@@ -7899,7 +7988,7 @@ var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /*
|
|
|
7899
7988
|
DialogDescription.displayName = DialogPrimitive3.Description.displayName;
|
|
7900
7989
|
|
|
7901
7990
|
// src/icon-button.tsx
|
|
7902
|
-
var
|
|
7991
|
+
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
7903
7992
|
var VARIANT = {
|
|
7904
7993
|
ghost: "quiet",
|
|
7905
7994
|
outline: "outline",
|
|
@@ -7920,25 +8009,25 @@ function IconButton({
|
|
|
7920
8009
|
"aria-label": ariaLabel,
|
|
7921
8010
|
...props
|
|
7922
8011
|
}) {
|
|
7923
|
-
const control = /* @__PURE__ */ (0,
|
|
8012
|
+
const control = /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
7924
8013
|
Button2,
|
|
7925
8014
|
{
|
|
7926
8015
|
variant: VARIANT[variant],
|
|
7927
|
-
icon: spinning ? /* @__PURE__ */ (0,
|
|
8016
|
+
icon: spinning ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon3, { className: MOTION_SPIN }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon3, {}),
|
|
7928
8017
|
...glyphTone ? { glyphTone } : {},
|
|
7929
8018
|
"aria-label": ariaLabel ?? tooltip ?? "Action",
|
|
7930
8019
|
...props
|
|
7931
8020
|
}
|
|
7932
8021
|
);
|
|
7933
8022
|
if (!tooltip) return control;
|
|
7934
|
-
return /* @__PURE__ */ (0,
|
|
7935
|
-
/* @__PURE__ */ (0,
|
|
7936
|
-
/* @__PURE__ */ (0,
|
|
8023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Tooltip, { children: [
|
|
8024
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(TooltipTrigger, { asChild: true, children: control }),
|
|
8025
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(TooltipContent, { side: tooltipSide2, align: tooltipAlign, className: "z-[9999]", sideOffset: tooltipOffset, children: tooltip })
|
|
7937
8026
|
] });
|
|
7938
8027
|
}
|
|
7939
8028
|
|
|
7940
8029
|
// src/controls/advanced-collapsible.tsx
|
|
7941
|
-
var
|
|
8030
|
+
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
7942
8031
|
function AdvancedCollapsible({
|
|
7943
8032
|
icon,
|
|
7944
8033
|
title,
|
|
@@ -7978,29 +8067,29 @@ function AdvancedCollapsible({
|
|
|
7978
8067
|
if (!landed) void (0, import_clipboard_fallback_opener3.openClipboardFallback)(text);
|
|
7979
8068
|
else onCopy?.();
|
|
7980
8069
|
};
|
|
7981
|
-
const actions = /* @__PURE__ */ (0,
|
|
7982
|
-
onSave && /* @__PURE__ */ (0,
|
|
8070
|
+
const actions = /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-center justify-end gap-2", children: [
|
|
8071
|
+
onSave && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
7983
8072
|
ActionFeedbackButton,
|
|
7984
8073
|
{
|
|
7985
|
-
icon: /* @__PURE__ */ (0,
|
|
8074
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SaveIcon, {}),
|
|
7986
8075
|
glyphTone: "info",
|
|
7987
8076
|
tooltip: saveTooltip,
|
|
7988
8077
|
successTooltip: "Saved!",
|
|
7989
8078
|
onClick: onSave
|
|
7990
8079
|
}
|
|
7991
8080
|
),
|
|
7992
|
-
onReset && /* @__PURE__ */ (0,
|
|
8081
|
+
onReset && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
7993
8082
|
ActionFeedbackButton,
|
|
7994
8083
|
{
|
|
7995
|
-
icon: /* @__PURE__ */ (0,
|
|
8084
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(RefreshCwIcon, {}),
|
|
7996
8085
|
glyphTone: "warning",
|
|
7997
8086
|
tooltip: resetTooltip,
|
|
7998
8087
|
successTooltip: "Reset!",
|
|
7999
8088
|
onClick: onReset
|
|
8000
8089
|
}
|
|
8001
8090
|
),
|
|
8002
|
-
/* @__PURE__ */ (0,
|
|
8003
|
-
/* @__PURE__ */ (0,
|
|
8091
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(IconButton, { icon: CopyIcon, tooltip: copyTooltip, onClick: () => void handleCopy() }),
|
|
8092
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
8004
8093
|
IconButton,
|
|
8005
8094
|
{
|
|
8006
8095
|
icon: isFullScreen ? Minimize2Icon : Maximize2Icon,
|
|
@@ -8011,20 +8100,20 @@ function AdvancedCollapsible({
|
|
|
8011
8100
|
)
|
|
8012
8101
|
] });
|
|
8013
8102
|
const heading = typeof title === "string" ? title : "Content";
|
|
8014
|
-
return /* @__PURE__ */ (0,
|
|
8015
|
-
/* @__PURE__ */ (0,
|
|
8103
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
|
|
8104
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
|
|
8016
8105
|
Collapsible,
|
|
8017
8106
|
{
|
|
8018
8107
|
open: isOpen,
|
|
8019
8108
|
onOpenChange: handleOpenChange,
|
|
8020
8109
|
className: cn("w-full rounded-xl border border-border shadow-sm", className),
|
|
8021
8110
|
children: [
|
|
8022
|
-
/* @__PURE__ */ (0,
|
|
8023
|
-
/* @__PURE__ */ (0,
|
|
8111
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(CollapsibleTrigger2, { className: "relative flex w-full items-center justify-between rounded-t-xl px-4 py-3 font-medium hover:bg-muted", children: [
|
|
8112
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
8024
8113
|
icon,
|
|
8025
|
-
typeof title === "string" ? /* @__PURE__ */ (0,
|
|
8114
|
+
typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { children: title }) : title
|
|
8026
8115
|
] }),
|
|
8027
|
-
/* @__PURE__ */ (0,
|
|
8116
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
|
|
8028
8117
|
ChevronDownIcon,
|
|
8029
8118
|
{
|
|
8030
8119
|
className: cn(
|
|
@@ -8034,27 +8123,27 @@ function AdvancedCollapsible({
|
|
|
8034
8123
|
}
|
|
8035
8124
|
)
|
|
8036
8125
|
] }),
|
|
8037
|
-
/* @__PURE__ */ (0,
|
|
8038
|
-
/* @__PURE__ */ (0,
|
|
8039
|
-
/* @__PURE__ */ (0,
|
|
8040
|
-
/* @__PURE__ */ (0,
|
|
8126
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CollapsibleContent2, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "relative", children: [
|
|
8127
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "absolute left-8 right-8 top-0 h-px bg-border" }),
|
|
8128
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ref: contentRef, className: "p-4", children }),
|
|
8129
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "mb-1 mr-1 mt-2", children: actions })
|
|
8041
8130
|
] }) })
|
|
8042
8131
|
]
|
|
8043
8132
|
}
|
|
8044
8133
|
),
|
|
8045
|
-
/* @__PURE__ */ (0,
|
|
8046
|
-
/* @__PURE__ */ (0,
|
|
8047
|
-
/* @__PURE__ */ (0,
|
|
8048
|
-
fullScreenDescription ? /* @__PURE__ */ (0,
|
|
8134
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Dialog, { open: isFullScreen, onOpenChange: setIsFullScreen, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DialogContent, { size: "full", height: "tall", children: [
|
|
8135
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DialogHeader, { children: [
|
|
8136
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DialogTitle, { children: fullScreenTitle || heading }),
|
|
8137
|
+
fullScreenDescription ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DialogDescription, { children: fullScreenDescription }) : null
|
|
8049
8138
|
] }),
|
|
8050
8139
|
actions,
|
|
8051
|
-
/* @__PURE__ */ (0,
|
|
8140
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ref: fullRef, className: "min-h-0 flex-1 overflow-auto p-4", children })
|
|
8052
8141
|
] }) })
|
|
8053
8142
|
] });
|
|
8054
8143
|
}
|
|
8055
8144
|
|
|
8056
8145
|
// src/controls/empty-state-card.tsx
|
|
8057
|
-
var
|
|
8146
|
+
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
8058
8147
|
var TONE3 = {
|
|
8059
8148
|
primary: { data: "primary", button: "primary" },
|
|
8060
8149
|
success: { data: "success", button: "outline" }
|
|
@@ -8069,12 +8158,12 @@ function EmptyStateCard({
|
|
|
8069
8158
|
tone: tone2 = "primary"
|
|
8070
8159
|
}) {
|
|
8071
8160
|
const t = TONE3[tone2];
|
|
8072
|
-
return /* @__PURE__ */ (0,
|
|
8073
|
-
/* @__PURE__ */ (0,
|
|
8074
|
-
/* @__PURE__ */ (0,
|
|
8075
|
-
/* @__PURE__ */ (0,
|
|
8076
|
-
buttonText && /* @__PURE__ */ (0,
|
|
8077
|
-
/* @__PURE__ */ (0,
|
|
8161
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { "data-tone": t.data, className: "matrx-hue-card flex flex-col items-center justify-center px-6 py-12 text-center", children: [
|
|
8162
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-icon mb-6 rounded-full p-6", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon3, { className: "h-12 w-12", strokeWidth: 1.5 }) }),
|
|
8163
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: cn("mb-3 text-xl font-semibold", tone2 === "success" ? "text-success-ink" : "text-foreground"), children: title }),
|
|
8164
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "mb-8 max-w-md text-muted-foreground", children: description }),
|
|
8165
|
+
buttonText && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
|
|
8166
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Button2, { variant: t.button, ...tone2 === "success" ? { tone: "success" } : {}, ...onButtonClick ? { onClick: onButtonClick } : {}, children: buttonText }),
|
|
8078
8167
|
secondaryButton
|
|
8079
8168
|
] })
|
|
8080
8169
|
] });
|
|
@@ -8082,7 +8171,7 @@ function EmptyStateCard({
|
|
|
8082
8171
|
|
|
8083
8172
|
// src/controls/hue-cards.tsx
|
|
8084
8173
|
var React45 = __toESM(require("react"), 1);
|
|
8085
|
-
var
|
|
8174
|
+
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
8086
8175
|
var HUE_TONE = {
|
|
8087
8176
|
indigo: "indigo",
|
|
8088
8177
|
emerald: "emerald",
|
|
@@ -8116,7 +8205,7 @@ function Destination({
|
|
|
8116
8205
|
children
|
|
8117
8206
|
}) {
|
|
8118
8207
|
if (path) {
|
|
8119
|
-
return /* @__PURE__ */ (0,
|
|
8208
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
8120
8209
|
HostLink,
|
|
8121
8210
|
{
|
|
8122
8211
|
href: path,
|
|
@@ -8127,7 +8216,7 @@ function Destination({
|
|
|
8127
8216
|
}
|
|
8128
8217
|
);
|
|
8129
8218
|
}
|
|
8130
|
-
return /* @__PURE__ */ (0,
|
|
8219
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { ...className ? { className } : {}, ...onClick ? { onClick } : {}, children });
|
|
8131
8220
|
}
|
|
8132
8221
|
var SIZE_PADDING = {
|
|
8133
8222
|
xs: "p-3",
|
|
@@ -8150,19 +8239,19 @@ function HueCard({
|
|
|
8150
8239
|
external = false
|
|
8151
8240
|
}) {
|
|
8152
8241
|
if (compact) {
|
|
8153
|
-
return /* @__PURE__ */ (0,
|
|
8242
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
|
|
8154
8243
|
"div",
|
|
8155
8244
|
{
|
|
8156
8245
|
"data-tone": tone(color),
|
|
8157
8246
|
className: cn("matrx-hue-card flex cursor-pointer select-none flex-col items-center gap-1.5", className),
|
|
8158
8247
|
children: [
|
|
8159
|
-
/* @__PURE__ */ (0,
|
|
8160
|
-
/* @__PURE__ */ (0,
|
|
8248
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "matrx-hue-squircle flex aspect-square w-full max-w-[62px] items-center justify-center rounded-[22%] shadow-sm transition-colors", children: sizedIcon(icon, 36) }),
|
|
8249
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "type-meta w-full truncate px-0.5 text-center font-medium leading-tight text-foreground", children: title })
|
|
8161
8250
|
]
|
|
8162
8251
|
}
|
|
8163
8252
|
) });
|
|
8164
8253
|
}
|
|
8165
|
-
return /* @__PURE__ */ (0,
|
|
8254
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
8166
8255
|
"div",
|
|
8167
8256
|
{
|
|
8168
8257
|
"data-tone": tone(color),
|
|
@@ -8171,10 +8260,10 @@ function HueCard({
|
|
|
8171
8260
|
SIZE_PADDING[size],
|
|
8172
8261
|
className
|
|
8173
8262
|
),
|
|
8174
|
-
children: /* @__PURE__ */ (0,
|
|
8175
|
-
/* @__PURE__ */ (0,
|
|
8176
|
-
/* @__PURE__ */ (0,
|
|
8177
|
-
description && /* @__PURE__ */ (0,
|
|
8263
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex flex-col items-center space-y-3 text-center", children: [
|
|
8264
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "matrx-hue-icon rounded-full p-3", children: sizedIcon(icon, 28) }),
|
|
8265
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "text-lg font-semibold", children: title }),
|
|
8266
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
|
|
8178
8267
|
descriptionNode && !description && descriptionNode
|
|
8179
8268
|
] })
|
|
8180
8269
|
}
|
|
@@ -8201,12 +8290,12 @@ function HueGrid({
|
|
|
8201
8290
|
compact = false
|
|
8202
8291
|
}) {
|
|
8203
8292
|
const colsClass = compact ? "grid-cols-4" : GRID_COLUMNS[Math.min(6, Math.max(1, columns))];
|
|
8204
|
-
return /* @__PURE__ */ (0,
|
|
8205
|
-
title && /* @__PURE__ */ (0,
|
|
8206
|
-
description && /* @__PURE__ */ (0,
|
|
8207
|
-
/* @__PURE__ */ (0,
|
|
8208
|
-
items.map((item, index) => /* @__PURE__ */ (0,
|
|
8209
|
-
showAddButton && /* @__PURE__ */ (0,
|
|
8293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className, children: [
|
|
8294
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
|
|
8295
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
|
|
8296
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cn("grid", compact ? "gap-2" : "gap-4", colsClass), children: [
|
|
8297
|
+
items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(HueCard, { ...item, compact, className: cn(cardClassName, item.className) }, `card-${index}`)),
|
|
8298
|
+
showAddButton && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
|
|
8210
8299
|
"button",
|
|
8211
8300
|
{
|
|
8212
8301
|
type: "button",
|
|
@@ -8216,8 +8305,8 @@ function HueGrid({
|
|
|
8216
8305
|
cardClassName
|
|
8217
8306
|
),
|
|
8218
8307
|
children: [
|
|
8219
|
-
/* @__PURE__ */ (0,
|
|
8220
|
-
/* @__PURE__ */ (0,
|
|
8308
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "rounded-full bg-muted p-3 text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlusIcon, { className: "h-7 w-7" }) }),
|
|
8309
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-lg font-semibold", children: addButtonText })
|
|
8221
8310
|
]
|
|
8222
8311
|
}
|
|
8223
8312
|
)
|
|
@@ -8232,12 +8321,12 @@ function HueRow({
|
|
|
8232
8321
|
color,
|
|
8233
8322
|
path,
|
|
8234
8323
|
className,
|
|
8235
|
-
rightIcon = /* @__PURE__ */ (0,
|
|
8324
|
+
rightIcon = /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" }),
|
|
8236
8325
|
onClick,
|
|
8237
8326
|
showBorder = true,
|
|
8238
8327
|
isLast = false
|
|
8239
8328
|
}) {
|
|
8240
|
-
return /* @__PURE__ */ (0,
|
|
8329
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
|
|
8241
8330
|
"div",
|
|
8242
8331
|
{
|
|
8243
8332
|
"data-tone": tone(color),
|
|
@@ -8247,11 +8336,11 @@ function HueRow({
|
|
|
8247
8336
|
className
|
|
8248
8337
|
),
|
|
8249
8338
|
children: [
|
|
8250
|
-
/* @__PURE__ */ (0,
|
|
8251
|
-
/* @__PURE__ */ (0,
|
|
8252
|
-
/* @__PURE__ */ (0,
|
|
8253
|
-
/* @__PURE__ */ (0,
|
|
8254
|
-
description && /* @__PURE__ */ (0,
|
|
8339
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center", children: [
|
|
8340
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "matrx-hue-icon mr-4 rounded-lg p-2", children: sizedIcon(icon, 20) }),
|
|
8341
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
|
|
8342
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "font-medium", children: title }),
|
|
8343
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
|
|
8255
8344
|
descriptionNode && !description && descriptionNode
|
|
8256
8345
|
] })
|
|
8257
8346
|
] }),
|
|
@@ -8269,7 +8358,7 @@ function HueList({
|
|
|
8269
8358
|
showBorders = true,
|
|
8270
8359
|
showContainer = true
|
|
8271
8360
|
}) {
|
|
8272
|
-
const rows = items.map((item, index) => /* @__PURE__ */ (0,
|
|
8361
|
+
const rows = items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
|
|
8273
8362
|
HueRow,
|
|
8274
8363
|
{
|
|
8275
8364
|
...item,
|
|
@@ -8279,14 +8368,14 @@ function HueList({
|
|
|
8279
8368
|
},
|
|
8280
8369
|
`row-${index}`
|
|
8281
8370
|
));
|
|
8282
|
-
return /* @__PURE__ */ (0,
|
|
8283
|
-
title && /* @__PURE__ */ (0,
|
|
8284
|
-
description && /* @__PURE__ */ (0,
|
|
8285
|
-
showContainer ? /* @__PURE__ */ (0,
|
|
8371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className, children: [
|
|
8372
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
|
|
8373
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
|
|
8374
|
+
showContainer ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "rounded-xl bg-card shadow-md", children: rows }) : rows
|
|
8286
8375
|
] });
|
|
8287
8376
|
}
|
|
8288
8377
|
function IosWidget({ title, description, icon, color, path, badge, className, onClick }) {
|
|
8289
|
-
return /* @__PURE__ */ (0,
|
|
8378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, className: "contents", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
|
|
8290
8379
|
"div",
|
|
8291
8380
|
{
|
|
8292
8381
|
"data-tone": tone(color),
|
|
@@ -8295,13 +8384,13 @@ function IosWidget({ title, description, icon, color, path, badge, className, on
|
|
|
8295
8384
|
className
|
|
8296
8385
|
),
|
|
8297
8386
|
children: [
|
|
8298
|
-
/* @__PURE__ */ (0,
|
|
8299
|
-
/* @__PURE__ */ (0,
|
|
8300
|
-
badge && /* @__PURE__ */ (0,
|
|
8387
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-start justify-between", children: [
|
|
8388
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { children: sizedIcon(icon, 32) }),
|
|
8389
|
+
badge && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "type-meta rounded-full bg-black/25 px-2 py-0.5 font-semibold leading-tight", children: badge })
|
|
8301
8390
|
] }),
|
|
8302
|
-
/* @__PURE__ */ (0,
|
|
8303
|
-
/* @__PURE__ */ (0,
|
|
8304
|
-
description && /* @__PURE__ */ (0,
|
|
8391
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
|
|
8392
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-title line-clamp-2 leading-tight", children: title }),
|
|
8393
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-meta mt-0.5 line-clamp-2 leading-tight", children: description })
|
|
8305
8394
|
] })
|
|
8306
8395
|
]
|
|
8307
8396
|
}
|
|
@@ -8312,21 +8401,21 @@ function TileCard({ icon, title, description, onClick, href, className }) {
|
|
|
8312
8401
|
"flex h-64 cursor-pointer flex-col items-center justify-center space-y-6 rounded-xl border-2 border-border bg-muted p-4 text-xl transition-colors hover:border-primary hover:bg-accent",
|
|
8313
8402
|
className
|
|
8314
8403
|
);
|
|
8315
|
-
const content = /* @__PURE__ */ (0,
|
|
8316
|
-
icon && /* @__PURE__ */ (0,
|
|
8317
|
-
title && /* @__PURE__ */ (0,
|
|
8318
|
-
description && /* @__PURE__ */ (0,
|
|
8404
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
|
|
8405
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "h-12 w-12 text-primary-ink", children: icon }),
|
|
8406
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "font-medium text-primary-ink", children: title }),
|
|
8407
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-secondary mt-1 text-center text-muted-foreground", children: description })
|
|
8319
8408
|
] });
|
|
8320
|
-
return href ? /* @__PURE__ */ (0,
|
|
8409
|
+
return href ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(HostLink, { href, className: face, children: content }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { onClick, className: face, children: content });
|
|
8321
8410
|
}
|
|
8322
8411
|
var TILE_COLUMNS = { 1: "md:grid-cols-1", 2: "md:grid-cols-2", 3: "md:grid-cols-3", 4: "md:grid-cols-4" };
|
|
8323
8412
|
function TileCardGrid({ title, description, cards, columns = 2, className }) {
|
|
8324
|
-
return /* @__PURE__ */ (0,
|
|
8325
|
-
(title || description) && /* @__PURE__ */ (0,
|
|
8326
|
-
title && /* @__PURE__ */ (0,
|
|
8327
|
-
description && /* @__PURE__ */ (0,
|
|
8413
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cn("w-full", className), children: [
|
|
8414
|
+
(title || description) && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "pb-8 text-center", children: [
|
|
8415
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "text-2xl font-bold text-foreground md:text-3xl", children: title }),
|
|
8416
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "mt-2 text-muted-foreground", children: description })
|
|
8328
8417
|
] }),
|
|
8329
|
-
/* @__PURE__ */ (0,
|
|
8418
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: cn("grid grid-cols-1 gap-6", TILE_COLUMNS[columns] ?? TILE_COLUMNS[2]), children: cards.map((card, index) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(TileCard, { ...card }, index)) })
|
|
8330
8419
|
] });
|
|
8331
8420
|
}
|
|
8332
8421
|
//# sourceMappingURL=controls.cjs.map
|