main
html 597 lines 19.8 KB
Raw
1 <script type="module">
2 import { store } from "/plugins/_discovery/webui/discovery-store.js";
3 </script>
4
5 <div x-data>
6 <template x-if="$store.discoveryStore">
7 <div class="discovery-slot"
8 @modal-closed.window="$store.discoveryStore.refreshCards()"
9 x-create="$store.discoveryStore.refreshCards()"
10 x-show="$store.discoveryStore.cards.length > 0 || $store.discoveryStore.hasDismissedCards">
11
12 <div class="discovery-section">
13
14 <div class="discovery-features" x-show="$store.discoveryStore.featureCards.length > 0" style="text-align: left;">
15 <template x-for="card in $store.discoveryStore.featureCards" :key="card.id">
16 <article class="discovery-feature-card"
17 role="button"
18 tabindex="0"
19 @click="$store.discoveryStore.executeCta(card.cta_action)"
20 @keydown.enter.prevent="$store.discoveryStore.executeCta(card.cta_action)"
21 @keydown.space.prevent="$store.discoveryStore.executeCta(card.cta_action)">
22
23 <div class="discovery-feature-head">
24 <div class="discovery-feature-thumb">
25 <template x-if="card.thumbnail">
26 <img :src="card.thumbnail" :alt="card.title" loading="lazy">
27 </template>
28 <template x-if="!card.thumbnail && card.icon">
29 <x-icon class="discovery-feature-icon" :name="card.icon"></x-icon>
30 </template>
31 </div>
32 <h4 class="discovery-feature-title" x-text="card.title"></h4>
33 </div>
34
35 <button class="btn btn primary"
36 type="button"
37 @click.stop="$store.discoveryStore.executeCta(card.cta_action)">
38 <span x-text="card.cta_text"></span>
39 <x-icon name="arrow_forward"></x-icon>
40 </button>
41 </article>
42 </template>
43 </div>
44
45
46 <template x-for="card in $store.discoveryStore.heroCards.filter(card => !['discovery-codex-oauth', 'discovery-oauth-accounts'].includes(card.id))" :key="card.id">
47 <article class="discovery-hero"
48 role="button"
49 tabindex="0"
50 @click="$store.discoveryStore.executeCta(card.cta_action)"
51 @keydown.enter.prevent="$store.discoveryStore.executeCta(card.cta_action)"
52 @keydown.space.prevent="$store.discoveryStore.executeCta(card.cta_action)">
53 <button class="discovery-dismiss"
54 type="button"
55 x-show="card.dismissible"
56 @click.stop="$store.discoveryStore.dismissCard(card.id)"
57 :aria-label="`Dismiss ${card.title}`"
58 title="Dismiss">
59 <x-icon name="close"></x-icon>
60 </button>
61
62 <div class="discovery-hero-content">
63 <h3 class="discovery-hero-title" x-text="card.title"></h3>
64 <p class="discovery-hero-desc" x-text="card.description"></p>
65 <button class="btn btn-ok"
66 type="button"
67 @click.stop="$store.discoveryStore.executeCta(card.cta_action)">
68 <span x-text="card.cta_text"></span>
69 <x-icon name="arrow_forward"></x-icon>
70 </button>
71 </div>
72
73 <div class="discovery-hero-thumb">
74 <template x-if="card.thumbnail">
75 <img :src="card.thumbnail" :alt="card.title" loading="lazy">
76 </template>
77 <template x-if="!card.thumbnail && card.icon">
78 <x-icon class="discovery-hero-icon" :name="card.icon"></x-icon>
79 </template>
80 </div>
81 </article>
82 </template>
83
84 <article class="discovery-cli-card" aria-labelledby="discovery-cli-title">
85 <div class="discovery-cli-content">
86 <span class="discovery-cli-kicker">CLI Connector</span>
87 <h3 class="discovery-cli-title" id="discovery-cli-title">Connect Agent Zero to your desktop</h3>
88 <p class="discovery-cli-desc">
89 Install the CLI Connector when you want A0 to use your host terminal,
90 local files, and a browser from your computer.
91 </p>
92 <div class="discovery-cli-commands" aria-label="CLI Connector install commands">
93 <div class="discovery-cli-command">
94 <span class="discovery-cli-label">macOS / Linux</span>
95 <code>curl -LsSf https://cli.agent-zero.ai/install.sh | sh</code>
96 </div>
97 <div class="discovery-cli-command">
98 <span class="discovery-cli-label">Windows PowerShell</span>
99 <code>irm https://cli.agent-zero.ai/install.ps1 | iex</code>
100 </div>
101 </div>
102 </div>
103
104 <figure class="discovery-cli-preview" aria-label="Agent Zero CLI Connector preview">
105 <img src="/plugins/_discovery/webui/assets/cli-connector-preview.png"
106 alt="Agent Zero CLI Connector terminal preview"
107 loading="lazy">
108 </figure>
109 </article>
110
111 <div class="discovery-undismiss" x-show="$store.discoveryStore.hasDismissedCards">
112 <button type="button"
113 class="discovery-undismiss-btn"
114 @click="$store.discoveryStore.undismissCards()">
115 <x-icon name="undo"></x-icon>
116 <span>Show dismissed suggestions</span>
117 </button>
118 </div>
119 </div>
120 </div>
121 </template>
122
123 <style>
124 .discovery-slot {
125 grid-column: 1 / -1;
126 width: 100%;
127 }
128
129 .discovery-section {
130 display: flex;
131 flex-direction: column;
132 gap: 0.75rem;
133 width: 100%;
134 margin-top: 0.85rem;
135 }
136
137 .discovery-hero,
138 .discovery-feature-card,
139 .discovery-cli-card {
140 position: relative;
141 border: 1px solid var(--color-border);
142 border-radius: 10px;
143 background: var(--color-panel);
144 text-align: left;
145 transition:
146 border-color 0.2s ease,
147 background-color 0.2s ease,
148 box-shadow 0.2s ease,
149 transform 0.2s ease;
150 }
151
152 .discovery-hero:hover,
153 .discovery-feature-card:hover,
154 .discovery-cli-card:hover,
155 .discovery-hero:focus-visible,
156 .discovery-feature-card:focus-visible,
157 .discovery-cli-card:focus-visible {
158 border-color: color-mix(in srgb, var(--color-primary) 72%, white 6%);
159 box-shadow: 0 10px 28px rgba(0, 0, 0, 0.16);
160 outline: none;
161 }
162
163 .discovery-hero {
164 display: flex;
165 align-items: center;
166 gap: 1rem;
167 min-height: 126px;
168 overflow: hidden;
169 padding: 1rem 1.15rem 1rem 1.25rem;
170 background:
171 linear-gradient(
172 135deg,
173 color-mix(in srgb, var(--color-primary) 10%, transparent),
174 transparent 58%
175 ),
176 radial-gradient(
177 circle at 92% 24%,
178 color-mix(in srgb, var(--color-primary) 12%, transparent),
179 transparent 42%
180 ),
181 var(--color-panel);
182 }
183
184 .discovery-hero-content,
185 .discovery-hero-thumb {
186 position: relative;
187 z-index: 1;
188 }
189
190 .discovery-hero-content {
191 flex: 1 1 auto;
192 min-width: 0;
193 }
194
195 .discovery-hero-title {
196 margin: 0 0 0.35rem;
197 color: var(--color-text);
198 font-size: 1.02rem;
199 font-weight: 600;
200 letter-spacing: 0;
201 }
202
203 .discovery-hero-desc {
204 margin: 0 0 0.75rem;
205 color: var(--color-text);
206 font-size: 0.86rem;
207 line-height: 1.42;
208 max-width: 38ch;
209 }
210
211 .discovery-cta-link,
212 .discovery-undismiss-btn {
213 display: inline-flex;
214 align-items: center;
215 justify-content: center;
216 gap: 0.35rem;
217 cursor: pointer;
218 transition:
219 background-color 0.2s ease,
220 border-color 0.2s ease,
221 color 0.2s ease,
222 transform 0.2s ease;
223 }
224
225 .discovery-hero-thumb {
226 flex: 0 0 112px;
227 width: 112px;
228 height: 86px;
229 display: flex;
230 align-items: center;
231 justify-content: center;
232 }
233
234 .discovery-hero-thumb img {
235 width: 100%;
236 height: 100%;
237 object-fit: contain;
238 filter: drop-shadow(0 12px 18px rgba(0, 0, 0, 0.12));
239 }
240
241 .discovery-hero-icon {
242 font-size: 3rem;
243 color: var(--color-highlight-dark);
244 }
245
246 .discovery-features {
247 display: grid;
248 grid-template-columns: repeat(3, minmax(0, 1fr));
249 gap: 0.75rem;
250 }
251
252 .discovery-feature-card {
253 display: grid;
254 grid-template-columns: minmax(0, 1fr) auto;
255 gap: 0.75rem;
256 align-items: center;
257 padding: 0.72rem 0.9rem;
258 background:
259 linear-gradient(
260 180deg,
261 color-mix(in srgb, var(--color-primary) 4%, transparent),
262 transparent 38%
263 ),
264 var(--color-panel);
265 }
266
267 .discovery-feature-head {
268 display: flex;
269 flex-direction: row;
270 align-items: center;
271 gap: 0.62rem;
272 width: 100%;
273 min-width: 0;
274 }
275
276 .discovery-feature-thumb {
277 flex: 0 0 auto;
278 width: 32px;
279 height: 32px;
280 display: flex;
281 align-items: center;
282 justify-content: center;
283 border-radius: 12px;
284 overflow: hidden;
285 background: color-mix(in srgb, var(--color-primary) 10%, transparent);
286 box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-primary) 10%, transparent);
287 }
288
289 .discovery-feature-thumb img {
290 width: 100%;
291 height: 100%;
292 object-fit: cover;
293 }
294
295 .discovery-feature-icon {
296 font-size: 1.45rem;
297 color: var(--color-highlight-dark);
298 }
299
300 .discovery-feature-title {
301 margin: 0;
302 flex: 1 1 auto;
303 min-width: 0;
304 color: var(--color-text);
305 font-size: 0.88rem;
306 font-weight: 600;
307 line-height: 1.25;
308 }
309
310 .discovery-feature-card > .btn {
311 min-height: 36px;
312 padding: 0.44rem 0.78rem;
313 }
314
315 .discovery-feature-card > .btn .material-symbols-outlined {
316 font-size: 1.15rem;
317 }
318
319 .discovery-cli-card {
320 display: flex;
321 align-items: center;
322 gap: 1.1rem;
323 min-height: 134px;
324 overflow: hidden;
325 padding: 1rem 1.15rem 1rem 1.25rem;
326 background:
327 linear-gradient(
328 135deg,
329 color-mix(in srgb, var(--color-primary) 12%, transparent),
330 transparent 52%
331 ),
332 radial-gradient(
333 circle at 86% 18%,
334 color-mix(in srgb, #00b7ff 14%, transparent),
335 transparent 34%
336 ),
337 var(--color-panel);
338 }
339
340 .discovery-cli-content {
341 flex: 1 1 auto;
342 min-width: 0;
343 }
344
345 .discovery-cli-kicker {
346 display: inline-flex;
347 width: max-content;
348 margin-bottom: 0.3rem;
349 border: 1px solid color-mix(in srgb, var(--color-primary) 34%, var(--color-border));
350 border-radius: 999px;
351 padding: 0.16rem 0.48rem;
352 color: color-mix(in srgb, var(--color-primary) 72%, white 20%);
353 font-size: 0.68rem;
354 font-weight: 700;
355 line-height: 1;
356 text-transform: uppercase;
357 }
358
359 .discovery-cli-title {
360 margin: 0 0 0.28rem;
361 color: var(--color-text);
362 font-size: 1.02rem;
363 font-weight: 700;
364 line-height: 1.2;
365 }
366
367 .discovery-cli-desc {
368 max-width: 62ch;
369 margin: 0 0 0.65rem;
370 color: var(--color-secondary);
371 font-size: 0.8rem;
372 line-height: 1.38;
373 }
374
375 .discovery-cli-commands {
376 display: grid;
377 grid-template-columns: repeat(2, minmax(0, 1fr));
378 gap: 0.55rem;
379 max-width: 790px;
380 }
381
382 .discovery-cli-command {
383 min-width: 0;
384 border: 1px solid color-mix(in srgb, var(--color-border) 82%, transparent);
385 border-radius: 8px;
386 background: color-mix(in srgb, #05080c 86%, var(--color-panel));
387 padding: 0.48rem 0.55rem;
388 }
389
390 .discovery-cli-label {
391 display: block;
392 margin-bottom: 0.22rem;
393 color: var(--color-secondary);
394 font-size: 0.68rem;
395 font-weight: 700;
396 line-height: 1.1;
397 }
398
399 .discovery-cli-command code {
400 display: block;
401 overflow-x: auto;
402 color: #72d8ff;
403 font-family: var(--font-family-monospace, ui-monospace, SFMono-Regular, Consolas, monospace);
404 font-size: 0.72rem;
405 line-height: 1.35;
406 white-space: nowrap;
407 }
408
409 .discovery-cli-preview {
410 flex: 0 0 218px;
411 width: 218px;
412 margin: 0;
413 border: 1px solid color-mix(in srgb, #00b7ff 24%, var(--color-border));
414 border-radius: 8px;
415 background: #070b10;
416 box-shadow:
417 0 12px 28px rgba(0, 0, 0, 0.2),
418 0 0 28px color-mix(in srgb, var(--color-primary) 12%, transparent);
419 overflow: hidden;
420 }
421
422 .discovery-cli-preview img {
423 display: block;
424 width: 100%;
425 height: auto;
426 }
427
428 .discovery-cta-link {
429 margin-top: 0.95rem;
430 border: 1px solid color-mix(in srgb, var(--color-primary) 34%, var(--color-border));
431 border-radius: 8px;
432 background: transparent;
433 color: var(--color-primary);
434 padding: 0.42rem 0.72rem;
435 font-size: 0.79rem;
436 font-weight: 600;
437 }
438
439 .discovery-cta-link:hover,
440 .discovery-cta-link:focus-visible {
441 background: var(--color-primary);
442 border-color: var(--color-primary);
443 color: #fff;
444 outline: none;
445 }
446
447 .discovery-dismiss {
448 position: absolute;
449 top: 0.65rem;
450 right: 0.65rem;
451 display: flex;
452 align-items: center;
453 justify-content: center;
454 width: 28px;
455 height: 28px;
456 border: none;
457 border-radius: 8px;
458 background: transparent;
459 color: var(--color-secondary);
460 cursor: pointer;
461 opacity: 0;
462 transition:
463 opacity 0.2s ease,
464 background-color 0.2s ease,
465 color 0.2s ease;
466 z-index: 2;
467 }
468
469 .discovery-dismiss-small {
470 top: 0.55rem;
471 right: 0.55rem;
472 width: 26px;
473 height: 26px;
474 }
475
476 .discovery-hero:hover .discovery-dismiss,
477 .discovery-hero:focus-visible .discovery-dismiss,
478 .discovery-feature-card:hover .discovery-dismiss,
479 .discovery-feature-card:focus-visible .discovery-dismiss {
480 opacity: 0.68;
481 }
482
483 .discovery-dismiss:hover,
484 .discovery-dismiss:focus-visible {
485 opacity: 1;
486 color: var(--color-text);
487 background: color-mix(in srgb, var(--color-border) 84%, transparent);
488 outline: none;
489 }
490
491 .discovery-dismiss .material-symbols-outlined {
492 font-size: 1rem;
493 }
494
495 .discovery-undismiss {
496 display: flex;
497 justify-content: flex-start;
498 }
499
500 .discovery-undismiss-btn {
501 border: none;
502 background: transparent;
503 padding: 0;
504 color: var(--color-secondary);
505 font-size: 0.8rem;
506 font-weight: 500;
507 }
508
509 .discovery-undismiss-btn:hover,
510 .discovery-undismiss-btn:focus-visible {
511 color: var(--color-primary);
512 outline: none;
513 }
514
515 .discovery-cta-link .material-symbols-outlined,
516 .discovery-undismiss-btn .material-symbols-outlined {
517 font-size: 1rem;
518 }
519
520 @media (hover: none) {
521 .discovery-dismiss {
522 opacity: 0.68;
523 }
524 }
525
526 @media (max-width: 768px) {
527 .discovery-section {
528 gap: 0.85rem;
529 }
530
531 .discovery-hero {
532 min-height: 0;
533 padding: 1rem;
534 }
535
536 .discovery-hero-thumb {
537 flex-basis: 92px;
538 width: 92px;
539 height: 76px;
540 }
541
542 .discovery-features {
543 grid-template-columns: 1fr;
544 gap: 0.75rem;
545 }
546
547 .discovery-cta-link {
548 margin-top: 0;
549 }
550
551 .discovery-cli-card {
552 flex-direction: column;
553 align-items: flex-start;
554 gap: 0.75rem;
555 min-height: 0;
556 padding: 0.95rem;
557 }
558
559 .discovery-cli-commands {
560 grid-template-columns: 1fr;
561 width: 100%;
562 max-width: none;
563 }
564
565 .discovery-cli-preview {
566 flex: 0 0 auto;
567 width: min(100%, 280px);
568 }
569 }
570
571 @media (max-width: 520px) {
572 .discovery-slot {
573 margin-top: 0.15rem;
574 }
575
576 .discovery-hero {
577 padding-right: 0.95rem;
578 }
579
580 .discovery-hero-thumb {
581 display: none;
582 }
583
584 .discovery-hero-title {
585 font-size: 1rem;
586 }
587
588 .discovery-cli-title {
589 font-size: 0.98rem;
590 }
591
592 .discovery-cli-preview {
593 width: 100%;
594 }
595 }
596 </style>
597 </div>