@nuvio/overlay 1.0.0 → 2.0.0

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/style.css CHANGED
@@ -196,6 +196,27 @@
196
196
  text-align: left;
197
197
  }
198
198
 
199
+ /* Corner anchors before measured inline position (SSR-safe; avoids viewport math on server). */
200
+ .nuvio-chip--anchor-bottom-right {
201
+ right: 24px;
202
+ bottom: 24px;
203
+ }
204
+
205
+ .nuvio-chip--anchor-bottom-left {
206
+ left: 24px;
207
+ bottom: 24px;
208
+ }
209
+
210
+ .nuvio-chip--anchor-top-right {
211
+ right: 24px;
212
+ top: 24px;
213
+ }
214
+
215
+ .nuvio-chip--anchor-top-left {
216
+ left: 24px;
217
+ top: 24px;
218
+ }
219
+
199
220
  .nuvio-chip--collapsed {
200
221
  max-width: min(16rem, calc(100vw - 32px));
201
222
  padding: 7px 10px;
@@ -328,6 +349,600 @@
328
349
  flex: 1;
329
350
  }
330
351
 
352
+ .nuvio-editor-tabs {
353
+ display: flex;
354
+ flex-shrink: 0;
355
+ gap: 3px;
356
+ margin: 0 0 12px;
357
+ padding: 4px;
358
+ border-radius: 14px;
359
+ background: rgba(0, 0, 0, 0.38);
360
+ border: 1px solid rgba(255, 255, 255, 0.08);
361
+ }
362
+
363
+ .nuvio-editor-tab {
364
+ flex: 1;
365
+ display: flex;
366
+ flex-direction: column;
367
+ align-items: center;
368
+ justify-content: center;
369
+ gap: 1px;
370
+ min-height: 44px;
371
+ padding: 6px 10px;
372
+ border-radius: 10px;
373
+ border: none;
374
+ background: transparent;
375
+ color: var(--nuvio-dim);
376
+ cursor: pointer;
377
+ transition:
378
+ background 0.18s ease,
379
+ color 0.18s ease,
380
+ box-shadow 0.18s ease;
381
+ }
382
+
383
+ .nuvio-editor-tab-label {
384
+ font-size: 12px;
385
+ font-weight: 700;
386
+ letter-spacing: 0.01em;
387
+ line-height: 1.2;
388
+ }
389
+
390
+ .nuvio-editor-tab-hint {
391
+ font-size: 10px;
392
+ font-weight: 500;
393
+ opacity: 0.72;
394
+ line-height: 1.2;
395
+ }
396
+
397
+ .nuvio-editor-tab:hover {
398
+ color: var(--nuvio-text-soft);
399
+ background: rgba(255, 255, 255, 0.05);
400
+ }
401
+
402
+ .nuvio-editor-tab--active {
403
+ background: rgba(255, 255, 255, 0.12);
404
+ color: var(--nuvio-text);
405
+ box-shadow:
406
+ 0 1px 2px rgba(0, 0, 0, 0.35),
407
+ inset 0 1px 0 rgba(255, 255, 255, 0.12);
408
+ }
409
+
410
+ .nuvio-editor-tab--active .nuvio-editor-tab-hint {
411
+ color: var(--nuvio-accent);
412
+ opacity: 1;
413
+ }
414
+
415
+ .nuvio-brand-kit-hint,
416
+ .nuvio-brand-selection-label {
417
+ display: block;
418
+ font-size: 12px;
419
+ line-height: 1.45;
420
+ }
421
+
422
+ .nuvio-brand-kit-hint {
423
+ color: var(--nuvio-muted);
424
+ }
425
+
426
+ .nuvio-brand-selection-label {
427
+ margin-bottom: 2px;
428
+ font-size: 10px;
429
+ font-weight: 600;
430
+ letter-spacing: 0.06em;
431
+ text-transform: uppercase;
432
+ color: var(--nuvio-dim);
433
+ }
434
+
435
+ .nuvio-brand-kit {
436
+ display: flex;
437
+ flex-direction: column;
438
+ gap: 14px;
439
+ }
440
+
441
+ .nuvio-brand-kit-lead {
442
+ margin: 0;
443
+ font-size: 12px;
444
+ line-height: 1.5;
445
+ color: var(--nuvio-muted);
446
+ }
447
+
448
+ .nuvio-brand-first-run {
449
+ padding: 12px 14px;
450
+ border-radius: 14px;
451
+ border: 1px solid rgba(96, 165, 250, 0.22);
452
+ background: rgba(37, 99, 235, 0.08);
453
+ }
454
+
455
+ .nuvio-brand-first-run-steps {
456
+ margin: 0;
457
+ padding-left: 18px;
458
+ display: flex;
459
+ flex-direction: column;
460
+ gap: 6px;
461
+ }
462
+
463
+ .nuvio-brand-presets {
464
+ display: flex;
465
+ flex-direction: column;
466
+ gap: 12px;
467
+ }
468
+
469
+ .nuvio-brand-empty-state {
470
+ padding: 16px 14px;
471
+ border-radius: 14px;
472
+ border: 1px dashed rgba(255, 255, 255, 0.16);
473
+ background: rgba(0, 0, 0, 0.2);
474
+ }
475
+
476
+ .nuvio-brand-empty-title {
477
+ margin: 0 0 6px;
478
+ font-size: 0.8125rem;
479
+ font-weight: 600;
480
+ color: var(--nuvio-text);
481
+ }
482
+
483
+ .nuvio-brand-empty-body {
484
+ margin: 0;
485
+ font-size: 11px;
486
+ line-height: 1.5;
487
+ color: var(--nuvio-dim);
488
+ }
489
+
490
+ .nuvio-brand-non-brandable {
491
+ margin: 0;
492
+ }
493
+
494
+ .nuvio-brand-category {
495
+ display: flex;
496
+ flex-direction: column;
497
+ gap: 8px;
498
+ }
499
+
500
+ .nuvio-brand-category-row {
501
+ display: flex;
502
+ flex-wrap: wrap;
503
+ gap: 6px;
504
+ }
505
+
506
+ .nuvio-brand-category-chip {
507
+ padding: 6px 10px;
508
+ border-radius: 999px;
509
+ border: 1px solid rgba(255, 255, 255, 0.12);
510
+ background: rgba(255, 255, 255, 0.04);
511
+ color: var(--nuvio-dim);
512
+ font-size: 11px;
513
+ font-weight: 600;
514
+ line-height: 1.2;
515
+ cursor: pointer;
516
+ }
517
+
518
+ .nuvio-brand-category-chip:hover:not(:disabled) {
519
+ border-color: rgba(255, 255, 255, 0.22);
520
+ color: var(--nuvio-text);
521
+ }
522
+
523
+ .nuvio-brand-category-chip--active {
524
+ border-color: rgba(96, 165, 250, 0.55);
525
+ background: rgba(37, 99, 235, 0.18);
526
+ color: #dbeafe;
527
+ }
528
+
529
+ .nuvio-brand-category-chip:disabled {
530
+ opacity: 0.42;
531
+ cursor: not-allowed;
532
+ }
533
+
534
+ .nuvio-brand-fixed-recipe-note {
535
+ margin: 0;
536
+ font-size: 11px;
537
+ line-height: 1.45;
538
+ color: var(--nuvio-dim);
539
+ }
540
+
541
+ .nuvio-brand-presets-grid {
542
+ display: grid;
543
+ grid-template-columns: 1fr 1fr;
544
+ gap: 12px;
545
+ }
546
+
547
+ .nuvio-brand-field {
548
+ display: flex;
549
+ flex-direction: column;
550
+ gap: 6px;
551
+ }
552
+
553
+ .nuvio-brand-field-label {
554
+ margin: 0;
555
+ font-size: 10px;
556
+ font-weight: 700;
557
+ letter-spacing: 0.07em;
558
+ text-transform: uppercase;
559
+ color: var(--nuvio-dim);
560
+ }
561
+
562
+ .nuvio-brand-chip-row {
563
+ display: flex;
564
+ flex-wrap: wrap;
565
+ gap: 6px;
566
+ }
567
+
568
+ .nuvio-brand-chip {
569
+ flex: 1 1 auto;
570
+ min-width: 0;
571
+ min-height: 32px;
572
+ padding: 6px 10px;
573
+ border-radius: 10px;
574
+ border: 1px solid rgba(255, 255, 255, 0.1);
575
+ background: rgba(0, 0, 0, 0.28);
576
+ color: var(--nuvio-text-soft);
577
+ font-size: 11px;
578
+ font-weight: 600;
579
+ font-family: inherit;
580
+ cursor: pointer;
581
+ transition:
582
+ background 0.15s ease,
583
+ border-color 0.15s ease,
584
+ color 0.15s ease;
585
+ }
586
+
587
+ .nuvio-brand-chip:hover {
588
+ border-color: rgba(255, 255, 255, 0.18);
589
+ background: rgba(255, 255, 255, 0.08);
590
+ }
591
+
592
+ .nuvio-brand-chip--active {
593
+ border-color: rgba(59, 130, 246, 0.55);
594
+ background: linear-gradient(180deg, rgba(59, 130, 246, 0.35), rgba(37, 99, 235, 0.28));
595
+ color: #ffffff;
596
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.14);
597
+ }
598
+
599
+ .nuvio-brand-color-row {
600
+ display: grid;
601
+ grid-template-columns: repeat(5, minmax(0, 1fr));
602
+ gap: 6px;
603
+ }
604
+
605
+ .nuvio-brand-color-swatch {
606
+ display: flex;
607
+ flex-direction: column;
608
+ align-items: center;
609
+ gap: 5px;
610
+ min-width: 0;
611
+ padding: 8px 4px 6px;
612
+ border-radius: 12px;
613
+ border: 1px solid rgba(255, 255, 255, 0.08);
614
+ background: rgba(0, 0, 0, 0.22);
615
+ cursor: pointer;
616
+ transition:
617
+ border-color 0.15s ease,
618
+ background 0.15s ease,
619
+ transform 0.15s ease;
620
+ }
621
+
622
+ .nuvio-brand-color-swatch:hover {
623
+ border-color: rgba(255, 255, 255, 0.16);
624
+ background: rgba(255, 255, 255, 0.06);
625
+ }
626
+
627
+ .nuvio-brand-color-swatch--active {
628
+ border-color: rgba(125, 211, 252, 0.65);
629
+ background: rgba(59, 130, 246, 0.16);
630
+ box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.25);
631
+ }
632
+
633
+ .nuvio-brand-color-swatch-dot {
634
+ width: 22px;
635
+ height: 22px;
636
+ border-radius: 999px;
637
+ border: 2px solid rgba(255, 255, 255, 0.85);
638
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
639
+ }
640
+
641
+ .nuvio-brand-color-swatch-dot--none {
642
+ background: repeating-linear-gradient(
643
+ 45deg,
644
+ rgba(255, 255, 255, 0.12),
645
+ rgba(255, 255, 255, 0.12) 4px,
646
+ rgba(255, 255, 255, 0.04) 4px,
647
+ rgba(255, 255, 255, 0.04) 8px
648
+ );
649
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
650
+ }
651
+
652
+ .nuvio-brand-color-swatch-label {
653
+ font-size: 9px;
654
+ font-weight: 600;
655
+ color: var(--nuvio-muted);
656
+ text-align: center;
657
+ line-height: 1.1;
658
+ }
659
+
660
+ .nuvio-brand-color-swatch--active .nuvio-brand-color-swatch-label {
661
+ color: var(--nuvio-text);
662
+ }
663
+
664
+ .nuvio-brand-preview {
665
+ display: flex;
666
+ flex-direction: column;
667
+ gap: 8px;
668
+ }
669
+
670
+ .nuvio-brand-preview-lead {
671
+ margin: 0;
672
+ font-size: 11px;
673
+ line-height: 1.45;
674
+ color: var(--nuvio-dim);
675
+ }
676
+
677
+ .nuvio-brand-on-page-hint {
678
+ margin: 0;
679
+ padding: 10px 12px;
680
+ border-radius: 10px;
681
+ border: 1px solid rgba(255, 255, 255, 0.08);
682
+ background: rgba(255, 255, 255, 0.04);
683
+ font-size: 11px;
684
+ line-height: 1.45;
685
+ color: var(--nuvio-muted);
686
+ }
687
+
688
+ .nuvio-brand-preview-canvas {
689
+ padding: 14px;
690
+ border-radius: 16px;
691
+ border: 1px solid rgba(255, 255, 255, 0.1);
692
+ background:
693
+ radial-gradient(circle at 12% 8%, rgba(255, 255, 255, 0.08), transparent 36%),
694
+ rgba(0, 0, 0, 0.34);
695
+ }
696
+
697
+ .nuvio-brand-preview-samples {
698
+ display: flex;
699
+ flex-direction: column;
700
+ gap: 12px;
701
+ }
702
+
703
+ .nuvio-brand-preview-button {
704
+ display: inline-block;
705
+ align-self: flex-start;
706
+ font-size: 0.8125rem;
707
+ font-weight: 600;
708
+ line-height: 1.2;
709
+ }
710
+
711
+ .nuvio-brand-preview-card {
712
+ display: flex;
713
+ flex-direction: column;
714
+ gap: 6px;
715
+ }
716
+
717
+ .nuvio-brand-preview-heading {
718
+ line-height: 1.3;
719
+ }
720
+
721
+ .nuvio-brand-preview-body {
722
+ font-size: 0.8125rem;
723
+ line-height: 1.45;
724
+ color: #4b5563;
725
+ }
726
+
727
+ .nuvio-brand-sample-text {
728
+ max-width: 18rem;
729
+ }
730
+
731
+ .nuvio-brand-sample-table {
732
+ overflow: hidden;
733
+ width: 100%;
734
+ background: rgba(255, 255, 255, 0.96);
735
+ }
736
+
737
+ .nuvio-brand-sample-table-row {
738
+ display: grid;
739
+ grid-template-columns: 1fr 1fr;
740
+ gap: 8px;
741
+ padding: 8px 10px;
742
+ font-size: 0.75rem;
743
+ color: #374151;
744
+ border-top: 1px solid rgba(15, 23, 42, 0.08);
745
+ }
746
+
747
+ .nuvio-brand-sample-table-row:first-child {
748
+ border-top: none;
749
+ }
750
+
751
+ .nuvio-brand-sample-table-row--head {
752
+ font-weight: 600;
753
+ background: rgba(15, 23, 42, 0.04);
754
+ }
755
+
756
+ .nuvio-brand-sample-form {
757
+ display: flex;
758
+ flex-direction: column;
759
+ gap: 6px;
760
+ width: 100%;
761
+ }
762
+
763
+ .nuvio-brand-sample-form-label {
764
+ font-size: 0.75rem;
765
+ font-weight: 600;
766
+ color: #374151;
767
+ }
768
+
769
+ .nuvio-brand-sample-form-input {
770
+ display: block;
771
+ width: 100%;
772
+ font-size: 0.8125rem;
773
+ color: #6b7280;
774
+ background: rgba(255, 255, 255, 0.96);
775
+ }
776
+
777
+ .nuvio-brand-sample-badge {
778
+ display: inline-flex;
779
+ align-self: flex-start;
780
+ padding: 4px 10px;
781
+ font-size: 0.75rem;
782
+ font-weight: 600;
783
+ line-height: 1.2;
784
+ }
785
+
786
+ .nuvio-brand-section {
787
+ display: flex;
788
+ flex-direction: column;
789
+ gap: 8px;
790
+ padding-top: 10px;
791
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
792
+ }
793
+
794
+ .nuvio-brand-section:first-of-type {
795
+ border-top: none;
796
+ padding-top: 0;
797
+ }
798
+
799
+ .nuvio-brand-apply-lead {
800
+ margin: 0;
801
+ font-size: 11px;
802
+ line-height: 1.45;
803
+ color: var(--nuvio-dim);
804
+ }
805
+
806
+ .nuvio-brand-apply-grid .nuvio-brand-apply-btn {
807
+ width: 100%;
808
+ }
809
+
810
+ .nuvio-brand-save-bar {
811
+ display: flex;
812
+ flex-direction: column;
813
+ gap: 6px;
814
+ padding-top: 2px;
815
+ }
816
+
817
+ .nuvio-brand-save-btn {
818
+ width: 100%;
819
+ }
820
+
821
+ .nuvio-brand-save-status {
822
+ font-size: 11px;
823
+ color: var(--nuvio-dim);
824
+ text-align: center;
825
+ }
826
+
827
+ .nuvio-brand-save-status--warn {
828
+ color: var(--nuvio-warning);
829
+ }
830
+
831
+ .nuvio-brand-apply {
832
+ display: flex;
833
+ flex-direction: column;
834
+ gap: 8px;
835
+ padding-top: 4px;
836
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
837
+ }
838
+
839
+ .nuvio-brand-apply-note {
840
+ margin: 0;
841
+ font-size: 11px;
842
+ line-height: 1.4;
843
+ color: var(--nuvio-warning);
844
+ }
845
+
846
+ .nuvio-brand-apply-grid {
847
+ display: grid;
848
+ grid-template-columns: 1fr 1fr;
849
+ gap: 8px;
850
+ }
851
+
852
+ .nuvio-brand-apply-btn {
853
+ min-height: 36px;
854
+ padding: 8px 10px;
855
+ border-radius: 10px;
856
+ border: 1px solid rgba(255, 255, 255, 0.12);
857
+ background: rgba(0, 0, 0, 0.3);
858
+ color: var(--nuvio-text-soft);
859
+ font-size: 12px;
860
+ font-weight: 600;
861
+ font-family: inherit;
862
+ cursor: pointer;
863
+ transition:
864
+ background 0.15s ease,
865
+ border-color 0.15s ease;
866
+ }
867
+
868
+ .nuvio-brand-apply-btn:hover {
869
+ background: rgba(255, 255, 255, 0.1);
870
+ border-color: rgba(255, 255, 255, 0.2);
871
+ color: var(--nuvio-text);
872
+ }
873
+
874
+ .nuvio-brand-apply-on-page {
875
+ display: flex;
876
+ flex-direction: column;
877
+ gap: 8px;
878
+ padding-top: 4px;
879
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
880
+ }
881
+
882
+ .nuvio-brand-apply-on-page-lead {
883
+ margin: 0;
884
+ font-size: 11px;
885
+ line-height: 1.45;
886
+ color: var(--nuvio-dim);
887
+ }
888
+
889
+ .nuvio-brand-apply-on-page-btn {
890
+ align-self: flex-start;
891
+ }
892
+
893
+ .nuvio-brand-bulk {
894
+ display: flex;
895
+ flex-direction: column;
896
+ gap: 8px;
897
+ padding-top: 4px;
898
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
899
+ }
900
+
901
+ .nuvio-brand-bulk-lead {
902
+ margin: 0;
903
+ font-size: 11px;
904
+ line-height: 1.45;
905
+ color: var(--nuvio-dim);
906
+ }
907
+
908
+ .nuvio-brand-bulk-grid {
909
+ display: flex;
910
+ flex-direction: column;
911
+ gap: 6px;
912
+ }
913
+
914
+ .nuvio-brand-bulk-btn {
915
+ min-height: 34px;
916
+ padding: 8px 10px;
917
+ border-radius: 10px;
918
+ border: 1px solid rgba(125, 211, 252, 0.22);
919
+ background: rgba(59, 130, 246, 0.12);
920
+ color: var(--nuvio-text-soft);
921
+ font-size: 11px;
922
+ font-weight: 600;
923
+ font-family: inherit;
924
+ text-align: left;
925
+ cursor: pointer;
926
+ transition:
927
+ background 0.15s ease,
928
+ border-color 0.15s ease;
929
+ }
930
+
931
+ .nuvio-brand-bulk-btn:hover:not(:disabled) {
932
+ background: rgba(59, 130, 246, 0.2);
933
+ border-color: rgba(125, 211, 252, 0.35);
934
+ color: var(--nuvio-text);
935
+ }
936
+
937
+ .nuvio-brand-bulk-btn:disabled {
938
+ opacity: 0.45;
939
+ cursor: not-allowed;
940
+ }
941
+
942
+ .nuvio-brand-bulk-primary {
943
+ width: 100%;
944
+ }
945
+
331
946
  .nuvio-toggle-details {
332
947
  flex-shrink: 0;
333
948
  max-width: 9.5rem;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nuvio/overlay",
3
- "version": "1.0.0",
4
- "description": "Nuvio overlay 1.0 — dev-only visual editor for React + Vite + Tailwind (Simple Mode, click-to-tag, apply/undo).",
3
+ "version": "2.0.0",
4
+ "description": "Nuvio overlay — dev-only visual editor for React + Vite + Next.js + Tailwind (Brand Kit, click-to-tag, apply/undo).",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -25,7 +25,9 @@
25
25
  "type": "module",
26
26
  "sideEffects": [
27
27
  "./dist/index.js",
28
- "./dist/style.css"
28
+ "./dist/NuvioNextShell.js",
29
+ "./dist/style.css",
30
+ "./dist/NuvioNextShell.css"
29
31
  ],
30
32
  "main": "./dist/index.js",
31
33
  "types": "./dist/index.d.ts",
@@ -34,18 +36,29 @@
34
36
  "types": "./dist/index.d.ts",
35
37
  "import": "./dist/index.js"
36
38
  },
39
+ "./next": {
40
+ "types": "./dist/NuvioNextShell.d.ts",
41
+ "import": "./dist/NuvioNextShell.js"
42
+ },
37
43
  "./style.css": "./dist/style.css"
38
44
  },
39
45
  "engines": {
40
46
  "node": ">=20"
41
47
  },
42
48
  "peerDependencies": {
49
+ "next": ">=14.0.0",
43
50
  "react": "^18.3.1 || ^19.0.0",
44
51
  "react-dom": "^18.3.1 || ^19.0.0"
45
52
  },
53
+ "peerDependenciesMeta": {
54
+ "next": {
55
+ "optional": true
56
+ }
57
+ },
46
58
  "dependencies": {
47
59
  "posthog-js": "^1.380.1",
48
- "@nuvio/shared": "1.0.0"
60
+ "tailwind-merge": "^2.6.0",
61
+ "@nuvio/shared": "2.0.0"
49
62
  },
50
63
  "devDependencies": {
51
64
  "@types/react": "^19.0.8",
@@ -55,7 +68,8 @@
55
68
  "react-dom": "^19.0.0",
56
69
  "tsup": "^8.4.0",
57
70
  "typescript": "^5.7.3",
58
- "vitest": "^3.0.6"
71
+ "vitest": "^3.0.6",
72
+ "@nuvio/ast-engine": "2.0.0"
59
73
  },
60
74
  "scripts": {
61
75
  "build": "tsup",