govuk_publishing_components 66.4.2 → 66.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +7 -1
- data/app/views/govuk_publishing_components/components/_cookie_banner.html.erb +14 -32
- data/app/views/govuk_publishing_components/components/_layout_for_public.html.erb +3 -1
- data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +231 -221
- data/app/views/govuk_publishing_components/components/_published_dates.html.erb +13 -12
- data/app/views/govuk_publishing_components/components/_signup_link.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/docs/cookie_banner.yml +0 -19
- data/app/views/govuk_publishing_components/components/docs/layout_for_public.yml +12 -23
- data/app/views/govuk_publishing_components/components/docs/published_dates.yml +0 -6
- data/app/views/govuk_publishing_components/components/docs/signup_link.yml +8 -0
- data/config/locales/en.yml +2 -2
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/axe-core/axe.d.ts +39 -1
- data/node_modules/axe-core/axe.js +1062 -534
- data/node_modules/axe-core/axe.min.js +2 -2
- data/node_modules/axe-core/gather-internals.js +219 -0
- data/node_modules/axe-core/locales/_template.json +5 -0
- data/node_modules/axe-core/locales/ja.json +1 -0
- data/node_modules/axe-core/locales/{no_NB.json → nb.json} +1 -1
- data/node_modules/axe-core/locales/pt_BR.json +1 -1
- data/node_modules/axe-core/locales/pt_PT.json +1 -1
- data/node_modules/axe-core/locales/zh_CN.json +1 -1
- data/node_modules/axe-core/locales/zh_TW.json +1 -1
- data/node_modules/axe-core/package.json +11 -6
- data/node_modules/axe-core/sri-history.json +4 -0
- metadata +4 -3
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
var elementInternalsMap = (() => {
|
|
3
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports);
|
|
4
|
+
|
|
5
|
+
// lib/gather-internals/main.js
|
|
6
|
+
var require_main = __commonJS((exports, module) => {
|
|
7
|
+
walkTree();
|
|
8
|
+
module.exports = elementInternalsMap;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
// lib/core/utils/is-valid-custom-element-name.js
|
|
12
|
+
var reservedNames = [
|
|
13
|
+
"annotation-xml",
|
|
14
|
+
"color-profile",
|
|
15
|
+
"font-face",
|
|
16
|
+
"font-face-src",
|
|
17
|
+
"font-face-uri",
|
|
18
|
+
"font-face-format",
|
|
19
|
+
"font-face-name",
|
|
20
|
+
"missing-glyph"
|
|
21
|
+
];
|
|
22
|
+
var validLocalNameRegex = /^(?:[A-Za-z][^\0\t\n\f\r\u0020/>]*|[:_\u0080-\u{10FFFF}][A-Za-z0-9-.:_\u0080-\u{10FFFF}]*)$/u;
|
|
23
|
+
var alphaLowerRegex = /[a-z]/;
|
|
24
|
+
var alphaUpperRegex = /[A-Z]/;
|
|
25
|
+
function isValidCustomElementName(nodeName) {
|
|
26
|
+
return !reservedNames.includes(nodeName) && validLocalNameRegex.test(nodeName) && alphaLowerRegex.test(nodeName[0]) && !alphaUpperRegex.test(nodeName) && nodeName.includes("-");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// lib/core/utils/get-element-internals.js
|
|
30
|
+
var propNames = ["_internals", "internals", "internals_"];
|
|
31
|
+
var symbolNames = ["internals", "privateInternals"];
|
|
32
|
+
function getElementInternals(node) {
|
|
33
|
+
if (!isValidCustomElementName(node.nodeName.toLowerCase())) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const mapInternals = globalThis._elementInternals?.get(node);
|
|
37
|
+
if (mapInternals) {
|
|
38
|
+
return mapInternals;
|
|
39
|
+
}
|
|
40
|
+
if (!("ElementInternals" in window)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
for (const propName of propNames) {
|
|
44
|
+
if (Object.getOwnPropertyDescriptor(node, propName)?.get) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (node[propName] instanceof window.ElementInternals) {
|
|
48
|
+
return node[propName];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const ownSymbols = Object.getOwnPropertySymbols(node);
|
|
52
|
+
if (!ownSymbols.length) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
for (const symbolName of symbolNames) {
|
|
56
|
+
const symbol = ownSymbols.find((s) => s.description === symbolName);
|
|
57
|
+
if (symbol) {
|
|
58
|
+
if (Object.getOwnPropertyDescriptor(node, symbol)?.get) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (node[symbol] instanceof window.ElementInternals) {
|
|
62
|
+
return node[symbol];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// lib/core/utils/escape-selector.js
|
|
69
|
+
function escapeSelector(value) {
|
|
70
|
+
const string = String(value);
|
|
71
|
+
const length = string.length;
|
|
72
|
+
let index = -1;
|
|
73
|
+
let codeUnit;
|
|
74
|
+
let result = "";
|
|
75
|
+
const firstCodeUnit = string.charCodeAt(0);
|
|
76
|
+
while (++index < length) {
|
|
77
|
+
codeUnit = string.charCodeAt(index);
|
|
78
|
+
if (codeUnit == 0) {
|
|
79
|
+
result += "\uFFFD";
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (codeUnit >= 1 && codeUnit <= 31 || codeUnit == 127 || index == 0 && codeUnit >= 48 && codeUnit <= 57 || index == 1 && codeUnit >= 48 && codeUnit <= 57 && firstCodeUnit == 45) {
|
|
83
|
+
result += "\\" + codeUnit.toString(16) + " ";
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (index == 0 && length == 1 && codeUnit == 45) {
|
|
87
|
+
result += "\\" + string.charAt(index);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (codeUnit >= 128 || codeUnit == 45 || codeUnit == 95 || codeUnit >= 48 && codeUnit <= 57 || codeUnit >= 65 && codeUnit <= 90 || codeUnit >= 97 && codeUnit <= 122) {
|
|
91
|
+
result += string.charAt(index);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
result += "\\" + string.charAt(index);
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
var escape_selector_default = escapeSelector;
|
|
99
|
+
|
|
100
|
+
// lib/core/utils/get-shadow-selector.js
|
|
101
|
+
function getShadowSelector(generateSelector, elm, options = {}) {
|
|
102
|
+
if (!elm) {
|
|
103
|
+
return "";
|
|
104
|
+
}
|
|
105
|
+
let doc = elm.getRootNode && elm.getRootNode() || document;
|
|
106
|
+
if (doc.nodeType !== 11) {
|
|
107
|
+
return generateSelector(elm, options, doc);
|
|
108
|
+
}
|
|
109
|
+
const stack = [];
|
|
110
|
+
while (doc.nodeType === 11) {
|
|
111
|
+
if (!doc.host) {
|
|
112
|
+
return "";
|
|
113
|
+
}
|
|
114
|
+
stack.unshift({elm, doc});
|
|
115
|
+
elm = doc.host;
|
|
116
|
+
doc = elm.getRootNode();
|
|
117
|
+
}
|
|
118
|
+
stack.unshift({elm, doc});
|
|
119
|
+
return stack.map((item) => generateSelector(item.elm, options, item.doc));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// lib/core/utils/get-ancestry.js
|
|
123
|
+
function generateAncestry(node) {
|
|
124
|
+
const nodeName = escape_selector_default(node.nodeName.toLowerCase());
|
|
125
|
+
const parentElement = node.parentElement;
|
|
126
|
+
const parentNode = node.parentNode;
|
|
127
|
+
let nthChild = "";
|
|
128
|
+
if (nodeName !== "head" && nodeName !== "body" && parentNode?.children.length > 1) {
|
|
129
|
+
const index = Array.prototype.indexOf.call(parentNode.children, node) + 1;
|
|
130
|
+
nthChild = `:nth-child(${index})`;
|
|
131
|
+
}
|
|
132
|
+
if (!parentElement) {
|
|
133
|
+
return nodeName + nthChild;
|
|
134
|
+
}
|
|
135
|
+
return generateAncestry(parentElement) + " > " + nodeName + nthChild;
|
|
136
|
+
}
|
|
137
|
+
function getAncestry(elm, options) {
|
|
138
|
+
return getShadowSelector(generateAncestry, elm, options);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// lib/core/utils/is-shadow-root.js
|
|
142
|
+
var possibleShadowRoots = [
|
|
143
|
+
"article",
|
|
144
|
+
"aside",
|
|
145
|
+
"blockquote",
|
|
146
|
+
"body",
|
|
147
|
+
"div",
|
|
148
|
+
"footer",
|
|
149
|
+
"h1",
|
|
150
|
+
"h2",
|
|
151
|
+
"h3",
|
|
152
|
+
"h4",
|
|
153
|
+
"h5",
|
|
154
|
+
"h6",
|
|
155
|
+
"header",
|
|
156
|
+
"main",
|
|
157
|
+
"nav",
|
|
158
|
+
"p",
|
|
159
|
+
"section",
|
|
160
|
+
"span"
|
|
161
|
+
];
|
|
162
|
+
function isShadowRoot(node) {
|
|
163
|
+
if (node.shadowRoot) {
|
|
164
|
+
const nodeName = node.nodeName.toLowerCase();
|
|
165
|
+
if (possibleShadowRoots.includes(nodeName) || isValidCustomElementName(nodeName)) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
var is_shadow_root_default = isShadowRoot;
|
|
172
|
+
|
|
173
|
+
// lib/gather-internals/walk-tree.js
|
|
174
|
+
var elementInternalsMap = [];
|
|
175
|
+
var ariaPropRegex = /^aria[A-Z]/;
|
|
176
|
+
var propsToCapture = ["role", "labels", "form"];
|
|
177
|
+
function walkTree(tree = document.body) {
|
|
178
|
+
const treeWalker = document.createTreeWalker(tree, globalThis.NodeFilter.SHOW_ELEMENT, null, false);
|
|
179
|
+
let node = treeWalker.currentNode;
|
|
180
|
+
while (node) {
|
|
181
|
+
const elementInternals = getElementInternals(node);
|
|
182
|
+
if (elementInternals) {
|
|
183
|
+
const ancestry = getAncestry(node);
|
|
184
|
+
const internals = {};
|
|
185
|
+
for (const prop in elementInternals) {
|
|
186
|
+
if (!ariaPropRegex.test(prop) && !propsToCapture.includes(prop)) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
const value = elementInternals[prop];
|
|
191
|
+
if (value === null) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (value instanceof globalThis.HTMLElement) {
|
|
195
|
+
internals[prop] = value.isConnected ? {type: "HTMLElement", value: getAncestry(value)} : void 0;
|
|
196
|
+
} else if (Array.isArray(value) || value instanceof globalThis.NodeList) {
|
|
197
|
+
const array = Array.from(value).filter((n) => n.isConnected);
|
|
198
|
+
internals[prop] = array.length ? {type: "NodeList", value: array.map((n) => getAncestry(n))} : void 0;
|
|
199
|
+
} else if (typeof value === "string") {
|
|
200
|
+
internals[prop] = value;
|
|
201
|
+
}
|
|
202
|
+
} catch {
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
elementInternalsMap.push({
|
|
206
|
+
ancestry,
|
|
207
|
+
internals
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (is_shadow_root_default(node)) {
|
|
211
|
+
walkTree(node.shadowRoot);
|
|
212
|
+
}
|
|
213
|
+
node = treeWalker.nextNode();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return require_main();
|
|
217
|
+
})();
|
|
218
|
+
return elementInternalsMap;
|
|
219
|
+
})();
|
|
@@ -81,6 +81,10 @@
|
|
|
81
81
|
"description": "Ensure all elements with a role attribute use a valid value",
|
|
82
82
|
"help": "ARIA roles used must conform to valid values"
|
|
83
83
|
},
|
|
84
|
+
"aria-tab-name": {
|
|
85
|
+
"description": "Ensure every ARIA tab node has an accessible name",
|
|
86
|
+
"help": "ARIA tab nodes must have an accessible name"
|
|
87
|
+
},
|
|
84
88
|
"aria-text": {
|
|
85
89
|
"description": "Ensure role=\"text\" is used on elements with no focusable descendants",
|
|
86
90
|
"help": "\"role=text\" should have no focusable descendants"
|
|
@@ -460,6 +464,7 @@
|
|
|
460
464
|
"pass": "ARIA attribute is allowed",
|
|
461
465
|
"fail": {
|
|
462
466
|
"checkbox": "Remove aria-checked, or set it to \"${data.checkState}\" to match the real checkbox state",
|
|
467
|
+
"radio": "Remove aria-checked, or set it to \"${data.checkState}\" to match the real radio state",
|
|
463
468
|
"rowSingular": "This attribute is supported with treegrid rows, but not ${data.ownerRole}: ${data.invalidAttrs}",
|
|
464
469
|
"rowPlural": "These attributes are supported with treegrid rows, but not ${data.ownerRole}: ${data.invalidAttrs}"
|
|
465
470
|
}
|
|
@@ -453,6 +453,7 @@
|
|
|
453
453
|
"pass": "ARIA 属性が許可されています",
|
|
454
454
|
"fail": {
|
|
455
455
|
"checkbox": "aria-checkedを削除するか\"${data.checkState}\"を設定して、チェックボックスの実際の状態と合うようにしましょう",
|
|
456
|
+
"radio": "aria-checkedを削除するか\"${data.checkState}\"を設定して、ラジオボタンの実際の状態と合うようにしましょう",
|
|
456
457
|
"rowSingular": "treegridの行でサポートされている属性ですが、${data.ownerRole}: ${data.invalidAttrs}の場合はこの限りではありません",
|
|
457
458
|
"rowPlural": "treegridの行でサポートされている属性ですが、${data.ownerRole}: ${data.invalidAttrs}の場合はこの限りではありません"
|
|
458
459
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axe-core",
|
|
3
3
|
"description": "Accessibility engine for automated Web UI testing",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.12.0",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=4"
|
|
@@ -61,7 +61,8 @@
|
|
|
61
61
|
"axe.d.ts",
|
|
62
62
|
"sri-history.json",
|
|
63
63
|
"locales/",
|
|
64
|
-
"LICENSE-3RD-PARTY.txt"
|
|
64
|
+
"LICENSE-3RD-PARTY.txt",
|
|
65
|
+
"gather-internals.js"
|
|
65
66
|
],
|
|
66
67
|
"standard-version": {
|
|
67
68
|
"scripts": {
|
|
@@ -90,6 +91,7 @@
|
|
|
90
91
|
"test:unit:api": "npm run test:unit -- testDirs=api",
|
|
91
92
|
"test:unit:integration": "npm run test:unit -- testDirs=integration",
|
|
92
93
|
"test:unit:virtual-rules": "npm run test:unit -- testDirs=virtual-rules",
|
|
94
|
+
"test:unit:gather-internals": "npm run test:unit -- testDirs=gather-internals",
|
|
93
95
|
"integration": "node test/integration/full/test-webdriver.js",
|
|
94
96
|
"integration:apg": "mocha --fail-zero test/aria-practices/*.spec.js",
|
|
95
97
|
"integration:chrome": "npm run integration -- browser=Chrome",
|
|
@@ -110,6 +112,7 @@
|
|
|
110
112
|
"rule-gen": "node build/rule-generator",
|
|
111
113
|
"sri-update": "grunt build && node build/sri-update && git add sri-history.json",
|
|
112
114
|
"sri-validate": "node build/sri-update --validate",
|
|
115
|
+
"codemod:modernize-tests": "node build/codemods/modernize-test-files.mjs",
|
|
113
116
|
"fmt": "prettier --write .",
|
|
114
117
|
"fmt:check": "prettier --check .",
|
|
115
118
|
"prepare": "husky && npm run patch",
|
|
@@ -124,7 +127,7 @@
|
|
|
124
127
|
"@babel/preset-env": "^7.20.2",
|
|
125
128
|
"@babel/runtime-corejs3": "^7.20.7",
|
|
126
129
|
"@deque/dot": "^1.1.5",
|
|
127
|
-
"@types/node": "^
|
|
130
|
+
"@types/node": "^25.6.0",
|
|
128
131
|
"aria-practices": "github:w3c/aria-practices#ce0336bd82d7d3651abcbde86af644197ddbc629",
|
|
129
132
|
"aria-query": "^5.1.3",
|
|
130
133
|
"chai": "^4.3.7",
|
|
@@ -158,7 +161,7 @@
|
|
|
158
161
|
"inquirer": "^8.2.5",
|
|
159
162
|
"jquery": "^4.0.0",
|
|
160
163
|
"jsdoc": "^4.0.2",
|
|
161
|
-
"jsdom": "^
|
|
164
|
+
"jsdom": "^29.0.2",
|
|
162
165
|
"karma": "^6.4.1",
|
|
163
166
|
"karma-chai": "^0.1.0",
|
|
164
167
|
"karma-chrome-launcher": "^3.1.1",
|
|
@@ -173,17 +176,19 @@
|
|
|
173
176
|
"node-notifier": "^10.0.1",
|
|
174
177
|
"npm-run-all": "^4.1.5",
|
|
175
178
|
"outdent": "^0.8.0",
|
|
179
|
+
"parse5": "^8.0.0",
|
|
176
180
|
"patch-package": "^8.0.0",
|
|
177
181
|
"prettier": "^3.0.3",
|
|
182
|
+
"recast": "^0.23.11",
|
|
178
183
|
"revalidator": "^0.3.1",
|
|
179
184
|
"selenium-webdriver": "^4.7.1",
|
|
180
185
|
"serve-handler": "^6.1.5",
|
|
181
186
|
"sinon": "^21.0.0",
|
|
182
187
|
"sri-toolbox": "^0.2.0",
|
|
183
188
|
"standard-version": "^9.5.0",
|
|
184
|
-
"start-server-and-test": "^
|
|
189
|
+
"start-server-and-test": "^3.0.2",
|
|
185
190
|
"typedarray": "^0.0.7",
|
|
186
|
-
"typescript": "^
|
|
191
|
+
"typescript": "^6.0.3",
|
|
187
192
|
"uglify-js": "^3.17.4",
|
|
188
193
|
"wcag-act-rules": "github:w3c/wcag-act-rules#5adb55d19eb2cd7fb23213b2d1acedf9004dc063",
|
|
189
194
|
"weakmap-polyfill": "^2.0.4"
|
|
@@ -414,5 +414,9 @@
|
|
|
414
414
|
"4.11.4": {
|
|
415
415
|
"axe.js": "sha256-MFYbxYKg+pR6osY47p1hwmvMOb7f5kMTHtPU7APqp/A=",
|
|
416
416
|
"axe.min.js": "sha256-+4OkN42Xjst9La5Io6N3ioTJcaxpLzr9RdcU+6icDw0="
|
|
417
|
+
},
|
|
418
|
+
"4.12.0": {
|
|
419
|
+
"axe.js": "sha256-oNBNtCwIenGwI5OepWKyxcy5/OyV+O6pYjPmYhZrVvU=",
|
|
420
|
+
"axe.min.js": "sha256-oK/ECKvsvgb/dnUDPn6ixARmGBYhZ6qkzhAwsQlj3s4="
|
|
417
421
|
}
|
|
418
422
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: govuk_publishing_components
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 66.
|
|
4
|
+
version: 66.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- GOV.UK Dev
|
|
@@ -1096,6 +1096,7 @@ files:
|
|
|
1096
1096
|
- node_modules/axe-core/axe.d.ts
|
|
1097
1097
|
- node_modules/axe-core/axe.js
|
|
1098
1098
|
- node_modules/axe-core/axe.min.js
|
|
1099
|
+
- node_modules/axe-core/gather-internals.js
|
|
1099
1100
|
- node_modules/axe-core/locales/README.md
|
|
1100
1101
|
- node_modules/axe-core/locales/_template.json
|
|
1101
1102
|
- node_modules/axe-core/locales/da.json
|
|
@@ -1108,8 +1109,8 @@ files:
|
|
|
1108
1109
|
- node_modules/axe-core/locales/it.json
|
|
1109
1110
|
- node_modules/axe-core/locales/ja.json
|
|
1110
1111
|
- node_modules/axe-core/locales/ko.json
|
|
1112
|
+
- node_modules/axe-core/locales/nb.json
|
|
1111
1113
|
- node_modules/axe-core/locales/nl.json
|
|
1112
|
-
- node_modules/axe-core/locales/no_NB.json
|
|
1113
1114
|
- node_modules/axe-core/locales/pl.json
|
|
1114
1115
|
- node_modules/axe-core/locales/pt_BR.json
|
|
1115
1116
|
- node_modules/axe-core/locales/pt_PT.json
|
|
@@ -2128,7 +2129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
2128
2129
|
- !ruby/object:Gem::Version
|
|
2129
2130
|
version: '0'
|
|
2130
2131
|
requirements: []
|
|
2131
|
-
rubygems_version: 4.0.
|
|
2132
|
+
rubygems_version: 4.0.14
|
|
2132
2133
|
specification_version: 4
|
|
2133
2134
|
summary: A gem to document components in GOV.UK frontend applications
|
|
2134
2135
|
test_files: []
|