@ah-oh/ao-workspaces-design-system 0.0.52 → 0.0.54
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.
|
@@ -5146,7 +5146,8 @@ class WorkspaceNavbarService {
|
|
|
5146
5146
|
companies = new BehaviorSubject([]);
|
|
5147
5147
|
companies$ = this.companies.asObservable();
|
|
5148
5148
|
companiesSignal = toSignal(this.companies$);
|
|
5149
|
-
activeAppId;
|
|
5149
|
+
activeAppId = new BehaviorSubject(undefined);
|
|
5150
|
+
activeAppIdSignal = toSignal(this.activeAppId.asObservable());
|
|
5150
5151
|
loginUrl = 'https://login.ah-oh.com';
|
|
5151
5152
|
production = true;
|
|
5152
5153
|
preserveRedirectUrl = true;
|
|
@@ -5154,10 +5155,10 @@ class WorkspaceNavbarService {
|
|
|
5154
5155
|
return this.session.value;
|
|
5155
5156
|
}
|
|
5156
5157
|
get currentAppId() {
|
|
5157
|
-
return this.activeAppId;
|
|
5158
|
+
return this.activeAppId.value;
|
|
5158
5159
|
}
|
|
5159
5160
|
init(config) {
|
|
5160
|
-
this.activeAppId
|
|
5161
|
+
this.activeAppId.next(config.appId);
|
|
5161
5162
|
this.production = config.production;
|
|
5162
5163
|
this.preserveRedirectUrl = config.preserveRedirectUrl ?? true;
|
|
5163
5164
|
if (config.loginUrl) {
|
|
@@ -5179,6 +5180,7 @@ class WorkspaceNavbarService {
|
|
|
5179
5180
|
...res,
|
|
5180
5181
|
isExternalUser: res.companyId !== res.enabledCompanyId,
|
|
5181
5182
|
};
|
|
5183
|
+
this.activeAppId.next(userSession.appId ?? userSession.product ?? config.appId);
|
|
5182
5184
|
this.session.next(userSession);
|
|
5183
5185
|
this.loadWorkspaceApps().subscribe();
|
|
5184
5186
|
this.findEnabledCompanies().subscribe();
|
|
@@ -5196,21 +5198,11 @@ class WorkspaceNavbarService {
|
|
|
5196
5198
|
}
|
|
5197
5199
|
loadWorkspaceApps() {
|
|
5198
5200
|
return this.http.get(WorkspaceNavbarService.WORKSPACE_APPS_URL).pipe(map$1(response => {
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
}));
|
|
5205
|
-
response = {
|
|
5206
|
-
...response,
|
|
5207
|
-
products: apps.filter(a => response.products.some(p => p.appId === a.appId)),
|
|
5208
|
-
customApps: apps.filter(a => response.customApps.some(c => c.appId === a.appId)),
|
|
5209
|
-
};
|
|
5210
|
-
}
|
|
5211
|
-
this.workspaceApps.next(apps);
|
|
5212
|
-
this.workspaceAppsResponse.next(response);
|
|
5213
|
-
return apps;
|
|
5201
|
+
const normalizedResponse = this.normalizeWorkspaceAppsResponse(response);
|
|
5202
|
+
const workspaceApps = [...normalizedResponse.products, ...normalizedResponse.customApps];
|
|
5203
|
+
this.workspaceApps.next(workspaceApps);
|
|
5204
|
+
this.workspaceAppsResponse.next(normalizedResponse);
|
|
5205
|
+
return workspaceApps;
|
|
5214
5206
|
}), catchError(err => {
|
|
5215
5207
|
console.error('Failed to load workspace apps:', err);
|
|
5216
5208
|
return of([]);
|
|
@@ -5230,14 +5222,16 @@ class WorkspaceNavbarService {
|
|
|
5230
5222
|
if (!session) {
|
|
5231
5223
|
throw new Error('Session is not initialized.');
|
|
5232
5224
|
}
|
|
5233
|
-
const appId = args.appId ?? this.
|
|
5225
|
+
const appId = args.appId ?? this.currentAppId ?? 'admin';
|
|
5234
5226
|
const companyId = args.companyId ?? session.enabledCompanyId;
|
|
5235
5227
|
return this.http
|
|
5236
5228
|
.get(`/auth-api/users/new-company/${companyId}/${session.userId}/${appId}`)
|
|
5237
5229
|
.pipe(tap(({ jwtKey }) => {
|
|
5238
5230
|
const app = this.workspaceApps.value.find(a => a.appId === appId);
|
|
5239
|
-
const
|
|
5240
|
-
|
|
5231
|
+
const targetUrl = app
|
|
5232
|
+
? this.getRuntimeBaseUrl(app, args.isTesting)
|
|
5233
|
+
: window.location.origin;
|
|
5234
|
+
window.location.href = this.buildJwtRedirectUrl({ targetUrl, jwtKey });
|
|
5241
5235
|
}));
|
|
5242
5236
|
}
|
|
5243
5237
|
switchApp(appId, isTesting = false) {
|
|
@@ -5252,15 +5246,18 @@ class WorkspaceNavbarService {
|
|
|
5252
5246
|
return this.http
|
|
5253
5247
|
.get(`/auth-api/users/new-company/${session.enabledCompanyId}/${session.userId}/${appId}`)
|
|
5254
5248
|
.pipe(tap(({ jwtKey }) => {
|
|
5255
|
-
const
|
|
5256
|
-
window.location.href =
|
|
5249
|
+
const targetUrl = this.getRuntimeBaseUrl(app, isTesting);
|
|
5250
|
+
window.location.href = this.buildJwtRedirectUrl({ targetUrl, jwtKey });
|
|
5257
5251
|
}));
|
|
5258
5252
|
}
|
|
5259
5253
|
createCompany() {
|
|
5260
5254
|
return this.http
|
|
5261
5255
|
.get(`${WorkspaceNavbarService.AUTH_BASE_URL}/jwt-key`)
|
|
5262
5256
|
.pipe(tap(({ jwtKey }) => {
|
|
5263
|
-
window.location.href =
|
|
5257
|
+
window.location.href = this.buildLoginPathUrl('create-company', {
|
|
5258
|
+
product: this.currentAppId,
|
|
5259
|
+
jwtKey,
|
|
5260
|
+
});
|
|
5264
5261
|
}));
|
|
5265
5262
|
}
|
|
5266
5263
|
signOut() {
|
|
@@ -5271,13 +5268,14 @@ class WorkspaceNavbarService {
|
|
|
5271
5268
|
}));
|
|
5272
5269
|
}
|
|
5273
5270
|
buildLoginUrl() {
|
|
5274
|
-
|
|
5271
|
+
const url = new URL(this.loginUrl, window.location.origin);
|
|
5272
|
+
url.searchParams.set('product', this.currentAppId ?? 'admin');
|
|
5275
5273
|
if (this.preserveRedirectUrl) {
|
|
5276
5274
|
const currentUrl = new URL(window.location.href);
|
|
5277
5275
|
currentUrl.searchParams.delete('jwtKey');
|
|
5278
|
-
url
|
|
5276
|
+
url.searchParams.set('redirectUrl', currentUrl.toString());
|
|
5279
5277
|
}
|
|
5280
|
-
return url;
|
|
5278
|
+
return url.toString();
|
|
5281
5279
|
}
|
|
5282
5280
|
replaceSessionParams(url) {
|
|
5283
5281
|
const session = this.session.value;
|
|
@@ -5290,7 +5288,7 @@ class WorkspaceNavbarService {
|
|
|
5290
5288
|
const app = this.workspaceApps.value.find(a => a.appId === appId);
|
|
5291
5289
|
if (!app)
|
|
5292
5290
|
return undefined;
|
|
5293
|
-
return
|
|
5291
|
+
return this.getRuntimeBaseUrl(app, isTesting);
|
|
5294
5292
|
}
|
|
5295
5293
|
getCompanyLogo(companyId) {
|
|
5296
5294
|
return this.http.get(`${WorkspaceNavbarService.COMPANY_URL}/${companyId}/logo`);
|
|
@@ -5308,6 +5306,45 @@ class WorkspaceNavbarService {
|
|
|
5308
5306
|
};
|
|
5309
5307
|
return devUrls[appId] ?? `http://localhost:4200`;
|
|
5310
5308
|
}
|
|
5309
|
+
normalizeWorkspaceAppsResponse(response) {
|
|
5310
|
+
if (this.production) {
|
|
5311
|
+
return response;
|
|
5312
|
+
}
|
|
5313
|
+
return {
|
|
5314
|
+
...response,
|
|
5315
|
+
products: response.products.map(app => this.withRuntimeBaseUrl(app)),
|
|
5316
|
+
customApps: response.customApps.map(app => this.withRuntimeBaseUrl(app)),
|
|
5317
|
+
};
|
|
5318
|
+
}
|
|
5319
|
+
withRuntimeBaseUrl(app) {
|
|
5320
|
+
return {
|
|
5321
|
+
...app,
|
|
5322
|
+
baseUrl: this.getRuntimeBaseUrl(app),
|
|
5323
|
+
};
|
|
5324
|
+
}
|
|
5325
|
+
getRuntimeBaseUrl(app, isTesting = false) {
|
|
5326
|
+
if (isTesting && app.testingUrl) {
|
|
5327
|
+
return app.testingUrl;
|
|
5328
|
+
}
|
|
5329
|
+
if (!this.production) {
|
|
5330
|
+
return app.testingUrl ?? this.getLegacyDevUrl(app.appId);
|
|
5331
|
+
}
|
|
5332
|
+
return app.baseUrl;
|
|
5333
|
+
}
|
|
5334
|
+
buildJwtRedirectUrl(arg) {
|
|
5335
|
+
const url = new URL(arg.targetUrl, window.location.origin);
|
|
5336
|
+
url.searchParams.set('jwtKey', arg.jwtKey);
|
|
5337
|
+
return url.toString();
|
|
5338
|
+
}
|
|
5339
|
+
buildLoginPathUrl(path, params) {
|
|
5340
|
+
const baseUrl = this.loginUrl.endsWith('/') ? this.loginUrl : `${this.loginUrl}/`;
|
|
5341
|
+
const url = new URL(path, baseUrl);
|
|
5342
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
5343
|
+
if (value)
|
|
5344
|
+
url.searchParams.set(key, value);
|
|
5345
|
+
});
|
|
5346
|
+
return url.toString();
|
|
5347
|
+
}
|
|
5311
5348
|
getEnabledApps() {
|
|
5312
5349
|
const session = this.session.value;
|
|
5313
5350
|
return session?.enabledApps ?? this.buildLegacyEnabledApps(session);
|
|
@@ -7026,6 +7063,7 @@ class ChatComponent {
|
|
|
7026
7063
|
activeRequest = signal(false, ...(ngDevMode ? [{ debugName: "activeRequest" }] : /* istanbul ignore next */ []));
|
|
7027
7064
|
showHistory = signal(false, ...(ngDevMode ? [{ debugName: "showHistory" }] : /* istanbul ignore next */ []));
|
|
7028
7065
|
threads = signal(undefined, ...(ngDevMode ? [{ debugName: "threads" }] : /* istanbul ignore next */ []));
|
|
7066
|
+
searchType;
|
|
7029
7067
|
closed = new EventEmitter();
|
|
7030
7068
|
chat = inject(RobinChatService);
|
|
7031
7069
|
renderer = inject(A2uiRendererService);
|
|
@@ -7033,9 +7071,11 @@ class ChatComponent {
|
|
|
7033
7071
|
authService = inject(WorkspaceNavbarService);
|
|
7034
7072
|
destroyRef = inject(DestroyRef);
|
|
7035
7073
|
product;
|
|
7074
|
+
handbookType;
|
|
7036
7075
|
currentThreadId;
|
|
7037
7076
|
ngOnInit() {
|
|
7038
7077
|
this.product = this.resolveProduct();
|
|
7078
|
+
this.handbookType = this.product;
|
|
7039
7079
|
this.dispatcher.responses$
|
|
7040
7080
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
7041
7081
|
.subscribe(response => this.handleResponse(response));
|
|
@@ -7088,7 +7128,12 @@ class ChatComponent {
|
|
|
7088
7128
|
for (const turn of projected) {
|
|
7089
7129
|
for (const part of turn.parts) {
|
|
7090
7130
|
if (part.kind === 'a2ui') {
|
|
7091
|
-
|
|
7131
|
+
try {
|
|
7132
|
+
this.renderer.processMessages(part.surface.messages);
|
|
7133
|
+
}
|
|
7134
|
+
catch (error) {
|
|
7135
|
+
console.warn('[RobinChat] A2UI history render failed', error);
|
|
7136
|
+
}
|
|
7092
7137
|
}
|
|
7093
7138
|
}
|
|
7094
7139
|
}
|
|
@@ -7120,6 +7165,8 @@ class ChatComponent {
|
|
|
7120
7165
|
question: 'Bitte begrüße den User kurz und biete Hilfe an.',
|
|
7121
7166
|
threadId: this.currentThreadId,
|
|
7122
7167
|
product: this.product,
|
|
7168
|
+
handbookType: this.handbookType,
|
|
7169
|
+
type: this.searchType ?? null,
|
|
7123
7170
|
})
|
|
7124
7171
|
.then(response => this.handleResponse(response))
|
|
7125
7172
|
.catch(() => this.handleError());
|
|
@@ -7128,38 +7175,59 @@ class ChatComponent {
|
|
|
7128
7175
|
this.activeRequest.set(true);
|
|
7129
7176
|
this.scrollDown();
|
|
7130
7177
|
void this.chat
|
|
7131
|
-
.sendMessage({
|
|
7178
|
+
.sendMessage({
|
|
7179
|
+
question,
|
|
7180
|
+
threadId: this.currentThreadId,
|
|
7181
|
+
product: this.product,
|
|
7182
|
+
handbookType: this.handbookType,
|
|
7183
|
+
type: this.searchType ?? null,
|
|
7184
|
+
})
|
|
7132
7185
|
.then(response => this.handleResponse(response))
|
|
7133
7186
|
.catch(() => this.handleError());
|
|
7134
7187
|
}
|
|
7135
7188
|
handleResponse(response) {
|
|
7136
7189
|
this.setThreadId(response.threadId);
|
|
7137
|
-
this.
|
|
7138
|
-
|
|
7139
|
-
|
|
7190
|
+
this.tryRetireOldSurfaces();
|
|
7191
|
+
this.appendAssistantTurn(this.processA2uiParts(response.parts));
|
|
7192
|
+
this.threads.set(undefined);
|
|
7193
|
+
this.activeRequest.set(false);
|
|
7194
|
+
}
|
|
7195
|
+
tryRetireOldSurfaces() {
|
|
7196
|
+
try {
|
|
7197
|
+
this.retireOldSurfaces();
|
|
7198
|
+
}
|
|
7199
|
+
catch (error) {
|
|
7200
|
+
console.warn('[RobinChat] A2UI surface retirement failed', error);
|
|
7201
|
+
}
|
|
7202
|
+
}
|
|
7203
|
+
processA2uiParts(parts) {
|
|
7204
|
+
const renderable = [];
|
|
7205
|
+
for (const part of parts) {
|
|
7206
|
+
if (part.kind !== 'a2ui') {
|
|
7207
|
+
renderable.push(part);
|
|
7208
|
+
continue;
|
|
7209
|
+
}
|
|
7210
|
+
try {
|
|
7140
7211
|
this.renderer.processMessages(part.surface.messages);
|
|
7212
|
+
renderable.push(part);
|
|
7213
|
+
}
|
|
7214
|
+
catch (error) {
|
|
7215
|
+
console.warn('[RobinChat] A2UI render failed', error);
|
|
7141
7216
|
}
|
|
7142
7217
|
}
|
|
7143
|
-
|
|
7144
|
-
this.threads.set(undefined);
|
|
7145
|
-
this.activeRequest.set(false);
|
|
7218
|
+
return renderable.length > 0 ? renderable : [{ kind: 'text', content: ERROR_FALLBACK }];
|
|
7146
7219
|
}
|
|
7147
7220
|
/**
|
|
7148
7221
|
* Removes A2UI surfaces from the renderer that belong to older turns and
|
|
7149
7222
|
* strips their `a2ui` parts so the chat history doesn't accumulate stale
|
|
7150
7223
|
* interactive cards as the conversation progresses.
|
|
7151
7224
|
*/
|
|
7152
|
-
retireOldSurfaces(
|
|
7153
|
-
const incoming = new Set(response.parts
|
|
7154
|
-
.filter(part => part.kind === 'a2ui')
|
|
7155
|
-
.map(part => part.surface.surfaceId));
|
|
7225
|
+
retireOldSurfaces() {
|
|
7156
7226
|
const toDelete = [];
|
|
7157
7227
|
const nextTurns = this.turns().map(turn => {
|
|
7158
7228
|
const filtered = turn.parts.filter(part => {
|
|
7159
7229
|
if (part.kind !== 'a2ui')
|
|
7160
7230
|
return true;
|
|
7161
|
-
if (incoming.has(part.surface.surfaceId))
|
|
7162
|
-
return true;
|
|
7163
7231
|
toDelete.push(part.surface.surfaceId);
|
|
7164
7232
|
return false;
|
|
7165
7233
|
});
|
|
@@ -7216,7 +7284,7 @@ class ChatComponent {
|
|
|
7216
7284
|
}
|
|
7217
7285
|
}
|
|
7218
7286
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7219
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChatComponent, isStandalone: true, selector: "lib-chat", outputs: { closed: "closed" }, viewQueries: [{ propertyName: "historyElement", first: true, predicate: ["conversation"], descendants: true }, { propertyName: "textField", first: true, predicate: ["textField"], descendants: true }], ngImport: i0, template: "<div class=\"sidebar\">\n @if (showHistory()) {\n <div class=\"chat-history\">\n <div class=\"header\">\n <h3>Verlauf</h3>\n </div>\n <div class=\"history-items\">\n @if (threads() === undefined) {\n <div class=\"history-empty\">L\u00E4dt\u2026</div>\n } @else if (threads()!.length === 0) {\n <div class=\"history-empty\">Noch keine Gespr\u00E4che.</div>\n }\n @for (item of threads(); track item.threadId) {\n <div class=\"chat-history-item\" (click)=\"openThread(item.threadId)\">\n <div class=\"preview\">{{ item.lastMessage }}</div>\n <div class=\"footer\">\n <div>{{ item.messageCount }} Nachrichten</div>\n <div>{{ item.updatedAt | date: 'dd.MM.yyyy HH:mm' }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <div class=\"chat\">\n <div class=\"header\">\n <button ao-button variant=\"outline\" (click)=\"toggleHistory()\">\n <ao-icon [svg]=\"historyIcon\"></ao-icon>\n </button>\n <h2>Hilfecenter</h2>\n <div class=\"flex\">\n <button ao-button variant=\"outline\" (click)=\"newChat()\">\n <ao-icon [svg]=\"addIcon\"></ao-icon>\n </button>\n <button ao-button variant=\"outline\" (click)=\"showHistory.set(false); closed.emit()\">\n <ao-icon [svg]=\"closeIcon\"></ao-icon>\n </button>\n </div>\n </div>\n <div class=\"conversation-history\" #conversation>\n @for (turn of turns(); track $index) {\n <lib-chat-message\n [parts]=\"turn.parts\"\n [side]=\"turn.role === 'assistant' ? 'left' : 'right'\"\n >\n </lib-chat-message>\n }\n @if (activeRequest()) {\n <lib-chat-message [showTyping]=\"true\" side=\"left\"></lib-chat-message>\n }\n </div>\n\n <div class=\"input\">\n <textarea\n #textField\n rows=\"1\"\n class=\"textarea\"\n [formControl]=\"inputControl\"\n (keydown.enter)=\"send(); $event.stopPropagation(); $event.preventDefault()\"\n (input)=\"setSize()\"\n ></textarea>\n <button ao-button variant=\"primary\" (click)=\"send()\" class=\"send-button\">\n <ao-icon [svg]=\"sendIcon\"></ao-icon>\n </button>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.sidebar{display:flex;flex-direction:row;height:100%;position:relative}.header{background-color:#fff;padding:4px;display:flex;height:50px;flex-direction:row;align-items:center}.header h2,.header h3{margin:0}.header h2{font-size:24px}.header h3{font-size:16px}.chat{display:flex;flex-direction:column;height:100%;width:500px;background-color:#f3f3f3;border-left:1px solid #e9e9e9}.chat .header{justify-content:space-between}.chat .header .flex{display:flex;align-items:center;gap:10px}.conversation-history{--a2ui-color-primary: #212121;--a2ui-color-on-primary: #ffffff;--a2ui-color-secondary: #e9e9e9;--a2ui-color-on-secondary: #212121;--a2ui-color-surface: #ffffff;--a2ui-color-on-background: #212121;--a2ui-color-input: #ffffff;--a2ui-color-on-input: #212121;--a2ui-color-border: #e9e9e9;--a2ui-color-error: #ff004d;--a2ui-text-color: #212121;--a2ui-text-color-text: #212121;--a2ui-text-caption-color: #909090;--a2ui-text-a-color: #ff004d;--a2ui-text-a-font-weight: 600;--a2ui-spacing-xs: 5px;--a2ui-spacing-s: 10px;--a2ui-spacing-m: 15px;--a2ui-spacing-l: 20px;--a2ui-spacing-xl: 25px;--a2ui-row-gap: 12px;--a2ui-column-gap: 12px;--a2ui-list-gap: 8px;--a2ui-list-padding: 0;--a2ui-font-family-title: inherit;--a2ui-font-size-2xl: 28px;--a2ui-font-size-xl: 22px;--a2ui-font-size-l: 18px;--a2ui-font-size-m: 15px;--a2ui-font-size-s: 13px;--a2ui-font-size-xs: 12px;--a2ui-line-height-headings: 1.3;--a2ui-line-height-body: 1.55;--a2ui-label-font-size: 13px;--a2ui-border-width: 1px;--a2ui-border-radius: 8px;--a2ui-card-background: #ffffff;--a2ui-card-border-radius: 12px;--a2ui-card-padding: 20px;--a2ui-card-margin: 0;--a2ui-card-border: none;--a2ui-card-box-shadow: 0 1px 3px rgb(0 0 0 / 6%);--a2ui-button-background: #ffffff;--a2ui-button-border: 1px solid #212121;--a2ui-button-border-radius: 999px;--a2ui-button-padding: 10px 22px;--a2ui-button-margin: 0;--a2ui-button-box-shadow: none;--a2ui-button-font-weight: 600;--a2ui-choicepicker-gap: 10px;--a2ui-choicepicker-padding: 0;--a2ui-choicepicker-checkbox-size: 18px;--a2ui-choicepicker-chip-background: #ffffff;--a2ui-choicepicker-chip-background-selected: #212121;--a2ui-choicepicker-chip-border: 1px solid #212121;--a2ui-choicepicker-chip-border-radius: 999px;--a2ui-choicepicker-chip-padding: 8px 16px;--a2ui-checkbox-background: #ffffff;--a2ui-checkbox-border: 1px solid #212121;--a2ui-checkbox-border-radius: 4px;--a2ui-checkbox-size: 18px;--a2ui-checkbox-gap: 10px;--a2ui-checkbox-label-font-weight: 500;--a2ui-checkbox-margin: 0;--a2ui-textfield-border: 1px solid #e9e9e9;--a2ui-textfield-border-radius: 8px;--a2ui-textfield-padding: 10px 14px;--a2ui-textfield-color-border-focus: #ff004d;--a2ui-textfield-color-error: #ff004d;--a2ui-textfield-label-font-weight: 500;--a2ui-textfield-label-font-size: 13px;--a2ui-divider-spacing: 10px;accent-color:#ff004d}.conversation-history ::ng-deep .a2ui-chip:not(.active){color:#212121}.conversation-history{display:flex;flex-direction:column;gap:16px;padding:20px;flex-grow:1;min-height:0;overflow-y:auto}.conversation-history markdown{display:block}.possible-questions{padding:0 20px 10px;display:flex;flex-wrap:wrap;gap:8px}.possible-questions .question-chip{cursor:pointer;transition:all .2s ease;background-color:#e9e9e9;padding:8px;border-radius:5px}.possible-questions .question-chip:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.input{margin:0 10px 10px;position:relative}.input .textarea{font-family:inherit;z-index:10000;padding:10px 65px 10px 10px;width:100%;box-sizing:border-box;min-height:43px;resize:none}.input .send-button{position:absolute;right:10px;bottom:9px}.chat-history{background-color:#f3f3f3;border-left:1px solid #e9e9e9;width:300px;height:100vh;overflow:auto;position:fixed;right:500px;top:0}.chat-history .header{justify-content:center}.chat-history .history-items{display:flex;flex-direction:column;gap:8px;padding:8px;overflow:auto}.chat-history .history-items .history-empty{padding:16px 8px;color:#909090;text-align:center;font-size:13px}.chat-history .history-items .chat-history-item{cursor:pointer;background-color:#fff;border-radius:4px;padding:8px}.chat-history .history-items .chat-history-item:hover{filter:brightness(.97)}.chat-history .history-items .chat-history-item .preview{font-size:13px;line-height:1.4;margin-bottom:6px;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.chat-history .history-items .chat-history-item .footer{color:#909090;font-size:11px;display:flex;flex-direction:row;justify-content:space-between}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ChatMessageComponent, selector: "lib-chat-message", inputs: ["parts", "side", "showTyping"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
|
|
7287
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: ChatComponent, isStandalone: true, selector: "lib-chat", inputs: { searchType: "searchType" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "historyElement", first: true, predicate: ["conversation"], descendants: true }, { propertyName: "textField", first: true, predicate: ["textField"], descendants: true }], ngImport: i0, template: "<div class=\"sidebar\">\n @if (showHistory()) {\n <div class=\"chat-history\">\n <div class=\"header\">\n <h3>Verlauf</h3>\n </div>\n <div class=\"history-items\">\n @if (threads() === undefined) {\n <div class=\"history-empty\">L\u00E4dt\u2026</div>\n } @else if (threads()!.length === 0) {\n <div class=\"history-empty\">Noch keine Gespr\u00E4che.</div>\n }\n @for (item of threads(); track item.threadId) {\n <div class=\"chat-history-item\" (click)=\"openThread(item.threadId)\">\n <div class=\"preview\">{{ item.lastMessage }}</div>\n <div class=\"footer\">\n <div>{{ item.messageCount }} Nachrichten</div>\n <div>{{ item.updatedAt | date: 'dd.MM.yyyy HH:mm' }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <div class=\"chat\">\n <div class=\"header\">\n <button ao-button variant=\"outline\" (click)=\"toggleHistory()\">\n <ao-icon [svg]=\"historyIcon\"></ao-icon>\n </button>\n <h2>Hilfecenter</h2>\n <div class=\"flex\">\n <button ao-button variant=\"outline\" (click)=\"newChat()\">\n <ao-icon [svg]=\"addIcon\"></ao-icon>\n </button>\n <button ao-button variant=\"outline\" (click)=\"showHistory.set(false); closed.emit()\">\n <ao-icon [svg]=\"closeIcon\"></ao-icon>\n </button>\n </div>\n </div>\n <div class=\"conversation-history\" #conversation>\n @for (turn of turns(); track $index) {\n <lib-chat-message\n [parts]=\"turn.parts\"\n [side]=\"turn.role === 'assistant' ? 'left' : 'right'\"\n >\n </lib-chat-message>\n }\n @if (activeRequest()) {\n <lib-chat-message [showTyping]=\"true\" side=\"left\"></lib-chat-message>\n }\n </div>\n\n <div class=\"input\">\n <textarea\n #textField\n rows=\"1\"\n class=\"textarea\"\n [formControl]=\"inputControl\"\n (keydown.enter)=\"send(); $event.stopPropagation(); $event.preventDefault()\"\n (input)=\"setSize()\"\n ></textarea>\n <button ao-button variant=\"primary\" (click)=\"send()\" class=\"send-button\">\n <ao-icon [svg]=\"sendIcon\"></ao-icon>\n </button>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.sidebar{display:flex;flex-direction:row;height:100%;position:relative}.header{background-color:#fff;padding:4px;display:flex;height:50px;flex-direction:row;align-items:center}.header h2,.header h3{margin:0}.header h2{font-size:24px}.header h3{font-size:16px}.chat{display:flex;flex-direction:column;height:100%;width:500px;background-color:#f3f3f3;border-left:1px solid #e9e9e9}.chat .header{justify-content:space-between}.chat .header .flex{display:flex;align-items:center;gap:10px}.conversation-history{--a2ui-color-primary: #212121;--a2ui-color-on-primary: #ffffff;--a2ui-color-secondary: #e9e9e9;--a2ui-color-on-secondary: #212121;--a2ui-color-surface: #ffffff;--a2ui-color-on-background: #212121;--a2ui-color-input: #ffffff;--a2ui-color-on-input: #212121;--a2ui-color-border: #e9e9e9;--a2ui-color-error: #ff004d;--a2ui-text-color: #212121;--a2ui-text-color-text: #212121;--a2ui-text-caption-color: #909090;--a2ui-text-a-color: #ff004d;--a2ui-text-a-font-weight: 600;--a2ui-spacing-xs: 5px;--a2ui-spacing-s: 10px;--a2ui-spacing-m: 15px;--a2ui-spacing-l: 20px;--a2ui-spacing-xl: 25px;--a2ui-row-gap: 12px;--a2ui-column-gap: 12px;--a2ui-list-gap: 8px;--a2ui-list-padding: 0;--a2ui-font-family-title: inherit;--a2ui-font-size-2xl: 28px;--a2ui-font-size-xl: 22px;--a2ui-font-size-l: 18px;--a2ui-font-size-m: 15px;--a2ui-font-size-s: 13px;--a2ui-font-size-xs: 12px;--a2ui-line-height-headings: 1.3;--a2ui-line-height-body: 1.55;--a2ui-label-font-size: 13px;--a2ui-border-width: 1px;--a2ui-border-radius: 8px;--a2ui-card-background: #ffffff;--a2ui-card-border-radius: 12px;--a2ui-card-padding: 20px;--a2ui-card-margin: 0;--a2ui-card-border: none;--a2ui-card-box-shadow: 0 1px 3px rgb(0 0 0 / 6%);--a2ui-button-background: #ffffff;--a2ui-button-border: 1px solid #212121;--a2ui-button-border-radius: 999px;--a2ui-button-padding: 10px 22px;--a2ui-button-margin: 0;--a2ui-button-box-shadow: none;--a2ui-button-font-weight: 600;--a2ui-choicepicker-gap: 10px;--a2ui-choicepicker-padding: 0;--a2ui-choicepicker-checkbox-size: 18px;--a2ui-choicepicker-chip-background: #ffffff;--a2ui-choicepicker-chip-background-selected: #212121;--a2ui-choicepicker-chip-border: 1px solid #212121;--a2ui-choicepicker-chip-border-radius: 999px;--a2ui-choicepicker-chip-padding: 8px 16px;--a2ui-checkbox-background: #ffffff;--a2ui-checkbox-border: 1px solid #212121;--a2ui-checkbox-border-radius: 4px;--a2ui-checkbox-size: 18px;--a2ui-checkbox-gap: 10px;--a2ui-checkbox-label-font-weight: 500;--a2ui-checkbox-margin: 0;--a2ui-textfield-border: 1px solid #e9e9e9;--a2ui-textfield-border-radius: 8px;--a2ui-textfield-padding: 10px 14px;--a2ui-textfield-color-border-focus: #ff004d;--a2ui-textfield-color-error: #ff004d;--a2ui-textfield-label-font-weight: 500;--a2ui-textfield-label-font-size: 13px;--a2ui-divider-spacing: 10px;accent-color:#ff004d}.conversation-history ::ng-deep .a2ui-chip:not(.active){color:#212121}.conversation-history{display:flex;flex-direction:column;gap:16px;padding:20px;flex-grow:1;min-height:0;overflow-y:auto}.conversation-history markdown{display:block}.possible-questions{padding:0 20px 10px;display:flex;flex-wrap:wrap;gap:8px}.possible-questions .question-chip{cursor:pointer;transition:all .2s ease;background-color:#e9e9e9;padding:8px;border-radius:5px}.possible-questions .question-chip:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.input{margin:0 10px 10px;position:relative}.input .textarea{font-family:inherit;z-index:10000;padding:10px 65px 10px 10px;width:100%;box-sizing:border-box;min-height:43px;resize:none}.input .send-button{position:absolute;right:10px;bottom:9px}.chat-history{background-color:#f3f3f3;border-left:1px solid #e9e9e9;width:300px;height:100vh;overflow:auto;position:fixed;right:500px;top:0}.chat-history .header{justify-content:center}.chat-history .history-items{display:flex;flex-direction:column;gap:8px;padding:8px;overflow:auto}.chat-history .history-items .history-empty{padding:16px 8px;color:#909090;text-align:center;font-size:13px}.chat-history .history-items .chat-history-item{cursor:pointer;background-color:#fff;border-radius:4px;padding:8px}.chat-history .history-items .chat-history-item:hover{filter:brightness(.97)}.chat-history .history-items .chat-history-item .preview{font-size:13px;line-height:1.4;margin-bottom:6px;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.chat-history .history-items .chat-history-item .footer{color:#909090;font-size:11px;display:flex;flex-direction:row;justify-content:space-between}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ChatMessageComponent, selector: "lib-chat-message", inputs: ["parts", "side", "showTyping"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
|
|
7220
7288
|
}
|
|
7221
7289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ChatComponent, decorators: [{
|
|
7222
7290
|
type: Component,
|
|
@@ -7227,6 +7295,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
|
|
|
7227
7295
|
}], textField: [{
|
|
7228
7296
|
type: ViewChild,
|
|
7229
7297
|
args: ['textField']
|
|
7298
|
+
}], searchType: [{
|
|
7299
|
+
type: Input
|
|
7230
7300
|
}], closed: [{
|
|
7231
7301
|
type: Output
|
|
7232
7302
|
}] } });
|
|
@@ -7282,6 +7352,9 @@ class WorkspaceNavbarComponent {
|
|
|
7282
7352
|
const url = this.currentUrl() ?? '';
|
|
7283
7353
|
return this.findBestRouteMatch(url, this.activeSubTopNavItems())?.id ?? '';
|
|
7284
7354
|
}, ...(ngDevMode ? [{ debugName: "activeSubTopNavItemId" }] : /* istanbul ignore next */ []));
|
|
7355
|
+
activeWorkspaceAppId = computed(() => {
|
|
7356
|
+
return this.workspaceNavbarService.activeAppIdSignal() ?? this.appId();
|
|
7357
|
+
}, ...(ngDevMode ? [{ debugName: "activeWorkspaceAppId" }] : /* istanbul ignore next */ []));
|
|
7285
7358
|
signOutIcon = phosphorSignOut;
|
|
7286
7359
|
plusIcon = phosphorPlus;
|
|
7287
7360
|
chatIcon = phosphorRobot;
|
|
@@ -7297,7 +7370,6 @@ class WorkspaceNavbarComponent {
|
|
|
7297
7370
|
/** Desired order of product app ids in the nav (case-insensitive match). */
|
|
7298
7371
|
productOrder = ['szales', 'sethub', 'ai', 'admin', 'component-manager'];
|
|
7299
7372
|
workspaceAppNavItems = computed(() => {
|
|
7300
|
-
const session = this.workspaceNavbarService.sessionSignal();
|
|
7301
7373
|
const response = this.workspaceNavbarService.workspaceAppsResponseSignal();
|
|
7302
7374
|
if (!response)
|
|
7303
7375
|
return [];
|
|
@@ -7307,10 +7379,7 @@ class WorkspaceNavbarComponent {
|
|
|
7307
7379
|
icon: this.resolveIcon(app),
|
|
7308
7380
|
tooltip: app.name,
|
|
7309
7381
|
});
|
|
7310
|
-
const productItems = response.products
|
|
7311
|
-
.filter(app => (app.appId === 'ai' ? session?.role === AccessRole.SUPER_ADMIN : true))
|
|
7312
|
-
.map(mapApp)
|
|
7313
|
-
.sort((a, b) => {
|
|
7382
|
+
const productItems = response.products.map(mapApp).sort((a, b) => {
|
|
7314
7383
|
const indexA = this.productOrder.indexOf(a.id.toLowerCase());
|
|
7315
7384
|
const indexB = this.productOrder.indexOf(b.id.toLowerCase());
|
|
7316
7385
|
const posA = indexA === -1 ? this.productOrder.length : indexA;
|
|
@@ -7392,7 +7461,7 @@ class WorkspaceNavbarComponent {
|
|
|
7392
7461
|
this.workspaceNavbarService.signOut().subscribe();
|
|
7393
7462
|
return;
|
|
7394
7463
|
}
|
|
7395
|
-
if (item.id === this.
|
|
7464
|
+
if (item.id === this.activeWorkspaceAppId()) {
|
|
7396
7465
|
return;
|
|
7397
7466
|
}
|
|
7398
7467
|
const apps = this.workspaceNavbarService.workspaceAppsSignal() ?? [];
|
|
@@ -7438,12 +7507,14 @@ class WorkspaceNavbarComponent {
|
|
|
7438
7507
|
return url === route || url.startsWith(route + '/') || url.startsWith(route + '?');
|
|
7439
7508
|
}
|
|
7440
7509
|
getLogo(companyId) {
|
|
7510
|
+
if (!companyId)
|
|
7511
|
+
return;
|
|
7441
7512
|
this.workspaceNavbarService.getCompanyLogo(companyId).subscribe(logo => {
|
|
7442
7513
|
this.companyLogo.set(logo.url ?? null);
|
|
7443
7514
|
});
|
|
7444
7515
|
}
|
|
7445
7516
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: WorkspaceNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7446
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: WorkspaceNavbarComponent, isStandalone: true, selector: "ao-workspace-navbar", inputs: { appId: { classPropertyName: "appId", publicName: "appId", isSignal: true, isRequired: true, transformFunction: null }, production: { classPropertyName: "production", publicName: "production", isSignal: true, isRequired: false, transformFunction: null }, topNavItems: { classPropertyName: "topNavItems", publicName: "topNavItems", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, notificationCount: { classPropertyName: "notificationCount", publicName: "notificationCount", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, searchLoading: { classPropertyName: "searchLoading", publicName: "searchLoading", isSignal: true, isRequired: false, transformFunction: null }, searchError: { classPropertyName: "searchError", publicName: "searchError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeFilter: "activeFilterChange", topNavItemClick: "topNavItemClick", topNavItemChange: "topNavItemChange", subTopNavItemClick: "subTopNavItemClick", subTopNavItemChange: "subTopNavItemChange", appSwitched: "appSwitched", searchSubmit: "searchSubmit", searchQueryChange: "searchQueryChange", searchViewAll: "searchViewAll", searchResultSelect: "searchResultSelect", searchAiSuggestionSelect: "searchAiSuggestionSelect", searchPageSuggestionSelect: "searchPageSuggestionSelect", searchFilterSelect: "searchFilterSelect", searchFilterClear: "searchFilterClear", notificationClick: "notificationClick" }, host: { classAttribute: "ao-workspace-navbar" }, ngImport: i0, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"
|
|
7517
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: WorkspaceNavbarComponent, isStandalone: true, selector: "ao-workspace-navbar", inputs: { appId: { classPropertyName: "appId", publicName: "appId", isSignal: true, isRequired: true, transformFunction: null }, production: { classPropertyName: "production", publicName: "production", isSignal: true, isRequired: false, transformFunction: null }, topNavItems: { classPropertyName: "topNavItems", publicName: "topNavItems", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showNotifications: { classPropertyName: "showNotifications", publicName: "showNotifications", isSignal: true, isRequired: false, transformFunction: null }, notificationCount: { classPropertyName: "notificationCount", publicName: "notificationCount", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, recommendedFilters: { classPropertyName: "recommendedFilters", publicName: "recommendedFilters", isSignal: true, isRequired: false, transformFunction: null }, activeFilter: { classPropertyName: "activeFilter", publicName: "activeFilter", isSignal: true, isRequired: false, transformFunction: null }, resultGroups: { classPropertyName: "resultGroups", publicName: "resultGroups", isSignal: true, isRequired: false, transformFunction: null }, pageSuggestion: { classPropertyName: "pageSuggestion", publicName: "pageSuggestion", isSignal: true, isRequired: false, transformFunction: null }, aiSuggestions: { classPropertyName: "aiSuggestions", publicName: "aiSuggestions", isSignal: true, isRequired: false, transformFunction: null }, searchLoading: { classPropertyName: "searchLoading", publicName: "searchLoading", isSignal: true, isRequired: false, transformFunction: null }, searchError: { classPropertyName: "searchError", publicName: "searchError", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeFilter: "activeFilterChange", topNavItemClick: "topNavItemClick", topNavItemChange: "topNavItemChange", subTopNavItemClick: "subTopNavItemClick", subTopNavItemChange: "subTopNavItemChange", appSwitched: "appSwitched", searchSubmit: "searchSubmit", searchQueryChange: "searchQueryChange", searchViewAll: "searchViewAll", searchResultSelect: "searchResultSelect", searchAiSuggestionSelect: "searchAiSuggestionSelect", searchPageSuggestionSelect: "searchPageSuggestionSelect", searchFilterSelect: "searchFilterSelect", searchFilterClear: "searchFilterClear", notificationClick: "notificationClick" }, host: { classAttribute: "ao-workspace-navbar" }, ngImport: i0, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"activeWorkspaceAppId()\"\n [expanded]=\"false\"\n (itemClick)=\"onSideNavItemClick($event)\"\n>\n <ao-logo-menu\n aoSideNavLogo\n [items]=\"companyMenuItems()\"\n [selectedItem]=\"selectedCompanyId()\"\n (selectionChange)=\"onCompanyChange($event)\"\n >\n @if (companyLogo()) {\n <img [src]=\"companyLogo()\" alt=\"Logo\" class=\"workspace-navbar__logo\" />\n } @else {\n <svg\n class=\"workspace-navbar__logo\"\n width=\"96\"\n height=\"120\"\n viewBox=\"0 0 96 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Logo\"\n role=\"img\"\n >\n <path\n d=\"M36.6592 37.5955L31.1625 31.4924C28.1349 28.1284 28.4073 22.9247 31.7689 19.8971C33.2769 18.5401 35.2266 17.7918 37.2633 17.7918C39.5929 17.7918 41.8195 18.7781 43.3664 20.4967C45.458 22.824 46.0484 26.0826 44.911 28.998C44.4465 30.1903 43.7234 31.2338 42.7623 32.0988L36.6592 37.5955ZM95.5987 76.4613L83.6854 63.2299L70.4585 75.1363L48.5725 50.8269L54.6802 45.3279C57.6779 42.6253 60.035 39.2156 61.4949 35.4696C65.0969 26.2497 63.2204 15.9497 56.6001 8.58568C46.9981 -2.06444 30.5149 -2.92488 19.8556 6.66801C9.20088 16.2655 8.3359 32.7464 17.9311 43.4057L23.4255 49.5065L14.1118 57.8957C13.5099 58.438 12.9287 58.9621 12.3817 59.4792L12.3703 59.4655L11.2742 60.4518C4.49141 66.5572 0.493621 74.9372 0.0153502 84.045C-0.00525137 84.4317 -0.000673098 84.8185 0.00390115 85.2029L0.0084674 85.7086L0.00160688 87.1494L17.7823 87.1503L17.7938 85.7224L17.7915 85.4134C17.7892 85.2716 17.7869 85.1297 17.7938 84.9809C18.0203 80.6216 19.938 76.61 23.1852 73.6855L35.341 62.7379L57.2271 87.0473L45.0712 97.995C42.1055 100.668 38.261 102.151 34.2449 102.174L32.817 102.183V120L34.2586 119.998C42.6547 119.977 50.7258 116.86 56.9868 111.226L69.1404 100.281L81.0446 113.503L94.276 101.592L82.3718 88.3677L95.5987 76.4613Z\"\n fill=\"#FF004D\"\n />\n </svg>\n }\n </ao-logo-menu>\n</ao-side-nav>\n\n<div class=\"workspace-navbar__main\" [class.workspace-navbar__main--with-subnav]=\"hasSubTopNav()\">\n <div\n class=\"workspace-navbar__nav-wrapper\"\n [class.workspace-navbar__nav-wrapper--hidden]=\"navHidden()\"\n >\n <ao-top-nav\n [items]=\"topNavItems()\"\n [activeItemId]=\"activeTopNavItemId()\"\n [showSearch]=\"showSearch()\"\n [showNotifications]=\"showNotifications()\"\n [notificationCount]=\"notificationCount()\"\n [searchPlaceholder]=\"searchPlaceholder()\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [searchLoading]=\"searchLoading()\"\n [searchError]=\"searchError()\"\n (itemClick)=\"onTopNavClick($event)\"\n (itemChange)=\"onTopNavChange($event)\"\n (searchSubmit)=\"searchSubmit.emit($event)\"\n (searchQueryChange)=\"searchQueryChange.emit($event)\"\n (searchViewAll)=\"searchViewAll.emit($event)\"\n (searchResultSelect)=\"searchResultSelect.emit($event)\"\n (searchAiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (searchPageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (searchFilterSelect)=\"searchFilterSelect.emit($event)\"\n (searchFilterClear)=\"searchFilterClear.emit()\"\n (notificationClick)=\"onNotificationClick()\"\n [showTools]=\"showTools()\"\n />\n\n @if (hasSubTopNav()) {\n <ao-sub-top-nav\n [items]=\"activeSubTopNavItems()\"\n [activeItemId]=\"activeSubTopNavItemId()\"\n (itemClick)=\"onSubTopNavClick($event)\"\n (itemChange)=\"onSubTopNavChange($event)\"\n />\n }\n </div>\n\n <main class=\"workspace-navbar__content\">\n <ng-content />\n </main>\n</div>\n\n<button ao-button class=\"handbook-chat\" variant=\"primary\" (click)=\"chatOpen.set(!chatOpen())\">\n <ao-icon [svg]=\"chatIcon\" />\n</button>\n\n<div class=\"chat-container\" [class.open]=\"chatOpen()\">\n <lib-chat [searchType]=\"activeFilter()?.type\" (closed)=\"chatOpen.set(false)\" />\n</div>\n", styles: [":host{display:block;min-height:100vh}.workspace-navbar__main{margin-left:70px;padding-top:50px;min-height:100vh}.workspace-navbar__main.workspace-navbar__main--with-subnav{padding-top:100px}.workspace-navbar__nav-wrapper{position:fixed;top:0;left:0;right:0;z-index:3;transform:translateY(0);transition:transform .25s ease}.workspace-navbar__nav-wrapper--hidden{transform:translateY(-100%)}.workspace-navbar__content{padding:30px 0}.workspace-navbar__logo{max-width:32px;max-height:32px;object-fit:contain}.handbook-chat{position:fixed;right:1.5em;bottom:1.5em;z-index:100}.chat-container{position:fixed;width:500px;height:100vh;right:0;top:0;margin-right:-500px;transition:margin-right .5s ease-in-out;background-color:#fff}.chat-container.open{margin-right:0;z-index:501}\n"], dependencies: [{ kind: "component", type: SideNavComponent, selector: "ao-side-nav", inputs: ["items", "bottomItems", "activeItemId", "expanded"], outputs: ["activeItemIdChange", "itemClick", "itemChange", "bottomItemClick"] }, { kind: "component", type: TopNavComponent, selector: "ao-top-nav", inputs: ["items", "activeItemId", "showSearch", "showNotifications", "notificationCount", "searchPlaceholder", "showTools", "recommendedFilters", "activeFilter", "resultGroups", "pageSuggestion", "aiSuggestions", "searchLoading", "searchError"], outputs: ["activeItemIdChange", "activeFilterChange", "itemClick", "itemChange", "searchSubmit", "searchQueryChange", "searchResultSelect", "searchAiSuggestionSelect", "searchPageSuggestionSelect", "searchFilterSelect", "searchFilterClear", "searchViewAll", "notificationClick"] }, { kind: "component", type: SubTopNavComponent, selector: "ao-sub-top-nav", inputs: ["items", "activeItemId"], outputs: ["activeItemIdChange", "itemClick", "itemChange"] }, { kind: "component", type: LogoMenuComponent, selector: "ao-logo-menu", inputs: ["items", "selectedItem", "searchPlaceholder"], outputs: ["selectedItemChange", "selectionChange"] }, { kind: "component", type: IconComponent, selector: "ao-icon", inputs: ["svg", "size"] }, { kind: "component", type: ButtonComponent, selector: "button[ao-button], a[ao-button]", inputs: ["variant", "icon", "iconTrailing"] }, { kind: "component", type: ChatComponent, selector: "lib-chat", inputs: ["searchType"], outputs: ["closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7447
7518
|
}
|
|
7448
7519
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: WorkspaceNavbarComponent, decorators: [{
|
|
7449
7520
|
type: Component,
|
|
@@ -7457,7 +7528,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImpo
|
|
|
7457
7528
|
ChatComponent,
|
|
7458
7529
|
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
7459
7530
|
class: 'ao-workspace-navbar',
|
|
7460
|
-
}, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"
|
|
7531
|
+
}, template: "<ao-side-nav\n [items]=\"workspaceAppNavItems()\"\n [bottomItems]=\"bottomNavItems()\"\n [activeItemId]=\"activeWorkspaceAppId()\"\n [expanded]=\"false\"\n (itemClick)=\"onSideNavItemClick($event)\"\n>\n <ao-logo-menu\n aoSideNavLogo\n [items]=\"companyMenuItems()\"\n [selectedItem]=\"selectedCompanyId()\"\n (selectionChange)=\"onCompanyChange($event)\"\n >\n @if (companyLogo()) {\n <img [src]=\"companyLogo()\" alt=\"Logo\" class=\"workspace-navbar__logo\" />\n } @else {\n <svg\n class=\"workspace-navbar__logo\"\n width=\"96\"\n height=\"120\"\n viewBox=\"0 0 96 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Logo\"\n role=\"img\"\n >\n <path\n d=\"M36.6592 37.5955L31.1625 31.4924C28.1349 28.1284 28.4073 22.9247 31.7689 19.8971C33.2769 18.5401 35.2266 17.7918 37.2633 17.7918C39.5929 17.7918 41.8195 18.7781 43.3664 20.4967C45.458 22.824 46.0484 26.0826 44.911 28.998C44.4465 30.1903 43.7234 31.2338 42.7623 32.0988L36.6592 37.5955ZM95.5987 76.4613L83.6854 63.2299L70.4585 75.1363L48.5725 50.8269L54.6802 45.3279C57.6779 42.6253 60.035 39.2156 61.4949 35.4696C65.0969 26.2497 63.2204 15.9497 56.6001 8.58568C46.9981 -2.06444 30.5149 -2.92488 19.8556 6.66801C9.20088 16.2655 8.3359 32.7464 17.9311 43.4057L23.4255 49.5065L14.1118 57.8957C13.5099 58.438 12.9287 58.9621 12.3817 59.4792L12.3703 59.4655L11.2742 60.4518C4.49141 66.5572 0.493621 74.9372 0.0153502 84.045C-0.00525137 84.4317 -0.000673098 84.8185 0.00390115 85.2029L0.0084674 85.7086L0.00160688 87.1494L17.7823 87.1503L17.7938 85.7224L17.7915 85.4134C17.7892 85.2716 17.7869 85.1297 17.7938 84.9809C18.0203 80.6216 19.938 76.61 23.1852 73.6855L35.341 62.7379L57.2271 87.0473L45.0712 97.995C42.1055 100.668 38.261 102.151 34.2449 102.174L32.817 102.183V120L34.2586 119.998C42.6547 119.977 50.7258 116.86 56.9868 111.226L69.1404 100.281L81.0446 113.503L94.276 101.592L82.3718 88.3677L95.5987 76.4613Z\"\n fill=\"#FF004D\"\n />\n </svg>\n }\n </ao-logo-menu>\n</ao-side-nav>\n\n<div class=\"workspace-navbar__main\" [class.workspace-navbar__main--with-subnav]=\"hasSubTopNav()\">\n <div\n class=\"workspace-navbar__nav-wrapper\"\n [class.workspace-navbar__nav-wrapper--hidden]=\"navHidden()\"\n >\n <ao-top-nav\n [items]=\"topNavItems()\"\n [activeItemId]=\"activeTopNavItemId()\"\n [showSearch]=\"showSearch()\"\n [showNotifications]=\"showNotifications()\"\n [notificationCount]=\"notificationCount()\"\n [searchPlaceholder]=\"searchPlaceholder()\"\n [recommendedFilters]=\"recommendedFilters()\"\n [(activeFilter)]=\"activeFilter\"\n [resultGroups]=\"resultGroups()\"\n [pageSuggestion]=\"pageSuggestion()\"\n [aiSuggestions]=\"aiSuggestions()\"\n [searchLoading]=\"searchLoading()\"\n [searchError]=\"searchError()\"\n (itemClick)=\"onTopNavClick($event)\"\n (itemChange)=\"onTopNavChange($event)\"\n (searchSubmit)=\"searchSubmit.emit($event)\"\n (searchQueryChange)=\"searchQueryChange.emit($event)\"\n (searchViewAll)=\"searchViewAll.emit($event)\"\n (searchResultSelect)=\"searchResultSelect.emit($event)\"\n (searchAiSuggestionSelect)=\"searchAiSuggestionSelect.emit($event)\"\n (searchPageSuggestionSelect)=\"searchPageSuggestionSelect.emit($event)\"\n (searchFilterSelect)=\"searchFilterSelect.emit($event)\"\n (searchFilterClear)=\"searchFilterClear.emit()\"\n (notificationClick)=\"onNotificationClick()\"\n [showTools]=\"showTools()\"\n />\n\n @if (hasSubTopNav()) {\n <ao-sub-top-nav\n [items]=\"activeSubTopNavItems()\"\n [activeItemId]=\"activeSubTopNavItemId()\"\n (itemClick)=\"onSubTopNavClick($event)\"\n (itemChange)=\"onSubTopNavChange($event)\"\n />\n }\n </div>\n\n <main class=\"workspace-navbar__content\">\n <ng-content />\n </main>\n</div>\n\n<button ao-button class=\"handbook-chat\" variant=\"primary\" (click)=\"chatOpen.set(!chatOpen())\">\n <ao-icon [svg]=\"chatIcon\" />\n</button>\n\n<div class=\"chat-container\" [class.open]=\"chatOpen()\">\n <lib-chat [searchType]=\"activeFilter()?.type\" (closed)=\"chatOpen.set(false)\" />\n</div>\n", styles: [":host{display:block;min-height:100vh}.workspace-navbar__main{margin-left:70px;padding-top:50px;min-height:100vh}.workspace-navbar__main.workspace-navbar__main--with-subnav{padding-top:100px}.workspace-navbar__nav-wrapper{position:fixed;top:0;left:0;right:0;z-index:3;transform:translateY(0);transition:transform .25s ease}.workspace-navbar__nav-wrapper--hidden{transform:translateY(-100%)}.workspace-navbar__content{padding:30px 0}.workspace-navbar__logo{max-width:32px;max-height:32px;object-fit:contain}.handbook-chat{position:fixed;right:1.5em;bottom:1.5em;z-index:100}.chat-container{position:fixed;width:500px;height:100vh;right:0;top:0;margin-right:-500px;transition:margin-right .5s ease-in-out;background-color:#fff}.chat-container.open{margin-right:0;z-index:501}\n"] }]
|
|
7461
7532
|
}], ctorParameters: () => [], propDecorators: { appId: [{ type: i0.Input, args: [{ isSignal: true, alias: "appId", required: true }] }], production: [{ type: i0.Input, args: [{ isSignal: true, alias: "production", required: false }] }], topNavItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "topNavItems", required: false }] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], showNotifications: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotifications", required: false }] }], notificationCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationCount", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], recommendedFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "recommendedFilters", required: false }] }], activeFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeFilter", required: false }] }, { type: i0.Output, args: ["activeFilterChange"] }], resultGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultGroups", required: false }] }], pageSuggestion: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSuggestion", required: false }] }], aiSuggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiSuggestions", required: false }] }], searchLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLoading", required: false }] }], searchError: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchError", required: false }] }], topNavItemClick: [{ type: i0.Output, args: ["topNavItemClick"] }], topNavItemChange: [{ type: i0.Output, args: ["topNavItemChange"] }], subTopNavItemClick: [{ type: i0.Output, args: ["subTopNavItemClick"] }], subTopNavItemChange: [{ type: i0.Output, args: ["subTopNavItemChange"] }], appSwitched: [{ type: i0.Output, args: ["appSwitched"] }], searchSubmit: [{ type: i0.Output, args: ["searchSubmit"] }], searchQueryChange: [{ type: i0.Output, args: ["searchQueryChange"] }], searchViewAll: [{ type: i0.Output, args: ["searchViewAll"] }], searchResultSelect: [{ type: i0.Output, args: ["searchResultSelect"] }], searchAiSuggestionSelect: [{ type: i0.Output, args: ["searchAiSuggestionSelect"] }], searchPageSuggestionSelect: [{ type: i0.Output, args: ["searchPageSuggestionSelect"] }], searchFilterSelect: [{ type: i0.Output, args: ["searchFilterSelect"] }], searchFilterClear: [{ type: i0.Output, args: ["searchFilterClear"] }], notificationClick: [{ type: i0.Output, args: ["notificationClick"] }] } });
|
|
7462
7533
|
|
|
7463
7534
|
const AO_CATALOG_ID = 'ah-oh.com:robin-v1';
|