From 117b23db1eae3b67f859c7658497a0b502689769 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Fri, 13 Feb 2026 12:03:11 +0100 Subject: [PATCH] feat(next-feedback): improve selector precision with @medv/finder and fix client/server boundary --- packages/next-feedback/package.json | 1 + .../src/components/FeedbackOverlay.tsx | 11 +- packages/next-feedback/tsup.config.ts | 3 - pnpm-lock.yaml | 199 +++++------------- 4 files changed, 56 insertions(+), 158 deletions(-) diff --git a/packages/next-feedback/package.json b/packages/next-feedback/package.json index a91371e..cd522c9 100644 --- a/packages/next-feedback/package.json +++ b/packages/next-feedback/package.json @@ -27,6 +27,7 @@ }, "dependencies": { "@directus/sdk": "^21.0.0", + "@medv/finder": "^4.0.2", "clsx": "^2.1.1", "framer-motion": "^11.5.4", "html2canvas": "^1.4.1", diff --git a/packages/next-feedback/src/components/FeedbackOverlay.tsx b/packages/next-feedback/src/components/FeedbackOverlay.tsx index 11389ea..3ef29eb 100644 --- a/packages/next-feedback/src/components/FeedbackOverlay.tsx +++ b/packages/next-feedback/src/components/FeedbackOverlay.tsx @@ -6,6 +6,7 @@ import { MessageSquare, X, Check, Plus, List, Send, User } from "lucide-react"; import { clsx } from "clsx"; import { twMerge } from "tailwind-merge"; import html2canvas from "html2canvas"; +import { finder } from "@medv/finder"; function cn(...inputs: any[]) { return twMerge(clsx(inputs)); @@ -107,15 +108,7 @@ export function FeedbackOverlay() { }, []); const getSelector = (el: HTMLElement): string => { - if (el.id) return `#${el.id}`; - const path = []; - let curr: HTMLElement | null = el; - while (curr && curr.parentElement) { - const index = Array.from(curr.parentElement.children).indexOf(curr) + 1; - path.unshift(`${curr.tagName.toLowerCase()}:nth-child(${index})`); - curr = curr.parentElement; - } - return path.join(" > "); + return finder(el); }; useEffect(() => { diff --git a/packages/next-feedback/tsup.config.ts b/packages/next-feedback/tsup.config.ts index c85a764..835f4e3 100644 --- a/packages/next-feedback/tsup.config.ts +++ b/packages/next-feedback/tsup.config.ts @@ -6,7 +6,4 @@ export default defineConfig({ dts: true, clean: true, sourcemap: true, - banner: { - js: "'use client';", - }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d352653..5888b60 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,7 +161,7 @@ importers: devDependencies: '@directus/extensions-sdk': specifier: 11.0.2 - version: 11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3) + version: 11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3) '@mintel/mail': specifier: workspace:* version: link:../mail @@ -242,6 +242,15 @@ importers: packages/cms-infra: {} + packages/company-manager: + devDependencies: + '@directus/extensions-sdk': + specifier: 11.0.2 + version: 11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3) + vue: + specifier: ^3.4.0 + version: 3.5.28(typescript@5.9.3) + packages/customer-manager: devDependencies: '@directus/extensions-sdk': @@ -251,6 +260,21 @@ importers: specifier: ^3.4.0 version: 3.5.28(typescript@5.9.3) + packages/directus-extension-toolkit: + devDependencies: + '@directus/extensions-sdk': + specifier: 11.0.2 + version: 11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3) + typescript: + specifier: ^5.0.0 + version: 5.9.3 + vite: + specifier: ^5.0.0 + version: 5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) + vue: + specifier: ^3.4.0 + version: 3.5.28(typescript@5.9.3) + packages/eslint-config: dependencies: '@eslint/eslintrc': @@ -401,7 +425,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.0.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.10)(@vitest/ui@4.0.18)(happy-dom@20.5.3)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.19.10)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.5.3)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) packages/next-config: dependencies: @@ -420,6 +444,9 @@ importers: '@directus/sdk': specifier: ^21.0.0 version: 21.1.0 + '@medv/finder': + specifier: ^4.0.2 + version: 4.0.2 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -560,7 +587,7 @@ importers: version: 5.9.3 vitest: specifier: ^2.0.0 - version: 2.1.9(@types/node@22.19.10)(@vitest/ui@4.0.18)(happy-dom@20.5.3)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) + version: 2.1.9(@types/node@22.19.10)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.5.3)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) packages/pdf-library: dependencies: @@ -607,6 +634,15 @@ importers: packages/tsconfig: {} + packages/unified-dashboard: + devDependencies: + '@directus/extensions-sdk': + specifier: 11.0.2 + version: 11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3) + vue: + specifier: ^3.4.0 + version: 3.5.28(typescript@5.9.3) + packages: '@acemir/cssom@0.9.31': @@ -2084,6 +2120,9 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@medv/finder@4.0.2': + resolution: {integrity: sha512-RraNY9SCcx4KZV0Dh6BEW6XEW2swkqYca74pkFFRw6hHItSHiy+O/xMnpbofjYbzXj0tSpBGthUF1hHTsr3vIQ==} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -8754,57 +8793,6 @@ snapshots: '@directus/constants@11.0.3': {} - '@directus/extensions-sdk@11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3)': - dependencies: - '@directus/composables': 10.1.12(vue@3.4.21(typescript@5.9.3)) - '@directus/constants': 11.0.3 - '@directus/extensions': 1.0.2(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(knex@3.1.0)(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(pino@10.3.1)(vue@3.4.21(typescript@5.9.3)) - '@directus/themes': 0.3.6(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(vue@3.4.21(typescript@5.9.3)) - '@directus/types': 11.0.8(knex@3.1.0)(vue@3.4.21(typescript@5.9.3)) - '@directus/utils': 11.0.7(vue@3.4.21(typescript@5.9.3)) - '@rollup/plugin-commonjs': 25.0.7(rollup@3.29.4) - '@rollup/plugin-json': 6.1.0(rollup@3.29.4) - '@rollup/plugin-node-resolve': 15.2.3(rollup@3.29.4) - '@rollup/plugin-replace': 5.0.5(rollup@3.29.4) - '@rollup/plugin-terser': 0.4.4(rollup@3.29.4) - '@rollup/plugin-virtual': 3.0.2(rollup@3.29.4) - '@vitejs/plugin-vue': 4.6.2(vite@4.5.2(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0))(vue@3.4.21(typescript@5.9.3)) - chalk: 5.3.0 - commander: 10.0.1 - esbuild: 0.17.19 - execa: 7.2.0 - fs-extra: 11.2.0 - inquirer: 9.2.16 - ora: 6.3.1 - rollup: 3.29.4 - rollup-plugin-esbuild: 5.0.0(esbuild@0.17.19)(rollup@3.29.4) - rollup-plugin-styles: 4.0.0(rollup@3.29.4) - vite: 4.5.2(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) - vue: 3.4.21(typescript@5.9.3) - transitivePeerDependencies: - - '@types/node' - - '@unhead/vue' - - better-sqlite3 - - debug - - knex - - less - - lightningcss - - mysql - - mysql2 - - pg - - pg-native - - pinia - - pino - - sass - - sqlite3 - - stylus - - sugarss - - supports-color - - tedious - - terser - - typescript - - vue-router - '@directus/extensions-sdk@11.0.2(@types/node@22.19.10)(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(knex@3.1.0)(lightningcss@1.30.2)(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(pino@10.3.1)(sass@1.97.3)(terser@5.46.0)(typescript@5.9.3)': dependencies: '@directus/composables': 10.1.12(vue@3.4.21(typescript@5.9.3)) @@ -8856,32 +8844,6 @@ snapshots: - typescript - vue-router - '@directus/extensions@1.0.2(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(knex@3.1.0)(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(pino@10.3.1)(vue@3.4.21(typescript@5.9.3))': - dependencies: - '@directus/constants': 11.0.3 - '@directus/themes': 0.3.6(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(vue@3.4.21(typescript@5.9.3)) - '@directus/types': 11.0.8(knex@3.1.0)(vue@3.4.21(typescript@5.9.3)) - '@directus/utils': 11.0.7(vue@3.4.21(typescript@5.9.3)) - '@types/express': 4.17.21 - fs-extra: 11.2.0 - lodash-es: 4.17.21 - zod: 3.22.4 - optionalDependencies: - knex: 3.1.0 - pino: 10.3.1 - vue: 3.4.21(typescript@5.9.3) - transitivePeerDependencies: - - '@unhead/vue' - - better-sqlite3 - - mysql - - mysql2 - - pg - - pg-native - - pinia - - sqlite3 - - supports-color - - tedious - '@directus/extensions@1.0.2(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(knex@3.1.0)(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(pino@10.3.1)(vue@3.4.21(typescript@5.9.3))': dependencies: '@directus/constants': 11.0.3 @@ -8925,17 +8887,6 @@ snapshots: '@directus/system-data@1.0.2': {} - '@directus/themes@0.3.6(@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3)))(pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)))(vue@3.4.21(typescript@5.9.3))': - dependencies: - '@directus/utils': 11.0.7(vue@3.4.21(typescript@5.9.3)) - '@sinclair/typebox': 0.32.15 - '@unhead/vue': 1.11.20(vue@3.4.21(typescript@5.9.3)) - decamelize: 6.0.0 - flat: 6.0.1 - lodash-es: 4.17.21 - pinia: 2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)) - vue: 3.4.21(typescript@5.9.3) - '@directus/themes@0.3.6(@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3)))(pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(vue@3.4.21(typescript@5.9.3))': dependencies: '@directus/utils': 11.0.7(vue@3.4.21(typescript@5.9.3)) @@ -9613,6 +9564,8 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@medv/finder@4.0.2': {} + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.8.1 @@ -11025,14 +10978,6 @@ snapshots: '@unhead/schema': 1.11.20 packrup: 0.1.2 - '@unhead/vue@1.11.20(vue@3.4.21(typescript@5.9.3))': - dependencies: - '@unhead/schema': 1.11.20 - '@unhead/shared': 1.11.20 - hookable: 5.5.3 - unhead: 1.11.20 - vue: 3.4.21(typescript@5.9.3) - '@unhead/vue@1.11.20(vue@3.5.28(typescript@5.9.3))': dependencies: '@unhead/schema': 1.11.20 @@ -11149,13 +11094,13 @@ snapshots: optionalDependencies: vite: 5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) - '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@20.19.33)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: @@ -14457,16 +14402,6 @@ snapshots: pify@4.0.1: {} - pinia@2.3.1(typescript@5.9.3)(vue@3.4.21(typescript@5.9.3)): - dependencies: - '@vue/devtools-api': 6.6.4 - vue: 3.4.21(typescript@5.9.3) - vue-demi: 0.14.10(vue@3.4.21(typescript@5.9.3)) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@vue/composition-api' - pinia@2.3.1(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 @@ -15887,16 +15822,15 @@ snapshots: - supports-color - terser - vite-node@3.2.4(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite-node@3.2.4(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) transitivePeerDependencies: - '@types/node' - - jiti - less - lightningcss - sass @@ -15905,8 +15839,6 @@ snapshots: - sugarss - supports-color - terser - - tsx - - yaml vite@4.5.2(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0): dependencies: @@ -15950,25 +15882,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.10 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.30.2 - sass: 1.97.3 - terser: 5.46.0 - tsx: 4.21.0 - yaml: 2.8.2 - - vitest@2.1.9(@types/node@22.19.10)(@vitest/ui@4.0.18)(happy-dom@20.5.3)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0): + vitest@2.1.9(@types/node@22.19.10)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.5.3)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0): dependencies: '@vitest/expect': 2.1.9 '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)) @@ -16006,11 +15920,11 @@ snapshots: - supports-color - terser - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.10)(@vitest/ui@4.0.18)(happy-dom@20.5.3)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.19.10)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.5.3)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -16028,8 +15942,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@22.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 5.4.21(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) + vite-node: 3.2.4(@types/node@22.19.10)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -16038,7 +15952,6 @@ snapshots: happy-dom: 20.5.3 jsdom: 27.4.0 transitivePeerDependencies: - - jiti - less - lightningcss - msw @@ -16048,8 +15961,6 @@ snapshots: - sugarss - supports-color - terser - - tsx - - yaml vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.33)(@vitest/ui@4.0.18)(happy-dom@20.5.3)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: @@ -16092,10 +16003,6 @@ snapshots: - tsx - yaml - vue-demi@0.14.10(vue@3.4.21(typescript@5.9.3)): - dependencies: - vue: 3.4.21(typescript@5.9.3) - vue-demi@0.14.10(vue@3.5.28(typescript@5.9.3)): dependencies: vue: 3.5.28(typescript@5.9.3)