@sinequa/assistant 3.9.11 → 3.10.2

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 (110) hide show
  1. package/chat/chat-message/chat-message.component.d.ts +2 -4
  2. package/chat/chat.component.d.ts +4 -3
  3. package/chat/chat.service.d.ts +16 -1
  4. package/chat/custom-elements/components/code-block.component.d.ts +11 -0
  5. package/chat/custom-elements/components/document-reference.component.d.ts +13 -0
  6. package/chat/custom-elements/components/i18n/de.json +5 -0
  7. package/chat/custom-elements/components/i18n/en.json +5 -0
  8. package/chat/custom-elements/components/i18n/fr.json +5 -0
  9. package/chat/custom-elements/components/image-reference.component.d.ts +14 -0
  10. package/chat/custom-elements/components/page-reference.component.d.ts +14 -0
  11. package/chat/custom-elements/components/table-tools.component.d.ts +11 -0
  12. package/chat/custom-elements/custom-elements.config.d.ts +2 -0
  13. package/chat/{services → custom-elements}/custom-elements.service.d.ts +1 -0
  14. package/chat/documents-upload/documents-upload.service.d.ts +2 -2
  15. package/chat/fetch-patcher/app-injector.d.ts +9 -0
  16. package/chat/fetch-patcher/fetch-patcher.d.ts +31 -0
  17. package/chat/fetch-patcher/global-error-handler.service.d.ts +36 -0
  18. package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +13 -0
  19. package/chat/markdown-it/markdown-it.config.d.ts +4 -0
  20. package/chat/markdown-it/plugins/document-reference.plugin.d.ts +8 -0
  21. package/chat/markdown-it/plugins/image-reference.plugin.d.ts +9 -0
  22. package/chat/markdown-it/plugins/page-reference.plugin.d.ts +9 -0
  23. package/chat/markdown-it/plugins/table-tools.plugin.d.ts +2 -0
  24. package/chat/public-api.d.ts +21 -2
  25. package/chat/{chat-reference → references/chat-reference}/chat-reference.component.d.ts +1 -1
  26. package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +20 -0
  27. package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +20 -0
  28. package/chat/references/i18n/de.json +4 -4
  29. package/chat/references/i18n/en.json +1 -1
  30. package/chat/references/i18n/fr.json +1 -1
  31. package/chat/saved-chats/i18n/de.json +3 -1
  32. package/chat/saved-chats/i18n/en.json +3 -1
  33. package/chat/saved-chats/i18n/fr.json +3 -1
  34. package/chat/saved-chats/saved-chats.component.d.ts +6 -0
  35. package/chat/saved-chats/saved-chats.service.d.ts +4 -2
  36. package/chat/services/assistant-metadata.service.d.ts +5 -1
  37. package/chat/services/signalR.web.service.d.ts +0 -11
  38. package/chat/smart-renderer/smart-renderer.d.ts +2 -0
  39. package/chat/token-progress-bar/i18n/en.json +1 -1
  40. package/chat/types/message-reference.types.d.ts +3 -0
  41. package/chat/types.d.ts +55 -35
  42. package/chat/version.d.ts +1 -0
  43. package/esm2022/chat/chat-message/chat-message.component.mjs +15 -12
  44. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +7 -4
  45. package/esm2022/chat/chat.component.mjs +39 -26
  46. package/esm2022/chat/chat.service.mjs +39 -5
  47. package/esm2022/chat/custom-elements/components/code-block.component.mjs +97 -0
  48. package/esm2022/chat/custom-elements/components/document-reference.component.mjs +85 -0
  49. package/esm2022/chat/custom-elements/components/image-reference.component.mjs +79 -0
  50. package/esm2022/chat/custom-elements/components/page-reference.component.mjs +79 -0
  51. package/esm2022/chat/custom-elements/components/table-tools.component.mjs +111 -0
  52. package/esm2022/chat/custom-elements/custom-elements.config.mjs +6 -0
  53. package/esm2022/chat/custom-elements/custom-elements.service.mjs +35 -0
  54. package/esm2022/chat/debug-message/debug-message.service.mjs +3 -3
  55. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +3 -3
  56. package/esm2022/chat/documents-upload/documents-upload.service.mjs +4 -4
  57. package/esm2022/chat/fetch-patcher/app-injector.mjs +19 -0
  58. package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +62 -0
  59. package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +92 -0
  60. package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +19 -0
  61. package/esm2022/chat/markdown-it/markdown-it.config.mjs +6 -0
  62. package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +14 -0
  63. package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +66 -0
  64. package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +67 -0
  65. package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +15 -0
  66. package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +67 -0
  67. package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +12 -0
  68. package/esm2022/chat/public-api.mjs +23 -3
  69. package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +72 -0
  70. package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +42 -0
  71. package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +42 -0
  72. package/esm2022/chat/saved-chats/saved-chats.component.mjs +38 -7
  73. package/esm2022/chat/saved-chats/saved-chats.service.mjs +25 -13
  74. package/esm2022/chat/services/app.service.mjs +7 -2
  75. package/esm2022/chat/services/assistant-metadata.service.mjs +40 -9
  76. package/esm2022/chat/services/assistant-ws-frames.service.mjs +7 -4
  77. package/esm2022/chat/services/signalR-connection.service.mjs +3 -6
  78. package/esm2022/chat/services/signalR.web.service.mjs +3 -13
  79. package/esm2022/chat/services/user-settings.service.mjs +6 -3
  80. package/esm2022/chat/smart-renderer/smart-renderer.mjs +19 -18
  81. package/esm2022/chat/types/message-reference.types.mjs +1 -1
  82. package/esm2022/chat/types.mjs +10 -8
  83. package/esm2022/chat/utils/utils.service.mjs +11 -11
  84. package/esm2022/chat/version.mjs +3 -0
  85. package/fesm2022/sinequa-assistant-chat.mjs +2344 -2048
  86. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  87. package/package.json +6 -6
  88. package/chat/chat-reference/i18n/de.json +0 -4
  89. package/chat/chat-reference/i18n/en.json +0 -4
  90. package/chat/chat-reference/i18n/fr.json +0 -4
  91. package/chat/directives/copy-to-clipboard.directive.d.ts +0 -8
  92. package/chat/markdown-it-plugins/image-reference.plugin.d.ts +0 -3
  93. package/chat/markdown-it-plugins/page-reference.plugin.d.ts +0 -3
  94. package/chat/markdown-it-plugins/reference.plugin.d.ts +0 -7
  95. package/chat/references/inline-image-reference.d.ts +0 -21
  96. package/chat/references/inline-page-reference.d.ts +0 -21
  97. package/chat/references/references.component.d.ts +0 -43
  98. package/esm2022/chat/chat-reference/chat-reference.component.mjs +0 -74
  99. package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +0 -68
  100. package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +0 -14
  101. package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +0 -58
  102. package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +0 -15
  103. package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +0 -60
  104. package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +0 -68
  105. package/esm2022/chat/references/inline-image-reference.mjs +0 -110
  106. package/esm2022/chat/references/inline-page-reference.mjs +0 -110
  107. package/esm2022/chat/references/references.component.mjs +0 -290
  108. package/esm2022/chat/services/custom-elements.service.mjs +0 -43
  109. /package/chat/{markdown-it-plugins → markdown-it/plugins}/code-block.plugin.d.ts +0 -0
  110. /package/chat/{markdown-it-plugins → markdown-it/plugins}/link.plugin.d.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinequa/assistant",
3
- "version": "3.9.11",
3
+ "version": "3.10.2",
4
4
  "author": "Sinequa",
5
5
  "peerDependencies": {
6
6
  "@fortawesome/fontawesome-free": "^6.4.2",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  {
16
16
  "scope": "chat-reference",
17
- "path": "chat/chat-reference/i18n"
17
+ "path": "chat/references/i18n"
18
18
  },
19
19
  {
20
20
  "scope": "chat-settings",
@@ -32,10 +32,6 @@
32
32
  "scope": "chat-documents-upload",
33
33
  "path": "chat/documents-upload/i18n"
34
34
  },
35
- {
36
- "scope": "references",
37
- "path": "chat/reference/i18n"
38
- },
39
35
  {
40
36
  "scope": "saved-chats",
41
37
  "path": "chat/saved-chats/i18n"
@@ -48,6 +44,10 @@
48
44
  {
49
45
  "scope": "chat",
50
46
  "path": "chat/i18n"
47
+ },
48
+ {
49
+ "scope": "custom-elements",
50
+ "path": "chat/custom-elements/components/i18n"
51
51
  }
52
52
  ],
53
53
  "module": "fesm2022/sinequa-assistant.mjs",
@@ -1,4 +0,0 @@
1
- {
2
- "previewDocument": "Dokument in Vorschau anzeigen",
3
- "openDocument": "Dokument öffnen"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "previewDocument": "Preview Document",
3
- "openDocument": "Open Document"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "previewDocument": "Aperçu du document",
3
- "openDocument": "Ouvrir le document"
4
- }
@@ -1,8 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class CopyToClipboardDirective {
3
- private el;
4
- text: import("@angular/core").InputSignal<string>;
5
- onClick(): void;
6
- static ɵfac: i0.ɵɵFactoryDeclaration<CopyToClipboardDirective, never>;
7
- static ɵdir: i0.ɵɵDirectiveDeclaration<CopyToClipboardDirective, "[copy-to-clipboard]", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
8
- }
@@ -1,3 +0,0 @@
1
- import type MarkdownIt from "markdown-it";
2
- export declare const EMBEDDED_IMAGE_NAME = "embedded-image-reference";
3
- export declare function markdownItImageReferencePlugin(md: MarkdownIt): void;
@@ -1,3 +0,0 @@
1
- import type MarkdownIt from "markdown-it";
2
- export declare const EMBEDDED_PAGE_NAME = "embedded-page-reference";
3
- export declare function markdownItPageReferencePlugin(md: MarkdownIt): void;
@@ -1,7 +0,0 @@
1
- import type MarkdownIt from "markdown-it";
2
- /**
3
- * A markdown-it plugin to convert [n] where n is a number into a <reference id="n">n</reference> HTML tag.
4
- *
5
- * For example, [123] will be converted to <reference id="123">123</reference>.
6
- */
7
- export declare function markdownItReferencePlugin(md: MarkdownIt): void;
@@ -1,21 +0,0 @@
1
- import { ElementRef } from "@angular/core";
2
- import { RawAttachment } from "../types";
3
- import { MessageImageReference } from "../types/message-reference.types";
4
- import * as i0 from "@angular/core";
5
- export declare class InlineImageReferenceComponent {
6
- readonly id: import("@angular/core").InputSignal<string>;
7
- readonly ref: import("@angular/core").InputSignal<MessageImageReference>;
8
- readonly openPreview: import("@angular/core").OutputEmitterRef<Omit<RawAttachment, "type"> & {
9
- $partId: string;
10
- }>;
11
- readonly openDocument: import("@angular/core").OutputEmitterRef<Omit<RawAttachment, "type"> & {
12
- $partId: string;
13
- }>;
14
- readonly openModal: import("@angular/core").OutputEmitterRef<void>;
15
- readonly modalTpl: import("@angular/core").Signal<ElementRef<HTMLDialogElement> | undefined>;
16
- previewClicked(): void;
17
- documentClicked(): void;
18
- modalClicked(): void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<InlineImageReferenceComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<InlineImageReferenceComponent, "InlineImageReference", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "ref": { "alias": "ref"; "required": true; "isSignal": true; }; }, { "openPreview": "openPreview"; "openDocument": "openDocument"; "openModal": "openModal"; }, never, never, true, never>;
21
- }
@@ -1,21 +0,0 @@
1
- import { ElementRef } from "@angular/core";
2
- import { RawAttachment } from "../types";
3
- import { MessageImageReference } from "../types/message-reference.types";
4
- import * as i0 from "@angular/core";
5
- export declare class InlinePageReferenceComponent {
6
- readonly id: import("@angular/core").InputSignal<string>;
7
- readonly ref: import("@angular/core").InputSignal<MessageImageReference>;
8
- readonly openPreview: import("@angular/core").OutputEmitterRef<Omit<RawAttachment, "type"> & {
9
- $partId: string;
10
- }>;
11
- readonly openDocument: import("@angular/core").OutputEmitterRef<Omit<RawAttachment, "type"> & {
12
- $partId: string;
13
- }>;
14
- readonly openModal: import("@angular/core").OutputEmitterRef<void>;
15
- readonly modalTpl: import("@angular/core").Signal<ElementRef<HTMLDialogElement> | undefined>;
16
- previewClicked(): void;
17
- documentClicked(): void;
18
- modalClicked(): void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<InlinePageReferenceComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<InlinePageReferenceComponent, "InlinePageReference", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "ref": { "alias": "ref"; "required": true; "isSignal": true; }; }, { "openPreview": "openPreview"; "openDocument": "openDocument"; "openModal": "openModal"; }, never, never, true, never>;
21
- }
@@ -1,43 +0,0 @@
1
- import { ElementRef, OnChanges } from "@angular/core";
2
- import { ChatContextAttachment } from "../types";
3
- import type { MessageImageReference } from "../types/message-reference.types";
4
- import * as i0 from "@angular/core";
5
- export declare class ReferenceComponent implements OnChanges {
6
- id: any;
7
- attachment: any;
8
- rank: number;
9
- ref: ChatContextAttachment;
10
- ngOnChanges(): void;
11
- onOpenPreview(attachment: ChatContextAttachment, partId?: number): void;
12
- onOpenDocument(attachment: ChatContextAttachment, partId?: number): void;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<ReferenceComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<ReferenceComponent, "reference", never, { "id": { "alias": "id"; "required": false; }; "attachment": { "alias": "attachment"; "required": false; }; "rank": { "alias": "rank"; "required": false; }; }, {}, never, never, true, never>;
15
- }
16
- export declare class PageReferenceComponent implements OnChanges {
17
- id: any;
18
- attachment: any;
19
- ref: MessageImageReference;
20
- ngOnChanges(): void;
21
- onOpenPreview(attachment: ChatContextAttachment, partId?: number): void;
22
- onOpenDocument(attachment: ChatContextAttachment, partId?: number): void;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<PageReferenceComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<PageReferenceComponent, "page-reference", never, { "id": { "alias": "id"; "required": false; }; "attachment": { "alias": "attachment"; "required": false; }; }, {}, never, never, true, never>;
25
- }
26
- export declare class ImageReferenceComponent implements OnChanges {
27
- id: any;
28
- attachment: any;
29
- ref: MessageImageReference;
30
- ngOnChanges(): void;
31
- onOpenPreview(attachment: ChatContextAttachment, partId?: number): void;
32
- onOpenDocument(attachment: ChatContextAttachment, partId?: number): void;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<ImageReferenceComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<ImageReferenceComponent, "image-reference", never, { "id": { "alias": "id"; "required": false; }; "attachment": { "alias": "attachment"; "required": false; }; }, {}, never, never, true, never>;
35
- }
36
- export declare class CodeBlockReferenceComponent {
37
- langname: string;
38
- el: ElementRef<any>;
39
- encodeCode: string;
40
- ngAfterViewInit(): void;
41
- static ɵfac: i0.ɵɵFactoryDeclaration<CodeBlockReferenceComponent, never>;
42
- static ɵcmp: i0.ɵɵComponentDeclaration<CodeBlockReferenceComponent, "code-block-reference", never, { "langname": { "alias": "langname"; "required": false; }; }, {}, never, ["*"], true, never>;
43
- }
@@ -1,74 +0,0 @@
1
- import { CommonModule } from "@angular/common";
2
- import { Component, computed, input, output, signal, viewChild } from "@angular/core";
3
- import { provideTranslocoScope, TranslocoPipe } from "@jsverse/transloco";
4
- import { FormatIconComponent } from "../format-icon/format-icon.component";
5
- import { TooltipDirective } from "../tooltip/tooltip.directive";
6
- import * as i0 from "@angular/core";
7
- export class ChatReferenceComponent {
8
- constructor() {
9
- this.reference = input.required();
10
- this.attachment = input.required();
11
- this.partId = input(undefined);
12
- this.referenceMap = input(undefined);
13
- this.images = input([]);
14
- this.pages = input([]);
15
- this.openDocument = output();
16
- this.openPreview = output();
17
- this.modalTpl = viewChild("modal");
18
- this.modalRef = signal({});
19
- this.groupedImagesIds = computed(() => {
20
- // Suppose images() returns an array like ['1.1.1', '1.1.2', '1.1.3']
21
- const groups = {};
22
- for (const id of this.images()) {
23
- const parts = id.split(".").map(Number);
24
- if (parts.length < 3)
25
- continue;
26
- const groupKey = parts[1].toString();
27
- if (!groups[groupKey])
28
- groups[groupKey] = [];
29
- groups[groupKey].push(parts[2]);
30
- }
31
- return groups;
32
- });
33
- this.groupedPagesIds = computed(() => {
34
- // Suppose images() returns an array like ['1.1', '1.2', '1.3']
35
- const groups = {};
36
- for (const id of this.pages()) {
37
- const parts = id.split(".").map(Number);
38
- const groupKey = parts[0].toString();
39
- if (!groups[groupKey])
40
- groups[groupKey] = [];
41
- groups[groupKey].push(parts[1]);
42
- }
43
- return groups;
44
- });
45
- this.findImage = (arr, number) => arr.find((p) => p.imageNumber === number);
46
- this.findPage = (arr, number) => arr.find((p) => p.pageNumber === number);
47
- }
48
- get parts() {
49
- if (!this.attachment())
50
- return [];
51
- return this.attachment().parts.filter((part) => (!this.partId() || part.partId === this.partId()) && !!part.text);
52
- }
53
- expandAttachment() {
54
- if (this.partId())
55
- return;
56
- this.attachment()["$expanded"] = !this.attachment()["$expanded"];
57
- }
58
- modalClicked(ref) {
59
- this.modalRef.set(ref);
60
- this.modalTpl()?.nativeElement?.showModal();
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatReferenceComponent, isStandalone: true, selector: "sq-chat-reference", inputs: { reference: { classPropertyName: "reference", publicName: "reference", isSignal: true, isRequired: true, transformFunction: null }, attachment: { classPropertyName: "attachment", publicName: "attachment", isSignal: true, isRequired: true, transformFunction: null }, partId: { classPropertyName: "partId", publicName: "partId", isSignal: true, isRequired: false, transformFunction: null }, referenceMap: { classPropertyName: "referenceMap", publicName: "referenceMap", isSignal: true, isRequired: false, transformFunction: null }, images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: false, transformFunction: null }, pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview" }, providers: [provideTranslocoScope("chat-reference")], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [sqTooltip]=\"!partId() ? ('chatReference.previewDocument' | transloco) : ''\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [sqTooltip]=\"!partId() ? ('chatReference.openDocument' | transloco) : ''\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId]; track $index) { \n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n \n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{display:block}:host.expanded,:host:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}sq-format-icon{margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem);color:var(--ast-secondary-color, #FF732E)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferenceComponent, decorators: [{
66
- type: Component,
67
- args: [{ selector: "sq-chat-reference", standalone: true, imports: [
68
- CommonModule,
69
- FormatIconComponent,
70
- TooltipDirective,
71
- TranslocoPipe,
72
- ], providers: [provideTranslocoScope("chat-reference")], template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [sqTooltip]=\"!partId() ? ('chatReference.previewDocument' | transloco) : ''\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [sqTooltip]=\"!partId() ? ('chatReference.openDocument' | transloco) : ''\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId]; track $index) { \n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n \n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{display:block}:host.expanded,:host:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}sq-format-icon{margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem);color:var(--ast-secondary-color, #FF732E)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n"] }]
73
- }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1yZWZlcmVuY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC1yZWZlcmVuY2UvY2hhdC1yZWZlcmVuY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC1yZWZlcmVuY2UvY2hhdC1yZWZlcmVuY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUVSLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBZ0JoRSxNQUFNLE9BQU8sc0JBQXNCO0lBYm5DO1FBY1csY0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNyQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBeUIsQ0FBQztRQUNyRCxXQUFNLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUM5QyxpQkFBWSxHQUFHLEtBQUssQ0FDM0IsU0FBUyxDQUNWLENBQUM7UUFDTyxXQUFNLEdBQUcsS0FBSyxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLFVBQUssR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFNUIsaUJBQVksR0FBRyxNQUFNLEVBQXlCLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxNQUFNLEVBQXlCLENBQUM7UUFFOUMs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QztJQUVELFlBQVksQ0FBQyxHQUFRO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDOUMsQ0FBQzsrR0EvRFUsc0JBQXNCO21HQUF0QixzQkFBc0IsdTVCQUZ0QixDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUMsNklDM0J0RCw4cUdBNkZBLDR4SER2RUksWUFBWSwrQkFDWixtQkFBbUIsa0ZBQ25CLGdCQUFnQixnTUFDaEIsYUFBYTs7NEZBSUosc0JBQXNCO2tCQWJsQyxTQUFTOytCQUNFLG1CQUFtQixjQUdqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsYUFBYTtxQkFDZCxhQUNVLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEVsZW1lbnRSZWYsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUgfSBmcm9tIFwiQGpzdmVyc2UvdHJhbnNsb2NvXCI7XG5cbmltcG9ydCB7IEZvcm1hdEljb25Db21wb25lbnQgfSBmcm9tIFwiLi4vZm9ybWF0LWljb24vZm9ybWF0LWljb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSBcIi4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IENoYXRDb250ZXh0QXR0YWNobWVudCwgRG9jdW1lbnRQYXJ0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzcS1jaGF0LXJlZmVyZW5jZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NoYXQtcmVmZXJlbmNlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jaGF0LXJlZmVyZW5jZS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3JtYXRJY29uQ29tcG9uZW50LFxuICAgIFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgVHJhbnNsb2NvUGlwZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKFwiY2hhdC1yZWZlcmVuY2VcIildLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0UmVmZXJlbmNlQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgcmVmZXJlbmNlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBhdHRhY2htZW50ID0gaW5wdXQucmVxdWlyZWQ8Q2hhdENvbnRleHRBdHRhY2htZW50PigpO1xuICByZWFkb25seSBwYXJ0SWQgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHJlZmVyZW5jZU1hcCA9IGlucHV0PE1hcDxzdHJpbmcsIENoYXRDb250ZXh0QXR0YWNobWVudD4gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICByZWFkb25seSBpbWFnZXMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xuICByZWFkb25seSBwYWdlcyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG5cbiAgcmVhZG9ubHkgb3BlbkRvY3VtZW50ID0gb3V0cHV0PENoYXRDb250ZXh0QXR0YWNobWVudD4oKTtcbiAgcmVhZG9ubHkgb3BlblByZXZpZXcgPSBvdXRwdXQ8Q2hhdENvbnRleHRBdHRhY2htZW50PigpO1xuXG4gIHJlYWRvbmx5IG1vZGFsVHBsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpYWxvZ0VsZW1lbnQ+PihcIm1vZGFsXCIpO1xuXG4gIHJlYWRvbmx5IG1vZGFsUmVmID0gc2lnbmFsPGFueT4oe30pO1xuXG4gIHJlYWRvbmx5IGdyb3VwZWRJbWFnZXNJZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gU3VwcG9zZSBpbWFnZXMoKSByZXR1cm5zIGFuIGFycmF5IGxpa2UgWycxLjEuMScsICcxLjEuMicsICcxLjEuMyddXG4gICAgY29uc3QgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRoaXMuaW1hZ2VzKCkpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSBwYXJ0c1sxXS50b1N0cmluZygpO1xuICAgICAgaWYgKCFncm91cHNbZ3JvdXBLZXldKSBncm91cHNbZ3JvdXBLZXldID0gW107XG4gICAgICBncm91cHNbZ3JvdXBLZXldLnB1c2gocGFydHNbMl0pO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9KTtcbiAgcmVhZG9ubHkgZ3JvdXBlZFBhZ2VzSWRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIFN1cHBvc2UgaW1hZ2VzKCkgcmV0dXJucyBhbiBhcnJheSBsaWtlIFsnMS4xJywgJzEuMicsICcxLjMnXVxuICAgIGNvbnN0IGdyb3VwczogUmVjb3JkPHN0cmluZywgbnVtYmVyW10+ID0ge307XG4gICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLnBhZ2VzKCkpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSBwYXJ0c1swXS50b1N0cmluZygpO1xuICAgICAgaWYgKCFncm91cHNbZ3JvdXBLZXldKSBncm91cHNbZ3JvdXBLZXldID0gW107XG4gICAgICBncm91cHNbZ3JvdXBLZXldLnB1c2gocGFydHNbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cHM7XG4gIH0pO1xuXG4gIGdldCBwYXJ0cygpOiBEb2N1bWVudFBhcnRbXSB7XG4gICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQoKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLmF0dGFjaG1lbnQoKS5wYXJ0cy5maWx0ZXIoXG4gICAgICAocGFydCkgPT4gKCF0aGlzLnBhcnRJZCgpIHx8IHBhcnQucGFydElkID09PSB0aGlzLnBhcnRJZCgpKSAmJiAhIXBhcnQudGV4dFxuICAgICk7XG4gIH1cblxuICBmaW5kSW1hZ2UgPSAoYXJyOiBhbnlbXSwgbnVtYmVyOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQgPT5cbiAgICBhcnIuZmluZCgocCkgPT4gcC5pbWFnZU51bWJlciA9PT0gbnVtYmVyKTtcblxuICBmaW5kUGFnZSA9IChhcnI6IGFueVtdLCBudW1iZXI6IG51bWJlcik6IGFueSB8IHVuZGVmaW5lZCA9PlxuICAgIGFyci5maW5kKChwKSA9PiBwLnBhZ2VOdW1iZXIgPT09IG51bWJlcik7XG5cbiAgZXhwYW5kQXR0YWNobWVudCgpIHtcbiAgICBpZiAodGhpcy5wYXJ0SWQoKSkgcmV0dXJuO1xuICAgIHRoaXMuYXR0YWNobWVudCgpW1wiJGV4cGFuZGVkXCJdID0gIXRoaXMuYXR0YWNobWVudCgpW1wiJGV4cGFuZGVkXCJdO1xuICB9XG5cbiAgbW9kYWxDbGlja2VkKHJlZjogYW55KSB7XG4gICAgdGhpcy5tb2RhbFJlZi5zZXQocmVmKTtcbiAgICB0aGlzLm1vZGFsVHBsKCk/Lm5hdGl2ZUVsZW1lbnQ/LnNob3dNb2RhbCgpO1xuICB9XG59XG4iLCI8ZGl2IFtjbGFzcy5yZWZlcmVuY2UtdG9vbHRpcF09XCIhIXBhcnRJZCgpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInJlZmVyZW5jZS1kYXRhXCJcbiAgICBbY2xhc3MuZXhwYW5kZWRdPVwiYXR0YWNobWVudCgpWyckZXhwYW5kZWQnXSB8fCAhIXBhcnRJZCgpXCJcbiAgICAoY2xpY2spPVwiZXhwYW5kQXR0YWNobWVudCgpXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwicmVmZXJlbmNlIG1lLTFcIj57eyByZWZlcmVuY2UoKSB9fTwvc3Bhbj5cblxuICAgIDxzcS1mb3JtYXQtaWNvbiBbZXh0ZW5zaW9uXT1cImF0dGFjaG1lbnQoKS5yZWNvcmQuZmlsZWV4dFwiPjwvc3EtZm9ybWF0LWljb24+XG5cbiAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCIgW2lkXT1cIidhdHRhY2htZW50LScgKyBhdHRhY2htZW50KCkucmVjb3JkSWRcIj5cbiAgICAgIHt7IGF0dGFjaG1lbnQoKS5yZWNvcmQudGl0bGUgfX1cbiAgICA8L3NwYW4+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5QcmV2aWV3LmVtaXQoYXR0YWNobWVudCgpKVwiXG4gICAgICBbc3FUb29sdGlwXT1cIiFwYXJ0SWQoKSA/ICgnY2hhdFJlZmVyZW5jZS5wcmV2aWV3RG9jdW1lbnQnIHwgdHJhbnNsb2NvKSA6ICcnXCJcbiAgICAgIGNsYXNzPVwiYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgcC0wIG0tMCBjdXJzb3ItcG9pbnRlciB0ZXh0LWluaGVyaXQgbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZXllXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuXG5cbiAgICBAaWYgKGF0dGFjaG1lbnQoKS5yZWNvcmQudXJsMSB8fCBhdHRhY2htZW50KCkucmVjb3JkLm9yaWdpbmFsVXJsKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuRG9jdW1lbnQuZW1pdChhdHRhY2htZW50KCkpXCJcbiAgICAgICAgW3NxVG9vbHRpcF09XCIhcGFydElkKCkgPyAoJ2NoYXRSZWZlcmVuY2Uub3BlbkRvY3VtZW50JyB8IHRyYW5zbG9jbykgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgcC0wIG0tMCBjdXJzb3ItcG9pbnRlciB0ZXh0LWluaGVyaXQgbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LXVwLXJpZ2h0LWZyb20tc3F1YXJlXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKCEhcGFydElkKCkgfHwgKGF0dGFjaG1lbnQoKVsnJGV4cGFuZGVkJ10gJiYgcGFydHMubGVuZ3RoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJyZWZlcmVuY2UtcGFzc2FnZXNcIj5cbiAgICAgIEBmb3IgKHBhcnQgb2YgcGFydHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgPGRpdiBjbGFzcz1cInJlZmVyZW5jZS1wYXNzYWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVmZXJlbmNlIG1lLTFcIj57eyByZWZlcmVuY2UoKSB9fS57eyBwYXJ0LnBhcnRJZCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEwMCBwZS0yXCIgW2lubmVySFRNTF09XCJwYXJ0LnRleHRcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGZvciAoaW1hZ2VJZCBvZiBncm91cGVkSW1hZ2VzSWRzKClbcGFydC5wYXJ0SWRdOyB0cmFjayAkaW5kZXgpIHsgXG4gICAgICAgIEBsZXQgcmVmID0gcGFydD8uaW1hZ2VzPy5baW1hZ2VJZCAtIDFdO1xuICAgICAgICBAaWYgKHJlZj8udXJsKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJnYXAtMSBtcy0yIG15LTIgaXRlbXMtc3RhcnRcIlxuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogc3RhcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmZXJlbmNlXCIgc3R5bGU9XCJmbGV4LXNocmluazogMDtcIj5cbiAgICAgICAgICAgICAge3sgXCJJbWctXCIgKyByZWZlcmVuY2UoKSArIFwiLlwiICsgcGFydC5wYXJ0SWQgKyBcIi5cIiArIGltYWdlSWQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cInJlZi51cmxcIlxuICAgICAgICAgICAgICBbYWx0XT1cInJlZi5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbENsaWNrZWQocmVmKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIEBmb3IgKHBhZ2VJZCBvZiBncm91cGVkUGFnZXNJZHMoKVtyZWZlcmVuY2UoKV07IHRyYWNrICRpbmRleCkge1xuICAgICAgQGxldCByZWYgPSBmaW5kUGFnZShyZWZlcmVuY2VNYXAoKT8uZ2V0KHJlZmVyZW5jZSgpKT8ucGFnZXMsIHBhZ2VJZCk7XG4gICAgICBAaWYgKHJlZj8udXJsKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImdhcC0xIG1zLTIgbXktMiBpdGVtcy1zdGFydFwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogc3RhcnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZlcmVuY2VcIiBzdHlsZT1cImZsZXgtc2hyaW5rOiAwO1wiPnt7IFwiUGFnZS1cIiArIHJlZmVyZW5jZSgpICsgXCIuXCIgKyBwYWdlSWQgfX08L3NwYW4+XG5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbc3JjXT1cInJlZi51cmxcIlxuICAgICAgICAgICAgW2FsdF09XCJyZWYuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsQ2xpY2tlZChyZWYpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48ZGlhbG9nICNtb2RhbD5cbiAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsVHBsKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsb3NlKClcIj5cbiAgICA8aSBjbGFzcz1cImZhcyBmYS14bWFya1wiPjwvaT5cbiAgPC9idXR0b24+XG5cbiAgPGltZyBbc3JjXT1cIm1vZGFsUmVmKCkudXJsXCIgW2FsdF09XCJtb2RhbFJlZigpLmRlc2NyaXB0aW9uXCIgLz5cbjwvZGlhbG9nPlxuIl19
@@ -1,68 +0,0 @@
1
- import { Directive, ElementRef, inject, input } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- export class CopyToClipboardDirective {
4
- constructor() {
5
- this.el = inject((ElementRef));
6
- this.text = input("");
7
- }
8
- onClick() {
9
- if (!this.text()) {
10
- return;
11
- }
12
- // The text is encoded from the markdown-it plugin, so we decode it first
13
- const decodedText = decodeURIComponent(this.text());
14
- if (navigator.clipboard && navigator.clipboard.writeText) {
15
- navigator.clipboard
16
- .writeText(decodedText)
17
- .then(() => {
18
- // Provide visual feedback to the user
19
- const originalHTML = this.el.nativeElement.innerHTML;
20
- this.el.nativeElement.innerHTML =
21
- '<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="M15.5607 3.99999L15.0303 4.53032L6.23744 13.3232C5.55403 14.0066 4.44599 14.0066 3.76257 13.3232L4.2929 12.7929L3.76257 13.3232L0.969676 10.5303L0.439346 9.99999L1.50001 8.93933L2.03034 9.46966L4.82323 12.2626C4.92086 12.3602 5.07915 12.3602 5.17678 12.2626L13.9697 3.46966L14.5 2.93933L15.5607 3.99999Z" fill="currentColor"></path></svg>';
22
- setTimeout(() => {
23
- this.el.nativeElement.innerHTML = originalHTML;
24
- }, 2000);
25
- })
26
- .catch((err) => {
27
- console.error("Failed to copy text: ", err);
28
- });
29
- }
30
- else {
31
- // Fallback for older browsers
32
- const textarea = document.createElement("textarea");
33
- textarea.value = decodedText;
34
- textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in MS Edge.
35
- textarea.style.opacity = "0";
36
- document.body.appendChild(textarea);
37
- textarea.focus();
38
- textarea.select();
39
- try {
40
- document.execCommand("copy");
41
- // Provide visual feedback to the user
42
- const originalHTML = this.el.nativeElement.innerHTML;
43
- this.el.nativeElement.innerHTML =
44
- '<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="M15.5607 3.99999L15.0303 4.53032L6.23744 13.3232C5.55403 14.0066 4.44599 14.0066 3.76257 13.3232L4.2929 12.7929L3.76257 13.3232L0.969676 10.5303L0.439346 9.99999L1.50001 8.93933L2.03034 9.46966L4.82323 12.2626C4.92086 12.3602 5.07915 12.3602 5.17678 12.2626L13.9697 3.46966L14.5 2.93933L15.5607 3.99999Z" fill="currentColor"></path></svg>';
45
- setTimeout(() => {
46
- this.el.nativeElement.innerHTML = originalHTML;
47
- }, 2000);
48
- }
49
- catch (err) {
50
- console.error("Fallback: Oops, unable to copy", err);
51
- }
52
- document.body.removeChild(textarea);
53
- }
54
- }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopyToClipboardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
56
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: CopyToClipboardDirective, isStandalone: true, selector: "[copy-to-clipboard]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopyToClipboardDirective, decorators: [{
59
- type: Directive,
60
- args: [{
61
- selector: "[copy-to-clipboard]",
62
- standalone: true,
63
- host: {
64
- "(click)": "onClick()",
65
- },
66
- }]
67
- }] });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS10by1jbGlwYm9hcmQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZGlyZWN0aXZlcy9jb3B5LXRvLWNsaXBib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTckUsTUFBTSxPQUFPLHdCQUF3QjtJQVByQztRQVFVLE9BQUUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztRQUV0QyxTQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBaUR6QjtJQS9DQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBELElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxTQUFTO2lCQUNoQixTQUFTLENBQUMsV0FBVyxDQUFDO2lCQUN0QixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULHNDQUFzQztnQkFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTO29CQUM3QixzaEJBQXNoQixDQUFDO2dCQUN6aEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO2dCQUNqRCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sOEJBQThCO1lBQzlCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDN0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsa0RBQWtEO1lBQ3JGLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQztnQkFDSCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixzQ0FBc0M7Z0JBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUztvQkFDN0Isc2hCQUFzaEIsQ0FBQztnQkFDemhCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztnQkFDakQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7K0dBbkRVLHdCQUF3QjttR0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQVBwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLFdBQVc7cUJBQ3ZCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIltjb3B5LXRvLWNsaXBib2FyZF1cIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGhvc3Q6IHtcclxuICAgIFwiKGNsaWNrKVwiOiBcIm9uQ2xpY2soKVwiLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3B5VG9DbGlwYm9hcmREaXJlY3RpdmUge1xyXG4gIHByaXZhdGUgZWwgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xyXG5cclxuICBwdWJsaWMgdGV4dCA9IGlucHV0KFwiXCIpO1xyXG5cclxuICBvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRleHQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhlIHRleHQgaXMgZW5jb2RlZCBmcm9tIHRoZSBtYXJrZG93bi1pdCBwbHVnaW4sIHNvIHdlIGRlY29kZSBpdCBmaXJzdFxyXG4gICAgY29uc3QgZGVjb2RlZFRleHQgPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy50ZXh0KCkpO1xyXG5cclxuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KSB7XHJcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmRcclxuICAgICAgICAud3JpdGVUZXh0KGRlY29kZWRUZXh0KVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIC8vIFByb3ZpZGUgdmlzdWFsIGZlZWRiYWNrIHRvIHRoZSB1c2VyXHJcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEhUTUwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XHJcbiAgICAgICAgICAgICc8c3ZnIGRhdGEtdGVzdGlkPVwiZ2Vpc3QtaWNvblwiIGhlaWdodD1cIjE2XCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgd2lkdGg9XCIxNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6IGN1cnJlbnRjb2xvcjtcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTUuNTYwNyAzLjk5OTk5TDE1LjAzMDMgNC41MzAzMkw2LjIzNzQ0IDEzLjMyMzJDNS41NTQwMyAxNC4wMDY2IDQuNDQ1OTkgMTQuMDA2NiAzLjc2MjU3IDEzLjMyMzJMNC4yOTI5IDEyLjc5MjlMMy43NjI1NyAxMy4zMjMyTDAuOTY5Njc2IDEwLjUzMDNMMC40MzkzNDYgOS45OTk5OUwxLjUwMDAxIDguOTM5MzNMMi4wMzAzNCA5LjQ2OTY2TDQuODIzMjMgMTIuMjYyNkM0LjkyMDg2IDEyLjM2MDIgNS4wNzkxNSAxMi4zNjAyIDUuMTc2NzggMTIuMjYyNkwxMy45Njk3IDMuNDY5NjZMMTQuNSAyLjkzOTMzTDE1LjU2MDcgMy45OTk5OVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPjwvc3ZnPic7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IG9yaWdpbmFsSFRNTDtcclxuICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIGZvciBvbGRlciBicm93c2Vyc1xyXG4gICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcclxuICAgICAgdGV4dGFyZWEudmFsdWUgPSBkZWNvZGVkVGV4dDtcclxuICAgICAgdGV4dGFyZWEuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7IC8vIFByZXZlbnQgc2Nyb2xsaW5nIHRvIGJvdHRvbSBvZiBwYWdlIGluIE1TIEVkZ2UuXHJcbiAgICAgIHRleHRhcmVhLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAgIHRleHRhcmVhLmZvY3VzKCk7XHJcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgICAvLyBQcm92aWRlIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlclxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsSFRNTCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XHJcbiAgICAgICAgICAnPHN2ZyBkYXRhLXRlc3RpZD1cImdlaXN0LWljb25cIiBoZWlnaHQ9XCIxNlwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIHdpZHRoPVwiMTZcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiBjdXJyZW50Y29sb3I7XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE1LjU2MDcgMy45OTk5OUwxNS4wMzAzIDQuNTMwMzJMNi4yMzc0NCAxMy4zMjMyQzUuNTU0MDMgMTQuMDA2NiA0LjQ0NTk5IDE0LjAwNjYgMy43NjI1NyAxMy4zMjMyTDQuMjkyOSAxMi43OTI5TDMuNzYyNTcgMTMuMzIzMkwwLjk2OTY3NiAxMC41MzAzTDAuNDM5MzQ2IDkuOTk5OTlMMS41MDAwMSA4LjkzOTMzTDIuMDMwMzQgOS40Njk2Nkw0LjgyMzIzIDEyLjI2MjZDNC45MjA4NiAxMi4zNjAyIDUuMDc5MTUgMTIuMzYwMiA1LjE3Njc4IDEyLjI2MjZMMTMuOTY5NyAzLjQ2OTY2TDE0LjUgMi45MzkzM0wxNS41NjA3IDMuOTk5OTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48L3N2Zz4nO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IG9yaWdpbmFsSFRNTDtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhbGxiYWNrOiBPb3BzLCB1bmFibGUgdG8gY29weVwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,14 +0,0 @@
1
- export function markdownItCodeBlockPlugin(md) {
2
- const defaultFenceRenderer = md.renderer.rules.fence;
3
- md.renderer.rules.fence = (tokens, idx, options, env, self) => {
4
- const token = tokens[idx];
5
- const info = token.info ? md.utils.unescapeAll(token.info).trim() : '';
6
- const langName = info.split(/(\s+)/g)[0];
7
- const defaultRendered = defaultFenceRenderer(tokens, idx, options, env, self);
8
- // We add a wrapper and a copy button.
9
- // The button will have an attribute `[copy-to-clipboard]` which can be handled by an Angular directive
10
- // to implement the copy functionality. The code to be copied is passed as an input.
11
- return `<code-block-reference langname="${langName}">${defaultRendered}</code-block-reference>`;
12
- };
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1ibG9jay5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tYXJrZG93bi1pdC1wbHVnaW5zL2NvZGUtYmxvY2sucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxFQUFjO0lBQ3RELE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBTSxDQUFDO0lBRXRELEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM1RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFOUUsc0NBQXNDO1FBQ3RDLHVHQUF1RztRQUN2RyxvRkFBb0Y7UUFDcEYsT0FBTyxtQ0FBbUMsUUFBUSxLQUFLLGVBQWUseUJBQXlCLENBQUM7SUFDbEcsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFya2Rvd25JdENvZGVCbG9ja1BsdWdpbihtZDogTWFya2Rvd25JdCkge1xyXG4gIGNvbnN0IGRlZmF1bHRGZW5jZVJlbmRlcmVyID0gbWQucmVuZGVyZXIucnVsZXMuZmVuY2UhO1xyXG5cclxuICBtZC5yZW5kZXJlci5ydWxlcy5mZW5jZSA9ICh0b2tlbnMsIGlkeCwgb3B0aW9ucywgZW52LCBzZWxmKSA9PiB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpZHhdO1xyXG4gICAgY29uc3QgaW5mbyA9IHRva2VuLmluZm8gPyBtZC51dGlscy51bmVzY2FwZUFsbCh0b2tlbi5pbmZvKS50cmltKCkgOiAnJztcclxuICAgIGNvbnN0IGxhbmdOYW1lID0gaW5mby5zcGxpdCgvKFxccyspL2cpWzBdO1xyXG4gICAgY29uc3QgZGVmYXVsdFJlbmRlcmVkID0gZGVmYXVsdEZlbmNlUmVuZGVyZXIodG9rZW5zLCBpZHgsIG9wdGlvbnMsIGVudiwgc2VsZik7XHJcblxyXG4gICAgLy8gV2UgYWRkIGEgd3JhcHBlciBhbmQgYSBjb3B5IGJ1dHRvbi5cclxuICAgIC8vIFRoZSBidXR0b24gd2lsbCBoYXZlIGFuIGF0dHJpYnV0ZSBgW2NvcHktdG8tY2xpcGJvYXJkXWAgd2hpY2ggY2FuIGJlIGhhbmRsZWQgYnkgYW4gQW5ndWxhciBkaXJlY3RpdmVcclxuICAgIC8vIHRvIGltcGxlbWVudCB0aGUgY29weSBmdW5jdGlvbmFsaXR5LiBUaGUgY29kZSB0byBiZSBjb3BpZWQgaXMgcGFzc2VkIGFzIGFuIGlucHV0LlxyXG4gICAgcmV0dXJuIGA8Y29kZS1ibG9jay1yZWZlcmVuY2UgbGFuZ25hbWU9XCIke2xhbmdOYW1lfVwiPiR7ZGVmYXVsdFJlbmRlcmVkfTwvY29kZS1ibG9jay1yZWZlcmVuY2U+YDtcclxuICB9O1xyXG59XHJcbiJdfQ==
@@ -1,58 +0,0 @@
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
@@ -1,15 +0,0 @@
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=
@@ -1,60 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1yZWZlcmVuY2UucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvbWFya2Rvd24taXQtcGx1Z2lucy9wYWdlLXJlZmVyZW5jZS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztBQUVyRCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsRUFBYztJQUMxRCxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLHlCQUF5QixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDakUsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixDQUFDO1FBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFakUsTUFBTSxXQUFXLEdBQVksRUFBRSxDQUFDO1lBRWhDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxLQUE2QixDQUFDO2dCQUNsQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUUzQixtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFD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ZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSAnbWFya2Rvd24taXQvbGliL3Rva2VuLm1qcyc7XG5cbmV4cG9ydCBjb25zdCBFTUJFRERFRF9QQUdFX05BTUUgPSBcImVtYmVkZGVkLXBhZ2UtcmVmZXJlbmNlXCI7XG5jb25zdCBFTUJFRERFRF9QQUdFX1JFR0VYID0gL1xcWyhQYWdlLShcXGQrXFwuXFxkKykpXFxdL2c7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkl0UGFnZVJlZmVyZW5jZVBsdWdpbihtZDogTWFya2Rvd25JdCkge1xuICBtZC5jb3JlLnJ1bGVyLmFmdGVyKFwiaW5saW5lXCIsIFwiZW1iZWRkZWQtcGFnZS1yZWZlcmVuY2VcIiwgKHN0YXRlKSA9PiB7XG4gICAgY29uc3QgZ2V0RW1iZWRkZWRQYWdlUmVmZXJlbmNlID0gc3RhdGU/LmVudj8uZ2V0RW1iZWRkZWRQYWdlUmVmZXJlbmNlO1xuICAgIHN0YXRlLnRva2Vucy5mb3JFYWNoKChibG9ja1Rva2VuKSA9PiB7XG4gICAgICBpZiAoYmxvY2tUb2tlbi50eXBlICE9PSBcImlubGluZVwiIHx8ICFibG9ja1Rva2VuLmNoaWxkcmVuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuOiBUb2tlbltdID0gW107XG5cbiAgICAgIGJsb2NrVG9rZW4uY2hpbGRyZW4uZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0b2tlbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRva2VuLmNvbnRlbnQ7XG5cbiAgICAgICAgRU1CRURERURfUEFHRV9SRUdFWC5sYXN0SW5kZXggPSAwOyAvLyBSZXNldCByZWdleCBzdGF0ZVxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gRU1CRURERURfUEFHRV9SRUdFWC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHRleHRcbiAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgc3RhdGUuVG9rZW4oXCJ0ZXh0XCIsIFwiXCIsIDApO1xuICAgICAgICAgICAgdC5jb250ZW50ID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2godCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGVtYmVkZGVkIHBhZ2UgcmVmZXJlbmNlIHRva2VuXG4gICAgICAgICAgY29uc3QgcmVmVG9rZW4gPSBuZXcgc3RhdGUuVG9rZW4oRU1CRURERURfUEFHRV9OQU1FLCBcIlwiLCAwKTtcbiAgICAgICAgICByZWZUb2tlbi5jb250ZW50ID0gbWF0Y2hbMl07IC8vIGUuZy4sIFwiMS4yXCJcbiAgICAgICAgICByZWZUb2tlbi5tZXRhID0geyBmdWxsOiBtYXRjaFsxXSB9OyAvLyBlLmcuLCBcIlBhZ2UtMS4yXCJcbiAgICAgICAgICByZWZUb2tlbi5hdHRycyA9IFtdO1xuICAgICAgICAgIGlmIChnZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBnZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2UobWF0Y2hbMl0pO1xuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgICAgcmVmVG9rZW4uYXR0cnMucHVzaChbJ2F0dGFjaG1lbnQnLCBidG9hKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhdHRhY2htZW50KSkpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2gocmVmVG9rZW4pO1xuXG4gICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdHJhaWxpbmcgdGV4dFxuICAgICAgICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB0ID0gbmV3IHN0YXRlLlRva2VuKFwidGV4dFwiLCBcIlwiLCAwKTtcbiAgICAgICAgICB0LmNvbnRlbnQgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCk7XG4gICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGJsb2NrVG9rZW4uY2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gT3B0aW9uYWw6IHJlbmRlcmVyIGZvciB0aGUgY3VzdG9tIHRva2VuXG4gIG1kLnJlbmRlcmVyLnJ1bGVzW0VNQkVEREVEX1BBR0VfTkFNRV0gPSAodG9rZW5zLCBpZHgpID0+IHtcbiAgICBjb25zdCBwYWdlID0gdG9rZW5zW2lkeF0uY29udGVudDtcbiAgICAvLyBjb25zdCBnZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2UgPSB0b2tlbnNbaWR4XS5tZXRhPy5nZXRFbWJlZGRlZFBhZ2VSZWZlcmVuY2U7XG4gICAgLy8gY29uc3QgYXR0YWNobWVudCA9IGdldEVtYmVkZGVkUGFnZVJlZmVyZW5jZSA/IGdldEVtYmVkZGVkUGFnZVJlZmVyZW5jZShwYWdlKSA6IG51bGw7XG4gICAgY29uc3QgYXR0cnMgPSB0b2tlbnNbaWR4XS5hdHRycyB8fCBbXTtcbiAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0cnNbMF07XG4gICAgcmV0dXJuIGA8cGFnZS1yZWZlcmVuY2UgaWQ9JHtwYWdlfSBhdHRhY2htZW50PSR7YXR0YWNobWVudFsxXX0gY2xhc3M9XCJlbWJlZGRlZC1wYWdlLXJlZlwiPlBhZ2UtJHtwYWdlfTwvcGFnZS1yZWZlcmVuY2U+YDtcbiAgfTtcbn1cbiJdfQ==