@moontra/moonui 6.9.0 → 6.10.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.
Files changed (35) hide show
  1. package/dist/index.d.mts +34 -33
  2. package/dist/index.d.ts +34 -33
  3. package/dist/index.global.js +6 -6
  4. package/dist/index.global.js.map +1 -1
  5. package/dist/index.js +114 -71
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +114 -71
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +1 -1
  10. package/src/components/ui/__tests__/checkbox.test.tsx +3 -3
  11. package/src/components/ui/__tests__/collapsible.test.tsx +5 -5
  12. package/src/components/ui/__tests__/dialog.test.tsx +2 -2
  13. package/src/components/ui/__tests__/progress.test.tsx +4 -4
  14. package/src/components/ui/__tests__/radio-group.test.tsx +4 -4
  15. package/src/components/ui/__tests__/size-scale-convention.test.ts +189 -0
  16. package/src/components/ui/__tests__/slider.test.tsx +4 -4
  17. package/src/components/ui/alert.tsx +5 -3
  18. package/src/components/ui/avatar.tsx +3 -2
  19. package/src/components/ui/breadcrumb.tsx +4 -2
  20. package/src/components/ui/card.tsx +4 -2
  21. package/src/components/ui/checkbox.tsx +5 -3
  22. package/src/components/ui/collapsible.tsx +10 -6
  23. package/src/components/ui/color-picker.tsx +11 -5
  24. package/src/components/ui/command.tsx +4 -2
  25. package/src/components/ui/date-picker.tsx +4 -2
  26. package/src/components/ui/dialog.tsx +7 -5
  27. package/src/components/ui/popover-pro.tsx +5 -3
  28. package/src/components/ui/popover.tsx +4 -2
  29. package/src/components/ui/progress.tsx +6 -4
  30. package/src/components/ui/radio-group.tsx +5 -3
  31. package/src/components/ui/skeleton.tsx +4 -2
  32. package/src/components/ui/slider.tsx +10 -6
  33. package/src/components/ui/table.tsx +4 -2
  34. package/src/components/ui/toggle-group.tsx +4 -1
  35. package/src/components/ui/toggle.tsx +4 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moontra/moonui",
3
- "version": "6.9.0",
3
+ "version": "6.10.0",
4
4
  "description": "Premium React component library with modern design and customization",
5
5
  "author": "MoonUI",
6
6
  "license": "MIT",
@@ -84,13 +84,13 @@ describe('Checkbox Components', () => {
84
84
  it('renders md size correctly', () => {
85
85
  render(<Checkbox size="md" data-testid="checkbox" />)
86
86
  const checkbox = screen.getByTestId('checkbox')
87
- expect(checkbox).toHaveClass('h-5', 'w-5')
87
+ expect(checkbox).toHaveClass('h-4', 'w-4')
88
88
  })
89
89
 
90
90
  it('renders lg size correctly', () => {
91
91
  render(<Checkbox size="lg" data-testid="checkbox" />)
92
92
  const checkbox = screen.getByTestId('checkbox')
93
- expect(checkbox).toHaveClass('h-6', 'w-6')
93
+ expect(checkbox).toHaveClass('h-5', 'w-5')
94
94
  })
95
95
 
96
96
  it('uses default size as default', () => {
@@ -538,7 +538,7 @@ describe('Checkbox Components', () => {
538
538
 
539
539
  const checkbox = screen.getByTestId('checkbox')
540
540
  expect(checkbox).toHaveClass('bg-transparent')
541
- expect(checkbox).toHaveClass('h-6', 'w-6')
541
+ expect(checkbox).toHaveClass('h-5', 'w-5')
542
542
  expect(checkbox).toHaveClass('rounded-full')
543
543
  expect(checkbox).toHaveClass('transition-all')
544
544
  expect(checkbox).toHaveClass('custom-class')
@@ -197,7 +197,7 @@ describe('Collapsible Components', () => {
197
197
  )
198
198
 
199
199
  const trigger = screen.getByTestId('trigger')
200
- expect(trigger).toHaveClass('text-base')
200
+ expect(trigger).toHaveClass('text-sm')
201
201
  })
202
202
 
203
203
  it('renders lg size correctly', () => {
@@ -211,7 +211,7 @@ describe('Collapsible Components', () => {
211
211
  )
212
212
 
213
213
  const trigger = screen.getByTestId('trigger')
214
- expect(trigger).toHaveClass('text-lg')
214
+ expect(trigger).toHaveClass('text-base')
215
215
  })
216
216
 
217
217
  it('renders chevron icon', () => {
@@ -382,7 +382,7 @@ describe('Collapsible Components', () => {
382
382
  )
383
383
 
384
384
  const content = screen.getByTestId('content')
385
- expect(content).toHaveClass('text-base')
385
+ expect(content).toHaveClass('text-sm')
386
386
  })
387
387
 
388
388
  it('renders lg size correctly', () => {
@@ -396,7 +396,7 @@ describe('Collapsible Components', () => {
396
396
  )
397
397
 
398
398
  const content = screen.getByTestId('content')
399
- expect(content).toHaveClass('text-lg')
399
+ expect(content).toHaveClass('text-base')
400
400
  })
401
401
 
402
402
  it('renders content wrapper with padding', () => {
@@ -438,7 +438,7 @@ describe('Collapsible Components', () => {
438
438
  it('collapsibleContentVariants generates correct classes', () => {
439
439
  expect(collapsibleContentVariants()).toContain('overflow-hidden transition-all')
440
440
  expect(collapsibleContentVariants({ variant: 'outline' })).toContain('border')
441
- expect(collapsibleContentVariants({ size: 'lg' })).toContain('text-lg')
441
+ expect(collapsibleContentVariants({ size: 'lg' })).toContain('text-base')
442
442
  })
443
443
  })
444
444
 
@@ -252,7 +252,7 @@ describe('Dialog Components', () => {
252
252
  </Dialog>
253
253
  )
254
254
 
255
- expect(screen.getByTestId('content')).toHaveClass('max-w-2xl p-7')
255
+ expect(screen.getByTestId('content')).toHaveClass('max-w-lg p-6')
256
256
  })
257
257
 
258
258
  it('renders different radius variants', () => {
@@ -685,7 +685,7 @@ describe('Dialog Components', () => {
685
685
  const content = screen.getByTestId('dialog-content')
686
686
  expect(content).toHaveClass('custom-dialog')
687
687
  expect(content).toHaveClass('border-primary/20 dark:border-primary/30')
688
- expect(content).toHaveClass('max-w-2xl p-7')
688
+ expect(content).toHaveClass('max-w-lg p-6')
689
689
  expect(content).toHaveClass('rounded-2xl')
690
690
  expect(content).toHaveClass('top-[5%]')
691
691
  expect(screen.getByTestId('dialog-title')).toHaveTextContent('Advanced Dialog')
@@ -122,19 +122,19 @@ describe('Progress Component', () => {
122
122
  it('renders md size correctly', () => {
123
123
  render(<Progress size="md" />)
124
124
  const progress = screen.getByRole('progressbar')
125
- expect(progress).toHaveClass('h-2.5')
125
+ expect(progress).toHaveClass('h-2')
126
126
  })
127
127
 
128
128
  it('renders lg size correctly', () => {
129
129
  render(<Progress size="lg" />)
130
130
  const progress = screen.getByRole('progressbar')
131
- expect(progress).toHaveClass('h-3')
131
+ expect(progress).toHaveClass('h-2.5')
132
132
  })
133
133
 
134
134
  it('renders xl size correctly', () => {
135
135
  render(<Progress size="xl" />)
136
136
  const progress = screen.getByRole('progressbar')
137
- expect(progress).toHaveClass('h-4')
137
+ expect(progress).toHaveClass('h-3')
138
138
  })
139
139
  })
140
140
 
@@ -327,7 +327,7 @@ describe('Progress Component', () => {
327
327
 
328
328
  const progress = screen.getByRole('progressbar')
329
329
  expect(progress).toHaveClass('bg-success/20')
330
- expect(progress).toHaveClass('h-3')
330
+ expect(progress).toHaveClass('h-2.5')
331
331
  expect(progress).toHaveClass('rounded-sm')
332
332
  expect(progress).toHaveClass('[&>div]:duration-300')
333
333
 
@@ -199,7 +199,7 @@ describe('RadioGroup Components', () => {
199
199
  )
200
200
 
201
201
  const label = screen.getByDisplayValue('test').nextElementSibling
202
- expect(label).toHaveClass('h-5', 'w-5')
202
+ expect(label).toHaveClass('h-4', 'w-4')
203
203
  })
204
204
 
205
205
  it('renders lg size correctly', () => {
@@ -210,7 +210,7 @@ describe('RadioGroup Components', () => {
210
210
  )
211
211
 
212
212
  const label = screen.getByDisplayValue('test').nextElementSibling
213
- expect(label).toHaveClass('h-6', 'w-6')
213
+ expect(label).toHaveClass('h-5', 'w-5')
214
214
  })
215
215
 
216
216
  it('renders custom indicator when checked', () => {
@@ -466,8 +466,8 @@ describe('RadioGroup Components', () => {
466
466
  const filledItem = screen.getByDisplayValue('filled').nextElementSibling
467
467
 
468
468
  expect(defaultItem).toHaveClass('h-3.5', 'w-3.5', 'border-border', 'bg-background')
469
- expect(outlineItem).toHaveClass('h-5', 'w-5', 'border-border', 'bg-transparent')
470
- expect(filledItem).toHaveClass('h-6', 'w-6', 'border-primary', 'bg-primary/10')
469
+ expect(outlineItem).toHaveClass('h-4', 'w-4', 'border-border', 'bg-transparent')
470
+ expect(filledItem).toHaveClass('h-5', 'w-5', 'border-primary', 'bg-primary/10')
471
471
  })
472
472
 
473
473
  it('handles name attribute for form submission', () => {
@@ -0,0 +1,189 @@
1
+ /**
2
+ * #319 — `size` skalası konvansiyon bekçisi (free paket).
3
+ *
4
+ * Bu test bir component'i değil, **kütüphane genelindeki API tutarlılığını** koruyor.
5
+ * Denetim öncesi durum: 80 `size` varyant haritası, **23 farklı skala**; orta basamak kimi
6
+ * yerde `default`, kimi yerde `md`, **17 haritada İKİSİ BİRDEN ayrı basamak** olarak. Sonuç:
7
+ * `size="md"` bazı component'lerde çalışıyor, bazılarında sessizce varsayılana düşüyordu; ve
8
+ * `default` ile `md` **farklı** şeyler üretiyordu (ör. checkbox 16px vs 20px).
9
+ *
10
+ * Kanonik karar: `xs · sm · md · lg · xl · 2xl · 3xl · 4xl · 5xl`.
11
+ * `default` bir AD değil, bir varsayılan-işaretidir → CVA'da yeri `defaultVariants`.
12
+ * Geri uyum için `default` anahtarı **saf alias** olarak korunuyor (en az bir minor sürüm).
13
+ *
14
+ * Yeni bir component eklerken bu testin kırılması, skalanın sapmaya başladığı anlamına gelir.
15
+ */
16
+ import * as fs from 'fs'
17
+ import * as path from 'path'
18
+
19
+ /** Sıralı boyut basamakları — kanonik skala. */
20
+ const CANONICAL_STEPS = ['xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl']
21
+
22
+ /**
23
+ * Boyut basamağı OLMAYAN, ama `size` ekseninde meşru olan özel değerler.
24
+ * Bunlar bir ölçek üzerinde yer tutmaz; ayrı bir davranış seçer.
25
+ */
26
+ const SPECIAL_VALUES = ['icon', 'full', 'fullscreen', 'auto', 'responsive']
27
+
28
+ /** Geriye dönük uyum için korunan, kaldırılması planlanan alias. */
29
+ const DEPRECATED_ALIAS = 'default'
30
+
31
+ const ALLOWED = new Set([...CANONICAL_STEPS, ...SPECIAL_VALUES, DEPRECATED_ALIAS])
32
+
33
+ interface SizeMap {
34
+ file: string
35
+ line: number
36
+ entries: Array<[string, string]>
37
+ defaultVariant: string | null
38
+ }
39
+
40
+ function collectSizeMaps(root: string): SizeMap[] {
41
+ const files: string[] = []
42
+ ;(function walk(dir: string) {
43
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
44
+ const p = path.join(dir, e.name)
45
+ if (e.isDirectory()) {
46
+ if (!/node_modules|__tests__|dist/.test(p)) walk(p)
47
+ } else if (/\.tsx?$/.test(e.name) && !/\.stories\./.test(e.name)) {
48
+ files.push(p)
49
+ }
50
+ }
51
+ })(root)
52
+
53
+ const maps: SizeMap[] = []
54
+ for (const f of files) {
55
+ const src = fs.readFileSync(f, 'utf8')
56
+ const re = /\bsize:\s*\{/g
57
+ let m: RegExpExecArray | null
58
+ while ((m = re.exec(src))) {
59
+ // dengeli parantezle bloğu çıkar
60
+ let i = src.indexOf('{', m.index)
61
+ let depth = 0
62
+ let end = i
63
+ for (; end < src.length; end++) {
64
+ if (src[end] === '{') depth++
65
+ else if (src[end] === '}') {
66
+ depth--
67
+ if (depth === 0) break
68
+ }
69
+ }
70
+ const body = src.slice(i + 1, end)
71
+ const entries = [
72
+ ...body.matchAll(/\n[ \t]*(["']?)([A-Za-z0-9_]+)\1[ \t]*:[ \t]*(["'])([\s\S]*?)\3/g),
73
+ ].map((x) => [x[2], x[4].replace(/\s+/g, ' ').trim()] as [string, string])
74
+ if (!entries.length) {
75
+ re.lastIndex = end
76
+ continue
77
+ }
78
+ const dvBlock = src.slice(end).match(/defaultVariants:\s*\{([^}]*)\}/)
79
+ const dv = dvBlock?.[1].match(/\bsize\s*:\s*["']([^"']+)["']/)?.[1] ?? null
80
+ maps.push({
81
+ file: path.relative(process.cwd(), f),
82
+ line: src.slice(0, m.index).split('\n').length,
83
+ entries,
84
+ defaultVariant: dv,
85
+ })
86
+ re.lastIndex = end
87
+ }
88
+ }
89
+ return maps
90
+ }
91
+
92
+ const SRC_ROOT = path.resolve(__dirname, '../../..')
93
+ const maps = collectSizeMaps(SRC_ROOT)
94
+
95
+ describe('#319 size skalası konvansiyonu (free)', () => {
96
+ it('taranacak size haritası buldu (tarayıcının kendisi sessizce boşa düşmesin)', () => {
97
+ // Bu koruma olmadan, regex bozulduğunda tüm testler "0 harita" ile YEŞİL geçerdi.
98
+ expect(maps.length).toBeGreaterThan(20)
99
+ })
100
+
101
+ it('her size anahtarı kanonik sözlükte', () => {
102
+ const sapmalar = maps.flatMap((m) =>
103
+ m.entries
104
+ .map(([k]) => k)
105
+ .filter((k) => !ALLOWED.has(k))
106
+ .map((k) => `${m.file}:${m.line} → "${k}"`)
107
+ )
108
+ expect(sapmalar).toEqual([])
109
+ })
110
+
111
+ it('`default` yalnız SAF ALIAS olarak var — başka bir basamakla aynı değeri taşır', () => {
112
+ const ihlaller = maps
113
+ .filter((m) => m.entries.some(([k]) => k === DEPRECATED_ALIAS))
114
+ .filter((m) => {
115
+ const val = m.entries.find(([k]) => k === DEPRECATED_ALIAS)![1]
116
+ // aynı değeri taşıyan, `default` olmayan en az bir anahtar bulunmalı
117
+ return !m.entries.some(([k, v]) => k !== DEPRECATED_ALIAS && v === val)
118
+ })
119
+ .map((m) => `${m.file}:${m.line}`)
120
+ expect(ihlaller).toEqual([])
121
+ })
122
+
123
+ it('`defaultVariants.size` kanonik bir ada işaret eder, `default`a DEĞİL', () => {
124
+ const ihlaller = maps
125
+ .filter((m) => m.defaultVariant === DEPRECATED_ALIAS)
126
+ .map((m) => `${m.file}:${m.line}`)
127
+ expect(ihlaller).toEqual([])
128
+ })
129
+
130
+ /**
131
+ * Denetimin asıl bulgusu buydu: `default` ile `md` **ayrı basamaklar** olduğu için
132
+ * `size="default"` ve `size="md"` farklı şeyler üretiyordu (checkbox 16px vs 20px).
133
+ *
134
+ * Kural `default === md` DEĞİL — dialog'da `md` (max-w-md) varsayılandan küçüktü, orada
135
+ * `default` bilerek `lg`ye eşlendi. Doğru ve daha güçlü kural: `default`, component'in
136
+ * gerçekten varsayılan olarak ürettiği şeyin alias'ı olmalı. Böylece `size="default"`
137
+ * yazan tüketici, prop hiç vermemiş gibi bir sonuç alır.
138
+ */
139
+ it('`default`, `defaultVariants`ın işaret ettiği basamakla AYNI değeri üretir', () => {
140
+ const ihlaller = maps
141
+ .filter((m) => m.entries.some(([k]) => k === DEPRECATED_ALIAS))
142
+ .filter((m) => {
143
+ const aliasVal = m.entries.find(([k]) => k === DEPRECATED_ALIAS)![1]
144
+ const dvVal = m.entries.find(([k]) => k === m.defaultVariant)?.[1]
145
+ return dvVal === undefined || aliasVal !== dvVal
146
+ })
147
+ .map((m) => `${m.file}:${m.line} (default→"${m.defaultVariant}")`)
148
+ expect(ihlaller).toEqual([])
149
+ })
150
+
151
+ /**
152
+ * CVA DIŞI kaçış yolu. `AdvancedColorPicker` (pro) `size`'ı bir cva varyantı değil, elle
153
+ * yazılmış bir TS union + `sizeClasses` sözlüğü olarak tutuyordu — bu yüzden hem otomatik
154
+ * migrasyondan hem de yukarıdaki cva tabanlı kurallardan KAÇTI ve `"sm" | "default" | "lg"`
155
+ * olarak kaldı. Docs senkronu sırasında yakalandı; bu kural o boşluğu kapatır.
156
+ */
157
+ it('elle yazılmış `size?:` union tipleri de kanonik skalayı kullanır', () => {
158
+ const files: string[] = []
159
+ ;(function walk(dir: string) {
160
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
161
+ const p = path.join(dir, e.name)
162
+ if (e.isDirectory()) {
163
+ if (!/node_modules|__tests__|dist/.test(p)) walk(p)
164
+ } else if (/\.tsx?$/.test(e.name) && !/\.stories\./.test(e.name)) files.push(p)
165
+ }
166
+ })(SRC_ROOT)
167
+
168
+ const ihlaller: string[] = []
169
+ for (const f of files) {
170
+ const src = fs.readFileSync(f, 'utf8')
171
+ for (const m of src.matchAll(/\bsize\??\s*:\s*((?:"[a-zA-Z0-9_]+"\s*\|\s*)+"[a-zA-Z0-9_]+")/g)) {
172
+ const values = [...m[1].matchAll(/"([a-zA-Z0-9_]+)"/g)].map((x) => x[1])
173
+ const yer = `${path.relative(process.cwd(), f)}:${src.slice(0, m.index).split('\n').length}`
174
+
175
+ // (a) sözlük dışı bir değer
176
+ const disi = values.filter((v) => !ALLOWED.has(v))
177
+ if (disi.length) ihlaller.push(`${yer} → sözlük dışı: ${disi.join(', ')}`)
178
+
179
+ // (b) `default` ALIAS'tır: kanonik adın YERİNE geçemez, yanında durur.
180
+ // `"sm" | "default" | "lg"` gibi bir union `md`yi hiç sunmadığı için ihlaldir —
181
+ // color-picker tam olarak bu şekilde migrasyondan kaçmıştı.
182
+ if (values.includes(DEPRECATED_ALIAS) && !values.includes('md')) {
183
+ ihlaller.push(`${yer} → \`default\` var ama kanonik \`md\` YOK`)
184
+ }
185
+ }
186
+ }
187
+ expect(ihlaller).toEqual([])
188
+ })
189
+ })
@@ -53,14 +53,14 @@ describe('Slider Component', () => {
53
53
  render(<Slider size="md" data-testid="slider" />)
54
54
 
55
55
  const sliderContainer = screen.getByTestId('slider').children[0] as HTMLElement
56
- expect(sliderContainer).toHaveClass('h-8')
56
+ expect(sliderContainer).toHaveClass('h-6')
57
57
  })
58
58
 
59
59
  it('renders lg size correctly', () => {
60
60
  render(<Slider size="lg" data-testid="slider" />)
61
61
 
62
62
  const sliderContainer = screen.getByTestId('slider').children[0] as HTMLElement
63
- expect(sliderContainer).toHaveClass('h-10')
63
+ expect(sliderContainer).toHaveClass('h-8')
64
64
  })
65
65
  })
66
66
 
@@ -180,14 +180,14 @@ describe('Slider Component', () => {
180
180
  render(<Slider thumbSize="md" data-testid="slider" />)
181
181
 
182
182
  const thumb = screen.getByRole('slider')
183
- expect(thumb).toHaveClass('h-5', 'w-5')
183
+ expect(thumb).toHaveClass('h-4', 'w-4')
184
184
  })
185
185
 
186
186
  it('renders lg thumb size correctly', () => {
187
187
  render(<Slider thumbSize="lg" data-testid="slider" />)
188
188
 
189
189
  const thumb = screen.getByRole('slider')
190
- expect(thumb).toHaveClass('h-6', 'w-6')
190
+ expect(thumb).toHaveClass('h-5', 'w-5')
191
191
  })
192
192
  })
193
193
 
@@ -30,9 +30,11 @@ const alertVariants = cva(
30
30
  },
31
31
  size: {
32
32
  sm: "py-2 text-xs",
33
- default: "py-3 text-sm",
33
+ md: "py-3 text-sm",
34
34
  lg: "py-4 text-base",
35
- },
35
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
36
+ default: "py-3 text-sm",
37
+ },
36
38
  radius: {
37
39
  none: "rounded-none",
38
40
  sm: "rounded-sm",
@@ -46,7 +48,7 @@ const alertVariants = cva(
46
48
  },
47
49
  defaultVariants: {
48
50
  variant: "default",
49
- size: "default",
51
+ size: "md",
50
52
  radius: "default",
51
53
  withClose: false,
52
54
  },
@@ -11,13 +11,14 @@ const avatarVariants = cva(
11
11
  {
12
12
  variants: {
13
13
  size: {
14
- default: "h-10 w-10",
15
14
  xs: "h-6 w-6",
16
15
  sm: "h-8 w-8",
17
16
  md: "h-10 w-10",
18
17
  lg: "h-12 w-12",
19
18
  xl: "h-16 w-16",
20
19
  "2xl": "h-20 w-20",
20
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
21
+ default: "h-10 w-10",
21
22
  },
22
23
  radius: {
23
24
  default: "rounded-full",
@@ -34,7 +35,7 @@ const avatarVariants = cva(
34
35
  }
35
36
  },
36
37
  defaultVariants: {
37
- size: "default",
38
+ size: "md",
38
39
  radius: "default",
39
40
  variant: "default"
40
41
  },
@@ -17,14 +17,16 @@ const breadcrumbVariants = cva(
17
17
  ghost: "text-foreground/60 transition-colors",
18
18
  },
19
19
  size: {
20
- default: "text-sm",
20
+ md: "text-sm",
21
21
  sm: "text-xs",
22
22
  lg: "text-base",
23
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
24
+ default: "text-sm",
23
25
  },
24
26
  },
25
27
  defaultVariants: {
26
28
  variant: "default",
27
- size: "default",
29
+ size: "md",
28
30
  },
29
31
  }
30
32
  );
@@ -35,10 +35,12 @@ const cardVariants = cva(
35
35
  glass: "border border-white/20 bg-white/10 backdrop-blur-md dark:border-gray-700/30 dark:bg-gray-800/10",
36
36
  },
37
37
  size: {
38
- default: "",
38
+ md: "",
39
39
  sm: "",
40
40
  lg: "",
41
41
  xl: "",
42
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
43
+ default: "",
42
44
  },
43
45
  radius: {
44
46
  default: "rounded-lg",
@@ -54,7 +56,7 @@ const cardVariants = cva(
54
56
  },
55
57
  defaultVariants: {
56
58
  variant: "default",
57
- size: "default",
59
+ size: "md",
58
60
  radius: "default",
59
61
  },
60
62
  }
@@ -26,9 +26,11 @@ const checkboxVariants = cva(
26
26
  },
27
27
  size: {
28
28
  sm: "h-3.5 w-3.5",
29
+ md: "h-4 w-4",
30
+ lg: "h-5 w-5",
31
+ xl: "h-6 w-6",
32
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
29
33
  default: "h-4 w-4",
30
- md: "h-5 w-5",
31
- lg: "h-6 w-6",
32
34
  },
33
35
  radius: {
34
36
  none: "rounded-none",
@@ -46,7 +48,7 @@ const checkboxVariants = cva(
46
48
  },
47
49
  defaultVariants: {
48
50
  variant: "default",
49
- size: "default",
51
+ size: "md",
50
52
  radius: "default",
51
53
  animation: "default",
52
54
  },
@@ -27,14 +27,16 @@ const collapsibleTriggerVariants = cva(
27
27
  },
28
28
  size: {
29
29
  sm: "text-xs py-2 px-3",
30
+ md: "text-sm py-3 px-4",
31
+ lg: "text-base py-4 px-4",
32
+ xl: "text-lg py-5 px-5",
33
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
30
34
  default: "text-sm py-3 px-4",
31
- md: "text-base py-4 px-4",
32
- lg: "text-lg py-5 px-5",
33
35
  },
34
36
  },
35
37
  defaultVariants: {
36
38
  variant: "default",
37
- size: "default",
39
+ size: "md",
38
40
  },
39
41
  }
40
42
  )
@@ -85,14 +87,16 @@ const collapsibleContentVariants = cva(
85
87
  },
86
88
  size: {
87
89
  sm: "text-xs",
90
+ md: "text-sm",
91
+ lg: "text-base",
92
+ xl: "text-lg",
93
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
88
94
  default: "text-sm",
89
- md: "text-base",
90
- lg: "text-lg",
91
95
  },
92
96
  },
93
97
  defaultVariants: {
94
98
  variant: "default",
95
- size: "default",
99
+ size: "md",
96
100
  },
97
101
  }
98
102
  )
@@ -27,10 +27,12 @@ const colorPickerVariants = cva(
27
27
  {
28
28
  variants: {
29
29
  size: {
30
- default: "h-10 w-10",
30
+ md: "h-10 w-10",
31
31
  sm: "h-8 w-8",
32
32
  lg: "h-12 w-12",
33
33
  xl: "h-16 w-16",
34
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
35
+ default: "h-10 w-10",
34
36
  },
35
37
  shape: {
36
38
  square: "rounded-md",
@@ -39,7 +41,7 @@ const colorPickerVariants = cva(
39
41
  },
40
42
  },
41
43
  defaultVariants: {
42
- size: "default",
44
+ size: "md",
43
45
  shape: "square",
44
46
  },
45
47
  }
@@ -563,7 +565,8 @@ export interface SimpleColorPickerProps {
563
565
  onChange?: (color: string) => void;
564
566
  colors?: string[];
565
567
  className?: string;
566
- size?: "sm" | "default" | "lg";
568
+ /** #319: kanonik skala; `default` `md`nin deprecated alias'ıdır. */
569
+ size?: "sm" | "md" | "lg" | "default";
567
570
  }
568
571
 
569
572
  export function SimpleColorPicker({
@@ -571,12 +574,15 @@ export function SimpleColorPicker({
571
574
  onChange,
572
575
  colors = defaultPresets.slice(0, 10),
573
576
  className,
574
- size = "default",
577
+ // #319: varsayılan kanonik ada çekildi (aynı CSS: h-8 w-8)
578
+ size = "md",
575
579
  }: SimpleColorPickerProps) {
576
580
  const sizeClasses = {
577
581
  sm: "h-6 w-6",
578
- default: "h-8 w-8",
582
+ md: "h-8 w-8",
579
583
  lg: "h-10 w-10",
584
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
585
+ default: "h-8 w-8",
580
586
  };
581
587
 
582
588
  return (
@@ -26,13 +26,15 @@ const commandVariants = cva(
26
26
  },
27
27
  size: {
28
28
  sm: "min-h-[200px]",
29
- default: "min-h-[300px]",
29
+ md: "min-h-[300px]",
30
30
  lg: "min-h-[400px]",
31
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
32
+ default: "min-h-[300px]",
31
33
  },
32
34
  },
33
35
  defaultVariants: {
34
36
  variant: "default",
35
- size: "default",
37
+ size: "md",
36
38
  },
37
39
  }
38
40
  )
@@ -36,10 +36,12 @@ const datePickerVariants = cva(
36
36
  ghost: "hover:bg-accent hover:text-accent-foreground",
37
37
  },
38
38
  size: {
39
- default: "h-10 px-4 py-2",
39
+ md: "h-10 px-4 py-2",
40
40
  sm: "h-8 px-3 text-sm",
41
41
  lg: "h-12 px-6 text-base",
42
42
  icon: "h-10 w-10",
43
+ /** @deprecated `md` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
44
+ default: "h-10 px-4 py-2",
43
45
  },
44
46
  state: {
45
47
  default: "",
@@ -50,7 +52,7 @@ const datePickerVariants = cva(
50
52
  },
51
53
  defaultVariants: {
52
54
  variant: "default",
53
- size: "default",
55
+ size: "md",
54
56
  state: "default",
55
57
  },
56
58
  }
@@ -73,12 +73,14 @@ const dialogContentVariants = cva(
73
73
  size: {
74
74
  xs: "max-w-xs p-4",
75
75
  sm: "max-w-sm p-5",
76
- default: "max-w-lg p-6",
76
+ lg: "max-w-lg p-6",
77
77
  md: "max-w-md p-6",
78
- lg: "max-w-2xl p-7",
79
- xl: "max-w-4xl p-8",
78
+ xl: "max-w-2xl p-7",
79
+ "2xl": "max-w-4xl p-8",
80
80
  full: "max-w-[95vw] max-h-[95vh] p-6",
81
- },
81
+ /** @deprecated `lg` kullanın — #319 kanonik skala; aynı çıktıyı üretir. */
82
+ default: "max-w-lg p-6",
83
+ },
82
84
  radius: {
83
85
  none: "rounded-none",
84
86
  sm: "rounded-md",
@@ -103,7 +105,7 @@ const dialogContentVariants = cva(
103
105
  },
104
106
  defaultVariants: {
105
107
  variant: "default",
106
- size: "default",
108
+ size: "lg",
107
109
  radius: "default",
108
110
  animation: "default",
109
111
  position: "default",