@yak-io/svelte 0.3.0 β†’ 0.5.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 CHANGED
@@ -1,26 +1,38 @@
1
1
  # @yak-io/svelte
2
2
 
3
- Svelte integration for the Yak embeddable chat widget. Uses Svelte stores for reactive state.
3
+ > πŸ“š **Full documentation:** https://docs.yak.io/docs/sdks/svelte
4
+ >
5
+ > πŸ€– **For LLMs / AI agents:** https://docs.yak.io/llms.txt
4
6
 
5
- ## Installation
7
+ Svelte 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` whose reactive state is exposed as Svelte `Readable` stores.
6
8
 
7
9
  ```bash
8
10
  pnpm add @yak-io/svelte
9
11
  ```
10
12
 
13
+ ## Exports
14
+
15
+ | Export | Kind | Purpose |
16
+ | --- | --- | --- |
17
+ | `createYakProvider(options)` | fn | Create a widget instance. Returns a `YakApi` with stores + `mount`/`destroy`. |
18
+ | `createYakToolset` / `createYakServerAdapter` | fn | Compose GraphQL/REST/tRPC/custom tool adapters into one `onToolCall` (re-exported from `@yak-io/javascript`). |
19
+ | `enableYakLogging` / `disableYakLogging` / `isYakLoggingEnabled` | fn | Toggle verbose SDK logging. |
20
+ | Types | β€” | `YakProviderOptions`, `YakApi`, `ToolCallEventHandler`, plus core types from `@yak-io/javascript`. |
21
+
11
22
  ## Quickstart
12
23
 
13
- ### 1. Initialize the provider (module scope)
24
+ ### 1. Create the provider (module scope)
14
25
 
15
26
  ```ts
16
27
  // src/yak.ts
17
- import { onMount, onDestroy } from "svelte";
28
+ import { goto } from "$app/navigation";
18
29
  import { createYakProvider } from "@yak-io/svelte";
19
30
 
20
31
  export const yak = createYakProvider({
21
32
  appId: import.meta.env.VITE_YAK_APP_ID,
33
+ mode: "both", // "chat" | "voice" | "both" β€” default "chat"
34
+ trigger: true, // show the floating launcher pill
22
35
  theme: { position: "bottom-right", colorMode: "system" },
23
- trigger: { label: "Ask with AI" },
24
36
  getConfig: async () => {
25
37
  const res = await fetch("/api/yak");
26
38
  return res.json();
@@ -35,19 +47,17 @@ export const yak = createYakProvider({
35
47
  if (!data.ok) throw new Error(data.error);
36
48
  return data.result;
37
49
  },
38
- onRedirect: (path) => {
39
- goto(path);
40
- },
50
+ onRedirect: (path) => goto(path),
41
51
  });
42
52
  ```
43
53
 
44
- ### 2. Mount and destroy in your root component
54
+ ### 2. Mount/destroy in your root component
45
55
 
46
56
  ```svelte
47
- <!-- App.svelte -->
57
+ <!-- +layout.svelte -->
48
58
  <script lang="ts">
49
59
  import { onMount, onDestroy } from "svelte";
50
- import { yak } from "./yak.ts";
60
+ import { yak } from "$lib/yak";
51
61
 
52
62
  onMount(() => yak.mount());
53
63
  onDestroy(() => yak.destroy());
@@ -56,69 +66,82 @@ export const yak = createYakProvider({
56
66
  <slot />
57
67
  ```
58
68
 
59
- ### 3. Use stores in components
69
+ ### 3. Use the stores
60
70
 
61
- `isOpen` and `isReady` are Svelte `Readable` stores β€” subscribe with `$`:
71
+ `isOpen`/`isReady` are `Readable` stores β€” read them with `$`:
62
72
 
63
73
  ```svelte
64
74
  <script lang="ts">
65
- import { yak } from "../yak.ts";
66
- const { isOpen, isReady, open, openWithPrompt } = yak;
75
+ import { yak } from "$lib/yak";
76
+ const { isOpen, open, openWithPrompt } = yak;
67
77
  </script>
68
78
 
69
- <button on:click={open}>Open Chat</button>
70
- {#if $isOpen}
71
- <p>Chat is open</p>
72
- {/if}
73
- {#if $isOpen && !$isReady}
74
- <p>Loading…</p>
75
- {/if}
79
+ <button on:click={open}>Open chat</button>
80
+ <button on:click={() => openWithPrompt("How do I get started?")}>Get help</button>
81
+ {#if $isOpen}<span>Chat is open</span>{/if}
76
82
  ```
77
83
 
78
- ### 4. Subscribe to tool events
84
+ ## Voice
85
+
86
+ Set `mode: "voice"` or `mode: "both"`, then drive the session. `voiceStart()` must run from a user gesture (browser mic requirement).
87
+
88
+ ```svelte
89
+ <script lang="ts">
90
+ import { yak } from "$lib/yak";
91
+ const { voiceToggle, voiceLoading, voiceMachine } = yak;
92
+ </script>
93
+
94
+ <button on:click={voiceToggle} disabled={$voiceLoading}>
95
+ {$voiceMachine.state === "idle" ? "Start voice" : `Stop (${$voiceMachine.state})`}
96
+ </button>
97
+ ```
98
+
99
+ ## Tool events
79
100
 
80
101
  ```ts
81
102
  yak.subscribeToToolEvents((event) => {
82
- if (event.ok && event.name.startsWith("tasks.")) {
83
- refreshTasks();
84
- }
103
+ // { name, args, ok, result?, error? }
104
+ if (event.ok && event.name.startsWith("tasks.")) refreshTasks();
85
105
  });
86
106
  ```
87
107
 
88
- ## API Reference
108
+ ## API reference
89
109
 
90
110
  ### `createYakProvider(options)`
91
111
 
92
- Creates a Yak widget instance. Returns a `YakApi` with Svelte stores for reactive state.
93
-
94
- You must call `yak.mount()` in `onMount()` and `yak.destroy()` in `onDestroy()`.
95
-
96
- **Options:**
112
+ Returns a `YakApi`. You must call `yak.mount()` in `onMount()` and `yak.destroy()` in `onDestroy()`.
97
113
 
98
- | Option | Type | Description |
99
- |--------|------|-------------|
100
- | `appId` | `string` | Your Yak app ID |
101
- | `getConfig` | `ChatConfigProvider` | Async function returning routes + tools. Called on first open. |
102
- | `onToolCall` | `ToolCallHandler` | Handle tool invocations from the assistant |
103
- | `onGraphQLSchemaCall` | `GraphQLSchemaHandler` | Handle GraphQL schema tool calls |
104
- | `onRESTSchemaCall` | `RESTSchemaHandler` | Handle REST/OpenAPI schema tool calls |
105
- | `theme` | `Theme` | Position, color mode, and custom colors |
106
- | `onRedirect` | `(path: string) => void` | Navigation handler (defaults to `window.location.assign`) |
107
- | `disableRestartButton` | `boolean` | Hide the restart session button |
108
- | `trigger` | `boolean \| TriggerButtonConfig` | Built-in trigger button |
114
+ | Option | Type | Default | Description |
115
+ | --- | --- | --- | --- |
116
+ | `appId` | `string` | β€” | Your Yak app ID (required). |
117
+ | `mode` | `"chat" \| "voice" \| "both"` | `"chat"` | Which surfaces the widget exposes. |
118
+ | `trigger` | `boolean \| TriggerButtonConfig` | `false` | Show the floating pill. **Set `true`** to display it; `TriggerButtonConfig` recolors it. |
119
+ | `getConfig` | `ChatConfigProvider` | β€” | Async provider of routes + tools. Called on open / voice start. |
120
+ | `onToolCall` | `ToolCallHandler` | β€” | Executes a tool the assistant calls. || `theme` | `Theme` | β€” | Position, color mode, and colors. |
121
+ | `onRedirect` | `(path: string) => void` | `window.location.assign` | Navigation handler. |
122
+ | `disableRestartButton` | `boolean` | `false` | Hide the restart-session button. |
109
123
 
110
124
  ### `YakApi`
111
125
 
112
126
  ```ts
113
127
  type YakApi = {
114
- isOpen: Readable<boolean>; // Svelte store
115
- isReady: Readable<boolean>; // Svelte store
128
+ // chat
129
+ isOpen: Readable<boolean>;
130
+ isReady: Readable<boolean>;
131
+ chatLoading: Readable<boolean>; // isOpen && !isReady
116
132
  open: () => void;
117
133
  close: () => void;
118
134
  openWithPrompt: (prompt: string) => void;
119
135
  subscribeToToolEvents: (handler: ToolCallEventHandler) => () => void;
120
- mount: () => void; // Call in onMount()
121
- destroy: () => void; // Call in onDestroy()
136
+ // voice
137
+ voiceMachine: Readable<VoiceMachine>; // { state, errorMessage? }
138
+ voiceLoading: Readable<boolean>; // state === "connecting"
139
+ voiceStart: () => Promise<void>;
140
+ voiceStop: () => Promise<void>;
141
+ voiceToggle: () => Promise<void>;
142
+ // lifecycle
143
+ mount: () => void; // call in onMount()
144
+ destroy: () => void; // call in onDestroy()
122
145
  };
123
146
  ```
124
147
 
@@ -127,9 +150,7 @@ type YakApi = {
127
150
  ```ts
128
151
  import { enableYakLogging, disableYakLogging, isYakLoggingEnabled } from "@yak-io/svelte";
129
152
 
130
- enableYakLogging(); // Enable verbose SDK logs
131
- disableYakLogging(); // Disable SDK logs
132
- isYakLoggingEnabled(); // β†’ boolean
153
+ enableYakLogging(); // verbose SDK logs
133
154
  ```
134
155
 
135
156
  ## Types
@@ -142,12 +163,17 @@ import type {
142
163
  ChatConfigProvider,
143
164
  ToolCallHandler,
144
165
  ToolCallEvent,
166
+ ToolAdapter,
167
+ YakToolset,
168
+ YakServerAdapterConfig,
145
169
  Theme,
146
- TriggerButtonConfig,
170
+ WidgetMode,
147
171
  WidgetPosition,
172
+ VoiceState,
173
+ VoiceMachine,
148
174
  } from "@yak-io/svelte";
149
175
  ```
150
176
 
151
177
  ## License
152
178
 
153
- Proprietary β€” see LICENSE file.
179
+ Proprietary β€” see [LICENSE](./LICENSE).
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export type { ChatConfigProvider, GraphQLRequest, GraphQLSchemaHandler, GraphQLSchemaSource, OpenAPISchemaSource, RESTRequest, RESTSchemaHandler, SchemaSource, Theme, ThemeColors, ToolCallEvent, ToolCallHandler, TriggerButtonConfig, VoiceMachine, VoiceState, WidgetMode, WidgetPosition, } from "@yak-io/javascript";
2
- export { disableYakLogging, enableYakLogging, isYakLoggingEnabled } from "@yak-io/javascript";
1
+ export type { ChatConfigProvider, GraphQLRequest, RESTRequest, Theme, ThemeColors, ToolAdapter, ToolCallEvent, ToolCallHandler, TriggerButtonConfig, VoiceMachine, VoiceState, WidgetMode, WidgetPosition, YakServerAdapterConfig, YakToolset, } from "@yak-io/javascript";
2
+ export { createYakServerAdapter, createYakToolset, disableYakLogging, enableYakLogging, isYakLoggingEnabled, } from "@yak-io/javascript";
3
3
  export type { ToolCallEventHandler, YakApi, YakProviderOptions } from "./provider.js";
4
4
  export { createYakProvider } from "./provider.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,KAAK,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // Public API
2
- // Re-export logging utilities
3
- export { disableYakLogging, enableYakLogging, isYakLoggingEnabled } from "@yak-io/javascript";
2
+ // Re-export tool composition + logging utilities
3
+ export { createYakServerAdapter, createYakToolset, disableYakLogging, enableYakLogging, isYakLoggingEnabled, } from "@yak-io/javascript";
4
4
  export { createYakProvider } from "./provider.js";
@@ -1,4 +1,4 @@
1
- import { type ChatConfigProvider, type GraphQLSchemaHandler, type RESTSchemaHandler, type Theme, type ToolCallEvent, type ToolCallHandler, type TriggerButtonConfig, type VoiceMachine, type WidgetMode } from "@yak-io/javascript";
1
+ import { type ChatConfigProvider, type Theme, type ToolCallEvent, type ToolCallHandler, type TriggerButtonConfig, type VoiceMachine, type WidgetMode } from "@yak-io/javascript";
2
2
  import { type Readable } from "svelte/store";
3
3
  export type ToolCallEventHandler = (event: ToolCallEvent) => void;
4
4
  export type YakProviderOptions = {
@@ -6,25 +6,40 @@ export type YakProviderOptions = {
6
6
  mode?: WidgetMode;
7
7
  getConfig?: ChatConfigProvider;
8
8
  onToolCall?: ToolCallHandler;
9
- onGraphQLSchemaCall?: GraphQLSchemaHandler;
10
- onRESTSchemaCall?: RESTSchemaHandler;
11
9
  theme?: Theme;
12
10
  onRedirect?: (path: string) => void;
13
11
  disableRestartButton?: boolean;
14
12
  trigger?: boolean | TriggerButtonConfig;
15
13
  };
14
+ /** Handle for controlling the Yak widget β€” chat + voice β€” from Svelte (stores). */
16
15
  export type YakApi = {
16
+ /** Whether the chat panel is currently open. */
17
17
  isOpen: Readable<boolean>;
18
+ /** Whether the chat iframe is ready to receive messages. */
18
19
  isReady: Readable<boolean>;
20
+ /** Whether the chat is opening but not yet interactive (`isOpen && !isReady`). */
21
+ chatLoading: Readable<boolean>;
22
+ /** Open the chat panel. */
19
23
  open: () => void;
24
+ /** Close the chat panel. */
20
25
  close: () => void;
26
+ /** Open the chat panel and send a specific prompt. */
21
27
  openWithPrompt: (prompt: string) => void;
28
+ /** Subscribe to tool-call completion events; returns an unsubscribe function. */
22
29
  subscribeToToolEvents: (handler: ToolCallEventHandler) => () => void;
30
+ /** Current voice state-machine snapshot. `idle` when mode is `chat`. */
23
31
  voiceMachine: Readable<VoiceMachine>;
32
+ /** Whether the voice session is establishing its connection (`state === "connecting"`). */
33
+ voiceLoading: Readable<boolean>;
34
+ /** Start a voice session. Must be invoked from a user gesture. */
24
35
  voiceStart: () => Promise<void>;
36
+ /** Stop the current voice session. */
25
37
  voiceStop: () => Promise<void>;
38
+ /** Toggle voice: start if idle/error, stop if active. */
26
39
  voiceToggle: () => Promise<void>;
40
+ /** Mount the widget into the DOM. Call once (e.g. in `onMount`). */
27
41
  mount: () => void;
42
+ /** Tear down the widget and remove its listeners. */
28
43
  destroy: () => void;
29
44
  };
30
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.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;AAC5B,OAAO,EAAE,KAAK,QAAQ,EAAsB,MAAM,cAAc,CAAC;AAIjE,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,MAAM,GAAG;IAEnB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qBAAqB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,MAAM,IAAI,CAAC;IAErE,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAIF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAiGrE"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAGvB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAW,KAAK,QAAQ,EAAsB,MAAM,cAAc,CAAC;AAI1E,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,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,mFAAmF;AACnF,MAAM,MAAM,MAAM,GAAG;IAEnB,gDAAgD;IAChD,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,kFAAkF;IAClF,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,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,iFAAiF;IACjF,qBAAqB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,MAAM,IAAI,CAAC;IAErE,wEAAwE;IACxE,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,2FAA2F;IAC3F,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,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;IAEjC,oEAAoE;IACpE,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAIF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAuGrE"}
package/dist/provider.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { INITIAL_VOICE_MACHINE, logger, YakEmbed, } from "@yak-io/javascript";
2
- import { readonly, writable } from "svelte/store";
2
+ import { derived, readonly, writable } from "svelte/store";
3
3
  // ── Provider factory ────────────────────────────────────────────────────────
4
4
  /**
5
5
  * Creates a yak widget instance (chat + voice) with Svelte stores.
@@ -47,8 +47,6 @@ export function createYakProvider(options) {
47
47
  trigger: options.trigger ?? false,
48
48
  getConfig: options.getConfig,
49
49
  onToolCall: options.onToolCall,
50
- onGraphQLSchemaCall: options.onGraphQLSchemaCall,
51
- onRESTSchemaCall: options.onRESTSchemaCall,
52
50
  onRedirect: resolvedRedirect,
53
51
  options: { disableRestartButton: options.disableRestartButton },
54
52
  onToolCallComplete: handleToolCallComplete,
@@ -86,9 +84,12 @@ export function createYakProvider(options) {
86
84
  logger.warn("Voice start failed", err);
87
85
  }
88
86
  };
87
+ const chatLoading = derived([isOpen, isReady], ([$isOpen, $isReady]) => $isOpen && !$isReady);
88
+ const voiceLoading = derived(voiceMachine, ($voiceMachine) => $voiceMachine.state === "connecting");
89
89
  return {
90
90
  isOpen: readonly(isOpen),
91
91
  isReady: readonly(isReady),
92
+ chatLoading,
92
93
  open: () => embed.open(),
93
94
  close: () => embed.close(),
94
95
  openWithPrompt: (prompt) => embed.openWithPrompt(prompt),
@@ -99,6 +100,7 @@ export function createYakProvider(options) {
99
100
  };
100
101
  },
101
102
  voiceMachine: readonly(voiceMachine),
103
+ voiceLoading,
102
104
  voiceStart,
103
105
  voiceStop: () => embed.voiceStop(),
104
106
  voiceToggle: () => embed.voiceToggle(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yak-io/svelte",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Svelte 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.8.0"
45
+ "@yak-io/javascript": "0.10.0"
45
46
  },
46
47
  "peerDependencies": {
47
48
  "svelte": "^5.0.0"
@@ -52,6 +53,7 @@
52
53
  "typescript": "^5.3.0",
53
54
  "@repo/typescript-config": "0.0.0"
54
55
  },
56
+ "homepage": "https://docs.yak.io/docs/sdks/svelte",
55
57
  "scripts": {
56
58
  "build": "tsc",
57
59
  "check-types": "tsc --noEmit",