@yak-io/angular 0.3.0 → 0.4.0
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/README.md +103 -84
- package/dist/service.d.ts +19 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +13 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
# @yak-io/angular
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 📚 **Full documentation:** https://docs.yak.io/docs/sdks/angular
|
|
4
|
+
>
|
|
5
|
+
> 🤖 **For LLMs / AI agents:** https://docs.yak.io/llms.txt
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
Angular SDK for [Yak](https://docs.yak.io) — an embeddable AI assistant (text chat **and** push-to-talk voice) for web apps. `createYakProvider` returns a `YakApi`; bridge its state into Angular signals (or RxJS) with `subscribeToState`.
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
10
|
pnpm add @yak-io/angular
|
|
9
11
|
```
|
|
10
12
|
|
|
13
|
+
## Exports
|
|
14
|
+
|
|
15
|
+
| Export | Kind | Purpose |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `createYakProvider(options)` | fn | Create a widget instance. Returns a `YakApi` with `mount`/`destroy` + `subscribeToState`. |
|
|
18
|
+
| `enableYakLogging` / `disableYakLogging` / `isYakLoggingEnabled` | fn | Toggle verbose SDK logging. |
|
|
19
|
+
| Types | — | `YakProviderOptions`, `YakApi`, `YakState`, `ToolCallEventHandler`, plus core types from `@yak-io/javascript`. |
|
|
20
|
+
|
|
11
21
|
## Quickstart
|
|
12
22
|
|
|
13
23
|
### 1. Initialize in your root component
|
|
@@ -26,32 +36,27 @@ import { environment } from "../environments/environment";
|
|
|
26
36
|
})
|
|
27
37
|
export class AppComponent implements OnInit, OnDestroy {
|
|
28
38
|
private router = inject(Router);
|
|
29
|
-
private yak: YakApi
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
onRedirect: (path) => {
|
|
51
|
-
this.router.navigateByUrl(path);
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
}
|
|
39
|
+
private yak: YakApi = createYakProvider({
|
|
40
|
+
appId: environment.yakAppId,
|
|
41
|
+
mode: "both", // "chat" | "voice" | "both" — default "chat"
|
|
42
|
+
trigger: true, // show the floating launcher pill
|
|
43
|
+
theme: { position: "bottom-right", colorMode: "system" },
|
|
44
|
+
getConfig: async () => {
|
|
45
|
+
const res = await fetch("/api/yak");
|
|
46
|
+
return res.json();
|
|
47
|
+
},
|
|
48
|
+
onToolCall: async (name, args) => {
|
|
49
|
+
const res = await fetch("/api/yak", {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: { "Content-Type": "application/json" },
|
|
52
|
+
body: JSON.stringify({ name, args }),
|
|
53
|
+
});
|
|
54
|
+
const data = await res.json();
|
|
55
|
+
if (!data.ok) throw new Error(data.error);
|
|
56
|
+
return data.result;
|
|
57
|
+
},
|
|
58
|
+
onRedirect: (path) => this.router.navigateByUrl(path),
|
|
59
|
+
});
|
|
55
60
|
|
|
56
61
|
ngOnInit() {
|
|
57
62
|
this.yak.mount();
|
|
@@ -63,9 +68,7 @@ export class AppComponent implements OnInit, OnDestroy {
|
|
|
63
68
|
}
|
|
64
69
|
```
|
|
65
70
|
|
|
66
|
-
### 2. Share via
|
|
67
|
-
|
|
68
|
-
Create a service to share the widget API across components:
|
|
71
|
+
### 2. Share via a service
|
|
69
72
|
|
|
70
73
|
```ts
|
|
71
74
|
// yak.service.ts
|
|
@@ -76,95 +79,108 @@ import type { YakApi } from "@yak-io/angular";
|
|
|
76
79
|
export class YakService {
|
|
77
80
|
private yak: YakApi | null = null;
|
|
78
81
|
readonly isOpen = signal(false);
|
|
79
|
-
readonly isReady = signal(false);
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
register(yak: YakApi) {
|
|
82
84
|
this.yak = yak;
|
|
83
|
-
yak.subscribeToState((
|
|
84
|
-
this.isOpen.set(isOpen);
|
|
85
|
-
this.isReady.set(isReady);
|
|
86
|
-
});
|
|
85
|
+
yak.subscribeToState((state) => this.isOpen.set(state.isOpen));
|
|
87
86
|
}
|
|
88
87
|
|
|
89
88
|
open() { this.yak?.open(); }
|
|
90
|
-
close() { this.yak?.close(); }
|
|
91
89
|
openWithPrompt(prompt: string) { this.yak?.openWithPrompt(prompt); }
|
|
90
|
+
voiceToggle() { return this.yak?.voiceToggle(); }
|
|
92
91
|
}
|
|
93
92
|
```
|
|
94
93
|
|
|
95
|
-
|
|
94
|
+
Call `yakService.register(this.yak)` from your root component, then inject `YakService` anywhere:
|
|
96
95
|
|
|
97
96
|
```ts
|
|
98
|
-
// any.component.ts
|
|
99
|
-
import { Component, inject } from "@angular/core";
|
|
100
|
-
import { YakService } from "./yak.service";
|
|
101
|
-
|
|
102
97
|
@Component({
|
|
103
|
-
template:
|
|
104
|
-
|
|
105
|
-
<p *ngIf="yakService.isOpen()">Chat is open</p>
|
|
106
|
-
`,
|
|
98
|
+
template: `<button (click)="yak.open()">Open chat</button>
|
|
99
|
+
<span *ngIf="yak.isOpen()">Chat is open</span>`,
|
|
107
100
|
})
|
|
108
|
-
export class
|
|
109
|
-
|
|
101
|
+
export class HeaderComponent {
|
|
102
|
+
yak = inject(YakService);
|
|
110
103
|
}
|
|
111
104
|
```
|
|
112
105
|
|
|
113
|
-
##
|
|
106
|
+
## Voice
|
|
114
107
|
|
|
115
|
-
|
|
108
|
+
Set `mode: "voice"` or `mode: "both"`, then drive the session. `voiceStart()` must run from a user gesture (browser mic requirement). Voice state arrives through `subscribeToState` as `state.voiceMachine`:
|
|
116
109
|
|
|
117
|
-
|
|
110
|
+
```ts
|
|
111
|
+
yak.subscribeToState((state) => {
|
|
112
|
+
this.voiceState.set(state.voiceMachine.state); // "idle" | "listening" | "speaking" | ...
|
|
113
|
+
});
|
|
114
|
+
// button handler:
|
|
115
|
+
this.yak.voiceToggle();
|
|
116
|
+
```
|
|
118
117
|
|
|
119
|
-
|
|
118
|
+
## Tool events
|
|
120
119
|
|
|
121
|
-
|
|
120
|
+
```ts
|
|
121
|
+
yak.subscribeToToolEvents((event) => {
|
|
122
|
+
// { name, args, ok, result?, error? }
|
|
123
|
+
if (event.ok && event.name.startsWith("tasks.")) this.refreshTasks();
|
|
124
|
+
});
|
|
125
|
+
```
|
|
122
126
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
| `trigger` | `boolean \| TriggerButtonConfig` |
|
|
127
|
+
## API reference
|
|
128
|
+
|
|
129
|
+
### `createYakProvider(options)`
|
|
130
|
+
|
|
131
|
+
Returns a `YakApi`. Call `yak.mount()` in `ngOnInit()` and `yak.destroy()` in `ngOnDestroy()`.
|
|
132
|
+
|
|
133
|
+
| Option | Type | Default | Description |
|
|
134
|
+
| --- | --- | --- | --- |
|
|
135
|
+
| `appId` | `string` | — | Your Yak app ID (required). |
|
|
136
|
+
| `mode` | `"chat" \| "voice" \| "both"` | `"chat"` | Which surfaces the widget exposes. |
|
|
137
|
+
| `trigger` | `boolean \| TriggerButtonConfig` | `false` | Show the floating pill. **Set `true`** to display it; `TriggerButtonConfig` recolors it. |
|
|
138
|
+
| `getConfig` | `ChatConfigProvider` | — | Async provider of routes + tools. Called on open / voice start. |
|
|
139
|
+
| `onToolCall` | `ToolCallHandler` | — | Executes a tool the assistant calls. |
|
|
140
|
+
| `onGraphQLSchemaCall` | `GraphQLSchemaHandler` | — | Handles GraphQL schema tool calls. |
|
|
141
|
+
| `onRESTSchemaCall` | `RESTSchemaHandler` | — | Handles REST/OpenAPI schema tool calls. |
|
|
142
|
+
| `theme` | `Theme` | — | Position, color mode, and colors. |
|
|
143
|
+
| `onRedirect` | `(path: string) => void` | `window.location.assign` | Navigation handler. |
|
|
144
|
+
| `disableRestartButton` | `boolean` | `false` | Hide the restart-session button. |
|
|
134
145
|
|
|
135
146
|
### `YakApi`
|
|
136
147
|
|
|
148
|
+
State (`isOpen`/`isReady`/`voiceMachine`) is read via the `subscribeToState` callback — Angular has no built-in reactive primitive the SDK can return, so wire it into signals or RxJS yourself.
|
|
149
|
+
|
|
137
150
|
```ts
|
|
151
|
+
type YakState = {
|
|
152
|
+
isOpen: boolean;
|
|
153
|
+
isReady: boolean;
|
|
154
|
+
chatLoading: boolean;
|
|
155
|
+
voiceMachine: VoiceMachine;
|
|
156
|
+
voiceLoading: boolean;
|
|
157
|
+
};
|
|
158
|
+
|
|
138
159
|
type YakApi = {
|
|
139
|
-
readonly isOpen: boolean;
|
|
140
|
-
readonly isReady: boolean;
|
|
160
|
+
readonly isOpen: boolean; // snapshot — use subscribeToState for reactivity
|
|
161
|
+
readonly isReady: boolean; // snapshot
|
|
162
|
+
readonly chatLoading: boolean; // snapshot — isOpen && !isReady
|
|
163
|
+
readonly voiceMachine: VoiceMachine; // snapshot — { state, errorMessage? }
|
|
164
|
+
readonly voiceLoading: boolean; // snapshot — state === "connecting"
|
|
141
165
|
open: () => void;
|
|
142
166
|
close: () => void;
|
|
143
167
|
openWithPrompt: (prompt: string) => void;
|
|
168
|
+
voiceStart: () => Promise<void>;
|
|
169
|
+
voiceStop: () => Promise<void>;
|
|
170
|
+
voiceToggle: () => Promise<void>;
|
|
144
171
|
subscribeToToolEvents: (handler: ToolCallEventHandler) => () => void;
|
|
145
|
-
subscribeToState: (handler: (state:
|
|
146
|
-
mount: () => void; //
|
|
147
|
-
destroy: () => void; //
|
|
172
|
+
subscribeToState: (handler: (state: YakState) => void) => () => void;
|
|
173
|
+
mount: () => void; // call in ngOnInit()
|
|
174
|
+
destroy: () => void; // call in ngOnDestroy()
|
|
148
175
|
};
|
|
149
176
|
```
|
|
150
177
|
|
|
151
|
-
Use `subscribeToState` to react to state changes — wire it to Angular signals, `BehaviorSubject`s, or change detection:
|
|
152
|
-
|
|
153
|
-
```ts
|
|
154
|
-
yak.subscribeToState(({ isOpen, isReady }) => {
|
|
155
|
-
this.isOpen.set(isOpen);
|
|
156
|
-
this.changeDetector.markForCheck();
|
|
157
|
-
});
|
|
158
|
-
```
|
|
159
|
-
|
|
160
178
|
## Logging
|
|
161
179
|
|
|
162
180
|
```ts
|
|
163
181
|
import { enableYakLogging, disableYakLogging, isYakLoggingEnabled } from "@yak-io/angular";
|
|
164
182
|
|
|
165
|
-
enableYakLogging();
|
|
166
|
-
disableYakLogging(); // Disable SDK logs
|
|
167
|
-
isYakLoggingEnabled(); // → boolean
|
|
183
|
+
enableYakLogging(); // verbose SDK logs
|
|
168
184
|
```
|
|
169
185
|
|
|
170
186
|
## Types
|
|
@@ -173,16 +189,19 @@ isYakLoggingEnabled(); // → boolean
|
|
|
173
189
|
import type {
|
|
174
190
|
YakProviderOptions,
|
|
175
191
|
YakApi,
|
|
192
|
+
YakState,
|
|
176
193
|
ToolCallEventHandler,
|
|
177
194
|
ChatConfigProvider,
|
|
178
195
|
ToolCallHandler,
|
|
179
196
|
ToolCallEvent,
|
|
180
197
|
Theme,
|
|
181
|
-
|
|
198
|
+
WidgetMode,
|
|
182
199
|
WidgetPosition,
|
|
200
|
+
VoiceState,
|
|
201
|
+
VoiceMachine,
|
|
183
202
|
} from "@yak-io/angular";
|
|
184
203
|
```
|
|
185
204
|
|
|
186
205
|
## License
|
|
187
206
|
|
|
188
|
-
Proprietary — see LICENSE
|
|
207
|
+
Proprietary — see [LICENSE](./LICENSE).
|
package/dist/service.d.ts
CHANGED
|
@@ -15,22 +15,41 @@ export type YakProviderOptions = {
|
|
|
15
15
|
export type YakState = {
|
|
16
16
|
isOpen: boolean;
|
|
17
17
|
isReady: boolean;
|
|
18
|
+
chatLoading: boolean;
|
|
18
19
|
voiceMachine: VoiceMachine;
|
|
20
|
+
voiceLoading: boolean;
|
|
19
21
|
};
|
|
22
|
+
/** Handle for controlling the Yak widget — chat + voice — from Angular. */
|
|
20
23
|
export type YakApi = {
|
|
24
|
+
/** Whether the chat panel is currently open. */
|
|
21
25
|
readonly isOpen: boolean;
|
|
26
|
+
/** Whether the chat iframe is ready to receive messages. */
|
|
22
27
|
readonly isReady: boolean;
|
|
28
|
+
/** Whether the chat is opening but not yet interactive (`isOpen && !isReady`). */
|
|
29
|
+
readonly chatLoading: boolean;
|
|
30
|
+
/** Current voice state-machine snapshot. `idle` when mode is `chat`. */
|
|
23
31
|
readonly voiceMachine: VoiceMachine;
|
|
32
|
+
/** Whether the voice session is establishing its connection (`state === "connecting"`). */
|
|
33
|
+
readonly voiceLoading: boolean;
|
|
34
|
+
/** Open the chat panel. */
|
|
24
35
|
open: () => void;
|
|
36
|
+
/** Close the chat panel. */
|
|
25
37
|
close: () => void;
|
|
38
|
+
/** Open the chat panel and send a specific prompt. */
|
|
26
39
|
openWithPrompt: (prompt: string) => void;
|
|
40
|
+
/** Start a voice session. Must be invoked from a user gesture. */
|
|
27
41
|
voiceStart: () => Promise<void>;
|
|
42
|
+
/** Stop the current voice session. */
|
|
28
43
|
voiceStop: () => Promise<void>;
|
|
44
|
+
/** Toggle voice: start if idle/error, stop if active. */
|
|
29
45
|
voiceToggle: () => Promise<void>;
|
|
46
|
+
/** Subscribe to tool-call completion events; returns an unsubscribe function. */
|
|
30
47
|
subscribeToToolEvents: (handler: ToolCallEventHandler) => () => void;
|
|
31
48
|
/** Subscribe to chat + voice state changes. */
|
|
32
49
|
subscribeToState: (handler: (state: YakState) => void) => () => void;
|
|
50
|
+
/** Mount the widget into the DOM. */
|
|
33
51
|
mount: () => void;
|
|
52
|
+
/** Tear down the widget and remove its listeners. */
|
|
34
53
|
destroy: () => void;
|
|
35
54
|
};
|
|
36
55
|
/**
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAGzB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAGzB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,MAAM,GAAG;IACnB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,sDAAsD;IACtD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,kEAAkE;IAClE,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,sCAAsC;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,yDAAyD;IACzD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,iFAAiF;IACjF,qBAAqB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,MAAM,IAAI,CAAC;IACrE,+CAA+C;IAC/C,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IACrE,qCAAqC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAyIrE"}
|
package/dist/service.js
CHANGED
|
@@ -11,7 +11,13 @@ export function createYakProvider(options) {
|
|
|
11
11
|
const toolEventSubscribers = new Set();
|
|
12
12
|
const stateSubscribers = new Set();
|
|
13
13
|
const notifyState = () => {
|
|
14
|
-
const snap = {
|
|
14
|
+
const snap = {
|
|
15
|
+
isOpen: _isOpen,
|
|
16
|
+
isReady: _isReady,
|
|
17
|
+
chatLoading: _isOpen && !_isReady,
|
|
18
|
+
voiceMachine: _voiceMachine,
|
|
19
|
+
voiceLoading: _voiceMachine.state === "connecting",
|
|
20
|
+
};
|
|
15
21
|
for (const subscriber of stateSubscribers) {
|
|
16
22
|
try {
|
|
17
23
|
subscriber(snap);
|
|
@@ -95,9 +101,15 @@ export function createYakProvider(options) {
|
|
|
95
101
|
get isReady() {
|
|
96
102
|
return _isReady;
|
|
97
103
|
},
|
|
104
|
+
get chatLoading() {
|
|
105
|
+
return _isOpen && !_isReady;
|
|
106
|
+
},
|
|
98
107
|
get voiceMachine() {
|
|
99
108
|
return _voiceMachine;
|
|
100
109
|
},
|
|
110
|
+
get voiceLoading() {
|
|
111
|
+
return _voiceMachine.state === "connecting";
|
|
112
|
+
},
|
|
101
113
|
open: () => embed.open(),
|
|
102
114
|
close: () => embed.close(),
|
|
103
115
|
openWithPrompt: (prompt) => embed.openWithPrompt(prompt),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yak-io/angular",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Angular SDK for embedding yak chatbot",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"node": ">=18"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
|
+
"README.md",
|
|
28
29
|
"dist",
|
|
29
30
|
"LICENSE"
|
|
30
31
|
],
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
"./package.json": "./package.json"
|
|
42
43
|
},
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@yak-io/javascript": "0.
|
|
45
|
+
"@yak-io/javascript": "0.9.0"
|
|
45
46
|
},
|
|
46
47
|
"peerDependencies": {
|
|
47
48
|
"@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0"
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"typescript": "^5.3.0",
|
|
52
53
|
"@repo/typescript-config": "0.0.0"
|
|
53
54
|
},
|
|
55
|
+
"homepage": "https://docs.yak.io/docs/sdks/angular",
|
|
54
56
|
"scripts": {
|
|
55
57
|
"build": "tsc",
|
|
56
58
|
"check-types": "tsc --noEmit",
|