@moontra/moonui 6.22.0 → 6.24.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.
@@ -44,11 +44,27 @@ const badgeVariants = cva(
44
44
  "focus-visible:ring-gray-400/30 dark:focus-visible:ring-gray-500/40",
45
45
  "dark:text-gray-100 dark:bg-transparent dark:backdrop-blur-sm",
46
46
  ],
47
+ // #544: `bg-error` (= --error, #ef4343) beyaz metinle 3.78 veriyordu (AA 4.5 ister),
48
+ // `dark:bg-error/90` ise gerçek koyu kart (#111827) üstünde 4.43 ile kalıyordu.
49
+ //
50
+ // TOKEN DEĞİŞTİRİLMEDİ: dark `--destructive`/`--error` METİN rolü için bilerek
51
+ // açık tutuluyor (tokens.css:518-526); değeri koyulaştırmak `text-destructive`
52
+ // yazan yüzleri kırardı ve dark-token-contrast.test.ts'in belgelediği uzlaşmayı
53
+ // bozardı. Bunun yerine #424/#442/#454'ün presedansı uygulandı: token'a değil
54
+ // VARYANTA dokunulup skalanın bir kademesine inildi.
55
+ //
56
+ // `-600` ölçümle seçildi — AA'yı geçen EN AÇIK kademe (beyazla 4.83; -500 3.76 ✗)
57
+ // ve bugünkü kırmızıya EN YAKIN aday (ΔE*ab 10.3; -700 → 16.2, `--destructive`
58
+ // light → 18.8). Hue 0° korunur, "uyarı kırmızısı" kimliği kaybolmaz.
59
+ //
60
+ // Skala kademeleri tema-BAĞIMSIZ (`.dark` onları ezmez) → tek sınıf iki temayı
61
+ // birden kapatır ve eski YARI SAYDAM `dark:bg-error/90`ın zemine bağımlılığı
62
+ // ortadan kalkar. Hover koyulaşır (-700, 6.47), açılmaz.
47
63
  destructive: [
48
- "border-transparent bg-error text-white",
49
- "hover:bg-error/90 dark:hover:bg-error/80",
64
+ "border-transparent bg-error-600 text-white",
65
+ "hover:bg-error-700 dark:hover:bg-error-700",
50
66
  "focus-visible:ring-error/30 dark:focus-visible:ring-error/25",
51
- "dark:bg-error/90 dark:text-white dark:shadow-inner dark:shadow-error/10",
67
+ "dark:text-white dark:shadow-inner dark:shadow-error/10",
52
68
  ],
53
69
  success: [
54
70
  "border-transparent bg-success text-success-foreground",
@@ -67,11 +67,20 @@ const buttonVariants = cva(
67
67
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
68
68
  "transition-all duration-200",
69
69
  ],
70
+ // #544: AÇIK tema zaten geçiyordu (`--destructive` light = #e11313, foreground
71
+ // #f8fafc ile 4.66) — #442'nin kuralı gereği DOKUNULMADI, regresyon yüzeyi sıfır.
72
+ // Kırık olan yalnız KOYU temaydı: dark `--destructive` = #ef4343 metin rolü için
73
+ // bilerek açık bırakılmış bir değer (tokens.css:518-526) ve dolgu rolünde
74
+ // foreground'la 3.61 veriyor. Token'a dokunmadan dark dolgusu opak `error`
75
+ // skalasına bağlandı (-600 → 4.62; ölçümle seçilen en açık geçen kademe).
76
+ // Not: `dark:bg-destructive` KALDIRILDI, yanına eklenmedi — iki `dark:bg-*`
77
+ // utility'si aynı anda yazılırsa hangisinin kazanacağını sınıf dizgesi sırası
78
+ // DEĞİL Tailwind'in kendi iç sıralaması belirler.
70
79
  destructive: [
71
80
  "bg-destructive text-destructive-foreground",
72
- "dark:bg-destructive dark:text-destructive-foreground",
73
- "hover:bg-destructive/90 dark:hover:bg-destructive/90",
74
- "active:bg-destructive/80 dark:active:bg-destructive/80",
81
+ "dark:bg-error-600 dark:text-destructive-foreground",
82
+ "hover:bg-destructive/90 dark:hover:bg-error-700",
83
+ "active:bg-destructive/80 dark:active:bg-error-800",
75
84
  "shadow-sm hover:shadow-md",
76
85
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
77
86
  "transition-all duration-200",
@@ -4,7 +4,11 @@ import type { Meta, StoryObj } from '@storybook/react';
4
4
  import { Input } from './input';
5
5
  import { Label } from './label';
6
6
  import { Button } from './button';
7
- import { Search, Mail, Lock, Eye, EyeOff } from 'lucide-react';
7
+ /* `Search` ikonu takma adla alinir: asagida ayni adla bir story export ediliyor
8
+ * (`export const Search: Story`). Cakisma yalnizca tip hatasi degildi — satir 99'daki
9
+ * `<Search />` ikonu degil STORY NESNESINI cozuyordu, yani o story calistirilinca
10
+ * patlardi. Story adi Storybook arayuzunde gorundugu icin ikon yeniden adlandirildi. */
11
+ import { Search as SearchIcon, Mail, Lock, Eye, EyeOff } from 'lucide-react';
8
12
  import { useState } from 'react';
9
13
 
10
14
  const meta: Meta<typeof Input> = {
@@ -96,7 +100,7 @@ export const Disabled: Story = {
96
100
  export const WithIcon: Story = {
97
101
  render: () => (
98
102
  <div className="relative">
99
- <Search className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
103
+ <SearchIcon className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
100
104
  <Input
101
105
  type="search"
102
106
  placeholder="Search..."
@@ -104,18 +104,77 @@ module.exports = {
104
104
  subtle: "hsl(var(--destructive-subtle) / <alpha-value>)",
105
105
  "subtle-foreground": "hsl(var(--destructive-subtle-foreground) / <alpha-value>)",
106
106
  },
107
- error: "hsl(var(--error) / <alpha-value>)",
107
+ /* #524: durum ailelerine 50-950 SKALASI baglandi.
108
+ *
109
+ * NEDEN: `tokens.css:41-75` bu skalalari (`--success-50..950`, `--warning-*`,
110
+ * `--error-*`) UZUN ZAMANDIR tanimliyordu ama preset onlari hicbir utility'ye
111
+ * BAGLAMAMISTI — yani `text-success-700` gecersiz bir sinifti ve sessizce
112
+ * hicbir CSS uretmiyordu. Dort Pro component (performance-monitor,
113
+ * performance-debugger, health-check, memory-efficient-data) bu yuzden ham
114
+ * Tailwind literaline (`text-green-500`) dusmus, acik temada 2.08-2.27:1
115
+ * kontrast uretiyordu (gerekli 4.5:1).
116
+ *
117
+ * NEDEN DUZ TOKEN YETMEDI: issue'nun onerdigi `text-warning` / `text-error`
118
+ * eslemesi olculdu ve beyaz zeminde AA'yi GECMIYOR (2.13 ve 3.78). Skala
119
+ * tonlari geciyor: -700 acik temada 5.02 / 4.92 / 6.47, -400 koyu zeminde
120
+ * 11.56 / 13.16 / 7.28.
121
+ *
122
+ * ⚠️ rgb(), hsl() DEGIL: bu skalalarin tokens.css'teki degeri RGB uclusudur
123
+ * ("--success-700: 21 128 61"), yukaridaki DEFAULT/subtle girdileri ise HSL.
124
+ * Bloklardaki mevcut hsl() desenini bu satirlara kopyalamak SESSIZCE yanlis
125
+ * renk uretir (hsl(21 128 61) gecerli bir renktir — 21° hue, kirmizimsi).
126
+ * Bekci: packages/moonui-pro/src/__tests__/issue-524-durum-renkleri.test.tsx
127
+ * (Tailwind'i gercekten kosturup uretilen CSS'i olcer).
128
+ *
129
+ * ⚠️ `.dark` blogu bu tonlari OVERRIDE ETMEZ — tek ton iki temada da ayni
130
+ * hex'i verir. Tuketici koyu tema icin `dark:` ikizini ACIKCA yazmalidir. */
131
+ error: {
132
+ DEFAULT: "hsl(var(--error) / <alpha-value>)",
133
+ 50: "rgb(var(--error-50) / <alpha-value>)",
134
+ 100: "rgb(var(--error-100) / <alpha-value>)",
135
+ 200: "rgb(var(--error-200) / <alpha-value>)",
136
+ 300: "rgb(var(--error-300) / <alpha-value>)",
137
+ 400: "rgb(var(--error-400) / <alpha-value>)",
138
+ 500: "rgb(var(--error-500) / <alpha-value>)",
139
+ 600: "rgb(var(--error-600) / <alpha-value>)",
140
+ 700: "rgb(var(--error-700) / <alpha-value>)",
141
+ 800: "rgb(var(--error-800) / <alpha-value>)",
142
+ 900: "rgb(var(--error-900) / <alpha-value>)",
143
+ 950: "rgb(var(--error-950) / <alpha-value>)",
144
+ },
108
145
  success: {
109
146
  DEFAULT: "hsl(var(--success) / <alpha-value>)",
110
147
  foreground: "hsl(var(--success-foreground) / <alpha-value>)",
111
148
  subtle: "hsl(var(--success-subtle) / <alpha-value>)",
112
149
  "subtle-foreground": "hsl(var(--success-subtle-foreground) / <alpha-value>)",
150
+ 50: "rgb(var(--success-50) / <alpha-value>)",
151
+ 100: "rgb(var(--success-100) / <alpha-value>)",
152
+ 200: "rgb(var(--success-200) / <alpha-value>)",
153
+ 300: "rgb(var(--success-300) / <alpha-value>)",
154
+ 400: "rgb(var(--success-400) / <alpha-value>)",
155
+ 500: "rgb(var(--success-500) / <alpha-value>)",
156
+ 600: "rgb(var(--success-600) / <alpha-value>)",
157
+ 700: "rgb(var(--success-700) / <alpha-value>)",
158
+ 800: "rgb(var(--success-800) / <alpha-value>)",
159
+ 900: "rgb(var(--success-900) / <alpha-value>)",
160
+ 950: "rgb(var(--success-950) / <alpha-value>)",
113
161
  },
114
162
  warning: {
115
163
  DEFAULT: "hsl(var(--warning) / <alpha-value>)",
116
164
  foreground: "hsl(var(--warning-foreground) / <alpha-value>)",
117
165
  subtle: "hsl(var(--warning-subtle) / <alpha-value>)",
118
166
  "subtle-foreground": "hsl(var(--warning-subtle-foreground) / <alpha-value>)",
167
+ 50: "rgb(var(--warning-50) / <alpha-value>)",
168
+ 100: "rgb(var(--warning-100) / <alpha-value>)",
169
+ 200: "rgb(var(--warning-200) / <alpha-value>)",
170
+ 300: "rgb(var(--warning-300) / <alpha-value>)",
171
+ 400: "rgb(var(--warning-400) / <alpha-value>)",
172
+ 500: "rgb(var(--warning-500) / <alpha-value>)",
173
+ 600: "rgb(var(--warning-600) / <alpha-value>)",
174
+ 700: "rgb(var(--warning-700) / <alpha-value>)",
175
+ 800: "rgb(var(--warning-800) / <alpha-value>)",
176
+ 900: "rgb(var(--warning-900) / <alpha-value>)",
177
+ 950: "rgb(var(--warning-950) / <alpha-value>)",
119
178
  },
120
179
  caution: {
121
180
  DEFAULT: "hsl(var(--caution) / <alpha-value>)",