@mjhls/mjh-framework 1.0.203 → 1.0.205

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.
Files changed (74) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/AD-e2479b7c.js +31 -0
  3. package/dist/cjs/DeckContent.js +430 -0
  4. package/dist/cjs/DeckQueue.js +366 -0
  5. package/dist/cjs/Dfp-d94f7f73.js +97 -0
  6. package/dist/cjs/GridContent.js +613 -0
  7. package/dist/cjs/GroupDeck.js +156 -0
  8. package/dist/cjs/IssueContentDeck.js +81 -0
  9. package/dist/cjs/IssueDeck.js +144 -0
  10. package/dist/cjs/MasterDeck.js +340 -0
  11. package/dist/cjs/Normal-7dd8c339.js +2374 -0
  12. package/dist/cjs/PublicationDeck.js +81 -0
  13. package/dist/cjs/QueueDeckExpanded.js +559 -0
  14. package/dist/cjs/TaxonomyCard-7b5b4298.js +1045 -0
  15. package/dist/cjs/TaxonomyCard.js +18 -0
  16. package/dist/cjs/TemplateNormal.js +29 -0
  17. package/dist/cjs/ThumbnailCard.js +58 -0
  18. package/dist/cjs/Ustream-0d3dd953.js +122 -0
  19. package/dist/cjs/Ustream.js +10 -0
  20. package/dist/cjs/VideoSeriesListing.js +248 -0
  21. package/dist/cjs/YoutubeGroup-f7707ceb.js +228 -0
  22. package/dist/cjs/YoutubeGroup.js +13 -0
  23. package/dist/cjs/_babelHelpers-f321c258.js +119 -0
  24. package/dist/cjs/_commonjsHelpers-3fc1f64e.js +20 -0
  25. package/dist/cjs/debounce-286eb3fb.js +279 -0
  26. package/dist/cjs/entities-3e0b4a16.js +506 -0
  27. package/dist/cjs/get-06aac51b.js +992 -0
  28. package/dist/cjs/index-0d0efcfa.js +610 -0
  29. package/dist/cjs/index-a4c53ff4.js +551 -0
  30. package/dist/cjs/index.es-2289df51.js +5028 -0
  31. package/dist/cjs/index.esm-340d3792.js +113 -0
  32. package/dist/cjs/index.js +12044 -0
  33. package/dist/cjs/isSymbol-311eb805.js +209 -0
  34. package/dist/cjs/main-58839f4e.js +858 -0
  35. package/dist/cjs/visibility-sensor-5c5a7302.js +2251 -0
  36. package/dist/esm/AD-1b2a3dd3.js +26 -0
  37. package/dist/esm/DeckContent.js +424 -0
  38. package/dist/esm/DeckQueue.js +360 -0
  39. package/dist/esm/Dfp-ab7941d3.js +92 -0
  40. package/dist/esm/GridContent.js +607 -0
  41. package/dist/esm/GroupDeck.js +151 -0
  42. package/dist/esm/IssueContentDeck.js +76 -0
  43. package/dist/esm/IssueDeck.js +139 -0
  44. package/dist/esm/MasterDeck.js +334 -0
  45. package/dist/esm/Normal-403c5666.js +2354 -0
  46. package/dist/esm/PublicationDeck.js +76 -0
  47. package/dist/esm/QueueDeckExpanded.js +553 -0
  48. package/dist/esm/TaxonomyCard-f9c93953.js +1039 -0
  49. package/dist/esm/TaxonomyCard.js +12 -0
  50. package/dist/esm/TemplateNormal.js +23 -0
  51. package/dist/esm/ThumbnailCard.js +53 -0
  52. package/dist/esm/Ustream-6bb45fe7.js +116 -0
  53. package/dist/esm/Ustream.js +4 -0
  54. package/dist/esm/VideoSeriesListing.js +242 -0
  55. package/dist/esm/YoutubeGroup-06df4923.js +222 -0
  56. package/dist/esm/YoutubeGroup.js +7 -0
  57. package/dist/esm/_babelHelpers-67c05996.js +111 -0
  58. package/dist/esm/_commonjsHelpers-ae1b5db5.js +15 -0
  59. package/dist/esm/debounce-a0242b4a.js +277 -0
  60. package/dist/esm/entities-e85d3a4a.js +503 -0
  61. package/dist/esm/get-b684ff61.js +990 -0
  62. package/dist/esm/index-3c1ee9ab.js +605 -0
  63. package/dist/esm/index-ca4ff5cb.js +548 -0
  64. package/dist/esm/index.es-f369b3e8.js +5022 -0
  65. package/dist/esm/index.esm-536609db.js +103 -0
  66. package/dist/esm/index.js +11991 -0
  67. package/dist/esm/isSymbol-c2b7d05a.js +203 -0
  68. package/dist/esm/main-dea495b7.js +851 -0
  69. package/dist/esm/visibility-sensor-3cfe6713.js +2243 -0
  70. package/package.json +8 -7
  71. package/dist/index.es.js +0 -30213
  72. package/dist/index.es.js.map +0 -1
  73. package/dist/index.js +0 -30271
  74. package/dist/index.js.map +0 -1
@@ -0,0 +1,1039 @@
1
+ import React__default from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import Container from 'react-bootstrap/Container';
4
+ import Row from 'react-bootstrap/Row';
5
+ import Col from 'react-bootstrap/Col';
6
+ import Card from 'react-bootstrap/Card';
7
+ import { n as node, i as imageUrlBuilder } from './index-ca4ff5cb.js';
8
+ import { L as LazyLoad } from './index-3c1ee9ab.js';
9
+ import { _ as _extends } from './_babelHelpers-67c05996.js';
10
+
11
+ /*
12
+ object-assign
13
+ (c) Sindre Sorhus
14
+ @license MIT
15
+ */
16
+ /* eslint-disable no-unused-vars */
17
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
18
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
19
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
20
+
21
+ function toObject(val) {
22
+ if (val === null || val === undefined) {
23
+ throw new TypeError('Object.assign cannot be called with null or undefined');
24
+ }
25
+
26
+ return Object(val);
27
+ }
28
+
29
+ function shouldUseNative() {
30
+ try {
31
+ if (!Object.assign) {
32
+ return false;
33
+ }
34
+
35
+ // Detect buggy property enumeration order in older V8 versions.
36
+
37
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
38
+ var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
39
+ test1[5] = 'de';
40
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
41
+ return false;
42
+ }
43
+
44
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
45
+ var test2 = {};
46
+ for (var i = 0; i < 10; i++) {
47
+ test2['_' + String.fromCharCode(i)] = i;
48
+ }
49
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
50
+ return test2[n];
51
+ });
52
+ if (order2.join('') !== '0123456789') {
53
+ return false;
54
+ }
55
+
56
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
57
+ var test3 = {};
58
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
59
+ test3[letter] = letter;
60
+ });
61
+ if (Object.keys(Object.assign({}, test3)).join('') !==
62
+ 'abcdefghijklmnopqrst') {
63
+ return false;
64
+ }
65
+
66
+ return true;
67
+ } catch (err) {
68
+ // We don't expect any of the above to throw, but better to be safe.
69
+ return false;
70
+ }
71
+ }
72
+
73
+ var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
74
+ var from;
75
+ var to = toObject(target);
76
+ var symbols;
77
+
78
+ for (var s = 1; s < arguments.length; s++) {
79
+ from = Object(arguments[s]);
80
+
81
+ for (var key in from) {
82
+ if (hasOwnProperty.call(from, key)) {
83
+ to[key] = from[key];
84
+ }
85
+ }
86
+
87
+ if (getOwnPropertySymbols) {
88
+ symbols = getOwnPropertySymbols(from);
89
+ for (var i = 0; i < symbols.length; i++) {
90
+ if (propIsEnumerable.call(from, symbols[i])) {
91
+ to[symbols[i]] = from[symbols[i]];
92
+ }
93
+ }
94
+ }
95
+ }
96
+
97
+ return to;
98
+ };
99
+
100
+ var baseUrl = 'https://docs.sanity.io/help/';
101
+
102
+ var generateHelpUrl = function generateHelpUrl(slug) {
103
+ return baseUrl + slug
104
+ };
105
+
106
+ var enc = encodeURIComponent;
107
+ var materializeError = "You must either:\n - Pass `projectId` and `dataset` to the block renderer\n - Materialize images to include the `url` field.\n\nFor more information, see ".concat(generateHelpUrl('block-content-image-materializing'));
108
+
109
+ var getQueryString = function getQueryString(options) {
110
+ var query = options.imageOptions;
111
+ var keys = Object.keys(query);
112
+
113
+ if (!keys.length) {
114
+ return '';
115
+ }
116
+
117
+ var params = keys.map(function (key) {
118
+ return "".concat(enc(key), "=").concat(enc(query[key]));
119
+ });
120
+ return "?".concat(params.join('&'));
121
+ };
122
+
123
+ var buildUrl = function buildUrl(props) {
124
+ var node$1 = props.node,
125
+ options = props.options;
126
+ var projectId = options.projectId,
127
+ dataset = options.dataset;
128
+ var asset = node$1.asset;
129
+
130
+ if (!asset) {
131
+ throw new Error('Image does not have required `asset` property');
132
+ }
133
+
134
+ if (asset.url) {
135
+ return asset.url + getQueryString(options);
136
+ }
137
+
138
+ if (!projectId || !dataset) {
139
+ throw new Error(materializeError);
140
+ }
141
+
142
+ var ref = asset._ref;
143
+
144
+ if (!ref) {
145
+ throw new Error('Invalid image reference in block, no `_ref` found on `asset`');
146
+ }
147
+
148
+ return node(objectAssign({
149
+ projectId: projectId,
150
+ dataset: dataset
151
+ }, options.imageOptions || {})).image(node$1).toString();
152
+ };
153
+
154
+ var getImageUrl = buildUrl;
155
+
156
+ var serializers = function (h, serializerOpts) {
157
+ var serializeOptions = serializerOpts || {
158
+ useDashedStyles: false // Low-level block serializer
159
+
160
+ };
161
+
162
+ function BlockSerializer(props) {
163
+ var node = props.node,
164
+ serializers = props.serializers,
165
+ options = props.options,
166
+ isInline = props.isInline,
167
+ children = props.children;
168
+ var blockType = node._type;
169
+ var serializer = serializers.types[blockType];
170
+
171
+ if (!serializer) {
172
+ throw new Error("Unknown block type \"".concat(blockType, "\", please specify a serializer for it in the `serializers.types` prop"));
173
+ }
174
+
175
+ return h(serializer, {
176
+ node: node,
177
+ options: options,
178
+ isInline: isInline
179
+ }, children);
180
+ } // Low-level span serializer
181
+
182
+
183
+ function SpanSerializer(props) {
184
+ var _props$node = props.node,
185
+ mark = _props$node.mark,
186
+ children = _props$node.children;
187
+ var isPlain = typeof mark === 'string';
188
+ var markType = isPlain ? mark : mark._type;
189
+ var serializer = props.serializers.marks[markType];
190
+
191
+ if (!serializer) {
192
+ // @todo Revert back to throwing errors?
193
+ // eslint-disable-next-line no-console
194
+ console.warn("Unknown mark type \"".concat(markType, "\", please specify a serializer for it in the `serializers.marks` prop"));
195
+ return h(props.serializers.markFallback, null, children);
196
+ }
197
+
198
+ return h(serializer, props.node, children);
199
+ } // Low-level list serializer
200
+
201
+
202
+ function ListSerializer(props) {
203
+ var tag = props.type === 'bullet' ? 'ul' : 'ol';
204
+ return h(tag, null, props.children);
205
+ } // Low-level list item serializer
206
+
207
+
208
+ function ListItemSerializer(props) {
209
+ var children = !props.node.style || props.node.style === 'normal' ? // Don't wrap plain text in paragraphs inside of a list item
210
+ props.children : // But wrap any other style in whatever the block serializer says to use
211
+ h(props.serializers.types.block, props, props.children);
212
+ return h('li', null, children);
213
+ } // Renderer of an actual block of type `block`. Confusing, we know.
214
+
215
+
216
+ function BlockTypeSerializer(props) {
217
+ var style = props.node.style || 'normal';
218
+
219
+ if (/^h\d/.test(style)) {
220
+ return h(style, null, props.children);
221
+ }
222
+
223
+ return style === 'blockquote' ? h('blockquote', null, props.children) : h('p', null, props.children);
224
+ } // Serializers for things that can be directly attributed to a tag without any props
225
+ // We use partial application to do this, passing the tag name as the first argument
226
+
227
+
228
+ function RawMarkSerializer(tag, props) {
229
+ return h(tag, null, props.children);
230
+ }
231
+
232
+ function UnderlineSerializer(props) {
233
+ var style = serializeOptions.useDashedStyles ? {
234
+ 'text-decoration': 'underline'
235
+ } : {
236
+ textDecoration: 'underline'
237
+ };
238
+ return h('span', {
239
+ style: style
240
+ }, props.children);
241
+ }
242
+
243
+ function StrikeThroughSerializer(props) {
244
+ return h('del', null, props.children);
245
+ }
246
+
247
+ function LinkSerializer(props) {
248
+ return h('a', {
249
+ href: props.mark.href
250
+ }, props.children);
251
+ }
252
+
253
+ function ImageSerializer(props) {
254
+ if (!props.node.asset) {
255
+ return null;
256
+ }
257
+
258
+ var img = h('img', {
259
+ src: getImageUrl(props)
260
+ });
261
+ return props.isInline ? img : h('figure', null, img);
262
+ } // Serializer that recursively calls itself, producing a hyperscript tree of spans
263
+
264
+
265
+ function serializeSpan(span, serializers, index, options) {
266
+ if (span === '\n' && serializers.hardBreak) {
267
+ return h(serializers.hardBreak, {
268
+ key: "hb-".concat(index)
269
+ });
270
+ }
271
+
272
+ if (typeof span === 'string') {
273
+ return serializers.text ? h(serializers.text, {
274
+ key: "text-".concat(index)
275
+ }, span) : span;
276
+ }
277
+
278
+ var children;
279
+
280
+ if (span.children) {
281
+ children = {
282
+ children: span.children.map(function (child, i) {
283
+ return options.serializeNode(child, i, span.children, true);
284
+ })
285
+ };
286
+ }
287
+
288
+ var serializedNode = objectAssign({}, span, children);
289
+ return h(serializers.span, {
290
+ key: span._key || "span-".concat(index),
291
+ node: serializedNode,
292
+ serializers: serializers
293
+ });
294
+ }
295
+
296
+ var HardBreakSerializer = function HardBreakSerializer() {
297
+ return h('br');
298
+ };
299
+
300
+ var defaultMarkSerializers = {
301
+ strong: RawMarkSerializer.bind(null, 'strong'),
302
+ em: RawMarkSerializer.bind(null, 'em'),
303
+ code: RawMarkSerializer.bind(null, 'code'),
304
+ underline: UnderlineSerializer,
305
+ 'strike-through': StrikeThroughSerializer,
306
+ link: LinkSerializer
307
+ };
308
+ var defaultSerializers = {
309
+ // Common overrides
310
+ types: {
311
+ block: BlockTypeSerializer,
312
+ image: ImageSerializer
313
+ },
314
+ marks: defaultMarkSerializers,
315
+ // Less common overrides
316
+ list: ListSerializer,
317
+ listItem: ListItemSerializer,
318
+ block: BlockSerializer,
319
+ span: SpanSerializer,
320
+ hardBreak: HardBreakSerializer,
321
+ // Container element
322
+ container: 'div',
323
+ // When we can't resolve the mark properly, use this renderer as the container
324
+ markFallback: 'span',
325
+ // Allow overriding text renderer, but leave undefined to just use plain strings by default
326
+ text: undefined,
327
+ // Empty nodes (React uses null, hyperscript with empty strings)
328
+ empty: ''
329
+ };
330
+ return {
331
+ defaultSerializers: defaultSerializers,
332
+ serializeSpan: serializeSpan
333
+ };
334
+ };
335
+
336
+ var defaultMarks = ['strong', 'em', 'code', 'underline', 'strike-through'];
337
+
338
+ var buildMarksTree = function buildMarksTree(block) {
339
+ var children = block.children,
340
+ markDefs = block.markDefs;
341
+
342
+ if (!children || !children.length) {
343
+ return [];
344
+ }
345
+
346
+ var sortedMarks = children.map(sortMarksByOccurences);
347
+ var rootNode = {
348
+ _type: 'span',
349
+ children: []
350
+ };
351
+ var nodeStack = [rootNode];
352
+ children.forEach(function (span, i) {
353
+ var marksNeeded = sortedMarks[i];
354
+
355
+ if (!marksNeeded) {
356
+ var lastNode = nodeStack[nodeStack.length - 1];
357
+ lastNode.children.push(span);
358
+ return;
359
+ }
360
+
361
+ var pos = 1; // Start at position one. Root is always plain and should never be removed. (?)
362
+
363
+ if (nodeStack.length > 1) {
364
+ for (pos; pos < nodeStack.length; pos++) {
365
+ var mark = nodeStack[pos].markKey;
366
+ var index = marksNeeded.indexOf(mark); // eslint-disable-next-line max-depth
367
+
368
+ if (index === -1) {
369
+ break;
370
+ }
371
+
372
+ marksNeeded.splice(index, 1);
373
+ }
374
+ } // Keep from beginning to first miss
375
+
376
+
377
+ nodeStack = nodeStack.slice(0, pos); // Add needed nodes
378
+
379
+ var currentNode = findLastParentNode(nodeStack);
380
+ marksNeeded.forEach(function (mark) {
381
+ var node = {
382
+ _type: 'span',
383
+ _key: span._key,
384
+ children: [],
385
+ mark: markDefs.find(function (def) {
386
+ return def._key === mark;
387
+ }) || mark,
388
+ markKey: mark
389
+ };
390
+ currentNode.children.push(node);
391
+ nodeStack.push(node);
392
+ currentNode = node;
393
+ }); // Split at newlines to make individual line chunks, but keep newline
394
+ // characters as individual elements in the array. We use these characters
395
+ // in the span serializer to trigger hard-break rendering
396
+
397
+ if (isTextSpan(span)) {
398
+ var lines = span.text.split('\n');
399
+
400
+ for (var line = lines.length; line-- > 1;) {
401
+ lines.splice(line, 0, '\n');
402
+ }
403
+
404
+ currentNode.children = currentNode.children.concat(lines);
405
+ } else {
406
+ currentNode.children = currentNode.children.concat(span);
407
+ }
408
+ });
409
+ return rootNode.children;
410
+ }; // We want to sort all the marks of all the spans in the following order:
411
+ // 1. Marks that are shared amongst the most adjacent siblings
412
+ // 2. Non-default marks (links, custom metadata)
413
+ // 3. Built-in, plain marks (bold, emphasis, code etc)
414
+
415
+
416
+ function sortMarksByOccurences(span, i, spans) {
417
+ if (!span.marks || span.marks.length === 0) {
418
+ return span.marks || [];
419
+ }
420
+
421
+ var markOccurences = span.marks.reduce(function (occurences, mark) {
422
+ occurences[mark] = occurences[mark] ? occurences[mark] + 1 : 1;
423
+
424
+ for (var siblingIndex = i + 1; siblingIndex < spans.length; siblingIndex++) {
425
+ var sibling = spans[siblingIndex];
426
+
427
+ if (sibling.marks && Array.isArray(sibling.marks) && sibling.marks.indexOf(mark) !== -1) {
428
+ occurences[mark]++;
429
+ } else {
430
+ break;
431
+ }
432
+ }
433
+
434
+ return occurences;
435
+ }, {});
436
+ var sortByOccurence = sortMarks.bind(null, markOccurences); // Slicing because sort() mutates the input
437
+
438
+ return span.marks.slice().sort(sortByOccurence);
439
+ }
440
+
441
+ function sortMarks(occurences, markA, markB) {
442
+ var aOccurences = occurences[markA] || 0;
443
+ var bOccurences = occurences[markB] || 0;
444
+
445
+ if (aOccurences !== bOccurences) {
446
+ return bOccurences - aOccurences;
447
+ }
448
+
449
+ var aDefaultPos = defaultMarks.indexOf(markA);
450
+ var bDefaultPos = defaultMarks.indexOf(markB); // Sort default marks last
451
+
452
+ if (aDefaultPos !== bDefaultPos) {
453
+ return aDefaultPos - bDefaultPos;
454
+ } // Sort other marks simply by key
455
+
456
+
457
+ if (markA < markB) {
458
+ return -1;
459
+ } else if (markA > markB) {
460
+ return 1;
461
+ }
462
+
463
+ return 0;
464
+ }
465
+
466
+ function isTextSpan(node) {
467
+ return node._type === 'span' && typeof node.text === 'string' && (Array.isArray(node.marks) || typeof node.marks === 'undefined');
468
+ }
469
+
470
+ function findLastParentNode(nodes) {
471
+ for (var i = nodes.length - 1; i >= 0; i--) {
472
+ var node = nodes[i];
473
+
474
+ if (node._type === 'span' && node.children) {
475
+ return node;
476
+ }
477
+ }
478
+
479
+ return undefined;
480
+ }
481
+
482
+ var buildMarksTree_1 = buildMarksTree;
483
+
484
+ /* eslint-disable max-depth, complexity */
485
+
486
+
487
+ function nestLists(blocks) {
488
+ var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'html';
489
+ var tree = [];
490
+ var currentList;
491
+
492
+ for (var i = 0; i < blocks.length; i++) {
493
+ var block = blocks[i];
494
+
495
+ if (!isListBlock(block)) {
496
+ tree.push(block);
497
+ currentList = null;
498
+ continue;
499
+ } // Start of a new list?
500
+
501
+
502
+ if (!currentList) {
503
+ currentList = listFromBlock(block);
504
+ tree.push(currentList);
505
+ continue;
506
+ } // New list item within same list?
507
+
508
+
509
+ if (blockMatchesList(block, currentList)) {
510
+ currentList.children.push(block);
511
+ continue;
512
+ } // Different list props, are we going deeper?
513
+
514
+
515
+ if (block.level > currentList.level) {
516
+ var newList = listFromBlock(block);
517
+
518
+ if (mode === 'html') {
519
+ // Because HTML is kinda weird, nested lists needs to be nested within list items
520
+ // So while you would think that we could populate the parent list with a new sub-list,
521
+ // We actually have to target the last list element (child) of the parent.
522
+ // However, at this point we need to be very careful - simply pushing to the list of children
523
+ // will mutate the input, and we don't want to blindly clone the entire tree.
524
+ // Clone the last child while adding our new list as the last child of it
525
+ var lastListItem = lastChild(currentList);
526
+ var newLastChild = objectAssign({}, lastListItem, {
527
+ children: lastListItem.children.concat(newList)
528
+ }); // Swap the last child
529
+
530
+ currentList.children[currentList.children.length - 1] = newLastChild;
531
+ } else {
532
+ currentList.children.push(newList);
533
+ } // Set the newly created, deeper list as the current
534
+
535
+
536
+ currentList = newList;
537
+ continue;
538
+ } // Different list props, are we going back up the tree?
539
+
540
+
541
+ if (block.level < currentList.level) {
542
+ // Current list has ended, and we need to hook up with a parent of the same level and type
543
+ var match = findListMatching(tree[tree.length - 1], block);
544
+
545
+ if (match) {
546
+ currentList = match;
547
+ currentList.children.push(block);
548
+ continue;
549
+ } // Similar parent can't be found, assume new list
550
+
551
+
552
+ currentList = listFromBlock(block);
553
+ tree.push(currentList);
554
+ continue;
555
+ } // Different list props, different list style?
556
+
557
+
558
+ if (block.listItem !== currentList.listItem) {
559
+ var _match = findListMatching(tree[tree.length - 1], {
560
+ level: block.level
561
+ });
562
+
563
+ if (_match && _match.listItem === block.listItem) {
564
+ currentList = _match;
565
+ currentList.children.push(block);
566
+ continue;
567
+ } else {
568
+ currentList = listFromBlock(block);
569
+ tree.push(currentList);
570
+ continue;
571
+ }
572
+ } // eslint-disable-next-line no-console
573
+
574
+
575
+ console.warn('Unknown state encountered for block', block);
576
+ tree.push(block);
577
+ }
578
+
579
+ return tree;
580
+ }
581
+
582
+ function isListBlock(block) {
583
+ return Boolean(block.listItem);
584
+ }
585
+
586
+ function blockMatchesList(block, list) {
587
+ return block.level === list.level && block.listItem === list.listItem;
588
+ }
589
+
590
+ function listFromBlock(block) {
591
+ return {
592
+ _type: 'list',
593
+ _key: "".concat(block._key, "-parent"),
594
+ level: block.level,
595
+ listItem: block.listItem,
596
+ children: [block]
597
+ };
598
+ }
599
+
600
+ function lastChild(block) {
601
+ return block.children && block.children[block.children.length - 1];
602
+ }
603
+
604
+ function findListMatching(rootNode, matching) {
605
+ var filterOnType = typeof matching.listItem === 'string';
606
+
607
+ if (rootNode._type === 'list' && rootNode.level === matching.level && filterOnType && rootNode.listItem === matching.listItem) {
608
+ return rootNode;
609
+ }
610
+
611
+ var node = lastChild(rootNode);
612
+
613
+ if (!node) {
614
+ return false;
615
+ }
616
+
617
+ return findListMatching(node, matching);
618
+ }
619
+
620
+ var nestLists_1 = nestLists;
621
+
622
+ var generateKeys = function (blocks) {
623
+ return blocks.map(function (block) {
624
+ if (block._key) {
625
+ return block;
626
+ }
627
+
628
+ return objectAssign({
629
+ _key: getStaticKey(block)
630
+ }, block);
631
+ });
632
+ };
633
+
634
+ function getStaticKey(item) {
635
+ return checksum(JSON.stringify(item)).toString(36).replace(/[^A-Za-z0-9]/g, '');
636
+ }
637
+ /* eslint-disable no-bitwise */
638
+
639
+
640
+ function checksum(str) {
641
+ var hash = 0;
642
+ var strlen = str.length;
643
+
644
+ if (strlen === 0) {
645
+ return hash;
646
+ }
647
+
648
+ for (var i = 0; i < strlen; i++) {
649
+ hash = (hash << 5) - hash + str.charCodeAt(i);
650
+ hash &= hash; // Convert to 32bit integer
651
+ }
652
+
653
+ return hash;
654
+ }
655
+
656
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
657
+
658
+
659
+
660
+ var isDefined = function isDefined(val) {
661
+ return typeof val !== 'undefined';
662
+ }; // Recursively merge/replace default serializers with user-specified serializers
663
+
664
+
665
+ var mergeSerializers = function mergeSerializers(defaultSerializers, userSerializers) {
666
+ return Object.keys(defaultSerializers).reduce(function (acc, key) {
667
+ var type = _typeof(defaultSerializers[key]);
668
+
669
+ if (type === 'function') {
670
+ acc[key] = isDefined(userSerializers[key]) ? userSerializers[key] : defaultSerializers[key];
671
+ } else if (type === 'object') {
672
+ acc[key] = objectAssign({}, defaultSerializers[key], userSerializers[key]);
673
+ } else {
674
+ acc[key] = typeof userSerializers[key] === 'undefined' ? defaultSerializers[key] : userSerializers[key];
675
+ }
676
+
677
+ return acc;
678
+ }, {});
679
+ };
680
+
681
+ // Properties to extract from props and pass to serializers as options
682
+
683
+
684
+ var optionProps = ['projectId', 'dataset', 'imageOptions'];
685
+
686
+ var isDefined$1 = function isDefined(val) {
687
+ return typeof val !== 'undefined';
688
+ };
689
+
690
+ var defaults = {
691
+ imageOptions: {}
692
+ };
693
+
694
+ function blocksToNodes(h, properties, defaultSerializers, serializeSpan) {
695
+ var props = objectAssign({}, defaults, properties);
696
+ var rawBlocks = Array.isArray(props.blocks) ? props.blocks : [props.blocks];
697
+ var keyedBlocks = generateKeys(rawBlocks);
698
+ var blocks = nestLists_1(keyedBlocks, props.listNestMode);
699
+ var serializers = mergeSerializers(defaultSerializers, props.serializers || {});
700
+ var options = optionProps.reduce(function (opts, key) {
701
+ var value = props[key];
702
+
703
+ if (isDefined$1(value)) {
704
+ opts[key] = value;
705
+ }
706
+
707
+ return opts;
708
+ }, {});
709
+
710
+ function serializeNode(node, index, siblings, isInline) {
711
+ if (isList(node)) {
712
+ return serializeList(node);
713
+ }
714
+
715
+ if (isListItem(node)) {
716
+ return serializeListItem(node, findListItemIndex(node, siblings));
717
+ }
718
+
719
+ if (isSpan(node)) {
720
+ return serializeSpan(node, serializers, index, {
721
+ serializeNode: serializeNode
722
+ });
723
+ }
724
+
725
+ return serializeBlock(node, index, isInline);
726
+ }
727
+
728
+ function findListItemIndex(node, siblings) {
729
+ var index = 0;
730
+
731
+ for (var i = 0; i < siblings.length; i++) {
732
+ if (siblings[i] === node) {
733
+ return index;
734
+ }
735
+
736
+ if (!isListItem(siblings[i])) {
737
+ continue;
738
+ }
739
+
740
+ index++;
741
+ }
742
+
743
+ return index;
744
+ }
745
+
746
+ function serializeBlock(block, index, isInline) {
747
+ var tree = buildMarksTree_1(block);
748
+ var children = tree.map(function (node, i, siblings) {
749
+ return serializeNode(node, i, siblings, true);
750
+ });
751
+ var blockProps = {
752
+ key: block._key || "block-".concat(index),
753
+ node: block,
754
+ isInline: isInline,
755
+ serializers: serializers,
756
+ options: options
757
+ };
758
+ return h(serializers.block, blockProps, children);
759
+ }
760
+
761
+ function serializeListItem(block, index) {
762
+ var key = block._key;
763
+ var tree = buildMarksTree_1(block);
764
+ var children = tree.map(serializeNode);
765
+ return h(serializers.listItem, {
766
+ node: block,
767
+ serializers: serializers,
768
+ index: index,
769
+ key: key,
770
+ options: options
771
+ }, children);
772
+ }
773
+
774
+ function serializeList(list) {
775
+ var type = list.listItem;
776
+ var level = list.level;
777
+ var key = list._key;
778
+ var children = list.children.map(serializeNode);
779
+ return h(serializers.list, {
780
+ key: key,
781
+ level: level,
782
+ type: type,
783
+ options: options
784
+ }, children);
785
+ } // Default to false, so `undefined` will evaluate to the default here
786
+
787
+
788
+ var renderContainerOnSingleChild = Boolean(props.renderContainerOnSingleChild);
789
+ var nodes = blocks.map(serializeNode);
790
+
791
+ if (renderContainerOnSingleChild || nodes.length > 1) {
792
+ var containerProps = props.className ? {
793
+ className: props.className
794
+ } : {};
795
+ return h(serializers.container, containerProps, nodes);
796
+ }
797
+
798
+ if (nodes[0]) {
799
+ return nodes[0];
800
+ }
801
+
802
+ return typeof serializers.empty === 'function' ? h(serializers.empty) : serializers.empty;
803
+ }
804
+
805
+ function isList(block) {
806
+ return block._type === 'list' && block.listItem;
807
+ }
808
+
809
+ function isListItem(block) {
810
+ return block._type === 'block' && block.listItem;
811
+ }
812
+
813
+ function isSpan(block) {
814
+ return typeof block === 'string' || block.marks || block._type === 'span';
815
+ }
816
+
817
+ var blocksToNodes_1 = blocksToNodes;
818
+
819
+ var internals = {
820
+ blocksToNodes: function blocksToNodes(renderNode, props, defaultSerializers, serializeSpan) {
821
+ if (defaultSerializers) {
822
+ return blocksToNodes_1(renderNode, props, defaultSerializers, serializeSpan);
823
+ } // Backwards-compatibility
824
+
825
+
826
+ var serializers$1 = serializers(renderNode);
827
+ return blocksToNodes_1(renderNode, props, serializers$1.defaultSerializers, serializers$1.serializeSpan);
828
+ },
829
+ getSerializers: serializers,
830
+ getImageUrl: getImageUrl,
831
+ mergeSerializers: mergeSerializers
832
+ };
833
+
834
+ var internals$1 = internals;
835
+
836
+ var getSerializers = internals$1.getSerializers;
837
+
838
+ var renderNode = React__default.createElement;
839
+
840
+ var _getSerializers = getSerializers(renderNode),
841
+ defaultSerializers = _getSerializers.defaultSerializers,
842
+ serializeSpan = _getSerializers.serializeSpan;
843
+
844
+ var dom = {
845
+ serializeSpan: serializeSpan,
846
+ serializers: defaultSerializers,
847
+ renderProps: { nestMarks: true }
848
+ };
849
+
850
+ var serializers$1 = dom.serializers,
851
+ serializeSpan$1 = dom.serializeSpan,
852
+ renderProps = dom.renderProps;
853
+
854
+ var getImageUrl$1 = internals$1.getImageUrl,
855
+ blocksToNodes$1 = internals$1.blocksToNodes,
856
+ mergeSerializers$1 = internals$1.mergeSerializers;
857
+
858
+ var renderNode$1 = React__default.createElement;
859
+
860
+ var SanityBlockContent = function SanityBlockContent(props) {
861
+ var customSerializers = mergeSerializers$1(SanityBlockContent.defaultSerializers, props.serializers);
862
+
863
+ var blockProps = Object.assign({}, renderProps, props, {
864
+ serializers: customSerializers,
865
+ blocks: props.blocks || []
866
+ });
867
+
868
+ return blocksToNodes$1(renderNode$1, blockProps, serializers$1, serializeSpan$1);
869
+ };
870
+
871
+ // Expose default serializers to the user
872
+ SanityBlockContent.defaultSerializers = serializers$1;
873
+
874
+ // Expose logic for building image URLs from an image reference/node
875
+ SanityBlockContent.getImageUrl = getImageUrl$1;
876
+
877
+ SanityBlockContent.propTypes = {
878
+ className: PropTypes.string,
879
+ renderContainerOnSingleChild: PropTypes.bool,
880
+
881
+ // When rendering images, we need project id and dataset, unless images are materialized
882
+ projectId: PropTypes.string,
883
+ dataset: PropTypes.string,
884
+ imageOptions: PropTypes.object,
885
+
886
+ serializers: PropTypes.shape({
887
+ // Common overrides
888
+ types: PropTypes.object,
889
+ marks: PropTypes.object,
890
+
891
+ // Less common overrides
892
+ list: PropTypes.func,
893
+ listItem: PropTypes.func,
894
+
895
+ // Low-level serializers
896
+ block: PropTypes.func,
897
+ span: PropTypes.func
898
+ }),
899
+
900
+ blocks: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({
901
+ _type: PropTypes.string.isRequired
902
+ })), PropTypes.shape({
903
+ _type: PropTypes.string.isRequired
904
+ })]).isRequired
905
+ };
906
+
907
+ SanityBlockContent.defaultProps = {
908
+ renderContainerOnSingleChild: false,
909
+ serializers: {},
910
+ imageOptions: {}
911
+ };
912
+
913
+ var BlockContent = SanityBlockContent;
914
+
915
+ // import Link from 'next/link'
916
+ // import { clean_html } from '../utilities/entities'
917
+
918
+ var TaxonomyCard = function TaxonomyCard(props) {
919
+ var columns = props.columns,
920
+ variant = props.variant,
921
+ _props$icon = props.icon,
922
+ icon = _props$icon === undefined ? false : _props$icon,
923
+ data = props.dataRecord,
924
+ defaultImage = props.defaultImage,
925
+ client = props.client,
926
+ imageHeight = props.imageHeight,
927
+ imageWidth = props.imageWidth,
928
+ getSerializers = props.getSerializers;
929
+
930
+
931
+ var builder = imageUrlBuilder(client);
932
+
933
+ var urlFor = function urlFor(source) {
934
+ return builder.image(source).auto('format');
935
+ };
936
+
937
+ var renderCardImage = function renderCardImage(row) {
938
+ var url = urlFor(row.thumbnail);
939
+ if (imageHeight) url = url.height(imageHeight);
940
+ if (imageWidth) url = url.width(imageWidth);
941
+ return url.url();
942
+ };
943
+
944
+ var mode = variant && variant === 'bottom' ? 'column-reverse' : 'column';
945
+
946
+ var itemCounter = 0;
947
+ var lgVar = 12;
948
+
949
+ return React__default.createElement(
950
+ 'div',
951
+ { className: 'contentDeck' },
952
+ React__default.createElement(
953
+ Container,
954
+ null,
955
+ React__default.createElement(
956
+ Row,
957
+ null,
958
+ data && data.map(function (row, index) {
959
+ if (columns === 'rotate' && itemCounter % 3 === 0) {
960
+ lgVar = 12;
961
+ } else if (columns && columns !== 'rotate') {
962
+ lgVar = Math.floor(12 / columns);
963
+ } else {
964
+ lgVar = 6;
965
+ }
966
+ var thumbnailURL = row.thumbnail && row.thumbnail.asset ? renderCardImage(row) : defaultImage;
967
+ return React__default.createElement(
968
+ Col,
969
+ { key: itemCounter, md: 12, lg: lgVar, counter: itemCounter++, style: { display: 'flex', flex: '1 0 auto' } },
970
+ React__default.createElement(
971
+ Card,
972
+ { className: 'taxonomy-card', style: { flexDirection: mode, position: 'relative', overflow: 'hidden' } },
973
+ React__default.createElement(
974
+ Card.Body,
975
+ null,
976
+ React__default.createElement(
977
+ Row,
978
+ null,
979
+ thumbnailURL && React__default.createElement(
980
+ Col,
981
+ null,
982
+ React__default.createElement(
983
+ LazyLoad,
984
+ { height: imageHeight },
985
+ React__default.createElement(Card.Img, { variant: 'top', src: thumbnailURL })
986
+ )
987
+ ),
988
+ React__default.createElement(
989
+ Col,
990
+ null,
991
+ row.url ? React__default.createElement(
992
+ 'a',
993
+ { href: row.url },
994
+ React__default.createElement(
995
+ Card.Title,
996
+ null,
997
+ row.name
998
+ )
999
+ ) : React__default.createElement(
1000
+ Card.Title,
1001
+ null,
1002
+ row.name
1003
+ ),
1004
+ React__default.createElement(
1005
+ Card.Text,
1006
+ null,
1007
+ React__default.createElement(BlockContent, _extends({ blocks: row.summary, serializers: getSerializers }, client.config()))
1008
+ )
1009
+ )
1010
+ ),
1011
+ icon && React__default.createElement(
1012
+ 'span',
1013
+ {
1014
+ className: 'taxonomy-icon',
1015
+ style: {
1016
+ position: 'absolute',
1017
+ right: '20px',
1018
+ top: '50%',
1019
+ transform: 'translateY(-50%) translateX(50px)',
1020
+ transition: 'all .25s',
1021
+ pointerEvents: 'none'
1022
+ } },
1023
+ '\u2192'
1024
+ )
1025
+ )
1026
+ )
1027
+ );
1028
+ })
1029
+ )
1030
+ ),
1031
+ icon && React__default.createElement(
1032
+ 'style',
1033
+ { jsx: 'true' },
1034
+ '\n .taxonomy-card:hover .taxonomy-icon {\n transform: translateY(-50%) scale(1.5) translateX(0) !important;\n }\n '
1035
+ )
1036
+ );
1037
+ };
1038
+
1039
+ export { BlockContent as B, TaxonomyCard as T };