@moontra/moonui 6.27.0 → 6.29.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/index.mjs CHANGED
@@ -108,14 +108,22 @@ var alertVariants = cva(
108
108
  variants: {
109
109
  variant: {
110
110
  default: "bg-background text-foreground border-border",
111
- primary: "bg-primary/10 text-primary border-primary/30",
112
- success: "bg-success/10 text-success border-success/30",
113
- warning: "bg-warning/10 text-warning-subtle-foreground border-warning/30",
114
- error: "bg-destructive/10 text-destructive border-destructive/30",
111
+ // KONTRAST (açık tema): metin rengi ham `text-X` DEĞİL,
112
+ // `text-X-subtle-foreground` olmalı. `bg-X/10 + text-X` deseni
113
+ // açık temada ölçülen 4.11–4.45 veriyor ve WCAG AA eşiğini
114
+ // (4.5) geçmiyor. `-subtle-foreground` token'ları aynı yüzey
115
+ // için 8.20–9.52 sağlıyor (tokens.css'te oranlar yazılı) ve
116
+ // `bg-X-subtle`, `bg-X/10` ile AYNI görünümü verir
117
+ // (tokens.css:217) → görsel kimlik değişmez, yalnız metin
118
+ // koyulaşır. `warning` bu düzeltmeyi zaten taşıyordu.
119
+ primary: "bg-primary-subtle text-primary-subtle-foreground border-primary/30",
120
+ success: "bg-success-subtle text-success-subtle-foreground border-success/30",
121
+ warning: "bg-warning-subtle text-warning-subtle-foreground border-warning/30",
122
+ error: "bg-destructive-subtle text-destructive-subtle-foreground border-destructive/30",
115
123
  // `--info` token'ı (tokens.css) blue-500 ile birebir aynı değeri
116
124
  // taşır → görsel değişiklik yok, ancak varyant artık temaya ve
117
125
  // karanlık moda duyarlı. Kardeş varyantlarla simetrik.
118
- info: "bg-info/10 text-info border-info/30"
126
+ info: "bg-info-subtle text-info-subtle-foreground border-info/30"
119
127
  },
120
128
  size: {
121
129
  sm: "py-2 text-xs",
@@ -224,7 +232,12 @@ var AlertDescription = React12.forwardRef(({ className, ...props }, ref) => /* @
224
232
  ref,
225
233
  className: cn(
226
234
  "moonui-theme",
227
- "text-sm leading-5 text-muted-foreground",
235
+ // KONTRAST: sabit `text-muted-foreground` (#606f85) renkli varyant
236
+ // yüzeylerinde 4.31–4.48 veriyordu — başlık düzelse bile açıklama
237
+ // satırı eşiğin altında kalıyordu. `text-current` varyantın
238
+ // `-subtle-foreground` rengini miras alır; hiyerarşi renk yerine
239
+ // ağırlıkla (başlık `font-semibold`) ve hafif opaklıkla korunur.
240
+ "text-sm leading-5 text-current opacity-90",
228
241
  className
229
242
  ),
230
243
  ...props
@@ -421,12 +434,36 @@ var badgeVariants = cva(
421
434
  "focus-visible:ring-gray-400/30 dark:focus-visible:ring-gray-500/40",
422
435
  "dark:bg-gray-700/50 dark:text-gray-50 dark:shadow-inner dark:shadow-gray-950/10"
423
436
  ],
437
+ // #708 kalem 3: `outline` varyantı TÜKETİCİYİ EZİYORDU — #715'in `button`da
438
+ // kapattığı deliğin birebir aynısı. `cn()` = `twMerge(clsx(...))`; tüketici
439
+ // `className="text-white"` yazınca twMerge ÖNEKSİZ `text-foreground`u eler,
440
+ // ama `dark:text-gray-100` AYRI modifier grubu olduğu için ELENMEZ ve koyu
441
+ // temada özgüllükle kazanır: (0,2,0) > (0,1,0).
442
+ //
443
+ // Ölçülen sonuç (docs "PRO" rozeti, `from-brand-600 to-brand-accent-600`
444
+ // gradyanı üstünde, `text-xs` = küçük metin → AA 4.5:1):
445
+ // light beyaz → en kötü uç 4.60 ✓ (tüketicinin istediği renk)
446
+ // dark gray-100 → en kötü uç 4.18 ✗ (varyantın dayattığı renk)
447
+ // A18-V 10/10 sayfada ölçtü; axe bunu `violations`a HİÇ yazmıyor (gradyan
448
+ // zemin → `incomplete` kovası), bu yüzden 11 koşu boyunca görülmedi.
449
+ //
450
+ // #715'in AYRIMI satır satır uygulandı:
451
+ // · `dark:bg-transparent` → öneksiz `bg-transparent` zaten aşağıda ve
452
+ // `outline`da başka `bg-*` yok (sıralama guard'ı da değil) → SAF TEKRAR,
453
+ // kaldırıldı.
454
+ // · `dark:text-gray-100` → öneksiz ikizinden (`--foreground` dark =
455
+ // rgb(225,231,239)) FARKLI bir değere gidiyordu, ama fark rozetin kendi
456
+ // okunurluğunda ölçülemeyecek kadar küçük (koyu kart üstünde 15.0 → 13.5;
457
+ // ikisi de AA'nın çok üstünde) ve karşılığında tüketicinin AA'yı GEÇEN
458
+ // `text-white`ını eziyordu → kaldırıldı.
459
+ // · `dark:backdrop-blur-sm` → öneksiz ikizi yok, koyu-temaya özgü gerçek
460
+ // bir efekt → KORUNDU.
424
461
  outline: [
425
462
  "border-gray-200 dark:border-gray-600",
426
463
  "bg-transparent text-foreground",
427
464
  "hover:border-gray-300 dark:hover:border-gray-500",
428
465
  "focus-visible:ring-gray-400/30 dark:focus-visible:ring-gray-500/40",
429
- "dark:text-gray-100 dark:bg-transparent dark:backdrop-blur-sm"
466
+ "dark:backdrop-blur-sm"
430
467
  ],
431
468
  // #544: `bg-error` (= --error, #ef4343) beyaz metinle 3.78 veriyordu (AA 4.5 ister),
432
469
  // `dark:bg-error/90` ise gerçek koyu kart (#111827) üstünde 4.43 ile kalıyordu.
@@ -781,11 +818,68 @@ var buttonVariants = cva(
781
818
  {
782
819
  variants: {
783
820
  variant: {
821
+ // #715 Dal 1 — GEREKSİZ `dark:` TEKRARI KALDIRILDI.
822
+ // `--primary` ve `--primary-foreground` `.dark` bloğunda ZATEN farklı değer
823
+ // alıyor (tokens.css:129/137 ↔ :545/546), yani öneksiz `bg-primary
824
+ // text-primary-foreground` iki temada da doğru çifti veriyor. `dark:` ikizi
825
+ // hiçbir şey KAZANDIRMIYOR, yalnız özgüllüğü şişiriyordu:
826
+ // .dark\:text-primary-foreground:is(.dark *) → (0,2,0)
827
+ // tüketicinin text-white → (0,1,0)
828
+ // `cn()` = twMerge: tüketici `text-white` yazınca twMerge öneksiz
829
+ // `text-primary-foreground`u ELER ama `dark:` ikizi AYRI modifier grubu
830
+ // olduğu için KALIR → koyu temada metin sessizce dark
831
+ // `--primary-foreground`a (222.2 47.4% 1.2% = rgb(2,2,5)) düşüyordu.
832
+ // Ölçüldü: beyaz metin beklerken 1.28:1 (docs/click-animations gradyan
833
+ // butonları). Öneksiz satır kaldığı için TEMA DAVRANIŞI DEĞİŞMEZ.
834
+ // Kardeş presedans: #533/#646 badge'de `dark:bg-primary/90`ı aynı gerekçeyle
835
+ // kaldırdı; button'a o turda uğranmamıştı.
836
+ //
837
+ // #715 Dal 3 — `primary`nin hover/active ALFA kompoziti AA altındaydı;
838
+ // `destructive`in (Dal 2) birebir aynı kusuru. `/90` ve `/80` zemini BEYAZLA
839
+ // karıştırıp rengi AÇIYOR, metin ise sabit `--primary-foreground` (#f8fafc):
840
+ // resting bg-primary #1067f4 → 4.70 ✓ (#442: geçiyor → DOKUNULMADI)
841
+ // hover bg-primary/90 #2876f5 → 4.01 ✗
842
+ // active bg-primary/80 #4085f6 → 3.40 ✗
843
+ // Koyu tema ZATEN geçiyor (near-white zemin + near-black metin: 19.80 /
844
+ // 15.96 / 12.50) → düzeltmenin onu bozmaması ŞART.
845
+ //
846
+ // ⚠️ Dal 2'nin çözümü (alfa yerine opak `error-NNN` kademesi) BURADA
847
+ // UYGULANAMAZ — `primary`nin skala ailesi YANLIŞ HUE'DA:
848
+ // --primary 217.2 91.2% 51% = #1067f4 (blue, h≈217)
849
+ // --primary-700 3 105 161 = #0369a1 (sky, h≈199)
850
+ // `--primary-50…950` (tokens.css:15-25) Tailwind SKY paleti; `--primary`nin
851
+ // koyusu DEĞİL, başka bir renk. Üstüne preset o kademeleri hiçbir utility'ye
852
+ // bağlamıyor → `bg-primary-700` bugün HİÇ CSS ÜRETMEYEN ölü sınıf (#713).
853
+ // Ölçülen adaylar ve RET gerekçeleri:
854
+ // · preset'e sky kademelerini bağla → açık temada 5.67 ✓, AMA (a) görünür
855
+ // hue kayması, (b) `bg-primary-600` (3.91 ✗) "primary'nin koyusu" sanılan
856
+ // yanıltıcı public API, (c) öneksiz sınıf koyu temada DA uygulanır ve
857
+ // near-black metinle 3.49'a ÇÖKER. → RET
858
+ // · `bg-blue-700` (6.41 ✓) → token'ı by-pass eder; tüketici `--primary`yi
859
+ // override edince hover mavide takılı kalır. → RET
860
+ // · `bg-primary-subtle-foreground` (#0950c3, 6.81 ✓, doğru hue, sınıf ZATEN
861
+ // üretiliyor) → FOREGROUND rolündeki token'ı ZEMİN yapmak iki rolü
862
+ // birbirine kilitler. → RET
863
+ // SEÇİLEN: koyu tonu `--primary`nin KENDİSİNDEN türet (`color-mix`, siyaha
864
+ // doğru). Tek öneksiz sınıf iki temada da doğru sonuç verir ve tüketici
865
+ // `--primary`yi değiştirdiğinde hover/active KENDİLİĞİNDEN uyar —
866
+ // tokens.css:120-128'in bilinçle koruduğu sözleşme bozulmaz.
867
+ // GERÇEK TARAYICIDA ÖLÇÜLDÜ (headless Chrome 140, piksel örneklemesi):
868
+ // hover 85% + black açık #0e57cf → 6.11 ✓ | koyu #d3d4d6 → 13.97 ✓
869
+ // active 75% + black açık #0c4db7 → 7.27 ✓ | koyu #babbbd → 10.79 ✓
870
+ // (Testteki kanal-bazlı model 1/255 yuvarlama farkıyla #0e58cf → 6.05 der;
871
+ // ikisi de eşiğin çok üstünde. `color-mix` gerçekten ÇÖZÜLÜYOR — tarayıcı
872
+ // `color(srgb 0.053652 0.342337 0.813348)` döndürüyor, yani sınıf ölü değil.)
873
+ // `dark:` GUARD GEREKMEZ: Dal 1'den sonra dizide hiç `dark:bg-*` yok; tek
874
+ // rakip öneksiz `bg-primary` (0,1,0) ve `hover:`/`active:` (0,2,0) onu yener.
875
+ // `[color:…]` ETİKETİ BİLEREK yazıldı: sınıfın renk olarak tanınmasını hem
876
+ // Tailwind'in hem twMerge'ün tip ÇIKARIMINA bırakmaz. (Etiketsiz form da
877
+ // bugün doğru çalışıyor — ikisi de deterministik probe'la ölçüldü — ama
878
+ // #715'in tamamı "sessizce yanlış sınıflandırılan sınıf" hikâyesidir.)
784
879
  primary: [
785
880
  "bg-primary text-primary-foreground",
786
- "dark:bg-primary dark:text-primary-foreground",
787
- "hover:bg-primary/90 dark:hover:bg-primary/90",
788
- "active:bg-primary/80 dark:active:bg-primary/80",
881
+ "hover:bg-[color:color-mix(in_srgb,hsl(var(--primary))_85%,black)]",
882
+ "active:bg-[color:color-mix(in_srgb,hsl(var(--primary))_75%,black)]",
789
883
  "shadow-sm hover:shadow-md",
790
884
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
791
885
  "transition-all duration-200"
@@ -799,12 +893,18 @@ var buttonVariants = cva(
799
893
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
800
894
  "shadow-sm hover:shadow-md"
801
895
  ],
896
+ // #715 Dal 1 — `outline`ın DÖRT `dark:` satırı da aynı token'ın tekrarıydı
897
+ // (`--background`/`--foreground`/`--input`/`--accent(-foreground)` hepsi
898
+ // `.dark` bloğunda tanımlı) → kaldırıldı. Kaskad davranışı korunuyor:
899
+ // Tailwind 3.4.17 çıktısında `hover:`/`active:` kuralları `dark:`ten ÖNCE
900
+ // yazılıyor, yani rakip `dark:bg-background` (0,2,0) gitmeden `hover:bg-accent`
901
+ // (0,2,0) koyu temada kaybederdi — bu yüzden satırlar TEK TEK değil,
902
+ // varyant bazında BÜTÜN olarak kaldırıldı.
802
903
  outline: [
803
904
  "bg-background text-foreground",
804
- "dark:bg-background dark:text-foreground",
805
- "border border-input dark:border-input",
806
- "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent dark:hover:text-accent-foreground",
807
- "active:bg-accent/80 dark:active:bg-accent/80",
905
+ "border border-input",
906
+ "hover:bg-accent hover:text-accent-foreground",
907
+ "active:bg-accent/80",
808
908
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
809
909
  "transition-all duration-200"
810
910
  ],
@@ -825,11 +925,34 @@ var buttonVariants = cva(
825
925
  // Not: `dark:bg-destructive` KALDIRILDI, yanına eklenmedi — iki `dark:bg-*`
826
926
  // utility'si aynı anda yazılırsa hangisinin kazanacağını sınıf dizgesi sırası
827
927
  // DEĞİL Tailwind'in kendi iç sıralaması belirler.
928
+ //
929
+ // #715 Dal 2 — #544 yalnız RESTING durumu ölçmüştü; alfa harmanlı DURUM
930
+ // dalları sayılmadı. Açık temada `/90` ve `/80` zemini BEYAZLA karıştırıp
931
+ // rengi AÇIYOR, yani AA'yı düşürüyor (metin sabit `--destructive-foreground`
932
+ // #f8fafc):
933
+ // resting bg-destructive #e11313 → 4.66 ✓ (#544'ün ölçtüğü)
934
+ // hover bg-destructive/90 #e42b2b → 4.29 ✗ (axe: 4.28, serious)
935
+ // active bg-destructive/80 #e74242 → 3.82 ✗
936
+ // Çözüm koyu dalın ZATEN kullandığı yaklaşım: alfa yerine opak `error`
937
+ // kademesi. Açık dal da aynı kademelere bağlandı:
938
+ // hover bg-error-700 #b91c1c → 6.18 ✓
939
+ // active bg-error-800 #991b1b → 7.94 ✓
940
+ // Yan fayda: durum ilerlemesi artık tutarlı KOYULAŞIYOR (e11313 → b91c1c →
941
+ // 991b1b); alfa sürümünde active, hover'dan DAHA AÇIK oluyordu.
942
+ // `--destructive` token'ına ve resting sınıfına DOKUNULMADI (#442).
943
+ //
944
+ // ⚠️ `dark:hover:`/`dark:active:` ikizleri öneksiziyle aynı değeri taşısa da
945
+ // KALDIRILAMAZ — `dark:bg-error-600` (resting, farklı değer) hâlâ gerekli ve
946
+ // Tailwind 3.4.17 `dark:`i `hover:`ten SONRA yazıyor (aynı özgüllük, 0,2,0):
947
+ // .hover\:bg-error-700:hover < .dark\:bg-error-600:is(.dark *)
948
+ // Öneki atarsak koyu temada hover, resting rengine geri düşer. `dark:hover:`
949
+ // (0,3,0) bu sıralamayı yener. Bu, Dal 1'deki "gereksiz tekrar"dan farklıdır:
950
+ // burada satırın ÖLÇÜLEBİLİR bir işlevi var.
828
951
  destructive: [
829
952
  "bg-destructive text-destructive-foreground",
830
- "dark:bg-error-600 dark:text-destructive-foreground",
831
- "hover:bg-destructive/90 dark:hover:bg-error-700",
832
- "active:bg-destructive/80 dark:active:bg-error-800",
953
+ "dark:bg-error-600",
954
+ "hover:bg-error-700 dark:hover:bg-error-700",
955
+ "active:bg-error-800 dark:active:bg-error-800",
833
956
  "shadow-sm hover:shadow-md",
834
957
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
835
958
  "transition-all duration-200"
@@ -840,10 +963,38 @@ var buttonVariants = cva(
840
963
  // dokunulmadı (#442 kuralı: geçen yüzeyde regresyon riski açma).
841
964
  // Dolgu opak `success` skalasına bağlandı: -600 hâlâ 3.15, ölçümle geçen
842
965
  // en açık kademe -700 (4.79).
966
+ // #715 Dal 1: `dark:text-success-foreground` gereksiz tekrardı (aynı token,
967
+ // `.dark` bloğunda tanımlı) → kaldırıldı. `dark:bg-success-700` FARKLI bir
968
+ // değere işaret ettiği için KALDI.
969
+ //
970
+ // #715 Dal 3 — AÇIK temanın hover/active alfası da AA altındaydı
971
+ // (metin sabit `--success-foreground` #f8fafc, zemin beyaz):
972
+ // resting bg-success #12823b → 4.69 ✓ (#442 → DOKUNULMADI)
973
+ // hover bg-success/90 #2a8f4f → 3.90 ✗
974
+ // active bg-success/80 #419b62 → 3.30 ✗
975
+ // Burada `destructive`in çözümü AYNEN geçerli, çünkü `--success-NNN`
976
+ // skalası `--success` ile AYNI hue'da (#15803d ↔ #12823b) — `primary`den
977
+ // ayrıldığı nokta tam da bu. Açık dal, KOYU dalın zaten kullandığı
978
+ // kademelere bağlandı (tek kaynak, tutarlı ilerleme):
979
+ // hover bg-success-800 #166534 → 6.81 ✓
980
+ // active bg-success-900 #14532d → 8.71 ✓
981
+ // -700 (4.79) BİLEREK seçilmedi: hem eşiğe fazla yakın hem de `bg-success`
982
+ // ile neredeyse aynı renk (#15803d ↔ #12823b) — hover geri bildirimi
983
+ // görünmez olurdu.
984
+ //
985
+ // ⚠️ `dark:hover:`/`dark:active:` ikizleri artık öneksiziyle AYNI değeri
986
+ // taşıyor ama KALDIRILAMAZ — `destructive`teki sıralama guard'ının aynısı.
987
+ // Tailwind 3.4.17 çıktısı (deterministik CLI probe'uyla doğrulandı) `dark:`i
988
+ // `hover:`ten SONRA yazıyor ve ikisi de (0,2,0):
989
+ // .hover\:bg-success-800:hover < .dark\:bg-success-700:is(.dark *)
990
+ // `dark:hover:` (0,3,0) bu sıralamayı yener. GERÇEK TARAYICIDA KANITLANDI:
991
+ // guard'sız ikinci bir buton üretilip koyu temada hover'landığında zemin
992
+ // rgb(21,128,61)'de KALDI (= resting/-700, hover HİÇ uygulanmadı);
993
+ // guard'lı buton rgb(22,101,52)'ye (-800) geçti.
843
994
  "bg-success text-success-foreground",
844
- "dark:bg-success-700 dark:text-success-foreground",
845
- "hover:bg-success/90 dark:hover:bg-success-800",
846
- "active:bg-success/80 dark:active:bg-success-900",
995
+ "dark:bg-success-700",
996
+ "hover:bg-success-800 dark:hover:bg-success-800",
997
+ "active:bg-success-900 dark:active:bg-success-900",
847
998
  "shadow-sm hover:shadow-md",
848
999
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
849
1000
  "transition-all duration-200"
@@ -893,7 +1044,10 @@ var buttonVariants = cva(
893
1044
  // üretiyor, `--primary-foreground` ise koyu — ikisi birbirini yiyordu.
894
1045
  // #354'ün sidebar'da kanıtlanmış çözümü: subtle token ÇİFTİ (zemin+metin
895
1046
  // birlikte tanımlı, koyu temada koyu zemin + açık metin).
896
- "dark:bg-primary-subtle dark:text-primary-subtle-foreground",
1047
+ // #715 Dal 1: bu çift ARTIK yukarıdaki öneksiz satırdan geliyor —
1048
+ // `dark:bg-primary-subtle dark:text-primary-subtle-foreground` aynı token'ın
1049
+ // tekrarıydı, kaldırıldı (#686'nın çözümü aynen KORUNUYOR, yalnız tek
1050
+ // yerden yazılıyor). Hover/active dalları FARKLI alfa taşıdığı için KALDI.
897
1051
  "dark:hover:bg-primary/30 dark:active:bg-primary/40",
898
1052
  "transition-colors duration-200"
899
1053
  ],
@@ -6645,9 +6799,9 @@ var SelectItem = React12.forwardRef(({ className, children, variant = "default",
6645
6799
  /* Color variants */
6646
6800
  variant === "default" && "focus:bg-accent focus:text-accent-foreground dark:focus:bg-gray-700 dark:focus:text-gray-100",
6647
6801
  variant === "subtle" && "focus:bg-gray-100 dark:focus:bg-gray-800 focus:text-foreground dark:focus:text-gray-200",
6648
- variant === "destructive" && "text-error dark:text-red-400 focus:bg-error/10 dark:focus:bg-red-900/20 focus:text-error dark:focus:text-red-300",
6649
- variant === "success" && "text-success focus:bg-success/10 focus:text-success",
6650
- variant === "warning" && "text-warning-700 dark:text-warning-500 focus:bg-warning/10 focus:text-warning-700 dark:focus:text-warning-500",
6802
+ variant === "destructive" && "text-destructive-subtle-foreground focus:bg-destructive-subtle focus:text-destructive-subtle-foreground",
6803
+ variant === "success" && "text-success-subtle-foreground focus:bg-success-subtle focus:text-success-subtle-foreground",
6804
+ variant === "warning" && "text-warning-subtle-foreground focus:bg-warning-subtle focus:text-warning-subtle-foreground",
6651
6805
  className
6652
6806
  ),
6653
6807
  ...props,