@iit/precision-ui 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/cards/License.d.ts.map +1 -1
- package/dist/components/ui/carousel.d.ts +3 -1
- package/dist/components/ui/carousel.d.ts.map +1 -1
- package/dist/components/ui/combobox.d.ts +19 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/command.d.ts +81 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/decorators/CarouselWrapper.d.ts +2 -1
- package/dist/decorators/CarouselWrapper.d.ts.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +66 -62
- package/dist/index.es.js.map +1 -1
- package/dist/index.es10.js +1 -1
- package/dist/index.es11.js +1 -1
- package/dist/index.es14.js +1 -1
- package/dist/index.es15.js +1 -1
- package/dist/index.es17.js +1 -1
- package/dist/index.es18.js +2 -2
- package/dist/index.es2.js +1 -1
- package/dist/index.es20.js +1 -1
- package/dist/index.es21.js +1 -1
- package/dist/index.es22.js +1 -1
- package/dist/index.es23.js +2 -2
- package/dist/index.es24.js +3 -3
- package/dist/index.es25.js +3 -3
- package/dist/index.es26.js +3 -3
- package/dist/index.es27.js +1 -1
- package/dist/index.es28.js +1 -1
- package/dist/index.es29.js +3 -3
- package/dist/index.es3.js +2 -2
- package/dist/index.es30.js +10 -9
- package/dist/index.es30.js.map +1 -1
- package/dist/index.es31.js +3 -3
- package/dist/index.es32.js +3 -3
- package/dist/index.es33.js +3 -3
- package/dist/index.es34.js +3 -3
- package/dist/index.es35.js +1 -1
- package/dist/index.es36.js +1 -1
- package/dist/index.es37.js +1 -1
- package/dist/index.es38.js +2 -2
- package/dist/index.es39.js +2 -2
- package/dist/index.es4.js +1 -1
- package/dist/index.es40.js +4 -4
- package/dist/index.es41.js +2 -2
- package/dist/index.es42.js +3 -3
- package/dist/index.es44.js +47 -18
- package/dist/index.es44.js.map +1 -1
- package/dist/index.es45.js +59 -17
- package/dist/index.es45.js.map +1 -1
- package/dist/index.es46.js +20 -91
- package/dist/index.es46.js.map +1 -1
- package/dist/index.es47.js +17 -88
- package/dist/index.es47.js.map +1 -1
- package/dist/index.es48.js +90 -32
- package/dist/index.es48.js.map +1 -1
- package/dist/index.es49.js +81 -68
- package/dist/index.es49.js.map +1 -1
- package/dist/index.es5.js +1 -1
- package/dist/index.es50.js +28 -38
- package/dist/index.es50.js.map +1 -1
- package/dist/index.es51.js +75 -9
- package/dist/index.es51.js.map +1 -1
- package/dist/index.es52.js +43 -6
- package/dist/index.es52.js.map +1 -1
- package/dist/index.es53.js +11 -22
- package/dist/index.es53.js.map +1 -1
- package/dist/index.es54.js +6 -20
- package/dist/index.es54.js.map +1 -1
- package/dist/index.es55.js +21 -19
- package/dist/index.es55.js.map +1 -1
- package/dist/index.es56.js +20 -47
- package/dist/index.es56.js.map +1 -1
- package/dist/index.es57.js +19 -26
- package/dist/index.es57.js.map +1 -1
- package/dist/index.es58.js +4 -16
- package/dist/index.es58.js.map +1 -1
- package/dist/index.es59.js +80 -72
- package/dist/index.es59.js.map +1 -1
- package/dist/index.es6.js +1 -1
- package/dist/index.es60.js +86 -4
- package/dist/index.es60.js.map +1 -1
- package/dist/index.es61.js +30 -0
- package/dist/index.es61.js.map +1 -0
- package/dist/index.es62.js +19 -0
- package/dist/index.es62.js.map +1 -0
- package/dist/index.es7.js +1 -1
- package/dist/index.es8.js +1 -1
- package/dist/styles.css +128 -0
- package/package.json +3 -2
package/dist/index.es59.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import e from "react";
|
|
2
|
-
import
|
|
3
|
-
import { ChevronLeft as
|
|
4
|
-
import { cn as
|
|
5
|
-
import { Slot as
|
|
6
|
-
import { cva as
|
|
7
|
-
const
|
|
2
|
+
import B from "embla-carousel-react";
|
|
3
|
+
import { ChevronLeft as K, ChevronRight as L } from "lucide-react";
|
|
4
|
+
import { cn as s } from "./index.es54.js";
|
|
5
|
+
import { Slot as V } from "@radix-ui/react-slot";
|
|
6
|
+
import { cva as X } from "class-variance-authority";
|
|
7
|
+
const $ = X(
|
|
8
8
|
"inline-flex items-center justify-center whitespace-nowrap rounded-full typo_variant_button ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed border-none",
|
|
9
9
|
{
|
|
10
10
|
variants: {
|
|
@@ -27,60 +27,62 @@ const V = L(
|
|
|
27
27
|
// size: "default",
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
),
|
|
31
|
-
({ className: r, variant: o, size: l, asChild: a = !1, ...
|
|
32
|
-
const
|
|
30
|
+
), p = e.forwardRef(
|
|
31
|
+
({ className: r, variant: o, size: l, asChild: a = !1, ...c }, u) => {
|
|
32
|
+
const i = a ? V : "button";
|
|
33
33
|
return /* @__PURE__ */ e.createElement(
|
|
34
|
-
|
|
34
|
+
i,
|
|
35
35
|
{
|
|
36
|
-
className:
|
|
36
|
+
className: s($({ variant: o, size: l }), r),
|
|
37
37
|
ref: u,
|
|
38
|
-
...
|
|
38
|
+
...c
|
|
39
39
|
}
|
|
40
40
|
);
|
|
41
41
|
}
|
|
42
42
|
);
|
|
43
|
-
|
|
44
|
-
const
|
|
43
|
+
p.displayName = "Button";
|
|
44
|
+
const w = e.createContext(null);
|
|
45
45
|
function h() {
|
|
46
|
-
const r = e.useContext(
|
|
46
|
+
const r = e.useContext(w);
|
|
47
47
|
if (!r)
|
|
48
48
|
throw new Error("useCarousel must be used within a <Carousel />");
|
|
49
49
|
return r;
|
|
50
50
|
}
|
|
51
|
-
const
|
|
51
|
+
const q = e.forwardRef(
|
|
52
52
|
({
|
|
53
53
|
orientation: r = "horizontal",
|
|
54
54
|
opts: o,
|
|
55
55
|
setApi: l,
|
|
56
56
|
plugins: a,
|
|
57
|
-
className:
|
|
57
|
+
className: c,
|
|
58
58
|
children: u,
|
|
59
|
-
hideControlsOnDesktop:
|
|
59
|
+
hideControlsOnDesktop: i = !1,
|
|
60
60
|
variant: d = "default",
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
controlsAlign: g = "center",
|
|
62
|
+
progressClass: N,
|
|
63
|
+
...E
|
|
64
|
+
}, S) => {
|
|
65
|
+
const [P, t] = B(
|
|
64
66
|
{
|
|
65
67
|
...o,
|
|
66
68
|
axis: r === "horizontal" ? "x" : "y"
|
|
67
69
|
},
|
|
68
70
|
a
|
|
69
|
-
), [
|
|
71
|
+
), [k, R] = e.useState(!1), [z, _] = e.useState(!1), [I, D] = e.useState(0), m = e.useCallback(() => {
|
|
70
72
|
if (!t)
|
|
71
73
|
return;
|
|
72
74
|
const n = t.scrollProgress();
|
|
73
|
-
console.log("progress", n),
|
|
75
|
+
console.log("progress", n), D(n * 100);
|
|
74
76
|
}, [t]), f = e.useCallback(
|
|
75
77
|
(n) => {
|
|
76
|
-
n && (
|
|
78
|
+
n && (R(n.canScrollPrev()), _(n.canScrollNext()), m());
|
|
77
79
|
},
|
|
78
80
|
[m]
|
|
79
81
|
), v = e.useCallback(() => {
|
|
80
82
|
t?.scrollPrev();
|
|
81
83
|
}, [t]), b = e.useCallback(() => {
|
|
82
84
|
t?.scrollNext();
|
|
83
|
-
}, [t]),
|
|
85
|
+
}, [t]), j = e.useCallback(
|
|
84
86
|
(n) => {
|
|
85
87
|
n.key === "ArrowLeft" ? (n.preventDefault(), v()) : n.key === "ArrowRight" && (n.preventDefault(), b());
|
|
86
88
|
},
|
|
@@ -94,53 +96,55 @@ const $ = e.forwardRef(
|
|
|
94
96
|
t?.off("reInit", f), t?.off("select", f), t?.off("scroll", m);
|
|
95
97
|
};
|
|
96
98
|
}, [t, f, m]);
|
|
97
|
-
const
|
|
99
|
+
const x = s(
|
|
98
100
|
"relative left-auto top-auto right-auto translate-y-0 border border-solid rounded-lg bg-transparent hover:rounded-[24px] transition-all duration-200 h-10 w-10",
|
|
99
101
|
d === "white" ? "hover:bg-whitish border-whitish-opacity-32" : "hover:bg-navy hover:text-white border-navy-opacity-32"
|
|
100
102
|
);
|
|
101
103
|
return /* @__PURE__ */ e.createElement(
|
|
102
|
-
|
|
104
|
+
w.Provider,
|
|
103
105
|
{
|
|
104
106
|
value: {
|
|
105
|
-
carouselRef:
|
|
107
|
+
carouselRef: P,
|
|
106
108
|
api: t,
|
|
107
109
|
opts: o,
|
|
108
110
|
orientation: r || (o?.axis === "y" ? "vertical" : "horizontal"),
|
|
109
111
|
scrollPrev: v,
|
|
110
112
|
scrollNext: b,
|
|
111
|
-
canScrollPrev:
|
|
112
|
-
canScrollNext:
|
|
113
|
+
canScrollPrev: k,
|
|
114
|
+
canScrollNext: z
|
|
113
115
|
}
|
|
114
116
|
},
|
|
115
117
|
/* @__PURE__ */ e.createElement(
|
|
116
118
|
"div",
|
|
117
119
|
{
|
|
118
|
-
ref:
|
|
119
|
-
onKeyDownCapture:
|
|
120
|
-
className:
|
|
120
|
+
ref: S,
|
|
121
|
+
onKeyDownCapture: j,
|
|
122
|
+
className: s("relative", c),
|
|
121
123
|
role: "region",
|
|
122
124
|
"aria-roledescription": "carousel",
|
|
123
|
-
...
|
|
125
|
+
...E
|
|
124
126
|
},
|
|
125
127
|
u,
|
|
126
128
|
/* @__PURE__ */ e.createElement(
|
|
127
129
|
"div",
|
|
128
130
|
{
|
|
129
|
-
className:
|
|
130
|
-
"relative w-full mt-8 rounded-full overflow-hidden
|
|
131
|
-
|
|
132
|
-
d === "white" ? "bg-whitish-opacity-16 h-0.5" : "bg-gray-300 h-0.5"
|
|
131
|
+
className: s(
|
|
132
|
+
"relative w-full mt-8 rounded-full overflow-hidden",
|
|
133
|
+
i ? "lg:hidden" : "",
|
|
134
|
+
d === "white" ? "bg-whitish-opacity-16 h-0.5" : "bg-gray-300 h-0.5",
|
|
135
|
+
g === "center" ? "mx-auto md:max-w-2xl" : "md:max-w-xl",
|
|
136
|
+
N
|
|
133
137
|
)
|
|
134
138
|
},
|
|
135
139
|
/* @__PURE__ */ e.createElement(
|
|
136
140
|
"div",
|
|
137
141
|
{
|
|
138
|
-
className:
|
|
142
|
+
className: s(
|
|
139
143
|
"absolute top-0 left-0 h-full w-full rounded-full transition-transform duration-0",
|
|
140
144
|
d === "white" ? "bg-whitish" : "bg-navy"
|
|
141
145
|
),
|
|
142
146
|
style: {
|
|
143
|
-
transform: `translateX(${
|
|
147
|
+
transform: `translateX(${I - 100}%)`
|
|
144
148
|
}
|
|
145
149
|
}
|
|
146
150
|
)
|
|
@@ -148,32 +152,36 @@ const $ = e.forwardRef(
|
|
|
148
152
|
/* @__PURE__ */ e.createElement(
|
|
149
153
|
"div",
|
|
150
154
|
{
|
|
151
|
-
className:
|
|
155
|
+
className: s(
|
|
156
|
+
"embla__controls max-w-sm mt-6 flex gap-4",
|
|
157
|
+
i ? "lg:hidden" : "",
|
|
158
|
+
g === "center" ? "mx-auto flex justify-center" : ""
|
|
159
|
+
)
|
|
152
160
|
},
|
|
153
|
-
/* @__PURE__ */ e.createElement("div", { className: "embla__buttons space-x-2" }, /* @__PURE__ */ e.createElement(
|
|
161
|
+
/* @__PURE__ */ e.createElement("div", { className: "embla__buttons space-x-2" }, /* @__PURE__ */ e.createElement(y, { className: x }), /* @__PURE__ */ e.createElement(C, { className: x }))
|
|
154
162
|
)
|
|
155
163
|
)
|
|
156
164
|
);
|
|
157
165
|
}
|
|
158
166
|
);
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
const { carouselRef: a, orientation:
|
|
167
|
+
q.displayName = "Carousel";
|
|
168
|
+
const F = e.forwardRef(({ className: r, ...o }, l) => {
|
|
169
|
+
const { carouselRef: a, orientation: c } = h();
|
|
162
170
|
return /* @__PURE__ */ e.createElement("div", { ref: a, className: "overflow-hidden" }, /* @__PURE__ */ e.createElement(
|
|
163
171
|
"div",
|
|
164
172
|
{
|
|
165
173
|
ref: l,
|
|
166
|
-
className:
|
|
174
|
+
className: s(
|
|
167
175
|
"flex",
|
|
168
|
-
|
|
176
|
+
c === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
|
|
169
177
|
r
|
|
170
178
|
),
|
|
171
179
|
...o
|
|
172
180
|
}
|
|
173
181
|
));
|
|
174
182
|
});
|
|
175
|
-
|
|
176
|
-
const
|
|
183
|
+
F.displayName = "CarouselContent";
|
|
184
|
+
const G = e.forwardRef(({ className: r, ...o }, l) => {
|
|
177
185
|
const { orientation: a } = h();
|
|
178
186
|
return /* @__PURE__ */ e.createElement(
|
|
179
187
|
"div",
|
|
@@ -181,7 +189,7 @@ const q = e.forwardRef(({ className: r, ...o }, l) => {
|
|
|
181
189
|
ref: l,
|
|
182
190
|
role: "group",
|
|
183
191
|
"aria-roledescription": "slide",
|
|
184
|
-
className:
|
|
192
|
+
className: s(
|
|
185
193
|
"min-w-0 shrink-0 grow-0 basis-full",
|
|
186
194
|
a === "horizontal" ? "pl-4" : "pt-4",
|
|
187
195
|
r
|
|
@@ -190,56 +198,56 @@ const q = e.forwardRef(({ className: r, ...o }, l) => {
|
|
|
190
198
|
}
|
|
191
199
|
);
|
|
192
200
|
});
|
|
193
|
-
|
|
194
|
-
const
|
|
195
|
-
const { orientation: u, scrollPrev:
|
|
201
|
+
G.displayName = "CarouselItem";
|
|
202
|
+
const y = e.forwardRef(({ className: r, variant: o = "outline", size: l = "icon", ...a }, c) => {
|
|
203
|
+
const { orientation: u, scrollPrev: i, canScrollPrev: d } = h();
|
|
196
204
|
return /* @__PURE__ */ e.createElement(
|
|
197
|
-
|
|
205
|
+
p,
|
|
198
206
|
{
|
|
199
|
-
ref:
|
|
207
|
+
ref: c,
|
|
200
208
|
variant: o,
|
|
201
209
|
size: l,
|
|
202
|
-
className:
|
|
210
|
+
className: s(
|
|
203
211
|
"absolute h-8 w-8 rounded-full",
|
|
204
212
|
u === "horizontal" ? "-left-12 top-1/2 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
205
213
|
r
|
|
206
214
|
),
|
|
207
215
|
disabled: !d,
|
|
208
|
-
onClick:
|
|
216
|
+
onClick: i,
|
|
209
217
|
...a
|
|
210
218
|
},
|
|
211
|
-
/* @__PURE__ */ e.createElement(
|
|
219
|
+
/* @__PURE__ */ e.createElement(K, { className: "h-5 w-5" }),
|
|
212
220
|
/* @__PURE__ */ e.createElement("span", { className: "sr-only" }, "Previous slide")
|
|
213
221
|
);
|
|
214
222
|
});
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
const { orientation: u, scrollNext:
|
|
223
|
+
y.displayName = "CarouselPrevious";
|
|
224
|
+
const C = e.forwardRef(({ className: r, variant: o = "outline", size: l = "icon", ...a }, c) => {
|
|
225
|
+
const { orientation: u, scrollNext: i, canScrollNext: d } = h();
|
|
218
226
|
return /* @__PURE__ */ e.createElement(
|
|
219
|
-
|
|
227
|
+
p,
|
|
220
228
|
{
|
|
221
|
-
ref:
|
|
229
|
+
ref: c,
|
|
222
230
|
variant: o,
|
|
223
231
|
size: l,
|
|
224
|
-
className:
|
|
232
|
+
className: s(
|
|
225
233
|
"absolute h-8 w-8 rounded-full",
|
|
226
234
|
u === "horizontal" ? "-right-12 top-1/2 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
|
|
227
235
|
r
|
|
228
236
|
),
|
|
229
237
|
disabled: !d,
|
|
230
|
-
onClick:
|
|
238
|
+
onClick: i,
|
|
231
239
|
...a
|
|
232
240
|
},
|
|
233
|
-
/* @__PURE__ */ e.createElement(
|
|
241
|
+
/* @__PURE__ */ e.createElement(L, { className: "h-5 w-5" }),
|
|
234
242
|
/* @__PURE__ */ e.createElement("span", { className: "sr-only" }, "Next slide")
|
|
235
243
|
);
|
|
236
244
|
});
|
|
237
|
-
|
|
245
|
+
C.displayName = "CarouselNext";
|
|
238
246
|
export {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
247
|
+
q as Carousel,
|
|
248
|
+
F as CarouselContent,
|
|
249
|
+
G as CarouselItem,
|
|
250
|
+
C as CarouselNext,
|
|
251
|
+
y as CarouselPrevious
|
|
244
252
|
};
|
|
245
253
|
//# sourceMappingURL=index.es59.js.map
|
package/dist/index.es59.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es59.js","sources":["../src/components/ui/carousel.tsx"],"sourcesContent":["import React from 'react'\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react'\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\r\n\r\nimport { cn } from '@/lib/utils/cn'\r\n// import { Button } from './button'\r\n\r\n// Button here to reuse\r\nimport { Slot } from '@radix-ui/react-slot'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-full typo_variant_button ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed border-none',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-white text-navy hover:bg-navy-opacity-4',\r\n destructive:\r\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\r\n outline:\r\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 rounded-md px-3',\r\n lg: 'h-11 rounded-md px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n // variant: \"default\",\r\n // size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size }), className)}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = 'Button'\r\n\r\n// end of Button\r\n\r\ntype CarouselApi = UseEmblaCarouselType[1]\r\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\r\ntype CarouselOptions = UseCarouselParameters[0]\r\ntype CarouselPlugin = UseCarouselParameters[1]\r\n\r\ntype CarouselProps = {\r\n opts?: CarouselOptions\r\n plugins?: CarouselPlugin\r\n orientation?: 'horizontal' | 'vertical'\r\n setApi?: (api: CarouselApi) => void\r\n}\r\n\r\ntype CarouselContextProps = {\r\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\r\n api: ReturnType<typeof useEmblaCarousel>[1]\r\n scrollPrev: () => void\r\n scrollNext: () => void\r\n canScrollPrev: boolean\r\n canScrollNext: boolean\r\n} & CarouselProps\r\n\r\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\r\n\r\nfunction useCarousel() {\r\n const context = React.useContext(CarouselContext)\r\n\r\n if (!context) {\r\n throw new Error('useCarousel must be used within a <Carousel />')\r\n }\r\n\r\n return context\r\n}\r\n\r\ninterface CustomProps {\r\n hideControlsOnDesktop?: boolean\r\n variant?: \"default\" | \"white\";\r\n}\r\n\r\nconst Carousel = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement> & CarouselProps & CustomProps\r\n>(\r\n (\r\n {\r\n orientation = 'horizontal',\r\n opts,\r\n setApi,\r\n plugins,\r\n className,\r\n children,\r\n hideControlsOnDesktop = false,\r\n variant = \"default\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [carouselRef, api] = useEmblaCarousel(\r\n {\r\n ...opts,\r\n axis: orientation === 'horizontal' ? 'x' : 'y',\r\n },\r\n plugins\r\n )\r\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\r\n const [canScrollNext, setCanScrollNext] = React.useState(false)\r\n const [scrollProgress, setScrollProgress] = React.useState(0)\r\n\r\n const onScroll = React.useCallback(() => {\r\n if (!api) return\r\n const progress = api.scrollProgress()\r\n console.log('progress', progress)\r\n setScrollProgress(progress * 100) // Convert to percentage\r\n }, [api])\r\n\r\n const onSelect = React.useCallback(\r\n (api: CarouselApi) => {\r\n if (!api) return\r\n setCanScrollPrev(api.canScrollPrev())\r\n setCanScrollNext(api.canScrollNext())\r\n onScroll() // Update scroll progress when selection changes\r\n },\r\n [onScroll]\r\n )\r\n\r\n const scrollPrev = React.useCallback(() => {\r\n api?.scrollPrev()\r\n }, [api])\r\n\r\n const scrollNext = React.useCallback(() => {\r\n api?.scrollNext()\r\n }, [api])\r\n\r\n const handleKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === 'ArrowLeft') {\r\n event.preventDefault()\r\n scrollPrev()\r\n } else if (event.key === 'ArrowRight') {\r\n event.preventDefault()\r\n scrollNext()\r\n }\r\n },\r\n [scrollPrev, scrollNext]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!api || !setApi) return\r\n setApi(api)\r\n }, [api, setApi])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n onSelect(api)\r\n api.on('reInit', onSelect)\r\n api.on('select', onSelect)\r\n api.on('scroll', onScroll) // Update on scroll events\r\n\r\n return () => {\r\n api?.off('reInit', onSelect)\r\n api?.off('select', onSelect)\r\n api?.off('scroll', onScroll)\r\n }\r\n }, [api, onSelect, onScroll])\r\n\r\n // const { selectedIndex, scrollSnaps, onDotButtonClick } = useDotButton(api)\r\n\r\n const buttonClasses = cn(\r\n \"relative left-auto top-auto right-auto translate-y-0 border border-solid rounded-lg bg-transparent hover:rounded-[24px] transition-all duration-200 h-10 w-10\",\r\n variant === \"white\"\r\n ? \"hover:bg-whitish border-whitish-opacity-32\"\r\n : \"hover:bg-navy hover:text-white border-navy-opacity-32\"\r\n );\r\n\r\n return (\r\n <CarouselContext.Provider\r\n value={{\r\n carouselRef,\r\n api: api,\r\n opts,\r\n orientation:\r\n orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\r\n scrollPrev,\r\n scrollNext,\r\n canScrollPrev,\r\n canScrollNext,\r\n }}\r\n >\r\n <div\r\n ref={ref}\r\n onKeyDownCapture={handleKeyDown}\r\n className={cn('relative', className)}\r\n role=\"region\"\r\n aria-roledescription=\"carousel\"\r\n {...props}\r\n >\r\n {children}\r\n\r\n {/* Scroll Progress Indicator */}\r\n <div\r\n className={cn(\r\n \"relative w-full mt-8 rounded-full overflow-hidden md:max-w-2xl mx-auto\",\r\n hideControlsOnDesktop ? \"lg:hidden\" : \"\",\r\n variant === \"white\"\r\n ? \"bg-whitish-opacity-16 h-0.5\"\r\n : \"bg-gray-300 h-0.5\"\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"absolute top-0 left-0 h-full w-full rounded-full transition-transform duration-0\",\r\n variant === \"white\" ? \"bg-whitish\" : \"bg-navy\"\r\n )}\r\n style={{\r\n transform: `translateX(${scrollProgress - 100}%)`,\r\n }}\r\n ></div>\r\n </div>\r\n\r\n <div\r\n className={`embla__controls max-w-sm mx-auto mt-6 flex justify-center gap-4 ${\r\n hideControlsOnDesktop ? 'lg:hidden' : ''\r\n }`}\r\n >\r\n <div className=\"embla__buttons space-x-2\">\r\n <CarouselPrevious className={buttonClasses} />\r\n <CarouselNext className={buttonClasses} />\r\n </div>\r\n\r\n {/* <div className=\"embla__progress\">\r\n <div\r\n className=\"embla__progress__bar\"\r\n style={{ transform: `translate3d(${scrollProgress}%,0px,0px)` }}\r\n />\r\n </div> */}\r\n </div>\r\n\r\n {/* Dots: not used */}\r\n {/* <div className=\"embla__controls\">\r\n <div className=\"embla__buttons\">\r\n <CarouselPrevious className=\"relative left-auto top-auto right-auto translate-y-0\" />\r\n <CarouselNext className=\"relative left-auto top-auto right-auto translate-y-0\" />\r\n </div>\r\n\r\n <div className=\"embla__dots\">\r\n {scrollSnaps.map((_, index) => (\r\n <DotButton\r\n key={index}\r\n onClick={() => onDotButtonClick(index)}\r\n className={\"embla__dot\".concat(\r\n index === selectedIndex ? \" embla__dot--selected\" : \"\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n </div> */}\r\n </div>\r\n </CarouselContext.Provider>\r\n )\r\n }\r\n)\r\nCarousel.displayName = 'Carousel'\r\n\r\nconst CarouselContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => {\r\n const { carouselRef, orientation } = useCarousel()\r\n\r\n return (\r\n <div ref={carouselRef} className=\"overflow-hidden\">\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'flex',\r\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n})\r\nCarouselContent.displayName = 'CarouselContent'\r\n\r\nconst CarouselItem = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => {\r\n const { orientation } = useCarousel()\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"group\"\r\n aria-roledescription=\"slide\"\r\n className={cn(\r\n 'min-w-0 shrink-0 grow-0 basis-full',\r\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nCarouselItem.displayName = 'CarouselItem'\r\n\r\nconst CarouselPrevious = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<typeof Button>\r\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\r\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n 'absolute h-8 w-8 rounded-full',\r\n orientation === 'horizontal'\r\n ? '-left-12 top-1/2 -translate-y-1/2'\r\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\r\n className\r\n )}\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n {...props}\r\n >\r\n <ChevronLeft className=\"h-5 w-5\" />\r\n <span className=\"sr-only\">Previous slide</span>\r\n </Button>\r\n )\r\n})\r\nCarouselPrevious.displayName = 'CarouselPrevious'\r\n\r\nconst CarouselNext = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<typeof Button>\r\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\r\n const { orientation, scrollNext, canScrollNext } = useCarousel()\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n 'absolute h-8 w-8 rounded-full',\r\n orientation === 'horizontal'\r\n ? '-right-12 top-1/2 -translate-y-1/2'\r\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\r\n className\r\n )}\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n {...props}\r\n >\r\n <ChevronRight className=\"h-5 w-5\" />\r\n <span className=\"sr-only\">Next slide</span>\r\n </Button>\r\n )\r\n})\r\nCarouselNext.displayName = 'CarouselNext'\r\n\r\nexport {\r\n type CarouselApi,\r\n Carousel,\r\n CarouselContent,\r\n CarouselItem,\r\n CarouselPrevious,\r\n CarouselNext,\r\n}\r\n"],"names":["buttonVariants","cva","Button","React","className","variant","size","asChild","props","ref","Comp","Slot","cn","CarouselContext","useCarousel","context","Carousel","orientation","opts","setApi","plugins","children","hideControlsOnDesktop","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","scrollProgress","setScrollProgress","onScroll","progress","onSelect","scrollPrev","scrollNext","handleKeyDown","event","buttonClasses","CarouselPrevious","CarouselNext","CarouselContent","CarouselItem","ChevronLeft","ChevronRight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es59.js","sources":["../src/components/ui/carousel.tsx"],"sourcesContent":["import React from 'react'\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react'\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\r\n\r\nimport { cn } from '@/lib/utils/cn'\r\n// import { Button } from './button'\r\n\r\n// Button here to reuse\r\nimport { Slot } from '@radix-ui/react-slot'\r\nimport { cva, type VariantProps } from 'class-variance-authority'\r\n// import { DotButton, useDotButton } from '../CarouselDotButton'\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-full typo_variant_button ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed border-none',\r\n {\r\n variants: {\r\n variant: {\r\n default: 'bg-white text-navy hover:bg-navy-opacity-4',\r\n destructive:\r\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\r\n outline:\r\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\r\n ghost: 'hover:bg-accent hover:text-accent-foreground',\r\n link: 'text-primary underline-offset-4 hover:underline',\r\n },\r\n size: {\r\n default: 'h-10 px-4 py-2',\r\n sm: 'h-9 rounded-md px-3',\r\n lg: 'h-11 rounded-md px-8',\r\n icon: 'h-10 w-10',\r\n },\r\n },\r\n defaultVariants: {\r\n // variant: \"default\",\r\n // size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : 'button'\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size }), className)}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = 'Button'\r\n\r\n// end of Button\r\n\r\ntype CarouselApi = UseEmblaCarouselType[1]\r\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\r\ntype CarouselOptions = UseCarouselParameters[0]\r\ntype CarouselPlugin = UseCarouselParameters[1]\r\n\r\ntype CarouselProps = {\r\n opts?: CarouselOptions\r\n plugins?: CarouselPlugin\r\n orientation?: 'horizontal' | 'vertical'\r\n setApi?: (api: CarouselApi) => void\r\n}\r\n\r\ntype CarouselContextProps = {\r\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\r\n api: ReturnType<typeof useEmblaCarousel>[1]\r\n scrollPrev: () => void\r\n scrollNext: () => void\r\n canScrollPrev: boolean\r\n canScrollNext: boolean\r\n} & CarouselProps\r\n\r\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\r\n\r\nfunction useCarousel() {\r\n const context = React.useContext(CarouselContext)\r\n\r\n if (!context) {\r\n throw new Error('useCarousel must be used within a <Carousel />')\r\n }\r\n\r\n return context\r\n}\r\n\r\ninterface CustomProps {\r\n hideControlsOnDesktop?: boolean\r\n variant?: 'default' | 'white'\r\n controlsAlign?: 'left' | 'center'\r\n progressClass?: string\r\n}\r\n\r\nconst Carousel = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement> & CarouselProps & CustomProps\r\n>(\r\n (\r\n {\r\n orientation = 'horizontal',\r\n opts,\r\n setApi,\r\n plugins,\r\n className,\r\n children,\r\n hideControlsOnDesktop = false,\r\n variant = 'default',\r\n controlsAlign = 'center',\r\n progressClass,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [carouselRef, api] = useEmblaCarousel(\r\n {\r\n ...opts,\r\n axis: orientation === 'horizontal' ? 'x' : 'y',\r\n },\r\n plugins\r\n )\r\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\r\n const [canScrollNext, setCanScrollNext] = React.useState(false)\r\n const [scrollProgress, setScrollProgress] = React.useState(0)\r\n\r\n const onScroll = React.useCallback(() => {\r\n if (!api) return\r\n const progress = api.scrollProgress()\r\n console.log('progress', progress)\r\n setScrollProgress(progress * 100) // Convert to percentage\r\n }, [api])\r\n\r\n const onSelect = React.useCallback(\r\n (api: CarouselApi) => {\r\n if (!api) return\r\n setCanScrollPrev(api.canScrollPrev())\r\n setCanScrollNext(api.canScrollNext())\r\n onScroll() // Update scroll progress when selection changes\r\n },\r\n [onScroll]\r\n )\r\n\r\n const scrollPrev = React.useCallback(() => {\r\n api?.scrollPrev()\r\n }, [api])\r\n\r\n const scrollNext = React.useCallback(() => {\r\n api?.scrollNext()\r\n }, [api])\r\n\r\n const handleKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === 'ArrowLeft') {\r\n event.preventDefault()\r\n scrollPrev()\r\n } else if (event.key === 'ArrowRight') {\r\n event.preventDefault()\r\n scrollNext()\r\n }\r\n },\r\n [scrollPrev, scrollNext]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!api || !setApi) return\r\n setApi(api)\r\n }, [api, setApi])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n onSelect(api)\r\n api.on('reInit', onSelect)\r\n api.on('select', onSelect)\r\n api.on('scroll', onScroll) // Update on scroll events\r\n\r\n return () => {\r\n api?.off('reInit', onSelect)\r\n api?.off('select', onSelect)\r\n api?.off('scroll', onScroll)\r\n }\r\n }, [api, onSelect, onScroll])\r\n\r\n // const { selectedIndex, scrollSnaps, onDotButtonClick } = useDotButton(api)\r\n\r\n const buttonClasses = cn(\r\n 'relative left-auto top-auto right-auto translate-y-0 border border-solid rounded-lg bg-transparent hover:rounded-[24px] transition-all duration-200 h-10 w-10',\r\n variant === 'white'\r\n ? 'hover:bg-whitish border-whitish-opacity-32'\r\n : 'hover:bg-navy hover:text-white border-navy-opacity-32'\r\n )\r\n\r\n return (\r\n <CarouselContext.Provider\r\n value={{\r\n carouselRef,\r\n api: api,\r\n opts,\r\n orientation:\r\n orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\r\n scrollPrev,\r\n scrollNext,\r\n canScrollPrev,\r\n canScrollNext,\r\n }}\r\n >\r\n <div\r\n ref={ref}\r\n onKeyDownCapture={handleKeyDown}\r\n className={cn('relative', className)}\r\n role=\"region\"\r\n aria-roledescription=\"carousel\"\r\n {...props}\r\n >\r\n {children}\r\n\r\n {/* Scroll Progress Indicator */}\r\n <div\r\n className={cn(\r\n 'relative w-full mt-8 rounded-full overflow-hidden',\r\n hideControlsOnDesktop ? 'lg:hidden' : '',\r\n variant === 'white'\r\n ? 'bg-whitish-opacity-16 h-0.5'\r\n : 'bg-gray-300 h-0.5',\r\n controlsAlign === 'center'\r\n ? 'mx-auto md:max-w-2xl'\r\n : 'md:max-w-xl',\r\n progressClass\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n 'absolute top-0 left-0 h-full w-full rounded-full transition-transform duration-0',\r\n variant === 'white' ? 'bg-whitish' : 'bg-navy'\r\n )}\r\n style={{\r\n transform: `translateX(${scrollProgress - 100}%)`,\r\n }}\r\n ></div>\r\n </div>\r\n\r\n <div\r\n className={cn(\r\n 'embla__controls max-w-sm mt-6 flex gap-4',\r\n hideControlsOnDesktop ? 'lg:hidden' : '',\r\n controlsAlign === 'center' ? 'mx-auto flex justify-center' : ''\r\n )}\r\n >\r\n <div className=\"embla__buttons space-x-2\">\r\n <CarouselPrevious className={buttonClasses} />\r\n <CarouselNext className={buttonClasses} />\r\n </div>\r\n\r\n {/* <div className=\"embla__progress\">\r\n <div\r\n className=\"embla__progress__bar\"\r\n style={{ transform: `translate3d(${scrollProgress}%,0px,0px)` }}\r\n />\r\n </div> */}\r\n </div>\r\n\r\n {/* Dots: not used */}\r\n {/* <div className=\"embla__controls\">\r\n <div className=\"embla__buttons\">\r\n <CarouselPrevious className=\"relative left-auto top-auto right-auto translate-y-0\" />\r\n <CarouselNext className=\"relative left-auto top-auto right-auto translate-y-0\" />\r\n </div>\r\n\r\n <div className=\"embla__dots\">\r\n {scrollSnaps.map((_: unknown, index: number) => (\r\n <DotButton\r\n key={index}\r\n onClick={() => onDotButtonClick(index)}\r\n className={'embla__dot'.concat(\r\n index === selectedIndex ? ' embla__dot--selected' : ''\r\n )}\r\n />\r\n ))}\r\n </div>\r\n </div> */}\r\n </div>\r\n </CarouselContext.Provider>\r\n )\r\n }\r\n)\r\nCarousel.displayName = 'Carousel'\r\n\r\nconst CarouselContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => {\r\n const { carouselRef, orientation } = useCarousel()\r\n\r\n return (\r\n <div ref={carouselRef} className=\"overflow-hidden\">\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'flex',\r\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n})\r\nCarouselContent.displayName = 'CarouselContent'\r\n\r\nconst CarouselItem = React.forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement>\r\n>(({ className, ...props }, ref) => {\r\n const { orientation } = useCarousel()\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n role=\"group\"\r\n aria-roledescription=\"slide\"\r\n className={cn(\r\n 'min-w-0 shrink-0 grow-0 basis-full',\r\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n})\r\nCarouselItem.displayName = 'CarouselItem'\r\n\r\nconst CarouselPrevious = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<typeof Button>\r\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\r\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n 'absolute h-8 w-8 rounded-full',\r\n orientation === 'horizontal'\r\n ? '-left-12 top-1/2 -translate-y-1/2'\r\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\r\n className\r\n )}\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n {...props}\r\n >\r\n <ChevronLeft className=\"h-5 w-5\" />\r\n <span className=\"sr-only\">Previous slide</span>\r\n </Button>\r\n )\r\n})\r\nCarouselPrevious.displayName = 'CarouselPrevious'\r\n\r\nconst CarouselNext = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentProps<typeof Button>\r\n>(({ className, variant = 'outline', size = 'icon', ...props }, ref) => {\r\n const { orientation, scrollNext, canScrollNext } = useCarousel()\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n 'absolute h-8 w-8 rounded-full',\r\n orientation === 'horizontal'\r\n ? '-right-12 top-1/2 -translate-y-1/2'\r\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\r\n className\r\n )}\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n {...props}\r\n >\r\n <ChevronRight className=\"h-5 w-5\" />\r\n <span className=\"sr-only\">Next slide</span>\r\n </Button>\r\n )\r\n})\r\nCarouselNext.displayName = 'CarouselNext'\r\n\r\nexport {\r\n type CarouselApi,\r\n Carousel,\r\n CarouselContent,\r\n CarouselItem,\r\n CarouselPrevious,\r\n CarouselNext,\r\n}\r\n"],"names":["buttonVariants","cva","Button","React","className","variant","size","asChild","props","ref","Comp","Slot","cn","CarouselContext","useCarousel","context","Carousel","orientation","opts","setApi","plugins","children","hideControlsOnDesktop","controlsAlign","progressClass","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","scrollProgress","setScrollProgress","onScroll","progress","onSelect","scrollPrev","scrollNext","handleKeyDown","event","buttonClasses","CarouselPrevious","CarouselNext","CarouselContent","CarouselItem","ChevronLeft","ChevronRight"],"mappings":"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"}
|
package/dist/index.es6.js
CHANGED
|
@@ -2,7 +2,7 @@ import e from "react";
|
|
|
2
2
|
import { Button as m } from "./index.es2.js";
|
|
3
3
|
import { LessLink16X16 as d, MoreLink16X16 as f, ArrowLinkRight16X16 as h } from "@iit/precision-ui-icons";
|
|
4
4
|
import { cva as i } from "class-variance-authority";
|
|
5
|
-
import { cn as n } from "./index.
|
|
5
|
+
import { cn as n } from "./index.es54.js";
|
|
6
6
|
import { ArrowDownToLine as p } from "lucide-react";
|
|
7
7
|
import { getAdapter as g } from "./index.es9.js";
|
|
8
8
|
const w = i("bg-link-gradient-container hover:cursor-pointer", {
|
package/dist/index.es60.js
CHANGED
|
@@ -1,7 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
1
|
+
import * as e from "react";
|
|
2
|
+
import { Command as a } from "cmdk";
|
|
3
|
+
import { Search as d } from "lucide-react";
|
|
4
|
+
import { cn as m } from "./index.es54.js";
|
|
5
|
+
const n = e.forwardRef(({ className: t, ...r }, o) => /* @__PURE__ */ e.createElement(
|
|
6
|
+
a,
|
|
7
|
+
{
|
|
8
|
+
ref: o,
|
|
9
|
+
className: m(
|
|
10
|
+
"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
|
|
11
|
+
t
|
|
12
|
+
),
|
|
13
|
+
...r
|
|
14
|
+
}
|
|
15
|
+
));
|
|
16
|
+
n.displayName = a.displayName;
|
|
17
|
+
const s = e.forwardRef(({ className: t, ...r }, o) => /* @__PURE__ */ e.createElement("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "" }, /* @__PURE__ */ e.createElement(d, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }), /* @__PURE__ */ e.createElement(
|
|
18
|
+
a.Input,
|
|
19
|
+
{
|
|
20
|
+
ref: o,
|
|
21
|
+
className: m(
|
|
22
|
+
"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
23
|
+
t
|
|
24
|
+
),
|
|
25
|
+
...r
|
|
26
|
+
}
|
|
27
|
+
)));
|
|
28
|
+
s.displayName = a.Input.displayName;
|
|
29
|
+
const l = e.forwardRef(({ className: t, ...r }, o) => /* @__PURE__ */ e.createElement(
|
|
30
|
+
a.List,
|
|
31
|
+
{
|
|
32
|
+
ref: o,
|
|
33
|
+
className: m("", t),
|
|
34
|
+
...r
|
|
35
|
+
}
|
|
36
|
+
));
|
|
37
|
+
l.displayName = a.List.displayName;
|
|
38
|
+
const p = e.forwardRef((t, r) => /* @__PURE__ */ e.createElement(
|
|
39
|
+
a.Empty,
|
|
40
|
+
{
|
|
41
|
+
ref: r,
|
|
42
|
+
className: "py-6 text-center text-sm",
|
|
43
|
+
...t
|
|
44
|
+
}
|
|
45
|
+
));
|
|
46
|
+
p.displayName = a.Empty.displayName;
|
|
47
|
+
const c = e.forwardRef(({ className: t, ...r }, o) => /* @__PURE__ */ e.createElement(
|
|
48
|
+
a.Group,
|
|
49
|
+
{
|
|
50
|
+
ref: o,
|
|
51
|
+
className: m(
|
|
52
|
+
"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
|
|
53
|
+
t
|
|
54
|
+
),
|
|
55
|
+
...r
|
|
56
|
+
}
|
|
57
|
+
));
|
|
58
|
+
c.displayName = a.Group.displayName;
|
|
59
|
+
const i = e.forwardRef(({ className: t, ...r }, o) => /* @__PURE__ */ e.createElement(
|
|
60
|
+
a.Separator,
|
|
61
|
+
{
|
|
62
|
+
ref: o,
|
|
63
|
+
className: m("-mx-1 h-px bg-border", t),
|
|
64
|
+
...r
|
|
65
|
+
}
|
|
66
|
+
));
|
|
67
|
+
i.displayName = a.Separator.displayName;
|
|
68
|
+
const f = e.forwardRef(({ className: t, ...r }, o) => /* @__PURE__ */ e.createElement(
|
|
69
|
+
a.Item,
|
|
70
|
+
{
|
|
71
|
+
ref: o,
|
|
72
|
+
className: m(
|
|
73
|
+
"relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
74
|
+
t
|
|
75
|
+
),
|
|
76
|
+
...r
|
|
77
|
+
}
|
|
78
|
+
));
|
|
79
|
+
f.displayName = a.Item.displayName;
|
|
4
80
|
export {
|
|
5
|
-
|
|
81
|
+
n as Command,
|
|
82
|
+
p as CommandEmpty,
|
|
83
|
+
c as CommandGroup,
|
|
84
|
+
s as CommandInput,
|
|
85
|
+
f as CommandItem,
|
|
86
|
+
l as CommandList,
|
|
87
|
+
i as CommandSeparator
|
|
6
88
|
};
|
|
7
89
|
//# sourceMappingURL=index.es60.js.map
|
package/dist/index.es60.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es60.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.es60.js","sources":["../src/components/ui/command.tsx"],"sourcesContent":["import * as React from 'react'\nimport { type DialogProps } from '@radix-ui/react-dialog'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport { Search } from 'lucide-react'\n\nimport { cn } from '@/lib/utils/cn'\nimport { Dialog, DialogContent } from '@/components/ui/dialog'\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\n className\n )}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n // className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}\n className={cn('', className)}\n {...props}\n />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',\n className\n )}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground',\n className\n )}\n {...props}\n />\n )\n}\nCommandShortcut.displayName = 'CommandShortcut'\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"],"names":["Command","React","className","props","ref","CommandPrimitive","cn","CommandInput","Search","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem"],"mappings":";;;;AAQM,MAAAA,IAAUC,EAAM,WAGpB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1B,gBAAAH,EAAA;AAAA,EAACI;AAAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAQ,cAAcK,EAAiB;AAcjC,MAAAE,IAAeN,EAAM,WAGzB,CAAC,EAAE,WAAAC,GAAW,GAAGC,KAASC,sCACzB,OAAI,EAAA,WAAU,mCAAkC,sBAAmB,GAAA,mCACjEI,GAAO,EAAA,WAAU,oCAAmC,GACrD,gBAAAP,EAAA;AAAA,EAACI,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN,CACF,CACD;AAEDI,EAAa,cAAcF,EAAiB,MAAM;AAE5C,MAAAI,IAAcR,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1B,gBAAAH,EAAA;AAAA,EAACI,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAD;AAAA,IAEA,WAAWE,EAAG,IAAIJ,CAAS;AAAA,IAC1B,GAAGC;AAAA,EAAA;AACN,CACD;AAEDM,EAAY,cAAcJ,EAAiB,KAAK;AAEhD,MAAMK,IAAeT,EAAM,WAGzB,CAACE,GAAOC,MACR,gBAAAH,EAAA;AAAA,EAACI,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAD;AAAA,IACA,WAAU;AAAA,IACT,GAAGD;AAAA,EAAA;AACN,CACD;AAEDO,EAAa,cAAcL,EAAiB,MAAM;AAE5C,MAAAM,IAAeV,EAAM,WAGzB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1B,gBAAAH,EAAA;AAAA,EAACI,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN,CACD;AAEDQ,EAAa,cAAcN,EAAiB,MAAM;AAE5C,MAAAO,IAAmBX,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1B,gBAAAH,EAAA;AAAA,EAACI,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE,EAAG,wBAAwBJ,CAAS;AAAA,IAC9C,GAAGC;AAAA,EAAA;AACN,CACD;AACDS,EAAiB,cAAcP,EAAiB,UAAU;AAEpD,MAAAQ,IAAcZ,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAM,GAAGC,MAC1B,gBAAAH,EAAA;AAAA,EAACI,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IACF;AAAA,IACC,GAAGC;AAAA,EAAA;AACN,CACD;AAEDU,EAAY,cAAcR,EAAiB,KAAK;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { cva as t } from "class-variance-authority";
|
|
2
|
+
const i = t("", {
|
|
3
|
+
variants: {
|
|
4
|
+
variant: {
|
|
5
|
+
factoid: "typo_variant_factoid",
|
|
6
|
+
h1: "typo_variant_h1",
|
|
7
|
+
h2: "typo_variant_h2",
|
|
8
|
+
h3: "typo_variant_h3",
|
|
9
|
+
h4: "typo_variant_h4",
|
|
10
|
+
h5: "typo_variant_h5",
|
|
11
|
+
h6: "typo_variant_h6",
|
|
12
|
+
"subtitle-1": "typo_variant_subtitle-1",
|
|
13
|
+
"subtitle-2": "typo_variant_subtitle-2",
|
|
14
|
+
overline: "typo_variant_overline",
|
|
15
|
+
"lead-text": "typo_variant_lead-text",
|
|
16
|
+
body: "typo_variant_body",
|
|
17
|
+
"small-body": "typo_variant_small-body",
|
|
18
|
+
caption: "typo_variant_caption",
|
|
19
|
+
button: "typo_variant_button",
|
|
20
|
+
link: "typo_variant_link"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
variant: "body"
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
export {
|
|
28
|
+
i as typeVariants
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=index.es61.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es61.js","sources":["../src/components/core/typography/typeVariants.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\r\n\r\nexport const typeVariants = cva(\"\", {\r\n variants: {\r\n variant: {\r\n factoid: \"typo_variant_factoid\",\r\n h1: \"typo_variant_h1\",\r\n h2: \"typo_variant_h2\",\r\n h3: \"typo_variant_h3\",\r\n h4: \"typo_variant_h4\",\r\n h5: \"typo_variant_h5\",\r\n h6: \"typo_variant_h6\",\r\n \"subtitle-1\": \"typo_variant_subtitle-1\",\r\n \"subtitle-2\": \"typo_variant_subtitle-2\",\r\n overline: \"typo_variant_overline\",\r\n \"lead-text\": \"typo_variant_lead-text\",\r\n body: \"typo_variant_body\",\r\n \"small-body\": \"typo_variant_small-body\",\r\n caption: \"typo_variant_caption\",\r\n button: \"typo_variant_button\",\r\n link: \"typo_variant_link\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"body\",\r\n },\r\n});\r\n"],"names":["typeVariants","cva"],"mappings":";AAEa,MAAAA,IAAeC,EAAI,IAAI;AAAA,EAClC,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AACF,CAAC;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import t from "react";
|
|
2
|
+
import a from "./index.es47.js";
|
|
3
|
+
import { getAdapter as o } from "./index.es9.js";
|
|
4
|
+
import i from "./index.es58.js";
|
|
5
|
+
const l = ({ title: e, href: r }) => {
|
|
6
|
+
const m = o("LinkWrapper");
|
|
7
|
+
return r ? /* @__PURE__ */ t.createElement(a, { variant: "small-body", className: "text-whitish-opacity-32" }, /* @__PURE__ */ t.createElement(
|
|
8
|
+
m,
|
|
9
|
+
{
|
|
10
|
+
href: r,
|
|
11
|
+
className: "breadcrumb hover:text-whitish-opacity-60 duration-200"
|
|
12
|
+
},
|
|
13
|
+
i(e, 55)
|
|
14
|
+
)) : /* @__PURE__ */ t.createElement(a, { variant: "link", className: "text-whitish breadcrumb" }, i(e, 55));
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
l as default
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index.es62.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es62.js","sources":["../src/components/breadcrumbs/Breadcrumb.tsx"],"sourcesContent":["import React from 'react'\r\nimport Text from '../core/typography/Text'\r\nimport { getAdapter } from '@/Adapters'\r\nimport truncateText from '@/lib/utils/truncateText'\r\n\r\nexport interface BreadcrumbProps {\r\n title: string\r\n href?: string\r\n}\r\n\r\nconst Breadcrumb: React.FC<BreadcrumbProps> = ({ title, href }) => {\r\n const LinkWrapper = getAdapter('LinkWrapper')\r\n\r\n if (!href)\r\n return (\r\n <Text variant=\"link\" className=\"text-whitish breadcrumb\">\r\n {truncateText(title, 55)}\r\n </Text>\r\n )\r\n\r\n return (\r\n <Text variant=\"small-body\" className=\"text-whitish-opacity-32\">\r\n <LinkWrapper\r\n href={href}\r\n className=\"breadcrumb hover:text-whitish-opacity-60 duration-200\"\r\n >\r\n {truncateText(title, 55)}\r\n </LinkWrapper>\r\n </Text>\r\n )\r\n}\r\n\r\nexport default Breadcrumb\r\n"],"names":["Breadcrumb","title","href","LinkWrapper","getAdapter","React","Text","truncateText"],"mappings":";;;;AAUA,MAAMA,IAAwC,CAAC,EAAE,OAAAC,GAAO,MAAAC,QAAW;AAC3D,QAAAC,IAAcC,EAAW,aAAa;AAE5C,SAAKF,IAQFG,gBAAAA,EAAA,cAAAC,GAAA,EAAK,SAAQ,cAAa,WAAU,6BACnCD,gBAAAA,EAAA;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,MAAAD;AAAA,MACA,WAAU;AAAA,IAAA;AAAA,IAETK,EAAaN,GAAO,EAAE;AAAA,EAAA,CAE3B,IAbEI,gBAAAA,EAAA,cAACC,KAAK,SAAQ,QAAO,WAAU,0BAC5B,GAAAC,EAAaN,GAAO,EAAE,CACzB;AAaN;"}
|
package/dist/index.es7.js
CHANGED
|
@@ -2,7 +2,7 @@ import t from "react";
|
|
|
2
2
|
import { Button as s } from "./index.es2.js";
|
|
3
3
|
import { ServicesModal16X16 as u, Login16X16 as c } from "@iit/precision-ui-icons";
|
|
4
4
|
import { cva as i } from "class-variance-authority";
|
|
5
|
-
import { cn as n } from "./index.
|
|
5
|
+
import { cn as n } from "./index.es54.js";
|
|
6
6
|
const m = i("bg-link-gradient-container group cursor-pointer", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
package/dist/index.es8.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import l from "react";
|
|
2
2
|
import { cva as s } from "class-variance-authority";
|
|
3
|
-
import { cn as c } from "./index.
|
|
3
|
+
import { cn as c } from "./index.es54.js";
|
|
4
4
|
import { getAdapter as v } from "./index.es9.js";
|
|
5
5
|
const f = s("duration-200 transition-colors", {
|
|
6
6
|
variants: {
|