From cdb6a0994f1e0edc161c92bf5edc0628fbf74045 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Fri, 29 Mar 2024 08:57:40 -0500 Subject: [PATCH 01/10] "Add pattern" function added to builder UI (#89) * So we can support adding new patterns via the UI, add FormBuilder.addPattern() * "Add pattern" function added to form manager ui * Add missing edit UI components * Add interaction test for adding a new pattern via the UI --- .../src/FormManager/FormEdit/AddPattern.tsx | 27 ++++++ .../FormManager/FormEdit/FormEdit.stories.tsx | 19 +++++ .../design/src/FormManager/FormEdit/index.tsx | 6 ++ .../design/src/FormManager/FormEdit/store.tsx | 17 ++++ packages/design/src/config/edit/index.ts | 4 + packages/forms/src/builder/builder.test.ts | 82 +++++++++++++++++++ packages/forms/src/builder/index.ts | 12 ++- packages/forms/src/documents/document.ts | 1 - packages/forms/src/index.ts | 27 +++++- packages/forms/src/pattern.ts | 19 ++++- packages/forms/src/patterns/fieldset.ts | 5 +- packages/forms/src/patterns/form-summary.ts | 1 + packages/forms/src/patterns/input.ts | 1 + packages/forms/src/patterns/paragraph.ts | 1 + packages/forms/src/patterns/sequence.ts | 1 + 15 files changed, 210 insertions(+), 13 deletions(-) create mode 100644 packages/design/src/FormManager/FormEdit/AddPattern.tsx create mode 100644 packages/forms/src/builder/builder.test.ts diff --git a/packages/design/src/FormManager/FormEdit/AddPattern.tsx b/packages/design/src/FormManager/FormEdit/AddPattern.tsx new file mode 100644 index 000000000..f45ea6d1a --- /dev/null +++ b/packages/design/src/FormManager/FormEdit/AddPattern.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { useFormEditStore } from './store'; + +export const AddPattern = () => { + const store = useFormEditStore(state => ({ + availablePatterns: state.availablePatterns, + addPattern: state.addPattern, + })); + + return ( +
+ +
+ ); +}; diff --git a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx index 788df60f3..9c7654b8d 100644 --- a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx @@ -35,6 +35,25 @@ export const FormEditTest: StoryObj = { }, }; +export const FormEditAddPattern: StoryObj = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + // Select the first pattern for editing + const button = (await canvas.findAllByRole('button'))[0]; + await userEvent.click(button); + + // Get the initial count of inputs + const initialCount = (await canvas.getAllByRole('textbox')).length; + + const select = canvas.getByLabelText('Add a pattern:'); + await userEvent.selectOptions(select, 'Text input'); + + const finalCount = (await canvas.getAllByRole('textbox')).length; + expect(finalCount).toEqual(initialCount + 1); + }, +}; + const editFieldLabel = async ( element: HTMLElement, buttonIndex: number, diff --git a/packages/design/src/FormManager/FormEdit/index.tsx b/packages/design/src/FormManager/FormEdit/index.tsx index fc00ee694..0e71c3b50 100644 --- a/packages/design/src/FormManager/FormEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/index.tsx @@ -3,6 +3,7 @@ import React, { useEffect } from 'react'; import { Blueprint } from '@atj/forms'; import { type FormService } from '@atj/form-service'; +import { AddPattern } from './AddPattern'; import { PatternEdit } from './PatternEdit'; import { PreviewForm } from './Preview'; import { FormEditProvider, useFormEditStore } from './store'; @@ -42,6 +43,11 @@ const EditForm = ({ saveForm }: { saveForm: (form: Blueprint) => void }) => { return (
+
+
+ +
+
diff --git a/packages/design/src/FormManager/FormEdit/store.tsx b/packages/design/src/FormManager/FormEdit/store.tsx index 554a9c740..574327b1f 100644 --- a/packages/design/src/FormManager/FormEdit/store.tsx +++ b/packages/design/src/FormManager/FormEdit/store.tsx @@ -32,7 +32,12 @@ type FormEditState = { context: FormEditUIContext; form: Blueprint; selectedPattern?: Pattern; + availablePatterns: { + patternType: string; + displayName: string; + }[]; + addPattern: (patternType: string) => void; handleEditClick: (pattern: PatternProps) => void; setSelectedPattern: (element?: Pattern) => void; updateSelectedPattern: (formData: PatternMap) => void; @@ -48,6 +53,18 @@ const createFormEditStore = ({ create((set, get) => ({ context, form, + availablePatterns: Object.entries(context.config.patterns).map( + ([patternType, patternConfig]) => ({ + patternType, + displayName: patternConfig.displayName, + }) + ), + addPattern: (patternType: string) => { + const state = get(); + const builder = new FormBuilder(state.form); + const newPattern = builder.addPattern(state.context.config, patternType); + set({ form: builder.form, selectedPattern: newPattern }); + }, handleEditClick: (pattern: PatternProps) => { const state = get(); if (state.selectedPattern?.id === pattern._patternId) { diff --git a/packages/design/src/config/edit/index.ts b/packages/design/src/config/edit/index.ts index 8813fc0fd..b25e9c074 100644 --- a/packages/design/src/config/edit/index.ts +++ b/packages/design/src/config/edit/index.ts @@ -1,10 +1,14 @@ +import FormSummaryEdit from './FormSummaryEdit'; import InputPatternEdit from './InputPatternEdit'; +import ParagraphPatternEdit from './ParagraphPatternEdit'; import SequencePatternEdit from './SequencePatternEdit'; import SubmissionConfirmationEdit from './SubmissionConfirmationEdit'; import { type EditComponentForPattern } from '../../FormManager/FormEdit/types'; export const defaultPatternEditComponents: EditComponentForPattern = { + paragraph: ParagraphPatternEdit, input: InputPatternEdit, + 'form-summary': FormSummaryEdit, sequence: SequencePatternEdit, 'submission-confirmation': SubmissionConfirmationEdit, }; diff --git a/packages/forms/src/builder/builder.test.ts b/packages/forms/src/builder/builder.test.ts new file mode 100644 index 000000000..a99b32dbb --- /dev/null +++ b/packages/forms/src/builder/builder.test.ts @@ -0,0 +1,82 @@ +import { describe, expect, it } from 'vitest'; + +import { FormBuilder } from '.'; +import { createForm } from '..'; +import { defaultFormConfig } from '../patterns'; +import { type InputPattern } from '../patterns/input'; +import { type SequencePattern } from '../patterns/sequence'; + +describe('form builder', () => { + it('addPattern adds initial pattern of given type', () => { + const builder = new FormBuilder(); + expect(Object.keys(builder.form.patterns).length).toEqual(1); + builder.addPattern(defaultFormConfig, 'input'); + expect(Object.keys(builder.form.patterns).length).toEqual(2); + }); + + it('addPattern preserves existing structure', () => { + const initial = createTestBlueprint(); + const newBuilder = new FormBuilder(initial); + const newPattern = newBuilder.addPattern(defaultFormConfig, 'input'); + expect(newBuilder.form.patterns[newPattern.id]).toEqual(newPattern); + expect( + newBuilder.form.patterns[newBuilder.form.root].data.patterns + ).toEqual([...initial.patterns[initial.root].data.patterns, newPattern.id]); + }); +}); + +export const createTestBlueprint = () => { + return createForm( + { + title: 'Test form', + description: 'Test description', + }, + { + root: 'root', + patterns: [ + { + type: 'sequence', + id: 'root', + data: { + patterns: ['element-1', 'element-2'], + }, + initial: { + patterns: [], + }, + } as SequencePattern, + { + type: 'input', + id: 'element-1', + data: { + label: 'Pattern 1', + initial: '', + required: true, + maxLength: 128, + }, + initial: { + label: 'Pattern 1', + initial: '', + required: true, + maxLength: 128, + }, + } as InputPattern, + { + type: 'input', + id: 'element-2', + data: { + label: 'Pattern 2', + initial: 'test', + required: true, + maxLength: 128, + }, + initial: { + label: 'Pattern 2', + initial: 'test', + required: true, + maxLength: 128, + }, + } as InputPattern, + ], + } + ); +}; diff --git a/packages/forms/src/builder/index.ts b/packages/forms/src/builder/index.ts index 5ae55e78d..2c82ae7a9 100644 --- a/packages/forms/src/builder/index.ts +++ b/packages/forms/src/builder/index.ts @@ -8,13 +8,15 @@ import { nullBlueprint, updateFormSummary, updatePatternFromFormData, + createPattern, + addPatternToRoot, } from '..'; export class FormBuilder { private _form: Blueprint; - constructor(initialForm: Blueprint = nullBlueprint) { - this._form = initialForm || nullBlueprint; + constructor(initial: Blueprint = nullBlueprint) { + this._form = initial; } get form(): Blueprint { @@ -30,6 +32,12 @@ export class FormBuilder { this._form = updatedForm; } + addPattern(config: FormConfig, patternType: string) { + const pattern = createPattern(config, patternType); + this._form = addPatternToRoot(this.form, pattern); + return pattern; + } + updatePattern(config: FormConfig, pattern: Pattern, formData: PatternMap) { const updatedElement = updatePatternFromFormData( config, diff --git a/packages/forms/src/documents/document.ts b/packages/forms/src/documents/document.ts index dbea7c420..53b9a6a4a 100644 --- a/packages/forms/src/documents/document.ts +++ b/packages/forms/src/documents/document.ts @@ -39,7 +39,6 @@ export const addDocument = async ( }) ), }); - console.log(updatedForm); return { newFields: fields, updatedForm, diff --git a/packages/forms/src/index.ts b/packages/forms/src/index.ts index 4a803db36..f42c39a2f 100644 --- a/packages/forms/src/index.ts +++ b/packages/forms/src/index.ts @@ -6,7 +6,6 @@ import { type PatternId, type PatternMap, getPatternMap, - getPatternConfig, } from './pattern'; export * from './builder'; @@ -158,6 +157,26 @@ export const addPatterns = ( return addPatternMap(form, formPatternMap, root); }; +export const addPatternToRoot = ( + bp: Blueprint, + pattern: Pattern +): Blueprint => { + const rootSequence = bp.patterns[bp.root] as SequencePattern; + return { + ...bp, + patterns: { + ...bp.patterns, + [rootSequence.id]: { + ...rootSequence, + data: { + patterns: [...rootSequence.data.patterns, pattern.id], + }, + }, + [pattern.id]: pattern, + }, + }; +}; + export const replacePatterns = ( form: Blueprint, patterns: Pattern[] @@ -181,10 +200,10 @@ export const updatePatterns = ( ): Blueprint => { const root = newPatterns[form.root]; const targetPatterns: PatternMap = { - root, + [root.id]: root, }; - const resource = config.patterns[root.type as keyof FormConfig]; - const children = resource.getChildren(root, newPatterns); + const patternConfig = config.patterns[root.type]; + const children = patternConfig.getChildren(root, newPatterns); targetPatterns[root.id] = root; children.forEach(child => (targetPatterns[child.id] = child)); return { diff --git a/packages/forms/src/pattern.ts b/packages/forms/src/pattern.ts index 6a6b7d8b4..fb29aca51 100644 --- a/packages/forms/src/pattern.ts +++ b/packages/forms/src/pattern.ts @@ -30,6 +30,7 @@ export const getPattern: GetPattern = (form, patternId) => { }; export type PatternConfig = { + displayName: string; acceptsInput: boolean; initial: ThisPattern['data']; parseData: ParsePatternData; @@ -56,10 +57,6 @@ export const getPatternMap = (patterns: Pattern[]) => { ); }; -export const getPatterns = (form: Blueprint, patternIds: PatternId[]) => { - return patternIds.map(patternIds => getPattern(form, patternIds)); -}; - export const getPatternConfig = ( config: FormConfig, elementType: Pattern['type'] @@ -131,3 +128,17 @@ export const updatePatternFromFormData = ( }); return updatedForm; }; + +const generatePatternId = () => crypto.randomUUID(); + +export const createPattern = ( + config: FormConfig, + patternType: string +): Pattern => { + return { + id: generatePatternId(), + type: patternType, + data: config.patterns[patternType].initial, + initial: {}, + }; +}; diff --git a/packages/forms/src/patterns/fieldset.ts b/packages/forms/src/patterns/fieldset.ts index 4a713caf5..96812523c 100644 --- a/packages/forms/src/patterns/fieldset.ts +++ b/packages/forms/src/patterns/fieldset.ts @@ -22,6 +22,7 @@ const configSchema = z.object({ }); export const fieldsetConfig: PatternConfig = { + displayName: 'Fieldset', acceptsInput: false, initial: { patterns: [], @@ -37,8 +38,8 @@ export const fieldsetConfig: PatternConfig = { }, createPrompt(config, session, pattern, options) { const children = pattern.data.patterns.map((patternId: string) => { - const pattern = getPattern(session.form, patternId); - return createPromptForPattern(config, session, pattern, options); + const childPattern = getPattern(session.form, patternId); + return createPromptForPattern(config, session, childPattern, options); }); return { pattern: { diff --git a/packages/forms/src/patterns/form-summary.ts b/packages/forms/src/patterns/form-summary.ts index d58cd9e9f..cb20aa0a4 100644 --- a/packages/forms/src/patterns/form-summary.ts +++ b/packages/forms/src/patterns/form-summary.ts @@ -11,6 +11,7 @@ const configSchema = z.object({ export type FormSummary = Pattern>; export const formSummaryConfig: PatternConfig = { + displayName: 'Form summary', acceptsInput: false, initial: { text: '', diff --git a/packages/forms/src/patterns/input.ts b/packages/forms/src/patterns/input.ts index c1f6f68c2..54190d9a3 100644 --- a/packages/forms/src/patterns/input.ts +++ b/packages/forms/src/patterns/input.ts @@ -17,6 +17,7 @@ const createSchema = (data: InputPattern['data']) => z.string().max(data.maxLength); export const inputConfig: PatternConfig = { + displayName: 'Text input', acceptsInput: true, initial: { label: '', diff --git a/packages/forms/src/patterns/paragraph.ts b/packages/forms/src/patterns/paragraph.ts index e899d67eb..ac1e98c07 100644 --- a/packages/forms/src/patterns/paragraph.ts +++ b/packages/forms/src/patterns/paragraph.ts @@ -14,6 +14,7 @@ const createSchema = (data: ParagraphPattern['data']) => z.string().max(data.maxLength); export const paragraphConfig: PatternConfig = { + displayName: 'Paragraph', acceptsInput: false, initial: { text: 'normal', diff --git a/packages/forms/src/patterns/sequence.ts b/packages/forms/src/patterns/sequence.ts index 4c8dabeab..2701145a5 100644 --- a/packages/forms/src/patterns/sequence.ts +++ b/packages/forms/src/patterns/sequence.ts @@ -20,6 +20,7 @@ const configSchema = z.object({ }); export const sequenceConfig: PatternConfig = { + displayName: 'Sequence', acceptsInput: false, initial: { patterns: [], From 5f9ef0c9c91416cbe646500204278eda573ff26e Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Wed, 3 Apr 2024 13:32:35 -0500 Subject: [PATCH 02/10] Initial address pattern (#94) * Add appropriate type annotations to each literal pattern. * Remove references to mismatched "initial" values; also, remove initial session values (this isn't necessary now, and is problematic. might need to revisit later) * Separate pattern config data type from pattern output data. * Added initial address component, using text inputs sequentially. Will also implement a unified address component, once this is fully working. TODO: handle address component validation in an orderly way and add to UI. * If it doesn't exist, don't try to display an edit component for a pattern. * Address pattern hashed out more; to ease testing, add a button to create a new empty blueprint. --- packages/design/src/Form/index.tsx | 11 +- .../FormManager/DocumentImporter/index.tsx | 6 +- .../src/FormManager/FormEdit/AddPattern.tsx | 8 +- .../FormManager/FormEdit/DraggableList.tsx | 3 - .../src/FormManager/FormEdit/PatternEdit.tsx | 44 ++--- .../src/FormManager/FormEdit/Preview.tsx | 24 +-- .../design/src/FormManager/FormEdit/store.tsx | 12 +- .../PDFFileSelect.stories.tsx | 10 +- .../PDFFileSelect.test.tsx | 2 +- .../file-input.test.ts | 0 .../file-input.ts | 0 .../{PDFFileSelect => CreateNew}/hooks.ts | 11 ++ .../{PDFFileSelect => CreateNew}/index.tsx | 8 +- .../design/src/FormManager/FormList/index.tsx | 29 ++- .../src/config/edit/InputPatternEdit.tsx | 6 +- .../config/view/Address/Address.stories.tsx | 0 .../src/config/view/Address/Address.test.tsx | 0 .../design/src/config/view/Address/index.tsx | 147 +++++++++++++++ .../design/src/config/view/Fieldset/index.tsx | 9 +- .../view/FormSummary/FormSummary.stories.tsx | 10 +- .../src/config/view/FormSummary/index.tsx | 6 +- .../src/config/view/Paragraph/index.tsx | 34 +--- .../SubmissionConfirmation.stories.tsx | 16 +- .../view/SubmissionConfirmation/index.tsx | 8 +- .../view/TextInput/TestInput.stories.tsx | 28 ++- .../src/config/view/TextInput/index.tsx | 32 ++-- .../design/src/config/view/ZipCode/index.tsx | 24 +++ packages/design/src/config/view/index.tsx | 2 + packages/design/src/test-form.ts | 21 +-- packages/forms/src/builder/builder.test.ts | 21 +-- packages/forms/src/components.ts | 11 +- packages/forms/src/documents/document.ts | 19 +- packages/forms/src/documents/pdf/mock-api.ts | 28 +-- packages/forms/src/index.ts | 8 +- packages/forms/src/pattern.ts | 49 +++-- .../src/patterns/address/address.test.ts | 0 packages/forms/src/patterns/address/index.ts | 175 ++++++++++++++++++ .../src/patterns/address/jurisdictions.ts | 138 ++++++++++++++ packages/forms/src/patterns/fieldset.ts | 7 - packages/forms/src/patterns/form-summary.ts | 10 +- packages/forms/src/patterns/index.ts | 2 + packages/forms/src/patterns/input.ts | 9 +- packages/forms/src/patterns/paragraph.ts | 8 +- packages/forms/src/patterns/sequence.ts | 7 - packages/forms/src/response.ts | 11 -- packages/forms/src/session.ts | 12 +- packages/forms/src/util/zod.ts | 4 +- packages/forms/tests/two-field-form.test.ts | 21 +-- 48 files changed, 722 insertions(+), 329 deletions(-) rename packages/design/src/FormManager/FormList/{PDFFileSelect => CreateNew}/PDFFileSelect.stories.tsx (61%) rename packages/design/src/FormManager/FormList/{PDFFileSelect => CreateNew}/PDFFileSelect.test.tsx (69%) rename packages/design/src/FormManager/FormList/{PDFFileSelect => CreateNew}/file-input.test.ts (100%) rename packages/design/src/FormManager/FormList/{PDFFileSelect => CreateNew}/file-input.ts (100%) rename packages/design/src/FormManager/FormList/{PDFFileSelect => CreateNew}/hooks.ts (79%) rename packages/design/src/FormManager/FormList/{PDFFileSelect => CreateNew}/index.tsx (91%) create mode 100644 packages/design/src/config/view/Address/Address.stories.tsx create mode 100644 packages/design/src/config/view/Address/Address.test.tsx create mode 100644 packages/design/src/config/view/Address/index.tsx create mode 100644 packages/design/src/config/view/ZipCode/index.tsx create mode 100644 packages/forms/src/patterns/address/address.test.ts create mode 100644 packages/forms/src/patterns/address/index.ts create mode 100644 packages/forms/src/patterns/address/jurisdictions.ts diff --git a/packages/design/src/Form/index.tsx b/packages/design/src/Form/index.tsx index 5295b4a16..4c2f978aa 100644 --- a/packages/design/src/Form/index.tsx +++ b/packages/design/src/Form/index.tsx @@ -25,10 +25,11 @@ export type ComponentForPattern< > = Record>; export type PatternComponent> = - React.ComponentType<{ - pattern: T; - children?: React.ReactNode; - }>; + React.ComponentType< + T & { + children?: React.ReactNode; + } + >; const usePrompt = ( initialPrompt: Prompt, @@ -259,7 +260,7 @@ const PromptComponent = ({ }) => { const Component = context.components[promptPart.pattern.type]; return ( - + {promptPart.children?.map((child, index) => { return ( diff --git a/packages/design/src/FormManager/DocumentImporter/index.tsx b/packages/design/src/FormManager/DocumentImporter/index.tsx index a969dc836..e1ccc5fd3 100644 --- a/packages/design/src/FormManager/DocumentImporter/index.tsx +++ b/packages/design/src/FormManager/DocumentImporter/index.tsx @@ -12,7 +12,7 @@ import { import { type FormService } from '@atj/form-service'; import Form, { FormUIContext } from '../../Form'; -import { onFileInputChangeGetFile } from '../FormList/PDFFileSelect/file-input'; +import { onFileInputChangeGetFile } from '../FormList/CreateNew/file-input'; const DocumentImporter = ({ baseUrl, @@ -69,7 +69,7 @@ const DocumentImporter = ({ } }; - const PDFFileSelect = () => { + const CreateNew = () => { return (
- {state.page === 1 && } + {state.page === 1 && } {state.page === 2 && } {state.page === 3 && }
diff --git a/packages/design/src/FormManager/FormEdit/AddPattern.tsx b/packages/design/src/FormManager/FormEdit/AddPattern.tsx index f45ea6d1a..b2d04e210 100644 --- a/packages/design/src/FormManager/FormEdit/AddPattern.tsx +++ b/packages/design/src/FormManager/FormEdit/AddPattern.tsx @@ -10,11 +10,15 @@ export const AddPattern = () => { return (
); diff --git a/packages/design/src/FormManager/FormEdit/Preview.tsx b/packages/design/src/FormManager/FormEdit/Preview.tsx index 2777a1a9c..1cec63c4c 100644 --- a/packages/design/src/FormManager/FormEdit/Preview.tsx +++ b/packages/design/src/FormManager/FormEdit/Preview.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { type PatternProps, createFormSession } from '@atj/forms'; +import { createFormSession } from '@atj/forms'; import Form, { type ComponentForPattern, @@ -71,15 +71,15 @@ const createSequencePatternPreviewComponent = ( pattern, }) => { const { form, setSelectedPattern } = usePreviewContext(); - const element = getPattern(form, pattern._patternId); - const Component = previewComponents[pattern.type]; + const element = getPattern(form, props._patternId); + const Component = previewComponents[props.type]; return ( - + ); }; @@ -91,29 +91,25 @@ const createPatternPreviewComponent = ( Component: PatternComponent, uswdsRoot: string ) => { - const PatternPreviewComponent: PatternComponent = ({ - pattern, - }: { - pattern: PatternProps; - }) => { + const PatternPreviewComponent: PatternComponent = props => { const selectedPattern = useFormEditStore(state => state.selectedPattern); const handleEditClick = useFormEditStore(state => state.handleEditClick); - const isSelected = selectedPattern?.id === pattern._patternId; + const isSelected = selectedPattern?.id === props._patternId; const divClassNames = isSelected ? 'form-group-row field-selected' : 'form-group-row'; return ( -
- +
+
-
diff --git a/packages/design/src/config/view/Address/Address.stories.tsx b/packages/design/src/config/view/Address/Address.stories.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/packages/design/src/config/view/Address/Address.test.tsx b/packages/design/src/config/view/Address/Address.test.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/packages/design/src/config/view/Address/index.tsx b/packages/design/src/config/view/Address/index.tsx new file mode 100644 index 000000000..24750f967 --- /dev/null +++ b/packages/design/src/config/view/Address/index.tsx @@ -0,0 +1,147 @@ +import React from 'react'; +import { useFormContext } from 'react-hook-form'; + +import { type PatternComponent } from '../../../Form'; +import { AddressComponentProps } from '@atj/forms/src/patterns/address'; +import classNames from 'classnames'; + +const Address: PatternComponent = props => { + const { register } = useFormContext(); + return ( +
+ Mailing address + + + + + + + + + + + + +
+ ); +}; +export default Address; diff --git a/packages/design/src/config/view/Fieldset/index.tsx b/packages/design/src/config/view/Fieldset/index.tsx index 2e09f7c14..74cf1b225 100644 --- a/packages/design/src/config/view/Fieldset/index.tsx +++ b/packages/design/src/config/view/Fieldset/index.tsx @@ -4,14 +4,11 @@ import { type FieldsetProps } from '@atj/forms'; import { type PatternComponent } from '../../../Form'; -const FormSummary: PatternComponent = ({ - pattern, - children, -}) => { +const FormSummary: PatternComponent = props => { return (
- {pattern.legend} - {children} + {props.legend} + {props.children}
); }; diff --git a/packages/design/src/config/view/FormSummary/FormSummary.stories.tsx b/packages/design/src/config/view/FormSummary/FormSummary.stories.tsx index b77317ca9..b136856b5 100644 --- a/packages/design/src/config/view/FormSummary/FormSummary.stories.tsx +++ b/packages/design/src/config/view/FormSummary/FormSummary.stories.tsx @@ -23,11 +23,9 @@ export const FormSummaryWithLongDescription = { export const FormSummaryWithShortDescription = { args: { - pattern: { - _patternId: 'test-id', - type: 'form-summary', - title: 'Title 2', - description: 'Short description', - } as FormSummaryProps, + _patternId: 'test-id', + type: 'form-summary', + title: 'Title 2', + description: 'Short description', }, } satisfies StoryObj; diff --git a/packages/design/src/config/view/FormSummary/index.tsx b/packages/design/src/config/view/FormSummary/index.tsx index 0d77b53ad..7a0e73402 100644 --- a/packages/design/src/config/view/FormSummary/index.tsx +++ b/packages/design/src/config/view/FormSummary/index.tsx @@ -3,13 +3,13 @@ import React from 'react'; import { type FormSummaryProps } from '@atj/forms'; import { type PatternComponent } from '../../../Form'; -const FormSummary: PatternComponent = ({ pattern }) => { +const FormSummary: PatternComponent = props => { return ( <>
{/* {pattern.title} */} -

{pattern.title}

- {pattern.description !== '' &&

{pattern.description}

} +

{props.title}

+ {props.description !== '' &&

{props.description}

}
); diff --git a/packages/design/src/config/view/Paragraph/index.tsx b/packages/design/src/config/view/Paragraph/index.tsx index ef01808fb..08822564a 100644 --- a/packages/design/src/config/view/Paragraph/index.tsx +++ b/packages/design/src/config/view/Paragraph/index.tsx @@ -4,33 +4,11 @@ import { type ParagraphProps } from '@atj/forms'; import { type PatternComponent } from '../../../Form'; -const FormSummary: PatternComponent = ({ pattern }) => { - if (pattern.style === 'heading') { - return ( - <> -

{pattern.text}

- - ); - } else if (pattern.style === 'subheading') { - return ( - <> -

{pattern.text}

- - ); - } else if (pattern.style === 'indent') { - return ( - <> -
    -
  • {pattern.text}
  • -
- - ); - } else { - return ( - <> -

{pattern.text}

- - ); - } +const FormSummary: PatternComponent = props => { + return ( + <> +

{props.text}

+ + ); }; export default FormSummary; diff --git a/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx b/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx index fea444e56..c6a195de6 100644 --- a/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx +++ b/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx @@ -11,14 +11,12 @@ export default { export const SubmissionConfirmationExample = { args: { - pattern: { - type: 'submission-confirmation', - table: [ - { label: 'Field 1', value: 'Value 1' }, - { label: 'Field 2', value: 'Value 2' }, - { label: 'Field 3', value: 'Value 3' }, - { label: 'Field 4', value: 'Value 4' }, - ], - } as SubmissionConfirmationProps, + type: 'submission-confirmation', + table: [ + { label: 'Field 1', value: 'Value 1' }, + { label: 'Field 2', value: 'Value 2' }, + { label: 'Field 3', value: 'Value 3' }, + { label: 'Field 4', value: 'Value 4' }, + ], }, } satisfies StoryObj; diff --git a/packages/design/src/config/view/SubmissionConfirmation/index.tsx b/packages/design/src/config/view/SubmissionConfirmation/index.tsx index d763ecb11..ce2b8a8b9 100644 --- a/packages/design/src/config/view/SubmissionConfirmation/index.tsx +++ b/packages/design/src/config/view/SubmissionConfirmation/index.tsx @@ -3,9 +3,9 @@ import React from 'react'; import { type SubmissionConfirmationProps } from '@atj/forms'; import { type PatternComponent } from '../../../Form'; -const SubmissionConfirmation: PatternComponent = ({ - pattern, -}) => { +const SubmissionConfirmation: PatternComponent< + SubmissionConfirmationProps +> = props => { return ( <> @@ -52,7 +52,7 @@ const SubmissionConfirmation: PatternComponent = ({ - {pattern.table.map((row, index) => { + {props.table.map((row, index) => { return ( {row.label} diff --git a/packages/design/src/config/view/TextInput/TestInput.stories.tsx b/packages/design/src/config/view/TextInput/TestInput.stories.tsx index 711386809..42d95a5b6 100644 --- a/packages/design/src/config/view/TextInput/TestInput.stories.tsx +++ b/packages/design/src/config/view/TextInput/TestInput.stories.tsx @@ -26,26 +26,22 @@ export default { export const Required = { args: { - pattern: { - _patternId: '', - type: 'input', - inputId: 'test-prompt', - value: '', - label: 'Please enter your first name.', - required: true, - } as TextInputProps, + _patternId: '', + type: 'input', + inputId: 'test-prompt', + value: '', + label: 'Please enter your first name.', + required: true, }, } satisfies StoryObj; export const NotRequired = { args: { - pattern: { - _patternId: '', - type: 'input', - inputId: 'test-prompt', - value: '', - label: 'Please enter your first name.', - required: false, - } as TextInputProps, + _patternId: '', + type: 'input', + inputId: 'test-prompt', + value: '', + label: 'Please enter your first name.', + required: false, }, } satisfies StoryObj; diff --git a/packages/design/src/config/view/TextInput/index.tsx b/packages/design/src/config/view/TextInput/index.tsx index 3ea577038..a595a7822 100644 --- a/packages/design/src/config/view/TextInput/index.tsx +++ b/packages/design/src/config/view/TextInput/index.tsx @@ -5,44 +5,44 @@ import { useFormContext } from 'react-hook-form'; import { type TextInputProps } from '@atj/forms'; import { type PatternComponent } from '../../../Form'; -const TextInput: PatternComponent = ({ pattern }) => { +const TextInput: PatternComponent = props => { const { register } = useFormContext(); return ( -
+
- {pattern.error && ( + {props.error && ( - {pattern.error} + {props.error} )}
diff --git a/packages/design/src/config/view/ZipCode/index.tsx b/packages/design/src/config/view/ZipCode/index.tsx new file mode 100644 index 000000000..9c1f8238f --- /dev/null +++ b/packages/design/src/config/view/ZipCode/index.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { useFormContext } from 'react-hook-form'; + +import { type ZipcodeProps } from '@atj/forms'; + +export const ZipCode = (props: ZipcodeProps) => { + const { register } = useFormContext(); + return ( + <> + + + + ); +}; diff --git a/packages/design/src/config/view/index.tsx b/packages/design/src/config/view/index.tsx index 0066eb4e9..43aa10647 100644 --- a/packages/design/src/config/view/index.tsx +++ b/packages/design/src/config/view/index.tsx @@ -1,3 +1,4 @@ +import Address from './Address'; import Fieldset from './Fieldset'; import FormSummary from './FormSummary'; import Paragraph from './Paragraph'; @@ -7,6 +8,7 @@ import TextInput from './TextInput'; import { type ComponentForPattern } from '../../Form'; export const defaultPatternComponents: ComponentForPattern = { + address: Address, fieldset: Fieldset, 'form-summary': FormSummary, input: TextInput, diff --git a/packages/design/src/test-form.ts b/packages/design/src/test-form.ts index 4a77f1934..fd090d745 100644 --- a/packages/design/src/test-form.ts +++ b/packages/design/src/test-form.ts @@ -24,10 +24,7 @@ export const createTestForm = () => { data: { patterns: ['element-1', 'element-2'], }, - initial: { - patterns: [], - }, - } as SequencePattern, + } satisfies SequencePattern, { type: 'input', id: 'element-1', @@ -37,13 +34,7 @@ export const createTestForm = () => { required: true, maxLength: 128, }, - initial: { - label: 'Pattern 1', - initial: '', - required: true, - maxLength: 128, - }, - } as InputPattern, + } satisfies InputPattern, { type: 'input', id: 'element-2', @@ -53,13 +44,7 @@ export const createTestForm = () => { required: true, maxLength: 128, }, - initial: { - label: 'Pattern 2', - initial: 'test', - required: true, - maxLength: 128, - }, - } as InputPattern, + } satisfies InputPattern, ], } ); diff --git a/packages/forms/src/builder/builder.test.ts b/packages/forms/src/builder/builder.test.ts index a99b32dbb..51fd144b4 100644 --- a/packages/forms/src/builder/builder.test.ts +++ b/packages/forms/src/builder/builder.test.ts @@ -40,10 +40,7 @@ export const createTestBlueprint = () => { data: { patterns: ['element-1', 'element-2'], }, - initial: { - patterns: [], - }, - } as SequencePattern, + } satisfies SequencePattern, { type: 'input', id: 'element-1', @@ -53,13 +50,7 @@ export const createTestBlueprint = () => { required: true, maxLength: 128, }, - initial: { - label: 'Pattern 1', - initial: '', - required: true, - maxLength: 128, - }, - } as InputPattern, + } satisfies InputPattern, { type: 'input', id: 'element-2', @@ -69,13 +60,7 @@ export const createTestBlueprint = () => { required: true, maxLength: 128, }, - initial: { - label: 'Pattern 2', - initial: 'test', - required: true, - maxLength: 128, - }, - } as InputPattern, + } satisfies InputPattern, ], } ); diff --git a/packages/forms/src/components.ts b/packages/forms/src/components.ts index 51f79572c..c3bdfb3c1 100644 --- a/packages/forms/src/components.ts +++ b/packages/forms/src/components.ts @@ -35,12 +35,17 @@ export type ParagraphProps = PatternProps<{ export type FieldsetProps = PatternProps<{ type: 'fieldset'; - legend: string; + legend?: string; +}>; + +export type ZipcodeProps = PatternProps<{ + type: 'zipcode'; + inputId: string; + value: string; }>; export type PatternProps = { _patternId: PatternId; - _children: PromptPart[]; type: string; } & T; @@ -79,7 +84,7 @@ export const createPrompt = ( config, session.form.patterns[patternId].type ); - return elemConfig.acceptsInput; + return !!elemConfig.parseData; }) .map(([patternId, value]) => { return { diff --git a/packages/forms/src/documents/document.ts b/packages/forms/src/documents/document.ts index 53b9a6a4a..bc15cf0a3 100644 --- a/packages/forms/src/documents/document.ts +++ b/packages/forms/src/documents/document.ts @@ -7,6 +7,7 @@ import { updateFormSummary, } from '..'; import { InputPattern } from '../patterns/input'; +import { SequencePattern } from '../patterns/sequence'; import { PDFDocument, getDocumentFieldData } from './pdf'; import { getSuggestedPatternsFromCache } from './suggestions'; import { DocumentFieldMap } from './types'; @@ -76,9 +77,6 @@ export const addDocumentFieldsToForm = ( id: patternId, data: { label: field.label, - }, - initial: { - label: '', initial: '', required: false, maxLength: 128, @@ -90,9 +88,6 @@ export const addDocumentFieldsToForm = ( id: patternId, data: { label: field.label, - }, - initial: { - label: '', initial: '', required: false, maxLength: 128, @@ -104,9 +99,6 @@ export const addDocumentFieldsToForm = ( id: patternId, data: { label: field.label, - }, - initial: { - label: '', initial: '', required: false, maxLength: 128, @@ -118,9 +110,6 @@ export const addDocumentFieldsToForm = ( id: patternId, data: { label: field.label, - }, - initial: { - label: '', initial: '', required: false, maxLength: 128, @@ -132,9 +121,6 @@ export const addDocumentFieldsToForm = ( id: patternId, data: { label: field.label, - }, - initial: { - label: '', initial: '', required: false, maxLength: 128, @@ -154,7 +140,6 @@ export const addDocumentFieldsToForm = ( data: { patterns: patterns.map(pattern => pattern.id), }, - initial: [], - }); + } satisfies SequencePattern); return addPatterns(form, patterns, 'root'); }; diff --git a/packages/forms/src/documents/pdf/mock-api.ts b/packages/forms/src/documents/pdf/mock-api.ts index 118d9f5fb..5dedc714f 100644 --- a/packages/forms/src/documents/pdf/mock-api.ts +++ b/packages/forms/src/documents/pdf/mock-api.ts @@ -5,6 +5,7 @@ import { type Pattern, type PatternId, type PatternMap } from '../..'; import { type FieldsetPattern } from '../../patterns/fieldset'; import { type InputPattern } from '../../patterns/input'; import { type ParagraphPattern } from '../../patterns/paragraph'; +import { SequencePattern } from '../../patterns/sequence'; import { stringToBase64 } from '../util'; import { type DocumentFieldMap } from '../types'; @@ -111,13 +112,9 @@ export const parseAlabamaNameChangeForm = (): ParsedPdf => { parsedPdf.patterns[element.id] = { type: 'paragraph', id: element.id, - initial: { - text: '', - maxLength: 2048, - }, data: { text: element.element_params.text, - style: element.element_params.text_style, + maxLength: 2048, }, } satisfies ParagraphPattern; rootSequence.push(element.id); @@ -129,15 +126,12 @@ export const parseAlabamaNameChangeForm = (): ParsedPdf => { parsedPdf.patterns[id] = { type: 'input', id, - initial: { + data: { + label: input.input_params.instructions, required: false, - label: '', initial: '', maxLength: 128, }, - data: { - label: input.input_params.instructions, - }, } satisfies InputPattern; fieldsetPatterns.push(id); parsedPdf.outputs[id] = { @@ -158,10 +152,7 @@ export const parseAlabamaNameChangeForm = (): ParsedPdf => { legend: element.element_params.text, patterns: fieldsetPatterns, }, - initial: { - patterns: [], - }, - } as FieldsetPattern; + } satisfies FieldsetPattern; rootSequence.push(element.id); } } @@ -171,10 +162,7 @@ export const parseAlabamaNameChangeForm = (): ParsedPdf => { data: { patterns: rootSequence, }, - initial: { - patterns: [], - }, - }; + } satisfies SequencePattern; return parsedPdf; }; @@ -185,9 +173,11 @@ const getElementInputs = (element: ExtractedElement): Pattern[] => { return { type: 'input', id: input.input_params.output_id, - initial: {} as unknown as any, data: { label: input.input_params.instructions, + required: false, + maxLength: 256, + initial: '', }, } satisfies InputPattern; } diff --git a/packages/forms/src/index.ts b/packages/forms/src/index.ts index f42c39a2f..e471939e2 100644 --- a/packages/forms/src/index.ts +++ b/packages/forms/src/index.ts @@ -36,10 +36,7 @@ export const nullBlueprint: Blueprint = { data: { patterns: [], }, - initial: { - patterns: [], - }, - }, + } satisfies SequencePattern, }, outputs: [], }; @@ -69,9 +66,6 @@ export const createForm = ( data: { patterns: [], }, - initial: { - patterns: [], - }, } satisfies SequencePattern, ], root: 'root', diff --git a/packages/forms/src/pattern.ts b/packages/forms/src/pattern.ts index fb29aca51..fedf8a26f 100644 --- a/packages/forms/src/pattern.ts +++ b/packages/forms/src/pattern.ts @@ -3,51 +3,49 @@ import { updatePattern, type Blueprint } from '..'; import { type CreatePrompt } from './components'; -export type Pattern = { +export type Pattern = { type: string; id: PatternId; data: C; - initial: T; }; export type PatternId = string; -export type PatternValue = T['initial']; +export type PatternValue = any; export type PatternValueMap = Record; export type PatternMap = Record; export type GetPattern = (form: Blueprint, id: PatternId) => Pattern; -export type ParsePatternData = ( - patternData: T['data'], - obj: string -) => Result; +type ParsePatternData = ( + patternData: PatternConfigData, + obj: unknown +) => Result; -export type ParsePatternConfigData = ( - patternData: T['data'] -) => Result; +type ParsePatternConfigData = ( + patternData: unknown +) => Result; export const getPattern: GetPattern = (form, patternId) => { return form.patterns[patternId]; }; -export type PatternConfig = { +export type PatternConfig< + ThisPattern extends Pattern = Pattern, + PatternOutput = unknown, +> = { displayName: string; - acceptsInput: boolean; initial: ThisPattern['data']; - parseData: ParsePatternData; - parseConfigData: ParsePatternConfigData; + parseData?: ParsePatternData; + parseConfigData: ParsePatternConfigData; getChildren: ( pattern: ThisPattern, patterns: Record ) => Pattern[]; createPrompt: CreatePrompt; }; -export type FormConfig = { - patterns: Record>; -}; -export type ConfigPatterns = ReturnType< - Config['patterns'][keyof Config['patterns']]['parseData'] ->; +export type FormConfig = { + patterns: Record>; +}; export const getPatternMap = (patterns: Pattern[]) => { return Object.fromEntries( @@ -65,24 +63,24 @@ export const getPatternConfig = ( }; export const validatePattern = ( - elementConfig: PatternConfig, - element: Pattern, + patternConfig: PatternConfig, + pattern: Pattern, value: any ): Result => { - if (!elementConfig.acceptsInput) { + if (!patternConfig.parseData) { return { success: true, data: value, }; } - const parseResult = elementConfig.parseData(element, value); + const parseResult = patternConfig.parseData(pattern, value); if (!parseResult.success) { return { success: false, error: parseResult.error, }; } - if (element.data.required && !parseResult.data) { + if (pattern.data.required && !parseResult.data) { return { success: false, error: 'Required value not provided.', @@ -139,6 +137,5 @@ export const createPattern = ( id: generatePatternId(), type: patternType, data: config.patterns[patternType].initial, - initial: {}, }; }; diff --git a/packages/forms/src/patterns/address/address.test.ts b/packages/forms/src/patterns/address/address.test.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/forms/src/patterns/address/index.ts b/packages/forms/src/patterns/address/index.ts new file mode 100644 index 000000000..14cb71f33 --- /dev/null +++ b/packages/forms/src/patterns/address/index.ts @@ -0,0 +1,175 @@ +import * as z from 'zod'; + +import { + validatePattern, + type Pattern, + type PatternConfig, +} from '../../pattern'; +import { PatternProps } from '../../components'; +import { safeZodParse } from '../../util/zod'; +import { + stateTerritoryOrMilitaryPostAbbreviations, + stateTerritoryOrMilitaryPostList, +} from './jurisdictions'; +import { getFormSessionValue } from '../../session'; + +export type AddressPattern = Pattern<{}>; + +export type AddressComponentProps = PatternProps<{ + childProps: { + streetAddress: { + inputId: string; + value: string; + label: string; + required: boolean; + error?: string; + }; + streetAddress2: { + inputId: string; + value: string; + label: string; + required: boolean; + error?: string; + }; + city: { + inputId: string; + value: string; + label: string; + required: boolean; + error?: string; + }; + stateTerritoryOrMilitaryPost: { + inputId: string; + value: string; + label: string; + required: boolean; + options: typeof stateTerritoryOrMilitaryPostList; + error?: string; + }; + zipCode: { + inputId: string; + value: string; + label: string; + required: boolean; + error?: string; + }; + urbanizationCode: { + inputId: string; + value: string; + label: string; + required: boolean; + error?: string; + }; + }; +}>; + +const AddressSchema = z.object({ + steetAddress: z.string().max(128), + steetAddress2: z.string().max(128).optional(), + city: z.string().max(64), + stateTerritoryOrMilitaryPost: stateTerritoryOrMilitaryPostAbbreviations, + zipCode: z.string().max(10), + urbanizationCode: z.string().max(128).optional(), + //googlePlusCode: z.string().max(8), +}); + +type AddressPatternOutput = z.infer; + +const configSchema = z.object({}); + +export const addressConfig: PatternConfig< + AddressPattern, + AddressPatternOutput +> = { + displayName: 'Physical address', + initial: { + patterns: [], + }, + parseData: (_, obj) => { + return safeZodParse(AddressSchema, obj); + }, + parseConfigData: obj => safeZodParse(configSchema, obj), + getChildren(pattern, patterns) { + return []; + }, + createPrompt(config, session, pattern, options) { + const sessionValue = getFormSessionValue(session, pattern.id); + const result = options.validate + ? AddressSchema.safeParse(sessionValue) + : null; + return { + pattern: { + _patternId: pattern.id, + type: 'address', + childProps: { + streetAddress: { + inputId: `${pattern.id}.streetAddress`, + value: sessionValue?.streetAddress, + label: 'Street address', + required: true, + error: + !result || result?.success + ? undefined + : result.error.formErrors.fieldErrors.steetAddress?.join(', '), + }, + streetAddress2: { + inputId: `${pattern.id}.streetAddress2`, + value: sessionValue?.streetAddress2, + label: 'Street address line 2', + required: false, + error: + !result || result?.success + ? undefined + : result.error.formErrors.fieldErrors.steetAddress2?.join(', '), + }, + city: { + inputId: `${pattern.id}.city`, + value: sessionValue?.city, + label: 'City', + required: true, + error: + !result || result?.success + ? undefined + : result.error.formErrors.fieldErrors.city?.join(', '), + }, + stateTerritoryOrMilitaryPost: { + inputId: `${pattern.id}.city`, + value: sessionValue?.stateTerritoryOrMilitaryPost, + label: 'State, territory, or military post', + required: true, + options: stateTerritoryOrMilitaryPostList, + error: + !result || result?.success + ? undefined + : result.error.formErrors.fieldErrors.stateTerritoryOrMilitaryPost?.join( + ', ' + ), + }, + zipCode: { + inputId: `${pattern.id}.zipCode`, + value: sessionValue?.zipCode, + label: 'ZIP code', + required: true, + error: + !result || result?.success + ? undefined + : result.error.formErrors.fieldErrors.zipCode?.join(', '), + }, + urbanizationCode: { + inputId: `${pattern.id}.urbanizationCode`, + value: sessionValue?.urbanizationCode, + label: 'Urbanization (Puerto Rico only)', + required: false, + error: + !result || result?.success + ? undefined + : result.error.formErrors.fieldErrors.urbanizationCode?.join( + ', ' + ), + }, + }, + } satisfies AddressComponentProps, + children: [], + }; + }, +}; diff --git a/packages/forms/src/patterns/address/jurisdictions.ts b/packages/forms/src/patterns/address/jurisdictions.ts new file mode 100644 index 000000000..bbc97ea1a --- /dev/null +++ b/packages/forms/src/patterns/address/jurisdictions.ts @@ -0,0 +1,138 @@ +import * as z from 'zod'; + +export const stateTerritoryOrMilitaryPostList = [ + { abbr: 'AL', label: 'AL - Alabama' }, + { abbr: 'AK', label: 'AK - Alaska' }, + { abbr: 'AS', label: 'AS - American' }, + { abbr: 'AZ', label: 'AZ - Arizona' }, + { abbr: 'AR', label: 'AR - Arkansas' }, + { abbr: 'CA', label: 'CA - California' }, + { abbr: 'CO', label: 'CO - Colorado' }, + { abbr: 'CT', label: 'CT - Connecticut' }, + { abbr: 'DE', label: 'DE - Delaware' }, + { abbr: 'DC', label: 'DC - District' }, + { abbr: 'FL', label: 'FL - Florida' }, + { abbr: 'GA', label: 'GA - Georgia' }, + { abbr: 'GU', label: 'GU - Guam' }, + { abbr: 'HI', label: 'HI - Hawaii' }, + { abbr: 'ID', label: 'ID - Idaho' }, + { abbr: 'IL', label: 'IL - Illinois' }, + { abbr: 'IN', label: 'IN - Indiana' }, + { abbr: 'IA', label: 'IA - Iowa' }, + { abbr: 'KS', label: 'KS - Kansas' }, + { abbr: 'KY', label: 'KY - Kentucky' }, + { abbr: 'LA', label: 'LA - Louisiana' }, + { abbr: 'ME', label: 'ME - Maine' }, + { abbr: 'MD', label: 'MD - Maryland' }, + { abbr: 'MA', label: 'MA - Massachusetts' }, + { abbr: 'MI', label: 'MI - Michigan' }, + { abbr: 'MN', label: 'MN - Minnesota' }, + { abbr: 'MS', label: 'MS - Mississippi' }, + { abbr: 'MO', label: 'MO - Missouri' }, + { abbr: 'MT', label: 'MT - Montana' }, + { abbr: 'NE', label: 'NE - Nebraska' }, + { abbr: 'NV', label: 'NV - Nevada' }, + { abbr: 'NH', label: 'NH - New' }, + { abbr: 'NJ', label: 'NJ - New' }, + { abbr: 'NM', label: 'NM - New' }, + { abbr: 'NY', label: 'NY - New' }, + { abbr: 'NC', label: 'NC - North' }, + { abbr: 'ND', label: 'ND - North' }, + { abbr: 'MP', label: 'MP - Northern' }, + { abbr: 'OH', label: 'OH - Ohio' }, + { abbr: 'OK', label: 'OK - Oklahoma' }, + { abbr: 'OR', label: 'OR - Oregon' }, + { abbr: 'PA', label: 'PA - Pennsylvania' }, + { abbr: 'PR', label: 'PR - Puerto' }, + { abbr: 'RI', label: 'RI - Rhode' }, + { abbr: 'SC', label: 'SC - South' }, + { abbr: 'SD', label: 'SD - South' }, + { abbr: 'TN', label: 'TN - Tennessee' }, + { abbr: 'TX', label: 'TX - Texas' }, + { abbr: 'UM', label: 'UM - United' }, + { abbr: 'UT', label: 'UT - Utah' }, + { abbr: 'VT', label: 'VT - Vermont' }, + { abbr: 'VI', label: 'VI - Virgin' }, + { abbr: 'VA', label: 'VA - Virginia' }, + { abbr: 'WA', label: 'WA - Washington' }, + { abbr: 'WV', label: 'WV - West' }, + { abbr: 'WI', label: 'WI - Wisconsin' }, + { abbr: 'WY', label: 'WY - Wyoming' }, + { abbr: 'AA', label: 'AA - Armed Forces Americas' }, + { abbr: 'AE', label: 'AE - Armed Forces Africa' }, + { abbr: 'AE', label: 'AE - Armed Forces Canada' }, + { abbr: 'AE', label: 'AE - Armed Forces Europe' }, + { abbr: 'AE', label: 'AE - Armed Forces Middle East' }, + { abbr: 'AP', label: 'AP - Armed Forces Pacific' }, +] as const; + +export const stateTerritoryOrMilitaryPostAbbreviations = z.union([ + z.literal('AL'), + z.literal('AK'), + z.literal('AS'), + z.literal('AZ'), + z.literal('AR'), + z.literal('CA'), + z.literal('CO'), + z.literal('CT'), + z.literal('DE'), + z.literal('DC'), + z.literal('FL'), + z.literal('GA'), + z.literal('GU'), + z.literal('HI'), + z.literal('ID'), + z.literal('IL'), + z.literal('IN'), + z.literal('IA'), + z.literal('KS'), + z.literal('KY'), + z.literal('LA'), + z.literal('ME'), + z.literal('MD'), + z.literal('MA'), + z.literal('MI'), + z.literal('MN'), + z.literal('MS'), + z.literal('MO'), + z.literal('MT'), + z.literal('NE'), + z.literal('NV'), + z.literal('NH'), + z.literal('NJ'), + z.literal('NM'), + z.literal('NY'), + z.literal('NC'), + z.literal('ND'), + z.literal('MP'), + z.literal('OH'), + z.literal('OK'), + z.literal('OR'), + z.literal('PA'), + z.literal('PR'), + z.literal('RI'), + z.literal('SC'), + z.literal('SD'), + z.literal('TN'), + z.literal('TX'), + z.literal('UM'), + z.literal('UT'), + z.literal('VT'), + z.literal('VI'), + z.literal('VA'), + z.literal('WA'), + z.literal('WV'), + z.literal('WI'), + z.literal('WY'), + z.literal('AA'), + z.literal('AE'), + z.literal('AP'), +]); + +/* +type JurisdictionAbbr = + (typeof stateTerritoryOrMilitaryPostList)[number]['abbr']; + +const getJurisdictionAbbreviations = (): JurisdictionAbbr[] => + stateTerritoryOrMilitaryPostList.map(j => j.abbr); +*/ diff --git a/packages/forms/src/patterns/fieldset.ts b/packages/forms/src/patterns/fieldset.ts index 96812523c..a6b3cfdde 100644 --- a/packages/forms/src/patterns/fieldset.ts +++ b/packages/forms/src/patterns/fieldset.ts @@ -14,8 +14,6 @@ export type FieldsetPattern = Pattern<{ patterns: PatternId[]; }>; -const FieldsetSchema = z.array(z.string()); - const configSchema = z.object({ legend: z.string().optional(), patterns: z.array(z.string()), @@ -23,13 +21,9 @@ const configSchema = z.object({ export const fieldsetConfig: PatternConfig = { displayName: 'Fieldset', - acceptsInput: false, initial: { patterns: [], }, - parseData: (_, obj) => { - return safeZodParse(FieldsetSchema, obj); - }, parseConfigData: obj => safeZodParse(configSchema, obj), getChildren(pattern, patterns) { return pattern.data.patterns.map( @@ -43,7 +37,6 @@ export const fieldsetConfig: PatternConfig = { }); return { pattern: { - _children: children, _patternId: pattern.id, type: 'fieldset', legend: pattern.data.legend, diff --git a/packages/forms/src/patterns/form-summary.ts b/packages/forms/src/patterns/form-summary.ts index cb20aa0a4..d17fe6224 100644 --- a/packages/forms/src/patterns/form-summary.ts +++ b/packages/forms/src/patterns/form-summary.ts @@ -6,20 +6,16 @@ import { safeZodParse } from '../util/zod'; const configSchema = z.object({ title: z.string().max(128), - summary: z.string().max(2024), + description: z.string().max(2024), }); export type FormSummary = Pattern>; export const formSummaryConfig: PatternConfig = { displayName: 'Form summary', - acceptsInput: false, initial: { - text: '', - initial: '', - required: true, - maxLength: 128, + title: 'Form title', + description: 'Form extended description', }, - parseData: obj => safeZodParse(configSchema, obj), // make this optional? parseConfigData: obj => safeZodParse(configSchema, obj), getChildren() { return []; diff --git a/packages/forms/src/patterns/index.ts b/packages/forms/src/patterns/index.ts index 706e036b0..5c827469a 100644 --- a/packages/forms/src/patterns/index.ts +++ b/packages/forms/src/patterns/index.ts @@ -1,5 +1,6 @@ import { type FormConfig } from '../pattern'; +import { addressConfig } from './address'; import { fieldsetConfig } from './fieldset'; import { inputConfig } from './input'; import { paragraphConfig } from './paragraph'; @@ -10,6 +11,7 @@ import { sequenceConfig } from './sequence'; // understand the usage scenarios better. export const defaultFormConfig: FormConfig = { patterns: { + address: addressConfig, fieldset: fieldsetConfig, input: inputConfig, paragraph: paragraphConfig, diff --git a/packages/forms/src/patterns/input.ts b/packages/forms/src/patterns/input.ts index 54190d9a3..329c2414b 100644 --- a/packages/forms/src/patterns/input.ts +++ b/packages/forms/src/patterns/input.ts @@ -16,16 +16,19 @@ export type InputPattern = Pattern>; const createSchema = (data: InputPattern['data']) => z.string().max(data.maxLength); -export const inputConfig: PatternConfig = { +type InputPatternOutput = z.infer>; + +export const inputConfig: PatternConfig = { displayName: 'Text input', - acceptsInput: true, initial: { label: '', initial: '', required: true, maxLength: 128, }, - parseData: (patternData, obj) => safeZodParse(createSchema(patternData), obj), + parseData: (patternData, obj) => { + return safeZodParse(createSchema(patternData), obj); + }, parseConfigData: obj => safeZodParse(configSchema, obj), getChildren() { return []; diff --git a/packages/forms/src/patterns/paragraph.ts b/packages/forms/src/patterns/paragraph.ts index ac1e98c07..54701db0c 100644 --- a/packages/forms/src/patterns/paragraph.ts +++ b/packages/forms/src/patterns/paragraph.ts @@ -10,17 +10,12 @@ const configSchema = z.object({ }); export type ParagraphPattern = Pattern>; -const createSchema = (data: ParagraphPattern['data']) => - z.string().max(data.maxLength); - export const paragraphConfig: PatternConfig = { displayName: 'Paragraph', - acceptsInput: false, initial: { - text: 'normal', + text: 'Paragraph text...', maxLength: 2048, }, - parseData: (patternData, obj) => safeZodParse(createSchema(patternData), obj), parseConfigData: obj => safeZodParse(configSchema, obj), getChildren() { return []; @@ -31,7 +26,6 @@ export const paragraphConfig: PatternConfig = { _patternId: pattern.id, type: 'paragraph' as const, text: pattern.data.text, - style: pattern.data.style, } as ParagraphProps, children: [], }; diff --git a/packages/forms/src/patterns/sequence.ts b/packages/forms/src/patterns/sequence.ts index 2701145a5..e92456342 100644 --- a/packages/forms/src/patterns/sequence.ts +++ b/packages/forms/src/patterns/sequence.ts @@ -13,21 +13,15 @@ export type SequencePattern = Pattern<{ patterns: PatternId[]; }>; -const sequenceSchema = z.array(z.string()); - const configSchema = z.object({ patterns: z.array(z.string()), }); export const sequenceConfig: PatternConfig = { displayName: 'Sequence', - acceptsInput: false, initial: { patterns: [], }, - parseData: (_, obj) => { - return safeZodParse(sequenceSchema, obj); - }, parseConfigData: obj => safeZodParse(configSchema, obj), getChildren(pattern, patterns) { return pattern.data.patterns.map( @@ -41,7 +35,6 @@ export const sequenceConfig: PatternConfig = { }); return { pattern: { - _children: children, _patternId: pattern.id, type: 'sequence', }, diff --git a/packages/forms/src/response.ts b/packages/forms/src/response.ts index 3e3db1374..46df833d5 100644 --- a/packages/forms/src/response.ts +++ b/packages/forms/src/response.ts @@ -37,17 +37,6 @@ export const applyPromptResponse = ( }; }; -const parsePatternValue = ( - config: FormConfig, - session: FormSession, - patternId: PatternId, - promptValue: string -) => { - const pattern = session.form.patterns[patternId]; - const patternConfig = getPatternConfig(config, pattern.type); - return patternConfig.parseData(pattern, promptValue); -}; - const parsePromptResponse = ( session: FormSession, config: FormConfig, diff --git a/packages/forms/src/session.ts b/packages/forms/src/session.ts index 4b8543663..e26063dee 100644 --- a/packages/forms/src/session.ts +++ b/packages/forms/src/session.ts @@ -34,12 +34,10 @@ export const nullSession: FormSession = { root: { id: 'root', type: 'sequence', - required: false, - initial: { + data: { patterns: [], }, - data: {}, - } as SequencePattern, + } satisfies SequencePattern, }, root: 'root', summary: { @@ -54,11 +52,15 @@ export const createFormSession = (form: Blueprint): FormSession => { return { data: { errors: {}, + values: {}, + /* values: Object.fromEntries( - Object.values(form.patterns).map((pattern, index) => { + Object.values(form.patterns).map(pattern => { + //return [pattern.id, config.patterns[pattern.id].initial]; return [pattern.id, form.patterns[pattern.id].data.initial]; }) ), + */ }, form, }; diff --git a/packages/forms/src/util/zod.ts b/packages/forms/src/util/zod.ts index 262bfe5bb..3a8060f37 100644 --- a/packages/forms/src/util/zod.ts +++ b/packages/forms/src/util/zod.ts @@ -6,8 +6,8 @@ import { type Pattern } from '..'; export const safeZodParse = ( schema: z.Schema, - obj: string -): Result => { + obj: unknown +): Result => { const result = schema.safeParse(obj); if (result.success) { return { diff --git a/packages/forms/tests/two-field-form.test.ts b/packages/forms/tests/two-field-form.test.ts index 42bc70b18..269b69cf4 100644 --- a/packages/forms/tests/two-field-form.test.ts +++ b/packages/forms/tests/two-field-form.test.ts @@ -1,6 +1,8 @@ import { describe, expect, test } from 'vitest'; import * as forms from '../src'; +import { SequencePattern } from '../src/patterns/sequence'; +import { InputPattern } from '../src/patterns/input'; const patterns: forms.Pattern[] = [ { @@ -9,30 +11,27 @@ const patterns: forms.Pattern[] = [ data: { patterns: ['pattern-1', 'pattern-2'], }, - initial: { - patterns: [], - }, - }, + } satisfies SequencePattern, { type: 'input', id: 'pattern-1', data: { - text: 'What is your first name?', + label: 'What is your first name?', initial: '', required: true, + maxLength: 128, }, - initial: '', - }, + } satisfies InputPattern, { type: 'input', id: 'pattern-2', data: { - text: 'What is your favorite word?', + label: 'What is your favorite word?', initial: '', - required: false, + required: true, + maxLength: 128, }, - initial: '', - }, + } satisfies InputPattern, ]; const form = forms.createForm( { From 94e9ebf0eb48554e505c2edffd793e2b72271ef6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Apr 2024 21:35:01 -0500 Subject: [PATCH 03/10] Bump vite from 5.0.12 to 5.0.13 (#93) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.12 to 5.0.13. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.0.13/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.0.13/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/design/package.json | 2 +- pnpm-lock.yaml | 211 +++++++++-------------------------- 2 files changed, 53 insertions(+), 160 deletions(-) diff --git a/packages/design/package.json b/packages/design/package.json index c987b4dc4..b7957dd98 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -56,7 +56,7 @@ "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "vite": "^5.0.12", + "vite": "^5.0.13", "vite-plugin-dts": "^3.7.1", "wait-on": "^7.2.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c216b7b76..bff1261f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -277,7 +277,7 @@ importers: version: 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) '@storybook/react-vite': specifier: ^7.6.10 - version: 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.0.12) + version: 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.1.4) '@storybook/test': specifier: ^7.6.10 version: 7.6.10(jest@29.7.0)(vitest@0.34.6) @@ -310,7 +310,7 @@ importers: version: github.com/danielnaab/uswds-compile/910cc2eeae7612d9ec0f56c40f6ea764f25ef2cf(ts-node@10.9.2) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.0.12) + version: 4.2.1(vite@5.1.4) concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -345,11 +345,11 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) vite: - specifier: ^5.0.12 - version: 5.0.12(@types/node@20.11.16) + specifier: ^5.0.13 + version: 5.1.4(@types/node@20.11.16) vite-plugin-dts: specifier: ^3.7.1 - version: 3.7.1(@types/node@20.11.16)(typescript@5.3.3)(vite@5.0.12) + version: 3.7.1(@types/node@20.11.16)(typescript@5.3.3)(vite@5.1.4) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -2470,6 +2470,7 @@ packages: cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-arm@0.18.20: @@ -2494,6 +2495,7 @@ packages: cpu: [arm] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-x64@0.18.20: @@ -2518,6 +2520,7 @@ packages: cpu: [x64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/darwin-arm64@0.18.20: @@ -2542,6 +2545,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/darwin-x64@0.18.20: @@ -2566,6 +2570,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-arm64@0.18.20: @@ -2590,6 +2595,7 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-x64@0.18.20: @@ -2614,6 +2620,7 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm64@0.18.20: @@ -2638,6 +2645,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm@0.18.20: @@ -2662,6 +2670,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ia32@0.18.20: @@ -2686,6 +2695,7 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-loong64@0.18.20: @@ -2710,6 +2720,7 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-mips64el@0.18.20: @@ -2734,6 +2745,7 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ppc64@0.18.20: @@ -2758,6 +2770,7 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-riscv64@0.18.20: @@ -2782,6 +2795,7 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-s390x@0.18.20: @@ -2806,6 +2820,7 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-x64@0.18.20: @@ -2830,6 +2845,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/netbsd-x64@0.18.20: @@ -2854,6 +2870,7 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true + dev: true optional: true /@esbuild/openbsd-x64@0.18.20: @@ -2878,6 +2895,7 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true + dev: true optional: true /@esbuild/sunos-x64@0.18.20: @@ -2902,6 +2920,7 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true + dev: true optional: true /@esbuild/win32-arm64@0.18.20: @@ -2926,6 +2945,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-ia32@0.18.20: @@ -2950,6 +2970,7 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-x64@0.18.20: @@ -2974,6 +2995,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): @@ -3502,7 +3524,7 @@ packages: chalk: 4.1.2 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.3.3)(vite@5.0.12): + /@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.3.3)(vite@5.1.4): resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: typescript: '>= 4.3.x' @@ -3516,7 +3538,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.3.3) typescript: 5.3.3 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) dev: true /@jridgewell/gen-mapping@0.3.3: @@ -4613,7 +4635,7 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.3 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 dev: true @@ -5087,7 +5109,7 @@ packages: - supports-color dev: false - /@storybook/builder-vite@7.6.10(typescript@5.3.3)(vite@5.0.12): + /@storybook/builder-vite@7.6.10(typescript@5.3.3)(vite@5.1.4): resolution: {integrity: sha512-qxe19axiNJVdIKj943e1ucAmADwU42fTGgMSdBzzrvfH3pSOmx2057aIxRzd8YtBRnj327eeqpgCHYIDTunMYQ==} peerDependencies: '@preact/preset-vite': '*' @@ -5119,7 +5141,7 @@ packages: magic-string: 0.30.7 rollup: 3.29.1 typescript: 5.3.3 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) transitivePeerDependencies: - encoding - supports-color @@ -5460,7 +5482,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.0.12): + /@storybook/react-vite@7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.1.4): resolution: {integrity: sha512-YE2+J1wy8nO+c6Nv/hBMu91Edew3K184L1KSnfoZV8vtq2074k1Me/8pfe0QNuq631AncpfCYNb37yBAXQ/80w==} engines: {node: '>=16'} peerDependencies: @@ -5468,16 +5490,16 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.3.3)(vite@5.0.12) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.3.3)(vite@5.1.4) '@rollup/pluginutils': 5.1.0 - '@storybook/builder-vite': 7.6.10(typescript@5.3.3)(vite@5.0.12) + '@storybook/builder-vite': 7.6.10(typescript@5.3.3)(vite@5.1.4) '@storybook/react': 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) - '@vitejs/plugin-react': 3.1.0(vite@5.0.12) + '@vitejs/plugin-react': 3.1.0(vite@5.1.4) magic-string: 0.30.3 react: 18.2.0 react-docgen: 7.0.3 react-dom: 18.2.0(react@18.2.0) - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -5958,10 +5980,6 @@ packages: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/estree@1.0.3: - resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} - dev: true - /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -6398,7 +6416,7 @@ packages: resolve-id-refs: 0.1.0 dev: false - /@vitejs/plugin-react@3.1.0(vite@5.0.12): + /@vitejs/plugin-react@3.1.0(vite@5.1.4): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6409,23 +6427,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 5.0.12(@types/node@20.11.16) - transitivePeerDependencies: - - supports-color - dev: true - - /@vitejs/plugin-react@4.2.1(vite@5.0.12): - resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.0 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) transitivePeerDependencies: - supports-color dev: true @@ -6444,7 +6446,6 @@ packages: vite: 5.1.4(@types/node@20.11.16) transitivePeerDependencies: - supports-color - dev: false /@vitest/coverage-c8@0.33.0(vitest@0.34.6): resolution: {integrity: sha512-DaF1zJz4dcOZS4k/neiQJokmOWqsGXwhthfmUdPGorXIQHjdPvV6JQSYhQDI41MyI8c+IieQUdIDs5XAMHtDDw==} @@ -7369,8 +7370,8 @@ packages: tsconfck: 3.0.0(typescript@5.3.3) unist-util-visit: 5.0.0 vfile: 6.0.1 - vite: 5.0.12(@types/node@20.11.16) - vitefu: 0.2.5(vite@5.0.12) + vite: 5.1.4(@types/node@20.11.16) + vitefu: 0.2.5(vite@5.1.4) which-pm: 2.1.1 yargs-parser: 21.1.1 zod: 3.22.4 @@ -7452,8 +7453,8 @@ packages: tsconfck: 3.0.0(typescript@5.3.3) unist-util-visit: 5.0.0 vfile: 6.0.1 - vite: 5.1.3(@types/node@20.11.16) - vitefu: 0.2.5(vite@5.1.3) + vite: 5.1.4(@types/node@20.11.16) + vitefu: 0.2.5(vite@5.1.4) which-pm: 2.1.1 yargs-parser: 21.1.1 zod: 3.22.4 @@ -9546,7 +9547,7 @@ packages: dependencies: semver: 7.6.0 shelljs: 0.8.5 - typescript: 5.5.0-dev.20240321 + typescript: 5.5.0-dev.20240402 dev: false /dset@3.1.3: @@ -9903,6 +9904,7 @@ packages: '@esbuild/win32-arm64': 0.19.5 '@esbuild/win32-ia32': 0.19.5 '@esbuild/win32-x64': 0.19.5 + dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -14440,12 +14442,6 @@ packages: resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} requiresBuild: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -15579,19 +15575,11 @@ packages: /postcss@8.4.19: resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} @@ -15600,7 +15588,6 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: false /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} @@ -18338,8 +18325,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript@5.5.0-dev.20240321: - resolution: {integrity: sha512-QEUqMB18VAUQBHtHlq8BfjxGZzFkavH5fhZn+I97N67mDZTa86n1S8kiRKmrbxVwPAdvn3DYtJzcGq5OvdWkmQ==} + /typescript@5.5.0-dev.20240402: + resolution: {integrity: sha512-Dg6kiTZGVvuj9hqDzrqqUwZ3ruAcF1E7e9tSM53pP1XvZhPd4ZHLBF2rdbzjT2wIJOYL9Vl8OkAcL7dCJBB4Fg==} engines: {node: '>=14.17'} hasBin: true dev: false @@ -18900,7 +18887,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) transitivePeerDependencies: - '@types/node' - less @@ -18912,7 +18899,7 @@ packages: - terser dev: true - /vite-plugin-dts@3.7.1(@types/node@20.11.16)(typescript@5.3.3)(vite@5.0.12): + /vite-plugin-dts@3.7.1(@types/node@20.11.16)(typescript@5.3.3)(vite@5.1.4): resolution: {integrity: sha512-VZJckNFpVfRAkmOxhGT5OgTUVWVXxkNQqLpBUuiNGAr9HbtvmvsPLo2JB3Xhn+o/Z9+CT6YZfYa4bX9SGR5hNw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -18928,7 +18915,7 @@ packages: debug: 4.3.4 kolorist: 1.8.0 typescript: 5.3.3 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) vue-tsc: 1.8.27(typescript@5.3.3) transitivePeerDependencies: - '@types/node' @@ -18947,77 +18934,6 @@ packages: - supports-color dev: true - /vite@5.0.12(@types/node@20.11.16): - resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.11.16 - esbuild: 0.19.5 - postcss: 8.4.33 - rollup: 4.9.5 - optionalDependencies: - fsevents: 2.3.3 - - /vite@5.1.3(@types/node@20.11.16): - resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.11.16 - esbuild: 0.19.12 - postcss: 8.4.35 - rollup: 4.9.5 - optionalDependencies: - fsevents: 2.3.3 - dev: false - /vite@5.1.4(@types/node@20.11.16): resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -19052,29 +18968,6 @@ packages: rollup: 4.9.5 optionalDependencies: fsevents: 2.3.3 - dev: false - - /vitefu@0.2.5(vite@5.0.12): - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 5.0.12(@types/node@20.11.16) - dev: false - - /vitefu@0.2.5(vite@5.1.3): - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 5.1.3(@types/node@20.11.16) - dev: false /vitefu@0.2.5(vite@5.1.4): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} @@ -19161,7 +19054,7 @@ packages: strip-literal: 1.3.0 tinybench: 2.6.0 tinypool: 0.7.0 - vite: 5.0.12(@types/node@20.11.16) + vite: 5.1.4(@types/node@20.11.16) vite-node: 0.34.6(@types/node@20.11.16) why-is-node-running: 2.2.2 transitivePeerDependencies: From 5959d97d002324dc1b77eeb843a093d7334523c1 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Wed, 3 Apr 2024 21:51:33 -0500 Subject: [PATCH 04/10] Fix failing address pattern tests --- packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx | 2 +- .../src/FormManager/FormList/CreateNew/PDFFileSelect.test.tsx | 2 +- packages/design/src/config/view/Address/Address.stories.tsx | 0 packages/design/src/config/view/Address/Address.test.tsx | 0 packages/forms/src/patterns/address/address.test.ts | 0 5 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 packages/design/src/config/view/Address/Address.stories.tsx delete mode 100644 packages/design/src/config/view/Address/Address.test.tsx delete mode 100644 packages/forms/src/patterns/address/address.test.ts diff --git a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx index 9c7654b8d..ce8571978 100644 --- a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx @@ -46,7 +46,7 @@ export const FormEditAddPattern: StoryObj = { // Get the initial count of inputs const initialCount = (await canvas.getAllByRole('textbox')).length; - const select = canvas.getByLabelText('Add a pattern:'); + const select = canvas.getByLabelText('Add a pattern'); await userEvent.selectOptions(select, 'Text input'); const finalCount = (await canvas.getAllByRole('textbox')).length; diff --git a/packages/design/src/FormManager/FormList/CreateNew/PDFFileSelect.test.tsx b/packages/design/src/FormManager/FormList/CreateNew/PDFFileSelect.test.tsx index 621aa5d8e..878875fb0 100644 --- a/packages/design/src/FormManager/FormList/CreateNew/PDFFileSelect.test.tsx +++ b/packages/design/src/FormManager/FormList/CreateNew/PDFFileSelect.test.tsx @@ -2,6 +2,6 @@ * @vitest-environment jsdom */ import { describeStories } from '../../../test-helper'; -import meta, * as stories from './CreateNew.stories'; +import meta, * as stories from './PDFFileSelect.stories'; describeStories(meta.title, stories); diff --git a/packages/design/src/config/view/Address/Address.stories.tsx b/packages/design/src/config/view/Address/Address.stories.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/design/src/config/view/Address/Address.test.tsx b/packages/design/src/config/view/Address/Address.test.tsx deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/forms/src/patterns/address/address.test.ts b/packages/forms/src/patterns/address/address.test.ts deleted file mode 100644 index e69de29bb..000000000 From 8eee124855fa36634cfa207d73b2fa3c98d78dbc Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Wed, 3 Apr 2024 21:57:38 -0500 Subject: [PATCH 05/10] Address cleanup (#95) * Fix failing address pattern tests * Linting --- .../SubmissionConfirmation/SubmissionConfirmation.stories.tsx | 1 - packages/design/src/config/view/TextInput/TestInput.stories.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx b/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx index c6a195de6..cc64b79c7 100644 --- a/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx +++ b/packages/design/src/config/view/SubmissionConfirmation/SubmissionConfirmation.stories.tsx @@ -1,7 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; import SubmissionConfirmation from '.'; -import { type SubmissionConfirmationProps } from '@atj/forms'; export default { title: 'patterns/SubmissionConfirmation', diff --git a/packages/design/src/config/view/TextInput/TestInput.stories.tsx b/packages/design/src/config/view/TextInput/TestInput.stories.tsx index 42d95a5b6..dd40362cc 100644 --- a/packages/design/src/config/view/TextInput/TestInput.stories.tsx +++ b/packages/design/src/config/view/TextInput/TestInput.stories.tsx @@ -2,7 +2,6 @@ import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import type { Meta, StoryObj } from '@storybook/react'; -import { type TextInputProps } from '@atj/forms'; import TextInput from '.'; export default { From f9b8afa982b0b5087416362e51f6553e18e49096 Mon Sep 17 00:00:00 2001 From: Jim Moffet Date: Fri, 5 Apr 2024 14:25:35 -0700 Subject: [PATCH 06/10] Use live API on cloud.gov for parsing (#90) * editable stub * editable stub * editable stub * editable stub * editable stub * set up api * set up api * set up api * set up api * Merge jim/api-setup-2 into this branch * Tweak parsing API constant and removed cruft --------- Co-authored-by: Daniel Naab --- .../src/FormManager/FormEdit/Preview.tsx | 42 +- packages/forms/src/documents/document.ts | 4 +- packages/forms/src/documents/pdf/index.ts | 1 - packages/forms/src/documents/pdf/mock-api.ts | 294 ---- .../forms/src/documents/pdf/parsing-api.ts | 190 +++ packages/forms/src/documents/suggestions.ts | 1185 +---------------- packages/forms/src/documents/util.ts | 14 + 7 files changed, 232 insertions(+), 1498 deletions(-) delete mode 100644 packages/forms/src/documents/pdf/mock-api.ts create mode 100644 packages/forms/src/documents/pdf/parsing-api.ts diff --git a/packages/design/src/FormManager/FormEdit/Preview.tsx b/packages/design/src/FormManager/FormEdit/Preview.tsx index 1cec63c4c..2482d52e0 100644 --- a/packages/design/src/FormManager/FormEdit/Preview.tsx +++ b/packages/design/src/FormManager/FormEdit/Preview.tsx @@ -92,6 +92,7 @@ const createPatternPreviewComponent = ( uswdsRoot: string ) => { const PatternPreviewComponent: PatternComponent = props => { + const context = useFormEditStore(state => state.context); const selectedPattern = useFormEditStore(state => state.selectedPattern); const handleEditClick = useFormEditStore(state => state.handleEditClick); @@ -99,31 +100,34 @@ const createPatternPreviewComponent = ( const divClassNames = isSelected ? 'form-group-row field-selected' : 'form-group-row'; + const EditComponent = context.editComponents[props.type]; return (
- + + + ) : null}
); diff --git a/packages/forms/src/documents/document.ts b/packages/forms/src/documents/document.ts index bc15cf0a3..f619725d7 100644 --- a/packages/forms/src/documents/document.ts +++ b/packages/forms/src/documents/document.ts @@ -9,7 +9,7 @@ import { import { InputPattern } from '../patterns/input'; import { SequencePattern } from '../patterns/sequence'; import { PDFDocument, getDocumentFieldData } from './pdf'; -import { getSuggestedPatternsFromCache } from './suggestions'; +import { getSuggestedPatterns } from './suggestions'; import { DocumentFieldMap } from './types'; export type DocumentTemplate = PDFDocument; @@ -22,7 +22,7 @@ export const addDocument = async ( } ) => { const fields = await getDocumentFieldData(fileDetails.data); - const cachedPdf = await getSuggestedPatternsFromCache(fileDetails.data); + const cachedPdf = await getSuggestedPatterns(fileDetails.data); if (cachedPdf) { form = updateFormSummary(form, { diff --git a/packages/forms/src/documents/pdf/index.ts b/packages/forms/src/documents/pdf/index.ts index 1982c9d14..b2b6f5c83 100644 --- a/packages/forms/src/documents/pdf/index.ts +++ b/packages/forms/src/documents/pdf/index.ts @@ -1,7 +1,6 @@ export { getDocumentFieldData } from './extract'; export * from './generate'; export { generateDummyPDF } from './generate-dummy'; -export { parseAlabamaNameChangeForm } from './mock-api'; export type PDFDocument = { type: 'pdf'; diff --git a/packages/forms/src/documents/pdf/mock-api.ts b/packages/forms/src/documents/pdf/mock-api.ts deleted file mode 100644 index 5dedc714f..000000000 --- a/packages/forms/src/documents/pdf/mock-api.ts +++ /dev/null @@ -1,294 +0,0 @@ -import * as z from 'zod'; - -import { type Pattern, type PatternId, type PatternMap } from '../..'; - -import { type FieldsetPattern } from '../../patterns/fieldset'; -import { type InputPattern } from '../../patterns/input'; -import { type ParagraphPattern } from '../../patterns/paragraph'; -import { SequencePattern } from '../../patterns/sequence'; - -import { stringToBase64 } from '../util'; -import { type DocumentFieldMap } from '../types'; - -import json from './al_name_change'; - -const TxInput = z.object({ - input_type: z.literal('Tx'), - input_params: z.object({ - text: z.string(), - text_style: z.string(), - output_id: z.string(), - placeholder: z.string(), - instructions: z.string(), - required: z.boolean(), - options: z.array(z.string()), - }), -}); - -const BtnInput = z.object({ - input_type: z.literal('Btn'), - input_params: z.object({ - text: z.string(), - text_style: z.string(), - output_id: z.string(), - placeholder: z.string(), - instructions: z.string(), - required: z.boolean(), - options: z.array(z.string()), - }), -}); - -const ExtractedInput = z.discriminatedUnion('input_type', [TxInput, BtnInput]); -type ExtractedInput = z.infer; - -const ExtractedElement = z.object({ - id: z.string(), - group_id: z.number(), - element_type: z.string(), - element_params: z.object({ - text: z.string(), - text_style: z.string(), - options: z.null(), - }), - inputs: ExtractedInput.array(), - parent: z.string().nullable(), -}); -type ExtractedElement = z.infer; - -const RawTxField = z.object({ - type: z.literal('/Tx'), - var_name: z.string(), - field_dict: z.object({ - font_info: z.string(), - field_type: z.string(), - coordinates: z.number().array().optional(), - field_label: z.string(), - field_instructions: z.string(), - }), -}); - -const RawBtnField = z.object({ - type: z.literal('/Btn'), - var_name: z.string(), - field_dict: z.object({ - font_info: z.string(), - flags: z.number(), - field_type: z.string(), - field_label: z.string(), - child_fields: z.array(z.object({ coordinates: z.number().array() })), - num_children: z.number(), - }), -}); - -const ExtractedObject = z.object({ - raw_text: z.string(), - title: z.string(), - description: z.string(), - elements: ExtractedElement.array(), - raw_fields: z.discriminatedUnion('type', [RawTxField, RawBtnField]).array(), -}); - -type ExtractedObject = z.infer; - -export type ParsedPdf = { - patterns: PatternMap; - outputs: DocumentFieldMap; // to populate FormOutput - root: PatternId; - title: string; -}; - -export const parseAlabamaNameChangeForm = (): ParsedPdf => { - const extracted: ExtractedObject = ExtractedObject.parse(json); - const parsedPdf: ParsedPdf = { - patterns: {}, - outputs: {}, - root: 'root', - title: extracted.title, - }; - const rootSequence: PatternId[] = []; - for (const element of extracted.elements) { - const fieldsetPatterns: PatternId[] = []; - if (element.inputs.length === 0) { - parsedPdf.patterns[element.id] = { - type: 'paragraph', - id: element.id, - data: { - text: element.element_params.text, - maxLength: 2048, - }, - } satisfies ParagraphPattern; - rootSequence.push(element.id); - continue; - } - for (const input of element.inputs) { - if (input.input_type === 'Tx') { - const id = stringToBase64(PdfFieldMap[input.input_params.output_id]); - parsedPdf.patterns[id] = { - type: 'input', - id, - data: { - label: input.input_params.instructions, - required: false, - initial: '', - maxLength: 128, - }, - } satisfies InputPattern; - fieldsetPatterns.push(id); - parsedPdf.outputs[id] = { - type: 'TextField', - name: PdfFieldMap[input.input_params.output_id], - label: input.input_params.instructions, - value: '', - maxLength: 1024, - required: input.input_params.required, - }; - } - } - if (fieldsetPatterns.length > 0) { - parsedPdf.patterns[element.id] = { - id: element.id, - type: 'fieldset', - data: { - legend: element.element_params.text, - patterns: fieldsetPatterns, - }, - } satisfies FieldsetPattern; - rootSequence.push(element.id); - } - } - parsedPdf.patterns['root'] = { - id: 'root', - type: 'sequence', - data: { - patterns: rootSequence, - }, - } satisfies SequencePattern; - return parsedPdf; -}; - -const getElementInputs = (element: ExtractedElement): Pattern[] => { - return element.inputs - .map((input: ExtractedInput) => { - if (input.input_type === 'Tx') { - return { - type: 'input', - id: input.input_params.output_id, - data: { - label: input.input_params.instructions, - required: false, - maxLength: 256, - initial: '', - }, - } satisfies InputPattern; - } - return null as unknown as Pattern; - }) - .filter((item): item is NonNullable => item !== null); -}; - -const PdfFieldMap: Record = { - County_Name1: 'users1_address_county', - Current_First_Name1: 'users1_name_first', - Current_Middle_Name1: 'users1_name_middle', - Current_Last_Name1: 'users1_name_last', - Current_First_Name2: 'users1_name_first__2', - Current_Middle_Name2: 'users1_name_middle__2', - Current_Last_Name2: 'users1_name_last__2', - Street_Address: 'users1_address_line_one', - City: 'users1_address_city', - State: 'users1_address_state', - Zip: 'users1_address_zip', - Home_Phone: 'users1_phone', - Work_Phone: 'work_phone', - DOB: 'users1_birthdate', - Birth_First_Name: 'user1_preferred_name_first', - Birth_Middle_Name: 'user1_preferred_name_middle', - Birth_Last_Name: 'user1_preferred_name_last', - County_Name2: 'user1_address_county__2', - PhotoID: 'photo_id', - 'DL#': 'driver_license_number', - 'ID#': 'non_driver_id_number', - Why_change_name1: 'reasons_for_change', // pdf-lib combines the three input lines into a single input - Why_change_name2: 'reasons_for_change', - Why_change_name3: 'reasons_for_change', - New_First_Name: 'users1_previous_names1_first', - New_Middle_Name: 'users1_previous_names1_middle', - New_Last_Name: 'users1_previous_names1_last', -}; - -/* -function parseJson(obj: ExtractedJsonType): Array { - return parseElements(obj.elements); -} - -function parseInputs( - inputs: ExtractedJsonType['elements'][0]['inputs'] -): Array> { - const output = inputs.reduce((acc: any[], input) => { - const params = input['input_params']; - - // const formElementType should be 'Textfield' if inputType is 'Tx' - // const formElementType should be 'RadioGroup' if inputType is 'Btn' - // const formElementType should be 'Checkbox' if inputType is 'Ch' - // const formElementType should be 'Dropdown' if inputType is 'Dr' - - if (input['input_type'] === 'Tx') { - const value: DocumentFieldValue = { - type: 'TextField', // modify api so we can use inputType directly here - //elementType: 'input', - //inputType: input['input_type'], - //inputText: params.text, - //inputTextStyle: params.text_style, - name: params.output_id, - label: params.output_id, - value: 'Short answer', // modify api to provide this - //inputPlaceholder: params.placeholder, - instructions: params.instructions, - required: true, // api should check if there's a mix, default to true? Can't all be false... - ///inputOptions: params.options, - }; - acc.push(value); - } - - return acc; - }, []); - - return output; -} - -function parseElements( - pdfElements: ExtractedJsonType['elements'] -): Pattern[] { - const output = pdfElements.reduce((acc, element) => { - const elementOutput = { - type: 'Paragraph', - name: element.id, - groupId: element.group_id, - value: element.element_params['text'], - elementTextStyle: element.element_params.text_style, - elementOptions: element.element_params.options, - elementType: element.element_params.elementType, - }; - - const parsedInputs = parseInputs(element['inputs']); - parsedInputs.forEach(input => { - input['groupId'] = element.group_id; - }); - - if (!element.element_params.text) { - acc.push(...parsedInputs); - return acc; - } - - acc.push(elementOutput, ...parsedInputs); - - return acc; - }, []); - - pdfElements.map(pdfElement => { - const inputs = getElementInputs(pdfElement); - }); - - return output; -} -*/ diff --git a/packages/forms/src/documents/pdf/parsing-api.ts b/packages/forms/src/documents/pdf/parsing-api.ts new file mode 100644 index 000000000..3f8de9e1a --- /dev/null +++ b/packages/forms/src/documents/pdf/parsing-api.ts @@ -0,0 +1,190 @@ +import * as z from 'zod'; + +import { type PatternId, type PatternMap } from '../..'; + +import { type FieldsetPattern } from '../../patterns/fieldset'; +import { type InputPattern } from '../../patterns/input'; +import { type ParagraphPattern } from '../../patterns/paragraph'; +import { type SequencePattern } from '../../patterns/sequence'; + +import { stringToBase64, uint8ArrayToBase64 } from '../util'; +import { type DocumentFieldMap } from '../types'; + +const TxInput = z.object({ + input_type: z.literal('Tx'), + input_params: z.object({ + text: z.string(), + text_style: z.string(), + output_id: z.string(), + placeholder: z.string(), + instructions: z.string(), + required: z.boolean(), + options: z.array(z.string()), + }), +}); + +const BtnInput = z.object({ + input_type: z.literal('Btn'), + input_params: z.object({ + text: z.string(), + text_style: z.string(), + output_id: z.string(), + placeholder: z.string(), + instructions: z.string(), + required: z.boolean(), + options: z.array(z.string()), + }), +}); + +const ExtractedInput = z.discriminatedUnion('input_type', [TxInput, BtnInput]); +type ExtractedInput = z.infer; + +const ExtractedElement = z.object({ + id: z.string(), + group_id: z.number(), + element_type: z.string(), + element_params: z.object({ + text: z.string(), + text_style: z.string(), + options: z.string().array().nullable(), + }), + inputs: ExtractedInput.array(), + parent: z.string().nullable(), +}); +type ExtractedElement = z.infer; + +const RawTxField = z.object({ + type: z.literal('/Tx'), + var_name: z.string(), + field_dict: z.object({ + font_info: z.string(), + field_type: z.string(), + coordinates: z.number().array().optional(), + field_label: z.string(), + field_instructions: z.string(), + }), +}); + +const RawBtnField = z.object({ + type: z.literal('/Btn'), + var_name: z.string(), + field_dict: z.object({ + font_info: z.string(), + flags: z.number(), + field_type: z.string(), + field_label: z.string(), + child_fields: z.array(z.object({ coordinates: z.number().array() })), + num_children: z.number(), + }), +}); + +const ExtractedObject = z.object({ + raw_text: z.string(), + title: z.string(), + description: z.string(), + elements: ExtractedElement.array(), + raw_fields: z.discriminatedUnion('type', [RawTxField, RawBtnField]).array(), +}); + +type ExtractedObject = z.infer; + +export type ParsedPdf = { + patterns: PatternMap; + outputs: DocumentFieldMap; // to populate FormOutput + root: PatternId; + title: string; +}; + +export const callExternalParser = async ( + rawData: Uint8Array, + endpointUrl: string = 'https://10x-atj-doc-automation-staging.app.cloud.gov/api/parse' +): Promise => { + const base64 = await uint8ArrayToBase64(rawData); + + const response = await fetch(endpointUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + pdf: base64, + }), + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + const json = await response.json(); + + console.log('json.parsed_pdf.elements is:\n', json.parsed_pdf.elements); + + const extracted: ExtractedObject = ExtractedObject.parse(json.parsed_pdf); + + const parsedPdf: ParsedPdf = { + patterns: {}, + outputs: {}, + root: 'root', + title: extracted.title, + }; + + const rootSequence: PatternId[] = []; + for (const element of extracted.elements) { + const fieldsetPatterns: PatternId[] = []; + if (element.inputs.length === 0) { + parsedPdf.patterns[element.id] = { + type: 'paragraph', + id: element.id, + data: { + text: element.element_params.text, + maxLength: 2048, + }, + } satisfies ParagraphPattern; + rootSequence.push(element.id); + continue; + } + for (const input of element.inputs) { + if (input.input_type === 'Tx') { + const id = stringToBase64(input.input_params.output_id); + parsedPdf.patterns[id] = { + type: 'input', + id, + data: { + label: input.input_params.instructions, + required: false, + initial: '', + maxLength: 128, + }, + } satisfies InputPattern; + fieldsetPatterns.push(id); + parsedPdf.outputs[id] = { + type: 'TextField', + name: input.input_params.output_id, + label: input.input_params.instructions, + value: '', + maxLength: 1024, + required: input.input_params.required, + }; + } + } + if (fieldsetPatterns.length > 0) { + parsedPdf.patterns[element.id] = { + id: element.id, + type: 'fieldset', + data: { + legend: element.element_params.text, + patterns: fieldsetPatterns, + }, + } satisfies FieldsetPattern; + rootSequence.push(element.id); + } + } + parsedPdf.patterns['root'] = { + id: 'root', + type: 'sequence', + data: { + patterns: rootSequence, + }, + } satisfies SequencePattern; + return parsedPdf; +}; diff --git a/packages/forms/src/documents/suggestions.ts b/packages/forms/src/documents/suggestions.ts index 3103f297f..8a80d6f02 100644 --- a/packages/forms/src/documents/suggestions.ts +++ b/packages/forms/src/documents/suggestions.ts @@ -1,4 +1,4 @@ -import { type ParsedPdf, parseAlabamaNameChangeForm } from './pdf/mock-api'; +import { callExternalParser, type ParsedPdf } from './pdf/parsing-api'; export type SuggestedForm = { id: string; @@ -9,1187 +9,8 @@ export type SuggestedForm = { type?: 'text'; }[]; -export const getSuggestedPatternsFromCache = async ( +export const getSuggestedPatterns = async ( rawData: Uint8Array ): Promise => { - const cache = getFakeCache(); - const hash = await getObjectHash(rawData); - return cache.get(hash); + return await callExternalParser(rawData); }; - -const getFakeCache = () => { - const cache: Record = { - 'hardcoded-hash': UD105_TEST_DATA, - '179be8c1c78b01ed7c45569912c2bb862ec3764617f908ebc29178e36fd6316d': - parseAlabamaNameChangeForm(), - }; - return { - get(hashKey: string) { - return cache[hashKey]; - }, - }; -}; - -const getObjectHash = async (buffer: Uint8Array) => { - const hashBuffer = await crypto.subtle.digest('SHA-256', buffer); - const hashArray = new Uint8Array(hashBuffer); - const hashHex = hashArray.reduce( - (str, byte) => str + byte.toString(16).padStart(2, '0'), - '' - ); - return hashHex; -}; - -export const AL_NAME_TEST_DATA = { - Radio_group_test: { - type: 'RadioGroup', - name: 'Radio_group_test', - label: 'Radio_group_test', - value: '', - groupId: 3, - instructions: 'Select something.', - required: true, - }, - Some_random_key_name: { - type: 'Paragraph', - name: 'Some_random_key_name', - value: 'Your current name: ', - groupId: 3, - }, - Current_First_Name1: { - type: 'TextField', - name: 'Current_First_Name1', - label: 'Current_First_Name1', - value: 'Short answer', - groupId: 3, - instructions: 'Type your current first name.', - required: true, - }, - Current_Middle_Name1: { - type: 'TextField', - name: 'Current_Middle_Name1', - label: 'Current_Middle_Name1', - value: 'Short answer', - groupId: 3, - instructions: 'Type your current middle name.', - required: true, - }, - Current_Last_Name1: { - type: 'TextField', - name: 'Current_Last_Name1', - label: 'Current_Last_Name1', - value: 'Short answer', - groupId: 3, - instructions: 'Type your current last name.', - required: true, - }, -}; - -export const UD105_TEST_DATA = [ - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].CaseNumber[0].CaseNumber[0]', - id: 'pdf-obj-0-4', - value: '', - label: 'CASE NUMBER', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].AttyBarNo[0]', - id: 'pdf-obj-0-5', - value: '', - label: 'STATE BAR NUMBER', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].Name[0]', - id: 'pdf-obj-0-6', - value: '', - label: 'NAME', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].AttyFirm[0]', - id: 'pdf-obj-0-7', - value: '', - label: 'FIRM NAME', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].Street[0]', - id: 'pdf-obj-0-8', - value: '', - label: 'STREET ADDRESS', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].City[0]', - id: 'pdf-obj-0-9', - value: '', - label: 'CITY', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].State[0]', - id: 'pdf-obj-0-10', - value: '', - label: 'STATE', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].Zip[0]', - id: 'pdf-obj-0-11', - value: '', - label: 'ZIP CODE', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].Phone[0]', - id: 'pdf-obj-0-12', - value: '', - label: 'Telephone number:', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].Fax[0]', - id: 'pdf-obj-0-13', - value: '', - label: 'Fax number', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].Email[0]', - id: 'pdf-obj-0-14', - value: '', - label: 'E-MAIL ADDRESS:', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].AttyPartyInfo[0].AttyFor[0]', - id: 'pdf-obj-0-15', - value: '', - label: 'ATTORNEY FOR name', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].CourtInfo[0].CrtCounty[0]', - id: 'pdf-obj-0-16', - value: '', - label: 'SUPERIOR COURT OF CALIFORNIA, COUNTY OF', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].CourtInfo[0].CrtStreet[0]', - id: 'pdf-obj-0-17', - value: '', - label: 'STREET ADDRESS', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].CourtInfo[0].CrtMailingAdd[0]', - id: 'pdf-obj-0-18', - value: '', - label: 'MAILING ADDRESS', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].CourtInfo[0].CrtCityZip[0]', - id: 'pdf-obj-0-19', - value: '', - label: 'CITY AND ZIP CODE', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].CourtInfo[0].CrtBranch[0]', - id: 'pdf-obj-0-20', - value: '', - label: 'BRANCH NAME', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].TitlePartyName[0].Party1[0]', - id: 'pdf-obj-0-21', - value: '', - label: 'PLAINTIFF', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page1[0].P1Caption[0].TitlePartyName[0].Party2[0]', - id: 'pdf-obj-0-22', - value: '', - label: 'DEFENDANT', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page1[0].List1[0].item1[0].FillField1[0]', - id: 'pdf-obj-0-23', - label: - 'Defendant all defendants for whom this answer is filed must be named and must sign this answer unless their attorney signs', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lia[0].Check1[0]', - id: 'pdf-obj-0-24', - value: '1', - label: - 'General Denial (Do not check this box if the complaint demands more than $1,000.)\n Defendant generally denies each statement of the complaint and of the Mandatory Cover Sheet and Supplemental AllegationsUnlawful Detainer (form UD-101).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].Check2[0]', - id: 'pdf-obj-0-25', - value: '2', - label: - 'Specific Denials (Check this box and complete (1) and (2) below if complaint demands more than $1,000.)\n Defendant admits that all of the statements of the complaint and of the Mandatory Cover Sheet and Supplemental AllegationsUnlawful Detainer (form UD-101) are true EXCEPT:', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li1[0].Subitem1[0].Lia[0].FillField2[0]', - id: 'pdf-obj-0-26', - label: - 'Defendant claims the following statements of the complaint are false state paragraph numbers from the complaint or explain here or, if more room needed, on form MC-025', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li1[0].Subitem1[0].Lia[0].Check3[0]', - id: 'pdf-obj-0-27', - value: '1', - label: 'Explanation is on form MC-025, titled as Attachment 2b(1)(a).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li1[0].Subitem1[0].Lib[0].Check4[0]', - id: 'pdf-obj-0-28', - value: '1', - label: 'Explanation is on form MC-025, titled as Attachment 2b(1)(b).', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li1[0].Subitem1[0].Lib[0].FillField3[0]', - id: 'pdf-obj-0-29', - label: 'state paragraph numbers from the complaint or explain here', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li2[0].Subitem2[0].Lia[0].Check5[0]', - id: 'pdf-obj-0-30', - value: '1', - label: - "Defendant did not receive plaintiff's Mandatory Cover Sheet and Supplemental Allegations (form UD-101). (If not checked, complete (b) and (c), as appropriate.)", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li2[0].Subitem2[0].Lib[0].Check5[0]', - id: 'pdf-obj-0-31', - value: '1', - label: - "Defendant claims the statements in the Verification required for issuance of summonsresidential, item 3 of plaintiff's Mandatory Cover Sheet and Supplemental Allegations (form UD-101), are false.", - }, - { - tag: 'textarea', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li2[0].Subitem2[0].Lic[0].FillField4[0]', - id: 'pdf-obj-0-32', - label: - 'Defendant claims the following statements on the Mandatory Cover Sheet and Supplemental AllegationsUnlawful Detainer form UD-101 are false state paragraph numbers from form UD-101 or explain here or, if more room needed, on form MC-025', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page1[0].List2[0].Lib[0].SubListb[0].Li2[0].Subitem2[0].Lic[0].Check6[0]', - id: 'pdf-obj-0-33', - value: '1', - label: 'Explanation is on form MC-025, titled as Attachment 2b(2)(c).', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page2[0].PxCaption[0].CaseNumber[0].CaseNumber[0]', - id: 'pdf-obj-1-4', - value: '', - label: 'CASE NUMBER:', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page2[0].PxCaption[0].TitlePartyName[0].Party1[0]', - id: 'pdf-obj-1-5', - value: '', - label: 'PLAINTIFF', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page2[0].PxCaption[0].TitlePartyName[0].Party2[0]', - id: 'pdf-obj-1-6', - value: '', - label: 'DEFENDANT', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page2[0].List2[0].Lib[0].Sublib[0].Li2[0].Subitem2[0].Lid[0].FillField5[0]', - id: 'pdf-obj-1-7', - label: - 'Defendant has no information or belief that the following statements on the Mandatory Cover Sheet and Supplemental AllegationsUnlawful Detainer form UD-101 are true, so defendant denies them state paragraph numbers from form UD-101 or explain here or, if more room needed, on form MC-025', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List2[0].Lib[0].Sublib[0].Li2[0].Subitem2[0].Lid[0].Check7[0]', - id: 'pdf-obj-1-8', - value: '1', - label: 'Explanation is on form MC-025, titled as Attachment 2b(2)(d).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lia[0].Check8[0]', - id: 'pdf-obj-1-10', - value: '1', - label: - '(Nonpayment of rent only) Plaintiff has breached the warranty to provide habitable premises.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lib[0].Check9[0]', - id: 'pdf-obj-1-11', - value: '1', - label: - '(Nonpayment of rent only) Defendant made needed repairs and properly deducted the cost from the rent, and plaintiff did not give proper credit.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lic[0].Check10[0]', - id: 'pdf-obj-1-12', - value: '1', - label: '(Nonpayment of rent only)', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page2[0].List3[0].Lic[0].Date1[0]', - id: 'pdf-obj-1-13', - value: '', - label: 'on date', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lid[0].Check11[0]', - id: 'pdf-obj-1-14', - value: '1', - label: 'Plaintiff waived, changed, or canceled the notice to quit.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lie[0].Check12[0]', - id: 'pdf-obj-1-15', - value: '1', - label: - 'Plaintiff served defendant with the notice to quit or filed the complaint to retaliate against defendant.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lif[0].Check13[0]', - id: 'pdf-obj-1-16', - value: '1', - label: - 'By serving defendant with the notice to quit or filing the complaint, plaintiff is arbitrarily discriminating against the defendant in violation of the Constitution or the laws of the United States or California.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lig[0].Check14[0]', - id: 'pdf-obj-1-17', - value: '1', - label: - "Plaintiff's demand for possession violates the local rent control or eviction control ordinance of", - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page2[0].List3[0].Lig[0].FillField6[0]', - id: 'pdf-obj-1-18', - value: '', - label: 'city or county, title of ordinance, and date of passage', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lih[0].Check15[0]', - id: 'pdf-obj-1-19', - value: '1', - label: - "Plaintiff's demand for possession is subject to the Tenant Protection Act of 2019, Civil Code section 1946.2 or 1947.12, and is not in compliance with the act. (Check all that apply and briefly state in item 3w the facts that support each.)", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lih[0].SubListh[0].Li1[0].Check16[0]', - id: 'pdf-obj-1-20', - value: '1', - label: - 'Plaintiff failed to state a just cause for termination of tenancy in the written notice to terminate.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lih[0].SubListh[0].Li2[0].Check17[0]', - id: 'pdf-obj-1-21', - value: '1', - label: - 'Plaintiff failed to provide an opportunity to cure any alleged violations of terms and conditions of the lease (other than payment of rent) as required under Civil Code section 1946.2(c).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lih[0].SubListh[0].Li3[0].Check18[0]', - id: 'pdf-obj-1-22', - value: '1', - label: - 'Plaintiff failed to comply with the relocation assistance requirements of Civil Code section 1946.2(d).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lih[0].SubListh[0].Li4[0].Check19[0]', - id: 'pdf-obj-1-23', - value: '1', - label: - 'Plaintiff has raised the rent more than the amount allowed under Civil Code section 1947.12, and the only unpaid rent is the unauthorized amount.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lih[0].SubListh[0].Li5[0].Check20[0]', - id: 'pdf-obj-1-24', - value: '1', - label: - 'Plaintiff violated the Tenant Protection Act in another manner that defeats the complaint.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lii[0].Check21[0]', - id: 'pdf-obj-1-25', - value: '1', - label: - 'Plaintiff accepted rent from defendant to cover a period of time after the date the notice to quit expired.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lij[0].Check22[0]', - id: 'pdf-obj-1-26', - value: '1', - label: - "Plaintiff seeks to evict defendant based on an act against defendant or a member of defendant's household that constitutes domestic violence, sexual assault, stalking, human trafficking, or abuse of an elder or a dependent adult. (This defense requires one of the following: (1) a temporary restraining order, protective order, or police report that is not more than 180 days old; OR (2) a signed statement from a qualified third party (e.g., a doctor, domestic violence or sexual assault counselor, human trafficking caseworker, or psychologist) concerning the injuries or abuse resulting from these acts).)", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lik[0].Check23[0]', - id: 'pdf-obj-1-27', - value: '1', - label: - 'Plaintiff seeks to evict defendant based on defendant or another person calling the police or emergency assistance (e.g., ambulance) by or on behalf of a victim of abuse, a victim of crime, or an individual in an emergency when defendant or the other person believed that assistance was necessary.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lil[0].Check24[0]', - id: 'pdf-obj-1-28', - value: '1', - label: - "Plaintiff's demand for possession of a residential property is in retaliation for nonpayment of rent or other financial obligations due between March 1, 2020, and September 30, 2021, even though alleged to be based on other reasons. (Civil Code, section 1942.5(d); Governmental Code, section 12955.)", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lim[0].Check25[0]', - id: 'pdf-obj-1-29', - value: '1', - label: - "Plaintiff's demand for possession of a residential property is based on nonpayment of rent or other financial obligations due between March 1, 2020, and September 30, 2021, and (check all that apply):", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lim[0].SublIm[0].Li1[0].Check26[0]', - id: 'pdf-obj-1-30', - value: '1', - label: - 'Plaintiff did not serve the general notice or notices of rights under the COVID-19 Tenant Relief Act as required by Code of Civil Procedure section 1179.04.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page2[0].List3[0].Lim[0].SublIm[0].Li2[0].Check27[0]', - id: 'pdf-obj-1-31', - value: '1', - label: - 'Plaintiff did not serve the required 15-day notice. (Code Civil Procedure, section 1179.03(b) or (c).)', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page3[0].PxCaption[0].CaseNumber[0].CaseNumber[0]', - id: 'pdf-obj-2-4', - value: '', - label: 'CASE NUMBER:', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page3[0].PxCaption[0].TitlePartyName[0].Party1[0]', - id: 'pdf-obj-2-5', - value: '', - label: 'PLAINTIFF', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page3[0].PxCaption[0].TitlePartyName[0].Party2[0]', - id: 'pdf-obj-2-6', - value: '', - label: 'DEFENDANT', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li3[0].Check28[0]', - id: 'pdf-obj-2-7', - value: '1', - label: - 'Plaintiff did not provide an unsigned declaration of COVID-19 related financial distress with the 15-day notice. (Code Civil Procedure, section 1179.03(d).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li4[0].Check29[0]', - id: 'pdf-obj-2-8', - value: '1', - label: - 'Plaintiff did not provide an unsigned declaration of COVID-19related financial distress in the language in which the landlord was required to provide a translation of the rental agreement. (Code Civil Procedure, section 1179.03(d).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li5[0].Check30[0]', - id: 'pdf-obj-2-9', - value: '1', - label: - 'Plaintiff identified defendant as a high-income tenant in the 15-day notice, but plaintiff did not possess proof at the time the notice was served establishing that defendant met the definition of high-income tenant. (Code Civil Procedure, section 1179.02.5(b).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li6[0].SubItem6[0].Lia[0].Check31[0]', - id: 'pdf-obj-2-10', - value: '1', - label: - 'Defendant delivered to plaintiff one or more declarations of COVID-19related financial distress and, if required as a "high-income tenant," documentation in support. (Code Civil Procedure, sections 1179.03(f) and 1179.02.5.)', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li6[0].SubItem6[0].Lia[0].FillField7[0]', - id: 'pdf-obj-2-11', - label: - '(Describe when and how delivered and check all other items below that apply):', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li6[0].SubItem6[0].Lib[0].Check32[0]', - id: 'pdf-obj-2-12', - value: '1', - label: - "Plaintiff's demand for payment includes late fees on rent or other financial obligations due between March 1, 2020, and September 30, 2021.", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li6[0].SubItem6[0].Lic[0].Check33[0]', - id: 'pdf-obj-2-13', - value: '1', - label: - "Plaintiff's demand for payment includes fees for services that were increased or not previously charged.", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li6[0].SubItem6[0].Lid[0].Check34[0]', - id: 'pdf-obj-2-14', - value: '1', - label: - 'Defendant, on or before September 30, 2021, paid or offered plaintiff payment of at least 25% of the total rental payments that were due between September 1, 2020, and September 30, 2021, and that were demanded in the termination notices for which defendant delivered the declarations described in (a). (Code Civil Procedure, section 1179.03(g)(2).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lim[0].SubLim[0].Li7[0].Check35[0]', - id: 'pdf-obj-2-15', - value: '1', - label: - 'Defendant is currently filing or has already filed a declaration of COVID-19related financial distress with the court. (Code Civil Procedure, section 1179.03(h).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lin[0].Check36[0]', - id: 'pdf-obj-2-16', - value: '1', - label: - "Plaintiff's demand for possession of a residential property is based on nonpayment of rent or other financial obligations due between October 1, 2021, and March 31, 2022, and (check all that apply):", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lin[0].SubLin[0].Li1[0].Check35[0]', - id: 'pdf-obj-2-17', - value: '1', - label: "Plaintiff's notice to quit was served before April 1, 2022, and", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lin[0].SubLin[0].Li1[0].SubLi1[0].Lia[0].CheckBox190[0]', - id: 'pdf-obj-2-18', - value: '1', - label: - 'Did not contain the required contact information for the pertinent governmental rental assistance program, or the other content required by Code of Civil Procedure section 1179.10(a).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lin[0].SubLin[0].Li1[0].SubLi1[0].Lib[0].CheckBox192[0]', - id: 'pdf-obj-2-19', - value: '1', - label: - 'Did not did not include a translation of the statutorily required notice. (Code Civil Procedure, section 1179.10(a)(2) and Civil Code, section 1632.)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lin[0].SubLin[0].Li2[0].Check35[0]', - id: 'pdf-obj-2-20', - value: '1', - label: - "Plaintiff's notice to quit was served between April 1, 2022, and June 30, 2022, and did not contain the required information about the government rental assistance program and possible protections, as required by Code of Civil Procedure section 1179.10(b).", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].Check37[0]', - id: 'pdf-obj-2-21', - value: '1', - label: - "For a tenancy initially established before October 1, 2021, plaintiff's demand for possession of a residential property is based on nonpayment of rent or other financial obligations due between March 1, 2020, and March 31, 2022, and (check all that apply):", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li1[0].Check35[0]', - id: 'pdf-obj-2-22', - value: '1', - label: - 'Plaintiff did not complete an application for rental assistance to cover the rental debt demanded in the complaint before filing the complaint in this action.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li2[0].Check35[0]', - id: 'pdf-obj-2-23', - value: '1', - label: "Plaintiff's application for rental assistance was not denied.", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li3[0].Check35[0]', - id: 'pdf-obj-2-24', - value: '1', - label: - "Plaintiff's application for rental assistance was denied for a reason that does not support issuance of a summons or judgment in an unlawful detainer action (check all that apply):", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li3[0].SubLi3[0].Lia[0].Check32[0]', - id: 'pdf-obj-2-25', - value: '1', - label: - "Plaintiff did not fully or properly complete plaintiff's portion of the application. (Code Civil Procedure, section 1179.09(d)(2)(A).)", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li3[0].SubLi3[0].Lib[0].Check33[0]', - id: 'pdf-obj-2-26', - value: '1', - label: - 'Plaintiff did not apply to the correct rental assistance program. (Code Civil Procedure, section 1179.09(d)(2)(C).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li4[0].Check35[0]', - id: 'pdf-obj-2-27', - value: '1', - label: - 'An application for rental assistance was filed before April 1, 2022, and the determination is still pending.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lio[0].SubLio[0].Li5[0].Check35[0]', - id: 'pdf-obj-2-28', - value: '1', - label: - 'Rental assistance has been approved and tenant is separately filing an application to prevent forfeiture (form UD-125).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lip[0].Check38[0]', - id: 'pdf-obj-2-29', - value: '1', - label: - "Defendant provided plaintiff with a declaration under penalty of perjury for the Centers for Disease Control and Prevention's temporary halt in evictions to prevent further spread of COVID-19 (85 Federal Register 55292 at 55297), and plaintiff's reason for termination of the tenancy is one that the temporary halt in evictions applies to.", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lip[0].SubLip[0].Li1[0].Check35[0]', - id: 'pdf-obj-2-30', - value: '1', - label: - 'Plaintiff received or has a pending application for rental assistance from a governmental rental assistance program or some other source relating to the amount claimed in the notice to pay rent or quit. (Health & Safety Code, sections 50897.1(d)(2)(B) and 50897.3(e)(2).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page3[0].List3[0].Lip[0].SubLip[0].Li2[0].Check35[0]', - id: 'pdf-obj-2-31', - value: '1', - label: - 'Plaintiff received or has a pending application for rental assistance from a governmental rental assistance program or some other source for rent accruing since the notice to pay rent or quit. (Health & Safety Code, sections 50897.1(d)(2)(B) and 50897.3(e)(2).)', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page4[0].PxCaption[0].CaseNumber[0].CaseNumber[0]', - id: 'pdf-obj-3-4', - value: '', - label: 'CASE NUMBER:', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page4[0].PxCaption[0].TitlePartyName[0].Party1[0]', - id: 'pdf-obj-3-5', - value: '', - label: 'PLAINTIFF', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page4[0].PxCaption[0].TitlePartyName[0].Party2[0]', - id: 'pdf-obj-3-6', - value: '', - label: 'DEFENDANT', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Liq[0].Check39[0]', - id: 'pdf-obj-3-7', - value: '1', - label: - 'Plaintiff violated the COVID-19 Tenant Relief Act (Code Civil Procedure, section 1179.01 et seq.) or a local COVID-19 related ordinance regarding evictions in some other way (briefly state facts describing this in item 3w).', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Lir[0].Check39[0]', - id: 'pdf-obj-3-8', - value: '1', - label: - "The property is covered by the federal CARES Act and the plaintiff did not provide 30 days' notice to vacate.", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Lis[0].Check42[0]', - id: 'pdf-obj-3-9', - value: '1', - label: - 'Plaintiff improperly applied payments made by defendant in a tenancy that was in existence between March 1, 2020, and September 30, 2021 (Code Civil Procedure, section 1179.04.5), as follows (check all that apply):', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Lis[0].SubLis[0].Li1[0].Check43[0]', - id: 'pdf-obj-3-10', - value: '1', - label: - 'Plaintiff applied a security deposit to rent, or other financial obligations due, without tenants written agreement.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Lis[0].SubLis[0].Li2[0].Check44[0]', - id: 'pdf-obj-3-11', - value: '1', - label: - 'Plaintiff applied a monthly rental payment to rent or other financial obligations that were due between March 1, 2020, and September 30, 2021, other than to the prospective months rent, without tenants written agreement.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Lit[0].Check45[0]', - id: 'pdf-obj-3-12', - value: '1', - label: - 'Plaintiff refused to accept payment from a third party for rent due. (Civil Code, section 1947.3; Governmental Code, section 12955.)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Liu[0].CheckBox19[0]', - id: 'pdf-obj-3-13', - value: '1', - label: - 'Defendant has a disability and plaintiff refused to provide a reasonable accommodation that was requested. )(Cal. Code Regs., tit. 2, 12176(c).)', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Liv[0].Check45[0]', - id: 'pdf-obj-3-14', - value: '1', - label: 'Other defenses and objections are stated in item 3w.', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page4[0].List3[0].Liw[0].FillField9[0]', - id: 'pdf-obj-3-15', - label: - 'Provide facts for each item checked above, either here, or, if more room needed, on form MC-025', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Liw[0].Check46[0]', - id: 'pdf-obj-3-16', - value: '1', - label: - 'Description of facts or defenses are on form MC-025, titled as Attachment 3w.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List3[0].Li3[0].Check35[0]', - id: 'pdf-obj-3-17', - value: '1', - label: - "Plaintiff's demand for possession is based only on late fees for defendant's failure to provide landlord payment within 15 days of receiving governmental rental assistance. (Health & Safety Code, section 50897.1(e)(2)(B).)", - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List4[0].Lia[0].Check47[0]', - id: 'pdf-obj-3-18', - value: '1', - label: 'Defendant vacated the premises on', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page4[0].List4[0].Lia[0].Date2[0]', - id: 'pdf-obj-3-19', - value: '', - label: 'date', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List4[0].Lib[0].Check48[0]', - id: 'pdf-obj-3-20', - value: '1', - label: - 'The fair rental value of the premises alleged in the complaint is excessive (explain below or, if more room needed, on form MC-025):', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List4[0].Lib[0].Check49[0]', - id: 'pdf-obj-3-21', - value: '1', - label: 'Explanation is on form MC-025, titled as Attachment 4b.', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page4[0].List4[0].Lib[0].FillField10[0]', - id: 'pdf-obj-3-22', - label: 'explain', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List4[0].Lic[0].Check50[0]', - id: 'pdf-obj-3-23', - value: '1', - label: 'Other (specify below or, if more room needed, on form MC-025):', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List4[0].Lic[0].Check51[0]', - id: 'pdf-obj-3-24', - value: '1', - label: 'Other statements are on form MC-025, titled as Attachment 4c.', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page4[0].List4[0].Lic[0].FillField11[0]', - id: 'pdf-obj-3-25', - label: 'other specify', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List5[0].Lic[0].Check52[0]', - id: 'pdf-obj-3-26', - value: '1', - label: 'reasonable attorney fees.', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page4[0].List5[0].Lid[0].Check53[0]', - id: 'pdf-obj-3-27', - value: '1', - label: - 'that plaintiff be ordered to (1) make repairs and correct the conditions that constitute a breach of the warranty to provide habitable premises and (2) reduce the monthly rent to a reasonable rental value until the conditions are corrected.', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].PxCaption[0].CaseNumber[0].CaseNumber[0]', - id: 'pdf-obj-4-6', - value: '', - label: 'CASE NUMBER:', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].PxCaption[0].TitlePartyName[0].Party1[0]', - id: 'pdf-obj-4-7', - value: '', - label: 'PLAINTIFF', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].PxCaption[0].TitlePartyName[0].Party2[0]', - id: 'pdf-obj-4-8', - value: '', - label: 'DEFENDANT', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page5[0].List5[0].Lie[0].Check54[0]', - id: 'pdf-obj-4-9', - value: '1', - label: 'Other (specify below or on form MC-025):', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page5[0].List5[0].Lie[0].Check55[0]', - id: 'pdf-obj-4-10', - value: '1', - label: - 'All other requests are stated on form MC-025, titled as Attachment 5e.', - }, - { - tag: 'textarea', - name: 'UD-105[0].Page5[0].List5[0].Lie[0].FillField12[0]', - id: 'pdf-obj-4-11', - label: 'other specify', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].List6[0].item6[0].FillPages1[0]', - id: 'pdf-obj-4-12', - value: '', - label: 'Number of pages attached', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Check561[0]', - id: 'pdf-obj-4-13', - value: '1', - label: 'did not', - }, - { - tag: 'input', - type: 'checkbox', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Check561[1]', - id: 'pdf-obj-4-14', - value: '2', - label: 'did', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Lia[0].AsstName[0]', - id: 'pdf-obj-4-15', - value: '', - label: "Assistant's name", - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Lib[0].PhoneNum[0]', - id: 'pdf-obj-4-16', - value: '', - label: 'Telephone number', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Lic[0].Address[0]', - id: 'pdf-obj-4-17', - value: '', - label: 'Street address city and zip code', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Lid[0].RegCounty[0]', - id: 'pdf-obj-4-18', - value: '', - label: 'County of registration', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Lie[0].RegNo[0]', - id: 'pdf-obj-4-19', - value: '', - label: 'Registration number', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].List7[0].Lif[0].RegExp[0]', - id: 'pdf-obj-4-20', - value: '', - label: 'Expiration date', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].Sign[0].PrintName1[0]', - id: 'pdf-obj-4-21', - value: '', - label: 'Type or print name', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].Sign[0].PrintName2[0]', - id: 'pdf-obj-4-22', - value: '', - label: 'Type or print name', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].UDAssistant[0].Sign[0].PrintName11[0]', - id: 'pdf-obj-4-23', - value: '', - label: 'Type or print name', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].Verification[0].Date3[0]', - id: 'pdf-obj-4-24', - value: '', - label: 'Date', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].Verification[0].PrintName3[0]', - id: 'pdf-obj-4-25', - value: '', - label: 'Type or print name', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].Verification[0].Date4[0]', - id: 'pdf-obj-4-26', - value: '', - label: 'Date', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].Verification[0].PrintName4[0]', - id: 'pdf-obj-4-27', - value: '', - label: 'Type or print name', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].Verification[0].Date5[0]', - id: 'pdf-obj-4-28', - value: '', - label: 'Date', - }, - { - tag: 'input', - type: 'text', - name: 'UD-105[0].Page5[0].Verification[0].PrintName5[0]', - id: 'pdf-obj-4-29', - value: '', - label: 'Type or print name', - }, -]; diff --git a/packages/forms/src/documents/util.ts b/packages/forms/src/documents/util.ts index 6f8816851..90f6a49a1 100644 --- a/packages/forms/src/documents/util.ts +++ b/packages/forms/src/documents/util.ts @@ -11,3 +11,17 @@ export const stringToBase64 = (input: string): string => { return window.btoa(binaryString); } }; + +export const uint8ArrayToBase64 = (uint8Array: Uint8Array) => { + return new Promise((resolve, reject) => { + const blob = new Blob([uint8Array], { type: 'application/octet-stream' }); + const reader = new FileReader(); + reader.onloadend = function () { + // Convert the data URL to a base64 string + const base64 = (this.result as string).split(',')[1]; + resolve(base64); + }; + reader.onerror = reject; + reader.readAsDataURL(blob); + }); +}; From 6fc1d89d0bbd36d60f40cefc9a2947cfdc350af9 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Mon, 15 Apr 2024 16:25:15 -0500 Subject: [PATCH 07/10] Wire drag and drop back up (#107) * Cleanup * In-progress * UI rendering with dnd controls, test passing; handles inactive. * dnd wired up to blueprint state. Added a test, which unfortunately does not work with JSDOM, so it is commented out * Remove unused import * Removed dist folder, which is in .gitignore --- packages/design/sass/styles.scss | 6 +- .../design/src/AvailableFormList/index.tsx | 18 +- packages/design/src/Form/index.tsx | 22 ++- .../src/FormManager/FormDelete/index.tsx | 4 +- .../FormManager/FormEdit/DraggableList.tsx | 77 +++----- .../FormManager/FormEdit/FormEdit.stories.tsx | 47 ++++- .../src/FormManager/FormEdit/Preview.tsx | 123 ++----------- .../FormManager/FormEdit/PreviewPattern.tsx | 49 ++++++ .../FormEdit/PreviewSequencePattern.tsx | 47 +++++ .../design/src/FormManager/FormEdit/store.tsx | 21 ++- .../FormManager/FormList/CreateNew/hooks.ts | 8 +- .../src/config/edit/SequencePatternEdit.tsx | 1 - packages/design/src/config/edit/index.ts | 4 +- .../design/src/config/view/Fieldset/index.tsx | 4 +- packages/forms/dist/index.js | 165 ------------------ packages/forms/src/builder/builder.test.ts | 6 +- packages/forms/src/builder/index.ts | 20 +-- packages/forms/src/components.ts | 24 +-- packages/forms/src/documents/document.ts | 14 +- .../forms/src/documents/pdf/parsing-api.ts | 5 +- packages/forms/src/patterns/address/index.ts | 2 +- packages/forms/src/patterns/fieldset.ts | 2 +- packages/forms/src/patterns/form-summary.ts | 2 +- packages/forms/src/patterns/input.ts | 2 +- packages/forms/src/patterns/paragraph.ts | 2 +- packages/forms/src/patterns/sequence.ts | 2 +- 26 files changed, 277 insertions(+), 400 deletions(-) create mode 100644 packages/design/src/FormManager/FormEdit/PreviewPattern.tsx create mode 100644 packages/design/src/FormManager/FormEdit/PreviewSequencePattern.tsx delete mode 100644 packages/forms/dist/index.js diff --git a/packages/design/sass/styles.scss b/packages/design/sass/styles.scss index 2b767991e..8ca6b0919 100644 --- a/packages/design/sass/styles.scss +++ b/packages/design/sass/styles.scss @@ -464,11 +464,11 @@ iframe:focus { .grid-col-8 { width: 100%; } - + .usa-button{ margin-left: 0; } - + .grid-col-4 { position: static; } @@ -476,7 +476,7 @@ iframe:focus { .form-group-row { padding: 0 0 1rem; } - + .settingsContainer { position: fixed; top: 10%; diff --git a/packages/design/src/AvailableFormList/index.tsx b/packages/design/src/AvailableFormList/index.tsx index 7606c7c31..fe78c62c1 100644 --- a/packages/design/src/AvailableFormList/index.tsx +++ b/packages/design/src/AvailableFormList/index.tsx @@ -34,20 +34,27 @@ const FormList = ({ urlForForm: UrlForForm; }) => { return ( - - - - + + + {forms.map((form, index) => ( - +
Available forms
Form titleDescriptionActions + Form title + + Description + + Actions +
{form.title} + {form.title} + {form.description} @@ -58,6 +65,5 @@ const FormList = ({ ))}
- ); }; diff --git a/packages/design/src/Form/index.tsx b/packages/design/src/Form/index.tsx index 4c2f978aa..ee60b9e33 100644 --- a/packages/design/src/Form/index.tsx +++ b/packages/design/src/Form/index.tsx @@ -9,7 +9,7 @@ import { type FormSession, type PatternProps, type Prompt, - type PromptPart, + type PromptComponent, } from '@atj/forms'; import ActionBar from './ActionBar'; @@ -232,12 +232,12 @@ export default function Form({ )}
- {prompt.parts.map((part, index) => { + {prompt.components.map((component, index) => { return ( ); })} @@ -253,17 +253,21 @@ export default function Form({ const PromptComponent = ({ context, - promptPart, + component, }: { context: FormUIContext; - promptPart: PromptPart; + component: PromptComponent; }) => { - const Component = context.components[promptPart.pattern.type]; + const Component = context.components[component.props.type]; return ( - - {promptPart.children?.map((child, index) => { + + {component.children?.map((childPromptComponent, index) => { return ( - + ); })} diff --git a/packages/design/src/FormManager/FormDelete/index.tsx b/packages/design/src/FormManager/FormDelete/index.tsx index 4fdda5a7d..83d7eb603 100644 --- a/packages/design/src/FormManager/FormDelete/index.tsx +++ b/packages/design/src/FormManager/FormDelete/index.tsx @@ -25,7 +25,9 @@ export default function FormDelete({

Delete form

Are you sure you want to delete the form with id: `{formId}`?

- +

{JSON.stringify(form, null, 4)}
diff --git a/packages/design/src/FormManager/FormEdit/DraggableList.tsx b/packages/design/src/FormManager/FormEdit/DraggableList.tsx index 99bc32d22..8aa15c638 100644 --- a/packages/design/src/FormManager/FormEdit/DraggableList.tsx +++ b/packages/design/src/FormManager/FormEdit/DraggableList.tsx @@ -1,4 +1,4 @@ -import React, { Children, useState } from 'react'; +import React, { Children } from 'react'; import { DndContext, closestCenter, @@ -6,6 +6,7 @@ import { PointerSensor, useSensor, useSensors, + UniqueIdentifier, } from '@dnd-kit/core'; import { arrayMove, @@ -16,32 +17,24 @@ import { } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; -import { - getPattern, - type Blueprint, - type Pattern, - PatternId, -} from '@atj/forms'; - -import { SequencePattern } from '@atj/forms/src/patterns/sequence'; - const SortableItem = ({ id, children, }: { - id: string; + id: UniqueIdentifier; children: React.ReactNode; }) => { const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id }); - const style = { - transform: CSS.Transform.toString(transform), - transition, - }; - return ( -
  • +
    {children}
    -
  • +
    ); }; type DraggableListProps = React.PropsWithChildren<{ - pattern: Pattern; - form: Blueprint; - setSelectedPattern: (pattern: Pattern) => void; + order: UniqueIdentifier[]; + updateOrder: (order: UniqueIdentifier[]) => void; }>; export const DraggableList: React.FC = ({ - pattern, - form, - setSelectedPattern, children, + order, + updateOrder, }) => { - const [patterns, setPatterns] = useState( - pattern.data.patterns.map((patternId: PatternId) => { - return getPattern(form, patternId); - }) - ); const sensors = useSensors( useSensor(PointerSensor), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }) ); const arrayChildren = Children.toArray(children); + return ( = ({ return; } if (active.id !== over.id) { - const oldIndex = patterns.findIndex(pattern => { - return pattern.id === active.id; - }); - const newIndex = patterns.findIndex(pattern => { - return pattern.id === over.id; - }); - const newOrder = arrayMove(patterns, oldIndex, newIndex); - setPatterns(newOrder); - setSelectedPattern({ - id: pattern.id, - type: pattern.type, - data: { - patterns: newOrder.map(pattern => pattern.id), - }, - } satisfies SequencePattern); + const oldIndex = order.indexOf(active.id); + const newIndex = order.indexOf(over.id); + const newOrder = arrayMove(order, oldIndex, newIndex); + updateOrder(newOrder); } }} > - -
      - {arrayChildren.map((child, index) => ( - + + {arrayChildren.map((child, index) => { + const patternId = order[index]; + return ( + {child} - ))} -
    + ); + })}
    ); diff --git a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx index ce8571978..1e25dbb16 100644 --- a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx @@ -30,8 +30,8 @@ export default { export const FormEditTest: StoryObj = { play: async ({ canvasElement }) => { - await editFieldLabel(canvasElement, 0, 'First field label'); - await editFieldLabel(canvasElement, 1, 'Second field label'); + await editFieldLabel(canvasElement, 1, 'First field label'); + await editFieldLabel(canvasElement, 2, 'Second field label'); }, }; @@ -40,20 +40,53 @@ export const FormEditAddPattern: StoryObj = { const canvas = within(canvasElement); // Select the first pattern for editing - const button = (await canvas.findAllByRole('button'))[0]; + const button = (await canvas.findAllByLabelText('Edit form group'))[0]; await userEvent.click(button); // Get the initial count of inputs - const initialCount = (await canvas.getAllByRole('textbox')).length; + const initialCount = (await canvas.findAllByLabelText('Edit form group')) + .length; const select = canvas.getByLabelText('Add a pattern'); await userEvent.selectOptions(select, 'Text input'); - const finalCount = (await canvas.getAllByRole('textbox')).length; + const finalCount = (await canvas.findAllByLabelText('Edit form group')) + .length; expect(finalCount).toEqual(initialCount + 1); }, }; +// This test only works in a real browser, not via JSDOM as we use it. +/* +export const FormEditReorderPattern: StoryObj = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + const grabber = await canvas.getAllByText(':::')[0]; + await grabber.focus(); + + // Enter reordering mode with the spacebar + await userEvent.type(grabber, ' '); + await new Promise(r => setTimeout(r, 100)); + + // Press the arrow down, to move the first pattern to the second position + await userEvent.type(grabber, '[ArrowDown]'); + await new Promise(r => setTimeout(r, 100)); + + // Press the spacebar to exit reordering mode + await userEvent.type(grabber, ' '); + await new Promise(r => setTimeout(r, 100)); + + // Pattern 1 should be after pattern 2 in the document + const pattern1 = canvas.getByText('Pattern 1'); + const pattern2 = canvas.getByText('Pattern 2'); + expect(pattern2.compareDocumentPosition(pattern1)).toBe( + Node.DOCUMENT_POSITION_FOLLOWING + ); + }, +}; +*/ + const editFieldLabel = async ( element: HTMLElement, buttonIndex: number, @@ -62,7 +95,9 @@ const editFieldLabel = async ( const canvas = within(element); // Click "edit form" button for first field - await userEvent.click(canvas.getAllByRole('button')[buttonIndex]); + await userEvent.click( + (await canvas.findAllByLabelText('Edit form group'))[buttonIndex] + ); // Enter new text for first field const input = canvas.getByLabelText('Field label'); diff --git a/packages/design/src/FormManager/FormEdit/Preview.tsx b/packages/design/src/FormManager/FormEdit/Preview.tsx index 2482d52e0..a04ddaff6 100644 --- a/packages/design/src/FormManager/FormEdit/Preview.tsx +++ b/packages/design/src/FormManager/FormEdit/Preview.tsx @@ -2,135 +2,46 @@ import React from 'react'; import { createFormSession } from '@atj/forms'; -import Form, { - type ComponentForPattern, - type PatternComponent, - type FormUIContext, -} from '../../Form'; +import Form, { PatternComponent, type ComponentForPattern } from '../../Form'; + +import { PreviewPattern } from './PreviewPattern'; +import { PatternPreviewSequence } from './PreviewSequencePattern'; import { useFormEditStore } from './store'; export const PreviewForm = () => { const uiContext = useFormEditStore(state => state.context); const form = useFormEditStore(state => state.form); - const previewUiContext: FormUIContext = { - config: uiContext.config, - // TODO: We'll want to hoist this definition up to a higher level, so we - // don't have to regenerate it every time we render the form. - components: createPreviewComponents( - uiContext.components, - uiContext.uswdsRoot - ), - uswdsRoot: uiContext.uswdsRoot, - }; const disposable = createFormSession(form); // nullSession instead? return (
    ); }; const createPreviewComponents = ( - components: ComponentForPattern, - uswdsRoot: string + components: ComponentForPattern ): ComponentForPattern => { const previewComponents: ComponentForPattern = {}; // TODO: Create a configurable way to to define preview components. for (const [patternType, Component] of Object.entries(components)) { - if (patternType === 'sequence' || patternType === 'fieldset') { - previewComponents[patternType] = Component; - /* - previewComponents[patternType] = createSequencePatternPreviewComponent( - Component, - previewComponents - ); - */ - } else if (patternType === 'form-summary') { - previewComponents[patternType] = Component; + previewComponents[patternType] = Component; + if (patternType === 'sequence') { + previewComponents[patternType] = + PatternPreviewSequence as PatternComponent; } else { - //previewComponents[patternType] = Component; - previewComponents[patternType] = createPatternPreviewComponent( - Component, - uswdsRoot - ); + previewComponents[patternType] = PreviewPattern; } } return previewComponents; }; - -/* -const createSequencePatternPreviewComponent = ( - Component: PatternComponent, - previewComponents: ComponentForPattern -) => { - const PatternPreviewSequenceComponent: PatternComponent = ({ - pattern, - }) => { - const { form, setSelectedPattern } = usePreviewContext(); - const element = getPattern(form, props._patternId); - const Component = previewComponents[props.type]; - return ( - - - - ); - }; - return PatternPreviewSequenceComponent; -}; -*/ - -const createPatternPreviewComponent = ( - Component: PatternComponent, - uswdsRoot: string -) => { - const PatternPreviewComponent: PatternComponent = props => { - const context = useFormEditStore(state => state.context); - const selectedPattern = useFormEditStore(state => state.selectedPattern); - const handleEditClick = useFormEditStore(state => state.handleEditClick); - - const isSelected = selectedPattern?.id === props._patternId; - const divClassNames = isSelected - ? 'form-group-row field-selected' - : 'form-group-row'; - const EditComponent = context.editComponents[props.type]; - - return ( -
    - - - {EditComponent ? ( - - ) : null} - -
    - ); - }; - return PatternPreviewComponent; -}; diff --git a/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx b/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx new file mode 100644 index 000000000..262727262 --- /dev/null +++ b/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx @@ -0,0 +1,49 @@ +import React from 'react'; + +import { PatternComponent } from '../../Form'; +import { useFormEditStore } from './store'; + +export const PreviewPattern: PatternComponent = function PreviewPattern(props) { + const context = useFormEditStore(state => state.context); + const selectedPattern = useFormEditStore(state => state.selectedPattern); + const handleEditClick = useFormEditStore(state => state.handleEditClick); + + const isSelected = selectedPattern?.id === props._patternId; + const divClassNames = isSelected + ? 'form-group-row field-selected' + : 'form-group-row'; + const Component = context.components[props.type]; + const EditComponent = context.editComponents[props.type]; + + return ( +
    + + + {EditComponent ? ( + + ) : null} + +
    + ); +}; diff --git a/packages/design/src/FormManager/FormEdit/PreviewSequencePattern.tsx b/packages/design/src/FormManager/FormEdit/PreviewSequencePattern.tsx new file mode 100644 index 000000000..800957bdd --- /dev/null +++ b/packages/design/src/FormManager/FormEdit/PreviewSequencePattern.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +import { PatternProps, getPattern } from '@atj/forms'; + +import { PatternComponent } from '../../Form'; +import DraggableList from './DraggableList'; +import { useFormEditStore } from './store'; +import { SequencePattern } from '@atj/forms/src/patterns/sequence'; + +// TODO: consider merging this component with DraggableList, to clean up +// sematics around how its children are handled. +export const PatternPreviewSequence: PatternComponent< + PatternProps +> = function PatternPreviewSequence(props) { + const form = useFormEditStore(state => state.form); + const updatePattern = useFormEditStore(state => state.updatePattern); + const pattern = getPattern(form, props._patternId); + + /** + * Here, we assume that we are rendering a "sequence" pattern, and that + * sequences have no styling of their own. If sequences were to get their + * own styling (like other components), this component would need to be + * updated to replicate the styles, or the wrapping structure would need to + * be updated to ensure that we pass the correct children to DraggableList. + * + * In other words, we'd want to render: + * const Component = context.components[props.type]; + * ... and then something like: + * {props.children} + */ + return ( + { + updatePattern({ + id: pattern.id, + type: pattern.type, + data: { + patterns: order, + }, + }); + }} + > + {props.children} + + ); +}; diff --git a/packages/design/src/FormManager/FormEdit/store.tsx b/packages/design/src/FormManager/FormEdit/store.tsx index 3522e1ba3..02d4ed653 100644 --- a/packages/design/src/FormManager/FormEdit/store.tsx +++ b/packages/design/src/FormManager/FormEdit/store.tsx @@ -8,7 +8,7 @@ import { type PatternId, type PatternMap, getPattern, - FormBuilder, + BlueprintBuilder, } from '@atj/forms'; import { type FormEditUIContext } from './types'; @@ -40,6 +40,7 @@ type FormEditState = { addPattern: (patternType: string) => void; handleEditClick: (patternId: PatternId) => void; setSelectedPattern: (element?: Pattern) => void; + updatePattern: (data: Pattern) => void; updateSelectedPattern: (formData: PatternMap) => void; }; @@ -61,7 +62,7 @@ const createFormEditStore = ({ ), addPattern: (patternType: string) => { const state = get(); - const builder = new FormBuilder(state.form); + const builder = new BlueprintBuilder(state.form); const newPattern = builder.addPattern(state.context.config, patternType); set({ form: builder.form, selectedPattern: newPattern }); }, @@ -75,13 +76,27 @@ const createFormEditStore = ({ } }, setSelectedPattern: selectedPattern => set({ selectedPattern }), + updatePattern: (pattern: Pattern) => { + const state = get(); + const builder = new BlueprintBuilder(state.form); + const success = builder.updatePattern( + state.context.config, + state.form.patterns[pattern.id], + { + [pattern.id]: pattern, + } + ); + if (success) { + set({ form: builder.form, selectedPattern: undefined }); + } + }, updateSelectedPattern: (formData: PatternMap) => { const state = get(); if (state.selectedPattern === undefined) { console.warn('No selected element'); return; } - const builder = new FormBuilder(state.form); + const builder = new BlueprintBuilder(state.form); const success = builder.updatePattern( state.context.config, state.selectedPattern, diff --git a/packages/design/src/FormManager/FormList/CreateNew/hooks.ts b/packages/design/src/FormManager/FormList/CreateNew/hooks.ts index 1b744876b..f42a568fd 100644 --- a/packages/design/src/FormManager/FormList/CreateNew/hooks.ts +++ b/packages/design/src/FormManager/FormList/CreateNew/hooks.ts @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom'; -import { FormBuilder } from '@atj/forms'; +import { BlueprintBuilder } from '@atj/forms'; import { type FormService } from '@atj/form-service'; export const useDocumentImporter = ( @@ -14,7 +14,7 @@ export const useDocumentImporter = ( stepOneSelectPdfByUrl: async (url: string) => { const data = await fetchUint8Array(`${baseUrl}${url}`); - const builder = new FormBuilder(); + const builder = new BlueprintBuilder(); builder.setFormSummary({ title: url, description: '', @@ -33,7 +33,7 @@ export const useDocumentImporter = ( name: string; data: Uint8Array; }) => { - const builder = new FormBuilder(); + const builder = new BlueprintBuilder(); builder.setFormSummary({ title: fileDetails.name, description: '', @@ -45,7 +45,7 @@ export const useDocumentImporter = ( } }, createNewForm: async () => { - const builder = new FormBuilder(); + const builder = new BlueprintBuilder(); builder.setFormSummary({ title: `My form - ${new Date().toISOString()}`, description: '', diff --git a/packages/design/src/config/edit/SequencePatternEdit.tsx b/packages/design/src/config/edit/SequencePatternEdit.tsx index 836d7c720..11cf6ccfa 100644 --- a/packages/design/src/config/edit/SequencePatternEdit.tsx +++ b/packages/design/src/config/edit/SequencePatternEdit.tsx @@ -82,7 +82,6 @@ const SequencePatternEdit: PatternEditComponent = ({ useSensor(PointerSensor), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }) ); - return (
    = props => { +const Fieldset: PatternComponent = props => { return (
    {props.legend} @@ -12,4 +12,4 @@ const FormSummary: PatternComponent = props => {
    ); }; -export default FormSummary; +export default Fieldset; diff --git a/packages/forms/dist/index.js b/packages/forms/dist/index.js deleted file mode 100644 index ab83e7d48..000000000 --- a/packages/forms/dist/index.js +++ /dev/null @@ -1,165 +0,0 @@ -"use strict"; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// src/index.ts -var src_exports = {}; -__export(src_exports, { - addFormOutput: () => addFormOutput, - addQuestions: () => addQuestions, - createForm: () => createForm, - createFormContext: () => createFormContext, - createPrompt: () => createPrompt, - getFlatFieldList: () => getFlatFieldList, - updateForm: () => updateForm -}); -module.exports = __toCommonJS(src_exports); - -// src/prompts/index.ts -var createPrompt = (formContext) => { - const parts = [ - { - type: "form-summary", - title: formContext.form.summary.title, - description: formContext.form.summary.description - } - ]; - if (formContext.form.strategy.type === "sequential") { - parts.push( - ...formContext.form.strategy.order.map((questionId) => { - const question = formContext.form.questions[questionId]; - return { - type: "text", - id: question.id, - value: formContext.context.values[questionId], - label: question.text, - required: question.required - }; - }) - ); - } else if (formContext.form.strategy.type === "null") { - } else { - const _exhaustiveCheck = formContext.form.strategy; - } - return parts; -}; - -// src/index.ts -var createForm = (summary, questions = []) => { - return { - summary, - questions: getQuestionMap(questions), - strategy: { - type: "sequential", - order: questions.map((question) => { - return question.id; - }) - }, - documents: [] - }; -}; -var createFormContext = (form) => { - return { - context: { - errors: {}, - values: Object.fromEntries( - Object.values(form.questions).map((question) => { - return [question.id, question.initial]; - }) - ) - }, - form - }; -}; -var updateForm = (context, id, value) => { - if (!(id in context.form.questions)) { - console.error(`Question "${id}" does not exist on form.`); - return context; - } - const nextForm = addValue(context, id, value); - if (context.form.questions[id].required && !value) { - return addError(nextForm, id, "Required value not provided."); - } - return nextForm; -}; -var addValue = (form, id, value) => ({ - ...form, - context: { - ...form.context, - values: { - ...form.context.values, - [id]: value - } - } -}); -var addError = (form, id, error) => ({ - ...form, - context: { - ...form.context, - errors: { - ...form.context.errors, - [id]: error - } - } -}); -var getQuestionMap = (questions) => { - return Object.fromEntries( - questions.map((question) => { - return [question.id, question]; - }) - ); -}; -var addQuestions = (form, questions) => { - const questionMap = getQuestionMap(questions); - return { - ...form, - questions: { ...form.questions, ...questionMap }, - strategy: { - ...form.strategy, - order: [...form.strategy.order, ...Object.keys(questionMap)] - } - }; -}; -var getFlatFieldList = (form) => { - if (form.strategy.type === "sequential") { - return form.strategy.order.map((questionId) => { - return form.questions[questionId]; - }); - } else if (form.strategy.type === "null") { - return []; - } else { - const _exhaustiveCheck = form.strategy; - return _exhaustiveCheck; - } -}; -var addFormOutput = (form, document) => { - return { - ...form, - documents: [...form.documents, document] - }; -}; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - addFormOutput, - addQuestions, - createForm, - createFormContext, - createPrompt, - getFlatFieldList, - updateForm -}); diff --git a/packages/forms/src/builder/builder.test.ts b/packages/forms/src/builder/builder.test.ts index 51fd144b4..2efb176ec 100644 --- a/packages/forms/src/builder/builder.test.ts +++ b/packages/forms/src/builder/builder.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { FormBuilder } from '.'; +import { BlueprintBuilder } from '.'; import { createForm } from '..'; import { defaultFormConfig } from '../patterns'; import { type InputPattern } from '../patterns/input'; @@ -8,7 +8,7 @@ import { type SequencePattern } from '../patterns/sequence'; describe('form builder', () => { it('addPattern adds initial pattern of given type', () => { - const builder = new FormBuilder(); + const builder = new BlueprintBuilder(); expect(Object.keys(builder.form.patterns).length).toEqual(1); builder.addPattern(defaultFormConfig, 'input'); expect(Object.keys(builder.form.patterns).length).toEqual(2); @@ -16,7 +16,7 @@ describe('form builder', () => { it('addPattern preserves existing structure', () => { const initial = createTestBlueprint(); - const newBuilder = new FormBuilder(initial); + const newBuilder = new BlueprintBuilder(initial); const newPattern = newBuilder.addPattern(defaultFormConfig, 'input'); expect(newBuilder.form.patterns[newPattern.id]).toEqual(newPattern); expect( diff --git a/packages/forms/src/builder/index.ts b/packages/forms/src/builder/index.ts index 2c82ae7a9..adacdf65f 100644 --- a/packages/forms/src/builder/index.ts +++ b/packages/forms/src/builder/index.ts @@ -12,43 +12,43 @@ import { addPatternToRoot, } from '..'; -export class FormBuilder { - private _form: Blueprint; +export class BlueprintBuilder { + private _bp: Blueprint; constructor(initial: Blueprint = nullBlueprint) { - this._form = initial; + this._bp = initial; } get form(): Blueprint { - return this._form; + return this._bp; } setFormSummary(summary: FormSummary) { - this._form = updateFormSummary(this.form, summary); + this._bp = updateFormSummary(this.form, summary); } async addDocument(fileDetails: { name: string; data: Uint8Array }) { const { updatedForm } = await addDocument(this.form, fileDetails); - this._form = updatedForm; + this._bp = updatedForm; } addPattern(config: FormConfig, patternType: string) { const pattern = createPattern(config, patternType); - this._form = addPatternToRoot(this.form, pattern); + this._bp = addPatternToRoot(this.form, pattern); return pattern; } updatePattern(config: FormConfig, pattern: Pattern, formData: PatternMap) { - const updatedElement = updatePatternFromFormData( + const updatedBlueprint = updatePatternFromFormData( config, this.form, pattern, formData ); - if (!updatedElement) { + if (!updatedBlueprint) { return false; } - this._form = updatedElement; + this._bp = updatedBlueprint; return true; } } diff --git a/packages/forms/src/components.ts b/packages/forms/src/components.ts index c3bdfb3c1..af080c964 100644 --- a/packages/forms/src/components.ts +++ b/packages/forms/src/components.ts @@ -55,14 +55,14 @@ export type SubmitAction = { }; export type PromptAction = SubmitAction; -export type PromptPart = { - pattern: PatternProps; - children: PromptPart[]; +export type PromptComponent = { + props: PatternProps; + children: PromptComponent[]; }; export type Prompt = { actions: PromptAction[]; - parts: PromptPart[]; + components: PromptComponent[]; }; export const createPrompt = ( @@ -73,9 +73,9 @@ export const createPrompt = ( if (options.validate && sessionIsComplete(config, session)) { return { actions: [], - parts: [ + components: [ { - pattern: { + props: { _patternId: 'submission-confirmation', type: 'submission-confirmation', table: Object.entries(session.data.values) @@ -98,9 +98,9 @@ export const createPrompt = ( ], }; } - const parts: PromptPart[] = [ + const components: PromptComponent[] = [ { - pattern: { + props: { _patternId: 'form-summary', type: 'form-summary', title: session.form.summary.title, @@ -110,7 +110,7 @@ export const createPrompt = ( }, ]; const root = getRootPattern(session.form); - parts.push(createPromptForPattern(config, session, root, options)); + components.push(createPromptForPattern(config, session, root, options)); return { actions: [ { @@ -118,7 +118,7 @@ export const createPrompt = ( text: 'Submit', }, ], - parts, + components, }; }; @@ -127,7 +127,7 @@ export type CreatePrompt = ( session: FormSession, pattern: T, options: { validate: boolean } -) => PromptPart; +) => PromptComponent; export const createPromptForPattern: CreatePrompt = ( config, @@ -152,7 +152,7 @@ export const createNullPrompt = ({ }): Prompt => { const formPatternConfig = getPatternConfig(config, pattern.type); return { - parts: [ + components: [ formPatternConfig.createPrompt(config, nullSession, pattern, { validate: false, }), diff --git a/packages/forms/src/documents/document.ts b/packages/forms/src/documents/document.ts index f619725d7..8a2d85005 100644 --- a/packages/forms/src/documents/document.ts +++ b/packages/forms/src/documents/document.ts @@ -22,21 +22,21 @@ export const addDocument = async ( } ) => { const fields = await getDocumentFieldData(fileDetails.data); - const cachedPdf = await getSuggestedPatterns(fileDetails.data); + const parsedPdf = await getSuggestedPatterns(fileDetails.data); - if (cachedPdf) { + if (parsedPdf) { form = updateFormSummary(form, { - title: cachedPdf.title, + title: parsedPdf.title, description: '', }); - form = addPatternMap(form, cachedPdf.patterns, cachedPdf.root); + form = addPatternMap(form, parsedPdf.patterns, parsedPdf.root); const updatedForm = addFormOutput(form, { data: fileDetails.data, path: fileDetails.name, - fields: cachedPdf.outputs, + fields: parsedPdf.outputs, formFields: Object.fromEntries( - Object.keys(cachedPdf.outputs).map(output => { - return [output, cachedPdf.outputs[output].name]; + Object.keys(parsedPdf.outputs).map(output => { + return [output, parsedPdf.outputs[output].name]; }) ), }); diff --git a/packages/forms/src/documents/pdf/parsing-api.ts b/packages/forms/src/documents/pdf/parsing-api.ts index 3f8de9e1a..922d77f56 100644 --- a/packages/forms/src/documents/pdf/parsing-api.ts +++ b/packages/forms/src/documents/pdf/parsing-api.ts @@ -70,7 +70,7 @@ const RawBtnField = z.object({ var_name: z.string(), field_dict: z.object({ font_info: z.string(), - flags: z.number(), + flags: z.unknown().optional(), field_type: z.string(), field_label: z.string(), child_fields: z.array(z.object({ coordinates: z.number().array() })), @@ -116,9 +116,6 @@ export const callExternalParser = async ( } const json = await response.json(); - - console.log('json.parsed_pdf.elements is:\n', json.parsed_pdf.elements); - const extracted: ExtractedObject = ExtractedObject.parse(json.parsed_pdf); const parsedPdf: ParsedPdf = { diff --git a/packages/forms/src/patterns/address/index.ts b/packages/forms/src/patterns/address/index.ts index 14cb71f33..28520afd7 100644 --- a/packages/forms/src/patterns/address/index.ts +++ b/packages/forms/src/patterns/address/index.ts @@ -98,7 +98,7 @@ export const addressConfig: PatternConfig< ? AddressSchema.safeParse(sessionValue) : null; return { - pattern: { + props: { _patternId: pattern.id, type: 'address', childProps: { diff --git a/packages/forms/src/patterns/fieldset.ts b/packages/forms/src/patterns/fieldset.ts index a6b3cfdde..58e89179b 100644 --- a/packages/forms/src/patterns/fieldset.ts +++ b/packages/forms/src/patterns/fieldset.ts @@ -36,7 +36,7 @@ export const fieldsetConfig: PatternConfig = { return createPromptForPattern(config, session, childPattern, options); }); return { - pattern: { + props: { _patternId: pattern.id, type: 'fieldset', legend: pattern.data.legend, diff --git a/packages/forms/src/patterns/form-summary.ts b/packages/forms/src/patterns/form-summary.ts index d17fe6224..4da29978b 100644 --- a/packages/forms/src/patterns/form-summary.ts +++ b/packages/forms/src/patterns/form-summary.ts @@ -22,7 +22,7 @@ export const formSummaryConfig: PatternConfig = { }, createPrompt(_, session, pattern, options) { return { - pattern: { + props: { _patternId: pattern.id, type: 'form-summary', title: pattern.data.title, diff --git a/packages/forms/src/patterns/input.ts b/packages/forms/src/patterns/input.ts index 329c2414b..1a1ca98be 100644 --- a/packages/forms/src/patterns/input.ts +++ b/packages/forms/src/patterns/input.ts @@ -43,7 +43,7 @@ export const inputConfig: PatternConfig = { } } return { - pattern: { + props: { _patternId: pattern.id, type: 'input', inputId: pattern.id, diff --git a/packages/forms/src/patterns/paragraph.ts b/packages/forms/src/patterns/paragraph.ts index 54701db0c..9dd020e26 100644 --- a/packages/forms/src/patterns/paragraph.ts +++ b/packages/forms/src/patterns/paragraph.ts @@ -22,7 +22,7 @@ export const paragraphConfig: PatternConfig = { }, createPrompt(_, session, pattern, options) { return { - pattern: { + props: { _patternId: pattern.id, type: 'paragraph' as const, text: pattern.data.text, diff --git a/packages/forms/src/patterns/sequence.ts b/packages/forms/src/patterns/sequence.ts index e92456342..fff149f08 100644 --- a/packages/forms/src/patterns/sequence.ts +++ b/packages/forms/src/patterns/sequence.ts @@ -34,7 +34,7 @@ export const sequenceConfig: PatternConfig = { return createPromptForPattern(config, session, childPattern, options); }); return { - pattern: { + props: { _patternId: pattern.id, type: 'sequence', }, From fee18cb44d39e0b9417466dc49ae435587d4d208 Mon Sep 17 00:00:00 2001 From: Natasha Pierre-Louis Date: Tue, 16 Apr 2024 08:34:23 -0600 Subject: [PATCH 08/10] Splash page and Minor CSS updates (#91) * Created a splash page and made minor CSS updates * Update apps/spotlight/src/pages/splash/index.astro * Update apps/spotlight/src/pages/splash/index.astro * Tweak some text * Update esbuild version * Upgrade node lts to 20.12.2 and remove esbuild dep, for now (the rest api is currently not used, and esbuild is causing a build failure on pages.cloud.gov) * add esbuild back * rebuild pnpm lock * Update dependencies * Update Storybook and related deps * revert eslint version --------- Co-authored-by: Daniel Naab Co-authored-by: Daniel Naab --- .gitignore | 2 + .nvmrc | 2 +- apps/rest-api/package.json | 2 +- .../spotlight/src/images/atj-infographics.png | Bin 0 -> 142616 bytes apps/spotlight/src/pages/splash/index.astro | 70 + packages/design/package.json | 58 +- packages/design/sass/styles.scss | 45 +- pnpm-lock.yaml | 4598 +++++++++-------- 8 files changed, 2576 insertions(+), 2201 deletions(-) create mode 100644 apps/spotlight/src/images/atj-infographics.png create mode 100644 apps/spotlight/src/pages/splash/index.astro diff --git a/.gitignore b/.gitignore index 7f174c0f8..2b85bee3f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ html/ node_modules/ NOTES.md tsconfig.tsbuildinfo + +*storybook.log \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 7ea6a59d3..a81debaee 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.11.0 +v20.12.2 diff --git a/apps/rest-api/package.json b/apps/rest-api/package.json index a6a4e103e..39861bfe5 100644 --- a/apps/rest-api/package.json +++ b/apps/rest-api/package.json @@ -14,6 +14,6 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.109", - "esbuild": "^0.19.5" + "esbuild": "^0.20.2" } } diff --git a/apps/spotlight/src/images/atj-infographics.png b/apps/spotlight/src/images/atj-infographics.png new file mode 100644 index 0000000000000000000000000000000000000000..5defb30436077b56d854c67f4109d2bcf21e3694 GIT binary patch literal 142616 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⩔C1hq;$pv{Xs_Fnyn?KCBU1u)I_^ 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�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 CulCFU literal 0 HcmV?d00001 diff --git a/apps/spotlight/src/pages/splash/index.astro b/apps/spotlight/src/pages/splash/index.astro new file mode 100644 index 000000000..7531b2d19 --- /dev/null +++ b/apps/spotlight/src/pages/splash/index.astro @@ -0,0 +1,70 @@ +--- +import ContentLayout from '../../layouts/ContentLayout.astro'; +import atjInfographics from '../../images/atj-infographics.png'; +--- + + +

    A people-centered platform for online document assembly

    + +
    + +
    + +

    What it is

    +

    + Fillable PDFs are not 21st Century Integrated Digital Experience Act (IDEA) compliant. The 10x Access to Justice Platform will empower courts and other + government agencies to craft web-based replacements to fillable PDFs. + Delivering first-class user experiences, these easy-to-build and deploy + digital forms deliver better outcomes for the public and public servants + through the use of a "guided interview" design strategy. Guided interviews + put users first and reduce staff time spend on incorrect and missing data. + Easy to create, easy to host, and integrable with existing processes and + backend systems — digital forms that help self-represented litigants better + advocate for themselves do not need to wait for major IT and process + overhauls. +

    + +

    + 10x ATJ Infographic +

    + +

    What it's not

    +

    + Replacing user-facing PDFs with digital forms is not a substitute for deeper + policy and process changes, which is often necessary to enable the biggest + digital services wins. We are not replicating case management systems or + back-office automation systems. Instead, we are delivering a loosely-coupled + interface to existing systems that delivers a first-class user experience, + helping the public gain access, understand, and advocate for themselves. +

    + +

    High level plan

    +

    + Taking a user-driven, research-first approach, we are piloting with federal + and state partners, targeting the high-value PDF-to-web workflow. We plan to + expand into other government domains as we prove value in the justice space. +

    +

    + Forward thinking courts are already using open source tools that have + delivered big wins for their communities. However, we have identified + critical barriers to adoption. In our ongoing Phase 3, we aim to design and demo several loosely-couple parts focused on + high-value workflows, and build interest from the A2J community. In Phase 4, + we will scale the system with complete, end-to-end user experiences and + integrate with backend case management systems. We are building the system + in a manner that we believe positions it as a viable "Forms as a Service" + product that may, in the future, more broadly serve other government + domains. +

    +
    diff --git a/packages/design/package.json b/packages/design/package.json index b7957dd98..14b4a94d5 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -15,7 +15,7 @@ "dev:lib": "vite", "dev:storybook": "storybook dev", "dev:styles": "gulp watch", - "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "lint": "eslint --ext ts,tsx --report-unused-disable-directives --max-warnings 0 src", "test:storybook": "test-storybook", "test:url": "test-storybook --url http://127.0.0.1:9009 --config-dir storybook", "test:ci": "concurrently -k -s first -n \"SB,TEST\" -c \"magenta,blue\" \"pnpm build:storybook --quiet && npx http-server storybook/public --port 9009 --silent\" \"wait-on tcp:127.0.0.1:9009 && pnpm test:url --maxWorkers=2\"" @@ -24,40 +24,40 @@ "dist/**/*" ], "devDependencies": { - "@playwright/test": "^1.41.1", - "@storybook/addon-a11y": "^7.6.10", - "@storybook/addon-coverage": "^1.0.0", - "@storybook/addon-essentials": "^7.6.10", - "@storybook/addon-interactions": "^7.6.10", - "@storybook/addon-links": "^7.6.10", - "@storybook/blocks": "^7.6.10", - "@storybook/preview-api": "^7.6.10", - "@storybook/react": "^7.6.10", - "@storybook/react-vite": "^7.6.10", - "@storybook/test": "^7.6.10", - "@storybook/test-runner": "^0.16.0", - "@storybook/types": "^7.6.10", - "@testing-library/react": "^14.1.2", + "@playwright/test": "^1.43.1", + "@storybook/addon-a11y": "^8.0.8", + "@storybook/addon-coverage": "^1.0.1", + "@storybook/addon-essentials": "^8.0.8", + "@storybook/addon-interactions": "^8.0.8", + "@storybook/addon-links": "^8.0.8", + "@storybook/blocks": "^8.0.8", + "@storybook/preview-api": "^8.0.8", + "@storybook/react": "^8.0.8", + "@storybook/react-vite": "^8.0.8", + "@storybook/test": "^8.0.8", + "@storybook/test-runner": "^0.17.0", + "@storybook/types": "^8.0.8", + "@testing-library/react": "^15.0.2", "@types/deep-equal": "^1.0.4", - "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.48", - "@typescript-eslint/eslint-plugin": "^6.19.1", - "@typescript-eslint/parser": "^6.19.1", + "@types/prop-types": "^15.7.12", + "@types/react": "^18.2.79", + "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/parser": "^7.7.0", "@uswds/compile": "github:danielnaab/uswds-compile#package-json-paths", "@vitejs/plugin-react": "^4.2.1", "concurrently": "^8.2.2", "eslint": "^8.56.0", - "eslint-plugin-react": "^7.33.2", - "glob": "^10.3.10", - "gulp": "^4.0.2", + "eslint-plugin-react": "^7.34.1", + "glob": "^10.3.12", + "gulp": "^5.0.0", "http-server": "^14.1.1", "install": "^0.13.0", - "npm": "^10.3.0", + "npm": "^10.5.2", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "vite": "^5.0.13", - "vite-plugin-dts": "^3.7.1", + "vite": "^5.2.9", + "vite-plugin-dts": "^3.8.3", "wait-on": "^7.2.0" }, "dependencies": { @@ -67,12 +67,12 @@ "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^8.0.0", "@dnd-kit/utilities": "^3.2.2", - "@uswds/uswds": "^3.7.1", + "@uswds/uswds": "^3.8.0", "classnames": "^2.5.1", "deep-equal": "^2.2.3", - "react-hook-form": "^7.49.3", - "react-router-dom": "^6.21.2", - "storybook": "^7.6.10", + "react-hook-form": "^7.51.3", + "react-router-dom": "^6.22.3", + "storybook": "^8.0.8", "zustand": "^4.5.2", "zustand-utils": "^1.3.2" } diff --git a/packages/design/sass/styles.scss b/packages/design/sass/styles.scss index 8ca6b0919..0a97bb9e5 100644 --- a/packages/design/sass/styles.scss +++ b/packages/design/sass/styles.scss @@ -15,6 +15,15 @@ h1 { } } +h2 { + margin-top: 2rem; + margin-bottom: 1rem; +} + +p { + line-height: 1.5rem; +} + .usa-legend { font-size: 1.7rem; font-weight: 700; @@ -23,7 +32,7 @@ h1 { a, .usa-link, .usa-button--unstyled { - color: #54278f; + color: color('violet-70v'); } .hide { @@ -79,6 +88,25 @@ main { .usa-nav { background: white; + + .usa-sidenav__item { + .usa-current { + color: color('violet-70v'); + } + } +} + +.usa-sidenav{ + + .usa-sidenav__item { + .usa-current { + color: #54278f; + + &:after { + background-color: rebeccapurple; + } + } + } } .usa-section { @@ -139,6 +167,11 @@ main { max-width: 32rem; } +.usa-legend-wrapper { + word-wrap: break-word; + hyphens: auto; +} + .usa-legend { max-width: 100%; font-weight: 600; @@ -422,6 +455,16 @@ iframe:focus { } } +.videoWrapper { + position: relative; + padding-bottom: 62.5%; + height: 0; +} + +.usa-footer__nav { + background: none; +} + @media (min-width: 64em) { .usa-nav__primary { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bff1261f2..a615990b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,7 +77,7 @@ importers: version: 8.2.3(astro@4.4.11) '@astrojs/react': specifier: ^3.0.9 - version: 3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)(vite@5.1.4) + version: 3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)(vite@5.2.9) '@atj/design': specifier: workspace:* version: link:../../packages/design @@ -117,14 +117,14 @@ importers: specifier: ^8.10.109 version: 8.10.125 esbuild: - specifier: ^0.19.5 - version: 0.19.5 + specifier: ^0.20.2 + version: 0.20.2 apps/spotlight: dependencies: '@astrojs/react': specifier: ^3.0.9 - version: 3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(vite@5.1.4) + version: 3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(vite@5.2.9) '@atj/design': specifier: workspace:* version: link:../../packages/design @@ -136,7 +136,7 @@ importers: version: link:../../packages/forms astro: specifier: ^4.3.3 - version: 4.3.3(@types/node@20.11.16)(typescript@5.3.3) + version: 4.3.3(@types/node@20.11.16)(typescript@5.4.2) react: specifier: ^18.2.0 version: 18.2.0 @@ -149,7 +149,7 @@ importers: devDependencies: '@astrojs/check': specifier: ^0.4.1 - version: 0.4.1(prettier@3.2.5)(typescript@5.3.3) + version: 0.4.1(prettier@3.2.5)(typescript@5.4.2) '@types/react': specifier: ^18.2.37 version: 18.2.37 @@ -183,7 +183,7 @@ importers: version: 29.7.0(@types/node@20.8.7)(ts-node@10.9.2) ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.0)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.3.3) + version: 29.1.1(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.2) packages/common: {} @@ -224,8 +224,8 @@ importers: specifier: ^3.2.2 version: 3.2.2(react@18.2.0) '@uswds/uswds': - specifier: ^3.7.1 - version: 3.7.1 + specifier: ^3.8.0 + version: 3.8.0 classnames: specifier: ^2.5.1 version: 2.5.1 @@ -233,84 +233,84 @@ importers: specifier: ^2.2.3 version: 2.2.3 react-hook-form: - specifier: ^7.49.3 - version: 7.49.3(react@18.2.0) + specifier: ^7.51.3 + version: 7.51.3(react@18.2.0) react-router-dom: - specifier: ^6.21.2 - version: 6.21.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^6.22.3 + version: 6.22.3(react-dom@18.2.0)(react@18.2.0) storybook: - specifier: ^7.6.10 - version: 7.6.10 + specifier: ^8.0.8 + version: 8.0.8(react-dom@18.2.0)(react@18.2.0) zustand: specifier: ^4.5.2 - version: 4.5.2(@types/react@18.2.48)(react@18.2.0) + version: 4.5.2(@types/react@18.2.79)(react@18.2.0) zustand-utils: specifier: ^1.3.2 version: 1.3.2(react@18.2.0)(zustand@4.5.2) devDependencies: '@playwright/test': - specifier: ^1.41.1 - version: 1.41.1 + specifier: ^1.43.1 + version: 1.43.1 '@storybook/addon-a11y': - specifier: ^7.6.10 - version: 7.6.10 + specifier: ^8.0.8 + version: 8.0.8 '@storybook/addon-coverage': - specifier: ^1.0.0 - version: 1.0.0 + specifier: ^1.0.1 + version: 1.0.1 '@storybook/addon-essentials': - specifier: ^7.6.10 - version: 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + specifier: ^8.0.8 + version: 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-interactions': - specifier: ^7.6.10 - version: 7.6.10 + specifier: ^8.0.8 + version: 8.0.8(jest@29.7.0)(vitest@0.34.6) '@storybook/addon-links': - specifier: ^7.6.10 - version: 7.6.10(react@18.2.0) + specifier: ^8.0.8 + version: 8.0.8(react@18.2.0) '@storybook/blocks': - specifier: ^7.6.10 - version: 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + specifier: ^8.0.8 + version: 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': - specifier: ^7.6.10 - version: 7.6.10 + specifier: ^8.0.8 + version: 8.0.8 '@storybook/react': - specifier: ^7.6.10 - version: 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) + specifier: ^8.0.8 + version: 8.0.8(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2) '@storybook/react-vite': - specifier: ^7.6.10 - version: 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.1.4) + specifier: ^8.0.8 + version: 8.0.8(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2)(vite@5.2.9) '@storybook/test': - specifier: ^7.6.10 - version: 7.6.10(jest@29.7.0)(vitest@0.34.6) + specifier: ^8.0.8 + version: 8.0.8(jest@29.7.0)(vitest@0.34.6) '@storybook/test-runner': - specifier: ^0.16.0 - version: 0.16.0(@types/node@20.11.16)(ts-node@10.9.2) + specifier: ^0.17.0 + version: 0.17.0(@types/node@20.11.16)(ts-node@10.9.2) '@storybook/types': - specifier: ^7.6.10 - version: 7.6.10 + specifier: ^8.0.8 + version: 8.0.8 '@testing-library/react': - specifier: ^14.1.2 - version: 14.1.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^15.0.2 + version: 15.0.2(react-dom@18.2.0)(react@18.2.0) '@types/deep-equal': specifier: ^1.0.4 version: 1.0.4 '@types/prop-types': - specifier: ^15.7.11 - version: 15.7.11 + specifier: ^15.7.12 + version: 15.7.12 '@types/react': - specifier: ^18.2.48 - version: 18.2.48 + specifier: ^18.2.79 + version: 18.2.79 '@typescript-eslint/eslint-plugin': - specifier: ^6.19.1 - version: 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^7.7.0 + version: 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.56.0)(typescript@5.4.2) '@typescript-eslint/parser': - specifier: ^6.19.1 - version: 6.19.1(eslint@8.56.0)(typescript@5.3.3) + specifier: ^7.7.0 + version: 7.7.0(eslint@8.56.0)(typescript@5.4.2) '@uswds/compile': specifier: github:danielnaab/uswds-compile#package-json-paths version: github.com/danielnaab/uswds-compile/910cc2eeae7612d9ec0f56c40f6ea764f25ef2cf(ts-node@10.9.2) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.4) + version: 4.2.1(vite@5.2.9) concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -318,14 +318,14 @@ importers: specifier: ^8.56.0 version: 8.56.0 eslint-plugin-react: - specifier: ^7.33.2 - version: 7.33.2(eslint@8.56.0) + specifier: ^7.34.1 + version: 7.34.1(eslint@8.56.0) glob: - specifier: ^10.3.10 - version: 10.3.10 + specifier: ^10.3.12 + version: 10.3.12 gulp: - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^5.0.0 + version: 5.0.0 http-server: specifier: ^14.1.1 version: 14.1.1 @@ -333,8 +333,8 @@ importers: specifier: ^0.13.0 version: 0.13.0 npm: - specifier: ^10.3.0 - version: 10.3.0 + specifier: ^10.5.2 + version: 10.5.2 prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -345,11 +345,11 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) vite: - specifier: ^5.0.13 - version: 5.1.4(@types/node@20.11.16) + specifier: ^5.2.9 + version: 5.2.9(@types/node@20.11.16) vite-plugin-dts: - specifier: ^3.7.1 - version: 3.7.1(@types/node@20.11.16)(typescript@5.3.3)(vite@5.1.4) + specifier: ^3.8.3 + version: 3.8.3(@types/node@20.11.16)(typescript@5.4.2)(vite@5.2.9) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -420,17 +420,17 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - /@astrojs/check@0.4.1(prettier@3.2.5)(typescript@5.3.3): + /@astrojs/check@0.4.1(prettier@3.2.5)(typescript@5.4.2): resolution: {integrity: sha512-XEsuU4TlWkgcsvdeessq5mXLXV1fejtxIioCPv/FfhTzb1bDYe2BtLiSBK+rFTyD9Hl686YOas9AGNMJcpoRsw==} hasBin: true peerDependencies: typescript: ^5.0.0 dependencies: - '@astrojs/language-server': 2.6.2(prettier@3.2.5)(typescript@5.3.3) + '@astrojs/language-server': 2.6.2(prettier@3.2.5)(typescript@5.4.2) chokidar: 3.5.3 fast-glob: 3.3.2 kleur: 4.1.5 - typescript: 5.3.3 + typescript: 5.4.2 yargs: 17.7.2 transitivePeerDependencies: - prettier @@ -461,7 +461,7 @@ packages: resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==} dev: false - /@astrojs/language-server@2.6.2(prettier@3.2.5)(typescript@5.3.3): + /@astrojs/language-server@2.6.2(prettier@3.2.5)(typescript@5.4.2): resolution: {integrity: sha512-RYzPRhS/WBXK5JtfR+0+nGj+N3VbJd5jU/uSNUev9baUx/RLmUwDk1f6Oy8QDEfDDLAr76Ig8YeDD/nxPdBSLw==} hasBin: true peerDependencies: @@ -475,7 +475,7 @@ packages: dependencies: '@astrojs/compiler': 2.5.3 '@jridgewell/sourcemap-codec': 1.4.15 - '@volar/kit': 1.11.1(typescript@5.3.3) + '@volar/kit': 1.11.1(typescript@5.4.2) '@volar/language-core': 1.11.1 '@volar/language-server': 1.11.1 '@volar/language-service': 1.11.1 @@ -569,7 +569,7 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(vite@5.1.4): + /@astrojs/react@3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(vite@5.2.9): resolution: {integrity: sha512-31J5yF5p9yBFV1axBooLA9PB4B2+MYm7swWhtlezSsJiUNXRFo5Is9qI3teJ7cKgmaCv+ZA593Smskko0NGaDQ==} engines: {node: '>=18.14.1'} peerDependencies: @@ -580,7 +580,7 @@ packages: dependencies: '@types/react': 18.2.37 '@types/react-dom': 18.2.14 - '@vitejs/plugin-react': 4.2.1(vite@5.1.4) + '@vitejs/plugin-react': 4.2.1(vite@5.2.9) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ultrahtml: 1.5.2 @@ -589,7 +589,7 @@ packages: - vite dev: false - /@astrojs/react@3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)(vite@5.1.4): + /@astrojs/react@3.0.9(@types/react-dom@18.2.14)(@types/react@18.2.62)(react-dom@18.2.0)(react@18.2.0)(vite@5.2.9): resolution: {integrity: sha512-31J5yF5p9yBFV1axBooLA9PB4B2+MYm7swWhtlezSsJiUNXRFo5Is9qI3teJ7cKgmaCv+ZA593Smskko0NGaDQ==} engines: {node: '>=18.14.1'} peerDependencies: @@ -600,7 +600,7 @@ packages: dependencies: '@types/react': 18.2.62 '@types/react-dom': 18.2.14 - '@vitejs/plugin-react': 4.2.1(vite@5.1.4) + '@vitejs/plugin-react': 4.2.1(vite@5.2.9) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ultrahtml: 1.5.2 @@ -652,6 +652,13 @@ packages: '@babel/highlight': 7.23.4 chalk: 2.4.2 + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + /@babel/compat-data@7.22.20: resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} engines: {node: '>=6.9.0'} @@ -671,10 +678,10 @@ packages: '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) '@babel/helpers': 7.23.1 - '@babel/parser': 7.23.6 + '@babel/parser': 7.24.0 '@babel/template': 7.22.15 '@babel/traverse': 7.23.0 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -695,9 +702,31 @@ packages: '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helpers': 7.23.8 '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 + '@babel/template': 7.23.9 '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -720,23 +749,32 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: false /@babel/helper-compilation-targets@7.22.15: @@ -760,42 +798,42 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.24.4): resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.4) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: false - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.24.4): resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 @@ -826,7 +864,7 @@ packages: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: false /@babel/helper-module-imports@7.22.15: @@ -862,36 +900,49 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: false /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: false - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.24.4): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -907,7 +958,7 @@ packages: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 dev: false /@babel/helper-split-export-declaration@7.22.6: @@ -938,8 +989,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: false /@babel/helpers@7.23.1: @@ -948,7 +999,7 @@ packages: dependencies: '@babel/template': 7.22.15 '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color dev: true @@ -963,6 +1014,16 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} @@ -988,12 +1049,21 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 /@babel/parser@7.24.0: resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} @@ -1001,48 +1071,54 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.9 - dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.4) dev: false - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.24.4): resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 dev: false /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): @@ -1061,6 +1137,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): @@ -1072,6 +1157,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -1088,63 +1182,72 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -1164,6 +1267,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): @@ -1182,15 +1294,24 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.7): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -1204,6 +1325,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.4): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1220,6 +1351,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): @@ -1238,6 +1378,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): @@ -1256,6 +1405,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): @@ -1274,6 +1432,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): @@ -1292,6 +1459,15 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): @@ -1310,15 +1486,24 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -1340,464 +1525,474 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.7): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): + /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.24.4): resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.24.4): resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.4) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: false - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + '@babel/template': 7.24.0 dev: false - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.24.4): resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: false - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.24.4): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -1830,272 +2025,272 @@ packages: '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: false - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7): + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.4): resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.4) dev: false - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/preset-env@7.23.8(@babel/core@7.23.7): + /@babel/preset-env@7.23.8(@babel/core@7.24.4): resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.24.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.24.4) core-js-compat: 3.35.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-flow@7.23.3(@babel/core@7.23.7): + /@babel/preset-flow@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.24.4) dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 esutils: 2.0.3 dev: false - /@babel/preset-typescript@7.23.3(@babel/core@7.23.7): + /@babel/preset-typescript@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.4) dev: false - /@babel/register@7.23.7(@babel/core@7.23.7): + /@babel/register@7.23.7(@babel/core@7.24.4): resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -2128,7 +2323,14 @@ packages: '@babel/code-frame': 7.23.5 '@babel/parser': 7.24.0 '@babel/types': 7.23.9 - dev: false + + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 /@babel/traverse@7.23.0: resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} @@ -2140,8 +2342,8 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.24.0 + '@babel/types': 7.23.9 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -2159,7 +2361,24 @@ packages: '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -2180,7 +2399,14 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: false + + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -2438,7 +2664,6 @@ packages: react: '>=16.8.0' dependencies: react: 18.2.0 - dev: true /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} @@ -2448,11 +2673,11 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} - cpu: [arm64] - os: [android] + cpu: [ppc64] + os: [aix] requiresBuild: true optional: true @@ -2464,21 +2689,12 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.19.5: - resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true optional: true /@esbuild/android-arm@0.19.12: @@ -2489,21 +2705,12 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.19.5: - resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true optional: true /@esbuild/android-x64@0.19.12: @@ -2514,21 +2721,12 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.19.5: - resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true optional: true /@esbuild/darwin-arm64@0.19.12: @@ -2539,21 +2737,12 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.19.5: - resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true optional: true /@esbuild/darwin-x64@0.19.12: @@ -2564,21 +2753,12 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.19.5: - resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true optional: true /@esbuild/freebsd-arm64@0.19.12: @@ -2589,21 +2769,12 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.19.5: - resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true optional: true /@esbuild/freebsd-x64@0.19.12: @@ -2614,21 +2785,12 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.19.5: - resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-arm64@0.19.12: @@ -2639,21 +2801,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.19.5: - resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-arm@0.19.12: @@ -2664,21 +2817,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.19.5: - resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-ia32@0.19.12: @@ -2689,21 +2833,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.19.5: - resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-loong64@0.19.12: @@ -2714,21 +2849,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.19.5: - resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-mips64el@0.19.12: @@ -2739,21 +2865,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.19.5: - resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-ppc64@0.19.12: @@ -2764,21 +2881,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.19.5: - resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-riscv64@0.19.12: @@ -2789,21 +2897,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.19.5: - resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-s390x@0.19.12: @@ -2814,21 +2913,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.19.5: - resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-x64@0.19.12: @@ -2839,21 +2929,12 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.19.5: - resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true optional: true /@esbuild/netbsd-x64@0.19.12: @@ -2864,21 +2945,12 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.19.5: - resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true optional: true /@esbuild/openbsd-x64@0.19.12: @@ -2889,21 +2961,12 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.19.5: - resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true optional: true /@esbuild/sunos-x64@0.19.12: @@ -2914,21 +2977,12 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.19.5: - resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true optional: true /@esbuild/win32-arm64@0.19.12: @@ -2939,21 +2993,12 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.19.5: - resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true optional: true /@esbuild/win32-ia32@0.19.12: @@ -2964,21 +3009,12 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.19.5: - resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true optional: true /@esbuild/win32-x64@0.19.12: @@ -2989,13 +3025,12 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.19.5: - resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): @@ -3021,7 +3056,7 @@ packages: debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 - ignore: 5.2.4 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -3044,34 +3079,6 @@ packages: engines: {node: '>=14'} dev: true - /@floating-ui/core@1.5.3: - resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} - dependencies: - '@floating-ui/utils': 0.2.1 - dev: true - - /@floating-ui/dom@1.5.4: - resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} - dependencies: - '@floating-ui/core': 1.5.3 - '@floating-ui/utils': 0.2.1 - dev: true - - /@floating-ui/react-dom@2.0.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-UsBK30Bg+s6+nsgblXtZmwHhgS2vmbuQK22qgt2pTQM6M3X6H1+cQcLXqgRY3ihVLcZJE6IvqDQozhsnIVqK/Q==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 1.5.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: true - /@gulp-sourcemaps/identity-map@2.0.1: resolution: {integrity: sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==} engines: {node: '>= 0.10'} @@ -3091,6 +3098,18 @@ packages: through2: 2.0.5 dev: true + /@gulpjs/messages@1.1.0: + resolution: {integrity: sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==} + engines: {node: '>=10.13.0'} + dev: true + + /@gulpjs/to-absolute-glob@4.0.0: + resolution: {integrity: sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==} + engines: {node: '>=10.13.0'} + dependencies: + is-negated-glob: 1.0.0 + dev: true + /@gwhitney/detect-indent@7.0.1: resolution: {integrity: sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA==} engines: {node: '>=12.20'} @@ -3501,17 +3520,6 @@ packages: - supports-color dev: true - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.2 - '@types/node': 20.11.16 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - dev: true - /@jest/types@29.6.3: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3524,7 +3532,7 @@ packages: chalk: 4.1.2 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.3.3)(vite@5.1.4): + /@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.4.2)(vite@5.2.9): resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: typescript: '>= 4.3.x' @@ -3536,9 +3544,9 @@ packages: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.3.3) - typescript: 5.3.3 - vite: 5.1.4(@types/node@20.11.16) + react-docgen-typescript: 2.2.2(typescript@5.4.2) + typescript: 5.4.2 + vite: 5.2.9(@types/node@20.11.16) dev: true /@jridgewell/gen-mapping@0.3.3: @@ -3549,6 +3557,14 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} @@ -3556,12 +3572,15 @@ packages: /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -3574,6 +3593,12 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -3606,7 +3631,7 @@ packages: engines: {node: '>= 14.17.0'} dependencies: chalk: 4.1.2 - semver: 7.5.4 + semver: 7.6.0 dev: false /@jsii/spec@1.95.0: @@ -3616,17 +3641,14 @@ packages: ajv: 8.12.0 dev: false - /@juggle/resize-observer@3.4.0: - resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - dev: true - - /@mdx-js/react@2.3.0(react@18.2.0): - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} + /@mdx-js/react@3.0.1(@types/react@18.2.79)(react@18.2.0): + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} peerDependencies: + '@types/react': '>=16' react: '>=16' dependencies: '@types/mdx': 2.0.10 - '@types/react': 18.2.48 + '@types/react': 18.2.79 react: 18.2.0 dev: true @@ -3634,32 +3656,33 @@ packages: resolution: {integrity: sha512-ojkXjR3K0Zz3jnCR80tqPL+0yvbZk/lEodb6RIVjLz7W8RVA2wrw8ym/CzCpXO9SYVUIKHFUpc7jvf8UKfIM3w==} dev: false - /@microsoft/api-extractor-model@7.28.3(@types/node@20.11.16): - resolution: {integrity: sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==} + /@microsoft/api-extractor-model@7.28.13(@types/node@20.11.16): + resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.62.0(@types/node@20.11.16) + '@rushstack/node-core-library': 4.0.2(@types/node@20.11.16) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.39.0(@types/node@20.11.16): - resolution: {integrity: sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==} + /@microsoft/api-extractor@7.43.0(@types/node@20.11.16): + resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.28.3(@types/node@20.11.16) + '@microsoft/api-extractor-model': 7.28.13(@types/node@20.11.16) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.62.0(@types/node@20.11.16) - '@rushstack/rig-package': 0.5.1 - '@rushstack/ts-command-line': 4.17.1 - colors: 1.2.5 + '@rushstack/node-core-library': 4.0.2(@types/node@20.11.16) + '@rushstack/rig-package': 0.5.2 + '@rushstack/terminal': 0.10.0(@types/node@20.11.16) + '@rushstack/ts-command-line': 4.19.1(@types/node@20.11.16) lodash: 4.17.21 + minimatch: 3.0.8 resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.3.3 + typescript: 5.4.2 transitivePeerDependencies: - '@types/node' dev: true @@ -3721,12 +3744,12 @@ packages: requiresBuild: true optional: true - /@playwright/test@1.41.1: - resolution: {integrity: sha512-9g8EWTjiQ9yFBXc6HjCWe41msLpxEX0KhmfmPl9RPLJdfzL4F0lg2BdJ91O9azFdl11y1pmpwdjBiSxvqc+btw==} + /@playwright/test@1.43.1: + resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.41.1 + playwright: 1.43.1 dev: true /@pnpm/cli-meta@5.0.1: @@ -3843,7 +3866,7 @@ packages: ramda: /@pnpm/ramda@0.28.1 right-pad: 1.0.1 rxjs: 7.8.1 - semver: 7.5.4 + semver: 7.6.0 stacktracey: 2.1.8 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -3974,7 +3997,7 @@ packages: detect-libc: 2.0.1 execa: /safe-execa@0.1.2 mem: 8.1.1 - semver: 7.5.4 + semver: 7.6.0 dev: false /@pnpm/pnpmfile@5.0.7(@pnpm/logger@5.0.0): @@ -4075,62 +4098,7 @@ packages: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} dev: true - /@radix-ui/number@1.0.1: - resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} - dependencies: - '@babel/runtime': 7.23.8 - dev: true - - /@radix-ui/primitive@1.0.1: - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - dependencies: - '@babel/runtime': 7.23.8 - dev: true - - /@radix-ui/react-arrow@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-collection@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.48)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.79)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -4140,271 +4108,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-context@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-direction@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 + '@types/react': 18.2.79 react: 18.2.0 dev: true - /@radix-ui/react-dismissable-layer@1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-focus-scope@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-id@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-popper@1.1.2(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@floating-ui/react-dom': 2.0.5(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-portal@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-primitive@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-roving-focus@1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-select@1.2.2(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.48)(react@18.2.0) - dev: true - - /@radix-ui/react-separator@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-slot@1.0.2(@types/react@18.2.48)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.2.79)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -4414,215 +4122,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.23.8 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.79)(react@18.2.0) + '@types/react': 18.2.79 react: 18.2.0 dev: true - /@radix-ui/react-toggle-group@1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-toggle@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-toolbar@1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /@radix-ui/react-visually-hidden@1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.23.8 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@radix-ui/rect@1.0.1: - resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} - dependencies: - '@babel/runtime': 7.23.8 - dev: true - - /@remix-run/router@1.14.2: - resolution: {integrity: sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==} + /@remix-run/router@1.15.3: + resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} engines: {node: '>=14.0.0'} dev: false @@ -4640,6 +4146,13 @@ packages: picomatch: 2.3.1 dev: true + /@rollup/rollup-android-arm-eabi@4.14.3: + resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==} + cpu: [arm] + os: [android] + requiresBuild: true + optional: true + /@rollup/rollup-android-arm-eabi@4.9.5: resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==} cpu: [arm] @@ -4647,6 +4160,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-android-arm64@4.14.3: + resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} + cpu: [arm64] + os: [android] + requiresBuild: true + optional: true + /@rollup/rollup-android-arm64@4.9.5: resolution: {integrity: sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==} cpu: [arm64] @@ -4654,6 +4174,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-darwin-arm64@4.14.3: + resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + /@rollup/rollup-darwin-arm64@4.9.5: resolution: {integrity: sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==} cpu: [arm64] @@ -4661,6 +4188,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-darwin-x64@4.14.3: + resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + /@rollup/rollup-darwin-x64@4.9.5: resolution: {integrity: sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==} cpu: [x64] @@ -4668,6 +4202,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-linux-arm-gnueabihf@4.14.3: + resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + /@rollup/rollup-linux-arm-gnueabihf@4.9.5: resolution: {integrity: sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==} cpu: [arm] @@ -4675,6 +4216,20 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-linux-arm-musleabihf@4.14.3: + resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.14.3: + resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + /@rollup/rollup-linux-arm64-gnu@4.9.5: resolution: {integrity: sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==} cpu: [arm64] @@ -4682,6 +4237,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-linux-arm64-musl@4.14.3: + resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + /@rollup/rollup-linux-arm64-musl@4.9.5: resolution: {integrity: sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==} cpu: [arm64] @@ -4689,6 +4251,20 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-linux-powerpc64le-gnu@4.14.3: + resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.14.3: + resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + /@rollup/rollup-linux-riscv64-gnu@4.9.5: resolution: {integrity: sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==} cpu: [riscv64] @@ -4696,6 +4272,20 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-linux-s390x-gnu@4.14.3: + resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.14.3: + resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + /@rollup/rollup-linux-x64-gnu@4.9.5: resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==} cpu: [x64] @@ -4703,6 +4293,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-linux-x64-musl@4.14.3: + resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + /@rollup/rollup-linux-x64-musl@4.9.5: resolution: {integrity: sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==} cpu: [x64] @@ -4710,6 +4307,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-win32-arm64-msvc@4.14.3: + resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + /@rollup/rollup-win32-arm64-msvc@4.9.5: resolution: {integrity: sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==} cpu: [arm64] @@ -4717,6 +4321,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-win32-ia32-msvc@4.14.3: + resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + /@rollup/rollup-win32-ia32-msvc@4.9.5: resolution: {integrity: sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==} cpu: [ia32] @@ -4724,6 +4335,13 @@ packages: requiresBuild: true optional: true + /@rollup/rollup-win32-x64-msvc@4.14.3: + resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + /@rollup/rollup-win32-x64-msvc@4.9.5: resolution: {integrity: sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==} cpu: [x64] @@ -4731,8 +4349,8 @@ packages: requiresBuild: true optional: true - /@rushstack/node-core-library@3.62.0(@types/node@20.11.16): - resolution: {integrity: sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==} + /@rushstack/node-core-library@4.0.2(@types/node@20.11.16): + resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -4740,7 +4358,6 @@ packages: optional: true dependencies: '@types/node': 20.11.16 - colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 @@ -4749,20 +4366,35 @@ packages: z-schema: 5.0.5 dev: true - /@rushstack/rig-package@0.5.1: - resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} + /@rushstack/rig-package@0.5.2: + resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 dev: true - /@rushstack/ts-command-line@4.17.1: - resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} + /@rushstack/terminal@0.10.0(@types/node@20.11.16): + resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rushstack/node-core-library': 4.0.2(@types/node@20.11.16) + '@types/node': 20.11.16 + supports-color: 8.1.1 + dev: true + + /@rushstack/ts-command-line@4.19.1(@types/node@20.11.16): + resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} dependencies: + '@rushstack/terminal': 0.10.0(@types/node@20.11.16) '@types/argparse': 1.0.38 argparse: 1.0.10 - colors: 1.2.5 string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' dev: true /@sentry-internal/tracing@7.101.1: @@ -4873,17 +4505,17 @@ packages: '@sinonjs/commons': 3.0.0 dev: true - /@storybook/addon-a11y@7.6.10: - resolution: {integrity: sha512-TP17m4TAWLSSd2x9cWNg7d0MCZZCojYIG83RZMXAb55jt8gKJBMDbupOoDLydBsABQa5Uk9ZP0D/CvumMon8RA==} + /@storybook/addon-a11y@8.0.8: + resolution: {integrity: sha512-QiNzKej1C3QjPBHm8nwk0lqv9N9cLInlyJ62Cp+/+ethcH2elNnBf1H3ad/DC6XIQRyMtvvhCOnzygAMnjCq1w==} dependencies: - '@storybook/addon-highlight': 7.6.10 + '@storybook/addon-highlight': 8.0.8 axe-core: 4.8.3 dev: true - /@storybook/addon-actions@7.6.10: - resolution: {integrity: sha512-pcKmf0H/caGzKDy8cz1adNSjv+KOBWLJ11RzGExrWm+Ad5ACifwlsQPykJ3TQ/21sTd9IXVrE9uuq4LldEnPbg==} + /@storybook/addon-actions@8.0.8: + resolution: {integrity: sha512-F3qpN0n53d058EroW1A2IlzrsFNR5p2srLY4FmXB80nxAKV8oqoDI4jp15zYlf8ThcJoQl36plT8gx3r1BpANA==} dependencies: - '@storybook/core-events': 7.6.10 + '@storybook/core-events': 8.0.8 '@storybook/global': 5.0.0 '@types/uuid': 9.0.7 dequal: 2.0.3 @@ -4891,31 +4523,30 @@ packages: uuid: 9.0.1 dev: true - /@storybook/addon-backgrounds@7.6.10: - resolution: {integrity: sha512-kGzsN1QkfyI8Cz7TErEx9OCB3PMzpCFGLd/iy7FreXwbMbeAQ3/9fYgKUsNOYgOhuTz7S09koZUWjS/WJuZGFA==} + /@storybook/addon-backgrounds@8.0.8: + resolution: {integrity: sha512-lrAJjVxDeXSK116rDajb56TureZiT76ygraP22/IvU3IcWCEcRiKYwlay8WgCTbJHtFmdBpelLBapoT46+IR9Q==} dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 dev: true - /@storybook/addon-controls@7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-LjwCQRMWq1apLtFwDi6U8MI6ITUr+KhxJucZ60tfc58RgB2v8ayozyDAonFEONsx9YSR1dNIJ2Z/e2rWTBJeYA==} + /@storybook/addon-controls@8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7xANN18CLYsVthuSXwxKezqpelEKJlT9xaYLtw5vvD00btW5g3vxq+Z/A31OkS2OuaH2bE0GfRCoG2OLR8yQQA==} dependencies: - '@storybook/blocks': 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - encoding - react - react-dom - supports-color dev: true - /@storybook/addon-coverage@1.0.0: - resolution: {integrity: sha512-7RMllRtDwyWH2fOeCS7ZG8o5eDTd44C0ZwA+m7dJDrnOXled75RddBPMYF+BsJjeAAWOkWxsII05EKCgS7QG2A==} + /@storybook/addon-coverage@1.0.1: + resolution: {integrity: sha512-jGDYPBbh3+LXMDw0Nmw+fUEDH3kuHvHSOjE1fqi4ac00CnwHnyD5PD6RFSpVxR4Fw/tCDPmKEubbOzQCSZGyJg==} dependencies: '@istanbuljs/load-nyc-config': 1.1.0 '@jsdevtools/coverage-istanbul-loader': 3.0.5 @@ -4930,87 +4561,84 @@ packages: - supports-color dev: true - /@storybook/addon-docs@7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-GtyQ9bMx1AOOtl6ZS9vwK104HFRK+tqzxddRRxhXkpyeKu3olm9aMgXp35atE/3fJSqyyDm2vFtxxH8mzBA20A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + /@storybook/addon-docs@8.0.8: + resolution: {integrity: sha512-HNiY4ESH9WxGS6QpIpURzdSbyDxbRh7VIgbvUrePSKajlsL4RFN/gdnn5TnSL00tOP/w+Cy/fXcbljMUKy7Ivg==} dependencies: - '@jest/transform': 29.7.0 - '@mdx-js/react': 2.3.0(react@18.2.0) - '@storybook/blocks': 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.6.10 - '@storybook/components': 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/csf-plugin': 7.6.10 - '@storybook/csf-tools': 7.6.10 + '@babel/core': 7.23.7 + '@mdx-js/react': 3.0.1(@types/react@18.2.79)(react@18.2.0) + '@storybook/blocks': 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 8.0.8 + '@storybook/components': 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-plugin': 8.0.8 + '@storybook/csf-tools': 8.0.8 '@storybook/global': 5.0.0 - '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.6.10 - '@storybook/postinstall': 7.6.10 - '@storybook/preview-api': 7.6.10 - '@storybook/react-dom-shim': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.10 - fs-extra: 11.1.1 + '@storybook/node-logger': 8.0.8 + '@storybook/preview-api': 8.0.8 + '@storybook/react-dom-shim': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.8 + '@types/react': 18.2.79 + fs-extra: 11.2.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - remark-external-links: 8.0.0 - remark-slug: 6.1.0 + rehype-external-links: 3.0.0 + rehype-slug: 6.0.0 ts-dedent: 2.2.0 transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - encoding - supports-color dev: true - /@storybook/addon-essentials@7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cjbuCCK/3dtUity0Uqi5LwbkgfxqCCE5x5mXZIk9lTMeDz5vB9q6M5nzncVDy8F8przF3NbDLLgxKlt8wjiICg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/addon-actions': 7.6.10 - '@storybook/addon-backgrounds': 7.6.10 - '@storybook/addon-controls': 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-highlight': 7.6.10 - '@storybook/addon-measure': 7.6.10 - '@storybook/addon-outline': 7.6.10 - '@storybook/addon-toolbars': 7.6.10 - '@storybook/addon-viewport': 7.6.10 - '@storybook/core-common': 7.6.10 - '@storybook/manager-api': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.6.10 - '@storybook/preview-api': 7.6.10 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + /@storybook/addon-essentials@8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bc9KJk7SPM2I5CCJEAP8R5leP+74IYxhWPiTN8Y1YFmf3MA1lpDJbwy+RfuRZ2ZKnSKszCXCVzU/T10HKUHLZw==} + dependencies: + '@storybook/addon-actions': 8.0.8 + '@storybook/addon-backgrounds': 8.0.8 + '@storybook/addon-controls': 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-docs': 8.0.8 + '@storybook/addon-highlight': 8.0.8 + '@storybook/addon-measure': 8.0.8 + '@storybook/addon-outline': 8.0.8 + '@storybook/addon-toolbars': 8.0.8 + '@storybook/addon-viewport': 8.0.8 + '@storybook/core-common': 8.0.8 + '@storybook/manager-api': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 8.0.8 + '@storybook/preview-api': 8.0.8 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - encoding + - react + - react-dom - supports-color dev: true - /@storybook/addon-highlight@7.6.10: - resolution: {integrity: sha512-dIuS5QmoT1R+gFOcf6CoBa6D9UR5/wHCfPqPRH8dNNcCLtIGSHWQ4v964mS5OCq1Huj7CghmR15lOUk7SaYwUA==} + /@storybook/addon-highlight@8.0.8: + resolution: {integrity: sha512-KKD7xiNhxZQM4fdDidtcla6jSzgN1f9qe1AwFSHLXwIW22+4c97Vgf+AookN7cJvB77HxRUnvQH//zV1CJEDug==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/addon-interactions@7.6.10: - resolution: {integrity: sha512-lEsAdP/PrOZK/KmRbZ/fU4RjEqDP+e/PBlVVVJT2QvHniWK/xxkjCD0axsHU/XuaeQRFhmg0/KR342PC/cIf9A==} + /@storybook/addon-interactions@8.0.8(jest@29.7.0)(vitest@0.34.6): + resolution: {integrity: sha512-UOPKOe97uV4psH1O1YeE0oFuUQgD1Vkv95JjHjQG8KiPWvwdiezV7rrjPvw8RApnSKUopjFETs8F5D59i4eARw==} dependencies: '@storybook/global': 5.0.0 - '@storybook/types': 7.6.10 - jest-mock: 27.5.1 + '@storybook/instrumenter': 8.0.8 + '@storybook/test': 8.0.8(jest@29.7.0)(vitest@0.34.6) + '@storybook/types': 8.0.8 polished: 4.2.2 ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest dev: true - /@storybook/addon-links@7.6.10(react@18.2.0): - resolution: {integrity: sha512-s/WkSYHpr2pb9p57j6u/xDBg3TKJhBq55YMl0GB5gXgkRPIeuGbPhGJhm2yTGVFLvXgr/aHHnOxb/R/W8PiRhA==} + /@storybook/addon-links@8.0.8(react@18.2.0): + resolution: {integrity: sha512-iRI/W9I6fOom5zfZvsu53gfJtuhBSMmhgI/u5uZbAbfEoNL5D1PqpDXD4ygM8Vvlx90AZNZ2W5slEe7gCZOMyA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: @@ -5023,52 +4651,58 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure@7.6.10: - resolution: {integrity: sha512-OVfTI56+kc4hLWfZ/YPV3WKj/aA9e4iKXYxZyPdhfX4Z8TgZdD1wv9Z6e8DKS0H5kuybYrHKHaID5ki6t7qz3w==} + /@storybook/addon-measure@8.0.8: + resolution: {integrity: sha512-akyoa+1F2ripV6ELF2UbxiSHv791LWSAVK7gsD/a5eJfKZMm5yoHjcY7Icdkc/ctE+pyjAQNhkXTixUngge09w==} dependencies: '@storybook/global': 5.0.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 dev: true - /@storybook/addon-outline@7.6.10: - resolution: {integrity: sha512-RVJrEoPArhI6zAIMNl1Gz0zrj84BTfEWYYz0yDWOTVgvN411ugsoIk1hw0671MOneXJ2RcQ9MFIeV/v6AVDQYg==} + /@storybook/addon-outline@8.0.8: + resolution: {integrity: sha512-8Gxs095ekpa5YZolLSs5cWbWK94GZTevEUX8GFeLGIz9sf1KO3kmEO3eC5ogzDoB0cloqvbmVAJvYJ3FWiUx8w==} dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 dev: true - /@storybook/addon-toolbars@7.6.10: - resolution: {integrity: sha512-PaXY/oj9yxF7/H0CNdQKcioincyCkfeHpISZriZbZqhyqsjn3vca7RFEmsB88Q+ou6rMeqyA9st+6e2cx/Ct6A==} + /@storybook/addon-toolbars@8.0.8: + resolution: {integrity: sha512-PZxlK+/Fwk2xcrpr5kkXYjCbBaEjAWcEHWq7mhQReMFaAs5AJE8dvmeQ7rmPDOHnlg4+YsARDFKz5FJtthRIgg==} dev: true - /@storybook/addon-viewport@7.6.10: - resolution: {integrity: sha512-+bA6juC/lH4vEhk+w0rXakaG8JgLG4MOYrIudk5vJKQaC6X58LIM9N4kzIS2KSExRhkExXBPrWsnMfCo7uxmKg==} + /@storybook/addon-viewport@8.0.8: + resolution: {integrity: sha512-nOuc6DquGvm24c/A0HFTgeEN/opd58ebs1KLaEEq1f6iYV0hT2Gpnk0Usg/seOiFtJnj3NyAM46HSkZz06T8Sw==} dependencies: memoizerific: 1.11.3 dev: true - /@storybook/blocks@7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-oSIukGC3yuF8pojABC/HLu5tv2axZvf60TaUs8eDg7+NiiKhzYSPoMQxs5uMrKngl+EJDB92ESgWT9vvsfvIPg==} + /@storybook/blocks@8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kwsjhvnmFEaIl51QHJt/83G7mZ5YbzFKnWCwy8WUpi0xvVcyoFQSGGgwR3XRrzGfUEPK8P2FDHeKw1bLzyIejA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true dependencies: - '@storybook/channels': 7.6.10 - '@storybook/client-logger': 7.6.10 - '@storybook/components': 7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-events': 7.6.10 + '@storybook/channels': 8.0.8 + '@storybook/client-logger': 8.0.8 + '@storybook/components': 8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 8.0.8 '@storybook/csf': 0.1.2 - '@storybook/docs-tools': 7.6.10 + '@storybook/docs-tools': 8.0.8 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/preview-api': 7.6.10 - '@storybook/theming': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.10 + '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 8.0.8 + '@storybook/theming': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.8 '@types/lodash': 4.14.202 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 - markdown-to-jsx: 7.4.0(react@18.2.0) + markdown-to-jsx: 7.3.2(react@18.2.0) memoizerific: 1.11.3 polished: 4.2.2 react: 18.2.0 @@ -5080,28 +4714,25 @@ packages: util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' - encoding - supports-color dev: true - /@storybook/builder-manager@7.6.10: - resolution: {integrity: sha512-f+YrjZwohGzvfDtH8BHzqM3xW0p4vjjg9u7uzRorqUiNIAAKHpfNrZ/WvwPlPYmrpAHt4xX/nXRJae4rFSygPw==} + /@storybook/builder-manager@8.0.8: + resolution: {integrity: sha512-0uihNTpTou0RFMM6PQLlfCxDxse9nIDEb83AmWE/OUnpKDDY9+WFupVWGaZc9HfH9h4Yqre2fiuK1b7KNYe7AQ==} dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.6.10 - '@storybook/manager': 7.6.10 - '@storybook/node-logger': 7.6.10 + '@storybook/core-common': 8.0.8 + '@storybook/manager': 8.0.8 + '@storybook/node-logger': 8.0.8 '@types/ejs': 3.1.5 - '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.20) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) browser-assert: 1.2.1 ejs: 3.1.9 - esbuild: 0.18.20 + esbuild: 0.20.2 esbuild-plugin-alias: 0.2.1 express: 4.18.2 - find-cache-dir: 3.3.2 - fs-extra: 11.1.1 + fs-extra: 11.2.0 process: 0.11.10 util: 0.12.5 transitivePeerDependencies: @@ -5109,12 +4740,12 @@ packages: - supports-color dev: false - /@storybook/builder-vite@7.6.10(typescript@5.3.3)(vite@5.1.4): - resolution: {integrity: sha512-qxe19axiNJVdIKj943e1ucAmADwU42fTGgMSdBzzrvfH3pSOmx2057aIxRzd8YtBRnj327eeqpgCHYIDTunMYQ==} + /@storybook/builder-vite@8.0.8(typescript@5.4.2)(vite@5.2.9): + resolution: {integrity: sha512-ibWOxoHczCc6ttMQqiSXv29m/e44sKVoc1BJluApQcjCXl9g6QXyN45zV70odjCxMfNy7EQgUjCA0mgAgMHSIw==} peerDependencies: '@preact/preset-vite': '*' typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^4.0.0 || ^5.0.0 vite-plugin-glimmerx: '*' peerDependenciesMeta: '@preact/preset-vite': @@ -5124,56 +4755,55 @@ packages: vite-plugin-glimmerx: optional: true dependencies: - '@storybook/channels': 7.6.10 - '@storybook/client-logger': 7.6.10 - '@storybook/core-common': 7.6.10 - '@storybook/csf-plugin': 7.6.10 - '@storybook/node-logger': 7.6.10 - '@storybook/preview': 7.6.10 - '@storybook/preview-api': 7.6.10 - '@storybook/types': 7.6.10 + '@storybook/channels': 8.0.8 + '@storybook/client-logger': 8.0.8 + '@storybook/core-common': 8.0.8 + '@storybook/core-events': 8.0.8 + '@storybook/csf-plugin': 8.0.8 + '@storybook/node-logger': 8.0.8 + '@storybook/preview': 8.0.8 + '@storybook/preview-api': 8.0.8 + '@storybook/types': 8.0.8 '@types/find-cache-dir': 3.2.1 browser-assert: 1.2.1 es-module-lexer: 0.9.3 express: 4.18.2 find-cache-dir: 3.3.2 - fs-extra: 11.1.1 - magic-string: 0.30.7 - rollup: 3.29.1 - typescript: 5.3.3 - vite: 5.1.4(@types/node@20.11.16) + fs-extra: 11.2.0 + magic-string: 0.30.9 + ts-dedent: 2.2.0 + typescript: 5.4.2 + vite: 5.2.9(@types/node@20.11.16) transitivePeerDependencies: - encoding - supports-color dev: true - /@storybook/channels@7.6.10: - resolution: {integrity: sha512-ITCLhFuDBKgxetuKnWwYqMUWlU7zsfH3gEKZltTb+9/2OAWR7ez0iqU7H6bXP1ridm0DCKkt2UMWj2mmr9iQqg==} + /@storybook/channels@8.0.8: + resolution: {integrity: sha512-L3EGVkabv3fweXnykD/GlNUDO5HtwlIfSovC7BF4MmP7662j2/eqlZrJxDojGtbv11XHjWp/UJHUIfKpcHXYjQ==} dependencies: - '@storybook/client-logger': 7.6.10 - '@storybook/core-events': 7.6.10 + '@storybook/client-logger': 8.0.8 + '@storybook/core-events': 8.0.8 '@storybook/global': 5.0.0 - qs: 6.11.2 telejson: 7.2.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 - /@storybook/cli@7.6.10: - resolution: {integrity: sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ==} + /@storybook/cli@8.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-RnSdgykh2i7es1rQ7CNGpDrKK/PN1f0xjwpkAHXCEB6T9KpHBmqDquzZp+N127a1HBHHXy018yi4wT8mSQyEoA==} hasBin: true dependencies: - '@babel/core': 7.23.7 - '@babel/preset-env': 7.23.8(@babel/core@7.23.7) - '@babel/types': 7.23.6 + '@babel/core': 7.24.4 + '@babel/types': 7.24.0 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 7.6.10 - '@storybook/core-common': 7.6.10 - '@storybook/core-events': 7.6.10 - '@storybook/core-server': 7.6.10 - '@storybook/csf-tools': 7.6.10 - '@storybook/node-logger': 7.6.10 - '@storybook/telemetry': 7.6.10 - '@storybook/types': 7.6.10 - '@types/semver': 7.5.6 + '@storybook/codemod': 8.0.8 + '@storybook/core-common': 8.0.8 + '@storybook/core-events': 8.0.8 + '@storybook/core-server': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-tools': 8.0.8 + '@storybook/node-logger': 8.0.8 + '@storybook/telemetry': 8.0.8 + '@storybook/types': 8.0.8 + '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 @@ -5182,106 +4812,99 @@ packages: detect-indent: 6.1.0 envinfo: 7.11.0 execa: 5.1.1 - express: 4.18.2 find-up: 5.0.0 - fs-extra: 11.1.1 + fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 - get-port: 5.1.1 giget: 1.2.1 globby: 11.1.0 jscodeshift: 0.15.1(@babel/preset-env@7.23.8) leven: 3.1.0 ora: 5.4.1 - prettier: 2.8.8 + prettier: 3.2.5 prompts: 2.4.2 - puppeteer-core: 2.1.1 read-pkg-up: 7.0.1 - semver: 7.5.4 + semver: 7.6.0 strip-json-comments: 3.1.1 tempy: 1.0.1 + tiny-invariant: 1.3.3 ts-dedent: 2.2.0 - util-deprecate: 1.0.2 transitivePeerDependencies: + - '@babel/preset-env' - bufferutil - encoding + - react + - react-dom - supports-color - utf-8-validate dev: false - /@storybook/client-logger@7.6.10: - resolution: {integrity: sha512-U7bbpu21ntgePMz/mKM18qvCSWCUGCUlYru8mgVlXLCKqFqfTeP887+CsPEQf29aoE3cLgDrxqbRJ1wxX9kL9A==} + /@storybook/client-logger@8.0.8: + resolution: {integrity: sha512-a4BKwl9NLFcuRgMyI7S4SsJeLFK0LCQxIy76V6YyrE1DigoXz4nA4eQxdjLf7JVvU0EZFmNSfbVL/bXzzWKNXA==} dependencies: '@storybook/global': 5.0.0 - /@storybook/codemod@7.6.10: - resolution: {integrity: sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw==} + /@storybook/codemod@8.0.8: + resolution: {integrity: sha512-ufEBLciLmLlAh+L6lGgBObTiny6odXMKqiJOewQ9XfIN0wdWdyRUf5QdZIPOdfgHhWF2Q2HeswiulsoHm8Z/hA==} dependencies: - '@babel/core': 7.23.7 - '@babel/preset-env': 7.23.8(@babel/core@7.23.7) - '@babel/types': 7.23.6 + '@babel/core': 7.24.4 + '@babel/preset-env': 7.23.8(@babel/core@7.24.4) + '@babel/types': 7.24.0 '@storybook/csf': 0.1.2 - '@storybook/csf-tools': 7.6.10 - '@storybook/node-logger': 7.6.10 - '@storybook/types': 7.6.10 + '@storybook/csf-tools': 8.0.8 + '@storybook/node-logger': 8.0.8 + '@storybook/types': 8.0.8 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 11.1.0 jscodeshift: 0.15.1(@babel/preset-env@7.23.8) lodash: 4.17.21 - prettier: 2.8.8 - recast: 0.23.4 + prettier: 3.2.5 + recast: 0.23.6 + tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color dev: false - /@storybook/components@7.6.10(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-H5hF8pxwtbt0LxV24KMMsPlbYG9Oiui3ObvAQkvGu6q62EYxRPeNSrq3GBI5XEbI33OJY9bT24cVaZx18dXqwQ==} + /@storybook/components@8.0.8(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EpBExH4kHWQJSfA8QXJJ5AsLRUGi5X/zWY7ffiYW8rtnBmEnk3T9FpmnyJlY1A8sdd3b1wQ07JGBDHfL1mdELw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@radix-ui/react-select': 1.2.2(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.6.10 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.79)(react@18.2.0) + '@storybook/client-logger': 8.0.8 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/theming': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.10 + '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.8 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' - - '@types/react-dom' dev: true - /@storybook/core-client@7.6.10: - resolution: {integrity: sha512-DjnzSzSNDmZyxyg6TxugzWQwOsW+n/iWVv6sHNEvEd5STr0mjuJjIEELmv58LIr5Lsre5+LEddqHsyuLyt8ubg==} + /@storybook/core-common@8.0.8: + resolution: {integrity: sha512-CL15M2oeQW+Rb1l7ciunLDI2Re+ojL2lX1ZFAiDedcOU+JHsdq43zAuXoZVzp8icUi2AUSwEjZIxGCSingj+JQ==} dependencies: - '@storybook/client-logger': 7.6.10 - '@storybook/preview-api': 7.6.10 - dev: true - - /@storybook/core-common@7.6.10: - resolution: {integrity: sha512-K3YWqjCKMnpvYsWNjOciwTH6zWbuuZzmOiipziZaVJ+sB1XYmH52Y3WGEm07TZI8AYK9DRgwA13dR/7W0nw72Q==} - dependencies: - '@storybook/core-events': 7.6.10 - '@storybook/node-logger': 7.6.10 - '@storybook/types': 7.6.10 - '@types/find-cache-dir': 3.2.1 - '@types/node': 18.18.6 - '@types/node-fetch': 2.6.10 - '@types/pretty-hrtime': 1.0.3 + '@storybook/core-events': 8.0.8 + '@storybook/csf-tools': 8.0.8 + '@storybook/node-logger': 8.0.8 + '@storybook/types': 8.0.8 + '@yarnpkg/fslib': 2.10.3 + '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 - esbuild: 0.18.20 - esbuild-register: 3.5.0(esbuild@0.18.20) + cross-spawn: 7.0.3 + esbuild: 0.20.2 + esbuild-register: 3.5.0(esbuild@0.20.2) + execa: 5.1.1 file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.1.1 - glob: 10.3.10 + fs-extra: 11.2.0 + glob: 10.3.12 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -5289,55 +4912,61 @@ packages: pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 + semver: 7.6.0 + tempy: 1.0.1 + tiny-invariant: 1.3.3 ts-dedent: 2.2.0 + util: 0.12.5 transitivePeerDependencies: - encoding - supports-color - /@storybook/core-events@7.6.10: - resolution: {integrity: sha512-yccDH67KoROrdZbRKwxgTswFMAco5nlCyxszCDASCLygGSV2Q2e+YuywrhchQl3U6joiWi3Ps1qWu56NeNafag==} + /@storybook/core-events@8.0.8: + resolution: {integrity: sha512-PtuvR7vS4glDEdCfKB4f1k3Vs1C3rTWP2DNbF+IjjPhNLMBznCdzTAPcz+NUIBvpjjGnhKwWikJ0yj931YjSVg==} dependencies: ts-dedent: 2.2.0 - /@storybook/core-server@7.6.10: - resolution: {integrity: sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw==} + /@storybook/core-server@8.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-tSEueEBttbSohzhZVN2bFNlFx3eoqQ7p57cjQLKXXwKygS2qKxISKnFy+Y0nj20APz68Wj51kx0rN0nGALeegw==} dependencies: '@aw-web-design/x-default-browser': 1.4.126 + '@babel/core': 7.24.4 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.6.10 - '@storybook/channels': 7.6.10 - '@storybook/core-common': 7.6.10 - '@storybook/core-events': 7.6.10 + '@storybook/builder-manager': 8.0.8 + '@storybook/channels': 8.0.8 + '@storybook/core-common': 8.0.8 + '@storybook/core-events': 8.0.8 '@storybook/csf': 0.1.2 - '@storybook/csf-tools': 7.6.10 - '@storybook/docs-mdx': 0.1.0 + '@storybook/csf-tools': 8.0.8 + '@storybook/docs-mdx': 3.0.0 '@storybook/global': 5.0.0 - '@storybook/manager': 7.6.10 - '@storybook/node-logger': 7.6.10 - '@storybook/preview-api': 7.6.10 - '@storybook/telemetry': 7.6.10 - '@storybook/types': 7.6.10 + '@storybook/manager': 8.0.8 + '@storybook/manager-api': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 8.0.8 + '@storybook/preview-api': 8.0.8 + '@storybook/telemetry': 8.0.8 + '@storybook/types': 8.0.8 '@types/detect-port': 1.3.5 - '@types/node': 18.18.6 + '@types/node': 18.19.18 '@types/pretty-hrtime': 1.0.3 - '@types/semver': 7.5.6 + '@types/semver': 7.5.8 better-opn: 3.0.2 chalk: 4.1.2 cli-table3: 0.6.3 compression: 1.7.4 detect-port: 1.5.1 express: 4.18.2 - fs-extra: 11.1.1 + fs-extra: 11.2.0 globby: 11.1.0 - ip: 2.0.0 + ip: 2.0.1 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 read-pkg-up: 7.0.1 - semver: 7.5.4 + semver: 7.6.0 telejson: 7.2.0 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util: 0.12.5 util-deprecate: 1.0.2 @@ -5346,30 +4975,32 @@ packages: transitivePeerDependencies: - bufferutil - encoding + - react + - react-dom - supports-color - utf-8-validate dev: false - /@storybook/csf-plugin@7.6.10: - resolution: {integrity: sha512-Sc+zZg/BnPH2X28tthNaQBnDiFfO0QmfjVoOx0fGYM9SvY3P5ehzWwp5hMRBim6a/twOTzePADtqYL+t6GMqqg==} + /@storybook/csf-plugin@8.0.8: + resolution: {integrity: sha512-x9WspjZGcqXENj/Vn4Qmn0oTW93KN2V9wqpflWwCUJTByl2MugQsh5xRuDbs2yM7dD6zKcqRyPaTY+GFZBW+Vg==} dependencies: - '@storybook/csf-tools': 7.6.10 + '@storybook/csf-tools': 8.0.8 unplugin: 1.6.0 transitivePeerDependencies: - supports-color dev: true - /@storybook/csf-tools@7.6.10: - resolution: {integrity: sha512-TnDNAwIALcN6SA4l00Cb67G02XMOrYU38bIpFJk5VMDX2dvgPjUtJNBuLmEbybGcOt7nPyyFIHzKcY5FCVGoWA==} + /@storybook/csf-tools@8.0.8: + resolution: {integrity: sha512-Ji5fpoGym/MSyHJ6ALghVUUecwhEbN0On+jOZ2VPkrkATi9UDtryHQPdF60HKR63Iv53xRuWRzudB6zm43RTzw==} dependencies: - '@babel/generator': 7.23.6 - '@babel/parser': 7.23.6 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/generator': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 '@storybook/csf': 0.1.2 - '@storybook/types': 7.6.10 - fs-extra: 11.1.1 - recast: 0.23.4 + '@storybook/types': 8.0.8 + fs-extra: 11.2.0 + recast: 0.23.6 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color @@ -5379,16 +5010,16 @@ packages: dependencies: type-fest: 2.19.0 - /@storybook/docs-mdx@0.1.0: - resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} + /@storybook/docs-mdx@3.0.0: + resolution: {integrity: sha512-NmiGXl2HU33zpwTv1XORe9XG9H+dRUC1Jl11u92L4xr062pZtrShLmD4VKIsOQujxhhOrbxpwhNOt+6TdhyIdQ==} dev: false - /@storybook/docs-tools@7.6.10: - resolution: {integrity: sha512-UgbikducoXzqQHf2TozO0f2rshaeBNnShVbL5Ai4oW7pDymBmrfzdjGbF/milO7yxNKcoIByeoNmu384eBamgQ==} + /@storybook/docs-tools@8.0.8: + resolution: {integrity: sha512-p/MIrDshXMl/fiCRlfG9StkRYI1QlUyUSQQ/YDBFlBfWcJYARIt3TIvQyvs3Q/apnQNcDXIW663W57s7WHTO2w==} dependencies: - '@storybook/core-common': 7.6.10 - '@storybook/preview-api': 7.6.10 - '@storybook/types': 7.6.10 + '@storybook/core-common': 8.0.8 + '@storybook/preview-api': 8.0.8 + '@storybook/types': 8.0.8 '@types/doctrine': 0.0.3 assert: 2.1.0 doctrine: 3.0.0 @@ -5401,29 +5032,40 @@ packages: /@storybook/global@5.0.0: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - /@storybook/instrumenter@7.6.10: - resolution: {integrity: sha512-9FYXW1CKXnZ7yYmy2A6U0seqJMe1F7g55J28Vslk3ZLoGATFJ2BR0eoQS+cgfBly6djehjaVeuV3IcUYGnQ/6Q==} + /@storybook/icons@1.2.9(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + /@storybook/instrumenter@8.0.8: + resolution: {integrity: sha512-bCu9Tu48WOQ8ZNUed+FCSMr3Uw81b4yW/knD2goqx15nD33B7xXBNSI2GTHH5YaEHVyIFFggQcKHLkELXWlsoA==} dependencies: - '@storybook/channels': 7.6.10 - '@storybook/client-logger': 7.6.10 - '@storybook/core-events': 7.6.10 + '@storybook/channels': 8.0.8 + '@storybook/client-logger': 8.0.8 + '@storybook/core-events': 8.0.8 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.6.10 - '@vitest/utils': 0.34.6 + '@storybook/preview-api': 8.0.8 + '@vitest/utils': 1.5.0 util: 0.12.5 dev: true - /@storybook/manager-api@7.6.10(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-8eGVpRlpunuFScDtc7nxpPJf/4kJBAAZlNdlhmX09j8M3voX6GpcxabBamSEX5pXZqhwxQCshD4IbqBmjvadlw==} + /@storybook/manager-api@8.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1HU4nfLRi0sD2uw229gb8EQyufNWrLvMNpg013kBsBXRd+Dj4dqF3v+KrYFNtteY7riC4mAJ6YcQ4tBUNYZDug==} dependencies: - '@storybook/channels': 7.6.10 - '@storybook/client-logger': 7.6.10 - '@storybook/core-events': 7.6.10 + '@storybook/channels': 8.0.8 + '@storybook/client-logger': 8.0.8 + '@storybook/core-events': 8.0.8 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/router': 7.6.10 - '@storybook/theming': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.10 + '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) + '@storybook/router': 8.0.8 + '@storybook/theming': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.8 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -5433,47 +5075,38 @@ packages: transitivePeerDependencies: - react - react-dom - dev: true - /@storybook/manager@7.6.10: - resolution: {integrity: sha512-Co3sLCbNYY6O4iH2ggmRDLCPWLj03JE5s/DOG8OVoXc6vBwTc/Qgiyrsxxp6BHQnPpM0mxL6aKAxE3UjsW/Nog==} + /@storybook/manager@8.0.8: + resolution: {integrity: sha512-pWYHSDmgT8p/XbQMKuDPdgB6KzjePI6dU5KQ5MERYfch1UiuGPVm1HHDlxxSfHW0IIXw9Qnwq4L0Awe4qhvJKQ==} dev: false - /@storybook/mdx2-csf@1.1.0: - resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} - dev: true - - /@storybook/node-logger@7.6.10: - resolution: {integrity: sha512-ZBuqrv4bjJzKXyfRGFkVIi+z6ekn6rOPoQao4KmsfLNQAUUsEdR8Baw/zMnnU417zw5dSEaZdpuwx75SCQAeOA==} - - /@storybook/postinstall@7.6.10: - resolution: {integrity: sha512-SMdXtednPCy3+SRJ7oN1OPN1oVFhj3ih+ChOEX8/kZ5J3nfmV3wLPtsZvFGUCf0KWQEP1xL+1Urv48mzMKcV/w==} - dev: true + /@storybook/node-logger@8.0.8: + resolution: {integrity: sha512-ymps3MMTxtMWq0eDiXk1iO7iv0Eg0PuUvOpPPohEJauGzU9THv81xx01aaHKSprFFJYD2LMQr1aFuUplItO12g==} - /@storybook/preview-api@7.6.10: - resolution: {integrity: sha512-5A3etoIwZCx05yuv3KSTv1wynN4SR4rrzaIs/CTBp3BC4q1RBL+Or/tClk0IJPXQMlx/4Y134GtNIBbkiDofpw==} + /@storybook/preview-api@8.0.8: + resolution: {integrity: sha512-khgw2mNiBrSZS3KNGQPzjneL3Csh3BOq0yLAtJpT7CRSrI/YjlE7jjcTkKzoxW+UCgvNTnLvsowcuzu82e69fA==} dependencies: - '@storybook/channels': 7.6.10 - '@storybook/client-logger': 7.6.10 - '@storybook/core-events': 7.6.10 + '@storybook/channels': 8.0.8 + '@storybook/client-logger': 8.0.8 + '@storybook/core-events': 8.0.8 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/types': 7.6.10 + '@storybook/types': 8.0.8 '@types/qs': 6.9.11 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.11.2 - synchronous-promise: 2.0.17 + tiny-invariant: 1.3.1 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - /@storybook/preview@7.6.10: - resolution: {integrity: sha512-F07BzVXTD3byq+KTWtvsw3pUu3fQbyiBNLFr2CnfU4XSdLKja5lDt8VqDQq70TayVQOf5qfUTzRd4M6pQkjw1w==} + /@storybook/preview@8.0.8: + resolution: {integrity: sha512-J/ooKcvDV1s7ROH7lF/0vOyWDOgDB7bN6vS67J1WK0HLvMGaqUzU+q3ndakGzu0LU/jvUBqEFSZd1ALWyZINDQ==} dev: true - /@storybook/react-dom-shim@7.6.10(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-M+N/h6ximacaFdIDjMN2waNoWwApeVYTpFeoDppiFTvdBTXChyIuiPgYX9QSg7gDz92OaA52myGOot4wGvXVzg==} + /@storybook/react-dom-shim@8.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vOMlAz2HH/xfgZmSO28fCEmp5/tPxINDEdBDVLdZeYG6R1j5jlMRyaNcXt4cPNDkyc///PkB/K767hg4goca/Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5482,24 +5115,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@5.1.4): - resolution: {integrity: sha512-YE2+J1wy8nO+c6Nv/hBMu91Edew3K184L1KSnfoZV8vtq2074k1Me/8pfe0QNuq631AncpfCYNb37yBAXQ/80w==} - engines: {node: '>=16'} + /@storybook/react-vite@8.0.8(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2)(vite@5.2.9): + resolution: {integrity: sha512-3xN+/KgcjEAKJ0cM8yFYk8+T59kgKSMlQaavoIgQudbEErSubr9l7jDWXH44afQIEBVs++ayYWrbEN2wyMGoug==} + engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^4.0.0 || ^5.0.0 dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.3.3)(vite@5.1.4) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.4.2)(vite@5.2.9) '@rollup/pluginutils': 5.1.0 - '@storybook/builder-vite': 7.6.10(typescript@5.3.3)(vite@5.1.4) - '@storybook/react': 7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) - '@vitejs/plugin-react': 3.1.0(vite@5.1.4) - magic-string: 0.30.3 + '@storybook/builder-vite': 8.0.8(typescript@5.4.2)(vite@5.2.9) + '@storybook/node-logger': 8.0.8 + '@storybook/react': 8.0.8(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2) + find-up: 5.0.0 + magic-string: 0.30.9 react: 18.2.0 react-docgen: 7.0.3 react-dom: 18.2.0(react@18.2.0) - vite: 5.1.4(@types/node@20.11.16) + resolve: 1.22.8 + tsconfig-paths: 4.2.0 + vite: 5.2.9(@types/node@20.11.16) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -5509,27 +5145,26 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@7.6.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3): - resolution: {integrity: sha512-wwBn1cg2uZWW4peqqBjjU7XGmFq8HdkVUtWwh6dpfgmlY1Aopi+vPgZt7pY9KkWcTOq5+DerMdSfwxukpc3ajQ==} - engines: {node: '>=16.0.0'} + /@storybook/react@8.0.8(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2): + resolution: {integrity: sha512-pPTlQntl09kv7qkAFYsxUq6qCLeeZC/K3yGFBGMy2Dc+PFjBYdT6mt2I8GB3twK0Cq5gJESlLj48QnYLQ/9PbA==} + engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' + typescript: '>= 4.2.x' peerDependenciesMeta: typescript: optional: true dependencies: - '@storybook/client-logger': 7.6.10 - '@storybook/core-client': 7.6.10 - '@storybook/docs-tools': 7.6.10 + '@storybook/client-logger': 8.0.8 + '@storybook/docs-tools': 8.0.8 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.6.10 - '@storybook/react-dom-shim': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.10 + '@storybook/preview-api': 8.0.8 + '@storybook/react-dom-shim': 8.0.8(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 8.0.8 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.18.6 + '@types/node': 18.19.18 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -5540,59 +5175,56 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) + semver: 7.6.0 ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 5.3.3 + typescript: 5.4.2 util-deprecate: 1.0.2 transitivePeerDependencies: - encoding - supports-color dev: true - /@storybook/router@7.6.10: - resolution: {integrity: sha512-G/H4Jn2+y8PDe8Zbq4DVxF/TPn0/goSItdILts39JENucHiuGBCjKjSWGBe1rkwKi1tUbB3yhxJVrLagxFEPpQ==} + /@storybook/router@8.0.8: + resolution: {integrity: sha512-wdFdNsEKweigU9VkGZtpb7GhBJLWzbABcwOuEy2h0d5m7egB97hy9BxhANdqkC+PbAHrabxC99Ca3wTj50MoDg==} dependencies: - '@storybook/client-logger': 7.6.10 + '@storybook/client-logger': 8.0.8 memoizerific: 1.11.3 qs: 6.11.2 - dev: true - /@storybook/telemetry@7.6.10: - resolution: {integrity: sha512-p3mOSUtIyy2tF1z6pQXxNh1JzYFcAm97nUgkwLzF07GfEdVAPM+ftRSLFbD93zVvLEkmLTlsTiiKaDvOY/lQWg==} + /@storybook/telemetry@8.0.8: + resolution: {integrity: sha512-Uvj4nN01vQgjXZYKF/GKTFE85//Qm4ZTlJxTFWid+oYWc8NpAyJvlsJkj/dsEn4cLrgnJx2e4xvnx0Umr2ck+A==} dependencies: - '@storybook/client-logger': 7.6.10 - '@storybook/core-common': 7.6.10 - '@storybook/csf-tools': 7.6.10 + '@storybook/client-logger': 8.0.8 + '@storybook/core-common': 8.0.8 + '@storybook/csf-tools': 8.0.8 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 - fs-extra: 11.1.1 + fs-extra: 11.2.0 read-pkg-up: 7.0.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@storybook/test-runner@0.16.0(@types/node@20.11.16)(ts-node@10.9.2): - resolution: {integrity: sha512-LDmNbKFoEDW/VS9o6KR8e1r5MnbCc5ZojUfi5yqLdq80gFD7BvilgKgV0lUh/xWHryzoy+Ids5LYgrPJZmU2dQ==} + /@storybook/test-runner@0.17.0(@types/node@20.11.16)(ts-node@10.9.2): + resolution: {integrity: sha512-4mt822j0VF1H/c0//OWSST9eWV0wboncJUQ+hBm5N4wmyuObvwsiMh4pmgXw8Y82wF7g1RIofjEQqAGLa7NjgQ==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true dependencies: '@babel/core': 7.23.7 '@babel/generator': 7.23.6 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 '@jest/types': 29.6.3 - '@storybook/core-common': 7.6.10 + '@storybook/core-common': 8.0.8 '@storybook/csf': 0.1.2 - '@storybook/csf-tools': 7.6.10 - '@storybook/preview-api': 7.6.10 + '@storybook/csf-tools': 8.0.8 + '@storybook/preview-api': 8.0.8 '@swc/core': 1.3.105 '@swc/jest': 0.2.31(@swc/core@1.3.105) - can-bind-to-host: 1.1.2 - commander: 9.5.0 expect-playwright: 0.8.0 - glob: 10.3.10 jest: 29.7.0(@types/node@20.11.16)(ts-node@10.9.2) jest-circus: 29.7.0 jest-environment-node: 29.7.0 @@ -5601,11 +5233,7 @@ packages: jest-runner: 29.7.0 jest-serializer-html: 7.1.0 jest-watch-typeahead: 2.2.2(jest@29.7.0) - node-fetch: 2.7.0 - playwright: 1.41.1 - read-pkg-up: 7.0.1 - tempy: 1.0.1 - ts-dedent: 2.2.0 + playwright: 1.43.1 transitivePeerDependencies: - '@swc/helpers' - '@types/node' @@ -5617,47 +5245,50 @@ packages: - ts-node dev: true - /@storybook/test@7.6.10(jest@29.7.0)(vitest@0.34.6): - resolution: {integrity: sha512-dn/T+HcWOBlVh3c74BHurp++BaqBoQgNbSIaXlYDpJoZ+DzNIoEQVsWFYm5gCbtKK27iFd4n52RiQI3f6Vblqw==} + /@storybook/test@8.0.8(jest@29.7.0)(vitest@0.34.6): + resolution: {integrity: sha512-YXgwgg1e8ggDg2BlgeExwdN3MjeExnDvybQIUugADgun87tRIujJFCdjh0PAxg0Qvln6+lU3w+3Y2aryvX42RA==} dependencies: - '@storybook/client-logger': 7.6.10 - '@storybook/core-events': 7.6.10 - '@storybook/instrumenter': 7.6.10 - '@storybook/preview-api': 7.6.10 + '@storybook/client-logger': 8.0.8 + '@storybook/core-events': 8.0.8 + '@storybook/instrumenter': 8.0.8 + '@storybook/preview-api': 8.0.8 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.2.0(jest@29.7.0)(vitest@0.34.6) - '@testing-library/user-event': 14.3.0(@testing-library/dom@9.3.4) - '@types/chai': 4.3.5 - '@vitest/expect': 0.34.6 - '@vitest/spy': 0.34.6 - chai: 4.3.10 + '@testing-library/jest-dom': 6.4.2(jest@29.7.0)(vitest@0.34.6) + '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) + '@vitest/expect': 1.3.1 + '@vitest/spy': 1.5.0 + chai: 4.4.1 util: 0.12.5 transitivePeerDependencies: - '@jest/globals' + - '@types/bun' - '@types/jest' - jest - vitest dev: true - /@storybook/theming@7.6.10(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-f5tuy7yV3TOP3fIboSqpgLHy0wKayAw/M8HxX0jVET4Z4fWlFK0BiHJabQ+XEdAfQM97XhPFHB2IPbwsqhCEcQ==} + /@storybook/theming@8.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-43hkNz7yo8Bl97AO2WbxIGprUqMhUZyK9g8383bd30gSxy9nfND/bdSdcgmA8IokDn8qp37Q4QmxtUZdhjMzZQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@storybook/client-logger': 7.6.10 + '@storybook/client-logger': 8.0.8 '@storybook/global': 5.0.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/types@7.6.10: - resolution: {integrity: sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ==} + /@storybook/types@8.0.8: + resolution: {integrity: sha512-NGsgCsXnWlaZmHenHDgHGs21zhweZACkqTNsEQ7hvsiF08QeiKAdgJLQg3YeGK73h9mFDRP9djprUtJYab6vnQ==} dependencies: - '@storybook/channels': 7.6.10 - '@types/babel__core': 7.20.5 + '@storybook/channels': 8.0.8 '@types/express': 4.17.21 file-system-cache: 2.3.0 @@ -5795,11 +5426,25 @@ packages: resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} dev: true + /@testing-library/dom@10.0.0: + resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} + engines: {node: '>=18'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.8 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/dom@9.3.4: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@babel/runtime': 7.23.8 '@types/aria-query': 5.0.4 aria-query: 5.1.3 @@ -5809,17 +5454,20 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.2.0(jest@29.7.0)(vitest@0.34.6): - resolution: {integrity: sha512-+BVQlJ9cmEn5RDMUS8c2+TU6giLvzaHZ8sU/x0Jj7fk+6/46wPdwlgOPcpxS17CjcanBi/3VmGMqVr2rmbUmNw==} + /@testing-library/jest-dom@6.4.2(jest@29.7.0)(vitest@0.34.6): + resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: '@jest/globals': '>= 28' + '@types/bun': latest '@types/jest': '>= 28' jest: '>= 28' vitest: '>= 0.32' peerDependenciesMeta: '@jest/globals': optional: true + '@types/bun': + optional: true '@types/jest': optional: true jest: @@ -5839,22 +5487,22 @@ packages: vitest: 0.34.6(@vitest/ui@1.2.2) dev: true - /@testing-library/react@14.1.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==} - engines: {node: '>=14'} + /@testing-library/react@15.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5mzIpuytB1ctpyywvyaY2TAAUQVCZIGqwiqFQf6u9lvj/SJQepGUzNV18Xpk+NLCaCE2j7CWrZE0tEf9xLZYiQ==} + engines: {node: '>=18'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.23.8 - '@testing-library/dom': 9.3.4 + '@testing-library/dom': 10.0.0 '@types/react-dom': 18.2.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@testing-library/user-event@14.3.0(@testing-library/dom@9.3.4): - resolution: {integrity: sha512-P02xtBBa8yMaLhK8CzJCIns8rqwnF6FxhR9zs810flHOBXUYCFjLd8Io1rQrAkQRWEmW2PGdZIEdMxf/KLsqFA==} + /@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4): + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' @@ -5894,7 +5542,7 @@ packages: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 '@types/babel__generator': 7.6.5 '@types/babel__template': 7.4.2 '@types/babel__traverse': 7.20.2 @@ -5970,7 +5618,6 @@ packages: /@types/emscripten@1.39.10: resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} - dev: false /@types/escodegen@0.0.6: resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} @@ -6005,6 +5652,7 @@ packages: /@types/find-cache-dir@3.2.1: resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} + dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -6029,7 +5677,6 @@ packages: resolution: {integrity: sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw==} dependencies: '@types/unist': 3.0.1 - dev: false /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} @@ -6075,10 +5722,6 @@ packages: resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} dev: true - /@types/mime-types@2.1.4: - resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} - dev: false - /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -6111,24 +5754,14 @@ packages: '@types/unist': 2.0.9 dev: false - /@types/node-fetch@2.6.10: - resolution: {integrity: sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==} - dependencies: - '@types/node': 20.11.16 - form-data: 4.0.0 - /@types/node@14.18.63: resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} dev: true - /@types/node@18.18.6: - resolution: {integrity: sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==} - /@types/node@18.19.18: resolution: {integrity: sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==} dependencies: undici-types: 5.26.5 - dev: false /@types/node@20.11.16: resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} @@ -6143,13 +5776,18 @@ packages: /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: false /@types/pretty-hrtime@1.0.3: resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} + dev: false /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + /@types/qs@6.9.11: resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} @@ -6159,7 +5797,7 @@ packages: /@types/react-dom@18.2.14: resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.79 /@types/react@18.2.37: resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} @@ -6168,18 +5806,17 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.2 - /@types/react@18.2.48: - resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==} + /@types/react@18.2.62: + resolution: {integrity: sha512-l3f57BbaEKP0xcFzf+5qRG8/PXykZiuVM6eEoPtqBPCp6dxO3HhDkLIgIyXPhPKNAeXn3KO2pEaNgzaEo/asaw==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.3 csstype: 3.1.2 - /@types/react@18.2.62: - resolution: {integrity: sha512-l3f57BbaEKP0xcFzf+5qRG8/PXykZiuVM6eEoPtqBPCp6dxO3HhDkLIgIyXPhPKNAeXn3KO2pEaNgzaEo/asaw==} + /@types/react@18.2.79: + resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.3 + '@types/prop-types': 15.7.12 csstype: 3.1.2 /@types/resolve@1.20.6: @@ -6189,8 +5826,8 @@ packages: /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -6217,10 +5854,10 @@ packages: /@types/unist@2.0.9: resolution: {integrity: sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==} + dev: false /@types/unist@3.0.1: resolution: {integrity: sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==} - dev: false /@types/uuid@9.0.7: resolution: {integrity: sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==} @@ -6247,12 +5884,6 @@ packages: resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} dev: true - /@types/yargs@16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.1 - dev: true - /@types/yargs@17.0.26: resolution: {integrity: sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==} dependencies: @@ -6271,143 +5902,143 @@ packages: resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} dev: false - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.56.0)(typescript@5.4.2): + resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.19.1 - '@typescript-eslint/type-utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.1 + '@typescript-eslint/parser': 7.7.0(eslint@8.56.0)(typescript@5.4.2) + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/type-utils': 7.7.0(eslint@8.56.0)(typescript@5.4.2) + '@typescript-eslint/utils': 7.7.0(eslint@8.56.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@7.7.0(eslint@8.56.0)(typescript@5.4.2): + resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.1 - '@typescript-eslint/types': 6.19.1 - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.1 + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4 eslint: 8.56.0 - typescript: 5.3.3 + typescript: 5.4.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.19.1: - resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/scope-manager@7.7.0: + resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 6.19.1 - '@typescript-eslint/visitor-keys': 6.19.1 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 dev: true - /@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@7.7.0(eslint@8.56.0)(typescript@5.4.2): + resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.2) + '@typescript-eslint/utils': 7.7.0(eslint@8.56.0)(typescript@5.4.2) debug: 4.3.4 eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.19.1: - resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/types@7.7.0: + resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@6.19.1(typescript@5.3.3): - resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.2): + resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.1 - '@typescript-eslint/visitor-keys': 6.19.1 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@7.7.0(eslint@8.56.0)(typescript@5.4.2): + resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.19.1 - '@typescript-eslint/types': 6.19.1 - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.2) eslint: 8.56.0 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.19.1: - resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/visitor-keys@7.7.0: + resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/types': 7.7.0 eslint-visitor-keys: 3.4.3 dev: true /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@uswds/uswds@3.7.1: - resolution: {integrity: sha512-32u2S50bf5dwIujebqL+f1Jgx2rmRrpxcaccSZzdo3Qv9HaDUdcmeavlrxHqN30edHc7p8kRPjvjevOmOJKB7w==} + /@uswds/uswds@3.8.0: + resolution: {integrity: sha512-rMwCXe/u4HGkfskvS1Iuabapi/EXku3ChaIFW7y/dUhc7R1TXQhbbfp8YXEjmXPF0yqJnv9T08WPgS0fQqWZ8w==} engines: {node: '>= 4'} dependencies: classlist-polyfill: 1.2.0 @@ -6416,23 +6047,7 @@ packages: resolve-id-refs: 0.1.0 dev: false - /@vitejs/plugin-react@3.1.0(vite@5.1.4): - resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.1.0-beta.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) - magic-string: 0.27.0 - react-refresh: 0.14.0 - vite: 5.1.4(@types/node@20.11.16) - transitivePeerDependencies: - - supports-color - dev: true - - /@vitejs/plugin-react@4.2.1(vite@5.1.4): + /@vitejs/plugin-react@4.2.1(vite@5.2.9): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6443,7 +6058,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.4(@types/node@20.11.16) + vite: 5.2.9(@types/node@20.11.16) transitivePeerDependencies: - supports-color @@ -6513,6 +6128,14 @@ packages: chai: 4.3.10 dev: true + /@vitest/expect@1.3.1: + resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + dependencies: + '@vitest/spy': 1.3.1 + '@vitest/utils': 1.3.1 + chai: 4.4.1 + dev: true + /@vitest/runner@0.34.6: resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} dependencies: @@ -6535,6 +6158,18 @@ packages: tinyspy: 2.2.0 dev: true + /@vitest/spy@1.3.1: + resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/spy@1.5.0: + resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} + dependencies: + tinyspy: 2.2.0 + dev: true + /@vitest/ui@1.2.2(vitest@0.34.6): resolution: {integrity: sha512-CG+5fa8lyoBr+9i+UZGS31Qw81v33QlD10uecHxN2CLJVN+jLnqx4pGzGvFFeJ7jSnUCT0AlbmVWY6fU6NJZmw==} peerDependencies: @@ -6567,14 +6202,32 @@ packages: pretty-format: 29.7.0 dev: true - /@volar/kit@1.11.1(typescript@5.3.3): + /@vitest/utils@1.3.1: + resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@vitest/utils@1.5.0: + resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@volar/kit@1.11.1(typescript@5.4.2): resolution: {integrity: sha512-nqO+Hl9f1ygOK/3M7Hpnw0lhKvuMFhh823nilStpkTmm5WfrUnE+4WaQkb3dC6LM3TZq74j2m88yxRC+Z3sZZw==} peerDependencies: typescript: '*' dependencies: '@volar/language-service': 1.11.1 typesafe-path: 0.2.2 - typescript: 5.3.3 + typescript: 5.4.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: true @@ -6706,7 +6359,7 @@ packages: /@vue/compiler-core@3.4.14: resolution: {integrity: sha512-ro4Zzl/MPdWs7XwxT7omHRxAjMbDFRZEEjD+2m3NBf8YzAe3HuoSEZosXQo+m1GQ1G3LQ1LdmNh1RKTYe+ssEg==} dependencies: - '@babel/parser': 7.23.6 + '@babel/parser': 7.24.0 '@vue/shared': 3.4.14 entities: 4.5.0 estree-walker: 2.0.2 @@ -6720,7 +6373,7 @@ packages: '@vue/shared': 3.4.14 dev: true - /@vue/language-core@1.8.27(typescript@5.3.3): + /@vue/language-core@1.8.27(typescript@5.4.2): resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} peerDependencies: typescript: '*' @@ -6736,7 +6389,7 @@ packages: minimatch: 9.0.3 muggle-string: 0.3.1 path-browserify: 1.0.1 - typescript: 5.3.3 + typescript: 5.4.2 vue-template-compiler: 2.7.16 dev: true @@ -6749,13 +6402,13 @@ packages: engines: {node: '>=10.0.0'} dev: false - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20): + /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.20.2): resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} engines: {node: '>=14.15.0'} peerDependencies: esbuild: '>=0.10.0' dependencies: - esbuild: 0.18.20 + esbuild: 0.20.2 tslib: 2.5.0 dev: false @@ -6765,7 +6418,6 @@ packages: dependencies: '@yarnpkg/libzip': 2.3.0 tslib: 1.14.1 - dev: false /@yarnpkg/libzip@2.3.0: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} @@ -6773,7 +6425,6 @@ packages: dependencies: '@types/emscripten': 1.39.10 tslib: 1.14.1 - dev: false /@zkochan/which@2.0.3: resolution: {integrity: sha512-C1ReN7vt2/2O0fyTsx5xnbQuxBrmG5NMSbcIkPKCCfCTJgpZBsuRYzFXHj3nVq8vTfK7vxHUmzfCpSHgO7j4rg==} @@ -6843,11 +6494,6 @@ packages: engines: {node: '>= 10.0.0'} dev: false - /agent-base@5.1.1: - resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} - engines: {node: '>= 6.0.0'} - dev: false - /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -7110,13 +6756,6 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} - engines: {node: '>=10'} - dependencies: - tslib: 2.5.0 - dev: true - /aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: @@ -7168,6 +6807,14 @@ packages: call-bind: 1.0.5 is-array-buffer: 3.0.2 + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + /array-each@1.0.1: resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==} engines: {node: '>=0.10.0'} @@ -7229,6 +6876,18 @@ packages: engines: {node: '>=0.10.0'} dev: true + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -7249,14 +6908,23 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + dev: true + + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 dev: true /arraybuffer.prototype.slice@1.0.2: @@ -7271,6 +6939,20 @@ packages: is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + /as-table@1.0.55: resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} dependencies: @@ -7280,11 +6962,12 @@ packages: /assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-nan: 1.3.2 object-is: 1.1.5 - object.assign: 4.1.4 + object.assign: 4.1.5 util: 0.12.5 + dev: true /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -7306,7 +6989,7 @@ packages: engines: {node: '>=8'} dev: false - /astro@4.3.3(@types/node@20.11.16)(typescript@5.3.3): + /astro@4.3.3(@types/node@20.11.16)(typescript@5.4.2): resolution: {integrity: sha512-8Vfcv8LuCfzkLj+NMk7i7pu5o0MPyDkYqUYWELSwKxWf85zJSNU4oLg4DlEZWbVpm5LeTfVrpSGrZGy5n4grBg==} engines: {node: '>=18.14.1', npm: '>=6.14.0'} hasBin: true @@ -7367,7 +7050,7 @@ packages: shikiji: 0.9.19 string-width: 7.1.0 strip-ansi: 7.1.0 - tsconfck: 3.0.0(typescript@5.3.3) + tsconfck: 3.0.0(typescript@5.4.2) unist-util-visit: 5.0.0 vfile: 6.0.1 vite: 5.1.4(@types/node@20.11.16) @@ -7565,13 +7248,18 @@ packages: stream-exhaust: 1.0.2 dev: true - /async-each@1.0.6: - resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} + /async-done@2.0.0: + resolution: {integrity: sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==} + engines: {node: '>= 10.13.0'} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + stream-exhaust: 1.0.2 dev: true - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: false + /async-each@1.0.6: + resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} + dev: true /async-settle@1.0.0: resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==} @@ -7580,6 +7268,13 @@ packages: async-done: 1.3.2 dev: true + /async-settle@2.0.0: + resolution: {integrity: sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==} + engines: {node: '>= 10.13.0'} + dependencies: + async-done: 2.0.0 + dev: true + /async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: @@ -7590,14 +7285,9 @@ packages: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: false - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} @@ -7635,6 +7325,12 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + /axe-core@4.8.3: resolution: {integrity: sha512-d5ZQHPSPkF9Tw+yfyDcRoUOc4g/8UloJJe5J8m4L5+c7AtDdjDLRxew/knnI4CxvtdxEUVgWz4x3OIQUIFiMfw==} engines: {node: '>=4'} @@ -7661,12 +7357,12 @@ packages: requiresBuild: true dev: false - /babel-core@7.0.0-bridge.0(@babel/core@7.23.7): + /babel-core@7.0.0-bridge.0(@babel/core@7.24.4): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.24.4 dev: false /babel-jest@29.7.0(@babel/core@7.23.0): @@ -7705,43 +7401,43 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.2 dev: true - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.24.4): resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.24.4) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.24.4): resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.24.4) core-js-compat: 3.35.0 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.24.4): resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.24.4) transitivePeerDependencies: - supports-color dev: false @@ -7766,6 +7462,26 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) dev: true + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.7): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + dev: true + /babel-preset-jest@29.6.3(@babel/core@7.23.0): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7792,6 +7508,15 @@ packages: now-and-later: 2.0.1 dev: true + /bach@2.0.1: + resolution: {integrity: sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==} + engines: {node: '>=10.13.0'} + dependencies: + async-done: 2.0.0 + async-settle: 2.0.0 + now-and-later: 3.0.0 + dev: true + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: false @@ -7805,7 +7530,6 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} @@ -7887,7 +7611,6 @@ packages: buffer: 6.0.3 inherits: 2.0.4 readable-stream: 3.6.2 - dev: false /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -8061,7 +7784,6 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false /bundle-require@4.0.1(esbuild@0.19.12): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} @@ -8138,6 +7860,16 @@ packages: get-intrinsic: 1.2.2 set-function-length: 1.2.0 + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -8170,11 +7902,6 @@ packages: engines: {node: '>=14.16'} dev: false - /can-bind-to-host@1.1.2: - resolution: {integrity: sha512-CqsgmaqiyFRNtP17Ihqa/uHbZxRirntNVNl/kJz31DLKuNRfzvzionkLoUSkElQ6Cz+cpXKA3mhHq4tjbieujA==} - hasBin: true - dev: true - /can-write-to-dir@1.1.1: resolution: {integrity: sha512-eOgiEWqjppB+3DN/5E82EQ8dTINus8d9GXMCbEsUnp2hcUIcXmBvzWmD3tXMk3CuBK0v+ddK9qw0EAF+JVRMjQ==} engines: {node: '>=10.13'} @@ -8282,6 +8009,19 @@ packages: type-detect: 4.0.8 dev: true + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -8412,7 +8152,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: false /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -8691,16 +8430,12 @@ packages: dev: false optional: true - /colors@1.2.5: - resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} - engines: {node: '>=0.1.90'} - dev: true - /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: true /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -8735,6 +8470,7 @@ packages: engines: {node: ^12.20.0 || >=14} requiresBuild: true dev: true + optional: true /common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -8824,6 +8560,7 @@ packages: inherits: 2.0.4 readable-stream: 2.3.8 typedarray: 0.0.6 + dev: true /concurrently@8.2.2: resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} @@ -8909,6 +8646,14 @@ packages: is-plain-object: 5.0.0 dev: true + /copy-props@4.0.0: + resolution: {integrity: sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==} + engines: {node: '>= 10.13.0'} + dependencies: + each-props: 3.0.0 + is-plain-object: 5.0.0 + dev: true + /core-js-compat@3.35.0: resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} dependencies: @@ -9103,6 +8848,33 @@ packages: whatwg-url: 14.0.0 dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -9286,6 +9058,14 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.1 + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -9341,6 +9121,7 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dev: true /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} @@ -9391,10 +9172,6 @@ packages: engines: {node: '>=8'} dev: true - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true - /detect-package-manager@2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} engines: {node: '>=12'} @@ -9547,7 +9324,7 @@ packages: dependencies: semver: 7.6.0 shelljs: 0.8.5 - typescript: 5.5.0-dev.20240402 + typescript: 5.5.0-dev.20240416 dev: false /dset@3.1.3: @@ -9570,6 +9347,14 @@ packages: object.defaults: 1.1.0 dev: true + /each-props@3.0.0: + resolution: {integrity: sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==} + engines: {node: '>= 10.13.0'} + dependencies: + is-plain-object: 5.0.0 + object.defaults: 1.1.0 + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -9703,6 +9488,68 @@ packages: unbox-primitive: 1.0.2 which-typed-array: 1.1.13 + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: @@ -9716,23 +9563,24 @@ packages: isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + /es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.5 + internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.1.2 dev: true /es-module-lexer@0.9.3: @@ -9743,6 +9591,13 @@ packages: resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} dev: false + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} @@ -9751,6 +9606,15 @@ packages: has-tostringtag: 1.0.0 hasown: 2.0.0 + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: @@ -9807,45 +9671,16 @@ packages: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} dev: false - /esbuild-register@3.5.0(esbuild@0.18.20): + /esbuild-register@3.5.0(esbuild@0.20.2): resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} peerDependencies: esbuild: '>=0.12 <1' dependencies: debug: 4.3.4 - esbuild: 0.18.20 + esbuild: 0.20.2 transitivePeerDependencies: - supports-color - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} @@ -9876,35 +9711,35 @@ packages: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - /esbuild@0.19.5: - resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.19.5 - '@esbuild/android-arm64': 0.19.5 - '@esbuild/android-x64': 0.19.5 - '@esbuild/darwin-arm64': 0.19.5 - '@esbuild/darwin-x64': 0.19.5 - '@esbuild/freebsd-arm64': 0.19.5 - '@esbuild/freebsd-x64': 0.19.5 - '@esbuild/linux-arm': 0.19.5 - '@esbuild/linux-arm64': 0.19.5 - '@esbuild/linux-ia32': 0.19.5 - '@esbuild/linux-loong64': 0.19.5 - '@esbuild/linux-mips64el': 0.19.5 - '@esbuild/linux-ppc64': 0.19.5 - '@esbuild/linux-riscv64': 0.19.5 - '@esbuild/linux-s390x': 0.19.5 - '@esbuild/linux-x64': 0.19.5 - '@esbuild/netbsd-x64': 0.19.5 - '@esbuild/openbsd-x64': 0.19.5 - '@esbuild/sunos-x64': 0.19.5 - '@esbuild/win32-arm64': 0.19.5 - '@esbuild/win32-ia32': 0.19.5 - '@esbuild/win32-x64': 0.19.5 - dev: true + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -9942,17 +9777,19 @@ packages: source-map: 0.6.1 dev: true - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.34.1(eslint@8.56.0): + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.7 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 + es-iterator-helpers: 1.0.18 eslint: 8.56.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -10010,7 +9847,7 @@ packages: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -10267,18 +10104,6 @@ packages: - supports-color dev: true - /extract-zip@1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true - dependencies: - concat-stream: 1.6.2 - debug: 2.6.9 - mkdirp: 0.5.6 - yauzl: 2.10.0 - transitivePeerDependencies: - - supports-color - dev: false - /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -10309,7 +10134,6 @@ packages: /fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} requiresBuild: true - dev: false /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} @@ -10344,10 +10168,21 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + dependencies: + fastest-levenshtein: 1.0.16 + dev: true + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: false + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -10538,6 +10373,16 @@ packages: - supports-color dev: true + /findup-sync@5.0.0: + resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} + engines: {node: '>= 10.13.0'} + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.5 + resolve-dir: 1.0.1 + dev: true + /fined@1.2.0: resolution: {integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==} engines: {node: '>= 0.10'} @@ -10549,11 +10394,27 @@ packages: parse-filepath: 1.0.2 dev: true + /fined@2.0.0: + resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==} + engines: {node: '>= 10.13.0'} + dependencies: + expand-tilde: 2.0.2 + is-plain-object: 5.0.0 + object.defaults: 1.1.0 + object.pick: 1.3.0 + parse-filepath: 1.0.2 + dev: true + /flagged-respawn@1.0.1: resolution: {integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==} engines: {node: '>= 0.10'} dev: true + /flagged-respawn@2.0.0: + resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} + engines: {node: '>= 10.13.0'} + dev: true + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -10631,6 +10492,7 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -10689,7 +10551,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - dev: false /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} @@ -10734,6 +10595,14 @@ packages: through2: 2.0.5 dev: true + /fs-mkdirp-stream@2.0.1: + resolution: {integrity: sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + streamx: 2.15.1 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -10808,10 +10677,15 @@ packages: has-symbols: 1.0.3 hasown: 2.0.0 - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - dev: true + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.0 /get-npm-tarball-url@2.1.0: resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} @@ -10823,11 +10697,6 @@ packages: engines: {node: '>=8.0.0'} dev: true - /get-port@5.1.1: - resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} - engines: {node: '>=8'} - dev: false - /get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} dependencies: @@ -10858,6 +10727,15 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -10882,13 +10760,8 @@ packages: requiresBuild: true dev: false - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: true - /github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: false /glob-parent@3.1.0: resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} @@ -10936,6 +10809,20 @@ packages: unique-stream: 2.3.1 dev: true + /glob-stream@8.0.2: + resolution: {integrity: sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==} + engines: {node: '>=10.13.0'} + dependencies: + '@gulpjs/to-absolute-glob': 4.0.0 + anymatch: 3.1.3 + fastq: 1.15.0 + glob-parent: 6.0.2 + is-glob: 4.0.3 + is-negated-glob: 1.0.0 + normalize-path: 3.0.0 + streamx: 2.15.1 + dev: true + /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false @@ -10955,6 +10842,14 @@ packages: - supports-color dev: true + /glob-watcher@6.0.0: + resolution: {integrity: sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==} + engines: {node: '>= 10.13.0'} + dependencies: + async-done: 2.0.0 + chokidar: 3.6.0 + dev: true + /glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} @@ -10965,6 +10860,18 @@ packages: minimatch: 9.0.3 minipass: 7.0.4 path-scurry: 1.10.1 + dev: false + + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.2 /glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} @@ -11071,6 +10978,13 @@ packages: sparkles: 1.0.1 dev: true + /glogg@2.2.0: + resolution: {integrity: sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==} + engines: {node: '>= 10.13.0'} + dependencies: + sparkles: 2.1.0 + dev: true + /google-protobuf@3.21.2: resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} dev: true @@ -11149,6 +11063,25 @@ packages: - supports-color dev: true + /gulp-cli@3.0.0: + resolution: {integrity: sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@gulpjs/messages': 1.1.0 + chalk: 4.1.2 + copy-props: 4.0.0 + gulplog: 2.2.0 + interpret: 3.1.1 + liftoff: 5.0.0 + mute-stdout: 2.0.0 + replace-homedir: 2.0.0 + semver-greatest-satisfied-range: 2.0.0 + string-width: 4.2.3 + v8flags: 4.0.1 + yargs: 16.2.0 + dev: true + /gulp-postcss@9.0.1(postcss@8.4.19)(ts-node@10.9.2): resolution: {integrity: sha512-9QUHam5JyXwGUxaaMvoFQVT44tohpEFpM8xBdPfdwTYGM0AItS1iTQz0MpsF8Jroh7GF5Jt2GVPaYgvy8qD2Fw==} engines: {node: ^10 || ^12 || >=14} @@ -11234,6 +11167,17 @@ packages: - supports-color dev: true + /gulp@5.0.0: + resolution: {integrity: sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + glob-watcher: 6.0.0 + gulp-cli: 3.0.0 + undertaker: 2.0.0 + vinyl-fs: 4.0.0 + dev: true + /gulplog@1.0.0: resolution: {integrity: sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==} engines: {node: '>= 0.10'} @@ -11241,6 +11185,13 @@ packages: glogg: 1.0.2 dev: true + /gulplog@2.2.0: + resolution: {integrity: sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==} + engines: {node: '>= 10.13.0'} + dependencies: + glogg: 2.2.0 + dev: true + /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -11281,10 +11232,19 @@ packages: dependencies: get-intrinsic: 1.2.2 + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -11295,6 +11255,12 @@ packages: dependencies: has-symbols: 1.0.3 + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} @@ -11346,6 +11312,13 @@ packages: dependencies: function-bind: 1.1.2 + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /hast-util-from-html@2.0.1: resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} dependencies: @@ -11370,6 +11343,18 @@ packages: web-namespaces: 2.0.1 dev: false + /hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + dependencies: + '@types/hast': 3.0.2 + dev: true + + /hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + dependencies: + '@types/hast': 3.0.2 + dev: true + /hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: @@ -11423,6 +11408,12 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-to-string@3.0.0: + resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} + dependencies: + '@types/hast': 3.0.2 + dev: true + /hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: @@ -11563,16 +11554,6 @@ packages: - supports-color dev: true - /https-proxy-agent@4.0.0: - resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} - engines: {node: '>= 6.0.0'} - dependencies: - agent-base: 5.1.1 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -11617,12 +11598,16 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + /immutable@4.3.4: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} dev: true @@ -11792,14 +11777,22 @@ packages: has: 1.0.3 side-channel: 1.0.4 + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 + /interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} dev: true /invert-kv@1.0.0: @@ -11807,17 +11800,17 @@ packages: engines: {node: '>=0.10.0'} dev: true - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + /ip@2.0.1: + resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} dev: false /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - /is-absolute-url@3.0.3: - resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} - engines: {node: '>=8'} + /is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-absolute@1.0.0: @@ -11856,6 +11849,14 @@ packages: get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -11936,6 +11937,13 @@ packages: kind-of: 6.0.3 dev: true + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -11994,7 +12002,7 @@ packages: /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-fullwidth-code-point@1.0.0: @@ -12062,8 +12070,9 @@ packages: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 + dev: true /is-negated-glob@1.0.0: resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} @@ -12074,6 +12083,11 @@ packages: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -12155,6 +12169,13 @@ packages: dependencies: call-bind: 1.0.5 + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -12189,6 +12210,12 @@ packages: dependencies: which-typed-array: 1.1.13 + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true @@ -12316,7 +12343,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.23.7 - '@babel/parser': 7.23.6 + '@babel/parser': 7.24.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -12329,10 +12356,10 @@ packages: engines: {node: '>=10'} dependencies: '@babel/core': 7.23.7 - '@babel/parser': 7.23.6 + '@babel/parser': 7.24.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -12397,7 +12424,7 @@ packages: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 @@ -12705,14 +12732,6 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.11.16 - dev: true - /jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -12737,7 +12756,7 @@ packages: jest-process-manager: 0.4.0 jest-runner: 29.7.0 nyc: 15.1.0 - playwright-core: 1.41.1 + playwright-core: 1.43.1 rimraf: 3.0.2 uuid: 8.3.2 transitivePeerDependencies: @@ -12874,15 +12893,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.23.7 '@babel/generator': 7.23.0 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.7) '@babel/types': 7.23.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -12893,7 +12912,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.0 transitivePeerDependencies: - supports-color dev: true @@ -13048,25 +13067,25 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/core': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) - '@babel/preset-env': 7.23.8(@babel/core@7.23.7) - '@babel/preset-flow': 7.23.3(@babel/core@7.23.7) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.7) - '@babel/register': 7.23.7(@babel/core@7.23.7) - babel-core: 7.0.0-bridge.0(@babel/core@7.23.7) + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.4) + '@babel/preset-env': 7.23.8(@babel/core@7.24.4) + '@babel/preset-flow': 7.23.3(@babel/core@7.24.4) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.4) + '@babel/register': 7.23.7(@babel/core@7.24.4) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.4) chalk: 4.1.2 flow-parser: 0.226.0 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 node-dir: 0.1.17 - recast: 0.23.4 + recast: 0.23.6 temp: 0.8.4 write-file-atomic: 2.4.3 transitivePeerDependencies: @@ -13165,7 +13184,7 @@ packages: commonmark: 0.30.0 fast-glob: 3.3.2 jsii: 1.95.0 - semver: 7.5.4 + semver: 7.6.0 semver-intersect: 1.4.0 stream-json: 1.8.0 typescript: 3.9.10 @@ -13222,7 +13241,7 @@ packages: fast-deep-equal: 3.1.3 fs-extra: 10.1.0 log4js: 6.9.1 - semver: 7.5.4 + semver: 7.6.0 semver-intersect: 1.4.0 sort-json: 2.0.1 spdx-license-list: 6.9.0 @@ -13386,6 +13405,11 @@ packages: es6-weak-map: 2.0.3 dev: true + /last-run@2.0.0: + resolution: {integrity: sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==} + engines: {node: '>= 10.13.0'} + dev: true + /lazy-universal-dotenv@4.0.0: resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} engines: {node: '>=14.0.0'} @@ -13414,6 +13438,11 @@ packages: flush-write-stream: 1.1.1 dev: true + /lead@4.0.0: + resolution: {integrity: sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==} + engines: {node: '>=10.13.0'} + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -13442,6 +13471,19 @@ packages: - supports-color dev: true + /liftoff@5.0.0: + resolution: {integrity: sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==} + engines: {node: '>=10.13.0'} + dependencies: + extend: 3.0.2 + findup-sync: 5.0.0 + fined: 2.0.0 + flagged-respawn: 2.0.0 + is-plain-object: 5.0.0 + rechoir: 0.8.0 + resolve: 1.22.8 + dev: true + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -13631,6 +13673,11 @@ packages: /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} + dev: false + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -13673,6 +13720,13 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /magicast@0.3.3: resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} dependencies: @@ -13699,7 +13753,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /make-error@1.3.6: @@ -13750,8 +13804,8 @@ packages: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false - /markdown-to-jsx@7.4.0(react@18.2.0): - resolution: {integrity: sha512-zilc+MIkVVXPyTb4iIUTIz9yyqfcWjszGXnwF9K/aiBWcHXFcmdEMTkG01/oQhwSCH7SY1BnG6+ev5BzWmbPrg==} + /markdown-to-jsx@7.3.2(react@18.2.0): + resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' @@ -13775,12 +13829,6 @@ packages: resolution: {integrity: sha512-c4vLwYWyl+Ji+U43eU/G5FwxWd4ZH0ePUsFs5y0uwD9HUEFBXUQ1zUUan+78IpRD+y4pUfG0nAzNM292K7ItvA==} dev: false - /mdast-util-definitions@4.0.0: - resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} - dependencies: - unist-util-visit: 2.0.3 - dev: true - /mdast-util-definitions@6.0.0: resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} dependencies: @@ -13919,10 +13967,6 @@ packages: zwitch: 2.0.4 dev: false - /mdast-util-to-string@1.1.0: - resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} - dev: true - /mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: @@ -14282,12 +14326,6 @@ packages: engines: {node: '>=4'} hasBin: true - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: false - /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} @@ -14319,6 +14357,12 @@ packages: engines: {node: '>=4'} dev: true + /minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -14337,6 +14381,13 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} requiresBuild: true @@ -14383,6 +14434,7 @@ packages: hasBin: true dependencies: minimist: 1.2.8 + dev: true /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -14425,6 +14477,11 @@ packages: engines: {node: '>= 0.10'} dev: true + /mute-stdout@2.0.0: + resolution: {integrity: sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==} + engines: {node: '>= 10.13.0'} + dev: true + /mute-stream@1.0.0: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -14530,7 +14587,7 @@ packages: engines: {node: '>=10'} requiresBuild: true dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: false /node-addon-api@6.1.0: @@ -14614,6 +14671,13 @@ packages: once: 1.4.0 dev: true + /now-and-later@3.0.0: + resolution: {integrity: sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==} + engines: {node: '>= 10.13.0'} + dependencies: + once: 1.4.0 + dev: true + /npm-run-all@4.1.5: resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} engines: {node: '>= 4'} @@ -14643,8 +14707,8 @@ packages: path-key: 4.0.0 dev: false - /npm@10.3.0: - resolution: {integrity: sha512-9u5GFc1UqI2DLlGI7QdjkpIaBs3UhTtY8KoCqYJK24gV/j/tByaI4BA4R7RkOc+ASqZMzFPKt4Pj2Z8JcGo//A==} + /npm@10.5.2: + resolution: {integrity: sha512-cHVG7QEJwJdZyOrK0dKX5uf3R5Fd0E8AcmSES1jLtO52UT1enUKZ96Onw/xwq4CbrTZEnDuu2Vf9kCQh/Sd12w==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true dev: true @@ -14656,6 +14720,7 @@ packages: - '@npmcli/map-workspaces' - '@npmcli/package-json' - '@npmcli/promise-spawn' + - '@npmcli/redact' - '@npmcli/run-script' - '@sigstore/tuf' - abbrev @@ -14711,7 +14776,6 @@ packages: - semver - spdx-expression-parse - ssri - - strip-ansi - supports-color - tar - text-table @@ -14831,6 +14895,16 @@ packages: has-symbols: 1.0.3 object-keys: 1.1.1 + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /object.defaults@1.1.0: resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==} engines: {node: '>=0.10.0'} @@ -14982,7 +15056,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -15303,6 +15377,14 @@ packages: dependencies: lru-cache: 10.0.1 minipass: 7.0.4 + dev: false + + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 /path-temp@2.0.0: resolution: {integrity: sha512-92olbatybjsHTGB2CUnAM7s0mU/27gcMfLNA7t09UftndUdxywlQKur3fzXEPpfLrgZD3I2Bt8+UmiL7YDEgXQ==} @@ -15466,18 +15548,18 @@ packages: find-up: 3.0.0 dev: false - /playwright-core@1.41.1: - resolution: {integrity: sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg==} + /playwright-core@1.43.1: + resolution: {integrity: sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.41.1: - resolution: {integrity: sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ==} + /playwright@1.43.1: + resolution: {integrity: sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.41.1 + playwright-core: 1.43.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -15515,6 +15597,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + /postcss-csso@6.0.1(postcss@8.4.19): resolution: {integrity: sha512-ZV4yEziMrx6CEiqabGLrDva0pMD7Fbw7yP+LzJvaynM4OJgTssGN6dHiMsJMJdpmNaLJltXVLsrb/5sxbFa8sA==} engines: {node: ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -15589,6 +15675,14 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} @@ -15703,11 +15797,6 @@ packages: engines: {node: '>= 0.6.0'} dev: false - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: false - /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -15740,6 +15829,7 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -15775,26 +15865,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /puppeteer-core@2.1.1: - resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} - engines: {node: '>=8.16.0'} - dependencies: - '@types/mime-types': 2.1.4 - debug: 4.3.4 - extract-zip: 1.7.0 - https-proxy-agent: 4.0.0 - mime: 2.6.0 - mime-types: 2.1.35 - progress: 2.0.3 - proxy-from-env: 1.1.0 - rimraf: 2.7.1 - ws: 6.2.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - /pure-rand@6.0.4: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true @@ -15821,7 +15891,6 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} requiresBuild: true - dev: false /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -15875,21 +15944,21 @@ packages: - utf-8-validate dev: false - /react-docgen-typescript@2.2.2(typescript@5.3.3): + /react-docgen-typescript@2.2.2(typescript@5.4.2): resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' dependencies: - typescript: 5.3.3 + typescript: 5.4.2 dev: true /react-docgen@7.0.3: resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} engines: {node: '>=16.14.0'} dependencies: - '@babel/core': 7.23.7 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/core': 7.24.4 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.2 '@types/doctrine': 0.0.9 @@ -15932,9 +16001,9 @@ packages: react: 18.2.0 dev: false - /react-hook-form@7.49.3(react@18.2.0): - resolution: {integrity: sha512-foD6r3juidAT1cOZzpmD/gOKt7fRsDhXXZ0y28+Al1CHgX+AY1qIN9VSIIItXRq1dN68QrRwl1ORFlwjBaAqeQ==} - engines: {node: '>=18', pnpm: '8'} + /react-hook-form@7.51.3(react@18.2.0): + resolution: {integrity: sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ==} + engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 dependencies: @@ -15973,81 +16042,29 @@ packages: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} - /react-remove-scroll-bar@2.3.4(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) - tslib: 2.5.0 - dev: true - - /react-remove-scroll@2.5.5(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) - tslib: 2.5.0 - use-callback-ref: 1.3.1(@types/react@18.2.48)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) - dev: true - - /react-router-dom@6.21.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tE13UukgUOh2/sqYr6jPzZTzmzc70aGRP4pAjG2if0IP3aUT+sBtAKUJh0qMh0zylJHGLmzS+XWVaON4UklHeg==} + /react-router-dom@6.22.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.14.2 + '@remix-run/router': 1.15.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router: 6.21.2(react@18.2.0) + react-router: 6.22.3(react@18.2.0) dev: false - /react-router@6.21.2(react@18.2.0): - resolution: {integrity: sha512-jJcgiwDsnaHIeC+IN7atO0XiSRCrOsQAHHbChtJxmgqG2IaYQXSnhqGb5vk2CU/wBQA12Zt+TkbuJjIn65gzbA==} + /react-router@6.22.3(react@18.2.0): + resolution: {integrity: sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.14.2 + '@remix-run/router': 1.15.3 react: 18.2.0 dev: false - /react-style-singleton@2.2.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - get-nonce: 1.0.1 - invariant: 2.2.4 - react: 18.2.0 - tslib: 2.5.0 - dev: true - /react@17.0.2: resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} engines: {node: '>=0.10.0'} @@ -16085,6 +16102,7 @@ packages: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + dev: false /read-pkg@1.1.0: resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} @@ -16112,6 +16130,7 @@ packages: normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + dev: false /read-yaml-file@2.1.0: resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} @@ -16168,14 +16187,14 @@ packages: engines: {node: '>=10'} dev: false - /recast@0.23.4: - resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + /recast@0.23.6: + resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} engines: {node: '>= 4'} dependencies: - assert: 2.1.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 + tiny-invariant: 1.3.3 tslib: 2.5.0 /receptor@1.0.0: @@ -16193,6 +16212,13 @@ packages: dependencies: resolve: 1.22.8 + /rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + dependencies: + resolve: 1.22.8 + dev: true + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -16205,10 +16231,10 @@ packages: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + get-intrinsic: 1.2.4 globalthis: 1.0.3 which-builtin-type: 1.1.3 dev: true @@ -16249,6 +16275,16 @@ packages: define-properties: 1.2.1 set-function-name: 2.0.1 + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.1 + dev: true + /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} @@ -16268,6 +16304,17 @@ packages: jsesc: 0.5.0 dev: false + /rehype-external-links@3.0.0: + resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + dependencies: + '@types/hast': 3.0.2 + '@ungap/structured-clone': 1.2.0 + hast-util-is-element: 3.0.0 + is-absolute-url: 4.0.1 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + dev: true + /rehype-parse@9.0.0: resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} dependencies: @@ -16284,6 +16331,16 @@ packages: vfile: 6.0.1 dev: false + /rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + dependencies: + '@types/hast': 3.0.2 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.0 + unist-util-visit: 5.0.0 + dev: true + /rehype-stringify@10.0.0: resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} dependencies: @@ -16308,16 +16365,6 @@ packages: es6-error: 4.1.1 dev: true - /remark-external-links@8.0.0: - resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} - dependencies: - extend: 3.0.2 - is-absolute-url: 3.0.3 - mdast-util-definitions: 4.0.0 - space-separated-tokens: 1.1.5 - unist-util-visit: 2.0.3 - dev: true - /remark-gfm@4.0.0: resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: @@ -16352,14 +16399,6 @@ packages: vfile: 6.0.1 dev: false - /remark-slug@6.1.0: - resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} - dependencies: - github-slugger: 1.5.0 - mdast-util-to-string: 1.1.0 - unist-util-visit: 2.0.3 - dev: true - /remark-smartypants@2.0.0: resolution: {integrity: sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -16427,6 +16466,11 @@ packages: remove-trailing-separator: 1.1.0 dev: true + /replace-homedir@2.0.0: + resolution: {integrity: sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==} + engines: {node: '>= 10.13.0'} + dev: true + /replacestream@4.0.3: resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==} dependencies: @@ -16505,6 +16549,13 @@ packages: value-or-function: 3.0.0 dev: true + /resolve-options@2.0.0: + resolution: {integrity: sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==} + engines: {node: '>= 10.13.0'} + dependencies: + value-or-function: 4.0.0 + dev: true + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -16615,26 +16666,36 @@ packages: glob: 7.2.3 dev: false - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: false - /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 - /rollup@3.29.1: - resolution: {integrity: sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + /rollup@4.14.3: + resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.14.3 + '@rollup/rollup-android-arm64': 4.14.3 + '@rollup/rollup-darwin-arm64': 4.14.3 + '@rollup/rollup-darwin-x64': 4.14.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.14.3 + '@rollup/rollup-linux-arm-musleabihf': 4.14.3 + '@rollup/rollup-linux-arm64-gnu': 4.14.3 + '@rollup/rollup-linux-arm64-musl': 4.14.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3 + '@rollup/rollup-linux-riscv64-gnu': 4.14.3 + '@rollup/rollup-linux-s390x-gnu': 4.14.3 + '@rollup/rollup-linux-x64-gnu': 4.14.3 + '@rollup/rollup-linux-x64-musl': 4.14.3 + '@rollup/rollup-win32-arm64-msvc': 4.14.3 + '@rollup/rollup-win32-ia32-msvc': 4.14.3 + '@rollup/rollup-win32-x64-msvc': 4.14.3 fsevents: 2.3.3 - dev: true /rollup@4.9.5: resolution: {integrity: sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==} @@ -16686,6 +16747,16 @@ packages: has-symbols: 1.0.3 isarray: 2.0.5 + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -16709,6 +16780,15 @@ packages: get-intrinsic: 1.2.2 is-regex: 1.1.4 + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + /safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: @@ -16861,6 +16941,13 @@ packages: sver-compat: 1.5.0 dev: true + /semver-greatest-satisfied-range@2.0.0: + resolution: {integrity: sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==} + engines: {node: '>= 10.13.0'} + dependencies: + sver: 1.8.4 + dev: true + /semver-intersect@1.4.0: resolution: {integrity: sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==} dependencies: @@ -16894,7 +16981,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: false /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -16944,6 +17030,17 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.1 + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} @@ -16981,7 +17078,7 @@ packages: detect-libc: 2.0.2 node-addon-api: 6.1.0 prebuild-install: 7.1.1 - semver: 7.5.4 + semver: 7.6.0 simple-get: 4.0.1 tar-fs: 3.0.4 tunnel-agent: 0.6.0 @@ -17155,6 +17252,10 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -17214,19 +17315,19 @@ packages: whatwg-url: 7.1.0 dev: true - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: true - /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - dev: false /sparkles@1.0.1: resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==} engines: {node: '>= 0.10'} dev: true + /sparkles@2.1.0: + resolution: {integrity: sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==} + engines: {node: '>= 10.13.0'} + dev: true + /spawn-command@0.0.2: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} dev: true @@ -17354,16 +17455,18 @@ packages: /store2@2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} - dev: true - /storybook@7.6.10: - resolution: {integrity: sha512-ypFeGhQTUBBfqSUVZYh7wS5ghn3O2wILCiQc4459SeUpvUn+skcqw/TlrwGSoF5EWjDA7gtRrWDxO3mnlPt5Cw==} + /storybook@8.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9gTnnAakJBtMCg8oPGqnpy7g/C3Tj2IWiVflHiFg1SDD9zXBoc4mZhaYPTne4LRBUhXk7XuFagKfiRN2V/MuKA==} hasBin: true dependencies: - '@storybook/cli': 7.6.10 + '@storybook/cli': 8.0.8(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: + - '@babel/preset-env' - bufferutil - encoding + - react + - react-dom - supports-color - utf-8-validate dev: false @@ -17377,6 +17480,12 @@ packages: resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} dev: false + /stream-composer@1.0.2: + resolution: {integrity: sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==} + dependencies: + streamx: 2.15.1 + dev: true + /stream-exhaust@1.0.2: resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==} dev: true @@ -17415,7 +17524,6 @@ packages: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 - dev: false /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -17522,6 +17630,16 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: @@ -17529,6 +17647,14 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: @@ -17536,6 +17662,15 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -17678,13 +17813,16 @@ packages: es6-symbol: 3.1.3 dev: true + /sver@1.8.4: + resolution: {integrity: sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==} + optionalDependencies: + semver: 6.3.1 + dev: true + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /synchronous-promise@2.0.17: - resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} - /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} requiresBuild: true @@ -17738,6 +17876,12 @@ packages: yallist: 4.0.0 dev: false + /teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + dependencies: + streamx: 2.15.1 + dev: true + /telejson@7.2.0: resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} dependencies: @@ -17841,6 +17985,9 @@ packages: /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + /tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} dev: true @@ -17916,6 +18063,13 @@ packages: through2: 2.0.5 dev: true + /to-through@3.0.0: + resolution: {integrity: sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==} + engines: {node: '>=10.13.0'} + dependencies: + streamx: 2.15.1 + dev: true + /tocbot@4.25.0: resolution: {integrity: sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==} dev: true @@ -17968,13 +18122,13 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false - /ts-api-utils@1.0.3(typescript@5.3.3): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + /ts-api-utils@1.3.0(typescript@5.4.2): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.2 dev: true /ts-dedent@2.2.0: @@ -17993,7 +18147,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@29.1.1(@babel/core@7.23.0)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.3.3): + /ts-jest@29.1.1(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -18014,7 +18168,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.24.4 bs-logger: 0.2.6 esbuild: 0.19.12 fast-json-stable-stringify: 2.1.0 @@ -18024,7 +18178,7 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 5.3.3 + typescript: 5.4.2 yargs-parser: 21.1.1 dev: true @@ -18072,9 +18226,30 @@ packages: typescript: 5.3.3 dev: false + /tsconfck@3.0.0(typescript@5.4.2): + resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.4.2 + dev: false + + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} @@ -18222,6 +18397,7 @@ packages: /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} + dev: false /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} @@ -18264,6 +18440,15 @@ packages: get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} @@ -18273,6 +18458,17 @@ packages: has-proto: 1.0.1 is-typed-array: 1.1.12 + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} @@ -18283,6 +18479,18 @@ packages: has-proto: 1.0.1 is-typed-array: 1.1.12 + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -18290,6 +18498,18 @@ packages: for-each: 0.3.3 is-typed-array: 1.1.12 + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + /typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -18298,6 +18518,7 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true /typesafe-path@0.2.2: resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} @@ -18305,13 +18526,13 @@ packages: /typescript-auto-import-cache@0.3.0: resolution: {integrity: sha512-Rq6/q4O9iyqUdjvOoyas7x/Qf9nWUMeqpP3YeTaLA+uECgfy5wOhfOS+SW/+fZ/uI/ZcKaf+2/ZhFzXh8xfofQ==} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /typescript-auto-import-cache@0.3.2: resolution: {integrity: sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg==} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: false /typescript@3.9.10: @@ -18325,8 +18546,13 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript@5.5.0-dev.20240402: - resolution: {integrity: sha512-Dg6kiTZGVvuj9hqDzrqqUwZ3ruAcF1E7e9tSM53pP1XvZhPd4ZHLBF2rdbzjT2wIJOYL9Vl8OkAcL7dCJBB4Fg==} + /typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + engines: {node: '>=14.17'} + hasBin: true + + /typescript@5.5.0-dev.20240416: + resolution: {integrity: sha512-hCCgs0+M5vvB2c/G6ft9IBNjbsjd/VL7+pSJMxGJcDjWP/FI+1n6qSLL3hNduxkfbzFh4jL75tbSqJp/Ac0V1Q==} engines: {node: '>=14.17'} hasBin: true dev: false @@ -18368,6 +18594,11 @@ packages: engines: {node: '>= 0.10'} dev: true + /undertaker-registry@2.0.0: + resolution: {integrity: sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==} + engines: {node: '>= 10.13.0'} + dev: true + /undertaker@1.3.0: resolution: {integrity: sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==} engines: {node: '>= 0.10'} @@ -18384,6 +18615,16 @@ packages: undertaker-registry: 1.0.1 dev: true + /undertaker@2.0.0: + resolution: {integrity: sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==} + engines: {node: '>=10.13.0'} + dependencies: + bach: 2.0.1 + fast-levenshtein: 3.0.0 + last-run: 2.0.0 + undertaker-registry: 2.0.0 + dev: true + /undici-types@5.25.3: resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} dev: true @@ -18479,10 +18720,6 @@ packages: dependencies: crypto-random-string: 2.0.0 - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: true - /unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} dependencies: @@ -18493,7 +18730,6 @@ packages: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: '@types/unist': 3.0.1 - dev: false /unist-util-modify-children@3.1.1: resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==} @@ -18526,13 +18762,6 @@ packages: '@types/unist': 2.0.9 dev: false - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - dependencies: - '@types/unist': 2.0.9 - unist-util-is: 4.1.0 - dev: true - /unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: @@ -18545,15 +18774,6 @@ packages: dependencies: '@types/unist': 3.0.1 unist-util-is: 6.0.0 - dev: false - - /unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} - dependencies: - '@types/unist': 2.0.9 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - dev: true /unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} @@ -18569,7 +18789,6 @@ packages: '@types/unist': 3.0.1 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -18592,7 +18811,7 @@ packages: resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} dependencies: acorn: 8.11.3 - chokidar: 3.5.3 + chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 dev: true @@ -18657,48 +18876,6 @@ packages: requires-port: 1.0.0 dev: true - /use-callback-ref@1.3.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - tslib: 2.5.0 - dev: true - - /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} - peerDependencies: - react: 16.8.0 - 18 - react-dom: 16.8.0 - 18 - dependencies: - '@juggle/resize-observer': 3.4.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /use-sidecar@1.1.2(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - detect-node-es: 1.1.0 - react: 18.2.0 - tslib: 2.5.0 - dev: true - /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -18721,8 +18898,8 @@ packages: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.12 - which-typed-array: 1.1.11 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} @@ -18765,6 +18942,11 @@ packages: homedir-polyfill: 1.0.3 dev: true + /v8flags@4.0.1: + resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==} + engines: {node: '>= 10.13.0'} + dev: true + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -18781,6 +18963,11 @@ packages: engines: {node: '>= 0.10'} dev: true + /value-or-function@4.0.0: + resolution: {integrity: sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==} + engines: {node: '>= 10.13.0'} + dev: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -18823,6 +19010,14 @@ packages: vfile-message: 4.0.2 dev: false + /vinyl-contents@2.0.0: + resolution: {integrity: sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==} + engines: {node: '>=10.13.0'} + dependencies: + bl: 5.1.0 + vinyl: 3.0.0 + dev: true + /vinyl-fs@3.0.3: resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==} engines: {node: '>= 0.10'} @@ -18846,6 +19041,26 @@ packages: vinyl-sourcemap: 1.1.0 dev: true + /vinyl-fs@4.0.0: + resolution: {integrity: sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==} + engines: {node: '>=10.13.0'} + dependencies: + fs-mkdirp-stream: 2.0.1 + glob-stream: 8.0.2 + graceful-fs: 4.2.11 + iconv-lite: 0.6.3 + is-valid-glob: 1.0.0 + lead: 4.0.0 + normalize-path: 3.0.0 + resolve-options: 2.0.0 + stream-composer: 1.0.2 + streamx: 2.15.1 + to-through: 3.0.0 + value-or-function: 4.0.0 + vinyl: 3.0.0 + vinyl-sourcemap: 2.0.0 + dev: true + /vinyl-sourcemap@1.1.0: resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==} engines: {node: '>= 0.10'} @@ -18859,6 +19074,18 @@ packages: vinyl: 2.2.1 dev: true + /vinyl-sourcemap@2.0.0: + resolution: {integrity: sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==} + engines: {node: '>=10.13.0'} + dependencies: + convert-source-map: 2.0.0 + graceful-fs: 4.2.11 + now-and-later: 3.0.0 + streamx: 2.15.1 + vinyl: 3.0.0 + vinyl-contents: 2.0.0 + dev: true + /vinyl-sourcemaps-apply@0.2.1: resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==} dependencies: @@ -18877,6 +19104,17 @@ packages: replace-ext: 1.0.1 dev: true + /vinyl@3.0.0: + resolution: {integrity: sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==} + engines: {node: '>=10.13.0'} + dependencies: + clone: 2.1.2 + clone-stats: 1.0.0 + remove-trailing-separator: 1.1.0 + replace-ext: 2.0.0 + teex: 1.0.1 + dev: true + /vite-node@0.34.6(@types/node@20.11.16): resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} @@ -18887,7 +19125,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.16) + vite: 5.2.9(@types/node@20.11.16) transitivePeerDependencies: - '@types/node' - less @@ -18899,8 +19137,8 @@ packages: - terser dev: true - /vite-plugin-dts@3.7.1(@types/node@20.11.16)(typescript@5.3.3)(vite@5.1.4): - resolution: {integrity: sha512-VZJckNFpVfRAkmOxhGT5OgTUVWVXxkNQqLpBUuiNGAr9HbtvmvsPLo2JB3Xhn+o/Z9+CT6YZfYa4bX9SGR5hNw==} + /vite-plugin-dts@3.8.3(@types/node@20.11.16)(typescript@5.4.2)(vite@5.2.9): + resolution: {integrity: sha512-yRHiRosQw7MXdOhmcrVI+kRiB8YEShbSxnADNteK4eZGdEoyOkMHihvO5XOAVlOq8ng9sIqu8vVefDK1zcj3qw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -18909,14 +19147,15 @@ packages: vite: optional: true dependencies: - '@microsoft/api-extractor': 7.39.0(@types/node@20.11.16) + '@microsoft/api-extractor': 7.43.0(@types/node@20.11.16) '@rollup/pluginutils': 5.1.0 - '@vue/language-core': 1.8.27(typescript@5.3.3) + '@vue/language-core': 1.8.27(typescript@5.4.2) debug: 4.3.4 kolorist: 1.8.0 - typescript: 5.3.3 - vite: 5.1.4(@types/node@20.11.16) - vue-tsc: 1.8.27(typescript@5.3.3) + magic-string: 0.30.9 + typescript: 5.4.2 + vite: 5.2.9(@types/node@20.11.16) + vue-tsc: 1.8.27(typescript@5.4.2) transitivePeerDependencies: - '@types/node' - rollup @@ -18969,6 +19208,41 @@ packages: optionalDependencies: fsevents: 2.3.3 + /vite@5.2.9(@types/node@20.11.16): + resolution: {integrity: sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.11.16 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.14.3 + optionalDependencies: + fsevents: 2.3.3 + /vitefu@0.2.5(vite@5.1.4): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: @@ -19210,7 +19484,7 @@ packages: '@volar/language-service': 1.11.1 '@volar/typescript': 1.11.1 path-browserify: 1.0.1 - semver: 7.5.4 + semver: 7.6.0 typescript-auto-import-cache: 0.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-nls: 5.2.0 @@ -19229,7 +19503,7 @@ packages: '@volar/language-service': 2.0.4 '@volar/typescript': 2.0.4 path-browserify: 1.0.1 - semver: 7.5.4 + semver: 7.6.0 typescript-auto-import-cache: 0.3.2 vscode-languageserver-textdocument: 1.0.11 vscode-nls: 5.2.0 @@ -19300,16 +19574,16 @@ packages: he: 1.2.0 dev: true - /vue-tsc@1.8.27(typescript@5.3.3): + /vue-tsc@1.8.27(typescript@5.4.2): resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} hasBin: true peerDependencies: typescript: '*' dependencies: '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.3.3) - semver: 7.5.4 - typescript: 5.3.3 + '@vue/language-core': 1.8.27(typescript@5.4.2) + semver: 7.6.0 + typescript: 5.4.2 dev: true /w3c-xmlserializer@5.0.0: @@ -19494,8 +19768,8 @@ packages: path-exists: 4.0.0 dev: false - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 @@ -19504,15 +19778,15 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -19643,20 +19917,6 @@ packages: write-file-atomic: 5.0.1 dev: false - /ws@6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - async-limiter: 1.0.1 - dev: false - /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -19892,10 +20152,10 @@ packages: '@babel/runtime': 7.23.8 fast-deep-equal: 3.1.3 react: 18.2.0 - zustand: 4.5.2(@types/react@18.2.48)(react@18.2.0) + zustand: 4.5.2(@types/react@18.2.79)(react@18.2.0) dev: false - /zustand@4.5.2(@types/react@18.2.48)(react@18.2.0): + /zustand@4.5.2(@types/react@18.2.79)(react@18.2.0): resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==} engines: {node: '>=12.7.0'} peerDependencies: @@ -19910,7 +20170,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.79 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false From 95490412c54f150edf03a95c163e15d32e466edf Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Tue, 16 Apr 2024 09:48:24 -0500 Subject: [PATCH 09/10] Use upstream @uswds/compile (a prior bugfix has been merged and release) (#108) --- packages/design/package.json | 2 +- pnpm-lock.yaml | 235 ++++++++++++++++------------------- 2 files changed, 110 insertions(+), 127 deletions(-) diff --git a/packages/design/package.json b/packages/design/package.json index 14b4a94d5..9f8ccd631 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -43,7 +43,7 @@ "@types/react": "^18.2.79", "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", - "@uswds/compile": "github:danielnaab/uswds-compile#package-json-paths", + "@uswds/compile": "1.1.0", "@vitejs/plugin-react": "^4.2.1", "concurrently": "^8.2.2", "eslint": "^8.56.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a615990b9..2542e8bdf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -306,8 +306,8 @@ importers: specifier: ^7.7.0 version: 7.7.0(eslint@8.56.0)(typescript@5.4.2) '@uswds/compile': - specifier: github:danielnaab/uswds-compile#package-json-paths - version: github.com/danielnaab/uswds-compile/910cc2eeae7612d9ec0f56c40f6ea764f25ef2cf(ts-node@10.9.2) + specifier: 1.1.0 + version: 1.1.0(ts-node@10.9.2) '@vitejs/plugin-react': specifier: ^4.2.1 version: 4.2.1(vite@5.2.9) @@ -783,7 +783,7 @@ packages: dependencies: '@babel/compat-data': 7.22.20 '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.10 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -2416,6 +2416,10 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@bufbuild/protobuf@1.8.0: + resolution: {integrity: sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q==} + dev: true + /@cdktf/cli-core@0.20.4(react@17.0.2): resolution: {integrity: sha512-x5KqngrqdK7mjocvBiAHPJUEv84djnm2vLOHwSOmTswYBHEP4r+egFFiAb2r2VPUpej4mPtoLNUJfjJ1LVVD1w==} dependencies: @@ -5754,10 +5758,6 @@ packages: '@types/unist': 2.0.9 dev: false - /@types/node@14.18.63: - resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} - dev: true - /@types/node@18.19.18: resolution: {integrity: sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==} dependencies: @@ -6037,6 +6037,26 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@uswds/compile@1.1.0(ts-node@10.9.2): + resolution: {integrity: sha512-kKlszBhO13v/qa1jaNqaOWiAJjuKtASHCxjmu+OXw/wMGVdaJcNjkM8hWL9/sx4AUe07PBwlJoGPtkKRWqSxWw==} + dependencies: + autoprefixer: 10.4.16(postcss@8.4.31) + del: 6.1.1 + gulp: 4.0.2 + gulp-postcss: 9.0.1(postcss@8.4.31)(ts-node@10.9.2) + gulp-rename: 2.0.0 + gulp-replace: 1.1.4 + gulp-sass: 5.1.0 + gulp-sourcemaps: 3.0.0 + gulp-svgstore: 9.0.0 + postcss: 8.4.31 + postcss-csso: 6.0.1(postcss@8.4.31) + sass-embedded: 1.69.5 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /@uswds/uswds@3.8.0: resolution: {integrity: sha512-rMwCXe/u4HGkfskvS1Iuabapi/EXku3ChaIFW7y/dUhc7R1TXQhbbfp8YXEjmXPF0yqJnv9T08WPgS0fQqWZ8w==} engines: {node: '>= 4'} @@ -6363,7 +6383,7 @@ packages: '@vue/shared': 3.4.14 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /@vue/compiler-dom@3.4.14: @@ -7305,19 +7325,19 @@ packages: engines: {node: '>=8'} dev: false - /autoprefixer@10.4.13(postcss@8.4.19): - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.10 - caniuse-lite: 1.0.30001534 + browserslist: 4.22.2 + caniuse-lite: 1.0.30001576 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.19 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: true @@ -7721,17 +7741,6 @@ packages: pako: 0.2.9 dev: false - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001534 - electron-to-chromium: 1.4.520 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) - dev: true - /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -7909,10 +7918,6 @@ packages: path-temp: 2.0.0 dev: false - /caniuse-lite@1.0.30001534: - resolution: {integrity: sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==} - dev: true - /caniuse-lite@1.0.30001576: resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} @@ -8778,7 +8783,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} dependencies: mdn-data: 2.0.28 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /css-what@6.1.0: @@ -9118,6 +9123,20 @@ packages: rimraf: 3.0.2 slash: 3.0.0 + /del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + dependencies: + globby: 11.1.0 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -9369,10 +9388,6 @@ packages: jake: 10.8.7 dev: false - /electron-to-chromium@1.4.520: - resolution: {integrity: sha512-Frfus2VpYADsrh1lB3v/ft/WVFlVzOIm+Q0p7U7VqHI6qr7NWHYKe+Wif3W50n7JAFoBsWVsoU0+qDks6WQ60g==} - dev: true - /electron-to-chromium@1.4.630: resolution: {integrity: sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==} @@ -10985,10 +11000,6 @@ packages: sparkles: 2.1.0 dev: true - /google-protobuf@3.21.2: - resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} - dev: true - /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -11082,7 +11093,7 @@ packages: yargs: 16.2.0 dev: true - /gulp-postcss@9.0.1(postcss@8.4.19)(ts-node@10.9.2): + /gulp-postcss@9.0.1(postcss@8.4.31)(ts-node@10.9.2): resolution: {integrity: sha512-9QUHam5JyXwGUxaaMvoFQVT44tohpEFpM8xBdPfdwTYGM0AItS1iTQz0MpsF8Jroh7GF5Jt2GVPaYgvy8qD2Fw==} engines: {node: ^10 || ^12 || >=14} peerDependencies: @@ -11090,8 +11101,8 @@ packages: dependencies: fancy-log: 1.3.3 plugin-error: 1.0.1 - postcss: 8.4.19 - postcss-load-config: 3.1.4(postcss@8.4.19)(ts-node@10.9.2) + postcss: 8.4.31 + postcss-load-config: 3.1.4(postcss@8.4.31)(ts-node@10.9.2) vinyl-sourcemaps-apply: 0.2.1 transitivePeerDependencies: - ts-node @@ -11102,11 +11113,11 @@ packages: engines: {node: '>=4'} dev: true - /gulp-replace@1.1.3: - resolution: {integrity: sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ==} + /gulp-replace@1.1.4: + resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} engines: {node: '>=10'} dependencies: - '@types/node': 14.18.63 + '@types/node': 20.11.16 '@types/vinyl': 2.0.9 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -11824,6 +11835,7 @@ packages: /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v0.1.7 dependencies: kind-of: 3.2.2 dev: true @@ -11831,6 +11843,7 @@ packages: /is-accessor-descriptor@1.0.0: resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v1.0.1 dependencies: kind-of: 6.0.3 dev: true @@ -11926,6 +11939,7 @@ packages: /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v0.1.5 dependencies: kind-of: 3.2.2 dev: true @@ -11933,6 +11947,7 @@ packages: /is-data-descriptor@1.0.0: resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} engines: {node: '>=0.10.0'} + deprecated: Please upgrade to v1.0.1 dependencies: kind-of: 6.0.3 dev: true @@ -14629,10 +14644,6 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true - /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -15601,17 +15612,17 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - /postcss-csso@6.0.1(postcss@8.4.19): + /postcss-csso@6.0.1(postcss@8.4.31): resolution: {integrity: sha512-ZV4yEziMrx6CEiqabGLrDva0pMD7Fbw7yP+LzJvaynM4OJgTssGN6dHiMsJMJdpmNaLJltXVLsrb/5sxbFa8sA==} engines: {node: ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: csso: 5.0.5 - postcss: 8.4.19 + postcss: 8.4.31 dev: true - /postcss-load-config@3.1.4(postcss@8.4.19)(ts-node@10.9.2): + /postcss-load-config@3.1.4(postcss@8.4.31)(ts-node@10.9.2): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -15624,7 +15635,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.19 + postcss: 8.4.31 ts-node: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) yaml: 1.10.2 dev: true @@ -15658,23 +15669,15 @@ packages: source-map: 0.6.1 dev: true - /postcss@8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - /postcss@8.4.38: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} @@ -16798,96 +16801,105 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /sass-embedded-darwin-arm64@1.56.1: - resolution: {integrity: sha512-Y6us8rg7uwLtAzGiKDebAhFn98RLpW3u5Jnfbsvetlm/rDJ1fZg/roVXFttepLdVbYBjimVFTUaNuGxU3bWbBA==} + /sass-embedded-darwin-arm64@1.69.5: + resolution: {integrity: sha512-zVuXJzgT54t24E4QPP/iteHsw/cawZE8gAXGEm20cP2DKsIQBF7bvSTk0zzY0bS01YFtJviYM13HcGUe4q7/7w==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-darwin-x64@1.56.1: - resolution: {integrity: sha512-UypB3IREbreNNc+dG+L6hG5yoeTujKDCdmu38SSSS/zl9XBFTc8McX58SWapTJOUFK8G43CCimfB3r8FOcyNfA==} + /sass-embedded-darwin-x64@1.69.5: + resolution: {integrity: sha512-HcA9YER3Ax7lMnHouxnIY462gnst5lNL56QXkZaTQmg9nH7oqR2bMfWbckEQL+mHIXGSM/QfX0aD59VOm5iKZw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-linux-arm64@1.56.1: - resolution: {integrity: sha512-Ly2wk8EmhjXkBpNPM+yAygSxTVIBjQlf4cDAHYgsaDUIIvRSAKAe2CUmxJjik069Qmv54g+Ac7WF6k63c2CTNw==} + /sass-embedded-linux-arm64@1.69.5: + resolution: {integrity: sha512-HWCjdFSLGh0dMUNLNh+slc2j9koSZnfTEO9qQR6WEIuC+We6vYKJugGPo1V9pFbBeoW6VAJGYdlqsRPquteCZw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-linux-arm@1.56.1: - resolution: {integrity: sha512-pXv+2HlMsjlk0g3dzuVhofuUNJZWUfWVe5xbbWHv+wrdH9kuui6WOyHDhSdUolPrRXOrdsG6Z4/Balr9wa1JWQ==} + /sass-embedded-linux-arm@1.69.5: + resolution: {integrity: sha512-m0NxVkrfcS3UsF33q0FgItMWIz/F1FZdfVZpjp+dP6qd0KLeTuoPUCh2GSize0DAU5T0Zj24b2mXeowDKv463g==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-linux-ia32@1.56.1: - resolution: {integrity: sha512-cGmhnHdCbwJsQgsogwmlALzS/j8g+qQTiBuKBcXIWyFn4hLWo2BAr4Gm9vY5p+8aapcYrRQF9b0nwpFQcUScOg==} + /sass-embedded-linux-ia32@1.69.5: + resolution: {integrity: sha512-0taR6AJDb+eLOBTEMc1nfX2fI1hgRF9M+Hmv+wwGrxfBu/MkASk6fmR9B8MDw9hPHIqGVUkTVizjOh50O7nIKg==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [linux] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-linux-x64@1.56.1: - resolution: {integrity: sha512-yMXS37lP3abTI5ThuydOrLacSNz4Oo9+xlfQDR0pntrugdKzH7vHWK7T7Ynd+vGjVqFajUhI+VihP7vZlhhndw==} + /sass-embedded-linux-x64@1.69.5: + resolution: {integrity: sha512-gN9yLTbKC0hUHukx4mdRs4V39WD719PM2GhWQBUA+3Z8qr9ywywi7LiU2atWrKESRF34V+eqF9lYiYVQxtTHZw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-win32-ia32@1.56.1: - resolution: {integrity: sha512-cjtuKc1O0F+yQZ8hLLYhalulEkBZ6HPdR/ys0l6hn7KTlrYooMyvZXbdU5KaB2lfK1WD29I0HefT8Em7d9cpfA==} + /sass-embedded-win32-ia32@1.69.5: + resolution: {integrity: sha512-9OgSaufHP53b33gaH1Y5NZ/Im3druCHIQvLUEqJBCFuOzly47g/hZGrO+dBDiWgYGYKbSYI7Z4/PBtQoK5Vkxg==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [win32] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded-win32-x64@1.56.1: - resolution: {integrity: sha512-VxqwSluQdNBdBEx0p6N2dOrGPIEL3AcG62KuDJ4KD/rHPQgoCPiJvLa5MXKdVHC24tHgE2AYlirILS/iE/N1NQ==} + /sass-embedded-win32-x64@1.69.5: + resolution: {integrity: sha512-p1PsOJnpwXdPfiRbX6QdRa4PnL2QXPpIRy8fkeAZpQFYZ278ZIlwemC2MukKMVLcE3iQ5lBulbC8IYm91rod6Q==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] + hasBin: true requiresBuild: true dev: true optional: true - /sass-embedded@1.56.1: - resolution: {integrity: sha512-8VuohdRoGfqVWgBNeC+iqek1KXIVWYcG6AOQ6rJvRUe08HbdPQgp0+fseDQX7E5UxaoM8wvU5VBwCbZvPwFZQw==} + /sass-embedded@1.69.5: + resolution: {integrity: sha512-0YNcRcbSpgGd4AnE+mm3a3g4S97puFLIZ0cYJgbwdD4iGz/hiOzE+yh72XS+u1LMhE+pQfNeC9MNnRsc8n1yRg==} engines: {node: '>=14.0.0'} dependencies: + '@bufbuild/protobuf': 1.8.0 buffer-builder: 0.2.0 - google-protobuf: 3.21.2 immutable: 4.3.4 rxjs: 7.8.1 supports-color: 8.1.1 + varint: 6.0.0 optionalDependencies: - sass-embedded-darwin-arm64: 1.56.1 - sass-embedded-darwin-x64: 1.56.1 - sass-embedded-linux-arm: 1.56.1 - sass-embedded-linux-arm64: 1.56.1 - sass-embedded-linux-ia32: 1.56.1 - sass-embedded-linux-x64: 1.56.1 - sass-embedded-win32-ia32: 1.56.1 - sass-embedded-win32-x64: 1.56.1 + sass-embedded-darwin-arm64: 1.69.5 + sass-embedded-darwin-x64: 1.69.5 + sass-embedded-linux-arm: 1.69.5 + sass-embedded-linux-arm64: 1.69.5 + sass-embedded-linux-ia32: 1.69.5 + sass-embedded-linux-x64: 1.69.5 + sass-embedded-win32-ia32: 1.69.5 + sass-embedded-win32-x64: 1.69.5 dev: true /sax@1.3.0: @@ -17251,6 +17263,7 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: true /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} @@ -18834,17 +18847,6 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.10 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -18968,6 +18970,10 @@ packages: engines: {node: '>= 10.13.0'} dev: true + /varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + dev: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -19028,7 +19034,7 @@ packages: is-valid-glob: 1.0.0 lazystream: 1.0.1 lead: 1.0.0 - object.assign: 4.1.4 + object.assign: 4.1.5 pumpify: 1.5.1 readable-stream: 2.3.8 remove-bom-buffer: 3.0.0 @@ -19203,7 +19209,7 @@ packages: dependencies: '@types/node': 20.11.16 esbuild: 0.19.12 - postcss: 8.4.35 + postcss: 8.4.38 rollup: 4.9.5 optionalDependencies: fsevents: 2.3.3 @@ -20021,7 +20027,7 @@ packages: resolution: {integrity: sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==} dependencies: camelcase: 3.0.0 - object.assign: 4.1.4 + object.assign: 4.1.5 dev: true /yargs@15.4.1: @@ -20178,26 +20184,3 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false - - github.com/danielnaab/uswds-compile/910cc2eeae7612d9ec0f56c40f6ea764f25ef2cf(ts-node@10.9.2): - resolution: {tarball: https://codeload.github.com/danielnaab/uswds-compile/tar.gz/910cc2eeae7612d9ec0f56c40f6ea764f25ef2cf} - id: github.com/danielnaab/uswds-compile/910cc2eeae7612d9ec0f56c40f6ea764f25ef2cf - name: '@uswds/compile' - version: 1.0.0 - dependencies: - autoprefixer: 10.4.13(postcss@8.4.19) - del: 6.0.0 - gulp: 4.0.2 - gulp-postcss: 9.0.1(postcss@8.4.19)(ts-node@10.9.2) - gulp-rename: 2.0.0 - gulp-replace: 1.1.3 - gulp-sass: 5.1.0 - gulp-sourcemaps: 3.0.0 - gulp-svgstore: 9.0.0 - postcss: 8.4.19 - postcss-csso: 6.0.1(postcss@8.4.19) - sass-embedded: 1.56.1 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true From 30ed3c7f6cce63524523bb817692c01da83b3a05 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Wed, 17 Apr 2024 16:00:45 -0500 Subject: [PATCH 10/10] Inline edit pattern UI (#109) * Initial preview focus (rather than settings button) * Basic inline editing working * in-progress * Use "drag handle" icon bundled with USWDS * Remove original css styles from form edit * Replace inner nav contents with new design's navigation, currently only wired to the unused preview page. * Inline editing is styled, with some weirdness on the buttons on the bottom not included in the sizing properly. --- package.json | 2 +- packages/design/sass/styles.scss | 321 ------------------ packages/design/src/Form/index.tsx | 228 +++++++------ .../FormManager/FormEdit/DraggableList.tsx | 20 +- .../FormManager/FormEdit/FormEdit.stories.tsx | 36 +- .../src/FormManager/FormEdit/PatternEdit.tsx | 77 ++--- .../FormEdit/PatternEditActions.tsx | 92 +++++ .../FormManager/FormEdit/PreviewPattern.tsx | 46 +-- .../design/src/FormManager/FormEdit/index.tsx | 17 +- .../design/src/FormManager/FormEdit/store.tsx | 39 ++- .../src/FormManager/FormPreview/index.tsx | 2 +- .../design/src/FormManager/ManagerNav.tsx | 43 +++ .../src/FormManager/import-document.tsx | 12 +- packages/design/src/FormManager/index.tsx | 2 +- .../src/FormManager/internalPageTopNav.tsx | 45 --- .../src/config/edit/InputPatternEdit.tsx | 45 +-- .../src/config/edit/SequencePatternEdit.tsx | 6 +- packages/forms/src/builder/builder.test.ts | 25 ++ packages/forms/src/builder/index.ts | 10 +- packages/forms/src/index.ts | 35 +- packages/forms/src/pattern.ts | 18 + packages/forms/src/patterns/fieldset.ts | 15 + packages/forms/src/patterns/sequence.ts | 15 + 23 files changed, 506 insertions(+), 645 deletions(-) create mode 100644 packages/design/src/FormManager/FormEdit/PatternEditActions.tsx create mode 100644 packages/design/src/FormManager/ManagerNav.tsx delete mode 100644 packages/design/src/FormManager/internalPageTopNav.tsx diff --git a/package.json b/package.json index c340e5abe..95f2e1c83 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build": "turbo run build --filter=!infra", "clean": "turbo run clean", "dev": "turbo run dev --concurrency 12", - "format": "prettier --write \"packages/**/*.{js,jsx,ts,tsx}\"", + "format": "prettier --write \"packages/*/src/**/*.{js,jsx,ts,tsx}\"", "lint": "turbo run lint", "pages": "rm -rf node_modules && npm i -g pnpm turbo && pnpm i && pnpm build && ln -sf ./apps/spotlight/dist _site", "test": "vitest run --coverage.enabled --coverage.reporter=text --coverage.reporter=json-summary --coverage.reporter=json --coverage.reportOnFailure --reporter vitest-github-actions-reporter", diff --git a/packages/design/sass/styles.scss b/packages/design/sass/styles.scss index 0a97bb9e5..e5d0afb48 100644 --- a/packages/design/sass/styles.scss +++ b/packages/design/sass/styles.scss @@ -186,96 +186,6 @@ nav { padding-top: 2.6rem; } } -.previewForm { - padding-left: 1rem; - - >fieldset { - margin-bottom: 10em; - - >legend { - border-bottom: 1px #DCDEE0 solid; - font-size: 2rem; - } - - >.usa-form-group { - margin-left: 3rem; - } - - .usa-form-group { - >fieldset { - border-bottom: 1px #DCDEE0 solid; - padding-bottom: 2rem; - - legend { - font-size: 1.5rem; - border-bottom: none; - } - - p { - font-weight: bold; - } - } - } - } - - .usa-button { - margin: 1rem 0 0 1rem; - } -} - -.innerPageTopNavWrapper { - margin-bottom: 50px; - - .innerPageTopNav { - ul { - list-style: none; - padding: 0; - margin: 0 auto; - - li { - margin: 0 1px; - - &.currentPage { - a, - a:hover { - background: #454540; - color: white; - } - } - - a { - display: block; - background: #ede3ff; - color: #39215e; - border: 1px solid #ede3ff; - } - - a, - .usa-button { - text-decoration: none; - padding: 15px; - font-size: 20px; - text-align: center; - - &:hover { - background: #f5f2ff; - border: 1px solid #e4deff; - } - } - - .usa-button { - margin-top: 0; - } - } - } - - .usa-button { - margin: 0; - height: 100%; - width: 100%; - } - } -} [contentEditable=true]:focus, [href]:focus, @@ -284,162 +194,6 @@ iframe:focus { outline: 0.25rem solid #783cb9; } -.editFormPage { - - .usa-intro { - padding-bottom: 2rem; - border-bottom: 1px solid #bbb; - width: 100%; - max-width: 100%; - margin-bottom: 50px; - } - - fieldset { - border: none; - padding: 0; - margin-bottom: 2em; - } - - h1 { - margin-top: 0; - } - - .form-group-row { - padding: 1rem; - cursor: pointer; - display: flex; - - &:first-child { - .edit-button-icon { - padding: 0 10px; - flex: none; - } - } - - &.field-selected { - background: #e7e3fa; - } - - .usa-form-group-wrapper { - flex: 12; - } - - .edit-button-icon { - flex: 1; - text-align: center; - padding: 30px 0 0; - align-self: flex-end; - margin: 0 0 14px 7px; - } - - label { - cursor: pointer; - } - - .usa-button { - background: none; - margin: 0; - padding: 2px; - } - - .usa-icon { - height: 1.75em; - width: 1.75em; - fill: #777; - } - } - - .usa-form-group { - margin: 0 0 0.5rem; - } - - legend { - margin-top: 0; - } - - .editFormContentWrapper { - .preview { - .grid-col-9 { - width: 100%; - } - - .usa-form--large { - max-width: 46rem; - } - } - } -} - -.editFormWrapper { - list-style: none; - padding: 0; - border-top: 1px solid #c9c9c9; - display: none; - - li { - padding: 15px 0 20px; - border-bottom: 1px solid #c9c9c9; - } - - .usa-label { - margin-top: 0; - } -} - -.editPageGrabButtonWrapper { - font-size: 20px; - text-align: center; - width: 45px; - - span { - display: inline-block; - vertical-align: top; - } - - .grabber2 { - margin-top: -6px; - } -} - -.settingsContainer { - background: #e7e3fa; - padding: 30px; - position: -webkit-sticky; /* Safari */ - top: 10px; - - h3 { - margin-top: 0; - font-size: 1.2em; - overflow-wrap: break-word; - word-wrap: break-word; - hyphens: auto; - } - - .formRowEditFields { - .grid-col { - width: 100%; - } - } - - .usa-button { - width: 100%; - padding: 1rem 1.25rem; - margin: 20px 0 0; - - &.close-button { - background-color: #76766a; - - &:hover { - background-color: #929285; - } - } - } - - .usa-checkbox { - margin-top: 1.5rem; - } -} - .usa-step-indicator__segment { max-width: 22rem; @@ -493,78 +247,3 @@ iframe:focus { color: #39215e; } } - -@media screen and (max-width: 879px) { - - .editFormPage { - - .usa-intro { - margin-bottom: 20px; - } - - .editFormContentWrapper { - .grid-col, - .grid-col-8 { - width: 100%; - } - - .usa-button{ - margin-left: 0; - } - - .grid-col-4 { - position: static; - } - - .form-group-row { - padding: 0 0 1rem; - } - - .settingsContainer { - position: fixed; - top: 10%; - left: 50%; - transform: translate(-50%, 0); - width: 90%; - margin: 0 auto; - height: auto; - box-shadow: 1px 4px 12px #76766a; - } - } - } - -} - - -@media screen and (max-width: 480px) { - .usa-legend, - .usa-label { - word-break: break-all; - } - - .innerPageTopNavWrapper { - .innerPageTopNav { - ul { - li { - flex: 0 1 auto; - width: 100%; - margin: 0 0 4px; - } - } - } - } - - .editFieldsWrapper { - width: 85%; - - .grid-col { - width: 100%; - flex: 0 1 auto; - } - - .usa-label { - margin-bottom: 16px; - } - } - -} diff --git a/packages/design/src/Form/index.tsx b/packages/design/src/Form/index.tsx index ee60b9e33..a821467f3 100644 --- a/packages/design/src/Form/index.tsx +++ b/packages/design/src/Form/index.tsx @@ -138,112 +138,26 @@ export default function Form({ )}
    -
    { - updatePrompt(data); - if (onSubmit) { - console.log('Submitting form...'); - onSubmit(data); - } else { - console.warn('Skipping form submission...'); - } - })} - > - {false && ( -
    - - Request to Change Name - -
    -
    -
    - - County where you live - - - -
    -
    -
    - -
    -
    -
    - - Your current name - - - - - - - -
    -
    -

    - To ask the court to change your name, you must fill - out this form, and: -

    -
      -
    • - Attach a certified copy of your birth certificate - and a copy of your photo ID, and -
    • -
    • - File your form and attachements in the same county - where you live. -
    • -
    -
    -
    -
    -
    - )} - -
    - {prompt.components.map((component, index) => { - return ( - - ); + {!isPreview ? ( + { + updatePrompt(data); + if (onSubmit) { + console.log('Submitting form...'); + onSubmit(data); + } else { + console.warn('Skipping form submission...'); + } })} -
    - - + > + + + ) : ( +
    + +
    + )}
    @@ -251,6 +165,110 @@ export default function Form({ ); } +const FormContents = ({ + context, + prompt, +}: { + context: FormUIContext; + prompt: Prompt; +}) => { + return ( + <> + {false && ( +
    + + Request to Change Name + +
    +
    +
    + + County where you live + + + +
    +
    +
    + +
    +
    +
    + + Your current name + + + + + + + +
    +
    +

    + To ask the court to change your name, you must fill out this + form, and: +

    +
      +
    • + Attach a certified copy of your birth certificate and a copy + of your photo ID, and +
    • +
    • + File your form and attachements in the same county where you + live. +
    • +
    +
    +
    +
    +
    + )} + +
    + {prompt.components.map((component, index) => { + return ( + + ); + })} +
    + + + ); +}; + const PromptComponent = ({ context, component, diff --git a/packages/design/src/FormManager/FormEdit/DraggableList.tsx b/packages/design/src/FormManager/FormEdit/DraggableList.tsx index 8aa15c638..165621cc7 100644 --- a/packages/design/src/FormManager/FormEdit/DraggableList.tsx +++ b/packages/design/src/FormManager/FormEdit/DraggableList.tsx @@ -16,6 +16,7 @@ import { verticalListSortingStrategy, } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; +import { useFormEditStore } from './store'; const SortableItem = ({ id, @@ -26,6 +27,7 @@ const SortableItem = ({ }) => { const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id }); + const context = useFormEditStore(state => state.context); return (
    -
    +
    - ::: - ::: +
    -
    {children}
    +
    {children}
    ); diff --git a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx index 1e25dbb16..c8121e5d3 100644 --- a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx @@ -30,8 +30,8 @@ export default { export const FormEditTest: StoryObj = { play: async ({ canvasElement }) => { - await editFieldLabel(canvasElement, 1, 'First field label'); - await editFieldLabel(canvasElement, 2, 'Second field label'); + await editFieldLabel(canvasElement, 'Pattern 1', 'First field label'); + await editFieldLabel(canvasElement, 'Pattern 2', 'Second field label'); }, }; @@ -39,20 +39,14 @@ export const FormEditAddPattern: StoryObj = { play: async ({ canvasElement }) => { const canvas = within(canvasElement); - // Select the first pattern for editing - const button = (await canvas.findAllByLabelText('Edit form group'))[0]; - await userEvent.click(button); - // Get the initial count of inputs - const initialCount = (await canvas.findAllByLabelText('Edit form group')) - .length; + const initialCount = (await canvas.findAllByRole('textbox')).length; const select = canvas.getByLabelText('Add a pattern'); await userEvent.selectOptions(select, 'Text input'); - const finalCount = (await canvas.findAllByLabelText('Edit form group')) - .length; - expect(finalCount).toEqual(initialCount + 1); + const finalCount = (await canvas.findAllByRole('textbox')).length; + expect(finalCount).toBeGreaterThan(initialCount); }, }; @@ -89,27 +83,29 @@ export const FormEditReorderPattern: StoryObj = { const editFieldLabel = async ( element: HTMLElement, - buttonIndex: number, - fieldLabel: string + currentLabel: string, + updatedLabel: string ) => { const canvas = within(element); - // Click "edit form" button for first field - await userEvent.click( - (await canvas.findAllByLabelText('Edit form group'))[buttonIndex] - ); + // Give focus to the field matching `currentLabel` + await userEvent.click(await canvas.findByLabelText(currentLabel)); // Enter new text for first field const input = canvas.getByLabelText('Field label'); await userEvent.clear(input); - await userEvent.type(input, fieldLabel); + await userEvent.type(input, updatedLabel); // Save the field to the form - await userEvent.click(canvas.getByRole('button', { name: 'Save' })); + await userEvent.click( + canvas.getByRole('button', { + name: 'Exit editing mode for this pattern', + }) + ); waitFor( async () => { - const newLabel = await canvas.getByLabelText(fieldLabel); + const newLabel = await canvas.getByLabelText(updatedLabel); await expect(newLabel).toBeInTheDocument(); }, { interval: 5 } diff --git a/packages/design/src/FormManager/FormEdit/PatternEdit.tsx b/packages/design/src/FormManager/FormEdit/PatternEdit.tsx index e813dde6f..b3a3c5f6b 100644 --- a/packages/design/src/FormManager/FormEdit/PatternEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/PatternEdit.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef } from 'react'; +import React, { useEffect } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { type PatternMap } from '@atj/forms'; @@ -7,87 +7,48 @@ import { useFormEditStore } from './store'; export const PatternEdit = () => { const context = useFormEditStore(state => state.context); const form = useFormEditStore(state => state.form); - const selectedPattern = useFormEditStore(state => state.selectedPattern); - const { setSelectedPattern, updateSelectedPattern } = useFormEditStore( - state => ({ - setSelectedPattern: state.setSelectedPattern, - updateSelectedPattern: state.updateSelectedPattern, - }) - ); + const focusedPattern = useFormEditStore(state => state.focusedPattern); + const { updateSelectedPattern } = useFormEditStore(state => ({ + updateSelectedPattern: state.updateSelectedPattern, + })); const methods = useForm({ - defaultValues: selectedPattern + defaultValues: focusedPattern ? { - [selectedPattern.id]: selectedPattern, + [focusedPattern.id]: focusedPattern, } : {}, }); - const settingsContainerRef = useRef(null); useEffect(() => { - if (selectedPattern === undefined) { + if (focusedPattern === undefined) { return; } methods.reset(); - methods.setValue(selectedPattern.id, selectedPattern); - }, [selectedPattern]); - - // Updates the scroll position of the edit form when it's visible - useEffect(() => { - let frameId: number; - const updatePosition = () => { - if (window.innerWidth > 879) { - if (selectedPattern) { - const element = document.querySelector( - `[data-id="${selectedPattern.id}"]` - ); - if (element && settingsContainerRef.current) { - const rect = element.getBoundingClientRect(); - settingsContainerRef.current.style.top = `${rect.top}px`; - } - } - } - frameId = requestAnimationFrame(updatePosition); - }; - frameId = requestAnimationFrame(updatePosition); - return () => { - cancelAnimationFrame(frameId); - }; - }, [selectedPattern]); + methods.setValue(focusedPattern.id, focusedPattern); + }, [focusedPattern]); - if (!selectedPattern) { + if (!focusedPattern) { return; } - const SelectedEditComponent = context.editComponents[selectedPattern.type]; + const SelectedEditComponent = context.editComponents[focusedPattern.type]; return ( -
    +
    {SelectedEditComponent ? (
    { updateSelectedPattern(formData); })} > -

    Editing "{selectedPattern.data.label}"...

    - -

    - - setSelectedPattern(undefined)} - className="usa-button close-button" - type="submit" - value="Cancel" +

    + -

    +
    ) : null}
    diff --git a/packages/design/src/FormManager/FormEdit/PatternEditActions.tsx b/packages/design/src/FormManager/FormEdit/PatternEditActions.tsx new file mode 100644 index 000000000..805b0016a --- /dev/null +++ b/packages/design/src/FormManager/FormEdit/PatternEditActions.tsx @@ -0,0 +1,92 @@ +import React, { PropsWithChildren, ReactElement } from 'react'; +import { useFormEditStore } from './store'; +import classNames from 'classnames'; + +type PatternEditActionsProps = PropsWithChildren<{ + children?: ReactElement; +}>; + +export const PatternEditActions = ({ children }: PatternEditActionsProps) => { + children; + const context = useFormEditStore(state => state.context); + const { deleteSelectedPattern } = useFormEditStore(state => ({ + deleteSelectedPattern: state.deleteSelectedPattern, + })); + + return ( + <> +
    + + + + + {children ? ( + + {children} + + ) : null} + +
    + + ); +}; diff --git a/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx b/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx index 262727262..ee74bca4d 100644 --- a/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx +++ b/packages/design/src/FormManager/FormEdit/PreviewPattern.tsx @@ -2,48 +2,32 @@ import React from 'react'; import { PatternComponent } from '../../Form'; import { useFormEditStore } from './store'; +import { PatternEdit } from './PatternEdit'; export const PreviewPattern: PatternComponent = function PreviewPattern(props) { const context = useFormEditStore(state => state.context); - const selectedPattern = useFormEditStore(state => state.selectedPattern); - const handleEditClick = useFormEditStore(state => state.handleEditClick); + const focusedPattern = useFormEditStore(state => state.focusedPattern); + const setFocus = useFormEditStore(state => state.setFocus); - const isSelected = selectedPattern?.id === props._patternId; + const isSelected = focusedPattern?.id === props._patternId; const divClassNames = isSelected ? 'form-group-row field-selected' : 'form-group-row'; const Component = context.components[props.type]; const EditComponent = context.editComponents[props.type]; + const selected = focusedPattern?.id === props._patternId; return ( -
    - - - {EditComponent ? ( - - ) : null} - +
    { + if (EditComponent) { + setFocus(props._patternId); + } + }} + > + {selected ? : }
    ); }; diff --git a/packages/design/src/FormManager/FormEdit/index.tsx b/packages/design/src/FormManager/FormEdit/index.tsx index 0e71c3b50..d773f095a 100644 --- a/packages/design/src/FormManager/FormEdit/index.tsx +++ b/packages/design/src/FormManager/FormEdit/index.tsx @@ -3,8 +3,9 @@ import React, { useEffect } from 'react'; import { Blueprint } from '@atj/forms'; import { type FormService } from '@atj/form-service'; +import ManagerNav from '../ManagerNav'; + import { AddPattern } from './AddPattern'; -import { PatternEdit } from './PatternEdit'; import { PreviewForm } from './Preview'; import { FormEditProvider, useFormEditStore } from './store'; import { type FormEditUIContext } from './types'; @@ -25,36 +26,34 @@ export default function FormEdit({ const form = result.data; return ( -
    + <> +

    Edit form

    Your form has been imported for web delivery.

    formService.saveForm(formId, form)} /> -
    + ); } const EditForm = ({ saveForm }: { saveForm: (form: Blueprint) => void }) => { - const { form, selectedPattern } = useFormEditStore(); + const { form } = useFormEditStore(); useEffect(() => { saveForm(form); }, [form]); return ( -
    +
    -
    +
    -
    - -
    ); diff --git a/packages/design/src/FormManager/FormEdit/store.tsx b/packages/design/src/FormManager/FormEdit/store.tsx index 02d4ed653..546b2193b 100644 --- a/packages/design/src/FormManager/FormEdit/store.tsx +++ b/packages/design/src/FormManager/FormEdit/store.tsx @@ -31,14 +31,15 @@ export const FormEditProvider = (props: { type FormEditState = { context: FormEditUIContext; form: Blueprint; - selectedPattern?: Pattern; + focusedPattern?: Pattern; availablePatterns: { patternType: string; displayName: string; }[]; addPattern: (patternType: string) => void; - handleEditClick: (patternId: PatternId) => void; + deleteSelectedPattern: () => void; + setFocus: (patternId: PatternId) => void; setSelectedPattern: (element?: Pattern) => void; updatePattern: (data: Pattern) => void; updateSelectedPattern: (formData: PatternMap) => void; @@ -64,18 +65,28 @@ const createFormEditStore = ({ const state = get(); const builder = new BlueprintBuilder(state.form); const newPattern = builder.addPattern(state.context.config, patternType); - set({ form: builder.form, selectedPattern: newPattern }); + set({ form: builder.form, focusedPattern: newPattern }); }, - handleEditClick: (patternId: PatternId) => { + deleteSelectedPattern: () => { const state = get(); - if (state.selectedPattern?.id === patternId) { - set({ selectedPattern: undefined }); - } else { - const elementToSet = getPattern(state.form, patternId); - set({ selectedPattern: elementToSet }); + if (state.focusedPattern === undefined) { + return; + } + const builder = new BlueprintBuilder(state.form); + console.log('delete', state.focusedPattern.id); + builder.removePattern(state.context.config, state.focusedPattern.id); + set({ focusedPattern: undefined, form: builder.form }); + console.log(builder.form); + }, + setFocus: (patternId: PatternId) => { + const state = get(); + if (state.focusedPattern?.id === patternId) { + return; } + const elementToSet = getPattern(state.form, patternId); + set({ focusedPattern: elementToSet }); }, - setSelectedPattern: selectedPattern => set({ selectedPattern }), + setSelectedPattern: focusedPattern => set({ focusedPattern }), updatePattern: (pattern: Pattern) => { const state = get(); const builder = new BlueprintBuilder(state.form); @@ -87,23 +98,23 @@ const createFormEditStore = ({ } ); if (success) { - set({ form: builder.form, selectedPattern: undefined }); + set({ form: builder.form, focusedPattern: undefined }); } }, updateSelectedPattern: (formData: PatternMap) => { const state = get(); - if (state.selectedPattern === undefined) { + if (state.focusedPattern === undefined) { console.warn('No selected element'); return; } const builder = new BlueprintBuilder(state.form); const success = builder.updatePattern( state.context.config, - state.selectedPattern, + state.focusedPattern, formData ); if (success) { - set({ form: builder.form, selectedPattern: undefined }); + set({ form: builder.form, focusedPattern: undefined }); } }, })); diff --git a/packages/design/src/FormManager/FormPreview/index.tsx b/packages/design/src/FormManager/FormPreview/index.tsx index 7dd933f81..cb429bad2 100644 --- a/packages/design/src/FormManager/FormPreview/index.tsx +++ b/packages/design/src/FormManager/FormPreview/index.tsx @@ -13,7 +13,7 @@ export default function FormPreview({ form: Blueprint; }) { const session = createFormSession(form); - return
    ; + return ; } export const FormPreviewById = ({ diff --git a/packages/design/src/FormManager/ManagerNav.tsx b/packages/design/src/FormManager/ManagerNav.tsx new file mode 100644 index 000000000..85efd6f05 --- /dev/null +++ b/packages/design/src/FormManager/ManagerNav.tsx @@ -0,0 +1,43 @@ +import React from 'react'; + +export default function ManagerNav() { + return ( +
    +
      +
    1. + + Upload completed + +
    2. +
    3. + + Create completed + +
    4. +
    5. + Configure +
    6. +
    7. + + Publish not completed + +
    8. +
    + {/*
      + {(isPreviewPage || isEditPage || isImportDocuments) && ( +
    • + + {isImportDocuments ? 'Back to Edit Page' : 'Edit'} + +
    • + )} +
    • + View all Forms +
    • +
    */} +
    + ); +} diff --git a/packages/design/src/FormManager/import-document.tsx b/packages/design/src/FormManager/import-document.tsx index 66f85ace2..84c7d81a4 100644 --- a/packages/design/src/FormManager/import-document.tsx +++ b/packages/design/src/FormManager/import-document.tsx @@ -1,19 +1,19 @@ import React from 'react'; -import { FormConfig } from '@atj/forms'; import { type FormService } from '@atj/form-service'; +import { type FormUIContext } from '../Form'; import DocumentImporter from './DocumentImporter'; -import InnerPageTopNav from './internalPageTopNav'; +import ManagerNav from './ManagerNav'; export const FormDocumentImport = ({ baseUrl, - config, + context, formId, formService, }: { baseUrl: string; - config: FormConfig; + context: FormUIContext; formId: string; formService: FormService; }) => { @@ -24,9 +24,9 @@ export const FormDocumentImport = ({ } return ( <> - + -
    -
      - {(isPreviewPage || isEditPage || isImportDocuments) && ( -
    • - - {isImportDocuments ? 'Back to Edit Page' : 'Edit'} - -
    • - )} - {/* {(isPreviewPage || isEditPage) && ( -
    • - Preview -
    • - )} */} -
    • - View all Forms -
    • -
    -
    -
    - ); -} diff --git a/packages/design/src/config/edit/InputPatternEdit.tsx b/packages/design/src/config/edit/InputPatternEdit.tsx index 111f9abee..a1688de80 100644 --- a/packages/design/src/config/edit/InputPatternEdit.tsx +++ b/packages/design/src/config/edit/InputPatternEdit.tsx @@ -3,12 +3,13 @@ import { useFormContext } from 'react-hook-form'; import { type InputPattern } from '@atj/forms/src/patterns/input'; import { PatternEditComponent } from '../../FormManager/FormEdit/types'; +import { PatternEditActions } from '../../FormManager/FormEdit/PatternEditActions'; const InputPatternEdit: PatternEditComponent = ({ pattern }) => { const { register } = useFormContext(); return ( -
    -
    +
    +
    @@ -20,7 +21,7 @@ const InputPatternEdit: PatternEditComponent = ({ pattern }) => { type="text" >
    -
    +
    @@ -31,7 +32,7 @@ const InputPatternEdit: PatternEditComponent = ({ pattern }) => { {...register(`${pattern.id}.data.default`)} >
    -
    +
    @@ -42,7 +43,7 @@ const InputPatternEdit: PatternEditComponent = ({ pattern }) => { {...register(`${pattern.id}.data.maxLength`)} >
    -
    +
    @@ -54,21 +55,25 @@ const InputPatternEdit: PatternEditComponent = ({ pattern }) => {
    -
    -
    - - -
    +
    + + + + + +
    ); diff --git a/packages/design/src/config/edit/SequencePatternEdit.tsx b/packages/design/src/config/edit/SequencePatternEdit.tsx index 11cf6ccfa..927eea1f5 100644 --- a/packages/design/src/config/edit/SequencePatternEdit.tsx +++ b/packages/design/src/config/edit/SequencePatternEdit.tsx @@ -44,9 +44,9 @@ const SortableItem = ({ id, form, pattern, context }: ItemProps) => { return (
  • -
    +
    = ({ items={patterns} strategy={verticalListSortingStrategy} > -
      +
        diff --git a/packages/forms/src/builder/builder.test.ts b/packages/forms/src/builder/builder.test.ts index 2efb176ec..81b03255d 100644 --- a/packages/forms/src/builder/builder.test.ts +++ b/packages/forms/src/builder/builder.test.ts @@ -23,6 +23,31 @@ describe('form builder', () => { newBuilder.form.patterns[newBuilder.form.root].data.patterns ).toEqual([...initial.patterns[initial.root].data.patterns, newPattern.id]); }); + + it('removePattern removes pattern and sequence reference', () => { + const initial = createTestBlueprint(); + const builder = new BlueprintBuilder(initial); + builder.removePattern(defaultFormConfig, 'element-2'); + expect(builder.form.patterns).toEqual({ + root: { + type: 'sequence', + id: 'root', + data: { + patterns: ['element-1'], + }, + } satisfies SequencePattern, + 'element-1': { + type: 'input', + id: 'element-1', + data: { + label: 'Pattern 1', + initial: '', + required: true, + maxLength: 128, + }, + } satisfies InputPattern, + }); + }); }); export const createTestBlueprint = () => { diff --git a/packages/forms/src/builder/index.ts b/packages/forms/src/builder/index.ts index adacdf65f..38eac1f77 100644 --- a/packages/forms/src/builder/index.ts +++ b/packages/forms/src/builder/index.ts @@ -3,13 +3,15 @@ import { type FormConfig, type FormSummary, type Pattern, + type PatternId, type PatternMap, addDocument, + addPatternToRoot, + createPattern, nullBlueprint, + removePatternFromBlueprint, updateFormSummary, updatePatternFromFormData, - createPattern, - addPatternToRoot, } from '..'; export class BlueprintBuilder { @@ -38,6 +40,10 @@ export class BlueprintBuilder { return pattern; } + removePattern(config: FormConfig, id: PatternId) { + this._bp = removePatternFromBlueprint(config, this._bp, id); + } + updatePattern(config: FormConfig, pattern: Pattern, formData: PatternMap) { const updatedBlueprint = updatePatternFromFormData( config, diff --git a/packages/forms/src/index.ts b/packages/forms/src/index.ts index e471939e2..838fda609 100644 --- a/packages/forms/src/index.ts +++ b/packages/forms/src/index.ts @@ -6,6 +6,7 @@ import { type PatternId, type PatternMap, getPatternMap, + removeChildPattern, } from './pattern'; export * from './builder'; @@ -216,20 +217,48 @@ export const updatePattern = (form: Blueprint, pattern: Pattern): Blueprint => { }; }; -export const addFormOutput = (form: Blueprint, document: FormOutput) => { +export const addFormOutput = ( + form: Blueprint, + document: FormOutput +): Blueprint => { return { ...form, outputs: [...form.outputs, document], }; }; -export const getPattern = (form: Blueprint, id: PatternId) => { +export const getPattern = (form: Blueprint, id: PatternId): Pattern => { return form.patterns[id]; }; -export const updateFormSummary = (form: Blueprint, summary: FormSummary) => { +export const updateFormSummary = ( + form: Blueprint, + summary: FormSummary +): Blueprint => { return { ...form, summary, }; }; + +export const removePatternFromBlueprint = ( + config: FormConfig, + blueprint: Blueprint, + id: PatternId +) => { + // Iterate over each pattern in the blueprint, and remove the target pattern + // if it is a child. + const patterns = Object.values(blueprint.patterns).reduce( + (patterns, pattern) => { + patterns[pattern.id] = removeChildPattern(config, pattern, id); + return patterns; + }, + {} as PatternMap + ); + // Remove the pattern itself + delete patterns[id]; + return { + ...blueprint, + patterns, + }; +}; diff --git a/packages/forms/src/pattern.ts b/packages/forms/src/pattern.ts index fedf8a26f..5676b7e9c 100644 --- a/packages/forms/src/pattern.ts +++ b/packages/forms/src/pattern.ts @@ -24,6 +24,11 @@ type ParsePatternConfigData = ( patternData: unknown ) => Result; +type RemoveChildPattern

        = ( + pattern: P, + patternId: PatternId +) => P; + export const getPattern: GetPattern = (form, patternId) => { return form.patterns[patternId]; }; @@ -40,6 +45,7 @@ export type PatternConfig< pattern: ThisPattern, patterns: Record ) => Pattern[]; + removeChildPattern?: RemoveChildPattern; createPrompt: CreatePrompt; }; @@ -139,3 +145,15 @@ export const createPattern = ( data: config.patterns[patternType].initial, }; }; + +export const removeChildPattern = ( + config: FormConfig, + pattern: Pattern, + id: PatternId +) => { + const remove = config.patterns[pattern.type].removeChildPattern; + if (!remove) { + return pattern; + } + return remove(pattern, id); +}; diff --git a/packages/forms/src/patterns/fieldset.ts b/packages/forms/src/patterns/fieldset.ts index 58e89179b..a199bab5e 100644 --- a/packages/forms/src/patterns/fieldset.ts +++ b/packages/forms/src/patterns/fieldset.ts @@ -30,6 +30,21 @@ export const fieldsetConfig: PatternConfig = { (patternId: string) => patterns[patternId] ); }, + removeChildPattern(pattern, patternId) { + const newPatterns = pattern.data.patterns.filter( + (id: string) => patternId !== id + ); + if (newPatterns.length === pattern.data.patterns.length) { + return pattern; + } + return { + ...pattern, + data: { + ...pattern.data, + patterns: newPatterns, + }, + }; + }, createPrompt(config, session, pattern, options) { const children = pattern.data.patterns.map((patternId: string) => { const childPattern = getPattern(session.form, patternId); diff --git a/packages/forms/src/patterns/sequence.ts b/packages/forms/src/patterns/sequence.ts index fff149f08..aee5a7db9 100644 --- a/packages/forms/src/patterns/sequence.ts +++ b/packages/forms/src/patterns/sequence.ts @@ -28,6 +28,21 @@ export const sequenceConfig: PatternConfig = { (patternId: string) => patterns[patternId] ); }, + removeChildPattern(pattern, patternId) { + const newPatterns = pattern.data.patterns.filter( + (id: string) => patternId !== id + ); + if (newPatterns.length === pattern.data.patterns.length) { + return pattern; + } + return { + ...pattern, + data: { + ...pattern.data, + patterns: newPatterns, + }, + }; + }, createPrompt(config, session, pattern, options) { const children = pattern.data.patterns.map((patternId: string) => { const childPattern = getPattern(session.form, patternId);