diff --git a/.changeset/loud-turkeys-rest.md b/.changeset/loud-turkeys-rest.md new file mode 100644 index 0000000000..e123927818 --- /dev/null +++ b/.changeset/loud-turkeys-rest.md @@ -0,0 +1,5 @@ +--- +"@justeattakeaway/generator-pie-component": minor +--- + +[Updated] - structure to follow new testing best practices via rendering in Storybook diff --git a/apps/pie-storybook/.storybook/main.ts b/apps/pie-storybook/.storybook/main.ts index 1d1069d151..35e448f2f1 100644 --- a/apps/pie-storybook/.storybook/main.ts +++ b/apps/pie-storybook/.storybook/main.ts @@ -5,12 +5,11 @@ const isBrowserTesting = process.env.BROWSER_TESTING === 'true'; const config: StorybookConfig = { stories: isBrowserTesting ? [ - "../stories/**/*.test.mdx", - "../stories/**/*.test.stories.@(js|ts|tsx)" - ] + "../stories/testing/**/*.test.stories.ts" + ] : [ "../stories/**/*.mdx", - "../stories/**/!(*.test).stories.@(js|ts|tsx)" + "../stories/*.stories.@(js|ts|tsx)", ], addons: [ "@storybook/addon-essentials", diff --git a/apps/pie-storybook/.storybook/styles/component-status.scss b/apps/pie-storybook/.storybook/styles/component-status.scss index 7c0eaa9259..2219c80376 100644 --- a/apps/pie-storybook/.storybook/styles/component-status.scss +++ b/apps/pie-storybook/.storybook/styles/component-status.scss @@ -19,3 +19,9 @@ .c-componentStatus--top { inset-block-start: var(--dt-spacing-c); } + +@media only percy { + .percyHidden { + display: none; + } +} diff --git a/apps/pie-storybook/decorators/component-status.ts b/apps/pie-storybook/decorators/component-status.ts index bef6d50948..57bc7a07a2 100644 --- a/apps/pie-storybook/decorators/component-status.ts +++ b/apps/pie-storybook/decorators/component-status.ts @@ -26,7 +26,7 @@ export const ComponentStatus = (story: () => TemplateResult, storybookContext: S
${story()} -
+
Status: ${componentStatus} = ({ ${sanitizeAndRenderHTML(slot)} `; -const createCardStory = createStory(Template, defaultArgs); +const createChipStory = createStory(Template, defaultArgs); -export const Default = createCardStory(); -export const Outline = createCardStory({ variant: 'outline' }); -export const Ghost = createCardStory({ variant: 'ghost' }); +export const Default = createChipStory(); +export const Outline = createChipStory({ variant: 'outline' }); + +export const Ghost = createChipStory({ variant: 'ghost' }); diff --git a/apps/pie-storybook/stories/pie-divider.test.stories.ts b/apps/pie-storybook/stories/pie-divider.test.stories.ts deleted file mode 100644 index 58195acad7..0000000000 --- a/apps/pie-storybook/stories/pie-divider.test.stories.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { html } from 'lit'; -import { ifDefined } from 'lit/directives/if-defined.js'; -import { type Meta } from '@storybook/web-components'; - -import '@justeattakeaway/pie-divider'; -import { - type DividerProps, variants, orientations, defaultProps, -} from '@justeattakeaway/pie-divider'; - -import { createStory, type TemplateFunction } from '../utilities'; - -type DividerStoryMeta = Meta; - -const defaultArgs: DividerProps = { ...defaultProps }; - -const dividerStoryMeta: DividerStoryMeta = { - title: 'Divider', - component: 'pie-divider', - argTypes: { - variant: { - description: 'Set the variant of the divider. To change this, view the other story.', - control: { disable: true }, - options: variants, - defaultValue: { - summary: defaultProps.variant, - }, - }, - label: { - description: 'The label text for the divider.', - control: { - type: 'text', - defaultValue: { - summary: 'Label', - }, - }, - }, - orientation: { - description: 'Set the orientation of the divider.', - control: 'select', - options: orientations, - defaultValue: { - summary: defaultProps.orientation, - }, - }, - }, - args: defaultArgs, - parameters: { - design: { - type: 'figma', - url: 'https://www.figma.com/file/R2rBfzJP0hG0MZorq6FLZ1/%5BCore%5D-Components-%E2%9A%AA%EF%B8%8F-%5BPIE-2.0%5D?node-id=876-1227&node-type=CANVAS&t=v6qypWzZqWE6lPxm-0', - }, - }, -}; - -export default dividerStoryMeta; - -const Template : TemplateFunction = ({ variant, label, orientation }) => html` -
- -
- `; - -const createDividerStory = createStory(Template, defaultArgs); - -export const Default = createDividerStory(); -export const Inverse = createDividerStory({ variant: 'inverse' }, { bgColor: 'dark (container-dark)' }); -export const Labelled = createDividerStory({ label: 'Label' }); -export const LargeTextContent = createDividerStory({ label: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Reprehenderit quas inventore quasi ullam, sed ab odio dicta, tempore' }); diff --git a/apps/pie-storybook/stories/testing/pie-chip.test.stories.ts b/apps/pie-storybook/stories/testing/pie-chip.test.stories.ts new file mode 100644 index 0000000000..6fd5a8efac --- /dev/null +++ b/apps/pie-storybook/stories/testing/pie-chip.test.stories.ts @@ -0,0 +1,148 @@ +import { html, nothing } from 'lit'; +import { ifDefined } from 'lit/directives/if-defined.js'; +import { action } from '@storybook/addon-actions'; +import { type Meta } from '@storybook/web-components'; + +import '@justeattakeaway/pie-chip'; +import { type ChipProps as ChipPropsBase, variants, defaultProps } from '@justeattakeaway/pie-chip'; +import '@justeattakeaway/pie-icons-webc/dist/IconHeartFilled.js'; + +import { type SlottedComponentProps } from '../../types'; +import { + createStory, createVariantStory, type TemplateFunction, sanitizeAndRenderHTML, +} from '../../utilities'; + +type ChipProps = SlottedComponentProps & { showIcon: boolean }; +type ChipStoryMeta = Meta; + +const defaultArgs: ChipProps = { + ...defaultProps, + aria: { + label: 'Chip Label', + close: 'Chip Close', + }, + showIcon: false, + slot: 'String', +}; + +const chipStoryMeta: ChipStoryMeta = { + title: 'Chip', + component: 'pie-chip', + argTypes: { + aria: { + description: 'The ARIA labels used for various parts of the chip.', + control: 'object', + }, + variant: { + description: 'Set the variant of the chip.', + control: 'select', + options: variants, + defaultValue: { + summary: defaultProps.variant, + }, + }, + disabled: { + description: 'If `true`, disables the chip.', + control: 'boolean', + defaultValue: { + summary: defaultProps.disabled, + }, + }, + isSelected: { + description: 'If `true`, the chip element will apply the selected styles.', + control: 'boolean', + defaultValue: { + summary: defaultProps.isSelected, + }, + }, + isLoading: { + description: 'If `true`, displays a loading indicator inside the chip.', + control: 'boolean', + defaultValue: { + summary: defaultProps.isLoading, + }, + }, + isDismissible: { + description: 'If `true`, displays a close icon to dismiss the chip component.

Can be only used if `isSelected` is set to true', + control: 'boolean', + defaultValue: { + summary: defaultProps.isDismissible, + }, + if: { arg: 'isSelected', eq: true }, + }, + showIcon: { + description: 'Enable to see the example of Chip with icon.', + control: 'boolean', + defaultValue: { + summary: defaultArgs.showIcon, + }, + }, + slot: { + description: 'Content to place within the chip', + control: 'text', + }, + }, + args: defaultArgs, +}; + +export default chipStoryMeta; + +const clickAction = action('clicked'); +const closeAction = action('pie-chip-close'); + +const Template: TemplateFunction = ({ + aria, + disabled, + isSelected, + isLoading, + isDismissible, + showIcon, + slot, + variant, +}) => html` + + ${showIcon ? html`` : nothing} + ${sanitizeAndRenderHTML(slot)} + `; +const createChipStory = createStory(Template, defaultArgs); + +export const Default = createChipStory(); +export const Outline = createChipStory({ variant: 'outline' }); +export const Ghost = createChipStory({ variant: 'ghost' }); + +// Define the prop options for the matrix +const sharedPropOptions = { + disabled: [true, false], + isSelected: [true, false], + isLoading: [true, false], + isDismissible: [true, false], + showIcon: [true, false], + slot: ['Hello World'], +}; + +const defaultPropOptions = { + ...sharedPropOptions, + variant: ['default'], +}; + +const ghostPropOptions = { + ...sharedPropOptions, + variant: ['ghost'], +}; + +const outlinePropOptions = { + ...sharedPropOptions, + variant: ['outline'], +}; + +export const DefaultPropVariations = createVariantStory >(Template, defaultPropOptions); +export const GhostPropVariations = createVariantStory>(Template, ghostPropOptions); +export const OutlinePropVariations = createVariantStory>(Template, outlinePropOptions); diff --git a/apps/pie-storybook/test/utilities/index.test.ts b/apps/pie-storybook/test/utilities/index.test.ts new file mode 100644 index 0000000000..6c0f33c4ab --- /dev/null +++ b/apps/pie-storybook/test/utilities/index.test.ts @@ -0,0 +1,95 @@ +import { describe, it, expect } from 'vitest'; +import { html, render, type TemplateResult} from 'lit'; +import { createStory, createVariantStory } from '../../utilities/index'; +import { type StoryOptions } from '../../types/StoryOptions'; + +type ComponentProps = { + size: string; + variant: string; +}; + +const template: (props: ComponentProps) => ReturnType = ({ size, variant }) => html` + +`; + +describe('createStory', () => { + it('should create a story with default args', () => { + const defaultArgs: ComponentProps = { size: 'medium', variant: 'primary' }; + const story = createStory(template, defaultArgs); + + const result = story(); + expect(result.args).toEqual(defaultArgs); + + const actualTemplateResult = result.render(defaultArgs); + + const expectedTemplateResult: Partial = { + strings: Object.assign(['\n \n']), + values: ['medium', 'primary'] + }; + + // Compare the key properties of the TemplateResult + expect(actualTemplateResult.strings).toEqual(expectedTemplateResult.strings); + expect(actualTemplateResult.values).toEqual(expectedTemplateResult.values); + }); + + it('should override default args with prop overrides', () => { + const defaultArgs: ComponentProps = { size: 'medium', variant: 'primary' }; + const story = createStory(template, defaultArgs); + + const propOverrides = { variant: 'secondary' }; + const result = story(propOverrides); + expect(result.args).toEqual({ size: 'medium', variant: 'secondary' }); + }); + + it('should apply story options correctly', () => { + const defaultArgs: ComponentProps = { size: 'medium', variant: 'primary' }; + const storyOpts: StoryOptions = { + bgColor: 'background-subtle', + }; + const story = createStory(template, defaultArgs); + + const result = story({}, storyOpts); + expect(result.parameters.backgrounds.default).toBe('background-subtle'); + }); +}); + +describe('createVariantStory', () => { + it('should generate all combinations of prop options', () => { + const propOptions = { + size: ['small', 'medium', 'large'], + variant: ['primary', 'secondary'], + }; + + const story = createVariantStory(template, propOptions); + const renderResult = story.render(); + + // Render the template to a DOM element + const container = document.createElement('div'); + render(renderResult, container); + + // Count the number of pie-component elements + const renderedCombinations = container.querySelectorAll('pie-component'); + const expectedCombinationsCount = propOptions.size.length * propOptions.variant.length; + expect(renderedCombinations.length).toBe(expectedCombinationsCount); + }); + + it('should apply story options correctly', () => { + const propOptions = { + size: ['small'], + variant: ['primary'], + }; + + const storyOpts: StoryOptions = { + bgColor: 'background-subtle', + argTypes: { size: { control: 'text' } }, + }; + + const story = createVariantStory(template, propOptions, storyOpts); + + // Check if the parameters include the background color + expect(story.parameters.backgrounds.default).toBe('background-subtle'); + + // Check if argTypes are applied + expect(story.argTypes).toEqual(storyOpts.argTypes); + }); +}); diff --git a/apps/pie-storybook/turbo.json b/apps/pie-storybook/turbo.json index 95d0a43d1f..9460488216 100644 --- a/apps/pie-storybook/turbo.json +++ b/apps/pie-storybook/turbo.json @@ -33,6 +33,10 @@ "^generate:component-statuses" ], "outputs": ["dist/**"] + }, + "test": { + "cache": true, + "dependsOn": [] } } } \ No newline at end of file diff --git a/apps/pie-storybook/utilities/index.ts b/apps/pie-storybook/utilities/index.ts index e535a868d2..c973c46033 100644 --- a/apps/pie-storybook/utilities/index.ts +++ b/apps/pie-storybook/utilities/index.ts @@ -1,4 +1,4 @@ -import { type TemplateResult } from 'lit'; +import { html, type TemplateResult } from 'lit'; import DOMPurify from 'dompurify'; import { unsafeHTML } from 'lit/directives/unsafe-html.js'; import { type StoryOptions } from '../types/StoryOptions'; @@ -60,3 +60,80 @@ export const createStory = (templateFunc: TemplateFunction, defaultArgs: T * @returns {import('lit/directives/unsafe-html.js').UnsafeHTMLDirective} A Lit directive that can be used in a Lit template to render the sanitized content. */ export const sanitizeAndRenderHTML = (slot: string) => unsafeHTML(DOMPurify.sanitize(slot)); + +/** + * Creates a story that renders all combinations of given prop options for a Lit web component. + * + * @template T The type representing the properties of the Lit web component. + * + * @param {TemplateFunction} template - The function responsible for rendering the Lit web component. + * @param {Record} propOptions - An object defining the possible values for each prop. + * + * @returns {Function} Returns a function that renders all combinations of the given prop options. + */ +export const createVariantStory = ( + template: TemplateFunction, + propOptions: Record, + storyOpts?: StoryOptions, +) => ({ + render: () => { + const generateCombinations = (options: Record): T[] => { + const keys = Object.keys(options) as (keyof T)[]; + const combinations: T[] = []; + + const buildCombination = (index: number, currentCombination: Partial) => { + if (index === keys.length) { + combinations.push(currentCombination as T); + return; + } + + const key = keys[index]; + const values = options[key]; + + values.forEach((value) => { + buildCombination(index + 1, { ...currentCombination, [key]: value }); + }); + }; + + buildCombination(0, {}); + return combinations; + }; + + const propCombinations = generateCombinations(propOptions); + + return html` +
+ ${propCombinations.map((props) => html` +
+
+ ${Object.entries(props as Record).map(([key, value]) => html` +
${key}: ${JSON.stringify(value)}
+ `)} +
+
+ ${template({ ...props })} +
+
+ `)} +
+ `; + }, + parameters: { + backgrounds: { + ...(storyOpts?.bgColor ? { default: storyOpts.bgColor } : {}), + }, + controls: { + disable: true, + }, + design: { + disable: true, + }, + actions: { + disable: true, + }, + a11y: { + disable: true, + }, + }, + ...(storyOpts?.argTypes ? { argTypes: storyOpts?.argTypes } : {}), + }); diff --git a/packages/components/pie-chip/test/visual/pie-chip.spec.ts b/packages/components/pie-chip/test/visual/pie-chip.spec.ts index 22c084eeb8..daa728b0bb 100644 --- a/packages/components/pie-chip/test/visual/pie-chip.spec.ts +++ b/packages/components/pie-chip/test/visual/pie-chip.spec.ts @@ -1,70 +1,13 @@ -import { test } from '@sand4rt/experimental-ct-web'; +import { test } from '@playwright/test'; import percySnapshot from '@percy/playwright'; -import type { - PropObject, WebComponentPropValues, WebComponentTestInput, -} from '@justeattakeaway/pie-webc-testing/src/helpers/defs.ts'; -import { - getAllPropCombinations, splitCombinationsByPropertyValue, -} from '@justeattakeaway/pie-webc-testing/src/helpers/get-all-prop-combos.ts'; -import { - createTestWebComponent, -} from '@justeattakeaway/pie-webc-testing/src/helpers/rendering.ts'; -import { - WebComponentTestWrapper, -} from '@justeattakeaway/pie-webc-testing/src/helpers/components/web-component-test-wrapper/WebComponentTestWrapper.ts'; import { percyWidths } from '@justeattakeaway/pie-webc-testing/src/percy/breakpoints.ts'; -import { IconHeartFilled } from '@justeattakeaway/pie-icons-webc'; +import { BasePage } from '@justeattakeaway/pie-webc-testing/src/helpers/page-object/base-page.ts'; import { variants } from '../../src/defs.ts'; -import { PieChip } from '../../src/index.ts'; -const props: PropObject = { - variant: variants, - disabled: [true, false], - isSelected: [true, false], - isLoading: [true, false], - isDismissible: [true, false], - iconSlot: ['', ''], -}; +variants.forEach((variant) => test(`should render all prop variations for Variant: ${variant}`, async ({ page }) => { + const basePage = new BasePage(page, `chip--${variant}-prop-variations`); -// Renders a HTML string with the given prop values -const renderTestPieChip = (propVals: WebComponentPropValues) => `${propVals.iconSlot} Hello world`; - -const componentPropsMatrix: WebComponentPropValues[] = getAllPropCombinations(props); -const componentPropsMatrixByVariant: Record = splitCombinationsByPropertyValue(componentPropsMatrix, 'variant'); -const componentVariants: string[] = Object.keys(componentPropsMatrixByVariant); - -test.beforeEach(async ({ mount }, testInfo) => { - testInfo.setTimeout(testInfo.timeout + 40000); - - // This ensures the chip and icon components are registered in the DOM for each test. - // It appears to add them to a Playwright cache which we understand is required for the tests to work correctly. - const chipComponent = await mount(PieChip); - await chipComponent.unmount(); - const iconComponent = await mount(IconHeartFilled); - await iconComponent.unmount(); -}); - -componentVariants.forEach((variant) => test(`should render all prop variations for Variant: ${variant}`, async ({ page, mount }) => { - for (const combo of componentPropsMatrixByVariant[variant]) { - const testComponent: WebComponentTestInput = createTestWebComponent(combo, renderTestPieChip); - const propKeyValues = ` - variant: ${testComponent.propValues.variant}, - isSelected: ${testComponent.propValues.isSelected}, - isLoading: ${testComponent.propValues.isLoading}, - isDismissible: ${testComponent.propValues.isDismissible}, - disabled: ${testComponent.propValues.disabled}, - iconSlot: ${testComponent.propValues.iconSlot ? 'with icon' : 'no icon'}`; - - await mount( - WebComponentTestWrapper, - { - props: { propKeyValues }, - slots: { - component: testComponent.renderedString.trim(), - }, - }, - ); - } + basePage.load(); // Follow up to remove in Jan await page.waitForTimeout(5000); diff --git a/packages/components/pie-chip/turbo.json b/packages/components/pie-chip/turbo.json new file mode 100644 index 0000000000..17ee891780 --- /dev/null +++ b/packages/components/pie-chip/turbo.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "extends": [ + "//" + ], + "pipeline": { + "test:visual": { + "cache": false, + "dependsOn": [] + }, + "test:visual:ci": { + "cache": false, + "dependsOn": [] + } + } +} \ No newline at end of file diff --git a/packages/components/pie-webc-testing/src/helpers/page-object/storybook-extensions.ts b/packages/components/pie-webc-testing/src/helpers/page-object/storybook-extensions.ts index 72c8ae8afc..b834e9b93c 100644 --- a/packages/components/pie-webc-testing/src/helpers/page-object/storybook-extensions.ts +++ b/packages/components/pie-webc-testing/src/helpers/page-object/storybook-extensions.ts @@ -1,8 +1,18 @@ export const buildUrl = (componentName: string, path: string, args: string) => { const prNumber = process.env.PR_NUMBER; - const baseURL = process.env.CI ? `https://pr${prNumber}-storybook.pie.design` : 'http://localhost:6006'; + const branch = process.env.GITHUB_REF; - let url = `${baseURL}/iframe.html?id=${componentName}${path}`; + let baseURL = 'http://localhost:6006'; + + if (process.env.CI) { + if (branch === 'refs/heads/main') { + baseURL = 'https://webc-testing.pie.design'; + } else { + baseURL = `https://pr${prNumber}-storybook-testing.pie.design`; + } + } + + let url = `${baseURL}/iframe.html?id=${componentName}${path || ''}`; if (args) { url += `&args=${args}`; diff --git a/packages/tools/generator-pie-component/src/app/index.ts b/packages/tools/generator-pie-component/src/app/index.ts index cf87eb7170..d6464c0d08 100644 --- a/packages/tools/generator-pie-component/src/app/index.ts +++ b/packages/tools/generator-pie-component/src/app/index.ts @@ -26,11 +26,14 @@ export default class extends Generator { ...transformedName, componentPath: `packages/components/pie-${transformedName.fileName}/`, storyPath: 'apps/pie-storybook/stories/', + testStoryPath: 'apps/pie-storybook/stories/testing/', }; } async writing () { - const { fileName, componentPath, storyPath } = this.props; + const { + fileName, componentPath, storyPath, testStoryPath, + } = this.props; const processDestinationPath = (filePath: string) => filePath.replace(/\b(placeholder)\b/g, fileName).replace(/__/g, ''); this.fs.copyTpl( @@ -52,6 +55,14 @@ export default class extends Generator { { processDestinationPath }, ); + this.fs.copyTpl( + this.templatePath('**/pie-placeholder.__test__.__stories__.ts'), + this.destinationPath(testStoryPath), + this.props, + undefined, + { processDestinationPath }, + ); + // Update YAML and config files this._addPercyTokenEnvVar(); this._addGithubLabel(); diff --git a/packages/tools/generator-pie-component/src/app/templates/__package__.json b/packages/tools/generator-pie-component/src/app/templates/__package__.json index 83628680df..e9c8209fcf 100644 --- a/packages/tools/generator-pie-component/src/app/templates/__package__.json +++ b/packages/tools/generator-pie-component/src/app/templates/__package__.json @@ -29,8 +29,7 @@ "test:browsers": "npx playwright test -c ./playwright-lit.config.ts", "test:browsers:ci": "yarn test:browsers", "test:visual": "run -T cross-env-shell PERCY_TOKEN=${PERCY_TOKEN_PIE_<%= percyComponentName %>} percy exec --allowed-hostname cloudfront.net -- npx playwright test -c ./playwright-lit-visual.config.ts", - "test:visual:ci": "yarn test:visual", - "test:browsers-setup": "npx playwright-lit-setup" + "test:visual:ci": "yarn test:visual" }, "author": "Just Eat Takeaway.com - Design System Team", "license": "Apache-2.0", diff --git a/packages/tools/generator-pie-component/src/app/templates/pie-placeholder.__test__.__stories__.ts b/packages/tools/generator-pie-component/src/app/templates/pie-placeholder.__test__.__stories__.ts new file mode 100644 index 0000000000..40bae5c931 --- /dev/null +++ b/packages/tools/generator-pie-component/src/app/templates/pie-placeholder.__test__.__stories__.ts @@ -0,0 +1,34 @@ +import { html } from 'lit'; +import { type Meta } from '@storybook/web-components'; + +import '@justeattakeaway/pie-<%= fileName %>'; +import { type <%= componentName %>Props } from '@justeattakeaway/pie-<%= fileName %>'; + +import { createStory } from '../../utilities'; + +type <%= componentName %>StoryMeta = Meta<<%= componentName %>Props>; + +const defaultArgs: <%= componentName %>Props = {}; + +const <%= componentNameCamelCase %>StoryMeta: <%= componentName %>StoryMeta = { + title: '<%= displayName %>', + component: 'pie-<%= fileName %>', + argTypes: {}, + args: defaultArgs, + parameters: { + design: { + type: 'figma', + url: '', + }, + }, +}; + +export default <%= componentNameCamelCase %>StoryMeta; + +// TODO: remove the eslint-disable rule when props are added +// eslint-disable-next-line no-empty-pattern +const Template = ({}: <%= componentName %>Props) => html` + >> +`; + +export const Default = createStory<<%= componentName %>Props>(Template, defaultArgs)(); diff --git a/packages/tools/generator-pie-component/src/app/templates/test/accessibility/pie-placeholder.__spec__.ts b/packages/tools/generator-pie-component/src/app/templates/test/accessibility/pie-placeholder.__spec__.ts index 9443b547d6..2c28bbe378 100644 --- a/packages/tools/generator-pie-component/src/app/templates/test/accessibility/pie-placeholder.__spec__.ts +++ b/packages/tools/generator-pie-component/src/app/templates/test/accessibility/pie-placeholder.__spec__.ts @@ -1,12 +1,18 @@ -import { test, expect } from '@justeattakeaway/pie-webc-testing/src/playwright/webc-fixtures.ts'; +import { test, expect } from '@justeattakeaway/pie-webc-testing/src/playwright/playwright-fixtures.ts'; import { Pie<%= componentName %> } from '../../src/index.ts'; +import { BasePage } from '@justeattakeaway/pie-webc-testing/src/helpers/page-object/base-page.ts'; test.describe('Pie<%= componentName %> - Accessibility tests', () => { - test('a11y - should test the Pie<%= componentName %> component WCAG compliance', async ({ makeAxeBuilder, mount }) => { - await mount(Pie<%= componentName %>); + test('a11y - should test the Pie<%= componentName %> component WCAG compliance', async ({ page, makeAxeBuilder }) => { + // Arrange + const basePage = new BasePage(page, '<%= fileName %>--default'); + basePage.load(); + await page.waitForTimeout(2500); + + // Act const results = await makeAxeBuilder().analyze(); expect(results.violations).toEqual([]); }); -}); +}); \ No newline at end of file diff --git a/packages/tools/generator-pie-component/src/app/templates/test/component/pie-placeholder.__spec__.ts b/packages/tools/generator-pie-component/src/app/templates/test/component/pie-placeholder.__spec__.ts index 0f0e2efaff..a56df9deec 100644 --- a/packages/tools/generator-pie-component/src/app/templates/test/component/pie-placeholder.__spec__.ts +++ b/packages/tools/generator-pie-component/src/app/templates/test/component/pie-placeholder.__spec__.ts @@ -1,12 +1,15 @@ -import { test, expect } from '@sand4rt/experimental-ct-web'; -import { Pie<%= componentName %> } from '../../src/index.ts'; +import { test, expect } from '@playwright/test'; +import { BasePage } from '@justeattakeaway/pie-webc-testing/src/helpers/page-object/base-page.ts'; const componentSelector = '[data-test-id="pie-<%= fileName %>"]'; test.describe('Pie<%= componentName %> - Component tests', () => { - test('should render successfully', async ({ mount, page }) => { + test('should render successfully', async ({ page }) => { // Arrange - await mount(Pie<%= componentName %>); + const basePage = new BasePage(page, '<%= fileName %>--default'); + + basePage.load(); + await page.waitForTimeout(2500); // Act const <%= componentNameCamelCase %> = page.locator(componentSelector); @@ -14,4 +17,4 @@ test.describe('Pie<%= componentName %> - Component tests', () => { // Assert expect(<%= componentNameCamelCase %>).toBeVisible(); }); -}); +}); \ No newline at end of file diff --git a/packages/tools/generator-pie-component/src/app/templates/test/visual/pie-placeholder.__spec__.ts b/packages/tools/generator-pie-component/src/app/templates/test/visual/pie-placeholder.__spec__.ts index b593408e4e..e8128d75fa 100644 --- a/packages/tools/generator-pie-component/src/app/templates/test/visual/pie-placeholder.__spec__.ts +++ b/packages/tools/generator-pie-component/src/app/templates/test/visual/pie-placeholder.__spec__.ts @@ -1,11 +1,14 @@ -import { test } from '@sand4rt/experimental-ct-web'; +import { test } from '@playwright/test'; import percySnapshot from '@percy/playwright'; -import { Pie<%= componentName %> } from '../../src/index.ts'; +import { BasePage } from '@justeattakeaway/pie-webc-testing/src/helpers/page-object/base-page.ts'; test.describe('Pie<%= componentName %> - Visual tests`', () => { - test('should display the Pie<%= componentName %> component successfully', async ({ page, mount }) => { - await mount(Pie<%= componentName %>); + test('should display the Pie<%= componentName %> component successfully', async ({ page }) => { + const basePage = new BasePage(page, '<%= fileName %>--default'); - await percySnapshot(page, 'Pie<%= componentName %> - Visual Test'); + basePage.load(); + await page.waitForTimeout(2500); + + await percySnapshot(page, 'Pie<%= componentName %> - Visual Test'); }); }); diff --git a/packages/tools/generator-pie-component/src/app/templates/turbo.json b/packages/tools/generator-pie-component/src/app/templates/turbo.json new file mode 100644 index 0000000000..5bd8fa3c53 --- /dev/null +++ b/packages/tools/generator-pie-component/src/app/templates/turbo.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "extends": [ + "//" + ], + "pipeline": { + "test:browsers": { + "cache": true, + "dependsOn": [] + }, + "test:browsers:ci": { + "cache": true, + "dependsOn": [] + }, + "test:visual": { + "cache": false, + "dependsOn": [] + }, + "test:visual:ci": { + "cache": false, + "dependsOn": [] + } + } +} \ No newline at end of file diff --git a/packages/tools/generator-pie-component/src/app/types.ts b/packages/tools/generator-pie-component/src/app/types.ts index a1aed3434f..2e8cf6feb1 100644 --- a/packages/tools/generator-pie-component/src/app/types.ts +++ b/packages/tools/generator-pie-component/src/app/types.ts @@ -13,4 +13,5 @@ export type Props = { answers: Answers; componentPath: string; storyPath: string; + testStoryPath: string; } & TransformedName; diff --git a/packages/tools/pie-monorepo-utils/changeset-snapshot/test-aperture.js b/packages/tools/pie-monorepo-utils/changeset-snapshot/test-aperture.js index acab1fa619..5f76b37877 100644 --- a/packages/tools/pie-monorepo-utils/changeset-snapshot/test-aperture.js +++ b/packages/tools/pie-monorepo-utils/changeset-snapshot/test-aperture.js @@ -13,8 +13,7 @@ module.exports = async ({ github, context }, execa) => { .filter((tag) => !/^wc-.+$|pie-(monorepo|docs|storybook)/.test(tag)); // Extract the snapshot version from one of the tags - // eslint-disable-next-line prefer-destructuring - const snapshotVersion = newTags[0].match(/\d{14}$/)[0]; + const [snapshotVersion] = newTags[0].match(/\d{14}$/); // Extract package names by removing version and scope from the tags const packageNames = newTags.map((tag) => `@justeattakeaway/${tag.match(/pie-[\w-]+/)[0]}`); diff --git a/yarn.lock b/yarn.lock index ece1109852..ef099cd74d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3784,9 +3784,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/aix-ppc64@npm:0.23.1" +"@esbuild/aix-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/aix-ppc64@npm:0.24.0" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard @@ -3812,9 +3812,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/android-arm64@npm:0.23.1" +"@esbuild/android-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm64@npm:0.24.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -3840,9 +3840,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/android-arm@npm:0.23.1" +"@esbuild/android-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm@npm:0.24.0" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -3868,9 +3868,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/android-x64@npm:0.23.1" +"@esbuild/android-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-x64@npm:0.24.0" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -3896,9 +3896,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/darwin-arm64@npm:0.23.1" +"@esbuild/darwin-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-arm64@npm:0.24.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -3924,9 +3924,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/darwin-x64@npm:0.23.1" +"@esbuild/darwin-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-x64@npm:0.24.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -3952,9 +3952,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/freebsd-arm64@npm:0.23.1" +"@esbuild/freebsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-arm64@npm:0.24.0" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -3980,9 +3980,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/freebsd-x64@npm:0.23.1" +"@esbuild/freebsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-x64@npm:0.24.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -4008,9 +4008,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-arm64@npm:0.23.1" +"@esbuild/linux-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm64@npm:0.24.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -4036,9 +4036,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-arm@npm:0.23.1" +"@esbuild/linux-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm@npm:0.24.0" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -4064,9 +4064,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-ia32@npm:0.23.1" +"@esbuild/linux-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ia32@npm:0.24.0" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -4092,9 +4092,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-loong64@npm:0.23.1" +"@esbuild/linux-loong64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-loong64@npm:0.24.0" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -4120,9 +4120,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-mips64el@npm:0.23.1" +"@esbuild/linux-mips64el@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-mips64el@npm:0.24.0" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -4148,9 +4148,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-ppc64@npm:0.23.1" +"@esbuild/linux-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ppc64@npm:0.24.0" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -4176,9 +4176,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-riscv64@npm:0.23.1" +"@esbuild/linux-riscv64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-riscv64@npm:0.24.0" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -4204,9 +4204,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-s390x@npm:0.23.1" +"@esbuild/linux-s390x@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-s390x@npm:0.24.0" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -4232,9 +4232,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/linux-x64@npm:0.23.1" +"@esbuild/linux-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-x64@npm:0.24.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -4260,16 +4260,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/netbsd-x64@npm:0.23.1" +"@esbuild/netbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/netbsd-x64@npm:0.24.0" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/openbsd-arm64@npm:0.23.1" +"@esbuild/openbsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-arm64@npm:0.24.0" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard @@ -4295,9 +4295,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/openbsd-x64@npm:0.23.1" +"@esbuild/openbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-x64@npm:0.24.0" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -4323,9 +4323,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/sunos-x64@npm:0.23.1" +"@esbuild/sunos-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/sunos-x64@npm:0.24.0" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -4351,9 +4351,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/win32-arm64@npm:0.23.1" +"@esbuild/win32-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-arm64@npm:0.24.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -4379,9 +4379,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/win32-ia32@npm:0.23.1" +"@esbuild/win32-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-ia32@npm:0.24.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -4407,9 +4407,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.23.1": - version: 0.23.1 - resolution: "@esbuild/win32-x64@npm:0.23.1" +"@esbuild/win32-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-x64@npm:0.24.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4876,6 +4876,18 @@ __metadata: languageName: unknown linkType: soft +"@justeattakeaway/pie-foo@0.0.0, @justeattakeaway/pie-foo@workspace:packages/components/pie-foo": + version: 0.0.0-use.local + resolution: "@justeattakeaway/pie-foo@workspace:packages/components/pie-foo" + dependencies: + "@custom-elements-manifest/analyzer": 0.9.0 + "@justeattakeaway/pie-components-config": 0.18.0 + "@justeattakeaway/pie-css": 0.13.1 + "@justeattakeaway/pie-webc-core": 0.24.2 + cem-plugin-module-file-extensions: 0.0.5 + languageName: unknown + linkType: soft + "@justeattakeaway/pie-form-label@0.14.4, @justeattakeaway/pie-form-label@workspace:packages/components/pie-form-label": version: 0.0.0-use.local resolution: "@justeattakeaway/pie-form-label@workspace:packages/components/pie-form-label" @@ -5222,6 +5234,7 @@ __metadata: "@justeattakeaway/pie-components-config": 0.18.0 "@justeattakeaway/pie-cookie-banner": 1.2.0 "@justeattakeaway/pie-divider": 1.0.0 + "@justeattakeaway/pie-foo": 0.0.0 "@justeattakeaway/pie-form-label": 0.14.4 "@justeattakeaway/pie-icon-button": 1.0.0 "@justeattakeaway/pie-link": 1.0.0 @@ -6890,21 +6903,21 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-a11y@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-a11y@npm:8.3.0" +"@storybook/addon-a11y@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-a11y@npm:8.4.5" dependencies: - "@storybook/addon-highlight": 8.3.0 + "@storybook/addon-highlight": 8.4.5 axe-core: ^4.2.0 peerDependencies: - storybook: ^8.3.0 - checksum: 440e990581c4c4e590b0d810b1652dc32674464a584c59f53a9d443efd6d3bce30c61700591565a5d6b5b7251b5a3e64d8590bbb0360c08f58a939af5189b564 + storybook: ^8.4.5 + checksum: 956409fc254fc126cdf46226ff622ef849b234e5a3b1dd92c918cf3933be48efae8be01e1f3f14ea4d9c2ecd92c91652a11256c278afb58c66391793b93b6e58 languageName: node linkType: hard -"@storybook/addon-actions@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-actions@npm:8.3.0" +"@storybook/addon-actions@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-actions@npm:8.4.5" dependencies: "@storybook/global": ^5.0.0 "@types/uuid": ^9.0.1 @@ -6912,47 +6925,46 @@ __metadata: polished: ^4.2.2 uuid: ^9.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: 29b76d7783110ee006d01d2d33d456098b049203d9ea0c9a26927285e408c99296e763b081fb6092f5e1b15f7a6bf76ca8b49431d37a663510f64d73129b74e1 + storybook: ^8.4.5 + checksum: 7bc9b3091b62419170aa841d2006b88cffa111557f3451b96f9f61310c83138a131f3e400b05fbd5c774d5e93b15ebd629844844b6ba099ee968fed2e5085d54 languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-backgrounds@npm:8.3.0" +"@storybook/addon-backgrounds@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-backgrounds@npm:8.4.5" dependencies: "@storybook/global": ^5.0.0 memoizerific: ^1.11.3 ts-dedent: ^2.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: 061b8c7a10ec37e6e656f0aa828f7ef5e7eb7a2e4230b836e49edde783bd42378bbc4dcd66b98690807dbf31ec6ffc20b659b3aaead58c676be60bf9289fdbdd + storybook: ^8.4.5 + checksum: a8b68fc20463087cc66d52c933825c9ba73f81c4ab14eea607271f20ad0e108581bb75dddd06fd01a8a55637b48a14342543174bbacbc7609388c659f0257906 languageName: node linkType: hard -"@storybook/addon-controls@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-controls@npm:8.3.0" +"@storybook/addon-controls@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-controls@npm:8.4.5" dependencies: "@storybook/global": ^5.0.0 dequal: ^2.0.2 - lodash: ^4.17.21 ts-dedent: ^2.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: 63a6e398987d2055c46cab40fd551eca47ca6db32ff6496e7e97a6bf1579e18930354877211cf9da7b36c1fd2a4d270433d74adb8c834d89a0ad9f43d48ad975 + storybook: ^8.4.5 + checksum: 673cdec1c5b174a317c295bcbbcb464f0d2778e6c403b3ae591a96d59510a96b9a97121b250d13e83886168396e5ee6877104e04da957950c3d87145ec76007b languageName: node linkType: hard -"@storybook/addon-designs@npm:8.0.3": - version: 8.0.3 - resolution: "@storybook/addon-designs@npm:8.0.3" +"@storybook/addon-designs@npm:8.0.4": + version: 8.0.4 + resolution: "@storybook/addon-designs@npm:8.0.4" dependencies: "@figspec/react": ^1.0.0 peerDependencies: - "@storybook/blocks": ^8.0.0 - "@storybook/components": ^8.0.0 - "@storybook/theming": ^8.0.0 + "@storybook/blocks": ^8.0.0 || ^8.1.0-0 || ^8.2.0-0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + "@storybook/components": ^8.0.0 || ^8.1.0-0 || ^8.2.0-0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + "@storybook/theming": ^8.0.0 || ^8.1.0-0 || ^8.2.0-0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: @@ -6966,195 +6978,163 @@ __metadata: optional: true react-dom: optional: true - checksum: e255c0e008be12c6f0928b8a6b8e364da73e0e88848ee33c5875e04b6d49868d5a7dab28f5bb0f0b2514fc47c9ff8a36d562392cf998aa16a84a1b423b35196f + checksum: 530bbc5c1004ad9426449a1999495a07a81f28aadc01c82630da2fc0c8c3c178c61e2fb3af0f196ff3b65f85aa96299e92b33a2a1c832efd16e3e0463174008b languageName: node linkType: hard -"@storybook/addon-docs@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-docs@npm:8.3.0" +"@storybook/addon-docs@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-docs@npm:8.4.5" dependencies: "@mdx-js/react": ^3.0.0 - "@storybook/blocks": 8.3.0 - "@storybook/csf-plugin": 8.3.0 - "@storybook/global": ^5.0.0 - "@storybook/react-dom-shim": 8.3.0 - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - fs-extra: ^11.1.0 + "@storybook/blocks": 8.4.5 + "@storybook/csf-plugin": 8.4.5 + "@storybook/react-dom-shim": 8.4.5 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - rehype-external-links: ^3.0.0 - rehype-slug: ^6.0.0 ts-dedent: ^2.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: 3372f4a01260519e2c4f5868f319f3a7866d513b29edd0aa0bbf60be60ae1bf12edcf84781410928448eb9a32d8af803ee613ebfc660581a206dd8d37c247956 + storybook: ^8.4.5 + checksum: 04b15137c082e5b6f6d55f5a251a4a34a08c44f7ad926615f5a99093bd26b044ad40cbdb314a3a76154de00dd2434c61f893ca2ce697193addd03e0650c6d4da languageName: node linkType: hard -"@storybook/addon-essentials@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-essentials@npm:8.3.0" - dependencies: - "@storybook/addon-actions": 8.3.0 - "@storybook/addon-backgrounds": 8.3.0 - "@storybook/addon-controls": 8.3.0 - "@storybook/addon-docs": 8.3.0 - "@storybook/addon-highlight": 8.3.0 - "@storybook/addon-measure": 8.3.0 - "@storybook/addon-outline": 8.3.0 - "@storybook/addon-toolbars": 8.3.0 - "@storybook/addon-viewport": 8.3.0 +"@storybook/addon-essentials@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-essentials@npm:8.4.5" + dependencies: + "@storybook/addon-actions": 8.4.5 + "@storybook/addon-backgrounds": 8.4.5 + "@storybook/addon-controls": 8.4.5 + "@storybook/addon-docs": 8.4.5 + "@storybook/addon-highlight": 8.4.5 + "@storybook/addon-measure": 8.4.5 + "@storybook/addon-outline": 8.4.5 + "@storybook/addon-toolbars": 8.4.5 + "@storybook/addon-viewport": 8.4.5 ts-dedent: ^2.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: ad075f6455349c7444a311d6e36142c2ed080d4868851b523d6faf0b1bee73e77b1d500da28ab6a20df08d90a7bc9e452edcdc794446ce494e47dcb22c8d654b + storybook: ^8.4.5 + checksum: a00c0e13763076b2bdf9923b75ff57b3f88c9ef64cebc405bb129f02fb9e69a4e69aa0d277a4d98cb181c11681eb8db488585a1dcf8f92f1ff8b371b4c6810fb languageName: node linkType: hard -"@storybook/addon-highlight@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-highlight@npm:8.3.0" +"@storybook/addon-highlight@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-highlight@npm:8.4.5" dependencies: "@storybook/global": ^5.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: d96d8d7386a5582c1eab2e0ef4ab8ecb168e1b6f7486327ecd50832d777ea53e89a2b84b5e25946b6822196abf453b619f1cff64c7373781132a66414ed9a528 + storybook: ^8.4.5 + checksum: 8caa57aaee1a6704e757d4711899683d83778ad426015871f93cbb4e44ffb07a7a5e81a1bed7c36b335fa3687ce36f7a6f41738aa040bfbeea623100ed831090 languageName: node linkType: hard -"@storybook/addon-links@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-links@npm:8.3.0" +"@storybook/addon-links@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-links@npm:8.4.5" dependencies: "@storybook/csf": ^0.1.11 "@storybook/global": ^5.0.0 ts-dedent: ^2.0.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.0 + storybook: ^8.4.5 peerDependenciesMeta: react: optional: true - checksum: 3f8c54e0166c64d3e2d6b267fef043cd588ae08c8271e31da1e39a731a94990b40859b1489b8e8c225cfdca6ef9b0f61a6c8608e67af809f0db23111bd65a5a1 + checksum: 47cd11c9aab7a5d3ab2f6517316973ce1a8f118d845f4dac2bc3864597252fe8d0ab3e62695a6fcd0ea8c72097260b99545392d9a6fe8be646e5b352481f48cd languageName: node linkType: hard -"@storybook/addon-measure@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-measure@npm:8.3.0" +"@storybook/addon-measure@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-measure@npm:8.4.5" dependencies: "@storybook/global": ^5.0.0 tiny-invariant: ^1.3.1 peerDependencies: - storybook: ^8.3.0 - checksum: 42ce4c248820169d5033e985a45d0a0887446c5e79fab0670e18729890de2d67eb8f438394ea248fe065f5dfbd9983dac80af8d534fcf0d7e6a8ccfae5eb8d49 + storybook: ^8.4.5 + checksum: c6e177f8c2ae68984cde8502cf303c4ee69798cd3b9453aea9a8df5c30d42f4ec8b58d416ee8fdd2f5110c3d837c871e96953bf62225b13476da0dc8cfe6e7e0 languageName: node linkType: hard -"@storybook/addon-outline@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-outline@npm:8.3.0" +"@storybook/addon-outline@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-outline@npm:8.4.5" dependencies: "@storybook/global": ^5.0.0 ts-dedent: ^2.0.0 peerDependencies: - storybook: ^8.3.0 - checksum: 8085baf32d7da28418e350c5bb0cabca5c825665651d53790af0a78de4e52370456d6fdb80959c12e8547eb5d775a508a1cdce35967d9fe5d5ac632d975b9320 + storybook: ^8.4.5 + checksum: 41567f91cee84920d66f657b40f262c95a9a046aed6e9db161624d6adcf77ce9acb7d433c7f9e929da4dee048e0842015d0bc51a63fb8468f69f560067e5234f languageName: node linkType: hard -"@storybook/addon-toolbars@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-toolbars@npm:8.3.0" +"@storybook/addon-toolbars@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-toolbars@npm:8.4.5" peerDependencies: - storybook: ^8.3.0 - checksum: 31f8dc2a55b6c420e7ec9e4cf066cec4da022bb0fc26f578eb5fb38dd6080b3d934ff9daac82fe12c6c947bb68eb9ef824159bd5e948b9682b1f5c1847dc63b4 + storybook: ^8.4.5 + checksum: fa914838d23b68199c355672674ad6f84bd3db0f2b961fd05ebba916a8c1dd1026ed9568ae97b34e9b0d657d4d4d9d64d69431d6c6a04b2e4bb39d4ddc93446c languageName: node linkType: hard -"@storybook/addon-viewport@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/addon-viewport@npm:8.3.0" +"@storybook/addon-viewport@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/addon-viewport@npm:8.4.5" dependencies: memoizerific: ^1.11.3 peerDependencies: - storybook: ^8.3.0 - checksum: 1f560aeb0d12240f653a81de0a4e19ad3d3ff895e61339cd641924b7ca57587c6ec3472f4bdf33168127635b75ecae0a78ea62411f0225d62e6998b86db42d9f + storybook: ^8.4.5 + checksum: 72d70129e8d4c223608a66a7e6630be21ee05f403ef54afc72344489655e38256d644503f74ed9f363a18d967f22fa9da36ce4bc082b6a464c4fdb5e50d598ce languageName: node linkType: hard -"@storybook/blocks@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/blocks@npm:8.3.0" +"@storybook/blocks@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/blocks@npm:8.4.5" dependencies: "@storybook/csf": ^0.1.11 - "@storybook/global": ^5.0.0 - "@storybook/icons": ^1.2.10 - "@types/lodash": ^4.14.167 - color-convert: ^2.0.1 - dequal: ^2.0.2 - lodash: ^4.17.21 - markdown-to-jsx: ^7.4.5 - memoizerific: ^1.11.3 - polished: ^4.2.2 - react-colorful: ^5.1.2 - telejson: ^7.2.0 + "@storybook/icons": ^1.2.12 ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.0 + storybook: ^8.4.5 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 5beccdfaa1e39a4f6e0b33a1f3ccb7aa102507be5360678e49b336528f9e8bb4660fbacb82ae846a466a9bd282c16e838438d5ff0ceb6c10e4f9c8b11cef96ac + checksum: f80d320d75fc74cd15c7b3a4d58de286f617120829bb5c319f845d2e2310ef2f2e159e69cf3fd3906c8be47e34cd95e879c565d09f0bfe360e73df694c90bd79 languageName: node linkType: hard -"@storybook/builder-vite@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/builder-vite@npm:8.3.0" +"@storybook/builder-vite@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/builder-vite@npm:8.4.5" dependencies: - "@storybook/csf-plugin": 8.3.0 - "@types/find-cache-dir": ^3.2.1 + "@storybook/csf-plugin": 8.4.5 browser-assert: ^1.2.1 - es-module-lexer: ^1.5.0 - express: ^4.19.2 - find-cache-dir: ^3.0.0 - fs-extra: ^11.1.0 - magic-string: ^0.30.0 ts-dedent: ^2.0.0 peerDependencies: - "@preact/preset-vite": "*" - storybook: ^8.3.0 - typescript: ">= 4.3.x" + storybook: ^8.4.5 vite: ^4.0.0 || ^5.0.0 - vite-plugin-glimmerx: "*" - peerDependenciesMeta: - "@preact/preset-vite": - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true - checksum: 68ab51b10b29ad11f58e2dc832f45346688c8369bea6fa392d295c6276e2d13cabffcd3452ee3905c19a501a46a8a357f23d40706677c0da36f84db9d591db8f + checksum: 83895289b3b1390825759e57e9b2a71d23dd989f7939fe2fa005fae8618987a5294d3af5fb6402d51952da88dc2b623857dc6fd595faca9b6aeeb9a27a6ae6fe languageName: node linkType: hard -"@storybook/components@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/components@npm:8.3.0" +"@storybook/components@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/components@npm:8.4.5" peerDependencies: - storybook: ^8.3.0 - checksum: c53337007bbadb031685dcc8b4045f73b658fc4f4937812b1e25cc793209bfe8da4f10d88dd0aa28464fbbfea2e8007abca9d86f6a5b6ea03d06b653813889d2 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: dd14e0a2d40f6590fd92204f3b40d4437403b7be311fa797250bd71fe4b38ade78389d41d2617fa5e75cfa0e1538366ca1154149c0894433245c23cebc4dfc73 languageName: node linkType: hard -"@storybook/components@npm:^8.0.0, @storybook/components@npm:^8.3.0": +"@storybook/components@npm:^8.0.0": version: 8.4.3 resolution: "@storybook/components@npm:8.4.3" peerDependencies: @@ -7172,33 +7152,38 @@ __metadata: languageName: node linkType: hard -"@storybook/core@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/core@npm:8.3.0" +"@storybook/core@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/core@npm:8.4.5" dependencies: "@storybook/csf": ^0.1.11 - "@types/express": ^4.17.21 + better-opn: ^3.0.2 browser-assert: ^1.2.1 - esbuild: ^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 + esbuild: ^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 esbuild-register: ^3.5.0 - express: ^4.19.2 + jsdoc-type-pratt-parser: ^4.0.0 process: ^0.11.10 recast: ^0.23.5 semver: ^7.6.2 util: ^0.12.5 ws: ^8.2.3 - checksum: 242d7d706d4d979c81ebd985bf0ea6067950a45102eca8e4fcb232dcaad6d83266d9691ec7cd5717f19138deae2adb5f56ee0783a72a1cd5797854ea856fffe7 + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + checksum: cfc7c93508befaed12314c61a64d892f543c16cff61b841ab5d74f666b88f6778aa3dd84095325074d4bc85bfde99a69ffc674e93200b457e33784b3ceccf730 languageName: node linkType: hard -"@storybook/csf-plugin@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/csf-plugin@npm:8.3.0" +"@storybook/csf-plugin@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/csf-plugin@npm:8.4.5" dependencies: unplugin: ^1.3.1 peerDependencies: - storybook: ^8.3.0 - checksum: 91ebb22035b33fdd2a03cebec4553d68328357ae49f100d066da8fee0ef1471ec7aa45b3151b3ec552156229b51b5afeaa1fa7dba46e3ada49dd4c057f0425db + storybook: ^8.4.5 + checksum: df59430f3f212ad8a11efdfa3ef01d8fa73322233338488fb97a9e2e031c4846a6b307acbf16edd72ab8edb02e86740b5a0fff0e0dec4dd15850573a92831c98 languageName: node linkType: hard @@ -7218,7 +7203,7 @@ __metadata: languageName: node linkType: hard -"@storybook/icons@npm:^1.2.10, @storybook/icons@npm:^1.2.5": +"@storybook/icons@npm:^1.2.12, @storybook/icons@npm:^1.2.5": version: 1.2.12 resolution: "@storybook/icons@npm:1.2.12" peerDependencies: @@ -7228,16 +7213,16 @@ __metadata: languageName: node linkType: hard -"@storybook/manager-api@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/manager-api@npm:8.3.0" +"@storybook/manager-api@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/manager-api@npm:8.4.5" peerDependencies: - storybook: ^8.3.0 - checksum: f44e8d428bf94a4d0e306fcc0d887cdd2564ee1b1dfd5a48392cee71be6ae3e065628d5ca44d9307b8b071f9929c4a9ac7a44d7035e52fb17cb94dd9b810a399 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: f6bc0ef3703afceedb862b77f22e169a173525c6d0483ba4ae5d1daf5b19c8077b33ef3fd634571e3ded93b2d4bd4a9e182c23d4395d1bfe8fdb6c98bdcc119f languageName: node linkType: hard -"@storybook/manager-api@npm:^8.0.0, @storybook/manager-api@npm:^8.3.0": +"@storybook/manager-api@npm:^8.0.0": version: 8.4.3 resolution: "@storybook/manager-api@npm:8.4.3" peerDependencies: @@ -7246,45 +7231,36 @@ __metadata: languageName: node linkType: hard -"@storybook/preview-api@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/preview-api@npm:8.3.0" - peerDependencies: - storybook: ^8.3.0 - checksum: bce11261a585c4dd60ef4d0562b91d11bd1fa3b709dcd4b722df0bac0426964097eacbcaf0e5f6602886a9130b5d0732d743ba2edfd62b597b6f2020b0a427d2 - languageName: node - linkType: hard - -"@storybook/preview-api@npm:^8.3.0": - version: 8.4.3 - resolution: "@storybook/preview-api@npm:8.4.3" +"@storybook/preview-api@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/preview-api@npm:8.4.5" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 4d3f1c544d088392763dc7c6df0aaf2d03d65eaf28a439f001eece22c8a514ba8cead48c44f5f839c2077166fc65618f8d3f3d8525f1b4381b34a79aafcb83da + checksum: 832bee373583fb55102459445ae7f3e8bca0ff80a4220aa656bf6baf8661e0c65184f080b1e10695f8fbb948fd8d48cc9728d19d1bc6993418251126380d4818 languageName: node linkType: hard -"@storybook/react-dom-shim@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/react-dom-shim@npm:8.3.0" +"@storybook/react-dom-shim@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/react-dom-shim@npm:8.4.5" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.0 - checksum: f826067e715734c6c5855a7898e19fcfa591f3b4f5390a6e5d19ecbbade42c74caf4aa0275d6694f4d253e4b981d571796937da3fbd4f1b9bf03fe8269af017a + storybook: ^8.4.5 + checksum: b1f176b85783bfa9c43f49a7ef69c04ff92079e5ba8ca76b1b9f46b814c19db6e882137c35ebd91424e2e51bfa0d34eb3f0b84d4ed9e8a2b93875b7f5563b310 languageName: node linkType: hard -"@storybook/theming@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/theming@npm:8.3.0" +"@storybook/theming@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/theming@npm:8.4.5" peerDependencies: - storybook: ^8.3.0 - checksum: a382b5cfe9c232f5bb3943cb034b7ec597f9966e908c868c6ee40f0f3f3797a09231f96a31810760c3a2efdb78c1464239650a88f068fa74ca367f666dd94420 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 0eefd3a3bea58e557f1e303270910046f05aa971ceba6ca6c1cd706c25b537243be6663dba5b2b3aa2edb7fc40279e93403131d76eae7da26da70f8a1c8d1c96 languageName: node linkType: hard -"@storybook/theming@npm:^8.0.0, @storybook/theming@npm:^8.3.0": +"@storybook/theming@npm:^8.0.0": version: 8.4.3 resolution: "@storybook/theming@npm:8.4.3" peerDependencies: @@ -7293,43 +7269,43 @@ __metadata: languageName: node linkType: hard -"@storybook/types@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/types@npm:8.3.0" +"@storybook/types@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/types@npm:8.4.5" peerDependencies: - storybook: ^8.3.0 - checksum: 54b9aa2ca7fdca4c401d51f6d0223db8252a83fe71c9e8bd29afa097b0211ee1443719c3d548e454601ee17f2d2c434778e752d5cc6a88168cc216345276ce7e + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 9c6d8aef05a475ed42faa63618ee6a958803115fb124281d2724576935630c769166ea5ea3dcabe69a28658d7f190ea3acffbeddd9c0aeb0894688df2ed4fe40 languageName: node linkType: hard -"@storybook/web-components-vite@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/web-components-vite@npm:8.3.0" +"@storybook/web-components-vite@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/web-components-vite@npm:8.4.5" dependencies: - "@storybook/builder-vite": 8.3.0 - "@storybook/web-components": 8.3.0 + "@storybook/builder-vite": 8.4.5 + "@storybook/web-components": 8.4.5 magic-string: ^0.30.0 peerDependencies: - storybook: ^8.3.0 - checksum: cf502836e389865a899e24331d945b269c3813349f61c27d265e8dd7899abdfbb18c450070d6d179a2340efa24c9d73af270460d7978e19a7936d585798e3a9d + storybook: ^8.4.5 + checksum: 2efbc108cc64bf9391454ef90fa3c3edf4d32067609c9887dbd5fdf9345cab8624bb60c43cb2c68d29af18f0441e2d81633c4509d37f8e36ee04f3f32d6e55b6 languageName: node linkType: hard -"@storybook/web-components@npm:8.3.0": - version: 8.3.0 - resolution: "@storybook/web-components@npm:8.3.0" +"@storybook/web-components@npm:8.4.5": + version: 8.4.5 + resolution: "@storybook/web-components@npm:8.4.5" dependencies: - "@storybook/components": ^8.3.0 + "@storybook/components": 8.4.5 "@storybook/global": ^5.0.0 - "@storybook/manager-api": ^8.3.0 - "@storybook/preview-api": ^8.3.0 - "@storybook/theming": ^8.3.0 + "@storybook/manager-api": 8.4.5 + "@storybook/preview-api": 8.4.5 + "@storybook/theming": 8.4.5 tiny-invariant: ^1.3.1 ts-dedent: ^2.0.0 peerDependencies: lit: ^2.0.0 || ^3.0.0 - storybook: ^8.3.0 - checksum: ece9b71c8fc4601b65cb1e384d9ae8498706951c5afe63313f8949f36221db189e5fb5e51eadd2c5ed8a0336ebe3cc0989fb866437319bb33d28adbc4753651a + storybook: ^8.4.5 + checksum: 3e25751a2d1276b4d4c32c087a626637aae52d768a91bd7a6e627f2c141462673ec1504ceda7ca15d39b465b649f604ceef1f8274f4db0213d72abb957285f60 languageName: node linkType: hard @@ -7860,7 +7836,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:^4.17.13, @types/express@npm:^4.17.21": +"@types/express@npm:^4.17.13": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -7872,13 +7848,6 @@ __metadata: languageName: node linkType: hard -"@types/find-cache-dir@npm:^3.2.1": - version: 3.2.1 - resolution: "@types/find-cache-dir@npm:3.2.1" - checksum: bf5c4e96da40247cd9e6327f54dfccda961a0fb2d70e3c71bd05def94de4c2e6fb310fe8ecb0f04ecf5dbc52214e184b55a2337b0f87250d4ae1e2e7d58321e4 - languageName: node - linkType: hard - "@types/fs-extra@npm:^8.0.1": version: 8.1.5 resolution: "@types/fs-extra@npm:8.1.5" @@ -7898,15 +7867,6 @@ __metadata: languageName: node linkType: hard -"@types/hast@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/hast@npm:3.0.4" - dependencies: - "@types/unist": "*" - checksum: 7a973e8d16fcdf3936090fa2280f408fb2b6a4f13b42edeb5fbd614efe042b82eac68e298e556d50f6b4ad585a3a93c353e9c826feccdc77af59de8dd400d044 - languageName: node - linkType: hard - "@types/html-minifier-terser@npm:^5.0.0": version: 5.1.2 resolution: "@types/html-minifier-terser@npm:5.1.2" @@ -8050,7 +8010,7 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:*, @types/lodash@npm:^4.14.167": +"@types/lodash@npm:*": version: 4.17.13 resolution: "@types/lodash@npm:4.17.13" checksum: d0bf8fbd950be71946e0076b30fd40d492293baea75f05931b6b5b906fd62583708c6229abdb95b30205ad24ce1ed2f48bc9d419364f682320edd03405cc0c7e @@ -8255,7 +8215,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^16.8.0 || ^17.0.0 || ^18.0.0": +"@types/react@npm:*": version: 18.3.12 resolution: "@types/react@npm:18.3.12" dependencies: @@ -8418,13 +8378,6 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:*, @types/unist@npm:^3.0.0": - version: 3.0.3 - resolution: "@types/unist@npm:3.0.3" - checksum: 96e6453da9e075aaef1dc22482463898198acdc1eeb99b465e65e34303e2ec1e3b1ed4469a9118275ec284dc98019f63c3f5d49422f0e4ac707e5ab90fb3b71a - languageName: node - linkType: hard - "@types/uuid@npm:^9.0.1": version: 9.0.8 resolution: "@types/uuid@npm:9.0.8" @@ -8726,7 +8679,7 @@ __metadata: languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": +"@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 @@ -11161,6 +11114,15 @@ __metadata: languageName: node linkType: hard +"better-opn@npm:^3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: ^8.0.4 + checksum: 1471552fa7f733561e7f49e812be074b421153006ca744de985fb6d38939807959fc5fe9cb819cf09f864782e294704fd3b31711ea14c115baf3330a2f1135de + languageName: node + linkType: hard + "better-path-resolve@npm:1.0.0": version: 1.0.0 resolution: "better-path-resolve@npm:1.0.0" @@ -14877,7 +14839,7 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.0.0, es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.5.0": +"es-module-lexer@npm:^1.0.0, es-module-lexer@npm:^1.2.1": version: 1.5.4 resolution: "es-module-lexer@npm:1.5.4" checksum: a0cf04fb92d052647ac7d818d1913b98d3d3d0f5b9d88f0eafb993436e4c3e2c958599db68839d57f2dfa281fdf0f60e18d448eb78fc292c33c0f25635b6854f @@ -15021,34 +14983,34 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0": - version: 0.23.1 - resolution: "esbuild@npm:0.23.1" - dependencies: - "@esbuild/aix-ppc64": 0.23.1 - "@esbuild/android-arm": 0.23.1 - "@esbuild/android-arm64": 0.23.1 - "@esbuild/android-x64": 0.23.1 - "@esbuild/darwin-arm64": 0.23.1 - "@esbuild/darwin-x64": 0.23.1 - "@esbuild/freebsd-arm64": 0.23.1 - "@esbuild/freebsd-x64": 0.23.1 - "@esbuild/linux-arm": 0.23.1 - "@esbuild/linux-arm64": 0.23.1 - "@esbuild/linux-ia32": 0.23.1 - "@esbuild/linux-loong64": 0.23.1 - "@esbuild/linux-mips64el": 0.23.1 - "@esbuild/linux-ppc64": 0.23.1 - "@esbuild/linux-riscv64": 0.23.1 - "@esbuild/linux-s390x": 0.23.1 - "@esbuild/linux-x64": 0.23.1 - "@esbuild/netbsd-x64": 0.23.1 - "@esbuild/openbsd-arm64": 0.23.1 - "@esbuild/openbsd-x64": 0.23.1 - "@esbuild/sunos-x64": 0.23.1 - "@esbuild/win32-arm64": 0.23.1 - "@esbuild/win32-ia32": 0.23.1 - "@esbuild/win32-x64": 0.23.1 +"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0": + version: 0.24.0 + resolution: "esbuild@npm:0.24.0" + dependencies: + "@esbuild/aix-ppc64": 0.24.0 + "@esbuild/android-arm": 0.24.0 + "@esbuild/android-arm64": 0.24.0 + "@esbuild/android-x64": 0.24.0 + "@esbuild/darwin-arm64": 0.24.0 + "@esbuild/darwin-x64": 0.24.0 + "@esbuild/freebsd-arm64": 0.24.0 + "@esbuild/freebsd-x64": 0.24.0 + "@esbuild/linux-arm": 0.24.0 + "@esbuild/linux-arm64": 0.24.0 + "@esbuild/linux-ia32": 0.24.0 + "@esbuild/linux-loong64": 0.24.0 + "@esbuild/linux-mips64el": 0.24.0 + "@esbuild/linux-ppc64": 0.24.0 + "@esbuild/linux-riscv64": 0.24.0 + "@esbuild/linux-s390x": 0.24.0 + "@esbuild/linux-x64": 0.24.0 + "@esbuild/netbsd-x64": 0.24.0 + "@esbuild/openbsd-arm64": 0.24.0 + "@esbuild/openbsd-x64": 0.24.0 + "@esbuild/sunos-x64": 0.24.0 + "@esbuild/win32-arm64": 0.24.0 + "@esbuild/win32-ia32": 0.24.0 + "@esbuild/win32-x64": 0.24.0 dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -15100,7 +15062,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 0413c3b9257327fb598427688b7186ea335bf1693746fe5713cc93c95854d6388b8ed4ad643fddf5b5ace093f7dcd9038dd58e087bf2da1f04dfb4c5571660af + checksum: dd386d92a05c7eb03078480522cdd8b40c434777b5f08487c27971d30933ecaae3f08bd221958dd8f9c66214915cdc85f844283ca9bdbf8ee703d889ae526edd languageName: node linkType: hard @@ -15744,7 +15706,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.17.3, express@npm:^4.19.2": +"express@npm:^4.17.3": version: 4.21.1 resolution: "express@npm:4.21.1" dependencies: @@ -16367,7 +16329,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:11.2.0, fs-extra@npm:^11.0.0, fs-extra@npm:^11.1.0": +"fs-extra@npm:11.2.0, fs-extra@npm:^11.0.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" dependencies: @@ -16739,13 +16701,6 @@ __metadata: languageName: node linkType: hard -"github-slugger@npm:^2.0.0": - version: 2.0.0 - resolution: "github-slugger@npm:2.0.0" - checksum: 250375cde2058f21454872c2c79f72c4637340c30c51ff158ca4ec71cbc478f33d54477d787a662f9207aeb095a2060f155bc01f15329ba8a5fb6698e0fc81f8 - languageName: node - linkType: hard - "github-username@npm:^6.0.0": version: 6.0.0 resolution: "github-username@npm:6.0.0" @@ -17347,33 +17302,6 @@ __metadata: languageName: node linkType: hard -"hast-util-heading-rank@npm:^3.0.0": - version: 3.0.0 - resolution: "hast-util-heading-rank@npm:3.0.0" - dependencies: - "@types/hast": ^3.0.0 - checksum: e5ce4ec9e8017b24ab72702fa0dd401ec6eaf32574120d71c2aa4e8e0f43829dba2e291f49d305a47e8d65b82a9c5adad7985385dc5bc8370f8cec7c8f9313d3 - languageName: node - linkType: hard - -"hast-util-is-element@npm:^3.0.0": - version: 3.0.0 - resolution: "hast-util-is-element@npm:3.0.0" - dependencies: - "@types/hast": ^3.0.0 - checksum: 82569a420eda5877c52fdbbdbe26675f012c02d70813dfd19acffdee328e42e4bd0b7ae34454cfcbcb932b2bedbd7ddc119f943a0cfb234120f9456d6c0c4331 - languageName: node - linkType: hard - -"hast-util-to-string@npm:^3.0.0": - version: 3.0.1 - resolution: "hast-util-to-string@npm:3.0.1" - dependencies: - "@types/hast": ^3.0.0 - checksum: 556f3cb118fc09e3a6cd149ee4b4056a49028a3858a7d37617e4c6d2c9c5e2336d5fb87eb5f41211b1977a964c705aa70e419464c12debc1959ed03fdad5bed6 - languageName: node - linkType: hard - "hdr-histogram-js@npm:^2.0.1": version: 2.0.3 resolution: "hdr-histogram-js@npm:2.0.3" @@ -18175,13 +18103,6 @@ __metadata: languageName: node linkType: hard -"is-absolute-url@npm:^4.0.0": - version: 4.0.1 - resolution: "is-absolute-url@npm:4.0.1" - checksum: de172a718439982a54477fdae55f21be69ec0e6a4b205db5484975d2f4ee749851fd46c28f3790dfc51a274c2ed1d0f8457b6d1fff02ab829069fd9cc761e48c - languageName: node - linkType: hard - "is-accessor-descriptor@npm:^1.0.1": version: 1.0.1 resolution: "is-accessor-descriptor@npm:1.0.1" @@ -19084,6 +19005,13 @@ __metadata: languageName: node linkType: hard +"jsdoc-type-pratt-parser@npm:^4.0.0": + version: 4.1.0 + resolution: "jsdoc-type-pratt-parser@npm:4.1.0" + checksum: e7642a508b090b1bdf17775383000ed71013c38e1231c1e576e5374636e8baf7c3fae8bf0252f5e1d3397d95efd56e8c8a5dd1a0de76d05d1499cbcb3c325bc3 + languageName: node + linkType: hard + "jsdom@npm:24.0.0": version: 24.0.0 resolution: "jsdom@npm:24.0.0" @@ -20442,15 +20370,6 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^7.4.5": - version: 7.6.1 - resolution: "markdown-to-jsx@npm:7.6.1" - peerDependencies: - react: ">= 0.14.0" - checksum: 9ab398fa79a8f00736fffc4caeac13ade1d33f82efd398e98dd61935fb5248d334a33390a2a4cc7c3890840686d58959792f0f5b969044e4cc9971be27bfa399 - languageName: node - linkType: hard - "marked@npm:4.0.10": version: 4.0.10 resolution: "marked@npm:4.0.10" @@ -22076,7 +21995,7 @@ __metadata: languageName: node linkType: hard -"open@npm:^8.0.2, open@npm:^8.0.9, open@npm:^8.4.0": +"open@npm:^8.0.2, open@npm:^8.0.4, open@npm:^8.0.9, open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" dependencies: @@ -22921,6 +22840,7 @@ __metadata: "@justeattakeaway/pie-cookie-banner": 1.2.0 "@justeattakeaway/pie-css": 0.13.1 "@justeattakeaway/pie-divider": 1.0.0 + "@justeattakeaway/pie-foo": 0.0.0 "@justeattakeaway/pie-form-label": 0.14.4 "@justeattakeaway/pie-icon-button": 1.0.0 "@justeattakeaway/pie-icons-configs": 4.5.1 @@ -22939,24 +22859,24 @@ __metadata: "@justeattakeaway/pie-textarea": 0.13.0 "@justeattakeaway/pie-toast": 0.5.0 "@justeattakeaway/pie-toast-provider": 0.0.0 - "@storybook/addon-a11y": 8.3.0 - "@storybook/addon-designs": 8.0.3 - "@storybook/addon-essentials": 8.3.0 - "@storybook/addon-links": 8.3.0 - "@storybook/blocks": 8.3.0 - "@storybook/components": 8.3.0 - "@storybook/manager-api": 8.3.0 - "@storybook/preview-api": 8.3.0 - "@storybook/theming": 8.3.0 - "@storybook/types": 8.3.0 - "@storybook/web-components": 8.3.0 - "@storybook/web-components-vite": 8.3.0 + "@storybook/addon-a11y": 8.4.5 + "@storybook/addon-designs": 8.0.4 + "@storybook/addon-essentials": 8.4.5 + "@storybook/addon-links": 8.4.5 + "@storybook/blocks": 8.4.5 + "@storybook/components": 8.4.5 + "@storybook/manager-api": 8.4.5 + "@storybook/preview-api": 8.4.5 + "@storybook/theming": 8.4.5 + "@storybook/types": 8.4.5 + "@storybook/web-components": 8.4.5 + "@storybook/web-components-vite": 8.4.5 "@types/dompurify": 3.0.5 dompurify: 3.1.3 react: 18.3.1 react-dom: 18.3.1 serve: 14.2.0 - storybook: 8.3.0 + storybook: 8.4.5 storybook-dark-mode: 4.0.2 languageName: unknown linkType: soft @@ -25041,16 +24961,6 @@ __metadata: languageName: node linkType: hard -"react-colorful@npm:^5.1.2": - version: 5.6.1 - resolution: "react-colorful@npm:5.6.1" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: e432b7cb0df57e8f0bcdc3b012d2e93fcbcb6092c9e0f85654788d5ebfc4442536d8cc35b2418061ba3c4afb8b7788cc101c606d86a1732407921de7a9244c8d - languageName: node - linkType: hard - "react-dom@npm:17.0.2": version: 17.0.2 resolution: "react-dom@npm:17.0.2" @@ -25473,33 +25383,6 @@ __metadata: languageName: node linkType: hard -"rehype-external-links@npm:^3.0.0": - version: 3.0.0 - resolution: "rehype-external-links@npm:3.0.0" - dependencies: - "@types/hast": ^3.0.0 - "@ungap/structured-clone": ^1.0.0 - hast-util-is-element: ^3.0.0 - is-absolute-url: ^4.0.0 - space-separated-tokens: ^2.0.0 - unist-util-visit: ^5.0.0 - checksum: f776f306a2698a67b03665280fcc00448a5bf59b997d83fbb70fc3d71acff2c3025c70ee1840f48ca7dff209217ebe9adad085dc7caf9e5907badf8b104898b6 - languageName: node - linkType: hard - -"rehype-slug@npm:^6.0.0": - version: 6.0.0 - resolution: "rehype-slug@npm:6.0.0" - dependencies: - "@types/hast": ^3.0.0 - github-slugger: ^2.0.0 - hast-util-heading-rank: ^3.0.0 - hast-util-to-string: ^3.0.0 - unist-util-visit: ^5.0.0 - checksum: 0e13ec558eb142d14a6daeab21bbef7c9230bfabec45987e15a24283650226eae3898ad162b8cb29ee39a8bce536bcc013eeab7dc6faa0295b0e91612a8c9f6e - languageName: node - linkType: hard - "relateurl@npm:^0.2.7": version: 0.2.7 resolution: "relateurl@npm:0.2.7" @@ -26965,13 +26848,6 @@ __metadata: languageName: node linkType: hard -"space-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "space-separated-tokens@npm:2.0.2" - checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 - languageName: node - linkType: hard - "spawndamnit@npm:^3.0.1": version: 3.0.1 resolution: "spawndamnit@npm:3.0.1" @@ -27193,16 +27069,21 @@ __metadata: languageName: node linkType: hard -"storybook@npm:8.3.0": - version: 8.3.0 - resolution: "storybook@npm:8.3.0" +"storybook@npm:8.4.5": + version: 8.4.5 + resolution: "storybook@npm:8.4.5" dependencies: - "@storybook/core": 8.3.0 + "@storybook/core": 8.4.5 + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true bin: getstorybook: ./bin/index.cjs sb: ./bin/index.cjs storybook: ./bin/index.cjs - checksum: 07fcbfaeed410963d5b4e90a3b5dd6d9c360595e19ee6a8cd23a50cda1fea0c8c3b8a6627a1edfac16cdf97f2a3130d67175221a08385316c84b8770d731ffb2 + checksum: 3495183749b760da077b2ede7607884c62f6707412e91defbe20328b275b78528fcef350453ad95642a52b97eded50f2c5374e94fb422a3b39587de364d87ee8 languageName: node linkType: hard @@ -27878,15 +27759,6 @@ __metadata: languageName: node linkType: hard -"telejson@npm:^7.2.0": - version: 7.2.0 - resolution: "telejson@npm:7.2.0" - dependencies: - memoizerific: ^1.11.3 - checksum: 55a3380c9ff3c5ad84581bb6bda28fc33c6b7c4a0c466894637da687639b8db0d21b0ff4c1bc1a7a92ae6b70662549d09e7b9e8b1ec334b2ef93078762ecdfb9 - languageName: node - linkType: hard - "temp@npm:^0.9.0": version: 0.9.4 resolution: "temp@npm:0.9.4" @@ -28947,36 +28819,6 @@ __metadata: languageName: node linkType: hard -"unist-util-is@npm:^6.0.0": - version: 6.0.0 - resolution: "unist-util-is@npm:6.0.0" - dependencies: - "@types/unist": ^3.0.0 - checksum: f630a925126594af9993b091cf807b86811371e465b5049a6283e08537d3e6ba0f7e248e1e7dab52cfe33f9002606acef093441137181b327f6fe504884b20e2 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^6.0.0": - version: 6.0.1 - resolution: "unist-util-visit-parents@npm:6.0.1" - dependencies: - "@types/unist": ^3.0.0 - unist-util-is: ^6.0.0 - checksum: 08927647c579f63b91aafcbec9966dc4a7d0af1e5e26fc69f4e3e6a01215084835a2321b06f3cbe7bf7914a852830fc1439f0fc3d7153d8804ac3ef851ddfa20 - languageName: node - linkType: hard - -"unist-util-visit@npm:^5.0.0": - version: 5.0.0 - resolution: "unist-util-visit@npm:5.0.0" - dependencies: - "@types/unist": ^3.0.0 - unist-util-is: ^6.0.0 - unist-util-visit-parents: ^6.0.0 - checksum: 9ec42e618e7e5d0202f3c191cd30791b51641285732767ee2e6bcd035931032e3c1b29093f4d7fd0c79175bbc1f26f24f26ee49770d32be76f8730a652a857e6 - languageName: node - linkType: hard - "universal-user-agent@npm:^6.0.0": version: 6.0.1 resolution: "universal-user-agent@npm:6.0.1"