govuk_publishing_components 12.13.0 → 12.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/govuk_publishing_components/components/accessible-autocomplete.js +37 -0
- data/app/assets/javascripts/govuk_publishing_components/components/checkboxes.js +6 -5
- data/app/assets/javascripts/govuk_publishing_components/components/copy-to-clipboard.js +15 -15
- data/app/assets/javascripts/govuk_publishing_components/components/feedback.js +2 -4
- data/app/assets/javascripts/govuk_publishing_components/components/initial-focus.js +8 -8
- data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +3 -3
- data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_accessible-autocomplete.scss +16 -0
- data/app/views/govuk_publishing_components/components/_accessible_autocomplete.html.erb +24 -0
- data/app/views/govuk_publishing_components/components/docs/accessible_autocomplete.yml +42 -0
- data/config/initializers/assets.rb +1 -0
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/accessible-autocomplete/CHANGELOG.md +269 -0
- data/node_modules/accessible-autocomplete/CONTRIBUTING.md +150 -0
- data/node_modules/accessible-autocomplete/LICENSE.txt +20 -0
- data/node_modules/accessible-autocomplete/Procfile +1 -0
- data/node_modules/accessible-autocomplete/README.md +416 -0
- data/node_modules/accessible-autocomplete/accessibility-criteria.md +42 -0
- data/node_modules/accessible-autocomplete/app.json +15 -0
- data/node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.css +1 -0
- data/node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.js +2 -0
- data/node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.js.map +1 -0
- data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.preact.min.js +2 -0
- data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.preact.min.js.map +1 -0
- data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.react.min.js +2 -0
- data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.react.min.js.map +1 -0
- data/node_modules/accessible-autocomplete/examples/form.html +671 -0
- data/node_modules/accessible-autocomplete/examples/index.html +616 -0
- data/node_modules/accessible-autocomplete/examples/preact/index.html +346 -0
- data/node_modules/accessible-autocomplete/examples/react/index.html +347 -0
- data/node_modules/accessible-autocomplete/package.json +192 -0
- data/node_modules/accessible-autocomplete/preact.js +1 -0
- data/node_modules/accessible-autocomplete/react.js +1 -0
- data/node_modules/accessible-autocomplete/scripts/check-staged.js +14 -0
- data/node_modules/accessible-autocomplete/src/autocomplete.css +141 -0
- data/node_modules/accessible-autocomplete/src/autocomplete.js +524 -0
- data/node_modules/accessible-autocomplete/src/dropdown-arrow-down.js +11 -0
- data/node_modules/accessible-autocomplete/src/status.js +80 -0
- data/node_modules/accessible-autocomplete/src/wrapper.js +60 -0
- data/node_modules/accessible-autocomplete/test/functional/dropdown-arrow-down.js +44 -0
- data/node_modules/accessible-autocomplete/test/functional/index.js +485 -0
- data/node_modules/accessible-autocomplete/test/functional/wrapper.js +267 -0
- data/node_modules/accessible-autocomplete/test/integration/index.js +188 -0
- data/node_modules/accessible-autocomplete/test/karma.config.js +42 -0
- data/node_modules/accessible-autocomplete/test/wdio.config.js +80 -0
- data/node_modules/accessible-autocomplete/webpack.config.babel.js +193 -0
- data/node_modules/preact/LICENSE +21 -0
- data/node_modules/preact/README.md +580 -0
- data/node_modules/preact/debug.js +112 -0
- data/node_modules/preact/debug.js.map +1 -0
- data/node_modules/preact/debug/index.js +121 -0
- data/node_modules/preact/devtools.js +403 -0
- data/node_modules/preact/devtools.js.map +1 -0
- data/node_modules/preact/devtools/devtools.js +395 -0
- data/node_modules/preact/devtools/index.js +4 -0
- data/node_modules/preact/dist/preact.d.ts +891 -0
- data/node_modules/preact/dist/preact.dev.js +718 -0
- data/node_modules/preact/dist/preact.dev.js.map +1 -0
- data/node_modules/preact/dist/preact.js +408 -0
- data/node_modules/preact/dist/preact.js.flow +13 -0
- data/node_modules/preact/dist/preact.js.map +1 -0
- data/node_modules/preact/dist/preact.min.js +2 -0
- data/node_modules/preact/dist/preact.min.js.map +1 -0
- data/node_modules/preact/dist/preact.mjs +715 -0
- data/node_modules/preact/dist/preact.mjs.map +1 -0
- data/node_modules/preact/package.json +218 -0
- data/node_modules/preact/src/clone-element.js +18 -0
- data/node_modules/preact/src/component.js +90 -0
- data/node_modules/preact/src/constants.js +17 -0
- data/node_modules/preact/src/dom/index.js +138 -0
- data/node_modules/preact/src/h.js +86 -0
- data/node_modules/preact/src/options.js +22 -0
- data/node_modules/preact/src/preact.d.ts +891 -0
- data/node_modules/preact/src/preact.js +26 -0
- data/node_modules/preact/src/preact.js.flow +13 -0
- data/node_modules/preact/src/render-queue.js +28 -0
- data/node_modules/preact/src/render.js +22 -0
- data/node_modules/preact/src/util.js +19 -0
- data/node_modules/preact/src/vdom/component-recycler.js +48 -0
- data/node_modules/preact/src/vdom/component.js +296 -0
- data/node_modules/preact/src/vdom/diff.js +336 -0
- data/node_modules/preact/src/vdom/index.js +54 -0
- data/node_modules/preact/src/vnode.js +9 -0
- data/node_modules/preact/typings.json +5 -0
- metadata +78 -2
@@ -0,0 +1,336 @@
|
|
1
|
+
import { ATTR_KEY } from '../constants';
|
2
|
+
import { isSameNodeType, isNamedNode } from './index';
|
3
|
+
import { buildComponentFromVNode } from './component';
|
4
|
+
import { createNode, setAccessor } from '../dom/index';
|
5
|
+
import { unmountComponent } from './component';
|
6
|
+
import options from '../options';
|
7
|
+
import { removeNode } from '../dom/index';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Queue of components that have been mounted and are awaiting componentDidMount
|
11
|
+
* @type {Array<import('../component').Component>}
|
12
|
+
*/
|
13
|
+
export const mounts = [];
|
14
|
+
|
15
|
+
/** Diff recursion count, used to track the end of the diff cycle. */
|
16
|
+
export let diffLevel = 0;
|
17
|
+
|
18
|
+
/** Global flag indicating if the diff is currently within an SVG */
|
19
|
+
let isSvgMode = false;
|
20
|
+
|
21
|
+
/** Global flag indicating if the diff is performing hydration */
|
22
|
+
let hydrating = false;
|
23
|
+
|
24
|
+
/** Invoke queued componentDidMount lifecycle methods */
|
25
|
+
export function flushMounts() {
|
26
|
+
let c;
|
27
|
+
while ((c=mounts.pop())) {
|
28
|
+
if (options.afterMount) options.afterMount(c);
|
29
|
+
if (c.componentDidMount) c.componentDidMount();
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Apply differences in a given vnode (and it's deep children) to a real DOM Node.
|
36
|
+
* @param {import('../dom').PreactElement} dom A DOM node to mutate into the shape of a `vnode`
|
37
|
+
* @param {import('../vnode').VNode} vnode A VNode (with descendants forming a tree) representing
|
38
|
+
* the desired DOM structure
|
39
|
+
* @param {object} context The current context
|
40
|
+
* @param {boolean} mountAll Whether or not to immediately mount all components
|
41
|
+
* @param {Element} parent ?
|
42
|
+
* @param {boolean} componentRoot ?
|
43
|
+
* @returns {import('../dom').PreactElement} The created/mutated element
|
44
|
+
* @private
|
45
|
+
*/
|
46
|
+
export function diff(dom, vnode, context, mountAll, parent, componentRoot) {
|
47
|
+
// diffLevel having been 0 here indicates initial entry into the diff (not a subdiff)
|
48
|
+
if (!diffLevel++) {
|
49
|
+
// when first starting the diff, check if we're diffing an SVG or within an SVG
|
50
|
+
isSvgMode = parent!=null && parent.ownerSVGElement!==undefined;
|
51
|
+
|
52
|
+
// hydration is indicated by the existing element to be diffed not having a prop cache
|
53
|
+
hydrating = dom!=null && !(ATTR_KEY in dom);
|
54
|
+
}
|
55
|
+
|
56
|
+
let ret = idiff(dom, vnode, context, mountAll, componentRoot);
|
57
|
+
|
58
|
+
// append the element if its a new parent
|
59
|
+
if (parent && ret.parentNode!==parent) parent.appendChild(ret);
|
60
|
+
|
61
|
+
// diffLevel being reduced to 0 means we're exiting the diff
|
62
|
+
if (!--diffLevel) {
|
63
|
+
hydrating = false;
|
64
|
+
// invoke queued componentDidMount lifecycle methods
|
65
|
+
if (!componentRoot) flushMounts();
|
66
|
+
}
|
67
|
+
|
68
|
+
return ret;
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Internals of `diff()`, separated to allow bypassing diffLevel / mount flushing.
|
74
|
+
* @param {import('../dom').PreactElement} dom A DOM node to mutate into the shape of a `vnode`
|
75
|
+
* @param {import('../vnode').VNode} vnode A VNode (with descendants forming a tree) representing the desired DOM structure
|
76
|
+
* @param {object} context The current context
|
77
|
+
* @param {boolean} mountAll Whether or not to immediately mount all components
|
78
|
+
* @param {boolean} [componentRoot] ?
|
79
|
+
* @private
|
80
|
+
*/
|
81
|
+
function idiff(dom, vnode, context, mountAll, componentRoot) {
|
82
|
+
let out = dom,
|
83
|
+
prevSvgMode = isSvgMode;
|
84
|
+
|
85
|
+
// empty values (null, undefined, booleans) render as empty Text nodes
|
86
|
+
if (vnode==null || typeof vnode==='boolean') vnode = '';
|
87
|
+
|
88
|
+
|
89
|
+
// Fast case: Strings & Numbers create/update Text nodes.
|
90
|
+
if (typeof vnode==='string' || typeof vnode==='number') {
|
91
|
+
|
92
|
+
// update if it's already a Text node:
|
93
|
+
if (dom && dom.splitText!==undefined && dom.parentNode && (!dom._component || componentRoot)) {
|
94
|
+
/* istanbul ignore if */ /* Browser quirk that can't be covered: https://github.com/developit/preact/commit/fd4f21f5c45dfd75151bd27b4c217d8003aa5eb9 */
|
95
|
+
if (dom.nodeValue!=vnode) {
|
96
|
+
dom.nodeValue = vnode;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
// it wasn't a Text node: replace it with one and recycle the old Element
|
101
|
+
out = document.createTextNode(vnode);
|
102
|
+
if (dom) {
|
103
|
+
if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
|
104
|
+
recollectNodeTree(dom, true);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
out[ATTR_KEY] = true;
|
109
|
+
|
110
|
+
return out;
|
111
|
+
}
|
112
|
+
|
113
|
+
|
114
|
+
// If the VNode represents a Component, perform a component diff:
|
115
|
+
let vnodeName = vnode.nodeName;
|
116
|
+
if (typeof vnodeName==='function') {
|
117
|
+
return buildComponentFromVNode(dom, vnode, context, mountAll);
|
118
|
+
}
|
119
|
+
|
120
|
+
|
121
|
+
// Tracks entering and exiting SVG namespace when descending through the tree.
|
122
|
+
isSvgMode = vnodeName==='svg' ? true : vnodeName==='foreignObject' ? false : isSvgMode;
|
123
|
+
|
124
|
+
|
125
|
+
// If there's no existing element or it's the wrong type, create a new one:
|
126
|
+
vnodeName = String(vnodeName);
|
127
|
+
if (!dom || !isNamedNode(dom, vnodeName)) {
|
128
|
+
out = createNode(vnodeName, isSvgMode);
|
129
|
+
|
130
|
+
if (dom) {
|
131
|
+
// move children into the replacement node
|
132
|
+
while (dom.firstChild) out.appendChild(dom.firstChild);
|
133
|
+
|
134
|
+
// if the previous Element was mounted into the DOM, replace it inline
|
135
|
+
if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
|
136
|
+
|
137
|
+
// recycle the old element (skips non-Element node types)
|
138
|
+
recollectNodeTree(dom, true);
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
142
|
+
|
143
|
+
let fc = out.firstChild,
|
144
|
+
props = out[ATTR_KEY],
|
145
|
+
vchildren = vnode.children;
|
146
|
+
|
147
|
+
if (props==null) {
|
148
|
+
props = out[ATTR_KEY] = {};
|
149
|
+
for (let a=out.attributes, i=a.length; i--; ) props[a[i].name] = a[i].value;
|
150
|
+
}
|
151
|
+
|
152
|
+
// Optimization: fast-path for elements containing a single TextNode:
|
153
|
+
if (!hydrating && vchildren && vchildren.length===1 && typeof vchildren[0]==='string' && fc!=null && fc.splitText!==undefined && fc.nextSibling==null) {
|
154
|
+
if (fc.nodeValue!=vchildren[0]) {
|
155
|
+
fc.nodeValue = vchildren[0];
|
156
|
+
}
|
157
|
+
}
|
158
|
+
// otherwise, if there are existing or new children, diff them:
|
159
|
+
else if (vchildren && vchildren.length || fc!=null) {
|
160
|
+
innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML!=null);
|
161
|
+
}
|
162
|
+
|
163
|
+
|
164
|
+
// Apply attributes/props from VNode to the DOM Element:
|
165
|
+
diffAttributes(out, vnode.attributes, props);
|
166
|
+
|
167
|
+
|
168
|
+
// restore previous SVG mode: (in case we're exiting an SVG namespace)
|
169
|
+
isSvgMode = prevSvgMode;
|
170
|
+
|
171
|
+
return out;
|
172
|
+
}
|
173
|
+
|
174
|
+
|
175
|
+
/**
|
176
|
+
* Apply child and attribute changes between a VNode and a DOM Node to the DOM.
|
177
|
+
* @param {import('../dom').PreactElement} dom Element whose children should be compared & mutated
|
178
|
+
* @param {Array<import('../vnode').VNode>} vchildren Array of VNodes to compare to `dom.childNodes`
|
179
|
+
* @param {object} context Implicitly descendant context object (from most
|
180
|
+
* recent `getChildContext()`)
|
181
|
+
* @param {boolean} mountAll Whether or not to immediately mount all components
|
182
|
+
* @param {boolean} isHydrating if `true`, consumes externally created elements
|
183
|
+
* similar to hydration
|
184
|
+
*/
|
185
|
+
function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
|
186
|
+
let originalChildren = dom.childNodes,
|
187
|
+
children = [],
|
188
|
+
keyed = {},
|
189
|
+
keyedLen = 0,
|
190
|
+
min = 0,
|
191
|
+
len = originalChildren.length,
|
192
|
+
childrenLen = 0,
|
193
|
+
vlen = vchildren ? vchildren.length : 0,
|
194
|
+
j, c, f, vchild, child;
|
195
|
+
|
196
|
+
// Build up a map of keyed children and an Array of unkeyed children:
|
197
|
+
if (len!==0) {
|
198
|
+
for (let i=0; i<len; i++) {
|
199
|
+
let child = originalChildren[i],
|
200
|
+
props = child[ATTR_KEY],
|
201
|
+
key = vlen && props ? child._component ? child._component.__key : props.key : null;
|
202
|
+
if (key!=null) {
|
203
|
+
keyedLen++;
|
204
|
+
keyed[key] = child;
|
205
|
+
}
|
206
|
+
else if (props || (child.splitText!==undefined ? (isHydrating ? child.nodeValue.trim() : true) : isHydrating)) {
|
207
|
+
children[childrenLen++] = child;
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
if (vlen!==0) {
|
213
|
+
for (let i=0; i<vlen; i++) {
|
214
|
+
vchild = vchildren[i];
|
215
|
+
child = null;
|
216
|
+
|
217
|
+
// attempt to find a node based on key matching
|
218
|
+
let key = vchild.key;
|
219
|
+
if (key!=null) {
|
220
|
+
if (keyedLen && keyed[key]!==undefined) {
|
221
|
+
child = keyed[key];
|
222
|
+
keyed[key] = undefined;
|
223
|
+
keyedLen--;
|
224
|
+
}
|
225
|
+
}
|
226
|
+
// attempt to pluck a node of the same type from the existing children
|
227
|
+
else if (min<childrenLen) {
|
228
|
+
for (j=min; j<childrenLen; j++) {
|
229
|
+
if (children[j]!==undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {
|
230
|
+
child = c;
|
231
|
+
children[j] = undefined;
|
232
|
+
if (j===childrenLen-1) childrenLen--;
|
233
|
+
if (j===min) min++;
|
234
|
+
break;
|
235
|
+
}
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
// morph the matched/found/created DOM child to match vchild (deep)
|
240
|
+
child = idiff(child, vchild, context, mountAll);
|
241
|
+
|
242
|
+
f = originalChildren[i];
|
243
|
+
if (child && child!==dom && child!==f) {
|
244
|
+
if (f==null) {
|
245
|
+
dom.appendChild(child);
|
246
|
+
}
|
247
|
+
else if (child===f.nextSibling) {
|
248
|
+
removeNode(f);
|
249
|
+
}
|
250
|
+
else {
|
251
|
+
dom.insertBefore(child, f);
|
252
|
+
}
|
253
|
+
}
|
254
|
+
}
|
255
|
+
}
|
256
|
+
|
257
|
+
|
258
|
+
// remove unused keyed children:
|
259
|
+
if (keyedLen) {
|
260
|
+
for (let i in keyed) if (keyed[i]!==undefined) recollectNodeTree(keyed[i], false);
|
261
|
+
}
|
262
|
+
|
263
|
+
// remove orphaned unkeyed children:
|
264
|
+
while (min<=childrenLen) {
|
265
|
+
if ((child = children[childrenLen--])!==undefined) recollectNodeTree(child, false);
|
266
|
+
}
|
267
|
+
}
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
/**
|
272
|
+
* Recursively recycle (or just unmount) a node and its descendants.
|
273
|
+
* @param {import('../dom').PreactElement} node DOM node to start
|
274
|
+
* unmount/removal from
|
275
|
+
* @param {boolean} [unmountOnly=false] If `true`, only triggers unmount
|
276
|
+
* lifecycle, skips removal
|
277
|
+
*/
|
278
|
+
export function recollectNodeTree(node, unmountOnly) {
|
279
|
+
let component = node._component;
|
280
|
+
if (component) {
|
281
|
+
// if node is owned by a Component, unmount that component (ends up recursing back here)
|
282
|
+
unmountComponent(component);
|
283
|
+
}
|
284
|
+
else {
|
285
|
+
// If the node's VNode had a ref function, invoke it with null here.
|
286
|
+
// (this is part of the React spec, and smart for unsetting references)
|
287
|
+
if (node[ATTR_KEY]!=null && node[ATTR_KEY].ref) node[ATTR_KEY].ref(null);
|
288
|
+
|
289
|
+
if (unmountOnly===false || node[ATTR_KEY]==null) {
|
290
|
+
removeNode(node);
|
291
|
+
}
|
292
|
+
|
293
|
+
removeChildren(node);
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Recollect/unmount all children.
|
300
|
+
* - we use .lastChild here because it causes less reflow than .firstChild
|
301
|
+
* - it's also cheaper than accessing the .childNodes Live NodeList
|
302
|
+
*/
|
303
|
+
export function removeChildren(node) {
|
304
|
+
node = node.lastChild;
|
305
|
+
while (node) {
|
306
|
+
let next = node.previousSibling;
|
307
|
+
recollectNodeTree(node, true);
|
308
|
+
node = next;
|
309
|
+
}
|
310
|
+
}
|
311
|
+
|
312
|
+
|
313
|
+
/**
|
314
|
+
* Apply differences in attributes from a VNode to the given DOM Element.
|
315
|
+
* @param {import('../dom').PreactElement} dom Element with attributes to diff `attrs` against
|
316
|
+
* @param {object} attrs The desired end-state key-value attribute pairs
|
317
|
+
* @param {object} old Current/previous attributes (from previous VNode or
|
318
|
+
* element's prop cache)
|
319
|
+
*/
|
320
|
+
function diffAttributes(dom, attrs, old) {
|
321
|
+
let name;
|
322
|
+
|
323
|
+
// remove attributes no longer present on the vnode by setting them to undefined
|
324
|
+
for (name in old) {
|
325
|
+
if (!(attrs && attrs[name]!=null) && old[name]!=null) {
|
326
|
+
setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);
|
327
|
+
}
|
328
|
+
}
|
329
|
+
|
330
|
+
// add new & update changed attributes
|
331
|
+
for (name in attrs) {
|
332
|
+
if (name!=='children' && name!=='innerHTML' && (!(name in old) || attrs[name]!==(name==='value' || name==='checked' ? dom[name] : old[name]))) {
|
333
|
+
setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
|
334
|
+
}
|
335
|
+
}
|
336
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { extend } from '../util';
|
2
|
+
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Check if two nodes are equivalent.
|
6
|
+
* @param {import('../dom').PreactElement} node DOM Node to compare
|
7
|
+
* @param {import('../vnode').VNode} vnode Virtual DOM node to compare
|
8
|
+
* @param {boolean} [hydrating=false] If true, ignores component constructors
|
9
|
+
* when comparing.
|
10
|
+
* @private
|
11
|
+
*/
|
12
|
+
export function isSameNodeType(node, vnode, hydrating) {
|
13
|
+
if (typeof vnode==='string' || typeof vnode==='number') {
|
14
|
+
return node.splitText!==undefined;
|
15
|
+
}
|
16
|
+
if (typeof vnode.nodeName==='string') {
|
17
|
+
return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
|
18
|
+
}
|
19
|
+
return hydrating || node._componentConstructor===vnode.nodeName;
|
20
|
+
}
|
21
|
+
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Check if an Element has a given nodeName, case-insensitively.
|
25
|
+
* @param {import('../dom').PreactElement} node A DOM Element to inspect the name of.
|
26
|
+
* @param {string} nodeName Unnormalized name to compare against.
|
27
|
+
*/
|
28
|
+
export function isNamedNode(node, nodeName) {
|
29
|
+
return node.normalizedNodeName===nodeName || node.nodeName.toLowerCase()===nodeName.toLowerCase();
|
30
|
+
}
|
31
|
+
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Reconstruct Component-style `props` from a VNode.
|
35
|
+
* Ensures default/fallback values from `defaultProps`:
|
36
|
+
* Own-properties of `defaultProps` not present in `vnode.attributes` are added.
|
37
|
+
* @param {import('../vnode').VNode} vnode The VNode to get props for
|
38
|
+
* @returns {object} The props to use for this VNode
|
39
|
+
*/
|
40
|
+
export function getNodeProps(vnode) {
|
41
|
+
let props = extend({}, vnode.attributes);
|
42
|
+
props.children = vnode.children;
|
43
|
+
|
44
|
+
let defaultProps = vnode.nodeName.defaultProps;
|
45
|
+
if (defaultProps!==undefined) {
|
46
|
+
for (let i in defaultProps) {
|
47
|
+
if (props[i]===undefined) {
|
48
|
+
props[i] = defaultProps[i];
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
return props;
|
54
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/**
|
2
|
+
* Virtual DOM Node
|
3
|
+
* @typedef VNode
|
4
|
+
* @property {string | function} nodeName The string of the DOM node to create or Component constructor to render
|
5
|
+
* @property {Array<VNode | string>} children The children of node
|
6
|
+
* @property {string | number | undefined} key The key used to identify this VNode in a list
|
7
|
+
* @property {object} attributes The properties of this VNode
|
8
|
+
*/
|
9
|
+
export const VNode = function VNode() {};
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_publishing_components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.
|
4
|
+
version: 12.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: govspeak
|
@@ -308,6 +308,7 @@ files:
|
|
308
308
|
- app/assets/javascripts/component_guide/vendor/matches-polyfill.min.js
|
309
309
|
- app/assets/javascripts/component_guide/visual-regression.js
|
310
310
|
- app/assets/javascripts/govuk_publishing_components/all_components.js
|
311
|
+
- app/assets/javascripts/govuk_publishing_components/components/accessible-autocomplete.js
|
311
312
|
- app/assets/javascripts/govuk_publishing_components/components/character-count.js
|
312
313
|
- app/assets/javascripts/govuk_publishing_components/components/checkboxes.js
|
313
314
|
- app/assets/javascripts/govuk_publishing_components/components/copy-to-clipboard.js
|
@@ -324,6 +325,7 @@ files:
|
|
324
325
|
- app/assets/stylesheets/component_guide/application.scss
|
325
326
|
- app/assets/stylesheets/govuk_publishing_components/_all_components.scss
|
326
327
|
- app/assets/stylesheets/govuk_publishing_components/_all_components_print.scss
|
328
|
+
- app/assets/stylesheets/govuk_publishing_components/components/_accessible-autocomplete.scss
|
327
329
|
- app/assets/stylesheets/govuk_publishing_components/components/_back-link.scss
|
328
330
|
- app/assets/stylesheets/govuk_publishing_components/components/_breadcrumbs.scss
|
329
331
|
- app/assets/stylesheets/govuk_publishing_components/components/_button.scss
|
@@ -433,6 +435,7 @@ files:
|
|
433
435
|
- app/views/govuk_publishing_components/component_guide/index.html.erb
|
434
436
|
- app/views/govuk_publishing_components/component_guide/preview.html.erb
|
435
437
|
- app/views/govuk_publishing_components/component_guide/show.html.erb
|
438
|
+
- app/views/govuk_publishing_components/components/_accessible_autocomplete.html.erb
|
436
439
|
- app/views/govuk_publishing_components/components/_admin_analytics.html.erb
|
437
440
|
- app/views/govuk_publishing_components/components/_back_link.html.erb
|
438
441
|
- app/views/govuk_publishing_components/components/_breadcrumbs.html.erb
|
@@ -495,6 +498,7 @@ files:
|
|
495
498
|
- app/views/govuk_publishing_components/components/_title.html.erb
|
496
499
|
- app/views/govuk_publishing_components/components/_translation-nav.html.erb
|
497
500
|
- app/views/govuk_publishing_components/components/_warning_text.html.erb
|
501
|
+
- app/views/govuk_publishing_components/components/docs/accessible_autocomplete.yml
|
498
502
|
- app/views/govuk_publishing_components/components/docs/admin_analytics.yml
|
499
503
|
- app/views/govuk_publishing_components/components/docs/back_link.yml
|
500
504
|
- app/views/govuk_publishing_components/components/docs/breadcrumbs.yml
|
@@ -609,6 +613,40 @@ files:
|
|
609
613
|
- lib/govuk_publishing_components/presenters/translation_nav_helper.rb
|
610
614
|
- lib/govuk_publishing_components/version.rb
|
611
615
|
- lib/tasks/govuk_publishing_components_tasks.rake
|
616
|
+
- node_modules/accessible-autocomplete/CHANGELOG.md
|
617
|
+
- node_modules/accessible-autocomplete/CONTRIBUTING.md
|
618
|
+
- node_modules/accessible-autocomplete/LICENSE.txt
|
619
|
+
- node_modules/accessible-autocomplete/Procfile
|
620
|
+
- node_modules/accessible-autocomplete/README.md
|
621
|
+
- node_modules/accessible-autocomplete/accessibility-criteria.md
|
622
|
+
- node_modules/accessible-autocomplete/app.json
|
623
|
+
- node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.css
|
624
|
+
- node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.js
|
625
|
+
- node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.js.map
|
626
|
+
- node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.preact.min.js
|
627
|
+
- node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.preact.min.js.map
|
628
|
+
- node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.react.min.js
|
629
|
+
- node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.react.min.js.map
|
630
|
+
- node_modules/accessible-autocomplete/examples/form.html
|
631
|
+
- node_modules/accessible-autocomplete/examples/index.html
|
632
|
+
- node_modules/accessible-autocomplete/examples/preact/index.html
|
633
|
+
- node_modules/accessible-autocomplete/examples/react/index.html
|
634
|
+
- node_modules/accessible-autocomplete/package.json
|
635
|
+
- node_modules/accessible-autocomplete/preact.js
|
636
|
+
- node_modules/accessible-autocomplete/react.js
|
637
|
+
- node_modules/accessible-autocomplete/scripts/check-staged.js
|
638
|
+
- node_modules/accessible-autocomplete/src/autocomplete.css
|
639
|
+
- node_modules/accessible-autocomplete/src/autocomplete.js
|
640
|
+
- node_modules/accessible-autocomplete/src/dropdown-arrow-down.js
|
641
|
+
- node_modules/accessible-autocomplete/src/status.js
|
642
|
+
- node_modules/accessible-autocomplete/src/wrapper.js
|
643
|
+
- node_modules/accessible-autocomplete/test/functional/dropdown-arrow-down.js
|
644
|
+
- node_modules/accessible-autocomplete/test/functional/index.js
|
645
|
+
- node_modules/accessible-autocomplete/test/functional/wrapper.js
|
646
|
+
- node_modules/accessible-autocomplete/test/integration/index.js
|
647
|
+
- node_modules/accessible-autocomplete/test/karma.config.js
|
648
|
+
- node_modules/accessible-autocomplete/test/wdio.config.js
|
649
|
+
- node_modules/accessible-autocomplete/webpack.config.babel.js
|
612
650
|
- node_modules/govuk-frontend/README.md
|
613
651
|
- node_modules/govuk-frontend/all-ie8.scss
|
614
652
|
- node_modules/govuk-frontend/all.js
|
@@ -961,6 +999,44 @@ files:
|
|
961
999
|
- node_modules/jquery/src/var/support.js
|
962
1000
|
- node_modules/jquery/src/var/toString.js
|
963
1001
|
- node_modules/jquery/src/wrap.js
|
1002
|
+
- node_modules/preact/LICENSE
|
1003
|
+
- node_modules/preact/README.md
|
1004
|
+
- node_modules/preact/debug.js
|
1005
|
+
- node_modules/preact/debug.js.map
|
1006
|
+
- node_modules/preact/debug/index.js
|
1007
|
+
- node_modules/preact/devtools.js
|
1008
|
+
- node_modules/preact/devtools.js.map
|
1009
|
+
- node_modules/preact/devtools/devtools.js
|
1010
|
+
- node_modules/preact/devtools/index.js
|
1011
|
+
- node_modules/preact/dist/preact.d.ts
|
1012
|
+
- node_modules/preact/dist/preact.dev.js
|
1013
|
+
- node_modules/preact/dist/preact.dev.js.map
|
1014
|
+
- node_modules/preact/dist/preact.js
|
1015
|
+
- node_modules/preact/dist/preact.js.flow
|
1016
|
+
- node_modules/preact/dist/preact.js.map
|
1017
|
+
- node_modules/preact/dist/preact.min.js
|
1018
|
+
- node_modules/preact/dist/preact.min.js.map
|
1019
|
+
- node_modules/preact/dist/preact.mjs
|
1020
|
+
- node_modules/preact/dist/preact.mjs.map
|
1021
|
+
- node_modules/preact/package.json
|
1022
|
+
- node_modules/preact/src/clone-element.js
|
1023
|
+
- node_modules/preact/src/component.js
|
1024
|
+
- node_modules/preact/src/constants.js
|
1025
|
+
- node_modules/preact/src/dom/index.js
|
1026
|
+
- node_modules/preact/src/h.js
|
1027
|
+
- node_modules/preact/src/options.js
|
1028
|
+
- node_modules/preact/src/preact.d.ts
|
1029
|
+
- node_modules/preact/src/preact.js
|
1030
|
+
- node_modules/preact/src/preact.js.flow
|
1031
|
+
- node_modules/preact/src/render-queue.js
|
1032
|
+
- node_modules/preact/src/render.js
|
1033
|
+
- node_modules/preact/src/util.js
|
1034
|
+
- node_modules/preact/src/vdom/component-recycler.js
|
1035
|
+
- node_modules/preact/src/vdom/component.js
|
1036
|
+
- node_modules/preact/src/vdom/diff.js
|
1037
|
+
- node_modules/preact/src/vdom/index.js
|
1038
|
+
- node_modules/preact/src/vnode.js
|
1039
|
+
- node_modules/preact/typings.json
|
964
1040
|
homepage: https://github.com/alphagov/govuk_publishing_components
|
965
1041
|
licenses:
|
966
1042
|
- MIT
|