From 7c492b4888f4124410782d90d4df010e1066ddce Mon Sep 17 00:00:00 2001 From: wadesdev Date: Wed, 18 Mar 2026 10:10:29 -0400 Subject: [PATCH 1/9] package-lock committing for pull --- clients/package-lock.json | 89 +++++++++++++++------------------------ 1 file changed, 35 insertions(+), 54 deletions(-) diff --git a/clients/package-lock.json b/clients/package-lock.json index 36097d49f9f..d9ab6aaba01 100644 --- a/clients/package-lock.json +++ b/clients/package-lock.json @@ -410,7 +410,6 @@ "integrity": "sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@gerrit0/mini-shiki": "^1.24.0", "lunr": "^2.3.9", @@ -447,7 +446,6 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1212,7 +1210,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -1444,7 +1441,6 @@ "integrity": "sha512-heMfJjOfbHvL+wlCAwFZlSxcakyJ5yQDam6e9k2RRArB1veJhRnsjO6lO1hOXjJYrqxfHA/ldIugbBVlCDqfvQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", @@ -1583,7 +1579,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -2402,7 +2397,6 @@ "version": "2.10.6", "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.10.6.tgz", "integrity": "sha512-9cdzcUR3LV3E2as0QhZhHAH5qjbyspV12kU1E1Ibcv6/uKUi6bIfPfMSC6R/Tw8Beqhn2ClJFPqjtXzL+C0knQ==", - "peer": true, "dependencies": { "@chakra-ui/hooks": "2.4.4", "@chakra-ui/styled-system": "2.12.2", @@ -2427,7 +2421,6 @@ "version": "2.12.2", "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.12.2.tgz", "integrity": "sha512-BlQ7i3+GYC0S0c72B+paa0sYo+QeNSMfz6fwQRFsc8A5Aax9i9lSdRL+vwJVC+k6r/0HWfRwk016R2RD2ihEwQ==", - "peer": true, "dependencies": { "@chakra-ui/utils": "2.2.4", "csstype": "^3.1.2" @@ -2641,7 +2634,6 @@ "version": "11.14.0", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2692,7 +2684,6 @@ "version": "11.14.0", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2760,6 +2751,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -2776,6 +2768,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -2792,6 +2785,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -2808,6 +2802,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -2824,6 +2819,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -2840,6 +2836,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -2856,6 +2853,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -2872,6 +2870,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -2888,6 +2887,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2904,6 +2904,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2920,6 +2921,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2936,6 +2938,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2952,6 +2955,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2968,6 +2972,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -2984,6 +2989,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -3000,6 +3006,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -3016,6 +3023,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -3032,6 +3040,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -3048,6 +3057,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -3064,6 +3074,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -3080,6 +3091,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -3113,6 +3125,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -3129,6 +3142,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -3145,6 +3159,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -3161,6 +3176,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -3329,8 +3345,7 @@ "version": "1.5.20", "resolved": "https://registry.npmjs.org/@iabtechlabtcf/core/-/core-1.5.20.tgz", "integrity": "sha512-Z4TH/79/zWPsv8D2rDNbqMDks08f6rmb6XVHMZkYWT9DZlS7XJ+bnNkTiTaDURo/5QNta0/8SkMe8aTiezhjYg==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@ibm/telemetry-js": { "version": "1.9.1", @@ -4283,7 +4298,6 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, - "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -4310,7 +4324,6 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -5556,7 +5569,6 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -6702,7 +6714,6 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -7132,7 +7143,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", - "peer": true, "dependencies": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" @@ -7343,7 +7353,6 @@ "version": "18.3.18", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -7499,7 +7508,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", @@ -7664,7 +7672,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", @@ -8102,7 +8109,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8664,7 +8670,6 @@ "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "license": "MIT", - "peer": true, "bin": { "astring": "bin/astring" } @@ -8975,6 +8980,7 @@ "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "open": "^8.0.4" }, @@ -9127,7 +9133,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -10846,7 +10851,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "peer": true, "engines": { "node": ">=12" } @@ -11024,7 +11028,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -11897,6 +11900,7 @@ "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.3.4" }, @@ -11961,7 +11965,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -12396,7 +12399,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -12514,7 +12516,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, - "peer": true, "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -12592,7 +12593,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", "dev": true, - "peer": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -12625,7 +12625,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -13057,8 +13056,7 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "peer": true + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/esutils": { "version": "2.0.3", @@ -13681,7 +13679,6 @@ "version": "11.18.2", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", - "peer": true, "dependencies": { "motion-dom": "^11.18.1", "motion-utils": "^11.18.1", @@ -14646,7 +14643,6 @@ "version": "9.0.21", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -14655,8 +14651,7 @@ "node_modules/immutable": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", - "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "peer": true + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==" }, "node_modules/import-cwd": { "version": "3.0.0", @@ -15703,7 +15698,6 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -18713,7 +18707,6 @@ "resolved": "https://registry.npmjs.org/next/-/next-14.2.35.tgz", "integrity": "sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==", "license": "MIT", - "peer": true, "dependencies": { "@next/env": "14.2.35", "@swc/helpers": "0.5.5", @@ -20094,7 +20087,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -20745,7 +20737,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -21061,7 +21052,6 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" @@ -21707,7 +21697,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -21839,7 +21828,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -21947,8 +21935,7 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "peer": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-phone-number-input": { "version": "3.4.12", @@ -22315,8 +22302,7 @@ "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "peer": true + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, "node_modules/redux-persist": { "version": "6.0.0", @@ -22618,7 +22604,6 @@ "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -23831,6 +23816,7 @@ "integrity": "sha512-es7uDdEwRVVUAt7XLAZZ1hicOq9r4ov5NFeFPpa2YEyAsyHYOCr0CTlHBfslWG6D5EVNWK3kVIIuW8GHB6hEig==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@testing-library/jest-dom": "^6.6.3", @@ -23867,6 +23853,7 @@ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", @@ -23894,6 +23881,7 @@ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -24541,7 +24529,6 @@ "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -24621,7 +24608,6 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -24685,7 +24671,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -25574,7 +25559,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -26938,7 +26922,6 @@ "version": "19.0.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz", "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -27194,7 +27177,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.0.2.tgz", "integrity": "sha512-xgvB+eJxFIW0HcFmURjOOLhGmbhYVHATKeS+aQd7HeRJI3nYuutqG4eJfBi+I2rFob7E72M3tXJGjv+5XUHLEQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -27204,7 +27186,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.2.tgz", "integrity": "sha512-6N4UcB4mLYRdX3W+z9fIz+2yijW3r7laRQCV+zg8PFCZsy2iVaEQgWy3eLH0NBeQmVyi1PeLzFqXfucqeYghjw==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.25.0" }, From c74b8c1c186c704d37d68cfe92d06a624d125796 Mon Sep 17 00:00:00 2001 From: wadesdev Date: Thu, 14 May 2026 20:43:00 -0400 Subject: [PATCH 2/9] feat(ENG-3832): render multi-select for taxonomy custom fields with [] suffix Update hooks.ts to treat any field_type ending in "[]" as a multi-value array (not just "string[]"), so taxonomy-backed multi-select values are preserved. Update TaxonomyCustomFieldsForm to strip the [] suffix and pass mode="multiple" to CustomTaxonomySelect when the definition uses a "taxonomy[]" field type. Co-Authored-By: Claude Opus 4.6 --- .../admin-ui/src/features/common/custom-fields/hooks.ts | 2 +- .../taxonomy/components/TaxonomyCustomFieldsForm.tsx | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clients/admin-ui/src/features/common/custom-fields/hooks.ts b/clients/admin-ui/src/features/common/custom-fields/hooks.ts index 617b1f1ed1b..e99a15b7fa3 100644 --- a/clients/admin-ui/src/features/common/custom-fields/hooks.ts +++ b/clients/admin-ui/src/features/common/custom-fields/hooks.ts @@ -110,7 +110,7 @@ export const useCustomFields = ({ activeCustomFieldDefinition.forEach((value) => { const customField = definitionIdToCustomField.get(value.id || ""); if (customField) { - if (!!value.allow_list_id && value.field_type === "string[]") { + if (value.field_type.endsWith("[]")) { values[customField.custom_field_definition_id] = customField.value; } else { values[customField.custom_field_definition_id] = diff --git a/clients/admin-ui/src/features/taxonomy/components/TaxonomyCustomFieldsForm.tsx b/clients/admin-ui/src/features/taxonomy/components/TaxonomyCustomFieldsForm.tsx index 4a8a8d92ea0..7d1a34a557d 100644 --- a/clients/admin-ui/src/features/taxonomy/components/TaxonomyCustomFieldsForm.tsx +++ b/clients/admin-ui/src/features/taxonomy/components/TaxonomyCustomFieldsForm.tsx @@ -59,6 +59,11 @@ const TaxonomyCustomFieldsForm = ({ } = customFieldDefinition; if (!allowListId) { + const isMultiSelectTaxonomy = fieldType.endsWith("[]"); + const taxonomyKey = isMultiSelectTaxonomy + ? fieldType.slice(0, -2) + : fieldType; + return ( ) : ( )} From 4b26162ace0aba3a61694bac2e4a3b972ac5ba3f Mon Sep 17 00:00:00 2001 From: wadesdev Date: Thu, 14 May 2026 20:45:51 -0400 Subject: [PATCH 3/9] changelog: add entry for ENG-3832 multi-select taxonomy custom fields (#8197) Co-Authored-By: Claude Opus 4.6 --- changelog/8197-multi-select-taxonomy-custom-fields.yaml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog/8197-multi-select-taxonomy-custom-fields.yaml diff --git a/changelog/8197-multi-select-taxonomy-custom-fields.yaml b/changelog/8197-multi-select-taxonomy-custom-fields.yaml new file mode 100644 index 00000000000..25f8b12f80b --- /dev/null +++ b/changelog/8197-multi-select-taxonomy-custom-fields.yaml @@ -0,0 +1,4 @@ +type: Added +description: Support multi-select taxonomy custom fields via the "taxonomy_key[]" field_type convention — frontend now renders a multi-select dropdown for [] fields on taxonomy detail pages +pr: 8197 +labels: [] From f4b7891313e5075ae91cf73838a90d4ce4cb5f82 Mon Sep 17 00:00:00 2001 From: wadesdev Date: Thu, 14 May 2026 23:40:09 -0400 Subject: [PATCH 4/9] feat(ENG-3832): add selection mode UI for taxonomy custom field definitions Show a "Selection mode" dropdown (single/multiple) in CustomFieldForm when a taxonomy template is selected. Submitting with "multiple" appends "[]" to the field_type sent to the backend. Editing an existing "[]" definition pre-populates the selection mode correctly. Co-Authored-By: Claude Opus 4.6 --- .../custom-fields/CustomFieldForm.tsx | 42 ++++++++++++++++--- .../custom-fields/CustomFieldFormValues.ts | 1 + .../useCreateOrUpdateCustomField.ts | 4 +- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx b/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx index 9b252ace0fb..e85ef268ba7 100644 --- a/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx +++ b/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx @@ -79,6 +79,8 @@ const CustomFieldForm = ({ const [form] = Form.useForm(); const valueType = Form.useWatch("value_type", form); const selectedTemplate = Form.useWatch("template", form); + const isTaxonomyTemplate = + !!selectedTemplate && selectedTemplate !== CUSTOM_TEMPLATE_VALUE; const router = useRouter(); const { resource_type: queryResourceType } = router.query; @@ -185,17 +187,26 @@ const CustomFieldForm = ({ return undefined; } const fieldType = getCustomFieldType(field); - const template = + const isCustomTemplate = fieldType === FieldTypes.OPEN_TEXT || fieldType === FieldTypes.SINGLE_SELECT || - fieldType === FieldTypes.MULTIPLE_SELECT - ? CUSTOM_TEMPLATE_VALUE - : undefined; + fieldType === FieldTypes.MULTIPLE_SELECT; + + // Detect taxonomy multi-select: field_type ends with "[]" and is not a standard type + const isTaxonomyMulti = + !isCustomTemplate && field.field_type.endsWith("[]"); + const taxonomyBaseKey = isTaxonomyMulti + ? field.field_type.slice(0, -2) + : field.field_type; + + const template = isCustomTemplate ? CUSTOM_TEMPLATE_VALUE : taxonomyBaseKey; + return { ...field, - value_type: field.field_type, + value_type: taxonomyBaseKey, template, field_type: fieldType, + selection_mode: isTaxonomyMulti ? "multiple" : "single", resource_type: parseResourceType(field.resource_type), options: allowList?.allowed_values ?? [], }; @@ -256,8 +267,10 @@ const CustomFieldForm = ({ onChange={(value) => { if (value === CUSTOM_TEMPLATE_VALUE) { form.setFieldValue("value_type", undefined); + form.setFieldValue("selection_mode", undefined); } else { form.setFieldValue("value_type", value); + form.setFieldValue("selection_mode", "single"); } }} data-testid="select-template" @@ -277,6 +290,25 @@ const CustomFieldForm = ({ /> + {isTaxonomyTemplate && ( + + { const customTaxonomy = customTaxonomies?.find( (taxonomy) => taxonomy.fides_key === baseFieldType, ); - const label = customTaxonomy?.name ?? getCustomFieldTypeLabel(record); + const label = + customTaxonomy?.name ?? + getCustomFieldTypeLabel({ ...record, field_type: baseFieldType }); return ; }, }, From 4dade3c30e70f43196237ecff82756283b8ddb6d Mon Sep 17 00:00:00 2001 From: wadesdev Date: Fri, 15 May 2026 16:34:04 -0400 Subject: [PATCH 8/9] fix(ENG-3832): address second round code review feedback - Add required validation rule to selection_mode Form.Item - Default selection_mode to "single" in Form initialValues for new fields - Strip selection_mode from OPEN_TEXT and SELECT payloads so it is not sent to the backend on non-taxonomy field types Co-Authored-By: Claude Opus 4.6 --- .../src/features/custom-fields/CustomFieldForm.tsx | 4 +++- .../custom-fields/useCreateOrUpdateCustomField.ts | 10 +++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx b/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx index 26a1a682a5a..77d6cce7f4f 100644 --- a/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx +++ b/clients/admin-ui/src/features/custom-fields/CustomFieldForm.tsx @@ -216,10 +216,11 @@ const CustomFieldForm = ({ const initialValues = queryResourceType ? { + selection_mode: "single" as const, ...defaultInitialValues, resource_type: `taxonomy:${queryResourceType}`, } - : defaultInitialValues; + : { selection_mode: "single" as const, ...defaultInitialValues }; if (isLoading || isAllowListLoading || isLocationsLoading) { return ; @@ -294,6 +295,7 @@ const CustomFieldForm = ({ { ); if (values.field_type === FieldTypes.OPEN_TEXT) { // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { selection_mode: _selectionMode, ...rest } = values; + const { selection_mode: selectionMode, ...rest } = values; const payload = { ...rest, field_type: LegacyAllowedTypes.STRING, @@ -70,7 +70,7 @@ const useCreateOrUpdateCustomField = () => { ) { if (!initialField) { // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { options, selection_mode: _selectionMode, ...rest } = values; + const { options, selection_mode: selectionMode, ...rest } = values; // first create the allow list const allowListPayload = { name: generateNewAllowListName(), @@ -96,7 +96,7 @@ const useCreateOrUpdateCustomField = () => { // update the allow list if it's changed let allowListResult: RTKResult | undefined; // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { options, selection_mode: _selectionMode, ...rest } = values; + const { options, selection_mode: selectionMode, ...rest } = values; if (!isEqual(initialAllowList?.allowed_values, options)) { const allowListPayload = { ...initialAllowList,