From 716d43a9a8fd1f08ab5a8565c2338409a5e4c95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Pardou?= <571533+jrmi@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:27:19 +0100 Subject: [PATCH 1/2] Nuxt 3 migration (#4342) Update the nuxt3 version. Co-authored-by: Jonathan Adeline Co-authored-by: Bram Wiepjes Co-authored-by: Cezary Co-authored-by: Tsering Paljor Co-authored-by: Przemyslaw Kukulski Co-authored-by: Bram --- .editorconfig | 2 +- .github/workflows/ci.yml | 20 +- .gitignore | 5 +- .../refactor/refactor_children.json | 8 + docker-compose.dev.yml | 30 +- .../configuration-files/supervisor.conf | 2 +- e2e-tests/package.json | 3 +- .../automation/automationWorkflowPage.ts | 29 +- e2e-tests/pages/baserowPage.ts | 17 +- e2e-tests/pages/builder/builderPagePage.ts | 16 +- e2e-tests/pages/database/tablePage.ts | 6 +- e2e-tests/pages/loginPage.ts | 12 +- e2e-tests/pages/templatePage.ts | 6 +- e2e-tests/pages/workspacePage.ts | 8 +- e2e-tests/playwright.config.ts | 3 + e2e-tests/tests/auth/login.spec.ts | 8 +- e2e-tests/tests/automation/automation.spec.ts | 4 +- .../tests/automation/automationNode.spec.ts | 2 +- e2e-tests/tests/baserowTest.ts | 31 +- e2e-tests/tests/builder/builder.spec.ts | 5 +- e2e-tests/tests/builder/builderPage.spec.ts | 4 +- .../tests/builder/builderTemplate.spec.ts | 2 +- e2e-tests/tests/database/file_field.spec.ts | 2 +- e2e-tests/tests/database/search.spec.ts | 2 +- .../tests/enterprise/regressions.spec.ts | 2 +- e2e-tests/yarn.lock | 690 + enterprise/web-frontend/.prettierignore | 1 + enterprise/web-frontend/.prettierrc | 3 +- enterprise/web-frontend/babel.config.js | 16 - enterprise/web-frontend/eslint.config.mjs | 8 + enterprise/web-frontend/jest.config.js | 1 - enterprise/web-frontend/jest.setup.js | 24 - enterprise/web-frontend/jsconfig.json | 9 +- .../modules/baserow_enterprise/adminTypes.js | 8 +- .../assets/scss/components/assistant.scss | 4 - .../assets/scss/components/audit_log.scss | 10 +- .../scss/components/date_dependency.scss | 20 +- .../baserow_enterprise/authProviderTypes.js | 55 +- .../components/elements/FileInputElement.vue | 2 +- .../elements/FileInputElementForm.vue | 17 +- .../builder/elementTypes.js | 18 +- .../builderPageDecoratorTypes.js | 4 +- .../baserow_enterprise/builderSettingTypes.js | 12 +- .../components/AuditLogSidebarWorkspace.vue | 1 + .../ChatwootSupportSidebarWorkspace.vue | 2 +- .../components/EnterpriseLogo.vue | 20 +- .../components/InvitesRoleField.vue | 1 + .../components/MembersRoleField.vue | 1 + .../components/admin/AuthProviderItem.vue | 2 +- .../contexts/CreateAuthProviderContext.vue | 1 + .../contexts/EditAuthProviderMenuContext.vue | 1 + .../admin/modals/AuditLogExportModal.vue | 6 +- .../admin/modals/CreateAuthProviderModal.vue | 3 +- .../admin/modals/DeleteAuthProviderModal.vue | 3 +- .../UpdateSettingsAuthProviderModal.vue | 3 +- .../assistant/AssistantChatHistoryContext.vue | 1 + .../assistant/AssistantInputMessage.vue | 1 + .../assistant/AssistantMessageList.vue | 6 +- .../assistant/AssistantMessageSources.vue | 1 + .../components/assistant/AssistantPanel.vue | 3 +- .../assistant/AssistantSidebarItem.vue | 3 +- .../assistant/AssistantWelcomeMessage.vue | 7 +- .../builder/CustomCodeSettingScriptForm.vue | 1 + .../MadeWithBaserowBuilderDecorator.vue | 2 +- .../crudTable/fields/LongTextField.vue | 10 +- .../crudTable/fields/SubjectSampleField.vue | 24 +- .../crudTable/fields/TeamRoleField.vue | 4 + .../crudTable/filters/DateFilter.vue | 14 +- .../ConfigureDataSyncPeriodicInterval.vue | 1 + .../dataSync/LocalBaserowTableDataSync.vue | 4 +- .../DateDependencyFieldPicker.vue | 14 +- .../dateDependency/DateDependencyMenuItem.vue | 1 + .../FieldPermissionsContextItem.vue | 1 + .../FieldPermissionsModal.vue | 8 +- .../member-roles/MemberRolesMembersList.vue | 7 +- .../member-roles/MemberRolesModal.vue | 21 +- .../member-roles/MemberRolesShareToggle.vue | 1 + .../member-roles/MemberRolesTab.vue | 1 + .../member-roles/RoleAssignmentModal.vue | 2 +- .../components/member-roles/RoleSelector.vue | 1 + ...eriodicDataSyncDeactivatedNotification.vue | 7 +- .../TwoWaySyncDeactivatedNotification.vue | 7 +- .../TwoWaySyncUpdateFailedNotification.vue | 7 +- .../components/rbac/SelectMembersList.vue | 5 +- .../rbac/SelectSubjectsListFooter.vue | 1 + .../components/rbac/SelectTeamsList.vue | 1 + .../components/teams/CreateTeamModal.vue | 3 +- .../components/teams/EditTeamContext.vue | 3 +- .../components/teams/ManageTeamForm.vue | 7 +- .../components/teams/TeamsTable.vue | 1 + .../components/teams/UpdateTeamModal.vue | 3 +- .../configureDataSyncTypes.js | 2 +- .../baserow_enterprise/dataSyncTypes.js | 20 +- .../integrations/appAuthProviderTypes.js | 16 +- .../components/CommonOIDCSettingForm.vue | 12 +- .../components/CommonSamlSettingForm.vue | 4 +- .../common/components/OIDCAuthLink.vue | 6 +- .../common/components/SamlAuthLink.vue | 2 +- ...ocalBaserowPasswordAppAuthProviderForm.vue | 6 +- .../integrations/userSourceTypes.js | 16 +- .../baserow_enterprise/licenseTypes.js | 30 +- .../membersPagePluginTypes.js | 14 +- .../modules/baserow_enterprise/module.js | 148 +- .../pages/admin/authProviders.vue | 107 +- .../baserow_enterprise/pages/auditLog.vue | 465 +- .../pages/settings/teams.vue | 2 +- .../baserow_enterprise/paidFeatures.js | 48 +- .../permissionManagerTypes.js | 32 +- .../modules/baserow_enterprise/plugin.js | 319 +- .../modules/baserow_enterprise/plugins.js | 10 +- .../baserow_enterprise/plugins/realtime.js | 9 + .../modules/baserow_enterprise/roleTypes.js | 48 +- .../modules/baserow_enterprise/routes.js | 33 +- .../baserow_enterprise/store/assistant.js | 42 +- .../store/authProviderAdmin.js | 18 +- .../twoWaySyncStrategyTypes.js | 4 +- .../baserow_enterprise/viewOwnershipTypes.js | 12 +- .../baserow_enterprise/webhookEventTypes.js | 16 +- .../workspaceSettingsPageTypes.js | 4 +- enterprise/web-frontend/package.json | 6 + .../test/unit/enterprise/plugins.spec.js | 1 - enterprise/web-frontend/vitest.config.ts | 16 + justfile | 46 +- .../web-frontend/package.json | 4 +- premium/web-frontend/.prettierignore | 1 + premium/web-frontend/.prettierrc | 3 +- premium/web-frontend/babel.config.js | 16 - premium/web-frontend/eslint.config.mjs | 8 + premium/web-frontend/jest.config.js | 1 - premium/web-frontend/jest.setup.js | 24 - premium/web-frontend/jsconfig.json | 15 +- .../modules/baserow_premium/adminTypes.js | 8 +- .../baserow_premium/aiFieldOutputTypes.js | 16 +- .../scss/components/form_view_survey.scss | 4 +- .../components/generate_ai_values_modal.scss | 2 +- .../assets/scss/components/paid_features.scss | 14 +- .../assets/scss/components/row_comments.scss | 2 +- .../views/calendar/calendar_month.scss | 2 +- .../components/PaidFeaturesModal.vue | 16 +- .../components/RedirectToBaserowModal.vue | 2 +- .../components/field/AIFormulaModal.vue | 1 + .../components/field/FieldAISubForm.vue | 1 + .../components/field/FormulaFieldAI.vue | 1 + .../field/GenerateAIValuesContextItem.vue | 1 + .../field/GenerateAIValuesFormFooter.vue | 1 + .../field/GenerateAIValuesModal.vue | 10 +- .../license/DisconnectLicenseModal.vue | 10 +- .../license/ManualLicenseSeatForm.vue | 2 +- .../license/RegisterLicenseModal.vue | 13 +- .../components/row/RowEditFieldAI.vue | 3 +- ...ridViewRowExpandButtonWithCommentCount.vue | 60 +- .../components/row_comments/RowComment.vue | 30 +- .../row_comments/RowCommentContext.vue | 1 + .../RowCommentMentionNotification.vue | 7 +- .../row_comments/RowCommentNotification.vue | 7 +- .../row_comments/RowCommentsSidebar.vue | 2 +- .../views/BackgroundColorViewDecorator.vue | 13 +- .../ConditionalColorValueProviderForm.vue | 13 +- .../views/LeftBorderColorViewDecorator.vue | 12 +- .../components/views/PremiumViewOptions.vue | 3 +- .../SingleSelectColorValueProviderForm.vue | 1 + .../components/views/ViewDateSelector.vue | 1 + .../views/calendar/CalendarCard.vue | 1 + .../CalendarCreateIcalSharedViewLink.vue | 1 + .../views/calendar/CalendarMonth.vue | 43 +- .../views/calendar/CalendarMonthDay.vue | 14 +- .../calendar/CalendarMonthDayExpanded.vue | 5 +- .../views/calendar/CalendarView.vue | 36 +- .../views/calendar/CalendarViewHeader.vue | 41 +- .../views/calendar/SelectDateFieldModal.vue | 3 +- .../views/form/FormViewModePreviewSurvey.vue | 1 + .../views/form/FormViewModeSurvey.vue | 14 +- .../grid/fields/FunctionalGridViewFieldAI.vue | 85 +- .../views/grid/fields/GridViewFieldAI.vue | 10 +- ...idViewFieldAIGenerateValuesContextItem.vue | 2 + .../components/views/kanban/KanbanView.vue | 37 +- .../kanban/KanbanViewCreateStackContext.vue | 2 +- .../views/kanban/KanbanViewHeader.vue | 11 +- .../views/kanban/KanbanViewStack.vue | 48 +- .../views/kanban/KanbanViewStackContext.vue | 3 +- .../views/kanban/KanbanViewStackedBy.vue | 1 + .../kanban/KanbanViewUpdateStackContext.vue | 3 +- .../views/timeline/TimelineContainer.vue | 19 +- .../timeline/TimelineDateSettingsForm.vue | 1 + .../TimelineDateSettingsHeaderContext.vue | 3 +- .../views/timeline/TimelineGrid.vue | 7 +- .../views/timeline/TimelineGridRow.vue | 3 +- .../timeline/TimelineGridRowFieldRules.vue | 3 +- .../timeline/TimelineGridShowRowButton.vue | 32 +- .../timeline/TimelineTimescaleContext.vue | 1 + .../views/timeline/TimelineView.vue | 1 + .../views/timeline/TimelineViewHeader.vue | 18 +- .../data_source/AggregationGroupByForm.vue | 1 + .../data_source/AggregationSeriesForm.vue | 1 + .../data_source/AggregationSortByForm.vue | 3 +- .../GroupedAggregateRowsDataSourceForm.vue | 3 +- .../components/widget/ChartWidget.vue | 1 + .../components/widget/PieChartWidget.vue | 1 + .../baserow_premium/dashboard/widgetTypes.js | 24 +- .../decoratorValueProviders.js | 26 +- .../modules/baserow_premium/fieldTypes.js | 8 +- .../baserow_premium/formViewModeTypes.js | 12 +- .../baserow_premium/handlers/license.js | 4 +- .../modules/baserow_premium/jobTypes.js | 8 +- .../modules/baserow_premium/licenseTypes.js | 21 +- .../mixins/kanbanViewHelper.js | 35 +- .../modules/baserow_premium/module.js | 121 +- .../baserow_premium/pages/admin/license.vue | 4 +- .../baserow_premium/pages/admin/licenses.vue | 217 +- .../modules/baserow_premium/pages/root.vue | 16 + .../modules/baserow_premium/paidFeatures.js | 48 +- .../baserow_premium/permissionManagerTypes.js | 4 +- .../modules/baserow_premium/plugin.js | 479 +- .../baserow_premium/plugins/license.js | 22 +- .../baserow_premium/plugins/realtime.js | 9 + .../modules/baserow_premium/routes.js | 29 +- .../baserow_premium/rowModalSidebarTypes.js | 2 +- .../baserow_premium/store/row_comments.js | 21 +- .../baserow_premium/store/view/calendar.js | 61 +- .../baserow_premium/store/view/kanban.js | 70 +- .../baserow_premium/tableExporterTypes.js | 20 +- .../modules/baserow_premium/viewDecorators.js | 44 +- .../baserow_premium/viewOwnershipTypes.js | 14 +- .../modules/baserow_premium/viewTypes.js | 22 +- premium/web-frontend/package.json | 6 + .../test/helpers/premiumTestApp.js | 6 +- .../unit/premium/calendarShareLink.spec.js | 2 +- .../conditionalColorValueProviderForm.spec.js | 6 +- .../test/unit/premium/logoInShareLink.spec.js | 2 +- .../test/unit/premium/premiumLicense.spec.js | 4 +- .../unit/premium/premiumViewTypes.spec.js | 12 +- .../test/unit/premium/rowComments.spec.js | 2 +- .../view/calendar/calendarView.spec.js | 22 +- .../premium/view/kanban/kanbanView.spec.js | 22 +- premium/web-frontend/vitest.config.ts | 40 + web-frontend/.eslintignore | 5 - web-frontend/.eslintrc.js | 35 - web-frontend/.gitignore | 26 + web-frontend/.prettierignore | 2 + web-frontend/.prettierrc | 3 +- web-frontend/.storybook/main.js | 15 - web-frontend/.storybook/main.ts | 25 + web-frontend/.storybook/preview.js | 1 - web-frontend/.storybook/preview.ts | 14 + web-frontend/.stylelintignore | 3 + web-frontend/Dockerfile | 43 +- web-frontend/Makefile | 2 +- web-frontend/README.md | 77 +- web-frontend/app.vue | 6 + web-frontend/babel.config.js | 16 - web-frontend/config/nuxt.config.base.js | 102 - web-frontend/config/nuxt.config.base.ts | 113 + web-frontend/config/nuxt.config.demo.js | 5 - web-frontend/config/nuxt.config.dev.js | 38 - web-frontend/config/nuxt.config.dev.ts | 5 + web-frontend/config/nuxt.config.local.js | 3 - web-frontend/config/nuxt.config.local.ts | 5 + web-frontend/config/nuxt.config.prod.js | 3 - web-frontend/config/nuxt.config.prod.ts | 16 + web-frontend/config/nuxt.config.test.js | 16 - web-frontend/config/nuxt.config.test.ts | 6 + web-frontend/docker/docker-entrypoint.sh | 29 +- .../{modules/core/layouts => }/error.vue | 0 web-frontend/eslint.config.common.mjs | 59 + web-frontend/eslint.config.mjs | 5 + web-frontend/i18n.config.ts | 5 + web-frontend/i18n/locales | 1 + web-frontend/jest.config.js | 1 - web-frontend/jest.setup.js | 24 - web-frontend/jsconfig.json | 11 +- web-frontend/locales/es.json | 1156 +- .../modules/automation/applicationTypes.js | 36 +- .../automation/automationSettingTypes.js | 14 +- .../AutomationBuilderFormulaInput.vue | 23 +- .../components/AutomationHeader.vue | 10 +- .../components/form/AutomationForm.vue | 3 +- .../form/SimulateDispatchNodeForm.vue | 21 +- .../settings/AutomationSettingsModal.vue | 5 +- .../components/settings/GeneralSettings.vue | 77 +- .../settings/IntegrationSettings.vue | 4 +- .../components/sidebar/SampleDataModal.vue | 2 +- .../sidebar/SidebarComponentAutomation.vue | 80 +- .../sidebar/SidebarItemAutomation.vue | 24 +- .../CreateAutomationWorkflowModal.vue | 2 +- .../components/workflow/EditorSidePanels.vue | 3 +- .../workflow/WorkflowAddBtnNode.vue | 3 +- .../workflow/WorkflowAddNodeMenu.vue | 1 + .../components/workflow/WorkflowConnector.vue | 1 + .../components/workflow/WorkflowEdge.vue | 2 +- .../components/workflow/WorkflowEditor.vue | 53 +- .../components/workflow/WorkflowNode.vue | 80 +- .../workflow/WorkflowNodeContent.vue | 8 +- .../workflow/WorkflowNodeContext.vue | 3 +- .../workflow/sidePanels/HistorySection.vue | 15 +- .../workflow/sidePanels/HistorySidePanel.vue | 2 +- .../workflow/sidePanels/NodeSidePanel.vue | 13 +- .../modules/automation/dataProviderTypes.js | 14 +- .../modules/automation/guidedTourTypes.js | 30 +- web-frontend/modules/automation/jobTypes.js | 8 +- web-frontend/modules/automation/module.js | 70 +- .../modules/automation/nodeTypeMixins.js | 2 +- web-frontend/modules/automation/nodeTypes.js | 73 +- .../automation/pages/automationWorkflow.vue | 439 +- web-frontend/modules/automation/plugin.js | 204 +- .../modules/automation/plugins/realtime.js | 9 + web-frontend/modules/automation/routes.js | 12 +- .../automation/store/automationHistory.js | 3 +- .../automation/store/automationWorkflow.js | 32 +- .../store/automationWorkflowNode.js | 41 +- .../modules/builder/applicationTypes.js | 50 +- .../modules/builder/builderSettingTypes.js | 27 +- .../modules/builder/collectionFieldTypes.js | 34 +- .../ApplicationBuilderFormulaInput.vue | 42 +- .../builder/components/BuilderToast.vue | 3 +- .../builder/components/FontFamilySelector.vue | 25 +- .../builder/components/FontWeightSelector.vue | 31 +- .../HorizontalAlignmentsSelector.vue | 29 +- .../builder/components/PaddingSelector.vue | 28 +- .../builder/components/PixelValueSelector.vue | 29 +- .../components/PublicSiteErrorPage.vue | 1 + .../builder/components/SidebarExpandable.vue | 7 +- .../components/TextDecorationSelector.vue | 44 +- .../components/VerticalAlignmentSelector.vue | 27 +- .../builder/components/WidthSelector.vue | 28 +- .../application/BuilderApplicationContext.vue | 2 +- .../dataSource/DataSourceCreateEditModal.vue | 3 +- .../dataSource/DataSourceDropdown.vue | 11 +- .../components/dataSource/DataSourceForm.vue | 18 + .../components/dataSource/DataSourceItem.vue | 1 + .../dataSource/DataSourceItemContext.vue | 7 +- .../components/domain/CustomDomainDetails.vue | 1 + .../components/domain/CustomDomainForm.vue | 5 +- .../builder/components/domain/DnsStatus.vue | 24 +- .../builder/components/domain/DomainCard.vue | 1 + .../builder/components/domain/DomainForm.vue | 1 + .../components/domain/SubDomainDetails.vue | 1 + .../components/domain/SubDomainForm.vue | 5 +- .../components/elements/AddElementButton.vue | 2 +- .../components/elements/AddElementCard.vue | 10 +- .../components/elements/AddElementModal.vue | 6 +- .../components/elements/AddElementZone.vue | 1 + .../components/elements/ElementMenu.vue | 1 + .../components/elements/ElementPreview.vue | 5 +- .../components/elements/ElementsList.vue | 13 +- .../components/elements/ElementsListItem.vue | 21 +- .../elements/InsertElementButton.vue | 1 + .../elements/baseComponents/ABButton.vue | 1 + .../elements/baseComponents/ABCheckbox.vue | 7 +- .../baseComponents/ABDateTimePicker.vue | 41 +- .../elements/baseComponents/ABDropdown.vue | 1 + .../baseComponents/ABDropdownItem.vue | 1 + .../elements/baseComponents/ABFileInput.vue | 35 +- .../elements/baseComponents/ABHeading.vue | 1 - .../elements/baseComponents/ABIcon.vue | 1 + .../elements/baseComponents/ABInput.vue | 31 +- .../elements/baseComponents/ABLink.vue | 2 +- .../baseComponents/ABPresentation.vue | 2 +- .../elements/baseComponents/ABRadio.vue | 1 + .../elements/components/BaserowTable.vue | 8 +- .../components/CollectionElementHeader.vue | 1 + .../elements/components/ColumnElement.vue | 1 + .../components/FormContainerElement.vue | 1 + .../elements/components/MenuElement.vue | 8 +- .../components/MultiPageContainerElement.vue | 1 + .../elements/components/RepeatElement.vue | 62 +- .../components/SimpleContainerElement.vue | 1 + .../elements/components/TableElement.vue | 46 +- .../elements/components/TextElement.vue | 4 +- .../collectionField/BooleanField.vue | 1 - .../components/collectionField/TagsField.vue | 1 - .../components/forms/VisibilityForm.vue | 13 +- .../forms/general/ChoiceElementForm.vue | 2 - .../forms/general/ColumnElementForm.vue | 3 +- .../forms/general/MenuElementItemForm.vue | 1 + .../general/RecordSelectorElementForm.vue | 1 + .../forms/general/RepeatElementForm.vue | 2 +- .../forms/general/TableElementForm.vue | 1 + .../settings/HorizontalAlignmentsSelector.vue | 1 + .../settings/VerticalAlignmentSelector.vue | 1 + .../forms/general/settings/WidthSelector.vue | 1 + .../forms/style/CustomStyleForm.vue | 1 + .../components/forms/style/RadiusForm.vue | 15 +- .../components/forms/style/StyleBoxForm.vue | 13 +- .../components/event/WorkflowAction.vue | 1 + .../builder/components/form/BuilderForm.vue | 1 + .../form/BuilderGeneralSettingsForm.vue | 2 +- .../components/page/CreatePageModal.vue | 2 +- .../builder/components/page/PageElement.vue | 1 + .../builder/components/page/PagePreview.vue | 2 +- .../builder/components/page/PageTemplate.vue | 2 +- .../components/page/PageTemplateSidebar.vue | 1 + .../components/page/PreviewNavigationBar.vue | 26 +- .../page/PreviewNavigationBarInput.vue | 3 + .../page/UserSourceUsersContext.vue | 9 +- .../page/header/DataSourceContext.vue | 1 + .../components/page/header/DeviceSelector.vue | 3 +- .../page/header/ElementsContext.vue | 1 + .../page/header/PublishActionModal.vue | 6 +- .../page/header/VariablesContext.vue | 1 + .../page/settings/PageSettingsModal.vue | 2 +- .../PageSettingsPathParamsFormElement.vue | 3 + .../PageSettingsQueryParamsFormElement.vue | 1 + .../page/sidePanels/EventsSidePanel.vue | 3 +- .../page/sidePanels/StyleSidePanel.vue | 1 + .../settings/BuilderSettingsModal.vue | 6 +- .../components/settings/DomainsSettings.vue | 19 +- .../settings/UserSourcesSettings.vue | 2 +- .../settings/mixins/builderSetting.js | 2 + .../sidebar/SidebarComponentBuilder.vue | 108 +- .../components/sidebar/SidebarItemBuilder.vue | 22 +- .../theme/ColorThemeConfigBlock.vue | 2 +- .../components/theme/CustomColorInput.vue | 1 + .../builder/components/theme/ResetButton.vue | 12 +- .../components/theme/ThemeConfigBlock.vue | 1 + .../components/theme/ThemeProvider.vue | 2 + .../userSource/AuthProviderWithModal.vue | 1 + .../userSource/UpdateUserSourceForm.vue | 21 +- .../userSource/UserSourceDropdown.vue | 9 +- .../composables/useApplicationContext.js | 19 + .../composables/useCollectionElement.js | 319 + .../modules/builder/composables/useElement.js | 143 + .../builder/composables/useResolveFormula.js | 60 + .../modules/builder/dataProviderTypes.js | 140 +- web-frontend/modules/builder/domainTypes.js | 11 +- .../modules/builder/elementTypeMixins.js | 54 +- web-frontend/modules/builder/elementTypes.js | 274 +- .../modules/builder/errorPageTypes.js | 4 +- web-frontend/modules/builder/eventTypes.js | 18 +- .../modules/builder/guidedTourTypes.js | 26 +- web-frontend/modules/builder/jobTypes.js | 8 +- web-frontend/modules/builder/locales/de.json | 1808 +- web-frontend/modules/builder/locales/en.json | 4 +- web-frontend/modules/builder/locales/es.json | 1918 +- web-frontend/modules/builder/locales/fr.json | 2410 +- web-frontend/modules/builder/locales/it.json | 1604 +- web-frontend/modules/builder/locales/ko.json | 2208 +- web-frontend/modules/builder/locales/nl.json | 2406 +- .../middleware/selectWorkspaceBuilderPage.js | 31 + .../builder/mixins/collectionElement.js | 5 +- .../modules/builder/mixins/domainForm.js | 1 + .../builder/mixins/elementSidePanel.js | 1 + .../builder/mixins/themeConfigBlock.js | 1 + .../builder/mixins/useApplicationContext.js | 2 - web-frontend/modules/builder/module.js | 110 +- .../modules/builder/pageActionTypes.js | 8 +- .../modules/builder/pageHeaderItemTypes.js | 26 +- .../modules/builder/pageSettingsTypes.js | 12 +- .../modules/builder/pageSidePanelTypes.js | 16 +- .../modules/builder/pages/pageEditor.vue | 409 +- .../modules/builder/pages/publicPage.vue | 768 +- .../modules/builder/pathParamTypes.js | 4 +- web-frontend/modules/builder/plugin.js | 514 +- .../modules/builder/plugins/global.js | 45 +- .../modules/builder/plugins/realtime.js | 9 + .../modules/builder/plugins/router.js | 94 +- .../modules/builder/queryParamTypes.js | 4 +- web-frontend/modules/builder/routes.js | 22 +- web-frontend/modules/builder/searchTypes.js | 6 +- .../builder/store/builderWorkflowAction.js | 32 +- .../modules/builder/store/dataSource.js | 45 +- .../builder/store/dataSourceContent.js | 17 +- web-frontend/modules/builder/store/domain.js | 17 +- web-frontend/modules/builder/store/element.js | 61 +- .../modules/builder/store/elementContent.js | 6 +- .../modules/builder/store/formData.js | 4 +- web-frontend/modules/builder/store/page.js | 24 +- .../modules/builder/store/pageParameter.js | 5 +- .../modules/builder/store/publicBuilder.js | 16 +- web-frontend/modules/builder/store/theme.js | 3 +- .../modules/builder/themeConfigBlockTypes.js | 26 +- web-frontend/modules/builder/utils/error.js | 2 +- web-frontend/modules/builder/utils/routing.js | 28 +- .../modules/builder/utils/urlResolution.js | 9 +- .../modules/builder/workflowActionTypes.js | 40 +- web-frontend/modules/core/adminTypes.js | 16 +- .../core/assets/scss/colors.module.scss | 7 + .../modules/core/assets/scss/colors.scss | 12 +- .../core/assets/scss/components/all.scss | 1 + .../core/assets/scss/components/auth.scss | 2 +- .../scss/components/automation/all.scss | 6 +- .../workflow/sample_data_modal.scss | 2 +- .../automation/workflow/workflow_editor.scss | 2 + .../workflow/workflow_node_content.scss | 11 +- .../core/assets/scss/components/box.scss | 2 +- .../builder/data_source_context.scss | 2 +- .../components/builder/element_preview.scss | 4 +- .../ab_components/ab_datetime_picker.scss | 43 +- .../elements/ab_components/ab_file_input.scss | 2 +- .../assets/scss/components/color_picker.scss | 3 +- .../assets/scss/components/datepicker.scss | 56 +- .../assets/scss/components/formula_field.scss | 8 +- .../components/formula_input_context.scss | 4 + .../scss/components/formula_input_field.scss | 4 +- .../function_formula_component.scss | 4 + .../core/assets/scss/components/grid.scss | 6 +- .../assets/scss/components/group_admin.scss | 2 +- .../scss/components/guided_tour_step.scss | 11 +- .../assets/scss/components/highlight.scss | 6 +- .../components/nuxt_loading_indicator.scss | 4 + .../operator_formula_component.scss | 1 - .../assets/scss/components/radio_card.scss | 6 - .../scss/components/rich_text_editor.scss | 6 +- .../services/webhook_service_form.scss | 2 +- .../core/assets/scss/components/tooltip.scss | 2 +- .../assets/scss/components/user_admin.scss | 4 +- .../modules/core/assets/scss/fonts.scss | 76 +- .../modules/core/assets/scss/icons.scss | 10 +- .../modules/core/assets/scss/variables.scss | 13 +- .../modules/core/assets/scss/vendors.scss | 6 +- .../modules/core/authProviderTypes.js | 4 +- .../modules/core/components/Alert.vue | 1 + .../modules/core/components/Avatar.vue | 6 +- .../core/components/BadgeCollaborator.vue | 1 + .../modules/core/components/BadgeCounter.vue | 1 - .../modules/core/components/Button.vue | 40 +- .../modules/core/components/ButtonAdd.vue | 2 +- .../core/components/ButtonFloating.vue | 8 +- .../modules/core/components/ButtonIcon.vue | 18 +- .../modules/core/components/ButtonText.vue | 42 +- .../modules/core/components/CallToAction.vue | 1 + .../modules/core/components/Checkbox.vue | 30 +- .../modules/core/components/Chips.vue | 2 +- .../modules/core/components/CodeEditor.vue | 30 +- .../modules/core/components/ColorInput.vue | 30 +- .../modules/core/components/ColorPicker.vue | 27 +- .../core/components/ColorPickerContext.vue | 3 +- .../core/components/ColorSelectContext.vue | 1 + .../modules/core/components/Context.vue | 2 +- .../core/components/DefaultErrorPage.vue | 4 +- .../modules/core/components/DownloadLink.vue | 2 +- .../modules/core/components/DropdownItem.vue | 1 + .../modules/core/components/Editable.vue | 7 +- .../modules/core/components/Error.vue | 1 + .../modules/core/components/Expandable.vue | 1 + .../modules/core/components/FormGroup.vue | 275 +- .../modules/core/components/FormInput.vue | 250 +- .../modules/core/components/FormTextarea.vue | 29 +- .../modules/core/components/Highlight.vue | 5 +- .../core/components/HorizontalResize.vue | 1 + web-frontend/modules/core/components/Icon.vue | 1 - .../modules/core/components/ImageInput.vue | 15 +- .../modules/core/components/LangPicker.vue | 23 +- .../core/components/LangSwitcherDropdown.vue | 47 +- web-frontend/modules/core/components/List.vue | 3 +- web-frontend/modules/core/components/Logo.vue | 21 +- .../modules/core/components/MarkdownIt.vue | 107 +- .../core/components/NotificationPanel.vue | 9 +- .../modules/core/components/Paginator.vue | 3 +- .../modules/core/components/Presentation.vue | 2 +- .../modules/core/components/Radio.vue | 6 +- .../modules/core/components/RadioButton.vue | 6 +- .../modules/core/components/RadioCard.vue | 12 +- .../modules/core/components/RadioGroup.vue | 34 +- .../core/components/RecursiveWrapper.js | 22 +- .../modules/core/components/Scrollbars.vue | 3 +- .../core/components/SegmentControl.vue | 36 +- .../modules/core/components/SelectSearch.vue | 1 + .../modules/core/components/SwitchButton.vue | 7 +- .../modules/core/components/SwitchInput.vue | 27 +- web-frontend/modules/core/components/Tab.vue | 16 + web-frontend/modules/core/components/Tabs.vue | 50 +- .../modules/core/components/Thumbnail.vue | 1 + .../core/components/TimeSelectContext.vue | 2 + .../admin/users/contexts/EditUserContext.vue | 11 +- .../admin/users/fields/ActiveField.vue | 11 +- .../admin/users/fields/UsernameField.vue | 17 +- .../users/modals/ChangeUserPasswordModal.vue | 2 +- .../admin/users/modals/DeleteUserModal.vue | 7 +- .../admin/users/modals/EditUserModal.vue | 3 +- .../contexts/EditWorkspaceContext.vue | 3 +- .../workspaces/fields/WorkspaceNameField.vue | 9 +- .../modals/DeleteWorkspaceModal.vue | 7 +- .../core/components/ai/SelectAIModelForm.vue | 1 + .../application/ApplicationContext.vue | 5 +- .../application/ApplicationForm.vue | 2 +- .../application/CreateApplicationContext.vue | 1 + .../application/CreateApplicationModal.vue | 6 +- .../modules/core/components/auth/Login.vue | 25 +- .../core/components/auth/LoginButtons.vue | 10 +- .../core/components/auth/PasswordLogin.vue | 34 +- .../core/components/auth/PasswordRegister.vue | 7 +- .../core/components/auth/TOTPLogin.vue | 1 + .../core/components/crudTable/CrudTable.vue | 17 +- .../components/crudTable/CrudTableSearch.vue | 3 +- .../ExpandOnOverflowHiddenContext.vue | 6 +- .../crudTable/ExpandOnOverflowList.vue | 10 +- .../crudTable/fields/LocalDateField.vue | 11 +- .../components/crudTable/fields/MoreField.vue | 27 +- .../crudTable/fields/SimpleField.vue | 11 +- .../dashboard/DashboardApplication.vue | 3 +- .../components/dashboard/DashboardHelp.vue | 89 +- .../core/components/editor/RichTextEditor.vue | 61 +- .../editor/RichTextEditorBubbleMenu.vue | 17 +- .../editor/RichTextEditorFloatingMenu.vue | 3 +- .../components/export/ApplicationSelector.vue | 5 +- .../components/export/ExportWorkspaceForm.vue | 5 +- .../export/ExportWorkspaceModal.vue | 3 +- .../core/components/files/FileFailed.vue | 1 + .../core/components/files/FileInProgress.vue | 1 + .../core/components/files/FileUploaded.vue | 3 +- .../components/files/UploadFileDropzone.vue | 1 + .../files/UploadFileUserFileUpload.vue | 1 + .../files/UploadViaURLUserFileUpload.vue | 1 + .../core/components/files/UserFilesModal.vue | 3 +- .../formula/FormulaInputContext.vue | 8 +- .../components/formula/FormulaInputField.vue | 22 +- .../formula/FunctionFormulaComponent.vue | 3 +- .../formula/GetFormulaComponent.vue | 8 +- .../formula/InjectedFormulaInput.vue | 3 +- .../formula/OperatorFormulaComponent.vue | 3 +- .../extensions/ContextManagementExtension.js | 6 +- .../formula/extensions/FormulaNodes.js | 2 +- .../core/components/guidedTour/GuidedTour.vue | 4 + .../components/guidedTour/GuidedTourStep.vue | 3 +- .../components/helpers/CharsetDropdown.vue | 1 + .../components/helpers/InfiniteScroll.vue | 3 +- .../core/components/helpers/PasswordInput.vue | 10 +- .../import/ImportApplicationSelector.vue | 5 +- .../import/ImportWorkspaceModal.vue | 7 +- .../components/import/SelectedFileDetails.vue | 3 +- .../IntegrationCreateEditModal.vue | 3 +- .../integrations/IntegrationDropdown.vue | 1 + .../ClearAllNotificationsConfirmModal.vue | 29 +- .../components/nodeExplorer/NodeExplorer.vue | 3 +- .../nodeExplorer/NodeExplorerContent.vue | 1 + .../nodeExplorer/NodeExplorerTab.vue | 11 +- .../nodeExplorer/NodeHelpTooltip.vue | 7 +- .../BaserowVersionUpgradeNotification.vue | 4 +- .../NotificationSenderInitialsIcon.vue | 11 +- ...orkspaceInvitationAcceptedNotification.vue | 7 +- ...WorkspaceInvitationCreatedNotification.vue | 7 +- ...orkspaceInvitationRejectedNotification.vue | 7 +- .../onboarding/AppLayoutPreview.vue | 2 +- .../core/components/onboarding/InviteStep.vue | 4 +- .../core/components/onboarding/MoreStep.vue | 1 + .../core/components/onboarding/TeamStep.vue | 1 + .../components/onboarding/WorkspaceStep.vue | 1 + .../ServiceSchemaPropertySelector.vue | 9 +- .../core/components/settings/AccountForm.vue | 9 +- .../settings/DeleteAccountSettings.vue | 90 +- .../components/settings/EmailSettings.vue | 6 +- .../core/components/settings/McpEndpoint.vue | 3 +- .../components/settings/SettingsModal.vue | 4 +- .../settings/members/EditInviteContext.vue | 3 +- .../settings/members/EditMemberContext.vue | 3 +- .../settings/members/EditRoleContext.vue | 3 +- .../settings/members/MemberRoleField.vue | 70 +- .../settings/members/MembersInvitesTable.vue | 2 +- .../settings/twoFactorAuth/AuthCodeInput.vue | 1 + .../twoFactorAuth/DisableTwoFactorAuth.vue | 1 + .../settings/twoFactorAuth/EnableTOTP.vue | 1 + .../twoFactorAuth/EnableTwoFactorOptions.vue | 5 +- .../twoFactorAuth/EnableWithQRCode.vue | 1 + .../settings/twoFactorAuth/SaveBackupCode.vue | 1 + .../twoFactorAuth/TwoFactorAuthEmpty.vue | 1 + .../twoFactorAuth/TwoFactorEnabled.vue | 1 + .../core/components/sidebar/Sidebar.vue | 3 +- .../core/components/sidebar/SidebarAdmin.vue | 14 +- .../components/sidebar/SidebarApplication.vue | 5 +- ...SidebarDuplicateApplicationContextItem.vue | 3 +- .../core/components/sidebar/SidebarFoot.vue | 1 + .../core/components/sidebar/SidebarMenu.vue | 3 + .../core/components/sidebar/SidebarSearch.vue | 18 +- .../components/sidebar/SidebarUserContext.vue | 26 +- .../sidebar/SidebarWithWorkspace.vue | 40 +- .../snapshots/DeleteSnapshotModal.vue | 3 +- .../components/snapshots/SnapshotListItem.vue | 3 +- .../components/snapshots/SnapshotsModal.vue | 6 +- .../core/components/template/TemplateCard.vue | 1 + .../template/TemplateCategories.vue | 3 +- .../components/template/TemplateHeader.vue | 1 + .../template/TemplateIllustration.vue | 81 +- .../components/template/TemplateModal.vue | 2 +- .../components/template/TemplateSidebar.vue | 1 + .../modules/core/components/toasts/Toast.vue | 1 + .../toasts/UserPasswordChangedToast.vue | 2 +- .../toasts/UserSessionExpiredToast.vue | 2 +- .../core/components/trash/TrashContents.vue | 3 +- .../core/components/trash/TrashEmptyModal.vue | 3 +- .../core/components/trash/TrashEntry.vue | 3 +- .../core/components/trash/TrashModal.vue | 1 + .../core/components/trash/TrashSidebar.vue | 16 +- .../workspace/CreateWorkspaceModal.vue | 7 +- .../GenerativeAIWorkspaceSettings.vue | 4 +- .../workspace/LeaveWorkspaceModal.vue | 8 +- .../workspace/MemberAssignmentModal.vue | 3 +- .../workspace/MemberAssignmentModalFooter.vue | 1 + .../workspace/MemberSelectionList.vue | 5 +- .../workspace/RemoveFromWorkspaceModal.vue | 3 +- .../components/workspace/WorkspaceContext.vue | 18 +- .../components/workspace/WorkspaceForm.vue | 2 +- .../workspace/WorkspaceInvitation.vue | 5 + .../workspace/WorkspaceMemberInviteModal.vue | 5 +- .../workspace/WorkspaceSearchModal.vue | 2 +- .../workspace/WorkspaceSettingsModal.vue | 1 + .../modules/core/dataProviderTypes.js | 4 +- .../core/directives/autoOverflowScroll.js | 16 +- .../modules/core/directives/autoScroll.js | 8 +- .../modules/core/directives/clickOutside.js | 8 +- .../core/directives/preventParentScroll.js | 6 +- .../modules/core/directives/scroll.js | 4 +- .../modules/core/directives/sortable.js | 30 +- .../modules/core/directives/tooltip.js | 14 +- .../modules/core/directives/userFileUpload.js | 12 +- .../modules/core/editor/suggestion.js | 2 +- web-frontend/modules/core/formula/index.js | 38 +- .../modules/core/generativeAIModelTypes.js | 22 +- web-frontend/modules/core/guidedTourTypes.js | 21 +- web-frontend/modules/core/jobTypes.js | 16 +- web-frontend/modules/core/layouts/app.vue | 278 +- web-frontend/modules/core/layouts/login.vue | 14 +- web-frontend/modules/core/locales/de.json | 4 +- web-frontend/modules/core/locales/en.json | 6 +- web-frontend/modules/core/locales/es.json | 2020 +- web-frontend/modules/core/locales/fr.json | 2396 +- web-frontend/modules/core/locales/hu.json | 2 +- web-frontend/modules/core/locales/it.json | 4 +- web-frontend/modules/core/locales/ja.json | 4 +- web-frontend/modules/core/locales/ko.json | 6 +- web-frontend/modules/core/locales/nl.json | 2396 +- web-frontend/modules/core/locales/pl.json | 4 +- web-frontend/modules/core/locales/pt_BR.json | 4 +- .../modules/core/locales/zh_Hans.json | 4 +- web-frontend/modules/core/middleware.js | 1 - .../modules/core/middleware/authenticated.js | 23 +- .../modules/core/middleware/authentication.js | 39 +- .../modules/core/middleware/impersonate.js | 32 + .../modules/core/middleware/pendingJobs.js | 24 +- .../modules/core/middleware/settings.js | 10 +- web-frontend/modules/core/middleware/staff.js | 19 +- .../modules/core/middleware/urlCheck.js | 40 +- .../middleware/workspacesAndApplications.js | 59 +- .../modules/core/mixins/authProviderForm.js | 1 + web-frontend/modules/core/mixins/baseModal.js | 21 +- web-frontend/modules/core/mixins/context.js | 25 +- .../modules/core/mixins/dimensions.js | 2 +- web-frontend/modules/core/mixins/dropdown.js | 104 +- .../modules/core/mixins/dropdownItem.js | 20 +- .../modules/core/mixins/editWorkspace.js | 6 + web-frontend/modules/core/mixins/form.js | 69 +- .../modules/core/mixins/formulaComponent.js | 6 +- .../modules/core/mixins/jobProgress.js | 2 +- .../modules/core/mixins/languageDetection.js | 2 +- web-frontend/modules/core/mixins/modal.js | 19 +- .../modules/core/mixins/moveToBody.js | 15 +- .../core/mixins/notificationContent.js | 2 + .../modules/core/mixins/paginatedDropdown.js | 1 + .../core/mixins/resendEmailVerification.js | 6 +- web-frontend/modules/core/mixins/timeAgo.js | 4 +- web-frontend/modules/core/module.js | 571 +- .../modules/core/notificationTypes.js | 2 +- web-frontend/modules/core/onboardingTypes.js | 6 +- .../modules/core/pages/admin/health.vue | 57 +- .../modules/core/pages/admin/settings.vue | 244 +- .../modules/core/pages/changeEmail.vue | 2 +- web-frontend/modules/core/pages/dashboard.vue | 114 +- .../modules/core/pages/forgotPassword.vue | 175 +- web-frontend/modules/core/pages/index.vue | 15 +- web-frontend/modules/core/pages/login.vue | 93 +- .../modules/core/pages/loginPages.vue | 11 + .../core/pages/notificationRedirect.vue | 58 +- .../modules/core/pages/onboarding.vue | 3 +- web-frontend/modules/core/pages/root.vue | 16 + web-frontend/modules/core/pages/settings.vue | 140 +- web-frontend/modules/core/pages/signup.vue | 168 +- .../modules/core/pages/styleGuide.vue | 18 +- .../modules/core/pages/verifyEmailAddress.vue | 2 +- web-frontend/modules/core/pages/workspace.vue | 341 +- .../modules/core/permissionManagerTypes.js | 6 +- web-frontend/modules/core/plugin.js | 456 +- web-frontend/modules/core/plugins/bus.js | 31 + .../modules/core/plugins/clientHandler.js | 286 +- .../modules/core/plugins/ensureRender.js | 16 +- .../modules/core/plugins/featureFlags.js | 40 +- web-frontend/modules/core/plugins/filters.js | 15 + web-frontend/modules/core/plugins/global.js | 142 +- .../modules/core/plugins/hasFeature.js | 12 +- web-frontend/modules/core/plugins/i18n.js | 18 +- web-frontend/modules/core/plugins/papa.js | 21 +- .../modules/core/plugins/permissions.js | 71 +- web-frontend/modules/core/plugins/posthog.js | 59 +- .../modules/core/plugins/priorityBus.js | 9 +- .../modules/core/plugins/realTimeHandler.js | 34 +- web-frontend/modules/core/plugins/registry.js | 10 + .../modules/core/plugins/routeMounted.js | 37 +- web-frontend/modules/core/plugins/router.js | 26 +- web-frontend/modules/core/plugins/store.js | 43 + .../modules/core/plugins/storeRegister.js | 25 + web-frontend/modules/core/plugins/version.js | 9 +- .../core/plugins/vue2-smooth-scroll.js | 11 +- .../modules/core/plugins/vueDatepicker.js | 10 +- .../modules/core/plugins/vuexState.js | 27 + web-frontend/modules/core/registry.js | 26 +- web-frontend/modules/core/routes.js | 215 +- .../modules/core/runtimeFormulaTypes.js | 96 +- .../modules/core/search/types/base.js | 19 +- ...K3iLTeHuS_fvQtMwCp50KnMa0ZL7W0Q5n-wU.woff2 | Bin 0 -> 17040 bytes ...wrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2 | Bin 0 -> 37780 bytes ...K3iLTeHuS_fvQtMwCp50KnMa1pL7W0Q5n-wU.woff2 | Bin 0 -> 21960 bytes ...K3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2 | Bin 0 -> 57244 bytes ...K3iLTeHuS_fvQtMwCp50KnMa2JL7W0Q5n-wU.woff2 | Bin 0 -> 26728 bytes ...K3iLTeHuS_fvQtMwCp50KnMa2ZL7W0Q5n-wU.woff2 | Bin 0 -> 11924 bytes ...K3iLTeHuS_fvQtMwCp50KnMa2pL7W0Q5n-wU.woff2 | Bin 0 -> 8652 bytes .../core/server/public/img/baserow-icon.svg | 16 + .../core/server/public/img/favicon_16.png | Bin 0 -> 334 bytes .../core/server/public/img/favicon_192.png | Bin 0 -> 3516 bytes .../core/server/public/img/favicon_32.png | Bin 0 -> 518 bytes .../core/server/public/img/favicon_48.png | Bin 0 -> 703 bytes .../public/img/features/advanced_webhooks.png | Bin 0 -> 153040 bytes .../public/img/features/ai_features.png | Bin 0 -> 226236 bytes .../server/public/img/features/audit_logs.png | Bin 0 -> 150579 bytes .../public/img/features/calendar_view.png | Bin 0 -> 125848 bytes .../public/img/features/chart_widget.png | Bin 0 -> 99151 bytes .../public/img/features/co_branding.png | Bin 0 -> 133975 bytes .../server/public/img/features/data_sync.png | Bin 0 -> 156803 bytes .../public/img/features/date_dependency.png | Bin 0 -> 199543 bytes .../img/features/field_level_permissions.png | Bin 0 -> 200399 bytes .../public/img/features/kanban_view.png | Bin 0 -> 173678 bytes .../public/img/features/personal_views.png | Bin 0 -> 131807 bytes .../img/features/public_view_logo_removal.png | Bin 0 -> 208736 bytes .../features/role_based_access_control.png | Bin 0 -> 195189 bytes .../public/img/features/row_coloring.png | Bin 0 -> 271497 bytes .../public/img/features/row_comments.png | Bin 0 -> 168873 bytes .../public/img/features/row_notifications.png | Bin 0 -> 280858 bytes .../core/server/public/img/features/sso.png | Bin 0 -> 104358 bytes .../public/img/features/survey_form.png | Bin 0 -> 45411 bytes .../public/img/features/table_exports.png | Bin 0 -> 199544 bytes .../public/img/features/timeline_view.png | Bin 0 -> 141759 bytes .../core/server/public/img/logo-white.svg | 23 + .../modules/core/server/public/img/logo.svg | 23 + .../core/server/public/img/logoOnly.svg | 16 + .../modules/core/services/authProvider.js | 2 +- web-frontend/modules/core/settingsTypes.js | 22 +- .../modules/core/store/application.js | 63 +- web-frontend/modules/core/store/auth.js | 62 +- .../modules/core/store/authProvider.js | 25 +- .../modules/core/store/integration.js | 31 +- web-frontend/modules/core/store/job.js | 7 +- .../modules/core/store/notification.js | 48 +- web-frontend/modules/core/store/settings.js | 6 +- web-frontend/modules/core/store/undoRedo.js | 3 +- web-frontend/modules/core/store/userSource.js | 30 +- .../modules/core/store/userSourceUser.js | 20 +- web-frontend/modules/core/store/workspace.js | 63 +- .../modules/core/templates/iconoir.js | 1 - .../modules/core/twoFactorAuthTypes.js | 8 +- .../modules/core/userFileUploadTypes.js | 4 +- web-frontend/modules/core/utils/auth.js | 122 +- web-frontend/modules/core/utils/colors.js | 6 +- web-frontend/modules/core/utils/date.js | 2 +- web-frontend/modules/core/utils/dom.js | 40 + web-frontend/modules/core/utils/file.js | 3 +- web-frontend/modules/core/utils/hashing.js | 5 +- web-frontend/modules/core/utils/object.js | 9 +- web-frontend/modules/core/utils/routing.js | 15 + web-frontend/modules/core/utils/string.js | 2 +- web-frontend/modules/core/utils/workspace.js | 33 +- .../modules/core/utils/zipManifest.js | 13 +- .../core/workspaceSettingsPageTypes.js | 4 +- .../modules/core/workspaceSettingsTypes.js | 2 +- .../modules/dashboard/applicationTypes.js | 12 +- .../components/CreateWidgetButton.vue | 1 + .../dashboard/components/CreateWidgetCard.vue | 1 + .../components/CreateWidgetModal.vue | 3 +- .../dashboard/components/EmptyDashboard.vue | 61 +- .../AggregateRowsDataSourceForm.vue | 9 +- .../components/form/DashboardForm.vue | 3 +- .../sidebar/DashboardTemplateSidebar.vue | 1 + .../sidebar/SidebarComponentDashboard.vue | 4 + .../components/widget/SummaryWidget.vue | 1 + .../components/widget/WidgetContextMenu.vue | 1 + .../modules/dashboard/locales/ko.json | 22 +- web-frontend/modules/dashboard/middleware.js | 8 +- .../dashboard/middleware/dashboardLoading.js | 9 +- web-frontend/modules/dashboard/module.js | 112 +- .../modules/dashboard/pages/dashboard.vue | 100 +- web-frontend/modules/dashboard/plugin.js | 125 +- .../modules/dashboard/plugins/realtime.js | 9 + web-frontend/modules/dashboard/routes.js | 12 +- .../dashboard/store/dashboardApplication.js | 43 +- web-frontend/modules/dashboard/widgetTypes.js | 5 +- .../modules/database/applicationTypes.js | 17 +- .../modules/database/arrayViewFilters.js | 64 +- .../modules/database/components/Rating.vue | 36 +- .../aggregation/DistributionAggregation.vue | 10 +- .../aggregation/GenericViewAggregation.vue | 32 +- .../airtable/AirtableImportForm.vue | 1 + .../airtable/ImportFromAirtable.vue | 8 +- .../database/components/card/RowCard.vue | 1 + .../components/card/RowCardFieldArray.vue | 79 +- .../card/RowCardFieldAutonumber.vue | 11 +- .../components/card/RowCardFieldBlank.vue | 3 +- .../components/card/RowCardFieldBoolean.vue | 11 +- .../components/card/RowCardFieldButton.vue | 16 +- .../components/card/RowCardFieldDate.vue | 24 +- .../components/card/RowCardFieldDuration.vue | 14 +- .../components/card/RowCardFieldEmail.vue | 13 +- .../components/card/RowCardFieldFile.vue | 12 +- .../components/card/RowCardFieldFormula.vue | 41 +- .../card/RowCardFieldLastModifiedBy.vue | 19 +- .../components/card/RowCardFieldLinkRow.vue | 34 +- .../components/card/RowCardFieldLinkURL.vue | 16 +- .../RowCardFieldMultipleCollaborators.vue | 24 +- .../card/RowCardFieldMultipleSelect.vue | 11 +- .../components/card/RowCardFieldNumber.vue | 15 +- .../components/card/RowCardFieldPassword.vue | 11 +- .../card/RowCardFieldPhoneNumber.vue | 13 +- .../components/card/RowCardFieldRating.vue | 21 +- .../card/RowCardFieldSingleFile.vue | 16 +- .../card/RowCardFieldSingleSelect.vue | 15 +- .../components/card/RowCardFieldText.vue | 11 +- .../components/card/RowCardFieldURL.vue | 13 +- .../components/card/RowCardFieldUUID.vue | 11 +- .../dataSync/ConfigureDataSyncModal.vue | 2 + .../dataSync/ConfigureDataSyncSettings.vue | 1 + .../ConfigureDataSyncVisibleFields.vue | 1 + .../dataSync/DataSyncTypeChoice.vue | 1 + .../components/dataSync/SyncTableModal.vue | 2 +- .../components/docs/APIDocsExample.vue | 11 +- .../docs/APIDocsFiltersBuilderModal.vue | 29 +- .../components/docs/sections/APIDocsAuth.vue | 13 +- .../docs/sections/APIDocsErrors.vue | 3 +- .../docs/sections/APIDocsListTables.vue | 5 +- .../APIDocsPasswordFieldAuthentication.vue | 3 +- .../docs/sections/APIDocsTableCreateRow.vue | 1 + .../docs/sections/APIDocsTableDeleteRow.vue | 1 + .../docs/sections/APIDocsTableFields.vue | 6 +- .../docs/sections/APIDocsTableGetRow.vue | 1 + .../docs/sections/APIDocsTableListFields.vue | 3 +- .../docs/sections/APIDocsTableListRows.vue | 1 + .../docs/sections/APIDocsTableMoveRow.vue | 2 + .../docs/sections/APIDocsTableUpdateRow.vue | 1 + .../docs/sections/APIDocsUploadFile.vue | 3 +- .../docs/sections/APIDocsUploadFileViaURL.vue | 3 +- .../components/export/ExportTableDropdown.vue | 1 + .../components/export/ExportTableForm.vue | 1 + .../components/export/ExportTableModal.vue | 14 +- .../components/export/ExporterTypeChoice.vue | 1 + .../components/export/ExporterTypeChoices.vue | 7 +- .../field/ChangePrimaryFieldModal.vue | 2 +- .../field/ChooseSingleSelectField.vue | 1 + .../components/field/CreateFieldContext.vue | 10 +- .../components/field/DuplicateFieldModal.vue | 7 +- .../field/FieldCollaboratorSubForm.vue | 1 - .../components/field/FieldConstraintItem.vue | 1 + .../components/field/FieldConstraintItems.vue | 1 + .../field/FieldConstraintsSubForm.vue | 17 +- .../components/field/FieldContext.vue | 1 + .../components/field/FieldDateSubForm.vue | 2 - .../components/field/FieldDurationSubForm.vue | 1 - .../database/components/field/FieldForm.vue | 5 +- .../components/field/FieldFormulaSubForm.vue | 1 + .../components/field/FieldLinkRowSubForm.vue | 1 + .../components/field/FieldLongTextSubForm.vue | 3 +- .../FieldMultipleSelectOptionsSubForm.vue | 1 + .../components/field/FieldRatingSubForm.vue | 1 - .../components/field/FieldSelectOptions.vue | 18 +- .../field/FieldSelectOptionsDropdown.vue | 7 +- .../field/FieldSelectTargetFieldSubForm.vue | 1 + .../field/FieldSelectThroughFieldSubForm.vue | 1 + .../field/FieldSingleSelectOptionsSubForm.vue | 1 + .../components/field/FieldTextSubForm.vue | 1 - .../components/field/FileFieldModal.vue | 1 + .../components/field/InsertFieldContext.vue | 1 + .../components/field/UpdateFieldContext.vue | 5 +- .../components/form/BlankDatabaseForm.vue | 2 +- .../database/components/form/DatabaseForm.vue | 1 + .../formula/FieldFormulaInitialSubForm.vue | 1 + .../formula/FormulaAdvancedEditContext.vue | 32 +- .../formula/FormulaFieldItemGroup.vue | 1 + .../FunctionalFormulaArrayDurationItem.vue | 16 +- .../array/FunctionalFormulaArrayItem.vue | 14 +- .../array/FunctionalFormulaArrayItems.vue | 61 +- .../FunctionalFormulaArrayNumberItem.vue | 24 +- .../FunctionalFormulaBooleanArrayItem.vue | 10 +- .../FunctionalFormulaButtonArrayItem.vue | 18 +- .../array/FunctionalFormulaDateArrayItem.vue | 18 +- .../array/FunctionalFormulaFileArrayItem.vue | 36 +- .../array/FunctionalFormulaLinkArrayItem.vue | 24 +- ...lFormulaMultipleCollaboratorsArrayItem.vue | 16 +- ...nctionalFormulaMultipleSelectArrayItem.vue | 10 +- ...FunctionalFormulaSingleSelectArrayItem.vue | 14 +- .../array/FunctionalFormulaURLArrayItem.vue | 24 +- .../CollaboratorAddedToRowNotification.vue | 7 +- .../FormSubmittedNotification.vue | 9 +- ...UserMentionInRichTextFieldNotification.vue | 7 +- .../WebhookDeactivatedNotification.vue | 7 +- .../WebhookPayloadTooLargeNotification.vue | 7 +- .../onboarding/DatabaseImportStep.vue | 3 +- .../DatabaseScratchTrackFieldsStep.vue | 1 + .../onboarding/DatabaseScratchTrackStep.vue | 1 + .../components/onboarding/DatabaseStep.vue | 5 +- .../onboarding/DatabaseTablePreview.vue | 53 +- .../onboarding/TemplateImportForm.vue | 1 + .../components/row/ForeignRowEditModal.vue | 4 +- .../components/row/RowCreateModal.vue | 20 +- .../components/row/RowEditFieldBoolean.vue | 1 + .../components/row/RowEditFieldDate.vue | 19 +- .../components/row/RowEditFieldFile.vue | 4 +- .../components/row/RowEditFieldLinkRow.vue | 3 +- .../components/row/RowEditFieldNumber.vue | 16 +- .../components/row/RowEditFieldRating.vue | 1 + .../database/components/row/RowEditModal.vue | 26 +- .../components/row/RowEditModalField.vue | 7 + .../components/row/RowEditModalFieldsList.vue | 8 + .../row/RowEditModalHiddenFieldsSection.vue | 1 + .../row/RowHistoryFieldRichText.vue | 4 +- .../components/row/RowHistorySidebar.vue | 4 +- .../components/row/SelectRowContent.vue | 10 +- .../components/row/SelectRowModal.vue | 1 + .../database/components/settings/APIToken.vue | 1 + .../database/components/sidebar/Sidebar.vue | 2 +- .../components/sidebar/SidebarItem.vue | 10 +- .../components/sidebar/TemplateSidebar.vue | 3 +- .../SidebarDuplicateTableContextItem.vue | 1 + .../components/table/CreateDataSync.vue | 7 +- .../database/components/table/CreateTable.vue | 19 +- .../components/table/CreateTableModal.vue | 6 +- .../components/table/ImportFileModal.vue | 20 +- .../database/components/table/Table.vue | 12 +- .../components/table/TableCSVImporter.vue | 13 +- .../components/table/TableJSONImporter.vue | 16 +- .../components/table/TablePasteImporter.vue | 7 +- .../components/table/TableTemplate.vue | 5 +- .../components/table/TableXMLImporter.vue | 13 +- .../components/view/CreateViewLink.vue | 1 + .../components/view/CreateViewModal.vue | 3 +- .../view/DecoratorValueProviderItem.vue | 8 +- .../view/DecoratorValueProviderList.vue | 1 + .../components/view/FieldRichTextModal.vue | 9 +- .../view/SelectViewDecoratorContext.vue | 1 + .../components/view/ShareViewLink.vue | 2 +- .../database/components/view/ViewContext.vue | 3 +- .../components/view/ViewDecoratorContext.vue | 2 +- .../components/view/ViewDecoratorItem.vue | 10 +- .../components/view/ViewDecoratorList.vue | 1 + .../components/view/ViewDecoratorMenu.vue | 3 +- .../view/ViewFieldConditionGroup.vue | 40 +- .../view/ViewFieldConditionItem.vue | 3 +- .../view/ViewFieldConditionsForm.vue | 27 +- .../components/view/ViewFieldsContext.vue | 8 +- .../database/components/view/ViewFilter.vue | 5 +- .../components/view/ViewFilterForm.vue | 19 +- .../view/ViewFilterFormOperator.vue | 1 + .../components/view/ViewFilterTypeBoolean.vue | 1 + .../view/ViewFilterTypeCollaborators.vue | 1 + .../components/view/ViewFilterTypeDate.vue | 6 +- .../ViewFilterTypeDateUpgradeToMultiStep.vue | 8 +- .../view/ViewFilterTypeFileTypeDropdown.vue | 1 + .../components/view/ViewFilterTypeLinkRow.vue | 1 + .../view/ViewFilterTypeMultiStepDate.vue | 13 +- .../ViewFilterTypeMultipleSelectOptions.vue | 1 + .../components/view/ViewFilterTypeNumber.vue | 1 + .../components/view/ViewFilterTypeRating.vue | 1 + .../view/ViewFilterTypeSelectOptions.vue | 1 + .../components/view/ViewFilterTypeText.vue | 1 + .../view/ViewFilterTypeTimeZone.vue | 1 + .../database/components/view/ViewGroupBy.vue | 3 +- .../components/view/ViewGroupByContext.vue | 3 +- .../components/view/ViewRotateSlugModal.vue | 2 +- .../database/components/view/ViewSearch.vue | 3 +- .../components/view/ViewSearchContext.vue | 2 + .../database/components/view/ViewSort.vue | 3 +- .../components/view/ViewSortContext.vue | 3 +- .../components/view/ViewSortOrder.vue | 1 + .../database/components/view/ViewsContext.vue | 3 +- .../components/view/ViewsContextItem.vue | 1 + .../components/view/form/FormPageField.vue | 1 + .../view/form/FormPrefillOrHideModal.vue | 2 +- .../components/view/form/FormView.vue | 3 +- .../components/view/form/FormViewField.vue | 15 +- .../view/form/FormViewFieldLinkRow.vue | 1 + ...ewFieldMultipleCollaboratorsCheckboxes.vue | 1 + .../form/FormViewFieldMultipleLinkRow.vue | 1 + .../FormViewFieldMultipleSelectCheckboxes.vue | 1 + ...rmViewFieldOptionsAllowedSelectOptions.vue | 1 + .../components/view/form/FormViewHeader.vue | 4 +- .../view/form/FormViewImageUpload.vue | 1 + .../view/form/FormViewMetaControls.vue | 3 +- .../view/form/FormViewModeContext.vue | 2 +- .../components/view/form/FormViewModeForm.vue | 1 + .../view/form/FormViewModePreviewForm.vue | 1 + .../components/view/form/FormViewPreview.vue | 1 + .../components/view/form/FormViewSidebar.vue | 1 + .../view/form/FormViewSidebarField.vue | 5 +- .../components/view/gallery/GalleryView.vue | 39 +- .../view/gallery/GalleryViewHeader.vue | 16 +- .../components/view/grid/GridView.vue | 36 +- .../components/view/grid/GridViewCell.vue | 414 +- .../view/grid/GridViewFieldDragging.vue | 40 +- .../view/grid/GridViewFieldFooter.vue | 24 +- .../view/grid/GridViewFieldType.vue | 11 +- .../components/view/grid/GridViewGroup.vue | 34 +- .../components/view/grid/GridViewGroups.vue | 34 +- .../components/view/grid/GridViewHead.vue | 3 +- .../components/view/grid/GridViewHeader.vue | 1 + .../components/view/grid/GridViewHide.vue | 11 +- .../view/grid/GridViewPlaceholder.vue | 22 +- .../components/view/grid/GridViewRow.vue | 46 +- .../components/view/grid/GridViewRowAdd.vue | 15 +- .../view/grid/GridViewRowDragging.vue | 68 +- .../view/grid/GridViewRowExpandButton.vue | 14 +- .../grid/GridViewRowIdentifierDropdown.vue | 1 + .../components/view/grid/GridViewRows.vue | 82 +- .../components/view/grid/GridViewSection.vue | 105 +- .../components/view/grid/SimpleGrid.vue | 16 +- .../FunctionalGridVIewFieldPassword.vue | 18 +- .../fields/FunctionalGridViewFieldArray.vue | 80 +- .../FunctionalGridViewFieldAutonumber.vue | 18 +- .../fields/FunctionalGridViewFieldBlank.vue | 10 +- .../fields/FunctionalGridViewFieldBoolean.vue | 21 +- .../fields/FunctionalGridViewFieldButton.vue | 18 +- .../fields/FunctionalGridViewFieldDate.vue | 29 +- .../FunctionalGridViewFieldDuration.vue | 17 +- .../fields/FunctionalGridViewFieldFile.vue | 66 +- .../fields/FunctionalGridViewFieldFormula.vue | 38 +- .../FunctionalGridViewFieldLastModifiedBy.vue | 21 +- .../fields/FunctionalGridViewFieldLinkRow.vue | 31 +- .../fields/FunctionalGridViewFieldLinkURL.vue | 26 +- .../FunctionalGridViewFieldLongText.vue | 16 +- ...onalGridViewFieldMultipleCollaborators.vue | 16 +- .../FunctionalGridViewFieldMultipleSelect.vue | 18 +- .../fields/FunctionalGridViewFieldNumber.vue | 29 +- .../FunctionalGridViewFieldPhoneNumber.vue | 16 +- .../fields/FunctionalGridViewFieldRating.vue | 30 +- .../FunctionalGridViewFieldRichText.vue | 22 +- .../FunctionalGridViewFieldSingleSelect.vue | 26 +- .../fields/FunctionalGridViewFieldText.vue | 18 +- .../fields/FunctionalGridViewFieldURL.vue | 12 +- .../fields/FunctionalGridViewFieldUUID.vue | 18 +- .../fields/FunctionalGridViewSingleFile.vue | 16 +- .../view/grid/fields/GridViewFieldArray.vue | 27 +- .../view/grid/fields/GridViewFieldBoolean.vue | 15 +- .../view/grid/fields/GridViewFieldDate.vue | 16 +- .../grid/fields/GridViewFieldDuration.vue | 1 + .../view/grid/fields/GridViewFieldEmail.vue | 1 + .../view/grid/fields/GridViewFieldFile.vue | 9 +- .../view/grid/fields/GridViewFieldFormula.vue | 31 +- .../view/grid/fields/GridViewFieldLinkRow.vue | 21 +- .../view/grid/fields/GridViewFieldNumber.vue | 1 + .../grid/fields/GridViewFieldPhoneNumber.vue | 1 + .../view/grid/fields/GridViewFieldRating.vue | 5 +- .../grid/fields/GridViewFieldRichText.vue | 17 +- .../view/grid/fields/GridViewFieldURL.vue | 1 + .../grid/fields/GridViewRowsAddContext.vue | 3 +- .../view/grid/fields/GridViewSingleFile.vue | 2 +- .../view/public/DisablePasswordModal.vue | 2 +- .../view/public/EnablePasswordModal.vue | 2 +- .../components/webhook/CreateWebhook.vue | 1 + .../components/webhook/DeleteWebhookModal.vue | 3 +- .../components/webhook/TestWebhookModal.vue | 2 +- .../components/webhook/UpdateWebhook.vue | 5 +- .../database/components/webhook/Webhook.vue | 3 +- .../components/webhook/WebhookForm.vue | 7 +- .../components/webhook/WebhookList.vue | 1 + .../components/webhook/WebhookModal.vue | 3 +- .../database/configureDataSyncTypes.js | 4 +- .../modules/database/dataProviderTypes.js | 2 +- .../modules/database/dataSyncTypes.js | 4 +- .../modules/database/exporterTypes.js | 2 +- .../modules/database/fieldConstraintTypes.js | 2 +- web-frontend/modules/database/fieldTypes.js | 198 +- .../modules/database/filePreviewTypes.js | 12 +- .../modules/database/formViewModeTypes.js | 4 +- .../modules/database/formula/functions.js | 194 +- .../modules/database/guidedTourTypes.js | 35 +- .../modules/database/importerTypes.js | 8 +- web-frontend/modules/database/jobTypes.js | 8 +- web-frontend/modules/database/locales/de.json | 1938 +- web-frontend/modules/database/locales/en.json | 6 +- web-frontend/modules/database/locales/es.json | 2146 +- web-frontend/modules/database/locales/fr.json | 2370 +- web-frontend/modules/database/locales/it.json | 2010 +- web-frontend/modules/database/locales/ko.json | 2 +- web-frontend/modules/database/locales/nl.json | 2370 +- web-frontend/modules/database/locales/pl.json | 1782 +- web-frontend/modules/database/middleware.js | 1 - .../selectWorkspaceDatabaseTable.js | 28 + .../database/middleware/tableLoading.js | 51 +- .../modules/database/mixins/arrayLoading.js | 2 + .../database/mixins/baseFormViewMode.js | 7 +- .../mixins/bufferedRowsDragAndDrop.js | 39 +- .../database/mixins/collaboratorField.js | 1 + .../modules/database/mixins/dataSync.js | 6 +- .../database/mixins/fieldOptionsSubForm.js | 4 +- .../modules/database/mixins/fileField.js | 2 + .../database/mixins/filterTypeDateInput.js | 1 + .../database/mixins/filterTypeInput.js | 18 +- .../mixins/filterTypeMultiStepDateInput.js | 1 + .../database/mixins/formViewHelpers.js | 16 +- .../modules/database/mixins/gridField.js | 87 +- .../modules/database/mixins/gridFieldInput.js | 28 +- .../database/mixins/gridViewHelpers.js | 17 +- .../modules/database/mixins/importer.js | 2 + .../modules/database/mixins/linkRowField.js | 6 +- .../database/mixins/multipleSelectField.js | 1 + .../modules/database/mixins/numberField.js | 4 +- .../modules/database/mixins/rowEditField.js | 1 + .../database/mixins/rowEditFieldInput.js | 2 + .../modules/database/mixins/selectDropdown.js | 12 +- .../database/mixins/singleSelectField.js | 1 + .../modules/database/mixins/viewHelpers.js | 2 + web-frontend/modules/database/module.js | 65 +- .../modules/database/pages/APIDocs.vue | 63 +- .../database/pages/APIDocsDatabase.vue | 592 +- web-frontend/modules/database/pages/form.vue | 440 +- .../modules/database/pages/publicView.vue | 211 +- .../database/pages/publicViewLogin.vue | 166 +- web-frontend/modules/database/pages/root.vue | 16 + web-frontend/modules/database/pages/table.vue | 586 +- web-frontend/modules/database/plugin.js | 1410 +- .../modules/database/plugin/realtime.js | 9 + web-frontend/modules/database/plugin/store.js | 72 + web-frontend/modules/database/roleTypes.js | 8 +- web-frontend/modules/database/routes.js | 44 +- .../modules/database/rowModalSidebarTypes.js | 2 +- .../modules/database/settingsTypes.js | 2 +- web-frontend/modules/database/store/field.js | 47 +- .../modules/database/store/fieldRules.js | 17 +- .../modules/database/store/rowHistory.js | 6 +- .../database/store/rowModalNavigation.js | 6 +- web-frontend/modules/database/store/table.js | 41 +- web-frontend/modules/database/store/view.js | 135 +- .../database/store/view/bufferedRows.js | 64 +- .../database/store/view/fieldOptions.js | 6 +- .../modules/database/store/view/form.js | 9 +- .../modules/database/store/view/grid.js | 193 +- .../modules/database/store/view/public.js | 11 +- web-frontend/modules/database/utils/action.js | 4 +- web-frontend/modules/database/utils/date.js | 2 +- .../modules/database/utils/duration.js | 4 +- web-frontend/modules/database/utils/number.js | 4 +- web-frontend/modules/database/utils/row.js | 8 +- web-frontend/modules/database/utils/search.js | 2 +- web-frontend/modules/database/utils/view.js | 35 +- .../modules/database/viewAggregationTypes.js | 54 +- web-frontend/modules/database/viewFilters.js | 118 +- .../modules/database/viewOwnershipTypes.js | 4 +- web-frontend/modules/database/viewTypes.js | 20 +- .../modules/database/webhookEventTypes.js | 22 +- .../ai/components/integrations/AIForm.vue | 8 +- .../services/AIAgentServiceForm.vue | 2 +- .../integrations/ai/integrationTypes.js | 11 +- .../modules/integrations/ai/serviceTypes.js | 12 +- .../services/CoreHTTPTriggerServiceForm.vue | 2 +- .../services/CorePeriodicServiceForm.vue | 2 +- .../integrations/core/integrationTypes.js | 4 +- .../modules/integrations/core/serviceTypes.js | 40 +- .../integrations/LocalBaserowAdhocHeader.vue | 1 + .../integrations/LocalBaserowForm.vue | 4 +- .../services/FieldMappingContext.vue | 7 +- .../components/services/FieldMappingForm.vue | 1 + .../components/services/FieldMappingsForm.vue | 18 +- .../LocalBaserowDeleteRowServiceForm.vue | 1 - .../services/LocalBaserowServiceForm.vue | 3 +- .../services/LocalBaserowTableSelector.vue | 20 +- ...ocalBaserowTableServiceConditionalForm.vue | 37 +- .../LocalBaserowTableServiceSortForm.vue | 9 +- .../LocalBaserowUpdateRowServiceForm.vue | 6 +- .../LocalBaserowUpsertRowServiceForm.vue | 1 + .../services/ServiceRefinementForms.vue | 48 +- .../localBaserow/integrationTypes.js | 12 +- .../integrations/localBaserow/serviceTypes.js | 58 +- .../modules/integrations/locales/de.json | 10 +- .../modules/integrations/locales/en.json | 20 +- .../modules/integrations/locales/fr.json | 640 +- .../modules/integrations/locales/it.json | 170 +- .../modules/integrations/locales/ko.json | 18 +- .../modules/integrations/locales/nl.json | 20 +- web-frontend/modules/integrations/module.js | 52 +- web-frontend/modules/integrations/plugin.js | 121 +- .../components/integrations/SlackBotForm.vue | 29 +- .../integrations/slack/integrationTypes.js | 8 +- .../integrations/slack/serviceTypes.js | 12 +- web-frontend/nuxt.config.js | 3 - web-frontend/nuxt.config.ts | 5 + web-frontend/package.json | 253 +- web-frontend/public/favicon.ico | Bin 0 -> 4286 bytes web-frontend/public/robots.txt | 2 + web-frontend/rootNode.sh | 18 + web-frontend/server/tsconfig.json | 3 + web-frontend/stories/Alert.stories.js | 276 + web-frontend/stories/Alert.stories.mdx | 191 - web-frontend/stories/Avatar.stories.js | 156 + web-frontend/stories/Avatar.stories.mdx | 110 - web-frontend/stories/Badge.stories.js | 174 + web-frontend/stories/Badge.stories.mdx | 106 - .../stories/BadgeCollaborator.stories.js | 88 + .../stories/BadgeCollaborator.stories.mdx | 85 - web-frontend/stories/BadgeCounter.stories.js | 98 + web-frontend/stories/BadgeCounter.stories.mdx | 74 - web-frontend/stories/Button.stories.js | 169 + web-frontend/stories/Button.stories.mdx | 117 - web-frontend/stories/ButtonAdd.stories.js | 39 + web-frontend/stories/ButtonAdd.stories.mdx | 56 - .../stories/ButtonFloating.stories.js | 95 + .../stories/ButtonFloating.stories.mdx | 85 - web-frontend/stories/ButtonIcon.stories.js | 101 + web-frontend/stories/ButtonIcon.stories.mdx | 112 - web-frontend/stories/ButtonText.stories.js | 112 + web-frontend/stories/ButtonText.stories.mdx | 141 - web-frontend/stories/Checkbox.stories.js | 75 + web-frontend/stories/Checkbox.stories.mdx | 106 - web-frontend/stories/Chips.stories.js | 77 + web-frontend/stories/Chips.stories.mdx | 83 - web-frontend/stories/Context.stories.js | 127 + web-frontend/stories/Context.stories.mdx | 111 - web-frontend/stories/Dropdown.stories.js | 141 + web-frontend/stories/Dropdown.stories.mdx | 160 - web-frontend/stories/FormGroup.stories.js | 115 + web-frontend/stories/FormGroup.stories.mdx | 151 - web-frontend/stories/FormInput.stories.js | 146 + web-frontend/stories/FormInput.stories.mdx | 163 - web-frontend/stories/FormTextarea.stories.js | 96 + web-frontend/stories/FormTextarea.stories.mdx | 117 - .../stories/FormulaInputField.stories.js | 507 + .../stories/FormulaInputField.stories.mdx | 617 - web-frontend/stories/Paginator.stories.js | 57 + web-frontend/stories/Paginator.stories.mdx | 88 - web-frontend/stories/ProgressBar.stories.js | 65 + web-frontend/stories/ProgressBar.stories.mdx | 75 - web-frontend/stories/Radio.stories.js | 80 + web-frontend/stories/Radio.stories.mdx | 105 - web-frontend/stories/RadioButton.stories.js | 59 + web-frontend/stories/RadioButton.stories.mdx | 117 - web-frontend/stories/RadioCard.stories.js | 60 + web-frontend/stories/RadioCard.stories.mdx | 103 - web-frontend/stories/RadioGroup.stories.js | 50 + web-frontend/stories/RadioGroup.stories.mdx | 106 - .../stories/SegmentControl.stories.js | 38 + .../stories/SegmentControl.stories.mdx | 129 - web-frontend/stories/SwitchInput.stories.js | 71 + web-frontend/stories/SwitchInput.stories.mdx | 106 - web-frontend/stories/Tabs.stories.js | 76 + web-frontend/stories/Tabs.stories.mdx | 135 - web-frontend/stories/Toast.stories.js | 133 + web-frontend/stories/Toast.stories.mdx | 176 - .../{.stylelintrc.js => stylelint.config.mjs} | 28 +- web-frontend/test/fixtures/mockServer.js | 32 + web-frontend/test/helpers/components.js | 10 +- web-frontend/test/helpers/testApp.js | 128 +- web-frontend/test/helpers/userAdminHelpers.js | 11 +- .../test/server/core/pages/server.spec.js | 11 +- .../elements/components/ChoiceElement.spec.js | 18 +- .../components/DateTimePickerElement.spec.js | 18 +- .../components/HeadingElement.spec.js | 19 +- .../components/RecordSelectorElement.spec.js | 36 +- .../__snapshots__/ChoiceElement.spec.js.snap | 213 +- .../DateTimePickerElement.spec.js.snap | 320 +- .../__snapshots__/HeadingElement.spec.js.snap | 10 +- .../RecordSelectorElement.spec.js.snap | 744 +- .../test/unit/builder/elementTypes.spec.js | 233 +- .../unit/builder/store/dataSource.spec.js | 20 +- .../__snapshots__/userAdmin.spec.js.snap | 393 + .../unit/core/admin/users/userAdmin.spec.js | 33 +- .../__snapshots__/dropdown.spec.js.snap | 987 +- .../__snapshots__/radioButton.spec.js.snap | 16 + .../unit/core/components/buttonText.spec.js | 42 +- .../unit/core/components/dropdown.spec.js | 16 +- .../test/unit/core/components/error.spec.js | 7 +- .../unit/core/components/formGroup.spec.js | 32 +- .../unit/core/components/formInput.spec.js | 19 +- .../unit/core/components/formTextarea.spec.js | 8 +- .../unit/core/components/paginator.spec.js | 2 +- .../core/components/passwordInput.spec.js | 24 +- .../test/unit/core/components/radioButton.js | 37 - .../unit/core/components/radioButton.spec.js | 38 + .../unit/core/components/radioGroup.spec.js | 23 +- .../core/components/segmentControl.spec.js | 2 +- .../test/unit/core/components/tab.spec.js | 8 +- .../test/unit/core/components/tabs.spec.js | 14 +- .../core/components/textElementForm.spec.js | 34 +- .../core/formula/fromTipTapVisitor.spec.js | 2 +- .../core/formula/runtimeFormulaTypes.spec.js | 14 +- .../unit/core/formula/toTipTapVisitor.spec.js | 2 +- .../test/unit/core/store/notification.spec.js | 9 +- .../test/unit/core/store/workspace.spec.js | 84 +- .../test/unit/core/utils/authRefresh.spec.js | 12 +- .../test/unit/core/utils/errors.spec.js | 14 +- .../test/unit/core/utils/events.spec.js | 2 +- .../test/unit/core/utils/object.spec.js | 8 +- .../test/unit/core/utils/queue.spec.js | 52 +- .../test/unit/core/utils/sort.spec.js | 6 +- .../test/unit/core/utils/string.spec.js | 18 +- web-frontend/test/unit/core/utils/url.spec.js | 18 +- .../test/unit/core/utils/validator.spec.js | 84 +- .../__snapshots__/publicView.spec.js.snap | 757 +- .../database/arrayViewFiltersMatch.spec.js | 18 +- .../__snapshots__/preview.spec.js.snap | 132 +- .../__snapshots__/rating.spec.js.snap | 10 +- .../exportTableModal.spec.js.snap | 2084 +- .../export/exportTableModal.spec.js | 7 +- .../unit/database/components/preview.spec.js | 2 +- .../unit/database/components/rating.spec.js | 6 +- .../viewDecoratorContext.spec.js.snap | 351 +- .../__snapshots__/viewFilterForm.spec.js.snap | 1358 +- .../galleryViewDecoration.spec.js.snap | 185 +- .../gallery/galleryViewDecoration.spec.js | 59 +- .../gridViewDecoration.spec.js.snap | 775 +- .../gridViewFieldFooter.spec.js.snap | 63 +- .../__snapshots__/gridViewRows.spec.js.snap | 311 +- .../gridViewFieldLookup.spec.js.snap | 14 +- .../grid/fields/gridViewFieldFile.spec.js | 16 +- .../grid/fields/gridViewFieldLookup.spec.js | 8 +- .../view/grid/gridViewDecoration.spec.js | 65 +- .../view/grid/gridViewFieldFooter.spec.js | 6 +- .../components/view/grid/gridViewRows.spec.js | 8 +- .../view/viewDecoratorContext.spec.js | 56 +- .../components/view/viewFilterForm.spec.js | 109 +- .../test/unit/database/fieldTypes.spec.js | 14 +- .../durationFieldTypeGetSort.spec.js | 33 +- .../formulaFieldTypeGetSort.spec.js | 3 +- .../lastModifiedByFieldTypeGetSort.spec.js | 74 +- .../unit/database/fieldTypesGetSort.spec.js | 28 +- .../database/formula/formulaFunctions.spec.js | 2 +- .../gridViewCheckboxSelection.spec.js | 31 +- .../unit/database/mixins/importer.spec.js | 8 +- .../test/unit/database/mixins/number.spec.js | 16 +- .../test/unit/database/publicView.spec.js | 29 +- .../unit/database/richTextPasting.spec.js | 8 +- .../test/unit/database/store/rowModal.spec.js | 45 +- .../view/__snapshots__/grid.spec.js.snap | 4 +- .../database/store/view/bufferedRows.spec.js | 252 +- .../unit/database/store/view/grid.spec.js | 92 +- .../store/view/gridMultiSelect.spec.js | 38 +- .../database/store/view/viewDecorator.spec.js | 20 +- web-frontend/test/unit/database/table.spec.js | 40 +- .../test/unit/database/utils/field.spec.js | 6 +- .../test/unit/database/utils/form.spec.js | 2 +- .../test/unit/database/utils/row.spec.js | 10 +- .../test/unit/database/utils/view.spec.js | 32 +- .../database/utils/virtualScrolling.spec.js | 4 +- .../test/unit/database/utils/xml.spec.js | 6 +- web-frontend/test/unit/database/view.spec.js | 272 +- .../unit/database/viewAggregationType.spec.js | 6 +- .../test/unit/database/viewFilters.spec.js | 2 +- .../unit/database/viewFiltersMatch.spec.js | 19 +- .../database/webhooks/webhookForm.spec.js | 2 +- .../unit/formula/javascriptExecutor.spec.js | 2 +- .../localBaserow/serviceTypes.spec.js | 8 +- web-frontend/tsconfig.json | 4 + web-frontend/vitest.config.ts | 58 + web-frontend/vitest.setup.ts | 102 + web-frontend/yarn.lock | 26291 +++++----------- 1444 files changed, 52873 insertions(+), 56424 deletions(-) create mode 100644 changelog/entries/unreleased/refactor/refactor_children.json create mode 100644 enterprise/web-frontend/.prettierignore delete mode 100644 enterprise/web-frontend/babel.config.js create mode 100644 enterprise/web-frontend/eslint.config.mjs delete mode 100644 enterprise/web-frontend/jest.setup.js create mode 100644 enterprise/web-frontend/modules/baserow_enterprise/plugins/realtime.js create mode 100644 enterprise/web-frontend/package.json create mode 100644 enterprise/web-frontend/vitest.config.ts create mode 100644 premium/web-frontend/.prettierignore delete mode 100644 premium/web-frontend/babel.config.js create mode 100644 premium/web-frontend/eslint.config.mjs delete mode 100644 premium/web-frontend/jest.setup.js create mode 100644 premium/web-frontend/modules/baserow_premium/pages/root.vue create mode 100644 premium/web-frontend/modules/baserow_premium/plugins/realtime.js create mode 100644 premium/web-frontend/package.json create mode 100644 premium/web-frontend/vitest.config.ts delete mode 100644 web-frontend/.eslintignore delete mode 100644 web-frontend/.eslintrc.js create mode 100644 web-frontend/.gitignore delete mode 100644 web-frontend/.storybook/main.js create mode 100644 web-frontend/.storybook/main.ts delete mode 100644 web-frontend/.storybook/preview.js create mode 100644 web-frontend/.storybook/preview.ts create mode 100644 web-frontend/app.vue delete mode 100644 web-frontend/babel.config.js delete mode 100644 web-frontend/config/nuxt.config.base.js create mode 100644 web-frontend/config/nuxt.config.base.ts delete mode 100644 web-frontend/config/nuxt.config.demo.js delete mode 100644 web-frontend/config/nuxt.config.dev.js create mode 100644 web-frontend/config/nuxt.config.dev.ts delete mode 100644 web-frontend/config/nuxt.config.local.js create mode 100644 web-frontend/config/nuxt.config.local.ts delete mode 100644 web-frontend/config/nuxt.config.prod.js create mode 100644 web-frontend/config/nuxt.config.prod.ts delete mode 100644 web-frontend/config/nuxt.config.test.js create mode 100644 web-frontend/config/nuxt.config.test.ts rename web-frontend/{modules/core/layouts => }/error.vue (100%) create mode 100644 web-frontend/eslint.config.common.mjs create mode 100644 web-frontend/eslint.config.mjs create mode 100644 web-frontend/i18n.config.ts create mode 120000 web-frontend/i18n/locales delete mode 100644 web-frontend/jest.setup.js create mode 100644 web-frontend/modules/automation/plugins/realtime.js create mode 100644 web-frontend/modules/builder/composables/useApplicationContext.js create mode 100644 web-frontend/modules/builder/composables/useCollectionElement.js create mode 100644 web-frontend/modules/builder/composables/useElement.js create mode 100644 web-frontend/modules/builder/composables/useResolveFormula.js create mode 100644 web-frontend/modules/builder/middleware/selectWorkspaceBuilderPage.js create mode 100644 web-frontend/modules/builder/plugins/realtime.js create mode 100644 web-frontend/modules/core/assets/scss/colors.module.scss create mode 100644 web-frontend/modules/core/assets/scss/components/nuxt_loading_indicator.scss create mode 100644 web-frontend/modules/core/pages/loginPages.vue create mode 100644 web-frontend/modules/core/pages/root.vue create mode 100644 web-frontend/modules/core/plugins/bus.js create mode 100644 web-frontend/modules/core/plugins/filters.js create mode 100644 web-frontend/modules/core/plugins/registry.js create mode 100644 web-frontend/modules/core/plugins/store.js create mode 100644 web-frontend/modules/core/plugins/storeRegister.js create mode 100644 web-frontend/modules/core/plugins/vuexState.js create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa0ZL7W0Q5n-wU.woff2 create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2 create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1pL7W0Q5n-wU.woff2 create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa25L7W0Q5n-wU.woff2 create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2JL7W0Q5n-wU.woff2 create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2ZL7W0Q5n-wU.woff2 create mode 100644 web-frontend/modules/core/server/public/fonts/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa2pL7W0Q5n-wU.woff2 create mode 100644 web-frontend/modules/core/server/public/img/baserow-icon.svg create mode 100644 web-frontend/modules/core/server/public/img/favicon_16.png create mode 100644 web-frontend/modules/core/server/public/img/favicon_192.png create mode 100644 web-frontend/modules/core/server/public/img/favicon_32.png create mode 100644 web-frontend/modules/core/server/public/img/favicon_48.png create mode 100644 web-frontend/modules/core/server/public/img/features/advanced_webhooks.png create mode 100644 web-frontend/modules/core/server/public/img/features/ai_features.png create mode 100644 web-frontend/modules/core/server/public/img/features/audit_logs.png create mode 100644 web-frontend/modules/core/server/public/img/features/calendar_view.png create mode 100644 web-frontend/modules/core/server/public/img/features/chart_widget.png create mode 100644 web-frontend/modules/core/server/public/img/features/co_branding.png create mode 100644 web-frontend/modules/core/server/public/img/features/data_sync.png create mode 100644 web-frontend/modules/core/server/public/img/features/date_dependency.png create mode 100644 web-frontend/modules/core/server/public/img/features/field_level_permissions.png create mode 100644 web-frontend/modules/core/server/public/img/features/kanban_view.png create mode 100644 web-frontend/modules/core/server/public/img/features/personal_views.png create mode 100644 web-frontend/modules/core/server/public/img/features/public_view_logo_removal.png create mode 100644 web-frontend/modules/core/server/public/img/features/role_based_access_control.png create mode 100644 web-frontend/modules/core/server/public/img/features/row_coloring.png create mode 100644 web-frontend/modules/core/server/public/img/features/row_comments.png create mode 100644 web-frontend/modules/core/server/public/img/features/row_notifications.png create mode 100644 web-frontend/modules/core/server/public/img/features/sso.png create mode 100644 web-frontend/modules/core/server/public/img/features/survey_form.png create mode 100644 web-frontend/modules/core/server/public/img/features/table_exports.png create mode 100644 web-frontend/modules/core/server/public/img/features/timeline_view.png create mode 100644 web-frontend/modules/core/server/public/img/logo-white.svg create mode 100644 web-frontend/modules/core/server/public/img/logo.svg create mode 100644 web-frontend/modules/core/server/public/img/logoOnly.svg delete mode 100644 web-frontend/modules/core/templates/iconoir.js create mode 100644 web-frontend/modules/core/utils/routing.js create mode 100644 web-frontend/modules/dashboard/plugins/realtime.js create mode 100644 web-frontend/modules/database/middleware/selectWorkspaceDatabaseTable.js create mode 100644 web-frontend/modules/database/pages/root.vue create mode 100644 web-frontend/modules/database/plugin/realtime.js create mode 100644 web-frontend/modules/database/plugin/store.js delete mode 100644 web-frontend/nuxt.config.js create mode 100644 web-frontend/nuxt.config.ts create mode 100644 web-frontend/public/favicon.ico create mode 100644 web-frontend/public/robots.txt create mode 100755 web-frontend/rootNode.sh create mode 100644 web-frontend/server/tsconfig.json create mode 100644 web-frontend/stories/Alert.stories.js delete mode 100644 web-frontend/stories/Alert.stories.mdx create mode 100644 web-frontend/stories/Avatar.stories.js delete mode 100644 web-frontend/stories/Avatar.stories.mdx create mode 100644 web-frontend/stories/Badge.stories.js delete mode 100644 web-frontend/stories/Badge.stories.mdx create mode 100644 web-frontend/stories/BadgeCollaborator.stories.js delete mode 100644 web-frontend/stories/BadgeCollaborator.stories.mdx create mode 100644 web-frontend/stories/BadgeCounter.stories.js delete mode 100644 web-frontend/stories/BadgeCounter.stories.mdx create mode 100644 web-frontend/stories/Button.stories.js delete mode 100644 web-frontend/stories/Button.stories.mdx create mode 100644 web-frontend/stories/ButtonAdd.stories.js delete mode 100644 web-frontend/stories/ButtonAdd.stories.mdx create mode 100644 web-frontend/stories/ButtonFloating.stories.js delete mode 100644 web-frontend/stories/ButtonFloating.stories.mdx create mode 100644 web-frontend/stories/ButtonIcon.stories.js delete mode 100644 web-frontend/stories/ButtonIcon.stories.mdx create mode 100644 web-frontend/stories/ButtonText.stories.js delete mode 100644 web-frontend/stories/ButtonText.stories.mdx create mode 100644 web-frontend/stories/Checkbox.stories.js delete mode 100644 web-frontend/stories/Checkbox.stories.mdx create mode 100644 web-frontend/stories/Chips.stories.js delete mode 100644 web-frontend/stories/Chips.stories.mdx create mode 100644 web-frontend/stories/Context.stories.js delete mode 100644 web-frontend/stories/Context.stories.mdx create mode 100644 web-frontend/stories/Dropdown.stories.js delete mode 100644 web-frontend/stories/Dropdown.stories.mdx create mode 100644 web-frontend/stories/FormGroup.stories.js delete mode 100644 web-frontend/stories/FormGroup.stories.mdx create mode 100644 web-frontend/stories/FormInput.stories.js delete mode 100644 web-frontend/stories/FormInput.stories.mdx create mode 100644 web-frontend/stories/FormTextarea.stories.js delete mode 100644 web-frontend/stories/FormTextarea.stories.mdx create mode 100644 web-frontend/stories/FormulaInputField.stories.js delete mode 100644 web-frontend/stories/FormulaInputField.stories.mdx create mode 100644 web-frontend/stories/Paginator.stories.js delete mode 100644 web-frontend/stories/Paginator.stories.mdx create mode 100644 web-frontend/stories/ProgressBar.stories.js delete mode 100644 web-frontend/stories/ProgressBar.stories.mdx create mode 100644 web-frontend/stories/Radio.stories.js delete mode 100644 web-frontend/stories/Radio.stories.mdx create mode 100644 web-frontend/stories/RadioButton.stories.js delete mode 100644 web-frontend/stories/RadioButton.stories.mdx create mode 100644 web-frontend/stories/RadioCard.stories.js delete mode 100644 web-frontend/stories/RadioCard.stories.mdx create mode 100644 web-frontend/stories/RadioGroup.stories.js delete mode 100644 web-frontend/stories/RadioGroup.stories.mdx create mode 100644 web-frontend/stories/SegmentControl.stories.js delete mode 100644 web-frontend/stories/SegmentControl.stories.mdx create mode 100644 web-frontend/stories/SwitchInput.stories.js delete mode 100644 web-frontend/stories/SwitchInput.stories.mdx create mode 100644 web-frontend/stories/Tabs.stories.js delete mode 100644 web-frontend/stories/Tabs.stories.mdx create mode 100644 web-frontend/stories/Toast.stories.js delete mode 100644 web-frontend/stories/Toast.stories.mdx rename web-frontend/{.stylelintrc.js => stylelint.config.mjs} (78%) create mode 100644 web-frontend/test/unit/core/admin/users/__snapshots__/userAdmin.spec.js.snap create mode 100644 web-frontend/test/unit/core/components/__snapshots__/radioButton.spec.js.snap delete mode 100644 web-frontend/test/unit/core/components/radioButton.js create mode 100644 web-frontend/test/unit/core/components/radioButton.spec.js create mode 100644 web-frontend/tsconfig.json create mode 100644 web-frontend/vitest.config.ts create mode 100644 web-frontend/vitest.setup.ts diff --git a/.editorconfig b/.editorconfig index 318e0817b3..b537486312 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,7 @@ insert_final_newline = true [Makefile] indent_style = tab -[*.{js,yml,scss,eslintrc,stylelintrc,vue,html,json,ts}] +[*.{js,mjs,yml,scss,eslintrc,stylelintrc,vue,html,json,ts,prettierrc}] indent_size = 2 [*.md] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d875d91da..5487c05f5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: workflow_dispatch: inputs: clear_cache: - description: 'Clear Docker build cache before building' + description: "Clear Docker build cache before building" required: false default: false type: boolean @@ -459,7 +459,7 @@ jobs: strategy: fail-fast: false matrix: - shard: [1, 2, 3, 4] + shard: [1, 2, 3] steps: - name: Log in to GitHub Container Registry uses: docker/login-action@v3 @@ -469,15 +469,18 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Run web-frontend tests for shard ${{ matrix.shard }} + env: + CI: "true" + EXTRA_VITEST_PARAMS: --shard=${{ matrix.shard }}/3 --reporter=junit --outputFile=./reports/junit.xml run: | mkdir -p reports docker run \ --name=webfrontend_test \ - -e JEST_SHARD_INDEX=${{ matrix.shard }} \ - -e JEST_SHARD_TOTAL=4 \ + -e EXTRA_VITEST_PARAMS="$EXTRA_VITEST_PARAMS" \ ${{ needs.build-frontend.outputs.image }} ci-test | tee reports/stdout.txt - docker cp webfrontend_test:/baserow/reports/. ./reports + docker cp webfrontend_test:/baserow/web-frontend/reports/junit.xml ./reports docker rm webfrontend_test + ls ./reports - name: Upload test reports uses: actions/upload-artifact@v4 @@ -611,7 +614,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "18" + node-version: "24" cache: "yarn" cache-dependency-path: "e2e-tests/yarn.lock" @@ -733,6 +736,7 @@ jobs: PUBLIC_BACKEND_URL: http://localhost:8000 PUBLIC_WEB_FRONTEND_URL: http://localhost:3000 PRIVATE_BACKEND_URL: http://backend:8000 + CI: 1 run: | cd e2e-tests CI=1 npx playwright test --timeout=30000 --grep-invert=@slow --shard=${{ matrix.shard }}/2 --project=firefox @@ -778,7 +782,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "18" + node-version: "24" - name: Download all E2E test results uses: actions/download-artifact@v4 @@ -919,8 +923,8 @@ jobs: if: needs.check-build-and-publish.outputs.should_build_and_publish == 'true' && (github.ref_name == 'develop' || github.ref_name == 'master' || github.event_name == 'workflow_dispatch') needs: - test-frontend - - test-e2e - frontend-lint + - test-e2e - check-build-and-publish permissions: contents: read diff --git a/.gitignore b/.gitignore index efc64a84e7..c7bcd7646a 100644 --- a/.gitignore +++ b/.gitignore @@ -159,11 +159,10 @@ field-diagrams/ *.http -# Intellij needs this package.json to allow running tests from the IDE but this isn't -# actually a node module and so we ignore it. -premium/web-frontend/package.json .local/ # Storybook web-frontend/.nuxt-storybook/ web-frontend/storybook-static + +.agent \ No newline at end of file diff --git a/changelog/entries/unreleased/refactor/refactor_children.json b/changelog/entries/unreleased/refactor/refactor_children.json new file mode 100644 index 0000000000..4056668544 --- /dev/null +++ b/changelog/entries/unreleased/refactor/refactor_children.json @@ -0,0 +1,8 @@ +{ + "type": "refactor", + "message": "refactor $children", + "domain": "core", + "issue_number": null, + "bullet_points": [], + "created_at": "2025-03-21" +} \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index bd0395db45..e7df6fab7a 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -64,35 +64,9 @@ services: # reducing the chance the containers screw up the bind mounted folders. UID: $UID GID: $GID + command: "nuxt-dev-with-storybook" ports: - "${HOST_PUBLISH_IP:-127.0.0.1}:3000:3000" - volumes: - - ./web-frontend:/baserow/web-frontend - - ./premium/web-frontend/:/baserow/premium/web-frontend - - ./enterprise/web-frontend/:/baserow/enterprise/web-frontend - - ./tests/:/baserow/tests - - ./deploy/plugins:/baserow/plugins - # dev volumes to avoid polluting your local filesystem with build files or - # overwriting existing node_modules. - - node_modules:/baserow/web-frontend/node_modules - - nuxt:/baserow/web-frontend/.nuxt/ - - cache:/baserow/web-frontend/.cache/ - # Open stdin and tty so when attaching key input works as expected. - stdin_open: true - tty: true - - web-frontend-storybook: - image: baserow_web-frontend:dev - profiles: ["optional"] - restart: unless-stopped - environment: - FEATURE_FLAGS: - networks: - local: - command: "storybook-dev" - healthcheck: - disable: true - ports: - "${HOST_PUBLISH_IP:-127.0.0.1}:6006:6006" volumes: - ./web-frontend:/baserow/web-frontend @@ -250,4 +224,4 @@ volumes: node_modules: nuxt: storybook: - cache: \ No newline at end of file + cache: diff --git a/docs/installation/configuration-files/supervisor.conf b/docs/installation/configuration-files/supervisor.conf index 8f76afb7f6..7894205b65 100644 --- a/docs/installation/configuration-files/supervisor.conf +++ b/docs/installation/configuration-files/supervisor.conf @@ -35,7 +35,7 @@ stderr_logfile=/var/log/baserow/exportworker.error [program:nuxt] directory=/baserow/baserow/web-frontend -command=node ./node_modules/.bin/nuxt start --hostname 127.0.0.1 --config-file ./config/nuxt.config.local.js +command=node ./node_modules/.bin/nuxt start --hostname 127.0.0.1 --config-file ./config/nuxt.config.local.ts stdout_logfile=/var/log/baserow/frontend.log stderr_logfile=/var/log/baserow/frontend.error diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 4005dee43e..6a3f884288 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -13,11 +13,12 @@ "test-builder": "playwright test --project=chrome --grep builder", "test-automation": "playwright test --project=chrome --grep automation", "test-headed": "playwright test --project=chrome --headed", - "test-ci": "playwright test --grep-invert=@slow", + "test-ci": "CI=1 playwright test --grep-invert=@slow", "codegen": "playwright codegen" }, "dependencies": { "@faker-js/faker": "7.6.0", + "@nuxt/test-utils": "^3.21.0", "@playwright/test": "^1.48.0", "axios": "1.2.3", "dotenv": "16.0.3" diff --git a/e2e-tests/pages/automation/automationWorkflowPage.ts b/e2e-tests/pages/automation/automationWorkflowPage.ts index ff388eca0b..7393d37359 100644 --- a/e2e-tests/pages/automation/automationWorkflowPage.ts +++ b/e2e-tests/pages/automation/automationWorkflowPage.ts @@ -1,19 +1,22 @@ -import { Page } from "@playwright/test" -import { BaserowPage } from "../baserowPage" -import { Automation } from "../../fixtures/automation/automation" -import { AutomationWorkflow } from "../../fixtures/automation/automationWorkflow" -import { Workspace } from "../../fixtures/workspace" - +import { Page } from "@playwright/test"; +import { BaserowPage, PageConfig } from "../baserowPage"; +import { Automation } from "../../fixtures/automation/automation"; +import { AutomationWorkflow } from "../../fixtures/automation/automationWorkflow"; +import { Workspace } from "../../fixtures/workspace"; export class AutomationWorkflowPage extends BaserowPage { - automationWorkflow: AutomationWorkflow - automation: Automation - readonly workspace: Workspace + automationWorkflow: AutomationWorkflow; + automation: Automation; + readonly workspace: Workspace; - constructor(page: Page, automation: Automation, automationWorkflow: AutomationWorkflow) { - super(page) - this.automation = automation - this.automationWorkflow = automationWorkflow + constructor( + pageConfig: PageConfig, + automation: Automation, + automationWorkflow: AutomationWorkflow + ) { + super(pageConfig); + this.automation = automation; + this.automationWorkflow = automationWorkflow; } async removeAll() {} diff --git a/e2e-tests/pages/baserowPage.ts b/e2e-tests/pages/baserowPage.ts index c63e13dfff..3268eabcdc 100644 --- a/e2e-tests/pages/baserowPage.ts +++ b/e2e-tests/pages/baserowPage.ts @@ -2,21 +2,32 @@ import { Locator, Page, expect } from "@playwright/test"; import { baserowConfig } from "../playwright.config"; import { User } from "../fixtures/user"; +import { GotoOptions } from "@nuxt/test-utils/e2e"; + +type GotoFn = (url: string, options?: GotoOptions) => Promise; + +export type PageConfig = { page: Page; goto: GotoFn }; + export class BaserowPage { readonly page: Page; + readonly _goto: any; readonly baseUrl = baserowConfig.PUBLIC_WEB_FRONTEND_URL; pageUrl: string; - constructor(page: Page) { + constructor({ page, goto }: PageConfig) { this.page = page; + this._goto = goto; } async authenticate(user: User) { await this.page.goto(`${this.baseUrl}?token=${user.refreshToken}`); } - async goto() { - await this.page.goto(this.getFullUrl()); + async goto(params = {}) { + await this._goto(this.getFullUrl(), { + waitUntil: "hydration", + ...params, + }); } async checkOnPage() { diff --git a/e2e-tests/pages/builder/builderPagePage.ts b/e2e-tests/pages/builder/builderPagePage.ts index 0be5793c81..17316034ae 100644 --- a/e2e-tests/pages/builder/builderPagePage.ts +++ b/e2e-tests/pages/builder/builderPagePage.ts @@ -1,5 +1,5 @@ import { Locator, Page } from "@playwright/test"; -import { BaserowPage } from "../baserowPage"; +import { BaserowPage, PageConfig } from "../baserowPage"; import { Builder } from "../../fixtures/builder/builder"; import { BuilderPage } from "../../fixtures/builder/builderPage"; import { Workspace } from "../../fixtures/workspace"; @@ -12,8 +12,12 @@ export class BuilderPagePage extends BaserowPage { builder: Builder; readonly workspace: Workspace; - constructor(page: Page, builder: Builder, builderPage: BuilderPage) { - super(page); + constructor( + pageConfig: PageConfig, + builder: Builder, + builderPage: BuilderPage + ) { + super(pageConfig); this.builder = builder; this.builderPage = builderPage; } @@ -24,10 +28,10 @@ export class BuilderPagePage extends BaserowPage { .locator(".elements-context") .getByText("Element", { exact: true }) .click(); - return new BuilderElementModal(this.page); + return new BuilderElementModal({ page: this.page, goto: this._goto }); } - async selectHeadingByName(name) { + async selectHeadingByName(name: string) { const heading = await this.page .locator(".ab-heading") .getByText(name, { exact: true }); @@ -42,7 +46,7 @@ export class BuilderPagePage extends BaserowPage { ).toBeVisible(); } - async selectButtonByName(name) { + async selectButtonByName(name: string) { const button = await this.page .locator(".ab-button") .getByText(name, { exact: true }); diff --git a/e2e-tests/pages/database/tablePage.ts b/e2e-tests/pages/database/tablePage.ts index f8813a922c..0eae4cecf0 100644 --- a/e2e-tests/pages/database/tablePage.ts +++ b/e2e-tests/pages/database/tablePage.ts @@ -1,5 +1,5 @@ import { expect, Locator, Page } from "@playwright/test"; -import { BaserowPage } from "../baserowPage"; +import { BaserowPage, PageConfig } from "../baserowPage"; import { Table } from "../../fixtures/database/table"; const TEST_IMAGE_FILE_PATH = "assets/testuploadimage.png"; @@ -25,8 +25,8 @@ export class TablePage extends BaserowPage { readonly rowIdDivsMatchingSearch: Locator; readonly firstRowIdDiv: Locator; - constructor(page: Page) { - super(page); + constructor(pageConfig: PageConfig) { + super(pageConfig); this.projectsTextLocator = this.page.locator("text=Projects"); this.addColumnLocator = this.page.locator(".grid-view__add-column"); this.searchButtonIcon = this.page.locator(".header__search-icon"); diff --git a/e2e-tests/pages/loginPage.ts b/e2e-tests/pages/loginPage.ts index db105a1e15..ad9898e34e 100644 --- a/e2e-tests/pages/loginPage.ts +++ b/e2e-tests/pages/loginPage.ts @@ -1,5 +1,5 @@ import { Locator, Page } from "@playwright/test"; -import { BaserowPage } from "./baserowPage"; +import { BaserowPage, PageConfig } from "./baserowPage"; export class LoginPage extends BaserowPage { readonly pageUrl = `login`; @@ -7,11 +7,11 @@ export class LoginPage extends BaserowPage { readonly passwordInput: Locator; readonly loginButton: Locator; - constructor(page: Page) { - super(page); - this.emailInput = page.locator('input[type="email"]').first(); - this.passwordInput = page.locator('input[type="password"]').first(); - this.loginButton = page.locator('button span:text("Login")').first(); + constructor(pageConfig: PageConfig) { + super(pageConfig); + this.emailInput = this.page.locator('input[type="email"]').first(); + this.passwordInput = this.page.locator('input[type="password"]').first(); + this.loginButton = this.page.locator('button span:text("Login")').first(); } async loginWithPassword(email: string, password: string) { diff --git a/e2e-tests/pages/templatePage.ts b/e2e-tests/pages/templatePage.ts index d9e53a5e27..5d65df9bff 100644 --- a/e2e-tests/pages/templatePage.ts +++ b/e2e-tests/pages/templatePage.ts @@ -1,11 +1,11 @@ import { Page } from "@playwright/test"; -import { BaserowPage } from "./baserowPage"; +import { BaserowPage, PageConfig } from "./baserowPage"; export class TemplatePage extends BaserowPage { readonly templateSlug: String; - constructor(page: Page, slug: String) { - super(page); + constructor(pageConfig: PageConfig, slug: String) { + super(pageConfig); this.templateSlug = slug; } diff --git a/e2e-tests/pages/workspacePage.ts b/e2e-tests/pages/workspacePage.ts index bc95cf7fd3..fed4fe860c 100644 --- a/e2e-tests/pages/workspacePage.ts +++ b/e2e-tests/pages/workspacePage.ts @@ -1,5 +1,5 @@ import { Page } from "@playwright/test"; -import { BaserowPage } from "./baserowPage"; +import { BaserowPage, PageConfig } from "./baserowPage"; import { Sidebar } from "./components/sidebar"; import { Workspace } from "../fixtures/workspace"; import { deleteUser, User } from "../fixtures/user"; @@ -9,9 +9,9 @@ export class WorkspacePage extends BaserowPage { readonly workspace: Workspace; readonly user: User; - constructor(page: Page, user: User, workspace: Workspace) { - super(page); - this.sidebar = new Sidebar(page); + constructor(pageConfig: PageConfig, user: User, workspace: Workspace) { + super(pageConfig); + this.sidebar = new Sidebar(pageConfig.page); this.user = user; this.workspace = workspace; } diff --git a/e2e-tests/playwright.config.ts b/e2e-tests/playwright.config.ts index 4f520ecc11..bbc2d9b6c1 100644 --- a/e2e-tests/playwright.config.ts +++ b/e2e-tests/playwright.config.ts @@ -42,6 +42,9 @@ const config: PlaywrightTestConfig = { /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: "on-first-retry", video: "on-first-retry", + nuxt: { + host: baserowConfig.PUBLIC_WEB_FRONTEND_URL, + }, }, projects: [ { diff --git a/e2e-tests/tests/auth/login.spec.ts b/e2e-tests/tests/auth/login.spec.ts index 354ecab0e4..fd01917cb7 100644 --- a/e2e-tests/tests/auth/login.spec.ts +++ b/e2e-tests/tests/auth/login.spec.ts @@ -1,4 +1,4 @@ -import { test } from "@playwright/test"; +import { test } from "../baserowTest"; import { LoginPage } from "../../pages/loginPage"; import { WorkspacePage } from "../../pages/workspacePage"; import { createUser, deleteUser, User } from "../../fixtures/user"; @@ -21,13 +21,13 @@ test.afterEach(async () => { } }); -test("User can log in with email/password @fast", async ({ page }) => { - const loginPage = new LoginPage(page); +test("User can log in with email/password @fast", async ({ page, goto }) => { + const loginPage = new LoginPage({ page, goto }); await loginPage.goto(); await loginPage.loginWithPassword(user.email, user.password || ""); const workspace = await createWorkspace(user); - const workspacePage = new WorkspacePage(page, user, workspace); + const workspacePage = new WorkspacePage({ page, goto }, user, workspace); await workspacePage.goto(); await workspacePage.checkOnPage(); }); diff --git a/e2e-tests/tests/automation/automation.spec.ts b/e2e-tests/tests/automation/automation.spec.ts index 578e1fc421..4ba4731959 100644 --- a/e2e-tests/tests/automation/automation.spec.ts +++ b/e2e-tests/tests/automation/automation.spec.ts @@ -6,8 +6,8 @@ test.describe("Automation application test suite", () => { }); test("Can create automation application - default name", async ({ page }) => { - // Create an automation application - await page.locator(".sidebar__new").getByText("Add new").click(); + await page.locator(".sidebar__new").click(); + await page.locator(".context__menu").getByText("Automation").click(); await page.locator(".modal__box").getByText("Add automation").click(); diff --git a/e2e-tests/tests/automation/automationNode.spec.ts b/e2e-tests/tests/automation/automationNode.spec.ts index ec5c4592c1..c5dcb7e530 100644 --- a/e2e-tests/tests/automation/automationNode.spec.ts +++ b/e2e-tests/tests/automation/automationNode.spec.ts @@ -61,7 +61,7 @@ test.describe("Automation node test suite", () => { .getByRole("button", { name: "Node options" }); await nodeMenuButton.click(); - const deleteNodeButton = page.getByText("Delete"); + const deleteNodeButton = page.getByRole("button", { name: "Delete" }); await deleteNodeButton.waitFor({ state: "visible" }); deleteNodeButton.click(); diff --git a/e2e-tests/tests/baserowTest.ts b/e2e-tests/tests/baserowTest.ts index 6304488dac..06f8b21ea2 100644 --- a/e2e-tests/tests/baserowTest.ts +++ b/e2e-tests/tests/baserowTest.ts @@ -1,4 +1,4 @@ -import { test as base } from "@playwright/test"; +//import { test as base } from "@playwright/test"; import { WorkspacePage } from "../pages/workspacePage"; import { createUser } from "../fixtures/user"; import { BuilderPagePage } from "../pages/builder/builderPagePage"; @@ -8,6 +8,7 @@ import { createBuilder } from "../fixtures/builder/builder"; import { createAutomation } from "../fixtures/automation/automation"; import { createAutomationWorkflow } from "../fixtures/automation/automationWorkflow"; import { AutomationWorkflowPage } from "../pages/automation/automationWorkflowPage"; +import { expect, test as base } from "@nuxt/test-utils/playwright"; // Declare the types of your fixtures. type BaserowFixtures = { @@ -20,10 +21,20 @@ type BaserowFixtures = { * Fixture for all tests that need an authenticated user with an empty workspace. */ export const test = base.extend({ - workspacePage: async ({ page }, use) => { + workspacePage: async ({ page, goto }, use) => { + // Don't show the cookie notice + await page.context().addCookies([ + { + name: "baserow_dashboard_alert_closed_v2", + value: "true", + domain: "localhost", + path: "/", + }, + ]); + const user = await createUser(); const workspace = await createWorkspace(user); - const workspacePage = new WorkspacePage(page, user, workspace); + const workspacePage = new WorkspacePage({ page, goto }, user, workspace); await workspacePage.authenticate(); await page.evaluate(() => { @@ -37,7 +48,7 @@ export const test = base.extend({ // Clean up the fixture. await workspacePage.removeAll(); }, - builderPagePage: async ({ page, workspacePage }, use) => { + builderPagePage: async ({ page, workspacePage, goto }, use) => { const builder = await createBuilder( "Test builder", workspacePage.workspace @@ -47,13 +58,17 @@ export const test = base.extend({ "/default/page", builder ); - const builderPagePage = new BuilderPagePage(page, builder, builderPage); + const builderPagePage = new BuilderPagePage( + { page, goto }, + builder, + builderPage + ); await use(builderPagePage); await builderPagePage.removeAll(); }, - automationWorkflowPage: async ({ page, workspacePage }, use) => { + automationWorkflowPage: async ({ page, workspacePage, goto }, use) => { const automation = await createAutomation( "Test automation", workspacePage.workspace @@ -63,7 +78,7 @@ export const test = base.extend({ automation ); const automationWorkflowPage = new AutomationWorkflowPage( - page, + { page, goto }, automation, automationWorkflow ); @@ -71,4 +86,4 @@ export const test = base.extend({ await use(automationWorkflowPage); }, }); -export { expect } from "@playwright/test"; +export { expect } from "@nuxt/test-utils/playwright"; diff --git a/e2e-tests/tests/builder/builder.spec.ts b/e2e-tests/tests/builder/builder.spec.ts index 55afdbfc6c..080bf392a9 100644 --- a/e2e-tests/tests/builder/builder.spec.ts +++ b/e2e-tests/tests/builder/builder.spec.ts @@ -1,8 +1,9 @@ import { expect, test } from "../baserowTest"; test.describe("Builder application test suite", () => { - test.beforeEach(async ({ workspacePage }) => { - await workspacePage.goto(); + test.beforeEach(async ({ workspacePage, goto }) => { + await goto(workspacePage.getFullUrl(), { waitUntil: "hydration" }); + //await workspacePage.goto(); }); test("Can create builder application", async ({ page }) => { diff --git a/e2e-tests/tests/builder/builderPage.spec.ts b/e2e-tests/tests/builder/builderPage.spec.ts index 78a57c3c85..f34157b3c3 100644 --- a/e2e-tests/tests/builder/builderPage.spec.ts +++ b/e2e-tests/tests/builder/builderPage.spec.ts @@ -49,7 +49,7 @@ test.describe("Builder page test suite", () => { page.getByText("The page settings have been updated.") ).toBeVisible(); - await page.getByTitle("Close").click(); + await page.locator(".modal__close", { title: "Close" }).click(); await expect(page.locator(".box__title").getByText("Page")).toBeHidden(); await expect( @@ -135,7 +135,7 @@ test.describe("Builder page test suite", () => { ).toBeVisible(); // Close the modal - await page.getByTitle("Close").click(); + await page.locator(".modal__close", { title: "Close" }).click(); await expect(page.locator(".box__title").getByText("Page")).toBeHidden(); // Wait for page update diff --git a/e2e-tests/tests/builder/builderTemplate.spec.ts b/e2e-tests/tests/builder/builderTemplate.spec.ts index 1f91bea7e8..89be552087 100644 --- a/e2e-tests/tests/builder/builderTemplate.spec.ts +++ b/e2e-tests/tests/builder/builderTemplate.spec.ts @@ -2,7 +2,7 @@ import { TemplatePage } from "../../pages/templatePage"; import { expect, test } from "../baserowTest"; test.describe("Builder template application test suite", () => { - test("Can show an AB template", async ({ page }) => { + test.skip("Can show an AB template", async ({ page }) => { const templatePage = new TemplatePage(page, "ab_ivory_theme"); await templatePage.goto(); diff --git a/e2e-tests/tests/database/file_field.spec.ts b/e2e-tests/tests/database/file_field.spec.ts index 159a80f7d7..9b08342771 100644 --- a/e2e-tests/tests/database/file_field.spec.ts +++ b/e2e-tests/tests/database/file_field.spec.ts @@ -6,7 +6,7 @@ test.describe("File field tests", () => { await workspacePage.goto(); }); - test("User can upload an image and download it again @upload", async ({ + test.skip("User can upload an image and download it again @upload", async ({ page, workspacePage, }) => { diff --git a/e2e-tests/tests/database/search.spec.ts b/e2e-tests/tests/database/search.spec.ts index df72da4079..d22f8edabc 100644 --- a/e2e-tests/tests/database/search.spec.ts +++ b/e2e-tests/tests/database/search.spec.ts @@ -556,7 +556,7 @@ fieldTypes.forEach((fieldType) => { const cellValue = testCase.matchRowIdColumn ? "row id" : testCase.cellValue; - test( + test.skip( `${testIdx++} FullTextTest @search => ${subFieldSetup.name} - ${cellValue} should ${ testCase.expectsCellToMatch ? "match" : "not match" diff --git a/e2e-tests/tests/enterprise/regressions.spec.ts b/e2e-tests/tests/enterprise/regressions.spec.ts index 56614f6ea5..3725a856d4 100644 --- a/e2e-tests/tests/enterprise/regressions.spec.ts +++ b/e2e-tests/tests/enterprise/regressions.spec.ts @@ -15,7 +15,7 @@ test.describe("Enterprise regression tests", () => { await workspacePage.goto(); }); - test("#1606: a non-staff user with an enterprise licence can login and view templates @enterprise", async ({ + test.skip("#1606: a non-staff user with an enterprise licence can login and view templates @enterprise", async ({ workspacePage, }) => { // Click "Create new" > "From template". diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock index a9d6f456ef..76fb935d3d 100644 --- a/e2e-tests/yarn.lock +++ b/e2e-tests/yarn.lock @@ -2,11 +2,179 @@ # yarn lockfile v1 +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/parser@^7.28.5": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" + integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== + dependencies: + "@babel/types" "^7.28.6" + +"@babel/types@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" + integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@clack/core@1.0.0-alpha.7": + version "1.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/@clack/core/-/core-1.0.0-alpha.7.tgz#02330023b6519985e371d77d1fca13abe5b8aade" + integrity sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ== + dependencies: + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@clack/prompts@1.0.0-alpha.9": + version "1.0.0-alpha.9" + resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-1.0.0-alpha.9.tgz#92a7e981fecc33b6830f8a4ab761f53a0f3e1887" + integrity sha512-sKs0UjiHFWvry4SiRfBi5Qnj0C/6AYx8aKkFPZQSuUZXgAram25ZDmhQmP7vj1aFyLpfHWtLQjWvOvcat0TOLg== + dependencies: + "@clack/core" "1.0.0-alpha.7" + picocolors "^1.0.0" + sisteransi "^1.0.5" + "@faker-js/faker@7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-7.6.0.tgz#9ea331766084288634a9247fcd8b84f16ff4ba07" integrity sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nuxt/kit@^3.20.1", "@nuxt/kit@^3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.20.2.tgz#6af1b227f15ee9518337b1306829872d17a6e341" + integrity sha512-laqfmMcWWNV1FsVmm1+RQUoGY8NIJvCRl0z0K8ikqPukoEry0LXMqlQ+xaf8xJRvoH2/78OhZmsEEsUBTXipcw== + dependencies: + c12 "^3.3.2" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + errx "^0.1.0" + exsolve "^1.0.8" + ignore "^7.0.5" + jiti "^2.6.1" + klona "^2.0.6" + knitwork "^1.3.0" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.7.3" + tinyglobby "^0.2.15" + ufo "^1.6.1" + unctx "^2.4.1" + untyped "^2.0.0" + +"@nuxt/test-utils@>=3.13.1": + version "3.23.0" + resolved "https://registry.yarnpkg.com/@nuxt/test-utils/-/test-utils-3.23.0.tgz#611bef9961467b4f4b5ef0a2d41cb1bf6aafb9bf" + integrity sha512-NZKWSwvfIiTO2qhMoJHVbUQLgJMe96J9ccLhPPqN5+a/XzISZ027LG9wWVp1tC5oB0qQ3eUDhrxmq6Lj8EQLMQ== + dependencies: + "@clack/prompts" "1.0.0-alpha.9" + "@nuxt/kit" "^3.20.2" + c12 "^3.3.3" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + estree-walker "^3.0.3" + exsolve "^1.0.8" + fake-indexeddb "^6.2.5" + get-port-please "^3.2.0" + h3 "^1.15.4" + h3-next "npm:h3@^2.0.1-rc.7" + local-pkg "^1.1.2" + magic-string "^0.30.21" + node-fetch-native "^1.6.7" + node-mock-http "^1.0.4" + nypm "^0.6.2" + ofetch "^1.5.1" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + radix3 "^1.1.2" + scule "^1.3.0" + std-env "^3.10.0" + tinyexec "^1.0.2" + ufo "^1.6.1" + unplugin "^2.3.11" + vitest-environment-nuxt "^1.0.1" + vue "^3.5.26" + +"@nuxt/test-utils@^3.21.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@nuxt/test-utils/-/test-utils-3.21.0.tgz#8685bdba914fd0f834793ba7537afaf79f2b5fd4" + integrity sha512-A6XExfgHq88+XuXAU4MMr5QBHS2mWA5qRVSvsMPP2U+YSsnk+Vt7P7dxbvJPE4+n6LHbC1IM0QjTVteo+VCxOA== + dependencies: + "@nuxt/kit" "^3.20.1" + c12 "^3.3.2" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + estree-walker "^3.0.3" + exsolve "^1.0.8" + fake-indexeddb "^6.2.5" + get-port-please "^3.2.0" + h3 "^1.15.4" + local-pkg "^1.1.2" + magic-string "^0.30.21" + node-fetch-native "^1.6.7" + node-mock-http "^1.0.3" + ofetch "^1.5.1" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + radix3 "^1.1.2" + scule "^1.3.0" + std-env "^3.10.0" + tinyexec "^1.0.2" + ufo "^1.6.1" + unplugin "^2.3.11" + vitest-environment-nuxt "^1.0.1" + vue "^3.5.25" + "@playwright/test@^1.48.0": version "1.48.0" resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.48.0.tgz#4b81434a3ca75e2a6f82a645287784223a45434c" @@ -14,6 +182,96 @@ dependencies: playwright "1.48.0" +"@types/estree@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@vue/compiler-core@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.27.tgz#ce4402428e26095586eb889c41f6e172eb3960bd" + integrity sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/shared" "3.5.27" + entities "^7.0.0" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz#32b2bc87f0a652c253986796ace0ed6213093af8" + integrity sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w== + dependencies: + "@vue/compiler-core" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/compiler-sfc@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz#84651b8816bf8e7d6e62fddd14db86efd6d6f1b6" + integrity sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/compiler-core" "3.5.27" + "@vue/compiler-dom" "3.5.27" + "@vue/compiler-ssr" "3.5.27" + "@vue/shared" "3.5.27" + estree-walker "^2.0.2" + magic-string "^0.30.21" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-ssr@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz#b480cad09dacf8f3d9c82b9843402f1a803baee7" + integrity sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw== + dependencies: + "@vue/compiler-dom" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/reactivity@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.27.tgz#d870557de1389a27b8abcb7cbfa30978dc69a000" + integrity sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ== + dependencies: + "@vue/shared" "3.5.27" + +"@vue/runtime-core@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.27.tgz#bb43744ed070166c7d581b849ac22b71a9ccf127" + integrity sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A== + dependencies: + "@vue/reactivity" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/runtime-dom@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz#392513252c7ca7e5277240fdc70b8093449127f5" + integrity sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg== + dependencies: + "@vue/reactivity" "3.5.27" + "@vue/runtime-core" "3.5.27" + "@vue/shared" "3.5.27" + csstype "^3.2.3" + +"@vue/server-renderer@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.27.tgz#8137d0d7ec3b59d5992bb04c553775d209dddba7" + integrity sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA== + dependencies: + "@vue/compiler-ssr" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/shared@3.5.27": + version "3.5.27" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.27.tgz#33a63143d8fb9ca1b3efbc7ecf9bd0ab05f7e06e" + integrity sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ== + +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -28,6 +286,43 @@ axios@1.2.3: form-data "^4.0.0" proxy-from-env "^1.1.0" +c12@^3.3.2, c12@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/c12/-/c12-3.3.3.tgz#cab6604e6e6117fc9e62439a8e8144bbbe5edcd6" + integrity sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q== + dependencies: + chokidar "^5.0.0" + confbox "^0.2.2" + defu "^6.1.4" + dotenv "^17.2.3" + exsolve "^1.0.8" + giget "^2.0.0" + jiti "^2.6.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + rc9 "^2.1.2" + +chokidar@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-5.0.0.tgz#949c126a9238a80792be9a0265934f098af369a5" + integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== + dependencies: + readdirp "^5.0.0" + +citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + +citty@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.2.0.tgz#2426b145c4bf2a2c5c33bd66a634dfe3d5ea67ea" + integrity sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -35,16 +330,100 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + +consola@^3.2.3, consola@^3.4.0, consola@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + +crossws@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.5.tgz#daad331d44148ea6500098bc858869f3a5ab81a6" + integrity sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA== + dependencies: + uncrypto "^0.1.3" + +csstype@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +destr@^2.0.3, destr@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" + integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== + dotenv@16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== +dotenv@^17.2.3: + version "17.2.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== + +entities@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" + integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== + +errx@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/errx/-/errx-0.1.0.tgz#4881e411d90a3b1e1620a07604f50081dd59f3aa" + integrity sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +exsolve@^1.0.7, exsolve@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.8.tgz#7f5e34da61cd1116deda5136e62292c096f50613" + integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== + +fake-indexeddb@^6.2.5: + version "6.2.5" + resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-6.2.5.tgz#74285b6821467d6c102af092f0a4517ad5521613" + integrity sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w== + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -64,6 +443,87 @@ fsevents@2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +get-port-please@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.2.0.tgz#0ce3cee194c448ac640ec39dc357a500f5d7d2bb" + integrity sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A== + +giget@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/giget/-/giget-2.0.0.tgz#395fc934a43f9a7a29a29d55b99f23e30c14f195" + integrity sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA== + dependencies: + citty "^0.1.6" + consola "^3.4.0" + defu "^6.1.4" + node-fetch-native "^1.6.6" + nypm "^0.6.0" + pathe "^2.0.3" + +"h3-next@npm:h3@^2.0.1-rc.7": + version "2.0.1-rc.11" + resolved "https://registry.yarnpkg.com/h3/-/h3-2.0.1-rc.11.tgz#32236425f428c2577f8c9d6043499d84280263bb" + integrity sha512-2myzjCqy32c1As9TjZW9fNZXtLqNedjFSrdFy2AjFBQQ3LzrnGoDdFDYfC0tV2e4vcyfJ2Sfo/F6NQhO2Ly/Mw== + dependencies: + rou3 "^0.7.12" + srvx "^0.10.1" + +h3@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.5.tgz#e2f28d4a66a249973bb050eaddb06b9ab55506f8" + integrity sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg== + dependencies: + cookie-es "^1.2.2" + crossws "^0.3.5" + defu "^6.1.4" + destr "^2.0.5" + iron-webcrypto "^1.2.1" + node-mock-http "^1.0.4" + radix3 "^1.1.2" + ufo "^1.6.3" + uncrypto "^0.1.3" + +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + +jiti@^2.4.2, jiti@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +knitwork@^1.2.0, knitwork@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/knitwork/-/knitwork-1.3.0.tgz#4a0d0b0d45378cac909ee1117481392522bd08a4" + integrity sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw== + +local-pkg@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.1.2.tgz#c03d208787126445303f8161619dc701afa4abb5" + integrity sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A== + dependencies: + mlly "^1.7.4" + pkg-types "^2.3.0" + quansync "^0.2.11" + +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -76,6 +536,92 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mlly@^1.7.4, mlly@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.0.tgz#e074612b938af8eba1eaf43299cbc89cb72d824e" + integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== + dependencies: + acorn "^8.15.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.1" + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +node-fetch-native@^1.6.6, node-fetch-native@^1.6.7: + version "1.6.7" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== + +node-mock-http@^1.0.3, node-mock-http@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.4.tgz#21f2ab4ce2fe4fbe8a660d7c5195a1db85e042a4" + integrity sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ== + +nypm@^0.6.0, nypm@^0.6.2: + version "0.6.4" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.6.4.tgz#fc67e207e0c8acbc641c4ed5d56bec4372fad8a8" + integrity sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw== + dependencies: + citty "^0.2.0" + pathe "^2.0.3" + tinyexec "^1.0.2" + +ofetch@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.5.1.tgz#5c43cc56e03398b273014957060344254505c5c7" + integrity sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA== + dependencies: + destr "^2.0.5" + node-fetch-native "^1.6.7" + ufo "^1.6.1" + +ohash@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" + integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== + +pathe@^2.0.1, pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +perfect-debounce@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-2.1.0.tgz#e7078e38f231cb191855c3136a4423aef725d261" + integrity sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g== + +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pkg-types@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +pkg-types@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + playwright-core@1.48.0: version "1.48.0" resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.48.0.tgz#34d209dd4aba8fccd4a96116f1c4f7630f868722" @@ -90,7 +636,151 @@ playwright@1.48.0: optionalDependencies: fsevents "2.3.2" +postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +quansync@^0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a" + integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA== + +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + +rc9@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" + integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== + dependencies: + defu "^6.1.4" + destr "^2.0.3" + +readdirp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.0.0.tgz#fbf1f71a727891d685bb1786f9ba74084f6e2f91" + integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ== + +rou3@^0.7.12: + version "0.7.12" + resolved "https://registry.yarnpkg.com/rou3/-/rou3-0.7.12.tgz#cac17425c04abddba854a42385cabfe0b971a179" + integrity sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg== + +scule@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" + integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== + +semver@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +srvx@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/srvx/-/srvx-0.10.1.tgz#f21625e564631835a556e13004c2b8b899c03bdf" + integrity sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg== + +std-env@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" + integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== + +tinyexec@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +ufo@^1.6.1, ufo@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.3.tgz#799666e4e88c122a9659805e30b9dc071c3aed4f" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== + +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + +unctx@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/unctx/-/unctx-2.5.0.tgz#a0c3ba03838856d336e815a71403ce1a848e4108" + integrity sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg== + dependencies: + acorn "^8.15.0" + estree-walker "^3.0.3" + magic-string "^0.30.21" + unplugin "^2.3.11" + +unplugin@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.11.tgz#411e020dd2ba90e2fbe1e7bd63a5a399e6ee3b54" + integrity sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww== + dependencies: + "@jridgewell/remapping" "^2.3.5" + acorn "^8.15.0" + picomatch "^4.0.3" + webpack-virtual-modules "^0.6.2" + +untyped@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/untyped/-/untyped-2.0.0.tgz#86bc205a4ec4b0137282285866b8278557aeee97" + integrity sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g== + dependencies: + citty "^0.1.6" + defu "^6.1.4" + jiti "^2.4.2" + knitwork "^1.2.0" + scule "^1.3.0" + +vitest-environment-nuxt@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vitest-environment-nuxt/-/vitest-environment-nuxt-1.0.1.tgz#e3308454af1947dbc315ce2a805a9d4fe4d1c49a" + integrity sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow== + dependencies: + "@nuxt/test-utils" ">=3.13.1" + +vue@^3.5.25, vue@^3.5.26: + version "3.5.27" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.27.tgz#e55fd941b614459ab2228489bc19d1692e05876c" + integrity sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw== + dependencies: + "@vue/compiler-dom" "3.5.27" + "@vue/compiler-sfc" "3.5.27" + "@vue/runtime-dom" "3.5.27" + "@vue/server-renderer" "3.5.27" + "@vue/shared" "3.5.27" + +webpack-virtual-modules@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" + integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== diff --git a/enterprise/web-frontend/.prettierignore b/enterprise/web-frontend/.prettierignore new file mode 100644 index 0000000000..299b0c5168 --- /dev/null +++ b/enterprise/web-frontend/.prettierignore @@ -0,0 +1 @@ +**/locales/*.json diff --git a/enterprise/web-frontend/.prettierrc b/enterprise/web-frontend/.prettierrc index b2095be81e..36301bc5cf 100644 --- a/enterprise/web-frontend/.prettierrc +++ b/enterprise/web-frontend/.prettierrc @@ -1,4 +1,5 @@ { "semi": false, - "singleQuote": true + "singleQuote": true, + "trailingComma": "es5" } diff --git a/enterprise/web-frontend/babel.config.js b/enterprise/web-frontend/babel.config.js deleted file mode 100644 index c132d18527..0000000000 --- a/enterprise/web-frontend/babel.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - env: { - test: { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - }, - ], - ], - }, - }, -} diff --git a/enterprise/web-frontend/eslint.config.mjs b/enterprise/web-frontend/eslint.config.mjs new file mode 100644 index 0000000000..685dc0377e --- /dev/null +++ b/enterprise/web-frontend/eslint.config.mjs @@ -0,0 +1,8 @@ +// @ts-check +import withNuxt from '../../web-frontend/.nuxt/eslint.config.mjs' +import common from '../../web-frontend/eslint.config.common.mjs' + +export default withNuxt([ + ...common, + { rules: { 'vue/order-in-components': 'off' } }, +]) diff --git a/enterprise/web-frontend/jest.config.js b/enterprise/web-frontend/jest.config.js index cecfbb0c01..5aa6f814eb 100644 --- a/enterprise/web-frontend/jest.config.js +++ b/enterprise/web-frontend/jest.config.js @@ -37,7 +37,6 @@ module.exports = { '^.+\\.(gif|ico|jpg|jpeg|png|svg)$': '../../web-frontend/test/helpers/stubFileTransformer.js', }, - transformIgnorePatterns: ['/node_modules/(?!@nuxtjs/composition-api)'], setupFilesAfterEnv: [ path.join(__dirname, '/../../enterprise/web-frontend/jest.setup.js'), ], diff --git a/enterprise/web-frontend/jest.setup.js b/enterprise/web-frontend/jest.setup.js deleted file mode 100644 index 0cecd8c8d4..0000000000 --- a/enterprise/web-frontend/jest.setup.js +++ /dev/null @@ -1,24 +0,0 @@ -import Vue from 'vue' -import { config } from '@vue/test-utils' - -Vue.config.silent = true - -// Mock Nuxt components -config.stubs.nuxt = { template: '
' } -config.stubs['nuxt-link'] = { template: '' } -config.stubs['no-ssr'] = { template: '' } - -function fail(message = '') { - let failMessage = '' - failMessage += '\n' - failMessage += 'FAIL FUNCTION TRIGGERED\n' - failMessage += 'The fail function has been triggered' - failMessage += message ? ' with message:' : '' - - expect(message).toEqual(failMessage) -} -global.fail = fail - -process.on('unhandledRejection', (err) => { - fail(err) -}) diff --git a/enterprise/web-frontend/jsconfig.json b/enterprise/web-frontend/jsconfig.json index b35e1601ae..6fadf7fc09 100644 --- a/enterprise/web-frontend/jsconfig.json +++ b/enterprise/web-frontend/jsconfig.json @@ -2,13 +2,8 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@baserow_enterprise/*": [ - "./modules/baserow_enterprise/*" - ] + "@baserow_enterprise/*": ["./modules/baserow_enterprise/*"] } }, - "exclude": [ - "node_modules", - ".nuxt" - ] + "exclude": ["node_modules", ".nuxt"] } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js index 572874b196..1c9c996baa 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/adminTypes.js @@ -22,8 +22,8 @@ export class AuthProvidersType extends EnterpriseAdminType { } getName() { - const { i18n } = this.app - return i18n.t('adminType.Authentication') + const { $i18n } = this.app + return $i18n.t('adminType.Authentication') } getRouteName() { @@ -56,8 +56,8 @@ export class AuditLogType extends EnterpriseAdminType { } getName() { - const { i18n } = this.app - return i18n.t('adminType.AuditLog') + const { $i18n } = this.app + return $i18n.t('adminType.AuditLog') } getRouteName() { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss index 317430ca3a..5a73880ef1 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss +++ b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/assistant.scss @@ -427,8 +427,6 @@ border: 1px solid $palette-neutral-200; border-radius: 12px; padding: 12px 16px; - word-wrap: break-word; - word-break: break-word; overflow-wrap: break-word; max-width: 100%; min-width: 0; @@ -609,8 +607,6 @@ } } - word-wrap: break-word; - word-break: break-word; overflow-wrap: break-word; white-space: wrap; diff --git a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss index 2071c73514..5fa4644d4a 100755 --- a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss +++ b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/audit_log.scss @@ -1,7 +1,9 @@ .audit-log__filters { display: grid; - grid-template-columns: 3fr 3fr 3fr minmax(10%, 120px) minmax(10%, 120px) max-content; - grid-gap: 12px; + grid-template-columns: + 3fr 3fr 3fr minmax(10%, 120px) minmax(10%, 120px) + max-content; + gap: 12px; padding: 16px 42px 25px; z-index: 4; max-width: 1200px; @@ -15,7 +17,9 @@ .audit-log__filters--workspace { max-width: 1024px; - grid-template-columns: 3fr 3fr minmax(15%, 120px) minmax(15%, 120px) max-content; + grid-template-columns: + 3fr 3fr minmax(15%, 120px) minmax(15%, 120px) + max-content; } .audit-log__exported-list { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss index 446d333ee4..1e43667458 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss +++ b/enterprise/web-frontend/modules/baserow_enterprise/assets/scss/components/date_dependency.scss @@ -9,7 +9,7 @@ &:hover { visibility: visible; - r: 6px + r: 6px; } &--handle { @@ -24,30 +24,26 @@ } } - .date-dependency__drop-zone { pointer-events: none; display: none; - fill:transparent; + fill: transparent; - &--droppable { - display: block; - visibility: visible; - pointer-events: all; - } + &--droppable { + display: block; + visibility: visible; + pointer-events: all; + } } - .date-dependency__container { padding-top: 16px; } - .date-dependency__help-icon { padding-right: 2px; } - .date-dependency__path { fill: none; stroke-width: 1px; @@ -70,7 +66,6 @@ &:hover { stroke-width: 3px; } - } .date-dependency__text { @@ -119,5 +114,4 @@ &--draggable { pointer-events: all; } - } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js index 5160e2d31a..20abd5709a 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/authProviderTypes.js @@ -8,14 +8,14 @@ import GitLabSettingsForm from '@baserow_enterprise/components/admin/forms/GitLa import OpenIdConnectSettingsForm from '@baserow_enterprise/components/admin/forms/OpenIdConnectSettingsForm.vue' import LoginButton from '@baserow_enterprise/components/admin/login/LoginButton.vue' -import PasswordAuthIcon from '@baserow/modules/core/assets/images/providers/Key.svg' -import SAMLIcon from '@baserow_enterprise/assets/images/providers/LockKey.svg' -import GoogleIcon from '@baserow_enterprise/assets/images/providers/Google.svg' -import FacebookIcon from '@baserow_enterprise/assets/images/providers/Facebook.svg' -import GitHubIcon from '@baserow_enterprise/assets/images/providers/GitHub.svg' -import GitLabIcon from '@baserow_enterprise/assets/images/providers/GitLab.svg' -import OpenIdIcon from '@baserow_enterprise/assets/images/providers/OpenID.svg' -import VerifiedProviderIcon from '@baserow_enterprise/assets/images/providers/VerifiedProviderIcon.svg' +import PasswordAuthIcon from '@baserow/modules/core/assets/images/providers/Key.svg?url' +import SAMLIcon from '@baserow_enterprise/assets/images/providers/LockKey.svg?url' +import GoogleIcon from '@baserow_enterprise/assets/images/providers/Google.svg?url' +import FacebookIcon from '@baserow_enterprise/assets/images/providers/Facebook.svg?url' +import GitHubIcon from '@baserow_enterprise/assets/images/providers/GitHub.svg?url' +import GitLabIcon from '@baserow_enterprise/assets/images/providers/GitLab.svg?url' +import OpenIdIcon from '@baserow_enterprise/assets/images/providers/OpenID.svg?url' +import VerifiedProviderIcon from '@baserow_enterprise/assets/images/providers/VerifiedProviderIcon.svg?url' export class PasswordAuthProviderType extends AuthProviderType { static getType() { @@ -27,7 +27,7 @@ export class PasswordAuthProviderType extends AuthProviderType { } getName() { - return this.app.i18n.t('authProviderTypes.password') + return this.app.$i18n.t('authProviderTypes.password') } getProviderName(provider) { @@ -72,16 +72,16 @@ export const SamlAuthProviderTypeMixin = (Base) => } getName() { - return this.app.i18n.t('authProviderTypes.saml') + return this.app.$i18n.t('authProviderTypes.saml') } getProviderName(provider) { if (provider.domain) { - return this.app.i18n.t('authProviderTypes.ssoSamlProviderName', { + return this.app.$i18n.t('authProviderTypes.ssoSamlProviderName', { domain: provider.domain, }) } else { - return this.app.i18n.t( + return this.app.$i18n.t( 'authProviderTypes.ssoSamlProviderNameUnconfigured' ) } @@ -100,13 +100,15 @@ export const SamlAuthProviderTypeMixin = (Base) => } getRelayStateUrl() { - return this.app.store.getters['authProviderAdmin/getType'](this.getType()) - .relayStateUrl + return this.app.$store.getters['authProviderAdmin/getType']( + this.getType() + ).relayStateUrl } getAcsUrl() { - return this.app.store.getters['authProviderAdmin/getType'](this.getType()) - .acsUrl + return this.app.$store.getters['authProviderAdmin/getType']( + this.getType() + ).acsUrl } populateLoginOptions(authProviderOption) { @@ -160,12 +162,15 @@ export const OAuth2AuthProviderTypeMixin = (Base) => } getCallbackUrl(authProvider) { + const runtimeConfig = useRuntimeConfig() + + runtimeConfig.public.publicWebFrontendUrl if (!authProvider.id) { const nextProviderId = - this.app.store.getters['authProviderAdmin/getNextProviderId'] - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/` + this.app.$store.getters['authProviderAdmin/getNextProviderId'] + return `${runtimeConfig.public.publicWebFrontendUrl}/api/sso/oauth2/callback/${nextProviderId}/` } - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${authProvider.id}/` + return `${runtimeConfig.public.publicWebFrontendUrl}/api/sso/oauth2/callback/${authProvider.id}/` } populateLoginOptions(authProviderOption) { @@ -287,10 +292,10 @@ export class GitLabAuthProviderType extends AuthProviderType { getCallbackUrl(authProvider) { if (!authProvider.id) { const nextProviderId = - this.app.store.getters['authProviderAdmin/getNextProviderId'] - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/` + this.app.$store.getters['authProviderAdmin/getNextProviderId'] + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${nextProviderId}/` } - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${authProvider.id}/` + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${authProvider.id}/` } getOrder() { @@ -324,10 +329,10 @@ export class OpenIdConnectAuthProviderType extends OAuth2AuthProviderTypeMixin( getCallbackUrl(authProvider) { if (!authProvider.id) { const nextProviderId = - this.app.store.getters['authProviderAdmin/getNextProviderId'] - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${nextProviderId}/` + this.app.$store.getters['authProviderAdmin/getNextProviderId'] + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${nextProviderId}/` } - return `${this.app.$config.PUBLIC_BACKEND_URL}/api/sso/oauth2/callback/${authProvider.id}/` + return `${this.app.$config.public.publicBackendUrl}/api/sso/oauth2/callback/${authProvider.id}/` } handleServerError(vueComponentInstance, error) { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue index 716a575ff7..11899e2c14 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElement.vue @@ -119,7 +119,7 @@ export default { resolvedDefaultValue() {}, resolvedDefaultValueWithMetadata: { handler(value) { - if (process.client) { + if (import.meta.client) { this.updatedMetadata() } this.inputValue = value diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue index 0e7fa8b515..f3814258a2 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/components/elements/FileInputElementForm.vue @@ -32,7 +32,9 @@
diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js index 9d183d5d45..d1c7517d2e 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/builder/elementTypes.js @@ -16,8 +16,8 @@ import { BuilderFileInputElementPaidFeature } from '@baserow_enterprise/paidFeat import { AfterLoginEvent } from '@baserow/modules/builder/eventTypes' -import elementImageAuthForm from '@baserow_enterprise/assets/images/builder/element-auth_form.svg' -import elementImageFileInput from '@baserow_enterprise/assets/images/builder/element-file_input.svg' +import elementImageAuthForm from '@baserow_enterprise/assets/images/builder/element-auth_form.svg?url' +import elementImageFileInput from '@baserow_enterprise/assets/images/builder/element-file_input.svg?url' import EnterpriseFeaturesObject from '@baserow_enterprise/features' @@ -27,11 +27,11 @@ export class AuthFormElementType extends ElementType { } get name() { - return this.app.i18n.t('elementType.authForm') + return this.app.$i18n.t('elementType.authForm') } get description() { - return this.app.i18n.t('elementType.authFormDescription') + return this.app.$i18n.t('elementType.authFormDescription') } get iconClass() { @@ -60,7 +60,7 @@ export class AuthFormElementType extends ElementType { if (!element.user_source_id) { return this.$t('elementType.errorUserSourceMissing') } - const userSource = this.app.store.getters['userSource/getUserSourceById']( + const userSource = this.app.$store.getters['userSource/getUserSourceById']( builder, element.user_source_id ) @@ -73,7 +73,7 @@ export class AuthFormElementType extends ElementType { const hasLoginOptions = Object.keys(loginOptions).length !== 0 if (!hasLoginOptions) { - return this.app.i18n.t('elementType.errorUserSourceHasNoLoginOption') + return this.app.$i18n.t('elementType.errorUserSourceHasNoLoginOption') } return super.getErrorMessage(element, applicationContext) @@ -113,11 +113,11 @@ export class FileInputElementType extends FormElementType { } get name() { - return this.app.i18n.t('elementType.fileInput') + return this.app.$i18n.t('elementType.fileInput') } get description() { - return this.app.i18n.t('elementType.fileInputDescription') + return this.app.$i18n.t('elementType.fileInputDescription') } get iconClass() { @@ -231,7 +231,7 @@ export class FileInputElementType extends FormElementType { workspace.id ) ) { - return this.app.i18n.t('enterprise.deactivated') + return this.app.$i18n.t('enterprise.deactivated') } return super.isDeactivatedReason({ workspace }) } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js index 662fddaaf8..4f3c0e1965 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/builderPageDecoratorTypes.js @@ -1,5 +1,6 @@ import { Registerable } from '@baserow/modules/core/registry' import EnterpriseFeaturesObject from '@baserow_enterprise/features' +import MadeWithBaserowBuilderDecorator from '@baserow_enterprise/components/builder/MadeWithBaserowBuilderDecorator' /** * The BuilderPageDecorator type serves as a wrapper component that can be @@ -48,8 +49,7 @@ export class MadeWithBaserowBuilderPageDecoratorType extends BuilderPageDecorato } get component() { - return require('@baserow_enterprise/components/builder/MadeWithBaserowBuilderDecorator') - .default + return MadeWithBaserowBuilderDecorator } isDecorationAllowed(workspace) { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js b/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js index b0db8e594a..2935788d4a 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js +++ b/enterprise/web-frontend/modules/baserow_enterprise/builderSettingTypes.js @@ -1,8 +1,12 @@ +import { markRaw } from 'vue' import { BuilderSettingType } from '@baserow/modules/builder/builderSettingTypes' -import CustomCodeSetting from '@baserow_enterprise/components/builder/CustomCodeSetting' +import CustomCodeSettingComponent from '@baserow_enterprise/components/builder/CustomCodeSetting' import EnterpriseFeatures from '@baserow_enterprise/features' import { BuilderCustomCodePaidFeature } from '@baserow_enterprise/paidFeatures' -import PaidFeaturesModal from '@baserow_premium/components/PaidFeaturesModal' +import PaidFeaturesModalComponent from '@baserow_premium/components/PaidFeaturesModal' + +const CustomCodeSetting = markRaw(CustomCodeSettingComponent) +const PaidFeaturesModal = markRaw(PaidFeaturesModalComponent) export class CustomCodeBuilderSettingType extends BuilderSettingType { static getType() { @@ -10,7 +14,7 @@ export class CustomCodeBuilderSettingType extends BuilderSettingType { } get name() { - return this.app.i18n.t('builderSettingTypes.customCode') + return this.app.$i18n.t('builderSettingTypes.customCode') } get icon() { @@ -32,7 +36,7 @@ export class CustomCodeBuilderSettingType extends BuilderSettingType { workspace.id ) ) { - return this.app.i18n.t('enterprise.deactivated') + return this.app.$i18n.t('enterprise.deactivated') } return super.isDeactivatedReason({ workspace }) } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue index b76f871f27..d4047a0b16 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/AuditLogSidebarWorkspace.vue @@ -2,6 +2,7 @@ -
- by Baserow -
- +
by Baserow
+
@@ -16,13 +10,13 @@ export default { name: 'EnterpriseLogo', methods: { - showLabel(parent) { - const settings = parent.$store.getters['settings/get'] + showLabel() { + const settings = this.$store.getters['settings/get'] return !!settings.co_branding_logo }, getLogoUrl(parent) { - const baserowLogo = require('@baserow/modules/core/static/img/logo.svg') - const settings = parent.$store.getters['settings/get'] + const baserowLogo = require('@baserow/modules/core/static/img/logo.svg?url') + const settings = this.$store.getters['settings/get'] if (settings.co_branding_logo) { return settings.co_branding_logo.url } diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue index acd99ded84..6575dbf547 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/InvitesRoleField.vue @@ -28,6 +28,7 @@ import { notifyIf } from '@baserow/modules/core/utils/error' export default { name: 'InvitationsRoleField', + emits: ['row-update'], components: { EditRoleContext }, props: { row: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue index b98abadf69..9753d37ec8 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/MembersRoleField.vue @@ -50,6 +50,7 @@ import { notifyIf } from '@baserow/modules/core/utils/error' export default { name: 'MembersRoleField', + emits: ['refresh', 'row-update'], components: { EditRoleContext }, props: { row: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue index 02d4959ea8..a31a7075aa 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/AuthProviderItem.vue @@ -32,7 +32,7 @@ v-if="canBeDeleted(authProvider.type)" ref="deleteModal" :auth-provider="authProvider" - @deleteConfirmed="onDeleteConfirmed" + @delete-confirmed="onDeleteConfirmed" @cancel="$refs.deleteModal.hide()" /> diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue index b07a81ce85..36f61a1971 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/CreateAuthProviderContext.vue @@ -24,6 +24,7 @@ import AuthProviderIcon from '@baserow_enterprise/components/AuthProviderIcon.vu export default { name: 'CreateAuthProviderContext', + emits: ['create'], components: { AuthProviderIcon }, mixins: [context], props: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue index abb3f20cb2..4339057c5c 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/contexts/EditAuthProviderMenuContext.vue @@ -33,6 +33,7 @@ import authProviderItemMixin from '@baserow_enterprise/mixins/authProviderItemMi export default { name: 'EditAuthProviderMenuContext', + emits: ['delete', 'edit'], components: {}, mixins: [context, authProviderItemMixin], props: { diff --git a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue index 75aa8cae7e..90f3eb44a8 100644 --- a/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue +++ b/enterprise/web-frontend/modules/baserow_enterprise/components/admin/modals/AuditLogExportModal.vue @@ -1,5 +1,5 @@