diff --git a/.eslintignore b/.eslintignore index 984d8d11..f343b04e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,7 @@ example cypress -**/*.test.js \ No newline at end of file +**/*.test.js +**/*.test.ts +**/*.test.txs +dist/ +cypress.config.js diff --git a/.eslintrc b/.eslintrc index 6425ad49..453ad550 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,13 @@ { - "extends": ["@10up/eslint-config/react"], - "rules": { - "import/no-unresolved": 0, - "import/no-extraneous-dependencies": 0, - "react/jsx-props-no-spreading": 0, - "jsdoc/check-tag-names": 0, + "parser": "@typescript-eslint/parser", + "extends": [ + "@10up/eslint-config/react" + ], + "rules": { + "import/no-unresolved": 0, + "import/no-extraneous-dependencies": 0, + "react/jsx-props-no-spreading": 0, + "jsdoc/check-tag-names": 0, "import/extensions": 0 - } + } } \ No newline at end of file diff --git a/components/author/context.ts b/components/author/context.ts index e11f0e24..649c4c8e 100644 --- a/components/author/context.ts +++ b/components/author/context.ts @@ -32,4 +32,4 @@ export const AuthorContext = createContext({ export const useAuthor = () => { return useContext(AuthorContext); -} +}; diff --git a/components/author/index.tsx b/components/author/index.tsx index d6b51f2e..e55905ff 100644 --- a/components/author/index.tsx +++ b/components/author/index.tsx @@ -3,21 +3,21 @@ import { store as blockEditorStore } from '@wordpress/block-editor'; import { useAuthor } from './context'; interface NameProps { - tagName?: keyof JSX.IntrinsicElements; - [key: string]: unknown; + tagName?: keyof JSX.IntrinsicElements; + [key: string]: unknown; } export const Name: React.FC = (props) => { - const { tagName: TagName = 'span', ...rest } = props; - const { name, link } = useAuthor(); + const { tagName: TagName = 'span', ...rest } = props; + const { name, link } = useAuthor(); - const wrapperProps = { ...rest }; + const wrapperProps = { ...rest }; - if (TagName === 'a' && link) { - wrapperProps.href = link; - } + if (TagName === 'a' && link) { + wrapperProps.href = link; + } - return {name}; + return {name}; }; interface FirstNameProps { @@ -66,6 +66,7 @@ export const Avatar: React.FC = (props) => { const avatarSourceUrl = avatarUrls ? avatarUrls[avatarUrls.length - 1] : defaultAvatar; + // eslint-disable-next-line jsx-a11y/alt-text return ; }; diff --git a/components/color-settings/index.tsx b/components/color-settings/index.tsx index 14f8c59f..1da2959b 100644 --- a/components/color-settings/index.tsx +++ b/components/color-settings/index.tsx @@ -9,64 +9,64 @@ interface ColorSettingProps { /** * If this property is added, a label will be generated using label property as the content. */ - label?: string, + label?: string; /** * If true, the label will only be visible to screen readers. */ - hideLabelFromVision?: boolean, + hideLabelFromVision?: boolean; /** * If this property is added, a help text will be generated using help property as the content. */ - help?: string, + help?: string; /** * If no className is passed only components-base-control is used. */ - className?: string, + className?: string; /** * Whether to allow custom color or not. */ - disableCustomColors?: boolean, + disableCustomColors?: boolean; /** * currently active value. */ - value?: string, + value?: string; /** * Whether the palette should have a clearing button or not. */ - clearable?: boolean, + clearable?: boolean; /** * Array with the colors to be shown. */ - colors: Array, + colors: Array; /** * Callback called when a color is selected. */ - onChange: Function, + onChange: Function; } interface Color { /** * Color name. */ - name: string, + name: string; /** * Color hex code. */ - color: string, + color: string; } // eslint-disable-next-line import/prefer-default-export export const ColorSetting: React.FC = ({ - label= '', + label = '', help = '', className = '', hideLabelFromVision = false, diff --git a/components/content-search/SearchItem.tsx b/components/content-search/SearchItem.tsx index 4bb29a8e..c3d6cac8 100644 --- a/components/content-search/SearchItem.tsx +++ b/components/content-search/SearchItem.tsx @@ -68,6 +68,11 @@ interface SearchItemProps { renderType?: (suggestion: Suggestion) => string; } +export function defaultRenderItemType(suggestion: Suggestion): string { + // Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label. + return suggestion.type === 'post_tag' ? 'tag' : suggestion.subtype; +} + const SearchItem: React.FC = ({ suggestion, onClick, @@ -127,9 +132,4 @@ const SearchItem: React.FC = ({ ); }; -export function defaultRenderItemType(suggestion: Suggestion): string { - // Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label. - return suggestion.type === 'post_tag' ? 'tag' : suggestion.subtype; -} - export default SearchItem; diff --git a/components/content-search/index.tsx b/components/content-search/index.tsx index 27a89001..b24a1ba1 100644 --- a/components/content-search/index.tsx +++ b/components/content-search/index.tsx @@ -116,8 +116,8 @@ const ContentSearch: React.FC = ({ fetchInitialResults, }) => { const [searchString, setSearchString] = useState(''); - const [searchQueries, setSearchQueries] = useState<{[key: string]: QueryCache}>({}); - const [selectedItem, setSelectedItem] = useState(null); + const [searchQueries, setSearchQueries] = useState<{ [key: string]: QueryCache }>({}); + const [selectedItem, setSelectedItem] = useState(null); const [currentPage, setCurrentPage] = useState(1); const [isFocused, setIsFocused] = useState(false); @@ -219,13 +219,16 @@ const ContentSearch: React.FC = ({ const normalizedResults = filterResults(result); if (mode === 'user') { - return normalizedResults.map((item) => ({ - id: item.id, - subtype: mode, - title: item.name || '', - type: mode, - url: item.link || '', - } as SearchResult)); + return normalizedResults.map( + (item) => + ({ + id: item.id, + subtype: mode, + title: item.name || '', + type: mode, + url: item.link || '', + }) as SearchResult, + ); } return normalizedResults; @@ -255,7 +258,7 @@ const ContentSearch: React.FC = ({ if (!searchQueries[preparedQuery] || searchQueries[preparedQuery].controller === 1) { setSearchQueries((queries) => { // New queries. - const newQueries: {[key: string]: QueryCache} = {}; + const newQueries: { [key: string]: QueryCache } = {}; // Remove errored or cancelled queries. Object.keys(queries).forEach((query) => { @@ -314,7 +317,7 @@ const ContentSearch: React.FC = ({ }) .then((results: Response) => { const totalPages = parseInt( - ( results.headers && results.headers.get('X-WP-TotalPages') ) || '0', + (results.headers && results.headers.get('X-WP-TotalPages')) || '0', 10, ); @@ -401,7 +404,11 @@ const ContentSearch: React.FC = ({ if (i === currentPage) { isLoading = false; - if ( searchQuery.totalPages && searchQuery.currentPage && searchQuery.totalPages > searchQuery.currentPage) { + if ( + searchQuery.totalPages && + searchQuery.currentPage && + searchQuery.totalPages > searchQuery.currentPage + ) { showLoadMore = true; } } @@ -424,9 +431,7 @@ const ContentSearch: React.FC = ({ useEffect(() => { document.addEventListener('mouseup', (e: MouseEvent) => { // Bail if anywhere inside search container is clicked. - if ( - searchContainer.current?.contains(e.target as Node) - ) { + if (searchContainer.current?.contains(e.target as Node)) { return; } @@ -436,7 +441,11 @@ const ContentSearch: React.FC = ({ return ( - + { @@ -454,7 +463,12 @@ const ContentSearch: React.FC = ({ {hasSearchString || hasInitialResults ? ( <> - {isLoading && currentPage === 1 && } + {isLoading && currentPage === 1 && ( + + )} {!isLoading && !hasSearchResults && (
  • = ({ {__('Nothing found.', '10up-block-components')}
  • )} - { - (!isLoading || currentPage > 1) && + {(!isLoading || currentPage > 1) && searchResults && searchResults.map((item, index) => { if (!item.title.length) { @@ -522,7 +535,12 @@ const ContentSearch: React.FC = ({ )} - {isLoading && currentPage > 1 && } + {isLoading && currentPage > 1 && ( + + )} ) : null}
    diff --git a/components/counter/index.tsx b/components/counter/index.tsx index 19841251..e4eeb37d 100644 --- a/components/counter/index.tsx +++ b/components/counter/index.tsx @@ -1,8 +1,8 @@ import { forwardRef } from '@wordpress/element'; import cx from 'classnames'; import styled from '@emotion/styled'; -import { StyledComponentContext } from '../styled-components-context'; import { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes, FC } from 'react'; +import { StyledComponentContext } from '../styled-components-context'; const StyledSvg = styled('svg')` transform: rotate(-90deg); @@ -63,9 +63,7 @@ interface CircularProgressBarProps { percentage: number; } -const CircularProgressBar: FC = ({ - percentage -}) => { +const CircularProgressBar: FC = ({ percentage }) => { const radius = 90; const circumference = 2 * Math.PI * radius; @@ -164,32 +162,28 @@ interface CounterProps { [key: string]: unknown; } -const Counter: ForwardRefExoticComponent & RefAttributes> = forwardRef( - ({ - count, - limit, - ...rest - }, ref ) => { - const percentage = (count / limit) * 100; - return ( - - limit, - })} - ref={ref} - {...rest} - > -
    - {count}{' '} - /{' '} - {limit} -
    - -
    -
    - ); - } -); +const Counter: ForwardRefExoticComponent< + PropsWithoutRef & RefAttributes +> = forwardRef(({ count, limit, ...rest }, ref) => { + const percentage = (count / limit) * 100; + return ( + + limit, + })} + ref={ref} + {...rest} + > +
    + {count}{' '} + /{' '} + {limit} +
    + +
    +
    + ); +}); export { CircularProgressBar, Counter }; diff --git a/components/icon-picker/icon-picker-toolbar-button.tsx b/components/icon-picker/icon-picker-toolbar-button.tsx index 33ef706e..1f6090d4 100644 --- a/components/icon-picker/icon-picker-toolbar-button.tsx +++ b/components/icon-picker/icon-picker-toolbar-button.tsx @@ -33,14 +33,14 @@ export const IconPickerToolbarButton: React.FC = ( }} renderToggle={({ isOpen, onToggle }) => ( - { buttonLabel } + {buttonLabel} )} renderContent={() => } diff --git a/components/icon-picker/icon-picker.tsx b/components/icon-picker/icon-picker.tsx index a181167a..9b0662a4 100644 --- a/components/icon-picker/icon-picker.tsx +++ b/components/icon-picker/icon-picker.tsx @@ -16,21 +16,31 @@ import { useFilteredList } from '../../hooks/use-filtered-list'; import { Icon } from './icon'; -const StyledIconGrid = styled(Grid)` - .component-icon-picker__checkbox-control { - margin-bottom: 0; - } - - .components-checkbox-control__input, - .components-checkbox-control__input-container { - display: none; - } -`; +/** + * TooltipContent + * + * The `@wordpress/components` Tooltip component tries to clone the child element + * passed into it. This child will get some additional children passed in. In some cases + * this clashes with elements that use dangerouslySetInnerHTML. This component is a + * workaround for that. It will just wrap the children in a div and pass that to the + * Tooltip component. + */ +const TooltipContent = forwardRef>( + function TooltipContent(props, ref) { + const { children } = props; + + return ( +
    + {children} +
    + ); + }, +); const StyledIconButton = styled(Icon)` - background-color: ${({ selected } : { selected: boolean }) => (selected ? 'black' : 'white')}; - color: ${({ selected } : { selected: boolean }) => (selected ? 'white' : 'black')}; - fill: ${({ selected } : { selected: boolean }) => (selected ? 'white' : 'black')}; + background-color: ${({ selected }: { selected: boolean }) => (selected ? 'black' : 'white')}; + color: ${({ selected }: { selected: boolean }) => (selected ? 'white' : 'black')}; + fill: ${({ selected }: { selected: boolean }) => (selected ? 'white' : 'black')}; padding: 5px; border: none; border-radius: 4px; @@ -53,61 +63,6 @@ const StyledIconButton = styled(Icon)` } `; -export type IconPickerProps = Omit, 'children'> & { - /** - * Value of the selected icon - */ - value: { name: string; iconSet: string }; - /** - * Change handler for when a new icon is selected - */ - onChange: (icon: { name: string; iconSet: string }) => void; -} - -export const IconPicker: React.FC = (props) => { - const { value, onChange, label = '', ...rest } = props; - - const icons = useIcons(); - - const instanceId = useInstanceId(IconPicker); - const id = `icon-picker-${instanceId}`; - - const [searchTerm, setSearchTerm] = useState(''); - const [filteredIcons] = useFilteredList(icons, searchTerm); - - const hasIcons = !!filteredIcons.length; - - return ( - - - {hasIcons ? ( - - ) : ( -

    {__('No icons were found...')}

    - )} -
    - ); -}; - -/** - * TooltipContent - * - * The `@wordpress/components` Tooltip component tries to clone the child element - * passed into it. This child will get some additional children passed in. In some cases - * this clashes with elements that use dangerouslySetInnerHTML. This component is a - * workaround for that. It will just wrap the children in a div and pass that to the - * Tooltip component. - */ -const TooltipContent = forwardRef>(function TooltipContent(props, ref) { - const { children } = props; - - return ( -
    - {children} -
    - ); -}); - interface IconLabelProps { /** * Icon object @@ -170,7 +125,7 @@ const IconGridItem = memo((props) => { } // We need to cast the IconLabel to a string because types in WP are not correct - const label = as unknown as string; + const label = () as unknown as string; return (
    @@ -185,6 +140,17 @@ const IconGridItem = memo((props) => { ); }, areEqual); +const StyledIconGrid = styled(Grid)` + .component-icon-picker__checkbox-control { + margin-bottom: 0; + } + + .components-checkbox-control__input, + .components-checkbox-control__input-container { + display: none; + } +`; + interface IconGridProps { /** * List of icons @@ -224,3 +190,39 @@ const IconGrid: React.FC = (props) => { ); }; + +export type IconPickerProps = Omit, 'children'> & { + /** + * Value of the selected icon + */ + value: { name: string; iconSet: string }; + /** + * Change handler for when a new icon is selected + */ + onChange: (icon: { name: string; iconSet: string }) => void; +}; + +export const IconPicker: React.FC = (props) => { + const { value, onChange, label = '', ...rest } = props; + + const icons = useIcons(); + + const instanceId = useInstanceId(IconPicker); + const id = `icon-picker-${instanceId}`; + + const [searchTerm, setSearchTerm] = useState(''); + const [filteredIcons] = useFilteredList(icons, searchTerm); + + const hasIcons = !!filteredIcons.length; + + return ( + + + {hasIcons ? ( + + ) : ( +

    {__('No icons were found...')}

    + )} +
    + ); +}; diff --git a/components/icon-picker/icon.tsx b/components/icon-picker/icon.tsx index 6b2b65d9..2e4b8073 100644 --- a/components/icon-picker/icon.tsx +++ b/components/icon-picker/icon.tsx @@ -17,26 +17,33 @@ interface IconProps { onClick?: () => void; } -export const Icon: React.FC = forwardRef(function Icon(props, ref) { - const { name, iconSet, onClick, ...rest } = props; - const icon = useIcon(iconSet, name); +export const Icon: React.FC = forwardRef( + function Icon(props, ref) { + const { name, iconSet, onClick, ...rest } = props; + const icon = useIcon(iconSet, name); - if (!icon || Array.isArray(icon)) { - // @ts-ignore -- Types on WP seem to require onPointerEnterCapture and onPointerLeaveCapture - return ; - } + if (!icon || Array.isArray(icon)) { + // @ts-ignore -- Types on WP seem to require onPointerEnterCapture and onPointerLeaveCapture + return ; + } - // only add interactive props to component if a onClick handler was provided - const iconProps: React.JSX.IntrinsicElements['div'] = {}; - if (typeof onClick === 'function') { - iconProps.role = 'button'; - iconProps.tabIndex = 0; - iconProps['aria-label'] = 'Change Icon'; - iconProps.onClick = onClick; - } + // only add interactive props to component if a onClick handler was provided + const iconProps: React.JSX.IntrinsicElements['div'] = {}; + if (typeof onClick === 'function') { + iconProps.role = 'button'; + iconProps.tabIndex = 0; + iconProps['aria-label'] = 'Change Icon'; + iconProps.onClick = onClick; + } - return ( - // eslint-disable-next-line react/no-danger -
    - ); -}); + return ( +
    + ); + }, +); diff --git a/components/icon-picker/inline-icon-picker.tsx b/components/icon-picker/inline-icon-picker.tsx index 350c9e68..de609cef 100644 --- a/components/icon-picker/inline-icon-picker.tsx +++ b/components/icon-picker/inline-icon-picker.tsx @@ -11,20 +11,6 @@ const StyledIconPickerDropdown = styled(IconPicker)` height: 248px; `; -export const InlineIconPicker: React.FC = (props) => { - const { value, ...rest } = props; - const IconButton = useCallback( - ({ onToggle }: { - onToggle: () => void; - }) => ( - - ), - [value, rest], - ); - - return ; -}; - interface InlineIconPickerProps extends IconPickerProps { /** * Render function for the toggle button @@ -45,3 +31,15 @@ export const IconPickerDropdown: React.FC = (props) => { /> ); }; + +export const InlineIconPicker: React.FC = (props) => { + const { value, ...rest } = props; + const IconButton = useCallback( + ({ onToggle }: { onToggle: () => void }) => ( + + ), + [value, rest], + ); + + return ; +}; diff --git a/components/inner-block-slider/index.js b/components/inner-block-slider/index.js index dc0e05f4..755b4c6e 100644 --- a/components/inner-block-slider/index.js +++ b/components/inner-block-slider/index.js @@ -1,3 +1,6 @@ +/* eslint-disable */ +// @ts-nocheck +// eslint-disable-file import { useSelect, useDispatch } from '@wordpress/data'; import { useEffect, useState, useRef } from '@wordpress/element'; import { createBlock } from '@wordpress/blocks'; diff --git a/components/is-admin/index.tsx b/components/is-admin/index.tsx index fb8ab700..53083f8b 100644 --- a/components/is-admin/index.tsx +++ b/components/is-admin/index.tsx @@ -12,17 +12,14 @@ interface IsAdminProps { children: React.ReactNode; } -/** +/* * IsAdmin * * A wrapper component that checks wether the current user has admin capabilities * and only returns the child components if the user is an admin. You can pass a * fallback component via the fallback prop. */ -export const IsAdmin: React.FC = ({ - fallback = null, - children, -}) => { +export const IsAdmin: React.FC = ({ fallback = null, children }) => { const hasAdminPermissions: boolean = useSelect( (select) => select('core').canUser('read', 'users?roles=1'), [], diff --git a/components/link/index.js b/components/link/index.js index e87c960a..d183f6ac 100644 --- a/components/link/index.js +++ b/components/link/index.js @@ -38,6 +38,8 @@ function getSuggestionsQuery(type, kind) { return { type: 'term', subtype: 'post_tag' }; case 'post_format': return { type: 'post-format' }; + default: + break; } switch (kind) { diff --git a/components/media-toolbar/index.tsx b/components/media-toolbar/index.tsx index b21ac4ca..5c9daeb9 100644 --- a/components/media-toolbar/index.tsx +++ b/components/media-toolbar/index.tsx @@ -1,8 +1,8 @@ import { __ } from '@wordpress/i18n'; import { MediaReplaceFlow, MediaUpload, MediaUploadCheck } from '@wordpress/block-editor'; import { ToolbarGroup, ToolbarButton } from '@wordpress/components'; -import { useMedia } from '../../hooks/use-media'; import type { Attachment } from '@wordpress/core-data'; +import { useMedia } from '../../hooks/use-media'; interface MediaToolbarProps { /** @@ -26,18 +26,20 @@ interface MediaToolbarProps { id: number; } -/** +/* * MediaToolbar * * This is a helper component that adds the Media Replace Flow * with some buttons to add or remove an image. * * This should be used on components that have optional images. - * - * @param {object} props options - * @returns {React.ReactElement} markup of the ToolbarGroup */ -export const MediaToolbar: React.FC = ( { onSelect, onRemove, isOptional = false, id } ) => { +export const MediaToolbar: React.FC = ({ + onSelect, + onRemove, + isOptional = false, + id, +}) => { const hasImage = !!id; const { media } = useMedia(id); diff --git a/components/optional/index.ts b/components/optional/index.ts index ba8ded85..0863f381 100644 --- a/components/optional/index.ts +++ b/components/optional/index.ts @@ -12,10 +12,7 @@ interface OptionalProps { children: React.ReactNode; } -export const Optional: React.FC = ({ - value = '', - children, -}) => { +export const Optional: React.FC = ({ value = '', children }) => { const { isSelected } = useBlockEditContext(); return (isSelected || !!value) && children; }; diff --git a/components/post-date/index.tsx b/components/post-date/index.tsx index 315b1e6e..0a1707ef 100644 --- a/components/post-date/index.tsx +++ b/components/post-date/index.tsx @@ -2,9 +2,9 @@ import { __ } from '@wordpress/i18n'; import { DateTimePicker } from '@wordpress/components'; import { getSettings, dateI18n } from '@wordpress/date'; import { useEntityProp } from '@wordpress/core-data'; +import type { DateSettings } from '@wordpress/date'; import { usePopover } from '../../hooks/use-popover'; import { usePost } from '../../hooks'; -import type { DateSettings } from '@wordpress/date'; interface PostDatePickerProps { date?: string; @@ -44,7 +44,11 @@ interface PostDateProps { [key: string]: unknown; } -export const PostDate: React.FC = ({ placeholder = __('No date set', 'tenup'), format, ...rest}) => { +export const PostDate: React.FC = ({ + placeholder = __('No date set', 'tenup'), + format, + ...rest +}) => { const { postId, postType, isEditable } = usePost(); const [date, setDate] = useEntityProp('postType', postType, 'date', postId as string); diff --git a/components/post-meta/index.tsx b/components/post-meta/index.tsx index cfdbabc9..6ab3f990 100644 --- a/components/post-meta/index.tsx +++ b/components/post-meta/index.tsx @@ -4,6 +4,59 @@ import type { ToggleControlProps } from '@wordpress/components/src/toggle-contro import { usePostMetaValue, useIsSupportedMetaField } from '../../hooks'; import { toSentence } from './utilities'; +interface MetaStringProps { + /** + * The meta key to use. + */ + metaKey: string; + + /** + * A valid HTML tag. + */ + tagName?: keyof JSX.IntrinsicElements; +} + +const MetaString: React.FC = (props) => { + const { metaKey, tagName = 'p' } = props; + const [metaValue, setMetaValue] = usePostMetaValue(metaKey); + + return ; +}; + +interface MetaNumberProps { + /** + * The meta key to use. + */ + metaKey: string; +} + +const MetaNumber: React.FC = (props) => { + const { metaKey } = props; + const [metaValue, setMetaValue] = usePostMetaValue(metaKey); + + return ( + setMetaValue(parseInt(value ?? '', 10))} + {...props} + /> + ); +}; + +interface MetaBooleanProps extends Pick { + /** + * The meta key to use. + */ + metaKey: string; +} + +const MetaBoolean: React.FC = (props) => { + const { metaKey } = props; + const [metaValue, setMetaValue] = usePostMetaValue(metaKey); + + return ; +}; + interface PostMetaProps { /** * The meta key to use. @@ -13,7 +66,7 @@ interface PostMetaProps { /** * The children render prop. */ - children?: ((metaValue: any, setMetaValue: (value: any) => void) => React.ReactNode); + children?: (metaValue: any, setMetaValue: (value: any) => void) => React.ReactNode; /** * Additional props to pass to the component. @@ -52,53 +105,6 @@ export const PostMeta: React.FC & { return ; }; -interface MetaStringProps { - /** - * The meta key to use. - */ - metaKey: string; - - /** - * A valid HTML tag. - */ - tagName?: keyof JSX.IntrinsicElements; -} - -const MetaString: React.FC = (props) => { - const { metaKey, tagName = 'p' } = props; - const [metaValue, setMetaValue] = usePostMetaValue(metaKey); - - return ; -}; - -interface MetaNumberProps { - /** - * The meta key to use. - */ - metaKey: string; -} - -const MetaNumber: React.FC = (props) => { - const { metaKey } = props; - const [metaValue, setMetaValue] = usePostMetaValue(metaKey); - - return setMetaValue(parseInt(value ?? ''))} {...props} />; -}; - -interface MetaBooleanProps extends Pick { - /** - * The meta key to use. - */ - metaKey: string; -} - -const MetaBoolean: React.FC = (props) => { - const { metaKey } = props; - const [metaValue, setMetaValue] = usePostMetaValue(metaKey); - - return ; -}; - PostMeta.String = MetaString; PostMeta.Number = MetaNumber; PostMeta.Boolean = MetaBoolean; diff --git a/components/post-term-list/index.js b/components/post-term-list/index.js index 6a4a074d..b06b3cfd 100644 --- a/components/post-term-list/index.js +++ b/components/post-term-list/index.js @@ -6,9 +6,9 @@ import { PostTaxonomiesHierarchicalTermSelector, PostTaxonomiesFlatTermSelector, } from '@wordpress/editor'; +import { Optional } from '@10up/block-components'; import { usePopover, usePost, useSelectedTerms, useTaxonomy } from '../../hooks'; -import { Optional } from '..'; import { PostTermContext } from './context'; import { ListItem, TermLink } from './item'; diff --git a/components/post-title/index.tsx b/components/post-title/index.tsx index f764eeb4..bcd1f06d 100644 --- a/components/post-title/index.tsx +++ b/components/post-title/index.tsx @@ -4,22 +4,23 @@ import { useSelect } from '@wordpress/data'; import { usePost } from '../../hooks'; interface PostTitleProps { - tagName?: TElementType | keyof JSX.IntrinsicElements; + tagName: TElementType | keyof JSX.IntrinsicElements; } -type PostTitlePropsWithOmit = PostTitleProps & Omit, keyof PostTitleProps>; +type PostTitlePropsWithOmit = PostTitleProps & + Omit, keyof PostTitleProps>; export const PostTitle = ({ tagName: TagName = 'h1', ...rest -}: PostTitlePropsWithOmit ) => { +}: PostTitlePropsWithOmit) => { const { postId, postType, isEditable } = usePost(); const [rawTitle = '', setTitle, fullTitle] = useEntityProp( 'postType', postType, 'title', - postId, + postId as undefined | string, ); const titlePlaceholder = useSelect( diff --git a/components/repeater/index.js b/components/repeater/index.js index 1e6365a8..7659306b 100644 --- a/components/repeater/index.js +++ b/components/repeater/index.js @@ -42,7 +42,7 @@ export const AttributeRepeater = ({ children, attribute, addButton, allowReorder }; }); - if ( defaultRepeaterData.length ) { + if (defaultRepeaterData.length) { defaultRepeaterData[0].id = uuid(); } diff --git a/cypress.config.js b/cypress.config.js index 421424eb..d491e873 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -1,21 +1,21 @@ -const { defineConfig } = require('cypress') +const { defineConfig } = require('cypress'); module.exports = defineConfig({ - projectId: 'dnr1ke', - videoCompression: 15, - viewportWidth: 1536, - viewportHeight: 960, - env: { - username: 'admin', - password: 'password', - }, - e2e: { - // We've imported your old cypress plugins here. - // You may want to clean this up later by importing these. - setupNodeEvents(on, config) { - return require('./cypress/plugins/index.js')(on, config) - }, - baseUrl: 'http://localhost:8889', - specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}', - }, -}) + projectId: 'dnr1ke', + videoCompression: 15, + viewportWidth: 1536, + viewportHeight: 960, + env: { + username: 'admin', + password: 'password', + }, + e2e: { + // We've imported your old cypress plugins here. + // You may want to clean this up later by importing these. + setupNodeEvents(on, config) { + return require('./cypress/plugins/index.js')(on, config); + }, + baseUrl: 'http://localhost:8889', + specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}', + }, +}); diff --git a/hooks/use-all-terms/index.ts b/hooks/use-all-terms/index.ts index a4901a32..79e173fb 100644 --- a/hooks/use-all-terms/index.ts +++ b/hooks/use-all-terms/index.ts @@ -18,7 +18,10 @@ export const useAllTerms = (taxonomyName: string) => { const terms = getEntityRecords(...termsSelector); - const hasResolvedTerms: boolean = hasFinishedResolution('getEntityRecords', termsSelector); + const hasResolvedTerms: boolean = hasFinishedResolution( + 'getEntityRecords', + termsSelector, + ); return [terms, hasResolvedTerms] as const; }, diff --git a/hooks/use-block-parent-attributes/index.ts b/hooks/use-block-parent-attributes/index.ts index 57e17aff..85ddb1a5 100644 --- a/hooks/use-block-parent-attributes/index.ts +++ b/hooks/use-block-parent-attributes/index.ts @@ -1,7 +1,7 @@ import { useSelect, useDispatch } from '@wordpress/data'; import { store as blockEditorStore, useBlockEditContext } from '@wordpress/block-editor'; -/** +/* * useBlockParentAttributes * * allows you to easily interface with the attributes of the direct @@ -9,18 +9,22 @@ import { store as blockEditorStore, useBlockEditContext } from '@wordpress/block */ export function useBlockParentAttributes() { const { clientId } = useBlockEditContext(); - const parentBlocks = useSelect((select) => select(blockEditorStore).getBlockParents(clientId), [clientId]); + const parentBlocks = useSelect( + (select) => select(blockEditorStore).getBlockParents(clientId), + [clientId], + ); const parentBlockClientId = parentBlocks[parentBlocks.length - 1]; - const parentBlock = useSelect((select) => - select(blockEditorStore).getBlock(parentBlockClientId), [parentBlockClientId] + const parentBlock = useSelect( + (select) => select(blockEditorStore).getBlock(parentBlockClientId), + [parentBlockClientId], ); const { updateBlockAttributes } = useDispatch(blockEditorStore); - const setParentAttributes = (attributes: {[key: string]: unknown}) => { + const setParentAttributes = (attributes: { [key: string]: unknown }) => { updateBlockAttributes(parentBlockClientId, attributes); }; - return [parentBlock?.attributes as Object ?? {}, setParentAttributes] as const; + return [(parentBlock?.attributes as Object) ?? {}, setParentAttributes] as const; } diff --git a/hooks/use-filtered-list/index.ts b/hooks/use-filtered-list/index.ts index 119000b9..fa6a9877 100644 --- a/hooks/use-filtered-list/index.ts +++ b/hooks/use-filtered-list/index.ts @@ -12,7 +12,11 @@ const fuzzy = new uFuzzy(); * @param {string?} property name of the prop * @returns {Array} filtered list */ -export function useFilteredList(list: TListItem[] = [], searchTerm = '', property: keyof TListItem = 'name') { +export function useFilteredList( + list: TListItem[] = [], + searchTerm = '', + property: keyof TListItem = 'name', +) { const [filteredList, setFilteredList] = useState(list); const propertyList = useMemo(() => list.map((item) => item[property]), [list, property]); diff --git a/hooks/use-has-selected-inner-block/index.ts b/hooks/use-has-selected-inner-block/index.ts index 3d6b3347..772ea19e 100644 --- a/hooks/use-has-selected-inner-block/index.ts +++ b/hooks/use-has-selected-inner-block/index.ts @@ -1,7 +1,7 @@ import { useSelect } from '@wordpress/data'; import { useBlockEditContext, store as blockEditorStore } from '@wordpress/block-editor'; -/** +/* * useHasSelectedInnerBlock * Determine whether one of the inner blocks currently is selected */ @@ -10,6 +10,6 @@ export function useHasSelectedInnerBlock(): boolean { return useSelect( (select) => select(blockEditorStore).hasSelectedInnerBlock(clientId, true), - [clientId] + [clientId], ); } diff --git a/hooks/use-is-plugin-active/index.ts b/hooks/use-is-plugin-active/index.ts index 715d4b9d..bf3c1b7b 100644 --- a/hooks/use-is-plugin-active/index.ts +++ b/hooks/use-is-plugin-active/index.ts @@ -7,18 +7,18 @@ const ACTIVE_STATUSES = ['active', 'network-active'] as const; /** * Custom hook to check if a plugin is active and whether its resolution has finished. * - * @param pluginName The name of the plugin to check. - * @returns A tuple containing two boolean values: the first indicating whether the plugin is active, - * and the second indicating whether the resolution for the plugin has finished. + * @param {string} pluginName The name of the plugin to check. + * @returns {[boolean, boolean]} A tuple with the first value being whether the plugin is active and the second value being whether the resolution has finished. */ export const useIsPluginActive = (pluginName: string) => { return useSelect( (select) => { const storeSelectors = select(coreStore); const plugin: Plugin = (storeSelectors as any).getPlugin(pluginName); - const hasResolvedPlugins: boolean = (storeSelectors as any).hasFinishedResolution('getPlugin', [ - pluginName, - ]); + const hasResolvedPlugins: boolean = (storeSelectors as any).hasFinishedResolution( + 'getPlugin', + [pluginName], + ); const isPluginActive: boolean = ACTIVE_STATUSES.includes(plugin?.status); diff --git a/hooks/use-is-supported-meta-value/index.ts b/hooks/use-is-supported-meta-value/index.ts index df00f893..ec7de967 100644 --- a/hooks/use-is-supported-meta-value/index.ts +++ b/hooks/use-is-supported-meta-value/index.ts @@ -4,7 +4,7 @@ import { usePost } from '../use-post'; export const useIsSupportedMetaField = (metaKey: string) => { const { postId, postType } = usePost(); const { record } = useEntityRecord('postType', postType, postId as number); - const { meta } = record as { meta?: Object } || {}; // Add type assertion + const { meta } = (record as { meta?: Object }) || {}; // Add type assertion const supportedMetaKeys = Object.keys(meta || {}); const isSupportedMetaField = supportedMetaKeys?.some((name) => name === metaKey); return [!!isSupportedMetaField] as const; diff --git a/hooks/use-on-click-outside.ts b/hooks/use-on-click-outside.ts index 1f5fef38..8e8ff5d8 100644 --- a/hooks/use-on-click-outside.ts +++ b/hooks/use-on-click-outside.ts @@ -12,7 +12,7 @@ export function useOnClickOutside(onClickOutside: (event: MouseEvent | TouchEven const ref = useRefEffect( (element) => { if (!element) { - return; + return () => {}; } const listener = (event: MouseEvent | TouchEvent) => { // Do nothing if clicking ref's element or descendent elements @@ -25,7 +25,8 @@ export function useOnClickOutside(onClickOutside: (event: MouseEvent | TouchEven const ownerDocument = element.ownerDocument || document; const isRenderedInsideIframe = ownerDocument !== document; - const editorCanvasIframe = document.querySelector('[name="editor-canvas"]'); + const editorCanvasIframe = + document.querySelector('[name="editor-canvas"]'); const editorCanvasDocument = editorCanvasIframe?.contentDocument; ownerDocument.addEventListener('mousedown', listener); @@ -37,8 +38,8 @@ export function useOnClickOutside(onClickOutside: (event: MouseEvent | TouchEven document.addEventListener('mousedown', listener); document.addEventListener('touchstart', listener); - // If the element is rendered outside the editor canvas iframe, we need to listen to events on the editor canvas - // document as well to detect clicks inside the editor canvas. + // If the element is rendered outside the editor canvas iframe, we need to listen to events on the editor canvas + // document as well to detect clicks inside the editor canvas. } else if (editorCanvasDocument) { editorCanvasDocument.addEventListener('mousedown', listener); editorCanvasDocument.addEventListener('touchstart', listener); diff --git a/hooks/use-primary-term/index.ts b/hooks/use-primary-term/index.ts index f3844bab..4bbf508b 100644 --- a/hooks/use-primary-term/index.ts +++ b/hooks/use-primary-term/index.ts @@ -1,10 +1,10 @@ import { useSelect } from '@wordpress/data'; import { __ } from '@wordpress/i18n'; +import { store as coreStore } from '@wordpress/core-data'; +import type { WP_REST_API_Taxonomy } from 'wp-types'; import { usePost } from '../use-post'; import { useIsPluginActive } from '../use-is-plugin-active'; import { useIsSupportedTaxonomy } from '../use-is-supported-taxonomy'; -import { store as coreStore } from '@wordpress/core-data'; -import type { WP_REST_API_Taxonomy } from 'wp-types'; export const usePrimaryTerm = (taxonomyName: string) => { const { postType, isEditable } = usePost(); @@ -68,5 +68,8 @@ export const usePrimaryTerm = (taxonomyName: string) => { [primaryTermId], ); - return [!isEditable ? { name: __('Primary Term', 'tenup') } : primaryTerm, isSupportedTaxonomy] as const; + return [ + !isEditable ? { name: __('Primary Term', 'tenup') } : primaryTerm, + isSupportedTaxonomy, + ] as const; }; diff --git a/hooks/use-script/index.ts b/hooks/use-script/index.ts index b0bcf982..b5977bec 100644 --- a/hooks/use-script/index.ts +++ b/hooks/use-script/index.ts @@ -6,7 +6,9 @@ import { useEffect, useRef, useState } from '@wordpress/element'; * @param {string} scriptSource Source URL of the script to be loaded. * @returns {HTMLScriptElement} The script tag. */ -export const useScript = (scriptSource: string): { hasLoaded: boolean, scriptElement: HTMLScriptElement | null } => { +export const useScript = ( + scriptSource: string, +): { hasLoaded: boolean; scriptElement: HTMLScriptElement | null } => { const scriptElement = useRef(null); const [scriptLoaded, setScriptLoaded] = useState(false); diff --git a/hooks/use-selected-term-ids/index.ts b/hooks/use-selected-term-ids/index.ts index 54a24a63..9ae81486 100644 --- a/hooks/use-selected-term-ids/index.ts +++ b/hooks/use-selected-term-ids/index.ts @@ -7,10 +7,14 @@ export const useSelectedTermIds = (taxonomyName: string) => { (select) => { const { getTaxonomy, hasFinishedResolution } = select(coreStore); const taxonomyObject = getTaxonomy(taxonomyName); - const hasResolvedTaxonomyObject: boolean = hasFinishedResolution('getTaxonomy', [taxonomyName]); + const hasResolvedTaxonomyObject: boolean = hasFinishedResolution('getTaxonomy', [ + taxonomyName, + ]); const { getEditedPostAttribute } = select(editorStore); - const selectedTermIds: Array | undefined = getEditedPostAttribute(taxonomyObject?.rest_base); + const selectedTermIds: Array | undefined = getEditedPostAttribute( + taxonomyObject?.rest_base, + ); return [selectedTermIds, hasResolvedTaxonomyObject] as const; }, diff --git a/hooks/use-selected-terms-of-saved-post/index.ts b/hooks/use-selected-terms-of-saved-post/index.ts index 41172f62..0ed7283c 100644 --- a/hooks/use-selected-terms-of-saved-post/index.ts +++ b/hooks/use-selected-terms-of-saved-post/index.ts @@ -17,9 +17,12 @@ export const useSelectedTermsOfSavedPost = (taxonomyName: string, postId: number ] as const; const terms = getEntityRecords(...selectedTermsQuery); - const hasResolvedTerms: boolean = hasFinishedResolution('getEntityRecords', selectedTermsQuery); + const hasResolvedTerms: boolean = hasFinishedResolution( + 'getEntityRecords', + selectedTermsQuery, + ); - return [terms, hasResolvedTerms ] as const; + return [terms, hasResolvedTerms] as const; }, [taxonomyName, postId], ); diff --git a/hooks/use-taxonomy/index.ts b/hooks/use-taxonomy/index.ts index ef3973ea..4316b1c7 100644 --- a/hooks/use-taxonomy/index.ts +++ b/hooks/use-taxonomy/index.ts @@ -13,5 +13,5 @@ export function useTaxonomy(taxonomyName: string) { return [taxonomy, hasResolvedTaxonomy]; }, [taxonomyName], - ) as [ taxonomy: Taxonomy | undefined, hasResolvedTaxonomy: boolean ]; + ) as [taxonomy: Taxonomy | undefined, hasResolvedTaxonomy: boolean]; } diff --git a/package-lock.json b/package-lock.json index e931e18b..fc82f3e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "@emotion/styled": "^11.11.5", "@floating-ui/react-dom": "^2.0.9", "@leeoniya/ufuzzy": "^1.0.14", + "@typescript-eslint/parser": "^6.21.0", "@wordpress/icons": "^9.48.0", "array-move": "^4.0.0", "prop-types": "^15.8.1", @@ -3891,7 +3892,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -3906,7 +3906,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3918,7 +3917,6 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -3927,7 +3925,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3949,14 +3946,12 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3966,7 +3961,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3978,7 +3972,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3990,7 +3983,6 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -4048,7 +4040,6 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -4062,7 +4053,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4072,7 +4062,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4084,7 +4073,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { "node": ">=12.22" }, @@ -4096,8 +4084,7 @@ "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -4874,7 +4861,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4887,7 +4873,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -4896,7 +4881,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -6559,7 +6543,6 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -6587,7 +6570,6 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" @@ -6631,7 +6613,6 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -6644,7 +6625,6 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", @@ -6697,7 +6677,6 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" @@ -6714,7 +6693,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6725,8 +6703,7 @@ "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@use-gesture/core": { "version": "10.3.1", @@ -8988,7 +8965,6 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -9019,7 +8995,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -9071,7 +9046,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -9192,7 +9166,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -9352,7 +9325,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } @@ -9948,8 +9920,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { "version": "2.2.2", @@ -10194,7 +10165,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -10203,7 +10173,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -11148,8 +11117,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -12239,7 +12207,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -12345,8 +12312,7 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.3.1", @@ -12709,7 +12675,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -12757,7 +12722,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -13286,7 +13250,6 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14020,7 +13983,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -14034,14 +13996,12 @@ "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14051,7 +14011,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14067,7 +14026,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -14078,14 +14036,12 @@ "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -14099,7 +14055,6 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -14115,7 +14070,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -14127,7 +14081,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -14143,7 +14096,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -14152,7 +14104,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -14164,7 +14115,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -14179,7 +14129,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14191,7 +14140,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -14206,7 +14154,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -14218,7 +14165,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -14227,7 +14173,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14239,7 +14184,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -14254,7 +14198,6 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -14271,7 +14214,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -14296,7 +14238,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -14308,7 +14249,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -14320,7 +14260,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -14329,7 +14268,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14687,8 +14625,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -14706,7 +14643,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -14722,7 +14658,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -14733,14 +14668,12 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -14755,7 +14688,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -14818,7 +14750,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -14856,7 +14787,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -15069,7 +14999,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -15082,8 +15011,7 @@ "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -15269,8 +15197,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -15505,7 +15432,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15525,7 +15451,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -15543,7 +15468,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15553,7 +15477,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15614,7 +15537,6 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -15645,7 +15567,6 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -15731,8 +15652,7 @@ "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/gzip-size": { "version": "6.0.0", @@ -16268,7 +16188,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, "engines": { "node": ">= 4" } @@ -16473,7 +16392,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -16491,7 +16409,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -16500,8 +16417,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", @@ -16881,7 +16797,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -16935,7 +16850,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -16996,7 +16910,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -17062,7 +16975,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -17287,8 +17199,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -19319,8 +19230,7 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -19336,14 +19246,12 @@ "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -19421,7 +19329,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "dependencies": { "json-buffer": "3.0.1" } @@ -19521,7 +19428,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -19924,8 +19830,7 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/lodash.once": { "version": "4.1.1", @@ -20494,7 +20399,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -20518,7 +20422,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -20670,7 +20573,6 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -20807,8 +20709,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { "version": "7.2.5", @@ -20856,8 +20757,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/negotiator": { "version": "0.6.3", @@ -21412,7 +21312,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -21462,7 +21361,6 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21684,7 +21582,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -21918,7 +21815,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -21927,7 +21823,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -21942,7 +21837,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -21987,7 +21881,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -23523,7 +23416,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -23809,7 +23701,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "engines": { "node": ">=6" } @@ -23931,7 +23822,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -24708,7 +24598,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -24724,7 +24613,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -24781,7 +24669,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -25013,7 +24900,6 @@ "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -25028,7 +24914,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -25039,8 +24924,7 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { "version": "0.18.0", @@ -25757,7 +25641,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -26283,7 +26166,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -26325,7 +26207,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -27564,8 +27445,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/third-party-web": { "version": "0.23.4", @@ -27627,7 +27507,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -27732,7 +27611,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, "engines": { "node": ">=16" }, @@ -27821,7 +27699,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -27842,7 +27719,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -28129,7 +28005,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -29231,7 +29106,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -29300,8 +29174,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -29509,7 +29382,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index f641aa32..d5117fa4 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "@emotion/styled": "^11.11.5", "@floating-ui/react-dom": "^2.0.9", "@leeoniya/ufuzzy": "^1.0.14", + "@typescript-eslint/parser": "^6.21.0", "@wordpress/icons": "^9.48.0", "array-move": "^4.0.0", "prop-types": "^15.8.1", diff --git a/stores/icons/actions.ts b/stores/icons/actions.ts index 6af0bd76..9554a88a 100644 --- a/stores/icons/actions.ts +++ b/stores/icons/actions.ts @@ -1,4 +1,4 @@ -import { IconSet } from "./types"; +import { IconSet } from './types'; /** * Returns an action object used in signalling that new block styles have been added. @@ -28,4 +28,4 @@ export function removeIconSet(name: string) { } as const; } -export type IconSetAction = ReturnType | ReturnType; \ No newline at end of file +export type IconSetAction = ReturnType | ReturnType; diff --git a/stores/icons/reducer.ts b/stores/icons/reducer.ts index 57ce66bf..a32c489f 100644 --- a/stores/icons/reducer.ts +++ b/stores/icons/reducer.ts @@ -1,17 +1,15 @@ /* eslint-disable default-param-last */ -import { IconSetAction } from "./actions"; -import { IconSet } from "./types"; +import { IconSetAction } from './actions'; +import { IconSet } from './types'; -/** +/* * Reducer managing the block style variations. - * - * @param {object} state Current state. - * @param {object} action Dispatched action. - * - * @returns {object} Updated state. */ -export default function reducer(state: { iconSets: {[key: string]: IconSet} } = { iconSets: {} }, action: IconSetAction) { +export default function reducer( + state: { iconSets: { [key: string]: IconSet } } = { iconSets: {} }, + action: IconSetAction, +) { switch (action.type) { case 'REGISTER_ICON_SET': return { diff --git a/stores/icons/selectors.ts b/stores/icons/selectors.ts index 077dcf07..01dd7f31 100644 --- a/stores/icons/selectors.ts +++ b/stores/icons/selectors.ts @@ -1,5 +1,5 @@ /* eslint-disable no-prototype-builtins */ -import { IconSet } from "./types"; +import { IconSet } from './types'; type IconStoreState = { iconSets: { [key: string]: IconSet }; diff --git a/stores/icons/types.ts b/stores/icons/types.ts index 79c52fd5..b9f7f98b 100644 --- a/stores/icons/types.ts +++ b/stores/icons/types.ts @@ -8,4 +8,4 @@ export type IconSet = { name: string; icons: Icon[]; label: string; -}; \ No newline at end of file +};