From 4222491ebea81e9b6e503b5ce286fb0a48fa19c4 Mon Sep 17 00:00:00 2001 From: Moritz Vetter <16950410+Isokaeder@users.noreply.github.com> Date: Wed, 8 Jan 2025 13:31:49 +0100 Subject: [PATCH] ui(eslint): update typescript-eslint and plugins to latest --- package.json | 5 +- .../components/CodePreviewLegacy.vue | 2 +- packages/documentation/components/NavBar.vue | 8 +- packages/documentation/pages/changelog.vue | 2 +- .../pages/foundations/icons/list.vue | 2 +- .../pages/usage/components/avatar.vue | 20 +- .../pages/usage/components/breadcrumb.vue | 20 +- .../pages/usage/components/comment.vue | 30 +- .../pages/usage/components/drawer.vue | 2 +- .../usage/components/field-inline-edit.vue | 4 +- .../pages/usage/components/form-fields.vue | 14 +- .../pages/usage/components/heading.vue | 2 +- .../pages/usage/components/loadings.vue | 2 +- .../pages/usage/components/modal.vue | 4 +- .../pages/usage/components/popover.vue | 2 +- .../pages/usage/components/table.vue | 5 +- packages/eslint-config/package.json | 8 +- packages/eslint-config/source/index.ts | 15 +- packages/kotti-ui/package.json | 2 +- .../kotti-ui/source/kotti-avatar/KtAvatar.vue | 6 +- .../source/kotti-breadcrumb/KtBreadcrumb.vue | 6 +- .../kotti-field-currency/KtFieldCurrency.vue | 10 +- .../source/kotti-field-currency/types.ts | 2 +- .../kotti-field-date/KtFieldDateTime.vue | 4 +- .../kotti-field-date/KtFieldDateTimeRange.vue | 4 +- .../KtFieldInlineEdit.vue | 2 +- .../components/ConfirmButton.vue | 4 +- .../components/EditIcon.vue | 2 +- .../kotti-field-number/KtFieldNumber.vue | 2 +- .../kotti-field-password/KtFieldPassword.vue | 8 +- .../source/kotti-file-upload/KtFileUpload.vue | 2 +- .../KtFormControllerList.test.ts | 2 +- .../KtFormControllerObject.test.ts | 2 +- .../kotti-ui/source/kotti-form/KtForm.test.ts | 4 +- packages/kotti-ui/source/kotti-form/types.ts | 7 +- packages/kotti-ui/source/kotti-i18n/types.ts | 2 +- .../kotti-ui/source/kotti-line/KtLine.vue | 2 +- .../source/kotti-pagination/KtPagination.vue | 20 +- .../components/PaginationFlexible.vue | 8 +- .../components/PaginationFractionated.vue | 4 +- .../components/TableBody.ts | 2 +- .../components/TableBodyExpandRow.ts | 4 +- .../components/TableHeader.vue | 34 +- .../source/kotti-table-legacy/logic/types.ts | 2 - .../kotti-ui/source/kotti-table/KtTable.vue | 6 +- .../components/filters/NumberRange.vue | 6 +- .../kotti-table/standard-table/simple-hash.ts | 4 +- .../kotti-table/standard-table/storage.ts | 28 +- .../kotti-table/standard-table/types.ts | 27 +- .../standard-table/utilities/filters.ts | 1 + .../standard-table/utilities/translation.ts | 1 + .../source/kotti-table/table/hooks.ts | 4 +- .../kotti-table/table/tanstack-table/index.ts | 2 +- .../source/kotti-toaster/create-toaster.ts | 2 + .../toggle-inner/ToggleInner.vue | 2 +- packages/kotti-ui/source/types/kotti.ts | 2 +- yarn.lock | 368 ++++++++++++------ 57 files changed, 439 insertions(+), 308 deletions(-) diff --git a/package.json b/package.json index 41eac26f81..1efd9687fe 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "url": "https://github.com/carsoli" } ], + "dependencies": {}, "devDependencies": { "@3yourmind/eslint-config": "*", "@types/eslint__js": "^8.42.3", @@ -68,8 +69,8 @@ "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.2", "turbo": "^1.13.3", - "typescript": "5.7.2", - "typescript-eslint": "^8.19.0" + "typescript": "5.4.4", + "typescript-eslint": "^7.8.0" }, "engines": { "node": "20" diff --git a/packages/documentation/components/CodePreviewLegacy.vue b/packages/documentation/components/CodePreviewLegacy.vue index 687a0f3f39..08d9aa8fbd 100644 --- a/packages/documentation/components/CodePreviewLegacy.vue +++ b/packages/documentation/components/CodePreviewLegacy.vue @@ -16,8 +16,8 @@ import { computed, defineComponent, ref } from 'vue' export default defineComponent({ name: 'CodePreviewLegacy', props: { - vueSlotLabel: { default: 'Kotti-UI', type: String }, styleSlotLabel: { default: 'Kotti-Style', type: String }, + vueSlotLabel: { default: 'Kotti-UI', type: String }, }, setup(props) { const showCode = ref(true) diff --git a/packages/documentation/components/NavBar.vue b/packages/documentation/components/NavBar.vue index 1e67d12310..4592385329 100644 --- a/packages/documentation/components/NavBar.vue +++ b/packages/documentation/components/NavBar.vue @@ -68,20 +68,20 @@ export default defineComponent({ navLogo, quickLinks: [ { - title: 'Create New Issue', link: 'https://github.com/3YOURMIND/kotti/issues/new/choose', + title: 'Create New Issue', }, { - title: 'NPM', link: 'https://www.npmjs.com/package/@3yourmind/kotti-ui', + title: 'NPM', }, { - title: 'Issues', link: 'https://github.com/3YOURMIND/kotti/issues', + title: 'Issues', }, { - title: 'Readme', link: 'https://github.com/3YOURMIND/kotti#readme', + title: 'Readme', }, ], sections: computed(() => diff --git a/packages/documentation/pages/changelog.vue b/packages/documentation/pages/changelog.vue index 5c9fb6bde5..781dd2cc53 100644 --- a/packages/documentation/pages/changelog.vue +++ b/packages/documentation/pages/changelog.vue @@ -142,9 +142,9 @@ export default defineComponent({ return { dayjs, isLoading, + releases, renderMarkdown: (markdown: string) => marked.parse(convertPoundToIssueLink(markdown)), - releases, sortedReleases: computed(() => cloneDeep(releases.value).sort((a, b) => naturalSort({ direction: 'desc' })(a.tag_name, b.tag_name), diff --git a/packages/documentation/pages/foundations/icons/list.vue b/packages/documentation/pages/foundations/icons/list.vue index 48648bb322..0e6ca0590d 100644 --- a/packages/documentation/pages/foundations/icons/list.vue +++ b/packages/documentation/pages/foundations/icons/list.vue @@ -34,7 +34,6 @@ export default defineComponent({ }, setup() { const component: { meta: Kotti.Meta; name: string } = { - name: 'Icons', meta: { addedVersion: null, deprecated: null, @@ -48,6 +47,7 @@ export default defineComponent({ schema: yocoIconSchema, }, }, + name: 'Icons', } return { diff --git a/packages/documentation/pages/usage/components/avatar.vue b/packages/documentation/pages/usage/components/avatar.vue index 07d0a415d3..165aa8c54b 100644 --- a/packages/documentation/pages/usage/components/avatar.vue +++ b/packages/documentation/pages/usage/components/avatar.vue @@ -110,13 +110,6 @@ export default defineComponent({ }, setup() { return { - avatarSettings: ref({ - isHoverable: false, - name: "Jony O'Five", - showContentSlot: false, - size: Kotti.Avatar.Size.MEDIUM, - src: 'https://picsum.photos/200/100', - }), avatarGroupSettings: ref< Kotti.AvatarGroup.Props & { showContentSlot: boolean } >({ @@ -133,13 +126,20 @@ export default defineComponent({ showContentSlot: false, size: Kotti.Avatar.Size.MEDIUM, }), + avatarSettings: ref({ + isHoverable: false, + name: "Jony O'Five", + showContentSlot: false, + size: Kotti.Avatar.Size.MEDIUM, + src: 'https://picsum.photos/200/100', + }), + Kotti, + KtAvatar, + KtAvatarGroup, sizeOptions: Object.entries(Kotti.Avatar.Size).map(([label, value]) => ({ label, value, })), - Kotti, - KtAvatar, - KtAvatarGroup, Yoco, } }, diff --git a/packages/documentation/pages/usage/components/breadcrumb.vue b/packages/documentation/pages/usage/components/breadcrumb.vue index 1731550226..695e9c2069 100644 --- a/packages/documentation/pages/usage/components/breadcrumb.vue +++ b/packages/documentation/pages/usage/components/breadcrumb.vue @@ -103,44 +103,44 @@ export default defineComponent({ component: KtBreadcrumb, links: [ { - title: 'Kotti', + isCompleted: true, onClick: () => { activeIndex.value = 0 void router.value.push('#') }, - isCompleted: true, + title: 'Kotti', }, { - title: 'Usage', + isCompleted: true, onClick: () => { activeIndex.value = 1 void router.value.push('#') }, - isCompleted: true, + title: 'Usage', }, { - title: 'Components', + isCompleted: true, onClick: () => { activeIndex.value = 2 void router.value.push('#') }, - isCompleted: true, + title: 'Components', }, { - title: 'Links', + isCompleted: false, onClick: () => { activeIndex.value = 3 void router.value.push('#') }, - isCompleted: false, + title: 'Links', }, { - title: 'Breadcrumbs', + isDisabled: true, onClick: () => { activeIndex.value = 4 void router.value.push('#') }, - isDisabled: true, + title: 'Breadcrumbs', }, ], textSeparator: { diff --git a/packages/documentation/pages/usage/components/comment.vue b/packages/documentation/pages/usage/components/comment.vue index 393239b8dd..2dd07499a6 100644 --- a/packages/documentation/pages/usage/components/comment.vue +++ b/packages/documentation/pages/usage/components/comment.vue @@ -394,8 +394,8 @@ export default defineComponent({ comment.id === payload.id ? { ...comment, - isModified: true, isInternal: payload.isInternal, + isModified: true, message: payload.message, } : comment @@ -432,12 +432,16 @@ export default defineComponent({ }), ) }, - handleEdit(payload: Kotti.Comment.Events.Edit) { + handleDelete(payload: Kotti.Comment.Events.Delete) { if (!payload.parentId) { if (!comments.value.some((comment) => comment.id === payload.id)) - throw new Error(`Comment not found, comment id: ${payload.id}`) + throw new Error( + `Comment not found, comment id: ${String(payload.id)}`, + ) - comments.value = comments.value.map(editComment(payload)) + comments.value = comments.value.filter( + (comment) => comment.id !== payload.id, + ) return } @@ -455,18 +459,16 @@ export default defineComponent({ `Comment not found, comment id: ${String(payload.id)}`, ) - parentComment.replies = parentComment.replies.map(editComment(payload)) + parentComment.replies = parentComment.replies.filter( + (reply) => reply.id !== payload.id, + ) }, - handleDelete(payload: Kotti.Comment.Events.Delete) { + handleEdit(payload: Kotti.Comment.Events.Edit) { if (!payload.parentId) { if (!comments.value.some((comment) => comment.id === payload.id)) - throw new Error( - `Comment not found, comment id: ${String(payload.id)}`, - ) + throw new Error(`Comment not found, comment id: ${payload.id}`) - comments.value = comments.value.filter( - (comment) => comment.id !== payload.id, - ) + comments.value = comments.value.map(editComment(payload)) return } @@ -484,9 +486,7 @@ export default defineComponent({ `Comment not found, comment id: ${String(payload.id)}`, ) - parentComment.replies = parentComment.replies.filter( - (reply) => reply.id !== payload.id, - ) + parentComment.replies = parentComment.replies.map(editComment(payload)) }, postEscapeParser: (msg: string) => msg.replaceAll('\n', '
'), settings, diff --git a/packages/documentation/pages/usage/components/drawer.vue b/packages/documentation/pages/usage/components/drawer.vue index d5d2f95259..063ceadc7b 100644 --- a/packages/documentation/pages/usage/components/drawer.vue +++ b/packages/documentation/pages/usage/components/drawer.vue @@ -149,8 +149,8 @@ import ComponentInfo from '~/components/ComponentInfo.vue' export default defineComponent({ name: 'DocumentationPageUsageComponentsDrawer', components: { - ComponentInfo, CodePreviewLegacy, + ComponentInfo, }, data() { return { diff --git a/packages/documentation/pages/usage/components/field-inline-edit.vue b/packages/documentation/pages/usage/components/field-inline-edit.vue index 79b7b2ce92..1148f2f657 100644 --- a/packages/documentation/pages/usage/components/field-inline-edit.vue +++ b/packages/documentation/pages/usage/components/field-inline-edit.vue @@ -174,8 +174,6 @@ export default defineComponent({ { label: '', value: 'token' }, ]), component: KtFieldInlineEdit, - formValue, - fieldValue: computed(() => formValue.value.fieldValue), fieldProps: computed(() => ({ autoComplete: settings.value.autoComplete === 'token' @@ -200,6 +198,8 @@ export default defineComponent({ type: settings.value.validation ?? 'empty', }), })), + fieldValue: computed(() => formValue.value.fieldValue), + formValue, onConfirm: (newVal: Kotti.FieldInlineEdit.Events.Confirm) => { success({ text: newVal ?? '' }) }, diff --git a/packages/documentation/pages/usage/components/form-fields.vue b/packages/documentation/pages/usage/components/form-fields.vue index 02c2b08e83..d3ba685804 100644 --- a/packages/documentation/pages/usage/components/form-fields.vue +++ b/packages/documentation/pages/usage/components/form-fields.vue @@ -1815,6 +1815,13 @@ export default defineComponent({ reset: () => { values.value = INITIAL_VALUES }, + savedFieldsAdd: () => { + savedFields.value = [ + ...savedFields.value, + cloneDeep(componentValue.value), + ] + saveSavedFieldsToLocalStorage(savedFields.value) + }, savedFieldsMap: computed(() => savedFields.value.map( (component): ComponentRepresentation => ({ @@ -1824,13 +1831,6 @@ export default defineComponent({ }), ), ), - savedFieldsAdd: () => { - savedFields.value = [ - ...savedFields.value, - cloneDeep(componentValue.value), - ] - saveSavedFieldsToLocalStorage(savedFields.value) - }, savedFieldsRemove: (toRemove: number) => { savedFields.value = savedFields.value.filter( (_, index) => index !== toRemove, diff --git a/packages/documentation/pages/usage/components/heading.vue b/packages/documentation/pages/usage/components/heading.vue index 3be84fcff8..34677a82ee 100644 --- a/packages/documentation/pages/usage/components/heading.vue +++ b/packages/documentation/pages/usage/components/heading.vue @@ -100,10 +100,10 @@ export default defineComponent({ setup() { return { component: KtHeading, - toggle: ref(false), showAlert() { info({ text: 'H3 Action Clicked' }) }, + toggle: ref(false), } }, }) diff --git a/packages/documentation/pages/usage/components/loadings.vue b/packages/documentation/pages/usage/components/loadings.vue index 021444638f..0c691471a1 100644 --- a/packages/documentation/pages/usage/components/loadings.vue +++ b/packages/documentation/pages/usage/components/loadings.vue @@ -132,7 +132,6 @@ export default defineComponent({ }, setup() { const component: { meta: Kotti.Meta; name: string } = { - name: 'Loadings', meta: { addedVersion: null, deprecated: null, @@ -143,6 +142,7 @@ export default defineComponent({ slots: {}, typeScript: null, }, + name: 'Loadings', } return { diff --git a/packages/documentation/pages/usage/components/modal.vue b/packages/documentation/pages/usage/components/modal.vue index 963c8246f0..95a473f7ef 100644 --- a/packages/documentation/pages/usage/components/modal.vue +++ b/packages/documentation/pages/usage/components/modal.vue @@ -97,8 +97,6 @@ export default defineComponent({ setup() { return { component: KtModal, - showAnnouncement: ref(true), - showModal: ref(false), settings: ref<{ preventCloseOutside: boolean size: Kotti.Modal.Size @@ -116,6 +114,8 @@ export default defineComponent({ header: true, }, }), + showAnnouncement: ref(true), + showModal: ref(false), } }, }) diff --git a/packages/documentation/pages/usage/components/popover.vue b/packages/documentation/pages/usage/components/popover.vue index 5daa4e91d8..299ae8f1f0 100644 --- a/packages/documentation/pages/usage/components/popover.vue +++ b/packages/documentation/pages/usage/components/popover.vue @@ -289,6 +289,7 @@ export default defineComponent({ value, })), ), + UsageMode, usageOptions: computed(() => [ { label: 'Use Slot', value: UsageMode.SLOT }, { label: 'Use Options', value: UsageMode.OPTIONS }, @@ -297,7 +298,6 @@ export default defineComponent({ value: UsageMode.SELECTABLE_OPTIONS, }, ]), - UsageMode, values: ref< Pick & { usageMode: UsageMode diff --git a/packages/documentation/pages/usage/components/table.vue b/packages/documentation/pages/usage/components/table.vue index 4c4e04a129..dc51844368 100644 --- a/packages/documentation/pages/usage/components/table.vue +++ b/packages/documentation/pages/usage/components/table.vue @@ -438,8 +438,9 @@ export default defineComponent({ }, expandMode, reverseColumnOrder: () => { - tableHook.api.columnOrder.value = - tableHook.api.columnOrder.value.reverse() + const localColumns = [...tableHook.api.columnOrder.value] + localColumns.reverse() + tableHook.api.columnOrder.value = localColumns }, showAllColumns: () => { tableHook.api.hiddenColumns.value = new Set() diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index edcce1508c..3246ac5366 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -4,20 +4,20 @@ "url": "https://github.com/3YOURMIND/kotti/issues" }, "dependencies": { - "@eslint/js": "^9.17.0", "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", + "@eslint/js": "^9.17.0", "@typescript-eslint/utils": "^8.19.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsonc": "^2.18.2", - "eslint-plugin-perfectionist": "^4.5.0", + "eslint-plugin-perfectionist": "^4.6.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-sonarjs": "^3.0.1", "eslint-plugin-unicorn": "^56.0.1", "eslint-plugin-vitest": "^0.5.4", "eslint-plugin-vue": "^9.32.0", - "globals": "^15.3.0", + "globals": "^15.14.0", "jsonc-eslint-parser": "^2.4.0", - "typescript-eslint": "^8.19.0", + "typescript-eslint": "^8.19.1", "vue-eslint-parser": "^9.4.3" }, "description": "ESLint config for 3YOURMIND", diff --git a/packages/eslint-config/source/index.ts b/packages/eslint-config/source/index.ts index 5cd7c97d0e..da1e14ab58 100644 --- a/packages/eslint-config/source/index.ts +++ b/packages/eslint-config/source/index.ts @@ -152,6 +152,7 @@ const baseConfig = tseslint.config({ // SonarJS 'sonarjs/deprecation': 'off', // deprecation is intentionally used for flagging outdated but not yet removed code 'sonarjs/different-types-comparison': 'off', // conflicts with @typescript-eslint/no-unnecessary-condition + 'sonarjs/empty-string-repetition': 'off', 'sonarjs/fixme-tag': 'off', 'sonarjs/function-return-type': 'off', 'sonarjs/no-collapsible-if': 'off', // replaced by unicorn/no-lonely-if @@ -304,7 +305,17 @@ const plugin = { rules, } satisfies TSESLint.FlatConfig.Plugin -export default { +const kottiEslintConfig: { + configs: { + default: TSESLint.FlatConfig.ConfigArray + global: TSESLint.FlatConfig.ConfigArray + json: TSESLint.FlatConfig.ConfigArray + tests: TSESLint.FlatConfig.ConfigArray + untyped: TSESLint.FlatConfig.ConfigArray + vue: TSESLint.FlatConfig.ConfigArray + } + plugin: TSESLint.FlatConfig.Plugin +} = { configs: { /** * Should be used on .ts and .tsx files. This enables rules that rely on type checking. @@ -672,3 +683,5 @@ export default { }, plugin, } + +export default kottiEslintConfig diff --git a/packages/kotti-ui/package.json b/packages/kotti-ui/package.json index 66ee4f47c5..040cb5d9a8 100644 --- a/packages/kotti-ui/package.json +++ b/packages/kotti-ui/package.json @@ -40,7 +40,7 @@ "vitest": "^1.6.0", "vue": "^2.7", "vue-template-compiler": "^2.7", - "vue-tsc": "^2.2.0" + "vue-tsc": "^1.8.22" }, "exports": { ".": { diff --git a/packages/kotti-ui/source/kotti-avatar/KtAvatar.vue b/packages/kotti-ui/source/kotti-avatar/KtAvatar.vue index f8634907cd..354eae3894 100644 --- a/packages/kotti-ui/source/kotti-avatar/KtAvatar.vue +++ b/packages/kotti-ui/source/kotti-avatar/KtAvatar.vue @@ -74,12 +74,12 @@ export default defineComponent({ })), avatarFallback, contentRef, - onImageFailedToLoad: () => { - avatarFallback.value = false - }, onAvatarContainerClick(event: MouseEvent) { emit('click', event) }, + onImageFailedToLoad: () => { + avatarFallback.value = false + }, triggerRef, Yoco, } diff --git a/packages/kotti-ui/source/kotti-breadcrumb/KtBreadcrumb.vue b/packages/kotti-ui/source/kotti-breadcrumb/KtBreadcrumb.vue index b6c4f457c9..f4d61c4f0c 100644 --- a/packages/kotti-ui/source/kotti-breadcrumb/KtBreadcrumb.vue +++ b/packages/kotti-ui/source/kotti-breadcrumb/KtBreadcrumb.vue @@ -44,11 +44,11 @@ export default defineComponent({ breadCrumbClasses: (item: KottiBreadcrumb.Breadcrumb, index: number) => { return { 'kt-breadcrumb__list-item': true, - 'kt-breadcrumb__list-item--is-disabled': item.isDisabled, - 'kt-breadcrumb__list-item--is-completed': - !item.isDisabled && item.isCompleted, 'kt-breadcrumb__list-item--is-active': !item.isDisabled && index === props.activeIndex, + 'kt-breadcrumb__list-item--is-completed': + !item.isDisabled && item.isCompleted, + 'kt-breadcrumb__list-item--is-disabled': item.isDisabled, } }, handleClick: (item: KottiBreadcrumb.Breadcrumb) => { diff --git a/packages/kotti-ui/source/kotti-field-currency/KtFieldCurrency.vue b/packages/kotti-ui/source/kotti-field-currency/KtFieldCurrency.vue index 54ff1ebe56..db531c4930 100644 --- a/packages/kotti-ui/source/kotti-field-currency/KtFieldCurrency.vue +++ b/packages/kotti-ui/source/kotti-field-currency/KtFieldCurrency.vue @@ -156,11 +156,6 @@ export default defineComponent({ ) return { - modifiedField: computed(() => ({ - ...field, - prefix: currencyFormat.value.symbol, - })), - inputRef, inputProps: computed( (): InputHTMLAttributes & { class: Record @@ -179,6 +174,11 @@ export default defineComponent({ value: internalStringValue.value, }), ), + inputRef, + modifiedField: computed(() => ({ + ...field, + prefix: currencyFormat.value.symbol, + })), onInput: (event: Event) => { const value = (event.target as HTMLInputElement).value diff --git a/packages/kotti-ui/source/kotti-field-currency/types.ts b/packages/kotti-ui/source/kotti-field-currency/types.ts index 31464a850a..f39bf24070 100644 --- a/packages/kotti-ui/source/kotti-field-currency/types.ts +++ b/packages/kotti-ui/source/kotti-field-currency/types.ts @@ -3,7 +3,7 @@ import { z } from 'zod' import { KottiField } from '../kotti-field/types' export module KottiFieldCurrency { - const VALUE_PROP_REGEX = /^-?(0?|([1-9][0-9]*))?(\.[0-9]+)?$/ + const VALUE_PROP_REGEX = /^-?(0?|([1-9]\d*))?(\.\d+)?$/ export const valueSchema = z.string().regex(VALUE_PROP_REGEX).nullable() export type Value = z.output diff --git a/packages/kotti-ui/source/kotti-field-date/KtFieldDateTime.vue b/packages/kotti-ui/source/kotti-field-date/KtFieldDateTime.vue index 8881bd69e5..00e2c67200 100644 --- a/packages/kotti-ui/source/kotti-field-date/KtFieldDateTime.vue +++ b/packages/kotti-ui/source/kotti-field-date/KtFieldDateTime.vue @@ -83,6 +83,8 @@ export default defineComponent({ const isInPopover = inject(KT_IS_IN_POPOVER, false) return { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + elDateRef: elDateRef as any, elDateTimePickerProps: computed( (): Partial => ({ ...EL_DATE_TIME_PROPS, @@ -101,8 +103,6 @@ export default defineComponent({ value: field.currentValue ?? '', }), ), - // eslint-disable-next-line @typescript-eslint/no-explicit-any - elDateRef: elDateRef as any, field, inputContainerRef, onInput: (value: KottiFieldDateTime.Value) => { diff --git a/packages/kotti-ui/source/kotti-field-date/KtFieldDateTimeRange.vue b/packages/kotti-ui/source/kotti-field-date/KtFieldDateTimeRange.vue index 8d17a4b370..2c1f2bb146 100644 --- a/packages/kotti-ui/source/kotti-field-date/KtFieldDateTimeRange.vue +++ b/packages/kotti-ui/source/kotti-field-date/KtFieldDateTimeRange.vue @@ -85,6 +85,8 @@ export default defineComponent({ const isInPopover = inject(KT_IS_IN_POPOVER, false) return { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + elDateRef: elDateRef as any, elDateTimeRangePickerProps: computed( (): Partial => ({ ...EL_DATE_TIME_PROPS, @@ -108,8 +110,6 @@ export default defineComponent({ ], }), ), - // eslint-disable-next-line @typescript-eslint/no-explicit-any - elDateRef: elDateRef as any, field, inputContainerRef, onInput: (value: KottiFieldDateTimeRange.Value | null) => { diff --git a/packages/kotti-ui/source/kotti-field-inline-edit/KtFieldInlineEdit.vue b/packages/kotti-ui/source/kotti-field-inline-edit/KtFieldInlineEdit.vue index b530050d86..f9188dc094 100644 --- a/packages/kotti-ui/source/kotti-field-inline-edit/KtFieldInlineEdit.vue +++ b/packages/kotti-ui/source/kotti-field-inline-edit/KtFieldInlineEdit.vue @@ -295,7 +295,6 @@ export default defineComponent({ onConfirm() } }, - sharedProps, rootClasses: computed(() => ({ 'kt-field-inline-edit': true, 'kt-field-inline-edit--is-editable': !props.isReadonly, @@ -303,6 +302,7 @@ export default defineComponent({ isEditing.value && !props.isDisabled, 'kt-field-inline-edit--is-readonly': props.isReadonly, })), + sharedProps, textareaProps: computed( (): TextareaHTMLAttributes & { class: Record diff --git a/packages/kotti-ui/source/kotti-field-inline-edit/components/ConfirmButton.vue b/packages/kotti-ui/source/kotti-field-inline-edit/components/ConfirmButton.vue index b05bca879a..88ab561e15 100644 --- a/packages/kotti-ui/source/kotti-field-inline-edit/components/ConfirmButton.vue +++ b/packages/kotti-ui/source/kotti-field-inline-edit/components/ConfirmButton.vue @@ -15,8 +15,8 @@ import { Yoco } from '@3yourmind/yoco' export default defineComponent({ name: 'ConfirmButton', props: { - tabIndex: { type: Number, default: 0 }, - dataTest: { type: String, default: null }, + dataTest: { default: null, type: String }, + tabIndex: { default: 0, type: Number }, }, emits: ['confirm'], setup(props, { emit }) { diff --git a/packages/kotti-ui/source/kotti-field-inline-edit/components/EditIcon.vue b/packages/kotti-ui/source/kotti-field-inline-edit/components/EditIcon.vue index 0bbe9dc209..9f031cc40a 100644 --- a/packages/kotti-ui/source/kotti-field-inline-edit/components/EditIcon.vue +++ b/packages/kotti-ui/source/kotti-field-inline-edit/components/EditIcon.vue @@ -10,7 +10,7 @@ import { Yoco } from '@3yourmind/yoco' export default defineComponent({ name: 'EditIcon', props: { - isDisabled: { type: Boolean, default: false }, + isDisabled: { default: false, type: Boolean }, }, setup(props) { return { diff --git a/packages/kotti-ui/source/kotti-field-number/KtFieldNumber.vue b/packages/kotti-ui/source/kotti-field-number/KtFieldNumber.vue index f82ddfd18e..3313fcb0ae 100644 --- a/packages/kotti-ui/source/kotti-field-number/KtFieldNumber.vue +++ b/packages/kotti-ui/source/kotti-field-number/KtFieldNumber.vue @@ -305,7 +305,6 @@ export default defineComponent({ })), incrementButtonRef, incrementValue, - inputRef, inputProps: computed( (): InputHTMLAttributes & KottiField.Hook.Returns['inputProps'] & { @@ -326,6 +325,7 @@ export default defineComponent({ value: internalStringValue.value, }), ), + inputRef, onBlur: () => { forceUpdateDisplayedValue(field.currentValue) }, diff --git a/packages/kotti-ui/source/kotti-field-password/KtFieldPassword.vue b/packages/kotti-ui/source/kotti-field-password/KtFieldPassword.vue index 0086ef89ef..f49efbcb8d 100644 --- a/packages/kotti-ui/source/kotti-field-password/KtFieldPassword.vue +++ b/packages/kotti-ui/source/kotti-field-password/KtFieldPassword.vue @@ -36,6 +36,10 @@ export default defineComponent({ const { forceUpdate, forceUpdateKey } = useForceUpdate() return { field, + handleVisibilityChange: () => { + const isValueHidden = fieldType.value === 'password' + fieldType.value = isValueHidden ? 'text' : 'password' + }, inputProps: computed( (): InputHTMLAttributes & { class: string[] @@ -57,10 +61,6 @@ export default defineComponent({ forceUpdate() }, - handleVisibilityChange: () => { - const isValueHidden = fieldType.value === 'password' - fieldType.value = isValueHidden ? 'text' : 'password' - }, } }, }) diff --git a/packages/kotti-ui/source/kotti-file-upload/KtFileUpload.vue b/packages/kotti-ui/source/kotti-file-upload/KtFileUpload.vue index 45c5801db7..2bec34662e 100644 --- a/packages/kotti-ui/source/kotti-file-upload/KtFileUpload.vue +++ b/packages/kotti-ui/source/kotti-file-upload/KtFileUpload.vue @@ -171,7 +171,6 @@ export default defineComponent({ .filter((file) => preUploadedFileIds.value.has(file.id)) .map((file) => ({ ...file, validation: 'SUCCESS' })), ), - uploadedFilesList, sharedProps: computed(() => ({ dataTest: props.dataTest, extensions: props.extensions, @@ -184,6 +183,7 @@ export default defineComponent({ !props.hideDropArea && (props.allowMultiple || props.state.length === 0), ), + uploadedFilesList, } }, }) diff --git a/packages/kotti-ui/source/kotti-form-controller-list/KtFormControllerList.test.ts b/packages/kotti-ui/source/kotti-form-controller-list/KtFormControllerList.test.ts index fb57126db6..1087a7bc1f 100644 --- a/packages/kotti-ui/source/kotti-form-controller-list/KtFormControllerList.test.ts +++ b/packages/kotti-ui/source/kotti-form-controller-list/KtFormControllerList.test.ts @@ -15,8 +15,8 @@ import { localVue } from '../test-utils/index' import KtFormControllerList from './KtFormControllerList.vue' const TestField = defineComponent({ - name: 'TestField', components: { KtField }, + name: 'TestField', props: makeProps( KottiField.propsSchema.extend({ value: z.string().nullable().default(null), diff --git a/packages/kotti-ui/source/kotti-form-controller-object/KtFormControllerObject.test.ts b/packages/kotti-ui/source/kotti-form-controller-object/KtFormControllerObject.test.ts index b8c3a2b976..93ada986d4 100644 --- a/packages/kotti-ui/source/kotti-form-controller-object/KtFormControllerObject.test.ts +++ b/packages/kotti-ui/source/kotti-form-controller-object/KtFormControllerObject.test.ts @@ -15,8 +15,8 @@ import { localVue } from '../test-utils/index' import KtFormControllerObject from './KtFormControllerObject.vue' const TestField = defineComponent({ - name: 'TestField', components: { KtField }, + name: 'TestField', props: makeProps( KottiField.propsSchema.extend({ value: z.string().nullable().default(null), diff --git a/packages/kotti-ui/source/kotti-form/KtForm.test.ts b/packages/kotti-ui/source/kotti-form/KtForm.test.ts index 5b7d688ab0..4af288a37c 100644 --- a/packages/kotti-ui/source/kotti-form/KtForm.test.ts +++ b/packages/kotti-ui/source/kotti-form/KtForm.test.ts @@ -42,8 +42,8 @@ const useTestHook = ( } const TestField = defineComponent({ - name: 'TestField', components: { KtField }, + name: 'TestField', props: makeProps( KottiField.propsSchema.extend({ value: z.string().nullable().default(null), @@ -56,8 +56,8 @@ const TestField = defineComponent({ }) const TestFieldObject = defineComponent({ - name: 'TestFieldObject', components: { KtField }, + name: 'TestFieldObject', props: makeProps( KottiField.propsSchema.extend({ value: z.record(z.unknown()).nullable().default(null), diff --git a/packages/kotti-ui/source/kotti-form/types.ts b/packages/kotti-ui/source/kotti-form/types.ts index 71cb34b857..dd104db3e3 100644 --- a/packages/kotti-ui/source/kotti-form/types.ts +++ b/packages/kotti-ui/source/kotti-form/types.ts @@ -52,14 +52,17 @@ export module KottiForm { value: ContextType } - // eslint-disable-next-line @typescript-eslint/no-empty-interface + // eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type export interface AdditionalContext { - // TODO: notReallyFormKey: Array + // FIKME: notReallyFormKey: Array } export interface ValidationSummary { + // eslint-disable-next-line sonarjs/no-useless-intersection errors: Array + // eslint-disable-next-line sonarjs/no-useless-intersection successes: Array + // eslint-disable-next-line sonarjs/no-useless-intersection warnings: Array } diff --git a/packages/kotti-ui/source/kotti-i18n/types.ts b/packages/kotti-ui/source/kotti-i18n/types.ts index b9a4b67afc..e085ffa28a 100644 --- a/packages/kotti-ui/source/kotti-i18n/types.ts +++ b/packages/kotti-ui/source/kotti-i18n/types.ts @@ -2,10 +2,10 @@ import type { Ref } from 'vue' import { z } from 'zod' import type { KottiComment } from '../kotti-comment/types' -import type { KottiField } from '../kotti-field/types' import type { Shared as KottiFieldFileUploadShared } from '../kotti-field-file-upload/types' import type { KottiFieldInlineEdit } from '../kotti-field-inline-edit/types' import type { Shared as KottiFieldSelectShared } from '../kotti-field-select/types' +import type { KottiField } from '../kotti-field/types' import type { KottiFilters } from '../kotti-filters/types' import type { KottiFormSubmit } from '../kotti-form-submit/types' import type { KottiNavbar } from '../kotti-navbar/types' diff --git a/packages/kotti-ui/source/kotti-line/KtLine.vue b/packages/kotti-ui/source/kotti-line/KtLine.vue index beee777a5e..1cd78aadde 100644 --- a/packages/kotti-ui/source/kotti-line/KtLine.vue +++ b/packages/kotti-ui/source/kotti-line/KtLine.vue @@ -22,11 +22,11 @@ export default defineComponent({ handleClick: () => { if (props.isInteractive) emit('click') }, + Position: KottiLine.Position, textClasses: computed(() => ({ 'kt-line__text': true, 'kt-line__text--is-interactive': props.isInteractive, })), - Position: KottiLine.Position, } }, }) diff --git a/packages/kotti-ui/source/kotti-pagination/KtPagination.vue b/packages/kotti-ui/source/kotti-pagination/KtPagination.vue index 751b348ddd..d52cd03dc7 100644 --- a/packages/kotti-ui/source/kotti-pagination/KtPagination.vue +++ b/packages/kotti-ui/source/kotti-pagination/KtPagination.vue @@ -52,6 +52,12 @@ export default defineComponent({ const pageAmount = computed(() => Math.ceil(props.total / props.pageSize)) return { + nextPage: () => { + if (props.page >= pageAmount.value) return + emit('nextPageClicked', props.page + 1) + emit('setPage', props.page + 1) + }, + pageAmount, paginationComponent: computed(() => { const isFlexLogical = 2 * (props.adjacentAmount + 1) < pageAmount.value switch (props.pagingStyle) { @@ -66,16 +72,6 @@ export default defineComponent({ return PaginationExpanded.name } }), - nextPage: () => { - if (props.page >= pageAmount.value) return - emit('nextPageClicked', props.page + 1) - emit('setPage', props.page + 1) - }, - pageAmount, - paginatorClasses: (page: number) => ({ - 'kt-pagination__page-item': true, - 'kt-pagination__page-item--is-disabled': props.page === page, - }), paginationProps: computed(() => ({ adjacentAmount: props.adjacentAmount, currentPage: props.page, @@ -84,6 +80,10 @@ export default defineComponent({ pageSize: props.pageSize, total: props.total, })), + paginatorClasses: (page: number) => ({ + 'kt-pagination__page-item': true, + 'kt-pagination__page-item--is-disabled': props.page === page, + }), previousPage: () => { if (props.page === 1) return emit('previousPageClicked', props.page - 1) diff --git a/packages/kotti-ui/source/kotti-pagination/components/PaginationFlexible.vue b/packages/kotti-ui/source/kotti-pagination/components/PaginationFlexible.vue index 5bbacaa0f2..9f4e3d37f7 100644 --- a/packages/kotti-ui/source/kotti-pagination/components/PaginationFlexible.vue +++ b/packages/kotti-ui/source/kotti-pagination/components/PaginationFlexible.vue @@ -45,10 +45,10 @@ const PIXEL_MULTIPLIER = 2.8 export default defineComponent({ name: 'PaginationFlexible', props: { - adjacentAmount: { type: Number, required: true }, - currentPage: { type: Number, required: true }, - fixedWidth: { type: Boolean, required: true }, - maximumPage: { type: Number, required: true }, + adjacentAmount: { required: true, type: Number }, + currentPage: { required: true, type: Number }, + fixedWidth: { required: true, type: Boolean }, + maximumPage: { required: true, type: Number }, }, emits: ['setPage'], setup(props) { diff --git a/packages/kotti-ui/source/kotti-pagination/components/PaginationFractionated.vue b/packages/kotti-ui/source/kotti-pagination/components/PaginationFractionated.vue index 3a8e86c959..a976165345 100644 --- a/packages/kotti-ui/source/kotti-pagination/components/PaginationFractionated.vue +++ b/packages/kotti-ui/source/kotti-pagination/components/PaginationFractionated.vue @@ -11,8 +11,8 @@ export default defineComponent<{ }>({ name: 'PaginationFractionated', props: { - currentPage: { type: Number, required: true }, - maximumPage: { type: Number, required: true }, + currentPage: { required: true, type: Number }, + maximumPage: { required: true, type: Number }, }, setup(props) { return { diff --git a/packages/kotti-ui/source/kotti-table-legacy/components/TableBody.ts b/packages/kotti-ui/source/kotti-table-legacy/components/TableBody.ts index 85b59801f0..57b0009178 100644 --- a/packages/kotti-ui/source/kotti-table-legacy/components/TableBody.ts +++ b/packages/kotti-ui/source/kotti-table-legacy/components/TableBody.ts @@ -10,8 +10,8 @@ import { TableRow } from './TableRow' // eslint-disable-next-line @typescript-eslint/naming-convention export const TableBody = defineComponent({ - name: 'TableBody', components: { TableRow }, + name: 'TableBody', setup() { const tableState = inject(KT_TABLE) const tableStore = inject(KT_STORE) diff --git a/packages/kotti-ui/source/kotti-table-legacy/components/TableBodyExpandRow.ts b/packages/kotti-ui/source/kotti-table-legacy/components/TableBodyExpandRow.ts index a0c6dd4033..d243aaa813 100644 --- a/packages/kotti-ui/source/kotti-table-legacy/components/TableBodyExpandRow.ts +++ b/packages/kotti-ui/source/kotti-table-legacy/components/TableBodyExpandRow.ts @@ -8,12 +8,12 @@ export const TableBodyExpandRow = defineComponent({ name: 'TableBodyExpandRow', props: { row: { - type: Object as PropType, required: true, + type: Object as PropType, }, rowIndex: { - type: Number, required: true, + type: Number, }, }, setup(props) { diff --git a/packages/kotti-ui/source/kotti-table-legacy/components/TableHeader.vue b/packages/kotti-ui/source/kotti-table-legacy/components/TableHeader.vue index 0d7b032f76..51049f29b7 100644 --- a/packages/kotti-ui/source/kotti-table-legacy/components/TableHeader.vue +++ b/packages/kotti-ui/source/kotti-table-legacy/components/TableHeader.vue @@ -91,26 +91,10 @@ export default defineComponent({ return { canSort, - handleDragEnd: () => { - dropTargetColumn.value = null - }, - handleDragEnter: (column: Store.StateComponents.ColumnRepresentation) => { - dropTargetColumn.value = column - }, - handleDragStart: (column: Store.StateComponents.ColumnRepresentation) => { - draggedColumn.value = column - }, - handleDrop: (column: Store.StateComponents.ColumnRepresentation) => { - if (draggedColumn.value) { - tableStore.commit('orderBefore', draggedColumn.value, column) - draggedColumn.value = null - } - dropTargetColumn.value = null - }, getThClasses: (column: Store.StateComponents.ColumnRepresentation) => [ { - 'drag-over': isDraggedOver(column), clickable: canSort(column), + 'drag-over': isDraggedOver(column), dragging: useColumnDragToOrder.value, sortable: canSort(column), sorted: isSorted(column), @@ -124,6 +108,22 @@ export default defineComponent({ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition width: column.width ?? 'auto', }), + handleDragEnd: () => { + dropTargetColumn.value = null + }, + handleDragEnter: (column: Store.StateComponents.ColumnRepresentation) => { + dropTargetColumn.value = column + }, + handleDragStart: (column: Store.StateComponents.ColumnRepresentation) => { + draggedColumn.value = column + }, + handleDrop: (column: Store.StateComponents.ColumnRepresentation) => { + if (draggedColumn.value) { + tableStore.commit('orderBefore', draggedColumn.value, column) + draggedColumn.value = null + } + dropTargetColumn.value = null + }, handleSelectAll: () => { tableStore.commit('toggleAllSelection') }, diff --git a/packages/kotti-ui/source/kotti-table-legacy/logic/types.ts b/packages/kotti-ui/source/kotti-table-legacy/logic/types.ts index 6c7dfa7669..2b9112df66 100644 --- a/packages/kotti-ui/source/kotti-table-legacy/logic/types.ts +++ b/packages/kotti-ui/source/kotti-table-legacy/logic/types.ts @@ -86,8 +86,6 @@ export module Store { * Note: rowKey is right now not a required prop of KtTableLegacy, but from what I can see * the store either depends on its existence or at least has better performance if * it exists. - * - * TODO: investigate if rowKey should be a required prop. */ rowKey?: Kotti.TableLegacy.RowKey } diff --git a/packages/kotti-ui/source/kotti-table/KtTable.vue b/packages/kotti-ui/source/kotti-table/KtTable.vue index 1599df0eab..dd4d216341 100644 --- a/packages/kotti-ui/source/kotti-table/KtTable.vue +++ b/packages/kotti-ui/source/kotti-table/KtTable.vue @@ -248,7 +248,7 @@ export default defineComponent({ const columnIndex = tableContext.value.internal.getColumnIndex(columnId) const target = event.target as HTMLElement - const { x: elementX, width: elementWidth } = + const { width: elementWidth, x: elementX } = target.getBoundingClientRect() const cursorX = event.clientX @@ -334,6 +334,7 @@ export default defineComponent({ key: headerRow.id, })), ), + table, tableClasses: computed(() => ({ 'kt-table': true, 'kt-table--is-drag-and-drop-active': @@ -342,9 +343,8 @@ export default defineComponent({ props.isLoading && table.value.getRowModel().rows.length > 0, 'kt-table--is-scrollable': !props.isNotScrollable, })), - table, - tableContext: computed(() => tableContext.value), tableColSpan: computed(() => table.value.getAllFlatColumns().length), + tableContext: computed(() => tableContext.value), } }, }) diff --git a/packages/kotti-ui/source/kotti-table/standard-table/components/filters/NumberRange.vue b/packages/kotti-ui/source/kotti-table/standard-table/components/filters/NumberRange.vue index d5930fea5f..f00f168c26 100644 --- a/packages/kotti-ui/source/kotti-table/standard-table/components/filters/NumberRange.vue +++ b/packages/kotti-ui/source/kotti-table/standard-table/components/filters/NumberRange.vue @@ -104,12 +104,12 @@ export default defineComponent({ onMaxInputBlur: (newMax: KottiFieldNumber.Value) => { if (props.value[1] !== newMax) reOrderAndEmitRangeValue() }, - onMinInputBlur: (newMin: KottiFieldNumber.Value) => { - if (props.value[0] !== newMin) reOrderAndEmitRangeValue() - }, onMaxValueInput: (newMax: KottiFieldNumber.Value) => { range.value = [range.value[0], newMax] }, + onMinInputBlur: (newMin: KottiFieldNumber.Value) => { + if (props.value[0] !== newMin) reOrderAndEmitRangeValue() + }, onMinValueInput: (newMin: KottiFieldNumber.Value) => { range.value = [newMin, range.value[1]] }, diff --git a/packages/kotti-ui/source/kotti-table/standard-table/simple-hash.ts b/packages/kotti-ui/source/kotti-table/standard-table/simple-hash.ts index 3a343248d1..7945bc8884 100644 --- a/packages/kotti-ui/source/kotti-table/standard-table/simple-hash.ts +++ b/packages/kotti-ui/source/kotti-table/standard-table/simple-hash.ts @@ -13,8 +13,8 @@ export const simpleHash = (strings: string[]): string => { for (const string of [...strings].sort()) { for (let charIndex = 0; charIndex < string.length; charIndex++) { // string.length is added to make collisions less likely (e.g. foo + fooBar = baz + bazBar without this) - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - result[charIndex]! ^= string.charCodeAt(charIndex) + string.length + + result[charIndex] ^= string.charCodeAt(charIndex) + string.length } } diff --git a/packages/kotti-ui/source/kotti-table/standard-table/storage.ts b/packages/kotti-ui/source/kotti-table/standard-table/storage.ts index f9b68007bb..366e83bdf2 100644 --- a/packages/kotti-ui/source/kotti-table/standard-table/storage.ts +++ b/packages/kotti-ui/source/kotti-table/standard-table/storage.ts @@ -73,20 +73,6 @@ export class LocalStorageAdapter implements KottiStandardTableStorage { this.#manualVersion = manualVersion } - #getVersionHash(columnIds: string[]): string { - const version = this.#manualVersion ?? simpleHash(columnIds) - return `${this.#storageKey}@${version}` - } - - #validateVersionHash(columnIds: string[], version: string): boolean { - if (!version.startsWith(`${this.#storageKey}@`)) return false - - const correctHash = simpleHash(columnIds) - const givenHash = version.replace(`${this.#storageKey}@`, '') - - return correctHash === givenHash - } - // eslint-disable-next-line @typescript-eslint/require-await async load( context: StorageOperationContext, @@ -132,4 +118,18 @@ export class LocalStorageAdapter implements KottiStandardTableStorage { window.localStorage.setItem(this.#storageKey, json) } + + #getVersionHash(columnIds: string[]): string { + const version = this.#manualVersion ?? simpleHash(columnIds) + return `${this.#storageKey}@${version}` + } + + #validateVersionHash(columnIds: string[], version: string): boolean { + if (!version.startsWith(`${this.#storageKey}@`)) return false + + const correctHash = simpleHash(columnIds) + const givenHash = version.replace(`${this.#storageKey}@`, '') + + return correctHash === givenHash + } } diff --git a/packages/kotti-ui/source/kotti-table/standard-table/types.ts b/packages/kotti-ui/source/kotti-table/standard-table/types.ts index 57e6805902..6eeef175c8 100644 --- a/packages/kotti-ui/source/kotti-table/standard-table/types.ts +++ b/packages/kotti-ui/source/kotti-table/standard-table/types.ts @@ -7,7 +7,6 @@ import { KottiFieldMultiSelect, KottiFieldSingleSelect, } from '../../kotti-field-select/types' -import { KottiFieldText } from '../../kotti-field-text/types' import { KottiFieldToggle } from '../../kotti-field-toggle/types' import { KottiPopover } from '../../kotti-popover/types' import type { KottiTable } from '../table/types' @@ -268,23 +267,15 @@ export namespace KottiStandardTable { export type Props = z.input export namespace Events { - const updateFetchData = z.object({ - filters: appliedFilterSchema.array(), - ordering: z.array( - z - .object({ - id: z.string(), - value: z.enum(['ascending', 'descending']), - }) - .strict(), - ), - pagination: sharedPaginationSchema.pick({ - pageIndex: true, - pageSize: true, - }), - search: KottiFieldText.valueSchema, - }) - export type UpdateFetchData = z.output + export type UpdateFetchData = { + filters: AppliedFilter[] + ordering: { id: string; value: 'ascending' | 'descending' }[] + pagination: { + pageIndex: number + pageSize: number + } + search: string | null + } } export module Hook { diff --git a/packages/kotti-ui/source/kotti-table/standard-table/utilities/filters.ts b/packages/kotti-ui/source/kotti-table/standard-table/utilities/filters.ts index ce96b144b3..8a863f82ed 100644 --- a/packages/kotti-ui/source/kotti-table/standard-table/utilities/filters.ts +++ b/packages/kotti-ui/source/kotti-table/standard-table/utilities/filters.ts @@ -49,6 +49,7 @@ const getOptionLabel = ( export const formatFilterValue = ( value: KottiStandardTable.FilterValue, filter: KottiStandardTable.FilterInternal, + // eslint-disable-next-line sonarjs/cognitive-complexity ): string => { switch (filter.type) { case KottiStandardTable.FilterType.BOOLEAN: { diff --git a/packages/kotti-ui/source/kotti-table/standard-table/utilities/translation.ts b/packages/kotti-ui/source/kotti-table/standard-table/utilities/translation.ts index bee0b4aa44..640257b7ae 100644 --- a/packages/kotti-ui/source/kotti-table/standard-table/utilities/translation.ts +++ b/packages/kotti-ui/source/kotti-table/standard-table/utilities/translation.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line sonarjs/slow-regex const separatorRegex = new RegExp(/\s*\|\s*/g) /** diff --git a/packages/kotti-ui/source/kotti-table/table/hooks.ts b/packages/kotti-ui/source/kotti-table/table/hooks.ts index 2029d7693f..853692a456 100644 --- a/packages/kotti-ui/source/kotti-table/table/hooks.ts +++ b/packages/kotti-ui/source/kotti-table/table/hooks.ts @@ -246,14 +246,14 @@ export const useKottiTable = < }, set: (value) => { switch (params.value.expandMode) { - case null: - return {} case 'multi': return Object.fromEntries( Object.entries(value).filter( ([rowId, isExpanded]) => rowIdSet.value.has(rowId) && isExpanded, ), ) + case null: + return {} case 'single': { for (const [rowId, isExpanded] of Object.entries(value)) { if (rowIdSet.value.has(rowId) && isExpanded) { diff --git a/packages/kotti-ui/source/kotti-table/table/tanstack-table/index.ts b/packages/kotti-ui/source/kotti-table/table/tanstack-table/index.ts index 4d0ef6b6b0..1497d82776 100644 --- a/packages/kotti-ui/source/kotti-table/table/tanstack-table/index.ts +++ b/packages/kotti-ui/source/kotti-table/table/tanstack-table/index.ts @@ -43,7 +43,7 @@ export const FlexRender = defineComponent({ /** * Vue 2 reactivity wrapper around TanStack Table Core `createTable` * - * @todo replace this with the official package `@tanstack/vue-table` in vue3 + * FIXME: replace this with the official package `@tanstack/vue-table` in vue3 * @link https://www.npmjs.com/package/@tanstack/vue-table */ export const useVueTable = ( diff --git a/packages/kotti-ui/source/kotti-toaster/create-toaster.ts b/packages/kotti-ui/source/kotti-toaster/create-toaster.ts index ca09711842..2bbe7c3b8c 100644 --- a/packages/kotti-ui/source/kotti-toaster/create-toaster.ts +++ b/packages/kotti-ui/source/kotti-toaster/create-toaster.ts @@ -14,6 +14,7 @@ const metadataSchema = z }) .strict() +// eslint-disable-next-line @typescript-eslint/no-unused-vars const queuedToastSchema = z .object({ custom: customSchema, @@ -354,6 +355,7 @@ export const createToaster = < * - Manages the animation frame, starting or stopping it based on whether there are active toasts. * - Notifies the subscriber if the state of `activeToasts` changes. */ + // eslint-disable-next-line sonarjs/cognitive-complexity const updateActiveToasts = (_dirty = false) => { if (subscriber === null) return let dirty = _dirty diff --git a/packages/kotti-ui/source/shared-components/toggle-inner/ToggleInner.vue b/packages/kotti-ui/source/shared-components/toggle-inner/ToggleInner.vue index 87d99b354f..2cf67e4e98 100644 --- a/packages/kotti-ui/source/shared-components/toggle-inner/ToggleInner.vue +++ b/packages/kotti-ui/source/shared-components/toggle-inner/ToggleInner.vue @@ -19,8 +19,8 @@ import { computed, defineComponent, type PropType } from 'vue' import type { InputHTMLAttributes } from 'vue/types/jsx' -import type { KottiField } from '../../kotti-field/types' import { KottiFieldToggle } from '../../kotti-field-toggle/types' +import type { KottiField } from '../../kotti-field/types' import ToggleBox from './ToggleBox.vue' import ToggleSwitch from './ToggleSwitch.vue' diff --git a/packages/kotti-ui/source/types/kotti.ts b/packages/kotti-ui/source/types/kotti.ts index ab411f6382..205c55b697 100644 --- a/packages/kotti-ui/source/types/kotti.ts +++ b/packages/kotti-ui/source/types/kotti.ts @@ -65,9 +65,9 @@ export { KottiNavbar as Navbar } from '../kotti-navbar/types' export { KottiPagination as Pagination } from '../kotti-pagination/types' export { KottiPopover as Popover } from '../kotti-popover/types' export { KottiRow as Row } from '../kotti-row/types' +export { KottiTableLegacy as TableLegacy } from '../kotti-table-legacy/types' export { KottiStandardTable as StandardTable } from '../kotti-table/standard-table/types' export { KottiTable as Table } from '../kotti-table/table/types' -export { KottiTableLegacy as TableLegacy } from '../kotti-table-legacy/types' export { KottiTag as Tag } from '../kotti-tag/types' export { KottiToast as Toast, diff --git a/yarn.lock b/yarn.lock index a09e7caa5b..d1f0951e99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4222,30 +4222,56 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.19.0": - version "8.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz#2b1e1b791e21d5fc27ddc93884db066444f597b5" - integrity sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q== +"@typescript-eslint/eslint-plugin@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.19.0" - "@typescript-eslint/type-utils" "8.19.0" - "@typescript-eslint/utils" "8.19.0" - "@typescript-eslint/visitor-keys" "8.19.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.19.0": - version "8.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.19.0.tgz#f1512e6e5c491b03aabb2718b95becde22b15292" - integrity sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw== +"@typescript-eslint/eslint-plugin@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.1.tgz#5f26c0a833b27bcb1aa402b82e76d3b8dda0b247" + integrity sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg== dependencies: - "@typescript-eslint/scope-manager" "8.19.0" - "@typescript-eslint/types" "8.19.0" - "@typescript-eslint/typescript-estree" "8.19.0" - "@typescript-eslint/visitor-keys" "8.19.0" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.19.1" + "@typescript-eslint/type-utils" "8.19.1" + "@typescript-eslint/utils" "8.19.1" + "@typescript-eslint/visitor-keys" "8.19.1" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^2.0.0" + +"@typescript-eslint/parser@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/parser@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.19.1.tgz#b836fcfe7a704c8c65f5a50e5b0ff8acfca5c21b" + integrity sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw== + dependencies: + "@typescript-eslint/scope-manager" "8.19.1" + "@typescript-eslint/types" "8.19.1" + "@typescript-eslint/typescript-estree" "8.19.1" + "@typescript-eslint/visitor-keys" "8.19.1" debug "^4.3.4" "@typescript-eslint/scope-manager@7.10.0": @@ -4256,6 +4282,14 @@ "@typescript-eslint/types" "7.10.0" "@typescript-eslint/visitor-keys" "7.10.0" +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + "@typescript-eslint/scope-manager@8.19.0": version "8.19.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz#28fa413a334f70e8b506a968531e0a7c9c3076dc" @@ -4264,26 +4298,54 @@ "@typescript-eslint/types" "8.19.0" "@typescript-eslint/visitor-keys" "8.19.0" -"@typescript-eslint/type-utils@8.19.0": - version "8.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz#41abd7d2e4cf93b6854b1fe6cbf416fab5abf89f" - integrity sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg== +"@typescript-eslint/scope-manager@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz#794cfc8add4f373b9cd6fa32e367e7565a0e231b" + integrity sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q== dependencies: - "@typescript-eslint/typescript-estree" "8.19.0" - "@typescript-eslint/utils" "8.19.0" + "@typescript-eslint/types" "8.19.1" + "@typescript-eslint/visitor-keys" "8.19.1" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" +"@typescript-eslint/type-utils@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.19.1.tgz#23710ab52643c19f74601b3f4a076c98f4e159aa" + integrity sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw== + dependencies: + "@typescript-eslint/typescript-estree" "8.19.1" + "@typescript-eslint/utils" "8.19.1" + debug "^4.3.4" + ts-api-utils "^2.0.0" + "@typescript-eslint/types@7.10.0": version "7.10.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.10.0.tgz#da92309c97932a3a033762fd5faa8b067de84e3b" integrity sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + "@typescript-eslint/types@8.19.0", "@typescript-eslint/types@^8.19.0": version "8.19.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.19.0.tgz#a190a25c5484a42b81eaad06989579fdeb478cbb" integrity sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA== +"@typescript-eslint/types@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.19.1.tgz#015a991281754ed986f2e549263a1188d6ed0a8c" + integrity sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA== + "@typescript-eslint/typescript-estree@7.10.0": version "7.10.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz#6dcdc5de3149916a6a599fa89dde5c471b88b8bb" @@ -4298,6 +4360,20 @@ semver "^7.6.0" ts-api-utils "^1.3.0" +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + "@typescript-eslint/typescript-estree@8.19.0": version "8.19.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz#6b4f48f98ffad6597379951b115710f4d68c9ccb" @@ -4312,15 +4388,39 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.19.0", "@typescript-eslint/utils@^8.19.0": - version "8.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.19.0.tgz#33824310e1fccc17f27fbd1030fd8bbd9a674684" - integrity sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg== +"@typescript-eslint/typescript-estree@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz#c1094bb00bc251ac76cf215569ca27236435036b" + integrity sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q== + dependencies: + "@typescript-eslint/types" "8.19.1" + "@typescript-eslint/visitor-keys" "8.19.1" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.19.0" - "@typescript-eslint/types" "8.19.0" - "@typescript-eslint/typescript-estree" "8.19.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/utils@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.19.1.tgz#dd8eabd46b92bf61e573286e1c0ba6bd243a185b" + integrity sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.19.1" + "@typescript-eslint/types" "8.19.1" + "@typescript-eslint/typescript-estree" "8.19.1" "@typescript-eslint/utils@^7.7.1": version "7.10.0" @@ -4332,6 +4432,16 @@ "@typescript-eslint/types" "7.10.0" "@typescript-eslint/typescript-estree" "7.10.0" +"@typescript-eslint/utils@^8.19.0": + version "8.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.19.0.tgz#33824310e1fccc17f27fbd1030fd8bbd9a674684" + integrity sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.19.0" + "@typescript-eslint/types" "8.19.0" + "@typescript-eslint/typescript-estree" "8.19.0" + "@typescript-eslint/visitor-keys@7.10.0": version "7.10.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz#2af2e91e73a75dd6b70b4486c48ae9d38a485a78" @@ -4340,6 +4450,14 @@ "@typescript-eslint/types" "7.10.0" eslint-visitor-keys "^3.4.3" +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + "@typescript-eslint/visitor-keys@8.19.0": version "8.19.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz#dc313f735e64c4979c9073f51ffcefb6d9be5c77" @@ -4348,6 +4466,14 @@ "@typescript-eslint/types" "8.19.0" eslint-visitor-keys "^4.2.0" +"@typescript-eslint/visitor-keys@8.19.1": + version "8.19.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz#fce54d7cfa5351a92387d6c0c5be598caee072e0" + integrity sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q== + dependencies: + "@typescript-eslint/types" "8.19.1" + eslint-visitor-keys "^4.2.0" + "@vitejs/plugin-vue2@*": version "2.3.1" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue2/-/plugin-vue2-2.3.1.tgz#53078d3d9d50d9863f1fbb1c1ef7791a5fcd4948" @@ -4397,26 +4523,27 @@ loupe "^2.3.7" pretty-format "^29.7.0" -"@volar/language-core@2.4.11", "@volar/language-core@~2.4.11": - version "2.4.11" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.11.tgz#d95a9ec4f14fbdb41a6a64f9f321d11d23a5291c" - integrity sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg== +"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f" + integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== dependencies: - "@volar/source-map" "2.4.11" + "@volar/source-map" "1.11.1" -"@volar/source-map@2.4.11": - version "2.4.11" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.11.tgz#5876d4531508129724c2755e295db1df98bd5895" - integrity sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ== +"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f" + integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== + dependencies: + muggle-string "^0.3.1" -"@volar/typescript@~2.4.11": - version "2.4.11" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.11.tgz#aafbfa413337654db211bf4d8fb6670c89f6fa57" - integrity sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw== +"@volar/typescript@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627" + integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== dependencies: - "@volar/language-core" "2.4.11" + "@volar/language-core" "1.11.1" path-browserify "^1.0.1" - vscode-uri "^3.0.8" "@vue/babel-helper-vue-jsx-merge-props@^1.4.0": version "1.4.0" @@ -4509,7 +4636,7 @@ estree-walker "^2.0.2" source-map-js "^1.2.0" -"@vue/compiler-dom@^3.5.0": +"@vue/compiler-dom@^3.3.0": version "3.5.13" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== @@ -4528,14 +4655,6 @@ optionalDependencies: prettier "^1.18.2 || ^2.0.0" -"@vue/compiler-vue2@^2.7.16": - version "2.7.16" - resolved "https://registry.yarnpkg.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" - integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - "@vue/component-compiler-utils@^3.1.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9" @@ -4552,21 +4671,22 @@ optionalDependencies: prettier "^1.18.2 || ^2.0.0" -"@vue/language-core@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.2.0.tgz#e48c54584f889f78b120ce10a050dfb316c7fcdf" - integrity sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw== - dependencies: - "@volar/language-core" "~2.4.11" - "@vue/compiler-dom" "^3.5.0" - "@vue/compiler-vue2" "^2.7.16" - "@vue/shared" "^3.5.0" - alien-signals "^0.4.9" +"@vue/language-core@1.8.27": + version "1.8.27" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.27.tgz#2ca6892cb524e024a44e554e4c55d7a23e72263f" + integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== + dependencies: + "@volar/language-core" "~1.11.1" + "@volar/source-map" "~1.11.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/shared" "^3.3.0" + computeds "^0.0.1" minimatch "^9.0.3" - muggle-string "^0.4.1" + muggle-string "^0.3.1" path-browserify "^1.0.1" + vue-template-compiler "^2.7.14" -"@vue/shared@3.5.13", "@vue/shared@^3.5.0": +"@vue/shared@3.5.13", "@vue/shared@^3.3.0": version "3.5.13" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== @@ -4894,11 +5014,6 @@ ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" -alien-signals@^0.4.9: - version "0.4.12" - resolved "https://registry.yarnpkg.com/alien-signals/-/alien-signals-0.4.12.tgz#3ac0fe641da5fb0a81ad985c03a63f2a8b385f00" - integrity sha512-Og0PgAihxlp1R22bsoBsyhhMG4+qhU+fkkLPoGBQkYVc3qt9rYnrwYTf+M6kqUqUZpf3rXDnpL90iKa0QcSVVg== - ansi-align@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" @@ -5877,25 +5992,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001553, caniuse-lite@^1.0.30001565: - version "1.0.30001576" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" - integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== - -caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001562" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz#9d16c5fd7e9c592c4cd5e304bc0f75b0008b2759" - integrity sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng== - -caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001614" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz#f894b4209376a0bf923d67d9c361d96b1dfebe39" - integrity sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog== - -caniuse-lite@^1.0.30001669: - version "1.0.30001686" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001686.tgz#0e04b8d90de8753188e93c9989d56cb19d902670" - integrity sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541, caniuse-lite@^1.0.30001553, caniuse-lite@^1.0.30001565, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001669: + version "1.0.30001690" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== case-sensitive-paths-webpack-plugin@^2.3.0: version "2.4.0" @@ -6282,6 +6382,11 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -7769,10 +7874,10 @@ eslint-plugin-jsonc@^2.18.2: natural-compare "^1.4.0" synckit "^0.6.0" -eslint-plugin-perfectionist@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.5.0.tgz#13bcc428a32d466cf8faf028f05d1361c24359c0" - integrity sha512-Dh+6UO50GLRM5z8HMv7HkCy+XUGgDfG8jbTYrqL6A07VBIPzlnM3CMZkovWEWT3mOPzlFTYdyp1bYr+HZTKD6g== +eslint-plugin-perfectionist@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.6.0.tgz#6cc9bc1f0b8efceb222af8b3fed5a05bacc81afb" + integrity sha512-kOswTebUK0LlYExRwqz7YQtvyTUIRsKfp8XrwBBeHGh2e8MBOS6K+7VvG6HpmNckyKySi1I96uPeAlptMFGcRQ== dependencies: "@typescript-eslint/types" "^8.19.0" "@typescript-eslint/utils" "^8.19.0" @@ -8928,10 +9033,10 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globals@^15.3.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-15.3.0.tgz#619db01f88d8fb91b0ed841a820cd980299575e5" - integrity sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA== +globals@^15.14.0: + version "15.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.14.0.tgz#b8fd3a8941ff3b4d38f3319d433b61bbb482e73f" + integrity sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig== globals@^15.9.0: version "15.13.0" @@ -11493,10 +11598,10 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -muggle-string@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" - integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== +muggle-string@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" + integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== multimatch@5.0.0: version "5.0.0" @@ -16125,6 +16230,11 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== +ts-api-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900" + integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ== + ts-dedent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" @@ -16379,25 +16489,39 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@^8.19.0: - version "8.19.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.19.0.tgz#e4ff06b19f2f9807a2c26147a0199a109944d9e0" - integrity sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ== +typescript-eslint@^7.8.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.18.0.tgz#e90d57649b2ad37a7475875fa3e834a6d9f61eb2" + integrity sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA== dependencies: - "@typescript-eslint/eslint-plugin" "8.19.0" - "@typescript-eslint/parser" "8.19.0" - "@typescript-eslint/utils" "8.19.0" + "@typescript-eslint/eslint-plugin" "7.18.0" + "@typescript-eslint/parser" "7.18.0" + "@typescript-eslint/utils" "7.18.0" -typescript@5.7.2, typescript@^5: - version "5.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" - integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== +typescript-eslint@^8.19.1: + version "8.19.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.19.1.tgz#fdf7d53bc020bf7c48d40744bf3797ee7a70f69e" + integrity sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw== + dependencies: + "@typescript-eslint/eslint-plugin" "8.19.1" + "@typescript-eslint/parser" "8.19.1" + "@typescript-eslint/utils" "8.19.1" + +typescript@5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" + integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== "typescript@>=3 < 6": version "5.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +typescript@^5: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + typescript@~4.2: version "4.2.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" @@ -16795,11 +16919,6 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vscode-uri@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" - integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== - vue-client-only@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/vue-client-only/-/vue-client-only-2.1.0.tgz#1a67a47b8ecacfa86d75830173fffee3bf8a4ee3" @@ -16873,7 +16992,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.6.14, vue-template-compiler@^2.7, vue-template-compiler@^2.7.15: +vue-template-compiler@^2.6.14, vue-template-compiler@^2.7, vue-template-compiler@^2.7.14, vue-template-compiler@^2.7.15: version "2.7.16" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== @@ -16886,13 +17005,14 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue-tsc@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.2.0.tgz#dd06c56636f760d7534b7a7a0f6669ba93c217b8" - integrity sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg== +vue-tsc@^1.8.22: + version "1.8.27" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c" + integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== dependencies: - "@volar/typescript" "~2.4.11" - "@vue/language-core" "2.2.0" + "@volar/typescript" "~1.11.1" + "@vue/language-core" "1.8.27" + semver "^7.5.4" vue@^2.7, vue@^2.7.10: version "2.7.16"