@agentconnect/ui 0.1.3 → 0.1.5
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/components/connect.d.ts +11 -1
- package/dist/components/connect.d.ts.map +1 -1
- package/dist/components/connect.js +196 -51
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -0
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +18 -0
- package/dist/styles/buttons.d.ts +2 -2
- package/dist/styles/buttons.d.ts.map +1 -1
- package/dist/styles/buttons.js +43 -0
- package/dist/styles/cards.d.ts +1 -1
- package/dist/styles/cards.d.ts.map +1 -1
- package/dist/styles/cards.js +98 -33
- package/package.json +2 -2
|
@@ -22,10 +22,16 @@ export declare class AgentConnectConnect extends HTMLElement {
|
|
|
22
22
|
private readonly loginPending;
|
|
23
23
|
private readonly statusCheckInFlight;
|
|
24
24
|
private readonly modelsRefreshIntervalMs;
|
|
25
|
+
private readonly updatePending;
|
|
26
|
+
private updateRefreshTimer;
|
|
27
|
+
private updateRefreshAttempts;
|
|
28
|
+
private readonly updateRefreshDelayMs;
|
|
29
|
+
private readonly updateRefreshMaxAttempts;
|
|
25
30
|
constructor();
|
|
26
31
|
connectedCallback(): void;
|
|
27
32
|
disconnectedCallback(): void;
|
|
28
33
|
private createInitialState;
|
|
34
|
+
private createInitialProviders;
|
|
29
35
|
private get storageKey();
|
|
30
36
|
private get localConfigKey();
|
|
31
37
|
private render;
|
|
@@ -51,15 +57,19 @@ export declare class AgentConnectConnect extends HTMLElement {
|
|
|
51
57
|
private checkProviderStatus;
|
|
52
58
|
private waitForProviderLogin;
|
|
53
59
|
private prefetchProviders;
|
|
60
|
+
private scheduleUpdateRefresh;
|
|
54
61
|
private prefetchAllProviderModels;
|
|
55
62
|
private refreshModels;
|
|
56
63
|
private renderProviders;
|
|
57
64
|
private buildProviderCard;
|
|
58
65
|
private getProviderStatusText;
|
|
59
|
-
private
|
|
66
|
+
private isUpdatingProvider;
|
|
67
|
+
private buildProviderActions;
|
|
60
68
|
private buildActionButton;
|
|
69
|
+
private buildUpdateButton;
|
|
61
70
|
private handleProviderSelect;
|
|
62
71
|
private connectProvider;
|
|
72
|
+
private updateProvider;
|
|
63
73
|
private setProviderLoading;
|
|
64
74
|
private ensureProviderReady;
|
|
65
75
|
private openLocalConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/components/connect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAC7D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAU;;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/components/connect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAC7D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAU;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAK;;IA2B9C,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,UAAU;IAiElB,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAsBf,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,gBAAgB;YAeV,OAAO;IAqFrB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,gBAAgB;YAMV,kBAAkB;IAUhC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;YASb,mBAAmB;YAgDnB,oBAAoB;YA4CpB,iBAAiB;IAQ/B,OAAO,CAAC,qBAAqB;YAcf,yBAAyB;YAmBzB,aAAa;IAyC3B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,iBAAiB;IAgFzB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IA0D5B,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,iBAAiB;YAyBX,oBAAoB;YAWpB,eAAe;YAiCf,cAAc;IAqB5B,OAAO,CAAC,kBAAkB;YAqBZ,mBAAmB;IA6DjC,OAAO,CAAC,eAAe;YAST,eAAe;IAoE7B,OAAO,CAAC,qBAAqB;IA+C7B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,0BAA0B;IA6BlC,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;IAwChB,OAAO,CAAC,OAAO;CAkBhB"}
|
|
@@ -26,6 +26,11 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
26
26
|
loginPending = new Set();
|
|
27
27
|
statusCheckInFlight = new Set();
|
|
28
28
|
modelsRefreshIntervalMs = 30_000;
|
|
29
|
+
updatePending = new Set();
|
|
30
|
+
updateRefreshTimer;
|
|
31
|
+
updateRefreshAttempts;
|
|
32
|
+
updateRefreshDelayMs = 1500;
|
|
33
|
+
updateRefreshMaxAttempts = 2;
|
|
29
34
|
constructor() {
|
|
30
35
|
super();
|
|
31
36
|
this.attachShadow({ mode: 'open' });
|
|
@@ -42,6 +47,8 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
42
47
|
this.modelsFetchedAt = 0;
|
|
43
48
|
this.elements = null;
|
|
44
49
|
this.loginPollTimer = null;
|
|
50
|
+
this.updateRefreshTimer = null;
|
|
51
|
+
this.updateRefreshAttempts = 0;
|
|
45
52
|
this.handleResize = () => {
|
|
46
53
|
if (this.state.view === 'connected' && this.elements?.overlay?.classList.contains('open')) {
|
|
47
54
|
this.positionPopover(true);
|
|
@@ -73,6 +80,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
73
80
|
loginExperience: null,
|
|
74
81
|
};
|
|
75
82
|
}
|
|
83
|
+
createInitialProviders() {
|
|
84
|
+
return [
|
|
85
|
+
{ id: 'claude', name: 'Claude', installed: false, loggedIn: false, pending: true },
|
|
86
|
+
{ id: 'codex', name: 'Codex', installed: false, loggedIn: false, pending: true },
|
|
87
|
+
{ id: 'cursor', name: 'Cursor', installed: false, loggedIn: false, pending: true },
|
|
88
|
+
{ id: 'local', name: 'Local', installed: false, loggedIn: false, pending: true },
|
|
89
|
+
];
|
|
90
|
+
}
|
|
76
91
|
get storageKey() {
|
|
77
92
|
return this.getAttribute('storage-key') || STORAGE_KEYS.lastSelection;
|
|
78
93
|
}
|
|
@@ -258,6 +273,7 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
258
273
|
return [
|
|
259
274
|
{ id: 'claude', name: 'Claude', installed: false, loggedIn: false, pending: true },
|
|
260
275
|
{ id: 'codex', name: 'Codex', installed: false, loggedIn: false, pending: true },
|
|
276
|
+
{ id: 'cursor', name: 'Cursor', installed: false, loggedIn: false, pending: true },
|
|
261
277
|
{ id: 'local', name: 'Local', installed: false, loggedIn: false, pending: true },
|
|
262
278
|
];
|
|
263
279
|
}
|
|
@@ -297,19 +313,38 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
297
313
|
}
|
|
298
314
|
try {
|
|
299
315
|
const client = await getClient();
|
|
316
|
+
let providerIds = [];
|
|
300
317
|
if (!this.state.loginExperience) {
|
|
301
318
|
const hello = await client.hello().catch(() => null);
|
|
302
319
|
this.state.loginExperience = hello?.loginExperience ?? null;
|
|
320
|
+
providerIds = hello?.providers ?? [];
|
|
321
|
+
}
|
|
322
|
+
if (!providerIds.length) {
|
|
323
|
+
providerIds = this.state.providers.map((entry) => entry.id);
|
|
303
324
|
}
|
|
304
|
-
|
|
305
|
-
|
|
325
|
+
if (!providerIds.length) {
|
|
326
|
+
providerIds = this.createInitialProviders().map((entry) => entry.id);
|
|
327
|
+
}
|
|
328
|
+
const existing = new Map(this.state.providers.map((entry) => [entry.id, entry]));
|
|
329
|
+
const initial = new Map(this.createInitialProviders().map((entry) => [entry.id, entry]));
|
|
330
|
+
this.state.providers = providerIds.map((id) => {
|
|
331
|
+
const base = existing.get(id) ||
|
|
332
|
+
initial.get(id) || {
|
|
333
|
+
id,
|
|
334
|
+
name: id,
|
|
335
|
+
installed: false,
|
|
336
|
+
loggedIn: false,
|
|
337
|
+
};
|
|
338
|
+
return { ...base, pending: true };
|
|
339
|
+
});
|
|
306
340
|
if (this.state.connected) {
|
|
307
341
|
this.state.selectedProvider = this.state.connected.provider;
|
|
308
342
|
this.state.selectedModel = this.state.connected.model;
|
|
309
343
|
}
|
|
310
344
|
else if (!this.state.selectedProvider) {
|
|
311
|
-
this.state.selectedProvider =
|
|
345
|
+
this.state.selectedProvider = providerIds[0] || null;
|
|
312
346
|
}
|
|
347
|
+
this.renderProviders();
|
|
313
348
|
const shouldRefreshModels = !this.state.selectedProvider ||
|
|
314
349
|
this.state.models.length === 0 ||
|
|
315
350
|
this.modelsProvider !== this.state.selectedProvider ||
|
|
@@ -329,9 +364,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
329
364
|
this.renderReasoningEfforts();
|
|
330
365
|
this.updatePopoverTitle();
|
|
331
366
|
this.updateButtonLabel();
|
|
367
|
+
this.scheduleUpdateRefresh();
|
|
332
368
|
if (this.state.view === 'connected') {
|
|
333
369
|
requestAnimationFrame(() => this.positionPopover());
|
|
334
370
|
}
|
|
371
|
+
providerIds.forEach((providerId) => {
|
|
372
|
+
const name = this.state.providers.find((entry) => entry.id === providerId)?.name;
|
|
373
|
+
this.checkProviderStatus(providerId, name, { silent: true }).catch(() => { });
|
|
374
|
+
});
|
|
335
375
|
}
|
|
336
376
|
catch {
|
|
337
377
|
if (!silent) {
|
|
@@ -363,34 +403,8 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
363
403
|
this.loginPollTimer = null;
|
|
364
404
|
}
|
|
365
405
|
async pollProviderStatus() {
|
|
366
|
-
const
|
|
367
|
-
|
|
368
|
-
const providers = await client.providers.list();
|
|
369
|
-
this.state.providers = providers;
|
|
370
|
-
for (const provider of providers) {
|
|
371
|
-
if (provider.loggedIn) {
|
|
372
|
-
this.loginPending.delete(provider.id);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
if (this.state.view === 'connected') {
|
|
376
|
-
this.updatePopoverTitle();
|
|
377
|
-
this.updateButtonLabel();
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
this.renderProviders();
|
|
381
|
-
this.updatePopoverTitle();
|
|
382
|
-
this.updateButtonLabel();
|
|
383
|
-
}
|
|
384
|
-
const selected = this.state.selectedProvider;
|
|
385
|
-
if (!selected)
|
|
386
|
-
return;
|
|
387
|
-
const before = previous.find((entry) => entry.id === selected);
|
|
388
|
-
const after = providers.find((entry) => entry.id === selected);
|
|
389
|
-
if (before && after && !before.loggedIn && after.loggedIn) {
|
|
390
|
-
await this.refreshModels();
|
|
391
|
-
this.renderConnectedModels();
|
|
392
|
-
this.renderReasoningEfforts();
|
|
393
|
-
}
|
|
406
|
+
const providerIds = this.state.providers.map((entry) => entry.id);
|
|
407
|
+
await Promise.all(providerIds.map((providerId) => this.checkProviderStatus(providerId, undefined, { silent: true })));
|
|
394
408
|
this.updateLoginPolling();
|
|
395
409
|
}
|
|
396
410
|
shouldPollLogin() {
|
|
@@ -414,12 +428,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
414
428
|
return;
|
|
415
429
|
this.state.providers[index] = { ...this.state.providers[index], ...updates };
|
|
416
430
|
}
|
|
417
|
-
async checkProviderStatus(providerId, providerName) {
|
|
431
|
+
async checkProviderStatus(providerId, providerName, options = {}) {
|
|
418
432
|
if (this.statusCheckInFlight.has(providerId))
|
|
419
433
|
return;
|
|
420
434
|
this.statusCheckInFlight.add(providerId);
|
|
421
435
|
const label = providerName || providerId;
|
|
422
|
-
|
|
436
|
+
if (!options.silent) {
|
|
437
|
+
this.setStatus(`Checking ${label} status...`);
|
|
438
|
+
}
|
|
423
439
|
try {
|
|
424
440
|
const client = await getClient();
|
|
425
441
|
const status = await client.providers.status(providerId);
|
|
@@ -427,6 +443,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
427
443
|
installed: status.installed,
|
|
428
444
|
loggedIn: status.loggedIn,
|
|
429
445
|
version: status.version,
|
|
446
|
+
pending: false,
|
|
447
|
+
updateAvailable: status.updateAvailable,
|
|
448
|
+
latestVersion: status.latestVersion,
|
|
449
|
+
updateCheckedAt: status.updateCheckedAt,
|
|
450
|
+
updateSource: status.updateSource,
|
|
451
|
+
updateCommand: status.updateCommand,
|
|
452
|
+
updateMessage: status.updateMessage,
|
|
453
|
+
updateInProgress: status.updateInProgress,
|
|
430
454
|
});
|
|
431
455
|
if (status.loggedIn) {
|
|
432
456
|
this.loginPending.delete(providerId);
|
|
@@ -438,6 +462,13 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
438
462
|
this.updatePopoverTitle();
|
|
439
463
|
this.updateButtonLabel();
|
|
440
464
|
this.updateLoginPolling();
|
|
465
|
+
this.scheduleUpdateRefresh();
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
this.updateProviderEntry(providerId, { pending: false });
|
|
469
|
+
this.renderProviders();
|
|
470
|
+
this.updatePopoverTitle();
|
|
471
|
+
this.updateButtonLabel();
|
|
441
472
|
}
|
|
442
473
|
finally {
|
|
443
474
|
this.statusCheckInFlight.delete(providerId);
|
|
@@ -458,6 +489,13 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
458
489
|
installed: status.installed,
|
|
459
490
|
loggedIn: status.loggedIn,
|
|
460
491
|
version: status.version,
|
|
492
|
+
updateAvailable: status.updateAvailable,
|
|
493
|
+
latestVersion: status.latestVersion,
|
|
494
|
+
updateCheckedAt: status.updateCheckedAt,
|
|
495
|
+
updateSource: status.updateSource,
|
|
496
|
+
updateCommand: status.updateCommand,
|
|
497
|
+
updateMessage: status.updateMessage,
|
|
498
|
+
updateInProgress: status.updateInProgress,
|
|
461
499
|
});
|
|
462
500
|
if (status.loggedIn) {
|
|
463
501
|
this.loginPending.delete(providerId);
|
|
@@ -467,6 +505,7 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
467
505
|
this.updatePopoverTitle();
|
|
468
506
|
this.updateButtonLabel();
|
|
469
507
|
this.updateLoginPolling();
|
|
508
|
+
this.scheduleUpdateRefresh();
|
|
470
509
|
return true;
|
|
471
510
|
}
|
|
472
511
|
await new Promise((resolve) => setTimeout(resolve, this.loginPollIntervalMs));
|
|
@@ -484,11 +523,37 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
484
523
|
await this.prefetchAllProviderModels();
|
|
485
524
|
this.prefetching = false;
|
|
486
525
|
}
|
|
526
|
+
scheduleUpdateRefresh() {
|
|
527
|
+
if (this.updateRefreshTimer)
|
|
528
|
+
return;
|
|
529
|
+
if (this.updateRefreshAttempts >= this.updateRefreshMaxAttempts)
|
|
530
|
+
return;
|
|
531
|
+
const needsUpdateInfo = this.state.providers.some((provider) => provider.installed && provider.updateCheckedAt === undefined);
|
|
532
|
+
if (!needsUpdateInfo)
|
|
533
|
+
return;
|
|
534
|
+
this.updateRefreshAttempts += 1;
|
|
535
|
+
this.updateRefreshTimer = setTimeout(() => {
|
|
536
|
+
this.updateRefreshTimer = null;
|
|
537
|
+
this.refresh({ silent: true }).catch(() => { });
|
|
538
|
+
}, this.updateRefreshDelayMs);
|
|
539
|
+
}
|
|
487
540
|
async prefetchAllProviderModels() {
|
|
488
541
|
if (!this.state.providers.length)
|
|
489
542
|
return;
|
|
490
543
|
const client = await getClient();
|
|
491
|
-
await Promise.allSettled(this.state.providers.map((provider) =>
|
|
544
|
+
await Promise.allSettled(this.state.providers.map((provider) => {
|
|
545
|
+
const key = `agentconnect:models-prefetch:${provider.id}`;
|
|
546
|
+
if (localStorage.getItem(key) === '1') {
|
|
547
|
+
return Promise.resolve();
|
|
548
|
+
}
|
|
549
|
+
try {
|
|
550
|
+
localStorage.setItem(key, '1');
|
|
551
|
+
}
|
|
552
|
+
catch {
|
|
553
|
+
// ignore
|
|
554
|
+
}
|
|
555
|
+
return client.models.list(provider.id);
|
|
556
|
+
}));
|
|
492
557
|
}
|
|
493
558
|
async refreshModels() {
|
|
494
559
|
if (!this.state.selectedProvider) {
|
|
@@ -576,25 +641,36 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
576
641
|
icon.appendChild(iconLabel);
|
|
577
642
|
}
|
|
578
643
|
const textWrap = document.createElement('div');
|
|
644
|
+
const nameRow = document.createElement('div');
|
|
645
|
+
nameRow.className = 'ac-provider-name-row';
|
|
579
646
|
const name = document.createElement('div');
|
|
580
647
|
name.className = 'ac-provider-name';
|
|
581
648
|
name.textContent = provider.name || provider.id;
|
|
649
|
+
nameRow.appendChild(name);
|
|
650
|
+
if (provider.updateAvailable && !this.isUpdatingProvider(provider)) {
|
|
651
|
+
const updateBadge = document.createElement('span');
|
|
652
|
+
updateBadge.className = 'ac-provider-update';
|
|
653
|
+
updateBadge.textContent = 'Update available';
|
|
654
|
+
nameRow.appendChild(updateBadge);
|
|
655
|
+
}
|
|
582
656
|
const status = document.createElement('div');
|
|
583
657
|
status.className = 'ac-provider-status';
|
|
584
658
|
status.textContent = statusText;
|
|
585
|
-
textWrap.append(
|
|
659
|
+
textWrap.append(nameRow, status);
|
|
586
660
|
meta.append(icon, textWrap);
|
|
587
661
|
row.appendChild(meta);
|
|
588
662
|
card.appendChild(row);
|
|
589
663
|
card.addEventListener('click', () => {
|
|
590
664
|
this.handleProviderSelect(provider);
|
|
591
665
|
});
|
|
592
|
-
const
|
|
593
|
-
if (
|
|
594
|
-
const
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
666
|
+
const actions = this.buildProviderActions(provider);
|
|
667
|
+
if (actions.length) {
|
|
668
|
+
const actionsEl = document.createElement('div');
|
|
669
|
+
actionsEl.className = 'ac-provider-actions';
|
|
670
|
+
for (const action of actions) {
|
|
671
|
+
actionsEl.appendChild(action);
|
|
672
|
+
}
|
|
673
|
+
card.appendChild(actionsEl);
|
|
598
674
|
}
|
|
599
675
|
return card;
|
|
600
676
|
}
|
|
@@ -603,8 +679,11 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
603
679
|
const isLocal = provider.id === 'local';
|
|
604
680
|
const hasLocalConfig = this.hasLocalConfig();
|
|
605
681
|
const isConnected = this.state.connected?.provider === provider.id;
|
|
682
|
+
const updating = this.isUpdatingProvider(provider);
|
|
606
683
|
if (pending)
|
|
607
684
|
return 'Checking...';
|
|
685
|
+
if (updating)
|
|
686
|
+
return 'Updating...';
|
|
608
687
|
if (isLocal) {
|
|
609
688
|
if (!hasLocalConfig)
|
|
610
689
|
return 'Needs setup';
|
|
@@ -620,17 +699,31 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
620
699
|
return 'Connected';
|
|
621
700
|
return 'Detected';
|
|
622
701
|
}
|
|
623
|
-
|
|
702
|
+
isUpdatingProvider(provider) {
|
|
703
|
+
return Boolean(provider.updateInProgress || this.updatePending.has(provider.id));
|
|
704
|
+
}
|
|
705
|
+
buildProviderActions(provider) {
|
|
706
|
+
const actions = [];
|
|
624
707
|
const pending = provider.pending === true;
|
|
625
708
|
const isLocal = provider.id === 'local';
|
|
626
709
|
const hasLocalConfig = this.hasLocalConfig();
|
|
627
710
|
const isConnected = this.state.connected?.provider === provider.id;
|
|
628
711
|
const terminalLogin = provider.id === 'claude' && this.state.loginExperience === 'terminal';
|
|
712
|
+
const updating = this.isUpdatingProvider(provider);
|
|
629
713
|
if (pending) {
|
|
630
|
-
|
|
714
|
+
actions.push(this.buildActionButton('Checking...', true));
|
|
715
|
+
return actions;
|
|
716
|
+
}
|
|
717
|
+
if (updating) {
|
|
718
|
+
actions.push(this.buildUpdateButton(provider, true));
|
|
719
|
+
return actions;
|
|
631
720
|
}
|
|
632
721
|
if (isLocal) {
|
|
633
|
-
|
|
722
|
+
actions.push(this.buildActionButton(hasLocalConfig ? 'Edit' : 'Configure', false, () => this.openLocalConfig()));
|
|
723
|
+
return actions;
|
|
724
|
+
}
|
|
725
|
+
if (provider.updateAvailable) {
|
|
726
|
+
actions.push(this.buildUpdateButton(provider, false));
|
|
634
727
|
}
|
|
635
728
|
if (!provider.installed) {
|
|
636
729
|
const label = terminalLogin ? 'Install + Run /login' : 'Install + Login';
|
|
@@ -638,12 +731,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
638
731
|
if (terminalLogin) {
|
|
639
732
|
button.title = 'Opens a terminal and runs claude login';
|
|
640
733
|
}
|
|
641
|
-
|
|
734
|
+
actions.push(button);
|
|
735
|
+
return actions;
|
|
642
736
|
}
|
|
643
737
|
if (this.loginPending.has(provider.id)) {
|
|
644
738
|
const button = this.buildActionButton('Waiting for login...', false, () => this.checkProviderStatus(provider.id, provider.name));
|
|
645
739
|
button.title = `Click to check ${provider.name || provider.id} login status`;
|
|
646
|
-
|
|
740
|
+
actions.push(button);
|
|
741
|
+
return actions;
|
|
647
742
|
}
|
|
648
743
|
if (!provider.loggedIn) {
|
|
649
744
|
const label = terminalLogin ? 'Run /login' : 'Login';
|
|
@@ -651,15 +746,16 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
651
746
|
if (terminalLogin) {
|
|
652
747
|
button.title = 'Opens a terminal and runs claude login';
|
|
653
748
|
}
|
|
654
|
-
|
|
749
|
+
actions.push(button);
|
|
750
|
+
return actions;
|
|
655
751
|
}
|
|
656
752
|
if (isConnected)
|
|
657
|
-
return
|
|
658
|
-
return
|
|
753
|
+
return actions;
|
|
754
|
+
return actions;
|
|
659
755
|
}
|
|
660
|
-
buildActionButton(label, disabled, onClick, loading = false) {
|
|
756
|
+
buildActionButton(label, disabled, onClick, loading = false, variant = 'secondary') {
|
|
661
757
|
const button = document.createElement('button');
|
|
662
|
-
button.className =
|
|
758
|
+
button.className = `ac-button ${variant}`;
|
|
663
759
|
if (loading) {
|
|
664
760
|
button.classList.add('loading');
|
|
665
761
|
}
|
|
@@ -673,11 +769,37 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
673
769
|
}
|
|
674
770
|
return button;
|
|
675
771
|
}
|
|
772
|
+
buildUpdateButton(provider, loading) {
|
|
773
|
+
const updateButton = document.createElement('button');
|
|
774
|
+
updateButton.className = 'ac-button update icon';
|
|
775
|
+
updateButton.type = 'button';
|
|
776
|
+
updateButton.setAttribute('aria-label', `Update ${provider.name || provider.id}`);
|
|
777
|
+
updateButton.title = provider.updateMessage || 'Update available';
|
|
778
|
+
if (loading) {
|
|
779
|
+
updateButton.classList.add('loading');
|
|
780
|
+
updateButton.disabled = true;
|
|
781
|
+
}
|
|
782
|
+
updateButton.innerHTML = `
|
|
783
|
+
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
784
|
+
<path d="M12 3a1 1 0 0 1 1 1v8.17l2.59-2.58a1 1 0 1 1 1.41 1.42l-4.3 4.29a1 1 0 0 1-1.42 0l-4.3-4.29a1 1 0 0 1 1.41-1.42L11 12.17V4a1 1 0 0 1 1-1z" />
|
|
785
|
+
<path d="M5 19a1 1 0 0 1-1-1v-2a1 1 0 1 1 2 0v1h12v-1a1 1 0 1 1 2 0v2a1 1 0 0 1-1 1H5z" />
|
|
786
|
+
</svg>
|
|
787
|
+
`;
|
|
788
|
+
if (!loading) {
|
|
789
|
+
updateButton.addEventListener('click', (event) => {
|
|
790
|
+
event.stopPropagation();
|
|
791
|
+
this.updateProvider(provider);
|
|
792
|
+
});
|
|
793
|
+
}
|
|
794
|
+
return updateButton;
|
|
795
|
+
}
|
|
676
796
|
async handleProviderSelect(provider) {
|
|
677
797
|
if (this.busy)
|
|
678
798
|
return;
|
|
679
799
|
if (provider.pending)
|
|
680
800
|
return;
|
|
801
|
+
if (this.isUpdatingProvider(provider))
|
|
802
|
+
return;
|
|
681
803
|
if (provider.id === 'local') {
|
|
682
804
|
this.openLocalConfig();
|
|
683
805
|
return;
|
|
@@ -720,6 +842,29 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
720
842
|
this.setProviderLoading(provider.id, false);
|
|
721
843
|
}
|
|
722
844
|
}
|
|
845
|
+
async updateProvider(provider) {
|
|
846
|
+
if (this.updatePending.has(provider.id))
|
|
847
|
+
return;
|
|
848
|
+
this.updatePending.add(provider.id);
|
|
849
|
+
this.renderProviders();
|
|
850
|
+
try {
|
|
851
|
+
const client = await getClient();
|
|
852
|
+
await client.providers.update(provider.id);
|
|
853
|
+
await this.refresh({ silent: true });
|
|
854
|
+
}
|
|
855
|
+
catch (err) {
|
|
856
|
+
this.setAlert({
|
|
857
|
+
title: 'Update failed',
|
|
858
|
+
message: err instanceof Error ? err.message : 'Could not update provider.',
|
|
859
|
+
action: 'Retry',
|
|
860
|
+
onAction: () => this.updateProvider(provider),
|
|
861
|
+
});
|
|
862
|
+
}
|
|
863
|
+
finally {
|
|
864
|
+
this.updatePending.delete(provider.id);
|
|
865
|
+
this.renderProviders();
|
|
866
|
+
}
|
|
867
|
+
}
|
|
723
868
|
setProviderLoading(providerId, loading, label = 'Working...') {
|
|
724
869
|
const card = this.elements?.providerList?.querySelector(`.ac-provider-card[data-provider="${providerId}"]`);
|
|
725
870
|
if (!card)
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAoC7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAoC7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAarD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,y6GA+E5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;YAIjB,MAAM,EAAE;CACvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -47,6 +47,9 @@ export const ERROR_MESSAGES = {
|
|
|
47
47
|
export const PROVIDER_ICONS = {
|
|
48
48
|
claude: `<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
49
49
|
<path d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"/>
|
|
50
|
+
</svg>`,
|
|
51
|
+
cursor: `<svg viewBox="0 0 466.73 532.09" xmlns="http://www.w3.org/2000/svg">
|
|
52
|
+
<path d="M457.43 125.94 244.42 2.96c-6.84-3.95-15.28-3.95-22.12 0L9.3 125.94c-5.75 3.32-9.3 9.46-9.3 16.11v247.99c0 6.65 3.55 12.79 9.3 16.11l213.01 122.98c6.84 3.95 15.28 3.95 22.12 0l213.01-122.98c5.75-3.32 9.3-9.46 9.3-16.11V142.05c0-6.65-3.55-12.79-9.3-16.11ZM444.05 151.99 238.42 508.15c-1.39 2.4-5.06 1.42-5.06-1.36V273.58c0-4.66-2.49-8.97-6.53-11.31L24.87 145.67c-2.4-1.39-1.42-5.06 1.36-5.06h411.26c5.84 0 9.49 6.33 6.57 11.39Z"/>
|
|
50
53
|
</svg>`,
|
|
51
54
|
codex: `<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
52
55
|
<path d="M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z"/>
|
package/dist/register.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0BH;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAmBnD"}
|
package/dist/register.js
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
* Custom element registration.
|
|
3
3
|
*/
|
|
4
4
|
import { AgentConnectLoginButton, AgentConnectModelPicker, AgentConnectProviderStatus, AgentConnectConnect, } from './components';
|
|
5
|
+
import { getClient } from './client';
|
|
6
|
+
let prefetchStarted = false;
|
|
7
|
+
async function prefetchProviderData() {
|
|
8
|
+
if (prefetchStarted)
|
|
9
|
+
return;
|
|
10
|
+
prefetchStarted = true;
|
|
11
|
+
try {
|
|
12
|
+
const client = await getClient();
|
|
13
|
+
const providers = await client.providers.list();
|
|
14
|
+
await Promise.allSettled(providers.map((provider) => client.models.list(provider.id)));
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Ignore background prefetch errors
|
|
18
|
+
}
|
|
19
|
+
}
|
|
5
20
|
/**
|
|
6
21
|
* Register all AgentConnect custom elements.
|
|
7
22
|
* Safe to call multiple times - will only register once.
|
|
@@ -22,4 +37,7 @@ export function defineAgentConnectComponents() {
|
|
|
22
37
|
if (!customElements.get('agentconnect-connect')) {
|
|
23
38
|
customElements.define('agentconnect-connect', AgentConnectConnect);
|
|
24
39
|
}
|
|
40
|
+
queueMicrotask(() => {
|
|
41
|
+
void prefetchProviderData();
|
|
42
|
+
});
|
|
25
43
|
}
|
package/dist/styles/buttons.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Button styles.
|
|
3
3
|
*/
|
|
4
|
-
export declare const buttonStyles = "\n .ac-button {\n appearance: none;\n border: 1px solid transparent;\n border-radius: 999px;\n padding: 10px 16px;\n background: var(--ac-button-bg, #0b1320);\n color: var(--ac-button-color, #f8fbff);\n font-size: 13px;\n font-weight: 700;\n letter-spacing: 0.01em;\n cursor: pointer;\n transition: transform 0.15s ease, box-shadow 0.2s ease, opacity 0.2s ease;\n }\n .ac-button:hover:not([disabled]) {\n transform: translateY(-1px);\n box-shadow: 0 14px 30px rgba(10, 16, 28, 0.2);\n }\n .ac-button.secondary {\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(250, 251, 254, 0.9) 100%\n );\n color: #1a1f2e;\n border: 1px solid rgba(195, 165, 90, 0.35);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n 0 1px 3px rgba(0, 0, 0, 0.04);\n }\n .ac-button.secondary:hover:not([disabled]) {\n border-color: rgba(200, 170, 90, 0.55);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(253, 253, 255, 0.95) 100%\n );\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.12),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 4px 12px rgba(0, 0, 0, 0.06);\n }\n .ac-button.ghost {\n background: transparent;\n color: rgba(80, 70, 50, 0.7);\n border: 1px solid rgba(195, 165, 90, 0.3);\n box-shadow: none;\n }\n .ac-button.ghost:hover:not([disabled]) {\n color: rgba(80, 70, 50, 0.9);\n border-color: rgba(200, 170, 90, 0.45);\n background: rgba(255, 255, 255, 0.5);\n }\n .ac-button.ac-close {\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: 999px;\n font-size: 18px;\n line-height: 1;\n color: rgba(80, 70, 50, 0.5);\n }\n .ac-button.ac-close:hover:not([disabled]) {\n color: rgba(80, 70, 50, 0.8);\n background: rgba(200, 170, 90, 0.12);\n }\n .ac-button[disabled] {\n opacity: 0.6;\n cursor: default;\n box-shadow: none;\n }\n .ac-chip {\n font-size: 12px;\n font-weight: 600;\n padding: 6px 10px;\n border-radius: 999px;\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.9) 0%,\n rgba(250, 248, 245, 0.85) 100%\n );\n color: rgba(80, 70, 50, 0.8);\n border: 1px solid rgba(195, 165, 90, 0.28);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);\n }\n .ac-button.loading {\n position: relative;\n color: transparent;\n pointer-events: none;\n }\n .ac-button.loading::after {\n content: '';\n position: absolute;\n inset: 0;\n margin: auto;\n width: 16px;\n height: 16px;\n border: 2px solid var(--ac-button-color, #f8fbff);\n border-top-color: transparent;\n border-radius: 50%;\n animation: ac-spin 0.8s linear infinite;\n }\n .ac-button.secondary.loading::after {\n border-color: var(--ac-button-secondary-color, #0b1320);\n border-top-color: transparent;\n }\n .ac-button:active:not([disabled]) {\n transform: scale(0.98);\n }\n";
|
|
5
|
-
export declare const connectButtonStyles = "\n .ac-connect .ac-button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n min-height: 52px;\n padding: 14px 24px;\n border-radius: 999px;\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(245, 247, 250, 0.9) 25%,\n rgba(235, 238, 245, 0.85) 50%,\n rgba(240, 242, 248, 0.9) 75%,\n rgba(250, 251, 254, 0.95) 100%\n );\n color: #1a1f2e;\n font-size: 13px;\n font-weight: 600;\n letter-spacing: 0.02em;\n border: 1.5px solid rgba(195, 165, 90, 0.55);\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.2),\n 0 1px 2px rgba(0, 0, 0, 0.04),\n 0 4px 12px rgba(0, 0, 0, 0.06),\n 0 12px 36px rgba(0, 0, 0, 0.08),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n inset 0 -1px 0 rgba(0, 0, 0, 0.03);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n width: min(var(--ac-connect-width, 240px), 92vw);\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n .ac-connect .ac-connect-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .ac-connect .ac-connect-icon {\n width: 20px;\n height: 20px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 20px;\n }\n .ac-connect .ac-connect-icon svg {\n width: 18px;\n height: 18px;\n }\n .ac-connect .ac-connect-icon[data-provider=\"claude\"] svg {\n fill: #d97757;\n }\n .ac-connect .ac-button:hover:not([disabled]) {\n transform: translateY(-2px);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(250, 252, 255, 0.95) 25%,\n rgba(245, 248, 255, 0.9) 50%,\n rgba(248, 250, 255, 0.95) 75%,\n rgba(255, 255, 255, 1) 100%\n );\n border-color: rgba(200, 170, 90, 0.65);\n box-shadow:\n 0 0 0 1px rgba(215, 185, 100, 0.25),\n 0 2px 4px rgba(0, 0, 0, 0.04),\n 0 8px 24px rgba(0, 0, 0, 0.08),\n 0 20px 50px rgba(0, 0, 0, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n inset 0 -1px 0 rgba(0, 0, 0, 0.02);\n }\n .ac-connect .ac-button:active:not([disabled]) {\n transform: translateY(0) scale(0.98);\n background: linear-gradient(\n 165deg,\n rgba(245, 247, 252, 0.95) 0%,\n rgba(240, 243, 250, 0.9) 50%,\n rgba(245, 247, 252, 0.95) 100%\n );\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.05),\n 0 4px 12px rgba(0, 0, 0, 0.06),\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n inset 0 -1px 0 rgba(0, 0, 0, 0.02);\n }\n";
|
|
4
|
+
export declare const buttonStyles = "\n .ac-button {\n appearance: none;\n border: 1px solid transparent;\n border-radius: 999px;\n padding: 10px 16px;\n background: var(--ac-button-bg, #0b1320);\n color: var(--ac-button-color, #f8fbff);\n font-size: 13px;\n font-weight: 700;\n letter-spacing: 0.01em;\n cursor: pointer;\n transition: transform 0.15s ease, box-shadow 0.2s ease, opacity 0.2s ease;\n }\n .ac-button:hover:not([disabled]) {\n transform: translateY(-1px);\n box-shadow: 0 14px 30px rgba(10, 16, 28, 0.2);\n }\n .ac-button.secondary {\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(250, 251, 254, 0.9) 100%\n );\n color: #1a1f2e;\n border: 1px solid rgba(195, 165, 90, 0.35);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n 0 1px 3px rgba(0, 0, 0, 0.04);\n }\n .ac-button.secondary:hover:not([disabled]) {\n border-color: rgba(200, 170, 90, 0.55);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(253, 253, 255, 0.95) 100%\n );\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.12),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 4px 12px rgba(0, 0, 0, 0.06);\n }\n .ac-button.update {\n background: transparent;\n color: #2b2f3a;\n border: 1px solid rgba(120, 129, 145, 0.45);\n --ac-button-color: #2b2f3a;\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n 0 6px 16px rgba(18, 24, 38, 0.12);\n }\n .ac-button.update:hover:not([disabled]) {\n border-color: rgba(90, 100, 120, 0.7);\n background: transparent;\n box-shadow:\n 0 0 0 1px rgba(80, 90, 110, 0.2),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 10px 20px rgba(18, 24, 38, 0.16);\n }\n .ac-button.update.icon {\n width: 40px;\n height: 40px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n transition: transform 0.15s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n }\n .ac-button.update.icon svg {\n width: 18px;\n height: 18px;\n fill: currentColor;\n filter: none;\n }\n .ac-button.update.icon:hover:not([disabled]) {\n border-color: rgba(90, 100, 120, 0.7);\n box-shadow:\n 0 0 0 1px rgba(80, 90, 110, 0.2),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 10px 20px rgba(18, 24, 38, 0.16);\n }\n .ac-button.ghost {\n background: transparent;\n color: rgba(80, 70, 50, 0.7);\n border: 1px solid rgba(195, 165, 90, 0.3);\n box-shadow: none;\n }\n .ac-button.ghost:hover:not([disabled]) {\n color: rgba(80, 70, 50, 0.9);\n border-color: rgba(200, 170, 90, 0.45);\n background: rgba(255, 255, 255, 0.5);\n }\n .ac-button.ac-close {\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: 999px;\n font-size: 18px;\n line-height: 1;\n color: rgba(80, 70, 50, 0.5);\n }\n .ac-button.ac-close:hover:not([disabled]) {\n color: rgba(80, 70, 50, 0.8);\n background: rgba(200, 170, 90, 0.12);\n }\n .ac-button[disabled] {\n opacity: 0.6;\n cursor: default;\n box-shadow: none;\n }\n .ac-chip {\n font-size: 12px;\n font-weight: 600;\n padding: 6px 10px;\n border-radius: 999px;\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.9) 0%,\n rgba(250, 248, 245, 0.85) 100%\n );\n color: rgba(80, 70, 50, 0.8);\n border: 1px solid rgba(195, 165, 90, 0.28);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);\n }\n .ac-button.loading {\n position: relative;\n color: transparent;\n pointer-events: none;\n }\n .ac-button.loading::after {\n content: '';\n position: absolute;\n inset: 0;\n margin: auto;\n width: 16px;\n height: 16px;\n border: 2px solid var(--ac-button-color, #f8fbff);\n border-top-color: transparent;\n border-radius: 50%;\n animation: ac-spin 0.8s linear infinite;\n }\n .ac-button.secondary.loading::after {\n border-color: var(--ac-button-secondary-color, #0b1320);\n border-top-color: transparent;\n }\n .ac-button:active:not([disabled]) {\n transform: scale(0.98);\n }\n";
|
|
5
|
+
export declare const connectButtonStyles = "\n .ac-connect .ac-button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n min-height: 52px;\n padding: 14px 24px;\n border-radius: 999px;\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(245, 247, 250, 0.9) 25%,\n rgba(235, 238, 245, 0.85) 50%,\n rgba(240, 242, 248, 0.9) 75%,\n rgba(250, 251, 254, 0.95) 100%\n );\n color: #1a1f2e;\n font-size: 13px;\n font-weight: 600;\n letter-spacing: 0.02em;\n border: 1.5px solid rgba(195, 165, 90, 0.55);\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.2),\n 0 1px 2px rgba(0, 0, 0, 0.04),\n 0 4px 12px rgba(0, 0, 0, 0.06),\n 0 12px 36px rgba(0, 0, 0, 0.08),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n inset 0 -1px 0 rgba(0, 0, 0, 0.03);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n width: min(var(--ac-connect-width, 240px), 92vw);\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n .ac-connect .ac-connect-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .ac-connect .ac-connect-icon {\n width: 20px;\n height: 20px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 20px;\n }\n .ac-connect .ac-connect-icon svg {\n width: 18px;\n height: 18px;\n }\n .ac-connect .ac-connect-icon[data-provider=\"claude\"] svg {\n fill: #d97757;\n }\n .ac-connect .ac-connect-icon[data-provider=\"cursor\"] svg {\n fill: #26251e;\n }\n .ac-connect .ac-button:hover:not([disabled]) {\n transform: translateY(-2px);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(250, 252, 255, 0.95) 25%,\n rgba(245, 248, 255, 0.9) 50%,\n rgba(248, 250, 255, 0.95) 75%,\n rgba(255, 255, 255, 1) 100%\n );\n border-color: rgba(200, 170, 90, 0.65);\n box-shadow:\n 0 0 0 1px rgba(215, 185, 100, 0.25),\n 0 2px 4px rgba(0, 0, 0, 0.04),\n 0 8px 24px rgba(0, 0, 0, 0.08),\n 0 20px 50px rgba(0, 0, 0, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n inset 0 -1px 0 rgba(0, 0, 0, 0.02);\n }\n .ac-connect .ac-button:active:not([disabled]) {\n transform: translateY(0) scale(0.98);\n background: linear-gradient(\n 165deg,\n rgba(245, 247, 252, 0.95) 0%,\n rgba(240, 243, 250, 0.9) 50%,\n rgba(245, 247, 252, 0.95) 100%\n );\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.05),\n 0 4px 12px rgba(0, 0, 0, 0.06),\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n inset 0 -1px 0 rgba(0, 0, 0, 0.02);\n }\n";
|
|
6
6
|
//# sourceMappingURL=buttons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buttons.d.ts","sourceRoot":"","sources":["../../src/styles/buttons.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"buttons.d.ts","sourceRoot":"","sources":["../../src/styles/buttons.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY,mmIAqJxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,gxFA+F/B,CAAC"}
|
package/dist/styles/buttons.js
CHANGED
|
@@ -43,6 +43,46 @@ export const buttonStyles = `
|
|
|
43
43
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
44
44
|
0 4px 12px rgba(0, 0, 0, 0.06);
|
|
45
45
|
}
|
|
46
|
+
.ac-button.update {
|
|
47
|
+
background: transparent;
|
|
48
|
+
color: #2b2f3a;
|
|
49
|
+
border: 1px solid rgba(120, 129, 145, 0.45);
|
|
50
|
+
--ac-button-color: #2b2f3a;
|
|
51
|
+
box-shadow:
|
|
52
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.9),
|
|
53
|
+
0 6px 16px rgba(18, 24, 38, 0.12);
|
|
54
|
+
}
|
|
55
|
+
.ac-button.update:hover:not([disabled]) {
|
|
56
|
+
border-color: rgba(90, 100, 120, 0.7);
|
|
57
|
+
background: transparent;
|
|
58
|
+
box-shadow:
|
|
59
|
+
0 0 0 1px rgba(80, 90, 110, 0.2),
|
|
60
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
61
|
+
0 10px 20px rgba(18, 24, 38, 0.16);
|
|
62
|
+
}
|
|
63
|
+
.ac-button.update.icon {
|
|
64
|
+
width: 40px;
|
|
65
|
+
height: 40px;
|
|
66
|
+
padding: 0;
|
|
67
|
+
display: inline-flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
position: relative;
|
|
71
|
+
transition: transform 0.15s ease, box-shadow 0.2s ease, border-color 0.2s ease;
|
|
72
|
+
}
|
|
73
|
+
.ac-button.update.icon svg {
|
|
74
|
+
width: 18px;
|
|
75
|
+
height: 18px;
|
|
76
|
+
fill: currentColor;
|
|
77
|
+
filter: none;
|
|
78
|
+
}
|
|
79
|
+
.ac-button.update.icon:hover:not([disabled]) {
|
|
80
|
+
border-color: rgba(90, 100, 120, 0.7);
|
|
81
|
+
box-shadow:
|
|
82
|
+
0 0 0 1px rgba(80, 90, 110, 0.2),
|
|
83
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
84
|
+
0 10px 20px rgba(18, 24, 38, 0.16);
|
|
85
|
+
}
|
|
46
86
|
.ac-button.ghost {
|
|
47
87
|
background: transparent;
|
|
48
88
|
color: rgba(80, 70, 50, 0.7);
|
|
@@ -170,6 +210,9 @@ export const connectButtonStyles = `
|
|
|
170
210
|
.ac-connect .ac-connect-icon[data-provider="claude"] svg {
|
|
171
211
|
fill: #d97757;
|
|
172
212
|
}
|
|
213
|
+
.ac-connect .ac-connect-icon[data-provider="cursor"] svg {
|
|
214
|
+
fill: #26251e;
|
|
215
|
+
}
|
|
173
216
|
.ac-connect .ac-button:hover:not([disabled]) {
|
|
174
217
|
transform: translateY(-2px);
|
|
175
218
|
background: linear-gradient(
|
package/dist/styles/cards.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provider card styles.
|
|
3
3
|
*/
|
|
4
|
-
export declare const cardStyles = "\n .ac-provider-list {\n display: grid;\n gap: 12px;\n }\n .ac-provider-card {\n border: 1px solid rgba(195, 165, 90, 0.28);\n border-radius: 16px;\n padding: 14px 16px;\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n gap: 12px;\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.8) 0%,\n rgba(250, 251, 254, 0.7) 50%,\n rgba(255, 255, 255, 0.8) 100%\n );\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.8),\n 0 2px 8px rgba(0, 0, 0, 0.04);\n }\n .ac-provider-card:hover {\n transform: translateY(-2px);\n border-color: rgba(200, 170, 90, 0.5);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(252, 253, 255, 0.9) 50%,\n rgba(255, 255, 255, 0.95) 100%\n );\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.12),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(0, 0, 0, 0.08);\n }\n .ac-provider-card[data-provider=\"claude\"]:hover {\n border-color: rgba(217, 119, 87, 0.45);\n box-shadow:\n 0 0 0 1px rgba(217, 119, 87, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(217, 119, 87, 0.12);\n }\n .ac-provider-card[data-provider=\"
|
|
4
|
+
export declare const cardStyles = "\n .ac-provider-list {\n display: grid;\n gap: 12px;\n }\n\n .ac-provider-card {\n border: 1px solid rgba(195, 165, 90, 0.28);\n border-radius: 16px;\n padding: 14px 16px;\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n gap: 12px;\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.8) 0%,\n rgba(250, 251, 254, 0.7) 50%,\n rgba(255, 255, 255, 0.8) 100%\n );\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.8),\n 0 2px 8px rgba(0, 0, 0, 0.04);\n }\n .ac-provider-card:hover {\n transform: translateY(-2px);\n border-color: rgba(200, 170, 90, 0.5);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(252, 253, 255, 0.9) 50%,\n rgba(255, 255, 255, 0.95) 100%\n );\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.12),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(0, 0, 0, 0.08);\n }\n .ac-provider-card:active {\n transform: scale(0.99);\n }\n .ac-provider-card.active {\n border-color: rgba(200, 170, 90, 0.6);\n background: linear-gradient(\n 165deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(253, 252, 250, 0.95) 50%,\n rgba(255, 255, 255, 1) 100%\n );\n box-shadow:\n 0 0 0 1px rgba(210, 180, 100, 0.18),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 28px rgba(180, 150, 80, 0.15);\n }\n\n .ac-provider-card[data-provider=\"claude\"]:hover {\n border-color: rgba(217, 119, 87, 0.45);\n box-shadow:\n 0 0 0 1px rgba(217, 119, 87, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(217, 119, 87, 0.12);\n }\n .ac-provider-card[data-provider=\"claude\"].active {\n border-color: rgba(217, 119, 87, 0.55);\n box-shadow:\n 0 0 0 1px rgba(217, 119, 87, 0.15),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 28px rgba(217, 119, 87, 0.18);\n }\n\n .ac-provider-card[data-provider=\"codex\"]:hover {\n border-color: rgba(97, 108, 120, 0.45);\n box-shadow:\n 0 0 0 1px rgba(97, 108, 120, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(97, 108, 120, 0.12);\n }\n .ac-provider-card[data-provider=\"codex\"].active {\n border-color: rgba(97, 108, 120, 0.55);\n box-shadow:\n 0 0 0 1px rgba(97, 108, 120, 0.15),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 28px rgba(97, 108, 120, 0.18);\n }\n\n .ac-provider-card[data-provider=\"cursor\"]:hover {\n border-color: rgba(20, 22, 26, 0.55);\n box-shadow:\n 0 0 0 1px rgba(20, 22, 26, 0.18),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(20, 22, 26, 0.16);\n }\n .ac-provider-card[data-provider=\"cursor\"].active {\n border-color: rgba(20, 22, 26, 0.65);\n box-shadow:\n 0 0 0 1px rgba(20, 22, 26, 0.22),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 28px rgba(20, 22, 26, 0.2);\n }\n\n .ac-provider-card[data-provider=\"local\"]:hover {\n border-color: rgba(100, 116, 139, 0.45);\n box-shadow:\n 0 0 0 1px rgba(100, 116, 139, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 24px rgba(100, 116, 139, 0.12);\n }\n .ac-provider-card[data-provider=\"local\"].active {\n border-color: rgba(100, 116, 139, 0.55);\n box-shadow:\n 0 0 0 1px rgba(100, 116, 139, 0.15),\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 8px 28px rgba(100, 116, 139, 0.18);\n }\n\n .ac-provider-row {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .ac-provider-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .ac-provider-icon {\n width: 48px;\n height: 48px;\n border-radius: 14px;\n display: grid;\n place-items: center;\n font-weight: 700;\n letter-spacing: 0.06em;\n font-size: 11px;\n background: linear-gradient(\n 145deg,\n rgba(255, 255, 255, 0.95) 0%,\n rgba(245, 243, 240, 0.9) 100%\n );\n color: rgba(100, 85, 60, 0.8);\n border: 1.5px solid rgba(195, 165, 90, 0.35);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n inset 0 -1px 0 rgba(0, 0, 0, 0.03),\n 0 2px 6px rgba(0, 0, 0, 0.04);\n }\n .ac-provider-icon svg {\n width: 26px;\n height: 26px;\n }\n\n .ac-provider-icon[data-provider=\"claude\"] {\n background: linear-gradient(145deg, #fff8f3 0%, #ffeee2 100%);\n border-color: rgba(217, 119, 87, 0.4);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 2px 8px rgba(217, 119, 87, 0.12);\n }\n .ac-provider-icon[data-provider=\"claude\"] svg {\n fill: #d97757;\n }\n .ac-provider-card:hover .ac-provider-icon[data-provider=\"claude\"] {\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 4px 16px rgba(217, 119, 87, 0.2);\n }\n\n .ac-provider-icon[data-provider=\"codex\"] {\n background: linear-gradient(145deg, #f5f5f5 0%, #e8e8e8 100%);\n border-color: rgba(122, 132, 146, 0.4);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 2px 8px rgba(97, 108, 120, 0.14);\n }\n .ac-provider-icon[data-provider=\"codex\"] svg {\n fill: #2a2f36;\n }\n .ac-provider-card:hover .ac-provider-icon[data-provider=\"codex\"] {\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 4px 16px rgba(97, 108, 120, 0.2);\n }\n\n .ac-provider-icon[data-provider=\"cursor\"] {\n background: linear-gradient(145deg, #fbfaf6 0%, #f0ede6 100%);\n border-color: rgba(29, 32, 38, 0.42);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 2px 8px rgba(20, 22, 26, 0.16);\n }\n .ac-provider-icon[data-provider=\"cursor\"] svg {\n fill: #111316;\n }\n .ac-provider-card:hover .ac-provider-icon[data-provider=\"cursor\"] {\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 4px 16px rgba(20, 22, 26, 0.24);\n }\n\n .ac-provider-icon[data-provider=\"local\"] {\n background: linear-gradient(145deg, #f2f4f8 0%, #e4e8f0 100%);\n border-color: rgba(100, 116, 139, 0.4);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 2px 8px rgba(100, 116, 139, 0.12);\n }\n .ac-provider-icon[data-provider=\"local\"] svg {\n fill: #64748b;\n }\n .ac-provider-card:hover .ac-provider-icon[data-provider=\"local\"] {\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 1),\n 0 4px 16px rgba(100, 116, 139, 0.2);\n }\n\n .ac-provider-name {\n font-size: 15px;\n font-weight: 700;\n }\n .ac-provider-name-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .ac-provider-update {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.01em;\n background: transparent;\n color: #2b2f3a;\n border: 1px solid rgba(120, 129, 145, 0.45);\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.9),\n 0 6px 16px rgba(18, 24, 38, 0.12);\n background-image: linear-gradient(120deg, #6b7280 0%, #1f2937 45%, #64748b 100%);\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n .ac-provider-status {\n font-size: 12px;\n color: var(--ac-muted, #556070);\n }\n .ac-provider-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .ac-provider-card.loading {\n pointer-events: none;\n }\n .ac-provider-card.loading .ac-provider-name,\n .ac-provider-card.loading .ac-provider-status {\n background: var(--ac-skeleton-base, #e3e8ef);\n color: transparent;\n border-radius: 4px;\n animation: ac-shimmer 1.5s ease-in-out infinite;\n background-size: 200% 100%;\n }\n .ac-provider-card .ac-provider-actions .ac-button {\n pointer-events: none;\n }\n .ac-provider-card .ac-provider-actions .ac-button.update.icon {\n pointer-events: auto;\n }\n";
|
|
5
5
|
//# sourceMappingURL=cards.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/styles/cards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/styles/cards.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,UAAU,i1PAiRtB,CAAC"}
|
package/dist/styles/cards.js
CHANGED
|
@@ -6,6 +6,7 @@ export const cardStyles = `
|
|
|
6
6
|
display: grid;
|
|
7
7
|
gap: 12px;
|
|
8
8
|
}
|
|
9
|
+
|
|
9
10
|
.ac-provider-card {
|
|
10
11
|
border: 1px solid rgba(195, 165, 90, 0.28);
|
|
11
12
|
border-radius: 16px;
|
|
@@ -40,26 +41,8 @@ export const cardStyles = `
|
|
|
40
41
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
41
42
|
0 8px 24px rgba(0, 0, 0, 0.08);
|
|
42
43
|
}
|
|
43
|
-
.ac-provider-card
|
|
44
|
-
|
|
45
|
-
box-shadow:
|
|
46
|
-
0 0 0 1px rgba(217, 119, 87, 0.1),
|
|
47
|
-
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
48
|
-
0 8px 24px rgba(217, 119, 87, 0.12);
|
|
49
|
-
}
|
|
50
|
-
.ac-provider-card[data-provider="codex"]:hover {
|
|
51
|
-
border-color: rgba(32, 33, 35, 0.45);
|
|
52
|
-
box-shadow:
|
|
53
|
-
0 0 0 1px rgba(32, 33, 35, 0.1),
|
|
54
|
-
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
55
|
-
0 8px 24px rgba(32, 33, 35, 0.12);
|
|
56
|
-
}
|
|
57
|
-
.ac-provider-card[data-provider="local"]:hover {
|
|
58
|
-
border-color: rgba(100, 116, 139, 0.45);
|
|
59
|
-
box-shadow:
|
|
60
|
-
0 0 0 1px rgba(100, 116, 139, 0.1),
|
|
61
|
-
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
62
|
-
0 8px 24px rgba(100, 116, 139, 0.12);
|
|
44
|
+
.ac-provider-card:active {
|
|
45
|
+
transform: scale(0.99);
|
|
63
46
|
}
|
|
64
47
|
.ac-provider-card.active {
|
|
65
48
|
border-color: rgba(200, 170, 90, 0.6);
|
|
@@ -74,6 +57,14 @@ export const cardStyles = `
|
|
|
74
57
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
75
58
|
0 8px 28px rgba(180, 150, 80, 0.15);
|
|
76
59
|
}
|
|
60
|
+
|
|
61
|
+
.ac-provider-card[data-provider="claude"]:hover {
|
|
62
|
+
border-color: rgba(217, 119, 87, 0.45);
|
|
63
|
+
box-shadow:
|
|
64
|
+
0 0 0 1px rgba(217, 119, 87, 0.1),
|
|
65
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
66
|
+
0 8px 24px rgba(217, 119, 87, 0.12);
|
|
67
|
+
}
|
|
77
68
|
.ac-provider-card[data-provider="claude"].active {
|
|
78
69
|
border-color: rgba(217, 119, 87, 0.55);
|
|
79
70
|
box-shadow:
|
|
@@ -81,12 +72,43 @@ export const cardStyles = `
|
|
|
81
72
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
82
73
|
0 8px 28px rgba(217, 119, 87, 0.18);
|
|
83
74
|
}
|
|
75
|
+
|
|
76
|
+
.ac-provider-card[data-provider="codex"]:hover {
|
|
77
|
+
border-color: rgba(97, 108, 120, 0.45);
|
|
78
|
+
box-shadow:
|
|
79
|
+
0 0 0 1px rgba(97, 108, 120, 0.1),
|
|
80
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
81
|
+
0 8px 24px rgba(97, 108, 120, 0.12);
|
|
82
|
+
}
|
|
84
83
|
.ac-provider-card[data-provider="codex"].active {
|
|
85
|
-
border-color: rgba(
|
|
84
|
+
border-color: rgba(97, 108, 120, 0.55);
|
|
86
85
|
box-shadow:
|
|
87
|
-
0 0 0 1px rgba(
|
|
86
|
+
0 0 0 1px rgba(97, 108, 120, 0.15),
|
|
88
87
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
89
|
-
0 8px 28px rgba(
|
|
88
|
+
0 8px 28px rgba(97, 108, 120, 0.18);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.ac-provider-card[data-provider="cursor"]:hover {
|
|
92
|
+
border-color: rgba(20, 22, 26, 0.55);
|
|
93
|
+
box-shadow:
|
|
94
|
+
0 0 0 1px rgba(20, 22, 26, 0.18),
|
|
95
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
96
|
+
0 8px 24px rgba(20, 22, 26, 0.16);
|
|
97
|
+
}
|
|
98
|
+
.ac-provider-card[data-provider="cursor"].active {
|
|
99
|
+
border-color: rgba(20, 22, 26, 0.65);
|
|
100
|
+
box-shadow:
|
|
101
|
+
0 0 0 1px rgba(20, 22, 26, 0.22),
|
|
102
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
103
|
+
0 8px 28px rgba(20, 22, 26, 0.2);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.ac-provider-card[data-provider="local"]:hover {
|
|
107
|
+
border-color: rgba(100, 116, 139, 0.45);
|
|
108
|
+
box-shadow:
|
|
109
|
+
0 0 0 1px rgba(100, 116, 139, 0.1),
|
|
110
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
111
|
+
0 8px 24px rgba(100, 116, 139, 0.12);
|
|
90
112
|
}
|
|
91
113
|
.ac-provider-card[data-provider="local"].active {
|
|
92
114
|
border-color: rgba(100, 116, 139, 0.55);
|
|
@@ -95,6 +117,7 @@ export const cardStyles = `
|
|
|
95
117
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
96
118
|
0 8px 28px rgba(100, 116, 139, 0.18);
|
|
97
119
|
}
|
|
120
|
+
|
|
98
121
|
.ac-provider-row {
|
|
99
122
|
display: flex;
|
|
100
123
|
align-items: center;
|
|
@@ -105,6 +128,7 @@ export const cardStyles = `
|
|
|
105
128
|
align-items: center;
|
|
106
129
|
gap: 12px;
|
|
107
130
|
}
|
|
131
|
+
|
|
108
132
|
.ac-provider-icon {
|
|
109
133
|
width: 48px;
|
|
110
134
|
height: 48px;
|
|
@@ -130,6 +154,7 @@ export const cardStyles = `
|
|
|
130
154
|
width: 26px;
|
|
131
155
|
height: 26px;
|
|
132
156
|
}
|
|
157
|
+
|
|
133
158
|
.ac-provider-icon[data-provider="claude"] {
|
|
134
159
|
background: linear-gradient(145deg, #fff8f3 0%, #ffeee2 100%);
|
|
135
160
|
border-color: rgba(217, 119, 87, 0.4);
|
|
@@ -145,21 +170,39 @@ export const cardStyles = `
|
|
|
145
170
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
146
171
|
0 4px 16px rgba(217, 119, 87, 0.2);
|
|
147
172
|
}
|
|
173
|
+
|
|
148
174
|
.ac-provider-icon[data-provider="codex"] {
|
|
149
175
|
background: linear-gradient(145deg, #f5f5f5 0%, #e8e8e8 100%);
|
|
150
|
-
border-color: rgba(
|
|
176
|
+
border-color: rgba(122, 132, 146, 0.4);
|
|
151
177
|
box-shadow:
|
|
152
178
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
153
|
-
0 2px 8px rgba(
|
|
179
|
+
0 2px 8px rgba(97, 108, 120, 0.14);
|
|
154
180
|
}
|
|
155
181
|
.ac-provider-icon[data-provider="codex"] svg {
|
|
156
|
-
fill: #
|
|
182
|
+
fill: #2a2f36;
|
|
157
183
|
}
|
|
158
184
|
.ac-provider-card:hover .ac-provider-icon[data-provider="codex"] {
|
|
159
185
|
box-shadow:
|
|
160
186
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
161
|
-
0 4px 16px rgba(
|
|
187
|
+
0 4px 16px rgba(97, 108, 120, 0.2);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.ac-provider-icon[data-provider="cursor"] {
|
|
191
|
+
background: linear-gradient(145deg, #fbfaf6 0%, #f0ede6 100%);
|
|
192
|
+
border-color: rgba(29, 32, 38, 0.42);
|
|
193
|
+
box-shadow:
|
|
194
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
195
|
+
0 2px 8px rgba(20, 22, 26, 0.16);
|
|
162
196
|
}
|
|
197
|
+
.ac-provider-icon[data-provider="cursor"] svg {
|
|
198
|
+
fill: #111316;
|
|
199
|
+
}
|
|
200
|
+
.ac-provider-card:hover .ac-provider-icon[data-provider="cursor"] {
|
|
201
|
+
box-shadow:
|
|
202
|
+
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
203
|
+
0 4px 16px rgba(20, 22, 26, 0.24);
|
|
204
|
+
}
|
|
205
|
+
|
|
163
206
|
.ac-provider-icon[data-provider="local"] {
|
|
164
207
|
background: linear-gradient(145deg, #f2f4f8 0%, #e4e8f0 100%);
|
|
165
208
|
border-color: rgba(100, 116, 139, 0.4);
|
|
@@ -175,10 +218,35 @@ export const cardStyles = `
|
|
|
175
218
|
inset 0 1px 0 rgba(255, 255, 255, 1),
|
|
176
219
|
0 4px 16px rgba(100, 116, 139, 0.2);
|
|
177
220
|
}
|
|
221
|
+
|
|
178
222
|
.ac-provider-name {
|
|
179
223
|
font-size: 15px;
|
|
180
224
|
font-weight: 700;
|
|
181
225
|
}
|
|
226
|
+
.ac-provider-name-row {
|
|
227
|
+
display: flex;
|
|
228
|
+
align-items: center;
|
|
229
|
+
gap: 8px;
|
|
230
|
+
}
|
|
231
|
+
.ac-provider-update {
|
|
232
|
+
display: inline-flex;
|
|
233
|
+
align-items: center;
|
|
234
|
+
padding: 3px 10px;
|
|
235
|
+
border-radius: 999px;
|
|
236
|
+
font-size: 11px;
|
|
237
|
+
font-weight: 600;
|
|
238
|
+
letter-spacing: 0.01em;
|
|
239
|
+
background: transparent;
|
|
240
|
+
color: #2b2f3a;
|
|
241
|
+
border: 1px solid rgba(120, 129, 145, 0.45);
|
|
242
|
+
box-shadow:
|
|
243
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.9),
|
|
244
|
+
0 6px 16px rgba(18, 24, 38, 0.12);
|
|
245
|
+
background-image: linear-gradient(120deg, #6b7280 0%, #1f2937 45%, #64748b 100%);
|
|
246
|
+
-webkit-background-clip: text;
|
|
247
|
+
background-clip: text;
|
|
248
|
+
-webkit-text-fill-color: transparent;
|
|
249
|
+
}
|
|
182
250
|
.ac-provider-status {
|
|
183
251
|
font-size: 12px;
|
|
184
252
|
color: var(--ac-muted, #556070);
|
|
@@ -188,6 +256,7 @@ export const cardStyles = `
|
|
|
188
256
|
align-items: center;
|
|
189
257
|
gap: 8px;
|
|
190
258
|
}
|
|
259
|
+
|
|
191
260
|
.ac-provider-card.loading {
|
|
192
261
|
pointer-events: none;
|
|
193
262
|
}
|
|
@@ -199,14 +268,10 @@ export const cardStyles = `
|
|
|
199
268
|
animation: ac-shimmer 1.5s ease-in-out infinite;
|
|
200
269
|
background-size: 200% 100%;
|
|
201
270
|
}
|
|
202
|
-
.ac-provider-card:active {
|
|
203
|
-
transform: scale(0.99);
|
|
204
|
-
}
|
|
205
271
|
.ac-provider-card .ac-provider-actions .ac-button {
|
|
206
272
|
pointer-events: none;
|
|
207
273
|
}
|
|
208
|
-
.ac-provider-card .ac-provider-actions .ac-button
|
|
209
|
-
|
|
210
|
-
box-shadow: inherit;
|
|
274
|
+
.ac-provider-card .ac-provider-actions .ac-button.update.icon {
|
|
275
|
+
pointer-events: auto;
|
|
211
276
|
}
|
|
212
277
|
`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentconnect/ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/rayzhudev/agent-connect",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"dev": "tsc --watch"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@agentconnect/sdk": "
|
|
32
|
+
"@agentconnect/sdk": "^0.1.5"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"typescript": "^5.6.2"
|