@agentconnect/ui 0.1.4 → 0.1.6
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 +206 -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;IA8FrB,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,48 @@ 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);
|
|
324
|
+
}
|
|
325
|
+
if (!providerIds.length) {
|
|
326
|
+
providerIds = this.createInitialProviders().map((entry) => entry.id);
|
|
327
|
+
}
|
|
328
|
+
let listProviders = null;
|
|
329
|
+
try {
|
|
330
|
+
listProviders = await client.providers.list();
|
|
303
331
|
}
|
|
304
|
-
|
|
305
|
-
|
|
332
|
+
catch {
|
|
333
|
+
listProviders = null;
|
|
334
|
+
}
|
|
335
|
+
const listed = new Map((listProviders || []).map((entry) => [entry.id, entry]));
|
|
336
|
+
const existing = new Map(this.state.providers.map((entry) => [entry.id, entry]));
|
|
337
|
+
const initial = new Map(this.createInitialProviders().map((entry) => [entry.id, entry]));
|
|
338
|
+
this.state.providers = providerIds.map((id) => {
|
|
339
|
+
const base = listed.get(id) ||
|
|
340
|
+
existing.get(id) ||
|
|
341
|
+
initial.get(id) || {
|
|
342
|
+
id,
|
|
343
|
+
name: id,
|
|
344
|
+
installed: false,
|
|
345
|
+
loggedIn: false,
|
|
346
|
+
};
|
|
347
|
+
const pending = !listed.get(id);
|
|
348
|
+
return { ...base, pending };
|
|
349
|
+
});
|
|
306
350
|
if (this.state.connected) {
|
|
307
351
|
this.state.selectedProvider = this.state.connected.provider;
|
|
308
352
|
this.state.selectedModel = this.state.connected.model;
|
|
309
353
|
}
|
|
310
354
|
else if (!this.state.selectedProvider) {
|
|
311
|
-
this.state.selectedProvider =
|
|
355
|
+
this.state.selectedProvider = providerIds[0] || null;
|
|
312
356
|
}
|
|
357
|
+
this.renderProviders();
|
|
313
358
|
const shouldRefreshModels = !this.state.selectedProvider ||
|
|
314
359
|
this.state.models.length === 0 ||
|
|
315
360
|
this.modelsProvider !== this.state.selectedProvider ||
|
|
@@ -329,9 +374,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
329
374
|
this.renderReasoningEfforts();
|
|
330
375
|
this.updatePopoverTitle();
|
|
331
376
|
this.updateButtonLabel();
|
|
377
|
+
this.scheduleUpdateRefresh();
|
|
332
378
|
if (this.state.view === 'connected') {
|
|
333
379
|
requestAnimationFrame(() => this.positionPopover());
|
|
334
380
|
}
|
|
381
|
+
providerIds.forEach((providerId) => {
|
|
382
|
+
const name = this.state.providers.find((entry) => entry.id === providerId)?.name;
|
|
383
|
+
this.checkProviderStatus(providerId, name, { silent: true }).catch(() => { });
|
|
384
|
+
});
|
|
335
385
|
}
|
|
336
386
|
catch {
|
|
337
387
|
if (!silent) {
|
|
@@ -363,34 +413,8 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
363
413
|
this.loginPollTimer = null;
|
|
364
414
|
}
|
|
365
415
|
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
|
-
}
|
|
416
|
+
const providerIds = this.state.providers.map((entry) => entry.id);
|
|
417
|
+
await Promise.all(providerIds.map((providerId) => this.checkProviderStatus(providerId, undefined, { silent: true })));
|
|
394
418
|
this.updateLoginPolling();
|
|
395
419
|
}
|
|
396
420
|
shouldPollLogin() {
|
|
@@ -414,12 +438,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
414
438
|
return;
|
|
415
439
|
this.state.providers[index] = { ...this.state.providers[index], ...updates };
|
|
416
440
|
}
|
|
417
|
-
async checkProviderStatus(providerId, providerName) {
|
|
441
|
+
async checkProviderStatus(providerId, providerName, options = {}) {
|
|
418
442
|
if (this.statusCheckInFlight.has(providerId))
|
|
419
443
|
return;
|
|
420
444
|
this.statusCheckInFlight.add(providerId);
|
|
421
445
|
const label = providerName || providerId;
|
|
422
|
-
|
|
446
|
+
if (!options.silent) {
|
|
447
|
+
this.setStatus(`Checking ${label} status...`);
|
|
448
|
+
}
|
|
423
449
|
try {
|
|
424
450
|
const client = await getClient();
|
|
425
451
|
const status = await client.providers.status(providerId);
|
|
@@ -427,6 +453,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
427
453
|
installed: status.installed,
|
|
428
454
|
loggedIn: status.loggedIn,
|
|
429
455
|
version: status.version,
|
|
456
|
+
pending: false,
|
|
457
|
+
updateAvailable: status.updateAvailable,
|
|
458
|
+
latestVersion: status.latestVersion,
|
|
459
|
+
updateCheckedAt: status.updateCheckedAt,
|
|
460
|
+
updateSource: status.updateSource,
|
|
461
|
+
updateCommand: status.updateCommand,
|
|
462
|
+
updateMessage: status.updateMessage,
|
|
463
|
+
updateInProgress: status.updateInProgress,
|
|
430
464
|
});
|
|
431
465
|
if (status.loggedIn) {
|
|
432
466
|
this.loginPending.delete(providerId);
|
|
@@ -438,6 +472,13 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
438
472
|
this.updatePopoverTitle();
|
|
439
473
|
this.updateButtonLabel();
|
|
440
474
|
this.updateLoginPolling();
|
|
475
|
+
this.scheduleUpdateRefresh();
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
this.updateProviderEntry(providerId, { pending: false });
|
|
479
|
+
this.renderProviders();
|
|
480
|
+
this.updatePopoverTitle();
|
|
481
|
+
this.updateButtonLabel();
|
|
441
482
|
}
|
|
442
483
|
finally {
|
|
443
484
|
this.statusCheckInFlight.delete(providerId);
|
|
@@ -458,6 +499,13 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
458
499
|
installed: status.installed,
|
|
459
500
|
loggedIn: status.loggedIn,
|
|
460
501
|
version: status.version,
|
|
502
|
+
updateAvailable: status.updateAvailable,
|
|
503
|
+
latestVersion: status.latestVersion,
|
|
504
|
+
updateCheckedAt: status.updateCheckedAt,
|
|
505
|
+
updateSource: status.updateSource,
|
|
506
|
+
updateCommand: status.updateCommand,
|
|
507
|
+
updateMessage: status.updateMessage,
|
|
508
|
+
updateInProgress: status.updateInProgress,
|
|
461
509
|
});
|
|
462
510
|
if (status.loggedIn) {
|
|
463
511
|
this.loginPending.delete(providerId);
|
|
@@ -467,6 +515,7 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
467
515
|
this.updatePopoverTitle();
|
|
468
516
|
this.updateButtonLabel();
|
|
469
517
|
this.updateLoginPolling();
|
|
518
|
+
this.scheduleUpdateRefresh();
|
|
470
519
|
return true;
|
|
471
520
|
}
|
|
472
521
|
await new Promise((resolve) => setTimeout(resolve, this.loginPollIntervalMs));
|
|
@@ -484,11 +533,37 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
484
533
|
await this.prefetchAllProviderModels();
|
|
485
534
|
this.prefetching = false;
|
|
486
535
|
}
|
|
536
|
+
scheduleUpdateRefresh() {
|
|
537
|
+
if (this.updateRefreshTimer)
|
|
538
|
+
return;
|
|
539
|
+
if (this.updateRefreshAttempts >= this.updateRefreshMaxAttempts)
|
|
540
|
+
return;
|
|
541
|
+
const needsUpdateInfo = this.state.providers.some((provider) => provider.installed && provider.updateCheckedAt === undefined);
|
|
542
|
+
if (!needsUpdateInfo)
|
|
543
|
+
return;
|
|
544
|
+
this.updateRefreshAttempts += 1;
|
|
545
|
+
this.updateRefreshTimer = setTimeout(() => {
|
|
546
|
+
this.updateRefreshTimer = null;
|
|
547
|
+
this.refresh({ silent: true }).catch(() => { });
|
|
548
|
+
}, this.updateRefreshDelayMs);
|
|
549
|
+
}
|
|
487
550
|
async prefetchAllProviderModels() {
|
|
488
551
|
if (!this.state.providers.length)
|
|
489
552
|
return;
|
|
490
553
|
const client = await getClient();
|
|
491
|
-
await Promise.allSettled(this.state.providers.map((provider) =>
|
|
554
|
+
await Promise.allSettled(this.state.providers.map((provider) => {
|
|
555
|
+
const key = `agentconnect:models-prefetch:${provider.id}`;
|
|
556
|
+
if (localStorage.getItem(key) === '1') {
|
|
557
|
+
return Promise.resolve();
|
|
558
|
+
}
|
|
559
|
+
try {
|
|
560
|
+
localStorage.setItem(key, '1');
|
|
561
|
+
}
|
|
562
|
+
catch {
|
|
563
|
+
// ignore
|
|
564
|
+
}
|
|
565
|
+
return client.models.list(provider.id);
|
|
566
|
+
}));
|
|
492
567
|
}
|
|
493
568
|
async refreshModels() {
|
|
494
569
|
if (!this.state.selectedProvider) {
|
|
@@ -576,25 +651,36 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
576
651
|
icon.appendChild(iconLabel);
|
|
577
652
|
}
|
|
578
653
|
const textWrap = document.createElement('div');
|
|
654
|
+
const nameRow = document.createElement('div');
|
|
655
|
+
nameRow.className = 'ac-provider-name-row';
|
|
579
656
|
const name = document.createElement('div');
|
|
580
657
|
name.className = 'ac-provider-name';
|
|
581
658
|
name.textContent = provider.name || provider.id;
|
|
659
|
+
nameRow.appendChild(name);
|
|
660
|
+
if (provider.updateAvailable && !this.isUpdatingProvider(provider)) {
|
|
661
|
+
const updateBadge = document.createElement('span');
|
|
662
|
+
updateBadge.className = 'ac-provider-update';
|
|
663
|
+
updateBadge.textContent = 'Update available';
|
|
664
|
+
nameRow.appendChild(updateBadge);
|
|
665
|
+
}
|
|
582
666
|
const status = document.createElement('div');
|
|
583
667
|
status.className = 'ac-provider-status';
|
|
584
668
|
status.textContent = statusText;
|
|
585
|
-
textWrap.append(
|
|
669
|
+
textWrap.append(nameRow, status);
|
|
586
670
|
meta.append(icon, textWrap);
|
|
587
671
|
row.appendChild(meta);
|
|
588
672
|
card.appendChild(row);
|
|
589
673
|
card.addEventListener('click', () => {
|
|
590
674
|
this.handleProviderSelect(provider);
|
|
591
675
|
});
|
|
592
|
-
const
|
|
593
|
-
if (
|
|
594
|
-
const
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
676
|
+
const actions = this.buildProviderActions(provider);
|
|
677
|
+
if (actions.length) {
|
|
678
|
+
const actionsEl = document.createElement('div');
|
|
679
|
+
actionsEl.className = 'ac-provider-actions';
|
|
680
|
+
for (const action of actions) {
|
|
681
|
+
actionsEl.appendChild(action);
|
|
682
|
+
}
|
|
683
|
+
card.appendChild(actionsEl);
|
|
598
684
|
}
|
|
599
685
|
return card;
|
|
600
686
|
}
|
|
@@ -603,8 +689,11 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
603
689
|
const isLocal = provider.id === 'local';
|
|
604
690
|
const hasLocalConfig = this.hasLocalConfig();
|
|
605
691
|
const isConnected = this.state.connected?.provider === provider.id;
|
|
692
|
+
const updating = this.isUpdatingProvider(provider);
|
|
606
693
|
if (pending)
|
|
607
694
|
return 'Checking...';
|
|
695
|
+
if (updating)
|
|
696
|
+
return 'Updating...';
|
|
608
697
|
if (isLocal) {
|
|
609
698
|
if (!hasLocalConfig)
|
|
610
699
|
return 'Needs setup';
|
|
@@ -620,17 +709,31 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
620
709
|
return 'Connected';
|
|
621
710
|
return 'Detected';
|
|
622
711
|
}
|
|
623
|
-
|
|
712
|
+
isUpdatingProvider(provider) {
|
|
713
|
+
return Boolean(provider.updateInProgress || this.updatePending.has(provider.id));
|
|
714
|
+
}
|
|
715
|
+
buildProviderActions(provider) {
|
|
716
|
+
const actions = [];
|
|
624
717
|
const pending = provider.pending === true;
|
|
625
718
|
const isLocal = provider.id === 'local';
|
|
626
719
|
const hasLocalConfig = this.hasLocalConfig();
|
|
627
720
|
const isConnected = this.state.connected?.provider === provider.id;
|
|
628
721
|
const terminalLogin = provider.id === 'claude' && this.state.loginExperience === 'terminal';
|
|
722
|
+
const updating = this.isUpdatingProvider(provider);
|
|
629
723
|
if (pending) {
|
|
630
|
-
|
|
724
|
+
actions.push(this.buildActionButton('Checking...', true));
|
|
725
|
+
return actions;
|
|
726
|
+
}
|
|
727
|
+
if (updating) {
|
|
728
|
+
actions.push(this.buildUpdateButton(provider, true));
|
|
729
|
+
return actions;
|
|
631
730
|
}
|
|
632
731
|
if (isLocal) {
|
|
633
|
-
|
|
732
|
+
actions.push(this.buildActionButton(hasLocalConfig ? 'Edit' : 'Configure', false, () => this.openLocalConfig()));
|
|
733
|
+
return actions;
|
|
734
|
+
}
|
|
735
|
+
if (provider.updateAvailable) {
|
|
736
|
+
actions.push(this.buildUpdateButton(provider, false));
|
|
634
737
|
}
|
|
635
738
|
if (!provider.installed) {
|
|
636
739
|
const label = terminalLogin ? 'Install + Run /login' : 'Install + Login';
|
|
@@ -638,12 +741,14 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
638
741
|
if (terminalLogin) {
|
|
639
742
|
button.title = 'Opens a terminal and runs claude login';
|
|
640
743
|
}
|
|
641
|
-
|
|
744
|
+
actions.push(button);
|
|
745
|
+
return actions;
|
|
642
746
|
}
|
|
643
747
|
if (this.loginPending.has(provider.id)) {
|
|
644
748
|
const button = this.buildActionButton('Waiting for login...', false, () => this.checkProviderStatus(provider.id, provider.name));
|
|
645
749
|
button.title = `Click to check ${provider.name || provider.id} login status`;
|
|
646
|
-
|
|
750
|
+
actions.push(button);
|
|
751
|
+
return actions;
|
|
647
752
|
}
|
|
648
753
|
if (!provider.loggedIn) {
|
|
649
754
|
const label = terminalLogin ? 'Run /login' : 'Login';
|
|
@@ -651,15 +756,16 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
651
756
|
if (terminalLogin) {
|
|
652
757
|
button.title = 'Opens a terminal and runs claude login';
|
|
653
758
|
}
|
|
654
|
-
|
|
759
|
+
actions.push(button);
|
|
760
|
+
return actions;
|
|
655
761
|
}
|
|
656
762
|
if (isConnected)
|
|
657
|
-
return
|
|
658
|
-
return
|
|
763
|
+
return actions;
|
|
764
|
+
return actions;
|
|
659
765
|
}
|
|
660
|
-
buildActionButton(label, disabled, onClick, loading = false) {
|
|
766
|
+
buildActionButton(label, disabled, onClick, loading = false, variant = 'secondary') {
|
|
661
767
|
const button = document.createElement('button');
|
|
662
|
-
button.className =
|
|
768
|
+
button.className = `ac-button ${variant}`;
|
|
663
769
|
if (loading) {
|
|
664
770
|
button.classList.add('loading');
|
|
665
771
|
}
|
|
@@ -673,11 +779,37 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
673
779
|
}
|
|
674
780
|
return button;
|
|
675
781
|
}
|
|
782
|
+
buildUpdateButton(provider, loading) {
|
|
783
|
+
const updateButton = document.createElement('button');
|
|
784
|
+
updateButton.className = 'ac-button update icon';
|
|
785
|
+
updateButton.type = 'button';
|
|
786
|
+
updateButton.setAttribute('aria-label', `Update ${provider.name || provider.id}`);
|
|
787
|
+
updateButton.title = provider.updateMessage || 'Update available';
|
|
788
|
+
if (loading) {
|
|
789
|
+
updateButton.classList.add('loading');
|
|
790
|
+
updateButton.disabled = true;
|
|
791
|
+
}
|
|
792
|
+
updateButton.innerHTML = `
|
|
793
|
+
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
|
|
794
|
+
<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" />
|
|
795
|
+
<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" />
|
|
796
|
+
</svg>
|
|
797
|
+
`;
|
|
798
|
+
if (!loading) {
|
|
799
|
+
updateButton.addEventListener('click', (event) => {
|
|
800
|
+
event.stopPropagation();
|
|
801
|
+
this.updateProvider(provider);
|
|
802
|
+
});
|
|
803
|
+
}
|
|
804
|
+
return updateButton;
|
|
805
|
+
}
|
|
676
806
|
async handleProviderSelect(provider) {
|
|
677
807
|
if (this.busy)
|
|
678
808
|
return;
|
|
679
809
|
if (provider.pending)
|
|
680
810
|
return;
|
|
811
|
+
if (this.isUpdatingProvider(provider))
|
|
812
|
+
return;
|
|
681
813
|
if (provider.id === 'local') {
|
|
682
814
|
this.openLocalConfig();
|
|
683
815
|
return;
|
|
@@ -720,6 +852,29 @@ export class AgentConnectConnect extends HTMLElement {
|
|
|
720
852
|
this.setProviderLoading(provider.id, false);
|
|
721
853
|
}
|
|
722
854
|
}
|
|
855
|
+
async updateProvider(provider) {
|
|
856
|
+
if (this.updatePending.has(provider.id))
|
|
857
|
+
return;
|
|
858
|
+
this.updatePending.add(provider.id);
|
|
859
|
+
this.renderProviders();
|
|
860
|
+
try {
|
|
861
|
+
const client = await getClient();
|
|
862
|
+
await client.providers.update(provider.id);
|
|
863
|
+
await this.refresh({ silent: true });
|
|
864
|
+
}
|
|
865
|
+
catch (err) {
|
|
866
|
+
this.setAlert({
|
|
867
|
+
title: 'Update failed',
|
|
868
|
+
message: err instanceof Error ? err.message : 'Could not update provider.',
|
|
869
|
+
action: 'Retry',
|
|
870
|
+
onAction: () => this.updateProvider(provider),
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
finally {
|
|
874
|
+
this.updatePending.delete(provider.id);
|
|
875
|
+
this.renderProviders();
|
|
876
|
+
}
|
|
877
|
+
}
|
|
723
878
|
setProviderLoading(providerId, loading, label = 'Working...') {
|
|
724
879
|
const card = this.elements?.providerList?.querySelector(`.ac-provider-card[data-provider="${providerId}"]`);
|
|
725
880
|
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.6",
|
|
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": "^0.1.
|
|
32
|
+
"@agentconnect/sdk": "^0.1.6"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"typescript": "^5.6.2"
|