@xenosystem/blocks 0.13.35 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -955,6 +955,27 @@ interface XenoInspectorField {
955
955
  options?: XenoFieldOption[];
956
956
  /** Whether the select renders its searchable variant. */
957
957
  searchable?: boolean;
958
+ /**
959
+ * For `list`: the sub-schema of ONE item. When set, the value is `XenoListItem[]` (each item carries
960
+ * a stable `id` plus one value per sub-field) and every sub-field is reachable as a VIRTUAL field
961
+ * `${listId}[${itemId}].${subId}` — drafts, gestures, nudges and mixed all work on it unchanged,
962
+ * and a commit rewrites the whole list and emits ONE `set` for the LIST field, so a host sees the
963
+ * same contract it would for any other value. This is what a fill / stroke / effect STACK needs
964
+ * (Canvas found it first, 2026-09-18: without it a list could only hold strings).
965
+ */
966
+ itemFields?: XenoInspectorField[];
967
+ /**
968
+ * Inside `itemFields` only: draw this sub-field for an item only when a sibling sub-field holds one
969
+ * of these values — `{ field: 'kind', in: ['drop-shadow', 'inner-shadow'] }` hides a shadow's colour
970
+ * and offset on a blur row. Raised by Canvas's Effects stack (2026-09-18): a list draws every
971
+ * sub-field for every item, and half of them were meaningless on half the rows.
972
+ */
973
+ when?: {
974
+ field: string;
975
+ in: XenoFieldValue[];
976
+ };
977
+ /** For a structured `list`: the label drawn on each item row (e.g. `Fill`, `Shadow`). */
978
+ itemLabel?: string;
958
979
  /** Axis labels for `vector` (e.g. `['X','Y']`). */
959
980
  components?: string[];
960
981
  /** Scalar ⇔ per-element expander (Canvas's corner radius). */
@@ -982,6 +1003,11 @@ interface XenoSectionAction {
982
1003
  disabled?: boolean;
983
1004
  }
984
1005
  /** An entry in a section's searchable grouped Add menu (engine's Add Component). */
1006
+ /** One item of a structured `list` (a field with `itemFields`). */
1007
+ interface XenoListItem {
1008
+ id: string;
1009
+ [subFieldId: string]: XenoFieldValue;
1010
+ }
985
1011
  interface XenoAddMenuItem {
986
1012
  id: string;
987
1013
  label: string;
@@ -1162,6 +1188,14 @@ declare function isCollapsed(section: XenoInspectorSection, collapsedSet: Readon
1162
1188
  /** Every field in the schema, flattened (regardless of collapse/filter). */
1163
1189
  declare function allFields(schema: XenoInspectorSchema): XenoInspectorField[];
1164
1190
  /** Look up a field by id across every section. */
1191
+ /** `listId[itemId].subId` → its three parts, or null for an ordinary field id. */
1192
+ declare function parseListFieldId(fieldId: string): {
1193
+ listId: string;
1194
+ itemId: string;
1195
+ subId: string;
1196
+ } | null;
1197
+ /** Whether an item shows a sub-field: no `when`, or the named sibling holds one of the listed values. */
1198
+ declare function itemShowsSubField(sub: XenoInspectorField, item: XenoListItem): boolean;
1165
1199
  declare function findField(schema: XenoInspectorSchema, fieldId: string): XenoInspectorField | undefined;
1166
1200
  /** The section containing a field. */
1167
1201
  declare function findSectionOf(schema: XenoInspectorSchema, fieldId: string): XenoInspectorSection | undefined;
@@ -7600,4 +7634,4 @@ declare function TreeIcon({ name, size }: {
7600
7634
  size?: number;
7601
7635
  }): ReactNode;
7602
7636
 
7603
- export { type BlendModeGroup, type BlendModeOption, type Box, BEHAVIOURS$6 as COLOR_BEHAVIOURS, COLOR_DECLARATION, COLOR_RUNTIME_UNITS, COLOR_SPACES, BEHAVIOURS$2 as COMMENTS_BEHAVIOURS, COMMENTS_DECLARATION, COMMENTS_PANEL_ID, COMMENTS_RUNTIME_UNITS, BEHAVIOURS$5 as CURVE_BEHAVIOURS, CURVE_DECLARATION, CURVE_PANEL_ID, CURVE_RUNTIME_UNITS, type ChannelId, ColorPanelController, type ColorPanelControllerOptions, type ColorPanelSerialized, ColorPanelView, type ColorPanelViewProps, type ColorSpace, type ColorStopSink, type ColorToken, type ColorUiIntent, type ColorViewState, CommentsController, type CommentsControllerOptions, type CommentsHostBridge, type CommentsPanelState, CommentsPanelView, type CommentsPanelViewProps, type CommentsRenderContext, type CommentsThreadView, type CommentsUiIntent, type CommentsViewMessage, type CommentsViewModel, type CommentsViewOptions, type CommentsViewReaction, type CommentsViewState, type CommentsViewThread, type ConnectRules, type ConnectVerdict, type CreateColorPanelOptions, type CreateCommentsPanelOptions, type CreateCurvePanelOptions, type CreateFindPanelOptions, type CreateHistoryPanelOptions, type CreateInspectorPanelOptions, type CreateLayersPanelOptions, type CreateNodeGraphPanelOptions, type CreateTreePanelOptions, type CreateViewportPanelOptions, CurveController, type CurveControllerOptions, type CurveDragKind, type CurveDragState, type CurveHostBridge, type CurvePanelState, CurvePanelView, type CurvePanelViewProps, type CurvePreview, type CurveRenderConfig, type CurveRenderContext, CurveSurface, type CurveUiIntent, type CurveViewModel, type CurveViewOptions, type CurveViewState, DEFAULT_BLEND_MODES, DEFAULT_CURVE_ZOOM, DEFAULT_GRAPH_ZOOM, DEFAULT_ICON_MAP, DEFAULT_ORIGINAL_LABEL, type DropInput, EASING_PRESETS, EDIT_SPACES, EMPTY_HISTORY, EMPTY_SCHEMA, EMPTY_TREE, EMPTY_TREE_SOURCE, BEHAVIOURS$3 as FIND_BEHAVIOURS, FIND_DECLARATION, FIND_PANEL_ID, FIND_RUNTIME_UNITS, FindController, type FindControllerOptions, type FindHostBridge, FindKeys, type FindPanelState, FindPanelView, type FindPanelViewProps, type FindRenderContext, type FindUiIntent, type FindViewGroup, type FindViewModel, type FindViewOptions, type FindViewRow, type FindViewState, type FlatRow, type FlattenOptions, GENERIC_ICON, GraphController, type GraphControllerOptions, type GraphDragKind, type GraphDragState, type GraphHostBridge, type GraphPanelState, type GraphPreview, type GraphRenderConfig, type GraphRenderContext, type GraphViewState, BEHAVIOURS$7 as HISTORY_BEHAVIOURS, HISTORY_DECLARATION, HISTORY_RUNTIME_UNITS, type HistoryKeyEvent, HistoryPanelController, type HistoryPanelControllerOptions, type HistoryPanelSerialized, HistoryPanelView, type HistoryPanelViewProps, type ProjectOptions as HistoryProjectOptions, type HistoryRow, type HistoryUiIntent, type HistoryViewRow, type HistoryViewState, type Hsl, type Hsv, IMPLEMENTED_TREE_MODES, BEHAVIOURS$8 as INSPECTOR_BEHAVIOURS, INSPECTOR_DECLARATION, INSPECTOR_RUNTIME_UNITS, type InspectorKeyEvent, InspectorPanelController, type InspectorPanelControllerOptions, type InspectorPanelSerialized, InspectorPanelView, type InspectorPanelViewProps, type ProjectOptions$1 as InspectorProjectOptions, type InspectorUiIntent, type InspectorViewField, type InspectorViewSection, type InspectorViewState, BEHAVIOURS$9 as LAYERS_BEHAVIOURS, LAYERS_DECLARATION, LAYERS_RUNTIME_UNITS, LAYER_COLUMNS, type LayerColumn, type LayersKeyEvent, LayersPanelController, type LayersPanelControllerOptions, type LayersPanelSerialized, LayersPanelView, type LayersPanelViewProps, type LayersUiIntent, type LayersViewRow, type LayersViewState, MIXED, BEHAVIOURS$1 as NODEGRAPH_BEHAVIOURS, NODEGRAPH_DECLARATION, NODEGRAPH_PANEL_ID, NODEGRAPH_RUNTIME_UNITS, NodeGraphPanelView, type NodeGraphPanelViewProps, NodeGraphSurface, type NodeGraphUiIntent, type NodeGraphViewModel, type NodeGraphViewOptions, type NumericConstraints, type OklchDisplay, type ParseResult, type ProjectedSection, type Rgba, SPACE_LABEL, type ScrubOptions, type SelectMods, BEHAVIOURS as TREE_BEHAVIOURS, TREE_DECLARATION, TREE_PANEL_ID, TREE_RUNTIME_UNITS, type TangentEdit, Thumbnail, type ThumbnailProps, TreeController, type TreeControllerOptions, type TreeHostBridge, TreeIcon, type TreeKeyEvent, type TreePanelState, TreePanelView, type TreePanelViewProps, type TreeRenderContext, type TreeRow, TreeScroller, type TreeUiIntent, type TreeViewAction, type TreeViewModel, type TreeViewOptions, type TreeViewRow, type TreeViewState, BEHAVIOURS$4 as VIEWPORT_BEHAVIOURS, VIEWPORT_DECLARATION, VIEWPORT_PANEL_ID, VIEWPORT_RUNTIME_UNITS, VIEWPORT_SLOTS, VIEW_STATE_OPS, ViewportController, type ViewportControllerOptions, type ViewportHostBridge, type ViewportPanelState, ViewportPanelView, type ViewportPanelViewProps, type ViewportRenderContext, ViewportSurface, type ViewportViewModel, type ViewportViewOptions, type ViewportViewState, type XenoAddMenuItem, type XenoAnchorState, type XenoColorValue, type XenoCommentAuthor, type XenoCommentFilter, type XenoCommentMessage, type XenoCommentOp, type XenoCommentReaction, type XenoCommentSort, type XenoCommentThread, type XenoCommitPolicy, type XenoContextMenuRequest, type XenoCurveChannel, type XenoCurveInterpolation, type XenoCurveKey, type XenoCurveKeyRef, type XenoCurveOp, type XenoCurvePoint, XenoCurveScale, type XenoCurveScaleGeometry, type XenoCurveScaleState, type XenoCurveSelection, type XenoCurveSet, type XenoCurveViewport, type XenoCurveZoom, type XenoEasingPreset, type XenoEdge, type XenoFieldAnim, type XenoFieldFocus, type XenoFieldOption, type XenoFieldToken, type XenoFieldType, type XenoFieldValue, type XenoFindMatch, type XenoFindNavigate, type XenoFindOptions, type XenoFindQuery, type XenoFindReplace, type XenoFindResults, type XenoFindStatus, type XenoGradient, type XenoGraph, type XenoGraphOp, XenoGraphScale, type XenoGraphScaleGeometry, type XenoGraphScaleState, type XenoGraphSelection, type XenoGraphViewport, type XenoGraphZoom, type XenoHistoryEntry, type XenoHistoryIntent, type XenoHistoryMemory, type XenoHistoryOrder, type XenoHistoryScope, type XenoHistorySnapshot, type XenoHistorySource, type XenoHistoryState, type XenoHistoryStatus, type XenoInspectorEdit, type XenoInspectorField, type XenoInspectorSchema, type XenoInspectorSection, type XenoInspectorTarget, type XenoInspectorToken, type XenoKeyframeKind, type XenoLayerAdornment, type XenoLayerCap, type XenoLayerKind, type XenoLayerNode, type XenoLayerOp, type XenoLayerTree, type XenoNavigateRequest, type XenoNode, XenoNodeIndex, type XenoPort, type XenoPortDirection, type XenoPortRef, type XenoSectionAction, type XenoTangent, type XenoTangentMode, type XenoTangentSide, type XenoThreadActivate, type XenoThumbnailRequest, type XenoThumbnailResponse, type XenoTreeAction, type XenoTreeBadge, type XenoTreeCaps, type XenoTreeChildState, type XenoTreeChildrenResponse, type XenoTreeError, type XenoTreeGlyph, type XenoTreeIcon, type XenoTreeInvalidate, type XenoTreeMode, type XenoTreeModifiers, type XenoTreeNode, type XenoTreeNodeKind, type XenoTreeOp, type XenoTreeReveal, type XenoTreeSource, type XenoTreeSourceKind, type XenoTreeSourceState, type XenoViewportClient, type XenoViewportKey, type XenoViewportPointer, type XenoViewportSlot, type XenoViewportStats, type XenoViewportSurface, allFields, allIds, anchorStateOf, appliedCount, applyColorUi, applyCommentsUi, applyCurveUi, applyFindUi, applyHistoryUi, applyInspectorUi, applyLayersUi, applyNodeGraphUi, applyPrecision, applyTangentDrag, applyTreeUi, ariaSliderProps, boxesIntersect, canConnect, canRedo, canUndo, childStateOf, clamp, clampAlpha, clampTangent, collectDescendants, colorManifest, colorPanel, colorRuntimeComponents, colorViewManifest, colorViewState, commentsManifest, commentsPanel, commentsViewManifest, commentsViewState, commitPolicyOf, componentsForSpace, computeSurfaceSize, constraintsOf, countIsMeaningful, createColorPanel, createCommentsPanel, createCurvePanel, createFindPanel, createHistoryPanel, createInspectorPanel, createLayersPanel, createNodeGraphPanel, createTreePanel, createViewportPanel, createsCycle, currentRowIndex, curveManifest, curvePanel, curveRuntimeComponents, curveViewManifest, curveViewState, defaultIconFor, displayOrder, distanceToEdge, easeAt, easingPreset, edgeBounds, edgeKey, edgePath, edgesToReplace, edgesTouching, evaluateChannel, fieldMatches, findField, findManifest, findPanel, findPort, findRuntimeComponents, findSectionOf, findViewManifest, findViewState, fitToBounds, fitValueRange, flattenVisible, focusOrder, formatAge, formatNumeric, getAncestors, graphBounds, groupMatches, hasCap, hasDraggableTangents, hasTreeCap, hexFromHsv, highlightSegments, historyManifest, historyPanel, historyRuntimeComponents, historyViewManifest, historyViewState, hslToRgb, hsvFromHex, hsvToRgb, inspectorManifest, inspectorPanel, inspectorRuntimeComponents, inspectorViewManifest, inspectorViewState, interpolateSegment, isAncestorOf, isAnimated, isCollapsed, isColorSpace, isContainer, isEmptyContainer, isFieldEditable, isFieldMixed, isJumpable, isKeyEditable, isLayerColumn, isMixedValue, isOrphaned, isTreeContainer, isValidHex, isViewStateOp, keyRefId, layersManifest, layersPanel, layersRuntimeComponents, layersViewManifest, layersViewState, liveEdges, makeColorValue, matchesFilter, messagesOf, mirrorTangent, nodeBounds, nodegraphManifest, nodegraphPanel, nodegraphRuntimeComponents, nodegraphViewManifest, nodegraphViewState, normalizeColorInput, normalizeHistoryState, normalizeKindKey, normalizeNumeric, normalizeRanges, normalizeSchema, normalizeTree, nudgeValue, oklchToRgb, parseCssColor, parseHexColor, parseNumeric, passesFilter, patternError, portHasRoom, portRefId, positionToValue, projectRows, projectSections, rangeBetween, resolveDropTarget, resolveIconName, rgbToHex, rgbToHsl, rgbToHsv, rgbToOklch, rgbaToCssHex, roundRgb, rowIndexOf, rowIndexOfEntry, safeAddColorStop, safeAddColorStops, sameKey, sampleChannel, scrubValue, segmentsAround, solveBezierT, sortThreads, surfaceChanged, tangentsForMode, tangentsToControlPoints, toViewportCoords, totalCount, treeManifest, treePanel, treeRuntimeComponents, treeViewManifest, treeViewState, usesLogScale, valueExtent, valueToPosition, valuesEqual, viewportManifest, viewportPanel, viewportRuntimeComponents, viewportViewManifest, viewportViewState, visibleEdges, walkTree, wheelZoomFactor, zoomAboutCursor, zoomTimeAboutCursor, zoomValueAboutCursor };
7637
+ export { type BlendModeGroup, type BlendModeOption, type Box, BEHAVIOURS$6 as COLOR_BEHAVIOURS, COLOR_DECLARATION, COLOR_RUNTIME_UNITS, COLOR_SPACES, BEHAVIOURS$2 as COMMENTS_BEHAVIOURS, COMMENTS_DECLARATION, COMMENTS_PANEL_ID, COMMENTS_RUNTIME_UNITS, BEHAVIOURS$5 as CURVE_BEHAVIOURS, CURVE_DECLARATION, CURVE_PANEL_ID, CURVE_RUNTIME_UNITS, type ChannelId, ColorPanelController, type ColorPanelControllerOptions, type ColorPanelSerialized, ColorPanelView, type ColorPanelViewProps, type ColorSpace, type ColorStopSink, type ColorToken, type ColorUiIntent, type ColorViewState, CommentsController, type CommentsControllerOptions, type CommentsHostBridge, type CommentsPanelState, CommentsPanelView, type CommentsPanelViewProps, type CommentsRenderContext, type CommentsThreadView, type CommentsUiIntent, type CommentsViewMessage, type CommentsViewModel, type CommentsViewOptions, type CommentsViewReaction, type CommentsViewState, type CommentsViewThread, type ConnectRules, type ConnectVerdict, type CreateColorPanelOptions, type CreateCommentsPanelOptions, type CreateCurvePanelOptions, type CreateFindPanelOptions, type CreateHistoryPanelOptions, type CreateInspectorPanelOptions, type CreateLayersPanelOptions, type CreateNodeGraphPanelOptions, type CreateTreePanelOptions, type CreateViewportPanelOptions, CurveController, type CurveControllerOptions, type CurveDragKind, type CurveDragState, type CurveHostBridge, type CurvePanelState, CurvePanelView, type CurvePanelViewProps, type CurvePreview, type CurveRenderConfig, type CurveRenderContext, CurveSurface, type CurveUiIntent, type CurveViewModel, type CurveViewOptions, type CurveViewState, DEFAULT_BLEND_MODES, DEFAULT_CURVE_ZOOM, DEFAULT_GRAPH_ZOOM, DEFAULT_ICON_MAP, DEFAULT_ORIGINAL_LABEL, type DropInput, EASING_PRESETS, EDIT_SPACES, EMPTY_HISTORY, EMPTY_SCHEMA, EMPTY_TREE, EMPTY_TREE_SOURCE, BEHAVIOURS$3 as FIND_BEHAVIOURS, FIND_DECLARATION, FIND_PANEL_ID, FIND_RUNTIME_UNITS, FindController, type FindControllerOptions, type FindHostBridge, FindKeys, type FindPanelState, FindPanelView, type FindPanelViewProps, type FindRenderContext, type FindUiIntent, type FindViewGroup, type FindViewModel, type FindViewOptions, type FindViewRow, type FindViewState, type FlatRow, type FlattenOptions, GENERIC_ICON, GraphController, type GraphControllerOptions, type GraphDragKind, type GraphDragState, type GraphHostBridge, type GraphPanelState, type GraphPreview, type GraphRenderConfig, type GraphRenderContext, type GraphViewState, BEHAVIOURS$7 as HISTORY_BEHAVIOURS, HISTORY_DECLARATION, HISTORY_RUNTIME_UNITS, type HistoryKeyEvent, HistoryPanelController, type HistoryPanelControllerOptions, type HistoryPanelSerialized, HistoryPanelView, type HistoryPanelViewProps, type ProjectOptions as HistoryProjectOptions, type HistoryRow, type HistoryUiIntent, type HistoryViewRow, type HistoryViewState, type Hsl, type Hsv, IMPLEMENTED_TREE_MODES, BEHAVIOURS$8 as INSPECTOR_BEHAVIOURS, INSPECTOR_DECLARATION, INSPECTOR_RUNTIME_UNITS, type InspectorKeyEvent, InspectorPanelController, type InspectorPanelControllerOptions, type InspectorPanelSerialized, InspectorPanelView, type InspectorPanelViewProps, type ProjectOptions$1 as InspectorProjectOptions, type InspectorUiIntent, type InspectorViewField, type InspectorViewSection, type InspectorViewState, BEHAVIOURS$9 as LAYERS_BEHAVIOURS, LAYERS_DECLARATION, LAYERS_RUNTIME_UNITS, LAYER_COLUMNS, type LayerColumn, type LayersKeyEvent, LayersPanelController, type LayersPanelControllerOptions, type LayersPanelSerialized, LayersPanelView, type LayersPanelViewProps, type LayersUiIntent, type LayersViewRow, type LayersViewState, MIXED, BEHAVIOURS$1 as NODEGRAPH_BEHAVIOURS, NODEGRAPH_DECLARATION, NODEGRAPH_PANEL_ID, NODEGRAPH_RUNTIME_UNITS, NodeGraphPanelView, type NodeGraphPanelViewProps, NodeGraphSurface, type NodeGraphUiIntent, type NodeGraphViewModel, type NodeGraphViewOptions, type NumericConstraints, type OklchDisplay, type ParseResult, type ProjectedSection, type Rgba, SPACE_LABEL, type ScrubOptions, type SelectMods, BEHAVIOURS as TREE_BEHAVIOURS, TREE_DECLARATION, TREE_PANEL_ID, TREE_RUNTIME_UNITS, type TangentEdit, Thumbnail, type ThumbnailProps, TreeController, type TreeControllerOptions, type TreeHostBridge, TreeIcon, type TreeKeyEvent, type TreePanelState, TreePanelView, type TreePanelViewProps, type TreeRenderContext, type TreeRow, TreeScroller, type TreeUiIntent, type TreeViewAction, type TreeViewModel, type TreeViewOptions, type TreeViewRow, type TreeViewState, BEHAVIOURS$4 as VIEWPORT_BEHAVIOURS, VIEWPORT_DECLARATION, VIEWPORT_PANEL_ID, VIEWPORT_RUNTIME_UNITS, VIEWPORT_SLOTS, VIEW_STATE_OPS, ViewportController, type ViewportControllerOptions, type ViewportHostBridge, type ViewportPanelState, ViewportPanelView, type ViewportPanelViewProps, type ViewportRenderContext, ViewportSurface, type ViewportViewModel, type ViewportViewOptions, type ViewportViewState, type XenoAddMenuItem, type XenoAnchorState, type XenoColorValue, type XenoCommentAuthor, type XenoCommentFilter, type XenoCommentMessage, type XenoCommentOp, type XenoCommentReaction, type XenoCommentSort, type XenoCommentThread, type XenoCommitPolicy, type XenoContextMenuRequest, type XenoCurveChannel, type XenoCurveInterpolation, type XenoCurveKey, type XenoCurveKeyRef, type XenoCurveOp, type XenoCurvePoint, XenoCurveScale, type XenoCurveScaleGeometry, type XenoCurveScaleState, type XenoCurveSelection, type XenoCurveSet, type XenoCurveViewport, type XenoCurveZoom, type XenoEasingPreset, type XenoEdge, type XenoFieldAnim, type XenoFieldFocus, type XenoFieldOption, type XenoFieldToken, type XenoFieldType, type XenoFieldValue, type XenoFindMatch, type XenoFindNavigate, type XenoFindOptions, type XenoFindQuery, type XenoFindReplace, type XenoFindResults, type XenoFindStatus, type XenoGradient, type XenoGraph, type XenoGraphOp, XenoGraphScale, type XenoGraphScaleGeometry, type XenoGraphScaleState, type XenoGraphSelection, type XenoGraphViewport, type XenoGraphZoom, type XenoHistoryEntry, type XenoHistoryIntent, type XenoHistoryMemory, type XenoHistoryOrder, type XenoHistoryScope, type XenoHistorySnapshot, type XenoHistorySource, type XenoHistoryState, type XenoHistoryStatus, type XenoInspectorEdit, type XenoInspectorField, type XenoInspectorSchema, type XenoInspectorSection, type XenoInspectorTarget, type XenoInspectorToken, type XenoKeyframeKind, type XenoLayerAdornment, type XenoLayerCap, type XenoLayerKind, type XenoLayerNode, type XenoLayerOp, type XenoLayerTree, type XenoNavigateRequest, type XenoNode, XenoNodeIndex, type XenoPort, type XenoPortDirection, type XenoPortRef, type XenoSectionAction, type XenoTangent, type XenoTangentMode, type XenoTangentSide, type XenoThreadActivate, type XenoThumbnailRequest, type XenoThumbnailResponse, type XenoTreeAction, type XenoTreeBadge, type XenoTreeCaps, type XenoTreeChildState, type XenoTreeChildrenResponse, type XenoTreeError, type XenoTreeGlyph, type XenoTreeIcon, type XenoTreeInvalidate, type XenoTreeMode, type XenoTreeModifiers, type XenoTreeNode, type XenoTreeNodeKind, type XenoTreeOp, type XenoTreeReveal, type XenoTreeSource, type XenoTreeSourceKind, type XenoTreeSourceState, type XenoViewportClient, type XenoViewportKey, type XenoViewportPointer, type XenoViewportSlot, type XenoViewportStats, type XenoViewportSurface, allFields, allIds, anchorStateOf, appliedCount, applyColorUi, applyCommentsUi, applyCurveUi, applyFindUi, applyHistoryUi, applyInspectorUi, applyLayersUi, applyNodeGraphUi, applyPrecision, applyTangentDrag, applyTreeUi, ariaSliderProps, boxesIntersect, canConnect, canRedo, canUndo, childStateOf, clamp, clampAlpha, clampTangent, collectDescendants, colorManifest, colorPanel, colorRuntimeComponents, colorViewManifest, colorViewState, commentsManifest, commentsPanel, commentsViewManifest, commentsViewState, commitPolicyOf, componentsForSpace, computeSurfaceSize, constraintsOf, countIsMeaningful, createColorPanel, createCommentsPanel, createCurvePanel, createFindPanel, createHistoryPanel, createInspectorPanel, createLayersPanel, createNodeGraphPanel, createTreePanel, createViewportPanel, createsCycle, currentRowIndex, curveManifest, curvePanel, curveRuntimeComponents, curveViewManifest, curveViewState, defaultIconFor, displayOrder, distanceToEdge, easeAt, easingPreset, edgeBounds, edgeKey, edgePath, edgesToReplace, edgesTouching, evaluateChannel, fieldMatches, findField, findManifest, findPanel, findPort, findRuntimeComponents, findSectionOf, findViewManifest, findViewState, fitToBounds, fitValueRange, flattenVisible, focusOrder, formatAge, formatNumeric, getAncestors, graphBounds, groupMatches, hasCap, hasDraggableTangents, hasTreeCap, hexFromHsv, highlightSegments, historyManifest, historyPanel, historyRuntimeComponents, historyViewManifest, historyViewState, hslToRgb, hsvFromHex, hsvToRgb, inspectorManifest, inspectorPanel, inspectorRuntimeComponents, inspectorViewManifest, inspectorViewState, interpolateSegment, isAncestorOf, isAnimated, isCollapsed, isColorSpace, isContainer, isEmptyContainer, isFieldEditable, isFieldMixed, isJumpable, isKeyEditable, isLayerColumn, isMixedValue, isOrphaned, isTreeContainer, isValidHex, isViewStateOp, itemShowsSubField, keyRefId, layersManifest, layersPanel, layersRuntimeComponents, layersViewManifest, layersViewState, liveEdges, makeColorValue, matchesFilter, messagesOf, mirrorTangent, nodeBounds, nodegraphManifest, nodegraphPanel, nodegraphRuntimeComponents, nodegraphViewManifest, nodegraphViewState, normalizeColorInput, normalizeHistoryState, normalizeKindKey, normalizeNumeric, normalizeRanges, normalizeSchema, normalizeTree, nudgeValue, oklchToRgb, parseCssColor, parseHexColor, parseListFieldId, parseNumeric, passesFilter, patternError, portHasRoom, portRefId, positionToValue, projectRows, projectSections, rangeBetween, resolveDropTarget, resolveIconName, rgbToHex, rgbToHsl, rgbToHsv, rgbToOklch, rgbaToCssHex, roundRgb, rowIndexOf, rowIndexOfEntry, safeAddColorStop, safeAddColorStops, sameKey, sampleChannel, scrubValue, segmentsAround, solveBezierT, sortThreads, surfaceChanged, tangentsForMode, tangentsToControlPoints, toViewportCoords, totalCount, treeManifest, treePanel, treeRuntimeComponents, treeViewManifest, treeViewState, usesLogScale, valueExtent, valueToPosition, valuesEqual, viewportManifest, viewportPanel, viewportRuntimeComponents, viewportViewManifest, viewportViewState, visibleEdges, walkTree, wheelZoomFactor, zoomAboutCursor, zoomTimeAboutCursor, zoomValueAboutCursor };
@@ -1990,12 +1990,28 @@ function allFields(schema) {
1990
1990
  for (const section of schema.sections) out.push(...section.fields);
1991
1991
  return out;
1992
1992
  }
1993
+ function parseListFieldId(fieldId) {
1994
+ const m = /^(.+?)\[([^\]]+)\]\.(.+)$/.exec(fieldId);
1995
+ return m ? { listId: m[1], itemId: m[2], subId: m[3] } : null;
1996
+ }
1997
+ function itemShowsSubField(sub, item) {
1998
+ if (!sub.when) return true;
1999
+ const v = item[sub.when.field];
2000
+ return sub.when.in.some((x) => x === v);
2001
+ }
1993
2002
  function findField(schema, fieldId) {
1994
2003
  for (const section of schema.sections) {
1995
2004
  const found = section.fields.find((f) => f.id === fieldId);
1996
2005
  if (found) return found;
1997
2006
  }
1998
- return void 0;
2007
+ const v = parseListFieldId(fieldId);
2008
+ if (!v) return void 0;
2009
+ const list = findField(schema, v.listId);
2010
+ const sub = list?.itemFields?.find((f) => f.id === v.subId);
2011
+ if (!list || !sub) return void 0;
2012
+ const item = (Array.isArray(list.value) ? list.value : []).find((it) => it?.id === v.itemId);
2013
+ if (!item) return void 0;
2014
+ return { ...sub, id: fieldId, value: item[v.subId], disabled: sub.disabled || list.disabled, readOnly: sub.readOnly || list.readOnly };
1999
2015
  }
2000
2016
  function findSectionOf(schema, fieldId) {
2001
2017
  return schema.sections.find((s) => s.fields.some((f) => f.id === fieldId));
@@ -2335,6 +2351,13 @@ var InspectorPanelController = class {
2335
2351
  if (!force && !mixed && valuesEqual(value, this.getFieldValue(fieldId))) return false;
2336
2352
  const targetIds = this.targetIds();
2337
2353
  const id = gestureId ?? (targetIds.length > 1 ? this.nextGestureId() : void 0);
2354
+ const virtual = parseListFieldId(fieldId);
2355
+ if (virtual) {
2356
+ const items = this.getFieldValue(virtual.listId) ?? [];
2357
+ const next = items.map((it) => it.id === virtual.itemId ? { ...it, [virtual.subId]: value } : it);
2358
+ this.emit(id ? { type: "set", targetIds, fieldId: virtual.listId, value: next, gestureId: id } : { type: "set", targetIds, fieldId: virtual.listId, value: next });
2359
+ return true;
2360
+ }
2338
2361
  this.emit(id ? { type: "set", targetIds, fieldId, value, gestureId: id } : { type: "set", targetIds, fieldId, value });
2339
2362
  return true;
2340
2363
  }
@@ -3226,6 +3249,7 @@ import { Badge as Badge2, Column as Column2, EmptyState as EmptyState2, Field, F
3226
3249
 
3227
3250
  // src/edit/inspector/react/widgets.tsx
3228
3251
  import { useCallback as useCallback2, useRef as useRef3 } from "react";
3252
+ import { Fragment as Fragment2 } from "react";
3229
3253
  import {
3230
3254
  AxisLabel,
3231
3255
  IconButton as IconButton2,
@@ -3240,7 +3264,7 @@ import {
3240
3264
  TextButton,
3241
3265
  Toggle
3242
3266
  } from "@xenosystem/components/chrome";
3243
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
3267
+ import { Fragment as Fragment3, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
3244
3268
  function displayText(field, controller) {
3245
3269
  const draft = controller.getDraft(field.id);
3246
3270
  if (draft !== void 0) return draft;
@@ -3492,7 +3516,13 @@ function ColorWidget({ field, controller }) {
3492
3516
  }
3493
3517
  );
3494
3518
  }
3495
- function ListWidget({ field, controller }) {
3519
+ var listSeq = 0;
3520
+ function newListItem(field) {
3521
+ const item = { id: `i${Date.now().toString(36)}${listSeq += 1}` };
3522
+ for (const sub of field.itemFields ?? []) item[sub.id] = sub.defaultValue;
3523
+ return item;
3524
+ }
3525
+ function ListWidget({ field, controller, renderField }) {
3496
3526
  const editable = isFieldEditable(field);
3497
3527
  const raw = controller.getFieldValue(field.id);
3498
3528
  const items = Array.isArray(raw) ? raw : [];
@@ -3503,16 +3533,23 @@ function ListWidget({ field, controller }) {
3503
3533
  next.splice(to, 0, moved);
3504
3534
  write(next);
3505
3535
  };
3536
+ const structured = !!field.itemFields?.length;
3506
3537
  return /* @__PURE__ */ jsxs2(Stack, { gap: 2, pad: "none", children: [
3507
3538
  items.map((item, i) => /* @__PURE__ */ jsxs2(Stack, { direction: "row", gap: 2, pad: "none", children: [
3508
- /* @__PURE__ */ jsx3(Text2, { role: "meta", children: typeof item === "string" ? item : JSON.stringify(item) }),
3509
- editable ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
3539
+ structured && renderField ? /* @__PURE__ */ jsxs2(Stack, { gap: 2, pad: "none", children: [
3540
+ field.itemLabel ? /* @__PURE__ */ jsx3(Text2, { role: "caption", children: `${field.itemLabel} ${i + 1}` }) : null,
3541
+ field.itemFields.filter((sub) => itemShowsSubField(sub, item)).map((sub) => {
3542
+ const virtual = controller.getField(`${field.id}[${item.id}].${sub.id}`);
3543
+ return virtual ? /* @__PURE__ */ jsx3(Fragment2, { children: renderField(virtual) }, sub.id) : null;
3544
+ })
3545
+ ] }) : /* @__PURE__ */ jsx3(Text2, { role: "meta", children: typeof item === "string" ? item : JSON.stringify(item) }),
3546
+ editable ? /* @__PURE__ */ jsxs2(Fragment3, { children: [
3510
3547
  /* @__PURE__ */ jsx3(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx3("span", { "aria-hidden": true, children: "\u2191" }), label: "Move up", disabled: i === 0, onClick: () => move(i, i - 1) }),
3511
3548
  /* @__PURE__ */ jsx3(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx3("span", { "aria-hidden": true, children: "\u2193" }), label: "Move down", disabled: i === items.length - 1, onClick: () => move(i, i + 1) }),
3512
3549
  /* @__PURE__ */ jsx3(IconButton2, { size: "sm", icon: /* @__PURE__ */ jsx3(XIcon2, {}), label: "Remove", onClick: () => write(items.filter((_, j) => j !== i)) })
3513
3550
  ] }) : null
3514
- ] }, i)),
3515
- editable ? /* @__PURE__ */ jsx3(TextButton, { onClick: () => write([...items, ""]), children: "+ Add" }) : null
3551
+ ] }, structured ? item.id : i)),
3552
+ editable ? /* @__PURE__ */ jsx3(TextButton, { onClick: () => write([...items, structured ? newListItem(field) : ""]), children: "+ Add" }) : null
3516
3553
  ] });
3517
3554
  }
3518
3555
  function InfoWidget({ field, controller }) {
@@ -3539,7 +3576,7 @@ function JsonWidget({ field, controller }) {
3539
3576
  }
3540
3577
 
3541
3578
  // src/edit/inspector/react/InspectorPanelView.tsx
3542
- import { Fragment as Fragment3, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
3579
+ import { Fragment as Fragment4, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
3543
3580
  function InspectorPanelView({ controller }) {
3544
3581
  const subscribe = useCallback3((cb) => controller.subscribe(cb), [controller]);
3545
3582
  const getSnapshot = useCallback3(() => controller.getRevision(), [controller]);
@@ -3586,7 +3623,7 @@ function SectionView({ section, controller }) {
3586
3623
  enabled: section.enabled,
3587
3624
  onEnabledChange: () => ui10({ kind: "toggleSectionEnabled", sectionId: section.id }),
3588
3625
  badge: section.badge ? /* @__PURE__ */ jsx4(Badge2, { children: section.badge }) : null,
3589
- actions: hasActions ? /* @__PURE__ */ jsxs3(Fragment3, { children: [
3626
+ actions: hasActions ? /* @__PURE__ */ jsxs3(Fragment4, { children: [
3590
3627
  section.actions.map((action) => /* @__PURE__ */ jsx4(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx4(ActionGlyph, { glyph: action.glyph }), label: action.label, disabled: action.disabled, onClick: () => ui10({ kind: "runAction", sectionId: section.id, actionId: action.id }) }, action.id)),
3591
3628
  section.hasAddMenu ? /* @__PURE__ */ jsx4(Menu, { size: "sm", trigger: "\uFF0B", items: section.addItems, label: section.addLabel, align: "end", onSelect: (id) => ui10({ kind: "addItem", sectionId: section.id, itemId: id }) }) : null
3592
3629
  ] }) : null,
@@ -3599,7 +3636,7 @@ function SectionView({ section, controller }) {
3599
3636
  }
3600
3637
  function FieldRow({ row: row2, controller }) {
3601
3638
  const ui10 = (intent) => applyInspectorUi(controller, intent);
3602
- return /* @__PURE__ */ jsxs3(Fragment3, { children: [
3639
+ return /* @__PURE__ */ jsxs3(Fragment4, { children: [
3603
3640
  /* @__PURE__ */ jsxs3(
3604
3641
  Field,
3605
3642
  {
@@ -3608,13 +3645,13 @@ function FieldRow({ row: row2, controller }) {
3608
3645
  focused: row2.focused,
3609
3646
  onLabelClick: () => ui10({ kind: "focusField", fieldId: row2.id }),
3610
3647
  onContextMenu: (x, y) => ui10({ kind: "contextMenu", fieldId: row2.id, x, y }),
3611
- leading: row2.showKeyframes ? /* @__PURE__ */ jsxs3(Fragment3, { children: [
3648
+ leading: row2.showKeyframes ? /* @__PURE__ */ jsxs3(Fragment4, { children: [
3612
3649
  /* @__PURE__ */ jsx4(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx4(StopwatchIcon, {}), label: "Toggle animation", active: row2.animated, onClick: () => ui10({ kind: "keyframe", fieldId: row2.id, op: "toggleAnim" }) }),
3613
3650
  row2.animated ? /* @__PURE__ */ jsx4(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx4(PrevIcon, {}), label: "Previous keyframe", disabled: row2.prevDisabled, onClick: () => ui10({ kind: "keyframe", fieldId: row2.id, op: "prev" }) }) : null,
3614
3651
  row2.animated ? /* @__PURE__ */ jsx4(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx4(DiamondIcon, { filled: row2.onKeyframe }), label: row2.keyframeLabel, onClick: () => ui10({ kind: "keyframe", fieldId: row2.id, op: row2.keyframeOp }) }) : null,
3615
3652
  row2.animated ? /* @__PURE__ */ jsx4(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx4(NextIcon, {}), label: "Next keyframe", disabled: row2.nextDisabled, onClick: () => ui10({ kind: "keyframe", fieldId: row2.id, op: "next" }) }) : null
3616
3653
  ] }) : null,
3617
- trailing: /* @__PURE__ */ jsxs3(Fragment3, { children: [
3654
+ trailing: /* @__PURE__ */ jsxs3(Fragment4, { children: [
3618
3655
  row2.showEasing ? /* @__PURE__ */ jsx4(Select2, { size: "sm", options: row2.easingOptions, value: row2.easing, label: "Easing", onChange: (v) => ui10({ kind: "setEasing", fieldId: row2.id, easing: v }) }) : null,
3619
3656
  row2.showKeyframes ? /* @__PURE__ */ jsx4(Badge2, { size: "sm", children: row2.keyframeChip }) : null,
3620
3657
  row2.showToken ? /* @__PURE__ */ jsx4(IconButton3, { size: "sm", icon: /* @__PURE__ */ jsx4(LinkIcon, {}), label: row2.tokenActionLabel, active: row2.bound, onClick: () => ui10({ kind: "bindToken", fieldId: row2.id }) }) : null,
@@ -3647,7 +3684,7 @@ function FieldWidget({
3647
3684
  case "color":
3648
3685
  return /* @__PURE__ */ jsx4(ColorWidget, { field, controller });
3649
3686
  case "list":
3650
- return /* @__PURE__ */ jsx4(ListWidget, { field, controller });
3687
+ return /* @__PURE__ */ jsx4(ListWidget, { field, controller, renderField: (f) => /* @__PURE__ */ jsx4(FieldWidget, { field: f, controller }) });
3651
3688
  case "info":
3652
3689
  return /* @__PURE__ */ jsx4(InfoWidget, { field, controller });
3653
3690
  case "text":
@@ -4863,7 +4900,7 @@ var HISTORY_DECLARATION = {
4863
4900
 
4864
4901
  // src/edit/history/react/HistoryPanelView.tsx
4865
4902
  import { Badge as Badge3, Column as Column3, EmptyState as EmptyState3, IconButton as IconButton4, InlineConfirm, RowList as RowList2, Row as Row2, ScrollArea as ScrollArea3, SearchField as SearchField3, Spinner, StatusBar as StatusBar2, Text as Text4, Toolbar as Toolbar2, VirtualWindow as VirtualWindow2 } from "@xenosystem/components/chrome";
4866
- import { Fragment as Fragment4, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
4903
+ import { Fragment as Fragment5, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
4867
4904
  function HistoryPanelView({ controller }) {
4868
4905
  const subscribe = useCallback4((cb) => controller.subscribe(cb), [controller]);
4869
4906
  const getSnapshot = useCallback4(() => controller.getRevision(), [controller]);
@@ -4874,11 +4911,11 @@ function HistoryPanelView({ controller }) {
4874
4911
  /* @__PURE__ */ jsx5(
4875
4912
  Toolbar2,
4876
4913
  {
4877
- left: /* @__PURE__ */ jsxs4(Fragment4, { children: [
4914
+ left: /* @__PURE__ */ jsxs4(Fragment5, { children: [
4878
4915
  /* @__PURE__ */ jsx5(IconButton4, { size: "sm", icon: /* @__PURE__ */ jsx5(UndoIcon, {}), label: "Undo", disabled: !view.canUndo, onClick: () => ui10({ kind: "undo" }) }),
4879
4916
  /* @__PURE__ */ jsx5(IconButton4, { size: "sm", icon: /* @__PURE__ */ jsx5(RedoIcon, {}), label: "Redo", disabled: !view.canRedo, onClick: () => ui10({ kind: "redo" }) })
4880
4917
  ] }),
4881
- right: /* @__PURE__ */ jsxs4(Fragment4, { children: [
4918
+ right: /* @__PURE__ */ jsxs4(Fragment5, { children: [
4882
4919
  /* @__PURE__ */ jsx5(Text4, { role: "number", children: view.counter }),
4883
4920
  view.clearAllowed ? /* @__PURE__ */ jsx5(IconButton4, { size: "sm", icon: /* @__PURE__ */ jsx5(TrashIcon, {}), label: "Clear history", onClick: () => ui10({ kind: "requestClear" }) }) : null
4884
4921
  ] }),
@@ -4959,7 +4996,7 @@ function HistoryRowView({ row: row2, controller }) {
4959
4996
  meta: row2.meta,
4960
4997
  "data-history-row": row2.key,
4961
4998
  title: row2.label,
4962
- trailing: /* @__PURE__ */ jsxs4(Fragment4, { children: [
4999
+ trailing: /* @__PURE__ */ jsxs4(Fragment5, { children: [
4963
5000
  row2.pending ? /* @__PURE__ */ jsx5(Spinner, {}) : null,
4964
5001
  row2.failed ? /* @__PURE__ */ jsx5(Badge3, { size: "sm", tone: "error", children: "failed" }) : null,
4965
5002
  row2.showSource ? /* @__PURE__ */ jsx5(Badge3, { size: "sm", title: row2.sourceTitle, children: row2.sourceGlyph }) : null,
@@ -7784,7 +7821,7 @@ var CURVE_DECLARATION = {
7784
7821
  };
7785
7822
 
7786
7823
  // src/edit/curve/react/CurvePanelView.tsx
7787
- import { Fragment as Fragment5, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
7824
+ import { Fragment as Fragment6, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
7788
7825
  var DASHES = ["none", "4 2", "1 2", "6 2 1 2"];
7789
7826
  function CurvePanelView({ controller, ...options }) {
7790
7827
  useSyncExternalStore5(controller.subscribe, controller.getState, controller.getState);
@@ -8002,7 +8039,7 @@ function Handles({
8002
8039
  scale
8003
8040
  }) {
8004
8041
  const sides = ["in", "out"];
8005
- return /* @__PURE__ */ jsx7(Fragment5, { children: sides.map((side) => {
8042
+ return /* @__PURE__ */ jsx7(Fragment6, { children: sides.map((side) => {
8006
8043
  const tangent = side === "in" ? keyframe.tangentIn : keyframe.tangentOut;
8007
8044
  if (!tangent) return null;
8008
8045
  const hx = scale.tickToX(keyframe.tick + tangent.x);
@@ -9671,7 +9708,7 @@ var FIND_DECLARATION = {
9671
9708
  };
9672
9709
 
9673
9710
  // src/edit/find/react/FindPanelView.tsx
9674
- import { Fragment as Fragment6, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
9711
+ import { Fragment as Fragment7, jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
9675
9712
  var CaseIcon = ICONS["icons/Case"];
9676
9713
  var WordIcon = ICONS["icons/WholeWord"];
9677
9714
  var RegexIcon = ICONS["icons/Regex"];
@@ -9726,7 +9763,7 @@ function FindPanelView({ controller, showResults, placeholder }) {
9726
9763
  Toolbar4,
9727
9764
  {
9728
9765
  divided: false,
9729
- left: /* @__PURE__ */ jsxs8(Fragment6, { children: [
9766
+ left: /* @__PURE__ */ jsxs8(Fragment7, { children: [
9730
9767
  view.invalid ? /* @__PURE__ */ jsx9(Badge5, { tone: "error", title: view.message ?? void 0, children: "invalid pattern" }) : null,
9731
9768
  view.failed ? /* @__PURE__ */ jsx9(Badge5, { tone: "error", title: view.message ?? void 0, children: "search failed" }) : null,
9732
9769
  view.searchingBadge ? /* @__PURE__ */ jsx9(Badge5, { children: "searching\u2026" }) : null,
@@ -11925,7 +11962,7 @@ var NODEGRAPH_DECLARATION = {
11925
11962
  };
11926
11963
 
11927
11964
  // src/edit/nodegraph/react/NodeGraphPanelView.tsx
11928
- import { Fragment as Fragment7, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
11965
+ import { Fragment as Fragment8, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
11929
11966
  var HEADER_H2 = 24;
11930
11967
  var PORT_ROW_H2 = 18;
11931
11968
  function NodeGraphPanelView({ controller, ...options }) {
@@ -12142,7 +12179,7 @@ function NodeRect({ node, selected, zoom }) {
12142
12179
  children: node.title
12143
12180
  }
12144
12181
  ),
12145
- node.collapsed ? null : /* @__PURE__ */ jsxs10(Fragment7, { children: [
12182
+ node.collapsed ? null : /* @__PURE__ */ jsxs10(Fragment8, { children: [
12146
12183
  node.inputs.map((port, i) => /* @__PURE__ */ jsx11(
12147
12184
  Port,
12148
12185
  {
@@ -13752,13 +13789,13 @@ var TREE_DECLARATION = {
13752
13789
  };
13753
13790
 
13754
13791
  // src/edit/tree/react/TreePanelView.tsx
13755
- import { Fragment as Fragment8, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
13792
+ import { Fragment as Fragment9, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
13756
13793
  var DRAG_THRESHOLD2 = 4;
13757
13794
  function TreePanelView({ controller, ...options }) {
13758
13795
  useSyncExternalStore10(controller.subscribe, controller.getState, controller.getState);
13759
13796
  const view = treeViewState(controller, options);
13760
13797
  const ui10 = (intent) => applyTreeUi(controller, intent, options);
13761
- const icon = (name, textValue) => /* @__PURE__ */ jsxs11(Fragment8, { children: [
13798
+ const icon = (name, textValue) => /* @__PURE__ */ jsxs11(Fragment9, { children: [
13762
13799
  name ? /* @__PURE__ */ jsx12(TreeIcon, { name }) : null,
13763
13800
  textValue ? /* @__PURE__ */ jsx12(Text9, { role: "caption", children: textValue }) : null
13764
13801
  ] });
@@ -13775,18 +13812,18 @@ function TreePanelView({ controller, ...options }) {
13775
13812
  dropHint: r.dropHint,
13776
13813
  title: r.dropTitle,
13777
13814
  icon: icon(r.iconName, r.iconText),
13778
- label: /* @__PURE__ */ jsxs11(Fragment8, { children: [
13815
+ label: /* @__PURE__ */ jsxs11(Fragment9, { children: [
13779
13816
  r.renaming ? /* @__PURE__ */ jsx12(Input5, { autoFocus: true, value: r.draft, label: "Name", onChange: (value) => ui10({ kind: "renameDraft", value }), onBlur: () => ui10({ kind: "commitRename" }), onKeyDown: (e) => ui10({ kind: "renameKey", key: e.key }) }) : null,
13780
13817
  !r.renaming ? r.label : null
13781
13818
  ] }),
13782
- meta: /* @__PURE__ */ jsxs11(Fragment8, { children: [
13819
+ meta: /* @__PURE__ */ jsxs11(Fragment9, { children: [
13783
13820
  r.chipLoading ? /* @__PURE__ */ jsx12(Text9, { role: "caption", children: "loading\u2026" }) : null,
13784
13821
  r.chipError ? /* @__PURE__ */ jsx12(Badge8, { tone: "error", children: r.chipErrorText }) : null,
13785
13822
  r.chipLoadMore ? /* @__PURE__ */ jsx12(TextButton7, { onClick: () => ui10({ kind: "loadMore", id: r.id }), children: "load more\u2026" }) : null,
13786
13823
  r.chipTruncated ? /* @__PURE__ */ jsx12(Badge8, { tone: "warning", children: r.chipTruncatedText }) : null,
13787
13824
  r.chipEmpty ? /* @__PURE__ */ jsx12(Text9, { role: "caption", children: "empty" }) : null
13788
13825
  ] }),
13789
- trailing: /* @__PURE__ */ jsxs11(Fragment8, { children: [
13826
+ trailing: /* @__PURE__ */ jsxs11(Fragment9, { children: [
13790
13827
  r.columns.map((c) => /* @__PURE__ */ jsx12(Text9, { role: "number", children: c.text }, c.key)),
13791
13828
  r.glyphs.map((g) => /* @__PURE__ */ jsx12(Text9, { role: "meta", title: g.title, children: icon(g.iconName, g.iconText) }, g.key)),
13792
13829
  r.badges.map((b) => /* @__PURE__ */ jsx12(Badge8, { tone: b.tone, children: b.text }, b.key)),
@@ -14306,6 +14343,7 @@ export {
14306
14343
  isTreeContainer,
14307
14344
  isValidHex,
14308
14345
  isViewStateOp,
14346
+ itemShowsSubField,
14309
14347
  keyRefId,
14310
14348
  layersManifest,
14311
14349
  layersPanel,
@@ -14334,6 +14372,7 @@ export {
14334
14372
  oklchToRgb,
14335
14373
  parseCssColor,
14336
14374
  parseHexColor,
14375
+ parseListFieldId,
14337
14376
  parseNumeric,
14338
14377
  passesFilter,
14339
14378
  patternError,
package/package.json CHANGED
@@ -1,114 +1,114 @@
1
- {
2
- "name": "@xenosystem/blocks",
3
- "version": "0.13.35",
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
- "license": "UNLICENSED",
6
- "type": "module",
7
- "sideEffects": false,
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- },
13
- "./auth": {
14
- "types": "./dist/auth/index.d.ts",
15
- "import": "./dist/auth/index.js"
16
- },
17
- "./trust": {
18
- "types": "./dist/trust/index.d.ts",
19
- "import": "./dist/trust/index.js"
20
- },
21
- "./ops": {
22
- "types": "./dist/ops/index.d.ts",
23
- "import": "./dist/ops/index.js"
24
- },
25
- "./time": {
26
- "types": "./dist/time/index.d.ts",
27
- "import": "./dist/time/index.js"
28
- },
29
- "./data": {
30
- "types": "./dist/data/index.d.ts",
31
- "import": "./dist/data/index.js"
32
- },
33
- "./data/duckdb": {
34
- "types": "./dist/data/duckdb.d.ts",
35
- "import": "./dist/data/duckdb.js"
36
- },
37
- "./icons": {
38
- "types": "./dist/icons/index.d.ts",
39
- "import": "./dist/icons/index.js"
40
- },
41
- "./edit": {
42
- "types": "./dist/edit/index.d.ts",
43
- "import": "./dist/edit/index.js"
44
- },
45
- "./agent": {
46
- "types": "./dist/agent/index.d.ts",
47
- "import": "./dist/agent/index.js"
48
- },
49
- "./agent/host-source": {
50
- "types": "./dist/agent/host-source.d.ts",
51
- "import": "./dist/agent/host-source.js"
52
- }
53
- },
54
- "files": [
55
- "dist",
56
- "README.md",
57
- "LICENSE"
58
- ],
59
- "scripts": {
60
- "build": "tsup",
61
- "typecheck": "tsc --noEmit",
62
- "test": "vitest run"
63
- },
64
- "peerDependencies": {
65
- "@duckdb/duckdb-wasm": ">=1.28.0",
66
- "@xenosystem/block-sdk": ">=0.3.4 <1",
67
- "@xenosystem/components": ">=0.33.0 <1",
68
- "@xenosystem/data-core": "^0.1.0",
69
- "@xenosystem/elements": ">=0.0.1",
70
- "@xenosystem/elements-react": ">=0.0.1",
71
- "@xenosystem/time-core": "^0.1.0",
72
- "@xenosystem/tree-core": "^0.1.0",
73
- "@xenosystem/workbench": "^1.0.0",
74
- "@xterm/addon-fit": ">=0.10.0",
75
- "@xterm/xterm": ">=5.5.0",
76
- "react": ">=18.0.0",
77
- "react-dom": ">=18.0.0"
78
- },
79
- "devDependencies": {
80
- "@types/node": "^22.0.0",
81
- "@types/react": "^19.0.0",
82
- "@types/react-dom": "^19.0.0",
83
- "@xenosystem/block-sdk": "^0.3.4",
84
- "@xenosystem/components": "^0.33.0",
85
- "@xenosystem/data-core": "^0.1.0",
86
- "@xenosystem/elements": "0.0.1",
87
- "@xenosystem/elements-react": "0.0.1",
88
- "@xenosystem/time-core": "^0.1.0",
89
- "@xenosystem/tree-core": "^0.1.0",
90
- "@xenosystem/workbench": "^1.2.1",
91
- "@xterm/addon-fit": "^0.11.0",
92
- "@xterm/xterm": "^6.0.0",
93
- "jsdom": "^26.0.0",
94
- "react": "^19.0.0",
95
- "react-dom": "^19.0.0",
96
- "tsup": "^8.0.0",
97
- "typescript": "^5.4.0",
98
- "vitest": "^4.1.0"
99
- },
100
- "publishConfig": {
101
- "access": "public"
102
- },
103
- "peerDependenciesMeta": {
104
- "@xterm/xterm": {
105
- "optional": true
106
- },
107
- "@xterm/addon-fit": {
108
- "optional": true
109
- },
110
- "@duckdb/duckdb-wasm": {
111
- "optional": true
112
- }
113
- }
114
- }
1
+ {
2
+ "name": "@xenosystem/blocks",
3
+ "version": "0.14.1",
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
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./auth": {
14
+ "types": "./dist/auth/index.d.ts",
15
+ "import": "./dist/auth/index.js"
16
+ },
17
+ "./trust": {
18
+ "types": "./dist/trust/index.d.ts",
19
+ "import": "./dist/trust/index.js"
20
+ },
21
+ "./ops": {
22
+ "types": "./dist/ops/index.d.ts",
23
+ "import": "./dist/ops/index.js"
24
+ },
25
+ "./time": {
26
+ "types": "./dist/time/index.d.ts",
27
+ "import": "./dist/time/index.js"
28
+ },
29
+ "./data": {
30
+ "types": "./dist/data/index.d.ts",
31
+ "import": "./dist/data/index.js"
32
+ },
33
+ "./data/duckdb": {
34
+ "types": "./dist/data/duckdb.d.ts",
35
+ "import": "./dist/data/duckdb.js"
36
+ },
37
+ "./icons": {
38
+ "types": "./dist/icons/index.d.ts",
39
+ "import": "./dist/icons/index.js"
40
+ },
41
+ "./edit": {
42
+ "types": "./dist/edit/index.d.ts",
43
+ "import": "./dist/edit/index.js"
44
+ },
45
+ "./agent": {
46
+ "types": "./dist/agent/index.d.ts",
47
+ "import": "./dist/agent/index.js"
48
+ },
49
+ "./agent/host-source": {
50
+ "types": "./dist/agent/host-source.d.ts",
51
+ "import": "./dist/agent/host-source.js"
52
+ }
53
+ },
54
+ "files": [
55
+ "dist",
56
+ "README.md",
57
+ "LICENSE"
58
+ ],
59
+ "scripts": {
60
+ "build": "tsup",
61
+ "typecheck": "tsc --noEmit",
62
+ "test": "vitest run"
63
+ },
64
+ "peerDependencies": {
65
+ "@duckdb/duckdb-wasm": ">=1.28.0",
66
+ "@xenosystem/block-sdk": ">=0.3.4 <1",
67
+ "@xenosystem/components": ">=0.33.0 <1",
68
+ "@xenosystem/data-core": "^0.1.0",
69
+ "@xenosystem/elements": ">=0.0.1",
70
+ "@xenosystem/elements-react": ">=0.0.1",
71
+ "@xenosystem/time-core": "^0.1.0",
72
+ "@xenosystem/tree-core": "^0.1.0",
73
+ "@xenosystem/workbench": "^1.0.0",
74
+ "@xterm/addon-fit": ">=0.10.0",
75
+ "@xterm/xterm": ">=5.5.0",
76
+ "react": ">=18.0.0",
77
+ "react-dom": ">=18.0.0"
78
+ },
79
+ "devDependencies": {
80
+ "@types/node": "^22.0.0",
81
+ "@types/react": "^19.0.0",
82
+ "@types/react-dom": "^19.0.0",
83
+ "@xenosystem/block-sdk": "^0.3.4",
84
+ "@xenosystem/components": "^0.33.0",
85
+ "@xenosystem/data-core": "^0.1.0",
86
+ "@xenosystem/elements": "0.0.1",
87
+ "@xenosystem/elements-react": "0.0.1",
88
+ "@xenosystem/time-core": "^0.1.0",
89
+ "@xenosystem/tree-core": "^0.1.0",
90
+ "@xenosystem/workbench": "^1.2.1",
91
+ "@xterm/addon-fit": "^0.11.0",
92
+ "@xterm/xterm": "^6.0.0",
93
+ "jsdom": "^26.0.0",
94
+ "react": "^19.0.0",
95
+ "react-dom": "^19.0.0",
96
+ "tsup": "^8.0.0",
97
+ "typescript": "^5.4.0",
98
+ "vitest": "^4.1.0"
99
+ },
100
+ "publishConfig": {
101
+ "access": "public"
102
+ },
103
+ "peerDependenciesMeta": {
104
+ "@xterm/xterm": {
105
+ "optional": true
106
+ },
107
+ "@xterm/addon-fit": {
108
+ "optional": true
109
+ },
110
+ "@duckdb/duckdb-wasm": {
111
+ "optional": true
112
+ }
113
+ }
114
+ }