From c07ae565bb504d042bc445eec1529679b71871b7 Mon Sep 17 00:00:00 2001 From: Pavel Klibani Date: Fri, 23 Aug 2024 09:47:48 +0200 Subject: [PATCH] Feat(web-react): Introduce Flex component --- docs/DICTIONARIES.md | 12 +- 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 | 343 +++++++++++++++++- 34 files changed, 1286 insertions(+), 14 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/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%=17.1.2 < 20": version: 19.5.1 resolution: "@nx/devkit@npm:19.5.1" @@ -5074,6 +5098,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-darwin-arm64@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-darwin-arm64@npm:19.6.2" + conditions: os=darwin & cpu=arm64 + 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 +5119,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-darwin-x64@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-darwin-x64@npm:19.6.2" + conditions: os=darwin & cpu=x64 + 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 +5140,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-freebsd-x64@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-freebsd-x64@npm:19.6.2" + conditions: os=freebsd & cpu=x64 + 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 +5161,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm-gnueabihf@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:19.6.2" + conditions: os=linux & cpu=arm + 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 +5182,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm64-gnu@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-linux-arm64-gnu@npm:19.6.2" + conditions: os=linux & cpu=arm64 & libc=glibc + 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 +5203,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm64-musl@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-linux-arm64-musl@npm:19.6.2" + conditions: os=linux & cpu=arm64 & libc=musl + 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 +5224,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-x64-gnu@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-linux-x64-gnu@npm:19.6.2" + conditions: os=linux & cpu=x64 & libc=glibc + 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 +5245,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-x64-musl@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-linux-x64-musl@npm:19.6.2" + conditions: os=linux & cpu=x64 & libc=musl + 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 +5266,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-win32-arm64-msvc@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-win32-arm64-msvc@npm:19.6.2" + conditions: os=win32 & cpu=arm64 + 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 +5287,20 @@ __metadata: languageName: node linkType: hard +"@nx/nx-win32-x64-msvc@npm:19.6.2": + version: 19.6.2 + resolution: "@nx/nx-win32-x64-msvc@npm:19.6.2" + conditions: os=win32 & cpu=x64 + 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" @@ -22137,14 +22301,7 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.10, nwsapi@npm:^2.2.2": - version: 2.2.12 - resolution: "nwsapi@npm:2.2.12" - checksum: 10/172119e9ef492467ebfb337f9b5fd12a94d2b519377cde3f6ec2f74a86f6d5c00ef3873539bed7142f908ffca4e35383179be2319d04a563071d146bfa3f1673 - languageName: node - linkType: hard - -"nx@npm:19.5.1, nx@npm:>=17.1.2 < 20": +"nwsapi@npm:^2.2.12, nwsapi@npm:^2.2.2, nx@npm:19.5.1": version: 19.5.1 resolution: "nx@npm:19.5.1" dependencies: @@ -22229,6 +22386,176 @@ __metadata: languageName: node linkType: hard +"nx@npm:19.6.2": + version: 19.6.2 + resolution: "nx@npm:19.6.2" + dependencies: + "@napi-rs/wasm-runtime": "npm:0.2.4" + "@nrwl/tao": "npm:19.6.2" + "@nx/nx-darwin-arm64": "npm:19.6.2" + "@nx/nx-darwin-x64": "npm:19.6.2" + "@nx/nx-freebsd-x64": "npm:19.6.2" + "@nx/nx-linux-arm-gnueabihf": "npm:19.6.2" + "@nx/nx-linux-arm64-gnu": "npm:19.6.2" + "@nx/nx-linux-arm64-musl": "npm:19.6.2" + "@nx/nx-linux-x64-gnu": "npm:19.6.2" + "@nx/nx-linux-x64-musl": "npm:19.6.2" + "@nx/nx-win32-arm64-msvc": "npm:19.6.2" + "@nx/nx-win32-x64-msvc": "npm:19.6.2" + "@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/ab9cb35be1eb3862ec84fbf6813c0a78b74244f9b546769e362addab8b698a4b6cc47701def528656572061a3feb4920dbf3d4051c64b6b7f71cfc05f266e341 + 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"