@moontra/moonui 6.18.0 → 6.19.1
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 +122 -36
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +122 -36
- 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__/progress-warning-error-contrast.test.ts +331 -0
- package/src/components/ui/__tests__/progress.test.tsx +9 -2
- package/src/components/ui/__tests__/slider-secondary-contrast.test.ts +375 -0
- package/src/components/ui/__tests__/slider-warning-error-contrast.test.ts +478 -0
- package/src/components/ui/__tests__/slider.test.tsx +12 -4
- package/src/components/ui/__tests__/table.test.tsx +222 -8
- package/src/components/ui/progress.tsx +25 -2
- package/src/components/ui/slider.tsx +72 -6
- package/src/components/ui/table.tsx +88 -43
- 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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
3
|
+
import { renderToStaticMarkup } from 'react-dom/server'
|
|
3
4
|
import '@testing-library/jest-dom'
|
|
4
5
|
import {
|
|
5
6
|
Table,
|
|
@@ -101,19 +102,21 @@ describe('Table Components', () => {
|
|
|
101
102
|
render(
|
|
102
103
|
<Table variant="striped" data-testid="table">
|
|
103
104
|
<TableBody data-testid="tbody">
|
|
104
|
-
<TableRow>
|
|
105
|
+
<TableRow data-testid="row">
|
|
105
106
|
<TableCell>Test</TableCell>
|
|
106
107
|
</TableRow>
|
|
107
108
|
</TableBody>
|
|
108
109
|
</Table>
|
|
109
110
|
)
|
|
110
|
-
|
|
111
|
+
|
|
111
112
|
const table = screen.getByTestId('table')
|
|
112
113
|
expect(table).toHaveClass('dark:text-gray-200')
|
|
113
|
-
|
|
114
|
-
// TableBody should have the striped class applied
|
|
114
|
+
|
|
115
115
|
const tbody = screen.getByTestId('tbody')
|
|
116
116
|
expect(tbody).toHaveClass('[&_tr:last-child]:border-0')
|
|
117
|
+
|
|
118
|
+
// #444: zebra SATIR düzeyinde uygulanır — tbody'de değil.
|
|
119
|
+
expect(screen.getByTestId('row')).toHaveClass('odd:bg-muted/50')
|
|
117
120
|
})
|
|
118
121
|
|
|
119
122
|
it('renders card variant correctly', () => {
|
|
@@ -761,21 +764,232 @@ describe('Table Components', () => {
|
|
|
761
764
|
render(
|
|
762
765
|
<Table variant="striped" data-testid="table">
|
|
763
766
|
<TableBody data-testid="tbody">
|
|
764
|
-
<TableRow>
|
|
767
|
+
<TableRow data-testid="row-1">
|
|
765
768
|
<TableCell>Row 1</TableCell>
|
|
766
769
|
</TableRow>
|
|
767
|
-
<TableRow>
|
|
770
|
+
<TableRow data-testid="row-2">
|
|
768
771
|
<TableCell>Row 2</TableCell>
|
|
769
772
|
</TableRow>
|
|
770
773
|
</TableBody>
|
|
771
774
|
</Table>
|
|
772
775
|
)
|
|
773
|
-
|
|
776
|
+
|
|
774
777
|
const table = screen.getByTestId('table')
|
|
775
778
|
expect(table).toHaveClass('dark:text-gray-200')
|
|
776
|
-
|
|
779
|
+
|
|
777
780
|
const tbody = screen.getByTestId('tbody')
|
|
778
781
|
expect(tbody).toHaveClass('[&_tr:last-child]:border-0')
|
|
782
|
+
|
|
783
|
+
// #444: her gövde satırı zebra sınıfını taşır; boyamayı `:nth-child(odd)` seçer.
|
|
784
|
+
expect(screen.getByTestId('row-1')).toHaveClass('odd:bg-muted/50')
|
|
785
|
+
expect(screen.getByTestId('row-2')).toHaveClass('odd:bg-muted/50')
|
|
786
|
+
})
|
|
787
|
+
})
|
|
788
|
+
|
|
789
|
+
/**
|
|
790
|
+
* #444 — `variant="striped"` HİÇ uygulanmıyordu.
|
|
791
|
+
*
|
|
792
|
+
* Kök neden: `Table`, çocuklarını gezip `child.type === "tbody"` diye STRING
|
|
793
|
+
* karşılaştırıyordu; `TableBody` bir `forwardRef` nesnesi olduğu için koşul daima
|
|
794
|
+
* false'tu. İkinci kusur: hedeflenen `even:[&>tr]:bg-muted/50` sınıfı tbody'nin
|
|
795
|
+
* kendi kardeş sırasına bakıyordu, satırlara değil.
|
|
796
|
+
*
|
|
797
|
+
* Bu blok "sessiz eşitliği" kilitler: striped çıktısı default'tan GERÇEKTEN
|
|
798
|
+
* farklı olmalı. Aşağıdaki testler düzeltme geri alındığında kırmızıya döner.
|
|
799
|
+
*/
|
|
800
|
+
describe('Striped Variant (#444)', () => {
|
|
801
|
+
const rows = (
|
|
802
|
+
<>
|
|
803
|
+
<TableRow>
|
|
804
|
+
<TableCell>Row 1</TableCell>
|
|
805
|
+
</TableRow>
|
|
806
|
+
<TableRow>
|
|
807
|
+
<TableCell>Row 2</TableCell>
|
|
808
|
+
</TableRow>
|
|
809
|
+
<TableRow>
|
|
810
|
+
<TableCell>Row 3</TableCell>
|
|
811
|
+
</TableRow>
|
|
812
|
+
</>
|
|
813
|
+
)
|
|
814
|
+
|
|
815
|
+
const markupFor = (variant: 'default' | 'striped') =>
|
|
816
|
+
renderToStaticMarkup(
|
|
817
|
+
<Table variant={variant}>
|
|
818
|
+
<TableBody>{rows}</TableBody>
|
|
819
|
+
</Table>
|
|
820
|
+
)
|
|
821
|
+
|
|
822
|
+
it('produces markup that actually differs from the default variant', () => {
|
|
823
|
+
const striped = markupFor('striped')
|
|
824
|
+
const plain = markupFor('default')
|
|
825
|
+
|
|
826
|
+
// #444'ün ta kendisi: bu iki çıktı eskiden BİREBİR aynıydı.
|
|
827
|
+
expect(striped).not.toBe(plain)
|
|
828
|
+
expect(striped).toContain('odd:bg-muted/50')
|
|
829
|
+
expect(plain).not.toContain('odd:bg-muted/50')
|
|
830
|
+
})
|
|
831
|
+
|
|
832
|
+
it('never emits the old tbody-level selector', () => {
|
|
833
|
+
// Eski (çalışmayan) desen: tbody'nin kardeş sırasına bakan `even:` seçicisi.
|
|
834
|
+
expect(markupFor('striped')).not.toContain('even:[&>tr]:bg-muted/50')
|
|
835
|
+
})
|
|
836
|
+
|
|
837
|
+
it('applies the zebra class to rows, not to the tbody', () => {
|
|
838
|
+
render(
|
|
839
|
+
<Table variant="striped">
|
|
840
|
+
<TableBody data-testid="tbody">
|
|
841
|
+
<TableRow data-testid="row-1">
|
|
842
|
+
<TableCell>Row 1</TableCell>
|
|
843
|
+
</TableRow>
|
|
844
|
+
<TableRow data-testid="row-2">
|
|
845
|
+
<TableCell>Row 2</TableCell>
|
|
846
|
+
</TableRow>
|
|
847
|
+
</TableBody>
|
|
848
|
+
</Table>
|
|
849
|
+
)
|
|
850
|
+
|
|
851
|
+
expect(screen.getByTestId('tbody').className).not.toMatch(/bg-muted/)
|
|
852
|
+
expect(screen.getByTestId('row-1')).toHaveClass('odd:bg-muted/50')
|
|
853
|
+
expect(screen.getByTestId('row-2')).toHaveClass('odd:bg-muted/50')
|
|
854
|
+
})
|
|
855
|
+
|
|
856
|
+
it('does not stripe rows in non-striped variants', () => {
|
|
857
|
+
const { rerender } = render(
|
|
858
|
+
<Table variant="default">
|
|
859
|
+
<TableBody>
|
|
860
|
+
<TableRow data-testid="row">
|
|
861
|
+
<TableCell>Row</TableCell>
|
|
862
|
+
</TableRow>
|
|
863
|
+
</TableBody>
|
|
864
|
+
</Table>
|
|
865
|
+
)
|
|
866
|
+
expect(screen.getByTestId('row')).not.toHaveClass('odd:bg-muted/50')
|
|
867
|
+
|
|
868
|
+
rerender(
|
|
869
|
+
<Table variant="bordered">
|
|
870
|
+
<TableBody>
|
|
871
|
+
<TableRow data-testid="row">
|
|
872
|
+
<TableCell>Row</TableCell>
|
|
873
|
+
</TableRow>
|
|
874
|
+
</TableBody>
|
|
875
|
+
</Table>
|
|
876
|
+
)
|
|
877
|
+
expect(screen.getByTestId('row')).not.toHaveClass('odd:bg-muted/50')
|
|
878
|
+
})
|
|
879
|
+
|
|
880
|
+
it('leaves header and footer rows unstriped', () => {
|
|
881
|
+
render(
|
|
882
|
+
<Table variant="striped">
|
|
883
|
+
<TableHeader>
|
|
884
|
+
<TableRow data-testid="header-row">
|
|
885
|
+
<TableHead>Name</TableHead>
|
|
886
|
+
</TableRow>
|
|
887
|
+
</TableHeader>
|
|
888
|
+
<TableBody>
|
|
889
|
+
<TableRow data-testid="body-row">
|
|
890
|
+
<TableCell>John</TableCell>
|
|
891
|
+
</TableRow>
|
|
892
|
+
</TableBody>
|
|
893
|
+
<TableFooter>
|
|
894
|
+
<TableRow data-testid="footer-row">
|
|
895
|
+
<TableCell>Total</TableCell>
|
|
896
|
+
</TableRow>
|
|
897
|
+
</TableFooter>
|
|
898
|
+
</Table>
|
|
899
|
+
)
|
|
900
|
+
|
|
901
|
+
expect(screen.getByTestId('body-row')).toHaveClass('odd:bg-muted/50')
|
|
902
|
+
// Başlık satırı ve `bg-primary` zeminli altbilgi satırı zebraya girmez.
|
|
903
|
+
expect(screen.getByTestId('header-row')).not.toHaveClass('odd:bg-muted/50')
|
|
904
|
+
expect(screen.getByTestId('footer-row')).not.toHaveClass('odd:bg-muted/50')
|
|
905
|
+
})
|
|
906
|
+
|
|
907
|
+
it('reaches rows through fragments, .map() and wrapper components', () => {
|
|
908
|
+
// Eski `React.Children.map` + tip karşılaştırması bu yapıların hiçbirinde
|
|
909
|
+
// çalışamazdı; bağlam tabanlı çözüm derinlikten bağımsızdır.
|
|
910
|
+
const RowGroup = ({ items }: { items: string[] }) => (
|
|
911
|
+
<>
|
|
912
|
+
{items.map((item) => (
|
|
913
|
+
<TableRow key={item} data-testid={`row-${item}`}>
|
|
914
|
+
<TableCell>{item}</TableCell>
|
|
915
|
+
</TableRow>
|
|
916
|
+
))}
|
|
917
|
+
</>
|
|
918
|
+
)
|
|
919
|
+
|
|
920
|
+
render(
|
|
921
|
+
<Table variant="striped">
|
|
922
|
+
<TableBody>
|
|
923
|
+
<RowGroup items={['a', 'b']} />
|
|
924
|
+
</TableBody>
|
|
925
|
+
</Table>
|
|
926
|
+
)
|
|
927
|
+
|
|
928
|
+
expect(screen.getByTestId('row-a')).toHaveClass('odd:bg-muted/50')
|
|
929
|
+
expect(screen.getByTestId('row-b')).toHaveClass('odd:bg-muted/50')
|
|
930
|
+
})
|
|
931
|
+
|
|
932
|
+
it('also stripes rows placed inside a raw <tbody>', () => {
|
|
933
|
+
render(
|
|
934
|
+
<Table variant="striped">
|
|
935
|
+
<tbody>
|
|
936
|
+
<TableRow data-testid="row">
|
|
937
|
+
<TableCell>Row</TableCell>
|
|
938
|
+
</TableRow>
|
|
939
|
+
</tbody>
|
|
940
|
+
</Table>
|
|
941
|
+
)
|
|
942
|
+
|
|
943
|
+
expect(screen.getByTestId('row')).toHaveClass('odd:bg-muted/50')
|
|
944
|
+
})
|
|
945
|
+
|
|
946
|
+
it('keeps hover feedback distinguishable from the stripe', () => {
|
|
947
|
+
render(
|
|
948
|
+
<Table variant="striped">
|
|
949
|
+
<TableBody>
|
|
950
|
+
<TableRow data-testid="row">
|
|
951
|
+
<TableCell>Row</TableCell>
|
|
952
|
+
</TableRow>
|
|
953
|
+
</TableBody>
|
|
954
|
+
</Table>
|
|
955
|
+
)
|
|
956
|
+
|
|
957
|
+
const row = screen.getByTestId('row')
|
|
958
|
+
// Varsayılan hover (`bg-muted/50`) şeritle AYNI renk olurdu → görünmez hover.
|
|
959
|
+
expect(row).toHaveClass('hover:bg-accent')
|
|
960
|
+
expect(row).not.toHaveClass('hover:bg-muted/50')
|
|
961
|
+
})
|
|
962
|
+
|
|
963
|
+
it('keeps the selected state distinct from the stripe colour', () => {
|
|
964
|
+
render(
|
|
965
|
+
<Table variant="striped">
|
|
966
|
+
<TableBody>
|
|
967
|
+
<TableRow data-testid="row" data-state="selected">
|
|
968
|
+
<TableCell>Row</TableCell>
|
|
969
|
+
</TableRow>
|
|
970
|
+
</TableBody>
|
|
971
|
+
</Table>
|
|
972
|
+
)
|
|
973
|
+
|
|
974
|
+
const row = screen.getByTestId('row')
|
|
975
|
+
// Şerit `bg-muted/50`, seçili `bg-muted` — tam opaklık BİLEREK şeritte
|
|
976
|
+
// kullanılmadı, yoksa seçili satır seçilmemişten ayırt edilemezdi.
|
|
977
|
+
expect(row).toHaveClass('data-[state=selected]:bg-muted')
|
|
978
|
+
expect(row).toHaveClass('odd:bg-muted/50')
|
|
979
|
+
})
|
|
980
|
+
|
|
981
|
+
it('still lets consumer classes win over the stripe', () => {
|
|
982
|
+
render(
|
|
983
|
+
<Table variant="striped">
|
|
984
|
+
<TableBody>
|
|
985
|
+
<TableRow className="bg-red-500" data-testid="row">
|
|
986
|
+
<TableCell>Row</TableCell>
|
|
987
|
+
</TableRow>
|
|
988
|
+
</TableBody>
|
|
989
|
+
</Table>
|
|
990
|
+
)
|
|
991
|
+
|
|
992
|
+
expect(screen.getByTestId('row')).toHaveClass('bg-red-500', 'odd:bg-muted/50')
|
|
779
993
|
})
|
|
780
994
|
})
|
|
781
995
|
|
|
@@ -84,8 +84,31 @@ const progressIndicatorVariants = cva(
|
|
|
84
84
|
// Regresyon: __tests__/progress-secondary-contrast.test.ts
|
|
85
85
|
secondary: "bg-[rgb(var(--secondary-500))]",
|
|
86
86
|
success: "bg-success",
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
// #424 (#372'nin kardeşi): dolgu `bg-warning`/`bg-error` idi — track
|
|
88
|
+
// (`bg-warning/20` · `bg-error/20`) AYNI token'ın alfalı hâli olduğundan
|
|
89
|
+
// LIGHT temada ayrım kayboluyordu: warning 1.83 · error 2.89 (eşik 3:1,
|
|
90
|
+
// WCAG 1.4.11). DARK tema zaten temizdi (warning 6.97 · error 4.46).
|
|
91
|
+
//
|
|
92
|
+
// KÖK NEDEN: `--warning` ve `--error` tokens.css'te `.dark` bloğunda
|
|
93
|
+
// EZİLMİYOR — iki temada aynı renk. Kardeşleri `--success` (light 29% →
|
|
94
|
+
// dark 36%) ve `--primary` tema-uyarlanabilir olduğu için eşiği geçiyor;
|
|
95
|
+
// bu iki aile o uyarlamadan yoksun kaldığı için light'ta kalıyor.
|
|
96
|
+
//
|
|
97
|
+
// ÇÖZÜM: eksik tema-uyarlamasını component düzeyinde ver — light'ta
|
|
98
|
+
// skalanın -700 kademesine in, dark'ta semantik token'a DOKUNMA.
|
|
99
|
+
// Tema-KÖR bir -700 ataması dark'ı kırardı (docs kartında warning 2.50 ✗
|
|
100
|
+
// · error 2.23 ✗); `dark:` ayrımı tam olarak bunu önler ve dark render'ı
|
|
101
|
+
// bit-bit aynı bırakır. Aynı desen badge.tsx:51-63'te zaten kullanılıyor.
|
|
102
|
+
// Track alfaları BİLEREK `/20` kaldı: altı varyantın tamamı o konvansiyonu
|
|
103
|
+
// paylaşıyor ve alfayı düşürmek track↔zemin ayrımını zayıflatırdı
|
|
104
|
+
// (warning 1.162 → 1.081). Ölçülen sonuç — warning: light 4.24 ✓ /
|
|
105
|
+
// dark 6.97 ✓ (docs kartı #111827: 5.77) · error: light 4.95 ✓ /
|
|
106
|
+
// dark 4.46 ✓ (docs kartı 3.82). Skala token'ları RGB üçlüsüdür
|
|
107
|
+
// (semantiklerin HSL'inden farklı) → `rgb(var(--x-700))` kompozisyonu;
|
|
108
|
+
// `bg-warning-700` YAZILMADI, preset o sınıfı üretmez (#307 ölü-sınıf).
|
|
109
|
+
// Regresyon: __tests__/progress-warning-error-contrast.test.ts
|
|
110
|
+
warning: "bg-[rgb(var(--warning-700))] dark:bg-warning",
|
|
111
|
+
error: "bg-[rgb(var(--error-700))] dark:bg-error",
|
|
89
112
|
},
|
|
90
113
|
animation: {
|
|
91
114
|
default: "transition-all duration-500",
|
|
@@ -58,11 +58,49 @@ 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
|
-
|
|
65
|
-
|
|
77
|
+
// #442 (#424/PR #440'ın slider ikizi): range `bg-warning`/`bg-error` idi —
|
|
78
|
+
// track (`bg-warning/20` · `bg-error/20`) AYNI token'ın alfalı hâli olduğundan
|
|
79
|
+
// LIGHT temada ayrım kayboluyordu: warning 1.835 · error 2.893 (eşik 3:1,
|
|
80
|
+
// WCAG 1.4.11 non-text). DARK tema zaten temizdi (warning 6.97 · error 4.46).
|
|
81
|
+
//
|
|
82
|
+
// KÖK NEDEN: `--warning` ve `--error` tokens.css'in `.dark` bloğunda
|
|
83
|
+
// EZİLMİYOR — iki temada aynı renk. Kardeşleri tema-uyarlanabilir olduğu
|
|
84
|
+
// için geçiyor (`--success` light %29 → dark %36; ölçüm: success A ekseni
|
|
85
|
+
// light 3.73 / dark 4.83). Bu iki aile o uyarlamadan yoksun.
|
|
86
|
+
//
|
|
87
|
+
// ÇÖZÜM: eksik tema-uyarlamasını component düzeyinde ver — light'ta skalanın
|
|
88
|
+
// -700 kademesine in, dark'ta semantik token'a DOKUNMA (dark render bit-bit
|
|
89
|
+
// aynı kalır, regresyon yüzeyi sıfır). Tema-KÖR bir -700 ataması dark'ı
|
|
90
|
+
// kırardı: gerçek docs kartı (#111827) üstünde warning 2.499 ✗ · error 2.232 ✗.
|
|
91
|
+
// Tam skala taraması (11 kademe × 2 aile × 3 zemin × 2 tema) track `/20` iken
|
|
92
|
+
// iki temayı birden geçen kademe kümesini BOŞ buluyor → `dark:` ayrımı ZORUNLU;
|
|
93
|
+
// #389'un tek-orta-ton (`--secondary-500`) çözümü burada uygulanamaz, çünkü
|
|
94
|
+
// orada `--secondary` temaya göre değişiyordu. Aynı `dark:` deseni badge.tsx:51-63
|
|
95
|
+
// ve progress.tsx:110-111'de zaten kullanılıyor.
|
|
96
|
+
// Ölçülen sonuç — warning: light 1.835 → 4.235 ✓ · error: light 2.893 → 4.950 ✓
|
|
97
|
+
// (dark değişmedi: 6.97 / 4.46; docs kartı 5.77 / 3.82).
|
|
98
|
+
// Skala token'ları RGB üçlüsüdür (semantiklerin HSL'inden farklı) →
|
|
99
|
+
// `rgb(var(--x-700))` kompozisyonu; `bg-warning-700` YAZILMADI, preset bu
|
|
100
|
+
// ailelere sayısal skala açmıyor (#307 ölü-sınıf tuzağı).
|
|
101
|
+
// Regresyon: __tests__/slider-warning-error-contrast.test.ts
|
|
102
|
+
warning: "bg-[rgb(var(--warning-700))] dark:bg-warning",
|
|
103
|
+
error: "bg-[rgb(var(--error-700))] dark:bg-error",
|
|
66
104
|
},
|
|
67
105
|
},
|
|
68
106
|
defaultVariants: {
|
|
@@ -78,11 +116,39 @@ const sliderThumbVariants = cva(
|
|
|
78
116
|
variant: {
|
|
79
117
|
default: "border-foreground bg-background",
|
|
80
118
|
primary: "border-primary bg-background",
|
|
81
|
-
|
|
119
|
+
// #407 (P2, #389'un range eksenine EK ayrı eksen): tutamacın kenarlığı
|
|
120
|
+
// `border-secondary`, dolgusu `bg-background` idi. Bu bileşen↔sayfa-zemini
|
|
121
|
+
// ekseni: `--secondary` light'ta neredeyse beyaz (rgb(235,239,245)), dark'ta
|
|
122
|
+
// `--background` ile neredeyse aynı → kenarlık 1.15 (light) / 1.01 (dark)
|
|
123
|
+
// oranında kalıyor, secondary slider'ın tutamacı zeminde kayboluyordu.
|
|
124
|
+
// #389'da bilerek kapsam dışıydı (mevcut kusuru testle "doğru" ilan etmemek için).
|
|
125
|
+
// Non-text UI bileşeni → WCAG 1.4.11 ≥3:1. Skala taraması bu eksende de TEK
|
|
126
|
+
// kademe bırakıyor — `--secondary-500`: light 4.76, dark 4.23 (gerçek kart
|
|
127
|
+
// #111827 üstünde 3.73); 400 light'ta 2.56 ✗, 600 dark'ta 2.66 ✗. Range ile
|
|
128
|
+
// aynı kademe: tutamaç ve dolgu tek renkte okunur.
|
|
129
|
+
// Regresyon: __tests__/slider-secondary-contrast.test.ts
|
|
130
|
+
secondary: "border-[rgb(var(--secondary-500))] bg-background",
|
|
82
131
|
accent: "border-accent bg-background",
|
|
83
132
|
success: "border-success bg-background",
|
|
84
|
-
|
|
85
|
-
|
|
133
|
+
// #442 EKSEN B (range'den FARKLI eksen: bileşen↔sayfa-zemini) — #407'de
|
|
134
|
+
// `secondary` için açılan eksenin warning/error karşılığı. Tutamacın dolgusu
|
|
135
|
+
// `bg-background`, yani zeminin kendisi; ayırt edilebilirliği YALNIZ kenarlık
|
|
136
|
+
// taşır → non-text UI bileşeni, WCAG 1.4.11 ≥3:1.
|
|
137
|
+
// ÖLÇÜLEN (eski değerler): warning light **2.133 ✗** · error light 3.781 ✓;
|
|
138
|
+
// dark ikisi de rahat geçiyordu (9.45 / 5.33).
|
|
139
|
+
//
|
|
140
|
+
// `warning` KUSURLUYDU, düzeltildi. `error` bu eksende zaten geçiyordu ama
|
|
141
|
+
// yine de aynı ifadeye çekildi: range light'ta -700'e indiği için kenarlık
|
|
142
|
+
// `border-error`da bırakılsaydı LIGHT temada dolgu rgb(185,28,28), tutamaç
|
|
143
|
+
// rgb(239,67,67) olurdu — düzeltmenin KENDİSİ iki-tonlu bir görünüm üretirdi.
|
|
144
|
+
// #407'nin gerekçesi birebir geçerli: "tutamaç ve dolgu tek renkte okunur".
|
|
145
|
+
// Değişim kontrastı düşürmüyor, artırıyor: error light 3.781 → 6.470.
|
|
146
|
+
// Dark'ta `dark:border-*` semantik token'ı koruduğu için render bit-bit aynı.
|
|
147
|
+
// Ölçülen sonuç — warning: light 2.133 → 4.923 ✓ · error: light 3.781 → 6.470 ✓
|
|
148
|
+
// (dark değişmedi: 9.45 / 5.33; docs kartı 8.32 / 4.69).
|
|
149
|
+
// Regresyon: __tests__/slider-warning-error-contrast.test.ts
|
|
150
|
+
warning: "border-[rgb(var(--warning-700))] dark:border-warning bg-background",
|
|
151
|
+
error: "border-[rgb(var(--error-700))] dark:border-error bg-background",
|
|
86
152
|
},
|
|
87
153
|
size: {
|
|
88
154
|
sm: "h-3 w-3",
|
|
@@ -26,6 +26,51 @@ interface TableSortContextValue {
|
|
|
26
26
|
|
|
27
27
|
const TableSortContext = React.createContext<TableSortContextValue | null>(null);
|
|
28
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Zebra (striped) bağlamı (#444).
|
|
31
|
+
*
|
|
32
|
+
* ESKİ HÂLİ İKİ AYRI NEDENLE ÇALIŞMIYORDU:
|
|
33
|
+
* 1. `Table`, çocuklarını gezip `child.type === "tbody"` diye STRING
|
|
34
|
+
* karşılaştırıyordu. `TableBody` bir `React.forwardRef` nesnesidir; bu koşul
|
|
35
|
+
* hiçbir zaman doğru olmaz → `striped` sınıfı HİÇ eklenmiyordu (ölçüldü:
|
|
36
|
+
* `variant="striped"` çıktısı `variant="default"` ile birebir aynıydı).
|
|
37
|
+
* 2. Koşul düzelse bile hedeflenen sınıf yanlıştı: `even:[&>tr]:bg-muted/50`
|
|
38
|
+
* içindeki `even:` tbody'nin KENDİ kardeş sırasına bakar (tek tbody varsa hiç
|
|
39
|
+
* eşleşmez), satırlara değil.
|
|
40
|
+
*
|
|
41
|
+
* Artık `Table` yalnızca bir bayrak YAYINLAR; zebra sınıfını `TableRow` kendi
|
|
42
|
+
* üstüne koyar. Böylece eleman-tipi karşılaştırması tamamen kalkar: satırlar
|
|
43
|
+
* fragment, `.map()`, ara sarmalayıcı bir component ya da düz `<tbody>` içinden
|
|
44
|
+
* gelse de çalışır. `TableHeader`/`TableFooter` bayrağı `false`'a çevirir —
|
|
45
|
+
* başlık satırı ve `bg-primary` zeminli altbilgi satırı çizgilenmemelidir.
|
|
46
|
+
*/
|
|
47
|
+
const TableStripedContext = React.createContext(false);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Zebra + etkileşim yüzeyleri (#444) — ölçülmüş değerler, tokens.css'e dokunulmadan.
|
|
51
|
+
*
|
|
52
|
+
* `odd:bg-muted/50` → satır düzeyi zebra. `:nth-child(odd)` satırın kendi
|
|
53
|
+
* kardeş sırasına bakar, yani gerçekten 1./3./5. GÖVDE SATIRI boyanır.
|
|
54
|
+
*
|
|
55
|
+
* `hover:bg-accent` → zebra açıkken ZORUNLU: `TableRow`'un varsayılan hover'ı
|
|
56
|
+
* zaten `bg-muted/50`, yani şeritle AYNI renk; override olmasa çizgili satırlarda
|
|
57
|
+
* hover geri bildirimi görünmez olurdu. `--accent` bu tasarım sisteminin kanonik
|
|
58
|
+
* etkileşim yüzeyidir (button ghost/outline, dropdown item aynı token'ı kullanır).
|
|
59
|
+
* `cn()` = twMerge olduğu için `hover:bg-muted/50` ile çakışma CSS sırasına değil,
|
|
60
|
+
* deterministik olarak sona yazılan sınıfa göre çözülür.
|
|
61
|
+
*
|
|
62
|
+
* `bg-muted` (tam opaklık) BİLEREK seçilmedi: `data-[state=selected]:bg-muted` ile
|
|
63
|
+
* birebir aynı renk olurdu ve çizgili tabloda seçili satır seçilmemişten
|
|
64
|
+
* ayırt edilemezdi. Ölçülen CIE L* değerleri (zemin → şerit → seçili → hover):
|
|
65
|
+
* açık tema : 100 → 98.06 → 96.12 → 94.09 (şerit ΔL* 1.94, kontrast 1.05:1)
|
|
66
|
+
* koyu tema : 1.89 → 9.61 → 18.96 → 16.06 (şerit ΔL* 7.72, kontrast 1.17:1)
|
|
67
|
+
* Dört yüzey de her iki temada ayrı; hover her satır paritesinde görünür değişir.
|
|
68
|
+
* WCAG 1.4.11'in 3:1 eşiği zebraya UYGULANMAZ — şerit dekoratif bir tarama
|
|
69
|
+
* yardımıdır, içeriği anlamak için gerekli bir grafik ya da UI bileşeni değildir
|
|
70
|
+
* (veri hücre metninde; metin kontrastı her iki temada AA üstünde kalır).
|
|
71
|
+
*/
|
|
72
|
+
const STRIPED_ROW_CLASSES = "odd:bg-muted/50 hover:bg-accent";
|
|
73
|
+
|
|
29
74
|
/** asc → desc → null → asc döngüsü */
|
|
30
75
|
function nextSortDirection(current: SortDirection): SortDirection {
|
|
31
76
|
if (current === "asc") return "desc";
|
|
@@ -114,9 +159,10 @@ const Table = React.forwardRef<
|
|
|
114
159
|
onRowSelectionChange: _onRowSelectionChange,
|
|
115
160
|
disableRowSelection: _disableRowSelection,
|
|
116
161
|
getRowId: _getRowId,
|
|
117
|
-
|
|
162
|
+
children,
|
|
163
|
+
...props
|
|
118
164
|
}, ref) => {
|
|
119
|
-
//
|
|
165
|
+
// #444: zebra bir bayrak olarak yayınlanır; sınıfı TableRow kendi üstüne koyar.
|
|
120
166
|
const striped = variant === "striped";
|
|
121
167
|
|
|
122
168
|
// #321: sıralama prop'ları alt başlıklara bağlam üzerinden ulaşır
|
|
@@ -124,21 +170,7 @@ const Table = React.forwardRef<
|
|
|
124
170
|
() => ({ sortColumn, sortDirection, onSortChange }),
|
|
125
171
|
[sortColumn, sortDirection, onSortChange]
|
|
126
172
|
);
|
|
127
|
-
|
|
128
|
-
// Çocukları güvenli bir şekilde işle ve tip kontrollerini doğru yap
|
|
129
|
-
const childrenWithProps = React.Children.map(props.children, (child) => {
|
|
130
|
-
if (React.isValidElement(child)) {
|
|
131
|
-
if (child.type === "tbody") {
|
|
132
|
-
// Tip güvenliği için props'ları düzgün şekilde ele alıyoruz
|
|
133
|
-
const tbodyProps = child.props as Record<string, unknown>;
|
|
134
|
-
return React.cloneElement(child as React.ReactElement<React.HTMLAttributes<HTMLTableSectionElement>>, {
|
|
135
|
-
className: cn(tbodyProps.className as string | undefined, striped && "even:[&>tr]:bg-muted/50")
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return child;
|
|
140
|
-
});
|
|
141
|
-
|
|
173
|
+
|
|
142
174
|
return (
|
|
143
175
|
<div className="relative w-full overflow-auto">
|
|
144
176
|
{/* Yükleniyor durumu için overlay */}
|
|
@@ -149,19 +181,20 @@ const Table = React.forwardRef<
|
|
|
149
181
|
)}
|
|
150
182
|
|
|
151
183
|
<TableSortContext.Provider value={sortContextValue}>
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
184
|
+
<TableStripedContext.Provider value={striped}>
|
|
185
|
+
<table
|
|
186
|
+
ref={ref}
|
|
187
|
+
className={cn(
|
|
188
|
+
tableVariants({ variant, size }),
|
|
189
|
+
loading && "opacity-70",
|
|
190
|
+
className
|
|
191
|
+
)}
|
|
192
|
+
{...props}
|
|
193
|
+
>
|
|
194
|
+
{children}
|
|
195
|
+
</table>
|
|
196
|
+
</TableStripedContext.Provider>
|
|
163
197
|
</TableSortContext.Provider>
|
|
164
|
-
|
|
165
198
|
</div>
|
|
166
199
|
);
|
|
167
200
|
});
|
|
@@ -170,8 +203,11 @@ Table.displayName = "Table";
|
|
|
170
203
|
const TableHeader = React.forwardRef<
|
|
171
204
|
HTMLTableSectionElement,
|
|
172
205
|
React.HTMLAttributes<HTMLTableSectionElement>
|
|
173
|
-
>(({ className, ...props }, ref) => (
|
|
174
|
-
<thead ref={ref} className={cn("moonui-theme", "[&_tr]:border-b", className)} {...props}
|
|
206
|
+
>(({ className, children, ...props }, ref) => (
|
|
207
|
+
<thead ref={ref} className={cn("moonui-theme", "[&_tr]:border-b", className)} {...props}>
|
|
208
|
+
{/* #444: başlık satırı zebraya dahil değildir */}
|
|
209
|
+
<TableStripedContext.Provider value={false}>{children}</TableStripedContext.Provider>
|
|
210
|
+
</thead>
|
|
175
211
|
));
|
|
176
212
|
TableHeader.displayName = "TableHeader";
|
|
177
213
|
|
|
@@ -218,28 +254,37 @@ TableBody.displayName = "TableBody";
|
|
|
218
254
|
const TableFooter = React.forwardRef<
|
|
219
255
|
HTMLTableSectionElement,
|
|
220
256
|
React.HTMLAttributes<HTMLTableSectionElement>
|
|
221
|
-
>(({ className, ...props }, ref) => (
|
|
257
|
+
>(({ className, children, ...props }, ref) => (
|
|
222
258
|
<tfoot
|
|
223
259
|
ref={ref}
|
|
224
260
|
className={cn("moonui-theme", "bg-primary text-primary-foreground font-medium", className)}
|
|
225
261
|
{...props}
|
|
226
|
-
|
|
262
|
+
>
|
|
263
|
+
{/* #444: altbilginin kendi `bg-primary` zemini var; şerit onu bozmamalı */}
|
|
264
|
+
<TableStripedContext.Provider value={false}>{children}</TableStripedContext.Provider>
|
|
265
|
+
</tfoot>
|
|
227
266
|
));
|
|
228
267
|
TableFooter.displayName = "TableFooter";
|
|
229
268
|
|
|
230
269
|
const TableRow = React.forwardRef<
|
|
231
270
|
HTMLTableRowElement,
|
|
232
271
|
React.HTMLAttributes<HTMLTableRowElement>
|
|
233
|
-
>(({ className, ...props }, ref) =>
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
272
|
+
>(({ className, ...props }, ref) => {
|
|
273
|
+
// #444: zebra bayrağı Table'dan gelir; TableHeader/TableFooter içinde false'tur.
|
|
274
|
+
const striped = React.useContext(TableStripedContext);
|
|
275
|
+
|
|
276
|
+
return (
|
|
277
|
+
<tr
|
|
278
|
+
ref={ref}
|
|
279
|
+
className={cn(
|
|
280
|
+
"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
|
|
281
|
+
striped && STRIPED_ROW_CLASSES,
|
|
282
|
+
className
|
|
283
|
+
)}
|
|
284
|
+
{...props}
|
|
285
|
+
/>
|
|
286
|
+
);
|
|
287
|
+
});
|
|
243
288
|
TableRow.displayName = "TableRow";
|
|
244
289
|
|
|
245
290
|
interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {
|
|
@@ -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
|