From 26efc20b81a20631038a2fd36cce76cf1c3fe0cd Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Tue, 17 Feb 2026 10:16:12 +0100 Subject: [PATCH 1/6] refactor(design-system): replace tooltip tippy with floating-ui --- packages/design-system/package.json | 2 +- .../src/components/OcDrop/OcDrop.vue | 9 +- .../design-system/src/directives/OcTooltip.ts | 175 +++++++++++------- packages/design-system/src/index.ts | 1 - packages/design-system/src/styles/layers.css | 13 +- .../components/FilesList/ResourceTable.vue | 2 +- pnpm-lock.yaml | 58 +++++- 7 files changed, 174 insertions(+), 86 deletions(-) diff --git a/packages/design-system/package.json b/packages/design-system/package.json index e2c0d3499d..886b8b0d30 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -101,9 +101,9 @@ }, "dependencies": { "@emoji-mart/data": "^1.2.1", + "@floating-ui/dom": "^1.7.5", "@popperjs/core": "^2.11.5", "@vueuse/core": "^14.0.0", - "deepmerge": "^4.2.2", "emoji-mart": "^5.6.0", "focus-trap": "^7.8.0", "focus-trap-vue": "^4.0.1", diff --git a/packages/design-system/src/components/OcDrop/OcDrop.vue b/packages/design-system/src/components/OcDrop/OcDrop.vue index cb43cdb7c4..c1219e55fb 100644 --- a/packages/design-system/src/components/OcDrop/OcDrop.vue +++ b/packages/design-system/src/components/OcDrop/OcDrop.vue @@ -22,7 +22,6 @@ diff --git a/packages/design-system/src/components/OcDrop/__snapshots__/OcDrop.spec.ts.snap b/packages/design-system/src/components/OcDrop/__snapshots__/OcDrop.spec.ts.snap deleted file mode 100644 index 6e077773eb..0000000000 --- a/packages/design-system/src/components/OcDrop/__snapshots__/OcDrop.spec.ts.snap +++ /dev/null @@ -1,159 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`OcDrop > tippy > renders tippy 1`] = ` -
-

- trigger -

-
- -
-
-`; - -exports[`OcDrop > tippy > renders tippy 2`] = ` -
- - -
-`; - -exports[`OcDrop > tippy > renders tippy 3`] = ` -
-

- trigger -

-
- -
-
-`; diff --git a/packages/design-system/src/components/OcDrop/useEventListeners.ts b/packages/design-system/src/components/OcDrop/useEventListeners.ts new file mode 100644 index 0000000000..1e16b67070 --- /dev/null +++ b/packages/design-system/src/components/OcDrop/useEventListeners.ts @@ -0,0 +1,44 @@ +interface EventListenerEntry { + target: Element | Document + type: string + handler: EventListener + options?: AddEventListenerOptions | boolean + category: 'anchor' | 'drop' | 'document' +} + +export const useEventListeners = () => { + const eventListeners: EventListenerEntry[] = [] + + const registerEventListener = ( + target: Element | Document, + type: string, + handler: EventListener, + category: EventListenerEntry['category'], + options?: AddEventListenerOptions | boolean + ) => { + target.addEventListener(type, handler, options) + eventListeners.push({ target, type, handler, options, category }) + } + + const unregisterEventListeners = (categories?: EventListenerEntry['category'][]) => { + if (!categories) { + eventListeners.forEach(({ target, type, handler, options }) => { + target.removeEventListener(type, handler, options) + }) + eventListeners.length = 0 + return + } + + const toRemove = eventListeners.filter((l) => categories.includes(l.category)) + toRemove.forEach(({ target, type, handler, options }) => { + target.removeEventListener(type, handler, options) + }) + eventListeners.splice( + 0, + eventListeners.length, + ...eventListeners.filter((l) => !categories.includes(l.category)) + ) + } + + return { registerEventListener, unregisterEventListeners } +} diff --git a/packages/web-app-admin-settings/src/components/Groups/GroupsList.vue b/packages/web-app-admin-settings/src/components/Groups/GroupsList.vue index 8e7fa94cce..7bba706af6 100644 --- a/packages/web-app-admin-settings/src/components/Groups/GroupsList.vue +++ b/packages/web-app-admin-settings/src/components/Groups/GroupsList.vue @@ -20,7 +20,7 @@ :hover="true" padding-x="medium" @sort="handleSort" - @contextmenu-clicked="showContextMenuOnRightClick" + @contextmenu-clicked="(el, event, item) => showContextMenuOnRightClick(event, item)" @highlight="rowClicked" >