@chayns-ui/core 0.2.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/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/accordion.css +147 -0
- package/dist/button.css +191 -0
- package/dist/card.css +13 -0
- package/dist/components/accordion/Accordion.d.ts +4 -0
- package/dist/components/accordion/Accordion.d.ts.map +1 -0
- package/dist/components/accordion/Accordion.js +72 -0
- package/dist/components/accordion/Accordion.js.map +1 -0
- package/dist/components/accordion/Accordion.types.d.ts +37 -0
- package/dist/components/accordion/Accordion.types.d.ts.map +1 -0
- package/dist/components/accordion/AccordionContext.d.ts +20 -0
- package/dist/components/accordion/AccordionContext.d.ts.map +1 -0
- package/dist/components/accordion/AccordionContext.js +18 -0
- package/dist/components/accordion/AccordionContext.js.map +1 -0
- package/dist/components/accordion/AccordionGroup.d.ts +4 -0
- package/dist/components/accordion/AccordionGroup.d.ts.map +1 -0
- package/dist/components/accordion/AccordionGroup.js +35 -0
- package/dist/components/accordion/AccordionGroup.js.map +1 -0
- package/dist/components/accordion/index.d.ts +4 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/index.js +3 -0
- package/dist/components/button/Button.d.ts +4 -0
- package/dist/components/button/Button.d.ts.map +1 -0
- package/dist/components/button/Button.js +17 -0
- package/dist/components/button/Button.js.map +1 -0
- package/dist/components/button/Button.types.d.ts +35 -0
- package/dist/components/button/Button.types.d.ts.map +1 -0
- package/dist/components/button/ButtonIcon.d.ts +7 -0
- package/dist/components/button/ButtonIcon.d.ts.map +1 -0
- package/dist/components/button/ButtonIcon.js +19 -0
- package/dist/components/button/ButtonIcon.js.map +1 -0
- package/dist/components/button/IconButton.d.ts +4 -0
- package/dist/components/button/IconButton.d.ts.map +1 -0
- package/dist/components/button/IconButton.js +17 -0
- package/dist/components/button/IconButton.js.map +1 -0
- package/dist/components/button/buttonClassName.d.ts +3 -0
- package/dist/components/button/buttonClassName.d.ts.map +1 -0
- package/dist/components/button/buttonClassName.js +9 -0
- package/dist/components/button/buttonClassName.js.map +1 -0
- package/dist/components/button/index.d.ts +4 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +3 -0
- package/dist/components/card/Card.d.ts +4 -0
- package/dist/components/card/Card.d.ts.map +1 -0
- package/dist/components/card/Card.js +18 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/card/Card.types.d.ts +9 -0
- package/dist/components/card/Card.types.d.ts.map +1 -0
- package/dist/components/card/index.d.ts +3 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +2 -0
- package/dist/components/list/List.d.ts +4 -0
- package/dist/components/list/List.d.ts.map +1 -0
- package/dist/components/list/List.js +14 -0
- package/dist/components/list/List.js.map +1 -0
- package/dist/components/list/List.types.d.ts +32 -0
- package/dist/components/list/List.types.d.ts.map +1 -0
- package/dist/components/list/ListItem.d.ts +4 -0
- package/dist/components/list/ListItem.d.ts.map +1 -0
- package/dist/components/list/ListItem.js +67 -0
- package/dist/components/list/ListItem.js.map +1 -0
- package/dist/components/list/index.d.ts +4 -0
- package/dist/components/list/index.d.ts.map +1 -0
- package/dist/components/list/index.js +3 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/list.css +121 -0
- package/dist/styles.css +4 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Tobit.Software
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
@layer chayns.components {
|
|
2
|
+
.chayns-accordion {
|
|
3
|
+
box-sizing: border-box;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.chayns-accordion--standalone {
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
border: 1px solid var(--border);
|
|
9
|
+
border-radius: 12px;
|
|
10
|
+
background: var(--surface);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.chayns-accordion--wrapped {
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
border: 1px solid var(--border);
|
|
16
|
+
border-radius: 10px;
|
|
17
|
+
background: var(--surface);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.chayns-accordion-group {
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
border: 1px solid var(--border);
|
|
24
|
+
border-radius: 12px;
|
|
25
|
+
background: var(--surface);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.chayns-accordion--grouped + .chayns-accordion--grouped {
|
|
29
|
+
border-top: 1px solid var(--border);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.chayns-accordion__header {
|
|
33
|
+
position: relative;
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
inline-size: 100%;
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
gap: var(--k12);
|
|
39
|
+
margin: 0;
|
|
40
|
+
padding: var(--k14) var(--k16);
|
|
41
|
+
border: 0;
|
|
42
|
+
background: transparent;
|
|
43
|
+
font: inherit;
|
|
44
|
+
text-align: start;
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.chayns-accordion--wrapped > .chayns-accordion__header {
|
|
49
|
+
gap: var(--k10);
|
|
50
|
+
padding: var(--k10) var(--k12);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.chayns-accordion__header:focus-visible {
|
|
54
|
+
outline: none;
|
|
55
|
+
box-shadow: 0 0 0 var(--focus-ring-size)
|
|
56
|
+
rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.chayns-accordion__chevron {
|
|
60
|
+
flex: none;
|
|
61
|
+
inline-size: var(--k16);
|
|
62
|
+
font-size: var(--icon);
|
|
63
|
+
color: var(--accent);
|
|
64
|
+
transition: transform 0.2s ease;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.chayns-accordion--wrapped > .chayns-accordion__header > .chayns-accordion__chevron {
|
|
68
|
+
inline-size: var(--k14);
|
|
69
|
+
font-size: var(--fs-caption);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.chayns-accordion--open > .chayns-accordion__header > .chayns-accordion__chevron {
|
|
73
|
+
transform: rotate(90deg);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.chayns-accordion__title {
|
|
77
|
+
flex: 1;
|
|
78
|
+
min-inline-size: 0;
|
|
79
|
+
font-size: var(--fs-body);
|
|
80
|
+
color: var(--text);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.chayns-accordion--open > .chayns-accordion__header > .chayns-accordion__title {
|
|
84
|
+
font-weight: 600;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.chayns-accordion__panel {
|
|
88
|
+
display: grid;
|
|
89
|
+
grid-template-rows: 0fr;
|
|
90
|
+
transition: grid-template-rows 0.25s ease;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.chayns-accordion--open > .chayns-accordion__panel {
|
|
94
|
+
grid-template-rows: 1fr;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.chayns-accordion__inner {
|
|
98
|
+
overflow: hidden;
|
|
99
|
+
visibility: hidden;
|
|
100
|
+
transition: visibility 0s linear 0.25s;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.chayns-accordion--open > .chayns-accordion__panel > .chayns-accordion__inner {
|
|
104
|
+
visibility: visible;
|
|
105
|
+
transition: visibility 0s linear 0s;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.chayns-accordion__content {
|
|
109
|
+
padding: 0 var(--k16) var(--k15) calc(var(--k16) + var(--k16) + var(--k12));
|
|
110
|
+
font-size: var(--fs-body);
|
|
111
|
+
line-height: 1.55;
|
|
112
|
+
color: var(--text-3);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.chayns-accordion--wrapped
|
|
116
|
+
> .chayns-accordion__panel
|
|
117
|
+
> .chayns-accordion__inner
|
|
118
|
+
> .chayns-accordion__content {
|
|
119
|
+
padding: 0 var(--k12) var(--k10) calc(var(--k12) + var(--k14) + var(--k10));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.chayns-accordion--disabled > .chayns-accordion__header {
|
|
123
|
+
cursor: default;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.chayns-accordion--disabled > .chayns-accordion__header > .chayns-accordion__chevron {
|
|
127
|
+
color: var(--muted);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.chayns-accordion--disabled > .chayns-accordion__header > .chayns-accordion__title {
|
|
131
|
+
color: var(--muted);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@media (hover: hover) {
|
|
135
|
+
.chayns-accordion__header:not(:disabled):hover {
|
|
136
|
+
background: var(--hover);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@media (prefers-reduced-motion: reduce) {
|
|
141
|
+
.chayns-accordion__chevron,
|
|
142
|
+
.chayns-accordion__panel,
|
|
143
|
+
.chayns-accordion__inner {
|
|
144
|
+
transition: none;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
package/dist/button.css
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
@layer chayns.components {
|
|
2
|
+
:where(.chayns-button, .chayns-icon-button) {
|
|
3
|
+
box-sizing: border-box;
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
max-inline-size: 100%;
|
|
8
|
+
margin: 0;
|
|
9
|
+
border: 0;
|
|
10
|
+
font: inherit;
|
|
11
|
+
font-size: var(--fs-body);
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
line-height: 1.1;
|
|
14
|
+
text-align: center;
|
|
15
|
+
color: var(--text);
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.chayns-button {
|
|
20
|
+
gap: var(--sp-2);
|
|
21
|
+
padding-block: var(--btn-py);
|
|
22
|
+
padding-inline: var(--btn-px);
|
|
23
|
+
border-radius: 999px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.chayns-button--ghost {
|
|
27
|
+
padding-inline: var(--sp-4);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:where(.chayns-icon-button) {
|
|
31
|
+
flex: none;
|
|
32
|
+
inline-size: var(--ctrl-h);
|
|
33
|
+
block-size: var(--ctrl-h);
|
|
34
|
+
padding: 0;
|
|
35
|
+
border-radius: 50%;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
:where(.chayns-button--primary, .chayns-icon-button--primary) {
|
|
39
|
+
background: var(--accent);
|
|
40
|
+
color: var(--on-accent);
|
|
41
|
+
box-shadow: var(--shadow-btn);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:where(.chayns-button--outline, .chayns-icon-button--outline) {
|
|
45
|
+
border: 1.5px solid var(--accent);
|
|
46
|
+
background: var(--surface);
|
|
47
|
+
color: var(--accent);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:where(.chayns-button--ghost, .chayns-icon-button--ghost) {
|
|
51
|
+
background: transparent;
|
|
52
|
+
color: var(--text-2);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
:where(.chayns-button--danger, .chayns-icon-button--danger) {
|
|
56
|
+
background: var(--danger-bg);
|
|
57
|
+
color: var(--danger);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
:where(.chayns-button, .chayns-icon-button):active:not(:disabled) {
|
|
61
|
+
transform: scale(0.97);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
:where(.chayns-icon-button):active:not(:disabled) {
|
|
65
|
+
transform: scale(0.9);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:where(.chayns-button--primary, .chayns-icon-button--primary):active:not(:disabled) {
|
|
69
|
+
background: var(--accent-active);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
:where(.chayns-button--outline, .chayns-icon-button--outline):active:not(:disabled) {
|
|
73
|
+
background: var(--accent);
|
|
74
|
+
color: var(--on-accent);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
:where(.chayns-button--ghost, .chayns-icon-button--ghost):active:not(:disabled) {
|
|
78
|
+
background: var(--surface-alt);
|
|
79
|
+
color: var(--accent);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:where(.chayns-button--danger, .chayns-icon-button--danger):active:not(:disabled) {
|
|
83
|
+
background: var(--danger-bg-hover);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:where(.chayns-button, .chayns-icon-button):disabled {
|
|
87
|
+
color: var(--disabled-fg);
|
|
88
|
+
cursor: not-allowed;
|
|
89
|
+
box-shadow: none;
|
|
90
|
+
transform: none;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
:where(
|
|
94
|
+
.chayns-button--primary,
|
|
95
|
+
.chayns-button--danger,
|
|
96
|
+
.chayns-icon-button--primary,
|
|
97
|
+
.chayns-icon-button--danger
|
|
98
|
+
):disabled {
|
|
99
|
+
background: var(--disabled-bg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:where(.chayns-button--outline, .chayns-icon-button--outline):disabled {
|
|
103
|
+
border-color: var(--disabled-border);
|
|
104
|
+
background: var(--surface);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
:where(.chayns-button--ghost, .chayns-icon-button--ghost):disabled {
|
|
108
|
+
background: transparent;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.chayns-button-icon {
|
|
112
|
+
display: inline-flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: center;
|
|
115
|
+
inline-size: 1em;
|
|
116
|
+
block-size: 1em;
|
|
117
|
+
flex: none;
|
|
118
|
+
line-height: 1;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.chayns-button-icon__weight {
|
|
122
|
+
display: inline-flex;
|
|
123
|
+
align-items: center;
|
|
124
|
+
justify-content: center;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.chayns-button-icon__weight--active {
|
|
128
|
+
display: none;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
:where(.chayns-button, .chayns-icon-button):active:not(:disabled)
|
|
132
|
+
.chayns-button-icon__weight:not(.chayns-button-icon__weight--active) {
|
|
133
|
+
display: none;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
:where(.chayns-button, .chayns-icon-button):active:not(:disabled)
|
|
137
|
+
.chayns-button-icon__weight--active {
|
|
138
|
+
display: inline-flex;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@media (hover: hover) {
|
|
142
|
+
:where(.chayns-button--primary, .chayns-icon-button--primary):hover:not(:disabled) {
|
|
143
|
+
background: var(--accent-hover);
|
|
144
|
+
box-shadow: var(--shadow-btn-hover);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
:where(.chayns-button--outline, .chayns-icon-button--outline):hover:not(:disabled) {
|
|
148
|
+
background: var(--accent);
|
|
149
|
+
color: var(--on-accent);
|
|
150
|
+
box-shadow: var(--shadow-btn-hover);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
:where(.chayns-button--ghost, .chayns-icon-button--ghost):hover:not(:disabled) {
|
|
154
|
+
background: var(--surface-alt);
|
|
155
|
+
color: var(--accent);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
:where(.chayns-button--danger, .chayns-icon-button--danger):hover:not(:disabled) {
|
|
159
|
+
background: var(--danger-bg-hover);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
:where(.chayns-button, .chayns-icon-button):hover:not(:disabled)
|
|
163
|
+
.chayns-button-icon__weight:not(.chayns-button-icon__weight--active) {
|
|
164
|
+
display: none;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
:where(.chayns-button, .chayns-icon-button):hover:not(:disabled)
|
|
168
|
+
.chayns-button-icon__weight--active {
|
|
169
|
+
display: inline-flex;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
:where(.chayns-button, .chayns-icon-button):focus-visible {
|
|
174
|
+
outline: none;
|
|
175
|
+
box-shadow: 0 0 0 var(--focus-ring-size)
|
|
176
|
+
rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
:where(.chayns-button--primary, .chayns-icon-button--primary):focus-visible {
|
|
180
|
+
box-shadow:
|
|
181
|
+
0 0 0 var(--focus-ring-size) rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong)),
|
|
182
|
+
var(--shadow-btn);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@media (forced-colors: active) {
|
|
186
|
+
:where(.chayns-button, .chayns-icon-button):focus-visible {
|
|
187
|
+
outline: var(--focus-ring-size) solid ButtonText;
|
|
188
|
+
outline-offset: 1px;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
package/dist/card.css
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AccordionProps } from './Accordion.types.js';
|
|
2
|
+
declare function Accordion({ children, className, defaultOpen, disabled, id, onOpenChange, open, title, }: AccordionProps): import("react").JSX.Element;
|
|
3
|
+
export default Accordion;
|
|
4
|
+
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,iBAAS,SAAS,CAAC,EACjB,QAAQ,EACR,SAAS,EACT,WAAmB,EACnB,QAAgB,EAChB,EAAE,EACF,YAAY,EACZ,IAAI,EACJ,KAAK,GACN,EAAE,cAAc,+BA8EhB;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { AccordionDepthContext, AccordionGroupContext } from "./AccordionContext.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useContext, useId, useState } from "react";
|
|
4
|
+
//#region src/components/accordion/Accordion.tsx
|
|
5
|
+
function Accordion({ children, className, defaultOpen = false, disabled = false, id, onOpenChange, open, title }) {
|
|
6
|
+
const depth = useContext(AccordionDepthContext);
|
|
7
|
+
const group = useContext(AccordionGroupContext);
|
|
8
|
+
const generatedId = useId();
|
|
9
|
+
const baseId = id ?? generatedId;
|
|
10
|
+
const headerId = `${baseId}-header`;
|
|
11
|
+
const panelId = `${baseId}-panel`;
|
|
12
|
+
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
|
|
13
|
+
let isOpen;
|
|
14
|
+
if (group) isOpen = group.isOpen(baseId);
|
|
15
|
+
else if (open !== void 0) isOpen = open;
|
|
16
|
+
else isOpen = uncontrolledOpen;
|
|
17
|
+
const handleToggle = () => {
|
|
18
|
+
if (group) {
|
|
19
|
+
group.toggle(baseId);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const nextOpen = !isOpen;
|
|
23
|
+
if (open === void 0) setUncontrolledOpen(nextOpen);
|
|
24
|
+
onOpenChange?.(nextOpen);
|
|
25
|
+
};
|
|
26
|
+
const grouped = group !== null;
|
|
27
|
+
const rootClassName = [
|
|
28
|
+
"chayns-accordion",
|
|
29
|
+
grouped ? "chayns-accordion--grouped" : !grouped && depth > 0 ? "chayns-accordion--wrapped" : "chayns-accordion--standalone",
|
|
30
|
+
isOpen ? "chayns-accordion--open" : null,
|
|
31
|
+
disabled ? "chayns-accordion--disabled" : null,
|
|
32
|
+
className
|
|
33
|
+
].filter(Boolean).join(" ");
|
|
34
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
35
|
+
className: rootClassName,
|
|
36
|
+
children: [/* @__PURE__ */ jsxs("button", {
|
|
37
|
+
"aria-controls": panelId,
|
|
38
|
+
"aria-expanded": isOpen,
|
|
39
|
+
className: "chayns-accordion__header",
|
|
40
|
+
disabled,
|
|
41
|
+
id: headerId,
|
|
42
|
+
onClick: handleToggle,
|
|
43
|
+
type: "button",
|
|
44
|
+
children: [/* @__PURE__ */ jsx("i", {
|
|
45
|
+
"aria-hidden": "true",
|
|
46
|
+
className: "chayns-accordion__chevron far fa-chevron-right"
|
|
47
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
48
|
+
className: "chayns-accordion__title",
|
|
49
|
+
children: title
|
|
50
|
+
})]
|
|
51
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
52
|
+
"aria-labelledby": headerId,
|
|
53
|
+
className: "chayns-accordion__panel",
|
|
54
|
+
id: panelId,
|
|
55
|
+
role: "region",
|
|
56
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
57
|
+
className: "chayns-accordion__inner",
|
|
58
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
59
|
+
className: "chayns-accordion__content",
|
|
60
|
+
children: /* @__PURE__ */ jsx(AccordionDepthContext.Provider, {
|
|
61
|
+
value: depth + 1,
|
|
62
|
+
children
|
|
63
|
+
})
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
})]
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { Accordion as default };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","names":[],"sources":["../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["import { useContext, useId, useState } from 'react';\n\nimport { AccordionDepthContext, AccordionGroupContext } from './AccordionContext.js';\nimport type { AccordionProps } from './Accordion.types.js';\n\nfunction Accordion({\n children,\n className,\n defaultOpen = false,\n disabled = false,\n id,\n onOpenChange,\n open,\n title,\n}: AccordionProps) {\n const depth = useContext(AccordionDepthContext);\n const group = useContext(AccordionGroupContext);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const headerId = `${baseId}-header`;\n const panelId = `${baseId}-panel`;\n\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n\n let isOpen: boolean;\n if (group) {\n isOpen = group.isOpen(baseId);\n } else if (open !== undefined) {\n isOpen = open;\n } else {\n isOpen = uncontrolledOpen;\n }\n\n const handleToggle = () => {\n if (group) {\n group.toggle(baseId);\n return;\n }\n\n const nextOpen = !isOpen;\n if (open === undefined) setUncontrolledOpen(nextOpen);\n onOpenChange?.(nextOpen);\n };\n\n const grouped = group !== null;\n const wrapped = !grouped && depth > 0;\n const variantClassName = grouped\n ? 'chayns-accordion--grouped'\n : wrapped\n ? 'chayns-accordion--wrapped'\n : 'chayns-accordion--standalone';\n\n const rootClassName = [\n 'chayns-accordion',\n variantClassName,\n isOpen ? 'chayns-accordion--open' : null,\n disabled ? 'chayns-accordion--disabled' : null,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClassName}>\n <button\n aria-controls={panelId}\n aria-expanded={isOpen}\n className=\"chayns-accordion__header\"\n disabled={disabled}\n id={headerId}\n onClick={handleToggle}\n type=\"button\"\n >\n <i aria-hidden=\"true\" className=\"chayns-accordion__chevron far fa-chevron-right\" />\n <span className=\"chayns-accordion__title\">{title}</span>\n </button>\n <div\n aria-labelledby={headerId}\n className=\"chayns-accordion__panel\"\n id={panelId}\n role=\"region\"\n >\n <div className=\"chayns-accordion__inner\">\n <div className=\"chayns-accordion__content\">\n <AccordionDepthContext.Provider value={depth + 1}>\n {children}\n </AccordionDepthContext.Provider>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default Accordion;\n"],"mappings":";;;;AAKA,SAAS,UAAU,EACjB,UACA,WACA,cAAc,OACd,WAAW,OACX,IACA,cACA,MACA,SACiB;CACjB,MAAM,QAAQ,WAAW,qBAAqB;CAC9C,MAAM,QAAQ,WAAW,qBAAqB;CAC9C,MAAM,cAAc,MAAM;CAC1B,MAAM,SAAS,MAAM;CACrB,MAAM,WAAW,GAAG,OAAO;CAC3B,MAAM,UAAU,GAAG,OAAO;CAE1B,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,WAAW;CAEpE,IAAI;CACJ,IAAI,OACF,SAAS,MAAM,OAAO,MAAM;MACvB,IAAI,SAAS,KAAA,GAClB,SAAS;MAET,SAAS;CAGX,MAAM,qBAAqB;EACzB,IAAI,OAAO;GACT,MAAM,OAAO,MAAM;GACnB;EACF;EAEA,MAAM,WAAW,CAAC;EAClB,IAAI,SAAS,KAAA,GAAW,oBAAoB,QAAQ;EACpD,eAAe,QAAQ;CACzB;CAEA,MAAM,UAAU,UAAU;CAQ1B,MAAM,gBAAgB;EACpB;EAPuB,UACrB,8BAFY,CAAC,WAAW,QAAQ,IAI9B,8BACA;EAKJ,SAAS,2BAA2B;EACpC,WAAW,+BAA+B;EAC1C;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,qBAAC,OAAD;EAAK,WAAW;EAAhB,UAAA,CACE,qBAAC,UAAD;GACE,iBAAe;GACf,iBAAe;GACf,WAAU;GACA;GACV,IAAI;GACJ,SAAS;GACT,MAAK;GAPP,UAAA,CASE,oBAAC,KAAD;IAAG,eAAY;IAAO,WAAU;GAAkD,CAAA,GAClF,oBAAC,QAAD;IAAM,WAAU;IAA2B,UAAA;GAAY,CAAA,CACjD;EACR,CAAA,GAAA,oBAAC,OAAD;GACE,mBAAiB;GACjB,WAAU;GACV,IAAI;GACJ,MAAK;GAEL,UAAA,oBAAC,OAAD;IAAK,WAAU;IACb,UAAA,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,sBAAsB,UAAvB;MAAgC,OAAO,QAAQ;MAC5C;KAC6B,CAAA;IAC7B,CAAA;GACF,CAAA;EACF,CAAA,CACF;;AAET"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/** Props for a single disclosure accordion. */
|
|
3
|
+
export interface AccordionProps {
|
|
4
|
+
/** Visible, localized header label used as the accessible name. */
|
|
5
|
+
title: ReactNode;
|
|
6
|
+
/** Panel content revealed when the accordion is open. */
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
/** Controlled open state. Ignored when inside an AccordionGroup. */
|
|
9
|
+
open?: boolean;
|
|
10
|
+
/** Uncontrolled initial open state. Ignored when inside an AccordionGroup. */
|
|
11
|
+
defaultOpen?: boolean;
|
|
12
|
+
/** Called with the next open state on user toggle. */
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
/** Disables the header trigger. */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Stable id used to wire header and panel and, inside an AccordionGroup, to
|
|
18
|
+
* identify the item. Falls back to a generated id.
|
|
19
|
+
*/
|
|
20
|
+
id?: string;
|
|
21
|
+
/** Additional class names on the accordion root element. */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Props for a group of mutually exclusive accordions. */
|
|
25
|
+
export interface AccordionGroupProps {
|
|
26
|
+
/** Accordion items belonging to the group. */
|
|
27
|
+
children?: ReactNode;
|
|
28
|
+
/** Controlled id of the currently open item, or null when all are closed. */
|
|
29
|
+
openId?: string | null;
|
|
30
|
+
/** Uncontrolled id of the initially open item. */
|
|
31
|
+
defaultOpenId?: string | null;
|
|
32
|
+
/** Called with the next open item id, or null when the group closes. */
|
|
33
|
+
onOpenChange?: (openId: string | null) => void;
|
|
34
|
+
/** Additional class names on the group root element. */
|
|
35
|
+
className?: string;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Accordion.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.types.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,KAAK,EAAE,SAAS,CAAC;IAEjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,8EAA8E;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,wEAAwE;IACxE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAE/C,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nesting depth of the current accordion subtree. Depth 0 is a top-level
|
|
3
|
+
* accordion; any depth greater than 0 renders as an automatically detected
|
|
4
|
+
* wrapped (nested) accordion. Each open panel provides an incremented depth to
|
|
5
|
+
* its content.
|
|
6
|
+
*/
|
|
7
|
+
export declare const AccordionDepthContext: import("react").Context<number>;
|
|
8
|
+
/** Exclusive open-state contract shared by an AccordionGroup with its items. */
|
|
9
|
+
export interface AccordionGroupContextValue {
|
|
10
|
+
/** Whether the item registered under this id is the open one. */
|
|
11
|
+
isOpen: (id: string) => boolean;
|
|
12
|
+
/** Toggles the item registered under this id within the group. */
|
|
13
|
+
toggle: (id: string) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Present when an Accordion is rendered inside an AccordionGroup. Items then
|
|
17
|
+
* share the group's exclusive open state instead of owning local state.
|
|
18
|
+
*/
|
|
19
|
+
export declare const AccordionGroupContext: import("react").Context<AccordionGroupContextValue | null>;
|
|
20
|
+
//# sourceMappingURL=AccordionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContext.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/AccordionContext.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,iCAA2B,CAAC;AAE9D,gFAAgF;AAChF,MAAM,WAAW,0BAA0B;IACzC,iEAAiE;IACjE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAEhC,kEAAkE;IAClE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,4DAAyD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createContext } from "react";
|
|
2
|
+
//#region src/components/accordion/AccordionContext.ts
|
|
3
|
+
/**
|
|
4
|
+
* Nesting depth of the current accordion subtree. Depth 0 is a top-level
|
|
5
|
+
* accordion; any depth greater than 0 renders as an automatically detected
|
|
6
|
+
* wrapped (nested) accordion. Each open panel provides an incremented depth to
|
|
7
|
+
* its content.
|
|
8
|
+
*/
|
|
9
|
+
var AccordionDepthContext = createContext(0);
|
|
10
|
+
/**
|
|
11
|
+
* Present when an Accordion is rendered inside an AccordionGroup. Items then
|
|
12
|
+
* share the group's exclusive open state instead of owning local state.
|
|
13
|
+
*/
|
|
14
|
+
var AccordionGroupContext = createContext(null);
|
|
15
|
+
//#endregion
|
|
16
|
+
export { AccordionDepthContext, AccordionGroupContext };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=AccordionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContext.js","names":[],"sources":["../../../src/components/accordion/AccordionContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\n/**\n * Nesting depth of the current accordion subtree. Depth 0 is a top-level\n * accordion; any depth greater than 0 renders as an automatically detected\n * wrapped (nested) accordion. Each open panel provides an incremented depth to\n * its content.\n */\nexport const AccordionDepthContext = createContext<number>(0);\n\n/** Exclusive open-state contract shared by an AccordionGroup with its items. */\nexport interface AccordionGroupContextValue {\n /** Whether the item registered under this id is the open one. */\n isOpen: (id: string) => boolean;\n\n /** Toggles the item registered under this id within the group. */\n toggle: (id: string) => void;\n}\n\n/**\n * Present when an Accordion is rendered inside an AccordionGroup. Items then\n * share the group's exclusive open state instead of owning local state.\n */\nexport const AccordionGroupContext = createContext<AccordionGroupContextValue | null>(null);\n"],"mappings":";;;;;;;;AAQA,IAAa,wBAAwB,cAAsB,CAAC;;;;;AAe5D,IAAa,wBAAwB,cAAiD,IAAI"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AccordionGroupProps } from './Accordion.types.js';
|
|
2
|
+
declare function AccordionGroup({ children, className, defaultOpenId, onOpenChange, openId, }: AccordionGroupProps): import("react").JSX.Element;
|
|
3
|
+
export default AccordionGroup;
|
|
4
|
+
//# sourceMappingURL=AccordionGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionGroup.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/AccordionGroup.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,iBAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,aAAoB,EACpB,YAAY,EACZ,MAAM,GACP,EAAE,mBAAmB,+BA6BrB;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AccordionGroupContext } from "./AccordionContext.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useMemo, useState } from "react";
|
|
4
|
+
//#region src/components/accordion/AccordionGroup.tsx
|
|
5
|
+
function AccordionGroup({ children, className, defaultOpenId = null, onOpenChange, openId }) {
|
|
6
|
+
const [uncontrolledOpenId, setUncontrolledOpenId] = useState(defaultOpenId);
|
|
7
|
+
const isControlled = openId !== void 0;
|
|
8
|
+
const currentOpenId = isControlled ? openId : uncontrolledOpenId;
|
|
9
|
+
const isOpen = useCallback((id) => currentOpenId === id, [currentOpenId]);
|
|
10
|
+
const toggle = useCallback((id) => {
|
|
11
|
+
const nextOpenId = currentOpenId === id ? null : id;
|
|
12
|
+
if (!isControlled) setUncontrolledOpenId(nextOpenId);
|
|
13
|
+
onOpenChange?.(nextOpenId);
|
|
14
|
+
}, [
|
|
15
|
+
currentOpenId,
|
|
16
|
+
isControlled,
|
|
17
|
+
onOpenChange
|
|
18
|
+
]);
|
|
19
|
+
const contextValue = useMemo(() => ({
|
|
20
|
+
isOpen,
|
|
21
|
+
toggle
|
|
22
|
+
}), [isOpen, toggle]);
|
|
23
|
+
const rootClassName = ["chayns-accordion-group", className].filter(Boolean).join(" ");
|
|
24
|
+
return /* @__PURE__ */ jsx(AccordionGroupContext.Provider, {
|
|
25
|
+
value: contextValue,
|
|
26
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
27
|
+
className: rootClassName,
|
|
28
|
+
children
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { AccordionGroup as default };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=AccordionGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionGroup.js","names":[],"sources":["../../../src/components/accordion/AccordionGroup.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\n\nimport { AccordionGroupContext } from './AccordionContext.js';\nimport type { AccordionGroupContextValue } from './AccordionContext.js';\nimport type { AccordionGroupProps } from './Accordion.types.js';\n\nfunction AccordionGroup({\n children,\n className,\n defaultOpenId = null,\n onOpenChange,\n openId,\n}: AccordionGroupProps) {\n const [uncontrolledOpenId, setUncontrolledOpenId] = useState<string | null>(defaultOpenId);\n\n const isControlled = openId !== undefined;\n const currentOpenId = isControlled ? openId : uncontrolledOpenId;\n\n const isOpen = useCallback((id: string) => currentOpenId === id, [currentOpenId]);\n\n const toggle = useCallback(\n (id: string) => {\n const nextOpenId = currentOpenId === id ? null : id;\n if (!isControlled) setUncontrolledOpenId(nextOpenId);\n onOpenChange?.(nextOpenId);\n },\n [currentOpenId, isControlled, onOpenChange],\n );\n\n const contextValue = useMemo<AccordionGroupContextValue>(\n () => ({ isOpen, toggle }),\n [isOpen, toggle],\n );\n\n const rootClassName = ['chayns-accordion-group', className].filter(Boolean).join(' ');\n\n return (\n <AccordionGroupContext.Provider value={contextValue}>\n <div className={rootClassName}>{children}</div>\n </AccordionGroupContext.Provider>\n );\n}\n\nexport default AccordionGroup;\n"],"mappings":";;;;AAMA,SAAS,eAAe,EACtB,UACA,WACA,gBAAgB,MAChB,cACA,UACsB;CACtB,MAAM,CAAC,oBAAoB,yBAAyB,SAAwB,aAAa;CAEzF,MAAM,eAAe,WAAW,KAAA;CAChC,MAAM,gBAAgB,eAAe,SAAS;CAE9C,MAAM,SAAS,aAAa,OAAe,kBAAkB,IAAI,CAAC,aAAa,CAAC;CAEhF,MAAM,SAAS,aACZ,OAAe;EACd,MAAM,aAAa,kBAAkB,KAAK,OAAO;EACjD,IAAI,CAAC,cAAc,sBAAsB,UAAU;EACnD,eAAe,UAAU;CAC3B,GACA;EAAC;EAAe;EAAc;CAAY,CAC5C;CAEA,MAAM,eAAe,eACZ;EAAE;EAAQ;CAAO,IACxB,CAAC,QAAQ,MAAM,CACjB;CAEA,MAAM,gBAAgB,CAAC,0BAA0B,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEpF,OACE,oBAAC,sBAAsB,UAAvB;EAAgC,OAAO;EACrC,UAAA,oBAAC,OAAD;GAAK,WAAW;GAAgB;EAAc,CAAA;CAChB,CAAA;AAEpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,iBAAS,MAAM,CAAC,EACd,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,IAAe,EACf,OAAO,EACP,GAAG,WAAW,EACf,EAAE,WAAW,+BASb;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import ButtonIcon from "./ButtonIcon.js";
|
|
2
|
+
import { getButtonClassName } from "./buttonClassName.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/button/Button.tsx
|
|
5
|
+
function Button({ children, className, icon, type = "button", variant, ...buttonProps }) {
|
|
6
|
+
const resolvedClassName = getButtonClassName("chayns-button", variant, className);
|
|
7
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
8
|
+
...buttonProps,
|
|
9
|
+
className: resolvedClassName,
|
|
10
|
+
type,
|
|
11
|
+
children: [icon ? /* @__PURE__ */ jsx(ButtonIcon, { icon }) : null, children]
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Button as default };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","names":[],"sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["import type { ButtonProps } from './Button.types.js';\nimport ButtonIcon from './ButtonIcon.js';\nimport { getButtonClassName } from './buttonClassName.js';\n\nfunction Button({\n children,\n className,\n icon,\n type = 'button',\n variant,\n ...buttonProps\n}: ButtonProps) {\n const resolvedClassName = getButtonClassName('chayns-button', variant, className);\n\n return (\n <button {...buttonProps} className={resolvedClassName} type={type}>\n {icon ? <ButtonIcon icon={icon} /> : null}\n {children}\n </button>\n );\n}\n\nexport default Button;\n"],"mappings":";;;;AAIA,SAAS,OAAO,EACd,UACA,WACA,MACA,OAAO,UACP,SACA,GAAG,eACW;CACd,MAAM,oBAAoB,mBAAmB,iBAAiB,SAAS,SAAS;CAEhF,OACE,qBAAC,UAAD;EAAQ,GAAI;EAAa,WAAW;EAAyB;EAA7D,UAAA,CACG,OAAO,oBAAC,YAAD,EAAkB,KAAO,CAAA,IAAI,MACpC,QACK;;AAEZ"}
|