@ah-oh/ao-workspaces-design-system 0.0.55 → 0.0.56
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.
|
@@ -6939,8 +6939,7 @@ class ChatMessageComponent {
|
|
|
6939
6939
|
normalisedParts = computed(() => this.parts().map(part => (part.kind === 'error' ? this.toTextPart(part.fallback) : part)), ...(ngDevMode ? [{ debugName: "normalisedParts" }] : /* istanbul ignore next */ []));
|
|
6940
6940
|
router = inject(Router);
|
|
6941
6941
|
/**
|
|
6942
|
-
* Hook for in-app navigation triggered from markdown links.
|
|
6943
|
-
* template via (load) on <markdown>.
|
|
6942
|
+
* Hook for in-app navigation triggered from rendered markdown links.
|
|
6944
6943
|
*/
|
|
6945
6944
|
onMarkdownReady(element) {
|
|
6946
6945
|
this.convertLinks(element);
|
|
@@ -6949,48 +6948,61 @@ class ChatMessageComponent {
|
|
|
6949
6948
|
return { kind: 'text', content: fallback };
|
|
6950
6949
|
}
|
|
6951
6950
|
convertLinks(element) {
|
|
6952
|
-
if (element
|
|
6953
|
-
|
|
6954
|
-
|
|
6955
|
-
|
|
6956
|
-
|
|
6957
|
-
|
|
6958
|
-
|
|
6959
|
-
|
|
6960
|
-
|
|
6961
|
-
|
|
6962
|
-
|
|
6963
|
-
|
|
6964
|
-
|
|
6965
|
-
|
|
6951
|
+
if (!element)
|
|
6952
|
+
return;
|
|
6953
|
+
const currentUrl = new URL(window.location.href);
|
|
6954
|
+
const anchors = Array.from(element.querySelectorAll('a[href]'));
|
|
6955
|
+
for (const anchor of anchors) {
|
|
6956
|
+
if (anchor.dataset['robinRouterLink'] === 'true')
|
|
6957
|
+
continue;
|
|
6958
|
+
const linkUrl = this.parseUrl(anchor.getAttribute('href') ?? '', currentUrl);
|
|
6959
|
+
if (!linkUrl)
|
|
6960
|
+
continue;
|
|
6961
|
+
if (currentUrl.host !== linkUrl.host)
|
|
6962
|
+
continue;
|
|
6963
|
+
anchor.dataset['robinRouterLink'] = 'true';
|
|
6964
|
+
anchor.addEventListener('click', event => {
|
|
6965
|
+
void this.router.navigateByUrl(`${linkUrl.pathname}${linkUrl.search}`);
|
|
6966
|
+
event.stopPropagation();
|
|
6967
|
+
event.preventDefault();
|
|
6968
|
+
});
|
|
6966
6969
|
}
|
|
6967
|
-
|
|
6968
|
-
|
|
6970
|
+
}
|
|
6971
|
+
parseUrl(value, base) {
|
|
6972
|
+
try {
|
|
6973
|
+
return new URL(value, base);
|
|
6974
|
+
}
|
|
6975
|
+
catch {
|
|
6976
|
+
return undefined;
|
|
6969
6977
|
}
|
|
6970
6978
|
}
|
|
6971
6979
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChatMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6972
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChatMessageComponent, isStandalone: true, selector: "lib-chat-message", inputs: { parts: { classPropertyName: "parts", publicName: "parts", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, showTyping: { classPropertyName: "showTyping", publicName: "showTyping", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"message\" [class.right]=\"side() === 'right'\" [class.left]=\"side() === 'left'\">\n @for (part of normalisedParts(); track $index) {\n @switch (part.kind) {\n @case ('text') {\n <markdown\n
|
|
6980
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChatMessageComponent, isStandalone: true, selector: "lib-chat-message", inputs: { parts: { classPropertyName: "parts", publicName: "parts", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, showTyping: { classPropertyName: "showTyping", publicName: "showTyping", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"message\" [class.right]=\"side() === 'right'\" [class.left]=\"side() === 'left'\">\n @for (part of normalisedParts(); track $index) {\n @switch (part.kind) {\n @case ('text') {\n <div #markdownHost class=\"message__markdown\">\n <markdown\n [data]=\"part.content\"\n (ready)=\"onMarkdownReady(markdownHost)\"\n ></markdown>\n </div>\n }\n @case ('a2ui') {\n <a2ui-v09-surface [surfaceId]=\"part.surface.surfaceId\"></a2ui-v09-surface>\n }\n }\n }\n @if (showTyping()) {\n <div class=\"typing-indicator\">\n <div></div>\n <div></div>\n <div></div>\n </div>\n }\n</div>\n", styles: [".message{padding:12px 14px;border-radius:8px;background-color:#fff;color:var(--color-text-primary, #252525);font-size:14px;line-height:1.45;max-width:430px;position:relative}.message:before{content:\"\";height:0;width:0;position:absolute;bottom:0;border:12px solid;border-color:transparent transparent white transparent}.message.right{margin-left:32px;border-bottom-right-radius:0;align-self:flex-end}.message.right:before{left:auto;right:-12px}.message.left{margin-right:32px;margin-left:0;border-bottom-left-radius:0;align-self:flex-start}.message.left:before{left:-12px;right:auto}.message ::ng-deep markdown p{margin:0 0 10px}.message ::ng-deep markdown p:last-child{margin-bottom:0}.message .message__markdown{display:block}.message ::ng-deep a2ui-v09-surface{display:block;margin-top:8px}.message ::ng-deep .a2ui-text h1,.message ::ng-deep .a2ui-text h2,.message ::ng-deep .a2ui-text h3,.message ::ng-deep .a2ui-text h4{font-weight:600}.message .typing-indicator{margin:24px auto;display:flex;justify-content:center;flex-direction:row;gap:1px}.message .typing-indicator div{width:9px;height:9px;border-radius:50%;background-color:var(--color-grey-mid)}.message .typing-indicator div:nth-child(1){animation:.9s blink infinite 0s}.message .typing-indicator div:nth-child(2){animation:.9s blink infinite .3s}.message .typing-indicator div:nth-child(3){animation:.9s blink infinite .6s}@keyframes blink{0%{opacity:.5;transform:scaleY(1),translateY(0)}20%{transform:scaleY(.4) translateY(6px)}50%{opacity:1;transform:scaleY(1) translateY(0)}to{opacity:.5}}\n"], dependencies: [{ kind: "component", type: MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: SurfaceComponent, selector: "a2ui-v09-surface", inputs: ["surfaceId", "dataContextPath"] }] });
|
|
6973
6981
|
}
|
|
6974
6982
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChatMessageComponent, decorators: [{
|
|
6975
6983
|
type: Component,
|
|
6976
|
-
args: [{ selector: 'lib-chat-message', imports: [MarkdownComponent, SurfaceComponent], template: "<div class=\"message\" [class.right]=\"side() === 'right'\" [class.left]=\"side() === 'left'\">\n @for (part of normalisedParts(); track $index) {\n @switch (part.kind) {\n @case ('text') {\n <markdown\n
|
|
6984
|
+
args: [{ selector: 'lib-chat-message', imports: [MarkdownComponent, SurfaceComponent], template: "<div class=\"message\" [class.right]=\"side() === 'right'\" [class.left]=\"side() === 'left'\">\n @for (part of normalisedParts(); track $index) {\n @switch (part.kind) {\n @case ('text') {\n <div #markdownHost class=\"message__markdown\">\n <markdown\n [data]=\"part.content\"\n (ready)=\"onMarkdownReady(markdownHost)\"\n ></markdown>\n </div>\n }\n @case ('a2ui') {\n <a2ui-v09-surface [surfaceId]=\"part.surface.surfaceId\"></a2ui-v09-surface>\n }\n }\n }\n @if (showTyping()) {\n <div class=\"typing-indicator\">\n <div></div>\n <div></div>\n <div></div>\n </div>\n }\n</div>\n", styles: [".message{padding:12px 14px;border-radius:8px;background-color:#fff;color:var(--color-text-primary, #252525);font-size:14px;line-height:1.45;max-width:430px;position:relative}.message:before{content:\"\";height:0;width:0;position:absolute;bottom:0;border:12px solid;border-color:transparent transparent white transparent}.message.right{margin-left:32px;border-bottom-right-radius:0;align-self:flex-end}.message.right:before{left:auto;right:-12px}.message.left{margin-right:32px;margin-left:0;border-bottom-left-radius:0;align-self:flex-start}.message.left:before{left:-12px;right:auto}.message ::ng-deep markdown p{margin:0 0 10px}.message ::ng-deep markdown p:last-child{margin-bottom:0}.message .message__markdown{display:block}.message ::ng-deep a2ui-v09-surface{display:block;margin-top:8px}.message ::ng-deep .a2ui-text h1,.message ::ng-deep .a2ui-text h2,.message ::ng-deep .a2ui-text h3,.message ::ng-deep .a2ui-text h4{font-weight:600}.message .typing-indicator{margin:24px auto;display:flex;justify-content:center;flex-direction:row;gap:1px}.message .typing-indicator div{width:9px;height:9px;border-radius:50%;background-color:var(--color-grey-mid)}.message .typing-indicator div:nth-child(1){animation:.9s blink infinite 0s}.message .typing-indicator div:nth-child(2){animation:.9s blink infinite .3s}.message .typing-indicator div:nth-child(3){animation:.9s blink infinite .6s}@keyframes blink{0%{opacity:.5;transform:scaleY(1),translateY(0)}20%{transform:scaleY(.4) translateY(6px)}50%{opacity:1;transform:scaleY(1) translateY(0)}to{opacity:.5}}\n"] }]
|
|
6977
6985
|
}], propDecorators: { parts: [{ type: i0.Input, args: [{ isSignal: true, alias: "parts", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], showTyping: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTyping", required: false }] }] } });
|
|
6978
6986
|
|
|
6979
6987
|
class RobinChatService {
|
|
6980
6988
|
http = inject(HttpClient);
|
|
6981
6989
|
baseUrl = inject(ROBIN_API_BASE_URL);
|
|
6990
|
+
requestOptions = { withCredentials: true };
|
|
6982
6991
|
sendMessage(req) {
|
|
6983
|
-
return firstValueFrom(this.http.post(this.url('/chat/message'), req));
|
|
6992
|
+
return firstValueFrom(this.http.post(this.url('/chat/message'), req, this.requestOptions));
|
|
6984
6993
|
}
|
|
6985
6994
|
sendAction(req) {
|
|
6986
|
-
return firstValueFrom(this.http.post(this.url('/chat/action'), req));
|
|
6995
|
+
return firstValueFrom(this.http.post(this.url('/chat/action'), req, this.requestOptions));
|
|
6987
6996
|
}
|
|
6988
6997
|
listThreads(product) {
|
|
6989
6998
|
const params = new HttpParams().set('product', product);
|
|
6990
|
-
return firstValueFrom(this.http.get(this.url('/chat/threads'), {
|
|
6999
|
+
return firstValueFrom(this.http.get(this.url('/chat/threads'), {
|
|
7000
|
+
...this.requestOptions,
|
|
7001
|
+
params,
|
|
7002
|
+
}));
|
|
6991
7003
|
}
|
|
6992
7004
|
loadHistory(threadId) {
|
|
6993
|
-
return firstValueFrom(this.http.get(this.url(`/chat/history/${threadId}`)));
|
|
7005
|
+
return firstValueFrom(this.http.get(this.url(`/chat/history/${threadId}`), this.requestOptions));
|
|
6994
7006
|
}
|
|
6995
7007
|
url(path) {
|
|
6996
7008
|
return `${this.baseUrl}${path}`;
|