@genesislcap/ai-assistant 14.409.0-FUI-2495.3 → 14.409.0-FUI-2495.4

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.
@@ -3047,6 +3047,37 @@
3047
3047
  "isProtected": false,
3048
3048
  "isAbstract": false
3049
3049
  },
3050
+ {
3051
+ "kind": "Method",
3052
+ "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#chatConfigChanged:member(1)",
3053
+ "docComment": "",
3054
+ "excerptTokens": [
3055
+ {
3056
+ "kind": "Content",
3057
+ "text": "chatConfigChanged(): "
3058
+ },
3059
+ {
3060
+ "kind": "Content",
3061
+ "text": "void"
3062
+ },
3063
+ {
3064
+ "kind": "Content",
3065
+ "text": ";"
3066
+ }
3067
+ ],
3068
+ "isStatic": false,
3069
+ "returnTypeTokenRange": {
3070
+ "startIndex": 1,
3071
+ "endIndex": 2
3072
+ },
3073
+ "releaseTag": "Beta",
3074
+ "isProtected": false,
3075
+ "overloadIndex": 1,
3076
+ "parameters": [],
3077
+ "isOptional": false,
3078
+ "isAbstract": false,
3079
+ "name": "chatConfigChanged"
3080
+ },
3050
3081
  {
3051
3082
  "kind": "Method",
3052
3083
  "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#connectedCallback:member(1)",
@@ -4068,6 +4099,67 @@
4068
4099
  "isAbstract": false,
4069
4100
  "name": "showHaloChanged"
4070
4101
  },
4102
+ {
4103
+ "kind": "Property",
4104
+ "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#showingSplash:member",
4105
+ "docComment": "/**\n * Whether the splash overlay is currently showing (no messages and showSplash is enabled). Reflected as a boolean attribute on the host.\n */\n",
4106
+ "excerptTokens": [
4107
+ {
4108
+ "kind": "Content",
4109
+ "text": "showingSplash: "
4110
+ },
4111
+ {
4112
+ "kind": "Content",
4113
+ "text": "boolean"
4114
+ },
4115
+ {
4116
+ "kind": "Content",
4117
+ "text": ";"
4118
+ }
4119
+ ],
4120
+ "isReadonly": false,
4121
+ "isOptional": false,
4122
+ "releaseTag": "Beta",
4123
+ "name": "showingSplash",
4124
+ "propertyTypeTokenRange": {
4125
+ "startIndex": 1,
4126
+ "endIndex": 2
4127
+ },
4128
+ "isStatic": false,
4129
+ "isProtected": false,
4130
+ "isAbstract": false
4131
+ },
4132
+ {
4133
+ "kind": "Method",
4134
+ "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#showingSplashChanged:member(1)",
4135
+ "docComment": "",
4136
+ "excerptTokens": [
4137
+ {
4138
+ "kind": "Content",
4139
+ "text": "showingSplashChanged(): "
4140
+ },
4141
+ {
4142
+ "kind": "Content",
4143
+ "text": "void"
4144
+ },
4145
+ {
4146
+ "kind": "Content",
4147
+ "text": ";"
4148
+ }
4149
+ ],
4150
+ "isStatic": false,
4151
+ "returnTypeTokenRange": {
4152
+ "startIndex": 1,
4153
+ "endIndex": 2
4154
+ },
4155
+ "releaseTag": "Beta",
4156
+ "isProtected": false,
4157
+ "overloadIndex": 1,
4158
+ "parameters": [],
4159
+ "isOptional": false,
4160
+ "isAbstract": false,
4161
+ "name": "showingSplashChanged"
4162
+ },
4071
4163
  {
4072
4164
  "kind": "Property",
4073
4165
  "canonicalReference": "@genesislcap/ai-assistant!FoundationAiAssistant#showLoadingIndicator:member",
@@ -442,6 +442,8 @@ export declare class FoundationAiAssistant extends GenesisElement {
442
442
  showLoadingIndicator: boolean;
443
443
  /** Whether the settings panel is open. */
444
444
  settingsOpen: boolean;
445
+ /** Whether the splash overlay is currently showing (no messages and showSplash is enabled). Reflected as a boolean attribute on the host. */
446
+ showingSplash: boolean;
445
447
  private driver?;
446
448
  private loadingTimer;
447
449
  private unsubBus?;
@@ -460,6 +462,9 @@ export declare class FoundationAiAssistant extends GenesisElement {
460
462
  get visibleMessages(): ChatMessage[];
461
463
  connectedCallback(): void;
462
464
  disconnectedCallback(): void;
465
+ chatConfigChanged(): void;
466
+ showingSplashChanged(): void;
467
+ private syncShowingSplash;
463
468
  stateChanged(): void;
464
469
  messagesChanged(): void;
465
470
  showLoadingIndicatorChanged(): void;
@@ -54,6 +54,8 @@ export declare class FoundationAiAssistant extends GenesisElement {
54
54
  showLoadingIndicator: boolean;
55
55
  /** Whether the settings panel is open. */
56
56
  settingsOpen: boolean;
57
+ /** Whether the splash overlay is currently showing (no messages and showSplash is enabled). Reflected as a boolean attribute on the host. */
58
+ showingSplash: boolean;
57
59
  private driver?;
58
60
  private loadingTimer;
59
61
  private unsubBus?;
@@ -72,6 +74,9 @@ export declare class FoundationAiAssistant extends GenesisElement {
72
74
  get visibleMessages(): ChatMessage[];
73
75
  connectedCallback(): void;
74
76
  disconnectedCallback(): void;
77
+ chatConfigChanged(): void;
78
+ showingSplashChanged(): void;
79
+ private syncShowingSplash;
75
80
  stateChanged(): void;
76
81
  messagesChanged(): void;
77
82
  showLoadingIndicatorChanged(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/main/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/main/main.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.styles.d.ts","sourceRoot":"","sources":["../../../src/main/main.styles.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM,iDAoflB,CAAC"}
1
+ {"version":3,"file":"main.styles.d.ts","sourceRoot":"","sources":["../../../src/main/main.styles.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM,iDAqgBlB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.template.d.ts","sourceRoot":"","sources":["../../../src/main/main.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AA6DpD,gBAAgB;AAChB,eAAO,MAAM,6BAA6B,GACxC,oBAAoB,MAAM,KACzB,YAAY,CAAC,qBAAqB,CAiWpC,CAAC"}
1
+ {"version":3,"file":"main.template.d.ts","sourceRoot":"","sources":["../../../src/main/main.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AA6DpD,gBAAgB;AAChB,eAAO,MAAM,6BAA6B,GACxC,oBAAoB,MAAM,KACzB,YAAY,CAAC,qBAAqB,CAqWpC,CAAC"}
@@ -53,6 +53,8 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
53
53
  this.showLoadingIndicator = false;
54
54
  /** Whether the settings panel is open. */
55
55
  this.settingsOpen = false;
56
+ /** Whether the splash overlay is currently showing (no messages and showSplash is enabled). Reflected as a boolean attribute on the host. */
57
+ this.showingSplash = false;
56
58
  this.haloStartPublished = false;
57
59
  this.showHalo = 'no';
58
60
  }
@@ -175,6 +177,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
175
177
  this.applyState(state);
176
178
  });
177
179
  }
180
+ this.syncShowingSplash();
178
181
  this.fetchSuggestions();
179
182
  logger.debug('FoundationAiAssistant connected');
180
183
  }
@@ -187,6 +190,24 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
187
190
  this.unsubBus = undefined;
188
191
  this.driver = undefined;
189
192
  }
193
+ chatConfigChanged() {
194
+ this.syncShowingSplash();
195
+ }
196
+ showingSplashChanged() {
197
+ if (this.showingSplash) {
198
+ this.setAttribute('showing-splash', '');
199
+ }
200
+ else {
201
+ this.removeAttribute('showing-splash');
202
+ }
203
+ }
204
+ // Sets the observable which reflects as a boolean attribute on the host via showingSplashChanged.
205
+ // Must be an attribute on the host (not a shadow DOM class) so consumer CSS can target slotted
206
+ // light DOM content — shadow DOM classes are not visible to external stylesheets.
207
+ syncShowingSplash() {
208
+ var _a;
209
+ this.showingSplash = !!((_a = this.chatConfig.ui) === null || _a === void 0 ? void 0 : _a.showSplash) && this.messages.length === 0;
210
+ }
190
211
  stateChanged() {
191
212
  this.syncShowHalo();
192
213
  }
@@ -206,6 +227,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
206
227
  }
207
228
  }
208
229
  this.syncShowHalo();
230
+ this.syncShowingSplash();
209
231
  // Publish halo-start whenever a new toolCalls message arrives.
210
232
  if (this.showHalo !== 'no' && ((_a = this.enabledAnimations) === null || _a === void 0 ? void 0 : _a.includes('halo'))) {
211
233
  const last = this.messages[this.messages.length - 1];
@@ -594,6 +616,9 @@ __decorate([
594
616
  __decorate([
595
617
  observable
596
618
  ], FoundationAiAssistant.prototype, "settingsOpen", void 0);
619
+ __decorate([
620
+ observable
621
+ ], FoundationAiAssistant.prototype, "showingSplash", void 0);
597
622
  __decorate([
598
623
  observable
599
624
  ], FoundationAiAssistant.prototype, "showHalo", void 0);
@@ -191,6 +191,23 @@ export const styles = css `
191
191
  }
192
192
  }
193
193
 
194
+ .splash-wrapper {
195
+ position: absolute;
196
+ inset: 0;
197
+ z-index: 10;
198
+ overflow: hidden;
199
+ }
200
+
201
+ :host(:not([showing-splash])) .splash-wrapper {
202
+ pointer-events: none;
203
+ }
204
+
205
+ ::slotted([slot='splash']) {
206
+ display: block;
207
+ width: 100%;
208
+ height: 100%;
209
+ }
210
+
194
211
  .messages {
195
212
  flex: 1;
196
213
  overflow-y: auto;
@@ -165,6 +165,10 @@ export const FoundationAiAssistantTemplate = (designSystemPrefix) => {
165
165
  `)}
166
166
  `)}
167
167
 
168
+ <div class="splash-wrapper" part="splash">
169
+ <slot name="splash"></slot>
170
+ </div>
171
+
168
172
  <div class="messages" part="messages">
169
173
 
170
174
  ${repeat((x) => x.visibleMessages, html `
@@ -196,3 +196,71 @@ Option 1 + 2 together cover most real cases without requiring suspend/resume inf
196
196
  - [ ] Add `showAgentSwitchIndicator` to `ChatConfig` and implement the system-event message type + divider template
197
197
  - [ ] Write specialist configs for each new domain (allocations, settlement, etc.)
198
198
  - [ ] Decide on mid-flow handoff strategy (suppress re-routing vs. fallback tools vs. clarify)
199
+
200
+ ---
201
+
202
+ ## Splash slot
203
+
204
+ A named slot (`slot="splash"`) lets consumers render a branded intro screen over the chat before any messages exist. It disappears once the first message is sent.
205
+
206
+ ### Enabling it
207
+
208
+ ```typescript
209
+ chatConfig: {
210
+ ui: {
211
+ showSplash: true,
212
+ }
213
+ }
214
+ ```
215
+
216
+ The component reflects a `showing-splash` boolean attribute on the host while the splash is active (no messages). It is absent once the conversation starts.
217
+
218
+ ### Basic usage
219
+
220
+ ```html
221
+ <foundation-ai-assistant :chatConfig="${() => chatConfig}">
222
+ <div slot="splash" class="my-splash">
223
+ <h2>Hello, how can I help?</h2>
224
+ </div>
225
+ </foundation-ai-assistant>
226
+ ```
227
+
228
+ ### Animated exit
229
+
230
+ The splash wrapper stays in the DOM when dismissed (it is never removed), so CSS transitions and keyframe animations work on exit. Use the `showing-splash` attribute as the CSS hook:
231
+
232
+ ```css
233
+ .my-splash {
234
+ width: 100%;
235
+ height: 100%;
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: center;
239
+ transition: opacity 0.4s ease, transform 0.4s ease;
240
+ }
241
+
242
+ /* Dismissed state — triggers the exit transition */
243
+ foundation-ai-assistant:not([showing-splash]) .my-splash {
244
+ opacity: 0;
245
+ transform: translateY(-8px);
246
+ pointer-events: none;
247
+ }
248
+ ```
249
+
250
+ Keyframe animations work the same way — add the animation class when `showing-splash` is present, remove it (or swap to an exit animation class) when it is absent. Because the element remains in the DOM, the exit animation plays in full before the element becomes visually irrelevant.
251
+
252
+ ### Container queries
253
+
254
+ The component does not impose a container context on the splash wrapper. If you need the splash content to respond to the panel size, wrap your slotted element in its own container:
255
+
256
+ ```html
257
+ <div slot="splash" style="container-type: inline-size; width: 100%; height: 100%;">
258
+ <div class="my-splash-content">...</div>
259
+ </div>
260
+ ```
261
+
262
+ ```css
263
+ @container (max-width: 400px) {
264
+ .my-splash-content { font-size: 0.9em; }
265
+ }
266
+ ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/ai-assistant",
3
3
  "description": "Genesis AI Assistant micro-frontend",
4
- "version": "14.409.0-FUI-2495.3",
4
+ "version": "14.409.0-FUI-2495.4",
5
5
  "license": "SEE LICENSE IN license.txt",
6
6
  "main": "dist/esm/index.js",
7
7
  "types": "dist/ai-assistant.d.ts",
@@ -59,23 +59,23 @@
59
59
  }
60
60
  },
61
61
  "devDependencies": {
62
- "@genesislcap/foundation-testing": "14.409.0-FUI-2495.3",
63
- "@genesislcap/genx": "14.409.0-FUI-2495.3",
64
- "@genesislcap/rollup-builder": "14.409.0-FUI-2495.3",
65
- "@genesislcap/ts-builder": "14.409.0-FUI-2495.3",
66
- "@genesislcap/uvu-playwright-builder": "14.409.0-FUI-2495.3",
67
- "@genesislcap/vite-builder": "14.409.0-FUI-2495.3",
68
- "@genesislcap/webpack-builder": "14.409.0-FUI-2495.3",
62
+ "@genesislcap/foundation-testing": "14.409.0-FUI-2495.4",
63
+ "@genesislcap/genx": "14.409.0-FUI-2495.4",
64
+ "@genesislcap/rollup-builder": "14.409.0-FUI-2495.4",
65
+ "@genesislcap/ts-builder": "14.409.0-FUI-2495.4",
66
+ "@genesislcap/uvu-playwright-builder": "14.409.0-FUI-2495.4",
67
+ "@genesislcap/vite-builder": "14.409.0-FUI-2495.4",
68
+ "@genesislcap/webpack-builder": "14.409.0-FUI-2495.4",
69
69
  "@types/dompurify": "^3.0.5",
70
70
  "@types/marked": "^5.0.2"
71
71
  },
72
72
  "dependencies": {
73
- "@genesislcap/foundation-ai": "14.409.0-FUI-2495.3",
74
- "@genesislcap/foundation-logger": "14.409.0-FUI-2495.3",
75
- "@genesislcap/foundation-ui": "14.409.0-FUI-2495.3",
76
- "@genesislcap/foundation-utils": "14.409.0-FUI-2495.3",
77
- "@genesislcap/rapid-design-system": "14.409.0-FUI-2495.3",
78
- "@genesislcap/web-core": "14.409.0-FUI-2495.3",
73
+ "@genesislcap/foundation-ai": "14.409.0-FUI-2495.4",
74
+ "@genesislcap/foundation-logger": "14.409.0-FUI-2495.4",
75
+ "@genesislcap/foundation-ui": "14.409.0-FUI-2495.4",
76
+ "@genesislcap/foundation-utils": "14.409.0-FUI-2495.4",
77
+ "@genesislcap/rapid-design-system": "14.409.0-FUI-2495.4",
78
+ "@genesislcap/web-core": "14.409.0-FUI-2495.4",
79
79
  "dompurify": "^3.3.1",
80
80
  "marked": "^17.0.3"
81
81
  },
@@ -87,5 +87,5 @@
87
87
  "publishConfig": {
88
88
  "access": "public"
89
89
  },
90
- "gitHead": "e45ebf76f89b1217749fed0261f118b952c789bf"
90
+ "gitHead": "776a61e07afe56f5e9521ccee55034385cc03d44"
91
91
  }
@@ -197,6 +197,23 @@ export const styles = css`
197
197
  }
198
198
  }
199
199
 
200
+ .splash-wrapper {
201
+ position: absolute;
202
+ inset: 0;
203
+ z-index: 10;
204
+ overflow: hidden;
205
+ }
206
+
207
+ :host(:not([showing-splash])) .splash-wrapper {
208
+ pointer-events: none;
209
+ }
210
+
211
+ ::slotted([slot='splash']) {
212
+ display: block;
213
+ width: 100%;
214
+ height: 100%;
215
+ }
216
+
200
217
  .messages {
201
218
  flex: 1;
202
219
  overflow-y: auto;
@@ -207,6 +207,10 @@ export const FoundationAiAssistantTemplate = (
207
207
  `,
208
208
  )}
209
209
 
210
+ <div class="splash-wrapper" part="splash">
211
+ <slot name="splash"></slot>
212
+ </div>
213
+
210
214
  <div class="messages" part="messages">
211
215
 
212
216
  ${repeat(
package/src/main/main.ts CHANGED
@@ -102,6 +102,8 @@ export class FoundationAiAssistant extends GenesisElement {
102
102
  @observable showLoadingIndicator = false;
103
103
  /** Whether the settings panel is open. */
104
104
  @observable settingsOpen = false;
105
+ /** Whether the splash overlay is currently showing (no messages and showSplash is enabled). Reflected as a boolean attribute on the host. */
106
+ @observable showingSplash = false;
105
107
 
106
108
  private driver?: AiDriver;
107
109
  private loadingTimer: ReturnType<typeof setTimeout> | undefined;
@@ -241,6 +243,7 @@ export class FoundationAiAssistant extends GenesisElement {
241
243
  });
242
244
  }
243
245
 
246
+ this.syncShowingSplash();
244
247
  this.fetchSuggestions();
245
248
  logger.debug('FoundationAiAssistant connected');
246
249
  }
@@ -254,6 +257,25 @@ export class FoundationAiAssistant extends GenesisElement {
254
257
  this.driver = undefined;
255
258
  }
256
259
 
260
+ chatConfigChanged() {
261
+ this.syncShowingSplash();
262
+ }
263
+
264
+ showingSplashChanged() {
265
+ if (this.showingSplash) {
266
+ this.setAttribute('showing-splash', '');
267
+ } else {
268
+ this.removeAttribute('showing-splash');
269
+ }
270
+ }
271
+
272
+ // Sets the observable which reflects as a boolean attribute on the host via showingSplashChanged.
273
+ // Must be an attribute on the host (not a shadow DOM class) so consumer CSS can target slotted
274
+ // light DOM content — shadow DOM classes are not visible to external stylesheets.
275
+ private syncShowingSplash() {
276
+ this.showingSplash = !!this.chatConfig.ui?.showSplash && this.messages.length === 0;
277
+ }
278
+
257
279
  stateChanged() {
258
280
  this.syncShowHalo();
259
281
  }
@@ -272,6 +294,7 @@ export class FoundationAiAssistant extends GenesisElement {
272
294
  }
273
295
  }
274
296
  this.syncShowHalo();
297
+ this.syncShowingSplash();
275
298
  // Publish halo-start whenever a new toolCalls message arrives.
276
299
  if (this.showHalo !== 'no' && this.enabledAnimations?.includes('halo')) {
277
300
  const last = this.messages[this.messages.length - 1];