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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/components/accessible-autocomplete.js +37 -0
  3. data/app/assets/javascripts/govuk_publishing_components/components/checkboxes.js +6 -5
  4. data/app/assets/javascripts/govuk_publishing_components/components/copy-to-clipboard.js +15 -15
  5. data/app/assets/javascripts/govuk_publishing_components/components/feedback.js +2 -4
  6. data/app/assets/javascripts/govuk_publishing_components/components/initial-focus.js +8 -8
  7. data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +3 -3
  8. data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +1 -0
  9. data/app/assets/stylesheets/govuk_publishing_components/components/_accessible-autocomplete.scss +16 -0
  10. data/app/views/govuk_publishing_components/components/_accessible_autocomplete.html.erb +24 -0
  11. data/app/views/govuk_publishing_components/components/docs/accessible_autocomplete.yml +42 -0
  12. data/config/initializers/assets.rb +1 -0
  13. data/lib/govuk_publishing_components/version.rb +1 -1
  14. data/node_modules/accessible-autocomplete/CHANGELOG.md +269 -0
  15. data/node_modules/accessible-autocomplete/CONTRIBUTING.md +150 -0
  16. data/node_modules/accessible-autocomplete/LICENSE.txt +20 -0
  17. data/node_modules/accessible-autocomplete/Procfile +1 -0
  18. data/node_modules/accessible-autocomplete/README.md +416 -0
  19. data/node_modules/accessible-autocomplete/accessibility-criteria.md +42 -0
  20. data/node_modules/accessible-autocomplete/app.json +15 -0
  21. data/node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.css +1 -0
  22. data/node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.js +2 -0
  23. data/node_modules/accessible-autocomplete/dist/accessible-autocomplete.min.js.map +1 -0
  24. data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.preact.min.js +2 -0
  25. data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.preact.min.js.map +1 -0
  26. data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.react.min.js +2 -0
  27. data/node_modules/accessible-autocomplete/dist/lib/accessible-autocomplete.react.min.js.map +1 -0
  28. data/node_modules/accessible-autocomplete/examples/form.html +671 -0
  29. data/node_modules/accessible-autocomplete/examples/index.html +616 -0
  30. data/node_modules/accessible-autocomplete/examples/preact/index.html +346 -0
  31. data/node_modules/accessible-autocomplete/examples/react/index.html +347 -0
  32. data/node_modules/accessible-autocomplete/package.json +192 -0
  33. data/node_modules/accessible-autocomplete/preact.js +1 -0
  34. data/node_modules/accessible-autocomplete/react.js +1 -0
  35. data/node_modules/accessible-autocomplete/scripts/check-staged.js +14 -0
  36. data/node_modules/accessible-autocomplete/src/autocomplete.css +141 -0
  37. data/node_modules/accessible-autocomplete/src/autocomplete.js +524 -0
  38. data/node_modules/accessible-autocomplete/src/dropdown-arrow-down.js +11 -0
  39. data/node_modules/accessible-autocomplete/src/status.js +80 -0
  40. data/node_modules/accessible-autocomplete/src/wrapper.js +60 -0
  41. data/node_modules/accessible-autocomplete/test/functional/dropdown-arrow-down.js +44 -0
  42. data/node_modules/accessible-autocomplete/test/functional/index.js +485 -0
  43. data/node_modules/accessible-autocomplete/test/functional/wrapper.js +267 -0
  44. data/node_modules/accessible-autocomplete/test/integration/index.js +188 -0
  45. data/node_modules/accessible-autocomplete/test/karma.config.js +42 -0
  46. data/node_modules/accessible-autocomplete/test/wdio.config.js +80 -0
  47. data/node_modules/accessible-autocomplete/webpack.config.babel.js +193 -0
  48. data/node_modules/preact/LICENSE +21 -0
  49. data/node_modules/preact/README.md +580 -0
  50. data/node_modules/preact/debug.js +112 -0
  51. data/node_modules/preact/debug.js.map +1 -0
  52. data/node_modules/preact/debug/index.js +121 -0
  53. data/node_modules/preact/devtools.js +403 -0
  54. data/node_modules/preact/devtools.js.map +1 -0
  55. data/node_modules/preact/devtools/devtools.js +395 -0
  56. data/node_modules/preact/devtools/index.js +4 -0
  57. data/node_modules/preact/dist/preact.d.ts +891 -0
  58. data/node_modules/preact/dist/preact.dev.js +718 -0
  59. data/node_modules/preact/dist/preact.dev.js.map +1 -0
  60. data/node_modules/preact/dist/preact.js +408 -0
  61. data/node_modules/preact/dist/preact.js.flow +13 -0
  62. data/node_modules/preact/dist/preact.js.map +1 -0
  63. data/node_modules/preact/dist/preact.min.js +2 -0
  64. data/node_modules/preact/dist/preact.min.js.map +1 -0
  65. data/node_modules/preact/dist/preact.mjs +715 -0
  66. data/node_modules/preact/dist/preact.mjs.map +1 -0
  67. data/node_modules/preact/package.json +218 -0
  68. data/node_modules/preact/src/clone-element.js +18 -0
  69. data/node_modules/preact/src/component.js +90 -0
  70. data/node_modules/preact/src/constants.js +17 -0
  71. data/node_modules/preact/src/dom/index.js +138 -0
  72. data/node_modules/preact/src/h.js +86 -0
  73. data/node_modules/preact/src/options.js +22 -0
  74. data/node_modules/preact/src/preact.d.ts +891 -0
  75. data/node_modules/preact/src/preact.js +26 -0
  76. data/node_modules/preact/src/preact.js.flow +13 -0
  77. data/node_modules/preact/src/render-queue.js +28 -0
  78. data/node_modules/preact/src/render.js +22 -0
  79. data/node_modules/preact/src/util.js +19 -0
  80. data/node_modules/preact/src/vdom/component-recycler.js +48 -0
  81. data/node_modules/preact/src/vdom/component.js +296 -0
  82. data/node_modules/preact/src/vdom/diff.js +336 -0
  83. data/node_modules/preact/src/vdom/index.js +54 -0
  84. data/node_modules/preact/src/vnode.js +9 -0
  85. data/node_modules/preact/typings.json +5 -0
  86. metadata +78 -2
@@ -0,0 +1,26 @@
1
+ import { h, h as createElement } from './h';
2
+ import { cloneElement } from './clone-element';
3
+ import { Component } from './component';
4
+ import { render } from './render';
5
+ import { rerender } from './render-queue';
6
+ import options from './options';
7
+
8
+ export default {
9
+ h,
10
+ createElement,
11
+ cloneElement,
12
+ Component,
13
+ render,
14
+ rerender,
15
+ options
16
+ };
17
+
18
+ export {
19
+ h,
20
+ createElement,
21
+ cloneElement,
22
+ Component,
23
+ render,
24
+ rerender,
25
+ options
26
+ };
@@ -0,0 +1,13 @@
1
+ /* @flow */
2
+
3
+ import { createElement, cloneElement, Component, type Node } from 'react';
4
+
5
+ declare var h: createElement;
6
+
7
+ declare function render(vnode: Node, parent: Element, toReplace?: Element): Element;
8
+
9
+ export { h, createElement, cloneElement, Component, render };
10
+ export default { h, createElement, cloneElement, Component, render };
11
+
12
+ declare export function rerender(): void;
13
+ declare export var options: Object;
@@ -0,0 +1,28 @@
1
+ import options from './options';
2
+ import { defer } from './util';
3
+ import { renderComponent } from './vdom/component';
4
+
5
+ /**
6
+ * Managed queue of dirty components to be re-rendered
7
+ * @type {Array<import('./component').Component>}
8
+ */
9
+ let items = [];
10
+
11
+ /**
12
+ * Enqueue a rerender of a component
13
+ * @param {import('./component').Component} component The component to rerender
14
+ */
15
+ export function enqueueRender(component) {
16
+ if (!component._dirty && (component._dirty = true) && items.push(component)==1) {
17
+ (options.debounceRendering || defer)(rerender);
18
+ }
19
+ }
20
+
21
+ /** Rerender all enqueued dirty components */
22
+ export function rerender() {
23
+ let p, list = items;
24
+ items = [];
25
+ while ( (p = list.pop()) ) {
26
+ if (p._dirty) renderComponent(p);
27
+ }
28
+ }
@@ -0,0 +1,22 @@
1
+ import { diff } from './vdom/diff';
2
+
3
+ /**
4
+ * Render JSX into a `parent` Element.
5
+ * @param {import('./vnode').VNode} vnode A (JSX) VNode to render
6
+ * @param {import('./dom').PreactElement} parent DOM element to render into
7
+ * @param {import('./dom').PreactElement} [merge] Attempt to re-use an existing DOM tree rooted at
8
+ * `merge`
9
+ * @public
10
+ *
11
+ * @example
12
+ * // render a div into <body>:
13
+ * render(<div id="hello">hello!</div>, document.body);
14
+ *
15
+ * @example
16
+ * // render a "Thing" component into #foo:
17
+ * const Thing = ({ name }) => <span>{ name }</span>;
18
+ * render(<Thing name="one" />, document.querySelector('#foo'));
19
+ */
20
+ export function render(vnode, parent, merge) {
21
+ return diff(merge, vnode, {}, false, parent, false);
22
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Copy all properties from `props` onto `obj`.
3
+ * @param {object} obj Object onto which properties should be copied.
4
+ * @param {object} props Object from which to copy properties.
5
+ * @returns {object}
6
+ * @private
7
+ */
8
+ export function extend(obj, props) {
9
+ for (let i in props) obj[i] = props[i];
10
+ return obj;
11
+ }
12
+
13
+ /**
14
+ * Call a function asynchronously, as soon as possible. Makes
15
+ * use of HTML Promise to schedule the callback if available,
16
+ * otherwise falling back to `setTimeout` (mainly for IE<11).
17
+ * @type {(callback: function) => void}
18
+ */
19
+ export const defer = typeof Promise=='function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
@@ -0,0 +1,48 @@
1
+ import { Component } from '../component';
2
+
3
+ /**
4
+ * Retains a pool of Components for re-use.
5
+ * @type {Component[]}
6
+ * @private
7
+ */
8
+ export const recyclerComponents = [];
9
+
10
+
11
+ /**
12
+ * Create a component. Normalizes differences between PFC's and classful
13
+ * Components.
14
+ * @param {function} Ctor The constructor of the component to create
15
+ * @param {object} props The initial props of the component
16
+ * @param {object} context The initial context of the component
17
+ * @returns {import('../component').Component}
18
+ */
19
+ export function createComponent(Ctor, props, context) {
20
+ let inst, i = recyclerComponents.length;
21
+
22
+ if (Ctor.prototype && Ctor.prototype.render) {
23
+ inst = new Ctor(props, context);
24
+ Component.call(inst, props, context);
25
+ }
26
+ else {
27
+ inst = new Component(props, context);
28
+ inst.constructor = Ctor;
29
+ inst.render = doRender;
30
+ }
31
+
32
+
33
+ while (i--) {
34
+ if (recyclerComponents[i].constructor===Ctor) {
35
+ inst.nextBase = recyclerComponents[i].nextBase;
36
+ recyclerComponents.splice(i, 1);
37
+ return inst;
38
+ }
39
+ }
40
+
41
+ return inst;
42
+ }
43
+
44
+
45
+ /** The `.render()` method for a PFC backing instance. */
46
+ function doRender(props, state, context) {
47
+ return this.constructor(props, context);
48
+ }
@@ -0,0 +1,296 @@
1
+ import { SYNC_RENDER, NO_RENDER, FORCE_RENDER, ASYNC_RENDER, ATTR_KEY } from '../constants';
2
+ import options from '../options';
3
+ import { extend } from '../util';
4
+ import { enqueueRender } from '../render-queue';
5
+ import { getNodeProps } from './index';
6
+ import { diff, mounts, diffLevel, flushMounts, recollectNodeTree, removeChildren } from './diff';
7
+ import { createComponent, recyclerComponents } from './component-recycler';
8
+ import { removeNode } from '../dom/index';
9
+
10
+ /**
11
+ * Set a component's `props` and possibly re-render the component
12
+ * @param {import('../component').Component} component The Component to set props on
13
+ * @param {object} props The new props
14
+ * @param {number} renderMode Render options - specifies how to re-render the component
15
+ * @param {object} context The new context
16
+ * @param {boolean} mountAll Whether or not to immediately mount all components
17
+ */
18
+ export function setComponentProps(component, props, renderMode, context, mountAll) {
19
+ if (component._disable) return;
20
+ component._disable = true;
21
+
22
+ component.__ref = props.ref;
23
+ component.__key = props.key;
24
+ delete props.ref;
25
+ delete props.key;
26
+
27
+ if (typeof component.constructor.getDerivedStateFromProps === 'undefined') {
28
+ if (!component.base || mountAll) {
29
+ if (component.componentWillMount) component.componentWillMount();
30
+ }
31
+ else if (component.componentWillReceiveProps) {
32
+ component.componentWillReceiveProps(props, context);
33
+ }
34
+ }
35
+
36
+ if (context && context!==component.context) {
37
+ if (!component.prevContext) component.prevContext = component.context;
38
+ component.context = context;
39
+ }
40
+
41
+ if (!component.prevProps) component.prevProps = component.props;
42
+ component.props = props;
43
+
44
+ component._disable = false;
45
+
46
+ if (renderMode!==NO_RENDER) {
47
+ if (renderMode===SYNC_RENDER || options.syncComponentUpdates!==false || !component.base) {
48
+ renderComponent(component, SYNC_RENDER, mountAll);
49
+ }
50
+ else {
51
+ enqueueRender(component);
52
+ }
53
+ }
54
+
55
+ if (component.__ref) component.__ref(component);
56
+ }
57
+
58
+
59
+
60
+ /**
61
+ * Render a Component, triggering necessary lifecycle events and taking
62
+ * High-Order Components into account.
63
+ * @param {import('../component').Component} component The component to render
64
+ * @param {number} [renderMode] render mode, see constants.js for available options.
65
+ * @param {boolean} [mountAll] Whether or not to immediately mount all components
66
+ * @param {boolean} [isChild] ?
67
+ * @private
68
+ */
69
+ export function renderComponent(component, renderMode, mountAll, isChild) {
70
+ if (component._disable) return;
71
+
72
+ let props = component.props,
73
+ state = component.state,
74
+ context = component.context,
75
+ previousProps = component.prevProps || props,
76
+ previousState = component.prevState || state,
77
+ previousContext = component.prevContext || context,
78
+ isUpdate = component.base,
79
+ nextBase = component.nextBase,
80
+ initialBase = isUpdate || nextBase,
81
+ initialChildComponent = component._component,
82
+ skip = false,
83
+ snapshot = previousContext,
84
+ rendered, inst, cbase;
85
+
86
+ if (component.constructor.getDerivedStateFromProps) {
87
+ state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
88
+ component.state = state;
89
+ }
90
+
91
+ // if updating
92
+ if (isUpdate) {
93
+ component.props = previousProps;
94
+ component.state = previousState;
95
+ component.context = previousContext;
96
+ if (renderMode!==FORCE_RENDER
97
+ && component.shouldComponentUpdate
98
+ && component.shouldComponentUpdate(props, state, context) === false) {
99
+ skip = true;
100
+ }
101
+ else if (component.componentWillUpdate) {
102
+ component.componentWillUpdate(props, state, context);
103
+ }
104
+ component.props = props;
105
+ component.state = state;
106
+ component.context = context;
107
+ }
108
+
109
+ component.prevProps = component.prevState = component.prevContext = component.nextBase = null;
110
+ component._dirty = false;
111
+
112
+ if (!skip) {
113
+ rendered = component.render(props, state, context);
114
+
115
+ // context to pass to the child, can be updated via (grand-)parent component
116
+ if (component.getChildContext) {
117
+ context = extend(extend({}, context), component.getChildContext());
118
+ }
119
+
120
+ if (isUpdate && component.getSnapshotBeforeUpdate) {
121
+ snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
122
+ }
123
+
124
+ let childComponent = rendered && rendered.nodeName,
125
+ toUnmount, base;
126
+
127
+ if (typeof childComponent==='function') {
128
+ // set up high order component link
129
+
130
+ let childProps = getNodeProps(rendered);
131
+ inst = initialChildComponent;
132
+
133
+ if (inst && inst.constructor===childComponent && childProps.key==inst.__key) {
134
+ setComponentProps(inst, childProps, SYNC_RENDER, context, false);
135
+ }
136
+ else {
137
+ toUnmount = inst;
138
+
139
+ component._component = inst = createComponent(childComponent, childProps, context);
140
+ inst.nextBase = inst.nextBase || nextBase;
141
+ inst._parentComponent = component;
142
+ setComponentProps(inst, childProps, NO_RENDER, context, false);
143
+ renderComponent(inst, SYNC_RENDER, mountAll, true);
144
+ }
145
+
146
+ base = inst.base;
147
+ }
148
+ else {
149
+ cbase = initialBase;
150
+
151
+ // destroy high order component link
152
+ toUnmount = initialChildComponent;
153
+ if (toUnmount) {
154
+ cbase = component._component = null;
155
+ }
156
+
157
+ if (initialBase || renderMode===SYNC_RENDER) {
158
+ if (cbase) cbase._component = null;
159
+ base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);
160
+ }
161
+ }
162
+
163
+ if (initialBase && base!==initialBase && inst!==initialChildComponent) {
164
+ let baseParent = initialBase.parentNode;
165
+ if (baseParent && base!==baseParent) {
166
+ baseParent.replaceChild(base, initialBase);
167
+
168
+ if (!toUnmount) {
169
+ initialBase._component = null;
170
+ recollectNodeTree(initialBase, false);
171
+ }
172
+ }
173
+ }
174
+
175
+ if (toUnmount) {
176
+ unmountComponent(toUnmount);
177
+ }
178
+
179
+ component.base = base;
180
+ if (base && !isChild) {
181
+ let componentRef = component,
182
+ t = component;
183
+ while ((t=t._parentComponent)) {
184
+ (componentRef = t).base = base;
185
+ }
186
+ base._component = componentRef;
187
+ base._componentConstructor = componentRef.constructor;
188
+ }
189
+ }
190
+
191
+ if (!isUpdate || mountAll) {
192
+ mounts.unshift(component);
193
+ }
194
+ else if (!skip) {
195
+ // Ensure that pending componentDidMount() hooks of child components
196
+ // are called before the componentDidUpdate() hook in the parent.
197
+ // Note: disabled as it causes duplicate hooks, see https://github.com/developit/preact/issues/750
198
+ // flushMounts();
199
+
200
+ if (component.componentDidUpdate) {
201
+ component.componentDidUpdate(previousProps, previousState, snapshot);
202
+ }
203
+ if (options.afterUpdate) options.afterUpdate(component);
204
+ }
205
+
206
+ while (component._renderCallbacks.length) component._renderCallbacks.pop().call(component);
207
+
208
+ if (!diffLevel && !isChild) flushMounts();
209
+ }
210
+
211
+
212
+
213
+ /**
214
+ * Apply the Component referenced by a VNode to the DOM.
215
+ * @param {import('../dom').PreactElement} dom The DOM node to mutate
216
+ * @param {import('../vnode').VNode} vnode A Component-referencing VNode
217
+ * @param {object} context The current context
218
+ * @param {boolean} mountAll Whether or not to immediately mount all components
219
+ * @returns {import('../dom').PreactElement} The created/mutated element
220
+ * @private
221
+ */
222
+ export function buildComponentFromVNode(dom, vnode, context, mountAll) {
223
+ let c = dom && dom._component,
224
+ originalComponent = c,
225
+ oldDom = dom,
226
+ isDirectOwner = c && dom._componentConstructor===vnode.nodeName,
227
+ isOwner = isDirectOwner,
228
+ props = getNodeProps(vnode);
229
+ while (c && !isOwner && (c=c._parentComponent)) {
230
+ isOwner = c.constructor===vnode.nodeName;
231
+ }
232
+
233
+ if (c && isOwner && (!mountAll || c._component)) {
234
+ setComponentProps(c, props, ASYNC_RENDER, context, mountAll);
235
+ dom = c.base;
236
+ }
237
+ else {
238
+ if (originalComponent && !isDirectOwner) {
239
+ unmountComponent(originalComponent);
240
+ dom = oldDom = null;
241
+ }
242
+
243
+ c = createComponent(vnode.nodeName, props, context);
244
+ if (dom && !c.nextBase) {
245
+ c.nextBase = dom;
246
+ // passing dom/oldDom as nextBase will recycle it if unused, so bypass recycling on L229:
247
+ oldDom = null;
248
+ }
249
+ setComponentProps(c, props, SYNC_RENDER, context, mountAll);
250
+ dom = c.base;
251
+
252
+ if (oldDom && dom!==oldDom) {
253
+ oldDom._component = null;
254
+ recollectNodeTree(oldDom, false);
255
+ }
256
+ }
257
+
258
+ return dom;
259
+ }
260
+
261
+
262
+
263
+ /**
264
+ * Remove a component from the DOM and recycle it.
265
+ * @param {import('../component').Component} component The Component instance to unmount
266
+ * @private
267
+ */
268
+ export function unmountComponent(component) {
269
+ if (options.beforeUnmount) options.beforeUnmount(component);
270
+
271
+ let base = component.base;
272
+
273
+ component._disable = true;
274
+
275
+ if (component.componentWillUnmount) component.componentWillUnmount();
276
+
277
+ component.base = null;
278
+
279
+ // recursively tear down & recollect high-order component children:
280
+ let inner = component._component;
281
+ if (inner) {
282
+ unmountComponent(inner);
283
+ }
284
+ else if (base) {
285
+ if (base[ATTR_KEY] && base[ATTR_KEY].ref) base[ATTR_KEY].ref(null);
286
+
287
+ component.nextBase = base;
288
+
289
+ removeNode(base);
290
+ recyclerComponents.push(component);
291
+
292
+ removeChildren(base);
293
+ }
294
+
295
+ if (component.__ref) component.__ref(null);
296
+ }