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,718 @@
1
+ (function () {
2
+ 'use strict';
3
+
4
+ var VNode = function VNode() {};
5
+
6
+ var options = {};
7
+
8
+ var stack = [];
9
+
10
+ var EMPTY_CHILDREN = [];
11
+
12
+ function h(nodeName, attributes) {
13
+ var children = EMPTY_CHILDREN,
14
+ lastSimple,
15
+ child,
16
+ simple,
17
+ i;
18
+ for (i = arguments.length; i-- > 2;) {
19
+ stack.push(arguments[i]);
20
+ }
21
+ if (attributes && attributes.children != null) {
22
+ if (!stack.length) stack.push(attributes.children);
23
+ delete attributes.children;
24
+ }
25
+ while (stack.length) {
26
+ if ((child = stack.pop()) && child.pop !== undefined) {
27
+ for (i = child.length; i--;) {
28
+ stack.push(child[i]);
29
+ }
30
+ } else {
31
+ if (typeof child === 'boolean') child = null;
32
+
33
+ if (simple = typeof nodeName !== 'function') {
34
+ if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;
35
+ }
36
+
37
+ if (simple && lastSimple) {
38
+ children[children.length - 1] += child;
39
+ } else if (children === EMPTY_CHILDREN) {
40
+ children = [child];
41
+ } else {
42
+ children.push(child);
43
+ }
44
+
45
+ lastSimple = simple;
46
+ }
47
+ }
48
+
49
+ var p = new VNode();
50
+ p.nodeName = nodeName;
51
+ p.children = children;
52
+ p.attributes = attributes == null ? undefined : attributes;
53
+ p.key = attributes == null ? undefined : attributes.key;
54
+
55
+ if (options.vnode !== undefined) options.vnode(p);
56
+
57
+ return p;
58
+ }
59
+
60
+ function extend(obj, props) {
61
+ for (var i in props) {
62
+ obj[i] = props[i];
63
+ }return obj;
64
+ }
65
+
66
+ var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
67
+
68
+ function cloneElement(vnode, props) {
69
+ return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
70
+ }
71
+
72
+ var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
73
+
74
+ var items = [];
75
+
76
+ function enqueueRender(component) {
77
+ if (!component._dirty && (component._dirty = true) && items.push(component) == 1) {
78
+ (options.debounceRendering || defer)(rerender);
79
+ }
80
+ }
81
+
82
+ function rerender() {
83
+ var p,
84
+ list = items;
85
+ items = [];
86
+ while (p = list.pop()) {
87
+ if (p._dirty) renderComponent(p);
88
+ }
89
+ }
90
+
91
+ function isSameNodeType(node, vnode, hydrating) {
92
+ if (typeof vnode === 'string' || typeof vnode === 'number') {
93
+ return node.splitText !== undefined;
94
+ }
95
+ if (typeof vnode.nodeName === 'string') {
96
+ return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
97
+ }
98
+ return hydrating || node._componentConstructor === vnode.nodeName;
99
+ }
100
+
101
+ function isNamedNode(node, nodeName) {
102
+ return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
103
+ }
104
+
105
+ function getNodeProps(vnode) {
106
+ var props = extend({}, vnode.attributes);
107
+ props.children = vnode.children;
108
+
109
+ var defaultProps = vnode.nodeName.defaultProps;
110
+ if (defaultProps !== undefined) {
111
+ for (var i in defaultProps) {
112
+ if (props[i] === undefined) {
113
+ props[i] = defaultProps[i];
114
+ }
115
+ }
116
+ }
117
+
118
+ return props;
119
+ }
120
+
121
+ function createNode(nodeName, isSvg) {
122
+ var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);
123
+ node.normalizedNodeName = nodeName;
124
+ return node;
125
+ }
126
+
127
+ function removeNode(node) {
128
+ var parentNode = node.parentNode;
129
+ if (parentNode) parentNode.removeChild(node);
130
+ }
131
+
132
+ function setAccessor(node, name, old, value, isSvg) {
133
+ if (name === 'className') name = 'class';
134
+
135
+ if (name === 'key') {} else if (name === 'ref') {
136
+ if (old) old(null);
137
+ if (value) value(node);
138
+ } else if (name === 'class' && !isSvg) {
139
+ node.className = value || '';
140
+ } else if (name === 'style') {
141
+ if (!value || typeof value === 'string' || typeof old === 'string') {
142
+ node.style.cssText = value || '';
143
+ }
144
+ if (value && typeof value === 'object') {
145
+ if (typeof old !== 'string') {
146
+ for (var i in old) {
147
+ if (!(i in value)) node.style[i] = '';
148
+ }
149
+ }
150
+ for (var i in value) {
151
+ node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];
152
+ }
153
+ }
154
+ } else if (name === 'dangerouslySetInnerHTML') {
155
+ if (value) node.innerHTML = value.__html || '';
156
+ } else if (name[0] == 'o' && name[1] == 'n') {
157
+ var useCapture = name !== (name = name.replace(/Capture$/, ''));
158
+ name = name.toLowerCase().substring(2);
159
+ if (value) {
160
+ if (!old) node.addEventListener(name, eventProxy, useCapture);
161
+ } else {
162
+ node.removeEventListener(name, eventProxy, useCapture);
163
+ }
164
+ (node._listeners || (node._listeners = {}))[name] = value;
165
+ } else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {
166
+ try {
167
+ node[name] = value == null ? '' : value;
168
+ } catch (e) {}
169
+ if ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);
170
+ } else {
171
+ var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
172
+
173
+ if (value == null || value === false) {
174
+ if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);
175
+ } else if (typeof value !== 'function') {
176
+ if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);
177
+ }
178
+ }
179
+ }
180
+
181
+ function eventProxy(e) {
182
+ return this._listeners[e.type](options.event && options.event(e) || e);
183
+ }
184
+
185
+ var mounts = [];
186
+
187
+ var diffLevel = 0;
188
+
189
+ var isSvgMode = false;
190
+
191
+ var hydrating = false;
192
+
193
+ function flushMounts() {
194
+ var c;
195
+ while (c = mounts.pop()) {
196
+ if (options.afterMount) options.afterMount(c);
197
+ if (c.componentDidMount) c.componentDidMount();
198
+ }
199
+ }
200
+
201
+ function diff(dom, vnode, context, mountAll, parent, componentRoot) {
202
+ if (!diffLevel++) {
203
+ isSvgMode = parent != null && parent.ownerSVGElement !== undefined;
204
+
205
+ hydrating = dom != null && !('__preactattr_' in dom);
206
+ }
207
+
208
+ var ret = idiff(dom, vnode, context, mountAll, componentRoot);
209
+
210
+ if (parent && ret.parentNode !== parent) parent.appendChild(ret);
211
+
212
+ if (! --diffLevel) {
213
+ hydrating = false;
214
+
215
+ if (!componentRoot) flushMounts();
216
+ }
217
+
218
+ return ret;
219
+ }
220
+
221
+ function idiff(dom, vnode, context, mountAll, componentRoot) {
222
+ var out = dom,
223
+ prevSvgMode = isSvgMode;
224
+
225
+ if (vnode == null || typeof vnode === 'boolean') vnode = '';
226
+
227
+ if (typeof vnode === 'string' || typeof vnode === 'number') {
228
+ if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {
229
+ if (dom.nodeValue != vnode) {
230
+ dom.nodeValue = vnode;
231
+ }
232
+ } else {
233
+ out = document.createTextNode(vnode);
234
+ if (dom) {
235
+ if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
236
+ recollectNodeTree(dom, true);
237
+ }
238
+ }
239
+
240
+ out['__preactattr_'] = true;
241
+
242
+ return out;
243
+ }
244
+
245
+ var vnodeName = vnode.nodeName;
246
+ if (typeof vnodeName === 'function') {
247
+ return buildComponentFromVNode(dom, vnode, context, mountAll);
248
+ }
249
+
250
+ isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;
251
+
252
+ vnodeName = String(vnodeName);
253
+ if (!dom || !isNamedNode(dom, vnodeName)) {
254
+ out = createNode(vnodeName, isSvgMode);
255
+
256
+ if (dom) {
257
+ while (dom.firstChild) {
258
+ out.appendChild(dom.firstChild);
259
+ }
260
+ if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
261
+
262
+ recollectNodeTree(dom, true);
263
+ }
264
+ }
265
+
266
+ var fc = out.firstChild,
267
+ props = out['__preactattr_'],
268
+ vchildren = vnode.children;
269
+
270
+ if (props == null) {
271
+ props = out['__preactattr_'] = {};
272
+ for (var a = out.attributes, i = a.length; i--;) {
273
+ props[a[i].name] = a[i].value;
274
+ }
275
+ }
276
+
277
+ if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {
278
+ if (fc.nodeValue != vchildren[0]) {
279
+ fc.nodeValue = vchildren[0];
280
+ }
281
+ } else if (vchildren && vchildren.length || fc != null) {
282
+ innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);
283
+ }
284
+
285
+ diffAttributes(out, vnode.attributes, props);
286
+
287
+ isSvgMode = prevSvgMode;
288
+
289
+ return out;
290
+ }
291
+
292
+ function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
293
+ var originalChildren = dom.childNodes,
294
+ children = [],
295
+ keyed = {},
296
+ keyedLen = 0,
297
+ min = 0,
298
+ len = originalChildren.length,
299
+ childrenLen = 0,
300
+ vlen = vchildren ? vchildren.length : 0,
301
+ j,
302
+ c,
303
+ f,
304
+ vchild,
305
+ child;
306
+
307
+ if (len !== 0) {
308
+ for (var i = 0; i < len; i++) {
309
+ var _child = originalChildren[i],
310
+ props = _child['__preactattr_'],
311
+ key = vlen && props ? _child._component ? _child._component.__key : props.key : null;
312
+ if (key != null) {
313
+ keyedLen++;
314
+ keyed[key] = _child;
315
+ } else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {
316
+ children[childrenLen++] = _child;
317
+ }
318
+ }
319
+ }
320
+
321
+ if (vlen !== 0) {
322
+ for (var i = 0; i < vlen; i++) {
323
+ vchild = vchildren[i];
324
+ child = null;
325
+
326
+ var key = vchild.key;
327
+ if (key != null) {
328
+ if (keyedLen && keyed[key] !== undefined) {
329
+ child = keyed[key];
330
+ keyed[key] = undefined;
331
+ keyedLen--;
332
+ }
333
+ } else if (min < childrenLen) {
334
+ for (j = min; j < childrenLen; j++) {
335
+ if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {
336
+ child = c;
337
+ children[j] = undefined;
338
+ if (j === childrenLen - 1) childrenLen--;
339
+ if (j === min) min++;
340
+ break;
341
+ }
342
+ }
343
+ }
344
+
345
+ child = idiff(child, vchild, context, mountAll);
346
+
347
+ f = originalChildren[i];
348
+ if (child && child !== dom && child !== f) {
349
+ if (f == null) {
350
+ dom.appendChild(child);
351
+ } else if (child === f.nextSibling) {
352
+ removeNode(f);
353
+ } else {
354
+ dom.insertBefore(child, f);
355
+ }
356
+ }
357
+ }
358
+ }
359
+
360
+ if (keyedLen) {
361
+ for (var i in keyed) {
362
+ if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);
363
+ }
364
+ }
365
+
366
+ while (min <= childrenLen) {
367
+ if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);
368
+ }
369
+ }
370
+
371
+ function recollectNodeTree(node, unmountOnly) {
372
+ var component = node._component;
373
+ if (component) {
374
+ unmountComponent(component);
375
+ } else {
376
+ if (node['__preactattr_'] != null && node['__preactattr_'].ref) node['__preactattr_'].ref(null);
377
+
378
+ if (unmountOnly === false || node['__preactattr_'] == null) {
379
+ removeNode(node);
380
+ }
381
+
382
+ removeChildren(node);
383
+ }
384
+ }
385
+
386
+ function removeChildren(node) {
387
+ node = node.lastChild;
388
+ while (node) {
389
+ var next = node.previousSibling;
390
+ recollectNodeTree(node, true);
391
+ node = next;
392
+ }
393
+ }
394
+
395
+ function diffAttributes(dom, attrs, old) {
396
+ var name;
397
+
398
+ for (name in old) {
399
+ if (!(attrs && attrs[name] != null) && old[name] != null) {
400
+ setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);
401
+ }
402
+ }
403
+
404
+ for (name in attrs) {
405
+ if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {
406
+ setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
407
+ }
408
+ }
409
+ }
410
+
411
+ var recyclerComponents = [];
412
+
413
+ function createComponent(Ctor, props, context) {
414
+ var inst,
415
+ i = recyclerComponents.length;
416
+
417
+ if (Ctor.prototype && Ctor.prototype.render) {
418
+ inst = new Ctor(props, context);
419
+ Component.call(inst, props, context);
420
+ } else {
421
+ inst = new Component(props, context);
422
+ inst.constructor = Ctor;
423
+ inst.render = doRender;
424
+ }
425
+
426
+ while (i--) {
427
+ if (recyclerComponents[i].constructor === Ctor) {
428
+ inst.nextBase = recyclerComponents[i].nextBase;
429
+ recyclerComponents.splice(i, 1);
430
+ return inst;
431
+ }
432
+ }
433
+
434
+ return inst;
435
+ }
436
+
437
+ function doRender(props, state, context) {
438
+ return this.constructor(props, context);
439
+ }
440
+
441
+ function setComponentProps(component, props, renderMode, context, mountAll) {
442
+ if (component._disable) return;
443
+ component._disable = true;
444
+
445
+ component.__ref = props.ref;
446
+ component.__key = props.key;
447
+ delete props.ref;
448
+ delete props.key;
449
+
450
+ if (typeof component.constructor.getDerivedStateFromProps === 'undefined') {
451
+ if (!component.base || mountAll) {
452
+ if (component.componentWillMount) component.componentWillMount();
453
+ } else if (component.componentWillReceiveProps) {
454
+ component.componentWillReceiveProps(props, context);
455
+ }
456
+ }
457
+
458
+ if (context && context !== component.context) {
459
+ if (!component.prevContext) component.prevContext = component.context;
460
+ component.context = context;
461
+ }
462
+
463
+ if (!component.prevProps) component.prevProps = component.props;
464
+ component.props = props;
465
+
466
+ component._disable = false;
467
+
468
+ if (renderMode !== 0) {
469
+ if (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {
470
+ renderComponent(component, 1, mountAll);
471
+ } else {
472
+ enqueueRender(component);
473
+ }
474
+ }
475
+
476
+ if (component.__ref) component.__ref(component);
477
+ }
478
+
479
+ function renderComponent(component, renderMode, mountAll, isChild) {
480
+ if (component._disable) return;
481
+
482
+ var props = component.props,
483
+ state = component.state,
484
+ context = component.context,
485
+ previousProps = component.prevProps || props,
486
+ previousState = component.prevState || state,
487
+ previousContext = component.prevContext || context,
488
+ isUpdate = component.base,
489
+ nextBase = component.nextBase,
490
+ initialBase = isUpdate || nextBase,
491
+ initialChildComponent = component._component,
492
+ skip = false,
493
+ snapshot = previousContext,
494
+ rendered,
495
+ inst,
496
+ cbase;
497
+
498
+ if (component.constructor.getDerivedStateFromProps) {
499
+ state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
500
+ component.state = state;
501
+ }
502
+
503
+ if (isUpdate) {
504
+ component.props = previousProps;
505
+ component.state = previousState;
506
+ component.context = previousContext;
507
+ if (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {
508
+ skip = true;
509
+ } else if (component.componentWillUpdate) {
510
+ component.componentWillUpdate(props, state, context);
511
+ }
512
+ component.props = props;
513
+ component.state = state;
514
+ component.context = context;
515
+ }
516
+
517
+ component.prevProps = component.prevState = component.prevContext = component.nextBase = null;
518
+ component._dirty = false;
519
+
520
+ if (!skip) {
521
+ rendered = component.render(props, state, context);
522
+
523
+ if (component.getChildContext) {
524
+ context = extend(extend({}, context), component.getChildContext());
525
+ }
526
+
527
+ if (isUpdate && component.getSnapshotBeforeUpdate) {
528
+ snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
529
+ }
530
+
531
+ var childComponent = rendered && rendered.nodeName,
532
+ toUnmount,
533
+ base;
534
+
535
+ if (typeof childComponent === 'function') {
536
+
537
+ var childProps = getNodeProps(rendered);
538
+ inst = initialChildComponent;
539
+
540
+ if (inst && inst.constructor === childComponent && childProps.key == inst.__key) {
541
+ setComponentProps(inst, childProps, 1, context, false);
542
+ } else {
543
+ toUnmount = inst;
544
+
545
+ component._component = inst = createComponent(childComponent, childProps, context);
546
+ inst.nextBase = inst.nextBase || nextBase;
547
+ inst._parentComponent = component;
548
+ setComponentProps(inst, childProps, 0, context, false);
549
+ renderComponent(inst, 1, mountAll, true);
550
+ }
551
+
552
+ base = inst.base;
553
+ } else {
554
+ cbase = initialBase;
555
+
556
+ toUnmount = initialChildComponent;
557
+ if (toUnmount) {
558
+ cbase = component._component = null;
559
+ }
560
+
561
+ if (initialBase || renderMode === 1) {
562
+ if (cbase) cbase._component = null;
563
+ base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);
564
+ }
565
+ }
566
+
567
+ if (initialBase && base !== initialBase && inst !== initialChildComponent) {
568
+ var baseParent = initialBase.parentNode;
569
+ if (baseParent && base !== baseParent) {
570
+ baseParent.replaceChild(base, initialBase);
571
+
572
+ if (!toUnmount) {
573
+ initialBase._component = null;
574
+ recollectNodeTree(initialBase, false);
575
+ }
576
+ }
577
+ }
578
+
579
+ if (toUnmount) {
580
+ unmountComponent(toUnmount);
581
+ }
582
+
583
+ component.base = base;
584
+ if (base && !isChild) {
585
+ var componentRef = component,
586
+ t = component;
587
+ while (t = t._parentComponent) {
588
+ (componentRef = t).base = base;
589
+ }
590
+ base._component = componentRef;
591
+ base._componentConstructor = componentRef.constructor;
592
+ }
593
+ }
594
+
595
+ if (!isUpdate || mountAll) {
596
+ mounts.unshift(component);
597
+ } else if (!skip) {
598
+
599
+ if (component.componentDidUpdate) {
600
+ component.componentDidUpdate(previousProps, previousState, snapshot);
601
+ }
602
+ if (options.afterUpdate) options.afterUpdate(component);
603
+ }
604
+
605
+ while (component._renderCallbacks.length) {
606
+ component._renderCallbacks.pop().call(component);
607
+ }if (!diffLevel && !isChild) flushMounts();
608
+ }
609
+
610
+ function buildComponentFromVNode(dom, vnode, context, mountAll) {
611
+ var c = dom && dom._component,
612
+ originalComponent = c,
613
+ oldDom = dom,
614
+ isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
615
+ isOwner = isDirectOwner,
616
+ props = getNodeProps(vnode);
617
+ while (c && !isOwner && (c = c._parentComponent)) {
618
+ isOwner = c.constructor === vnode.nodeName;
619
+ }
620
+
621
+ if (c && isOwner && (!mountAll || c._component)) {
622
+ setComponentProps(c, props, 3, context, mountAll);
623
+ dom = c.base;
624
+ } else {
625
+ if (originalComponent && !isDirectOwner) {
626
+ unmountComponent(originalComponent);
627
+ dom = oldDom = null;
628
+ }
629
+
630
+ c = createComponent(vnode.nodeName, props, context);
631
+ if (dom && !c.nextBase) {
632
+ c.nextBase = dom;
633
+
634
+ oldDom = null;
635
+ }
636
+ setComponentProps(c, props, 1, context, mountAll);
637
+ dom = c.base;
638
+
639
+ if (oldDom && dom !== oldDom) {
640
+ oldDom._component = null;
641
+ recollectNodeTree(oldDom, false);
642
+ }
643
+ }
644
+
645
+ return dom;
646
+ }
647
+
648
+ function unmountComponent(component) {
649
+ if (options.beforeUnmount) options.beforeUnmount(component);
650
+
651
+ var base = component.base;
652
+
653
+ component._disable = true;
654
+
655
+ if (component.componentWillUnmount) component.componentWillUnmount();
656
+
657
+ component.base = null;
658
+
659
+ var inner = component._component;
660
+ if (inner) {
661
+ unmountComponent(inner);
662
+ } else if (base) {
663
+ if (base['__preactattr_'] && base['__preactattr_'].ref) base['__preactattr_'].ref(null);
664
+
665
+ component.nextBase = base;
666
+
667
+ removeNode(base);
668
+ recyclerComponents.push(component);
669
+
670
+ removeChildren(base);
671
+ }
672
+
673
+ if (component.__ref) component.__ref(null);
674
+ }
675
+
676
+ function Component(props, context) {
677
+ this._dirty = true;
678
+
679
+ this.context = context;
680
+
681
+ this.props = props;
682
+
683
+ this.state = this.state || {};
684
+
685
+ this._renderCallbacks = [];
686
+ }
687
+
688
+ extend(Component.prototype, {
689
+ setState: function setState(state, callback) {
690
+ if (!this.prevState) this.prevState = this.state;
691
+ this.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);
692
+ if (callback) this._renderCallbacks.push(callback);
693
+ enqueueRender(this);
694
+ },
695
+ forceUpdate: function forceUpdate(callback) {
696
+ if (callback) this._renderCallbacks.push(callback);
697
+ renderComponent(this, 2);
698
+ },
699
+ render: function render() {}
700
+ });
701
+
702
+ function render(vnode, parent, merge) {
703
+ return diff(merge, vnode, {}, false, parent, false);
704
+ }
705
+
706
+ var preact = {
707
+ h: h,
708
+ createElement: h,
709
+ cloneElement: cloneElement,
710
+ Component: Component,
711
+ render: render,
712
+ rerender: rerender,
713
+ options: options
714
+ };
715
+
716
+ if (typeof module != 'undefined') module.exports = preact;else self.preact = preact;
717
+ }());
718
+ //# sourceMappingURL=preact.dev.js.map