@moontra/moonui 6.18.0 → 6.19.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.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +26 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -5
- package/src/__tests__/cdn-iife-removed.test.ts +103 -0
- package/src/components/ui/__tests__/slider-secondary-contrast.test.ts +375 -0
- package/src/components/ui/slider.tsx +26 -2
- package/dist/chunk-VXDFZPDA.global.js +0 -33
- package/dist/chunk-VXDFZPDA.global.js.map +0 -1
- package/dist/hooks/index.global.js +0 -33
- package/dist/hooks/index.global.js.map +0 -1
- package/dist/index.global.js +0 -980
- package/dist/index.global.js.map +0 -1
- package/dist/lib/theme.global.js +0 -54
- package/dist/lib/theme.global.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moontra/moonui",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.19.0",
|
|
4
4
|
"description": "Premium React component library with modern design and customization",
|
|
5
5
|
"author": "MoonUI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,8 +15,6 @@
|
|
|
15
15
|
"main": "dist/index.js",
|
|
16
16
|
"module": "dist/index.mjs",
|
|
17
17
|
"types": "dist/index.d.ts",
|
|
18
|
-
"unpkg": "dist/index.global.js",
|
|
19
|
-
"jsdelivr": "dist/index.global.js",
|
|
20
18
|
"sideEffects": [
|
|
21
19
|
"**/*.css"
|
|
22
20
|
],
|
|
@@ -60,8 +58,8 @@
|
|
|
60
58
|
"scripts": {
|
|
61
59
|
"dev": "tsup src/index.tsx --format esm,cjs --dts --watch --sourcemap",
|
|
62
60
|
"build": "npm run build:js && npm run build:dts && node scripts/postbuild.js",
|
|
63
|
-
"build:js": "tsup
|
|
64
|
-
"build:dts": "tsup
|
|
61
|
+
"build:js": "tsup",
|
|
62
|
+
"build:dts": "tsup --dts-only",
|
|
65
63
|
"lint": "eslint \"src/**/*.{ts,tsx}\" --fix",
|
|
66
64
|
"clean": "rm -rf dist",
|
|
67
65
|
"prepublishOnly": "npm run clean && npm run build",
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDN (IIFE / `.global.js`) build'i KALDIRILDI — karar kilidi. Issue #399.
|
|
3
|
+
*
|
|
4
|
+
* Ne olmuştu: `tsup.config.ts` ikinci bir tanımda `format: ["iife"]` +
|
|
5
|
+
* `globalName: "MoonUI"` ilan ediyordu, ama `package.json`'daki `build:js`
|
|
6
|
+
* tsup'ı CLI argümanıyla çağırıyordu (`tsup src/... --format esm,cjs`).
|
|
7
|
+
* tsup'ta CLI argümanı config'i EZER → IIFE hiç üretilmedi; `.global.js`
|
|
8
|
+
* ADIYLA bir ES modülü yayımlandı. Dosya adı IIFE vaat ettiği için hata
|
|
9
|
+
* sessizdi: `window.MoonUI` hiçbir sürümde oluşmadı, buna rağmen her
|
|
10
|
+
* tarball 4.7 MB ölü `.global.*` artefaktı taşıdı.
|
|
11
|
+
*
|
|
12
|
+
* Neden "IIFE'yi gerçekten üretelim" seçilmedi (ölçüm, #399): CLI argümanı
|
|
13
|
+
* kaldırılıp gerçek IIFE üretildiğinde `window.MoonUI` oluşuyor, ama React
|
|
14
|
+
* bundle'ın içine giriyor (config her şeyi noExternal ile bundle'lıyordu) ve
|
|
15
|
+
* dışarı React API'si sunulmuyor → sayfa kendi React'ini yüklemek zorunda,
|
|
16
|
+
* yani çift React → hook
|
|
17
|
+
* kullanan her component çöküyor (Switch/Tooltip/Accordion: "Cannot read
|
|
18
|
+
* properties of null"). Ayrıca CDN için stil artefaktı yok. Gerçek bir CDN
|
|
19
|
+
* yolu ayrı bir ürün işidir; o gelene kadar yüzey tamamen kaldırıldı.
|
|
20
|
+
*
|
|
21
|
+
* Bu test üç katmanı birden kilitler: build config, paket metadata'sı ve
|
|
22
|
+
* (varsa) üretilmiş dist. Config + metadata katmanları BUILD GEREKTİRMEZ —
|
|
23
|
+
* `.global.*` ancak config onu ilan ederse üretilebileceği için asıl kapı
|
|
24
|
+
* onlardır; dist taraması build yapılmışsa çalışan EK doğrulamadır.
|
|
25
|
+
*/
|
|
26
|
+
import * as fs from 'fs';
|
|
27
|
+
import * as path from 'path';
|
|
28
|
+
|
|
29
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '../..');
|
|
30
|
+
const TSUP_CONFIG = path.join(PACKAGE_ROOT, 'tsup.config.ts');
|
|
31
|
+
const PACKAGE_JSON = path.join(PACKAGE_ROOT, 'package.json');
|
|
32
|
+
const DIST = path.join(PACKAGE_ROOT, 'dist');
|
|
33
|
+
|
|
34
|
+
/** dist ağacındaki tüm dosyaları (alt dizinler dahil) paket köküne göreli döndürür. */
|
|
35
|
+
function walk(dir: string, base = dir): string[] {
|
|
36
|
+
return fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {
|
|
37
|
+
const full = path.join(dir, entry.name);
|
|
38
|
+
return entry.isDirectory() ? walk(full, base) : [path.relative(base, full)];
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
describe('CDN/IIFE build yüzeyi kaldırıldı (#399)', () => {
|
|
43
|
+
describe('tsup.config.ts — IIFE tanımı geri gelmemeli', () => {
|
|
44
|
+
let config = '';
|
|
45
|
+
beforeAll(() => {
|
|
46
|
+
config = fs.readFileSync(TSUP_CONFIG, 'utf8');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('hiçbir tanımda `format: ["iife"]` yok', () => {
|
|
50
|
+
// Yorum satırlarını ayıkla: karar gerekçesi metninde "iife" kelimesi geçiyor.
|
|
51
|
+
const code = config.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
52
|
+
expect(code).not.toMatch(/format\s*:\s*\[[^\]]*['"]iife['"]/);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('`globalName` (window.X ataması) ilan edilmiyor', () => {
|
|
56
|
+
const code = config.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
57
|
+
expect(code).not.toMatch(/globalName\s*:/);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('`.global.js` uzantısı üreten outExtension yok', () => {
|
|
61
|
+
const code = config.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
62
|
+
expect(code).not.toMatch(/\.global\.js/);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
describe('package.json — CDN metadata ve config-ezen build argümanları yok', () => {
|
|
67
|
+
let pkg: Record<string, unknown> = {};
|
|
68
|
+
beforeAll(() => {
|
|
69
|
+
pkg = JSON.parse(fs.readFileSync(PACKAGE_JSON, 'utf8'));
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it.each(['unpkg', 'jsdelivr'])('%s alanı yok (CDN çözümleyicileri ölü dosyaya bakmasın)', (field) => {
|
|
73
|
+
expect(pkg).not.toHaveProperty(field);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('exports/files alanlarında `.global` atfı yok', () => {
|
|
77
|
+
expect(JSON.stringify({ exports: pkg.exports, files: pkg.files })).not.toContain('.global');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Kök nedenin kendisi: CLI argümanı tsup config'ini ezer. build script'leri
|
|
82
|
+
* entry/format'ı CLI'dan geçmediği sürece config tek kaynak kalır.
|
|
83
|
+
*/
|
|
84
|
+
it.each(['build:js', 'build:dts'])('%s tsup config\'ini CLI argümanıyla ezmiyor', (script) => {
|
|
85
|
+
const scripts = pkg.scripts as Record<string, string>;
|
|
86
|
+
const command = scripts[script];
|
|
87
|
+
expect(command).toBeDefined();
|
|
88
|
+
expect(command).not.toMatch(/--format/);
|
|
89
|
+
expect(command).not.toMatch(/\bsrc\//);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe('dist — üretilmiş çıktıda `.global.*` kalmamalı', () => {
|
|
94
|
+
const distExists = fs.existsSync(DIST);
|
|
95
|
+
|
|
96
|
+
// Build yapılmamışsa bu katman atlanır; asıl kapı yukarıdaki config +
|
|
97
|
+
// metadata testleridir (build olmadan da koşar ve regresyonu yakalar).
|
|
98
|
+
(distExists ? it : it.skip)('dist ağacında hiçbir `.global.*` dosyası yok', () => {
|
|
99
|
+
const globals = walk(DIST).filter((file) => path.basename(file).includes('.global.'));
|
|
100
|
+
expect(globals).toEqual([]);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #389 — Slider `secondary` range↔track kontrast değişmezi.
|
|
3
|
+
*
|
|
4
|
+
* BULGU (#372'nin birebir ardılı, PR #385'in "yan bulgu" notundan): slider'ın
|
|
5
|
+
* range'i `bg-secondary`, track'i `bg-secondary/20` — ikisi de AYNI yüzey
|
|
6
|
+
* token'ına basıyor. `--secondary` light'ta rgb(235,239,245), dark'ta
|
|
7
|
+
* rgb(2,8,23); %20 alfa track ile tam dolgu iki temada da ~1.0 oranında kalıyor,
|
|
8
|
+
* slider'ın DOLU kısmı hiç görünmüyordu. axe bunu yakalamaz: `color-contrast`
|
|
9
|
+
* yalnız METİN öğelerini ölçer.
|
|
10
|
+
*
|
|
11
|
+
* DÜZELTME: range `bg-[rgb(var(--secondary-500))]` (tokens.css slate skalası).
|
|
12
|
+
* `bg-secondary-foreground` BİLEREK seçilmedi — light'ta --primary ile aynı
|
|
13
|
+
* hue/sat'ta ΔL=%2, dark'ta birebir --primary değeri: varyant primary klonuna
|
|
14
|
+
* dönerdi. Track `bg-secondary/20` KALDI (#372 seçenek 1; track↔zemin ayrışması
|
|
15
|
+
* ayrı token-ekseni bulgusudur, kapsam dışı).
|
|
16
|
+
*
|
|
17
|
+
* ZEMİN DENKLİĞİ (kendi doğrulaması, #389): slider'ın ölçüm zeminleri
|
|
18
|
+
* progress'inkiyle AYNI kümedir — track her iki component'te de `bg-secondary/20`
|
|
19
|
+
* alfa katmanı olduğundan bileşke rengi altındaki yüzeye bağlıdır; slider'ın
|
|
20
|
+
* sardığı `.moonui-theme` sınıfı paket CSS'inde HİÇBİR token'ı yeniden
|
|
21
|
+
* tanımlamaz (yalnız işaretleyici sınıf — `grep -rn '\.moonui-theme'
|
|
22
|
+
* packages/moonui/src/styles/` boş döner). Dolayısıyla #372'deki kademe seçimi
|
|
23
|
+
* (400/500/600 elemesi) slider için de birebir geçerlidir ve aşağıda yeniden
|
|
24
|
+
* hesaplanarak kilitlenir.
|
|
25
|
+
*
|
|
26
|
+
* Kabul kriteri (issue #389): range↔track kontrastı light ve dark temada ≥3:1
|
|
27
|
+
* (WCAG 1.4.11 non-text eşiği).
|
|
28
|
+
*
|
|
29
|
+
* Hesap yöntemi progress-secondary-contrast.test.ts / primary-subtle-token.test.ts
|
|
30
|
+
* ile birebir aynıdır; oradaki "hesaplayıcı doğru mu?" çapası burada da var.
|
|
31
|
+
*/
|
|
32
|
+
import * as React from 'react'
|
|
33
|
+
import { render } from '@testing-library/react'
|
|
34
|
+
import '@testing-library/jest-dom'
|
|
35
|
+
import * as fs from 'fs'
|
|
36
|
+
import * as path from 'path'
|
|
37
|
+
import { Slider } from '../slider'
|
|
38
|
+
|
|
39
|
+
const KOK = path.resolve(__dirname, '../../..')
|
|
40
|
+
const tokens = fs.readFileSync(path.join(KOK, 'styles/tokens.css'), 'utf8')
|
|
41
|
+
|
|
42
|
+
/** "H S% L%" biçimindeki token değerini oku (light = :root, dark = .dark bloğu) */
|
|
43
|
+
function tokenOku(ad: string, blok: 'light' | 'dark'): string | null {
|
|
44
|
+
const kaynak =
|
|
45
|
+
blok === 'dark'
|
|
46
|
+
? tokens.slice(tokens.indexOf('.dark'))
|
|
47
|
+
: tokens.slice(0, tokens.indexOf('.dark'))
|
|
48
|
+
return kaynak.match(new RegExp(`--${ad}:\\s*([^;]+);`))?.[1].trim() ?? null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function hslToRgb(h: number, s: number, l: number): [number, number, number] {
|
|
52
|
+
h /= 360
|
|
53
|
+
s /= 100
|
|
54
|
+
l /= 100
|
|
55
|
+
const f = (n: number) => {
|
|
56
|
+
const k = (n + h * 12) % 12
|
|
57
|
+
const a = s * Math.min(l, 1 - l)
|
|
58
|
+
return l - a * Math.max(-1, Math.min(k - 3, Math.min(9 - k, 1)))
|
|
59
|
+
}
|
|
60
|
+
return [Math.round(255 * f(0)), Math.round(255 * f(8)), Math.round(255 * f(4))]
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const hslTokenRgb = (v: string): [number, number, number] => {
|
|
64
|
+
const [h, s, l] = v.split(/\s+/).map((x) => parseFloat(x))
|
|
65
|
+
return hslToRgb(h, s, l)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Skala token'ları ("--secondary-500: 100 116 139") HSL DEĞİL, RGB üçlüsüdür
|
|
70
|
+
* (slate-500 = rgb(100,116,139) ile birebir; component'te bu yüzden
|
|
71
|
+
* `bg-[rgb(var(--secondary-500))]` kompozisyonu kullanılır, hsl() değil).
|
|
72
|
+
*/
|
|
73
|
+
const rgbTokenRgb = (v: string): [number, number, number] => {
|
|
74
|
+
const p = v.split(/\s+/).map((x) => parseFloat(x))
|
|
75
|
+
return [p[0], p[1], p[2]]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function bagilParlaklik([r, g, b]: [number, number, number]): number {
|
|
79
|
+
const c = (v: number) => {
|
|
80
|
+
const x = v / 255
|
|
81
|
+
return x <= 0.03928 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4)
|
|
82
|
+
}
|
|
83
|
+
return 0.2126 * c(r) + 0.7152 * c(g) + 0.0722 * c(b)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function rgbKontrast(a: [number, number, number], b: [number, number, number]): number {
|
|
87
|
+
const la = bagilParlaklik(a)
|
|
88
|
+
const lb = bagilParlaklik(b)
|
|
89
|
+
const [hi, lo] = la > lb ? [la, lb] : [lb, la]
|
|
90
|
+
return (hi + 0.05) / (lo + 0.05)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** `bg-secondary/20` gibi alfa katmanının zemin üstündeki bileşke rengi */
|
|
94
|
+
function alfaBileske(
|
|
95
|
+
ust: [number, number, number],
|
|
96
|
+
alfa: number,
|
|
97
|
+
zemin: [number, number, number]
|
|
98
|
+
): [number, number, number] {
|
|
99
|
+
return [
|
|
100
|
+
Math.round(alfa * ust[0] + (1 - alfa) * zemin[0]),
|
|
101
|
+
Math.round(alfa * ust[1] + (1 - alfa) * zemin[1]),
|
|
102
|
+
Math.round(alfa * ust[2] + (1 - alfa) * zemin[2]),
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Docs kabuğunda ölçülen GERÇEK koyu kart zemini (#111827 = rgb(17,24,39)) —
|
|
108
|
+
* #284/#368 konvansiyonu: kontrast, --background'ın yanında bu gerçek yüzeye
|
|
109
|
+
* göre de ölçülür (tokens.css --input notu).
|
|
110
|
+
*/
|
|
111
|
+
const KART_GERCEK_DARK: [number, number, number] = [17, 24, 39]
|
|
112
|
+
|
|
113
|
+
/** Tema başına range (secondary-500) ve track (secondary@%20 ∘ zemin) renkleri */
|
|
114
|
+
function temaRenkleri(blok: 'light' | 'dark') {
|
|
115
|
+
const dolgu = rgbTokenRgb(tokenOku('secondary-500', 'light')!) // skala yalnız :root'ta — iki temada aynı
|
|
116
|
+
const secondary = hslTokenRgb(tokenOku('secondary', blok)!)
|
|
117
|
+
const background = hslTokenRgb(tokenOku('background', blok)!)
|
|
118
|
+
const card = hslTokenRgb(tokenOku('card', blok)!)
|
|
119
|
+
const zeminler: Array<[string, [number, number, number]]> = [
|
|
120
|
+
['--background', background],
|
|
121
|
+
['--card', card],
|
|
122
|
+
]
|
|
123
|
+
if (blok === 'dark') zeminler.push(['gerçek kart #111827', KART_GERCEK_DARK])
|
|
124
|
+
return { dolgu, secondary, zeminler }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Slider DOM'u: kök > .moonui-theme > track > range (thumb'lar track'ten SONRA) */
|
|
128
|
+
function parcalar(container: HTMLElement) {
|
|
129
|
+
const kabuk = container.querySelector('.moonui-theme') as HTMLElement
|
|
130
|
+
expect(kabuk).not.toBeNull()
|
|
131
|
+
const track = kabuk.firstElementChild as HTMLElement
|
|
132
|
+
const range = track.firstElementChild as HTMLElement
|
|
133
|
+
expect(range).not.toBeNull()
|
|
134
|
+
return { track, range }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
describe('#389 slider secondary range↔track kontrastı', () => {
|
|
138
|
+
it('hesaplayıcı DOĞRU — bilinen bir çift belgelenen oranı veriyor', () => {
|
|
139
|
+
// Sessiz-yeşil koruması: `--info-subtle` çifti tokens.css'te 9.52:1 diye
|
|
140
|
+
// belgelenmiş; hesaplayıcı bozulursa bu çapa kırmızı olur.
|
|
141
|
+
const oran = rgbKontrast(
|
|
142
|
+
hslTokenRgb(tokenOku('info-subtle', 'light')!),
|
|
143
|
+
hslTokenRgb(tokenOku('info-subtle-foreground', 'light')!)
|
|
144
|
+
)
|
|
145
|
+
expect(oran).toBeGreaterThan(9.3)
|
|
146
|
+
expect(oran).toBeLessThan(9.7)
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
it('--secondary-500 tanımlı ve RGB üçlüsü olarak ayrıştırılabiliyor', () => {
|
|
150
|
+
const ham = tokenOku('secondary-500', 'light')
|
|
151
|
+
expect(ham).toBeTruthy()
|
|
152
|
+
const rgb = rgbTokenRgb(ham!)
|
|
153
|
+
rgb.forEach((kanal) => {
|
|
154
|
+
expect(Number.isFinite(kanal)).toBe(true)
|
|
155
|
+
expect(kanal).toBeGreaterThanOrEqual(0)
|
|
156
|
+
expect(kanal).toBeLessThanOrEqual(255)
|
|
157
|
+
})
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
describe('kaynak sözleşmesi: range ile track FARKLI token’lara basıyor', () => {
|
|
161
|
+
const kaynak = fs.readFileSync(path.join(KOK, 'components/ui/slider.tsx'), 'utf8')
|
|
162
|
+
|
|
163
|
+
it('track secondary sınıfı `bg-secondary/20` (değişmedi)', () => {
|
|
164
|
+
expect(kaynak).toMatch(/secondary:\s*"bg-secondary\/20"/)
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
it('range secondary sınıfı `bg-[rgb(var(--secondary-500))]` (artık --secondary DEĞİL)', () => {
|
|
168
|
+
expect(kaynak).toMatch(/secondary:\s*"bg-\[rgb\(var\(--secondary-500\)\)\]"/)
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
it('#407: thumb secondary sınıfı `border-[rgb(var(--secondary-500))] bg-background`', () => {
|
|
172
|
+
// AYRI EKSEN (aşağıdaki "#407 thumb kenarlığı" bloğuna bakınız): #389 yalnız
|
|
173
|
+
// range↔track eksenini kapsıyordu, tutamacın kenarlığı bilerek dışarıda kalmıştı.
|
|
174
|
+
expect(kaynak).toMatch(
|
|
175
|
+
/secondary:\s*"border-\[rgb\(var\(--secondary-500\)\)\] bg-background"/
|
|
176
|
+
)
|
|
177
|
+
expect(kaynak).not.toMatch(/secondary:\s*"border-secondary bg-background"/)
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
it('zemin denkliği: `.moonui-theme` paket CSS’inde token yeniden tanımlamıyor', () => {
|
|
181
|
+
// Bu testin varlık sebebi: kontrast hesabı track'in altındaki yüzeyin
|
|
182
|
+
// --background/--card olduğunu VARSAYAR. Biri `.moonui-theme`i token
|
|
183
|
+
// kapsamına çevirirse (ör. `.moonui-theme { --secondary: ... }`) hesap
|
|
184
|
+
// sessizce yanlışlanır — o an bu test kırmızı olur.
|
|
185
|
+
const stilDizini = path.join(KOK, 'styles')
|
|
186
|
+
const stiller = fs
|
|
187
|
+
.readdirSync(stilDizini)
|
|
188
|
+
.filter((f) => f.endsWith('.css'))
|
|
189
|
+
.map((f) => fs.readFileSync(path.join(stilDizini, f), 'utf8'))
|
|
190
|
+
.join('\n')
|
|
191
|
+
expect(stiller).not.toMatch(/\.moonui-theme[^{]*\{[^}]*--secondary/)
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
describe('render sözleşmesi: <Slider /> secondary', () => {
|
|
196
|
+
it('rangeVariant="secondary" DOM’a yeni token’la iniyor, track eski token’da kalıyor', () => {
|
|
197
|
+
const { container } = render(
|
|
198
|
+
React.createElement(Slider, { trackVariant: 'secondary', rangeVariant: 'secondary' })
|
|
199
|
+
)
|
|
200
|
+
const { track, range } = parcalar(container)
|
|
201
|
+
expect(track).toHaveClass('bg-secondary/20')
|
|
202
|
+
expect(range.className).toContain('bg-[rgb(var(--secondary-500))]')
|
|
203
|
+
expect(range.className).not.toMatch(/(?:^|\s)bg-secondary(?:\s|$)/)
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
it('thumbVariant düşüşü KORUNUYOR — tek prop ile track+range ikisi de secondary', () => {
|
|
207
|
+
// `trackVariant || thumbVariant || "default"` ve
|
|
208
|
+
// `rangeVariant || thumbVariant || "primary"` düşüşleri değişmedi;
|
|
209
|
+
// en yaygın kullanım (<Slider thumbVariant="secondary" />) bu yoldan geçer.
|
|
210
|
+
const { container } = render(React.createElement(Slider, { thumbVariant: 'secondary' }))
|
|
211
|
+
const { track, range } = parcalar(container)
|
|
212
|
+
expect(track).toHaveClass('bg-secondary/20')
|
|
213
|
+
expect(range.className).toContain('bg-[rgb(var(--secondary-500))]')
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
it('rangeVariant açık verildiğinde thumbVariant’ı hâlâ eziyor', () => {
|
|
217
|
+
const { container } = render(
|
|
218
|
+
React.createElement(Slider, { thumbVariant: 'secondary', rangeVariant: 'success' })
|
|
219
|
+
)
|
|
220
|
+
const { range } = parcalar(container)
|
|
221
|
+
expect(range.className).toContain('bg-success')
|
|
222
|
+
expect(range.className).not.toContain('bg-[rgb(var(--secondary-500))]')
|
|
223
|
+
})
|
|
224
|
+
|
|
225
|
+
it('diğer varyantlar ETKİLENMEDİ — primary range hâlâ `bg-primary`', () => {
|
|
226
|
+
const { container } = render(React.createElement(Slider, { rangeVariant: 'primary' }))
|
|
227
|
+
const { range } = parcalar(container)
|
|
228
|
+
expect(range.className).toContain('bg-primary')
|
|
229
|
+
expect(range.className).not.toContain('secondary')
|
|
230
|
+
})
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
describe.each(['light', 'dark'] as const)('%s tema — kabul kriteri ≥3:1 (WCAG 1.4.11)', (blok) => {
|
|
234
|
+
it('YENİ range (secondary-500), track’in her olası zemindeki bileşkesine ≥3:1', () => {
|
|
235
|
+
// Ölçülen değerler: light 4.63 (--background=--card=beyaz) · dark 4.23
|
|
236
|
+
// (--background=--card) / 3.83 (gerçek kart #111827).
|
|
237
|
+
const { dolgu, secondary, zeminler } = temaRenkleri(blok)
|
|
238
|
+
for (const [ad, zemin] of zeminler) {
|
|
239
|
+
const track = alfaBileske(secondary, 0.2, zemin)
|
|
240
|
+
const oran = rgbKontrast(dolgu, track)
|
|
241
|
+
expect({ zemin: ad, oran }).toEqual({ zemin: ad, oran: expect.any(Number) })
|
|
242
|
+
expect(oran).toBeGreaterThanOrEqual(3.0)
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
it('ESKİ range (bg-secondary) aynı ölçümde başarısızdı — bug’ın belgesi', () => {
|
|
247
|
+
// Düzeltmenin GEREKLİLİĞİNİ sabitler: eski değer üç zeminde de eşiğin
|
|
248
|
+
// çok altındaydı (light 1.12 · dark 1.01 · gerçek kart 1.10).
|
|
249
|
+
const { secondary, zeminler } = temaRenkleri(blok)
|
|
250
|
+
for (const [, zemin] of zeminler) {
|
|
251
|
+
const track = alfaBileske(secondary, 0.2, zemin)
|
|
252
|
+
expect(rgbKontrast(secondary, track)).toBeLessThan(3.0)
|
|
253
|
+
}
|
|
254
|
+
})
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
describe('seçim gerekçesi: 500, iki temada birden geçen TEK skala kademesi', () => {
|
|
258
|
+
// Range her iki temada AYNI renk olduğundan parlaklığı [~0.107, ~0.289]
|
|
259
|
+
// bandında kalmalı: daha açık kademe light track'e (near-white), daha koyu
|
|
260
|
+
// kademe dark track'e (near-black) yetişemiyor. Komşu kademeler bunu kanıtlar.
|
|
261
|
+
it('secondary-400 light temada eşiğin ALTINDA kalır (~2.50)', () => {
|
|
262
|
+
const k400 = rgbTokenRgb(tokenOku('secondary-400', 'light')!)
|
|
263
|
+
const { secondary, zeminler } = temaRenkleri('light')
|
|
264
|
+
const track = alfaBileske(secondary, 0.2, zeminler[0][1])
|
|
265
|
+
expect(rgbKontrast(k400, track)).toBeLessThan(3.0)
|
|
266
|
+
})
|
|
267
|
+
|
|
268
|
+
it('secondary-600 dark temada eşiğin ALTINDA kalır (~2.66)', () => {
|
|
269
|
+
const k600 = rgbTokenRgb(tokenOku('secondary-600', 'light')!)
|
|
270
|
+
const { secondary, zeminler } = temaRenkleri('dark')
|
|
271
|
+
const track = alfaBileske(secondary, 0.2, zeminler[0][1])
|
|
272
|
+
expect(rgbKontrast(k600, track)).toBeLessThan(3.0)
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
it('secondary-500 üç zeminde de geçen TEK kademe — komşuları elenirken o kalır', () => {
|
|
276
|
+
// Tek testte tüm skalayı tarayıp "geçen kademe kümesi = {500}" iddiasını
|
|
277
|
+
// kilitler; ileride skala değerleri değişirse burası kırmızı olur.
|
|
278
|
+
const kademeler = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]
|
|
279
|
+
const gecenler = kademeler.filter((k) => {
|
|
280
|
+
const renk = rgbTokenRgb(tokenOku(`secondary-${k}`, 'light')!)
|
|
281
|
+
return (['light', 'dark'] as const).every((blok) => {
|
|
282
|
+
const { secondary, zeminler } = temaRenkleri(blok)
|
|
283
|
+
return zeminler.every(
|
|
284
|
+
([, zemin]) => rgbKontrast(renk, alfaBileske(secondary, 0.2, zemin)) >= 3.0
|
|
285
|
+
)
|
|
286
|
+
})
|
|
287
|
+
})
|
|
288
|
+
expect(gecenler).toEqual([500])
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
it('secondary-foreground kontrastı GEÇERDİ ama primary klonu üretirdi — kilit', () => {
|
|
292
|
+
// Bu test "neden secondary-foreground değil?" kararının dayanağını sabitler:
|
|
293
|
+
// light'ta --secondary-foreground ile --primary aynı hue/sat'ta ΔL=%2
|
|
294
|
+
// (fill↔fill 1.07), dark'ta birebir aynı değer. Varyant kimliği kaybolurdu.
|
|
295
|
+
const lightOran = rgbKontrast(
|
|
296
|
+
hslTokenRgb(tokenOku('secondary-foreground', 'light')!),
|
|
297
|
+
hslTokenRgb(tokenOku('primary', 'light')!)
|
|
298
|
+
)
|
|
299
|
+
expect(lightOran).toBeLessThan(1.3) // ayırt edilemez — near-identical
|
|
300
|
+
expect(tokenOku('secondary-foreground', 'dark')).toBe(tokenOku('primary', 'dark'))
|
|
301
|
+
})
|
|
302
|
+
})
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* #407 — thumb kenarlığı: range↔track'ten FARKLI bir kontrast ekseni.
|
|
307
|
+
*
|
|
308
|
+
* #389 yalnız range↔track eksenini kapsadığı için tutamacın kenarlığı bilerek
|
|
309
|
+
* dışarıda bırakılmıştı (PR #406, "yan bulgu 2"): `border-secondary` + `bg-background`
|
|
310
|
+
* dolgu → kenarlık `--background`/`--card` üstünde light 1.15 · dark 1.01 oranında
|
|
311
|
+
* kalıyor, secondary slider'ın tutamacı zeminde kayboluyordu.
|
|
312
|
+
*
|
|
313
|
+
* Burada ölçülen eksen bileşen↔sayfa-zemini'dir; alfa katmanı YOKTUR (tutamacın
|
|
314
|
+
* dolgusu doğrudan `bg-background`, yani zeminin kendisi). Non-text UI bileşeni
|
|
315
|
+
* olduğundan WCAG 1.4.11 ≥3:1 ister.
|
|
316
|
+
*
|
|
317
|
+
* Aynı skala taraması bu eksende de tek kademe bırakır: `--secondary-500`.
|
|
318
|
+
* Pro paketinde ikizi: packages/moonui-pro/.../slider-secondary-contrast.test.tsx
|
|
319
|
+
*/
|
|
320
|
+
describe('#407 slider secondary thumb kenarlığı ↔ zemin kontrastı', () => {
|
|
321
|
+
/** Tutamaç track'in KARDEŞİDİR (track'ten sonra render edilir) */
|
|
322
|
+
const thumbBul = (container: HTMLElement) => {
|
|
323
|
+
const thumb = container.querySelector('[role="slider"]') as HTMLElement
|
|
324
|
+
expect(thumb).not.toBeNull()
|
|
325
|
+
return thumb
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
it('render sözleşmesi: thumbVariant="secondary" kenarlığı yeni token’la iniyor', () => {
|
|
329
|
+
const { container } = render(React.createElement(Slider, { thumbVariant: 'secondary' }))
|
|
330
|
+
const thumb = thumbBul(container)
|
|
331
|
+
expect(thumb.className).toContain('border-[rgb(var(--secondary-500))]')
|
|
332
|
+
expect(thumb.className).toContain('bg-background')
|
|
333
|
+
expect(thumb.className).not.toMatch(/(?:^|\s)border-secondary(?:\s|$)/)
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
it('render sözleşmesi: diğer varyantların kenarlığı ETKİLENMEDİ', () => {
|
|
337
|
+
const { container } = render(React.createElement(Slider, { thumbVariant: 'primary' }))
|
|
338
|
+
const thumb = thumbBul(container)
|
|
339
|
+
expect(thumb.className).toContain('border-primary')
|
|
340
|
+
expect(thumb.className).not.toContain('secondary')
|
|
341
|
+
})
|
|
342
|
+
|
|
343
|
+
describe.each(['light', 'dark'] as const)('%s tema — kabul kriteri ≥3:1', (blok) => {
|
|
344
|
+
it('YENİ kenarlık (secondary-500) her zemine ≥3:1', () => {
|
|
345
|
+
// Ölçülen: light 4.76 · dark 4.23 (gerçek kart #111827 üstünde 3.73).
|
|
346
|
+
const { dolgu, zeminler } = temaRenkleri(blok)
|
|
347
|
+
for (const [ad, zemin] of zeminler) {
|
|
348
|
+
const oran = rgbKontrast(dolgu, zemin)
|
|
349
|
+
expect({ zemin: ad, gecti: oran >= 3.0 }).toEqual({ zemin: ad, gecti: true })
|
|
350
|
+
}
|
|
351
|
+
})
|
|
352
|
+
|
|
353
|
+
it('ESKİ kenarlık (border-secondary) aynı ölçümde başarısızdı — bug’ın belgesi', () => {
|
|
354
|
+
// light 1.15 · dark 1.01 · gerçek kart 1.13 — tutamaç fiilen görünmüyordu.
|
|
355
|
+
const { secondary, zeminler } = temaRenkleri(blok)
|
|
356
|
+
for (const [, zemin] of zeminler) {
|
|
357
|
+
expect(rgbKontrast(secondary, zemin)).toBeLessThan(3.0)
|
|
358
|
+
}
|
|
359
|
+
})
|
|
360
|
+
})
|
|
361
|
+
|
|
362
|
+
it('seçim gerekçesi: bu eksende de geçen kademe kümesi tam olarak {500}', () => {
|
|
363
|
+
// Range ekseniyle AYNI kademede buluşması tesadüf değil, ölçüm sonucudur:
|
|
364
|
+
// alfa katmanı olmayan zemin, %20 alfa track'e çok yakın parlaklıkta olduğundan
|
|
365
|
+
// geçerli bant neredeyse aynıdır. Yine de bağımsız olarak taranır.
|
|
366
|
+
const kademeler = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]
|
|
367
|
+
const gecenler = kademeler.filter((k) => {
|
|
368
|
+
const renk = rgbTokenRgb(tokenOku(`secondary-${k}`, 'light')!)
|
|
369
|
+
return (['light', 'dark'] as const).every((blok) =>
|
|
370
|
+
temaRenkleri(blok).zeminler.every(([, zemin]) => rgbKontrast(renk, zemin) >= 3.0)
|
|
371
|
+
)
|
|
372
|
+
})
|
|
373
|
+
expect(gecenler).toEqual([500])
|
|
374
|
+
})
|
|
375
|
+
})
|
|
@@ -58,7 +58,20 @@ const sliderRangeVariants = cva(
|
|
|
58
58
|
variant: {
|
|
59
59
|
default: "bg-foreground",
|
|
60
60
|
primary: "bg-primary",
|
|
61
|
-
|
|
61
|
+
// #389 (#372'nin birebir ardılı): range `bg-secondary` idi — track'in
|
|
62
|
+
// (`bg-secondary/20`) AYNI yüzey token'ına basıyordu; %20 alfa track ile
|
|
63
|
+
// tam dolgu iki temada da ~1.0 oranında kalıyor, dolu kısım görünmüyordu
|
|
64
|
+
// (light rgb(235,239,245) → 1.12 · dark rgb(2,8,23) → 1.01).
|
|
65
|
+
// `bg-secondary-foreground` BİLEREK seçilmedi: light'ta --primary ile aynı
|
|
66
|
+
// hue/sat'ta yalnız ΔL=%2 (fill↔fill 1.07), dark'ta birebir --primary
|
|
67
|
+
// değeri (210 40% 98%) — secondary varyantı primary klonuna dönerdi.
|
|
68
|
+
// `--secondary-500` (tokens.css slate skalası, RGB üçlüsü) iki temada da
|
|
69
|
+
// track'e ≥3:1 (WCAG 1.4.11) veren TEK kademe: light 4.63, dark 4.23
|
|
70
|
+
// (gerçek kart #111827 üstünde 3.83; 400 light'ta 2.50 ✗, 600 dark'ta
|
|
71
|
+
// 2.66 ✗). Skala :root'ta tanımlı olduğundan tema değişiminde sabittir;
|
|
72
|
+
// tüketici --secondary-500'ü ezerek özelleştirebilir.
|
|
73
|
+
// Regresyon: __tests__/slider-secondary-contrast.test.ts
|
|
74
|
+
secondary: "bg-[rgb(var(--secondary-500))]",
|
|
62
75
|
accent: "bg-accent",
|
|
63
76
|
success: "bg-success",
|
|
64
77
|
warning: "bg-warning",
|
|
@@ -78,7 +91,18 @@ const sliderThumbVariants = cva(
|
|
|
78
91
|
variant: {
|
|
79
92
|
default: "border-foreground bg-background",
|
|
80
93
|
primary: "border-primary bg-background",
|
|
81
|
-
|
|
94
|
+
// #407 (P2, #389'un range eksenine EK ayrı eksen): tutamacın kenarlığı
|
|
95
|
+
// `border-secondary`, dolgusu `bg-background` idi. Bu bileşen↔sayfa-zemini
|
|
96
|
+
// ekseni: `--secondary` light'ta neredeyse beyaz (rgb(235,239,245)), dark'ta
|
|
97
|
+
// `--background` ile neredeyse aynı → kenarlık 1.15 (light) / 1.01 (dark)
|
|
98
|
+
// oranında kalıyor, secondary slider'ın tutamacı zeminde kayboluyordu.
|
|
99
|
+
// #389'da bilerek kapsam dışıydı (mevcut kusuru testle "doğru" ilan etmemek için).
|
|
100
|
+
// Non-text UI bileşeni → WCAG 1.4.11 ≥3:1. Skala taraması bu eksende de TEK
|
|
101
|
+
// kademe bırakıyor — `--secondary-500`: light 4.76, dark 4.23 (gerçek kart
|
|
102
|
+
// #111827 üstünde 3.73); 400 light'ta 2.56 ✗, 600 dark'ta 2.66 ✗. Range ile
|
|
103
|
+
// aynı kademe: tutamaç ve dolgu tek renkte okunur.
|
|
104
|
+
// Regresyon: __tests__/slider-secondary-contrast.test.ts
|
|
105
|
+
secondary: "border-[rgb(var(--secondary-500))] bg-background",
|
|
82
106
|
accent: "border-accent bg-background",
|
|
83
107
|
success: "border-success bg-background",
|
|
84
108
|
warning: "border-warning bg-background",
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
/** @license MoonUI v1.0.0 - MIT License - https://moonui.dev */
|
|
4
|
-
var B=Object.create;var $=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty;var me=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var G=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of H(t))!Y.call(e,o)&&o!==r&&$(e,o,{get:()=>t[o],enumerable:!(n=z(t,o))||n.enumerable});return e};var he=(e,t,r)=>(r=e!=null?B(W(e)):{},G(t||!e||!e.__esModule?$(r,"default",{value:e,enumerable:!0}):r,e));var b=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var Se=(e,t,r)=>(b(e,t,"read from private field"),r?r.call(e):t.get(e)),Ee=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},ke=(e,t,r,n)=>(b(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var V=d(u=>{"use strict";var y=Symbol.for("react.element"),J=Symbol.for("react.portal"),K=Symbol.for("react.fragment"),Q=Symbol.for("react.strict_mode"),X=Symbol.for("react.profiler"),Z=Symbol.for("react.provider"),ee=Symbol.for("react.context"),te=Symbol.for("react.forward_ref"),re=Symbol.for("react.suspense"),ne=Symbol.for("react.memo"),oe=Symbol.for("react.lazy"),j=Symbol.iterator;function ue(e){return e===null||typeof e!="object"?null:(e=j&&e[j]||e["@@iterator"],typeof e=="function"?e:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},P=Object.assign,g={};function p(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||x}p.prototype.isReactComponent={};p.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function I(){}I.prototype=p.prototype;function E(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||x}var k=E.prototype=new I;k.constructor=E;P(k,p.prototype);k.isPureReactComponent=!0;var O=Array.isArray,q=Object.prototype.hasOwnProperty,R={current:null},N={key:!0,ref:!0,__self:!0,__source:!0};function D(e,t,r){var n,o={},i=null,s=null;if(t!=null)for(n in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(i=""+t.key),t)q.call(t,n)&&!N.hasOwnProperty(n)&&(o[n]=t[n]);var f=arguments.length-2;if(f===1)o.children=r;else if(1<f){for(var c=Array(f),a=0;a<f;a++)c[a]=arguments[a+2];o.children=c}if(e&&e.defaultProps)for(n in f=e.defaultProps,f)o[n]===void 0&&(o[n]=f[n]);return{$$typeof:y,type:e,key:i,ref:s,props:o,_owner:R.current}}function ie(e,t){return{$$typeof:y,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function w(e){return typeof e=="object"&&e!==null&&e.$$typeof===y}function se(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var C=/\/+/g;function S(e,t){return typeof e=="object"&&e!==null&&e.key!=null?se(""+e.key):t.toString(36)}function v(e,t,r,n,o){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(i){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case y:case J:s=!0}}if(s)return s=e,o=o(s),e=n===""?"."+S(s,0):n,O(o)?(r="",e!=null&&(r=e.replace(C,"$&/")+"/"),v(o,t,r,"",function(a){return a})):o!=null&&(w(o)&&(o=ie(o,r+(!o.key||s&&s.key===o.key?"":(""+o.key).replace(C,"$&/")+"/")+e)),t.push(o)),1;if(s=0,n=n===""?".":n+":",O(e))for(var f=0;f<e.length;f++){i=e[f];var c=n+S(i,f);s+=v(i,t,r,c,o)}else if(c=ue(e),typeof c=="function")for(e=c.call(e),f=0;!(i=e.next()).done;)i=i.value,c=n+S(i,f++),s+=v(i,t,r,c,o);else if(i==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function _(e,t,r){if(e==null)return e;var n=[],o=0;return v(e,n,"","",function(i){return t.call(r,i,o++)}),n}function ce(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var l={current:null},m={transition:null},fe={ReactCurrentDispatcher:l,ReactCurrentBatchConfig:m,ReactCurrentOwner:R};function T(){throw Error("act(...) is not supported in production builds of React.")}u.Children={map:_,forEach:function(e,t,r){_(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return _(e,function(){t++}),t},toArray:function(e){return _(e,function(t){return t})||[]},only:function(e){if(!w(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};u.Component=p;u.Fragment=K;u.Profiler=X;u.PureComponent=E;u.StrictMode=Q;u.Suspense=re;u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=fe;u.act=T;u.cloneElement=function(e,t,r){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=P({},e.props),o=e.key,i=e.ref,s=e._owner;if(t!=null){if(t.ref!==void 0&&(i=t.ref,s=R.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var f=e.type.defaultProps;for(c in t)q.call(t,c)&&!N.hasOwnProperty(c)&&(n[c]=t[c]===void 0&&f!==void 0?f[c]:t[c])}var c=arguments.length-2;if(c===1)n.children=r;else if(1<c){f=Array(c);for(var a=0;a<c;a++)f[a]=arguments[a+2];n.children=f}return{$$typeof:y,type:e.type,key:o,ref:i,props:n,_owner:s}};u.createContext=function(e){return e={$$typeof:ee,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:Z,_context:e},e.Consumer=e};u.createElement=D;u.createFactory=function(e){var t=D.bind(null,e);return t.type=e,t};u.createRef=function(){return{current:null}};u.forwardRef=function(e){return{$$typeof:te,render:e}};u.isValidElement=w;u.lazy=function(e){return{$$typeof:oe,_payload:{_status:-1,_result:e},_init:ce}};u.memo=function(e,t){return{$$typeof:ne,type:e,compare:t===void 0?null:t}};u.startTransition=function(e){var t=m.transition;m.transition={};try{e()}finally{m.transition=t}};u.unstable_act=T;u.useCallback=function(e,t){return l.current.useCallback(e,t)};u.useContext=function(e){return l.current.useContext(e)};u.useDebugValue=function(){};u.useDeferredValue=function(e){return l.current.useDeferredValue(e)};u.useEffect=function(e,t){return l.current.useEffect(e,t)};u.useId=function(){return l.current.useId()};u.useImperativeHandle=function(e,t,r){return l.current.useImperativeHandle(e,t,r)};u.useInsertionEffect=function(e,t){return l.current.useInsertionEffect(e,t)};u.useLayoutEffect=function(e,t){return l.current.useLayoutEffect(e,t)};u.useMemo=function(e,t){return l.current.useMemo(e,t)};u.useReducer=function(e,t,r){return l.current.useReducer(e,t,r)};u.useRef=function(e){return l.current.useRef(e)};u.useState=function(e){return l.current.useState(e)};u.useSyncExternalStore=function(e,t,r){return l.current.useSyncExternalStore(e,t,r)};u.useTransition=function(){return l.current.useTransition()};u.version="18.3.1"});var U=d(($e,L)=>{"use strict";L.exports=V()});var F=d(h=>{"use strict";var le=U(),ae=Symbol.for("react.element"),pe=Symbol.for("react.fragment"),ye=Object.prototype.hasOwnProperty,de=le.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,_e={key:!0,ref:!0,__self:!0,__source:!0};function A(e,t,r){var n,o={},i=null,s=null;r!==void 0&&(i=""+r),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(s=t.ref);for(n in t)ye.call(t,n)&&!_e.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)o[n]===void 0&&(o[n]=t[n]);return{$$typeof:ae,type:e,key:i,ref:s,props:o,_owner:de.current}}h.Fragment=pe;h.jsx=A;h.jsxs=A});var ve=d((je,M)=>{"use strict";M.exports=F()});export{me as a,d as b,he as c,Se as d,Ee as e,ke as f,U as g,ve as h};
|
|
5
|
-
/*! Bundled license information:
|
|
6
|
-
|
|
7
|
-
react/cjs/react.production.min.js:
|
|
8
|
-
(**
|
|
9
|
-
* @license React
|
|
10
|
-
* react.production.min.js
|
|
11
|
-
*
|
|
12
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the MIT license found in the
|
|
15
|
-
* LICENSE file in the root directory of this source tree.
|
|
16
|
-
*)
|
|
17
|
-
|
|
18
|
-
react/cjs/react-jsx-runtime.production.min.js:
|
|
19
|
-
(**
|
|
20
|
-
* @license React
|
|
21
|
-
* react-jsx-runtime.production.min.js
|
|
22
|
-
*
|
|
23
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
24
|
-
*
|
|
25
|
-
* This source code is licensed under the MIT license found in the
|
|
26
|
-
* LICENSE file in the root directory of this source tree.
|
|
27
|
-
*)
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
if (typeof window !== 'undefined' && !window.React) {
|
|
31
|
-
console.warn('MoonUI: React not found. Please include React and ReactDOM before MoonUI.');
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=chunk-VXDFZPDA.global.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n"],"mappings":";0lCAAA,IAAAA,EAAAC,EAAAC,GAAA,cASa,IAAIC,EAAE,OAAO,IAAI,eAAe,EAAEC,EAAE,OAAO,IAAI,cAAc,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,IAAI,mBAAmB,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,GAAE,OAAO,IAAI,eAAe,EAAEC,GAAE,OAAO,IAAI,mBAAmB,EAAEC,GAAE,OAAO,IAAI,gBAAgB,EAAEC,GAAE,OAAO,IAAI,YAAY,EAAEC,GAAE,OAAO,IAAI,YAAY,EAAEC,EAAE,OAAO,SAAS,SAASC,GAAEC,EAAE,CAAC,OAAUA,IAAP,MAAqB,OAAOA,GAAlB,SAA2B,MAAKA,EAAEF,GAAGE,EAAEF,CAAC,GAAGE,EAAE,YAAY,EAAqB,OAAOA,GAApB,WAAsBA,EAAE,KAAI,CAC1e,IAAIC,EAAE,CAAC,UAAU,UAAU,CAAC,MAAM,EAAE,EAAE,mBAAmB,UAAU,CAAC,EAAE,oBAAoB,UAAU,CAAC,EAAE,gBAAgB,UAAU,CAAC,CAAC,EAAEC,EAAE,OAAO,OAAOC,EAAE,CAAC,EAAE,SAASC,EAAEJ,EAAEK,EAAEC,EAAE,CAAC,KAAK,MAAMN,EAAE,KAAK,QAAQK,EAAE,KAAK,KAAKF,EAAE,KAAK,QAAQG,GAAGL,CAAC,CAACG,EAAE,UAAU,iBAAiB,CAAC,EACpQA,EAAE,UAAU,SAAS,SAASJ,EAAEK,EAAE,CAAC,GAAc,OAAOL,GAAlB,UAAkC,OAAOA,GAApB,YAA6BA,GAAN,KAAQ,MAAM,MAAM,uHAAuH,EAAE,KAAK,QAAQ,gBAAgB,KAAKA,EAAEK,EAAE,UAAU,CAAC,EAAED,EAAE,UAAU,YAAY,SAASJ,EAAE,CAAC,KAAK,QAAQ,mBAAmB,KAAKA,EAAE,aAAa,CAAC,EAAE,SAASO,GAAG,CAAC,CAACA,EAAE,UAAUH,EAAE,UAAU,SAASI,EAAER,EAAEK,EAAEC,EAAE,CAAC,KAAK,MAAMN,EAAE,KAAK,QAAQK,EAAE,KAAK,KAAKF,EAAE,KAAK,QAAQG,GAAGL,CAAC,CAAC,IAAIQ,EAAED,EAAE,UAAU,IAAID,EACrfE,EAAE,YAAYD,EAAEN,EAAEO,EAAEL,EAAE,SAAS,EAAEK,EAAE,qBAAqB,GAAG,IAAIC,EAAE,MAAM,QAAQC,EAAE,OAAO,UAAU,eAAeC,EAAE,CAAC,QAAQ,IAAI,EAAEC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,EAAE,EACxK,SAASC,EAAEd,EAAEK,EAAEC,EAAE,CAAC,IAAIS,EAAEC,EAAE,CAAC,EAAEC,EAAE,KAAKC,EAAE,KAAK,GAASb,GAAN,KAAQ,IAAIU,KAAcV,EAAE,MAAX,SAAiBa,EAAEb,EAAE,KAAcA,EAAE,MAAX,SAAiBY,EAAE,GAAGZ,EAAE,KAAKA,EAAEM,EAAE,KAAKN,EAAEU,CAAC,GAAG,CAACF,EAAE,eAAeE,CAAC,IAAIC,EAAED,CAAC,EAAEV,EAAEU,CAAC,GAAG,IAAII,EAAE,UAAU,OAAO,EAAE,GAAOA,IAAJ,EAAMH,EAAE,SAASV,UAAU,EAAEa,EAAE,CAAC,QAAQC,EAAE,MAAMD,CAAC,EAAEE,EAAE,EAAEA,EAAEF,EAAEE,IAAID,EAAEC,CAAC,EAAE,UAAUA,EAAE,CAAC,EAAEL,EAAE,SAASI,CAAC,CAAC,GAAGpB,GAAGA,EAAE,aAAa,IAAIe,KAAKI,EAAEnB,EAAE,aAAamB,EAAWH,EAAED,CAAC,IAAZ,SAAgBC,EAAED,CAAC,EAAEI,EAAEJ,CAAC,GAAG,MAAM,CAAC,SAAS5B,EAAE,KAAKa,EAAE,IAAIiB,EAAE,IAAIC,EAAE,MAAMF,EAAE,OAAOJ,EAAE,OAAO,CAAC,CAC7a,SAASU,GAAEtB,EAAEK,EAAE,CAAC,MAAM,CAAC,SAASlB,EAAE,KAAKa,EAAE,KAAK,IAAIK,EAAE,IAAIL,EAAE,IAAI,MAAMA,EAAE,MAAM,OAAOA,EAAE,MAAM,CAAC,CAAC,SAASuB,EAAEvB,EAAE,CAAC,OAAiB,OAAOA,GAAlB,UAA4BA,IAAP,MAAUA,EAAE,WAAWb,CAAC,CAAC,SAASqC,GAAOxB,EAAE,CAAC,IAAIK,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,MAAM,IAAIL,EAAE,QAAQ,QAAQ,SAASA,EAAE,CAAC,OAAOK,EAAEL,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIyB,EAAE,OAAO,SAASC,EAAE1B,EAAEK,EAAE,CAAC,OAAiB,OAAOL,GAAlB,UAA4BA,IAAP,MAAgBA,EAAE,KAAR,KAAYwB,GAAO,GAAGxB,EAAE,GAAG,EAAEK,EAAE,SAAS,EAAE,CAAC,CAC/W,SAASsB,EAAE3B,EAAEK,EAAEC,EAAES,EAAEC,EAAE,CAAC,IAAIC,EAAE,OAAOjB,GAAmBiB,IAAd,aAA6BA,IAAZ,aAAcjB,EAAE,MAAK,IAAIkB,EAAE,GAAG,GAAUlB,IAAP,KAASkB,EAAE,OAAQ,QAAOD,EAAE,CAAC,IAAK,SAAS,IAAK,SAASC,EAAE,GAAG,MAAM,IAAK,SAAS,OAAOlB,EAAE,SAAS,CAAC,KAAKb,EAAE,KAAKC,EAAE8B,EAAE,EAAE,CAAC,CAAC,GAAGA,EAAE,OAAOA,EAAElB,EAAEgB,EAAEA,EAAEE,CAAC,EAAElB,EAAOe,IAAL,GAAO,IAAIW,EAAER,EAAE,CAAC,EAAEH,EAAEL,EAAEM,CAAC,GAAGV,EAAE,GAASN,GAAN,OAAUM,EAAEN,EAAE,QAAQyB,EAAE,KAAK,EAAE,KAAKE,EAAEX,EAAEX,EAAEC,EAAE,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,GAASU,GAAN,OAAUO,EAAEP,CAAC,IAAIA,EAAEM,GAAEN,EAAEV,GAAG,CAACU,EAAE,KAAKE,GAAGA,EAAE,MAAMF,EAAE,IAAI,IAAI,GAAGA,EAAE,KAAK,QAAQS,EAAE,KAAK,EAAE,KAAKzB,CAAC,GAAGK,EAAE,KAAKW,CAAC,GAAG,EAAyB,GAAvBE,EAAE,EAAEH,EAAOA,IAAL,GAAO,IAAIA,EAAE,IAAOL,EAAEV,CAAC,EAAE,QAAQmB,EAAE,EAAEA,EAAEnB,EAAE,OAAOmB,IAAI,CAACF,EACrfjB,EAAEmB,CAAC,EAAE,IAAIC,EAAEL,EAAEW,EAAET,EAAEE,CAAC,EAAED,GAAGS,EAAEV,EAAEZ,EAAEC,EAAEc,EAAEJ,CAAC,CAAC,SAASI,EAAErB,GAAEC,CAAC,EAAe,OAAOoB,GAApB,WAAsB,IAAIpB,EAAEoB,EAAE,KAAKpB,CAAC,EAAEmB,EAAE,EAAE,EAAEF,EAAEjB,EAAE,KAAK,GAAG,MAAMiB,EAAEA,EAAE,MAAMG,EAAEL,EAAEW,EAAET,EAAEE,GAAG,EAAED,GAAGS,EAAEV,EAAEZ,EAAEC,EAAEc,EAAEJ,CAAC,UAAqBC,IAAX,SAAa,MAAMZ,EAAE,OAAOL,CAAC,EAAE,MAAM,mDAAuEK,IAApB,kBAAsB,qBAAqB,OAAO,KAAKL,CAAC,EAAE,KAAK,IAAI,EAAE,IAAIK,GAAG,2EAA2E,EAAE,OAAOa,CAAC,CACzZ,SAASU,EAAE5B,EAAEK,EAAEC,EAAE,CAAC,GAASN,GAAN,KAAQ,OAAOA,EAAE,IAAIe,EAAE,CAAC,EAAEC,EAAE,EAAE,OAAAW,EAAE3B,EAAEe,EAAE,GAAG,GAAG,SAASf,EAAE,CAAC,OAAOK,EAAE,KAAKC,EAAEN,EAAEgB,GAAG,CAAC,CAAC,EAASD,CAAC,CAAC,SAASc,GAAE7B,EAAE,CAAC,GAAQA,EAAE,UAAP,GAAe,CAAC,IAAIK,EAAEL,EAAE,QAAQK,EAAEA,EAAE,EAAEA,EAAE,KAAK,SAASA,EAAE,EAAQL,EAAE,UAAN,GAAoBA,EAAE,UAAP,MAAeA,EAAE,QAAQ,EAAEA,EAAE,QAAQK,EAAC,EAAE,SAASA,EAAE,EAAQL,EAAE,UAAN,GAAoBA,EAAE,UAAP,MAAeA,EAAE,QAAQ,EAAEA,EAAE,QAAQK,EAAC,CAAC,EAAOL,EAAE,UAAP,KAAiBA,EAAE,QAAQ,EAAEA,EAAE,QAAQK,EAAE,CAAC,GAAOL,EAAE,UAAN,EAAc,OAAOA,EAAE,QAAQ,QAAQ,MAAMA,EAAE,OAAQ,CAC5Z,IAAI8B,EAAE,CAAC,QAAQ,IAAI,EAAEC,EAAE,CAAC,WAAW,IAAI,EAAEC,GAAE,CAAC,uBAAuBF,EAAE,wBAAwBC,EAAE,kBAAkBnB,CAAC,EAAE,SAASqB,GAAG,CAAC,MAAM,MAAM,0DAA0D,CAAE,CACzM/C,EAAQ,SAAS,CAAC,IAAI0C,EAAE,QAAQ,SAAS5B,EAAEK,EAAEC,EAAE,CAACsB,EAAE5B,EAAE,UAAU,CAACK,EAAE,MAAM,KAAK,SAAS,CAAC,EAAEC,CAAC,CAAC,EAAE,MAAM,SAASN,EAAE,CAAC,IAAIK,EAAE,EAAE,OAAAuB,EAAE5B,EAAE,UAAU,CAACK,GAAG,CAAC,EAASA,CAAC,EAAE,QAAQ,SAASL,EAAE,CAAC,OAAO4B,EAAE5B,EAAE,SAASA,EAAE,CAAC,OAAOA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,SAASA,EAAE,CAAC,GAAG,CAACuB,EAAEvB,CAAC,EAAE,MAAM,MAAM,uEAAuE,EAAE,OAAOA,CAAC,CAAC,EAAEd,EAAQ,UAAUkB,EAAElB,EAAQ,SAASG,EAAEH,EAAQ,SAASK,EAAEL,EAAQ,cAAcsB,EAAEtB,EAAQ,WAAWI,EAAEJ,EAAQ,SAASS,GAClcT,EAAQ,mDAAmD8C,GAAE9C,EAAQ,IAAI+C,EACzE/C,EAAQ,aAAa,SAASc,EAAEK,EAAEC,EAAE,CAAC,GAAUN,GAAP,KAAqB,MAAM,MAAM,iFAAiFA,EAAE,GAAG,EAAE,IAAIe,EAAEb,EAAE,CAAC,EAAEF,EAAE,KAAK,EAAEgB,EAAEhB,EAAE,IAAIiB,EAAEjB,EAAE,IAAIkB,EAAElB,EAAE,OAAO,GAASK,GAAN,KAAQ,CAAoE,GAA1DA,EAAE,MAAX,SAAiBY,EAAEZ,EAAE,IAAIa,EAAEN,EAAE,SAAkBP,EAAE,MAAX,SAAiBW,EAAE,GAAGX,EAAE,KAAQL,EAAE,MAAMA,EAAE,KAAK,aAAa,IAAImB,EAAEnB,EAAE,KAAK,aAAa,IAAIoB,KAAKf,EAAEM,EAAE,KAAKN,EAAEe,CAAC,GAAG,CAACP,EAAE,eAAeO,CAAC,IAAIL,EAAEK,CAAC,EAAWf,EAAEe,CAAC,IAAZ,QAAwBD,IAAT,OAAWA,EAAEC,CAAC,EAAEf,EAAEe,CAAC,EAAE,CAAC,IAAIA,EAAE,UAAU,OAAO,EAAE,GAAOA,IAAJ,EAAML,EAAE,SAAST,UAAU,EAAEc,EAAE,CAACD,EAAE,MAAMC,CAAC,EACtf,QAAQC,EAAE,EAAEA,EAAED,EAAEC,IAAIF,EAAEE,CAAC,EAAE,UAAUA,EAAE,CAAC,EAAEN,EAAE,SAASI,CAAC,CAAC,MAAM,CAAC,SAAShC,EAAE,KAAKa,EAAE,KAAK,IAAIgB,EAAE,IAAIC,EAAE,MAAMF,EAAE,OAAOG,CAAC,CAAC,EAAEhC,EAAQ,cAAc,SAASc,EAAE,CAAC,OAAAA,EAAE,CAAC,SAASP,GAAE,cAAcO,EAAE,eAAeA,EAAE,aAAa,EAAE,SAAS,KAAK,SAAS,KAAK,cAAc,KAAK,YAAY,IAAI,EAAEA,EAAE,SAAS,CAAC,SAASR,EAAE,SAASQ,CAAC,EAASA,EAAE,SAASA,CAAC,EAAEd,EAAQ,cAAc4B,EAAE5B,EAAQ,cAAc,SAASc,EAAE,CAAC,IAAIK,EAAES,EAAE,KAAK,KAAKd,CAAC,EAAE,OAAAK,EAAE,KAAKL,EAASK,CAAC,EAAEnB,EAAQ,UAAU,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,EAC9dA,EAAQ,WAAW,SAASc,EAAE,CAAC,MAAM,CAAC,SAASN,GAAE,OAAOM,CAAC,CAAC,EAAEd,EAAQ,eAAeqC,EAAErC,EAAQ,KAAK,SAASc,EAAE,CAAC,MAAM,CAAC,SAASH,GAAE,SAAS,CAAC,QAAQ,GAAG,QAAQG,CAAC,EAAE,MAAM6B,EAAC,CAAC,EAAE3C,EAAQ,KAAK,SAASc,EAAEK,EAAE,CAAC,MAAM,CAAC,SAAST,GAAE,KAAKI,EAAE,QAAiBK,IAAT,OAAW,KAAKA,CAAC,CAAC,EAAEnB,EAAQ,gBAAgB,SAASc,EAAE,CAAC,IAAIK,EAAE0B,EAAE,WAAWA,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC/B,EAAE,CAAC,QAAC,CAAQ+B,EAAE,WAAW1B,CAAC,CAAC,EAAEnB,EAAQ,aAAa+C,EAAE/C,EAAQ,YAAY,SAASc,EAAEK,EAAE,CAAC,OAAOyB,EAAE,QAAQ,YAAY9B,EAAEK,CAAC,CAAC,EAAEnB,EAAQ,WAAW,SAASc,EAAE,CAAC,OAAO8B,EAAE,QAAQ,WAAW9B,CAAC,CAAC,EAC3fd,EAAQ,cAAc,UAAU,CAAC,EAAEA,EAAQ,iBAAiB,SAASc,EAAE,CAAC,OAAO8B,EAAE,QAAQ,iBAAiB9B,CAAC,CAAC,EAAEd,EAAQ,UAAU,SAASc,EAAEK,EAAE,CAAC,OAAOyB,EAAE,QAAQ,UAAU9B,EAAEK,CAAC,CAAC,EAAEnB,EAAQ,MAAM,UAAU,CAAC,OAAO4C,EAAE,QAAQ,MAAM,CAAC,EAAE5C,EAAQ,oBAAoB,SAASc,EAAEK,EAAEC,EAAE,CAAC,OAAOwB,EAAE,QAAQ,oBAAoB9B,EAAEK,EAAEC,CAAC,CAAC,EAAEpB,EAAQ,mBAAmB,SAASc,EAAEK,EAAE,CAAC,OAAOyB,EAAE,QAAQ,mBAAmB9B,EAAEK,CAAC,CAAC,EAAEnB,EAAQ,gBAAgB,SAASc,EAAEK,EAAE,CAAC,OAAOyB,EAAE,QAAQ,gBAAgB9B,EAAEK,CAAC,CAAC,EACzdnB,EAAQ,QAAQ,SAASc,EAAEK,EAAE,CAAC,OAAOyB,EAAE,QAAQ,QAAQ9B,EAAEK,CAAC,CAAC,EAAEnB,EAAQ,WAAW,SAASc,EAAEK,EAAEC,EAAE,CAAC,OAAOwB,EAAE,QAAQ,WAAW9B,EAAEK,EAAEC,CAAC,CAAC,EAAEpB,EAAQ,OAAO,SAASc,EAAE,CAAC,OAAO8B,EAAE,QAAQ,OAAO9B,CAAC,CAAC,EAAEd,EAAQ,SAAS,SAASc,EAAE,CAAC,OAAO8B,EAAE,QAAQ,SAAS9B,CAAC,CAAC,EAAEd,EAAQ,qBAAqB,SAASc,EAAEK,EAAEC,EAAE,CAAC,OAAOwB,EAAE,QAAQ,qBAAqB9B,EAAEK,EAAEC,CAAC,CAAC,EAAEpB,EAAQ,cAAc,UAAU,CAAC,OAAO4C,EAAE,QAAQ,cAAc,CAAC,EAAE5C,EAAQ,QAAQ,WCzBpa,IAAAgD,EAAAC,EAAA,CAAAC,GAAAC,IAAA,cAGEA,EAAO,QAAU,MCHnB,IAAAC,EAAAC,EAAAC,GAAA,cASa,IAAIC,GAAE,IAAiBC,GAAE,OAAO,IAAI,eAAe,EAAEC,GAAE,OAAO,IAAI,gBAAgB,EAAEC,GAAE,OAAO,UAAU,eAAeC,GAAEJ,GAAE,mDAAmD,kBAAkBK,GAAE,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,EAAE,EAClP,SAASC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAEC,EAAE,CAAC,EAAEC,EAAE,KAAKC,EAAE,KAAcJ,IAAT,SAAaG,EAAE,GAAGH,GAAYD,EAAE,MAAX,SAAiBI,EAAE,GAAGJ,EAAE,KAAcA,EAAE,MAAX,SAAiBK,EAAEL,EAAE,KAAK,IAAIE,KAAKF,EAAEL,GAAE,KAAKK,EAAEE,CAAC,GAAG,CAACL,GAAE,eAAeK,CAAC,IAAIC,EAAED,CAAC,EAAEF,EAAEE,CAAC,GAAG,GAAGH,GAAGA,EAAE,aAAa,IAAIG,KAAKF,EAAED,EAAE,aAAaC,EAAWG,EAAED,CAAC,IAAZ,SAAgBC,EAAED,CAAC,EAAEF,EAAEE,CAAC,GAAG,MAAM,CAAC,SAAST,GAAE,KAAKM,EAAE,IAAIK,EAAE,IAAIC,EAAE,MAAMF,EAAE,OAAOP,GAAE,OAAO,CAAC,CAACL,EAAQ,SAASG,GAAEH,EAAQ,IAAIO,EAAEP,EAAQ,KAAKO,ICV1W,IAAAQ,GAAAC,EAAA,CAAAC,GAAAC,IAAA,cAGEA,EAAO,QAAU","names":["require_react_production_min","__commonJSMin","exports","l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","require_react","__commonJSMin","exports","module","require_react_jsx_runtime_production_min","__commonJSMin","exports","f","k","l","m","n","p","q","c","a","g","b","d","e","h","require_jsx_runtime","__commonJSMin","exports","module"]}
|