@eos3/connect 0.2.1 → 0.2.3

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
@@ -286,7 +286,6 @@ await fetch('https://wallet.example.com/api/market/push', {
286
286
  - `client.getWalletView()`: returns the current wallet ViewModel for app UIs.
287
287
  - `checkEosConnectTelegramPayStorage(app)`: initializes Telegram biometrics and returns secure storage diagnostics.
288
288
  - `client.connectTelegram(options)`: starts or resumes Telegram binding.
289
- - `client.connectTokenPocket(options)`: starts TokenPocket binding.
290
289
  - `client.startTelegramWalletFlow(options)`: runs the high-level Telegram wallet setup flow from SDK-owned UI.
291
290
  - `client.enableQuickPay()`: opens the SDK-owned `<eos-connect-modal>` and returns current quick payment readiness.
292
291
  - `client.pay(options)`: builds, signs, confirms, and pushes a paylimit payment.
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export { EosConnectError, isEosConnectError, normalizeEosConnectError, type EosC
4
4
  export { EOS_CONNECT_TELEGRAM_WEB_APP_SDK_URL, getEosConnectTelegramWebApp, loadEosConnectTelegramWebAppSdk, type EosConnectTelegramWebApp } from './telegram-web-app.js';
5
5
  export * from './shared/index.js';
6
6
  export * from './ui.js';
7
- export type EosConnectProviderId = 'telegram' | 'tokenpocket' | 'anchor';
7
+ export type EosConnectProviderId = 'telegram';
8
8
  export type EosConnectProviderState = 'available' | 'coming_soon' | 'disabled';
9
9
  export type EosConnectStatus = 'idle' | 'not_connected' | 'pending' | 'connected' | 'unsupported' | 'error';
10
10
  export type EosConnectNetwork = 'testnet' | 'mainnet';
@@ -72,7 +72,6 @@ export interface EosConnectOptions {
72
72
  network?: EosConnectNetwork;
73
73
  apiBaseUrl?: string;
74
74
  botUsername?: string;
75
- tokenPocketSource?: string;
76
75
  deviceLabel?: string;
77
76
  locale?: string;
78
77
  messages?: EosConnectMessages;
@@ -139,7 +138,6 @@ export interface EosConnectClient {
139
138
  getWalletView(): Promise<EosConnectWalletView>;
140
139
  connect(options: EosConnectConnectOptions): Promise<EosConnectState>;
141
140
  connectTelegram(options?: EosConnectTelegramOptions): Promise<EosConnectState>;
142
- connectTokenPocket(options?: EosConnectTelegramOptions): Promise<EosConnectState>;
143
141
  startTelegramWalletFlow(options?: EosConnectWalletFlowOptions): Promise<EosConnectWalletView>;
144
142
  enableQuickPay(): Promise<EosConnectQuickPayStatus>;
145
143
  pay(options: EosConnectPayOptions): Promise<EosConnectPayResult>;
@@ -233,7 +231,6 @@ export declare function checkEosConnectTelegramPayStorage(app: EosConnectTelegra
233
231
  export declare function initEosConnectTelegramBiometricManager(app: EosConnectTelegramWebApp, timeoutMs?: number): Promise<boolean>;
234
232
  export declare function openEosConnectTelegramBiometricSettings(app: EosConnectTelegramWebApp): Promise<EosConnectTelegramBiometricSettingsResult>;
235
233
  export declare function eosConnectWalletSetupState(wallet: EosConnectWalletInfo, env?: EosConnectWalletSetupEnv): EosConnectWalletSetupState;
236
- export declare function tokenPocketDappUrl(url: string, source?: string): string;
237
234
  export declare function generateEosConnectPaymentKey(): Promise<{
238
235
  privateKey: string;
239
236
  publicKey: string;
package/dist/index.js CHANGED
@@ -56,18 +56,6 @@ const providers = [
56
56
  name: 'Telegram secure binding',
57
57
  state: 'available',
58
58
  description: 'Create or connect an EOS wallet through Telegram SecureStorage and passkeys.'
59
- },
60
- {
61
- id: 'tokenpocket',
62
- name: 'TokenPocket',
63
- state: 'available',
64
- description: 'Open TokenPocket and bind an existing EOS wallet to Telegram payments.'
65
- },
66
- {
67
- id: 'anchor',
68
- name: 'Anchor',
69
- state: 'coming_soon',
70
- description: 'Anchor connection is reserved for a later wallet adapter.'
71
59
  }
72
60
  ];
73
61
  const idleState = {
@@ -82,9 +70,6 @@ const idleState = {
82
70
  function normalizeBaseUrl(apiBaseUrl) {
83
71
  return apiBaseUrl.replace(/\/+$/, '');
84
72
  }
85
- function providerDisplayName(provider) {
86
- return providers.find((item) => item.id === provider)?.name ?? provider;
87
- }
88
73
  function titleCase(value) {
89
74
  if (!value)
90
75
  return value;
@@ -322,7 +307,7 @@ function openExternalUrl(url, options, telegramWebApp = options.telegramWebApp)
322
307
  options.openExternal(url);
323
308
  return;
324
309
  }
325
- if (!url.startsWith('tpdapp://') && telegramWebApp?.openLink) {
310
+ if (telegramWebApp?.openLink) {
326
311
  telegramWebApp.openLink(url);
327
312
  return;
328
313
  }
@@ -643,13 +628,6 @@ function parseRpcUrls(raw) {
643
628
  }
644
629
  return urls;
645
630
  }
646
- export function tokenPocketDappUrl(url, source = 'eosconnect') {
647
- return `tpdapp://open?params=${encodeURIComponent(JSON.stringify({
648
- url,
649
- chain: 'EOS',
650
- source
651
- }))}`;
652
- }
653
631
  export async function generateEosConnectPaymentKey() {
654
632
  const privateKey = PrivateKey.generate('K1');
655
633
  return {
@@ -1506,8 +1484,8 @@ export function createEosConnect(options) {
1506
1484
  return this.refreshWallet();
1507
1485
  },
1508
1486
  async connect(connectOptions) {
1509
- if (connectOptions.provider !== 'telegram' && connectOptions.provider !== 'tokenpocket') {
1510
- throw new Error(`${providerDisplayName(connectOptions.provider)} is not supported yet`);
1487
+ if (connectOptions.provider !== 'telegram') {
1488
+ throw new Error('Only Telegram wallet binding is supported');
1511
1489
  }
1512
1490
  if (!initData()) {
1513
1491
  return publish({
@@ -1518,21 +1496,17 @@ export function createEosConnect(options) {
1518
1496
  });
1519
1497
  }
1520
1498
  if (!connectOptions.publicKey) {
1521
- throw new Error(`${providerDisplayName(connectOptions.provider)} provider requires a publicKey`);
1499
+ throw new Error('Telegram provider requires a publicKey');
1522
1500
  }
1523
- const path = connectOptions.provider === 'tokenpocket'
1524
- ? '/api/tg-wallet/tp-bind/start'
1525
- : '/api/tg-wallet/bind/start';
1526
- const bind = await request(path, {
1501
+ const bind = await request('/api/tg-wallet/bind/start', {
1527
1502
  method: 'POST',
1528
1503
  body: JSON.stringify({
1529
1504
  initData: initData(),
1530
- botPublicKey: connectOptions.provider === 'telegram' ? connectOptions.publicKey : undefined,
1531
- tgpayPublicKey: connectOptions.provider === 'tokenpocket' ? connectOptions.publicKey : undefined,
1505
+ botPublicKey: connectOptions.publicKey,
1532
1506
  botUsername: connectOptions.botUsername || options.botUsername || undefined,
1533
1507
  deviceLabel: options.deviceLabel || telegramDeviceLabel(telegramWebApp()),
1534
1508
  assetLimits: connectOptions.assetLimits,
1535
- replaceWallet: connectOptions.provider === 'telegram' ? connectOptions.replaceWallet || undefined : undefined
1509
+ replaceWallet: connectOptions.replaceWallet || undefined
1536
1510
  })
1537
1511
  });
1538
1512
  if (bind.hasWallet) {
@@ -1560,9 +1534,7 @@ export function createEosConnect(options) {
1560
1534
  error: null
1561
1535
  });
1562
1536
  if (connectOptions.openLink !== false) {
1563
- openExternalUrl(connectOptions.provider === 'tokenpocket'
1564
- ? tokenPocketDappUrl(bind.bindUrl, options.tokenPocketSource)
1565
- : bind.bindUrl, options, telegramWebApp());
1537
+ openExternalUrl(bind.bindUrl, options, telegramWebApp());
1566
1538
  }
1567
1539
  return next;
1568
1540
  },
@@ -1650,23 +1622,6 @@ export function createEosConnect(options) {
1650
1622
  }
1651
1623
  return this.checkQuickPay();
1652
1624
  },
1653
- async connectTokenPocket(tokenPocketOptions = {}) {
1654
- const paymentKey = await generateEosConnectPaymentKey();
1655
- const next = await this.connect({
1656
- provider: 'tokenpocket',
1657
- publicKey: paymentKey.publicKey,
1658
- assetLimits: tokenPocketOptions.assetLimits,
1659
- openLink: false
1660
- });
1661
- if (!next.bindUrl || !next.bindId) {
1662
- throw new Error('EOS Connect did not return a TokenPocket binding request');
1663
- }
1664
- await saveEosConnectPaymentKey(paymentKey.privateKey, telegramWebApp());
1665
- if (tokenPocketOptions.openLink !== false) {
1666
- openExternalUrl(tokenPocketDappUrl(next.bindUrl, options.tokenPocketSource), options, telegramWebApp());
1667
- }
1668
- return next;
1669
- },
1670
1625
  async pay(payOptions) {
1671
1626
  if (!initData()) {
1672
1627
  throw new Error('Telegram initData is missing');
package/dist/ui.js CHANGED
@@ -66,6 +66,20 @@ eos-connect-button {
66
66
  line-height: 1.2;
67
67
  font-weight: 700;
68
68
  padding: 0 18px;
69
+ transition:
70
+ background-color 160ms ease,
71
+ transform 120ms ease;
72
+ }
73
+ .eos-connect-button:hover {
74
+ background: var(--eos-connect-accent-strong);
75
+ }
76
+ .eos-connect-button:active {
77
+ transform: translateY(1px);
78
+ }
79
+ .eos-connect-button:focus-visible,
80
+ .eos-connect-sdk-primary:focus-visible {
81
+ outline: 3px solid rgba(47, 128, 237, 0.28);
82
+ outline-offset: 2px;
69
83
  }
70
84
  .eos-connect-sdk-backdrop {
71
85
  appearance: none;
@@ -76,11 +90,13 @@ eos-connect-button {
76
90
  padding: 0;
77
91
  background: rgba(15, 23, 42, 0.36);
78
92
  cursor: pointer;
93
+ animation: eos-connect-sdk-backdrop-in 180ms cubic-bezier(0.25, 1, 0.5, 1) both;
79
94
  }
80
95
  .eos-connect-sdk-sheet {
81
96
  position: relative;
82
97
  width: min(100%, 420px);
83
98
  max-height: min(640px, calc(100dvh - 24px - env(safe-area-inset-bottom)));
99
+ box-sizing: border-box;
84
100
  border: 1px solid var(--eos-connect-border);
85
101
  border-radius: 8px;
86
102
  background: var(--eos-connect-surface);
@@ -88,6 +104,8 @@ eos-connect-button {
88
104
  padding: 16px;
89
105
  overflow: auto;
90
106
  -webkit-overflow-scrolling: touch;
107
+ transform-origin: center bottom;
108
+ animation: eos-connect-sdk-sheet-in 260ms cubic-bezier(0.22, 1, 0.36, 1) both;
91
109
  }
92
110
  .eos-connect-sdk-sheet--quick {
93
111
  width: min(100%, 454px) !important;
@@ -116,6 +134,13 @@ eos-connect-button {
116
134
  line-height: 1 !important;
117
135
  font-weight: 300 !important;
118
136
  padding: 0 !important;
137
+ transition:
138
+ background-color 160ms ease,
139
+ color 160ms ease,
140
+ transform 120ms ease !important;
141
+ }
142
+ .eos-connect-sdk-close:active {
143
+ transform: scale(0.96);
119
144
  }
120
145
  .eos-connect-sdk-summary {
121
146
  margin-bottom: 16px;
@@ -169,6 +194,10 @@ eos-connect-button {
169
194
  font-weight: 700;
170
195
  padding: 0 16px;
171
196
  text-align: left;
197
+ transition:
198
+ background-color 180ms ease,
199
+ box-shadow 180ms ease,
200
+ transform 120ms ease;
172
201
  }
173
202
  .eos-connect-sdk-primary--quick {
174
203
  display: grid !important;
@@ -183,6 +212,9 @@ eos-connect-button {
183
212
  line-height: 1.2 !important;
184
213
  text-align: center !important;
185
214
  }
215
+ .eos-connect-sdk-primary--quick:not([disabled]):active {
216
+ transform: translateY(1px) scale(0.992);
217
+ }
186
218
  .eos-connect-sdk-primary--quick[aria-busy="true"],
187
219
  .eos-connect-sdk-primary--quick[disabled] {
188
220
  opacity: 1 !important;
@@ -230,6 +262,7 @@ eos-connect-button {
230
262
  stroke-width: 2.4 !important;
231
263
  stroke-linecap: round !important;
232
264
  stroke-linejoin: round !important;
265
+ animation: eos-connect-sdk-success-in 220ms cubic-bezier(0.22, 1, 0.36, 1) both;
233
266
  }
234
267
  .eos-connect-sdk-send-icon {
235
268
  justify-self: end !important;
@@ -250,6 +283,47 @@ eos-connect-button {
250
283
  transform: rotate(360deg);
251
284
  }
252
285
  }
286
+ @keyframes eos-connect-sdk-backdrop-in {
287
+ from {
288
+ opacity: 0;
289
+ }
290
+ to {
291
+ opacity: 1;
292
+ }
293
+ }
294
+ @keyframes eos-connect-sdk-sheet-in {
295
+ from {
296
+ opacity: 0;
297
+ transform: translate3d(0, 18px, 0) scale(0.985);
298
+ }
299
+ to {
300
+ opacity: 1;
301
+ transform: translate3d(0, 0, 0) scale(1);
302
+ }
303
+ }
304
+ @keyframes eos-connect-sdk-success-in {
305
+ from {
306
+ opacity: 0;
307
+ transform: scale(0.88);
308
+ }
309
+ to {
310
+ opacity: 1;
311
+ transform: scale(1);
312
+ }
313
+ }
314
+ @media (prefers-reduced-motion: reduce) {
315
+ .eos-connect-button,
316
+ .eos-connect-sdk-backdrop,
317
+ .eos-connect-sdk-sheet,
318
+ .eos-connect-sdk-close,
319
+ .eos-connect-sdk-primary,
320
+ .eos-connect-sdk-spinner,
321
+ .eos-connect-sdk-success-icon svg {
322
+ animation-duration: 0.01ms !important;
323
+ animation-iteration-count: 1 !important;
324
+ transition-duration: 0.01ms !important;
325
+ }
326
+ }
253
327
  .eos-connect-sdk-primary span {
254
328
  min-width: 0;
255
329
  overflow-wrap: anywhere;
@@ -389,10 +463,10 @@ export function renderEosConnectButton(client, options = {}) {
389
463
  : t('enableQuickPayment');
390
464
  return `<button class="eos-connect-button" type="button">${escapeHtml(label)}</button>`;
391
465
  }
392
- function renderQuickPaymentSheet(provider, t, flowState = 'idle') {
466
+ function renderQuickPaymentSheet(t, flowState = 'idle') {
393
467
  const isChecking = flowState === 'checking';
394
468
  const isSuccess = flowState === 'success';
395
- const disabled = isChecking || isSuccess || provider?.state !== 'available';
469
+ const disabled = isChecking || isSuccess;
396
470
  const title = isSuccess ? t('quickPaymentSuccess') : t('enableQuickPayment');
397
471
  const description = isSuccess
398
472
  ? t('quickPaymentSuccessDescription')
@@ -439,7 +513,7 @@ function renderQuickPaymentSheet(provider, t, flowState = 'idle') {
439
513
  <button
440
514
  type="button"
441
515
  class="eos-connect-sdk-primary eos-connect-sdk-primary--quick${isSuccess ? ' eos-connect-sdk-primary--success' : ''}"
442
- data-provider="${escapeHtml(provider?.id ?? 'telegram')}"
516
+ data-provider="telegram"
443
517
  aria-disabled="${disabled}"
444
518
  ${isChecking ? 'aria-busy="true"' : ''}
445
519
  ${disabled ? 'disabled' : ''}
@@ -453,15 +527,13 @@ function renderQuickPaymentSheet(provider, t, flowState = 'idle') {
453
527
  }
454
528
  export function renderEosConnectSheet(client, options = {}) {
455
529
  const snapshot = client.getSnapshot();
456
- const providers = client.getProviders();
457
- const primary = providers.find((provider) => provider.id === 'telegram') ?? providers[0];
458
530
  const t = createTranslator(options);
459
531
  const flowState = options.flowState === 'success' || options.flowState === 'checking'
460
532
  ? options.flowState
461
533
  : snapshot.status === 'connected' && snapshot.canUse
462
534
  ? 'success'
463
535
  : 'idle';
464
- return renderQuickPaymentSheet(primary, t, flowState);
536
+ return renderQuickPaymentSheet(t, flowState);
465
537
  }
466
538
  export async function connectEosProvider(client, _provider = 'telegram', options = {}) {
467
539
  return client.startTelegramWalletFlow(options);
@@ -601,18 +673,12 @@ function createModalElement(options) {
601
673
  }
602
674
  const provider = target?.closest('[data-provider]')?.dataset.provider;
603
675
  if (provider && this.client) {
604
- const providerConfig = this.client.getProviders().find((item) => item.id === provider);
605
- if (providerConfig?.state && providerConfig.state !== 'available') {
676
+ if (provider !== 'telegram' || this.flowState !== 'idle' || this.flowPromise) {
606
677
  return;
607
678
  }
608
- if (provider === 'telegram') {
609
- if (this.flowState !== 'idle' || this.flowPromise) {
610
- return;
611
- }
612
- this.flowState = 'checking';
613
- this.render();
614
- this.scheduleQuickPayRefresh();
615
- }
679
+ this.flowState = 'checking';
680
+ this.render();
681
+ this.scheduleQuickPayRefresh();
616
682
  this.flowPromise = connectEosProvider(this.client, provider, {
617
683
  ...options.telegramOptions,
618
684
  botUsername: options.telegramOptions?.botUsername ?? options.botUsername,
@@ -620,27 +686,23 @@ function createModalElement(options) {
620
686
  replaceWallet: options.telegramOptions?.replaceWallet ?? options.replaceWallet,
621
687
  openExternal: options.openExternal
622
688
  }).then((view) => {
623
- if (provider === 'telegram') {
624
- if (isQuickPaymentReadyView(view) || isQuickPaymentReadyState(this.client.getSnapshot())) {
625
- this.showQuickPaySuccess();
626
- return;
627
- }
628
- if (isQuickPaymentTerminalView(view)) {
629
- this.flowState = 'idle';
630
- this.clearQuickPayRefresh();
631
- this.render();
632
- return;
633
- }
634
- this.flowState = 'checking';
635
- this.render();
636
- this.scheduleQuickPayRefresh();
689
+ if (isQuickPaymentReadyView(view) || isQuickPaymentReadyState(this.client.getSnapshot())) {
690
+ this.showQuickPaySuccess();
691
+ return;
637
692
  }
638
- }).catch((error) => {
639
- if (provider === 'telegram') {
693
+ if (isQuickPaymentTerminalView(view)) {
640
694
  this.flowState = 'idle';
641
695
  this.clearQuickPayRefresh();
642
696
  this.render();
697
+ return;
643
698
  }
699
+ this.flowState = 'checking';
700
+ this.render();
701
+ this.scheduleQuickPayRefresh();
702
+ }).catch((error) => {
703
+ this.flowState = 'idle';
704
+ this.clearQuickPayRefresh();
705
+ this.render();
644
706
  dispatchEosConnectError(this, { error, provider });
645
707
  }).finally(() => {
646
708
  this.flowPromise = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eos3/connect",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Framework-neutral browser SDK for EOS Passkey Connect in Telegram Mini Apps.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/styles.css CHANGED
@@ -105,6 +105,7 @@ eos-connect-button {
105
105
  padding: 0;
106
106
  background: rgba(15, 23, 42, 0.36);
107
107
  cursor: pointer;
108
+ animation: eos-connect-sdk-backdrop-in 180ms cubic-bezier(0.25, 1, 0.5, 1) both;
108
109
  }
109
110
 
110
111
  .eos-connect-sdk-sheet {
@@ -119,6 +120,8 @@ eos-connect-button {
119
120
  padding: 16px;
120
121
  overflow: auto;
121
122
  -webkit-overflow-scrolling: touch;
123
+ transform-origin: center bottom;
124
+ animation: eos-connect-sdk-sheet-in 260ms cubic-bezier(0.22, 1, 0.36, 1) both;
122
125
  }
123
126
 
124
127
  .eos-connect-sdk-sheet--quick {
@@ -149,6 +152,14 @@ eos-connect-button {
149
152
  line-height: 1 !important;
150
153
  font-weight: 300 !important;
151
154
  padding: 0 !important;
155
+ transition:
156
+ background-color 160ms ease,
157
+ color 160ms ease,
158
+ transform 120ms ease !important;
159
+ }
160
+
161
+ .eos-connect-sdk-close:active {
162
+ transform: scale(0.96);
152
163
  }
153
164
 
154
165
  .eos-connect-sdk-summary {
@@ -210,6 +221,10 @@ eos-connect-button {
210
221
  font-weight: 700;
211
222
  padding: 0 16px;
212
223
  text-align: left;
224
+ transition:
225
+ background-color 180ms ease,
226
+ box-shadow 180ms ease,
227
+ transform 120ms ease;
213
228
  }
214
229
 
215
230
  .eos-connect-sdk-primary--quick {
@@ -226,6 +241,10 @@ eos-connect-button {
226
241
  text-align: center !important;
227
242
  }
228
243
 
244
+ .eos-connect-sdk-primary--quick:not([disabled]):active {
245
+ transform: translateY(1px) scale(0.992);
246
+ }
247
+
229
248
  .eos-connect-sdk-primary--quick[aria-busy="true"],
230
249
  .eos-connect-sdk-primary--quick[disabled] {
231
250
  opacity: 1 !important;
@@ -279,6 +298,7 @@ eos-connect-button {
279
298
  stroke-width: 2.4 !important;
280
299
  stroke-linecap: round !important;
281
300
  stroke-linejoin: round !important;
301
+ animation: eos-connect-sdk-success-in 220ms cubic-bezier(0.22, 1, 0.36, 1) both;
282
302
  }
283
303
 
284
304
  .eos-connect-sdk-send-icon {
@@ -303,6 +323,51 @@ eos-connect-button {
303
323
  }
304
324
  }
305
325
 
326
+ @keyframes eos-connect-sdk-backdrop-in {
327
+ from {
328
+ opacity: 0;
329
+ }
330
+ to {
331
+ opacity: 1;
332
+ }
333
+ }
334
+
335
+ @keyframes eos-connect-sdk-sheet-in {
336
+ from {
337
+ opacity: 0;
338
+ transform: translate3d(0, 18px, 0) scale(0.985);
339
+ }
340
+ to {
341
+ opacity: 1;
342
+ transform: translate3d(0, 0, 0) scale(1);
343
+ }
344
+ }
345
+
346
+ @keyframes eos-connect-sdk-success-in {
347
+ from {
348
+ opacity: 0;
349
+ transform: scale(0.88);
350
+ }
351
+ to {
352
+ opacity: 1;
353
+ transform: scale(1);
354
+ }
355
+ }
356
+
357
+ @media (prefers-reduced-motion: reduce) {
358
+ .eos-connect-button,
359
+ .eos-connect-sdk-backdrop,
360
+ .eos-connect-sdk-sheet,
361
+ .eos-connect-sdk-close,
362
+ .eos-connect-sdk-primary,
363
+ .eos-connect-sdk-spinner,
364
+ .eos-connect-sdk-success-icon svg {
365
+ animation-duration: 0.01ms !important;
366
+ animation-iteration-count: 1 !important;
367
+ transition-duration: 0.01ms !important;
368
+ }
369
+ }
370
+
306
371
  .eos-connect-sdk-primary span {
307
372
  min-width: 0;
308
373
  overflow-wrap: anywhere;