diff --git a/packages/nc-gui/app.vue b/packages/nc-gui/app.vue index f59b35c76d..99d4577b53 100644 --- a/packages/nc-gui/app.vue +++ b/packages/nc-gui/app.vue @@ -6,12 +6,37 @@ const route = useRoute() const disableBaseLayout = computed(() => route.path.startsWith('/nc/view') || route.path.startsWith('/nc/form')) useTheme() + +// TODO: Remove when https://github.com/vuejs/core/issues/5513 fixed +const key = ref(0) + +const messages = [ + `Uncaught NotFoundError: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.`, // chromium based + `NotFoundError: The object can not be found here.`, // safari + "Cannot read properties of null (reading 'parentNode')", +] + +if (typeof window !== 'undefined') { + // @ts-expect-error using arbitrary window key + if (!window.__ncvue) { + window.addEventListener('error', (event) => { + if (messages.includes(event.message)) { + event.preventDefault() + console.warn('Re-rendering layout because of https://github.com/vuejs/core/issues/5513') + key.value++ + } + }) + } + + // @ts-expect-error using arbitrary window key + window.__ncvue = true +} diff --git a/packages/nc-gui/assets/style.scss b/packages/nc-gui/assets/style.scss index 7e3d0f5cd5..b5551d6076 100644 --- a/packages/nc-gui/assets/style.scss +++ b/packages/nc-gui/assets/style.scss @@ -214,17 +214,13 @@ a { @apply z-1 relative color-transition rounded-md px-4 py-2 text-white; &::after { - @apply ring-opacity-100 ring-[2px] ring-slate-300 rounded absolute top-0 left-0 right-0 bottom-0 transition-all duration-150 ease-in-out bg-primary bg-opacity-100; + @apply rounded absolute top-0 left-0 right-0 bottom-0 transition-all duration-150 ease-in-out bg-primary bg-opacity-100; content: ''; z-index: -1; } &:hover::after { - @apply transform scale-110 ring ring-accent; - } - - &:active::after { - @apply ring ring-accent; + @apply transform scale-110; } } @@ -261,7 +257,7 @@ a { } .ant-dropdown-menu-item, .ant-menu-item { - @apply !py-0 active:(ring ring-accent ring-opacity-100); + @apply py-0; } .ant-dropdown-menu-title-content, diff --git a/packages/nc-gui/components.d.ts b/packages/nc-gui/components.d.ts index 1be206af09..6e9b243c03 100644 --- a/packages/nc-gui/components.d.ts +++ b/packages/nc-gui/components.d.ts @@ -24,6 +24,7 @@ declare module '@vue/runtime-core' { ADivider: typeof import('ant-design-vue/es')['Divider'] ADrawer: typeof import('ant-design-vue/es')['Drawer'] ADropdown: typeof import('ant-design-vue/es')['Dropdown'] + ADropdownButton: typeof import('ant-design-vue/es')['DropdownButton'] AEmpty: typeof import('ant-design-vue/es')['Empty'] AForm: typeof import('ant-design-vue/es')['Form'] AFormItem: typeof import('ant-design-vue/es')['FormItem'] @@ -95,8 +96,6 @@ declare module '@vue/runtime-core' { MaterialSymbolsDarkModeOutline: typeof import('~icons/material-symbols/dark-mode-outline')['default'] MaterialSymbolsFileCopyOutline: typeof import('~icons/material-symbols/file-copy-outline')['default'] MaterialSymbolsKeyboardReturn: typeof import('~icons/material-symbols/keyboard-return')['default'] - MaterialSymbolsKeyboardShift: typeof import('~icons/material-symbols/keyboard-shift')['default'] - MaterialSymbolsLightMode: typeof import('~icons/material-symbols/light-mode')['default'] MaterialSymbolsLightModeOutline: typeof import('~icons/material-symbols/light-mode-outline')['default'] MaterialSymbolsRocketLaunchOutline: typeof import('~icons/material-symbols/rocket-launch-outline')['default'] MaterialSymbolsSendOutline: typeof import('~icons/material-symbols/send-outline')['default'] @@ -126,6 +125,7 @@ declare module '@vue/runtime-core' { MdiBugOutline: typeof import('~icons/mdi/bug-outline')['default'] MdiCalculator: typeof import('~icons/mdi/calculator')['default'] MdiCalendarMonth: typeof import('~icons/mdi/calendar-month')['default'] + MdiCancel: typeof import('~icons/mdi/cancel')['default'] MdiCardsHeart: typeof import('~icons/mdi/cards-heart')['default'] MdiCellphoneMessage: typeof import('~icons/mdi/cellphone-message')['default'] MdiChat: typeof import('~icons/mdi/chat')['default'] @@ -143,6 +143,7 @@ declare module '@vue/runtime-core' { MdiCommentTextOutline: typeof import('~icons/mdi/comment-text-outline')['default'] MdiContentCopy: typeof import('~icons/mdi/content-copy')['default'] MdiContentSave: typeof import('~icons/mdi/content-save')['default'] + MdiContentSaveEdit: typeof import('~icons/mdi/content-save-edit')['default'] MdiCurrencyUsd: typeof import('~icons/mdi/currency-usd')['default'] MdiDatabaseOutline: typeof import('~icons/mdi/database-outline')['default'] MdiDatabaseSync: typeof import('~icons/mdi/database-sync')['default'] @@ -200,6 +201,7 @@ declare module '@vue/runtime-core' { MdiPlus: typeof import('~icons/mdi/plus')['default'] MdiPlusCircleOutline: typeof import('~icons/mdi/plus-circle-outline')['default'] MdiPlusOutline: typeof import('~icons/mdi/plus-outline')['default'] + MdiPlusThick: typeof import('~icons/mdi/plus-thick')['default'] MdiReddit: typeof import('~icons/mdi/reddit')['default'] MdiRefresh: typeof import('~icons/mdi/refresh')['default'] MdiReload: typeof import('~icons/mdi/reload')['default'] diff --git a/packages/nc-gui/components/cell/MultiSelect.vue b/packages/nc-gui/components/cell/MultiSelect.vue index f3f09fecba..dcfd660be9 100644 --- a/packages/nc-gui/components/cell/MultiSelect.vue +++ b/packages/nc-gui/components/cell/MultiSelect.vue @@ -1,19 +1,23 @@