`, `` block and inline, `` bold, ``, italic, `` strike through, ``, `` and checkbox lists, `` links and `
` images
+ - editor is focused on load if `autoFocus` prop is set to `true`
+ - implemented support for `disabled` state in code editor
+ - implemented support for `intent` states in code editor
+- ``
+ - `additionalElements` property to display elements at the end of the label
+ - `inline` property to display the label component as inline block
+- ` `
+ - `tooltip` property to dislay tooltip on menu item label
+- ` `
+ - `resizeDirections` to specifiy the axis that can be used to resize the node
+ - `resizeMaxDimensions` to add maximum values for resizing height/width
+- ` `
+ - `hasCardWrapper` property to use a `Card` component as wrapper around it, simplifies the process to put it in a box, use `cardProps` to forward basic properties to that `Card` wrapper
+- ` `
+ - `actionsProps` property to forward `CardActions` properties, e.g. `noWrap`
+- New icons:
+ - `artefact-task-concatenatetofile`
+ - `artefact-task-pivot`
+ - `artefact-task-unpivot`
+ - `item-magic-edit`
+ - `operation-format-text-code`
+ - `operation-format-text-bold`
+ - `operation-format-text-italic`
+ - `operation-format-text-strikethrough`
+ - `operation-format-list-bullet`
+ - `operation-format-list-checked`
+ - `operation-format-list-numbered`
+
+### Fixed
+
+- ` `:
+ - Code editor resets to initial value on every code editor instance re-init
+- ` `
+ - re-render the component if the `wrapLines` property is changed after the component's render
+ - only fire `onChange` event when the document has actually changed
+- ` `
+ - whitespace after `Depiction` element when the `OverviewItem` ist used with `densityHigh` and `hasSpacing`
+- ` `
+ - `hiddenInteractions` stay visible if they contain focused elements or opened overlays (e.g. context menus)
+- ` `
+ - do not create empty list items
+- ` `
+ - allow to use `onClearanceHandler` and `rightElement` together
+ - fix display of `Icon` with `tooltipText` as direct child in `rightElement`
+
+### Changed
+
+- ` `
+ - display running time after label if there is an status info to prevent a third line
+- ` `
+ - property color for `graph` configuration was adjusted
+- ` `
+ - internally forced to be managed controlled to keep `onClearanceHandler` independent from outer `value` property
+- ` `
+ - use always `` component for `label` value
+- ` `
+ - Refactored data structure position and dimension (breaking change)
+
+### Deprecated
+
+- ` `
+ - fallback of static test id is removed, need then always to be set if necessary
+- ` `
+ - component won't accept properties of any name in future, only data attributes for test IDs and basic HTML element properties
+- ` `
+ - `densityHigh` property will be removed, use it directly on `OverviewItem` children
+
## [24.0.1] - 2025-02-06
### Changed
diff --git a/babel.config.json b/babel.config.json
index 7b0ac0309..e3abab777 100644
--- a/babel.config.json
+++ b/babel.config.json
@@ -1,8 +1,8 @@
{
"presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript", "@babel/preset-flow"],
"plugins": [
- ["@babel/plugin-proposal-private-methods", { "loose": true }],
- ["@babel/plugin-proposal-private-property-in-object", { "loose": true }],
- ["@babel/plugin-proposal-class-properties", { "loose": true }]
+ ["@babel/plugin-transform-private-methods", { "loose": true }],
+ ["@babel/plugin-transform-private-property-in-object", { "loose": true }],
+ ["@babel/plugin-transform-class-properties", { "loose": true }]
]
}
diff --git a/package.json b/package.json
index 44866cd20..c418b677f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@eccenca/gui-elements",
"description": "GUI elements based on other libraries, usable in React application, written in Typescript.",
- "version": "24.0.1",
+ "version": "24.1.0-rc.7",
"license": "Apache-2.0",
"homepage": "https://github.com/eccenca/gui-elements",
"bugs": "https://github.com/eccenca/gui-elements/issues",
@@ -81,11 +81,14 @@
"@codemirror/lang-yaml": "^6.1.2",
"@codemirror/legacy-modes": "^6.4.2",
"@mavrin/remark-typograf": "^2.2.0",
+ "classnames": "^2.5.1",
"codemirror": "^6.0.1",
"color": "^4.2.3",
"compute-scroll-into-view": "^3.1.0",
+ "jshint": "^2.13.6",
"lodash": "^4.17.21",
- "re-resizable": "^6.10.1",
+ "n3": "^1.23.1",
+ "re-resizable": "^6.10.3",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-flow-renderer": "9.7.4",
@@ -103,38 +106,40 @@
"xml-formatter": "^3.6.3"
},
"devDependencies": {
- "@babel/core": "^7.26.0",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-private-methods": "^7.18.6",
- "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
- "@babel/preset-env": "^7.26.0",
+ "@babel/core": "^7.26.10",
+ "@babel/plugin-transform-class-properties": "^7.25.9",
+ "@babel/plugin-transform-private-methods": "^7.25.9",
+ "@babel/plugin-transform-private-property-in-object": "^7.25.9",
+ "@babel/preset-env": "^7.26.9",
"@babel/preset-flow": "^7.25.9",
"@babel/preset-react": "^7.26.3",
- "@babel/preset-typescript": "^7.26.0",
+ "@babel/preset-typescript": "^7.27.0",
"@eslint/compat": "^1.2.4",
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.17.0",
- "@storybook/addon-actions": "^8.4.7",
- "@storybook/addon-essentials": "^8.4.7",
- "@storybook/addon-jest": "^8.4.7",
- "@storybook/addon-links": "^8.4.7",
- "@storybook/addon-webpack5-compiler-babel": "^3.0.3",
- "@storybook/cli": "^8.4.7",
+ "@storybook/addon-actions": "^8.6.9",
+ "@storybook/addon-essentials": "^8.6.9",
+ "@storybook/addon-jest": "^8.6.9",
+ "@storybook/addon-links": "^8.6.9",
+ "@storybook/addon-webpack5-compiler-babel": "^3.0.5",
+ "@storybook/cli": "^8.6.9",
"@storybook/preset-scss": "^1.0.3",
- "@storybook/react": "^8.4.7",
- "@storybook/react-webpack5": "^8.4.7",
- "@storybook/test": "^8.4.7",
+ "@storybook/react": "^8.6.9",
+ "@storybook/react-webpack5": "^8.6.9",
+ "@storybook/test": "^8.6.9",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^12.1.2",
"@types/codemirror": "^5.60.15",
"@types/color": "^3.0.6",
"@types/jest": "^29.5.14",
+ "@types/jshint": "^2.12.4",
"@types/lodash": "^4.17.13",
+ "@types/n3": "^1.21.1",
"@types/react-syntax-highlighter": "^15.5.13",
"@typescript-eslint/eslint-plugin": "^8.18.1",
"@typescript-eslint/parser": "^8.18.1",
"babel-jest": "^29.7.0",
- "chromatic": "^11.20.2",
+ "chromatic": "^11.27.0",
"eslint": "^9.17.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.1.0",
@@ -154,7 +159,7 @@
"rimraf": "^5.0.10",
"sass": "1.62.1",
"sass-loader": "10.3.1",
- "storybook": "^8.4.7",
+ "storybook": "^8.6.9",
"stylelint": "^15.11.0",
"stylelint-config-recess-order": "^4.6.0",
"stylelint-config-standard-scss": "^9.0.0",
@@ -173,7 +178,9 @@
"**/@types/react": "^17.0.83",
"node-sass-package-importer/**/postcss": "^8.4.49",
"**/cross-spawn": "^7.0.5 ",
- "**/micromatch": "^4.0.8"
+ "**/micromatch": "^4.0.8",
+ "**/@babel/runtime": "^7.26.10",
+ "**/@babel/helpers": "^7.26.10"
},
"husky": {
"hooks": {
diff --git a/src/cmem/ActivityControl/ActivityControlWidget.tsx b/src/cmem/ActivityControl/ActivityControlWidget.tsx
index dfa754e41..e59ef64ca 100644
--- a/src/cmem/ActivityControl/ActivityControlWidget.tsx
+++ b/src/cmem/ActivityControl/ActivityControlWidget.tsx
@@ -92,7 +92,7 @@ interface IActivityContextMenu extends TestableComponent {
export interface ActivityControlWidgetAction extends TestableComponent {
// The action that should be triggered
- action: () => any;
+ action: () => void;
// The tooltip that should be shown over the action icon
tooltip?: string;
// The icon of the action button
@@ -147,6 +147,7 @@ export function ActivityControlWidget(props: ActivityControlWidgetProps) {
{props.label && (
{React.cloneElement(labelWrapper, {}, props.label)}
+ {timerExecutionMsg && (props.statusMessage || tags) && <> ({timerExecutionMsg})>}
)}
{(props.statusMessage || tags) && (
@@ -170,7 +171,9 @@ export function ActivityControlWidget(props: ActivityControlWidgetProps) {
)}
)}
- {timerExecutionMsg && {timerExecutionMsg} }
+ {timerExecutionMsg && !(props.statusMessage || tags) && (
+ {timerExecutionMsg}
+ )}
{activityActions &&
diff --git a/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx b/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx
index 3311a6a63..561cd2dfb 100644
--- a/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx
+++ b/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx
@@ -4,7 +4,16 @@ import getColorConfiguration from "../../../common/utils/getColorConfiguration";
import { CodeEditor } from "../../../extensions";
import { ReactFlowHotkeyContext } from "../extensions/ReactFlowHotkeyContext";
-import { Button, FieldItem, Icon, SimpleDialog, SimpleDialogProps, Tag, TagList } from "./../../../index";
+import {
+ Button,
+ CodeEditorProps,
+ FieldItem,
+ Icon,
+ SimpleDialog,
+ SimpleDialogProps,
+ Tag,
+ TagList,
+} from "./../../../index";
export type StickyNoteModalTranslationKeys = "modalTitle" | "noteLabel" | "colorLabel" | "saveButton" | "cancelButton";
@@ -32,10 +41,14 @@ export interface StickyNoteModalProps {
* Forward other properties to the `SimpleModal` element that is used for this dialog.
*/
simpleDialogProps?: Omit;
+ /**
+ * Code editor props
+ */
+ codeEditorProps?: Omit;
}
export const StickyNoteModal: React.FC = React.memo(
- ({ metaData, onClose, onSubmit, translate, simpleDialogProps }) => {
+ ({ metaData, onClose, onSubmit, translate, simpleDialogProps, codeEditorProps }) => {
const refNote = React.useRef(metaData?.note ?? "");
const [color, setSelectedColor] = React.useState(metaData?.color ?? "");
const noteColors: [string, string][] = Object.entries(getColorConfiguration("stickynotes")).map(
@@ -123,6 +136,7 @@ export const StickyNoteModal: React.FC = React.memo(
refNote.current = value;
}}
defaultValue={refNote.current}
+ {...codeEditorProps}
/>
(undefined);
const [cm, setCM] = React.useState();
+ const currentCm = React.useRef()
+ currentCm.current = cm
const isFocused = React.useRef(false);
const autoSuggestionDivRef = React.useRef(null);
/** Mutable editor state, since this needs to be current in scope of the SingleLineEditorComponent. */
@@ -235,12 +237,21 @@ const AutoSuggestion = ({
const pathIsValid = validationResponse?.valid ?? true;
React.useEffect(() => {
- if (reInitOnInitialValueChange && initialValue != null && cm) {
+ if (reInitOnInitialValueChange && initialValue != null && currentCm.current) {
dispatch({
- changes: { from: 0, to: cm?.state?.doc.length, insert: initialValue },
+ changes: { from: 0, to: currentCm.current.state?.doc.length, insert: initialValue },
});
+ // Validate initial value change
+ checkValuePathValidity(initialValue)
}
- }, [initialValue, cm, reInitOnInitialValueChange]);
+ }, [initialValue, reInitOnInitialValueChange]);
+
+ React.useEffect(() => {
+ if(currentCm.current) {
+ // Validate initial value
+ checkValuePathValidity(initialValue)
+ }
+ }, [currentCm.current!!])
const setCurrentIndex = (newIndex: number) => {
editorState.index = newIndex;
diff --git a/src/components/AutoSuggestion/ExtendedCodeEditor.tsx b/src/components/AutoSuggestion/ExtendedCodeEditor.tsx
index 1726655cf..1f8ff66a0 100644
--- a/src/components/AutoSuggestion/ExtendedCodeEditor.tsx
+++ b/src/components/AutoSuggestion/ExtendedCodeEditor.tsx
@@ -4,7 +4,7 @@ import { EditorState } from "@codemirror/state";
import { EditorView, lineNumbers, Rect } from "@codemirror/view";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
-import { CodeEditor } from "../../extensions/codemirror/CodeMirror";
+import { CodeEditor, CodeEditorProps } from "../../extensions/codemirror/CodeMirror";
//hooks
import { SupportedCodeEditorModes } from "../../extensions/codemirror/hooks/useCodemirrorModeExtension.hooks";
@@ -15,23 +15,23 @@ export interface IRange {
export interface ExtendedCodeEditorProps {
// Is called with the editor instance that allows access via the CodeMirror API
- setCM: (editor: EditorView | undefined) => any;
+ setCM: (editor: EditorView | undefined) => void;
// Called whenever the editor content changes
- onChange: (value: string) => any;
+ onChange: (value: string) => void;
// Called when the cursor position changes
- onCursorChange: (pos: number, coords: Rect, scrollinfo: HTMLElement, cm: EditorView) => any;
+ onCursorChange: (pos: number, coords: Rect, scrollinfo: HTMLElement, cm: EditorView) => void;
// The editor theme, e.g. "sparql"
mode?: SupportedCodeEditorModes;
// The initial value of the editor
initialValue: string;
// Called when the focus status changes
- onFocusChange: (focused: boolean) => any;
+ onFocusChange: (focused: boolean) => void;
// Called when the user presses a key
onKeyDown: (event: KeyboardEvent) => boolean;
// function invoked when any click occurs
onMouseDown?: (view: EditorView) => void;
// Called when the user selects text
- onSelection: (ranges: IRange[]) => any;
+ onSelection: (ranges: IRange[]) => void;
// If the key is enabled as normal input, i.e. it won't have the behavior of changing to the next input element, expected in a web app.
enableTab?: boolean;
/** Placeholder to be shown when no text has been entered, yet. */
@@ -40,6 +40,27 @@ export interface ExtendedCodeEditorProps {
showScrollBar?: boolean;
/** allow multiline entries when new line characters are entered */
multiline?: boolean;
+ /**
+ * Code editor props
+ */
+ codeEditorProps?: Omit<
+ CodeEditorProps,
+ | "defaultValue"
+ | "setEditorView"
+ | "onChange"
+ | "onCursorChange"
+ | "onFocusChange"
+ | "onKeyDown"
+ | "onSelection"
+ | "onMouseDown"
+ | "shouldHaveMinimalSetup"
+ | "preventLineNumbers"
+ | "mode"
+ | "name"
+ | "enableTab"
+ | "additionalExtensions"
+ | "outerDivAttributes"
+ >;
}
export type IEditorProps = ExtendedCodeEditorProps;
@@ -58,6 +79,7 @@ export const ExtendedCodeEditor = ({
placeholder,
onCursorChange,
onSelection,
+ codeEditorProps,
}: ExtendedCodeEditorProps) => {
const initialContent = React.useRef(multiline ? initialValue : initialValue.replace(/[\r\n]/g, " "));
const multilineExtensions = multiline
@@ -88,6 +110,7 @@ export const ExtendedCodeEditor = ({
multiline ? "codeeditor" : `singlelinecodeeditor ${BlueprintClassNames.INPUT}`
}`,
}}
+ {...codeEditorProps}
/>
);
};
diff --git a/src/components/AutocompleteField/AutoCompleteField.tsx b/src/components/AutocompleteField/AutoCompleteField.tsx
index 09bca492d..f51aca4d5 100644
--- a/src/components/AutocompleteField/AutoCompleteField.tsx
+++ b/src/components/AutocompleteField/AutoCompleteField.tsx
@@ -301,13 +301,15 @@ function AutoCompleteField(props: AutoCompleteFieldProps -1) {
- emptyStringResults.splice(itemIndexOf(emptyStringResults, selectedItem), 1);
- result = [selectedItem, ...emptyStringResults];
+ // Do not mutate original array
+ const withoutSelected = [...emptyStringResults]
+ withoutSelected.splice(itemIndexOf(emptyStringResults, selectedItem), 1);
+ result = [selectedItem, ...withoutSelected];
} else {
result = emptyStringResults;
}
diff --git a/src/components/Card/CardActions.tsx b/src/components/Card/CardActions.tsx
index 7b4be1aab..049881f43 100644
--- a/src/components/Card/CardActions.tsx
+++ b/src/components/Card/CardActions.tsx
@@ -8,6 +8,10 @@ export interface CardActionsProps extends React.HTMLAttributes {
* Mainly used for cards used as modals (dialogs).
*/
inverseDirection?: boolean;
+ /**
+ * Set footer to display its children on only one line.
+ */
+ noWrap?: boolean;
}
/**
@@ -18,6 +22,7 @@ export const CardActions = ({
children,
className = "",
inverseDirection = false,
+ noWrap = false,
...otherProps
}: CardActionsProps) => {
return (
@@ -26,6 +31,7 @@ export const CardActions = ({
className={
`${eccgui}-card__actions` +
(inverseDirection ? ` ${eccgui}-card__actions--inversedirection` : "") +
+ (noWrap ? ` ${eccgui}-card__actions--nowrap` : "") +
(className ? " " + className : "")
}
>
diff --git a/src/components/Card/CardContent.tsx b/src/components/Card/CardContent.tsx
index 98c59cb46..48f49283b 100644
--- a/src/components/Card/CardContent.tsx
+++ b/src/components/Card/CardContent.tsx
@@ -15,10 +15,16 @@ export interface CardContentProps extends React.HTMLAttributes {
* Holds the card content.
* Display scrollbars in case there is not enough space for it.
*/
-export const CardContent = ({ children, className = "", noFlexHeight, ...otherProps }: CardContentProps) => {
+export const CardContent = React.forwardRef(({
+ children,
+ className='',
+ noFlexHeight,
+ ...otherProps
+}: CardContentProps, ref) => {
return (
);
-};
-
-export default CardContent;
+});
diff --git a/src/components/Card/card.scss b/src/components/Card/card.scss
index 31594a6ee..ebfdcb563 100644
--- a/src/components/Card/card.scss
+++ b/src/components/Card/card.scss
@@ -236,6 +236,10 @@ $eccgui-size-card-spacing: $eccgui-size-typo-base !default;
flex-direction: row-reverse;
}
+.#{$eccgui}-card__actions--nowrap {
+ flex-wrap: nowrap;
+}
+
.#{$eccgui}-card__actions__aux {
display: flex;
flex-flow: row wrap;
@@ -272,4 +276,15 @@ $eccgui-size-card-spacing: $eccgui-size-typo-base !default;
.#{$eccgui}-card__actions--inversedirection > & {
justify-content: flex-start;
}
+
+ .#{$eccgui}-card__actions--nowrap > & {
+ flex-shrink: 5;
+ flex-wrap: nowrap;
+ min-width: 0;
+
+ & > * {
+ flex-shrink: 10;
+ min-width: 0;
+ }
+ }
}
diff --git a/src/components/CodeAutocompleteField/CodeAutocompleteField.stories.tsx b/src/components/CodeAutocompleteField/CodeAutocompleteField.stories.tsx
index bc4ff6134..2cb97db30 100644
--- a/src/components/CodeAutocompleteField/CodeAutocompleteField.stories.tsx
+++ b/src/components/CodeAutocompleteField/CodeAutocompleteField.stories.tsx
@@ -15,9 +15,10 @@ export default {
},
} as Meta;
+let forcedUpdateKey = 0; // @see https://github.com/storybookjs/storybook/issues/13375#issuecomment-1291011856
const Template: StoryFn = (args) => (
-
+
);
@@ -63,7 +64,7 @@ const defaultProps: CodeAutocompleteFieldProps = {
},
placeholder:
"The word before the cursor will be auto-completed. At the beginning or after a space, all results are shown.",
- onChange(): any {
+ onChange(): void {
// Do nothing
},
};
diff --git a/src/components/ContentGroup/ContentGroup.stories.tsx b/src/components/ContentGroup/ContentGroup.stories.tsx
new file mode 100644
index 000000000..bf524e9b8
--- /dev/null
+++ b/src/components/ContentGroup/ContentGroup.stories.tsx
@@ -0,0 +1,47 @@
+import React from "react";
+import { LoremIpsum } from "react-lorem-ipsum";
+import { Meta, StoryFn } from "@storybook/react";
+
+import { Badge, ContentGroup, HtmlContentBlock, IconButton, Tag } from "../../../index";
+
+export default {
+ title: "Components/ContentGroup",
+ component: ContentGroup,
+ argTypes: {
+ handlerToggleCollapse: {
+ action: "toggle collapse",
+ },
+ },
+} as Meta;
+
+const TemplateFull: StoryFn = (args) => ;
+
+export const BasicExample = TemplateFull.bind({});
+BasicExample.args = {
+ title: "Content group title",
+ contextInfo: ,
+ annotation: (
+
+ Context tag
+
+ ),
+ actionOptions: (
+ <>
+
+ >
+ ),
+ isCollapsed: false,
+ handlerToggleCollapse: () => {},
+ borderMainConnection: true,
+ borderSubConnection: ["red", "blue"],
+ level: 1,
+ minimumHeadlineLevel: 5,
+ whitespaceSize: "small",
+ description: "More context description by tooltip.",
+ hideGroupDivider: false,
+ children: (
+
+
+
+ ),
+};
diff --git a/src/components/ContentGroup/ContentGroup.tsx b/src/components/ContentGroup/ContentGroup.tsx
new file mode 100644
index 000000000..521e4092f
--- /dev/null
+++ b/src/components/ContentGroup/ContentGroup.tsx
@@ -0,0 +1,256 @@
+import React from "react";
+import classNames from "classnames";
+import Color from "color";
+
+import { TestableComponent } from "../../components/interfaces";
+import { CLASSPREFIX as eccgui } from "../../configuration/constants";
+import {
+ Divider,
+ Icon,
+ IconButton,
+ OverflowText,
+ Section,
+ SectionHeader,
+ Spacing,
+ StickyTarget,
+ StickyTargetProps,
+ Toolbar,
+ ToolbarSection,
+ Tooltip,
+} from "../index";
+
+export interface ContentGroupProps extends Omit, "title">, TestableComponent {
+ /**
+ * Title of the content group.
+ */
+ title?: string;
+ /**
+ * Level of the content group.
+ */
+ level?: number;
+ /**
+ * Context information to display in the header.
+ */
+ contextInfo?: React.ReactElement | React.ReactElement[];
+ /**
+ * Annotation to display in the content.
+ */
+ annotation?: React.ReactElement | React.ReactElement[];
+ /**
+ * Action options to display in the header.
+ */
+ actionOptions?: React.ReactElement | React.ReactElement[];
+ /**
+ * Flag to collapse the content group.
+ */
+ isCollapsed?: boolean;
+ /**
+ * Text to display when the callapse button is hovered.
+ * If not set then it uses "Show more" or "Show less".
+ */
+ textToggleCollapse?: string;
+ /**
+ * Event handler to toggle the collapse state.
+ */
+ handlerToggleCollapse?: () => void;
+ /**
+ * Use a border on the left side to visually connect the whole content content group.
+ */
+ borderMainConnection?: boolean;
+ /**
+ * Use a border on the left side to visually emphase the content group.
+ * If it is set to an array of color codes then the border is multi colored.
+ */
+ borderSubConnection?: boolean | string[];
+ /**
+ * Whitespace size between header and the content.
+ */
+ whitespaceSize?: "tiny" | "small" | "medium" | "large" | "xlarge";
+ /**
+ * Title minimum headline level.
+ */
+ minimumHeadlineLevel?: 1 | 2 | 3 | 4 | 5 | 6;
+ /**
+ * Props to pass to `StickyTarget`.
+ */
+ stickyHeaderProps?: Omit;
+ /**
+ * Description of the content group.
+ * Added as tooltip to an info icon placed in the content group header.
+ */
+ description?: string;
+ /**
+ * Flag to hide the group divider.
+ */
+ hideGroupDivider?: boolean;
+ /**
+ * Additional props to pass to the content container.
+ */
+ contentProps?: Omit, "children">;
+}
+
+/**
+ * Manage display of a grouped content section.
+ * Add info, actions and context annotations by using its properties.
+ * Can be nested into each other.
+ */
+export const ContentGroup = ({
+ children,
+ className = "",
+ title,
+ contextInfo,
+ annotation,
+ actionOptions,
+ isCollapsed = false,
+ textToggleCollapse,
+ handlerToggleCollapse,
+ borderMainConnection = false,
+ borderSubConnection = false,
+ level = 1,
+ minimumHeadlineLevel = 3,
+ whitespaceSize = "small",
+ style,
+ stickyHeaderProps,
+ description,
+ hideGroupDivider,
+ contentProps,
+ ...otherContentWrapperProps
+}: ContentGroupProps) => {
+ const displayHeader = title || handlerToggleCollapse;
+
+ let borderGradient: string[] | undefined = undefined;
+ if (typeof borderSubConnection === "object") {
+ const borderColors: string[] = Array.isArray(borderSubConnection) ? borderSubConnection : [borderSubConnection];
+ borderGradient = borderColors.reduce((acc: string[], borderColor: string, index: number): string[] => {
+ try {
+ const color = Color(borderColor);
+
+ acc.push(
+ `${color.rgb().toString()} ` +
+ `${(index / borderColors.length) * 100}% ` +
+ `${((index + 1) / borderColors.length) * 100}%`
+ );
+ } catch {
+ // eslint-disable-next-line no-console
+ console.warn("Received invalid background color for tag: " + borderColor);
+ }
+ return acc;
+ }, []);
+ }
+
+ const contextInfoElements = Array.isArray(contextInfo) ? contextInfo : [contextInfo];
+ const { className: contentClassName, ...otherContentProps } = contentProps ?? {};
+
+ const headerContent = displayHeader ? (
+ <>
+
+
+ {handlerToggleCollapse && (
+
+
+
+
+ )}
+ {title && (
+
+ {React.createElement(
+ "h" +
+ Math.min(
+ Math.max(minimumHeadlineLevel, level + minimumHeadlineLevel),
+ 6
+ ).toString(),
+ {
+ children: {title} ,
+ className: `${eccgui}-contentgroup__header__title`,
+ }
+ )}
+ {description && (
+ <>
+
+
+
+
+ >
+ )}
+
+ )}
+ {contextInfoElements &&
+ contextInfoElements[0]?.props &&
+ Object.values(contextInfoElements[0].props).every((v) => v !== undefined) && (
+
+
+
+ {contextInfoElements}
+
+
+ )}
+ {!isCollapsed && handlerToggleCollapse && actionOptions && (
+
+
+ {actionOptions}
+
+ )}
+
+
+ {(!isCollapsed || !handlerToggleCollapse) && (
+ <>
+ {!hideGroupDivider && }
+
+ >
+ )}
+ >
+ ) : (
+ <>>
+ );
+
+ return (
+
+ {headerContent && stickyHeaderProps ? (
+ {headerContent}
+ ) : (
+ headerContent
+ )}
+ {(!isCollapsed || !handlerToggleCollapse) && (
+ <>
+
+
+ {children}
+
+ {contextInfo && !displayHeader && (
+ {contextInfoElements}
+ )}
+ {annotation && {annotation}}
+ {actionOptions && !displayHeader && (
+ {actionOptions}
+ )}
+
+ >
+ )}
+
+ );
+};
diff --git a/src/components/ContentGroup/_contentgroup.scss b/src/components/ContentGroup/_contentgroup.scss
new file mode 100644
index 000000000..8f29176d4
--- /dev/null
+++ b/src/components/ContentGroup/_contentgroup.scss
@@ -0,0 +1,56 @@
+$eccgui-color-scontentgroup-border-main: rgba($eccgui-color-workspace-text, $eccgui-opacity-muted) !default;
+$eccgui-color-scontentgroup-border-sub: rgba($eccgui-color-workspace-text, $eccgui-opacity-disabled) !default;
+
+.#{$eccgui}-contentgroup {
+ --#{$eccgui}-color-contentgroup-border-main: #{$eccgui-color-scontentgroup-border-main};
+ --#{$eccgui}-color-contentgroup-border-sub: #{$eccgui-color-scontentgroup-border-sub};
+}
+
+.#{$eccgui}-contentgroup--border-main {
+ border-left: 0.25 * $eccgui-size-block-whitespace solid
+ var(--#{$eccgui}-color-contentgroup-border-main, #{$eccgui-color-scontentgroup-border-main});
+
+ &.#{$eccgui}-contentgroup--padding-small {
+ padding-left: 0.5 * $eccgui-size-block-whitespace;
+ }
+}
+
+.#{$eccgui}-contentgroup--border-sub {
+ position: relative;
+ border-right: 0.25 * $eccgui-size-block-whitespace solid transparent;
+
+ &::after {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 100%;
+ width: 0.25 * $eccgui-size-block-whitespace;
+ content: " ";
+ background-color: var(--#{$eccgui}-color-contentgroup-border-sub, #{$eccgui-color-scontentgroup-border-sub});
+ background-image: linear-gradient(to bottom, var(--#{$eccgui}-color-contentgroup-border-sub));
+ }
+
+ &.#{$eccgui}-contentgroup--padding-small {
+ padding-right: 0.5 * $eccgui-size-block-whitespace;
+ }
+}
+
+.#{$eccgui}-contentgroup--padding-small {
+ + .#{$eccgui}-contentgroup {
+ margin-top: 0.5 * $eccgui-size-block-whitespace;
+ }
+
+ > .#{$eccgui}-contentgroup__content {
+ column-gap: 0.5 * $eccgui-size-block-whitespace;
+ }
+}
+
+.#{$eccgui}-contentgroup__content {
+ display: flex;
+}
+
+.#{$eccgui}-contentgroup__content__body {
+ flex-grow: 1;
+ flex-shrink: 1;
+ width: 100%;
+}
diff --git a/src/components/ContextOverlay/ContextOverlay.stories.tsx b/src/components/ContextOverlay/ContextOverlay.stories.tsx
index 9f9130113..6cbb85912 100644
--- a/src/components/ContextOverlay/ContextOverlay.stories.tsx
+++ b/src/components/ContextOverlay/ContextOverlay.stories.tsx
@@ -4,31 +4,40 @@ import { PopoverInteractionKind, PopperModifierOverrides } from "@blueprintjs/co
import { PopperPlacements } from "@blueprintjs/core";
import { OverlaysProvider } from "@blueprintjs/core";
import { Meta, StoryFn } from "@storybook/react";
+import { fn } from "@storybook/test";
import { Button, ContextOverlay, HtmlContentBlock } from "../../index";
+const interactionKindOptions = { UNDEFINED: undefined, ...PopoverInteractionKind };
+const rootBoundaryOptions = { UNDEFINED: undefined, VIEWPORT: "viewport", DOCUMENT: "document" };
+const positioningStrategyOptions = { UNDEFINED: undefined, ABSOLUTE: "absolute", FIXED: "fixed" };
+
export default {
title: "Components/ContextOverlay",
component: ContextOverlay,
argTypes: {
interactionKind: {
- options: { UNDEFINED: undefined, ...PopoverInteractionKind },
+ options: Object.keys(interactionKindOptions),
+ mapping: interactionKindOptions,
},
placement: {
options: PopperPlacements,
},
rootBoundary: {
- options: { UNDEFINED: undefined, VIEWPORT: "viewport", DOCUMENT: "document" },
+ options: Object.keys(rootBoundaryOptions),
+ mapping: rootBoundaryOptions,
},
positioningStrategy: {
- options: { UNDEFINED: undefined, ABSOLUTE: "absolute", FIXED: "fixed" },
+ options: Object.keys(positioningStrategyOptions),
+ mapping: positioningStrategyOptions,
},
},
} as Meta;
+let forcedUpdateKey = 0;
const Template: StoryFn = (args) => (
-
+
);
@@ -55,4 +64,6 @@ Default.args = {
} as PopperModifierOverrides,
rootBoundary: "viewport",
hasBackdrop: false,
+ onOpening: fn(),
+ onInteraction: fn(),
};
diff --git a/src/components/Depiction/depiction.scss b/src/components/Depiction/depiction.scss
index f0221c4fc..44d6cda8b 100644
--- a/src/components/Depiction/depiction.scss
+++ b/src/components/Depiction/depiction.scss
@@ -72,6 +72,13 @@ $eccgui-size-depiction-border-radius: $pt-border-radius !default;
.#{$eccgui}-overviewitem__list--highdensity > li > .#{$eccgui}-overviewitem__item & {
height: $button-height;
}
+ .#{$eccgui}-overviewitem__item--highdensity.#{$eccgui}-overviewitem__item--hasspacing > .#{$eccgui}-depiction &,
+ .#{$eccgui}-overviewitem__list--highdensity
+ > li
+ > .#{$eccgui}-overviewitem__item.#{$eccgui}-overviewitem__item--hasspacing
+ & {
+ height: calc(#{$button-height} - #{$eccgui-size-typo-base * 0.5});
+ }
}
.#{$eccgui}-depiction__image--disabled {
diff --git a/src/components/Dialog/SimpleDialog.tsx b/src/components/Dialog/SimpleDialog.tsx
index f9a8e4e44..f750b8c22 100644
--- a/src/components/Dialog/SimpleDialog.tsx
+++ b/src/components/Dialog/SimpleDialog.tsx
@@ -5,7 +5,7 @@ import { CLASSPREFIX as eccgui } from "../../configuration/constants";
import IconButton from "../Icon/IconButton";
import { TestableComponent } from "../interfaces";
-import { Card, CardActions, CardContent, CardHeader, CardOptions, CardTitle } from "./../Card";
+import { Card, CardActions, CardActionsProps, CardContent, CardHeader, CardOptions, CardTitle } from "./../Card";
import Divider from "./../Separation/Divider";
import Modal, { ModalProps } from "./Modal";
@@ -45,6 +45,8 @@ export interface SimpleDialogProps extends ModalProps, TestableComponent {
showFullScreenToggler?: boolean;
/** Starts the modal in full screen mode. The show full screen toggler will be automatically enabled. */
startInFullScreenMode?: boolean;
+ /** Forward properties to the actions footer component. */
+ actionsProps?: Omit;
}
/**
@@ -66,6 +68,7 @@ export const SimpleDialog = ({
showFullScreenToggler = false,
startInFullScreenMode = false,
size,
+ actionsProps,
...otherProps
}: SimpleDialogProps) => {
const [displayFullscreen, setDisplayFullscreen] = React.useState(startInFullScreenMode);
@@ -112,7 +115,11 @@ export const SimpleDialog = ({
{notifications}
)}
{actions && (
-
+
{actions}
)}
diff --git a/src/components/Dialog/stories/AlertDialog.stories.tsx b/src/components/Dialog/stories/AlertDialog.stories.tsx
index 2901fd98a..b97e6818d 100644
--- a/src/components/Dialog/stories/AlertDialog.stories.tsx
+++ b/src/components/Dialog/stories/AlertDialog.stories.tsx
@@ -1,14 +1,16 @@
import React from "react";
import { OverlaysProvider } from "@blueprintjs/core";
import { Meta, StoryFn } from "@storybook/react";
+import { fn } from "@storybook/test";
import { AlertDialog } from "./../../../../index";
-import { Default as SimpleDialogExample } from "./SimpleDialog.stories";
+import simpleDialogStory, { Default as SimpleDialogExample } from "./SimpleDialog.stories";
export default {
title: "Components/Dialog/AlertDialog",
component: AlertDialog,
argTypes: {
+ ...simpleDialogStory.argTypes,
headerOptions: { table: { disable: true } },
children: { table: { disable: true } },
actions: { table: { disable: true } },
@@ -42,4 +44,6 @@ Default.args = {
success: false,
warning: true,
danger: false,
+ onOpening: fn(),
+ onClosing: fn(),
};
diff --git a/src/components/Dialog/stories/Modal.stories.tsx b/src/components/Dialog/stories/Modal.stories.tsx
index 93bd7283f..2b5452a5d 100644
--- a/src/components/Dialog/stories/Modal.stories.tsx
+++ b/src/components/Dialog/stories/Modal.stories.tsx
@@ -1,6 +1,7 @@
import React from "react";
import { OverlaysProvider } from "@blueprintjs/core";
import { Meta, StoryFn } from "@storybook/react";
+import { fn } from "@storybook/test";
import { SimpleCard } from "../../Card/stories/Card.stories";
@@ -11,8 +12,7 @@ export default {
component: Modal,
argTypes: {
children: {
- control: "none",
- description: "Elements to include into the modal container.",
+ control: false,
},
},
} as Meta;
@@ -30,4 +30,6 @@ Default.args = {
isOpen: true,
usePortal: false,
children: ,
+ onOpening: fn(),
+ onClosing: fn(),
};
diff --git a/src/components/Dialog/stories/SimpleDialog.stories.tsx b/src/components/Dialog/stories/SimpleDialog.stories.tsx
index 53a9b19c4..c1b39f56a 100644
--- a/src/components/Dialog/stories/SimpleDialog.stories.tsx
+++ b/src/components/Dialog/stories/SimpleDialog.stories.tsx
@@ -1,6 +1,7 @@
import React from "react";
import { OverlaysProvider } from "@blueprintjs/core";
import { Meta, StoryFn } from "@storybook/react";
+import { fn } from "@storybook/test";
import { SimpleDialog } from "./../../../../index";
import { Default as CardActionsExample } from "./../../Card/stories/CardActions.stories";
@@ -14,10 +15,10 @@ export default {
argTypes: {
...storyModal.argTypes,
headerOptions: {
- control: "none",
+ control: false,
},
actions: {
- control: "none",
+ control: false,
},
},
} as Meta;
@@ -39,4 +40,6 @@ Default.args = {
hasBorder: true,
isOpen: true,
usePortal: false,
+ onOpening: fn(),
+ onClosing: fn(),
};
diff --git a/src/components/Icon/canonicalIconNames.tsx b/src/components/Icon/canonicalIconNames.tsx
index 88220ab88..8ddc857c8 100644
--- a/src/components/Icon/canonicalIconNames.tsx
+++ b/src/components/Icon/canonicalIconNames.tsx
@@ -19,6 +19,9 @@ const canonicalIcons = {
"artefact-commit": icons.Commit,
"artefact-task-deleteprojectfiles": icons.TrashCan,
"artefact-task-downloadfile": icons.CloudDownload,
+ "artefact-task-pivot": icons.Transpose,
+ "artefact-task-unpivot": icons.Transpose,
+ "artefact-task-concatenatetofile": icons.DocumentExport,
"artefact-dataset-csv": icons.Csv,
"artefact-dataset-eccencadataplatform": icons.DataVis_1,
"artefact-dataset-excel": icons.Xls,
@@ -65,6 +68,7 @@ const canonicalIcons = {
"item-download": icons.Download,
"item-draggable": icons.Draggable,
"item-edit": icons.Edit,
+ "item-magic-edit": icons.MagicWand,
"item-evaluation": icons.Analytics,
"item-execution": icons.Run,
"item-info": icons.Information,
@@ -84,6 +88,7 @@ const canonicalIcons = {
"item-vertmenu": icons.OverflowMenuHorizontal,
"item-viewdetails": icons.View,
"item-hidedetails": icons.ViewOff,
+ "item-image": icons.Image,
"list-sortasc": icons.ArrowDown,
"list-sortdesc": icons.ArrowUp,
@@ -125,6 +130,13 @@ const canonicalIcons = {
"operation-filterremove": icons.FilterRemove,
"operation-filter": icons.Filter,
"operation-format-codeblock": icons.CodeBlock,
+ "operation-format-text-code": icons.Code,
+ "operation-format-text-bold": icons.TextBold,
+ "operation-format-text-italic": icons.TextItalic,
+ "operation-format-text-strikethrough": icons.TextStrikethrough,
+ "operation-format-list-bullet": icons.ListBulleted,
+ "operation-format-list-checked": icons.ListChecked,
+ "operation-format-list-numbered": icons.ListNumbered,
"operation-fix": icons.Tools,
"operation-link": icons.Link,
"operation-logout": icons.Logout,
diff --git a/src/components/Label/Label.stories.tsx b/src/components/Label/Label.stories.tsx
index 2c1eeba1b..c6a30f206 100644
--- a/src/components/Label/Label.stories.tsx
+++ b/src/components/Label/Label.stories.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { loremIpsum } from "react-lorem-ipsum";
import { Meta, StoryFn } from "@storybook/react";
-import { Label } from "../../index";
+import { Icon, Label } from "../../index";
export default {
title: "Forms/Label",
@@ -19,4 +19,5 @@ Default.args = {
tooltip: loremIpsum({ p: 1, avgSentencesPerParagraph: 2, startWithLoremIpsum: false, random: false }).toString(),
disabled: false,
htmlFor: "inputid",
+ additionalElements: ,
};
diff --git a/src/components/Label/Label.tsx b/src/components/Label/Label.tsx
index 880678c34..bef756225 100644
--- a/src/components/Label/Label.tsx
+++ b/src/components/Label/Label.tsx
@@ -2,6 +2,7 @@ import React from "react";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
import Icon from "../Icon/Icon";
+import Spacing from "../Separation/Spacing";
import Tooltip, { TooltipProps } from "../Tooltip/Tooltip";
export interface LabelProps extends React.LabelHTMLAttributes {
@@ -34,6 +35,12 @@ export interface LabelProps extends React.LabelHTMLAttributes
* visual appearance of the label
*/
emphasis?: "strong" | "normal";
+ /**
+ * Add other elements to the end of the label content
+ */
+ additionalElements?: React.ReactNode | React.ReactNode[];
+ /** Force label to get displayed as inline block element. */
+ inline?: boolean;
}
export const Label = ({
@@ -46,6 +53,8 @@ export const Label = ({
tooltipProps,
isLayoutForElement = "label",
emphasis = "normal",
+ additionalElements,
+ inline,
...otherLabelProps
}: LabelProps) => {
let htmlElementstring = isLayoutForElement;
@@ -63,16 +72,23 @@ export const Label = ({
)}
{children && {children}}
+ {additionalElements && (
+ <>
+
+ {additionalElements}
+ >
+ )}
>
);
- return !!text || !!info || !!tooltip || !!children ? (
+ return !!text || !!info || !!tooltip || !!children || !!additionalElements ? (
React.createElement(
htmlElementstring,
{
className:
`${eccgui}-label ${eccgui}-label--${emphasis}` +
(className ? " " + className : "") +
+ (inline ? ` ${eccgui}-label--inline` : "") +
(disabled ? ` ${eccgui}-label--disabled` : ""),
...otherLabelProps,
},
diff --git a/src/components/Label/label.scss b/src/components/Label/label.scss
index 2c3d52495..6b1983845 100644
--- a/src/components/Label/label.scss
+++ b/src/components/Label/label.scss
@@ -8,7 +8,6 @@ $eccgui-color-label-info: rgba($eccgui-color-workspace-text, $eccgui-opacity-mut
font-size: $eccgui-size-typo-label;
line-height: $eccgui-size-typo-label-lineheight;
color: $eccgui-color-label-text;
- vertical-align: middle;
.#{$eccgui}-typography__overflowtext--passdown > & {
display: flex;
@@ -17,6 +16,11 @@ $eccgui-color-label-info: rgba($eccgui-color-workspace-text, $eccgui-opacity-mut
}
}
+.#{$eccgui}-label--inline {
+ display: inline-block;
+ vertical-align: middle;
+}
+
.#{$eccgui}-label--disabled {
opacity: $eccgui-opacity-disabled;
}
diff --git a/src/components/Menu/MenuItem.tsx b/src/components/Menu/MenuItem.tsx
index 6d0f2c322..466911bdc 100644
--- a/src/components/Menu/MenuItem.tsx
+++ b/src/components/Menu/MenuItem.tsx
@@ -5,6 +5,7 @@ import { openInNewTab } from "../../common/utils/openInNewTab";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
import { ValidIconName } from "../Icon/canonicalIconNames";
import Icon from "../Icon/Icon";
+import Tooltip from "../Tooltip/Tooltip";
import { TestIconProps } from "./../Icon/TestIcon";
@@ -15,16 +16,41 @@ export interface MenuItemProps
* If set the icon is diplayed on the left side of the menu item.
*/
icon?: ValidIconName | string[] | React.ReactElement;
+ /**
+ * Submenu.
+ */
children?: React.ReactNode;
+ /**
+ * Tooltip, but only added to the label, not to the full menu item.
+ */
+ tooltip?: string | JSX.Element;
}
/**
* Single item, used as child inside `Menu`.
*/
-export const MenuItem = ({ children, className = "", icon, onClick, href, ...restProps }: MenuItemProps) => {
+export const MenuItem = ({
+ children,
+ className = "",
+ icon,
+ onClick,
+ href,
+ text,
+ tooltip,
+ ...restProps
+}: MenuItemProps) => {
return (
+ {text}
+
+ ) : (
+ text
+ )
+ }
href={href}
onClick={(e: React.MouseEvent) =>
openInNewTab(e as React.MouseEvent, onClick, href)
diff --git a/src/components/Menu/menu.scss b/src/components/Menu/menu.scss
index dff9f4961..431bc386e 100644
--- a/src/components/Menu/menu.scss
+++ b/src/components/Menu/menu.scss
@@ -48,6 +48,7 @@ $menu-background-color: transparent !default;
@import "~@blueprintjs/core/src/components/menu/menu";
.#{$ns}-menu {
+ min-width: auto;
padding: 0;
.#{$ns}-popover2-content > & {
diff --git a/src/components/OverviewItem/OverviewItem.tsx b/src/components/OverviewItem/OverviewItem.tsx
index d0ab2ac35..d5ee15017 100644
--- a/src/components/OverviewItem/OverviewItem.tsx
+++ b/src/components/OverviewItem/OverviewItem.tsx
@@ -1,6 +1,7 @@
import React from "react";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
+import Card, { CardProps } from "../Card/Card";
export interface OverviewItemProps extends React.HTMLAttributes {
/**
@@ -11,6 +12,17 @@ export interface OverviewItemProps extends React.HTMLAttributes
* Add a bit white space around the element.
*/
hasSpacing?: boolean;
+ /**
+ * Uses a `Card` element to wrap the `OverviewItem` inside.
+ * It is always used with `isOnlyLayout` set to `true`.
+ * Should be used together with `hasSpacing`.
+ */
+ hasCardWrapper?: boolean;
+ /**
+ * Forwarding basic `Card` properties to the wrapper element.
+ * Only used if `hasCardWrapper` is set to `true`.
+ */
+ cardProps?: Omit;
}
/**
@@ -22,6 +34,8 @@ export const OverviewItem = ({
className = "",
densityHigh = false,
hasSpacing = false,
+ hasCardWrapper = false,
+ cardProps,
...otherProps
}: OverviewItemProps) => {
const item = (
@@ -38,6 +52,7 @@ export const OverviewItem = ({
);
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
const accessibilityParameters: { [key: string]: any } = Object.create(null);
if (typeof otherProps.onClick !== "undefined" || typeof otherProps.onKeyDown !== "undefined") {
accessibilityParameters["tabIndex"] = 0;
@@ -46,7 +61,15 @@ export const OverviewItem = ({
accessibilityParameters["role"] = "button";
}
- return React.cloneElement(item, accessibilityParameters);
+ const element = React.cloneElement(item, accessibilityParameters);
+
+ return hasCardWrapper ? (
+
+ {element}
+
+ ) : (
+ element
+ );
};
export default OverviewItem;
diff --git a/src/components/OverviewItem/OverviewItemList.tsx b/src/components/OverviewItem/OverviewItemList.tsx
index 917ec0f27..212d75e91 100644
--- a/src/components/OverviewItem/OverviewItemList.tsx
+++ b/src/components/OverviewItem/OverviewItemList.tsx
@@ -5,6 +5,7 @@ import { CLASSPREFIX as eccgui } from "../../configuration/constants";
export interface OverviewItemListProps extends React.HTMLAttributes {
/**
* Displays the element using reduced height and less white space inside.
+ * @deprecated (v25) use property directly on `OverviewItem` children.
*/
densityHigh?: boolean;
/**
@@ -23,8 +24,8 @@ export interface OverviewItemListProps extends React.HTMLAttributes ,
,
],
+ densityHigh: false,
+ hasSpacing: false,
+ hasCardWrapper: false,
};
export const ItemWithDepictionElement = Template.bind({});
@@ -69,16 +72,7 @@ ItemWithDepictionElement.args = {
,
,
],
-};
-
-const TemplateCard: StoryFn = (args) => (
-
-
-
-);
-
-export const ItemInCard = TemplateCard.bind({});
-ItemInCard.args = {
- ...ItemExample.args,
+ densityHigh: false,
hasSpacing: true,
+ hasCardWrapper: true,
};
diff --git a/src/components/Select/Select.stories.tsx b/src/components/Select/Select.stories.tsx
index acdde66c4..e6607a1e5 100644
--- a/src/components/Select/Select.stories.tsx
+++ b/src/components/Select/Select.stories.tsx
@@ -1,6 +1,7 @@
import React from "react";
import { loremIpsum } from "react-lorem-ipsum";
import { Meta, StoryFn } from "@storybook/react";
+import { fn } from "@storybook/test";
import { helpersArgTypes } from "../../../.storybook/helpers";
import { Button, Depiction, MenuItem, Select } from "../../index";
@@ -30,7 +31,7 @@ Default.args = {
return { label: item };
}),
itemRenderer: (item, props) => {
- return ;
+ return ;
},
fill: true,
};
@@ -53,6 +54,7 @@ ControlledTarget.args = {
...Default.args,
fill: false,
children: ,
+ onActiveItemChange: fn(),
};
/**
@@ -70,4 +72,5 @@ ClearanceOption.args = {
onClearanceHandler: () => {
alert("Reset now.");
},
+ onActiveItemChange: fn(),
};
diff --git a/src/components/Switch/Switch.tsx b/src/components/Switch/Switch.tsx
index 485d5512b..27e5cb026 100644
--- a/src/components/Switch/Switch.tsx
+++ b/src/components/Switch/Switch.tsx
@@ -1,26 +1,45 @@
-import React, { memo, SyntheticEvent } from "react";
-import { Switch as BlueprintSwitch, SwitchProps as BlueprintSwitchProps } from "@blueprintjs/core";
+import React, { memo } from "react";
+import {
+ Classes as BlueprintClasses,
+ Switch as BlueprintSwitch,
+ SwitchProps as BlueprintSwitchProps,
+} from "@blueprintjs/core";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
+import { Label } from "../Label/Label";
export interface SwitchProps extends Omit {
/**
* Event handler for changed state.
*/
- onChange?: (value: boolean) => any;
+ onChange?: (value: boolean) => void;
/**
* class names
*/
className?: string;
}
-export const Switch = ({ onChange, className, ...otherProps }: SwitchProps) => {
- const handleChange = (e: SyntheticEvent) => {
- const checked = !!(e as any).target?.checked;
- onChange && onChange(checked);
+export const Switch = ({ onChange, className, label, ...otherProps }: SwitchProps) => {
+ const handleChange = (e: React.ChangeEvent) => {
+ if (onChange) {
+ onChange(!!e.target?.checked);
+ }
};
- return ;
+ return (
+
+ ) : undefined
+ }
+ {...otherProps}
+ onChange={handleChange}
+ />
+ );
};
export default memo(Switch);
diff --git a/src/components/Tag/TagList.tsx b/src/components/Tag/TagList.tsx
index 64668e7dd..6aed6706c 100644
--- a/src/components/Tag/TagList.tsx
+++ b/src/components/Tag/TagList.tsx
@@ -10,11 +10,11 @@ function TagList({ children, className = "", label = "", ...otherProps }: TagLis
const tagList = (
{React.Children.map(children, (child, i) => {
- return (
+ return child ? (
-
{child}
- );
+ ) : null;
})}
);
diff --git a/src/components/TextField/SearchField.tsx b/src/components/TextField/SearchField.tsx
index 3c67355d0..5343617eb 100644
--- a/src/components/TextField/SearchField.tsx
+++ b/src/components/TextField/SearchField.tsx
@@ -35,10 +35,38 @@ export const SearchField = ({
className = "",
emptySearchInputMessage = "Enter search term",
onClearanceHandler,
- onClearanceText = "Clear input",
+ onClearanceText = "Clear current search term",
+ onChange,
leftIcon = ,
+ rightElement,
...otherProps
}: SearchFieldProps) => {
+ const [value, setValue] = React.useState("");
+
+ const clearanceButton =
+ onClearanceHandler && value ? (
+ {
+ setValue("");
+ onClearanceHandler();
+ }}
+ />
+ ) : undefined;
+
+ const changeHandlerProcess = (e: React.ChangeEvent) => {
+ setValue(e.target.value);
+ if (onChange) {
+ onChange(e);
+ }
+ };
+
+ React.useEffect(() => {
+ setValue(otherProps.value ?? otherProps.defaultValue ?? "");
+ }, [otherProps.value, otherProps.defaultValue]);
+
return (
- ) : undefined
+ (clearanceButton || rightElement) && (
+ <>
+ {rightElement}
+ {clearanceButton}
+ >
+ )
}
+ onChange={changeHandlerProcess}
{...otherProps}
+ value={value}
type={"search"}
leftIcon={leftIcon}
round={true}
diff --git a/src/components/TextField/stories/SearchField.stories.tsx b/src/components/TextField/stories/SearchField.stories.tsx
index 05f58ba78..7f25c166f 100644
--- a/src/components/TextField/stories/SearchField.stories.tsx
+++ b/src/components/TextField/stories/SearchField.stories.tsx
@@ -1,12 +1,20 @@
import React from "react";
import { Meta, StoryFn } from "@storybook/react";
+import { helpersArgTypes } from "../../../../.storybook/helpers";
+
import SearchField from "./../SearchField";
export default {
title: "Components/SearchField",
component: SearchField,
argTypes: {
+ leftIcon: {
+ ...helpersArgTypes.exampleIcon,
+ },
+ rightElement: {
+ ...helpersArgTypes.exampleIcon,
+ },
hasStatePrimary: { table: { disable: true } },
hasStateSuccess: { table: { disable: true } },
hasStateWarning: { table: { disable: true } },
@@ -23,7 +31,7 @@ Default.args = {
onClearanceText: "",
};
-export const SearchFieldWithClearanceIcon: StoryFn = (args) => {
+const SearchFieldWithClearanceIconTemplate: StoryFn = (args) => {
const [query, setQuery] = React.useState("");
return (
= (args)
/>
);
};
+
+export const SearchFieldWithClearanceIcon = SearchFieldWithClearanceIconTemplate.bind({});
+SearchFieldWithClearanceIcon.args = {
+ onClearanceHandler: null,
+ onClearanceText: "Clear field",
+};
diff --git a/src/components/TextField/stories/TextField.stories.tsx b/src/components/TextField/stories/TextField.stories.tsx
index 2f57b61a7..8a2907adb 100644
--- a/src/components/TextField/stories/TextField.stories.tsx
+++ b/src/components/TextField/stories/TextField.stories.tsx
@@ -31,6 +31,7 @@ Default.args = {
fullWidth: false,
placeholder: "placeholder text",
readOnly: false,
+ disabled: false,
};
/** Text field with default value that contains a zero width/invisible character.
@@ -46,7 +47,7 @@ const invisibleCharacterWarningProps: TextFieldProps = {
const codePointsString = [...Array.from(codePoints)]
.map((n) => {
const info = characters.invisibleZeroWidthCharacters.codePointMap.get(n);
- return info.fullLabel;
+ return info?.fullLabel;
})
.join(", ");
alert("Invisible character detected in input string. Code points: " + codePointsString);
diff --git a/src/components/TextField/textfield.scss b/src/components/TextField/textfield.scss
index 07812c6ca..633ab7e06 100644
--- a/src/components/TextField/textfield.scss
+++ b/src/components/TextField/textfield.scss
@@ -4,7 +4,8 @@
// own vars
$eccgui-size-textfield-height-small: $eccgui-size-block-whitespace * 2 !default;
$eccgui-size-textfield-height-regular: $eccgui-size-textfield-height-small * $eccgui-size-type-levelratio !default;
-$eccgui-size-textfield-height-large: $eccgui-size-textfield-height-regular * $eccgui-size-type-levelratio * $eccgui-size-type-levelratio !default;
+$eccgui-size-textfield-height-large: $eccgui-size-textfield-height-regular * $eccgui-size-type-levelratio *
+ $eccgui-size-type-levelratio !default;
$eccgui-size-textfield-padding-horizontal-regular: $eccgui-size-inline-whitespace !default;
$eccgui-size-textfield-padding-horizontal-small: $eccgui-size-inline-whitespace * 0.5 !default;
$eccgui-typo-textfield-fontweight: $eccgui-font-weight-regular !default;
@@ -50,10 +51,23 @@ $input-button-height-small: math.div($eccgui-size-textfield-height-small, $eccgu
height: 100%;
max-height: $input-button-height-large;
- & > .#{eccgui}-icon {
+ & > * {
+ vertical-align: middle;
+ }
+
+ & > .#{eccgui}-icon,
+ & > .#{eccgui}-tooltip__wrapper {
display: inline-flex;
+ align-items: center;
height: 100%;
- margin: 0 0.5 * $eccgui-size-block-whitespace;
+
+ &:first-child {
+ margin-left: 0.5 * $eccgui-size-block-whitespace;
+ }
+
+ &:last-child {
+ margin-right: 0.5 * $eccgui-size-block-whitespace;
+ }
}
}
}
diff --git a/src/components/Typography/OverflowText.tsx b/src/components/Typography/OverflowText.tsx
index eeb02d22e..6a707edbc 100644
--- a/src/components/Typography/OverflowText.tsx
+++ b/src/components/Typography/OverflowText.tsx
@@ -1,13 +1,34 @@
import React from "react";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
+import { TestableComponent } from "../../components/interfaces";
-export interface OverflowTextProps {
- ellipsis?: "reverse" | "none";
+export interface OverflowTextProps extends React.HTMLAttributes, TestableComponent {
+ /**
+ * How is ellipsis used to cut text overflows.
+ * Use `reverse`to use the ellipis on text start and display the end of the text.
+ */
+ ellipsis?: "add" | "reverse" | "none";
+ /**
+ * Display component as inline element.
+ */
inline?: boolean;
+ /**
+ * Using text overflow on all children elements.
+ */
passDown?: boolean;
+ /**
+ * Additional CSS class name.
+ */
className?: string;
+ /**
+ * HTML element that is used for the component.
+ */
useHtmlElement?: "p" | "div" | "span";
+ /**
+ * Used for all other necessary properties.
+ * @deprecated (v25) we will allow only basic HTML element properties and testing IDs
+ */
[key: string]: any;
}
@@ -15,7 +36,7 @@ export interface OverflowTextProps {
export const OverflowText = ({
className = "",
children,
- ellipsis,
+ ellipsis = "add",
inline = false,
passDown = false,
useHtmlElement,
diff --git a/src/components/Typography/stories/OverflowText.stories.tsx b/src/components/Typography/stories/OverflowText.stories.tsx
new file mode 100644
index 000000000..12c68be11
--- /dev/null
+++ b/src/components/Typography/stories/OverflowText.stories.tsx
@@ -0,0 +1,33 @@
+import React from "react";
+import LoremIpsum, { loremIpsum } from "react-lorem-ipsum";
+import { Meta, StoryFn } from "@storybook/react";
+
+import { OverflowText } from "../../../index";
+
+const config = {
+ title: "Components/Typography/OverflowText",
+ component: OverflowText,
+ argTypes: {
+ children: {
+ control: "select",
+ options: ["simple text", "2 paragraphs"],
+ mapping: {
+ "simple text": loremIpsum({
+ p: 1,
+ avgSentencesPerParagraph: 4,
+ random: false,
+ }),
+ "2 paragraphs":
+ },
+ description: "Content of the element.",
+ },
+ },
+} as Meta;
+export default config;
+
+const Template: StoryFn = (args) => ;
+
+export const Default = Template.bind({});
+Default.args = {
+ children: config?.argTypes?.children?.mapping ? config.argTypes.children.mapping["simple text"] : "Overflow text",
+};
diff --git a/src/components/index.scss b/src/components/index.scss
index 04fcfce09..2455a2bac 100644
--- a/src/components/index.scss
+++ b/src/components/index.scss
@@ -41,3 +41,4 @@
@import "./Badge/badge";
@import "./PropertyValuePair/propertyvalue";
@import "./MultiSuggestField/multisuggestfield";
+@import "./ContentGroup/contentgroup";
diff --git a/src/components/index.ts b/src/components/index.ts
index f9df8a678..9538a98de 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -48,5 +48,6 @@ export * from "./Tooltip/Tooltip";
export * from "./Tree/Tree";
export * from "./Typography";
export * from "./Workspace";
+export * from "./ContentGroup/ContentGroup";
export * from "./interfaces";
diff --git a/src/extensions/codemirror/CodeMirror.stories.tsx b/src/extensions/codemirror/CodeMirror.stories.tsx
index 270c4008c..b3d8ce75a 100644
--- a/src/extensions/codemirror/CodeMirror.stories.tsx
+++ b/src/extensions/codemirror/CodeMirror.stories.tsx
@@ -1,6 +1,8 @@
import React from "react";
import { Meta, StoryFn } from "@storybook/react";
+import { helpersArgTypes } from "../../../.storybook/helpers";
+
import { CodeEditor } from "./CodeMirror";
export default {
@@ -11,14 +13,30 @@ export default {
onChange: {
action: "value changed",
},
+ intent: {
+ ...helpersArgTypes.exampleIntent,
+ },
},
} as Meta;
-const TemplateFull: StoryFn = (args) => ;
+let forcedUpdateKey = 0; // @see https://github.com/storybookjs/storybook/issues/13375#issuecomment-1291011856
+const TemplateFull: StoryFn = (args) => ;
export const BasicExample = TemplateFull.bind({});
BasicExample.args = {
name: "codeinput",
mode: "markdown",
defaultValue: "**test me**",
+ useToolbar: true,
+ disabled: false,
+ readOnly: true,
+};
+
+export const LinterExample = TemplateFull.bind({});
+LinterExample.args = {
+ name: "codeinput",
+ defaultValue: "**test me**",
+ mode: "javascript",
+ useLinting: true,
+ autoFocus: true,
};
diff --git a/src/extensions/codemirror/CodeMirror.tsx b/src/extensions/codemirror/CodeMirror.tsx
index 102b3459a..311f91679 100644
--- a/src/extensions/codemirror/CodeMirror.tsx
+++ b/src/extensions/codemirror/CodeMirror.tsx
@@ -1,11 +1,15 @@
-import React, { useRef } from "react";
+import React, { useMemo, useRef } from "react";
import { defaultKeymap, indentWithTab } from "@codemirror/commands";
import { foldKeymap } from "@codemirror/language";
import { EditorState, Extension } from "@codemirror/state";
import { DOMEventHandlers, EditorView, KeyBinding, keymap, Rect, ViewUpdate } from "@codemirror/view";
import { minimalSetup } from "codemirror";
+import { IntentTypes } from "../../common/Intent";
import { markField } from "../../components/AutoSuggestion/extensions/markText";
+import { TestableComponent } from "../../components/interfaces";
+import { MarkdownToolbar } from "./toolbars/markdown.toolbar";
+import { Markdown } from "../../cmem/markdown/Markdown";
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
//hooks
@@ -14,6 +18,8 @@ import {
supportedCodeEditorModes,
useCodeMirrorModeExtension,
} from "./hooks/useCodemirrorModeExtension.hooks";
+import { jsLinter } from "./linters/jsLinter";
+import { turtleLinter } from "./linters/turtleLinter";
//adaptations
import {
adaptedCodeFolding,
@@ -23,12 +29,14 @@ import {
adaptedHighlightActiveLine,
adaptedHighlightSpecialChars,
adaptedLineNumbers,
+ adaptedLintGutter,
adaptedPlaceholder,
} from "./tests/codemirrorTestHelper";
+import { ExtensionCreator } from "./types";
-export interface CodeEditorProps {
+export interface CodeEditorProps extends TestableComponent {
// Is called with the editor instance that allows access via the CodeMirror API
- setEditorView?: (editor: EditorView | undefined) => any;
+ setEditorView?: (editor: EditorView | undefined) => void;
/**
* `name` attribute of connected textarea element.
*/
@@ -50,7 +58,7 @@ export interface CodeEditorProps {
/**
* Called when the focus status changes
*/
- onFocusChange?: (focused: boolean) => any;
+ onFocusChange?: (focused: boolean) => void;
/**
* Called when the user presses a key
*/
@@ -62,7 +70,7 @@ export interface CodeEditorProps {
/**
* Called when the user selects text
*/
- onSelection?: (ranges: { from: number; to: number }[]) => any;
+ onSelection?: (ranges: { from: number; to: number }[]) => void;
/**
* Called when the cursor position changes
*/
@@ -71,7 +79,6 @@ export interface CodeEditorProps {
/**
* Syntax mode of the code editor.
*/
-
mode?: SupportedCodeEditorModes;
/**
* Default value used first when the editor is instanciated.
@@ -133,6 +140,32 @@ export interface CodeEditorProps {
* If the key is enabled as normal input, i.e. it won't have the behavior of changing to the next input element, expected in a web app.
*/
enableTab?: boolean;
+ /**
+ * Enables linting feature in the editor ("turtle" and "javascript" modes can use linting currently).
+ */
+ useLinting?: boolean;
+
+ /**
+ * Autofocus the editor when it is rendered
+ */
+ autoFocus?: boolean;
+ /**
+ * Intent state of the code editor.
+ */
+ intent?: IntentTypes | "edited" | "removed";
+ /**
+ * Disables the editor.
+ */
+ disabled?: boolean;
+ /**
+ * Add toolbar for mode.
+ * Currently only `markdown` is supported.
+ */
+ useToolbar?: boolean;
+ /**
+ * Get the translation for a specific key
+ */
+ translate?: (key: string) => string | false;
}
const addExtensionsFor = (flag: boolean, ...extensions: Extension[]) => (flag ? [...extensions] : []);
@@ -140,6 +173,13 @@ const addToKeyMapConfigFor = (flag: boolean, ...keys: any) => (flag ? [...keys]
const addHandlersFor = (flag: boolean, handlerName: string, handler: any) =>
flag ? ({ [handlerName]: handler } as DOMEventHandlers) : {};
+const ModeLinterMap: ReadonlyMap> = new Map([
+ ["turtle", [turtleLinter]],
+ ["javascript", [jsLinter]],
+]);
+
+const ModeToolbarSupport: ReadonlyArray = ["markdown"];
+
/**
* Includes a code editor, currently we use CodeMirror library as base.
*/
@@ -170,8 +210,33 @@ export const CodeEditor = ({
tabForceSpaceForModes = ["python", "yaml"],
enableTab = false,
height,
+ useLinting = false,
+ "data-test-id": dataTestId,
+ autoFocus = false,
+ disabled = false,
+ intent,
+ useToolbar,
+ translate,
+ ...otherCodeEditorProps
}: CodeEditorProps) => {
const parent = useRef(undefined);
+ const [view, setView] = React.useState();
+ const [showPreview, setShowPreview] = React.useState(false);
+
+ const linters = useMemo(() => {
+ if (!mode) {
+ return [];
+ }
+
+ const values = [adaptedLintGutter()];
+
+ const linters = ModeLinterMap.get(mode);
+ if (linters) {
+ values.push(...linters.map((linter) => linter()));
+ }
+
+ return values;
+ }, [mode]);
const onKeyDownHandler = (event: KeyboardEvent, view: EditorView) => {
if (onKeyDown && !onKeyDown(event)) {
@@ -192,6 +257,14 @@ export const CodeEditor = ({
}
};
+ const getTranslation = (key: string): string | false => {
+ if (translate && typeof translate === "function") {
+ return translate(key);
+ }
+
+ return false;
+ };
+
React.useEffect(() => {
const tabIndent =
!!(tabIntentStyle === "tab" && mode && !(tabForceSpaceForModes ?? []).includes(mode)) || enableTab;
@@ -219,13 +292,23 @@ export const CodeEditor = ({
keymap?.of(keyMapConfigs),
EditorState?.tabSize.of(tabIntentSize),
EditorState?.readOnly.of(readOnly),
+ EditorView?.editable.of(!disabled),
AdaptedEditorViewDomEventHandlers(domEventHandlers) as Extension,
EditorView?.updateListener.of((v: ViewUpdate) => {
- onChange && onChange(v.state.doc.toString());
+ if (disabled) return;
+
+ if (onChange && v.docChanged) {
+ // Only fire if the text has actually been changed
+ onChange(v.state.doc.toString());
+ }
if (onSelection)
onSelection(v.state.selection.ranges.filter((r) => !r.empty).map(({ from, to }) => ({ from, to })));
+ if (onFocusChange && intent && !v.view.dom.classList?.contains(`${eccgui}-intent--${intent}`)) {
+ v.view.dom.classList.add(`${eccgui}-intent--${intent}`);
+ }
+
if (onCursorChange) {
const cursorPosition = v.state.selection.main.head ?? 0;
const editorRect = v.view.dom.getBoundingClientRect();
@@ -250,6 +333,7 @@ export const CodeEditor = ({
addExtensionsFor(shouldHighlightActiveLine, adaptedHighlightActiveLine()),
addExtensionsFor(wrapLines, EditorView?.lineWrapping),
addExtensionsFor(supportCodeFolding, adaptedFoldGutter(), adaptedCodeFolding()),
+ addExtensionsFor(useLinting, ...linters),
additionalExtensions,
];
@@ -260,18 +344,67 @@ export const CodeEditor = ({
}),
parent: parent.current,
});
+ setView(view);
- if (height) {
- view.dom.style.height = typeof height === "string" ? height : `${height}px`;
- }
+ if (view?.dom) {
+ if (height) {
+ view.dom.style.height = typeof height === "string" ? height : `${height}px`;
+ }
+
+ if (disabled) {
+ view.dom.className += ` ${eccgui}-disabled`;
+ }
- setEditorView && setEditorView(view);
+ if (intent) {
+ view.dom.className += ` ${eccgui}-intent--${intent}`;
+ }
+
+ if (autoFocus) {
+ view.focus();
+ }
+
+ if (setEditorView) {
+ setEditorView(view);
+ }
+ }
return () => {
view.destroy();
- setEditorView && setEditorView(undefined);
+ if (setEditorView) {
+ setEditorView(undefined);
+ setView(undefined);
+ }
};
- }, [parent.current, mode, preventLineNumbers]);
+ }, [parent.current, mode, preventLineNumbers, wrapLines]);
+
+ const hasToolbarSupport = mode && ModeToolbarSupport.indexOf(mode) > -1 && useToolbar;
+
+ const editorToolbar = (mode?: SupportedCodeEditorModes): JSX.Element => {
+ switch (mode) {
+ case "markdown":
+ return (
+
+
+ setShowPreview((p) => !p)}
+ showPreview={showPreview}
+ translate={getTranslation}
+ disabled={disabled}
+ readonly={readOnly}
+ />
+
+ {showPreview && (
+
+ {view?.state.doc.toString() ?? ""}
+
+ )}
+
+ );
+ default:
+ return <>>;
+ }
+ };
return (
+ {...otherCodeEditorProps}
+ >
+ {hasToolbarSupport && editorToolbar(mode)}
+
);
};
diff --git a/src/extensions/codemirror/_codemirror.scss b/src/extensions/codemirror/_codemirror.scss
index 0197c6224..583454c7b 100644
--- a/src/extensions/codemirror/_codemirror.scss
+++ b/src/extensions/codemirror/_codemirror.scss
@@ -1,5 +1,10 @@
+@use "sass:color";
+
// own vars
$eccgui-color-codeeditor-background: $eccgui-color-textfield-background !default;
+$eccgui-color-codeeditor-separation: $eccgui-color-separation-divider !default;
+$eccgui-size-codeeditor-height: 20rem !default;
+$eccgui-size-codeeditor-toolbar-height: $button-height !default;
// adjustments
// stylelint-disable selector-class-pattern
@@ -12,9 +17,39 @@ $eccgui-color-codeeditor-background: $eccgui-color-textfield-background !default
width: 100%;
}
+ &__toolbar {
+ position: absolute;
+ z-index: 3;
+ left: 1px;
+ right: 1px;
+ top: 1px;
+ border-radius: $pt-border-radius $pt-border-radius 0 0;
+ border-bottom: solid 1px $eccgui-color-codeeditor-separation;
+ background-color: $eccgui-color-codeeditor-background;
+ }
+
+ &--has-toolbar {
+ .cm-scroller {
+ margin-top: $eccgui-size-codeeditor-toolbar-height !important;
+ }
+ }
+
+ &__preview {
+ position: absolute;
+ top: calc(#{$eccgui-size-codeeditor-toolbar-height} + 1px) !important;
+ left: 1px;
+ right: 1px;
+ bottom: 1px;
+ z-index: 2;
+ padding: $button-padding;
+ overflow-y: auto;
+ background-color: $eccgui-color-codeeditor-background;
+ border-radius: 0 0 $pt-border-radius $pt-border-radius;
+ }
+
.cm-editor {
width: 100%;
- height: 290px;
+ height: $eccgui-size-codeeditor-height;
clip-path: unset !important; // we may check later why they set inset(0) now
background-color: $eccgui-color-codeeditor-background;
border-radius: $pt-border-radius;
@@ -22,6 +57,63 @@ $eccgui-color-codeeditor-background: $eccgui-color-textfield-background !default
// get them a "border" like input boxes from blueprintjs
box-shadow: input-transition-shadow($input-shadow-color-focus), $pt-input-box-shadow;
+ &.#{eccgui}-disabled {
+ @extend .#{$ns}-input, .#{$ns}-disabled;
+
+ height: $eccgui-size-codeeditor-height;
+ padding: 0;
+ }
+
+ &[class*="#{$eccgui}-intent--"] {
+ animation-duration: 1s;
+ animation-delay: 0.5s;
+ }
+
+ @each $each-intent, $each-bgcolor in $eccgui-map-intent-bgcolors {
+ &.#{eccgui}-intent--#{$each-intent} {
+ background-color: color.mix($each-bgcolor, $eccgui-color-textfield-background, 24%);
+ animation-name: intent-state-flash-#{$each-intent};
+ }
+ }
+
+ &.#{eccgui}-intent--warning {
+ @include pt-input-intent($eccgui-color-warning-text);
+ }
+
+ &.#{eccgui}-intent--success {
+ @include pt-input-intent($eccgui-color-success-text);
+ }
+
+ &.#{eccgui}-intent--danger {
+ @include pt-input-intent($eccgui-color-danger-text);
+ }
+
+ &.#{eccgui}-intent--primary {
+ @include pt-input-intent($eccgui-color-info-text);
+ }
+
+ &.#{eccgui}-intent--info {
+ @include pt-input-intent($eccgui-color-info-text);
+ }
+
+ &.#{eccgui}-intent--accent {
+ @include pt-input-intent($eccgui-color-primary);
+ }
+
+ &.#{eccgui}-intent--neutral {
+ @include pt-input-intent($eccgui-color-workspace-text);
+ }
+
+ &.#{eccgui}-intent--edited {
+ @include pt-input-intent($eccgui-color-info-text);
+ }
+
+ &.#{eccgui}-intent--removed {
+ @include pt-input-intent($eccgui-color-danger-text);
+
+ text-decoration: line-through $eccgui-color-danger-text 2px;
+ }
+
.cm-scroller {
width: calc(100% - 2px);
height: calc(100% - 2px);
@@ -34,6 +126,43 @@ $eccgui-color-codeeditor-background: $eccgui-color-textfield-background !default
&.cm-focused {
outline: none;
box-shadow: input-transition-shadow($input-shadow-color-focus, true), $input-box-shadow-focus;
+
+ &.#{eccgui}-intent--warning {
+ box-shadow: input-transition-shadow($eccgui-color-warning-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--success {
+ box-shadow: input-transition-shadow($eccgui-color-success-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--danger {
+ box-shadow: input-transition-shadow($eccgui-color-danger-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--primary {
+ box-shadow: input-transition-shadow($eccgui-color-info-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--info {
+ box-shadow: input-transition-shadow($eccgui-color-info-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--accent {
+ box-shadow: input-transition-shadow($eccgui-color-warning-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--neutral {
+ box-shadow: input-transition-shadow($eccgui-color-workspace-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--edited {
+ box-shadow: input-transition-shadow($eccgui-color-info-text, true), $input-box-shadow-focus;
+ }
+
+ &.#{eccgui}-intent--removed {
+ text-decoration: line-through $eccgui-color-danger-text 2px;
+ box-shadow: input-transition-shadow($eccgui-color-danger-text, true), $input-box-shadow-focus;
+ }
}
.CodeMirror-hscrollbar {
diff --git a/src/extensions/codemirror/debouncedLinter.ts b/src/extensions/codemirror/debouncedLinter.ts
new file mode 100644
index 000000000..bf080b1ca
--- /dev/null
+++ b/src/extensions/codemirror/debouncedLinter.ts
@@ -0,0 +1,26 @@
+import { Diagnostic } from "@codemirror/lint";
+import { EditorView } from "@codemirror/view";
+import { debounce } from "lodash";
+
+import { Linter } from "./types";
+
+const DEBOUNCE_TIME = 500;
+
+export const debouncedLinter = (lintFunction: Linter, time = DEBOUNCE_TIME) => {
+ const debouncedFn = debounce(
+ (
+ view: EditorView,
+ resolve: (diagnostics: ReadonlyArray | Promise>) => void
+ ) => {
+ const diagnostics = lintFunction(view);
+ resolve(diagnostics);
+ },
+ time
+ );
+
+ return (view: EditorView) => {
+ return new Promise>((resolve) => {
+ debouncedFn(view, resolve);
+ });
+ };
+};
diff --git a/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts b/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts
index 76dc2c03e..8a429ae56 100644
--- a/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts
+++ b/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts
@@ -48,6 +48,6 @@ export const useCodeMirrorModeExtension = (mode?: SupportedCodeEditorModes) => {
return !mode
? adaptedSyntaxHighlighting(defaultHighlightStyle)
: v6AdaptedModes.has(mode)
- ? ((typeof supportedModes[mode] === "function" ? supportedModes[mode] : () => {}) as () => LanguageSupport)()
+ ? ((typeof supportedModes[mode] === "function" ? supportedModes[mode] : () => null) as () => LanguageSupport)()
: StreamLanguage?.define(supportedModes[mode] as StreamParser);
};
diff --git a/src/extensions/codemirror/linters/jsLinter.ts b/src/extensions/codemirror/linters/jsLinter.ts
new file mode 100644
index 000000000..bec78e4a6
--- /dev/null
+++ b/src/extensions/codemirror/linters/jsLinter.ts
@@ -0,0 +1,38 @@
+import { Diagnostic, linter } from "@codemirror/lint";
+import { JSHINT as jshint } from "jshint";
+
+import { ExtensionCreator } from "../types";
+
+const lintOptions = {
+ esversion: 11,
+ browser: true,
+};
+
+/**
+ * Sets up the javascript linter. Documentation: https://codemirror.net/examples/lint/
+ */
+export const jsLinter: ExtensionCreator = () => {
+ return linter((view) => {
+ const diagnostics: Array = [];
+ const codeText = view.state.doc.toJSON();
+ jshint(codeText, lintOptions);
+ const errors = jshint?.data()?.errors;
+
+ if (errors && errors.length > 0) {
+ errors.forEach((error) => {
+ const selectedLine = view.state.doc.line(error.line);
+
+ const diagnostic: Diagnostic = {
+ from: selectedLine.from,
+ to: selectedLine.to,
+ severity: "error",
+ message: error.reason,
+ };
+
+ diagnostics.push(diagnostic);
+ });
+ }
+
+ return diagnostics;
+ });
+};
diff --git a/src/extensions/codemirror/linters/turtleLinter.ts b/src/extensions/codemirror/linters/turtleLinter.ts
new file mode 100644
index 000000000..b91388a6a
--- /dev/null
+++ b/src/extensions/codemirror/linters/turtleLinter.ts
@@ -0,0 +1,102 @@
+import { Diagnostic, linter } from "@codemirror/lint";
+import { EditorView } from "@codemirror/view";
+import { Parser } from "n3";
+
+import { debouncedLinter } from "../debouncedLinter";
+import { ExtensionCreator, Linter } from "../types";
+
+const parser = new Parser();
+
+const EMPTY_RESOURCE = "<>";
+
+const getError = (message: string, view: EditorView) => {
+ const lineMatch = message.match(/(?<=line )\d{1,}/);
+ const valueMatch = message.match(/"([^"]*)"/);
+
+ const lineNumber = lineMatch ? Number(lineMatch[0]) : 1;
+ // the [1] index is used to get the caputre group
+ const errorContent = valueMatch && valueMatch[1];
+
+ const line = view.state.doc.line(lineNumber);
+ const position = line.text.search(errorContent ?? /\S/);
+
+ const from = line.from + position;
+ const errorLength = errorContent?.length;
+
+ return { from, to: errorLength ? from + errorLength : line.to };
+};
+
+const getQuadError = (view: EditorView) => {
+ const lines = view.state.doc.toJSON();
+
+ for (let i = 0; i < lines.length; i += 1) {
+ const input = lines[i].trim();
+
+ if (!input) {
+ continue;
+ }
+
+ if (input.includes(EMPTY_RESOURCE)) {
+ // i + 1 is used here because the codemirror uses 1-indexes
+ const line = view.state.doc.line(i + 1);
+ const position = line.text.search(EMPTY_RESOURCE);
+
+ const from = line.from + position;
+
+ return {
+ from,
+ to: from + EMPTY_RESOURCE.length,
+ };
+ }
+ }
+
+ return { from: 0, to: view.state.doc.length };
+};
+
+const n3Linter: Linter = (view) => {
+ const diagnostics: Array = [];
+ const value = view.state.doc.toString();
+
+ try {
+ const quads = parser.parse(value);
+
+ quads.forEach((quad) => {
+ if (!quad.subject || !quad.predicate || !quad.object) {
+ const { from, to } = getQuadError(view);
+
+ view.dispatch({
+ scrollIntoView: true,
+ });
+
+ diagnostics.push({
+ from,
+ to,
+ severity: "error",
+ message: `Invalid RDF quad:\n\nsubject: ${quad.subject}\npredicate: ${quad.predicate}\nobject: ${quad.object}`,
+ });
+ }
+ });
+ } catch (error) {
+ const { message } = error as Error;
+
+ const { from, to } = getError(message, view);
+
+ view.dispatch({
+ scrollIntoView: true,
+ });
+
+ diagnostics.push({
+ from,
+ to,
+ severity: "error",
+ message: (error as Error).message,
+ });
+ }
+
+ return diagnostics;
+};
+
+/**
+ * Sets up the turtle linter. Documentation: https://codemirror.net/examples/lint/
+ */
+export const turtleLinter: ExtensionCreator = () => linter(debouncedLinter(n3Linter));
diff --git a/src/extensions/codemirror/tests/codemirrorTestHelper.ts b/src/extensions/codemirror/tests/codemirrorTestHelper.ts
index f7a38162c..8d1c35e26 100644
--- a/src/extensions/codemirror/tests/codemirrorTestHelper.ts
+++ b/src/extensions/codemirror/tests/codemirrorTestHelper.ts
@@ -10,6 +10,7 @@
import { EditorView, placeholder, highlightSpecialChars, lineNumbers, highlightActiveLine } from "@codemirror/view";
import { syntaxHighlighting, foldGutter, codeFolding } from "@codemirror/language";
import { Extension } from "@codemirror/state";
+import { lintGutter } from "@codemirror/lint";
/** placeholder extension, current error '_view.placeholder is not a function' */
export const adaptedPlaceholder = (text?: string) =>
@@ -55,3 +56,6 @@ export const adaptedFoldGutter = (props?: any) =>
export const adaptedCodeFolding = (props?: any) =>
typeof codeFolding === "function" ? codeFolding(props) : emptyExtension;
+
+export const adaptedLintGutter = (props?: any) =>
+ typeof lintGutter === "function" ? lintGutter(props) : emptyExtension;
diff --git a/src/extensions/codemirror/toolbars/commands/markdown.command.ts b/src/extensions/codemirror/toolbars/commands/markdown.command.ts
new file mode 100644
index 000000000..42c14d373
--- /dev/null
+++ b/src/extensions/codemirror/toolbars/commands/markdown.command.ts
@@ -0,0 +1,340 @@
+import { type ChangeSpec, EditorSelection } from "@codemirror/state";
+import { EditorView } from "codemirror";
+
+import { ValidIconName } from "../../../../components/Icon/canonicalIconNames";
+
+enum Commands {
+ header1 = "Heading 1",
+ header2 = "Heading 2",
+ header3 = "Heading 3",
+ header4 = "Heading 4",
+ header5 = "Heading 5",
+ header6 = "Heading 6",
+ codeBlock = "Code block",
+ quote = "Block quote",
+ bold = "Bold",
+ italic = "Italic",
+ strike = "StrikeThrough",
+ inlineCode = "Inline code",
+ unorderedList = "Unordered list",
+ orderedList = "Ordered list",
+ todoList = "Todo list",
+ link = "Link",
+ image = "Image",
+}
+
+type formatConfig = { start: number; startDelimiter: string; stop?: number; endDelimiter?: string };
+type headerLevels = 1 | 2 | 3 | 4 | 5 | 6;
+type ListType = "ul" | "ol" | "todo";
+
+//contains all utilities for markdown toolbar
+export default class MarkdownCommand {
+ private view: EditorView | null = null;
+
+ //list of supported commands as well as the valid icon names.
+ public static commands = {
+ paragraphs: [
+ Commands.header1,
+ Commands.header2,
+ Commands.header3,
+ Commands.header4,
+ Commands.header5,
+ Commands.header6,
+ Commands.quote,
+ Commands.codeBlock,
+ ],
+ basic: [
+ { title: Commands.bold, icon: "operation-format-text-bold" },
+ { title: Commands.italic, icon: "operation-format-text-italic" },
+ { title: Commands.strike, icon: "operation-format-text-strikethrough" },
+ { title: Commands.inlineCode, icon: "operation-format-text-code" },
+ ] as { title: Commands; icon: ValidIconName }[],
+ lists: [
+ { title: Commands.unorderedList, icon: "operation-format-list-bullet", moniker: "ul" },
+ { title: Commands.orderedList, icon: "operation-format-list-numbered", moniker: "ol" },
+ { title: Commands.todoList, icon: "operation-format-list-checked", moniker: "todo" },
+ ] as { title: Commands; icon: ValidIconName; moniker: string }[],
+ attachments: [
+ { title: Commands.link, icon: "operation-link" },
+ { title: Commands.image, icon: "item-image" },
+ ] as { title: Commands; icon: ValidIconName }[],
+ } as const;
+
+ constructor(view: EditorView) {
+ this.view = view;
+ }
+
+ /**
+ * Supported list types are ol, ul, todo.
+ * utility helps to determine which at the start of the line
+ */
+ private getListTypeOfLine = (text: string): [ListType, number?] | undefined => {
+ if (!text) return;
+ text = text?.trimStart();
+
+ if (text.startsWith("- ")) {
+ if (text.startsWith("- [ ] ") || text.startsWith("- [x] ")) return ["todo"];
+ return ["ul"];
+ }
+
+ const v = text.match(/^(\d+)\. /);
+
+ return v ? ["ol", Number.parseInt(v[1], 10)] : undefined;
+ };
+
+ //inserts the list delimiters of "-", "- [ ]" and "{number}."
+ private createListDelimiter(text: string, type: string, orderedList: { currentIndex: number }) {
+ return text.replace(/^(( *)(-( \[[x ]])?|\d+\.) )?/, (...args) => {
+ const { space = "" } = args[args.length - 1];
+
+ let newFlag = "- ";
+
+ if (type === "ol") {
+ newFlag = `${orderedList.currentIndex}. `;
+ orderedList.currentIndex++;
+ } else if (type === "todo") {
+ newFlag = "- [ ] ";
+ }
+
+ return space + newFlag;
+ });
+ }
+
+ //factory for different list types.
+ private createList = (type: ListType) => {
+ if (!this.view) return;
+ const view = this.view;
+ const doc = view.state.doc;
+
+ const orderedList = { currentIndex: 1 };
+
+ view.dispatch(
+ view.state.changeByRange((range) => {
+ const text = doc.slice(range.from, range.to);
+ const changes: ChangeSpec[] = [];
+
+ let selectionStart: number = range.from;
+ let selectionLength: number = range.to - range.from;
+
+ Array.from({ length: text.lines }).forEach((_, index) => {
+ const line = doc.line(doc.lineAt(range.from).number + index);
+
+ const currentListType = this.getListTypeOfLine(line.text);
+
+ if (currentListType && currentListType[0] === type) {
+ if (currentListType[0] === "ol" && currentListType[1]) {
+ orderedList.currentIndex = currentListType[1];
+ }
+
+ return;
+ }
+ const content = this.createListDelimiter(line.text, type, orderedList);
+
+ const diffLength = content.length - line.length;
+
+ changes.push({
+ from: line.from,
+ to: line.to,
+ insert: content,
+ });
+
+ if (index === 0) {
+ selectionStart = selectionStart + diffLength;
+ } else {
+ selectionLength = selectionLength + diffLength;
+ }
+ });
+
+ return {
+ changes,
+ range: EditorSelection.range(selectionStart, selectionStart + selectionLength),
+ };
+ })
+ );
+
+ view.focus();
+ };
+
+ private enforceCursorFocus = (cursorPosition: number) => {
+ if (!this.view) return;
+ const view = this.view;
+ setTimeout(() => {
+ view.dispatch({
+ selection: EditorSelection.cursor(cursorPosition),
+ });
+ view.focus();
+ }, 50);
+ };
+
+ //supported headers from h1-h6, h6 being the smallest
+ private createHeading = (level: headerLevels) => {
+ if (!this.view) return;
+ const view = this.view;
+ const state = view.state;
+
+ const flags = "#".repeat(level) + " ";
+
+ let lastCursorPosition = 0;
+
+ view.dispatch(
+ state.changeByRange((range) => {
+ const line = state.doc.lineAt(range.from);
+
+ const content = line.text.replace(/^((#+) )?/, flags);
+
+ const diffLength = content.length - line.length;
+ lastCursorPosition = line.to + diffLength;
+ return {
+ changes: {
+ from: line.from,
+ to: line.to,
+ insert: content,
+ },
+ range: EditorSelection.range(range.anchor + diffLength, range.head + diffLength),
+ };
+ })
+ );
+
+ this.enforceCursorFocus(lastCursorPosition);
+ };
+
+ private applyFormatting = ({
+ start,
+ startDelimiter,
+ endDelimiter = startDelimiter,
+ stop = start,
+ }: formatConfig) => {
+ if (!this.view) return;
+ const view = this.view;
+ const { from, to } = view.state.selection.main;
+ const text = view.state.sliceDoc(from, to);
+ view.dispatch(
+ view.state.changeByRange((range) => {
+ return {
+ changes: [{ from: range.from, to: range.to, insert: `${startDelimiter}${text}${endDelimiter}` }],
+ range: EditorSelection.range(range.from + start, range.to + stop),
+ };
+ })
+ );
+ view.focus();
+ };
+
+ private applyAttachment = (type: Commands.link | Commands.image) => {
+ if (!this.view) return;
+ const view = this.view;
+ const { state } = view;
+ const isImageAttachmentType = type === Commands.image;
+
+ const { doc } = state;
+
+ view.dispatch(
+ state.changeByRange((range) => {
+ const { from, to } = range;
+
+ const text = doc.sliceString(from, to);
+
+ const link = `${isImageAttachmentType ? `!` : ""}[${text}]()`;
+
+ const cursor = from + (text.length ? 3 + text.length : 1 + Number(isImageAttachmentType));
+
+ return {
+ changes: [
+ {
+ from,
+ to,
+ insert: link,
+ },
+ ],
+ range: EditorSelection.range(cursor, cursor),
+ };
+ })
+ );
+
+ view.focus();
+ };
+
+ private applyQuoteFormatting = () => {
+ if (!this.view) return;
+ const view = this.view;
+ const { state } = view;
+ const { doc } = state;
+
+ let lastCursorPosition = 0;
+
+ view.dispatch(
+ view.state.changeByRange((range) => {
+ const startLine = doc.lineAt(range.from);
+
+ const text = doc.slice(range.from, range.to);
+
+ const lineCount = text.lines;
+
+ const changes: ChangeSpec[] = [];
+
+ let selectionStart: number = range.from;
+ let selectionLength: number = range.to - range.from;
+
+ new Array(lineCount).fill(0).forEach((_, index) => {
+ const line = doc.line(startLine.number + index);
+
+ if (line.text.startsWith("> ")) {
+ return;
+ }
+ changes.push({
+ from: line.from,
+ insert: "> ",
+ });
+
+ if (index === 0) {
+ selectionStart = selectionStart + 2;
+ } else {
+ selectionLength += 2;
+ }
+ });
+
+ lastCursorPosition = selectionStart + selectionLength;
+
+ return {
+ changes,
+ range: EditorSelection.range(selectionStart, selectionStart + selectionLength),
+ };
+ })
+ );
+ this.enforceCursorFocus(lastCursorPosition);
+ };
+
+ executeCommand = (command: Commands): true | void => {
+ switch (command) {
+ case Commands.bold:
+ return this.applyFormatting({ start: 2, startDelimiter: "**" });
+ case Commands.italic:
+ return this.applyFormatting({ start: 1, startDelimiter: "*" });
+ case Commands.codeBlock:
+ return this.applyFormatting({ start: 3, startDelimiter: "```\n", endDelimiter: "\n```" });
+ case Commands.strike:
+ return this.applyFormatting({ start: 2, startDelimiter: "~~" });
+ case Commands.inlineCode:
+ return this.applyFormatting({ start: 1, startDelimiter: "`" });
+ case Commands.header1:
+ case Commands.header2:
+ case Commands.header3:
+ case Commands.header4:
+ case Commands.header5:
+ case Commands.header6:
+ return this.createHeading(Number(command.slice(-1)) as headerLevels);
+ case Commands.unorderedList:
+ case Commands.orderedList:
+ case Commands.todoList:
+ return this.createList(
+ MarkdownCommand.commands.lists.find((l) => l.title === command)?.moniker as ListType
+ );
+ case Commands.image:
+ case Commands.link:
+ return this.applyAttachment(command);
+ case Commands.quote:
+ return this.applyQuoteFormatting();
+ default:
+ return; //do nothing;
+ }
+ };
+}
diff --git a/src/extensions/codemirror/toolbars/markdown.toolbar.tsx b/src/extensions/codemirror/toolbars/markdown.toolbar.tsx
new file mode 100644
index 000000000..13a1444b6
--- /dev/null
+++ b/src/extensions/codemirror/toolbars/markdown.toolbar.tsx
@@ -0,0 +1,117 @@
+import React from "react";
+import { EditorView } from "codemirror";
+
+import { Button } from "../../../components/Button/Button";
+import { ContextMenu } from "../../../components/ContextOverlay";
+import { Icon, IconButton } from "../../../components/Icon";
+import { MenuItem } from "../../../components/Menu";
+import { Spacing } from "../../../components/Separation/Spacing";
+import { Toolbar, ToolbarSection } from "../../../components/Toolbar";
+
+import MarkdownCommand from "./commands/markdown.command";
+
+interface MarkdownToolbarProps {
+ view?: EditorView;
+ togglePreviewStatus: () => void;
+ showPreview: boolean;
+ translate: (key: string) => string | false;
+ disabled?: boolean;
+ readonly?: boolean;
+}
+
+export const MarkdownToolbar: React.FC = ({
+ view,
+ togglePreviewStatus,
+ showPreview,
+ disabled,
+ readonly,
+ translate
+}) => {
+ const commandRef = React.useRef(null);
+
+ React.useEffect(() => {
+ if (view) {
+ commandRef.current = new MarkdownCommand(view);
+ }
+ }, [view]);
+
+ const getTranslation = (fallback: string) : string => {
+ const key = fallback.toLowerCase().replace(" ", "-");
+ return translate(key) || fallback;
+ }
+
+ const { basic, lists, attachments } = MarkdownCommand.commands;
+ return (
+
+
+ }
+ text={getTranslation("Paragraphs")}
+ minimal
+ fill
+ ellipsizeText
+ disabled={showPreview || disabled || readonly}
+ />
+ }
+ >
+ {MarkdownCommand.commands.paragraphs.map((p, i) => (
+
+
+
+
+
+ {[basic, lists, attachments].map((section, i) => {
+ return (
+
+
+ {section.map((command) => {
+ return (
+ commandRef.current?.executeCommand(command.title)}
+ text={getTranslation(command.title)}
+ disabled={showPreview || disabled || readonly}
+ />
+ );
+ })}
+
+ {i < 2 && (
+
+
+
+ )}
+
+ );
+ })}
+
+
+
+
+
+
+
+ );
+};
diff --git a/src/extensions/codemirror/types.ts b/src/extensions/codemirror/types.ts
new file mode 100644
index 000000000..b99b81f61
--- /dev/null
+++ b/src/extensions/codemirror/types.ts
@@ -0,0 +1,7 @@
+import { Diagnostic } from "@codemirror/lint";
+import { Extension } from "@codemirror/state";
+import { EditorView } from "@codemirror/view";
+
+export type Linter = (view: EditorView) => ReadonlyArray | Promise>;
+
+export type ExtensionCreator = (options?: T) => Extension;
diff --git a/src/extensions/react-flow/_config.scss b/src/extensions/react-flow/_config.scss
index ad836e86d..d5855aaf4 100644
--- a/src/extensions/react-flow/_config.scss
+++ b/src/extensions/react-flow/_config.scss
@@ -15,3 +15,4 @@ $reactflow-edge-stroke-color-selected: $eccgui-color-accent !default;
$reactflow-transition-time: 0.25s !default;
$reactflow-transition-function: "" !default;
$reactflow-transition-anglestart: -90deg;
+$reactflow-cursor-delimiter-offset: 0.9 * $eccgui-size-block-whitespace;
diff --git a/src/extensions/react-flow/nodes/NodeContent.tsx b/src/extensions/react-flow/nodes/NodeContent.tsx
index b072f51d2..81f04ed86 100644
--- a/src/extensions/react-flow/nodes/NodeContent.tsx
+++ b/src/extensions/react-flow/nodes/NodeContent.tsx
@@ -22,11 +22,16 @@ type NodeContentHandleNextProps = HandleNextProps;
export type NodeContentHandleProps = NodeContentHandleLegacyProps | NodeContentHandleNextProps;
-type NodeDimensions = {
- width: number;
- height: number;
+export type NodeDimensions = {
+ width?: number;
+ height?: number;
};
+type ResizeDirections =
+ | { right: true; bottom?: false }
+ | { right?: false; bottom: true }
+ | { right: true; bottom: true };
+
type IntroductionTime = {
/**
* The delay time in ms before the introduction animation is displayed.
@@ -210,6 +215,10 @@ export interface NodeContentProps
* width and height dimensions of the node (Optional)
*/
nodeDimensions?: NodeDimensions;
+ /** if node is resizable, this allows direction of specificity */
+ resizeDirections?: ResizeDirections;
+ /** determines how much width a node can be resized to */
+ resizeMaxDimensions?: Partial;
}
interface MemoHandlerLegacyProps extends HandleProps {
@@ -317,20 +326,24 @@ export function NodeContent({
//handles = defaultHandles(),
adaptHeightForHandleMinCount,
adaptSizeIncrement = 15,
+ // FIXME: getMinimalTooltipData is just being ignored, only used in `NodeDefault`
getMinimalTooltipData = getDefaultMinimalTooltipData,
style = {},
showUnconnectableHandles = false,
animated = false,
introductionTime = 0,
+ // resizing
onNodeResize,
nodeDimensions,
+ resizeDirections = { bottom: true, right: true },
+ resizeMaxDimensions,
// forwarded props
targetPosition = Position.Left,
sourcePosition = Position.Right,
isConnectable = true,
selected,
letPassWheelEvents = false,
- // businessData is just being ignored
+ // FIXME: businessData is just being ignored
businessData,
// other props for DOM element
...otherDomProps
@@ -341,11 +354,16 @@ export function NodeContent({
const { handles = defaultHandles(flowVersionCheck), ...otherProps } = otherDomProps;
- const isResizeable = !!onNodeResize && minimalShape === "none";
- const [width, setWidth] = React.useState(nodeDimensions?.width ?? 0);
- const [height, setHeight] = React.useState(nodeDimensions?.height ?? 0);
+ const hasValidResizeDirection = resizeDirections.bottom || resizeDirections.right;
+ const isResizable = typeof onNodeResize === "function" && hasValidResizeDirection && minimalShape === "none";
+
+ const [width, setWidth] = React.useState(nodeDimensions?.width ?? undefined);
+ const [height, setHeight] = React.useState(nodeDimensions?.height ?? undefined);
+ // Keeps the initial size of the element
+ const originalSize = React.useRef({})
+
let zoom = 1;
- if (isResizeable)
+ if (isResizable)
try {
[, , zoom] =
flowVersionCheck === "legacy"
@@ -371,28 +389,70 @@ export function NodeContent({
handleStack[Position.Left] =
flowVersionCheck === "legacy" ? ([] as NodeContentHandleLegacyProps[]) : ([] as NodeContentHandleNextProps[]);
- // initial dimension before resize
+ const saveOriginalSize = () => {
+ const currentClassNames = nodeContentRef.current.classList;
+ if (currentClassNames.contains("was-resized") && !width && !height) {
+ currentClassNames.remove("was-resized");
+ }
+ originalSize.current.width = nodeContentRef.current.offsetWidth as number;
+ originalSize.current.height = nodeContentRef.current.offsetHeight as number;
+ }
+
React.useEffect(() => {
- if (!!onNodeResize && minimalShape === "none") {
- if (!nodeDimensions) {
- setWidth(nodeContentRef.current.offsetWidth);
- setHeight(nodeContentRef.current.offsetHeight);
- onNodeResize({
- height: nodeContentRef.current.offsetHeight,
- width: nodeContentRef.current.offsetWidth,
- });
+ if(nodeContentRef.current && (!(originalSize.current.width || originalSize.current.height) || !(width || height))) {
+ saveOriginalSize();
+ }
+ }, [!!nodeContentRef.current, !(originalSize.current.width || originalSize.current.height), !(width || height)])
+
+ // Update width and height when node dimensions parameters has changed
+ React.useEffect(() => {
+ const updateWidth = nodeDimensions?.width ? validateWidth(nodeDimensions?.width) : undefined;
+ const updateHeight = nodeDimensions?.height ? validateHeight(nodeDimensions?.height) : undefined;
+ setWidth(updateWidth);
+ setHeight(updateHeight);
+ }, [nodeDimensions]);
+
+ const isResizingActive = React.useCallback((): boolean => {
+ const currentClassNames = nodeContentRef.current.classList;
+ return resizeDirections.right === currentClassNames.contains("is-resizable-horizontal") ||
+ resizeDirections.bottom === currentClassNames.contains("is-resizable-vertical");
+ }, [])
+
+ // force default size when resizing is activated but no dimensions are set
+ React.useEffect(() => {
+ const resizingActive = isResizingActive();
+
+ if (isResizable && !resizingActive) {
+ if (!width || !height) {
+ const newWidth = validateWidth(width ?? originalSize.current?.width as number);
+ const newHeight = validateHeight(height ?? originalSize.current?.height as number);
+ setWidth(newWidth);
+ setHeight(newHeight);
}
- nodeContentRef.current.className = nodeContentRef.current.className + " is-resizeable";
}
- }, [nodeContentRef, onNodeResize, minimalShape, nodeDimensions]);
+ }, [nodeContentRef.current, onNodeResize, minimalShape, resizeDirections?.bottom, resizeDirections?.right, width, height]); // need to be done everytime a property is changed and the element is re-rendered, otherwise the resizing class is lost
- // update node dimensions when resized
+ // conditional enhancements for activated resizing
React.useEffect(() => {
- if (nodeDimensions) {
- setWidth(nodeDimensions.width);
- setHeight(nodeDimensions.height);
+ const currentClassNames = nodeContentRef.current.classList;
+ const resizingActive = isResizingActive();
+
+ if (isResizable && !resizingActive) {
+ if (currentClassNames.contains("is-resizable-horizontal")) {
+ currentClassNames.remove("is-resizable-horizontal");
+ }
+ if (currentClassNames.contains("is-resizable-vertical")) {
+ currentClassNames.remove("is-resizable-vertical");
+ }
+
+ if (resizeDirections.right) {
+ currentClassNames.add("is-resizable-horizontal");
+ }
+ if (resizeDirections.bottom) {
+ currentClassNames.add("is-resizable-vertical");
+ }
}
- }, [nodeDimensions]);
+ }); // need to be done everytime a property is changed and the element is re-rendered, otherwise the resizing class is lost
// remove introduction class
React.useEffect(() => {
@@ -460,7 +520,14 @@ export function NodeContent({
);
const resizableStyles =
- !!onNodeResize === true && minimalShape === "none" && width + height > 0 ? { width, height } : {};
+ isResizable && (width ?? 0) + (height ?? 0) > 0
+ ? {
+ width,
+ height,
+ maxWidth: resizeDirections.right ? resizeMaxDimensions?.width ?? undefined : undefined,
+ maxHeight: resizeDirections.bottom ? resizeMaxDimensions?.height ?? undefined : undefined,
+ }
+ : {};
const introductionStyles =
introductionTime && !introductionDone
@@ -470,6 +537,7 @@ export function NodeContent({
}ms`,
} as React.CSSProperties)
: {};
+
const nodeContent = (
<>
({
>
);
- const resizableNode = () => (
- {
- if (nodeContentRef.current) {
- nodeContentRef.current.style.width = width + d.width + "px";
- nodeContentRef.current.style.height = height + d.height + "px";
+ const validateWidth = (resizedWidth: number): number | undefined => {
+ // only allow value if resize direction is allowed
+ if (!resizeDirections.right) {
+ return undefined;
+ }
+ // we need to check because there is probably a min value defined via CSS
+ const min = parseFloat(getComputedStyle(nodeContentRef.current).getPropertyValue("min-width"));
+ // we need to check for a given max value
+ const max = resizeMaxDimensions?.width ?? Infinity;
+ const validatedWidth = Math.max(Math.min(resizedWidth, max), min);
+ return validatedWidth;
+ };
+
+ const validateHeight = (resizedHeight: number): number | undefined => {
+ if (!resizeDirections.bottom) {
+ return undefined;
+ }
+ // we need to check because there is probably a min value defined via CSS
+ const min = parseFloat(getComputedStyle(nodeContentRef.current).getPropertyValue("min-height"));
+ const max = resizeMaxDimensions?.height ?? Infinity;
+ const validatedHeight = Math.max(Math.min(resizedHeight, max), min);
+ return validatedHeight;
+ };
+
+ const resizableNode = () => {
+ const size = { height: height ?? "auto", width: width ?? "auto" };
+ return (
+ {
- setWidth(width + d.width);
- setHeight(height + d.height);
- onNodeResize &&
- onNodeResize({
- height: height + d.height,
- width: width + d.width,
- });
- }}
- >
- {nodeContent}
-
- );
+ handleWrapperClass={`${eccgui}-graphviz__node__resizer--cursorhandles` + " nodrag"}
+ size={size}
+ maxHeight={resizeMaxDimensions?.height ?? undefined}
+ maxWidth={resizeMaxDimensions?.width ?? undefined}
+ enable={resizeDirections.bottom && resizeDirections.right ? { bottomRight: true } : resizeDirections}
+ scale={zoom}
+ onResize={(_0, _1, _2, d) => {
+ if (nodeContentRef.current) {
+ const nextWidth = resizeDirections.right
+ ? (width ?? originalSize.current.width ?? 0) + d.width
+ : undefined;
+ const nextHeight = resizeDirections.bottom
+ ? (height ?? originalSize.current.height ?? 0) + d.height
+ : undefined;
+ if (nextWidth || nextHeight) {
+ const currentClassNames = nodeContentRef.current.classList;
+ currentClassNames.add("was-resized");
+ }
+ if (nextWidth) {
+ nodeContentRef.current.style.width = `${nextWidth}px`;
+ }
+ if (nextHeight) {
+ nodeContentRef.current.style.height = `${nextHeight}px`;
+ }
+ }
+ }}
+ onResizeStop={(_0, _1, _2, d) => {
+ const nextWidth = validateWidth((width ?? originalSize.current.width ?? 0) + d.width);
+ const nextHeight = validateHeight((height ?? originalSize.current.height ?? 0) + d.height);
+ setWidth(nextWidth);
+ setHeight(nextHeight);
+ if (onNodeResize) {
+ onNodeResize({
+ height: nextHeight,
+ width: nextWidth,
+ });
+ }
+ }}
+ >
+ {nodeContent}
+
+ );
+ };
- return isResizeable ? resizableNode() : nodeContent;
+ return isResizable ? resizableNode() : nodeContent;
}
const evaluateHighlightColors = (
@@ -644,7 +762,7 @@ const evaluateHighlightColors = (
let customColor = Color("#ffffff");
try {
customColor = Color(color);
- } catch (ex) {
+ } catch {
// eslint-disable-next-line no-console
console.warn("Received invalid color for highlight: " + color);
}
diff --git a/src/extensions/react-flow/nodes/_nodes.scss b/src/extensions/react-flow/nodes/_nodes.scss
index f7207f958..87ec1b5a1 100644
--- a/src/extensions/react-flow/nodes/_nodes.scss
+++ b/src/extensions/react-flow/nodes/_nodes.scss
@@ -49,6 +49,38 @@
&:hover {
box-shadow: 0 0 0 6 * $reactflow-node-border-width rgba($reactflow-edge-stroke-color-selected, 0.05);
}
+
+ &.was-resized.is-resizable-vertical {
+ max-height: unset;
+ }
+}
+
+.#{$eccgui}-graphviz__node--tiny {
+ width: $reactflow-node-basesize * 4;
+ min-height: $reactflow-node-basesize;
+ max-height: $reactflow-node-basesize * 4;
+}
+
+.#{$eccgui}-graphviz__node--small {
+ width: $reactflow-node-basesize * 5;
+ min-height: $reactflow-node-basesize;
+ max-height: $reactflow-node-basesize * 8;
+}
+
+.#{$eccgui}-graphviz__node--medium {
+ width: $reactflow-node-basesize * 8;
+ min-height: $reactflow-node-basesize;
+ max-height: $reactflow-node-basesize * 13;
+}
+
+.#{$eccgui}-graphviz__node--large {
+ width: $reactflow-node-basesize * 13;
+ min-height: $reactflow-node-basesize;
+ max-height: $reactflow-node-basesize * 13;
+}
+
+.#{$eccgui}-graphviz__node--fullwidth {
+ width: 100%;
}
.#{$eccgui}-graphviz__node--minimal-rectangular,
@@ -200,54 +232,58 @@
background-color: $reactflow-node-background-color;
}
-// Node sizes
+// Node Resizer
-.#{$eccgui}-graphviz__node__resizer,
-.#{$eccgui}-graphviz__node.is-resizeable {
+.#{$eccgui}-graphviz__node.is-resizable-horizontal,
+.#{$eccgui}-graphviz__node.is-resizable-vertical {
min-width: 2.5 * $reactflow-node-basesize;
min-height: 2.5 * $reactflow-node-basesize;
}
+.#{$eccgui}-graphviz__node__resizer--cursorhandles {
+ position: absolute;
+ height: 0;
+ width: 0;
+ bottom: 0;
+ right: 0;
+ overflow: visible;
+ display: none;
+
+ & > div {
+ overflow: visible;
+ z-index: 0 !important;
+ height: $reactflow-cursor-delimiter-offset * 3 !important;
+ width: $reactflow-cursor-delimiter-offset * 3 !important;
+ top: unset !important;
+ left: unset !important;
+ bottom: -1 * $reactflow-cursor-delimiter-offset !important;
+ right: -1 * $reactflow-cursor-delimiter-offset !important;
+ border-bottom: $reactflow-node-border-width solid $reactflow-node-border-color;
+ border-right: $reactflow-node-border-width solid $reactflow-node-border-color;
+
+ .#{$eccgui}-graphviz__node__resizer--right:not(.#{$eccgui}-graphviz__node__resizer--bottom) & {
+ bottom: 0 !important;
+ border-bottom: none;
+ }
+ .#{$eccgui}-graphviz__node__resizer--bottom:not(.#{$eccgui}-graphviz__node__resizer--right) & {
+ right: 0 !important;
+ border-right: none;
+ }
+ }
+}
+
.#{$eccgui}-graphviz__node__resizer {
+ min-width: 2.5 * $reactflow-node-basesize;
+ min-height: 2.5 * $reactflow-node-basesize;
+
.selected &,
&:hover {
.#{$eccgui}-graphviz__node__resizer--cursorhandles {
- & > div {
- overflow: auto;
- resize: both;
- }
+ display: block;
}
}
}
-.#{$eccgui}-graphviz__node--tiny:not(.is-resizeable) {
- width: $reactflow-node-basesize * 4;
- min-height: $reactflow-node-basesize;
- max-height: $reactflow-node-basesize * 4;
-}
-
-.#{$eccgui}-graphviz__node--small:not(.is-resizeable) {
- width: $reactflow-node-basesize * 5;
- min-height: $reactflow-node-basesize;
- max-height: $reactflow-node-basesize * 8;
-}
-
-.#{$eccgui}-graphviz__node--medium:not(.is-resizeable) {
- width: $reactflow-node-basesize * 8;
- min-height: $reactflow-node-basesize;
- max-height: $reactflow-node-basesize * 13;
-}
-
-.#{$eccgui}-graphviz__node--large:not(.is-resizeable) {
- width: $reactflow-node-basesize * 13;
- min-height: $reactflow-node-basesize;
- max-height: $reactflow-node-basesize * 13;
-}
-
-.#{$eccgui}-graphviz__node--fullwidth:not(.is-resizeable) {
- width: 100%;
-}
-
// Node border overwrites
.#{$eccgui}-graphviz__node--border-solid {
diff --git a/src/extensions/react-flow/nodes/nodeUtils.tsx b/src/extensions/react-flow/nodes/nodeUtils.tsx
index 7fa6cc651..f5cdba92e 100644
--- a/src/extensions/react-flow/nodes/nodeUtils.tsx
+++ b/src/extensions/react-flow/nodes/nodeUtils.tsx
@@ -1,28 +1,30 @@
import { CSSProperties } from "react";
-import { Node } from "react-flow-renderer";
+import {Node, XYPosition} from "react-flow-renderer";
import Color from "color";
+import {NodeDimensions} from "./NodeContent";
-type IStickyNote = {
+/** A sticky note for display in the UI as returned from the backend. */
+export interface StickyNote {
id: string;
content: string;
color: string;
- position: number[];
- dimension: number[];
-};
+ position: XYPosition & NodeDimensions;
+}
/**
* converts a react-flow node with
- * type = "stickynote" to IStickyNote type compatible with the backend
+ * type = "stickynote" to StickyNote type compatible with the backend
* @param node
- * @returns {IStickyNote}
+ * @returns {StickyNote}
*/
-const transformNodeToStickyNode = (node: Node): IStickyNote => ({
- id: node.id,
- content: node.data.businessData.stickyNote!,
- position: [node.position.x, node.position.y],
- dimension: [node.data.nodeDimensions?.width!, node.data.nodeDimensions?.height!],
- color: node.data.style?.borderColor!,
-});
+const transformNodeToStickyNode = (node: Node): StickyNote => {
+ return {
+ id: node.id,
+ content: node.data.businessData.stickyNote!,
+ position: {x: node.position.x, y: node.position.y, width: node.data.nodeDimensions?.width, height: node.data.nodeDimensions?.height},
+ color: node.data.style?.borderColor!,
+ }
+};
/**
* takes in a hex color string and returns
diff --git a/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx b/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx
index 828fbf8b0..28f75f7de 100644
--- a/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx
+++ b/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx
@@ -15,9 +15,9 @@ import {
OverflowText,
Tag,
TagList,
+ NodeContent,
+ NodeContentExtension,
} from "./../../../../index";
-import { NodeContent } from "./../NodeContent";
-import { NodeContentExtension } from "./../NodeContentExtension";
import {
Default as ContentExtensionExample,
SlideOutOfNode as ContentExtensionExampleSlideOut,
@@ -103,11 +103,12 @@ export default {
},
intent: {
control: "select",
- options: { "Not set": undefined, ...Definitions },
+ options: [ undefined, ...Object.values(Definitions) ],
},
highlightColor: {
control: "select",
- options: {
+ options: [ "Not set", "Default", "Alternate", "Default + alternate", "Custom (red)", "Default + Custom (red)", "Custom (green) + alternate", "Custom (purple) + custom (yellow)"],
+ mapping: {
"Not set": undefined,
Default: "default",
Alternate: "alternate",
@@ -118,8 +119,8 @@ export default {
"Custom (purple) + custom (yellow)": ["purple", "yellow"],
},
},
- content: { control: "none" },
- footerContent: { control: "none" },
+ content: { control: false },
+ footerContent: { control: false },
isConnectable: { table: { disable: true } },
targetPosition: { table: { disable: true } },
sourcePosition: { table: { disable: true } },
@@ -128,18 +129,52 @@ export default {
},
} as Meta;
+let forcedUpdateKey = 0; // @see https://github.com/storybookjs/storybook/issues/13375#issuecomment-1291011856
const NodeContentExample = (args: any) => {
const [reactflowInstance, setReactflowInstance] = useState(null);
const [elements, setElements] = useState([] as Elements);
- //const [edgeTools, setEdgeTools] = useState(<>>);
+
+ const defaultElement = {
+ id: "example-1",
+ type: "default",
+ data: args,
+ position: { x: 50, y: 50 },
+ };
useEffect(() => {
+ const sizeReset = {}
+ if (args.resizeMaxDimensions && args.resizeDirections) {
+ sizeReset["onNodeResize"] = (dimensions) => {
+ // eslint-disable-next-line no-console
+ console.log("call onNodeResize method")
+ if (args.onNodeResize) {
+ args.onNodeResize(dimensions);
+ }
+ if (dimensions?.width || dimensions?.height) {
+ sizeReset["menuButtons"] = {
+ // eslint-disable-next-line no-console
+ console.log("reset size");
+ setElements([
+ {
+ ...defaultElement,
+ data: {...defaultElement.data, ...sizeReset, ...{ nodeDimensions: {} }},
+ },
+ ] as Elements);
+
+ }}/>;
+ }
+ setElements([
+ {
+ ...defaultElement,
+ data: {...defaultElement.data, ...sizeReset, ...{ nodeDimensions: dimensions }},
+ },
+ ] as Elements);
+ }
+ }
setElements([
{
- id: "example-1",
- type: "default",
- data: args,
- position: { x: 50, y: 50 },
+ ...defaultElement,
+ data: {...defaultElement.data, ...sizeReset},
},
] as Elements);
}, [args]);
@@ -166,7 +201,7 @@ const NodeContentExample = (args: any) => {
);
};
-const Template: StoryFn = (args) => ;
+const Template: StoryFn = (args) => ;
export const Default = Template.bind({});
Default.args = {
@@ -206,7 +241,11 @@ Default.args = {
export const Resizeable = Template.bind({});
Resizeable.args = {
...Default.args,
+ resizeMaxDimensions: { width: 1000, height: 500 },
+ nodeDimensions: {},
+ resizeDirections: { bottom: true, right: true },
onNodeResize: (dimensions) => {
+ // eslint-disable-next-line no-console
console.log("onNodeResize", `new dimensions: ${dimensions.width}x${dimensions.height}`);
},
};
diff --git a/yarn.lock b/yarn.lock
index b37d2b969..a4101cf79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -43,7 +43,7 @@
"@babel/highlight" "^7.24.7"
picocolors "^1.0.0"
-"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0":
+"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
@@ -62,11 +62,16 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb"
integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==
-"@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0":
+"@babel/compat-data@^7.25.9":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e"
integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==
+"@babel/compat-data@^7.26.8":
+ version "7.26.8"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
+ integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
+
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.23.0":
version "7.23.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1"
@@ -88,7 +93,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/core@^7.23.7", "@babel/core@^7.24.4":
+"@babel/core@^7.24.4":
version "7.25.2"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77"
integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==
@@ -130,6 +135,27 @@
json5 "^2.2.3"
semver "^6.3.1"
+"@babel/core@^7.26.10":
+ version "7.26.10"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9"
+ integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.26.2"
+ "@babel/generator" "^7.26.10"
+ "@babel/helper-compilation-targets" "^7.26.5"
+ "@babel/helper-module-transforms" "^7.26.0"
+ "@babel/helpers" "^7.26.10"
+ "@babel/parser" "^7.26.10"
+ "@babel/template" "^7.26.9"
+ "@babel/traverse" "^7.26.10"
+ "@babel/types" "^7.26.10"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
"@babel/generator@^7.23.0", "@babel/generator@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
@@ -161,6 +187,17 @@
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^3.0.2"
+"@babel/generator@^7.26.10", "@babel/generator@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c"
+ integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==
+ dependencies:
+ "@babel/parser" "^7.27.0"
+ "@babel/types" "^7.27.0"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^3.0.2"
+
"@babel/generator@^7.7.2":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339"
@@ -171,7 +208,7 @@
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
-"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5":
+"@babel/helper-annotate-as-pure@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
@@ -200,14 +237,6 @@
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9"
- integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==
- dependencies:
- "@babel/traverse" "^7.25.9"
- "@babel/types" "^7.25.9"
-
"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
@@ -241,7 +270,18 @@
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6":
+"@babel/helper-compilation-targets@^7.26.5":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880"
+ integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==
+ dependencies:
+ "@babel/compat-data" "^7.26.8"
+ "@babel/helper-validator-option" "^7.25.9"
+ browserslist "^4.24.0"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6":
version "7.23.10"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea"
integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==
@@ -282,6 +322,19 @@
"@babel/traverse" "^7.25.9"
semver "^6.3.1"
+"@babel/helper-create-class-features-plugin@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30"
+ integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-member-expression-to-functions" "^7.25.9"
+ "@babel/helper-optimise-call-expression" "^7.25.9"
+ "@babel/helper-replace-supers" "^7.26.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
+ "@babel/traverse" "^7.27.0"
+ semver "^6.3.1"
+
"@babel/helper-create-regexp-features-plugin@^7.18.6":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1"
@@ -320,6 +373,17 @@
lodash.debounce "^4.0.8"
resolve "^1.14.2"
+"@babel/helper-define-polyfill-provider@^0.6.3":
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab"
+ integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+
"@babel/helper-environment-visitor@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
@@ -437,7 +501,7 @@
dependencies:
"@babel/types" "^7.25.9"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
@@ -452,6 +516,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46"
integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==
+"@babel/helper-plugin-utils@^7.26.5":
+ version "7.26.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35"
+ integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==
+
"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0":
version "7.25.0"
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e"
@@ -497,6 +566,15 @@
"@babel/helper-optimise-call-expression" "^7.25.9"
"@babel/traverse" "^7.25.9"
+"@babel/helper-replace-supers@^7.26.5":
+ version "7.26.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d"
+ integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.25.9"
+ "@babel/helper-optimise-call-expression" "^7.25.9"
+ "@babel/traverse" "^7.26.5"
+
"@babel/helper-simple-access@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
@@ -512,14 +590,6 @@
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
-"@babel/helper-simple-access@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739"
- integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==
- dependencies:
- "@babel/traverse" "^7.25.9"
- "@babel/types" "^7.25.9"
-
"@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
@@ -613,30 +683,13 @@
"@babel/traverse" "^7.25.9"
"@babel/types" "^7.25.9"
-"@babel/helpers@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
- integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
- dependencies:
- "@babel/template" "^7.23.9"
- "@babel/traverse" "^7.23.9"
- "@babel/types" "^7.23.9"
-
-"@babel/helpers@^7.25.0":
- version "7.25.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a"
- integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==
+"@babel/helpers@^7.23.9", "@babel/helpers@^7.25.0", "@babel/helpers@^7.26.0", "@babel/helpers@^7.26.10":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808"
+ integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==
dependencies:
- "@babel/template" "^7.25.0"
- "@babel/types" "^7.25.0"
-
-"@babel/helpers@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4"
- integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==
- dependencies:
- "@babel/template" "^7.25.9"
- "@babel/types" "^7.26.0"
+ "@babel/template" "^7.27.0"
+ "@babel/types" "^7.27.0"
"@babel/highlight@^7.18.6", "@babel/highlight@^7.23.4":
version "7.23.4"
@@ -681,6 +734,13 @@
dependencies:
"@babel/types" "^7.26.0"
+"@babel/parser@^7.26.10", "@babel/parser@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec"
+ integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==
+ dependencies:
+ "@babel/types" "^7.27.0"
+
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3":
version "7.25.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f"
@@ -759,37 +819,11 @@
"@babel/helper-plugin-utils" "^7.25.9"
"@babel/traverse" "^7.25.9"
-"@babel/plugin-proposal-class-properties@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3"
- integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-proposal-private-methods@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea"
- integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
version "7.21.0-placeholder-for-preset-env.2"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
-"@babel/plugin-proposal-private-property-in-object@^7.21.11":
- version "7.21.11"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c"
- integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-create-class-features-plugin" "^7.21.0"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
@@ -1018,14 +1052,14 @@
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/traverse" "^7.25.4"
-"@babel/plugin-transform-async-generator-functions@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2"
- integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==
+"@babel/plugin-transform-async-generator-functions@^7.26.8":
+ version "7.26.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8"
+ integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/helper-remap-async-to-generator" "^7.25.9"
- "@babel/traverse" "^7.25.9"
+ "@babel/traverse" "^7.26.8"
"@babel/plugin-transform-async-to-generator@^7.24.7":
version "7.24.7"
@@ -1052,12 +1086,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.7"
-"@babel/plugin-transform-block-scoped-functions@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458"
- integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==
+"@babel/plugin-transform-block-scoped-functions@^7.26.5":
+ version "7.26.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e"
+ integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/plugin-transform-block-scoping@^7.25.0":
version "7.25.0"
@@ -1237,12 +1271,11 @@
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7"
"@babel/helper-plugin-utils" "^7.24.7"
-"@babel/plugin-transform-exponentiation-operator@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f"
- integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==
+"@babel/plugin-transform-exponentiation-operator@^7.26.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc"
+ integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9"
"@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-export-namespace-from@^7.24.7":
@@ -1284,12 +1317,12 @@
"@babel/helper-plugin-utils" "^7.24.7"
"@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
-"@babel/plugin-transform-for-of@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755"
- integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==
+"@babel/plugin-transform-for-of@^7.26.9":
+ version "7.26.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56"
+ integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
"@babel/plugin-transform-function-name@^7.25.1":
@@ -1402,14 +1435,13 @@
"@babel/helper-plugin-utils" "^7.24.8"
"@babel/helper-simple-access" "^7.24.7"
-"@babel/plugin-transform-modules-commonjs@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686"
- integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==
+"@babel/plugin-transform-modules-commonjs@^7.26.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb"
+ integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==
dependencies:
- "@babel/helper-module-transforms" "^7.25.9"
+ "@babel/helper-module-transforms" "^7.26.0"
"@babel/helper-plugin-utils" "^7.25.9"
- "@babel/helper-simple-access" "^7.25.9"
"@babel/plugin-transform-modules-systemjs@^7.25.0":
version "7.25.0"
@@ -1493,12 +1525,12 @@
"@babel/helper-plugin-utils" "^7.24.7"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949"
- integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==
+"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6":
+ version "7.26.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe"
+ integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/plugin-transform-numeric-separator@^7.24.7":
version "7.24.7"
@@ -1784,12 +1816,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.7"
-"@babel/plugin-transform-template-literals@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1"
- integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==
+"@babel/plugin-transform-template-literals@^7.26.8":
+ version "7.26.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5"
+ integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/plugin-transform-typeof-symbol@^7.24.8":
version "7.24.8"
@@ -1798,12 +1830,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.8"
-"@babel/plugin-transform-typeof-symbol@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b"
- integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==
+"@babel/plugin-transform-typeof-symbol@^7.26.7":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae"
+ integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/plugin-transform-typescript@^7.23.3":
version "7.23.6"
@@ -1815,14 +1847,14 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-typescript" "^7.23.3"
-"@babel/plugin-transform-typescript@^7.25.9":
- version "7.25.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz#69267905c2b33c2ac6d8fe765e9dc2ddc9df3849"
- integrity sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==
+"@babel/plugin-transform-typescript@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz#a29fd3481da85601c7e34091296e9746d2cccba8"
+ integrity sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.25.9"
- "@babel/helper-create-class-features-plugin" "^7.25.9"
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-create-class-features-plugin" "^7.27.0"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
"@babel/plugin-syntax-typescript" "^7.25.9"
@@ -1977,14 +2009,14 @@
core-js-compat "^3.37.1"
semver "^6.3.1"
-"@babel/preset-env@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1"
- integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==
+"@babel/preset-env@^7.26.9":
+ version "7.26.9"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3"
+ integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==
dependencies:
- "@babel/compat-data" "^7.26.0"
- "@babel/helper-compilation-targets" "^7.25.9"
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/compat-data" "^7.26.8"
+ "@babel/helper-compilation-targets" "^7.26.5"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/helper-validator-option" "^7.25.9"
"@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9"
"@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9"
@@ -1996,9 +2028,9 @@
"@babel/plugin-syntax-import-attributes" "^7.26.0"
"@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
"@babel/plugin-transform-arrow-functions" "^7.25.9"
- "@babel/plugin-transform-async-generator-functions" "^7.25.9"
+ "@babel/plugin-transform-async-generator-functions" "^7.26.8"
"@babel/plugin-transform-async-to-generator" "^7.25.9"
- "@babel/plugin-transform-block-scoped-functions" "^7.25.9"
+ "@babel/plugin-transform-block-scoped-functions" "^7.26.5"
"@babel/plugin-transform-block-scoping" "^7.25.9"
"@babel/plugin-transform-class-properties" "^7.25.9"
"@babel/plugin-transform-class-static-block" "^7.26.0"
@@ -2009,21 +2041,21 @@
"@babel/plugin-transform-duplicate-keys" "^7.25.9"
"@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9"
"@babel/plugin-transform-dynamic-import" "^7.25.9"
- "@babel/plugin-transform-exponentiation-operator" "^7.25.9"
+ "@babel/plugin-transform-exponentiation-operator" "^7.26.3"
"@babel/plugin-transform-export-namespace-from" "^7.25.9"
- "@babel/plugin-transform-for-of" "^7.25.9"
+ "@babel/plugin-transform-for-of" "^7.26.9"
"@babel/plugin-transform-function-name" "^7.25.9"
"@babel/plugin-transform-json-strings" "^7.25.9"
"@babel/plugin-transform-literals" "^7.25.9"
"@babel/plugin-transform-logical-assignment-operators" "^7.25.9"
"@babel/plugin-transform-member-expression-literals" "^7.25.9"
"@babel/plugin-transform-modules-amd" "^7.25.9"
- "@babel/plugin-transform-modules-commonjs" "^7.25.9"
+ "@babel/plugin-transform-modules-commonjs" "^7.26.3"
"@babel/plugin-transform-modules-systemjs" "^7.25.9"
"@babel/plugin-transform-modules-umd" "^7.25.9"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9"
"@babel/plugin-transform-new-target" "^7.25.9"
- "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6"
"@babel/plugin-transform-numeric-separator" "^7.25.9"
"@babel/plugin-transform-object-rest-spread" "^7.25.9"
"@babel/plugin-transform-object-super" "^7.25.9"
@@ -2039,17 +2071,17 @@
"@babel/plugin-transform-shorthand-properties" "^7.25.9"
"@babel/plugin-transform-spread" "^7.25.9"
"@babel/plugin-transform-sticky-regex" "^7.25.9"
- "@babel/plugin-transform-template-literals" "^7.25.9"
- "@babel/plugin-transform-typeof-symbol" "^7.25.9"
+ "@babel/plugin-transform-template-literals" "^7.26.8"
+ "@babel/plugin-transform-typeof-symbol" "^7.26.7"
"@babel/plugin-transform-unicode-escapes" "^7.25.9"
"@babel/plugin-transform-unicode-property-regex" "^7.25.9"
"@babel/plugin-transform-unicode-regex" "^7.25.9"
"@babel/plugin-transform-unicode-sets-regex" "^7.25.9"
"@babel/preset-modules" "0.1.6-no-external-plugins"
babel-plugin-polyfill-corejs2 "^0.4.10"
- babel-plugin-polyfill-corejs3 "^0.10.6"
+ babel-plugin-polyfill-corejs3 "^0.11.0"
babel-plugin-polyfill-regenerator "^0.6.1"
- core-js-compat "^3.38.1"
+ core-js-compat "^3.40.0"
semver "^6.3.1"
"@babel/preset-flow@^7.22.15":
@@ -2102,16 +2134,16 @@
"@babel/plugin-transform-modules-commonjs" "^7.23.3"
"@babel/plugin-transform-typescript" "^7.23.3"
-"@babel/preset-typescript@^7.26.0":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d"
- integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==
+"@babel/preset-typescript@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz#4dcb8827225975f4290961b0b089f9c694ca50c7"
+ integrity sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.26.5"
"@babel/helper-validator-option" "^7.25.9"
"@babel/plugin-syntax-jsx" "^7.25.9"
- "@babel/plugin-transform-modules-commonjs" "^7.25.9"
- "@babel/plugin-transform-typescript" "^7.25.9"
+ "@babel/plugin-transform-modules-commonjs" "^7.26.3"
+ "@babel/plugin-transform-typescript" "^7.27.0"
"@babel/register@^7.22.15":
version "7.23.7"
@@ -2129,62 +2161,13 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@^7.12.5":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
- integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
- dependencies:
- regenerator-runtime "^0.13.11"
-
-"@babel/runtime@^7.15.4", "@babel/runtime@^7.16.7":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580"
- integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==
- dependencies:
- regenerator-runtime "^0.13.4"
-
-"@babel/runtime@^7.17.8", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7"
- integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==
- dependencies:
- regenerator-runtime "^0.14.0"
-
-"@babel/runtime@^7.18.9":
- version "7.20.13"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b"
- integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==
- dependencies:
- regenerator-runtime "^0.13.11"
-
-"@babel/runtime@^7.24.5":
- version "7.26.0"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1"
- integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==
- dependencies:
- regenerator-runtime "^0.14.0"
-
-"@babel/runtime@^7.24.7":
- version "7.25.4"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.4.tgz#6ef37d678428306e7d75f054d5b1bdb8cf8aa8ee"
- integrity sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==
- dependencies:
- regenerator-runtime "^0.14.0"
-
-"@babel/runtime@^7.3.1":
- version "7.24.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c"
- integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==
+"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.9", "@babel/runtime@^7.24.5", "@babel/runtime@^7.24.7", "@babel/runtime@^7.26.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762"
+ integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
- version "7.20.1"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9"
- integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==
- dependencies:
- regenerator-runtime "^0.13.10"
-
"@babel/template@^7.22.15", "@babel/template@^7.23.9":
version "7.23.9"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
@@ -2212,6 +2195,15 @@
"@babel/parser" "^7.25.9"
"@babel/types" "^7.25.9"
+"@babel/template@^7.26.9", "@babel/template@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4"
+ integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/parser" "^7.27.0"
+ "@babel/types" "^7.27.0"
+
"@babel/template@^7.3.3":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31"
@@ -2279,6 +2271,19 @@
debug "^4.3.1"
globals "^11.1.0"
+"@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70"
+ integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/generator" "^7.27.0"
+ "@babel/parser" "^7.27.0"
+ "@babel/template" "^7.27.0"
+ "@babel/types" "^7.27.0"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.0", "@babel/types@^7.4.4":
version "7.23.9"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
@@ -2305,6 +2310,14 @@
"@babel/helper-string-parser" "^7.25.9"
"@babel/helper-validator-identifier" "^7.25.9"
+"@babel/types@^7.26.10", "@babel/types@^7.27.0":
+ version "7.27.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559"
+ integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+
"@babel/types@^7.3.3":
version "7.18.8"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.8.tgz#c5af199951bf41ba4a6a9a6d0d8ad722b30cd42f"
@@ -2684,125 +2697,130 @@
resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz#ea61ba7bb24be3502c6aaa3190ed231f4633a81e"
integrity sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==
-"@esbuild/aix-ppc64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c"
- integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==
-
-"@esbuild/android-arm64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0"
- integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==
-
-"@esbuild/android-arm@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810"
- integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==
-
-"@esbuild/android-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705"
- integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==
-
-"@esbuild/darwin-arm64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd"
- integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==
-
-"@esbuild/darwin-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107"
- integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==
-
-"@esbuild/freebsd-arm64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7"
- integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==
-
-"@esbuild/freebsd-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93"
- integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==
-
-"@esbuild/linux-arm64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75"
- integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==
-
-"@esbuild/linux-arm@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d"
- integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==
-
-"@esbuild/linux-ia32@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb"
- integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==
-
-"@esbuild/linux-loong64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c"
- integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==
-
-"@esbuild/linux-mips64el@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3"
- integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==
-
-"@esbuild/linux-ppc64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e"
- integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==
-
-"@esbuild/linux-riscv64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25"
- integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==
-
-"@esbuild/linux-s390x@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319"
- integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==
-
-"@esbuild/linux-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef"
- integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==
-
-"@esbuild/netbsd-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c"
- integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==
-
-"@esbuild/openbsd-arm64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2"
- integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==
-
-"@esbuild/openbsd-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf"
- integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==
-
-"@esbuild/sunos-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4"
- integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==
-
-"@esbuild/win32-arm64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b"
- integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==
-
-"@esbuild/win32-ia32@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103"
- integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==
-
-"@esbuild/win32-x64@0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244"
- integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==
+"@esbuild/aix-ppc64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz#c33cf6bbee34975626b01b80451cbb72b4c6c91d"
+ integrity sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==
+
+"@esbuild/android-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz#ea766015c7d2655164f22100d33d7f0308a28d6d"
+ integrity sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==
+
+"@esbuild/android-arm@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.1.tgz#e84d2bf2fe2e6177a0facda3a575b2139fd3cb9c"
+ integrity sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==
+
+"@esbuild/android-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.1.tgz#58337bee3bc6d78d10425e5500bd11370cfdfbed"
+ integrity sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==
+
+"@esbuild/darwin-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz#a46805c1c585d451aa83be72500bd6e8495dd591"
+ integrity sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==
+
+"@esbuild/darwin-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz#0643e003bb238c63fc93ddbee7d26a003be3cd98"
+ integrity sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==
+
+"@esbuild/freebsd-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz#cff18da5469c09986b93e87979de5d6872fe8f8e"
+ integrity sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==
+
+"@esbuild/freebsd-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz#362fc09c2de14987621c1878af19203c46365dde"
+ integrity sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==
+
+"@esbuild/linux-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz#aa90d5b02efc97a271e124e6d1cea490634f7498"
+ integrity sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==
+
+"@esbuild/linux-arm@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz#dfcefcbac60a20918b19569b4b657844d39db35a"
+ integrity sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==
+
+"@esbuild/linux-ia32@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz#6f9527077ccb7953ed2af02e013d4bac69f13754"
+ integrity sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==
+
+"@esbuild/linux-loong64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz#287d2412a5456e5860c2839d42a4b51284d1697c"
+ integrity sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==
+
+"@esbuild/linux-mips64el@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz#530574b9e1bc5d20f7a4f44c5f045e26f3783d57"
+ integrity sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==
+
+"@esbuild/linux-ppc64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz#5d7e6b283a0b321ea42c6bc0abeb9eb99c1f5589"
+ integrity sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==
+
+"@esbuild/linux-riscv64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz#14fa0cd073c26b4ee2465d18cd1e18eea7859fa8"
+ integrity sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==
+
+"@esbuild/linux-s390x@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz#e677b4b9d1b384098752266ccaa0d52a420dc1aa"
+ integrity sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==
+
+"@esbuild/linux-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz#f1c796b78fff5ce393658313e8c58613198d9954"
+ integrity sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==
+
+"@esbuild/netbsd-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz#0d280b7dfe3973f111b02d5fe9f3063b92796d29"
+ integrity sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==
+
+"@esbuild/netbsd-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz#be663893931a4bb3f3a009c5cc24fa9681cc71c0"
+ integrity sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==
+
+"@esbuild/openbsd-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz#d9021b884233673a05dc1cc26de0bf325d824217"
+ integrity sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==
+
+"@esbuild/openbsd-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz#9f1dc1786ed2e2938c404b06bcc48be9a13250de"
+ integrity sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==
+
+"@esbuild/sunos-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz#89aac24a4b4115959b3f790192cf130396696c27"
+ integrity sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==
+
+"@esbuild/win32-arm64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz#354358647a6ea98ea6d243bf48bdd7a434999582"
+ integrity sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==
+
+"@esbuild/win32-ia32@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz#8cea7340f2647eba951a041dc95651e3908cd4cb"
+ integrity sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==
+
+"@esbuild/win32-x64@0.25.1":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz#7d79922cb2d88f9048f06393dbf62d2e4accb584"
+ integrity sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==
"@eslint-community/eslint-utils@^4.2.0":
version "4.4.0"
@@ -3434,6 +3452,13 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
+"@rdfjs/types@^1.1.0":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-1.1.2.tgz#9c2f9848c44c26d383bed2a808571de3b93b808d"
+ integrity sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==
+ dependencies:
+ "@types/node" "*"
+
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -3458,10 +3483,10 @@
dependencies:
"@sinonjs/commons" "^3.0.0"
-"@storybook/addon-actions@8.4.7", "@storybook/addon-actions@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.4.7.tgz#210c6bb5a7e17c3664c300b4b69b6243ec34b9cd"
- integrity sha512-mjtD5JxcPuW74T6h7nqMxWTvDneFtokg88p6kQ5OnC1M259iAXb//yiSZgu/quunMHPCXSiqn4FNOSgASTSbsA==
+"@storybook/addon-actions@8.6.9", "@storybook/addon-actions@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.6.9.tgz#4295352a4e461f205b3d7061e70f8520ce94c248"
+ integrity sha512-H2v17sMbSl8jhSulPxcOyChsFbzik9E7mgCWIf4P114KcIUokWLVuALnSOeqHME6lY0pPBZs3DgvVVMVMm7zNw==
dependencies:
"@storybook/global" "^5.0.0"
"@types/uuid" "^9.0.1"
@@ -3469,131 +3494,128 @@
polished "^4.2.2"
uuid "^9.0.0"
-"@storybook/addon-backgrounds@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.4.7.tgz#56856bdafc5a2ba18cc19422320883c9e8f66c1c"
- integrity sha512-I4/aErqtFiazcoWyKafOAm3bLpxTj6eQuH/woSbk1Yx+EzN+Dbrgx1Updy8//bsNtKkcrXETITreqHC+a57DHQ==
+"@storybook/addon-backgrounds@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.9.tgz#27199228a01728154c689929ef4142c5949fa036"
+ integrity sha512-DiNpKJq4sEqTCGwwGs8fwi1hxBniCQMxsJFfrYlIx0HTyfA7AMROqP9fyv1aCV1JWDiwlL+cwCurkoyhpuZioQ==
dependencies:
"@storybook/global" "^5.0.0"
memoizerific "^1.11.3"
ts-dedent "^2.0.0"
-"@storybook/addon-controls@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.4.7.tgz#0c2ace0c7056248577f08f90471f29e861b485be"
- integrity sha512-377uo5IsJgXLnQLJixa47+11V+7Wn9KcDEw+96aGCBCfLbWNH8S08tJHHnSu+jXg9zoqCAC23MetntVp6LetHA==
+"@storybook/addon-controls@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.6.9.tgz#3bc31709d1acd884e97d5d37b360feb727ab5ac1"
+ integrity sha512-YXBYsbHqdYhmrbGI+wv9LAr/LlKnPt9f9GL+9rw82lnYadWObYxzUxs+PPLNO5tc14fd2g+FMVHOfovaRdFvrQ==
dependencies:
"@storybook/global" "^5.0.0"
dequal "^2.0.2"
ts-dedent "^2.0.0"
-"@storybook/addon-docs@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.4.7.tgz#556515da1049f97023427301e11ecb52d0b9dbe7"
- integrity sha512-NwWaiTDT5puCBSUOVuf6ME7Zsbwz7Y79WF5tMZBx/sLQ60vpmJVQsap6NSjvK1Ravhc21EsIXqemAcBjAWu80w==
+"@storybook/addon-docs@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.6.9.tgz#9f813d4d58714d3d597b28f5d73f1bba4f4d3535"
+ integrity sha512-yAP59G5Vd+E6O9KLfBR5ALdOFA5yEZ0n1f8Ne9jwF+NGu1U8KNIfWnZmBYaBGe+bpYn0CWV5AfdFvw83bzHYpw==
dependencies:
"@mdx-js/react" "^3.0.0"
- "@storybook/blocks" "8.4.7"
- "@storybook/csf-plugin" "8.4.7"
- "@storybook/react-dom-shim" "8.4.7"
- react "^16.8.0 || ^17.0.0 || ^18.0.0"
- react-dom "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@storybook/blocks" "8.6.9"
+ "@storybook/csf-plugin" "8.6.9"
+ "@storybook/react-dom-shim" "8.6.9"
+ react "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ react-dom "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
ts-dedent "^2.0.0"
-"@storybook/addon-essentials@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.4.7.tgz#381c74230d1b1a209d5fdc017d241c016b98affe"
- integrity sha512-+BtZHCBrYtQKILtejKxh0CDRGIgTl9PumfBOKRaihYb4FX1IjSAxoV/oo/IfEjlkF5f87vouShWsRa8EUauFDw==
- dependencies:
- "@storybook/addon-actions" "8.4.7"
- "@storybook/addon-backgrounds" "8.4.7"
- "@storybook/addon-controls" "8.4.7"
- "@storybook/addon-docs" "8.4.7"
- "@storybook/addon-highlight" "8.4.7"
- "@storybook/addon-measure" "8.4.7"
- "@storybook/addon-outline" "8.4.7"
- "@storybook/addon-toolbars" "8.4.7"
- "@storybook/addon-viewport" "8.4.7"
+"@storybook/addon-essentials@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.6.9.tgz#0a919ad6dc305120c8e1e573b6588442fb9e3795"
+ integrity sha512-n3DSSIjDsVDw7uOatP2remC5SVSIfjwHcLGor85xLd1SQUh98wednM1Iby19qc/QR69UuOL0nB/d5yG1ifh0sA==
+ dependencies:
+ "@storybook/addon-actions" "8.6.9"
+ "@storybook/addon-backgrounds" "8.6.9"
+ "@storybook/addon-controls" "8.6.9"
+ "@storybook/addon-docs" "8.6.9"
+ "@storybook/addon-highlight" "8.6.9"
+ "@storybook/addon-measure" "8.6.9"
+ "@storybook/addon-outline" "8.6.9"
+ "@storybook/addon-toolbars" "8.6.9"
+ "@storybook/addon-viewport" "8.6.9"
ts-dedent "^2.0.0"
-"@storybook/addon-highlight@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.4.7.tgz#06b9752977e38884007e9446f9a2b0c04c873229"
- integrity sha512-whQIDBd3PfVwcUCrRXvCUHWClXe9mQ7XkTPCdPo4B/tZ6Z9c6zD8JUHT76ddyHivixFLowMnA8PxMU6kCMAiNw==
+"@storybook/addon-highlight@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.6.9.tgz#56b9b6389f4e7e5c392944e23fd3703d7df31b21"
+ integrity sha512-I0gBHgaH74wX6yf5S7zUmdfr25hwPONpSAqPPGBSNYu0Jj9Je+ANr1y4T1I3cOaEvf73QntDhCgHC6/iqY90Fw==
dependencies:
"@storybook/global" "^5.0.0"
-"@storybook/addon-jest@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-jest/-/addon-jest-8.4.7.tgz#e358e15ee3620cf913c0acf36cf664871a077f7e"
- integrity sha512-SjYAuW95qzc/3Ac6hynvUpoO6g0EMbaKzJKccw91vYls8kYwfUxZX3joWs3Xlqr85G4ztvgULcCQPKxHgXIYOg==
+"@storybook/addon-jest@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-jest/-/addon-jest-8.6.9.tgz#dab927ff8e4f63a8cd262e1c16b461002c27d11c"
+ integrity sha512-8P4oN8F7qykbqahAYEyTFN3u6zVDzCyDkE+8FeqrtPW/Aej8057vrMq7iA6qdI9ZlrAjSVOPWuQ9AcjDYY90Nw==
dependencies:
"@storybook/global" "^5.0.0"
tiny-invariant "^1.3.1"
ts-dedent "^2.0.0"
upath "^2.0.1"
-"@storybook/addon-links@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-8.4.7.tgz#c38b2b63c3b0308adacff4b0758464a0657154c4"
- integrity sha512-L/1h4dMeMKF+MM0DanN24v5p3faNYbbtOApMgg7SlcBT/tgo3+cAjkgmNpYA8XtKnDezm+T2mTDhB8mmIRZpIQ==
+"@storybook/addon-links@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-8.6.9.tgz#3fef05757bfec4b1d7a77fde44a7bb1dba2eabe6"
+ integrity sha512-cYYlsaMHvEJzGqJ3BO5BpXaa00AxYtEKjJEFP7q/LDZBxMnrChzDygFUTAAbUTHF4U3mNCrl1KuyoUL3nMQquA==
dependencies:
- "@storybook/csf" "^0.1.11"
"@storybook/global" "^5.0.0"
ts-dedent "^2.0.0"
-"@storybook/addon-measure@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.4.7.tgz#9d556ba34b57c13ad8d00bd953b27ec405a64d23"
- integrity sha512-QfvqYWDSI5F68mKvafEmZic3SMiK7zZM8VA0kTXx55hF/+vx61Mm0HccApUT96xCXIgmwQwDvn9gS4TkX81Dmw==
+"@storybook/addon-measure@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.6.9.tgz#4e5d88a9ea7e76f043aef5d8ba9c230623bdc5c9"
+ integrity sha512-2GrHtaYZgM7qeil5/XfNJrdnan7hoLLUyU7w7fph0EVl7tiwmhtp4He0PX9hrT/Abk2HxeCP4WU2fAGwIuTkYg==
dependencies:
"@storybook/global" "^5.0.0"
tiny-invariant "^1.3.1"
-"@storybook/addon-outline@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.4.7.tgz#8a35fe519dd639bb287a370da2222e6ffdce4020"
- integrity sha512-6LYRqUZxSodmAIl8icr585Oi8pmzbZ90aloZJIpve+dBAzo7ydYrSQxxoQEVltXbKf3VeVcrs64ouAYqjisMYA==
+"@storybook/addon-outline@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.6.9.tgz#b5ca80fd45df0b4b264717399c32d0fd0c2fbc20"
+ integrity sha512-YXfiSmjdpXGNYns9NZfdiEbwRfOW/Naym0dIH7s1LAlZZPJvtEYe2hNUOjBfAEm8ZhC1fA1+pZFnspOQHPENlA==
dependencies:
"@storybook/global" "^5.0.0"
ts-dedent "^2.0.0"
-"@storybook/addon-toolbars@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.4.7.tgz#b898d4deaf6f5a58f3b70bd8d136cd4ec2844b79"
- integrity sha512-OSfdv5UZs+NdGB+nZmbafGUWimiweJ/56gShlw8Neo/4jOJl1R3rnRqqY7MYx8E4GwoX+i3GF5C3iWFNQqlDcw==
+"@storybook/addon-toolbars@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.6.9.tgz#10735271e7b570ccae87426be6bf8890a927f5a7"
+ integrity sha512-WOO3CHyzqEql9xnNzi7BUkPRPGHGMCtAR+szGeWqmuj3GZLqXwDOb8HDa3aVMIhVEKhk5jN2zGQmxH53vReBNQ==
-"@storybook/addon-viewport@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.4.7.tgz#e65c53608f52149c06347b395487960605fc4805"
- integrity sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==
+"@storybook/addon-viewport@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.6.9.tgz#d0764f3def5ba4b1394ee5d3168bcca1937346a1"
+ integrity sha512-1xkozyB1zs3eSNTc8ePAMcajUfbKvNMTjs5LYdts2N1Ss0xeZ+K/gphfRg0GaYsNvRYi5piufag/niHCGkT3hA==
dependencies:
memoizerific "^1.11.3"
-"@storybook/addon-webpack5-compiler-babel@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@storybook/addon-webpack5-compiler-babel/-/addon-webpack5-compiler-babel-3.0.3.tgz#4aa5a57ea30f6ab82de90ef5eca8e3e3f05e112a"
- integrity sha512-rVQTTw+oxJltbVKaejIWSHwVKOBJs3au21f/pYXhV0aiNgNhxEa3vr79t/j0j8ox8uJtzM8XYOb7FlkvGfHlwQ==
+"@storybook/addon-webpack5-compiler-babel@^3.0.5":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-webpack5-compiler-babel/-/addon-webpack5-compiler-babel-3.0.5.tgz#730378d44dcc6756005ac59d1e864238852f525e"
+ integrity sha512-9dlc5PrehEFUHqkgj8x+aKtOY9XH9Zk6WBbtpgY/JCQ7waJ2VvhyDnrgJeXfek+WYlSkJElnta6SlqP+XRG0PQ==
dependencies:
- "@babel/core" "^7.23.7"
- babel-loader "^9.1.3"
+ "@babel/core" "^7.26.0"
+ babel-loader "^9.2.1"
-"@storybook/blocks@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.4.7.tgz#ee17f59dd52d11c97c39b0f6b03957085a80ad95"
- integrity sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==
+"@storybook/blocks@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.6.9.tgz#db311d2c9b4d42eee9fc7ba4559e95365e552294"
+ integrity sha512-+vSRkHLD7ho3Wd1WVA1KrYAnv7BnGHOhHWHAgTR5IdeMdgzQxm6+HHeqGB5sncilA0AjVC6udBIgHbCSuD61dA==
dependencies:
- "@storybook/csf" "^0.1.11"
"@storybook/icons" "^1.2.12"
ts-dedent "^2.0.0"
-"@storybook/builder-webpack5@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-8.4.7.tgz#5bc15568716bbf4f45a88fc389e25fa2ce50a8c2"
- integrity sha512-O8LpsQ+4g2x5kh7rI9+jEUdX8k1a5egBQU1lbudmHchqsV0IKiVqBD9LL5Gj3wpit4vB8coSW4ZWTFBw8FQb4Q==
+"@storybook/builder-webpack5@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-8.6.9.tgz#bedd353bcd80071b6acf194c56c6d474d42830a8"
+ integrity sha512-1JHRHwZy//Pu0CiNTUbUqRRCrie8V8YWE4OuZsPHKH0Br8PNPE5MkobTkf4wHUmjnyBw7ygrx4xHrOnTWfsexA==
dependencies:
- "@storybook/core-webpack" "8.4.7"
- "@types/node" "^22.0.0"
+ "@storybook/core-webpack" "8.6.9"
"@types/semver" "^7.3.4"
browser-assert "^1.2.1"
case-sensitive-paths-webpack-plugin "^2.4.0"
@@ -3618,17 +3640,17 @@
webpack-hot-middleware "^2.25.1"
webpack-virtual-modules "^0.6.0"
-"@storybook/cli@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-8.4.7.tgz#853c7212d0a08b910b9980c0d53f3c4f2ed42b4d"
- integrity sha512-eqHhO30FLxFuoSA+wKWB+aGvQOVcCkGLbJ4RaffjCbSbC9S2YfKLvd3Sb6gFwy6e8x+MnEkvv3g0h8LixT/C9Q==
+"@storybook/cli@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-8.6.9.tgz#26170f676567efd1d4dc4e3f294288df4ba53bc7"
+ integrity sha512-6F2ozOvZ7TFtKf3uHzo3xQNNlbdf0X5ltZVO3x1Qkb2HFUNK2Cd1/410fd7hGmiFyyTVwJhbCLLMGkL3CeMUiw==
dependencies:
"@babel/core" "^7.24.4"
"@babel/types" "^7.24.0"
- "@storybook/codemod" "8.4.7"
+ "@storybook/codemod" "8.6.9"
"@types/semver" "^7.3.4"
commander "^12.1.0"
- create-storybook "8.4.7"
+ create-storybook "8.6.9"
cross-spawn "^7.0.3"
envinfo "^7.7.3"
fd-package-json "^1.2.0"
@@ -3638,22 +3660,22 @@
globby "^14.0.1"
jscodeshift "^0.15.1"
leven "^3.1.0"
+ p-limit "^6.2.0"
prompts "^2.4.0"
semver "^7.3.7"
- storybook "8.4.7"
+ storybook "8.6.9"
tiny-invariant "^1.3.1"
ts-dedent "^2.0.0"
-"@storybook/codemod@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.4.7.tgz#d7eb787a4fc390c5d4f18c9bbe674d45102ab2c5"
- integrity sha512-VpYEZCj1EXCcqlOqI8lL58dlHJALW+OMAE1yB72GT8RaT5zSP43jK5t80cPhh70zyaPqS27wKOROcpaRS7eNRA==
+"@storybook/codemod@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-8.6.9.tgz#fcdb8372267e107dd343c2e3e45f42913ec816d2"
+ integrity sha512-2EqMGx3ZXyGqxoEK1lfWjxaogiT19F3UzO1jZecWDJqsBt6AG1kWAz7HRqU+Nr7KsHIeDyrCWqOZabQfN2TFHg==
dependencies:
"@babel/core" "^7.24.4"
"@babel/preset-env" "^7.24.4"
"@babel/types" "^7.24.0"
- "@storybook/core" "8.4.7"
- "@storybook/csf" "^0.1.11"
+ "@storybook/core" "8.6.9"
"@types/cross-spawn" "^6.0.2"
cross-spawn "^7.0.3"
es-toolkit "^1.22.0"
@@ -3663,28 +3685,27 @@
recast "^0.23.5"
tiny-invariant "^1.3.1"
-"@storybook/components@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.4.7.tgz#09eeffa07aa672ad3966ca1764a43003731b1d30"
- integrity sha512-uyJIcoyeMWKAvjrG9tJBUCKxr2WZk+PomgrgrUwejkIfXMO76i6jw9BwLa0NZjYdlthDv30r9FfbYZyeNPmF0g==
+"@storybook/components@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.6.9.tgz#6ab2ee0634e4d3b071f1ea2a1970e53b665c0f27"
+ integrity sha512-CqWUAYK/RgV++sXfiDG63DM2JF2FeidvnMO5/bki2hFbEqgs0/yy7BKUjhsGmuri5y+r9B2FJhW0WnE6PI8NWw==
-"@storybook/core-webpack@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-8.4.7.tgz#660d1cbd03a91fee27b65e6acc2f9269ed1fbfc8"
- integrity sha512-Tj+CjQLpFyBJxhhMms+vbPT3+gTRAiQlrhY3L1IEVwBa3wtRMS0qjozH26d1hK4G6mUIEdwu13L54HMU/w33Sg==
+"@storybook/core-webpack@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-8.6.9.tgz#d6643f2bbff431472b99fbc31360f4710aa53ac6"
+ integrity sha512-x3zmB0wpdVxdRsPIo6FYAmb+A6+YhtHbDXCDrcU7RS0/GhgLUl/KCeiBafqYMNxxQWsxNj6sN3lCP09vYqbSGw==
dependencies:
- "@types/node" "^22.0.0"
ts-dedent "^2.0.0"
-"@storybook/core@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.4.7.tgz#af9cbb3f26f0b6c98c679a134ce776c202570d66"
- integrity sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==
+"@storybook/core@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.6.9.tgz#e311037f4876c4d339712c1fa53aac595833940d"
+ integrity sha512-psYxJAlj34ZaDAk+OvT/He6ZuUh0eGiHVtZNe0xWbNp5pQvOBjf+dg48swdI6KEbVs3aeU+Wnyra/ViU2RtA+Q==
dependencies:
- "@storybook/csf" "^0.1.11"
+ "@storybook/theming" "8.6.9"
better-opn "^3.0.2"
browser-assert "^1.2.1"
- esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0"
+ esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0"
esbuild-register "^3.5.0"
jsdoc-type-pratt-parser "^4.0.0"
process "^0.11.10"
@@ -3693,20 +3714,13 @@
util "^0.12.5"
ws "^8.2.3"
-"@storybook/csf-plugin@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.4.7.tgz#0117c872b05bf033eec089ab0224e0fab01da810"
- integrity sha512-Fgogplu4HImgC+AYDcdGm1rmL6OR1rVdNX1Be9C/NEXwOCpbbBwi0BxTf/2ZxHRk9fCeaPEcOdP5S8QHfltc1g==
+"@storybook/csf-plugin@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.6.9.tgz#1a5f154486229dac798d51e29f5783d7328306f0"
+ integrity sha512-IQnhyaVUkcRR9e4xiHN83xMQtTMH+lJp472iMifUIqxx/Yw137BTef2DEEp6EnRct4yKrch24+Nl65LWg0mRpQ==
dependencies:
unplugin "^1.3.1"
-"@storybook/csf@^0.1.11":
- version "0.1.11"
- resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.11.tgz#ad685a4fe564a47a6b73571c2e7c07b526f4f71b"
- integrity sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==
- dependencies:
- type-fest "^2.19.0"
-
"@storybook/global@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed"
@@ -3717,28 +3731,27 @@
resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.2.12.tgz#3e4c939113b67df7ab17b78f805dbb57f4acf0db"
integrity sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q==
-"@storybook/instrumenter@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.4.7.tgz#5a37876fee8f828241a1e7fd76891c6effc1805a"
- integrity sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==
+"@storybook/instrumenter@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.6.9.tgz#ee74cc4e9c618f59db0b5750b689c162e630cb47"
+ integrity sha512-Gp6OSiu9KA/p1HWd7VW9TtpWX32ZBfqRVrOm4wW1AM6B4XACbQWFE/aQ25HwU834yfdJkr2BW+uUH8DBAQ6kTw==
dependencies:
"@storybook/global" "^5.0.0"
"@vitest/utils" "^2.1.1"
-"@storybook/manager-api@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.4.7.tgz#4e13debf645c9300d7d6d49195e720d0c7ecd261"
- integrity sha512-ELqemTviCxAsZ5tqUz39sDmQkvhVAvAgiplYy9Uf15kO0SP2+HKsCMzlrm2ue2FfkUNyqbDayCPPCB0Cdn/mpQ==
+"@storybook/manager-api@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.6.9.tgz#c58ce2022e3fb63b9b7c4d795ee3e1cfba4637c8"
+ integrity sha512-mxq9B9rxAraOCBapGKsUDfI+8yNtFhTgKMZCxmHoUCxvAHaIt4S9JcdX0qQQKUsBTr/b2hHm0O7A8DYrbgBRfw==
-"@storybook/preset-react-webpack@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-8.4.7.tgz#7b303f464228035a919ea18a3cd6193f6776c2bc"
- integrity sha512-geTSBKyrBagVihil5MF7LkVFynbfHhCinvnbCZZqXW7M1vgcxvatunUENB+iV8eWg/0EJ+8O7scZL+BAxQ/2qg==
+"@storybook/preset-react-webpack@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-8.6.9.tgz#692dcd6740da9854e1fdaac0b46ceb422084834f"
+ integrity sha512-KHX29ogvmBAm9+X+X6aSpCFNqS0ZYQzmtTrMVN07ni5805LM389KYIPfFPxzZwCczryA/+I26odbczYYWYUarQ==
dependencies:
- "@storybook/core-webpack" "8.4.7"
- "@storybook/react" "8.4.7"
+ "@storybook/core-webpack" "8.6.9"
+ "@storybook/react" "8.6.9"
"@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0"
- "@types/node" "^22.0.0"
"@types/semver" "^7.3.4"
find-up "^5.0.0"
magic-string "^0.30.5"
@@ -3753,10 +3766,10 @@
resolved "https://registry.yarnpkg.com/@storybook/preset-scss/-/preset-scss-1.0.3.tgz#8ac834545c642dada0f64f510ef08dfb882e9737"
integrity sha512-o9Iz6wxPeNENrQa2mKlsDKynBfqU2uWaRP80HeWp4TkGgf7/x3DVF2O7yi9N0x/PI1qzzTTpxlQ90D62XmpiTw==
-"@storybook/preview-api@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.4.7.tgz#85e01a97f4182b974581765d725f6c7a7d190013"
- integrity sha512-0QVQwHw+OyZGHAJEXo6Knx+6/4er7n2rTDE5RYJ9F2E2Lg42E19pfdLlq2Jhoods2Xrclo3wj6GWR//Ahi39Eg==
+"@storybook/preview-api@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.6.9.tgz#a21a4054dad6abf06c2b16a8da22d5c6a7b7cb45"
+ integrity sha512-hW3Z8NBrGs2bNunaHgrLjpfrOcWsxH0ejAqaba8MolPXjzNs0lTFF/Ela7pUsh2m1R4/kiD+WfddQzyipUo4Mg==
"@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0":
version "1.0.6--canary.9.0c3f3b7.0"
@@ -3771,51 +3784,49 @@
react-docgen-typescript "^2.2.2"
tslib "^2.0.0"
-"@storybook/react-dom-shim@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.4.7.tgz#f0dd5bbf2fc185def72d9d08a11c8de22f152c2a"
- integrity sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==
+"@storybook/react-dom-shim@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.6.9.tgz#70ddb775754fd607ff7491b04a0b566dbc5e4b8c"
+ integrity sha512-SjqP6r5yy87OJRAiq1JzFazn6VWfptOA2HaxOiP8zRhJgG41K0Vseh8tbZdycj1AzJYSCcnKaIcfd/GEo/41+g==
-"@storybook/react-webpack5@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-8.4.7.tgz#b0c48caffd658912bd10f4f9960edb229e990b4b"
- integrity sha512-T9GLqlsP4It4El7cC8rSkBPRWvORAsTDULeWlO36RST2TrYnmBOUytsi22mk7cAAAVhhD6rTrs1YdqWRMpfa1w==
+"@storybook/react-webpack5@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-8.6.9.tgz#f2515ae0e242235fd4fd6c2b3113dd05f25408e3"
+ integrity sha512-Kl+eFBVAddE8glOFFNrgXxsk9qUcJG6Z9XvXYFIbUIqciiL3pqovYwY2LeIKttcXWj3UAssUmKyQzLLiWWLOHg==
dependencies:
- "@storybook/builder-webpack5" "8.4.7"
- "@storybook/preset-react-webpack" "8.4.7"
- "@storybook/react" "8.4.7"
- "@types/node" "^22.0.0"
+ "@storybook/builder-webpack5" "8.6.9"
+ "@storybook/preset-react-webpack" "8.6.9"
+ "@storybook/react" "8.6.9"
-"@storybook/react@8.4.7", "@storybook/react@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.4.7.tgz#e2cf62b3c1d8e4bfe5eff82ced07ec473d4e4fd1"
- integrity sha512-nQ0/7i2DkaCb7dy0NaT95llRVNYWQiPIVuhNfjr1mVhEP7XD090p0g7eqUmsx8vfdHh2BzWEo6CoBFRd3+EXxw==
+"@storybook/react@8.6.9", "@storybook/react@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.6.9.tgz#bbef3a37f61006a129c1b0554513fb2564211988"
+ integrity sha512-xu4eJyYNz3mHeqnHn80KZZ2s22ZfqqCTzCNCVAyM6MWTxUwIpLX6FXC/vmcT1gPwwTl2KcRHZXaE7snB3aOLuw==
dependencies:
- "@storybook/components" "8.4.7"
+ "@storybook/components" "8.6.9"
"@storybook/global" "^5.0.0"
- "@storybook/manager-api" "8.4.7"
- "@storybook/preview-api" "8.4.7"
- "@storybook/react-dom-shim" "8.4.7"
- "@storybook/theming" "8.4.7"
+ "@storybook/manager-api" "8.6.9"
+ "@storybook/preview-api" "8.6.9"
+ "@storybook/react-dom-shim" "8.6.9"
+ "@storybook/theming" "8.6.9"
-"@storybook/test@^8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.4.7.tgz#7f58f2cdf3a6d810bf3ff4e0e2fee634040c678f"
- integrity sha512-AhvJsu5zl3uG40itSQVuSy5WByp3UVhS6xAnme4FWRwgSxhvZjATJ3AZkkHWOYjnnk+P2/sbz/XuPli1FVCWoQ==
+"@storybook/test@^8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.6.9.tgz#b3f30a2a2bab49e046802aeb0a35bbd260e54e78"
+ integrity sha512-lIJA6jup3ZZNkKFyUiy1q2tHWZv5q5bTaLxTnI85XIWr+sFCZG5oo3pOQESBkX4V95rv8sq9gEmEWySZvW7MBw==
dependencies:
- "@storybook/csf" "^0.1.11"
"@storybook/global" "^5.0.0"
- "@storybook/instrumenter" "8.4.7"
+ "@storybook/instrumenter" "8.6.9"
"@testing-library/dom" "10.4.0"
"@testing-library/jest-dom" "6.5.0"
"@testing-library/user-event" "14.5.2"
"@vitest/expect" "2.0.5"
"@vitest/spy" "2.0.5"
-"@storybook/theming@8.4.7":
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.4.7.tgz#c308f6a883999bd35e87826738ab8a76515932b5"
- integrity sha512-99rgLEjf7iwfSEmdqlHkSG3AyLcK0sfExcr0jnc6rLiAkBhzuIsvcHjjUwkR210SOCgXqBPW0ZA6uhnuyppHLw==
+"@storybook/theming@8.6.9":
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.6.9.tgz#493a80bdf9b7ffedd3db02e0c28e6fa0ff2f1e90"
+ integrity sha512-FQafe66itGnIh0V42R65tgFKyz0RshpIs0pTrxrdByuB2yKsep+f8ZgKLJE3fCKw/Egw4bUuICo2m8d7uOOumA==
"@testing-library/dom@10.4.0":
version "10.4.0"
@@ -4330,6 +4341,11 @@
"@types/tough-cookie" "*"
parse5 "^7.0.0"
+"@types/jshint@^2.12.4":
+ version "2.12.4"
+ resolved "https://registry.yarnpkg.com/@types/jshint/-/jshint-2.12.4.tgz#8ba3e1cc1d7e0bbe5979062c5dbfc05219f3f377"
+ integrity sha512-oglnnIxrE50jLiDjc96F26E8kU4U1t+WI8STeEDWMMQaRZQ1+V0yYxiqQ0WZefviVbMwCw0MYIrjdTDEvRXjMQ==
+
"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
@@ -4369,6 +4385,14 @@
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+"@types/n3@^1.21.1":
+ version "1.21.1"
+ resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.21.1.tgz#5e9f93f50e7a77f8c40bffa3e66f67209633c235"
+ integrity sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw==
+ dependencies:
+ "@rdfjs/types" "^1.1.0"
+ "@types/node" "*"
+
"@types/node@*":
version "20.11.19"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195"
@@ -4376,13 +4400,6 @@
dependencies:
undici-types "~5.26.4"
-"@types/node@^22.0.0":
- version "22.9.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365"
- integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==
- dependencies:
- undici-types "~6.19.8"
-
"@types/normalize-package-data@^2.4.0":
version "2.4.4"
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901"
@@ -4777,6 +4794,13 @@ abab@^2.0.6:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
acorn-globals@^7.0.0:
version "7.0.1"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3"
@@ -5136,10 +5160,10 @@ babel-jest@^29.7.0:
graceful-fs "^4.2.9"
slash "^3.0.0"
-babel-loader@^9.1.3:
- version "9.1.3"
- resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a"
- integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==
+babel-loader@^9.2.1:
+ version "9.2.1"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b"
+ integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==
dependencies:
find-cache-dir "^4.0.0"
schema-utils "^4.0.0"
@@ -5182,6 +5206,14 @@ babel-plugin-polyfill-corejs3@^0.10.6:
"@babel/helper-define-polyfill-provider" "^0.6.2"
core-js-compat "^3.38.0"
+babel-plugin-polyfill-corejs3@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6"
+ integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.6.3"
+ core-js-compat "^3.40.0"
+
babel-plugin-polyfill-regenerator@^0.6.1:
version "0.6.2"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e"
@@ -5252,15 +5284,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-bl@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
- integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
- dependencies:
- buffer "^5.5.0"
- inherits "^2.0.4"
- readable-stream "^3.4.0"
-
boolbase@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -5313,7 +5336,7 @@ browserslist@^4.23.1, browserslist@^4.23.3:
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
-browserslist@^4.24.0, browserslist@^4.24.2:
+browserslist@^4.24.0:
version "4.24.2"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580"
integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==
@@ -5323,6 +5346,16 @@ browserslist@^4.24.0, browserslist@^4.24.2:
node-releases "^2.0.18"
update-browserslist-db "^1.1.1"
+browserslist@^4.24.4:
+ version "4.24.4"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b"
+ integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
+ dependencies:
+ caniuse-lite "^1.0.30001688"
+ electron-to-chromium "^1.5.73"
+ node-releases "^2.0.19"
+ update-browserslist-db "^1.1.1"
+
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -5335,13 +5368,13 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer@^5.5.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
dependencies:
base64-js "^1.3.1"
- ieee754 "^1.1.13"
+ ieee754 "^1.2.1"
call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1:
version "1.0.1"
@@ -5436,6 +5469,11 @@ caniuse-lite@^1.0.30001669:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz#5380ede637a33b9f9f1fc6045ea99bd142f3da5e"
integrity sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==
+caniuse-lite@^1.0.30001688:
+ version "1.0.30001707"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz#c5e104d199e6f4355a898fcd995a066c7eb9bf41"
+ integrity sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==
+
capital-case@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
@@ -5588,10 +5626,10 @@ chownr@^2.0.0:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-chromatic@^11.20.2:
- version "11.20.2"
- resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.20.2.tgz#10b309179cdc0b9195a5b68970366f9ebe67dfd1"
- integrity sha512-c+M3HVl5Y60c7ipGTZTyeWzWubRW70YsJ7PPDpO1D735ib8+Lu3yGF90j61pvgkXGngpkTPHZyBw83lcu2JMxA==
+chromatic@^11.27.0:
+ version "11.27.0"
+ resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.27.0.tgz#9450fe1acfc55022d18c7096efcb57509a20d712"
+ integrity sha512-jQ2ufjS+ePpg+NtcPI9B2eOi+pAzlRd2nhd1LgNMsVCC9Bzf5t8mJtyd8v2AUuJS0LdX0QVBgkOnlNv9xviHzA==
chrome-trace-event@^1.0.2:
version "1.0.3"
@@ -5625,7 +5663,7 @@ classcat@^5.0.3:
resolved "https://registry.yarnpkg.com/classcat/-/classcat-5.0.3.tgz#38eaa0ec6eb1b10faf101bbcef2afb319c23c17b"
integrity sha512-6dK2ke4VEJZOFx2ZfdDAl5OhEL8lvkl6EHF92IfRePfHxQTqir5NlcNVUv+2idjDqCX2NDc8m8YSAI5NI975ZQ==
-classnames@2.5.1:
+classnames@2.5.1, classnames@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
@@ -5642,13 +5680,6 @@ clean-css@^5.2.2:
dependencies:
source-map "~0.6.0"
-cli-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
- integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
- dependencies:
- restore-cursor "^3.1.0"
-
cli-cursor@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38"
@@ -5656,11 +5687,6 @@ cli-cursor@^5.0.0:
dependencies:
restore-cursor "^5.0.0"
-cli-spinners@^2.5.0:
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
- integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
-
cli-truncate@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a"
@@ -5669,6 +5695,14 @@ cli-truncate@^4.0.0:
slice-ansi "^5.0.0"
string-width "^7.0.0"
+cli@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14"
+ integrity sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==
+ dependencies:
+ exit "0.1.2"
+ glob "^7.1.1"
+
cliui@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
@@ -5687,11 +5721,6 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
-clone@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
- integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-
clsx@^1.1.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
@@ -5832,6 +5861,13 @@ consola@^3.2.3:
resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f"
integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==
+console-browserify@1.1.x:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==
+ dependencies:
+ date-now "^0.1.4"
+
constant-case@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46"
@@ -5878,18 +5914,23 @@ core-js-compat@^3.37.1, core-js-compat@^3.38.0:
dependencies:
browserslist "^4.23.3"
-core-js-compat@^3.38.1:
- version "3.39.0"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61"
- integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==
+core-js-compat@^3.40.0:
+ version "3.41.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.41.0.tgz#4cdfce95f39a8f27759b667cf693d96e5dda3d17"
+ integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==
dependencies:
- browserslist "^4.24.2"
+ browserslist "^4.24.4"
core-js@^3.19.2:
version "3.30.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc"
integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
cosmiconfig@^7.0.0, cosmiconfig@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
@@ -5929,23 +5970,13 @@ create-require@^1.1.0:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
-create-storybook@8.4.7:
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/create-storybook/-/create-storybook-8.4.7.tgz#ad746a18ae036e1ab0f9c6dd342e1fe79355940a"
- integrity sha512-Q2DkZEWkIUGv5EACT4SRsHnKO5WDZQAu772B/WeyYr1g38ksJziOut2auzS5sks5dWBmUgYssW8htSELuVRLGQ==
+create-storybook@8.6.9:
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/create-storybook/-/create-storybook-8.6.9.tgz#6e871d08fab1d99ec393202f119dd5d4d9824ce1"
+ integrity sha512-O/t8dvJY1UVOsUXLjnpq/ILW78/xUQs0hI0JAgraCcoAprz6/SFn2NkGeIkgW6TL7AlLxFPVB5j1Xf4V9K+Abw==
dependencies:
- "@types/semver" "^7.3.4"
- commander "^12.1.0"
- execa "^5.0.0"
- fd-package-json "^1.2.0"
- find-up "^5.0.0"
- ora "^5.4.1"
- prettier "^3.1.1"
- prompts "^2.4.0"
- semver "^7.3.7"
- storybook "8.4.7"
- tiny-invariant "^1.3.1"
- ts-dedent "^2.0.0"
+ recast "^0.23.5"
+ semver "^7.6.2"
crelt@^1.0.5:
version "1.0.6"
@@ -6149,6 +6180,11 @@ data-view-byte-offset@^1.0.0:
es-errors "^1.3.0"
is-data-view "^1.0.1"
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==
+
debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
@@ -6218,13 +6254,6 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-defaults@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
- integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
- dependencies:
- clone "^1.0.2"
-
define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
@@ -6346,6 +6375,14 @@ dom-helpers@^5.0.1:
"@babel/runtime" "^7.8.7"
csstype "^3.0.2"
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
dom-serializer@^1.0.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
@@ -6355,6 +6392,11 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0"
entities "^2.0.0"
+domelementtype@1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
domelementtype@^2.0.1, domelementtype@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
@@ -6367,6 +6409,13 @@ domexception@^4.0.0:
dependencies:
webidl-conversions "^7.0.0"
+domhandler@2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
+ integrity sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==
+ dependencies:
+ domelementtype "1"
+
domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
@@ -6374,6 +6423,14 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
dependencies:
domelementtype "^2.2.0"
+domutils@1.5:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
domutils@^2.5.2, domutils@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
@@ -6438,6 +6495,11 @@ electron-to-chromium@^1.5.41:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.58.tgz#d90bd7a04d9223dce4e72316e14492140ec9af40"
integrity sha512-al2l4r+24ZFL7WzyPTlyD0fC33LLzvxqLCwurtBibVPghRGO9hSTl+tis8t1kD7biPiH/en4U0I7o/nQbYeoVA==
+electron-to-chromium@^1.5.73:
+ version "1.5.123"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz#fae5bdba0ba27045895176327aa79831aba0790c"
+ integrity sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==
+
emittery@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
@@ -6480,6 +6542,11 @@ enhanced-resolve@^5.15.0:
graceful-fs "^4.2.4"
tapable "^2.2.0"
+entities@1.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
+ integrity sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==
+
entities@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
@@ -6815,35 +6882,36 @@ esbuild-register@^3.5.0:
dependencies:
debug "^4.3.4"
-"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0":
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7"
- integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==
+"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0":
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.1.tgz#a16b8d070b6ad4871935277bda6ccfe852e3fa2f"
+ integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==
optionalDependencies:
- "@esbuild/aix-ppc64" "0.24.0"
- "@esbuild/android-arm" "0.24.0"
- "@esbuild/android-arm64" "0.24.0"
- "@esbuild/android-x64" "0.24.0"
- "@esbuild/darwin-arm64" "0.24.0"
- "@esbuild/darwin-x64" "0.24.0"
- "@esbuild/freebsd-arm64" "0.24.0"
- "@esbuild/freebsd-x64" "0.24.0"
- "@esbuild/linux-arm" "0.24.0"
- "@esbuild/linux-arm64" "0.24.0"
- "@esbuild/linux-ia32" "0.24.0"
- "@esbuild/linux-loong64" "0.24.0"
- "@esbuild/linux-mips64el" "0.24.0"
- "@esbuild/linux-ppc64" "0.24.0"
- "@esbuild/linux-riscv64" "0.24.0"
- "@esbuild/linux-s390x" "0.24.0"
- "@esbuild/linux-x64" "0.24.0"
- "@esbuild/netbsd-x64" "0.24.0"
- "@esbuild/openbsd-arm64" "0.24.0"
- "@esbuild/openbsd-x64" "0.24.0"
- "@esbuild/sunos-x64" "0.24.0"
- "@esbuild/win32-arm64" "0.24.0"
- "@esbuild/win32-ia32" "0.24.0"
- "@esbuild/win32-x64" "0.24.0"
+ "@esbuild/aix-ppc64" "0.25.1"
+ "@esbuild/android-arm" "0.25.1"
+ "@esbuild/android-arm64" "0.25.1"
+ "@esbuild/android-x64" "0.25.1"
+ "@esbuild/darwin-arm64" "0.25.1"
+ "@esbuild/darwin-x64" "0.25.1"
+ "@esbuild/freebsd-arm64" "0.25.1"
+ "@esbuild/freebsd-x64" "0.25.1"
+ "@esbuild/linux-arm" "0.25.1"
+ "@esbuild/linux-arm64" "0.25.1"
+ "@esbuild/linux-ia32" "0.25.1"
+ "@esbuild/linux-loong64" "0.25.1"
+ "@esbuild/linux-mips64el" "0.25.1"
+ "@esbuild/linux-ppc64" "0.25.1"
+ "@esbuild/linux-riscv64" "0.25.1"
+ "@esbuild/linux-s390x" "0.25.1"
+ "@esbuild/linux-x64" "0.25.1"
+ "@esbuild/netbsd-arm64" "0.25.1"
+ "@esbuild/netbsd-x64" "0.25.1"
+ "@esbuild/openbsd-arm64" "0.25.1"
+ "@esbuild/openbsd-x64" "0.25.1"
+ "@esbuild/sunos-x64" "0.25.1"
+ "@esbuild/win32-arm64" "0.25.1"
+ "@esbuild/win32-ia32" "0.25.1"
+ "@esbuild/win32-x64" "0.25.1"
escalade@^3.1.1, escalade@^3.1.2:
version "3.1.2"
@@ -7037,12 +7105,17 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
eventemitter3@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
-events@^3.2.0:
+events@^3.2.0, events@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
@@ -7082,7 +7155,7 @@ exenv@^1.2.2:
resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==
-exit@^0.1.2:
+exit@0.1.2, exit@0.1.x, exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
@@ -7568,7 +7641,7 @@ glob@^10.3.7:
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-scurry "^1.10.1"
-glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -7970,6 +8043,17 @@ html-webpack-plugin@^5.5.0:
pretty-error "^4.0.0"
tapable "^2.0.0"
+htmlparser2@3.8.x:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
+ integrity sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==
+ dependencies:
+ domelementtype "1"
+ domhandler "2.3"
+ domutils "1.5"
+ entities "1.0"
+ readable-stream "1.1"
+
htmlparser2@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@@ -8042,7 +8126,7 @@ identity-obj-proxy@^3.0.0:
dependencies:
harmony-reflect "^1.4.6"
-ieee754@^1.1.13:
+ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
@@ -8106,7 +8190,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+inherits@2, inherits@^2.0.3, inherits@~2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -8363,11 +8447,6 @@ is-hexadecimal@^1.0.0:
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
-is-interactive@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
- integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
-
is-lower-case@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393"
@@ -8541,11 +8620,6 @@ is-typed-array@^1.1.9:
gopd "^1.0.1"
has-tostringtag "^1.0.0"
-is-unicode-supported@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
- integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
-
is-upper-case@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f"
@@ -8592,6 +8666,11 @@ is-wsl@^2.2.0:
dependencies:
is-docker "^2.0.0"
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
isarray@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
@@ -9179,6 +9258,19 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+jshint@^2.13.6:
+ version "2.13.6"
+ resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.13.6.tgz#3679a2687a3066fa9034ef85d8c305613a31eec6"
+ integrity sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==
+ dependencies:
+ cli "~1.0.0"
+ console-browserify "1.1.x"
+ exit "0.1.x"
+ htmlparser2 "3.8.x"
+ lodash "~4.17.21"
+ minimatch "~3.0.2"
+ strip-json-comments "1.0.x"
+
json-buffer@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
@@ -9390,19 +9482,11 @@ lodash.truncate@^4.4.2:
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
-lodash@^4.17.20, lodash@^4.17.21:
+lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-log-symbols@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
- integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
- dependencies:
- chalk "^4.1.0"
- is-unicode-supported "^0.1.0"
-
log-update@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4"
@@ -10103,6 +10187,13 @@ minimatch@^9.0.4:
dependencies:
brace-expansion "^2.0.1"
+minimatch@~3.0.2:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1"
+ integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
+ dependencies:
+ brace-expansion "^1.1.7"
+
minimist-options@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
@@ -10167,6 +10258,15 @@ ms@^2.1.3:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+n3@^1.23.1:
+ version "1.23.1"
+ resolved "https://registry.yarnpkg.com/n3/-/n3-1.23.1.tgz#42a5aded4802db7a3c5d22feec19bdd919190268"
+ integrity sha512-3f0IYJo+6+lXypothmlwPzm3wJNffsxUwnfONeFv2QqWq7RjTvyCMtkRXDUXW6XrZoOzaQX8xTTSYNlGjXcGtw==
+ dependencies:
+ buffer "^6.0.3"
+ queue-microtask "^1.1.2"
+ readable-stream "^4.0.0"
+
nanoid@^3.3.6, nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
@@ -10229,6 +10329,11 @@ node-releases@^2.0.18:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
+node-releases@^2.0.19:
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+
node-sass-magic-importer@^5.3.3:
version "5.3.3"
resolved "https://registry.yarnpkg.com/node-sass-magic-importer/-/node-sass-magic-importer-5.3.3.tgz#247541149c3230a6f5e8f110ab39afffb41af583"
@@ -10408,7 +10513,7 @@ once@^1.3.0:
dependencies:
wrappy "1"
-onetime@^5.1.0, onetime@^5.1.2:
+onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -10467,21 +10572,6 @@ optionator@^0.9.3:
prelude-ls "^1.2.1"
type-check "^0.4.0"
-ora@^5.4.1:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
- integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
- dependencies:
- bl "^4.1.0"
- chalk "^4.1.0"
- cli-cursor "^3.1.0"
- cli-spinners "^2.5.0"
- is-interactive "^1.0.0"
- is-unicode-supported "^0.1.0"
- log-symbols "^4.1.0"
- strip-ansi "^6.0.0"
- wcwidth "^1.0.1"
-
p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -10503,6 +10593,13 @@ p-limit@^4.0.0:
dependencies:
yocto-queue "^1.0.0"
+p-limit@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-6.2.0.tgz#c254d22ba6aeef441a3564c5e6c2f2da59268a0f"
+ integrity sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==
+ dependencies:
+ yocto-queue "^1.1.1"
+
p-locate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
@@ -11046,7 +11143,7 @@ querystringify@^2.1.1:
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
-queue-microtask@^1.2.2:
+queue-microtask@^1.1.2, queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
@@ -11075,10 +11172,10 @@ range-parser@^1.2.1:
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-re-resizable@^6.10.1:
- version "6.10.1"
- resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.10.1.tgz#d062ca50bbc4ec7ae940f756cba36479e9015bc5"
- integrity sha512-m33nSWRH57UZLmep5M/LatkZ2NRqimVD/bOOpvymw5Zf33+eTSEixsUugscOZzAtK0/nx+OSuOf8VbKJx/4ptw==
+re-resizable@^6.10.3:
+ version "6.11.2"
+ resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.11.2.tgz#2e8f7119ca3881d5b5aea0ffa014a80e5c1252b3"
+ integrity sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==
react-app-polyfill@^3.0.0:
version "3.0.0"
@@ -11123,13 +11220,12 @@ react-dom@^16.13.1:
prop-types "^15.6.2"
scheduler "^0.19.1"
-"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0":
- version "18.3.1"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
- integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
+"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0":
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57"
+ integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==
dependencies:
- loose-envify "^1.1.0"
- scheduler "^0.23.2"
+ scheduler "^0.25.0"
react-draggable@^4.4.4:
version "4.4.5"
@@ -11289,12 +11385,10 @@ react@^16.13.1:
object-assign "^4.1.1"
prop-types "^15.6.2"
-"react@^16.8.0 || ^17.0.0 || ^18.0.0":
- version "18.3.1"
- resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
- integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
- dependencies:
- loose-envify "^1.1.0"
+"react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0":
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
+ integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==
read-pkg-up@^8.0.0:
version "8.0.0"
@@ -11315,14 +11409,26 @@ read-pkg@^6.0.0:
parse-json "^5.2.0"
type-fest "^1.0.1"
-readable-stream@^3.4.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+readable-stream@1.1:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
+ integrity sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA==
dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^4.0.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91"
+ integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==
+ dependencies:
+ abort-controller "^3.0.0"
+ buffer "^6.0.3"
+ events "^3.3.0"
+ process "^0.11.10"
+ string_decoder "^1.3.0"
readdirp@~3.6.0:
version "3.6.0"
@@ -11418,7 +11524,7 @@ regenerate@^1.4.2:
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
-regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9:
+regenerator-runtime@^0.13.9:
version "0.13.11"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
@@ -11660,14 +11766,6 @@ resolve@^2.0.0-next.5:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-restore-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
- integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
- dependencies:
- onetime "^5.1.0"
- signal-exit "^3.0.2"
-
restore-cursor@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7"
@@ -11824,12 +11922,10 @@ scheduler@^0.19.1:
loose-envify "^1.1.0"
object-assign "^4.1.1"
-scheduler@^0.23.2:
- version "0.23.2"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
- integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
- dependencies:
- loose-envify "^1.1.0"
+scheduler@^0.25.0:
+ version "0.25.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
+ integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0:
version "3.3.0"
@@ -12185,12 +12281,12 @@ stack-utils@^2.0.3:
dependencies:
escape-string-regexp "^2.0.0"
-storybook@8.4.7, storybook@^8.4.7:
- version "8.4.7"
- resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.4.7.tgz#a3068787a58074cec1b4197eed1c4427ec644b3f"
- integrity sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==
+storybook@8.6.9, storybook@^8.6.9:
+ version "8.6.9"
+ resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.6.9.tgz#e90a70f8f9d022134becaf3ddf974f8fe35a3d3b"
+ integrity sha512-Iw4+R4V3yX7MhXJaLBAT4oLtZ+SaTzX8KvUNZiQzvdD+TrFKVA3QKV8gvWjstGyU2dd+afE1Ph6EG5Xa2Az2CA==
dependencies:
- "@storybook/core" "8.4.7"
+ "@storybook/core" "8.6.9"
string-argv@~0.3.2:
version "0.3.2"
@@ -12345,13 +12441,18 @@ string.prototype.trimstart@^1.0.8:
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
-string_decoder@^1.1.1:
+string_decoder@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
dependencies:
safe-buffer "~5.2.0"
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -12407,6 +12508,11 @@ strip-indent@^4.0.0:
dependencies:
min-indent "^1.0.1"
+strip-json-comments@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==
+
strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
@@ -12834,11 +12940,6 @@ type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
-type-fest@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
- integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
-
type-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/type-flag/-/type-flag-3.0.0.tgz#2caef2f20f2c71e960fe1d3b6f57bae8c8246459"
@@ -12982,11 +13083,6 @@ undici-types@~5.26.4:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-undici-types@~6.19.8:
- version "6.19.8"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
- integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
-
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
@@ -13237,7 +13333,7 @@ use-sync-external-store@^1.2.0:
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
-util-deprecate@^1.0.1, util-deprecate@^1.0.2:
+util-deprecate@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
@@ -13384,13 +13480,6 @@ watchpack@^2.4.0:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
-wcwidth@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
- integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
- dependencies:
- defaults "^1.0.3"
-
web-namespaces@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
@@ -13793,6 +13882,11 @@ yocto-queue@^1.0.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110"
integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
+yocto-queue@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.1.tgz#36d7c4739f775b3cbc28e6136e21aa057adec418"
+ integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==
+
zustand@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d"