@moontra/moonui 6.19.0 → 6.19.2
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.js +185 -38
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +185 -38
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/ui/__tests__/progress-warning-error-contrast.test.ts +331 -0
- package/src/components/ui/__tests__/progress.test.tsx +9 -2
- package/src/components/ui/__tests__/slider-accent-contrast.test.ts +553 -0
- package/src/components/ui/__tests__/slider-warning-error-contrast.test.ts +478 -0
- package/src/components/ui/__tests__/slider.test.tsx +12 -4
- package/src/components/ui/__tests__/switch-variant-contrast.test.tsx +460 -0
- package/src/components/ui/__tests__/switch.test.tsx +11 -2
- package/src/components/ui/__tests__/table.test.tsx +222 -8
- package/src/components/ui/progress.tsx +25 -2
- package/src/components/ui/slider.tsx +92 -6
- package/src/components/ui/switch.tsx +44 -5
- package/src/components/ui/table.tsx +88 -43
package/dist/index.mjs
CHANGED
|
@@ -2548,10 +2548,70 @@ var sliderRangeVariants = cva(
|
|
|
2548
2548
|
// tüketici --secondary-500'ü ezerek özelleştirebilir.
|
|
2549
2549
|
// Regresyon: __tests__/slider-secondary-contrast.test.ts
|
|
2550
2550
|
secondary: "bg-[rgb(var(--secondary-500))]",
|
|
2551
|
-
accent:
|
|
2551
|
+
// #448 (#389/#407'nin `accent` kardeşi — ama ÇÖZÜM SINIFI farklı): range
|
|
2552
|
+
// `bg-accent`, track `bg-accent/20` idi — aynı yüzey token'ının iki alfası.
|
|
2553
|
+
// `--accent` HER İKİ temada da kusurluydu (warning/error'dan ağır: onlar
|
|
2554
|
+
// yalnız light'ta kusurluydu): A ekseni light 1.123 · dark 1.303 · gerçek
|
|
2555
|
+
// docs kartı (#111827) 1.162. Eşik 3:1 (WCAG 1.4.11 non-text).
|
|
2556
|
+
//
|
|
2557
|
+
// KÖK NEDEN: `--accent` bir YÜZEY token'ı — `hover:bg-accent` tinti olarak
|
|
2558
|
+
// tasarlanmış ve iki temada da kendi zeminine BİTİŞİK duruyor (light
|
|
2559
|
+
// rgb(235,239,245) beyaz üstünde, dark rgb(29,40,58) rgb(3,7,17) üstünde).
|
|
2560
|
+
// Dolgu/kenarlık rolüne yapısal olarak uygun değil; bu yüzden track'i
|
|
2561
|
+
// değiştirerek onarmak da MÜMKÜN DEĞİL (light'ta accent'ten 3:1 uzakta
|
|
2562
|
+
// duran daha açık bir yüzey yok).
|
|
2563
|
+
//
|
|
2564
|
+
// #389'un tek-orta-ton kademe araması AYNEN uygulanamadı: tokens.css'te
|
|
2565
|
+
// `--accent-50 … --accent-950` skalası YOK (skalası olan aileler:
|
|
2566
|
+
// primary/secondary/success/warning/error/brand/brand-accent).
|
|
2567
|
+
// `bg-accent-foreground` de elendi — `--accent-foreground` iki temada da
|
|
2568
|
+
// `--primary` ile BİREBİR aynı değer (varyant primary klonuna dönerdi) ve
|
|
2569
|
+
// 7 tema preset'inin 2'sinde beyaz (Creative/Nature), yani tek başına
|
|
2570
|
+
// dolgu olamaz.
|
|
2571
|
+
//
|
|
2572
|
+
// ÇÖZÜM: sistemin TEK nötr skalası olan slate (`--secondary-*`) — `--accent`
|
|
2573
|
+
// ile aynı hue ailesi (216° ↔ 215°), üstelik light temada `--accent` ile
|
|
2574
|
+
// `--secondary` BİREBİR aynı token değerini taşıyor. Tema-kör tek kademe
|
|
2575
|
+
// SEÇİLEMEDİ: bu ailede iki temayı birden geçen tek kademe 500'dür, o da
|
|
2576
|
+
// `secondary` varyantının kendi rengi (ΔE*ab = 0.0 — iki varyant klon olurdu).
|
|
2577
|
+
// Bu yüzden #442'nin `dark:` ayrımı deseni kullanıldı, tema başına ayrı kademe.
|
|
2578
|
+
// Tam tarama (11 kademe × 2 tema × 3 zemin × 2 eksen): DARK'ta eşiği geçen VE
|
|
2579
|
+
// kardeş varyantlardan ayırt edilebilen (ΔE*ab ≥ 10) TEK kademe 400
|
|
2580
|
+
// (500 = secondary klonu · ≤300 `default`/`primary` ile çakışıyor · ≥600 eşiğin
|
|
2581
|
+
// altında). LIGHT'ta {600,700,800} uygun; 700 kardeş ayrımını maksimize eder
|
|
2582
|
+
// (ΔE 21.2 · 600→12.7 · 800→14.9).
|
|
2583
|
+
// Ölçülen — A: light 1.123 → 10.081 ✓ · dark 1.303 → 7.533 ✓ · docs kartı
|
|
2584
|
+
// 1.162 → 6.717 ✓. Track `bg-accent/20` DEĞİŞMEDİ (yedi varyantın ortak deseni).
|
|
2585
|
+
// Regresyon: __tests__/slider-accent-contrast.test.ts
|
|
2586
|
+
accent: "bg-[rgb(var(--secondary-700))] dark:bg-[rgb(var(--secondary-400))]",
|
|
2552
2587
|
success: "bg-success",
|
|
2553
|
-
|
|
2554
|
-
|
|
2588
|
+
// #442 (#424/PR #440'ın slider ikizi): range `bg-warning`/`bg-error` idi —
|
|
2589
|
+
// track (`bg-warning/20` · `bg-error/20`) AYNI token'ın alfalı hâli olduğundan
|
|
2590
|
+
// LIGHT temada ayrım kayboluyordu: warning 1.835 · error 2.893 (eşik 3:1,
|
|
2591
|
+
// WCAG 1.4.11 non-text). DARK tema zaten temizdi (warning 6.97 · error 4.46).
|
|
2592
|
+
//
|
|
2593
|
+
// KÖK NEDEN: `--warning` ve `--error` tokens.css'in `.dark` bloğunda
|
|
2594
|
+
// EZİLMİYOR — iki temada aynı renk. Kardeşleri tema-uyarlanabilir olduğu
|
|
2595
|
+
// için geçiyor (`--success` light %29 → dark %36; ölçüm: success A ekseni
|
|
2596
|
+
// light 3.73 / dark 4.83). Bu iki aile o uyarlamadan yoksun.
|
|
2597
|
+
//
|
|
2598
|
+
// ÇÖZÜM: eksik tema-uyarlamasını component düzeyinde ver — light'ta skalanın
|
|
2599
|
+
// -700 kademesine in, dark'ta semantik token'a DOKUNMA (dark render bit-bit
|
|
2600
|
+
// aynı kalır, regresyon yüzeyi sıfır). Tema-KÖR bir -700 ataması dark'ı
|
|
2601
|
+
// kırardı: gerçek docs kartı (#111827) üstünde warning 2.499 ✗ · error 2.232 ✗.
|
|
2602
|
+
// Tam skala taraması (11 kademe × 2 aile × 3 zemin × 2 tema) track `/20` iken
|
|
2603
|
+
// iki temayı birden geçen kademe kümesini BOŞ buluyor → `dark:` ayrımı ZORUNLU;
|
|
2604
|
+
// #389'un tek-orta-ton (`--secondary-500`) çözümü burada uygulanamaz, çünkü
|
|
2605
|
+
// orada `--secondary` temaya göre değişiyordu. Aynı `dark:` deseni badge.tsx:51-63
|
|
2606
|
+
// ve progress.tsx:110-111'de zaten kullanılıyor.
|
|
2607
|
+
// Ölçülen sonuç — warning: light 1.835 → 4.235 ✓ · error: light 2.893 → 4.950 ✓
|
|
2608
|
+
// (dark değişmedi: 6.97 / 4.46; docs kartı 5.77 / 3.82).
|
|
2609
|
+
// Skala token'ları RGB üçlüsüdür (semantiklerin HSL'inden farklı) →
|
|
2610
|
+
// `rgb(var(--x-700))` kompozisyonu; `bg-warning-700` YAZILMADI, preset bu
|
|
2611
|
+
// ailelere sayısal skala açmıyor (#307 ölü-sınıf tuzağı).
|
|
2612
|
+
// Regresyon: __tests__/slider-warning-error-contrast.test.ts
|
|
2613
|
+
warning: "bg-[rgb(var(--warning-700))] dark:bg-warning",
|
|
2614
|
+
error: "bg-[rgb(var(--error-700))] dark:bg-error"
|
|
2555
2615
|
}
|
|
2556
2616
|
},
|
|
2557
2617
|
defaultVariants: {
|
|
@@ -2578,10 +2638,36 @@ var sliderThumbVariants = cva(
|
|
|
2578
2638
|
// aynı kademe: tutamaç ve dolgu tek renkte okunur.
|
|
2579
2639
|
// Regresyon: __tests__/slider-secondary-contrast.test.ts
|
|
2580
2640
|
secondary: "border-[rgb(var(--secondary-500))] bg-background",
|
|
2581
|
-
|
|
2641
|
+
// #448 EKSEN B (range'den FARKLI eksen: bileşen↔sayfa-zemini) — tutamacın
|
|
2642
|
+
// dolgusu `bg-background`, yani zeminin kendisi; ayırt edilebilirliğini
|
|
2643
|
+
// YALNIZ kenarlık taşır → non-text UI bileşeni, WCAG 1.4.11 ≥3:1.
|
|
2644
|
+
// `border-accent` iki temada da kayboluyordu: light 1.154 · dark 1.359 ·
|
|
2645
|
+
// gerçek docs kartı 1.197. Range ile AYNI kademeler seçildi — #407'nin
|
|
2646
|
+
// gerekçesi burada da geçerli: "tutamaç ve dolgu tek renkte okunur".
|
|
2647
|
+
// Ölçülen — light 1.154 → 10.355 ✓ · dark 1.359 → 7.857 ✓ · docs kartı
|
|
2648
|
+
// 1.197 → 6.919 ✓.
|
|
2649
|
+
// Regresyon: __tests__/slider-accent-contrast.test.ts
|
|
2650
|
+
accent: "border-[rgb(var(--secondary-700))] dark:border-[rgb(var(--secondary-400))] bg-background",
|
|
2582
2651
|
success: "border-success bg-background",
|
|
2583
|
-
|
|
2584
|
-
|
|
2652
|
+
// #442 EKSEN B (range'den FARKLI eksen: bileşen↔sayfa-zemini) — #407'de
|
|
2653
|
+
// `secondary` için açılan eksenin warning/error karşılığı. Tutamacın dolgusu
|
|
2654
|
+
// `bg-background`, yani zeminin kendisi; ayırt edilebilirliği YALNIZ kenarlık
|
|
2655
|
+
// taşır → non-text UI bileşeni, WCAG 1.4.11 ≥3:1.
|
|
2656
|
+
// ÖLÇÜLEN (eski değerler): warning light **2.133 ✗** · error light 3.781 ✓;
|
|
2657
|
+
// dark ikisi de rahat geçiyordu (9.45 / 5.33).
|
|
2658
|
+
//
|
|
2659
|
+
// `warning` KUSURLUYDU, düzeltildi. `error` bu eksende zaten geçiyordu ama
|
|
2660
|
+
// yine de aynı ifadeye çekildi: range light'ta -700'e indiği için kenarlık
|
|
2661
|
+
// `border-error`da bırakılsaydı LIGHT temada dolgu rgb(185,28,28), tutamaç
|
|
2662
|
+
// rgb(239,67,67) olurdu — düzeltmenin KENDİSİ iki-tonlu bir görünüm üretirdi.
|
|
2663
|
+
// #407'nin gerekçesi birebir geçerli: "tutamaç ve dolgu tek renkte okunur".
|
|
2664
|
+
// Değişim kontrastı düşürmüyor, artırıyor: error light 3.781 → 6.470.
|
|
2665
|
+
// Dark'ta `dark:border-*` semantik token'ı koruduğu için render bit-bit aynı.
|
|
2666
|
+
// Ölçülen sonuç — warning: light 2.133 → 4.923 ✓ · error: light 3.781 → 6.470 ✓
|
|
2667
|
+
// (dark değişmedi: 9.45 / 5.33; docs kartı 8.32 / 4.69).
|
|
2668
|
+
// Regresyon: __tests__/slider-warning-error-contrast.test.ts
|
|
2669
|
+
warning: "border-[rgb(var(--warning-700))] dark:border-warning bg-background",
|
|
2670
|
+
error: "border-[rgb(var(--error-700))] dark:border-error bg-background"
|
|
2585
2671
|
},
|
|
2586
2672
|
size: {
|
|
2587
2673
|
sm: "h-3 w-3",
|
|
@@ -3773,6 +3859,8 @@ var CommandShortcut = ({
|
|
|
3773
3859
|
};
|
|
3774
3860
|
CommandShortcut.displayName = "CommandShortcut";
|
|
3775
3861
|
var TableSortContext = React12.createContext(null);
|
|
3862
|
+
var TableStripedContext = React12.createContext(false);
|
|
3863
|
+
var STRIPED_ROW_CLASSES = "odd:bg-muted/50 hover:bg-accent";
|
|
3776
3864
|
function nextSortDirection(current) {
|
|
3777
3865
|
if (current === "asc")
|
|
3778
3866
|
return "desc";
|
|
@@ -3825,6 +3913,7 @@ var Table = React12.forwardRef(({
|
|
|
3825
3913
|
onRowSelectionChange: _onRowSelectionChange,
|
|
3826
3914
|
disableRowSelection: _disableRowSelection,
|
|
3827
3915
|
getRowId: _getRowId,
|
|
3916
|
+
children,
|
|
3828
3917
|
...props
|
|
3829
3918
|
}, ref) => {
|
|
3830
3919
|
const striped = variant === "striped";
|
|
@@ -3832,20 +3921,9 @@ var Table = React12.forwardRef(({
|
|
|
3832
3921
|
() => ({ sortColumn, sortDirection, onSortChange }),
|
|
3833
3922
|
[sortColumn, sortDirection, onSortChange]
|
|
3834
3923
|
);
|
|
3835
|
-
const childrenWithProps = React12.Children.map(props.children, (child) => {
|
|
3836
|
-
if (React12.isValidElement(child)) {
|
|
3837
|
-
if (child.type === "tbody") {
|
|
3838
|
-
const tbodyProps = child.props;
|
|
3839
|
-
return React12.cloneElement(child, {
|
|
3840
|
-
className: cn(tbodyProps.className, striped && "even:[&>tr]:bg-muted/50")
|
|
3841
|
-
});
|
|
3842
|
-
}
|
|
3843
|
-
}
|
|
3844
|
-
return child;
|
|
3845
|
-
});
|
|
3846
3924
|
return /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-auto", children: [
|
|
3847
3925
|
loading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-background/60 flex items-center justify-center z-10", children: /* @__PURE__ */ jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }),
|
|
3848
|
-
/* @__PURE__ */ jsx(TableSortContext.Provider, { value: sortContextValue, children: /* @__PURE__ */ jsx(
|
|
3926
|
+
/* @__PURE__ */ jsx(TableSortContext.Provider, { value: sortContextValue, children: /* @__PURE__ */ jsx(TableStripedContext.Provider, { value: striped, children: /* @__PURE__ */ jsx(
|
|
3849
3927
|
"table",
|
|
3850
3928
|
{
|
|
3851
3929
|
ref,
|
|
@@ -3855,13 +3933,13 @@ var Table = React12.forwardRef(({
|
|
|
3855
3933
|
className
|
|
3856
3934
|
),
|
|
3857
3935
|
...props,
|
|
3858
|
-
children
|
|
3936
|
+
children
|
|
3859
3937
|
}
|
|
3860
|
-
) })
|
|
3938
|
+
) }) })
|
|
3861
3939
|
] });
|
|
3862
3940
|
});
|
|
3863
3941
|
Table.displayName = "Table";
|
|
3864
|
-
var TableHeader = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("moonui-theme", "[&_tr]:border-b", className), ...props }));
|
|
3942
|
+
var TableHeader = React12.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("moonui-theme", "[&_tr]:border-b", className), ...props, children: /* @__PURE__ */ jsx(TableStripedContext.Provider, { value: false, children }) }));
|
|
3865
3943
|
TableHeader.displayName = "TableHeader";
|
|
3866
3944
|
var TableBody = React12.forwardRef(({ className, emptyContent, emptyMessage = "No data available", children, ...props }, ref) => {
|
|
3867
3945
|
const hasChildren = React12.Children.count(children) > 0;
|
|
@@ -3876,26 +3954,31 @@ var TableBody = React12.forwardRef(({ className, emptyContent, emptyMessage = "N
|
|
|
3876
3954
|
);
|
|
3877
3955
|
});
|
|
3878
3956
|
TableBody.displayName = "TableBody";
|
|
3879
|
-
var TableFooter = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3957
|
+
var TableFooter = React12.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
3880
3958
|
"tfoot",
|
|
3881
3959
|
{
|
|
3882
3960
|
ref,
|
|
3883
3961
|
className: cn("moonui-theme", "bg-primary text-primary-foreground font-medium", className),
|
|
3884
|
-
...props
|
|
3962
|
+
...props,
|
|
3963
|
+
children: /* @__PURE__ */ jsx(TableStripedContext.Provider, { value: false, children })
|
|
3885
3964
|
}
|
|
3886
3965
|
));
|
|
3887
3966
|
TableFooter.displayName = "TableFooter";
|
|
3888
|
-
var TableRow = React12.forwardRef(({ className, ...props }, ref) =>
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
className
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
)
|
|
3967
|
+
var TableRow = React12.forwardRef(({ className, ...props }, ref) => {
|
|
3968
|
+
const striped = React12.useContext(TableStripedContext);
|
|
3969
|
+
return /* @__PURE__ */ jsx(
|
|
3970
|
+
"tr",
|
|
3971
|
+
{
|
|
3972
|
+
ref,
|
|
3973
|
+
className: cn(
|
|
3974
|
+
"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
|
|
3975
|
+
striped && STRIPED_ROW_CLASSES,
|
|
3976
|
+
className
|
|
3977
|
+
),
|
|
3978
|
+
...props
|
|
3979
|
+
}
|
|
3980
|
+
);
|
|
3981
|
+
});
|
|
3899
3982
|
TableRow.displayName = "TableRow";
|
|
3900
3983
|
var TableHead = React12.forwardRef(
|
|
3901
3984
|
({ className, sortable, sorted, onSort, columnId, align = "left", children, ...props }, ref) => {
|
|
@@ -4910,8 +4993,31 @@ var progressIndicatorVariants = cva(
|
|
|
4910
4993
|
// Regresyon: __tests__/progress-secondary-contrast.test.ts
|
|
4911
4994
|
secondary: "bg-[rgb(var(--secondary-500))]",
|
|
4912
4995
|
success: "bg-success",
|
|
4913
|
-
|
|
4914
|
-
|
|
4996
|
+
// #424 (#372'nin kardeşi): dolgu `bg-warning`/`bg-error` idi — track
|
|
4997
|
+
// (`bg-warning/20` · `bg-error/20`) AYNI token'ın alfalı hâli olduğundan
|
|
4998
|
+
// LIGHT temada ayrım kayboluyordu: warning 1.83 · error 2.89 (eşik 3:1,
|
|
4999
|
+
// WCAG 1.4.11). DARK tema zaten temizdi (warning 6.97 · error 4.46).
|
|
5000
|
+
//
|
|
5001
|
+
// KÖK NEDEN: `--warning` ve `--error` tokens.css'te `.dark` bloğunda
|
|
5002
|
+
// EZİLMİYOR — iki temada aynı renk. Kardeşleri `--success` (light 29% →
|
|
5003
|
+
// dark 36%) ve `--primary` tema-uyarlanabilir olduğu için eşiği geçiyor;
|
|
5004
|
+
// bu iki aile o uyarlamadan yoksun kaldığı için light'ta kalıyor.
|
|
5005
|
+
//
|
|
5006
|
+
// ÇÖZÜM: eksik tema-uyarlamasını component düzeyinde ver — light'ta
|
|
5007
|
+
// skalanın -700 kademesine in, dark'ta semantik token'a DOKUNMA.
|
|
5008
|
+
// Tema-KÖR bir -700 ataması dark'ı kırardı (docs kartında warning 2.50 ✗
|
|
5009
|
+
// · error 2.23 ✗); `dark:` ayrımı tam olarak bunu önler ve dark render'ı
|
|
5010
|
+
// bit-bit aynı bırakır. Aynı desen badge.tsx:51-63'te zaten kullanılıyor.
|
|
5011
|
+
// Track alfaları BİLEREK `/20` kaldı: altı varyantın tamamı o konvansiyonu
|
|
5012
|
+
// paylaşıyor ve alfayı düşürmek track↔zemin ayrımını zayıflatırdı
|
|
5013
|
+
// (warning 1.162 → 1.081). Ölçülen sonuç — warning: light 4.24 ✓ /
|
|
5014
|
+
// dark 6.97 ✓ (docs kartı #111827: 5.77) · error: light 4.95 ✓ /
|
|
5015
|
+
// dark 4.46 ✓ (docs kartı 3.82). Skala token'ları RGB üçlüsüdür
|
|
5016
|
+
// (semantiklerin HSL'inden farklı) → `rgb(var(--x-700))` kompozisyonu;
|
|
5017
|
+
// `bg-warning-700` YAZILMADI, preset o sınıfı üretmez (#307 ölü-sınıf).
|
|
5018
|
+
// Regresyon: __tests__/progress-warning-error-contrast.test.ts
|
|
5019
|
+
warning: "bg-[rgb(var(--warning-700))] dark:bg-warning",
|
|
5020
|
+
error: "bg-[rgb(var(--error-700))] dark:bg-error"
|
|
4915
5021
|
},
|
|
4916
5022
|
animation: {
|
|
4917
5023
|
default: "transition-all duration-500",
|
|
@@ -8016,12 +8122,53 @@ var switchVariants = cva(
|
|
|
8016
8122
|
md: "h-6 w-11",
|
|
8017
8123
|
lg: "h-7 w-14"
|
|
8018
8124
|
},
|
|
8125
|
+
// #454 — checked track'in İKİ ekseni de ölçüldü (eşik 3:1, WCAG 1.4.11
|
|
8126
|
+
// non-text UI). Switch'te bu iki eksen AYNI sayıyı verir, çünkü thumb
|
|
8127
|
+
// `bg-background` taşır (switchThumbVariants tabanı):
|
|
8128
|
+
// A) checked track ↔ sayfa/kart zemini → kontrol "açık" okunuyor mu?
|
|
8129
|
+
// B) thumb ↔ checked track → tutamacın KONUMU görülüyor mu?
|
|
8130
|
+
// Ölçüm zeminleri: `--background` · `--card` · docs kabuğunun gerçek koyu
|
|
8131
|
+
// kartı (#111827). Regresyon: __tests__/switch-variant-contrast.test.tsx
|
|
8019
8132
|
variant: {
|
|
8020
8133
|
primary: "data-[state=checked]:bg-primary",
|
|
8134
|
+
// light 4.920 · dark 19.256 ✓
|
|
8021
8135
|
success: "data-[state=checked]:bg-success",
|
|
8022
|
-
|
|
8136
|
+
// light 4.904 · dark 6.043 ✓
|
|
8137
|
+
// #454 kardeş kusuru (#424/PR #440 progress · #442/PR #446 slider ile AYNI
|
|
8138
|
+
// sınıf, üçüncü component): `--warning` tokens.css'in `.dark` bloğunda
|
|
8139
|
+
// EZİLMİYOR, yani iki temada da aynı turuncu. Dark'ta zemin koyu olduğu
|
|
8140
|
+
// için geçiyor (9.446), LIGHT'ta beyaz üstünde 2.133 ✗ — açık temada
|
|
8141
|
+
// checked warning switch'in tutamacı da kayboluyordu (B ekseni 2.133).
|
|
8142
|
+
// ÇÖZÜM (emsalle birebir aynı şekil): eksik tema-uyarlamasını component
|
|
8143
|
+
// düzeyinde ver — light'ta skalanın -700 kademesine in, dark'ta semantik
|
|
8144
|
+
// token'a DOKUNMA (dark render bit-bit aynı kalır, regresyon yüzeyi sıfır).
|
|
8145
|
+
// Light'ta eşiği geçen kademe kümesi {700,800,900,950}; en açık olanı
|
|
8146
|
+
// seçildi (turuncu kimliğini en çok koruyan). Ölçülen: 2.133 → 4.923 ✓.
|
|
8147
|
+
warning: "data-[state=checked]:bg-[rgb(var(--warning-700))] dark:data-[state=checked]:bg-warning",
|
|
8023
8148
|
destructive: "data-[state=checked]:bg-error",
|
|
8024
|
-
|
|
8149
|
+
// light 3.781 · dark 5.328 ✓ (dokunulmadı)
|
|
8150
|
+
// #454 asıl kusuru: `secondary` varyantı `bg-accent` kullanıyordu — ADI
|
|
8151
|
+
// `secondary`, TOKEN'ı `accent`. `--accent` bir YÜZEY token'ı (`hover:bg-accent`
|
|
8152
|
+
// tinti) ve iki temada da kendi zeminine bitişik: light rgb(235,239,245)
|
|
8153
|
+
// beyaz üstünde 1.154 · dark rgb(29,40,58) 1.359 · docs kartı 1.197.
|
|
8154
|
+
// Yani checked switch hem sayfadan hem de kendi tutamacından ayrışmıyordu:
|
|
8155
|
+
// "açık" durum GÖRÜNMÜYORDU (switch'in tek işi durumu göstermek).
|
|
8156
|
+
//
|
|
8157
|
+
// AD ↔ TOKEN KARARI: varyant kendi ailesine, `--secondary-*` slate skalasına
|
|
8158
|
+
// bağlandı. `bg-secondary` (semantik) BİLEREK seçilmedi — light'ta `--accent`
|
|
8159
|
+
// ile BİREBİR aynı değer (1.154), dark'ta daha da kötü (1.007). Skala
|
|
8160
|
+
// taraması (11 kademe × 2 tema × 3 zemin × 2 eksen + kardeş ΔE*ab ≥ 10 klon
|
|
8161
|
+
// filtresi): light {500,600,700,800,900,950} · dark {300,400,500} → iki
|
|
8162
|
+
// temayı birden geçen TEK kademe **500**, yani `dark:` ayrımına gerek yok.
|
|
8163
|
+
// #448'in slider'daki 700/400 ayrımı burada GEREKMEZ ve İSTENMEZ: orada 500
|
|
8164
|
+
// elenmişti çünkü slider'ın `secondary` varyantı zaten o rengi kullanıyordu
|
|
8165
|
+
// (ΔE = 0.0 → klon). Switch'in `accent` adlı bir varyantı YOK, dolayısıyla
|
|
8166
|
+
// 500 serbest ve kardeşlerden ayrık (ΔE: primary 69.5/51.6 · success
|
|
8167
|
+
// 63.6/74.8 · warning 96.0 · destructive 85.0 — hepsi ≥ 10).
|
|
8168
|
+
// Yan fayda: slider'ın `secondary` varyantı da #389/PR #406'da aynı kademeye
|
|
8169
|
+
// sabitlenmişti → aynı varyant adı artık iki component'te aynı rengi veriyor.
|
|
8170
|
+
// Ölçülen: A/B light 1.154 → 4.759 ✓ · dark 1.359 → 4.234 ✓ · kart 1.197 → 3.728 ✓.
|
|
8171
|
+
secondary: "data-[state=checked]:bg-[rgb(var(--secondary-500))]"
|
|
8025
8172
|
}
|
|
8026
8173
|
},
|
|
8027
8174
|
defaultVariants: {
|