@genesislcap/ai-assistant 15.28.0 → 15.28.1-FUI-0.7
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.
- package/dist/custom-elements.json +15 -0
- package/dist/dts/components/chat-bubble/chat-bubble.template.d.ts.map +1 -1
- package/dist/dts/components/halo-overlay.d.ts +10 -0
- package/dist/dts/components/halo-overlay.d.ts.map +1 -1
- package/dist/dts/main/main.template.d.ts.map +1 -1
- package/dist/dts/suggestions/chat-suggestions.d.ts.map +1 -1
- package/dist/esm/components/chat-bubble/chat-bubble.template.js +5 -3
- package/dist/esm/components/halo-overlay.js +43 -7
- package/dist/esm/main/main.template.js +40 -8
- package/dist/esm/suggestions/chat-suggestions.js +4 -3
- package/package.json +16 -16
|
@@ -1209,6 +1209,21 @@
|
|
|
1209
1209
|
},
|
|
1210
1210
|
"privacy": "private"
|
|
1211
1211
|
},
|
|
1212
|
+
{
|
|
1213
|
+
"kind": "method",
|
|
1214
|
+
"name": "activeChanged",
|
|
1215
|
+
"description": "Start/stop with `active`, so an idle overlay costs nothing.\n\nGuarded on `isConnected` because FAST invokes attribute-changed callbacks during\ninitialisation, before the element is in the document — `connectedCallback` is what decides\nfor an element that mounts already-active."
|
|
1216
|
+
},
|
|
1217
|
+
{
|
|
1218
|
+
"kind": "method",
|
|
1219
|
+
"name": "startAnimation",
|
|
1220
|
+
"privacy": "private"
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"kind": "method",
|
|
1224
|
+
"name": "stopAnimation",
|
|
1225
|
+
"privacy": "private"
|
|
1226
|
+
},
|
|
1212
1227
|
{
|
|
1213
1228
|
"kind": "method",
|
|
1214
1229
|
"name": "tick",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-bubble.template.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-bubble/chat-bubble.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAQ,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgBlD,eAAO,MAAM,oBAAoB,QAAO,YAAY,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"chat-bubble.template.d.ts","sourceRoot":"","sources":["../../../../src/components/chat-bubble/chat-bubble.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAQ,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgBlD,eAAO,MAAM,oBAAoB,QAAO,YAAY,CAAC,YAAY,CAmDhE,CAAC"}
|
|
@@ -31,8 +31,18 @@ export declare class AiHaloOverlay extends GenesisElement {
|
|
|
31
31
|
private angle;
|
|
32
32
|
private lastTime?;
|
|
33
33
|
private animFrame?;
|
|
34
|
+
/**
|
|
35
|
+
* Start/stop with `active`, so an idle overlay costs nothing.
|
|
36
|
+
*
|
|
37
|
+
* Guarded on `isConnected` because FAST invokes attribute-changed callbacks during
|
|
38
|
+
* initialisation, before the element is in the document — `connectedCallback` is what decides
|
|
39
|
+
* for an element that mounts already-active.
|
|
40
|
+
*/
|
|
41
|
+
activeChanged(): void;
|
|
34
42
|
connectedCallback(): void;
|
|
35
43
|
disconnectedCallback(): void;
|
|
44
|
+
private startAnimation;
|
|
45
|
+
private stopAnimation;
|
|
36
46
|
private tick;
|
|
37
47
|
}
|
|
38
48
|
//# sourceMappingURL=halo-overlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"halo-overlay.d.ts","sourceRoot":"","sources":["../../../src/components/halo-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,cAAc,EAAQ,MAAM,uBAAuB,CAAC;AAwBvF;;;;;;;;;;;;GAYG;AACH,qBA0Ea,aAAc,SAAQ,cAAc;IACpB,MAAM,EAAE,OAAO,CAAS;IACnD,+FAA+F;IACpC,KAAK,EAAE,MAAM,CAAsB;IAC9F,qDAAqD;IAC/C,SAAS,EAAE,IAAI,GAAG,KAAK,CAAQ;IACrC,0CAA0C;IAE1C,UAAU,EAAE,MAAM,CAA4B;IAC9C,+CAA+C;IAE/C,WAAW,EAAE,MAAM,CAA6B;IAChD,2GAA2G;IAE3G,UAAU,EAAE,MAAM,CAA4B;IAE9C,iBAAiB;IAIjB,kBAAkB;IAIlB,iBAAiB;
|
|
1
|
+
{"version":3,"file":"halo-overlay.d.ts","sourceRoot":"","sources":["../../../src/components/halo-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,cAAc,EAAQ,MAAM,uBAAuB,CAAC;AAwBvF;;;;;;;;;;;;GAYG;AACH,qBA0Ea,aAAc,SAAQ,cAAc;IACpB,MAAM,EAAE,OAAO,CAAS;IACnD,+FAA+F;IACpC,KAAK,EAAE,MAAM,CAAsB;IAC9F,qDAAqD;IAC/C,SAAS,EAAE,IAAI,GAAG,KAAK,CAAQ;IACrC,0CAA0C;IAE1C,UAAU,EAAE,MAAM,CAA4B;IAC9C,+CAA+C;IAE/C,WAAW,EAAE,MAAM,CAA6B;IAChD,2GAA2G;IAE3G,UAAU,EAAE,MAAM,CAA4B;IAE9C,iBAAiB;IAIjB,kBAAkB;IAIlB,iBAAiB;IAkBjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B;;;;;;OAMG;IACH,aAAa;IAMb,iBAAiB;IAKjB,oBAAoB;IAKpB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,IAAI;CAiBb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.template.d.ts","sourceRoot":"","sources":["../../../src/main/main.template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAuC,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQ1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"main.template.d.ts","sourceRoot":"","sources":["../../../src/main/main.template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAuC,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQ1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAsIpD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,wBAAwB,kDAWpC,CAAC;AAoJF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,oBAAoB,GAAI,GAAG,qBAAqB,KAAG,MAYlD,CAAC;AAEf;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,mBAAmB,GAAI,GAAG,qBAAqB,KAAG,MAAM,GAAG,IACpB,CAAC;AAyJrD,eAAO,MAAM,6BAA6B,GACxC,oBAAoB,MAAM,KACzB,YAAY,CAAC,qBAAqB,CA8rBpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-suggestions.d.ts","sourceRoot":"","sources":["../../../src/suggestions/chat-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EAMf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-suggestions.d.ts","sourceRoot":"","sources":["../../../src/suggestions/chat-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EAMf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAwJ3D,qBAKa,eAAgB,SAAQ,cAAc;IAEjD,KAAK,EAAE,gBAAgB,CAAsB;IAE7C;;;;OAIG;IACkD,UAAU,UAAS;IAExE,YAAY,IAAI,IAAI;IAKpB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAGhD"}
|
|
@@ -17,6 +17,7 @@ export const AiChatBubbleTemplate = () => {
|
|
|
17
17
|
${when((x) => !x.dialogOpen, html `
|
|
18
18
|
<div
|
|
19
19
|
class="bubble ${(x) => (x.hovered ? 'hovered' : '')}"
|
|
20
|
+
part="bubble"
|
|
20
21
|
style="${(x) => `translate: ${x.bubbleLeft}px ${x.bubbleTop}px`}"
|
|
21
22
|
${ref('bubbleEl')}
|
|
22
23
|
@mousedown="${(x, c) => x.onBubbleMouseDown(c.event)}"
|
|
@@ -27,8 +28,8 @@ export const AiChatBubbleTemplate = () => {
|
|
|
27
28
|
<img src="${(x) => x.imageSrc}" alt="AI" draggable="false" />
|
|
28
29
|
`)}
|
|
29
30
|
${when((x) => !x.imageSrc, genesisIconTemplate)}
|
|
30
|
-
<div class="pulse-ring"></div>
|
|
31
|
-
<div class="tooltip" style="${(x) => x.tooltipStyle}" ${ref('tooltipEl')}>
|
|
31
|
+
<div class="pulse-ring" part="pulse-ring"></div>
|
|
32
|
+
<div class="tooltip" part="tooltip" style="${(x) => x.tooltipStyle}" ${ref('tooltipEl')}>
|
|
32
33
|
${(x) => x.title}
|
|
33
34
|
</div>
|
|
34
35
|
</div>
|
|
@@ -41,11 +42,12 @@ export const AiChatBubbleTemplate = () => {
|
|
|
41
42
|
(x) => (x.dialogOpen ? [x] : []), html `
|
|
42
43
|
<div
|
|
43
44
|
class="dialog"
|
|
45
|
+
part="dialog"
|
|
44
46
|
style="${(x) => `translate: ${x.dialogLeft}px ${x.dialogTop}px; width: ${x.dialogWidth}px; height: ${x.dialogHeight}px`}"
|
|
45
47
|
@chat-header-mousedown="${(x, c) => x.onDialogHeaderMouseDown(c.event)}"
|
|
46
48
|
${ref('dialogEl')}
|
|
47
49
|
>
|
|
48
|
-
<div class="dialog-content">
|
|
50
|
+
<div class="dialog-content" part="dialog-content">
|
|
49
51
|
<slot name="dialog-content" ${slotted('dialogContent')}></slot>
|
|
50
52
|
</div>
|
|
51
53
|
</div>
|
|
@@ -55,17 +55,45 @@ let AiHaloOverlay = AiHaloOverlay_1 = class AiHaloOverlay extends GenesisElement
|
|
|
55
55
|
glowSpreadChanged() {
|
|
56
56
|
this.style.setProperty('--halo-glow-spread', `${this.glowSpread}%`);
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Start/stop with `active`, so an idle overlay costs nothing.
|
|
60
|
+
*
|
|
61
|
+
* Guarded on `isConnected` because FAST invokes attribute-changed callbacks during
|
|
62
|
+
* initialisation, before the element is in the document — `connectedCallback` is what decides
|
|
63
|
+
* for an element that mounts already-active.
|
|
64
|
+
*/
|
|
65
|
+
activeChanged() {
|
|
66
|
+
if (!this.isConnected)
|
|
67
|
+
return;
|
|
68
|
+
if (this.active)
|
|
69
|
+
this.startAnimation();
|
|
70
|
+
else
|
|
71
|
+
this.stopAnimation();
|
|
72
|
+
}
|
|
58
73
|
connectedCallback() {
|
|
59
74
|
super.connectedCallback();
|
|
60
|
-
this.
|
|
75
|
+
if (this.active)
|
|
76
|
+
this.startAnimation();
|
|
61
77
|
}
|
|
62
78
|
disconnectedCallback() {
|
|
63
79
|
super.disconnectedCallback();
|
|
80
|
+
this.stopAnimation();
|
|
81
|
+
}
|
|
82
|
+
startAnimation() {
|
|
83
|
+
// Re-entrant: `activeChanged` can fire for a value that is already applied, and a second
|
|
84
|
+
// scheduled frame would double the rotation speed and leak the first handle.
|
|
85
|
+
if (this.animFrame !== undefined)
|
|
86
|
+
return;
|
|
87
|
+
this.tick();
|
|
88
|
+
}
|
|
89
|
+
stopAnimation() {
|
|
64
90
|
if (this.animFrame !== undefined) {
|
|
65
91
|
cancelAnimationFrame(this.animFrame);
|
|
66
92
|
this.animFrame = undefined;
|
|
67
93
|
}
|
|
68
|
-
// Reset the clock so a later
|
|
94
|
+
// Reset the clock so a later restart doesn't apply one huge time delta. `angle` is
|
|
95
|
+
// deliberately NOT reset: the halo fades out on opacity, so resuming from where it stopped
|
|
96
|
+
// avoids a visible jump when it comes back.
|
|
69
97
|
this.lastTime = undefined;
|
|
70
98
|
}
|
|
71
99
|
tick(now) {
|
|
@@ -86,11 +114,19 @@ let AiHaloOverlay = AiHaloOverlay_1 = class AiHaloOverlay extends GenesisElement
|
|
|
86
114
|
this.animFrame = requestAnimationFrame((t) => this.tick(t));
|
|
87
115
|
}
|
|
88
116
|
};
|
|
89
|
-
// TODO: The rAF loop is fine for demos but
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
//
|
|
117
|
+
// TODO: The rAF loop is fine for demos but runs on the main thread, so heavy JS work can cause
|
|
118
|
+
// the animation to stutter. Once @property inside Shadow DOM has solid cross-browser support,
|
|
119
|
+
// consider switching back to a CSS @keyframes approach and removing
|
|
120
|
+
// connectedCallback/disconnectedCallback/tick().
|
|
121
|
+
//
|
|
122
|
+
// The loop is GATED ON `active` (see startAnimation/stopAnimation). It used to tick
|
|
123
|
+
// unconditionally from connectedCallback, which was written off as "negligible but non-zero"
|
|
124
|
+
// idle cost — that undersold it. Every tick writes `--halo-angle` as an INLINE STYLE, so an
|
|
125
|
+
// idle overlay mutates its own style attribute ~60x a second for the lifetime of the page.
|
|
126
|
+
// Hosts mount these permanently and only toggle `active` (activity-halo and the assistant's
|
|
127
|
+
// own chrome both do), so a typical app had several overlays rewriting inline styles forever
|
|
128
|
+
// while showing nothing. The visible cost is in devtools: the Elements panel repaints on every
|
|
129
|
+
// mutation, which makes inspecting or live-editing anywhere in the tree impractical.
|
|
94
130
|
AiHaloOverlay.FULL_ROTATION_DEG = 360;
|
|
95
131
|
__decorate([
|
|
96
132
|
attr({ mode: 'boolean' })
|
|
@@ -47,10 +47,19 @@ const assistantAvatarTemplate = html `
|
|
|
47
47
|
const parent = c.parent;
|
|
48
48
|
return parent.imageSrc
|
|
49
49
|
? html `
|
|
50
|
-
<img
|
|
50
|
+
<img
|
|
51
|
+
src="${() => parent.imageSrc}"
|
|
52
|
+
alt="Assistant"
|
|
53
|
+
class="avatar-img"
|
|
54
|
+
part="avatar-img"
|
|
55
|
+
/>
|
|
51
56
|
`
|
|
52
57
|
: html `
|
|
53
|
-
<span
|
|
58
|
+
<span
|
|
59
|
+
class="avatar-icon"
|
|
60
|
+
part="avatar-icon"
|
|
61
|
+
:innerHTML="${() => parent.assistantIconSafe}"
|
|
62
|
+
></span>
|
|
54
63
|
`;
|
|
55
64
|
}}
|
|
56
65
|
`;
|
|
@@ -59,10 +68,14 @@ const userAvatarTemplate = html `
|
|
|
59
68
|
const parent = c.parent;
|
|
60
69
|
return parent.userImageSrc
|
|
61
70
|
? html `
|
|
62
|
-
<img src="${() => parent.userImageSrc}" alt="You" class="avatar-img" />
|
|
71
|
+
<img src="${() => parent.userImageSrc}" alt="You" class="avatar-img" part="avatar-img" />
|
|
63
72
|
`
|
|
64
73
|
: html `
|
|
65
|
-
<span
|
|
74
|
+
<span
|
|
75
|
+
class="avatar-icon"
|
|
76
|
+
part="avatar-icon"
|
|
77
|
+
:innerHTML="${() => parent.userIconSafe}"
|
|
78
|
+
></span>
|
|
66
79
|
`;
|
|
67
80
|
}}
|
|
68
81
|
`;
|
|
@@ -513,7 +526,10 @@ ${(tc) => { var _a; return (((_a = tc.foldPath) === null || _a === void 0 ? void
|
|
|
513
526
|
<div
|
|
514
527
|
class="message-row ${(m) => messageType(m)} ${(m) => m.interaction ? `present-${interactionPresentation(m)}` : ''}"
|
|
515
528
|
>
|
|
516
|
-
<div
|
|
529
|
+
<div
|
|
530
|
+
class="avatar ${(m) => messageType(m)}"
|
|
531
|
+
part="${(m) => `avatar avatar-${messageType(m)}`}"
|
|
532
|
+
>
|
|
517
533
|
${when(
|
|
518
534
|
// Keyed on messageType (not raw role) so a synthetic-user message,
|
|
519
535
|
// which renders as 'user', gets the user avatar rather than the
|
|
@@ -528,8 +544,8 @@ ${(tc) => { var _a; return (((_a = tc.foldPath) === null || _a === void 0 ? void
|
|
|
528
544
|
// A 'bare' interaction owns its full presentation — suppress the
|
|
529
545
|
// host sender label. Every other message keeps it.
|
|
530
546
|
(m) => !(m.interaction && interactionPresentation(m) === 'bare'), html `
|
|
531
|
-
<div class="sender">
|
|
532
|
-
<span class="sender-label">
|
|
547
|
+
<div class="sender" part="sender">
|
|
548
|
+
<span class="sender-label" part="sender-label">
|
|
533
549
|
${(m, c) => {
|
|
534
550
|
var _a;
|
|
535
551
|
return messageType(m) === 'ai-function' &&
|
|
@@ -547,7 +563,7 @@ ${(tc) => { var _a; return (((_a = tc.foldPath) === null || _a === void 0 ? void
|
|
|
547
563
|
c.parent.timestampDisplay !== 'off', messageTimestampTemplate)}
|
|
548
564
|
</div>
|
|
549
565
|
`)}
|
|
550
|
-
<div class="content">
|
|
566
|
+
<div class="content" part="content">
|
|
551
567
|
${when((m) => m.content, html `
|
|
552
568
|
<ai-chat-markdown :content="${(m) => m.content}"></ai-chat-markdown>
|
|
553
569
|
`)}
|
|
@@ -833,12 +849,27 @@ ${(tc) => { var _a; return (((_a = tc.foldPath) === null || _a === void 0 ? void
|
|
|
833
849
|
${when((x) => !!x.headerTitle, html `
|
|
834
850
|
<span class="chat-title" part="chat-title">${(x) => x.headerTitle}</span>
|
|
835
851
|
`)}
|
|
852
|
+
<!--
|
|
853
|
+
The two buttons below re-publish rapid-button's inner parts (control, content) into
|
|
854
|
+
THIS component's part namespace via exportparts.
|
|
855
|
+
|
|
856
|
+
Without it they are unreachable by an embedding app: part() crosses exactly one shadow
|
|
857
|
+
boundary, and the control sits two away (app -> foundation-ai-assistant ->
|
|
858
|
+
rapid-button -> control). Exposing only the button host leaves an app able to size the
|
|
859
|
+
box but not the padded control inside it, which is how Genesis Create ended up sizing
|
|
860
|
+
the host and clipping the overflow to flatten these buttons - a workaround for a
|
|
861
|
+
missing hook rather than a styling choice.
|
|
862
|
+
|
|
863
|
+
Named with the owning button as a prefix so the namespace stays legible as more parts
|
|
864
|
+
are exported, and so control does not collide across buttons.
|
|
865
|
+
-->
|
|
836
866
|
<div class="header-actions" part="header-actions">
|
|
837
867
|
<slot name="header-actions-extra"></slot>
|
|
838
868
|
${when((x) => !!x.popoutMode, html `
|
|
839
869
|
<${buttonTag}
|
|
840
870
|
class="popout-button"
|
|
841
871
|
part="popout-button"
|
|
872
|
+
exportparts="control: popout-button-control, content: popout-button-content"
|
|
842
873
|
appearance="stealth"
|
|
843
874
|
title="${(x) => (x.popoutMode === 'expand' ? 'Expand to panel' : 'Pop back to bubble')}"
|
|
844
875
|
?disabled=${(x) => x.hasActivePendingInteraction}
|
|
@@ -848,6 +879,7 @@ ${(tc) => { var _a; return (((_a = tc.foldPath) === null || _a === void 0 ? void
|
|
|
848
879
|
<${buttonTag}
|
|
849
880
|
class="settings-button"
|
|
850
881
|
part="settings-button"
|
|
882
|
+
exportparts="control: settings-button-control, content: settings-button-content"
|
|
851
883
|
appearance="stealth"
|
|
852
884
|
title="Settings"
|
|
853
885
|
aria-haspopup="dialog"
|
|
@@ -3,17 +3,18 @@ import { attr, customElement, GenesisElement, observable, html, css, repeat, whe
|
|
|
3
3
|
const PILL_ANIMATION_STAGGER_MS = 70;
|
|
4
4
|
const template = html `
|
|
5
5
|
${when((x) => x.state.status === 'loading', html `
|
|
6
|
-
<div class="suggestions-container">
|
|
6
|
+
<div class="suggestions-container" part="suggestions-container">
|
|
7
7
|
${repeat(() => Array.from({ length: 3 }), html `
|
|
8
|
-
<div class="suggestion-placeholder"></div>
|
|
8
|
+
<div class="suggestion-placeholder" part="suggestion-placeholder"></div>
|
|
9
9
|
`)}
|
|
10
10
|
</div>
|
|
11
11
|
`)}
|
|
12
12
|
${when((x) => x.state.status === 'loaded', html `
|
|
13
|
-
<div class="suggestions-container">
|
|
13
|
+
<div class="suggestions-container" part="suggestions-container">
|
|
14
14
|
${repeat((x) => x.state.suggestions, html `
|
|
15
15
|
<button
|
|
16
16
|
class="suggestion-pill"
|
|
17
|
+
part="suggestion-pill"
|
|
17
18
|
style="animation-delay: ${(_, c) => c.index * PILL_ANIMATION_STAGGER_MS}ms"
|
|
18
19
|
@click="${(suggestion, c) => c.parent.handleSuggestionClick(suggestion)}"
|
|
19
20
|
>
|
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": "15.28.0",
|
|
4
|
+
"version": "15.28.1-FUI-0.7",
|
|
5
5
|
"license": "SEE LICENSE IN license.txt",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
7
7
|
"types": "dist/ai-assistant.d.ts",
|
|
@@ -74,26 +74,26 @@
|
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@genesislcap/foundation-testing": "15.28.0",
|
|
78
|
-
"@genesislcap/genx": "15.28.0",
|
|
79
|
-
"@genesislcap/rollup-builder": "15.28.0",
|
|
80
|
-
"@genesislcap/ts-builder": "15.28.0",
|
|
81
|
-
"@genesislcap/uvu-playwright-builder": "15.28.0",
|
|
82
|
-
"@genesislcap/vite-builder": "15.28.0",
|
|
83
|
-
"@genesislcap/webpack-builder": "15.28.0",
|
|
77
|
+
"@genesislcap/foundation-testing": "15.28.1-FUI-0.7",
|
|
78
|
+
"@genesislcap/genx": "15.28.1-FUI-0.7",
|
|
79
|
+
"@genesislcap/rollup-builder": "15.28.1-FUI-0.7",
|
|
80
|
+
"@genesislcap/ts-builder": "15.28.1-FUI-0.7",
|
|
81
|
+
"@genesislcap/uvu-playwright-builder": "15.28.1-FUI-0.7",
|
|
82
|
+
"@genesislcap/vite-builder": "15.28.1-FUI-0.7",
|
|
83
|
+
"@genesislcap/webpack-builder": "15.28.1-FUI-0.7",
|
|
84
84
|
"@types/dompurify": "^3.0.5",
|
|
85
85
|
"@types/marked": "^5.0.2",
|
|
86
86
|
"esbuild": "0.25.12"
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
|
-
"@genesislcap/foundation-ai": "15.28.0",
|
|
90
|
-
"@genesislcap/foundation-logger": "15.28.0",
|
|
91
|
-
"@genesislcap/foundation-notifications": "15.28.0",
|
|
92
|
-
"@genesislcap/foundation-redux": "15.28.0",
|
|
93
|
-
"@genesislcap/foundation-ui": "15.28.0",
|
|
94
|
-
"@genesislcap/foundation-utils": "15.28.0",
|
|
95
|
-
"@genesislcap/rapid-design-system": "15.28.0",
|
|
96
|
-
"@genesislcap/web-core": "15.28.0",
|
|
89
|
+
"@genesislcap/foundation-ai": "15.28.1-FUI-0.7",
|
|
90
|
+
"@genesislcap/foundation-logger": "15.28.1-FUI-0.7",
|
|
91
|
+
"@genesislcap/foundation-notifications": "15.28.1-FUI-0.7",
|
|
92
|
+
"@genesislcap/foundation-redux": "15.28.1-FUI-0.7",
|
|
93
|
+
"@genesislcap/foundation-ui": "15.28.1-FUI-0.7",
|
|
94
|
+
"@genesislcap/foundation-utils": "15.28.1-FUI-0.7",
|
|
95
|
+
"@genesislcap/rapid-design-system": "15.28.1-FUI-0.7",
|
|
96
|
+
"@genesislcap/web-core": "15.28.1-FUI-0.7",
|
|
97
97
|
"dompurify": "^3.3.1",
|
|
98
98
|
"marked": "^17.0.3"
|
|
99
99
|
},
|