@sinequa/assistant 3.9.5 → 3.9.6-rc2

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 (69) hide show
  1. package/chat/chat-message/chat-message.component.d.ts +17 -25
  2. package/chat/chat-message/i18n/de.json +11 -0
  3. package/chat/chat-reference/chat-reference.component.d.ts +18 -8
  4. package/chat/chat-reference/i18n/de.json +4 -0
  5. package/chat/chat-settings-v3/i18n/de.json +14 -0
  6. package/chat/chat.component.d.ts +2 -1
  7. package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +2 -3
  8. package/chat/debug-message/i18n/de.json +3 -0
  9. package/chat/dialogs/i18n/de.json +19 -0
  10. package/chat/directives/copy-to-clipboard.directive.d.ts +8 -0
  11. package/chat/documents-upload/document-list/document-list.component.d.ts +4 -9
  12. package/chat/documents-upload/document-overview/document-overview.component.d.ts +3 -17
  13. package/chat/documents-upload/document-upload/document-upload.component.d.ts +3 -8
  14. package/chat/documents-upload/documents-upload.service.d.ts +7 -16
  15. package/chat/documents-upload/i18n/de.json +24 -0
  16. package/chat/i18n/de.json +42 -0
  17. package/chat/markdown-it-plugins/code-block.plugin.d.ts +2 -0
  18. package/chat/markdown-it-plugins/image-reference.plugin.d.ts +3 -0
  19. package/chat/markdown-it-plugins/link.plugin.d.ts +5 -0
  20. package/chat/markdown-it-plugins/page-reference.plugin.d.ts +3 -0
  21. package/chat/markdown-it-plugins/reference.plugin.d.ts +7 -0
  22. package/chat/public-api.d.ts +2 -1
  23. package/chat/references/i18n/de.json +6 -0
  24. package/chat/references/references.component.d.ts +43 -0
  25. package/chat/saved-chats/i18n/de.json +5 -0
  26. package/chat/services/app.service.d.ts +2 -1
  27. package/chat/services/custom-elements.service.d.ts +13 -0
  28. package/chat/smart-renderer/smart-renderer.d.ts +23 -0
  29. package/chat/token-progress-bar/i18n/de.json +4 -0
  30. package/chat/tooltip/tooltip.directive.d.ts +2 -2
  31. package/chat/types.d.ts +8 -42
  32. package/esm2022/chat/chat-message/chat-message.component.mjs +33 -135
  33. package/esm2022/chat/chat-reference/chat-reference.component.mjs +60 -26
  34. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +1 -1
  35. package/esm2022/chat/chat.component.mjs +48 -12
  36. package/esm2022/chat/chat.service.mjs +3 -2
  37. package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +2 -2
  38. package/esm2022/chat/debug-message/debug-message.service.mjs +4 -7
  39. package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +68 -0
  40. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +21 -22
  41. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +8 -31
  42. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +12 -14
  43. package/esm2022/chat/documents-upload/documents-upload.service.mjs +25 -44
  44. package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +14 -0
  45. package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +58 -0
  46. package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +15 -0
  47. package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +60 -0
  48. package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +68 -0
  49. package/esm2022/chat/public-api.mjs +3 -2
  50. package/esm2022/chat/references/references.component.mjs +290 -0
  51. package/esm2022/chat/saved-chats/saved-chats.component.mjs +4 -3
  52. package/esm2022/chat/saved-chats/saved-chats.service.mjs +9 -12
  53. package/esm2022/chat/services/app.service.mjs +8 -2
  54. package/esm2022/chat/services/assistant-configuration.service.mjs +9 -18
  55. package/esm2022/chat/services/assistant-metadata.service.mjs +3 -3
  56. package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +3 -6
  57. package/esm2022/chat/services/custom-elements.service.mjs +43 -0
  58. package/esm2022/chat/smart-renderer/smart-renderer.mjs +103 -0
  59. package/esm2022/chat/tooltip/tooltip.directive.mjs +9 -9
  60. package/esm2022/chat/types.mjs +2 -5
  61. package/fesm2022/sinequa-assistant-chat.mjs +908 -497
  62. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  63. package/package.json +4 -6
  64. package/chat/prompt.component.d.ts +0 -25
  65. package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +0 -3
  66. package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +0 -3
  67. package/esm2022/chat/prompt.component.mjs +0 -88
  68. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +0 -56
  69. package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +0 -57
@@ -0,0 +1,58 @@
1
+ export const EMBEDDED_IMAGE_NAME = "embedded-image-reference";
2
+ const EMBEDDED_IMAGE_REGEX = /\[(Img-([0-9]+(?:\.[0-9]+){2}))\]/g;
3
+ export function markdownItImageReferencePlugin(md) {
4
+ md.core.ruler.after("inline", EMBEDDED_IMAGE_NAME, (state) => {
5
+ const getEmbeddedImageReference = state?.env?.getEmbeddedImageReference;
6
+ state.tokens.forEach((blockToken) => {
7
+ if (blockToken.type !== "inline" || !blockToken.children)
8
+ return;
9
+ const newChildren = [];
10
+ blockToken.children.forEach((token) => {
11
+ if (token.type !== "text") {
12
+ newChildren.push(token);
13
+ return;
14
+ }
15
+ let lastIndex = 0;
16
+ let match;
17
+ const text = token.content;
18
+ EMBEDDED_IMAGE_REGEX.lastIndex = 0; // Reset regex state
19
+ while ((match = EMBEDDED_IMAGE_REGEX.exec(text)) !== null) {
20
+ // Add leading text
21
+ if (match.index > lastIndex) {
22
+ const t = new state.Token("text", "", 0);
23
+ t.content = text.slice(lastIndex, match.index);
24
+ newChildren.push(t);
25
+ }
26
+ // Add embedded image reference token
27
+ const refToken = new state.Token(EMBEDDED_IMAGE_NAME, "", 0);
28
+ refToken.content = match[2]; // e.g., "1.2.3"
29
+ refToken.meta = { full: match[1] }; // e.g., "Img-1.2.3"
30
+ refToken.attrs = [];
31
+ if (getEmbeddedImageReference) {
32
+ const attachment = getEmbeddedImageReference(match[2]);
33
+ if (attachment) {
34
+ refToken.attrs.push(['attachment', btoa(encodeURIComponent(JSON.stringify(attachment)))]);
35
+ }
36
+ }
37
+ newChildren.push(refToken);
38
+ lastIndex = match.index + match[0].length;
39
+ }
40
+ // Add trailing text
41
+ if (lastIndex < text.length) {
42
+ const t = new state.Token("text", "", 0);
43
+ t.content = text.slice(lastIndex);
44
+ newChildren.push(t);
45
+ }
46
+ });
47
+ blockToken.children = newChildren;
48
+ });
49
+ });
50
+ // Optional: renderer for the custom token
51
+ md.renderer.rules[EMBEDDED_IMAGE_NAME] = (tokens, idx) => {
52
+ const imgId = tokens[idx].content;
53
+ const attrs = tokens[idx].attrs || [];
54
+ const attachment = attrs[0];
55
+ return `<image-reference id="${imgId}" attachment="${attachment ? attachment[1] : ''}" class="embedded-image-ref">Img-${imgId}</image-reference>`;
56
+ };
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L21hcmtkb3duLWl0LXBsdWdpbnMvaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRywwQkFBMEIsQ0FBQztBQUM5RCxNQUFNLG9CQUFvQixHQUFHLG9DQUFvQyxDQUFDO0FBRWxFLE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxFQUFjO0lBQzNELEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMzRCxNQUFNLHlCQUF5QixHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUseUJBQXlCLENBQUM7UUFDeEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUVqRSxNQUFNLFdBQVcsR0FBWSxFQUFFLENBQUM7WUFFaEMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUMxQixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLEtBQTZCLENBQUM7Z0JBQ2xDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBRTNCLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxDQUFDLENB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QUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgTWFya2Rvd25JdCBmcm9tIFwibWFya2Rvd24taXRcIjtcclxuaW1wb3J0IFRva2VuIGZyb20gJ21hcmtkb3duLWl0L2xpYi90b2tlbi5tanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEVNQkVEREVEX0lNQUdFX05BTUUgPSBcImVtYmVkZGVkLWltYWdlLXJlZmVyZW5jZVwiO1xyXG5jb25zdCBFTUJFRERFRF9JTUFHRV9SRUdFWCA9IC9cXFsoSW1nLShbMC05XSsoPzpcXC5bMC05XSspezJ9KSlcXF0vZztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkl0SW1hZ2VSZWZlcmVuY2VQbHVnaW4obWQ6IE1hcmtkb3duSXQpIHtcclxuICBtZC5jb3JlLnJ1bGVyLmFmdGVyKFwiaW5saW5lXCIsIEVNQkVEREVEX0lNQUdFX05BTUUsIChzdGF0ZSkgPT4ge1xyXG4gICAgY29uc3QgZ2V0RW1iZWRkZWRJbWFnZVJlZmVyZW5jZSA9IHN0YXRlPy5lbnY/LmdldEVtYmVkZGVkSW1hZ2VSZWZlcmVuY2U7XHJcbiAgICBzdGF0ZS50b2tlbnMuZm9yRWFjaCgoYmxvY2tUb2tlbikgPT4ge1xyXG4gICAgICBpZiAoYmxvY2tUb2tlbi50eXBlICE9PSBcImlubGluZVwiIHx8ICFibG9ja1Rva2VuLmNoaWxkcmVuKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBuZXdDaGlsZHJlbjogVG9rZW5bXSA9IFtdO1xyXG5cclxuICAgICAgYmxvY2tUb2tlbi5jaGlsZHJlbi5mb3JFYWNoKCh0b2tlbikgPT4ge1xyXG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBcInRleHRcIikge1xyXG4gICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0b2tlbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbGFzdEluZGV4ID0gMDtcclxuICAgICAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IHRva2VuLmNvbnRlbnQ7XHJcblxyXG4gICAgICAgIEVNQkVEREVEX0lNQUdFX1JFR0VYLmxhc3RJbmRleCA9IDA7IC8vIFJlc2V0IHJlZ2V4IHN0YXRlXHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IEVNQkVEREVEX0lNQUdFX1JFR0VYLmV4ZWModGV4dCkpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBBZGQgbGVhZGluZyB0ZXh0XHJcbiAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiBsYXN0SW5kZXgpIHtcclxuICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBzdGF0ZS5Ub2tlbihcInRleHRcIiwgXCJcIiwgMCk7XHJcbiAgICAgICAgICAgIHQuY29udGVudCA9IHRleHQuc2xpY2UobGFzdEluZGV4LCBtYXRjaC5pbmRleCk7XHJcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2godCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQWRkIGVtYmVkZGVkIGltYWdlIHJlZmVyZW5jZSB0b2tlblxyXG4gICAgICAgICAgY29uc3QgcmVmVG9rZW4gPSBuZXcgc3RhdGUuVG9rZW4oRU1CRURERURfSU1BR0VfTkFNRSwgXCJcIiwgMCk7XHJcbiAgICAgICAgICByZWZUb2tlbi5jb250ZW50ID0gbWF0Y2hbMl07IC8vIGUuZy4sIFwiMS4yLjNcIlxyXG4gICAgICAgICAgcmVmVG9rZW4ubWV0YSA9IHsgZnVsbDogbWF0Y2hbMV0gfTsgLy8gZS5nLiwgXCJJbWctMS4yLjNcIlxyXG4gICAgICAgICAgcmVmVG9rZW4uYXR0cnMgPSBbXTtcclxuICAgICAgICAgIGlmIChnZXRFbWJlZGRlZEltYWdlUmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBnZXRFbWJlZGRlZEltYWdlUmVmZXJlbmNlKG1hdGNoWzJdKTtcclxuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcclxuICAgICAgICAgICAgICByZWZUb2tlbi5hdHRycy5wdXNoKFsnYXR0YWNobWVudCcsIGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGF0dGFjaG1lbnQpKSldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaChyZWZUb2tlbik7XHJcblxyXG4gICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgdHJhaWxpbmcgdGV4dFxyXG4gICAgICAgIGlmIChsYXN0SW5kZXggPCB0ZXh0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgdCA9IG5ldyBzdGF0ZS5Ub2tlbihcInRleHRcIiwgXCJcIiwgMCk7XHJcbiAgICAgICAgICB0LmNvbnRlbnQgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCk7XHJcbiAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBibG9ja1Rva2VuLmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgLy8gT3B0aW9uYWw6IHJlbmRlcmVyIGZvciB0aGUgY3VzdG9tIHRva2VuXHJcbiAgbWQucmVuZGVyZXIucnVsZXNbRU1CRURERURfSU1BR0VfTkFNRV0gPSAodG9rZW5zLCBpZHgpID0+IHtcclxuICAgIGNvbnN0IGltZ0lkID0gdG9rZW5zW2lkeF0uY29udGVudDtcclxuICAgIGNvbnN0IGF0dHJzID0gdG9rZW5zW2lkeF0uYXR0cnMgfHwgW107XHJcbiAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0cnNbMF07XHJcbiAgICByZXR1cm4gYDxpbWFnZS1yZWZlcmVuY2UgaWQ9XCIke2ltZ0lkfVwiIGF0dGFjaG1lbnQ9XCIke2F0dGFjaG1lbnQgPyBhdHRhY2htZW50WzFdIDogJyd9XCIgY2xhc3M9XCJlbWJlZGRlZC1pbWFnZS1yZWZcIj5JbWctJHtpbWdJZH08L2ltYWdlLXJlZmVyZW5jZT5gO1xyXG4gIH07XHJcbn1cclxuIl19
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This plugin overrides the default link renderer to add `target="_blank"` and `rel="noopener noreferrer"` to all links.
3
+ */
4
+ export function markdownItLinkPlugin(md) {
5
+ const defaultRender = md.renderer.rules.link_open || function (tokens, idx, options, env, self) {
6
+ return self.renderToken(tokens, idx, options);
7
+ };
8
+ md.renderer.rules.link_open = function (tokens, idx, options, env, self) {
9
+ tokens[idx].attrPush(['target', '_blank']);
10
+ tokens[idx].attrPush(['rel', 'noopener noreferrer']);
11
+ // pass token to default renderer.
12
+ return defaultRender(tokens, idx, options, env, self);
13
+ };
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tYXJrZG93bi1pdC1wbHVnaW5zL2xpbmsucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEVBQWM7SUFDakQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLFVBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUk7UUFDM0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUk7UUFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBRXJELGtDQUFrQztRQUNsQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XHJcblxyXG4vKipcclxuICogVGhpcyBwbHVnaW4gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGxpbmsgcmVuZGVyZXIgdG8gYWRkIGB0YXJnZXQ9XCJfYmxhbmtcImAgYW5kIGByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJgIHRvIGFsbCBsaW5rcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkl0TGlua1BsdWdpbihtZDogTWFya2Rvd25JdCkge1xyXG4gIGNvbnN0IGRlZmF1bHRSZW5kZXIgPSBtZC5yZW5kZXJlci5ydWxlcy5saW5rX29wZW4gfHwgZnVuY3Rpb24odG9rZW5zLCBpZHgsIG9wdGlvbnMsIGVudiwgc2VsZikge1xyXG4gICAgcmV0dXJuIHNlbGYucmVuZGVyVG9rZW4odG9rZW5zLCBpZHgsIG9wdGlvbnMpO1xyXG4gIH07XHJcblxyXG4gIG1kLnJlbmRlcmVyLnJ1bGVzLmxpbmtfb3BlbiA9IGZ1bmN0aW9uKHRva2VucywgaWR4LCBvcHRpb25zLCBlbnYsIHNlbGYpIHtcclxuICAgIHRva2Vuc1tpZHhdLmF0dHJQdXNoKFsndGFyZ2V0JywgJ19ibGFuayddKTtcclxuICAgIHRva2Vuc1tpZHhdLmF0dHJQdXNoKFsncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInXSk7XHJcblxyXG4gICAgLy8gcGFzcyB0b2tlbiB0byBkZWZhdWx0IHJlbmRlcmVyLlxyXG4gICAgcmV0dXJuIGRlZmF1bHRSZW5kZXIodG9rZW5zLCBpZHgsIG9wdGlvbnMsIGVudiwgc2VsZik7XHJcbiAgfTtcclxufVxyXG4iXX0=
@@ -0,0 +1,60 @@
1
+ export const EMBEDDED_PAGE_NAME = "embedded-page-reference";
2
+ const EMBEDDED_PAGE_REGEX = /\[(Page-(\d+\.\d+))\]/g;
3
+ export function markdownItPageReferencePlugin(md) {
4
+ md.core.ruler.after("inline", "embedded-page-reference", (state) => {
5
+ const getEmbeddedPageReference = state?.env?.getEmbeddedPageReference;
6
+ state.tokens.forEach((blockToken) => {
7
+ if (blockToken.type !== "inline" || !blockToken.children)
8
+ return;
9
+ const newChildren = [];
10
+ blockToken.children.forEach((token) => {
11
+ if (token.type !== "text") {
12
+ newChildren.push(token);
13
+ return;
14
+ }
15
+ let lastIndex = 0;
16
+ let match;
17
+ const text = token.content;
18
+ EMBEDDED_PAGE_REGEX.lastIndex = 0; // Reset regex state
19
+ while ((match = EMBEDDED_PAGE_REGEX.exec(text)) !== null) {
20
+ // Add leading text
21
+ if (match.index > lastIndex) {
22
+ const t = new state.Token("text", "", 0);
23
+ t.content = text.slice(lastIndex, match.index);
24
+ newChildren.push(t);
25
+ }
26
+ // Add embedded page reference token
27
+ const refToken = new state.Token(EMBEDDED_PAGE_NAME, "", 0);
28
+ refToken.content = match[2]; // e.g., "1.2"
29
+ refToken.meta = { full: match[1] }; // e.g., "Page-1.2"
30
+ refToken.attrs = [];
31
+ if (getEmbeddedPageReference) {
32
+ const attachment = getEmbeddedPageReference(match[2]);
33
+ if (attachment) {
34
+ refToken.attrs.push(['attachment', btoa(encodeURIComponent(JSON.stringify(attachment)))]);
35
+ }
36
+ }
37
+ newChildren.push(refToken);
38
+ lastIndex = match.index + match[0].length;
39
+ }
40
+ // Add trailing text
41
+ if (lastIndex < text.length) {
42
+ const t = new state.Token("text", "", 0);
43
+ t.content = text.slice(lastIndex);
44
+ newChildren.push(t);
45
+ }
46
+ });
47
+ blockToken.children = newChildren;
48
+ });
49
+ });
50
+ // Optional: renderer for the custom token
51
+ md.renderer.rules[EMBEDDED_PAGE_NAME] = (tokens, idx) => {
52
+ const page = tokens[idx].content;
53
+ // const getEmbeddedPageReference = tokens[idx].meta?.getEmbeddedPageReference;
54
+ // const attachment = getEmbeddedPageReference ? getEmbeddedPageReference(page) : null;
55
+ const attrs = tokens[idx].attrs || [];
56
+ const attachment = attrs[0];
57
+ return `<page-reference id=${page} attachment=${attachment[1]} class="embedded-page-ref">Page-${page}</page-reference>`;
58
+ };
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1yZWZlcmVuY2UucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvbWFya2Rvd24taXQtcGx1Z2lucy9wYWdlLXJlZmVyZW5jZS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztBQUVyRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsRUFBYztJQUMxRCxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLHlCQUF5QixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDakUsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixDQUFDO1FBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFakUsTUFBTSxXQUFXLEdBQVksRUFBRSxDQUFDO1lBRWhDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxLQUE2QixDQUFDO2dCQUNsQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUUzQixtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO2dCQUN2RCxPQUFPLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUN6RCxtQkFBbUI7b0JBQ25CLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQzt3QkFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3pDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMvQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0QixDQUFDO29CQUVELG9DQUFvQztvQkFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO29CQUMzQyxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsbUJBQW1CO29CQUN2RCxRQUFRLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO3dCQUM3QixNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdEQsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDZixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1RixDQUFDO29CQUNILENBQUM7b0JBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFFM0IsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsQ0FBQztnQkFFRCxvQkFBb0I7Z0JBQ3BCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDbEMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILDBDQUEwQztJQUMxQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3RELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDakMsK0VBQStFO1FBQy9FLHVGQUF1RjtRQUN2RixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxzQkFBc0IsSUFBSSxlQUFlLFVBQVUsQ0FBQyxDQUFDLENBQUMsbUNBQW1DLElBQUksbUJBQW1CLENBQUM7SUFDMUgsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSAnbWFya2Rvd24taXQvbGliL3Rva2VuLm1qcyc7XG5cbmV4cG9ydCBjb25zdCBFTUJFRERFRF9QQUdFX05BTUUgPSBcImVtYmVkZGVkLXBhZ2UtcmVmZXJlbmNlXCI7XG5jb25zdCBFTUJFRERFRF9QQUdFX1JFR0VYID0gL1xcWyhQYWdlLShcXGQrXFwuXFxkKykpXFxdL2c7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkl0UGFnZVJlZmVyZW5jZVBsdWdpbihtZDogTWFya2Rvd25JdCkge1xuICBtZC5jb3JlLnJ1bGVyLmFmdGVyKFwiaW5saW5lXCIsIFwiZW1iZWRkZWQtcGFnZS1yZWZlcmVuY2VcIiwgKHN0YXRlKSA9PiB7XG4gICAgY29uc3QgZ2V0RW1iZWRkZWRQYWdlUmVmZXJlbmNlID0gc3RhdGU/LmVudj8uZ2V0RW1iZWRkZWRQYWdlUmVmZXJlbmNlO1xuICAgIHN0YXRlLnRva2Vucy5mb3JFYWNoKChibG9ja1Rva2VuKSA9PiB7XG4gICAgICBpZiAoYmxvY2tUb2tlbi50eXBlICE9PSBcImlubGluZVwiIHx8ICFibG9ja1Rva2VuLmNoaWxkcmVuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuOiBUb2tlbltdID0gW107XG5cbiAgICAgIGJsb2NrVG9rZW4uY2hpbGRyZW4uZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0b2tlbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRva2VuLmNvbnRlbnQ7XG5cbiAgICAgICAgRU1CRURERURfUEFHRV9SRUdFWC5sYXN0SW5kZXggPSAwOyAvLyBSZXNldCByZWdleCBzdGF0ZVxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gRU1CRURERURfUEFHRV9SRUdFWC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHRleHRcbiAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgc3RhdGUuVG9rZW4oXCJ0ZXh0XCIsIFwiXCIsIDApO1xuICAgICAgICAgICAgdC5jb250ZW50ID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2godCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGVtYmVkZGVkIHBhZ2UgcmVmZXJlbmNlIHRva2VuXG4gICAgICAgICAgY29uc3QgcmVmVG9rZW4gPSBuZXcgc3RhdGUuVG9rZW4oRU1CRURERURfUEFHRV9OQU1FLCBcIlwiLCAwKTtcbiAgICAgICAgICByZWZUb2tlbi5jb250ZW50ID0gbWF0Y2hbMl07IC8vIGUuZy4sIFwiMS4yXCJcbiAgICAgICAgICByZWZUb2tlbi5tZXRhID0geyBmdWxsOiBtYXRjaFsxXSB9OyAvLyBlLmcuLCBcIlBhZ2UtMS4yXCJcbiAgICAgICAgICByZWZUb2tlbi5hdHRycyA9IFtdO1xuICAgICAgICAgIGlmIChnZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBnZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2UobWF0Y2hbMl0pO1xuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgICAgcmVmVG9rZW4uYXR0cnMucHVzaChbJ2F0dGFjaG1lbnQnLCBidG9hKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhdHRhY2htZW50KSkpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2gocmVmVG9rZW4pO1xuXG4gICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdHJhaWxpbmcgdGV4dFxuICAgICAgICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB0ID0gbmV3IHN0YXRlLlRva2VuKFwidGV4dFwiLCBcIlwiLCAwKTtcbiAgICAgICAgICB0LmNvbnRlbnQgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCk7XG4gICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGJsb2NrVG9rZW4uY2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gT3B0aW9uYWw6IHJlbmRlcmVyIGZvciB0aGUgY3VzdG9tIHRva2VuXG4gIG1kLnJlbmRlcmVyLnJ1bGVzW0VNQkVEREVEX1BBR0VfTkFNRV0gPSAodG9rZW5zLCBpZHgpID0+IHtcbiAgICBjb25zdCBwYWdlID0gdG9rZW5zW2lkeF0uY29udGVudDtcbiAgICAvLyBjb25zdCBnZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2UgPSB0b2tlbnNbaWR4XS5tZXRhPy5nZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2U7XG4gICAgLy8gY29uc3QgYXR0YWNobWVudCA9IGdldEVtYmVkZGVkUGFnZVJlZmVyZW5jZSA/IGdldEVtYmVkZGVkUGFnZVJlZmVyZW5jZShwYWdlKSA6IG51bGw7XG4gICAgY29uc3QgYXR0cnMgPSB0b2tlbnNbaWR4XS5hdHRycyB8fCBbXTtcbiAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0cnNbMF07XG4gICAgcmV0dXJuIGA8cGFnZS1yZWZlcmVuY2UgaWQ9JHtwYWdlfSBhdHRhY2htZW50PSR7YXR0YWNobWVudFsxXX0gY2xhc3M9XCJlbWJlZGRlZC1wYWdlLXJlZlwiPlBhZ2UtJHtwYWdlfTwvcGFnZS1yZWZlcmVuY2U+YDtcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,68 @@
1
+ /**
2
+ * A markdown-it plugin to convert [n] where n is a number into a <reference id="n">n</reference> HTML tag.
3
+ *
4
+ * For example, [123] will be converted to <reference id="123">123</reference>.
5
+ */
6
+ export function markdownItReferencePlugin(md) {
7
+ function referenceifyNumber(state, silent) {
8
+ const referencesMap = state.env.referencesMap || new Map();
9
+ const rank = state.env.rank || null;
10
+ const char = state.src.charCodeAt(state.pos);
11
+ // Check if the current character is '['
12
+ if (char !== 0x5B /* [ */) {
13
+ return false;
14
+ }
15
+ const start = state.pos + 1;
16
+ let end = -1;
17
+ // Find the closing ']'
18
+ for (let i = start; i < state.src.length; i++) {
19
+ if (state.src.charCodeAt(i) === 0x5D /* ] */) {
20
+ end = i;
21
+ break;
22
+ }
23
+ }
24
+ if (end === -1 || end === start) {
25
+ return false;
26
+ }
27
+ const content = state.src.slice(start, end);
28
+ // Match if content is a number or number.number (optionally allow whitespace)
29
+ if (!/^\s*\d+(?:\.\d+)?\s*$/.test(content.trim())) {
30
+ return false;
31
+ }
32
+ if (!silent) {
33
+ const n = content.trim();
34
+ // Open <reference>
35
+ const attachment = referencesMap.get(n) || n;
36
+ if (attachment) {
37
+ // add attachment if found in the references map from env (set in the component)
38
+ state.env.references(n.split('.')[0]);
39
+ const tokenOpen = state.push('reference_open', 'reference-component', 1);
40
+ // base64 encode the attachment if needed
41
+ if (typeof attachment === 'object') {
42
+ tokenOpen.attrs = [
43
+ ['id', n],
44
+ ['rank', rank],
45
+ ['attachment', btoa(encodeURIComponent(JSON.stringify(attachment)))]
46
+ ];
47
+ }
48
+ // Text content
49
+ const tokenText = state.push('text', '', 0);
50
+ tokenText.content = n;
51
+ // Close </reference>
52
+ state.push('reference_close', 'reference-component', -1);
53
+ }
54
+ else {
55
+ // If no attachment found, just create a span text node
56
+ const token = state.push('reference_open', 'span', 1);
57
+ token.attrs = [['class', 'reference']];
58
+ const tokenText = state.push('text', '', 0);
59
+ tokenText.content = n;
60
+ state.push('reference_close', 'span', -1);
61
+ }
62
+ }
63
+ state.pos = end + 1;
64
+ return true;
65
+ }
66
+ md.inline.ruler.after('text', 'referenceify_number', referenceifyNumber);
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L21hcmtkb3duLWl0LXBsdWdpbnMvcmVmZXJlbmNlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEVBQWM7SUFDdEQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUN2QyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0Msd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUViLHVCQUF1QjtRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDN0MsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXpCLG1CQUFtQjtZQUNuQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFHLFVBQVUsRUFBQyxDQUFDO2dCQUNiLGdGQUFnRjtnQkFDaEYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSx5Q0FBeUM7Z0JBQ3pDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25DLFNBQVMsQ0FBQyxLQUFLLEdBQUc7d0JBQ2hCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDVCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7d0JBQ2QsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRSxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsZUFBZTtnQkFDZixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUV0QixxQkFBcUI7Z0JBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdURBQXVEO2dCQUN2RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBNYXJrZG93bkl0IGZyb20gXCJtYXJrZG93bi1pdFwiO1xyXG4vKipcclxuICogQSBtYXJrZG93bi1pdCBwbHVnaW4gdG8gY29udmVydCBbbl0gd2hlcmUgbiBpcyBhIG51bWJlciBpbnRvIGEgPHJlZmVyZW5jZSBpZD1cIm5cIj5uPC9yZWZlcmVuY2U+IEhUTUwgdGFnLlxyXG4gKlxyXG4gKiBGb3IgZXhhbXBsZSwgWzEyM10gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gPHJlZmVyZW5jZSBpZD1cIjEyM1wiPjEyMzwvcmVmZXJlbmNlPi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkl0UmVmZXJlbmNlUGx1Z2luKG1kOiBNYXJrZG93bkl0KSB7XHJcbiAgZnVuY3Rpb24gcmVmZXJlbmNlaWZ5TnVtYmVyKHN0YXRlLCBzaWxlbnQpIHtcclxuICAgIGNvbnN0IHJlZmVyZW5jZXNNYXAgPSBzdGF0ZS5lbnYucmVmZXJlbmNlc01hcCB8fCBuZXcgTWFwKCk7XHJcbiAgICBjb25zdCByYW5rID0gc3RhdGUuZW52LnJhbmsgfHwgbnVsbDtcclxuICAgIGNvbnN0IGNoYXIgPSBzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyAnWydcclxuICAgIGlmIChjaGFyICE9PSAweDVCIC8qIFsgKi8pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0ID0gc3RhdGUucG9zICsgMTtcclxuICAgIGxldCBlbmQgPSAtMTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBjbG9zaW5nICddJ1xyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhdGUuc3JjLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChzdGF0ZS5zcmMuY2hhckNvZGVBdChpKSA9PT0gMHg1RCAvKiBdICovKSB7XHJcbiAgICAgICAgZW5kID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbmQgPT09IC0xIHx8IGVuZCA9PT0gc3RhcnQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSBzdGF0ZS5zcmMuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgLy8gTWF0Y2ggaWYgY29udGVudCBpcyBhIG51bWJlciBvciBudW1iZXIubnVtYmVyIChvcHRpb25hbGx5IGFsbG93IHdoaXRlc3BhY2UpXHJcbiAgICBpZiAoIS9eXFxzKlxcZCsoPzpcXC5cXGQrKT9cXHMqJC8udGVzdChjb250ZW50LnRyaW0oKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgIGNvbnN0IG4gPSBjb250ZW50LnRyaW0oKTtcclxuXHJcbiAgICAgIC8vIE9wZW4gPHJlZmVyZW5jZT5cclxuICAgICAgY29uc3QgYXR0YWNobWVudCA9IHJlZmVyZW5jZXNNYXAuZ2V0KG4pIHx8IG47XHJcbiAgICAgIGlmKGF0dGFjaG1lbnQpe1xyXG4gICAgICAgIC8vIGFkZCBhdHRhY2htZW50IGlmIGZvdW5kIGluIHRoZSByZWZlcmVuY2VzIG1hcCBmcm9tIGVudiAoc2V0IGluIHRoZSBjb21wb25lbnQpXHJcbiAgICAgICAgc3RhdGUuZW52LnJlZmVyZW5jZXMobi5zcGxpdCgnLicpWzBdKTtcclxuICAgICAgICBjb25zdCB0b2tlbk9wZW4gPSBzdGF0ZS5wdXNoKCdyZWZlcmVuY2Vfb3BlbicsICdyZWZlcmVuY2UtY29tcG9uZW50JywgMSk7XHJcbiAgICAgICAgLy8gYmFzZTY0IGVuY29kZSB0aGUgYXR0YWNobWVudCBpZiBuZWVkZWRcclxuICAgICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICB0b2tlbk9wZW4uYXR0cnMgPSBbXHJcbiAgICAgICAgICAgIFsnaWQnLCBuXSxcclxuICAgICAgICAgICAgWydyYW5rJywgcmFua10sXHJcbiAgICAgICAgICAgIFsnYXR0YWNobWVudCcsIGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGF0dGFjaG1lbnQpKSldXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGV4dCBjb250ZW50XHJcbiAgICAgICAgY29uc3QgdG9rZW5UZXh0ID0gc3RhdGUucHVzaCgndGV4dCcsICcnLCAwKTtcclxuICAgICAgICB0b2tlblRleHQuY29udGVudCA9IG47XHJcblxyXG4gICAgICAgIC8vIENsb3NlIDwvcmVmZXJlbmNlPlxyXG4gICAgICAgIHN0YXRlLnB1c2goJ3JlZmVyZW5jZV9jbG9zZScsICdyZWZlcmVuY2UtY29tcG9uZW50JywgLTEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIElmIG5vIGF0dGFjaG1lbnQgZm91bmQsIGp1c3QgY3JlYXRlIGEgc3BhbiB0ZXh0IG5vZGVcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHN0YXRlLnB1c2goJ3JlZmVyZW5jZV9vcGVuJywgJ3NwYW4nLCAxKTtcclxuICAgICAgICB0b2tlbi5hdHRycyA9IFtbJ2NsYXNzJywgJ3JlZmVyZW5jZSddXTtcclxuICAgICAgICBjb25zdCB0b2tlblRleHQgPSBzdGF0ZS5wdXNoKCd0ZXh0JywgJycsIDApO1xyXG4gICAgICAgIHRva2VuVGV4dC5jb250ZW50ID0gbjtcclxuICAgICAgICBzdGF0ZS5wdXNoKCdyZWZlcmVuY2VfY2xvc2UnLCAnc3BhbicsIC0xKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlLnBvcyA9IGVuZCArIDE7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG1kLmlubGluZS5ydWxlci5hZnRlcigndGV4dCcsICdyZWZlcmVuY2VpZnlfbnVtYmVyJywgcmVmZXJlbmNlaWZ5TnVtYmVyKTtcclxufVxyXG4iXX0=
@@ -6,11 +6,12 @@ export * from './initials-avatar/initials-avatar.component';
6
6
  export * from './format-icon/format-icon.component';
7
7
  export * from './types';
8
8
  export * from './instance-manager.service';
9
- export * from './prompt.component';
10
9
  export * from './documents-upload/document-upload/document-upload.component';
11
10
  export * from './documents-upload/document-list/document-list.component';
12
11
  export * from './documents-upload/documents-upload.service';
13
12
  export * from './documents-upload/documents-upload.model';
14
13
  export * from './documents-upload/document-overview/document-overview.component';
15
14
  export * from './services/notification.service';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jaGF0LXNldHRpbmdzLXYzL2NoYXQtc2V0dGluZ3MtdjMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY2hhdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGF0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zYXZlZC1jaGF0cy9zYXZlZC1jaGF0cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbml0aWFscy1hdmF0YXIvaW5pdGlhbHMtYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm1hdC1pY29uL2Zvcm1hdC1pY29uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvbXB0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnQtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50cy11cGxvYWQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnRzLXVwbG9hZC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50cy11cGxvYWQvZG9jdW1lbnQtb3ZlcnZpZXcvZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuIl19
15
+ export * from './services/custom-elements.service';
16
+ export * from './references/references.component';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxpQ0FBaUMsQ0FBQztBQUdoRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoYXQtc2V0dGluZ3MtdjMvY2hhdC1zZXR0aW5ncy12My5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGF0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NhdmVkLWNoYXRzL3NhdmVkLWNoYXRzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2luaXRpYWxzLWF2YXRhci9pbml0aWFscy1hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0LWljb24vZm9ybWF0LWljb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC9kb2N1bWVudC11cGxvYWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1saXN0L2RvY3VtZW50LWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50cy11cGxvYWQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcblxuXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2N1c3RvbS1lbGVtZW50cy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudCc7Il19
@@ -0,0 +1,290 @@
1
+ import { Component, ElementRef, inject, Input } from "@angular/core";
2
+ import { ChatReferenceComponent } from "../chat-reference/chat-reference.component";
3
+ import { CopyToClipboardDirective } from "../directives/copy-to-clipboard.directive";
4
+ import { TooltipDirective } from "../tooltip/tooltip.directive";
5
+ import { InlineImageReferenceComponent } from "./inline-image-reference";
6
+ import { InlinePageReferenceComponent } from "./inline-page-reference";
7
+ import * as i0 from "@angular/core";
8
+ /*
9
+ * Web Element Reference Components
10
+ * Those components are used to display a reference (page, image, document) in the chat interface.
11
+ * It uses a tooltip to show additional information about the reference.
12
+ * The component emits custom events when the user interacts with it.
13
+ */
14
+ export class ReferenceComponent {
15
+ constructor() {
16
+ this.ref = {};
17
+ }
18
+ ngOnChanges() {
19
+ if (!this.attachment)
20
+ return;
21
+ try {
22
+ const obj = JSON.parse(decodeURIComponent(atob(this.attachment)));
23
+ this.ref = obj;
24
+ }
25
+ catch (error) {
26
+ console.error("Error parsing attachment", error, this.attachment);
27
+ }
28
+ }
29
+ onOpenPreview(attachment, partId) {
30
+ // Émettre un événement personnalisé pour le web element using the service
31
+ dispatchEvent(new CustomEvent("onOpenPreview", {
32
+ detail: { reference: attachment, partId: partId || this.id },
33
+ }));
34
+ }
35
+ onOpenDocument(attachment, partId) {
36
+ // Émettre un événement personnalisé pour le web element using the service
37
+ dispatchEvent(new CustomEvent("onOpenDocument", {
38
+ detail: { reference: attachment, partId: partId || this.id },
39
+ }));
40
+ }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ReferenceComponent, isStandalone: true, selector: "reference", inputs: { id: "id", attachment: "attachment", rank: "rank" }, providers: [], usesOnChanges: true, ngImport: i0, template: `
43
+ <a
44
+ class="reference"
45
+ role="button"
46
+ [sqTooltip]="ref"
47
+ [sqTooltipTemplate]="tooltipTpl"
48
+ [hoverableTooltip]="true"
49
+ (click)="onOpenPreview(ref)"
50
+ >{{ id }}</a>
51
+
52
+ <!-- tooltip template -->
53
+ <ng-template #tooltipTpl>
54
+ <sq-chat-reference
55
+ class="expanded"
56
+ [attachment]="ref"
57
+ [reference]="ref.contextId"
58
+ [partId]="ref.$partId"
59
+ (openPreview)="onOpenPreview($event, $event.$partId)"
60
+ (openDocument)="onOpenDocument($event, $event.$partId)"
61
+ ></sq-chat-reference>
62
+ </ng-template>
63
+ `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }] }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReferenceComponent, decorators: [{
66
+ type: Component,
67
+ args: [{ selector: "reference", imports: [TooltipDirective, ChatReferenceComponent], providers: [], template: `
68
+ <a
69
+ class="reference"
70
+ role="button"
71
+ [sqTooltip]="ref"
72
+ [sqTooltipTemplate]="tooltipTpl"
73
+ [hoverableTooltip]="true"
74
+ (click)="onOpenPreview(ref)"
75
+ >{{ id }}</a>
76
+
77
+ <!-- tooltip template -->
78
+ <ng-template #tooltipTpl>
79
+ <sq-chat-reference
80
+ class="expanded"
81
+ [attachment]="ref"
82
+ [reference]="ref.contextId"
83
+ [partId]="ref.$partId"
84
+ (openPreview)="onOpenPreview($event, $event.$partId)"
85
+ (openDocument)="onOpenDocument($event, $event.$partId)"
86
+ ></sq-chat-reference>
87
+ </ng-template>
88
+ `, standalone: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"] }]
89
+ }], propDecorators: { id: [{
90
+ type: Input
91
+ }], attachment: [{
92
+ type: Input
93
+ }], rank: [{
94
+ type: Input
95
+ }] } });
96
+ export class PageReferenceComponent {
97
+ constructor() {
98
+ this.ref = {};
99
+ }
100
+ ngOnChanges() {
101
+ if (!this.attachment)
102
+ return;
103
+ try {
104
+ const obj = JSON.parse(decodeURIComponent(atob(this.attachment)));
105
+ this.ref = obj;
106
+ }
107
+ catch (error) {
108
+ console.error("Error parsing attachment", error, this.attachment);
109
+ }
110
+ }
111
+ onOpenPreview(attachment, partId) {
112
+ // Émettre un événement personnalisé pour le web element using the service
113
+ dispatchEvent(new CustomEvent("onOpenPreview", {
114
+ detail: { reference: attachment, partId: partId || this.id },
115
+ }));
116
+ }
117
+ onOpenDocument(attachment, partId) {
118
+ // Émettre un événement personnalisé pour le web element using the service
119
+ dispatchEvent(new CustomEvent("onOpenDocument", {
120
+ detail: { reference: attachment, partId: partId || this.id },
121
+ }));
122
+ }
123
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
124
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PageReferenceComponent, isStandalone: true, selector: "page-reference", inputs: { id: "id", attachment: "attachment" }, providers: [], usesOnChanges: true, ngImport: i0, template: `
125
+ <span
126
+ class="reference"
127
+ [sqTooltip]="{ obj: ref, id }"
128
+ [sqTooltipTemplate]="pageTooltipTpl"
129
+ [hoverableTooltip]="true"
130
+ >
131
+ Page-{{ id }}
132
+ </span>
133
+ <ng-template #pageTooltipTpl let-ref>
134
+ <InlinePageReference
135
+ style="max-width: 30vw;"
136
+ [id]="ref.id"
137
+ [ref]="ref.obj"
138
+ (openPreview)="onOpenPreview($event, $event.$partId)"
139
+ (openDocument)="onOpenPreview($event, $event.$partId)"
140
+ />
141
+ </ng-template>
142
+ `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: InlinePageReferenceComponent, selector: "InlinePageReference", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] }); }
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageReferenceComponent, decorators: [{
145
+ type: Component,
146
+ args: [{ selector: "page-reference", imports: [TooltipDirective, InlinePageReferenceComponent], providers: [], template: `
147
+ <span
148
+ class="reference"
149
+ [sqTooltip]="{ obj: ref, id }"
150
+ [sqTooltipTemplate]="pageTooltipTpl"
151
+ [hoverableTooltip]="true"
152
+ >
153
+ Page-{{ id }}
154
+ </span>
155
+ <ng-template #pageTooltipTpl let-ref>
156
+ <InlinePageReference
157
+ style="max-width: 30vw;"
158
+ [id]="ref.id"
159
+ [ref]="ref.obj"
160
+ (openPreview)="onOpenPreview($event, $event.$partId)"
161
+ (openDocument)="onOpenPreview($event, $event.$partId)"
162
+ />
163
+ </ng-template>
164
+ `, standalone: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"] }]
165
+ }], propDecorators: { id: [{
166
+ type: Input
167
+ }], attachment: [{
168
+ type: Input
169
+ }] } });
170
+ export class ImageReferenceComponent {
171
+ constructor() {
172
+ this.ref = {};
173
+ }
174
+ ngOnChanges() {
175
+ if (!this.attachment)
176
+ return;
177
+ try {
178
+ const obj = JSON.parse(decodeURIComponent(atob(this.attachment)));
179
+ this.ref = obj;
180
+ }
181
+ catch (error) {
182
+ console.error("Error parsing attachment", error, this.attachment);
183
+ }
184
+ }
185
+ onOpenPreview(attachment, partId) {
186
+ // Émettre un événement personnalisé pour le web element using the service
187
+ dispatchEvent(new CustomEvent("onOpenPreview", {
188
+ detail: { reference: attachment, partId: partId || this.id },
189
+ }));
190
+ }
191
+ onOpenDocument(attachment, partId) {
192
+ // Émettre un événement personnalisé pour le web element using the service
193
+ dispatchEvent(new CustomEvent("onOpenDocument", {
194
+ detail: { reference: attachment, partId: partId || this.id },
195
+ }));
196
+ }
197
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImageReferenceComponent, isStandalone: true, selector: "image-reference", inputs: { id: "id", attachment: "attachment" }, providers: [], usesOnChanges: true, ngImport: i0, template: `
199
+ <span
200
+ class="reference"
201
+ [sqTooltip]="{ obj: ref, id }"
202
+ [sqTooltipTemplate]="imageTooltipTpl"
203
+ [hoverableTooltip]="true"
204
+ >
205
+ Img-{{ this.id }}
206
+ </span>
207
+ <ng-template #imageTooltipTpl let-ref>
208
+ <InlineImageReference
209
+ style="max-width: 30vw;"
210
+ [id]="ref.id"
211
+ [ref]="ref.obj"
212
+ (openPreview)="onOpenPreview($event, $event.$partId)"
213
+ (openDocument)="onOpenDocument($event, $event.$partId)"
214
+ />
215
+ </ng-template>
216
+ `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: InlineImageReferenceComponent, selector: "InlineImageReference", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] }); }
217
+ }
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageReferenceComponent, decorators: [{
219
+ type: Component,
220
+ args: [{ selector: "image-reference", imports: [TooltipDirective, InlineImageReferenceComponent], providers: [], template: `
221
+ <span
222
+ class="reference"
223
+ [sqTooltip]="{ obj: ref, id }"
224
+ [sqTooltipTemplate]="imageTooltipTpl"
225
+ [hoverableTooltip]="true"
226
+ >
227
+ Img-{{ this.id }}
228
+ </span>
229
+ <ng-template #imageTooltipTpl let-ref>
230
+ <InlineImageReference
231
+ style="max-width: 30vw;"
232
+ [id]="ref.id"
233
+ [ref]="ref.obj"
234
+ (openPreview)="onOpenPreview($event, $event.$partId)"
235
+ (openDocument)="onOpenDocument($event, $event.$partId)"
236
+ />
237
+ </ng-template>
238
+ `, standalone: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"] }]
239
+ }], propDecorators: { id: [{
240
+ type: Input
241
+ }], attachment: [{
242
+ type: Input
243
+ }] } });
244
+ export class CodeBlockReferenceComponent {
245
+ constructor() {
246
+ this.langname = "";
247
+ this.el = inject(ElementRef);
248
+ this.encodeCode = '';
249
+ }
250
+ ngAfterViewInit() {
251
+ // get the code content
252
+ const codeEl = this.el.nativeElement.querySelector("code");
253
+ const code = codeEl ? codeEl.textContent : "";
254
+ this.encodeCode = encodeURIComponent(code);
255
+ }
256
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeBlockReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
257
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CodeBlockReferenceComponent, isStandalone: true, selector: "code-block-reference", inputs: { langname: "langname" }, ngImport: i0, template: `
258
+ <div class="card mb-2">
259
+ <div class="card-header d-flex justify-content-end align-items-center">
260
+ <span class="me-auto">{{ langname || 'code'}}</span>
261
+ <button class="btn btn-light btn-sm" copy-to-clipboard [text]="encodeCode">
262
+ <svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z" fill="currentColor"></path></svg>
263
+ </button>
264
+ </div>
265
+ <ng-content></ng-content>
266
+ </div>
267
+ `, isInline: true, dependencies: [{ kind: "directive", type: CopyToClipboardDirective, selector: "[copy-to-clipboard]", inputs: ["text"] }] }); }
268
+ }
269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeBlockReferenceComponent, decorators: [{
270
+ type: Component,
271
+ args: [{
272
+ selector: "code-block-reference",
273
+ imports: [CopyToClipboardDirective],
274
+ template: `
275
+ <div class="card mb-2">
276
+ <div class="card-header d-flex justify-content-end align-items-center">
277
+ <span class="me-auto">{{ langname || 'code'}}</span>
278
+ <button class="btn btn-light btn-sm" copy-to-clipboard [text]="encodeCode">
279
+ <svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z" fill="currentColor"></path></svg>
280
+ </button>
281
+ </div>
282
+ <ng-content></ng-content>
283
+ </div>
284
+ `,
285
+ standalone: true,
286
+ }]
287
+ }], propDecorators: { langname: [{
288
+ type: Input
289
+ }] } });
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHaEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRXZFOzs7OztHQUtHO0FBaUNILE1BQU0sT0FBTyxrQkFBa0I7SUEvQi9CO1FBcUNFLFFBQUcsR0FBeUIsRUFBMkIsQ0FBQztLQTZCekQ7SUEzQkMsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFpQyxF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RSxZQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsY0FDVyxJQUFJOzhCQU9QLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLOztBQWlEUixNQUFNLE9BQU8sMkJBQTJCO0lBaEJ4QztRQWlCVyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE9BQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztLQVFqQjtJQU5DLGVBQWU7UUFDYix1QkFBdUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQzsrR0FYVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixrSEFiNUI7Ozs7Ozs7Ozs7R0FVVCw0REFYUyx3QkFBd0I7OzRGQWN2QiwyQkFBMkI7a0JBaEJ2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUNuQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBRVUsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdFJlZmVyZW5jZUNvbXBvbmVudCB9IGZyb20gXCIuLi9jaGF0LXJlZmVyZW5jZS9jaGF0LXJlZmVyZW5jZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29weVRvQ2xpcGJvYXJkRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvY29weS10by1jbGlwYm9hcmQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tIFwiLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBDaGF0Q29udGV4dEF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlSW1hZ2VSZWZlcmVuY2UgfSBmcm9tIFwiLi4vdHlwZXMvbWVzc2FnZS1yZWZlcmVuY2UudHlwZXNcIjtcclxuaW1wb3J0IHsgSW5saW5lSW1hZ2VSZWZlcmVuY2VDb21wb25lbnQgfSBmcm9tIFwiLi9pbmxpbmUtaW1hZ2UtcmVmZXJlbmNlXCI7XHJcbmltcG9ydCB7IElubGluZVBhZ2VSZWZlcmVuY2VDb21wb25lbnQgfSBmcm9tIFwiLi9pbmxpbmUtcGFnZS1yZWZlcmVuY2VcIjtcclxuXHJcbi8qXHJcbiAqIFdlYiBFbGVtZW50IFJlZmVyZW5jZSBDb21wb25lbnRzXHJcbiAqIFRob3NlIGNvbXBvbmVudHMgYXJlIHVzZWQgdG8gZGlzcGxheSBhIHJlZmVyZW5jZSAocGFnZSwgaW1hZ2UsIGRvY3VtZW50KSBpbiB0aGUgY2hhdCBpbnRlcmZhY2UuXHJcbiAqIEl0IHVzZXMgYSB0b29sdGlwIHRvIHNob3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVmZXJlbmNlLlxyXG4gKiBUaGUgY29tcG9uZW50IGVtaXRzIGN1c3RvbSBldmVudHMgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBpdC5cclxuICovXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJyZWZlcmVuY2VcIixcclxuICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgQ2hhdFJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxhXHJcbiAgICBjbGFzcz1cInJlZmVyZW5jZVwiXHJcbiAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgIFtzcVRvb2x0aXBdPVwicmVmXCJcclxuICAgIFtzcVRvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVHBsXCJcclxuICAgIFtob3ZlcmFibGVUb29sdGlwXT1cInRydWVcIlxyXG4gICAgKGNsaWNrKT1cIm9uT3BlblByZXZpZXcocmVmKVwiXHJcbiAgICA+e3sgaWQgfX08L2E+XHJcblxyXG4gICAgPCEtLSB0b29sdGlwIHRlbXBsYXRlIC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVHBsPlxyXG4gICAgICA8c3EtY2hhdC1yZWZlcmVuY2VcclxuICAgICAgICBjbGFzcz1cImV4cGFuZGVkXCJcclxuICAgICAgICBbYXR0YWNobWVudF09XCJyZWZcIlxyXG4gICAgICAgIFtyZWZlcmVuY2VdPVwicmVmLmNvbnRleHRJZFwiXHJcbiAgICAgICAgW3BhcnRJZF09XCJyZWYuJHBhcnRJZFwiXHJcbiAgICAgICAgKG9wZW5QcmV2aWV3KT1cIm9uT3BlblByZXZpZXcoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAgIChvcGVuRG9jdW1lbnQpPVwib25PcGVuRG9jdW1lbnQoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICA+PC9zcS1jaGF0LXJlZmVyZW5jZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHN0eWxlczogYFxyXG4gIGRpdiB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweDtib3JkZXItcmFkaXVzOiA0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgLy8gamUgc3VpcyBvYmxpZ8OpIGQndXRpbGlzZXIgbGVzIGTDqWNvcmF0ZXVycyBASW5wdXQoKSBjYXIgQW5ndWxhciBuZSBzdXBwb3J0ZSBwYXMgbGVzIGlucHV0cyAoc2lnbmFsKSBkYW5zIGxlcyB3ZWIgZWxlbWVudHMgZW4gQW5ndWxhciB2MThcclxuICBASW5wdXQoKSBpZDtcclxuICBASW5wdXQoKSBhdHRhY2htZW50O1xyXG4gIEBJbnB1dCgpIHJhbms6IG51bWJlcjtcclxuXHJcbiAgcmVmOkNoYXRDb250ZXh0QXR0YWNobWVudCA9IHt9IGFzIENoYXRDb250ZXh0QXR0YWNobWVudDtcclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXR0YWNobWVudCkgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoYXRvYih0aGlzLmF0dGFjaG1lbnQpKSk7XHJcbiAgICAgIHRoaXMucmVmID0gb2JqO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgYXR0YWNobWVudFwiLCBlcnJvciwgdGhpcy5hdHRhY2htZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uT3BlblByZXZpZXcoYXR0YWNobWVudDogQ2hhdENvbnRleHRBdHRhY2htZW50LCBwYXJ0SWQ/OiBudW1iZXIpIHtcclxuICAgIC8vIMOJbWV0dHJlIHVuIMOpdsOpbmVtZW50IHBlcnNvbm5hbGlzw6kgcG91ciBsZSB3ZWIgZWxlbWVudCB1c2luZyB0aGUgc2VydmljZVxyXG4gICAgZGlzcGF0Y2hFdmVudChcclxuICAgICAgbmV3IEN1c3RvbUV2ZW50KFwib25PcGVuUHJldmlld1wiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uT3BlbkRvY3VtZW50KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlbkRvY3VtZW50XCIsIHtcclxuICAgICAgICBkZXRhaWw6IHsgcmVmZXJlbmNlOiBhdHRhY2htZW50LCBwYXJ0SWQ6IHBhcnRJZCB8fCB0aGlzLmlkIH0sXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicGFnZS1yZWZlcmVuY2VcIixcclxuICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgSW5saW5lUGFnZVJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJyZWZlcmVuY2VcIlxyXG4gICAgICBbc3FUb29sdGlwXT1cInsgb2JqOiByZWYsIGlkIH1cIlxyXG4gICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwicGFnZVRvb2x0aXBUcGxcIlxyXG4gICAgICBbaG92ZXJhYmxlVG9vbHRpcF09XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgUGFnZS17eyBpZCB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPG5nLXRlbXBsYXRlICNwYWdlVG9vbHRpcFRwbCBsZXQtcmVmPlxyXG4gICAgICA8SW5saW5lUGFnZVJlZmVyZW5jZVxyXG4gICAgICAgIHN0eWxlPVwibWF4LXdpZHRoOiAzMHZ3O1wiXHJcbiAgICAgICAgW2lkXT1cInJlZi5pZFwiXHJcbiAgICAgICAgW3JlZl09XCJyZWYub2JqXCJcclxuICAgICAgICAob3BlblByZXZpZXcpPVwib25PcGVuUHJldmlldygkZXZlbnQsICRldmVudC4kcGFydElkKVwiXHJcbiAgICAgICAgKG9wZW5Eb2N1bWVudCk9XCJvbk9wZW5QcmV2aWV3KCRldmVudCwgJGV2ZW50LiRwYXJ0SWQpXCJcclxuICAgICAgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHN0eWxlczogYFxyXG4gIGRpdiB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweDtib3JkZXItcmFkaXVzOiA0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VSZWZlcmVuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuXHJcbiAgcmVmOiBNZXNzYWdlSW1hZ2VSZWZlcmVuY2UgPSB7fSBhcyBNZXNzYWdlSW1hZ2VSZWZlcmVuY2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGhpcy5hdHRhY2htZW50KSkpO1xyXG4gICAgICB0aGlzLnJlZiA9IG9iajtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGF0dGFjaG1lbnRcIiwgZXJyb3IsIHRoaXMuYXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5QcmV2aWV3KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlblByZXZpZXdcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5Eb2N1bWVudChhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5Eb2N1bWVudFwiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImltYWdlLXJlZmVyZW5jZVwiLFxyXG4gIGltcG9ydHM6IFtUb29sdGlwRGlyZWN0aXZlLCBJbmxpbmVJbWFnZVJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJyZWZlcmVuY2VcIlxyXG4gICAgICBbc3FUb29sdGlwXT1cInsgb2JqOiByZWYsIGlkIH1cIlxyXG4gICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwiaW1hZ2VUb29sdGlwVHBsXCJcclxuICAgICAgW2hvdmVyYWJsZVRvb2x0aXBdPVwidHJ1ZVwiXHJcbiAgICA+XHJcbiAgICAgIEltZy17eyB0aGlzLmlkIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ltYWdlVG9vbHRpcFRwbCBsZXQtcmVmPlxyXG4gICAgICA8SW5saW5lSW1hZ2VSZWZlcmVuY2VcclxuICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMzB2dztcIlxyXG4gICAgICAgIFtpZF09XCJyZWYuaWRcIlxyXG4gICAgICAgIFtyZWZdPVwicmVmLm9ialwiXHJcbiAgICAgICAgKG9wZW5QcmV2aWV3KT1cIm9uT3BlblByZXZpZXcoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAgIChvcGVuRG9jdW1lbnQpPVwib25PcGVuRG9jdW1lbnQoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc3R5bGVzOiBgXHJcbiAgZGl2IHsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4O2JvcmRlci1yYWRpdXM6IDRweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VSZWZlcmVuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuXHJcbiAgcmVmOiBNZXNzYWdlSW1hZ2VSZWZlcmVuY2UgPSB7fSBhcyBNZXNzYWdlSW1hZ2VSZWZlcmVuY2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGhpcy5hdHRhY2htZW50KSkpO1xyXG4gICAgICB0aGlzLnJlZiA9IG9iajtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGF0dGFjaG1lbnRcIiwgZXJyb3IsIHRoaXMuYXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5QcmV2aWV3KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlblByZXZpZXdcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5Eb2N1bWVudChhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5Eb2N1bWVudFwiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvZGUtYmxvY2stcmVmZXJlbmNlXCIsXHJcbiAgaW1wb3J0czogW0NvcHlUb0NsaXBib2FyZERpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWUtYXV0b1wiPnt7IGxhbmduYW1lIHx8ICdjb2RlJ319PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbVwiIGNvcHktdG8tY2xpcGJvYXJkIFt0ZXh0XT1cImVuY29kZUNvZGVcIj5cclxuICAgICAgICAgIDxzdmcgZGF0YS10ZXN0aWQ9XCJnZWlzdC1pY29uXCIgaGVpZ2h0PVwiMTZcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB3aWR0aD1cIjE2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogY3VycmVudGNvbG9yO1wiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0yLjc1IDAuNUMxLjc4MzUgMC41IDEgMS4yODM1IDEgMi4yNVY5Ljc1QzEgMTAuNzE2NSAxLjc4MzUgMTEuNSAyLjc1IDExLjVIMy43NUg0LjVWMTBIMy43NUgyLjc1QzIuNjExOTMgMTAgMi41IDkuODg4MDcgMi41IDkuNzVWMi4yNUMyLjUgMi4xMTE5MyAyLjYxMTkzIDIgMi43NSAySDguMjVDOC4zODgwNyAyIDguNSAyLjExMTkzIDguNSAyLjI1VjNIMTBWMi4yNUMxMCAxLjI4MzUgOS4yMTY1IDAuNSA4LjI1IDAuNUgyLjc1Wk03Ljc1IDQuNUM2Ljc4MzUgNC41IDYgNS4yODM1IDYgNi4yNVYxMy43NUM2IDE0LjcxNjUgNi43ODM1IDE1LjUgNy43NSAxNS41SDEzLjI1QzE0LjIxNjUgMTUuNSAxNSAxNC43MTY1IDE1IDEzLjc1VjYuMjVDMTUgNS4yODM1IDE0LjIxNjUgNC41IDEzLjI1IDQuNUg3Ljc1Wk03LjUgNi4yNUM3LjUgNi4xMTE5MyA3LjYxMTkzIDYgNy43NSA2SDEzLjI1QzEzLjM4ODEgNiAxMy41IDYuMTExOTMgMTMuNSA2LjI1VjEzLjc1QzEzLjUgMTMuODg4MSAxMy4zODgxIDE0IDEzLjI1IDE0SDcuNzVDNy42MTE5MyAxNCA3LjUgMTMuODg4MSA3LjUgMTMuNzVWNi4yNVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPjwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29kZUJsb2NrUmVmZXJlbmNlQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBsYW5nbmFtZSA9IFwiXCI7XHJcblxyXG4gIGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIGVuY29kZUNvZGUgPSAnJztcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gZ2V0IHRoZSBjb2RlIGNvbnRlbnRcclxuICAgIGNvbnN0IGNvZGVFbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiY29kZVwiKTtcclxuICAgIGNvbnN0IGNvZGUgPSBjb2RlRWwgPyBjb2RlRWwudGV4dENvbnRlbnQgOiBcIlwiO1xyXG4gICAgdGhpcy5lbmNvZGVDb2RlID0gZW5jb2RlVVJJQ29tcG9uZW50KGNvZGUpO1xyXG4gIH1cclxufVxyXG4iXX0=