@puzzle-ui/ui 0.3.0 → 0.5.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/README.md +70 -70
- package/dist/components/actions/button/button.css +5 -2
- package/dist/components/actions/button-group/button-group.css +16 -17
- package/dist/components/data-display/badge/badge.css +15 -2
- package/dist/components/data-display/badge/index.cjs +13 -2
- package/dist/components/data-display/badge/index.cjs.map +1 -1
- package/dist/components/data-display/badge/index.d.cts +7 -2
- package/dist/components/data-display/badge/index.d.ts +7 -2
- package/dist/components/data-display/badge/index.js +13 -2
- package/dist/components/data-display/badge/index.js.map +1 -1
- package/dist/components/data-display/empty-state/empty-state.css +128 -0
- package/dist/components/data-display/empty-state/empty-state.utils.cjs +6 -0
- package/dist/components/data-display/empty-state/empty-state.utils.cjs.map +1 -0
- package/dist/components/data-display/empty-state/empty-state.utils.js +6 -0
- package/dist/components/data-display/empty-state/empty-state.utils.js.map +1 -0
- package/dist/components/data-display/empty-state/index.cjs +49 -0
- package/dist/components/data-display/empty-state/index.cjs.map +1 -0
- package/dist/components/data-display/empty-state/index.d.cts +19 -0
- package/dist/components/data-display/empty-state/index.d.ts +19 -0
- package/dist/components/data-display/empty-state/index.js +44 -0
- package/dist/components/data-display/empty-state/index.js.map +1 -0
- package/dist/components/data-display/rating/index.cjs +84 -0
- package/dist/components/data-display/rating/index.cjs.map +1 -0
- package/dist/components/data-display/rating/index.d.cts +3 -0
- package/dist/components/data-display/rating/index.d.ts +3 -0
- package/dist/components/data-display/rating/index.js +84 -0
- package/dist/components/data-display/rating/index.js.map +1 -0
- package/dist/components/data-display/rating/rating.css +72 -0
- package/dist/components/data-display/rating/rating.types.d.cts +15 -0
- package/dist/components/data-display/rating/rating.types.d.ts +15 -0
- package/dist/components/data-display/rating/rating.utils.cjs +27 -0
- package/dist/components/data-display/rating/rating.utils.cjs.map +1 -0
- package/dist/components/data-display/rating/rating.utils.js +25 -0
- package/dist/components/data-display/rating/rating.utils.js.map +1 -0
- package/dist/components/editors/text-editor/editor.cjs.map +1 -1
- package/dist/components/editors/text-editor/editor.js.map +1 -1
- package/dist/components/editors/text-editor/text-document.cjs.map +1 -1
- package/dist/components/editors/text-editor/text-document.js.map +1 -1
- package/dist/components/editors/text-editor/text-parser.cjs.map +1 -1
- package/dist/components/editors/text-editor/text-parser.js.map +1 -1
- package/dist/components/editors/text-editor/text-renderer.cjs.map +1 -1
- package/dist/components/editors/text-editor/text-renderer.js.map +1 -1
- package/dist/components/forms/autocomplete/index.cjs.map +1 -1
- package/dist/components/forms/autocomplete/index.js.map +1 -1
- package/dist/components/forms/checkbox/checkbox.css +2 -10
- package/dist/components/forms/color-picker/color-picker.css +351 -0
- package/dist/components/forms/color-picker/color-picker.types.d.cts +25 -0
- package/dist/components/forms/color-picker/color-picker.types.d.ts +25 -0
- package/dist/components/forms/color-picker/color-picker.utils.cjs +116 -0
- package/dist/components/forms/color-picker/color-picker.utils.cjs.map +1 -0
- package/dist/components/forms/color-picker/color-picker.utils.js +109 -0
- package/dist/components/forms/color-picker/color-picker.utils.js.map +1 -0
- package/dist/components/forms/color-picker/index.cjs +340 -0
- package/dist/components/forms/color-picker/index.cjs.map +1 -0
- package/dist/components/forms/color-picker/index.d.cts +3 -0
- package/dist/components/forms/color-picker/index.d.ts +3 -0
- package/dist/components/forms/color-picker/index.js +340 -0
- package/dist/components/forms/color-picker/index.js.map +1 -0
- package/dist/components/forms/file-upload/file-upload.utils.cjs.map +1 -1
- package/dist/components/forms/file-upload/file-upload.utils.js.map +1 -1
- package/dist/components/forms/input/number-input.js +5 -5
- package/dist/components/forms/input/number-input.js.map +1 -1
- package/dist/components/forms/input-group/index.d.cts +3 -0
- package/dist/components/forms/input-group/index.d.ts +3 -0
- package/dist/components/forms/input-group/input-group.cjs +18 -0
- package/dist/components/forms/input-group/input-group.cjs.map +1 -0
- package/dist/components/forms/input-group/input-group.css +62 -0
- package/dist/components/forms/input-group/input-group.d.cts +7 -0
- package/dist/components/forms/input-group/input-group.d.ts +7 -0
- package/dist/components/forms/input-group/input-group.js +18 -0
- package/dist/components/forms/input-group/input-group.js.map +1 -0
- package/dist/components/forms/input-group/input-group.types.d.cts +7 -0
- package/dist/components/forms/input-group/input-group.types.d.ts +7 -0
- package/dist/components/forms/input-group/input-group.utils.cjs +5 -0
- package/dist/components/forms/input-group/input-group.utils.cjs.map +1 -0
- package/dist/components/forms/input-group/input-group.utils.js +5 -0
- package/dist/components/forms/input-group/input-group.utils.js.map +1 -0
- package/dist/components/forms/radio-group/index.d.cts +2 -1
- package/dist/components/forms/radio-group/index.d.ts +2 -1
- package/dist/components/forms/select/index.cjs.map +1 -1
- package/dist/components/forms/select/index.js.map +1 -1
- package/dist/components/forms/slider/index.cjs +1 -1
- package/dist/components/forms/slider/index.cjs.map +1 -1
- package/dist/components/forms/slider/index.js +1 -1
- package/dist/components/forms/slider/index.js.map +1 -1
- package/dist/components/forms/stepper/index.d.cts +4 -2
- package/dist/components/forms/stepper/index.d.ts +4 -2
- package/dist/components/forms/time-picker/index.cjs +108 -0
- package/dist/components/forms/time-picker/index.cjs.map +1 -0
- package/dist/components/forms/time-picker/index.d.cts +3 -0
- package/dist/components/forms/time-picker/index.d.ts +3 -0
- package/dist/components/forms/time-picker/index.js +108 -0
- package/dist/components/forms/time-picker/index.js.map +1 -0
- package/dist/components/forms/time-picker/time-picker.css +166 -0
- package/dist/components/forms/time-picker/time-picker.types.d.cts +34 -0
- package/dist/components/forms/time-picker/time-picker.types.d.ts +34 -0
- package/dist/components/forms/time-picker/time-picker.utils.cjs +25 -0
- package/dist/components/forms/time-picker/time-picker.utils.cjs.map +1 -0
- package/dist/components/forms/time-picker/time-picker.utils.js +24 -0
- package/dist/components/forms/time-picker/time-picker.utils.js.map +1 -0
- package/dist/components/forms/token-input/index.cjs +189 -0
- package/dist/components/forms/token-input/index.cjs.map +1 -0
- package/dist/components/forms/token-input/index.d.cts +3 -0
- package/dist/components/forms/token-input/index.d.ts +3 -0
- package/dist/components/forms/token-input/index.js +189 -0
- package/dist/components/forms/token-input/index.js.map +1 -0
- package/dist/components/forms/token-input/token-input.css +145 -0
- package/dist/components/forms/token-input/token-input.types.d.cts +48 -0
- package/dist/components/forms/token-input/token-input.types.d.ts +48 -0
- package/dist/components/forms/token-input/token-input.utils.cjs +30 -0
- package/dist/components/forms/token-input/token-input.utils.cjs.map +1 -0
- package/dist/components/forms/token-input/token-input.utils.js +24 -0
- package/dist/components/forms/token-input/token-input.utils.js.map +1 -0
- package/dist/components/layout/aspect-ratio/aspect-ratio.css +14 -0
- package/dist/components/layout/aspect-ratio/aspect-ratio.utils.cjs +11 -0
- package/dist/components/layout/aspect-ratio/aspect-ratio.utils.cjs.map +1 -0
- package/dist/components/layout/aspect-ratio/aspect-ratio.utils.js +11 -0
- package/dist/components/layout/aspect-ratio/aspect-ratio.utils.js.map +1 -0
- package/dist/components/layout/aspect-ratio/index.cjs +16 -0
- package/dist/components/layout/aspect-ratio/index.cjs.map +1 -0
- package/dist/components/layout/aspect-ratio/index.d.cts +11 -0
- package/dist/components/layout/aspect-ratio/index.d.ts +11 -0
- package/dist/components/layout/aspect-ratio/index.js +16 -0
- package/dist/components/layout/aspect-ratio/index.js.map +1 -0
- package/dist/components/layout/container/container.css +1 -0
- package/dist/components/layout/page-layout/page-layout.css +1 -0
- package/dist/components/layout/resizable-panels/index.cjs +1 -1
- package/dist/components/layout/resizable-panels/index.cjs.map +1 -1
- package/dist/components/layout/resizable-panels/index.js +1 -1
- package/dist/components/layout/resizable-panels/index.js.map +1 -1
- package/dist/components/layout/resizable-panels/resizable-panels.utils.cjs.map +1 -1
- package/dist/components/layout/resizable-panels/resizable-panels.utils.js.map +1 -1
- package/dist/components/layout/scroll-area/index.cjs +27 -0
- package/dist/components/layout/scroll-area/index.cjs.map +1 -0
- package/dist/components/layout/scroll-area/index.d.cts +15 -0
- package/dist/components/layout/scroll-area/index.d.ts +15 -0
- package/dist/components/layout/scroll-area/index.js +27 -0
- package/dist/components/layout/scroll-area/index.js.map +1 -0
- package/dist/components/layout/scroll-area/scroll-area.css +25 -0
- package/dist/components/layout/scroll-area/scroll-area.utils.cjs +8 -0
- package/dist/components/layout/scroll-area/scroll-area.utils.cjs.map +1 -0
- package/dist/components/layout/scroll-area/scroll-area.utils.d.cts +2 -0
- package/dist/components/layout/scroll-area/scroll-area.utils.d.ts +2 -0
- package/dist/components/layout/scroll-area/scroll-area.utils.js +8 -0
- package/dist/components/layout/scroll-area/scroll-area.utils.js.map +1 -0
- package/dist/components/layout/section/index.cjs +10 -4
- package/dist/components/layout/section/index.cjs.map +1 -1
- package/dist/components/layout/section/index.d.cts +1 -1
- package/dist/components/layout/section/index.d.ts +1 -1
- package/dist/components/layout/section/index.js +11 -5
- package/dist/components/layout/section/index.js.map +1 -1
- package/dist/components/layout/section/section.css +9 -3
- package/dist/components/layout/section/types.d.cts +5 -5
- package/dist/components/layout/section/types.d.ts +5 -5
- package/dist/components/layout/separator/index.cjs +18 -0
- package/dist/components/layout/separator/index.cjs.map +1 -0
- package/dist/components/layout/separator/index.d.cts +17 -0
- package/dist/components/layout/separator/index.d.ts +17 -0
- package/dist/components/layout/separator/index.js +18 -0
- package/dist/components/layout/separator/index.js.map +1 -0
- package/dist/components/layout/separator/separator.css +15 -0
- package/dist/components/layout/separator/separator.utils.cjs +11 -0
- package/dist/components/layout/separator/separator.utils.cjs.map +1 -0
- package/dist/components/layout/separator/separator.utils.d.cts +2 -0
- package/dist/components/layout/separator/separator.utils.d.ts +2 -0
- package/dist/components/layout/separator/separator.utils.js +11 -0
- package/dist/components/layout/separator/separator.utils.js.map +1 -0
- package/dist/components/layout/stack/index.cjs +18 -2
- package/dist/components/layout/stack/index.cjs.map +1 -1
- package/dist/components/layout/stack/index.d.cts +8 -6
- package/dist/components/layout/stack/index.d.ts +8 -6
- package/dist/components/layout/stack/index.js +18 -2
- package/dist/components/layout/stack/index.js.map +1 -1
- package/dist/components/layout/stack/stack.css +118 -138
- package/dist/components/navigation/accordion/index.cjs.map +1 -1
- package/dist/components/navigation/accordion/index.js.map +1 -1
- package/dist/components/navigation/carousel/index.cjs +5 -2
- package/dist/components/navigation/carousel/index.cjs.map +1 -1
- package/dist/components/navigation/carousel/index.js +5 -2
- package/dist/components/navigation/carousel/index.js.map +1 -1
- package/dist/components/navigation/pagination/index.cjs +146 -0
- package/dist/components/navigation/pagination/index.cjs.map +1 -0
- package/dist/components/navigation/pagination/index.d.cts +3 -0
- package/dist/components/navigation/pagination/index.d.ts +3 -0
- package/dist/components/navigation/pagination/index.js +146 -0
- package/dist/components/navigation/pagination/index.js.map +1 -0
- package/dist/components/navigation/pagination/pagination.css +134 -0
- package/dist/components/navigation/pagination/pagination.types.d.cts +38 -0
- package/dist/components/navigation/pagination/pagination.types.d.ts +38 -0
- package/dist/components/navigation/pagination/pagination.utils.cjs +54 -0
- package/dist/components/navigation/pagination/pagination.utils.cjs.map +1 -0
- package/dist/components/navigation/pagination/pagination.utils.js +53 -0
- package/dist/components/navigation/pagination/pagination.utils.js.map +1 -0
- package/dist/components/navigation/tabs/index.d.cts +3 -2
- package/dist/components/navigation/tabs/index.d.ts +3 -2
- package/dist/components/navigation/tree-view/index.cjs.map +1 -1
- package/dist/components/navigation/tree-view/index.js.map +1 -1
- package/dist/components/overlays/context-menu/context-menu.css +151 -0
- package/dist/components/overlays/context-menu/context-menu.types.d.cts +69 -0
- package/dist/components/overlays/context-menu/context-menu.types.d.ts +69 -0
- package/dist/components/overlays/context-menu/context-menu.utils.cjs +46 -0
- package/dist/components/overlays/context-menu/context-menu.utils.cjs.map +1 -0
- package/dist/components/overlays/context-menu/context-menu.utils.js +40 -0
- package/dist/components/overlays/context-menu/context-menu.utils.js.map +1 -0
- package/dist/components/overlays/context-menu/index.cjs +830 -0
- package/dist/components/overlays/context-menu/index.cjs.map +1 -0
- package/dist/components/overlays/context-menu/index.d.cts +42 -0
- package/dist/components/overlays/context-menu/index.d.ts +42 -0
- package/dist/components/overlays/context-menu/index.js +818 -0
- package/dist/components/overlays/context-menu/index.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs.map +1 -1
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js.map +1 -1
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs.map +1 -1
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js.map +1 -1
- package/dist/components/typography/heading.cjs +6 -2
- package/dist/components/typography/heading.cjs.map +1 -1
- package/dist/components/typography/heading.d.cts +3 -2
- package/dist/components/typography/heading.d.ts +3 -2
- package/dist/components/typography/heading.js +6 -2
- package/dist/components/typography/heading.js.map +1 -1
- package/dist/components/typography/text.cjs +6 -2
- package/dist/components/typography/text.cjs.map +1 -1
- package/dist/components/typography/text.d.cts +3 -2
- package/dist/components/typography/text.d.ts +3 -2
- package/dist/components/typography/text.js +6 -2
- package/dist/components/typography/text.js.map +1 -1
- package/dist/components/utilities/preview/index.cjs +89 -21
- package/dist/components/utilities/preview/index.cjs.map +1 -1
- package/dist/components/utilities/preview/index.d.cts +6 -2
- package/dist/components/utilities/preview/index.d.ts +6 -2
- package/dist/components/utilities/preview/index.js +89 -21
- package/dist/components/utilities/preview/index.js.map +1 -1
- package/dist/components/utilities/preview/preview.css +26 -11
- package/dist/components/utilities/transition/index.d.cts +1 -1
- package/dist/components/utilities/transition/index.d.ts +1 -1
- package/dist/index.cjs +136 -97
- package/dist/index.d.cts +23 -2
- package/dist/index.d.ts +23 -2
- package/dist/index.js +12 -1
- package/package.json +7 -6
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
.puzzle-stack {
|
|
2
|
+
--stack-align-h: flex-start;
|
|
3
|
+
--stack-align-v: flex-start;
|
|
4
|
+
--stack-main-alignment: var(--stack-align-v);
|
|
5
|
+
--stack-cross-alignment: var(--stack-align-h);
|
|
2
6
|
gap: var(--puzzle-space-4, 1rem);
|
|
3
7
|
justify-content: flex-start;
|
|
4
8
|
align-items: stretch;
|
|
5
9
|
display: flex;
|
|
6
10
|
}
|
|
7
11
|
|
|
12
|
+
.puzzle-stack.has-alignment {
|
|
13
|
+
justify-content: var(--stack-main-alignment);
|
|
14
|
+
align-items: var(--stack-cross-alignment);
|
|
15
|
+
}
|
|
16
|
+
|
|
8
17
|
.puzzle-stack.nowrap {
|
|
9
18
|
flex-wrap: nowrap;
|
|
10
19
|
}
|
|
@@ -30,18 +39,20 @@
|
|
|
30
39
|
}
|
|
31
40
|
|
|
32
41
|
.puzzle-stack.gap-md {
|
|
33
|
-
gap: var(--puzzle-space-
|
|
42
|
+
gap: var(--puzzle-space-4, 1rem);
|
|
34
43
|
}
|
|
35
44
|
|
|
36
45
|
.puzzle-stack.gap-lg {
|
|
37
|
-
gap: var(--puzzle-space-
|
|
46
|
+
gap: var(--puzzle-space-8, 2rem);
|
|
38
47
|
}
|
|
39
48
|
|
|
40
49
|
.puzzle-stack.gap-xl {
|
|
41
|
-
gap: var(--puzzle-space-
|
|
50
|
+
gap: var(--puzzle-space-16, 4rem);
|
|
42
51
|
}
|
|
43
52
|
|
|
44
53
|
.puzzle-stack.direction-mobile-row {
|
|
54
|
+
--stack-main-alignment: var(--stack-align-h);
|
|
55
|
+
--stack-cross-alignment: var(--stack-align-v);
|
|
45
56
|
flex-direction: row;
|
|
46
57
|
}
|
|
47
58
|
|
|
@@ -50,6 +61,8 @@
|
|
|
50
61
|
}
|
|
51
62
|
|
|
52
63
|
.puzzle-stack.direction-mobile-col {
|
|
64
|
+
--stack-main-alignment: var(--stack-align-v);
|
|
65
|
+
--stack-cross-alignment: var(--stack-align-h);
|
|
53
66
|
flex-direction: column;
|
|
54
67
|
}
|
|
55
68
|
|
|
@@ -57,52 +70,66 @@
|
|
|
57
70
|
flex-direction: column-reverse;
|
|
58
71
|
}
|
|
59
72
|
|
|
60
|
-
.puzzle-stack.
|
|
61
|
-
|
|
73
|
+
.puzzle-stack.align-h-mobile-start {
|
|
74
|
+
--stack-align-h: flex-start;
|
|
62
75
|
}
|
|
63
76
|
|
|
64
|
-
.puzzle-stack.
|
|
65
|
-
|
|
77
|
+
.puzzle-stack.align-h-mobile-center {
|
|
78
|
+
--stack-align-h: center;
|
|
66
79
|
}
|
|
67
80
|
|
|
68
|
-
.puzzle-stack.
|
|
69
|
-
|
|
81
|
+
.puzzle-stack.align-h-mobile-end {
|
|
82
|
+
--stack-align-h: flex-end;
|
|
70
83
|
}
|
|
71
84
|
|
|
72
|
-
.puzzle-stack.
|
|
73
|
-
|
|
85
|
+
.puzzle-stack.align-h-mobile-stretch {
|
|
86
|
+
--stack-align-h: stretch;
|
|
74
87
|
}
|
|
75
88
|
|
|
76
|
-
.puzzle-stack.
|
|
77
|
-
|
|
89
|
+
.puzzle-stack.align-h-mobile-around {
|
|
90
|
+
--stack-align-h: space-around;
|
|
78
91
|
}
|
|
79
92
|
|
|
80
|
-
.puzzle-stack.
|
|
81
|
-
|
|
93
|
+
.puzzle-stack.align-h-mobile-between {
|
|
94
|
+
--stack-align-h: space-between;
|
|
82
95
|
}
|
|
83
96
|
|
|
84
|
-
.puzzle-stack.
|
|
85
|
-
|
|
97
|
+
.puzzle-stack.align-h-mobile-evenly {
|
|
98
|
+
--stack-align-h: space-evenly;
|
|
86
99
|
}
|
|
87
100
|
|
|
88
|
-
.puzzle-stack.
|
|
89
|
-
align-
|
|
101
|
+
.puzzle-stack.align-v-mobile-start {
|
|
102
|
+
--stack-align-v: flex-start;
|
|
90
103
|
}
|
|
91
104
|
|
|
92
|
-
.puzzle-stack.
|
|
93
|
-
align-
|
|
105
|
+
.puzzle-stack.align-v-mobile-center {
|
|
106
|
+
--stack-align-v: center;
|
|
94
107
|
}
|
|
95
108
|
|
|
96
|
-
.puzzle-stack.
|
|
97
|
-
align-
|
|
109
|
+
.puzzle-stack.align-v-mobile-end {
|
|
110
|
+
--stack-align-v: flex-end;
|
|
98
111
|
}
|
|
99
112
|
|
|
100
|
-
.puzzle-stack.
|
|
101
|
-
align-
|
|
113
|
+
.puzzle-stack.align-v-mobile-stretch {
|
|
114
|
+
--stack-align-v: stretch;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.puzzle-stack.align-v-mobile-around {
|
|
118
|
+
--stack-align-v: space-around;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.puzzle-stack.align-v-mobile-between {
|
|
122
|
+
--stack-align-v: space-between;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.puzzle-stack.align-v-mobile-evenly {
|
|
126
|
+
--stack-align-v: space-evenly;
|
|
102
127
|
}
|
|
103
128
|
|
|
104
129
|
@media (width >= 768px) {
|
|
105
130
|
.puzzle-stack.direction-tablet-row {
|
|
131
|
+
--stack-main-alignment: var(--stack-align-h);
|
|
132
|
+
--stack-cross-alignment: var(--stack-align-v);
|
|
106
133
|
flex-direction: row;
|
|
107
134
|
}
|
|
108
135
|
|
|
@@ -111,6 +138,8 @@
|
|
|
111
138
|
}
|
|
112
139
|
|
|
113
140
|
.puzzle-stack.direction-tablet-col {
|
|
141
|
+
--stack-main-alignment: var(--stack-align-v);
|
|
142
|
+
--stack-cross-alignment: var(--stack-align-h);
|
|
114
143
|
flex-direction: column;
|
|
115
144
|
}
|
|
116
145
|
|
|
@@ -118,58 +147,67 @@
|
|
|
118
147
|
flex-direction: column-reverse;
|
|
119
148
|
}
|
|
120
149
|
|
|
121
|
-
.puzzle-stack.
|
|
122
|
-
|
|
123
|
-
align-items: stretch;
|
|
150
|
+
.puzzle-stack.align-h-tablet-start {
|
|
151
|
+
--stack-align-h: flex-start;
|
|
124
152
|
}
|
|
125
153
|
|
|
126
|
-
.puzzle-stack.
|
|
127
|
-
|
|
154
|
+
.puzzle-stack.align-h-tablet-center {
|
|
155
|
+
--stack-align-h: center;
|
|
128
156
|
}
|
|
129
157
|
|
|
130
|
-
.puzzle-stack.
|
|
131
|
-
|
|
158
|
+
.puzzle-stack.align-h-tablet-end {
|
|
159
|
+
--stack-align-h: flex-end;
|
|
132
160
|
}
|
|
133
161
|
|
|
134
|
-
.puzzle-stack.
|
|
135
|
-
|
|
162
|
+
.puzzle-stack.align-h-tablet-stretch {
|
|
163
|
+
--stack-align-h: stretch;
|
|
136
164
|
}
|
|
137
165
|
|
|
138
|
-
.puzzle-stack.
|
|
139
|
-
|
|
166
|
+
.puzzle-stack.align-h-tablet-around {
|
|
167
|
+
--stack-align-h: space-around;
|
|
140
168
|
}
|
|
141
169
|
|
|
142
|
-
.puzzle-stack.
|
|
143
|
-
|
|
170
|
+
.puzzle-stack.align-h-tablet-between {
|
|
171
|
+
--stack-align-h: space-between;
|
|
144
172
|
}
|
|
145
173
|
|
|
146
|
-
.puzzle-stack.
|
|
147
|
-
|
|
174
|
+
.puzzle-stack.align-h-tablet-evenly {
|
|
175
|
+
--stack-align-h: space-evenly;
|
|
148
176
|
}
|
|
149
177
|
|
|
150
|
-
.puzzle-stack.
|
|
151
|
-
|
|
178
|
+
.puzzle-stack.align-v-tablet-start {
|
|
179
|
+
--stack-align-v: flex-start;
|
|
152
180
|
}
|
|
153
181
|
|
|
154
|
-
.puzzle-stack.
|
|
155
|
-
align-
|
|
182
|
+
.puzzle-stack.align-v-tablet-center {
|
|
183
|
+
--stack-align-v: center;
|
|
156
184
|
}
|
|
157
185
|
|
|
158
|
-
.puzzle-stack.
|
|
159
|
-
align-
|
|
186
|
+
.puzzle-stack.align-v-tablet-end {
|
|
187
|
+
--stack-align-v: flex-end;
|
|
160
188
|
}
|
|
161
189
|
|
|
162
|
-
.puzzle-stack.
|
|
163
|
-
align-
|
|
190
|
+
.puzzle-stack.align-v-tablet-stretch {
|
|
191
|
+
--stack-align-v: stretch;
|
|
164
192
|
}
|
|
165
193
|
|
|
166
|
-
.puzzle-stack.
|
|
167
|
-
align-
|
|
194
|
+
.puzzle-stack.align-v-tablet-around {
|
|
195
|
+
--stack-align-v: space-around;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.puzzle-stack.align-v-tablet-between {
|
|
199
|
+
--stack-align-v: space-between;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.puzzle-stack.align-v-tablet-evenly {
|
|
203
|
+
--stack-align-v: space-evenly;
|
|
168
204
|
}
|
|
169
205
|
}
|
|
170
206
|
|
|
171
207
|
@media (width >= 1024px) {
|
|
172
208
|
.puzzle-stack.direction-desktop-row {
|
|
209
|
+
--stack-main-alignment: var(--stack-align-h);
|
|
210
|
+
--stack-cross-alignment: var(--stack-align-v);
|
|
173
211
|
flex-direction: row;
|
|
174
212
|
}
|
|
175
213
|
|
|
@@ -178,6 +216,8 @@
|
|
|
178
216
|
}
|
|
179
217
|
|
|
180
218
|
.puzzle-stack.direction-desktop-col {
|
|
219
|
+
--stack-main-alignment: var(--stack-align-v);
|
|
220
|
+
--stack-cross-alignment: var(--stack-align-h);
|
|
181
221
|
flex-direction: column;
|
|
182
222
|
}
|
|
183
223
|
|
|
@@ -185,119 +225,59 @@
|
|
|
185
225
|
flex-direction: column-reverse;
|
|
186
226
|
}
|
|
187
227
|
|
|
188
|
-
.puzzle-stack.
|
|
189
|
-
|
|
190
|
-
align-items: stretch;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.puzzle-stack.direction-desktop-row.align-h-start, .puzzle-stack.direction-desktop-col.align-v-start {
|
|
194
|
-
justify-content: flex-start;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.puzzle-stack.direction-desktop-row.align-h-center, .puzzle-stack.direction-desktop-col.align-v-center {
|
|
198
|
-
justify-content: center;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
.puzzle-stack.direction-desktop-row.align-h-end, .puzzle-stack.direction-desktop-col.align-v-end {
|
|
202
|
-
justify-content: flex-end;
|
|
228
|
+
.puzzle-stack.align-h-desktop-start {
|
|
229
|
+
--stack-align-h: flex-start;
|
|
203
230
|
}
|
|
204
231
|
|
|
205
|
-
.puzzle-stack.
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
.puzzle-stack.direction-desktop-row.align-h-around, .puzzle-stack.direction-desktop-col.align-v-around {
|
|
210
|
-
justify-content: space-around;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
.puzzle-stack.direction-desktop-row.align-h-between, .puzzle-stack.direction-desktop-col.align-v-between {
|
|
214
|
-
justify-content: space-between;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
.puzzle-stack.direction-desktop-row.align-h-evenly, .puzzle-stack.direction-desktop-col.align-v-evenly {
|
|
218
|
-
justify-content: space-evenly;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
.puzzle-stack.direction-desktop-row.align-v-start, .puzzle-stack.direction-desktop-col.align-h-start {
|
|
222
|
-
align-items: flex-start;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.puzzle-stack.direction-desktop-row.align-v-center, .puzzle-stack.direction-desktop-col.align-h-center {
|
|
226
|
-
align-items: center;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
.puzzle-stack.direction-desktop-row.align-v-end, .puzzle-stack.direction-desktop-col.align-h-end {
|
|
230
|
-
align-items: flex-end;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
.puzzle-stack.direction-desktop-row.align-v-stretch, .puzzle-stack.direction-desktop-col.align-h-stretch {
|
|
234
|
-
align-items: stretch;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
@media (width >= 1440px) {
|
|
239
|
-
.puzzle-stack.direction-hd-row {
|
|
240
|
-
flex-direction: row;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
.puzzle-stack.direction-hd-row.reverse {
|
|
244
|
-
flex-direction: row-reverse;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.puzzle-stack.direction-hd-col {
|
|
248
|
-
flex-direction: column;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
.puzzle-stack.direction-hd-col.reverse {
|
|
252
|
-
flex-direction: column-reverse;
|
|
232
|
+
.puzzle-stack.align-h-desktop-center {
|
|
233
|
+
--stack-align-h: center;
|
|
253
234
|
}
|
|
254
235
|
|
|
255
|
-
.puzzle-stack.
|
|
256
|
-
|
|
257
|
-
align-items: stretch;
|
|
236
|
+
.puzzle-stack.align-h-desktop-end {
|
|
237
|
+
--stack-align-h: flex-end;
|
|
258
238
|
}
|
|
259
239
|
|
|
260
|
-
.puzzle-stack.
|
|
261
|
-
|
|
240
|
+
.puzzle-stack.align-h-desktop-stretch {
|
|
241
|
+
--stack-align-h: stretch;
|
|
262
242
|
}
|
|
263
243
|
|
|
264
|
-
.puzzle-stack.
|
|
265
|
-
|
|
244
|
+
.puzzle-stack.align-h-desktop-around {
|
|
245
|
+
--stack-align-h: space-around;
|
|
266
246
|
}
|
|
267
247
|
|
|
268
|
-
.puzzle-stack.
|
|
269
|
-
|
|
248
|
+
.puzzle-stack.align-h-desktop-between {
|
|
249
|
+
--stack-align-h: space-between;
|
|
270
250
|
}
|
|
271
251
|
|
|
272
|
-
.puzzle-stack.
|
|
273
|
-
|
|
252
|
+
.puzzle-stack.align-h-desktop-evenly {
|
|
253
|
+
--stack-align-h: space-evenly;
|
|
274
254
|
}
|
|
275
255
|
|
|
276
|
-
.puzzle-stack.
|
|
277
|
-
|
|
256
|
+
.puzzle-stack.align-v-desktop-start {
|
|
257
|
+
--stack-align-v: flex-start;
|
|
278
258
|
}
|
|
279
259
|
|
|
280
|
-
.puzzle-stack.
|
|
281
|
-
|
|
260
|
+
.puzzle-stack.align-v-desktop-center {
|
|
261
|
+
--stack-align-v: center;
|
|
282
262
|
}
|
|
283
263
|
|
|
284
|
-
.puzzle-stack.
|
|
285
|
-
|
|
264
|
+
.puzzle-stack.align-v-desktop-end {
|
|
265
|
+
--stack-align-v: flex-end;
|
|
286
266
|
}
|
|
287
267
|
|
|
288
|
-
.puzzle-stack.
|
|
289
|
-
align-
|
|
268
|
+
.puzzle-stack.align-v-desktop-stretch {
|
|
269
|
+
--stack-align-v: stretch;
|
|
290
270
|
}
|
|
291
271
|
|
|
292
|
-
.puzzle-stack.
|
|
293
|
-
align-
|
|
272
|
+
.puzzle-stack.align-v-desktop-around {
|
|
273
|
+
--stack-align-v: space-around;
|
|
294
274
|
}
|
|
295
275
|
|
|
296
|
-
.puzzle-stack.
|
|
297
|
-
align-
|
|
276
|
+
.puzzle-stack.align-v-desktop-between {
|
|
277
|
+
--stack-align-v: space-between;
|
|
298
278
|
}
|
|
299
279
|
|
|
300
|
-
.puzzle-stack.
|
|
301
|
-
align-
|
|
280
|
+
.puzzle-stack.align-v-desktop-evenly {
|
|
281
|
+
--stack-align-v: space-evenly;
|
|
302
282
|
}
|
|
303
283
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["useId","useRef","useState","cn","Fragment","Transition"],"sources":["../../../../src/components/navigation/accordion/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Fragment,\n useId,\n useState,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@puzzle-ui/core\";\nimport { Transition } from \"../../utilities/transition\";\nimport \"./accordion.css\";\n\ntype AccordionType = \"single\" | \"multiple\";\ntype AccordionItemId = string | number;\ntype AccordionValue =\n | AccordionItemId\n | readonly AccordionItemId[]\n | null;\n\ntype AccordionItemData = {\n /** Stable key for the item when the list is reordered. */\n id?: string | number;\n\n /** Visible title of the accordion item. */\n title: ReactNode;\n\n /** Content shown when the item is expanded. */\n content: ReactNode;\n\n /** Prevents the item from being toggled by the user. */\n disabled?: boolean;\n};\n\ntype AccordionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"children\" | \"onChange\"\n> & {\n /** Items displayed by the accordion. */\n items: AccordionItemData[];\n\n /** Initial expanded indexes for uncontrolled usage. Defaults to []. */\n initialOpenItemIndexes?: number[];\n\n /** Expanded indexes for controlled usage. */\n openItemIndexes?: number[];\n\n /** Called with the next expanded indexes after user interaction. */\n onChange?: (openItemIndexes: number[]) => void;\n\n /** Expanded item ID(s). Requires an ID on every item. */\n value?: AccordionValue;\n\n /** Initially expanded item ID(s). Requires an ID on every item. */\n defaultValue?: AccordionValue;\n\n /** Called with the next expanded item ID(s). */\n onValueChange?: (value: AccordionItemId | AccordionItemId[] | null) => void;\n\n /** Whether multiple items can be expanded simultaneously. */\n type?: AccordionType;\n\n /** Allow the currently expanded item to collapse in single mode. */\n collapsible?: boolean;\n\n /** Semantic heading level used for each item. Defaults to 3. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Adds region landmarks to the panels. Defaults to true for <= 6 items. */\n region?: boolean;\n\n /** Class applied to each trigger button. */\n triggerClassName?: string;\n\n /** Class applied to each animated panel. */\n panelClassName?: string;\n\n /** Class applied to the panel content wrapper. */\n contentClassName?: string;\n\n /** Unmount panel content after its closing animation completes. Defaults to false. */\n unMountOnClose?: boolean;\n};\n\nconst normalizeOpenItemIndexes = (\n indexes: number[] | undefined,\n itemCount: number,\n type: AccordionType,\n): number[] => {\n const validIndexes = Array.from(\n new Set(\n (indexes ?? []).filter(\n (index) => Number.isInteger(index) && index >= 0 && index < itemCount,\n ),\n ),\n );\n\n if (type === \"single\") {\n return validIndexes.slice(0, 1);\n }\n\n return validIndexes.sort((a, b) => a - b);\n};\n\nconst normalizeOpenItemIds = (\n value: AccordionValue | undefined,\n type: AccordionType,\n): AccordionItemId[] => {\n const ids =\n value == null ? [] : Array.isArray(value) ? [...value] : [value];\n const uniqueIds = Array.from(new Set(ids));\n\n return type === \"single\" ? uniqueIds.slice(0, 1) : uniqueIds;\n};\n\nconst Accordion = ({\n items,\n initialOpenItemIndexes,\n openItemIndexes,\n onChange,\n value,\n defaultValue,\n onValueChange,\n type = \"multiple\",\n collapsible = true,\n headingLevel = 3,\n region,\n className,\n triggerClassName,\n panelClassName,\n contentClassName,\n unMountOnClose = false,\n ...rootProps\n}: AccordionProps) => {\n const generatedId = useId();\n const isValueMode = value !== undefined || defaultValue !== undefined;\n const isValueControlled = value !== undefined;\n const triggerRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const contentRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n if (isValueMode) {\n const itemIds = new Set<string>();\n\n for (const item of items) {\n if (item.id === undefined) {\n throw new Error(\n \"Accordion value and defaultValue require an id on every item.\",\n );\n }\n\n const key = `${typeof item.id}:${item.id}`;\n\n if (itemIds.has(key)) {\n throw new Error(\"Accordion item IDs must be unique.\");\n }\n\n itemIds.add(key);\n }\n }\n\n const [uncontrolledOpenItemIndexes, setUncontrolledOpenItemIndexes] =\n useState<number[]>(() =>\n normalizeOpenItemIndexes(initialOpenItemIndexes, items.length, type),\n );\n\n const [uncontrolledOpenItemIds, setUncontrolledOpenItemIds] = useState<\n AccordionItemId[]\n >(() => normalizeOpenItemIds(defaultValue, type));\n\n const requestedOpenItemIds = normalizeOpenItemIds(\n isValueControlled ? value : uncontrolledOpenItemIds,\n type,\n );\n const currentOpenItemIndexes = isValueMode\n ? items.flatMap((item, index) =>\n requestedOpenItemIds.includes(item.id as AccordionItemId) ? [index] : [],\n )\n : normalizeOpenItemIndexes(\n openItemIndexes ?? uncontrolledOpenItemIndexes,\n items.length,\n type,\n );\n\n const HeadingTag = `h${headingLevel}` as\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\";\n\n // Avoid excessive landmark regions in long accordions.\n const useRegions = region ?? items.length <= 6;\n\n const handleToggle = (index: number, disabled = false) => {\n if (disabled) {\n return;\n }\n\n const isOpen = currentOpenItemIndexes.includes(index);\n\n if (type === \"single\" && isOpen && !collapsible) {\n return;\n }\n\n const nextOpenItemIndexes = normalizeOpenItemIndexes(\n type === \"single\"\n ? isOpen\n ? []\n : [index]\n : isOpen\n ? currentOpenItemIndexes.filter((openIndex) => openIndex !== index)\n : [...currentOpenItemIndexes, index],\n items.length,\n type,\n );\n\n if (isValueMode) {\n const nextIds = nextOpenItemIndexes.map(\n (openIndex) => items[openIndex].id as AccordionItemId,\n );\n\n if (!isValueControlled) {\n setUncontrolledOpenItemIds(nextIds);\n }\n\n onValueChange?.(\n type === \"single\" ? (nextIds[0] ?? null) : nextIds,\n );\n } else if (openItemIndexes === undefined) {\n setUncontrolledOpenItemIndexes(nextOpenItemIndexes);\n }\n\n onChange?.(nextOpenItemIndexes);\n };\n\n return (\n <div className={cn(\"puzzle-accordion\", className)} {...rootProps}>\n {items.map((item, index) => {\n const isOpen = currentOpenItemIndexes.includes(index);\n const cannotCollapse = type === \"single\" && isOpen && !collapsible;\n\n const triggerId = `${generatedId}-trigger-${index}`;\n const panelId = `${generatedId}-panel-${index}`;\n\n return (\n <Fragment\n key={\n item.id === undefined\n ? index\n : `${typeof item.id}:${item.id}`\n }\n >\n <HeadingTag className=\"puzzle-accordion__heading\">\n <button\n ref={(node) => {\n triggerRefs.current[index] = node;\n }}\n id={triggerId}\n type=\"button\"\n className={cn(\"puzzle-accordion__trigger\", triggerClassName)}\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-disabled={cannotCollapse || undefined}\n data-state={isOpen ? \"open\" : \"closed\"}\n disabled={item.disabled}\n onClick={() => handleToggle(index, item.disabled)}\n >\n {item.title}\n </button>\n </HeadingTag>\n\n <Transition\n visible={isOpen}\n template=\"accordion\"\n duration={300}\n unmountOnExit={unMountOnClose}\n className={panelClassName}\n id={panelId}\n role={useRegions ? \"region\" : undefined}\n aria-labelledby={useRegions ? triggerId : undefined}\n aria-hidden={!isOpen}\n inert={!isOpen}\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n <div\n ref={(node) => {\n contentRefs.current[index] = node;\n }}\n className=\"puzzle-accordion__panel\"\n >\n <div className=\"puzzle-accordion__panel-inner\">\n <div\n className={cn(\n \"puzzle-accordion__content\",\n contentClassName,\n )}\n >\n {item.content}\n </div>\n </div>\n </div>\n </Transition>\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nexport {\n Accordion,\n type AccordionProps,\n type AccordionItemData,\n type AccordionType,\n type AccordionItemId,\n type AccordionValue,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["useId","useRef","useState","cn","Fragment","Transition"],"sources":["../../../../src/components/navigation/accordion/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Fragment,\n useId,\n useState,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@puzzle-ui/core\";\nimport { Transition } from \"../../utilities/transition\";\nimport \"./accordion.css\";\n\ntype AccordionType = \"single\" | \"multiple\";\ntype AccordionItemId = string | number;\ntype AccordionValue =\n | AccordionItemId\n | readonly AccordionItemId[]\n | null;\n\ntype AccordionItemData = {\n /** Stable key for the item when the list is reordered. */\n id?: string | number;\n\n /** Visible title of the accordion item. */\n title: ReactNode;\n\n /** Content shown when the item is expanded. */\n content: ReactNode;\n\n /** Prevents the item from being toggled by the user. */\n disabled?: boolean;\n};\n\ntype AccordionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"children\" | \"onChange\"\n> & {\n /** Items displayed by the accordion. */\n items: AccordionItemData[];\n\n /** Initial expanded indexes for uncontrolled usage. Defaults to []. */\n initialOpenItemIndexes?: number[];\n\n /** Expanded indexes for controlled usage. */\n openItemIndexes?: number[];\n\n /** Called with the next expanded indexes after user interaction. */\n onChange?: (openItemIndexes: number[]) => void;\n\n /** Expanded item ID(s). Requires an ID on every item. */\n value?: AccordionValue;\n\n /** Initially expanded item ID(s). Requires an ID on every item. */\n defaultValue?: AccordionValue;\n\n /** Called with the next expanded item ID(s). */\n onValueChange?: (value: AccordionItemId | AccordionItemId[] | null) => void;\n\n /** Whether multiple items can be expanded simultaneously. */\n type?: AccordionType;\n\n /** Allow the currently expanded item to collapse in single mode. */\n collapsible?: boolean;\n\n /** Semantic heading level used for each item. Defaults to 3. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Adds region landmarks to the panels. Defaults to true for <= 6 items. */\n region?: boolean;\n\n /** Class applied to each trigger button. */\n triggerClassName?: string;\n\n /** Class applied to each animated panel. */\n panelClassName?: string;\n\n /** Class applied to the panel content wrapper. */\n contentClassName?: string;\n\n /** Unmount panel content after its closing animation completes. Defaults to false. */\n unMountOnClose?: boolean;\n};\n\nconst normalizeOpenItemIndexes = (\n indexes: number[] | undefined,\n itemCount: number,\n type: AccordionType,\n): number[] => {\n const validIndexes = Array.from(\n new Set(\n (indexes ?? []).filter(\n (index) => Number.isInteger(index) && index >= 0 && index < itemCount,\n ),\n ),\n );\n\n if (type === \"single\") {\n return validIndexes.slice(0, 1);\n }\n\n return validIndexes.sort((a, b) => a - b);\n};\n\nconst normalizeOpenItemIds = (\n value: AccordionValue | undefined,\n type: AccordionType,\n): AccordionItemId[] => {\n const ids =\n value == null ? [] : Array.isArray(value) ? [...value] : [value];\n const uniqueIds = Array.from(new Set(ids));\n\n return type === \"single\" ? uniqueIds.slice(0, 1) : uniqueIds;\n};\n\nconst Accordion = ({\n items,\n initialOpenItemIndexes,\n openItemIndexes,\n onChange,\n value,\n defaultValue,\n onValueChange,\n type = \"multiple\",\n collapsible = true,\n headingLevel = 3,\n region,\n className,\n triggerClassName,\n panelClassName,\n contentClassName,\n unMountOnClose = false,\n ...rootProps\n}: AccordionProps) => {\n const generatedId = useId();\n const isValueMode = value !== undefined || defaultValue !== undefined;\n const isValueControlled = value !== undefined;\n const triggerRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const contentRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n if (isValueMode) {\n const itemIds = new Set<string>();\n\n for (const item of items) {\n if (item.id === undefined) {\n throw new Error(\n \"Accordion value and defaultValue require an id on every item.\",\n );\n }\n\n const key = `${typeof item.id}:${item.id}`;\n\n if (itemIds.has(key)) {\n throw new Error(\"Accordion item IDs must be unique.\");\n }\n\n itemIds.add(key);\n }\n }\n\n const [uncontrolledOpenItemIndexes, setUncontrolledOpenItemIndexes] =\n useState<number[]>(() =>\n normalizeOpenItemIndexes(initialOpenItemIndexes, items.length, type),\n );\n\n const [uncontrolledOpenItemIds, setUncontrolledOpenItemIds] = useState<\n AccordionItemId[]\n >(() => normalizeOpenItemIds(defaultValue, type));\n\n const requestedOpenItemIds = normalizeOpenItemIds(\n isValueControlled ? value : uncontrolledOpenItemIds,\n type,\n );\n const currentOpenItemIndexes = isValueMode\n ? items.flatMap((item, index) =>\n requestedOpenItemIds.includes(item.id as AccordionItemId) ? [index] : [],\n )\n : normalizeOpenItemIndexes(\n openItemIndexes ?? uncontrolledOpenItemIndexes,\n items.length,\n type,\n );\n\n const HeadingTag = `h${headingLevel}` as\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\";\n\n // Avoid excessive landmark regions in long accordions.\n const useRegions = region ?? items.length <= 6;\n\n const handleToggle = (index: number, disabled = false) => {\n if (disabled) {\n return;\n }\n\n const isOpen = currentOpenItemIndexes.includes(index);\n\n if (type === \"single\" && isOpen && !collapsible) {\n return;\n }\n\n const nextOpenItemIndexes = normalizeOpenItemIndexes(\n type === \"single\"\n ? isOpen\n ? []\n : [index]\n : isOpen\n ? currentOpenItemIndexes.filter((openIndex) => openIndex !== index)\n : [...currentOpenItemIndexes, index],\n items.length,\n type,\n );\n\n if (isValueMode) {\n const nextIds = nextOpenItemIndexes.map(\n (openIndex) => items[openIndex]!.id as AccordionItemId,\n );\n\n if (!isValueControlled) {\n setUncontrolledOpenItemIds(nextIds);\n }\n\n onValueChange?.(\n type === \"single\" ? (nextIds[0] ?? null) : nextIds,\n );\n } else if (openItemIndexes === undefined) {\n setUncontrolledOpenItemIndexes(nextOpenItemIndexes);\n }\n\n onChange?.(nextOpenItemIndexes);\n };\n\n return (\n <div className={cn(\"puzzle-accordion\", className)} {...rootProps}>\n {items.map((item, index) => {\n const isOpen = currentOpenItemIndexes.includes(index);\n const cannotCollapse = type === \"single\" && isOpen && !collapsible;\n\n const triggerId = `${generatedId}-trigger-${index}`;\n const panelId = `${generatedId}-panel-${index}`;\n\n return (\n <Fragment\n key={\n item.id === undefined\n ? index\n : `${typeof item.id}:${item.id}`\n }\n >\n <HeadingTag className=\"puzzle-accordion__heading\">\n <button\n ref={(node) => {\n triggerRefs.current[index] = node;\n }}\n id={triggerId}\n type=\"button\"\n className={cn(\"puzzle-accordion__trigger\", triggerClassName)}\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-disabled={cannotCollapse || undefined}\n data-state={isOpen ? \"open\" : \"closed\"}\n disabled={item.disabled}\n onClick={() => handleToggle(index, item.disabled)}\n >\n {item.title}\n </button>\n </HeadingTag>\n\n <Transition\n visible={isOpen}\n template=\"accordion\"\n duration={300}\n unmountOnExit={unMountOnClose}\n className={panelClassName}\n id={panelId}\n role={useRegions ? \"region\" : undefined}\n aria-labelledby={useRegions ? triggerId : undefined}\n aria-hidden={!isOpen}\n inert={!isOpen}\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n <div\n ref={(node) => {\n contentRefs.current[index] = node;\n }}\n className=\"puzzle-accordion__panel\"\n >\n <div className=\"puzzle-accordion__panel-inner\">\n <div\n className={cn(\n \"puzzle-accordion__content\",\n contentClassName,\n )}\n >\n {item.content}\n </div>\n </div>\n </div>\n </Transition>\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nexport {\n Accordion,\n type AccordionProps,\n type AccordionItemData,\n type AccordionType,\n type AccordionItemId,\n type AccordionValue,\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/navigation/accordion/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Fragment,\n useId,\n useState,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@puzzle-ui/core\";\nimport { Transition } from \"../../utilities/transition\";\nimport \"./accordion.css\";\n\ntype AccordionType = \"single\" | \"multiple\";\ntype AccordionItemId = string | number;\ntype AccordionValue =\n | AccordionItemId\n | readonly AccordionItemId[]\n | null;\n\ntype AccordionItemData = {\n /** Stable key for the item when the list is reordered. */\n id?: string | number;\n\n /** Visible title of the accordion item. */\n title: ReactNode;\n\n /** Content shown when the item is expanded. */\n content: ReactNode;\n\n /** Prevents the item from being toggled by the user. */\n disabled?: boolean;\n};\n\ntype AccordionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"children\" | \"onChange\"\n> & {\n /** Items displayed by the accordion. */\n items: AccordionItemData[];\n\n /** Initial expanded indexes for uncontrolled usage. Defaults to []. */\n initialOpenItemIndexes?: number[];\n\n /** Expanded indexes for controlled usage. */\n openItemIndexes?: number[];\n\n /** Called with the next expanded indexes after user interaction. */\n onChange?: (openItemIndexes: number[]) => void;\n\n /** Expanded item ID(s). Requires an ID on every item. */\n value?: AccordionValue;\n\n /** Initially expanded item ID(s). Requires an ID on every item. */\n defaultValue?: AccordionValue;\n\n /** Called with the next expanded item ID(s). */\n onValueChange?: (value: AccordionItemId | AccordionItemId[] | null) => void;\n\n /** Whether multiple items can be expanded simultaneously. */\n type?: AccordionType;\n\n /** Allow the currently expanded item to collapse in single mode. */\n collapsible?: boolean;\n\n /** Semantic heading level used for each item. Defaults to 3. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Adds region landmarks to the panels. Defaults to true for <= 6 items. */\n region?: boolean;\n\n /** Class applied to each trigger button. */\n triggerClassName?: string;\n\n /** Class applied to each animated panel. */\n panelClassName?: string;\n\n /** Class applied to the panel content wrapper. */\n contentClassName?: string;\n\n /** Unmount panel content after its closing animation completes. Defaults to false. */\n unMountOnClose?: boolean;\n};\n\nconst normalizeOpenItemIndexes = (\n indexes: number[] | undefined,\n itemCount: number,\n type: AccordionType,\n): number[] => {\n const validIndexes = Array.from(\n new Set(\n (indexes ?? []).filter(\n (index) => Number.isInteger(index) && index >= 0 && index < itemCount,\n ),\n ),\n );\n\n if (type === \"single\") {\n return validIndexes.slice(0, 1);\n }\n\n return validIndexes.sort((a, b) => a - b);\n};\n\nconst normalizeOpenItemIds = (\n value: AccordionValue | undefined,\n type: AccordionType,\n): AccordionItemId[] => {\n const ids =\n value == null ? [] : Array.isArray(value) ? [...value] : [value];\n const uniqueIds = Array.from(new Set(ids));\n\n return type === \"single\" ? uniqueIds.slice(0, 1) : uniqueIds;\n};\n\nconst Accordion = ({\n items,\n initialOpenItemIndexes,\n openItemIndexes,\n onChange,\n value,\n defaultValue,\n onValueChange,\n type = \"multiple\",\n collapsible = true,\n headingLevel = 3,\n region,\n className,\n triggerClassName,\n panelClassName,\n contentClassName,\n unMountOnClose = false,\n ...rootProps\n}: AccordionProps) => {\n const generatedId = useId();\n const isValueMode = value !== undefined || defaultValue !== undefined;\n const isValueControlled = value !== undefined;\n const triggerRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const contentRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n if (isValueMode) {\n const itemIds = new Set<string>();\n\n for (const item of items) {\n if (item.id === undefined) {\n throw new Error(\n \"Accordion value and defaultValue require an id on every item.\",\n );\n }\n\n const key = `${typeof item.id}:${item.id}`;\n\n if (itemIds.has(key)) {\n throw new Error(\"Accordion item IDs must be unique.\");\n }\n\n itemIds.add(key);\n }\n }\n\n const [uncontrolledOpenItemIndexes, setUncontrolledOpenItemIndexes] =\n useState<number[]>(() =>\n normalizeOpenItemIndexes(initialOpenItemIndexes, items.length, type),\n );\n\n const [uncontrolledOpenItemIds, setUncontrolledOpenItemIds] = useState<\n AccordionItemId[]\n >(() => normalizeOpenItemIds(defaultValue, type));\n\n const requestedOpenItemIds = normalizeOpenItemIds(\n isValueControlled ? value : uncontrolledOpenItemIds,\n type,\n );\n const currentOpenItemIndexes = isValueMode\n ? items.flatMap((item, index) =>\n requestedOpenItemIds.includes(item.id as AccordionItemId) ? [index] : [],\n )\n : normalizeOpenItemIndexes(\n openItemIndexes ?? uncontrolledOpenItemIndexes,\n items.length,\n type,\n );\n\n const HeadingTag = `h${headingLevel}` as\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\";\n\n // Avoid excessive landmark regions in long accordions.\n const useRegions = region ?? items.length <= 6;\n\n const handleToggle = (index: number, disabled = false) => {\n if (disabled) {\n return;\n }\n\n const isOpen = currentOpenItemIndexes.includes(index);\n\n if (type === \"single\" && isOpen && !collapsible) {\n return;\n }\n\n const nextOpenItemIndexes = normalizeOpenItemIndexes(\n type === \"single\"\n ? isOpen\n ? []\n : [index]\n : isOpen\n ? currentOpenItemIndexes.filter((openIndex) => openIndex !== index)\n : [...currentOpenItemIndexes, index],\n items.length,\n type,\n );\n\n if (isValueMode) {\n const nextIds = nextOpenItemIndexes.map(\n (openIndex) => items[openIndex].id as AccordionItemId,\n );\n\n if (!isValueControlled) {\n setUncontrolledOpenItemIds(nextIds);\n }\n\n onValueChange?.(\n type === \"single\" ? (nextIds[0] ?? null) : nextIds,\n );\n } else if (openItemIndexes === undefined) {\n setUncontrolledOpenItemIndexes(nextOpenItemIndexes);\n }\n\n onChange?.(nextOpenItemIndexes);\n };\n\n return (\n <div className={cn(\"puzzle-accordion\", className)} {...rootProps}>\n {items.map((item, index) => {\n const isOpen = currentOpenItemIndexes.includes(index);\n const cannotCollapse = type === \"single\" && isOpen && !collapsible;\n\n const triggerId = `${generatedId}-trigger-${index}`;\n const panelId = `${generatedId}-panel-${index}`;\n\n return (\n <Fragment\n key={\n item.id === undefined\n ? index\n : `${typeof item.id}:${item.id}`\n }\n >\n <HeadingTag className=\"puzzle-accordion__heading\">\n <button\n ref={(node) => {\n triggerRefs.current[index] = node;\n }}\n id={triggerId}\n type=\"button\"\n className={cn(\"puzzle-accordion__trigger\", triggerClassName)}\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-disabled={cannotCollapse || undefined}\n data-state={isOpen ? \"open\" : \"closed\"}\n disabled={item.disabled}\n onClick={() => handleToggle(index, item.disabled)}\n >\n {item.title}\n </button>\n </HeadingTag>\n\n <Transition\n visible={isOpen}\n template=\"accordion\"\n duration={300}\n unmountOnExit={unMountOnClose}\n className={panelClassName}\n id={panelId}\n role={useRegions ? \"region\" : undefined}\n aria-labelledby={useRegions ? triggerId : undefined}\n aria-hidden={!isOpen}\n inert={!isOpen}\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n <div\n ref={(node) => {\n contentRefs.current[index] = node;\n }}\n className=\"puzzle-accordion__panel\"\n >\n <div className=\"puzzle-accordion__panel-inner\">\n <div\n className={cn(\n \"puzzle-accordion__content\",\n contentClassName,\n )}\n >\n {item.content}\n </div>\n </div>\n </div>\n </Transition>\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nexport {\n Accordion,\n type AccordionProps,\n type AccordionItemData,\n type AccordionType,\n type AccordionItemId,\n type AccordionValue,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/navigation/accordion/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Fragment,\n useId,\n useState,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@puzzle-ui/core\";\nimport { Transition } from \"../../utilities/transition\";\nimport \"./accordion.css\";\n\ntype AccordionType = \"single\" | \"multiple\";\ntype AccordionItemId = string | number;\ntype AccordionValue =\n | AccordionItemId\n | readonly AccordionItemId[]\n | null;\n\ntype AccordionItemData = {\n /** Stable key for the item when the list is reordered. */\n id?: string | number;\n\n /** Visible title of the accordion item. */\n title: ReactNode;\n\n /** Content shown when the item is expanded. */\n content: ReactNode;\n\n /** Prevents the item from being toggled by the user. */\n disabled?: boolean;\n};\n\ntype AccordionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"children\" | \"onChange\"\n> & {\n /** Items displayed by the accordion. */\n items: AccordionItemData[];\n\n /** Initial expanded indexes for uncontrolled usage. Defaults to []. */\n initialOpenItemIndexes?: number[];\n\n /** Expanded indexes for controlled usage. */\n openItemIndexes?: number[];\n\n /** Called with the next expanded indexes after user interaction. */\n onChange?: (openItemIndexes: number[]) => void;\n\n /** Expanded item ID(s). Requires an ID on every item. */\n value?: AccordionValue;\n\n /** Initially expanded item ID(s). Requires an ID on every item. */\n defaultValue?: AccordionValue;\n\n /** Called with the next expanded item ID(s). */\n onValueChange?: (value: AccordionItemId | AccordionItemId[] | null) => void;\n\n /** Whether multiple items can be expanded simultaneously. */\n type?: AccordionType;\n\n /** Allow the currently expanded item to collapse in single mode. */\n collapsible?: boolean;\n\n /** Semantic heading level used for each item. Defaults to 3. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Adds region landmarks to the panels. Defaults to true for <= 6 items. */\n region?: boolean;\n\n /** Class applied to each trigger button. */\n triggerClassName?: string;\n\n /** Class applied to each animated panel. */\n panelClassName?: string;\n\n /** Class applied to the panel content wrapper. */\n contentClassName?: string;\n\n /** Unmount panel content after its closing animation completes. Defaults to false. */\n unMountOnClose?: boolean;\n};\n\nconst normalizeOpenItemIndexes = (\n indexes: number[] | undefined,\n itemCount: number,\n type: AccordionType,\n): number[] => {\n const validIndexes = Array.from(\n new Set(\n (indexes ?? []).filter(\n (index) => Number.isInteger(index) && index >= 0 && index < itemCount,\n ),\n ),\n );\n\n if (type === \"single\") {\n return validIndexes.slice(0, 1);\n }\n\n return validIndexes.sort((a, b) => a - b);\n};\n\nconst normalizeOpenItemIds = (\n value: AccordionValue | undefined,\n type: AccordionType,\n): AccordionItemId[] => {\n const ids =\n value == null ? [] : Array.isArray(value) ? [...value] : [value];\n const uniqueIds = Array.from(new Set(ids));\n\n return type === \"single\" ? uniqueIds.slice(0, 1) : uniqueIds;\n};\n\nconst Accordion = ({\n items,\n initialOpenItemIndexes,\n openItemIndexes,\n onChange,\n value,\n defaultValue,\n onValueChange,\n type = \"multiple\",\n collapsible = true,\n headingLevel = 3,\n region,\n className,\n triggerClassName,\n panelClassName,\n contentClassName,\n unMountOnClose = false,\n ...rootProps\n}: AccordionProps) => {\n const generatedId = useId();\n const isValueMode = value !== undefined || defaultValue !== undefined;\n const isValueControlled = value !== undefined;\n const triggerRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const contentRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n if (isValueMode) {\n const itemIds = new Set<string>();\n\n for (const item of items) {\n if (item.id === undefined) {\n throw new Error(\n \"Accordion value and defaultValue require an id on every item.\",\n );\n }\n\n const key = `${typeof item.id}:${item.id}`;\n\n if (itemIds.has(key)) {\n throw new Error(\"Accordion item IDs must be unique.\");\n }\n\n itemIds.add(key);\n }\n }\n\n const [uncontrolledOpenItemIndexes, setUncontrolledOpenItemIndexes] =\n useState<number[]>(() =>\n normalizeOpenItemIndexes(initialOpenItemIndexes, items.length, type),\n );\n\n const [uncontrolledOpenItemIds, setUncontrolledOpenItemIds] = useState<\n AccordionItemId[]\n >(() => normalizeOpenItemIds(defaultValue, type));\n\n const requestedOpenItemIds = normalizeOpenItemIds(\n isValueControlled ? value : uncontrolledOpenItemIds,\n type,\n );\n const currentOpenItemIndexes = isValueMode\n ? items.flatMap((item, index) =>\n requestedOpenItemIds.includes(item.id as AccordionItemId) ? [index] : [],\n )\n : normalizeOpenItemIndexes(\n openItemIndexes ?? uncontrolledOpenItemIndexes,\n items.length,\n type,\n );\n\n const HeadingTag = `h${headingLevel}` as\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\";\n\n // Avoid excessive landmark regions in long accordions.\n const useRegions = region ?? items.length <= 6;\n\n const handleToggle = (index: number, disabled = false) => {\n if (disabled) {\n return;\n }\n\n const isOpen = currentOpenItemIndexes.includes(index);\n\n if (type === \"single\" && isOpen && !collapsible) {\n return;\n }\n\n const nextOpenItemIndexes = normalizeOpenItemIndexes(\n type === \"single\"\n ? isOpen\n ? []\n : [index]\n : isOpen\n ? currentOpenItemIndexes.filter((openIndex) => openIndex !== index)\n : [...currentOpenItemIndexes, index],\n items.length,\n type,\n );\n\n if (isValueMode) {\n const nextIds = nextOpenItemIndexes.map(\n (openIndex) => items[openIndex]!.id as AccordionItemId,\n );\n\n if (!isValueControlled) {\n setUncontrolledOpenItemIds(nextIds);\n }\n\n onValueChange?.(\n type === \"single\" ? (nextIds[0] ?? null) : nextIds,\n );\n } else if (openItemIndexes === undefined) {\n setUncontrolledOpenItemIndexes(nextOpenItemIndexes);\n }\n\n onChange?.(nextOpenItemIndexes);\n };\n\n return (\n <div className={cn(\"puzzle-accordion\", className)} {...rootProps}>\n {items.map((item, index) => {\n const isOpen = currentOpenItemIndexes.includes(index);\n const cannotCollapse = type === \"single\" && isOpen && !collapsible;\n\n const triggerId = `${generatedId}-trigger-${index}`;\n const panelId = `${generatedId}-panel-${index}`;\n\n return (\n <Fragment\n key={\n item.id === undefined\n ? index\n : `${typeof item.id}:${item.id}`\n }\n >\n <HeadingTag className=\"puzzle-accordion__heading\">\n <button\n ref={(node) => {\n triggerRefs.current[index] = node;\n }}\n id={triggerId}\n type=\"button\"\n className={cn(\"puzzle-accordion__trigger\", triggerClassName)}\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-disabled={cannotCollapse || undefined}\n data-state={isOpen ? \"open\" : \"closed\"}\n disabled={item.disabled}\n onClick={() => handleToggle(index, item.disabled)}\n >\n {item.title}\n </button>\n </HeadingTag>\n\n <Transition\n visible={isOpen}\n template=\"accordion\"\n duration={300}\n unmountOnExit={unMountOnClose}\n className={panelClassName}\n id={panelId}\n role={useRegions ? \"region\" : undefined}\n aria-labelledby={useRegions ? triggerId : undefined}\n aria-hidden={!isOpen}\n inert={!isOpen}\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n <div\n ref={(node) => {\n contentRefs.current[index] = node;\n }}\n className=\"puzzle-accordion__panel\"\n >\n <div className=\"puzzle-accordion__panel-inner\">\n <div\n className={cn(\n \"puzzle-accordion__content\",\n contentClassName,\n )}\n >\n {item.content}\n </div>\n </div>\n </div>\n </Transition>\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nexport {\n Accordion,\n type AccordionProps,\n type AccordionItemData,\n type AccordionType,\n type AccordionItemId,\n type AccordionValue,\n};\n"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ const readRenderedOffset = (element, fallback) => {
|
|
|
26
26
|
const transform = (element.ownerDocument.defaultView ?? window).getComputedStyle(element).transform;
|
|
27
27
|
if (!transform || transform === "none") return fallback;
|
|
28
28
|
const isMatrix3d = transform.startsWith("matrix3d(");
|
|
29
|
-
const translateX = transform.slice(isMatrix3d ? 9 : 7, -1).split(",").map(Number)[isMatrix3d ? 12 : 4];
|
|
29
|
+
const translateX = transform.slice(isMatrix3d ? 9 : 7, -1).split(",").map(Number)[isMatrix3d ? 12 : 4] ?? NaN;
|
|
30
30
|
return Number.isFinite(translateX) ? -translateX : fallback;
|
|
31
31
|
};
|
|
32
32
|
const estimatePointerVelocity = (samples) => {
|
|
@@ -157,7 +157,10 @@ const Carousel = ({ renderItem, getItemKey, panelsPerView, itemWidth, gap = 0, c
|
|
|
157
157
|
}, [
|
|
158
158
|
items.length,
|
|
159
159
|
itemOrderSignature,
|
|
160
|
-
measureLayout
|
|
160
|
+
measureLayout,
|
|
161
|
+
gaps.mobile,
|
|
162
|
+
gaps.tablet,
|
|
163
|
+
gaps.desktop
|
|
161
164
|
]);
|
|
162
165
|
/**
|
|
163
166
|
* currentPanel is always an item index.
|