next-ai-editor 1.0.1 → 1.1.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.
@@ -309,6 +309,368 @@
309
309
  font-family: ui-monospace, monospace;
310
310
  font-weight: 500;
311
311
  }
312
+ /* PR Block - matches task-block visual language */
313
+ .pr-block {
314
+ display: flex;
315
+ flex-direction: column;
316
+ gap: 12px;
317
+ padding: 12px;
318
+ background: rgba(30, 30, 46, 0.6);
319
+ border: 1px solid rgba(255, 255, 255, 0.1);
320
+ border-radius: 12px;
321
+ margin-top: 12px;
322
+ overflow: hidden;
323
+ box-sizing: border-box;
324
+ }
325
+
326
+ .chat-panel.light .pr-block {
327
+ background: rgba(255, 255, 255, 0.8);
328
+ border-color: rgba(0, 0, 0, 0.1);
329
+ }
330
+
331
+ /* Header */
332
+ .pr-block-header {
333
+ display: flex;
334
+ align-items: center;
335
+ justify-content: space-between;
336
+ gap: 12px;
337
+ padding-bottom: 8px;
338
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
339
+ }
340
+
341
+ .chat-panel.light .pr-block-header {
342
+ border-bottom-color: rgba(0, 0, 0, 0.1);
343
+ }
344
+
345
+ .pr-block-title {
346
+ font-size: 14px;
347
+ font-weight: 600;
348
+ color: #e4e4e7;
349
+ }
350
+
351
+ .chat-panel.light .pr-block-title {
352
+ color: #18181b;
353
+ }
354
+
355
+ .pr-block-cancel {
356
+ display: flex;
357
+ align-items: center;
358
+ justify-content: center;
359
+ width: 24px;
360
+ height: 24px;
361
+ border: none;
362
+ background: transparent;
363
+ border-radius: 6px;
364
+ color: #71717a;
365
+ cursor: pointer;
366
+ transition: all 0.15s;
367
+ }
368
+
369
+ .pr-block-cancel:hover:not(:disabled) {
370
+ background: rgba(239, 68, 68, 0.15);
371
+ color: #ef4444;
372
+ }
373
+
374
+ .pr-block-cancel:disabled {
375
+ opacity: 0.5;
376
+ cursor: not-allowed;
377
+ }
378
+
379
+ /* Content */
380
+ .pr-block-content {
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 12px;
384
+ overflow: hidden;
385
+ }
386
+
387
+ /* Error */
388
+ .pr-block-error {
389
+ padding: 8px 12px;
390
+ background: rgba(239, 68, 68, 0.15);
391
+ border: 1px solid rgba(239, 68, 68, 0.3);
392
+ border-radius: 8px;
393
+ color: #fca5a5;
394
+ font-size: 13px;
395
+ }
396
+
397
+ .chat-panel.light .pr-block-error {
398
+ background: rgba(239, 68, 68, 0.1);
399
+ color: #dc2626;
400
+ }
401
+
402
+ /* Form fields */
403
+ .pr-block-field {
404
+ display: flex;
405
+ flex-direction: column;
406
+ gap: 6px;
407
+ min-width: 0;
408
+ }
409
+
410
+ .pr-block-field label {
411
+ font-size: 12px;
412
+ font-weight: 500;
413
+ color: #a1a1aa;
414
+ text-transform: uppercase;
415
+ letter-spacing: 0.5px;
416
+ }
417
+
418
+ .chat-panel.light .pr-block-field label {
419
+ color: #71717a;
420
+ }
421
+
422
+ .pr-block-field-header {
423
+ display: flex;
424
+ align-items: center;
425
+ justify-content: space-between;
426
+ }
427
+
428
+ .pr-block-field input,
429
+ .pr-block-field textarea {
430
+ width: 100%;
431
+ padding: 10px 12px;
432
+ background: rgba(255, 255, 255, 0.08);
433
+ border: 1px solid rgba(255, 255, 255, 0.1);
434
+ border-radius: 8px;
435
+ color: #e4e4e7;
436
+ font-size: 14px;
437
+ font-family: system-ui, -apple-system, sans-serif;
438
+ transition: all 0.15s;
439
+ box-sizing: border-box;
440
+ }
441
+
442
+ .chat-panel.light .pr-block-field input,
443
+ .chat-panel.light .pr-block-field textarea {
444
+ background: rgba(0, 0, 0, 0.04);
445
+ border-color: rgba(0, 0, 0, 0.1);
446
+ color: #18181b;
447
+ }
448
+
449
+ .pr-block-field input:focus,
450
+ .pr-block-field textarea:focus {
451
+ outline: none;
452
+ border-color: rgba(99, 102, 241, 0.5);
453
+ background: rgba(255, 255, 255, 0.12);
454
+ }
455
+
456
+ .chat-panel.light .pr-block-field input:focus,
457
+ .chat-panel.light .pr-block-field textarea:focus {
458
+ background: rgba(0, 0, 0, 0.06);
459
+ border-color: rgba(99, 102, 241, 0.4);
460
+ }
461
+
462
+ .pr-block-field input:disabled,
463
+ .pr-block-field textarea:disabled {
464
+ opacity: 0.6;
465
+ cursor: not-allowed;
466
+ }
467
+
468
+ .pr-block-field input::placeholder,
469
+ .pr-block-field textarea::placeholder {
470
+ color: #71717a;
471
+ }
472
+
473
+ .pr-block-field textarea {
474
+ resize: vertical;
475
+ min-height: 60px;
476
+ }
477
+
478
+ /* Regenerate button */
479
+ .pr-block-regenerate {
480
+ display: inline-flex;
481
+ align-items: center;
482
+ gap: 4px;
483
+ padding: 4px 8px;
484
+ background: transparent;
485
+ border: none;
486
+ border-radius: 4px;
487
+ color: #a5b4fc;
488
+ font-size: 11px;
489
+ font-weight: 500;
490
+ cursor: pointer;
491
+ transition: all 0.15s;
492
+ }
493
+
494
+ .pr-block-regenerate:hover:not(:disabled) {
495
+ background: rgba(99, 102, 241, 0.15);
496
+ color: #c7d2fe;
497
+ }
498
+
499
+ .pr-block-regenerate:disabled {
500
+ opacity: 0.5;
501
+ cursor: not-allowed;
502
+ }
503
+
504
+ .chat-panel.light .pr-block-regenerate {
505
+ color: #6366f1;
506
+ }
507
+
508
+ .chat-panel.light .pr-block-regenerate:hover:not(:disabled) {
509
+ background: rgba(99, 102, 241, 0.1);
510
+ color: #4f46e5;
511
+ }
512
+
513
+ /* Info row */
514
+ .pr-block-info {
515
+ display: flex;
516
+ align-items: center;
517
+ gap: 16px;
518
+ font-size: 12px;
519
+ color: #71717a;
520
+ }
521
+
522
+ .pr-block-info span {
523
+ display: flex;
524
+ align-items: center;
525
+ gap: 4px;
526
+ }
527
+
528
+ /* Footer */
529
+ .pr-block-footer {
530
+ display: flex;
531
+ justify-content: flex-end;
532
+ padding-top: 8px;
533
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
534
+ }
535
+
536
+ .chat-panel.light .pr-block-footer {
537
+ border-top-color: rgba(0, 0, 0, 0.1);
538
+ }
539
+
540
+ .pr-block-submit {
541
+ display: inline-flex;
542
+ align-items: center;
543
+ gap: 6px;
544
+ padding: 8px 16px;
545
+ background: linear-gradient(135deg, #6366f1, #a855f7);
546
+ border: none;
547
+ border-radius: 8px;
548
+ color: white;
549
+ font-size: 13px;
550
+ font-weight: 500;
551
+ cursor: pointer;
552
+ transition: all 0.2s;
553
+ }
554
+
555
+ .pr-block-submit:hover:not(:disabled) {
556
+ transform: translateY(-1px);
557
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
558
+ }
559
+
560
+ .pr-block-submit:disabled {
561
+ opacity: 0.5;
562
+ cursor: not-allowed;
563
+ transform: none;
564
+ box-shadow: none;
565
+ }
566
+
567
+ /* Loading state */
568
+ .pr-block-generating {
569
+ padding: 24px;
570
+ }
571
+
572
+ .pr-block-loading {
573
+ display: flex;
574
+ align-items: center;
575
+ justify-content: center;
576
+ gap: 10px;
577
+ color: #a1a1aa;
578
+ font-size: 14px;
579
+ }
580
+
581
+ .chat-panel.light .pr-block-loading {
582
+ color: #71717a;
583
+ }
584
+
585
+ /* Spinner */
586
+ .pr-block-spinner {
587
+ animation: prBlockSpin 1s linear infinite;
588
+ }
589
+
590
+ @keyframes prBlockSpin {
591
+ to {
592
+ transform: rotate(360deg);
593
+ }
594
+ }
595
+
596
+ /* Success state */
597
+ .pr-block-success {
598
+ padding: 16px;
599
+ background: rgba(34, 197, 94, 0.1);
600
+ border-color: rgba(34, 197, 94, 0.3);
601
+ }
602
+
603
+ .chat-panel.light .pr-block-success {
604
+ background: rgba(34, 197, 94, 0.08);
605
+ border-color: rgba(34, 197, 94, 0.2);
606
+ }
607
+
608
+ .pr-block-success-content {
609
+ display: flex;
610
+ align-items: center;
611
+ gap: 12px;
612
+ }
613
+
614
+ .pr-block-success-icon {
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: center;
618
+ width: 28px;
619
+ height: 28px;
620
+ background: rgba(34, 197, 94, 0.2);
621
+ border-radius: 50%;
622
+ color: #22c55e;
623
+ flex-shrink: 0;
624
+ }
625
+
626
+ .pr-block-success-text {
627
+ display: flex;
628
+ align-items: center;
629
+ gap: 8px;
630
+ flex-wrap: wrap;
631
+ font-size: 14px;
632
+ }
633
+
634
+ .pr-block-success-title {
635
+ font-weight: 600;
636
+ color: #22c55e;
637
+ }
638
+
639
+ .pr-block-success-link {
640
+ color: #a5b4fc;
641
+ text-decoration: none;
642
+ font-weight: 500;
643
+ }
644
+
645
+ .pr-block-success-link:hover {
646
+ text-decoration: underline;
647
+ }
648
+
649
+ .chat-panel.light .pr-block-success-link {
650
+ color: #6366f1;
651
+ }
652
+
653
+ .pr-block-success-branch {
654
+ color: #a1a1aa;
655
+ }
656
+
657
+ .pr-block-success-branch code {
658
+ font-family: ui-monospace, monospace;
659
+ font-size: 12px;
660
+ padding: 2px 6px;
661
+ background: rgba(255, 255, 255, 0.1);
662
+ border-radius: 4px;
663
+ color: #e4e4e7;
664
+ }
665
+
666
+ .chat-panel.light .pr-block-success-branch {
667
+ color: #71717a;
668
+ }
669
+
670
+ .chat-panel.light .pr-block-success-branch code {
671
+ background: rgba(0, 0, 0, 0.06);
672
+ color: #18181b;
673
+ }
312
674
  .chat-panel {
313
675
  width: 100%;
314
676
  display: flex;
@@ -1361,3 +1723,348 @@
1361
1723
  transform: translateX(-50%) translateY(0);
1362
1724
  }
1363
1725
  }
1726
+ /* PRView - Inline PR creation within ChatPanel */
1727
+
1728
+ .pr-view {
1729
+ display: flex;
1730
+ flex-direction: column;
1731
+ height: 100%;
1732
+ padding: 16px;
1733
+ background: rgba(20, 20, 30, 0.98);
1734
+ border-radius: 12px;
1735
+ }
1736
+
1737
+ /* Light theme support */
1738
+ .light .pr-view {
1739
+ background: rgba(255, 255, 255, 0.98);
1740
+ }
1741
+
1742
+ .pr-view-content {
1743
+ flex: 1;
1744
+ overflow-y: auto;
1745
+ }
1746
+
1747
+ /* Loading state */
1748
+ .pr-view-loading {
1749
+ display: flex;
1750
+ flex-direction: column;
1751
+ align-items: center;
1752
+ justify-content: center;
1753
+ height: 100%;
1754
+ gap: 12px;
1755
+ color: #a1a1aa;
1756
+ }
1757
+
1758
+ .pr-view-loading p {
1759
+ margin: 0;
1760
+ font-size: 14px;
1761
+ }
1762
+
1763
+ /* Success state */
1764
+ .pr-view-success {
1765
+ display: flex;
1766
+ flex-direction: column;
1767
+ align-items: center;
1768
+ justify-content: center;
1769
+ height: 100%;
1770
+ text-align: center;
1771
+ }
1772
+
1773
+ .pr-view-success-icon {
1774
+ width: 56px;
1775
+ height: 56px;
1776
+ display: flex;
1777
+ align-items: center;
1778
+ justify-content: center;
1779
+ background: rgba(34, 197, 94, 0.15);
1780
+ border-radius: 50%;
1781
+ color: #22c55e;
1782
+ margin-bottom: 12px;
1783
+ }
1784
+
1785
+ .pr-view-success h3 {
1786
+ margin: 0 0 8px;
1787
+ font-size: 16px;
1788
+ font-weight: 600;
1789
+ color: #e4e4e7;
1790
+ }
1791
+
1792
+ .light .pr-view-success h3 {
1793
+ color: #18181b;
1794
+ }
1795
+
1796
+ .pr-view-success p {
1797
+ margin: 0;
1798
+ font-size: 13px;
1799
+ color: #a1a1aa;
1800
+ }
1801
+
1802
+ .pr-view-success a {
1803
+ color: #818cf8;
1804
+ text-decoration: none;
1805
+ }
1806
+
1807
+ .pr-view-success a:hover {
1808
+ text-decoration: underline;
1809
+ }
1810
+
1811
+ .pr-view-success code {
1812
+ padding: 2px 6px;
1813
+ background: rgba(255, 255, 255, 0.1);
1814
+ border-radius: 4px;
1815
+ font-family: ui-monospace, monospace;
1816
+ font-size: 12px;
1817
+ color: #c4b5fd;
1818
+ }
1819
+
1820
+ /* Error */
1821
+ .pr-view-error {
1822
+ padding: 10px 12px;
1823
+ background: rgba(239, 68, 68, 0.15);
1824
+ border: 1px solid rgba(239, 68, 68, 0.3);
1825
+ border-radius: 8px;
1826
+ color: #fca5a5;
1827
+ font-size: 13px;
1828
+ margin-bottom: 16px;
1829
+ }
1830
+
1831
+ /* Form fields */
1832
+ .pr-view-field {
1833
+ margin-bottom: 16px;
1834
+ }
1835
+
1836
+ .pr-view-field label {
1837
+ display: block;
1838
+ font-size: 11px;
1839
+ font-weight: 600;
1840
+ color: #a1a1aa;
1841
+ text-transform: uppercase;
1842
+ letter-spacing: 0.5px;
1843
+ margin-bottom: 6px;
1844
+ }
1845
+
1846
+ .light .pr-view-field label {
1847
+ color: #71717a;
1848
+ }
1849
+
1850
+ .pr-view-field-header {
1851
+ display: flex;
1852
+ align-items: center;
1853
+ justify-content: space-between;
1854
+ margin-bottom: 6px;
1855
+ }
1856
+
1857
+ .pr-view-field-header label {
1858
+ margin-bottom: 0;
1859
+ }
1860
+
1861
+ .pr-view-field input[type="text"] {
1862
+ width: 100%;
1863
+ padding: 10px 12px;
1864
+ background: rgba(255, 255, 255, 0.06);
1865
+ border: 1px solid rgba(255, 255, 255, 0.1);
1866
+ border-radius: 8px;
1867
+ color: #e4e4e7;
1868
+ font-size: 14px;
1869
+ font-family: inherit;
1870
+ box-sizing: border-box;
1871
+ }
1872
+
1873
+ .pr-view-field input[type="text"]:focus {
1874
+ outline: none;
1875
+ border-color: #818cf8;
1876
+ background: rgba(255, 255, 255, 0.08);
1877
+ }
1878
+
1879
+ .pr-view-field input[type="text"]:disabled {
1880
+ opacity: 0.6;
1881
+ }
1882
+
1883
+ .pr-view-field input[type="text"]::placeholder {
1884
+ color: #52525b;
1885
+ }
1886
+
1887
+ .light .pr-view-field input[type="text"] {
1888
+ background: rgba(0, 0, 0, 0.04);
1889
+ border-color: rgba(0, 0, 0, 0.1);
1890
+ color: #18181b;
1891
+ }
1892
+
1893
+ .light .pr-view-field input[type="text"]:focus {
1894
+ background: rgba(0, 0, 0, 0.06);
1895
+ }
1896
+
1897
+ .light .pr-view-field input[type="text"]::placeholder {
1898
+ color: #a1a1aa;
1899
+ }
1900
+
1901
+ .pr-view-field textarea {
1902
+ width: 100%;
1903
+ min-height: 100px;
1904
+ padding: 10px 12px;
1905
+ background: rgba(255, 255, 255, 0.06);
1906
+ border: 1px solid rgba(255, 255, 255, 0.1);
1907
+ border-radius: 8px;
1908
+ color: #e4e4e7;
1909
+ font-size: 13px;
1910
+ font-family: inherit;
1911
+ resize: vertical;
1912
+ box-sizing: border-box;
1913
+ }
1914
+
1915
+ .pr-view-field textarea:focus {
1916
+ outline: none;
1917
+ border-color: #818cf8;
1918
+ background: rgba(255, 255, 255, 0.08);
1919
+ }
1920
+
1921
+ .pr-view-field textarea:disabled {
1922
+ opacity: 0.6;
1923
+ }
1924
+
1925
+ .pr-view-field textarea::placeholder {
1926
+ color: #52525b;
1927
+ }
1928
+
1929
+ .light .pr-view-field textarea {
1930
+ background: rgba(0, 0, 0, 0.04);
1931
+ border-color: rgba(0, 0, 0, 0.1);
1932
+ color: #18181b;
1933
+ }
1934
+
1935
+ .light .pr-view-field textarea:focus {
1936
+ background: rgba(0, 0, 0, 0.06);
1937
+ }
1938
+
1939
+ .light .pr-view-field textarea::placeholder {
1940
+ color: #a1a1aa;
1941
+ }
1942
+
1943
+ /* Regenerate button */
1944
+ .pr-view-regenerate {
1945
+ display: inline-flex;
1946
+ align-items: center;
1947
+ gap: 4px;
1948
+ padding: 4px 8px;
1949
+ background: transparent;
1950
+ border: 1px solid rgba(255, 255, 255, 0.1);
1951
+ border-radius: 6px;
1952
+ color: #a1a1aa;
1953
+ font-size: 11px;
1954
+ cursor: pointer;
1955
+ transition: all 0.15s;
1956
+ }
1957
+
1958
+ .pr-view-regenerate:hover:not(:disabled) {
1959
+ background: rgba(255, 255, 255, 0.05);
1960
+ color: #e4e4e7;
1961
+ }
1962
+
1963
+ .pr-view-regenerate:disabled {
1964
+ opacity: 0.5;
1965
+ cursor: not-allowed;
1966
+ }
1967
+
1968
+ .light .pr-view-regenerate {
1969
+ border-color: rgba(0, 0, 0, 0.1);
1970
+ color: #71717a;
1971
+ }
1972
+
1973
+ .light .pr-view-regenerate:hover:not(:disabled) {
1974
+ background: rgba(0, 0, 0, 0.03);
1975
+ color: #18181b;
1976
+ }
1977
+
1978
+ /* Info bar */
1979
+ .pr-view-info {
1980
+ display: flex;
1981
+ gap: 16px;
1982
+ padding: 10px 12px;
1983
+ background: rgba(255, 255, 255, 0.03);
1984
+ border-radius: 8px;
1985
+ font-size: 12px;
1986
+ color: #a1a1aa;
1987
+ }
1988
+
1989
+ .light .pr-view-info {
1990
+ background: rgba(0, 0, 0, 0.03);
1991
+ color: #71717a;
1992
+ }
1993
+
1994
+ .pr-view-info span {
1995
+ display: flex;
1996
+ align-items: center;
1997
+ gap: 6px;
1998
+ }
1999
+
2000
+ /* Footer */
2001
+ .pr-view-footer {
2002
+ display: flex;
2003
+ justify-content: flex-end;
2004
+ gap: 8px;
2005
+ padding-top: 16px;
2006
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
2007
+ margin-top: auto;
2008
+ }
2009
+
2010
+ .light .pr-view-footer {
2011
+ border-top-color: rgba(0, 0, 0, 0.06);
2012
+ }
2013
+
2014
+ .pr-view-btn {
2015
+ display: inline-flex;
2016
+ align-items: center;
2017
+ justify-content: center;
2018
+ gap: 6px;
2019
+ padding: 8px 16px;
2020
+ border: none;
2021
+ border-radius: 8px;
2022
+ font-size: 13px;
2023
+ font-weight: 500;
2024
+ cursor: pointer;
2025
+ transition: all 0.15s;
2026
+ }
2027
+
2028
+ .pr-view-btn:disabled {
2029
+ opacity: 0.5;
2030
+ cursor: not-allowed;
2031
+ }
2032
+
2033
+ .pr-view-btn-secondary {
2034
+ background: rgba(255, 255, 255, 0.06);
2035
+ color: #a1a1aa;
2036
+ }
2037
+
2038
+ .pr-view-btn-secondary:hover:not(:disabled) {
2039
+ background: rgba(255, 255, 255, 0.1);
2040
+ color: #e4e4e7;
2041
+ }
2042
+
2043
+ .light .pr-view-btn-secondary {
2044
+ background: rgba(0, 0, 0, 0.04);
2045
+ color: #71717a;
2046
+ }
2047
+
2048
+ .light .pr-view-btn-secondary:hover:not(:disabled) {
2049
+ background: rgba(0, 0, 0, 0.08);
2050
+ color: #18181b;
2051
+ }
2052
+
2053
+ .pr-view-btn-primary {
2054
+ background: linear-gradient(135deg, #6366f1, #8b5cf6);
2055
+ color: white;
2056
+ }
2057
+
2058
+ .pr-view-btn-primary:hover:not(:disabled) {
2059
+ filter: brightness(1.1);
2060
+ }
2061
+
2062
+ /* Spinner */
2063
+ .pr-view-spinner {
2064
+ animation: prViewSpin 1s linear infinite;
2065
+ }
2066
+
2067
+ @keyframes prViewSpin {
2068
+ from { transform: rotate(0deg); }
2069
+ to { transform: rotate(360deg); }
2070
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-ai-editor",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "AI-powered React component editor for Next.js - edit your components with natural language in development mode. Requires next-ai-editor-service to be running.",
5
5
  "author": "Jesse Halpern",
6
6
  "type": "module",