@xenosystem/blocks 0.11.3 → 0.11.4
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/edit/index.d.ts +4 -3
- package/dist/edit/index.js +200 -396
- package/package.json +3 -3
package/dist/edit/index.d.ts
CHANGED
|
@@ -1948,9 +1948,10 @@ declare function resolveIconName(kind: string | undefined, hostMap?: Record<stri
|
|
|
1948
1948
|
* `useSyncExternalStore` and forwards interactions. No projection logic, no intent construction and
|
|
1949
1949
|
* no virtualization math live here.
|
|
1950
1950
|
*
|
|
1951
|
-
*
|
|
1952
|
-
*
|
|
1953
|
-
*
|
|
1951
|
+
* Rendered over the chrome family: a `Toolbar` of undo/redo/search/count/clear, an `InlineConfirm`
|
|
1952
|
+
* for clearing, a `ScrollArea` the virtualizer measures, a `VirtualWindow` of `Row`s (the current
|
|
1953
|
+
* row `selected`, the keyboard row `focused`, future entries `struck` — Photoshop's affordance),
|
|
1954
|
+
* and a `StatusBar` for memory. The window math and the keyboard model stay in the controller.
|
|
1954
1955
|
*
|
|
1955
1956
|
* @module
|
|
1956
1957
|
*/
|
package/dist/edit/index.js
CHANGED
|
@@ -4483,6 +4483,7 @@ var HistoryPanelController = class {
|
|
|
4483
4483
|
|
|
4484
4484
|
// src/edit/history/react/HistoryPanelView.tsx
|
|
4485
4485
|
import { useCallback as useCallback4, useEffect as useEffect3, useRef as useRef4, useSyncExternalStore as useSyncExternalStore3 } from "react";
|
|
4486
|
+
import { Badge as Badge2, Column as Column2, EmptyState as EmptyState2, IconButton as IconButton3, InlineConfirm, RowList, Row, ScrollArea as ScrollArea2, SearchField as SearchField2, StatusBar, Text as Text3, Toolbar, VirtualWindow } from "@xenosystem/components/chrome";
|
|
4486
4487
|
|
|
4487
4488
|
// src/edit/history/react/icons.tsx
|
|
4488
4489
|
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
@@ -4578,7 +4579,7 @@ function PendingGlyph({ size = 9 }) {
|
|
|
4578
4579
|
}
|
|
4579
4580
|
|
|
4580
4581
|
// src/edit/history/react/HistoryPanelView.tsx
|
|
4581
|
-
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
4582
|
+
import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
4582
4583
|
function HistoryPanelView({ controller }) {
|
|
4583
4584
|
const subscribe = useCallback4((cb) => controller.subscribe(cb), [controller]);
|
|
4584
4585
|
const getSnapshot = useCallback4(() => controller.getRevision(), [controller]);
|
|
@@ -4627,106 +4628,54 @@ function HistoryPanelView({ controller }) {
|
|
|
4627
4628
|
},
|
|
4628
4629
|
[controller]
|
|
4629
4630
|
);
|
|
4630
|
-
return /* @__PURE__ */ jsxs7(
|
|
4631
|
-
/* @__PURE__ */
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
{
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
{
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
}
|
|
4655
|
-
),
|
|
4656
|
-
controller.isSearchShown() && /* @__PURE__ */ jsx8(
|
|
4657
|
-
"input",
|
|
4658
|
-
{
|
|
4659
|
-
type: "search",
|
|
4660
|
-
value: controller.getFilter(),
|
|
4661
|
-
placeholder: "Search history",
|
|
4662
|
-
onChange: (e) => controller.setFilter(e.target.value),
|
|
4663
|
-
style: S2.search,
|
|
4664
|
-
"aria-label": "Search history",
|
|
4665
|
-
spellCheck: false
|
|
4666
|
-
}
|
|
4667
|
-
),
|
|
4668
|
-
/* @__PURE__ */ jsxs7("span", { style: S2.counter, children: [
|
|
4669
|
-
controller.getAppliedCount(),
|
|
4670
|
-
" / ",
|
|
4671
|
-
controller.getTotalCount()
|
|
4672
|
-
] }),
|
|
4673
|
-
controller.isClearAllowed() && /* @__PURE__ */ jsx8(
|
|
4674
|
-
"button",
|
|
4631
|
+
return /* @__PURE__ */ jsxs7(Column2, { className: "xeno-history-panel", children: [
|
|
4632
|
+
/* @__PURE__ */ jsx8(
|
|
4633
|
+
Toolbar,
|
|
4634
|
+
{
|
|
4635
|
+
left: /* @__PURE__ */ jsxs7(Fragment3, { children: [
|
|
4636
|
+
/* @__PURE__ */ jsx8(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx8(UndoIcon, {}), label: "Undo", disabled: !controller.canUndo(), onClick: () => controller.undo() }),
|
|
4637
|
+
/* @__PURE__ */ jsx8(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx8(RedoIcon, {}), label: "Redo", disabled: !controller.canRedo(), onClick: () => controller.redo() })
|
|
4638
|
+
] }),
|
|
4639
|
+
right: /* @__PURE__ */ jsxs7(Fragment3, { children: [
|
|
4640
|
+
/* @__PURE__ */ jsxs7(Text3, { role: "number", children: [
|
|
4641
|
+
controller.getAppliedCount(),
|
|
4642
|
+
" / ",
|
|
4643
|
+
controller.getTotalCount()
|
|
4644
|
+
] }),
|
|
4645
|
+
controller.isClearAllowed() ? /* @__PURE__ */ jsx8(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx8(TrashIcon, {}), label: "Clear history", onClick: () => controller.requestClear() }) : null
|
|
4646
|
+
] }),
|
|
4647
|
+
children: controller.isSearchShown() ? /* @__PURE__ */ jsx8(SearchField2, { value: controller.getFilter(), onChange: (v) => controller.setFilter(v), placeholder: "Search history", label: "Search history" }) : null
|
|
4648
|
+
}
|
|
4649
|
+
),
|
|
4650
|
+
controller.isConfirmingClear() ? /* @__PURE__ */ jsx8(InlineConfirm, { message: "Clear all history?", label: "Confirm clear history", confirmLabel: "Clear", onConfirm: () => controller.confirmClearNow(), onCancel: () => controller.cancelClear() }) : null,
|
|
4651
|
+
controller.isPruned() ? /* @__PURE__ */ jsx8(Text3, { role: "caption", children: "Earlier history discarded (limit reached)" }) : null,
|
|
4652
|
+
/* @__PURE__ */ jsxs7(ScrollArea2, { ref: scrollRef, onScroll, onKeyDown, onMouseLeave: () => controller.setHovered(null), tabIndex: 0, children: [
|
|
4653
|
+
/* @__PURE__ */ jsx8(RowList, { role: "listbox", "aria-label": "History", children: /* @__PURE__ */ jsx8(VirtualWindow, { totalHeight: window_.totalHeight, offsetTop: window_.offsetTop, children: windowRows.map((row) => /* @__PURE__ */ jsx8(
|
|
4654
|
+
HistoryRowView,
|
|
4675
4655
|
{
|
|
4676
|
-
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
)
|
|
4684
|
-
] }),
|
|
4685
|
-
controller.isConfirmingClear() && /* @__PURE__ */ jsxs7("div", { style: S2.confirmBar, role: "alertdialog", "aria-label": "Confirm clear history", children: [
|
|
4686
|
-
/* @__PURE__ */ jsx8("span", { children: "Clear all history?" }),
|
|
4687
|
-
/* @__PURE__ */ jsxs7("span", { style: S2.confirmActions, children: [
|
|
4688
|
-
/* @__PURE__ */ jsx8("button", { type: "button", style: S2.textBtn, onClick: () => controller.confirmClearNow(), children: "Clear" }),
|
|
4689
|
-
/* @__PURE__ */ jsx8("button", { type: "button", style: S2.textBtnDim, onClick: () => controller.cancelClear(), children: "Cancel" })
|
|
4690
|
-
] })
|
|
4656
|
+
row,
|
|
4657
|
+
controller,
|
|
4658
|
+
rowHeight,
|
|
4659
|
+
focused: controller.getFocused() === row.entryId
|
|
4660
|
+
},
|
|
4661
|
+
row.entryId ?? "__original__"
|
|
4662
|
+
)) }) }),
|
|
4663
|
+
rows.length === 0 ? /* @__PURE__ */ jsx8(EmptyState2, { title: "No history" }) : null
|
|
4691
4664
|
] }),
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
"div",
|
|
4665
|
+
memory ? /* @__PURE__ */ jsx8(
|
|
4666
|
+
StatusBar,
|
|
4695
4667
|
{
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
/* @__PURE__ */ jsx8("div", { style: { height: window_.totalHeight, position: "relative" }, children: /* @__PURE__ */ jsx8("div", { style: { transform: `translateY(${window_.offsetTop}px)` }, children: windowRows.map((row) => /* @__PURE__ */ jsx8(
|
|
4706
|
-
HistoryRowView,
|
|
4707
|
-
{
|
|
4708
|
-
row,
|
|
4709
|
-
controller,
|
|
4710
|
-
rowHeight,
|
|
4711
|
-
focused: controller.getFocused() === row.entryId
|
|
4712
|
-
},
|
|
4713
|
-
row.entryId ?? "__original__"
|
|
4714
|
-
)) }) }),
|
|
4715
|
-
rows.length === 0 && /* @__PURE__ */ jsx8("div", { style: S2.empty, children: "No history" })
|
|
4716
|
-
]
|
|
4668
|
+
left: /* @__PURE__ */ jsxs7(Text3, { role: "number", children: [
|
|
4669
|
+
memory.usedMB.toFixed(1),
|
|
4670
|
+
" MB",
|
|
4671
|
+
memory.limitMB ? ` / ${memory.limitMB} MB` : ""
|
|
4672
|
+
] }),
|
|
4673
|
+
right: memory.onDiskCount !== void 0 ? /* @__PURE__ */ jsxs7(Text3, { role: "meta", children: [
|
|
4674
|
+
memory.onDiskCount,
|
|
4675
|
+
" on disk"
|
|
4676
|
+
] }) : null
|
|
4717
4677
|
}
|
|
4718
|
-
)
|
|
4719
|
-
memory && /* @__PURE__ */ jsxs7("div", { style: S2.footer, children: [
|
|
4720
|
-
/* @__PURE__ */ jsxs7("span", { children: [
|
|
4721
|
-
memory.usedMB.toFixed(1),
|
|
4722
|
-
" MB",
|
|
4723
|
-
memory.limitMB ? ` / ${memory.limitMB} MB` : ""
|
|
4724
|
-
] }),
|
|
4725
|
-
memory.onDiskCount !== void 0 && /* @__PURE__ */ jsxs7("span", { style: S2.dim, children: [
|
|
4726
|
-
memory.onDiskCount,
|
|
4727
|
-
" on disk"
|
|
4728
|
-
] })
|
|
4729
|
-
] })
|
|
4678
|
+
) : null
|
|
4730
4679
|
] });
|
|
4731
4680
|
}
|
|
4732
4681
|
function HistoryRowView({ row, controller, rowHeight, focused }) {
|
|
@@ -4734,57 +4683,47 @@ function HistoryRowView({ row, controller, rowHeight, focused }) {
|
|
|
4734
4683
|
const pending = entry?.status === "pending";
|
|
4735
4684
|
const failed = entry?.status === "failed";
|
|
4736
4685
|
const jumpable = controller.isJumpAllowed() && entry?.caps?.jumpable !== false;
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
height: rowHeight,
|
|
4740
|
-
background: row.current ? "var(--xeno-border)" : "transparent",
|
|
4741
|
-
// FUTURE rows (after the cursor) are dimmed + struck through — the redoable region.
|
|
4742
|
-
opacity: row.future ? 0.4 : 1,
|
|
4743
|
-
textDecoration: row.future ? "line-through" : "none",
|
|
4744
|
-
boxShadow: focused ? "inset 0 0 0 1px var(--xeno-control)" : void 0,
|
|
4745
|
-
cursor: jumpable ? "pointer" : "default"
|
|
4746
|
-
};
|
|
4747
|
-
return /* @__PURE__ */ jsxs7(
|
|
4748
|
-
"div",
|
|
4686
|
+
return /* @__PURE__ */ jsx8(
|
|
4687
|
+
Row,
|
|
4749
4688
|
{
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4689
|
+
height: rowHeight,
|
|
4690
|
+
selected: row.current,
|
|
4691
|
+
focused,
|
|
4692
|
+
struck: row.future,
|
|
4693
|
+
noIcon: !controller.areIconsShown(),
|
|
4694
|
+
icon: /* @__PURE__ */ jsx8(EntryIcon, { name: row.kind === "original" ? "original" : controller.getIconName(entry?.kind) }),
|
|
4695
|
+
label: row.label,
|
|
4696
|
+
meta: row.kind === "entry" ? row.ordinal : void 0,
|
|
4753
4697
|
"data-history-row": row.entryId ?? "__original__",
|
|
4754
|
-
onClick: () => controller.jumpTo(row.entryId),
|
|
4698
|
+
onClick: jumpable ? () => controller.jumpTo(row.entryId) : void 0,
|
|
4755
4699
|
onMouseEnter: () => controller.setHovered(row.entryId),
|
|
4756
4700
|
onContextMenu: (e) => {
|
|
4757
4701
|
e.preventDefault();
|
|
4758
4702
|
controller.requestContextMenu(row.entryId, e.clientX, e.clientY);
|
|
4759
4703
|
},
|
|
4760
4704
|
title: row.label,
|
|
4761
|
-
children: [
|
|
4762
|
-
|
|
4763
|
-
/* @__PURE__ */ jsx8(
|
|
4764
|
-
/* @__PURE__ */ jsx8("
|
|
4765
|
-
|
|
4766
|
-
failed && /* @__PURE__ */ jsx8("span", { style: S2.failed, children: "failed" }),
|
|
4767
|
-
controller.isSourceShown() && entry?.source && entry.source !== "user" && /* @__PURE__ */ jsx8("span", { style: S2.badge, title: `Source: ${entry.source}`, children: entry.source === "agent" ? "AI" : "S" }),
|
|
4768
|
-
entry?.coalesced && entry.coalesced > 1 && /* @__PURE__ */ jsxs7("span", { style: S2.badge, title: `${entry.coalesced} actions coalesced`, children: [
|
|
4705
|
+
trailing: /* @__PURE__ */ jsxs7(Fragment3, { children: [
|
|
4706
|
+
pending ? /* @__PURE__ */ jsx8(PendingGlyph, {}) : null,
|
|
4707
|
+
failed ? /* @__PURE__ */ jsx8(Badge2, { size: "sm", tone: "error", children: "failed" }) : null,
|
|
4708
|
+
controller.isSourceShown() && entry?.source && entry.source !== "user" ? /* @__PURE__ */ jsx8(Badge2, { size: "sm", title: `Source: ${entry.source}`, children: entry.source === "agent" ? "AI" : "S" }) : null,
|
|
4709
|
+
entry?.coalesced && entry.coalesced > 1 ? /* @__PURE__ */ jsxs7(Badge2, { size: "sm", title: `${entry.coalesced} actions coalesced`, children: [
|
|
4769
4710
|
"\xD7",
|
|
4770
4711
|
entry.coalesced
|
|
4771
|
-
] }),
|
|
4772
|
-
controller.areTimestampsShown() && entry?.at !== void 0
|
|
4773
|
-
pending
|
|
4774
|
-
|
|
4712
|
+
] }) : null,
|
|
4713
|
+
controller.areTimestampsShown() && entry?.at !== void 0 ? /* @__PURE__ */ jsx8(Text3, { role: "meta", children: formatTime(entry.at) }) : null,
|
|
4714
|
+
pending ? /* @__PURE__ */ jsx8(
|
|
4715
|
+
IconButton3,
|
|
4775
4716
|
{
|
|
4776
|
-
|
|
4777
|
-
|
|
4717
|
+
size: "sm",
|
|
4718
|
+
icon: /* @__PURE__ */ jsx8(XIcon2, {}),
|
|
4719
|
+
label: "Cancel operation",
|
|
4778
4720
|
onClick: (e) => {
|
|
4779
4721
|
e.stopPropagation();
|
|
4780
4722
|
controller.cancelPending(entry?.id);
|
|
4781
|
-
}
|
|
4782
|
-
title: "Cancel operation",
|
|
4783
|
-
"aria-label": "Cancel operation",
|
|
4784
|
-
children: /* @__PURE__ */ jsx8(XIcon2, {})
|
|
4723
|
+
}
|
|
4785
4724
|
}
|
|
4786
|
-
)
|
|
4787
|
-
]
|
|
4725
|
+
) : null
|
|
4726
|
+
] })
|
|
4788
4727
|
}
|
|
4789
4728
|
);
|
|
4790
4729
|
}
|
|
@@ -4793,141 +4732,6 @@ function formatTime(at) {
|
|
|
4793
4732
|
if (Number.isNaN(date.getTime())) return typeof at === "string" ? at : "";
|
|
4794
4733
|
return date.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit" });
|
|
4795
4734
|
}
|
|
4796
|
-
var S2 = {
|
|
4797
|
-
root: {
|
|
4798
|
-
display: "flex",
|
|
4799
|
-
flexDirection: "column",
|
|
4800
|
-
height: "100%",
|
|
4801
|
-
minHeight: 0,
|
|
4802
|
-
fontSize: 11,
|
|
4803
|
-
color: "var(--xeno-text)",
|
|
4804
|
-
background: "var(--xeno-canvas)",
|
|
4805
|
-
userSelect: "none"
|
|
4806
|
-
},
|
|
4807
|
-
header: {
|
|
4808
|
-
display: "flex",
|
|
4809
|
-
alignItems: "center",
|
|
4810
|
-
gap: 4,
|
|
4811
|
-
padding: "4px 6px",
|
|
4812
|
-
background: "var(--xeno-panel-header)",
|
|
4813
|
-
flex: "0 0 auto"
|
|
4814
|
-
},
|
|
4815
|
-
search: {
|
|
4816
|
-
flex: "1 1 auto",
|
|
4817
|
-
minWidth: 0,
|
|
4818
|
-
height: 18,
|
|
4819
|
-
background: "var(--xeno-canvas)",
|
|
4820
|
-
color: "inherit",
|
|
4821
|
-
border: "1px solid var(--xeno-border)",
|
|
4822
|
-
borderRadius: 2,
|
|
4823
|
-
fontSize: 11,
|
|
4824
|
-
padding: "0 6px",
|
|
4825
|
-
outline: "none"
|
|
4826
|
-
},
|
|
4827
|
-
counter: {
|
|
4828
|
-
fontSize: 9,
|
|
4829
|
-
color: "var(--xeno-muted)",
|
|
4830
|
-
fontVariantNumeric: "tabular-nums",
|
|
4831
|
-
flex: "0 0 auto"
|
|
4832
|
-
},
|
|
4833
|
-
iconBtn: {
|
|
4834
|
-
display: "flex",
|
|
4835
|
-
alignItems: "center",
|
|
4836
|
-
justifyContent: "center",
|
|
4837
|
-
width: 16,
|
|
4838
|
-
height: 16,
|
|
4839
|
-
padding: 0,
|
|
4840
|
-
border: "none",
|
|
4841
|
-
borderRadius: 2,
|
|
4842
|
-
background: "transparent",
|
|
4843
|
-
color: "inherit",
|
|
4844
|
-
cursor: "pointer",
|
|
4845
|
-
flex: "0 0 auto"
|
|
4846
|
-
},
|
|
4847
|
-
confirmBar: {
|
|
4848
|
-
display: "flex",
|
|
4849
|
-
alignItems: "center",
|
|
4850
|
-
justifyContent: "space-between",
|
|
4851
|
-
gap: 8,
|
|
4852
|
-
padding: "3px 6px",
|
|
4853
|
-
fontSize: 10,
|
|
4854
|
-
background: "var(--xeno-border-subtle)",
|
|
4855
|
-
flex: "0 0 auto"
|
|
4856
|
-
},
|
|
4857
|
-
confirmActions: { display: "flex", gap: 8 },
|
|
4858
|
-
textBtn: {
|
|
4859
|
-
background: "transparent",
|
|
4860
|
-
border: "none",
|
|
4861
|
-
color: "inherit",
|
|
4862
|
-
cursor: "pointer",
|
|
4863
|
-
fontSize: 10,
|
|
4864
|
-
padding: 0
|
|
4865
|
-
},
|
|
4866
|
-
textBtnDim: {
|
|
4867
|
-
background: "transparent",
|
|
4868
|
-
border: "none",
|
|
4869
|
-
color: "var(--xeno-muted)",
|
|
4870
|
-
cursor: "pointer",
|
|
4871
|
-
fontSize: 10,
|
|
4872
|
-
padding: 0
|
|
4873
|
-
},
|
|
4874
|
-
prunedNote: {
|
|
4875
|
-
padding: "2px 6px",
|
|
4876
|
-
fontSize: 9,
|
|
4877
|
-
color: "var(--xeno-muted)",
|
|
4878
|
-
flex: "0 0 auto"
|
|
4879
|
-
},
|
|
4880
|
-
scroll: { flex: "1 1 auto", minHeight: 0, overflowY: "auto", overflowX: "hidden", outline: "none" },
|
|
4881
|
-
row: {
|
|
4882
|
-
display: "flex",
|
|
4883
|
-
alignItems: "center",
|
|
4884
|
-
gap: 5,
|
|
4885
|
-
padding: "0 6px",
|
|
4886
|
-
boxSizing: "border-box",
|
|
4887
|
-
overflow: "hidden"
|
|
4888
|
-
},
|
|
4889
|
-
iconCell: { display: "flex", alignItems: "center", width: 11, flex: "0 0 auto", opacity: 0.75 },
|
|
4890
|
-
ordinal: {
|
|
4891
|
-
fontSize: 9,
|
|
4892
|
-
color: "var(--xeno-muted)",
|
|
4893
|
-
fontVariantNumeric: "tabular-nums",
|
|
4894
|
-
minWidth: 14,
|
|
4895
|
-
textAlign: "right",
|
|
4896
|
-
flex: "0 0 auto"
|
|
4897
|
-
},
|
|
4898
|
-
label: { flex: "1 1 auto", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", minWidth: 0 },
|
|
4899
|
-
badge: {
|
|
4900
|
-
fontSize: 8,
|
|
4901
|
-
padding: "0 3px",
|
|
4902
|
-
height: 12,
|
|
4903
|
-
lineHeight: "12px",
|
|
4904
|
-
borderRadius: 2,
|
|
4905
|
-
background: "var(--xeno-border)",
|
|
4906
|
-
color: "var(--xeno-muted)",
|
|
4907
|
-
flex: "0 0 auto"
|
|
4908
|
-
},
|
|
4909
|
-
failed: { fontSize: 9, color: "var(--xeno-danger)", flex: "0 0 auto" },
|
|
4910
|
-
time: {
|
|
4911
|
-
fontSize: 9,
|
|
4912
|
-
color: "var(--xeno-muted)",
|
|
4913
|
-
fontVariantNumeric: "tabular-nums",
|
|
4914
|
-
flex: "0 0 auto"
|
|
4915
|
-
},
|
|
4916
|
-
empty: { padding: 12, fontSize: 10, opacity: 0.4, textTransform: "uppercase", letterSpacing: "0.08em" },
|
|
4917
|
-
footer: {
|
|
4918
|
-
display: "flex",
|
|
4919
|
-
alignItems: "center",
|
|
4920
|
-
justifyContent: "space-between",
|
|
4921
|
-
gap: 8,
|
|
4922
|
-
padding: "2px 6px",
|
|
4923
|
-
fontSize: 9,
|
|
4924
|
-
color: "var(--xeno-muted)",
|
|
4925
|
-
background: "var(--xeno-panel-header)",
|
|
4926
|
-
flex: "0 0 auto",
|
|
4927
|
-
fontVariantNumeric: "tabular-nums"
|
|
4928
|
-
},
|
|
4929
|
-
dim: { opacity: 0.7 }
|
|
4930
|
-
};
|
|
4931
4735
|
|
|
4932
4736
|
// src/edit/history/panel.ts
|
|
4933
4737
|
function createHistoryPanel(options = {}) {
|
|
@@ -6010,7 +5814,7 @@ function drawAlphaStrip(ctx, w, h, hsv) {
|
|
|
6010
5814
|
}
|
|
6011
5815
|
|
|
6012
5816
|
// src/edit/color/react/ColorPanelView.tsx
|
|
6013
|
-
import { Fragment as
|
|
5817
|
+
import { Fragment as Fragment4, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
6014
5818
|
var SPACE_LABEL = {
|
|
6015
5819
|
hex: "HEX",
|
|
6016
5820
|
rgb: "RGB",
|
|
@@ -6115,14 +5919,14 @@ function ColorPanelView({ controller }) {
|
|
|
6115
5919
|
);
|
|
6116
5920
|
const componentLabels = COMPONENT_LABELS[space];
|
|
6117
5921
|
const comps = value.components ?? [];
|
|
6118
|
-
return /* @__PURE__ */ jsxs8("div", { style:
|
|
6119
|
-
controller.getChannelsMode() === "fg-bg" && /* @__PURE__ */ jsxs8("div", { style:
|
|
5922
|
+
return /* @__PURE__ */ jsxs8("div", { style: S2.root, className: "xeno-color-panel", children: [
|
|
5923
|
+
controller.getChannelsMode() === "fg-bg" && /* @__PURE__ */ jsxs8("div", { style: S2.channels, children: [
|
|
6120
5924
|
/* @__PURE__ */ jsx9(
|
|
6121
5925
|
"button",
|
|
6122
5926
|
{
|
|
6123
5927
|
type: "button",
|
|
6124
5928
|
"aria-pressed": controller.getActiveChannel() === "fg",
|
|
6125
|
-
style: { ...
|
|
5929
|
+
style: { ...S2.chip, ...controller.getActiveChannel() === "fg" ? S2.chipActive : null, background: value.hex },
|
|
6126
5930
|
onClick: () => controller.setChannel("fg"),
|
|
6127
5931
|
title: "Foreground"
|
|
6128
5932
|
}
|
|
@@ -6131,7 +5935,7 @@ function ColorPanelView({ controller }) {
|
|
|
6131
5935
|
"button",
|
|
6132
5936
|
{
|
|
6133
5937
|
type: "button",
|
|
6134
|
-
style:
|
|
5938
|
+
style: S2.swap,
|
|
6135
5939
|
onClick: () => controller.swapChannels(),
|
|
6136
5940
|
title: "Swap FG/BG (X)",
|
|
6137
5941
|
children: "\u21C4"
|
|
@@ -6142,20 +5946,20 @@ function ColorPanelView({ controller }) {
|
|
|
6142
5946
|
{
|
|
6143
5947
|
type: "button",
|
|
6144
5948
|
"aria-pressed": controller.getActiveChannel() === "bg",
|
|
6145
|
-
style: { ...
|
|
5949
|
+
style: { ...S2.chip, ...controller.getActiveChannel() === "bg" ? S2.chipActive : null },
|
|
6146
5950
|
onClick: () => controller.setChannel("bg"),
|
|
6147
5951
|
title: "Background"
|
|
6148
5952
|
}
|
|
6149
5953
|
)
|
|
6150
5954
|
] }),
|
|
6151
|
-
/* @__PURE__ */ jsxs8("div", { style:
|
|
5955
|
+
/* @__PURE__ */ jsxs8("div", { style: S2.pickerRow, children: [
|
|
6152
5956
|
/* @__PURE__ */ jsx9(
|
|
6153
5957
|
"canvas",
|
|
6154
5958
|
{
|
|
6155
5959
|
ref: spectrumRef,
|
|
6156
5960
|
width: 200,
|
|
6157
5961
|
height: 140,
|
|
6158
|
-
style: { ...
|
|
5962
|
+
style: { ...S2.spectrum, ...bound ? S2.disabled : null },
|
|
6159
5963
|
onPointerDown: (e) => onSpectrumPointer(e, true),
|
|
6160
5964
|
onPointerMove: (e) => onSpectrumPointer(e, false),
|
|
6161
5965
|
onPointerUp: endDrag
|
|
@@ -6167,7 +5971,7 @@ function ColorPanelView({ controller }) {
|
|
|
6167
5971
|
ref: hueRef,
|
|
6168
5972
|
width: 14,
|
|
6169
5973
|
height: 140,
|
|
6170
|
-
style: { ...
|
|
5974
|
+
style: { ...S2.strip, ...bound ? S2.disabled : null },
|
|
6171
5975
|
onPointerDown: (e) => onHuePointer(e, true),
|
|
6172
5976
|
onPointerMove: (e) => onHuePointer(e, false),
|
|
6173
5977
|
onPointerUp: endDrag
|
|
@@ -6179,20 +5983,20 @@ function ColorPanelView({ controller }) {
|
|
|
6179
5983
|
ref: alphaRef,
|
|
6180
5984
|
width: 14,
|
|
6181
5985
|
height: 140,
|
|
6182
|
-
style: { ...
|
|
5986
|
+
style: { ...S2.strip, ...bound ? S2.disabled : null },
|
|
6183
5987
|
onPointerDown: (e) => onAlphaPointer(e, true),
|
|
6184
5988
|
onPointerMove: (e) => onAlphaPointer(e, false),
|
|
6185
5989
|
onPointerUp: endDrag
|
|
6186
5990
|
}
|
|
6187
5991
|
)
|
|
6188
5992
|
] }),
|
|
6189
|
-
/* @__PURE__ */ jsxs8("div", { style:
|
|
5993
|
+
/* @__PURE__ */ jsxs8("div", { style: S2.controls, children: [
|
|
6190
5994
|
/* @__PURE__ */ jsx9(
|
|
6191
5995
|
"select",
|
|
6192
5996
|
{
|
|
6193
5997
|
value: space,
|
|
6194
5998
|
onChange: (e) => controller.setSpace(e.target.value),
|
|
6195
|
-
style:
|
|
5999
|
+
style: S2.select,
|
|
6196
6000
|
"aria-label": "Color model",
|
|
6197
6001
|
children: EDIT_SPACES.map((s) => /* @__PURE__ */ jsx9("option", { value: s, children: SPACE_LABEL[s] }, s))
|
|
6198
6002
|
}
|
|
@@ -6204,12 +6008,12 @@ function ColorPanelView({ controller }) {
|
|
|
6204
6008
|
value: value.hex,
|
|
6205
6009
|
onChange: onHexInput,
|
|
6206
6010
|
disabled: bound,
|
|
6207
|
-
style:
|
|
6011
|
+
style: S2.hexInput,
|
|
6208
6012
|
"aria-label": "Hex",
|
|
6209
6013
|
spellCheck: false
|
|
6210
6014
|
}
|
|
6211
|
-
) : /* @__PURE__ */ jsx9("div", { style:
|
|
6212
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6015
|
+
) : /* @__PURE__ */ jsx9("div", { style: S2.componentRow, children: (componentLabels ?? []).map((label, i) => /* @__PURE__ */ jsxs8("label", { style: S2.componentField, children: [
|
|
6016
|
+
/* @__PURE__ */ jsx9("span", { style: S2.componentLabel, children: label }),
|
|
6213
6017
|
/* @__PURE__ */ jsx9(
|
|
6214
6018
|
"input",
|
|
6215
6019
|
{
|
|
@@ -6217,12 +6021,12 @@ function ColorPanelView({ controller }) {
|
|
|
6217
6021
|
value: roundForSpace(space, i, comps[i] ?? 0),
|
|
6218
6022
|
onChange: (e) => onComponentInput(i, e.target.value),
|
|
6219
6023
|
disabled: bound,
|
|
6220
|
-
style:
|
|
6024
|
+
style: S2.numInput
|
|
6221
6025
|
}
|
|
6222
6026
|
)
|
|
6223
6027
|
] }, label)) }),
|
|
6224
|
-
controller.isAlphaShown() && /* @__PURE__ */ jsxs8("label", { style:
|
|
6225
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6028
|
+
controller.isAlphaShown() && /* @__PURE__ */ jsxs8("label", { style: S2.alphaField, children: [
|
|
6029
|
+
/* @__PURE__ */ jsx9("span", { style: S2.componentLabel, children: "A" }),
|
|
6226
6030
|
/* @__PURE__ */ jsx9(
|
|
6227
6031
|
"input",
|
|
6228
6032
|
{
|
|
@@ -6232,20 +6036,20 @@ function ColorPanelView({ controller }) {
|
|
|
6232
6036
|
value: Math.round(value.alpha * 100),
|
|
6233
6037
|
onChange: (e) => controller.setAlpha(Number(e.target.value) / 100, { commit: true }),
|
|
6234
6038
|
disabled: bound,
|
|
6235
|
-
style:
|
|
6039
|
+
style: S2.numInput
|
|
6236
6040
|
}
|
|
6237
6041
|
)
|
|
6238
6042
|
] }),
|
|
6239
|
-
/* @__PURE__ */ jsx9("button", { type: "button", style:
|
|
6043
|
+
/* @__PURE__ */ jsx9("button", { type: "button", style: S2.iconBtn, title: "Pick from screen", onClick: () => controller.requestEyedropper(), children: "\u29BF" })
|
|
6240
6044
|
] }),
|
|
6241
|
-
controller.hasTokens() && /* @__PURE__ */ jsxs8("div", { style:
|
|
6242
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6045
|
+
controller.hasTokens() && /* @__PURE__ */ jsxs8("div", { style: S2.tokenRow, children: [
|
|
6046
|
+
/* @__PURE__ */ jsx9("span", { style: S2.componentLabel, children: "Token" }),
|
|
6243
6047
|
/* @__PURE__ */ jsxs8(
|
|
6244
6048
|
"select",
|
|
6245
6049
|
{
|
|
6246
6050
|
value: controller.getBoundTokenId() ?? "",
|
|
6247
6051
|
onChange: (e) => e.target.value ? controller.bindToken(e.target.value) : controller.unbindToken(),
|
|
6248
|
-
style:
|
|
6052
|
+
style: S2.select,
|
|
6249
6053
|
"aria-label": "Bind token",
|
|
6250
6054
|
children: [
|
|
6251
6055
|
/* @__PURE__ */ jsx9("option", { value: "", children: "\u2014 raw \u2014" }),
|
|
@@ -6253,17 +6057,17 @@ function ColorPanelView({ controller }) {
|
|
|
6253
6057
|
]
|
|
6254
6058
|
}
|
|
6255
6059
|
),
|
|
6256
|
-
bound && /* @__PURE__ */ jsx9("button", { type: "button", style:
|
|
6060
|
+
bound && /* @__PURE__ */ jsx9("button", { type: "button", style: S2.textBtn, onClick: () => controller.unbindToken(), children: "Unbind" })
|
|
6257
6061
|
] }),
|
|
6258
|
-
/* @__PURE__ */ jsxs8("div", { style:
|
|
6259
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6260
|
-
/* @__PURE__ */ jsx9("button", { type: "button", style:
|
|
6062
|
+
/* @__PURE__ */ jsxs8("div", { style: S2.swatchHeader, children: [
|
|
6063
|
+
/* @__PURE__ */ jsx9("span", { style: S2.sectionLabel, children: "Swatches" }),
|
|
6064
|
+
/* @__PURE__ */ jsx9("button", { type: "button", style: S2.textBtn, onClick: () => void controller.addSwatch(), children: "+ Save" })
|
|
6261
6065
|
] }),
|
|
6262
|
-
/* @__PURE__ */ jsx9("div", { style:
|
|
6066
|
+
/* @__PURE__ */ jsx9("div", { style: S2.swatchGrid, children: controller.getSwatches().map((hex) => /* @__PURE__ */ jsx9(
|
|
6263
6067
|
"button",
|
|
6264
6068
|
{
|
|
6265
6069
|
type: "button",
|
|
6266
|
-
style: { ...
|
|
6070
|
+
style: { ...S2.swatch, background: hex },
|
|
6267
6071
|
title: hex,
|
|
6268
6072
|
onClick: () => controller.selectColor(hex),
|
|
6269
6073
|
onContextMenu: (e) => {
|
|
@@ -6273,13 +6077,13 @@ function ColorPanelView({ controller }) {
|
|
|
6273
6077
|
},
|
|
6274
6078
|
hex
|
|
6275
6079
|
)) }),
|
|
6276
|
-
controller.getRecent().length > 0 && /* @__PURE__ */ jsxs8(
|
|
6277
|
-
/* @__PURE__ */ jsx9("div", { style:
|
|
6278
|
-
/* @__PURE__ */ jsx9("div", { style:
|
|
6080
|
+
controller.getRecent().length > 0 && /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
|
6081
|
+
/* @__PURE__ */ jsx9("div", { style: S2.sectionLabel, children: "Recent" }),
|
|
6082
|
+
/* @__PURE__ */ jsx9("div", { style: S2.swatchGrid, children: controller.getRecent().map((hex, i) => /* @__PURE__ */ jsx9(
|
|
6279
6083
|
"button",
|
|
6280
6084
|
{
|
|
6281
6085
|
type: "button",
|
|
6282
|
-
style: { ...
|
|
6086
|
+
style: { ...S2.swatch, background: hex },
|
|
6283
6087
|
title: hex,
|
|
6284
6088
|
onClick: () => controller.selectColor(hex)
|
|
6285
6089
|
},
|
|
@@ -6295,7 +6099,7 @@ function roundForSpace(space, index, v) {
|
|
|
6295
6099
|
if (space === "oklch") return Math.round(v * 10) / 10;
|
|
6296
6100
|
return Math.round(v);
|
|
6297
6101
|
}
|
|
6298
|
-
var
|
|
6102
|
+
var S2 = {
|
|
6299
6103
|
root: { display: "flex", flexDirection: "column", gap: 8, padding: 8, fontSize: 11, color: "var(--xeno-text)", background: "var(--xeno-canvas)", minWidth: 232, userSelect: "none" },
|
|
6300
6104
|
channels: { display: "flex", alignItems: "center", gap: 6 },
|
|
6301
6105
|
chip: { width: 28, height: 20, borderRadius: 2, border: "1px solid var(--xeno-control)", background: "var(--xeno-canvas)", cursor: "pointer", padding: 0 },
|
|
@@ -7592,9 +7396,9 @@ var curveManifest = {
|
|
|
7592
7396
|
|
|
7593
7397
|
// src/edit/curve/react/CurvePanelView.tsx
|
|
7594
7398
|
import { useCallback as useCallback6, useEffect as useEffect5, useRef as useRef6, useSyncExternalStore as useSyncExternalStore5 } from "react";
|
|
7595
|
-
import { EmptyState as
|
|
7399
|
+
import { EmptyState as EmptyState3, StatusBar as StatusBar2, Toolbar as Toolbar2, ToolbarGroup } from "@xenosystem/components/chrome";
|
|
7596
7400
|
import { formatTick } from "@xenosystem/time-core";
|
|
7597
|
-
import { Fragment as
|
|
7401
|
+
import { Fragment as Fragment5, jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
7598
7402
|
var DASHES = ["none", "4 2", "1 2", "6 2 1 2"];
|
|
7599
7403
|
function CurvePanelView({ controller, showPresets = true }) {
|
|
7600
7404
|
const state = useSyncExternalStore5(controller.subscribe, controller.getState, controller.getState);
|
|
@@ -7675,7 +7479,7 @@ function CurvePanelView({ controller, showPresets = true }) {
|
|
|
7675
7479
|
const channels = state.curves?.channels ?? [];
|
|
7676
7480
|
return /* @__PURE__ */ jsxs9("div", { style: SHELL, children: [
|
|
7677
7481
|
/* @__PURE__ */ jsx10(
|
|
7678
|
-
|
|
7482
|
+
Toolbar2,
|
|
7679
7483
|
{
|
|
7680
7484
|
left: /* @__PURE__ */ jsx10(ToolbarGroup, { children: ["linear", "bezier", "hold", "step"].map((mode) => /* @__PURE__ */ jsx10("button", { type: "button", style: button(), onClick: () => controller.setInterpolation(mode), children: mode }, mode)) }),
|
|
7681
7485
|
right: /* @__PURE__ */ jsxs9(ToolbarGroup, { end: true, children: [
|
|
@@ -7685,7 +7489,7 @@ function CurvePanelView({ controller, showPresets = true }) {
|
|
|
7685
7489
|
}
|
|
7686
7490
|
),
|
|
7687
7491
|
showPresets ? /* @__PURE__ */ jsx10(
|
|
7688
|
-
|
|
7492
|
+
Toolbar2,
|
|
7689
7493
|
{
|
|
7690
7494
|
left: /* @__PURE__ */ jsx10(ToolbarGroup, { children: EASING_PRESETS.slice(0, 6).map((preset) => /* @__PURE__ */ jsx10(
|
|
7691
7495
|
"button",
|
|
@@ -7700,7 +7504,7 @@ function CurvePanelView({ controller, showPresets = true }) {
|
|
|
7700
7504
|
)) })
|
|
7701
7505
|
}
|
|
7702
7506
|
) : null,
|
|
7703
|
-
channels.length === 0 ? /* @__PURE__ */ jsx10(
|
|
7507
|
+
channels.length === 0 ? /* @__PURE__ */ jsx10(EmptyState3, { title: "No curves", hint: "Wire an animated property into this panel's input." }) : /* @__PURE__ */ jsx10(
|
|
7704
7508
|
"div",
|
|
7705
7509
|
{
|
|
7706
7510
|
ref: containerRef,
|
|
@@ -7814,7 +7618,7 @@ function CurvePanelView({ controller, showPresets = true }) {
|
|
|
7814
7618
|
}
|
|
7815
7619
|
),
|
|
7816
7620
|
/* @__PURE__ */ jsx10(
|
|
7817
|
-
|
|
7621
|
+
StatusBar2,
|
|
7818
7622
|
{
|
|
7819
7623
|
left: `${channels.length} channel${channels.length === 1 ? "" : "s"}`,
|
|
7820
7624
|
right: /* @__PURE__ */ jsx10("span", { className: "tabular-nums", children: state.playheadTick !== null ? formatTick(state.playheadTick, state.timebase) : "" })
|
|
@@ -7829,7 +7633,7 @@ function Handles({
|
|
|
7829
7633
|
scale
|
|
7830
7634
|
}) {
|
|
7831
7635
|
const sides = ["in", "out"];
|
|
7832
|
-
return /* @__PURE__ */ jsx10(
|
|
7636
|
+
return /* @__PURE__ */ jsx10(Fragment5, { children: sides.map((side) => {
|
|
7833
7637
|
const tangent = side === "in" ? keyframe.tangentIn : keyframe.tangentOut;
|
|
7834
7638
|
if (!tangent) return null;
|
|
7835
7639
|
const hx = scale.tickToX(keyframe.tick + tangent.x);
|
|
@@ -8469,7 +8273,7 @@ var viewportManifest = {
|
|
|
8469
8273
|
|
|
8470
8274
|
// src/edit/viewport/react/ViewportPanelView.tsx
|
|
8471
8275
|
import { useEffect as useEffect6, useRef as useRef7, useSyncExternalStore as useSyncExternalStore6 } from "react";
|
|
8472
|
-
import { Badge as
|
|
8276
|
+
import { Badge as Badge3, StatusBar as StatusBar3 } from "@xenosystem/components/chrome";
|
|
8473
8277
|
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
8474
8278
|
var SLOT_STYLE = {
|
|
8475
8279
|
"top-left": { top: 8, left: 8 },
|
|
@@ -8579,11 +8383,11 @@ function ViewportPanelView({
|
|
|
8579
8383
|
fontSize: 11,
|
|
8580
8384
|
zIndex: 20
|
|
8581
8385
|
},
|
|
8582
|
-
children: /* @__PURE__ */ jsx11(
|
|
8386
|
+
children: /* @__PURE__ */ jsx11(Badge3, { tone: "error", children: "graphics context lost \u2014 restoring" })
|
|
8583
8387
|
}
|
|
8584
8388
|
) : null,
|
|
8585
8389
|
showStats && state.stats ? /* @__PURE__ */ jsx11("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0, zIndex: 10 }, children: /* @__PURE__ */ jsx11(
|
|
8586
|
-
|
|
8390
|
+
StatusBar3,
|
|
8587
8391
|
{
|
|
8588
8392
|
left: state.stats.fps !== void 0 ? `${Math.round(state.stats.fps)} fps` : void 0,
|
|
8589
8393
|
right: state.surface ? `${state.surface.cssWidth}\xD7${state.surface.cssHeight} @${state.surface.dpr}\xD7` : void 0
|
|
@@ -9236,17 +9040,17 @@ var findManifest = {
|
|
|
9236
9040
|
// src/edit/find/react/FindPanelView.tsx
|
|
9237
9041
|
import { useSyncExternalStore as useSyncExternalStore7 } from "react";
|
|
9238
9042
|
import {
|
|
9239
|
-
Badge as
|
|
9240
|
-
EmptyState as
|
|
9241
|
-
IconButton as
|
|
9242
|
-
Row,
|
|
9243
|
-
RowList,
|
|
9244
|
-
ScrollArea as
|
|
9245
|
-
SearchField as
|
|
9043
|
+
Badge as Badge4,
|
|
9044
|
+
EmptyState as EmptyState4,
|
|
9045
|
+
IconButton as IconButton4,
|
|
9046
|
+
Row as Row2,
|
|
9047
|
+
RowList as RowList2,
|
|
9048
|
+
ScrollArea as ScrollArea3,
|
|
9049
|
+
SearchField as SearchField3,
|
|
9246
9050
|
Section as Section2,
|
|
9247
|
-
StatusBar as
|
|
9051
|
+
StatusBar as StatusBar4,
|
|
9248
9052
|
TextButton as TextButton2,
|
|
9249
|
-
Toolbar as
|
|
9053
|
+
Toolbar as Toolbar3,
|
|
9250
9054
|
ToolbarGroup as ToolbarGroup2
|
|
9251
9055
|
} from "@xenosystem/components/chrome";
|
|
9252
9056
|
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
@@ -9288,12 +9092,12 @@ function StatusLine({
|
|
|
9288
9092
|
hasText
|
|
9289
9093
|
}) {
|
|
9290
9094
|
if (status === "invalidPattern") {
|
|
9291
|
-
return /* @__PURE__ */ jsx12(
|
|
9095
|
+
return /* @__PURE__ */ jsx12(Badge4, { tone: "error", title: message ?? void 0, children: "invalid pattern" });
|
|
9292
9096
|
}
|
|
9293
9097
|
if (status === "failed") {
|
|
9294
|
-
return /* @__PURE__ */ jsx12(
|
|
9098
|
+
return /* @__PURE__ */ jsx12(Badge4, { tone: "error", title: message ?? void 0, children: "search failed" });
|
|
9295
9099
|
}
|
|
9296
|
-
if (status === "searching") return /* @__PURE__ */ jsx12(
|
|
9100
|
+
if (status === "searching") return /* @__PURE__ */ jsx12(Badge4, { children: "searching\u2026" });
|
|
9297
9101
|
if (!hasText || status === "idle") return null;
|
|
9298
9102
|
return /* @__PURE__ */ jsxs11("span", { style: { fontVariantNumeric: "tabular-nums", fontSize: 10, opacity: 0.55 }, children: [
|
|
9299
9103
|
displayIndex,
|
|
@@ -9319,7 +9123,7 @@ function FindPanelView({
|
|
|
9319
9123
|
}
|
|
9320
9124
|
};
|
|
9321
9125
|
const renderMatch = (match, index) => /* @__PURE__ */ jsx12(
|
|
9322
|
-
|
|
9126
|
+
Row2,
|
|
9323
9127
|
{
|
|
9324
9128
|
noIcon: true,
|
|
9325
9129
|
selected: index === state.index,
|
|
@@ -9343,10 +9147,10 @@ function FindPanelView({
|
|
|
9343
9147
|
let flatIndex = -1;
|
|
9344
9148
|
return /* @__PURE__ */ jsxs11("div", { style: { display: "flex", flexDirection: "column", height: "100%", minHeight: 0 }, onKeyDown, children: [
|
|
9345
9149
|
/* @__PURE__ */ jsx12(
|
|
9346
|
-
|
|
9150
|
+
Toolbar3,
|
|
9347
9151
|
{
|
|
9348
9152
|
left: /* @__PURE__ */ jsx12(
|
|
9349
|
-
|
|
9153
|
+
SearchField3,
|
|
9350
9154
|
{
|
|
9351
9155
|
value: state.text,
|
|
9352
9156
|
onChange: (value) => controller.setText(value),
|
|
@@ -9355,7 +9159,7 @@ function FindPanelView({
|
|
|
9355
9159
|
),
|
|
9356
9160
|
right: /* @__PURE__ */ jsxs11(ToolbarGroup2, { end: true, children: [
|
|
9357
9161
|
/* @__PURE__ */ jsx12(
|
|
9358
|
-
|
|
9162
|
+
IconButton4,
|
|
9359
9163
|
{
|
|
9360
9164
|
label: "Match case",
|
|
9361
9165
|
active: state.options.caseSensitive,
|
|
@@ -9364,7 +9168,7 @@ function FindPanelView({
|
|
|
9364
9168
|
}
|
|
9365
9169
|
),
|
|
9366
9170
|
/* @__PURE__ */ jsx12(
|
|
9367
|
-
|
|
9171
|
+
IconButton4,
|
|
9368
9172
|
{
|
|
9369
9173
|
label: "Whole word",
|
|
9370
9174
|
active: state.options.wholeWord,
|
|
@@ -9373,7 +9177,7 @@ function FindPanelView({
|
|
|
9373
9177
|
}
|
|
9374
9178
|
),
|
|
9375
9179
|
/* @__PURE__ */ jsx12(
|
|
9376
|
-
|
|
9180
|
+
IconButton4,
|
|
9377
9181
|
{
|
|
9378
9182
|
label: "Regular expression",
|
|
9379
9183
|
active: state.options.regex,
|
|
@@ -9385,7 +9189,7 @@ function FindPanelView({
|
|
|
9385
9189
|
}
|
|
9386
9190
|
),
|
|
9387
9191
|
/* @__PURE__ */ jsx12(
|
|
9388
|
-
|
|
9192
|
+
Toolbar3,
|
|
9389
9193
|
{
|
|
9390
9194
|
divided: false,
|
|
9391
9195
|
left: /* @__PURE__ */ jsx12(
|
|
@@ -9401,7 +9205,7 @@ function FindPanelView({
|
|
|
9401
9205
|
),
|
|
9402
9206
|
right: /* @__PURE__ */ jsxs11(ToolbarGroup2, { end: true, children: [
|
|
9403
9207
|
/* @__PURE__ */ jsx12(
|
|
9404
|
-
|
|
9208
|
+
IconButton4,
|
|
9405
9209
|
{
|
|
9406
9210
|
label: "Previous match",
|
|
9407
9211
|
disabled: state.matches.length === 0,
|
|
@@ -9410,7 +9214,7 @@ function FindPanelView({
|
|
|
9410
9214
|
}
|
|
9411
9215
|
),
|
|
9412
9216
|
/* @__PURE__ */ jsx12(
|
|
9413
|
-
|
|
9217
|
+
IconButton4,
|
|
9414
9218
|
{
|
|
9415
9219
|
label: "Next match",
|
|
9416
9220
|
disabled: state.matches.length === 0,
|
|
@@ -9424,10 +9228,10 @@ function FindPanelView({
|
|
|
9424
9228
|
),
|
|
9425
9229
|
state.message && state.status === "invalidPattern" ? /* @__PURE__ */ jsx12("div", { style: { padding: "2px 8px 4px", fontSize: 9, opacity: 0.6 }, children: state.message }) : null,
|
|
9426
9230
|
state.replaceVisible ? /* @__PURE__ */ jsx12(
|
|
9427
|
-
|
|
9231
|
+
Toolbar3,
|
|
9428
9232
|
{
|
|
9429
9233
|
left: /* @__PURE__ */ jsx12(
|
|
9430
|
-
|
|
9234
|
+
SearchField3,
|
|
9431
9235
|
{
|
|
9432
9236
|
value: state.replaceText,
|
|
9433
9237
|
onChange: (value) => controller.setReplaceText(value),
|
|
@@ -9444,24 +9248,24 @@ function FindPanelView({
|
|
|
9444
9248
|
] })
|
|
9445
9249
|
}
|
|
9446
9250
|
) : null,
|
|
9447
|
-
showResults ? /* @__PURE__ */ jsx12(
|
|
9448
|
-
|
|
9251
|
+
showResults ? /* @__PURE__ */ jsx12(ScrollArea3, { children: state.status === "idle" ? /* @__PURE__ */ jsx12(EmptyState4, { title: "Find", hint: "Type to search. Enter goes to the next match." }) : state.status === "invalidPattern" ? /* @__PURE__ */ jsx12(
|
|
9252
|
+
EmptyState4,
|
|
9449
9253
|
{
|
|
9450
9254
|
title: "Invalid pattern",
|
|
9451
9255
|
hint: state.message ?? "The expression could not be read. Fix it to search."
|
|
9452
9256
|
}
|
|
9453
|
-
) : state.status === "failed" ? /* @__PURE__ */ jsx12(
|
|
9257
|
+
) : state.status === "failed" ? /* @__PURE__ */ jsx12(EmptyState4, { title: "Search failed", hint: state.message ?? "The host could not complete the search." }) : state.noResults ? /* @__PURE__ */ jsx12(EmptyState4, { title: "No matches", hint: `Nothing in scope matches \u201C${state.text}\u201D.` }) : state.groups.length === 1 && state.groups[0].id === "" ? /* @__PURE__ */ jsx12(RowList2, { children: state.matches.map((m) => renderMatch(m, ++flatIndex)) }) : state.groups.map((group) => /* @__PURE__ */ jsx12(
|
|
9454
9258
|
Section2,
|
|
9455
9259
|
{
|
|
9456
9260
|
title: group.label || "Results",
|
|
9457
9261
|
flush: true,
|
|
9458
|
-
badge: /* @__PURE__ */ jsx12(
|
|
9459
|
-
children: /* @__PURE__ */ jsx12(
|
|
9262
|
+
badge: /* @__PURE__ */ jsx12(Badge4, { children: group.matches.length }),
|
|
9263
|
+
children: /* @__PURE__ */ jsx12(RowList2, { children: group.matches.map((m) => renderMatch(m, ++flatIndex)) })
|
|
9460
9264
|
},
|
|
9461
9265
|
group.id
|
|
9462
9266
|
)) }) : null,
|
|
9463
9267
|
/* @__PURE__ */ jsx12(
|
|
9464
|
-
|
|
9268
|
+
StatusBar4,
|
|
9465
9269
|
{
|
|
9466
9270
|
left: state.truncated ? `showing first ${state.matches.length}` : void 0,
|
|
9467
9271
|
right: state.options.scope
|
|
@@ -10111,17 +9915,17 @@ var commentsManifest = {
|
|
|
10111
9915
|
// src/edit/comments/react/CommentsPanelView.tsx
|
|
10112
9916
|
import { useSyncExternalStore as useSyncExternalStore8 } from "react";
|
|
10113
9917
|
import {
|
|
10114
|
-
Badge as
|
|
10115
|
-
EmptyState as
|
|
10116
|
-
ScrollArea as
|
|
9918
|
+
Badge as Badge5,
|
|
9919
|
+
EmptyState as EmptyState5,
|
|
9920
|
+
ScrollArea as ScrollArea4,
|
|
10117
9921
|
Section as Section3,
|
|
10118
9922
|
SegmentedControl as SegmentedControl2,
|
|
10119
|
-
StatusBar as
|
|
9923
|
+
StatusBar as StatusBar5,
|
|
10120
9924
|
TextButton as TextButton3,
|
|
10121
|
-
Toolbar as
|
|
9925
|
+
Toolbar as Toolbar4,
|
|
10122
9926
|
ToolbarGroup as ToolbarGroup3
|
|
10123
9927
|
} from "@xenosystem/components/chrome";
|
|
10124
|
-
import { Fragment as
|
|
9928
|
+
import { Fragment as Fragment6, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
10125
9929
|
var ANCHOR_BADGE = {
|
|
10126
9930
|
live: null,
|
|
10127
9931
|
stale: {
|
|
@@ -10161,8 +9965,8 @@ function ThreadCard({
|
|
|
10161
9965
|
},
|
|
10162
9966
|
children: /* @__PURE__ */ jsxs12("div", { style: { padding: "6px 8px", display: "flex", flexDirection: "column", gap: 4 }, children: [
|
|
10163
9967
|
/* @__PURE__ */ jsxs12("div", { style: { display: "flex", alignItems: "center", gap: 4 }, children: [
|
|
10164
|
-
badge ? /* @__PURE__ */ jsx13(
|
|
10165
|
-
thread.resolved ? /* @__PURE__ */ jsx13(
|
|
9968
|
+
badge ? /* @__PURE__ */ jsx13(Badge5, { tone: badge.tone, title: badge.title, children: badge.label }) : null,
|
|
9969
|
+
thread.resolved ? /* @__PURE__ */ jsx13(Badge5, { children: "resolved" }) : null,
|
|
10166
9970
|
/* @__PURE__ */ jsx13("span", { style: { marginLeft: "auto", fontSize: 9, opacity: 0.4 }, children: formatAge(thread.createdAt, now) })
|
|
10167
9971
|
] }),
|
|
10168
9972
|
thread.anchorLabel ? /* @__PURE__ */ jsx13(
|
|
@@ -10262,7 +10066,7 @@ function CommentsPanelView({
|
|
|
10262
10066
|
const resolved = state.threads.filter((t) => t.thread.resolved);
|
|
10263
10067
|
return /* @__PURE__ */ jsxs12("div", { style: { display: "flex", flexDirection: "column", height: "100%", minHeight: 0 }, children: [
|
|
10264
10068
|
/* @__PURE__ */ jsx13(
|
|
10265
|
-
|
|
10069
|
+
Toolbar4,
|
|
10266
10070
|
{
|
|
10267
10071
|
left: /* @__PURE__ */ jsx13(
|
|
10268
10072
|
SegmentedControl2,
|
|
@@ -10301,23 +10105,23 @@ function CommentsPanelView({
|
|
|
10301
10105
|
" about.",
|
|
10302
10106
|
state.filter.includeOrphaned === false ? /* @__PURE__ */ jsx13(TextButton3, { onClick: () => controller.setFilter({ includeOrphaned: true }), children: "Show" }) : null
|
|
10303
10107
|
] }) : null,
|
|
10304
|
-
/* @__PURE__ */ jsx13(
|
|
10108
|
+
/* @__PURE__ */ jsx13(ScrollArea4, { children: state.threads.length === 0 ? state.filteredEmpty ? (
|
|
10305
10109
|
// NOT "no comments". There are comments; this filter hides them, and telling a
|
|
10306
10110
|
// reviewer their feedback is gone is worse than telling them nothing.
|
|
10307
10111
|
/* @__PURE__ */ jsx13(
|
|
10308
|
-
|
|
10112
|
+
EmptyState5,
|
|
10309
10113
|
{
|
|
10310
10114
|
title: "Nothing matches this filter",
|
|
10311
10115
|
hint: `${state.totals.all} comment${state.totals.all === 1 ? "" : "s"} on this document.`
|
|
10312
10116
|
}
|
|
10313
10117
|
)
|
|
10314
10118
|
) : /* @__PURE__ */ jsx13(
|
|
10315
|
-
|
|
10119
|
+
EmptyState5,
|
|
10316
10120
|
{
|
|
10317
10121
|
title: "No comments",
|
|
10318
10122
|
hint: emptyHint ?? "Select something and add a comment."
|
|
10319
10123
|
}
|
|
10320
|
-
) : /* @__PURE__ */ jsxs12(
|
|
10124
|
+
) : /* @__PURE__ */ jsxs12(Fragment6, { children: [
|
|
10321
10125
|
open.map((view) => /* @__PURE__ */ jsx13(
|
|
10322
10126
|
ThreadCard,
|
|
10323
10127
|
{
|
|
@@ -10379,7 +10183,7 @@ function CommentsPanelView({
|
|
|
10379
10183
|
) })
|
|
10380
10184
|
] }),
|
|
10381
10185
|
/* @__PURE__ */ jsx13(
|
|
10382
|
-
|
|
10186
|
+
StatusBar5,
|
|
10383
10187
|
{
|
|
10384
10188
|
left: `${state.totals.open} open`,
|
|
10385
10189
|
right: state.totals.stale > 0 ? `${state.totals.stale} edited` : void 0
|
|
@@ -11551,8 +11355,8 @@ var nodegraphManifest = {
|
|
|
11551
11355
|
|
|
11552
11356
|
// src/edit/nodegraph/react/NodeGraphPanelView.tsx
|
|
11553
11357
|
import { useCallback as useCallback7, useEffect as useEffect7, useRef as useRef8, useSyncExternalStore as useSyncExternalStore9 } from "react";
|
|
11554
|
-
import { EmptyState as
|
|
11555
|
-
import { Fragment as
|
|
11358
|
+
import { EmptyState as EmptyState6, StatusBar as StatusBar6, Toolbar as Toolbar5, ToolbarGroup as ToolbarGroup4 } from "@xenosystem/components/chrome";
|
|
11359
|
+
import { Fragment as Fragment7, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
11556
11360
|
var HEADER_H2 = 24;
|
|
11557
11361
|
var PORT_ROW_H2 = 18;
|
|
11558
11362
|
function NodeGraphPanelView({ controller }) {
|
|
@@ -11633,7 +11437,7 @@ function NodeGraphPanelView({ controller }) {
|
|
|
11633
11437
|
const total = state.graph?.nodes.length ?? 0;
|
|
11634
11438
|
return /* @__PURE__ */ jsxs13("div", { style: SHELL2, children: [
|
|
11635
11439
|
/* @__PURE__ */ jsx14(
|
|
11636
|
-
|
|
11440
|
+
Toolbar5,
|
|
11637
11441
|
{
|
|
11638
11442
|
right: /* @__PURE__ */ jsxs13(ToolbarGroup4, { end: true, children: [
|
|
11639
11443
|
/* @__PURE__ */ jsx14("button", { type: "button", style: button2(), onClick: () => controller.fit(false), children: "Fit" }),
|
|
@@ -11641,7 +11445,7 @@ function NodeGraphPanelView({ controller }) {
|
|
|
11641
11445
|
] })
|
|
11642
11446
|
}
|
|
11643
11447
|
),
|
|
11644
|
-
total === 0 ? /* @__PURE__ */ jsx14(
|
|
11448
|
+
total === 0 ? /* @__PURE__ */ jsx14(EmptyState6, { title: "Empty graph", hint: "Wire a host graph into this panel's input." }) : /* @__PURE__ */ jsxs13(
|
|
11645
11449
|
"div",
|
|
11646
11450
|
{
|
|
11647
11451
|
ref: containerRef,
|
|
@@ -11705,7 +11509,7 @@ function NodeGraphPanelView({ controller }) {
|
|
|
11705
11509
|
}
|
|
11706
11510
|
),
|
|
11707
11511
|
/* @__PURE__ */ jsx14(
|
|
11708
|
-
|
|
11512
|
+
StatusBar6,
|
|
11709
11513
|
{
|
|
11710
11514
|
left: `${total} node${total === 1 ? "" : "s"}`,
|
|
11711
11515
|
right: /* @__PURE__ */ jsxs13("span", { className: "tabular-nums", children: [
|
|
@@ -11775,7 +11579,7 @@ function NodeRect({ node, selected, zoom }) {
|
|
|
11775
11579
|
children: node.title
|
|
11776
11580
|
}
|
|
11777
11581
|
),
|
|
11778
|
-
node.collapsed ? null : /* @__PURE__ */ jsxs13(
|
|
11582
|
+
node.collapsed ? null : /* @__PURE__ */ jsxs13(Fragment7, { children: [
|
|
11779
11583
|
node.inputs.map((port, i) => /* @__PURE__ */ jsx14(
|
|
11780
11584
|
Port,
|
|
11781
11585
|
{
|
|
@@ -13080,22 +12884,22 @@ var treeManifest = {
|
|
|
13080
12884
|
// src/edit/tree/react/TreePanelView.tsx
|
|
13081
12885
|
import { useCallback as useCallback8, useEffect as useEffect8, useRef as useRef9, useState as useState2, useSyncExternalStore as useSyncExternalStore10 } from "react";
|
|
13082
12886
|
import {
|
|
13083
|
-
Badge as
|
|
13084
|
-
EmptyState as
|
|
12887
|
+
Badge as Badge6,
|
|
12888
|
+
EmptyState as EmptyState7,
|
|
13085
12889
|
ErrorState,
|
|
13086
|
-
IconButton as
|
|
12890
|
+
IconButton as IconButton5,
|
|
13087
12891
|
LoadingState,
|
|
13088
|
-
Row as
|
|
13089
|
-
ScrollArea as
|
|
13090
|
-
SearchField as
|
|
13091
|
-
StatusBar as
|
|
13092
|
-
Toolbar as
|
|
12892
|
+
Row as Row3,
|
|
12893
|
+
ScrollArea as ScrollArea5,
|
|
12894
|
+
SearchField as SearchField4,
|
|
12895
|
+
StatusBar as StatusBar7,
|
|
12896
|
+
Toolbar as Toolbar6,
|
|
13093
12897
|
ToolbarGroup as ToolbarGroup5
|
|
13094
12898
|
} from "@xenosystem/components/chrome";
|
|
13095
12899
|
import { computeWindow as computeWindow3 } from "@xenosystem/tree-core";
|
|
13096
12900
|
|
|
13097
12901
|
// src/edit/tree/react/icons.tsx
|
|
13098
|
-
import { Fragment as
|
|
12902
|
+
import { Fragment as Fragment8, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
13099
12903
|
function Svg({ children, size = 11 }) {
|
|
13100
12904
|
return /* @__PURE__ */ jsx15(
|
|
13101
12905
|
"svg",
|
|
@@ -13148,37 +12952,37 @@ function RefreshGlyph() {
|
|
|
13148
12952
|
}
|
|
13149
12953
|
var PATHS = {
|
|
13150
12954
|
folder: /* @__PURE__ */ jsx15("path", { d: "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }),
|
|
13151
|
-
file: /* @__PURE__ */ jsxs14(
|
|
12955
|
+
file: /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13152
12956
|
/* @__PURE__ */ jsx15("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
|
|
13153
12957
|
/* @__PURE__ */ jsx15("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" })
|
|
13154
12958
|
] }),
|
|
13155
|
-
"folder-tree": /* @__PURE__ */ jsxs14(
|
|
12959
|
+
"folder-tree": /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13156
12960
|
/* @__PURE__ */ jsx15("path", { d: "M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z" }),
|
|
13157
12961
|
/* @__PURE__ */ jsx15("path", { d: "M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2a1 1 0 0 0-.8-.4h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z" }),
|
|
13158
12962
|
/* @__PURE__ */ jsx15("path", { d: "M3 5a2 2 0 0 0 2 2h3" }),
|
|
13159
12963
|
/* @__PURE__ */ jsx15("path", { d: "M3 3v13a2 2 0 0 0 2 2h3" })
|
|
13160
12964
|
] }),
|
|
13161
|
-
box: /* @__PURE__ */ jsxs14(
|
|
12965
|
+
box: /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13162
12966
|
/* @__PURE__ */ jsx15("path", { d: "M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" }),
|
|
13163
12967
|
/* @__PURE__ */ jsx15("path", { d: "m3.3 7 8.7 5 8.7-5" }),
|
|
13164
12968
|
/* @__PURE__ */ jsx15("path", { d: "M12 22V12" })
|
|
13165
12969
|
] }),
|
|
13166
12970
|
component: /* @__PURE__ */ jsx15("path", { d: "m12 2 4 4-4 4-4-4Zm0 12 4 4-4 4-4-4ZM2 12l4-4 4 4-4 4Zm12 0 4-4 4 4-4 4Z" }),
|
|
13167
|
-
"file-text": /* @__PURE__ */ jsxs14(
|
|
12971
|
+
"file-text": /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13168
12972
|
/* @__PURE__ */ jsx15("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
|
|
13169
12973
|
/* @__PURE__ */ jsx15("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" }),
|
|
13170
12974
|
/* @__PURE__ */ jsx15("path", { d: "M8 13h8M8 17h5" })
|
|
13171
12975
|
] }),
|
|
13172
|
-
heading: /* @__PURE__ */ jsx15(
|
|
13173
|
-
bot: /* @__PURE__ */ jsxs14(
|
|
12976
|
+
heading: /* @__PURE__ */ jsx15(Fragment8, { children: /* @__PURE__ */ jsx15("path", { d: "M6 4v16M18 4v16M6 12h12" }) }),
|
|
12977
|
+
bot: /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13174
12978
|
/* @__PURE__ */ jsx15("rect", { x: "3", y: "8", width: "18", height: "12", rx: "2" }),
|
|
13175
12979
|
/* @__PURE__ */ jsx15("path", { d: "M12 4v4M8 14h.01M16 14h.01" })
|
|
13176
12980
|
] }),
|
|
13177
|
-
link: /* @__PURE__ */ jsxs14(
|
|
12981
|
+
link: /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13178
12982
|
/* @__PURE__ */ jsx15("path", { d: "M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.8 1.7" }),
|
|
13179
12983
|
/* @__PURE__ */ jsx15("path", { d: "M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.8-1.7" })
|
|
13180
12984
|
] }),
|
|
13181
|
-
"link-2-off": /* @__PURE__ */ jsxs14(
|
|
12985
|
+
"link-2-off": /* @__PURE__ */ jsxs14(Fragment8, { children: [
|
|
13182
12986
|
/* @__PURE__ */ jsx15("path", { d: "M9 17H7A5 5 0 0 1 7 7" }),
|
|
13183
12987
|
/* @__PURE__ */ jsx15("path", { d: "M15 7h2a5 5 0 0 1 4 8" }),
|
|
13184
12988
|
/* @__PURE__ */ jsx15("path", { d: "M8 12h4" }),
|
|
@@ -13191,7 +12995,7 @@ function TreeIcon({ name, size = 11 }) {
|
|
|
13191
12995
|
}
|
|
13192
12996
|
|
|
13193
12997
|
// src/edit/tree/react/TreePanelView.tsx
|
|
13194
|
-
import { Fragment as
|
|
12998
|
+
import { Fragment as Fragment9, jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
13195
12999
|
function TreePanelView({
|
|
13196
13000
|
controller,
|
|
13197
13001
|
rowHeight = 24,
|
|
@@ -13223,7 +13027,7 @@ function TreePanelView({
|
|
|
13223
13027
|
const sourceState = source?.sourceState ?? "idle";
|
|
13224
13028
|
const body = (() => {
|
|
13225
13029
|
if (!source || sourceState === "idle") {
|
|
13226
|
-
return /* @__PURE__ */ jsx16(
|
|
13030
|
+
return /* @__PURE__ */ jsx16(EmptyState7, { title: "No source", hint: emptyHint ?? "Connect a source to browse it." });
|
|
13227
13031
|
}
|
|
13228
13032
|
if (sourceState === "loading" && state.rows.length === 0) {
|
|
13229
13033
|
return /* @__PURE__ */ jsx16(LoadingState, { label: source.sourceMessage ?? "Loading\u2026" });
|
|
@@ -13240,8 +13044,8 @@ function TreePanelView({
|
|
|
13240
13044
|
);
|
|
13241
13045
|
}
|
|
13242
13046
|
if (state.rows.length === 0) {
|
|
13243
|
-
return state.filter ? /* @__PURE__ */ jsx16(
|
|
13244
|
-
|
|
13047
|
+
return state.filter ? /* @__PURE__ */ jsx16(EmptyState7, { title: "No matches", hint: `Nothing matches \u201C${state.filter}\u201D.` }) : /* @__PURE__ */ jsx16(
|
|
13048
|
+
EmptyState7,
|
|
13245
13049
|
{
|
|
13246
13050
|
title: "Nothing here",
|
|
13247
13051
|
hint: emptyHint ?? source.sourceMessage ?? "This source has no items yet."
|
|
@@ -13256,7 +13060,7 @@ function TreePanelView({
|
|
|
13256
13060
|
overscan
|
|
13257
13061
|
});
|
|
13258
13062
|
const slice = state.rows.slice(window2.startIndex, window2.endIndex);
|
|
13259
|
-
return /* @__PURE__ */ jsx16(
|
|
13063
|
+
return /* @__PURE__ */ jsx16(ScrollArea5, { children: /* @__PURE__ */ jsx16(
|
|
13260
13064
|
"div",
|
|
13261
13065
|
{
|
|
13262
13066
|
ref: scrollRef,
|
|
@@ -13288,10 +13092,10 @@ function TreePanelView({
|
|
|
13288
13092
|
})();
|
|
13289
13093
|
return /* @__PURE__ */ jsxs15("div", { style: { display: "flex", flexDirection: "column", height: "100%", minHeight: 0 }, children: [
|
|
13290
13094
|
/* @__PURE__ */ jsx16(
|
|
13291
|
-
|
|
13095
|
+
Toolbar6,
|
|
13292
13096
|
{
|
|
13293
13097
|
left: showSearch ? /* @__PURE__ */ jsx16(
|
|
13294
|
-
|
|
13098
|
+
SearchField4,
|
|
13295
13099
|
{
|
|
13296
13100
|
value: state.filter,
|
|
13297
13101
|
onChange: (term) => controller.setFilter(term),
|
|
@@ -13299,22 +13103,22 @@ function TreePanelView({
|
|
|
13299
13103
|
}
|
|
13300
13104
|
) : void 0,
|
|
13301
13105
|
right: /* @__PURE__ */ jsxs15(ToolbarGroup5, { end: true, children: [
|
|
13302
|
-
/* @__PURE__ */ jsx16(
|
|
13106
|
+
/* @__PURE__ */ jsx16(IconButton5, { icon: /* @__PURE__ */ jsx16(ExpandGlyph, {}), label: "Expand all", onClick: () => controller.expandAll() }),
|
|
13303
13107
|
/* @__PURE__ */ jsx16(
|
|
13304
|
-
|
|
13108
|
+
IconButton5,
|
|
13305
13109
|
{
|
|
13306
13110
|
icon: /* @__PURE__ */ jsx16(CollapseGlyph, {}),
|
|
13307
13111
|
label: "Collapse all",
|
|
13308
13112
|
onClick: () => controller.collapseAll()
|
|
13309
13113
|
}
|
|
13310
13114
|
),
|
|
13311
|
-
/* @__PURE__ */ jsx16(
|
|
13115
|
+
/* @__PURE__ */ jsx16(IconButton5, { icon: /* @__PURE__ */ jsx16(RefreshGlyph, {}), label: "Refresh", onClick: () => controller.refresh() })
|
|
13312
13116
|
] })
|
|
13313
13117
|
}
|
|
13314
13118
|
),
|
|
13315
13119
|
body,
|
|
13316
13120
|
/* @__PURE__ */ jsx16(
|
|
13317
|
-
|
|
13121
|
+
StatusBar7,
|
|
13318
13122
|
{
|
|
13319
13123
|
left: `${state.rows.length} item${state.rows.length === 1 ? "" : "s"}`,
|
|
13320
13124
|
right: state.selection.length > 0 ? `${state.selection.length} selected` : void 0
|
|
@@ -13373,7 +13177,7 @@ function TreeRowView({
|
|
|
13373
13177
|
},
|
|
13374
13178
|
title: drop?.reason,
|
|
13375
13179
|
children: /* @__PURE__ */ jsx16(
|
|
13376
|
-
|
|
13180
|
+
Row3,
|
|
13377
13181
|
{
|
|
13378
13182
|
role: "treeitem",
|
|
13379
13183
|
"aria-expanded": row.container ? row.expanded : void 0,
|
|
@@ -13408,7 +13212,7 @@ function TreeRowView({
|
|
|
13408
13212
|
onPointerUp: () => {
|
|
13409
13213
|
if (state.drag) controller.endDrag();
|
|
13410
13214
|
},
|
|
13411
|
-
icon: /* @__PURE__ */ jsxs15(
|
|
13215
|
+
icon: /* @__PURE__ */ jsxs15(Fragment9, { children: [
|
|
13412
13216
|
twisty,
|
|
13413
13217
|
/* @__PURE__ */ jsx16(NodeIcon, { icon: node.icon ?? defaultIconFor(node.kind) })
|
|
13414
13218
|
] }),
|
|
@@ -13438,15 +13242,15 @@ function TreeRowView({
|
|
|
13438
13242
|
}
|
|
13439
13243
|
) : node.label,
|
|
13440
13244
|
meta: /* @__PURE__ */ jsx16(ChildStateChip, { row, controller }),
|
|
13441
|
-
trailing: /* @__PURE__ */ jsxs15(
|
|
13245
|
+
trailing: /* @__PURE__ */ jsxs15(Fragment9, { children: [
|
|
13442
13246
|
columns?.map((columnId) => /* @__PURE__ */ jsx16("span", { style: { opacity: 0.7, fontVariantNumeric: "tabular-nums" }, children: node.columns?.[columnId] ?? "" }, columnId)),
|
|
13443
13247
|
node.glyphs?.map((glyph) => /* @__PURE__ */ jsx16("span", { title: glyph.title, style: { display: "flex", opacity: 0.7 }, children: /* @__PURE__ */ jsx16(NodeIcon, { icon: glyph.icon }) }, glyph.id)),
|
|
13444
13248
|
node.badges?.map((badge) => (
|
|
13445
13249
|
// Opaque: the host formatted the text, the panel only places it.
|
|
13446
|
-
/* @__PURE__ */ jsx16(
|
|
13250
|
+
/* @__PURE__ */ jsx16(Badge6, { tone: badge.tone, className: badge.title ? void 0 : void 0, children: badge.text }, badge.id)
|
|
13447
13251
|
)),
|
|
13448
13252
|
node.actions?.map((action) => /* @__PURE__ */ jsx16(
|
|
13449
|
-
|
|
13253
|
+
IconButton5,
|
|
13450
13254
|
{
|
|
13451
13255
|
size: "sm",
|
|
13452
13256
|
icon: /* @__PURE__ */ jsx16(NodeIcon, { icon: action.icon }),
|
|
@@ -13472,7 +13276,7 @@ function ChildStateChip({
|
|
|
13472
13276
|
}
|
|
13473
13277
|
if (row.childState === "error") {
|
|
13474
13278
|
const error = row.node.error;
|
|
13475
|
-
return /* @__PURE__ */ jsx16(
|
|
13279
|
+
return /* @__PURE__ */ jsx16(Badge6, { tone: "error", children: error?.code === "denied" ? "no access" : error?.code ?? "failed" });
|
|
13476
13280
|
}
|
|
13477
13281
|
if (row.node.hasMore && row.expanded) {
|
|
13478
13282
|
return /* @__PURE__ */ jsx16(
|
|
@@ -13489,7 +13293,7 @@ function ChildStateChip({
|
|
|
13489
13293
|
);
|
|
13490
13294
|
}
|
|
13491
13295
|
if (row.node.truncatedAt !== void 0) {
|
|
13492
|
-
return /* @__PURE__ */ jsx16(
|
|
13296
|
+
return /* @__PURE__ */ jsx16(Badge6, { tone: "warning", children: `first ${row.node.truncatedAt}` });
|
|
13493
13297
|
}
|
|
13494
13298
|
if (row.expanded && isEmptyContainer(row.node)) {
|
|
13495
13299
|
return /* @__PURE__ */ jsx16("span", { style: { opacity: 0.4, fontSize: 9 }, children: "empty" });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenosystem/blocks",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.4",
|
|
4
4
|
"description": "XENO Blocks — rung 3 of the front ladder: components composed into a contract-bearing unit (manifest: ports, intents, commands, agent surface), rendered by @xenosystem/workbench. ONE package, one subpath per family (/auth, /edit, /data, /time, /ops, /trust, /agent), one named export per block — XENO PACKAGE NAMING - STANDARD.md.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"@duckdb/duckdb-wasm": ">=1.28.0",
|
|
62
62
|
"@xenosystem/block-sdk": "^0.3.0",
|
|
63
|
-
"@xenosystem/components": ">=0.
|
|
63
|
+
"@xenosystem/components": ">=0.13.1 <1",
|
|
64
64
|
"@xenosystem/data-core": "^0.1.0",
|
|
65
65
|
"@xenosystem/elements-react": ">=0.0.1",
|
|
66
66
|
"@xenosystem/time-core": "^0.1.0",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"@types/react": "^19.0.0",
|
|
77
77
|
"@types/react-dom": "^19.0.0",
|
|
78
78
|
"@xenosystem/block-sdk": "^0.3.1",
|
|
79
|
-
"@xenosystem/components": "^0.
|
|
79
|
+
"@xenosystem/components": "^0.13.1",
|
|
80
80
|
"@xenosystem/data-core": "^0.1.0",
|
|
81
81
|
"@xenosystem/elements-react": "0.0.1",
|
|
82
82
|
"@xenosystem/time-core": "^0.1.0",
|