From 1092fbd2847ec0855dcc0665284579a096db6a68 Mon Sep 17 00:00:00 2001 From: Pavel Klibani Date: Fri, 23 Aug 2024 09:47:48 +0200 Subject: [PATCH 1/2] Feat(web-react): Introduce Flex component --- docs/DICTIONARIES.md | 12 +- exporters/variables-scss/package.json | 2 +- packages/web-react/scripts/entryPoints.js | 1 + .../web-react/src/components/Flex/Flex.tsx | 38 + .../web-react/src/components/Flex/README.md | 162 ++ .../components/Flex/__tests__/Flex.test.tsx | 123 + .../Flex/__tests__/useFlexStyleProps.test.ts | 86 + .../components/Flex/demo/FlexColumnLayout.tsx | 13 + .../Flex/demo/FlexCustomSpacing.tsx | 13 + .../Flex/demo/FlexHorizontalAlignment.tsx | 35 + .../Flex/demo/FlexResponsiveAlignment.tsx | 19 + .../Flex/demo/FlexResponsiveLayout.tsx | 13 + .../Flex/demo/FlexResponsiveSpacing.tsx | 13 + .../Flex/demo/FlexResponsiveWrapping.tsx | 15 + .../components/Flex/demo/FlexRowLayout.tsx | 13 + .../Flex/demo/FlexVerticalAlignment.tsx | 50 + .../src/components/Flex/demo/FlexWrapping.tsx | 15 + .../src/components/Flex/demo/index.tsx | 44 + .../web-react/src/components/Flex/index.html | 1 + .../web-react/src/components/Flex/index.ts | 5 + .../components/Flex/stories/Flex.stories.tsx | 96 + .../src/components/Flex/useFlexStyleProps.ts | 36 + .../web-react/src/constants/dictionaries.ts | 2 + packages/web-react/src/hooks/index.ts | 3 + .../web-react/src/hooks/useAlignmentClass.ts | 13 + .../web-react/src/hooks/useDirectionClass.ts | 6 + packages/web-react/src/hooks/useWrapClass.ts | 18 + packages/web-react/src/types/flex.ts | 46 + packages/web-react/src/types/index.ts | 1 + .../src/utils/__tests__/toPascalCase.test.ts | 15 + packages/web-react/src/utils/index.ts | 2 + .../src/utils/stylePropsClassesGenerator.ts | 38 + packages/web-react/src/utils/toPascalCase.ts | 10 + .../web-react-chromium-linux.png | Bin 98456 -> 99814 bytes yarn.lock | 2065 ++++++++++------- 35 files changed, 2136 insertions(+), 888 deletions(-) create mode 100644 packages/web-react/src/components/Flex/Flex.tsx create mode 100644 packages/web-react/src/components/Flex/README.md create mode 100644 packages/web-react/src/components/Flex/__tests__/Flex.test.tsx create mode 100644 packages/web-react/src/components/Flex/__tests__/useFlexStyleProps.test.ts create mode 100644 packages/web-react/src/components/Flex/demo/FlexColumnLayout.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexCustomSpacing.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexHorizontalAlignment.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexResponsiveAlignment.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexResponsiveLayout.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexResponsiveSpacing.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexResponsiveWrapping.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexRowLayout.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexVerticalAlignment.tsx create mode 100644 packages/web-react/src/components/Flex/demo/FlexWrapping.tsx create mode 100644 packages/web-react/src/components/Flex/demo/index.tsx create mode 100644 packages/web-react/src/components/Flex/index.html create mode 100644 packages/web-react/src/components/Flex/index.ts create mode 100644 packages/web-react/src/components/Flex/stories/Flex.stories.tsx create mode 100644 packages/web-react/src/components/Flex/useFlexStyleProps.ts create mode 100644 packages/web-react/src/hooks/useAlignmentClass.ts create mode 100644 packages/web-react/src/hooks/useDirectionClass.ts create mode 100644 packages/web-react/src/hooks/useWrapClass.ts create mode 100644 packages/web-react/src/types/flex.ts create mode 100644 packages/web-react/src/utils/__tests__/toPascalCase.test.ts create mode 100644 packages/web-react/src/utils/stylePropsClassesGenerator.ts create mode 100644 packages/web-react/src/utils/toPascalCase.ts diff --git a/docs/DICTIONARIES.md b/docs/DICTIONARIES.md index c7e1d9dfef..1fb7f5349a 100644 --- a/docs/DICTIONARIES.md +++ b/docs/DICTIONARIES.md @@ -17,12 +17,12 @@ This project uses `dictionaries` to unify props between different components. ### Alignment -| Dictionary | Values | Code name | -| ------------------ | ------------------------- | ------------------ | -| AlignmentX | `left`, `center`, `right` | AlignmentX | -| AlignmentXExtended | AlignmentX + `stretch` | AlignmentXExtended | -| AlignmentY | `top`, `center`, `bottom` | AlignmentY | -| AlignmentYExtended | AlignmentY + `stretch` | AlignmentYExtended | +| Dictionary | Values | Code name | +| ------------------ | --------------------------------------- | ------------------ | +| AlignmentX | `left`, `center`, `right` | AlignmentX | +| AlignmentXExtended | AlignmentX + `stretch`, `space-between` | AlignmentXExtended | +| AlignmentY | `top`, `center`, `bottom` | AlignmentY | +| AlignmentYExtended | AlignmentY + `stretch`, `baseline` | AlignmentYExtended | ### Color diff --git a/exporters/variables-scss/package.json b/exporters/variables-scss/package.json index 88ecabd38f..a330aaca88 100644 --- a/exporters/variables-scss/package.json +++ b/exporters/variables-scss/package.json @@ -32,4 +32,4 @@ "prettier-config-spirit": "workspace:^", "typescript": "5.5.2" } -} \ No newline at end of file +} diff --git a/packages/web-react/scripts/entryPoints.js b/packages/web-react/scripts/entryPoints.js index 38e79335e8..3d4eda7c05 100644 --- a/packages/web-react/scripts/entryPoints.js +++ b/packages/web-react/scripts/entryPoints.js @@ -23,6 +23,7 @@ const entryPoints = [ { dirs: ['components', 'Field'] }, { dirs: ['components', 'FieldGroup'] }, { dirs: ['components', 'FileUploader'] }, + { dirs: ['components', 'Flex'] }, { dirs: ['components', 'Grid'] }, { dirs: ['components', 'Header'] }, { dirs: ['components', 'Heading'] }, diff --git a/packages/web-react/src/components/Flex/Flex.tsx b/packages/web-react/src/components/Flex/Flex.tsx new file mode 100644 index 0000000000..fa14a6d968 --- /dev/null +++ b/packages/web-react/src/components/Flex/Flex.tsx @@ -0,0 +1,38 @@ +'use client'; + +import classNames from 'classnames'; +import React, { ElementType } from 'react'; +import { AlignmentXExtended, AlignmentYExtended } from '../../constants'; +import { useStyleProps } from '../../hooks'; +import { SpiritFlexProps } from '../../types'; +import { useFlexStyleProps } from './useFlexStyleProps'; + +const defaultProps: Partial = { + alignmentX: AlignmentXExtended.STRETCH, + alignmentY: AlignmentYExtended.STRETCH, + direction: 'row', + elementType: 'div', + isWrapping: false, +}; + +export const Flex = (props: SpiritFlexProps): JSX.Element => { + const propsWithDefaults = { ...defaultProps, ...props }; + const { elementType: ElementTag = 'div', children, ...restProps } = propsWithDefaults; + const { classProps, props: modifiedProps, styleProps: flexStyle } = useFlexStyleProps(restProps); + const { styleProps, props: otherProps } = useStyleProps(modifiedProps); + + const flexStyleProps = { + style: { + ...styleProps.style, + ...flexStyle, + }, + }; + + return ( + + {children} + + ); +}; + +export default Flex; diff --git a/packages/web-react/src/components/Flex/README.md b/packages/web-react/src/components/Flex/README.md new file mode 100644 index 0000000000..92d060faf0 --- /dev/null +++ b/packages/web-react/src/components/Flex/README.md @@ -0,0 +1,162 @@ +# Flex + +Flex is a component that allows you to create a flexible one-dimensional layout. + +## Basic Usage + +Row layout: + +```jsx + +
Item 1
+
Item 2
+
Item 3
+
+``` + +Column layout: + +```jsx + +
Item 1
+
Item 2
+
Item 3
+ +``` + +Usage with a list: + +```jsx + +
  • Item 1
  • +
  • Item 2
  • +
  • Item 3
  • +
    +``` + +ℹ️ For the row layout, the Flex component uses the [`display: flex`][mdn-display-flex] CSS property. For the column +layout, [`display: grid`][mdn-display-grid] is used because of technical advantages: better overflow control or +alignment API consistency. + +## Responsive Direction + +To create a responsive layout, pass an object as the value for the `direction` property, using breakpoint keys to specify different layouts for each screen size. + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` + +## Wrapping + +By default, Flex items will not wrap. To enable wrapping on all breakpoints, use the +`isWrapping` prop. + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` + +### Responsive Wrapping + +To create a responsive wrapping layout, pass an object as the value for the `isWrapping` property, using breakpoint keys to specify different wrapping for each screen size. + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` + +## Alignment + +### Horizontal Alignment + +Flex can be horizontally aligned as stretched (default), to the left, center, or right. Additionally, you +can evenly distribute the items using the space-between value. These values come from the extended +[alignmentX dictionary][dictionary-alignment]. + +### Vertical Alignment + +Similarly to the horizontal alignment, Flex can be vertically aligned as stretched (default), to the top, +center, bottom. There is also an option to align the items to the baseline. These values come from the extended +[alignmentY dictionary][dictionary-alignment]. + +Example: + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    + +``` + +### Responsive Alignment + +To create a responsive alignment, pass an object as the value for the property, using breakpoint keys to specify different alignments for each screen size. + +Example: + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` + +## Custom Spacing + +You can use the `spacing` prop to apply custom spacing between items in both horizontal and vertical directions. The prop +accepts either a spacing token (e.g. `space-100`) or an object with breakpoint keys and spacing token values. + +Custom spacing: + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    + +``` + +Custom responsive spacing: + +```jsx + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` + +## API + +| Name | Type | Default | Required | Description | +| ------------- | -------------------------------------------------------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `alignmentX` | \[[AlignmentXExtended dictionary][dictionary-alignment] \| `object`] | `stretch` | ✕ | Apply horizontal alignment of items, use an object to set responsive values, e.g. `{ mobile: 'left', tablet: 'center', desktop: 'right' }` | +| `alignmentY` | \[[AlignmentYExtended dictionary][dictionary-alignment] \| `object`] | `stretch` | ✕ | Apply vertical alignment of items, use an object to set responsive values, e.g. `{ mobile: 'top', tablet: 'center', desktop: 'bottom' }` | +| `direction` | \[[Direction dictionary][direction-dictionary] \| `object` ] | `row` | ✕ | Direction of the items, use an object to set responsive values, e.g. `{ mobile: 'row', tablet: 'row', desktop: 'column' }` | +| `elementType` | HTML element | `div` | ✕ | Element type to use for the Grid | +| `isWrapping` | \[ `bool` \| `object` ] | `false` | ✕ | Whether items will wrap, use an object to set responsive values, e.g. `{ mobile: true, tablet: true, desktop: false }` | +| `spacing` | \[`SpaceToken` \| `Partial>`] | — | ✕ | Apply [custom spacing](#custom-spacing) in both horizontal and vertical directions between items | + +On top of the API options, the components accept [additional attributes][readme-additional-attributes]. +If you need more control over the styling of a component, you can use [style props][readme-style-props] +and [escape hatches][readme-escape-hatches]. + +[dictionary-alignment]: https://github.com/lmc-eu/spirit-design-system/blob/main/docs/DICTIONARIES.md#alignment +[dictionary-direction]: https://github.com/lmc-eu/spirit-design-system/blob/main/docs/DICTIONARIES.md#direction +[mdn-display-flex]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_flexible_box_layout +[mdn-display-grid]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout +[readme-additional-attributes]: https://github.com/lmc-eu/spirit-design-system/blob/main/packages/web-react/README.md#additional-attributes +[readme-escape-hatches]: https://github.com/lmc-eu/spirit-design-system/blob/main/packages/web-react/README.md#escape-hatches +[readme-style-props]: https://github.com/lmc-eu/spirit-design-system/blob/main/packages/web-react/README.md#style-props diff --git a/packages/web-react/src/components/Flex/__tests__/Flex.test.tsx b/packages/web-react/src/components/Flex/__tests__/Flex.test.tsx new file mode 100644 index 0000000000..6d59c38397 --- /dev/null +++ b/packages/web-react/src/components/Flex/__tests__/Flex.test.tsx @@ -0,0 +1,123 @@ +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import React from 'react'; +import { classNamePrefixProviderTest } from '../../../../tests/providerTests/classNamePrefixProviderTest'; +import { restPropsTest } from '../../../../tests/providerTests/restPropsTest'; +import { stylePropsTest } from '../../../../tests/providerTests/stylePropsTest'; +import Flex from '../Flex'; + +describe('Flex', () => { + const text = 'Hello world'; + const testId = 'flex-test-id'; + + classNamePrefixProviderTest(Flex, 'Flex'); + + stylePropsTest(Flex); + + restPropsTest(Flex, 'div'); + + it('should render text children', () => { + render({text}); + + expect(screen.getByText(text)).toBeInTheDocument(); + expect(screen.getByTestId(testId)).toHaveClass( + 'Flex Flex--noWrap Flex--row Flex--alignmentXStretch Flex--alignmentYStretch', + ); + }); + + it('should have direction class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--column'); + }); + + it('should have responsive direction class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--row Flex--tablet--column Flex--desktop--column'); + }); + + it('should have alignmentX class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--alignmentXLeft'); + }); + + it('should have responsive alignmentX class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass( + 'Flex--alignmentXLeft Flex--tablet--alignmentXCenter Flex--desktop--alignmentXRight', + ); + }); + + it('should have alignmentY class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--alignmentYTop'); + }); + + it('should have responsive alignmentY class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass( + 'Flex--alignmentYTop Flex--tablet--alignmentYCenter Flex--desktop--alignmentYBottom', + ); + }); + + it('should have both alignmentX and alignmentY class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--alignmentYTop Flex--alignmentYTop'); + }); + + it('should have responsive both alignmentX and alignmentY class name', () => { + render( + , + ); + + expect(screen.getByTestId(testId)).toHaveClass( + 'Flex--alignmentXLeft Flex--tablet--alignmentXCenter Flex--desktop--alignmentXRight Flex--alignmentYTop Flex--tablet--alignmentYCenter Flex--desktop--alignmentYBottom', + ); + }); + + it('should have wrapping class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--wrap'); + }); + + it('should have responsive wrapping class name', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveClass('Flex--wrap Flex--tablet--noWrap Flex--desktop--wrap'); + }); + + it('should have custom elementType', () => { + render(); + + expect(screen.getByRole('list')).toBeInTheDocument(); + }); + + it('should render with custom spacing', () => { + render(); + + expect(screen.getByTestId(testId)).toHaveStyle({ '--flex-spacing': 'var(--spirit-space-600)' }); + }); + + it('should render with custom spacing for each breakpoint', () => { + render( + , + ); + + const element = screen.getByTestId(testId) as HTMLElement; + + expect(element).toHaveStyle({ '--flex-spacing': 'var(--spirit-space-100)' }); + expect(element).toHaveStyle({ '--flex-spacing-tablet': 'var(--spirit-space-1000)' }); + expect(element).toHaveStyle({ '--flex-spacing-desktop': 'var(--spirit-space-1200)' }); + }); +}); diff --git a/packages/web-react/src/components/Flex/__tests__/useFlexStyleProps.test.ts b/packages/web-react/src/components/Flex/__tests__/useFlexStyleProps.test.ts new file mode 100644 index 0000000000..4b25689766 --- /dev/null +++ b/packages/web-react/src/components/Flex/__tests__/useFlexStyleProps.test.ts @@ -0,0 +1,86 @@ +import { renderHook } from '@testing-library/react'; +import { SpiritFlexProps } from '../../../types'; +import { useFlexStyleProps } from '../useFlexStyleProps'; + +describe('useFlexStyleProps', () => { + it.each([ + // props, expectedClasses + [{}, 'Flex Flex--noWrap'], + [{ isWrapping: true }, 'Flex Flex--wrap'], + [ + { + isWrapping: { mobile: true, tablet: false, desktop: true }, + }, + 'Flex Flex--wrap Flex--tablet--noWrap Flex--desktop--wrap', + ], + [{ direction: 'row' }, 'Flex Flex--noWrap Flex--row'], + [{ direction: 'column' }, 'Flex Flex--noWrap Flex--column'], + [ + { + direction: { mobile: 'row', tablet: 'column', desktop: 'row' }, + }, + 'Flex Flex--noWrap Flex--row Flex--tablet--column Flex--desktop--row', + ], + [{ alignmentX: 'left' }, 'Flex Flex--noWrap Flex--alignmentXLeft'], + [ + { + alignmentX: 'left', + alignmentY: 'top', + }, + 'Flex Flex--noWrap Flex--alignmentXLeft Flex--alignmentYTop', + ], + [ + { + alignmentX: { mobile: 'left', tablet: 'center', desktop: 'right' }, + }, + 'Flex Flex--noWrap Flex--alignmentXLeft Flex--tablet--alignmentXCenter Flex--desktop--alignmentXRight', + ], + [ + { + alignmentX: { mobile: 'left', tablet: 'center', desktop: 'right' }, + alignmentY: { mobile: 'top', tablet: 'center', desktop: 'bottom' }, + }, + 'Flex Flex--noWrap Flex--alignmentXLeft Flex--tablet--alignmentXCenter Flex--desktop--alignmentXRight Flex--alignmentYTop Flex--tablet--alignmentYCenter Flex--desktop--alignmentYBottom', + ], + [ + { + alignmentX: 'left', + alignmentY: { mobile: 'top', tablet: 'center', desktop: 'bottom' }, + }, + 'Flex Flex--noWrap Flex--alignmentXLeft Flex--alignmentYTop Flex--tablet--alignmentYCenter Flex--desktop--alignmentYBottom', + ], + ])('should return the correct classes for props %o', (props, expectedClasses) => { + const { result } = renderHook(() => useFlexStyleProps(props as SpiritFlexProps)); + + expect(result.current.classProps).toBe(expectedClasses); + }); + + it.each([ + // props, expectedStyleProps + [{}, {}], + [{ spacing: 'space-100' }, { '--flex-spacing': 'var(--spirit-space-100)' }], + [ + { + spacing: { mobile: 'space-100', tablet: 'space-200' }, + }, + { + '--flex-spacing': 'var(--spirit-space-100)', + '--flex-spacing-tablet': 'var(--spirit-space-200)', + }, + ], + [ + { + spacing: { mobile: 'space-100', tablet: 'space-200', desktop: 'space-400' }, + }, + { + '--flex-spacing': 'var(--spirit-space-100)', + '--flex-spacing-tablet': 'var(--spirit-space-200)', + '--flex-spacing-desktop': 'var(--spirit-space-400)', + }, + ], + ])('should return the correct style properties for props %o', (props, expectedStyleProps) => { + const { result } = renderHook(() => useFlexStyleProps(props as SpiritFlexProps)); + + expect(result.current.styleProps).toEqual(expectedStyleProps); + }); +}); diff --git a/packages/web-react/src/components/Flex/demo/FlexColumnLayout.tsx b/packages/web-react/src/components/Flex/demo/FlexColumnLayout.tsx new file mode 100644 index 0000000000..8da0e3a13d --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexColumnLayout.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexColumnLayout = () => ( + + Item 1 + Item 2 + Item 3 + +); + +export default FlexColumnLayout; diff --git a/packages/web-react/src/components/Flex/demo/FlexCustomSpacing.tsx b/packages/web-react/src/components/Flex/demo/FlexCustomSpacing.tsx new file mode 100644 index 0000000000..cb10217d37 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexCustomSpacing.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexCustomSpacing = () => ( + + Item 1 + Item 2 + Item 3 + +); + +export default FlexCustomSpacing; diff --git a/packages/web-react/src/components/Flex/demo/FlexHorizontalAlignment.tsx b/packages/web-react/src/components/Flex/demo/FlexHorizontalAlignment.tsx new file mode 100644 index 0000000000..83290d071d --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexHorizontalAlignment.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexHorizontalAlignment = () => ( + <> + + Item 1 + Item 2 + Item 3 + + + Item 1 + Item 2 + Item 3 + + + Item 1 + Item 2 + Item 3 + + + Item 1 + Item 2 + Item 3 + + + Item 1 + Item 2 + Item 3 + + +); + +export default FlexHorizontalAlignment; diff --git a/packages/web-react/src/components/Flex/demo/FlexResponsiveAlignment.tsx b/packages/web-react/src/components/Flex/demo/FlexResponsiveAlignment.tsx new file mode 100644 index 0000000000..7f0c782304 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexResponsiveAlignment.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexResponsiveAlignment = () => ( + + Item 1 + + Item 2
    + is taller +
    + Item 3 +
    +); + +export default FlexResponsiveAlignment; diff --git a/packages/web-react/src/components/Flex/demo/FlexResponsiveLayout.tsx b/packages/web-react/src/components/Flex/demo/FlexResponsiveLayout.tsx new file mode 100644 index 0000000000..2967290d3c --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexResponsiveLayout.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexResponsiveLayout = () => ( + + Item 1 + Item 2 + Item 3 + +); + +export default FlexResponsiveLayout; diff --git a/packages/web-react/src/components/Flex/demo/FlexResponsiveSpacing.tsx b/packages/web-react/src/components/Flex/demo/FlexResponsiveSpacing.tsx new file mode 100644 index 0000000000..fcb03260a1 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexResponsiveSpacing.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexResponsiveSpacing = () => ( + + Item 1 + Item 2 + Item 3 + +); + +export default FlexResponsiveSpacing; diff --git a/packages/web-react/src/components/Flex/demo/FlexResponsiveWrapping.tsx b/packages/web-react/src/components/Flex/demo/FlexResponsiveWrapping.tsx new file mode 100644 index 0000000000..289cedd075 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexResponsiveWrapping.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexResponsiveWrapping = () => ( + + {[...Array(15)].map((_, index) => ( + + Item {index + 1} + + ))} + +); + +export default FlexResponsiveWrapping; diff --git a/packages/web-react/src/components/Flex/demo/FlexRowLayout.tsx b/packages/web-react/src/components/Flex/demo/FlexRowLayout.tsx new file mode 100644 index 0000000000..d6ae0276cb --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexRowLayout.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexRowLayout = () => ( + + Item 1 + Item 2 + Item 3 + +); + +export default FlexRowLayout; diff --git a/packages/web-react/src/components/Flex/demo/FlexVerticalAlignment.tsx b/packages/web-react/src/components/Flex/demo/FlexVerticalAlignment.tsx new file mode 100644 index 0000000000..cfa9e79b08 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexVerticalAlignment.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexVerticalAlignment = () => ( + <> + + Item 1 + + Item 2
    + is taller +
    + Item 3 +
    + + Item 1 + + Item 2
    + is taller +
    + Item 3 +
    + + Item 1 + + Item 2
    + is taller +
    + Item 3 +
    + + Item 1 + + Item 2
    + is taller +
    + Item 3 +
    + + Item 1 + + Item 2
    + is taller +
    + Item 3 has bigger font size +
    + +); + +export default FlexVerticalAlignment; diff --git a/packages/web-react/src/components/Flex/demo/FlexWrapping.tsx b/packages/web-react/src/components/Flex/demo/FlexWrapping.tsx new file mode 100644 index 0000000000..8c9531dbe0 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/FlexWrapping.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import Flex from '../Flex'; + +const FlexWrapping = () => ( + + {[...Array(15)].map((_, index) => ( + + Item {index + 1} + + ))} + +); + +export default FlexWrapping; diff --git a/packages/web-react/src/components/Flex/demo/index.tsx b/packages/web-react/src/components/Flex/demo/index.tsx new file mode 100644 index 0000000000..57506f9ce3 --- /dev/null +++ b/packages/web-react/src/components/Flex/demo/index.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import DocsSection from '../../../../docs/DocsSections'; +import FlexColumnLayout from './FlexColumnLayout'; +import FlexCustomSpacing from './FlexCustomSpacing'; +import FlexHorizontalAlignment from './FlexHorizontalAlignment'; +import FlexResponsiveAlignment from './FlexResponsiveAlignment'; +import FlexResponsiveLayout from './FlexResponsiveLayout'; +import FlexResponsiveSpacing from './FlexResponsiveSpacing'; +import FlexRowLayout from './FlexRowLayout'; +import FlexVerticalAlignment from './FlexVerticalAlignment'; +import FlexWrapping from './FlexWrapping'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , +); diff --git a/packages/web-react/src/components/Flex/index.html b/packages/web-react/src/components/Flex/index.html new file mode 100644 index 0000000000..23972ef557 --- /dev/null +++ b/packages/web-react/src/components/Flex/index.html @@ -0,0 +1 @@ +{{> web-react/demo}} diff --git a/packages/web-react/src/components/Flex/index.ts b/packages/web-react/src/components/Flex/index.ts new file mode 100644 index 0000000000..db025ec7e4 --- /dev/null +++ b/packages/web-react/src/components/Flex/index.ts @@ -0,0 +1,5 @@ +'use client'; + +export * from './Flex'; +export * from './useFlexStyleProps'; +export { default as Flex } from './Flex'; diff --git a/packages/web-react/src/components/Flex/stories/Flex.stories.tsx b/packages/web-react/src/components/Flex/stories/Flex.stories.tsx new file mode 100644 index 0000000000..53b41a149b --- /dev/null +++ b/packages/web-react/src/components/Flex/stories/Flex.stories.tsx @@ -0,0 +1,96 @@ +import { Markdown } from '@storybook/blocks'; +import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; +import DocsBox from '../../../../docs/DocsBox'; +import { AlignmentXExtended, AlignmentYExtended } from '../../../constants'; +import ReadMe from '../README.md'; +import { Flex } from '..'; + +const meta: Meta = { + title: 'Components/Flex', + component: Flex, + parameters: { + docs: { + page: () => {ReadMe}, + }, + }, + argTypes: { + alignmentX: { + control: 'select', + options: [undefined, ...Object.values(AlignmentXExtended)], + table: { + defaultValue: { summary: undefined }, + }, + }, + alignmentY: { + control: 'select', + options: [undefined, ...Object.values(AlignmentYExtended)], + table: { + defaultValue: { summary: undefined }, + }, + }, + direction: { + control: 'select', + options: ['row', 'column'], + table: { + defaultValue: { summary: 'row' }, + }, + }, + elementType: { + control: 'text', + table: { + defaultValue: { summary: 'div' }, + }, + }, + isWrapping: { + control: 'boolean', + table: { + defaultValue: { summary: 'false' }, + }, + }, + spacing: { + control: 'object', + }, + }, + args: { + alignmentX: undefined, + alignmentY: undefined, + direction: 'row', + elementType: 'div', + isWrapping: false, + spacing: { + mobile: 'space-600', + tablet: 'space-800', + desktop: 'space-1000', + }, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Playground: Story = { + name: 'Flex', + render: (args) => ( + + {[...Array(12)].map((_, index) => { + const key = `item-${index}`; + + return index === 2 ? ( + + Item {index + 1} has bigger font size + + ) : ( + + Item {index + 1} + {index === 1 && ( + <> +
    is taller + + )} +
    + ); + })} +
    + ), +}; diff --git a/packages/web-react/src/components/Flex/useFlexStyleProps.ts b/packages/web-react/src/components/Flex/useFlexStyleProps.ts new file mode 100644 index 0000000000..ea3f77099d --- /dev/null +++ b/packages/web-react/src/components/Flex/useFlexStyleProps.ts @@ -0,0 +1,36 @@ +import classNames from 'classnames'; +import { ElementType } from 'react'; +import { useAlignmentClass, useClassNamePrefix, useDirectionClass, useSpacingStyle, useWrapClass } from '../../hooks'; +import { + SpiritFlexProps, + SpacingCSSProperties, + FlexDirectionType, + FlexAlignmentXType, + FlexAlignmentYType, +} from '../../types'; + +export interface FlexStyles { + /** className props */ + classProps: string; + /** Props for the flex element. */ + props: T; + /** Style props for the element */ + styleProps: SpacingCSSProperties; +} + +export function useFlexStyleProps(props: SpiritFlexProps): FlexStyles> { + const { alignmentX, alignmentY, direction, spacing, isWrapping, ...restProps } = props; + const flexClass = useClassNamePrefix('Flex'); + const flexStyle = useSpacingStyle(spacing, 'flex'); + const classes = classNames(flexClass, useWrapClass(flexClass, isWrapping), { + [useAlignmentClass(flexClass, alignmentX as FlexAlignmentXType, 'alignmentX')]: alignmentX, + [useAlignmentClass(flexClass, alignmentY as FlexAlignmentYType, 'alignmentY')]: alignmentY, + [useDirectionClass(flexClass, direction as FlexDirectionType)]: direction, + }); + + return { + classProps: classes, + props: restProps, + styleProps: flexStyle, + }; +} diff --git a/packages/web-react/src/constants/dictionaries.ts b/packages/web-react/src/constants/dictionaries.ts index 2cd13d3291..9d759b17ae 100644 --- a/packages/web-react/src/constants/dictionaries.ts +++ b/packages/web-react/src/constants/dictionaries.ts @@ -6,6 +6,7 @@ export const AlignmentX = { } as const; export const AlignmentXExtended = { + SPACE_BETWEEN: 'space-between', STRETCH: 'stretch', ...AlignmentX, } as const; @@ -17,6 +18,7 @@ export const AlignmentY = { } as const; export const AlignmentYExtended = { + BASELINE: 'baseline', STRETCH: 'stretch', ...AlignmentY, } as const; diff --git a/packages/web-react/src/hooks/index.ts b/packages/web-react/src/hooks/index.ts index 23a659d86d..887c013a45 100644 --- a/packages/web-react/src/hooks/index.ts +++ b/packages/web-react/src/hooks/index.ts @@ -1,8 +1,10 @@ export * from './styleProps'; +export * from './useAlignmentClass'; export * from './useCancelEvent'; export * from './useClassNamePrefix'; export * from './useClickOutside'; export * from './useDeprecationMessage'; +export * from './useDirectionClass'; export * from './useDragAndDrop'; export * from './useIcon'; export * from './useIsomorphicLayoutEffect'; @@ -10,3 +12,4 @@ export * from './useLastActiveFocus'; export * from './useScrollControl'; export * from './useSpacingStyle'; export * from './useToggle'; +export * from './useWrapClass'; diff --git a/packages/web-react/src/hooks/useAlignmentClass.ts b/packages/web-react/src/hooks/useAlignmentClass.ts new file mode 100644 index 0000000000..a3d3510d88 --- /dev/null +++ b/packages/web-react/src/hooks/useAlignmentClass.ts @@ -0,0 +1,13 @@ +import { FlexAlignmentXType, FlexAlignmentYType } from '../types'; +import { generateStylePropsClassNames } from '../utils'; + +type AlignmentPropertyType = FlexAlignmentXType | FlexAlignmentYType; + +const DEFAULT_MOBILE_ALIGNMENT = 'stretch'; + +export function useAlignmentClass(componentClass: string, property: AlignmentPropertyType, type?: string) { + const responsiveProperty = + property && typeof property === 'object' ? { mobile: DEFAULT_MOBILE_ALIGNMENT, ...property } : property; + + return generateStylePropsClassNames(componentClass, responsiveProperty as AlignmentPropertyType, type); +} diff --git a/packages/web-react/src/hooks/useDirectionClass.ts b/packages/web-react/src/hooks/useDirectionClass.ts new file mode 100644 index 0000000000..42c71a9d17 --- /dev/null +++ b/packages/web-react/src/hooks/useDirectionClass.ts @@ -0,0 +1,6 @@ +import { FlexDirectionType } from '../types'; +import { generateStylePropsClassNames } from '../utils'; + +export function useDirectionClass(componentClass: string, property: FlexDirectionType) { + return generateStylePropsClassNames(componentClass, property); +} diff --git a/packages/web-react/src/hooks/useWrapClass.ts b/packages/web-react/src/hooks/useWrapClass.ts new file mode 100644 index 0000000000..3868218523 --- /dev/null +++ b/packages/web-react/src/hooks/useWrapClass.ts @@ -0,0 +1,18 @@ +type WrappingType = boolean | Record | undefined; + +const WRAP_CLASS = '--wrap'; +const NO_WRAP_CLASS = '--noWrap'; + +export function useWrapClass(componentClass: string, property: WrappingType) { + if (typeof property === 'object' && property !== null) { + return Object.entries(property) + .map(([key, responsiveProperty]) => { + const infix = key === 'mobile' ? '' : `--${key}`; + + return `${componentClass}${infix}${responsiveProperty ? WRAP_CLASS : NO_WRAP_CLASS}`; + }) + .join(' '); + } + + return `${componentClass}${property ? WRAP_CLASS : NO_WRAP_CLASS}`; +} diff --git a/packages/web-react/src/types/flex.ts b/packages/web-react/src/types/flex.ts new file mode 100644 index 0000000000..ecb60616f2 --- /dev/null +++ b/packages/web-react/src/types/flex.ts @@ -0,0 +1,46 @@ +import { ElementType, JSXElementConstructor } from 'react'; +import { + AlignmentXExtendedDictionaryType, + AlignmentYExtendedDictionaryType, + BreakpointToken, + ChildrenProps, + SpaceToken, + StyleProps, + TransferProps, +} from './shared'; + +export interface FlexElementTypeProps { + /** + * The HTML element or React element used to render the Flex, e.g. 'div'. + * + * @default 'div' + */ + elementType?: T | JSXElementConstructor; +} + +export type FlexDirection = 'row' | 'column'; +export type FlexDirectionType = FlexDirection | { [key: string]: FlexDirection }; +export type FlexAlignmentXType = + | NonNullable + | { [key: string]: NonNullable }; +export type FlexAlignmentYType = + | NonNullable + | { [key: string]: NonNullable }; +export type FlexWrapType = boolean | { [key: string]: boolean }; + +export interface FlexCustomLayoutProps { + alignmentX?: FlexAlignmentXType; + alignmentY?: FlexAlignmentYType; + direction?: FlexDirectionType; + isWrapping?: FlexWrapType; + /** Custom spacing between items */ + spacing?: SpaceToken | Partial>; +} + +export interface FlexProps extends FlexElementTypeProps, FlexCustomLayoutProps {} + +export interface SpiritFlexProps + extends FlexProps, + ChildrenProps, + StyleProps, + TransferProps {} diff --git a/packages/web-react/src/types/index.ts b/packages/web-react/src/types/index.ts index 0ec027fd76..781833deaf 100644 --- a/packages/web-react/src/types/index.ts +++ b/packages/web-react/src/types/index.ts @@ -9,6 +9,7 @@ export * from './divider'; export * from './dropdown'; export * from './fieldGroup'; export * from './fileUploader'; +export * from './flex'; export * from './grid'; export * from './header'; export * from './heading'; diff --git a/packages/web-react/src/utils/__tests__/toPascalCase.test.ts b/packages/web-react/src/utils/__tests__/toPascalCase.test.ts new file mode 100644 index 0000000000..a58754611b --- /dev/null +++ b/packages/web-react/src/utils/__tests__/toPascalCase.test.ts @@ -0,0 +1,15 @@ +import { toPascalCase } from '../toPascalCase'; + +describe('string to pascal case', () => { + it.each([ + ['foo-bar', 'FooBar'], + ['test-case', 'TestCase'], + ['some-words-here', 'SomeWordsHere'], + ['single', 'Single'], + ['', ''], + ['kebab-case-test', 'KebabCaseTest'], + ])('should convert kebab-case string "%s" to PascalCase string "%s"', (input, expected) => { + const result = toPascalCase(input); + expect(result).toBe(expected); + }); +}); diff --git a/packages/web-react/src/utils/index.ts b/packages/web-react/src/utils/index.ts index 09fa577ebb..80d5082b54 100644 --- a/packages/web-react/src/utils/index.ts +++ b/packages/web-react/src/utils/index.ts @@ -3,3 +3,5 @@ export * from './compose'; export * from './debounce'; export * from './delayedCallback'; export * from './string'; +export * from './stylePropsClassesGenerator'; +export * from './toPascalCase'; diff --git a/packages/web-react/src/utils/stylePropsClassesGenerator.ts b/packages/web-react/src/utils/stylePropsClassesGenerator.ts new file mode 100644 index 0000000000..3a1b536f0a --- /dev/null +++ b/packages/web-react/src/utils/stylePropsClassesGenerator.ts @@ -0,0 +1,38 @@ +import { toPascalCase } from './toPascalCase'; + +type Breakpoints = 'mobile' | 'tablet' | 'desktop'; +type ResponsiveProp = { + [key in Breakpoints]: string; +}; +type StaticProp = string; + +export function generateStaticStylePropsClasses(componentClass: string, property: StaticProp, type?: string): string { + return `${componentClass}--${type || ''}${type ? toPascalCase(property) : property}`; +} + +export function generateResponsiveStylePropsClasses( + componentClass: string, + property: ResponsiveProp, + type?: string, +): string { + return Object.keys(property) + .map((key) => { + const infix = key === 'mobile' ? '' : `--${key}`; + const responsiveProperty = property[key as Breakpoints]; + + return `${componentClass}${infix}--${type || ''}${type ? toPascalCase(responsiveProperty) : responsiveProperty}`; + }) + .join(' '); +} + +function isResponsiveProperty

    (property: P) { + return property && typeof property === 'object'; +} + +export function generateStylePropsClassNames

    (componentClass: string, property: P, type?: string): string { + const generate = isResponsiveProperty

    (property) + ? generateResponsiveStylePropsClasses + : generateStaticStylePropsClasses; + + return generate(componentClass, property as unknown as ResponsiveProp & StaticProp, type); +} diff --git a/packages/web-react/src/utils/toPascalCase.ts b/packages/web-react/src/utils/toPascalCase.ts new file mode 100644 index 0000000000..d29acd557d --- /dev/null +++ b/packages/web-react/src/utils/toPascalCase.ts @@ -0,0 +1,10 @@ +export function toPascalCase(str: string): string { + if (typeof str !== 'string') { + return str; + } + + return str + .split('-') // Split the string by hyphen + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) // Capitalize the first letter of each word + .join(''); // Join the words back together without any hyphens +} diff --git a/tests/e2e/demo-homepages.spec.ts-snapshots/web-react-chromium-linux.png b/tests/e2e/demo-homepages.spec.ts-snapshots/web-react-chromium-linux.png index 4925c3185f010a28a2370adcf612224d2c40d0d9..31a7fee2c9e7688bf5d08fe1ac5be1e5dab4aab1 100644 GIT binary patch delta 58881 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%0DGt)DN(fyoL_{CCAOK&(?%hF;4d6xLTmQ97* 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

    g$!Va`zXn$vJK6h+4$A5i1$doc1IP?y{D4@d(d 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 l?fv_Ic?&ZCJIOtjH#h6m&L@SvZ)ih%=16.8.0" react-dom: ">=16.8.0" - checksum: 10/daa2122076e38076d9de81b095a9a715153bf4e3bb69d7107748bcfa1def774e2bc2f77b7b2e8057827f07a830011826a7b8abafb5ae86fd4548e968ea224de9 + checksum: 10/a2ffeb0bae72cac9e6583d9651e75e94c261a9e78ca4a5e862b7d33f2c19ae014cbe272627a0a0a5a2b526280efab17ec687d32ba02f6ce4e924bec562ae06ab languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.5": - version: 0.2.5 - resolution: "@floating-ui/utils@npm:0.2.5" - checksum: 10/08df715c2a3bfa9d757347df0b38c89a3bfa92b0a32ff67d3d713960c2e72c202e22a2b220aacadbde5451ac2bd4c10411a73a8ed3707ded792f0182592eb01f +"@floating-ui/utils@npm:^0.2.7": + version: 0.2.7 + resolution: "@floating-ui/utils@npm:0.2.7" + checksum: 10/56b1bb3f73f6ec9aabf9b1fd3dc584e0f2384d319c1a6119050eab102ae6ca8b9b0eed711c2f235ffe035188cbe9727bf36e8dcb54c8bd32176737e4be47efa8 languageName: node linkType: hard @@ -3478,7 +3423,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd @@ -3515,8 +3460,8 @@ __metadata: linkType: hard "@jsonjoy.com/json-pack@npm:^1.0.3": - version: 1.0.4 - resolution: "@jsonjoy.com/json-pack@npm:1.0.4" + version: 1.1.0 + resolution: "@jsonjoy.com/json-pack@npm:1.1.0" dependencies: "@jsonjoy.com/base64": "npm:^1.1.1" "@jsonjoy.com/util": "npm:^1.1.2" @@ -3524,23 +3469,16 @@ __metadata: thingies: "npm:^1.20.0" peerDependencies: tslib: 2 - checksum: 10/dd749e7c4610db4ab7d53d9df6d8465b9805e560eda9c60dac4435b50a30710d39e975887104021a11d91c12fdf9c1752f0b0c63580a1b6b1b12854633cfea39 + checksum: 10/cd2776085ad56b470cd53137880b87c2503b07781756c50f1e9f40dd909abeba130a6144d203fcf605ec03dee4cd19bb3424169c8cb588f90a3f06939994c64e languageName: node linkType: hard -"@jsonjoy.com/util@npm:^1.1.2": - version: 1.2.0 - resolution: "@jsonjoy.com/util@npm:1.2.0" +"@jsonjoy.com/util@npm:^1.1.2, @jsonjoy.com/util@npm:^1.3.0": + version: 1.3.0 + resolution: "@jsonjoy.com/util@npm:1.3.0" peerDependencies: tslib: 2 - checksum: 10/6af58b3d34266f1f8e4f953668f163ef1028a5d372a90391bd238c2ea637e0ea3792b18b99162b8ec072af35baebe0e947d9eedd702ad942e697ed419f1e54eb - languageName: node - linkType: hard - -"@juggle/resize-observer@npm:^3.3.1": - version: 3.4.0 - resolution: "@juggle/resize-observer@npm:3.4.0" - checksum: 10/73d1d00ee9132fb6f0aea0531940a6b93603e935590bd450fc6285a328d906102eeeb95dea77b2edac0e779031a9708aa8c82502bd298ee4dd26e7dff48f397a + checksum: 10/10befb2fe43c94759361fab4ee0eeed600b034d7a984d01c5246b07b658836c9ba9661cd6b2da521c22158f2dfe9decab9859bd6c347ccbb114b2c1d081ae1ab languageName: node linkType: hard @@ -3648,15 +3586,15 @@ __metadata: linkType: hard "@lmc-eu/conventional-changelog-lmc@npm:^2.0.2": - version: 2.0.2 - resolution: "@lmc-eu/conventional-changelog-lmc@npm:2.0.2" + version: 2.0.3 + resolution: "@lmc-eu/conventional-changelog-lmc@npm:2.0.3" dependencies: compare-func: "npm:^2.0.0" - checksum: 10/a6d2734b37d6d20762d2b790a5d0310e2569596b389e704faf03dfa3e74427f6dc79b0864d4f8f5c1e30d772b4e3e076821e2d827388d667653b87aa8d071f8a + checksum: 10/a6c8e14efa802a10fb35db38798d8398fa8fbcf4720c037ad2ecadb7f7041ab83708da68c0ffb60611871f06a94db7ddf0817160c48c4d10775ee00fbff8b21e languageName: node linkType: hard -"@lmc-eu/eslint-config-base@npm:3.0.2, @lmc-eu/eslint-config-base@npm:^3.0.2": +"@lmc-eu/eslint-config-base@npm:3.0.2": version: 3.0.2 resolution: "@lmc-eu/eslint-config-base@npm:3.0.2" dependencies: @@ -3669,16 +3607,16 @@ __metadata: languageName: node linkType: hard -"@lmc-eu/eslint-config-base@npm:^3.1.1": - version: 3.1.1 - resolution: "@lmc-eu/eslint-config-base@npm:3.1.1" +"@lmc-eu/eslint-config-base@npm:^3.0.2, @lmc-eu/eslint-config-base@npm:^3.1.2": + version: 3.1.2 + resolution: "@lmc-eu/eslint-config-base@npm:3.1.2" dependencies: eslint-config-airbnb-base: "npm:^15.0.0" eslint-plugin-import: "npm:^2.25.2" eslint-plugin-jsdoc: "npm:^46.0.0" peerDependencies: eslint: ^8.1.0 - checksum: 10/8f0bab132ef75d0bbef7df0b46d205f1bd0a27d6fea85a004a8e766455c8706478fc11dfd262db4876aae10a6386246ae6fffcfae04a2c54ae4311084886f0a9 + checksum: 10/1c7493ead7d1dbd3dfeebf8ec42052bbbb9edc31c073c0999317d4d76309c41a21c25c0a430f074e66b34c832722a8c866f1980ae9df14ad1c45530b41d9c3df languageName: node linkType: hard @@ -3728,16 +3666,16 @@ __metadata: linkType: hard "@lmc-eu/eslint-config-typescript@npm:^2.1.3": - version: 2.1.3 - resolution: "@lmc-eu/eslint-config-typescript@npm:2.1.3" + version: 2.1.4 + resolution: "@lmc-eu/eslint-config-typescript@npm:2.1.4" dependencies: - "@lmc-eu/eslint-config-base": "npm:^3.1.1" + "@lmc-eu/eslint-config-base": "npm:^3.1.2" "@typescript-eslint/eslint-plugin": "npm:^6.0.0" "@typescript-eslint/parser": "npm:^6.0.0" eslint-import-resolver-typescript: "npm:^3.2.7" peerDependencies: eslint: ^8 - checksum: 10/087c7a322da4327b99b6dc38d0dd1295aa1bed6aee97b806652d23fbbb7c256c1097ad20c0d877ca47f5313de17af45d57e4d47075e1be545f4da29ad9bb3a07 + checksum: 10/807df46b417e2df1f2d274069e3cacb59233fb74aa01b0bf80413568f0da811ea53e93af859807f7c6c01044fae41eb46d99c1073746534a7a5efa866d59f762 languageName: node linkType: hard @@ -4270,8 +4208,8 @@ __metadata: linkType: hard "@netlify/cache-utils@npm:^5.1.5": - version: 5.1.5 - resolution: "@netlify/cache-utils@npm:5.1.5" + version: 5.1.6 + resolution: "@netlify/cache-utils@npm:5.1.6" dependencies: cpy: "npm:^9.0.0" get-stream: "npm:^6.0.0" @@ -4281,7 +4219,7 @@ __metadata: move-file: "npm:^3.0.0" path-exists: "npm:^5.0.0" readdirp: "npm:^3.4.0" - checksum: 10/c6b4c3a1101d94b09c8c800ec88cee29bbd2d1e0be5e1f14bdd9790b06f9c3cfcdc335ecdbefaeb8a1bff5c2d9acdb15d9d1ee9620c820f6a025e4ba1635a638 + checksum: 10/fd01ace0e0dc6482f662352b4f9f605ee313e94af9923538f23524f38b392c9b645da40112b045b4035e60d85d361e97845b9722d31306a126b017c4a5d12362 languageName: node linkType: hard @@ -4320,8 +4258,8 @@ __metadata: linkType: hard "@netlify/config@npm:^20.15.4": - version: 20.17.1 - resolution: "@netlify/config@npm:20.17.1" + version: 20.19.0 + resolution: "@netlify/config@npm:20.19.0" dependencies: "@iarna/toml": "npm:^2.2.5" chalk: "npm:^5.0.0" @@ -4337,7 +4275,7 @@ __metadata: is-plain-obj: "npm:^4.0.0" js-yaml: "npm:^4.0.0" map-obj: "npm:^5.0.0" - netlify: "npm:^13.1.20" + netlify: "npm:^13.1.21" netlify-headers-parser: "npm:^7.1.4" netlify-redirect-parser: "npm:^14.3.0" node-fetch: "npm:^3.3.1" @@ -4349,7 +4287,7 @@ __metadata: yargs: "npm:^17.6.0" bin: netlify-config: bin.js - checksum: 10/334eb551a5eac50dfb005bd97f345c3853a6a7c313ac2290253a5c897c33f5ee7b17567419c0420b1cbd266aa1208f7f3e10627ec63ec09a2dd500dde92d0eca + checksum: 10/8f48ce40d9303e104e19ec8c74efe030e9753915fd52d2ee357dd4288529a06fc7dfc9fcb417e920c617ecd2612ac63be46da2ce6b048687916673e9f33d8648 languageName: node linkType: hard @@ -4410,13 +4348,13 @@ __metadata: linkType: hard "@netlify/functions-utils@npm:^5.2.70": - version: 5.2.75 - resolution: "@netlify/functions-utils@npm:5.2.75" + version: 5.2.79 + resolution: "@netlify/functions-utils@npm:5.2.79" dependencies: - "@netlify/zip-it-and-ship-it": "npm:9.37.7" + "@netlify/zip-it-and-ship-it": "npm:9.38.0" cpy: "npm:^9.0.0" path-exists: "npm:^5.0.0" - checksum: 10/abe6b24f3e1092c7632d11bdb9ba1f733b0cabcec4325d86120f375f09edee06aa6246a51af175cb050bf20e6b1271d073e9c5a31bbe31f29c6ada917a1238a7 + checksum: 10/bd1333e3ae4b2527eaf78baf1c41500e2a91f92080ce59604f076e13c66dc69ef6e73d4b096185514fd8440ef5852f426abb7768b364af32b3a8411d6f40975c languageName: node linkType: hard @@ -4593,10 +4531,10 @@ __metadata: languageName: node linkType: hard -"@netlify/open-api@npm:^2.33.1": - version: 2.33.1 - resolution: "@netlify/open-api@npm:2.33.1" - checksum: 10/a1d9fee1a0e31ff0a340a565308525122e8791814272470a95af5368ad221415fb9eb11677f40c82fa2f324fc8aac4aecb89df1de1626e27cd12b514ab0b9f80 +"@netlify/open-api@npm:^2.33.1, @netlify/open-api@npm:^2.34.0": + version: 2.34.0 + resolution: "@netlify/open-api@npm:2.34.0" + checksum: 10/2a377555b66f460c6fa8e7e185442279b0d087df8487af5a03c2d4b2382764febddd939e96e5129549f779ee488b09b1faceac604a9ef78af38e3a02d55c07a2 languageName: node linkType: hard @@ -4625,13 +4563,13 @@ __metadata: languageName: node linkType: hard -"@netlify/serverless-functions-api@npm:^1.18.5, @netlify/serverless-functions-api@npm:^1.20.0": - version: 1.21.0 - resolution: "@netlify/serverless-functions-api@npm:1.21.0" +"@netlify/serverless-functions-api@npm:^1.18.5, @netlify/serverless-functions-api@npm:^1.22.0": + version: 1.22.0 + resolution: "@netlify/serverless-functions-api@npm:1.22.0" dependencies: "@netlify/node-cookies": "npm:^0.1.0" urlpattern-polyfill: "npm:8.0.2" - checksum: 10/5fd69ef76d305a08a8e306ae52585ebb5bbd3de8c9493406a2eb52d23e61b25517d31aaac24f0fb4b5727bb802e81dea42b19c273db306a71f499ded1408dc01 + checksum: 10/d0ca675f2f18e909c97e1608ab3d254fd65082b07eb2cb997b4eb795b96b29191ea2c0203368ff07f8296840ffdeff0a7755d99162745761a756586527663283 languageName: node linkType: hard @@ -4679,14 +4617,14 @@ __metadata: languageName: node linkType: hard -"@netlify/zip-it-and-ship-it@npm:9.37.7": - version: 9.37.7 - resolution: "@netlify/zip-it-and-ship-it@npm:9.37.7" +"@netlify/zip-it-and-ship-it@npm:9.38.0": + version: 9.38.0 + resolution: "@netlify/zip-it-and-ship-it@npm:9.38.0" dependencies: "@babel/parser": "npm:^7.22.5" - "@babel/types": "npm:7.24.8" + "@babel/types": "npm:7.25.2" "@netlify/binary-info": "npm:^1.0.0" - "@netlify/serverless-functions-api": "npm:^1.20.0" + "@netlify/serverless-functions-api": "npm:^1.22.0" "@vercel/nft": "npm:^0.27.1" archiver: "npm:^7.0.0" common-path-prefix: "npm:^3.0.0" @@ -4719,7 +4657,7 @@ __metadata: zod: "npm:^3.23.8" bin: zip-it-and-ship-it: bin.js - checksum: 10/aea92b70ee4a613f73b68c3ca0deb6e92b3b39bd5873ec47e85c78bb7930b14bfe780343e64d27d8f833325f8e14e9b8882bd20007ec4b804d0228818e68dd24 + checksum: 10/79dd59170a787a32b00713d14ab9db01e98295bcc1772a2146124e7def404eebe663595caeb03ab17e700b0360f50a447f1afea65f0c2d39901efc1a4fb9b2f3 languageName: node linkType: hard @@ -4730,7 +4668,7 @@ __metadata: languageName: node linkType: hard -"@next/eslint-plugin-next@npm:14.2.5, @next/eslint-plugin-next@npm:^14.2.5": +"@next/eslint-plugin-next@npm:14.2.5": version: 14.2.5 resolution: "@next/eslint-plugin-next@npm:14.2.5" dependencies: @@ -4739,6 +4677,15 @@ __metadata: languageName: node linkType: hard +"@next/eslint-plugin-next@npm:^14.2.5": + version: 14.2.7 + resolution: "@next/eslint-plugin-next@npm:14.2.7" + dependencies: + glob: "npm:10.3.10" + checksum: 10/a1ac9844bd3a24aef9b5b2cf69cc538cbfb391202bad44eb01d62413415a4536046d33ad4e2c534a5c18c866a694266875d9d323260e847e5adcf6582650a6f2 + languageName: node + linkType: hard + "@next/swc-darwin-arm64@npm:14.2.3": version: 14.2.3 resolution: "@next/swc-darwin-arm64@npm:14.2.3" @@ -4838,6 +4785,13 @@ __metadata: languageName: node linkType: hard +"@nolyfill/is-core-module@npm:1.0.39": + version: 1.0.39 + resolution: "@nolyfill/is-core-module@npm:1.0.39" + checksum: 10/0d6e098b871eca71d875651288e1f0fa770a63478b0b50479c99dc760c64175a56b5b04f58d5581bbcc6b552b8191ab415eada093d8df9597ab3423c8cac1815 + languageName: node + linkType: hard + "@npmcli/agent@npm:^2.0.0": version: 2.2.2 resolution: "@npmcli/agent@npm:2.2.2" @@ -5027,12 +4981,12 @@ __metadata: languageName: node linkType: hard -"@nrwl/devkit@npm:19.5.1": - version: 19.5.1 - resolution: "@nrwl/devkit@npm:19.5.1" +"@nrwl/devkit@npm:19.6.4": + version: 19.6.4 + resolution: "@nrwl/devkit@npm:19.6.4" dependencies: - "@nx/devkit": "npm:19.5.1" - checksum: 10/4e2e82cc8bce207c3bb3cc40774d40b9dc9d085ec1fade3beaaa4761a1415c80bb4fa0babe6be24e705d9a6aa7f7d19799f537584d9e9852737c4ebc34ab2cc3 + "@nx/devkit": "npm:19.6.4" + checksum: 10/37952c7b0f03512a5947a72de6e3c85c27e32263d597b80be73b32758f0bc60a1b06d4042657429123e28eed2ac6a2bf3744af7ac1b37c0139dc5ac9e9aabee5 languageName: node linkType: hard @@ -5048,11 +5002,23 @@ __metadata: languageName: node linkType: hard -"@nx/devkit@npm:19.5.1, @nx/devkit@npm:>=17.1.2 < 20": - version: 19.5.1 - resolution: "@nx/devkit@npm:19.5.1" +"@nrwl/tao@npm:19.6.4": + version: 19.6.4 + resolution: "@nrwl/tao@npm:19.6.4" dependencies: - "@nrwl/devkit": "npm:19.5.1" + nx: "npm:19.6.4" + tslib: "npm:^2.3.0" + bin: + tao: index.js + checksum: 10/26b3d619c978d5d913a3947c28d7c096689237524d493ba9bd5b3d4dd748c2f7ab3d2639096a540109e96ee3114d97d2110c295d3bbd66b484bdcd255b6bd69d + languageName: node + linkType: hard + +"@nx/devkit@npm:19.6.4, @nx/devkit@npm:>=17.1.2 < 20": + version: 19.6.4 + resolution: "@nx/devkit@npm:19.6.4" + dependencies: + "@nrwl/devkit": "npm:19.6.4" ejs: "npm:^3.1.7" enquirer: "npm:~2.3.6" ignore: "npm:^5.0.4" @@ -5063,7 +5029,7 @@ __metadata: yargs-parser: "npm:21.1.1" peerDependencies: nx: ">= 17 <= 20" - checksum: 10/8de0cfeefa251fd1ba7ccb154e3ace751f0c18a526c15c6d1f9864a7228ec0b840bd88b021f1bf3c1bf33e76ca51dbb17d98ae71af08987d49a956ab6e4d5acc + checksum: 10/44345da0bd4b88602d2c248076c9c243e6113e565292445143625a1de4e3bf3877cbe64fc239d9c5ce786c16d020f12826beb1baf4411da60e9550a4ee1a868a languageName: node linkType: hard @@ -5074,6 +5040,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-darwin-arm64@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-darwin-arm64@npm:19.6.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@nx/nx-darwin-x64@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-darwin-x64@npm:19.5.1" @@ -5081,6 +5054,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-darwin-x64@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-darwin-x64@npm:19.6.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@nx/nx-freebsd-x64@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-freebsd-x64@npm:19.5.1" @@ -5088,6 +5068,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-freebsd-x64@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-freebsd-x64@npm:19.6.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@nx/nx-linux-arm-gnueabihf@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-linux-arm-gnueabihf@npm:19.5.1" @@ -5095,6 +5082,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm-gnueabihf@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:19.6.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@nx/nx-linux-arm64-gnu@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-linux-arm64-gnu@npm:19.5.1" @@ -5102,6 +5096,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm64-gnu@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-linux-arm64-gnu@npm:19.6.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@nx/nx-linux-arm64-musl@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-linux-arm64-musl@npm:19.5.1" @@ -5109,6 +5110,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm64-musl@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-linux-arm64-musl@npm:19.6.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@nx/nx-linux-x64-gnu@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-linux-x64-gnu@npm:19.5.1" @@ -5116,6 +5124,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-x64-gnu@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-linux-x64-gnu@npm:19.6.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@nx/nx-linux-x64-musl@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-linux-x64-musl@npm:19.5.1" @@ -5123,6 +5138,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-x64-musl@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-linux-x64-musl@npm:19.6.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@nx/nx-win32-arm64-msvc@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-win32-arm64-msvc@npm:19.5.1" @@ -5130,6 +5152,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-win32-arm64-msvc@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-win32-arm64-msvc@npm:19.6.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@nx/nx-win32-x64-msvc@npm:19.5.1": version: 19.5.1 resolution: "@nx/nx-win32-x64-msvc@npm:19.5.1" @@ -5137,6 +5166,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-win32-x64-msvc@npm:19.6.4": + version: 19.6.4 + resolution: "@nx/nx-win32-x64-msvc@npm:19.6.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@octokit/auth-token@npm:^3.0.0": version: 3.0.4 resolution: "@octokit/auth-token@npm:3.0.4" @@ -5723,13 +5759,13 @@ __metadata: linkType: hard "@pnpm/npm-conf@npm:^2.1.0": - version: 2.2.2 - resolution: "@pnpm/npm-conf@npm:2.2.2" + version: 2.3.1 + resolution: "@pnpm/npm-conf@npm:2.3.1" dependencies: "@pnpm/config.env-replace": "npm:^1.1.0" "@pnpm/network.ca-file": "npm:^1.0.1" config-chain: "npm:^1.1.11" - checksum: 10/45422fecc7ed49e5254eef744576625e27cdebccce930f42c66cf2fb70443fc24f506c3fcf4859e6371677ceb144feb45e925ec14774b54588b89806b32dea9a + checksum: 10/44fbb0b166eee3e3631ef0e92b1bed6489aa6975e3e722c16577cc0181b81374f5ae90c6e4da183c8160f996e6b4863325525b00542f42d1b757b51ef62bc4e7 languageName: node linkType: hard @@ -6019,15 +6055,14 @@ __metadata: linkType: hard "@react-hook/resize-observer@npm:^2.0.0": - version: 2.0.1 - resolution: "@react-hook/resize-observer@npm:2.0.1" + version: 2.0.2 + resolution: "@react-hook/resize-observer@npm:2.0.2" dependencies: - "@juggle/resize-observer": "npm:^3.3.1" "@react-hook/latest": "npm:^1.0.2" "@react-hook/passive-layout-effect": "npm:^1.2.0" peerDependencies: react: ">=18" - checksum: 10/9659d97fffe3438d44b15ce04160f2a002295a6c62030e3149178094a03175f0d29a36b5917ef9074163e1b7e4a4f7120830cea53762612e1f64de4231fb2d74 + checksum: 10/42c76790b7b79cd7e31aeb64a8e4abc20c0f563bde369a1fc6b8509b51112221d95e707eded30ebf6e366ad17e93e21e6c906de121269954bafd2700ed44e1b0 languageName: node linkType: hard @@ -6136,9 +6171,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.19.0" +"@rollup/rollup-android-arm-eabi@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -6150,9 +6185,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-android-arm64@npm:4.19.0" +"@rollup/rollup-android-arm64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-android-arm64@npm:4.21.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -6164,9 +6199,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.19.0" +"@rollup/rollup-darwin-arm64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -6178,9 +6213,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.19.0" +"@rollup/rollup-darwin-x64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -6192,9 +6227,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.19.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard @@ -6206,9 +6241,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.19.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard @@ -6220,9 +6255,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.19.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -6234,9 +6269,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.19.0" +"@rollup/rollup-linux-arm64-musl@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -6248,9 +6283,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.19.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard @@ -6262,9 +6297,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.19.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard @@ -6276,9 +6311,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.19.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard @@ -6290,9 +6325,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.19.0" +"@rollup/rollup-linux-x64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -6304,9 +6339,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.19.0" +"@rollup/rollup-linux-x64-musl@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -6318,9 +6353,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.19.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -6332,9 +6367,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.19.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -6346,9 +6381,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.19.0": - version: 4.19.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.19.0" +"@rollup/rollup-win32-x64-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -6423,65 +6458,65 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/tracing@npm:7.118.0": - version: 7.118.0 - resolution: "@sentry-internal/tracing@npm:7.118.0" +"@sentry-internal/tracing@npm:7.119.0": + version: 7.119.0 + resolution: "@sentry-internal/tracing@npm:7.119.0" dependencies: - "@sentry/core": "npm:7.118.0" - "@sentry/types": "npm:7.118.0" - "@sentry/utils": "npm:7.118.0" - checksum: 10/267a31c3b539999193b977bdb03a2c0342ffe4b2d09a697918a137ec49f1ef6bcf22d79de2cf1b72c14ebd0da2fe0c25eaecc6ee3df6c4b5de79a0b9754e73b3 + "@sentry/core": "npm:7.119.0" + "@sentry/types": "npm:7.119.0" + "@sentry/utils": "npm:7.119.0" + checksum: 10/dd1e58c7bd19671e094aaeea0fd3006668cb611b6029f98989a4cc72fb3d2df4f126e526f517fe9071c4eb6ec315e545403b2ae7bae0f0fdf1986c69ce8cf2cd languageName: node linkType: hard -"@sentry/core@npm:7.118.0": - version: 7.118.0 - resolution: "@sentry/core@npm:7.118.0" +"@sentry/core@npm:7.119.0": + version: 7.119.0 + resolution: "@sentry/core@npm:7.119.0" dependencies: - "@sentry/types": "npm:7.118.0" - "@sentry/utils": "npm:7.118.0" - checksum: 10/420dca13985e9f4873626f8e0f3163ca88485c523e6a6a3642af53806cfcdc02766c9acc969f12904499efd560bf0db55e6ebc20a848a5bd63a1ea7f83900cbe + "@sentry/types": "npm:7.119.0" + "@sentry/utils": "npm:7.119.0" + checksum: 10/d7416cef5126706887df2843a5dc890821b7fed2be40a0866b5dd5e185c4aae8944689818c75a1d2ce9ce0bd3fd0ca141b5b9f6b22d8a09b033150d2aa5e9fd2 languageName: node linkType: hard -"@sentry/integrations@npm:7.118.0": - version: 7.118.0 - resolution: "@sentry/integrations@npm:7.118.0" +"@sentry/integrations@npm:7.119.0": + version: 7.119.0 + resolution: "@sentry/integrations@npm:7.119.0" dependencies: - "@sentry/core": "npm:7.118.0" - "@sentry/types": "npm:7.118.0" - "@sentry/utils": "npm:7.118.0" + "@sentry/core": "npm:7.119.0" + "@sentry/types": "npm:7.119.0" + "@sentry/utils": "npm:7.119.0" localforage: "npm:^1.8.1" - checksum: 10/d0899d666b2095a95ff59878bedee20d160e1171295b13673a2d9a1ba7f603a8be45bdaa4b5af9d56e95a2a3a8bdd3402badba7ca29e8ed1fa306369e1a1f723 + checksum: 10/a4c3609d831be4b47753bd9ed5634e834f59749d25ea80df46df4a6644a83efd3d31c727dbb3cabc1952bf9907fb5a6ff104dde9bf5b2121aa3b43beb901e1fe languageName: node linkType: hard "@sentry/node@npm:^7.108.0": - version: 7.118.0 - resolution: "@sentry/node@npm:7.118.0" + version: 7.119.0 + resolution: "@sentry/node@npm:7.119.0" dependencies: - "@sentry-internal/tracing": "npm:7.118.0" - "@sentry/core": "npm:7.118.0" - "@sentry/integrations": "npm:7.118.0" - "@sentry/types": "npm:7.118.0" - "@sentry/utils": "npm:7.118.0" - checksum: 10/31a070779e4ebf81a38a79cdcf8cfdd97a6be269af18f758ab231f05a60d92f0ce64c62871af87eb8eefebc38d77d22892a49b631aaa8dfbaab52ac3215cb998 + "@sentry-internal/tracing": "npm:7.119.0" + "@sentry/core": "npm:7.119.0" + "@sentry/integrations": "npm:7.119.0" + "@sentry/types": "npm:7.119.0" + "@sentry/utils": "npm:7.119.0" + checksum: 10/123549ded1fac78a5508cddef09f6be3fc69476e574dcc4dfe673e0b6e3433cbe8de6a8bba71c86ed1d61f6c8c32bc12b2f71e396b74e8cb5638d9e98732aae2 languageName: node linkType: hard -"@sentry/types@npm:7.118.0": - version: 7.118.0 - resolution: "@sentry/types@npm:7.118.0" - checksum: 10/7a62025e551e1ab61ee37ff63ac14e657cf8758da40b42eb8d83419767235a81eff25073629ce53829f289d9c43e159286913a1db2aaba646a1f0fa1369bafeb +"@sentry/types@npm:7.119.0": + version: 7.119.0 + resolution: "@sentry/types@npm:7.119.0" + checksum: 10/231c567f7717d1d0a49fdc8a627aa28931b2b41795b1faed3c3308874b7dfb8781846b8e8e4fa7ce197e254a566c773848d4c301200611cc8583dae2f9859e99 languageName: node linkType: hard -"@sentry/utils@npm:7.118.0": - version: 7.118.0 - resolution: "@sentry/utils@npm:7.118.0" +"@sentry/utils@npm:7.119.0": + version: 7.119.0 + resolution: "@sentry/utils@npm:7.119.0" dependencies: - "@sentry/types": "npm:7.118.0" - checksum: 10/64f886557b4aae24f3b4264aca663bc159f6365f8f908513e48cd23855f049f1d73d6c4fe8bfef716718af184bbc289ffb63cc5176f0a2bc77085a93f48b028b + "@sentry/types": "npm:7.119.0" + checksum: 10/66eb9a5a6d3366d34821fff59af5e9a64f60eec54c3aeed9941acb81413e19512ded36be919bd5504b5b4720b3be28e4b9e80ea05a326474d87fe636759c6af1 languageName: node linkType: hard @@ -7189,12 +7224,12 @@ __metadata: linkType: hard "@storybook/icons@npm:^1.2.5": - version: 1.2.9 - resolution: "@storybook/icons@npm:1.2.9" + version: 1.2.10 + resolution: "@storybook/icons@npm:1.2.10" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/e57959b8b542aa3b8e9a6e980cf5280733c04ee6af3121bfc9c0273d005a20557f4e4e2c036dbd6b16f08728a0bcdc16c7685d2dcfe97ec181cc1b409c72414e + checksum: 10/fad929a7e3c7a1a0fbf6b924b0be73f557b1bba9519faa15422482f89513ceb4b649444c224ee3d1dfbdce3616e684063cff23da08f6b1dd96f1aff4381388a6 languageName: node linkType: hard @@ -7424,6 +7459,19 @@ __metadata: languageName: node linkType: hard +"@supernova-studio/client@npm:0.53.3": + version: 0.53.3 + resolution: "@supernova-studio/client@npm:0.53.3" + dependencies: + prosemirror-model: "npm:1.19.4" + typescript: "npm:5.0.4" + y-prosemirror: "npm:1.2.2" + yjs: "npm:13.6.10" + zod: "npm:3.23.6" + checksum: 10/926eed6565917dd31e9fe56a6bd6f504313b5fac365beec53910e29708ae6d3cd5c080a3e4b2e5c331b303cbe037541af488fbce4bf4c57c9e829a5117f75900 + languageName: node + linkType: hard + "@supernova-studio/client@npm:^0.47.66": version: 0.47.75 resolution: "@supernova-studio/client@npm:0.47.75" @@ -7437,6 +7485,18 @@ __metadata: languageName: node linkType: hard +"@supernova-studio/model@npm:0.53.3": + version: 0.53.3 + resolution: "@supernova-studio/model@npm:0.53.3" + dependencies: + "@sindresorhus/slugify": "npm:1.1.2" + deep-equal: "npm:2.2.3" + ip-cidr: "npm:3.1.0" + zod: "npm:3.23.6" + checksum: 10/e2790af7852526163f7d6253ca2c5165e0c19d30bcd0a086d39ae0a25a33836d211e9e00194a849db57583c3c5024b25b69e6369e64257bb54ea4e329372b7fe + languageName: node + linkType: hard + "@supernova-studio/model@npm:^0.47.66": version: 0.47.75 resolution: "@supernova-studio/model@npm:0.47.75" @@ -7449,29 +7509,32 @@ __metadata: linkType: hard "@supernovaio/export-helpers@npm:^1.0.9": - version: 1.0.9 - resolution: "@supernovaio/export-helpers@npm:1.0.9" + version: 1.0.11 + resolution: "@supernovaio/export-helpers@npm:1.0.11" dependencies: - "@supernovaio/sdk-exporters": "npm:2.0.9" + "@supernovaio/sdk-exporters": "npm:2.0.18" change-case: "npm:4.1.2" - checksum: 10/6163b5c935b396de7deb9f0e55ed1cbcf2c4062837da2c366a7135392fee80ef452c308ec93479e943b7229707d38fdf92f1b4d5f528068243f2b074f23376da + checksum: 10/16c90547deeb7f9af7b2416a2ff2dc7dc45f1c447f87940b35f021ad09df3f413c9c5f22c4b66732c89d7dba1dcdca6bfeb3f7c56614fcf47d1e08c2bd35e517 languageName: node linkType: hard -"@supernovaio/sdk-exporters@npm:2.0.9": - version: 2.0.9 - resolution: "@supernovaio/sdk-exporters@npm:2.0.9" - checksum: 10/99a93ae506306c2c1c38ba3d2755d91580268e20041ba181a61eabcfef91f3dd7ad6accc5076b058394936cc577dc5ef7a79f68212cd82deef9e756e02438414 +"@supernovaio/sdk-exporters@npm:2.0.18": + version: 2.0.18 + resolution: "@supernovaio/sdk-exporters@npm:2.0.18" + dependencies: + "@supernova-studio/client": "npm:^0.47.66" + "@supernova-studio/model": "npm:^0.47.66" + checksum: 10/35c35999fa1cb26d329f186af3868fbf78ca205ee575292a99275657630bc5260da3c754a03084dd0da6569fef76abb3e1e903c98ddde9a8bad8482153555bf3 languageName: node linkType: hard "@supernovaio/sdk-exporters@npm:^2.0.17": - version: 2.0.17 - resolution: "@supernovaio/sdk-exporters@npm:2.0.17" + version: 2.0.19 + resolution: "@supernovaio/sdk-exporters@npm:2.0.19" dependencies: - "@supernova-studio/client": "npm:^0.47.66" - "@supernova-studio/model": "npm:^0.47.66" - checksum: 10/900f55fe0fa6dae22626b3d319516c307207d335d006be9d253e92949ac6b2a40591470595950c00c7578baf0ec707ac771fb5a862ff063c7884e22bb8a402d1 + "@supernova-studio/client": "npm:0.53.3" + "@supernova-studio/model": "npm:0.53.3" + checksum: 10/423ea726b585e3ffcf832a444666f0d93d42a259a9688ef2596e22bd05fedf74bbefa508f526501af409769dd21740d88fd4bd67cbfb36c8367bb43ed8e4ec8b languageName: node linkType: hard @@ -7836,7 +7899,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:6.4.6, @testing-library/jest-dom@npm:^6.4.2, @testing-library/jest-dom@npm:^6.4.5": +"@testing-library/jest-dom@npm:6.4.6": version: 6.4.6 resolution: "@testing-library/jest-dom@npm:6.4.6" dependencies: @@ -7869,6 +7932,21 @@ __metadata: languageName: node linkType: hard +"@testing-library/jest-dom@npm:^6.4.2, @testing-library/jest-dom@npm:^6.4.5": + version: 6.5.0 + resolution: "@testing-library/jest-dom@npm:6.5.0" + dependencies: + "@adobe/css-tools": "npm:^4.4.0" + aria-query: "npm:^5.0.0" + chalk: "npm:^3.0.0" + css.escape: "npm:^1.5.1" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.21" + redent: "npm:^3.0.0" + checksum: 10/3d2080888af5fd7306f57448beb5a23f55d965e265b5e53394fffc112dfb0678d616a5274ff0200c46c7618f293520f86fc8562eecd8bdbc0dbb3294d63ec431 + languageName: node + linkType: hard + "@testing-library/react@npm:16.0.0": version: 16.0.0 resolution: "@testing-library/react@npm:16.0.0" @@ -8064,9 +8142,9 @@ __metadata: linkType: hard "@types/diff@npm:^5.0.9": - version: 5.2.1 - resolution: "@types/diff@npm:5.2.1" - checksum: 10/dcfb214aa99b252237f195d3c9f241329c8092b2961ab98261d75a97a85f2a48dd758a4f65c0bd38027a1b7b0963c45e7e8668005f48c96de78f164bf9a2ce30 + version: 5.2.2 + resolution: "@types/diff@npm:5.2.2" + checksum: 10/e682ef27160192ad7986544f7cc059cbc99ddcc138866f03d2cdfe8579d35dbb376f2152fb7dfa034ad089f3a164148ed998dcc2d27c619d307a94c35d0d4ae2 languageName: node linkType: hard @@ -8116,12 +8194,12 @@ __metadata: linkType: hard "@types/eslint@npm:*": - version: 8.56.10 - resolution: "@types/eslint@npm:8.56.10" + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: 10/0cdd914b944ebba51c35827d3ef95bc3e16eb82b4c2741f6437fa57cdb00a4407c77f89c220afe9e4c9566982ec8a0fb9b97c956ac3bd4623a3b6af32eed8424 + checksum: 10/719fcd255760168a43d0e306ef87548e1e15bffe361d5f4022b0f266575637acc0ecb85604ac97879ee8ae83c6a6d0613b0ed31d0209ddf22a0fe6d608fc56fe languageName: node linkType: hard @@ -8249,11 +8327,11 @@ __metadata: linkType: hard "@types/http-proxy@npm:^1.17.8": - version: 1.17.14 - resolution: "@types/http-proxy@npm:1.17.14" + version: 1.17.15 + resolution: "@types/http-proxy@npm:1.17.15" dependencies: "@types/node": "npm:*" - checksum: 10/aa1a3e66cd43cbf06ea5901bf761d2031200a0ab42ba7e462a15c752e70f8669f21fb3be7c2f18fefcb83b95132dfa15740282e7421b856745598fbaea8e3a42 + checksum: 10/fa86d5397c021f6c824d1143a206009bfb64ff703da32fb30f6176c603daf6c24ce3a28daf26b3945c94dd10f9d76f07ea7a6a2c3e9b710e00ff42da32e08dea languageName: node linkType: hard @@ -8387,7 +8465,16 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:20.14.9": +"@types/node@npm:*": + version: 22.5.2 + resolution: "@types/node@npm:22.5.2" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10/c4634118abc36d1436d62e192f7088c211139165a395f1cdacca28df421d8dc8dd332b3104d72fc37764d73a205a4bbbe6e6abdc817c2c81883e147d1a96d497 + languageName: node + linkType: hard + +"@types/node@npm:20.14.9": version: 20.14.9 resolution: "@types/node@npm:20.14.9" dependencies: @@ -8404,20 +8491,20 @@ __metadata: linkType: hard "@types/node@npm:^18.0.0, @types/node@npm:^18.16.3": - version: 18.19.41 - resolution: "@types/node@npm:18.19.41" + version: 18.19.48 + resolution: "@types/node@npm:18.19.48" dependencies: undici-types: "npm:~5.26.4" - checksum: 10/236ba16dc956bd29e9a897d0fe969e5e6d839a520bfabb021e9d0c11df6b1cb422f214f50fbe38bd99bdf94fcae0a5bd6a6ac6c3aa271a4cec2fc13d03fc7b72 + checksum: 10/4c4361f38c0b4d49230d89c3a7c883df966a38f1563a5c2e46e49ac7b9a44c1051464855d9e7cf5731cbf3489649fa385cf3183e2c6a5bcbab79449c90f2f5b4 languageName: node linkType: hard "@types/node@npm:^20": - version: 20.14.15 - resolution: "@types/node@npm:20.14.15" + version: 20.16.3 + resolution: "@types/node@npm:20.16.3" dependencies: - undici-types: "npm:~5.26.4" - checksum: 10/87a4a4313e886c1db1c8042004956095477e040f67df993fd16a2d50488c750bda81e85bf702c2e629e964605034e8dfe0cb91b65ce22b6b8eec37ece61c6b6c + undici-types: "npm:~6.19.2" + checksum: 10/3b14b8b3cb92adc7db69f8cf351e7b6b5001e5c7cdb07470943215afeafc2952ae588c918543784e8f8e975d43d609ce0c7bced91f1b8745f1669d6137adaabc languageName: node linkType: hard @@ -8578,16 +8665,16 @@ __metadata: linkType: hard "@types/unist@npm:*, @types/unist@npm:^3.0.0": - version: 3.0.2 - resolution: "@types/unist@npm:3.0.2" - checksum: 10/3d04d0be69316e5f14599a0d993a208606c12818cf631fd399243d1dc7a9bd8a3917d6066baa6abc290814afbd744621484756803c80cba892c39cd4b4a85616 + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 10/96e6453da9e075aaef1dc22482463898198acdc1eeb99b465e65e34303e2ec1e3b1ed4469a9118275ec284dc98019f63c3f5d49422f0e4ac707e5ab90fb3b71a languageName: node linkType: hard "@types/unist@npm:^2": - version: 2.0.10 - resolution: "@types/unist@npm:2.0.10" - checksum: 10/e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10/6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e languageName: node linkType: hard @@ -8622,11 +8709,11 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" dependencies: "@types/yargs-parser": "npm:*" - checksum: 10/1e2b2673847011ce43607df690d392f137d95a2d6ea85aa319403eadda2ef4277365efd4982354d8843f2611ef3846c88599660aaeb537fa9ccddae83c2a89de + checksum: 10/16f6681bf4d99fb671bf56029141ed01db2862e3db9df7fc92d8bea494359ac96a1b4b1c35a836d1e95e665fb18ad753ab2015fc0db663454e8fd4e5d5e2ef91 languageName: node linkType: hard @@ -9049,26 +9136,26 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-core@npm:3.4.33": - version: 3.4.33 - resolution: "@vue/compiler-core@npm:3.4.33" +"@vue/compiler-core@npm:3.4.38": + version: 3.4.38 + resolution: "@vue/compiler-core@npm:3.4.38" dependencies: "@babel/parser": "npm:^7.24.7" - "@vue/shared": "npm:3.4.33" + "@vue/shared": "npm:3.4.38" entities: "npm:^4.5.0" estree-walker: "npm:^2.0.2" source-map-js: "npm:^1.2.0" - checksum: 10/91580713a537687244891f56671a1db356517088a715d745a68a4021799d4a0ff69de7b265f4f4f4ab82d24f5a08b62a2c0844d8cb557d6936b5fef154d791f1 + checksum: 10/16449e9083c290e6c13e1cc0cb0a0a457817a52533d10902388c872fb1337ba0fa29fb7b8394df5a10f5ed3bad264d6c386f9eaf47c07982a543f277dbee9b8a languageName: node linkType: hard "@vue/compiler-dom@npm:^3.3.0": - version: 3.4.33 - resolution: "@vue/compiler-dom@npm:3.4.33" + version: 3.4.38 + resolution: "@vue/compiler-dom@npm:3.4.38" dependencies: - "@vue/compiler-core": "npm:3.4.33" - "@vue/shared": "npm:3.4.33" - checksum: 10/3003393487f800c4f2978cc248c285efc9e1f984a7e8f1ff36146bc26a5914c6978e1e8305cf0ee1103c7bae1202259c02a51a0bf069772af5f125724c055cdf + "@vue/compiler-core": "npm:3.4.38" + "@vue/shared": "npm:3.4.38" + checksum: 10/4012fab212dc0628ef72f5ae13aa2dd551efb8be7f2aa8abe2a1db15058ddda29912a1e3aa1fc6712e2d8efe84724f16a907ad2cda987631bfc79330afc8d451 languageName: node linkType: hard @@ -9094,10 +9181,10 @@ __metadata: languageName: node linkType: hard -"@vue/shared@npm:3.4.33, @vue/shared@npm:^3.3.0": - version: 3.4.33 - resolution: "@vue/shared@npm:3.4.33" - checksum: 10/0cb9f1c4841f3da14ee9bab0a0fb169ddf1a1979b1aa70a4c7b6279e7fc7e5296c7c63f56bbdb1f43e4264aab3d7daa3e2355905caf727cf5f9088f99dd1a8c4 +"@vue/shared@npm:3.4.38, @vue/shared@npm:^3.3.0": + version: 3.4.38 + resolution: "@vue/shared@npm:3.4.38" + checksum: 10/46bfc1f3932fd154ff84dcd267cae4db730c98db433c848d40c9c0dc23dcabdb5efe96a3a378c9ed3b7e8281ca17e2753f0ce98ae43b54b315550dfaccb56868 languageName: node linkType: hard @@ -9565,7 +9652,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.12.1, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -9739,7 +9826,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:7.0.0": +"ansi-escapes@npm:7.0.0, ansi-escapes@npm:^7.0.0": version: 7.0.0 resolution: "ansi-escapes@npm:7.0.0" dependencies: @@ -10267,9 +10354,9 @@ __metadata: linkType: hard "async@npm:^3.2.3, async@npm:^3.2.4": - version: 3.2.5 - resolution: "async@npm:3.2.5" - checksum: 10/323c3615c3f0ab1ac25a6f953296bc0ac3213d5e0f1c0debdb12964e55963af288d570293c11e44f7967af58c06d2a88d0ea588c86ec0fbf62fa98037f604a0f + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10/cb6e0561a3c01c4b56a799cc8bab6ea5fef45f069ab32500b6e19508db270ef2dffa55e5aed5865c5526e9907b1f8be61b27530823b411ffafb5e1538c86c368 languageName: node linkType: hard @@ -10322,30 +10409,30 @@ __metadata: linkType: hard "avvio@npm:^8.3.0": - version: 8.3.2 - resolution: "avvio@npm:8.3.2" + version: 8.4.0 + resolution: "avvio@npm:8.4.0" dependencies: "@fastify/error": "npm:^3.3.0" fastq: "npm:^1.17.1" - checksum: 10/5edef27388ac4c3f07453460b1cc66bad9ae9be2af9b55150ddf720729e2bf12be1dd81c822744363fdea4bb682edcf4c28d8235114e17b78f85f5c398e5bf68 + checksum: 10/b98ffd99743d404d32094a26ce5296937cdfc8a7c75837fedfb79b409a9a51b177173aa90e930b1fa453965b5fa18ee4548dca20eac191846d5de91c487c4da4 languageName: node linkType: hard "axe-core@npm:^4.9.1": - version: 4.9.1 - resolution: "axe-core@npm:4.9.1" - checksum: 10/9d4944f6d3289428e1c6b41a80516f6558a960889f59c3c00f0fb88b955eda81edf9ca377c2cbc2a775f4003596d2aeaa35acca5aad3e1fc6b3d1e26e82b02cc + version: 4.10.0 + resolution: "axe-core@npm:4.10.0" + checksum: 10/6158489a7a704edc98bd30ed56243b8280c5203c60e095a2feb5bff95d9bf2ef10becfe359b1cbc8601338418999c26cf4eee704181dedbcb487f4d63a06d8d5 languageName: node linkType: hard -"axios@npm:^1.6.0": - version: 1.7.2 - resolution: "axios@npm:1.7.2" +"axios@npm:^1.6.0, axios@npm:^1.7.4": + version: 1.7.7 + resolution: "axios@npm:1.7.7" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.0" proxy-from-env: "npm:^1.1.0" - checksum: 10/6ae80dda9736bb4762ce717f1a26ff997d94672d3a5799ad9941c24d4fb019c1dff45be8272f08d1975d7950bac281f3ba24aff5ecd49ef5a04d872ec428782f + checksum: 10/7f875ea13b9298cd7b40fd09985209f7a38d38321f1118c701520939de2f113c4ba137832fe8e3f811f99a38e12c8225481011023209a77b0c0641270e20cde1 languageName: node linkType: hard @@ -10469,15 +10556,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.4": - version: 0.10.4 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" +"babel-plugin-polyfill-corejs3@npm:^0.10.4, babel-plugin-polyfill-corejs3@npm:^0.10.6": + version: 0.10.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.1" - core-js-compat: "npm:^3.36.1" + "@babel/helper-define-polyfill-provider": "npm:^0.6.2" + core-js-compat: "npm:^3.38.0" peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/a69ed5a95bb55e9b7ea37307d56113f7e24054d479c15de6d50fa61388b5334bed1f9b6414cde6c575fa910a4de4d1ab4f2d22720967d57c4fec9d1b8f61b355 + checksum: 10/360ac9054a57a18c540059dc627ad5d84d15f79790cb3d84d19a02eec7188c67d08a07db789c3822d6f5df22d918e296d1f27c4055fec2e287d328f09ea8a78a languageName: node linkType: hard @@ -10493,24 +10580,27 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" dependencies: "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.8.3" - "@babel/plugin-syntax-import-meta": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/94561959cb12bfa80867c9eeeace7c3d48d61707d33e55b4c3fdbe82fc745913eb2dbfafca62aef297421b38aadcb58550e5943f50fbcebbeefd70ce2bed4b74 + checksum: 10/46331111ae72b7121172fd9e6a4a7830f651ad44bf26dbbf77b3c8a60a18009411a3eacb5e72274004290c110371230272109957d5224d155436b4794ead2f1b languageName: node linkType: hard @@ -10614,20 +10704,20 @@ __metadata: linkType: hard "bare-fs@npm:^2.1.1": - version: 2.3.1 - resolution: "bare-fs@npm:2.3.1" + version: 2.3.3 + resolution: "bare-fs@npm:2.3.3" dependencies: bare-events: "npm:^2.0.0" bare-path: "npm:^2.0.0" bare-stream: "npm:^2.0.0" - checksum: 10/1fe777a1a265c8dfdff2a5e28a2295368fad08a245364877ca2f382021cb591600e5c84911377dc66b7df47a6e3adef6019256591362a3670a75a5d62ec8194c + checksum: 10/d924f412476fc6beb6a23ba1986a9a7e230b5c39c8070c0246a971b65558f31ec0923d01295400a44eaaed6be2812ca802db62c476dfaed997bd61c039e6166d languageName: node linkType: hard "bare-os@npm:^2.1.0": - version: 2.4.0 - resolution: "bare-os@npm:2.4.0" - checksum: 10/3514944652d29cdde7be554a89440306be326f2760c3e50c7dda507d540f21c0b89bd9f4ecb4642401501860f22ddd11c4403f7f5dacaf687fc75320738e1176 + version: 2.4.2 + resolution: "bare-os@npm:2.4.2" + checksum: 10/b6abd3a965b783c77d89f648b8229336a3d882b5e5b9780b671a6f2c361ae68c546163d134facc0da53c985e0cc64e5d3e3817cc1a88d8064b83b53032c38a79 languageName: node linkType: hard @@ -10641,11 +10731,11 @@ __metadata: linkType: hard "bare-stream@npm:^2.0.0": - version: 2.1.3 - resolution: "bare-stream@npm:2.1.3" + version: 2.2.0 + resolution: "bare-stream@npm:2.2.0" dependencies: streamx: "npm:^2.18.0" - checksum: 10/05ef8f2e691cd9649a0dda3a37580f4cf1aa1d1a08d489f64fbe10455acad63ac08b390f9381917c41700ee7adf5fc178106eb2c6d4be3b5453f1433c4147841 + checksum: 10/35128f19560df2efa28e39cbd53813829b286821e52b31db6438d05d13b392e565151043df8c1db8656a6234a8c3fbfa213231fcdb9bbacd9d59535bcb27f4d5 languageName: node linkType: hard @@ -10859,17 +10949,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.10, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1": - version: 4.23.2 - resolution: "browserslist@npm:4.23.2" +"browserslist@npm:^4.21.10, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" dependencies: - caniuse-lite: "npm:^1.0.30001640" - electron-to-chromium: "npm:^1.4.820" - node-releases: "npm:^2.0.14" + caniuse-lite: "npm:^1.0.30001646" + electron-to-chromium: "npm:^1.5.4" + node-releases: "npm:^2.0.18" update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: 10/326a98b1c39bcc9a99b197f15790dc28e122b1aead3257c837421899377ac96239123f26868698085b3d9be916d72540602738e1f857e86a387e810af3fda6e5 + checksum: 10/e266d18c6c6c5becf9a1a7aa264477677b9796387972e8fce34854bb33dc1666194dc28389780e5dc6566e68a95e87ece2ce222e1c4ca93c2b75b61dfebd5f1c languageName: node linkType: hard @@ -11134,17 +11224,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001579": - version: 1.0.30001651 - resolution: "caniuse-lite@npm:1.0.30001651" - checksum: 10/fe4857b2a91a9cb77993eec9622de68bea0df17c31cb9584ca5c562f64bb3b8fda316d898aa3b1ee3ee9f7d80f6bf13c42acb09d9a56a1a6c64afaf7381472fa - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001640": - version: 1.0.30001643 - resolution: "caniuse-lite@npm:1.0.30001643" - checksum: 10/dddbda29fa24fbc435873309c71070461cbfc915d9bce3216180524c20c5637b2bee1a14b45972e9ac19e1fdf63fba3f63608b9e7d68de32f5ee1953c8c69e05 +"caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001599, caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001655 + resolution: "caniuse-lite@npm:1.0.30001655" + checksum: 10/98e80bdb5a5e4ac1738df7df14379a51aed2fcf3402b18361ac4902ac8afacf35920498afd0bfb71d6902ad4ab4ccbf2d09c792ec3a4925c2e3d186b803f6bc7 languageName: node linkType: hard @@ -11160,8 +11243,8 @@ __metadata: linkType: hard "chai@npm:^4.3.10": - version: 4.4.1 - resolution: "chai@npm:4.4.1" + version: 4.5.0 + resolution: "chai@npm:4.5.0" dependencies: assertion-error: "npm:^1.1.0" check-error: "npm:^1.0.3" @@ -11169,8 +11252,8 @@ __metadata: get-func-name: "npm:^2.0.2" loupe: "npm:^2.3.6" pathval: "npm:^1.1.1" - type-detect: "npm:^4.0.8" - checksum: 10/c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae + type-detect: "npm:^4.1.0" + checksum: 10/cde341aee15b0a51559c7cfc20788dcfb4d586a498cfb93b937bb568fd45c777b73b1461274be6092b6bf868adb4e3a63f3fec13c89f7d8fb194f84c6fa42d5f languageName: node linkType: hard @@ -11394,9 +11477,9 @@ __metadata: linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.3.1 - resolution: "cjs-module-lexer@npm:1.3.1" - checksum: 10/6629188d5ce74b57e5dce2222db851b5496a8d65b533a05957fb24089a3cec8d769378013c375a954c5a0f7522cde6a36d5a65bfd88f5575cb2de3176046fa8e + version: 1.4.0 + resolution: "cjs-module-lexer@npm:1.4.0" + checksum: 10/b041096749792526120d8b8756929f8ef5dd4596502a0e1013f857e3027acd6091915fea77037921d70ee1a99988a100d994d3d3c2e323b04dd4c5ffd516cf13 languageName: node linkType: hard @@ -11498,6 +11581,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^5.0.0": + version: 5.0.0 + resolution: "cli-cursor@npm:5.0.0" + dependencies: + restore-cursor: "npm:^5.0.0" + checksum: 10/1eb9a3f878b31addfe8d82c6d915ec2330cec8447ab1f117f4aa34f0137fbb3137ec3466e1c9a65bcb7557f6e486d343f2da57f253a2f668d691372dfa15c090 + languageName: node + linkType: hard + "cli-progress@npm:^3.11.2": version: 3.12.0 resolution: "cli-progress@npm:3.12.0" @@ -12197,9 +12289,9 @@ __metadata: linkType: hard "cookie-es@npm:^1.1.0": - version: 1.2.1 - resolution: "cookie-es@npm:1.2.1" - checksum: 10/805cf5f6c6205f9e3cfaa1d62227f7b7a8ec146e10c5c06378b5c918798911eaa83e8e219a79c4a57374f1a2ee8491ea399a19d26cbfe856e2b350b628350b4f + version: 1.2.2 + resolution: "cookie-es@npm:1.2.2" + checksum: 10/0fd742c11caa185928e450543f84df62d4b2c1fc7b5041196b57b7db04e1c6ac6585fb40e4f579a2819efefd2d6a9cbb4d17f71240d05f4dcd8f74ae81341a20 languageName: node linkType: hard @@ -12217,16 +12309,16 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1, core-js-compat@npm:^3.37.1": - version: 3.37.1 - resolution: "core-js-compat@npm:3.37.1" +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": + version: 3.38.1 + resolution: "core-js-compat@npm:3.38.1" dependencies: - browserslist: "npm:^4.23.0" - checksum: 10/30c6fdbd9ff179cc53951814689b8aabec106e5de6cddfa7a7feacc96b66d415b8eebcf5ec8f7c68ef35c552fe7d39edb8b15b1ce0f27379a272295b6e937061 + browserslist: "npm:^4.23.3" + checksum: 10/4e2f219354fd268895f79486461a12df96f24ed307321482fe2a43529c5a64e7c16bcba654980ba217d603444f5141d43a79058aeac77511085f065c5da72207 languageName: node linkType: hard -"core-js@npm:3.37.1, core-js@npm:^3.29.1": +"core-js@npm:3.37.1": version: 3.37.1 resolution: "core-js@npm:3.37.1" checksum: 10/25d6bd15fcc6ffd2a0ec0be57a78ff3358b3e1fdffdb6800fc93dcfdb3854037aee41f3d101aed8c37905d107daf98218b3e7ee95cec383710d2a66a5d9e541b @@ -12240,6 +12332,13 @@ __metadata: languageName: node linkType: hard +"core-js@npm:^3.29.1": + version: 3.38.1 + resolution: "core-js@npm:3.38.1" + checksum: 10/3c25fdf0b2595ed37ceb305213a61e2cf26185f628455e99d1c736dda5f69e2de4de7126e6a1da136f54260c4fcc982c4215e37b5a618790a597930f854c0a37 + languageName: node + linkType: hard + "core-util-is@npm:^1.0.3, core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -12532,17 +12631,7 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^1.1.2": - version: 1.1.3 - resolution: "css-tree@npm:1.1.3" - dependencies: - mdn-data: "npm:2.0.14" - source-map: "npm:^0.6.1" - checksum: 10/29710728cc4b136f1e9b23ee1228ec403ec9f3d487bc94a9c5dbec563c1e08c59bc917dd6f82521a35e869ff655c298270f43ca673265005b0cd05b292eb05ab - languageName: node - linkType: hard - -"css-tree@npm:^2.3.1": +"css-tree@npm:2.3.1, css-tree@npm:^2.3.1": version: 2.3.1 resolution: "css-tree@npm:2.3.1" dependencies: @@ -12552,6 +12641,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^1.1.2": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: "npm:2.0.14" + source-map: "npm:^0.6.1" + checksum: 10/29710728cc4b136f1e9b23ee1228ec403ec9f3d487bc94a9c5dbec563c1e08c59bc917dd6f82521a35e869ff655c298270f43ca673265005b0cd05b292eb05ab + languageName: node + linkType: hard + "css-tree@npm:~2.2.0": version: 2.2.1 resolution: "css-tree@npm:2.2.1" @@ -12788,7 +12887,19 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.5, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:~4.3.4": +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.4": + version: 4.3.6 + resolution: "debug@npm:4.3.6" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/d3adb9af7d57a9e809a68f404490cf776122acca16e6359a2702c0f462e510e91f9765c07f707b8ab0d91e03bad57328f3256f5082631cefb5393d0394d50fb7 + languageName: node + linkType: hard + +"debug@npm:4.3.5": version: 4.3.5 resolution: "debug@npm:4.3.5" dependencies: @@ -12816,18 +12927,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.5": - version: 4.3.6 - resolution: "debug@npm:4.3.6" - dependencies: - ms: "npm:2.1.2" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10/d3adb9af7d57a9e809a68f404490cf776122acca16e6359a2702c0f462e510e91f9765c07f707b8ab0d91e03bad57328f3256f5082631cefb5393d0394d50fb7 - languageName: node - linkType: hard - "decache@npm:4.6.2": version: 4.6.2 resolution: "decache@npm:4.6.2" @@ -12900,7 +12999,7 @@ __metadata: languageName: node linkType: hard -"deep-equal@npm:^2.0.5": +"deep-equal@npm:2.2.3, deep-equal@npm:^2.0.5": version: 2.2.3 resolution: "deep-equal@npm:2.2.3" dependencies: @@ -13589,10 +13688,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.820": - version: 1.4.832 - resolution: "electron-to-chromium@npm:1.4.832" - checksum: 10/795eaae1a445283dea93ffd6e2482a794405191bcf30710b0350808e79befdd1f14fc7aed13359cf68d90e24cad93bd7c0965d011293ae183326b54915dd0319 +"electron-to-chromium@npm:^1.5.4": + version: 1.5.13 + resolution: "electron-to-chromium@npm:1.5.13" + checksum: 10/b3de6dbca66e399eacd4f7e2b7603394c8949c9e724d838a45e092725005ff435aabfbf00f738e45451eb23147684f7f9251a5ed75619a539642b2bccea20b45 languageName: node linkType: hard @@ -13604,9 +13703,9 @@ __metadata: linkType: hard "emoji-regex@npm:^10.3.0": - version: 10.3.0 - resolution: "emoji-regex@npm:10.3.0" - checksum: 10/b9b084ebe904f13bb4b66ee4c29fb41a7a4a1165adcc33c1ce8056c0194b882cc91ebdc782f1a779b5d7ea7375c5064643a7734893d7c657b44c5c6b9d7bf1e7 + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10/76bb92c5bcf0b6980d37e535156231e4a9d0aa6ab3b9f5eabf7690231d5aa5d5b8e516f36e6804cbdd0f1c23dfef2a60c40ab7bb8aedd890584281a565b97c50 languageName: node linkType: hard @@ -13656,13 +13755,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.17.0": - version: 5.17.0 - resolution: "enhanced-resolve@npm:5.17.0" +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.15.0, enhanced-resolve@npm:^5.17.0": + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" dependencies: graceful-fs: "npm:^4.2.4" tapable: "npm:^2.2.0" - checksum: 10/8f7bf71537d78e7d20a27363793f2c9e13ec44800c7c7830364a448f80a44994aa19d64beecefa1ab49e4de6f7fbe18cc0931dc449c115f02918ff5fcbe7705f + checksum: 10/e8e03cb7a4bf3c0250a89afbd29e5ec20e90ba5fcd026066232a0754864d7d0a393fa6fc0e5379314a6529165a1834b36731147080714459d98924520410d8f5 languageName: node linkType: hard @@ -13929,13 +14028,13 @@ __metadata: linkType: hard "esbuild-register@npm:^3.5.0": - version: 3.5.0 - resolution: "esbuild-register@npm:3.5.0" + version: 3.6.0 + resolution: "esbuild-register@npm:3.6.0" dependencies: debug: "npm:^4.3.4" peerDependencies: esbuild: ">=0.12 <1" - checksum: 10/af6874ce9b5fcdb0974c9d9e9f16530a5b9bd80c699b2ba9d7ace33439c1af1be6948535c775d9a6439e2bf23fb31cfd54ac882cfa38308a3f182039f4b98a01 + checksum: 10/4ae1a016e3dad5b53c3d68cf07e31d8c1cec1a0b584038ece726097ac80bd33ab48fb224c766c9b341c04793837e652461eaca9327a116e7564f553b61ccca71 languageName: node linkType: hard @@ -14260,9 +14359,9 @@ __metadata: linkType: hard "escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10/a1e07fea2f15663c30e40b9193d658397846ffe28ce0a3e4da0d8e485fedfeca228ab846aee101a05015829adf39f9934ff45b2a3fca47bed37a29646bd05cd3 + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 languageName: node linkType: hard @@ -14473,32 +14572,39 @@ __metadata: linkType: hard "eslint-import-resolver-typescript@npm:^3.2.7, eslint-import-resolver-typescript@npm:^3.5.2": - version: 3.6.1 - resolution: "eslint-import-resolver-typescript@npm:3.6.1" + version: 3.6.3 + resolution: "eslint-import-resolver-typescript@npm:3.6.3" dependencies: - debug: "npm:^4.3.4" - enhanced-resolve: "npm:^5.12.0" - eslint-module-utils: "npm:^2.7.4" - fast-glob: "npm:^3.3.1" - get-tsconfig: "npm:^4.5.0" - is-core-module: "npm:^2.11.0" + "@nolyfill/is-core-module": "npm:1.0.39" + debug: "npm:^4.3.5" + enhanced-resolve: "npm:^5.15.0" + eslint-module-utils: "npm:^2.8.1" + fast-glob: "npm:^3.3.2" + get-tsconfig: "npm:^4.7.5" + is-bun-module: "npm:^1.0.2" is-glob: "npm:^4.0.3" peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 10/261df24721a7c5e37ee598b63e7e12c54e3d20c9ae5de6dbc132cecced023cb967c481007eef73252da108ac7eabb2e859853ff2e2d5776699a2954466ca716f + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + checksum: 10/5f9956dbbd0becc3d6c6cb945dad0e5e6f529cfd0f488d5688f3c59840cd7f4a44ab6aee0f54b5c4188134dab9a01cb63c1201767bde7fc330b7c1a14747f8ac languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" +"eslint-module-utils@npm:^2.8.0, eslint-module-utils@npm:^2.8.1": + version: 2.8.2 + resolution: "eslint-module-utils@npm:2.8.2" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10/3e7892c0a984c963632da56b30ccf8254c29b535467138f91086c2ecdb2ebd10e2be61b54e553f30e5abf1d14d47a7baa0dac890e3a658fd3cd07dca63afbe6d + checksum: 10/d86a8c674717258ff599a82506b9b03626143a6c2d71b0b9ddb1afde4df0cbb9417340dc93c46398294a59c76cb7f3de911fa0199973dcdf4ffc3f8ecad09741 languageName: node linkType: hard @@ -15038,14 +15144,14 @@ __metadata: linkType: hard "execa@npm:^9.0.0": - version: 9.3.0 - resolution: "execa@npm:9.3.0" + version: 9.3.1 + resolution: "execa@npm:9.3.1" dependencies: "@sindresorhus/merge-streams": "npm:^4.0.0" cross-spawn: "npm:^7.0.3" figures: "npm:^6.1.0" get-stream: "npm:^9.0.0" - human-signals: "npm:^7.0.0" + human-signals: "npm:^8.0.0" is-plain-obj: "npm:^4.1.0" is-stream: "npm:^4.0.1" npm-run-path: "npm:^5.2.0" @@ -15053,7 +15159,7 @@ __metadata: signal-exit: "npm:^4.1.0" strip-final-newline: "npm:^4.0.0" yoctocolors: "npm:^2.0.0" - checksum: 10/07cf570a8482b124971e7a01ba047a3d3f80c7ebf7a6c937a65d9cd593f6487b419ba9e7cf4388464e4a605ea4849d4c266d57465bb0496d8fa9275a063ce842 + checksum: 10/ec4a5aec9660cd990cb6f850159945a25f50ab24e1dc5333700299ed874d8a0e7306c6a870121f0eb83662562c49d5009abf01ae5c1d81d425290c5ca49c0f4f languageName: node linkType: hard @@ -15235,7 +15341,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -15396,14 +15502,14 @@ __metadata: linkType: hard "fdir@npm:^6.0.1": - version: 6.2.0 - resolution: "fdir@npm:6.2.0" + version: 6.3.0 + resolution: "fdir@npm:6.3.0" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 10/be15a72e7d8f49d356d9414f1dfc4840663657c700172e9bb90ba6640a551710e4bbd66071c2b09cd5dc97799c9304d618d16d60cab8d8a47734045f0fa9b16f + checksum: 10/baa3a476a8407cc77bc77e3c946aea5ca0aa48f080f2c434b70196a37ddcd57bbc4c12d75164f9e6d947f6e148c297c9fa65f507178d0e9204d98ef83d776dcc languageName: node linkType: hard @@ -15501,11 +15607,11 @@ __metadata: linkType: hard "file-entry-cache@npm:^9.0.0": - version: 9.0.0 - resolution: "file-entry-cache@npm:9.0.0" + version: 9.1.0 + resolution: "file-entry-cache@npm:9.1.0" dependencies: flat-cache: "npm:^5.0.0" - checksum: 10/6b0ddc88e087e758fbc9c75e7f5f07982f02a8fc555c70561faff37ddce9f03e7273f62844beb5a0ee84685f6c62b036429227718687219a35fea57f3331f1aa + checksum: 10/fd67a9552f272ac4a1731c545e1350bd135e208659144cc5311baac6b8bbf55da7c8c3a0bf25c71ed78eff2bdd26d2a3a8f9ba3d8bec968fe8d1eeba6ab14a96 languageName: node linkType: hard @@ -15774,9 +15880,9 @@ __metadata: linkType: hard "flow-parser@npm:0.*": - version: 0.241.0 - resolution: "flow-parser@npm:0.241.0" - checksum: 10/9295897c6ee0aff0ec003b94b566e8e248cc61cc02ea1b35f05ab57447fa94a78af5ead78dc9ed008332683f257b00a9c108ce8d409cf591560923f8b24bc477 + version: 0.245.0 + resolution: "flow-parser@npm:0.245.0" + checksum: 10/dec22fd67bcc52a946eb906bbd59b58b58de22bbe0afe23e033f40ecc802acc2edb00dbb234f6f244af5b3dd15353503c69d027ae39aba6a4f0598f3b871babd languageName: node linkType: hard @@ -15826,12 +15932,12 @@ __metadata: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.2.1 - resolution: "foreground-child@npm:3.2.1" + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" dependencies: cross-spawn: "npm:^7.0.0" signal-exit: "npm:^4.0.1" - checksum: 10/77b33b3c438a499201727ca84de39a66350ccd54a8805df712773e963cefb5c4632dbc4386109e97a0df8fb1585aee95fa35acb07587e3e04cfacabfc0ae15dc + checksum: 10/e3a60480f3a09b12273ce2c5fcb9514d98dd0e528f58656a1b04680225f918d60a2f81f6a368f2f3b937fcee9cfc0cbf16f1ad9a0bc6a3a6e103a84c9a90087e languageName: node linkType: hard @@ -16045,7 +16151,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": +"function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -16303,12 +16409,12 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.5.0": - version: 4.7.6 - resolution: "get-tsconfig@npm:4.7.6" +"get-tsconfig@npm:^4.7.5": + version: 4.8.0 + resolution: "get-tsconfig@npm:4.8.0" dependencies: resolve-pkg-maps: "npm:^1.0.0" - checksum: 10/32da95a89f3ddbabd2a2e36f2a4add51a5e3c2b28f32e3c81494fcdbd43b7d9b42baea77784e62d10f87bb564c5ee908416aabf4c5ca9cdbb2950aa3c247f124 + checksum: 10/aac6d98894bdb8b9f320f5c4953f9a89d11b1cbb15cc95447abe00366dc5fcda6dbce214f2e4572b1b835ab55c4f35f004b219c3d17e07c5ddca44ef9e3858d2 languageName: node linkType: hard @@ -17319,10 +17425,10 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^7.0.0": - version: 7.0.0 - resolution: "human-signals@npm:7.0.0" - checksum: 10/f1356547f6553a90530527ba2325c2281e33fa3b9b372a647e377fd8f24e9eb8119082051ca6a9f8821e24f1faa13cd462c849a9476c86e7c190dbf0aa2ee8a4 +"human-signals@npm:^8.0.0": + version: 8.0.0 + resolution: "human-signals@npm:8.0.0" + checksum: 10/89acdc7081ac2a065e41cca7351c4b0fe2382e213b7372f90df6a554e340f31b49388a307adc1d6f4c60b2b4fe81eeff0bc1f44be6f5d844311cd92ccc7831c6 languageName: node linkType: hard @@ -17386,9 +17492,9 @@ __metadata: linkType: hard "ignore@npm:^5.0.4, ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10/0a884c2fbc8c316f0b9f92beaf84464253b73230a4d4d286697be45fca081199191ca33e1c2e82d9e5f851f5e9a48a78e25a35c951e7eb41e59f150db3530065 + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 languageName: node linkType: hard @@ -17825,6 +17931,15 @@ __metadata: languageName: node linkType: hard +"is-bun-module@npm:^1.0.2": + version: 1.1.0 + resolution: "is-bun-module@npm:1.1.0" + dependencies: + semver: "npm:^7.6.3" + checksum: 10/f6d2b16291ee7e31fdc9fb8fd267ac40b7caeef60c607bff0efb1f686fc7851d7c8266e33ff8d2fb9ce3e5d7a0ff6177c1d9ff3f5bfd9efd3db876ef4bb8fdea + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -17854,12 +17969,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0": - version: 2.15.0 - resolution: "is-core-module@npm:2.15.0" +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" dependencies: hasown: "npm:^2.0.2" - checksum: 10/70e962543e5d3a97c07cb29144a86792d545a21f28e67da5401d85878a0193d46fbab8d97bc3ca680e2778705dca66e7b6ca840c493497a27ca0e8c5f3ac3d1d + checksum: 10/77316d5891d5743854bcef2cd2f24c5458fb69fbc9705c12ca17d54a2017a67d0693bbf1ba8c77af376c0eef6bf6d1b27a4ab08e4db4e69914c3789bdf2ceec5 languageName: node linkType: hard @@ -19643,13 +19758,6 @@ __metadata: languageName: node linkType: hard -"known-css-properties@npm:^0.31.0": - version: 0.31.0 - resolution: "known-css-properties@npm:0.31.0" - checksum: 10/559679a98e58806c77c267aaaad56217a0d456e59d1f64e4d4ae5ee90319f888064f93e2acaed67b117badd723c22c1bec3cb38a07482c7de331b93fb2ba0c94 - languageName: node - linkType: hard - "known-css-properties@npm:^0.34.0": version: 0.34.0 resolution: "known-css-properties@npm:0.34.0" @@ -19845,15 +19953,15 @@ __metadata: linkType: hard "lib0@npm:^0.2.42, lib0@npm:^0.2.86": - version: 0.2.95 - resolution: "lib0@npm:0.2.95" + version: 0.2.97 + resolution: "lib0@npm:0.2.97" dependencies: isomorphic.js: "npm:^0.2.4" bin: 0ecdsa-generate-keypair: bin/0ecdsa-generate-keypair.js 0gentesthtml: bin/gentesthtml.js 0serve: bin/0serve.js - checksum: 10/10529e86bcf6c21d824d4b2045f7a136a0948748309c5411ea0103cd3479fecb961121870ff90da993778848d41542465b3918bacd1e927912fe8a5eaa5d7258 + checksum: 10/c86b0a95a5f6f0e3001515cb64a06580949b95faf2a3f89aab60278a3c4a63583c4805425bef4f5773a20747dd2a5f90689ecf7f2b38126875a96b69cbaea28f languageName: node linkType: hard @@ -19973,7 +20081,7 @@ __metadata: languageName: node linkType: hard -"listr2@npm:8.2.3, listr2@npm:~8.2.1": +"listr2@npm:8.2.3": version: 8.2.3 resolution: "listr2@npm:8.2.3" dependencies: @@ -19987,6 +20095,20 @@ __metadata: languageName: node linkType: hard +"listr2@npm:~8.2.1": + version: 8.2.4 + resolution: "listr2@npm:8.2.4" + dependencies: + cli-truncate: "npm:^4.0.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^6.1.0" + rfdc: "npm:^1.4.1" + wrap-ansi: "npm:^9.0.0" + checksum: 10/344d2397e127bf802935925e95b54468eef745fbbaf9326eb33a1634ae2d6e86cdb527ef48cb83a19a50671955d39b3e2608c74db85530df07b5674f5de115e1 + languageName: node + linkType: hard + "load-json-file@npm:6.2.0": version: 6.2.0 resolution: "load-json-file@npm:6.2.0" @@ -20382,7 +20504,7 @@ __metadata: languageName: node linkType: hard -"log-update@npm:6.0.0, log-update@npm:^6.0.0": +"log-update@npm:6.0.0": version: 6.0.0 resolution: "log-update@npm:6.0.0" dependencies: @@ -20395,6 +20517,19 @@ __metadata: languageName: node linkType: hard +"log-update@npm:^6.0.0, log-update@npm:^6.1.0": + version: 6.1.0 + resolution: "log-update@npm:6.1.0" + dependencies: + ansi-escapes: "npm:^7.0.0" + cli-cursor: "npm:^5.0.0" + slice-ansi: "npm:^7.1.0" + strip-ansi: "npm:^7.1.0" + wrap-ansi: "npm:^9.0.0" + checksum: 10/5abb4131e33b1e7f8416bb194fe17a3603d83e4657c5bf5bb81ce4187f3b00ea481643b85c3d5cefe6037a452cdcf7f1391ab8ea0d9c23e75d19589830ec4f11 + languageName: node + linkType: hard + "logform@npm:^2.6.0, logform@npm:^2.6.1": version: 2.6.1 resolution: "logform@npm:2.6.1" @@ -20521,9 +20656,9 @@ __metadata: linkType: hard "luxon@npm:^3.2.1": - version: 3.4.4 - resolution: "luxon@npm:3.4.4" - checksum: 10/c14164bc338987349075a08e63ea3ff902866735f7f5553a355b27be22667919765ff96fde4d3413d0e9a0edc4ff9e2e74ebcb8f86eae0ce8b14b27330d87d6e + version: 3.5.0 + resolution: "luxon@npm:3.5.0" + checksum: 10/48f86e6c1c96815139f8559456a3354a276ba79bcef0ae0d4f2172f7652f3ba2be2237b0e103b8ea0b79b47715354ac9fac04eb1db3485dcc72d5110491dd47f languageName: node linkType: hard @@ -20537,9 +20672,9 @@ __metadata: linkType: hard "macos-release@npm:^3.1.0": - version: 3.2.0 - resolution: "macos-release@npm:3.2.0" - checksum: 10/e780af4a8dcfdb4d7b5e717f866baf19f81798772b1f422ca5409c0a6b39baeb80827976fa498b8582409100c2d8c10cb89498dd557d777218cb40733c771843 + version: 3.3.0 + resolution: "macos-release@npm:3.3.0" + checksum: 10/78a8ba70033a6a546537a04ba4a8a7e6daf00378d0a6cbdb7e8d09abdfab79f61a0da52fe6875d833c090e1d42a80964c349c96a735117b3a2bb1d278a86e563 languageName: node linkType: hard @@ -20553,11 +20688,11 @@ __metadata: linkType: hard "magic-string@npm:^0.30.0, magic-string@npm:^0.30.3, magic-string@npm:^0.30.8": - version: 0.30.10 - resolution: "magic-string@npm:0.30.10" + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.4.15" - checksum: 10/9f8bf6363a14c98a9d9f32ef833b194702a5c98fb931b05ac511b76f0b06fd30ed92beda6ca3261d2d52d21e39e891ef1136fbd032023f6cbb02d0b7d5767201 + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10/b784d2240252f5b1e755d487354ada4c672cbca16f045144f7185a75b059210e5fcca7be7be03ef1bac2ca754c4428b21d36ae64a9057ba429916f06b8c54eb2 languageName: node linkType: hard @@ -20740,14 +20875,14 @@ __metadata: linkType: hard "memfs@npm:^4.2.1": - version: 4.9.3 - resolution: "memfs@npm:4.9.3" + version: 4.11.1 + resolution: "memfs@npm:4.11.1" dependencies: "@jsonjoy.com/json-pack": "npm:^1.0.3" - "@jsonjoy.com/util": "npm:^1.1.2" + "@jsonjoy.com/util": "npm:^1.3.0" tree-dump: "npm:^1.0.1" tslib: "npm:^2.0.0" - checksum: 10/0fb971420ac005e8c1e66a3c8ad97c22195374ca869ca7d9dcef45b6bc944e98df079fa30e6ff5a1fb9d0559e1afa2d47662671e3a2ff7be985896485cdb37be + checksum: 10/460b11266efb66291da5f117060123cc4ca024c35c6aae6c406be208885eb7b9cf09dd76cec70fcfe93e99128e0cf5abe161a9832a3979403c4bae131b30c12d languageName: node linkType: hard @@ -20852,12 +20987,12 @@ __metadata: linkType: hard "micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.7, micromatch@npm:~4.0.7": - version: 4.0.7 - resolution: "micromatch@npm:4.0.7" + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" dependencies: braces: "npm:^3.0.3" picomatch: "npm:^2.3.1" - checksum: 10/a11ed1cb67dcbbe9a5fc02c4062cf8bb0157d73bf86956003af8dcfdf9b287f9e15ec0f6d6925ff6b8b5b496202335e497b01de4d95ef6cf06411bc5e5c474a0 + checksum: 10/6bf2a01672e7965eb9941d1f02044fad2bd12486b5553dc1116ff24c09a8723157601dc992e74c911d896175918448762df3b3fd0a6b61037dd1a9766ddfbf58 languageName: node linkType: hard @@ -20923,6 +21058,13 @@ __metadata: languageName: node linkType: hard +"mimic-function@npm:^5.0.0": + version: 5.0.1 + resolution: "mimic-function@npm:5.0.1" + checksum: 10/eb5893c99e902ccebbc267c6c6b83092966af84682957f79313311edb95e8bb5f39fb048d77132b700474d1c86d90ccc211e99bae0935447a4834eb4c882982c + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -21338,9 +21480,9 @@ __metadata: linkType: hard "napi-wasm@npm:^1.1.0": - version: 1.1.0 - resolution: "napi-wasm@npm:1.1.0" - checksum: 10/767781f07ccaca846a6036a2df7686c9decc1b4fd6ad30ba782c94829476ec5610acc41e4caf7df94ebf0bed4abd4d34539979d0d85b025127c8a41be6259375 + version: 1.1.3 + resolution: "napi-wasm@npm:1.1.3" + checksum: 10/5cad19c3ba4c8b176453149542ea72f156be5db6d249611a76537833381f5cec802ed4d7ae5c3f7c0ef69d439c037f7247bbae7db711ed84f915be2a9fc43bb4 languageName: node linkType: hard @@ -21531,7 +21673,7 @@ __metadata: languageName: node linkType: hard -"netlify@npm:13.1.20, netlify@npm:^13.1.20": +"netlify@npm:13.1.20": version: 13.1.20 resolution: "netlify@npm:13.1.20" dependencies: @@ -21546,6 +21688,21 @@ __metadata: languageName: node linkType: hard +"netlify@npm:^13.1.20, netlify@npm:^13.1.21": + version: 13.1.21 + resolution: "netlify@npm:13.1.21" + dependencies: + "@netlify/open-api": "npm:^2.34.0" + lodash-es: "npm:^4.17.21" + micro-api-client: "npm:^3.3.0" + node-fetch: "npm:^3.0.0" + omit.js: "npm:^2.0.2" + p-wait-for: "npm:^4.0.0" + qs: "npm:^6.9.6" + checksum: 10/bb998674f568fd06055c42e26101f8859936da1f683a48c2f4d748b9db47081c7231b59dfaf9fe4a6bd5c1c74717e6468800eac7d7f8f9d95740510fb4b4c8da + languageName: node + linkType: hard + "next@npm:14.2.3": version: 14.2.3 resolution: "next@npm:14.2.3" @@ -21622,11 +21779,11 @@ __metadata: linkType: hard "node-abi@npm:^3.3.0": - version: 3.65.0 - resolution: "node-abi@npm:3.65.0" + version: 3.67.0 + resolution: "node-abi@npm:3.67.0" dependencies: semver: "npm:^7.3.5" - checksum: 10/2b58813cfdd816b9f08e901179270fb6e916bd529ca1de2fc8d088787fea5affbb093fc8e783ccfd09a7464186a7f48079f5f92f14126fb04ceec74e0eab06d2 + checksum: 10/fe47dfd9a0770d300ce1dd9b527441e691cba077c19fdbcb304796a5bc182f8cbe40933f2a013127b98a32bd6d06e0efa2b5f76ca38d791d44f83307920bafac languageName: node linkType: hard @@ -21729,13 +21886,13 @@ __metadata: linkType: hard "node-gyp-build@npm:^4.2.2": - version: 4.8.1 - resolution: "node-gyp-build@npm:4.8.1" + version: 4.8.2 + resolution: "node-gyp-build@npm:4.8.2" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js - checksum: 10/b9297770f96a92e5f2b854f3fd5e4bd418df81d7785a81ab60cec5cf2e5e72dc2c3319808978adc572cfa3885e6b12338cb5f4034bed2cab35f0d76a4b75ccdf + checksum: 10/e3a365eed7a2d950864a1daa34527588c16fe43ae189d0aeb8fd1dfec91ba42a0e1b499322bff86c2832029fec4f5901bf26e32005e1e17a781dcd5177b6a657 languageName: node linkType: hard @@ -21773,7 +21930,7 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": +"node-releases@npm:^2.0.18": version: 2.0.18 resolution: "node-releases@npm:2.0.18" checksum: 10/241e5fa9556f1c12bafb83c6c3e94f8cf3d8f2f8f904906ecef6e10bcaa1d59aa61212d4651bec70052015fc54bd3fdcdbe7fc0f638a17e6685aa586c076ec4e @@ -21951,7 +22108,7 @@ __metadata: languageName: node linkType: hard -"npm-package-arg@npm:11.0.2, npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": +"npm-package-arg@npm:11.0.2": version: 11.0.2 resolution: "npm-package-arg@npm:11.0.2" dependencies: @@ -21963,6 +22120,18 @@ __metadata: languageName: node linkType: hard +"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/bacc863907edf98940286edc2fd80327901c1e8b34426d538cdc708ed66bc6567f06d742d838eaf35db6804347bb4ba56ca9cef032c4b52743b33e7a22a2678e + languageName: node + linkType: hard + "npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": version: 8.0.2 resolution: "npm-packlist@npm:8.0.2" @@ -22144,7 +22313,7 @@ __metadata: languageName: node linkType: hard -"nx@npm:19.5.1, nx@npm:>=17.1.2 < 20": +"nx@npm:19.5.1": version: 19.5.1 resolution: "nx@npm:19.5.1" dependencies: @@ -22229,19 +22398,104 @@ __metadata: languageName: node linkType: hard +"nx@npm:19.6.4, nx@npm:>=17.1.2 < 20": + version: 19.6.4 + resolution: "nx@npm:19.6.4" + dependencies: + "@napi-rs/wasm-runtime": "npm:0.2.4" + "@nrwl/tao": "npm:19.6.4" + "@nx/nx-darwin-arm64": "npm:19.6.4" + "@nx/nx-darwin-x64": "npm:19.6.4" + "@nx/nx-freebsd-x64": "npm:19.6.4" + "@nx/nx-linux-arm-gnueabihf": "npm:19.6.4" + "@nx/nx-linux-arm64-gnu": "npm:19.6.4" + "@nx/nx-linux-arm64-musl": "npm:19.6.4" + "@nx/nx-linux-x64-gnu": "npm:19.6.4" + "@nx/nx-linux-x64-musl": "npm:19.6.4" + "@nx/nx-win32-arm64-msvc": "npm:19.6.4" + "@nx/nx-win32-x64-msvc": "npm:19.6.4" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:3.0.0-rc.46" + "@zkochan/js-yaml": "npm:0.0.7" + axios: "npm:^1.7.4" + chalk: "npm:^4.1.0" + cli-cursor: "npm:3.1.0" + cli-spinners: "npm:2.6.1" + cliui: "npm:^8.0.1" + dotenv: "npm:~16.4.5" + dotenv-expand: "npm:~11.0.6" + enquirer: "npm:~2.3.6" + figures: "npm:3.2.0" + flat: "npm:^5.0.2" + front-matter: "npm:^4.0.2" + fs-extra: "npm:^11.1.0" + ignore: "npm:^5.0.4" + jest-diff: "npm:^29.4.1" + jsonc-parser: "npm:3.2.0" + lines-and-columns: "npm:~2.0.3" + minimatch: "npm:9.0.3" + node-machine-id: "npm:1.1.12" + npm-run-path: "npm:^4.0.1" + open: "npm:^8.4.0" + ora: "npm:5.3.0" + semver: "npm:^7.5.3" + string-width: "npm:^4.2.3" + strong-log-transformer: "npm:^2.1.0" + tar-stream: "npm:~2.2.0" + tmp: "npm:~0.2.1" + tsconfig-paths: "npm:^4.1.2" + tslib: "npm:^2.3.0" + yargs: "npm:^17.6.2" + yargs-parser: "npm:21.1.1" + peerDependencies: + "@swc-node/register": ^1.8.0 + "@swc/core": ^1.3.85 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + nx-cloud: bin/nx-cloud.js + checksum: 10/9826bb23b87803f1f28f3c4ab878992ca1d3aed7c5a3b9e0d3d5ae0b10884db6b1f929156e9053796e8e781ba2c4316899aacb782e92bdddeae43d6e6288141b + languageName: node + linkType: hard + "nypm@npm:^0.3.8": - version: 0.3.9 - resolution: "nypm@npm:0.3.9" + version: 0.3.11 + resolution: "nypm@npm:0.3.11" dependencies: citty: "npm:^0.1.6" consola: "npm:^3.2.3" execa: "npm:^8.0.1" pathe: "npm:^1.1.2" - pkg-types: "npm:^1.1.1" - ufo: "npm:^1.5.3" + pkg-types: "npm:^1.2.0" + ufo: "npm:^1.5.4" bin: nypm: dist/cli.mjs - checksum: 10/fd884f4465f51c57fe584a11299320a5678934b14eed0ecc56003dd26f5638db4e858d97f2ab580937fa17a4a1c4ef73e32b82c7ef0bc06d820b3f32b932a45a + checksum: 10/f2aba7f5f64aaeb8a258b7a69d96eda7ce204799953fe60e827fbd76d950508801c104d0d30b89e1878afa614ba7198550d4abf9aff929f7b3b41393d4abccd4 languageName: node linkType: hard @@ -22452,6 +22706,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^7.0.0": + version: 7.0.0 + resolution: "onetime@npm:7.0.0" + dependencies: + mimic-function: "npm:^5.0.0" + checksum: 10/eb08d2da9339819e2f9d52cab9caf2557d80e9af8c7d1ae86e1a0fef027d00a88e9f5bd67494d350df360f7c559fbb44e800b32f310fb989c860214eacbb561c + languageName: node + linkType: hard + "open@npm:^8.0.4, open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" @@ -23230,9 +23493,9 @@ __metadata: linkType: hard "peek-readable@npm:^5.1.3": - version: 5.1.3 - resolution: "peek-readable@npm:5.1.3" - checksum: 10/dc19d8941b0785b417a19743b219232a4a1a7b40014cc8139ff959cd0de4a0c668f7be13ee6f818fcf525ddefc20768fc1a53c6862f5e8d7103b5356c5770621 + version: 5.2.0 + resolution: "peek-readable@npm:5.2.0" + checksum: 10/10efa3704f76cb7c1c0614653f9f4d0c30409bb432bb45c9012be51868956e6fde026590b1f13a1bfa5ca3984c99fe3e21491aa6be91688cb1fd1904d09c3536 languageName: node linkType: hard @@ -23332,15 +23595,15 @@ __metadata: linkType: hard "pino@npm:^9.0.0": - version: 9.3.1 - resolution: "pino@npm:9.3.1" + version: 9.3.2 + resolution: "pino@npm:9.3.2" dependencies: atomic-sleep: "npm:^1.0.0" fast-redact: "npm:^3.1.1" on-exit-leak-free: "npm:^2.1.0" pino-abstract-transport: "npm:^1.2.0" pino-std-serializers: "npm:^7.0.0" - process-warning: "npm:^3.0.0" + process-warning: "npm:^4.0.0" quick-format-unescaped: "npm:^4.0.3" real-require: "npm:^0.2.0" safe-stable-stringify: "npm:^2.3.1" @@ -23348,7 +23611,7 @@ __metadata: thread-stream: "npm:^3.0.0" bin: pino: bin.js - checksum: 10/ef28a1728b8a0358b9b1603b3a40e0c84b53b1368243c6ccd151fd98a90fea4da9aa9af8915896d6dabd12f43a7efa8085ba94bb521a430aa41e4fb9b9b5fef5 + checksum: 10/9333895e65c11809240dac7a365985e7789b344c902c811fa4df200cf96293a67787f1e1a55cf4a720feb757a48c2eb55b042d85b200c7b9c62c4b42e71a1018 languageName: node linkType: hard @@ -23395,14 +23658,14 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^1.1.1": - version: 1.1.3 - resolution: "pkg-types@npm:1.1.3" +"pkg-types@npm:^1.1.1, pkg-types@npm:^1.2.0": + version: 1.2.0 + resolution: "pkg-types@npm:1.2.0" dependencies: confbox: "npm:^0.1.7" mlly: "npm:^1.7.1" pathe: "npm:^1.1.2" - checksum: 10/06c03ca679ea8e3a1ea7cb74e92af1a486a6081401aac35f6aa51fb6f0855cd86bbfc713f9bfdaaa730815b5ae147b4d6a838710b550c1c4b3f54a6653ff04a3 + checksum: 10/ed732842b86260395b82e31afc0dd8316e74642a78754ad148a5500ca5537565c6dfbd6c80c2dc92077afc1beb471b05a85a9572089cc8a1bba82248c331bf45 languageName: node linkType: hard @@ -23572,10 +23835,10 @@ __metadata: languageName: node linkType: hard -"postcss-resolve-nested-selector@npm:^0.1.1": - version: 0.1.1 - resolution: "postcss-resolve-nested-selector@npm:0.1.1" - checksum: 10/b08fb76ab092a09ee01328bad620a01dcb445ac5eb02dd0ed9ed75217c2f779ecb3bf99a361c46e695689309c08c09f1a1ad7354c8d58c2c2c40d364657fcb08 +"postcss-resolve-nested-selector@npm:^0.1.1, postcss-resolve-nested-selector@npm:^0.1.4": + version: 0.1.6 + resolution: "postcss-resolve-nested-selector@npm:0.1.6" + checksum: 10/85453901afe2a4db497b4e0d2c9cf2a097a08fa5d45bc646547025176217050334e423475519a1e6c74a1f31ade819d16bb37a39914e5321e250695ee3feea14 languageName: node linkType: hard @@ -23597,13 +23860,13 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0": - version: 6.1.0 - resolution: "postcss-selector-parser@npm:6.1.0" +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.1.0, postcss-selector-parser@npm:^6.1.1": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" dependencies: cssesc: "npm:^3.0.0" util-deprecate: "npm:^1.0.2" - checksum: 10/2f9e5045b8bbe674fed3b79dbcd3daf21f5188cd7baf179beac513710ec3d75a8fc8184a262c3aec1c628ad3fd8bdb29c5d8530f1c9c5a61a18e1980bb000945 + checksum: 10/190034c94d809c115cd2f32ee6aade84e933450a43ec3899c3e78e7d7b33efd3a2a975bb45d7700b6c5b196c06a7d9acf3f1ba6f1d87032d9675a29d8bca1dd3 languageName: node linkType: hard @@ -23658,25 +23921,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.23, postcss@npm:^8.4.32, postcss@npm:^8.4.33, postcss@npm:^8.4.38": - version: 8.4.39 - resolution: "postcss@npm:8.4.39" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10/ad9c1add892c96433b9a5502878201ede4a20c4ce02d056251f61f8d9a3e5426dab3683fe5a086edfa78a1a19f2b4988c8cea02c5122136d29758cb5a17e2621 - languageName: node - linkType: hard - -"postcss@npm:^8.4.39": - version: 8.4.41 - resolution: "postcss@npm:8.4.41" +"postcss@npm:^8.4.23, postcss@npm:^8.4.32, postcss@npm:^8.4.33, postcss@npm:^8.4.38, postcss@npm:^8.4.39, postcss@npm:^8.4.41": + version: 8.4.44 + resolution: "postcss@npm:8.4.44" dependencies: nanoid: "npm:^3.3.7" picocolors: "npm:^1.0.1" source-map-js: "npm:^1.2.0" - checksum: 10/6e6176c2407eff60493ca60a706c6b7def20a722c3adda94ea1ece38345eb99964191336fd62b62652279cec6938e79e0b1e1d477142c8d3516e7a725a74ee37 + checksum: 10/aac7ed383fdcde9def6ed814ee03bc3de68b345e3f9bea414df2daca08185b6cfb4044fe9f67e1d9e886f29642373b34fd4fde5976204ca66a5481859afdcb7d languageName: node linkType: hard @@ -23820,11 +24072,11 @@ __metadata: linkType: hard "pretty-ms@npm:^9.0.0": - version: 9.0.0 - resolution: "pretty-ms@npm:9.0.0" + version: 9.1.0 + resolution: "pretty-ms@npm:9.1.0" dependencies: parse-ms: "npm:^4.0.0" - checksum: 10/b11e1eda41a2efcc16aab218392c8e457a8ae5c8edf63aafba0477123426b1268136b9b532cbfd84625bcb826739120ec8490286dab66102b9f09e717bdb4e45 + checksum: 10/3622a8999e4b2aa05ff64bf48c7e58143b3ede6e3434f8ce5588def90ebcf6af98edf79532344c4c9e14d5ad25deb3f0f5ca9f9b91e5d2d1ac26dad9cf428fc0 languageName: node linkType: hard @@ -23875,6 +24127,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^4.0.0": + version: 4.0.0 + resolution: "process-warning@npm:4.0.0" + checksum: 10/0d6ec069f3a6fe1d3379c0247329a297f1f3b9ea7e1d828db0a8f61e0e8337a98b7eb201547350924bc4a101ddcf2fa5cf5563ffe2c54c27651f7996d328483e + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -24128,11 +24387,11 @@ __metadata: linkType: hard "qs@npm:^6.10.0, qs@npm:^6.9.6": - version: 6.12.3 - resolution: "qs@npm:6.12.3" + version: 6.13.0 + resolution: "qs@npm:6.13.0" dependencies: side-channel: "npm:^1.0.6" - checksum: 10/486d80cfa5e12886de6fe15a5aa2b3c7023bf4461f949a742022c3ae608499dbaebcb57b1f15c1f59d86356772969028768b33c1a7c01e76d99f149239e63d59 + checksum: 10/f548b376e685553d12e461409f0d6e5c59ec7c7d76f308e2a888fd9db3e0c5e89902bedd0754db3a9038eda5f27da2331a6f019c8517dc5e0a16b3c9a6e9cef8 languageName: node linkType: hard @@ -25122,6 +25381,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^5.0.0": + version: 5.1.0 + resolution: "restore-cursor@npm:5.1.0" + dependencies: + onetime: "npm:^7.0.0" + signal-exit: "npm:^4.1.0" + checksum: 10/838dd54e458d89cfbc1a923b343c1b0f170a04100b4ce1733e97531842d7b440463967e521216e8ab6c6f8e89df877acc7b7f4c18ec76e99fb9bf5a60d358d2c + languageName: node + linkType: hard + "ret@npm:~0.4.0": version: 0.4.3 resolution: "ret@npm:0.4.3" @@ -25334,26 +25603,26 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.0.2, rollup@npm:^4.13.0": - version: 4.19.0 - resolution: "rollup@npm:4.19.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.19.0" - "@rollup/rollup-android-arm64": "npm:4.19.0" - "@rollup/rollup-darwin-arm64": "npm:4.19.0" - "@rollup/rollup-darwin-x64": "npm:4.19.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.19.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.19.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.19.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.19.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.19.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.19.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.19.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.19.0" - "@rollup/rollup-linux-x64-musl": "npm:4.19.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.19.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.19.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.19.0" +"rollup@npm:^4.0.2, rollup@npm:^4.13.0, rollup@npm:^4.20.0": + version: 4.21.2 + resolution: "rollup@npm:4.21.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.21.2" + "@rollup/rollup-android-arm64": "npm:4.21.2" + "@rollup/rollup-darwin-arm64": "npm:4.21.2" + "@rollup/rollup-darwin-x64": "npm:4.21.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.21.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.21.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-x64-musl": "npm:4.21.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.21.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.21.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.21.2" "@types/estree": "npm:1.0.5" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -25393,7 +25662,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10/a5f56e60d160e727f372fb0b0adbab03c1e5b858df7af62e626459687e6510d5b9685e4badef50bb6ffd916eaf53c1684a8e12ae959dacb8e6930c77a00a0f19 + checksum: 10/5d679af1a04170f7164e3e975a375adb76f9bbf34d1ad8d9c3fa789252d377e7d364dfee054a4283121f9f9368d7b35404b9d42fb260be314d34739243ab0722 languageName: node linkType: hard @@ -25508,9 +25777,9 @@ __metadata: linkType: hard "safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 10/a6c192bbefe47770a11072b51b500ed29be7b1c15095371c1ee1dc13e45ce48ee3c80330214c56764d006c485b88bd0b24940d868948170dddc16eed312582d8 + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c languageName: node linkType: hard @@ -25703,7 +25972,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -25798,9 +26067,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.1": - version: 2.6.0 - resolution: "set-cookie-parser@npm:2.6.0" - checksum: 10/8d451ebadb760989f93b634942c79de3c925ca7a986d133d08a80c40b5ae713ce12e354f0d5245c49f288c52daa7bd6554d5dc52f8a4eecaaf5e192881cf2b1f + version: 2.7.0 + resolution: "set-cookie-parser@npm:2.7.0" + checksum: 10/5c0a197c022d614b3168efbb27a1e81c6eb97a07f1502780648be7483a6bada38c4e516f3d168769e7e3e819d431efdf7b659dcb450196bb7e2594e6a11a2dd7 languageName: node linkType: hard @@ -26050,7 +26319,7 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^7.0.0": +"slice-ansi@npm:^7.0.0, slice-ansi@npm:^7.1.0": version: 7.1.0 resolution: "slice-ansi@npm:7.1.0" dependencies: @@ -26099,11 +26368,11 @@ __metadata: linkType: hard "sonic-boom@npm:^4.0.1": - version: 4.0.1 - resolution: "sonic-boom@npm:4.0.1" + version: 4.1.0 + resolution: "sonic-boom@npm:4.1.0" dependencies: atomic-sleep: "npm:^1.0.0" - checksum: 10/449bdc39f4333a321bb754319e9452c3e94409654b2ddf8e40307a1a413b953bed3b3b092a4992ab3fb7cd1a7c95bdde5a046ac4e0405d7c92c60802452c060c + checksum: 10/7d42eb31a79e5927f268217b13206ab39c135c95f5e4b9a68745d9f4fdede0c291216c7594947028a7fdcf850342aa3bc49d0f5211618bfeff06dccdbc1bdb4e languageName: node linkType: hard @@ -26236,9 +26505,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.18 - resolution: "spdx-license-ids@npm:3.0.18" - checksum: 10/45fdbb50c4bbe364720ef0acd19f4fc1914d73ba1e2b1ce9db21ee12d7f9e8bf14336289f6ad3d5acac3dc5b91aafe61e9c652d5806b31cbb8518a14979a16ff + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 10/30e566ea74b04232c64819d1f5313c00d92e9c73d054541650331fc794499b3bcc4991bcd90fa3c2fc4d040006f58f63104706255266e87a9d452e6574afc60c languageName: node linkType: hard @@ -26489,8 +26758,8 @@ __metadata: linkType: hard "streamx@npm:^2.15.0, streamx@npm:^2.18.0": - version: 2.18.0 - resolution: "streamx@npm:2.18.0" + version: 2.20.0 + resolution: "streamx@npm:2.20.0" dependencies: bare-events: "npm:^2.2.0" fast-fifo: "npm:^1.3.2" @@ -26499,7 +26768,7 @@ __metadata: dependenciesMeta: bare-events: optional: true - checksum: 10/039e828e7e76399d65fed022ddaeb7ab3ee77f66d170733643b7f7510823a605315f3ee841e5c01f16df5a44dca18a97fc39460a2b42010484e7976f29c79296 + checksum: 10/635fe73c6cacc95a9932e338905781ce1aaa200b3a4935afaa873ff69be867f820e7e0dfe98d1b553b5ed1f5311a36e8158a6b748e41f3bd15a6a29ecc33b97d languageName: node linkType: hard @@ -26886,23 +27155,23 @@ __metadata: linkType: hard "stylelint-config-recommended-scss@npm:^14.0.0": - version: 14.0.0 - resolution: "stylelint-config-recommended-scss@npm:14.0.0" + version: 14.1.0 + resolution: "stylelint-config-recommended-scss@npm:14.1.0" dependencies: postcss-scss: "npm:^4.0.9" - stylelint-config-recommended: "npm:^14.0.0" - stylelint-scss: "npm:^6.0.0" + stylelint-config-recommended: "npm:^14.0.1" + stylelint-scss: "npm:^6.4.0" peerDependencies: postcss: ^8.3.3 - stylelint: ^16.0.2 + stylelint: ^16.6.1 peerDependenciesMeta: postcss: optional: true - checksum: 10/512fba4d81654b65a7a36d531f165c7d8f0c938e63a0f90daca0c21d623cc637e29195fec5e0ae1edd862502d69717f6f3e90016cd7ba8458e4a8afcd87bb3b4 + checksum: 10/4dbebd9883e94eea9a6c7e1dc6978f385c4631e88a7014f41b14e2d8a5e52db6b4ac0015b41c75e8031e53c227a381b252a92ed48e6f2296c28d90fbb185f6eb languageName: node linkType: hard -"stylelint-config-recommended@npm:^14.0.0, stylelint-config-recommended@npm:^14.0.1": +"stylelint-config-recommended@npm:^14.0.1": version: 14.0.1 resolution: "stylelint-config-recommended@npm:14.0.1" peerDependencies: @@ -26975,18 +27244,20 @@ __metadata: languageName: node linkType: hard -"stylelint-scss@npm:^6.0.0": - version: 6.3.2 - resolution: "stylelint-scss@npm:6.3.2" +"stylelint-scss@npm:^6.4.0": + version: 6.5.1 + resolution: "stylelint-scss@npm:6.5.1" dependencies: - known-css-properties: "npm:^0.31.0" + css-tree: "npm:2.3.1" + is-plain-object: "npm:5.0.0" + known-css-properties: "npm:^0.34.0" postcss-media-query-parser: "npm:^0.2.3" - postcss-resolve-nested-selector: "npm:^0.1.1" - postcss-selector-parser: "npm:^6.1.0" + postcss-resolve-nested-selector: "npm:^0.1.4" + postcss-selector-parser: "npm:^6.1.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: stylelint: ^16.0.2 - checksum: 10/c60f5b1538cc5589addbd86b94fd62e140a453008549c05902c87b8a72c854fdb4b966dd8fd17cf61fbcd665db40eb2109f086f1f4ba5399a07ff59500bdeac1 + checksum: 10/a43d2231cc4dbd1fba5dfe8d1c26bb8cd95ad67396040ed00e5844141a8ae7fdefce6957c5fff6b2fb0091a5eb5f16d4ed6d33d4d02c623161d5f11c3c0bd57e languageName: node linkType: hard @@ -27118,12 +27389,12 @@ __metadata: linkType: hard "supports-hyperlinks@npm:^3.0.0": - version: 3.0.0 - resolution: "supports-hyperlinks@npm:3.0.0" + version: 3.1.0 + resolution: "supports-hyperlinks@npm:3.1.0" dependencies: has-flag: "npm:^4.0.0" supports-color: "npm:^7.0.0" - checksum: 10/911075a412d8bcfbbca413e8963d56ed0975e35ff98d599ef85301aed4221428653145263828b6c58cb4cb6ff24596be83ead3cca221a88a70428af93d5e2a73 + checksum: 10/e893fb035ecd86e42c5225dc1cd24db56eb950ed77b2e8f59c7aaf2836b8b2ef276ffd11f0df88b0b12184832aa2333f875eefcb74d3c47ed2633b6b41d4be43 languageName: node linkType: hard @@ -27437,8 +27708,8 @@ __metadata: linkType: hard "terser@npm:^5.0.0, terser@npm:^5.26.0": - version: 5.31.3 - resolution: "terser@npm:5.31.3" + version: 5.31.6 + resolution: "terser@npm:5.31.6" dependencies: "@jridgewell/source-map": "npm:^0.3.3" acorn: "npm:^8.8.2" @@ -27446,7 +27717,7 @@ __metadata: source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 10/7f66d93a1157f66f5eda16515ed45e6eb485d3c4acbc46e78a5e62922f5b4643d9212abc586f791021fafc71563a93475a986c52f4270a5e0b3ee50a70507d9e + checksum: 10/78057c58025151c9bdad82a050f0b51175f9fe3117d8ee369ca7effe038cdd540da2fd5985a4f8ee08dba5616e7911e1392d40670698ff42a49fec338d369e80 languageName: node linkType: hard @@ -27676,9 +27947,9 @@ __metadata: linkType: hard "tocbot@npm:^4.20.1": - version: 4.28.2 - resolution: "tocbot@npm:4.28.2" - checksum: 10/8b403d9c87b9a15d816f44ad6350325db4cc573e1dc0a50fa7921531225e83464909897589e109ad5922b60b276ac9bcea7eeae3ea774df5080ceda65eca3425 + version: 4.29.0 + resolution: "tocbot@npm:4.29.0" + checksum: 10/fc8c4f009043b7a1192f94e78c160ca0f120196550de4a5a4b566840400fff8b0d8f258e7802769babdd6d36a2be632e2ace4de72bfc59e034d10f9340e10c6e languageName: node linkType: hard @@ -27907,7 +28178,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.3, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": +"tslib@npm:2.6.3": version: 2.6.3 resolution: "tslib@npm:2.6.3" checksum: 10/52109bb681f8133a2e58142f11a50e05476de4f075ca906d13b596ae5f7f12d30c482feb0bff167ae01cfc84c5803e575a307d47938999246f5a49d174fc558c @@ -27921,6 +28192,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 + languageName: node + linkType: hard + "tsup@npm:8.1.0": version: 8.1.0 resolution: "tsup@npm:8.1.0" @@ -28000,13 +28278,20 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 10/5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d languageName: node linkType: hard +"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 10/e363bf0352427a79301f26a7795a27718624c49c576965076624eb5495d87515030b207217845f7018093adcbe169b2d119bb9b7f1a31a92bfbb1ab9639ca8dd + languageName: node + linkType: hard + "type-fest@npm:^0.18.0": version: 0.18.1 resolution: "type-fest@npm:0.18.1" @@ -28064,9 +28349,9 @@ __metadata: linkType: hard "type-fest@npm:^4.18.2, type-fest@npm:^4.6.0, type-fest@npm:^4.7.1": - version: 4.22.1 - resolution: "type-fest@npm:4.22.1" - checksum: 10/f0cef35c98c34577d94dd36b4baa6544cd6977bdee47d95fad1d970ca3b61c1bb0ab8aac66bab6e1e387b1f2821727675743282f1a8680da54adc1a5625f3d66 + version: 4.26.0 + resolution: "type-fest@npm:4.26.0" + checksum: 10/f5fe86d2c3db693f7154c8ab0d228a89394e4c446f2ed30ea3b61afaea9757c87c4e79475ef8d6f5fafbd7a4efd302e3b0237d9657dd425228f20a27feee3aef languageName: node linkType: hard @@ -28168,7 +28453,7 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.3.2, ufo@npm:^1.4.0, ufo@npm:^1.5.3": +"ufo@npm:^1.3.2, ufo@npm:^1.4.0, ufo@npm:^1.5.3, ufo@npm:^1.5.4": version: 1.5.4 resolution: "ufo@npm:1.5.4" checksum: 10/a885ed421e656aea6ca64e9727b8118a9488715460b6f1a0f0427118adfe2f2830fe7c1d5bd9c5c754a332e6807516551cd663ea67ce9ed6a4e3edc739916335 @@ -28176,11 +28461,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4": - version: 3.19.0 - resolution: "uglify-js@npm:3.19.0" + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" bin: uglifyjs: bin/uglifyjs - checksum: 10/44b37f88805565ba478665f4d5560388a072b314c38708046a5b97ca49ec40cb0d34414daff77d44695991098b7596536847e7d87b4590f457fc757e1d2904cc + checksum: 10/6b9639c1985d24580b01bb0ab68e78de310d38eeba7db45bec7850ab4093d8ee464d80ccfaceda9c68d1c366efbee28573b52f95e69ac792354c145acd380b11 languageName: node linkType: hard @@ -28238,6 +28523,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10/cf0b48ed4fc99baf56584afa91aaffa5010c268b8842f62e02f752df209e3dea138b372a60a963b3b2576ed932f32329ce7ddb9cb5f27a6c83040d8cd74b7a70 + languageName: node + linkType: hard + "unenv@npm:^1.9.0": version: 1.10.0 resolution: "unenv@npm:1.10.0" @@ -28411,14 +28703,13 @@ __metadata: linkType: hard "unplugin@npm:^1.3.1": - version: 1.11.0 - resolution: "unplugin@npm:1.11.0" + version: 1.12.3 + resolution: "unplugin@npm:1.12.3" dependencies: - acorn: "npm:^8.11.3" - chokidar: "npm:^3.6.0" + acorn: "npm:^8.12.1" webpack-sources: "npm:^3.2.3" - webpack-virtual-modules: "npm:^0.6.1" - checksum: 10/debe6223b0ece5f54e9a243525da8c4473e30a86d9440d90a03a9b05e3d1ddb7f12820bf5466dd50d1c3f00219e46fefc94205669cff9d63d12024e4013a5318 + webpack-virtual-modules: "npm:^0.6.2" + checksum: 10/adfd881073327ee0c12db9e13d4e9a5ab4c8117e1ffd474454e897cb068e94d71931b1c9ef265ef94dcadb7d759616b6e46578caf1e8c7ed4b882c081ef1efba languageName: node linkType: hard @@ -28914,18 +29205,19 @@ __metadata: linkType: hard "vite@npm:^5.0.0": - version: 5.3.4 - resolution: "vite@npm:5.3.4" + version: 5.4.2 + resolution: "vite@npm:5.4.2" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.39" - rollup: "npm:^4.13.0" + postcss: "npm:^8.4.41" + rollup: "npm:^4.20.0" peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 less: "*" lightningcss: ^1.21.0 sass: "*" + sass-embedded: "*" stylus: "*" sugarss: "*" terser: ^5.4.0 @@ -28941,6 +29233,8 @@ __metadata: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -28949,7 +29243,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/9eadb261be1f5f6335a67cb44a8803febd8b190202909385fd2ae7849991095ee13c5af914da53da48a421ee0901a8fedbb7519dc7d1b8ade3ea6e42bd9b2b39 + checksum: 10/c449f9295060fa88c9b5cc1bd17c2de198deae596b7da1250db9662fb15e7b21e0dbe9a40a9106fb7438b1231494b169457e809ecbb65e732648d87dd284ab23 languageName: node linkType: hard @@ -29026,12 +29320,12 @@ __metadata: linkType: hard "watchpack@npm:^2.2.0, watchpack@npm:^2.4.1": - version: 2.4.1 - resolution: "watchpack@npm:2.4.1" + version: 2.4.2 + resolution: "watchpack@npm:2.4.2" dependencies: glob-to-regexp: "npm:^0.4.1" graceful-fs: "npm:^4.1.2" - checksum: 10/0736ebd20b75d3931f9b6175c819a66dee29297c1b389b2e178bc53396a6f867ecc2fd5d87a713ae92dcb73e487daec4905beee20ca00a9e27f1184a7c2bca5e + checksum: 10/6bd4c051d9af189a6c781c3158dcb3069f432a0c144159eeb0a44117412105c61b2b683a5c9eebc4324625e0e9b76536387d0ba354594fa6cbbdf1ef60bee4c3 languageName: node linkType: hard @@ -29122,7 +29416,7 @@ __metadata: languageName: node linkType: hard -"webpack-virtual-modules@npm:^0.6.1": +"webpack-virtual-modules@npm:^0.6.2": version: 0.6.2 resolution: "webpack-virtual-modules@npm:0.6.2" checksum: 10/d9a0d035f7ec0c7f1055aaf88bfe48b7f96458043916a1b2926d9012fd61de3810a6b768e31a8cd4b3c84a9b6d55824361a9dd20aaf9f5ccfb6f017af216a178 @@ -29269,11 +29563,11 @@ __metadata: linkType: hard "which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" + version: 1.1.4 + resolution: "which-builtin-type@npm:1.1.4" dependencies: - function.prototype.name: "npm:^1.1.5" - has-tostringtag: "npm:^1.0.0" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" is-async-function: "npm:^2.0.0" is-date-object: "npm:^1.0.5" is-finalizationregistry: "npm:^1.0.2" @@ -29282,13 +29576,13 @@ __metadata: is-weakref: "npm:^1.0.2" isarray: "npm:^2.0.5" which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.9" - checksum: 10/d7823c4a6aa4fc8183eb572edd9f9ee2751e5f3ba2ccd5b298cc163f720df0f02ee1a5291d18ca8a41d48144ef40007ff6a64e6f5e7c506527086c7513a5f673 + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10/c0cdb9b004e7a326f4ce54c75b19658a3bec73601a71dd7e2d9538accb3e781b546b589c3f306caf5e7429ac1c8019028d5e662e2860f03603354105b8247c83 languageName: node linkType: hard -"which-collection@npm:^1.0.1": +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -29300,7 +29594,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: @@ -29412,8 +29706,8 @@ __metadata: linkType: hard "winston@npm:^3.10.0": - version: 3.13.1 - resolution: "winston@npm:3.13.1" + version: 3.14.2 + resolution: "winston@npm:3.14.2" dependencies: "@colors/colors": "npm:^1.6.0" "@dabh/diagnostics": "npm:^2.0.2" @@ -29426,7 +29720,7 @@ __metadata: stack-trace: "npm:0.0.x" triple-beam: "npm:^1.3.0" winston-transport: "npm:^4.7.0" - checksum: 10/bc78202708800f74b94a2cc4fbdd46569dea90f939ad2149a936b2deee612d63a512f9e5725251349090bc12ba35351dd67336b3c92bf094892f9ea03d34fdc4 + checksum: 10/ba818714606175f27c38c42b22913e65f17987a0c8c41bcc73d55f3be8d70d629313f45e312ec02eea7bf074f9abee3f228746140245eb5258487c4161f3a798 languageName: node linkType: hard @@ -29690,7 +29984,16 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.1.3, yaml@npm:^2.2.2, yaml@npm:^2.3.4, yaml@npm:^2.4.2, yaml@npm:~2.4.2": +"yaml@npm:^2.1.3, yaml@npm:^2.2.2, yaml@npm:^2.3.4, yaml@npm:^2.4.2": + version: 2.5.0 + resolution: "yaml@npm:2.5.0" + bin: + yaml: bin.mjs + checksum: 10/72e903fdbe3742058885205db4a6c9ff38e5f497f4e05e631264f7756083c05e7d10dfb5e4ce9d7a95de95338f9b20d19dd0b91c60c65f7d7608b6b3929820ad + languageName: node + linkType: hard + +"yaml@npm:~2.4.2": version: 2.4.5 resolution: "yaml@npm:2.4.5" bin: From ad60a64705342725c9cd1e2718ed4b8fc6ea3a01 Mon Sep 17 00:00:00 2001 From: Pavel Klibani Date: Mon, 26 Aug 2024 23:52:48 +0200 Subject: [PATCH 2/2] Refactor(web-react): Grid useGridStylesProps use new hooks for generating classes - uses new hook for generate alignment classes --- .../src/components/Grid/useGridStyleProps.ts | 45 +++++-------------- packages/web-react/src/types/grid.ts | 11 ++++- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/packages/web-react/src/components/Grid/useGridStyleProps.ts b/packages/web-react/src/components/Grid/useGridStyleProps.ts index 608cef5b02..655ed1f8c2 100644 --- a/packages/web-react/src/components/Grid/useGridStyleProps.ts +++ b/packages/web-react/src/components/Grid/useGridStyleProps.ts @@ -1,15 +1,8 @@ import classNames from 'classnames'; import { CSSProperties, ElementType } from 'react'; import { DirectionAxis } from '../../constants'; -import { useClassNamePrefix, useSpacingStyle } from '../../hooks'; -import { GridColsBreakpoints, GridCustomLayoutProps, SpiritGridProps } from '../../types'; - -type AlignmentOrCols = - | string - | number - | Pick - | GridColsBreakpoints - | undefined; +import { useAlignmentClass, useClassNamePrefix, useSpacingStyle } from '../../hooks'; +import { GridColsBreakpoints, SpiritGridProps, GridAlignmentYType, GridAlignmentXType } from '../../types'; interface GridCSSProperties extends CSSProperties { [key: string]: string | undefined | number; @@ -24,14 +17,6 @@ export interface GridStyles { styleProps: GridCSSProperties; } -function capitalizeFirstLetter(str: string): string { - if (typeof str !== 'string') { - return str; - } - - return str.charAt(0).toUpperCase() + str.slice(1); -} - export function useGridStyleProps(props: SpiritGridProps): GridStyles> { const { alignmentX, alignmentY, cols, spacing, spacingX, spacingY, ...restProps } = props; @@ -46,36 +31,30 @@ export function useGridStyleProps(props: SpiritGridProps): GridStyl ...useSpacingStyle(spacingY, 'grid', DirectionAxis.Y), }; - function generateGridClass(componentClass: string, property: AlignmentOrCols, type: string) { + function generateColsClasses( + componentClass: string, + property: number | GridColsBreakpoints | undefined, + type: string, + ) { if (typeof property === 'object' && property !== null) { - // If the property is an object, we need to check if the mobile property is set. - // If not, we set it to stretch - if (!Object.keys(property).includes('mobile')) { - (property as Record).mobile = 'stretch'; - } - // We map over the object and generate the classes for each breakpoint return Object.keys(property) .map((key) => { const infix = key === 'mobile' ? '' : `--${key}`; const responsiveProperty = (property as Record)[key]; - return `${componentClass}${infix}--${type}${ - responsiveProperty && typeof responsiveProperty === 'string' - ? capitalizeFirstLetter(responsiveProperty) - : `-${responsiveProperty}` - }`; + return `${componentClass}${infix}--${type}-${responsiveProperty}`; }) .join(' '); } - return `${componentClass}--${type}${property && typeof property === 'string' ? capitalizeFirstLetter(property) : `-${property}`}`; + return `${componentClass}--${type}-${property}`; } const classes = classNames(gridClass, { - [generateGridClass(gridClass, alignmentX, 'alignmentX')]: alignmentX, - [generateGridClass(gridClass, alignmentY, 'alignmentY')]: alignmentY, - [generateGridClass(gridClass, cols, 'cols')]: cols, + [useAlignmentClass(gridClass, alignmentX as GridAlignmentXType, 'alignmentX')]: alignmentX, + [useAlignmentClass(gridClass, alignmentY as GridAlignmentYType, 'alignmentY')]: alignmentY, + [generateColsClasses(gridClass, cols, 'cols')]: cols, }); return { diff --git a/packages/web-react/src/types/grid.ts b/packages/web-react/src/types/grid.ts index 02a9ab484c..21cae801fa 100644 --- a/packages/web-react/src/types/grid.ts +++ b/packages/web-react/src/types/grid.ts @@ -41,9 +41,16 @@ export interface GridItemElementTypeProps { elementType?: T | JSXElementConstructor; } +export type GridAlignmentXType = + | NonNullable + | { [key: string]: NonNullable }; +export type GridAlignmentYType = + | NonNullable + | { [key: string]: NonNullable }; + export interface GridCustomLayoutProps { - alignmentX?: AlignmentXExtendedDictionaryType | { [key: string]: AlignmentXExtendedDictionaryType }; - alignmentY?: AlignmentYExtendedDictionaryType | { [key: string]: AlignmentYExtendedDictionaryType }; + alignmentX?: GridAlignmentXType; + alignmentY?: GridAlignmentYType; cols?: GridColumns | GridColsBreakpoints; /** Custom spacing between items */ spacing?: SpaceToken | Partial>;