@ndla/ui 34.6.2 → 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 +8 -1
  35. package/es/locale/messages-nb.js +8 -1
  36. package/es/locale/messages-nn.js +8 -1
  37. package/es/locale/messages-se.js +8 -1
  38. package/es/locale/messages-sma.js +8 -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 +7 -0
  103. package/lib/locale/messages-en.js +8 -1
  104. package/lib/locale/messages-nb.d.ts +7 -0
  105. package/lib/locale/messages-nb.js +8 -1
  106. package/lib/locale/messages-nn.d.ts +7 -0
  107. package/lib/locale/messages-nn.js +8 -1
  108. package/lib/locale/messages-se.d.ts +7 -0
  109. package/lib/locale/messages-se.js +8 -1
  110. package/lib/locale/messages-sma.d.ts +7 -0
  111. package/lib/locale/messages-sma.js +8 -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 +7 -0
  149. package/src/locale/messages-nb.ts +7 -0
  150. package/src/locale/messages-nn.ts +7 -0
  151. package/src/locale/messages-se.ts +7 -0
  152. package/src/locale/messages-sma.ts +7 -0
  153. package/src/types.ts +1 -1
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getLicenseCredits = exports.errorSvgSrc = exports["default"] = exports.ImageLicenseButtons = void 0;
8
+ var _base = _interopRequireDefault(require("@emotion/styled/base"));
9
+ var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
10
+ var _licenses = require("@ndla/licenses");
11
+ var _reactI18next = require("react-i18next");
12
+ var _modal = require("@ndla/modal");
13
+ var _safelink = require("@ndla/safelink");
14
+ var _react = require("react");
15
+ var _button = require("@ndla/button");
16
+ var _action = require("@ndla/icons/action");
17
+ var _common = require("@ndla/icons/common");
18
+ var _Figure = require("../Figure");
19
+ var _Image = _interopRequireWildcard(require("../Image"));
20
+ var _FigureLicenseDialogContent = require("../Figure/FigureLicenseDialogContent");
21
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
26
+ 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."); }
27
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
28
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
29
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
30
+ 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."); }
31
+ 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); }
32
+ 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; }
33
+ 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; }
34
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
+ 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)."; }
36
+ 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
+ exports.getLicenseCredits = getLicenseCredits;
45
+ 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";
46
+ exports.errorSvgSrc = errorSvgSrc;
47
+ var isSmall = function isSmall(size) {
48
+ return size === 'xsmall' || size === 'small';
49
+ };
50
+ var isAlign = function isAlign(align) {
51
+ return align === 'left' || align === 'right';
52
+ };
53
+ var getFigureType = function getFigureType(size, align) {
54
+ if (size && isSmall(size) && align && isAlign(align)) {
55
+ return "".concat(size, "-").concat(align);
56
+ }
57
+ if (size && isSmall(size) && !align) {
58
+ return size;
59
+ }
60
+ if (align && isAlign(align)) {
61
+ return align;
62
+ }
63
+ return 'full';
64
+ };
65
+ var getSizes = function getSizes(size, align) {
66
+ if (align && size === 'full') {
67
+ return '(min-width: 1024px) 512px, (min-width: 768px) 350px, 100vw';
68
+ }
69
+ if (align && size === 'small') {
70
+ return '(min-width: 1024px) 350px, (min-width: 768px) 180px, 100vw';
71
+ }
72
+ if (align && size === 'xsmall') {
73
+ return '(min-width: 1024px) 180px, (min-width: 768px) 180px, 100vw';
74
+ }
75
+ return '(min-width: 1024px) 1024px, 100vw';
76
+ };
77
+ var getFocalPoint = function getFocalPoint(data) {
78
+ if ((0, _isNumber["default"])(data.focalX) && (0, _isNumber["default"])(data.focalY)) {
79
+ return {
80
+ x: data.focalX,
81
+ y: data.focalY
82
+ };
83
+ }
84
+ return undefined;
85
+ };
86
+ var getCrop = function getCrop(data) {
87
+ if ((0, _isNumber["default"])(data.lowerRightX) && (0, _isNumber["default"])(data.lowerRightY) && (0, _isNumber["default"])(data.upperLeftX) && (0, _isNumber["default"])(data.upperLeftY)) {
88
+ return {
89
+ startX: data.lowerRightX,
90
+ startY: data.lowerRightY,
91
+ endX: data.upperLeftX,
92
+ endY: data.upperLeftY
93
+ };
94
+ }
95
+ return undefined;
96
+ };
97
+ var StyledSpan = /*#__PURE__*/(0, _base["default"])("span", {
98
+ target: "ened8ka0",
99
+ label: "StyledSpan"
100
+ })(process.env.NODE_ENV === "production" ? {
101
+ name: "1t01il3",
102
+ styles: "font-style:italic;color:grey"
103
+ } : {
104
+ name: "1t01il3",
105
+ styles: "font-style:italic;color:grey",
106
+ 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== */",
107
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
108
+ });
109
+ var expandedSizes = '(min-width: 1024px) 1024px, 100vw';
110
+ var ImageEmbed = function ImageEmbed(_ref) {
111
+ var embed = _ref.embed,
112
+ articlePath = _ref.articlePath,
113
+ previewAlt = _ref.previewAlt;
114
+ var _useState = (0, _react.useState)(false),
115
+ _useState2 = _slicedToArray(_useState, 2),
116
+ isOpen = _useState2[0],
117
+ setIsOpen = _useState2[1];
118
+ var _useState3 = (0, _react.useState)(hideByline(embed.embedData.size)),
119
+ _useState4 = _slicedToArray(_useState3, 2),
120
+ isBylineHidden = _useState4[0],
121
+ setIsBylineHidden = _useState4[1];
122
+ var _useState5 = (0, _react.useState)(undefined),
123
+ _useState6 = _slicedToArray(_useState5, 2),
124
+ imageSizes = _useState6[0],
125
+ setImageSizes = _useState6[1];
126
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
127
+ t = _useTranslation.t,
128
+ i18n = _useTranslation.i18n;
129
+ if (embed.status === 'error') {
130
+ var _embed$embedData = embed.embedData,
131
+ align = _embed$embedData.align,
132
+ size = _embed$embedData.size;
133
+ var _figureType = getFigureType(size, align);
134
+ return (0, _jsxRuntime.jsxs)(_Figure.Figure, {
135
+ type: _figureType,
136
+ children: [(0, _jsxRuntime.jsx)("div", {
137
+ className: "c-figure__img",
138
+ children: (0, _jsxRuntime.jsx)("img", {
139
+ alt: t('image.error.url'),
140
+ src: errorSvgSrc
141
+ })
142
+ }), (0, _jsxRuntime.jsx)("figcaption", {
143
+ children: t('image.error.caption')
144
+ })]
145
+ });
146
+ }
147
+ var data = embed.data,
148
+ embedData = embed.embedData,
149
+ seq = embed.seq;
150
+ var authors = getLicenseCredits(data.copyright);
151
+ var altText = embedData.alt || '';
152
+ var caption = embedData.caption || '';
153
+ var license = (0, _licenses.getLicenseByAbbreviation)(data.copyright.license.license, i18n.language);
154
+ var figureType = getFigureType(embedData.size, embedData.align);
155
+ var sizes = getSizes(embedData.size, embedData.align);
156
+ var focalPoint = getFocalPoint(embedData);
157
+ var crop = getCrop(embedData);
158
+ var contributors = (0, _licenses.getGroupedContributorDescriptionList)(data.copyright, i18n.language).map(function (item) {
159
+ return {
160
+ name: item.description,
161
+ type: item.label
162
+ };
163
+ });
164
+ var figureId = "figure-".concat(seq, "-").concat(data.id);
165
+ var creators = authors.creators,
166
+ rightsholders = authors.rightsholders,
167
+ processors = authors.processors;
168
+ var captionAuthors = creators.length || rightsholders.length ? [].concat(_toConsumableArray(creators), _toConsumableArray(rightsholders)) : processors;
169
+ return (0, _jsxRuntime.jsxs)(_Figure.Figure, {
170
+ id: figureId,
171
+ type: imageSizes ? undefined : figureType,
172
+ className: imageSizes ? 'c-figure--right expanded' : '',
173
+ children: [(0, _jsxRuntime.jsx)(ImageWrapper, {
174
+ src: data.imageUrl,
175
+ crop: crop,
176
+ size: embedData.size,
177
+ children: (0, _jsxRuntime.jsx)(_Image["default"], {
178
+ focalPoint: focalPoint,
179
+ contentType: data.contentType,
180
+ crop: crop,
181
+ sizes: imageSizes !== null && imageSizes !== void 0 ? imageSizes : sizes,
182
+ alt: altText,
183
+ src: data.imageUrl,
184
+ expandButton: (0, _jsxRuntime.jsx)(ExpandButton, {
185
+ size: embedData.size,
186
+ expanded: !!imageSizes,
187
+ bylineHidden: isBylineHidden,
188
+ onExpand: function onExpand() {
189
+ return setImageSizes(function (p) {
190
+ return p ? undefined : expandedSizes;
191
+ });
192
+ },
193
+ onHideByline: function onHideByline() {
194
+ return setIsBylineHidden(function (p) {
195
+ return !p;
196
+ });
197
+ }
198
+ })
199
+ })
200
+ }), previewAlt ? (0, _jsxRuntime.jsx)(StyledSpan, {
201
+ children: "Alt: ".concat(embedData.alt)
202
+ }) : null, (0, _jsxRuntime.jsx)(_Figure.FigureCaption, {
203
+ hideFigcaption: isSmall(embedData.size) || isBylineHidden,
204
+ figureId: figureId,
205
+ id: figureId,
206
+ caption: caption,
207
+ reuseLabel: t('image.reuse'),
208
+ modalButton: (0, _jsxRuntime.jsx)(_button.ButtonV2, {
209
+ shape: "pill",
210
+ variant: "outline",
211
+ size: "small",
212
+ onClick: function onClick() {
213
+ return setIsOpen(true);
214
+ },
215
+ children: t('image.reuse')
216
+ }),
217
+ licenseRights: license.rights,
218
+ authors: captionAuthors,
219
+ locale: i18n.language,
220
+ children: (0, _jsxRuntime.jsx)(_modal.ModalV2, {
221
+ controlled: true,
222
+ isOpen: isOpen,
223
+ onClose: function onClose() {
224
+ return setIsOpen(false);
225
+ },
226
+ labelledBy: "license-dialog-rules-heading",
227
+ children: function children(close) {
228
+ return (0, _jsxRuntime.jsx)(_FigureLicenseDialogContent.FigureLicenseDialogContent, {
229
+ title: data.title.title,
230
+ license: license,
231
+ onClose: close,
232
+ authors: contributors,
233
+ origin: data.copyright.origin,
234
+ locale: i18n.language,
235
+ type: "image",
236
+ children: (0, _jsxRuntime.jsx)(ImageLicenseButtons, {
237
+ articlePath: articlePath,
238
+ title: data.title.title,
239
+ imageUrl: data.imageUrl,
240
+ copyright: data.copyright
241
+ })
242
+ });
243
+ }
244
+ })
245
+ })]
246
+ });
247
+ };
248
+ var hideByline = function hideByline(size) {
249
+ return !!size && size.endsWith('-hide-byline');
250
+ };
251
+ var ImageLicenseButtons = function ImageLicenseButtons(_ref2) {
252
+ var _copyright$license, _copyright$license2, _copyright$license3;
253
+ var imageUrl = _ref2.imageUrl,
254
+ title = _ref2.title,
255
+ articlePath = _ref2.articlePath,
256
+ copyright = _ref2.copyright;
257
+ var _useTranslation2 = (0, _reactI18next.useTranslation)(),
258
+ t = _useTranslation2.t,
259
+ i18n = _useTranslation2.i18n;
260
+ 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;
261
+ var copyString = (0, _licenses.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);
262
+ return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
263
+ children: [(0, _jsxRuntime.jsx)(_button.CopyButton, {
264
+ variant: "outline",
265
+ onClick: function onClick() {
266
+ return navigator.clipboard.writeText(copyString);
267
+ },
268
+ copyNode: t('license.hasCopiedTitle'),
269
+ "aria-live": "assertive",
270
+ children: t('license.copyTitle')
271
+ }), (0, _jsxRuntime.jsx)(_safelink.SafeLinkButton, {
272
+ to: "".concat(imageUrl, "?download=true"),
273
+ download: true,
274
+ variant: "outline",
275
+ children: t('image.download')
276
+ })]
277
+ });
278
+ };
279
+ exports.ImageLicenseButtons = ImageLicenseButtons;
280
+ var ImageWrapper = function ImageWrapper(_ref3) {
281
+ var src = _ref3.src,
282
+ crop = _ref3.crop,
283
+ size = _ref3.size,
284
+ children = _ref3.children;
285
+ var _useTranslation3 = (0, _reactI18next.useTranslation)(),
286
+ t = _useTranslation3.t;
287
+ if (isSmall(size) || hideByline(size)) {
288
+ return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
289
+ children: children
290
+ });
291
+ }
292
+ return (0, _jsxRuntime.jsx)(_Image.ImageLink, {
293
+ src: src,
294
+ crop: crop,
295
+ "aria-label": t('license.images.itemImage.ariaLabel'),
296
+ children: children
297
+ });
298
+ };
299
+ var ExpandButton = function ExpandButton(_ref4) {
300
+ var size = _ref4.size,
301
+ expanded = _ref4.expanded,
302
+ bylineHidden = _ref4.bylineHidden,
303
+ onExpand = _ref4.onExpand,
304
+ onHideByline = _ref4.onHideByline;
305
+ var _useTranslation4 = (0, _reactI18next.useTranslation)(),
306
+ t = _useTranslation4.t;
307
+ if (isSmall(size)) {
308
+ return (0, _jsxRuntime.jsx)("button", {
309
+ type: "button",
310
+ className: "c-figure__fullscreen-btn",
311
+ "aria-label": t("license.images.itemImage.zoom".concat(expanded ? 'Out' : '', "ImageButtonLabel")),
312
+ onClick: onExpand,
313
+ children: expanded ? (0, _jsxRuntime.jsx)(_common.ArrowCollapse, {}) : (0, _jsxRuntime.jsx)(_action.ExpandTwoArrows, {})
314
+ });
315
+ } else if (hideByline(size)) {
316
+ return (0, _jsxRuntime.jsx)("button", {
317
+ type: "button",
318
+ className: "c-figure__show-byline-btn",
319
+ "aria-label": t("license.images.itemImage.".concat(bylineHidden ? 'expandByline' : 'minimizeByline')),
320
+ onClick: onHideByline,
321
+ children: bylineHidden ? (0, _jsxRuntime.jsx)(_common.ChevronDown, {}) : (0, _jsxRuntime.jsx)(_common.ChevronUp, {})
322
+ });
323
+ } else return null;
324
+ };
325
+ var _default = ImageEmbed;
326
+ exports["default"] = _default;
@@ -0,0 +1,16 @@
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
+ import { RelatedContentMetaData } from '@ndla/types-embed';
9
+ interface Props {
10
+ embed: RelatedContentMetaData;
11
+ isOembed?: boolean;
12
+ subject?: string;
13
+ ndlaFrontendDomain?: string;
14
+ }
15
+ declare const RelatedContentEmbed: ({ embed, isOembed, subject, ndlaFrontendDomain }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
16
+ export default RelatedContentEmbed;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _reactI18next = require("react-i18next");
8
+ var _ContentType = require("../model/ContentType");
9
+ var _RelatedArticleV = require("../RelatedArticleList/RelatedArticleV2");
10
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
11
+ /**
12
+ * Copyright (c) 2023-present, NDLA.
13
+ *
14
+ * This source code is licensed under the GPLv3 license found in the
15
+ * LICENSE file in the root directory of this source tree.
16
+ *
17
+ */
18
+
19
+ var RelatedContentEmbed = function RelatedContentEmbed(_ref) {
20
+ var embed = _ref.embed,
21
+ isOembed = _ref.isOembed,
22
+ subject = _ref.subject,
23
+ ndlaFrontendDomain = _ref.ndlaFrontendDomain;
24
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
25
+ t = _useTranslation.t;
26
+ if (embed.status === 'error') {
27
+ return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
28
+ }
29
+ var data = embed.data,
30
+ embedData = embed.embedData;
31
+ if (embedData.articleId && data) {
32
+ var _data$resource, _data$resource$resour, _data$resource$paths$, _data$resource2, _data$resource3, _data$article$title$t, _data$article$metaDes, _data$article$metaDes2;
33
+ var typeId = (_data$resource = data.resource) === null || _data$resource === void 0 ? void 0 : (_data$resource$resour = _data$resource.resourceTypes.find(function (rt) {
34
+ return _ContentType.contentTypeMapping[rt.id];
35
+ })) === null || _data$resource$resour === void 0 ? void 0 : _data$resource$resour.id;
36
+ var type = typeId ? _ContentType.contentTypeMapping[typeId] : undefined;
37
+ var path = (_data$resource$paths$ = (_data$resource2 = data.resource) === null || _data$resource2 === void 0 ? void 0 : _data$resource2.paths.find(function (p) {
38
+ return p.split('/')[1] === (subject === null || subject === void 0 ? void 0 : subject.replace('urn:', ''));
39
+ })) !== null && _data$resource$paths$ !== void 0 ? _data$resource$paths$ : (_data$resource3 = data.resource) === null || _data$resource3 === void 0 ? void 0 : _data$resource3.path;
40
+ return (0, _jsxRuntime.jsx)(_RelatedArticleV.RelatedArticleV2, {
41
+ title: (_data$article$title$t = data.article.title.title) !== null && _data$article$title$t !== void 0 ? _data$article$title$t : '',
42
+ 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 : '',
43
+ target: isOembed ? '_blank' : undefined,
44
+ to: "".concat(ndlaFrontendDomain !== null && ndlaFrontendDomain !== void 0 ? ndlaFrontendDomain : '').concat(path !== null && path !== void 0 ? path : ''),
45
+ type: type
46
+ });
47
+ } else if (typeof embedData.url === 'string') {
48
+ var _embedData$title, _embedData$url$match;
49
+ return (0, _jsxRuntime.jsx)(_RelatedArticleV.RelatedArticleV2, {
50
+ title: (_embedData$title = embedData.title) !== null && _embedData$title !== void 0 ? _embedData$title : '',
51
+ introduction: "",
52
+ to: embedData.url,
53
+ target: "_blank",
54
+ type: 'external-learning-resources',
55
+ linkInfo: "".concat(t('related.linkInfo'), " ").concat(
56
+ // Get domain name only from url
57
+ ((_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)
58
+ });
59
+ } else {
60
+ return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
61
+ }
62
+ };
63
+ var _default = RelatedContentEmbed;
64
+ exports["default"] = _default;
@@ -0,0 +1,13 @@
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
+ import { MetaData } from '@ndla/types-embed';
9
+ interface Props {
10
+ embed: MetaData<any, any>;
11
+ }
12
+ declare const UnknownEmbed: ({ embed }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
13
+ export default UnknownEmbed;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _base = _interopRequireDefault(require("@emotion/styled/base"));
8
+ var _reactI18next = require("react-i18next");
9
+ var _core = require("@ndla/core");
10
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
12
+ /**
13
+ * Copyright (c) 2023-present, NDLA.
14
+ *
15
+ * This source code is licensed under the GPLv3 license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ *
18
+ */
19
+
20
+ var StyledSpan = /*#__PURE__*/(0, _base["default"])("span", {
21
+ target: "e1rt6jrv0",
22
+ label: "StyledSpan"
23
+ })("color:", _core.colors.support.red, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVua25vd25FbWJlZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUI4QiIsImZpbGUiOiJVbmtub3duRW1iZWQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMtcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnQG5kbGEvY29yZSc7XG5pbXBvcnQgeyBNZXRhRGF0YSB9IGZyb20gJ0BuZGxhL3R5cGVzLWVtYmVkJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgZW1iZWQ6IE1ldGFEYXRhPGFueSwgYW55Pjtcbn1cblxuY29uc3QgU3R5bGVkU3BhbiA9IHN0eWxlZC5zcGFuYFxuICBjb2xvcjogJHtjb2xvcnMuc3VwcG9ydC5yZWR9O1xuYDtcblxuY29uc3QgVW5rbm93bkVtYmVkID0gKHsgZW1iZWQgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gPFN0eWxlZFNwYW4+e3QoJ2VtYmVkLnVuc3VwcG9ydGVkJywgeyB0eXBlOiBlbWJlZC5yZXNvdXJjZSB9KX08L1N0eWxlZFNwYW4+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVW5rbm93bkVtYmVkO1xuIl19 */"));
24
+ var UnknownEmbed = function UnknownEmbed(_ref) {
25
+ var embed = _ref.embed;
26
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
27
+ t = _useTranslation.t;
28
+ return (0, _jsxRuntime.jsx)(StyledSpan, {
29
+ children: t('embed.unsupported', {
30
+ type: embed.resource
31
+ })
32
+ });
33
+ };
34
+ var _default = UnknownEmbed;
35
+ exports["default"] = _default;
@@ -0,0 +1,32 @@
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
+ import { ReactNode, RefAttributes } from 'react';
9
+ import { ConceptVisualElementMeta } from '@ndla/types-embed';
10
+ import { Copyright } from '../types';
11
+ export interface ConceptNotionData {
12
+ title: string;
13
+ content?: string;
14
+ articlePath?: string;
15
+ metaImage?: {
16
+ url?: string;
17
+ alt?: string;
18
+ };
19
+ copyright?: Copyright;
20
+ source?: string;
21
+ visualElement?: ConceptVisualElementMeta;
22
+ }
23
+ interface ConceptNotionProps extends RefAttributes<HTMLDivElement>, ConceptNotionData {
24
+ className?: string;
25
+ closeButton?: ReactNode;
26
+ previewAlt?: boolean;
27
+ inPopover?: boolean;
28
+ tags?: string[];
29
+ subjects?: string[];
30
+ }
31
+ export declare const ConceptNotionV2: import("react").ForwardRefExoticComponent<Pick<ConceptNotionProps, "key" | "source" | "content" | "title" | "className" | "tags" | "articlePath" | "previewAlt" | "copyright" | "visualElement" | "closeButton" | "inPopover" | "subjects" | "metaImage"> & RefAttributes<HTMLDivElement>>;
32
+ export {};