@bearmenu/ui 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-4JOV7FXW.js → chunk-2DEIXTBN.js} +1 -1
- package/dist/{chunk-UUJVXN2O.js → chunk-66MAPLXS.js} +3 -1
- package/dist/{chunk-Y5D5LP4A.js → chunk-7BWTYWM3.js} +14 -3
- package/dist/{chunk-ZFNOCP6W.js → chunk-H3BV4VAG.js} +15 -1
- package/dist/chunk-LEAYBICI.js +84 -0
- package/dist/{chunk-TL4YU2O5.js → chunk-UKBNQO6Q.js} +2 -2
- package/dist/{chunk-UX6SWAKH.js → chunk-UZ3PCIE5.js} +119 -28
- package/dist/{chunk-YLNYXPIH.js → chunk-VBA45GLP.js} +1 -1
- package/dist/{chunk-A5ONAJCE.js → chunk-VG3PND3D.js} +1 -1
- package/dist/{chunk-ZBBUKXM5.js → chunk-X3WMRKOW.js} +1 -1
- package/dist/{chunk-HCM6LKM5.js → chunk-XNA2INVQ.js} +2 -2
- package/dist/{chunk-AV777R4G.js → chunk-YYGB4G4Q.js} +1 -1
- package/dist/components/accordion.js +1 -1
- package/dist/components/alert-dialog.js +1 -1
- package/dist/components/alert.d.ts +2 -2
- package/dist/components/alert.js +1 -1
- package/dist/components/avatar.d.ts +10 -1
- package/dist/components/avatar.js +41 -14
- package/dist/components/badge.d.ts +11 -2
- package/dist/components/badge.js +1 -1
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +3 -3
- package/dist/components/card.d.ts +2 -2
- package/dist/components/card.js +1 -1
- package/dist/components/carousel.js +1 -1
- package/dist/components/circular-progress.js +1 -1
- package/dist/components/combobox.js +3 -3
- package/dist/components/command.d.ts +15 -15
- package/dist/components/command.js +1 -1
- package/dist/components/currency-input.js +2 -2
- package/dist/components/date-input.d.ts +1 -1
- package/dist/components/date-input.js +1 -1
- package/dist/components/description-list.js +1 -1
- package/dist/components/dropdown-menu.js +1 -1
- package/dist/components/empty-state.js +2 -2
- package/dist/components/field.js +2 -2
- package/dist/components/filter-category-row.js +2 -2
- package/dist/components/form.js +1 -1
- package/dist/components/haptic-button.js +1 -1
- package/dist/components/input-group.js +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/item.d.ts +2 -2
- package/dist/components/item.js +1 -1
- package/dist/components/kbd.js +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/link-button.js +1 -1
- package/dist/components/multi-select-combobox.js +4 -4
- package/dist/components/pagination.js +1 -1
- package/dist/components/place-about-tab.d.ts +17 -1
- package/dist/components/place-about-tab.js +4 -4
- package/dist/components/place-card.js +2 -2
- package/dist/components/place-details-mobile.js +7 -7
- package/dist/components/place-schedule-week.js +2 -2
- package/dist/components/popover.js +1 -1
- package/dist/components/searchable-select.js +3 -3
- package/dist/components/select.js +2 -2
- package/dist/components/selection-bar.js +1 -1
- package/dist/components/sheet.d.ts +23 -0
- package/dist/components/sheet.js +51 -14
- package/dist/components/sliding-panels.js +5 -1
- package/dist/components/sonner.js +2 -2
- package/dist/components/spinner.d.ts +2 -2
- package/dist/components/stepper.js +4 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +3 -26
- package/dist/components/tag-group.js +1 -1
- package/dist/components/tag.d.ts +2 -2
- package/dist/components/tag.js +1 -1
- package/dist/components/text.d.ts +21 -3
- package/dist/components/text.js +1 -1
- package/dist/components/toggle-group.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/lib/card-hover.d.ts +75 -0
- package/dist/lib/card-hover.js +18 -0
- package/dist/lib/motion.d.ts +83 -0
- package/dist/lib/motion.js +2 -0
- package/package.json +1 -1
- package/src/components/accordion.tsx +1 -1
- package/src/components/avatar.stories.tsx +59 -26
- package/src/components/avatar.test.tsx +129 -0
- package/src/components/avatar.tsx +93 -37
- package/src/components/badge.tsx +15 -3
- package/src/components/breadcrumb.tsx +1 -1
- package/src/components/button.tsx +16 -1
- package/src/components/calendar.tsx +2 -2
- package/src/components/circular-progress.tsx +1 -1
- package/src/components/command.tsx +2 -2
- package/src/components/currency-input.tsx +1 -1
- package/src/components/description-list.tsx +1 -1
- package/src/components/dropdown-menu.tsx +1 -1
- package/src/components/field.tsx +1 -1
- package/src/components/input-group.tsx +1 -1
- package/src/components/input.tsx +1 -1
- package/src/components/item.tsx +1 -1
- package/src/components/kbd.tsx +1 -1
- package/src/components/label.tsx +1 -1
- package/src/components/place-about-tab.tsx +131 -18
- package/src/components/place-card.tsx +1 -1
- package/src/components/place-details-mobile.tsx +2 -2
- package/src/components/popover.tsx +9 -1
- package/src/components/select.tsx +2 -2
- package/src/components/selection-bar.tsx +1 -1
- package/src/components/sheet.tsx +72 -12
- package/src/components/sliding-panels.stories.tsx +70 -0
- package/src/components/sliding-panels.test.tsx +116 -0
- package/src/components/sliding-panels.tsx +14 -0
- package/src/components/sonner.tsx +2 -2
- package/src/components/stepper.tsx +4 -1
- package/src/components/table.tsx +1 -1
- package/src/components/tabs.tsx +1 -1
- package/src/components/tag-group.tsx +1 -1
- package/src/components/tag.tsx +1 -1
- package/src/components/text.test.tsx +37 -3
- package/src/components/text.tsx +32 -3
- package/src/components/toggle.tsx +1 -1
- package/src/globals.css +53 -11
- package/src/lib/card-hover.ts +87 -0
- package/dist/chunk-EBAMCZDW.js +0 -112
- package/dist/chunk-VQNDZVI7.js +0 -106
- package/dist/components/toast.d.ts +0 -18
- package/dist/components/toast.js +0 -3
- package/dist/components/toaster.d.ts +0 -5
- package/dist/components/toaster.js +0 -25
- package/dist/components/use-toast.d.ts +0 -42
- package/dist/components/use-toast.js +0 -2
- package/src/components/toast.stories.tsx +0 -63
- package/src/components/toast.tsx +0 -130
- package/src/components/toaster.tsx +0 -31
- package/src/components/use-toast.ts +0 -180
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from '../chunk-
|
|
1
|
+
export { Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from '../chunk-66MAPLXS.js';
|
|
2
2
|
import '../chunk-FEK5XGZW.js';
|
|
3
3
|
import '../chunk-3GWWZKX7.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Popover, PopoverTrigger, PopoverContent } from '../chunk-
|
|
2
|
-
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../chunk-
|
|
1
|
+
import { Popover, PopoverTrigger, PopoverContent } from '../chunk-66MAPLXS.js';
|
|
2
|
+
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../chunk-XNA2INVQ.js';
|
|
3
3
|
import '../chunk-FRPPIXMY.js';
|
|
4
|
-
import { Button } from '../chunk-
|
|
4
|
+
import { Button } from '../chunk-H3BV4VAG.js';
|
|
5
5
|
import '../chunk-R47NEOSI.js';
|
|
6
6
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
7
7
|
import '../chunk-3GWWZKX7.js';
|
|
@@ -10,7 +10,7 @@ var Select = SelectPrimitive.Root;
|
|
|
10
10
|
var SelectGroup = SelectPrimitive.Group;
|
|
11
11
|
var SelectValue = SelectPrimitive.Value;
|
|
12
12
|
var selectTriggerVariants = cva(
|
|
13
|
-
"flex w-full items-center justify-between rounded-xl bg-background border border-border text-sm font-
|
|
13
|
+
"flex w-full items-center justify-between rounded-xl bg-background border border-border text-sm font-semibold text-foreground transition-colors focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground [&>span]:line-clamp-1 hover:border-foreground/30 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive/40",
|
|
14
14
|
{
|
|
15
15
|
variants: {
|
|
16
16
|
size: {
|
|
@@ -118,7 +118,7 @@ var SelectItem = React.forwardRef((_a, ref) => {
|
|
|
118
118
|
ref,
|
|
119
119
|
"data-slot": "select-item",
|
|
120
120
|
className: cn(
|
|
121
|
-
"relative flex w-full cursor-default select-none items-center rounded-md py-2 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[state=checked]:font-
|
|
121
|
+
"relative flex w-full cursor-default select-none items-center rounded-md py-2 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[state=checked]:font-semibold",
|
|
122
122
|
className
|
|
123
123
|
)
|
|
124
124
|
}, props), {
|
|
@@ -36,7 +36,7 @@ var SelectionBar = React.forwardRef(
|
|
|
36
36
|
)
|
|
37
37
|
}, props), {
|
|
38
38
|
children: [
|
|
39
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm font-
|
|
39
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm font-semibold text-foreground", children: [
|
|
40
40
|
onClear && /* @__PURE__ */ jsx(
|
|
41
41
|
"button",
|
|
42
42
|
{
|
|
@@ -9,10 +9,33 @@ declare const SheetTrigger: React.ForwardRefExoticComponent<DialogPrimitive.Dial
|
|
|
9
9
|
declare const SheetClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
10
10
|
declare const SheetPortal: React.FC<DialogPrimitive.DialogPortalProps>;
|
|
11
11
|
declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
/**
|
|
13
|
+
* `attachment` controls whether the panel is welded to the viewport edge or
|
|
14
|
+
* floats clear of it.
|
|
15
|
+
*
|
|
16
|
+
* - `edge` (default) — the classic sheet: full bleed against its side, only the
|
|
17
|
+
* two corners facing inward rounded. Every existing consumer gets this, so
|
|
18
|
+
* adding `inset` changes nothing already shipped.
|
|
19
|
+
* - `inset` — a floating panel: held off all four edges, rounded on every
|
|
20
|
+
* corner, page visible around it. Reads as a surface laid ON the page rather
|
|
21
|
+
* than one grafted to it, which is what detail surfaces want — the content
|
|
22
|
+
* behind stays legible as context instead of being cropped away.
|
|
23
|
+
*
|
|
24
|
+
* `inset` deliberately drops the border. At an edge the border is the seam
|
|
25
|
+
* between panel and viewport and has work to do; floating, the shadow already
|
|
26
|
+
* separates the two and a border only draws a hard line around the radius.
|
|
27
|
+
*/
|
|
12
28
|
declare const sheetVariants: (props?: ({
|
|
13
29
|
side?: "left" | "right" | "bottom" | "top" | null | undefined;
|
|
30
|
+
attachment?: "inset" | "edge" | null | undefined;
|
|
14
31
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
15
32
|
interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
33
|
+
/**
|
|
34
|
+
* Suppress the built-in floating close button. Use when the panel renders its
|
|
35
|
+
* own header row with a close control, which would otherwise stack two close
|
|
36
|
+
* buttons in the same corner.
|
|
37
|
+
*/
|
|
38
|
+
hideClose?: boolean;
|
|
16
39
|
}
|
|
17
40
|
declare const SheetContent: React.ForwardRefExoticComponent<SheetContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
18
41
|
declare const SheetHeader: {
|
package/dist/components/sheet.js
CHANGED
|
@@ -26,32 +26,69 @@ var SheetOverlay = React.forwardRef((_a, ref) => {
|
|
|
26
26
|
});
|
|
27
27
|
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
28
28
|
var sheetVariants = cva(
|
|
29
|
-
"fixed z-[1000] gap-4 bg-background border-border
|
|
29
|
+
"fixed z-[1000] gap-4 bg-background border-border shadow-2xl data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:duration-[var(--duration-deliberate)] data-[state=closed]:duration-[var(--duration-exit-standard)] data-[state=open]:ease-[var(--ease-enter)] data-[state=closed]:ease-[var(--ease-exit)]",
|
|
30
30
|
{
|
|
31
31
|
variants: {
|
|
32
32
|
side: {
|
|
33
|
-
top: "inset-x-0 top-0
|
|
34
|
-
bottom: "inset-x-0 bottom-0
|
|
35
|
-
left: "inset-y-0 left-0 h-full w-3/4
|
|
36
|
-
right: "inset-y-0 right-0 h-full w-3/4
|
|
33
|
+
top: "inset-x-0 top-0 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
34
|
+
bottom: "inset-x-0 bottom-0 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
35
|
+
left: "inset-y-0 left-0 h-full w-3/4 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left",
|
|
36
|
+
right: "inset-y-0 right-0 h-full w-3/4 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right"
|
|
37
|
+
},
|
|
38
|
+
attachment: {
|
|
39
|
+
edge: "p-6",
|
|
40
|
+
// Padding is the caller's business here: a detail surface runs a gallery
|
|
41
|
+
// and a sticky action bar to the panel edge, and a fixed p-6 would inset
|
|
42
|
+
// both. `edge` keeps its p-6 so nothing already shipped shifts.
|
|
43
|
+
inset: "rounded-2xl overflow-hidden"
|
|
37
44
|
}
|
|
38
45
|
},
|
|
46
|
+
compoundVariants: [
|
|
47
|
+
// `edge` restates exactly what each side carried before `attachment`
|
|
48
|
+
// existed — the seam border and the two inward-facing corners. Kept as
|
|
49
|
+
// compounds rather than left on `side` so `inset` is not fighting them
|
|
50
|
+
// through class-merge order.
|
|
51
|
+
// `sm:max-w-sm` lives here, not on `side`: an inset panel is sized by its
|
|
52
|
+
// caller, and a responsive cap left on `side` cannot be overridden from
|
|
53
|
+
// className — tailwind-merge scopes `sm:max-w-*` and `max-w-*` to
|
|
54
|
+
// different groups, so `max-w-none` loses to it at every width ≥ sm.
|
|
55
|
+
{ side: "top", attachment: "edge", class: "border-b" },
|
|
56
|
+
{ side: "bottom", attachment: "edge", class: "border-t rounded-t-2xl" },
|
|
57
|
+
{ side: "left", attachment: "edge", class: "border-r rounded-r-2xl sm:max-w-sm" },
|
|
58
|
+
{ side: "right", attachment: "edge", class: "border-l rounded-l-2xl sm:max-w-sm" },
|
|
59
|
+
// The inset offsets live here rather than on `attachment` because each
|
|
60
|
+
// side has to give up its own edge: a right-side panel clears top, right
|
|
61
|
+
// and bottom but is still anchored to the right.
|
|
62
|
+
{ side: "right", attachment: "inset", class: "inset-y-3 right-3 h-auto" },
|
|
63
|
+
{ side: "left", attachment: "inset", class: "inset-y-3 left-3 h-auto" },
|
|
64
|
+
{ side: "top", attachment: "inset", class: "inset-x-3 top-3" },
|
|
65
|
+
{ side: "bottom", attachment: "inset", class: "inset-x-3 bottom-3" }
|
|
66
|
+
],
|
|
39
67
|
defaultVariants: {
|
|
40
|
-
side: "right"
|
|
68
|
+
side: "right",
|
|
69
|
+
attachment: "edge"
|
|
41
70
|
}
|
|
42
71
|
}
|
|
43
72
|
);
|
|
44
73
|
var SheetContent = React.forwardRef((_a, ref) => {
|
|
45
|
-
var _b = _a, { side = "right", className, children } = _b, props = __objRest(_b, ["side", "className", "children"]);
|
|
74
|
+
var _b = _a, { side = "right", attachment = "edge", className, children, hideClose } = _b, props = __objRest(_b, ["side", "attachment", "className", "children", "hideClose"]);
|
|
46
75
|
return /* @__PURE__ */ jsxs(SheetPortal, { children: [
|
|
47
76
|
/* @__PURE__ */ jsx(SheetOverlay, {}),
|
|
48
|
-
/* @__PURE__ */ jsxs(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
/* @__PURE__ */ jsxs(
|
|
78
|
+
SheetPrimitive.Content,
|
|
79
|
+
__spreadProps(__spreadValues({
|
|
80
|
+
ref,
|
|
81
|
+
className: cn(sheetVariants({ side, attachment }), className)
|
|
82
|
+
}, props), {
|
|
83
|
+
children: [
|
|
84
|
+
children,
|
|
85
|
+
!hideClose && /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-lg opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary glass-hover p-2", children: [
|
|
86
|
+
/* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
|
|
87
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
88
|
+
] })
|
|
89
|
+
]
|
|
90
|
+
})
|
|
91
|
+
)
|
|
55
92
|
] });
|
|
56
93
|
});
|
|
57
94
|
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button } from '../chunk-
|
|
1
|
+
import { Button } from '../chunk-H3BV4VAG.js';
|
|
2
2
|
import '../chunk-R47NEOSI.js';
|
|
3
3
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
4
4
|
import '../chunk-3GWWZKX7.js';
|
|
@@ -53,6 +53,7 @@ var SlidingPanels = ({
|
|
|
53
53
|
return /* @__PURE__ */ jsx(
|
|
54
54
|
"div",
|
|
55
55
|
{
|
|
56
|
+
"data-slot": "sliding-panels",
|
|
56
57
|
className: cn(
|
|
57
58
|
"relative overflow-clip transition-[height] duration-500 ease-[cubic-bezier(0.32,0.72,0,1)]",
|
|
58
59
|
className
|
|
@@ -68,12 +69,15 @@ var SlidingPanels = ({
|
|
|
68
69
|
ref: (el) => {
|
|
69
70
|
panelRefs.current[index] = el;
|
|
70
71
|
},
|
|
72
|
+
"data-slot": "sliding-panel",
|
|
73
|
+
"data-state": isActive ? "active" : "inactive",
|
|
71
74
|
className: cn(
|
|
72
75
|
"absolute top-0 left-0 w-full transition-transform duration-500 ease-[cubic-bezier(0.32,0.72,0,1)]",
|
|
73
76
|
isActive && "translate-x-0",
|
|
74
77
|
isLeft && "-translate-x-[calc(100%+8px)]",
|
|
75
78
|
isRight && "translate-x-[calc(100%+8px)]"
|
|
76
79
|
),
|
|
80
|
+
inert: !isActive || void 0,
|
|
77
81
|
"aria-hidden": !isActive,
|
|
78
82
|
children: [
|
|
79
83
|
panel.showBackButton && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-4", children: [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
|
|
2
|
-
import { Loader2Icon,
|
|
2
|
+
import { Loader2Icon, CircleAlertIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon } from 'lucide-react';
|
|
3
3
|
import { useTheme } from 'next-themes';
|
|
4
4
|
import { Toaster as Toaster$1 } from 'sonner';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -16,7 +16,7 @@ var Toaster = (_a) => {
|
|
|
16
16
|
success: /* @__PURE__ */ jsx(CircleCheckIcon, { className: "size-4" }),
|
|
17
17
|
info: /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }),
|
|
18
18
|
warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
|
|
19
|
-
error: /* @__PURE__ */ jsx(
|
|
19
|
+
error: /* @__PURE__ */ jsx(CircleAlertIcon, { className: "size-4" }),
|
|
20
20
|
loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
|
|
21
21
|
},
|
|
22
22
|
style: {
|
|
@@ -4,11 +4,11 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
4
4
|
|
|
5
5
|
declare const spinnerVariants: (props?: ({
|
|
6
6
|
size?: "default" | "xs" | "sm" | "lg" | "xl" | null | undefined;
|
|
7
|
-
tone?: "
|
|
7
|
+
tone?: "default" | "destructive" | "inherit" | "primary" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
declare const Spinner: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & VariantProps<(props?: ({
|
|
10
10
|
size?: "default" | "xs" | "sm" | "lg" | "xl" | null | undefined;
|
|
11
|
-
tone?: "
|
|
11
|
+
tone?: "default" | "destructive" | "inherit" | "primary" | null | undefined;
|
|
12
12
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
13
13
|
/** Visually-hidden label for screen readers. Defaults to "Loading". */
|
|
14
14
|
label?: string;
|
|
@@ -58,8 +58,11 @@ var Stepper = React.forwardRef(
|
|
|
58
58
|
{
|
|
59
59
|
className: cn(
|
|
60
60
|
"whitespace-nowrap transition-colors",
|
|
61
|
+
// current and complete share a weight; COLOUR carries the
|
|
62
|
+
// state (full → 80% → 40%). `complete` was 500, the one
|
|
63
|
+
// step that is not in the 400/600/700 system.
|
|
61
64
|
status === "current" && "font-semibold text-foreground",
|
|
62
|
-
status === "complete" && "font-
|
|
65
|
+
status === "complete" && "font-semibold text-foreground/80",
|
|
63
66
|
status === "upcoming" && "text-foreground/40"
|
|
64
67
|
),
|
|
65
68
|
children: step.title
|
package/dist/components/table.js
CHANGED
|
@@ -51,7 +51,7 @@ var TableFooter = React.forwardRef((_a, ref) => {
|
|
|
51
51
|
__spreadValues({
|
|
52
52
|
ref,
|
|
53
53
|
"data-slot": "table-footer",
|
|
54
|
-
className: cn("border-t border-border bg-muted/50 font-
|
|
54
|
+
className: cn("border-t border-border bg-muted/50 font-semibold [&>tr]:last:border-b-0", className)
|
|
55
55
|
}, props)
|
|
56
56
|
);
|
|
57
57
|
});
|
package/dist/components/tabs.js
CHANGED
|
@@ -1,34 +1,11 @@
|
|
|
1
|
+
import { archetype } from '../chunk-LEAYBICI.js';
|
|
1
2
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
2
|
-
import {
|
|
3
|
+
import { __objRest, __spreadValues, __spreadProps } from '../chunk-3GWWZKX7.js';
|
|
3
4
|
import * as React from 'react';
|
|
4
5
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
5
6
|
import { motion } from 'framer-motion';
|
|
6
7
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
8
|
|
|
8
|
-
var springSnappy = {
|
|
9
|
-
type: "spring",
|
|
10
|
-
damping: 30,
|
|
11
|
-
stiffness: 380
|
|
12
|
-
};
|
|
13
|
-
var springSmooth = {
|
|
14
|
-
type: "spring",
|
|
15
|
-
damping: 30,
|
|
16
|
-
stiffness: 220
|
|
17
|
-
};
|
|
18
|
-
var springSoft = {
|
|
19
|
-
type: "spring",
|
|
20
|
-
damping: 35,
|
|
21
|
-
stiffness: 140
|
|
22
|
-
};
|
|
23
|
-
var archetype = {
|
|
24
|
-
/** Drawer / Sheet / Dialog entrance. Surface arrives first; content layers after. */
|
|
25
|
-
surfaceOpen: __spreadValues({}, springSmooth),
|
|
26
|
-
/** First-reveal stagger for card grids. Per-item spring. Cap stagger at 8 items. */
|
|
27
|
-
listReveal: __spreadValues({}, springSoft),
|
|
28
|
-
/** Bottom-sheet / side-drawer entry. */
|
|
29
|
-
edgeEnter: __spreadValues({}, springSmooth),
|
|
30
|
-
/** Active tab pill, active filter chip — use with Framer Motion `layoutId`. */
|
|
31
|
-
indicatorMorph: __spreadValues({}, springSnappy)};
|
|
32
9
|
var TabsContext = React.createContext({
|
|
33
10
|
variant: "pill",
|
|
34
11
|
orientation: "horizontal",
|
|
@@ -100,7 +77,7 @@ var TabsTrigger = React.forwardRef((_a, ref) => {
|
|
|
100
77
|
ref: composedRef,
|
|
101
78
|
"data-slot": "tabs-trigger",
|
|
102
79
|
className: cn(
|
|
103
|
-
"relative inline-flex items-center justify-center whitespace-nowrap text-sm font-
|
|
80
|
+
"relative inline-flex items-center justify-center whitespace-nowrap text-sm font-semibold 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",
|
|
104
81
|
variant === "pill" && "rounded-xl px-4 py-1.5 text-muted-foreground hover:text-foreground data-[state=active]:text-foreground",
|
|
105
82
|
variant === "underline" && orientation === "horizontal" && "h-11 rounded-none px-4 text-muted-foreground hover:text-foreground data-[state=active]:text-foreground",
|
|
106
83
|
variant === "underline" && orientation === "vertical" && "rounded-none px-4 py-2 -mr-px text-muted-foreground hover:text-foreground data-[state=active]:text-foreground justify-start",
|
|
@@ -15,7 +15,7 @@ var TagGroup = React.forwardRef((_a, ref) => {
|
|
|
15
15
|
className: cn("flex flex-wrap items-center gap-1.5", className)
|
|
16
16
|
}, props), {
|
|
17
17
|
children: [
|
|
18
|
-
label && !srLabel && /* @__PURE__ */ jsx("span", { className: "mr-1 text-xs font-
|
|
18
|
+
label && !srLabel && /* @__PURE__ */ jsx("span", { className: "mr-1 text-xs font-semibold text-muted-foreground", children: label }),
|
|
19
19
|
children
|
|
20
20
|
]
|
|
21
21
|
})
|
package/dist/components/tag.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const tagVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "destructive" | "
|
|
6
|
+
variant?: "default" | "destructive" | "warning" | "success" | "primary" | "outline" | null | undefined;
|
|
7
7
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
declare const Tag: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & VariantProps<(props?: ({
|
|
10
|
-
variant?: "default" | "destructive" | "
|
|
10
|
+
variant?: "default" | "destructive" | "warning" | "success" | "primary" | "outline" | null | undefined;
|
|
11
11
|
size?: "default" | "sm" | "lg" | null | undefined;
|
|
12
12
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
13
13
|
onRemove?: () => void;
|
package/dist/components/tag.js
CHANGED
|
@@ -3,10 +3,28 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* The type scale is a CLOSED set of roles. Seven carry every surface:
|
|
8
|
+
*
|
|
9
|
+
* h1 page title 30/700
|
|
10
|
+
* h3 section heading 20/600
|
|
11
|
+
* body running prose 16/400 relaxed
|
|
12
|
+
* label row / item title 14/600
|
|
13
|
+
* body-sm secondary fact 14/400
|
|
14
|
+
* overline eyebrow 12/600 uppercase
|
|
15
|
+
* caption fine print 12/400
|
|
16
|
+
*
|
|
17
|
+
* Emphasis, colour and tabular figures are ORTHOGONAL modifiers (`weight`,
|
|
18
|
+
* `color`, className) — they must never be expressed by changing SIZE. A
|
|
19
|
+
* paragraph that steps 16 → 14 mid-sentence to mark its lead reads as two
|
|
20
|
+
* paragraphs jammed together; that is what the modifiers exist for.
|
|
21
|
+
*
|
|
22
|
+
* Weights are 400 / 600 / 700. 500 is not in the system.
|
|
23
|
+
*/
|
|
6
24
|
declare const textVariants: (props?: ({
|
|
7
|
-
variant?: "
|
|
8
|
-
color?: "
|
|
9
|
-
weight?: "bold" | "
|
|
25
|
+
variant?: "small" | "display" | "h1" | "h2" | "h3" | "h4" | "body-lg" | "body" | "body-sm" | "caption" | "label" | "overline" | null | undefined;
|
|
26
|
+
color?: "default" | "destructive" | "inherit" | "muted" | "primary" | "primary-foreground" | null | undefined;
|
|
27
|
+
weight?: "bold" | "normal" | "medium" | "semibold" | null | undefined;
|
|
10
28
|
leading?: "none" | "normal" | "tight" | "snug" | "relaxed" | "loose" | null | undefined;
|
|
11
29
|
tracking?: "normal" | "tight" | "wide" | "wider" | null | undefined;
|
|
12
30
|
wrap?: "balance" | "pretty" | "nowrap" | null | undefined;
|
package/dist/components/text.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { toggleVariants } from '../chunk-
|
|
1
|
+
import { toggleVariants } from '../chunk-X3WMRKOW.js';
|
|
2
2
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
3
3
|
import { __objRest, __spreadProps, __spreadValues } from '../chunk-3GWWZKX7.js';
|
|
4
4
|
import * as React from 'react';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card hover motion tokens — the shared recipe for any card with a cover image.
|
|
3
|
+
*
|
|
4
|
+
* Every card type animates the same set of properties (transform on the card
|
|
5
|
+
* root, transform on the image, box-shadow on the image wrapper) so the timings
|
|
6
|
+
* must stay in lockstep. Defining the tokens in one place is the only way to
|
|
7
|
+
* guarantee a hover that feels identical across a mixed grid.
|
|
8
|
+
*
|
|
9
|
+
* Prefer the COMPOSED tokens (`HOVER_IMAGE_WRAPPER`, `HOVER_IMAGE_MOTION`) over
|
|
10
|
+
* re-assembling a recipe from `HOVER_DURATION` + `HOVER_EASE` + a shadow at the
|
|
11
|
+
* call site. Consumers that did the latter silently shipped without a hover
|
|
12
|
+
* shadow — the transition and the resting shadow were wired up, the hover state
|
|
13
|
+
* simply never was, and nothing failed loudly. One class per element is what
|
|
14
|
+
* stops that.
|
|
15
|
+
*
|
|
16
|
+
* Companion CSS custom properties live in `./globals.css`:
|
|
17
|
+
* --shadow-card-image / --shadow-card-image-hover / --shadow-menu-cover-inset
|
|
18
|
+
* They carry the dark-mode override, so none of these tokens needs a `dark:`
|
|
19
|
+
* twin of every state. A consumer app must NOT redefine them locally — app
|
|
20
|
+
* stylesheets are imported after this one and would silently win.
|
|
21
|
+
*
|
|
22
|
+
* Why we don't animate filter / mix-blend-mode opacity:
|
|
23
|
+
* - filter animations (`saturate`, `brightness`) on <img> are CPU-heavy and
|
|
24
|
+
* can hitch on lower-end devices.
|
|
25
|
+
* - mix-blend-multiply opacity transitions composite at unpredictable frame
|
|
26
|
+
* rates so they never sync with transform/opacity transitions.
|
|
27
|
+
* Restricting hover to transform + box-shadow keeps every element on the same
|
|
28
|
+
* GPU-composited frame, which is what makes the in/out feel perfectly synced.
|
|
29
|
+
*/
|
|
30
|
+
declare const HOVER_DURATION = "duration-[320ms]";
|
|
31
|
+
declare const HOVER_EASE = "ease-[cubic-bezier(0.4,0,0.2,1)]";
|
|
32
|
+
/** Apply to the card root — composes the base transform transition. */
|
|
33
|
+
declare const HOVER_MOTION = "transition-transform duration-[320ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none will-change-transform";
|
|
34
|
+
/** Apply to elements that animate box-shadow on hover (image wrappers). */
|
|
35
|
+
declare const HOVER_SHADOW_MOTION = "transition-shadow duration-[320ms] ease-[cubic-bezier(0.4,0,0.2,1)]";
|
|
36
|
+
/** Grid/standard/hero card variants — full lift. */
|
|
37
|
+
declare const HOVER_LIFT_GRID = "[@media(hover:hover)]:hover:-translate-y-1";
|
|
38
|
+
/**
|
|
39
|
+
* Same lift as `HOVER_LIFT_GRID`, but driven by a NAMED `group/card` ancestor
|
|
40
|
+
* instead of the element's own `:hover`.
|
|
41
|
+
*
|
|
42
|
+
* For overlays that must render as SIBLINGS of the interactive card rather than
|
|
43
|
+
* children — e.g. a pill that is itself a button or link, which would be
|
|
44
|
+
* invalid ARIA nested inside the card's own `role="button"` / `<a>`. A sibling
|
|
45
|
+
* can't inherit the card's transform, so it stays pinned while the card lifts
|
|
46
|
+
* out from under it. Putting `group/card` on the shared wrapper and this token
|
|
47
|
+
* on BOTH the card and the overlay moves them as one, and means hovering the
|
|
48
|
+
* overlay lifts the card too (its own `:hover` never fires for a sibling).
|
|
49
|
+
*/
|
|
50
|
+
declare const HOVER_LIFT_GRID_GROUP = "[@media(hover:hover)]:group-hover/card:-translate-y-1";
|
|
51
|
+
/** List/compact row variants — half lift since rows are denser. */
|
|
52
|
+
declare const HOVER_LIFT_LIST = "[@media(hover:hover)]:hover:-translate-y-0.5";
|
|
53
|
+
/** Image inside a card — scales subtly on group hover. */
|
|
54
|
+
declare const HOVER_IMAGE_SCALE = "group-hover:scale-[1.05]";
|
|
55
|
+
/** Drop-in className for the `<img>` element inside card image wrappers. */
|
|
56
|
+
declare const HOVER_IMAGE_MOTION = "transition-transform duration-[320ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none will-change-transform group-hover:scale-[1.05]";
|
|
57
|
+
/** Warm image-wrapper shadow that deepens on group hover. */
|
|
58
|
+
declare const HOVER_IMAGE_SHADOW = "shadow-[var(--shadow-card-image)] [@media(hover:hover)]:group-hover:shadow-[var(--shadow-card-image-hover)]";
|
|
59
|
+
/**
|
|
60
|
+
* Same lift, for covers that ALSO carry an inset "well" edge on a generated
|
|
61
|
+
* illustration rather than a photo. `box-shadow` is a single property, so the
|
|
62
|
+
* inset can't be a second `shadow-*` class stacked on `HOVER_IMAGE_SHADOW`; it
|
|
63
|
+
* has to be part of the same value, which is why both states are spelled out.
|
|
64
|
+
*/
|
|
65
|
+
declare const HOVER_IMAGE_SHADOW_INSET = "shadow-[var(--shadow-menu-cover-inset),var(--shadow-card-image)] [@media(hover:hover)]:group-hover:shadow-[var(--shadow-menu-cover-inset),var(--shadow-card-image-hover)]";
|
|
66
|
+
/**
|
|
67
|
+
* The whole cover-wrapper recipe: shadow transition + the warm lift. Pair with
|
|
68
|
+
* `HOVER_IMAGE_MOTION` on the image inside (covers that render a generated
|
|
69
|
+
* illustration have no image to scale and use this alone).
|
|
70
|
+
*/
|
|
71
|
+
declare const HOVER_IMAGE_WRAPPER = "transition-shadow duration-[320ms] ease-[cubic-bezier(0.4,0,0.2,1)] shadow-[var(--shadow-card-image)] [@media(hover:hover)]:group-hover:shadow-[var(--shadow-card-image-hover)]";
|
|
72
|
+
/** `HOVER_IMAGE_WRAPPER` for the inset-well covers. */
|
|
73
|
+
declare const HOVER_IMAGE_WRAPPER_INSET = "transition-shadow duration-[320ms] ease-[cubic-bezier(0.4,0,0.2,1)] shadow-[var(--shadow-menu-cover-inset),var(--shadow-card-image)] [@media(hover:hover)]:group-hover:shadow-[var(--shadow-menu-cover-inset),var(--shadow-card-image-hover)]";
|
|
74
|
+
|
|
75
|
+
export { HOVER_DURATION, HOVER_EASE, HOVER_IMAGE_MOTION, HOVER_IMAGE_SCALE, HOVER_IMAGE_SHADOW, HOVER_IMAGE_SHADOW_INSET, HOVER_IMAGE_WRAPPER, HOVER_IMAGE_WRAPPER_INSET, HOVER_LIFT_GRID, HOVER_LIFT_GRID_GROUP, HOVER_LIFT_LIST, HOVER_MOTION, HOVER_SHADOW_MOTION };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import '../chunk-3GWWZKX7.js';
|
|
2
|
+
|
|
3
|
+
// src/lib/card-hover.ts
|
|
4
|
+
var HOVER_DURATION = "duration-[320ms]";
|
|
5
|
+
var HOVER_EASE = "ease-[cubic-bezier(0.4,0,0.2,1)]";
|
|
6
|
+
var HOVER_MOTION = `transition-transform ${HOVER_DURATION} ${HOVER_EASE} motion-reduce:transition-none will-change-transform`;
|
|
7
|
+
var HOVER_SHADOW_MOTION = `transition-shadow ${HOVER_DURATION} ${HOVER_EASE}`;
|
|
8
|
+
var HOVER_LIFT_GRID = "[@media(hover:hover)]:hover:-translate-y-1";
|
|
9
|
+
var HOVER_LIFT_GRID_GROUP = "[@media(hover:hover)]:group-hover/card:-translate-y-1";
|
|
10
|
+
var HOVER_LIFT_LIST = "[@media(hover:hover)]:hover:-translate-y-0.5";
|
|
11
|
+
var HOVER_IMAGE_SCALE = "group-hover:scale-[1.05]";
|
|
12
|
+
var HOVER_IMAGE_MOTION = `${HOVER_MOTION} ${HOVER_IMAGE_SCALE}`;
|
|
13
|
+
var HOVER_IMAGE_SHADOW = "shadow-[var(--shadow-card-image)] [@media(hover:hover)]:group-hover:shadow-[var(--shadow-card-image-hover)]";
|
|
14
|
+
var HOVER_IMAGE_SHADOW_INSET = "shadow-[var(--shadow-menu-cover-inset),var(--shadow-card-image)] [@media(hover:hover)]:group-hover:shadow-[var(--shadow-menu-cover-inset),var(--shadow-card-image-hover)]";
|
|
15
|
+
var HOVER_IMAGE_WRAPPER = `${HOVER_SHADOW_MOTION} ${HOVER_IMAGE_SHADOW}`;
|
|
16
|
+
var HOVER_IMAGE_WRAPPER_INSET = `${HOVER_SHADOW_MOTION} ${HOVER_IMAGE_SHADOW_INSET}`;
|
|
17
|
+
|
|
18
|
+
export { HOVER_DURATION, HOVER_EASE, HOVER_IMAGE_MOTION, HOVER_IMAGE_SCALE, HOVER_IMAGE_SHADOW, HOVER_IMAGE_SHADOW_INSET, HOVER_IMAGE_WRAPPER, HOVER_IMAGE_WRAPPER_INSET, HOVER_LIFT_GRID, HOVER_LIFT_GRID_GROUP, HOVER_LIFT_LIST, HOVER_MOTION, HOVER_SHADOW_MOTION };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Transition, Variants } from 'framer-motion';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* BearMenu Motion System — v1.0
|
|
5
|
+
*
|
|
6
|
+
* Three layers:
|
|
7
|
+
* 1. Primitives — durations + easing curves (raw values)
|
|
8
|
+
* 2. Springs — Framer Motion spring configs (named)
|
|
9
|
+
* 3. Archetypes — compound presets that compose primitives + springs
|
|
10
|
+
*
|
|
11
|
+
* Feature code reaches for archetypes, never primitives.
|
|
12
|
+
* Adding a new archetype is a DS-maintainer task.
|
|
13
|
+
*
|
|
14
|
+
* Companion CSS custom properties live in `./globals.css`:
|
|
15
|
+
* --duration-instant / --duration-quick / --duration-standard /
|
|
16
|
+
* --duration-deliberate / --duration-narrative /
|
|
17
|
+
* --duration-exit-quick / --duration-exit-standard
|
|
18
|
+
* --ease-enter / --ease-standard / --ease-exit
|
|
19
|
+
*/
|
|
20
|
+
declare const duration: {
|
|
21
|
+
readonly instant: 0.12;
|
|
22
|
+
readonly quick: 0.18;
|
|
23
|
+
readonly standard: 0.26;
|
|
24
|
+
readonly deliberate: 0.36;
|
|
25
|
+
readonly narrative: 0.5;
|
|
26
|
+
readonly exitQuick: 0.11;
|
|
27
|
+
readonly exitStandard: 0.21;
|
|
28
|
+
};
|
|
29
|
+
declare const ease: {
|
|
30
|
+
readonly enter: readonly [0, 0, 0.2, 1];
|
|
31
|
+
readonly standard: readonly [0.4, 0, 0.2, 1];
|
|
32
|
+
readonly exit: readonly [0.55, 0, 1, 0.45];
|
|
33
|
+
};
|
|
34
|
+
declare const springSnappy: Transition;
|
|
35
|
+
declare const springSmooth: Transition;
|
|
36
|
+
declare const springSoft: Transition;
|
|
37
|
+
/** @deprecated use `springSoft`. Kept as alias during migration. */
|
|
38
|
+
declare const springGentle: Transition;
|
|
39
|
+
declare const archetype: {
|
|
40
|
+
/** Drawer / Sheet / Dialog entrance. Surface arrives first; content layers after. */
|
|
41
|
+
readonly surfaceOpen: Transition;
|
|
42
|
+
readonly surfaceClose: Transition;
|
|
43
|
+
/** First-reveal stagger for card grids. Per-item spring. Cap stagger at 8 items. */
|
|
44
|
+
readonly listReveal: Transition;
|
|
45
|
+
readonly listRevealStagger: 0.04;
|
|
46
|
+
readonly listRevealMaxItems: 8;
|
|
47
|
+
/** Tab content swap, skeleton → data swap. Opacity-only — no transform. */
|
|
48
|
+
readonly contentSwap: Transition;
|
|
49
|
+
readonly contentSwapExit: Transition;
|
|
50
|
+
/** Bottom-sheet / side-drawer entry. */
|
|
51
|
+
readonly edgeEnter: Transition;
|
|
52
|
+
readonly edgeExit: Transition;
|
|
53
|
+
/** Card / button tap feedback. */
|
|
54
|
+
readonly pressResponse: Transition;
|
|
55
|
+
/** Active tab pill, active filter chip — use with Framer Motion `layoutId`. */
|
|
56
|
+
readonly indicatorMorph: Transition;
|
|
57
|
+
/** Image enter — slight scale on load. */
|
|
58
|
+
readonly imageEnter: Transition;
|
|
59
|
+
};
|
|
60
|
+
declare const stagger: {
|
|
61
|
+
readonly tight: 0.03;
|
|
62
|
+
readonly standard: 0.04;
|
|
63
|
+
readonly loose: 0.06;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* List-reveal container + item variants. Pair with Framer Motion `motion.ul`/`motion.div`.
|
|
67
|
+
* Container drives stagger; item handles the actual fade + Y-shift.
|
|
68
|
+
*/
|
|
69
|
+
declare const listRevealVariants: {
|
|
70
|
+
container: Variants;
|
|
71
|
+
item: Variants;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Content-swap variants for `AnimatePresence mode="wait"`. Opacity + tiny Y shift.
|
|
75
|
+
* Use for tab panels.
|
|
76
|
+
*/
|
|
77
|
+
declare const contentSwapVariants: Variants;
|
|
78
|
+
/**
|
|
79
|
+
* Skeleton → data swap. Opacity-only to prevent layout shift on slow networks.
|
|
80
|
+
*/
|
|
81
|
+
declare const skeletonSwapVariants: Variants;
|
|
82
|
+
|
|
83
|
+
export { archetype, contentSwapVariants, duration, ease, listRevealVariants, skeletonSwapVariants, springGentle, springSmooth, springSnappy, springSoft, stagger };
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@ const AccordionTrigger = React.forwardRef<
|
|
|
29
29
|
ref={ref}
|
|
30
30
|
data-slot="accordion-trigger"
|
|
31
31
|
className={cn(
|
|
32
|
-
"flex flex-1 cursor-pointer items-center justify-between py-4 text-sm font-
|
|
32
|
+
"flex flex-1 cursor-pointer items-center justify-between py-4 text-sm font-semibold text-foreground transition-colors hover:text-foreground/80",
|
|
33
33
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm",
|
|
34
34
|
"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
35
35
|
"[&[data-state=open]>svg]:rotate-180",
|