@ndla/ui 34.6.1 → 34.6.3

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 (153) hide show
  1. package/es/Article/Article.js +11 -6
  2. package/es/Aside/Aside.js +5 -2
  3. package/es/CopyParagraphButton/CopyParagraphButtonV2.js +85 -0
  4. package/es/CopyParagraphButton/index.js +2 -1
  5. package/es/Embed/AudioEmbed.js +254 -0
  6. package/es/Embed/BrightcoveEmbed.js +250 -0
  7. package/es/Embed/ConceptEmbed.js +358 -0
  8. package/es/Embed/ConceptListEmbed.js +71 -0
  9. package/es/Embed/ContentLinkEmbed.js +42 -0
  10. package/es/Embed/ExternalEmbed.js +91 -0
  11. package/es/Embed/FootnoteEmbed.js +32 -0
  12. package/es/Embed/H5pEmbed.js +87 -0
  13. package/es/Embed/IframeEmbed.js +83 -0
  14. package/es/Embed/ImageEmbed.js +322 -0
  15. package/es/Embed/RelatedContentEmbed.js +58 -0
  16. package/es/Embed/UnknownEmbed.js +27 -0
  17. package/es/Embed/conceptComponents.js +282 -0
  18. package/es/Embed/index.js +21 -0
  19. package/es/FactBox/FactBoxV2.js +90 -0
  20. package/es/FactBox/index.js +1 -0
  21. package/es/Figure/Figure.js +8 -5
  22. package/es/Figure/FigureLicenseDialogContent.js +72 -0
  23. package/es/FileList/FileListV2.js +47 -0
  24. package/es/FileList/FileV2.js +34 -0
  25. package/es/FileList/PdfFile.js +25 -0
  26. package/es/FileList/index.js +3 -0
  27. package/es/Notion/Notion.js +5 -5
  28. package/es/Notion/NotionVisualElement.js +2 -2
  29. package/es/RelatedArticleList/RelatedArticleV2.js +101 -0
  30. package/es/RelatedArticleList/index.js +2 -1
  31. package/es/Table/Table.js +95 -8
  32. package/es/all.css +1 -1
  33. package/es/index.js +5 -4
  34. package/es/locale/messages-en.js +11 -1
  35. package/es/locale/messages-nb.js +11 -1
  36. package/es/locale/messages-nn.js +11 -1
  37. package/es/locale/messages-se.js +11 -1
  38. package/es/locale/messages-sma.js +11 -1
  39. package/lib/Article/Article.d.ts +2 -1
  40. package/lib/Article/Article.js +11 -6
  41. package/lib/Aside/Aside.d.ts +2 -1
  42. package/lib/Aside/Aside.js +5 -2
  43. package/lib/CopyParagraphButton/CopyParagraphButtonV2.d.ts +14 -0
  44. package/lib/CopyParagraphButton/CopyParagraphButtonV2.js +84 -0
  45. package/lib/CopyParagraphButton/index.d.ts +2 -1
  46. package/lib/CopyParagraphButton/index.js +7 -0
  47. package/lib/Embed/AudioEmbed.d.ts +20 -0
  48. package/lib/Embed/AudioEmbed.js +252 -0
  49. package/lib/Embed/BrightcoveEmbed.d.ts +16 -0
  50. package/lib/Embed/BrightcoveEmbed.js +250 -0
  51. package/lib/Embed/ConceptEmbed.d.ts +19 -0
  52. package/lib/Embed/ConceptEmbed.js +358 -0
  53. package/lib/Embed/ConceptListEmbed.d.ts +13 -0
  54. package/lib/Embed/ConceptListEmbed.js +70 -0
  55. package/lib/Embed/ContentLinkEmbed.d.ts +14 -0
  56. package/lib/Embed/ContentLinkEmbed.js +50 -0
  57. package/lib/Embed/ExternalEmbed.d.ts +14 -0
  58. package/lib/Embed/ExternalEmbed.js +90 -0
  59. package/lib/Embed/FootnoteEmbed.d.ts +13 -0
  60. package/lib/Embed/FootnoteEmbed.js +39 -0
  61. package/lib/Embed/H5pEmbed.d.ts +14 -0
  62. package/lib/Embed/H5pEmbed.js +86 -0
  63. package/lib/Embed/IframeEmbed.d.ts +14 -0
  64. package/lib/Embed/IframeEmbed.js +91 -0
  65. package/lib/Embed/ImageEmbed.d.ts +37 -0
  66. package/lib/Embed/ImageEmbed.js +326 -0
  67. package/lib/Embed/RelatedContentEmbed.d.ts +16 -0
  68. package/lib/Embed/RelatedContentEmbed.js +64 -0
  69. package/lib/Embed/UnknownEmbed.d.ts +13 -0
  70. package/lib/Embed/UnknownEmbed.js +35 -0
  71. package/lib/Embed/conceptComponents.d.ts +32 -0
  72. package/lib/Embed/conceptComponents.js +280 -0
  73. package/lib/Embed/index.d.ts +20 -0
  74. package/lib/Embed/index.js +97 -0
  75. package/lib/FactBox/FactBoxV2.d.ts +13 -0
  76. package/lib/FactBox/FactBoxV2.js +92 -0
  77. package/lib/FactBox/index.d.ts +1 -0
  78. package/lib/FactBox/index.js +7 -0
  79. package/lib/Figure/Figure.d.ts +5 -2
  80. package/lib/Figure/Figure.js +8 -5
  81. package/lib/Figure/FigureLicenseDialogContent.d.ts +22 -0
  82. package/lib/Figure/FigureLicenseDialogContent.js +71 -0
  83. package/lib/FileList/FileListV2.d.ts +13 -0
  84. package/lib/FileList/FileListV2.js +46 -0
  85. package/lib/FileList/FileV2.d.ts +16 -0
  86. package/lib/FileList/FileV2.js +42 -0
  87. package/lib/FileList/PdfFile.d.ts +13 -0
  88. package/lib/FileList/PdfFile.js +31 -0
  89. package/lib/FileList/index.d.ts +3 -0
  90. package/lib/FileList/index.js +21 -0
  91. package/lib/Notion/Notion.js +5 -5
  92. package/lib/Notion/NotionVisualElement.d.ts +1 -1
  93. package/lib/Notion/NotionVisualElement.js +2 -2
  94. package/lib/RelatedArticleList/RelatedArticleV2.d.ts +25 -0
  95. package/lib/RelatedArticleList/RelatedArticleV2.js +101 -0
  96. package/lib/RelatedArticleList/index.d.ts +2 -1
  97. package/lib/RelatedArticleList/index.js +7 -0
  98. package/lib/Table/Table.js +98 -8
  99. package/lib/all.css +1 -1
  100. package/lib/index.d.ts +5 -4
  101. package/lib/index.js +117 -2
  102. package/lib/locale/messages-en.d.ts +10 -0
  103. package/lib/locale/messages-en.js +11 -1
  104. package/lib/locale/messages-nb.d.ts +10 -0
  105. package/lib/locale/messages-nb.js +11 -1
  106. package/lib/locale/messages-nn.d.ts +10 -0
  107. package/lib/locale/messages-nn.js +11 -1
  108. package/lib/locale/messages-se.d.ts +10 -0
  109. package/lib/locale/messages-se.js +11 -1
  110. package/lib/locale/messages-sma.d.ts +10 -0
  111. package/lib/locale/messages-sma.js +11 -1
  112. package/lib/types.d.ts +1 -1
  113. package/package.json +16 -12
  114. package/src/Article/Article.tsx +8 -3
  115. package/src/Aside/Aside.tsx +9 -1
  116. package/src/Aside/component.aside.scss +3 -0
  117. package/src/CopyParagraphButton/CopyParagraphButtonV2.tsx +84 -0
  118. package/src/CopyParagraphButton/index.tsx +2 -1
  119. package/src/Embed/AudioEmbed.tsx +249 -0
  120. package/src/Embed/BrightcoveEmbed.tsx +203 -0
  121. package/src/Embed/ConceptEmbed.tsx +408 -0
  122. package/src/Embed/ConceptListEmbed.tsx +64 -0
  123. package/src/Embed/ContentLinkEmbed.tsx +41 -0
  124. package/src/Embed/ExternalEmbed.tsx +80 -0
  125. package/src/Embed/FootnoteEmbed.tsx +30 -0
  126. package/src/Embed/H5pEmbed.tsx +74 -0
  127. package/src/Embed/IframeEmbed.tsx +84 -0
  128. package/src/Embed/ImageEmbed.tsx +314 -0
  129. package/src/Embed/RelatedContentEmbed.tsx +62 -0
  130. package/src/Embed/UnknownEmbed.tsx +27 -0
  131. package/src/Embed/conceptComponents.tsx +393 -0
  132. package/src/Embed/index.ts +21 -0
  133. package/src/FactBox/FactBoxV2.tsx +56 -0
  134. package/src/FactBox/index.ts +2 -0
  135. package/src/Figure/Figure.tsx +28 -15
  136. package/src/Figure/FigureLicenseDialogContent.tsx +80 -0
  137. package/src/Figure/component.figure.scss +0 -1
  138. package/src/FileList/FileListV2.tsx +58 -0
  139. package/src/FileList/FileV2.tsx +35 -0
  140. package/src/FileList/PdfFile.tsx +25 -0
  141. package/src/FileList/index.ts +3 -0
  142. package/src/Notion/Notion.tsx +0 -1
  143. package/src/Notion/NotionVisualElement.tsx +1 -1
  144. package/src/RelatedArticleList/RelatedArticleV2.tsx +84 -0
  145. package/src/RelatedArticleList/index.ts +2 -1
  146. package/src/Table/Table.tsx +77 -4
  147. package/src/index.ts +19 -4
  148. package/src/locale/messages-en.ts +10 -0
  149. package/src/locale/messages-nb.ts +10 -0
  150. package/src/locale/messages-nn.ts +10 -0
  151. package/src/locale/messages-se.ts +10 -1
  152. package/src/locale/messages-sma.ts +10 -0
  153. package/src/types.ts +1 -1
@@ -0,0 +1,322 @@
1
+ import _styled from "@emotion/styled/base";
2
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
5
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
6
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
7
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
9
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
11
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
13
+ /**
14
+ * Copyright (c) 2023-present, NDLA.
15
+ *
16
+ * This source code is licensed under the GPLv3 license found in the
17
+ * LICENSE file in the root directory of this source tree.
18
+ *
19
+ */
20
+
21
+ import isNumber from 'lodash/isNumber';
22
+ import { figureApa7CopyString, getGroupedContributorDescriptionList, getLicenseByAbbreviation } from '@ndla/licenses';
23
+ import { useTranslation } from 'react-i18next';
24
+ import { ModalV2 } from '@ndla/modal';
25
+ import { SafeLinkButton } from '@ndla/safelink';
26
+ import { useState } from 'react';
27
+ import { ButtonV2, CopyButton } from '@ndla/button';
28
+ import { ExpandTwoArrows } from '@ndla/icons/action';
29
+ import { ArrowCollapse, ChevronDown, ChevronUp } from '@ndla/icons/common';
30
+ import { Figure, FigureCaption } from '../Figure';
31
+ import Image, { ImageLink } from '../Image';
32
+ import { FigureLicenseDialogContent } from '../Figure/FigureLicenseDialogContent';
33
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
34
+ import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
35
+ import { Fragment as _Fragment } from "@emotion/react/jsx-runtime";
36
+ export var getLicenseCredits = function getLicenseCredits(copyright) {
37
+ var _copyright$creators, _copyright$rightshold, _copyright$processors;
38
+ return {
39
+ creators: (_copyright$creators = copyright === null || copyright === void 0 ? void 0 : copyright.creators) !== null && _copyright$creators !== void 0 ? _copyright$creators : [],
40
+ rightsholders: (_copyright$rightshold = copyright === null || copyright === void 0 ? void 0 : copyright.rightsholders) !== null && _copyright$rightshold !== void 0 ? _copyright$rightshold : [],
41
+ processors: (_copyright$processors = copyright === null || copyright === void 0 ? void 0 : copyright.processors) !== null && _copyright$processors !== void 0 ? _copyright$processors : []
42
+ };
43
+ };
44
+ export var errorSvgSrc = "data:image/svg+xml;charset=UTF-8,%3Csvg fill='%238A8888' height='400' viewBox='0 0 24 12' width='100%25' xmlns='http://www.w3.org/2000/svg' style='background-color: %23EFF0F2'%3E%3Cpath d='M0 0h24v24H0V0z' fill='none'/%3E%3Cpath transform='scale(0.3) translate(28, 8.5)' d='M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z'/%3E%3C/svg%3E";
45
+ var isSmall = function isSmall(size) {
46
+ return size === 'xsmall' || size === 'small';
47
+ };
48
+ var isAlign = function isAlign(align) {
49
+ return align === 'left' || align === 'right';
50
+ };
51
+ var getFigureType = function getFigureType(size, align) {
52
+ if (size && isSmall(size) && align && isAlign(align)) {
53
+ return "".concat(size, "-").concat(align);
54
+ }
55
+ if (size && isSmall(size) && !align) {
56
+ return size;
57
+ }
58
+ if (align && isAlign(align)) {
59
+ return align;
60
+ }
61
+ return 'full';
62
+ };
63
+ var getSizes = function getSizes(size, align) {
64
+ if (align && size === 'full') {
65
+ return '(min-width: 1024px) 512px, (min-width: 768px) 350px, 100vw';
66
+ }
67
+ if (align && size === 'small') {
68
+ return '(min-width: 1024px) 350px, (min-width: 768px) 180px, 100vw';
69
+ }
70
+ if (align && size === 'xsmall') {
71
+ return '(min-width: 1024px) 180px, (min-width: 768px) 180px, 100vw';
72
+ }
73
+ return '(min-width: 1024px) 1024px, 100vw';
74
+ };
75
+ var getFocalPoint = function getFocalPoint(data) {
76
+ if (isNumber(data.focalX) && isNumber(data.focalY)) {
77
+ return {
78
+ x: data.focalX,
79
+ y: data.focalY
80
+ };
81
+ }
82
+ return undefined;
83
+ };
84
+ var getCrop = function getCrop(data) {
85
+ if (isNumber(data.lowerRightX) && isNumber(data.lowerRightY) && isNumber(data.upperLeftX) && isNumber(data.upperLeftY)) {
86
+ return {
87
+ startX: data.lowerRightX,
88
+ startY: data.lowerRightY,
89
+ endX: data.upperLeftX,
90
+ endY: data.upperLeftY
91
+ };
92
+ }
93
+ return undefined;
94
+ };
95
+ var StyledSpan = /*#__PURE__*/_styled("span", {
96
+ target: "ened8ka0",
97
+ label: "StyledSpan"
98
+ })(process.env.NODE_ENV === "production" ? {
99
+ name: "1t01il3",
100
+ styles: "font-style:italic;color:grey"
101
+ } : {
102
+ name: "1t01il3",
103
+ styles: "font-style:italic;color:grey",
104
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkltYWdlRW1iZWQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNHOEIiLCJmaWxlIjoiSW1hZ2VFbWJlZC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMy1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBpc051bWJlciBmcm9tICdsb2Rhc2gvaXNOdW1iZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgZmlndXJlQXBhN0NvcHlTdHJpbmcsIGdldEdyb3VwZWRDb250cmlidXRvckRlc2NyaXB0aW9uTGlzdCwgZ2V0TGljZW5zZUJ5QWJicmV2aWF0aW9uIH0gZnJvbSAnQG5kbGEvbGljZW5zZXMnO1xuaW1wb3J0IHsgSW1hZ2VFbWJlZERhdGEsIEltYWdlTWV0YURhdGEgfSBmcm9tICdAbmRsYS90eXBlcy1lbWJlZCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgTW9kYWxWMiB9IGZyb20gJ0BuZGxhL21vZGFsJztcbmltcG9ydCB7IFNhZmVMaW5rQnV0dG9uIH0gZnJvbSAnQG5kbGEvc2FmZWxpbmsnO1xuaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQnV0dG9uVjIsIENvcHlCdXR0b24gfSBmcm9tICdAbmRsYS9idXR0b24nO1xuaW1wb3J0IHsgRXhwYW5kVHdvQXJyb3dzIH0gZnJvbSAnQG5kbGEvaWNvbnMvYWN0aW9uJztcbmltcG9ydCB7IEFycm93Q29sbGFwc2UsIENoZXZyb25Eb3duLCBDaGV2cm9uVXAgfSBmcm9tICdAbmRsYS9pY29ucy9jb21tb24nO1xuaW1wb3J0IHsgRmlndXJlLCBGaWd1cmVDYXB0aW9uLCBGaWd1cmVUeXBlIH0gZnJvbSAnLi4vRmlndXJlJztcbmltcG9ydCBJbWFnZSwgeyBJbWFnZUxpbmsgfSBmcm9tICcuLi9JbWFnZSc7XG5pbXBvcnQgeyBGaWd1cmVMaWNlbnNlRGlhbG9nQ29udGVudCB9IGZyb20gJy4uL0ZpZ3VyZS9GaWd1cmVMaWNlbnNlRGlhbG9nQ29udGVudCc7XG5pbXBvcnQgeyBDb3B5cmlnaHQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGVtYmVkOiBJbWFnZU1ldGFEYXRhO1xuICBhcnRpY2xlUGF0aD86IHN0cmluZztcbiAgcHJldmlld0FsdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMaWNlbnNlQ3JlZGl0cyA9IChjb3B5cmlnaHQ/OiB7XG4gIGNyZWF0b3JzPzogQXV0aG9yW107XG4gIHJpZ2h0c2hvbGRlcnM/OiBBdXRob3JbXTtcbiAgcHJvY2Vzc29ycz86IEF1dGhvcltdO1xufSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGNyZWF0b3JzOiBjb3B5cmlnaHQ/LmNyZWF0b3JzID8/IFtdLFxuICAgIHJpZ2h0c2hvbGRlcnM6IGNvcHlyaWdodD8ucmlnaHRzaG9sZGVycyA/PyBbXSxcbiAgICBwcm9jZXNzb3JzOiBjb3B5cmlnaHQ/LnByb2Nlc3NvcnMgPz8gW10sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXJyb3JTdmdTcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnIGZpbGw9JyUyMzhBODg4OCcgaGVpZ2h0PSc0MDAnIHZpZXdCb3g9JzAgMCAyNCAxMicgd2lkdGg9JzEwMCUyNScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogJTIzRUZGMEYyJyUzRSUzQ3BhdGggZD0nTTAgMGgyNHYyNEgwVjB6JyBmaWxsPSdub25lJy8lM0UlM0NwYXRoIHRyYW5zZm9ybT0nc2NhbGUoMC4zKSB0cmFuc2xhdGUoMjgsIDguNSknIGQ9J00xMSAxNWgydjJoLTJ6bTAtOGgydjZoLTJ6bS45OS01QzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Jy8lM0UlM0Mvc3ZnJTNFYDtcbmNvbnN0IGlzU21hbGwgPSAoc2l6ZT86IHN0cmluZyk6IHNpemUgaXMgJ3hzbWFsbCcgfCAnc21hbGwnID0+IHNpemUgPT09ICd4c21hbGwnIHx8IHNpemUgPT09ICdzbWFsbCc7XG5cbmNvbnN0IGlzQWxpZ24gPSAoYWxpZ24/OiBzdHJpbmcpOiBhbGlnbiBpcyAnbGVmdCcgfCAncmlnaHQnID0+IGFsaWduID09PSAnbGVmdCcgfHwgYWxpZ24gPT09ICdyaWdodCc7XG5cbmNvbnN0IGdldEZpZ3VyZVR5cGUgPSAoc2l6ZT86IHN0cmluZywgYWxpZ24/OiBzdHJpbmcpOiBGaWd1cmVUeXBlID0+IHtcbiAgaWYgKHNpemUgJiYgaXNTbWFsbChzaXplKSAmJiBhbGlnbiAmJiBpc0FsaWduKGFsaWduKSkge1xuICAgIHJldHVybiBgJHtzaXplfS0ke2FsaWdufWA7XG4gIH1cbiAgaWYgKHNpemUgJiYgaXNTbWFsbChzaXplKSAmJiAhYWxpZ24pIHtcbiAgICByZXR1cm4gc2l6ZSBhcyBGaWd1cmVUeXBlO1xuICB9XG4gIGlmIChhbGlnbiAmJiBpc0FsaWduKGFsaWduKSkge1xuICAgIHJldHVybiBhbGlnbjtcbiAgfVxuICByZXR1cm4gJ2Z1bGwnO1xufTtcblxuY29uc3QgZ2V0U2l6ZXMgPSAoc2l6ZT86IHN0cmluZywgYWxpZ24/OiBzdHJpbmcpID0+IHtcbiAgaWYgKGFsaWduICYmIHNpemUgPT09ICdmdWxsJykge1xuICAgIHJldHVybiAnKG1pbi13aWR0aDogMTAyNHB4KSA1MTJweCwgKG1pbi13aWR0aDogNzY4cHgpIDM1MHB4LCAxMDB2dyc7XG4gIH1cbiAgaWYgKGFsaWduICYmIHNpemUgPT09ICdzbWFsbCcpIHtcbiAgICByZXR1cm4gJyhtaW4td2lkdGg6IDEwMjRweCkgMzUwcHgsIChtaW4td2lkdGg6IDc2OHB4KSAxODBweCwgMTAwdncnO1xuICB9XG4gIGlmIChhbGlnbiAmJiBzaXplID09PSAneHNtYWxsJykge1xuICAgIHJldHVybiAnKG1pbi13aWR0aDogMTAyNHB4KSAxODBweCwgKG1pbi13aWR0aDogNzY4cHgpIDE4MHB4LCAxMDB2dyc7XG4gIH1cbiAgcmV0dXJuICcobWluLXdpZHRoOiAxMDI0cHgpIDEwMjRweCwgMTAwdncnO1xufTtcblxuY29uc3QgZ2V0Rm9jYWxQb2ludCA9IChkYXRhOiBJbWFnZUVtYmVkRGF0YSkgPT4ge1xuICBpZiAoaXNOdW1iZXIoZGF0YS5mb2NhbFgpICYmIGlzTnVtYmVyKGRhdGEuZm9jYWxZKSkge1xuICAgIHJldHVybiB7IHg6IGRhdGEuZm9jYWxYLCB5OiBkYXRhLmZvY2FsWSB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBnZXRDcm9wID0gKGRhdGE6IEltYWdlRW1iZWREYXRhKSA9PiB7XG4gIGlmIChcbiAgICBpc051bWJlcihkYXRhLmxvd2VyUmlnaHRYKSAmJlxuICAgIGlzTnVtYmVyKGRhdGEubG93ZXJSaWdodFkpICYmXG4gICAgaXNOdW1iZXIoZGF0YS51cHBlckxlZnRYKSAmJlxuICAgIGlzTnVtYmVyKGRhdGEudXBwZXJMZWZ0WSlcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0WDogZGF0YS5sb3dlclJpZ2h0WCxcbiAgICAgIHN0YXJ0WTogZGF0YS5sb3dlclJpZ2h0WSxcbiAgICAgIGVuZFg6IGRhdGEudXBwZXJMZWZ0WCxcbiAgICAgIGVuZFk6IGRhdGEudXBwZXJMZWZ0WSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBTdHlsZWRTcGFuID0gc3R5bGVkLnNwYW5gXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgY29sb3I6IGdyZXk7XG5gO1xuXG5jb25zdCBleHBhbmRlZFNpemVzID0gJyhtaW4td2lkdGg6IDEwMjRweCkgMTAyNHB4LCAxMDB2dyc7XG5cbmNvbnN0IEltYWdlRW1iZWQgPSAoeyBlbWJlZCwgYXJ0aWNsZVBhdGgsIHByZXZpZXdBbHQgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzQnlsaW5lSGlkZGVuLCBzZXRJc0J5bGluZUhpZGRlbl0gPSB1c2VTdGF0ZShoaWRlQnlsaW5lKGVtYmVkLmVtYmVkRGF0YS5zaXplKSk7XG4gIGNvbnN0IFtpbWFnZVNpemVzLCBzZXRJbWFnZVNpemVzXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBpZiAoZW1iZWQuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgY29uc3QgeyBhbGlnbiwgc2l6ZSB9ID0gZW1iZWQuZW1iZWREYXRhO1xuICAgIGNvbnN0IGZpZ3VyZVR5cGUgPSBnZXRGaWd1cmVUeXBlKHNpemUsIGFsaWduKTtcbiAgICByZXR1cm4gKFxuICAgICAgPEZpZ3VyZSB0eXBlPXtmaWd1cmVUeXBlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWZpZ3VyZV9faW1nXCI+XG4gICAgICAgICAgPGltZyBhbHQ9e3QoJ2ltYWdlLmVycm9yLnVybCcpfSBzcmM9e2Vycm9yU3ZnU3JjfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZpZ2NhcHRpb24+e3QoJ2ltYWdlLmVycm9yLmNhcHRpb24nKX08L2ZpZ2NhcHRpb24+XG4gICAgICA8L0ZpZ3VyZT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgeyBkYXRhLCBlbWJlZERhdGEsIHNlcSB9ID0gZW1iZWQ7XG5cbiAgY29uc3QgYXV0aG9ycyA9IGdldExpY2Vuc2VDcmVkaXRzKGRhdGEuY29weXJpZ2h0KTtcblxuICBjb25zdCBhbHRUZXh0ID0gZW1iZWREYXRhLmFsdCB8fCAnJztcbiAgY29uc3QgY2FwdGlvbiA9IGVtYmVkRGF0YS5jYXB0aW9uIHx8ICcnO1xuICBjb25zdCBsaWNlbnNlID0gZ2V0TGljZW5zZUJ5QWJicmV2aWF0aW9uKGRhdGEuY29weXJpZ2h0LmxpY2Vuc2UubGljZW5zZSwgaTE4bi5sYW5ndWFnZSk7XG5cbiAgY29uc3QgZmlndXJlVHlwZSA9IGdldEZpZ3VyZVR5cGUoZW1iZWREYXRhLnNpemUsIGVtYmVkRGF0YS5hbGlnbik7XG4gIGNvbnN0IHNpemVzID0gZ2V0U2l6ZXMoZW1iZWREYXRhLnNpemUsIGVtYmVkRGF0YS5hbGlnbik7XG5cbiAgY29uc3QgZm9jYWxQb2ludCA9IGdldEZvY2FsUG9pbnQoZW1iZWREYXRhKTtcbiAgY29uc3QgY3JvcCA9IGdldENyb3AoZW1iZWREYXRhKTtcblxuICBjb25zdCBjb250cmlidXRvcnMgPSBnZXRHcm91cGVkQ29udHJpYnV0b3JEZXNjcmlwdGlvbkxpc3QoZGF0YS5jb3B5cmlnaHQsIGkxOG4ubGFuZ3VhZ2UpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICBuYW1lOiBpdGVtLmRlc2NyaXB0aW9uLFxuICAgIHR5cGU6IGl0ZW0ubGFiZWwsXG4gIH0pKTtcblxuICBjb25zdCBmaWd1cmVJZCA9IGBmaWd1cmUtJHtzZXF9LSR7ZGF0YS5pZH1gO1xuXG4gIGNvbnN0IHsgY3JlYXRvcnMsIHJpZ2h0c2hvbGRlcnMsIHByb2Nlc3NvcnMgfSA9IGF1dGhvcnM7XG4gIGNvbnN0IGNhcHRpb25BdXRob3JzID0gY3JlYXRvcnMubGVuZ3RoIHx8IHJpZ2h0c2hvbGRlcnMubGVuZ3RoID8gWy4uLmNyZWF0b3JzLCAuLi5yaWdodHNob2xkZXJzXSA6IHByb2Nlc3NvcnM7XG4gIHJldHVybiAoXG4gICAgPEZpZ3VyZVxuICAgICAgaWQ9e2ZpZ3VyZUlkfVxuICAgICAgdHlwZT17aW1hZ2VTaXplcyA/IHVuZGVmaW5lZCA6IGZpZ3VyZVR5cGV9XG4gICAgICBjbGFzc05hbWU9e2ltYWdlU2l6ZXMgPyAnYy1maWd1cmUtLXJpZ2h0IGV4cGFuZGVkJyA6ICcnfT5cbiAgICAgIDxJbWFnZVdyYXBwZXIgc3JjPXtkYXRhLmltYWdlVXJsfSBjcm9wPXtjcm9wfSBzaXplPXtlbWJlZERhdGEuc2l6ZX0+XG4gICAgICAgIDxJbWFnZVxuICAgICAgICAgIGZvY2FsUG9pbnQ9e2ZvY2FsUG9pbnR9XG4gICAgICAgICAgY29udGVudFR5cGU9e2RhdGEuY29udGVudFR5cGV9XG4gICAgICAgICAgY3JvcD17Y3JvcH1cbiAgICAgICAgICBzaXplcz17aW1hZ2VTaXplcyA/PyBzaXplc31cbiAgICAgICAgICBhbHQ9e2FsdFRleHR9XG4gICAgICAgICAgc3JjPXtkYXRhLmltYWdlVXJsfVxuICAgICAgICAgIGV4cGFuZEJ1dHRvbj17XG4gICAgICAgICAgICA8RXhwYW5kQnV0dG9uXG4gICAgICAgICAgICAgIHNpemU9e2VtYmVkRGF0YS5zaXplfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ISFpbWFnZVNpemVzfVxuICAgICAgICAgICAgICBieWxpbmVIaWRkZW49e2lzQnlsaW5lSGlkZGVufVxuICAgICAgICAgICAgICBvbkV4cGFuZD17KCkgPT4gc2V0SW1hZ2VTaXplcygocCkgPT4gKHAgPyB1bmRlZmluZWQgOiBleHBhbmRlZFNpemVzKSl9XG4gICAgICAgICAgICAgIG9uSGlkZUJ5bGluZT17KCkgPT4gc2V0SXNCeWxpbmVIaWRkZW4oKHApID0+ICFwKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgPC9JbWFnZVdyYXBwZXI+XG4gICAgICB7cHJldmlld0FsdCA/IDxTdHlsZWRTcGFuPntgQWx0OiAke2VtYmVkRGF0YS5hbHR9YH08L1N0eWxlZFNwYW4+IDogbnVsbH1cbiAgICAgIDxGaWd1cmVDYXB0aW9uXG4gICAgICAgIGhpZGVGaWdjYXB0aW9uPXtpc1NtYWxsKGVtYmVkRGF0YS5zaXplKSB8fCBpc0J5bGluZUhpZGRlbn1cbiAgICAgICAgZmlndXJlSWQ9e2ZpZ3VyZUlkfVxuICAgICAgICBpZD17ZmlndXJlSWR9XG4gICAgICAgIGNhcHRpb249e2NhcHRpb259XG4gICAgICAgIHJldXNlTGFiZWw9e3QoJ2ltYWdlLnJldXNlJyl9XG4gICAgICAgIG1vZGFsQnV0dG9uPXtcbiAgICAgICAgICA8QnV0dG9uVjIgc2hhcGU9XCJwaWxsXCIgdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiBzZXRJc09wZW4odHJ1ZSl9PlxuICAgICAgICAgICAge3QoJ2ltYWdlLnJldXNlJyl9XG4gICAgICAgICAgPC9CdXR0b25WMj5cbiAgICAgICAgfVxuICAgICAgICBsaWNlbnNlUmlnaHRzPXtsaWNlbnNlLnJpZ2h0c31cbiAgICAgICAgYXV0aG9ycz17Y2FwdGlvbkF1dGhvcnN9XG4gICAgICAgIGxvY2FsZT17aTE4bi5sYW5ndWFnZX0+XG4gICAgICAgIDxNb2RhbFYyIGNvbnRyb2xsZWQgaXNPcGVuPXtpc09wZW59IG9uQ2xvc2U9eygpID0+IHNldElzT3BlbihmYWxzZSl9IGxhYmVsbGVkQnk9XCJsaWNlbnNlLWRpYWxvZy1ydWxlcy1oZWFkaW5nXCI+XG4gICAgICAgICAgeyhjbG9zZSkgPT4gKFxuICAgICAgICAgICAgPEZpZ3VyZUxpY2Vuc2VEaWFsb2dDb250ZW50XG4gICAgICAgICAgICAgIHRpdGxlPXtkYXRhLnRpdGxlLnRpdGxlfVxuICAgICAgICAgICAgICBsaWNlbnNlPXtsaWNlbnNlfVxuICAgICAgICAgICAgICBvbkNsb3NlPXtjbG9zZX1cbiAgICAgICAgICAgICAgYXV0aG9ycz17Y29udHJpYnV0b3JzfVxuICAgICAgICAgICAgICBvcmlnaW49e2RhdGEuY29weXJpZ2h0Lm9yaWdpbn1cbiAgICAgICAgICAgICAgbG9jYWxlPXtpMThuLmxhbmd1YWdlfVxuICAgICAgICAgICAgICB0eXBlPVwiaW1hZ2VcIj5cbiAgICAgICAgICAgICAgPEltYWdlTGljZW5zZUJ1dHRvbnNcbiAgICAgICAgICAgICAgICBhcnRpY2xlUGF0aD17YXJ0aWNsZVBhdGh9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2RhdGEudGl0bGUudGl0bGV9XG4gICAgICAgICAgICAgICAgaW1hZ2VVcmw9e2RhdGEuaW1hZ2VVcmx9XG4gICAgICAgICAgICAgICAgY29weXJpZ2h0PXtkYXRhLmNvcHlyaWdodH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRmlndXJlTGljZW5zZURpYWxvZ0NvbnRlbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Nb2RhbFYyPlxuICAgICAgPC9GaWd1cmVDYXB0aW9uPlxuICAgIDwvRmlndXJlPlxuICApO1xufTtcblxuaW50ZXJmYWNlIEltYWdlV3JhcHBlclByb3BzIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNyb3A/OiB7XG4gICAgc3RhcnRYOiBudW1iZXI7XG4gICAgc3RhcnRZOiBudW1iZXI7XG4gICAgZW5kWDogbnVtYmVyO1xuICAgIGVuZFk6IG51bWJlcjtcbiAgfTtcbiAgc2l6ZT86IHN0cmluZztcbn1cbmNvbnN0IGhpZGVCeWxpbmUgPSAoc2l6ZT86IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gISFzaXplICYmIHNpemUuZW5kc1dpdGgoJy1oaWRlLWJ5bGluZScpO1xufTtcblxuaW50ZXJmYWNlIEltYWdlTGljZW5zZUJ1dHRvbnNQcm9wcyB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBhcnRpY2xlUGF0aD86IHN0cmluZztcbiAgY29weXJpZ2h0PzogUGFydGlhbDxDb3B5cmlnaHQ+O1xufVxuXG5leHBvcnQgY29uc3QgSW1hZ2VMaWNlbnNlQnV0dG9ucyA9ICh7IGltYWdlVXJsLCB0aXRsZSwgYXJ0aWNsZVBhdGgsIGNvcHlyaWdodCB9OiBJbWFnZUxpY2Vuc2VCdXR0b25zUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBpZiAoIWNvcHlyaWdodD8ubGljZW5zZT8ubGljZW5zZSB8fCBjb3B5cmlnaHQ/LmxpY2Vuc2U/LmxpY2Vuc2UgPT09ICdDT1BZUklHSFRFRCcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGNvcHlTdHJpbmcgPSBmaWd1cmVBcGE3Q29weVN0cmluZyhcbiAgICB0aXRsZSxcbiAgICB1bmRlZmluZWQsXG4gICAgaW1hZ2VVcmwsXG4gICAgYXJ0aWNsZVBhdGgsXG4gICAgY29weXJpZ2h0LFxuICAgIGNvcHlyaWdodD8ubGljZW5zZT8ubGljZW5zZSxcbiAgICAnJyxcbiAgICB0LFxuICAgIGkxOG4ubGFuZ3VhZ2UsXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPENvcHlCdXR0b25cbiAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb3B5U3RyaW5nKX1cbiAgICAgICAgY29weU5vZGU9e3QoJ2xpY2Vuc2UuaGFzQ29waWVkVGl0bGUnKX1cbiAgICAgICAgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICAgIHt0KCdsaWNlbnNlLmNvcHlUaXRsZScpfVxuICAgICAgPC9Db3B5QnV0dG9uPlxuICAgICAgPFNhZmVMaW5rQnV0dG9uIHRvPXtgJHtpbWFnZVVybH0/ZG93bmxvYWQ9dHJ1ZWB9IGRvd25sb2FkIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG4gICAgICAgIHt0KCdpbWFnZS5kb3dubG9hZCcpfVxuICAgICAgPC9TYWZlTGlua0J1dHRvbj5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmNvbnN0IEltYWdlV3JhcHBlciA9ICh7IHNyYywgY3JvcCwgc2l6ZSwgY2hpbGRyZW4gfTogSW1hZ2VXcmFwcGVyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBpZiAoaXNTbWFsbChzaXplKSB8fCBoaWRlQnlsaW5lKHNpemUpKSB7XG4gICAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEltYWdlTGluayBzcmM9e3NyY30gY3JvcD17Y3JvcH0gYXJpYS1sYWJlbD17dCgnbGljZW5zZS5pbWFnZXMuaXRlbUltYWdlLmFyaWFMYWJlbCcpfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0ltYWdlTGluaz5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBFeHBhbmRCdXR0b25Qcm9wcyB7XG4gIHNpemU/OiBzdHJpbmc7XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBieWxpbmVIaWRkZW46IGJvb2xlYW47XG4gIG9uRXhwYW5kOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIG9uSGlkZUJ5bGluZTogTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xufVxuXG5jb25zdCBFeHBhbmRCdXR0b24gPSAoeyBzaXplLCBleHBhbmRlZCwgYnlsaW5lSGlkZGVuLCBvbkV4cGFuZCwgb25IaWRlQnlsaW5lIH06IEV4cGFuZEJ1dHRvblByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgaWYgKGlzU21hbGwoc2l6ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiYy1maWd1cmVfX2Z1bGxzY3JlZW4tYnRuXCJcbiAgICAgICAgYXJpYS1sYWJlbD17dChgbGljZW5zZS5pbWFnZXMuaXRlbUltYWdlLnpvb20ke2V4cGFuZGVkID8gJ091dCcgOiAnJ31JbWFnZUJ1dHRvbkxhYmVsYCl9XG4gICAgICAgIG9uQ2xpY2s9e29uRXhwYW5kfT5cbiAgICAgICAge2V4cGFuZGVkID8gPEFycm93Q29sbGFwc2UgLz4gOiA8RXhwYW5kVHdvQXJyb3dzIC8+fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfSBlbHNlIGlmIChoaWRlQnlsaW5lKHNpemUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cImMtZmlndXJlX19zaG93LWJ5bGluZS1idG5cIlxuICAgICAgICBhcmlhLWxhYmVsPXt0KGBsaWNlbnNlLmltYWdlcy5pdGVtSW1hZ2UuJHtieWxpbmVIaWRkZW4gPyAnZXhwYW5kQnlsaW5lJyA6ICdtaW5pbWl6ZUJ5bGluZSd9YCl9XG4gICAgICAgIG9uQ2xpY2s9e29uSGlkZUJ5bGluZX0+XG4gICAgICAgIHtieWxpbmVIaWRkZW4gPyA8Q2hldnJvbkRvd24gLz4gOiA8Q2hldnJvblVwIC8+fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfSBlbHNlIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VFbWJlZDtcbiJdfQ== */",
105
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
106
+ });
107
+ var expandedSizes = '(min-width: 1024px) 1024px, 100vw';
108
+ var ImageEmbed = function ImageEmbed(_ref) {
109
+ var embed = _ref.embed,
110
+ articlePath = _ref.articlePath,
111
+ previewAlt = _ref.previewAlt;
112
+ var _useState = useState(false),
113
+ _useState2 = _slicedToArray(_useState, 2),
114
+ isOpen = _useState2[0],
115
+ setIsOpen = _useState2[1];
116
+ var _useState3 = useState(hideByline(embed.embedData.size)),
117
+ _useState4 = _slicedToArray(_useState3, 2),
118
+ isBylineHidden = _useState4[0],
119
+ setIsBylineHidden = _useState4[1];
120
+ var _useState5 = useState(undefined),
121
+ _useState6 = _slicedToArray(_useState5, 2),
122
+ imageSizes = _useState6[0],
123
+ setImageSizes = _useState6[1];
124
+ var _useTranslation = useTranslation(),
125
+ t = _useTranslation.t,
126
+ i18n = _useTranslation.i18n;
127
+ if (embed.status === 'error') {
128
+ var _embed$embedData = embed.embedData,
129
+ align = _embed$embedData.align,
130
+ size = _embed$embedData.size;
131
+ var _figureType = getFigureType(size, align);
132
+ return _jsxs(Figure, {
133
+ type: _figureType,
134
+ children: [_jsx("div", {
135
+ className: "c-figure__img",
136
+ children: _jsx("img", {
137
+ alt: t('image.error.url'),
138
+ src: errorSvgSrc
139
+ })
140
+ }), _jsx("figcaption", {
141
+ children: t('image.error.caption')
142
+ })]
143
+ });
144
+ }
145
+ var data = embed.data,
146
+ embedData = embed.embedData,
147
+ seq = embed.seq;
148
+ var authors = getLicenseCredits(data.copyright);
149
+ var altText = embedData.alt || '';
150
+ var caption = embedData.caption || '';
151
+ var license = getLicenseByAbbreviation(data.copyright.license.license, i18n.language);
152
+ var figureType = getFigureType(embedData.size, embedData.align);
153
+ var sizes = getSizes(embedData.size, embedData.align);
154
+ var focalPoint = getFocalPoint(embedData);
155
+ var crop = getCrop(embedData);
156
+ var contributors = getGroupedContributorDescriptionList(data.copyright, i18n.language).map(function (item) {
157
+ return {
158
+ name: item.description,
159
+ type: item.label
160
+ };
161
+ });
162
+ var figureId = "figure-".concat(seq, "-").concat(data.id);
163
+ var creators = authors.creators,
164
+ rightsholders = authors.rightsholders,
165
+ processors = authors.processors;
166
+ var captionAuthors = creators.length || rightsholders.length ? [].concat(_toConsumableArray(creators), _toConsumableArray(rightsholders)) : processors;
167
+ return _jsxs(Figure, {
168
+ id: figureId,
169
+ type: imageSizes ? undefined : figureType,
170
+ className: imageSizes ? 'c-figure--right expanded' : '',
171
+ children: [_jsx(ImageWrapper, {
172
+ src: data.imageUrl,
173
+ crop: crop,
174
+ size: embedData.size,
175
+ children: _jsx(Image, {
176
+ focalPoint: focalPoint,
177
+ contentType: data.contentType,
178
+ crop: crop,
179
+ sizes: imageSizes !== null && imageSizes !== void 0 ? imageSizes : sizes,
180
+ alt: altText,
181
+ src: data.imageUrl,
182
+ expandButton: _jsx(ExpandButton, {
183
+ size: embedData.size,
184
+ expanded: !!imageSizes,
185
+ bylineHidden: isBylineHidden,
186
+ onExpand: function onExpand() {
187
+ return setImageSizes(function (p) {
188
+ return p ? undefined : expandedSizes;
189
+ });
190
+ },
191
+ onHideByline: function onHideByline() {
192
+ return setIsBylineHidden(function (p) {
193
+ return !p;
194
+ });
195
+ }
196
+ })
197
+ })
198
+ }), previewAlt ? _jsx(StyledSpan, {
199
+ children: "Alt: ".concat(embedData.alt)
200
+ }) : null, _jsx(FigureCaption, {
201
+ hideFigcaption: isSmall(embedData.size) || isBylineHidden,
202
+ figureId: figureId,
203
+ id: figureId,
204
+ caption: caption,
205
+ reuseLabel: t('image.reuse'),
206
+ modalButton: _jsx(ButtonV2, {
207
+ shape: "pill",
208
+ variant: "outline",
209
+ size: "small",
210
+ onClick: function onClick() {
211
+ return setIsOpen(true);
212
+ },
213
+ children: t('image.reuse')
214
+ }),
215
+ licenseRights: license.rights,
216
+ authors: captionAuthors,
217
+ locale: i18n.language,
218
+ children: _jsx(ModalV2, {
219
+ controlled: true,
220
+ isOpen: isOpen,
221
+ onClose: function onClose() {
222
+ return setIsOpen(false);
223
+ },
224
+ labelledBy: "license-dialog-rules-heading",
225
+ children: function children(close) {
226
+ return _jsx(FigureLicenseDialogContent, {
227
+ title: data.title.title,
228
+ license: license,
229
+ onClose: close,
230
+ authors: contributors,
231
+ origin: data.copyright.origin,
232
+ locale: i18n.language,
233
+ type: "image",
234
+ children: _jsx(ImageLicenseButtons, {
235
+ articlePath: articlePath,
236
+ title: data.title.title,
237
+ imageUrl: data.imageUrl,
238
+ copyright: data.copyright
239
+ })
240
+ });
241
+ }
242
+ })
243
+ })]
244
+ });
245
+ };
246
+ var hideByline = function hideByline(size) {
247
+ return !!size && size.endsWith('-hide-byline');
248
+ };
249
+ export var ImageLicenseButtons = function ImageLicenseButtons(_ref2) {
250
+ var _copyright$license, _copyright$license2, _copyright$license3;
251
+ var imageUrl = _ref2.imageUrl,
252
+ title = _ref2.title,
253
+ articlePath = _ref2.articlePath,
254
+ copyright = _ref2.copyright;
255
+ var _useTranslation2 = useTranslation(),
256
+ t = _useTranslation2.t,
257
+ i18n = _useTranslation2.i18n;
258
+ if (!(copyright !== null && copyright !== void 0 && (_copyright$license = copyright.license) !== null && _copyright$license !== void 0 && _copyright$license.license) || (copyright === null || copyright === void 0 ? void 0 : (_copyright$license2 = copyright.license) === null || _copyright$license2 === void 0 ? void 0 : _copyright$license2.license) === 'COPYRIGHTED') return null;
259
+ var copyString = figureApa7CopyString(title, undefined, imageUrl, articlePath, copyright, copyright === null || copyright === void 0 ? void 0 : (_copyright$license3 = copyright.license) === null || _copyright$license3 === void 0 ? void 0 : _copyright$license3.license, '', t, i18n.language);
260
+ return _jsxs(_Fragment, {
261
+ children: [_jsx(CopyButton, {
262
+ variant: "outline",
263
+ onClick: function onClick() {
264
+ return navigator.clipboard.writeText(copyString);
265
+ },
266
+ copyNode: t('license.hasCopiedTitle'),
267
+ "aria-live": "assertive",
268
+ children: t('license.copyTitle')
269
+ }), _jsx(SafeLinkButton, {
270
+ to: "".concat(imageUrl, "?download=true"),
271
+ download: true,
272
+ variant: "outline",
273
+ children: t('image.download')
274
+ })]
275
+ });
276
+ };
277
+ var ImageWrapper = function ImageWrapper(_ref3) {
278
+ var src = _ref3.src,
279
+ crop = _ref3.crop,
280
+ size = _ref3.size,
281
+ children = _ref3.children;
282
+ var _useTranslation3 = useTranslation(),
283
+ t = _useTranslation3.t;
284
+ if (isSmall(size) || hideByline(size)) {
285
+ return _jsx(_Fragment, {
286
+ children: children
287
+ });
288
+ }
289
+ return _jsx(ImageLink, {
290
+ src: src,
291
+ crop: crop,
292
+ "aria-label": t('license.images.itemImage.ariaLabel'),
293
+ children: children
294
+ });
295
+ };
296
+ var ExpandButton = function ExpandButton(_ref4) {
297
+ var size = _ref4.size,
298
+ expanded = _ref4.expanded,
299
+ bylineHidden = _ref4.bylineHidden,
300
+ onExpand = _ref4.onExpand,
301
+ onHideByline = _ref4.onHideByline;
302
+ var _useTranslation4 = useTranslation(),
303
+ t = _useTranslation4.t;
304
+ if (isSmall(size)) {
305
+ return _jsx("button", {
306
+ type: "button",
307
+ className: "c-figure__fullscreen-btn",
308
+ "aria-label": t("license.images.itemImage.zoom".concat(expanded ? 'Out' : '', "ImageButtonLabel")),
309
+ onClick: onExpand,
310
+ children: expanded ? _jsx(ArrowCollapse, {}) : _jsx(ExpandTwoArrows, {})
311
+ });
312
+ } else if (hideByline(size)) {
313
+ return _jsx("button", {
314
+ type: "button",
315
+ className: "c-figure__show-byline-btn",
316
+ "aria-label": t("license.images.itemImage.".concat(bylineHidden ? 'expandByline' : 'minimizeByline')),
317
+ onClick: onHideByline,
318
+ children: bylineHidden ? _jsx(ChevronDown, {}) : _jsx(ChevronUp, {})
319
+ });
320
+ } else return null;
321
+ };
322
+ export default ImageEmbed;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Copyright (c) 2023-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { useTranslation } from 'react-i18next';
10
+ import { contentTypeMapping } from '../model/ContentType';
11
+ import { RelatedArticleV2 } from '../RelatedArticleList/RelatedArticleV2';
12
+ import { Fragment as _Fragment } from "@emotion/react/jsx-runtime";
13
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
14
+ var RelatedContentEmbed = function RelatedContentEmbed(_ref) {
15
+ var embed = _ref.embed,
16
+ isOembed = _ref.isOembed,
17
+ subject = _ref.subject,
18
+ ndlaFrontendDomain = _ref.ndlaFrontendDomain;
19
+ var _useTranslation = useTranslation(),
20
+ t = _useTranslation.t;
21
+ if (embed.status === 'error') {
22
+ return _jsx(_Fragment, {});
23
+ }
24
+ var data = embed.data,
25
+ embedData = embed.embedData;
26
+ if (embedData.articleId && data) {
27
+ var _data$resource, _data$resource$resour, _data$resource$paths$, _data$resource2, _data$resource3, _data$article$title$t, _data$article$metaDes, _data$article$metaDes2;
28
+ var typeId = (_data$resource = data.resource) === null || _data$resource === void 0 ? void 0 : (_data$resource$resour = _data$resource.resourceTypes.find(function (rt) {
29
+ return contentTypeMapping[rt.id];
30
+ })) === null || _data$resource$resour === void 0 ? void 0 : _data$resource$resour.id;
31
+ var type = typeId ? contentTypeMapping[typeId] : undefined;
32
+ var path = (_data$resource$paths$ = (_data$resource2 = data.resource) === null || _data$resource2 === void 0 ? void 0 : _data$resource2.paths.find(function (p) {
33
+ return p.split('/')[1] === (subject === null || subject === void 0 ? void 0 : subject.replace('urn:', ''));
34
+ })) !== null && _data$resource$paths$ !== void 0 ? _data$resource$paths$ : (_data$resource3 = data.resource) === null || _data$resource3 === void 0 ? void 0 : _data$resource3.path;
35
+ return _jsx(RelatedArticleV2, {
36
+ title: (_data$article$title$t = data.article.title.title) !== null && _data$article$title$t !== void 0 ? _data$article$title$t : '',
37
+ introduction: (_data$article$metaDes = (_data$article$metaDes2 = data.article.metaDescription) === null || _data$article$metaDes2 === void 0 ? void 0 : _data$article$metaDes2.metaDescription) !== null && _data$article$metaDes !== void 0 ? _data$article$metaDes : '',
38
+ target: isOembed ? '_blank' : undefined,
39
+ to: "".concat(ndlaFrontendDomain !== null && ndlaFrontendDomain !== void 0 ? ndlaFrontendDomain : '').concat(path !== null && path !== void 0 ? path : ''),
40
+ type: type
41
+ });
42
+ } else if (typeof embedData.url === 'string') {
43
+ var _embedData$title, _embedData$url$match;
44
+ return _jsx(RelatedArticleV2, {
45
+ title: (_embedData$title = embedData.title) !== null && _embedData$title !== void 0 ? _embedData$title : '',
46
+ introduction: "",
47
+ to: embedData.url,
48
+ target: "_blank",
49
+ type: 'external-learning-resources',
50
+ linkInfo: "".concat(t('related.linkInfo'), " ").concat(
51
+ // Get domain name only from url
52
+ ((_embedData$url$match = embedData.url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:/\n]+)/im)) === null || _embedData$url$match === void 0 ? void 0 : _embedData$url$match[1]) || embedData.url)
53
+ });
54
+ } else {
55
+ return _jsx(_Fragment, {});
56
+ }
57
+ };
58
+ export default RelatedContentEmbed;
@@ -0,0 +1,27 @@
1
+ import _styled from "@emotion/styled/base";
2
+ /**
3
+ * Copyright (c) 2023-present, NDLA.
4
+ *
5
+ * This source code is licensed under the GPLv3 license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ */
9
+
10
+ import { useTranslation } from 'react-i18next';
11
+ import { colors } from '@ndla/core';
12
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
13
+ var StyledSpan = /*#__PURE__*/_styled("span", {
14
+ target: "e1rt6jrv0",
15
+ label: "StyledSpan"
16
+ })("color:", colors.support.red, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVua25vd25FbWJlZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUI4QiIsImZpbGUiOiJVbmtub3duRW1iZWQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMtcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnQG5kbGEvY29yZSc7XG5pbXBvcnQgeyBNZXRhRGF0YSB9IGZyb20gJ0BuZGxhL3R5cGVzLWVtYmVkJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgZW1iZWQ6IE1ldGFEYXRhPGFueSwgYW55Pjtcbn1cblxuY29uc3QgU3R5bGVkU3BhbiA9IHN0eWxlZC5zcGFuYFxuICBjb2xvcjogJHtjb2xvcnMuc3VwcG9ydC5yZWR9O1xuYDtcblxuY29uc3QgVW5rbm93bkVtYmVkID0gKHsgZW1iZWQgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gPFN0eWxlZFNwYW4+e3QoJ2VtYmVkLnVuc3VwcG9ydGVkJywgeyB0eXBlOiBlbWJlZC5yZXNvdXJjZSB9KX08L1N0eWxlZFNwYW4+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVW5rbm93bkVtYmVkO1xuIl19 */"));
17
+ var UnknownEmbed = function UnknownEmbed(_ref) {
18
+ var embed = _ref.embed;
19
+ var _useTranslation = useTranslation(),
20
+ t = _useTranslation.t;
21
+ return _jsx(StyledSpan, {
22
+ children: t('embed.unsupported', {
23
+ type: embed.resource
24
+ })
25
+ });
26
+ };
27
+ export default UnknownEmbed;