diff --git a/packages/scesim-editor/.babelrc.json b/packages/scesim-editor/.babelrc.json
new file mode 100644
index 00000000000..9164ce7ce48
--- /dev/null
+++ b/packages/scesim-editor/.babelrc.json
@@ -0,0 +1,18 @@
+{
+ "sourceType": "unambiguous",
+ "presets": [
+ [
+ "@babel/preset-env",
+ {
+ "targets": {
+ "chrome": 100,
+ "safari": 15,
+ "firefox": 91
+ }
+ }
+ ],
+ "@babel/preset-typescript",
+ "@babel/preset-react"
+ ],
+ "plugins": []
+}
diff --git a/packages/scesim-editor/.storybook/main.ts b/packages/scesim-editor/.storybook/main.ts
new file mode 100644
index 00000000000..b8169c7262a
--- /dev/null
+++ b/packages/scesim-editor/.storybook/main.ts
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { baseConfig } from "@kie-tools/storybook-base/dist/config/baseConfig";
+
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-ignore
+import { env } from "../env";
+const buildEnv: any = env; // build-env is not typed
+
+const config = {
+ ...baseConfig(buildEnv.webpack.dev),
+};
+
+export default config;
diff --git a/packages/scesim-editor/dev-webapp/src/index.tsx b/packages/scesim-editor/.storybook/manager.ts
similarity index 79%
rename from packages/scesim-editor/dev-webapp/src/index.tsx
rename to packages/scesim-editor/.storybook/manager.ts
index 83646ad2986..8c06121c273 100644
--- a/packages/scesim-editor/dev-webapp/src/index.tsx
+++ b/packages/scesim-editor/.storybook/manager.ts
@@ -17,11 +17,9 @@
* under the License.
*/
-import * as React from "react";
-import * as ReactDOM from "react-dom";
+import { addons } from "@storybook/manager-api";
+import { KieToolsTheme } from "@kie-tools/storybook-base/dist/config/theme";
-import { DevWebApp } from "./DevWebApp";
-
-import "./index.css";
-
-ReactDOM.render(, document.getElementById("dev-webapp"));
+addons.setConfig({
+ theme: KieToolsTheme,
+});
diff --git a/packages/scesim-editor/.storybook/preview.tsx b/packages/scesim-editor/.storybook/preview.tsx
new file mode 100644
index 00000000000..4e7e10ae856
--- /dev/null
+++ b/packages/scesim-editor/.storybook/preview.tsx
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 * as React from "react";
+import type { Preview } from "@storybook/react";
+
+const preview: Preview = {
+ parameters: {
+ actions: { argTypesRegex: "^on[A-Z].*" },
+ options: {
+ storySort: {
+ order: [
+ "Dev",
+ "SceSim Editor",
+ ["Overview", "*", ["Overview", "*", ["Overview", "*"]]],
+ "Features",
+ ["Overview", "*", ["Overview", "*", ["Overview", "*"]]],
+ "Use Cases",
+ ["Overview", "*", ["Overview", "*", ["Overview", "*"]]],
+ ],
+ },
+ },
+ docs: {
+ toc: {
+ headingSelector: "h2, h3",
+ },
+ },
+ },
+
+ // It should be Story() to be possible to use "preview-api" inside stories; (https://github.com/storybookjs/storybook/issues/22132)
+ decorators: [
+ (Story) => (
+
+ {Story()}
+
+ ),
+ ],
+};
+
+export default preview;
diff --git a/packages/scesim-editor/dev-webapp/src/DevWebApp.tsx b/packages/scesim-editor/dev-webapp/src/DevWebApp.tsx
deleted file mode 100644
index b4708c9e8d4..00000000000
--- a/packages/scesim-editor/dev-webapp/src/DevWebApp.tsx
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 * as React from "react";
-import { useCallback, useEffect, useRef, useState } from "react";
-
-import { TestScenarioEditor, TestScenarioEditorRef } from "../../src/TestScenarioEditor";
-
-import { Button } from "@patternfly/react-core/dist/js/components/Button";
-import { Dropdown, DropdownToggle, DropdownItem } from "@patternfly/react-core/dist/js/components/Dropdown";
-import { Flex, FlexItem } from "@patternfly/react-core/dist/js/layouts/Flex";
-import { Page, PageSection } from "@patternfly/react-core/dist/js/components/Page";
-
-import { LOAN_PRE_QUALIFICATION, TRAFFIC_VIOLATION } from "./ExternalDmnModels";
-import { IS_OLD_ENOUGH_RULE, TRAFFIC_VIOLATION_DMN } from "./ExternalScesimModels";
-
-import "./DevWebApp.css";
-
-export function DevWebApp() {
- const ref = useRef(null);
- const [isExampleDropdownOpen, setExampleDropdownIsOpen] = useState(false);
-
- useEffect(() => {
- /* Simulating a call from "Foundation" code */
- setTimeout(() => {
- ref.current?.setContent("Untitled.scesim", "");
- }, 1000);
- }, [ref]);
-
- const onDrop = useCallback((e: React.DragEvent) => {
- e.preventDefault(); // Necessary to disable the browser's default 'onDrop' handling.
-
- if (e.dataTransfer.items) {
- // Use DataTransferItemList interface to access the file(s)
- [...e.dataTransfer.items].forEach((item, i) => {
- if (item.kind === "file") {
- const fileName = item.getAsFile()?.name;
- const reader = new FileReader();
- reader.addEventListener("load", ({ target }) =>
- ref.current?.setContent(fileName ?? "", target?.result as string)
- );
- reader.readAsText(item.getAsFile() as any);
- }
- });
- }
- }, []);
-
- const onDragOver = useCallback((e: React.DragEvent) => {
- e.preventDefault(); // Necessary to disable the browser's default 'onDrop' handling.
- }, []);
-
- const reset = useCallback(() => {
- ref.current?.setContent("Untitled.scesim", "");
- }, []);
-
- const copyAsXml = useCallback(() => {
- navigator.clipboard.writeText(ref.current?.getContent() || "");
- }, []);
-
- const downloadRef = useRef(null);
- const downloadAsXml = useCallback(() => {
- if (downloadRef.current) {
- const fileBlob = new Blob([ref.current?.getContent() || ""], { type: "text/xml" });
- downloadRef.current.download = `scesim-${makeid(10)}.scesim`;
- downloadRef.current.href = URL.createObjectURL(fileBlob);
- downloadRef.current.click();
- }
- }, []);
-
- const onOpenStaticScesimExample = useCallback((fileName: string, content: string) => {
- ref.current?.setContent(fileName, content);
- }, []);
-
- const dropdownExamplesItems = [
- onOpenStaticScesimExample("TrafficViolationTest.scesim", TRAFFIC_VIOLATION_DMN)}
- >
- DMN-Based: TrafficViolationTest
- ,
- onOpenStaticScesimExample("AreTheyOldEnoughTest.scesim", IS_OLD_ENOUGH_RULE)}
- >
- Rule-Based: AreTheyOldEnoughTest
- ,
- ];
-
- const onExampleDropdownToggle = useCallback((isOpen: boolean) => {
- setExampleDropdownIsOpen(isOpen);
- }, []);
-
- const onExampleDropdownSelect = useCallback(() => {
- setExampleDropdownIsOpen(false);
- const element = document.getElementById("toggle-basic");
- element?.focus();
- }, []);
-
- // const onRequestExternalModelByPath = useCallback>(async (path) => {
- // return availableModelsByPath[path] ?? null;
- // }, []);
-
- // const onRequestExternalModelsAvailableToInclude =
- // useCallback(async () => {
- // return Object.keys(availableModelsByPath);
- // }, []);
-
- return (
- <>
-
-
-
-
-
Test Scenario Editor :: Dev WebApp
-
-
-
(Drag & drop a file anywhere to open it)
-
-
-
-
- Examples
-
- }
- isOpen={isExampleDropdownOpen}
- dropdownItems={dropdownExamplesItems}
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
-
-function makeid(length: number) {
- let result = "";
- const characters = "abcdefghijklmnopqrstuvwxyz0123456789";
- const charactersLength = characters.length;
- let counter = 0;
- while (counter < length) {
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
- counter += 1;
- }
- return result;
-}
diff --git a/packages/scesim-editor/dev-webapp/static/favicon.ico b/packages/scesim-editor/dev-webapp/static/favicon.ico
deleted file mode 100644
index 39237098444..00000000000
Binary files a/packages/scesim-editor/dev-webapp/static/favicon.ico and /dev/null differ
diff --git a/packages/scesim-editor/dev-webapp/static/index.html b/packages/scesim-editor/dev-webapp/static/index.html
deleted file mode 100644
index f0fe70c26ed..00000000000
--- a/packages/scesim-editor/dev-webapp/static/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- Test Scenario Editor - Dev WebApp
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/scesim-editor/dev-webapp/tsconfig.json b/packages/scesim-editor/dev-webapp/tsconfig.json
deleted file mode 100644
index bcebbbcef62..00000000000
--- a/packages/scesim-editor/dev-webapp/tsconfig.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "compilerOptions": {
- "lib": ["DOM.Iterable", "es6", "dom", "es2018.promise", "es2019", "esnext"]
- }
-}
diff --git a/packages/scesim-editor/dev-webapp/webpack.config.js b/packages/scesim-editor/dev-webapp/webpack.config.js
deleted file mode 100644
index 619256f5817..00000000000
--- a/packages/scesim-editor/dev-webapp/webpack.config.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-const path = require("path");
-const CopyPlugin = require("copy-webpack-plugin");
-const { merge } = require("webpack-merge");
-const common = require("@kie-tools-core/webpack-base/webpack.common.config");
-const patternflyBase = require("@kie-tools-core/patternfly-base");
-const { env } = require("../env");
-const buildEnv = env;
-
-module.exports = (env) =>
- merge(common(env), {
- mode: "development",
- entry: {
- index: path.resolve(__dirname, "./src/index.tsx"),
- },
- output: {
- path: path.resolve(__dirname, "../dist-dev-webapp"),
- },
- plugins: [
- new CopyPlugin({
- patterns: [{ from: path.resolve(__dirname, "./static"), to: "./" }],
- }),
- ],
- module: {
- rules: [
- {
- test: /\.ttf$/,
- use: ["file-loader"],
- },
- ...patternflyBase.webpackModuleRules,
- ],
- },
- devServer: {
- historyApiFallback: true,
- compress: true,
- port: buildEnv.scesimEditor.dev.port,
- open: false,
- hot: true,
- client: {
- overlay: true,
- },
- },
- });
diff --git a/packages/scesim-editor/env/index.js b/packages/scesim-editor/env/index.js
index aeb68d94f63..4c6cafcef0c 100644
--- a/packages/scesim-editor/env/index.js
+++ b/packages/scesim-editor/env/index.js
@@ -19,13 +19,13 @@
const { varsWithName, composeEnv } = require("@kie-tools-scripts/build-env");
-module.exports = composeEnv([require("@kie-tools/root-env/env")], {
+module.exports = composeEnv([require("@kie-tools/root-env/env"), require("@kie-tools-core/webpack-base/env")], {
vars: varsWithName({}),
get env() {
return {
scesimEditor: {
- dev: {
- port: 9004,
+ storybook: {
+ port: "9902",
},
},
};
diff --git a/packages/scesim-editor/package.json b/packages/scesim-editor/package.json
index 9a306a8388a..a23ac9a88d7 100644
--- a/packages/scesim-editor/package.json
+++ b/packages/scesim-editor/package.json
@@ -6,11 +6,16 @@
"keywords": [],
"scripts": {
"build:dev": "rimraf dist && tsc -p tsconfig.json",
- "build:prod": "rimraf dist && pnpm lint && tsc -p tsconfig.json && pnpm test && pnpm test:e2e",
+ "build:prod": "rimraf dist && pnpm lint && tsc -p tsconfig.json && pnpm test:e2e",
+ "build:storybook": "storybook build -o dist-storybook",
"lint": "run-script-if --bool \"$(build-env linters.run)\" --then \"kie-tools--eslint ./src\"",
- "start": "webpack serve -c ./dev-webapp/webpack.config.js --host 0.0.0.0 --env dev",
- "test": "echo 'No Tests to run at this moment.'",
- "test:e2e": "echo 'No IT Tests to run at this moment.'"
+ "powershell": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command",
+ "start": "run-script-os",
+ "start:linux:darwin": "cross-env STORYBOOK_PORT=$(build-env scesimEditor.storybook.port) pnpm storybook-base --storybookArgs=\"dev --no-open\"",
+ "start:win32": "pnpm powershell \"cross-env STORYBOOK_PORT=$(build-env scesimEditor.storybook.port) pnpm storybook-base --storybookArgs='dev --no-open'",
+ "test:e2e": "run-script-if --ignore-errors \"$(build-env endToEndTests.ignoreFailures)\" --bool \"$(build-env endToEndTests.run)\" --then \"pnpm rimraf ./dist-e2e-tests\" \"pnpm test:e2e:run\"",
+ "test:e2e:open": "pnpm exec playwright show-report dist-e2e-tests/reports",
+ "test:e2e:run": "pnpm exec playwright test"
},
"dependencies": {
"@kie-tools-core/i18n": "workspace:*",
@@ -31,18 +36,32 @@
"@babel/core": "^7.16.0",
"@babel/preset-env": "^7.16.0",
"@babel/preset-react": "^7.16.0",
+ "@babel/preset-typescript": "^7.22.5",
"@kie-tools-core/webpack-base": "workspace:*",
"@kie-tools/eslint": "workspace:*",
+ "@kie-tools/playwright-base": "workspace:*",
"@kie-tools/root-env": "workspace:*",
+ "@kie-tools/storybook-base": "workspace:*",
"@kie-tools/tsconfig": "workspace:*",
+ "@playwright/test": "^1.38.1",
+ "@storybook/addon-links": "^7.3.2",
+ "@storybook/blocks": "^7.3.2",
+ "@storybook/preview-api": "^7.3.2",
+ "@storybook/react": "^7.3.2",
+ "@storybook/react-webpack5": "^7.3.2",
"@types/lodash": "^4.14.168",
+ "@types/node": "^18.13.0",
"@types/react": "^17.0.6",
"@types/react-dom": "^17.0.5",
"@types/react-table": "^7.0.25",
"@types/uuid": "^8.3.0",
"copy-webpack-plugin": "^11.0.0",
+ "cross-env": "^7.0.3",
"file-loader": "^6.2.0",
"rimraf": "^3.0.2",
+ "run-script-os": "^1.1.6",
+ "storybook": "^7.3.2",
+ "ts-jest": "^26.5.6",
"typescript": "^4.6.2",
"webpack": "^5.88.2",
"webpack-cli": "^4.10.0",
diff --git a/packages/scesim-editor/playwright.config.ts b/packages/scesim-editor/playwright.config.ts
new file mode 100644
index 00000000000..b837bceb451
--- /dev/null
+++ b/packages/scesim-editor/playwright.config.ts
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { defineConfig } from "@playwright/test";
+import playwrightBaseConfig from "@kie-tools/playwright-base/playwright.config";
+import merge from "lodash/merge";
+import { env } from "./env";
+
+const buildEnv: any = env;
+
+const customConfig = defineConfig({
+ use: {
+ baseURL: `http://localhost:${buildEnv.scesimEditor.storybook.port}`,
+ },
+
+ /* Run your local dev server before starting the tests */
+ webServer: {
+ command: "pnpm start",
+ url: `http://localhost:${buildEnv.scesimEditor.storybook.port}/iframe.html?args=&id=misc-empty--empty&viewMode=story`,
+ reuseExistingServer: !process.env.CI || true,
+ stdout: "pipe",
+ timeout: 180000,
+ },
+
+ expect: {
+ toHaveScreenshot: {
+ // An acceptable ratio of pixels that are different to the
+ // total amount of pixels, between 0 and 1.
+ maxDiffPixelRatio: 0.001,
+ },
+ },
+});
+
+export default defineConfig(merge(playwrightBaseConfig, customConfig));
diff --git a/packages/scesim-editor/dev-webapp/src/DevWebApp.css b/packages/scesim-editor/stories/dev/DevWebApp.css
similarity index 95%
rename from packages/scesim-editor/dev-webapp/src/DevWebApp.css
rename to packages/scesim-editor/stories/dev/DevWebApp.css
index 0488bb7cbfa..56cf69df0c8 100644
--- a/packages/scesim-editor/dev-webapp/src/DevWebApp.css
+++ b/packages/scesim-editor/stories/dev/DevWebApp.css
@@ -23,7 +23,3 @@
--pf-c-page__main-section--PaddingBottom: 0px;
--pf-c-page__main-section--PaddingLeft: 0px;
}
-
-.dev-webapp--example-dropdown {
- z-index: 99999;
-}
diff --git a/packages/scesim-editor/stories/dev/DevWebApp.stories.tsx b/packages/scesim-editor/stories/dev/DevWebApp.stories.tsx
new file mode 100644
index 00000000000..9d17767d2bf
--- /dev/null
+++ b/packages/scesim-editor/stories/dev/DevWebApp.stories.tsx
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 React, { useCallback, useRef, useState, useEffect } from "react";
+import type { Meta, StoryObj } from "@storybook/react";
+import { SceSimEditorWrapper, SceSimEditorWrapperProps } from "../scesimEditorStoriesWrapper";
+import { Button, Flex, FlexItem, Page, PageSection } from "@patternfly/react-core/dist/js";
+import { TestScenarioEditorRef } from "../../src/TestScenarioEditor";
+import { SceSimMarshaller } from "../../../scesim-marshaller/src/index";
+import { SceSimModel, getMarshaller } from "@kie-tools/scesim-marshaller";
+import { emptySceSim } from "../misc/empty/Empty.stories";
+import { isOldEnoughDrl } from "../useCases/IsOldEnoughRule.stories";
+import { trafficViolationDmn } from "../useCases/TrafficViolationDmn.stories";
+import { useArgs } from "@storybook/preview-api";
+
+import "./DevWebApp.css";
+
+type DevWebAppProps = SceSimEditorWrapperProps;
+
+function DevWebApp(props: DevWebAppProps) {
+ const ref = useRef(null);
+ const [args, updateArgs] = useArgs();
+
+ const [state, setState] = useState<{ marshaller: SceSimMarshaller; stack: SceSimModel[]; pointer: number }>(() => {
+ const emptySceSimMarshaller = getMarshaller(emptySceSim);
+ return {
+ marshaller: emptySceSimMarshaller,
+ stack: [emptySceSimMarshaller.parser.parse()],
+ pointer: 0,
+ };
+ });
+
+ const onSelectModel = useCallback((newModel) => {
+ const model = getMarshaller(newModel).parser.parse();
+ setState((prev) => {
+ const newStack = prev.stack.slice(0, prev.pointer + 1);
+ return {
+ ...prev,
+ stack: [...newStack, model],
+ pointer: newStack.length,
+ };
+ });
+ }, []);
+
+ const onDrop = useCallback((e: React.DragEvent) => {
+ e.preventDefault(); // Necessary to disable the browser's default 'onDrop' handling.
+
+ if (e.dataTransfer.items) {
+ // Use DataTransferItemList interface to access the file(s)
+ [...e.dataTransfer.items].forEach((item, i) => {
+ if (item.kind === "file") {
+ const fileName = item.getAsFile()?.name;
+ const reader = new FileReader();
+ reader.addEventListener("load", ({ target }) =>
+ ref.current?.setContent(fileName ?? "", target?.result as string)
+ );
+ reader.readAsText(item.getAsFile() as any);
+ }
+ });
+ }
+ }, []);
+
+ const onDragOver = useCallback((e: React.DragEvent) => {
+ e.preventDefault(); // Necessary to disable the browser's default 'onDrop' handling.
+ }, []);
+
+ const reset = useCallback(() => {
+ const marshaller = getMarshaller(emptySceSim);
+ setState({
+ marshaller,
+ stack: [marshaller.parser.parse()],
+ pointer: 0,
+ });
+ }, []);
+
+ const currentModel = state.stack[state.pointer];
+
+ const downloadRef = useRef(null);
+ const downloadAsXml = useCallback(() => {
+ if (downloadRef.current) {
+ const fileBlob = new Blob([state.marshaller.builder.build(currentModel)], { type: "text/xml" });
+ downloadRef.current.download = `scesim-${makeid(10)}.scesim`;
+ downloadRef.current.href = URL.createObjectURL(fileBlob);
+ downloadRef.current.click();
+ }
+ }, [currentModel, state.marshaller.builder]);
+
+ const copyAsXml = useCallback(() => {
+ navigator.clipboard.writeText(state.marshaller.builder.build(currentModel));
+ }, [currentModel, state.marshaller.builder]);
+
+ useEffect(() => {
+ updateArgs({ content: state.marshaller.builder.build(state.stack[state.stack.length - 1]) });
+ }, [state.marshaller.builder, state.stack, updateArgs]);
+
+ useEffect(() => {
+ onSelectModel(args.content);
+ }, [args.content, onSelectModel]);
+
+ return (
+ <>
+
+ >
+ );
+}
+
+function makeid(length: number) {
+ let result = "";
+ const characters = "abcdefghijklmnopqrstuvwxyz0123456789";
+ const charactersLength = characters.length;
+ let counter = 0;
+ while (counter < length) {
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
+ counter += 1;
+ }
+ return result;
+}
+
+const meta: Meta = {
+ title: "Dev/Web App",
+ component: DevWebApp,
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const WebApp: Story = {
+ render: (args) => DevWebApp(args),
+ args: {
+ pathRelativeToTheWorkspaceRoot: "dev.scesim",
+ content: emptySceSim,
+ },
+};
diff --git a/packages/scesim-editor/dev-webapp/src/AvailableDMNModels.ts b/packages/scesim-editor/stories/examples/AvailableDMNModels.ts
similarity index 100%
rename from packages/scesim-editor/dev-webapp/src/AvailableDMNModels.ts
rename to packages/scesim-editor/stories/examples/AvailableDMNModels.ts
diff --git a/packages/scesim-editor/dev-webapp/src/ExternalDmnModels.ts b/packages/scesim-editor/stories/examples/ExternalDmnModels.ts
similarity index 100%
rename from packages/scesim-editor/dev-webapp/src/ExternalDmnModels.ts
rename to packages/scesim-editor/stories/examples/ExternalDmnModels.ts
diff --git a/packages/scesim-editor/stories/features/Resizing/Resizing.mdx b/packages/scesim-editor/stories/features/Resizing/Resizing.mdx
new file mode 100644
index 00000000000..70eed4ee0e2
--- /dev/null
+++ b/packages/scesim-editor/stories/features/Resizing/Resizing.mdx
@@ -0,0 +1,37 @@
+{/* Licensed to the Apache Software Foundation (ASF) under one */}
+{/* or more contributor license agreements. See the NOTICE file */}
+{/* distributed with this work for additional information */}
+{/* regarding copyright ownership. The ASF licenses this file */}
+{/* to you 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 { Meta } from "@storybook/blocks";
+
+
+
+# Resizing
+
+The SceSim Editor gives the possibility to resize every cell in a column.
+The resize operation recursively affects all sub columns that are part of the same column
+keeping the resize operation consistent.
+
+To perform the resize operation hover the mouse on a cell of the desired column.
+A resize handle on the right side of the cell will appear. Left-clicking on it and dragging
+will resize the cell. The minimum depends on the expression or column. It does not have a maximum width.
+
+# Reset
+
+To reset the size of a column hover the mouse on a cell of the column.
+The resize handle on the right side of the cell will appear. Double left-clicking on it will
+reset the column size to the default value. It's important to notice that the default size
+can vary depending on sub columns.
diff --git a/packages/scesim-editor/stories/misc/empty/Empty.mdx b/packages/scesim-editor/stories/misc/empty/Empty.mdx
new file mode 100644
index 00000000000..39c4e063ddd
--- /dev/null
+++ b/packages/scesim-editor/stories/misc/empty/Empty.mdx
@@ -0,0 +1,46 @@
+{/* Licensed to the Apache Software Foundation (ASF) under one */}
+{/* or more contributor license agreements. See the NOTICE file */}
+{/* distributed with this work for additional information */}
+{/* regarding copyright ownership. The ASF licenses this file */}
+{/* to you 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 { Meta, Story } from "@storybook/blocks";
+import * as Empty from "./Empty.stories";
+
+
+
+# Empty
+
+To start off, use contextual menus in the table to insert or edit or delete new columns and rows.
+
+Before defining the individual test scenarios, verify the instance and field mappings for each column. If any changes are necessary, use the DMN Nodes selector to update the mapping.
+
+If the same GIVEN data is shared with the multiple test scenarios, you can use the Background tab to define them only once. The way to create a column in the Background tab is the same as of the Test Scenario tab.
+
+Now, define the test scenarios. Each cell of the table must contain a valid expression.
+
+Values in the GIVEN part of the table are evaluated as literal expressions, whereas values in the EXPECT section are evaluated as unary expressions. The correctness of these unary tests is verified using the results from a DMN evaluation.
+
+DMN-based scenarios use the FEEL expression language. Supported data types are:
+
+- numbers and strings (strings must be delimited by quotation marks), for example "John Doe" or ""
+- boolean values (true, false, and null)
+- dates and time, for example date("2019-05-13") or time("14:10:00+02:00")
+- Days and time duration, for example duration("P1DT23H12M30S")
+- Years and months duration, for example duration("P3Y5M")
+- functions
+- contexts, for example \{x : 5, even : false, type : "integer number"\}
+- ranges and lists, for example [1 .. 10] or [2, 3, 4, 5]
+- In EXPECT section the type could also just a boolean with the result of the assertion and you can use ? identifier to access value to check.
+- An empty cell is skipped from the evaluation.
diff --git a/packages/scesim-editor/stories/misc/empty/Empty.stories.tsx b/packages/scesim-editor/stories/misc/empty/Empty.stories.tsx
new file mode 100644
index 00000000000..af7a17fc235
--- /dev/null
+++ b/packages/scesim-editor/stories/misc/empty/Empty.stories.tsx
@@ -0,0 +1,191 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 type { Meta, StoryObj } from "@storybook/react";
+import { SceSimEditorWrapper, SceSimEditorWrapperProps } from "../../scesimEditorStoriesWrapper";
+import { TestScenarioEditor } from "../../../src/TestScenarioEditor";
+
+export const emptySceSim = `
+
+
+
+
+
+
+
+ Index
+ OTHER
+
+
+ #
+ java.lang.Integer
+
+ java.lang.Integer
+ #
+ 70
+ NOT_EXPRESSION
+
+
+
+
+ Description
+ OTHER
+
+
+ Scenario description
+ java.lang.String
+
+ java.lang.String
+ Scenario description
+ NOT_EXPRESSION
+ 300
+
+
+
+
+ 1|1
+ GIVEN
+
+
+ Empty
+ java.lang.Void
+
+ java.lang.Void
+ INSTANCE-1
+ PROPERTY
+ NOT_EXPRESSION
+ 150
+
+
+
+
+ 1|2
+ EXPECT
+
+
+ Empty
+ java.lang.Void
+
+ java.lang.Void
+ INSTANCE-2
+ PROPERTY
+ NOT_EXPRESSION
+ 150
+
+
+
+
+
+
+
+
+ Scenario description
+ java.lang.String
+
+
+ Description
+ OTHER
+
+
+
+
+ Empty
+ java.lang.Void
+
+
+ 1|1
+ GIVEN
+
+
+
+
+ Empty
+ java.lang.Void
+
+
+ 1|2
+ EXPECT
+
+
+
+
+
+
+
+
+
+
+
+
+ 1|1
+ GIVEN
+
+
+ Empty
+ java.lang.Void
+
+ java.lang.Void
+ INSTANCE-1
+ PROPERTY
+ 150
+ NOT_EXPRESSION
+
+
+
+
+
+
+
+
+ Empty
+ java.lang.Void
+
+
+ 1|1
+ GIVEN
+
+
+
+
+
+
+
+ false
+
+
+
+
+`;
+
+const meta: Meta<{}> = {
+ title: "Misc/Empty",
+ component: TestScenarioEditor,
+ includeStories: /^[A-Z]/,
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const Empty: Story = {
+ render: (args) => SceSimEditorWrapper(args),
+ args: {
+ pathRelativeToTheWorkspaceRoot: "empty.scesim",
+ content: emptySceSim,
+ },
+};
diff --git a/packages/scesim-editor/stories/scesimEditor/SceSimEditor.mdx b/packages/scesim-editor/stories/scesimEditor/SceSimEditor.mdx
new file mode 100644
index 00000000000..33f1a2e32a8
--- /dev/null
+++ b/packages/scesim-editor/stories/scesimEditor/SceSimEditor.mdx
@@ -0,0 +1,30 @@
+{/* Licensed to the Apache Software Foundation (ASF) under one */}
+{/* or more contributor license agreements. See the NOTICE file */}
+{/* distributed with this work for additional information */}
+{/* regarding copyright ownership. The ASF licenses this file */}
+{/* to you 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 { Meta } from "@storybook/blocks";
+
+
+
+# SceSim Editor
+
+ Before deploying them into a production environment, test scenarios enable you to validate the functionality of
+ - Business rules and business rule data (for rules-based test scenarios)
+ - DMN models (for DMN-based test scenarios)
+
+ With a test scenario, you use data from your project to set given conditions and expected results based on one or more defined business rules. When you run the scenario, the expected results and actual results of the rule instance are compared.
+
+ If the expected results match the actual results, the test is successful. If the expected results do not match the actual results, then the test fails.
diff --git a/packages/scesim-editor/stories/scesimEditorStoriesWrapper.tsx b/packages/scesim-editor/stories/scesimEditorStoriesWrapper.tsx
new file mode 100644
index 00000000000..656adba6208
--- /dev/null
+++ b/packages/scesim-editor/stories/scesimEditorStoriesWrapper.tsx
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 * as React from "react";
+import { useEffect, useRef } from "react";
+import { TestScenarioEditor, TestScenarioEditorRef } from "../src/TestScenarioEditor";
+
+export interface SceSimEditorWrapperProps {
+ pathRelativeToTheWorkspaceRoot: string;
+ content: string;
+}
+
+export function SceSimEditorWrapper(props: SceSimEditorWrapperProps) {
+ const ref = useRef(null);
+
+ useEffect(() => {
+ /* Simulating a call from "Foundation" code */
+ ref.current?.setContent(props.pathRelativeToTheWorkspaceRoot, props.content);
+ }, [ref, props.content, props.pathRelativeToTheWorkspaceRoot]);
+
+ return (
+
+
+
+ );
+}
diff --git a/packages/scesim-editor/stories/useCases/IsOldEnoughRule.stories.tsx b/packages/scesim-editor/stories/useCases/IsOldEnoughRule.stories.tsx
new file mode 100644
index 00000000000..86592e1a75d
--- /dev/null
+++ b/packages/scesim-editor/stories/useCases/IsOldEnoughRule.stories.tsx
@@ -0,0 +1,405 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 React from "react";
+import type { Meta, StoryObj } from "@storybook/react";
+import { TestScenarioEditor } from "../../src/TestScenarioEditor";
+import { SceSimEditorWrapper, SceSimEditorWrapperProps } from "../scesimEditorStoriesWrapper";
+
+export const isOldEnoughDrl = `
+
+
+
+
+
+
+ Index
+ OTHER
+
+
+ #
+ java.lang.Integer
+
+ java.lang.Integer
+ #
+ NOT_EXPRESSION
+ 70.0
+
+
+
+
+ Description
+ OTHER
+
+
+ Scenario description
+ java.lang.String
+
+ java.lang.String
+ Scenario description
+ NOT_EXPRESSION
+ 300.0
+
+
+
+
+ Applicant
+
+
+ age
+
+
+
+ 1|1
+ GIVEN
+
+
+ 1|1
+ mortgages.mortgages.Applicant
+
+ java.lang.Integer
+ Applicant
+ age
+ NOT_EXPRESSION
+ 212.60000000000002
+
+
+
+
+ LoanApplication
+
+
+ approved
+
+
+
+ 1591876615315
+ GIVEN
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+ java.lang.Boolean
+ LoanApplication
+ approved
+ NOT_EXPRESSION
+ 212.60000000000002
+
+
+
+
+ IncomeSource
+
+
+ amount
+
+
+
+ 1591622221147
+ GIVEN
+
+
+ 1591622221147
+ mortgages.mortgages.IncomeSource
+
+ java.lang.Integer
+ IncomeSource
+ amount
+ NOT_EXPRESSION
+ 212.60000000000002
+
+
+
+
+ LoanApplication
+
+
+ approved
+
+
+
+ 1|2
+ EXPECT
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+ java.lang.Boolean
+ LoanApplication
+ approved
+ NOT_EXPRESSION
+ 212.60000000000002
+
+
+
+
+ LoanApplication
+
+
+ explanation
+
+
+
+ 1591874776961
+ EXPECT
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+ java.lang.String
+ LoanApplication
+ explanation
+ NOT_EXPRESSION
+ 212.60000000000002
+
+
+
+
+
+
+
+
+ Scenario description
+ java.lang.String
+
+
+ Description
+ OTHER
+
+ Young Bob want a loan
+
+
+
+ #
+ java.lang.Integer
+
+
+ Index
+ OTHER
+
+ 1
+
+
+
+ 1|1
+ mortgages.mortgages.Applicant
+
+
+ 1|1
+ GIVEN
+
+ 17
+
+
+
+ 1591622221147
+ mortgages.mortgages.IncomeSource
+
+
+ 1591622221147
+ GIVEN
+
+ 0
+
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+
+ 1|2
+ EXPECT
+
+ false
+
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+
+ 1591874776961
+ EXPECT
+
+ Underage
+
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+
+ 1591876615315
+ GIVEN
+
+ true
+
+
+
+
+
+
+
+ Scenario description
+ java.lang.String
+
+
+ Description
+ OTHER
+
+ Adult Anna want a loan
+
+
+
+ #
+ java.lang.Integer
+
+
+ Index
+ OTHER
+
+ 2
+
+
+
+ 1|1
+ mortgages.mortgages.Applicant
+
+
+ 1|1
+ GIVEN
+
+ 27
+
+
+
+ 1591622221147
+ mortgages.mortgages.IncomeSource
+
+
+ 1591622221147
+ GIVEN
+
+ 0
+
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+
+ 1|2
+ EXPECT
+
+ true
+
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+
+ 1591874776961
+ EXPECT
+
+ null
+
+
+
+ 1591622209590
+ mortgages.mortgages.LoanApplication
+
+
+ 1591876615315
+ GIVEN
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+ 1|1
+ GIVEN
+
+
+ Empty
+ java.lang.Void
+
+ java.lang.Void
+ INSTANCE 1
+ PROPERTY 1
+ NOT_EXPRESSION
+ 114.0
+
+
+
+
+
+
+
+
+ Empty
+ java.lang.Void
+
+
+ 1|1
+ GIVEN
+
+
+
+
+
+
+
+ RULE
+ false
+ false
+
+
+
+
+
+`;
+
+const meta: Meta<{}> = {
+ title: "Use Cases/Is Old Enough",
+ component: TestScenarioEditor,
+ includeStories: /^[A-Z]/,
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const IsOldEnough: Story = {
+ render: (args) => SceSimEditorWrapper(args),
+ args: {
+ pathRelativeToTheWorkspaceRoot: "isOldEnough.scesim",
+ content: isOldEnoughDrl,
+ },
+};
diff --git a/packages/scesim-editor/dev-webapp/src/ExternalScesimModels.ts b/packages/scesim-editor/stories/useCases/TrafficViolationDmn.stories.tsx
similarity index 68%
rename from packages/scesim-editor/dev-webapp/src/ExternalScesimModels.ts
rename to packages/scesim-editor/stories/useCases/TrafficViolationDmn.stories.tsx
index 97e76557085..031704f4650 100644
--- a/packages/scesim-editor/dev-webapp/src/ExternalScesimModels.ts
+++ b/packages/scesim-editor/stories/useCases/TrafficViolationDmn.stories.tsx
@@ -17,372 +17,12 @@
* under the License.
*/
-export const IS_OLD_ENOUGH_RULE = `
-
-
-
-
-
-
- Index
- OTHER
-
-
- #
- java.lang.Integer
-
- java.lang.Integer
- #
- NOT_EXPRESSION
- 70.0
-
-
-
-
- Description
- OTHER
-
-
- Scenario description
- java.lang.String
-
- java.lang.String
- Scenario description
- NOT_EXPRESSION
- 300.0
-
-
-
-
- Applicant
-
-
- age
-
-
-
- 1|1
- GIVEN
-
-
- 1|1
- mortgages.mortgages.Applicant
-
- java.lang.Integer
- Applicant
- age
- NOT_EXPRESSION
- 212.60000000000002
-
-
-
-
- LoanApplication
-
-
- approved
-
-
-
- 1591876615315
- GIVEN
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
- java.lang.Boolean
- LoanApplication
- approved
- NOT_EXPRESSION
- 212.60000000000002
-
-
-
-
- IncomeSource
-
-
- amount
-
-
-
- 1591622221147
- GIVEN
-
-
- 1591622221147
- mortgages.mortgages.IncomeSource
-
- java.lang.Integer
- IncomeSource
- amount
- NOT_EXPRESSION
- 212.60000000000002
-
-
-
-
- LoanApplication
-
-
- approved
-
-
-
- 1|2
- EXPECT
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
- java.lang.Boolean
- LoanApplication
- approved
- NOT_EXPRESSION
- 212.60000000000002
-
-
-
-
- LoanApplication
-
-
- explanation
-
-
-
- 1591874776961
- EXPECT
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
- java.lang.String
- LoanApplication
- explanation
- NOT_EXPRESSION
- 212.60000000000002
-
-
-
-
-
-
-
-
- Scenario description
- java.lang.String
-
-
- Description
- OTHER
-
- Young Bob want a loan
-
-
-
- #
- java.lang.Integer
-
-
- Index
- OTHER
-
- 1
-
-
-
- 1|1
- mortgages.mortgages.Applicant
-
-
- 1|1
- GIVEN
-
- 17
-
-
-
- 1591622221147
- mortgages.mortgages.IncomeSource
-
-
- 1591622221147
- GIVEN
-
- 0
-
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
-
- 1|2
- EXPECT
-
- false
-
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
-
- 1591874776961
- EXPECT
-
- Underage
-
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
-
- 1591876615315
- GIVEN
-
- true
-
-
-
-
-
-
-
- Scenario description
- java.lang.String
-
-
- Description
- OTHER
-
- Adult Anna want a loan
-
-
-
- #
- java.lang.Integer
-
-
- Index
- OTHER
-
- 2
-
-
-
- 1|1
- mortgages.mortgages.Applicant
-
-
- 1|1
- GIVEN
-
- 27
-
-
-
- 1591622221147
- mortgages.mortgages.IncomeSource
-
-
- 1591622221147
- GIVEN
-
- 0
-
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
-
- 1|2
- EXPECT
-
- true
-
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
-
- 1591874776961
- EXPECT
-
- null
-
-
-
- 1591622209590
- mortgages.mortgages.LoanApplication
-
-
- 1591876615315
- GIVEN
-
- true
-
-
-
-
-
-
-
-
-
-
-
- 1|1
- GIVEN
-
-
- Empty
- java.lang.Void
-
- java.lang.Void
- INSTANCE 1
- PROPERTY 1
- NOT_EXPRESSION
- 114.0
-
-
-
-
-
-
-
-
- Empty
- java.lang.Void
-
-
- 1|1
- GIVEN
-
-
-
-
-
-
-
- RULE
- false
- false
-
-
-
-
-
-`;
+import React from "react";
+import type { Meta, StoryObj } from "@storybook/react";
+import { TestScenarioEditor } from "../../src/TestScenarioEditor";
+import { SceSimEditorWrapper, SceSimEditorWrapperProps } from "../scesimEditorStoriesWrapper";
-export const TRAFFIC_VIOLATION_DMN = `
+export const trafficViolationDmn = `
@@ -1148,3 +788,20 @@ export const TRAFFIC_VIOLATION_DMN = `
`;
+
+const meta: Meta<{}> = {
+ title: "Use Cases/Traffic Violation",
+ component: TestScenarioEditor,
+ includeStories: /^[A-Z]/,
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const TrafficViolation: Story = {
+ render: (args) => SceSimEditorWrapper(args),
+ args: {
+ pathRelativeToTheWorkspaceRoot: "trafficViolation.scesim",
+ content: trafficViolationDmn,
+ },
+};
diff --git a/packages/scesim-editor/stories/useCases/useCases.mdx b/packages/scesim-editor/stories/useCases/useCases.mdx
new file mode 100644
index 00000000000..fcc3863a8a8
--- /dev/null
+++ b/packages/scesim-editor/stories/useCases/useCases.mdx
@@ -0,0 +1,22 @@
+{/* Licensed to the Apache Software Foundation (ASF) under one */}
+{/* or more contributor license agreements. See the NOTICE file */}
+{/* distributed with this work for additional information */}
+{/* regarding copyright ownership. The ASF licenses this file */}
+{/* to you 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 { Meta } from "@storybook/blocks";
+
+
+
+# Placeholder
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/backgroundTable.ts b/packages/scesim-editor/tests/e2e/__fixtures__/backgroundTable.ts
new file mode 100644
index 00000000000..b35f81838ec
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/backgroundTable.ts
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { ProjectName } from "@kie-tools/playwright-base/projectNames";
+import { Page } from "@playwright/test";
+
+export class BackgroundTable {
+ constructor(public page: Page, public projectName: ProjectName) {}
+
+ public get() {
+ return this.page.getByLabel("Background");
+ }
+
+ public async fill(args: { content: string; column: number }) {
+ await this.page.getByLabel("Background").getByTestId("monaco-container").nth(args.column).dblclick();
+ if (this.projectName === ProjectName.GOOGLE_CHROME) {
+ // Google Chrome's fill function is not always erasing the input content
+ await this.page.getByLabel("Editor content;Press Alt+F1 for Accessibility Options.").press("Control+A");
+ }
+ // FEEL text input selector when the monaco editor is selected.
+ await this.page.getByLabel("Editor content;Press Alt+F1 for Accessibility Options.").fill(args.content);
+ await this.page.keyboard.press("Home");
+ await this.page.keyboard.press("Enter");
+ }
+}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/base.ts b/packages/scesim-editor/tests/e2e/__fixtures__/base.ts
new file mode 100644
index 00000000000..6db66072646
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/base.ts
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test as base } from "@playwright/test";
+import { Clipboard } from "./clipboard";
+import { Resizing } from "./resizing";
+import { UseCases } from "./useCases";
+import { ProjectName } from "@kie-tools/playwright-base/projectNames";
+import { Editor } from "./editor";
+import { TestScenarioTable } from "./testScenarioTable";
+import { BackgroundTable } from "./backgroundTable";
+import { Table } from "./table";
+import { ContextMenu } from "./contextMenu";
+import { SelectorPanel } from "./selectorPanel";
+
+type SceSimEditorFixtures = {
+ testScenarioTable: TestScenarioTable;
+ backgroundTable: BackgroundTable;
+ editor: Editor;
+ clipboard: Clipboard;
+ resizing: Resizing;
+ table: Table;
+ useCases: UseCases;
+ contextMenu: ContextMenu;
+ selectorPanel: SelectorPanel;
+};
+
+export const test = base.extend({
+ testScenarioTable: async ({ page }, use, testInfo) => {
+ await use(new TestScenarioTable(page, testInfo.project.name as ProjectName));
+ },
+ backgroundTable: async ({ page }, use, testInfo) => {
+ await use(new BackgroundTable(page, testInfo.project.name as ProjectName));
+ },
+ editor: async ({ page, selectorPanel, baseURL }, use) => {
+ await use(new Editor(page, selectorPanel, baseURL));
+ },
+ clipboard: async ({ browserName, context, page }, use) => {
+ const clipboard = new Clipboard(page);
+ clipboard.setup(context, browserName);
+ await use(clipboard);
+ },
+ resizing: async ({ page }, use) => {
+ await use(new Resizing(page));
+ },
+ table: async ({ page }, use) => {
+ await use(new Table(page));
+ },
+ contextMenu: async ({ page }, use) => {
+ await use(new ContextMenu(page));
+ },
+ selectorPanel: async ({ page }, use) => {
+ await use(new SelectorPanel(page));
+ },
+ useCases: async ({ page, selectorPanel, baseURL }, use) => {
+ await use(new UseCases(page, selectorPanel, baseURL));
+ },
+});
+
+export { expect } from "@playwright/test";
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/clipboard.ts b/packages/scesim-editor/tests/e2e/__fixtures__/clipboard.ts
new file mode 100644
index 00000000000..b639ac2f8ca
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/clipboard.ts
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { BrowserContext, Page } from "@playwright/test";
+
+export class Clipboard {
+ constructor(public page: Page) {}
+
+ public async copy() {
+ const modifier = process.platform === "darwin" ? "Meta" : "Control";
+ await this.page.keyboard.press(`${modifier}+KeyC`);
+ }
+
+ public async cut() {
+ const modifier = process.platform === "darwin" ? "Meta" : "Control";
+ await this.page.keyboard.press(`${modifier}+KeyX`);
+ }
+
+ public async paste() {
+ const modifier = process.platform === "darwin" ? "Meta" : "Control";
+ await this.page.keyboard.press(`${modifier}+KeyV`);
+ }
+
+ public async setup(context: BrowserContext, browserName: string) {
+ if (browserName === "chromium") {
+ await context.grantPermissions(["clipboard-read", "clipboard-write"]);
+ }
+ }
+
+ public use() {}
+}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/contextMenu.ts b/packages/scesim-editor/tests/e2e/__fixtures__/contextMenu.ts
new file mode 100644
index 00000000000..fd704301e8b
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/contextMenu.ts
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { Page } from "@playwright/test";
+
+export enum HeadingType {
+ SELECTION = "SELECTION",
+ SCENARIO = "SCENARIO",
+ FIELD = "FIELD",
+ INSTANCE = "INSTANCE",
+}
+
+export enum MenuItem {
+ DELETE_SCENARIO = "Delete",
+ DELETE_INSTANCE = "Delete Instance",
+ DELETE_FIELD = "Delete Field",
+ COPY = "copy",
+ CUT = "cut",
+ PASTE = "paste",
+ RESET = "reset",
+}
+
+export class ContextMenu {
+ constructor(public page: Page) {}
+
+ public async openOnCell(args: { rowNumber: string; columnNumber: number }) {
+ await this.page
+ .getByRole("row", { name: args.rowNumber })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .click({ button: "right" });
+ }
+
+ public async openOnInstance(args: { name: string }) {
+ await this.page.getByRole("columnheader", { name: args.name }).click({ button: "right" });
+ }
+
+ public async openOnProperty(args: { name: string; columnNumber: number }) {
+ await this.page.getByRole("columnheader", { name: args.name }).nth(args.columnNumber).click({ button: "right" });
+ }
+
+ public async clickMenuItem(args: { menuItem: MenuItem }) {
+ await this.page.getByRole("menuitem", { name: `${args.menuItem}` }).click();
+ }
+
+ public getHeading(args: { heading: HeadingType }) {
+ return this.page.getByRole("heading", { name: `${args.heading}`, exact: true });
+ }
+}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/editor.ts b/packages/scesim-editor/tests/e2e/__fixtures__/editor.ts
new file mode 100644
index 00000000000..debf3c1daec
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/editor.ts
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { Page } from "@playwright/test";
+import { SelectorPanel } from "./selectorPanel";
+
+export enum AssetType {
+ DECISION,
+ RULE,
+}
+
+export class Editor {
+ constructor(public page: Page, public selectorPanel: SelectorPanel, public baseURL?: string) {
+ this.page = page;
+ this.baseURL = baseURL;
+ }
+
+ public getIframeURL(iframeId: string) {
+ return `iframe.html?id=${iframeId}&viewMode=story`;
+ }
+
+ public async openEmpty() {
+ await this.page.goto(`${this.baseURL}/${this.getIframeURL(`misc-empty--empty`)}` ?? "");
+ }
+
+ public async createTestScenario(type: AssetType) {
+ await this.openEmpty();
+ type === AssetType.DECISION
+ ? await this.page.locator("#asset-type-select").selectOption("DMN")
+ : await this.page.locator("#asset-type-select").selectOption("RULE");
+ await this.page.getByRole("button", { name: "Create" }).click();
+ await this.selectorPanel.close();
+ }
+
+ public async switchToTestScenarioTable() {
+ await this.page.getByRole("tab", { name: "Test Scenario" }).click();
+ }
+
+ public async switchToBackgroundTable() {
+ await this.page.getByRole("tab", { name: "Background" }).click();
+ }
+
+ public get() {
+ return this.page.getByTestId("test-scenario-editor");
+ }
+}
diff --git a/packages/scesim-editor/dev-webapp/src/index.css b/packages/scesim-editor/tests/e2e/__fixtures__/resizing.ts
similarity index 74%
rename from packages/scesim-editor/dev-webapp/src/index.css
rename to packages/scesim-editor/tests/e2e/__fixtures__/resizing.ts
index 2827b01dcea..3f5d45647b3 100644
--- a/packages/scesim-editor/dev-webapp/src/index.css
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/resizing.ts
@@ -6,30 +6,24 @@
* to you 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.
+ * under the License.
*/
-* {
- box-sizing: border-box;
-}
-
-html {
- height: 100vh;
- margin: 0;
-}
+import { Page, Locator } from "@playwright/test";
-body {
- margin: 0;
-}
+export class Resizing {
+ constructor(public page: Page) {}
-#dev-webapp {
- height: 100%;
+ public async reset(target: Locator) {
+ await target.hover();
+ await target.getByTestId("resizer-handle").dblclick();
+ }
}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/selectorPanel.ts b/packages/scesim-editor/tests/e2e/__fixtures__/selectorPanel.ts
new file mode 100644
index 00000000000..ca29af1c90a
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/selectorPanel.ts
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { Page } from "@playwright/test";
+
+export class SelectorPanel {
+ constructor(public page: Page) {}
+
+ public async open() {
+ await this.page.getByRole("button").first().click();
+ }
+
+ public async close() {
+ await this.page.getByLabel("Close drawer panel").click();
+ }
+}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/table.ts b/packages/scesim-editor/tests/e2e/__fixtures__/table.ts
new file mode 100644
index 00000000000..99ba5e2bcb5
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/table.ts
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { Page } from "@playwright/test";
+
+export enum AddRowPosition {
+ ABOVE,
+ BELOW,
+}
+
+export enum AddColumnPosition {
+ LEFT,
+ RIGHT,
+}
+
+export enum Type {
+ ARROW,
+ KEYBOARD_SHORTCUT,
+}
+
+export class Table {
+ constructor(public page: Page) {}
+
+ public async addRow(args: { targetCellName: string; position: AddRowPosition }) {
+ await this.page.getByRole("cell", { name: args.targetCellName, exact: true }).click({ button: "right" });
+ args.position === AddRowPosition.BELOW
+ ? await this.page.getByRole("menuitem", { name: "Insert Below" }).click()
+ : await this.page.getByRole("menuitem", { name: "Insert Above" }).click();
+ }
+
+ public async addPropertyColumn(args: { targetCellName: string; position: AddColumnPosition; nth: number }) {
+ await this.page.getByRole("columnheader", { name: args.targetCellName }).nth(args.nth).click({ button: "right" });
+ args.position === AddColumnPosition.LEFT
+ ? await this.page.getByRole("menuitem", { name: "Insert Field Left" }).click()
+ : await this.page.getByRole("menuitem", { name: "Insert Field Right" }).click();
+ }
+
+ public async addInstanceColumn(args: { targetCellName: string; position: AddColumnPosition }) {
+ await this.page.getByRole("columnheader", { name: args.targetCellName }).click({ button: "right" });
+ args.position === AddColumnPosition.LEFT
+ ? await this.page.getByRole("menuitem", { name: "Insert Instance Left" }).click()
+ : await this.page.getByRole("menuitem", { name: "Insert Instance Right" }).click();
+ }
+ public async selectCell(args: { rowNumber: string; columnNumber: number }) {
+ await this.page
+ .getByRole("row", { name: args.rowNumber })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .click();
+ }
+ public getColumnHeader(args: { name: string }) {
+ return this.page.getByRole("columnheader", { name: args.name });
+ }
+
+ public getCell(args: { rowNumber: string; columnNumber: number }) {
+ return this.page.getByRole("row", { name: args.rowNumber }).nth(args.columnNumber);
+ }
+ public async deleteCellContent(args: { rowNumber: string; columnNumber: number }) {
+ await this.page
+ .getByRole("row", { name: args.rowNumber })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .click();
+ await this.page.keyboard.press("Delete");
+ }
+ public async deselectCell(args: { rowNumber: string; columnNumber: number }) {
+ await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Escape");
+ }
+ public async navigateLeft(args: { rowNumber: string; columnNumber: number; type: Type }) {
+ args.type === Type.ARROW
+ ? await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("ArrowLeft")
+ : await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Shift+Tab");
+ }
+ public async navigateRight(args: { rowNumber: string; columnNumber: number; type: Type }) {
+ args.type === Type.ARROW
+ ? await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("ArrowRight")
+ : await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Tab");
+ }
+ public async navigateUp(args: { rowNumber: string; columnNumber: number; type: Type }) {
+ args.type === Type.ARROW
+ ? await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("ArrowUp")
+ : (await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Shift+Enter"),
+ await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Shift+Enter"));
+ }
+ public async navigateDown(args: { rowNumber: string; columnNumber: number; type: Type }) {
+ args.type === Type.ARROW
+ ? await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("ArrowDown")
+ : (await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Enter+Enter"),
+ await this.page
+ .getByRole("row", { name: args.rowNumber, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.columnNumber)
+ .press("Enter+Enter"));
+ }
+}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/testScenarioTable.ts b/packages/scesim-editor/tests/e2e/__fixtures__/testScenarioTable.ts
new file mode 100644
index 00000000000..0a3acfcc0ae
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/testScenarioTable.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { ProjectName } from "@kie-tools/playwright-base/projectNames";
+import { Page } from "@playwright/test";
+
+export class TestScenarioTable {
+ constructor(public page: Page, public projectName: ProjectName) {}
+
+ public get() {
+ return this.page.getByLabel("Test Scenario");
+ }
+
+ public async fill(args: { content: string; rowLocatorInfo: string; column: number }) {
+ await this.page
+ .getByRole("row", { name: args.rowLocatorInfo, exact: true })
+ .getByTestId("monaco-container")
+ .nth(args.column)
+ .dblclick();
+ if (this.projectName === ProjectName.GOOGLE_CHROME) {
+ // Google Chrome's fill function is not always erasing the input content
+ await this.page.getByLabel("Editor content;Press Alt+F1 for Accessibility Options.").press("Control+A");
+ }
+ // FEEL text input selector when the monaco editor is selected.
+ await this.page.getByLabel("Editor content;Press Alt+F1 for Accessibility Options.").fill(args.content);
+ await this.page.keyboard.press("Home");
+ await this.page.keyboard.press("Enter");
+ }
+}
diff --git a/packages/scesim-editor/tests/e2e/__fixtures__/useCases.ts b/packages/scesim-editor/tests/e2e/__fixtures__/useCases.ts
new file mode 100644
index 00000000000..7471d21afaf
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/__fixtures__/useCases.ts
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { Page } from "@playwright/test";
+import { SelectorPanel } from "./selectorPanel";
+
+export class UseCases {
+ constructor(public page: Page, public selectorPanel: SelectorPanel, public baseURL?: string) {
+ this.page = page;
+ this.baseURL = baseURL;
+ }
+
+ public getIframeURL(iframeId: string) {
+ return `iframe.html?id=${iframeId}&viewMode=story`;
+ }
+
+ public async openTrafficViolationTest() {
+ await this.page.goto(
+ `${this.baseURL}/${this.getIframeURL(`use-cases-traffic-violation--traffic-violation`)}` ?? ""
+ );
+ await this.selectorPanel.close();
+ }
+
+ public async openAreTheyOldEnoughTest() {
+ await this.page.goto(`${this.baseURL}/${this.getIframeURL(`use-cases-is-old-enough--is-old-enough`)}` ?? "");
+ await this.selectorPanel.close();
+ }
+}
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-escaped-screenshot.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-escaped-screenshot.png
new file mode 100644
index 00000000000..a41bade5723
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-escaped-screenshot.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-down.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-down.png
new file mode 100644
index 00000000000..5c6a05b676b
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-down.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-left.png
new file mode 100644
index 00000000000..589f8d3d7ad
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-right.png
new file mode 100644
index 00000000000..978cd14d6ef
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-up.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-up.png
new file mode 100644
index 00000000000..3a39e411e16
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/features/keyboard/navigation-screenshot-up.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/create-a-new-test-scenario.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/create-a-new-test-scenario.png
new file mode 100644
index 00000000000..ef417466819
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/create-a-new-test-scenario.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/empty-background-table.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/empty-background-table.png
new file mode 100644
index 00000000000..5f7dc6cdce1
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/empty-background-table.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/empty-test-scenario-table.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/empty-test-scenario-table.png
new file mode 100644
index 00000000000..5de6e4b1d41
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/misc/emptyExpression/empty-test-scenario-table.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-instance-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-instance-column-left.png
new file mode 100644
index 00000000000..c83c362826a
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-instance-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-instance-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-instance-column-right.png
new file mode 100644
index 00000000000..7ec27d1eca9
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-instance-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-property-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-property-column-left.png
new file mode 100644
index 00000000000..22897e5af6b
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-property-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-property-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-property-column-right.png
new file mode 100644
index 00000000000..eda83129fa0
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-add-property-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-decision.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-decision.png
new file mode 100644
index 00000000000..80bfe015090
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-decision.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-rule.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-rule.png
new file mode 100644
index 00000000000..80bfe015090
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/backgroundTable/background-table-rule.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png
new file mode 100644
index 00000000000..85de21ac98a
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png
new file mode 100644
index 00000000000..8729509d142
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png
new file mode 100644
index 00000000000..1d20330e488
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png
new file mode 100644
index 00000000000..8b0ba32892c
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-decision.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-decision.png
new file mode 100644
index 00000000000..023a860f1cb
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-decision.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-rule.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-rule.png
new file mode 100644
index 00000000000..023a860f1cb
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/scesimEditor/testScenarioTable/test-scenario-table-rule.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/useCases/are-they-old-enough-test.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/useCases/are-they-old-enough-test.png
new file mode 100644
index 00000000000..5183063e9c7
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/useCases/are-they-old-enough-test.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/useCases/traffic-violation-test.png b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/useCases/traffic-violation-test.png
new file mode 100644
index 00000000000..3ebcd79c414
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/Google-Chrome/useCases/traffic-violation-test.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-escaped-screenshot.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-escaped-screenshot.png
new file mode 100644
index 00000000000..a8f3e344b4b
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-escaped-screenshot.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-down.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-down.png
new file mode 100644
index 00000000000..e3b640a0203
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-down.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-left.png
new file mode 100644
index 00000000000..1159df10af7
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-right.png
new file mode 100644
index 00000000000..691ca5d0c0c
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-up.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-up.png
new file mode 100644
index 00000000000..f176b001a94
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/features/keyboard/navigation-screenshot-up.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/create-a-new-test-scenario.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/create-a-new-test-scenario.png
new file mode 100644
index 00000000000..e85c3f76dec
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/create-a-new-test-scenario.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/empty-background-table.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/empty-background-table.png
new file mode 100644
index 00000000000..c1d39f6c827
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/empty-background-table.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/empty-test-scenario-table.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/empty-test-scenario-table.png
new file mode 100644
index 00000000000..fbcfa6e887e
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/misc/emptyExpression/empty-test-scenario-table.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-instance-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-instance-column-left.png
new file mode 100644
index 00000000000..01d655995a5
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-instance-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-instance-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-instance-column-right.png
new file mode 100644
index 00000000000..e2b8db6ecdf
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-instance-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-property-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-property-column-left.png
new file mode 100644
index 00000000000..d9de6efe744
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-property-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-property-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-property-column-right.png
new file mode 100644
index 00000000000..45bf76b9d15
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-add-property-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-decision.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-decision.png
new file mode 100644
index 00000000000..b90a56d70fa
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-decision.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-rule.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-rule.png
new file mode 100644
index 00000000000..256e6bb11c8
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/backgroundTable/background-table-rule.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png
new file mode 100644
index 00000000000..15b2ec435d0
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png
new file mode 100644
index 00000000000..6b1f945cc0d
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png
new file mode 100644
index 00000000000..0af3a17d45d
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png
new file mode 100644
index 00000000000..ffd486b5305
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-decision.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-decision.png
new file mode 100644
index 00000000000..196fb87c25b
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-decision.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-rule.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-rule.png
new file mode 100644
index 00000000000..0749d6ef2cf
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/scesimEditor/testScenarioTable/test-scenario-table-rule.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/useCases/are-they-old-enough-test.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/useCases/are-they-old-enough-test.png
new file mode 100644
index 00000000000..c1f6a2c559b
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/useCases/are-they-old-enough-test.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/chromium/useCases/traffic-violation-test.png b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/useCases/traffic-violation-test.png
new file mode 100644
index 00000000000..b3e9aa6e9ba
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/chromium/useCases/traffic-violation-test.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-escaped-screenshot.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-escaped-screenshot.png
new file mode 100644
index 00000000000..e387cfbb24a
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-escaped-screenshot.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-down.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-down.png
new file mode 100644
index 00000000000..32284c1802c
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-down.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-left.png
new file mode 100644
index 00000000000..922e37c139c
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-right.png
new file mode 100644
index 00000000000..bee9dedbf2b
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-up.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-up.png
new file mode 100644
index 00000000000..216df91f3da
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/features/keyboard/navigation-screenshot-up.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/create-a-new-test-scenario.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/create-a-new-test-scenario.png
new file mode 100644
index 00000000000..30c67fbe4bf
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/create-a-new-test-scenario.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/empty-background-table.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/empty-background-table.png
new file mode 100644
index 00000000000..7b37375dd1d
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/empty-background-table.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/empty-test-scenario-table.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/empty-test-scenario-table.png
new file mode 100644
index 00000000000..a730e53ade3
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/misc/emptyExpression/empty-test-scenario-table.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-instance-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-instance-column-left.png
new file mode 100644
index 00000000000..a3a6f131ca8
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-instance-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-instance-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-instance-column-right.png
new file mode 100644
index 00000000000..1ae0fd99b44
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-instance-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-property-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-property-column-left.png
new file mode 100644
index 00000000000..f2d141889c6
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-property-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-property-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-property-column-right.png
new file mode 100644
index 00000000000..334246efb77
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-add-property-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-decision.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-decision.png
new file mode 100644
index 00000000000..c50e12daf79
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-decision.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-rule.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-rule.png
new file mode 100644
index 00000000000..c50e12daf79
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/backgroundTable/background-table-rule.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png
new file mode 100644
index 00000000000..cf3c7db2527
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png
new file mode 100644
index 00000000000..94678c6c76f
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-instance-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png
new file mode 100644
index 00000000000..d0da6d09b34
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-left.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png
new file mode 100644
index 00000000000..adfc068f831
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-add-property-column-right.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-decision.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-decision.png
new file mode 100644
index 00000000000..2753ab10260
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-decision.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-rule.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-rule.png
new file mode 100644
index 00000000000..2753ab10260
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/scesimEditor/testScenarioTable/test-scenario-table-rule.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/useCases/are-they-old-enough-test.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/useCases/are-they-old-enough-test.png
new file mode 100644
index 00000000000..425ac3f8c40
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/useCases/are-they-old-enough-test.png differ
diff --git a/packages/scesim-editor/tests/e2e/__screenshots__/webkit/useCases/traffic-violation-test.png b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/useCases/traffic-violation-test.png
new file mode 100644
index 00000000000..8cf98371a50
Binary files /dev/null and b/packages/scesim-editor/tests/e2e/__screenshots__/webkit/useCases/traffic-violation-test.png differ
diff --git a/packages/scesim-editor/tests/e2e/features/keyboard/keyboard.spec.ts b/packages/scesim-editor/tests/e2e/features/keyboard/keyboard.spec.ts
new file mode 100644
index 00000000000..98e522db959
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/features/keyboard/keyboard.spec.ts
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { expect, test } from "../../__fixtures__/base";
+import { AssetType } from "../../__fixtures__/editor";
+import { AddRowPosition, Type } from "../../__fixtures__/table";
+
+test.describe("Keyboard", () => {
+ test.describe("Keyboard shortcuts navigation", () => {
+ test("should correctly navigate the table using keyboard shortcuts", async ({
+ editor,
+ table,
+ testScenarioTable,
+ }) => {
+ await editor.createTestScenario(AssetType.RULE);
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.selectCell({ rowNumber: "1", columnNumber: 0 });
+
+ await table.navigateRight({ rowNumber: "1", columnNumber: 0, type: Type.KEYBOARD_SHORTCUT });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-right.png");
+
+ await table.navigateDown({ rowNumber: "1", columnNumber: 1, type: Type.KEYBOARD_SHORTCUT });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-down.png");
+
+ await table.navigateLeft({ rowNumber: "2", columnNumber: 1, type: Type.KEYBOARD_SHORTCUT });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-left.png");
+
+ await table.navigateUp({ rowNumber: "2", columnNumber: 0, type: Type.KEYBOARD_SHORTCUT });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-up.png");
+
+ await table.deselectCell({ rowNumber: "2", columnNumber: 0 });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-escaped-screenshot.png");
+ });
+ });
+
+ test.describe("Arrow key navigation", () => {
+ test("should correctly navigate the table using arrow keys", async ({ editor, table, testScenarioTable }) => {
+ await editor.createTestScenario(AssetType.DECISION);
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.selectCell({ rowNumber: "1", columnNumber: 0 });
+
+ await table.navigateRight({ rowNumber: "1", columnNumber: 0, type: Type.ARROW });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-right.png");
+
+ await table.navigateDown({ rowNumber: "1", columnNumber: 1, type: Type.ARROW });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-down.png");
+
+ await table.navigateLeft({ rowNumber: "2", columnNumber: 1, type: Type.ARROW });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-left.png");
+
+ await table.navigateUp({ rowNumber: "2", columnNumber: 0, type: Type.ARROW });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-screenshot-up.png");
+
+ await table.deselectCell({ rowNumber: "2", columnNumber: 0 });
+ await expect(testScenarioTable.get()).toHaveScreenshot("navigation-escaped-screenshot.png");
+ });
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/features/selection/contextMenu.spec.ts b/packages/scesim-editor/tests/e2e/features/selection/contextMenu.spec.ts
new file mode 100644
index 00000000000..435f3e1b957
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/features/selection/contextMenu.spec.ts
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../../__fixtures__/base";
+import { MenuItem } from "../../__fixtures__/contextMenu";
+import { AssetType } from "../../__fixtures__/editor";
+
+test.describe("Selection", () => {
+ test.describe("Context menu", () => {
+ test.beforeEach(async ({ editor, testScenarioTable }) => {
+ await editor.createTestScenario(AssetType.RULE);
+ await testScenarioTable.fill({ content: '"test"', rowLocatorInfo: "1", column: 1 });
+ });
+
+ test.describe(() => {
+ test.beforeEach(async ({ clipboard, context, browserName }) => {
+ test.skip(
+ browserName !== "chromium",
+ "Playwright Webkit doesn't support clipboard permissions: https://github.com/microsoft/playwright/issues/13037"
+ );
+ clipboard.setup(context, browserName);
+ });
+
+ test("should use copy from selection context menu", async ({ clipboard, contextMenu, table }) => {
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.COPY });
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+
+ await table.deleteCellContent({ rowNumber: "1", columnNumber: 1 });
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).not.toContainText("test");
+
+ await clipboard.paste();
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+ });
+
+ test("should use cut from selection context menu", async ({ clipboard, contextMenu, table }) => {
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.CUT });
+
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).not.toContainText("test");
+ await table.selectCell({ rowNumber: "1", columnNumber: 1 });
+
+ await clipboard.paste();
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+ });
+
+ test("should use copy and paste from selection context menu", async ({ contextMenu, table }) => {
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.COPY });
+
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+
+ await table.deleteCellContent({ rowNumber: "1", columnNumber: 1 });
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).not.toContainText("test");
+
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.PASTE });
+
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+ });
+
+ test("should use cut and paste from selection context menu", async ({ contextMenu, table }) => {
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.CUT });
+
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).not.toContainText("test");
+
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.PASTE });
+
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+ });
+ });
+
+ test("should use reset from selection context menu", async ({ contextMenu, table }) => {
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.RESET });
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).not.toContainText("test");
+ });
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/misc/emptyExpression/emptyExpression.spec.ts b/packages/scesim-editor/tests/e2e/misc/emptyExpression/emptyExpression.spec.ts
new file mode 100644
index 00000000000..41605e2709b
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/misc/emptyExpression/emptyExpression.spec.ts
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../../__fixtures__/base";
+import { AssetType } from "../../__fixtures__/editor";
+
+test.describe("Empty editor", () => {
+ test("should render editor correctly", async ({ editor, testScenarioTable, backgroundTable }) => {
+ await editor.openEmpty();
+ await expect(editor.get()).toHaveScreenshot("create-a-new-test-scenario.png");
+
+ await editor.createTestScenario(AssetType.DECISION);
+ await expect(testScenarioTable.get()).toHaveScreenshot("empty-test-scenario-table.png");
+
+ await editor.switchToBackgroundTable();
+ await expect(backgroundTable.get()).toHaveScreenshot("empty-background-table.png");
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/scesimEditor/backgroundTable/contextMenu.spec.ts b/packages/scesim-editor/tests/e2e/scesimEditor/backgroundTable/contextMenu.spec.ts
new file mode 100644
index 00000000000..abbc00b45c3
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/scesimEditor/backgroundTable/contextMenu.spec.ts
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../../__fixtures__/base";
+import { HeadingType, MenuItem } from "../../__fixtures__/contextMenu";
+import { AssetType } from "../../__fixtures__/editor";
+import { AddColumnPosition } from "../../__fixtures__/table";
+
+test.describe("Background table context menu", () => {
+ test.describe("Context menu checks", () => {
+ test.beforeEach(async ({ editor, backgroundTable, table }) => {
+ await editor.createTestScenario(AssetType.DECISION);
+ await editor.switchToBackgroundTable();
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await backgroundTable.fill({ content: "test", column: 1 });
+ });
+
+ test("should render select context menu", async ({ contextMenu }) => {
+ await contextMenu.openOnCell({ rowNumber: "test test", columnNumber: 0 });
+ await expect(contextMenu.getHeading({ heading: HeadingType.SELECTION })).toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.SCENARIO })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.FIELD })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.INSTANCE })).not.toBeAttached();
+ });
+
+ test("should render field context menu", async ({ contextMenu }) => {
+ await contextMenu.openOnProperty({ name: "PROPERTY ()", columnNumber: 1 });
+ await expect(contextMenu.getHeading({ heading: HeadingType.SELECTION })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.SCENARIO })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.FIELD })).toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.INSTANCE })).not.toBeAttached();
+ });
+
+ test("should render instance context menu", async ({ contextMenu }) => {
+ await contextMenu.openOnInstance({ name: "INSTANCE-1 ()" });
+ await expect(contextMenu.getHeading({ heading: HeadingType.SELECTION })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.SCENARIO })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.FIELD })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.INSTANCE })).toBeAttached();
+ });
+
+ test("should add and delete instance column left", async ({ table, backgroundTable, contextMenu }) => {
+ await table.addInstanceColumn({
+ targetCellName: "INSTANCE-1 ()",
+ position: AddColumnPosition.LEFT,
+ });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).toBeAttached();
+ await expect(backgroundTable.get()).toHaveScreenshot("background-table-add-instance-column-left.png");
+
+ await contextMenu.openOnInstance({ name: "INSTANCE-3 ()" });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_INSTANCE });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).not.toBeAttached();
+ });
+
+ test("should add and delete instance column right", async ({ table, backgroundTable, contextMenu }) => {
+ await table.addInstanceColumn({
+ targetCellName: "INSTANCE-1 ()",
+ position: AddColumnPosition.RIGHT,
+ });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).toBeAttached();
+ await expect(backgroundTable.get()).toHaveScreenshot("background-table-add-instance-column-right.png");
+
+ await contextMenu.openOnInstance({ name: "INSTANCE-3 ()" });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_INSTANCE });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).not.toBeAttached();
+ });
+
+ test("should add and delete property column left", async ({ table, backgroundTable, contextMenu }) => {
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.LEFT,
+ nth: 0,
+ });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).toBeAttached();
+ await expect(backgroundTable.get()).toHaveScreenshot("background-table-add-property-column-left.png");
+
+ await contextMenu.openOnProperty({ name: "PROPERTY ()", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_FIELD });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).not.toBeAttached();
+ });
+
+ test("should add and delete property column right", async ({ table, backgroundTable, contextMenu }) => {
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).toBeAttached();
+ await expect(backgroundTable.get()).toHaveScreenshot("background-table-add-property-column-right.png");
+
+ await contextMenu.openOnProperty({ name: "PROPERTY ()", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_FIELD });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).not.toBeAttached();
+ });
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/scesimEditor/backgroundTable/populate.spec.ts b/packages/scesim-editor/tests/e2e/scesimEditor/backgroundTable/populate.spec.ts
new file mode 100644
index 00000000000..6d9f56201f8
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/scesimEditor/backgroundTable/populate.spec.ts
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../../__fixtures__/base";
+import { AssetType } from "../../__fixtures__/editor";
+import { AddColumnPosition } from "../../__fixtures__/table";
+
+test.describe("Populate decision background table", () => {
+ test("should correctly populate a decision-based background table", async ({
+ editor,
+ resizing,
+ table,
+ backgroundTable,
+ }) => {
+ await editor.createTestScenario(AssetType.DECISION);
+ await editor.switchToBackgroundTable();
+ await backgroundTable.fill({ content: "{foo}", column: 0 });
+
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+
+ await backgroundTable.fill({ content: "[foo]", column: 1 });
+ await backgroundTable.fill({ content: '"foo"', column: 2 });
+ await backgroundTable.fill({ content: ",./123981275980172957129517", column: 3 });
+ await backgroundTable.fill({ content: "{foo}{foo}f", column: 4 });
+ await backgroundTable.fill({ content: "=1-205=-1205=-0125-0215215", column: 5 });
+
+ await resizing.reset(table.getColumnHeader({ name: "INSTANCE-1 ()" }));
+ await expect(backgroundTable.get()).toHaveScreenshot("background-table-decision.png");
+ });
+});
+
+test.describe("Populate rule background table", () => {
+ test("should correctly populate a rule-based background table", async ({
+ editor,
+ resizing,
+ table,
+ backgroundTable,
+ }) => {
+ await editor.createTestScenario(AssetType.RULE);
+ await editor.switchToBackgroundTable();
+ await backgroundTable.fill({ content: "{foo}", column: 0 });
+
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+
+ await backgroundTable.fill({ content: "[foo]", column: 1 });
+ await backgroundTable.fill({ content: '"foo"', column: 2 });
+ await backgroundTable.fill({ content: ",./123981275980172957129517", column: 3 });
+ await backgroundTable.fill({ content: "{foo}{foo}f", column: 4 });
+ await backgroundTable.fill({ content: "=1-205=-1205=-0125-0215215", column: 5 });
+
+ await resizing.reset(table.getColumnHeader({ name: "INSTANCE-1 ()" }));
+ await expect(backgroundTable.get()).toHaveScreenshot("background-table-rule.png");
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/scesimEditor/testScenarioTable/contextMenu.spec.ts b/packages/scesim-editor/tests/e2e/scesimEditor/testScenarioTable/contextMenu.spec.ts
new file mode 100644
index 00000000000..b75099894c7
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/scesimEditor/testScenarioTable/contextMenu.spec.ts
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../../__fixtures__/base";
+import { HeadingType, MenuItem } from "../../__fixtures__/contextMenu";
+import { AssetType } from "../../__fixtures__/editor";
+import { AddColumnPosition, AddRowPosition } from "../../__fixtures__/table";
+
+test.describe("Test scenario table context menu", () => {
+ test.describe("Context menu checks", () => {
+ test.beforeEach(async ({ editor, testScenarioTable, table }) => {
+ await editor.createTestScenario(AssetType.RULE);
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.ABOVE });
+ await testScenarioTable.fill({ content: "test", rowLocatorInfo: "1", column: 1 });
+ });
+
+ test("should render select context menu", async ({ contextMenu }) => {
+ await contextMenu.openOnCell({ rowNumber: "1", columnNumber: 1 });
+ await expect(contextMenu.getHeading({ heading: HeadingType.SELECTION })).toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.SCENARIO })).toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.FIELD })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.INSTANCE })).not.toBeAttached();
+ });
+
+ test("should render field context menu", async ({ contextMenu }) => {
+ await contextMenu.openOnProperty({ name: "PROPERTY ()", columnNumber: 1 });
+ await expect(contextMenu.getHeading({ heading: HeadingType.SELECTION })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.SCENARIO })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.FIELD })).toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.INSTANCE })).not.toBeAttached();
+ });
+
+ test("should render instance context menu", async ({ contextMenu }) => {
+ await contextMenu.openOnInstance({ name: "INSTANCE-1 ()" });
+ await expect(contextMenu.getHeading({ heading: HeadingType.SELECTION })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.SCENARIO })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.FIELD })).not.toBeAttached();
+ await expect(contextMenu.getHeading({ heading: HeadingType.INSTANCE })).toBeAttached();
+ });
+
+ test("should add and delete instance column left", async ({ contextMenu, table, testScenarioTable }) => {
+ await table.addInstanceColumn({
+ targetCellName: "INSTANCE-1 ()",
+ position: AddColumnPosition.LEFT,
+ });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).toBeAttached();
+ await expect(testScenarioTable.get()).toHaveScreenshot("test-scenario-table-add-instance-column-left.png");
+
+ await contextMenu.openOnInstance({ name: "INSTANCE-3 ()" });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_INSTANCE });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).not.toBeAttached();
+ });
+
+ test("should add and delete instance column right", async ({ contextMenu, table, testScenarioTable }) => {
+ await table.addInstanceColumn({
+ targetCellName: "INSTANCE-1 ()",
+ position: AddColumnPosition.RIGHT,
+ });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).toBeAttached();
+ await expect(testScenarioTable.get()).toHaveScreenshot("test-scenario-table-add-instance-column-right.png");
+
+ await contextMenu.openOnInstance({ name: "INSTANCE-3 ()" });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_INSTANCE });
+ await expect(table.getColumnHeader({ name: "INSTANCE-3 ()" })).not.toBeAttached();
+ });
+
+ test("should add and delete property column left", async ({ contextMenu, table, testScenarioTable }) => {
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.LEFT,
+ nth: 0,
+ });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).toBeAttached();
+ await expect(testScenarioTable.get()).toHaveScreenshot("test-scenario-table-add-property-column-left.png");
+
+ await contextMenu.openOnProperty({ name: "PROPERTY ()", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_FIELD });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).not.toBeAttached();
+ });
+
+ test("should add and delete property column right", async ({ contextMenu, table, testScenarioTable }) => {
+ await table.addPropertyColumn({
+ targetCellName: "PROPERTY ()",
+ position: AddColumnPosition.RIGHT,
+ nth: 0,
+ });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).toBeAttached();
+ await expect(testScenarioTable.get()).toHaveScreenshot("test-scenario-table-add-property-column-right.png");
+
+ await contextMenu.openOnProperty({ name: "PROPERTY ()", columnNumber: 1 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_FIELD });
+ await expect(table.getColumnHeader({ name: "PROPERTY ()" }).nth(2)).not.toBeAttached();
+ });
+
+ test("should add and delete row below", async ({ table, contextMenu }) => {
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await expect(table.getCell({ rowNumber: "1", columnNumber: 1 })).toContainText("test");
+
+ await contextMenu.openOnCell({ rowNumber: "3", columnNumber: 0 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_SCENARIO });
+ await expect(table.getCell({ rowNumber: "3", columnNumber: 0 })).not.toBeAttached();
+ });
+
+ test("should add and delete row above", async ({ table, contextMenu }) => {
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.ABOVE });
+ await expect(table.getCell({ rowNumber: "2", columnNumber: 1 })).toContainText("test");
+
+ await contextMenu.openOnCell({ rowNumber: "3", columnNumber: 0 });
+ await contextMenu.clickMenuItem({ menuItem: MenuItem.DELETE_SCENARIO });
+ await expect(table.getCell({ rowNumber: "3", columnNumber: 0 })).not.toBeAttached();
+ });
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/scesimEditor/testScenarioTable/populate.spec.ts b/packages/scesim-editor/tests/e2e/scesimEditor/testScenarioTable/populate.spec.ts
new file mode 100644
index 00000000000..c8e313feba4
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/scesimEditor/testScenarioTable/populate.spec.ts
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../../__fixtures__/base";
+import { AssetType } from "../../__fixtures__/editor";
+import { AddRowPosition } from "../../__fixtures__/table";
+
+test.describe("Populate decision test scenario table", () => {
+ test("should correctly populate decision-based a test scenario table", async ({
+ editor,
+ resizing,
+ table,
+ testScenarioTable,
+ }) => {
+ await editor.createTestScenario(AssetType.DECISION);
+ await testScenarioTable.fill({ content: "Scenario one", rowLocatorInfo: "1", column: 0 });
+ await testScenarioTable.fill({
+ content: "date and time(5, 10)",
+ rowLocatorInfo: "1 Scenario one Scenario one",
+ column: 1,
+ });
+ await testScenarioTable.fill({
+ content: "100",
+ rowLocatorInfo: "1 Scenario one Scenario one date and time(5, 10) date and time(5, 10)",
+ column: 2,
+ });
+
+ await resizing.reset(table.getColumnHeader({ name: "GIVEN" }));
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+
+ await testScenarioTable.fill({ content: "{foo}", rowLocatorInfo: "2", column: 0 });
+ await testScenarioTable.fill({ content: '"foo"', rowLocatorInfo: "3", column: 0 });
+ await testScenarioTable.fill({ content: "[foo]", rowLocatorInfo: "4", column: 0 });
+ await testScenarioTable.fill({ content: ",./123", rowLocatorInfo: "5", column: 0 });
+ await testScenarioTable.fill({ content: '"6789"', rowLocatorInfo: "6", column: 0 });
+
+ await testScenarioTable.fill({ content: '"foo"', rowLocatorInfo: "2 {foo} {foo}", column: 1 });
+ await testScenarioTable.fill({ content: "[foo]", rowLocatorInfo: '3 "foo" "foo"', column: 1 });
+ await testScenarioTable.fill({
+ content: ",./123",
+ rowLocatorInfo: "4 [foo] [foo]",
+ column: 1,
+ });
+ await testScenarioTable.fill({
+ content: "Scenario two",
+ rowLocatorInfo: "5 ,./123 ,./123",
+ column: 1,
+ });
+ await testScenarioTable.fill({
+ content: '"129587289157"',
+ rowLocatorInfo: '6 "6789" "6789"',
+ column: 1,
+ });
+
+ await testScenarioTable.fill({
+ content: '"foo"',
+ rowLocatorInfo: '2 {foo} {foo} "foo" "foo"',
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: ",./123",
+ rowLocatorInfo: '3 "foo" "foo" [foo] [foo]',
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: '"12859728917589"',
+ rowLocatorInfo: "4 [foo] [foo] ,./123 ,./123",
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: "Scenario date and time(213,456 , )",
+ rowLocatorInfo: "5 ,./123 ,./123 Scenario two Scenario two",
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: "{foofoo}{foofoo}",
+ rowLocatorInfo: '6 "6789" "6789" "129587289157" "129587289157"',
+ column: 2,
+ });
+
+ await resizing.reset(table.getColumnHeader({ name: "EXPECT" }));
+ await expect(testScenarioTable.get()).toHaveScreenshot("test-scenario-table-decision.png");
+ });
+});
+
+test.describe("Populate rule test scenario table", () => {
+ test("should correctly populate a rule-based test scenario table", async ({
+ editor,
+ resizing,
+ table,
+ testScenarioTable,
+ }) => {
+ await editor.createTestScenario(AssetType.RULE);
+
+ await testScenarioTable.fill({ content: "Scenario one", rowLocatorInfo: "1", column: 0 });
+ await testScenarioTable.fill({
+ content: "date and time(5, 10)",
+ rowLocatorInfo: "1 Scenario one Scenario one",
+ column: 1,
+ });
+ await testScenarioTable.fill({
+ content: "100",
+ rowLocatorInfo: "1 Scenario one Scenario one date and time(5, 10) date and time(5, 10)",
+ column: 2,
+ });
+
+ await resizing.reset(table.getColumnHeader({ name: "GIVEN" }));
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+ await table.addRow({ targetCellName: "1", position: AddRowPosition.BELOW });
+
+ await testScenarioTable.fill({ content: "{foo}", rowLocatorInfo: "2", column: 0 });
+ await testScenarioTable.fill({ content: '"foo"', rowLocatorInfo: "3", column: 0 });
+ await testScenarioTable.fill({ content: "[foo]", rowLocatorInfo: "4", column: 0 });
+ await testScenarioTable.fill({ content: ",./123", rowLocatorInfo: "5", column: 0 });
+ await testScenarioTable.fill({ content: '"6789"', rowLocatorInfo: "6", column: 0 });
+
+ await testScenarioTable.fill({ content: '"foo"', rowLocatorInfo: "2 {foo} {foo}", column: 1 });
+ await testScenarioTable.fill({ content: "[foo]", rowLocatorInfo: '3 "foo" "foo"', column: 1 });
+ await testScenarioTable.fill({
+ content: ",./123",
+ rowLocatorInfo: "4 [foo] [foo]",
+ column: 1,
+ });
+ await testScenarioTable.fill({
+ content: "Scenario two",
+ rowLocatorInfo: "5 ,./123 ,./123",
+ column: 1,
+ });
+ await testScenarioTable.fill({
+ content: '"129587289157"',
+ rowLocatorInfo: '6 "6789" "6789"',
+ column: 1,
+ });
+
+ await testScenarioTable.fill({
+ content: '"foo"',
+ rowLocatorInfo: '2 {foo} {foo} "foo" "foo"',
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: ",./123",
+ rowLocatorInfo: '3 "foo" "foo" [foo] [foo]',
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: '"12859728917589"',
+ rowLocatorInfo: "4 [foo] [foo] ,./123 ,./123",
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: "Scenario date and time(213,456 , )",
+ rowLocatorInfo: "5 ,./123 ,./123 Scenario two Scenario two",
+ column: 2,
+ });
+ await testScenarioTable.fill({
+ content: "{foofoo}{foofoo}",
+ rowLocatorInfo: '6 "6789" "6789" "129587289157" "129587289157"',
+ column: 2,
+ });
+
+ await resizing.reset(table.getColumnHeader({ name: "EXPECT" }));
+ await expect(testScenarioTable.get()).toHaveScreenshot("test-scenario-table-rule.png");
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/useCases/areTheyOldEnough.spec.ts b/packages/scesim-editor/tests/e2e/useCases/areTheyOldEnough.spec.ts
new file mode 100644
index 00000000000..96c95411a6f
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/useCases/areTheyOldEnough.spec.ts
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../__fixtures__/base";
+
+test.describe("Check are they old enough test case", () => {
+ test("should render are they old enough test correctly", async ({ useCases, testScenarioTable }) => {
+ await useCases.openAreTheyOldEnoughTest();
+ await expect(testScenarioTable.get()).toHaveScreenshot("are-they-old-enough-test.png");
+ });
+});
diff --git a/packages/scesim-editor/tests/e2e/useCases/trafficViolation.spec.ts b/packages/scesim-editor/tests/e2e/useCases/trafficViolation.spec.ts
new file mode 100644
index 00000000000..18174b0db0e
--- /dev/null
+++ b/packages/scesim-editor/tests/e2e/useCases/trafficViolation.spec.ts
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 { test, expect } from "../__fixtures__/base";
+
+test.describe("Check traffic violation test case", () => {
+ test("should render traffic violation test correctly", async ({ useCases, testScenarioTable }) => {
+ await useCases.openTrafficViolationTest();
+ await expect(testScenarioTable.get()).toHaveScreenshot("traffic-violation-test.png");
+ });
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4c0ef4d28b8..fe0daab74c1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8885,21 +8885,51 @@ importers:
"@babel/preset-react":
specifier: ^7.16.0
version: 7.16.0(@babel/core@7.18.10)
+ "@babel/preset-typescript":
+ specifier: ^7.22.5
+ version: 7.23.0(@babel/core@7.18.10)
"@kie-tools-core/webpack-base":
specifier: workspace:*
version: link:../webpack-base
"@kie-tools/eslint":
specifier: workspace:*
version: link:../eslint
+ "@kie-tools/playwright-base":
+ specifier: workspace:*
+ version: link:../playwright-base
"@kie-tools/root-env":
specifier: workspace:*
version: link:../root-env
+ "@kie-tools/storybook-base":
+ specifier: workspace:*
+ version: link:../storybook-base
"@kie-tools/tsconfig":
specifier: workspace:*
version: link:../tsconfig
+ "@playwright/test":
+ specifier: ^1.38.1
+ version: 1.38.1
+ "@storybook/addon-links":
+ specifier: ^7.3.2
+ version: 7.6.13(react@17.0.2)
+ "@storybook/blocks":
+ specifier: ^7.3.2
+ version: 7.6.13(@types/react-dom@17.0.8)(@types/react@17.0.21)(react-dom@17.0.2)(react@17.0.2)
+ "@storybook/preview-api":
+ specifier: ^7.3.2
+ version: 7.6.13
+ "@storybook/react":
+ specifier: ^7.3.2
+ version: 7.6.13(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)
+ "@storybook/react-webpack5":
+ specifier: ^7.3.2
+ version: 7.6.13(@babel/core@7.18.10)(@swc/core@1.3.92)(esbuild@0.18.20)(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)(webpack-cli@4.10.0)(webpack-dev-server@4.15.1)
"@types/lodash":
specifier: ^4.14.168
version: 4.14.169
+ "@types/node":
+ specifier: ^18.13.0
+ version: 18.17.18
"@types/react":
specifier: ^17.0.6
version: 17.0.21
@@ -8915,18 +8945,30 @@ importers:
copy-webpack-plugin:
specifier: ^11.0.0
version: 11.0.0(webpack@5.88.2)
+ cross-env:
+ specifier: ^7.0.3
+ version: 7.0.3
file-loader:
specifier: ^6.2.0
version: 6.2.0(webpack@5.88.2)
rimraf:
specifier: ^3.0.2
version: 3.0.2
+ run-script-os:
+ specifier: ^1.1.6
+ version: 1.1.6
+ storybook:
+ specifier: ^7.3.2
+ version: 7.6.13
+ ts-jest:
+ specifier: ^26.5.6
+ version: 26.5.6(jest@26.6.3)(typescript@4.8.4)
typescript:
specifier: ^4.6.2
version: 4.8.4
webpack:
specifier: ^5.88.2
- version: 5.88.2(webpack-cli@4.10.0)
+ version: 5.88.2(@swc/core@1.3.92)(esbuild@0.18.20)(webpack-cli@4.10.0)
webpack-cli:
specifier: ^4.10.0
version: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
@@ -14229,44 +14271,6 @@ packages:
semver: 6.3.1
dev: true
- /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.16.12):
- resolution:
- { integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0
- dependencies:
- "@babel/core": 7.16.12
- "@babel/helper-annotate-as-pure": 7.22.5
- "@babel/helper-environment-visitor": 7.22.20
- "@babel/helper-function-name": 7.23.0
- "@babel/helper-member-expression-to-functions": 7.23.0
- "@babel/helper-optimise-call-expression": 7.22.5
- "@babel/helper-replace-supers": 7.22.20(@babel/core@7.16.12)
- "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
- "@babel/helper-split-export-declaration": 7.22.6
- semver: 6.3.1
- dev: true
-
- /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.23.9):
- resolution:
- { integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0
- dependencies:
- "@babel/core": 7.23.9
- "@babel/helper-annotate-as-pure": 7.22.5
- "@babel/helper-environment-visitor": 7.22.20
- "@babel/helper-function-name": 7.23.0
- "@babel/helper-member-expression-to-functions": 7.23.0
- "@babel/helper-optimise-call-expression": 7.22.5
- "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.9)
- "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
- "@babel/helper-split-export-declaration": 7.22.6
- semver: 6.3.1
- dev: true
-
/@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.16.12):
resolution:
{ integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== }
@@ -14549,15 +14553,6 @@ packages:
"@babel/types": 7.23.9
dev: true
- /@babel/helper-function-name@7.21.0:
- resolution:
- { integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== }
- engines: { node: ">=6.9.0" }
- dependencies:
- "@babel/template": 7.23.9
- "@babel/types": 7.23.9
- dev: true
-
/@babel/helper-function-name@7.23.0:
resolution:
{ integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== }
@@ -14613,7 +14608,7 @@ packages:
dependencies:
"@babel/helper-environment-visitor": 7.21.5
"@babel/helper-module-imports": 7.22.15
- "@babel/helper-simple-access": 7.21.5
+ "@babel/helper-simple-access": 7.22.5
"@babel/helper-split-export-declaration": 7.18.6
"@babel/helper-validator-identifier": 7.22.20
"@babel/template": 7.23.9
@@ -14715,14 +14710,6 @@ packages:
"@babel/helper-validator-identifier": 7.22.20
dev: true
- /@babel/helper-optimise-call-expression@7.18.6:
- resolution:
- { integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== }
- engines: { node: ">=6.9.0" }
- dependencies:
- "@babel/types": 7.23.9
- dev: true
-
/@babel/helper-optimise-call-expression@7.22.5:
resolution:
{ integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== }
@@ -14816,21 +14803,6 @@ packages:
"@babel/helper-wrap-function": 7.22.20
dev: true
- /@babel/helper-replace-supers@7.21.5:
- resolution:
- { integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== }
- engines: { node: ">=6.9.0" }
- dependencies:
- "@babel/helper-environment-visitor": 7.22.20
- "@babel/helper-member-expression-to-functions": 7.23.0
- "@babel/helper-optimise-call-expression": 7.22.5
- "@babel/template": 7.23.9
- "@babel/traverse": 7.23.9
- "@babel/types": 7.23.9
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@babel/helper-replace-supers@7.22.20(@babel/core@7.16.12):
resolution:
{ integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== }
@@ -14883,14 +14855,6 @@ packages:
"@babel/helper-optimise-call-expression": 7.22.5
dev: true
- /@babel/helper-simple-access@7.21.5:
- resolution:
- { integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== }
- engines: { node: ">=6.9.0" }
- dependencies:
- "@babel/types": 7.23.9
- dev: true
-
/@babel/helper-simple-access@7.22.5:
resolution:
{ integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== }
@@ -14899,14 +14863,6 @@ packages:
"@babel/types": 7.23.9
dev: true
- /@babel/helper-skip-transparent-expression-wrappers@7.20.0:
- resolution:
- { integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== }
- engines: { node: ">=6.9.0" }
- dependencies:
- "@babel/types": 7.23.9
- dev: true
-
/@babel/helper-skip-transparent-expression-wrappers@7.22.5:
resolution:
{ integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== }
@@ -15170,7 +15126,7 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": 7.20.0
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
"@babel/plugin-proposal-optional-chaining": 7.21.0(@babel/core@7.16.12)
dev: true
@@ -15183,7 +15139,7 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": 7.20.0
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
"@babel/plugin-proposal-optional-chaining": 7.21.0(@babel/core@7.23.9)
dev: true
@@ -15312,7 +15268,7 @@ packages:
"@babel/core": ^7.0.0-0
dependencies:
"@babel/core": 7.16.12
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.16.12)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.16.12)
"@babel/helper-plugin-utils": 7.22.5
dev: true
@@ -15324,7 +15280,7 @@ packages:
"@babel/core": ^7.0.0-0
dependencies:
"@babel/core": 7.23.9
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.23.9)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.9)
"@babel/helper-plugin-utils": 7.22.5
dev: true
@@ -15362,7 +15318,7 @@ packages:
"@babel/core": ^7.12.0
dependencies:
"@babel/core": 7.16.12
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.16.12)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.16.12)
"@babel/helper-plugin-utils": 7.22.5
"@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.16.12)
dev: true
@@ -15375,7 +15331,7 @@ packages:
"@babel/core": ^7.12.0
dependencies:
"@babel/core": 7.23.9
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.23.9)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.9)
"@babel/helper-plugin-utils": 7.22.5
"@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.23.9)
dev: true
@@ -15734,7 +15690,7 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": 7.20.0
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
"@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.16.12)
dev: true
@@ -15747,7 +15703,7 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": 7.20.0
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
"@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.23.9)
dev: true
@@ -15801,7 +15757,7 @@ packages:
"@babel/core": ^7.0.0-0
dependencies:
"@babel/core": 7.16.12
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.16.12)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.16.12)
"@babel/helper-plugin-utils": 7.22.5
dev: true
@@ -15813,7 +15769,7 @@ packages:
"@babel/core": ^7.0.0-0
dependencies:
"@babel/core": 7.23.9
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.23.9)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.9)
"@babel/helper-plugin-utils": 7.22.5
dev: true
@@ -15839,7 +15795,7 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-annotate-as-pure": 7.22.5
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.16.12)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.16.12)
"@babel/helper-plugin-utils": 7.22.5
"@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.16.12)
dev: true
@@ -15853,7 +15809,7 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-annotate-as-pure": 7.22.5
- "@babel/helper-create-class-features-plugin": 7.21.8(@babel/core@7.23.9)
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.23.9)
"@babel/helper-plugin-utils": 7.22.5
"@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.23.9)
dev: true
@@ -16181,6 +16137,17 @@ packages:
"@babel/helper-plugin-utils": 7.22.5
dev: true
+ /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
/@babel/plugin-syntax-flow@7.22.5(@babel/core@7.23.0):
resolution:
{ integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== }
@@ -16723,6 +16690,17 @@ packages:
"@babel/helper-plugin-utils": 7.22.5
dev: true
+ /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
/@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0):
resolution:
{ integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== }
@@ -17171,15 +17149,13 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-annotate-as-pure": 7.22.5
- "@babel/helper-environment-visitor": 7.21.5
- "@babel/helper-function-name": 7.21.0
- "@babel/helper-optimise-call-expression": 7.18.6
+ "@babel/helper-environment-visitor": 7.22.20
+ "@babel/helper-function-name": 7.23.0
+ "@babel/helper-optimise-call-expression": 7.22.5
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-replace-supers": 7.21.5
- "@babel/helper-split-export-declaration": 7.18.6
+ "@babel/helper-replace-supers": 7.22.20(@babel/core@7.16.12)
+ "@babel/helper-split-export-declaration": 7.22.6
globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
dev: true
/@babel/plugin-transform-classes@7.16.7(@babel/core@7.23.9):
@@ -17191,15 +17167,13 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-annotate-as-pure": 7.22.5
- "@babel/helper-environment-visitor": 7.21.5
- "@babel/helper-function-name": 7.21.0
- "@babel/helper-optimise-call-expression": 7.18.6
+ "@babel/helper-environment-visitor": 7.22.20
+ "@babel/helper-function-name": 7.23.0
+ "@babel/helper-optimise-call-expression": 7.22.5
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-replace-supers": 7.21.5
- "@babel/helper-split-export-declaration": 7.18.6
+ "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.9)
+ "@babel/helper-split-export-declaration": 7.22.6
globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
dev: true
/@babel/plugin-transform-classes@7.21.0(@babel/core@7.18.10):
@@ -17730,6 +17704,18 @@ packages:
"@babel/plugin-syntax-flow": 7.22.5(@babel/core@7.16.12)
dev: true
+ /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ "@babel/plugin-syntax-flow": 7.22.5(@babel/core@7.18.10)
+ dev: true
+
/@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.23.0):
resolution:
{ integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== }
@@ -17831,7 +17817,7 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-compilation-targets": 7.23.6
- "@babel/helper-function-name": 7.21.0
+ "@babel/helper-function-name": 7.23.0
"@babel/helper-plugin-utils": 7.22.5
dev: true
@@ -17844,7 +17830,7 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-compilation-targets": 7.23.6
- "@babel/helper-function-name": 7.21.0
+ "@babel/helper-function-name": 7.23.0
"@babel/helper-plugin-utils": 7.22.5
dev: true
@@ -18188,7 +18174,7 @@ packages:
"@babel/core": 7.16.12
"@babel/helper-module-transforms": 7.23.3(@babel/core@7.16.12)
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-simple-access": 7.21.5
+ "@babel/helper-simple-access": 7.22.5
babel-plugin-dynamic-import-node: 2.3.3
dev: true
@@ -18202,7 +18188,7 @@ packages:
"@babel/core": 7.23.9
"@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.9)
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-simple-access": 7.21.5
+ "@babel/helper-simple-access": 7.22.5
babel-plugin-dynamic-import-node: 2.3.3
dev: true
@@ -18219,41 +18205,41 @@ packages:
"@babel/helper-simple-access": 7.22.5
dev: true
- /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.16.12):
+ /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.0):
resolution:
{ integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== }
engines: { node: ">=6.9.0" }
peerDependencies:
"@babel/core": ^7.0.0-0
dependencies:
- "@babel/core": 7.16.12
- "@babel/helper-module-transforms": 7.23.3(@babel/core@7.16.12)
+ "@babel/core": 7.23.0
+ "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.0)
"@babel/helper-plugin-utils": 7.22.5
"@babel/helper-simple-access": 7.22.5
dev: true
- /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.0):
+ /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.16.12):
resolution:
- { integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== }
+ { integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== }
engines: { node: ">=6.9.0" }
peerDependencies:
"@babel/core": ^7.0.0-0
dependencies:
- "@babel/core": 7.23.0
- "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.0)
+ "@babel/core": 7.16.12
+ "@babel/helper-module-transforms": 7.23.3(@babel/core@7.16.12)
"@babel/helper-plugin-utils": 7.22.5
"@babel/helper-simple-access": 7.22.5
dev: true
- /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.9):
+ /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.18.10):
resolution:
- { integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== }
+ { integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== }
engines: { node: ">=6.9.0" }
peerDependencies:
"@babel/core": ^7.0.0-0
dependencies:
- "@babel/core": 7.23.9
- "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.9)
+ "@babel/core": 7.18.10
+ "@babel/helper-module-transforms": 7.23.3(@babel/core@7.18.10)
"@babel/helper-plugin-utils": 7.22.5
"@babel/helper-simple-access": 7.22.5
dev: true
@@ -18692,9 +18678,7 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-replace-supers": 7.21.5
- transitivePeerDependencies:
- - supports-color
+ "@babel/helper-replace-supers": 7.22.20(@babel/core@7.16.12)
dev: true
/@babel/plugin-transform-object-super@7.16.7(@babel/core@7.23.9):
@@ -18706,9 +18690,7 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-replace-supers": 7.21.5
- transitivePeerDependencies:
- - supports-color
+ "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.9)
dev: true
/@babel/plugin-transform-object-super@7.18.6(@babel/core@7.18.10):
@@ -19121,6 +19103,17 @@ packages:
"@babel/helper-plugin-utils": 7.22.5
dev: true
+ /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
/@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.0):
resolution:
{ integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== }
@@ -19187,6 +19180,17 @@ packages:
"@babel/plugin-transform-react-jsx": 7.22.15(@babel/core@7.16.12)
dev: true
+ /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/plugin-transform-react-jsx": 7.22.15(@babel/core@7.18.10)
+ dev: true
+
/@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.0):
resolution:
{ integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== }
@@ -19362,6 +19366,18 @@ packages:
"@babel/helper-plugin-utils": 7.22.5
dev: true
+ /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-annotate-as-pure": 7.22.5
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
/@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.0):
resolution:
{ integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== }
@@ -19615,7 +19631,7 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": 7.20.0
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
dev: true
/@babel/plugin-transform-spread@7.16.7(@babel/core@7.23.9):
@@ -19627,7 +19643,7 @@ packages:
dependencies:
"@babel/core": 7.23.9
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-skip-transparent-expression-wrappers": 7.20.0
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
dev: true
/@babel/plugin-transform-spread@7.20.7(@babel/core@7.18.10):
@@ -19890,6 +19906,20 @@ packages:
"@babel/plugin-syntax-typescript": 7.22.5(@babel/core@7.16.12)
dev: true
+ /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-annotate-as-pure": 7.22.5
+ "@babel/helper-create-class-features-plugin": 7.22.15(@babel/core@7.18.10)
+ "@babel/helper-plugin-utils": 7.22.5
+ "@babel/plugin-syntax-typescript": 7.22.5(@babel/core@7.18.10)
+ dev: true
+
/@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.0):
resolution:
{ integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== }
@@ -20676,6 +20706,19 @@ packages:
"@babel/plugin-transform-flow-strip-types": 7.22.5(@babel/core@7.16.12)
dev: true
+ /@babel/preset-flow@7.22.15(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ "@babel/helper-validator-option": 7.23.5
+ "@babel/plugin-transform-flow-strip-types": 7.22.5(@babel/core@7.18.10)
+ dev: true
+
/@babel/preset-flow@7.22.15(@babel/core@7.23.0):
resolution:
{ integrity: sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew== }
@@ -20832,6 +20875,22 @@ packages:
"@babel/plugin-transform-react-pure-annotations": 7.22.5(@babel/core@7.16.12)
dev: true
+ /@babel/preset-react@7.22.15(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ "@babel/helper-validator-option": 7.23.5
+ "@babel/plugin-transform-react-display-name": 7.22.5(@babel/core@7.18.10)
+ "@babel/plugin-transform-react-jsx": 7.22.15(@babel/core@7.18.10)
+ "@babel/plugin-transform-react-jsx-development": 7.22.5(@babel/core@7.18.10)
+ "@babel/plugin-transform-react-pure-annotations": 7.22.5(@babel/core@7.18.10)
+ dev: true
+
/@babel/preset-react@7.22.15(@babel/core@7.23.0):
resolution:
{ integrity: sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== }
@@ -20873,12 +20932,27 @@ packages:
dependencies:
"@babel/core": 7.16.12
"@babel/helper-plugin-utils": 7.22.5
- "@babel/helper-validator-option": 7.22.15
+ "@babel/helper-validator-option": 7.23.5
"@babel/plugin-syntax-jsx": 7.22.5(@babel/core@7.16.12)
- "@babel/plugin-transform-modules-commonjs": 7.23.0(@babel/core@7.16.12)
+ "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.16.12)
"@babel/plugin-transform-typescript": 7.22.15(@babel/core@7.16.12)
dev: true
+ /@babel/preset-typescript@7.23.0(@babel/core@7.18.10):
+ resolution:
+ { integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg== }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/helper-plugin-utils": 7.22.5
+ "@babel/helper-validator-option": 7.23.5
+ "@babel/plugin-syntax-jsx": 7.22.5(@babel/core@7.18.10)
+ "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.18.10)
+ "@babel/plugin-transform-typescript": 7.22.15(@babel/core@7.18.10)
+ dev: true
+
/@babel/preset-typescript@7.23.0(@babel/core@7.23.0):
resolution:
{ integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg== }
@@ -20890,7 +20964,7 @@ packages:
"@babel/helper-plugin-utils": 7.22.5
"@babel/helper-validator-option": 7.23.5
"@babel/plugin-syntax-jsx": 7.22.5(@babel/core@7.23.0)
- "@babel/plugin-transform-modules-commonjs": 7.23.0(@babel/core@7.23.0)
+ "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.23.0)
"@babel/plugin-transform-typescript": 7.22.15(@babel/core@7.23.0)
dev: true
@@ -20905,7 +20979,7 @@ packages:
"@babel/helper-plugin-utils": 7.22.5
"@babel/helper-validator-option": 7.23.5
"@babel/plugin-syntax-jsx": 7.22.5(@babel/core@7.23.9)
- "@babel/plugin-transform-modules-commonjs": 7.23.0(@babel/core@7.23.9)
+ "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.23.9)
"@babel/plugin-transform-typescript": 7.22.15(@babel/core@7.23.9)
dev: true
@@ -21190,9 +21264,9 @@ packages:
peerDependencies:
postcss: ^8.2
dependencies:
- "@csstools/selector-specificity": 2.2.0(postcss-selector-parser@6.0.10)
+ "@csstools/selector-specificity": 2.2.0(postcss-selector-parser@6.0.16)
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/@csstools/postcss-color-function@1.1.1(postcss@8.4.16):
@@ -21248,9 +21322,9 @@ packages:
peerDependencies:
postcss: ^8.2
dependencies:
- "@csstools/selector-specificity": 2.2.0(postcss-selector-parser@6.0.10)
+ "@csstools/selector-specificity": 2.2.0(postcss-selector-parser@6.0.16)
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/@csstools/postcss-nested-calc@1.0.0(postcss@8.4.16):
@@ -21341,14 +21415,14 @@ packages:
postcss: 8.4.16
dev: true
- /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.10):
+ /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.16):
resolution:
{ integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== }
engines: { node: ^14 || ^16 || >=18 }
peerDependencies:
postcss-selector-parser: ^6.0.10
dependencies:
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/@cypress/request@3.0.1:
@@ -27645,6 +27719,57 @@ packages:
- webpack-plugin-serve
dev: true
+ /@storybook/preset-react-webpack@7.6.13(@babel/core@7.18.10)(@swc/core@1.3.92)(esbuild@0.18.20)(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)(webpack-cli@4.10.0)(webpack-dev-server@4.15.1):
+ resolution:
+ { integrity: sha512-ywQfwR4+uUHslbPYPkhGnp50eFL5c8QM5YE7gVd6ue58+nUXu984T5+WcRR62rqoycO2q7CdfASlb72S8PFkEA== }
+ engines: { node: ">=16.0.0" }
+ peerDependencies:
+ "@babel/core": ^7.22.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ typescript: "*"
+ peerDependenciesMeta:
+ "@babel/core":
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ "@babel/core": 7.18.10
+ "@babel/preset-flow": 7.22.15(@babel/core@7.18.10)
+ "@babel/preset-react": 7.22.15(@babel/core@7.18.10)
+ "@pmmmwh/react-refresh-webpack-plugin": 0.5.11(react-refresh@0.14.0)(webpack-dev-server@4.15.1)(webpack@5.88.2)
+ "@storybook/core-webpack": 7.6.13
+ "@storybook/docs-tools": 7.6.13
+ "@storybook/node-logger": 7.6.13
+ "@storybook/react": 7.6.13(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)
+ "@storybook/react-docgen-typescript-plugin": 1.0.6--canary.9.0c3f3b7.0(typescript@4.8.4)(webpack@5.88.2)
+ "@types/node": 18.17.18
+ "@types/semver": 7.5.2
+ babel-plugin-add-react-displayname: 0.0.5
+ fs-extra: 11.1.1
+ magic-string: 0.30.7
+ react: 17.0.2
+ react-docgen: 7.0.3
+ react-dom: 17.0.2(react@17.0.2)
+ react-refresh: 0.14.0
+ semver: 7.5.4
+ typescript: 4.8.4
+ webpack: 5.88.2(@swc/core@1.3.92)(esbuild@0.18.20)(webpack-cli@4.10.0)
+ transitivePeerDependencies:
+ - "@swc/core"
+ - "@types/webpack"
+ - encoding
+ - esbuild
+ - sockjs-client
+ - supports-color
+ - type-fest
+ - uglify-js
+ - webpack-cli
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+ dev: true
+
/@storybook/preset-react-webpack@7.6.13(@babel/core@7.23.0)(@swc/core@1.3.92)(esbuild@0.18.20)(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)(webpack-cli@4.10.0)(webpack-dev-server@4.15.1):
resolution:
{ integrity: sha512-ywQfwR4+uUHslbPYPkhGnp50eFL5c8QM5YE7gVd6ue58+nUXu984T5+WcRR62rqoycO2q7CdfASlb72S8PFkEA== }
@@ -27870,6 +27995,45 @@ packages:
- webpack-plugin-serve
dev: true
+ /@storybook/react-webpack5@7.6.13(@babel/core@7.18.10)(@swc/core@1.3.92)(esbuild@0.18.20)(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)(webpack-cli@4.10.0)(webpack-dev-server@4.15.1):
+ resolution:
+ { integrity: sha512-TAoAZzZSV6/uE2qhDIf9bB90LBkHR3NnoUJN5pD/SS1wbNt8une1ufhDabfT6JiaBUPiNAg1Gl5Exct+WyBB9A== }
+ engines: { node: ">=16.0.0" }
+ peerDependencies:
+ "@babel/core": ^7.22.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ typescript: "*"
+ peerDependenciesMeta:
+ "@babel/core":
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ "@babel/core": 7.18.10
+ "@storybook/builder-webpack5": 7.6.13(esbuild@0.18.20)(typescript@4.8.4)(webpack-cli@4.10.0)
+ "@storybook/preset-react-webpack": 7.6.13(@babel/core@7.18.10)(@swc/core@1.3.92)(esbuild@0.18.20)(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)(webpack-cli@4.10.0)(webpack-dev-server@4.15.1)
+ "@storybook/react": 7.6.13(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)
+ "@types/node": 18.17.18
+ react: 17.0.2
+ react-dom: 17.0.2(react@17.0.2)
+ typescript: 4.8.4
+ transitivePeerDependencies:
+ - "@swc/core"
+ - "@swc/helpers"
+ - "@types/webpack"
+ - encoding
+ - esbuild
+ - sockjs-client
+ - supports-color
+ - type-fest
+ - uglify-js
+ - webpack-cli
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+ dev: true
+
/@storybook/react-webpack5@7.6.13(@babel/core@7.23.0)(@swc/core@1.3.92)(esbuild@0.18.20)(react-dom@17.0.2)(react@17.0.2)(typescript@4.8.4)(webpack-cli@4.10.0)(webpack-dev-server@4.15.1):
resolution:
{ integrity: sha512-TAoAZzZSV6/uE2qhDIf9bB90LBkHR3NnoUJN5pD/SS1wbNt8une1ufhDabfT6JiaBUPiNAg1Gl5Exct+WyBB9A== }
@@ -33400,7 +33564,7 @@ packages:
dependencies:
css-select: 4.3.0
css-what: 5.1.0
- domelementtype: 2.2.0
+ domelementtype: 2.3.0
domhandler: 4.3.1
domutils: 2.8.0
dev: true
@@ -34337,7 +34501,7 @@ packages:
css-select: 4.3.0
parse5: 6.0.1
parse5-htmlparser2-tree-adapter: 6.0.1
- postcss: 8.4.16
+ postcss: 8.4.38
pretty-bytes: 5.6.0
dev: true
@@ -34426,7 +34590,7 @@ packages:
postcss: ^8.4
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/css-declaration-sorter@7.2.0(postcss@8.4.38):
@@ -34448,7 +34612,7 @@ packages:
postcss: ^8.4
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/css-loader@5.2.7(webpack@5.88.2):
@@ -34478,12 +34642,12 @@ packages:
peerDependencies:
webpack: ^5.0.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.16)
- postcss: 8.4.16
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.16)
- postcss-modules-local-by-default: 4.0.0(postcss@8.4.16)
- postcss-modules-scope: 3.0.0(postcss@8.4.16)
- postcss-modules-values: 4.0.0(postcss@8.4.16)
+ icss-utils: 5.1.0(postcss@8.4.38)
+ postcss: 8.4.38
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.38)
+ postcss-modules-local-by-default: 4.0.0(postcss@8.4.38)
+ postcss-modules-scope: 3.0.0(postcss@8.4.38)
+ postcss-modules-values: 4.0.0(postcss@8.4.38)
postcss-value-parser: 4.2.0
semver: 7.5.4
webpack: 5.76.1
@@ -34496,12 +34660,12 @@ packages:
peerDependencies:
webpack: ^5.0.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.16)
- postcss: 8.4.16
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.16)
- postcss-modules-local-by-default: 4.0.0(postcss@8.4.16)
- postcss-modules-scope: 3.0.0(postcss@8.4.16)
- postcss-modules-values: 4.0.0(postcss@8.4.16)
+ icss-utils: 5.1.0(postcss@8.4.38)
+ postcss: 8.4.38
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.38)
+ postcss-modules-local-by-default: 4.0.0(postcss@8.4.38)
+ postcss-modules-scope: 3.0.0(postcss@8.4.38)
+ postcss-modules-values: 4.0.0(postcss@8.4.38)
postcss-value-parser: 4.2.0
semver: 7.5.4
webpack: 5.88.2(@swc/core@1.3.92)(esbuild@0.18.20)(webpack-cli@4.10.0)
@@ -34590,7 +34754,7 @@ packages:
engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" }
dependencies:
mdn-data: 2.0.28
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
dev: true
/css-tree@2.3.1:
@@ -34599,7 +34763,7 @@ packages:
engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 }
dependencies:
mdn-data: 2.0.30
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
dev: true
/css-what@5.1.0:
@@ -35903,7 +36067,7 @@ packages:
resolution:
{ integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== }
dependencies:
- domelementtype: 2.2.0
+ domelementtype: 2.3.0
domhandler: 4.3.1
entities: 2.2.0
dev: true
@@ -35923,11 +36087,6 @@ packages:
engines: { node: ">=10" }
dev: true
- /domelementtype@2.2.0:
- resolution:
- { integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== }
- dev: true
-
/domelementtype@2.3.0:
resolution:
{ integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== }
@@ -35955,7 +36114,7 @@ packages:
{ integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== }
engines: { node: ">= 4" }
dependencies:
- domelementtype: 2.2.0
+ domelementtype: 2.3.0
dev: true
/domhandler@5.0.3:
@@ -35976,7 +36135,7 @@ packages:
{ integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== }
dependencies:
dom-serializer: 1.3.2
- domelementtype: 2.2.0
+ domelementtype: 2.3.0
domhandler: 4.3.1
dev: true
@@ -36393,7 +36552,7 @@ packages:
is-regex: 1.1.4
is-shared-array-buffer: 1.0.3
is-string: 1.0.7
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
is-weakref: 1.0.2
object-inspect: 1.13.1
object-keys: 1.1.1
@@ -36434,7 +36593,7 @@ packages:
is-regex: 1.1.4
is-shared-array-buffer: 1.0.3
is-string: 1.0.7
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
is-weakref: 1.0.2
object-inspect: 1.13.1
object-keys: 1.1.1
@@ -39458,7 +39617,7 @@ packages:
resolution:
{ integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== }
dependencies:
- domelementtype: 2.2.0
+ domelementtype: 2.3.0
domhandler: 4.3.1
domutils: 2.8.0
entities: 2.2.0
@@ -39749,14 +39908,14 @@ packages:
postcss: 8.4.12
dev: true
- /icss-utils@5.1.0(postcss@8.4.16):
+ /icss-utils@5.1.0(postcss@8.4.38):
resolution:
{ integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== }
engines: { node: ^10 || ^12 || >= 14 }
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.16
+ postcss: 8.4.38
dev: true
/identity-obj-proxy@3.0.0:
@@ -40472,20 +40631,12 @@ packages:
dependencies:
has-symbols: 1.0.3
- /is-typed-array@1.1.12:
- resolution:
- { integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== }
- engines: { node: ">= 0.4" }
- dependencies:
- which-typed-array: 1.1.15
-
/is-typed-array@1.1.13:
resolution:
{ integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== }
engines: { node: ">= 0.4" }
dependencies:
which-typed-array: 1.1.15
- dev: true
/is-typedarray@1.0.0:
resolution:
@@ -43790,13 +43941,6 @@ packages:
hasBin: true
dev: true
- /nanoid@3.3.6:
- resolution:
- { integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== }
- engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
- hasBin: true
- dev: true
-
/nanoid@3.3.7:
resolution:
{ integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== }
@@ -45480,7 +45624,7 @@ packages:
postcss: ^8.2
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-calc@9.0.1(postcss@8.4.38):
@@ -45595,7 +45739,7 @@ packages:
postcss: ^8.3
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-dir-pseudo-class@6.0.5(postcss@8.4.16):
@@ -45606,7 +45750,7 @@ packages:
postcss: ^8.2
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-discard-comments@6.0.2(postcss@8.4.38):
@@ -45680,7 +45824,7 @@ packages:
postcss: ^8.4
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-focus-within@5.0.4(postcss@8.4.16):
@@ -45691,7 +45835,7 @@ packages:
postcss: ^8.4
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-font-variant@5.0.0(postcss@8.4.16):
@@ -45877,14 +46021,14 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-modules-extract-imports@3.0.0(postcss@8.4.16):
+ /postcss-modules-extract-imports@3.0.0(postcss@8.4.38):
resolution:
{ integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== }
engines: { node: ^10 || ^12 || >= 14 }
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.16
+ postcss: 8.4.38
dev: true
/postcss-modules-local-by-default@4.0.0(postcss@8.4.12):
@@ -45896,20 +46040,20 @@ packages:
dependencies:
icss-utils: 5.1.0(postcss@8.4.12)
postcss: 8.4.12
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
- /postcss-modules-local-by-default@4.0.0(postcss@8.4.16):
+ /postcss-modules-local-by-default@4.0.0(postcss@8.4.38):
resolution:
{ integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== }
engines: { node: ^10 || ^12 || >= 14 }
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.16)
- postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ icss-utils: 5.1.0(postcss@8.4.38)
+ postcss: 8.4.38
+ postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
@@ -45921,18 +46065,18 @@ packages:
postcss: ^8.1.0
dependencies:
postcss: 8.4.12
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-modules-scope@3.0.0(postcss@8.4.16):
+ /postcss-modules-scope@3.0.0(postcss@8.4.38):
resolution:
{ integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== }
engines: { node: ^10 || ^12 || >= 14 }
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss: 8.4.38
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-modules-values@4.0.0(postcss@8.4.12):
@@ -45946,15 +46090,15 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-modules-values@4.0.0(postcss@8.4.16):
+ /postcss-modules-values@4.0.0(postcss@8.4.38):
resolution:
{ integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== }
engines: { node: ^10 || ^12 || >= 14 }
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.16)
- postcss: 8.4.16
+ icss-utils: 5.1.0(postcss@8.4.38)
+ postcss: 8.4.38
dev: true
/postcss-nesting@10.2.0(postcss@8.4.16):
@@ -45964,9 +46108,9 @@ packages:
peerDependencies:
postcss: ^8.2
dependencies:
- "@csstools/selector-specificity": 2.2.0(postcss-selector-parser@6.0.10)
+ "@csstools/selector-specificity": 2.2.0(postcss-selector-parser@6.0.16)
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-normalize-charset@6.0.2(postcss@8.4.38):
@@ -46188,7 +46332,7 @@ packages:
postcss: ^8.2
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-reduce-initial@6.1.0(postcss@8.4.38):
@@ -46231,16 +46375,7 @@ packages:
postcss: ^8.2
dependencies:
postcss: 8.4.16
- postcss-selector-parser: 6.0.10
- dev: true
-
- /postcss-selector-parser@6.0.10:
- resolution:
- { integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== }
- engines: { node: ">=4" }
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-selector-parser@6.0.16:
@@ -46285,9 +46420,9 @@ packages:
{ integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== }
engines: { node: ^10 || ^12 || >=14 }
dependencies:
- nanoid: 3.3.6
+ nanoid: 3.3.7
picocolors: 1.0.0
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
dev: true
/postcss@8.4.16:
@@ -46295,9 +46430,9 @@ packages:
{ integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== }
engines: { node: ^10 || ^12 || >=14 }
dependencies:
- nanoid: 3.3.6
+ nanoid: 3.3.7
picocolors: 1.0.0
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
dev: true
/postcss@8.4.38:
@@ -48427,7 +48562,7 @@ packages:
adjust-sourcemap-loader: 4.0.0
convert-source-map: 1.7.0
loader-utils: 2.0.4
- postcss: 8.4.16
+ postcss: 8.4.38
source-map: 0.6.1
dev: true
@@ -48845,7 +48980,7 @@ packages:
dependencies:
chokidar: 3.5.3
immutable: 4.0.0
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
dev: true
/sax@1.2.4:
@@ -49560,7 +49695,7 @@ packages:
dependencies:
abab: 2.0.6
iconv-lite: 0.6.3
- source-map-js: 1.0.2
+ source-map-js: 1.2.0
webpack: 5.76.1
dev: true
@@ -51241,7 +51376,7 @@ packages:
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
dev: true
/typed-array-buffer@1.0.2:
@@ -51262,7 +51397,7 @@ packages:
call-bind: 1.0.7
for-each: 0.3.3
has-proto: 1.0.3
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
dev: true
/typed-array-byte-length@1.0.1:
@@ -51286,7 +51421,7 @@ packages:
call-bind: 1.0.7
for-each: 0.3.3
has-proto: 1.0.3
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
dev: true
/typed-array-byte-offset@1.0.2:
@@ -51308,7 +51443,7 @@ packages:
dependencies:
call-bind: 1.0.7
for-each: 0.3.3
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
/typed-array-length@1.0.6:
resolution:
@@ -51899,7 +52034,7 @@ packages:
inherits: 2.0.4
is-arguments: 1.1.1
is-generator-function: 1.0.10
- is-typed-array: 1.1.12
+ is-typed-array: 1.1.13
which-typed-array: 1.1.15
dev: true