@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.
- package/dist/edit/index.d.ts +35 -1
- package/dist/edit/index.js +67 -28
- package/package.json +114 -114
package/dist/edit/index.d.ts
CHANGED
|
@@ -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 };
|
package/dist/edit/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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__ */
|
|
3509
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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.
|
|
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
|
+
}
|