From 7fa781ba65bba7a338829b31e18ecd7fe30fc63a Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Mon, 17 Nov 2025 11:23:50 +0200 Subject: [PATCH 01/10] Link scenes --- packages/scenes/package.json | 7 +- yarn.lock | 144 ++++++++++------------------------- 2 files changed, 46 insertions(+), 105 deletions(-) diff --git a/packages/scenes/package.json b/packages/scenes/package.json index 2f0277795..573a66fb8 100644 --- a/packages/scenes/package.json +++ b/packages/scenes/package.json @@ -63,9 +63,14 @@ "@emotion/react": "11.10.5", "@eslint/compat": "1.3.0", "@eslint/js": "^9.28.0", + "@grafana/data": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data", + "@grafana/e2e-selectors": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors", "@grafana/eslint-config": "^8.1.0", - "@grafana/i18n": "12.1.0", + "@grafana/i18n": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n", + "@grafana/runtime": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime", + "@grafana/schema": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema", "@grafana/tsconfig": "^1.3.0-rc1", + "@grafana/ui": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui", "@rollup/plugin-dynamic-import-vars": "2.1.5", "@rollup/plugin-json": "^6.1.0", "@stylistic/eslint-plugin-ts": "3.1.0", diff --git a/yarn.lock b/yarn.lock index afdb77db1..fa318e0ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2098,13 +2098,6 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.27.6": - version: 7.28.2 - resolution: "@babel/runtime@npm:7.28.2" - checksum: 10/a0965fbdd6aaa40709290923bbe05e1c4314021f0cef608eb1d69f04f717c41829e50a53d79c4a0f461512b4be9b3c0190dc19387b219bcdaacdd793b2fe1b8a - languageName: node - linkType: hard - "@babel/template@npm:^7.18.10, @babel/template@npm:^7.25.7, @babel/template@npm:^7.3.3": version: 7.25.7 resolution: "@babel/template@npm:7.25.7" @@ -3627,18 +3620,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.3.4": - version: 2.3.4 - resolution: "@formatjs/ecma402-abstract@npm:2.3.4" - dependencies: - "@formatjs/fast-memoize": "npm:2.2.7" - "@formatjs/intl-localematcher": "npm:0.6.1" - decimal.js: "npm:^10.4.3" - tslib: "npm:^2.8.0" - checksum: 10/573971ffc291096a4b9fcc80b4708124e89bf2e3ac50e0f78b41eb797e9aa1b842f4dc3665e4467a853c738386821769d9e40408a1d25bc73323a1f057a16cf2 - languageName: node - linkType: hard - "@formatjs/fast-memoize@npm:2.2.0": version: 2.2.0 resolution: "@formatjs/fast-memoize@npm:2.2.0" @@ -3648,15 +3629,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.7": - version: 2.2.7 - resolution: "@formatjs/fast-memoize@npm:2.2.7" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10/e7e6efc677d63a13d99a854305db471b69f64cbfebdcb6dbe507dab9aa7eaae482ca5de86f343c856ca0a2c8f251672bd1f37c572ce14af602c0287378097d43 - languageName: node - linkType: hard - "@formatjs/icu-messageformat-parser@npm:2.7.6": version: 2.7.6 resolution: "@formatjs/icu-messageformat-parser@npm:2.7.6" @@ -3678,17 +3650,6 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-durationformat@npm:^0.7.0": - version: 0.7.4 - resolution: "@formatjs/intl-durationformat@npm:0.7.4" - dependencies: - "@formatjs/ecma402-abstract": "npm:2.3.4" - "@formatjs/intl-localematcher": "npm:0.6.1" - tslib: "npm:^2.8.0" - checksum: 10/d62273ecd635475ca91e9b501301f3f396403fa91b584c550734b19b2d194ba1316b27303fed985c1d42ae933d54eb220da6540edfdf376b0d9371ecfd0d4e15 - languageName: node - linkType: hard - "@formatjs/intl-localematcher@npm:0.5.4": version: 0.5.4 resolution: "@formatjs/intl-localematcher@npm:0.5.4" @@ -3698,14 +3659,11 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.6.1": - version: 0.6.1 - resolution: "@formatjs/intl-localematcher@npm:0.6.1" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10/c7b3bc8395d18670677f207b2fd107561fff5d6394a9b4273c29e0bea920300ec3a2eefead600ebb7761c04a770cada28f78ac059f84d00520bfb57a9db36998 +"@grafana/data@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": + version: 0.0.0-use.local + resolution: "@grafana/data@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" languageName: node - linkType: hard + linkType: soft "@grafana/data@npm:11.6.1, @grafana/data@npm:^11.6.0": version: 11.6.1 @@ -3742,6 +3700,12 @@ __metadata: languageName: node linkType: hard +"@grafana/e2e-selectors@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": + version: 0.0.0-use.local + resolution: "@grafana/e2e-selectors@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" + languageName: node + linkType: soft + "@grafana/e2e-selectors@npm:11.6.1": version: 11.6.1 resolution: "@grafana/e2e-selectors@npm:11.6.1" @@ -3849,23 +3813,17 @@ __metadata: languageName: node linkType: hard -"@grafana/i18n@npm:12.1.0": - version: 12.1.0 - resolution: "@grafana/i18n@npm:12.1.0" - dependencies: - "@formatjs/intl-durationformat": "npm:^0.7.0" - "@typescript-eslint/utils": "npm:^8.33.1" - fast-deep-equal: "npm:^3.1.3" - i18next: "npm:^25.0.0" - i18next-browser-languagedetector: "npm:^8.0.0" - i18next-pseudo: "npm:^2.2.1" - micro-memoize: "npm:^4.1.2" - react-i18next: "npm:^15.0.0" - peerDependencies: - react: ">=18" - checksum: 10/9f0c2f36527a18e654d9bf66051c0b1fe3c90addb3fc55c8e53ede9d16e477eb04949cd6725cb56663d1cc5f86872f704e34508adc1c9271530ea7c8a0f978f1 +"@grafana/i18n@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": + version: 0.0.0-use.local + resolution: "@grafana/i18n@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" languageName: node - linkType: hard + linkType: soft + +"@grafana/runtime@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": + version: 0.0.0-use.local + resolution: "@grafana/runtime@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" + languageName: node + linkType: soft "@grafana/runtime@npm:^11.6.0": version: 11.6.1 @@ -3987,9 +3945,14 @@ __metadata: "@eslint/compat": "npm:1.3.0" "@eslint/js": "npm:^9.28.0" "@floating-ui/react": "npm:^0.26.16" + "@grafana/data": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data" + "@grafana/e2e-selectors": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors" "@grafana/eslint-config": "npm:^8.1.0" - "@grafana/i18n": "npm:12.1.0" + "@grafana/i18n": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n" + "@grafana/runtime": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime" + "@grafana/schema": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema" "@grafana/tsconfig": "npm:^1.3.0-rc1" + "@grafana/ui": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui" "@leeoniya/ufuzzy": "npm:^1.0.16" "@rollup/plugin-dynamic-import-vars": "npm:2.1.5" "@rollup/plugin-json": "npm:^6.1.0" @@ -4059,6 +4022,12 @@ __metadata: languageName: unknown linkType: soft +"@grafana/schema@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": + version: 0.0.0-use.local + resolution: "@grafana/schema@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" + languageName: node + linkType: soft + "@grafana/schema@npm:11.6.1, @grafana/schema@npm:^11.6.0": version: 11.6.1 resolution: "@grafana/schema@npm:11.6.1" @@ -4089,6 +4058,12 @@ __metadata: languageName: node linkType: hard +"@grafana/ui@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": + version: 0.0.0-use.local + resolution: "@grafana/ui@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" + languageName: node + linkType: soft + "@grafana/ui@npm:11.6.1, @grafana/ui@npm:^11.6.0": version: 11.6.1 resolution: "@grafana/ui@npm:11.6.1" @@ -8384,7 +8359,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.34.0, @typescript-eslint/utils@npm:^8.13.0, @typescript-eslint/utils@npm:^8.33.1": +"@typescript-eslint/utils@npm:8.34.0, @typescript-eslint/utils@npm:^8.13.0": version: 8.34.0 resolution: "@typescript-eslint/utils@npm:8.34.0" dependencies: @@ -12354,13 +12329,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.3": - version: 10.5.0 - resolution: "decimal.js@npm:10.5.0" - checksum: 10/714d49cf2f2207b268221795ede330e51452b7c451a0c02a770837d2d4faed47d603a729c2aa1d952eb6c4102d999e91c9b952c1aa016db3c5cba9fc8bf4cda2 - languageName: node - linkType: hard - "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -16702,24 +16670,6 @@ __metadata: languageName: node linkType: hard -"i18next-pseudo@npm:^2.2.1": - version: 2.2.1 - resolution: "i18next-pseudo@npm:2.2.1" - dependencies: - i18next: "npm:^19.1.0" - checksum: 10/4eeec03540c6e9bb823b804cffcb2b95555b0a1d185e0287c74d2deaf7e6bfa206b0223d69db4fbe7b90c66faba451737b06151c85708afd2c5e9502adf817b2 - languageName: node - linkType: hard - -"i18next@npm:^19.1.0": - version: 19.9.2 - resolution: "i18next@npm:19.9.2" - dependencies: - "@babel/runtime": "npm:^7.12.0" - checksum: 10/a3b8da898edf74257984821b8eaf11929db4cab2c123dadad05c641af98bfcf94ddddee951d091e45f6f7510db47294f4d67134906b1dd82f144f01534153710 - languageName: node - linkType: hard - "i18next@npm:^23.5.1 || ^24.2.0": version: 24.2.3 resolution: "i18next@npm:24.2.3" @@ -16748,20 +16698,6 @@ __metadata: languageName: node linkType: hard -"i18next@npm:^25.0.0": - version: 25.3.2 - resolution: "i18next@npm:25.3.2" - dependencies: - "@babel/runtime": "npm:^7.27.6" - peerDependencies: - typescript: ^5 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/fb6b2035cc8f3bcc89f56e164d22cefbefd54e5a569315b20ddcfa6e1b68c48962307181b271fea7e5ee37ddfaa90721a4a7f7814b739f24bf00a3a670b8eb93 - languageName: node - linkType: hard - "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.8": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -28036,7 +27972,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.8.1, tslib@npm:^2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0, tslib@npm:^2.8.0": +"tslib@npm:2.8.1, tslib@npm:^2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.7.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 From 613ed6268b7a43f9115e4366656288c8ba51eb4d Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Mon, 17 Nov 2025 11:24:42 +0200 Subject: [PATCH 02/10] Update react-grid-layout --- packages/scenes-react/package.json | 2 +- packages/scenes/package.json | 4 +- yarn.lock | 69 +++++++++++++++++++----------- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/packages/scenes-react/package.json b/packages/scenes-react/package.json index 6382437c9..4275a5d02 100644 --- a/packages/scenes-react/package.json +++ b/packages/scenes-react/package.json @@ -74,7 +74,7 @@ "@types/node": "20.11.30", "@types/react": "18.2.74", "@types/react-dom": "18.2.24", - "@types/react-grid-layout": "1.3.2", + "@types/react-grid-layout": "1.3.5", "@types/react-virtualized-auto-sizer": "1.0.1", "@types/uuid": "8.3.4", "@typescript-eslint/eslint-plugin": "^8.34.0", diff --git a/packages/scenes/package.json b/packages/scenes/package.json index 573a66fb8..7a2edfd88 100644 --- a/packages/scenes/package.json +++ b/packages/scenes/package.json @@ -42,7 +42,7 @@ "@leeoniya/ufuzzy": "^1.0.16", "@tanstack/react-virtual": "^3.9.0", "i18next-parser": "9.3.0", - "react-grid-layout": "1.3.4", + "react-grid-layout": "1.5.2", "react-use": "17.5.0", "react-virtualized-auto-sizer": "1.0.24", "uuid": "^9.0.0" @@ -87,7 +87,7 @@ "@types/node": "20.11.30", "@types/react": "18.2.74", "@types/react-dom": "18.2.24", - "@types/react-grid-layout": "1.3.2", + "@types/react-grid-layout": "1.3.5", "@types/react-virtualized-auto-sizer": "1.0.1", "@types/systemjs": "^6.15.1", "@types/uuid": "8.3.4", diff --git a/yarn.lock b/yarn.lock index fa318e0ba..b94f4c193 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3892,7 +3892,7 @@ __metadata: "@types/node": "npm:20.11.30" "@types/react": "npm:18.2.74" "@types/react-dom": "npm:18.2.24" - "@types/react-grid-layout": "npm:1.3.2" + "@types/react-grid-layout": "npm:1.3.5" "@types/react-virtualized-auto-sizer": "npm:1.0.1" "@types/uuid": "npm:8.3.4" "@typescript-eslint/eslint-plugin": "npm:^8.34.0" @@ -3971,7 +3971,7 @@ __metadata: "@types/node": "npm:20.11.30" "@types/react": "npm:18.2.74" "@types/react-dom": "npm:18.2.24" - "@types/react-grid-layout": "npm:1.3.2" + "@types/react-grid-layout": "npm:1.3.5" "@types/react-virtualized-auto-sizer": "npm:1.0.1" "@types/systemjs": "npm:^6.15.1" "@types/uuid": "npm:8.3.4" @@ -3992,7 +3992,7 @@ __metadata: jest-matcher-utils: "npm:29.7.0" lodash: "npm:4.17.21" prettier: "npm:2.5.1" - react-grid-layout: "npm:1.3.4" + react-grid-layout: "npm:1.5.2" react-router-dom: "npm:^6.28.0" react-select-event: "npm:^5.5.1" react-use: "npm:17.5.0" @@ -7990,12 +7990,12 @@ __metadata: languageName: node linkType: hard -"@types/react-grid-layout@npm:1.3.2": - version: 1.3.2 - resolution: "@types/react-grid-layout@npm:1.3.2" +"@types/react-grid-layout@npm:1.3.5": + version: 1.3.5 + resolution: "@types/react-grid-layout@npm:1.3.5" dependencies: "@types/react": "npm:*" - checksum: 10/a21fe7f790d8bd2ae385829e5d5c369788c2facfc0a9f888dc1f07b4982398e02d1ffc8fca902cd77495094a598e0951e5c907edeb773abd1bf8a6db293d54a1 + checksum: 10/21599054dfa977ed8445b1ab3198a842531cb36bd620564c3f8a469688cbea051149eb644a99b2f8f6d02f8d9909a6145668f385781b5647601e9663de216946 languageName: node linkType: hard @@ -10679,6 +10679,13 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^2.1.1": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10/cdfb57fa6c7649bbff98d9028c2f0de2f91c86f551179541cf784b1cfdc1562dcb951955f46d54d930a3879931a980e32a46b598acaea274728dbe068deca919 + languageName: node + linkType: hard + "cmd-shim@npm:6.0.3": version: 6.0.3 resolution: "cmd-shim@npm:6.0.3" @@ -14338,6 +14345,13 @@ __metadata: languageName: node linkType: hard +"fast-equals@npm:^4.0.3": + version: 4.0.3 + resolution: "fast-equals@npm:4.0.3" + checksum: 10/04c1ff47b79923314e9b63ec6c81beeaa5e3b9588ec230ee6aff7ece725ff834a72abf627055055127bd0f53ae8a92cc04c3a6e187783fd932dbef743f9b13bf + languageName: node + linkType: hard + "fast-fifo@npm:^1.3.2": version: 1.3.2 resolution: "fast-fifo@npm:1.3.2" @@ -19240,13 +19254,6 @@ __metadata: languageName: node linkType: hard -"lodash.isequal@npm:^4.0.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 - languageName: node - linkType: hard - "lodash.ismatch@npm:^4.4.0": version: 4.4.0 resolution: "lodash.ismatch@npm:4.4.0" @@ -24048,7 +24055,7 @@ __metadata: languageName: node linkType: hard -"react-draggable@npm:^4.0.0, react-draggable@npm:^4.0.3": +"react-draggable@npm:^4.0.3": version: 4.4.6 resolution: "react-draggable@npm:4.4.6" dependencies: @@ -24061,6 +24068,19 @@ __metadata: languageName: node linkType: hard +"react-draggable@npm:^4.4.6": + version: 4.5.0 + resolution: "react-draggable@npm:4.5.0" + dependencies: + clsx: "npm:^2.1.1" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ">= 16.3.0" + react-dom: ">= 16.3.0" + checksum: 10/fd4080a082fad199103c6978c8a78c80154a0205dbd14ca2c7bb75634132a6afd83a3e4669f2d8fe54efe68569ef24a992439183289d83e71030b0a1791d3476 + languageName: node + linkType: hard + "react-dropzone@npm:14.3.5": version: 14.3.5 resolution: "react-dropzone@npm:14.3.5" @@ -24108,19 +24128,20 @@ __metadata: languageName: node linkType: hard -"react-grid-layout@npm:1.3.4": - version: 1.3.4 - resolution: "react-grid-layout@npm:1.3.4" +"react-grid-layout@npm:1.5.2": + version: 1.5.2 + resolution: "react-grid-layout@npm:1.5.2" dependencies: - clsx: "npm:^1.1.1" - lodash.isequal: "npm:^4.0.0" + clsx: "npm:^2.1.1" + fast-equals: "npm:^4.0.3" prop-types: "npm:^15.8.1" - react-draggable: "npm:^4.0.0" - react-resizable: "npm:^3.0.4" + react-draggable: "npm:^4.4.6" + react-resizable: "npm:^3.0.5" + resize-observer-polyfill: "npm:^1.5.1" peerDependencies: react: ">= 16.3.0" react-dom: ">= 16.3.0" - checksum: 10/944ab133e59bfaa5633625f57be9f69133b5cec2de0232d9581e2c988e257ebafe010ee9bbbff6c2754f9d7d8bb0053072bac103f20fc232be2a58e15d14fc64 + checksum: 10/0b2ed84b8b7eeebfd30671a879c84b7873830354389bcec98f38efccf51c2e78115bf76b19a77d5b07e139478ba7cc26593e122a0e5e71487ad8ad2b6af55629 languageName: node linkType: hard @@ -24289,7 +24310,7 @@ __metadata: languageName: node linkType: hard -"react-resizable@npm:^3.0.4": +"react-resizable@npm:^3.0.5": version: 3.0.5 resolution: "react-resizable@npm:3.0.5" dependencies: From 17bafd855ec68c5ae37f1f9a471f834d5308ad08 Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Mon, 17 Nov 2025 11:35:15 +0200 Subject: [PATCH 03/10] Make grid layout droppable --- .../src/components/layout/grid/SceneGridLayoutRenderer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx index f21bf707b..d36a4d1ad 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx @@ -61,6 +61,7 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps} + isDroppable={true} > {layout.map((gridItem, index) => ( Date: Mon, 17 Nov 2025 12:18:39 +0200 Subject: [PATCH 04/10] Introduce placeholder item --- .../components/layout/grid/SceneGridItem.tsx | 2 +- .../layout/grid/SceneGridLayout.tsx | 9 +++++- .../layout/grid/SceneGridLayoutRenderer.tsx | 13 ++++++-- .../layout/grid/SceneGridPlaceholderItem.tsx | 32 +++++++++++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx diff --git a/packages/scenes/src/components/layout/grid/SceneGridItem.tsx b/packages/scenes/src/components/layout/grid/SceneGridItem.tsx index b5d3ced70..885679b0d 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridItem.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridItem.tsx @@ -31,6 +31,6 @@ export function isSceneGridRow(child: SceneObject): child is SceneGridRow { return child instanceof SceneGridRow; } -function isSceneGridLayout(child: SceneObject): child is SceneGridLayout { +export function isSceneGridLayout(child: SceneObject): child is SceneGridLayout { return child instanceof SceneGridLayout; } diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx index ce9f5cd2a..e5006a070 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx @@ -12,6 +12,7 @@ import { SceneGridItemLike, SceneGridItemPlacement, SceneGridLayoutDragStartEven import { fitPanelsInHeight } from './utils'; import { VizPanel } from '../../VizPanel/VizPanel'; import { isRepeatCloneOrChildOf } from '../../../utils/utils'; +import { SceneGridPlaceholderItem } from './SceneGridPlaceholderItem'; interface SceneGridLayoutState extends SceneObjectState { /** @@ -28,6 +29,7 @@ interface SceneGridLayoutState extends SceneObjectState { */ UNSAFE_fitPanels?: boolean; children: SceneGridItemLike[]; + placeholderItem: SceneGridPlaceholderItem; } export class SceneGridLayout extends SceneObjectBase implements SceneLayout { @@ -37,10 +39,11 @@ export class SceneGridLayout extends SceneObjectBase imple private _oldLayout: ReactGridLayout.Layout[] = []; private _loadOldLayout = false; - public constructor(state: SceneGridLayoutState) { + public constructor(state: Omit) { super({ ...state, children: sortChildrenByPosition(state.children), + placeholderItem: new SceneGridPlaceholderItem(), }); } @@ -189,6 +192,10 @@ export class SceneGridLayout extends SceneObjectBase imple * Will also scan row children and return child of the row */ public getSceneLayoutChild(key: string): SceneGridItemLike { + if (key === this.state.placeholderItem?.state.key) { + return this.state.placeholderItem!; + } + for (const child of this.state.children) { if (child.state.key === key) { return child; diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx index d36a4d1ad..887f74235 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx @@ -11,7 +11,8 @@ import { GrafanaTheme2 } from '@grafana/data'; import { useMeasure } from 'react-use'; export function SceneGridLayoutRenderer({ model }: SceneComponentProps) { - const { children, isLazy, isDraggable, isResizable } = model.useState(); + const { children, isLazy, isDraggable, isResizable, placeholderItem } = model.useState(); + const { width: placeholderWidth, height: placeholderHeight, key: placeholderKey } = placeholderItem.useState(); const [outerDivRef, { width, height }] = useMeasure(); const ref = useRef(null); @@ -55,7 +56,15 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps { + placeholderItem.setState({ width: oldItem.w, height: oldItem.h }); + model.onDragStart(layout, oldItem, newItem, placeholder, event, element); + }} onDragStop={model.onDragStop} onResizeStop={model.onResizeStop} onLayoutChange={model.onLayoutChange} diff --git a/packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx b/packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx new file mode 100644 index 000000000..7bf50bc88 --- /dev/null +++ b/packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx @@ -0,0 +1,32 @@ +import { SceneObjectBase } from '../../../core/SceneObjectBase'; +import { SceneComponentProps } from '../../../core/types'; +import { SceneGridItemStateLike, SceneGridItemLike } from './types'; +import { isSceneGridLayout, isSceneGridRow } from './SceneGridItem'; + +interface SceneGridPlaceholderItemState extends SceneGridItemStateLike {} + +export class SceneGridPlaceholderItem + extends SceneObjectBase + implements SceneGridItemLike +{ + static Component = SceneGridPlaceholderItemRenderer; + + public constructor() { + super({ + x: 1, + y: 1, + width: 12, + height: 6, + }); + } +} + +function SceneGridPlaceholderItemRenderer({ model }: SceneComponentProps) { + const parent = model.parent; + + if (parent && !isSceneGridLayout(parent) && !isSceneGridRow(parent)) { + throw new Error('SceneGridPlaceholderItem must be a child of SceneGridLayout or SceneGridRow'); + } + + return null; +} From 1a3c9b212496a0fc6f6bd7ac6fbf8fa875452b2c Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Thu, 4 Dec 2025 10:25:24 +0200 Subject: [PATCH 05/10] Pushes --- .../src/components/layout/grid/SceneGridLayout.tsx | 13 +++++++++++-- .../layout/grid/SceneGridLayoutRenderer.tsx | 8 +++----- packages/scenes/src/index.ts | 1 + 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx index e5006a070..bd9562098 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx @@ -30,6 +30,8 @@ interface SceneGridLayoutState extends SceneObjectState { UNSAFE_fitPanels?: boolean; children: SceneGridItemLike[]; placeholderItem: SceneGridPlaceholderItem; + isDragging: boolean; + isOutsideDragging: boolean; } export class SceneGridLayout extends SceneObjectBase implements SceneLayout { @@ -39,11 +41,13 @@ export class SceneGridLayout extends SceneObjectBase imple private _oldLayout: ReactGridLayout.Layout[] = []; private _loadOldLayout = false; - public constructor(state: Omit) { + public constructor(state: Omit) { super({ ...state, children: sortChildrenByPosition(state.children), placeholderItem: new SceneGridPlaceholderItem(), + isDragging: false, + isOutsideDragging: false, }); } @@ -319,7 +323,8 @@ export class SceneGridLayout extends SceneObjectBase imple return rootChildren; } - public onDragStart: ReactGridLayout.ItemCallback = (gridLayout) => { + public onDragStart: ReactGridLayout.ItemCallback = (gridLayout, oldItem, newItem, placeholder, evt) => { + this.state.placeholderItem.setState({ width: newItem.w, height: newItem.h }); this._oldLayout = [...gridLayout]; }; @@ -427,6 +432,10 @@ export class SceneGridLayout extends SceneObjectBase imple return cells; } + + public setPlaceholderSize(width: number, height: number) { + this.state.placeholderItem.setState({ width, height }); + } } function isItemSizeEqual(a: SceneGridItemPlacement, b: SceneGridItemPlacement) { diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx index 887f74235..0437cef85 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx @@ -46,7 +46,7 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps 768} + isDraggable={false} isResizable={isResizable ?? false} containerPadding={[0, 0]} useCSSTransforms={true} @@ -61,16 +61,14 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps { - placeholderItem.setState({ width: oldItem.w, height: oldItem.h }); - model.onDragStart(layout, oldItem, newItem, placeholder, event, element); - }} + onDragStart={model.onDragStart} onDragStop={model.onDragStop} onResizeStop={model.onResizeStop} onLayoutChange={model.onLayoutChange} isBounded={false} resizeHandle={} isDroppable={true} + onDrop={console.log} > {layout.map((gridItem, index) => ( Date: Thu, 4 Dec 2025 14:13:56 +0200 Subject: [PATCH 06/10] Pushes --- .../layout/grid/SceneGridLayout.tsx | 71 +++++++++++++++---- .../layout/grid/SceneGridLayoutRenderer.tsx | 21 +++--- .../wrapInSafeSerializableSceneObject.ts | 1 + 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx index bd9562098..ab368d6ef 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx @@ -12,7 +12,6 @@ import { SceneGridItemLike, SceneGridItemPlacement, SceneGridLayoutDragStartEven import { fitPanelsInHeight } from './utils'; import { VizPanel } from '../../VizPanel/VizPanel'; import { isRepeatCloneOrChildOf } from '../../../utils/utils'; -import { SceneGridPlaceholderItem } from './SceneGridPlaceholderItem'; interface SceneGridLayoutState extends SceneObjectState { /** @@ -29,9 +28,7 @@ interface SceneGridLayoutState extends SceneObjectState { */ UNSAFE_fitPanels?: boolean; children: SceneGridItemLike[]; - placeholderItem: SceneGridPlaceholderItem; - isDragging: boolean; - isOutsideDragging: boolean; + _placeholderItem: SceneGridItemLike | null; } export class SceneGridLayout extends SceneObjectBase implements SceneLayout { @@ -41,13 +38,11 @@ export class SceneGridLayout extends SceneObjectBase imple private _oldLayout: ReactGridLayout.Layout[] = []; private _loadOldLayout = false; - public constructor(state: Omit) { + public constructor(state: Omit) { super({ ...state, children: sortChildrenByPosition(state.children), - placeholderItem: new SceneGridPlaceholderItem(), - isDragging: false, - isOutsideDragging: false, + _placeholderItem: null, }); } @@ -196,8 +191,8 @@ export class SceneGridLayout extends SceneObjectBase imple * Will also scan row children and return child of the row */ public getSceneLayoutChild(key: string): SceneGridItemLike { - if (key === this.state.placeholderItem?.state.key) { - return this.state.placeholderItem!; + if (key === this.state._placeholderItem?.state.key) { + return this.state._placeholderItem!; } for (const child of this.state.children) { @@ -324,7 +319,6 @@ export class SceneGridLayout extends SceneObjectBase imple } public onDragStart: ReactGridLayout.ItemCallback = (gridLayout, oldItem, newItem, placeholder, evt) => { - this.state.placeholderItem.setState({ width: newItem.w, height: newItem.h }); this._oldLayout = [...gridLayout]; }; @@ -377,6 +371,55 @@ export class SceneGridLayout extends SceneObjectBase imple this._skipOnLayoutChange = true; }; + public onDragStopNew = (gridLayout: ReactGridLayout.Layout[], updatedItem: ReactGridLayout.Layout) => { + const sceneChild = this.getSceneLayoutChild(updatedItem.i)!; + + // Need to resort the grid layout based on new position (needed to find the new parent) + gridLayout = sortGridLayout(gridLayout); + + // Update the parent if the child if it has moved to a row or back to the grid + const indexOfUpdatedItem = gridLayout.findIndex((item) => item.i === updatedItem.i); + let newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1); + let newChildren = this.state.children; + + // Update children positions if they have changed + for (let i = 0; i < gridLayout.length; i++) { + const gridItem = gridLayout[i]; + const child = this.getSceneLayoutChild(gridItem.i)!; + const childSize = child.state; + + if (childSize?.x !== gridItem.x || childSize?.y !== gridItem.y) { + child.setState({ + x: gridItem.x, + y: gridItem.y, + }); + } + } + + // Dot not allow dragging into repeated row clone + if (newParent instanceof SceneGridRow && isRepeatCloneOrChildOf(newParent)) { + this._loadOldLayout = true; + } + + // if the child is a row and we are moving it under an uncollapsed row, keep the scene grid layout as parent + // and set the old layout flag if the state is invalid. We allow setting the children in an invalid state, + // as the layout will be updated in onLayoutChange and avoid flickering + if (sceneChild instanceof SceneGridRow && newParent instanceof SceneGridRow) { + if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem)) { + this._loadOldLayout = true; + } + + newParent = this; + } + + if (newParent !== sceneChild.parent && !this._loadOldLayout) { + newChildren = this.moveChildTo(sceneChild, newParent); + } + + this.setState({ children: sortChildrenByPosition(newChildren), _placeholderItem: null }); + this._skipOnLayoutChange = true; + }; + private toGridCell(child: SceneGridItemLike): ReactGridLayout.Layout { const size = child.state; @@ -433,8 +476,10 @@ export class SceneGridLayout extends SceneObjectBase imple return cells; } - public setPlaceholderSize(width: number, height: number) { - this.state.placeholderItem.setState({ width, height }); + public setPlaceholder(placeholderItem: SceneGridItemLike | null) { + if (this.state._placeholderItem !== placeholderItem) { + this.setState({ _placeholderItem: placeholderItem }); + } } } diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx index 0437cef85..5cc382977 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx @@ -11,8 +11,7 @@ import { GrafanaTheme2 } from '@grafana/data'; import { useMeasure } from 'react-use'; export function SceneGridLayoutRenderer({ model }: SceneComponentProps) { - const { children, isLazy, isDraggable, isResizable, placeholderItem } = model.useState(); - const { width: placeholderWidth, height: placeholderHeight, key: placeholderKey } = placeholderItem.useState(); + const { children, isLazy, isDraggable, isResizable, _placeholderItem } = model.useState(); const [outerDivRef, { width, height }] = useMeasure(); const ref = useRef(null); @@ -56,19 +55,23 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps} isDroppable={true} - onDrop={console.log} + onDrop={model.onDragStopNew} > {layout.map((gridItem, index) => ( Date: Thu, 4 Dec 2025 15:20:30 +0200 Subject: [PATCH 07/10] Pushes --- .../layout/grid/SceneGridLayout.tsx | 57 +++---------------- .../layout/grid/SceneGridLayoutRenderer.tsx | 4 +- 2 files changed, 9 insertions(+), 52 deletions(-) diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx index ab368d6ef..0a6d75b64 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx @@ -191,7 +191,7 @@ export class SceneGridLayout extends SceneObjectBase imple * Will also scan row children and return child of the row */ public getSceneLayoutChild(key: string): SceneGridItemLike { - if (key === this.state._placeholderItem?.state.key) { + if (key === '__placeholder') { return this.state._placeholderItem!; } @@ -322,57 +322,14 @@ export class SceneGridLayout extends SceneObjectBase imple this._oldLayout = [...gridLayout]; }; - public onDragStop: ReactGridLayout.ItemCallback = (gridLayout, o, updatedItem) => { + public onDragStop = (gridLayout: ReactGridLayout.Layout[], updatedItem: ReactGridLayout.Layout) => { const sceneChild = this.getSceneLayoutChild(updatedItem.i)!; - // Need to resort the grid layout based on new position (needed to find the new parent) - gridLayout = sortGridLayout(gridLayout); - - // Update the parent if the child if it has moved to a row or back to the grid - const indexOfUpdatedItem = gridLayout.findIndex((item) => item.i === updatedItem.i); - let newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1); - let newChildren = this.state.children; - - // Update children positions if they have changed - for (let i = 0; i < gridLayout.length; i++) { - const gridItem = gridLayout[i]; - const child = this.getSceneLayoutChild(gridItem.i)!; - const childSize = child.state; - - if (childSize?.x !== gridItem.x || childSize?.y !== gridItem.y) { - child.setState({ - x: gridItem.x, - y: gridItem.y, - }); - } - } - - // Dot not allow dragging into repeated row clone - if (newParent instanceof SceneGridRow && isRepeatCloneOrChildOf(newParent)) { - this._loadOldLayout = true; - } - - // if the child is a row and we are moving it under an uncollapsed row, keep the scene grid layout as parent - // and set the old layout flag if the state is invalid. We allow setting the children in an invalid state, - // as the layout will be updated in onLayoutChange and avoid flickering - if (sceneChild instanceof SceneGridRow && newParent instanceof SceneGridRow) { - if (!this.isRowDropValid(gridLayout, updatedItem, indexOfUpdatedItem)) { - this._loadOldLayout = true; - } - - newParent = this; - } - - if (newParent !== sceneChild.parent && !this._loadOldLayout) { - newChildren = this.moveChildTo(sceneChild, newParent); - } - - this.setState({ children: sortChildrenByPosition(newChildren) }); - this._skipOnLayoutChange = true; - }; - - public onDragStopNew = (gridLayout: ReactGridLayout.Layout[], updatedItem: ReactGridLayout.Layout) => { - const sceneChild = this.getSceneLayoutChild(updatedItem.i)!; + // gridLayout contains both the original item and the updated item + // we need to remove the original item + gridLayout = gridLayout.filter( + (item) => item.i !== updatedItem.i || (item.i === updatedItem.i && item === updatedItem) + ); // Need to resort the grid layout based on new position (needed to find the new parent) gridLayout = sortGridLayout(gridLayout); diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx index 5cc382977..a7e606bed 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx @@ -65,13 +65,13 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps} isDroppable={true} - onDrop={model.onDragStopNew} + onDrop={model.onDragStop} > {layout.map((gridItem, index) => ( Date: Thu, 4 Dec 2025 15:59:59 +0200 Subject: [PATCH 08/10] Pushes --- .../scenes/src/components/layout/grid/SceneGridLayout.tsx | 6 +----- .../src/components/layout/grid/SceneGridLayoutRenderer.tsx | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx index 0a6d75b64..06fc01df2 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayout.tsx @@ -191,7 +191,7 @@ export class SceneGridLayout extends SceneObjectBase imple * Will also scan row children and return child of the row */ public getSceneLayoutChild(key: string): SceneGridItemLike { - if (key === '__placeholder') { + if (key === this.state._placeholderItem?.state.key) { return this.state._placeholderItem!; } @@ -318,10 +318,6 @@ export class SceneGridLayout extends SceneObjectBase imple return rootChildren; } - public onDragStart: ReactGridLayout.ItemCallback = (gridLayout, oldItem, newItem, placeholder, evt) => { - this._oldLayout = [...gridLayout]; - }; - public onDragStop = (gridLayout: ReactGridLayout.Layout[], updatedItem: ReactGridLayout.Layout) => { const sceneChild = this.getSceneLayoutChild(updatedItem.i)!; diff --git a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx index a7e606bed..8fa848723 100644 --- a/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx +++ b/packages/scenes/src/components/layout/grid/SceneGridLayoutRenderer.tsx @@ -64,8 +64,6 @@ export function SceneGridLayoutRenderer({ model }: SceneComponentProps Date: Thu, 4 Dec 2025 16:01:12 +0200 Subject: [PATCH 09/10] Pushes --- .../layout/grid/SceneGridPlaceholderItem.tsx | 32 ------------------- packages/scenes/src/index.ts | 1 - 2 files changed, 33 deletions(-) delete mode 100644 packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx diff --git a/packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx b/packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx deleted file mode 100644 index 7bf50bc88..000000000 --- a/packages/scenes/src/components/layout/grid/SceneGridPlaceholderItem.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { SceneObjectBase } from '../../../core/SceneObjectBase'; -import { SceneComponentProps } from '../../../core/types'; -import { SceneGridItemStateLike, SceneGridItemLike } from './types'; -import { isSceneGridLayout, isSceneGridRow } from './SceneGridItem'; - -interface SceneGridPlaceholderItemState extends SceneGridItemStateLike {} - -export class SceneGridPlaceholderItem - extends SceneObjectBase - implements SceneGridItemLike -{ - static Component = SceneGridPlaceholderItemRenderer; - - public constructor() { - super({ - x: 1, - y: 1, - width: 12, - height: 6, - }); - } -} - -function SceneGridPlaceholderItemRenderer({ model }: SceneComponentProps) { - const parent = model.parent; - - if (parent && !isSceneGridLayout(parent) && !isSceneGridRow(parent)) { - throw new Error('SceneGridPlaceholderItem must be a child of SceneGridLayout or SceneGridRow'); - } - - return null; -} diff --git a/packages/scenes/src/index.ts b/packages/scenes/src/index.ts index 158ec3b85..267a98924 100644 --- a/packages/scenes/src/index.ts +++ b/packages/scenes/src/index.ts @@ -118,7 +118,6 @@ export { export { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout'; export { SceneGridLayout } from './components/layout/grid/SceneGridLayout'; export { SceneGridLayoutDragStartEvent } from './components/layout/grid/types'; -export { SceneGridPlaceholderItem } from './components/layout/grid/SceneGridPlaceholderItem'; export { SceneGridItem } from './components/layout/grid/SceneGridItem'; export { SceneGridRow } from './components/layout/grid/SceneGridRow'; export { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types'; From e62d2f0639e439e50ae199f85ff9e6267810ac7f Mon Sep 17 00:00:00 2001 From: Bogdan Matei Date: Thu, 4 Dec 2025 16:02:37 +0200 Subject: [PATCH 10/10] Pushes --- packages/scenes/package.json | 6 ------ yarn.lock | 42 ------------------------------------ 2 files changed, 48 deletions(-) diff --git a/packages/scenes/package.json b/packages/scenes/package.json index 7a2edfd88..1c6ef603a 100644 --- a/packages/scenes/package.json +++ b/packages/scenes/package.json @@ -63,14 +63,8 @@ "@emotion/react": "11.10.5", "@eslint/compat": "1.3.0", "@eslint/js": "^9.28.0", - "@grafana/data": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data", - "@grafana/e2e-selectors": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors", "@grafana/eslint-config": "^8.1.0", - "@grafana/i18n": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n", - "@grafana/runtime": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime", - "@grafana/schema": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema", "@grafana/tsconfig": "^1.3.0-rc1", - "@grafana/ui": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui", "@rollup/plugin-dynamic-import-vars": "2.1.5", "@rollup/plugin-json": "^6.1.0", "@stylistic/eslint-plugin-ts": "3.1.0", diff --git a/yarn.lock b/yarn.lock index b94f4c193..133375507 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3659,12 +3659,6 @@ __metadata: languageName: node linkType: hard -"@grafana/data@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": - version: 0.0.0-use.local - resolution: "@grafana/data@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" - languageName: node - linkType: soft - "@grafana/data@npm:11.6.1, @grafana/data@npm:^11.6.0": version: 11.6.1 resolution: "@grafana/data@npm:11.6.1" @@ -3700,12 +3694,6 @@ __metadata: languageName: node linkType: hard -"@grafana/e2e-selectors@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": - version: 0.0.0-use.local - resolution: "@grafana/e2e-selectors@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" - languageName: node - linkType: soft - "@grafana/e2e-selectors@npm:11.6.1": version: 11.6.1 resolution: "@grafana/e2e-selectors@npm:11.6.1" @@ -3813,18 +3801,6 @@ __metadata: languageName: node linkType: hard -"@grafana/i18n@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": - version: 0.0.0-use.local - resolution: "@grafana/i18n@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" - languageName: node - linkType: soft - -"@grafana/runtime@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": - version: 0.0.0-use.local - resolution: "@grafana/runtime@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" - languageName: node - linkType: soft - "@grafana/runtime@npm:^11.6.0": version: 11.6.1 resolution: "@grafana/runtime@npm:11.6.1" @@ -3945,14 +3921,8 @@ __metadata: "@eslint/compat": "npm:1.3.0" "@eslint/js": "npm:^9.28.0" "@floating-ui/react": "npm:^0.26.16" - "@grafana/data": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-data" - "@grafana/e2e-selectors": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-e2e-selectors" "@grafana/eslint-config": "npm:^8.1.0" - "@grafana/i18n": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-i18n" - "@grafana/runtime": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-runtime" - "@grafana/schema": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema" "@grafana/tsconfig": "npm:^1.3.0-rc1" - "@grafana/ui": "link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui" "@leeoniya/ufuzzy": "npm:^1.0.16" "@rollup/plugin-dynamic-import-vars": "npm:2.1.5" "@rollup/plugin-json": "npm:^6.1.0" @@ -4022,12 +3992,6 @@ __metadata: languageName: unknown linkType: soft -"@grafana/schema@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": - version: 0.0.0-use.local - resolution: "@grafana/schema@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-schema::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" - languageName: node - linkType: soft - "@grafana/schema@npm:11.6.1, @grafana/schema@npm:^11.6.0": version: 11.6.1 resolution: "@grafana/schema@npm:11.6.1" @@ -4058,12 +4022,6 @@ __metadata: languageName: node linkType: hard -"@grafana/ui@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes": - version: 0.0.0-use.local - resolution: "@grafana/ui@link:/Users/bogdan/Workspace/Grafana/grafana/packages/grafana-ui::locator=%40grafana%2Fscenes%40workspace%3Apackages%2Fscenes" - languageName: node - linkType: soft - "@grafana/ui@npm:11.6.1, @grafana/ui@npm:^11.6.0": version: 11.6.1 resolution: "@grafana/ui@npm:11.6.1"