@fias/plugin-dev-harness 1.5.3 → 1.5.4

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.
@@ -65,17 +65,12 @@ body {
65
65
  font-size: 11px;
66
66
  font-weight: 600;
67
67
  text-transform: uppercase;
68
- cursor: pointer;
69
- transition: background 0.15s, border-color 0.15s;
70
68
  user-select: none;
71
69
  }
72
70
 
73
- .mode-badge:hover {
74
- filter: brightness(1.3);
75
- }
76
-
77
- .mode-badge:active {
78
- filter: brightness(0.9);
71
+ .btn-mode-toggle {
72
+ font-size: 11px;
73
+ padding: 3px 10px;
79
74
  }
80
75
 
81
76
  .mode-mock {
@@ -388,3 +383,255 @@ body {
388
383
  color: #fbbf24;
389
384
  margin-left: 8px;
390
385
  }
386
+
387
+ /* Publish Wizard */
388
+ .publish-modal {
389
+ width: 600px;
390
+ max-height: 85vh;
391
+ display: flex;
392
+ flex-direction: column;
393
+ }
394
+
395
+ .publish-steps {
396
+ display: flex;
397
+ gap: 4px;
398
+ margin-bottom: 16px;
399
+ }
400
+
401
+ .publish-step {
402
+ flex: 1;
403
+ padding: 6px 8px;
404
+ font-size: 11px;
405
+ font-weight: 600;
406
+ color: #6b7280;
407
+ background: #18181b;
408
+ border-radius: 4px;
409
+ text-align: center;
410
+ }
411
+
412
+ .publish-step.active {
413
+ color: #a78bfa;
414
+ background: #1e1b2e;
415
+ }
416
+
417
+ .publish-step.completed {
418
+ color: #86efac;
419
+ background: #0f291e;
420
+ }
421
+
422
+ .publish-content {
423
+ flex: 1;
424
+ overflow-y: auto;
425
+ max-height: 55vh;
426
+ padding: 4px 0;
427
+ }
428
+
429
+ .publish-form label {
430
+ display: block;
431
+ font-size: 12px;
432
+ color: #a1a1aa;
433
+ margin: 8px 0 4px;
434
+ }
435
+
436
+ .pub-textarea {
437
+ resize: vertical;
438
+ font-family: inherit;
439
+ min-height: 40px;
440
+ }
441
+
442
+ .pub-tags-container {
443
+ margin-bottom: 8px;
444
+ }
445
+
446
+ .pub-tags-list {
447
+ display: flex;
448
+ flex-wrap: wrap;
449
+ gap: 4px;
450
+ margin-bottom: 4px;
451
+ }
452
+
453
+ .pub-tag {
454
+ display: inline-flex;
455
+ align-items: center;
456
+ gap: 4px;
457
+ background: #3f3f46;
458
+ color: #e4e4e7;
459
+ padding: 2px 8px;
460
+ border-radius: 4px;
461
+ font-size: 11px;
462
+ }
463
+
464
+ .pub-tag-remove {
465
+ cursor: pointer;
466
+ color: #a1a1aa;
467
+ border: none;
468
+ background: none;
469
+ font-size: 14px;
470
+ padding: 0 2px;
471
+ }
472
+
473
+ .pub-permissions {
474
+ display: flex;
475
+ flex-direction: column;
476
+ gap: 6px;
477
+ margin-bottom: 12px;
478
+ }
479
+
480
+ .pub-checkbox {
481
+ display: flex;
482
+ align-items: center;
483
+ gap: 6px;
484
+ font-size: 12px;
485
+ color: #e4e4e7;
486
+ cursor: pointer;
487
+ }
488
+
489
+ .pub-checkbox input {
490
+ accent-color: #a78bfa;
491
+ }
492
+
493
+ .pub-loading {
494
+ display: flex;
495
+ flex-direction: column;
496
+ align-items: center;
497
+ gap: 12px;
498
+ padding: 32px 0;
499
+ color: #a1a1aa;
500
+ }
501
+
502
+ .pub-error-item {
503
+ color: #fca5a5;
504
+ font-size: 12px;
505
+ padding: 4px 0;
506
+ }
507
+
508
+ .pub-error-item::before {
509
+ content: '\2715 ';
510
+ }
511
+
512
+ .pub-warn-item {
513
+ color: #fde047;
514
+ font-size: 12px;
515
+ padding: 4px 0;
516
+ }
517
+
518
+ .pub-warn-item::before {
519
+ content: '\26A0 ';
520
+ }
521
+
522
+ .pub-valid {
523
+ color: #86efac;
524
+ font-size: 13px;
525
+ font-weight: 500;
526
+ margin-bottom: 12px;
527
+ }
528
+
529
+ .pub-listing-preview {
530
+ background: #18181b;
531
+ border: 1px solid #3f3f46;
532
+ border-radius: 8px;
533
+ padding: 16px;
534
+ margin-top: 12px;
535
+ }
536
+
537
+ .pub-listing-name {
538
+ font-size: 15px;
539
+ font-weight: 600;
540
+ color: #e4e4e7;
541
+ }
542
+
543
+ .pub-listing-desc {
544
+ font-size: 12px;
545
+ color: #a1a1aa;
546
+ margin-top: 4px;
547
+ }
548
+
549
+ .pub-listing-meta {
550
+ font-size: 11px;
551
+ color: #6b7280;
552
+ margin-top: 8px;
553
+ display: flex;
554
+ gap: 12px;
555
+ }
556
+
557
+ .pub-cost-info {
558
+ background: #1e1b2e;
559
+ border: 1px solid #3b3370;
560
+ border-radius: 8px;
561
+ padding: 12px;
562
+ margin-bottom: 12px;
563
+ font-size: 13px;
564
+ color: #e4e4e7;
565
+ }
566
+
567
+ .pub-cost-info strong {
568
+ color: #fde047;
569
+ }
570
+
571
+ .pub-build-output {
572
+ background: #0a0a0f;
573
+ border: 1px solid #3f3f46;
574
+ border-radius: 4px;
575
+ padding: 8px 12px;
576
+ font-family: 'SF Mono', 'Fira Code', monospace;
577
+ font-size: 11px;
578
+ max-height: 200px;
579
+ overflow-y: auto;
580
+ color: #a1a1aa;
581
+ white-space: pre-wrap;
582
+ display: none;
583
+ }
584
+
585
+ .pub-phase {
586
+ padding: 4px 0;
587
+ font-size: 12px;
588
+ color: #a1a1aa;
589
+ }
590
+
591
+ .pub-phase.active {
592
+ color: #e4e4e7;
593
+ }
594
+
595
+ .pub-phase.done {
596
+ color: #86efac;
597
+ }
598
+
599
+ .pub-phase.error {
600
+ color: #fca5a5;
601
+ }
602
+
603
+ .pub-phase::before {
604
+ content: '\25CB ';
605
+ }
606
+
607
+ .pub-phase.active::before {
608
+ content: '\25C9 ';
609
+ }
610
+
611
+ .pub-phase.done::before {
612
+ content: '\2713 ';
613
+ }
614
+
615
+ .pub-phase.error::before {
616
+ content: '\2715 ';
617
+ }
618
+
619
+ .pub-review-status {
620
+ text-align: center;
621
+ padding: 24px 0;
622
+ }
623
+
624
+ .pub-congrats {
625
+ color: #86efac;
626
+ font-size: 16px;
627
+ font-weight: 600;
628
+ text-align: center;
629
+ margin-bottom: 12px;
630
+ }
631
+
632
+ .pub-rejected {
633
+ color: #fca5a5;
634
+ font-size: 14px;
635
+ font-weight: 500;
636
+ margin-bottom: 8px;
637
+ }
@@ -14,26 +14,95 @@
14
14
  <option value="staging">STAGING</option>
15
15
  <option value="production">PRODUCTION</option>
16
16
  </select>
17
- <button id="mode-badge" class="mode-badge mode-mock" title="Click to switch mode">MOCK &#8646;</button>
17
+ <span id="mode-badge" class="mode-badge mode-mock">MOCK</span>
18
+ <button id="mode-toggle" class="btn-icon btn-mode-toggle" title="Switch mode">Switch to Live</button>
18
19
  </div>
19
20
  <div class="toolbar-right">
21
+ <button id="publish-btn" class="btn-icon" title="Publish plugin">&#9650;</button>
20
22
  <span id="credit-balance" class="credit-balance" style="display: none"></span>
21
23
  <span id="theme-badge" class="theme-badge theme-dark">DARK</span>
22
24
  <button id="theme-toggle" class="btn-icon" title="Toggle theme">&#9788;/&#9790;</button>
23
25
  <button id="reload-btn" class="btn-icon" title="Reload plugin">&#8635;</button>
24
26
  </div>
25
27
  </div>
26
- <!-- Login modal -->
27
- <div id="login-modal" class="modal-overlay" style="display: none">
28
- <div class="modal">
29
- <h3>Sign in to FIAS</h3>
30
- <p>Signing in to <strong id="login-target"></strong></p>
31
- <input id="login-email" type="email" class="modal-input" placeholder="Email" autocomplete="email" />
32
- <input id="login-password" type="password" class="modal-input" placeholder="Password" autocomplete="current-password" />
33
- <div id="login-error" class="modal-error" style="display: none"></div>
28
+ <!-- Publish wizard modal -->
29
+ <div id="publish-modal" class="modal-overlay" style="display: none">
30
+ <div class="modal publish-modal">
31
+ <div class="publish-steps">
32
+ <span class="publish-step active" data-step="1">1. Configure</span>
33
+ <span class="publish-step" data-step="2">2. Validate</span>
34
+ <span class="publish-step" data-step="3">3. Build &amp; Submit</span>
35
+ <span class="publish-step" data-step="4">4. Status</span>
36
+ </div>
37
+ <div id="publish-step-1" class="publish-content">
38
+ <div class="publish-form">
39
+ <label>Name</label>
40
+ <input id="pub-name" class="modal-input" type="text" />
41
+ <label>Version</label>
42
+ <input id="pub-version" class="modal-input" type="text" placeholder="1.0.0" />
43
+ <label>Description</label>
44
+ <textarea id="pub-description" class="modal-input pub-textarea" rows="2"></textarea>
45
+ <label>About (optional)</label>
46
+ <textarea id="pub-expanded-desc" class="modal-input pub-textarea" rows="3"></textarea>
47
+ <label>Type</label>
48
+ <select id="pub-archetype" class="modal-input">
49
+ <option value="tool">Tool</option>
50
+ <option value="site">Site</option>
51
+ </select>
52
+ <label>Tags</label>
53
+ <div class="pub-tags-container">
54
+ <div id="pub-tags-list" class="pub-tags-list"></div>
55
+ <input id="pub-tags-input" class="modal-input" type="text" placeholder="Add tag, press Enter" />
56
+ </div>
57
+ <label>Pricing</label>
58
+ <select id="pub-pricing-model" class="modal-input">
59
+ <option value="free">Free</option>
60
+ <option value="fixed">Fixed Price</option>
61
+ <option value="per_use">Per Use</option>
62
+ </select>
63
+ <div id="pub-price-row" style="display:none">
64
+ <label>Price (cents)</label>
65
+ <input id="pub-price" class="modal-input" type="number" min="0" />
66
+ </div>
67
+ <label>Permissions</label>
68
+ <div class="pub-permissions" id="pub-permissions">
69
+ <label class="pub-checkbox"><input type="checkbox" value="theme:read" /> theme:read</label>
70
+ <label class="pub-checkbox"><input type="checkbox" value="user:profile:read" /> user:profile:read</label>
71
+ <label class="pub-checkbox"><input type="checkbox" value="storage:sandbox" /> storage:sandbox</label>
72
+ <label class="pub-checkbox"><input type="checkbox" value="entities:invoke" /> entities:invoke</label>
73
+ <label class="pub-checkbox"><input type="checkbox" value="entities:image_generate" /> entities:image_generate</label>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ <div id="publish-step-2" class="publish-content" style="display:none">
78
+ <div id="pub-validate-loading" class="pub-loading">
79
+ <div class="status-spinner"></div>
80
+ <p>Validating manifest...</p>
81
+ </div>
82
+ <div id="pub-validate-results" style="display:none">
83
+ <div id="pub-validate-status"></div>
84
+ <div id="pub-validate-errors"></div>
85
+ <div id="pub-validate-warnings"></div>
86
+ <div id="pub-listing-preview" class="pub-listing-preview"></div>
87
+ </div>
88
+ </div>
89
+ <div id="publish-step-3" class="publish-content" style="display:none">
90
+ <div id="pub-cost-info" class="pub-cost-info"></div>
91
+ <div id="pub-build-output" class="pub-build-output"></div>
92
+ <div id="pub-submit-progress"></div>
93
+ </div>
94
+ <div id="publish-step-4" class="publish-content" style="display:none">
95
+ <div id="pub-review-status" class="pub-review-status">
96
+ <div class="status-spinner"></div>
97
+ <p>Waiting for review...</p>
98
+ </div>
99
+ <div id="pub-review-result" style="display:none"></div>
100
+ </div>
101
+ <div id="pub-error" class="modal-error" style="display:none"></div>
34
102
  <div class="modal-actions">
35
- <button id="login-cancel" class="btn-secondary">Cancel</button>
36
- <button id="login-submit" class="btn-primary">Sign in</button>
103
+ <button id="pub-cancel" class="btn-secondary">Cancel</button>
104
+ <button id="pub-back" class="btn-secondary" style="display:none">Back</button>
105
+ <button id="pub-next" class="btn-primary">Next</button>
37
106
  </div>
38
107
  </div>
39
108
  </div>