@almadar/ui 5.28.0 → 5.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/core/molecules/index.d.ts +0 -3
- package/dist/components/index.cjs +5 -424
- package/dist/components/index.js +6 -425
- package/package.json +1 -1
- package/dist/components/core/molecules/ArrayEditor.d.ts +0 -15
- package/dist/components/core/molecules/MapEditor.d.ts +0 -16
- package/dist/components/core/molecules/ObjectEditor.d.ts +0 -15
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
export { ErrorBoundary, type ErrorBoundaryProps } from './ErrorBoundary';
|
|
2
|
-
export { ArrayEditor, type ArrayEditorProps } from './ArrayEditor';
|
|
3
|
-
export { ObjectEditor, type ObjectEditorProps } from './ObjectEditor';
|
|
4
|
-
export { MapEditor, type MapEditorProps } from './MapEditor';
|
|
5
2
|
export { JsonTreeEditor, type JsonTreeEditorProps } from './JsonTreeEditor';
|
|
6
3
|
export { FileTree, type FileTreeProps, type FileTreeNode } from './FileTree';
|
|
7
4
|
export { FormField, type FormFieldProps } from './FormField';
|
|
@@ -22224,422 +22224,6 @@ var init_DataList = __esm({
|
|
|
22224
22224
|
DataList.displayName = "DataList";
|
|
22225
22225
|
}
|
|
22226
22226
|
});
|
|
22227
|
-
function isTraitConfigObject(v) {
|
|
22228
|
-
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22229
|
-
}
|
|
22230
|
-
function LeafControl({
|
|
22231
|
-
value,
|
|
22232
|
-
onChange
|
|
22233
|
-
}) {
|
|
22234
|
-
if (typeof value === "boolean") {
|
|
22235
|
-
return /* @__PURE__ */ jsxRuntime.jsx(exports.Switch, { checked: value, onChange: (c) => onChange(c) });
|
|
22236
|
-
}
|
|
22237
|
-
if (typeof value === "number") {
|
|
22238
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(String(value));
|
|
22239
|
-
React74__namespace.default.useEffect(() => setDraft2(String(value)), [value]);
|
|
22240
|
-
const commit2 = () => {
|
|
22241
|
-
const n = draft2.trim() === "" ? 0 : Number(draft2);
|
|
22242
|
-
onChange(Number.isNaN(n) ? 0 : n);
|
|
22243
|
-
};
|
|
22244
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22245
|
-
exports.Input,
|
|
22246
|
-
{
|
|
22247
|
-
inputType: "number",
|
|
22248
|
-
value: draft2,
|
|
22249
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22250
|
-
onBlur: commit2,
|
|
22251
|
-
onKeyDown: (e) => {
|
|
22252
|
-
if (e.key === "Enter") commit2();
|
|
22253
|
-
}
|
|
22254
|
-
}
|
|
22255
|
-
);
|
|
22256
|
-
}
|
|
22257
|
-
if (isTraitConfigObject(value)) {
|
|
22258
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(JSON.stringify(value));
|
|
22259
|
-
React74__namespace.default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22260
|
-
const commit2 = () => {
|
|
22261
|
-
try {
|
|
22262
|
-
const parsed = JSON.parse(draft2);
|
|
22263
|
-
onChange(parsed);
|
|
22264
|
-
} catch {
|
|
22265
|
-
}
|
|
22266
|
-
};
|
|
22267
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22268
|
-
exports.Input,
|
|
22269
|
-
{
|
|
22270
|
-
inputType: "text",
|
|
22271
|
-
value: draft2,
|
|
22272
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22273
|
-
onBlur: commit2,
|
|
22274
|
-
onKeyDown: (e) => {
|
|
22275
|
-
if (e.key === "Enter") commit2();
|
|
22276
|
-
}
|
|
22277
|
-
}
|
|
22278
|
-
);
|
|
22279
|
-
}
|
|
22280
|
-
if (Array.isArray(value)) {
|
|
22281
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(JSON.stringify(value));
|
|
22282
|
-
React74__namespace.default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22283
|
-
const commit2 = () => {
|
|
22284
|
-
try {
|
|
22285
|
-
const parsed = JSON.parse(draft2);
|
|
22286
|
-
onChange(parsed);
|
|
22287
|
-
} catch {
|
|
22288
|
-
}
|
|
22289
|
-
};
|
|
22290
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22291
|
-
exports.Input,
|
|
22292
|
-
{
|
|
22293
|
-
inputType: "text",
|
|
22294
|
-
value: draft2,
|
|
22295
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22296
|
-
onBlur: commit2,
|
|
22297
|
-
onKeyDown: (e) => {
|
|
22298
|
-
if (e.key === "Enter") commit2();
|
|
22299
|
-
}
|
|
22300
|
-
}
|
|
22301
|
-
);
|
|
22302
|
-
}
|
|
22303
|
-
const strVal = value === null ? "" : String(value);
|
|
22304
|
-
const [draft, setDraft] = React74__namespace.default.useState(strVal);
|
|
22305
|
-
React74__namespace.default.useEffect(() => setDraft(value === null ? "" : String(value)), [value]);
|
|
22306
|
-
const commit = () => {
|
|
22307
|
-
onChange(draft);
|
|
22308
|
-
};
|
|
22309
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22310
|
-
exports.Input,
|
|
22311
|
-
{
|
|
22312
|
-
inputType: "text",
|
|
22313
|
-
value: draft,
|
|
22314
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22315
|
-
onBlur: commit,
|
|
22316
|
-
onKeyDown: (e) => {
|
|
22317
|
-
if (e.key === "Enter") commit();
|
|
22318
|
-
}
|
|
22319
|
-
}
|
|
22320
|
-
);
|
|
22321
|
-
}
|
|
22322
|
-
function cloneElement(template) {
|
|
22323
|
-
if (isTraitConfigObject(template)) {
|
|
22324
|
-
const blank = {};
|
|
22325
|
-
for (const k of Object.keys(template)) blank[k] = null;
|
|
22326
|
-
return blank;
|
|
22327
|
-
}
|
|
22328
|
-
if (Array.isArray(template)) return [];
|
|
22329
|
-
if (typeof template === "boolean") return false;
|
|
22330
|
-
if (typeof template === "number") return 0;
|
|
22331
|
-
return "";
|
|
22332
|
-
}
|
|
22333
|
-
exports.ArrayEditor = void 0;
|
|
22334
|
-
var init_ArrayEditor = __esm({
|
|
22335
|
-
"components/core/molecules/ArrayEditor.tsx"() {
|
|
22336
|
-
"use client";
|
|
22337
|
-
init_Stack();
|
|
22338
|
-
init_Button();
|
|
22339
|
-
init_Switch();
|
|
22340
|
-
init_Input();
|
|
22341
|
-
init_cn();
|
|
22342
|
-
exports.ArrayEditor = ({ value, onChange, className }) => {
|
|
22343
|
-
const arr = value;
|
|
22344
|
-
const update = (idx, next) => {
|
|
22345
|
-
const copy = [...arr];
|
|
22346
|
-
copy[idx] = next;
|
|
22347
|
-
onChange(copy);
|
|
22348
|
-
};
|
|
22349
|
-
const remove = (idx) => {
|
|
22350
|
-
onChange(arr.filter((_, i) => i !== idx));
|
|
22351
|
-
};
|
|
22352
|
-
const add = () => {
|
|
22353
|
-
const template = arr.length > 0 ? arr[0] : "";
|
|
22354
|
-
onChange([...arr, cloneElement(template)]);
|
|
22355
|
-
};
|
|
22356
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", className: cn("w-full", className), children: [
|
|
22357
|
-
arr.map((elem, idx) => /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", align: "center", children: [
|
|
22358
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(LeafControl, { value: elem, onChange: (next) => update(idx, next) }) }),
|
|
22359
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22360
|
-
exports.Button,
|
|
22361
|
-
{
|
|
22362
|
-
variant: "ghost",
|
|
22363
|
-
size: "sm",
|
|
22364
|
-
icon: "trash-2",
|
|
22365
|
-
onClick: () => remove(idx),
|
|
22366
|
-
"aria-label": "Remove item"
|
|
22367
|
-
}
|
|
22368
|
-
)
|
|
22369
|
-
] }, idx)),
|
|
22370
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "ghost", size: "sm", icon: "plus", label: "Add item", onClick: add })
|
|
22371
|
-
] });
|
|
22372
|
-
};
|
|
22373
|
-
}
|
|
22374
|
-
});
|
|
22375
|
-
function isTraitConfigObject2(v) {
|
|
22376
|
-
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22377
|
-
}
|
|
22378
|
-
function ScalarControl({
|
|
22379
|
-
fieldKey,
|
|
22380
|
-
value,
|
|
22381
|
-
onFieldChange
|
|
22382
|
-
}) {
|
|
22383
|
-
if (typeof value === "boolean") {
|
|
22384
|
-
return /* @__PURE__ */ jsxRuntime.jsx(exports.Switch, { checked: value, onChange: (c) => onFieldChange(fieldKey, c) });
|
|
22385
|
-
}
|
|
22386
|
-
if (typeof value === "number") {
|
|
22387
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(String(value));
|
|
22388
|
-
React74__namespace.default.useEffect(() => setDraft2(String(value)), [value]);
|
|
22389
|
-
const commit2 = () => {
|
|
22390
|
-
const n = draft2.trim() === "" ? 0 : Number(draft2);
|
|
22391
|
-
onFieldChange(fieldKey, Number.isNaN(n) ? 0 : n);
|
|
22392
|
-
};
|
|
22393
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22394
|
-
exports.Input,
|
|
22395
|
-
{
|
|
22396
|
-
inputType: "number",
|
|
22397
|
-
value: draft2,
|
|
22398
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22399
|
-
onBlur: commit2,
|
|
22400
|
-
onKeyDown: (e) => {
|
|
22401
|
-
if (e.key === "Enter") commit2();
|
|
22402
|
-
}
|
|
22403
|
-
}
|
|
22404
|
-
);
|
|
22405
|
-
}
|
|
22406
|
-
if (isTraitConfigObject2(value)) {
|
|
22407
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(JSON.stringify(value));
|
|
22408
|
-
React74__namespace.default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22409
|
-
const commit2 = () => {
|
|
22410
|
-
try {
|
|
22411
|
-
onFieldChange(fieldKey, JSON.parse(draft2));
|
|
22412
|
-
} catch {
|
|
22413
|
-
}
|
|
22414
|
-
};
|
|
22415
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22416
|
-
exports.Input,
|
|
22417
|
-
{
|
|
22418
|
-
inputType: "text",
|
|
22419
|
-
value: draft2,
|
|
22420
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22421
|
-
onBlur: commit2,
|
|
22422
|
-
onKeyDown: (e) => {
|
|
22423
|
-
if (e.key === "Enter") commit2();
|
|
22424
|
-
}
|
|
22425
|
-
}
|
|
22426
|
-
);
|
|
22427
|
-
}
|
|
22428
|
-
if (Array.isArray(value)) {
|
|
22429
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(JSON.stringify(value));
|
|
22430
|
-
React74__namespace.default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22431
|
-
const commit2 = () => {
|
|
22432
|
-
try {
|
|
22433
|
-
onFieldChange(fieldKey, JSON.parse(draft2));
|
|
22434
|
-
} catch {
|
|
22435
|
-
}
|
|
22436
|
-
};
|
|
22437
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22438
|
-
exports.Input,
|
|
22439
|
-
{
|
|
22440
|
-
inputType: "text",
|
|
22441
|
-
value: draft2,
|
|
22442
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22443
|
-
onBlur: commit2,
|
|
22444
|
-
onKeyDown: (e) => {
|
|
22445
|
-
if (e.key === "Enter") commit2();
|
|
22446
|
-
}
|
|
22447
|
-
}
|
|
22448
|
-
);
|
|
22449
|
-
}
|
|
22450
|
-
const [draft, setDraft] = React74__namespace.default.useState(value === null ? "" : String(value));
|
|
22451
|
-
React74__namespace.default.useEffect(() => setDraft(value === null ? "" : String(value)), [value]);
|
|
22452
|
-
const commit = () => {
|
|
22453
|
-
onFieldChange(fieldKey, draft);
|
|
22454
|
-
};
|
|
22455
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22456
|
-
exports.Input,
|
|
22457
|
-
{
|
|
22458
|
-
inputType: "text",
|
|
22459
|
-
value: draft,
|
|
22460
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22461
|
-
onBlur: commit,
|
|
22462
|
-
onKeyDown: (e) => {
|
|
22463
|
-
if (e.key === "Enter") commit();
|
|
22464
|
-
}
|
|
22465
|
-
}
|
|
22466
|
-
);
|
|
22467
|
-
}
|
|
22468
|
-
exports.ObjectEditor = void 0;
|
|
22469
|
-
var init_ObjectEditor = __esm({
|
|
22470
|
-
"components/core/molecules/ObjectEditor.tsx"() {
|
|
22471
|
-
"use client";
|
|
22472
|
-
init_Stack();
|
|
22473
|
-
init_Typography();
|
|
22474
|
-
init_Switch();
|
|
22475
|
-
init_Input();
|
|
22476
|
-
init_cn();
|
|
22477
|
-
exports.ObjectEditor = ({ value, onChange, className }) => {
|
|
22478
|
-
const entries = Object.entries(value);
|
|
22479
|
-
const handleFieldChange = (k, next) => {
|
|
22480
|
-
onChange({ ...value, [k]: next });
|
|
22481
|
-
};
|
|
22482
|
-
if (entries.length === 0) {
|
|
22483
|
-
return /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", color: "muted", children: "Empty object" });
|
|
22484
|
-
}
|
|
22485
|
-
return /* @__PURE__ */ jsxRuntime.jsx(exports.VStack, { gap: "xs", className: cn("w-full", className), children: entries.map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", children: [
|
|
22486
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-24 shrink-0 truncate", title: k, children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: k }) }),
|
|
22487
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(ScalarControl, { fieldKey: k, value: v, onFieldChange: handleFieldChange }) })
|
|
22488
|
-
] }, k)) });
|
|
22489
|
-
};
|
|
22490
|
-
}
|
|
22491
|
-
});
|
|
22492
|
-
function isTraitConfigObject3(v) {
|
|
22493
|
-
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22494
|
-
}
|
|
22495
|
-
function ValueControl({
|
|
22496
|
-
value,
|
|
22497
|
-
onChange
|
|
22498
|
-
}) {
|
|
22499
|
-
if (typeof value === "boolean") {
|
|
22500
|
-
return /* @__PURE__ */ jsxRuntime.jsx(exports.Switch, { checked: value, onChange: (c) => onChange(c) });
|
|
22501
|
-
}
|
|
22502
|
-
if (typeof value === "number") {
|
|
22503
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(String(value));
|
|
22504
|
-
React74__namespace.default.useEffect(() => setDraft2(String(value)), [value]);
|
|
22505
|
-
const commit2 = () => {
|
|
22506
|
-
const n = draft2.trim() === "" ? 0 : Number(draft2);
|
|
22507
|
-
onChange(Number.isNaN(n) ? 0 : n);
|
|
22508
|
-
};
|
|
22509
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22510
|
-
exports.Input,
|
|
22511
|
-
{
|
|
22512
|
-
inputType: "number",
|
|
22513
|
-
value: draft2,
|
|
22514
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22515
|
-
onBlur: commit2,
|
|
22516
|
-
onKeyDown: (e) => {
|
|
22517
|
-
if (e.key === "Enter") commit2();
|
|
22518
|
-
}
|
|
22519
|
-
}
|
|
22520
|
-
);
|
|
22521
|
-
}
|
|
22522
|
-
if (isTraitConfigObject3(value) || Array.isArray(value)) {
|
|
22523
|
-
const [draft2, setDraft2] = React74__namespace.default.useState(JSON.stringify(value));
|
|
22524
|
-
React74__namespace.default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22525
|
-
const commit2 = () => {
|
|
22526
|
-
try {
|
|
22527
|
-
onChange(JSON.parse(draft2));
|
|
22528
|
-
} catch {
|
|
22529
|
-
}
|
|
22530
|
-
};
|
|
22531
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22532
|
-
exports.Input,
|
|
22533
|
-
{
|
|
22534
|
-
inputType: "text",
|
|
22535
|
-
value: draft2,
|
|
22536
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22537
|
-
onBlur: commit2,
|
|
22538
|
-
onKeyDown: (e) => {
|
|
22539
|
-
if (e.key === "Enter") commit2();
|
|
22540
|
-
}
|
|
22541
|
-
}
|
|
22542
|
-
);
|
|
22543
|
-
}
|
|
22544
|
-
const [draft, setDraft] = React74__namespace.default.useState(value === null ? "" : String(value));
|
|
22545
|
-
React74__namespace.default.useEffect(() => setDraft(value === null ? "" : String(value)), [value]);
|
|
22546
|
-
const commit = () => {
|
|
22547
|
-
onChange(draft);
|
|
22548
|
-
};
|
|
22549
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22550
|
-
exports.Input,
|
|
22551
|
-
{
|
|
22552
|
-
inputType: "text",
|
|
22553
|
-
value: draft,
|
|
22554
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22555
|
-
onBlur: commit,
|
|
22556
|
-
onKeyDown: (e) => {
|
|
22557
|
-
if (e.key === "Enter") commit();
|
|
22558
|
-
}
|
|
22559
|
-
}
|
|
22560
|
-
);
|
|
22561
|
-
}
|
|
22562
|
-
function KeyInput({
|
|
22563
|
-
currentKey,
|
|
22564
|
-
onRename
|
|
22565
|
-
}) {
|
|
22566
|
-
const [draft, setDraft] = React74__namespace.default.useState(currentKey);
|
|
22567
|
-
React74__namespace.default.useEffect(() => setDraft(currentKey), [currentKey]);
|
|
22568
|
-
const commit = () => {
|
|
22569
|
-
const trimmed = draft.trim();
|
|
22570
|
-
if (trimmed !== "" && trimmed !== currentKey) onRename(trimmed);
|
|
22571
|
-
else setDraft(currentKey);
|
|
22572
|
-
};
|
|
22573
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22574
|
-
exports.Input,
|
|
22575
|
-
{
|
|
22576
|
-
inputType: "text",
|
|
22577
|
-
value: draft,
|
|
22578
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22579
|
-
onBlur: commit,
|
|
22580
|
-
onKeyDown: (e) => {
|
|
22581
|
-
if (e.key === "Enter") commit();
|
|
22582
|
-
},
|
|
22583
|
-
className: "w-24 shrink-0 font-mono text-xs",
|
|
22584
|
-
placeholder: "key"
|
|
22585
|
-
}
|
|
22586
|
-
);
|
|
22587
|
-
}
|
|
22588
|
-
exports.MapEditor = void 0;
|
|
22589
|
-
var init_MapEditor = __esm({
|
|
22590
|
-
"components/core/molecules/MapEditor.tsx"() {
|
|
22591
|
-
"use client";
|
|
22592
|
-
init_Stack();
|
|
22593
|
-
init_Button();
|
|
22594
|
-
init_Input();
|
|
22595
|
-
init_Switch();
|
|
22596
|
-
init_cn();
|
|
22597
|
-
exports.MapEditor = ({ value, onChange, className }) => {
|
|
22598
|
-
const entries = Object.entries(value);
|
|
22599
|
-
const updateKey = (oldKey, newKey) => {
|
|
22600
|
-
const next = {};
|
|
22601
|
-
for (const [k, v] of Object.entries(value)) {
|
|
22602
|
-
next[k === oldKey ? newKey : k] = v;
|
|
22603
|
-
}
|
|
22604
|
-
onChange(next);
|
|
22605
|
-
};
|
|
22606
|
-
const updateValue = (k, next) => {
|
|
22607
|
-
onChange({ ...value, [k]: next });
|
|
22608
|
-
};
|
|
22609
|
-
const remove = (k) => {
|
|
22610
|
-
const next = { ...value };
|
|
22611
|
-
delete next[k];
|
|
22612
|
-
onChange(next);
|
|
22613
|
-
};
|
|
22614
|
-
const add = () => {
|
|
22615
|
-
let key = "key";
|
|
22616
|
-
let i = 1;
|
|
22617
|
-
while (key in value) {
|
|
22618
|
-
key = `key${i}`;
|
|
22619
|
-
i++;
|
|
22620
|
-
}
|
|
22621
|
-
onChange({ ...value, [key]: "" });
|
|
22622
|
-
};
|
|
22623
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", className: cn("w-full", className), children: [
|
|
22624
|
-
entries.map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", align: "center", children: [
|
|
22625
|
-
/* @__PURE__ */ jsxRuntime.jsx(KeyInput, { currentKey: k, onRename: (newKey) => updateKey(k, newKey) }),
|
|
22626
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(ValueControl, { value: v, onChange: (next) => updateValue(k, next) }) }),
|
|
22627
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22628
|
-
exports.Button,
|
|
22629
|
-
{
|
|
22630
|
-
variant: "ghost",
|
|
22631
|
-
size: "sm",
|
|
22632
|
-
icon: "trash-2",
|
|
22633
|
-
onClick: () => remove(k),
|
|
22634
|
-
"aria-label": "Remove entry"
|
|
22635
|
-
}
|
|
22636
|
-
)
|
|
22637
|
-
] }, k)),
|
|
22638
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "ghost", size: "sm", icon: "plus", label: "Add entry", onClick: add })
|
|
22639
|
-
] });
|
|
22640
|
-
};
|
|
22641
|
-
}
|
|
22642
|
-
});
|
|
22643
22227
|
function kindOf(v) {
|
|
22644
22228
|
if (v === null) return "null";
|
|
22645
22229
|
if (isArr(v)) return "array";
|
|
@@ -22675,7 +22259,7 @@ function templateFrom(arr) {
|
|
|
22675
22259
|
if (isArr(first)) return [];
|
|
22676
22260
|
return emptyOf(kindOf(first));
|
|
22677
22261
|
}
|
|
22678
|
-
function
|
|
22262
|
+
function ScalarControl({
|
|
22679
22263
|
value,
|
|
22680
22264
|
onChange
|
|
22681
22265
|
}) {
|
|
@@ -22736,7 +22320,7 @@ function ValueNode({
|
|
|
22736
22320
|
if (kind === "object" || kind === "array") {
|
|
22737
22321
|
return /* @__PURE__ */ jsxRuntime.jsx(ContainerNode, { value, onChange, depth });
|
|
22738
22322
|
}
|
|
22739
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22323
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ScalarControl, { value, onChange });
|
|
22740
22324
|
}
|
|
22741
22325
|
function Row({
|
|
22742
22326
|
rowKey,
|
|
@@ -35629,7 +35213,7 @@ function TextLikeControl({
|
|
|
35629
35213
|
}
|
|
35630
35214
|
);
|
|
35631
35215
|
}
|
|
35632
|
-
function
|
|
35216
|
+
function isTraitConfigObject(v) {
|
|
35633
35217
|
return v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
|
|
35634
35218
|
}
|
|
35635
35219
|
function FieldControl({
|
|
@@ -35671,8 +35255,8 @@ function FieldControl({
|
|
|
35671
35255
|
} else if (decl.type.startsWith("[") || Array.isArray(effectiveValue)) {
|
|
35672
35256
|
const arr = Array.isArray(effectiveValue) ? effectiveValue : [];
|
|
35673
35257
|
control = /* @__PURE__ */ jsxRuntime.jsx(exports.JsonTreeEditor, { value: arr, onChange: (next) => onChange(name, next) });
|
|
35674
|
-
} else if (decl.type === "object" || decl.type.startsWith("Map ") || !SCALAR_TYPES.has(decl.type) &&
|
|
35675
|
-
const obj =
|
|
35258
|
+
} else if (decl.type === "object" || decl.type.startsWith("Map ") || !SCALAR_TYPES.has(decl.type) && isTraitConfigObject(effectiveValue)) {
|
|
35259
|
+
const obj = isTraitConfigObject(effectiveValue) ? effectiveValue : {};
|
|
35676
35260
|
control = /* @__PURE__ */ jsxRuntime.jsx(exports.JsonTreeEditor, { value: obj, onChange: (next) => onChange(name, next) });
|
|
35677
35261
|
} else {
|
|
35678
35262
|
control = /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", color: "muted", children: [
|
|
@@ -37596,9 +37180,6 @@ var init_GraphCanvas = __esm({
|
|
|
37596
37180
|
var init_molecules2 = __esm({
|
|
37597
37181
|
"components/core/molecules/index.ts"() {
|
|
37598
37182
|
init_ErrorBoundary();
|
|
37599
|
-
init_ArrayEditor();
|
|
37600
|
-
init_ObjectEditor();
|
|
37601
|
-
init_MapEditor();
|
|
37602
37183
|
init_JsonTreeEditor();
|
|
37603
37184
|
init_FileTree();
|
|
37604
37185
|
init_FormField();
|
package/dist/components/index.js
CHANGED
|
@@ -22176,422 +22176,6 @@ var init_DataList = __esm({
|
|
|
22176
22176
|
DataList.displayName = "DataList";
|
|
22177
22177
|
}
|
|
22178
22178
|
});
|
|
22179
|
-
function isTraitConfigObject(v) {
|
|
22180
|
-
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22181
|
-
}
|
|
22182
|
-
function LeafControl({
|
|
22183
|
-
value,
|
|
22184
|
-
onChange
|
|
22185
|
-
}) {
|
|
22186
|
-
if (typeof value === "boolean") {
|
|
22187
|
-
return /* @__PURE__ */ jsx(Switch, { checked: value, onChange: (c) => onChange(c) });
|
|
22188
|
-
}
|
|
22189
|
-
if (typeof value === "number") {
|
|
22190
|
-
const [draft2, setDraft2] = React74__default.useState(String(value));
|
|
22191
|
-
React74__default.useEffect(() => setDraft2(String(value)), [value]);
|
|
22192
|
-
const commit2 = () => {
|
|
22193
|
-
const n = draft2.trim() === "" ? 0 : Number(draft2);
|
|
22194
|
-
onChange(Number.isNaN(n) ? 0 : n);
|
|
22195
|
-
};
|
|
22196
|
-
return /* @__PURE__ */ jsx(
|
|
22197
|
-
Input,
|
|
22198
|
-
{
|
|
22199
|
-
inputType: "number",
|
|
22200
|
-
value: draft2,
|
|
22201
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22202
|
-
onBlur: commit2,
|
|
22203
|
-
onKeyDown: (e) => {
|
|
22204
|
-
if (e.key === "Enter") commit2();
|
|
22205
|
-
}
|
|
22206
|
-
}
|
|
22207
|
-
);
|
|
22208
|
-
}
|
|
22209
|
-
if (isTraitConfigObject(value)) {
|
|
22210
|
-
const [draft2, setDraft2] = React74__default.useState(JSON.stringify(value));
|
|
22211
|
-
React74__default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22212
|
-
const commit2 = () => {
|
|
22213
|
-
try {
|
|
22214
|
-
const parsed = JSON.parse(draft2);
|
|
22215
|
-
onChange(parsed);
|
|
22216
|
-
} catch {
|
|
22217
|
-
}
|
|
22218
|
-
};
|
|
22219
|
-
return /* @__PURE__ */ jsx(
|
|
22220
|
-
Input,
|
|
22221
|
-
{
|
|
22222
|
-
inputType: "text",
|
|
22223
|
-
value: draft2,
|
|
22224
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22225
|
-
onBlur: commit2,
|
|
22226
|
-
onKeyDown: (e) => {
|
|
22227
|
-
if (e.key === "Enter") commit2();
|
|
22228
|
-
}
|
|
22229
|
-
}
|
|
22230
|
-
);
|
|
22231
|
-
}
|
|
22232
|
-
if (Array.isArray(value)) {
|
|
22233
|
-
const [draft2, setDraft2] = React74__default.useState(JSON.stringify(value));
|
|
22234
|
-
React74__default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22235
|
-
const commit2 = () => {
|
|
22236
|
-
try {
|
|
22237
|
-
const parsed = JSON.parse(draft2);
|
|
22238
|
-
onChange(parsed);
|
|
22239
|
-
} catch {
|
|
22240
|
-
}
|
|
22241
|
-
};
|
|
22242
|
-
return /* @__PURE__ */ jsx(
|
|
22243
|
-
Input,
|
|
22244
|
-
{
|
|
22245
|
-
inputType: "text",
|
|
22246
|
-
value: draft2,
|
|
22247
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22248
|
-
onBlur: commit2,
|
|
22249
|
-
onKeyDown: (e) => {
|
|
22250
|
-
if (e.key === "Enter") commit2();
|
|
22251
|
-
}
|
|
22252
|
-
}
|
|
22253
|
-
);
|
|
22254
|
-
}
|
|
22255
|
-
const strVal = value === null ? "" : String(value);
|
|
22256
|
-
const [draft, setDraft] = React74__default.useState(strVal);
|
|
22257
|
-
React74__default.useEffect(() => setDraft(value === null ? "" : String(value)), [value]);
|
|
22258
|
-
const commit = () => {
|
|
22259
|
-
onChange(draft);
|
|
22260
|
-
};
|
|
22261
|
-
return /* @__PURE__ */ jsx(
|
|
22262
|
-
Input,
|
|
22263
|
-
{
|
|
22264
|
-
inputType: "text",
|
|
22265
|
-
value: draft,
|
|
22266
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22267
|
-
onBlur: commit,
|
|
22268
|
-
onKeyDown: (e) => {
|
|
22269
|
-
if (e.key === "Enter") commit();
|
|
22270
|
-
}
|
|
22271
|
-
}
|
|
22272
|
-
);
|
|
22273
|
-
}
|
|
22274
|
-
function cloneElement(template) {
|
|
22275
|
-
if (isTraitConfigObject(template)) {
|
|
22276
|
-
const blank = {};
|
|
22277
|
-
for (const k of Object.keys(template)) blank[k] = null;
|
|
22278
|
-
return blank;
|
|
22279
|
-
}
|
|
22280
|
-
if (Array.isArray(template)) return [];
|
|
22281
|
-
if (typeof template === "boolean") return false;
|
|
22282
|
-
if (typeof template === "number") return 0;
|
|
22283
|
-
return "";
|
|
22284
|
-
}
|
|
22285
|
-
var ArrayEditor;
|
|
22286
|
-
var init_ArrayEditor = __esm({
|
|
22287
|
-
"components/core/molecules/ArrayEditor.tsx"() {
|
|
22288
|
-
"use client";
|
|
22289
|
-
init_Stack();
|
|
22290
|
-
init_Button();
|
|
22291
|
-
init_Switch();
|
|
22292
|
-
init_Input();
|
|
22293
|
-
init_cn();
|
|
22294
|
-
ArrayEditor = ({ value, onChange, className }) => {
|
|
22295
|
-
const arr = value;
|
|
22296
|
-
const update = (idx, next) => {
|
|
22297
|
-
const copy = [...arr];
|
|
22298
|
-
copy[idx] = next;
|
|
22299
|
-
onChange(copy);
|
|
22300
|
-
};
|
|
22301
|
-
const remove = (idx) => {
|
|
22302
|
-
onChange(arr.filter((_, i) => i !== idx));
|
|
22303
|
-
};
|
|
22304
|
-
const add = () => {
|
|
22305
|
-
const template = arr.length > 0 ? arr[0] : "";
|
|
22306
|
-
onChange([...arr, cloneElement(template)]);
|
|
22307
|
-
};
|
|
22308
|
-
return /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
|
|
22309
|
-
arr.map((elem, idx) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
22310
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(LeafControl, { value: elem, onChange: (next) => update(idx, next) }) }),
|
|
22311
|
-
/* @__PURE__ */ jsx(
|
|
22312
|
-
Button,
|
|
22313
|
-
{
|
|
22314
|
-
variant: "ghost",
|
|
22315
|
-
size: "sm",
|
|
22316
|
-
icon: "trash-2",
|
|
22317
|
-
onClick: () => remove(idx),
|
|
22318
|
-
"aria-label": "Remove item"
|
|
22319
|
-
}
|
|
22320
|
-
)
|
|
22321
|
-
] }, idx)),
|
|
22322
|
-
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", icon: "plus", label: "Add item", onClick: add })
|
|
22323
|
-
] });
|
|
22324
|
-
};
|
|
22325
|
-
}
|
|
22326
|
-
});
|
|
22327
|
-
function isTraitConfigObject2(v) {
|
|
22328
|
-
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22329
|
-
}
|
|
22330
|
-
function ScalarControl({
|
|
22331
|
-
fieldKey,
|
|
22332
|
-
value,
|
|
22333
|
-
onFieldChange
|
|
22334
|
-
}) {
|
|
22335
|
-
if (typeof value === "boolean") {
|
|
22336
|
-
return /* @__PURE__ */ jsx(Switch, { checked: value, onChange: (c) => onFieldChange(fieldKey, c) });
|
|
22337
|
-
}
|
|
22338
|
-
if (typeof value === "number") {
|
|
22339
|
-
const [draft2, setDraft2] = React74__default.useState(String(value));
|
|
22340
|
-
React74__default.useEffect(() => setDraft2(String(value)), [value]);
|
|
22341
|
-
const commit2 = () => {
|
|
22342
|
-
const n = draft2.trim() === "" ? 0 : Number(draft2);
|
|
22343
|
-
onFieldChange(fieldKey, Number.isNaN(n) ? 0 : n);
|
|
22344
|
-
};
|
|
22345
|
-
return /* @__PURE__ */ jsx(
|
|
22346
|
-
Input,
|
|
22347
|
-
{
|
|
22348
|
-
inputType: "number",
|
|
22349
|
-
value: draft2,
|
|
22350
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22351
|
-
onBlur: commit2,
|
|
22352
|
-
onKeyDown: (e) => {
|
|
22353
|
-
if (e.key === "Enter") commit2();
|
|
22354
|
-
}
|
|
22355
|
-
}
|
|
22356
|
-
);
|
|
22357
|
-
}
|
|
22358
|
-
if (isTraitConfigObject2(value)) {
|
|
22359
|
-
const [draft2, setDraft2] = React74__default.useState(JSON.stringify(value));
|
|
22360
|
-
React74__default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22361
|
-
const commit2 = () => {
|
|
22362
|
-
try {
|
|
22363
|
-
onFieldChange(fieldKey, JSON.parse(draft2));
|
|
22364
|
-
} catch {
|
|
22365
|
-
}
|
|
22366
|
-
};
|
|
22367
|
-
return /* @__PURE__ */ jsx(
|
|
22368
|
-
Input,
|
|
22369
|
-
{
|
|
22370
|
-
inputType: "text",
|
|
22371
|
-
value: draft2,
|
|
22372
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22373
|
-
onBlur: commit2,
|
|
22374
|
-
onKeyDown: (e) => {
|
|
22375
|
-
if (e.key === "Enter") commit2();
|
|
22376
|
-
}
|
|
22377
|
-
}
|
|
22378
|
-
);
|
|
22379
|
-
}
|
|
22380
|
-
if (Array.isArray(value)) {
|
|
22381
|
-
const [draft2, setDraft2] = React74__default.useState(JSON.stringify(value));
|
|
22382
|
-
React74__default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22383
|
-
const commit2 = () => {
|
|
22384
|
-
try {
|
|
22385
|
-
onFieldChange(fieldKey, JSON.parse(draft2));
|
|
22386
|
-
} catch {
|
|
22387
|
-
}
|
|
22388
|
-
};
|
|
22389
|
-
return /* @__PURE__ */ jsx(
|
|
22390
|
-
Input,
|
|
22391
|
-
{
|
|
22392
|
-
inputType: "text",
|
|
22393
|
-
value: draft2,
|
|
22394
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22395
|
-
onBlur: commit2,
|
|
22396
|
-
onKeyDown: (e) => {
|
|
22397
|
-
if (e.key === "Enter") commit2();
|
|
22398
|
-
}
|
|
22399
|
-
}
|
|
22400
|
-
);
|
|
22401
|
-
}
|
|
22402
|
-
const [draft, setDraft] = React74__default.useState(value === null ? "" : String(value));
|
|
22403
|
-
React74__default.useEffect(() => setDraft(value === null ? "" : String(value)), [value]);
|
|
22404
|
-
const commit = () => {
|
|
22405
|
-
onFieldChange(fieldKey, draft);
|
|
22406
|
-
};
|
|
22407
|
-
return /* @__PURE__ */ jsx(
|
|
22408
|
-
Input,
|
|
22409
|
-
{
|
|
22410
|
-
inputType: "text",
|
|
22411
|
-
value: draft,
|
|
22412
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22413
|
-
onBlur: commit,
|
|
22414
|
-
onKeyDown: (e) => {
|
|
22415
|
-
if (e.key === "Enter") commit();
|
|
22416
|
-
}
|
|
22417
|
-
}
|
|
22418
|
-
);
|
|
22419
|
-
}
|
|
22420
|
-
var ObjectEditor;
|
|
22421
|
-
var init_ObjectEditor = __esm({
|
|
22422
|
-
"components/core/molecules/ObjectEditor.tsx"() {
|
|
22423
|
-
"use client";
|
|
22424
|
-
init_Stack();
|
|
22425
|
-
init_Typography();
|
|
22426
|
-
init_Switch();
|
|
22427
|
-
init_Input();
|
|
22428
|
-
init_cn();
|
|
22429
|
-
ObjectEditor = ({ value, onChange, className }) => {
|
|
22430
|
-
const entries = Object.entries(value);
|
|
22431
|
-
const handleFieldChange = (k, next) => {
|
|
22432
|
-
onChange({ ...value, [k]: next });
|
|
22433
|
-
};
|
|
22434
|
-
if (entries.length === 0) {
|
|
22435
|
-
return /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: "Empty object" });
|
|
22436
|
-
}
|
|
22437
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "xs", className: cn("w-full", className), children: entries.map(([k, v]) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
22438
|
-
/* @__PURE__ */ jsx("span", { className: "w-24 shrink-0 truncate", title: k, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: k }) }),
|
|
22439
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(ScalarControl, { fieldKey: k, value: v, onFieldChange: handleFieldChange }) })
|
|
22440
|
-
] }, k)) });
|
|
22441
|
-
};
|
|
22442
|
-
}
|
|
22443
|
-
});
|
|
22444
|
-
function isTraitConfigObject3(v) {
|
|
22445
|
-
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
22446
|
-
}
|
|
22447
|
-
function ValueControl({
|
|
22448
|
-
value,
|
|
22449
|
-
onChange
|
|
22450
|
-
}) {
|
|
22451
|
-
if (typeof value === "boolean") {
|
|
22452
|
-
return /* @__PURE__ */ jsx(Switch, { checked: value, onChange: (c) => onChange(c) });
|
|
22453
|
-
}
|
|
22454
|
-
if (typeof value === "number") {
|
|
22455
|
-
const [draft2, setDraft2] = React74__default.useState(String(value));
|
|
22456
|
-
React74__default.useEffect(() => setDraft2(String(value)), [value]);
|
|
22457
|
-
const commit2 = () => {
|
|
22458
|
-
const n = draft2.trim() === "" ? 0 : Number(draft2);
|
|
22459
|
-
onChange(Number.isNaN(n) ? 0 : n);
|
|
22460
|
-
};
|
|
22461
|
-
return /* @__PURE__ */ jsx(
|
|
22462
|
-
Input,
|
|
22463
|
-
{
|
|
22464
|
-
inputType: "number",
|
|
22465
|
-
value: draft2,
|
|
22466
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22467
|
-
onBlur: commit2,
|
|
22468
|
-
onKeyDown: (e) => {
|
|
22469
|
-
if (e.key === "Enter") commit2();
|
|
22470
|
-
}
|
|
22471
|
-
}
|
|
22472
|
-
);
|
|
22473
|
-
}
|
|
22474
|
-
if (isTraitConfigObject3(value) || Array.isArray(value)) {
|
|
22475
|
-
const [draft2, setDraft2] = React74__default.useState(JSON.stringify(value));
|
|
22476
|
-
React74__default.useEffect(() => setDraft2(JSON.stringify(value)), [value]);
|
|
22477
|
-
const commit2 = () => {
|
|
22478
|
-
try {
|
|
22479
|
-
onChange(JSON.parse(draft2));
|
|
22480
|
-
} catch {
|
|
22481
|
-
}
|
|
22482
|
-
};
|
|
22483
|
-
return /* @__PURE__ */ jsx(
|
|
22484
|
-
Input,
|
|
22485
|
-
{
|
|
22486
|
-
inputType: "text",
|
|
22487
|
-
value: draft2,
|
|
22488
|
-
onChange: (e) => setDraft2(e.target.value),
|
|
22489
|
-
onBlur: commit2,
|
|
22490
|
-
onKeyDown: (e) => {
|
|
22491
|
-
if (e.key === "Enter") commit2();
|
|
22492
|
-
}
|
|
22493
|
-
}
|
|
22494
|
-
);
|
|
22495
|
-
}
|
|
22496
|
-
const [draft, setDraft] = React74__default.useState(value === null ? "" : String(value));
|
|
22497
|
-
React74__default.useEffect(() => setDraft(value === null ? "" : String(value)), [value]);
|
|
22498
|
-
const commit = () => {
|
|
22499
|
-
onChange(draft);
|
|
22500
|
-
};
|
|
22501
|
-
return /* @__PURE__ */ jsx(
|
|
22502
|
-
Input,
|
|
22503
|
-
{
|
|
22504
|
-
inputType: "text",
|
|
22505
|
-
value: draft,
|
|
22506
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22507
|
-
onBlur: commit,
|
|
22508
|
-
onKeyDown: (e) => {
|
|
22509
|
-
if (e.key === "Enter") commit();
|
|
22510
|
-
}
|
|
22511
|
-
}
|
|
22512
|
-
);
|
|
22513
|
-
}
|
|
22514
|
-
function KeyInput({
|
|
22515
|
-
currentKey,
|
|
22516
|
-
onRename
|
|
22517
|
-
}) {
|
|
22518
|
-
const [draft, setDraft] = React74__default.useState(currentKey);
|
|
22519
|
-
React74__default.useEffect(() => setDraft(currentKey), [currentKey]);
|
|
22520
|
-
const commit = () => {
|
|
22521
|
-
const trimmed = draft.trim();
|
|
22522
|
-
if (trimmed !== "" && trimmed !== currentKey) onRename(trimmed);
|
|
22523
|
-
else setDraft(currentKey);
|
|
22524
|
-
};
|
|
22525
|
-
return /* @__PURE__ */ jsx(
|
|
22526
|
-
Input,
|
|
22527
|
-
{
|
|
22528
|
-
inputType: "text",
|
|
22529
|
-
value: draft,
|
|
22530
|
-
onChange: (e) => setDraft(e.target.value),
|
|
22531
|
-
onBlur: commit,
|
|
22532
|
-
onKeyDown: (e) => {
|
|
22533
|
-
if (e.key === "Enter") commit();
|
|
22534
|
-
},
|
|
22535
|
-
className: "w-24 shrink-0 font-mono text-xs",
|
|
22536
|
-
placeholder: "key"
|
|
22537
|
-
}
|
|
22538
|
-
);
|
|
22539
|
-
}
|
|
22540
|
-
var MapEditor;
|
|
22541
|
-
var init_MapEditor = __esm({
|
|
22542
|
-
"components/core/molecules/MapEditor.tsx"() {
|
|
22543
|
-
"use client";
|
|
22544
|
-
init_Stack();
|
|
22545
|
-
init_Button();
|
|
22546
|
-
init_Input();
|
|
22547
|
-
init_Switch();
|
|
22548
|
-
init_cn();
|
|
22549
|
-
MapEditor = ({ value, onChange, className }) => {
|
|
22550
|
-
const entries = Object.entries(value);
|
|
22551
|
-
const updateKey = (oldKey, newKey) => {
|
|
22552
|
-
const next = {};
|
|
22553
|
-
for (const [k, v] of Object.entries(value)) {
|
|
22554
|
-
next[k === oldKey ? newKey : k] = v;
|
|
22555
|
-
}
|
|
22556
|
-
onChange(next);
|
|
22557
|
-
};
|
|
22558
|
-
const updateValue = (k, next) => {
|
|
22559
|
-
onChange({ ...value, [k]: next });
|
|
22560
|
-
};
|
|
22561
|
-
const remove = (k) => {
|
|
22562
|
-
const next = { ...value };
|
|
22563
|
-
delete next[k];
|
|
22564
|
-
onChange(next);
|
|
22565
|
-
};
|
|
22566
|
-
const add = () => {
|
|
22567
|
-
let key = "key";
|
|
22568
|
-
let i = 1;
|
|
22569
|
-
while (key in value) {
|
|
22570
|
-
key = `key${i}`;
|
|
22571
|
-
i++;
|
|
22572
|
-
}
|
|
22573
|
-
onChange({ ...value, [key]: "" });
|
|
22574
|
-
};
|
|
22575
|
-
return /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
|
|
22576
|
-
entries.map(([k, v]) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
22577
|
-
/* @__PURE__ */ jsx(KeyInput, { currentKey: k, onRename: (newKey) => updateKey(k, newKey) }),
|
|
22578
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(ValueControl, { value: v, onChange: (next) => updateValue(k, next) }) }),
|
|
22579
|
-
/* @__PURE__ */ jsx(
|
|
22580
|
-
Button,
|
|
22581
|
-
{
|
|
22582
|
-
variant: "ghost",
|
|
22583
|
-
size: "sm",
|
|
22584
|
-
icon: "trash-2",
|
|
22585
|
-
onClick: () => remove(k),
|
|
22586
|
-
"aria-label": "Remove entry"
|
|
22587
|
-
}
|
|
22588
|
-
)
|
|
22589
|
-
] }, k)),
|
|
22590
|
-
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", icon: "plus", label: "Add entry", onClick: add })
|
|
22591
|
-
] });
|
|
22592
|
-
};
|
|
22593
|
-
}
|
|
22594
|
-
});
|
|
22595
22179
|
function kindOf(v) {
|
|
22596
22180
|
if (v === null) return "null";
|
|
22597
22181
|
if (isArr(v)) return "array";
|
|
@@ -22627,7 +22211,7 @@ function templateFrom(arr) {
|
|
|
22627
22211
|
if (isArr(first)) return [];
|
|
22628
22212
|
return emptyOf(kindOf(first));
|
|
22629
22213
|
}
|
|
22630
|
-
function
|
|
22214
|
+
function ScalarControl({
|
|
22631
22215
|
value,
|
|
22632
22216
|
onChange
|
|
22633
22217
|
}) {
|
|
@@ -22688,7 +22272,7 @@ function ValueNode({
|
|
|
22688
22272
|
if (kind === "object" || kind === "array") {
|
|
22689
22273
|
return /* @__PURE__ */ jsx(ContainerNode, { value, onChange, depth });
|
|
22690
22274
|
}
|
|
22691
|
-
return /* @__PURE__ */ jsx(
|
|
22275
|
+
return /* @__PURE__ */ jsx(ScalarControl, { value, onChange });
|
|
22692
22276
|
}
|
|
22693
22277
|
function Row({
|
|
22694
22278
|
rowKey,
|
|
@@ -35581,7 +35165,7 @@ function TextLikeControl({
|
|
|
35581
35165
|
}
|
|
35582
35166
|
);
|
|
35583
35167
|
}
|
|
35584
|
-
function
|
|
35168
|
+
function isTraitConfigObject(v) {
|
|
35585
35169
|
return v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
|
|
35586
35170
|
}
|
|
35587
35171
|
function FieldControl({
|
|
@@ -35623,8 +35207,8 @@ function FieldControl({
|
|
|
35623
35207
|
} else if (decl.type.startsWith("[") || Array.isArray(effectiveValue)) {
|
|
35624
35208
|
const arr = Array.isArray(effectiveValue) ? effectiveValue : [];
|
|
35625
35209
|
control = /* @__PURE__ */ jsx(JsonTreeEditor, { value: arr, onChange: (next) => onChange(name, next) });
|
|
35626
|
-
} else if (decl.type === "object" || decl.type.startsWith("Map ") || !SCALAR_TYPES.has(decl.type) &&
|
|
35627
|
-
const obj =
|
|
35210
|
+
} else if (decl.type === "object" || decl.type.startsWith("Map ") || !SCALAR_TYPES.has(decl.type) && isTraitConfigObject(effectiveValue)) {
|
|
35211
|
+
const obj = isTraitConfigObject(effectiveValue) ? effectiveValue : {};
|
|
35628
35212
|
control = /* @__PURE__ */ jsx(JsonTreeEditor, { value: obj, onChange: (next) => onChange(name, next) });
|
|
35629
35213
|
} else {
|
|
35630
35214
|
control = /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "muted", children: [
|
|
@@ -37548,9 +37132,6 @@ var init_GraphCanvas = __esm({
|
|
|
37548
37132
|
var init_molecules2 = __esm({
|
|
37549
37133
|
"components/core/molecules/index.ts"() {
|
|
37550
37134
|
init_ErrorBoundary();
|
|
37551
|
-
init_ArrayEditor();
|
|
37552
|
-
init_ObjectEditor();
|
|
37553
|
-
init_MapEditor();
|
|
37554
37135
|
init_JsonTreeEditor();
|
|
37555
37136
|
init_FileTree();
|
|
37556
37137
|
init_FormField();
|
|
@@ -50180,4 +49761,4 @@ init_AboutPageTemplate();
|
|
|
50180
49761
|
// components/index.ts
|
|
50181
49762
|
init_cn();
|
|
50182
49763
|
|
|
50183
|
-
export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal,
|
|
49764
|
+
export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BehaviorView, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, Coachmark, CodeBlock, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBox, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FeatureRenderer2 as FeatureRenderer, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HealthPanel, HeroOrganism, HeroSection, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerCanvas, Popover, PositionedCanvas, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createUnitAnimationState, drawSprite, generateCombatMessage, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, mapBookData, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, springOscillator, tickAnimationState, toCodeLanguage, transitionAnimation, useAnchorRect, useBattleState, useCamera, useGameAudio, useGameAudioContext, useImageCache, usePhysics2D, useSpriteAnimations };
|
package/package.json
CHANGED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { TraitConfigValue } from '@almadar/core';
|
|
3
|
-
export interface ArrayEditorProps {
|
|
4
|
-
/** Current array value. */
|
|
5
|
-
value: ReadonlyArray<TraitConfigValue>;
|
|
6
|
-
/** Fired when the array changes. */
|
|
7
|
-
onChange: (next: ReadonlyArray<TraitConfigValue>) => void;
|
|
8
|
-
/** Additional CSS classes. */
|
|
9
|
-
className?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* ArrayEditor — edits a `ReadonlyArray<TraitConfigValue>` with add / remove per row.
|
|
13
|
-
* Each row infers its editor from the element's runtime type.
|
|
14
|
-
*/
|
|
15
|
-
export declare const ArrayEditor: React.FC<ArrayEditorProps>;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { TraitConfigObject } from '@almadar/core';
|
|
3
|
-
export interface MapEditorProps {
|
|
4
|
-
/** Current map value (object used as string-keyed map). */
|
|
5
|
-
value: TraitConfigObject;
|
|
6
|
-
/** Fired when an entry is added, removed, or its key/value is changed. */
|
|
7
|
-
onChange: (next: TraitConfigObject) => void;
|
|
8
|
-
/** Additional CSS classes. */
|
|
9
|
-
className?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* MapEditor — edits a `TraitConfigObject` as a dynamic key/value map.
|
|
13
|
-
* Unlike ObjectEditor (fixed schema keys), MapEditor allows adding/removing entries
|
|
14
|
-
* and renaming keys.
|
|
15
|
-
*/
|
|
16
|
-
export declare const MapEditor: React.FC<MapEditorProps>;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { TraitConfigObject } from '@almadar/core';
|
|
3
|
-
export interface ObjectEditorProps {
|
|
4
|
-
/** Current object value. */
|
|
5
|
-
value: TraitConfigObject;
|
|
6
|
-
/** Fired when any field changes. */
|
|
7
|
-
onChange: (next: TraitConfigObject) => void;
|
|
8
|
-
/** Additional CSS classes. */
|
|
9
|
-
className?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* ObjectEditor — edits a `TraitConfigObject` showing one labeled row per key.
|
|
13
|
-
* Keys are fixed (derived from the current object's shape).
|
|
14
|
-
*/
|
|
15
|
-
export declare const ObjectEditor: React.FC<ObjectEditorProps>;
|