ttp-agent-sdk 2.45.14 → 2.46.1

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.
@@ -0,0 +1,311 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Classic Cheesecake</title>
7
+ <style>
8
+ :root {
9
+ --bg: #f6f3ee;
10
+ --paper: #fffcf8;
11
+ --ink: #1c1917;
12
+ --muted: #78716c;
13
+ --accent: #2f6b52;
14
+ --accent-soft: #e8f2ec;
15
+ --accent-deep: #1e4d3a;
16
+ --warm: #c4713a;
17
+ --warm-soft: #fdf3eb;
18
+ --line: rgba(28, 25, 23, 0.08);
19
+ --shadow: 0 24px 60px rgba(28, 25, 23, 0.12);
20
+ --radius: 20px;
21
+ }
22
+ * { box-sizing: border-box; }
23
+ body {
24
+ margin: 0;
25
+ min-height: 100vh;
26
+ font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
27
+ color: var(--ink);
28
+ background:
29
+ radial-gradient(circle at top right, rgba(47, 107, 82, 0.08), transparent 28rem),
30
+ radial-gradient(circle at bottom left, rgba(196, 113, 58, 0.08), transparent 24rem),
31
+ var(--bg);
32
+ line-height: 1.55;
33
+ padding: 32px 16px 48px;
34
+ }
35
+ .sheet {
36
+ max-width: 760px;
37
+ margin: 0 auto;
38
+ background: var(--paper);
39
+ border-radius: calc(var(--radius) + 4px);
40
+ box-shadow: var(--shadow);
41
+ overflow: hidden;
42
+ border: 1px solid rgba(255, 255, 255, 0.7);
43
+ }
44
+ .hero {
45
+ position: relative;
46
+ padding: 36px 32px 28px;
47
+ background:
48
+ linear-gradient(135deg, var(--accent-deep) 0%, var(--accent) 55%, #3d8b67 100%);
49
+ color: #fff;
50
+ overflow: hidden;
51
+ }
52
+ .hero::before {
53
+ content: "";
54
+ position: absolute;
55
+ inset: 0;
56
+ background:
57
+ radial-gradient(circle at 85% 15%, rgba(255,255,255,0.16), transparent 42%),
58
+ radial-gradient(circle at 10% 100%, rgba(255,255,255,0.08), transparent 35%);
59
+ pointer-events: none;
60
+ }
61
+ .hero-inner { position: relative; z-index: 1; }
62
+ .hero-head {
63
+ display: flex;
64
+ align-items: flex-start;
65
+ justify-content: space-between;
66
+ gap: 16px;
67
+ margin-bottom: 12px;
68
+ }
69
+ .hero-head .eyebrow { margin-bottom: 0; }
70
+ .partner-logo-wrap {
71
+ flex-shrink: 0;
72
+ background: rgba(255, 255, 255, 0.95);
73
+ border-radius: 12px;
74
+ padding: 8px 12px;
75
+ max-width: 140px;
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ }
80
+ .partner-logo {
81
+ height: 28px;
82
+ width: auto;
83
+ max-width: 120px;
84
+ object-fit: contain;
85
+ display: block;
86
+ }
87
+ .eyebrow {
88
+ display: inline-flex;
89
+ align-items: center;
90
+ gap: 8px;
91
+ font-size: 11px;
92
+ font-weight: 700;
93
+ letter-spacing: 0.14em;
94
+ text-transform: uppercase;
95
+ opacity: 0.88;
96
+ margin-bottom: 12px;
97
+ }
98
+ .eyebrow-dot {
99
+ width: 7px;
100
+ height: 7px;
101
+ border-radius: 50%;
102
+ background: #ffd166;
103
+ box-shadow: 0 0 0 4px rgba(255, 209, 102, 0.22);
104
+ }
105
+ h1 {
106
+ margin: 0;
107
+ font-family: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;
108
+ font-size: clamp(2rem, 5vw, 2.75rem);
109
+ line-height: 1.08;
110
+ font-weight: 600;
111
+ letter-spacing: -0.02em;
112
+ }
113
+ .servings {
114
+ display: inline-flex;
115
+ align-items: center;
116
+ gap: 8px;
117
+ margin-top: 16px;
118
+ padding: 8px 14px;
119
+ border-radius: 999px;
120
+ background: rgba(255, 255, 255, 0.14);
121
+ border: 1px solid rgba(255, 255, 255, 0.18);
122
+ backdrop-filter: blur(8px);
123
+ font-size: 14px;
124
+ font-weight: 500;
125
+ }
126
+ .content { padding: 28px 28px 32px; }
127
+ .grid {
128
+ display: grid;
129
+ grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);
130
+ gap: 24px;
131
+ }
132
+ .section { min-width: 0; }
133
+ .section-title {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 10px;
137
+ margin: 0 0 14px;
138
+ font-size: 12px;
139
+ font-weight: 800;
140
+ letter-spacing: 0.12em;
141
+ text-transform: uppercase;
142
+ color: var(--accent-deep);
143
+ }
144
+ .section-title::after {
145
+ content: "";
146
+ flex: 1;
147
+ height: 1px;
148
+ background: linear-gradient(to right, var(--line), transparent);
149
+ }
150
+ .ingredients-box {
151
+ margin: 0;
152
+ padding: 0;
153
+ list-style: none;
154
+ background: var(--accent-soft);
155
+ border: 1px solid rgba(47, 107, 82, 0.12);
156
+ border-radius: 16px;
157
+ overflow: hidden;
158
+ }
159
+ .ingredients-box li {
160
+ display: flex;
161
+ align-items: flex-start;
162
+ gap: 12px;
163
+ padding: 12px 16px;
164
+ border-bottom: 1px solid rgba(47, 107, 82, 0.08);
165
+ font-size: 15px;
166
+ }
167
+ .ingredients-box li:last-child { border-bottom: 0; }
168
+ .ingredients-box li::before {
169
+ content: "";
170
+ flex-shrink: 0;
171
+ width: 8px;
172
+ height: 8px;
173
+ margin-top: 0.45em;
174
+ border-radius: 50%;
175
+ background: var(--accent);
176
+ box-shadow: 0 0 0 3px rgba(47, 107, 82, 0.14);
177
+ }
178
+ .steps { margin: 0; padding: 0; list-style: none; display: grid; gap: 12px; }
179
+ .step {
180
+ display: grid;
181
+ grid-template-columns: 36px minmax(0, 1fr);
182
+ gap: 14px;
183
+ padding: 14px 16px;
184
+ background: #fff;
185
+ border: 1px solid var(--line);
186
+ border-radius: 16px;
187
+ box-shadow: 0 8px 24px rgba(28, 25, 23, 0.04);
188
+ }
189
+ .step-num {
190
+ width: 36px;
191
+ height: 36px;
192
+ border-radius: 12px;
193
+ display: grid;
194
+ place-items: center;
195
+ background: linear-gradient(180deg, var(--warm-soft), #fff);
196
+ border: 1px solid rgba(196, 113, 58, 0.18);
197
+ color: var(--warm);
198
+ font-size: 14px;
199
+ font-weight: 800;
200
+ }
201
+ .step-text { font-size: 15px; color: #292524; padding-top: 6px; }
202
+ .notes {
203
+ margin-top: 24px;
204
+ padding: 16px 18px 16px 20px;
205
+ border-radius: 16px;
206
+ background: var(--warm-soft);
207
+ border: 1px solid rgba(196, 113, 58, 0.16);
208
+ color: #57534e;
209
+ font-size: 14px;
210
+ }
211
+ .notes strong {
212
+ display: block;
213
+ margin-bottom: 6px;
214
+ color: #9a3412;
215
+ font-size: 12px;
216
+ letter-spacing: 0.08em;
217
+ text-transform: uppercase;
218
+ }
219
+ .footer {
220
+ margin-top: 28px;
221
+ padding-top: 18px;
222
+ border-top: 1px solid var(--line);
223
+ text-align: center;
224
+ font-size: 12px;
225
+ color: var(--muted);
226
+ letter-spacing: 0.04em;
227
+ }
228
+ @media (max-width: 720px) {
229
+ .hero { padding: 28px 22px 22px; }
230
+ .content { padding: 22px 18px 26px; }
231
+ .grid { grid-template-columns: 1fr; gap: 22px; }
232
+ }
233
+ @media print {
234
+ body { background: #fff; padding: 0; }
235
+ .sheet { box-shadow: none; border: none; max-width: none; }
236
+ }
237
+ </style>
238
+ </head>
239
+ <body>
240
+ <article class="sheet">
241
+ <header class="hero">
242
+ <div class="hero-inner">
243
+ <div class="hero-head">
244
+ <div class="eyebrow"><span class="eyebrow-dot"></span> Recipe card</div>
245
+ <div class="partner-logo-wrap">
246
+ <img class="partner-logo" src="/partners/ocado.svg" alt="Ocado">
247
+ </div>
248
+ </div>
249
+ <h1>Classic Cheesecake</h1>
250
+ <div class="servings"><span aria-hidden="true">🍽</span> Serves 10 to 12</div>
251
+ </div>
252
+ </header>
253
+ <div class="content">
254
+ <div class="grid">
255
+
256
+ <section class="section">
257
+ <h2 class="section-title">Ingredients</h2>
258
+ <ul class="ingredients-box"><li>200g digestive biscuits</li><li>100g butter</li><li>500g cream cheese</li><li>200g sugar</li><li>3 eggs</li><li>1 tsp vanilla extract</li><li>300ml sour cream</li><li>1 lemon, zest and juice</li><li>2 tbsp sugar (for topping)</li></ul>
259
+ </section>
260
+
261
+ <section class="section">
262
+ <h2 class="section-title">Method</h2>
263
+ <ol class="steps">
264
+ <li class="step">
265
+ <div class="step-num">1</div>
266
+ <div class="step-text">Crush the digestive biscuits into fine crumbs and mix with the melted butter.</div>
267
+ </li>
268
+ <li class="step">
269
+ <div class="step-num">2</div>
270
+ <div class="step-text">Press the mixture firmly into the base of a lined 23cm springform tin.</div>
271
+ </li>
272
+ <li class="step">
273
+ <div class="step-num">3</div>
274
+ <div class="step-text">Beat the cream cheese and 200g sugar together until smooth and creamy.</div>
275
+ </li>
276
+ <li class="step">
277
+ <div class="step-num">4</div>
278
+ <div class="step-text">Add the eggs one at a time, beating well after each addition.</div>
279
+ </li>
280
+ <li class="step">
281
+ <div class="step-num">5</div>
282
+ <div class="step-text">Stir in the vanilla extract.</div>
283
+ </li>
284
+ <li class="step">
285
+ <div class="step-num">6</div>
286
+ <div class="step-text">Pour the mixture over the biscuit base.</div>
287
+ </li>
288
+ <li class="step">
289
+ <div class="step-num">7</div>
290
+ <div class="step-text">Bake at 160°C for 45 minutes until the filling is just set but still slightly wobbly in the centre.</div>
291
+ </li>
292
+ <li class="step">
293
+ <div class="step-num">8</div>
294
+ <div class="step-text">Remove from the oven and let cool completely.</div>
295
+ </li>
296
+ <li class="step">
297
+ <div class="step-num">9</div>
298
+ <div class="step-text">Mix the sour cream with 2 tbsp sugar and the lemon zest.</div>
299
+ </li>
300
+ <li class="step">
301
+ <div class="step-num">10</div>
302
+ <div class="step-text">Spread over the cooled cheesecake and chill for at least 2 hours before serving.</div>
303
+ </li></ol>
304
+ </section>
305
+ </div>
306
+ <div class="notes"><strong>Chef's tip</strong>For best results, use room temperature cream cheese. You can make this a day ahead and chill overnight. Store in the fridge for up to 3 days.</div>
307
+ <p class="footer">Saved from TalkToPC · Your voice shopping assistant</p>
308
+ </div>
309
+ </article>
310
+ </body>
311
+ </html>
@@ -0,0 +1,186 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Recipe preview — mock data</title>
7
+ <style>
8
+ * { box-sizing: border-box; }
9
+ body {
10
+ margin: 0;
11
+ font-family: "Segoe UI", system-ui, sans-serif;
12
+ color: #1c1917;
13
+ background: linear-gradient(180deg, #eef3ef 0%, #f6f3ee 100%);
14
+ min-height: 100vh;
15
+ }
16
+ .page { max-width: 980px; margin: 0 auto; padding: 28px 20px 40px; }
17
+ .intro {
18
+ margin-bottom: 18px;
19
+ }
20
+ h1 {
21
+ margin: 0 0 8px;
22
+ font-family: "Iowan Old Style", Georgia, serif;
23
+ font-size: 1.6rem;
24
+ letter-spacing: -0.02em;
25
+ }
26
+ .sub { color: #57534e; font-size: 14px; line-height: 1.55; max-width: 62ch; }
27
+ code {
28
+ background: rgba(47, 107, 82, 0.1);
29
+ color: #1e4d3a;
30
+ padding: 2px 6px;
31
+ border-radius: 6px;
32
+ font-size: 0.92em;
33
+ }
34
+ .tabs { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }
35
+ .tab {
36
+ padding: 9px 15px;
37
+ border: 1px solid rgba(47, 107, 82, 0.14);
38
+ border-radius: 999px;
39
+ background: rgba(255,255,255,0.7);
40
+ cursor: pointer;
41
+ font-size: 13px;
42
+ font-weight: 600;
43
+ color: #1e4d3a;
44
+ }
45
+ .tab.active {
46
+ background: linear-gradient(180deg, #3d8b67, #2f6b52);
47
+ color: #fff;
48
+ border-color: transparent;
49
+ box-shadow: 0 8px 20px rgba(47, 107, 82, 0.24);
50
+ }
51
+ .panel { display: none; }
52
+ .panel.active { display: block; }
53
+ .frame-wrap {
54
+ border-radius: 24px;
55
+ overflow: hidden;
56
+ box-shadow: 0 24px 60px rgba(28, 25, 23, 0.12);
57
+ border: 1px solid rgba(255,255,255,0.8);
58
+ background: #fff;
59
+ }
60
+ iframe {
61
+ display: block;
62
+ width: 100%;
63
+ height: min(82vh, 900px);
64
+ border: 0;
65
+ background: #f6f3ee;
66
+ }
67
+ .actions { margin-top: 16px; display: flex; gap: 10px; flex-wrap: wrap; }
68
+ .btn {
69
+ padding: 11px 16px;
70
+ border-radius: 12px;
71
+ border: none;
72
+ font-size: 14px;
73
+ font-weight: 600;
74
+ cursor: pointer;
75
+ text-decoration: none;
76
+ display: inline-block;
77
+ }
78
+ .btn-primary {
79
+ background: linear-gradient(180deg, #3d8b67, #2f6b52);
80
+ color: #fff;
81
+ box-shadow: 0 10px 24px rgba(47, 107, 82, 0.24);
82
+ }
83
+ .btn-secondary {
84
+ background: #fff;
85
+ color: #1e4d3a;
86
+ border: 1px solid rgba(47, 107, 82, 0.14);
87
+ }
88
+ pre {
89
+ background: #1c1917;
90
+ color: #e7e5e4;
91
+ padding: 18px;
92
+ border-radius: 18px;
93
+ overflow: auto;
94
+ font-size: 12px;
95
+ line-height: 1.5;
96
+ max-height: 520px;
97
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.04);
98
+ }
99
+ .hint { margin-top: 12px; font-size: 13px; color: #78716c; }
100
+ </style>
101
+ </head>
102
+ <body>
103
+ <div class="page">
104
+ <div class="intro">
105
+ <h1>Recipe card preview</h1>
106
+ <p class="sub">
107
+ Mock payload with the Ocado partner logo (<code>/partners/ocado.svg</code>).
108
+ This is the downloadable <code>.html</code> the widget saves when the backend
109
+ sends <code>show_recipe</code> after <code>send_recipe</code>.
110
+ </p>
111
+ </div>
112
+
113
+ <div class="tabs">
114
+ <button type="button" class="tab active" data-panel="download">Downloaded page</button>
115
+ <button type="button" class="tab" data-panel="payload">Wire payload</button>
116
+ </div>
117
+
118
+ <div id="panel-download" class="panel active">
119
+ <div class="frame-wrap">
120
+ <iframe src="recipe-mock-cheesecake.html?v=ocado-fixed" title="Classic Cheesecake recipe"></iframe>
121
+ </div>
122
+ <div class="actions">
123
+ <a class="btn btn-primary" href="recipe-mock-cheesecake.html" download="Classic-Cheesecake.html">Download mock .html</a>
124
+ <a class="btn btn-secondary" href="recipe-mock-cheesecake.html" target="_blank" rel="noopener">Open full page</a>
125
+ <button type="button" class="btn btn-secondary" id="btn-print">Print preview</button>
126
+ </div>
127
+ <p class="hint">During a call, the same design also appears in the in-widget modal with Print / Save again.</p>
128
+ </div>
129
+
130
+ <div id="panel-payload" class="panel">
131
+ <pre id="payload-json"></pre>
132
+ </div>
133
+ </div>
134
+
135
+ <script>
136
+ const mockPayload = {
137
+ t: 'show_recipe',
138
+ recipe: {
139
+ title: 'Classic Cheesecake',
140
+ servings: 'Serves 10 to 12',
141
+ ingredients: [
142
+ '200g digestive biscuits',
143
+ '100g butter',
144
+ '500g cream cheese',
145
+ '200g sugar',
146
+ '3 eggs',
147
+ '1 tsp vanilla extract',
148
+ '300ml sour cream',
149
+ '1 lemon, zest and juice',
150
+ '2 tbsp sugar (for topping)'
151
+ ],
152
+ steps: [
153
+ 'Crush the digestive biscuits into fine crumbs and mix with the melted butter.',
154
+ 'Press the mixture firmly into the base of a lined 23cm springform tin.',
155
+ 'Beat the cream cheese and 200g sugar together until smooth and creamy.',
156
+ 'Add the eggs one at a time, beating well after each addition.',
157
+ 'Stir in the vanilla extract.',
158
+ 'Pour the mixture over the biscuit base.',
159
+ 'Bake at 160°C for 45 minutes until the filling is just set but still slightly wobbly in the centre.',
160
+ 'Remove from the oven and let cool completely.',
161
+ 'Mix the sour cream with 2 tbsp sugar and the lemon zest.',
162
+ 'Spread over the cooled cheesecake and chill for at least 2 hours before serving.'
163
+ ],
164
+ notes: 'For best results, use room temperature cream cheese. You can make this a day ahead and chill overnight. Store in the fridge for up to 3 days.'
165
+ }
166
+ };
167
+
168
+ document.getElementById('payload-json').textContent = JSON.stringify(mockPayload, null, 2);
169
+
170
+ document.querySelectorAll('.tab').forEach((tab) => {
171
+ tab.addEventListener('click', () => {
172
+ document.querySelectorAll('.tab').forEach((t) => t.classList.remove('active'));
173
+ document.querySelectorAll('.panel').forEach((p) => p.classList.remove('active'));
174
+ tab.classList.add('active');
175
+ document.getElementById('panel-' + tab.dataset.panel).classList.add('active');
176
+ });
177
+ });
178
+
179
+ document.getElementById('btn-print').addEventListener('click', () => {
180
+ const frame = document.querySelector('iframe');
181
+ frame.contentWindow.focus();
182
+ frame.contentWindow.print();
183
+ });
184
+ </script>
185
+ </body>
186
+ </html>
package/dist/index.html CHANGED
@@ -23,7 +23,7 @@
23
23
  <img src="https://talktopc.com/logo192.png" alt="TTP Logo" style="width: 40px; height: 40px; border-radius: 8px;">
24
24
  <div>
25
25
  <h1 style="margin: 0; font-size: 1.4rem;">TTP Agent SDK</h1>
26
- <p class="version" style="margin: 0;">v2.45.11</p>
26
+ <p class="version" style="margin: 0;">v2.45.16</p>
27
27
  </div>
28
28
  </div>
29
29
  </div>
@@ -3423,6 +3423,11 @@ flyToCart.triggerFly(cardElement, product, () => {
3423
3423
  <td><code>show_products</code> / <code>show_items</code></td>
3424
3424
  <td>Render product cards (search or browse results).</td>
3425
3425
  </tr>
3426
+ <tr>
3427
+ <td>Backend &rarr; widget</td>
3428
+ <td><code>show_recipe</code></td>
3429
+ <td>After the <code>send_recipe</code> tool (sync-to-speech): opens a recipe card modal and auto-downloads a self-contained <code>.html</code> file. Payload: <code>{ t: "show_recipe", recipe: { title, ingredients[], steps[], servings?, notes? } }</code>. Partner logo (optional): resolved from <code>flavor.partnerId</code> → CDN <code>/partners/{partnerId}.svg</code> (PNG fallback); hidden if missing. User can Print or Save again from the modal. Dismissed on barge-in / overlay click / Escape.</td>
3430
+ </tr>
3426
3431
  <tr>
3427
3432
  <td>Backend &rarr; widget</td>
3428
3433
  <td><code>cart_updated</code></td>
@@ -0,0 +1,34 @@
1
+ # Partner logos (recipe cards)
2
+
3
+ Drop **your** logo files here — nothing is bundled by default. On deploy they are served from:
4
+
5
+ `https://cdn.talktopc.com/ttp-agent-sdk/partners/{partnerId}.{ext}`
6
+
7
+ ## Naming
8
+
9
+ Filename must match `flavor.partnerId` exactly (e.g. `morrisons.svg`, `ocado.svg`).
10
+
11
+ ## Format (lookup order)
12
+
13
+ 1. **`{partnerId}.svg`** — preferred (self-contained; no external `<use>` refs)
14
+ 2. **`{partnerId}.png`** — optional fallback
15
+
16
+ If neither URL loads, **no logo is shown** (no broken image, no placeholder).
17
+
18
+ **Important:** SVGs must be **self-contained**. A wrapper like `<use href="https://other-site.com/...">` will **not** work when loaded via `<img src="...">` on recipe cards or in downloaded HTML.
19
+
20
+ ## Current assets
21
+
22
+ | File | Notes |
23
+ |------|--------|
24
+ | `ocado.svg` | Purple horizontal wordmark (vector) |
25
+ | `morrisons.svg` | Inlined from Morrisons groceries sprite (embedded PNG, ~19 KB) |
26
+
27
+ ## Example
28
+
29
+ ```
30
+ partners/morrisons.svg
31
+ partners/ocado.svg
32
+ ```
33
+
34
+ Recommended SVG: transparent background, horizontal wordmark, ~160–240px wide.
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 91 41" fill="none">
2
+ <image x="0" y="0" width="91" height="41" preserveAspectRatio="xMidYMid meet" href="data:image/png;base64,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"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 603.82 133.44">
2
+ <path fill="#4d216d" d="M82.5 95.26c19.5 0 37-10.27 43.65-30.22.52-1.5 1.2-2.25 2.17-2.25 1.65 0 2.18 2.55 2.18 5.85 0 36.68-27.3 64.8-64.8 64.8-37.28 0-65.7-27.75-65.7-65S28.65 3.09 67 3.09c31.35 0 55 18.67 55 43.5 0 19.2-14.4 33.15-33.23 33.15C71.25 79.74 58 67.89 58 51.39a28.63 28.63 0 0 1 6.15-18c2-2.4 3.9-3.67 5-3.67s1.12.75.75 1.95a14.6 14.6 0 0 0-.75 4.72c0 7.43 6.23 12.9 14 12.9a14.34 14.34 0 0 0 14.62-14v-.66c0-10.58-10.35-18.52-24.45-18.52-20.93 0-35.55 17.55-35.55 38.48 0 24.66 20.34 40.71 44.72 40.71M562 94.51c-13.5 0-22.8-9.9-22.8-24.15s9.27-24.15 22.8-24.15 22.8 9.9 22.8 24.15-9.33 24.15-22.8 24.15m0 16.8c23.85 0 41.85-17.55 41.85-40.95S585.82 29.41 562 29.41s-41.88 17.6-41.88 40.95 18 41 41.85 41m-97.5-16.8c-13.35 0-22.65-9.9-22.65-24.15s9.3-24.15 22.65-24.15 22.65 9.9 22.65 24.15-9.3 24.15-22.65 24.15m-2.55 16.8a34.5 34.5 0 0 0 16.2-3.6 37.8 37.8 0 0 0 7.2-4.8c.75-.6 1.2-.45 1.2.3v4.35a2.26 2.26 0 0 0 1.93 2.54 2.5 2.5 0 0 0 .47 0h13.95a2.21 2.21 0 0 0 2.4-2 3 3 0 0 0 0-.4V2.41a2.28 2.28 0 0 0-2.16-2.4h-14.19a2.21 2.21 0 0 0-2.4 2 3 3 0 0 0 0 .4v35.4c0 .9-.6.75-.9.45-5.85-5.7-13.8-8.85-23.55-8.85-21.75 0-39.3 16.65-39.3 40.95 0 24.9 17 41 39.15 41m-92.25-15.42c-8.85 0-14.7-4.12-14.7-10.12 0-5.4 3.75-8.62 10.95-9.3l12.75-1.12c4.2-.38 7.95-1 9.45-1.27 1.2-.23 1.8.15 1.8 1.12v5c0 9.14-8.4 15.67-20.25 15.67m-3.45 15.37c12.45 0 19-4 23.85-8.4.6-.6 1.35-.6 1.35.38v4.27a2.26 2.26 0 0 0 1.93 2.54 2.5 2.5 0 0 0 .47 0h12.45a2.17 2.17 0 0 0 2.26-2.07 2 2 0 0 0 0-.33V58.66c0-18.9-11.93-29.25-33.75-29.25-14.1 0-25.2 4.8-33.3 13.27a2.09 2.09 0 0 0-.25 2.94 2.3 2.3 0 0 0 .4.36l8.4 8.18a2.23 2.23 0 0 0 3.15.15c.06 0 .1-.1.15-.15a27.67 27.67 0 0 1 20.55-8.7c9.3 0 15.6 4.42 15.6 10.95 0 3.15-1.8 4.5-6.75 4.8L365 62.41c-9.15.6-15.15 2.55-19.65 5.85a21.55 21.55 0 0 0-9.3 17.85c0 15.38 11.85 25.2 30.15 25.2m-40.55-13.2a43 43 0 0 1-31.65 13.2c-23.55 0-42-17.1-42-40.95 0-24.15 19.05-40.95 42-40.95a45.7 45.7 0 0 1 30.45 11.4 2.57 2.57 0 0 1 .15 3.6l-7.8 9.75a2.39 2.39 0 0 1-3.28.83 2.4 2.4 0 0 1-.32-.23c-5.85-5.55-11.4-8.4-19.2-8.4-13.95 0-22.95 10.2-22.95 24s9 24 22.95 24c7.5 0 13.5-2.7 19.5-8.85 1.43-1.5 2.78-1.35 3.9-.15l8.1 9a2.51 2.51 0 0 1 .35 3.53 2 2 0 0 1-.2.22m-127.95-3.6c-13.5 0-22.8-9.9-22.8-24.15s9.3-24.15 22.8-24.15 22.8 9.9 22.8 24.15-9.3 24.15-22.8 24.15m0 16.8c23.85 0 41.85-17.55 41.85-40.95s-18-40.95-41.85-40.95-41.85 17.6-41.85 40.95 18 41 41.85 41"/>
3
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ttp-agent-sdk",
3
- "version": "2.45.14",
3
+ "version": "2.46.1",
4
4
  "description": "Comprehensive Voice Agent SDK with Customizable Widget - Real-time audio, WebSocket communication, React components, and extensive customization options",
5
5
  "main": "dist/agent-widget.js",
6
6
  "module": "dist/agent-widget.esm.js",