@xenosystem/blocks 0.11.2 → 0.11.3
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 +6 -0
- package/dist/edit/index.js +170 -598
- package/package.json +3 -3
package/dist/edit/index.d.ts
CHANGED
|
@@ -1482,6 +1482,12 @@ declare function ariaSliderProps(field: XenoInspectorField, value: number | null
|
|
|
1482
1482
|
interface InspectorPanelViewProps {
|
|
1483
1483
|
controller: InspectorPanelController;
|
|
1484
1484
|
}
|
|
1485
|
+
/**
|
|
1486
|
+
* The inspector shell over the chrome family: search, the target chip, the multi-select banner,
|
|
1487
|
+
* sections with an enable switch / badge / actions / add menu, and one `Field` row per property with
|
|
1488
|
+
* the keyframe cluster leading and bind-token / reset / easing trailing. The keyboard model and every
|
|
1489
|
+
* intent stay in the controller.
|
|
1490
|
+
*/
|
|
1485
1491
|
declare function InspectorPanelView({ controller }: InspectorPanelViewProps): ReactElement;
|
|
1486
1492
|
|
|
1487
1493
|
/**
|
package/dist/edit/index.js
CHANGED
|
@@ -3038,270 +3038,7 @@ var InspectorPanelController = class {
|
|
|
3038
3038
|
|
|
3039
3039
|
// src/edit/inspector/react/InspectorPanelView.tsx
|
|
3040
3040
|
import { useCallback as useCallback3, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
3041
|
-
|
|
3042
|
-
// src/edit/inspector/react/styles.ts
|
|
3043
|
-
var S2 = {
|
|
3044
|
-
// ── Shell ──────────────────────────────────────────────────────────────────
|
|
3045
|
-
root: {
|
|
3046
|
-
display: "flex",
|
|
3047
|
-
flexDirection: "column",
|
|
3048
|
-
height: "100%",
|
|
3049
|
-
minHeight: 0,
|
|
3050
|
-
fontSize: 11,
|
|
3051
|
-
color: "var(--xeno-text)",
|
|
3052
|
-
background: "var(--xeno-canvas)"
|
|
3053
|
-
},
|
|
3054
|
-
header: {
|
|
3055
|
-
display: "flex",
|
|
3056
|
-
alignItems: "center",
|
|
3057
|
-
gap: 6,
|
|
3058
|
-
padding: "4px 6px",
|
|
3059
|
-
background: "var(--xeno-panel-header)",
|
|
3060
|
-
flex: "0 0 auto"
|
|
3061
|
-
},
|
|
3062
|
-
search: {
|
|
3063
|
-
flex: "1 1 auto",
|
|
3064
|
-
minWidth: 0,
|
|
3065
|
-
height: 18,
|
|
3066
|
-
background: "var(--xeno-canvas)",
|
|
3067
|
-
color: "inherit",
|
|
3068
|
-
border: "1px solid var(--xeno-border)",
|
|
3069
|
-
borderRadius: 2,
|
|
3070
|
-
fontSize: 11,
|
|
3071
|
-
padding: "0 6px",
|
|
3072
|
-
outline: "none"
|
|
3073
|
-
},
|
|
3074
|
-
targetChip: {
|
|
3075
|
-
fontSize: 9,
|
|
3076
|
-
color: "var(--xeno-muted)",
|
|
3077
|
-
whiteSpace: "nowrap",
|
|
3078
|
-
flex: "0 0 auto"
|
|
3079
|
-
},
|
|
3080
|
-
banner: {
|
|
3081
|
-
padding: "3px 6px",
|
|
3082
|
-
fontSize: 9,
|
|
3083
|
-
color: "var(--xeno-muted)",
|
|
3084
|
-
background: "var(--xeno-border-subtle)",
|
|
3085
|
-
flex: "0 0 auto"
|
|
3086
|
-
},
|
|
3087
|
-
scroll: { flex: "1 1 auto", minHeight: 0, overflowY: "auto", overflowX: "hidden", outline: "none" },
|
|
3088
|
-
empty: { padding: 12, fontSize: 10, opacity: 0.4, textTransform: "uppercase", letterSpacing: "0.08em" },
|
|
3089
|
-
// ── Section ────────────────────────────────────────────────────────────────
|
|
3090
|
-
sectionHeader: {
|
|
3091
|
-
display: "flex",
|
|
3092
|
-
alignItems: "center",
|
|
3093
|
-
gap: 4,
|
|
3094
|
-
height: 20,
|
|
3095
|
-
padding: "0 6px",
|
|
3096
|
-
background: "var(--xeno-border-subtle)",
|
|
3097
|
-
cursor: "default",
|
|
3098
|
-
userSelect: "none"
|
|
3099
|
-
},
|
|
3100
|
-
sectionTitle: {
|
|
3101
|
-
fontSize: 9,
|
|
3102
|
-
fontWeight: 600,
|
|
3103
|
-
letterSpacing: "0.06em",
|
|
3104
|
-
textTransform: "uppercase",
|
|
3105
|
-
color: "var(--xeno-muted)",
|
|
3106
|
-
flex: "1 1 auto",
|
|
3107
|
-
minWidth: 0,
|
|
3108
|
-
overflow: "hidden",
|
|
3109
|
-
textOverflow: "ellipsis",
|
|
3110
|
-
whiteSpace: "nowrap"
|
|
3111
|
-
},
|
|
3112
|
-
sectionBadge: {
|
|
3113
|
-
fontSize: 8,
|
|
3114
|
-
padding: "0 3px",
|
|
3115
|
-
height: 12,
|
|
3116
|
-
lineHeight: "12px",
|
|
3117
|
-
borderRadius: 2,
|
|
3118
|
-
background: "var(--xeno-border)",
|
|
3119
|
-
color: "var(--xeno-muted)",
|
|
3120
|
-
flex: "0 0 auto"
|
|
3121
|
-
},
|
|
3122
|
-
sectionBody: { padding: "3px 0" },
|
|
3123
|
-
sectionBodyOff: { opacity: 0.4, pointerEvents: "none" },
|
|
3124
|
-
emptyHint: { padding: "4px 8px", fontSize: 10, color: "var(--xeno-muted)" },
|
|
3125
|
-
// ── Field row ──────────────────────────────────────────────────────────────
|
|
3126
|
-
fieldRow: {
|
|
3127
|
-
display: "flex",
|
|
3128
|
-
alignItems: "center",
|
|
3129
|
-
gap: 4,
|
|
3130
|
-
minHeight: 20,
|
|
3131
|
-
padding: "1px 6px",
|
|
3132
|
-
boxSizing: "border-box"
|
|
3133
|
-
},
|
|
3134
|
-
fieldRowFocused: { background: "var(--xeno-border-subtle)" },
|
|
3135
|
-
fieldLabel: {
|
|
3136
|
-
fontSize: 10,
|
|
3137
|
-
color: "var(--xeno-muted)",
|
|
3138
|
-
flex: "0 0 auto",
|
|
3139
|
-
overflow: "hidden",
|
|
3140
|
-
textOverflow: "ellipsis",
|
|
3141
|
-
whiteSpace: "nowrap"
|
|
3142
|
-
},
|
|
3143
|
-
fieldControl: { flex: "1 1 auto", minWidth: 0, display: "flex", alignItems: "center", gap: 3 },
|
|
3144
|
-
description: { fontSize: 9, color: "var(--xeno-muted)", opacity: 0.8, padding: "0 6px 3px" },
|
|
3145
|
-
// ── Inputs ─────────────────────────────────────────────────────────────────
|
|
3146
|
-
input: {
|
|
3147
|
-
width: "100%",
|
|
3148
|
-
minWidth: 0,
|
|
3149
|
-
height: 18,
|
|
3150
|
-
background: "var(--xeno-canvas)",
|
|
3151
|
-
color: "inherit",
|
|
3152
|
-
border: "1px solid var(--xeno-border)",
|
|
3153
|
-
borderRadius: 2,
|
|
3154
|
-
fontSize: 11,
|
|
3155
|
-
padding: "0 4px",
|
|
3156
|
-
outline: "none",
|
|
3157
|
-
fontVariantNumeric: "tabular-nums",
|
|
3158
|
-
boxSizing: "border-box"
|
|
3159
|
-
},
|
|
3160
|
-
mixedInput: { fontStyle: "italic", color: "var(--xeno-muted)" },
|
|
3161
|
-
readOnlyInput: { background: "transparent", border: "1px solid transparent", cursor: "default" },
|
|
3162
|
-
textarea: { height: "auto", minHeight: 34, padding: "3px 4px", resize: "vertical", lineHeight: 1.4 },
|
|
3163
|
-
mono: { fontFamily: "var(--xeno-font-mono)", fontSize: 10 },
|
|
3164
|
-
numberCell: { display: "flex", alignItems: "center", gap: 2, flex: "1 1 0", minWidth: 0, position: "relative" },
|
|
3165
|
-
axisLabel: {
|
|
3166
|
-
fontSize: 9,
|
|
3167
|
-
color: "var(--xeno-muted)",
|
|
3168
|
-
width: 9,
|
|
3169
|
-
textAlign: "center",
|
|
3170
|
-
flex: "0 0 auto",
|
|
3171
|
-
userSelect: "none"
|
|
3172
|
-
},
|
|
3173
|
-
sliderTrack: {
|
|
3174
|
-
position: "absolute",
|
|
3175
|
-
left: 0,
|
|
3176
|
-
right: 0,
|
|
3177
|
-
bottom: 0,
|
|
3178
|
-
height: 1,
|
|
3179
|
-
background: "var(--xeno-border)",
|
|
3180
|
-
pointerEvents: "none"
|
|
3181
|
-
},
|
|
3182
|
-
sliderFill: { display: "block", height: "100%", background: "var(--xeno-active)" },
|
|
3183
|
-
vectorRow: { display: "flex", alignItems: "center", gap: 3, flex: "1 1 auto", minWidth: 0 },
|
|
3184
|
-
// ── Toggle (rectangle track + square knob) ─────────────────────────────────
|
|
3185
|
-
toggleTrack: {
|
|
3186
|
-
width: 22,
|
|
3187
|
-
height: 12,
|
|
3188
|
-
borderRadius: 2,
|
|
3189
|
-
border: "none",
|
|
3190
|
-
padding: 1,
|
|
3191
|
-
cursor: "pointer",
|
|
3192
|
-
flex: "0 0 auto",
|
|
3193
|
-
display: "flex",
|
|
3194
|
-
alignItems: "center"
|
|
3195
|
-
},
|
|
3196
|
-
toggleKnob: {
|
|
3197
|
-
width: 10,
|
|
3198
|
-
height: 10,
|
|
3199
|
-
background: "var(--xeno-text)",
|
|
3200
|
-
display: "block",
|
|
3201
|
-
transition: "transform 80ms ease, border-radius 80ms ease"
|
|
3202
|
-
},
|
|
3203
|
-
// ── Segmented ──────────────────────────────────────────────────────────────
|
|
3204
|
-
segmented: { display: "flex", gap: 1, flex: "1 1 auto", minWidth: 0 },
|
|
3205
|
-
segment: {
|
|
3206
|
-
flex: "1 1 0",
|
|
3207
|
-
minWidth: 0,
|
|
3208
|
-
height: 18,
|
|
3209
|
-
background: "var(--xeno-border-subtle)",
|
|
3210
|
-
color: "inherit",
|
|
3211
|
-
border: "none",
|
|
3212
|
-
borderRadius: 2,
|
|
3213
|
-
fontSize: 10,
|
|
3214
|
-
cursor: "pointer",
|
|
3215
|
-
padding: "0 4px",
|
|
3216
|
-
overflow: "hidden",
|
|
3217
|
-
textOverflow: "ellipsis",
|
|
3218
|
-
whiteSpace: "nowrap"
|
|
3219
|
-
},
|
|
3220
|
-
segmentActive: { background: "var(--xeno-control)" },
|
|
3221
|
-
// ── Color ──────────────────────────────────────────────────────────────────
|
|
3222
|
-
colorCell: {
|
|
3223
|
-
display: "flex",
|
|
3224
|
-
alignItems: "center",
|
|
3225
|
-
gap: 4,
|
|
3226
|
-
flex: "1 1 auto",
|
|
3227
|
-
minWidth: 0,
|
|
3228
|
-
height: 18,
|
|
3229
|
-
background: "var(--xeno-canvas)",
|
|
3230
|
-
border: "1px solid var(--xeno-border)",
|
|
3231
|
-
borderRadius: 2,
|
|
3232
|
-
padding: "0 4px",
|
|
3233
|
-
color: "inherit",
|
|
3234
|
-
cursor: "pointer"
|
|
3235
|
-
},
|
|
3236
|
-
swatch: { width: 10, height: 10, borderRadius: 2, flex: "0 0 auto" },
|
|
3237
|
-
colorText: { fontSize: 10, fontVariantNumeric: "tabular-nums", overflow: "hidden", textOverflow: "ellipsis" },
|
|
3238
|
-
// ── List ───────────────────────────────────────────────────────────────────
|
|
3239
|
-
list: { display: "flex", flexDirection: "column", gap: 2, flex: "1 1 auto", minWidth: 0 },
|
|
3240
|
-
listRow: { display: "flex", alignItems: "center", gap: 2 },
|
|
3241
|
-
listLabel: { flex: "1 1 auto", minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", fontSize: 10 },
|
|
3242
|
-
infoValue: { fontSize: 10, color: "var(--xeno-text)", overflow: "hidden", textOverflow: "ellipsis" },
|
|
3243
|
-
// ── Chrome ─────────────────────────────────────────────────────────────────
|
|
3244
|
-
iconBtn: {
|
|
3245
|
-
display: "flex",
|
|
3246
|
-
alignItems: "center",
|
|
3247
|
-
justifyContent: "center",
|
|
3248
|
-
width: 14,
|
|
3249
|
-
height: 14,
|
|
3250
|
-
padding: 0,
|
|
3251
|
-
border: "none",
|
|
3252
|
-
borderRadius: 2,
|
|
3253
|
-
background: "transparent",
|
|
3254
|
-
color: "inherit",
|
|
3255
|
-
cursor: "pointer",
|
|
3256
|
-
flex: "0 0 auto"
|
|
3257
|
-
},
|
|
3258
|
-
miniBtn: {
|
|
3259
|
-
width: 14,
|
|
3260
|
-
height: 14,
|
|
3261
|
-
padding: 0,
|
|
3262
|
-
border: "none",
|
|
3263
|
-
borderRadius: 2,
|
|
3264
|
-
background: "var(--xeno-border-subtle)",
|
|
3265
|
-
color: "inherit",
|
|
3266
|
-
cursor: "pointer",
|
|
3267
|
-
fontSize: 9,
|
|
3268
|
-
flex: "0 0 auto"
|
|
3269
|
-
},
|
|
3270
|
-
textBtn: {
|
|
3271
|
-
background: "transparent",
|
|
3272
|
-
border: "none",
|
|
3273
|
-
color: "var(--xeno-muted)",
|
|
3274
|
-
cursor: "pointer",
|
|
3275
|
-
fontSize: 10,
|
|
3276
|
-
padding: 0,
|
|
3277
|
-
textAlign: "left"
|
|
3278
|
-
},
|
|
3279
|
-
chip: {
|
|
3280
|
-
fontSize: 8,
|
|
3281
|
-
padding: "0 3px",
|
|
3282
|
-
height: 12,
|
|
3283
|
-
lineHeight: "12px",
|
|
3284
|
-
borderRadius: 2,
|
|
3285
|
-
background: "var(--xeno-border-subtle)",
|
|
3286
|
-
color: "var(--xeno-muted)",
|
|
3287
|
-
flex: "0 0 auto"
|
|
3288
|
-
},
|
|
3289
|
-
tokenChip: {
|
|
3290
|
-
fontSize: 9,
|
|
3291
|
-
padding: "0 4px",
|
|
3292
|
-
height: 16,
|
|
3293
|
-
lineHeight: "16px",
|
|
3294
|
-
borderRadius: 2,
|
|
3295
|
-
background: "var(--xeno-border)",
|
|
3296
|
-
color: "inherit",
|
|
3297
|
-
flex: "1 1 auto",
|
|
3298
|
-
minWidth: 0,
|
|
3299
|
-
overflow: "hidden",
|
|
3300
|
-
textOverflow: "ellipsis",
|
|
3301
|
-
whiteSpace: "nowrap"
|
|
3302
|
-
},
|
|
3303
|
-
keyframeRow: { display: "flex", alignItems: "center", gap: 1, flex: "0 0 auto" }
|
|
3304
|
-
};
|
|
3041
|
+
import { Badge, Column, EmptyState, Field, FieldGroup, IconButton as IconButton2, ScrollArea, SearchField, Section, Select as Select2, Stack as Stack2, Text as Text2 } from "@xenosystem/components/chrome";
|
|
3305
3042
|
|
|
3306
3043
|
// src/edit/inspector/react/icons.tsx
|
|
3307
3044
|
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
@@ -3316,9 +3053,6 @@ var base2 = (size) => ({
|
|
|
3316
3053
|
strokeLinejoin: "round",
|
|
3317
3054
|
"aria-hidden": true
|
|
3318
3055
|
});
|
|
3319
|
-
function ChevronIcon2({ size = 11 }) {
|
|
3320
|
-
return /* @__PURE__ */ jsx4("svg", { ...base2(size), children: /* @__PURE__ */ jsx4("path", { d: "m9 18 6-6-6-6" }) });
|
|
3321
|
-
}
|
|
3322
3056
|
function StopwatchIcon({ size = 11 }) {
|
|
3323
3057
|
return /* @__PURE__ */ jsxs3("svg", { ...base2(size), children: [
|
|
3324
3058
|
/* @__PURE__ */ jsx4("path", { d: "M10 2h4" }),
|
|
@@ -3687,243 +3421,81 @@ function InspectorPanelView({ controller }) {
|
|
|
3687
3421
|
);
|
|
3688
3422
|
const multi = targets.length > 1;
|
|
3689
3423
|
const blocked = multi && !controller.canEditTargets();
|
|
3690
|
-
return /* @__PURE__ */ jsxs5(
|
|
3691
|
-
controller.isSearchShown()
|
|
3692
|
-
/* @__PURE__ */ jsx6(
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
placeholder: "Search properties",
|
|
3698
|
-
onChange: (e) => controller.setFilter(e.target.value),
|
|
3699
|
-
style: S2.search,
|
|
3700
|
-
"aria-label": "Search properties",
|
|
3701
|
-
spellCheck: false
|
|
3702
|
-
}
|
|
3703
|
-
),
|
|
3704
|
-
targets.length > 0 && /* @__PURE__ */ jsx6("span", { style: S2.targetChip, children: multi ? `${targets.length} selected` : targets[0]?.label ?? targets[0]?.id })
|
|
3705
|
-
] }),
|
|
3706
|
-
multi && /* @__PURE__ */ jsx6("div", { style: S2.banner, children: blocked ? `${targets.length} selected \u2014 multi-editing is disabled` : `${targets.length} selected \xB7 shared values shown` }),
|
|
3707
|
-
/* @__PURE__ */ jsxs5("div", { style: S2.scroll, onKeyDown, tabIndex: 0, role: "group", "aria-label": "Properties", children: [
|
|
3424
|
+
return /* @__PURE__ */ jsxs5(Column, { className: "xeno-inspector-panel", children: [
|
|
3425
|
+
controller.isSearchShown() ? /* @__PURE__ */ jsxs5(Stack2, { direction: "row", gap: 6, children: [
|
|
3426
|
+
/* @__PURE__ */ jsx6(SearchField, { value: controller.getFilter(), onChange: (v) => controller.setFilter(v), placeholder: "Search properties", label: "Search properties" }),
|
|
3427
|
+
targets.length > 0 ? /* @__PURE__ */ jsx6(Badge, { children: multi ? `${targets.length} selected` : targets[0]?.label ?? targets[0]?.id }) : null
|
|
3428
|
+
] }) : null,
|
|
3429
|
+
multi ? /* @__PURE__ */ jsx6(Stack2, { pad: "inset", children: /* @__PURE__ */ jsx6(Text2, { role: "caption", children: blocked ? `${targets.length} selected \u2014 multi-editing is disabled` : `${targets.length} selected \xB7 shared values shown` }) }) : null,
|
|
3430
|
+
/* @__PURE__ */ jsx6(ScrollArea, { children: /* @__PURE__ */ jsxs5("div", { onKeyDown, tabIndex: 0, role: "group", "aria-label": "Properties", className: "xeno-inspector-properties", children: [
|
|
3708
3431
|
sections.map((projected) => /* @__PURE__ */ jsx6(SectionView, { projected, controller }, projected.section.id)),
|
|
3709
|
-
sections.length === 0
|
|
3710
|
-
] })
|
|
3711
|
-
] });
|
|
3712
|
-
}
|
|
3713
|
-
function SectionView({
|
|
3714
|
-
projected,
|
|
3715
|
-
controller
|
|
3716
|
-
}) {
|
|
3717
|
-
const { section, fields, collapsed, disabledByToggle, empty } = projected;
|
|
3718
|
-
return /* @__PURE__ */ jsxs5("div", { children: [
|
|
3719
|
-
/* @__PURE__ */ jsxs5("div", { style: S2.sectionHeader, children: [
|
|
3720
|
-
section.collapsible && /* @__PURE__ */ jsx6(
|
|
3721
|
-
"button",
|
|
3722
|
-
{
|
|
3723
|
-
type: "button",
|
|
3724
|
-
style: { ...S2.iconBtn, transform: collapsed ? "none" : "rotate(90deg)" },
|
|
3725
|
-
onClick: () => controller.toggleSectionCollapsed(section.id),
|
|
3726
|
-
"aria-label": collapsed ? "Expand section" : "Collapse section",
|
|
3727
|
-
"aria-expanded": !collapsed,
|
|
3728
|
-
children: /* @__PURE__ */ jsx6(ChevronIcon2, {})
|
|
3729
|
-
}
|
|
3730
|
-
),
|
|
3731
|
-
section.enabled && /* @__PURE__ */ jsx6(
|
|
3732
|
-
"button",
|
|
3733
|
-
{
|
|
3734
|
-
type: "button",
|
|
3735
|
-
role: "switch",
|
|
3736
|
-
"aria-checked": section.enabled.value,
|
|
3737
|
-
"aria-label": `${section.title} enabled`,
|
|
3738
|
-
onClick: () => controller.toggleSectionEnabled(section.id),
|
|
3739
|
-
style: {
|
|
3740
|
-
...S2.toggleTrack,
|
|
3741
|
-
width: 16,
|
|
3742
|
-
height: 10,
|
|
3743
|
-
background: section.enabled.value ? "var(--xeno-active)" : "var(--xeno-border)"
|
|
3744
|
-
},
|
|
3745
|
-
children: /* @__PURE__ */ jsx6(
|
|
3746
|
-
"span",
|
|
3747
|
-
{
|
|
3748
|
-
style: {
|
|
3749
|
-
...S2.toggleKnob,
|
|
3750
|
-
width: 8,
|
|
3751
|
-
height: 8,
|
|
3752
|
-
transform: section.enabled.value ? "translateX(6px)" : "translateX(0)"
|
|
3753
|
-
}
|
|
3754
|
-
}
|
|
3755
|
-
)
|
|
3756
|
-
}
|
|
3757
|
-
),
|
|
3758
|
-
/* @__PURE__ */ jsx6("span", { style: S2.sectionTitle, children: section.title }),
|
|
3759
|
-
section.badge && /* @__PURE__ */ jsx6("span", { style: S2.sectionBadge, children: section.badge }),
|
|
3760
|
-
section.actions?.map((action) => /* @__PURE__ */ jsx6(
|
|
3761
|
-
"button",
|
|
3762
|
-
{
|
|
3763
|
-
type: "button",
|
|
3764
|
-
style: S2.miniBtn,
|
|
3765
|
-
disabled: action.disabled,
|
|
3766
|
-
onClick: () => controller.runAction(section.id, action.id),
|
|
3767
|
-
title: action.label,
|
|
3768
|
-
"aria-label": action.label,
|
|
3769
|
-
children: action.label.slice(0, 1)
|
|
3770
|
-
},
|
|
3771
|
-
action.id
|
|
3772
|
-
)),
|
|
3773
|
-
section.addMenu && section.addMenu.length > 0 && /* @__PURE__ */ jsx6(AddMenu, { section, controller })
|
|
3774
|
-
] }),
|
|
3775
|
-
!collapsed && /* @__PURE__ */ jsxs5("div", { style: { ...S2.sectionBody, ...disabledByToggle ? S2.sectionBodyOff : null }, children: [
|
|
3776
|
-
empty && section.emptyHint && /* @__PURE__ */ jsx6("div", { style: S2.emptyHint, children: section.emptyHint }),
|
|
3777
|
-
fields.map((field) => /* @__PURE__ */ jsx6(FieldRow, { field, controller }, field.id))
|
|
3778
|
-
] })
|
|
3432
|
+
sections.length === 0 ? /* @__PURE__ */ jsx6(EmptyState, { title: targets.length === 0 ? "Nothing selected" : "No properties" }) : null
|
|
3433
|
+
] }) })
|
|
3779
3434
|
] });
|
|
3780
3435
|
}
|
|
3781
|
-
function
|
|
3782
|
-
section,
|
|
3783
|
-
controller
|
|
3784
|
-
}) {
|
|
3436
|
+
function SectionView({ projected, controller }) {
|
|
3437
|
+
const { section, fields, collapsed, empty } = projected;
|
|
3785
3438
|
return /* @__PURE__ */ jsxs5(
|
|
3786
|
-
|
|
3439
|
+
Section,
|
|
3787
3440
|
{
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3441
|
+
title: section.title,
|
|
3442
|
+
flush: true,
|
|
3443
|
+
collapsible: section.collapsible,
|
|
3444
|
+
collapsed,
|
|
3445
|
+
onCollapsedChange: () => controller.toggleSectionCollapsed(section.id),
|
|
3446
|
+
enabled: section.enabled?.value,
|
|
3447
|
+
onEnabledChange: section.enabled ? () => controller.toggleSectionEnabled(section.id) : void 0,
|
|
3448
|
+
badge: section.badge ? /* @__PURE__ */ jsx6(Badge, { children: section.badge }) : null,
|
|
3449
|
+
actions: /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
3450
|
+
section.actions?.map((action) => /* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6("span", { "aria-hidden": true, children: action.label.slice(0, 1) }), label: action.label, disabled: action.disabled, onClick: () => controller.runAction(section.id, action.id) }, action.id)),
|
|
3451
|
+
section.addMenu && section.addMenu.length > 0 ? /* @__PURE__ */ jsx6(AddMenu, { section, controller }) : null
|
|
3452
|
+
] }),
|
|
3795
3453
|
children: [
|
|
3796
|
-
/* @__PURE__ */ jsx6(
|
|
3797
|
-
|
|
3798
|
-
(section.addMenu ?? []).reduce((groups, item) => {
|
|
3799
|
-
const key = item.group ?? "";
|
|
3800
|
-
(groups[key] ??= []).push(item);
|
|
3801
|
-
return groups;
|
|
3802
|
-
}, {})
|
|
3803
|
-
).map(
|
|
3804
|
-
([group, items]) => group ? /* @__PURE__ */ jsx6("optgroup", { label: group, children: (items ?? []).map((i) => /* @__PURE__ */ jsx6("option", { value: i.id, disabled: i.disabled, children: i.label }, i.id)) }, group) : (items ?? []).map((i) => /* @__PURE__ */ jsx6("option", { value: i.id, disabled: i.disabled, children: i.label }, i.id))
|
|
3805
|
-
)
|
|
3454
|
+
empty && section.emptyHint ? /* @__PURE__ */ jsx6(Stack2, { pad: "inset", children: /* @__PURE__ */ jsx6(Text2, { role: "caption", children: section.emptyHint }) }) : null,
|
|
3455
|
+
/* @__PURE__ */ jsx6(FieldGroup, { labelWidth: controller.getLabelWidth(), children: fields.map((field) => /* @__PURE__ */ jsx6(FieldRow, { field, controller }, field.id)) })
|
|
3806
3456
|
]
|
|
3807
3457
|
}
|
|
3808
3458
|
);
|
|
3809
3459
|
}
|
|
3810
|
-
function
|
|
3811
|
-
|
|
3812
|
-
controller
|
|
3813
|
-
}
|
|
3460
|
+
function AddMenu({ section, controller }) {
|
|
3461
|
+
const options = (section.addMenu ?? []).map((i) => ({ value: i.id, label: i.label, disabled: i.disabled, group: i.group }));
|
|
3462
|
+
return /* @__PURE__ */ jsx6(Select2, { size: "sm", placeholder: "\uFF0B", options, value: "", label: `Add to ${section.title}`, onChange: (id) => controller.addItem(section.id, id) });
|
|
3463
|
+
}
|
|
3464
|
+
function FieldRow({ field, controller }) {
|
|
3814
3465
|
const focused = controller.getFocused() === field.id;
|
|
3815
3466
|
const bound = !!field.token?.tokenId;
|
|
3816
3467
|
const anim = field.anim;
|
|
3817
3468
|
const showKeyframes = controller.areKeyframesShown() && !!anim;
|
|
3469
|
+
const easingOptions = anim?.easingOptions ?? [];
|
|
3470
|
+
const easing = anim?.easing ?? "";
|
|
3471
|
+
const easingAll = easingOptions.some((o) => o.value === easing) ? easingOptions : [{ value: easing, label: easing || "\u2014" }, ...easingOptions];
|
|
3818
3472
|
return /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
3819
|
-
/* @__PURE__ */
|
|
3820
|
-
|
|
3473
|
+
/* @__PURE__ */ jsx6(
|
|
3474
|
+
Field,
|
|
3821
3475
|
{
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
children: [
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
3832
|
-
|
|
3833
|
-
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
/* @__PURE__ */ jsx6(
|
|
3843
|
-
"button",
|
|
3844
|
-
{
|
|
3845
|
-
type: "button",
|
|
3846
|
-
style: { ...S2.iconBtn, width: 11, opacity: anim.canPrev === false ? 0.3 : 0.8 },
|
|
3847
|
-
disabled: anim.canPrev === false,
|
|
3848
|
-
onClick: () => controller.keyframe(field.id, "prev"),
|
|
3849
|
-
"aria-label": "Previous keyframe",
|
|
3850
|
-
children: /* @__PURE__ */ jsx6(PrevIcon, {})
|
|
3851
|
-
}
|
|
3852
|
-
),
|
|
3853
|
-
/* @__PURE__ */ jsx6(
|
|
3854
|
-
"button",
|
|
3855
|
-
{
|
|
3856
|
-
type: "button",
|
|
3857
|
-
style: S2.iconBtn,
|
|
3858
|
-
onClick: () => controller.keyframe(field.id, anim.onKeyframe ? "remove" : "add"),
|
|
3859
|
-
title: anim.onKeyframe ? "Remove keyframe" : "Add keyframe",
|
|
3860
|
-
"aria-label": anim.onKeyframe ? "Remove keyframe" : "Add keyframe",
|
|
3861
|
-
children: /* @__PURE__ */ jsx6(DiamondIcon, { filled: !!anim.onKeyframe })
|
|
3862
|
-
}
|
|
3863
|
-
),
|
|
3864
|
-
/* @__PURE__ */ jsx6(
|
|
3865
|
-
"button",
|
|
3866
|
-
{
|
|
3867
|
-
type: "button",
|
|
3868
|
-
style: { ...S2.iconBtn, width: 11, opacity: anim.canNext === false ? 0.3 : 0.8 },
|
|
3869
|
-
disabled: anim.canNext === false,
|
|
3870
|
-
onClick: () => controller.keyframe(field.id, "next"),
|
|
3871
|
-
"aria-label": "Next keyframe",
|
|
3872
|
-
children: /* @__PURE__ */ jsx6(NextIcon, {})
|
|
3873
|
-
}
|
|
3874
|
-
)
|
|
3875
|
-
] })
|
|
3876
|
-
] }),
|
|
3877
|
-
/* @__PURE__ */ jsx6(
|
|
3878
|
-
"span",
|
|
3879
|
-
{
|
|
3880
|
-
style: { ...S2.fieldLabel, width: controller.getLabelWidth() },
|
|
3881
|
-
onClick: () => controller.focusField(field.id),
|
|
3882
|
-
title: field.description ?? field.label,
|
|
3883
|
-
children: field.label
|
|
3884
|
-
}
|
|
3885
|
-
),
|
|
3886
|
-
/* @__PURE__ */ jsx6("span", { style: S2.fieldControl, children: bound ? /* @__PURE__ */ jsx6("span", { style: S2.tokenChip, title: `Bound to ${field.token?.tokenName ?? field.token?.tokenId}`, children: field.token?.tokenName ?? field.token?.tokenId }) : /* @__PURE__ */ jsx6(FieldWidget, { field, controller }) }),
|
|
3887
|
-
showKeyframes && anim.animated && anim.onKeyframe && /* @__PURE__ */ jsxs5(
|
|
3888
|
-
"select",
|
|
3889
|
-
{
|
|
3890
|
-
value: anim.easing ?? "",
|
|
3891
|
-
onChange: (e) => controller.keyframe(field.id, "setEasing", e.target.value),
|
|
3892
|
-
style: { ...S2.miniBtn, width: "auto" },
|
|
3893
|
-
"aria-label": "Easing",
|
|
3894
|
-
children: [
|
|
3895
|
-
!anim.easingOptions?.some((o) => o.value === (anim.easing ?? "")) && /* @__PURE__ */ jsx6("option", { value: anim.easing ?? "", children: anim.easing || "\u2014" }),
|
|
3896
|
-
(anim.easingOptions ?? []).map((o) => /* @__PURE__ */ jsx6("option", { value: o.value, children: o.label }, o.value))
|
|
3897
|
-
]
|
|
3898
|
-
}
|
|
3899
|
-
),
|
|
3900
|
-
showKeyframes && /* @__PURE__ */ jsx6("span", { style: S2.chip, children: controller.keyframeChip(field.id) }),
|
|
3901
|
-
controller.areTokensShown() && field.token?.bindable !== false && /* @__PURE__ */ jsx6(
|
|
3902
|
-
"button",
|
|
3903
|
-
{
|
|
3904
|
-
type: "button",
|
|
3905
|
-
style: { ...S2.iconBtn, opacity: bound ? 0.9 : 0.4 },
|
|
3906
|
-
onClick: () => controller.bindToken(field.id, bound ? null : controller.getTokens()[0]?.id ?? null),
|
|
3907
|
-
title: bound ? "Unbind token" : "Bind a design token",
|
|
3908
|
-
"aria-label": bound ? "Unbind token" : "Bind token",
|
|
3909
|
-
children: /* @__PURE__ */ jsx6(LinkIcon, {})
|
|
3910
|
-
}
|
|
3911
|
-
),
|
|
3912
|
-
field.defaultValue !== void 0 && isFieldEditable(field) && /* @__PURE__ */ jsx6(
|
|
3913
|
-
"button",
|
|
3914
|
-
{
|
|
3915
|
-
type: "button",
|
|
3916
|
-
style: { ...S2.iconBtn, opacity: 0.35 },
|
|
3917
|
-
onClick: () => controller.resetField(field.id),
|
|
3918
|
-
title: "Reset to default",
|
|
3919
|
-
"aria-label": "Reset to default",
|
|
3920
|
-
children: /* @__PURE__ */ jsx6(ResetIcon, {})
|
|
3921
|
-
}
|
|
3922
|
-
)
|
|
3923
|
-
]
|
|
3476
|
+
label: field.label,
|
|
3477
|
+
title: field.description ?? field.label,
|
|
3478
|
+
focused,
|
|
3479
|
+
onLabelClick: () => controller.focusField(field.id),
|
|
3480
|
+
onContextMenu: (x, y) => controller.requestContextMenu(field.id, x, y),
|
|
3481
|
+
leading: showKeyframes ? /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
3482
|
+
/* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6(StopwatchIcon, {}), label: "Toggle animation", active: anim.animated, onClick: () => controller.keyframe(field.id, "toggleAnim") }),
|
|
3483
|
+
anim.animated ? /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
3484
|
+
/* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6(PrevIcon, {}), label: "Previous keyframe", disabled: anim.canPrev === false, onClick: () => controller.keyframe(field.id, "prev") }),
|
|
3485
|
+
/* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6(DiamondIcon, { filled: !!anim.onKeyframe }), label: anim.onKeyframe ? "Remove keyframe" : "Add keyframe", onClick: () => controller.keyframe(field.id, anim.onKeyframe ? "remove" : "add") }),
|
|
3486
|
+
/* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6(NextIcon, {}), label: "Next keyframe", disabled: anim.canNext === false, onClick: () => controller.keyframe(field.id, "next") })
|
|
3487
|
+
] }) : null
|
|
3488
|
+
] }) : null,
|
|
3489
|
+
trailing: /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
3490
|
+
showKeyframes && anim.animated && anim.onKeyframe ? /* @__PURE__ */ jsx6(Select2, { size: "sm", options: easingAll, value: easing, label: "Easing", onChange: (v) => controller.keyframe(field.id, "setEasing", v) }) : null,
|
|
3491
|
+
showKeyframes ? /* @__PURE__ */ jsx6(Badge, { size: "sm", children: controller.keyframeChip(field.id) }) : null,
|
|
3492
|
+
controller.areTokensShown() && field.token?.bindable !== false ? /* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6(LinkIcon, {}), label: bound ? "Unbind token" : "Bind token", active: bound, onClick: () => controller.bindToken(field.id, bound ? null : controller.getTokens()[0]?.id ?? null) }) : null,
|
|
3493
|
+
field.defaultValue !== void 0 && isFieldEditable(field) ? /* @__PURE__ */ jsx6(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx6(ResetIcon, {}), label: "Reset to default", onClick: () => controller.resetField(field.id) }) : null
|
|
3494
|
+
] }),
|
|
3495
|
+
children: bound ? /* @__PURE__ */ jsx6(Badge, { title: `Bound to ${field.token?.tokenName ?? field.token?.tokenId}`, children: field.token?.tokenName ?? field.token?.tokenId }) : /* @__PURE__ */ jsx6(FieldWidget, { field, controller })
|
|
3924
3496
|
}
|
|
3925
3497
|
),
|
|
3926
|
-
field.description && field.type === "info"
|
|
3498
|
+
field.description && field.type === "info" ? /* @__PURE__ */ jsx6(Stack2, { pad: "inset", children: /* @__PURE__ */ jsx6(Text2, { role: "caption", children: field.description }) }) : null
|
|
3927
3499
|
] });
|
|
3928
3500
|
}
|
|
3929
3501
|
function FieldWidget({
|
|
@@ -5055,13 +4627,13 @@ function HistoryPanelView({ controller }) {
|
|
|
5055
4627
|
},
|
|
5056
4628
|
[controller]
|
|
5057
4629
|
);
|
|
5058
|
-
return /* @__PURE__ */ jsxs7("div", { style:
|
|
5059
|
-
/* @__PURE__ */ jsxs7("div", { style:
|
|
4630
|
+
return /* @__PURE__ */ jsxs7("div", { style: S2.root, className: "xeno-history-panel", children: [
|
|
4631
|
+
/* @__PURE__ */ jsxs7("div", { style: S2.header, children: [
|
|
5060
4632
|
/* @__PURE__ */ jsx8(
|
|
5061
4633
|
"button",
|
|
5062
4634
|
{
|
|
5063
4635
|
type: "button",
|
|
5064
|
-
style: { ...
|
|
4636
|
+
style: { ...S2.iconBtn, opacity: controller.canUndo() ? 0.8 : 0.25 },
|
|
5065
4637
|
disabled: !controller.canUndo(),
|
|
5066
4638
|
onClick: () => controller.undo(),
|
|
5067
4639
|
title: "Undo",
|
|
@@ -5073,7 +4645,7 @@ function HistoryPanelView({ controller }) {
|
|
|
5073
4645
|
"button",
|
|
5074
4646
|
{
|
|
5075
4647
|
type: "button",
|
|
5076
|
-
style: { ...
|
|
4648
|
+
style: { ...S2.iconBtn, opacity: controller.canRedo() ? 0.8 : 0.25 },
|
|
5077
4649
|
disabled: !controller.canRedo(),
|
|
5078
4650
|
onClick: () => controller.redo(),
|
|
5079
4651
|
title: "Redo",
|
|
@@ -5088,12 +4660,12 @@ function HistoryPanelView({ controller }) {
|
|
|
5088
4660
|
value: controller.getFilter(),
|
|
5089
4661
|
placeholder: "Search history",
|
|
5090
4662
|
onChange: (e) => controller.setFilter(e.target.value),
|
|
5091
|
-
style:
|
|
4663
|
+
style: S2.search,
|
|
5092
4664
|
"aria-label": "Search history",
|
|
5093
4665
|
spellCheck: false
|
|
5094
4666
|
}
|
|
5095
4667
|
),
|
|
5096
|
-
/* @__PURE__ */ jsxs7("span", { style:
|
|
4668
|
+
/* @__PURE__ */ jsxs7("span", { style: S2.counter, children: [
|
|
5097
4669
|
controller.getAppliedCount(),
|
|
5098
4670
|
" / ",
|
|
5099
4671
|
controller.getTotalCount()
|
|
@@ -5102,7 +4674,7 @@ function HistoryPanelView({ controller }) {
|
|
|
5102
4674
|
"button",
|
|
5103
4675
|
{
|
|
5104
4676
|
type: "button",
|
|
5105
|
-
style:
|
|
4677
|
+
style: S2.iconBtn,
|
|
5106
4678
|
onClick: () => controller.requestClear(),
|
|
5107
4679
|
title: "Clear history",
|
|
5108
4680
|
"aria-label": "Clear history",
|
|
@@ -5110,19 +4682,19 @@ function HistoryPanelView({ controller }) {
|
|
|
5110
4682
|
}
|
|
5111
4683
|
)
|
|
5112
4684
|
] }),
|
|
5113
|
-
controller.isConfirmingClear() && /* @__PURE__ */ jsxs7("div", { style:
|
|
4685
|
+
controller.isConfirmingClear() && /* @__PURE__ */ jsxs7("div", { style: S2.confirmBar, role: "alertdialog", "aria-label": "Confirm clear history", children: [
|
|
5114
4686
|
/* @__PURE__ */ jsx8("span", { children: "Clear all history?" }),
|
|
5115
|
-
/* @__PURE__ */ jsxs7("span", { style:
|
|
5116
|
-
/* @__PURE__ */ jsx8("button", { type: "button", style:
|
|
5117
|
-
/* @__PURE__ */ jsx8("button", { type: "button", style:
|
|
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" })
|
|
5118
4690
|
] })
|
|
5119
4691
|
] }),
|
|
5120
|
-
controller.isPruned() && /* @__PURE__ */ jsx8("div", { style:
|
|
4692
|
+
controller.isPruned() && /* @__PURE__ */ jsx8("div", { style: S2.prunedNote, children: "Earlier history discarded (limit reached)" }),
|
|
5121
4693
|
/* @__PURE__ */ jsxs7(
|
|
5122
4694
|
"div",
|
|
5123
4695
|
{
|
|
5124
4696
|
ref: scrollRef,
|
|
5125
|
-
style:
|
|
4697
|
+
style: S2.scroll,
|
|
5126
4698
|
onScroll,
|
|
5127
4699
|
onKeyDown,
|
|
5128
4700
|
onMouseLeave: () => controller.setHovered(null),
|
|
@@ -5140,17 +4712,17 @@ function HistoryPanelView({ controller }) {
|
|
|
5140
4712
|
},
|
|
5141
4713
|
row.entryId ?? "__original__"
|
|
5142
4714
|
)) }) }),
|
|
5143
|
-
rows.length === 0 && /* @__PURE__ */ jsx8("div", { style:
|
|
4715
|
+
rows.length === 0 && /* @__PURE__ */ jsx8("div", { style: S2.empty, children: "No history" })
|
|
5144
4716
|
]
|
|
5145
4717
|
}
|
|
5146
4718
|
),
|
|
5147
|
-
memory && /* @__PURE__ */ jsxs7("div", { style:
|
|
4719
|
+
memory && /* @__PURE__ */ jsxs7("div", { style: S2.footer, children: [
|
|
5148
4720
|
/* @__PURE__ */ jsxs7("span", { children: [
|
|
5149
4721
|
memory.usedMB.toFixed(1),
|
|
5150
4722
|
" MB",
|
|
5151
4723
|
memory.limitMB ? ` / ${memory.limitMB} MB` : ""
|
|
5152
4724
|
] }),
|
|
5153
|
-
memory.onDiskCount !== void 0 && /* @__PURE__ */ jsxs7("span", { style:
|
|
4725
|
+
memory.onDiskCount !== void 0 && /* @__PURE__ */ jsxs7("span", { style: S2.dim, children: [
|
|
5154
4726
|
memory.onDiskCount,
|
|
5155
4727
|
" on disk"
|
|
5156
4728
|
] })
|
|
@@ -5163,7 +4735,7 @@ function HistoryRowView({ row, controller, rowHeight, focused }) {
|
|
|
5163
4735
|
const failed = entry?.status === "failed";
|
|
5164
4736
|
const jumpable = controller.isJumpAllowed() && entry?.caps?.jumpable !== false;
|
|
5165
4737
|
const style = {
|
|
5166
|
-
...
|
|
4738
|
+
...S2.row,
|
|
5167
4739
|
height: rowHeight,
|
|
5168
4740
|
background: row.current ? "var(--xeno-border)" : "transparent",
|
|
5169
4741
|
// FUTURE rows (after the cursor) are dimmed + struck through — the redoable region.
|
|
@@ -5187,22 +4759,22 @@ function HistoryRowView({ row, controller, rowHeight, focused }) {
|
|
|
5187
4759
|
},
|
|
5188
4760
|
title: row.label,
|
|
5189
4761
|
children: [
|
|
5190
|
-
controller.areIconsShown() && /* @__PURE__ */ jsx8("span", { style:
|
|
5191
|
-
/* @__PURE__ */ jsx8("span", { style:
|
|
5192
|
-
/* @__PURE__ */ jsx8("span", { style:
|
|
4762
|
+
controller.areIconsShown() && /* @__PURE__ */ jsx8("span", { style: S2.iconCell, children: /* @__PURE__ */ jsx8(EntryIcon, { name: row.kind === "original" ? "original" : controller.getIconName(entry?.kind) }) }),
|
|
4763
|
+
/* @__PURE__ */ jsx8("span", { style: S2.ordinal, children: row.kind === "entry" ? row.ordinal : "" }),
|
|
4764
|
+
/* @__PURE__ */ jsx8("span", { style: S2.label, children: row.label }),
|
|
5193
4765
|
pending && /* @__PURE__ */ jsx8(PendingGlyph, {}),
|
|
5194
|
-
failed && /* @__PURE__ */ jsx8("span", { style:
|
|
5195
|
-
controller.isSourceShown() && entry?.source && entry.source !== "user" && /* @__PURE__ */ jsx8("span", { style:
|
|
5196
|
-
entry?.coalesced && entry.coalesced > 1 && /* @__PURE__ */ jsxs7("span", { style:
|
|
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: [
|
|
5197
4769
|
"\xD7",
|
|
5198
4770
|
entry.coalesced
|
|
5199
4771
|
] }),
|
|
5200
|
-
controller.areTimestampsShown() && entry?.at !== void 0 && /* @__PURE__ */ jsx8("span", { style:
|
|
4772
|
+
controller.areTimestampsShown() && entry?.at !== void 0 && /* @__PURE__ */ jsx8("span", { style: S2.time, children: formatTime(entry.at) }),
|
|
5201
4773
|
pending && /* @__PURE__ */ jsx8(
|
|
5202
4774
|
"button",
|
|
5203
4775
|
{
|
|
5204
4776
|
type: "button",
|
|
5205
|
-
style:
|
|
4777
|
+
style: S2.iconBtn,
|
|
5206
4778
|
onClick: (e) => {
|
|
5207
4779
|
e.stopPropagation();
|
|
5208
4780
|
controller.cancelPending(entry?.id);
|
|
@@ -5221,7 +4793,7 @@ function formatTime(at) {
|
|
|
5221
4793
|
if (Number.isNaN(date.getTime())) return typeof at === "string" ? at : "";
|
|
5222
4794
|
return date.toLocaleTimeString(void 0, { hour: "2-digit", minute: "2-digit" });
|
|
5223
4795
|
}
|
|
5224
|
-
var
|
|
4796
|
+
var S2 = {
|
|
5225
4797
|
root: {
|
|
5226
4798
|
display: "flex",
|
|
5227
4799
|
flexDirection: "column",
|
|
@@ -6543,14 +6115,14 @@ function ColorPanelView({ controller }) {
|
|
|
6543
6115
|
);
|
|
6544
6116
|
const componentLabels = COMPONENT_LABELS[space];
|
|
6545
6117
|
const comps = value.components ?? [];
|
|
6546
|
-
return /* @__PURE__ */ jsxs8("div", { style:
|
|
6547
|
-
controller.getChannelsMode() === "fg-bg" && /* @__PURE__ */ jsxs8("div", { style:
|
|
6118
|
+
return /* @__PURE__ */ jsxs8("div", { style: S3.root, className: "xeno-color-panel", children: [
|
|
6119
|
+
controller.getChannelsMode() === "fg-bg" && /* @__PURE__ */ jsxs8("div", { style: S3.channels, children: [
|
|
6548
6120
|
/* @__PURE__ */ jsx9(
|
|
6549
6121
|
"button",
|
|
6550
6122
|
{
|
|
6551
6123
|
type: "button",
|
|
6552
6124
|
"aria-pressed": controller.getActiveChannel() === "fg",
|
|
6553
|
-
style: { ...
|
|
6125
|
+
style: { ...S3.chip, ...controller.getActiveChannel() === "fg" ? S3.chipActive : null, background: value.hex },
|
|
6554
6126
|
onClick: () => controller.setChannel("fg"),
|
|
6555
6127
|
title: "Foreground"
|
|
6556
6128
|
}
|
|
@@ -6559,7 +6131,7 @@ function ColorPanelView({ controller }) {
|
|
|
6559
6131
|
"button",
|
|
6560
6132
|
{
|
|
6561
6133
|
type: "button",
|
|
6562
|
-
style:
|
|
6134
|
+
style: S3.swap,
|
|
6563
6135
|
onClick: () => controller.swapChannels(),
|
|
6564
6136
|
title: "Swap FG/BG (X)",
|
|
6565
6137
|
children: "\u21C4"
|
|
@@ -6570,20 +6142,20 @@ function ColorPanelView({ controller }) {
|
|
|
6570
6142
|
{
|
|
6571
6143
|
type: "button",
|
|
6572
6144
|
"aria-pressed": controller.getActiveChannel() === "bg",
|
|
6573
|
-
style: { ...
|
|
6145
|
+
style: { ...S3.chip, ...controller.getActiveChannel() === "bg" ? S3.chipActive : null },
|
|
6574
6146
|
onClick: () => controller.setChannel("bg"),
|
|
6575
6147
|
title: "Background"
|
|
6576
6148
|
}
|
|
6577
6149
|
)
|
|
6578
6150
|
] }),
|
|
6579
|
-
/* @__PURE__ */ jsxs8("div", { style:
|
|
6151
|
+
/* @__PURE__ */ jsxs8("div", { style: S3.pickerRow, children: [
|
|
6580
6152
|
/* @__PURE__ */ jsx9(
|
|
6581
6153
|
"canvas",
|
|
6582
6154
|
{
|
|
6583
6155
|
ref: spectrumRef,
|
|
6584
6156
|
width: 200,
|
|
6585
6157
|
height: 140,
|
|
6586
|
-
style: { ...
|
|
6158
|
+
style: { ...S3.spectrum, ...bound ? S3.disabled : null },
|
|
6587
6159
|
onPointerDown: (e) => onSpectrumPointer(e, true),
|
|
6588
6160
|
onPointerMove: (e) => onSpectrumPointer(e, false),
|
|
6589
6161
|
onPointerUp: endDrag
|
|
@@ -6595,7 +6167,7 @@ function ColorPanelView({ controller }) {
|
|
|
6595
6167
|
ref: hueRef,
|
|
6596
6168
|
width: 14,
|
|
6597
6169
|
height: 140,
|
|
6598
|
-
style: { ...
|
|
6170
|
+
style: { ...S3.strip, ...bound ? S3.disabled : null },
|
|
6599
6171
|
onPointerDown: (e) => onHuePointer(e, true),
|
|
6600
6172
|
onPointerMove: (e) => onHuePointer(e, false),
|
|
6601
6173
|
onPointerUp: endDrag
|
|
@@ -6607,20 +6179,20 @@ function ColorPanelView({ controller }) {
|
|
|
6607
6179
|
ref: alphaRef,
|
|
6608
6180
|
width: 14,
|
|
6609
6181
|
height: 140,
|
|
6610
|
-
style: { ...
|
|
6182
|
+
style: { ...S3.strip, ...bound ? S3.disabled : null },
|
|
6611
6183
|
onPointerDown: (e) => onAlphaPointer(e, true),
|
|
6612
6184
|
onPointerMove: (e) => onAlphaPointer(e, false),
|
|
6613
6185
|
onPointerUp: endDrag
|
|
6614
6186
|
}
|
|
6615
6187
|
)
|
|
6616
6188
|
] }),
|
|
6617
|
-
/* @__PURE__ */ jsxs8("div", { style:
|
|
6189
|
+
/* @__PURE__ */ jsxs8("div", { style: S3.controls, children: [
|
|
6618
6190
|
/* @__PURE__ */ jsx9(
|
|
6619
6191
|
"select",
|
|
6620
6192
|
{
|
|
6621
6193
|
value: space,
|
|
6622
6194
|
onChange: (e) => controller.setSpace(e.target.value),
|
|
6623
|
-
style:
|
|
6195
|
+
style: S3.select,
|
|
6624
6196
|
"aria-label": "Color model",
|
|
6625
6197
|
children: EDIT_SPACES.map((s) => /* @__PURE__ */ jsx9("option", { value: s, children: SPACE_LABEL[s] }, s))
|
|
6626
6198
|
}
|
|
@@ -6632,12 +6204,12 @@ function ColorPanelView({ controller }) {
|
|
|
6632
6204
|
value: value.hex,
|
|
6633
6205
|
onChange: onHexInput,
|
|
6634
6206
|
disabled: bound,
|
|
6635
|
-
style:
|
|
6207
|
+
style: S3.hexInput,
|
|
6636
6208
|
"aria-label": "Hex",
|
|
6637
6209
|
spellCheck: false
|
|
6638
6210
|
}
|
|
6639
|
-
) : /* @__PURE__ */ jsx9("div", { style:
|
|
6640
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6211
|
+
) : /* @__PURE__ */ jsx9("div", { style: S3.componentRow, children: (componentLabels ?? []).map((label, i) => /* @__PURE__ */ jsxs8("label", { style: S3.componentField, children: [
|
|
6212
|
+
/* @__PURE__ */ jsx9("span", { style: S3.componentLabel, children: label }),
|
|
6641
6213
|
/* @__PURE__ */ jsx9(
|
|
6642
6214
|
"input",
|
|
6643
6215
|
{
|
|
@@ -6645,12 +6217,12 @@ function ColorPanelView({ controller }) {
|
|
|
6645
6217
|
value: roundForSpace(space, i, comps[i] ?? 0),
|
|
6646
6218
|
onChange: (e) => onComponentInput(i, e.target.value),
|
|
6647
6219
|
disabled: bound,
|
|
6648
|
-
style:
|
|
6220
|
+
style: S3.numInput
|
|
6649
6221
|
}
|
|
6650
6222
|
)
|
|
6651
6223
|
] }, label)) }),
|
|
6652
|
-
controller.isAlphaShown() && /* @__PURE__ */ jsxs8("label", { style:
|
|
6653
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6224
|
+
controller.isAlphaShown() && /* @__PURE__ */ jsxs8("label", { style: S3.alphaField, children: [
|
|
6225
|
+
/* @__PURE__ */ jsx9("span", { style: S3.componentLabel, children: "A" }),
|
|
6654
6226
|
/* @__PURE__ */ jsx9(
|
|
6655
6227
|
"input",
|
|
6656
6228
|
{
|
|
@@ -6660,20 +6232,20 @@ function ColorPanelView({ controller }) {
|
|
|
6660
6232
|
value: Math.round(value.alpha * 100),
|
|
6661
6233
|
onChange: (e) => controller.setAlpha(Number(e.target.value) / 100, { commit: true }),
|
|
6662
6234
|
disabled: bound,
|
|
6663
|
-
style:
|
|
6235
|
+
style: S3.numInput
|
|
6664
6236
|
}
|
|
6665
6237
|
)
|
|
6666
6238
|
] }),
|
|
6667
|
-
/* @__PURE__ */ jsx9("button", { type: "button", style:
|
|
6239
|
+
/* @__PURE__ */ jsx9("button", { type: "button", style: S3.iconBtn, title: "Pick from screen", onClick: () => controller.requestEyedropper(), children: "\u29BF" })
|
|
6668
6240
|
] }),
|
|
6669
|
-
controller.hasTokens() && /* @__PURE__ */ jsxs8("div", { style:
|
|
6670
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6241
|
+
controller.hasTokens() && /* @__PURE__ */ jsxs8("div", { style: S3.tokenRow, children: [
|
|
6242
|
+
/* @__PURE__ */ jsx9("span", { style: S3.componentLabel, children: "Token" }),
|
|
6671
6243
|
/* @__PURE__ */ jsxs8(
|
|
6672
6244
|
"select",
|
|
6673
6245
|
{
|
|
6674
6246
|
value: controller.getBoundTokenId() ?? "",
|
|
6675
6247
|
onChange: (e) => e.target.value ? controller.bindToken(e.target.value) : controller.unbindToken(),
|
|
6676
|
-
style:
|
|
6248
|
+
style: S3.select,
|
|
6677
6249
|
"aria-label": "Bind token",
|
|
6678
6250
|
children: [
|
|
6679
6251
|
/* @__PURE__ */ jsx9("option", { value: "", children: "\u2014 raw \u2014" }),
|
|
@@ -6681,17 +6253,17 @@ function ColorPanelView({ controller }) {
|
|
|
6681
6253
|
]
|
|
6682
6254
|
}
|
|
6683
6255
|
),
|
|
6684
|
-
bound && /* @__PURE__ */ jsx9("button", { type: "button", style:
|
|
6256
|
+
bound && /* @__PURE__ */ jsx9("button", { type: "button", style: S3.textBtn, onClick: () => controller.unbindToken(), children: "Unbind" })
|
|
6685
6257
|
] }),
|
|
6686
|
-
/* @__PURE__ */ jsxs8("div", { style:
|
|
6687
|
-
/* @__PURE__ */ jsx9("span", { style:
|
|
6688
|
-
/* @__PURE__ */ jsx9("button", { type: "button", style:
|
|
6258
|
+
/* @__PURE__ */ jsxs8("div", { style: S3.swatchHeader, children: [
|
|
6259
|
+
/* @__PURE__ */ jsx9("span", { style: S3.sectionLabel, children: "Swatches" }),
|
|
6260
|
+
/* @__PURE__ */ jsx9("button", { type: "button", style: S3.textBtn, onClick: () => void controller.addSwatch(), children: "+ Save" })
|
|
6689
6261
|
] }),
|
|
6690
|
-
/* @__PURE__ */ jsx9("div", { style:
|
|
6262
|
+
/* @__PURE__ */ jsx9("div", { style: S3.swatchGrid, children: controller.getSwatches().map((hex) => /* @__PURE__ */ jsx9(
|
|
6691
6263
|
"button",
|
|
6692
6264
|
{
|
|
6693
6265
|
type: "button",
|
|
6694
|
-
style: { ...
|
|
6266
|
+
style: { ...S3.swatch, background: hex },
|
|
6695
6267
|
title: hex,
|
|
6696
6268
|
onClick: () => controller.selectColor(hex),
|
|
6697
6269
|
onContextMenu: (e) => {
|
|
@@ -6702,12 +6274,12 @@ function ColorPanelView({ controller }) {
|
|
|
6702
6274
|
hex
|
|
6703
6275
|
)) }),
|
|
6704
6276
|
controller.getRecent().length > 0 && /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
6705
|
-
/* @__PURE__ */ jsx9("div", { style:
|
|
6706
|
-
/* @__PURE__ */ jsx9("div", { style:
|
|
6277
|
+
/* @__PURE__ */ jsx9("div", { style: S3.sectionLabel, children: "Recent" }),
|
|
6278
|
+
/* @__PURE__ */ jsx9("div", { style: S3.swatchGrid, children: controller.getRecent().map((hex, i) => /* @__PURE__ */ jsx9(
|
|
6707
6279
|
"button",
|
|
6708
6280
|
{
|
|
6709
6281
|
type: "button",
|
|
6710
|
-
style: { ...
|
|
6282
|
+
style: { ...S3.swatch, background: hex },
|
|
6711
6283
|
title: hex,
|
|
6712
6284
|
onClick: () => controller.selectColor(hex)
|
|
6713
6285
|
},
|
|
@@ -6723,7 +6295,7 @@ function roundForSpace(space, index, v) {
|
|
|
6723
6295
|
if (space === "oklch") return Math.round(v * 10) / 10;
|
|
6724
6296
|
return Math.round(v);
|
|
6725
6297
|
}
|
|
6726
|
-
var
|
|
6298
|
+
var S3 = {
|
|
6727
6299
|
root: { display: "flex", flexDirection: "column", gap: 8, padding: 8, fontSize: 11, color: "var(--xeno-text)", background: "var(--xeno-canvas)", minWidth: 232, userSelect: "none" },
|
|
6728
6300
|
channels: { display: "flex", alignItems: "center", gap: 6 },
|
|
6729
6301
|
chip: { width: 28, height: 20, borderRadius: 2, border: "1px solid var(--xeno-control)", background: "var(--xeno-canvas)", cursor: "pointer", padding: 0 },
|
|
@@ -8020,7 +7592,7 @@ var curveManifest = {
|
|
|
8020
7592
|
|
|
8021
7593
|
// src/edit/curve/react/CurvePanelView.tsx
|
|
8022
7594
|
import { useCallback as useCallback6, useEffect as useEffect5, useRef as useRef6, useSyncExternalStore as useSyncExternalStore5 } from "react";
|
|
8023
|
-
import { EmptyState, StatusBar, Toolbar, ToolbarGroup } from "@xenosystem/components/chrome";
|
|
7595
|
+
import { EmptyState as EmptyState2, StatusBar, Toolbar, ToolbarGroup } from "@xenosystem/components/chrome";
|
|
8024
7596
|
import { formatTick } from "@xenosystem/time-core";
|
|
8025
7597
|
import { Fragment as Fragment4, jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
8026
7598
|
var DASHES = ["none", "4 2", "1 2", "6 2 1 2"];
|
|
@@ -8128,7 +7700,7 @@ function CurvePanelView({ controller, showPresets = true }) {
|
|
|
8128
7700
|
)) })
|
|
8129
7701
|
}
|
|
8130
7702
|
) : null,
|
|
8131
|
-
channels.length === 0 ? /* @__PURE__ */ jsx10(
|
|
7703
|
+
channels.length === 0 ? /* @__PURE__ */ jsx10(EmptyState2, { title: "No curves", hint: "Wire an animated property into this panel's input." }) : /* @__PURE__ */ jsx10(
|
|
8132
7704
|
"div",
|
|
8133
7705
|
{
|
|
8134
7706
|
ref: containerRef,
|
|
@@ -8897,7 +8469,7 @@ var viewportManifest = {
|
|
|
8897
8469
|
|
|
8898
8470
|
// src/edit/viewport/react/ViewportPanelView.tsx
|
|
8899
8471
|
import { useEffect as useEffect6, useRef as useRef7, useSyncExternalStore as useSyncExternalStore6 } from "react";
|
|
8900
|
-
import { Badge, StatusBar as StatusBar2 } from "@xenosystem/components/chrome";
|
|
8472
|
+
import { Badge as Badge2, StatusBar as StatusBar2 } from "@xenosystem/components/chrome";
|
|
8901
8473
|
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
8902
8474
|
var SLOT_STYLE = {
|
|
8903
8475
|
"top-left": { top: 8, left: 8 },
|
|
@@ -9007,7 +8579,7 @@ function ViewportPanelView({
|
|
|
9007
8579
|
fontSize: 11,
|
|
9008
8580
|
zIndex: 20
|
|
9009
8581
|
},
|
|
9010
|
-
children: /* @__PURE__ */ jsx11(
|
|
8582
|
+
children: /* @__PURE__ */ jsx11(Badge2, { tone: "error", children: "graphics context lost \u2014 restoring" })
|
|
9011
8583
|
}
|
|
9012
8584
|
) : null,
|
|
9013
8585
|
showStats && state.stats ? /* @__PURE__ */ jsx11("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0, zIndex: 10 }, children: /* @__PURE__ */ jsx11(
|
|
@@ -9664,14 +9236,14 @@ var findManifest = {
|
|
|
9664
9236
|
// src/edit/find/react/FindPanelView.tsx
|
|
9665
9237
|
import { useSyncExternalStore as useSyncExternalStore7 } from "react";
|
|
9666
9238
|
import {
|
|
9667
|
-
Badge as
|
|
9668
|
-
EmptyState as
|
|
9669
|
-
IconButton as
|
|
9239
|
+
Badge as Badge3,
|
|
9240
|
+
EmptyState as EmptyState3,
|
|
9241
|
+
IconButton as IconButton3,
|
|
9670
9242
|
Row,
|
|
9671
9243
|
RowList,
|
|
9672
|
-
ScrollArea,
|
|
9673
|
-
SearchField,
|
|
9674
|
-
Section,
|
|
9244
|
+
ScrollArea as ScrollArea2,
|
|
9245
|
+
SearchField as SearchField2,
|
|
9246
|
+
Section as Section2,
|
|
9675
9247
|
StatusBar as StatusBar3,
|
|
9676
9248
|
TextButton as TextButton2,
|
|
9677
9249
|
Toolbar as Toolbar2,
|
|
@@ -9716,12 +9288,12 @@ function StatusLine({
|
|
|
9716
9288
|
hasText
|
|
9717
9289
|
}) {
|
|
9718
9290
|
if (status === "invalidPattern") {
|
|
9719
|
-
return /* @__PURE__ */ jsx12(
|
|
9291
|
+
return /* @__PURE__ */ jsx12(Badge3, { tone: "error", title: message ?? void 0, children: "invalid pattern" });
|
|
9720
9292
|
}
|
|
9721
9293
|
if (status === "failed") {
|
|
9722
|
-
return /* @__PURE__ */ jsx12(
|
|
9294
|
+
return /* @__PURE__ */ jsx12(Badge3, { tone: "error", title: message ?? void 0, children: "search failed" });
|
|
9723
9295
|
}
|
|
9724
|
-
if (status === "searching") return /* @__PURE__ */ jsx12(
|
|
9296
|
+
if (status === "searching") return /* @__PURE__ */ jsx12(Badge3, { children: "searching\u2026" });
|
|
9725
9297
|
if (!hasText || status === "idle") return null;
|
|
9726
9298
|
return /* @__PURE__ */ jsxs11("span", { style: { fontVariantNumeric: "tabular-nums", fontSize: 10, opacity: 0.55 }, children: [
|
|
9727
9299
|
displayIndex,
|
|
@@ -9774,7 +9346,7 @@ function FindPanelView({
|
|
|
9774
9346
|
Toolbar2,
|
|
9775
9347
|
{
|
|
9776
9348
|
left: /* @__PURE__ */ jsx12(
|
|
9777
|
-
|
|
9349
|
+
SearchField2,
|
|
9778
9350
|
{
|
|
9779
9351
|
value: state.text,
|
|
9780
9352
|
onChange: (value) => controller.setText(value),
|
|
@@ -9783,7 +9355,7 @@ function FindPanelView({
|
|
|
9783
9355
|
),
|
|
9784
9356
|
right: /* @__PURE__ */ jsxs11(ToolbarGroup2, { end: true, children: [
|
|
9785
9357
|
/* @__PURE__ */ jsx12(
|
|
9786
|
-
|
|
9358
|
+
IconButton3,
|
|
9787
9359
|
{
|
|
9788
9360
|
label: "Match case",
|
|
9789
9361
|
active: state.options.caseSensitive,
|
|
@@ -9792,7 +9364,7 @@ function FindPanelView({
|
|
|
9792
9364
|
}
|
|
9793
9365
|
),
|
|
9794
9366
|
/* @__PURE__ */ jsx12(
|
|
9795
|
-
|
|
9367
|
+
IconButton3,
|
|
9796
9368
|
{
|
|
9797
9369
|
label: "Whole word",
|
|
9798
9370
|
active: state.options.wholeWord,
|
|
@@ -9801,7 +9373,7 @@ function FindPanelView({
|
|
|
9801
9373
|
}
|
|
9802
9374
|
),
|
|
9803
9375
|
/* @__PURE__ */ jsx12(
|
|
9804
|
-
|
|
9376
|
+
IconButton3,
|
|
9805
9377
|
{
|
|
9806
9378
|
label: "Regular expression",
|
|
9807
9379
|
active: state.options.regex,
|
|
@@ -9829,7 +9401,7 @@ function FindPanelView({
|
|
|
9829
9401
|
),
|
|
9830
9402
|
right: /* @__PURE__ */ jsxs11(ToolbarGroup2, { end: true, children: [
|
|
9831
9403
|
/* @__PURE__ */ jsx12(
|
|
9832
|
-
|
|
9404
|
+
IconButton3,
|
|
9833
9405
|
{
|
|
9834
9406
|
label: "Previous match",
|
|
9835
9407
|
disabled: state.matches.length === 0,
|
|
@@ -9838,7 +9410,7 @@ function FindPanelView({
|
|
|
9838
9410
|
}
|
|
9839
9411
|
),
|
|
9840
9412
|
/* @__PURE__ */ jsx12(
|
|
9841
|
-
|
|
9413
|
+
IconButton3,
|
|
9842
9414
|
{
|
|
9843
9415
|
label: "Next match",
|
|
9844
9416
|
disabled: state.matches.length === 0,
|
|
@@ -9855,7 +9427,7 @@ function FindPanelView({
|
|
|
9855
9427
|
Toolbar2,
|
|
9856
9428
|
{
|
|
9857
9429
|
left: /* @__PURE__ */ jsx12(
|
|
9858
|
-
|
|
9430
|
+
SearchField2,
|
|
9859
9431
|
{
|
|
9860
9432
|
value: state.replaceText,
|
|
9861
9433
|
onChange: (value) => controller.setReplaceText(value),
|
|
@@ -9872,18 +9444,18 @@ function FindPanelView({
|
|
|
9872
9444
|
] })
|
|
9873
9445
|
}
|
|
9874
9446
|
) : null,
|
|
9875
|
-
showResults ? /* @__PURE__ */ jsx12(
|
|
9876
|
-
|
|
9447
|
+
showResults ? /* @__PURE__ */ jsx12(ScrollArea2, { children: state.status === "idle" ? /* @__PURE__ */ jsx12(EmptyState3, { title: "Find", hint: "Type to search. Enter goes to the next match." }) : state.status === "invalidPattern" ? /* @__PURE__ */ jsx12(
|
|
9448
|
+
EmptyState3,
|
|
9877
9449
|
{
|
|
9878
9450
|
title: "Invalid pattern",
|
|
9879
9451
|
hint: state.message ?? "The expression could not be read. Fix it to search."
|
|
9880
9452
|
}
|
|
9881
|
-
) : state.status === "failed" ? /* @__PURE__ */ jsx12(
|
|
9882
|
-
|
|
9453
|
+
) : state.status === "failed" ? /* @__PURE__ */ jsx12(EmptyState3, { title: "Search failed", hint: state.message ?? "The host could not complete the search." }) : state.noResults ? /* @__PURE__ */ jsx12(EmptyState3, { title: "No matches", hint: `Nothing in scope matches \u201C${state.text}\u201D.` }) : state.groups.length === 1 && state.groups[0].id === "" ? /* @__PURE__ */ jsx12(RowList, { children: state.matches.map((m) => renderMatch(m, ++flatIndex)) }) : state.groups.map((group) => /* @__PURE__ */ jsx12(
|
|
9454
|
+
Section2,
|
|
9883
9455
|
{
|
|
9884
9456
|
title: group.label || "Results",
|
|
9885
9457
|
flush: true,
|
|
9886
|
-
badge: /* @__PURE__ */ jsx12(
|
|
9458
|
+
badge: /* @__PURE__ */ jsx12(Badge3, { children: group.matches.length }),
|
|
9887
9459
|
children: /* @__PURE__ */ jsx12(RowList, { children: group.matches.map((m) => renderMatch(m, ++flatIndex)) })
|
|
9888
9460
|
},
|
|
9889
9461
|
group.id
|
|
@@ -10539,10 +10111,10 @@ var commentsManifest = {
|
|
|
10539
10111
|
// src/edit/comments/react/CommentsPanelView.tsx
|
|
10540
10112
|
import { useSyncExternalStore as useSyncExternalStore8 } from "react";
|
|
10541
10113
|
import {
|
|
10542
|
-
Badge as
|
|
10543
|
-
EmptyState as
|
|
10544
|
-
ScrollArea as
|
|
10545
|
-
Section as
|
|
10114
|
+
Badge as Badge4,
|
|
10115
|
+
EmptyState as EmptyState4,
|
|
10116
|
+
ScrollArea as ScrollArea3,
|
|
10117
|
+
Section as Section3,
|
|
10546
10118
|
SegmentedControl as SegmentedControl2,
|
|
10547
10119
|
StatusBar as StatusBar4,
|
|
10548
10120
|
TextButton as TextButton3,
|
|
@@ -10589,8 +10161,8 @@ function ThreadCard({
|
|
|
10589
10161
|
},
|
|
10590
10162
|
children: /* @__PURE__ */ jsxs12("div", { style: { padding: "6px 8px", display: "flex", flexDirection: "column", gap: 4 }, children: [
|
|
10591
10163
|
/* @__PURE__ */ jsxs12("div", { style: { display: "flex", alignItems: "center", gap: 4 }, children: [
|
|
10592
|
-
badge ? /* @__PURE__ */ jsx13(
|
|
10593
|
-
thread.resolved ? /* @__PURE__ */ jsx13(
|
|
10164
|
+
badge ? /* @__PURE__ */ jsx13(Badge4, { tone: badge.tone, title: badge.title, children: badge.label }) : null,
|
|
10165
|
+
thread.resolved ? /* @__PURE__ */ jsx13(Badge4, { children: "resolved" }) : null,
|
|
10594
10166
|
/* @__PURE__ */ jsx13("span", { style: { marginLeft: "auto", fontSize: 9, opacity: 0.4 }, children: formatAge(thread.createdAt, now) })
|
|
10595
10167
|
] }),
|
|
10596
10168
|
thread.anchorLabel ? /* @__PURE__ */ jsx13(
|
|
@@ -10729,18 +10301,18 @@ function CommentsPanelView({
|
|
|
10729
10301
|
" about.",
|
|
10730
10302
|
state.filter.includeOrphaned === false ? /* @__PURE__ */ jsx13(TextButton3, { onClick: () => controller.setFilter({ includeOrphaned: true }), children: "Show" }) : null
|
|
10731
10303
|
] }) : null,
|
|
10732
|
-
/* @__PURE__ */ jsx13(
|
|
10304
|
+
/* @__PURE__ */ jsx13(ScrollArea3, { children: state.threads.length === 0 ? state.filteredEmpty ? (
|
|
10733
10305
|
// NOT "no comments". There are comments; this filter hides them, and telling a
|
|
10734
10306
|
// reviewer their feedback is gone is worse than telling them nothing.
|
|
10735
10307
|
/* @__PURE__ */ jsx13(
|
|
10736
|
-
|
|
10308
|
+
EmptyState4,
|
|
10737
10309
|
{
|
|
10738
10310
|
title: "Nothing matches this filter",
|
|
10739
10311
|
hint: `${state.totals.all} comment${state.totals.all === 1 ? "" : "s"} on this document.`
|
|
10740
10312
|
}
|
|
10741
10313
|
)
|
|
10742
10314
|
) : /* @__PURE__ */ jsx13(
|
|
10743
|
-
|
|
10315
|
+
EmptyState4,
|
|
10744
10316
|
{
|
|
10745
10317
|
title: "No comments",
|
|
10746
10318
|
hint: emptyHint ?? "Select something and add a comment."
|
|
@@ -10756,7 +10328,7 @@ function CommentsPanelView({
|
|
|
10756
10328
|
},
|
|
10757
10329
|
view.thread.id
|
|
10758
10330
|
)),
|
|
10759
|
-
showResolved && resolved.length > 0 ? /* @__PURE__ */ jsx13(
|
|
10331
|
+
showResolved && resolved.length > 0 ? /* @__PURE__ */ jsx13(Section3, { title: `Resolved (${resolved.length})`, flush: true, children: resolved.map((view) => /* @__PURE__ */ jsx13(
|
|
10760
10332
|
ThreadCard,
|
|
10761
10333
|
{
|
|
10762
10334
|
view,
|
|
@@ -11979,7 +11551,7 @@ var nodegraphManifest = {
|
|
|
11979
11551
|
|
|
11980
11552
|
// src/edit/nodegraph/react/NodeGraphPanelView.tsx
|
|
11981
11553
|
import { useCallback as useCallback7, useEffect as useEffect7, useRef as useRef8, useSyncExternalStore as useSyncExternalStore9 } from "react";
|
|
11982
|
-
import { EmptyState as
|
|
11554
|
+
import { EmptyState as EmptyState5, StatusBar as StatusBar5, Toolbar as Toolbar4, ToolbarGroup as ToolbarGroup4 } from "@xenosystem/components/chrome";
|
|
11983
11555
|
import { Fragment as Fragment6, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
11984
11556
|
var HEADER_H2 = 24;
|
|
11985
11557
|
var PORT_ROW_H2 = 18;
|
|
@@ -12069,7 +11641,7 @@ function NodeGraphPanelView({ controller }) {
|
|
|
12069
11641
|
] })
|
|
12070
11642
|
}
|
|
12071
11643
|
),
|
|
12072
|
-
total === 0 ? /* @__PURE__ */ jsx14(
|
|
11644
|
+
total === 0 ? /* @__PURE__ */ jsx14(EmptyState5, { title: "Empty graph", hint: "Wire a host graph into this panel's input." }) : /* @__PURE__ */ jsxs13(
|
|
12073
11645
|
"div",
|
|
12074
11646
|
{
|
|
12075
11647
|
ref: containerRef,
|
|
@@ -13508,14 +13080,14 @@ var treeManifest = {
|
|
|
13508
13080
|
// src/edit/tree/react/TreePanelView.tsx
|
|
13509
13081
|
import { useCallback as useCallback8, useEffect as useEffect8, useRef as useRef9, useState as useState2, useSyncExternalStore as useSyncExternalStore10 } from "react";
|
|
13510
13082
|
import {
|
|
13511
|
-
Badge as
|
|
13512
|
-
EmptyState as
|
|
13083
|
+
Badge as Badge5,
|
|
13084
|
+
EmptyState as EmptyState6,
|
|
13513
13085
|
ErrorState,
|
|
13514
|
-
IconButton as
|
|
13086
|
+
IconButton as IconButton4,
|
|
13515
13087
|
LoadingState,
|
|
13516
13088
|
Row as Row2,
|
|
13517
|
-
ScrollArea as
|
|
13518
|
-
SearchField as
|
|
13089
|
+
ScrollArea as ScrollArea4,
|
|
13090
|
+
SearchField as SearchField3,
|
|
13519
13091
|
StatusBar as StatusBar6,
|
|
13520
13092
|
Toolbar as Toolbar5,
|
|
13521
13093
|
ToolbarGroup as ToolbarGroup5
|
|
@@ -13651,7 +13223,7 @@ function TreePanelView({
|
|
|
13651
13223
|
const sourceState = source?.sourceState ?? "idle";
|
|
13652
13224
|
const body = (() => {
|
|
13653
13225
|
if (!source || sourceState === "idle") {
|
|
13654
|
-
return /* @__PURE__ */ jsx16(
|
|
13226
|
+
return /* @__PURE__ */ jsx16(EmptyState6, { title: "No source", hint: emptyHint ?? "Connect a source to browse it." });
|
|
13655
13227
|
}
|
|
13656
13228
|
if (sourceState === "loading" && state.rows.length === 0) {
|
|
13657
13229
|
return /* @__PURE__ */ jsx16(LoadingState, { label: source.sourceMessage ?? "Loading\u2026" });
|
|
@@ -13668,8 +13240,8 @@ function TreePanelView({
|
|
|
13668
13240
|
);
|
|
13669
13241
|
}
|
|
13670
13242
|
if (state.rows.length === 0) {
|
|
13671
|
-
return state.filter ? /* @__PURE__ */ jsx16(
|
|
13672
|
-
|
|
13243
|
+
return state.filter ? /* @__PURE__ */ jsx16(EmptyState6, { title: "No matches", hint: `Nothing matches \u201C${state.filter}\u201D.` }) : /* @__PURE__ */ jsx16(
|
|
13244
|
+
EmptyState6,
|
|
13673
13245
|
{
|
|
13674
13246
|
title: "Nothing here",
|
|
13675
13247
|
hint: emptyHint ?? source.sourceMessage ?? "This source has no items yet."
|
|
@@ -13684,7 +13256,7 @@ function TreePanelView({
|
|
|
13684
13256
|
overscan
|
|
13685
13257
|
});
|
|
13686
13258
|
const slice = state.rows.slice(window2.startIndex, window2.endIndex);
|
|
13687
|
-
return /* @__PURE__ */ jsx16(
|
|
13259
|
+
return /* @__PURE__ */ jsx16(ScrollArea4, { children: /* @__PURE__ */ jsx16(
|
|
13688
13260
|
"div",
|
|
13689
13261
|
{
|
|
13690
13262
|
ref: scrollRef,
|
|
@@ -13719,7 +13291,7 @@ function TreePanelView({
|
|
|
13719
13291
|
Toolbar5,
|
|
13720
13292
|
{
|
|
13721
13293
|
left: showSearch ? /* @__PURE__ */ jsx16(
|
|
13722
|
-
|
|
13294
|
+
SearchField3,
|
|
13723
13295
|
{
|
|
13724
13296
|
value: state.filter,
|
|
13725
13297
|
onChange: (term) => controller.setFilter(term),
|
|
@@ -13727,16 +13299,16 @@ function TreePanelView({
|
|
|
13727
13299
|
}
|
|
13728
13300
|
) : void 0,
|
|
13729
13301
|
right: /* @__PURE__ */ jsxs15(ToolbarGroup5, { end: true, children: [
|
|
13730
|
-
/* @__PURE__ */ jsx16(
|
|
13302
|
+
/* @__PURE__ */ jsx16(IconButton4, { icon: /* @__PURE__ */ jsx16(ExpandGlyph, {}), label: "Expand all", onClick: () => controller.expandAll() }),
|
|
13731
13303
|
/* @__PURE__ */ jsx16(
|
|
13732
|
-
|
|
13304
|
+
IconButton4,
|
|
13733
13305
|
{
|
|
13734
13306
|
icon: /* @__PURE__ */ jsx16(CollapseGlyph, {}),
|
|
13735
13307
|
label: "Collapse all",
|
|
13736
13308
|
onClick: () => controller.collapseAll()
|
|
13737
13309
|
}
|
|
13738
13310
|
),
|
|
13739
|
-
/* @__PURE__ */ jsx16(
|
|
13311
|
+
/* @__PURE__ */ jsx16(IconButton4, { icon: /* @__PURE__ */ jsx16(RefreshGlyph, {}), label: "Refresh", onClick: () => controller.refresh() })
|
|
13740
13312
|
] })
|
|
13741
13313
|
}
|
|
13742
13314
|
),
|
|
@@ -13871,10 +13443,10 @@ function TreeRowView({
|
|
|
13871
13443
|
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)),
|
|
13872
13444
|
node.badges?.map((badge) => (
|
|
13873
13445
|
// Opaque: the host formatted the text, the panel only places it.
|
|
13874
|
-
/* @__PURE__ */ jsx16(
|
|
13446
|
+
/* @__PURE__ */ jsx16(Badge5, { tone: badge.tone, className: badge.title ? void 0 : void 0, children: badge.text }, badge.id)
|
|
13875
13447
|
)),
|
|
13876
13448
|
node.actions?.map((action) => /* @__PURE__ */ jsx16(
|
|
13877
|
-
|
|
13449
|
+
IconButton4,
|
|
13878
13450
|
{
|
|
13879
13451
|
size: "sm",
|
|
13880
13452
|
icon: /* @__PURE__ */ jsx16(NodeIcon, { icon: action.icon }),
|
|
@@ -13900,7 +13472,7 @@ function ChildStateChip({
|
|
|
13900
13472
|
}
|
|
13901
13473
|
if (row.childState === "error") {
|
|
13902
13474
|
const error = row.node.error;
|
|
13903
|
-
return /* @__PURE__ */ jsx16(
|
|
13475
|
+
return /* @__PURE__ */ jsx16(Badge5, { tone: "error", children: error?.code === "denied" ? "no access" : error?.code ?? "failed" });
|
|
13904
13476
|
}
|
|
13905
13477
|
if (row.node.hasMore && row.expanded) {
|
|
13906
13478
|
return /* @__PURE__ */ jsx16(
|
|
@@ -13917,7 +13489,7 @@ function ChildStateChip({
|
|
|
13917
13489
|
);
|
|
13918
13490
|
}
|
|
13919
13491
|
if (row.node.truncatedAt !== void 0) {
|
|
13920
|
-
return /* @__PURE__ */ jsx16(
|
|
13492
|
+
return /* @__PURE__ */ jsx16(Badge5, { tone: "warning", children: `first ${row.node.truncatedAt}` });
|
|
13921
13493
|
}
|
|
13922
13494
|
if (row.expanded && isEmptyContainer(row.node)) {
|
|
13923
13495
|
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.3",
|
|
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.12.0 <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.12.0",
|
|
80
80
|
"@xenosystem/data-core": "^0.1.0",
|
|
81
81
|
"@xenosystem/elements-react": "0.0.1",
|
|
82
82
|
"@xenosystem/time-core": "^0.1.0",
|