diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d0d614a38..5311ff181 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -25,6 +25,7 @@ updates: lint: patterns: - '@eslint/*' + - '@trivago/prettier-plugin-*' - '@types/*' - 'eslint' - 'eslint-*' diff --git a/.prettierrc b/.prettierrc index feb652799..9643b5422 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,8 @@ { + "importOrder": ["", "", "^#(.*)$", "^[./]"], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true, + "plugins": ["@trivago/prettier-plugin-sort-imports"], "printWidth": 100, "quoteProps": "consistent", "semi": true, diff --git a/.storybook/main.ts b/.storybook/main.ts index 120d32e48..5de8735aa 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,6 +1,6 @@ import { type StorybookConfig } from '@storybook/react-vite'; import preserveDirectives from 'rollup-preserve-directives'; -import { mergeConfig, type InlineConfig } from 'vite'; +import { type InlineConfig, mergeConfig } from 'vite'; import tsConfigPaths from 'vite-tsconfig-paths'; const config: StorybookConfig = { diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index 187f08d07..b8cf1a4e6 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -1,8 +1,9 @@ -import './storybook.scss'; import { type Preview } from '@storybook/react-vite'; import { Col, Container, Row } from '#components/layout/index.js'; +import './storybook.scss'; + const preview: Preview = { decorators: (Story, { parameters }) => parameters.width === false ? ( diff --git a/eslint.config.js b/eslint.config.js index ca3f26149..a06de6985 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -2,12 +2,12 @@ import { join } from 'node:path'; import { includeIgnoreFile } from '@eslint/compat'; import eslint from '@eslint/js'; -import { defineConfig, globalIgnores } from 'eslint/config'; import configPrettier from 'eslint-config-prettier/flat'; -import pluginImport from 'eslint-plugin-import'; import pluginJsxA11y from 'eslint-plugin-jsx-a11y'; +import pluginNodeImport from 'eslint-plugin-node-import'; import pluginReact from 'eslint-plugin-react'; import pluginReactHooks from 'eslint-plugin-react-hooks'; +import { defineConfig, globalIgnores } from 'eslint/config'; import globals from 'globals'; import pluginTypeScript from 'typescript-eslint'; @@ -19,9 +19,8 @@ export default defineConfig([ files: ['**/*.{js,mjs,ts,tsx}'], extends: [ eslint.configs.recommended, - pluginImport.flatConfigs.recommended, - pluginImport.flatConfigs.typescript, pluginTypeScript.configs.recommended, + pluginNodeImport.configs['flat/recommended'], configPrettier, ], languageOptions: { @@ -33,30 +32,6 @@ export default defineConfig([ }, }, rules: { - // Turn off rules that are handled by TypeScript - // https://typescript-eslint.io/troubleshooting/typed-linting/performance/#eslint-plugin-import - 'import/default': 'off', - 'import/named': 'off', - 'import/namespace': 'off', - 'import/no-cycle': 'off', - 'import/no-deprecated': 'off', - 'import/no-named-as-default': 'off', - 'import/no-named-as-default-member': 'off', - 'import/no-unresolved': 'off', - 'import/no-unused-modules': 'off', - - // Always import Node.js packages from `node:*` - 'import/enforce-node-protocol-usage': ['error', 'always'], - - // Check import or require statements are A-Z ordered - 'import/order': [ - 'error', - { - 'alphabetize': { order: 'asc' }, - 'newlines-between': 'always', - }, - ], - // Prefer rules that are type aware 'no-redeclare': 'off', 'no-undef': 'off', @@ -71,12 +46,6 @@ export default defineConfig([ }, ], }, - settings: { - 'import/resolver': { - node: true, - typescript: true, - }, - }, }, { files: ['**/*.{ts,tsx}'], diff --git a/package.json b/package.json index 6babccecf..dccd30014 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", - "@eslint/compat": "^2.0.3", + "@eslint/compat": "^2.0.5", "@eslint/js": "^9.39.4", "@rollup/plugin-babel": "^7.0.0", "@rollup/plugin-commonjs": "^29.0.2", @@ -80,11 +80,12 @@ "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", + "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/eslint": "^9.6.1", "@types/eslint-plugin-jsx-a11y": "^6.10.1", "@types/jest": "^30.0.0", "@types/jest-axe": "^3.5.9", - "@types/node": "^24.12.0", + "@types/node": "^24.12.2", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "babel-jest": "^30.3.0", @@ -94,17 +95,17 @@ "eslint": "^9.39.4", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.4", - "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-node-import": "^1.2.0", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.1", - "globals": "^17.3.0", + "globals": "^17.5.0", "jest": "^30.3.0", "jest-axe": "^10.0.0", "jest-environment-jsdom": "^30.3.0", "nhsuk-frontend": "^10.3.1", "outdent": "^0.8.0", - "prettier": "^3.8.0", + "prettier": "^3.8.3", "react": "^19.2.5", "react-dom": "^19.2.5", "rollup": "^4.60.0", @@ -113,7 +114,7 @@ "storybook": "^10.2.14", "tslib": "^2.8.1", "typescript": "^6.0.2", - "typescript-eslint": "^8.58.0", + "typescript-eslint": "^8.58.2", "vite": "^7.3.2", "vite-tsconfig-paths": "^6.1.1" }, diff --git a/src/components/content-presentation/details/Details.tsx b/src/components/content-presentation/details/Details.tsx index 5fd74d94c..0ce3aab59 100644 --- a/src/components/content-presentation/details/Details.tsx +++ b/src/components/content-presentation/details/Details.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, forwardRef } from 'react'; export interface DetailsProps extends ComponentPropsWithoutRef<'details'> { expander?: boolean; diff --git a/src/components/content-presentation/details/__tests__/Details.test.tsx b/src/components/content-presentation/details/__tests__/Details.test.tsx index f4169e571..cca0bd479 100644 --- a/src/components/content-presentation/details/__tests__/Details.test.tsx +++ b/src/components/content-presentation/details/__tests__/Details.test.tsx @@ -1,10 +1,10 @@ import { render } from '@testing-library/react'; import { createRef } from 'react'; -import { Details } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Details } from '..'; + describe('Details', () => { it('matches snapshot', async () => { const { container } = await renderClient(
, { diff --git a/src/components/content-presentation/do-and-dont-list/DoAndDontList.tsx b/src/components/content-presentation/do-and-dont-list/DoAndDontList.tsx index 3b56849d7..fb6979bf1 100644 --- a/src/components/content-presentation/do-and-dont-list/DoAndDontList.tsx +++ b/src/components/content-presentation/do-and-dont-list/DoAndDontList.tsx @@ -1,13 +1,13 @@ 'use client'; import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; + +import { Heading, type HeadingProps } from '#components/typography/Heading.js'; import { DoAndDontListContext, type DoAndDontListType } from './DoAndDontListContext.js'; import { DoAndDontListItem } from './components/index.js'; -import { Heading, type HeadingProps } from '#components/typography/Heading.js'; - export interface DoAndDontListProps extends ComponentPropsWithoutRef<'div'>, Pick { listType: DoAndDontListType; diff --git a/src/components/content-presentation/do-and-dont-list/__tests__/DoAndDontList.test.tsx b/src/components/content-presentation/do-and-dont-list/__tests__/DoAndDontList.test.tsx index 19dd00ab5..f3a5536c4 100644 --- a/src/components/content-presentation/do-and-dont-list/__tests__/DoAndDontList.test.tsx +++ b/src/components/content-presentation/do-and-dont-list/__tests__/DoAndDontList.test.tsx @@ -1,10 +1,10 @@ import { render } from '@testing-library/react'; import { createRef } from 'react'; -import { DoAndDontList } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { DoAndDontList } from '..'; + describe('DoAndDontList', () => { describe('list type "do"', () => { it('matches snapshot', async () => { diff --git a/src/components/content-presentation/do-and-dont-list/components/DoAndDontListItem.tsx b/src/components/content-presentation/do-and-dont-list/components/DoAndDontListItem.tsx index 08fe80655..116d81939 100644 --- a/src/components/content-presentation/do-and-dont-list/components/DoAndDontListItem.tsx +++ b/src/components/content-presentation/do-and-dont-list/components/DoAndDontListItem.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useContext, type ComponentPropsWithoutRef, type FC, type ReactNode } from 'react'; +import { type ComponentPropsWithoutRef, type FC, type ReactNode, useContext } from 'react'; import { CrossIcon, TickIcon } from '../../icons/index.js'; import { DoAndDontListContext, type DoAndDontListType } from '../DoAndDontListContext.js'; diff --git a/src/components/content-presentation/hero/Hero.tsx b/src/components/content-presentation/hero/Hero.tsx index 885bcda80..bf08c0d95 100644 --- a/src/components/content-presentation/hero/Hero.tsx +++ b/src/components/content-presentation/hero/Hero.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, forwardRef } from 'react'; import { Col, Container, Row } from '#components/layout/index.js'; import { Heading, type HeadingProps } from '#components/typography/Heading.js'; diff --git a/src/components/content-presentation/images/Images.tsx b/src/components/content-presentation/images/Images.tsx index afbcf5f04..ff0352994 100644 --- a/src/components/content-presentation/images/Images.tsx +++ b/src/components/content-presentation/images/Images.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; export interface ImagesProps extends ComponentPropsWithoutRef<'img'> { caption?: string; diff --git a/src/components/content-presentation/inset-text/InsetText.tsx b/src/components/content-presentation/inset-text/InsetText.tsx index 40446b65c..a46266280 100644 --- a/src/components/content-presentation/inset-text/InsetText.tsx +++ b/src/components/content-presentation/inset-text/InsetText.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; export type InsetTextProps = ComponentPropsWithoutRef<'div'>; diff --git a/src/components/content-presentation/notification-banner/NotificationBanner.tsx b/src/components/content-presentation/notification-banner/NotificationBanner.tsx index bbcfdbead..0fb0969d5 100644 --- a/src/components/content-presentation/notification-banner/NotificationBanner.tsx +++ b/src/components/content-presentation/notification-banner/NotificationBanner.tsx @@ -4,22 +4,22 @@ import classNames from 'classnames'; import { type NotificationBanner as NotificationBannerModule } from 'nhsuk-frontend'; import { Children, + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; +import { childIsOfComponentType } from '#util/types/TypeGuards.js'; + import { NotificationBannerHeading, NotificationBannerLink, NotificationBannerTitle, } from './components/index.js'; -import { childIsOfComponentType } from '#util/types/TypeGuards.js'; - export interface NotificationBannerProps extends ComponentPropsWithoutRef<'div'> { success?: boolean; disableAutoFocus?: boolean; diff --git a/src/components/content-presentation/panel/Panel.tsx b/src/components/content-presentation/panel/Panel.tsx index 20de10ff5..c28d0861f 100644 --- a/src/components/content-presentation/panel/Panel.tsx +++ b/src/components/content-presentation/panel/Panel.tsx @@ -1,10 +1,10 @@ import classNames from 'classnames'; -import { Children, forwardRef, type ComponentPropsWithoutRef } from 'react'; - -import { PanelTitle } from './components/index.js'; +import { Children, type ComponentPropsWithoutRef, forwardRef } from 'react'; import { childIsOfComponentType } from '#util/types/TypeGuards.js'; +import { PanelTitle } from './components/index.js'; + export interface PanelProps extends ComponentPropsWithoutRef<'div'> { interruption?: boolean; } diff --git a/src/components/content-presentation/panel/__tests__/Panel.test.tsx b/src/components/content-presentation/panel/__tests__/Panel.test.tsx index 9ae254415..644d420ae 100644 --- a/src/components/content-presentation/panel/__tests__/Panel.test.tsx +++ b/src/components/content-presentation/panel/__tests__/Panel.test.tsx @@ -1,10 +1,10 @@ import { render } from '@testing-library/react'; import { createRef } from 'react'; -import { Panel, type PanelTitleProps } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Panel, type PanelTitleProps } from '..'; + describe('Panel', () => { const Example = (props: Parameters[0]) => ( diff --git a/src/components/content-presentation/summary-list/SummaryList.tsx b/src/components/content-presentation/summary-list/SummaryList.tsx index aa93f36bb..76a86430d 100644 --- a/src/components/content-presentation/summary-list/SummaryList.tsx +++ b/src/components/content-presentation/summary-list/SummaryList.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; import { SummaryListAction, diff --git a/src/components/content-presentation/summary-list/__tests__/SummaryList.test.tsx b/src/components/content-presentation/summary-list/__tests__/SummaryList.test.tsx index 4e0577417..22c11181e 100644 --- a/src/components/content-presentation/summary-list/__tests__/SummaryList.test.tsx +++ b/src/components/content-presentation/summary-list/__tests__/SummaryList.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { createRef, type ComponentProps } from 'react'; +import { type ComponentProps, createRef } from 'react'; import { SummaryList } from '..'; diff --git a/src/components/content-presentation/summary-list/components/SummaryListAction.tsx b/src/components/content-presentation/summary-list/components/SummaryListAction.tsx index b9f599ab8..f39563a77 100644 --- a/src/components/content-presentation/summary-list/components/SummaryListAction.tsx +++ b/src/components/content-presentation/summary-list/components/SummaryListAction.tsx @@ -1,4 +1,4 @@ -import { forwardRef, type ReactElement } from 'react'; +import { type ReactElement, forwardRef } from 'react'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/components/content-presentation/summary-list/components/SummaryListRow.tsx b/src/components/content-presentation/summary-list/components/SummaryListRow.tsx index 76555ac4b..bbca4a696 100644 --- a/src/components/content-presentation/summary-list/components/SummaryListRow.tsx +++ b/src/components/content-presentation/summary-list/components/SummaryListRow.tsx @@ -1,10 +1,10 @@ import classNames from 'classnames'; import { Children, type ComponentPropsWithoutRef, type FC } from 'react'; -import { SummaryListAction } from './SummaryListAction.js'; - import { childIsOfComponentType } from '#util/types/index.js'; +import { SummaryListAction } from './SummaryListAction.js'; + export interface SummaryListRowProps extends ComponentPropsWithoutRef<'div'> { noBorder?: boolean; } diff --git a/src/components/content-presentation/table/Table.tsx b/src/components/content-presentation/table/Table.tsx index 21dd9d372..de5948ac2 100644 --- a/src/components/content-presentation/table/Table.tsx +++ b/src/components/content-presentation/table/Table.tsx @@ -2,26 +2,26 @@ import classNames from 'classnames'; import { + type ComponentPropsWithoutRef, + type ReactNode, forwardRef, useMemo, useState, - type ComponentPropsWithoutRef, - type ReactNode, } from 'react'; -import { TableContext, type ITableContext } from './TableContext.js'; +import { type Card as _Card } from '#components/navigation/card/index.js'; + +import { type ITableContext, TableContext } from './TableContext.js'; import { TableBody, TableCaption, + type TableCaptionProps, TableCell, TableContainer, TableHead, TableRow, - type TableCaptionProps, } from './components/index.js'; -import { type Card as _Card } from '#components/navigation/card/index.js'; - export interface TableProps extends ComponentPropsWithoutRef<'table'> { firstCellIsHeader?: boolean; responsive?: boolean; diff --git a/src/components/content-presentation/table/TableContext.ts b/src/components/content-presentation/table/TableContext.ts index 779d58c05..d8de8c5d4 100644 --- a/src/components/content-presentation/table/TableContext.ts +++ b/src/components/content-presentation/table/TableContext.ts @@ -1,6 +1,6 @@ 'use client'; -import { createContext, type ReactNode } from 'react'; +import { type ReactNode, createContext } from 'react'; export interface ITableContext { firstCellIsHeader: boolean; diff --git a/src/components/content-presentation/table/TableHelpers.ts b/src/components/content-presentation/table/TableHelpers.ts index 374ec17e1..77d7b840c 100644 --- a/src/components/content-presentation/table/TableHelpers.ts +++ b/src/components/content-presentation/table/TableHelpers.ts @@ -1,9 +1,9 @@ import { Children, type ReactElement, type ReactNode } from 'react'; -import { TableCell, type TableCellProps } from './components/TableCell.js'; - import { childIsOfComponentType } from '#util/types/TypeGuards.js'; +import { TableCell, type TableCellProps } from './components/TableCell.js'; + export const isTableCell = ( child: ReactNode, ): child is ReactElement => { diff --git a/src/components/content-presentation/table/components/TableCell.tsx b/src/components/content-presentation/table/components/TableCell.tsx index 306bb7308..d824f5d13 100644 --- a/src/components/content-presentation/table/components/TableCell.tsx +++ b/src/components/content-presentation/table/components/TableCell.tsx @@ -1,13 +1,13 @@ 'use client'; import classNames from 'classnames'; -import { useContext, type ComponentPropsWithoutRef, type FC } from 'react'; - -import { TableContext, type ITableContext } from '../TableContext.js'; -import { TableSection, TableSectionContext } from '../TableSectionContext.js'; +import { type ComponentPropsWithoutRef, type FC, useContext } from 'react'; import { useDevWarning } from '#util/hooks/index.js'; +import { type ITableContext, TableContext } from '../TableContext.js'; +import { TableSection, TableSectionContext } from '../TableSectionContext.js'; + const CellOutsideOfSectionWarning = 'Table.Cell used outside of a Table.Head or Table.Body component. Unable to determine section type from context.'; diff --git a/src/components/content-presentation/table/components/TableContainer.tsx b/src/components/content-presentation/table/components/TableContainer.tsx index eb201da46..2f3a7f1fc 100644 --- a/src/components/content-presentation/table/components/TableContainer.tsx +++ b/src/components/content-presentation/table/components/TableContainer.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; export type TableContainerProps = ComponentPropsWithoutRef<'div'>; diff --git a/src/components/content-presentation/table/components/TableHead.tsx b/src/components/content-presentation/table/components/TableHead.tsx index fc1783871..910cdbcb8 100644 --- a/src/components/content-presentation/table/components/TableHead.tsx +++ b/src/components/content-presentation/table/components/TableHead.tsx @@ -1,9 +1,9 @@ 'use client'; import classNames from 'classnames'; -import { useContext, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, useContext } from 'react'; -import { TableContext, type ITableContext } from '../TableContext.js'; +import { type ITableContext, TableContext } from '../TableContext.js'; import { TableSection, TableSectionContext } from '../TableSectionContext.js'; export type TableHeadProps = ComponentPropsWithoutRef<'thead'>; diff --git a/src/components/content-presentation/table/components/TableRow.tsx b/src/components/content-presentation/table/components/TableRow.tsx index 6350e9435..3b5f707f0 100644 --- a/src/components/content-presentation/table/components/TableRow.tsx +++ b/src/components/content-presentation/table/components/TableRow.tsx @@ -3,11 +3,11 @@ import classNames from 'classnames'; import { Children, + type ComponentPropsWithoutRef, + type FC, cloneElement, useContext, useEffect, - type ComponentPropsWithoutRef, - type FC, } from 'react'; import { TableContext } from '../TableContext.js'; diff --git a/src/components/content-presentation/table/components/__tests__/Table.test.tsx b/src/components/content-presentation/table/components/__tests__/Table.test.tsx index 7d50efba7..1ccff3af3 100644 --- a/src/components/content-presentation/table/components/__tests__/Table.test.tsx +++ b/src/components/content-presentation/table/components/__tests__/Table.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { Table } from '../..'; - import { renderClient, renderServer } from '#util/components'; +import { Table } from '../..'; + describe('Table', () => { const Example = (props: Parameters[0]) => ( diff --git a/src/components/content-presentation/table/components/__tests__/TableCaption.test.tsx b/src/components/content-presentation/table/components/__tests__/TableCaption.test.tsx index bf0d22356..8be13bf35 100644 --- a/src/components/content-presentation/table/components/__tests__/TableCaption.test.tsx +++ b/src/components/content-presentation/table/components/__tests__/TableCaption.test.tsx @@ -1,10 +1,10 @@ import { render } from '@testing-library/react'; +import { type NHSUKSize } from '#util/types/NHSUKTypes.js'; + import { TableCaption } from '..'; import { Table } from '../..'; -import { type NHSUKSize } from '#util/types/NHSUKTypes.js'; - describe('TableCaption', () => { it('matches snapshot', () => { const { container } = render( diff --git a/src/components/content-presentation/table/components/__tests__/TableRow.test.tsx b/src/components/content-presentation/table/components/__tests__/TableRow.test.tsx index 2cddf9187..4d9667b45 100644 --- a/src/components/content-presentation/table/components/__tests__/TableRow.test.tsx +++ b/src/components/content-presentation/table/components/__tests__/TableRow.test.tsx @@ -1,7 +1,7 @@ import { render } from '@testing-library/react'; import { TableCell, TableRow } from '..'; -import { TableContext, TableSection, TableSectionContext, type ITableContext } from '../..'; +import { type ITableContext, TableContext, TableSection, TableSectionContext } from '../..'; const assertCellText = (container: HTMLElement, cellNumber: number, text: string) => { expect(container.querySelector(`[data-test="cell-${cellNumber}"]`)).toHaveTextContent(text); diff --git a/src/components/content-presentation/tabs/Tabs.tsx b/src/components/content-presentation/tabs/Tabs.tsx index d971bb7f6..856b57ee6 100644 --- a/src/components/content-presentation/tabs/Tabs.tsx +++ b/src/components/content-presentation/tabs/Tabs.tsx @@ -3,13 +3,13 @@ import classNames from 'classnames'; import { type Tabs as TabsModule } from 'nhsuk-frontend'; import { + type ComponentPropsWithoutRef, + type FC, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, - type FC, } from 'react'; import { Heading, type HeadingProps } from '#components/typography/Heading.js'; diff --git a/src/components/content-presentation/tabs/__tests__/Tabs.test.tsx b/src/components/content-presentation/tabs/__tests__/Tabs.test.tsx index 92c2bc8a6..3977f2797 100644 --- a/src/components/content-presentation/tabs/__tests__/Tabs.test.tsx +++ b/src/components/content-presentation/tabs/__tests__/Tabs.test.tsx @@ -1,10 +1,10 @@ import { render } from '@testing-library/react'; import { createRef } from 'react'; -import { Tabs, type TabsTitleProps } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Tabs, type TabsTitleProps } from '..'; + describe('Tabs', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/content-presentation/warning-callout/WarningCallout.tsx b/src/components/content-presentation/warning-callout/WarningCallout.tsx index 4efcf8844..276d339fe 100644 --- a/src/components/content-presentation/warning-callout/WarningCallout.tsx +++ b/src/components/content-presentation/warning-callout/WarningCallout.tsx @@ -1,4 +1,4 @@ -import { forwardRef, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, forwardRef } from 'react'; import { Card, CardHeading } from '#components/navigation/card/index.js'; import { type HeadingProps } from '#components/typography/Heading.js'; diff --git a/src/components/form-elements/button/Button.tsx b/src/components/form-elements/button/Button.tsx index 2faf14b61..7bcd24426 100644 --- a/src/components/form-elements/button/Button.tsx +++ b/src/components/form-elements/button/Button.tsx @@ -3,13 +3,13 @@ import classNames from 'classnames'; import { type Button as ButtonModule } from 'nhsuk-frontend'; import { + type ForwardedRef, + type MouseEvent, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ForwardedRef, - type MouseEvent, } from 'react'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/components/form-elements/button/__tests__/Button.test.tsx b/src/components/form-elements/button/__tests__/Button.test.tsx index f797ae57c..eccfa7ce5 100644 --- a/src/components/form-elements/button/__tests__/Button.test.tsx +++ b/src/components/form-elements/button/__tests__/Button.test.tsx @@ -1,9 +1,9 @@ -import { createRef, forwardRef, type ComponentProps, type Ref } from 'react'; - -import { Button } from '..'; +import { type ComponentProps, type Ref, createRef, forwardRef } from 'react'; import { renderClient, renderServer } from '#util/components'; +import { Button } from '..'; + const buttonTypes = [ { type: 'secondary', diff --git a/src/components/form-elements/character-count/CharacterCount.tsx b/src/components/form-elements/character-count/CharacterCount.tsx index f843127a6..4067ca4a2 100644 --- a/src/components/form-elements/character-count/CharacterCount.tsx +++ b/src/components/form-elements/character-count/CharacterCount.tsx @@ -6,12 +6,12 @@ import { type CharacterCountTranslations, } from 'nhsuk-frontend'; import { + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; import { FormGroup } from '#components/utils/index.js'; diff --git a/src/components/form-elements/character-count/__tests__/CharacterCount.test.tsx b/src/components/form-elements/character-count/__tests__/CharacterCount.test.tsx index 44122b23e..6301f429b 100644 --- a/src/components/form-elements/character-count/__tests__/CharacterCount.test.tsx +++ b/src/components/form-elements/character-count/__tests__/CharacterCount.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { CharacterCount } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { CharacterCount } from '..'; + describe('Character Count', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/form-elements/checkboxes/Checkboxes.tsx b/src/components/form-elements/checkboxes/Checkboxes.tsx index 9ec051930..7f77450a2 100644 --- a/src/components/form-elements/checkboxes/Checkboxes.tsx +++ b/src/components/form-elements/checkboxes/Checkboxes.tsx @@ -3,21 +3,21 @@ import classNames from 'classnames'; import { type Checkboxes as CheckboxesModule } from 'nhsuk-frontend'; import { + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; -import { CheckboxesContext, type ICheckboxesContext } from './CheckboxesContext.js'; -import { CheckboxesDivider, CheckboxesItem } from './components/index.js'; - import { FormGroup } from '#components/utils/index.js'; import { generateRandomName } from '#util/tools/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; +import { CheckboxesContext, type ICheckboxesContext } from './CheckboxesContext.js'; +import { CheckboxesDivider, CheckboxesItem } from './components/index.js'; + export interface CheckboxesElementProps extends ComponentPropsWithoutRef<'div'> { idPrefix?: string; small?: boolean; diff --git a/src/components/form-elements/checkboxes/__tests__/Checkboxes.test.tsx b/src/components/form-elements/checkboxes/__tests__/Checkboxes.test.tsx index c7a511353..da496ffe4 100644 --- a/src/components/form-elements/checkboxes/__tests__/Checkboxes.test.tsx +++ b/src/components/form-elements/checkboxes/__tests__/Checkboxes.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { Checkboxes } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Checkboxes } from '..'; + describe('Checkboxes', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/form-elements/checkboxes/components/CheckboxesItem.tsx b/src/components/form-elements/checkboxes/components/CheckboxesItem.tsx index bb7721a8e..fec9fa3cf 100644 --- a/src/components/form-elements/checkboxes/components/CheckboxesItem.tsx +++ b/src/components/form-elements/checkboxes/components/CheckboxesItem.tsx @@ -2,21 +2,21 @@ import classNames from 'classnames'; import { + type ComponentPropsWithRef, + type ComponentPropsWithoutRef, + type ReactNode, forwardRef, useContext, useEffect, useState, - type ComponentPropsWithRef, - type ComponentPropsWithoutRef, - type ReactNode, } from 'react'; -import { CheckboxesContext, type ICheckboxesContext } from '../CheckboxesContext.js'; - import { HintText } from '#components/form-elements/hint-text/index.js'; import { Label } from '#components/form-elements/label/index.js'; import { type ComponentPropsWithDataAttributes, type FormElementProps } from '#util/types/index.js'; +import { CheckboxesContext, type ICheckboxesContext } from '../CheckboxesContext.js'; + export interface CheckboxesItemElementProps extends ComponentPropsWithoutRef<'input'> { conditional?: ReactNode; forceShowConditional?: boolean; diff --git a/src/components/form-elements/date-input/DateInput.tsx b/src/components/form-elements/date-input/DateInput.tsx index 1acb23839..cb7bbb904 100644 --- a/src/components/form-elements/date-input/DateInput.tsx +++ b/src/components/form-elements/date-input/DateInput.tsx @@ -2,21 +2,21 @@ import classNames from 'classnames'; import { + type ChangeEvent, + type ComponentPropsWithoutRef, + type EventHandler, forwardRef, useImperativeHandle, useRef, useState, - type ChangeEvent, - type ComponentPropsWithoutRef, - type EventHandler, } from 'react'; -import { DateInputContext, type IDateInputContext } from './DateInputContext.js'; -import { DateInputDay, DateInputMonth, DateInputYear } from './components/index.js'; - import { FormGroup } from '#components/utils/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; +import { DateInputContext, type IDateInputContext } from './DateInputContext.js'; +import { DateInputDay, DateInputMonth, DateInputYear } from './components/index.js'; + export interface DateInputValue { day: string; month: string; diff --git a/src/components/form-elements/date-input/DateInputContext.ts b/src/components/form-elements/date-input/DateInputContext.ts index 0b2755d49..e58af9443 100644 --- a/src/components/form-elements/date-input/DateInputContext.ts +++ b/src/components/form-elements/date-input/DateInputContext.ts @@ -1,6 +1,6 @@ 'use client'; -import { createContext, type ChangeEvent, type ReactElement } from 'react'; +import { type ChangeEvent, type ReactElement, createContext } from 'react'; export interface IDateInputContext { id: string; diff --git a/src/components/form-elements/date-input/__tests__/DateInput.test.tsx b/src/components/form-elements/date-input/__tests__/DateInput.test.tsx index 23b76990d..0f28b70a1 100644 --- a/src/components/form-elements/date-input/__tests__/DateInput.test.tsx +++ b/src/components/form-elements/date-input/__tests__/DateInput.test.tsx @@ -1,10 +1,10 @@ import { fireEvent } from '@testing-library/react'; import { createRef } from 'react'; -import { DateInput, type DateInputChangeEvent } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { DateInput, type DateInputChangeEvent } from '..'; + describe('DateInput', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/form-elements/date-input/components/DateInputField.tsx b/src/components/form-elements/date-input/components/DateInputField.tsx index 0ca674f90..5fed6ccae 100644 --- a/src/components/form-elements/date-input/components/DateInputField.tsx +++ b/src/components/form-elements/date-input/components/DateInputField.tsx @@ -2,18 +2,18 @@ import classNames from 'classnames'; import { - forwardRef, - useContext, type ChangeEvent, type ComponentPropsWithoutRef, type ReactElement, + forwardRef, + useContext, } from 'react'; -import { DateInputContext, type IDateInputContext } from '../DateInputContext.js'; - import { Label } from '#components/form-elements/label/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; +import { DateInputContext, type IDateInputContext } from '../DateInputContext.js'; + export interface IndividualDateInputElementProps extends ComponentPropsWithoutRef<'input'> { error?: string | ReactElement | false; inputType: 'day' | 'month' | 'year'; diff --git a/src/components/form-elements/error-summary/ErrorSummary.tsx b/src/components/form-elements/error-summary/ErrorSummary.tsx index 7030689fa..9b3927aab 100644 --- a/src/components/form-elements/error-summary/ErrorSummary.tsx +++ b/src/components/form-elements/error-summary/ErrorSummary.tsx @@ -4,18 +4,18 @@ import classNames from 'classnames'; import { type ErrorSummary as ErrorSummaryModule } from 'nhsuk-frontend'; import { Children, + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; -import { ErrorSummaryList, ErrorSummaryListItem, ErrorSummaryTitle } from './components/index.js'; - import { childIsOfComponentType } from '#util/types/TypeGuards.js'; +import { ErrorSummaryList, ErrorSummaryListItem, ErrorSummaryTitle } from './components/index.js'; + export interface ErrorSummaryProps extends ComponentPropsWithoutRef<'div'> { disableAutoFocus?: boolean; } diff --git a/src/components/form-elements/error-summary/__tests__/ErrorSummary.test.tsx b/src/components/form-elements/error-summary/__tests__/ErrorSummary.test.tsx index 221be9a08..9d86e5d83 100644 --- a/src/components/form-elements/error-summary/__tests__/ErrorSummary.test.tsx +++ b/src/components/form-elements/error-summary/__tests__/ErrorSummary.test.tsx @@ -1,10 +1,10 @@ import { render } from '@testing-library/react'; import { createRef } from 'react'; -import { ErrorSummary } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { ErrorSummary } from '..'; + describe('ErrorSummary', () => { it('matches snapshot', async () => { const { container } = await renderClient(, { diff --git a/src/components/form-elements/file-upload/FileUpload.tsx b/src/components/form-elements/file-upload/FileUpload.tsx index ff0b7d73f..381a66e5e 100644 --- a/src/components/form-elements/file-upload/FileUpload.tsx +++ b/src/components/form-elements/file-upload/FileUpload.tsx @@ -3,12 +3,12 @@ import classNames from 'classnames'; import { type FileUpload as FileUploadModule, type FileUploadTranslations } from 'nhsuk-frontend'; import { + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; import { FormGroup } from '#components/utils/index.js'; diff --git a/src/components/form-elements/file-upload/__tests__/FileUpload.test.tsx b/src/components/form-elements/file-upload/__tests__/FileUpload.test.tsx index cda5ffd72..d5537cc13 100644 --- a/src/components/form-elements/file-upload/__tests__/FileUpload.test.tsx +++ b/src/components/form-elements/file-upload/__tests__/FileUpload.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { FileUpload } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { FileUpload } from '..'; + describe('FileUpload', () => { afterEach(() => { jest.restoreAllMocks(); diff --git a/src/components/form-elements/password-input/PasswordInput.tsx b/src/components/form-elements/password-input/PasswordInput.tsx index c0acf1a42..c22592d1e 100644 --- a/src/components/form-elements/password-input/PasswordInput.tsx +++ b/src/components/form-elements/password-input/PasswordInput.tsx @@ -6,14 +6,14 @@ import { type PasswordInputTranslations, } from 'nhsuk-frontend'; import { + type ComponentPropsWithRef, + type ComponentPropsWithoutRef, + type FC, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, - type ComponentPropsWithRef, - type FC, } from 'react'; import { Button } from '#components/form-elements/button/index.js'; diff --git a/src/components/form-elements/password-input/__tests__/PasswordInput.test.tsx b/src/components/form-elements/password-input/__tests__/PasswordInput.test.tsx index fd1820531..78ccffc08 100644 --- a/src/components/form-elements/password-input/__tests__/PasswordInput.test.tsx +++ b/src/components/form-elements/password-input/__tests__/PasswordInput.test.tsx @@ -1,10 +1,10 @@ import { createRef } from 'react'; -import { PasswordInput } from '..'; - import { renderClient, renderServer } from '#util/components'; import { type InputWidth } from '#util/types'; +import { PasswordInput } from '..'; + describe('PasswordInput', () => { afterEach(() => { jest.restoreAllMocks(); diff --git a/src/components/form-elements/radios/Radios.tsx b/src/components/form-elements/radios/Radios.tsx index 905e31ec9..07ff97cc1 100644 --- a/src/components/form-elements/radios/Radios.tsx +++ b/src/components/form-elements/radios/Radios.tsx @@ -3,21 +3,21 @@ import classNames from 'classnames'; import { type Radios as RadiosModule } from 'nhsuk-frontend'; import { + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; -import { RadiosContext, type IRadiosContext } from './RadiosContext.js'; -import { RadiosDivider, RadiosItem } from './components/index.js'; - import { FormGroup } from '#components/utils/index.js'; import { generateRandomName } from '#util/tools/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; +import { type IRadiosContext, RadiosContext } from './RadiosContext.js'; +import { RadiosDivider, RadiosItem } from './components/index.js'; + export interface RadiosElementProps extends ComponentPropsWithoutRef<'div'> { idPrefix?: string; inline?: boolean; diff --git a/src/components/form-elements/radios/__tests__/Radios.test.tsx b/src/components/form-elements/radios/__tests__/Radios.test.tsx index 2525bee4a..21e2e5f1e 100644 --- a/src/components/form-elements/radios/__tests__/Radios.test.tsx +++ b/src/components/form-elements/radios/__tests__/Radios.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { Radios } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Radios } from '..'; + describe('Radios', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/form-elements/radios/components/RadiosItem.tsx b/src/components/form-elements/radios/components/RadiosItem.tsx index 287006a41..242af651d 100644 --- a/src/components/form-elements/radios/components/RadiosItem.tsx +++ b/src/components/form-elements/radios/components/RadiosItem.tsx @@ -2,21 +2,21 @@ import classNames from 'classnames'; import { + type ComponentPropsWithRef, + type ComponentPropsWithoutRef, + type ReactNode, forwardRef, useContext, useEffect, useState, - type ComponentPropsWithRef, - type ComponentPropsWithoutRef, - type ReactNode, } from 'react'; -import { RadiosContext, type IRadiosContext } from '../RadiosContext.js'; - import { HintText } from '#components/form-elements/hint-text/index.js'; import { Label } from '#components/form-elements/label/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; +import { type IRadiosContext, RadiosContext } from '../RadiosContext.js'; + export interface RadiosItemElementProps extends ComponentPropsWithoutRef<'input'> { conditional?: ReactNode; forceShowConditional?: boolean; diff --git a/src/components/form-elements/select/Select.tsx b/src/components/form-elements/select/Select.tsx index ba998025c..45674f02a 100644 --- a/src/components/form-elements/select/Select.tsx +++ b/src/components/form-elements/select/Select.tsx @@ -1,7 +1,7 @@ 'use client'; import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, forwardRef } from 'react'; import { FormGroup } from '#components/utils/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; diff --git a/src/components/form-elements/select/__tests__/Select.test.tsx b/src/components/form-elements/select/__tests__/Select.test.tsx index 603143e5f..0c62a52ac 100644 --- a/src/components/form-elements/select/__tests__/Select.test.tsx +++ b/src/components/form-elements/select/__tests__/Select.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { Select } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Select } from '..'; + describe('Select', () => { afterEach(() => { jest.restoreAllMocks(); diff --git a/src/components/form-elements/text-input/TextInput.tsx b/src/components/form-elements/text-input/TextInput.tsx index 1f3a65eb0..51cda3d40 100644 --- a/src/components/form-elements/text-input/TextInput.tsx +++ b/src/components/form-elements/text-input/TextInput.tsx @@ -1,7 +1,7 @@ 'use client'; import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, forwardRef } from 'react'; import { FormGroup } from '#components/utils/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; diff --git a/src/components/form-elements/text-input/__tests__/TextInput.test.tsx b/src/components/form-elements/text-input/__tests__/TextInput.test.tsx index 7874d55c6..8b9bb7e1e 100644 --- a/src/components/form-elements/text-input/__tests__/TextInput.test.tsx +++ b/src/components/form-elements/text-input/__tests__/TextInput.test.tsx @@ -1,11 +1,11 @@ import { render } from '@testing-library/react'; import { createRef } from 'react'; -import { TextInput } from '..'; - import { renderClient, renderServer } from '#util/components'; import { type InputWidth } from '#util/types'; +import { TextInput } from '..'; + describe('TextInput', () => { afterEach(() => { jest.restoreAllMocks(); diff --git a/src/components/form-elements/textarea/Textarea.tsx b/src/components/form-elements/textarea/Textarea.tsx index fad9c3cf2..0dc14d3ca 100644 --- a/src/components/form-elements/textarea/Textarea.tsx +++ b/src/components/form-elements/textarea/Textarea.tsx @@ -1,7 +1,7 @@ 'use client'; import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; import { FormGroup } from '#components/utils/index.js'; import { type FormElementProps } from '#util/types/FormTypes.js'; diff --git a/src/components/form-elements/textarea/__tests__/Textarea.test.tsx b/src/components/form-elements/textarea/__tests__/Textarea.test.tsx index 978302fc2..2cf70bc85 100644 --- a/src/components/form-elements/textarea/__tests__/Textarea.test.tsx +++ b/src/components/form-elements/textarea/__tests__/Textarea.test.tsx @@ -1,9 +1,9 @@ import { createRef } from 'react'; -import { Textarea } from '..'; - import { renderClient, renderServer } from '#util/components'; +import { Textarea } from '..'; + describe('Textarea', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/navigation/action-link/__tests__/ActionLink.test.tsx b/src/components/navigation/action-link/__tests__/ActionLink.test.tsx index 3aa980a4c..68eecee2a 100644 --- a/src/components/navigation/action-link/__tests__/ActionLink.test.tsx +++ b/src/components/navigation/action-link/__tests__/ActionLink.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { createRef, type ComponentProps } from 'react'; +import { type ComponentProps, createRef } from 'react'; import { ActionLink } from '..'; diff --git a/src/components/navigation/back-link/BackLink.tsx b/src/components/navigation/back-link/BackLink.tsx index 60b2c5e8f..90d75a11a 100644 --- a/src/components/navigation/back-link/BackLink.tsx +++ b/src/components/navigation/back-link/BackLink.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ReactElement } from 'react'; +import { type ReactElement, forwardRef } from 'react'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/components/navigation/back-link/__tests__/BackLink.test.tsx b/src/components/navigation/back-link/__tests__/BackLink.test.tsx index 2373a4056..2e0809e3f 100644 --- a/src/components/navigation/back-link/__tests__/BackLink.test.tsx +++ b/src/components/navigation/back-link/__tests__/BackLink.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { createRef, type ComponentProps } from 'react'; +import { type ComponentProps, createRef } from 'react'; import { BackLink } from '..'; diff --git a/src/components/navigation/breadcrumb/Breadcrumb.tsx b/src/components/navigation/breadcrumb/Breadcrumb.tsx index dbbab42ca..8ba6b8d8e 100644 --- a/src/components/navigation/breadcrumb/Breadcrumb.tsx +++ b/src/components/navigation/breadcrumb/Breadcrumb.tsx @@ -1,10 +1,10 @@ import classNames from 'classnames'; -import { Children, forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react'; - -import { BreadcrumbBack, BreadcrumbItem } from './components/index.js'; +import { Children, type ComponentPropsWithoutRef, type ReactNode, forwardRef } from 'react'; import { childIsOfComponentType } from '#util/types/index.js'; +import { BreadcrumbBack, BreadcrumbItem } from './components/index.js'; + export interface BreadcrumbProps extends ComponentPropsWithoutRef<'nav'> { reverse?: boolean; } diff --git a/src/components/navigation/breadcrumb/__tests__/Breadcrumb.test.tsx b/src/components/navigation/breadcrumb/__tests__/Breadcrumb.test.tsx index 4bc2302ba..330780b2d 100644 --- a/src/components/navigation/breadcrumb/__tests__/Breadcrumb.test.tsx +++ b/src/components/navigation/breadcrumb/__tests__/Breadcrumb.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { createRef, type ComponentProps } from 'react'; +import { type ComponentProps, createRef } from 'react'; import { Breadcrumb } from '..'; diff --git a/src/components/navigation/card/Card.tsx b/src/components/navigation/card/Card.tsx index 4baef2bcf..e5261a036 100644 --- a/src/components/navigation/card/Card.tsx +++ b/src/components/navigation/card/Card.tsx @@ -1,20 +1,20 @@ import classNames from 'classnames'; -import { Children, forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { Children, type ComponentPropsWithoutRef, forwardRef } from 'react'; + +import { ChevronRightCircleIcon } from '#components/content-presentation/icons/individual/index.js'; +import { type CareCardType, childIsOfComponentType } from '#util/types/index.js'; import { CardAction, CardDescription, CardGroup, CardGroupItem, - CardHeadingContainer, CardHeading, + CardHeadingContainer, CardImage, CardLink, } from './components/index.js'; -import { ChevronRightCircleIcon } from '#components/content-presentation/icons/individual/index.js'; -import { childIsOfComponentType, type CareCardType } from '#util/types/index.js'; - export interface CardProps extends ComponentPropsWithoutRef<'div'> { clickable?: boolean; feature?: boolean; diff --git a/src/components/navigation/card/__tests__/Card.test.tsx b/src/components/navigation/card/__tests__/Card.test.tsx index d5fd0d46d..d727280e0 100644 --- a/src/components/navigation/card/__tests__/Card.test.tsx +++ b/src/components/navigation/card/__tests__/Card.test.tsx @@ -1,11 +1,11 @@ import { render } from '@testing-library/react'; -import { Card, type CardProps } from '..'; - import { type HeadingProps } from '#components/typography/Heading.js'; import { renderClient, renderServer } from '#util/components'; import { type CareCardType } from '#util/types'; +import { Card, type CardProps } from '..'; + describe('Card', () => { it('matches snapshot with single action', async () => { const { container } = await renderClient( diff --git a/src/components/navigation/card/components/CardAction.tsx b/src/components/navigation/card/components/CardAction.tsx index 696b92852..9ee607b1a 100644 --- a/src/components/navigation/card/components/CardAction.tsx +++ b/src/components/navigation/card/components/CardAction.tsx @@ -1,4 +1,4 @@ -import { forwardRef, type ReactElement } from 'react'; +import { type ReactElement, forwardRef } from 'react'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/components/navigation/card/components/CardDescription.tsx b/src/components/navigation/card/components/CardDescription.tsx index 78057b9e0..521751242 100644 --- a/src/components/navigation/card/components/CardDescription.tsx +++ b/src/components/navigation/card/components/CardDescription.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { type ComponentPropsWithoutRef, forwardRef } from 'react'; export const CardDescription = forwardRef>( ({ className, ...rest }, forwardedRef) => ( diff --git a/src/components/navigation/card/components/CardHeading.tsx b/src/components/navigation/card/components/CardHeading.tsx index 9a324f0e0..e747a300a 100644 --- a/src/components/navigation/card/components/CardHeading.tsx +++ b/src/components/navigation/card/components/CardHeading.tsx @@ -1,8 +1,8 @@ import classNames from 'classnames'; -import { Children, forwardRef, type FC } from 'react'; +import { Children, type FC, forwardRef } from 'react'; import { Heading, type HeadingProps } from '#components/typography/Heading.js'; -import { childIsOfComponentType, type CareCardType } from '#util/types/index.js'; +import { type CareCardType, childIsOfComponentType } from '#util/types/index.js'; const genHiddenText = (cardType?: CareCardType) => { if (!cardType) { diff --git a/src/components/navigation/contents-list/ContentsList.tsx b/src/components/navigation/contents-list/ContentsList.tsx index 43a14cf61..2d398f3a2 100644 --- a/src/components/navigation/contents-list/ContentsList.tsx +++ b/src/components/navigation/contents-list/ContentsList.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef, type ReactElement } from 'react'; +import { type ComponentPropsWithoutRef, type ReactElement, forwardRef } from 'react'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/components/navigation/contents-list/__tests__/ContentsList.test.tsx b/src/components/navigation/contents-list/__tests__/ContentsList.test.tsx index 151b11c91..f3cefff3a 100644 --- a/src/components/navigation/contents-list/__tests__/ContentsList.test.tsx +++ b/src/components/navigation/contents-list/__tests__/ContentsList.test.tsx @@ -1,5 +1,5 @@ import { render } from '@testing-library/react'; -import { createRef, type ComponentProps } from 'react'; +import { type ComponentProps, createRef } from 'react'; import { ContentsList } from '..'; diff --git a/src/components/navigation/footer/Footer.tsx b/src/components/navigation/footer/Footer.tsx index b0334c64b..a0b47a905 100644 --- a/src/components/navigation/footer/Footer.tsx +++ b/src/components/navigation/footer/Footer.tsx @@ -1,20 +1,20 @@ import classNames from 'classnames'; -import { Children, forwardRef, type ComponentPropsWithoutRef } from 'react'; +import { Children, type ComponentPropsWithoutRef, forwardRef } from 'react'; + +import { Container } from '#components/layout/index.js'; +import { childIsOfComponentType } from '#util/types/index.js'; import { FooterContent, + type FooterContentProps, FooterCopyright, FooterHeading, FooterList, FooterListItem, FooterListItemLink, FooterMeta, - type FooterContentProps, } from './components/index.js'; -import { Container } from '#components/layout/index.js'; -import { childIsOfComponentType } from '#util/types/index.js'; - export interface FooterProps extends ComponentPropsWithoutRef<'div'> { columns?: '1' | '2' | '3' | '4'; containerClassName?: string; diff --git a/src/components/navigation/footer/components/FooterMeta.tsx b/src/components/navigation/footer/components/FooterMeta.tsx index dd85976e7..27abf3472 100644 --- a/src/components/navigation/footer/components/FooterMeta.tsx +++ b/src/components/navigation/footer/components/FooterMeta.tsx @@ -1,12 +1,12 @@ import { Children, type FC, type ReactElement } from 'react'; +import { childIsOfComponentType } from '#util/types/index.js'; + import { type FooterContentProps } from './FooterContent.js'; import { FooterCopyright } from './FooterCopyright.js'; import { FooterList } from './FooterList.js'; import { FooterListItem } from './FooterListItem.js'; -import { childIsOfComponentType } from '#util/types/index.js'; - export interface FooterMetaProps extends FooterContentProps { visuallyHiddenText?: string | ReactElement; } diff --git a/src/components/navigation/header/Header.tsx b/src/components/navigation/header/Header.tsx index c4a71dbba..2ae2a262f 100644 --- a/src/components/navigation/header/Header.tsx +++ b/src/components/navigation/header/Header.tsx @@ -4,15 +4,18 @@ import classNames from 'classnames'; import { type Header as HeaderModule } from 'nhsuk-frontend'; import { Children, + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; +import { Container } from '#components/layout/index.js'; +import { childIsOfComponentType } from '#util/types/index.js'; + import { HeaderContext, type IHeaderContext } from './HeaderContext.js'; import { HeaderAccount, @@ -25,9 +28,6 @@ import { type HeaderServiceNameProps, } from './components/index.js'; -import { Container } from '#components/layout/index.js'; -import { childIsOfComponentType } from '#util/types/index.js'; - export interface HeaderProps extends ComponentPropsWithoutRef<'div'>, HeaderServiceNameProps { containerClasses?: string; white?: boolean; diff --git a/src/components/navigation/header/HeaderContext.ts b/src/components/navigation/header/HeaderContext.ts index 3c686f370..a79d33d45 100644 --- a/src/components/navigation/header/HeaderContext.ts +++ b/src/components/navigation/header/HeaderContext.ts @@ -1,6 +1,6 @@ 'use client'; -import { createContext, type Dispatch, type SetStateAction } from 'react'; +import { type Dispatch, type SetStateAction, createContext } from 'react'; export interface IHeaderContext { menuOpen: boolean; diff --git a/src/components/navigation/header/__tests__/Header.test.tsx b/src/components/navigation/header/__tests__/Header.test.tsx index 114366b1a..350f49ff4 100644 --- a/src/components/navigation/header/__tests__/Header.test.tsx +++ b/src/components/navigation/header/__tests__/Header.test.tsx @@ -1,9 +1,9 @@ -import { createRef, type ComponentProps } from 'react'; - -import { Header } from '..'; +import { type ComponentProps, createRef } from 'react'; import { renderClient, renderServer } from '#util/components'; +import { Header } from '..'; + describe('Header', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/navigation/header/components/HeaderAccountItem.tsx b/src/components/navigation/header/components/HeaderAccountItem.tsx index 7570d9c5b..9b2d13335 100644 --- a/src/components/navigation/header/components/HeaderAccountItem.tsx +++ b/src/components/navigation/header/components/HeaderAccountItem.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithRef, type ForwardedRef, type ReactNode } from 'react'; +import { type ComponentPropsWithRef, type ForwardedRef, type ReactNode, forwardRef } from 'react'; import { UserIcon } from '#components/content-presentation/index.js'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/components/navigation/header/components/HeaderNavigation.tsx b/src/components/navigation/header/components/HeaderNavigation.tsx index 80a079957..bc07072d8 100644 --- a/src/components/navigation/header/components/HeaderNavigation.tsx +++ b/src/components/navigation/header/components/HeaderNavigation.tsx @@ -1,14 +1,13 @@ 'use client'; import classNames from 'classnames'; -import { useContext, useEffect, type ComponentPropsWithoutRef, type FC } from 'react'; +import { type ComponentPropsWithoutRef, type FC, useContext, useEffect } from 'react'; -import { HeaderContext, type IHeaderContext } from '../HeaderContext.js'; +import { Container } from '#components/layout/index.js'; +import { HeaderContext, type IHeaderContext } from '../HeaderContext.js'; import { HeaderMenuToggle } from './HeaderMenuToggle.js'; -import { Container } from '#components/layout/index.js'; - export interface HeaderNavigationProps extends ComponentPropsWithoutRef<'nav'> { white?: boolean; open?: boolean; diff --git a/src/components/navigation/pagination/Pagination.tsx b/src/components/navigation/pagination/Pagination.tsx index 2247ad570..d92ee0b8c 100644 --- a/src/components/navigation/pagination/Pagination.tsx +++ b/src/components/navigation/pagination/Pagination.tsx @@ -1,10 +1,10 @@ import classNames from 'classnames'; -import { Children, forwardRef, type ComponentPropsWithoutRef } from 'react'; - -import { PaginationItem, PaginationLink } from './components/index.js'; +import { Children, type ComponentPropsWithoutRef, forwardRef } from 'react'; import { childIsOfComponentType } from '#util/types/TypeGuards.js'; +import { PaginationItem, PaginationLink } from './components/index.js'; + export type PaginationProps = ComponentPropsWithoutRef<'nav'>; const PaginationComponent = forwardRef( diff --git a/src/components/navigation/pagination/components/PaginationItem.tsx b/src/components/navigation/pagination/components/PaginationItem.tsx index 2d8e0a1e1..96a47f7d1 100644 --- a/src/components/navigation/pagination/components/PaginationItem.tsx +++ b/src/components/navigation/pagination/components/PaginationItem.tsx @@ -1,11 +1,11 @@ import classNames from 'classnames'; import { forwardRef } from 'react'; +import { ArrowLeftIcon, ArrowRightIcon } from '#components/content-presentation/index.js'; + import { PaginationLink, type PaginationLinkProps } from './PaginationLink.js'; import { PaginationLinkText } from './PaginationLinkText.js'; -import { ArrowLeftIcon, ArrowRightIcon } from '#components/content-presentation/index.js'; - export type PaginationItemProps = PaginationLinkProps & { ellipsis?: boolean; }; diff --git a/src/components/navigation/pagination/components/PaginationLink.tsx b/src/components/navigation/pagination/components/PaginationLink.tsx index 800502b00..b514b3aaf 100644 --- a/src/components/navigation/pagination/components/PaginationLink.tsx +++ b/src/components/navigation/pagination/components/PaginationLink.tsx @@ -1,10 +1,10 @@ import { forwardRef } from 'react'; -import { PaginationLinkText, type PaginationLinkTextProps } from './PaginationLinkText.js'; - import { ArrowLeftIcon, ArrowRightIcon } from '#components/content-presentation/index.js'; import { type AsElementLink } from '#util/types/LinkTypes.js'; +import { PaginationLinkText, type PaginationLinkTextProps } from './PaginationLinkText.js'; + export type PaginationLinkProps = PaginationLinkTextProps & AsElementLink; export const PaginationLink = forwardRef( diff --git a/src/components/navigation/skip-link/SkipLink.tsx b/src/components/navigation/skip-link/SkipLink.tsx index a0e5009c7..65a89bdd0 100644 --- a/src/components/navigation/skip-link/SkipLink.tsx +++ b/src/components/navigation/skip-link/SkipLink.tsx @@ -3,12 +3,12 @@ import classNames from 'classnames'; import { type SkipLink as SkipLinkModule } from 'nhsuk-frontend'; import { + type ComponentPropsWithoutRef, forwardRef, useEffect, useImperativeHandle, useRef, useState, - type ComponentPropsWithoutRef, } from 'react'; export type SkipLinkProps = ComponentPropsWithoutRef<'a'>; diff --git a/src/components/navigation/skip-link/__tests__/SkipLink.test.tsx b/src/components/navigation/skip-link/__tests__/SkipLink.test.tsx index d41e04135..ed8bc1d02 100644 --- a/src/components/navigation/skip-link/__tests__/SkipLink.test.tsx +++ b/src/components/navigation/skip-link/__tests__/SkipLink.test.tsx @@ -1,11 +1,11 @@ import { waitFor } from '@testing-library/react'; import { createRef } from 'react'; -import { SkipLink } from '..'; - import { Container } from '#components/layout'; import { renderClient, renderServer } from '#util/components'; +import { SkipLink } from '..'; + describe('SkipLink', () => { it('matches snapshot', async () => { const { container } = await renderClient( diff --git a/src/components/typography/Heading.tsx b/src/components/typography/Heading.tsx index d9062bc7e..51a47ef59 100644 --- a/src/components/typography/Heading.tsx +++ b/src/components/typography/Heading.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ElementType, type HTMLAttributes, type ReactElement } from 'react'; +import { type ElementType, type HTMLAttributes, type ReactElement, forwardRef } from 'react'; import { type NHSUKSize } from '#util/types/NHSUKTypes.js'; diff --git a/src/components/utils/FormGroup.tsx b/src/components/utils/FormGroup.tsx index 8c2e43254..b3ecd64fe 100644 --- a/src/components/utils/FormGroup.tsx +++ b/src/components/utils/FormGroup.tsx @@ -2,18 +2,16 @@ import classNames from 'classnames'; import { - Fragment, - useContext, - useEffect, - useState, type ComponentPropsWithoutRef, type ElementType, + Fragment, type JSX, type ReactNode, + useContext, + useEffect, + useState, } from 'react'; -import { FormGroupContext, type IFormGroupContext } from './FormGroupContext.js'; - import { ErrorMessage } from '#components/form-elements/error-message/index.js'; import { Fieldset } from '#components/form-elements/fieldset/index.js'; import { useFormContext } from '#components/form-elements/form/index.js'; @@ -23,6 +21,8 @@ import { Legend } from '#components/form-elements/legend/index.js'; import { generateRandomID } from '#util/tools/index.js'; import { type FormElementProps, type FormElementRenderProps } from '#util/types/FormTypes.js'; +import { FormGroupContext, type IFormGroupContext } from './FormGroupContext.js'; + export type FormGroupProps< P extends ComponentPropsWithoutRef, T extends ElementType, diff --git a/src/components/utils/__tests__/FormGroup.test.tsx b/src/components/utils/__tests__/FormGroup.test.tsx index d9052cefa..d13a41d95 100644 --- a/src/components/utils/__tests__/FormGroup.test.tsx +++ b/src/components/utils/__tests__/FormGroup.test.tsx @@ -1,11 +1,11 @@ import { axe, toHaveNoViolations } from 'jest-axe'; -import { FormGroup } from '..'; - import { type TextInputProps } from '#components/form-elements'; import { renderClient, renderServer } from '#util/components'; import { type FormElementRenderProps } from '#util/types/FormTypes'; +import { FormGroup } from '..'; + expect.extend(toHaveNoViolations); describe('FormGroup', () => { diff --git a/src/patterns/nav-a-z/NavAZ.tsx b/src/patterns/nav-a-z/NavAZ.tsx index 4a4f1c3e9..6d24dcd8f 100644 --- a/src/patterns/nav-a-z/NavAZ.tsx +++ b/src/patterns/nav-a-z/NavAZ.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import { forwardRef, type ComponentPropsWithoutRef, type FC, type ReactNode } from 'react'; +import { type ComponentPropsWithoutRef, type FC, type ReactNode, forwardRef } from 'react'; import { type AsElementLink } from '#util/types/LinkTypes.js'; diff --git a/src/util/components/index.tsx b/src/util/components/index.tsx index f65c1a54d..b13c8df17 100644 --- a/src/util/components/index.tsx +++ b/src/util/components/index.tsx @@ -1,6 +1,6 @@ -import { render, type RenderOptions as ClientOptions } from '@testing-library/react'; -import { act, StrictMode, type JSX } from 'react'; -import { renderToString, type ServerOptions } from 'react-dom/server'; +import { type RenderOptions as ClientOptions, render } from '@testing-library/react'; +import { type JSX, StrictMode, act } from 'react'; +import { type ServerOptions, renderToString } from 'react-dom/server'; type RenderOptions = | { moduleName?: never; className: string } diff --git a/src/util/types/TypeGuards.ts b/src/util/types/TypeGuards.ts index 98c1a4a42..9c16513b0 100644 --- a/src/util/types/TypeGuards.ts +++ b/src/util/types/TypeGuards.ts @@ -1,9 +1,9 @@ import { - isValidElement, type FC, type HTMLAttributes, type ReactElement, type ReactNode, + isValidElement, } from 'react'; type WithProps = T & { diff --git a/stories/Form Elements/Checkboxes.stories.tsx b/stories/Form Elements/Checkboxes.stories.tsx index 6130f7809..9ae0533d8 100644 --- a/stories/Form Elements/Checkboxes.stories.tsx +++ b/stories/Form Elements/Checkboxes.stories.tsx @@ -1,5 +1,5 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; -import { useEffect, useRef, useState, type ChangeEvent, type InputEvent } from 'react'; +import { type ChangeEvent, type InputEvent, useEffect, useRef, useState } from 'react'; import { Checkboxes } from '#components/form-elements/checkboxes/index.js'; import { Fieldset } from '#components/form-elements/fieldset/Fieldset.js'; diff --git a/stories/Migration Guides/UpgradeTov1.mdx b/stories/Migration Guides/UpgradeTov1.mdx index a22aa7d5e..797d00fb9 100644 --- a/stories/Migration Guides/UpgradeTov1.mdx +++ b/stories/Migration Guides/UpgradeTov1.mdx @@ -1,6 +1,7 @@ -import Docs from '../../docs/upgrade-to-1.0.md?raw'; import { Markdown, Meta } from '@storybook/addon-docs/blocks'; +import Docs from '../../docs/upgrade-to-1.0.md?raw'; + {Docs} diff --git a/stories/Migration Guides/UpgradeTov2.mdx b/stories/Migration Guides/UpgradeTov2.mdx index 4c827fcf6..66b23816a 100644 --- a/stories/Migration Guides/UpgradeTov2.mdx +++ b/stories/Migration Guides/UpgradeTov2.mdx @@ -1,6 +1,7 @@ -import Docs from '../../docs/upgrade-to-2.0.md?raw'; import { Markdown, Meta } from '@storybook/addon-docs/blocks'; +import Docs from '../../docs/upgrade-to-2.0.md?raw'; + {Docs} diff --git a/stories/Migration Guides/UpgradeTov3.mdx b/stories/Migration Guides/UpgradeTov3.mdx index 00de2334b..9ca93a0a0 100644 --- a/stories/Migration Guides/UpgradeTov3.mdx +++ b/stories/Migration Guides/UpgradeTov3.mdx @@ -1,6 +1,7 @@ -import Docs from '../../docs/upgrade-to-3.0.md?raw'; import { Markdown, Meta } from '@storybook/addon-docs/blocks'; +import Docs from '../../docs/upgrade-to-3.0.md?raw'; + {Docs} diff --git a/stories/Migration Guides/UpgradeTov4.mdx b/stories/Migration Guides/UpgradeTov4.mdx index 5e4d666b1..a3a55811a 100644 --- a/stories/Migration Guides/UpgradeTov4.mdx +++ b/stories/Migration Guides/UpgradeTov4.mdx @@ -1,6 +1,7 @@ -import Docs from '../../docs/upgrade-to-4.0.md?raw'; import { Markdown, Meta } from '@storybook/addon-docs/blocks'; +import Docs from '../../docs/upgrade-to-4.0.md?raw'; + {Docs} diff --git a/stories/Migration Guides/UpgradeTov5.mdx b/stories/Migration Guides/UpgradeTov5.mdx index 3f4df009e..5522aca64 100644 --- a/stories/Migration Guides/UpgradeTov5.mdx +++ b/stories/Migration Guides/UpgradeTov5.mdx @@ -1,6 +1,7 @@ -import Docs from '../../docs/upgrade-to-5.0.md?raw'; import { Markdown, Meta } from '@storybook/addon-docs/blocks'; +import Docs from '../../docs/upgrade-to-5.0.md?raw'; + {Docs} diff --git a/stories/Migration Guides/UpgradeTov6.mdx b/stories/Migration Guides/UpgradeTov6.mdx index 865d7cc7f..83b5c78d1 100644 --- a/stories/Migration Guides/UpgradeTov6.mdx +++ b/stories/Migration Guides/UpgradeTov6.mdx @@ -1,6 +1,7 @@ -import Docs from '../../docs/upgrade-to-6.0.md?raw'; import { Markdown, Meta } from '@storybook/addon-docs/blocks'; +import Docs from '../../docs/upgrade-to-6.0.md?raw'; + {Docs} diff --git a/stories/Navigation/SkipLink.stories.tsx b/stories/Navigation/SkipLink.stories.tsx index 51f92374c..0a65ae492 100644 --- a/stories/Navigation/SkipLink.stories.tsx +++ b/stories/Navigation/SkipLink.stories.tsx @@ -2,7 +2,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { type FC, type ReactNode } from 'react'; import { HintText } from '#components/form-elements/hint-text/index.js'; -import { Row, Col, Container } from '#components/layout/index.js'; +import { Col, Container, Row } from '#components/layout/index.js'; import { SkipLink } from '#components/navigation/skip-link/index.js'; const CodeText: FC<{ children: ReactNode }> = ({ children }) => ( diff --git a/yarn.lock b/yarn.lock index 7e6a4efeb..63fb0f98c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -73,7 +73,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.0": +"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.0, @babel/generator@npm:^7.29.0": version: 7.29.1 resolution: "@babel/generator@npm:7.29.1" dependencies: @@ -298,7 +298,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.23.9": +"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.28.0": version: 7.29.2 resolution: "@babel/parser@npm:7.29.2" dependencies: @@ -1409,7 +1409,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.4.4": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.4.4": version: 7.29.0 resolution: "@babel/types@npm:7.29.0" dependencies: @@ -1889,17 +1889,17 @@ __metadata: languageName: node linkType: hard -"@eslint/compat@npm:^2.0.3": - version: 2.0.3 - resolution: "@eslint/compat@npm:2.0.3" +"@eslint/compat@npm:^2.0.5": + version: 2.0.5 + resolution: "@eslint/compat@npm:2.0.5" dependencies: - "@eslint/core": "npm:^1.1.1" + "@eslint/core": "npm:^1.2.1" peerDependencies: eslint: ^8.40 || 9 || 10 peerDependenciesMeta: eslint: optional: true - checksum: 10c0/e7b1a1bdf366759f9a7c3f09fe35cdd0f45208a6ca789be1357895869e546d0c3185ec92b29996141fdd1173103c3408a81ba2ecb86219bd15671ae65af6595b + checksum: 10c0/c6e16c5bd826535dc84b6dfd4cfa8079ac564f6dc614b164e2f2e708e940d6efa9f3754fa6ddaace04b43d296c190aabbad4231c074f6269afab88d7e7b005a8 languageName: node linkType: hard @@ -1932,12 +1932,12 @@ __metadata: languageName: node linkType: hard -"@eslint/core@npm:^1.1.1": - version: 1.1.1 - resolution: "@eslint/core@npm:1.1.1" +"@eslint/core@npm:^1.2.1": + version: 1.2.1 + resolution: "@eslint/core@npm:1.2.1" dependencies: "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/129c654c78afc1f6d61dccb0ce841be667f09f052f7d5642614b6ba5eeebd579ca6cc336d7b750d88625e61f7aad22fdd62bf83847fbfc10cc3e58cfe6c5072e + checksum: 10c0/10979b40588ecfef771fcb5013a542a35fb30692cc95a65f3481b0b36fbd89f5679efeb30d57f4eed35203d859aabace2a620177d6c536f71b299a1af2f3398f languageName: node linkType: hard @@ -3100,13 +3100,6 @@ __metadata: languageName: node linkType: hard -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -3336,6 +3329,37 @@ __metadata: languageName: node linkType: hard +"@trivago/prettier-plugin-sort-imports@npm:^6.0.2": + version: 6.0.2 + resolution: "@trivago/prettier-plugin-sort-imports@npm:6.0.2" + dependencies: + "@babel/generator": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.0" + "@babel/traverse": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" + javascript-natural-sort: "npm:^0.7.1" + lodash-es: "npm:^4.17.21" + minimatch: "npm:^9.0.0" + parse-imports-exports: "npm:^0.2.4" + peerDependencies: + "@vue/compiler-sfc": 3.x + prettier: 2.x - 3.x + prettier-plugin-ember-template-tag: ">= 2.0.0" + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + "@vue/compiler-sfc": + optional: true + prettier-plugin-ember-template-tag: + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + checksum: 10c0/62ee7d74c9cb6318cf7b3a6faf8fb794853c30bae6dc9e27c9ae1b22ffd160d45286c0c143881064020329edd6ec8ae529d625dbe5e2867e092886d84b1a13fe + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.10.0": version: 0.10.1 resolution: "@tybys/wasm-util@npm:0.10.1" @@ -3505,13 +3529,6 @@ __metadata: languageName: node linkType: hard -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac - languageName: node - linkType: hard - "@types/mdx@npm:^2.0.0": version: 2.0.12 resolution: "@types/mdx@npm:2.0.12" @@ -3528,12 +3545,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^24.12.0": - version: 24.12.0 - resolution: "@types/node@npm:24.12.0" +"@types/node@npm:^24.12.2": + version: 24.12.2 + resolution: "@types/node@npm:24.12.2" dependencies: undici-types: "npm:~7.16.0" - checksum: 10c0/8b31c0af5b5474f13048a4e77c57f22cd4f8fe6e58c4b6fde9456b0c13f46a5bfaf5744ff88fd089581de9f0d6e99c584e022681de7acb26a58d258c654c4843 + checksum: 10c0/710050c42f89075c4479e4e1e4c2532486b0c41b1e2a8a13ad88641c88b88cdaea87414e19224f30028719737bd70e327edcaa184d50e86b9418941edd7eb02b languageName: node linkType: hard @@ -3599,105 +3616,105 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.58.0" +"@typescript-eslint/eslint-plugin@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.59.0" dependencies: "@eslint-community/regexpp": "npm:^4.12.2" - "@typescript-eslint/scope-manager": "npm:8.58.0" - "@typescript-eslint/type-utils": "npm:8.58.0" - "@typescript-eslint/utils": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" + "@typescript-eslint/scope-manager": "npm:8.59.0" + "@typescript-eslint/type-utils": "npm:8.59.0" + "@typescript-eslint/utils": "npm:8.59.0" + "@typescript-eslint/visitor-keys": "npm:8.59.0" ignore: "npm:^7.0.5" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.5.0" peerDependencies: - "@typescript-eslint/parser": ^8.58.0 + "@typescript-eslint/parser": ^8.59.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/ac45c30f6ba9e188a01144708aa845e7ee8bb8a4d4f9aa6d2dce7784852d0821d42b031fee6832069935c3b885feff6d4014e30145b99693d25d7f563266a9f8 + checksum: 10c0/f98171ecad6a5106fe978df155f4b65a72dfdadfcd663651b633b61480b543e74796baa224a1393e323f9514901604fe6302323c4b80b79f7a98512a01bc6461 languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/parser@npm:8.58.0" +"@typescript-eslint/parser@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/parser@npm:8.59.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.58.0" - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" + "@typescript-eslint/scope-manager": "npm:8.59.0" + "@typescript-eslint/types": "npm:8.59.0" + "@typescript-eslint/typescript-estree": "npm:8.59.0" + "@typescript-eslint/visitor-keys": "npm:8.59.0" debug: "npm:^4.4.3" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/56c7ec21675cec4730760bfa37c29e42e80b4d6444e2beca55fad9ef53731392270d142797482ea798405be0d7e28ec6c9c16a1ee2ee1c94f73d3bf0ed29763c + checksum: 10c0/996a7b43f8a515ebbd06455c9f53065c561c8519bc4f634d6783b92832aa69e47945478d1601a87582f9f7b303becc172d5d7f776e201b2a2d375bc762ad4015 languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/project-service@npm:8.58.0" +"@typescript-eslint/project-service@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/project-service@npm:8.59.0" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.58.0" - "@typescript-eslint/types": "npm:^8.58.0" + "@typescript-eslint/tsconfig-utils": "npm:^8.59.0" + "@typescript-eslint/types": "npm:^8.59.0" debug: "npm:^4.4.3" peerDependencies: typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/e6d0cb2f7708ccb31a2ff9eb35817d4999c26e1f1cd3c607539e21d0c73a234daa77c73ee1163bc4e8b139252d619823c444759f1ddabdd138cab4885e9c9794 + checksum: 10c0/ffba9595a427235bbeb0e5c7db3486f8d01dd8f8686964b4f82084e82008c49b897d01c4d331f33a9ce29edae70a9286f6fdedec4bf9037d732d9c9e86ebc7ea languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/scope-manager@npm:8.58.0" +"@typescript-eslint/scope-manager@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/scope-manager@npm:8.59.0" dependencies: - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" - checksum: 10c0/bd5c16780f22d62359af0f69909f38a15fa3c55e609124a7cd5c2a04322fe41e586d81066f3ad1dcc3c1eff24dbcb48b78d099626d611fbd680c20c005d48f1d + "@typescript-eslint/types": "npm:8.59.0" + "@typescript-eslint/visitor-keys": "npm:8.59.0" + checksum: 10c0/d372f08be190d01e6d237932dc0d77808a9dc0a34fe8f690a3eac496d6e2f93c030c6ccb5000b35e825a6cfc4d9ca69a00f2ccda334115a9865a9d02cd603e52 languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.58.0, @typescript-eslint/tsconfig-utils@npm:^8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.58.0" +"@typescript-eslint/tsconfig-utils@npm:8.59.0, @typescript-eslint/tsconfig-utils@npm:^8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.59.0" peerDependencies: typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/0a07fe1a28b2513e625882bc8d4c4e0c5a105cdbcb987beae12fc66dbe71dc9638013e4d1fa8ad10d828a2acd5e3fed987c189c00d41fed0e880009f99adf1b2 + checksum: 10c0/ab482c22f23774d24b3048c9fcdc5e0b94137064b3af901f4b0327da2270c2b2961c19165ccf8bdeaedfa83138be98c5cd8edcdc89deb6187baf6438cd8584b0 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/type-utils@npm:8.58.0" +"@typescript-eslint/type-utils@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/type-utils@npm:8.59.0" dependencies: - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" - "@typescript-eslint/utils": "npm:8.58.0" + "@typescript-eslint/types": "npm:8.59.0" + "@typescript-eslint/typescript-estree": "npm:8.59.0" + "@typescript-eslint/utils": "npm:8.59.0" debug: "npm:^4.4.3" ts-api-utils: "npm:^2.5.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/1223733d41f8463be92ef1ad048d546f9663152212b22dc968abbd9f8e4486bd4082e16baa51d2d281e0d4815563bc4b1ecf01684e2940b7897ba17aa26d1196 + checksum: 10c0/e2f2176a9bce81c19b53accf4e9189c60b1b84717cf129a6d003a2271019e30d410d2ccdc0fc6a37cbb8274a1b297d7d30a116189110f9d24a86391ee24a9fef languageName: node linkType: hard -"@typescript-eslint/types@npm:8.58.0, @typescript-eslint/types@npm:^8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/types@npm:8.58.0" - checksum: 10c0/f2fe1321758a04591c20d77caba956ae76b77cff0b976a0224b37077d80b1ebd826874d15ec79c3a3b7d57ee5679e5d10756db1b082bde3d51addbd3a8431d38 +"@typescript-eslint/types@npm:8.59.0, @typescript-eslint/types@npm:^8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/types@npm:8.59.0" + checksum: 10c0/2750b1e21290dffe90a424fe05c2bab701f60a7b51b5e0921ed14bb1a5fc29ff3fe8f286817d2287e93ff78e33e6626f6ce26d0bc79a729bd608deda77a9bdde languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.58.0" +"@typescript-eslint/typescript-estree@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.59.0" dependencies: - "@typescript-eslint/project-service": "npm:8.58.0" - "@typescript-eslint/tsconfig-utils": "npm:8.58.0" - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" + "@typescript-eslint/project-service": "npm:8.59.0" + "@typescript-eslint/tsconfig-utils": "npm:8.59.0" + "@typescript-eslint/types": "npm:8.59.0" + "@typescript-eslint/visitor-keys": "npm:8.59.0" debug: "npm:^4.4.3" minimatch: "npm:^10.2.2" semver: "npm:^7.7.3" @@ -3705,32 +3722,32 @@ __metadata: ts-api-utils: "npm:^2.5.0" peerDependencies: typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/a8cb94cb765b27740a54f9b5378bd8f0dc49e301ceed99a0791dc9d1f61c2a54e3212f7ed9120c8c2df80104ad3117150cf5e7fe8a0b7eec3ed04969a79b103e + checksum: 10c0/82d3dfb4de591d9a39d2c4dafc13f14b4940f5b116fb3db311935137aa7e34c9dce3209aaeace118070847b2355df7c185ff1e0f2a36232c3aea9b5fa2652f98 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/utils@npm:8.58.0" +"@typescript-eslint/utils@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/utils@npm:8.59.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.9.1" - "@typescript-eslint/scope-manager": "npm:8.58.0" - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" + "@typescript-eslint/scope-manager": "npm:8.59.0" + "@typescript-eslint/types": "npm:8.59.0" + "@typescript-eslint/typescript-estree": "npm:8.59.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/457e01a6e6d954dbfe13c49ece3cf8a55e5d8cf19ea9ae7086c0e205d89e3cdbb91153062ab440d2e78ad3f077b174adc42bfb1b6fc24299020a0733e7f9c11c + checksum: 10c0/eca4e5a18ae8e8c4360b05758fa142465daef3a9dffe4d78b15607b4680698eece96f899bce1e8d83427da74ddfbca80a95456727b8b9239816528978180b047 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.58.0" +"@typescript-eslint/visitor-keys@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.59.0" dependencies: - "@typescript-eslint/types": "npm:8.58.0" + "@typescript-eslint/types": "npm:8.59.0" eslint-visitor-keys: "npm:^5.0.0" - checksum: 10c0/75f3c9c097a308cc6450822a0f81d44c8b79b524e99dd2c41ded347b12f148ab3bd459ce9cc6bd00f8f0725c5831baab6d2561596ead3394ab76dddbeb32cce1 + checksum: 10c0/09ec24c9c9d0a3ccb57bb2ab3dfd8deca124339aba6621503285c22765a4dfc89bf3d31e337dd647b1cdf89bac384e3a62e0f5b8c1d5a93d16d1f417144e3226 languageName: node linkType: hard @@ -4060,7 +4077,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": version: 3.1.9 resolution: "array-includes@npm:3.1.9" dependencies: @@ -4090,22 +4107,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.6": - version: 1.2.6 - resolution: "array.prototype.findlastindex@npm:1.2.6" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.4" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.9" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - es-shim-unscopables: "npm:^1.1.0" - checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.3": +"array.prototype.flat@npm:^1.3.1": version: 1.3.3 resolution: "array.prototype.flat@npm:1.3.3" dependencies: @@ -4790,15 +4792,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a - languageName: node - linkType: hard - "decimal.js@npm:^10.5.0": version: 10.6.0 resolution: "decimal.js@npm:10.6.0" @@ -5142,7 +5135,7 @@ __metadata: languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": +"es-shim-unscopables@npm:^1.0.2": version: 1.1.0 resolution: "es-shim-unscopables@npm:1.1.0" dependencies: @@ -5387,17 +5380,6 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: "npm:^3.2.7" - is-core-module: "npm:^2.13.0" - resolve: "npm:^1.22.4" - checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 - languageName: node - linkType: hard - "eslint-import-resolver-typescript@npm:^4.4.4": version: 4.4.4 resolution: "eslint-import-resolver-typescript@npm:4.4.4" @@ -5422,47 +5404,6 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.12.1": - version: 2.12.1 - resolution: "eslint-module-utils@npm:2.12.1" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10c0/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40 - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.32.0": - version: 2.32.0 - resolution: "eslint-plugin-import@npm:2.32.0" - dependencies: - "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.9" - array.prototype.findlastindex: "npm:^1.2.6" - array.prototype.flat: "npm:^1.3.3" - array.prototype.flatmap: "npm:^1.3.3" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.1" - hasown: "npm:^2.0.2" - is-core-module: "npm:^2.16.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.1" - semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.9" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b - languageName: node - linkType: hard - "eslint-plugin-jsx-a11y@npm:^6.10.2": version: 6.10.2 resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" @@ -5488,6 +5429,17 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-node-import@npm:^1.2.0": + version: 1.2.0 + resolution: "eslint-plugin-node-import@npm:1.2.0" + dependencies: + globals: "npm:^17.3.0" + peerDependencies: + eslint: ">=7" + checksum: 10c0/b58e588b77d1fd55bd40ff5b99ba5c431f248389d5bce938c64d02c89488a2c7da617834331b4d2bbe13feb468fee1fafc340d44d13f77309e51a7447ea74674 + languageName: node + linkType: hard + "eslint-plugin-react-hooks@npm:^7.0.1": version: 7.0.1 resolution: "eslint-plugin-react-hooks@npm:7.0.1" @@ -6082,10 +6034,10 @@ __metadata: languageName: node linkType: hard -"globals@npm:^17.3.0": - version: 17.4.0 - resolution: "globals@npm:17.4.0" - checksum: 10c0/2be9e8c2b9035836f13d420b22f0247a328db82967d3bebfc01126d888ed609305f06c05895914e969653af5c6ba35fd7a0920f3e6c869afa60666c810630feb +"globals@npm:^17.3.0, globals@npm:^17.5.0": + version: 17.5.0 + resolution: "globals@npm:17.5.0" + checksum: 10c0/92828102ed2f5637907725f0478038bed02fc83e9fc89300bb753639ba7c022b6c02576fc772117302b431b204591db1f2fa909d26f3f0a9852cc856a941df3f languageName: node linkType: hard @@ -6767,6 +6719,13 @@ __metadata: languageName: node linkType: hard +"javascript-natural-sort@npm:^0.7.1": + version: 0.7.1 + resolution: "javascript-natural-sort@npm:0.7.1" + checksum: 10c0/340f8ffc5d30fb516e06dc540e8fa9e0b93c865cf49d791fed3eac3bdc5fc71f0066fc81d44ec1433edc87caecaf9f13eec4a1fce8c5beafc709a71eaedae6fe + languageName: node + linkType: hard + "jest-axe@npm:^10.0.0": version: 10.0.0 resolution: "jest-axe@npm:10.0.0" @@ -7429,17 +7388,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: "npm:^1.2.0" - bin: - json5: lib/cli.js - checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f - languageName: node - linkType: hard - "json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -7538,6 +7486,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:^4.17.21": + version: 4.18.1 + resolution: "lodash-es@npm:4.18.1" + checksum: 10c0/35d4dcf87ef07f8d090f409447575800108057e360b445f590d0d25d09e3d1e33a163d2fc100d4d072b0f901d5e2fc533cd7c4bfd8eeb38a06abec693823c8b8 + languageName: node + linkType: hard + "lodash.debounce@npm:^4.0.8": version: 4.0.8 resolution: "lodash.debounce@npm:4.0.8" @@ -7721,7 +7676,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": version: 9.0.9 resolution: "minimatch@npm:9.0.9" dependencies: @@ -7730,7 +7685,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": +"minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -7820,7 +7775,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.1.1, ms@npm:^2.1.3": +"ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -7874,7 +7829,7 @@ __metadata: "@babel/preset-env": "npm:^7.29.2" "@babel/preset-react": "npm:^7.28.5" "@babel/preset-typescript": "npm:^7.28.5" - "@eslint/compat": "npm:^2.0.3" + "@eslint/compat": "npm:^2.0.5" "@eslint/js": "npm:^9.39.4" "@rollup/plugin-babel": "npm:^7.0.0" "@rollup/plugin-commonjs": "npm:^29.0.2" @@ -7886,11 +7841,12 @@ __metadata: "@testing-library/dom": "npm:^10.4.1" "@testing-library/jest-dom": "npm:^6.9.1" "@testing-library/react": "npm:^16.3.2" + "@trivago/prettier-plugin-sort-imports": "npm:^6.0.2" "@types/eslint": "npm:^9.6.1" "@types/eslint-plugin-jsx-a11y": "npm:^6.10.1" "@types/jest": "npm:^30.0.0" "@types/jest-axe": "npm:^3.5.9" - "@types/node": "npm:^24.12.0" + "@types/node": "npm:^24.12.2" "@types/react": "npm:^19.2.14" "@types/react-dom": "npm:^19.2.3" babel-jest: "npm:^30.3.0" @@ -7900,17 +7856,17 @@ __metadata: eslint: "npm:^9.39.4" eslint-config-prettier: "npm:^10.1.8" eslint-import-resolver-typescript: "npm:^4.4.4" - eslint-plugin-import: "npm:^2.32.0" eslint-plugin-jsx-a11y: "npm:^6.10.2" + eslint-plugin-node-import: "npm:^1.2.0" eslint-plugin-react: "npm:^7.37.5" eslint-plugin-react-hooks: "npm:^7.0.1" - globals: "npm:^17.3.0" + globals: "npm:^17.5.0" jest: "npm:^30.3.0" jest-axe: "npm:^10.0.0" jest-environment-jsdom: "npm:^30.3.0" nhsuk-frontend: "npm:^10.3.1" outdent: "npm:^0.8.0" - prettier: "npm:^3.8.0" + prettier: "npm:^3.8.3" react: "npm:^19.2.5" react-dom: "npm:^19.2.5" rollup: "npm:^4.60.0" @@ -7919,7 +7875,7 @@ __metadata: storybook: "npm:^10.2.14" tslib: "npm:^2.8.1" typescript: "npm:^6.0.2" - typescript-eslint: "npm:^8.58.0" + typescript-eslint: "npm:^8.58.2" vite: "npm:^7.3.2" vite-tsconfig-paths: "npm:^6.1.1" peerDependencies: @@ -8067,17 +8023,6 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c - languageName: node - linkType: hard - "object.values@npm:^1.1.6, object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" @@ -8227,6 +8172,15 @@ __metadata: languageName: node linkType: hard +"parse-imports-exports@npm:^0.2.4": + version: 0.2.4 + resolution: "parse-imports-exports@npm:0.2.4" + dependencies: + parse-statements: "npm:1.0.11" + checksum: 10c0/51b729037208abdf65c4a1f8e9ed06f4e7ccd907c17c668a64db54b37d95bb9e92081f8b16e4133e14102af3cb4e89870975b6ad661b4d654e9ec8f4fb5c77d6 + languageName: node + linkType: hard + "parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -8239,6 +8193,13 @@ __metadata: languageName: node linkType: hard +"parse-statements@npm:1.0.11": + version: 1.0.11 + resolution: "parse-statements@npm:1.0.11" + checksum: 10c0/48960e085019068a5f5242e875fd9d21ec87df2e291acf5ad4e4887b40eab6929a8c8d59542acb85a6497e870c5c6a24f5ab7f980ef5f907c14cc5f7984a93f3 + languageName: node + linkType: hard + "parse5@npm:^7.0.0, parse5@npm:^7.2.1": version: 7.3.0 resolution: "parse5@npm:7.3.0" @@ -8381,12 +8342,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^3.8.0": - version: 3.8.1 - resolution: "prettier@npm:3.8.1" +"prettier@npm:^3.8.3": + version: 3.8.3 + resolution: "prettier@npm:3.8.3" bin: prettier: bin/prettier.cjs - checksum: 10c0/33169b594009e48f570471271be7eac7cdcf88a209eed39ac3b8d6d78984039bfa9132f82b7e6ba3b06711f3bfe0222a62a1bfb87c43f50c25a83df1b78a2c42 + checksum: 10c0/754816fd7593eb80f6376d7476d463e832c38a12f32775a82683adb6e35b772b1f484d65f19401507b983a8c8a7cd5a4a9f12006bd56491e8f35503473f77473 languageName: node linkType: hard @@ -8702,7 +8663,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.22.1, resolve@npm:^1.22.11, resolve@npm:^1.22.4, resolve@npm:^1.22.8": +"resolve@npm:^1.22.1, resolve@npm:^1.22.11, resolve@npm:^1.22.8": version: 1.22.11 resolution: "resolve@npm:1.22.11" dependencies: @@ -8728,7 +8689,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.11#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.11#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.11 resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" dependencies: @@ -9884,18 +9845,6 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": "npm:^0.0.29" - json5: "npm:^1.0.2" - minimist: "npm:^1.2.6" - strip-bom: "npm:^3.0.0" - checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 - languageName: node - linkType: hard - "tsconfig-paths@npm:^4.2.0": version: 4.2.0 resolution: "tsconfig-paths@npm:4.2.0" @@ -9990,18 +9939,18 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.58.0": - version: 8.58.0 - resolution: "typescript-eslint@npm:8.58.0" +"typescript-eslint@npm:^8.58.2": + version: 8.59.0 + resolution: "typescript-eslint@npm:8.59.0" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.58.0" - "@typescript-eslint/parser": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" - "@typescript-eslint/utils": "npm:8.58.0" + "@typescript-eslint/eslint-plugin": "npm:8.59.0" + "@typescript-eslint/parser": "npm:8.59.0" + "@typescript-eslint/typescript-estree": "npm:8.59.0" + "@typescript-eslint/utils": "npm:8.59.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/85b56c1d209d0d6e07c09f05d30e1da4fec88285f96edc22a9b09321c41dc0572d686ee33532747bcf40cc071927f5b9a6b91f2fbe14dc1c45111a490394ab41 + checksum: 10c0/b14b4bf6878e9745d92c0bc2b3c68ea29e8e524037a10e05873ad58b0dd1961313c05f406273b99c4128fd49bde2d9b3233bcec636896e9a70ed8167a3d0a9c5 languageName: node linkType: hard