From fd303051fd8d918298bd4bdb03108fb2edde7ea0 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 14:42:16 -0400 Subject: [PATCH 01/24] move files to studio-ui --- package-lock.json | 3852 +++++++---------- .../__mocks__/virtual_yext-studio.ts | 0 .../__mocks__/zustand.ts | 0 .../{studio => studio-ui}/babel.config.cjs | 0 packages/{studio => studio-ui}/jest.config.ts | 0 packages/studio-ui/package.json | 63 + packages/{studio => studio-ui}/src/App.tsx | 2 + .../src/components/ActionsBar.tsx | 0 .../components/ActiveComponentPropEditors.tsx | 0 .../src/components/ActivePagePanel.tsx | 0 .../src/components/AddElementButton.tsx | 0 .../AddElementMenu/AddElementMenu.tsx | 0 .../AddElementMenu/ElementSelector.tsx | 0 .../AddPageButton/AddPageButton.tsx | 0 .../AddPageButton/AddPageContext.ts | 0 .../AddPageButton/AddPageContextProvider.tsx | 0 .../AddPageButton/BasicPageDataCollector.tsx | 0 .../src/components/AddPageButton/FlowStep.ts | 0 .../AddPageButton/PageTypeSelector.tsx | 0 .../AddPageButton/StreamScopeCollector.tsx | 0 .../src/components/ArrayPropEditor.tsx | 0 .../src/components/ComponentKindIcon.tsx | 0 .../src/components/ComponentNode.tsx | 0 .../src/components/ComponentPreview.tsx | 0 .../src/components/ComponentTree.tsx | 0 .../src/components/ComponentTreePreview.tsx | 0 .../src/components/DeployButton.tsx | 0 .../src/components/EditorSidebar.tsx | 0 .../src/components/EntityPicker.tsx | 0 .../src/components/ErrorComponentPreview.tsx | 0 .../components/FieldPicker/FieldDropdown.tsx | 0 .../components/FieldPicker/FieldPicker.tsx | 0 .../FieldPicker/FieldPickerInput.tsx | 0 .../src/components/Highlighter.tsx | 0 .../src/components/HighlightingContainer.tsx | 0 .../src/components/IFramePortal.tsx | 0 .../src/components/InfoButton.tsx | 0 .../src/components/LeftSidebar.tsx | 0 .../src/components/ModuleActions.tsx | 0 .../ModuleActions/ActionIconWrapper.tsx | 0 .../ModuleActions/CreateModuleButton.tsx | 0 .../ModuleActions/DeleteModuleButton.tsx | 0 .../ModuleActions/DetachModuleButton.tsx | 0 .../ModuleActions/EditModuleButton.tsx | 0 .../ModuleActions/ModuleEditActions.tsx | 0 .../src/components/ModulePreview.tsx | 0 .../src/components/NumberPropInput.tsx | 0 .../src/components/ObjectPropEditor.tsx | 0 .../src/components/OpenLivePreviewButton.tsx | 0 .../PageSettingsButton/EntityPageModal.tsx | 0 .../PageSettingsButton/PageSettingsButton.tsx | 0 .../PageSettingsButton/StaticPageModal.tsx | 0 .../src/components/PreviewPanel.tsx | 0 .../components/PreviewWithUseComponents.tsx | 0 .../src/components/PropEditor.tsx | 0 .../src/components/PropEditors.tsx | 0 .../src/components/PropInput.tsx | 0 .../src/components/PropsPanel.tsx | 0 .../src/components/RemovableElement.tsx | 0 .../src/components/RemoveElementButton.tsx | 0 .../src/components/RemovePageButton.tsx | 0 .../src/components/RepeaterPanel.tsx | 0 .../src/components/RepeaterPreview.tsx | 0 .../src/components/SaveButton.tsx | 0 .../src/components/SiteSettingsPanel.tsx | 0 .../src/components/StringPropInput.tsx | 0 .../src/components/TailwindPropInput.tsx | 0 .../src/components/Toast.tsx | 0 .../src/components/UndefinedMenuButton.tsx | 0 .../src/components/UndoRedo.tsx | 0 .../src/components/UnionPropInput.tsx | 0 .../components/Viewport/ViewportButton.tsx | 0 .../src/components/Viewport/ViewportMenu.tsx | 0 .../src/components/Viewport/defaults.tsx | 0 .../src/components/common/ButtonWithModal.tsx | 0 .../src/components/common/ColorPicker.tsx | 0 .../src/components/common/DialogModal.tsx | 0 .../src/components/common/Divider.tsx | 0 .../src/components/common/ErrorBoundary.tsx | 0 .../src/components/common/FormModal.tsx | 0 .../src/components/common/MessageBubble.tsx | 0 .../src/components/common/Modal.tsx | 0 .../src/components/common/OptionPicker.tsx | 0 .../src/components/common/Toggle.tsx | 0 .../components/common/renderIconForType.tsx | 0 .../index.d.ts => studio-ui/src/global.d.ts} | 0 .../src/hooks/useActiveComponent.tsx | 0 .../src/hooks/useActiveComponentName.tsx | 0 .../src/hooks/useActiveComponentWithProps.tsx | 0 .../src/hooks/useComposedCssClasses.tsx | 0 .../src/hooks/useFuncWithZundoBatching.tsx | 0 .../src/hooks/useHasChanges.ts | 0 .../src/hooks/useImportedComponents.tsx | 0 .../src/hooks/useOnPropChange.tsx | 0 .../src/hooks/usePreviewProps.tsx | 0 .../src/hooks/useRawSiteSettings.tsx | 0 .../src/icons/addcomponent.svg | 0 .../{studio => studio-ui}/src/icons/box.svg | 0 .../{studio => studio-ui}/src/icons/check.svg | 0 .../src/icons/container.svg | 0 .../src/icons/content.svg | 0 .../src/icons/deletemodule.svg | 0 .../src/icons/detachmodule.svg | 0 .../src/icons/editmodule.svg | 0 .../src/icons/ellipses.svg | 0 .../{studio => studio-ui}/src/icons/embed.svg | 0 .../{studio => studio-ui}/src/icons/gear.svg | 0 .../{studio => studio-ui}/src/icons/globe.svg | 0 .../src/icons/hexagon.svg | 0 .../{studio => studio-ui}/src/icons/info.svg | 0 .../{studio => studio-ui}/src/icons/plus.svg | 0 .../src/icons/sliders.svg | 0 .../{studio => studio-ui}/src/icons/undo.svg | 0 .../src/icons/vector.svg | 0 .../src/icons/viewport.svg | 0 .../{studio => studio-ui}/src/icons/x.svg | 0 .../src/icons/yextfavicon.svg | 0 packages/studio-ui/src/index.ts | 2 + .../src/messaging/sendMessage.ts | 0 .../src/store/StudioActions.ts | 0 .../store/StudioActions/AddComponentAction.ts | 0 .../CreateComponentStateAction.ts | 0 .../store/StudioActions/CreatePageAction.ts | 0 .../StudioActions/GenerateTestDataAction.ts | 0 .../StudioActions/ImportComponentAction.ts | 0 .../StudioActions/UpdateActivePageAction.ts | 0 .../src/store/createModuleAction.ts | 0 .../src/store/hotReloadStore.ts | 0 .../src/store/models/DOMRectProperties.ts | 0 .../src/store/models/ImportType.ts | 0 .../src/store/models/StudioStore.ts | 0 .../store/models/slices/FileMetadataSlice.ts | 0 .../store/models/slices/PagePreviewSlice.ts | 0 .../src/store/models/slices/PageSlice.ts | 0 .../store/models/slices/PreviousSaveSlice.ts | 0 .../store/models/slices/SiteSettingsSlice.ts | 0 .../store/models/slices/StudioConfigSlice.ts | 0 .../store/models/slices/StudioEnvDataSlice.ts | 0 .../src/store/models/utils.ts | 0 .../store/slices/createFileMetadataSlice.ts | 0 .../store/slices/createPagePreviewSlice.ts | 0 .../store/slices/createPreviousSaveSlice.ts | 0 .../store/slices/createSiteSettingsSlice.ts | 0 .../store/slices/createStudioConfigSlice.ts | 0 .../store/slices/createStudioEnvDataSlice.ts | 0 .../src/store/slices/pages/createPageSlice.ts | 0 .../slices/pages/detachAllModuleInstances.ts | 0 .../src/store/useStudioStore.ts | 0 .../src/store/useTemporalStore.ts | 0 .../src/store/zundoMiddleware.ts | 0 .../src/tailwind-directives.css | 0 .../src/utils/PageDataValidator.ts | 0 .../src/utils/PropValueHelpers.ts | 0 .../src/utils/StreamScopeParser.ts | 0 .../src/utils/TemplateExpressionFormatter.ts | 0 .../utils/createIsSupportedPropMetadata.ts | 0 .../src/utils/dynamicImportFromBrowser.ts | 0 .../src/utils/filterEntityData.ts | 0 .../src/utils/generateTailwindSafelist.ts | 0 .../src/utils/getFunctionComponent.ts | 0 .../src/utils/getPropsForPreview.ts | 0 .../src/utils/rectToJson.ts | 0 .../src/utils/removeTopLevelFragments.ts | 0 .../tests/__fixtures__/componentStates.ts | 0 .../__fixtures__/mockStoreNestedComponents.ts | 0 .../tests/__mocks__/Banner.tsx | 0 .../tests/__mocks__/Container.tsx | 0 .../tests/__mocks__/Panel.tsx | 0 .../tests/__mocks__/entityFile.json | 0 .../tests/__mocks__/mockLocalData.json | 0 .../tests/__mocks__/siteSettings.ts | 0 .../tests/__setup__/setup-env.ts | 0 .../tests/__setup__/svgTransformer.cjs | 0 .../tests/__utils__/helpers.ts | 0 .../__utils__/mockActiveComponentState.ts | 0 .../tests/__utils__/mockActivePage.ts | 0 .../tests/__utils__/mockActivePageTree.ts | 0 .../tests/__utils__/mockPageSliceState.ts | 0 .../__utils__/mockRepeaterActiveComponent.ts | 0 .../tests/__utils__/mockStore.ts | 0 .../ActiveComponentPropEditors.test.tsx | 0 .../tests/components/ActivePagePanel.test.tsx | 0 .../components/AddElementButton.test.tsx | 0 .../tests/components/AddElementMenu.test.tsx | 0 .../AddPageFlow/AddPageButton.test.tsx | 0 .../tests/components/ArrayPropEditor.test.tsx | 0 .../tests/components/ComponentTree.test.tsx | 0 .../components/CreateModuleButton.test.tsx | 0 .../tests/components/EntityPicker.test.tsx | 0 .../tests/components/ErrorBoundary.test.tsx | 0 .../FieldPicker/FieldPicker.test.tsx | 0 .../tests/components/Highlighter.test.tsx | 0 .../tests/components/InfoButton.test.tsx | 0 .../DeleteModuleButton.test.tsx | 0 .../EditModuleButton.test.tsx | 0 .../components/OpenLivePreviewButton.test.tsx | 0 .../components/PageSettingsButton.test.tsx | 0 .../tests/components/PreviewPanel.test.tsx | 0 .../tests/components/PropEditor.test.tsx | 0 .../tests/components/PropInput.test.tsx | 0 .../tests/components/PropsPanel.test.tsx | 0 .../components/RemoveElementButton.test.tsx | 0 .../components/RemovePageButton.test.tsx | 0 .../tests/components/RepeaterPanel.test.tsx | 0 .../tests/components/SaveButton.test.tsx | 0 .../components/SiteSettingsPanel.test.tsx | 0 .../components/TailwindPropInput.test.tsx | 0 .../components/UndefinedMenuButton.test.tsx | 0 .../tests/components/UndoRedo.test.tsx | 0 .../tests/components/ViewportButton.test.jsx | 0 .../hooks/useImportedComponents.test.tsx | 0 .../StudioActions/AddComponentAction.test.ts | 0 .../CreateComponentStateAction.test.ts | 0 .../GenerateTestDataAction.test.ts | 0 .../UpdateActivePageAction.test.ts | 0 .../activeComponentActions.test.ts | 0 .../store/StudioActions/createPage.test.ts | 0 .../detachModuleInstance.test.ts | 0 .../refreshActivePageEntities.test.ts | 0 .../StudioActions/removeComponent.test.ts | 0 .../store/StudioActions/saveChanges.test.ts | 0 .../updateActiveComponentProps.test.ts | 0 .../createFileMetadataSlice.test.tsx | 0 .../tests/store/createModule.test.ts | 0 .../activeEntityActions.test.ts | 0 .../createPageSlice/activePageActions.test.ts | 0 .../detachAllModuleInstances.test.ts | 0 .../store/createPageSlice/pageActions.test.ts | 0 .../pageComponentActions.test.ts | 0 .../tests/store/createSiteSettings.test.ts | 0 .../{studio => studio-ui}/tests/tsconfig.json | 0 .../tests/utils/PageDataValidator.test.ts | 0 .../tests/utils/PropValueHelpers.test.ts | 0 .../utils/TemplateExpressionFormatter.test.ts | 0 .../tests/utils/filterEntityData.test.tsx | 0 .../tests/utils/getPropsForPreview.test.ts | 0 .../utils/removeTopLevelFragments.test.ts | 0 packages/studio-ui/tsconfig.json | 22 + packages/studio/.prettierignore | 4 - packages/studio/package.json | 37 +- packages/studio/src/main.tsx | 2 - packages/studio/{ => src}/types.ts | 0 packages/studio/tsconfig.json | 5 +- 243 files changed, 1581 insertions(+), 2408 deletions(-) rename packages/{studio => studio-ui}/__mocks__/virtual_yext-studio.ts (100%) rename packages/{studio => studio-ui}/__mocks__/zustand.ts (100%) rename packages/{studio => studio-ui}/babel.config.cjs (100%) rename packages/{studio => studio-ui}/jest.config.ts (100%) create mode 100644 packages/studio-ui/package.json rename packages/{studio => studio-ui}/src/App.tsx (88%) rename packages/{studio => studio-ui}/src/components/ActionsBar.tsx (100%) rename packages/{studio => studio-ui}/src/components/ActiveComponentPropEditors.tsx (100%) rename packages/{studio => studio-ui}/src/components/ActivePagePanel.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddElementButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddElementMenu/AddElementMenu.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddElementMenu/ElementSelector.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/AddPageButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/AddPageContext.ts (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/AddPageContextProvider.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/BasicPageDataCollector.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/FlowStep.ts (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/PageTypeSelector.tsx (100%) rename packages/{studio => studio-ui}/src/components/AddPageButton/StreamScopeCollector.tsx (100%) rename packages/{studio => studio-ui}/src/components/ArrayPropEditor.tsx (100%) rename packages/{studio => studio-ui}/src/components/ComponentKindIcon.tsx (100%) rename packages/{studio => studio-ui}/src/components/ComponentNode.tsx (100%) rename packages/{studio => studio-ui}/src/components/ComponentPreview.tsx (100%) rename packages/{studio => studio-ui}/src/components/ComponentTree.tsx (100%) rename packages/{studio => studio-ui}/src/components/ComponentTreePreview.tsx (100%) rename packages/{studio => studio-ui}/src/components/DeployButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/EditorSidebar.tsx (100%) rename packages/{studio => studio-ui}/src/components/EntityPicker.tsx (100%) rename packages/{studio => studio-ui}/src/components/ErrorComponentPreview.tsx (100%) rename packages/{studio => studio-ui}/src/components/FieldPicker/FieldDropdown.tsx (100%) rename packages/{studio => studio-ui}/src/components/FieldPicker/FieldPicker.tsx (100%) rename packages/{studio => studio-ui}/src/components/FieldPicker/FieldPickerInput.tsx (100%) rename packages/{studio => studio-ui}/src/components/Highlighter.tsx (100%) rename packages/{studio => studio-ui}/src/components/HighlightingContainer.tsx (100%) rename packages/{studio => studio-ui}/src/components/IFramePortal.tsx (100%) rename packages/{studio => studio-ui}/src/components/InfoButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/LeftSidebar.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions/ActionIconWrapper.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions/CreateModuleButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions/DeleteModuleButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions/DetachModuleButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions/EditModuleButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModuleActions/ModuleEditActions.tsx (100%) rename packages/{studio => studio-ui}/src/components/ModulePreview.tsx (100%) rename packages/{studio => studio-ui}/src/components/NumberPropInput.tsx (100%) rename packages/{studio => studio-ui}/src/components/ObjectPropEditor.tsx (100%) rename packages/{studio => studio-ui}/src/components/OpenLivePreviewButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/PageSettingsButton/EntityPageModal.tsx (100%) rename packages/{studio => studio-ui}/src/components/PageSettingsButton/PageSettingsButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/PageSettingsButton/StaticPageModal.tsx (100%) rename packages/{studio => studio-ui}/src/components/PreviewPanel.tsx (100%) rename packages/{studio => studio-ui}/src/components/PreviewWithUseComponents.tsx (100%) rename packages/{studio => studio-ui}/src/components/PropEditor.tsx (100%) rename packages/{studio => studio-ui}/src/components/PropEditors.tsx (100%) rename packages/{studio => studio-ui}/src/components/PropInput.tsx (100%) rename packages/{studio => studio-ui}/src/components/PropsPanel.tsx (100%) rename packages/{studio => studio-ui}/src/components/RemovableElement.tsx (100%) rename packages/{studio => studio-ui}/src/components/RemoveElementButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/RemovePageButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/RepeaterPanel.tsx (100%) rename packages/{studio => studio-ui}/src/components/RepeaterPreview.tsx (100%) rename packages/{studio => studio-ui}/src/components/SaveButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/SiteSettingsPanel.tsx (100%) rename packages/{studio => studio-ui}/src/components/StringPropInput.tsx (100%) rename packages/{studio => studio-ui}/src/components/TailwindPropInput.tsx (100%) rename packages/{studio => studio-ui}/src/components/Toast.tsx (100%) rename packages/{studio => studio-ui}/src/components/UndefinedMenuButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/UndoRedo.tsx (100%) rename packages/{studio => studio-ui}/src/components/UnionPropInput.tsx (100%) rename packages/{studio => studio-ui}/src/components/Viewport/ViewportButton.tsx (100%) rename packages/{studio => studio-ui}/src/components/Viewport/ViewportMenu.tsx (100%) rename packages/{studio => studio-ui}/src/components/Viewport/defaults.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/ButtonWithModal.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/ColorPicker.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/DialogModal.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/Divider.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/ErrorBoundary.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/FormModal.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/MessageBubble.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/Modal.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/OptionPicker.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/Toggle.tsx (100%) rename packages/{studio => studio-ui}/src/components/common/renderIconForType.tsx (100%) rename packages/{studio/src/index.d.ts => studio-ui/src/global.d.ts} (100%) rename packages/{studio => studio-ui}/src/hooks/useActiveComponent.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useActiveComponentName.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useActiveComponentWithProps.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useComposedCssClasses.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useFuncWithZundoBatching.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useHasChanges.ts (100%) rename packages/{studio => studio-ui}/src/hooks/useImportedComponents.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useOnPropChange.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/usePreviewProps.tsx (100%) rename packages/{studio => studio-ui}/src/hooks/useRawSiteSettings.tsx (100%) rename packages/{studio => studio-ui}/src/icons/addcomponent.svg (100%) rename packages/{studio => studio-ui}/src/icons/box.svg (100%) rename packages/{studio => studio-ui}/src/icons/check.svg (100%) rename packages/{studio => studio-ui}/src/icons/container.svg (100%) rename packages/{studio => studio-ui}/src/icons/content.svg (100%) rename packages/{studio => studio-ui}/src/icons/deletemodule.svg (100%) rename packages/{studio => studio-ui}/src/icons/detachmodule.svg (100%) rename packages/{studio => studio-ui}/src/icons/editmodule.svg (100%) rename packages/{studio => studio-ui}/src/icons/ellipses.svg (100%) rename packages/{studio => studio-ui}/src/icons/embed.svg (100%) rename packages/{studio => studio-ui}/src/icons/gear.svg (100%) rename packages/{studio => studio-ui}/src/icons/globe.svg (100%) rename packages/{studio => studio-ui}/src/icons/hexagon.svg (100%) rename packages/{studio => studio-ui}/src/icons/info.svg (100%) rename packages/{studio => studio-ui}/src/icons/plus.svg (100%) rename packages/{studio => studio-ui}/src/icons/sliders.svg (100%) rename packages/{studio => studio-ui}/src/icons/undo.svg (100%) rename packages/{studio => studio-ui}/src/icons/vector.svg (100%) rename packages/{studio => studio-ui}/src/icons/viewport.svg (100%) rename packages/{studio => studio-ui}/src/icons/x.svg (100%) rename packages/{studio => studio-ui}/src/icons/yextfavicon.svg (100%) create mode 100644 packages/studio-ui/src/index.ts rename packages/{studio => studio-ui}/src/messaging/sendMessage.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions/AddComponentAction.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions/CreateComponentStateAction.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions/CreatePageAction.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions/GenerateTestDataAction.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions/ImportComponentAction.ts (100%) rename packages/{studio => studio-ui}/src/store/StudioActions/UpdateActivePageAction.ts (100%) rename packages/{studio => studio-ui}/src/store/createModuleAction.ts (100%) rename packages/{studio => studio-ui}/src/store/hotReloadStore.ts (100%) rename packages/{studio => studio-ui}/src/store/models/DOMRectProperties.ts (100%) rename packages/{studio => studio-ui}/src/store/models/ImportType.ts (100%) rename packages/{studio => studio-ui}/src/store/models/StudioStore.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/FileMetadataSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/PagePreviewSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/PageSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/PreviousSaveSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/SiteSettingsSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/StudioConfigSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/slices/StudioEnvDataSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/models/utils.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/createFileMetadataSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/createPagePreviewSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/createPreviousSaveSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/createSiteSettingsSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/createStudioConfigSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/createStudioEnvDataSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/pages/createPageSlice.ts (100%) rename packages/{studio => studio-ui}/src/store/slices/pages/detachAllModuleInstances.ts (100%) rename packages/{studio => studio-ui}/src/store/useStudioStore.ts (100%) rename packages/{studio => studio-ui}/src/store/useTemporalStore.ts (100%) rename packages/{studio => studio-ui}/src/store/zundoMiddleware.ts (100%) rename packages/{studio => studio-ui}/src/tailwind-directives.css (100%) rename packages/{studio => studio-ui}/src/utils/PageDataValidator.ts (100%) rename packages/{studio => studio-ui}/src/utils/PropValueHelpers.ts (100%) rename packages/{studio => studio-ui}/src/utils/StreamScopeParser.ts (100%) rename packages/{studio => studio-ui}/src/utils/TemplateExpressionFormatter.ts (100%) rename packages/{studio => studio-ui}/src/utils/createIsSupportedPropMetadata.ts (100%) rename packages/{studio => studio-ui}/src/utils/dynamicImportFromBrowser.ts (100%) rename packages/{studio => studio-ui}/src/utils/filterEntityData.ts (100%) rename packages/{studio => studio-ui}/src/utils/generateTailwindSafelist.ts (100%) rename packages/{studio => studio-ui}/src/utils/getFunctionComponent.ts (100%) rename packages/{studio => studio-ui}/src/utils/getPropsForPreview.ts (100%) rename packages/{studio => studio-ui}/src/utils/rectToJson.ts (100%) rename packages/{studio => studio-ui}/src/utils/removeTopLevelFragments.ts (100%) rename packages/{studio => studio-ui}/tests/__fixtures__/componentStates.ts (100%) rename packages/{studio => studio-ui}/tests/__fixtures__/mockStoreNestedComponents.ts (100%) rename packages/{studio => studio-ui}/tests/__mocks__/Banner.tsx (100%) rename packages/{studio => studio-ui}/tests/__mocks__/Container.tsx (100%) rename packages/{studio => studio-ui}/tests/__mocks__/Panel.tsx (100%) rename packages/{studio => studio-ui}/tests/__mocks__/entityFile.json (100%) rename packages/{studio => studio-ui}/tests/__mocks__/mockLocalData.json (100%) rename packages/{studio => studio-ui}/tests/__mocks__/siteSettings.ts (100%) rename packages/{studio => studio-ui}/tests/__setup__/setup-env.ts (100%) rename packages/{studio => studio-ui}/tests/__setup__/svgTransformer.cjs (100%) rename packages/{studio => studio-ui}/tests/__utils__/helpers.ts (100%) rename packages/{studio => studio-ui}/tests/__utils__/mockActiveComponentState.ts (100%) rename packages/{studio => studio-ui}/tests/__utils__/mockActivePage.ts (100%) rename packages/{studio => studio-ui}/tests/__utils__/mockActivePageTree.ts (100%) rename packages/{studio => studio-ui}/tests/__utils__/mockPageSliceState.ts (100%) rename packages/{studio => studio-ui}/tests/__utils__/mockRepeaterActiveComponent.ts (100%) rename packages/{studio => studio-ui}/tests/__utils__/mockStore.ts (100%) rename packages/{studio => studio-ui}/tests/components/ActiveComponentPropEditors.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ActivePagePanel.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/AddElementButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/AddElementMenu.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/AddPageFlow/AddPageButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ArrayPropEditor.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ComponentTree.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/CreateModuleButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/EntityPicker.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ErrorBoundary.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/FieldPicker/FieldPicker.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/Highlighter.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/InfoButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ModuleActions.test.tsx/DeleteModuleButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ModuleActions.test.tsx/EditModuleButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/OpenLivePreviewButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/PageSettingsButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/PreviewPanel.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/PropEditor.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/PropInput.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/PropsPanel.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/RemoveElementButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/RemovePageButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/RepeaterPanel.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/SaveButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/SiteSettingsPanel.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/TailwindPropInput.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/UndefinedMenuButton.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/UndoRedo.test.tsx (100%) rename packages/{studio => studio-ui}/tests/components/ViewportButton.test.jsx (100%) rename packages/{studio => studio-ui}/tests/hooks/useImportedComponents.test.tsx (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/AddComponentAction.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/CreateComponentStateAction.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/GenerateTestDataAction.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/UpdateActivePageAction.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/activeComponentActions.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/createPage.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/detachModuleInstance.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/refreshActivePageEntities.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/removeComponent.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/saveChanges.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/StudioActions/updateActiveComponentProps.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createFileMetadataSlice/createFileMetadataSlice.test.tsx (100%) rename packages/{studio => studio-ui}/tests/store/createModule.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createPageSlice/activeEntityActions.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createPageSlice/activePageActions.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createPageSlice/detachAllModuleInstances.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createPageSlice/pageActions.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createPageSlice/pageComponentActions.test.ts (100%) rename packages/{studio => studio-ui}/tests/store/createSiteSettings.test.ts (100%) rename packages/{studio => studio-ui}/tests/tsconfig.json (100%) rename packages/{studio => studio-ui}/tests/utils/PageDataValidator.test.ts (100%) rename packages/{studio => studio-ui}/tests/utils/PropValueHelpers.test.ts (100%) rename packages/{studio => studio-ui}/tests/utils/TemplateExpressionFormatter.test.ts (100%) rename packages/{studio => studio-ui}/tests/utils/filterEntityData.test.tsx (100%) rename packages/{studio => studio-ui}/tests/utils/getPropsForPreview.test.ts (100%) rename packages/{studio => studio-ui}/tests/utils/removeTopLevelFragments.test.ts (100%) create mode 100644 packages/studio-ui/tsconfig.json delete mode 100644 packages/studio/.prettierignore rename packages/studio/{ => src}/types.ts (100%) diff --git a/package-lock.json b/package-lock.json index 4d351f19b..d7bbc605b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -419,44 +419,109 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -467,9 +532,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -508,11 +573,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dependencies": { - "@babel/types": "^7.22.3", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -558,27 +623,24 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -662,9 +724,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "engines": { "node": ">=6.9.0" } @@ -681,23 +743,23 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -715,32 +777,32 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -796,11 +858,11 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -818,36 +880,36 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "engines": { "node": ">=6.9.0" } @@ -867,25 +929,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -957,9 +1019,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", + "version": "7.22.14", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", + "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -2602,31 +2664,31 @@ } }, "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", + "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.11", + "@babel/types": "^7.22.11", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2643,12 +2705,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", + "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3613,92 +3675,390 @@ "node": ">=8" } }, - "node_modules/@jest/environment": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.1.tgz", - "integrity": "sha512-pJ14dHGSQke7Q3mkL/UZR9ZtTOxqskZaC91NzamEH4dlKRt42W+maRBXiw/LWkdJe+P0f/zDR37+SPMplMRlPg==", + "node_modules/@jest/console": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", + "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.4.1" + "chalk": "^4.0.0", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.1.tgz", - "integrity": "sha512-w6YJMn5DlzmxjO00i9wu2YSozUYRBhIoJ6nQwpMYcBMtiqMGJm1QBzOf6DDgRao8dbtpDoaqLg6iiQTvv0UHhQ==", + "node_modules/@jest/core": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", + "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", "dev": true, "dependencies": { - "jest-get-type": "^29.2.0" + "@jest/console": "^29.6.4", + "@jest/reporters": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.6.3", + "jest-config": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-resolve-dependencies": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "jest-watcher": "^29.6.4", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@jest/fake-timers": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.1.tgz", - "integrity": "sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw==", + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "@jest/types": "^29.4.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/schemas": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.0.tgz", - "integrity": "sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==", - "devOptional": true, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.1.tgz", - "integrity": "sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA==", - "devOptional": true, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@jest/environment": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", + "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "dev": true, "dependencies": { - "@jest/schemas": "^29.4.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "jest-mock": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "node_modules/@jest/expect": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "expect": "^29.6.4", + "jest-snapshot": "^29.6.4" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { + "node_modules/@jest/expect-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", + "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", + "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", + "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/types": "^29.6.3", + "jest-mock": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", + "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "devOptional": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "devOptional": true + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", + "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", + "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", + "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "devOptional": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", @@ -3742,12 +4102,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@juggle/resize-observer": { @@ -4735,7 +5095,7 @@ "version": "0.25.21", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==", - "devOptional": true + "dev": true }, "node_modules/@sinonjs/commons": { "version": "2.0.0", @@ -6116,6 +6476,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", + "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -6737,6 +7114,10 @@ "resolved": "packages/studio-plugin", "link": true }, + "node_modules/@yext/studio-ui": { + "resolved": "packages/studio-ui", + "link": true + }, "node_modules/@yext/types": { "version": "0.1.12-alpha", "resolved": "https://registry.npmjs.org/@yext/types/-/types-0.1.12-alpha.tgz", @@ -7224,6 +7605,27 @@ "deep-equal": "^2.0.5" } }, + "node_modules/babel-jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", + "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.6.4", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -7270,6 +7672,21 @@ "node": ">=8" } }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -7382,6 +7799,22 @@ "@babel/core": "^7.0.0" } }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/babel-preset-react-app": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", @@ -7680,9 +8113,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "funding": [ { "type": "opencollective", @@ -7691,13 +8124,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -7978,15 +8415,29 @@ "node": ">=6.0" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", @@ -9289,9 +9740,9 @@ } }, "node_modules/diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9533,9 +9984,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.508", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", + "integrity": "sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -10906,16 +11357,16 @@ } }, "node_modules/expect": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.1.tgz", - "integrity": "sha512-OKrGESHOaMxK3b6zxIq9SOW8kEXztKff/Dvg88j4xIJxur1hspEbedVkR3GpHe5LO+WB2Qw7OWN0RMTdp6as5A==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", + "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1" + "@jest/expect-utils": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -12920,16 +13371,244 @@ "node": ">=10" } }, + "node_modules/jest": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", + "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.6.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", + "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", + "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/expect": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-runtime": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.3", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-cli": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", + "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", + "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-jest": "^29.6.4", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.4", + "jest-environment-node": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runner": "^29.6.4", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-diff": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.1.tgz", - "integrity": "sha512-uazdl2g331iY56CEyfbNA0Ut7Mn2ulAG5vUaEHXycf1L6IPyuImIxSz4F0VYBKi7LYIuxOwTZzK3wh5jHzASMw==", + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", + "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -12948,12 +13627,12 @@ } }, "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz", - "integrity": "sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -12967,6 +13646,66 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/jest-docblock": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", + "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", + "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-environment-jsdom": { "version": "29.4.1", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.4.1.tgz", @@ -12994,31 +13733,47 @@ } } }, + "node_modules/jest-environment-node": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", + "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "devOptional": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.1.tgz", - "integrity": "sha512-imTjcgfVVTvg02khXL11NNLTx9ZaofbAWhilrMg/G8dIkp+HYCswhxf0xxJwBkfhWb3e8dwbjuWburvxmcr58w==", - "optional": true, - "peer": true, + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", + "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "devOptional": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.2.0", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.4", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -13217,20 +13972,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-jasmine2/node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/jest-jasmine2/node_modules/diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -13538,22 +14279,20 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/jest-matcher-utils": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.1.tgz", - "integrity": "sha512-k5h0u8V4nAEy6lSACepxL/rw78FLDkBnXhZVgFneVpnJONhb2DhZj/Gv4eNe+1XqQ5IhgUcqj745UwH0HJmMnA==", + "node_modules/jest-leak-detector": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", + "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.4.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "node_modules/jest-leak-detector/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -13565,13 +14304,60 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz", - "integrity": "sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-matcher-utils": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", + "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -13586,18 +14372,18 @@ "dev": true }, "node_modules/jest-message-util": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.1.tgz", - "integrity": "sha512-H4/I0cXUaLeCw6FM+i4AwCnOwHRgitdaUFOdm49022YD5nfyr8C/DrbXOBEyJaj+w/y0gGJ57klssOaUiLLQGQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", + "pretty-format": "^29.6.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -13618,12 +14404,12 @@ } }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz", - "integrity": "sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -13638,14 +14424,14 @@ "dev": true }, "node_modules/jest-mock": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.1.tgz", - "integrity": "sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", + "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", "dev": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.4.1" + "jest-util": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13668,28 +14454,26 @@ } }, "node_modules/jest-regex-util": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz", - "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==", - "optional": true, - "peer": true, + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "devOptional": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.1.tgz", - "integrity": "sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ==", - "optional": true, - "peer": true, + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", + "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "devOptional": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", + "jest-haste-map": "^29.6.4", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-util": "^29.6.3", + "jest-validate": "^29.6.3", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -13698,6 +14482,93 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", + "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.6.4" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", + "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.4", + "@jest/environment": "^29.6.4", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.6.3", + "jest-environment-node": "^29.6.4", + "jest-haste-map": "^29.6.4", + "jest-leak-detector": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-runtime": "^29.6.4", + "jest-util": "^29.6.3", + "jest-watcher": "^29.6.4", + "jest-worker": "^29.6.4", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", + "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.4", + "@jest/fake-timers": "^29.6.4", + "@jest/globals": "^29.6.4", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-mock": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.6.4", + "jest-snapshot": "^29.6.4", + "jest-util": "^29.6.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-serializer": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", @@ -13710,13 +14581,109 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-snapshot": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", + "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.4", + "@jest/transform": "^29.6.4", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.4", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.4", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.4", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.3", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jest-util": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.1.tgz", - "integrity": "sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", "devOptional": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -13727,34 +14694,18 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.1.tgz", - "integrity": "sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw==", - "optional": true, - "peer": true, + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", + "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "devOptional": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.4.1" + "pretty-format": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13764,8 +14715,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "optional": true, - "peer": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -13777,8 +14727,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "optional": true, - "peer": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -13787,13 +14736,12 @@ } }, "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz", - "integrity": "sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==", - "optional": true, - "peer": true, + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "devOptional": true, "dependencies": { - "@jest/schemas": "^29.4.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -13805,18 +14753,35 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "optional": true, - "peer": true + "devOptional": true + }, + "node_modules/jest-watcher": { + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", + "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.4", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/jest-worker": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.1.tgz", - "integrity": "sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ==", - "optional": true, - "peer": true, + "version": "29.6.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", + "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "devOptional": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.4.1", + "jest-util": "^29.6.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -13828,8 +14793,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "optional": true, - "peer": true, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14733,9 +15697,9 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/node-stdlib-browser": { "version": "1.2.0", @@ -17609,20 +18573,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-scripts/node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "node_modules/react-scripts/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -18775,6 +19725,19 @@ "react-dom": ">=16" } }, + "node_modules/react-tooltip": { + "version": "5.21.1", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.21.1.tgz", + "integrity": "sha512-wJqF/yzK1wuJuy5/zAkVErFA609fVv1ZukhGjw44PcMvg9wL0jomnpQyz3qH1H7TWjz/wqO/OMc3ipQNjZ8zYg==", + "dependencies": { + "@floating-ui/dom": "^1.0.0", + "classnames": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, "node_modules/react-use-measure": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", @@ -21201,9 +22164,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "funding": [ { "type": "opencollective", @@ -21212,6 +22175,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -21219,7 +22186,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -22615,14 +23582,27 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, @@ -22743,6 +23723,21 @@ "commander": "^9.4.1" } }, + "node_modules/zundo": { + "version": "2.0.0-beta.12", + "resolved": "https://registry.npmjs.org/zundo/-/zundo-2.0.0-beta.12.tgz", + "integrity": "sha512-8Z1SbR0W5hDRw0ddZCAD0LE9fbTX/Yj0sghY6r0sSPUHSPs1eA6t59ChiwQ8l01+WAjk0G+QN881y/WC+bPnug==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/charkour" + }, + "peerDependencies": { + "zustand": "^4.3.0" + } + }, "node_modules/zustand": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.2.tgz", @@ -22770,28 +23765,15 @@ "name": "@yext/studio", "version": "0.22.0", "dependencies": { - "@dhmk/zustand-lens": "^2.0.5", - "@minoru/react-dnd-treeview": "^3.4.1", - "@restart/ui": "^1.5.2", "@vitejs/plugin-react": "^4.0.4", "@yext/studio-plugin": "0.22.0", + "@yext/studio-ui": "0.22.0", "autoprefixer": "^10.4.14", "cac": "^6.7.14", - "classnames": "^2.3.2", "cross-env": "^7.0.3", - "immer": "^9.0.21", - "lodash": "^4.17.21", - "path-browserify": "^1.0.1", "postcss": "^8.4.27", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-modal": "3.16.1", - "react-toastify": "^9.1.1", - "react-tooltip": "^5.18.0", - "tailwind-merge": "^1.8.1", - "tailwindcss": "^3.3.3", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -22799,23 +23781,8 @@ "studio": "lib/bin/studio.js" }, "devDependencies": { - "@babel/core": "^7.20.5", - "@babel/plugin-syntax-flow": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@rollup/plugin-typescript": "^10.0.1", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "@types/jest": "^29.2.4", - "@types/lodash": "^4.14.191", "@types/node": "^18.11.15", - "@types/path-browserify": "^1.0.0", - "@types/react": "^18.0.26", - "@types/react-dom": "^18.0.10", - "@types/react-modal": "3.13.1", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.3.1", - "resize-observer-polyfill": "^1.5.1" + "@types/react": "^18.0.26" } }, "packages/studio-plugin": { @@ -24148,21 +25115,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/studio-plugin/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, "packages/studio-plugin/node_modules/code-block-writer": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", @@ -24938,35 +25890,6 @@ "yarn": "*" } }, - "packages/studio-plugin/node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, "packages/studio-plugin/node_modules/vite": { "version": "4.4.7", "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", @@ -25036,1877 +25959,134 @@ "webidl-conversions": "^3.0.0" } }, - "packages/studio-plugin/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "packages/studio/node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "packages/studio-ui": { + "name": "@yext/studio-ui", + "version": "0.22.0", "dependencies": { - "@babel/highlight": "^7.22.5" + "@dhmk/zustand-lens": "^2.0.5", + "@minoru/react-dnd-treeview": "^3.4.1", + "@restart/ui": "^1.5.2", + "@vitejs/plugin-react": "^4.0.4", + "@yext/studio-plugin": "0.22.0", + "autoprefixer": "^10.4.14", + "cac": "^6.7.14", + "classnames": "^2.3.2", + "cross-env": "^7.0.3", + "immer": "^9.0.21", + "lodash": "^4.17.21", + "path-browserify": "^1.0.1", + "postcss": "^8.4.27", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-modal": "3.16.1", + "react-toastify": "^9.1.1", + "react-tooltip": "^5.18.0", + "tailwind-merge": "^1.8.1", + "tailwindcss": "^3.3.3", + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0", + "zundo": "2.0.0-beta.12", + "zustand": "^4.3.2" }, - "engines": { - "node": ">=6.9.0" + "devDependencies": { + "@babel/core": "^7.20.5", + "@babel/plugin-syntax-flow": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@rollup/plugin-typescript": "^10.0.1", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.4.3", + "@types/jest": "^29.2.4", + "@types/lodash": "^4.14.191", + "@types/node": "^18.11.15", + "@types/path-browserify": "^1.0.0", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", + "@types/react-modal": "3.13.1", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.3.1", + "resize-observer-polyfill": "^1.5.1" } }, - "packages/studio/node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "engines": { - "node": ">=6.9.0" - } + "packages/studio-ui/node_modules/@types/node": { + "version": "18.17.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.12.tgz", + "integrity": "sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==", + "dev": true }, - "packages/studio/node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "packages/studio-ui/node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "packages/studio/node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "packages/studio/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { - "semver": "bin/semver.js" - } - }, - "packages/studio/node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14" }, "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "packages/studio/node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "postcss": "^8.1.0" } }, - "packages/studio/node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "packages/studio/node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "packages/studio/node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "packages/studio/node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "packages/studio/node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "packages/studio/node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "packages/studio/node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "packages/studio/node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/studio/node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "packages/studio/node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "packages/studio/node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "packages/studio/node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "devOptional": true - }, - "packages/studio/node_modules/@vitejs/plugin-react": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", - "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", - "dependencies": { - "@babel/core": "^7.22.9", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" - } - }, - "packages/studio/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "packages/studio/node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "packages/studio/node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "packages/studio/node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "packages/studio/node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "packages/studio/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/studio/node_modules/caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "packages/studio/node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "packages/studio/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "packages/studio/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "packages/studio/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "packages/studio/node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/electron-to-chromium": { - "version": "1.4.477", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.477.tgz", - "integrity": "sha512-shUVy6Eawp33dFBFIoYbIwLHrX0IZ857AlH9ug2o4rvbWmpaCUdBpQ5Zw39HRrfzAFm4APJE9V+E2A/WB0YqJw==" - }, - "packages/studio/node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" - } - }, - "packages/studio/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "packages/studio/node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "packages/studio/node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "packages/studio/node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "packages/studio/node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "packages/studio/node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "packages/studio/node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "packages/studio/node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "packages/studio/node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "packages/studio-ui/node_modules/caniuse-lite": { + "version": "1.0.30001525", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", + "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "packages/studio/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "packages/studio/node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", "dev": true }, - "packages/studio/node_modules/react-tooltip": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.18.0.tgz", - "integrity": "sha512-qjDK/skUJJ27sc9lTWeNxp2rLzmenBTskSsRiDOCPnupGSz2GhL5IZxDizK/sOsk0hn5iSCywt+3jKxUJ3Y4Sw==", - "dependencies": { - "@floating-ui/dom": "^1.0.0", - "classnames": "^2.3.0" - }, - "peerDependencies": { - "react": ">=16.14.0", - "react-dom": ">=16.14.0" - } - }, - "packages/studio/node_modules/rollup": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.0.tgz", - "integrity": "sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "packages/studio/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "packages/studio/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "packages/studio/node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "packages/studio/node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "url": "https://tidelift.com/funding/github/npm/autoprefixer" }, { "type": "github", @@ -26914,97 +26094,41 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "packages/studio/node_modules/vite": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", - "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" }, "bin": { - "vite": "bin/vite.js" + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": "^10 || ^12 || >=14" }, "peerDependencies": { - "@types/node": ">= 14", - "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 + "postcss": "^8.1.0" + } + }, + "packages/studio/node_modules/caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "sugarss": { - "optional": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, - "terser": { - "optional": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - } - }, - "packages/studio/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "packages/studio/node_modules/zundo": { - "version": "2.0.0-beta.12", - "resolved": "https://registry.npmjs.org/zundo/-/zundo-2.0.0-beta.12.tgz", - "integrity": "sha512-8Z1SbR0W5hDRw0ddZCAD0LE9fbTX/Yj0sghY6r0sSPUHSPs1eA6t59ChiwQ8l01+WAjk0G+QN881y/WC+bPnug==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/charkour" - }, - "peerDependencies": { - "zustand": "^4.3.0" - } + ] } } } diff --git a/packages/studio/__mocks__/virtual_yext-studio.ts b/packages/studio-ui/__mocks__/virtual_yext-studio.ts similarity index 100% rename from packages/studio/__mocks__/virtual_yext-studio.ts rename to packages/studio-ui/__mocks__/virtual_yext-studio.ts diff --git a/packages/studio/__mocks__/zustand.ts b/packages/studio-ui/__mocks__/zustand.ts similarity index 100% rename from packages/studio/__mocks__/zustand.ts rename to packages/studio-ui/__mocks__/zustand.ts diff --git a/packages/studio/babel.config.cjs b/packages/studio-ui/babel.config.cjs similarity index 100% rename from packages/studio/babel.config.cjs rename to packages/studio-ui/babel.config.cjs diff --git a/packages/studio/jest.config.ts b/packages/studio-ui/jest.config.ts similarity index 100% rename from packages/studio/jest.config.ts rename to packages/studio-ui/jest.config.ts diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json new file mode 100644 index 000000000..848fdae00 --- /dev/null +++ b/packages/studio-ui/package.json @@ -0,0 +1,63 @@ +{ + "name": "@yext/studio-ui", + "version": "0.22.0", + "type": "module", + "exports": { + ".": { + "types": "./lib/src/index.d.ts", + "import": "./lib/src/index.js", + "require": "./lib/src/index.js" + } + }, + "scripts": { + "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json", + "build": "rimraf lib && tsc -p tsconfig.json", + "test": "jest", + "typecheck-jest": "npx tsc -p tests/tsconfig.json" + }, + "dependencies": { + "@dhmk/zustand-lens": "^2.0.5", + "@minoru/react-dnd-treeview": "^3.4.1", + "@restart/ui": "^1.5.2", + "@vitejs/plugin-react": "^4.0.4", + "@yext/studio-plugin": "0.22.0", + "autoprefixer": "^10.4.14", + "cac": "^6.7.14", + "classnames": "^2.3.2", + "cross-env": "^7.0.3", + "immer": "^9.0.21", + "lodash": "^4.17.21", + "path-browserify": "^1.0.1", + "postcss": "^8.4.27", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-modal": "3.16.1", + "react-toastify": "^9.1.1", + "react-tooltip": "^5.18.0", + "tailwind-merge": "^1.8.1", + "tailwindcss": "^3.3.3", + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0", + "zundo": "2.0.0-beta.12", + "zustand": "^4.3.2" + }, + "devDependencies": { + "@babel/core": "^7.20.5", + "@babel/plugin-syntax-flow": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@rollup/plugin-typescript": "^10.0.1", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.4.3", + "@types/jest": "^29.2.4", + "@types/lodash": "^4.14.191", + "@types/node": "^18.11.15", + "@types/path-browserify": "^1.0.0", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", + "@types/react-modal": "3.13.1", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.3.1", + "resize-observer-polyfill": "^1.5.1" + } +} diff --git a/packages/studio/src/App.tsx b/packages/studio-ui/src/App.tsx similarity index 88% rename from packages/studio/src/App.tsx rename to packages/studio-ui/src/App.tsx index ea54fd794..639a3b195 100644 --- a/packages/studio/src/App.tsx +++ b/packages/studio-ui/src/App.tsx @@ -3,6 +3,8 @@ import ActionsBar from "./components/ActionsBar"; import Toast from "./components/Toast"; import PreviewWithUseComponents from "./components/PreviewWithUseComponents"; import LeftSidebar from "./components/LeftSidebar"; +import "./tailwind-directives.css"; +import "react-tooltip/dist/react-tooltip.css"; export default function App() { return ( diff --git a/packages/studio/src/components/ActionsBar.tsx b/packages/studio-ui/src/components/ActionsBar.tsx similarity index 100% rename from packages/studio/src/components/ActionsBar.tsx rename to packages/studio-ui/src/components/ActionsBar.tsx diff --git a/packages/studio/src/components/ActiveComponentPropEditors.tsx b/packages/studio-ui/src/components/ActiveComponentPropEditors.tsx similarity index 100% rename from packages/studio/src/components/ActiveComponentPropEditors.tsx rename to packages/studio-ui/src/components/ActiveComponentPropEditors.tsx diff --git a/packages/studio/src/components/ActivePagePanel.tsx b/packages/studio-ui/src/components/ActivePagePanel.tsx similarity index 100% rename from packages/studio/src/components/ActivePagePanel.tsx rename to packages/studio-ui/src/components/ActivePagePanel.tsx diff --git a/packages/studio/src/components/AddElementButton.tsx b/packages/studio-ui/src/components/AddElementButton.tsx similarity index 100% rename from packages/studio/src/components/AddElementButton.tsx rename to packages/studio-ui/src/components/AddElementButton.tsx diff --git a/packages/studio/src/components/AddElementMenu/AddElementMenu.tsx b/packages/studio-ui/src/components/AddElementMenu/AddElementMenu.tsx similarity index 100% rename from packages/studio/src/components/AddElementMenu/AddElementMenu.tsx rename to packages/studio-ui/src/components/AddElementMenu/AddElementMenu.tsx diff --git a/packages/studio/src/components/AddElementMenu/ElementSelector.tsx b/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx similarity index 100% rename from packages/studio/src/components/AddElementMenu/ElementSelector.tsx rename to packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx diff --git a/packages/studio/src/components/AddPageButton/AddPageButton.tsx b/packages/studio-ui/src/components/AddPageButton/AddPageButton.tsx similarity index 100% rename from packages/studio/src/components/AddPageButton/AddPageButton.tsx rename to packages/studio-ui/src/components/AddPageButton/AddPageButton.tsx diff --git a/packages/studio/src/components/AddPageButton/AddPageContext.ts b/packages/studio-ui/src/components/AddPageButton/AddPageContext.ts similarity index 100% rename from packages/studio/src/components/AddPageButton/AddPageContext.ts rename to packages/studio-ui/src/components/AddPageButton/AddPageContext.ts diff --git a/packages/studio/src/components/AddPageButton/AddPageContextProvider.tsx b/packages/studio-ui/src/components/AddPageButton/AddPageContextProvider.tsx similarity index 100% rename from packages/studio/src/components/AddPageButton/AddPageContextProvider.tsx rename to packages/studio-ui/src/components/AddPageButton/AddPageContextProvider.tsx diff --git a/packages/studio/src/components/AddPageButton/BasicPageDataCollector.tsx b/packages/studio-ui/src/components/AddPageButton/BasicPageDataCollector.tsx similarity index 100% rename from packages/studio/src/components/AddPageButton/BasicPageDataCollector.tsx rename to packages/studio-ui/src/components/AddPageButton/BasicPageDataCollector.tsx diff --git a/packages/studio/src/components/AddPageButton/FlowStep.ts b/packages/studio-ui/src/components/AddPageButton/FlowStep.ts similarity index 100% rename from packages/studio/src/components/AddPageButton/FlowStep.ts rename to packages/studio-ui/src/components/AddPageButton/FlowStep.ts diff --git a/packages/studio/src/components/AddPageButton/PageTypeSelector.tsx b/packages/studio-ui/src/components/AddPageButton/PageTypeSelector.tsx similarity index 100% rename from packages/studio/src/components/AddPageButton/PageTypeSelector.tsx rename to packages/studio-ui/src/components/AddPageButton/PageTypeSelector.tsx diff --git a/packages/studio/src/components/AddPageButton/StreamScopeCollector.tsx b/packages/studio-ui/src/components/AddPageButton/StreamScopeCollector.tsx similarity index 100% rename from packages/studio/src/components/AddPageButton/StreamScopeCollector.tsx rename to packages/studio-ui/src/components/AddPageButton/StreamScopeCollector.tsx diff --git a/packages/studio/src/components/ArrayPropEditor.tsx b/packages/studio-ui/src/components/ArrayPropEditor.tsx similarity index 100% rename from packages/studio/src/components/ArrayPropEditor.tsx rename to packages/studio-ui/src/components/ArrayPropEditor.tsx diff --git a/packages/studio/src/components/ComponentKindIcon.tsx b/packages/studio-ui/src/components/ComponentKindIcon.tsx similarity index 100% rename from packages/studio/src/components/ComponentKindIcon.tsx rename to packages/studio-ui/src/components/ComponentKindIcon.tsx diff --git a/packages/studio/src/components/ComponentNode.tsx b/packages/studio-ui/src/components/ComponentNode.tsx similarity index 100% rename from packages/studio/src/components/ComponentNode.tsx rename to packages/studio-ui/src/components/ComponentNode.tsx diff --git a/packages/studio/src/components/ComponentPreview.tsx b/packages/studio-ui/src/components/ComponentPreview.tsx similarity index 100% rename from packages/studio/src/components/ComponentPreview.tsx rename to packages/studio-ui/src/components/ComponentPreview.tsx diff --git a/packages/studio/src/components/ComponentTree.tsx b/packages/studio-ui/src/components/ComponentTree.tsx similarity index 100% rename from packages/studio/src/components/ComponentTree.tsx rename to packages/studio-ui/src/components/ComponentTree.tsx diff --git a/packages/studio/src/components/ComponentTreePreview.tsx b/packages/studio-ui/src/components/ComponentTreePreview.tsx similarity index 100% rename from packages/studio/src/components/ComponentTreePreview.tsx rename to packages/studio-ui/src/components/ComponentTreePreview.tsx diff --git a/packages/studio/src/components/DeployButton.tsx b/packages/studio-ui/src/components/DeployButton.tsx similarity index 100% rename from packages/studio/src/components/DeployButton.tsx rename to packages/studio-ui/src/components/DeployButton.tsx diff --git a/packages/studio/src/components/EditorSidebar.tsx b/packages/studio-ui/src/components/EditorSidebar.tsx similarity index 100% rename from packages/studio/src/components/EditorSidebar.tsx rename to packages/studio-ui/src/components/EditorSidebar.tsx diff --git a/packages/studio/src/components/EntityPicker.tsx b/packages/studio-ui/src/components/EntityPicker.tsx similarity index 100% rename from packages/studio/src/components/EntityPicker.tsx rename to packages/studio-ui/src/components/EntityPicker.tsx diff --git a/packages/studio/src/components/ErrorComponentPreview.tsx b/packages/studio-ui/src/components/ErrorComponentPreview.tsx similarity index 100% rename from packages/studio/src/components/ErrorComponentPreview.tsx rename to packages/studio-ui/src/components/ErrorComponentPreview.tsx diff --git a/packages/studio/src/components/FieldPicker/FieldDropdown.tsx b/packages/studio-ui/src/components/FieldPicker/FieldDropdown.tsx similarity index 100% rename from packages/studio/src/components/FieldPicker/FieldDropdown.tsx rename to packages/studio-ui/src/components/FieldPicker/FieldDropdown.tsx diff --git a/packages/studio/src/components/FieldPicker/FieldPicker.tsx b/packages/studio-ui/src/components/FieldPicker/FieldPicker.tsx similarity index 100% rename from packages/studio/src/components/FieldPicker/FieldPicker.tsx rename to packages/studio-ui/src/components/FieldPicker/FieldPicker.tsx diff --git a/packages/studio/src/components/FieldPicker/FieldPickerInput.tsx b/packages/studio-ui/src/components/FieldPicker/FieldPickerInput.tsx similarity index 100% rename from packages/studio/src/components/FieldPicker/FieldPickerInput.tsx rename to packages/studio-ui/src/components/FieldPicker/FieldPickerInput.tsx diff --git a/packages/studio/src/components/Highlighter.tsx b/packages/studio-ui/src/components/Highlighter.tsx similarity index 100% rename from packages/studio/src/components/Highlighter.tsx rename to packages/studio-ui/src/components/Highlighter.tsx diff --git a/packages/studio/src/components/HighlightingContainer.tsx b/packages/studio-ui/src/components/HighlightingContainer.tsx similarity index 100% rename from packages/studio/src/components/HighlightingContainer.tsx rename to packages/studio-ui/src/components/HighlightingContainer.tsx diff --git a/packages/studio/src/components/IFramePortal.tsx b/packages/studio-ui/src/components/IFramePortal.tsx similarity index 100% rename from packages/studio/src/components/IFramePortal.tsx rename to packages/studio-ui/src/components/IFramePortal.tsx diff --git a/packages/studio/src/components/InfoButton.tsx b/packages/studio-ui/src/components/InfoButton.tsx similarity index 100% rename from packages/studio/src/components/InfoButton.tsx rename to packages/studio-ui/src/components/InfoButton.tsx diff --git a/packages/studio/src/components/LeftSidebar.tsx b/packages/studio-ui/src/components/LeftSidebar.tsx similarity index 100% rename from packages/studio/src/components/LeftSidebar.tsx rename to packages/studio-ui/src/components/LeftSidebar.tsx diff --git a/packages/studio/src/components/ModuleActions.tsx b/packages/studio-ui/src/components/ModuleActions.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions.tsx rename to packages/studio-ui/src/components/ModuleActions.tsx diff --git a/packages/studio/src/components/ModuleActions/ActionIconWrapper.tsx b/packages/studio-ui/src/components/ModuleActions/ActionIconWrapper.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions/ActionIconWrapper.tsx rename to packages/studio-ui/src/components/ModuleActions/ActionIconWrapper.tsx diff --git a/packages/studio/src/components/ModuleActions/CreateModuleButton.tsx b/packages/studio-ui/src/components/ModuleActions/CreateModuleButton.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions/CreateModuleButton.tsx rename to packages/studio-ui/src/components/ModuleActions/CreateModuleButton.tsx diff --git a/packages/studio/src/components/ModuleActions/DeleteModuleButton.tsx b/packages/studio-ui/src/components/ModuleActions/DeleteModuleButton.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions/DeleteModuleButton.tsx rename to packages/studio-ui/src/components/ModuleActions/DeleteModuleButton.tsx diff --git a/packages/studio/src/components/ModuleActions/DetachModuleButton.tsx b/packages/studio-ui/src/components/ModuleActions/DetachModuleButton.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions/DetachModuleButton.tsx rename to packages/studio-ui/src/components/ModuleActions/DetachModuleButton.tsx diff --git a/packages/studio/src/components/ModuleActions/EditModuleButton.tsx b/packages/studio-ui/src/components/ModuleActions/EditModuleButton.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions/EditModuleButton.tsx rename to packages/studio-ui/src/components/ModuleActions/EditModuleButton.tsx diff --git a/packages/studio/src/components/ModuleActions/ModuleEditActions.tsx b/packages/studio-ui/src/components/ModuleActions/ModuleEditActions.tsx similarity index 100% rename from packages/studio/src/components/ModuleActions/ModuleEditActions.tsx rename to packages/studio-ui/src/components/ModuleActions/ModuleEditActions.tsx diff --git a/packages/studio/src/components/ModulePreview.tsx b/packages/studio-ui/src/components/ModulePreview.tsx similarity index 100% rename from packages/studio/src/components/ModulePreview.tsx rename to packages/studio-ui/src/components/ModulePreview.tsx diff --git a/packages/studio/src/components/NumberPropInput.tsx b/packages/studio-ui/src/components/NumberPropInput.tsx similarity index 100% rename from packages/studio/src/components/NumberPropInput.tsx rename to packages/studio-ui/src/components/NumberPropInput.tsx diff --git a/packages/studio/src/components/ObjectPropEditor.tsx b/packages/studio-ui/src/components/ObjectPropEditor.tsx similarity index 100% rename from packages/studio/src/components/ObjectPropEditor.tsx rename to packages/studio-ui/src/components/ObjectPropEditor.tsx diff --git a/packages/studio/src/components/OpenLivePreviewButton.tsx b/packages/studio-ui/src/components/OpenLivePreviewButton.tsx similarity index 100% rename from packages/studio/src/components/OpenLivePreviewButton.tsx rename to packages/studio-ui/src/components/OpenLivePreviewButton.tsx diff --git a/packages/studio/src/components/PageSettingsButton/EntityPageModal.tsx b/packages/studio-ui/src/components/PageSettingsButton/EntityPageModal.tsx similarity index 100% rename from packages/studio/src/components/PageSettingsButton/EntityPageModal.tsx rename to packages/studio-ui/src/components/PageSettingsButton/EntityPageModal.tsx diff --git a/packages/studio/src/components/PageSettingsButton/PageSettingsButton.tsx b/packages/studio-ui/src/components/PageSettingsButton/PageSettingsButton.tsx similarity index 100% rename from packages/studio/src/components/PageSettingsButton/PageSettingsButton.tsx rename to packages/studio-ui/src/components/PageSettingsButton/PageSettingsButton.tsx diff --git a/packages/studio/src/components/PageSettingsButton/StaticPageModal.tsx b/packages/studio-ui/src/components/PageSettingsButton/StaticPageModal.tsx similarity index 100% rename from packages/studio/src/components/PageSettingsButton/StaticPageModal.tsx rename to packages/studio-ui/src/components/PageSettingsButton/StaticPageModal.tsx diff --git a/packages/studio/src/components/PreviewPanel.tsx b/packages/studio-ui/src/components/PreviewPanel.tsx similarity index 100% rename from packages/studio/src/components/PreviewPanel.tsx rename to packages/studio-ui/src/components/PreviewPanel.tsx diff --git a/packages/studio/src/components/PreviewWithUseComponents.tsx b/packages/studio-ui/src/components/PreviewWithUseComponents.tsx similarity index 100% rename from packages/studio/src/components/PreviewWithUseComponents.tsx rename to packages/studio-ui/src/components/PreviewWithUseComponents.tsx diff --git a/packages/studio/src/components/PropEditor.tsx b/packages/studio-ui/src/components/PropEditor.tsx similarity index 100% rename from packages/studio/src/components/PropEditor.tsx rename to packages/studio-ui/src/components/PropEditor.tsx diff --git a/packages/studio/src/components/PropEditors.tsx b/packages/studio-ui/src/components/PropEditors.tsx similarity index 100% rename from packages/studio/src/components/PropEditors.tsx rename to packages/studio-ui/src/components/PropEditors.tsx diff --git a/packages/studio/src/components/PropInput.tsx b/packages/studio-ui/src/components/PropInput.tsx similarity index 100% rename from packages/studio/src/components/PropInput.tsx rename to packages/studio-ui/src/components/PropInput.tsx diff --git a/packages/studio/src/components/PropsPanel.tsx b/packages/studio-ui/src/components/PropsPanel.tsx similarity index 100% rename from packages/studio/src/components/PropsPanel.tsx rename to packages/studio-ui/src/components/PropsPanel.tsx diff --git a/packages/studio/src/components/RemovableElement.tsx b/packages/studio-ui/src/components/RemovableElement.tsx similarity index 100% rename from packages/studio/src/components/RemovableElement.tsx rename to packages/studio-ui/src/components/RemovableElement.tsx diff --git a/packages/studio/src/components/RemoveElementButton.tsx b/packages/studio-ui/src/components/RemoveElementButton.tsx similarity index 100% rename from packages/studio/src/components/RemoveElementButton.tsx rename to packages/studio-ui/src/components/RemoveElementButton.tsx diff --git a/packages/studio/src/components/RemovePageButton.tsx b/packages/studio-ui/src/components/RemovePageButton.tsx similarity index 100% rename from packages/studio/src/components/RemovePageButton.tsx rename to packages/studio-ui/src/components/RemovePageButton.tsx diff --git a/packages/studio/src/components/RepeaterPanel.tsx b/packages/studio-ui/src/components/RepeaterPanel.tsx similarity index 100% rename from packages/studio/src/components/RepeaterPanel.tsx rename to packages/studio-ui/src/components/RepeaterPanel.tsx diff --git a/packages/studio/src/components/RepeaterPreview.tsx b/packages/studio-ui/src/components/RepeaterPreview.tsx similarity index 100% rename from packages/studio/src/components/RepeaterPreview.tsx rename to packages/studio-ui/src/components/RepeaterPreview.tsx diff --git a/packages/studio/src/components/SaveButton.tsx b/packages/studio-ui/src/components/SaveButton.tsx similarity index 100% rename from packages/studio/src/components/SaveButton.tsx rename to packages/studio-ui/src/components/SaveButton.tsx diff --git a/packages/studio/src/components/SiteSettingsPanel.tsx b/packages/studio-ui/src/components/SiteSettingsPanel.tsx similarity index 100% rename from packages/studio/src/components/SiteSettingsPanel.tsx rename to packages/studio-ui/src/components/SiteSettingsPanel.tsx diff --git a/packages/studio/src/components/StringPropInput.tsx b/packages/studio-ui/src/components/StringPropInput.tsx similarity index 100% rename from packages/studio/src/components/StringPropInput.tsx rename to packages/studio-ui/src/components/StringPropInput.tsx diff --git a/packages/studio/src/components/TailwindPropInput.tsx b/packages/studio-ui/src/components/TailwindPropInput.tsx similarity index 100% rename from packages/studio/src/components/TailwindPropInput.tsx rename to packages/studio-ui/src/components/TailwindPropInput.tsx diff --git a/packages/studio/src/components/Toast.tsx b/packages/studio-ui/src/components/Toast.tsx similarity index 100% rename from packages/studio/src/components/Toast.tsx rename to packages/studio-ui/src/components/Toast.tsx diff --git a/packages/studio/src/components/UndefinedMenuButton.tsx b/packages/studio-ui/src/components/UndefinedMenuButton.tsx similarity index 100% rename from packages/studio/src/components/UndefinedMenuButton.tsx rename to packages/studio-ui/src/components/UndefinedMenuButton.tsx diff --git a/packages/studio/src/components/UndoRedo.tsx b/packages/studio-ui/src/components/UndoRedo.tsx similarity index 100% rename from packages/studio/src/components/UndoRedo.tsx rename to packages/studio-ui/src/components/UndoRedo.tsx diff --git a/packages/studio/src/components/UnionPropInput.tsx b/packages/studio-ui/src/components/UnionPropInput.tsx similarity index 100% rename from packages/studio/src/components/UnionPropInput.tsx rename to packages/studio-ui/src/components/UnionPropInput.tsx diff --git a/packages/studio/src/components/Viewport/ViewportButton.tsx b/packages/studio-ui/src/components/Viewport/ViewportButton.tsx similarity index 100% rename from packages/studio/src/components/Viewport/ViewportButton.tsx rename to packages/studio-ui/src/components/Viewport/ViewportButton.tsx diff --git a/packages/studio/src/components/Viewport/ViewportMenu.tsx b/packages/studio-ui/src/components/Viewport/ViewportMenu.tsx similarity index 100% rename from packages/studio/src/components/Viewport/ViewportMenu.tsx rename to packages/studio-ui/src/components/Viewport/ViewportMenu.tsx diff --git a/packages/studio/src/components/Viewport/defaults.tsx b/packages/studio-ui/src/components/Viewport/defaults.tsx similarity index 100% rename from packages/studio/src/components/Viewport/defaults.tsx rename to packages/studio-ui/src/components/Viewport/defaults.tsx diff --git a/packages/studio/src/components/common/ButtonWithModal.tsx b/packages/studio-ui/src/components/common/ButtonWithModal.tsx similarity index 100% rename from packages/studio/src/components/common/ButtonWithModal.tsx rename to packages/studio-ui/src/components/common/ButtonWithModal.tsx diff --git a/packages/studio/src/components/common/ColorPicker.tsx b/packages/studio-ui/src/components/common/ColorPicker.tsx similarity index 100% rename from packages/studio/src/components/common/ColorPicker.tsx rename to packages/studio-ui/src/components/common/ColorPicker.tsx diff --git a/packages/studio/src/components/common/DialogModal.tsx b/packages/studio-ui/src/components/common/DialogModal.tsx similarity index 100% rename from packages/studio/src/components/common/DialogModal.tsx rename to packages/studio-ui/src/components/common/DialogModal.tsx diff --git a/packages/studio/src/components/common/Divider.tsx b/packages/studio-ui/src/components/common/Divider.tsx similarity index 100% rename from packages/studio/src/components/common/Divider.tsx rename to packages/studio-ui/src/components/common/Divider.tsx diff --git a/packages/studio/src/components/common/ErrorBoundary.tsx b/packages/studio-ui/src/components/common/ErrorBoundary.tsx similarity index 100% rename from packages/studio/src/components/common/ErrorBoundary.tsx rename to packages/studio-ui/src/components/common/ErrorBoundary.tsx diff --git a/packages/studio/src/components/common/FormModal.tsx b/packages/studio-ui/src/components/common/FormModal.tsx similarity index 100% rename from packages/studio/src/components/common/FormModal.tsx rename to packages/studio-ui/src/components/common/FormModal.tsx diff --git a/packages/studio/src/components/common/MessageBubble.tsx b/packages/studio-ui/src/components/common/MessageBubble.tsx similarity index 100% rename from packages/studio/src/components/common/MessageBubble.tsx rename to packages/studio-ui/src/components/common/MessageBubble.tsx diff --git a/packages/studio/src/components/common/Modal.tsx b/packages/studio-ui/src/components/common/Modal.tsx similarity index 100% rename from packages/studio/src/components/common/Modal.tsx rename to packages/studio-ui/src/components/common/Modal.tsx diff --git a/packages/studio/src/components/common/OptionPicker.tsx b/packages/studio-ui/src/components/common/OptionPicker.tsx similarity index 100% rename from packages/studio/src/components/common/OptionPicker.tsx rename to packages/studio-ui/src/components/common/OptionPicker.tsx diff --git a/packages/studio/src/components/common/Toggle.tsx b/packages/studio-ui/src/components/common/Toggle.tsx similarity index 100% rename from packages/studio/src/components/common/Toggle.tsx rename to packages/studio-ui/src/components/common/Toggle.tsx diff --git a/packages/studio/src/components/common/renderIconForType.tsx b/packages/studio-ui/src/components/common/renderIconForType.tsx similarity index 100% rename from packages/studio/src/components/common/renderIconForType.tsx rename to packages/studio-ui/src/components/common/renderIconForType.tsx diff --git a/packages/studio/src/index.d.ts b/packages/studio-ui/src/global.d.ts similarity index 100% rename from packages/studio/src/index.d.ts rename to packages/studio-ui/src/global.d.ts diff --git a/packages/studio/src/hooks/useActiveComponent.tsx b/packages/studio-ui/src/hooks/useActiveComponent.tsx similarity index 100% rename from packages/studio/src/hooks/useActiveComponent.tsx rename to packages/studio-ui/src/hooks/useActiveComponent.tsx diff --git a/packages/studio/src/hooks/useActiveComponentName.tsx b/packages/studio-ui/src/hooks/useActiveComponentName.tsx similarity index 100% rename from packages/studio/src/hooks/useActiveComponentName.tsx rename to packages/studio-ui/src/hooks/useActiveComponentName.tsx diff --git a/packages/studio/src/hooks/useActiveComponentWithProps.tsx b/packages/studio-ui/src/hooks/useActiveComponentWithProps.tsx similarity index 100% rename from packages/studio/src/hooks/useActiveComponentWithProps.tsx rename to packages/studio-ui/src/hooks/useActiveComponentWithProps.tsx diff --git a/packages/studio/src/hooks/useComposedCssClasses.tsx b/packages/studio-ui/src/hooks/useComposedCssClasses.tsx similarity index 100% rename from packages/studio/src/hooks/useComposedCssClasses.tsx rename to packages/studio-ui/src/hooks/useComposedCssClasses.tsx diff --git a/packages/studio/src/hooks/useFuncWithZundoBatching.tsx b/packages/studio-ui/src/hooks/useFuncWithZundoBatching.tsx similarity index 100% rename from packages/studio/src/hooks/useFuncWithZundoBatching.tsx rename to packages/studio-ui/src/hooks/useFuncWithZundoBatching.tsx diff --git a/packages/studio/src/hooks/useHasChanges.ts b/packages/studio-ui/src/hooks/useHasChanges.ts similarity index 100% rename from packages/studio/src/hooks/useHasChanges.ts rename to packages/studio-ui/src/hooks/useHasChanges.ts diff --git a/packages/studio/src/hooks/useImportedComponents.tsx b/packages/studio-ui/src/hooks/useImportedComponents.tsx similarity index 100% rename from packages/studio/src/hooks/useImportedComponents.tsx rename to packages/studio-ui/src/hooks/useImportedComponents.tsx diff --git a/packages/studio/src/hooks/useOnPropChange.tsx b/packages/studio-ui/src/hooks/useOnPropChange.tsx similarity index 100% rename from packages/studio/src/hooks/useOnPropChange.tsx rename to packages/studio-ui/src/hooks/useOnPropChange.tsx diff --git a/packages/studio/src/hooks/usePreviewProps.tsx b/packages/studio-ui/src/hooks/usePreviewProps.tsx similarity index 100% rename from packages/studio/src/hooks/usePreviewProps.tsx rename to packages/studio-ui/src/hooks/usePreviewProps.tsx diff --git a/packages/studio/src/hooks/useRawSiteSettings.tsx b/packages/studio-ui/src/hooks/useRawSiteSettings.tsx similarity index 100% rename from packages/studio/src/hooks/useRawSiteSettings.tsx rename to packages/studio-ui/src/hooks/useRawSiteSettings.tsx diff --git a/packages/studio/src/icons/addcomponent.svg b/packages/studio-ui/src/icons/addcomponent.svg similarity index 100% rename from packages/studio/src/icons/addcomponent.svg rename to packages/studio-ui/src/icons/addcomponent.svg diff --git a/packages/studio/src/icons/box.svg b/packages/studio-ui/src/icons/box.svg similarity index 100% rename from packages/studio/src/icons/box.svg rename to packages/studio-ui/src/icons/box.svg diff --git a/packages/studio/src/icons/check.svg b/packages/studio-ui/src/icons/check.svg similarity index 100% rename from packages/studio/src/icons/check.svg rename to packages/studio-ui/src/icons/check.svg diff --git a/packages/studio/src/icons/container.svg b/packages/studio-ui/src/icons/container.svg similarity index 100% rename from packages/studio/src/icons/container.svg rename to packages/studio-ui/src/icons/container.svg diff --git a/packages/studio/src/icons/content.svg b/packages/studio-ui/src/icons/content.svg similarity index 100% rename from packages/studio/src/icons/content.svg rename to packages/studio-ui/src/icons/content.svg diff --git a/packages/studio/src/icons/deletemodule.svg b/packages/studio-ui/src/icons/deletemodule.svg similarity index 100% rename from packages/studio/src/icons/deletemodule.svg rename to packages/studio-ui/src/icons/deletemodule.svg diff --git a/packages/studio/src/icons/detachmodule.svg b/packages/studio-ui/src/icons/detachmodule.svg similarity index 100% rename from packages/studio/src/icons/detachmodule.svg rename to packages/studio-ui/src/icons/detachmodule.svg diff --git a/packages/studio/src/icons/editmodule.svg b/packages/studio-ui/src/icons/editmodule.svg similarity index 100% rename from packages/studio/src/icons/editmodule.svg rename to packages/studio-ui/src/icons/editmodule.svg diff --git a/packages/studio/src/icons/ellipses.svg b/packages/studio-ui/src/icons/ellipses.svg similarity index 100% rename from packages/studio/src/icons/ellipses.svg rename to packages/studio-ui/src/icons/ellipses.svg diff --git a/packages/studio/src/icons/embed.svg b/packages/studio-ui/src/icons/embed.svg similarity index 100% rename from packages/studio/src/icons/embed.svg rename to packages/studio-ui/src/icons/embed.svg diff --git a/packages/studio/src/icons/gear.svg b/packages/studio-ui/src/icons/gear.svg similarity index 100% rename from packages/studio/src/icons/gear.svg rename to packages/studio-ui/src/icons/gear.svg diff --git a/packages/studio/src/icons/globe.svg b/packages/studio-ui/src/icons/globe.svg similarity index 100% rename from packages/studio/src/icons/globe.svg rename to packages/studio-ui/src/icons/globe.svg diff --git a/packages/studio/src/icons/hexagon.svg b/packages/studio-ui/src/icons/hexagon.svg similarity index 100% rename from packages/studio/src/icons/hexagon.svg rename to packages/studio-ui/src/icons/hexagon.svg diff --git a/packages/studio/src/icons/info.svg b/packages/studio-ui/src/icons/info.svg similarity index 100% rename from packages/studio/src/icons/info.svg rename to packages/studio-ui/src/icons/info.svg diff --git a/packages/studio/src/icons/plus.svg b/packages/studio-ui/src/icons/plus.svg similarity index 100% rename from packages/studio/src/icons/plus.svg rename to packages/studio-ui/src/icons/plus.svg diff --git a/packages/studio/src/icons/sliders.svg b/packages/studio-ui/src/icons/sliders.svg similarity index 100% rename from packages/studio/src/icons/sliders.svg rename to packages/studio-ui/src/icons/sliders.svg diff --git a/packages/studio/src/icons/undo.svg b/packages/studio-ui/src/icons/undo.svg similarity index 100% rename from packages/studio/src/icons/undo.svg rename to packages/studio-ui/src/icons/undo.svg diff --git a/packages/studio/src/icons/vector.svg b/packages/studio-ui/src/icons/vector.svg similarity index 100% rename from packages/studio/src/icons/vector.svg rename to packages/studio-ui/src/icons/vector.svg diff --git a/packages/studio/src/icons/viewport.svg b/packages/studio-ui/src/icons/viewport.svg similarity index 100% rename from packages/studio/src/icons/viewport.svg rename to packages/studio-ui/src/icons/viewport.svg diff --git a/packages/studio/src/icons/x.svg b/packages/studio-ui/src/icons/x.svg similarity index 100% rename from packages/studio/src/icons/x.svg rename to packages/studio-ui/src/icons/x.svg diff --git a/packages/studio/src/icons/yextfavicon.svg b/packages/studio-ui/src/icons/yextfavicon.svg similarity index 100% rename from packages/studio/src/icons/yextfavicon.svg rename to packages/studio-ui/src/icons/yextfavicon.svg diff --git a/packages/studio-ui/src/index.ts b/packages/studio-ui/src/index.ts new file mode 100644 index 000000000..565fcf964 --- /dev/null +++ b/packages/studio-ui/src/index.ts @@ -0,0 +1,2 @@ +export { default as App } from "./App" +export { default as hotReloadStore } from "./store/hotReloadStore" \ No newline at end of file diff --git a/packages/studio/src/messaging/sendMessage.ts b/packages/studio-ui/src/messaging/sendMessage.ts similarity index 100% rename from packages/studio/src/messaging/sendMessage.ts rename to packages/studio-ui/src/messaging/sendMessage.ts diff --git a/packages/studio/src/store/StudioActions.ts b/packages/studio-ui/src/store/StudioActions.ts similarity index 100% rename from packages/studio/src/store/StudioActions.ts rename to packages/studio-ui/src/store/StudioActions.ts diff --git a/packages/studio/src/store/StudioActions/AddComponentAction.ts b/packages/studio-ui/src/store/StudioActions/AddComponentAction.ts similarity index 100% rename from packages/studio/src/store/StudioActions/AddComponentAction.ts rename to packages/studio-ui/src/store/StudioActions/AddComponentAction.ts diff --git a/packages/studio/src/store/StudioActions/CreateComponentStateAction.ts b/packages/studio-ui/src/store/StudioActions/CreateComponentStateAction.ts similarity index 100% rename from packages/studio/src/store/StudioActions/CreateComponentStateAction.ts rename to packages/studio-ui/src/store/StudioActions/CreateComponentStateAction.ts diff --git a/packages/studio/src/store/StudioActions/CreatePageAction.ts b/packages/studio-ui/src/store/StudioActions/CreatePageAction.ts similarity index 100% rename from packages/studio/src/store/StudioActions/CreatePageAction.ts rename to packages/studio-ui/src/store/StudioActions/CreatePageAction.ts diff --git a/packages/studio/src/store/StudioActions/GenerateTestDataAction.ts b/packages/studio-ui/src/store/StudioActions/GenerateTestDataAction.ts similarity index 100% rename from packages/studio/src/store/StudioActions/GenerateTestDataAction.ts rename to packages/studio-ui/src/store/StudioActions/GenerateTestDataAction.ts diff --git a/packages/studio/src/store/StudioActions/ImportComponentAction.ts b/packages/studio-ui/src/store/StudioActions/ImportComponentAction.ts similarity index 100% rename from packages/studio/src/store/StudioActions/ImportComponentAction.ts rename to packages/studio-ui/src/store/StudioActions/ImportComponentAction.ts diff --git a/packages/studio/src/store/StudioActions/UpdateActivePageAction.ts b/packages/studio-ui/src/store/StudioActions/UpdateActivePageAction.ts similarity index 100% rename from packages/studio/src/store/StudioActions/UpdateActivePageAction.ts rename to packages/studio-ui/src/store/StudioActions/UpdateActivePageAction.ts diff --git a/packages/studio/src/store/createModuleAction.ts b/packages/studio-ui/src/store/createModuleAction.ts similarity index 100% rename from packages/studio/src/store/createModuleAction.ts rename to packages/studio-ui/src/store/createModuleAction.ts diff --git a/packages/studio/src/store/hotReloadStore.ts b/packages/studio-ui/src/store/hotReloadStore.ts similarity index 100% rename from packages/studio/src/store/hotReloadStore.ts rename to packages/studio-ui/src/store/hotReloadStore.ts diff --git a/packages/studio/src/store/models/DOMRectProperties.ts b/packages/studio-ui/src/store/models/DOMRectProperties.ts similarity index 100% rename from packages/studio/src/store/models/DOMRectProperties.ts rename to packages/studio-ui/src/store/models/DOMRectProperties.ts diff --git a/packages/studio/src/store/models/ImportType.ts b/packages/studio-ui/src/store/models/ImportType.ts similarity index 100% rename from packages/studio/src/store/models/ImportType.ts rename to packages/studio-ui/src/store/models/ImportType.ts diff --git a/packages/studio/src/store/models/StudioStore.ts b/packages/studio-ui/src/store/models/StudioStore.ts similarity index 100% rename from packages/studio/src/store/models/StudioStore.ts rename to packages/studio-ui/src/store/models/StudioStore.ts diff --git a/packages/studio/src/store/models/slices/FileMetadataSlice.ts b/packages/studio-ui/src/store/models/slices/FileMetadataSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/FileMetadataSlice.ts rename to packages/studio-ui/src/store/models/slices/FileMetadataSlice.ts diff --git a/packages/studio/src/store/models/slices/PagePreviewSlice.ts b/packages/studio-ui/src/store/models/slices/PagePreviewSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/PagePreviewSlice.ts rename to packages/studio-ui/src/store/models/slices/PagePreviewSlice.ts diff --git a/packages/studio/src/store/models/slices/PageSlice.ts b/packages/studio-ui/src/store/models/slices/PageSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/PageSlice.ts rename to packages/studio-ui/src/store/models/slices/PageSlice.ts diff --git a/packages/studio/src/store/models/slices/PreviousSaveSlice.ts b/packages/studio-ui/src/store/models/slices/PreviousSaveSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/PreviousSaveSlice.ts rename to packages/studio-ui/src/store/models/slices/PreviousSaveSlice.ts diff --git a/packages/studio/src/store/models/slices/SiteSettingsSlice.ts b/packages/studio-ui/src/store/models/slices/SiteSettingsSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/SiteSettingsSlice.ts rename to packages/studio-ui/src/store/models/slices/SiteSettingsSlice.ts diff --git a/packages/studio/src/store/models/slices/StudioConfigSlice.ts b/packages/studio-ui/src/store/models/slices/StudioConfigSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/StudioConfigSlice.ts rename to packages/studio-ui/src/store/models/slices/StudioConfigSlice.ts diff --git a/packages/studio/src/store/models/slices/StudioEnvDataSlice.ts b/packages/studio-ui/src/store/models/slices/StudioEnvDataSlice.ts similarity index 100% rename from packages/studio/src/store/models/slices/StudioEnvDataSlice.ts rename to packages/studio-ui/src/store/models/slices/StudioEnvDataSlice.ts diff --git a/packages/studio/src/store/models/utils.ts b/packages/studio-ui/src/store/models/utils.ts similarity index 100% rename from packages/studio/src/store/models/utils.ts rename to packages/studio-ui/src/store/models/utils.ts diff --git a/packages/studio/src/store/slices/createFileMetadataSlice.ts b/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts similarity index 100% rename from packages/studio/src/store/slices/createFileMetadataSlice.ts rename to packages/studio-ui/src/store/slices/createFileMetadataSlice.ts diff --git a/packages/studio/src/store/slices/createPagePreviewSlice.ts b/packages/studio-ui/src/store/slices/createPagePreviewSlice.ts similarity index 100% rename from packages/studio/src/store/slices/createPagePreviewSlice.ts rename to packages/studio-ui/src/store/slices/createPagePreviewSlice.ts diff --git a/packages/studio/src/store/slices/createPreviousSaveSlice.ts b/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts similarity index 100% rename from packages/studio/src/store/slices/createPreviousSaveSlice.ts rename to packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts diff --git a/packages/studio/src/store/slices/createSiteSettingsSlice.ts b/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts similarity index 100% rename from packages/studio/src/store/slices/createSiteSettingsSlice.ts rename to packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts diff --git a/packages/studio/src/store/slices/createStudioConfigSlice.ts b/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts similarity index 100% rename from packages/studio/src/store/slices/createStudioConfigSlice.ts rename to packages/studio-ui/src/store/slices/createStudioConfigSlice.ts diff --git a/packages/studio/src/store/slices/createStudioEnvDataSlice.ts b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts similarity index 100% rename from packages/studio/src/store/slices/createStudioEnvDataSlice.ts rename to packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts diff --git a/packages/studio/src/store/slices/pages/createPageSlice.ts b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts similarity index 100% rename from packages/studio/src/store/slices/pages/createPageSlice.ts rename to packages/studio-ui/src/store/slices/pages/createPageSlice.ts diff --git a/packages/studio/src/store/slices/pages/detachAllModuleInstances.ts b/packages/studio-ui/src/store/slices/pages/detachAllModuleInstances.ts similarity index 100% rename from packages/studio/src/store/slices/pages/detachAllModuleInstances.ts rename to packages/studio-ui/src/store/slices/pages/detachAllModuleInstances.ts diff --git a/packages/studio/src/store/useStudioStore.ts b/packages/studio-ui/src/store/useStudioStore.ts similarity index 100% rename from packages/studio/src/store/useStudioStore.ts rename to packages/studio-ui/src/store/useStudioStore.ts diff --git a/packages/studio/src/store/useTemporalStore.ts b/packages/studio-ui/src/store/useTemporalStore.ts similarity index 100% rename from packages/studio/src/store/useTemporalStore.ts rename to packages/studio-ui/src/store/useTemporalStore.ts diff --git a/packages/studio/src/store/zundoMiddleware.ts b/packages/studio-ui/src/store/zundoMiddleware.ts similarity index 100% rename from packages/studio/src/store/zundoMiddleware.ts rename to packages/studio-ui/src/store/zundoMiddleware.ts diff --git a/packages/studio/src/tailwind-directives.css b/packages/studio-ui/src/tailwind-directives.css similarity index 100% rename from packages/studio/src/tailwind-directives.css rename to packages/studio-ui/src/tailwind-directives.css diff --git a/packages/studio/src/utils/PageDataValidator.ts b/packages/studio-ui/src/utils/PageDataValidator.ts similarity index 100% rename from packages/studio/src/utils/PageDataValidator.ts rename to packages/studio-ui/src/utils/PageDataValidator.ts diff --git a/packages/studio/src/utils/PropValueHelpers.ts b/packages/studio-ui/src/utils/PropValueHelpers.ts similarity index 100% rename from packages/studio/src/utils/PropValueHelpers.ts rename to packages/studio-ui/src/utils/PropValueHelpers.ts diff --git a/packages/studio/src/utils/StreamScopeParser.ts b/packages/studio-ui/src/utils/StreamScopeParser.ts similarity index 100% rename from packages/studio/src/utils/StreamScopeParser.ts rename to packages/studio-ui/src/utils/StreamScopeParser.ts diff --git a/packages/studio/src/utils/TemplateExpressionFormatter.ts b/packages/studio-ui/src/utils/TemplateExpressionFormatter.ts similarity index 100% rename from packages/studio/src/utils/TemplateExpressionFormatter.ts rename to packages/studio-ui/src/utils/TemplateExpressionFormatter.ts diff --git a/packages/studio/src/utils/createIsSupportedPropMetadata.ts b/packages/studio-ui/src/utils/createIsSupportedPropMetadata.ts similarity index 100% rename from packages/studio/src/utils/createIsSupportedPropMetadata.ts rename to packages/studio-ui/src/utils/createIsSupportedPropMetadata.ts diff --git a/packages/studio/src/utils/dynamicImportFromBrowser.ts b/packages/studio-ui/src/utils/dynamicImportFromBrowser.ts similarity index 100% rename from packages/studio/src/utils/dynamicImportFromBrowser.ts rename to packages/studio-ui/src/utils/dynamicImportFromBrowser.ts diff --git a/packages/studio/src/utils/filterEntityData.ts b/packages/studio-ui/src/utils/filterEntityData.ts similarity index 100% rename from packages/studio/src/utils/filterEntityData.ts rename to packages/studio-ui/src/utils/filterEntityData.ts diff --git a/packages/studio/src/utils/generateTailwindSafelist.ts b/packages/studio-ui/src/utils/generateTailwindSafelist.ts similarity index 100% rename from packages/studio/src/utils/generateTailwindSafelist.ts rename to packages/studio-ui/src/utils/generateTailwindSafelist.ts diff --git a/packages/studio/src/utils/getFunctionComponent.ts b/packages/studio-ui/src/utils/getFunctionComponent.ts similarity index 100% rename from packages/studio/src/utils/getFunctionComponent.ts rename to packages/studio-ui/src/utils/getFunctionComponent.ts diff --git a/packages/studio/src/utils/getPropsForPreview.ts b/packages/studio-ui/src/utils/getPropsForPreview.ts similarity index 100% rename from packages/studio/src/utils/getPropsForPreview.ts rename to packages/studio-ui/src/utils/getPropsForPreview.ts diff --git a/packages/studio/src/utils/rectToJson.ts b/packages/studio-ui/src/utils/rectToJson.ts similarity index 100% rename from packages/studio/src/utils/rectToJson.ts rename to packages/studio-ui/src/utils/rectToJson.ts diff --git a/packages/studio/src/utils/removeTopLevelFragments.ts b/packages/studio-ui/src/utils/removeTopLevelFragments.ts similarity index 100% rename from packages/studio/src/utils/removeTopLevelFragments.ts rename to packages/studio-ui/src/utils/removeTopLevelFragments.ts diff --git a/packages/studio/tests/__fixtures__/componentStates.ts b/packages/studio-ui/tests/__fixtures__/componentStates.ts similarity index 100% rename from packages/studio/tests/__fixtures__/componentStates.ts rename to packages/studio-ui/tests/__fixtures__/componentStates.ts diff --git a/packages/studio/tests/__fixtures__/mockStoreNestedComponents.ts b/packages/studio-ui/tests/__fixtures__/mockStoreNestedComponents.ts similarity index 100% rename from packages/studio/tests/__fixtures__/mockStoreNestedComponents.ts rename to packages/studio-ui/tests/__fixtures__/mockStoreNestedComponents.ts diff --git a/packages/studio/tests/__mocks__/Banner.tsx b/packages/studio-ui/tests/__mocks__/Banner.tsx similarity index 100% rename from packages/studio/tests/__mocks__/Banner.tsx rename to packages/studio-ui/tests/__mocks__/Banner.tsx diff --git a/packages/studio/tests/__mocks__/Container.tsx b/packages/studio-ui/tests/__mocks__/Container.tsx similarity index 100% rename from packages/studio/tests/__mocks__/Container.tsx rename to packages/studio-ui/tests/__mocks__/Container.tsx diff --git a/packages/studio/tests/__mocks__/Panel.tsx b/packages/studio-ui/tests/__mocks__/Panel.tsx similarity index 100% rename from packages/studio/tests/__mocks__/Panel.tsx rename to packages/studio-ui/tests/__mocks__/Panel.tsx diff --git a/packages/studio/tests/__mocks__/entityFile.json b/packages/studio-ui/tests/__mocks__/entityFile.json similarity index 100% rename from packages/studio/tests/__mocks__/entityFile.json rename to packages/studio-ui/tests/__mocks__/entityFile.json diff --git a/packages/studio/tests/__mocks__/mockLocalData.json b/packages/studio-ui/tests/__mocks__/mockLocalData.json similarity index 100% rename from packages/studio/tests/__mocks__/mockLocalData.json rename to packages/studio-ui/tests/__mocks__/mockLocalData.json diff --git a/packages/studio/tests/__mocks__/siteSettings.ts b/packages/studio-ui/tests/__mocks__/siteSettings.ts similarity index 100% rename from packages/studio/tests/__mocks__/siteSettings.ts rename to packages/studio-ui/tests/__mocks__/siteSettings.ts diff --git a/packages/studio/tests/__setup__/setup-env.ts b/packages/studio-ui/tests/__setup__/setup-env.ts similarity index 100% rename from packages/studio/tests/__setup__/setup-env.ts rename to packages/studio-ui/tests/__setup__/setup-env.ts diff --git a/packages/studio/tests/__setup__/svgTransformer.cjs b/packages/studio-ui/tests/__setup__/svgTransformer.cjs similarity index 100% rename from packages/studio/tests/__setup__/svgTransformer.cjs rename to packages/studio-ui/tests/__setup__/svgTransformer.cjs diff --git a/packages/studio/tests/__utils__/helpers.ts b/packages/studio-ui/tests/__utils__/helpers.ts similarity index 100% rename from packages/studio/tests/__utils__/helpers.ts rename to packages/studio-ui/tests/__utils__/helpers.ts diff --git a/packages/studio/tests/__utils__/mockActiveComponentState.ts b/packages/studio-ui/tests/__utils__/mockActiveComponentState.ts similarity index 100% rename from packages/studio/tests/__utils__/mockActiveComponentState.ts rename to packages/studio-ui/tests/__utils__/mockActiveComponentState.ts diff --git a/packages/studio/tests/__utils__/mockActivePage.ts b/packages/studio-ui/tests/__utils__/mockActivePage.ts similarity index 100% rename from packages/studio/tests/__utils__/mockActivePage.ts rename to packages/studio-ui/tests/__utils__/mockActivePage.ts diff --git a/packages/studio/tests/__utils__/mockActivePageTree.ts b/packages/studio-ui/tests/__utils__/mockActivePageTree.ts similarity index 100% rename from packages/studio/tests/__utils__/mockActivePageTree.ts rename to packages/studio-ui/tests/__utils__/mockActivePageTree.ts diff --git a/packages/studio/tests/__utils__/mockPageSliceState.ts b/packages/studio-ui/tests/__utils__/mockPageSliceState.ts similarity index 100% rename from packages/studio/tests/__utils__/mockPageSliceState.ts rename to packages/studio-ui/tests/__utils__/mockPageSliceState.ts diff --git a/packages/studio/tests/__utils__/mockRepeaterActiveComponent.ts b/packages/studio-ui/tests/__utils__/mockRepeaterActiveComponent.ts similarity index 100% rename from packages/studio/tests/__utils__/mockRepeaterActiveComponent.ts rename to packages/studio-ui/tests/__utils__/mockRepeaterActiveComponent.ts diff --git a/packages/studio/tests/__utils__/mockStore.ts b/packages/studio-ui/tests/__utils__/mockStore.ts similarity index 100% rename from packages/studio/tests/__utils__/mockStore.ts rename to packages/studio-ui/tests/__utils__/mockStore.ts diff --git a/packages/studio/tests/components/ActiveComponentPropEditors.test.tsx b/packages/studio-ui/tests/components/ActiveComponentPropEditors.test.tsx similarity index 100% rename from packages/studio/tests/components/ActiveComponentPropEditors.test.tsx rename to packages/studio-ui/tests/components/ActiveComponentPropEditors.test.tsx diff --git a/packages/studio/tests/components/ActivePagePanel.test.tsx b/packages/studio-ui/tests/components/ActivePagePanel.test.tsx similarity index 100% rename from packages/studio/tests/components/ActivePagePanel.test.tsx rename to packages/studio-ui/tests/components/ActivePagePanel.test.tsx diff --git a/packages/studio/tests/components/AddElementButton.test.tsx b/packages/studio-ui/tests/components/AddElementButton.test.tsx similarity index 100% rename from packages/studio/tests/components/AddElementButton.test.tsx rename to packages/studio-ui/tests/components/AddElementButton.test.tsx diff --git a/packages/studio/tests/components/AddElementMenu.test.tsx b/packages/studio-ui/tests/components/AddElementMenu.test.tsx similarity index 100% rename from packages/studio/tests/components/AddElementMenu.test.tsx rename to packages/studio-ui/tests/components/AddElementMenu.test.tsx diff --git a/packages/studio/tests/components/AddPageFlow/AddPageButton.test.tsx b/packages/studio-ui/tests/components/AddPageFlow/AddPageButton.test.tsx similarity index 100% rename from packages/studio/tests/components/AddPageFlow/AddPageButton.test.tsx rename to packages/studio-ui/tests/components/AddPageFlow/AddPageButton.test.tsx diff --git a/packages/studio/tests/components/ArrayPropEditor.test.tsx b/packages/studio-ui/tests/components/ArrayPropEditor.test.tsx similarity index 100% rename from packages/studio/tests/components/ArrayPropEditor.test.tsx rename to packages/studio-ui/tests/components/ArrayPropEditor.test.tsx diff --git a/packages/studio/tests/components/ComponentTree.test.tsx b/packages/studio-ui/tests/components/ComponentTree.test.tsx similarity index 100% rename from packages/studio/tests/components/ComponentTree.test.tsx rename to packages/studio-ui/tests/components/ComponentTree.test.tsx diff --git a/packages/studio/tests/components/CreateModuleButton.test.tsx b/packages/studio-ui/tests/components/CreateModuleButton.test.tsx similarity index 100% rename from packages/studio/tests/components/CreateModuleButton.test.tsx rename to packages/studio-ui/tests/components/CreateModuleButton.test.tsx diff --git a/packages/studio/tests/components/EntityPicker.test.tsx b/packages/studio-ui/tests/components/EntityPicker.test.tsx similarity index 100% rename from packages/studio/tests/components/EntityPicker.test.tsx rename to packages/studio-ui/tests/components/EntityPicker.test.tsx diff --git a/packages/studio/tests/components/ErrorBoundary.test.tsx b/packages/studio-ui/tests/components/ErrorBoundary.test.tsx similarity index 100% rename from packages/studio/tests/components/ErrorBoundary.test.tsx rename to packages/studio-ui/tests/components/ErrorBoundary.test.tsx diff --git a/packages/studio/tests/components/FieldPicker/FieldPicker.test.tsx b/packages/studio-ui/tests/components/FieldPicker/FieldPicker.test.tsx similarity index 100% rename from packages/studio/tests/components/FieldPicker/FieldPicker.test.tsx rename to packages/studio-ui/tests/components/FieldPicker/FieldPicker.test.tsx diff --git a/packages/studio/tests/components/Highlighter.test.tsx b/packages/studio-ui/tests/components/Highlighter.test.tsx similarity index 100% rename from packages/studio/tests/components/Highlighter.test.tsx rename to packages/studio-ui/tests/components/Highlighter.test.tsx diff --git a/packages/studio/tests/components/InfoButton.test.tsx b/packages/studio-ui/tests/components/InfoButton.test.tsx similarity index 100% rename from packages/studio/tests/components/InfoButton.test.tsx rename to packages/studio-ui/tests/components/InfoButton.test.tsx diff --git a/packages/studio/tests/components/ModuleActions.test.tsx/DeleteModuleButton.test.tsx b/packages/studio-ui/tests/components/ModuleActions.test.tsx/DeleteModuleButton.test.tsx similarity index 100% rename from packages/studio/tests/components/ModuleActions.test.tsx/DeleteModuleButton.test.tsx rename to packages/studio-ui/tests/components/ModuleActions.test.tsx/DeleteModuleButton.test.tsx diff --git a/packages/studio/tests/components/ModuleActions.test.tsx/EditModuleButton.test.tsx b/packages/studio-ui/tests/components/ModuleActions.test.tsx/EditModuleButton.test.tsx similarity index 100% rename from packages/studio/tests/components/ModuleActions.test.tsx/EditModuleButton.test.tsx rename to packages/studio-ui/tests/components/ModuleActions.test.tsx/EditModuleButton.test.tsx diff --git a/packages/studio/tests/components/OpenLivePreviewButton.test.tsx b/packages/studio-ui/tests/components/OpenLivePreviewButton.test.tsx similarity index 100% rename from packages/studio/tests/components/OpenLivePreviewButton.test.tsx rename to packages/studio-ui/tests/components/OpenLivePreviewButton.test.tsx diff --git a/packages/studio/tests/components/PageSettingsButton.test.tsx b/packages/studio-ui/tests/components/PageSettingsButton.test.tsx similarity index 100% rename from packages/studio/tests/components/PageSettingsButton.test.tsx rename to packages/studio-ui/tests/components/PageSettingsButton.test.tsx diff --git a/packages/studio/tests/components/PreviewPanel.test.tsx b/packages/studio-ui/tests/components/PreviewPanel.test.tsx similarity index 100% rename from packages/studio/tests/components/PreviewPanel.test.tsx rename to packages/studio-ui/tests/components/PreviewPanel.test.tsx diff --git a/packages/studio/tests/components/PropEditor.test.tsx b/packages/studio-ui/tests/components/PropEditor.test.tsx similarity index 100% rename from packages/studio/tests/components/PropEditor.test.tsx rename to packages/studio-ui/tests/components/PropEditor.test.tsx diff --git a/packages/studio/tests/components/PropInput.test.tsx b/packages/studio-ui/tests/components/PropInput.test.tsx similarity index 100% rename from packages/studio/tests/components/PropInput.test.tsx rename to packages/studio-ui/tests/components/PropInput.test.tsx diff --git a/packages/studio/tests/components/PropsPanel.test.tsx b/packages/studio-ui/tests/components/PropsPanel.test.tsx similarity index 100% rename from packages/studio/tests/components/PropsPanel.test.tsx rename to packages/studio-ui/tests/components/PropsPanel.test.tsx diff --git a/packages/studio/tests/components/RemoveElementButton.test.tsx b/packages/studio-ui/tests/components/RemoveElementButton.test.tsx similarity index 100% rename from packages/studio/tests/components/RemoveElementButton.test.tsx rename to packages/studio-ui/tests/components/RemoveElementButton.test.tsx diff --git a/packages/studio/tests/components/RemovePageButton.test.tsx b/packages/studio-ui/tests/components/RemovePageButton.test.tsx similarity index 100% rename from packages/studio/tests/components/RemovePageButton.test.tsx rename to packages/studio-ui/tests/components/RemovePageButton.test.tsx diff --git a/packages/studio/tests/components/RepeaterPanel.test.tsx b/packages/studio-ui/tests/components/RepeaterPanel.test.tsx similarity index 100% rename from packages/studio/tests/components/RepeaterPanel.test.tsx rename to packages/studio-ui/tests/components/RepeaterPanel.test.tsx diff --git a/packages/studio/tests/components/SaveButton.test.tsx b/packages/studio-ui/tests/components/SaveButton.test.tsx similarity index 100% rename from packages/studio/tests/components/SaveButton.test.tsx rename to packages/studio-ui/tests/components/SaveButton.test.tsx diff --git a/packages/studio/tests/components/SiteSettingsPanel.test.tsx b/packages/studio-ui/tests/components/SiteSettingsPanel.test.tsx similarity index 100% rename from packages/studio/tests/components/SiteSettingsPanel.test.tsx rename to packages/studio-ui/tests/components/SiteSettingsPanel.test.tsx diff --git a/packages/studio/tests/components/TailwindPropInput.test.tsx b/packages/studio-ui/tests/components/TailwindPropInput.test.tsx similarity index 100% rename from packages/studio/tests/components/TailwindPropInput.test.tsx rename to packages/studio-ui/tests/components/TailwindPropInput.test.tsx diff --git a/packages/studio/tests/components/UndefinedMenuButton.test.tsx b/packages/studio-ui/tests/components/UndefinedMenuButton.test.tsx similarity index 100% rename from packages/studio/tests/components/UndefinedMenuButton.test.tsx rename to packages/studio-ui/tests/components/UndefinedMenuButton.test.tsx diff --git a/packages/studio/tests/components/UndoRedo.test.tsx b/packages/studio-ui/tests/components/UndoRedo.test.tsx similarity index 100% rename from packages/studio/tests/components/UndoRedo.test.tsx rename to packages/studio-ui/tests/components/UndoRedo.test.tsx diff --git a/packages/studio/tests/components/ViewportButton.test.jsx b/packages/studio-ui/tests/components/ViewportButton.test.jsx similarity index 100% rename from packages/studio/tests/components/ViewportButton.test.jsx rename to packages/studio-ui/tests/components/ViewportButton.test.jsx diff --git a/packages/studio/tests/hooks/useImportedComponents.test.tsx b/packages/studio-ui/tests/hooks/useImportedComponents.test.tsx similarity index 100% rename from packages/studio/tests/hooks/useImportedComponents.test.tsx rename to packages/studio-ui/tests/hooks/useImportedComponents.test.tsx diff --git a/packages/studio/tests/store/StudioActions/AddComponentAction.test.ts b/packages/studio-ui/tests/store/StudioActions/AddComponentAction.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/AddComponentAction.test.ts rename to packages/studio-ui/tests/store/StudioActions/AddComponentAction.test.ts diff --git a/packages/studio/tests/store/StudioActions/CreateComponentStateAction.test.ts b/packages/studio-ui/tests/store/StudioActions/CreateComponentStateAction.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/CreateComponentStateAction.test.ts rename to packages/studio-ui/tests/store/StudioActions/CreateComponentStateAction.test.ts diff --git a/packages/studio/tests/store/StudioActions/GenerateTestDataAction.test.ts b/packages/studio-ui/tests/store/StudioActions/GenerateTestDataAction.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/GenerateTestDataAction.test.ts rename to packages/studio-ui/tests/store/StudioActions/GenerateTestDataAction.test.ts diff --git a/packages/studio/tests/store/StudioActions/UpdateActivePageAction.test.ts b/packages/studio-ui/tests/store/StudioActions/UpdateActivePageAction.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/UpdateActivePageAction.test.ts rename to packages/studio-ui/tests/store/StudioActions/UpdateActivePageAction.test.ts diff --git a/packages/studio/tests/store/StudioActions/activeComponentActions.test.ts b/packages/studio-ui/tests/store/StudioActions/activeComponentActions.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/activeComponentActions.test.ts rename to packages/studio-ui/tests/store/StudioActions/activeComponentActions.test.ts diff --git a/packages/studio/tests/store/StudioActions/createPage.test.ts b/packages/studio-ui/tests/store/StudioActions/createPage.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/createPage.test.ts rename to packages/studio-ui/tests/store/StudioActions/createPage.test.ts diff --git a/packages/studio/tests/store/StudioActions/detachModuleInstance.test.ts b/packages/studio-ui/tests/store/StudioActions/detachModuleInstance.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/detachModuleInstance.test.ts rename to packages/studio-ui/tests/store/StudioActions/detachModuleInstance.test.ts diff --git a/packages/studio/tests/store/StudioActions/refreshActivePageEntities.test.ts b/packages/studio-ui/tests/store/StudioActions/refreshActivePageEntities.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/refreshActivePageEntities.test.ts rename to packages/studio-ui/tests/store/StudioActions/refreshActivePageEntities.test.ts diff --git a/packages/studio/tests/store/StudioActions/removeComponent.test.ts b/packages/studio-ui/tests/store/StudioActions/removeComponent.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/removeComponent.test.ts rename to packages/studio-ui/tests/store/StudioActions/removeComponent.test.ts diff --git a/packages/studio/tests/store/StudioActions/saveChanges.test.ts b/packages/studio-ui/tests/store/StudioActions/saveChanges.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/saveChanges.test.ts rename to packages/studio-ui/tests/store/StudioActions/saveChanges.test.ts diff --git a/packages/studio/tests/store/StudioActions/updateActiveComponentProps.test.ts b/packages/studio-ui/tests/store/StudioActions/updateActiveComponentProps.test.ts similarity index 100% rename from packages/studio/tests/store/StudioActions/updateActiveComponentProps.test.ts rename to packages/studio-ui/tests/store/StudioActions/updateActiveComponentProps.test.ts diff --git a/packages/studio/tests/store/createFileMetadataSlice/createFileMetadataSlice.test.tsx b/packages/studio-ui/tests/store/createFileMetadataSlice/createFileMetadataSlice.test.tsx similarity index 100% rename from packages/studio/tests/store/createFileMetadataSlice/createFileMetadataSlice.test.tsx rename to packages/studio-ui/tests/store/createFileMetadataSlice/createFileMetadataSlice.test.tsx diff --git a/packages/studio/tests/store/createModule.test.ts b/packages/studio-ui/tests/store/createModule.test.ts similarity index 100% rename from packages/studio/tests/store/createModule.test.ts rename to packages/studio-ui/tests/store/createModule.test.ts diff --git a/packages/studio/tests/store/createPageSlice/activeEntityActions.test.ts b/packages/studio-ui/tests/store/createPageSlice/activeEntityActions.test.ts similarity index 100% rename from packages/studio/tests/store/createPageSlice/activeEntityActions.test.ts rename to packages/studio-ui/tests/store/createPageSlice/activeEntityActions.test.ts diff --git a/packages/studio/tests/store/createPageSlice/activePageActions.test.ts b/packages/studio-ui/tests/store/createPageSlice/activePageActions.test.ts similarity index 100% rename from packages/studio/tests/store/createPageSlice/activePageActions.test.ts rename to packages/studio-ui/tests/store/createPageSlice/activePageActions.test.ts diff --git a/packages/studio/tests/store/createPageSlice/detachAllModuleInstances.test.ts b/packages/studio-ui/tests/store/createPageSlice/detachAllModuleInstances.test.ts similarity index 100% rename from packages/studio/tests/store/createPageSlice/detachAllModuleInstances.test.ts rename to packages/studio-ui/tests/store/createPageSlice/detachAllModuleInstances.test.ts diff --git a/packages/studio/tests/store/createPageSlice/pageActions.test.ts b/packages/studio-ui/tests/store/createPageSlice/pageActions.test.ts similarity index 100% rename from packages/studio/tests/store/createPageSlice/pageActions.test.ts rename to packages/studio-ui/tests/store/createPageSlice/pageActions.test.ts diff --git a/packages/studio/tests/store/createPageSlice/pageComponentActions.test.ts b/packages/studio-ui/tests/store/createPageSlice/pageComponentActions.test.ts similarity index 100% rename from packages/studio/tests/store/createPageSlice/pageComponentActions.test.ts rename to packages/studio-ui/tests/store/createPageSlice/pageComponentActions.test.ts diff --git a/packages/studio/tests/store/createSiteSettings.test.ts b/packages/studio-ui/tests/store/createSiteSettings.test.ts similarity index 100% rename from packages/studio/tests/store/createSiteSettings.test.ts rename to packages/studio-ui/tests/store/createSiteSettings.test.ts diff --git a/packages/studio/tests/tsconfig.json b/packages/studio-ui/tests/tsconfig.json similarity index 100% rename from packages/studio/tests/tsconfig.json rename to packages/studio-ui/tests/tsconfig.json diff --git a/packages/studio/tests/utils/PageDataValidator.test.ts b/packages/studio-ui/tests/utils/PageDataValidator.test.ts similarity index 100% rename from packages/studio/tests/utils/PageDataValidator.test.ts rename to packages/studio-ui/tests/utils/PageDataValidator.test.ts diff --git a/packages/studio/tests/utils/PropValueHelpers.test.ts b/packages/studio-ui/tests/utils/PropValueHelpers.test.ts similarity index 100% rename from packages/studio/tests/utils/PropValueHelpers.test.ts rename to packages/studio-ui/tests/utils/PropValueHelpers.test.ts diff --git a/packages/studio/tests/utils/TemplateExpressionFormatter.test.ts b/packages/studio-ui/tests/utils/TemplateExpressionFormatter.test.ts similarity index 100% rename from packages/studio/tests/utils/TemplateExpressionFormatter.test.ts rename to packages/studio-ui/tests/utils/TemplateExpressionFormatter.test.ts diff --git a/packages/studio/tests/utils/filterEntityData.test.tsx b/packages/studio-ui/tests/utils/filterEntityData.test.tsx similarity index 100% rename from packages/studio/tests/utils/filterEntityData.test.tsx rename to packages/studio-ui/tests/utils/filterEntityData.test.tsx diff --git a/packages/studio/tests/utils/getPropsForPreview.test.ts b/packages/studio-ui/tests/utils/getPropsForPreview.test.ts similarity index 100% rename from packages/studio/tests/utils/getPropsForPreview.test.ts rename to packages/studio-ui/tests/utils/getPropsForPreview.test.ts diff --git a/packages/studio/tests/utils/removeTopLevelFragments.test.ts b/packages/studio-ui/tests/utils/removeTopLevelFragments.test.ts similarity index 100% rename from packages/studio/tests/utils/removeTopLevelFragments.test.ts rename to packages/studio-ui/tests/utils/removeTopLevelFragments.test.ts diff --git a/packages/studio-ui/tsconfig.json b/packages/studio-ui/tsconfig.json new file mode 100644 index 000000000..e3751b9ba --- /dev/null +++ b/packages/studio-ui/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "ESNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "noImplicitAny": false, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "declaration": true, + "resolveJsonModule": true, + "jsx": "react-jsx", + "target": "ESNext", + "outDir": "lib", + "types": [ + "vite/client", + "@yext/studio-plugin/virtual-module", + "vite-plugin-svgr/client" + ] + }, + "include": ["src"] +} diff --git a/packages/studio/.prettierignore b/packages/studio/.prettierignore deleted file mode 100644 index 0b9be3b37..000000000 --- a/packages/studio/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -dist/ -lib/ -coverage/ -src/tailwind-full.css \ No newline at end of file diff --git a/packages/studio/package.json b/packages/studio/package.json index 04102a5dc..76d287450 100644 --- a/packages/studio/package.json +++ b/packages/studio/package.json @@ -10,54 +10,23 @@ "dev": "tsc --watch --preserveWatchOutput -p tsconfig.node.json & tsc --watch --preserveWatchOutput -p tsconfig.json", "build": "run-script-os", "build:default": "npm run build:windows && chmod 755 lib/bin/studio.js", - "build:windows": "rimraf lib && tsc -p tsconfig.node.json && tsc -p tsconfig.json", - "preview": "vite preview", - "test": "jest", - "typecheck-jest": "npx tsc -p tests/tsconfig.json" + "build:windows": "rimraf lib && tsc -p tsconfig.node.json && tsc -p tsconfig.json" }, "dependencies": { - "@dhmk/zustand-lens": "^2.0.5", - "@minoru/react-dnd-treeview": "^3.4.1", - "@restart/ui": "^1.5.2", "@vitejs/plugin-react": "^4.0.4", "@yext/studio-plugin": "0.22.0", + "@yext/studio-ui": "0.22.0", "autoprefixer": "^10.4.14", "cac": "^6.7.14", - "classnames": "^2.3.2", "cross-env": "^7.0.3", - "immer": "^9.0.21", - "lodash": "^4.17.21", - "path-browserify": "^1.0.1", "postcss": "^8.4.27", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-modal": "3.16.1", - "react-toastify": "^9.1.1", - "react-tooltip": "^5.18.0", - "tailwind-merge": "^1.8.1", - "tailwindcss": "^3.3.3", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, "devDependencies": { - "@babel/core": "^7.20.5", - "@babel/plugin-syntax-flow": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@rollup/plugin-typescript": "^10.0.1", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "@types/jest": "^29.2.4", - "@types/lodash": "^4.14.191", "@types/node": "^18.11.15", - "@types/path-browserify": "^1.0.0", - "@types/react": "^18.0.26", - "@types/react-dom": "^18.0.10", - "@types/react-modal": "3.13.1", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.3.1", - "resize-observer-polyfill": "^1.5.1" + "@types/react": "^18.0.26" } } diff --git a/packages/studio/src/main.tsx b/packages/studio/src/main.tsx index 9c5588d5f..a8c796bd9 100644 --- a/packages/studio/src/main.tsx +++ b/packages/studio/src/main.tsx @@ -1,8 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; import App from "./App"; -import "./tailwind-directives.css"; -import "react-tooltip/dist/react-tooltip.css"; import { StudioHMRPayload, StudioHMRUpdateID } from "@yext/studio-plugin"; import hotReloadStore from "./store/hotReloadStore"; diff --git a/packages/studio/types.ts b/packages/studio/src/types.ts similarity index 100% rename from packages/studio/types.ts rename to packages/studio/src/types.ts diff --git a/packages/studio/tsconfig.json b/packages/studio/tsconfig.json index b43cff8f0..6b7b85642 100644 --- a/packages/studio/tsconfig.json +++ b/packages/studio/tsconfig.json @@ -6,11 +6,8 @@ "skipLibCheck": true, "noImplicitAny": false, "moduleResolution": "node", - "resolveJsonModule": true, "forceConsistentCasingInFileNames": true, "declaration": true, - "declarationMap": true, - "sourceMap": true, "jsx": "react-jsx", "target": "ESNext", "outDir": "lib", @@ -20,5 +17,5 @@ "vite-plugin-svgr/client" ] }, - "include": ["src", "types.ts"] + "include": ["src"] } From 8bc097e094b7919a1f126d83f77f5300aecbb92c Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 14:49:07 -0400 Subject: [PATCH 02/24] separate out virtual modules from studio-ui and move generateTailwindSafelist into studio-plugin --- package-lock.json | 204 +++++++++++++++--- .../src/utils/generateTailwindSafelist.ts | 2 +- packages/studio-plugin/src/utils/index.ts | 1 + packages/studio-ui/package.json | 13 +- packages/studio-ui/src/App.tsx | 1 - .../studio-ui/src/components/DeployButton.tsx | 11 +- .../src/components/TailwindPropInput.tsx | 2 +- packages/studio-ui/src/index.ts | 4 +- .../studio-ui/src/store/models/StudioStore.ts | 2 + .../studio-ui/src/store/setInitialState.ts | 47 ++++ .../store/slices/createFileMetadataSlice.ts | 6 +- .../store/slices/createPreviousSaveSlice.ts | 8 +- .../store/slices/createSiteSettingsSlice.ts | 6 +- .../store/slices/createStudioConfigSlice.ts | 11 +- .../store/slices/createStudioEnvDataSlice.ts | 3 +- .../src/store/slices/pages/createPageSlice.ts | 14 +- .../studio-ui/src/store/useStudioStore.ts | 1 + packages/studio-ui/tsconfig.json | 4 +- packages/studio/src/main.tsx | 8 +- .../src/tailwind-directives.css | 0 packages/studio/tailwind.config.ts | 3 +- 21 files changed, 271 insertions(+), 80 deletions(-) rename packages/{studio-ui => studio-plugin}/src/utils/generateTailwindSafelist.ts (87%) create mode 100644 packages/studio-ui/src/store/setInitialState.ts rename packages/{studio-ui => studio}/src/tailwind-directives.css (100%) diff --git a/package-lock.json b/package-lock.json index d7bbc605b..4da823936 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8484,23 +8484,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -8804,6 +8787,75 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/copyfiles": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", + "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", + "dev": true, + "dependencies": { + "glob": "^7.0.5", + "minimatch": "^3.0.3", + "mkdirp": "^1.0.4", + "noms": "0.0.0", + "through2": "^2.0.1", + "untildify": "^4.0.0", + "yargs": "^16.1.0" + }, + "bin": { + "copyfiles": "copyfiles", + "copyup": "copyfiles" + } + }, + "node_modules/copyfiles/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/copyfiles/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/copyfiles/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/copyfiles/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/core-js": { "version": "3.27.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", @@ -15777,6 +15829,40 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, + "node_modules/noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" + } + }, + "node_modules/noms/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/noms/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/noms/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -19656,22 +19742,6 @@ "node": ">=10" } }, - "node_modules/react-scripts/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/react-scripts/node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -21653,6 +21723,52 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -23560,6 +23676,22 @@ "workbox-core": "6.5.4" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", @@ -25967,7 +26099,6 @@ "@minoru/react-dnd-treeview": "^3.4.1", "@restart/ui": "^1.5.2", "@vitejs/plugin-react": "^4.0.4", - "@yext/studio-plugin": "0.22.0", "autoprefixer": "^10.4.14", "cac": "^6.7.14", "classnames": "^2.3.2", @@ -26003,9 +26134,14 @@ "@types/react": "^18.0.26", "@types/react-dom": "^18.0.10", "@types/react-modal": "3.13.1", + "@yext/studio-plugin": "*", + "copyfiles": "^2.4.1", "jest": "^29.5.0", "jest-environment-jsdom": "^29.3.1", "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "@yext/studio-plugin": "*" } }, "packages/studio-ui/node_modules/@types/node": { diff --git a/packages/studio-ui/src/utils/generateTailwindSafelist.ts b/packages/studio-plugin/src/utils/generateTailwindSafelist.ts similarity index 87% rename from packages/studio-ui/src/utils/generateTailwindSafelist.ts rename to packages/studio-plugin/src/utils/generateTailwindSafelist.ts index 29f32630e..e3e0b7c89 100644 --- a/packages/studio-ui/src/utils/generateTailwindSafelist.ts +++ b/packages/studio-plugin/src/utils/generateTailwindSafelist.ts @@ -1,4 +1,4 @@ -import type { StudioTailwindTheme } from "@yext/studio-plugin"; +import { StudioTailwindTheme } from "../types"; /** * Generates a safelist for custom test colors, background colors, and font sizes. diff --git a/packages/studio-plugin/src/utils/index.ts b/packages/studio-plugin/src/utils/index.ts index 7ca8212e2..de3b1cac4 100644 --- a/packages/studio-plugin/src/utils/index.ts +++ b/packages/studio-plugin/src/utils/index.ts @@ -2,3 +2,4 @@ export { default as TypeGuards } from "./TypeGuards"; export { default as ComponentTreeHelpers } from "./ComponentTreeHelpers"; export { default as transformPropValuesToRaw } from "./transformPropValuesToRaw"; export { default as ComponentStateHelpers } from "./ComponentStateHelpers"; +export { default as generateTailwindSafelist } from "./generateTailwindSafelist"; diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json index 848fdae00..4755a79b1 100644 --- a/packages/studio-ui/package.json +++ b/packages/studio-ui/package.json @@ -2,6 +2,8 @@ "name": "@yext/studio-ui", "version": "0.22.0", "type": "module", + "types": "./lib/index.d.ts", + "main": "./lib/index.js", "exports": { ".": { "types": "./lib/src/index.d.ts", @@ -10,8 +12,9 @@ } }, "scripts": { - "dev": "tsc --watch --preserveWatchOutput -p tsconfig.json", - "build": "rimraf lib && tsc -p tsconfig.json", + "dev": "npm run copy-svg && tsc --watch --preserveWatchOutput -p tsconfig.json", + "copy-svg": "npx copyfiles \"src/**/*.svg\" lib", + "build": "npm run copy-svg && rimraf lib && tsc -p tsconfig.json", "test": "jest", "typecheck-jest": "npx tsc -p tests/tsconfig.json" }, @@ -20,7 +23,6 @@ "@minoru/react-dnd-treeview": "^3.4.1", "@restart/ui": "^1.5.2", "@vitejs/plugin-react": "^4.0.4", - "@yext/studio-plugin": "0.22.0", "autoprefixer": "^10.4.14", "cac": "^6.7.14", "classnames": "^2.3.2", @@ -56,8 +58,13 @@ "@types/react": "^18.0.26", "@types/react-dom": "^18.0.10", "@types/react-modal": "3.13.1", + "@yext/studio-plugin": "*", + "copyfiles": "^2.4.1", "jest": "^29.5.0", "jest-environment-jsdom": "^29.3.1", "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "@yext/studio-plugin": "*" } } diff --git a/packages/studio-ui/src/App.tsx b/packages/studio-ui/src/App.tsx index 639a3b195..e1b2f8dc7 100644 --- a/packages/studio-ui/src/App.tsx +++ b/packages/studio-ui/src/App.tsx @@ -3,7 +3,6 @@ import ActionsBar from "./components/ActionsBar"; import Toast from "./components/Toast"; import PreviewWithUseComponents from "./components/PreviewWithUseComponents"; import LeftSidebar from "./components/LeftSidebar"; -import "./tailwind-directives.css"; import "react-tooltip/dist/react-tooltip.css"; export default function App() { diff --git a/packages/studio-ui/src/components/DeployButton.tsx b/packages/studio-ui/src/components/DeployButton.tsx index 1f575f36e..2624860af 100644 --- a/packages/studio-ui/src/components/DeployButton.tsx +++ b/packages/studio-ui/src/components/DeployButton.tsx @@ -1,17 +1,16 @@ import useStudioStore from "../store/useStudioStore"; import { useCallback, useEffect, useState } from "react"; -import gitData from "virtual_yext-studio-git-data"; import useHasChanges from "../hooks/useHasChanges"; import { Tooltip } from "react-tooltip"; -const canPush = gitData.canPush.status; const tooltipAnchorID = "YextStudio-deployButton"; /** * Renders a button for saving, committing, and pushing changes. */ export default function DeployButton() { - const deploy = useStudioStore((store) => store.actions.deploy); + const [deploy, gitData] = useStudioStore((store) => [store.actions.deploy, store.gitData ]); + const canPush = gitData?.canPush.status; const [deployInProgress, setDeployInProgress] = useState(false); const hasChanges = useHasChanges(); @@ -29,7 +28,7 @@ export default function DeployButton() { if (!canPush) { setDeployInProgress(false); } - }, []); + }, [canPush]); useEffect(() => { // Websockets do not currently work in CBD, which prevents the gitData useEffect from correctly setting @@ -49,11 +48,11 @@ export default function DeployButton() { aria-label="Deploy Changes to Repository" > Deploy - {isDisabled && gitData.canPush.reason && ( + {isDisabled && gitData?.canPush.reason && ( )} diff --git a/packages/studio-ui/src/components/TailwindPropInput.tsx b/packages/studio-ui/src/components/TailwindPropInput.tsx index fe741cdda..754b97372 100644 --- a/packages/studio-ui/src/components/TailwindPropInput.tsx +++ b/packages/studio-ui/src/components/TailwindPropInput.tsx @@ -1,5 +1,5 @@ import { RefObject, useCallback, useEffect, useRef, useState } from "react"; -import generateTailwindSafelist from "../utils/generateTailwindSafelist"; +import { generateTailwindSafelist } from "@yext/studio-plugin"; import { StudioTailwindTheme } from "@yext/studio-plugin"; import { ReactComponent as EmbedIcon } from "../icons/embed.svg"; import { ReactComponent as X } from "../icons/x.svg"; diff --git a/packages/studio-ui/src/index.ts b/packages/studio-ui/src/index.ts index 565fcf964..a64e5cfed 100644 --- a/packages/studio-ui/src/index.ts +++ b/packages/studio-ui/src/index.ts @@ -1,2 +1,4 @@ export { default as App } from "./App" -export { default as hotReloadStore } from "./store/hotReloadStore" \ No newline at end of file +export { default as hotReloadStore } from "./store/hotReloadStore" +export { default as generateTailwindSafelist } from "@yext/studio-plugin/src/utils/generateTailwindSafelist"; +export { default as setInitialState } from "./store/setInitialState"; \ No newline at end of file diff --git a/packages/studio-ui/src/store/models/StudioStore.ts b/packages/studio-ui/src/store/models/StudioStore.ts index ea88511fd..81cae94b7 100644 --- a/packages/studio-ui/src/store/models/StudioStore.ts +++ b/packages/studio-ui/src/store/models/StudioStore.ts @@ -1,3 +1,4 @@ +import { GitData } from "@yext/studio-plugin"; import StudioActions from "../StudioActions"; import FileMetadataSlice from "./slices/FileMetadataSlice"; import PagePreviewSlice from "./slices/PagePreviewSlice"; @@ -22,4 +23,5 @@ export type StudioStore = { actions: StudioActions; studioConfig: StudioConfigSlice; studioEnvData: StudioEnvDataSlice; + gitData?: GitData }; diff --git a/packages/studio-ui/src/store/setInitialState.ts b/packages/studio-ui/src/store/setInitialState.ts new file mode 100644 index 000000000..747241990 --- /dev/null +++ b/packages/studio-ui/src/store/setInitialState.ts @@ -0,0 +1,47 @@ +import { GitData, StudioData } from "@yext/studio-plugin"; +import useStudioStore from "./useStudioStore"; +import { merge } from "lodash" +import removeTopLevelFragments from "../utils/removeTopLevelFragments"; + +export default function setInitialState(initialStudioData: StudioData, gitData: GitData) { + const firstPageEntry = Object.entries( + initialStudioData.pageNameToPageState + )?.sort()[0]; + + const stateFromStudioData = { + pages: { + pages: removeTopLevelFragments(initialStudioData.pageNameToPageState), + errorPages: initialStudioData.pageNameToErrorPageState, + activePageName: firstPageEntry?.[0], + activeEntityFile: firstPageEntry?.[1]?.pagesJS?.entityFiles?.[0], + }, + studioEnvData: { + isWithinCBD: initialStudioData.isWithinCBD, + }, + studioConfig: { + paths: initialStudioData.studioConfig?.paths, + isPagesJSRepo: initialStudioData.studioConfig?.isPagesJSRepo, + }, + siteSettings: { + shape: initialStudioData.siteSettings?.shape, + values: initialStudioData.siteSettings?.values, + }, + previousSave: { + siteSettings: { + values: initialStudioData.siteSettings?.values, + }, + fileMetadatas: { + UUIDToFileMetadata: initialStudioData.UUIDToFileMetadata, + }, + }, + fileMetadatas: { + UUIDToFileMetadata: removeTopLevelFragments( + initialStudioData.UUIDToFileMetadata + ), + }, + gitData + } + + const initialState = merge({}, useStudioStore.getState(), stateFromStudioData) + useStudioStore.setState(initialState); +} diff --git a/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts b/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts index 540ac7b2f..91df36f37 100644 --- a/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts +++ b/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts @@ -5,18 +5,14 @@ import { FileMetadataKind, ModuleMetadata, } from "@yext/studio-plugin"; -import initialStudioData from "virtual_yext-studio"; import FileMetadataSlice from "../models/slices/FileMetadataSlice"; import { SliceCreator } from "../models/utils"; -import removeTopLevelFragments from "../../utils/removeTopLevelFragments"; const createFileMetadataSlice: SliceCreator = ( set, get ) => ({ - UUIDToFileMetadata: removeTopLevelFragments( - initialStudioData.UUIDToFileMetadata - ), + UUIDToFileMetadata: {}, UUIDToImportedComponent: {}, setFileMetadata: (metadataUUID: string, metadata: FileMetadata) => set((store) => { diff --git a/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts b/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts index 0e0c9af15..c14fea72d 100644 --- a/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts +++ b/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts @@ -1,15 +1,13 @@ -import initialStudioData from "virtual_yext-studio"; + import PreviousSaveSlice, { PreviousSaveSliceState, } from "../models/slices/PreviousSaveSlice"; import { SliceCreator } from "../models/utils"; const createPreviousSaveSlice: SliceCreator = (set) => ({ - siteSettings: { - values: initialStudioData.siteSettings?.values, - }, + siteSettings: {}, fileMetadatas: { - UUIDToFileMetadata: initialStudioData.UUIDToFileMetadata, + UUIDToFileMetadata: {}, }, setPreviousSave(saveState: PreviousSaveSliceState) { set(saveState); diff --git a/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts b/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts index 82f22a8f2..9bc6cb4da 100644 --- a/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts +++ b/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts @@ -1,10 +1,10 @@ -import initialStudioData from "virtual_yext-studio"; + import SiteSettingsSlice from "../models/slices/SiteSettingsSlice"; import { SliceCreator } from "../models/utils"; const createSiteSettingsSlice: SliceCreator = (set) => ({ - shape: initialStudioData.siteSettings?.shape, - values: initialStudioData.siteSettings?.values, + shape: undefined, + values: undefined, setShape: (shape) => set({ shape }), setValues: (values) => set({ values }), }); diff --git a/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts b/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts index bf4514ca6..ddd140613 100644 --- a/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts +++ b/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts @@ -1,10 +1,15 @@ import StudioConfigSlice from "../models/slices/StudioConfigSlice"; import { SliceCreator } from "../models/utils"; -import initialStudioData from "virtual_yext-studio"; const createStudioConfigSlice: SliceCreator = () => ({ - paths: initialStudioData.studioConfig?.paths, - isPagesJSRepo: initialStudioData.studioConfig?.isPagesJSRepo, + paths: { + components: '', + pages: '', + modules: '', + siteSettings: '', + localData: '' + }, + isPagesJSRepo: false }); export default createStudioConfigSlice; diff --git a/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts index a3345b20d..e0a9514e0 100644 --- a/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts +++ b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts @@ -1,9 +1,8 @@ import StudioEnvDataSlice from "../models/slices/StudioEnvDataSlice"; import { SliceCreator } from "../models/utils"; -import initialStudioData from "virtual_yext-studio"; const createStudioEnvDataSlice: SliceCreator = () => ({ - isWithinCBD: initialStudioData.isWithinCBD, + isWithinCBD: false }); export default createStudioEnvDataSlice; diff --git a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts index 2ce693c40..a73b013a8 100644 --- a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts +++ b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts @@ -5,23 +5,19 @@ import { StreamScope, } from "@yext/studio-plugin"; import { isEqual } from "lodash"; -import initialStudioData from "virtual_yext-studio"; +// import initialStudioData from "virtual_yext-studio"; import DOMRectProperties from "../../models/DOMRectProperties"; import PageSlice, { PageSliceStates } from "../../models/slices/PageSlice"; import { SliceCreator } from "../../models/utils"; import createDetachAllModuleInstances from "./detachAllModuleInstances"; -import removeTopLevelFragments from "../../../utils/removeTopLevelFragments"; import PropValueHelpers from "../../../utils/PropValueHelpers"; -const firstPageEntry = Object.entries( - initialStudioData.pageNameToPageState -)?.sort()[0]; const initialStates: PageSliceStates = { - pages: removeTopLevelFragments(initialStudioData.pageNameToPageState), - errorPages: initialStudioData.pageNameToErrorPageState, - activePageName: firstPageEntry?.[0], - activeEntityFile: firstPageEntry?.[1]?.pagesJS?.entityFiles?.[0], + pages: {}, + errorPages: {}, + activePageName: undefined, + activeEntityFile: undefined, activeComponentUUID: undefined, activeComponentRect: undefined, pendingChanges: { diff --git a/packages/studio-ui/src/store/useStudioStore.ts b/packages/studio-ui/src/store/useStudioStore.ts index 2ff451d24..6f95584c8 100644 --- a/packages/studio-ui/src/store/useStudioStore.ts +++ b/packages/studio-ui/src/store/useStudioStore.ts @@ -48,6 +48,7 @@ const useStudioStore = create()( ), studioConfig: lens(createStudioConfigSlice), studioEnvData: lens(createStudioEnvDataSlice), + gitData: undefined }; }) ) diff --git a/packages/studio-ui/tsconfig.json b/packages/studio-ui/tsconfig.json index e3751b9ba..c67c54359 100644 --- a/packages/studio-ui/tsconfig.json +++ b/packages/studio-ui/tsconfig.json @@ -13,10 +13,8 @@ "target": "ESNext", "outDir": "lib", "types": [ - "vite/client", - "@yext/studio-plugin/virtual-module", "vite-plugin-svgr/client" ] }, - "include": ["src"] + "include": ["src", "../studio-plugin/src/utils/generateTailwindSafelist.ts"] } diff --git a/packages/studio/src/main.tsx b/packages/studio/src/main.tsx index a8c796bd9..480e20d14 100644 --- a/packages/studio/src/main.tsx +++ b/packages/studio/src/main.tsx @@ -1,8 +1,12 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import App from "./App"; +import { App, hotReloadStore, setInitialState } from "@yext/studio-ui"; import { StudioHMRPayload, StudioHMRUpdateID } from "@yext/studio-plugin"; -import hotReloadStore from "./store/hotReloadStore"; +import "./tailwind-directives.css"; +import studioData from "virtual_yext-studio" +import gitData from "virtual_yext-studio-git-data" + +setInitialState(studioData, gitData) if (import.meta.hot) { import.meta.hot.on(StudioHMRUpdateID, (hmrPayload: StudioHMRPayload) => { diff --git a/packages/studio-ui/src/tailwind-directives.css b/packages/studio/src/tailwind-directives.css similarity index 100% rename from packages/studio-ui/src/tailwind-directives.css rename to packages/studio/src/tailwind-directives.css diff --git a/packages/studio/tailwind.config.ts b/packages/studio/tailwind.config.ts index 510862865..54100b1c1 100644 --- a/packages/studio/tailwind.config.ts +++ b/packages/studio/tailwind.config.ts @@ -7,7 +7,7 @@ import { } from "@yext/studio-plugin"; import path from "path"; import fs from "fs"; -import generateTailwindSafelist from "./src/utils/generateTailwindSafelist"; +import { generateTailwindSafelist } from "@yext/studio-plugin"; const getRootDir = (): string => { const cliArgs: CliArgs = JSON.parse( @@ -50,6 +50,7 @@ export default { content: [ path.resolve(__dirname, "src/**/*.{ts,tsx}"), path.resolve(__dirname, "index.html"), + path.resolve(__dirname, "../studio-ui/**/*.tsx"), ...transformedUserContent, ], safelist: generateTailwindSafelist(userTailwindTheme), From 19108c25a1f08dbc6dc6818c758217c2033d3b22 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 14:53:33 -0400 Subject: [PATCH 03/24] good to remove setInitialState yay! --- .../studio-ui/src/components/DeployButton.tsx | 11 +++-- packages/studio-ui/src/index.ts | 4 +- .../studio-ui/src/store/setInitialState.ts | 47 ------------------- .../store/slices/createFileMetadataSlice.ts | 6 ++- .../store/slices/createPreviousSaveSlice.ts | 8 ++-- .../store/slices/createSiteSettingsSlice.ts | 6 +-- .../store/slices/createStudioConfigSlice.ts | 11 ++--- .../store/slices/createStudioEnvDataSlice.ts | 5 +- .../src/store/slices/pages/createPageSlice.ts | 14 ++++-- packages/studio-ui/tsconfig.json | 3 +- packages/studio/src/main.tsx | 6 +-- 11 files changed, 39 insertions(+), 82 deletions(-) delete mode 100644 packages/studio-ui/src/store/setInitialState.ts diff --git a/packages/studio-ui/src/components/DeployButton.tsx b/packages/studio-ui/src/components/DeployButton.tsx index 2624860af..1f575f36e 100644 --- a/packages/studio-ui/src/components/DeployButton.tsx +++ b/packages/studio-ui/src/components/DeployButton.tsx @@ -1,16 +1,17 @@ import useStudioStore from "../store/useStudioStore"; import { useCallback, useEffect, useState } from "react"; +import gitData from "virtual_yext-studio-git-data"; import useHasChanges from "../hooks/useHasChanges"; import { Tooltip } from "react-tooltip"; +const canPush = gitData.canPush.status; const tooltipAnchorID = "YextStudio-deployButton"; /** * Renders a button for saving, committing, and pushing changes. */ export default function DeployButton() { - const [deploy, gitData] = useStudioStore((store) => [store.actions.deploy, store.gitData ]); - const canPush = gitData?.canPush.status; + const deploy = useStudioStore((store) => store.actions.deploy); const [deployInProgress, setDeployInProgress] = useState(false); const hasChanges = useHasChanges(); @@ -28,7 +29,7 @@ export default function DeployButton() { if (!canPush) { setDeployInProgress(false); } - }, [canPush]); + }, []); useEffect(() => { // Websockets do not currently work in CBD, which prevents the gitData useEffect from correctly setting @@ -48,11 +49,11 @@ export default function DeployButton() { aria-label="Deploy Changes to Repository" > Deploy - {isDisabled && gitData?.canPush.reason && ( + {isDisabled && gitData.canPush.reason && ( )} diff --git a/packages/studio-ui/src/index.ts b/packages/studio-ui/src/index.ts index a64e5cfed..565fcf964 100644 --- a/packages/studio-ui/src/index.ts +++ b/packages/studio-ui/src/index.ts @@ -1,4 +1,2 @@ export { default as App } from "./App" -export { default as hotReloadStore } from "./store/hotReloadStore" -export { default as generateTailwindSafelist } from "@yext/studio-plugin/src/utils/generateTailwindSafelist"; -export { default as setInitialState } from "./store/setInitialState"; \ No newline at end of file +export { default as hotReloadStore } from "./store/hotReloadStore" \ No newline at end of file diff --git a/packages/studio-ui/src/store/setInitialState.ts b/packages/studio-ui/src/store/setInitialState.ts deleted file mode 100644 index 747241990..000000000 --- a/packages/studio-ui/src/store/setInitialState.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { GitData, StudioData } from "@yext/studio-plugin"; -import useStudioStore from "./useStudioStore"; -import { merge } from "lodash" -import removeTopLevelFragments from "../utils/removeTopLevelFragments"; - -export default function setInitialState(initialStudioData: StudioData, gitData: GitData) { - const firstPageEntry = Object.entries( - initialStudioData.pageNameToPageState - )?.sort()[0]; - - const stateFromStudioData = { - pages: { - pages: removeTopLevelFragments(initialStudioData.pageNameToPageState), - errorPages: initialStudioData.pageNameToErrorPageState, - activePageName: firstPageEntry?.[0], - activeEntityFile: firstPageEntry?.[1]?.pagesJS?.entityFiles?.[0], - }, - studioEnvData: { - isWithinCBD: initialStudioData.isWithinCBD, - }, - studioConfig: { - paths: initialStudioData.studioConfig?.paths, - isPagesJSRepo: initialStudioData.studioConfig?.isPagesJSRepo, - }, - siteSettings: { - shape: initialStudioData.siteSettings?.shape, - values: initialStudioData.siteSettings?.values, - }, - previousSave: { - siteSettings: { - values: initialStudioData.siteSettings?.values, - }, - fileMetadatas: { - UUIDToFileMetadata: initialStudioData.UUIDToFileMetadata, - }, - }, - fileMetadatas: { - UUIDToFileMetadata: removeTopLevelFragments( - initialStudioData.UUIDToFileMetadata - ), - }, - gitData - } - - const initialState = merge({}, useStudioStore.getState(), stateFromStudioData) - useStudioStore.setState(initialState); -} diff --git a/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts b/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts index 91df36f37..540ac7b2f 100644 --- a/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts +++ b/packages/studio-ui/src/store/slices/createFileMetadataSlice.ts @@ -5,14 +5,18 @@ import { FileMetadataKind, ModuleMetadata, } from "@yext/studio-plugin"; +import initialStudioData from "virtual_yext-studio"; import FileMetadataSlice from "../models/slices/FileMetadataSlice"; import { SliceCreator } from "../models/utils"; +import removeTopLevelFragments from "../../utils/removeTopLevelFragments"; const createFileMetadataSlice: SliceCreator = ( set, get ) => ({ - UUIDToFileMetadata: {}, + UUIDToFileMetadata: removeTopLevelFragments( + initialStudioData.UUIDToFileMetadata + ), UUIDToImportedComponent: {}, setFileMetadata: (metadataUUID: string, metadata: FileMetadata) => set((store) => { diff --git a/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts b/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts index c14fea72d..0e0c9af15 100644 --- a/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts +++ b/packages/studio-ui/src/store/slices/createPreviousSaveSlice.ts @@ -1,13 +1,15 @@ - +import initialStudioData from "virtual_yext-studio"; import PreviousSaveSlice, { PreviousSaveSliceState, } from "../models/slices/PreviousSaveSlice"; import { SliceCreator } from "../models/utils"; const createPreviousSaveSlice: SliceCreator = (set) => ({ - siteSettings: {}, + siteSettings: { + values: initialStudioData.siteSettings?.values, + }, fileMetadatas: { - UUIDToFileMetadata: {}, + UUIDToFileMetadata: initialStudioData.UUIDToFileMetadata, }, setPreviousSave(saveState: PreviousSaveSliceState) { set(saveState); diff --git a/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts b/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts index 9bc6cb4da..82f22a8f2 100644 --- a/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts +++ b/packages/studio-ui/src/store/slices/createSiteSettingsSlice.ts @@ -1,10 +1,10 @@ - +import initialStudioData from "virtual_yext-studio"; import SiteSettingsSlice from "../models/slices/SiteSettingsSlice"; import { SliceCreator } from "../models/utils"; const createSiteSettingsSlice: SliceCreator = (set) => ({ - shape: undefined, - values: undefined, + shape: initialStudioData.siteSettings?.shape, + values: initialStudioData.siteSettings?.values, setShape: (shape) => set({ shape }), setValues: (values) => set({ values }), }); diff --git a/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts b/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts index ddd140613..bf4514ca6 100644 --- a/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts +++ b/packages/studio-ui/src/store/slices/createStudioConfigSlice.ts @@ -1,15 +1,10 @@ import StudioConfigSlice from "../models/slices/StudioConfigSlice"; import { SliceCreator } from "../models/utils"; +import initialStudioData from "virtual_yext-studio"; const createStudioConfigSlice: SliceCreator = () => ({ - paths: { - components: '', - pages: '', - modules: '', - siteSettings: '', - localData: '' - }, - isPagesJSRepo: false + paths: initialStudioData.studioConfig?.paths, + isPagesJSRepo: initialStudioData.studioConfig?.isPagesJSRepo, }); export default createStudioConfigSlice; diff --git a/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts index e0a9514e0..a44936502 100644 --- a/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts +++ b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts @@ -1,8 +1,11 @@ import StudioEnvDataSlice from "../models/slices/StudioEnvDataSlice"; import { SliceCreator } from "../models/utils"; +import initialStudioData from "virtual_yext-studio"; + +console.log({ initialStudioData }) const createStudioEnvDataSlice: SliceCreator = () => ({ - isWithinCBD: false + isWithinCBD: initialStudioData.isWithinCBD, }); export default createStudioEnvDataSlice; diff --git a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts index a73b013a8..2ce693c40 100644 --- a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts +++ b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts @@ -5,19 +5,23 @@ import { StreamScope, } from "@yext/studio-plugin"; import { isEqual } from "lodash"; -// import initialStudioData from "virtual_yext-studio"; +import initialStudioData from "virtual_yext-studio"; import DOMRectProperties from "../../models/DOMRectProperties"; import PageSlice, { PageSliceStates } from "../../models/slices/PageSlice"; import { SliceCreator } from "../../models/utils"; import createDetachAllModuleInstances from "./detachAllModuleInstances"; +import removeTopLevelFragments from "../../../utils/removeTopLevelFragments"; import PropValueHelpers from "../../../utils/PropValueHelpers"; +const firstPageEntry = Object.entries( + initialStudioData.pageNameToPageState +)?.sort()[0]; const initialStates: PageSliceStates = { - pages: {}, - errorPages: {}, - activePageName: undefined, - activeEntityFile: undefined, + pages: removeTopLevelFragments(initialStudioData.pageNameToPageState), + errorPages: initialStudioData.pageNameToErrorPageState, + activePageName: firstPageEntry?.[0], + activeEntityFile: firstPageEntry?.[1]?.pagesJS?.entityFiles?.[0], activeComponentUUID: undefined, activeComponentRect: undefined, pendingChanges: { diff --git a/packages/studio-ui/tsconfig.json b/packages/studio-ui/tsconfig.json index c67c54359..941362b8e 100644 --- a/packages/studio-ui/tsconfig.json +++ b/packages/studio-ui/tsconfig.json @@ -13,8 +13,9 @@ "target": "ESNext", "outDir": "lib", "types": [ + "@yext/studio-plugin/virtual-module", "vite-plugin-svgr/client" ] }, - "include": ["src", "../studio-plugin/src/utils/generateTailwindSafelist.ts"] + "include": ["src"] } diff --git a/packages/studio/src/main.tsx b/packages/studio/src/main.tsx index 480e20d14..a3559bc9a 100644 --- a/packages/studio/src/main.tsx +++ b/packages/studio/src/main.tsx @@ -1,12 +1,8 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import { App, hotReloadStore, setInitialState } from "@yext/studio-ui"; +import { App, hotReloadStore } from "@yext/studio-ui"; import { StudioHMRPayload, StudioHMRUpdateID } from "@yext/studio-plugin"; import "./tailwind-directives.css"; -import studioData from "virtual_yext-studio" -import gitData from "virtual_yext-studio-git-data" - -setInitialState(studioData, gitData) if (import.meta.hot) { import.meta.hot.on(StudioHMRUpdateID, (hmrPayload: StudioHMRPayload) => { From 4de6c48d8e17dac8b46b86747d959879fa2c6755 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 14:57:15 -0400 Subject: [PATCH 04/24] remove workflows for now also extra gitData slice --- .github/workflows/automated-linting.yml | 33 ------------- .github/workflows/main-workflow.yml | 19 -------- .github/workflows/playwright.yml | 47 ------------------- .github/workflows/run-tests.yml | 35 -------------- .../workflows/update-third-party-notices.yml | 41 ---------------- .../studio-ui/src/store/useStudioStore.ts | 3 +- 6 files changed, 1 insertion(+), 177 deletions(-) delete mode 100644 .github/workflows/automated-linting.yml delete mode 100644 .github/workflows/main-workflow.yml delete mode 100644 .github/workflows/playwright.yml delete mode 100644 .github/workflows/run-tests.yml delete mode 100644 .github/workflows/update-third-party-notices.yml diff --git a/.github/workflows/automated-linting.yml b/.github/workflows/automated-linting.yml deleted file mode 100644 index eb4987ac5..000000000 --- a/.github/workflows/automated-linting.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Automated Linting -on: - workflow_call: - secrets: - BOT_REPO_SCOPED_TOKEN: - required: true - -jobs: - linting: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - ref: ${{ github.head_ref }} - token: ${{ secrets.BOT_REPO_SCOPED_TOKEN }} - - uses: ./.github/setup-ci - - run: npx pages generate features - working-directory: apps/test-site - - run: npx pages generate features - working-directory: e2e-tests - - run: npm run autofix - - name: Automated Linting - id: automated-linting - uses: EndBug/add-and-commit@v9 - with: - message: "Automated linting update and features.json sync" - add: "*" - push: true - pull: --rebase --autostash - default_author: github_actions - - name: Fail on linting push - run: | - if [[ ${{ steps.automated-linting.outputs.pushed }} == true ]]; then exit 1; else exit 0; fi diff --git a/.github/workflows/main-workflow.yml b/.github/workflows/main-workflow.yml deleted file mode 100644 index 87ced432c..000000000 --- a/.github/workflows/main-workflow.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: main -on: pull_request - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - automated-linting: - uses: ./.github/workflows/automated-linting.yml - secrets: inherit - - run-tests: - needs: automated-linting - uses: ./.github/workflows/run-tests.yml - - playwright: - needs: automated-linting - uses: ./.github/workflows/playwright.yml diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index 2a8b1a0d4..000000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Playwright Tests -on: workflow_call - -jobs: - acceptance: - name: ${{ matrix.os }} (${{ matrix.shard }}/4) - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - shard: [1, 2, 3, 4] - os: [windows-latest, macos-latest] - runs-on: ${{ matrix.os }} - steps: - - if: ${{ github.event_name == 'pull_request' }} - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.ref }} - - if: ${{ github.event_name != 'pull_request' }} - uses: actions/checkout@v3 - - uses: ./.github/setup-acceptance - - - run: npm run update-snapshots -- --shard=${{ matrix.shard }}/4 - working-directory: e2e-tests - - - uses: actions/upload-artifact@v3 - if: success() || failure() - with: - name: playwright-report--${{ matrix.os }}-${{matrix.shard}} - path: ./e2e-tests/playwright-report/ - retention-days: 30 - - - name: Commit Updated Snapshots - id: push-snapshots - uses: EndBug/add-and-commit@v9 - if: ${{ github.event_name == 'pull_request' }} - with: - message: Updated snapshots for ${{ matrix.os }} ${{ matrix.shard }} of 4 - add: e2e-tests/__screenshots__/*.png - push: true - pull: --rebase --autostash - default_author: github_actions - - - name: Fail on snapshots push - run: | - if [[ ${{ steps.push-snapshots.outputs.pushed }} == true ]]; then exit 1; else exit 0; fi - shell: bash diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml deleted file mode 100644 index ec10faa1c..000000000 --- a/.github/workflows/run-tests.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Run Tests -on: workflow_call - -jobs: - studio: - strategy: - matrix: - os: [windows-latest, ubuntu-latest] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - uses: ./.github/setup-ci - - run: npm run build -w=packages/studio-plugin - - run: npm test -w=packages/studio -- --coverage=false - - studio_plugin: - strategy: - matrix: - os: [windows-latest, ubuntu-latest] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - uses: ./.github/setup-ci - - run: npm test -w=packages/studio-plugin -- --coverage=false - - test_build: - strategy: - matrix: - os: [windows-latest, ubuntu-latest] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - uses: ./.github/setup-ci - - run: npm run build - - run: npm run typecheck-jest diff --git a/.github/workflows/update-third-party-notices.yml b/.github/workflows/update-third-party-notices.yml deleted file mode 100644 index d169a0253..000000000 --- a/.github/workflows/update-third-party-notices.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Update Third Party Notices -on: - workflow_call: - secrets: - BOT_REPO_SCOPED_TOKEN: - required: true - -jobs: - license-check: - runs-on: macos-latest - steps: - - uses: actions/setup-node@v3 - with: - node-version: 18.x - registry-url: "https://registry.npmjs.org" - - run: npm install -g json@v11.0.0 generate-license-file@2.0.0 - - uses: actions/checkout@v3 - with: - ref: ${{ github.head_ref }} - token: ${{ secrets.BOT_REPO_SCOPED_TOKEN }} - - # this is done since studio is a monorepo. a fresh reinstall without workspaces allows all - # node_modules to be installed within the current dir (instead of some at the root, with workspaces) - # NOTE: since only changes to THIRD-PARTY-NOTICES files are added, this change will not be pushed - - name: Clear workspace from package.json - run: json -I -f package.json -e 'this.workspaces=[]' - - # npm install to generate node_modules which are required for generate-license-file to work - - working-directory: packages/studio - run: npm install; generate-license-file --input package.json --output THIRD-PARTY-NOTICES --overwrite - - working-directory: packages/studio-plugin - run: npm install; generate-license-file --input package.json --output THIRD-PARTY-NOTICES --overwrite - - - name: Update THIRD-PARTY-NOTICES - id: update-notices - uses: EndBug/add-and-commit@v9 - with: - message: "Automated update to THIRD-PARTY-NOTICES from github action's 3rd party notices check" - add: '["packages/studio/THIRD-PARTY-NOTICES", "packages/studio-plugin/THIRD-PARTY-NOTICES"]' - push: true - default_author: github_actions diff --git a/packages/studio-ui/src/store/useStudioStore.ts b/packages/studio-ui/src/store/useStudioStore.ts index 6f95584c8..ab385ab57 100644 --- a/packages/studio-ui/src/store/useStudioStore.ts +++ b/packages/studio-ui/src/store/useStudioStore.ts @@ -47,8 +47,7 @@ const useStudioStore = create()( () => get().studioConfig ), studioConfig: lens(createStudioConfigSlice), - studioEnvData: lens(createStudioEnvDataSlice), - gitData: undefined + studioEnvData: lens(createStudioEnvDataSlice) }; }) ) From a2a94ccef0ba8fe8b75e3a01d19fc40008676e40 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 15:17:55 -0400 Subject: [PATCH 05/24] tests working? --- .github/setup-acceptance/action.yml | 4 +- .github/workflows/automated-linting.yml | 33 +++++++++++++ .github/workflows/main-workflow.yml | 19 ++++++++ .github/workflows/playwright.yml | 47 +++++++++++++++++++ .github/workflows/run-tests.yml | 36 ++++++++++++++ .../workflows/update-third-party-notices.yml | 41 ++++++++++++++++ apps/test-site/package.json | 2 +- packages/studio-ui/jest.config.ts | 1 + packages/studio-ui/package.json | 9 ++-- packages/studio-ui/src/index.ts | 4 +- .../studio-ui/src/store/models/StudioStore.ts | 2 +- .../store/slices/createStudioEnvDataSlice.ts | 2 - .../studio-ui/src/store/useStudioStore.ts | 2 +- packages/studio-ui/tsconfig.json | 9 ++-- packages/studio/tsconfig.json | 3 ++ turbo.json | 2 +- 16 files changed, 197 insertions(+), 19 deletions(-) create mode 100644 .github/workflows/automated-linting.yml create mode 100644 .github/workflows/main-workflow.yml create mode 100644 .github/workflows/playwright.yml create mode 100644 .github/workflows/run-tests.yml create mode 100644 .github/workflows/update-third-party-notices.yml diff --git a/.github/setup-acceptance/action.yml b/.github/setup-acceptance/action.yml index 623b48983..205e6855c 100644 --- a/.github/setup-acceptance/action.yml +++ b/.github/setup-acceptance/action.yml @@ -4,9 +4,7 @@ runs: using: composite steps: - uses: ./.github/setup-ci - - run: | - npm run build -w=packages/studio-plugin - npm run build -w=packages/studio + - run: npm run build shell: bash - uses: actions/cache@v3 with: diff --git a/.github/workflows/automated-linting.yml b/.github/workflows/automated-linting.yml new file mode 100644 index 000000000..eb4987ac5 --- /dev/null +++ b/.github/workflows/automated-linting.yml @@ -0,0 +1,33 @@ +name: Automated Linting +on: + workflow_call: + secrets: + BOT_REPO_SCOPED_TOKEN: + required: true + +jobs: + linting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} + token: ${{ secrets.BOT_REPO_SCOPED_TOKEN }} + - uses: ./.github/setup-ci + - run: npx pages generate features + working-directory: apps/test-site + - run: npx pages generate features + working-directory: e2e-tests + - run: npm run autofix + - name: Automated Linting + id: automated-linting + uses: EndBug/add-and-commit@v9 + with: + message: "Automated linting update and features.json sync" + add: "*" + push: true + pull: --rebase --autostash + default_author: github_actions + - name: Fail on linting push + run: | + if [[ ${{ steps.automated-linting.outputs.pushed }} == true ]]; then exit 1; else exit 0; fi diff --git a/.github/workflows/main-workflow.yml b/.github/workflows/main-workflow.yml new file mode 100644 index 000000000..87ced432c --- /dev/null +++ b/.github/workflows/main-workflow.yml @@ -0,0 +1,19 @@ +name: main +on: pull_request + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + automated-linting: + uses: ./.github/workflows/automated-linting.yml + secrets: inherit + + run-tests: + needs: automated-linting + uses: ./.github/workflows/run-tests.yml + + playwright: + needs: automated-linting + uses: ./.github/workflows/playwright.yml diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 000000000..2a8b1a0d4 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,47 @@ +name: Playwright Tests +on: workflow_call + +jobs: + acceptance: + name: ${{ matrix.os }} (${{ matrix.shard }}/4) + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + shard: [1, 2, 3, 4] + os: [windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - if: ${{ github.event_name == 'pull_request' }} + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.ref }} + - if: ${{ github.event_name != 'pull_request' }} + uses: actions/checkout@v3 + - uses: ./.github/setup-acceptance + + - run: npm run update-snapshots -- --shard=${{ matrix.shard }}/4 + working-directory: e2e-tests + + - uses: actions/upload-artifact@v3 + if: success() || failure() + with: + name: playwright-report--${{ matrix.os }}-${{matrix.shard}} + path: ./e2e-tests/playwright-report/ + retention-days: 30 + + - name: Commit Updated Snapshots + id: push-snapshots + uses: EndBug/add-and-commit@v9 + if: ${{ github.event_name == 'pull_request' }} + with: + message: Updated snapshots for ${{ matrix.os }} ${{ matrix.shard }} of 4 + add: e2e-tests/__screenshots__/*.png + push: true + pull: --rebase --autostash + default_author: github_actions + + - name: Fail on snapshots push + run: | + if [[ ${{ steps.push-snapshots.outputs.pushed }} == true ]]; then exit 1; else exit 0; fi + shell: bash diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 000000000..94fa9a070 --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,36 @@ +name: Run Tests +on: workflow_call + +jobs: + studio-ui: + strategy: + matrix: + os: [windows-latest, ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: ./.github/setup-ci + - run: npm run build -w=packages/studio-plugin + - run: npm test -w=packages/studio-ui -- --coverage=false + + studio_plugin: + strategy: + matrix: + os: [windows-latest, ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: ./.github/setup-ci + - run: npm test -w=packages/studio-plugin -- --coverage=false + + test_build: + strategy: + matrix: + os: [windows-latest, ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: ./.github/setup-ci + - run: npm run build + - run: npm run build-test-site + - run: npm run typecheck-jest diff --git a/.github/workflows/update-third-party-notices.yml b/.github/workflows/update-third-party-notices.yml new file mode 100644 index 000000000..d169a0253 --- /dev/null +++ b/.github/workflows/update-third-party-notices.yml @@ -0,0 +1,41 @@ +name: Update Third Party Notices +on: + workflow_call: + secrets: + BOT_REPO_SCOPED_TOKEN: + required: true + +jobs: + license-check: + runs-on: macos-latest + steps: + - uses: actions/setup-node@v3 + with: + node-version: 18.x + registry-url: "https://registry.npmjs.org" + - run: npm install -g json@v11.0.0 generate-license-file@2.0.0 + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} + token: ${{ secrets.BOT_REPO_SCOPED_TOKEN }} + + # this is done since studio is a monorepo. a fresh reinstall without workspaces allows all + # node_modules to be installed within the current dir (instead of some at the root, with workspaces) + # NOTE: since only changes to THIRD-PARTY-NOTICES files are added, this change will not be pushed + - name: Clear workspace from package.json + run: json -I -f package.json -e 'this.workspaces=[]' + + # npm install to generate node_modules which are required for generate-license-file to work + - working-directory: packages/studio + run: npm install; generate-license-file --input package.json --output THIRD-PARTY-NOTICES --overwrite + - working-directory: packages/studio-plugin + run: npm install; generate-license-file --input package.json --output THIRD-PARTY-NOTICES --overwrite + + - name: Update THIRD-PARTY-NOTICES + id: update-notices + uses: EndBug/add-and-commit@v9 + with: + message: "Automated update to THIRD-PARTY-NOTICES from github action's 3rd party notices check" + add: '["packages/studio/THIRD-PARTY-NOTICES", "packages/studio-plugin/THIRD-PARTY-NOTICES"]' + push: true + default_author: github_actions diff --git a/apps/test-site/package.json b/apps/test-site/package.json index 62b5f10b5..66f775e1a 100644 --- a/apps/test-site/package.json +++ b/apps/test-site/package.json @@ -34,7 +34,7 @@ "dev": "studio", "localData": "yext pages generate-test-data -a", "start": "craco start", - "build": "craco build" + "build-test-site": "craco build" }, "browserslist": { "production": [ diff --git a/packages/studio-ui/jest.config.ts b/packages/studio-ui/jest.config.ts index 9e7da116a..b3a7b5015 100644 --- a/packages/studio-ui/jest.config.ts +++ b/packages/studio-ui/jest.config.ts @@ -15,5 +15,6 @@ const config: Config = { "\\.[jt]sx?$": "babel-jest", "\\.svg$": "/tests/__setup__/svgTransformer.cjs", }, + testPathIgnorePatterns: ["lib"] }; export default config; diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json index 4755a79b1..fa09940fc 100644 --- a/packages/studio-ui/package.json +++ b/packages/studio-ui/package.json @@ -1,9 +1,9 @@ { "name": "@yext/studio-ui", "version": "0.22.0", + "types": "./lib/src/index.d.ts", + "main": "./lib/src/index.js", "type": "module", - "types": "./lib/index.d.ts", - "main": "./lib/index.js", "exports": { ".": { "types": "./lib/src/index.d.ts", @@ -11,10 +11,13 @@ "require": "./lib/src/index.js" } }, + "files": [ + "lib" + ], "scripts": { "dev": "npm run copy-svg && tsc --watch --preserveWatchOutput -p tsconfig.json", "copy-svg": "npx copyfiles \"src/**/*.svg\" lib", - "build": "npm run copy-svg && rimraf lib && tsc -p tsconfig.json", + "build": "rimraf lib && npm run copy-svg && tsc -p tsconfig.json", "test": "jest", "typecheck-jest": "npx tsc -p tests/tsconfig.json" }, diff --git a/packages/studio-ui/src/index.ts b/packages/studio-ui/src/index.ts index 565fcf964..26c3046be 100644 --- a/packages/studio-ui/src/index.ts +++ b/packages/studio-ui/src/index.ts @@ -1,2 +1,2 @@ -export { default as App } from "./App" -export { default as hotReloadStore } from "./store/hotReloadStore" \ No newline at end of file +export { default as App } from "./App"; +export { default as hotReloadStore } from "./store/hotReloadStore"; diff --git a/packages/studio-ui/src/store/models/StudioStore.ts b/packages/studio-ui/src/store/models/StudioStore.ts index 81cae94b7..cca21e647 100644 --- a/packages/studio-ui/src/store/models/StudioStore.ts +++ b/packages/studio-ui/src/store/models/StudioStore.ts @@ -23,5 +23,5 @@ export type StudioStore = { actions: StudioActions; studioConfig: StudioConfigSlice; studioEnvData: StudioEnvDataSlice; - gitData?: GitData + gitData?: GitData; }; diff --git a/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts index a44936502..a3345b20d 100644 --- a/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts +++ b/packages/studio-ui/src/store/slices/createStudioEnvDataSlice.ts @@ -2,8 +2,6 @@ import StudioEnvDataSlice from "../models/slices/StudioEnvDataSlice"; import { SliceCreator } from "../models/utils"; import initialStudioData from "virtual_yext-studio"; -console.log({ initialStudioData }) - const createStudioEnvDataSlice: SliceCreator = () => ({ isWithinCBD: initialStudioData.isWithinCBD, }); diff --git a/packages/studio-ui/src/store/useStudioStore.ts b/packages/studio-ui/src/store/useStudioStore.ts index ab385ab57..2ff451d24 100644 --- a/packages/studio-ui/src/store/useStudioStore.ts +++ b/packages/studio-ui/src/store/useStudioStore.ts @@ -47,7 +47,7 @@ const useStudioStore = create()( () => get().studioConfig ), studioConfig: lens(createStudioConfigSlice), - studioEnvData: lens(createStudioEnvDataSlice) + studioEnvData: lens(createStudioEnvDataSlice), }; }) ) diff --git a/packages/studio-ui/tsconfig.json b/packages/studio-ui/tsconfig.json index 941362b8e..7e0d81546 100644 --- a/packages/studio-ui/tsconfig.json +++ b/packages/studio-ui/tsconfig.json @@ -6,16 +6,15 @@ "skipLibCheck": true, "noImplicitAny": false, "moduleResolution": "node", + "resolveJsonModule": true, "forceConsistentCasingInFileNames": true, "declaration": true, - "resolveJsonModule": true, + "declarationMap": true, + "sourceMap": true, "jsx": "react-jsx", "target": "ESNext", "outDir": "lib", - "types": [ - "@yext/studio-plugin/virtual-module", - "vite-plugin-svgr/client" - ] + "types": ["@yext/studio-plugin/virtual-module", "vite-plugin-svgr/client"] }, "include": ["src"] } diff --git a/packages/studio/tsconfig.json b/packages/studio/tsconfig.json index 6b7b85642..be425c224 100644 --- a/packages/studio/tsconfig.json +++ b/packages/studio/tsconfig.json @@ -6,8 +6,11 @@ "skipLibCheck": true, "noImplicitAny": false, "moduleResolution": "node", + "resolveJsonModule": true, "forceConsistentCasingInFileNames": true, "declaration": true, + "declarationMap": true, + "sourceMap": true, "jsx": "react-jsx", "target": "ESNext", "outDir": "lib", diff --git a/turbo.json b/turbo.json index 42e89e0e2..69a14bc3e 100644 --- a/turbo.json +++ b/turbo.json @@ -3,7 +3,7 @@ "pipeline": { "build": { "dependsOn": ["^build"], - "outputs": ["dist/**", "lib/**"] + "outputs": ["lib/**"] }, "dev": { "cache": false From b50a7313769035c28debe3c486eb8f23d61ac445 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Sep 2023 19:19:20 +0000 Subject: [PATCH 06/24] Automated linting update and features.json sync --- packages/studio-ui/jest.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/studio-ui/jest.config.ts b/packages/studio-ui/jest.config.ts index b3a7b5015..e543c8d14 100644 --- a/packages/studio-ui/jest.config.ts +++ b/packages/studio-ui/jest.config.ts @@ -15,6 +15,6 @@ const config: Config = { "\\.[jt]sx?$": "babel-jest", "\\.svg$": "/tests/__setup__/svgTransformer.cjs", }, - testPathIgnorePatterns: ["lib"] + testPathIgnorePatterns: ["lib"], }; export default config; From a295c0674c194dc35e24599198f477d691fb68cc Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 15:41:05 -0400 Subject: [PATCH 07/24] Update run-tests.yml --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 94fa9a070..e5bb5e9b9 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -32,5 +32,5 @@ jobs: - uses: actions/checkout@v3 - uses: ./.github/setup-ci - run: npm run build - - run: npm run build-test-site + - run: npm run build-test-site -w=apps/test-site - run: npm run typecheck-jest From 92eef74f75991ec927df348871349a349e36870b Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 1 Sep 2023 15:58:19 -0400 Subject: [PATCH 08/24] Update tsconfig.json --- packages/studio-ui/tests/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/studio-ui/tests/tsconfig.json b/packages/studio-ui/tests/tsconfig.json index 8e3f1c089..79aeb2055 100644 --- a/packages/studio-ui/tests/tsconfig.json +++ b/packages/studio-ui/tests/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../tsconfig.json", - "include": ["**/*", "../src/index.d.ts"], + "include": ["**/*", "../src/global.d.ts"], "compilerOptions": { "noEmit": true, "types": [ From d1fff41ecf5deb74a20e0b287fcc7cbdf25c851a Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Tue, 5 Sep 2023 11:15:41 -0400 Subject: [PATCH 09/24] add proper content path --- packages/studio/tailwind.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/studio/tailwind.config.ts b/packages/studio/tailwind.config.ts index 54100b1c1..509ef7c38 100644 --- a/packages/studio/tailwind.config.ts +++ b/packages/studio/tailwind.config.ts @@ -50,7 +50,7 @@ export default { content: [ path.resolve(__dirname, "src/**/*.{ts,tsx}"), path.resolve(__dirname, "index.html"), - path.resolve(__dirname, "../studio-ui/**/*.tsx"), + path.join(path.dirname(require.resolve("@yext/studio-ui")), "**/*.js"), ...transformedUserContent, ], safelist: generateTailwindSafelist(userTailwindTheme), From 716e13315448505a34e83033d8debbdaff3c67fb Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 8 Sep 2023 12:03:45 -0400 Subject: [PATCH 10/24] respond to alex's comments! --- packages/studio-ui/src/store/models/StudioStore.ts | 2 -- packages/studio-ui/tsconfig.json | 14 +------------- packages/studio/tsconfig.json | 14 +------------- 3 files changed, 2 insertions(+), 28 deletions(-) diff --git a/packages/studio-ui/src/store/models/StudioStore.ts b/packages/studio-ui/src/store/models/StudioStore.ts index cca21e647..ea88511fd 100644 --- a/packages/studio-ui/src/store/models/StudioStore.ts +++ b/packages/studio-ui/src/store/models/StudioStore.ts @@ -1,4 +1,3 @@ -import { GitData } from "@yext/studio-plugin"; import StudioActions from "../StudioActions"; import FileMetadataSlice from "./slices/FileMetadataSlice"; import PagePreviewSlice from "./slices/PagePreviewSlice"; @@ -23,5 +22,4 @@ export type StudioStore = { actions: StudioActions; studioConfig: StudioConfigSlice; studioEnvData: StudioEnvDataSlice; - gitData?: GitData; }; diff --git a/packages/studio-ui/tsconfig.json b/packages/studio-ui/tsconfig.json index 7e0d81546..70d77dd47 100644 --- a/packages/studio-ui/tsconfig.json +++ b/packages/studio-ui/tsconfig.json @@ -1,18 +1,6 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "module": "ESNext", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "noImplicitAny": false, - "moduleResolution": "node", - "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "jsx": "react-jsx", - "target": "ESNext", "outDir": "lib", "types": ["@yext/studio-plugin/virtual-module", "vite-plugin-svgr/client"] }, diff --git a/packages/studio/tsconfig.json b/packages/studio/tsconfig.json index be425c224..6635747b7 100644 --- a/packages/studio/tsconfig.json +++ b/packages/studio/tsconfig.json @@ -1,18 +1,6 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "module": "ESNext", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "noImplicitAny": false, - "moduleResolution": "node", - "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "jsx": "react-jsx", - "target": "ESNext", "outDir": "lib", "types": [ "vite/client", From c4b5dc0845940a0c1dad17a2ad817b688c2e10f5 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 8 Sep 2023 14:46:07 -0400 Subject: [PATCH 11/24] comments --- package-lock.json | 282 +++++++++++++++++++++++++++++++- packages/studio-ui/package.json | 5 +- packages/studio-ui/src/App.tsx | 1 - packages/studio/package.json | 4 +- 4 files changed, 281 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4da823936..973fd5032 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23906,8 +23906,8 @@ "postcss": "^8.4.27", "react": "^18.2.0", "react-dom": "^18.2.0", - "zundo": "2.0.0-beta.12", - "zustand": "^4.3.2" + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0" }, "bin": { "studio": "lib/bin/studio.js" @@ -26114,8 +26114,6 @@ "react-tooltip": "^5.18.0", "tailwind-merge": "^1.8.1", "tailwindcss": "^3.3.3", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -26138,12 +26136,222 @@ "copyfiles": "^2.4.1", "jest": "^29.5.0", "jest-environment-jsdom": "^29.3.1", - "resize-observer-polyfill": "^1.5.1" + "resize-observer-polyfill": "^1.5.1", + "vite-plugin-svgr": "^3.2.0" }, "peerDependencies": { "@yext/studio-plugin": "*" } }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz", + "integrity": "sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz", + "integrity": "sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz", + "integrity": "sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz", + "integrity": "sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz", + "integrity": "sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz", + "integrity": "sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz", + "integrity": "sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz", + "integrity": "sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/babel-preset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-7.0.0.tgz", + "integrity": "sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^7.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^7.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^7.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^7.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^7.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^7.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^7.0.0", + "@svgr/babel-plugin-transform-svg-component": "^7.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/studio-ui/node_modules/@svgr/core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-7.0.0.tgz", + "integrity": "sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "^7.0.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "packages/studio-ui/node_modules/@svgr/hast-util-to-babel-ast": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz", + "integrity": "sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "packages/studio-ui/node_modules/@svgr/plugin-jsx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz", + "integrity": "sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "^7.0.0", + "@svgr/hast-util-to-babel-ast": "^7.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, "packages/studio-ui/node_modules/@types/node": { "version": "18.17.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.12.tgz", @@ -26186,6 +26394,18 @@ "postcss": "^8.1.0" } }, + "packages/studio-ui/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/studio-ui/node_modules/caniuse-lite": { "version": "1.0.30001525", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", @@ -26205,6 +26425,58 @@ } ] }, + "packages/studio-ui/node_modules/cosmiconfig": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.4.tgz", + "integrity": "sha512-SF+2P8+o/PTV05rgsAjDzL4OFdVXAulSfC/L19VaeVT7+tpOOSscCt2QLxDZ+CLxF2WOiq6y1K5asvs8qUJT/Q==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/studio-ui/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/studio-ui/node_modules/vite-plugin-svgr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz", + "integrity": "sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "@svgr/core": "^7.0.0", + "@svgr/plugin-jsx": "^7.0.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4" + } + }, "packages/studio/node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json index fa09940fc..a23787f66 100644 --- a/packages/studio-ui/package.json +++ b/packages/studio-ui/package.json @@ -41,8 +41,6 @@ "react-tooltip": "^5.18.0", "tailwind-merge": "^1.8.1", "tailwindcss": "^3.3.3", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -65,7 +63,8 @@ "copyfiles": "^2.4.1", "jest": "^29.5.0", "jest-environment-jsdom": "^29.3.1", - "resize-observer-polyfill": "^1.5.1" + "resize-observer-polyfill": "^1.5.1", + "vite-plugin-svgr": "^3.2.0" }, "peerDependencies": { "@yext/studio-plugin": "*" diff --git a/packages/studio-ui/src/App.tsx b/packages/studio-ui/src/App.tsx index e1b2f8dc7..ea54fd794 100644 --- a/packages/studio-ui/src/App.tsx +++ b/packages/studio-ui/src/App.tsx @@ -3,7 +3,6 @@ import ActionsBar from "./components/ActionsBar"; import Toast from "./components/Toast"; import PreviewWithUseComponents from "./components/PreviewWithUseComponents"; import LeftSidebar from "./components/LeftSidebar"; -import "react-tooltip/dist/react-tooltip.css"; export default function App() { return ( diff --git a/packages/studio/package.json b/packages/studio/package.json index 76d287450..71522c355 100644 --- a/packages/studio/package.json +++ b/packages/studio/package.json @@ -22,8 +22,8 @@ "postcss": "^8.4.27", "react": "^18.2.0", "react-dom": "^18.2.0", - "zundo": "2.0.0-beta.12", - "zustand": "^4.3.2" + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0" }, "devDependencies": { "@types/node": "^18.11.15", From 3ef9211af8126a1ea9f086b25d9237cf04331e98 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Thu, 14 Sep 2023 10:47:02 -0400 Subject: [PATCH 12/24] fix tests --- packages/studio-plugin/src/utils/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/studio-plugin/src/utils/index.ts b/packages/studio-plugin/src/utils/index.ts index ac3121748..8b8e7604d 100644 --- a/packages/studio-plugin/src/utils/index.ts +++ b/packages/studio-plugin/src/utils/index.ts @@ -1,3 +1,4 @@ export { default as TypeGuards } from "./TypeGuards"; export { default as ComponentTreeHelpers } from "./ComponentTreeHelpers"; export { default as transformPropValuesToRaw } from "./transformPropValuesToRaw"; +export { default as generateTailwindSafelist } from "./generateTailwindSafelist"; From 0f9da965dcd466c79d4a52f4bc7c8ac6909da42f Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Thu, 14 Sep 2023 11:02:15 -0400 Subject: [PATCH 13/24] update script --- update-minor-versions.mjs | 40 +++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/update-minor-versions.mjs b/update-minor-versions.mjs index 2fb5f89cf..f99552d6c 100644 --- a/update-minor-versions.mjs +++ b/update-minor-versions.mjs @@ -1,35 +1,47 @@ import { execSync } from "child_process"; import fs from "fs"; -function readJson(filepath) { - return JSON.parse(fs.readFileSync(filepath, "utf-8")); -} - function bumpStudioPlugin() { console.log("... bumping studio-plugin"); execSync("npm version minor -w=packages/studio-plugin"); - const packageJson = readJson("./packages/studio-plugin/package.json"); - const newVersion = packageJson?.version; - if (!newVersion) { - throw new Error("Could not parse studio-plugin version from package.json"); - } - return newVersion; + return readVersion("./packages/studio-plugin/package.json"); } -function bumpStudio(newVersion) { +function bumpStudio(pluginVersion, uiVersion) { console.log("... bumping studio"); const packageJsonPath = "./packages/studio/package.json"; const packageJson = readJson(packageJsonPath); // `npm i @yext/studio-plugin@${newVersion} --save-exact` does not update the package json, // likely because the new version does not exist yet. - packageJson.dependencies["@yext/studio-plugin"] = newVersion; + packageJson.dependencies["@yext/studio-plugin"] = pluginVersion; + packageJson.dependencies["@yext/studio-ui"] = uiVersion; fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); execSync("npm version minor -w=packages/studio"); } +function bumpStudioUI() { + console.log("... bumping studio-ui"); + execSync("npm version minor -w=packages/studio-ui"); + return readVersion("./packages/studio-ui/package.json"); +} + +function readJson(filepath) { + return JSON.parse(fs.readFileSync(filepath, "utf-8")); +} + +function readVersion(packageJsonPath) { + const packageJson = readJson(packageJsonPath); + const newVersion = packageJson?.version; + if (!newVersion) { + throw new Error("Could not parse studio-plugin version from package.json"); + } + return newVersion; +} + function main() { - const newVersion = bumpStudioPlugin(); - bumpStudio(newVersion); + const pluginVersion = bumpStudioPlugin(); + const uiVersion = bumpStudioUI(); + bumpStudio(pluginVersion, uiVersion); } main(); From 77893ec9110451ffb630d9de6b5fbb6dae1ed9d7 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 15 Sep 2023 14:25:18 -0400 Subject: [PATCH 14/24] Update update-minor-versions.mjs --- update-minor-versions.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update-minor-versions.mjs b/update-minor-versions.mjs index f99552d6c..d543312a9 100644 --- a/update-minor-versions.mjs +++ b/update-minor-versions.mjs @@ -33,7 +33,7 @@ function readVersion(packageJsonPath) { const packageJson = readJson(packageJsonPath); const newVersion = packageJson?.version; if (!newVersion) { - throw new Error("Could not parse studio-plugin version from package.json"); + throw new Error(`Could not parse version from package.json at ${packageJsonPath}`); } return newVersion; } From 927c6ecb263aef56542ce9bd3829f183ff797a63 Mon Sep 17 00:00:00 2001 From: nmanu1 <88398086+nmanu1@users.noreply.github.com> Date: Fri, 15 Sep 2023 13:33:27 -0400 Subject: [PATCH 15/24] Add HMR for layouts and remove top-level fragments (#373) This PR removes top-level fragments from the component tree of each layout in the layout slice so they won't be displayed in the UI when adding a layout to a new page. HMR is also updated to re-sync layouts in the store when a layout file is changed or a full sync is performed. J=SLAP-2937 TEST=manual In the test-site, saw that if `LocationLayout` had a top-level fragment, it was not present in the component tree in the `layouts` record. Also, checked that updating `LocationLayout` while running the test-site would correctly update it's component tree in the store. --- .../studio-ui/src/store/hotReloadStore.ts | 12 +- .../src/store/slices/createLayoutSlice.ts | 4 +- .../src/store/slices/createPageSlice.ts | 206 ++++++++++++++++++ .../src/store/slices/pages/createPageSlice.ts | 10 +- .../studio-ui/src/store/useStudioStore.ts | 2 +- .../src/utils/removeTopLevelFragments.ts | 7 +- 6 files changed, 229 insertions(+), 12 deletions(-) create mode 100644 packages/studio-ui/src/store/slices/createPageSlice.ts diff --git a/packages/studio-ui/src/store/hotReloadStore.ts b/packages/studio-ui/src/store/hotReloadStore.ts index 054401f10..3ae735749 100644 --- a/packages/studio-ui/src/store/hotReloadStore.ts +++ b/packages/studio-ui/src/store/hotReloadStore.ts @@ -16,7 +16,7 @@ export default async function hotReloadStore(payload: StudioHMRPayload) { await syncFileMetadata(studioData, payload.file); break; case "layouts": - // TODO SLAP-2930 + syncLayouts(studioData); break; case "pages": syncPages(studioData); @@ -32,6 +32,7 @@ export default async function hotReloadStore(payload: StudioHMRPayload) { async function fullSync(studioData: StudioData, file: string) { syncPages(studioData); + syncLayouts(studioData); await syncFileMetadata(studioData, file); syncSiteSettings(studioData); useStudioStore.setState((store) => { @@ -81,6 +82,15 @@ function syncPages(studioData: StudioData) { }); } +function syncLayouts(studioData: StudioData) { + const layoutNameToLayoutState = removeTopLevelFragments( + studioData.layoutNameToLayoutState + ); + useStudioStore.setState((store) => { + store.layouts.layouts = layoutNameToLayoutState; + }); +} + function syncSiteSettings(studioData: StudioData) { useStudioStore.setState((store) => { store.siteSettings.shape = studioData.siteSettings?.shape; diff --git a/packages/studio-ui/src/store/slices/createLayoutSlice.ts b/packages/studio-ui/src/store/slices/createLayoutSlice.ts index c2591afb0..94072bf66 100644 --- a/packages/studio-ui/src/store/slices/createLayoutSlice.ts +++ b/packages/studio-ui/src/store/slices/createLayoutSlice.ts @@ -1,10 +1,10 @@ import initialStudioData from "virtual_yext-studio"; import { LayoutSlice } from "../models/slices/LayoutSlice"; import { SliceCreator } from "../models/utils"; +import removeTopLevelFragments from "../../utils/removeTopLevelFragments"; const createLayoutSlice: SliceCreator = () => ({ - // TODO (SLAP-2930): Remove top-level fragments from layouts - layouts: initialStudioData.layoutNameToLayoutState, + layouts: removeTopLevelFragments(initialStudioData.layoutNameToLayoutState), }); export default createLayoutSlice; diff --git a/packages/studio-ui/src/store/slices/createPageSlice.ts b/packages/studio-ui/src/store/slices/createPageSlice.ts new file mode 100644 index 000000000..7482f159b --- /dev/null +++ b/packages/studio-ui/src/store/slices/createPageSlice.ts @@ -0,0 +1,206 @@ +import { + ComponentState, + GetPathVal, + PageState, + StreamScope, +} from "@yext/studio-plugin"; +import { isEqual } from "lodash"; +import initialStudioData from "virtual_yext-studio"; +import DOMRectProperties from "../models/DOMRectProperties"; +import PageSlice, { PageSliceStates } from "../models/slices/PageSlice"; +import { SliceCreator } from "../models/utils"; +import removeTopLevelFragments from "../../utils/removeTopLevelFragments"; +import PropValueHelpers from "../../utils/PropValueHelpers"; + +const firstPageEntry = Object.entries( + initialStudioData.pageNameToPageState +)?.sort()[0]; + +const initialStates: PageSliceStates = { + pages: removeTopLevelFragments(initialStudioData.pageNameToPageState), + errorPages: initialStudioData.pageNameToErrorPageState, + activePageName: firstPageEntry?.[0], + activeEntityFile: firstPageEntry?.[1]?.pagesJS?.entityFiles?.[0], + activeComponentUUID: undefined, + activeComponentRect: undefined, + pendingChanges: { + pagesToRemove: new Set(), + pagesToUpdate: new Set(), + }, +}; + +export const createPageSlice: SliceCreator = (set, get) => { + const pageActions = { + addPage: (pageName: string, page: PageState) => { + if (get().pages[pageName]) { + throw new Error(`Page name "${pageName}" is already used.`); + } + + set((store) => { + store.pages[pageName] = page; + store.pendingChanges.pagesToUpdate.add(pageName); + }); + }, + removePage: (pageName: string) => { + set((store) => { + delete store.pages[pageName]; + if (pageName === store.activePageName) { + get().setActivePage(undefined); + store.activeEntityFile = undefined; + store.activePageEntities = undefined; + } + const { pagesToRemove, pagesToUpdate } = store.pendingChanges; + pagesToUpdate.delete(pageName); + pagesToRemove.add(pageName); + }); + }, + setComponentTreeInPage: ( + pageName: string, + componentTree: ComponentState[] + ) => { + set((store) => { + const originalComponentTree = store.pages[pageName].componentTree; + store.pages[pageName].componentTree = componentTree; + if (!isEqual(originalComponentTree, componentTree)) { + store.pendingChanges.pagesToUpdate.add(pageName); + } + }); + }, + updateGetPathValue: (pageName: string, getPathValue: GetPathVal) => { + set((store) => { + const originalPagesJsState = store.pages[pageName].pagesJS; + if (!originalPagesJsState) { + throw new Error( + `Error updating getPath value: "${pageName}" is not a PagesJS page.` + ); + } + const originalGetPathValue = originalPagesJsState.getPathValue; + if ( + !originalGetPathValue || + PropValueHelpers.getTemplateExpression(originalGetPathValue) !== + PropValueHelpers.getTemplateExpression(getPathValue) + ) { + store.pages[pageName].pagesJS = { + ...originalPagesJsState, + getPathValue, + }; + store.pendingChanges.pagesToUpdate.add(pageName); + } + }); + }, + updateStreamScope: (pageName: string, newStreamScope: StreamScope) => { + set((store) => { + const pagesJS = store.pages[pageName].pagesJS; + if (pagesJS?.streamScope) { + pagesJS.streamScope = newStreamScope; + store.pendingChanges.pagesToUpdate.add(pageName); + } + }); + }, + setEntityFiles: (pageName: string, entityFiles: string[] | undefined) => { + set((store) => { + const pageState = store.pages[pageName]; + if (!pageState.pagesJS) { + throw new Error( + `Tried to update entity files for non-PagesJS page ${pageName}.` + ); + } + pageState.pagesJS = { + ...pageState.pagesJS, + entityFiles, + }; + }); + }, + clearPendingChanges: () => { + set((store) => { + store.pendingChanges.pagesToRemove = new Set(); + store.pendingChanges.pagesToUpdate = new Set(); + }); + }, + }; + + const activePageActions = { + setActivePage: (activePageName: string | undefined) => { + if (activePageName !== undefined && !get().pages[activePageName]) { + throw new Error( + `Page "${activePageName}" is not found in Store. Unable to set it as active page.` + ); + } + + get().setActiveComponentUUID(undefined); + set({ activePageName }); + }, + getActivePageState: () => { + const { pages, activePageName } = get(); + if (!activePageName) { + return; + } + return pages[activePageName]; + }, + }; + + const pageComponentActions = { + setActiveComponentUUID: (activeComponentUUID: string | undefined) => { + set({ activeComponentUUID }); + }, + setActiveComponentRect: (rect: DOMRectProperties | undefined) => { + set({ activeComponentRect: rect }); + }, + getActiveComponentState: () => { + const { activeComponentUUID, getActivePageState } = get(); + const activePageState = getActivePageState(); + if (!activeComponentUUID || !activePageState) { + return undefined; + } + return activePageState.componentTree.find( + (component) => component.uuid === activeComponentUUID + ); + }, + }; + + const activeEntityFileActions: Pick< + PageSlice, + "setActiveEntityFile" | "setActivePageEntities" | "getActiveEntityData" + > = { + setActiveEntityFile: (activeEntityFile?: string) => { + if (activeEntityFile === undefined) { + set({ activeEntityFile: undefined }); + return; + } + + const activePageState = get().getActivePageState(); + if (!activePageState) { + throw new Error(`Error setting active entity file: no active page.`); + } + + const acceptedEntityFiles = activePageState.pagesJS?.entityFiles; + if (!acceptedEntityFiles?.includes(activeEntityFile)) { + throw new Error( + `"${activeEntityFile}" is not an accepted entity file for this page.` + ); + } + set({ activeEntityFile }); + }, + setActivePageEntities: ( + entities?: Record> + ) => { + set({ activePageEntities: entities }); + }, + getActiveEntityData() { + const activeEntityFile = get().activeEntityFile; + if (activeEntityFile) { + return get().activePageEntities?.[activeEntityFile]; + } + }, + }; + + return { + ...initialStates, + ...pageActions, + ...activePageActions, + ...pageComponentActions, + ...activeEntityFileActions, + }; +}; + +export default createPageSlice; diff --git a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts index a286a7566..7482f159b 100644 --- a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts +++ b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts @@ -6,11 +6,11 @@ import { } from "@yext/studio-plugin"; import { isEqual } from "lodash"; import initialStudioData from "virtual_yext-studio"; -import DOMRectProperties from "../../models/DOMRectProperties"; -import PageSlice, { PageSliceStates } from "../../models/slices/PageSlice"; -import { SliceCreator } from "../../models/utils"; -import removeTopLevelFragments from "../../../utils/removeTopLevelFragments"; -import PropValueHelpers from "../../../utils/PropValueHelpers"; +import DOMRectProperties from "../models/DOMRectProperties"; +import PageSlice, { PageSliceStates } from "../models/slices/PageSlice"; +import { SliceCreator } from "../models/utils"; +import removeTopLevelFragments from "../../utils/removeTopLevelFragments"; +import PropValueHelpers from "../../utils/PropValueHelpers"; const firstPageEntry = Object.entries( initialStudioData.pageNameToPageState diff --git a/packages/studio-ui/src/store/useStudioStore.ts b/packages/studio-ui/src/store/useStudioStore.ts index af8292379..ac523f687 100644 --- a/packages/studio-ui/src/store/useStudioStore.ts +++ b/packages/studio-ui/src/store/useStudioStore.ts @@ -5,7 +5,7 @@ import { enableMapSet } from "immer"; import { StudioStore } from "./models/StudioStore"; import createFileMetadataSlice from "./slices/createFileMetadataSlice"; -import createPageSlice from "./slices/pages/createPageSlice"; +import createPageSlice from "./slices/createPageSlice"; import createSiteSettingSlice from "./slices/createSiteSettingsSlice"; import createPagePreviewSlice from "./slices/createPagePreviewSlice"; import StudioActions from "./StudioActions"; diff --git a/packages/studio-ui/src/utils/removeTopLevelFragments.ts b/packages/studio-ui/src/utils/removeTopLevelFragments.ts index c3f6fc237..975797700 100644 --- a/packages/studio-ui/src/utils/removeTopLevelFragments.ts +++ b/packages/studio-ui/src/utils/removeTopLevelFragments.ts @@ -2,15 +2,16 @@ import { ComponentStateKind, ComponentState, PageState, + LayoutState, } from "@yext/studio-plugin"; /** * Iterates through a record of objects that contain a componentTree, * and removes all top level fragments. */ -export default function removeTopLevelFragments( - record: Record -): Record { +export default function removeTopLevelFragments< + T extends PageState | LayoutState +>(record: Record): Record { const entries = Object.entries(record).map( ([key, componentTreeContainer]) => { const updatedContainer = { From a685d3aad8b944a30024c7f1a42174dcef9b9ce4 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Fri, 15 Sep 2023 14:27:53 -0400 Subject: [PATCH 16/24] delete page slice --- .../src/store/slices/pages/createPageSlice.ts | 206 ------------------ 1 file changed, 206 deletions(-) delete mode 100644 packages/studio-ui/src/store/slices/pages/createPageSlice.ts diff --git a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts b/packages/studio-ui/src/store/slices/pages/createPageSlice.ts deleted file mode 100644 index 7482f159b..000000000 --- a/packages/studio-ui/src/store/slices/pages/createPageSlice.ts +++ /dev/null @@ -1,206 +0,0 @@ -import { - ComponentState, - GetPathVal, - PageState, - StreamScope, -} from "@yext/studio-plugin"; -import { isEqual } from "lodash"; -import initialStudioData from "virtual_yext-studio"; -import DOMRectProperties from "../models/DOMRectProperties"; -import PageSlice, { PageSliceStates } from "../models/slices/PageSlice"; -import { SliceCreator } from "../models/utils"; -import removeTopLevelFragments from "../../utils/removeTopLevelFragments"; -import PropValueHelpers from "../../utils/PropValueHelpers"; - -const firstPageEntry = Object.entries( - initialStudioData.pageNameToPageState -)?.sort()[0]; - -const initialStates: PageSliceStates = { - pages: removeTopLevelFragments(initialStudioData.pageNameToPageState), - errorPages: initialStudioData.pageNameToErrorPageState, - activePageName: firstPageEntry?.[0], - activeEntityFile: firstPageEntry?.[1]?.pagesJS?.entityFiles?.[0], - activeComponentUUID: undefined, - activeComponentRect: undefined, - pendingChanges: { - pagesToRemove: new Set(), - pagesToUpdate: new Set(), - }, -}; - -export const createPageSlice: SliceCreator = (set, get) => { - const pageActions = { - addPage: (pageName: string, page: PageState) => { - if (get().pages[pageName]) { - throw new Error(`Page name "${pageName}" is already used.`); - } - - set((store) => { - store.pages[pageName] = page; - store.pendingChanges.pagesToUpdate.add(pageName); - }); - }, - removePage: (pageName: string) => { - set((store) => { - delete store.pages[pageName]; - if (pageName === store.activePageName) { - get().setActivePage(undefined); - store.activeEntityFile = undefined; - store.activePageEntities = undefined; - } - const { pagesToRemove, pagesToUpdate } = store.pendingChanges; - pagesToUpdate.delete(pageName); - pagesToRemove.add(pageName); - }); - }, - setComponentTreeInPage: ( - pageName: string, - componentTree: ComponentState[] - ) => { - set((store) => { - const originalComponentTree = store.pages[pageName].componentTree; - store.pages[pageName].componentTree = componentTree; - if (!isEqual(originalComponentTree, componentTree)) { - store.pendingChanges.pagesToUpdate.add(pageName); - } - }); - }, - updateGetPathValue: (pageName: string, getPathValue: GetPathVal) => { - set((store) => { - const originalPagesJsState = store.pages[pageName].pagesJS; - if (!originalPagesJsState) { - throw new Error( - `Error updating getPath value: "${pageName}" is not a PagesJS page.` - ); - } - const originalGetPathValue = originalPagesJsState.getPathValue; - if ( - !originalGetPathValue || - PropValueHelpers.getTemplateExpression(originalGetPathValue) !== - PropValueHelpers.getTemplateExpression(getPathValue) - ) { - store.pages[pageName].pagesJS = { - ...originalPagesJsState, - getPathValue, - }; - store.pendingChanges.pagesToUpdate.add(pageName); - } - }); - }, - updateStreamScope: (pageName: string, newStreamScope: StreamScope) => { - set((store) => { - const pagesJS = store.pages[pageName].pagesJS; - if (pagesJS?.streamScope) { - pagesJS.streamScope = newStreamScope; - store.pendingChanges.pagesToUpdate.add(pageName); - } - }); - }, - setEntityFiles: (pageName: string, entityFiles: string[] | undefined) => { - set((store) => { - const pageState = store.pages[pageName]; - if (!pageState.pagesJS) { - throw new Error( - `Tried to update entity files for non-PagesJS page ${pageName}.` - ); - } - pageState.pagesJS = { - ...pageState.pagesJS, - entityFiles, - }; - }); - }, - clearPendingChanges: () => { - set((store) => { - store.pendingChanges.pagesToRemove = new Set(); - store.pendingChanges.pagesToUpdate = new Set(); - }); - }, - }; - - const activePageActions = { - setActivePage: (activePageName: string | undefined) => { - if (activePageName !== undefined && !get().pages[activePageName]) { - throw new Error( - `Page "${activePageName}" is not found in Store. Unable to set it as active page.` - ); - } - - get().setActiveComponentUUID(undefined); - set({ activePageName }); - }, - getActivePageState: () => { - const { pages, activePageName } = get(); - if (!activePageName) { - return; - } - return pages[activePageName]; - }, - }; - - const pageComponentActions = { - setActiveComponentUUID: (activeComponentUUID: string | undefined) => { - set({ activeComponentUUID }); - }, - setActiveComponentRect: (rect: DOMRectProperties | undefined) => { - set({ activeComponentRect: rect }); - }, - getActiveComponentState: () => { - const { activeComponentUUID, getActivePageState } = get(); - const activePageState = getActivePageState(); - if (!activeComponentUUID || !activePageState) { - return undefined; - } - return activePageState.componentTree.find( - (component) => component.uuid === activeComponentUUID - ); - }, - }; - - const activeEntityFileActions: Pick< - PageSlice, - "setActiveEntityFile" | "setActivePageEntities" | "getActiveEntityData" - > = { - setActiveEntityFile: (activeEntityFile?: string) => { - if (activeEntityFile === undefined) { - set({ activeEntityFile: undefined }); - return; - } - - const activePageState = get().getActivePageState(); - if (!activePageState) { - throw new Error(`Error setting active entity file: no active page.`); - } - - const acceptedEntityFiles = activePageState.pagesJS?.entityFiles; - if (!acceptedEntityFiles?.includes(activeEntityFile)) { - throw new Error( - `"${activeEntityFile}" is not an accepted entity file for this page.` - ); - } - set({ activeEntityFile }); - }, - setActivePageEntities: ( - entities?: Record> - ) => { - set({ activePageEntities: entities }); - }, - getActiveEntityData() { - const activeEntityFile = get().activeEntityFile; - if (activeEntityFile) { - return get().activePageEntities?.[activeEntityFile]; - } - }, - }; - - return { - ...initialStates, - ...pageActions, - ...activePageActions, - ...pageComponentActions, - ...activeEntityFileActions, - }; -}; - -export default createPageSlice; From b2433b80d48a75b6ccfb3b03d10dc69ccbbc3d68 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 14:57:09 +0000 Subject: [PATCH 17/24] Automated linting update and features.json sync --- update-minor-versions.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/update-minor-versions.mjs b/update-minor-versions.mjs index d543312a9..4f838e1b8 100644 --- a/update-minor-versions.mjs +++ b/update-minor-versions.mjs @@ -33,7 +33,9 @@ function readVersion(packageJsonPath) { const packageJson = readJson(packageJsonPath); const newVersion = packageJson?.version; if (!newVersion) { - throw new Error(`Could not parse version from package.json at ${packageJsonPath}`); + throw new Error( + `Could not parse version from package.json at ${packageJsonPath}` + ); } return newVersion; } From 99469fb4985eeca6ca69f2301a60171dddb44979 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Sep 2023 15:36:53 +0000 Subject: [PATCH 18/24] Automated linting update and features.json sync --- .../studio-ui/src/components/AddElementMenu/ElementSelector.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx b/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx index 8b1378917..e69de29bb 100644 --- a/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx +++ b/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx @@ -1 +0,0 @@ - From 76bf68a1a742036f19fbc3ff5e2e71ca20ae32a2 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Tue, 19 Sep 2023 11:37:57 -0400 Subject: [PATCH 19/24] remove empty file --- .../studio-ui/src/components/AddElementMenu/ElementSelector.tsx | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx diff --git a/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx b/packages/studio-ui/src/components/AddElementMenu/ElementSelector.tsx deleted file mode 100644 index e69de29bb..000000000 From 0eb59fff7ac3059142e076ba2fc46ef1a2301fa4 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Tue, 5 Sep 2023 15:27:51 -0400 Subject: [PATCH 20/24] wip --- package-lock.json | 731 +++++++++--------- .../src/parsers/ComponentTreeParser.ts | 68 +- .../studio-plugin/src/utils/TypeGuards.ts | 59 +- packages/studio-ui/.gitignore | 1 + packages/studio-ui/package.json | 6 +- .../components/FieldPicker/FieldDropdown.tsx | 2 +- .../src/components/HighlightingContainer.tsx | 2 +- .../PageSettingsButton/EntityPageModal.tsx | 2 +- .../studio-ui/src/components/PreviewPanel.tsx | 42 +- .../src/components/RepeaterPreview.tsx | 54 ++ .../src/components/SiteSettingsPanel.tsx | 2 +- .../src/components/common/ColorPicker.tsx | 2 +- .../src/hooks/useFuncWithZundoBatching.tsx | 2 +- packages/studio-ui/src/hooks/useHasChanges.ts | 2 +- packages/studio-ui/src/index.ts | 1 + packages/studio-ui/src/store/StudioActions.ts | 2 +- .../StudioActions/GenerateTestDataAction.ts | 2 +- .../studio-ui/src/store/createModuleAction.ts | 122 +++ .../src/store/slices/createPageSlice.ts | 2 +- .../studio-ui/src/store/zundoMiddleware.ts | 2 +- .../studio-ui/src/utils/getPropsForPreview.ts | 2 +- packages/studio-ui/vite.config.ts | 23 + packages/studio/src/main.tsx | 4 +- 23 files changed, 738 insertions(+), 397 deletions(-) create mode 100644 packages/studio-ui/.gitignore create mode 100644 packages/studio-ui/src/components/RepeaterPreview.tsx create mode 100644 packages/studio-ui/src/store/createModuleAction.ts create mode 100644 packages/studio-ui/vite.config.ts diff --git a/package-lock.json b/package-lock.json index 973fd5032..25ebc440f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4285,22 +4285,22 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.34.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.34.2.tgz", - "integrity": "sha512-oREyUU7p3JgjrqapJxEHe83gA1SXOWgaA4XCiY9PvsiLkgGHtn2ibTRgw9GCI/4kZzcb+OQv5waUDxsnQSKfwQ==", + "version": "7.36.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.36.4.tgz", + "integrity": "sha512-21UECq8C/8CpHT23yiqTBQ10egKUacIpxkPyYR7hdswo/M5yTWdBvbq+77YC9uPKQJOUfOD1FImBQ1DzpsdeQQ==", "dependencies": { - "@microsoft/api-extractor-model": "7.26.2", + "@microsoft/api-extractor-model": "7.27.6", "@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc-config": "~0.16.1", - "@rushstack/node-core-library": "3.55.0", - "@rushstack/rig-package": "0.3.17", - "@rushstack/ts-command-line": "4.13.1", + "@rushstack/node-core-library": "3.59.7", + "@rushstack/rig-package": "0.4.1", + "@rushstack/ts-command-line": "4.15.2", "colors": "~1.2.1", "lodash": "~4.17.15", "resolve": "~1.22.1", - "semver": "~7.3.0", + "semver": "~7.5.4", "source-map": "~0.6.1", - "typescript": "~4.8.4" + "typescript": "~5.0.4" }, "bin": { "api-extractor": "bin/api-extractor" @@ -4374,75 +4374,64 @@ "node": ">= 4.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/@rushstack/node-core-library": { - "version": "3.55.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.55.0.tgz", - "integrity": "sha512-6lSel8w3DeGaD/JCKw64wfezEBijlCQlMwBoYg9Ci5VPy+dZ+FpBkIBrY8mi3Ge4xNzr4gyTbQ5XEt0QP1Kv/w==", + "node_modules/@microsoft/api-extractor/node_modules/@microsoft/api-extractor-model": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.27.6.tgz", + "integrity": "sha512-eiCnlayyum1f7fS2nA9pfIod5VCNR1G+Tq84V/ijDrKrOFVa598BLw145nCsGDMoFenV6ajNi2PR5WCwpAxW6Q==", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "3.59.7" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/@rushstack/ts-command-line": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.15.2.tgz", + "integrity": "sha512-5+C2uoJY8b+odcZD6coEe2XNC4ZjGB4vCMESbqW/8DHRWC/qIHfANdmN9F1wz/lAgxz72i7xRoVtPY2j7e4gpQ==", "dependencies": { + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - }, - "peerDependencies": { - "@types/node": "^14.18.36" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "string-argv": "~0.3.1" } }, - "node_modules/@microsoft/api-extractor/node_modules/@types/node": { - "version": "14.18.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", - "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==", - "optional": true, - "peer": true + "node_modules/@microsoft/api-extractor/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/@microsoft/api-extractor/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=10" } }, - "node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "semver": "bin/semver.js" }, "engines": { - "node": ">=4.2.0" + "node": ">=10" } }, - "node_modules/@microsoft/api-extractor/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } + "node_modules/@microsoft/api-extractor/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@microsoft/tsdoc": { "version": "0.14.2", @@ -5052,24 +5041,94 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" }, - "node_modules/@rushstack/rig-package": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.17.tgz", - "integrity": "sha512-nxvAGeIMnHl1LlZSQmacgcRV4y1EYtgcDIrw6KkeVjudOMonlxO482PhDj3LVZEp6L7emSf6YSO2s5JkHlwfZA==", + "node_modules/@rushstack/node-core-library": { + "version": "3.59.7", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.59.7.tgz", + "integrity": "sha512-ln1Drq0h+Hwa1JVA65x5mlSgUrBa1uHL+V89FqVWQgXd1vVIMhrtqtWGQrhTnFHxru5ppX+FY39VWELF/FjQCw==", "dependencies": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@rushstack/rig-package/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { - "path-parse": "^1.0.6" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@rushstack/rig-package": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.4.1.tgz", + "integrity": "sha512-AGRwpqlXNSp9LhUSz4HKI9xCluqQDt/obsQFdv/NYIekF3pTTPzc+HbQsIsjVjYnJ3DcmxOREVMhvrMEjpiq6g==", + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" } }, "node_modules/@rushstack/ts-command-line": { @@ -6493,6 +6552,128 @@ "vite": "^4.2.0" } }, + "node_modules/@volar/language-core": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.1.tgz", + "integrity": "sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.10.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.1.tgz", + "integrity": "sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.1.tgz", + "integrity": "sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.10.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.8.tgz", + "integrity": "sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.10.0", + "@volar/source-map": "~1.10.0", + "@vue/compiler-dom": "^3.3.0", + "@vue/reactivity": "^3.3.0", + "@vue/shared": "^3.3.0", + "minimatch": "^9.0.0", + "muggle-string": "^0.3.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dev": true, + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "dev": true + }, + "node_modules/@vue/typescript": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.8.tgz", + "integrity": "sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.10.0", + "@vue/language-core": "1.8.8" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -9455,6 +9636,12 @@ "node": ">=12" } }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "devOptional": true + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -15083,6 +15270,12 @@ "node": ">= 8" } }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", @@ -15616,6 +15809,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -20297,6 +20496,41 @@ "randombytes": "^2.1.0" } }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz", + "integrity": "sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==", + "dev": true, + "dependencies": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -22501,6 +22735,41 @@ } } }, + "node_modules/vite-plugin-css-injected-by-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.0.tgz", + "integrity": "sha512-xG+jyHNCmUqi/TXp6q88wTJGeAOrNLSyUUTp4qEQ9QZLGcHWQQsCsSSKa59rPMQr8sOzfzmWDd8enGqfH/dBew==", + "dev": true, + "peerDependencies": { + "vite": ">2.0.0-0" + } + }, + "node_modules/vite-plugin-dts": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.5.3.tgz", + "integrity": "sha512-h94j/+SR1PhLR9jnEtcjZILagE2QZBAV8V1y3T2Ujcet1VI0Et4dZSU1W8fbnp6obB7B3/b8hArqdi2/9HuH+w==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor": "^7.36.4", + "@rollup/pluginutils": "^5.0.2", + "@vue/language-core": "^1.8.8", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "vue-tsc": "^1.8.8" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, "node_modules/vite-plugin-svgr": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-2.4.0.tgz", @@ -22802,6 +23071,33 @@ "pbf": "^3.2.1" } }, + "node_modules/vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "devOptional": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.8.tgz", + "integrity": "sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==", + "dev": true, + "dependencies": { + "@vue/language-core": "1.8.8", + "@vue/typescript": "1.8.8", + "semver": "^7.3.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -23906,8 +24202,8 @@ "postcss": "^8.4.27", "react": "^18.2.0", "react-dom": "^18.2.0", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0" + "zundo": "2.0.0-beta.12", + "zustand": "^4.3.2" }, "bin": { "studio": "lib/bin/studio.js" @@ -26114,6 +26410,8 @@ "react-tooltip": "^5.18.0", "tailwind-merge": "^1.8.1", "tailwindcss": "^3.3.3", + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -26137,221 +26435,14 @@ "jest": "^29.5.0", "jest-environment-jsdom": "^29.3.1", "resize-observer-polyfill": "^1.5.1", - "vite-plugin-svgr": "^3.2.0" + "rollup-plugin-visualizer": "^5.9.2", + "vite-plugin-css-injected-by-js": "^3.3.0", + "vite-plugin-dts": "^3.5.3" }, "peerDependencies": { "@yext/studio-plugin": "*" } }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz", - "integrity": "sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz", - "integrity": "sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz", - "integrity": "sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz", - "integrity": "sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz", - "integrity": "sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz", - "integrity": "sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz", - "integrity": "sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz", - "integrity": "sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/babel-preset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-7.0.0.tgz", - "integrity": "sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ==", - "dev": true, - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^7.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^7.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^7.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^7.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^7.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^7.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^7.0.0", - "@svgr/babel-plugin-transform-svg-component": "^7.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "packages/studio-ui/node_modules/@svgr/core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-7.0.0.tgz", - "integrity": "sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "^7.0.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "packages/studio-ui/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz", - "integrity": "sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "packages/studio-ui/node_modules/@svgr/plugin-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz", - "integrity": "sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "^7.0.0", - "@svgr/hast-util-to-babel-ast": "^7.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, "packages/studio-ui/node_modules/@types/node": { "version": "18.17.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.12.tgz", @@ -26394,18 +26485,6 @@ "postcss": "^8.1.0" } }, - "packages/studio-ui/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/studio-ui/node_modules/caniuse-lite": { "version": "1.0.30001525", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", @@ -26425,58 +26504,6 @@ } ] }, - "packages/studio-ui/node_modules/cosmiconfig": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.4.tgz", - "integrity": "sha512-SF+2P8+o/PTV05rgsAjDzL4OFdVXAulSfC/L19VaeVT7+tpOOSscCt2QLxDZ+CLxF2WOiq6y1K5asvs8qUJT/Q==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "packages/studio-ui/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "packages/studio-ui/node_modules/vite-plugin-svgr": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz", - "integrity": "sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.2", - "@svgr/core": "^7.0.0", - "@svgr/plugin-jsx": "^7.0.0" - }, - "peerDependencies": { - "vite": "^2.6.0 || 3 || 4" - } - }, "packages/studio/node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", diff --git a/packages/studio-plugin/src/parsers/ComponentTreeParser.ts b/packages/studio-plugin/src/parsers/ComponentTreeParser.ts index a2146e0f7..821726f0e 100644 --- a/packages/studio-plugin/src/parsers/ComponentTreeParser.ts +++ b/packages/studio-plugin/src/parsers/ComponentTreeParser.ts @@ -11,7 +11,8 @@ import { ComponentState, ComponentStateKind, ErrorComponentState, - StandardComponentState, + RepeaterState, + StandardOrModuleComponentState, } from "../types/ComponentState"; import { v4 } from "uuid"; import { FileMetadataKind, TypelessPropVal } from "../types"; @@ -71,13 +72,20 @@ export default class ComponentTreeParser { }; if (component.isKind(SyntaxKind.JsxExpression)) { - throw new Error( - `Jsx nodes of kind "${component.getKindName()}" are not supported for direct use` + - " in page files." + const { selfClosingElement, listExpression } = + StaticParsingHelpers.parseJsxExpression(component); + const parsedRepeaterElement = this.parseRepeaterElement( + defaultImports, + selfClosingElement, + listExpression ); + return { + ...commonComponentState, + ...parsedRepeaterElement, + }; } - if (!TypeGuards.isNotFragmentElement(component)) { + if (!ComponentTreeParser.isNotFragmentElement(component)) { return { ...commonComponentState, kind: ComponentStateKind.Fragment, @@ -98,12 +106,52 @@ export default class ComponentTreeParser { }; } + private static isNotFragmentElement( + element: JsxElement | JsxSelfClosingElement | JsxFragment + ): element is JsxElement | JsxSelfClosingElement { + if (element.isKind(SyntaxKind.JsxFragment)) { + return false; + } + if (element.isKind(SyntaxKind.JsxSelfClosingElement)) { + return true; + } + const name = StaticParsingHelpers.parseJsxElementName(element); + return !["Fragment", "React.Fragment"].includes(name); + } + + private parseRepeaterElement( + defaultImports: Record, + repeatedComponent: JsxSelfClosingElement, + listExpression: string + ): Omit { + const componentName = + StaticParsingHelpers.parseJsxElementName(repeatedComponent); + const parsedRepeatedComponent = this.parseElement( + repeatedComponent, + componentName, + defaultImports + ); + if (parsedRepeatedComponent.kind === ComponentStateKind.BuiltIn) { + throw new Error( + "Error parsing map expression: repetition of built-in components is not supported." + ); + } + return { + kind: ComponentStateKind.Repeater, + listExpression, + repeatedComponent: { + ...parsedRepeatedComponent, + componentName, + }, + }; + } + private parseElement( component: JsxElement | JsxSelfClosingElement, componentName: string, defaultImports: Record ): - | Pick + | Pick | Pick | Omit { const attributes: JsxAttributeLike[] = component.isKind( @@ -149,8 +197,12 @@ export default class ComponentTreeParser { props, }; } - const { metadataUUID, propShape } = fileMetadata; + const { kind: fileMetadataKind, metadataUUID, propShape } = fileMetadata; + const componentStateKind = + fileMetadataKind === FileMetadataKind.Module + ? ComponentStateKind.Module + : ComponentStateKind.Standard; const props = StaticParsingHelpers.parseJsxAttributes( attributes, propShape @@ -173,7 +225,7 @@ export default class ComponentTreeParser { } return { - kind: ComponentStateKind.Standard, + kind: componentStateKind, metadataUUID, props, }; diff --git a/packages/studio-plugin/src/utils/TypeGuards.ts b/packages/studio-plugin/src/utils/TypeGuards.ts index bf1aaf847..4bf46f816 100644 --- a/packages/studio-plugin/src/utils/TypeGuards.ts +++ b/packages/studio-plugin/src/utils/TypeGuards.ts @@ -1,24 +1,23 @@ -import { - JsxElement, - JsxFragment, - JsxSelfClosingElement, - SyntaxKind, -} from "ts-morph"; import { ComponentState, ComponentStateKind, + EditableComponentState, FileMetadata, + FileMetadataKind, + ModuleMetadata, + ModuleState, PropShape, PropType, PropVal, PropValueKind, PropValues, PropValueType, + RepeaterState, SiteSettingsShape, SiteSettingsValues, + StandardOrModuleComponentState, } from "../types"; -import StaticParsingHelpers from "../parsers/helpers/StaticParsingHelpers"; import { SiteSettingsExpression, StreamsDataExpression, @@ -159,17 +158,41 @@ export default class TypeGuards { return typeof value === "string" && value.startsWith("siteSettings."); } - static isNotFragmentElement( - element: JsxElement | JsxSelfClosingElement | JsxFragment - ): element is JsxElement | JsxSelfClosingElement { - if (element.isKind(SyntaxKind.JsxFragment)) { - return false; - } - if (element.isKind(SyntaxKind.JsxSelfClosingElement)) { - return true; - } - const name = StaticParsingHelpers.parseJsxElementName(element); - return !["Fragment", "React.Fragment"].includes(name); + static isModuleMetadata( + metadata?: FileMetadata | null + ): metadata is ModuleMetadata { + return metadata?.kind === FileMetadataKind.Module; + } + + static isModuleState( + componentState: ComponentState + ): componentState is ModuleState { + return componentState.kind === ComponentStateKind.Module; + } + + static isStandardOrModuleComponentState( + componentState: ComponentState + ): componentState is StandardOrModuleComponentState { + return ( + componentState.kind === ComponentStateKind.Module || + componentState.kind === ComponentStateKind.Standard + ); + } + + static isRepeaterState( + componentState: ComponentState + ): componentState is RepeaterState { + return componentState.kind === ComponentStateKind.Repeater; + } + + static isEditableComponentState( + componentState: ComponentState + ): componentState is EditableComponentState { + return ( + componentState.kind === ComponentStateKind.Module || + componentState.kind === ComponentStateKind.Standard || + componentState.kind === ComponentStateKind.Repeater + ); } static isSiteSettingsValues( diff --git a/packages/studio-ui/.gitignore b/packages/studio-ui/.gitignore new file mode 100644 index 000000000..10dcd67fb --- /dev/null +++ b/packages/studio-ui/.gitignore @@ -0,0 +1 @@ +stats.html \ No newline at end of file diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json index a23787f66..9d1ff776e 100644 --- a/packages/studio-ui/package.json +++ b/packages/studio-ui/package.json @@ -41,6 +41,8 @@ "react-tooltip": "^5.18.0", "tailwind-merge": "^1.8.1", "tailwindcss": "^3.3.3", + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -64,7 +66,9 @@ "jest": "^29.5.0", "jest-environment-jsdom": "^29.3.1", "resize-observer-polyfill": "^1.5.1", - "vite-plugin-svgr": "^3.2.0" + "rollup-plugin-visualizer": "^5.9.2", + "vite-plugin-css-injected-by-js": "^3.3.0", + "vite-plugin-dts": "^3.5.3" }, "peerDependencies": { "@yext/studio-plugin": "*" diff --git a/packages/studio-ui/src/components/FieldPicker/FieldDropdown.tsx b/packages/studio-ui/src/components/FieldPicker/FieldDropdown.tsx index a4a97db9f..101001f36 100644 --- a/packages/studio-ui/src/components/FieldPicker/FieldDropdown.tsx +++ b/packages/studio-ui/src/components/FieldPicker/FieldDropdown.tsx @@ -1,6 +1,6 @@ import { useCallback, MouseEvent, CSSProperties } from "react"; import { ReactComponent as VectorIcon } from "../../icons/vector.svg"; -import { startCase } from "lodash"; +import startCase from "lodash/startCase"; const listStyles: CSSProperties = { minWidth: "200px", diff --git a/packages/studio-ui/src/components/HighlightingContainer.tsx b/packages/studio-ui/src/components/HighlightingContainer.tsx index 2dd2a2884..024019472 100644 --- a/packages/studio-ui/src/components/HighlightingContainer.tsx +++ b/packages/studio-ui/src/components/HighlightingContainer.tsx @@ -1,4 +1,4 @@ -import { isEqual } from "lodash"; +import isEqual from "lodash/isEqual"; import { Component, PropsWithChildren, ReactInstance } from "react"; import DOMRectProperties from "../store/models/DOMRectProperties"; import useStudioStore from "../store/useStudioStore"; diff --git a/packages/studio-ui/src/components/PageSettingsButton/EntityPageModal.tsx b/packages/studio-ui/src/components/PageSettingsButton/EntityPageModal.tsx index 97e23ede2..4b143df31 100644 --- a/packages/studio-ui/src/components/PageSettingsButton/EntityPageModal.tsx +++ b/packages/studio-ui/src/components/PageSettingsButton/EntityPageModal.tsx @@ -12,7 +12,7 @@ import { StaticPageSettings } from "./StaticPageModal"; import { streamScopeFormData } from "../AddPageButton/StreamScopeCollector"; import PageDataValidator from "../../utils/PageDataValidator"; import { toast } from "react-toastify"; -import { isEqual } from "lodash"; +import isEqual from "lodash/isEqual"; type EntityPageSettings = StaticPageSettings & StreamScopeForm; diff --git a/packages/studio-ui/src/components/PreviewPanel.tsx b/packages/studio-ui/src/components/PreviewPanel.tsx index 2d782f12d..591182369 100644 --- a/packages/studio-ui/src/components/PreviewPanel.tsx +++ b/packages/studio-ui/src/components/PreviewPanel.tsx @@ -1,18 +1,52 @@ import { Dispatch, SetStateAction, useMemo } from "react"; import useStudioStore from "../store/useStudioStore"; +import usePreviewProps from "../hooks/usePreviewProps"; import ComponentTreePreview from "./ComponentTreePreview"; import useRawSiteSettings from "../hooks/useRawSiteSettings"; +import { ComponentStateHelpers, TypeGuards } from "@yext/studio-plugin"; +import get from "lodash/get"; import { ITooltip } from "react-tooltip"; export default function PreviewPanel(props: { setTooltipProps: Dispatch>; }) { const { setTooltipProps } = props; - const componentTree = useStudioStore((store) => - store.actions.getComponentTree() - ); + const [componentTree, moduleUUIDBeingEdited, getComponentState] = + useStudioStore((store) => [ + store.actions.getComponentTree(), + store.pages.moduleUUIDBeingEdited, + store.actions.getComponentState, + ]); const pageExpressionSources = usePageExpressionSources(); + + const state = moduleUUIDBeingEdited + ? getComponentState(componentTree, moduleUUIDBeingEdited) + : undefined; + const list = + state && TypeGuards.isRepeaterState(state) + ? get(pageExpressionSources, state.listExpression) + : undefined; + const item = Array.isArray(list) ? list[0] : undefined; + + const extractedState = + state && TypeGuards.isEditableComponentState(state) + ? ComponentStateHelpers.extractRepeatedState(state) + : undefined; + const parentPreviewProps = usePreviewProps( + extractedState, + pageExpressionSources, + item + ); + + const expressionSources = useMemo( + () => ({ + ...pageExpressionSources, + ...(moduleUUIDBeingEdited && { props: parentPreviewProps }), + }), + [pageExpressionSources, moduleUUIDBeingEdited, parentPreviewProps] + ); + if (!componentTree) { return null; } @@ -20,7 +54,7 @@ export default function PreviewPanel(props: { return ( ); diff --git a/packages/studio-ui/src/components/RepeaterPreview.tsx b/packages/studio-ui/src/components/RepeaterPreview.tsx new file mode 100644 index 000000000..61b60339c --- /dev/null +++ b/packages/studio-ui/src/components/RepeaterPreview.tsx @@ -0,0 +1,54 @@ +import { RepeaterState } from "@yext/studio-plugin"; +import get from "lodash/get"; +import { Dispatch, SetStateAction, useCallback, useMemo } from "react"; +import { ExpressionSources } from "../utils/getPropsForPreview"; +import ComponentPreview from "./ComponentPreview"; +import { ITooltip } from "react-tooltip"; + +interface RepeaterPreviewProps { + repeaterState: RepeaterState; + expressionSources: ExpressionSources; + setTooltipProps: Dispatch>; +} + +/** + * Renders the preview for a Repeater component. + */ +export default function RepeaterPreview({ + repeaterState, + expressionSources, + setTooltipProps, +}: RepeaterPreviewProps): JSX.Element | null { + const { repeatedComponent, listExpression } = repeaterState; + const repeatedElementState = useMemo( + () => ({ + ...repeatedComponent, + uuid: repeaterState.uuid, + parentUUID: repeaterState.parentUUID, + }), + [repeatedComponent, repeaterState] + ); + + const renderRepeatedElement = useCallback( + (item: unknown, key: number | string) => ( + + ), + [repeatedElementState, expressionSources, setTooltipProps] + ); + + const list = get(expressionSources, listExpression) as unknown; + if (!Array.isArray(list)) { + console.warn( + `Unable to render list repeater. Expected "${listExpression}" to reference an array in `, + expressionSources + ); + return null; + } + return <>{list.map(renderRepeatedElement)}; +} diff --git a/packages/studio-ui/src/components/SiteSettingsPanel.tsx b/packages/studio-ui/src/components/SiteSettingsPanel.tsx index 02133c554..e2725c159 100644 --- a/packages/studio-ui/src/components/SiteSettingsPanel.tsx +++ b/packages/studio-ui/src/components/SiteSettingsPanel.tsx @@ -11,7 +11,7 @@ import { SiteSettingsVal, } from "@yext/studio-plugin"; import React, { useCallback } from "react"; -import { startCase } from "lodash"; +import startCase from "lodash/startCase"; import useStudioStore from "../store/useStudioStore"; import PropInput from "./PropInput"; diff --git a/packages/studio-ui/src/components/common/ColorPicker.tsx b/packages/studio-ui/src/components/common/ColorPicker.tsx index 09f44fbb8..0e25a6ce8 100644 --- a/packages/studio-ui/src/components/common/ColorPicker.tsx +++ b/packages/studio-ui/src/components/common/ColorPicker.tsx @@ -1,5 +1,5 @@ import { ChangeEvent, useEffect, useMemo, useState } from "react"; -import { debounce } from "lodash"; +import debounce from "lodash/debounce"; import PropValueHelpers from "../../utils/PropValueHelpers"; import { PropValueKind, PropValueType } from "@yext/studio-plugin"; diff --git a/packages/studio-ui/src/hooks/useFuncWithZundoBatching.tsx b/packages/studio-ui/src/hooks/useFuncWithZundoBatching.tsx index f4bb997f2..40bc8e7ac 100644 --- a/packages/studio-ui/src/hooks/useFuncWithZundoBatching.tsx +++ b/packages/studio-ui/src/hooks/useFuncWithZundoBatching.tsx @@ -1,6 +1,6 @@ import { useCallback, useMemo } from "react"; import useTemporalStore from "../store/useTemporalStore"; -import { debounce } from "lodash"; +import debounce from "lodash/debounce"; /** * Updates a function so it doesn't trigger Zundo store updates until after a diff --git a/packages/studio-ui/src/hooks/useHasChanges.ts b/packages/studio-ui/src/hooks/useHasChanges.ts index f8262284b..22811178b 100644 --- a/packages/studio-ui/src/hooks/useHasChanges.ts +++ b/packages/studio-ui/src/hooks/useHasChanges.ts @@ -1,5 +1,5 @@ import useStudioStore from "../store/useStudioStore"; -import { isEqual } from "lodash"; +import isEqual from "lodash/isEqual"; export default function useHasChanges() { // TODO(SLAP-2556) Refactor pendingChanges to use PreviousSaveSlice diff --git a/packages/studio-ui/src/index.ts b/packages/studio-ui/src/index.ts index 26c3046be..3fe76c509 100644 --- a/packages/studio-ui/src/index.ts +++ b/packages/studio-ui/src/index.ts @@ -1,2 +1,3 @@ export { default as App } from "./App"; export { default as hotReloadStore } from "./store/hotReloadStore"; +export { StudioHMRUpdateID } from "@yext/studio-plugin"; diff --git a/packages/studio-ui/src/store/StudioActions.ts b/packages/studio-ui/src/store/StudioActions.ts index 25b84da39..11f832796 100644 --- a/packages/studio-ui/src/store/StudioActions.ts +++ b/packages/studio-ui/src/store/StudioActions.ts @@ -9,7 +9,7 @@ import { import FileMetadataSlice from "./models/slices/FileMetadataSlice"; import PageSlice from "./models/slices/PageSlice"; import sendMessage from "../messaging/sendMessage"; -import { cloneDeep } from "lodash"; +import cloneDeep from "lodash/cloneDeep"; import SiteSettingsSlice from "./models/slices/SiteSettingsSlice"; import PreviousSaveSlice from "./models/slices/PreviousSaveSlice"; import StudioConfigSlice from "./models/slices/StudioConfigSlice"; diff --git a/packages/studio-ui/src/store/StudioActions/GenerateTestDataAction.ts b/packages/studio-ui/src/store/StudioActions/GenerateTestDataAction.ts index a620de853..98dc1eeaa 100644 --- a/packages/studio-ui/src/store/StudioActions/GenerateTestDataAction.ts +++ b/packages/studio-ui/src/store/StudioActions/GenerateTestDataAction.ts @@ -10,7 +10,7 @@ import { import { Stream } from "@yext/pages"; import PageSlice from "../models/slices/PageSlice"; import sendMessage from "../../messaging/sendMessage"; -import { isEqual } from "lodash"; +import isEqual from "lodash/isEqual"; import StudioActions from "../StudioActions"; export default class GenerateTestDataAction { diff --git a/packages/studio-ui/src/store/createModuleAction.ts b/packages/studio-ui/src/store/createModuleAction.ts new file mode 100644 index 000000000..16f810493 --- /dev/null +++ b/packages/studio-ui/src/store/createModuleAction.ts @@ -0,0 +1,122 @@ +import { StudioStore } from "./models/StudioStore"; +import path from "path-browserify"; +import { + ComponentState, + ComponentTreeHelpers, + FileMetadataKind, + ModuleMetadata, + PropValueType, +} from "@yext/studio-plugin"; +import differenceWith from "lodash/differenceWith"; +import isEqual from "lodash/isEqual"; +import { v4 } from "uuid"; + +export default function getCreateModuleAction( + get: () => StudioStore +): StudioStore["createModule"] { + function throwIfInvalidFilepath(filepath: string) { + const modulesFolder = get().studioConfig.paths.modules; + const moduleName = path.basename(filepath, ".tsx"); + if (!filepath.startsWith(modulesFolder)) { + throw new Error( + `Error creating module: modulePath is invalid: "${path.relative( + modulesFolder, + filepath + )}".` + ); + } else if (moduleName.charAt(0) !== moduleName.charAt(0).toUpperCase()) { + throw new Error( + "Error creating module: Module names must start with an uppercase letter." + ); + } else if ( + Object.values(get().fileMetadatas.UUIDToFileMetadata).some( + (fileMetadata) => + path.basename(fileMetadata.filepath, ".tsx") === moduleName + ) + ) { + throw new Error( + `Error creating module: module name "${moduleName}" is already used.` + ); + } + } + + function createModuleMetadata( + filepath: string, + descendants: ComponentState[], + activeComponentState: ComponentState + ): ModuleMetadata { + const moduleMetadata: ModuleMetadata = { + kind: FileMetadataKind.Module, + componentTree: [ + { ...activeComponentState, parentUUID: undefined }, + ...descendants, + ], + metadataUUID: v4(), + filepath, + propShape: {}, + }; + if (get().studioConfig.isPagesJSRepo) { + moduleMetadata.propShape = { + document: { + type: PropValueType.Record, + recordKey: "string", + recordValue: "any", + required: true, + }, + }; + } + return moduleMetadata; + } + + function createModule( + filepath: string, + componentTree: ComponentState[], + activeComponentState: ComponentState + ) { + const descendants = ComponentTreeHelpers.getDescendants( + activeComponentState, + componentTree + ); + const moduleMetadata: ModuleMetadata = createModuleMetadata( + filepath, + descendants, + activeComponentState + ); + get().fileMetadatas.setFileMetadata( + moduleMetadata.metadataUUID, + moduleMetadata + ); + const moduleState = get().actions.createComponentState(moduleMetadata); + const updatedPageComponentTree: ComponentState[] = differenceWith( + componentTree, + descendants, + isEqual + ).map((c) => { + if (c.uuid === activeComponentState.uuid) { + return { + ...moduleState, + parentUUID: c.parentUUID, + }; + } + return c; + }); + get().actions.updateComponentTree(updatedPageComponentTree); + get().pages.setActiveComponentUUID(moduleState.uuid); + } + + return (modulePath: string) => { + if (!modulePath) { + throw new Error("Error creating module: a modulePath is required."); + } + const modulesFolder = get().studioConfig.paths.modules; + const filepath = path.join(modulesFolder, modulePath + ".tsx"); + throwIfInvalidFilepath(filepath); + + const componentTree = get().actions.getComponentTree() ?? []; + const activeComponentState = get().actions.getActiveComponentState(); + if (!activeComponentState) { + throw new Error("Tried to create module without active component."); + } + createModule(filepath, componentTree, activeComponentState); + }; +} diff --git a/packages/studio-ui/src/store/slices/createPageSlice.ts b/packages/studio-ui/src/store/slices/createPageSlice.ts index 7482f159b..872a242b6 100644 --- a/packages/studio-ui/src/store/slices/createPageSlice.ts +++ b/packages/studio-ui/src/store/slices/createPageSlice.ts @@ -4,7 +4,7 @@ import { PageState, StreamScope, } from "@yext/studio-plugin"; -import { isEqual } from "lodash"; +import isEqual from "lodash/isEqual"; import initialStudioData from "virtual_yext-studio"; import DOMRectProperties from "../models/DOMRectProperties"; import PageSlice, { PageSliceStates } from "../models/slices/PageSlice"; diff --git a/packages/studio-ui/src/store/zundoMiddleware.ts b/packages/studio-ui/src/store/zundoMiddleware.ts index 3ee3e1ae7..90775fd10 100644 --- a/packages/studio-ui/src/store/zundoMiddleware.ts +++ b/packages/studio-ui/src/store/zundoMiddleware.ts @@ -1,7 +1,7 @@ import PageSlice from "./models/slices/PageSlice"; import SiteSettingSlice from "./models/slices/SiteSettingsSlice"; import { StudioStore } from "./models/StudioStore"; -import { isEqual } from "lodash"; +import isEqual from "lodash/isEqual"; import { ZundoOptions, temporal } from "zundo"; import { TemporalStudioStore } from "./useTemporalStore"; import { StateCreator } from "zustand"; diff --git a/packages/studio-ui/src/utils/getPropsForPreview.ts b/packages/studio-ui/src/utils/getPropsForPreview.ts index a9457b5a9..cb17535ca 100644 --- a/packages/studio-ui/src/utils/getPropsForPreview.ts +++ b/packages/studio-ui/src/utils/getPropsForPreview.ts @@ -8,7 +8,7 @@ import { PropVal, PropType, } from "@yext/studio-plugin"; -import { get } from "lodash"; +import get from "lodash/get"; import TemplateExpressionFormatter from "./TemplateExpressionFormatter"; /** diff --git a/packages/studio-ui/vite.config.ts b/packages/studio-ui/vite.config.ts new file mode 100644 index 000000000..1c23a371f --- /dev/null +++ b/packages/studio-ui/vite.config.ts @@ -0,0 +1,23 @@ +// vite.config.js +import { resolve } from 'path' +import { defineConfig, PluginOption } from 'vite' +import svgr from "vite-plugin-svgr"; +import { visualizer } from "rollup-plugin-visualizer"; +import dts from 'vite-plugin-dts' +import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' + +export default defineConfig({ + plugins: [svgr(), dts(), cssInjectedByJsPlugin(), visualizer() as PluginOption], + build: { + outDir: 'lib', + sourcemap: true, + lib: { + entry: resolve(__dirname, 'src/index.ts'), + formats: ['es'], + fileName: 'src/index', + }, + rollupOptions: { + external: ['virtual_yext-studio-git-data', 'virtual_yext-studio', '@pathToUserProjectRoot/tailwind.config', 'react', 'react-dom', 'react/jsx-runtime'], + }, + }, +}) \ No newline at end of file diff --git a/packages/studio/src/main.tsx b/packages/studio/src/main.tsx index a3559bc9a..14484cffb 100644 --- a/packages/studio/src/main.tsx +++ b/packages/studio/src/main.tsx @@ -1,7 +1,7 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import { App, hotReloadStore } from "@yext/studio-ui"; -import { StudioHMRPayload, StudioHMRUpdateID } from "@yext/studio-plugin"; +import { App, hotReloadStore, StudioHMRUpdateID } from "@yext/studio-ui"; +import type { StudioHMRPayload } from "@yext/studio-plugin"; import "./tailwind-directives.css"; if (import.meta.hot) { From 50bfd2025c7b1ec07749a48f276a558e44c64230 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Thu, 14 Sep 2023 14:32:40 -0400 Subject: [PATCH 21/24] squash --- .github/workflows/run-tests.yml | 1 + package-lock.json | 1362 ++++++++++++----- .../src/parsers/ComponentTreeParser.ts | 56 +- .../studio-plugin/src/utils/TypeGuards.ts | 43 - packages/studio-ui/.gitignore | 2 +- packages/studio-ui/.size-limit.cjs | 7 + packages/studio-ui/package.json | 7 +- .../studio-ui/src/components/PreviewPanel.tsx | 42 +- .../src/components/RepeaterPreview.tsx | 54 - .../studio-ui/src/store/createModuleAction.ts | 122 -- packages/studio-ui/vite.config.ts | 34 +- 11 files changed, 1001 insertions(+), 729 deletions(-) create mode 100644 packages/studio-ui/.size-limit.cjs delete mode 100644 packages/studio-ui/src/components/RepeaterPreview.tsx delete mode 100644 packages/studio-ui/src/store/createModuleAction.ts diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index e5bb5e9b9..ca0d1ea7a 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -34,3 +34,4 @@ jobs: - run: npm run build - run: npm run build-test-site -w=apps/test-site - run: npm run typecheck-jest + - run: npm run size-limit -w=packages/studio-ui diff --git a/package-lock.json b/package-lock.json index 25ebc440f..388e11b05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -503,20 +503,20 @@ } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.17.tgz", + "integrity": "sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.17", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.17", + "@babel/types": "^7.22.17", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -573,11 +573,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.15", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -623,12 +623,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -777,26 +777,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@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.5" + "@babel/helper-validator-identifier": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -899,17 +899,17 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "engines": { "node": ">=6.9.0" } @@ -929,13 +929,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1019,9 +1019,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -2664,31 +2664,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", + "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.17", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2705,12 +2705,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", + "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3676,16 +3676,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.4.tgz", - "integrity": "sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -3693,15 +3693,15 @@ } }, "node_modules/@jest/core": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.4.tgz", - "integrity": "sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^29.6.4", - "@jest/reporters": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -3709,21 +3709,21 @@ "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-resolve-dependencies": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.4", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -3752,9 +3752,9 @@ } }, "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -3772,37 +3772,37 @@ "dev": true }, "node_modules/@jest/environment": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.4.tgz", - "integrity": "sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.4", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^29.6.4", - "jest-snapshot": "^29.6.4" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.4.tgz", - "integrity": "sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3" @@ -3812,47 +3812,47 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.4.tgz", - "integrity": "sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.4.tgz", - "integrity": "sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.4.tgz", - "integrity": "sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", @@ -3866,9 +3866,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -3968,12 +3968,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.4.tgz", - "integrity": "sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "@jest/console": "^29.6.4", + "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -3983,14 +3983,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz", - "integrity": "sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.4", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -3998,9 +3998,9 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.4.tgz", - "integrity": "sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -4011,9 +4011,9 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -5174,6 +5174,54 @@ "@sinonjs/commons": "^2.0.0" } }, + "node_modules/@size-limit/file": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-9.0.0.tgz", + "integrity": "sha512-oM2UaH2FRq4q22k+R+P6xCpzET10T94LFdSjb9svVu/vOD7NaB9LGcG6se8TW1BExXiyXO4GEhLsBt3uMKM3qA==", + "dev": true, + "dependencies": { + "semver": "7.5.4" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "size-limit": "9.0.0" + } + }, + "node_modules/@size-limit/file/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@size-limit/file/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@size-limit/file/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", @@ -6602,9 +6650,9 @@ } }, "node_modules/@vue/language-core": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.8.tgz", - "integrity": "sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.11.tgz", + "integrity": "sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==", "dev": true, "dependencies": { "@volar/language-core": "~1.10.0", @@ -6665,13 +6713,13 @@ "dev": true }, "node_modules/@vue/typescript": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.8.tgz", - "integrity": "sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.11.tgz", + "integrity": "sha512-skUmMDiPUUtu1flPmf2YybF+PX8IzBtMioQOaNn6Ck/RhdrPJGj1AX/7s3Buf9G6ln+/KHR1XQuti/FFxw5XVA==", "dev": true, "dependencies": { "@volar/typescript": "~1.10.0", - "@vue/language-core": "1.8.8" + "@vue/language-core": "1.8.11" } }, "node_modules/@webassemblyjs/ast": { @@ -7787,12 +7835,12 @@ } }, "node_modules/babel-jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", - "integrity": "sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "dependencies": { - "@jest/transform": "^29.6.4", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.6.3", @@ -8427,6 +8475,15 @@ "node": ">= 0.8" } }, + "node_modules/bytes-iec": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", + "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -9146,6 +9203,27 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -10223,9 +10301,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.508", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", - "integrity": "sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==" + "version": "1.4.520", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.520.tgz", + "integrity": "sha512-Frfus2VpYADsrh1lB3v/ft/WVFlVzOIm+Q0p7U7VqHI6qr7NWHYKe+Wif3W50n7JAFoBsWVsoU0+qDks6WQ60g==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -11596,16 +11674,16 @@ } }, "node_modules/expect": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", - "integrity": "sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.4", + "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3" + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13611,15 +13689,15 @@ } }, "node_modules/jest": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.4.tgz", - "integrity": "sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^29.6.4", + "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.4" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -13637,13 +13715,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { "execa": "^5.0.0", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -13651,28 +13729,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.4.tgz", - "integrity": "sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/expect": "^29.6.4", - "@jest/test-result": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -13708,9 +13786,9 @@ } }, "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -13728,22 +13806,21 @@ "dev": true }, "node_modules/jest-cli": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.4.tgz", - "integrity": "sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^29.6.4", - "@jest/test-result": "^29.6.4", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -13762,31 +13839,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.4.tgz", - "integrity": "sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.4", + "@jest/test-sequencer": "^29.7.0", "@jest/types": "^29.6.3", - "babel-jest": "^29.6.4", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.4", - "jest-environment-node": "^29.6.4", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", "jest-get-type": "^29.6.3", "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runner": "^29.6.4", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -13819,9 +13896,9 @@ } }, "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -13839,15 +13916,15 @@ "dev": true }, "node_modules/jest-diff": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.4.tgz", - "integrity": "sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13866,9 +13943,9 @@ } }, "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -13886,9 +13963,9 @@ "dev": true }, "node_modules/jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -13898,16 +13975,16 @@ } }, "node_modules/jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13926,9 +14003,9 @@ } }, "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -13973,17 +14050,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.4.tgz", - "integrity": "sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13999,9 +14076,9 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.4.tgz", - "integrity": "sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "devOptional": true, "dependencies": { "@jest/types": "^29.6.3", @@ -14011,8 +14088,8 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.4", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -14519,13 +14596,13 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14544,9 +14621,9 @@ } }, "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -14564,15 +14641,15 @@ "dev": true }, "node_modules/jest-matcher-utils": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz", - "integrity": "sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.4", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14591,9 +14668,9 @@ } }, "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -14611,9 +14688,9 @@ "dev": true }, "node_modules/jest-message-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -14622,7 +14699,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -14643,9 +14720,9 @@ } }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -14663,14 +14740,14 @@ "dev": true }, "node_modules/jest-mock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", - "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.3" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14702,17 +14779,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.4.tgz", - "integrity": "sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "devOptional": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -14722,43 +14799,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz", - "integrity": "sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.4" + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.4.tgz", - "integrity": "sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^29.6.4", - "@jest/environment": "^29.6.4", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.4", - "jest-haste-map": "^29.6.4", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-runtime": "^29.6.4", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.4", - "jest-worker": "^29.6.4", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -14767,17 +14844,17 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.4.tgz", - "integrity": "sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.4", - "@jest/fake-timers": "^29.6.4", - "@jest/globals": "^29.6.4", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", @@ -14785,13 +14862,13 @@ "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.4", - "jest-snapshot": "^29.6.4", - "jest-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -14821,9 +14898,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.4.tgz", - "integrity": "sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -14831,20 +14908,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.4", - "@jest/transform": "^29.6.4", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.4", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.4", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.4", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -14876,9 +14953,9 @@ } }, "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -14917,9 +14994,9 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", - "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "devOptional": true, "dependencies": { "@jest/types": "^29.6.3", @@ -14934,9 +15011,9 @@ } }, "node_modules/jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "devOptional": true, "dependencies": { "@jest/types": "^29.6.3", @@ -14944,7 +15021,7 @@ "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -14975,9 +15052,9 @@ } }, "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "devOptional": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -14995,18 +15072,18 @@ "devOptional": true }, "node_modules/jest-watcher": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.4.tgz", - "integrity": "sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.4", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -15014,13 +15091,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz", - "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "devOptional": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -15859,6 +15936,15 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanospinner": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.1.0.tgz", + "integrity": "sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -19995,9 +20081,9 @@ } }, "node_modules/react-tooltip": { - "version": "5.21.1", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.21.1.tgz", - "integrity": "sha512-wJqF/yzK1wuJuy5/zAkVErFA609fVv1ZukhGjw44PcMvg9wL0jomnpQyz3qH1H7TWjz/wqO/OMc3ipQNjZ8zYg==", + "version": "5.21.3", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.21.3.tgz", + "integrity": "sha512-z3Q+Uka4D6uYxfsssPqfx1W8vw7NIHyC2ZMq+NJkWg4EpUD3w7Fwz/o+dezyUQMCHL7nO/2sFbtWIrkyxktq2Q==", "dependencies": { "@floating-ui/dom": "^1.0.0", "classnames": "^2.3.0" @@ -20976,6 +21062,26 @@ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "node_modules/size-limit": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-9.0.0.tgz", + "integrity": "sha512-DrA7o2DeRN3s+vwCA9nn7Ck9Y4pn9t0GNUwQRpKqBtBmNkl6LA2s/NlNCdtKHrEkRTeYA1ZQ65mnYveo9rUqgA==", + "dev": true, + "dependencies": { + "bytes-iec": "^3.1.1", + "chokidar": "^3.5.3", + "globby": "^11.1.0", + "lilconfig": "^2.1.0", + "nanospinner": "^1.1.0", + "picocolors": "^1.0.0" + }, + "bin": { + "size-limit": "bin.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -23082,13 +23188,13 @@ } }, "node_modules/vue-tsc": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.8.tgz", - "integrity": "sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.11.tgz", + "integrity": "sha512-BzfiMdPqDHBlysx4g26NkfVHSQwGD/lTRausmxN9sFyjXz34OWfsbkh0YsVkX84Hu65In1fFlxHiG39Tr4Vojg==", "dev": true, "dependencies": { - "@vue/language-core": "1.8.8", - "@vue/typescript": "1.8.8", + "@vue/language-core": "1.8.11", + "@vue/typescript": "1.8.11", "semver": "^7.3.8" }, "bin": { @@ -24202,8 +24308,8 @@ "postcss": "^8.4.27", "react": "^18.2.0", "react-dom": "^18.2.0", - "zundo": "2.0.0-beta.12", - "zustand": "^4.3.2" + "vite": "^4.4.7", + "vite-plugin-svgr": "^2.4.0" }, "bin": { "studio": "lib/bin/studio.js" @@ -26388,7 +26494,6 @@ } }, "packages/studio-ui": { - "name": "@yext/studio-ui", "version": "0.22.0", "dependencies": { "@dhmk/zustand-lens": "^2.0.5", @@ -26420,6 +26525,7 @@ "@babel/plugin-syntax-flow": "^7.18.6", "@babel/plugin-transform-react-jsx": "^7.19.0", "@rollup/plugin-typescript": "^10.0.1", + "@size-limit/file": "^9.0.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", @@ -26436,6 +26542,7 @@ "jest-environment-jsdom": "^29.3.1", "resize-observer-polyfill": "^1.5.1", "rollup-plugin-visualizer": "^5.9.2", + "size-limit": "^9.0.0", "vite-plugin-css-injected-by-js": "^3.3.0", "vite-plugin-dts": "^3.5.3" }, @@ -26444,9 +26551,9 @@ } }, "packages/studio-ui/node_modules/@types/node": { - "version": "18.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.12.tgz", - "integrity": "sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==", + "version": "18.17.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", + "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==", "dev": true }, "packages/studio-ui/node_modules/autoprefixer": { @@ -26486,9 +26593,9 @@ } }, "packages/studio-ui/node_modules/caniuse-lite": { - "version": "1.0.30001525", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", - "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", + "version": "1.0.30001534", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", + "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==", "funding": [ { "type": "opencollective", @@ -26504,66 +26611,501 @@ } ] }, - "packages/studio/node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true + "packages/studio/node_modules/@esbuild/android-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", + "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "packages/studio/node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "packages/studio/node_modules/@esbuild/android-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", + "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=12" } }, - "packages/studio/node_modules/caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "packages/studio/node_modules/@esbuild/android-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", + "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", + "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/darwin-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", + "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", + "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", + "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", + "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", + "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", + "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-loong64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", + "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", + "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", + "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", + "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-s390x": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", + "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/linux-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", + "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", + "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", + "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/sunos-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", + "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/win32-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", + "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/win32-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", + "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@esbuild/win32-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", + "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "packages/studio/node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "devOptional": true + }, + "packages/studio/node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "packages/studio/node_modules/caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "packages/studio/node_modules/esbuild": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", + "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.17", + "@esbuild/android-arm64": "0.18.17", + "@esbuild/android-x64": "0.18.17", + "@esbuild/darwin-arm64": "0.18.17", + "@esbuild/darwin-x64": "0.18.17", + "@esbuild/freebsd-arm64": "0.18.17", + "@esbuild/freebsd-x64": "0.18.17", + "@esbuild/linux-arm": "0.18.17", + "@esbuild/linux-arm64": "0.18.17", + "@esbuild/linux-ia32": "0.18.17", + "@esbuild/linux-loong64": "0.18.17", + "@esbuild/linux-mips64el": "0.18.17", + "@esbuild/linux-ppc64": "0.18.17", + "@esbuild/linux-riscv64": "0.18.17", + "@esbuild/linux-s390x": "0.18.17", + "@esbuild/linux-x64": "0.18.17", + "@esbuild/netbsd-x64": "0.18.17", + "@esbuild/openbsd-x64": "0.18.17", + "@esbuild/sunos-x64": "0.18.17", + "@esbuild/win32-arm64": "0.18.17", + "@esbuild/win32-ia32": "0.18.17", + "@esbuild/win32-x64": "0.18.17" + } + }, + "packages/studio/node_modules/rollup": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.0.tgz", + "integrity": "sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "packages/studio/node_modules/vite": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", + "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.26", + "rollup": "^3.25.2" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "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 + } + } } } } diff --git a/packages/studio-plugin/src/parsers/ComponentTreeParser.ts b/packages/studio-plugin/src/parsers/ComponentTreeParser.ts index 821726f0e..ee32a6da5 100644 --- a/packages/studio-plugin/src/parsers/ComponentTreeParser.ts +++ b/packages/studio-plugin/src/parsers/ComponentTreeParser.ts @@ -11,15 +11,13 @@ import { ComponentState, ComponentStateKind, ErrorComponentState, - RepeaterState, - StandardOrModuleComponentState, + StandardComponentState, } from "../types/ComponentState"; import { v4 } from "uuid"; import { FileMetadataKind, TypelessPropVal } from "../types"; import StudioSourceFileParser from "./StudioSourceFileParser"; import StaticParsingHelpers from "./helpers/StaticParsingHelpers"; -import TypeGuards from "../utils/TypeGuards"; -import ParsingOrchestrator from "../orchestrators/ParsingOrchestrator"; +import ParsingOrchestrator from "../ParsingOrchestrator"; import MissingPropsChecker from "./MissingPropsChecker"; export type GetFileMetadata = ParsingOrchestrator["getFileMetadata"]; @@ -72,17 +70,10 @@ export default class ComponentTreeParser { }; if (component.isKind(SyntaxKind.JsxExpression)) { - const { selfClosingElement, listExpression } = - StaticParsingHelpers.parseJsxExpression(component); - const parsedRepeaterElement = this.parseRepeaterElement( - defaultImports, - selfClosingElement, - listExpression + throw new Error( + `Jsx nodes of kind "${component.getKindName()}" are not supported for direct use` + + " in page files." ); - return { - ...commonComponentState, - ...parsedRepeaterElement, - }; } if (!ComponentTreeParser.isNotFragmentElement(component)) { @@ -119,39 +110,12 @@ export default class ComponentTreeParser { return !["Fragment", "React.Fragment"].includes(name); } - private parseRepeaterElement( - defaultImports: Record, - repeatedComponent: JsxSelfClosingElement, - listExpression: string - ): Omit { - const componentName = - StaticParsingHelpers.parseJsxElementName(repeatedComponent); - const parsedRepeatedComponent = this.parseElement( - repeatedComponent, - componentName, - defaultImports - ); - if (parsedRepeatedComponent.kind === ComponentStateKind.BuiltIn) { - throw new Error( - "Error parsing map expression: repetition of built-in components is not supported." - ); - } - return { - kind: ComponentStateKind.Repeater, - listExpression, - repeatedComponent: { - ...parsedRepeatedComponent, - componentName, - }, - }; - } - private parseElement( component: JsxElement | JsxSelfClosingElement, componentName: string, defaultImports: Record ): - | Pick + | Pick | Pick | Omit { const attributes: JsxAttributeLike[] = component.isKind( @@ -197,12 +161,8 @@ export default class ComponentTreeParser { props, }; } - const { kind: fileMetadataKind, metadataUUID, propShape } = fileMetadata; + const { metadataUUID, propShape } = fileMetadata; - const componentStateKind = - fileMetadataKind === FileMetadataKind.Module - ? ComponentStateKind.Module - : ComponentStateKind.Standard; const props = StaticParsingHelpers.parseJsxAttributes( attributes, propShape @@ -225,7 +185,7 @@ export default class ComponentTreeParser { } return { - kind: componentStateKind, + kind: ComponentStateKind.Standard, metadataUUID, props, }; diff --git a/packages/studio-plugin/src/utils/TypeGuards.ts b/packages/studio-plugin/src/utils/TypeGuards.ts index 4bf46f816..496e15f30 100644 --- a/packages/studio-plugin/src/utils/TypeGuards.ts +++ b/packages/studio-plugin/src/utils/TypeGuards.ts @@ -1,21 +1,15 @@ import { ComponentState, ComponentStateKind, - EditableComponentState, FileMetadata, - FileMetadataKind, - ModuleMetadata, - ModuleState, PropShape, PropType, PropVal, PropValueKind, PropValues, PropValueType, - RepeaterState, SiteSettingsShape, SiteSettingsValues, - StandardOrModuleComponentState, } from "../types"; import { @@ -158,43 +152,6 @@ export default class TypeGuards { return typeof value === "string" && value.startsWith("siteSettings."); } - static isModuleMetadata( - metadata?: FileMetadata | null - ): metadata is ModuleMetadata { - return metadata?.kind === FileMetadataKind.Module; - } - - static isModuleState( - componentState: ComponentState - ): componentState is ModuleState { - return componentState.kind === ComponentStateKind.Module; - } - - static isStandardOrModuleComponentState( - componentState: ComponentState - ): componentState is StandardOrModuleComponentState { - return ( - componentState.kind === ComponentStateKind.Module || - componentState.kind === ComponentStateKind.Standard - ); - } - - static isRepeaterState( - componentState: ComponentState - ): componentState is RepeaterState { - return componentState.kind === ComponentStateKind.Repeater; - } - - static isEditableComponentState( - componentState: ComponentState - ): componentState is EditableComponentState { - return ( - componentState.kind === ComponentStateKind.Module || - componentState.kind === ComponentStateKind.Standard || - componentState.kind === ComponentStateKind.Repeater - ); - } - static isSiteSettingsValues( propValues: PropValues ): propValues is SiteSettingsValues { diff --git a/packages/studio-ui/.gitignore b/packages/studio-ui/.gitignore index 10dcd67fb..c04306b46 100644 --- a/packages/studio-ui/.gitignore +++ b/packages/studio-ui/.gitignore @@ -1 +1 @@ -stats.html \ No newline at end of file +stats.html diff --git a/packages/studio-ui/.size-limit.cjs b/packages/studio-ui/.size-limit.cjs new file mode 100644 index 000000000..2e0d4b7ba --- /dev/null +++ b/packages/studio-ui/.size-limit.cjs @@ -0,0 +1,7 @@ +module.exports = [ + { + path: "lib/src/index.js", + limit: "700 kB", + gzip: false, + }, +]; diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json index 9d1ff776e..1c4a2ee32 100644 --- a/packages/studio-ui/package.json +++ b/packages/studio-ui/package.json @@ -17,9 +17,10 @@ "scripts": { "dev": "npm run copy-svg && tsc --watch --preserveWatchOutput -p tsconfig.json", "copy-svg": "npx copyfiles \"src/**/*.svg\" lib", - "build": "rimraf lib && npm run copy-svg && tsc -p tsconfig.json", + "build": "vite build", "test": "jest", - "typecheck-jest": "npx tsc -p tests/tsconfig.json" + "typecheck-jest": "npx tsc -p tests/tsconfig.json", + "size-limit": "size-limit" }, "dependencies": { "@dhmk/zustand-lens": "^2.0.5", @@ -51,6 +52,7 @@ "@babel/plugin-syntax-flow": "^7.18.6", "@babel/plugin-transform-react-jsx": "^7.19.0", "@rollup/plugin-typescript": "^10.0.1", + "@size-limit/file": "^9.0.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", @@ -67,6 +69,7 @@ "jest-environment-jsdom": "^29.3.1", "resize-observer-polyfill": "^1.5.1", "rollup-plugin-visualizer": "^5.9.2", + "size-limit": "^9.0.0", "vite-plugin-css-injected-by-js": "^3.3.0", "vite-plugin-dts": "^3.5.3" }, diff --git a/packages/studio-ui/src/components/PreviewPanel.tsx b/packages/studio-ui/src/components/PreviewPanel.tsx index 591182369..2d782f12d 100644 --- a/packages/studio-ui/src/components/PreviewPanel.tsx +++ b/packages/studio-ui/src/components/PreviewPanel.tsx @@ -1,52 +1,18 @@ import { Dispatch, SetStateAction, useMemo } from "react"; import useStudioStore from "../store/useStudioStore"; -import usePreviewProps from "../hooks/usePreviewProps"; import ComponentTreePreview from "./ComponentTreePreview"; import useRawSiteSettings from "../hooks/useRawSiteSettings"; -import { ComponentStateHelpers, TypeGuards } from "@yext/studio-plugin"; -import get from "lodash/get"; import { ITooltip } from "react-tooltip"; export default function PreviewPanel(props: { setTooltipProps: Dispatch>; }) { const { setTooltipProps } = props; - const [componentTree, moduleUUIDBeingEdited, getComponentState] = - useStudioStore((store) => [ - store.actions.getComponentTree(), - store.pages.moduleUUIDBeingEdited, - store.actions.getComponentState, - ]); - - const pageExpressionSources = usePageExpressionSources(); - - const state = moduleUUIDBeingEdited - ? getComponentState(componentTree, moduleUUIDBeingEdited) - : undefined; - const list = - state && TypeGuards.isRepeaterState(state) - ? get(pageExpressionSources, state.listExpression) - : undefined; - const item = Array.isArray(list) ? list[0] : undefined; - - const extractedState = - state && TypeGuards.isEditableComponentState(state) - ? ComponentStateHelpers.extractRepeatedState(state) - : undefined; - const parentPreviewProps = usePreviewProps( - extractedState, - pageExpressionSources, - item - ); - - const expressionSources = useMemo( - () => ({ - ...pageExpressionSources, - ...(moduleUUIDBeingEdited && { props: parentPreviewProps }), - }), - [pageExpressionSources, moduleUUIDBeingEdited, parentPreviewProps] + const componentTree = useStudioStore((store) => + store.actions.getComponentTree() ); + const pageExpressionSources = usePageExpressionSources(); if (!componentTree) { return null; } @@ -54,7 +20,7 @@ export default function PreviewPanel(props: { return ( ); diff --git a/packages/studio-ui/src/components/RepeaterPreview.tsx b/packages/studio-ui/src/components/RepeaterPreview.tsx deleted file mode 100644 index 61b60339c..000000000 --- a/packages/studio-ui/src/components/RepeaterPreview.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { RepeaterState } from "@yext/studio-plugin"; -import get from "lodash/get"; -import { Dispatch, SetStateAction, useCallback, useMemo } from "react"; -import { ExpressionSources } from "../utils/getPropsForPreview"; -import ComponentPreview from "./ComponentPreview"; -import { ITooltip } from "react-tooltip"; - -interface RepeaterPreviewProps { - repeaterState: RepeaterState; - expressionSources: ExpressionSources; - setTooltipProps: Dispatch>; -} - -/** - * Renders the preview for a Repeater component. - */ -export default function RepeaterPreview({ - repeaterState, - expressionSources, - setTooltipProps, -}: RepeaterPreviewProps): JSX.Element | null { - const { repeatedComponent, listExpression } = repeaterState; - const repeatedElementState = useMemo( - () => ({ - ...repeatedComponent, - uuid: repeaterState.uuid, - parentUUID: repeaterState.parentUUID, - }), - [repeatedComponent, repeaterState] - ); - - const renderRepeatedElement = useCallback( - (item: unknown, key: number | string) => ( - - ), - [repeatedElementState, expressionSources, setTooltipProps] - ); - - const list = get(expressionSources, listExpression) as unknown; - if (!Array.isArray(list)) { - console.warn( - `Unable to render list repeater. Expected "${listExpression}" to reference an array in `, - expressionSources - ); - return null; - } - return <>{list.map(renderRepeatedElement)}; -} diff --git a/packages/studio-ui/src/store/createModuleAction.ts b/packages/studio-ui/src/store/createModuleAction.ts deleted file mode 100644 index 16f810493..000000000 --- a/packages/studio-ui/src/store/createModuleAction.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { StudioStore } from "./models/StudioStore"; -import path from "path-browserify"; -import { - ComponentState, - ComponentTreeHelpers, - FileMetadataKind, - ModuleMetadata, - PropValueType, -} from "@yext/studio-plugin"; -import differenceWith from "lodash/differenceWith"; -import isEqual from "lodash/isEqual"; -import { v4 } from "uuid"; - -export default function getCreateModuleAction( - get: () => StudioStore -): StudioStore["createModule"] { - function throwIfInvalidFilepath(filepath: string) { - const modulesFolder = get().studioConfig.paths.modules; - const moduleName = path.basename(filepath, ".tsx"); - if (!filepath.startsWith(modulesFolder)) { - throw new Error( - `Error creating module: modulePath is invalid: "${path.relative( - modulesFolder, - filepath - )}".` - ); - } else if (moduleName.charAt(0) !== moduleName.charAt(0).toUpperCase()) { - throw new Error( - "Error creating module: Module names must start with an uppercase letter." - ); - } else if ( - Object.values(get().fileMetadatas.UUIDToFileMetadata).some( - (fileMetadata) => - path.basename(fileMetadata.filepath, ".tsx") === moduleName - ) - ) { - throw new Error( - `Error creating module: module name "${moduleName}" is already used.` - ); - } - } - - function createModuleMetadata( - filepath: string, - descendants: ComponentState[], - activeComponentState: ComponentState - ): ModuleMetadata { - const moduleMetadata: ModuleMetadata = { - kind: FileMetadataKind.Module, - componentTree: [ - { ...activeComponentState, parentUUID: undefined }, - ...descendants, - ], - metadataUUID: v4(), - filepath, - propShape: {}, - }; - if (get().studioConfig.isPagesJSRepo) { - moduleMetadata.propShape = { - document: { - type: PropValueType.Record, - recordKey: "string", - recordValue: "any", - required: true, - }, - }; - } - return moduleMetadata; - } - - function createModule( - filepath: string, - componentTree: ComponentState[], - activeComponentState: ComponentState - ) { - const descendants = ComponentTreeHelpers.getDescendants( - activeComponentState, - componentTree - ); - const moduleMetadata: ModuleMetadata = createModuleMetadata( - filepath, - descendants, - activeComponentState - ); - get().fileMetadatas.setFileMetadata( - moduleMetadata.metadataUUID, - moduleMetadata - ); - const moduleState = get().actions.createComponentState(moduleMetadata); - const updatedPageComponentTree: ComponentState[] = differenceWith( - componentTree, - descendants, - isEqual - ).map((c) => { - if (c.uuid === activeComponentState.uuid) { - return { - ...moduleState, - parentUUID: c.parentUUID, - }; - } - return c; - }); - get().actions.updateComponentTree(updatedPageComponentTree); - get().pages.setActiveComponentUUID(moduleState.uuid); - } - - return (modulePath: string) => { - if (!modulePath) { - throw new Error("Error creating module: a modulePath is required."); - } - const modulesFolder = get().studioConfig.paths.modules; - const filepath = path.join(modulesFolder, modulePath + ".tsx"); - throwIfInvalidFilepath(filepath); - - const componentTree = get().actions.getComponentTree() ?? []; - const activeComponentState = get().actions.getActiveComponentState(); - if (!activeComponentState) { - throw new Error("Tried to create module without active component."); - } - createModule(filepath, componentTree, activeComponentState); - }; -} diff --git a/packages/studio-ui/vite.config.ts b/packages/studio-ui/vite.config.ts index 1c23a371f..6a068f8e5 100644 --- a/packages/studio-ui/vite.config.ts +++ b/packages/studio-ui/vite.config.ts @@ -1,23 +1,35 @@ // vite.config.js -import { resolve } from 'path' -import { defineConfig, PluginOption } from 'vite' +import { resolve } from "path"; +import { defineConfig, PluginOption } from "vite"; import svgr from "vite-plugin-svgr"; import { visualizer } from "rollup-plugin-visualizer"; -import dts from 'vite-plugin-dts' -import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' +import dts from "vite-plugin-dts"; +import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js"; export default defineConfig({ - plugins: [svgr(), dts(), cssInjectedByJsPlugin(), visualizer() as PluginOption], + plugins: [ + svgr(), + dts(), + cssInjectedByJsPlugin(), + visualizer() as PluginOption, + ], build: { - outDir: 'lib', + outDir: "lib", sourcemap: true, lib: { - entry: resolve(__dirname, 'src/index.ts'), - formats: ['es'], - fileName: 'src/index', + entry: resolve(__dirname, "src/index.ts"), + formats: ["es"], + fileName: "src/index", }, rollupOptions: { - external: ['virtual_yext-studio-git-data', 'virtual_yext-studio', '@pathToUserProjectRoot/tailwind.config', 'react', 'react-dom', 'react/jsx-runtime'], + external: [ + "virtual_yext-studio-git-data", + "virtual_yext-studio", + "@pathToUserProjectRoot/tailwind.config", + "react", + "react-dom", + "react/jsx-runtime", + ], }, }, -}) \ No newline at end of file +}); From 480a54d6e91b938c4123e47a966acba8c32a68b2 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Mon, 18 Sep 2023 11:25:40 -0400 Subject: [PATCH 22/24] update parsing o import path --- packages/studio-plugin/src/parsers/ComponentTreeParser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/studio-plugin/src/parsers/ComponentTreeParser.ts b/packages/studio-plugin/src/parsers/ComponentTreeParser.ts index ee32a6da5..0a100f090 100644 --- a/packages/studio-plugin/src/parsers/ComponentTreeParser.ts +++ b/packages/studio-plugin/src/parsers/ComponentTreeParser.ts @@ -17,7 +17,7 @@ import { v4 } from "uuid"; import { FileMetadataKind, TypelessPropVal } from "../types"; import StudioSourceFileParser from "./StudioSourceFileParser"; import StaticParsingHelpers from "./helpers/StaticParsingHelpers"; -import ParsingOrchestrator from "../ParsingOrchestrator"; +import ParsingOrchestrator from "../orchestrators/ParsingOrchestrator"; import MissingPropsChecker from "./MissingPropsChecker"; export type GetFileMetadata = ParsingOrchestrator["getFileMetadata"]; From c1fbea28d5102b51717a1d9a2d84ac614c6a7f68 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Tue, 19 Sep 2023 11:40:16 -0400 Subject: [PATCH 23/24] move to dev deps --- packages/studio-ui/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/studio-ui/package.json b/packages/studio-ui/package.json index 1c4a2ee32..4a3943a08 100644 --- a/packages/studio-ui/package.json +++ b/packages/studio-ui/package.json @@ -42,8 +42,6 @@ "react-tooltip": "^5.18.0", "tailwind-merge": "^1.8.1", "tailwindcss": "^3.3.3", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -70,8 +68,10 @@ "resize-observer-polyfill": "^1.5.1", "rollup-plugin-visualizer": "^5.9.2", "size-limit": "^9.0.0", + "vite": "^4.4.7", "vite-plugin-css-injected-by-js": "^3.3.0", - "vite-plugin-dts": "^3.5.3" + "vite-plugin-dts": "^3.5.3", + "vite-plugin-svgr": "^2.4.0" }, "peerDependencies": { "@yext/studio-plugin": "*" From d957f41a22b002224063fccbfb733183adb46646 Mon Sep 17 00:00:00 2001 From: Oliver Shi Date: Tue, 19 Sep 2023 11:40:46 -0400 Subject: [PATCH 24/24] update package lock --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 388e11b05..e2cdf4ad4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26494,6 +26494,7 @@ } }, "packages/studio-ui": { + "name": "@yext/studio-ui", "version": "0.22.0", "dependencies": { "@dhmk/zustand-lens": "^2.0.5", @@ -26515,8 +26516,6 @@ "react-tooltip": "^5.18.0", "tailwind-merge": "^1.8.1", "tailwindcss": "^3.3.3", - "vite": "^4.4.7", - "vite-plugin-svgr": "^2.4.0", "zundo": "2.0.0-beta.12", "zustand": "^4.3.2" }, @@ -26543,8 +26542,10 @@ "resize-observer-polyfill": "^1.5.1", "rollup-plugin-visualizer": "^5.9.2", "size-limit": "^9.0.0", + "vite": "^4.4.7", "vite-plugin-css-injected-by-js": "^3.3.0", - "vite-plugin-dts": "^3.5.3" + "vite-plugin-dts": "^3.5.3", + "vite-plugin-svgr": "^2.4.0" }, "peerDependencies": { "@yext/studio-plugin": "*"