@kushagradhawan/kookie-ui 0.1.28 → 0.1.29
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/components.css +452 -249
- package/dist/cjs/components/accordion.d.ts +22 -0
- package/dist/cjs/components/accordion.d.ts.map +1 -0
- package/dist/cjs/components/accordion.js +2 -0
- package/dist/cjs/components/accordion.js.map +7 -0
- package/dist/cjs/components/accordion.props.d.ts +88 -0
- package/dist/cjs/components/accordion.props.d.ts.map +1 -0
- package/dist/cjs/components/accordion.props.js +2 -0
- package/dist/cjs/components/accordion.props.js.map +7 -0
- package/dist/cjs/components/dialog.props.d.ts +1 -1
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
- package/dist/esm/components/accordion.d.ts +22 -0
- package/dist/esm/components/accordion.d.ts.map +1 -0
- package/dist/esm/components/accordion.js +2 -0
- package/dist/esm/components/accordion.js.map +7 -0
- package/dist/esm/components/accordion.props.d.ts +88 -0
- package/dist/esm/components/accordion.props.d.ts.map +1 -0
- package/dist/esm/components/accordion.props.js +2 -0
- package/dist/esm/components/accordion.props.js.map +7 -0
- package/dist/esm/components/dialog.props.d.ts +1 -1
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +3 -3
- package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
- package/package.json +1 -1
- package/src/components/_internal/base-sidebar-menu.css +223 -0
- package/src/components/_internal/base-sidebar.css +141 -0
- package/src/components/accordion.css +254 -0
- package/src/components/accordion.props.tsx +84 -0
- package/src/components/accordion.tsx +162 -0
- package/src/components/index.css +1 -0
- package/src/components/index.tsx +1 -0
- package/src/components/sidebar.css +180 -635
- package/styles.css +452 -249
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/* Accordion Root */
|
|
2
|
+
.rt-AccordionRoot {
|
|
3
|
+
border-radius: var(--radius-3);
|
|
4
|
+
overflow: hidden;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
:where(.rt-AccordionRoot:where(.rt-variant-surface)) {
|
|
8
|
+
background-color: var(--color-surface);
|
|
9
|
+
box-shadow: inset 0 0 0 1px var(--gray-a6);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
:where(.rt-AccordionRoot:where(.rt-variant-classic)) {
|
|
13
|
+
background-color: var(--color-surface);
|
|
14
|
+
box-shadow: var(--classic-inset-shadow-light);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
:where(.rt-AccordionRoot:where(.rt-variant-soft)) {
|
|
18
|
+
background-color: var(--accent-a3);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
:where(.rt-AccordionRoot:where(.rt-variant-outline)) {
|
|
22
|
+
box-shadow: inset 0 0 0 1px var(--gray-a7);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:where(.rt-AccordionRoot:where(.rt-variant-ghost)) {
|
|
26
|
+
background-color: transparent;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Panel background support */
|
|
30
|
+
:where(.rt-AccordionRoot[data-panel-background="translucent"]) {
|
|
31
|
+
background-color: color-mix(in srgb, var(--color-panel-translucent), transparent var(--panel-opacity-light));
|
|
32
|
+
backdrop-filter: var(--backdrop-blur-panel);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Accordion Item */
|
|
36
|
+
.rt-AccordionItem {
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
:where(.rt-AccordionItem:not(:last-child)) {
|
|
41
|
+
border-bottom: 1px solid var(--gray-a6);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:where(.rt-AccordionRoot:where(.rt-variant-ghost)) :where(.rt-AccordionItem:not(:last-child)) {
|
|
45
|
+
border-bottom: 1px solid var(--gray-a4);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Accordion Header */
|
|
49
|
+
.rt-AccordionHeader {
|
|
50
|
+
display: flex;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Accordion Trigger */
|
|
54
|
+
.rt-AccordionTrigger {
|
|
55
|
+
all: unset;
|
|
56
|
+
font-family: inherit;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex: 1;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: space-between;
|
|
61
|
+
padding: var(--space-3) var(--space-4);
|
|
62
|
+
font-size: var(--font-size-2);
|
|
63
|
+
font-weight: var(--font-weight-medium);
|
|
64
|
+
line-height: var(--line-height-3);
|
|
65
|
+
color: var(--gray-12);
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
transition: var(--transition-standard);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Size variants */
|
|
71
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-1)) .rt-AccordionTrigger {
|
|
72
|
+
padding: var(--space-2) var(--space-3);
|
|
73
|
+
font-size: var(--font-size-1);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-2)) .rt-AccordionTrigger {
|
|
77
|
+
padding: var(--space-3) var(--space-4);
|
|
78
|
+
font-size: var(--font-size-2);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-3)) .rt-AccordionTrigger {
|
|
82
|
+
padding: var(--space-4) var(--space-5);
|
|
83
|
+
font-size: var(--font-size-3);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-4)) .rt-AccordionTrigger {
|
|
87
|
+
padding: var(--space-5) var(--space-6);
|
|
88
|
+
font-size: var(--font-size-4);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Trigger hover states */
|
|
92
|
+
:where(.rt-AccordionTrigger:hover) {
|
|
93
|
+
background-color: var(--gray-a3);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
:where(.rt-AccordionRoot:where(.rt-variant-soft)) :where(.rt-AccordionTrigger:hover) {
|
|
97
|
+
background-color: var(--accent-a4);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:where(.rt-AccordionRoot:where(.rt-variant-ghost)) :where(.rt-AccordionTrigger:hover) {
|
|
101
|
+
background-color: var(--gray-a2);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Trigger focus states */
|
|
105
|
+
:where(.rt-AccordionTrigger:focus-visible) {
|
|
106
|
+
outline: var(--focus-outline-width) solid var(--focus-8);
|
|
107
|
+
outline-offset: var(--focus-outline-offset-inset);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* Accordion Content */
|
|
111
|
+
.rt-AccordionContent {
|
|
112
|
+
overflow: hidden;
|
|
113
|
+
/* remove padding here */
|
|
114
|
+
font-size: var(--font-size-2);
|
|
115
|
+
color: var(--gray-11);
|
|
116
|
+
line-height: var(--line-height-4);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.rt-AccordionContentInner {
|
|
120
|
+
padding: 0 var(--space-4) var(--space-3);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Size variants for content */
|
|
124
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-1)) .rt-AccordionContentInner {
|
|
125
|
+
padding: 0 var(--space-3) var(--space-2);
|
|
126
|
+
font-size: var(--font-size-1);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-2)) .rt-AccordionContentInner {
|
|
130
|
+
padding: 0 var(--space-4) var(--space-3);
|
|
131
|
+
font-size: var(--font-size-2);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-3)) .rt-AccordionContentInner {
|
|
135
|
+
padding: 0 var(--space-5) var(--space-4);
|
|
136
|
+
font-size: var(--font-size-3);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
:where(.rt-AccordionRoot:where(.rt-r-size-4)) .rt-AccordionContentInner {
|
|
140
|
+
padding: 0 var(--space-6) var(--space-5);
|
|
141
|
+
font-size: var(--font-size-4);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Content animations */
|
|
145
|
+
:where(.rt-AccordionContent[data-state="open"]) {
|
|
146
|
+
animation: rt-slide-down var(--duration-2) var(--ease-1);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
:where(.rt-AccordionContent[data-state="closed"]) {
|
|
150
|
+
animation: rt-slide-up var(--duration-2) var(--ease-1);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@keyframes rt-slide-down {
|
|
154
|
+
from {
|
|
155
|
+
height: 0;
|
|
156
|
+
}
|
|
157
|
+
to {
|
|
158
|
+
height: var(--radix-accordion-content-height);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@keyframes rt-slide-up {
|
|
163
|
+
from {
|
|
164
|
+
height: var(--radix-accordion-content-height);
|
|
165
|
+
}
|
|
166
|
+
to {
|
|
167
|
+
height: 0;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* High contrast mode */
|
|
172
|
+
:where(.rt-AccordionRoot[data-high-contrast]) .rt-AccordionTrigger {
|
|
173
|
+
color: var(--gray-12);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
:where(.rt-AccordionRoot[data-high-contrast]) .rt-AccordionContent {
|
|
177
|
+
color: var(--gray-12);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Color accent support */
|
|
181
|
+
:where(.rt-AccordionRoot:where(.rt-variant-soft)[data-accent-color]) :where(.rt-AccordionTrigger:hover) {
|
|
182
|
+
background-color: var(--accent-a4);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* Reduced motion */
|
|
186
|
+
@media (prefers-reduced-motion: reduce) {
|
|
187
|
+
:where(.rt-AccordionContent[data-state="open"]),
|
|
188
|
+
:where(.rt-AccordionContent[data-state="closed"]) {
|
|
189
|
+
animation: none;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* Soft variant detailed styling */
|
|
194
|
+
.rt-AccordionRoot:where(.rt-variant-soft) {
|
|
195
|
+
background-color: var(--accent-3);
|
|
196
|
+
color: var(--accent-12);
|
|
197
|
+
transition: var(--transition-background-blur);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* Theme-level translucent override (root Theme sets data-panel-background on children) */
|
|
201
|
+
:where([data-panel-background='translucent']) .rt-AccordionRoot:where(.rt-variant-soft) {
|
|
202
|
+
background-color: var(--accent-a3);
|
|
203
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* Component-level overrides */
|
|
207
|
+
.rt-AccordionRoot:where(.rt-variant-soft[data-panel-background='solid']) {
|
|
208
|
+
background-color: var(--accent-3);
|
|
209
|
+
backdrop-filter: none;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.rt-AccordionRoot:where(.rt-variant-soft[data-panel-background='translucent']) {
|
|
213
|
+
background-color: var(--accent-a3);
|
|
214
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
215
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* Adjusted hover selectors to lower specificity */
|
|
219
|
+
@media (hover: hover) {
|
|
220
|
+
:where(.rt-AccordionRoot.rt-variant-soft:hover) {
|
|
221
|
+
background-color: var(--accent-4);
|
|
222
|
+
}
|
|
223
|
+
:where([data-panel-background='translucent']) :where(.rt-AccordionRoot.rt-variant-soft:hover) {
|
|
224
|
+
background-color: var(--accent-a4);
|
|
225
|
+
}
|
|
226
|
+
:where(.rt-AccordionRoot.rt-variant-soft[data-panel-background='solid']:hover) {
|
|
227
|
+
background-color: var(--accent-4);
|
|
228
|
+
backdrop-filter: none;
|
|
229
|
+
}
|
|
230
|
+
:where(.rt-AccordionRoot.rt-variant-soft[data-panel-background='translucent']:hover) {
|
|
231
|
+
background-color: var(--accent-a4);
|
|
232
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* Ghost variant hover with lowered specificity */
|
|
237
|
+
@media (hover: hover) {
|
|
238
|
+
:where(.rt-AccordionRoot.rt-variant-ghost:hover) {
|
|
239
|
+
background-color: var(--accent-2);
|
|
240
|
+
}
|
|
241
|
+
:where([data-panel-background='translucent']) :where(.rt-AccordionRoot.rt-variant-ghost:hover) {
|
|
242
|
+
background-color: var(--accent-a2);
|
|
243
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
244
|
+
}
|
|
245
|
+
:where(.rt-AccordionRoot.rt-variant-ghost[data-panel-background='solid']:hover) {
|
|
246
|
+
background-color: var(--accent-2);
|
|
247
|
+
backdrop-filter: none;
|
|
248
|
+
}
|
|
249
|
+
:where(.rt-AccordionRoot.rt-variant-ghost[data-panel-background='translucent']:hover) {
|
|
250
|
+
background-color: var(--accent-a2);
|
|
251
|
+
backdrop-filter: var(--backdrop-filter-components);
|
|
252
|
+
--backdrop-filter-components: blur(var(--backdrop-blur-components));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { asChildPropDef } from '../props/as-child.prop.js';
|
|
2
|
+
import { colorPropDef } from '../props/color.prop.js';
|
|
3
|
+
import { highContrastPropDef } from '../props/high-contrast.prop.js';
|
|
4
|
+
import { radiusPropDef } from '../props/radius.prop.js';
|
|
5
|
+
|
|
6
|
+
import type { PropDef } from '../props/prop-def.js';
|
|
7
|
+
|
|
8
|
+
const sizes = ['1', '2', '3', '4'] as const;
|
|
9
|
+
const variants = ['classic', 'soft', 'surface', 'outline', 'ghost'] as const;
|
|
10
|
+
const panelBackgrounds = ['solid', 'translucent'] as const;
|
|
11
|
+
|
|
12
|
+
const accordionRootPropDefs = {
|
|
13
|
+
...asChildPropDef,
|
|
14
|
+
size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },
|
|
15
|
+
variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'surface' },
|
|
16
|
+
...colorPropDef,
|
|
17
|
+
...highContrastPropDef,
|
|
18
|
+
...radiusPropDef,
|
|
19
|
+
panelBackground: { type: 'enum', values: panelBackgrounds, default: undefined },
|
|
20
|
+
flush: { type: 'boolean', default: false },
|
|
21
|
+
} satisfies {
|
|
22
|
+
size: PropDef<(typeof sizes)[number]>;
|
|
23
|
+
variant: PropDef<(typeof variants)[number]>;
|
|
24
|
+
panelBackground: PropDef<(typeof panelBackgrounds)[number] | undefined>;
|
|
25
|
+
flush: PropDef<boolean>;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const accordionItemPropDefs = {
|
|
29
|
+
...asChildPropDef,
|
|
30
|
+
} satisfies {
|
|
31
|
+
asChild: PropDef<boolean>;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const accordionHeaderPropDefs = {
|
|
35
|
+
...asChildPropDef,
|
|
36
|
+
} satisfies {
|
|
37
|
+
asChild: PropDef<boolean>;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const accordionTriggerPropDefs = {
|
|
41
|
+
...asChildPropDef,
|
|
42
|
+
} satisfies {
|
|
43
|
+
asChild: PropDef<boolean>;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const accordionContentPropDefs = {
|
|
47
|
+
...asChildPropDef,
|
|
48
|
+
} satisfies {
|
|
49
|
+
asChild: PropDef<boolean>;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
accordionRootPropDefs,
|
|
54
|
+
accordionItemPropDefs,
|
|
55
|
+
accordionHeaderPropDefs,
|
|
56
|
+
accordionTriggerPropDefs,
|
|
57
|
+
accordionContentPropDefs,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export type AccordionRootOwnProps = {
|
|
61
|
+
size?: (typeof sizes)[number];
|
|
62
|
+
variant?: (typeof variants)[number];
|
|
63
|
+
color?: string;
|
|
64
|
+
highContrast?: boolean;
|
|
65
|
+
radius?: string;
|
|
66
|
+
panelBackground?: (typeof panelBackgrounds)[number];
|
|
67
|
+
flush?: boolean;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export type AccordionItemOwnProps = {
|
|
71
|
+
asChild?: boolean;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export type AccordionHeaderOwnProps = {
|
|
75
|
+
asChild?: boolean;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export type AccordionTriggerOwnProps = {
|
|
79
|
+
asChild?: boolean;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export type AccordionContentOwnProps = {
|
|
83
|
+
asChild?: boolean;
|
|
84
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { Accordion as AccordionPrimitive } from 'radix-ui';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
accordionRootPropDefs,
|
|
7
|
+
accordionItemPropDefs,
|
|
8
|
+
accordionHeaderPropDefs,
|
|
9
|
+
accordionTriggerPropDefs,
|
|
10
|
+
accordionContentPropDefs,
|
|
11
|
+
} from './accordion.props.js';
|
|
12
|
+
import { extractProps } from '../helpers/extract-props.js';
|
|
13
|
+
import { requireReactElement } from '../helpers/require-react-element.js';
|
|
14
|
+
|
|
15
|
+
import type {
|
|
16
|
+
AccordionRootOwnProps,
|
|
17
|
+
AccordionItemOwnProps,
|
|
18
|
+
AccordionHeaderOwnProps,
|
|
19
|
+
AccordionTriggerOwnProps,
|
|
20
|
+
AccordionContentOwnProps,
|
|
21
|
+
} from './accordion.props.js';
|
|
22
|
+
import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
|
|
23
|
+
|
|
24
|
+
// Root component
|
|
25
|
+
type AccordionRootElement = React.ElementRef<typeof AccordionPrimitive.Root>;
|
|
26
|
+
interface AccordionRootProps
|
|
27
|
+
extends ComponentPropsWithout<typeof AccordionPrimitive.Root, RemovedProps>,
|
|
28
|
+
AccordionRootOwnProps {}
|
|
29
|
+
|
|
30
|
+
const AccordionRoot = React.forwardRef<AccordionRootElement, AccordionRootProps>(
|
|
31
|
+
(props, forwardedRef) => {
|
|
32
|
+
const { className, panelBackground, flush, radius, ...extractedRadixProps } = extractProps(
|
|
33
|
+
props,
|
|
34
|
+
accordionRootPropDefs,
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const radixProps = extractedRadixProps as React.ComponentPropsWithoutRef<
|
|
38
|
+
typeof AccordionPrimitive.Root
|
|
39
|
+
>;
|
|
40
|
+
|
|
41
|
+
// Ensure single accordions can collapse by default unless explicitly set
|
|
42
|
+
if (radixProps.type === 'single' && radixProps.collapsible === undefined) {
|
|
43
|
+
radixProps.collapsible = true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<AccordionPrimitive.Root
|
|
48
|
+
{...radixProps}
|
|
49
|
+
ref={forwardedRef}
|
|
50
|
+
className={classNames('rt-AccordionRoot', className)}
|
|
51
|
+
data-panel-background={panelBackground}
|
|
52
|
+
data-flush={flush || undefined}
|
|
53
|
+
data-radius={radius}
|
|
54
|
+
/>
|
|
55
|
+
);
|
|
56
|
+
},
|
|
57
|
+
);
|
|
58
|
+
AccordionRoot.displayName = 'Accordion.Root';
|
|
59
|
+
|
|
60
|
+
// Item component
|
|
61
|
+
type AccordionItemElement = React.ElementRef<typeof AccordionPrimitive.Item>;
|
|
62
|
+
interface AccordionItemProps
|
|
63
|
+
extends ComponentPropsWithout<typeof AccordionPrimitive.Item, RemovedProps>,
|
|
64
|
+
AccordionItemOwnProps {}
|
|
65
|
+
|
|
66
|
+
const AccordionItem = React.forwardRef<AccordionItemElement, AccordionItemProps>(
|
|
67
|
+
(props, forwardedRef) => {
|
|
68
|
+
const { className, ...itemProps } = extractProps(props, accordionItemPropDefs);
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<AccordionPrimitive.Item
|
|
72
|
+
{...itemProps}
|
|
73
|
+
ref={forwardedRef}
|
|
74
|
+
className={classNames('rt-AccordionItem', className)}
|
|
75
|
+
/>
|
|
76
|
+
);
|
|
77
|
+
},
|
|
78
|
+
);
|
|
79
|
+
AccordionItem.displayName = 'Accordion.Item';
|
|
80
|
+
|
|
81
|
+
// Header component
|
|
82
|
+
type AccordionHeaderElement = React.ElementRef<typeof AccordionPrimitive.Header>;
|
|
83
|
+
interface AccordionHeaderProps
|
|
84
|
+
extends ComponentPropsWithout<typeof AccordionPrimitive.Header, RemovedProps>,
|
|
85
|
+
AccordionHeaderOwnProps {}
|
|
86
|
+
|
|
87
|
+
const AccordionHeader = React.forwardRef<AccordionHeaderElement, AccordionHeaderProps>(
|
|
88
|
+
(props, forwardedRef) => {
|
|
89
|
+
const { className, ...headerProps } = extractProps(props, accordionHeaderPropDefs);
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<AccordionPrimitive.Header
|
|
93
|
+
{...headerProps}
|
|
94
|
+
ref={forwardedRef}
|
|
95
|
+
className={classNames('rt-AccordionHeader', className)}
|
|
96
|
+
/>
|
|
97
|
+
);
|
|
98
|
+
},
|
|
99
|
+
);
|
|
100
|
+
AccordionHeader.displayName = 'Accordion.Header';
|
|
101
|
+
|
|
102
|
+
// Trigger component
|
|
103
|
+
type AccordionTriggerElement = React.ElementRef<typeof AccordionPrimitive.Trigger>;
|
|
104
|
+
interface AccordionTriggerProps
|
|
105
|
+
extends ComponentPropsWithout<typeof AccordionPrimitive.Trigger, RemovedProps>,
|
|
106
|
+
AccordionTriggerOwnProps {}
|
|
107
|
+
|
|
108
|
+
const AccordionTrigger = React.forwardRef<AccordionTriggerElement, AccordionTriggerProps>(
|
|
109
|
+
({ children, ...props }, forwardedRef) => {
|
|
110
|
+
const { className, ...triggerProps } = extractProps(props, accordionTriggerPropDefs);
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<AccordionPrimitive.Trigger
|
|
114
|
+
{...triggerProps}
|
|
115
|
+
ref={forwardedRef}
|
|
116
|
+
className={classNames('rt-AccordionTrigger', className)}
|
|
117
|
+
>
|
|
118
|
+
{children}
|
|
119
|
+
</AccordionPrimitive.Trigger>
|
|
120
|
+
);
|
|
121
|
+
},
|
|
122
|
+
);
|
|
123
|
+
AccordionTrigger.displayName = 'Accordion.Trigger';
|
|
124
|
+
|
|
125
|
+
// Content component
|
|
126
|
+
type AccordionContentElement = React.ElementRef<typeof AccordionPrimitive.Content>;
|
|
127
|
+
interface AccordionContentProps
|
|
128
|
+
extends ComponentPropsWithout<typeof AccordionPrimitive.Content, RemovedProps>,
|
|
129
|
+
AccordionContentOwnProps {}
|
|
130
|
+
|
|
131
|
+
const AccordionContent = React.forwardRef<AccordionContentElement, AccordionContentProps>(
|
|
132
|
+
(props, forwardedRef) => {
|
|
133
|
+
const { className, children, ...contentProps } = extractProps(props, accordionContentPropDefs);
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<AccordionPrimitive.Content
|
|
137
|
+
{...contentProps}
|
|
138
|
+
ref={forwardedRef}
|
|
139
|
+
className={classNames('rt-AccordionContent', className)}
|
|
140
|
+
>
|
|
141
|
+
<div className="rt-AccordionContentInner">{children}</div>
|
|
142
|
+
</AccordionPrimitive.Content>
|
|
143
|
+
);
|
|
144
|
+
},
|
|
145
|
+
);
|
|
146
|
+
AccordionContent.displayName = 'Accordion.Content';
|
|
147
|
+
|
|
148
|
+
export {
|
|
149
|
+
AccordionRoot as Root,
|
|
150
|
+
AccordionItem as Item,
|
|
151
|
+
AccordionHeader as Header,
|
|
152
|
+
AccordionTrigger as Trigger,
|
|
153
|
+
AccordionContent as Content,
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export type {
|
|
157
|
+
AccordionRootProps as RootProps,
|
|
158
|
+
AccordionItemProps as ItemProps,
|
|
159
|
+
AccordionHeaderProps as HeaderProps,
|
|
160
|
+
AccordionTriggerProps as TriggerProps,
|
|
161
|
+
AccordionContentProps as ContentProps,
|
|
162
|
+
};
|
package/src/components/index.css
CHANGED
package/src/components/index.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { AccessibleIcon, type AccessibleIconProps } from './accessible-icon.js';
|
|
2
|
+
export * as Accordion from './accordion.js';
|
|
2
3
|
export * as AlertDialog from './alert-dialog.js';
|
|
3
4
|
export { AspectRatio, type AspectRatioProps } from './aspect-ratio.js';
|
|
4
5
|
export { Avatar, type AvatarProps } from './avatar.js';
|