This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 7fc9974a7c fix(deps): remove encodable dependency and pin query-string 
to fix Dependabot CI failures (#37450)
7fc9974a7c is described below

commit 7fc9974a7cf05cb3e66d71b433a18ee213bad51b
Author: Evan Rusackas <[email protected]>
AuthorDate: Mon Jan 26 15:52:22 2026 -0800

    fix(deps): remove encodable dependency and pin query-string to fix 
Dependabot CI failures (#37450)
    
    Co-authored-by: Claude Opus 4.5 <[email protected]>
---
 superset-frontend/package-lock.json                | 320 +--------------------
 superset-frontend/package.json                     |   1 +
 .../packages/superset-ui-demo/package.json         |   1 -
 .../plugins/plugin-chart-echarts/package.json      |   1 +
 .../plugins/plugin-chart-word-cloud/package.json   |   3 +-
 .../src/chart/WordCloud.tsx                        | 201 +++++++++----
 .../src/configureEncodable.ts                      |  83 ------
 .../plugins/plugin-chart-word-cloud/src/index.ts   |   1 -
 .../plugin-chart-word-cloud/src/plugin/index.ts    |   3 -
 9 files changed, 150 insertions(+), 464 deletions(-)

diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index 6662ef53d5..492016be47 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -97,6 +97,7 @@
         "nanoid": "^5.1.6",
         "ol": "^7.5.2",
         "prop-types": "^15.8.1",
+        "query-string": "6.14.1",
         "re-resizable": "^6.11.2",
         "react": "^17.0.2",
         "react-checkbox-tree": "^1.8.0",
@@ -4427,157 +4428,6 @@
       "integrity": 
"sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
       "license": "MIT"
     },
-    "node_modules/@encodable/color": {
-      "version": "1.1.1",
-      "resolved": 
"https://registry.npmjs.org/@encodable/color/-/color-1.1.1.tgz";,
-      "integrity": 
"sha512-3QlHqsaD+D4W4T6E4Wq4mp7MBpt5yCkCmgTh6AfsoUfJeAEogA92d8r3Y67Zuppcs/eepHW0ip8zfehS2jZNkQ==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@encodable/registry": "^1.0.3",
-        "@types/d3-interpolate": "^1.3.1",
-        "@types/d3-scale": "^3.1.0",
-        "@types/d3-scale-chromatic": "^1.2.0",
-        "d3-interpolate": "^2.0.1",
-        "d3-scale": "^3.2.1",
-        "d3-scale-chromatic": "^2.0.0"
-      }
-    },
-    "node_modules/@encodable/color/node_modules/@types/d3-color": {
-      "version": "1.4.5",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz";,
-      "integrity": 
"sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g==",
-      "license": "MIT"
-    },
-    "node_modules/@encodable/color/node_modules/@types/d3-interpolate": {
-      "version": "1.4.5",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.5.tgz";,
-      "integrity": 
"sha512-k9L18hXXv7OvK4PqW1kSFYIzasGOvfhPUWmHFkoZ8/ci99EAmY4HoF6zMefrHl0SGV7XYc7Qq2MNh8dK3edg5A==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/d3-color": "^1"
-      }
-    },
-    "node_modules/@encodable/color/node_modules/@types/d3-scale": {
-      "version": "3.3.5",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.5.tgz";,
-      "integrity": 
"sha512-YOpKj0kIEusRf7ofeJcSZQsvKbnTwpe1DUF+P2qsotqG53kEsjm7EzzliqQxMkAWdkZcHrg5rRhB4JiDOQPX+A==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/d3-time": "^2"
-      }
-    },
-    "node_modules/@encodable/color/node_modules/@types/d3-time": {
-      "version": "2.1.4",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.4.tgz";,
-      "integrity": 
"sha512-BTfLsxTeo7yFxI/haOOf1ZwJ6xKgQLT9dCp+EcmQv87Gox6X+oKl4mLKfO6fnWm3P22+A6DknMNEZany8ql2Rw==",
-      "license": "MIT"
-    },
-    "node_modules/@encodable/color/node_modules/d3-interpolate": {
-      "version": "2.0.1",
-      "resolved": 
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz";,
-      "integrity": 
"sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-color": "1 - 2"
-      }
-    },
-    "node_modules/@encodable/color/node_modules/d3-scale": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz";,
-      "integrity": 
"sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-array": "^2.3.0",
-        "d3-format": "1 - 2",
-        "d3-interpolate": "1.2.0 - 2",
-        "d3-time": "^2.1.1",
-        "d3-time-format": "2 - 3"
-      }
-    },
-    "node_modules/@encodable/color/node_modules/d3-time": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz";,
-      "integrity": 
"sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-array": "2"
-      }
-    },
-    "node_modules/@encodable/color/node_modules/d3-time-format": {
-      "version": "3.0.0",
-      "resolved": 
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz";,
-      "integrity": 
"sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-time": "1 - 2"
-      }
-    },
-    "node_modules/@encodable/format": {
-      "version": "1.0.6",
-      "resolved": 
"https://registry.npmjs.org/@encodable/format/-/format-1.0.6.tgz";,
-      "integrity": 
"sha512-gtzLMQyw4AJ7m3TIANm2z2QfzZJLGLdhVmKbizRRu9MRMlYIVXhk+46zPm10RNxGv4ybpsfcCfkCd4nL3RlZRg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@encodable/registry": "^1.0.3",
-        "@types/d3-format": "^1.3.1",
-        "@types/d3-time": "^1.0.10",
-        "@types/d3-time-format": "^2.1.1",
-        "d3-format": "^2.0.0",
-        "d3-time": "^2.0.0",
-        "d3-time-format": "^3.0.0"
-      }
-    },
-    "node_modules/@encodable/format/node_modules/@types/d3-format": {
-      "version": "1.4.5",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.5.tgz";,
-      "integrity": 
"sha512-mLxrC1MSWupOSncXN/HOlWUAAIffAEBaI4+PKy2uMPsKe4FNZlk7qrbTjmzJXITQQqBHivaks4Td18azgqnotA==",
-      "license": "MIT"
-    },
-    "node_modules/@encodable/format/node_modules/@types/d3-time": {
-      "version": "1.1.4",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz";,
-      "integrity": 
"sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==",
-      "license": "MIT"
-    },
-    "node_modules/@encodable/format/node_modules/@types/d3-time-format": {
-      "version": "2.3.4",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.4.tgz";,
-      "integrity": 
"sha512-xdDXbpVO74EvadI3UDxjxTdR6QIxm1FKzEA/+F8tL4GWWUg/hgvBqf6chql64U5A9ZUGWo7pEu4eNlyLwbKdhg==",
-      "license": "MIT"
-    },
-    "node_modules/@encodable/format/node_modules/d3-format": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz";,
-      "integrity": 
"sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@encodable/format/node_modules/d3-time": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz";,
-      "integrity": 
"sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-array": "2"
-      }
-    },
-    "node_modules/@encodable/format/node_modules/d3-time-format": {
-      "version": "3.0.0",
-      "resolved": 
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz";,
-      "integrity": 
"sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-time": "1 - 2"
-      }
-    },
-    "node_modules/@encodable/registry": {
-      "version": "1.0.3",
-      "resolved": 
"https://registry.npmjs.org/@encodable/registry/-/registry-1.0.3.tgz";,
-      "integrity": 
"sha512-YH2nSBZJKgbH/9MkQXzAEE9UwTaVcWiKgVFyEU/gvrfmNWqecYaHMTyObo+ADSTGF4kk0cZZkr7VqZgIQbvrUw==",
-      "license": "Apache-2.0",
-      "peerDependencies": {
-        "global-box": "*"
-      }
-    },
     "node_modules/@epic-web/invariant": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz";,
@@ -19313,9 +19163,9 @@
       "license": "MIT"
     },
     "node_modules/@types/d3-array": {
-      "version": "2.12.7",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-array/-/d3-array-2.12.7.tgz";,
-      "integrity": 
"sha512-SVvxzxRVnIgtJbNTj5ZVJ9CZkVOANCpW0nQbRi7EOU5Q9G+JQQjXD2SCpr1OYCX09b3Yr7o0+CBofZAgU42rbQ==",
+      "version": "3.2.2",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz";,
+      "integrity": 
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
       "license": "MIT"
     },
     "node_modules/@types/d3-cloud": {
@@ -19376,21 +19226,17 @@
       "version": "2.2.10",
       "resolved": 
"https://registry.npmjs.org/@types/d3-scale/-/d3-scale-2.2.10.tgz";,
       "integrity": 
"sha512-j4V7qQ+CQzK2KpvI5NDejdPAcds+fTzNGqWXrCXv1zNR33HRir0bMdhzN1OHDQLNXYffW/zOr3FOS2qlHDEgrw==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@types/d3-time": "^1"
       }
     },
-    "node_modules/@types/d3-scale-chromatic": {
-      "version": "1.5.4",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.5.4.tgz";,
-      "integrity": 
"sha512-HwLVEm8laYTNOR9Kc9745XDKgRa69VIIChNkSKJgrJOsDLI9QSiFSH2Bi4wMbGrvFs+X64azev7NfBPq+VOFVg==",
-      "license": "MIT"
-    },
     "node_modules/@types/d3-scale/node_modules/@types/d3-time": {
       "version": "1.1.4",
       "resolved": 
"https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz";,
       "integrity": 
"sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==",
+      "dev": true,
       "license": "MIT"
     },
     "node_modules/@types/d3-shape": {
@@ -19974,15 +19820,6 @@
         "@types/lodash": "*"
       }
     },
-    "node_modules/@types/lodash.get": {
-      "version": "4.4.9",
-      "resolved": 
"https://registry.npmjs.org/@types/lodash.get/-/lodash.get-4.4.9.tgz";,
-      "integrity": 
"sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/lodash": "*"
-      }
-    },
     "node_modules/@types/mapbox__geojson-extent": {
       "version": "1.0.3",
       "resolved": 
"https://registry.npmjs.org/@types/mapbox__geojson-extent/-/mapbox__geojson-extent-1.0.3.tgz";,
@@ -28323,25 +28160,6 @@
         "d3-time-format": "2"
       }
     },
-    "node_modules/d3-scale-chromatic": {
-      "version": "2.0.0",
-      "resolved": 
"https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz";,
-      "integrity": 
"sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-color": "1 - 2",
-        "d3-interpolate": "1 - 2"
-      }
-    },
-    "node_modules/d3-scale-chromatic/node_modules/d3-interpolate": {
-      "version": "2.0.1",
-      "resolved": 
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz";,
-      "integrity": 
"sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-color": "1 - 2"
-      }
-    },
     "node_modules/d3-scale/node_modules/d3-array": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz";,
@@ -28671,7 +28489,6 @@
       "resolved": 
"https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz";,
       "integrity": 
"sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=0.10"
       }
@@ -29687,97 +29504,6 @@
         "node": ">= 4"
       }
     },
-    "node_modules/encodable": {
-      "version": "0.7.8",
-      "resolved": "https://registry.npmjs.org/encodable/-/encodable-0.7.8.tgz";,
-      "integrity": 
"sha512-rh5isin1c3ZJuultMyJZGBRbGIh8IrVHQuwlEG3lPMGZQ5yQUb2STIbXGGEbSifxT4POnojKjTxhm3ITTSdriw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@encodable/color": "^1.1.0",
-        "@encodable/format": "^1.0.5",
-        "@types/d3-array": "^2.0.0",
-        "@types/d3-interpolate": "^1.3.1",
-        "@types/d3-scale": "^2.1.1",
-        "@types/d3-time": "^1.0.10",
-        "@types/lodash.get": "^4.4.6",
-        "d3-array": "^2.3.1",
-        "d3-interpolate": "^2.0.1",
-        "d3-scale": "^3.0.1",
-        "d3-time": "^2.0.0",
-        "lodash.get": "^4.4.2",
-        "reselect": "^4.0.0"
-      },
-      "peerDependencies": {
-        "global-box": "*"
-      }
-    },
-    "node_modules/encodable/node_modules/@types/d3-color": {
-      "version": "1.4.5",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz";,
-      "integrity": 
"sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g==",
-      "license": "MIT"
-    },
-    "node_modules/encodable/node_modules/@types/d3-interpolate": {
-      "version": "1.4.5",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.5.tgz";,
-      "integrity": 
"sha512-k9L18hXXv7OvK4PqW1kSFYIzasGOvfhPUWmHFkoZ8/ci99EAmY4HoF6zMefrHl0SGV7XYc7Qq2MNh8dK3edg5A==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/d3-color": "^1"
-      }
-    },
-    "node_modules/encodable/node_modules/@types/d3-time": {
-      "version": "1.1.4",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz";,
-      "integrity": 
"sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==",
-      "license": "MIT"
-    },
-    "node_modules/encodable/node_modules/d3-interpolate": {
-      "version": "2.0.1",
-      "resolved": 
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz";,
-      "integrity": 
"sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-color": "1 - 2"
-      }
-    },
-    "node_modules/encodable/node_modules/d3-scale": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz";,
-      "integrity": 
"sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-array": "^2.3.0",
-        "d3-format": "1 - 2",
-        "d3-interpolate": "1.2.0 - 2",
-        "d3-time": "^2.1.1",
-        "d3-time-format": "2 - 3"
-      }
-    },
-    "node_modules/encodable/node_modules/d3-time": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz";,
-      "integrity": 
"sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-array": "2"
-      }
-    },
-    "node_modules/encodable/node_modules/d3-time-format": {
-      "version": "3.0.0",
-      "resolved": 
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz";,
-      "integrity": 
"sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "d3-time": "1 - 2"
-      }
-    },
-    "node_modules/encodable/node_modules/reselect": {
-      "version": "4.1.8",
-      "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz";,
-      "integrity": 
"sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
-      "license": "MIT"
-    },
     "node_modules/encodeurl": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz";,
@@ -32547,7 +32273,6 @@
       "resolved": 
"https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz";,
       "integrity": 
"sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -34606,13 +34331,6 @@
         "process": "^0.11.10"
       }
     },
-    "node_modules/global-box": {
-      "version": "2.0.2",
-      "resolved": 
"https://registry.npmjs.org/global-box/-/global-box-2.0.2.tgz";,
-      "integrity": 
"sha512-vVSNq3+oEEqG565ProXN7iKHcK8hehtbXNLjsOmywHDTBXlwgP/Bt1Soqf4NGeOq3W3u1o7UE3t0RgiNG0BTkQ==",
-      "license": "Apache-2.0",
-      "peer": true
-    },
     "node_modules/global-directory": {
       "version": "4.0.1",
       "resolved": 
"https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz";,
@@ -49059,7 +48777,6 @@
       "resolved": 
"https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz";,
       "integrity": 
"sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "decode-uri-component": "^0.2.0",
         "filter-obj": "^1.1.0",
@@ -54464,7 +54181,6 @@
       "resolved": 
"https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz";,
       "integrity": 
"sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=6"
       }
@@ -54998,7 +54714,6 @@
       "resolved": 
"https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz";,
       "integrity": 
"sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=4"
       }
@@ -65126,7 +64841,6 @@
       },
       "peerDependencies": {
         "@apache-superset/core": "*",
-        "@encodable/color": "=1.1.1",
         "@superset-ui/core": "*",
         "@superset-ui/legacy-plugin-chart-calendar": "*",
         "@superset-ui/legacy-plugin-chart-chord": "*",
@@ -66197,12 +65911,6 @@
       "integrity": 
"sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==",
       "license": "BSD-2-Clause"
     },
-    "plugins/legacy-preset-chart-deckgl/node_modules/@types/d3-array": {
-      "version": "3.2.2",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz";,
-      "integrity": 
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
-      "license": "MIT"
-    },
     "plugins/legacy-preset-chart-deckgl/node_modules/d3-array": {
       "version": "3.2.4",
       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz";,
@@ -66348,12 +66056,6 @@
         "react-dom": "^17.0.2"
       }
     },
-    "plugins/plugin-chart-ag-grid-table/node_modules/@types/d3-array": {
-      "version": "3.2.2",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz";,
-      "integrity": 
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
-      "license": "MIT"
-    },
     "plugins/plugin-chart-ag-grid-table/node_modules/d3-array": {
       "version": "3.2.4",
       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz";,
@@ -66398,6 +66100,7 @@
       "version": "0.20.3",
       "license": "Apache-2.0",
       "dependencies": {
+        "@types/d3-array": "^3.2.2",
         "@types/react-redux": "^7.1.34",
         "d3-array": "^3.2.4",
         "lodash": "^4.17.23"
@@ -66543,12 +66246,6 @@
         "react-dom": "^17.0.2"
       }
     },
-    "plugins/plugin-chart-table/node_modules/@types/d3-array": {
-      "version": "3.2.2",
-      "resolved": 
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz";,
-      "integrity": 
"sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
-      "license": "MIT"
-    },
     "plugins/plugin-chart-table/node_modules/d3-array": {
       "version": "3.2.4",
       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz";,
@@ -66568,8 +66265,7 @@
       "dependencies": {
         "@types/d3-scale": "^4.0.9",
         "d3-cloud": "^1.2.8",
-        "d3-scale": "^3.0.1",
-        "encodable": "^0.7.8"
+        "d3-scale": "^3.0.1"
       },
       "devDependencies": {
         "@types/d3-cloud": "^1.2.9"
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 01a739c31e..30ef0d1d66 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -178,6 +178,7 @@
     "nanoid": "^5.1.6",
     "ol": "^7.5.2",
     "prop-types": "^15.8.1",
+    "query-string": "6.14.1",
     "re-resizable": "^6.11.2",
     "react": "^17.0.2",
     "react-checkbox-tree": "^1.8.0",
diff --git a/superset-frontend/packages/superset-ui-demo/package.json 
b/superset-frontend/packages/superset-ui-demo/package.json
index f1dd21c5e8..344e7a268f 100644
--- a/superset-frontend/packages/superset-ui-demo/package.json
+++ b/superset-frontend/packages/superset-ui-demo/package.json
@@ -63,7 +63,6 @@
     "typescript": "^5.9.3"
   },
   "peerDependencies": {
-    "@encodable/color": "=1.1.1",
     "@superset-ui/core": "*",
     "@apache-superset/core": "*",
     "@superset-ui/legacy-plugin-chart-calendar": "*",
diff --git a/superset-frontend/plugins/plugin-chart-echarts/package.json 
b/superset-frontend/plugins/plugin-chart-echarts/package.json
index 3d8de503a2..3bba8cfea3 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/package.json
+++ b/superset-frontend/plugins/plugin-chart-echarts/package.json
@@ -24,6 +24,7 @@
     "lib"
   ],
   "dependencies": {
+    "@types/d3-array": "^3.2.2",
     "@types/react-redux": "^7.1.34",
     "d3-array": "^3.2.4",
     "lodash": "^4.17.23"
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/package.json 
b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
index eb43ea1979..54bb2d7c55 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/package.json
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/package.json
@@ -31,8 +31,7 @@
   "dependencies": {
     "@types/d3-scale": "^4.0.9",
     "d3-cloud": "^1.2.8",
-    "d3-scale": "^3.0.1",
-    "encodable": "^0.7.8"
+    "d3-scale": "^3.0.1"
   },
   "peerDependencies": {
     "@superset-ui/chart-controls": "*",
diff --git 
a/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx 
b/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
index 5818b3e7bc..6d1abedb77 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/chart/WordCloud.tsx
@@ -18,18 +18,15 @@
  */
 import { PureComponent } from 'react';
 import cloudLayout from 'd3-cloud';
-import {
-  PlainObject,
-  createEncoderFactory,
-  DeriveEncoding,
-  Encoder,
-} from 'encodable';
+import { scaleLinear } from 'd3-scale';
 import { seed, CategoricalColorNamespace } from '@superset-ui/core';
 import { SupersetTheme, withTheme } from '@apache-superset/core/ui';
 import { isEqual } from 'lodash';
 
 const seedRandom = seed('superset-ui');
 
+export type PlainObject = Record<string, unknown>;
+
 // Polyfill Word type since it's not exported from 'd3-cloud'
 export type Word = {
   text: string;
@@ -49,15 +46,27 @@ export const ROTATION = {
 
 export type RotationType = keyof typeof ROTATION;
 
-export type WordCloudEncoding = DeriveEncoding<WordCloudEncodingConfig>;
-
-type WordCloudEncodingConfig = {
-  color: ['Color', string];
-  fontFamily: ['Category', string];
-  fontSize: ['Numeric', number];
-  fontWeight: ['Category', string | number];
-  text: ['Text', string];
-};
+/**
+ * Encoding configuration for mapping data fields to visual properties.
+ * Supports field-based mappings with optional scale configurations.
+ */
+export interface WordCloudEncoding {
+  color?: {
+    field?: string;
+    value?: string;
+    scale?: { scheme?: string };
+    type?: string;
+  };
+  fontFamily?: { field?: string; value?: string };
+  fontSize?: {
+    field?: string;
+    value?: number;
+    scale?: { range?: [number, number]; zero?: boolean };
+    type?: string;
+  };
+  fontWeight?: { field?: string; value?: string | number };
+  text?: { field?: string; value?: string };
+}
 
 export interface WordCloudVisualProps {
   encoding?: Partial<WordCloudEncoding>;
@@ -88,38 +97,118 @@ type FullWordCloudProps = WordCloudProps &
 const SCALE_FACTOR_STEP = 0.5;
 const MAX_SCALE_FACTOR = 3;
 const TOP_RESULTS_PERCENTAGE = 0.1;
-class WordCloud extends PureComponent<FullWordCloudProps, WordCloudState> {
-  static defaultProps = defaultProps;
 
-  isComponentMounted = false;
+/**
+ * Simple encoder that maps data fields to visual properties.
+ * Replaces the encodable library with direct field access and d3 scales.
+ */
+class SimpleEncoder {
+  private encoding: WordCloudEncoding;
+
+  private defaults: {
+    color: string;
+    fontFamily: string;
+    fontSize: number;
+    fontWeight: string | number;
+    text: string;
+  };
 
-  wordCloudEncoderFactory = createEncoderFactory<WordCloudEncodingConfig>({
-    channelTypes: {
-      color: 'Color',
-      fontFamily: 'Category',
-      fontSize: 'Numeric',
-      fontWeight: 'Category',
-      text: 'Text',
-    },
-    defaultEncoding: {
-      color: { value: this.props.theme.colorTextLabel },
-      fontFamily: { value: this.props.theme.fontFamily },
-      fontSize: { value: 20 },
-      fontWeight: { value: 'bold' },
-      text: { value: '' },
+  private fontSizeScale: ((value: number) => number) | null = null;
+
+  constructor(
+    encoding: WordCloudEncoding,
+    defaults: {
+      color: string;
+      fontFamily: string;
+      fontSize: number;
+      fontWeight: string | number;
+      text: string;
     },
-  });
+  ) {
+    this.encoding = encoding;
+    this.defaults = defaults;
+  }
 
-  createEncoder = (
-    encoding?: Partial<WordCloudEncoding>,
-  ): Encoder<WordCloudEncodingConfig> => {
-    const selector: (
-      e: Partial<WordCloudEncoding>,
-    ) => Encoder<WordCloudEncodingConfig> =
-      this.wordCloudEncoderFactory.createSelector();
+  /**
+   * Set domain from dataset to configure scales
+   */
+  setDomainFromDataset(data: PlainObject[]): void {
+    const fontSizeConfig = this.encoding.fontSize;
+    if (fontSizeConfig?.field && fontSizeConfig?.scale?.range) {
+      const values = data
+        .map(d => Number(d[fontSizeConfig.field!]) || 0)
+        .filter(v => !Number.isNaN(v));
+
+      if (values.length > 0) {
+        const min = fontSizeConfig.scale.zero ? 0 : Math.min(...values);
+        const max = Math.max(...values);
+        const [rangeMin, rangeMax] = fontSizeConfig.scale.range;
+
+        this.fontSizeScale = scaleLinear()
+          .domain([min, max])
+          .range([rangeMin, rangeMax]);
+      }
+    }
+  }
 
-    return selector(encoding ?? {});
-  };
+  getText(d: PlainObject): string {
+    const config = this.encoding.text;
+    if (config?.field && d[config.field] !== undefined) {
+      return String(d[config.field]);
+    }
+    return config?.value ?? this.defaults.text;
+  }
+
+  getFontSize(d: PlainObject): number {
+    const config = this.encoding.fontSize;
+    if (config?.field && d[config.field] !== undefined) {
+      const value = Number(d[config.field]) || 0;
+      if (this.fontSizeScale) {
+        return this.fontSizeScale(value);
+      }
+      return value || this.defaults.fontSize;
+    }
+    return config?.value ?? this.defaults.fontSize;
+  }
+
+  getColor(d: PlainObject): string {
+    const config = this.encoding.color;
+    if (config?.field && d[config.field] !== undefined) {
+      return String(d[config.field]);
+    }
+    return config?.value ?? this.defaults.color;
+  }
+
+  getFontFamily(d: PlainObject): string {
+    const config = this.encoding.fontFamily;
+    if (config?.field && d[config.field] !== undefined) {
+      return String(d[config.field]);
+    }
+    return config?.value ?? this.defaults.fontFamily;
+  }
+
+  getFontWeight(d: PlainObject): string | number {
+    const config = this.encoding.fontWeight;
+    if (config?.field && d[config.field] !== undefined) {
+      return d[config.field] as string | number;
+    }
+    return config?.value ?? this.defaults.fontWeight;
+  }
+}
+
+class WordCloud extends PureComponent<FullWordCloudProps, WordCloudState> {
+  static defaultProps = defaultProps;
+
+  isComponentMounted = false;
+
+  createEncoder = (encoding?: Partial<WordCloudEncoding>): SimpleEncoder =>
+    new SimpleEncoder(encoding ?? {}, {
+      color: this.props.theme.colorTextLabel,
+      fontFamily: this.props.theme.fontFamily,
+      fontSize: 20,
+      fontWeight: 'bold',
+      text: '',
+    });
 
   constructor(props: FullWordCloudProps) {
     super(props);
@@ -165,9 +254,7 @@ class WordCloud extends PureComponent<FullWordCloudProps, 
WordCloudState> {
     encoder.setDomainFromDataset(data);
 
     const sortedData = [...data].sort(
-      (a, b) =>
-        encoder.channels.fontSize.encodeDatum(b, 0) -
-        encoder.channels.fontSize.encodeDatum(a, 0),
+      (a, b) => encoder.getFontSize(b) - encoder.getFontSize(a),
     );
     const topResultsCount = Math.max(
       sortedData.length * TOP_RESULTS_PERCENTAGE,
@@ -177,15 +264,13 @@ class WordCloud extends PureComponent<FullWordCloudProps, 
WordCloudState> {
 
     this.generateCloud(encoder, 1, (words: Word[]) =>
       topResults.every((d: PlainObject) =>
-        words.find(
-          ({ text }) => encoder.channels.text.getValueFromDatum(d) === text,
-        ),
+        words.find(({ text }) => encoder.getText(d) === text),
       ),
     );
   }
 
   generateCloud(
-    encoder: Encoder<WordCloudEncodingConfig>,
+    encoder: SimpleEncoder,
     scaleFactor: number,
     isValid: (word: Word[]) => boolean,
   ) {
@@ -196,14 +281,10 @@ class WordCloud extends PureComponent<FullWordCloudProps, 
WordCloudState> {
       .words(data.map((d: Word) => ({ ...d })))
       .padding(5)
       .rotate(ROTATION[rotation] || ROTATION.flat)
-      .text((d: PlainObject) => encoder.channels.text.getValueFromDatum(d))
-      .font((d: PlainObject) =>
-        encoder.channels.fontFamily.encodeDatum(d, 
this.props.theme.fontFamily),
-      )
-      .fontWeight((d: PlainObject) =>
-        encoder.channels.fontWeight.encodeDatum(d, 'normal'),
-      )
-      .fontSize((d: PlainObject) => encoder.channels.fontSize.encodeDatum(d, 
0))
+      .text((d: PlainObject) => encoder.getText(d))
+      .font((d: PlainObject) => encoder.getFontFamily(d))
+      .fontWeight((d: PlainObject) => encoder.getFontWeight(d))
+      .fontSize((d: PlainObject) => encoder.getFontSize(d))
       .on('end', (words: Word[]) => {
         if (isValid(words) || scaleFactor > MAX_SCALE_FACTOR) {
           this.setWords(words);
@@ -219,7 +300,6 @@ class WordCloud extends PureComponent<FullWordCloudProps, 
WordCloudState> {
     const { width, height, encoding, sliceId, colorScheme } = this.props;
 
     const encoder = this.createEncoder(encoding);
-    encoder.channels.color.setDomainFromDataset(words);
 
     const colorFn = CategoricalColorNamespace.getScale(colorScheme);
     const viewBoxWidth = width * scaleFactor;
@@ -238,10 +318,7 @@ class WordCloud extends PureComponent<FullWordCloudProps, 
WordCloudState> {
               fontSize={`${w.size}px`}
               fontWeight={w.weight}
               fontFamily={w.font}
-              fill={colorFn(
-                encoder.channels.color.getValueFromDatum(w) as string,
-                sliceId,
-              )}
+              fill={colorFn(encoder.getColor(w as PlainObject), sliceId)}
               textAnchor="middle"
               transform={`translate(${w.x}, ${w.y}) rotate(${w.rotate})`}
             >
diff --git 
a/superset-frontend/plugins/plugin-chart-word-cloud/src/configureEncodable.ts 
b/superset-frontend/plugins/plugin-chart-word-cloud/src/configureEncodable.ts
deleted file mode 100644
index 05a2041286..0000000000
--- 
a/superset-frontend/plugins/plugin-chart-word-cloud/src/configureEncodable.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {
-  Encodable,
-  ColorSchemeResolver,
-  TimeFormatResolver,
-  CategoricalColorScaleResolver,
-  defaultColorSchemeResolver,
-  addPrefix,
-} from 'encodable';
-import {
-  CategoricalColorNamespace,
-  getCategoricalSchemeRegistry,
-  getSequentialSchemeRegistry,
-  getNumberFormatter,
-  getTimeFormatter,
-  LOCAL_PREFIX,
-  getTimeFormatterRegistry,
-} from '@superset-ui/core';
-
-const timeFormat: TimeFormatResolver = ({
-  format,
-  formatInLocalTime = false,
-} = {}) => {
-  const formatString = formatInLocalTime
-    ? addPrefix(
-        LOCAL_PREFIX,
-        format ?? getTimeFormatterRegistry().getDefaultKey()!,
-      )
-    : format;
-
-  return getTimeFormatter(formatString);
-};
-
-const colorSchemeResolver: ColorSchemeResolver = ({
-  name,
-  type = 'categorical',
-} = {}) => {
-  if (type === 'sequential') {
-    const scheme = getSequentialSchemeRegistry().get(name);
-
-    return typeof scheme === 'undefined'
-      ? scheme
-      : { type: 'sequential', ...scheme };
-  }
-  if (type === 'categorical') {
-    const scheme = getCategoricalSchemeRegistry().get(name);
-
-    return typeof scheme === 'undefined'
-      ? scheme
-      : { type: 'categorical', ...scheme };
-  }
-  return defaultColorSchemeResolver({ name, type });
-};
-
-const colorScaleResolver: CategoricalColorScaleResolver = ({
-  name,
-  namespace,
-} = {}) => CategoricalColorNamespace.getScale(name, namespace);
-
-export default function configureEncodable() {
-  Encodable.setNumberFormatResolver(getNumberFormatter)
-    .setTimeFormatResolver(timeFormat)
-    .setColorSchemeResolver(colorSchemeResolver)
-    .setCategoricalColorScaleResolver(colorScaleResolver);
-}
diff --git a/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts 
b/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
index c265e837a4..87bc4ff60b 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/index.ts
@@ -19,4 +19,3 @@
 
 export { default as WordCloudChartPlugin } from './plugin';
 export * from './types';
-export { default as configureEncodable } from './configureEncodable';
diff --git 
a/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts 
b/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
index a8305489dc..c37d27d8cc 100644
--- a/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
+++ b/superset-frontend/plugins/plugin-chart-word-cloud/src/plugin/index.ts
@@ -29,9 +29,6 @@ import example1Dark from '../images/Word_Cloud-dark.jpg';
 import example2 from '../images/Word_Cloud_2.jpg';
 import example2Dark from '../images/Word_Cloud_2-dark.jpg';
 import controlPanel from './controlPanel';
-import configureEncodable from '../configureEncodable';
-
-configureEncodable();
 
 const metadata = new ChartMetadata({
   category: t('Ranking'),


Reply via email to