diff --git a/packages/serverless-workflow-diagram-editor/src/core/README.md b/packages/serverless-workflow-diagram-editor/src/core/README.md index 3194a6a..92e998b 100644 --- a/packages/serverless-workflow-diagram-editor/src/core/README.md +++ b/packages/serverless-workflow-diagram-editor/src/core/README.md @@ -20,6 +20,12 @@ Core package agnostic from the rendering library and its types. ## Modules +`workflowSdk.ts` and `graph.ts` are the only places in the diagram editor that import from the SDK directly, keeping the rest of the editor decoupled from SDK implementation details. + ### workflowSdk.ts -Abstraction layer over the `@serverlessworkflow/sdk`. This is the only place in the diagram editor that imports from the SDK directly keeping the rest of the editor decoupled from SDK implementation details. +Abstraction layer over the `@serverlessworkflow/sdk`. + +### graph.ts + +Add custom types to the original sdk `Graph` type. diff --git a/packages/serverless-workflow-diagram-editor/src/core/autoLayout.ts b/packages/serverless-workflow-diagram-editor/src/core/autoLayout.ts new file mode 100644 index 0000000..d8c7792 --- /dev/null +++ b/packages/serverless-workflow-diagram-editor/src/core/autoLayout.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ExtendedGraph, Position, Size } from "./graph"; + +export function applyAutoLayout(graph: ExtendedGraph): ExtendedGraph { + const graphClone = structuredClone(graph); + + // TODO: This is just a temporary implementation until the actual auto-layout engine is integrated + const nodeSize: Size = { height: 50, width: 70 }; + let position: Position = { x: 0, y: 0 }; + + // TODO: Containment is not supported for now. + graphClone.nodes.forEach((node) => { + node.size = { ...nodeSize }; + node.position = { ...position }; + position.y = position.y + 100; + }); + + return graphClone; +} diff --git a/packages/serverless-workflow-diagram-editor/src/core/graph.ts b/packages/serverless-workflow-diagram-editor/src/core/graph.ts new file mode 100644 index 0000000..c2980bb --- /dev/null +++ b/packages/serverless-workflow-diagram-editor/src/core/graph.ts @@ -0,0 +1,107 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Graph, GraphEdge, GraphNode, GraphNodeType } from "@serverlessworkflow/sdk"; + +// Override / add multiple properties of a type in a generic way +export type Override = Omit & NewProps; + +// Supported edge types +export enum GraphEdgeType { + Default = "default", + Error = "error", + Condition = "condition", +} + +export type Point = { + x: number; + y: number; +}; + +export type Position = Point; + +export type Size = { + height: number; + width: number; +}; + +export type WayPoints = Point[]; + +// Add extra properties to GraphNode +export type ExtendedGraphNode = Override< + GraphNode, + { + position?: Position; + size?: Size; + } +>; + +// Add extra properties to GraphEdge +export type ExtendedGraphEdge = GraphEdge & { + type?: GraphEdgeType; + wayPoints?: WayPoints; +}; + +export type ExtendedGraph = Override< + Graph, + { + parent?: ExtendedGraph | null; + nodes: ExtendedGraphNode[]; + edges: ExtendedGraphEdge[]; + entryNode: ExtendedGraphNode; + exitNode: ExtendedGraphNode; + } +>; + +export function solveEdgeTypes(graph: ExtendedGraph): ExtendedGraph { + const graphClone = structuredClone(graph); + + // root level + setEdgeTypes(graphClone); + // children n level + graphClone.nodes.flat().forEach((node) => setEdgeTypes(node as ExtendedGraph)); + + return graphClone; +} + +function setEdgeTypes(graph: ExtendedGraph): ExtendedGraph { + if (!graph.edges || !graph.nodes) { + return graph; + } + + for (let i = 0; i < graph.nodes.length; i++) { + const graphNode = graph.nodes[i]! as ExtendedGraph; + + for (let j = 0; j < graph.edges.length; j++) { + const graphEdge = graph.edges[j]!; + + if (graphNode.id === graphEdge.sourceId) { + switch (graphNode.type) { + case GraphNodeType.Raise: + graphEdge.type = GraphEdgeType.Error; + break; + case GraphNodeType.Switch: + graphEdge.type = GraphEdgeType.Condition; + break; + default: + graphEdge.type = GraphEdgeType.Default; + } + } + } + } + + return graph; +} diff --git a/packages/serverless-workflow-diagram-editor/src/core/index.ts b/packages/serverless-workflow-diagram-editor/src/core/index.ts index 16c12a3..800557d 100644 --- a/packages/serverless-workflow-diagram-editor/src/core/index.ts +++ b/packages/serverless-workflow-diagram-editor/src/core/index.ts @@ -15,3 +15,5 @@ */ export * from "./workflowSdk"; +export * from "./graph"; +export * from "./autoLayout"; diff --git a/packages/serverless-workflow-diagram-editor/src/core/workflowSdk.ts b/packages/serverless-workflow-diagram-editor/src/core/workflowSdk.ts index 3f0e25d..09c3c49 100644 --- a/packages/serverless-workflow-diagram-editor/src/core/workflowSdk.ts +++ b/packages/serverless-workflow-diagram-editor/src/core/workflowSdk.ts @@ -15,16 +15,17 @@ */ import yaml from "js-yaml"; -import { Classes, Specification, validate } from "@serverlessworkflow/sdk"; +import * as sdk from "@serverlessworkflow/sdk"; +import { ExtendedGraph, solveEdgeTypes } from "./graph"; export type WorkflowParseResult = { - model: Specification.Workflow | null; + model: sdk.Specification.Workflow | null; errors: Error[]; }; -export function validateWorkflow(model: Specification.Workflow): Error[] { +export function validateWorkflow(model: sdk.Specification.Workflow): Error[] { try { - validate("Workflow", model); + sdk.validate("Workflow", model); return []; } catch (err) { // TODO: Parse individual validation errors from the SDK into separate Error objects when we are ready to render them. @@ -33,10 +34,10 @@ export function validateWorkflow(model: Specification.Workflow): Error[] { } export function parseWorkflow(text: string): WorkflowParseResult { - let raw: Partial; + let raw: Partial; try { - raw = yaml.load(text, { schema: yaml.DEFAULT_SCHEMA }) as Partial; + raw = yaml.load(text, { schema: yaml.DEFAULT_SCHEMA }) as Partial; } catch (err) { return { model: null, @@ -48,8 +49,12 @@ export function parseWorkflow(text: string): WorkflowParseResult { return { model: null, errors: [new Error("Not a valid workflow object")] }; } - const model = new Classes.Workflow(raw) as Specification.Workflow; + const model = new sdk.Classes.Workflow(raw) as sdk.Specification.Workflow; const errors = validateWorkflow(model); return { model, errors }; } + +export function buildGraph(model: sdk.Specification.Workflow): ExtendedGraph { + return solveEdgeTypes(sdk.buildGraph(model)); +} diff --git a/packages/serverless-workflow-diagram-editor/src/store/DiagramEditorContextProvider.tsx b/packages/serverless-workflow-diagram-editor/src/store/DiagramEditorContextProvider.tsx index bfd717f..6c2733f 100644 --- a/packages/serverless-workflow-diagram-editor/src/store/DiagramEditorContextProvider.tsx +++ b/packages/serverless-workflow-diagram-editor/src/store/DiagramEditorContextProvider.tsx @@ -15,7 +15,6 @@ */ import * as React from "react"; -import type { Specification } from "@serverlessworkflow/sdk"; import { parseWorkflow } from "../core"; import { DiagramEditorProps } from "../diagram-editor/DiagramEditor"; import { DiagramEditorContext, DiagramEditorContextType } from "./DiagramEditorContext"; diff --git a/packages/serverless-workflow-diagram-editor/tests/core/__snapshots__/workflowSdk.integration.test.ts.snap b/packages/serverless-workflow-diagram-editor/tests/core/__snapshots__/workflowSdk.integration.test.ts.snap index 6ce73a6..ab9d664 100644 --- a/packages/serverless-workflow-diagram-editor/tests/core/__snapshots__/workflowSdk.integration.test.ts.snap +++ b/packages/serverless-workflow-diagram-editor/tests/core/__snapshots__/workflowSdk.integration.test.ts.snap @@ -1,5 +1,101 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`buildGraph > returns a loaded extended graph object from model 1`] = ` +{ + "edges": [ + { + "destinationId": "root-exit-node", + "id": "/do/4/step5-root-exit-node", + "label": "", + "sourceId": "/do/4/step5", + "type": "default", + }, + { + "destinationId": "/do/4/step5", + "id": "/do/3/step4-/do/4/step5", + "label": "", + "sourceId": "/do/3/step4", + "type": "default", + }, + { + "destinationId": "/do/3/step4", + "id": "/do/2/step3-/do/3/step4", + "label": "", + "sourceId": "/do/2/step3", + "type": "default", + }, + { + "destinationId": "/do/2/step3", + "id": "/do/1/step2-/do/2/step3", + "label": "", + "sourceId": "/do/1/step2", + "type": "default", + }, + { + "destinationId": "/do/1/step2", + "id": "/do/0/step1-/do/1/step2", + "label": "", + "sourceId": "/do/0/step1", + "type": "default", + }, + { + "destinationId": "/do/0/step1", + "id": "root-entry-node-/do/0/step1", + "label": "", + "sourceId": "root-entry-node", + "type": "default", + }, + ], + "entryNode": { + "id": "root-entry-node", + "type": "start", + }, + "exitNode": { + "id": "root-exit-node", + "type": "end", + }, + "id": "root", + "label": undefined, + "nodes": [ + { + "id": "root-entry-node", + "type": "start", + }, + { + "id": "root-exit-node", + "type": "end", + }, + { + "id": "/do/0/step1", + "label": "step1", + "type": "set", + }, + { + "id": "/do/1/step2", + "label": "step2", + "type": "set", + }, + { + "id": "/do/2/step3", + "label": "step3", + "type": "set", + }, + { + "id": "/do/3/step4", + "label": "step4", + "type": "set", + }, + { + "id": "/do/4/step5", + "label": "step5", + "type": "set", + }, + ], + "parent": undefined, + "type": "root", +} +`; + exports[`parseWorkflow > parses valid 'JSON' and returns model with no errors 1`] = ` { "errors": [], diff --git a/packages/serverless-workflow-diagram-editor/tests/core/autoLayout.integration.test.ts b/packages/serverless-workflow-diagram-editor/tests/core/autoLayout.integration.test.ts new file mode 100644 index 0000000..d5ff34c --- /dev/null +++ b/packages/serverless-workflow-diagram-editor/tests/core/autoLayout.integration.test.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, it, expect } from "vitest"; +import { applyAutoLayout, buildGraph, parseWorkflow } from "../../src/core"; +import { BASIC_VALID_WORKFLOW_JSON_TASKS } from "../fixtures/workflows"; + +describe("applyAutoLayout", () => { + it("apply auto-layout calculated layout to graph elements", () => { + const result = parseWorkflow(BASIC_VALID_WORKFLOW_JSON_TASKS); + + const graph = applyAutoLayout(buildGraph(result.model!)); + + expect(graph!.nodes).toHaveLength(7); + expect(graph!.edges).toHaveLength(6); + + let y = 0; + graph!.nodes.forEach((node) => { + // TODO coordinates are fixed (y = y + 100) for now + expect(node.position!.y).toBe(y); + y += 100; + }); + }); +}); diff --git a/packages/serverless-workflow-diagram-editor/tests/core/graph.test.ts b/packages/serverless-workflow-diagram-editor/tests/core/graph.test.ts new file mode 100644 index 0000000..0fa6e3a --- /dev/null +++ b/packages/serverless-workflow-diagram-editor/tests/core/graph.test.ts @@ -0,0 +1,268 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, it, expect } from "vitest"; +import { ExtendedGraph, GraphEdgeType, solveEdgeTypes } from "../../src/core"; +import * as sdk from "@serverlessworkflow/sdk"; + +describe("ExtendedGraph", () => { + it("Add type property to default edges", () => { + const sdkGraph = { + id: "root", + type: "root", + entryNode: { type: "start", id: "root-entry-node" }, + exitNode: { type: "end", id: "root-exit-node" }, + nodes: [ + { type: "start", id: "root-entry-node" }, + { type: "end", id: "root-exit-node" }, + { type: "set", id: "/do/0/step1", label: "step1" }, + { type: "set", id: "/do/1/step2", label: "step2" }, + { type: "set", id: "/do/2/step3", label: "step3" }, + { type: "set", id: "/do/3/step4", label: "step4" }, + { type: "set", id: "/do/4/step5", label: "step5" }, + ], + edges: [ + { + label: "", + id: "/do/4/step5-root-exit-node", + sourceId: "/do/4/step5", + destinationId: "root-exit-node", + }, + { + label: "", + id: "/do/3/step4-/do/4/step5", + sourceId: "/do/3/step4", + destinationId: "/do/4/step5", + }, + { + label: "", + id: "/do/2/step3-/do/3/step4", + sourceId: "/do/2/step3", + destinationId: "/do/3/step4", + }, + { + label: "", + id: "/do/1/step2-/do/2/step3", + sourceId: "/do/1/step2", + destinationId: "/do/2/step3", + }, + { + label: "", + id: "/do/0/step1-/do/1/step2", + sourceId: "/do/0/step1", + destinationId: "/do/1/step2", + }, + { + label: "", + id: "root-entry-node-/do/0/step1", + sourceId: "root-entry-node", + destinationId: "/do/0/step1", + }, + ], + } as sdk.Graph; + + const graph = solveEdgeTypes(sdkGraph); + + expect(graph.edges).toHaveLength(6); + graph.edges.forEach((edge) => expect(edge.type!).toBe(GraphEdgeType.Default)); + }); + + it("Add type property to error edges", () => { + const sdkGraph = { + id: "root", + type: "root", + entryNode: { id: "root-entry-node", type: "start" }, + exitNode: { id: "root-exit-node", type: "end" }, + nodes: [ + { id: "root-entry-node", type: "start" }, + { id: "root-exit-node", type: "end" }, + { + id: "/do/0/raiseUndefinedPriorityError", + label: "raiseUndefinedPriorityError", + type: "raise", + }, + { id: "/do/1/escalateToManager", label: "escalateToManager", type: "call" }, + ], + edges: [ + { + destinationId: "root-exit-node", + id: "/do/1/escalateToManager-root-exit-node", + sourceId: "/do/1/escalateToManager", + }, + { + destinationId: "/do/1/escalateToManager", + id: "/do/0/raiseUndefinedPriorityError-/do/1/escalateToManager", + sourceId: "/do/0/raiseUndefinedPriorityError", + }, + { + destinationId: "/do/0/raiseUndefinedPriorityError", + id: "root-entry-node-/do/0/raiseUndefinedPriorityError", + sourceId: "root-entry-node", + }, + ], + } as sdk.Graph; + + const graph = solveEdgeTypes(sdkGraph); + + expect(graph.edges[1].type!).toBe(GraphEdgeType.Error); + }); + + it("Add type property to condition edges", () => { + const sdkGraph = { + type: "root", + id: "root", + entryNode: { id: "root-entry-node", type: "start" }, + exitNode: { id: "root-exit-node", type: "end" }, + nodes: [ + { id: "root-entry-node", type: "start" }, + { id: "root-exit-node", type: "end" }, + { id: "/do/0/processOrder", label: "processOrder", type: "switch" }, + { id: "/do/1/step1", label: "step1", type: "set" }, + { id: "/do/2/step2", label: "step2", type: "set" }, + { id: "/do/3/stepDefault", label: "stepDefault", type: "set" }, + ], + edges: [ + { + destinationId: "/do/0/processOrder", + id: "root-entry-node-/do/0/processOrder", + sourceId: "root-entry-node", + }, + { + destinationId: "root-exit-node", + id: "/do/1/step1-root-exit-node", + sourceId: "/do/1/step1", + }, + { + destinationId: "root-exit-node", + id: "/do/2/step2-root-exit-node", + sourceId: "/do/2/step2", + }, + { + destinationId: "root-exit-node", + id: "/do/3/stepDefault-root-exit-node", + sourceId: "/do/3/stepDefault", + }, + { + destinationId: "/do/1/step1", + id: "/do/0/processOrder-/do/1/step1", + sourceId: "/do/0/processOrder", + }, + { + destinationId: "/do/2/step2", + id: "/do/0/processOrder-/do/2/step2-case2", + sourceId: "/do/0/processOrder", + }, + { + destinationId: "/do/3/stepDefault", + id: "/do/0/processOrder-/do/3/stepDefault-default", + sourceId: "/do/0/processOrder", + }, + ], + } as sdk.Graph; + + const graph = solveEdgeTypes(sdkGraph); + + const switchNode = graph.nodes.find((node) => node.type === sdk.GraphNodeType.Switch); + expect(switchNode).toBeDefined(); + + const conditionEdges = graph.edges.filter((edge) => edge.sourceId === switchNode!.id); + expect(conditionEdges).toHaveLength(3); + conditionEdges.forEach((edge) => expect(edge.type!).toBe(GraphEdgeType.Condition)); + }); + + it("Add type property to nested edges", () => { + const sdkGraph = { + id: "root", + type: "root", + entryNode: { id: "root-entry-node", type: "start" }, + exitNode: { id: "root-exit-node", type: "end" }, + nodes: [ + { id: "root-entry-node", type: "start" }, + { id: "root-exit-node", type: "end" }, + { + id: "/do/0/checkup", + type: "for", + label: "checkup", + entryNode: { id: "/do/0/checkup-entry-node", type: "entry" }, + exitNode: { id: "/do/0/checkup-exit-node", type: "exit" }, + nodes: [ + { id: "/do/0/checkup-entry-node", type: "entry" }, + { id: "/do/0/checkup-exit-node", type: "exit" }, + { id: "/do/0/checkup/for/do/0/step1", label: "step1", type: "set" }, + { + id: "/do/0/checkup/for/do/1/raiseUndefinedPriorityError", + label: "raiseUndefinedPriorityError", + type: "raise", + }, + { + id: "/do/0/checkup/for/do/2/escalateToManager", + label: "escalateToManager", + type: "call", + }, + ], + edges: [ + { + destinationId: "/do/0/checkup-exit-node", + id: "/do/0/checkup/for/do/2/escalateToManager-/do/0/checkup-exit-node", + sourceId: "/do/0/checkup/for/do/2/escalateToManager", + }, + { + destinationId: "/do/0/checkup/for/do/2/escalateToManager", + id: "/do/0/checkup/for/do/1/raiseUndefinedPriorityError-/do/0/checkup/for/do/2/escalateToManager", + sourceId: "/do/0/checkup/for/do/1/raiseUndefinedPriorityError", + }, + { + destinationId: "/do/0/checkup/for/do/1/raiseUndefinedPriorityError", + id: "/do/0/checkup/for/do/0/step1-/do/0/checkup/for/do/1/raiseUndefinedPriorityError", + sourceId: "/do/0/checkup/for/do/0/step1", + }, + { + destinationId: "/do/0/checkup/for/do/0/step1", + id: "/do/0/checkup-entry-node-/do/0/checkup/for/do/0/step1", + sourceId: "/do/0/checkup-entry-node", + }, + ], + }, + ], + edges: [ + { + destinationId: "root-exit-node", + id: "/do/0/checkup-exit-node-root-exit-node", + sourceId: "/do/0/checkup-exit-node", + }, + { + destinationId: "/do/0/checkup-entry-node", + id: "root-entry-node-/do/0/checkup-entry-node", + sourceId: "root-entry-node", + }, + ], + } as sdk.Graph; + + const extendedGraph = solveEdgeTypes(sdkGraph); + + const forNode = extendedGraph.nodes.find((node) => node.type === sdk.GraphNodeType.For) as + | ExtendedGraph + | undefined; + + // looking into for task nodes + expect(forNode).toBeDefined(); + expect(forNode!.type!).toBe(sdk.GraphNodeType.For); + expect(forNode!.edges[0].type!).toBe(GraphEdgeType.Default); + expect(forNode!.edges[1].type!).toBe(GraphEdgeType.Error); + expect(forNode!.edges[2].type!).toBe(GraphEdgeType.Default); + expect(forNode!.edges[3].type!).toBe(GraphEdgeType.Default); + }); +}); diff --git a/packages/serverless-workflow-diagram-editor/tests/core/workflowSdk.integration.test.ts b/packages/serverless-workflow-diagram-editor/tests/core/workflowSdk.integration.test.ts index 24fe2ad..5035809 100644 --- a/packages/serverless-workflow-diagram-editor/tests/core/workflowSdk.integration.test.ts +++ b/packages/serverless-workflow-diagram-editor/tests/core/workflowSdk.integration.test.ts @@ -14,13 +14,22 @@ * limitations under the License. */ -import { describe, it, expect } from "vitest"; -import { parseWorkflow, validateWorkflow } from "../../src/core"; +import { describe, it, expect, expectTypeOf } from "vitest"; +import { + parseWorkflow, + validateWorkflow, + buildGraph, + ExtendedGraphNode, + ExtendedGraph, + ExtendedGraphEdge, +} from "../../src/core"; import { BASIC_VALID_WORKFLOW_YAML, BASIC_VALID_WORKFLOW_JSON, BASIC_INVALID_WORKFLOW_YAML, BASIC_INVALID_WORKFLOW_JSON, + BASIC_VALID_WORKFLOW_JSON_TASKS, + EMPTY_WORKFLOW_JSON, } from "../fixtures/workflows"; import { Classes, Specification } from "@serverlessworkflow/sdk"; @@ -81,3 +90,25 @@ describe("validateWorkflow", () => { expect(errors).toMatchSnapshot(); }); }); + +describe("buildGraph", () => { + it("returns a loaded extended graph object from model", () => { + const { model } = parseWorkflow(BASIC_VALID_WORKFLOW_JSON_TASKS); + expect(model).not.toBeNull(); + + const graph = buildGraph(model!); + + expectTypeOf(graph).toEqualTypeOf(); + expectTypeOf(graph!.nodes).toEqualTypeOf(); + expectTypeOf(graph!.edges).toEqualTypeOf(); + expect(graph).toMatchSnapshot(); + }); + + it("buildGraph exception", () => { + const { model } = parseWorkflow(EMPTY_WORKFLOW_JSON); + expect(model).not.toBeNull(); + + // A model without tasks is invalid however it produces a viable model instance + expect(() => buildGraph(model!)).toThrow("Cannot read properties of undefined (reading '0')"); + }); +}); diff --git a/packages/serverless-workflow-diagram-editor/tests/fixtures/workflows.ts b/packages/serverless-workflow-diagram-editor/tests/fixtures/workflows.ts index c478625..6c4482f 100644 --- a/packages/serverless-workflow-diagram-editor/tests/fixtures/workflows.ts +++ b/packages/serverless-workflow-diagram-editor/tests/fixtures/workflows.ts @@ -69,3 +69,59 @@ export const BASIC_INVALID_WORKFLOW_JSON = JSON.stringify({ }, ], }); + +export const BASIC_VALID_WORKFLOW_JSON_TASKS = JSON.stringify({ + document: { + dsl: "1.0.0", + name: "valid-workflow-json", + version: "1.0.0", + namespace: "default", + }, + do: [ + { + step1: { + set: { + variable: "first task", + }, + }, + }, + { + step2: { + set: { + variable: "second task", + }, + }, + }, + { + step3: { + set: { + variable: "third task", + }, + }, + }, + { + step4: { + set: { + variable: "fourth task", + }, + }, + }, + { + step5: { + set: { + variable: "fifth task", + }, + }, + }, + ], +}); + +export const EMPTY_WORKFLOW_JSON = JSON.stringify({ + document: { + dsl: "1.0.0", + name: "valid-workflow-json", + version: "1.0.0", + namespace: "default", + }, + do: [], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9f2e56..df9e1e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,10 +92,10 @@ catalogs: version: 14.3.0 typescript: specifier: ^6.0.2 - version: 6.0.2 + version: 6.0.3 vite: specifier: ^8.0.8 - version: 8.0.8 + version: 8.0.9 vitest: specifier: ^4.1.4 version: 4.1.4 @@ -118,7 +118,7 @@ importers: version: 14.3.0 typescript: specifier: 'catalog:' - version: 6.0.2 + version: 6.0.3 packages/i18n: dependencies: @@ -149,13 +149,13 @@ importers: version: 6.1.3 typescript: specifier: 'catalog:' - version: 6.0.2 + version: 6.0.3 vite: specifier: 'catalog:' - version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + version: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) packages/serverless-workflow-diagram-editor: dependencies: @@ -180,13 +180,13 @@ importers: version: 10.3.5(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) '@storybook/addon-docs': specifier: 'catalog:' - version: 10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + version: 10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) '@storybook/addon-vitest': specifier: 'catalog:' version: 10.3.5(@vitest/runner@4.1.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vitest@4.1.4) '@storybook/react-vite': specifier: 'catalog:' - version: 10.3.5(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + version: 10.3.5(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.3)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) '@testing-library/dom': specifier: 'catalog:' version: 10.4.1 @@ -240,22 +240,26 @@ importers: version: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + version: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) vitest: specifier: 'catalog:' - version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@asamuzakjp/css-color@5.1.10': - resolution: {integrity: sha512-02OhhkKtgNRuicQ/nF3TRnGsxL9wp0r3Y7VlKWyOHHGmGyvXv03y+PnymU8FKFJMTjIr1Bk8U2g1HWSLrpAHww==} + '@asamuzakjp/css-color@5.1.11': + resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@7.0.9': - resolution: {integrity: sha512-r3ElRr7y8ucyN2KdICwGsmj19RoN13CLCa/pvGydghWK6ZzeKQ+TcDjVdtEZz2ElpndM5jXw//B9CEee0mWnVg==} + '@asamuzakjp/dom-selector@7.1.1': + resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/generational-cache@1.0.1': + resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': @@ -587,8 +591,8 @@ packages: '@types/react': '>=16' react: '>=16' - '@napi-rs/wasm-runtime@1.1.3': - resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -596,8 +600,8 @@ packages: '@neoconfetti/react@1.0.0': resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} - '@oxc-project/types@0.124.0': - resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} + '@oxc-project/types@0.126.0': + resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==} '@oxfmt/binding-android-arm-eabi@0.45.0': resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==} @@ -846,103 +850,103 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@rolldown/binding-android-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} + '@rolldown/binding-android-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.15': - resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} + '@rolldown/binding-darwin-x64@1.0.0-rc.16': + resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': - resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.16': + resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': - resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': + resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': + resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': + resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': + resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': - resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': + resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': + resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.15': - resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} + '@rolldown/pluginutils@1.0.0-rc.16': + resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -953,144 +957,6 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.60.1': - resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.60.1': - resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.60.1': - resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.60.1': - resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.60.1': - resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.60.1': - resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': - resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.60.1': - resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.60.1': - resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.60.1': - resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.60.1': - resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.60.1': - resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.60.1': - resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.60.1': - resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.60.1': - resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.60.1': - resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.60.1': - resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.60.1': - resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.60.1': - resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.60.1': - resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.60.1': - resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.60.1': - resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.60.1': - resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.60.1': - resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.60.1': - resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} - cpu: [x64] - os: [win32] - '@serverlessworkflow/sdk@1.0.1': resolution: {integrity: sha512-ds/FsRbFI/l1W89wWOZxzuiIAeuZLm3U5wtrDrpMrfHJBFex8hiYDDg0Db03V+CGEQZR6eki1KdnmvSX9JeBRg==} engines: {node: '>=20.0', npm: '>=10.0.0'} @@ -1414,8 +1280,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.10.19: - resolution: {integrity: sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==} + baseline-browser-mapping@2.10.20: + resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -1581,8 +1447,8 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - electron-to-chromium@1.5.336: - resolution: {integrity: sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==} + electron-to-chromium@1.5.340: + resolution: {integrity: sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1591,9 +1457,9 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} @@ -1689,8 +1555,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} html-encoding-sniffer@6.0.0: @@ -1958,8 +1824,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -1982,8 +1848,8 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - postcss@8.5.9: - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} pretty-format@27.5.1: @@ -2044,16 +1910,11 @@ packages: engines: {node: 20 || >=22} hasBin: true - rolldown@1.0.0-rc.15: - resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + rolldown@1.0.0-rc.16: + resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.60.1: - resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -2104,8 +1965,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} storybook@10.3.5: resolution: {integrity: sha512-uBSZu/GZa9aEIW3QMGvdQPMZWhGxSe4dyRWU8B3/Vd47Gy/XLC7tsBxRr13txmmPOEDHZR94uLuq0H50fvuqBw==} @@ -2260,8 +2121,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typescript@6.0.2: - resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true @@ -2291,8 +2152,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - vite@8.0.8: - resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} + vite@8.0.9: + resolution: {integrity: sha512-t7g7GVRpMXjNpa67HaVWI/8BWtdVIQPCL2WoozXXA7LBGEFK4AkkKkHx2hAQf5x1GZSlcmEDPkVLSGahxnEEZw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2453,20 +2314,24 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@asamuzakjp/css-color@5.1.10': + '@asamuzakjp/css-color@5.1.11': dependencies: + '@asamuzakjp/generational-cache': 1.0.1 '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@asamuzakjp/dom-selector@7.0.9': + '@asamuzakjp/dom-selector@7.1.1': dependencies: + '@asamuzakjp/generational-cache': 1.0.1 '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 + '@asamuzakjp/generational-cache@1.0.1': {} + '@asamuzakjp/nwsapi@2.3.9': {} '@babel/code-frame@7.29.0': @@ -2709,13 +2574,13 @@ snapshots: '@exodus/bytes@1.15.0': {} - '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': dependencies: glob: 13.0.6 - react-docgen-typescript: 2.4.0(typescript@6.0.2) - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + react-docgen-typescript: 2.4.0(typescript@6.0.3) + vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) optionalDependencies: - typescript: 6.0.2 + typescript: 6.0.3 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -2742,7 +2607,7 @@ snapshots: '@types/react': 19.2.14 react: 19.2.5 - '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 @@ -2751,7 +2616,7 @@ snapshots: '@neoconfetti/react@1.0.0': {} - '@oxc-project/types@0.124.0': {} + '@oxc-project/types@0.126.0': {} '@oxfmt/binding-android-arm-eabi@0.45.0': optional: true @@ -2869,139 +2734,62 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@rolldown/binding-android-arm64@1.0.0-rc.15': + '@rolldown/binding-android-arm64@1.0.0-rc.16': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + '@rolldown/binding-darwin-arm64@1.0.0-rc.16': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.15': + '@rolldown/binding-darwin-x64@1.0.0-rc.16': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + '@rolldown/binding-freebsd-x64@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': optional: true - '@rolldown/pluginutils@1.0.0-rc.15': {} + '@rolldown/pluginutils@1.0.0-rc.16': {} - '@rollup/pluginutils@5.3.0(rollup@4.60.1)': + '@rollup/pluginutils@5.3.0': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.4 - optionalDependencies: - rollup: 4.60.1 - - '@rollup/rollup-android-arm-eabi@4.60.1': - optional: true - - '@rollup/rollup-android-arm64@4.60.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.60.1': - optional: true - - '@rollup/rollup-darwin-x64@4.60.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.60.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.60.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.60.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.60.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.60.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.60.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.60.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.60.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.60.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.60.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.60.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.60.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.60.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.60.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.60.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.60.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.60.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.60.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.60.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.60.1': - optional: true '@serverlessworkflow/sdk@1.0.1': dependencies: @@ -3017,10 +2805,10 @@ snapshots: axe-core: 4.11.3 storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@storybook/addon-docs@10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': + '@storybook/addon-docs@10.3.5(@types/react@19.2.14)(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.5) - '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) '@storybook/icons': 2.0.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) react: 19.2.5 @@ -3041,30 +2829,29 @@ snapshots: storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) optionalDependencies: '@vitest/runner': 4.1.4 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) transitivePeerDependencies: - react - react-dom - '@storybook/builder-vite@10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': + '@storybook/builder-vite@10.3.5(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': dependencies: - '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + '@storybook/csf-plugin': 10.3.5(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) ts-dedent: 2.2.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': + '@storybook/csf-plugin@10.3.5(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': dependencies: storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.7 - rollup: 4.60.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) '@storybook/global@5.0.0': {} @@ -3079,12 +2866,12 @@ snapshots: react-dom: 19.2.5(react@19.2.5) storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@storybook/react-vite@10.3.5(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': + '@storybook/react-vite@10.3.5(esbuild@0.27.7)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.3)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - '@storybook/builder-vite': 10.3.5(esbuild@0.27.7)(rollup@4.60.1)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) - '@storybook/react': 10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + '@rollup/pluginutils': 5.3.0 + '@storybook/builder-vite': 10.3.5(esbuild@0.27.7)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + '@storybook/react': 10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.3) empathic: 2.0.0 magic-string: 0.30.21 react: 19.2.5 @@ -3093,7 +2880,7 @@ snapshots: resolve: 1.22.12 storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tsconfig-paths: 4.2.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) transitivePeerDependencies: - esbuild - rollup @@ -3101,17 +2888,17 @@ snapshots: - typescript - webpack - '@storybook/react@10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.2)': + '@storybook/react@10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 '@storybook/react-dom-shim': 10.3.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) react: 19.2.5 react-docgen: 8.0.3 - react-docgen-typescript: 2.4.0(typescript@6.0.2) + react-docgen-typescript: 2.4.0(typescript@6.0.3) react-dom: 19.2.5(react@19.2.5) storybook: 10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) optionalDependencies: - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -3237,9 +3024,9 @@ snapshots: istanbul-reports: 3.2.0 magicast: 0.5.2 obug: 2.1.1 - std-env: 4.0.0 + std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -3258,13 +3045,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': + '@vitest/mocker@4.1.4(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -3301,7 +3088,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) '@vitest/utils@3.2.4': dependencies: @@ -3389,7 +3176,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.10.19: {} + baseline-browser-mapping@2.10.20: {} bidi-js@1.0.3: dependencies: @@ -3401,9 +3188,9 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.19 + baseline-browser-mapping: 2.10.20 caniuse-lite: 1.0.30001788 - electron-to-chromium: 1.5.336 + electron-to-chromium: 1.5.340 node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -3525,13 +3312,13 @@ snapshots: dom-accessibility-api@0.6.3: {} - electron-to-chromium@1.5.336: {} + electron-to-chromium@1.5.340: {} emoji-regex@10.6.0: {} empathic@2.0.0: {} - entities@6.0.1: {} + entities@8.0.0: {} environment@1.1.0: {} @@ -3618,7 +3405,7 @@ snapshots: has-flag@4.0.0: {} - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 @@ -3636,7 +3423,7 @@ snapshots: is-core-module@2.16.1: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 is-docker@3.0.0: {} @@ -3677,8 +3464,8 @@ snapshots: jsdom@29.0.2: dependencies: - '@asamuzakjp/css-color': 5.1.10 - '@asamuzakjp/dom-selector': 7.0.9 + '@asamuzakjp/css-color': 5.1.11 + '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) '@exodus/bytes': 1.15.0 @@ -3688,7 +3475,7 @@ snapshots: html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 lru-cache: 11.3.5 - parse5: 8.0.0 + parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 @@ -3895,9 +3682,9 @@ snapshots: package-json-from-dist@1.0.1: {} - parse5@8.0.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.0.0 path-parse@1.0.7: {} @@ -3914,7 +3701,7 @@ snapshots: picomatch@4.0.4: {} - postcss@8.5.9: + postcss@8.5.10: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -3928,9 +3715,9 @@ snapshots: punycode@2.3.1: {} - react-docgen-typescript@2.4.0(typescript@6.0.2): + react-docgen-typescript@2.4.0(typescript@6.0.3): dependencies: - typescript: 6.0.2 + typescript: 6.0.3 react-docgen@8.0.3: dependencies: @@ -3990,58 +3777,26 @@ snapshots: glob: 13.0.6 package-json-from-dist: 1.0.1 - rolldown@1.0.0-rc.15: + rolldown@1.0.0-rc.16: dependencies: - '@oxc-project/types': 0.124.0 - '@rolldown/pluginutils': 1.0.0-rc.15 + '@oxc-project/types': 0.126.0 + '@rolldown/pluginutils': 1.0.0-rc.16 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-x64': 1.0.0-rc.15 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 - - rollup@4.60.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.1 - '@rollup/rollup-android-arm64': 4.60.1 - '@rollup/rollup-darwin-arm64': 4.60.1 - '@rollup/rollup-darwin-x64': 4.60.1 - '@rollup/rollup-freebsd-arm64': 4.60.1 - '@rollup/rollup-freebsd-x64': 4.60.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 - '@rollup/rollup-linux-arm-musleabihf': 4.60.1 - '@rollup/rollup-linux-arm64-gnu': 4.60.1 - '@rollup/rollup-linux-arm64-musl': 4.60.1 - '@rollup/rollup-linux-loong64-gnu': 4.60.1 - '@rollup/rollup-linux-loong64-musl': 4.60.1 - '@rollup/rollup-linux-ppc64-gnu': 4.60.1 - '@rollup/rollup-linux-ppc64-musl': 4.60.1 - '@rollup/rollup-linux-riscv64-gnu': 4.60.1 - '@rollup/rollup-linux-riscv64-musl': 4.60.1 - '@rollup/rollup-linux-s390x-gnu': 4.60.1 - '@rollup/rollup-linux-x64-gnu': 4.60.1 - '@rollup/rollup-linux-x64-musl': 4.60.1 - '@rollup/rollup-openbsd-x64': 4.60.1 - '@rollup/rollup-openharmony-arm64': 4.60.1 - '@rollup/rollup-win32-arm64-msvc': 4.60.1 - '@rollup/rollup-win32-ia32-msvc': 4.60.1 - '@rollup/rollup-win32-x64-gnu': 4.60.1 - '@rollup/rollup-win32-x64-msvc': 4.60.1 - fsevents: 2.3.3 - optional: true + '@rolldown/binding-android-arm64': 1.0.0-rc.16 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.16 + '@rolldown/binding-darwin-x64': 1.0.0-rc.16 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16 run-applescript@7.1.0: {} @@ -4081,7 +3836,7 @@ snapshots: stackback@0.0.2: {} - std-env@4.0.0: {} + std-env@4.1.0: {} storybook@10.3.5(@testing-library/dom@10.4.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: @@ -4218,7 +3973,7 @@ snapshots: tslib@2.8.1: {} - typescript@6.0.2: {} + typescript@6.0.3: {} undici-types@7.19.2: {} @@ -4243,12 +3998,12 @@ snapshots: dependencies: react: 19.2.5 - vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3): + vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.9 - rolldown: 1.0.0-rc.15 + postcss: 8.5.10 + rolldown: 1.0.0-rc.16 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.6.0 @@ -4256,10 +4011,10 @@ snapshots: fsevents: 2.3.3 yaml: 2.8.3 - vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)): + vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) + '@vitest/mocker': 4.1.4(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.4 '@vitest/runner': 4.1.4 '@vitest/snapshot': 4.1.4 @@ -4271,12 +4026,12 @@ snapshots: obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 4.0.0 + std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) + vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.0