diff --git a/ci/package-lock.json b/ci/package-lock.json index 1828a209f0..19c1110d5c 100644 --- a/ci/package-lock.json +++ b/ci/package-lock.json @@ -2,675 +2,640 @@ "requires": true, "lockfileVersion": 1, "dependencies": { - "@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } } } }, "@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "requires": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "tslib": "^2.6.2" } }, "@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "tslib": "^2.6.2" } }, "@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "requires": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } } } }, "@aws-sdk/client-ecs": { - "version": "3.542.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.542.0.tgz", - "integrity": "sha512-lNXoyZGYph3tK0kY6CmY7PpJxPlBIUnv8uE8bL+pUOyaXpBbT+Qnm4+9paUtPsPKSMCSfR1a5osFu122zLU1Xw==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.540.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.540.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.0", - "@smithy/util-defaults-mode-node": "^2.3.0", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "@smithy/util-waiter": "^2.2.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.623.0.tgz", + "integrity": "sha512-3JIgRfxUHrWJtWN/u7+hkvlOVZJw+WtLCAzIPu7Yn1iGTHdFt0xn+4jntE9CNrbEQfSWpguIeqzueA39VWHSIg==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.623.0", + "@aws-sdk/client-sts": "3.623.0", + "@aws-sdk/core": "3.623.0", + "@aws-sdk/credential-provider-node": "3.623.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "@aws-sdk/client-ssm": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.540.0.tgz", - "integrity": "sha512-GcELCPJBcYpd0zPYO+fTKjeRtvufFEM0AMIdeBojNqObFLx9eyjhzJNpykXulE8J3kPvjzXEs88azPGf0PXu5Q==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.540.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/credential-provider-node": "3.540.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.0", - "@smithy/util-defaults-mode-node": "^2.3.0", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "@smithy/util-waiter": "^2.2.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.623.0.tgz", + "integrity": "sha512-f081CIfcmY5F0bcuPUMJTtuJSRJI7kGprYIXWY9ngvdJZcbvp7Xsc7ickM0vzR7M1oxyWFFFz8aXJ4TlzUAGMA==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.623.0", + "@aws-sdk/client-sts": "3.623.0", + "@aws-sdk/core": "3.623.0", + "@aws-sdk/credential-provider-node": "3.623.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "@aws-sdk/client-sso": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.540.0.tgz", - "integrity": "sha512-rrQZMuw4sxIo3eyAUUzPQRA336mPRnrAeSlSdVHBKZD8Fjvoy0lYry2vNhkPLpFZLso1J66KRyuIv4LzRR3v1Q==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.0", - "@smithy/util-defaults-mode-node": "^2.3.0", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.623.0.tgz", + "integrity": "sha512-oEACriysQMnHIVcNp7TD6D1nzgiHfYK0tmMBMbUxgoFuCBkW9g9QYvspHN+S9KgoePfMEXHuPUe9mtG9AH9XeA==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.623.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" } }, "@aws-sdk/client-sso-oidc": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.540.0.tgz", - "integrity": "sha512-LZYK0lBRQK8D8M3Sqc96XiXkAV2v70zhTtF6weyzEpgwxZMfSuFJjs0jFyhaeZBZbZv7BBghIdhJ5TPavNxGMQ==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.540.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.0", - "@smithy/util-defaults-mode-node": "^2.3.0", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.623.0.tgz", + "integrity": "sha512-lMFEXCa6ES/FGV7hpyrppT1PiAkqQb51AbG0zVU3TIgI2IO4XX02uzMUXImRSRqRpGymRCbJCaCs9LtKvS/37Q==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.623.0", + "@aws-sdk/credential-provider-node": "3.623.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" } }, "@aws-sdk/client-sts": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.540.0.tgz", - "integrity": "sha512-ITHUQxvpqfQX6obfpIi3KYGzZYfe/I5Ixjfxoi5lB7ISCtmxqObKB1fzD93wonkMJytJ7LUO8panZl/ojiJ1uw==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.535.0", - "@aws-sdk/middleware-host-header": "3.535.0", - "@aws-sdk/middleware-logger": "3.535.0", - "@aws-sdk/middleware-recursion-detection": "3.535.0", - "@aws-sdk/middleware-user-agent": "3.540.0", - "@aws-sdk/region-config-resolver": "3.535.0", - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@aws-sdk/util-user-agent-browser": "3.535.0", - "@aws-sdk/util-user-agent-node": "3.535.0", - "@smithy/config-resolver": "^2.2.0", - "@smithy/core": "^1.4.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/hash-node": "^2.2.0", - "@smithy/invalid-dependency": "^2.2.0", - "@smithy/middleware-content-length": "^2.2.0", - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.2.0", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-body-length-browser": "^2.2.0", - "@smithy/util-body-length-node": "^2.3.0", - "@smithy/util-defaults-mode-browser": "^2.2.0", - "@smithy/util-defaults-mode-node": "^2.3.0", - "@smithy/util-endpoints": "^1.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.623.0.tgz", + "integrity": "sha512-iJNdx76SOw0YjHAUv8aj3HXzSu3TKI7qSGuR+OGATwA/kpJZDd+4+WYBdGtr8YK+hPrGGqhfecuCkEg805O5iA==", + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.623.0", + "@aws-sdk/core": "3.623.0", + "@aws-sdk/credential-provider-node": "3.623.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" } }, "@aws-sdk/core": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.535.0.tgz", - "integrity": "sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw==", - "requires": { - "@smithy/core": "^1.4.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/signature-v4": "^2.2.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "fast-xml-parser": "4.2.5", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.623.0.tgz", + "integrity": "sha512-8Toq3X6trX/67obSdh4K0MFQY4f132bEbr1i0YPDWk/O3KdBt12mLC/sW3aVRnlIs110XMuX9yrWWqJ8fDW10g==", + "requires": { + "@smithy/core": "^2.3.2", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-env": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz", - "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-http": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz", - "integrity": "sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw==", - "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", + "version": "3.622.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz", + "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==", + "requires": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-ini": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.540.0.tgz", - "integrity": "sha512-igN/RbsnulIBwqXbwsWmR3srqmtbPF1dm+JteGvUY31FW65fTVvWvSr945Y/cf1UbhPmIQXntlsqESqpkhTHwg==", - "requires": { - "@aws-sdk/client-sts": "3.540.0", - "@aws-sdk/credential-provider-env": "3.535.0", - "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.540.0", - "@aws-sdk/credential-provider-web-identity": "3.540.0", - "@aws-sdk/types": "3.535.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.623.0.tgz", + "integrity": "sha512-kvXA1SwGneqGzFwRZNpESitnmaENHGFFuuTvgGwtMe7mzXWuA/LkXdbiHmdyAzOo0iByKTCD8uetuwh3CXy4Pw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.623.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-node": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.540.0.tgz", - "integrity": "sha512-HKQZJbLHlrHX9A0B1poiYNXIIQfy8whTjuosTCYKPDBhhUyVAQfxy/KG726j0v43IhaNPLgTGZCJve4hAsazSw==", - "requires": { - "@aws-sdk/credential-provider-env": "3.535.0", - "@aws-sdk/credential-provider-http": "3.535.0", - "@aws-sdk/credential-provider-ini": "3.540.0", - "@aws-sdk/credential-provider-process": "3.535.0", - "@aws-sdk/credential-provider-sso": "3.540.0", - "@aws-sdk/credential-provider-web-identity": "3.540.0", - "@aws-sdk/types": "3.535.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.623.0.tgz", + "integrity": "sha512-qDwCOkhbu5PfaQHyuQ+h57HEx3+eFhKdtIw7aISziWkGdFrMe07yIBd7TJqGe4nxXnRF1pfkg05xeOlMId997g==", + "requires": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-ini": "3.623.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.623.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-process": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz", - "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==", - "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "requires": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-sso": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.540.0.tgz", - "integrity": "sha512-tKkFqK227LF5ajc5EL6asXS32p3nkofpP8G7NRpU7zOEOQCg01KUc4JRX+ItI0T007CiN1J19yNoFqHLT/SqHg==", - "requires": { - "@aws-sdk/client-sso": "3.540.0", - "@aws-sdk/token-providers": "3.540.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "version": "3.623.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.623.0.tgz", + "integrity": "sha512-70LZhUb3l7cttEsg4A0S4Jq3qrCT/v5Jfyl8F7w1YZJt5zr3oPPcvDJxo/UYckFz4G4/5BhGa99jK8wMlNE9QA==", + "requires": { + "@aws-sdk/client-sso": "3.623.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.540.0.tgz", - "integrity": "sha512-OpDm9w3A168B44hSjpnvECP4rvnFzD86rN4VYdGADuCvEa5uEcdA/JuT5WclFPDqdWEmFBqS1pxBIJBf0g2Q9Q==", + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", "requires": { - "@aws-sdk/client-sts": "3.540.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-host-header": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz", - "integrity": "sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-logger": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz", - "integrity": "sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz", - "integrity": "sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-user-agent": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz", - "integrity": "sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==", - "requires": { - "@aws-sdk/types": "3.535.0", - "@aws-sdk/util-endpoints": "3.540.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz", + "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==", + "requires": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/region-config-resolver": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz", - "integrity": "sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==", - "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "requires": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" } }, "@aws-sdk/token-providers": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.540.0.tgz", - "integrity": "sha512-9BvtiVEZe5Ev88Wa4ZIUbtT6BVcPwhxmVInQ6c12MYNb0WNL54BN6wLy/eknAfF05gpX2/NDU2pUDOyMPdm/+g==", - "requires": { - "@aws-sdk/client-sso-oidc": "3.540.0", - "@aws-sdk/types": "3.535.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "requires": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/types": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", - "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/util-endpoints": { - "version": "3.540.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", - "integrity": "sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", + "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", - "@smithy/util-endpoints": "^1.2.0", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", "tslib": "^2.6.2" } }, "@aws-sdk/util-locate-window": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", - "integrity": "sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "requires": { "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-browser": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", - "integrity": "sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-node": { - "version": "3.535.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz", - "integrity": "sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", "requires": { - "@aws-sdk/types": "3.535.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "requires": { - "tslib": "^2.3.1" - } - }, "@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", - "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", - "requires": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", + "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "requires": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" } }, "@smithy/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.1.tgz", - "integrity": "sha512-jCnbEQHvTOUQXxXOS110FIMc83dCXUlrqiG/q0QzUSYhglDj9bJVPFjXmxc6qUfARe0mEb8h9LeVoh7FUYHuUg==", - "requires": { - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-retry": "^2.3.0", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz", + "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==", + "requires": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" } }, "@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", - "requires": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-codec": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", - "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==", - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", + "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "requires": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "tslib": "^2.6.2" } }, "@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "requires": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "requires": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "@smithy/hash-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", - "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", + "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", "requires": { - "@smithy/types": "^2.12.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + } + } } }, "@smithy/invalid-dependency": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", - "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", + "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, @@ -683,208 +648,237 @@ } }, "@smithy/middleware-content-length": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", - "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", + "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", "requires": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/middleware-endpoint": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.0.tgz", - "integrity": "sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA==", - "requires": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "requires": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" } }, "@smithy/middleware-retry": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.0.tgz", - "integrity": "sha512-5H7kD0My2RkZryvYIWA4C9w6t/pdJfbgEdq+fcZhbnZsqHm/4vYFVjDsOzb5pC7PEpksuijoM9fGbM6eN4rLSg==", - "requires": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz", + "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==", + "requires": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "tslib": "^2.6.2", "uuid": "^9.0.1" } }, "@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "requires": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "requires": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "requires": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "requires": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" } }, "@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", + "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", "requires": { - "@smithy/types": "^2.12.0" + "@smithy/types": "^3.3.0" } }, "@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/signature-v4": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.2.0.tgz", - "integrity": "sha512-+B5TNzj/fRZzVW3z8UUJOkNx15+4E0CLuvJmJUA1JUIZFp3rdJ/M2H5r2SqltaVPXL0oIxv/6YK92T9TsFGbFg==", - "requires": { - "@smithy/eventstream-codec": "^2.2.0", - "@smithy/is-array-buffer": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-uri-escape": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", + "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + } + } } }, "@smithy/smithy-client": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.0.tgz", - "integrity": "sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g==", - "requires": { - "@smithy/middleware-endpoint": "^2.5.0", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz", + "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==", + "requires": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" } }, "@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "requires": { "tslib": "^2.6.2" } }, "@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "requires": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + } + } } }, "@smithy/util-body-length-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", - "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "requires": { "tslib": "^2.6.2" } }, "@smithy/util-body-length-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", - "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "requires": { "tslib": "^2.6.2" } @@ -899,115 +893,153 @@ } }, "@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "requires": { "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.0.tgz", - "integrity": "sha512-2okTdZaCBvOJszAPU/KSvlimMe35zLOKbQpHhamFJmR7t95HSe0K3C92jQPjKY3PmDBD+7iMkOnuW05F5OlF4g==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz", + "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==", "requires": { - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.0.tgz", - "integrity": "sha512-hfKXnNLmsW9cmLb/JXKIvtuO6Cf4SuqN5PN1C2Ru/TBIws+m1wSgb+A53vo0r66xzB6E82inKG2J7qtwdi+Kkw==", - "requires": { - "@smithy/config-resolver": "^2.2.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.0", - "@smithy/types": "^2.12.0", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz", + "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==", + "requires": { + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", + "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", "requires": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "requires": { "tslib": "^2.6.2" } }, "@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "requires": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", + "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", "requires": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, "@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "requires": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "requires": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + } + } } }, "@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "requires": { "tslib": "^2.6.2" } }, "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "requires": { - "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + } + } } }, "@smithy/util-waiter": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.2.0.tgz", - "integrity": "sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", + "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", "requires": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/types": "^2.12.0", + "@smithy/abort-controller": "^3.1.1", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, @@ -1028,9 +1060,9 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, "fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "requires": { "strnum": "^1.0.5" } @@ -1041,9 +1073,9 @@ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "uuid": { "version": "9.0.1", diff --git a/ci/package.json b/ci/package.json index bf66390437..ea434e98bd 100644 --- a/ci/package.json +++ b/ci/package.json @@ -1,8 +1,8 @@ { "private": true, "dependencies": { - "@aws-sdk/client-ecs": "^3.542.0", - "@aws-sdk/client-ssm": "^3.540.0", + "@aws-sdk/client-ecs": "^3.623.0", + "@aws-sdk/client-ssm": "^3.623.0", "dedent": "^0.7.0" }, "devDependencies": { diff --git a/services/drupal/.ddev/docker-compose.localstack.yaml b/services/drupal/.ddev/docker-compose.localstack.yaml index 8a8470e83b..015124f2d8 100644 --- a/services/drupal/.ddev/docker-compose.localstack.yaml +++ b/services/drupal/.ddev/docker-compose.localstack.yaml @@ -2,7 +2,7 @@ version: "3.6" services: localstack: container_name: ddev-${DDEV_SITENAME}-localstack - image: localstack/localstack:0.12.10 + image: localstack/localstack:stable networks: [default, ddev_default] expose: - 4566 diff --git a/services/drupal/.ddev/nginx_full/nginx-site.conf b/services/drupal/.ddev/nginx_full/nginx-site.conf index 584b75d041..00c527c4b7 100644 --- a/services/drupal/.ddev/nginx_full/nginx-site.conf +++ b/services/drupal/.ddev/nginx_full/nginx-site.conf @@ -50,6 +50,28 @@ server { rewrite ^/(.*)$ /index.php?q=$1; } + # On any nginx 404, use this internal path + error_page 404 /_404; + + # Set up nginx's 404 machinery to return fast-404.html anytime nginx process a 404 + location = /_404 { + # Internal means /_404 can't be visited from outside + internal; + + # Return the contents of fast-404.html + root /var/www/html/web/themes/epa_theme/source; + try_files /fast-404.html =404; + } + + location ^~ /newsreleases/search/ { + error_page 410 /_404; + return 410; + } + + location = /newsreleases/search/rss { + rewrite ^/(.*)$ /index.php?$query_string; + } + location = /libraries { rewrite ^/(.*)$ /index.php?$query_string; } diff --git a/services/drupal/Dockerfile b/services/drupal/Dockerfile index 283713d442..f9eb100dfd 100644 --- a/services/drupal/Dockerfile +++ b/services/drupal/Dockerfile @@ -63,6 +63,8 @@ RUN install-php-extensions apcu sockets \ # GNU wget to override BusyBox wget +ARG PHP_ERROR_REPORTING='E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED' + RUN set -ex \ # This construct echoes the configuration lines to the console as well as outputting them # to the ini file that PHP-FPM reads. @@ -70,6 +72,7 @@ RUN set -ex \ echo 'memory_limit=512M'; \ echo 'upload_max_filesize=1G'; \ echo 'post_max_size=1G'; \ + echo "error_reporting=${PHP_ERROR_REPORTING}"; \ } | tee /usr/local/etc/php/php-fpm-fcgi.ini \ # Enable special PHP-FPM status pages: && sed -i \ @@ -277,11 +280,15 @@ RUN install-php-extensions apcu sockets \ # See ENTRYPOINT below tini -# Allow unlimited memory usage when running Drush tasks (ECS will constrain the memory -# instead of PHP) +ARG PHP_ERROR_REPORTING='E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED' + RUN set -ex \ && { \ + # Allow unlimited memory usage when running Drush tasks (ECS will constrain the memory + # instead of PHP) echo 'memory_limit=-1'; \ + # Switch to our custom error_reporting level + echo "error_reporting=${PHP_ERROR_REPORTING}"; \ } | tee /usr/local/etc/php/php-cli.ini # Same as nginx: copy the built Drupal filesystem diff --git a/services/drupal/composer.json b/services/drupal/composer.json index 2372dd776e..ec34d4973c 100644 --- a/services/drupal/composer.json +++ b/services/drupal/composer.json @@ -173,6 +173,8 @@ "drupal/autologout": "^1.3", "drupal/autosave_form": "^1.3", "drupal/block_content_permissions": "^1.8", + "drupal/block_in_page_403": "^2.0", + "drupal/block_in_page_not_found": "^4.2", "drupal/block_list_override": "^1.0", "drupal/ckeditor": "^1.0", "drupal/ckeditor5_dev": "^1.0", @@ -206,7 +208,7 @@ "drupal/embed": "^1.4", "drupal/entity_browser": "^2.9", "drupal/entity_clone": "^2@beta", - "drupal/entity_embed": "1.x-dev", + "drupal/entity_embed": "^1.5", "drupal/entity_usage": "^2.0-beta3", "drupal/entitygroupfield": "^1.0.x-dev", "drupal/environment_indicator": "4.0.10", diff --git a/services/drupal/composer.lock b/services/drupal/composer.lock index 75fe95b044..d64a4ac357 100644 --- a/services/drupal/composer.lock +++ b/services/drupal/composer.lock @@ -2657,6 +2657,96 @@ "issues": "https://www.drupal.org/project/issues/block_content_permissions" } }, + { + "name": "drupal/block_in_page_403", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/block_in_page_403.git", + "reference": "2.0.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/block_in_page_403-2.0.0.zip", + "reference": "2.0.0", + "shasum": "6b01c63dfeb9aed54f45fa84dc344de5b07b9a54" + }, + "require": { + "drupal/core": "^8 || ^9 || ^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "2.0.0", + "datestamp": "1660906126", + "security-coverage": { + "status": "not-covered", + "message": "Project has not opted into security advisory coverage!" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Mohamed Anis Taktak", + "homepage": "https://www.drupal.org/u/matio89" + } + ], + "description": "Provides the ability to place a block in page 403.", + "homepage": "http://drupal.org/project/block_in_page_403", + "support": { + "source": "http://cgit.drupalcode.org/block_in_page_403", + "issues": "https://www.drupal.org/project/issues/block_in_page_403" + } + }, + { + "name": "drupal/block_in_page_not_found", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/block_in_page_not_found.git", + "reference": "8.x-4.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/block_in_page_not_found-8.x-4.2.zip", + "reference": "8.x-4.2", + "shasum": "7cca2e0dd088e6d6e32e3fe7b4454a05831a42fc" + }, + "require": { + "drupal/core": "^8 || ^9 || ^10" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-4.2", + "datestamp": "1660904753", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Mohamed Anis Taktak", + "homepage": "https://www.drupal.org/u/matio89" + } + ], + "description": "Provides the ability to place a block in page 404 or not found.", + "homepage": "http://drupal.org/project/block_in_page_not_found", + "support": { + "source": "http://cgit.drupalcode.org/block_in_page_not_found", + "issues": "https://www.drupal.org/project/issues/block_in_page_not_found" + } + }, { "name": "drupal/block_list_override", "version": "1.0.2", @@ -5178,11 +5268,17 @@ }, { "name": "drupal/entity_embed", - "version": "dev-1.x", + "version": "1.5.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_embed.git", - "reference": "ac6f2fe13b18f5f55c43badd6f46195776e2351c" + "reference": "8.x-1.5" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/entity_embed-8.x-1.5.zip", + "reference": "8.x-1.5", + "shasum": "e74f5fcd5d42e39cda3bd36d7aedcc9fa53585ce" }, "require": { "drupal/core": "^9.5 || ^10", @@ -5194,15 +5290,12 @@ }, "type": "drupal-module", "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, "drupal": { - "version": "8.x-1.4+4-dev", - "datestamp": "1699302299", + "version": "8.x-1.5", + "datestamp": "1699351444", "security-coverage": { - "status": "not-covered", - "message": "Dev releases are not covered by Drupal security advisories." + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, @@ -24185,6 +24278,7 @@ "drupal/entity_clone": 10, "drupal/entity_embed": 20, "drupal/entitygroupfield": 20, + "drupal/fast_404": 15, "drupal/flag": 10, "drupal/focal_point": 15, "drupal/gcontent_moderation": 20, diff --git a/services/drupal/composer.patches.json b/services/drupal/composer.patches.json index c48a5fd494..a13a3d2bde 100644 --- a/services/drupal/composer.patches.json +++ b/services/drupal/composer.patches.json @@ -36,7 +36,9 @@ "PHP message: Error: Call to a member function getEntityTypeId() on null (Layout Builder)": "https://www.drupal.org/files/issues/2023-06-12/3049332-82.diff", "Responsive image width/height values are not used from fallback image style": "https://www.drupal.org/files/issues/2023-08-04/3377420-responsive-image-dimension-fallback-style-9.patch", "CKEditor 5 toolbar items of multi-value field (typically Paragraphs) overflowing on narrow viewports and overlapping with node form's sidebar on wide viewports": "https://www.drupal.org/files/issues/2024-04-09/3332416-79.patch", - "Error: Call to a member function label() on null in Drupal\\menu_link_content\\Form\\MenuLinkContentForm->form() (line 99 of /var/www/html/docroot/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php).": "patches/7228.patch" + "Error: Call to a member function label() on null in Drupal\\menu_link_content\\Form\\MenuLinkContentForm->form() (line 99 of /var/www/html/docroot/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php).": "patches/7228.patch", + "Media Type links in Media Library modal missing vertical tabs styling in Claro": "https://www.drupal.org/files/issues/2024-01-04/missing_variables_in_claro-3404866-41.patch", + "Background colour of UI widgets get overridden on Ajax load.": "https://www.drupal.org/files/issues/2023-08-29/3383631-7_0.patch" }, "drupal/autologout": { "Logout Message not rendering markup" : "patches/logout-message-not-rendering-markup.patch" @@ -228,7 +230,7 @@ "CKEditor5 readiness": "https://git.drupalcode.org/project/filter_html_plus/-/merge_requests/1.diff" }, "drupal/anchor_link": { - "Start a 3.0.x branch for CKEditor Anchor Link for semantic versioning and better integration with Drupal 10, CKEditor 5, and LinkIt" : "https://www.drupal.org/files/issues/2023-04-28/anchor_link-ckeditor5-compatibility-3206676-55.patch" + "Start a 3.0.x branch for CKEditor Anchor Link for semantic versioning and better integration with Drupal 10, CKEditor 5, and LinkIt" : "https://www.drupal.org/files/issues/2023-08-22/anchor_link-ckeditor5-compatibility-3206676-98.patch" }, "drupal/hierarchical_term_formatter": { "Automated Drupal 10 compatibility fixes": "https://git.drupalcode.org/project/hierarchical_term_formatter/-/merge_requests/5.diff" diff --git a/services/drupal/config/sync/block.block.epa_breadcrumbs.yml b/services/drupal/config/sync/block.block.epa_breadcrumbs.yml new file mode 100644 index 0000000000..afd9ce0f6d --- /dev/null +++ b/services/drupal/config/sync/block.block.epa_breadcrumbs.yml @@ -0,0 +1,34 @@ +uuid: 43cea374-f49c-4e47-a84f-6479d36482e1 +langcode: en +status: true +dependencies: + module: + - block_in_page_403 + - block_in_page_not_found + - system + theme: + - epa_theme +id: epa_breadcrumbs +theme: epa_theme +region: title +weight: -21 +provider: null +plugin: system_breadcrumb_block +settings: + id: system_breadcrumb_block + label: Breadcrumbs + label_display: '0' + provider: system +visibility: + request_path: + id: request_path + negate: true + pages: '*404*' + page_403: + id: page_403 + negate: true + page_403: 1 + page_not_found_request: + id: page_not_found_request + negate: true + page_not_found: true diff --git a/services/drupal/config/sync/block.block.epa_claro_page_title.yml b/services/drupal/config/sync/block.block.epa_claro_page_title.yml index 525b5443c9..538e7700e9 100644 --- a/services/drupal/config/sync/block.block.epa_claro_page_title.yml +++ b/services/drupal/config/sync/block.block.epa_claro_page_title.yml @@ -7,7 +7,7 @@ dependencies: id: epa_claro_page_title theme: epa_claro region: header -weight: 0 +weight: -2 provider: null plugin: page_title_block settings: diff --git a/services/drupal/config/sync/block.block.epa_claro_primary_local_tasks.yml b/services/drupal/config/sync/block.block.epa_claro_primary_local_tasks.yml index ce12a7c60b..09d2de2a84 100644 --- a/services/drupal/config/sync/block.block.epa_claro_primary_local_tasks.yml +++ b/services/drupal/config/sync/block.block.epa_claro_primary_local_tasks.yml @@ -7,7 +7,7 @@ dependencies: id: epa_claro_primary_local_tasks theme: epa_claro region: header -weight: 0 +weight: -1 provider: null plugin: local_tasks_block settings: diff --git a/services/drupal/config/sync/block.block.gesso_page_title.yml b/services/drupal/config/sync/block.block.gesso_page_title.yml index cca041f9b8..9b71ccd9ac 100644 --- a/services/drupal/config/sync/block.block.gesso_page_title.yml +++ b/services/drupal/config/sync/block.block.gesso_page_title.yml @@ -9,7 +9,7 @@ _core: id: gesso_page_title theme: epa_theme region: title -weight: -18 +weight: -20 provider: null plugin: page_title_block settings: diff --git a/services/drupal/config/sync/block.block.views_block__internal_alerts_block_1_4.yml b/services/drupal/config/sync/block.block.views_block__internal_alerts_block_1_4.yml index 41c624eae2..f2d2faa896 100644 --- a/services/drupal/config/sync/block.block.views_block__internal_alerts_block_1_4.yml +++ b/services/drupal/config/sync/block.block.views_block__internal_alerts_block_1_4.yml @@ -11,7 +11,7 @@ dependencies: id: views_block__internal_alerts_block_1_4 theme: epa_claro region: header -weight: 0 +weight: -4 provider: null plugin: 'views_block:internal_alerts-block_1' settings: diff --git a/services/drupal/config/sync/block.block.views_block__internal_alerts_block_2_2.yml b/services/drupal/config/sync/block.block.views_block__internal_alerts_block_2_2.yml new file mode 100644 index 0000000000..d9f39dcdfe --- /dev/null +++ b/services/drupal/config/sync/block.block.views_block__internal_alerts_block_2_2.yml @@ -0,0 +1,30 @@ +uuid: 0c0dde08-81e3-4f74-8f5e-b1cbf7bda9fc +langcode: en +status: true +dependencies: + config: + - views.view.internal_alerts + module: + - system + - views + theme: + - epa_claro +id: views_block__internal_alerts_block_2_2 +theme: epa_claro +region: header +weight: -3 +provider: null +plugin: 'views_block:internal_alerts-block_2' +settings: + id: 'views_block:internal_alerts-block_2' + label: '' + label_display: '0' + provider: views + views_label: '' + items_per_page: none + exposed: { } +visibility: + request_path: + id: request_path + negate: false + pages: /admin/content/my-web-areas diff --git a/services/drupal/config/sync/block.block.webareamenu.yml b/services/drupal/config/sync/block.block.webareamenu.yml index dcc01054a0..1c7e24ca8b 100644 --- a/services/drupal/config/sync/block.block.webareamenu.yml +++ b/services/drupal/config/sync/block.block.webareamenu.yml @@ -17,11 +17,11 @@ plugin: 'group_content_menu:web_area_menu' settings: id: 'group_content_menu:web_area_menu' label: 'Web Area Menu' - label_display: '0' + label_display: invisible provider: group_content_menu context_mapping: group: '@group.group_route_context:group' level: 1 depth: 3 - expand_all_items: false + expand_all_items: true visibility: { } diff --git a/services/drupal/config/sync/core.entity_form_display.group.web_area.default.yml b/services/drupal/config/sync/core.entity_form_display.group.web_area.default.yml index c13463b3f7..f80bdcd092 100644 --- a/services/drupal/config/sync/core.entity_form_display.group.web_area.default.yml +++ b/services/drupal/config/sync/core.entity_form_display.group.web_area.default.yml @@ -27,28 +27,28 @@ mode: default content: field_allow_news_releases: type: boolean_checkbox - weight: 11 + weight: 10 region: content settings: display_label: true third_party_settings: { } field_allow_perspectives: type: boolean_checkbox - weight: 12 + weight: 11 region: content settings: display_label: true third_party_settings: { } field_allow_speeches: type: boolean_checkbox - weight: 13 + weight: 12 region: content settings: display_label: true third_party_settings: { } field_contact_us_form: type: entity_reference_autocomplete - weight: 6 + weight: 5 region: content settings: match_operator: CONTAINS @@ -78,7 +78,7 @@ content: third_party_settings: { } field_machine_name: type: string_textfield - weight: 9 + weight: 8 region: content settings: size: 60 @@ -86,17 +86,11 @@ content: third_party_settings: { } field_migration_review_complete: type: boolean_checkbox - weight: 10 + weight: 9 region: content settings: display_label: true third_party_settings: { } - field_navigation_style: - type: options_buttons - weight: 5 - region: content - settings: { } - third_party_settings: { } field_publisher: type: entity_reference_autocomplete weight: 2 @@ -109,14 +103,14 @@ content: third_party_settings: { } field_share_image: type: media_library_widget - weight: 14 + weight: 13 region: content settings: media_types: { } third_party_settings: { } field_web_area_comments: type: string_textarea - weight: 8 + weight: 7 region: content settings: rows: 5 @@ -124,7 +118,7 @@ content: third_party_settings: { } field_web_council_representative: type: entity_reference_autocomplete - weight: 7 + weight: 6 region: content settings: match_operator: CONTAINS @@ -147,7 +141,15 @@ content: settings: include_locked: true third_party_settings: { } + status: + type: boolean_checkbox + weight: 14 + region: content + settings: + display_label: true + third_party_settings: { } hidden: field_homepage_pub_date: true + field_navigation_style: true path: true uid: true diff --git a/services/drupal/config/sync/core.entity_view_display.node.news_release.default.yml b/services/drupal/config/sync/core.entity_view_display.node.news_release.default.yml index 6a395d599f..8bb5b11428 100644 --- a/services/drupal/config/sync/core.entity_view_display.node.news_release.default.yml +++ b/services/drupal/config/sync/core.entity_view_display.node.news_release.default.yml @@ -49,7 +49,7 @@ content: label: above settings: { } third_party_settings: { } - weight: 5 + weight: 6 region: content field_paragraphs: type: entity_reference_revisions_entity_view @@ -99,6 +99,19 @@ content: third_party_settings: { } weight: 0 region: content + field_subjects: + type: epa_core_hierarchical_term_facet_formatter + label: inline + settings: + display: all + link: true + wrap: none + separator: ' | ' + reverse: false + facet_source: news_releases_subjects + third_party_settings: { } + weight: 5 + region: content hidden: content_moderation_control: true entitygroupfield: true @@ -118,7 +131,6 @@ hidden: field_review_deadline: true field_scheduled_transition: true field_search_text: true - field_subjects: true field_type: true langcode: true links: true diff --git a/services/drupal/config/sync/core.entity_view_display.node.perspective.default.yml b/services/drupal/config/sync/core.entity_view_display.node.perspective.default.yml index 0675cb7a98..d70b660974 100644 --- a/services/drupal/config/sync/core.entity_view_display.node.perspective.default.yml +++ b/services/drupal/config/sync/core.entity_view_display.node.perspective.default.yml @@ -130,39 +130,6 @@ third_party_settings: token: '' weight: 8 additional: { } - fd1dcbe7-5e00-4baa-beb4-4413d0187598: - uuid: fd1dcbe7-5e00-4baa-beb4-4413d0187598 - region: content - configuration: - id: 'field_block:node:perspective:field_subjects' - label: 'Related Information' - label_display: visible - provider: layout_builder - context_mapping: - entity: layout_builder.entity - view_mode: view_mode - formatter: - type: token_formatters_entity_reference - label: hidden - settings: - text: 'Read other EPA Perspectives about [term:name]' - link: '' - third_party_settings: - linked_field: - linked: 0 - type: field - destination: - field: '' - custom: '' - advanced: - title: '' - target: '' - class: '' - rel: '' - text: '' - token: '' - weight: 5 - additional: { } 50c7a665-d0e2-448d-9ba4-86a146dd0591: uuid: 50c7a665-d0e2-448d-9ba4-86a146dd0591 region: content diff --git a/services/drupal/config/sync/core.entity_view_display.node.speeches.default.yml b/services/drupal/config/sync/core.entity_view_display.node.speeches.default.yml index 5bbf0885f0..9f94537a17 100644 --- a/services/drupal/config/sync/core.entity_view_display.node.speeches.default.yml +++ b/services/drupal/config/sync/core.entity_view_display.node.speeches.default.yml @@ -37,6 +37,7 @@ dependencies: module: - datetime - entity_reference_revisions + - epa_core - epa_web_areas - link - metatag @@ -244,10 +245,15 @@ content: weight: 28 region: content field_subjects: - type: entity_reference_label - label: above + type: epa_core_hierarchical_term_facet_formatter + label: inline settings: + display: all link: true + wrap: none + separator: ' | ' + reverse: false + facet_source: speeches_subjects third_party_settings: { } weight: 5 region: content diff --git a/services/drupal/config/sync/core.extension.yml b/services/drupal/config/sync/core.extension.yml index d85c5ad230..3bed54b022 100644 --- a/services/drupal/config/sync/core.extension.yml +++ b/services/drupal/config/sync/core.extension.yml @@ -21,6 +21,8 @@ module: block: 0 block_content: 0 block_content_permissions: 0 + block_in_page_403: 0 + block_in_page_not_found: 0 block_list_override: 0 breakpoint: 0 ckeditor: 0 @@ -66,6 +68,7 @@ module: entitygroupfield: 0 environment_indicator: 0 epa_alerts: 0 + epa_breadcrumbs: 0 epa_clone: 0 epa_cloudfront: 0 epa_cloudwatch: 0 diff --git a/services/drupal/config/sync/epa_theme.settings.yml b/services/drupal/config/sync/epa_theme.settings.yml index 203ea2e7dd..bdc3806bea 100644 --- a/services/drupal/config/sync/epa_theme.settings.yml +++ b/services/drupal/config/sync/epa_theme.settings.yml @@ -7,3 +7,4 @@ logo: use_default: 1 favicon: use_default: 1 +include_current_page_in_breadcrumb: 0 diff --git a/services/drupal/config/sync/field.field.block_content.alert.field_type.yml b/services/drupal/config/sync/field.field.block_content.alert.field_type.yml index 74ad553265..6ed13c6786 100644 --- a/services/drupal/config/sync/field.field.block_content.alert.field_type.yml +++ b/services/drupal/config/sync/field.field.block_content.alert.field_type.yml @@ -6,12 +6,7 @@ dependencies: - block_content.type.alert - field.storage.block_content.field_type module: - - custom_add_another - options -third_party_settings: - custom_add_another: - custom_add_another: '' - custom_remove: '' id: block_content.alert.field_type field_name: field_type entity_type: block_content diff --git a/services/drupal/config/sync/field.field.block_content.custom_html.body.yml b/services/drupal/config/sync/field.field.block_content.custom_html.body.yml index 34ef2d3bb6..e645157db7 100644 --- a/services/drupal/config/sync/field.field.block_content.custom_html.body.yml +++ b/services/drupal/config/sync/field.field.block_content.custom_html.body.yml @@ -31,4 +31,5 @@ default_value_callback: '' settings: display_summary: false required_summary: false + allowed_formats: { } field_type: text_with_summary diff --git a/services/drupal/config/sync/field.field.paragraph.locations_of_prop_actions.field_state_or_territory.yml b/services/drupal/config/sync/field.field.paragraph.locations_of_prop_actions.field_state_or_territory.yml index 4107f68e18..7dbe69e313 100644 --- a/services/drupal/config/sync/field.field.paragraph.locations_of_prop_actions.field_state_or_territory.yml +++ b/services/drupal/config/sync/field.field.paragraph.locations_of_prop_actions.field_state_or_territory.yml @@ -16,7 +16,7 @@ id: paragraph.locations_of_prop_actions.field_state_or_territory field_name: field_state_or_territory entity_type: paragraph bundle: locations_of_prop_actions -label: 'Location' +label: Location description: '' required: false translatable: false diff --git a/services/drupal/config/sync/field.storage.block_content.field_type.yml b/services/drupal/config/sync/field.storage.block_content.field_type.yml index ba1c104d98..909f7a6f38 100644 --- a/services/drupal/config/sync/field.storage.block_content.field_type.yml +++ b/services/drupal/config/sync/field.storage.block_content.field_type.yml @@ -20,6 +20,9 @@ settings: - value: internal label: Internal + - + value: internal_system + label: 'Internal - system announcement' - value: warning label: 'Warning (DEPRECATED)' diff --git a/services/drupal/config/sync/language.content_settings.node.event.yml b/services/drupal/config/sync/language.content_settings.node.event.yml new file mode 100644 index 0000000000..4663b1cbe1 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.event.yml @@ -0,0 +1,11 @@ +uuid: 8d292713-2043-4ab7-a3b4-2f79e53a1f0e +langcode: en +status: true +dependencies: + config: + - node.type.event +id: node.event +target_entity_type_id: node +target_bundle: event +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.faq.yml b/services/drupal/config/sync/language.content_settings.node.faq.yml new file mode 100644 index 0000000000..238c9090c9 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.faq.yml @@ -0,0 +1,11 @@ +uuid: 1720e928-b084-4af0-9550-b56018438277 +langcode: en +status: true +dependencies: + config: + - node.type.faq +id: node.faq +target_entity_type_id: node +target_bundle: faq +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.news_release.yml b/services/drupal/config/sync/language.content_settings.node.news_release.yml new file mode 100644 index 0000000000..e0523d8b94 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.news_release.yml @@ -0,0 +1,11 @@ +uuid: e432a95c-402f-49ec-b6f9-8e184dc238c0 +langcode: en +status: true +dependencies: + config: + - node.type.news_release +id: node.news_release +target_entity_type_id: node +target_bundle: news_release +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.page.yml b/services/drupal/config/sync/language.content_settings.node.page.yml new file mode 100644 index 0000000000..7bcaa52a70 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.page.yml @@ -0,0 +1,11 @@ +uuid: 37613ff2-4a63-477a-a383-187b4da0e410 +langcode: en +status: true +dependencies: + config: + - node.type.page +id: node.page +target_entity_type_id: node +target_bundle: page +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.public_notice.yml b/services/drupal/config/sync/language.content_settings.node.public_notice.yml new file mode 100644 index 0000000000..6ec396e454 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.public_notice.yml @@ -0,0 +1,11 @@ +uuid: ee5d4e51-3f65-4b94-8031-03604feaf924 +langcode: en +status: true +dependencies: + config: + - node.type.public_notice +id: node.public_notice +target_entity_type_id: node +target_bundle: public_notice +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.regulation.yml b/services/drupal/config/sync/language.content_settings.node.regulation.yml new file mode 100644 index 0000000000..f2dd4aaad7 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.regulation.yml @@ -0,0 +1,11 @@ +uuid: 03ba8e63-b5da-428e-9b8f-e8ae30d250e0 +langcode: en +status: true +dependencies: + config: + - node.type.regulation +id: node.regulation +target_entity_type_id: node +target_bundle: regulation +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.web_area.yml b/services/drupal/config/sync/language.content_settings.node.web_area.yml new file mode 100644 index 0000000000..e6364a98a3 --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.web_area.yml @@ -0,0 +1,11 @@ +uuid: 662f1c36-59f7-4c36-8659-af96322a0096 +langcode: en +status: true +dependencies: + config: + - node.type.web_area +id: node.web_area +target_entity_type_id: node +target_bundle: web_area +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/language.content_settings.node.webform.yml b/services/drupal/config/sync/language.content_settings.node.webform.yml new file mode 100644 index 0000000000..6d14a0abcd --- /dev/null +++ b/services/drupal/config/sync/language.content_settings.node.webform.yml @@ -0,0 +1,11 @@ +uuid: 61e3cf60-c238-49ca-955b-921cc7e9ce30 +langcode: en +status: true +dependencies: + config: + - node.type.webform +id: node.webform +target_entity_type_id: node +target_bundle: webform +default_langcode: site_default +language_alterable: false diff --git a/services/drupal/config/sync/node.type.event.yml b/services/drupal/config/sync/node.type.event.yml index 561a15a447..73bdbdfb0f 100644 --- a/services/drupal/config/sync/node.type.event.yml +++ b/services/drupal/config/sync/node.type.event.yml @@ -8,9 +8,9 @@ third_party_settings: menu_ui: available_menus: { } parent: '' -name: Event +name: Events type: event -description: '' +description: 'are useful for creating web pages for conferences, webinars and other types of events that have start and end dates and times.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.faq.yml b/services/drupal/config/sync/node.type.faq.yml index 9446bac20c..5a2236b71a 100644 --- a/services/drupal/config/sync/node.type.faq.yml +++ b/services/drupal/config/sync/node.type.faq.yml @@ -10,7 +10,7 @@ third_party_settings: parent: '' name: 'Frequent Question' type: faq -description: '' +description: 'are Question and Answer format pages that are easily searchable and provide a quick response to what users may be looking for.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.news_release.yml b/services/drupal/config/sync/node.type.news_release.yml index 62520f168b..fa664b8eaf 100644 --- a/services/drupal/config/sync/node.type.news_release.yml +++ b/services/drupal/config/sync/node.type.news_release.yml @@ -8,9 +8,9 @@ third_party_settings: menu_ui: available_menus: { } parent: '' -name: 'News Release' +name: 'News Releases' type: news_release -description: '' +description: 'are the Agency’s primary way to release Agency news items.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.page.yml b/services/drupal/config/sync/node.type.page.yml index 7cb1fbca9c..4a4087c1bb 100644 --- a/services/drupal/config/sync/node.type.page.yml +++ b/services/drupal/config/sync/node.type.page.yml @@ -10,7 +10,7 @@ third_party_settings: parent: '' name: 'Basic page' type: page -description: "Use basic pages for your static content, such as an 'About us' page." +description: 'are the most common content type.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.perspective.yml b/services/drupal/config/sync/node.type.perspective.yml index 806a3bcf54..58a976299b 100644 --- a/services/drupal/config/sync/node.type.perspective.yml +++ b/services/drupal/config/sync/node.type.perspective.yml @@ -8,9 +8,9 @@ third_party_settings: menu_ui: available_menus: { } parent: '' -name: Perspective +name: Perspectives type: perspective -description: '' +description: 'are commentaries about environmental and public health topics.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.public_notice.yml b/services/drupal/config/sync/node.type.public_notice.yml index b8f43582fe..38563e4d13 100644 --- a/services/drupal/config/sync/node.type.public_notice.yml +++ b/services/drupal/config/sync/node.type.public_notice.yml @@ -10,7 +10,7 @@ third_party_settings: parent: '' name: 'Public Notice' type: public_notice -description: '' +description: 'present a consistent look and feel across http://epa.gov for all public notices.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.regulation.yml b/services/drupal/config/sync/node.type.regulation.yml index b6f370ef3c..1e23d60975 100644 --- a/services/drupal/config/sync/node.type.regulation.yml +++ b/services/drupal/config/sync/node.type.regulation.yml @@ -10,7 +10,7 @@ third_party_settings: parent: '' name: Regulation type: regulation -description: 'Provide formal or common name for regulation described on page.' +description: 'are a standard layout for providing information about regulations.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.speeches.yml b/services/drupal/config/sync/node.type.speeches.yml index 697e65d0d2..5ca9c19a4a 100644 --- a/services/drupal/config/sync/node.type.speeches.yml +++ b/services/drupal/config/sync/node.type.speeches.yml @@ -10,7 +10,7 @@ third_party_settings: parent: '' name: 'Speeches and Remarks' type: speeches -description: '' +description: 'are versions of Administrator speeches, as prepared for delivery.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.web_area.yml b/services/drupal/config/sync/node.type.web_area.yml index 516653db18..1f2784f5a1 100644 --- a/services/drupal/config/sync/node.type.web_area.yml +++ b/services/drupal/config/sync/node.type.web_area.yml @@ -10,7 +10,7 @@ third_party_settings: parent: '' name: 'Web Area Homepage' type: web_area -description: 'The Web Area Homepage content type is intended to be used to provide the homepage for the Microsite or Resource Directory being created.' +description: 'are landing pages for the web area and help the user navigate to their desired content inside the web area. You can have one home page and multiple landing pages.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/node.type.webform.yml b/services/drupal/config/sync/node.type.webform.yml index 5f63728e3d..7257ccc12c 100644 --- a/services/drupal/config/sync/node.type.webform.yml +++ b/services/drupal/config/sync/node.type.webform.yml @@ -13,7 +13,7 @@ third_party_settings: parent: '' name: Form type: webform -description: 'Create a new form or questionnaire accessible to users. Submission results and statistics are recorded and accessible to privileged users.' +description: 'are a content type that have a Webform attached to them. Webforms can include form elements that allow your audience to send information to you. Contact us forms are an example of this content type.' help: '' new_revision: true preview_mode: 0 diff --git a/services/drupal/config/sync/views.view.files.yml b/services/drupal/config/sync/views.view.files.yml index 0e8442f1f0..09f5cb4f1c 100644 --- a/services/drupal/config/sync/views.view.files.yml +++ b/services/drupal/config/sync/views.view.files.yml @@ -1257,7 +1257,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.glossary.yml b/services/drupal/config/sync/views.view.glossary.yml index a0a53baf99..d5226e6b0e 100644 --- a/services/drupal/config/sync/views.view.glossary.yml +++ b/services/drupal/config/sync/views.view.glossary.yml @@ -248,7 +248,6 @@ display: default_argument_type: fixed default_argument_options: argument: a - default_argument_skip_url: false summary_options: { } summary: format: default_summary @@ -415,7 +414,6 @@ display: default_argument_type: fixed default_argument_options: argument: a - default_argument_skip_url: false summary_options: items_per_page: 25 inline: true diff --git a/services/drupal/config/sync/views.view.group_media.yml b/services/drupal/config/sync/views.view.group_media.yml index 18597aeeb7..cf551f092e 100644 --- a/services/drupal/config/sync/views.view.group_media.yml +++ b/services/drupal/config/sync/views.view.group_media.yml @@ -755,7 +755,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.group_media_search_api.yml b/services/drupal/config/sync/views.view.group_media_search_api.yml index 449e11582f..14dae6214a 100644 --- a/services/drupal/config/sync/views.view.group_media_search_api.yml +++ b/services/drupal/config/sync/views.view.group_media_search_api.yml @@ -736,7 +736,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: { } summary: sort_order: asc diff --git a/services/drupal/config/sync/views.view.group_members.yml b/services/drupal/config/sync/views.view.group_members.yml index 0c12e01aac..49840c877d 100644 --- a/services/drupal/config/sync/views.view.group_members.yml +++ b/services/drupal/config/sync/views.view.group_members.yml @@ -658,7 +658,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.group_moderated_content.yml b/services/drupal/config/sync/views.view.group_moderated_content.yml index 81a2ea6f3d..01b3ce3210 100644 --- a/services/drupal/config/sync/views.view.group_moderated_content.yml +++ b/services/drupal/config/sync/views.view.group_moderated_content.yml @@ -867,7 +867,6 @@ display: title: '{{ arguments.gid|placeholder }} content' default_argument_type: group_id_from_url default_argument_options: { } - default_argument_skip_url: false summary_options: base_path: '' count: true @@ -1959,6 +1958,15 @@ display: date_format: short custom_date_format: '' timezone: '' + tooltip: + date_format: '' + custom_date_format: '' + time_diff: + enabled: false + future_format: '@interval hence' + past_format: '@interval ago' + granularity: 2 + refresh: 60 group_column: value group_columns: { } group_rows: true @@ -2232,7 +2240,6 @@ display: title: '' default_argument_type: group_id_from_url default_argument_options: { } - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.group_nodes.yml b/services/drupal/config/sync/views.view.group_nodes.yml index 71ea4960a8..324429406c 100644 --- a/services/drupal/config/sync/views.view.group_nodes.yml +++ b/services/drupal/config/sync/views.view.group_nodes.yml @@ -621,7 +621,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: base_path: '' count: true @@ -1973,7 +1972,6 @@ display: title: '{{ arguments.gid|placeholder }} content' default_argument_type: group_id_from_url default_argument_options: { } - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.group_paragraphs_library.yml b/services/drupal/config/sync/views.view.group_paragraphs_library.yml index 262f3182a7..e96b47a936 100644 --- a/services/drupal/config/sync/views.view.group_paragraphs_library.yml +++ b/services/drupal/config/sync/views.view.group_paragraphs_library.yml @@ -605,7 +605,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.internal_alerts.yml b/services/drupal/config/sync/views.view.internal_alerts.yml index 613af205a6..9d83347d5a 100644 --- a/services/drupal/config/sync/views.view.internal_alerts.yml +++ b/services/drupal/config/sync/views.view.internal_alerts.yml @@ -326,10 +326,194 @@ display: - 'config:field.storage.block_content.field_formatted_long_text' block_1: id: block_1 - display_title: Block + display_title: 'Internal alerts block' display_plugin: block position: 1 display_options: + display_description: '' + display_extenders: + views_ajax_get: + ajax_get: false + block_hide_empty: true + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - user.roles + tags: + - 'config:field.storage.block_content.field_formatted_long_text' + block_2: + id: block_2 + display_title: 'Internal - system announcements alerts block' + display_plugin: block + position: 1 + display_options: + filters: + status: + id: status + table: block_content_field_data + field: status + entity_type: block_content + entity_field: status + plugin_id: boolean + value: '1' + group: 1 + expose: + operator: '' + operator_limit_selection: false + operator_list: { } + type: + id: type + table: block_content_field_data + field: type + entity_type: block_content + entity_field: type + plugin_id: bundle + value: + alert: alert + expose: + operator_limit_selection: false + operator_list: { } + field_date_range_value: + id: field_date_range_value + table: block_content__field_date_range + field: field_date_range_value + relationship: none + group_type: group + admin_label: '' + plugin_id: datetime + operator: '<=' + value: + min: '' + max: '' + value: now + type: offset + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + min_placeholder: '' + max_placeholder: '' + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + field_date_range_end_value: + id: field_date_range_end_value + table: block_content__field_date_range + field: field_date_range_end_value + relationship: none + group_type: group + admin_label: '' + plugin_id: datetime + operator: '>=' + value: + min: '' + max: '' + value: now + type: offset + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + min_placeholder: '' + max_placeholder: '' + placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + field_type_value: + id: field_type_value + table: block_content__field_type + field: field_type_value + relationship: none + group_type: group + admin_label: '' + plugin_id: list_field + operator: or + value: + internal_system: internal_system + group: 1 + exposed: false + expose: + operator_id: '' + label: '' + description: '' + use_operator: false + operator: '' + operator_limit_selection: false + operator_list: { } + identifier: '' + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + reduce: false + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + reduce_duplicates: false + filter_groups: + operator: AND + groups: + 1: AND + defaults: + filters: false + filter_groups: false + display_description: '' display_extenders: views_ajax_get: ajax_get: false diff --git a/services/drupal/config/sync/views.view.media_library.yml b/services/drupal/config/sync/views.view.media_library.yml index 8236ef878d..b6df14635d 100644 --- a/services/drupal/config/sync/views.view.media_library.yml +++ b/services/drupal/config/sync/views.view.media_library.yml @@ -703,7 +703,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: { } summary: sort_order: asc @@ -1330,7 +1329,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: { } summary: sort_order: asc diff --git a/services/drupal/config/sync/views.view.my_groups.yml b/services/drupal/config/sync/views.view.my_groups.yml index c62755d90a..bd4135a9e9 100644 --- a/services/drupal/config/sync/views.view.my_groups.yml +++ b/services/drupal/config/sync/views.view.my_groups.yml @@ -171,7 +171,6 @@ display: title: '' default_argument_type: current_user default_argument_options: { } - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/config/sync/views.view.search_perspectives.yml b/services/drupal/config/sync/views.view.search_perspectives.yml index d74ccee6f5..dc7670c52f 100644 --- a/services/drupal/config/sync/views.view.search_perspectives.yml +++ b/services/drupal/config/sync/views.view.search_perspectives.yml @@ -589,7 +589,7 @@ display: exposed: true expose: operator_id: search_api_fulltext_op - label: '' + label: Search description: '' use_operator: false operator: search_api_fulltext_op @@ -673,6 +673,7 @@ display: - 'config:field.storage.node.field_publish_date' - 'config:field.storage.paragraph.field_author' - 'config:search_api.index.perspectives' + - 'search_api_list:perspectives' feed_1: id: feed_1 display_title: Feed @@ -721,6 +722,7 @@ display: - 'config:field.storage.node.field_publish_date' - 'config:field.storage.paragraph.field_author' - 'config:search_api.index.perspectives' + - 'search_api_list:perspectives' page_1: id: page_1 display_title: Page @@ -815,3 +817,4 @@ display: - 'config:field.storage.node.field_publish_date' - 'config:field.storage.paragraph.field_author' - 'config:search_api.index.perspectives' + - 'search_api_list:perspectives' diff --git a/services/drupal/config/sync/views.view.taxonomy_term.yml b/services/drupal/config/sync/views.view.taxonomy_term.yml index 7fa117470a..e3f41fcb30 100644 --- a/services/drupal/config/sync/views.view.taxonomy_term.yml +++ b/services/drupal/config/sync/views.view.taxonomy_term.yml @@ -110,7 +110,6 @@ display: default_argument_type: fixed default_argument_options: argument: '' - default_argument_skip_url: false summary_options: base_path: '' count: true diff --git a/services/drupal/default.conf b/services/drupal/default.conf index 2b8bc73f77..8b20688b32 100644 --- a/services/drupal/default.conf +++ b/services/drupal/default.conf @@ -60,6 +60,27 @@ server { try_files /fast-404.html =404; } + # These paths are exceptions to the search 410s that we have listed below. + location = /newsreleases/search/rss { + rewrite ^/(.*)$ /index.php?$query_string; + } + + location = /faqs/search/rss { + rewrite ^/(.*)$ /index.php?$query_string; + } + + location = /publicnotices/notices-search/rss { + rewrite ^/(.*)$ /index.php?$query_string; + } + + location = /perspectives/search/rss { + rewrite ^/(.*)$ /index.php?$query_string; + } + + location = /speeches/search/rss { + rewrite ^/(.*)$ /index.php?$query_string; + } + # For each listed path, return HTTP 410 Gone, using our 404 template instead: # users will see a "page not found" page, but code will see a "this page will # never return" status code. Hopefully this will defray some of the ongoing diff --git a/services/drupal/web/modules/custom/epa_breadcrumbs/epa_breadcrumbs.info.yml b/services/drupal/web/modules/custom/epa_breadcrumbs/epa_breadcrumbs.info.yml new file mode 100644 index 0000000000..55b9e59caa --- /dev/null +++ b/services/drupal/web/modules/custom/epa_breadcrumbs/epa_breadcrumbs.info.yml @@ -0,0 +1,8 @@ +name: 'EPA Breadcrumbs' +description: Provides custom breadcrumb builder for EPA.gov. +type: module +core_version_requirement: ^8 || ^9 || ^10 +package: EPA +dependencies: + - drupal:menu_ui + - group:group diff --git a/services/drupal/web/modules/custom/epa_breadcrumbs/epa_breadcrumbs.services.yml b/services/drupal/web/modules/custom/epa_breadcrumbs/epa_breadcrumbs.services.yml new file mode 100644 index 0000000000..1724c9bba7 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_breadcrumbs/epa_breadcrumbs.services.yml @@ -0,0 +1,9 @@ +services: + epa_breadcrumbs.breadcrumb.default: + class: Drupal\epa_breadcrumbs\GroupMenuBasedBreadcrumbBuilder + arguments: [ '@config.factory', '@menu.active_trail', '@plugin.manager.menu.link', '@router.admin_context', '@title_resolver', '@request_stack', '@language_manager', '@entity_type.manager', '@cache.menu', '@lock' ] + tags: + # Following example set by menu_breadcrumb module: + # The priority must be higher than core taxonomy builder (priority: 1002) + # see https://www.drupal.org/node/1495510 + - { name: breadcrumb_builder, priority: 1020 } diff --git a/services/drupal/web/modules/custom/epa_breadcrumbs/src/GroupMenuBasedBreadcrumbBuilder.php b/services/drupal/web/modules/custom/epa_breadcrumbs/src/GroupMenuBasedBreadcrumbBuilder.php new file mode 100644 index 0000000000..1d7518a3be --- /dev/null +++ b/services/drupal/web/modules/custom/epa_breadcrumbs/src/GroupMenuBasedBreadcrumbBuilder.php @@ -0,0 +1,384 @@ +configFactory = $config_factory; + $this->menuActiveTrail = $menu_active_trail; + $this->menuLinkManager = $menu_link_manager; + $this->adminContext = $admin_context; + $this->titleResolver = $title_resolver; + $this->currentRequest = $request_stack->getCurrentRequest(); + $this->languageManager = $language_manager; + $this->entityTypeManager = $entity_type_manager; + $this->cacheMenu = $cache_menu; + $this->lock = $lock; + } + + /** + * {@inheritdoc} + */ + public function applies(RouteMatchInterface $route_match) { + + // Don't breadcrumb the admin pages: + if ( $this->adminContext->isAdminRoute($route_match->getRouteObject())) { + return FALSE; + } + + // No route name means no active trail: + $route_name = $route_match->getRouteName(); + if (!$route_name) { + return FALSE; + } + + $node_object = $route_match->getParameters()->get('node'); + + if ($node_object == NULL) { + return FALSE; + } + + // Make sure menus are selected, and breadcrumb text strings, are displayed + // in the content rather than the (default) interface language: + $this->contentLanguage = $this->languageManager + ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + + // Get the group from the current node. + $group_content = GroupContent::loadByEntity($node_object); + + if (!empty($group_content)) { + $group_content = reset($group_content); + } + else { + // No group content, no menu. + return FALSE; + } + + $group = $group_content->getGroup(); + $menus = group_content_menu_get_menus_per_group($group); + $menu = reset($menus); + $menu_id = GroupContentMenuInterface::MENU_PREFIX . $menu->id(); + + if ($menu_id) { + $this->menuTrail = []; + $trail_ids = $this->menuActiveTrail->getActiveTrailIds($menu_id); + + $trail_ids = array_filter($trail_ids); + if ($trail_ids) { + $this->menuTrail = $trail_ids; + } + + $this->menuName = $menu_id; + $this->group = $group; + return TRUE; + } + + // No more menus to check... + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function build(RouteMatchInterface $route_match) { + $breadcrumb = new Breadcrumb(); + // Breadcrumbs accumulate in this array, with lowest index being the root + // (i.e., the reverse of the assigned breadcrumb trail): + $links = []; + // (https://www.drupal.org/docs/develop/standards/coding-standards#array) + // + if ($this->languageManager->isMultilingual()) { + $breadcrumb->addCacheContexts(['languages:language_content']); + } + + // Changing the page will invalidate any breadcrumb generated here: + $site_config = $this->configFactory->get('system.site'); + $breadcrumb->addCacheableDependency($site_config); + + + // Add contexts for all of the menu and the current path. + $breadcrumb->addCacheContexts(['route.menu_active_trails:' . $this->menuName]); + $breadcrumb->addCacheContexts(['url.path']); + + // Generate basic breadcrumb trail from active trail. + // Keep same link ordering as Menu Breadcrumb (so also reverses menu trail) + foreach (array_reverse($this->menuTrail) as $id) { + $plugin = $this->menuLinkManager->createInstance($id); + + // Skip items that have an empty URL. + if (empty($plugin->getUrlObject()->toString())) { + continue; + } + + // Skip items that are disabled in the menu. + if (!$plugin->isEnabled()) { + continue; + } + + // Add cachability dependency to the group itself. + $breadcrumb->addCacheableDependency($this->group); + + $links[] = Link::fromTextAndUrl($plugin->getTitle(), $plugin->getUrlObject()); + $breadcrumb->addCacheableDependency($plugin); + // In the last line, MenuLinkContent plugin is not providing cache tags. + // Until this is fixed in core add the tags here: + if ($plugin instanceof MenuLinkContent) { + $uuid = $plugin->getDerivativeId(); + $entities = $this->entityTypeManager->getStorage('menu_link_content')->loadByProperties(['uuid' => $uuid]); + if ($entity = reset($entities)) { + $breadcrumb->addCacheableDependency($entity); + } + } + } + + // Create a breadcrumb for the Web Area's homepage if it's published. + /** @var \Drupal\node\Entity\Node $web_area_home */ + $web_area_home = $this->group->get('field_homepage')->entity; + $node = $this->currentRequest->get('node'); + if ($web_area_home) { + if ($node && $node->bundle() === 'news_release') { + // Add the news release search page instead of the web area homepage for News Release nodes. + $links[] = Link::createFromRoute(t('News Releases'), 'view.search_news_releases.page_1'); + } + else { + $breadcrumb->addCacheableDependency($web_area_home); + if ($web_area_home->isPublished()) { + $web_area_home_link = Link::createFromRoute($this->group->label(), $web_area_home->toUrl()->getRouteName(), $web_area_home->toUrl()->getRouteParameters()); + array_unshift($links, $web_area_home_link); + } + } + } + + // Create a breadcrumb for . + $langcode = $this->contentLanguage; + $label = $this->t('Home', [], ['langcode' => $langcode]); + $home_link = Link::createFromRoute($label, ''); + + // Add home link to the beginning of the breadcrumb trail. + array_unshift($links, $home_link); + + /** @var \Drupal\Core\Link $last */ + $last = end($links); + // Check if the last link is the current URL. If so, remove. + if ($last->getUrl()->toString() == Url::fromRoute('')->toString()) { + array_pop($links); + } + + // Per https://forumone.atlassian.net/browse/EPAD8-2411 we want to limit the + // breadcrumbs to a max of 5 (Home -> Web Area Homepage -> Parent -> Child -> Grand Child) + if (count($links) > 5) { + array_splice($links, 5); + } + + return $breadcrumb->setLinks($links); + } + + /** + * The getter function for $menuName property. + * + * @return string + * The menu name. + */ + public function getMenuName() { + return $this->menuName; + } + + /** + * The setter function for $menuName property. + * + * @param string $menu_name + * The menu name. + */ + public function setMenuName($menu_name) { + $this->menuName = $menu_name; + } + + /** + * The getter function for $menuTrail property. + * + * @return string + * The menu trail. + */ + public function getMenuTrail() { + return $this->menuTrail; + } + + /** + * The setter function for $menuTrail property. + * + * @param string $menu_trail + * The menu trail. + */ + public function setMenuTrail($menu_trail) { + $this->menuTrail = $menu_trail; + } + + /** + * The getter function for $contentLanguage property. + * + * @return string + * The content language. + */ + public function getContentLanguage() { + return $this->contentLanguage; + } + + /** + * The setter function for $contentLanguage property. + * + * @param string $contentLanguage + * The content language. + */ + public function setContentLanguage($contentLanguage) { + $this->contentLanguage = $contentLanguage; + } + +} diff --git a/services/drupal/web/modules/custom/epa_core/epa_core.services.yml b/services/drupal/web/modules/custom/epa_core/epa_core.services.yml index bc399bf83c..964085446d 100644 --- a/services/drupal/web/modules/custom/epa_core/epa_core.services.yml +++ b/services/drupal/web/modules/custom/epa_core/epa_core.services.yml @@ -11,6 +11,15 @@ services: arguments: ['@config.factory'] tags: - { name: event_subscriber } + epa_core.route_subscriber: + class: Drupal\epa_core\Routing\RouteSubscriber + tags: + - { name: event_subscriber } + epa_core.webform_access_check: + class: Drupal\epa_core\Access\EpaWebformAccessCheck + arguments: ['@group.membership_loader', '@entity_type.manager'] + tags: + - { name: access_check, applies_to: _epa_webform_access_check } entity.autocomplete_matcher: class: Drupal\epa_core\Entity\EntityAutocompleteMatcher arguments: [ '@plugin.manager.entity_reference_selection' ] diff --git a/services/drupal/web/modules/custom/epa_core/src/Access/EpaWebformAccessCheck.php b/services/drupal/web/modules/custom/epa_core/src/Access/EpaWebformAccessCheck.php new file mode 100644 index 0000000000..fa654b1075 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_core/src/Access/EpaWebformAccessCheck.php @@ -0,0 +1,108 @@ +groupMembershipLoader = $group_membership_loader; + $this->entityTypeManager = $entity_type_manager; + } + + public function access(RouteMatchInterface $route_match, AccountInterface $account) { + // Allow access if the user is an administrator or system_webmaster. + if ($account->hasRole('administrator') || $account->hasRole('system_webmaster')) { + return AccessResult::allowed(); + } + + // User must belong to a group if they don't have the above roles + $group_memberships = $this->groupMembershipLoader->loadByUser($account); + + if (empty($group_memberships)) { + return AccessResultForbidden::forbidden('A user must belong to a group to view submissions.'); + } + + // Collect group IDs from user's memberships. + $group_ids = array_map(fn($membership) => $membership->getGroup()->id(), $group_memberships); + + // Webforms themselves aren't tied to a Group, but they are referenced + // by a "Form" node. The "Form" node does belong to a Group. + // Given the Webform ID, search for a matching node that references the webform. + // If we find one, compare the node's group to see if the user belongs + // to same group. + /** @var \Drupal\webform\Entity\Webform $webform */ + $webform = $route_match->getParameter("webform"); + $webform_id = $webform->id(); + + // Add webform nodes ("form") have a "webform" field that contains the reference + // to the webform. Query to see if we can find the + $found = $this->entityTypeManager + ->getStorage('node') + ->getQuery() + ->accessCheck() + ->condition('webform', $webform_id) + ->execute(); + + // Every webform should be associated with a node. If not then don't proceed. + if (!$found) { + return AccessResult::forbidden(); + } + + $id = reset($found); + + // Load the node and its group content. + $node = Node::load($id); + /** @var \Drupal\group\Entity\GroupContent $gc */ + $gc = GroupContent::loadByEntity($node); + + if (empty($gc)) { + return AccessResult::forbidden("Cannot view content that does not belong to a web area."); + } + + $group_content = reset($gc); + + if (!$group_content || !in_array($group_content->getGroup()->id(), $group_ids)) { + return AccessResultForbidden::forbidden('User does not belong to the same group as this webform.'); + } + + return AccessResult::allowed(); + } + +} diff --git a/services/drupal/web/modules/custom/epa_core/src/Routing/RouteSubscriber.php b/services/drupal/web/modules/custom/epa_core/src/Routing/RouteSubscriber.php new file mode 100644 index 0000000000..98398187d8 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_core/src/Routing/RouteSubscriber.php @@ -0,0 +1,20 @@ +get('entity.webform.results_submissions'); + if ($route) { + $route->setRequirement('_epa_webform_access_check', TRUE); + } + } + +} diff --git a/services/drupal/web/modules/custom/epa_web_areas/css/add-content-message.css b/services/drupal/web/modules/custom/epa_web_areas/css/add-content-message.css new file mode 100644 index 0000000000..35b9d49901 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_web_areas/css/add-content-message.css @@ -0,0 +1,3 @@ +.epa-web-areas-custom-message .messages__content { + margin-inline-start: 0; +} diff --git a/services/drupal/web/modules/custom/epa_web_areas/css/admin-group-node-add.css b/services/drupal/web/modules/custom/epa_web_areas/css/admin-group-node-add.css new file mode 100644 index 0000000000..7994749b4d --- /dev/null +++ b/services/drupal/web/modules/custom/epa_web_areas/css/admin-group-node-add.css @@ -0,0 +1 @@ +.admin-item__title, .admin-item__description { display: inline; } diff --git a/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.libraries.yml b/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.libraries.yml new file mode 100644 index 0000000000..4479fa3b94 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.libraries.yml @@ -0,0 +1,11 @@ +group_node.add: + version: VERSION + css: + theme: + css/admin-group-node-add.css: {} + +custom_message: + version: VERSION + css: + theme: + css/add-content-message.css: { } diff --git a/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.module b/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.module index cb79fcbdb6..3b3bab15f9 100644 --- a/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.module +++ b/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.module @@ -11,6 +11,7 @@ use Drupal\Core\Access\AccessResult; use Drupal\Core\Entity\EntityForm; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Render\Markup; use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\group\Entity\Group; @@ -39,12 +40,6 @@ function epa_web_areas_form_node_form_alter(&$form, FormStateInterface $form_sta $group = $form_state->getStorage()['group']; } - // Set access to hublinks for Web Area homepage. - if (isset($form['field_hublinks'])) { - $has_hublinks = !empty($group) ? \Drupal::service('epa_web_areas.web_areas_helper')->checkNavigationStyle($group) : FALSE; - $form['field_hublinks']['#access'] = $has_hublinks; - } - // Add group label to form. if (!empty($group)) { $form['group_info']['#markup'] = 'Web Area: ' . $group->toLink(NULL, 'canonical', ['attributes' => ['target' => '_blank']])->toString(); @@ -76,30 +71,6 @@ function epa_web_areas_form_group_web_area_edit_form_alter(&$form, FormStateInte } } -/** - * Implements hook_block_access(). - * - * - Used to hide sidebar menu if content belongs to group using hublinks - * as its naviagtion style. - */ -function epa_web_areas_block_access(Block $block, $operation, AccountInterface $account) { - if ($operation == 'view' && $block->getPluginId() == 'groupmenus') { - $node = \Drupal::routeMatch()->getParameter('node'); - if ($node) { - $group_contents = GroupContent::loadByEntity($node); - foreach ($group_contents as $group_content) { - $group = $group_content->getGroup(); - } - } - else { - $group = \Drupal::routeMatch()->getParameter('group'); - } - $has_hublinks = !empty($group) ? \Drupal::service('epa_web_areas.web_areas_helper')->checkNavigationStyle($group) : TRUE; - return AccessResult::forbiddenIf($has_hublinks)->addCacheableDependency($block); - } - return AccessResult::neutral(); -} - /** * Implements hook_entity_type_alter(). */ @@ -202,6 +173,25 @@ function epa_web_areas_form_media_library_add_form_alter(&$form, FormStateInterf * Implements hook_form_FORM_ID_alter(). */ function epa_web_areas_form_embedded_paragraphs_paragraphs_entity_embed_form_alter(&$form, FormStateInterface $form_state, $form_id) { + // Add custom help text describing each paragraph item. + // @link https://forumone.atlassian.net/browse/EPAD8-2509 + $items = [ + Markup::create('Before/After Swipe: compare two images side-by-side'), + Markup::create('Boxes highlight specific web content. Each box style has specific content requirements'), + Markup::create('Dynamic Lists are automated lists of WebCMS content based on filters'), + Markup::create('From Library can be used to add "reusable paragraphs," which can be embedded on multiple pages'), + 'Add Header adds headings like h2, h3, etc.', + Markup::create('Link List are bulleted lists of links'), + Markup::create('Slideshows are pictures that can be cycled through'), + ]; + + $help_text_list = [ + '#theme' => 'item_list', + '#type' => 'ul', + '#items' => $items, + '#weight' => -100, + ]; + $form['help_text'] = $help_text_list; // Add a custom submit handler that runs after media is added and saved. if (!empty($form['actions'])) { $form['#submit'][] = 'epa_web_areas_group_media_submit'; @@ -396,29 +386,6 @@ function epa_web_areas_group_media_submit($form, FormStateInterface $form_state) } } -/** - * Implements hook_node_presave(). - */ -function epa_web_areas_node_presave(EntityInterface $entity) { - if ($entity->hasField('field_hublinks') && $entity->id()) { - $groups = \Drupal::service('epa_web_areas.web_areas_helper') - ->getNodeReferencingGroups($entity); - $hublinks = $entity->field_hublinks->getValue(); - - foreach ($groups as $group) { - $group_hublink = ['target_id' => $group->id()]; - $the_group = array_filter($hublinks, function ($item) use ($group_hublink) { - return !empty($item['target_id']) && $item['target_id'] == $group_hublink['target_id']; - }); - if (empty($the_group)) { - array_unshift($hublinks, $group_hublink); - } - } - - $entity->field_hublinks->setValue($hublinks); - } -} - /** * Alter local actions plugins. * @@ -506,17 +473,6 @@ function epa_web_areas_entity_access(EntityInterface $entity, $operation, Accoun return group_entity_access($entity, $operation, $account); } -/** - * - */ -function epa_web_areas_preprocess_node(&$variables) { - $groups = \Drupal::service('epa_web_areas.web_areas_helper')->getNodeReferencingGroups($variables['node']); - $group = reset($groups); - if ($group && $group->hasField('field_navigation_style')) { - $variables['nav_style'] = $group->field_navigation_style->value; - } -} - /** * Implements hook_views_data_alter(). */ @@ -547,3 +503,32 @@ function epa_web_areas_views_data_alter(array &$data) { $data["search_api_index_media"]["gid"]["filter"]['id'] = 'search_api_entity_reference'; } } + +/** + * Implements hook_preprocess_HOOK() for the page variable. + * + * Adds custom status message to the below routes. + * @link https://forumone.atlassian.net/browse/EPAD8-2490 + */ +function epa_web_areas_preprocess_page(&$variables) { + $routes = [ + 'entity.group.canonical', + 'system.admin_content' + ]; + if (in_array(\Drupal::routeMatch()->getRouteName(), $routes)) { + $message = Markup::create('Add new content or use these filters to find content that you are looking for. Type your User ID into the Author or the Last Updated By fields to find content you\'ve worked on.'); + $variables['page']['highlighted']['#attached']['library'][] = 'epa_web_areas/custom_message'; + $variables['page']['highlighted']['custom_message'] = [ + '#theme' => 'status_messages', + '#attributes' => [ + 'class' => ['epa-web-areas-custom-message'], + ], + '#message_list' => [ + 'warning' => [$message] + ], + '#status_headings' => [ + 'warning' => '', + ], + ]; + } +} diff --git a/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.post_update.php b/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.post_update.php new file mode 100644 index 0000000000..38b929c2f4 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_web_areas/epa_web_areas.post_update.php @@ -0,0 +1,115 @@ +getStorage('group') + ->loadMultiple(); + + /** @var \Drupal\path_alias\AliasManager $path_manager */ + $path_manager = \Drupal::service('path_alias.manager'); + + /** @var \Drupal\menu_link_content\MenuLinkContentStorageInterface $menu_link_storage */ + $menu_link_storage = \Drupal::entityTypeManager() + ->getStorage('menu_link_content'); + + /** @var \Drupal\Core\Menu\MenuLinkTreeInterface $menu_tree */ + $menu_tree = \Drupal::service('menu.link_tree'); + $menu_parameters = new MenuTreeParameters(); + $menu_parameters->setTopLevelOnly(); + + // This puts the menu tree in the right order. + $manipulators = [ + ['callable' => 'menu.default_tree_manipulators:generateIndexAndSort'], + ]; + + foreach ($groups as $group) { + // Now load any group menus based on that group. Should only be one, however + // there's no reason they can't have more than one. + $content_menus = group_content_menu_get_menus_per_group($group); + + // Loop over each menu, load & build the menu tree, and look at the first item. + foreach ($content_menus as $menu) { + $menu_name = GroupContentMenuInterface::MENU_PREFIX . $menu->id(); + $tree = $menu_tree->load($menu_name, $menu_parameters); + + if (empty($tree)) { + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("{$group->label()} ({$group->id()}) menu does not have any menu items."); + continue; + } + + // This is what actually puts the menu tree in the order based on the UI. + $tree = $menu_tree->transform($tree, $manipulators); + + /** @var \Drupal\Core\Menu\MenuLinkTreeElement $first */ + if ($first = reset($tree)) { + // If it has children log and continue on. That will manually need to be cleaned up. + if ($first->hasChildren) { + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("{$group->label()} ({$group->id()}) menu first link has children. Skipping."); + continue; + } + + /** @var \Drupal\menu_link_content\Plugin\Menu\MenuLinkContent $first_link */ + $first_link = $first->link; + /** @var \Drupal\Core\Url $first_link_url */ + $first_link_url = $first_link->getUrlObject(); + // The menu link could be external. If so, we need to get the actual path + if ($first_link_url->isExternal()) { + $parts = parse_url($first_link_url->toString()); + if (str_contains($parts['host'], 'epa.gov') && isset($parts['path'])) { + // If it's an EPA link, we can just use the path. + $first_link_path = $parts['path']; + } + else { + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("{$group->label()} ({$group->id()}) first menu link URL goes off domain"); + continue; + } + } + else { + $first_link_path = $first_link_url->toString(); + } + + // Get the field_homepage node from the group to use for comparing urls. + $homepage = $group->get('field_homepage')->entity; + if (!$homepage) { + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("{$group->label()} ({$group->id()}) does not have homepage set"); + continue; + } + if (!$homepage->isPublished()) { + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("{$group->label()} ({$group->id()}) homepage is not published"); + continue; + } + + $homepage_url_path = $homepage->toUrl()->toString(); + + if (str_starts_with($homepage_url_path, '/node/')) { + $homepage_url_path = $path_manager->getAliasByPath($homepage_url_path); + } + + if (str_starts_with($first_link_path, '/node/')) { + $first_link_path = $path_manager->getAliasByPath($first_link_path); + } + + // Compare if the group's field_homepage URL is going to the same place as + // the first menu link AND if it doesn't have any children. + if ($first_link_path == $homepage_url_path) { + // First link is the homepage link AND it has no children. Now load the + // actual menu link entity and set it to be disabled. + $plugin_definition = $first_link->getPluginDefinition(); + $actual_menu_link = $menu_link_storage->load($plugin_definition['metadata']['entity_id']); + $actual_menu_link->set('enabled', FALSE)->save(); + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("Successfully disabled home link for {$group->label()} ({$group->id()}"); + } + else { + \Drupal::logger('epa_web_areas_menu_cleanup')->notice("{$group->label()} ({$group->id()}) menu first link does not go to homepage: \n Links compared were: $first_link_path and $homepage_url_path"); + } + } + } + } +} diff --git a/services/drupal/web/modules/custom/epa_web_areas/src/Controller/EpaWebAreasGroupNodeController.php b/services/drupal/web/modules/custom/epa_web_areas/src/Controller/EpaWebAreasGroupNodeController.php new file mode 100644 index 0000000000..9f97f58700 --- /dev/null +++ b/services/drupal/web/modules/custom/epa_web_areas/src/Controller/EpaWebAreasGroupNodeController.php @@ -0,0 +1,120 @@ +pluginManager = $plugin_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('plugin.manager.group_content_enabler'), + $container->get('tempstore.private'), + $container->get('entity_type.manager'), + $container->get('entity.form_builder'), + $container->get('renderer') + ); + } + + /** + * {@inheritdoc} + */ + public function addPage(GroupInterface $group, $create_mode = FALSE) { + $build = parent::addPage($group, $create_mode); + // Custom css library for styling as we want it to look. + $build['#attached']['library'][] = 'epa_web_areas/group_node.add'; + + // Do not interfere with redirects. + if (!is_array($build)) { + return $build; + } + + // Overwrite the label and description for all of the displayed bundles. + $storage_handler = $this->entityTypeManager->getStorage('node_type'); + foreach ($this->addPageBundles($group, $create_mode) as $plugin_id => $bundle_name) { + if (!empty($build['#bundles'][$bundle_name])) { + $plugin = $group->getGroupType()->getContentPlugin($plugin_id); + $bundle_label = $storage_handler->load($plugin->getEntityBundle())->label(); + $description = $storage_handler->load($plugin->getEntityBundle())->getDescription(); + + $build['#bundles'][$bundle_name]['label'] = $bundle_label; + $build['#bundles'][$bundle_name]['add_link']->setText($bundle_label); + $build['#bundles'][$bundle_name]['description'] = $description; + } + } + + // Display the bundles in alpha order by label. + if (is_array($build['#bundles'])) { + uasort($build['#bundles'], function($a, $b) { + return strnatcmp($a['label'], $b['label']); + }); + } + + return $build; + } + + /** + * {@inheritdoc} + */ + protected function addPageBundles(GroupInterface $group, $create_mode) { + $bundles = []; + + // Retrieve all group_node plugins for the group's type. + $plugin_ids = $this->pluginManager->getInstalledIds($group->getGroupType()); + foreach ($plugin_ids as $key => $plugin_id) { + if (strpos($plugin_id, 'group_node:') !== 0) { + unset($plugin_ids[$key]); + } + } + + // Retrieve all of the responsible group content types, keyed by plugin ID. + $storage = $this->entityTypeManager->getStorage('group_content_type'); + $properties = ['group_type' => $group->bundle(), 'content_plugin' => $plugin_ids]; + foreach ($storage->loadByProperties($properties) as $bundle => $group_content_type) { + /** @var \Drupal\group\Entity\GroupContentTypeInterface $group_content_type */ + $bundles[$group_content_type->getContentPluginId()] = $bundle; + } + + return $bundles; + } + +} diff --git a/services/drupal/web/modules/custom/epa_web_areas/src/Plugin/Action/UpdateGroupAssociationBase.php b/services/drupal/web/modules/custom/epa_web_areas/src/Plugin/Action/UpdateGroupAssociationBase.php index df7b025f18..dd32673f2c 100644 --- a/services/drupal/web/modules/custom/epa_web_areas/src/Plugin/Action/UpdateGroupAssociationBase.php +++ b/services/drupal/web/modules/custom/epa_web_areas/src/Plugin/Action/UpdateGroupAssociationBase.php @@ -16,6 +16,8 @@ use Drupal\group\Entity\GroupContent; use Drupal\group\GroupMembershipLoaderInterface; use Drupal\node\NodeInterface; +use Drupal\search_api\Plugin\search_api\datasource\ContentEntityTrackingManager; +use Drupal\search_api\Utility\TrackingHelper; use Drupal\views_bulk_operations\Action\ViewsBulkOperationsActionBase; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -57,6 +59,20 @@ abstract class UpdateGroupAssociationBase extends ViewsBulkOperationsActionBase */ protected $targetGroup; + /** + * The Search API Tracking Helper service. + * + * @var \Drupal\search_api\Utility\TrackingHelper + */ + protected $trackingHelper; + + /** + * The Search API tracking manager service. + * + * @var \Drupal\search_api\Plugin\search_api\datasource\ContentEntityTrackingManager + */ + protected $trackingManager; + const DENIED = 'access_denied'; const CONFIG_DENIED = 'config_denied'; @@ -79,6 +95,8 @@ public static function create(ContainerInterface $container, array $configuratio $container->get('group.membership_loader'), $container->get('config.factory'), $container->get('messenger'), + $container->get('search_api.entity_datasource.tracking_manager'), + $container->get('search_api.tracking_helper') ); } @@ -88,12 +106,14 @@ public static function create(ContainerInterface $container, array $configuratio * @param $plugin_definition * @param \Drupal\Core\Session\AccountProxyInterface $current_user */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountProxyInterface $current_user, GroupMembershipLoaderInterface $group_membership_loader, ConfigFactoryInterface $config_factory, MessengerInterface $messenger) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountProxyInterface $current_user, GroupMembershipLoaderInterface $group_membership_loader, ConfigFactoryInterface $config_factory, MessengerInterface $messenger, ContentEntityTrackingManager $tracking_manager, TrackingHelper $tracking_helper) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->currentUser = $current_user; $this->groupMembershipLoader = $group_membership_loader; $this->configFactory = $config_factory; $this->messenger = $messenger; + $this->trackingManager = $tracking_manager; + $this->trackingHelper = $tracking_helper; } /** @@ -212,6 +232,13 @@ public function execute($entity = NULL) { $group_content->save(); } $title = $entity instanceof NodeInterface ? $entity->getTitle() : $entity->getName(); + + // Trigger an update on the entity's relevant search index. + $this->trackingManager->entityUpdate($entity); + + // Update the tracking on any items that are referencing this entity. + $this->trackingHelper->trackReferencedEntityUpdate($entity); + return UpdateGroupAssociationBase::SUCCESS . "|$title|{$group_content->getGroup()->label()}"; } else { @@ -226,6 +253,13 @@ public function execute($entity = NULL) { // Means it was never associated with a group $group_content = GroupContent::create($values)->save(); $title = $entity instanceof NodeInterface ? $entity->getTitle() : $entity->getName(); + + // Trigger an update on the entity's relevant search index. + $this->trackingManager->entityUpdate($entity); + + // Update the tracking on any items that are referencing this entity. + $this->trackingHelper->trackReferencedEntityUpdate($entity); + return UpdateGroupAssociationBase::SUCCESS . "|$title|{$group_content->getGroup()->label()}"; } } @@ -308,7 +342,15 @@ public static function finished($success, array $results, array $operations): ?R $message = static::translate('Finished with an error.'); static::message($message, 'error'); } - return NULL; + + $batch = &batch_get(); + // Return back to view where they came from, but remove all query params. + // This is to resolve an issue where items still appear under the wrong Web Area after they've been changed. + /** @var \Drupal\Core\Url $redirect_url */ + $redirect_url = $batch['batch_redirect']; + $redirect_url->setOption('query', []); + $url = $batch['batch_redirect']->toString(); + return new RedirectResponse($url); } /** diff --git a/services/drupal/web/modules/custom/epa_web_areas/src/Routing/RouteSubscriber.php b/services/drupal/web/modules/custom/epa_web_areas/src/Routing/RouteSubscriber.php index 9b36f4a9a5..c1507ed472 100644 --- a/services/drupal/web/modules/custom/epa_web_areas/src/Routing/RouteSubscriber.php +++ b/services/drupal/web/modules/custom/epa_web_areas/src/Routing/RouteSubscriber.php @@ -99,6 +99,11 @@ protected function alterRoutes(RouteCollection $collection) { $route->addOptions(['_admin_route' => TRUE]); } } + // Need to alter the group node route to alter the output as we want. + // @link https://forumone.atlassian.net/browse/EPAD8-2489 + if ($route = $collection->get('entity.group_content.group_node_add_page')) { + $route->setDefault('_controller', '\Drupal\epa_web_areas\Controller\EpaWebAreasGroupNodeController::addPage'); + } } /** diff --git a/services/drupal/web/modules/custom/epa_web_areas/src/Utility/WebAreasHelper.php b/services/drupal/web/modules/custom/epa_web_areas/src/Utility/WebAreasHelper.php index 92be001235..a1cf0cf42d 100644 --- a/services/drupal/web/modules/custom/epa_web_areas/src/Utility/WebAreasHelper.php +++ b/services/drupal/web/modules/custom/epa_web_areas/src/Utility/WebAreasHelper.php @@ -21,22 +21,6 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager) { $this->entityTypeManager = $entity_type_manager; } - /** - * Function checking if web area has a navigation style. - * - * @param Drupal\group\Entity\Group $group - * The $group enity. - * @param string $style - * The navigation style being tested. - * - * @return bool - * Returns true if navigation style is selected for group. - */ - public function checkNavigationStyle(Group $group, $style = 'hublinks') { - $group_type = $group->getGroupType()->id(); - return $group_type == 'web_area' && $group->field_navigation_style->value == $style; - } - /** * Function to grab groups associated with node. * diff --git a/services/drupal/web/modules/custom/epa_wysiwyg/package-lock.json b/services/drupal/web/modules/custom/epa_wysiwyg/package-lock.json index 0ea284a1e8..60d37127ec 100644 --- a/services/drupal/web/modules/custom/epa_wysiwyg/package-lock.json +++ b/services/drupal/web/modules/custom/epa_wysiwyg/package-lock.json @@ -19,7 +19,7 @@ "raw-loader": "^4.0.2", "style-loader": "^3.3.2", "terser-webpack-plugin": "^5.2.0", - "webpack": "^5.76.0", + "webpack": "^5.94.0", "webpack-cli": "^4.4.0" } }, @@ -1171,26 +1171,6 @@ "node": ">=10.13.0" } }, - "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -2212,9 +2192,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -4858,12 +4838,11 @@ } }, "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -4872,7 +4851,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -5897,26 +5876,6 @@ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -6707,9 +6666,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -8529,12 +8488,11 @@ } }, "webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -8543,7 +8501,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/services/drupal/web/modules/custom/epa_wysiwyg/package.json b/services/drupal/web/modules/custom/epa_wysiwyg/package.json index 7debdab7ef..4f612210fe 100644 --- a/services/drupal/web/modules/custom/epa_wysiwyg/package.json +++ b/services/drupal/web/modules/custom/epa_wysiwyg/package.json @@ -15,7 +15,7 @@ "raw-loader": "^4.0.2", "style-loader": "^3.3.2", "terser-webpack-plugin": "^5.2.0", - "webpack": "^5.76.0", + "webpack": "^5.94.0", "webpack-cli": "^4.4.0" }, "dependencies": { diff --git a/services/drupal/web/modules/custom/f1_sso/src/Controller/SSOController.php b/services/drupal/web/modules/custom/f1_sso/src/Controller/SSOController.php index 6aab834488..205e8741b9 100644 --- a/services/drupal/web/modules/custom/f1_sso/src/Controller/SSOController.php +++ b/services/drupal/web/modules/custom/f1_sso/src/Controller/SSOController.php @@ -54,7 +54,7 @@ public function userLogin() { 'destination' => $destination_url, ]); - return RedirectResponse::create($destination->toString()); + return new RedirectResponse($destination->toString()); } } diff --git a/services/drupal/web/themes/epa_theme/.stylelintrc.yml b/services/drupal/web/themes/epa_theme/.stylelintrc.yml index 648943e057..43d4597de0 100644 --- a/services/drupal/web/themes/epa_theme/.stylelintrc.yml +++ b/services/drupal/web/themes/epa_theme/.stylelintrc.yml @@ -2,6 +2,7 @@ extends: - stylelint-config-sass-guidelines plugins: + - stylelint-order - stylelint-prettier - stylelint-selector-pseudo-class-lvhfa - stylelint-order diff --git a/services/drupal/web/themes/epa_theme/epa_theme.libraries.yml b/services/drupal/web/themes/epa_theme/epa_theme.libraries.yml index 68152c08ef..857ee02039 100644 --- a/services/drupal/web/themes/epa_theme/epa_theme.libraries.yml +++ b/services/drupal/web/themes/epa_theme/epa_theme.libraries.yml @@ -1,9 +1,9 @@ common: - version: 20240812 + version: 20240913 js: js/dist/common.min.js: { minified: true } global: - version: 20240812 + version: 20240913 css: theme: css/styles.css: {} @@ -32,7 +32,7 @@ global: - epa_theme/font_simplified_chinese - epa_theme/font_traditional_chinese before_after_swipe: - version: 20240812 + version: 20240913 js: js/dist/before-after-swipe.min.js: { minified: true } dependencies: @@ -40,7 +40,7 @@ before_after_swipe: - core/once - epa_theme/common details: - version: 20240812 + version: 20240913 js: js/libraries/details-element-polyfill.js: {} font_arabic: @@ -68,7 +68,7 @@ font_traditional_chinese: theme: fonts/noto-sans-tc.css: {} image_gallery: - version: 20240812 + version: 20240913 js: js/dist/image-gallery.min.js: { minified: true } dependencies: @@ -76,7 +76,7 @@ image_gallery: - core/once - epa_theme/common hero_slideshow: - version: 20240812 + version: 20240913 js: js/dist/hero-slideshow.min.js: { minified: true } dependencies: @@ -84,19 +84,27 @@ hero_slideshow: - core/once - epa_theme/common media_link: - version: 20240812 + version: 20240913 js: js/dist/media-link.min.js: { minified: true } dependencies: - core/drupal - core/once - epa_theme/common +sidenav_menu: + version: 20240913 + js: + js/dist/sidenav-menu.min.js: { minified: true } + dependencies: + - core/drupal + - core/once + - epa_theme/common svgxuse: version: 1.2.6 js: js/libraries/svgxuse.min.js: { minified: true } toggle_admin: - version: 20240812 + version: 20240913 js: js/dist/toggle-admin.min.js: { minified: true } dependencies: diff --git a/services/drupal/web/themes/epa_theme/images/drupal-sprite.artifact.svg b/services/drupal/web/themes/epa_theme/images/drupal-sprite.artifact.svg new file mode 100644 index 0000000000..dcbd676da1 --- /dev/null +++ b/services/drupal/web/themes/epa_theme/images/drupal-sprite.artifact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/services/drupal/web/themes/epa_theme/includes/block.inc b/services/drupal/web/themes/epa_theme/includes/block.inc index 4fa36a48ce..0cb714ca90 100644 --- a/services/drupal/web/themes/epa_theme/includes/block.inc +++ b/services/drupal/web/themes/epa_theme/includes/block.inc @@ -6,6 +6,7 @@ */ use Drupal\block_content\BlockContentInterface; +use Drupal\Core\Link; /** * Implements hook_theme_suggestions_HOOK_alter(). @@ -35,3 +36,46 @@ function epa_theme_theme_suggestions_block_alter(array &$suggestions, array $var } } } + +/** + * Implements hook_preprocess_HOOK(). + * + * Load up the group short name and use it as the label for the menu block. Also + * set the block title to be a link to the web area's homepage node. + */ +function epa_theme_preprocess_block__webareamenu(&$variables) { + // Ensure we have a group ID and items in the menu before proceeding. + if ( + !empty($variables['elements']['#contextual_links']['group_menu']['route_parameters']['group']) && + !empty($variables['content']['#items']) + ) { + $group_id = $variables['elements']['#contextual_links']['group_menu']['route_parameters']['group']; + /** @var \Drupal\group\Entity\GroupInterface $group */ + $group = \Drupal::entityTypeManager() + ->getStorage('group') + ->load($group_id); + + // 'Title' property is labeled as 'short name'. + $short_name = $group->get('label')->value; + + // Set the short name as the block's label. + $variables['label'] = $short_name; + $variables['label_display'] = 1; + + // Now get the web area's set homepage node and get the url for that to + // use as link URL. + /** @var \Drupal\node\NodeInterface $homepage_node */ + $homepage_node = $group->get('field_homepage')->entity; + if (!$homepage_node) { + return; + } + + if ($homepage_node->isPublished()) { + $homepage_url = $homepage_node->toUrl(); + $homepage_link = Link::fromTextAndUrl($short_name, $homepage_url); + $variables['label'] = $homepage_link->toRenderable(); + } + // Ensure the block caching is based on the web area's homepage as well. + $variables['#cache']['tags'][] = 'node:' . $homepage_node->id(); + } +} diff --git a/services/drupal/web/themes/epa_theme/includes/field.inc b/services/drupal/web/themes/epa_theme/includes/field.inc index f5a1e98327..f2a9be1fa2 100644 --- a/services/drupal/web/themes/epa_theme/includes/field.inc +++ b/services/drupal/web/themes/epa_theme/includes/field.inc @@ -5,6 +5,9 @@ * Field template functions. */ +use Drupal\Core\Render\Element; +use Drupal\node\NodeInterface; + /** * Implements hook_theme_suggestions_field_alter(). */ @@ -40,4 +43,70 @@ function epa_theme_preprocess_field(&$variables) { } } } + + if ($element['#field_name'] == 'field_subjects') { + _alter_field_subjects($variables); + } +} + +/** + * Custom alteration logic for field_subjects to output additional text. + * + * @param $variables + * The $variables render array from epa_theme_preprocess_field. + * + * @return void + * + * Custom function to add some additional text to the field_subjects links. + * The items are themed as `hierarchical_term_facet_formatter` which is a custom + * formatter in the epa_core module. The link text is typically derived from the + * referenced Term's name. Here we alter the name to get the additional text we want + * + * @see \template_preprocess_hierarchical_term_facet_formatter() + * @link https://forumone.atlassian.net/browse/EPAD8-2406 + */ +function _alter_field_subjects(&$variables) { + // Prevent moving on if not a node. This custom function only applies to + // nodes that have the field_subjects + if (!$variables['element']['#object'] instanceof NodeInterface) { + return; + } + + /** @var \Drupal\node\Entity\Node $node */ + $node = $variables['element']['#object']; + + // If field subjects is empty exit out. + if ($node->get('field_subjects')->isEmpty()) { + return; + } + + // We want to display the bundle label, however those are singular. There's + // currently no way in core to provide a "plural" label so we'll provide our own. + // @todo Review this later when https://www.drupal.org/node/2773615 lands. + $plural_bundles = [ + 'perspective' => 'Perspectives', + 'news_release' => 'News Releases', + 'speeches' => 'Speeches & Remarks', + ]; + + // Loop over each subject in the field and alter the term name to be what we want. + foreach (Element::children($variables['items']) as $key) { + // See logic above in \epa_theme_preprocess_field. + // We do some alterations for this field already if it's a perspective node. + if (!isset($variables['items'][$key]['content']['#terms'])) { + continue; + } + + /** @var \Drupal\taxonomy\Entity\Term[] $terms */ + $terms = $variables['items'][$key]['content']['#terms']; + + $term = reset($terms); + $translated = t("Read other EPA @bundle about @name", [ + '@bundle' => $plural_bundles[$node->bundle()], + '@name' => $term->getName(), + ]); + $term->setName($translated); + $variables['items'][$key]['content']['#terms'][0] = $term; + } + } diff --git a/services/drupal/web/themes/epa_theme/includes/navigation.inc b/services/drupal/web/themes/epa_theme/includes/navigation.inc index 564e042a52..ad8db85f28 100644 --- a/services/drupal/web/themes/epa_theme/includes/navigation.inc +++ b/services/drupal/web/themes/epa_theme/includes/navigation.inc @@ -81,3 +81,31 @@ function epa_theme_preprocess_menu_local_tasks(&$variables) { $variables[$type] = $tabs; } } + +/** + * Implements hook_preprocess_breadcrumb(). + */ +function epa_theme_preprocess_breadcrumb(array &$variables) { + if ($variables['breadcrumb']) { + /** @var \Drupal\Core\Render\Renderer $renderer */ + $renderer = \Drupal::service('renderer'); + $variables['include_current_page'] + = theme_get_setting('include_current_page_in_breadcrumb', 'epa_theme') ?? TRUE; + $themeConfig = \Drupal::config('epa_theme.settings'); + $renderer->addCacheableDependency($variables, $themeConfig); + + if ($variables['include_current_page']) { + $request = \Drupal::request(); + $route_match = \Drupal::routeMatch(); + $variables['#cache']['contexts'][] = 'route'; + $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject()); + + if (!empty($page_title)) { + $variables['page_title'] = $page_title; + $variables['breadcrumb'][] = [ + 'text' => $page_title, + ]; + } + } + } +} diff --git a/services/drupal/web/themes/epa_theme/includes/node.inc b/services/drupal/web/themes/epa_theme/includes/node.inc index 4eceffcd9e..234fde7e6d 100644 --- a/services/drupal/web/themes/epa_theme/includes/node.inc +++ b/services/drupal/web/themes/epa_theme/includes/node.inc @@ -5,6 +5,7 @@ */ use Drupal\Core\Link; +use Drupal\group\Entity\GroupContent; /** * Implements hook_preprocess_node(). @@ -19,6 +20,21 @@ function epa_theme_preprocess_node(&$variables) { // Array of regions to add to node template. $allowed_regions = ['messages']; _add_regions_to_node($allowed_regions, $variables); + $node = $variables['node']; + _add_webarea_contact_link($node, $variables); + } +} + +/** + * Implements hook_preprocess_node__VIEW_MODE(). + * + * Retrieves the node's Group's referenced webform and adds it as a variable. + */ +function epa_theme_preprocess_node__full(&$variables) { + /** @var \Drupal\node\Entity\Node $node */ + $node = $variables['node']; + if (!isset($variables['webarea_contact_link'])) { + _add_webarea_contact_link($node, $variables); } } @@ -28,6 +44,7 @@ function epa_theme_preprocess_node(&$variables) { function epa_theme_preprocess_node__news_release__full(&$variables) { /** @var \Drupal\node\NodeInterface $node */ $node = $variables['node']; + _add_webarea_contact_link($node, $variables); $language = $node->get('field_language')->value; @@ -149,6 +166,32 @@ function epa_theme_preprocess_node__news_release__full(&$variables) { } } +/** + * Implements hook_preprocess_node__BUNDEL__VIEW_MODE(). + */ +function epa_theme_preprocess_node__perspective__full(&$variables) { + /** @var \Drupal\node\Entity\Node $node */ + $node = $variables['node']; + if (!isset($variables['webarea_contact_link'])) { + _add_webarea_contact_link($node, $variables); + } + + // Because the perspectives uses layout builder we need to build the subjects field separately. + $variables['subjects'] = $node->get('field_subjects')->view( + [ + 'label' => 'hidden', + 'type' => 'epa_core_hierarchical_term_facet_formatter', + 'settings' => [ + 'display' => 'all', + 'link' => TRUE, + 'wrap' => 'none', + 'separator' => ' | ', + 'reverse' => FALSE, + 'facet_source' => 'perspectives_subjects' + ] + ]); +} + /** * Custom function to add page regions to node templates. */ @@ -180,3 +223,30 @@ function _add_regions_to_node($allowed_regions, &$variables) { $variables['region_' . $region] = $build; } } + +/** + * Custom function to add Web Area contact link to node templates. + * + * @param $entity + * The node to get the Group contact link for. + * @param $variables + * The node render array variables. + * + * @return void + * @throws \Drupal\Core\Entity\EntityMalformedException + */ +function _add_webarea_contact_link($entity, &$variables) { + $group_contents = GroupContent::loadByEntity($entity); + if (!empty($group_contents)) { + /** @var \Drupal\group\Entity\GroupContent $group_content */ + $group_content = reset($group_contents); + $group = $group_content->getGroup(); + /** @var \Drupal\node\Entity\Node[] $webform */ + $webform = $group->get('field_contact_us_form')->referencedEntities(); + $webform = reset($webform); + // Only apply the variable if the link isn't to itself. + if ($webform && ($entity->id() !== $webform->id())) { + $variables['webarea_contact_link'] = $webform->toLink()->toRenderable(); + } + } +} diff --git a/services/drupal/web/themes/epa_theme/js/src/modules/navigation.js b/services/drupal/web/themes/epa_theme/js/src/modules/navigation.js index d7ef56cbaf..ca0a228a55 100644 --- a/services/drupal/web/themes/epa_theme/js/src/modules/navigation.js +++ b/services/drupal/web/themes/epa_theme/js/src/modules/navigation.js @@ -1,5 +1,5 @@ export default function () { - const subnav = once('navigation', '.menu--main .menu__subnav'); + const subnav = once('navigation', '.menu--accordion .menu__subnav'); subnav.forEach((menu, index) => { menu.setAttribute('hidden', true); const button = menu.previousElementSibling; @@ -9,4 +9,62 @@ export default function () { button.setAttribute('aria-controls', id); } }); + + const mobileMQ = window.matchMedia('(max-width: 54.99em)'); + + if (mobileMQ.matches) { + const mobileMenuButton = document.querySelector('.l-header__menu-button'); + const mobileMenuNav = document.querySelector('.usa-nav--epa'); + let focusableMM; + let numberFocusElementsMM; + let firstFocusableElementMM; + let lastFocusableElementMM; + let priorLastElementMM; + + mobileMenuButton.addEventListener('click', function () { + if (!focusableMM) { + focusableMM = Array.from( + mobileMenuNav.querySelectorAll( + 'button, [href], input, select, textarea' + ) + ).filter(item => item.tabIndex !== -1 && item.hidden !== true); + numberFocusElementsMM = focusableMM.length; + firstFocusableElementMM = focusableMM[0]; + lastFocusableElementMM = focusableMM[numberFocusElementsMM - 1]; + + const lastFocusParentMM = lastFocusableElementMM.closest('ul'); + + if (getComputedStyle(lastFocusParentMM).display === 'none') { + priorLastElementMM = lastFocusableElementMM; + lastFocusableElementMM = lastFocusParentMM.previousElementSibling; + } + } + + if (lastFocusableElementMM) { + lastFocusableElementMM.addEventListener('click', function () { + const swapMM = lastFocusableElementMM; + lastFocusableElementMM = priorLastElementMM; + priorLastElementMM = swapMM; + }); + } + }); + + mobileMenuNav.addEventListener('keydown', event => { + if (event.key === 'Tab') { + if ( + event.shiftKey && + document.activeElement === firstFocusableElementMM + ) { + event.preventDefault(); + lastFocusableElementMM.focus(); + } else if ( + document.activeElement === lastFocusableElementMM && + !event.shiftKey + ) { + event.preventDefault(); + firstFocusableElementMM.focus(); + } + } + }); + } } diff --git a/services/drupal/web/themes/epa_theme/js/src/sidenav-menu.es6.js b/services/drupal/web/themes/epa_theme/js/src/sidenav-menu.es6.js new file mode 100644 index 0000000000..2bdf221cca --- /dev/null +++ b/services/drupal/web/themes/epa_theme/js/src/sidenav-menu.es6.js @@ -0,0 +1,99 @@ +// Sidenav menu script +import Drupal from 'drupal'; + +(function (Drupal) { + Drupal.behaviors.sidenavMenu = { + attach(context) { + once('sidenav-menu', 'html').forEach(() => { + const pageBody = document.body; + const sideNavMenu = context.querySelector('.menu--sidenav-nav'); + const sideNavTrigger = context.querySelector('.web-area-menu__button'); + const sideNavOverlay = context.querySelector('.menu-sidenav__overlay'); + const blockWebArea = context.getElementById('block-webareamenu'); + const sideNavContact = context.getElementById('menu-sidenav__contact'); + let focusable; + let numberFocusElements; + let firstFocusableElement; + let lastFocusableElement; + let priorLastElement; + + const sideNavContactClone = sideNavContact.cloneNode(true); + + if (sideNavContactClone !== null) { + sideNavContactClone.classList.add('-mobile'); + sideNavContactClone.id = 'menu-sidenav__contact-mobile'; + sideNavMenu.append(sideNavContactClone); + } + + function toggleVisiblity() { + pageBody.classList.toggle('menu-sidenav--active'); + sideNavMenu.classList.toggle('is-visible'); + sideNavTrigger.classList.toggle('is-open'); + sideNavOverlay.classList.toggle('is-visible'); + + if (!focusable) { + focusable = Array.from( + blockWebArea.querySelectorAll( + 'button, [href], input, select, textarea' + ) + ).filter(item => item.tabIndex !== -1 && item.hidden !== true); + numberFocusElements = focusable.length; + firstFocusableElement = focusable[0]; + lastFocusableElement = focusable[numberFocusElements - 1]; + + const lastFocusParent = lastFocusableElement.closest('ul'); + + if (getComputedStyle(lastFocusParent).display === 'none') { + priorLastElement = lastFocusableElement; + lastFocusableElement = lastFocusParent.previousElementSibling; + } + } + + if (lastFocusableElement) { + lastFocusableElement.addEventListener('click', function () { + const swap = lastFocusableElement; + lastFocusableElement = priorLastElement; + priorLastElement = swap; + }); + } + } + + [sideNavOverlay, sideNavTrigger].forEach(elem => { + elem.addEventListener('click', toggleVisiblity); + }); + + const subNavMenus = context.querySelectorAll( + '.menu--sidenav .menu__subnav' + ); + + subNavMenus.forEach((subNav, index) => { + const subId = `sub-menu-${index}`; + const subBtnSib = subNav.previousElementSibling; + subNav.setAttribute('id', subId); + subBtnSib.setAttribute('aria-controls', subId); + }); + + blockWebArea.addEventListener('keydown', event => { + if ( + event.key === 'Tab' && + sideNavMenu.classList.contains('is-visible') + ) { + if ( + event.shiftKey && + document.activeElement === firstFocusableElement + ) { + event.preventDefault(); + lastFocusableElement.focus(); + } else if ( + document.activeElement === lastFocusableElement && + !event.shiftKey + ) { + event.preventDefault(); + firstFocusableElement.focus(); + } + } + }); + }); + }, + }; +})(Drupal); diff --git a/services/drupal/web/themes/epa_theme/package-lock.json b/services/drupal/web/themes/epa_theme/package-lock.json index 3431f4cd70..55d60472dc 100644 --- a/services/drupal/web/themes/epa_theme/package-lock.json +++ b/services/drupal/web/themes/epa_theme/package-lock.json @@ -56,7 +56,7 @@ "stylelint-selector-pseudo-class-lvhfa": "^3.1.1", "terser-webpack-plugin": "^5.3.10", "unset-value": "^2.0.1", - "webpack": "^5.90.0", + "webpack": "^5.94.0", "yaml": "^1.10.2" }, "engines": { @@ -3868,16 +3868,6 @@ "@types/json-schema": "*" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -6655,9 +6645,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -15996,12 +15986,11 @@ "dev": true }, "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -16010,7 +15999,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -19129,16 +19118,6 @@ "@types/json-schema": "*" } }, - "@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -21328,9 +21307,9 @@ } }, "enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -28470,12 +28449,11 @@ "dev": true }, "webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -28484,7 +28462,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/services/drupal/web/themes/epa_theme/package.json b/services/drupal/web/themes/epa_theme/package.json index 6d721d4e4e..011b22d7bf 100644 --- a/services/drupal/web/themes/epa_theme/package.json +++ b/services/drupal/web/themes/epa_theme/package.json @@ -60,7 +60,7 @@ "stylelint-selector-pseudo-class-lvhfa": "^3.1.1", "terser-webpack-plugin": "^5.3.10", "unset-value": "^2.0.1", - "webpack": "^5.90.0", + "webpack": "^5.94.0", "yaml": "^1.10.2" }, "scripts": { diff --git a/services/drupal/web/themes/epa_theme/source/_data/data.yml b/services/drupal/web/themes/epa_theme/source/_data/data.yml index 9f4f8ae536..f0b78a139a 100644 --- a/services/drupal/web/themes/epa_theme/source/_data/data.yml +++ b/services/drupal/web/themes/epa_theme/source/_data/data.yml @@ -320,7 +320,7 @@ summary: '

This is the summary, which can contain Contact Us to ask a question, provide feedback, or report a problem.Last updated on September 15, 2021' +footer: 'Contact Us to ask a question, provide feedback, or report a problem.Last updated on September 15, 2021' title: 'Title' url: '#' reset_url: '#' diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/00-config/config.design-tokens.yml b/services/drupal/web/themes/epa_theme/source/_patterns/00-config/config.design-tokens.yml index 594142ed0b..6d4bee04d5 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/00-config/config.design-tokens.yml +++ b/services/drupal/web/themes/epa_theme/source/_patterns/00-config/config.design-tokens.yml @@ -78,12 +78,12 @@ uswds: link-hover-color: 'primary-dark' link-active-color: 'primary-darker' # https://github.com/uswds/uswds/blob/develop/packages/uswds-core/src/styles/settings/_settings-components.scss - banner-max-width: 'desktop' - header-max-width: 'desktop' + banner-max-width: 'widescreen' + header-max-width: 'widescreen' header-min-width: 'tablet-lg' # https://github.com/uswds/uswds/blob/develop/packages/uswds-core/src/styles/settings/_settings-spacing.scss column-gap-desktop: 5 - grid-container-max-width: 'desktop' + grid-container-max-width: 'widescreen' site-margins-width: 4 site-margins-mobile-width: 3 # https://github.com/uswds/uswds/blob/develop/packages/uswds-core/src/styles/settings/_settings-utilities.scss @@ -350,9 +350,9 @@ gesso: sass: 'shadow(5)' fallback: '0 16px 32px 0 rgba(0, 0, 0, 0.1)' constrains: - sm: 880px + sm: 1024px md: !uswds uswds.grid-container-max-width - lg: 1200px + lg: 1400px breakpoints: mobile: !sass sass: 'units(mobile)' @@ -396,6 +396,11 @@ gesso: fallback: '#54278f' background: site: grayscale.white + breadcrumb: + background: grayscale.white + divider: grayscale.gray-3 + link: grayscale.black + text: uswds.primary.base button: primary: background: uswds.primary.base diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/03-uswds/accordion/accordion--multiselectable/accordion--multiselectable.twig b/services/drupal/web/themes/epa_theme/source/_patterns/03-uswds/accordion/accordion--multiselectable/accordion--multiselectable.twig index b958e7e106..4f7dd42c8d 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/03-uswds/accordion/accordion--multiselectable/accordion--multiselectable.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/03-uswds/accordion/accordion--multiselectable/accordion--multiselectable.twig @@ -1,3 +1,8 @@ +{% set classes = [ + 'usa-accordion--multiselectable', + modifier_classes ? modifier_classes, +]|join(' ')|trim %} + {% include '@uswds/accordion/accordion.twig' with { 'modifier_classes': modifier_classes, 'is_multi_selectable': is_multi_selectable, diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/_index.scss b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/_index.scss index 420e820fb8..2761df9c54 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/_index.scss +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/_index.scss @@ -1,3 +1,4 @@ @forward 'constrain'; @forward 'constrain--large/constrain--large'; @forward 'constrain--no-padding/constrain--no-padding'; +@forward 'constrain--small/constrain--small'; diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/_constrain--small.scss b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/_constrain--small.scss new file mode 100644 index 0000000000..a3befd4cb8 --- /dev/null +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/_constrain--small.scss @@ -0,0 +1,8 @@ +// @file +// Styles for a Small Constrain layout. + +@use '../../../00-config' as *; + +.l-constrain--small { + max-width: rem(gesso-constrain(sm)); +} diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.md b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.md new file mode 100644 index 0000000000..cfb3ff605f --- /dev/null +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.md @@ -0,0 +1,11 @@ +--- +el: .l-constrain--small +title: Small Constrain Layout +state: complete +--- + +__Variables:__ +* modifier_classes: [string] Classes to modify the default component styling. + +__Blocks:__ +* content: Twig block for content. diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.twig b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.twig new file mode 100644 index 0000000000..af48628dbe --- /dev/null +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.twig @@ -0,0 +1,8 @@ +{% set classes = [ + 'l-constrain--small', + modifier_classes ? modifier_classes, +]|join(' ')|trim %} + +{% include '@layouts/constrain/constrain.twig' with { + 'modifier_classes': classes, +} %} diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.yml b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.yml new file mode 100644 index 0000000000..ed97d539c0 --- /dev/null +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/constrain/constrain--small/constrain--small.yml @@ -0,0 +1 @@ +--- diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/_page.scss b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/_page.scss index 65baba1b4a..bcd763d3df 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/_page.scss +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/_page.scss @@ -53,6 +53,49 @@ justify-content: space-between; width: 100%; } + + .l-constrain { + flex-wrap: wrap; + } + } + + .page-has-sidebar &, + .page-no-sidebar & { + background-color: gesso-grayscale(white); + margin-top: 0; + padding-bottom: rem(gesso-spacing(6)); + + .l-constrain, + .block { + flex-wrap: wrap; + } + } + + .page-no-sidebar & { + .l-constrain { + display: flex; + padding-top: rem(gesso-spacing(3)); + position: relative; + + &::before { + background-color: gesso-grayscale(gray-3); + content: ''; + height: 1px; + position: absolute; + top: 0; + width: measure(5); + } + } + } +} + +.l-page__footer-contact { + .page-has-sidebar & { + display: none; + } + + .page-no-sidebar & { + width: 100%; } } @@ -60,10 +103,31 @@ font-size: font-size(body, 3xs); line-height: gesso-line-height(2); margin-top: 1rem; - text-transform: uppercase; @include at-media($theme-site-margins-breakpoint) { margin-left: 1rem; margin-top: 0; } + + .page-has-sidebar & { + @include breakpoint(gesso-breakpoint(sidebar)) { + margin-left: calc(25% + 2.5rem); + } + } + + .page-no-sidebar & { + margin-left: 0; + margin-top: rem(gesso-spacing(1)); + width: 100%; + } +} + +.l-page__footer-contact-last { + font-size: font-size(body, 3xs); + line-height: gesso-line-height(2); + + @include at-media($theme-site-margins-breakpoint) { + text-align: right; + width: 100%; + } } diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.md b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.md index 58375bd506..df0996f253 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.md +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.md @@ -10,7 +10,7 @@ __Variables:__ * has_footer: [boolean] Whether the page has footer content. __Blocks:__ -* info: Twig block for web area or hublinks. +* info: Twig block for web area. * contact: Twig block for contact info. * content: Twig block for content. * footer: Twig block for footer content. diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.twig b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.twig index 7cbdf5c3d4..e7f1f615b3 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/04-layouts/page/page.twig @@ -4,8 +4,14 @@ has_footer ? 'has-footer', ]|join(' ')|trim %} + +{% set constrain_classes = [ + 'l-constrain', + is_narrow ? 'l-constrain--small' +]|join(' ')|trim %} +

-
+
{% if has_header %}
@@ -16,13 +22,6 @@ } %} {% endblock %}
-
- {% block contact %} - {% include '@layouts/_sample-content/sample-content.twig' with { - 'content': 'Contact Link', - } %} - {% endblock %} -
{% endif %} @@ -35,7 +34,7 @@ {% if has_footer %}

Administrator Michael Regan

September 24th, 2022
Warren, North Carolina

@@ -47,12 +34,25 @@ because it’s mostly Black. Nobody thought people like us would make a fuss.”
{% endset %} +{% set sidenav %} + {% include '@components/box/box--related-links/box--related-links.twig' with { + 'modifier_classes': 'margin-y-4', + 'content': related_info, + 'title': { + 'tag': 'h2', + 'text': 'Related Links'|t, + }, + } only %} +{% endset %} + {% set page_content %} - {% include '@templates/detail-pages/page.twig' with { + {% include '@templates/detail-pages/page-with-sidenav.twig' with { 'title': page_title, 'admin_info': page_admin_info, 'intro': intro, 'body': content, + 'sidenav': sidenav, + 'has_sidenav': has_sidenav, } %} {% endset %} diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/speech-remark.yml b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/speech-remark.yml index f31c96e2bf..8b19d583ab 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/speech-remark.yml +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/speech-remark.yml @@ -4,3 +4,12 @@ intro: '' links: - url: '#' text: 'Speeches' +has_sidenav: true +related_info: |- + diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform-with-sidenav.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform-with-sidenav.twig index e4f4e65db0..d76414df0a 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform-with-sidenav.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform-with-sidenav.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Enforcement', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform.twig index 49b9809223..e67e171345 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/detail-pages/webform.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'EPA in New York', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', @@ -76,6 +70,7 @@ 'intro': intro, 'body': content, 'sidebar': sidebar, + 'is_narrow': true, } %} {% endset %} diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/frequent-questions.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/frequent-questions.twig index c42025a45d..9244082d03 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/frequent-questions.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/frequent-questions.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Frequent Questions', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/news-releases.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/news-releases.twig index 285d7b14b9..f00514a94d 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/news-releases.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/news-releases.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'News Releases', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/perspectives.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/perspectives.twig index f8d6c22635..e3d64d7af4 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/perspectives.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/perspectives.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Perspectives', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/public-notices.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/public-notices.twig index 3080583a8b..24c96e70cd 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/public-notices.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/public-notices.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Public Notices', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', diff --git a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/speeches-remarks.twig b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/speeches-remarks.twig index d3260f414a..79e3f8d55b 100644 --- a/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/speeches-remarks.twig +++ b/services/drupal/web/themes/epa_theme/source/_patterns/07-pages/listing-pages/speeches-remarks.twig @@ -1,9 +1,3 @@ -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Speeches and Remarks', - } %} -{% endset %} - {% set contact_link %} {% include '@components/header-link/header-link.twig' with { 'url': '#', diff --git a/services/drupal/web/themes/epa_theme/templates/block/block--fixed--perspectives-editors-note.html.twig b/services/drupal/web/themes/epa_theme/templates/block/block--fixed--perspectives-editors-note.html.twig index a7379c4bc7..5b1c9aac14 100644 --- a/services/drupal/web/themes/epa_theme/templates/block/block--fixed--perspectives-editors-note.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/block/block--fixed--perspectives-editors-note.html.twig @@ -6,6 +6,6 @@ #} {% include '@components/box/box--special/box--special.twig' with { - 'modifier_classes': 'margin-y-4 font-sans-3xs', + 'modifier_classes': 'margin-y-4 font-sans-3xs box--editors-note', 'content': content, } only %} diff --git a/services/drupal/web/themes/epa_theme/templates/block/block--webareamenu.html.twig b/services/drupal/web/themes/epa_theme/templates/block/block--webareamenu.html.twig index 9c4510571c..df8f840ec9 100644 --- a/services/drupal/web/themes/epa_theme/templates/block/block--webareamenu.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/block/block--webareamenu.html.twig @@ -4,4 +4,33 @@ * Theme override for the group menus block. */ #} -{% extends "block--admin.html.twig" %} +{{ attach_library('epa_theme/sidenav_menu') }} + +{% set classes = [ + 'block--web-area-menu', +] %} + +{% set attributes = attributes.addClass(classes) %} + +{% set block_content %} + {% block block_content %} + {{ content }} + {% endblock %} +{% endset %} + + + +{% embed '@components/block/block.twig' with { + 'hide_wrapper': false, + 'has_constrain': false, + 'title_prefix': title_prefix, + 'label': (label_display == '1') ? label : '', + 'title_suffix': title_suffix, + 'hide_content_wrapper': false, +} %} + + {% block content %} + {{ block_content }} + {% endblock %} + +{% endembed %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--event--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--event--full.html.twig index 7cf937a1e7..b951b51f64 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--event--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--event--full.html.twig @@ -20,15 +20,13 @@ {% endif %} {% set header_info %} - {% if nav_style == 'sidebar_navigation' %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} - {% else %} - {{ node.field_hublinks|view({type: 'web_areas_homepage_link_formatter', settings: {}}) }} - {% endif %} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} +{# {{ drupal_entity('block', 'webareaheader', check_access=false) }}#} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} @@ -107,5 +105,6 @@ 'show_admin_info': show_admin_info, 'body': body, 'footer': footer, + 'is_narrow': true, } %} {% endif %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--faq--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--faq--full.html.twig index 99faf6fe65..2a838c9a68 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--faq--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--faq--full.html.twig @@ -20,20 +20,19 @@ {% endif %} {% set header_info %} - {% if nav_style == 'sidebar_navigation' %} - {% if node.field_wide_template.value %} - {% set display_sidenav = false %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: true,shortname: true}}) }} - {% else %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} - {% endif %} + {% if node.field_wide_template.value %} + {% set display_sidenav = false %} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: true,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% else %} - {{ node.field_hublinks|view({type: 'web_areas_homepage_link_formatter', settings: {}}) }} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% endif %} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} +{# {{ drupal_entity('block', 'webareaheader', check_access=false) }}#} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} @@ -92,5 +91,6 @@ 'show_admin_info': show_admin_info, 'body': content|without('epa_content_moderation_info_box', 'field_question'), 'footer': footer, + 'is_narrow': true, } %} {% endif %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--full.html.twig index 7786192d11..3d21e469e1 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--full.html.twig @@ -20,20 +20,18 @@ {% endif %} {% set header_info %} - {% if nav_style == 'sidebar_navigation' %} - {% if node.field_wide_template.value %} - {% set display_sidenav = false %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: true,shortname: true}}) }} - {% else %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} - {% endif %} + {% if node.field_wide_template.value %} + {% set display_sidenav = false %} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: true,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% else %} - {{ node.field_hublinks|view({type: 'web_areas_homepage_link_formatter', settings: {}}) }} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% endif %} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--news-release--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--news-release--full.html.twig index f4006f39cb..cf8ef1145f 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--news-release--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--news-release--full.html.twig @@ -11,6 +11,10 @@ not node.isPublished() ? 'is-unpublished', ] %} +{% set header_info %} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} +{% endset %} + {% set sidenav = drupal_region('sidebar') %} {% set press_offices = [] %} @@ -18,20 +22,35 @@ {% set press_offices = press_offices|merge([item|render]) %} {% endfor %} -{% set header_info %} - {% include '@components/hublinks/hublinks.twig' with { - 'title': 'News Releases'|t, - 'links': press_offices, - } %} +{% if content.field_press_office|field_value is not empty or content.field_subjects|field_value is not empty or more_link %} + {% set related_info %} + + {% endset %} +{% endif %} - {% include '@components/hublinks/hublinks.twig' with { - 'title': '', - 'links': [more_link], - } %} +{% set sidenav %} + {% include '@components/box/box--related-links/box--related-links.twig' with { + 'modifier_classes': 'margin-y-4', + 'content': related_info, + 'title': { + 'tag': 'h2', + 'text': 'Related Links'|t, + }, + } only %} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} @@ -80,7 +99,6 @@ 'has_header': true, 'has_footer': has_footer, 'has_sidenav': true, - 'header_info': header_info, 'contact_link': contact_link, 'title': label, 'admin_info': admin_info, @@ -93,12 +111,12 @@ {% include '@templates/detail-pages/page.twig' with { 'has_header': true, 'has_footer': has_footer, - 'header_info': header_info, 'contact_link': contact_link, 'title': label, 'admin_info': admin_info, 'show_admin_info': show_admin_info, 'body': body, 'footer': footer, + 'is_narrow': true, } %} {% endif %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--perspective--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--perspective--full.html.twig index 429aeb92ba..525a0b88fc 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--perspective--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--perspective--full.html.twig @@ -11,22 +11,44 @@ not node.isPublished() ? 'is-unpublished', ] %} -{% set sidenav = drupal_region('sidebar') %} -{% set display_sidenav = false %} -{% if sidenav|render|striptags('')|trim %} - {% set display_sidenav = true %} +{# @see epa_theme_preprocess_node__perspective__full() #} +{% if subjects or more_link %} + {% set related_info %} + + {% endset %} {% endif %} +{% set sidenav %} + {{ drupal_region('sidebar') }} + + {% include '@components/box/box--related-links/box--related-links.twig' with { + 'modifier_classes': 'margin-y-4', + 'content': related_info, + 'title': { + 'tag': 'h2', + 'text': 'Related Links'|t, + }, + } only %} +{% endset %} + +{% set display_sidenav = true %} + {% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Perspectives'|t, - } %} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--public-notice--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--public-notice--full.html.twig index 660a2ee493..0b2ada6c08 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--public-notice--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--public-notice--full.html.twig @@ -20,15 +20,12 @@ {% endif %} {% set header_info %} - {% if nav_style == 'sidebar_navigation' %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} - {% else %} - {{ node.field_hublinks|view({type: 'web_areas_homepage_link_formatter', settings: {}}) }} - {% endif %} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} @@ -117,5 +114,6 @@ 'show_admin_info': show_admin_info, 'body': body, 'footer': footer, + 'is_narrow': true, } %} {% endif %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--regulation--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--regulation--full.html.twig index 736e569d8d..e5572d41a6 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--regulation--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--regulation--full.html.twig @@ -20,15 +20,13 @@ {% endif %} {% set header_info %} - {% if nav_style == 'sidebar_navigation' %} - {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} - {% else %} - {{ node.field_hublinks|view({type: 'web_areas_homepage_link_formatter', settings: {}}) }} - {% endif %} + {{ node.entitygroupfield|view({type: 'group_homepage_node_formatter', settings: {link: false,shortname: true}}) }} + {{ drupal_entity('block', 'epa_breadcrumbs', check_access=false) }} {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} +{# {{ drupal_entity('block', 'webareaheader', check_access=false) }}#} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--speeches--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--speeches--full.html.twig index 04aeff02ba..11e4b91057 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--speeches--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--speeches--full.html.twig @@ -11,13 +11,37 @@ not node.isPublished() ? 'is-unpublished', ] %} -{% set sidenav = drupal_region('sidebar') %} +{% set related_info %} + +{% endset %} -{% set display_sidenav = false %} +{% set sidenav %} + {{ drupal_region('sidebar') }} + + {% include '@components/box/box--related-links/box--related-links.twig' with { + 'modifier_classes': 'margin-y-4', + 'content': related_info, + 'title': { + 'tag': 'h2', + 'text': 'Related Links'|t, + }, + } only %} +{% endset %} -{% if sidenav|render|striptags('')|trim %} - {% set display_sidenav = true %} -{% endif %} +{% set display_sidenav = true %} {% set header_info %} {% include '@components/web-area-title/web-area-title.twig' with { @@ -26,7 +50,7 @@ {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} @@ -59,18 +83,6 @@ {% endif %} {% endif %} -{% set related %} -
    - {% if content.entitygroupfield|field_value -%} -
  • {{ content.entitygroupfield }}
  • - {%- endif -%} - {%- if content.field_video|field_value -%} -
  • Watch the Event
  • - {%- endif -%} - {{- content.field_related_information }} -
-{% endset %} - {% set author_names %} {% for term in node.field_authors -%} {% set tid = term.entity.field_author.target_id %} @@ -80,17 +92,6 @@ {% endset %} {% set body %} -
- {{ content.field_authors }} - {% include '@components/box/box--related-info/box--related-info.twig' with { - 'modifier_classes': '', - 'title': { - 'tag': 'div', - 'text': 'Related Information', - }, - 'content': related, - } only %} -

{{ author_names }}

{{ content.field_release|field_value }}
{{ content.field_text_location|field_value }}

{{ content.field_paragraphs|field_value }} @@ -103,10 +104,8 @@ {% if display_sidenav %} {% include '@templates/detail-pages/page-with-sidenav.twig' with { - 'has_header': true, 'has_footer': has_footer, 'has_sidenav': true, - 'header_info': header_info, 'contact_link': contact_link, 'title': label, 'admin_info': admin_info, diff --git a/services/drupal/web/themes/epa_theme/templates/content/node--web-area--full.html.twig b/services/drupal/web/themes/epa_theme/templates/content/node--web-area--full.html.twig index 1f355d4cab..6653a676e5 100644 --- a/services/drupal/web/themes/epa_theme/templates/content/node--web-area--full.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/content/node--web-area--full.html.twig @@ -17,7 +17,8 @@ {% endset %} {% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} +{# {{ drupal_entity('block', 'webareaheader', check_access=false) }}#} + {{ webarea_contact_link }} {% endset %} {% set admin_info %} diff --git a/services/drupal/web/themes/epa_theme/templates/field/field--field-hublinks.html.twig b/services/drupal/web/themes/epa_theme/templates/field/field--field-hublinks.html.twig deleted file mode 100644 index 7080300616..0000000000 --- a/services/drupal/web/themes/epa_theme/templates/field/field--field-hublinks.html.twig +++ /dev/null @@ -1,22 +0,0 @@ -{# -/** - * @file - * Theme override for a field. - */ -#} - -{% set links = [] %} - -{% for item in items %} - {% set links = links|merge([ - { - 'text': item.content['#title'], - 'url': item.content['#url'], - } - ]) %} -{% endfor %} - -{% include '@components/hublinks/hublinks.twig' with { - 'title': 'Related Topics'|t, - 'links': links, -} %} diff --git a/services/drupal/web/themes/epa_theme/templates/field/field--field-press-office.html.twig b/services/drupal/web/themes/epa_theme/templates/field/field--field-press-office.html.twig index 66dd4f428d..33dfce37e4 100644 --- a/services/drupal/web/themes/epa_theme/templates/field/field--field-press-office.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/field/field--field-press-office.html.twig @@ -43,7 +43,6 @@ 'field--name-' ~ field_name|clean_class, 'field--type-' ~ field_type|clean_class, 'field--label-' ~ label_display, - 'hublinks', ] %} {% set attributes = attributes.addClass(classes) %} @@ -55,5 +54,5 @@ 'label_element': 'div', 'label': label, 'field_items': items, - 'modifier_classes': 'field--tight hublinks field--alternate-font', + 'modifier_classes': 'field--tight field--alternate-font', } %} diff --git a/services/drupal/web/themes/epa_theme/templates/field/field--node--entitygroupfield.html.twig b/services/drupal/web/themes/epa_theme/templates/field/field--node--entitygroupfield.html.twig index fbccc3a506..c369259fa3 100644 --- a/services/drupal/web/themes/epa_theme/templates/field/field--node--entitygroupfield.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/field/field--node--entitygroupfield.html.twig @@ -4,9 +4,3 @@ * Theme override for a field. */ #} - -{% for item in items %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': item.content, - } %} -{% endfor %} diff --git a/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--news-release.html.twig b/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--news-release.html.twig new file mode 100644 index 0000000000..67acd7ee0e --- /dev/null +++ b/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--news-release.html.twig @@ -0,0 +1,10 @@ +{# +/** + * @file + * Theme override for a field. + */ +#} + +{% for item in items %} + +{% endfor %} diff --git a/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--perspective.html.twig b/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--perspective.html.twig index f1e0e6c430..67acd7ee0e 100644 --- a/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--perspective.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--perspective.html.twig @@ -4,8 +4,7 @@ * Theme override for a field. */ #} -
    - {% for item in items %} -
  • {{ item.content }}
  • - {% endfor %} -
+ +{% for item in items %} + +{% endfor %} diff --git a/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--speeches.html.twig b/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--speeches.html.twig new file mode 100644 index 0000000000..67acd7ee0e --- /dev/null +++ b/services/drupal/web/themes/epa_theme/templates/field/field--node--field-subjects--speeches.html.twig @@ -0,0 +1,10 @@ +{# +/** + * @file + * Theme override for a field. + */ +#} + +{% for item in items %} + +{% endfor %} diff --git a/services/drupal/web/themes/epa_theme/templates/navigation/breadcrumb.html.twig b/services/drupal/web/themes/epa_theme/templates/navigation/breadcrumb.html.twig new file mode 100644 index 0000000000..2488da6739 --- /dev/null +++ b/services/drupal/web/themes/epa_theme/templates/navigation/breadcrumb.html.twig @@ -0,0 +1,11 @@ +{# + /** + * @file + * Theme override for the breadcrumb menu. + * + */ +#} + +{% include '@components/breadcrumb/breadcrumb.twig' with { + 'hide_title': true, +} %} diff --git a/services/drupal/web/themes/epa_theme/templates/navigation/menu--group-menu.html.twig b/services/drupal/web/themes/epa_theme/templates/navigation/menu--group-menu.html.twig new file mode 100644 index 0000000000..1098fa80ca --- /dev/null +++ b/services/drupal/web/themes/epa_theme/templates/navigation/menu--group-menu.html.twig @@ -0,0 +1,36 @@ +{# + /** + * @file + * Theme override for Menu. + * + */ +#} + +{% if items %} + + + +{% endif %} diff --git a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-faqs.html.twig b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-faqs.html.twig index 32e2c86e67..185cbd7073 100644 --- a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-faqs.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-faqs.html.twig @@ -5,16 +5,6 @@ */ #} -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Frequent Questions'|t, - } %} -{% endset %} - -{% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} -{% endset %} - {% set admin_info %} {{ drupal_block('system_messages_block', wrapper=false) }} {{ drupal_block('local_tasks_block', wrapper=false) }} @@ -69,8 +59,6 @@ {% include '@templates/listing-pages/listing-page.twig' with { 'has_header': true, 'has_sidenav': true, - 'header_info': header_info, - 'contact_link': contact_link, 'title': view.title, 'contextual_links': title_suffix.contextual_links, 'admin_info': admin_info, diff --git a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-news-releases.html.twig b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-news-releases.html.twig index 47b007bbec..b18abccc2f 100644 --- a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-news-releases.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-news-releases.html.twig @@ -5,16 +5,6 @@ */ #} -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'News Releases'|t, - } %} -{% endset %} - -{% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} -{% endset %} - {% set admin_info %} {{ drupal_block('system_messages_block', wrapper=false) }} {{ drupal_block('local_tasks_block', wrapper=false) }} @@ -74,8 +64,6 @@ {% include '@templates/listing-pages/listing-page.twig' with { 'has_header': true, 'has_sidenav': true, - 'header_info': header_info, - 'contact_link': contact_link, 'title': view.title, 'contextual_links': title_suffix.contextual_links, 'admin_info': admin_info, diff --git a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-perspectives.html.twig b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-perspectives.html.twig index 92198efec7..f64402f097 100644 --- a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-perspectives.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-perspectives.html.twig @@ -5,16 +5,6 @@ */ #} -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Perspectives'|t, - } %} -{% endset %} - -{% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} -{% endset %} - {% set admin_info %} {{ drupal_block('system_messages_block', wrapper=false) }} {{ drupal_block('local_tasks_block', wrapper=false) }} @@ -72,8 +62,6 @@ {% include '@templates/listing-pages/listing-page.twig' with { 'has_header': true, 'has_sidenav': true, - 'header_info': header_info, - 'contact_link': contact_link, 'title': view.title, 'contextual_links': title_suffix.contextual_links, 'admin_info': admin_info, diff --git a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-public-notices.html.twig b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-public-notices.html.twig index 3e44792cfc..c06a25bd56 100644 --- a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-public-notices.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-public-notices.html.twig @@ -5,16 +5,6 @@ */ #} -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Public Notices'|t, - } %} -{% endset %} - -{% set contact_link %} - {{ drupal_entity('block', 'webareaheader', check_access=false) }} -{% endset %} - {% set admin_info %} {{ drupal_block('system_messages_block', wrapper=false) }} {{ drupal_block('local_tasks_block', wrapper=false) }} @@ -73,8 +63,6 @@ {% include '@templates/listing-pages/listing-page.twig' with { 'has_header': true, 'has_sidenav': true, - 'header_info': header_info, - 'contact_link': contact_link, 'title': view.title, 'contextual_links': title_suffix.contextual_links, 'admin_info': admin_info, diff --git a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-speeches-and-remarks.html.twig b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-speeches-and-remarks.html.twig index 2152d9b5f4..c0a73bdae1 100644 --- a/services/drupal/web/themes/epa_theme/templates/views/views-view--search-speeches-and-remarks.html.twig +++ b/services/drupal/web/themes/epa_theme/templates/views/views-view--search-speeches-and-remarks.html.twig @@ -5,12 +5,6 @@ */ #} -{% set header_info %} - {% include '@components/web-area-title/web-area-title.twig' with { - 'text': 'Speeches and Remarks'|t, - } %} -{% endset %} - {% set contact_link %} {{ drupal_entity('block', 'webareaheader', check_access=false) }} {% endset %} @@ -72,7 +66,6 @@ {% include '@templates/listing-pages/listing-page.twig' with { 'has_header': true, 'has_sidenav': true, - 'header_info': header_info, 'contact_link': contact_link, 'title': view.title, 'contextual_links': title_suffix.contextual_links, diff --git a/services/drupal/web/themes/epa_theme/theme-settings.php b/services/drupal/web/themes/epa_theme/theme-settings.php new file mode 100644 index 0000000000..36a80c564a --- /dev/null +++ b/services/drupal/web/themes/epa_theme/theme-settings.php @@ -0,0 +1,31 @@ + 'details', + '#title' => t('Breadcrumb'), + '#open' => TRUE, + ]; + + $form['breadcrumb']['include_current_page_in_breadcrumb'] = [ + '#type' => 'checkbox', + '#title' => t('Include current page in breadcrumb'), + '#default_value' => theme_get_setting('include_current_page_in_breadcrumb') ?? TRUE, + ]; +}