@bearmenu/ui 0.8.4 → 0.8.6

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.
Files changed (157) hide show
  1. package/dist/chunk-637L7XQ3.js +85 -0
  2. package/dist/chunk-6XMYEZVR.js +26 -0
  3. package/dist/chunk-DNSXMHYX.js +8 -0
  4. package/dist/chunk-FDITZ2VM.js +16 -0
  5. package/dist/chunk-GPH6L4DX.js +55 -0
  6. package/dist/{chunk-N2KNBPAQ.js → chunk-QXHMPJ35.js} +1 -0
  7. package/dist/chunk-TT3WFS6S.js +379 -0
  8. package/dist/chunk-UXWAOISG.js +170 -0
  9. package/dist/{chunk-UZ3PCIE5.js → chunk-XWMRABZW.js} +2 -2
  10. package/dist/{chunk-VBA45GLP.js → chunk-ZDAHKI3A.js} +12 -2
  11. package/dist/components/alert.d.ts +2 -2
  12. package/dist/components/badge.d.ts +1 -1
  13. package/dist/components/button.d.ts +1 -1
  14. package/dist/components/card.d.ts +2 -2
  15. package/dist/components/card.js +4 -127
  16. package/dist/components/category-deck.d.ts +50 -0
  17. package/dist/components/category-deck.js +128 -0
  18. package/dist/components/command.d.ts +15 -15
  19. package/dist/components/concept-card.d.ts +43 -0
  20. package/dist/components/concept-card.js +81 -0
  21. package/dist/components/coverflow.d.ts +123 -0
  22. package/dist/components/coverflow.js +300 -0
  23. package/dist/components/date-input.d.ts +1 -1
  24. package/dist/components/day-rail-chip.d.ts +82 -0
  25. package/dist/components/day-rail-chip.js +105 -0
  26. package/dist/components/drift-rail.d.ts +28 -0
  27. package/dist/components/drift-rail.js +3 -0
  28. package/dist/components/event-card.d.ts +97 -0
  29. package/dist/components/event-card.js +161 -0
  30. package/dist/components/event-compact-row.d.ts +72 -0
  31. package/dist/components/event-compact-row.js +133 -0
  32. package/dist/components/event-day-header.d.ts +65 -0
  33. package/dist/components/event-day-header.js +95 -0
  34. package/dist/components/event-day-separator.d.ts +46 -0
  35. package/dist/components/event-day-separator.js +50 -0
  36. package/dist/components/event-detail-panel.d.ts +80 -0
  37. package/dist/components/event-detail-panel.js +251 -0
  38. package/dist/components/event-hub-hero.d.ts +34 -0
  39. package/dist/components/event-hub-hero.js +57 -0
  40. package/dist/components/event-index-row.d.ts +68 -0
  41. package/dist/components/event-index-row.js +84 -0
  42. package/dist/components/event-list-row-wide.d.ts +101 -0
  43. package/dist/components/event-list-row-wide.js +218 -0
  44. package/dist/components/event-list-row.d.ts +82 -0
  45. package/dist/components/event-list-row.js +173 -0
  46. package/dist/components/event-poster-fallback.d.ts +20 -0
  47. package/dist/components/event-poster-fallback.js +3 -0
  48. package/dist/components/event-types.d.ts +118 -0
  49. package/dist/components/event-types.js +2 -0
  50. package/dist/components/events-empty-state.d.ts +44 -0
  51. package/dist/components/events-empty-state.js +73 -0
  52. package/dist/components/facet-group.d.ts +93 -0
  53. package/dist/components/facet-group.js +222 -0
  54. package/dist/components/featured-rail-item.d.ts +42 -0
  55. package/dist/components/featured-rail-item.js +88 -0
  56. package/dist/components/hour-band.d.ts +68 -0
  57. package/dist/components/hour-band.js +53 -0
  58. package/dist/components/hour-group.d.ts +67 -0
  59. package/dist/components/hour-group.js +59 -0
  60. package/dist/components/item.d.ts +2 -2
  61. package/dist/components/motion-icon-controls.js +3 -379
  62. package/dist/components/multi-select-combobox.js +1 -1
  63. package/dist/components/place-about-tab.js +3 -3
  64. package/dist/components/place-details-mobile.js +3 -3
  65. package/dist/components/poster-stack.d.ts +30 -0
  66. package/dist/components/poster-stack.js +104 -0
  67. package/dist/components/poster-tape.d.ts +36 -0
  68. package/dist/components/poster-tape.js +64 -0
  69. package/dist/components/poster-wall.d.ts +25 -0
  70. package/dist/components/poster-wall.js +183 -0
  71. package/dist/components/quiet-stretch.d.ts +43 -0
  72. package/dist/components/quiet-stretch.js +54 -0
  73. package/dist/components/section-header.d.ts +53 -0
  74. package/dist/components/section-header.js +63 -0
  75. package/dist/components/segmented-nav.d.ts +62 -0
  76. package/dist/components/segmented-nav.js +54 -0
  77. package/dist/components/skeleton-card.js +1 -1
  78. package/dist/components/skeleton.d.ts +17 -0
  79. package/dist/components/skeleton.js +1 -1
  80. package/dist/components/spinner.d.ts +2 -2
  81. package/dist/components/tag-group.js +3 -26
  82. package/dist/components/tag.d.ts +2 -2
  83. package/dist/components/tag.js +1 -1
  84. package/dist/components/text.d.ts +3 -3
  85. package/dist/components/timeline-band.d.ts +46 -0
  86. package/dist/components/timeline-band.js +5 -0
  87. package/dist/components/venue-events-block.d.ts +143 -0
  88. package/dist/components/venue-events-block.js +222 -0
  89. package/dist/components/weekend-panel.d.ts +44 -0
  90. package/dist/components/weekend-panel.js +231 -0
  91. package/package.json +1 -1
  92. package/src/components/card.tsx +44 -1
  93. package/src/components/category-deck.stories.tsx +96 -0
  94. package/src/components/category-deck.tsx +227 -0
  95. package/src/components/concept-card.stories.tsx +80 -0
  96. package/src/components/concept-card.tsx +143 -0
  97. package/src/components/coverflow.stories.tsx +240 -0
  98. package/src/components/coverflow.test.tsx +193 -0
  99. package/src/components/coverflow.tsx +550 -0
  100. package/src/components/day-rail-chip.stories.tsx +145 -0
  101. package/src/components/day-rail-chip.tsx +201 -0
  102. package/src/components/drift-rail.stories.tsx +92 -0
  103. package/src/components/drift-rail.tsx +86 -0
  104. package/src/components/event-card.stories.tsx +248 -0
  105. package/src/components/event-card.test.tsx +177 -0
  106. package/src/components/event-card.tsx +321 -0
  107. package/src/components/event-compact-row.stories.tsx +221 -0
  108. package/src/components/event-compact-row.tsx +268 -0
  109. package/src/components/event-day-header.stories.tsx +124 -0
  110. package/src/components/event-day-header.tsx +180 -0
  111. package/src/components/event-day-separator.stories.tsx +70 -0
  112. package/src/components/event-day-separator.tsx +95 -0
  113. package/src/components/event-detail-panel.stories.tsx +191 -0
  114. package/src/components/event-detail-panel.tsx +360 -0
  115. package/src/components/event-hub-hero.stories.tsx +66 -0
  116. package/src/components/event-hub-hero.tsx +110 -0
  117. package/src/components/event-index-row.stories.tsx +116 -0
  118. package/src/components/event-index-row.tsx +181 -0
  119. package/src/components/event-list-row-wide.stories.tsx +204 -0
  120. package/src/components/event-list-row-wide.tsx +386 -0
  121. package/src/components/event-list-row.stories.tsx +159 -0
  122. package/src/components/event-list-row.tsx +335 -0
  123. package/src/components/event-poster-fallback.stories.tsx +52 -0
  124. package/src/components/event-poster-fallback.tsx +31 -0
  125. package/src/components/event-types.ts +133 -0
  126. package/src/components/events-empty-state.stories.tsx +59 -0
  127. package/src/components/events-empty-state.tsx +131 -0
  128. package/src/components/facet-group.stories.tsx +247 -0
  129. package/src/components/facet-group.test.tsx +225 -0
  130. package/src/components/facet-group.tsx +352 -0
  131. package/src/components/featured-rail-item.stories.tsx +86 -0
  132. package/src/components/featured-rail-item.tsx +153 -0
  133. package/src/components/hour-band.stories.tsx +159 -0
  134. package/src/components/hour-band.tsx +126 -0
  135. package/src/components/hour-group.stories.tsx +100 -0
  136. package/src/components/hour-group.tsx +124 -0
  137. package/src/components/poster-stack.stories.tsx +68 -0
  138. package/src/components/poster-stack.tsx +155 -0
  139. package/src/components/poster-tape.stories.tsx +70 -0
  140. package/src/components/poster-tape.tsx +122 -0
  141. package/src/components/poster-wall.stories.tsx +95 -0
  142. package/src/components/poster-wall.tsx +220 -0
  143. package/src/components/quiet-stretch.stories.tsx +62 -0
  144. package/src/components/quiet-stretch.tsx +115 -0
  145. package/src/components/section-header.stories.tsx +70 -0
  146. package/src/components/section-header.tsx +134 -0
  147. package/src/components/segmented-nav.stories.tsx +118 -0
  148. package/src/components/segmented-nav.tsx +113 -0
  149. package/src/components/skeleton.tsx +18 -0
  150. package/src/components/tag.tsx +11 -1
  151. package/src/components/timeline-band.stories.tsx +206 -0
  152. package/src/components/timeline-band.tsx +207 -0
  153. package/src/components/venue-events-block.stories.tsx +216 -0
  154. package/src/components/venue-events-block.tsx +408 -0
  155. package/src/components/weekend-panel.stories.tsx +92 -0
  156. package/src/components/weekend-panel.tsx +322 -0
  157. package/src/globals.css +19 -0
@@ -0,0 +1,170 @@
1
+ import { textVariants } from './chunk-7BWTYWM3.js';
2
+ import { cn } from './chunk-FEK5XGZW.js';
3
+ import { __objRest, __spreadValues } from './chunk-3GWWZKX7.js';
4
+ import * as React from 'react';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ var cardVariants = cva(
9
+ "rounded-3xl text-card-foreground transition-[background-color,border-color] duration-[var(--duration-quick)] ease-[var(--ease-standard)]",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ surface: "bg-card border border-border",
14
+ glass: "glass",
15
+ outline: "bg-transparent border border-border",
16
+ muted: "bg-muted border border-transparent",
17
+ // `surface` PLUS elevation. The border is NOT replaced, and that is the
18
+ // whole design of these two.
19
+ //
20
+ // In light mode `--card` is pure white on a 0.986 ground — 1.04:1, a
21
+ // five-in-255 step — so a plain surface is defined by its 1.32:1
22
+ // hairline alone. That is proportionate under a pill and invisible under
23
+ // a panel, which is what "this looks flat" means here: there is no z.
24
+ //
25
+ // But dropping the border to go shadow-only breaks both themes. Every
26
+ // elevation token in this system is downward-offset, so a white
27
+ // shadow-only box has no defined TOP edge on a near-white page and
28
+ // reads as half-drawn. And on the 0.155 dark canvas the shadow is
29
+ // nearly invisible, so `--border` is the only thing left describing the
30
+ // box. The border IS the dark-mode fallback, which is why neither
31
+ // variant needs a `dark:` branch.
32
+ elevated: "bg-card border border-border shadow-[var(--shadow-card)]",
33
+ // The same recipe at panel scale — see `--shadow-panel` for why a
34
+ // bigger box does not simply take the card shadow. Resting elevation
35
+ // only: deliberately absent from `compoundVariants` below, because a
36
+ // several-hundred-pixel slab that translates under the cursor is a
37
+ // wobble rather than a lift. A panel that size delegates interaction to
38
+ // its children.
39
+ elevatedPanel: "bg-card border border-border shadow-[var(--shadow-panel)]"
40
+ },
41
+ size: {
42
+ sm: "[&_[data-slot=card-header]]:p-4 [&_[data-slot=card-content]]:p-4 [&_[data-slot=card-content]]:pt-0 [&_[data-slot=card-footer]]:p-4 [&_[data-slot=card-footer]]:pt-0",
43
+ default: "[&_[data-slot=card-header]]:p-6 [&_[data-slot=card-content]]:p-6 [&_[data-slot=card-content]]:pt-0 [&_[data-slot=card-footer]]:p-6 [&_[data-slot=card-footer]]:pt-0",
44
+ lg: "[&_[data-slot=card-header]]:p-8 [&_[data-slot=card-content]]:p-8 [&_[data-slot=card-content]]:pt-0 [&_[data-slot=card-footer]]:p-8 [&_[data-slot=card-footer]]:pt-0"
45
+ },
46
+ // Interactive variant follows v1.0 `press-response` archetype:
47
+ // hover lift via shadow + translate (200ms), press scale-down (instant).
48
+ //
49
+ // The hover SHADOW is not here — it lives in `compoundVariants` below, so
50
+ // it can be expressed relative to the resting elevation. `box-shadow` is
51
+ // a single property, so a flat `hover:shadow-md` REPLACES a resting
52
+ // shadow rather than stepping up from it: an `elevated` card would
53
+ // translate upward while its shadow got tighter, which is physically
54
+ // backwards and reads as a flicker.
55
+ interactive: {
56
+ true: "cursor-pointer transition-[transform,border-color,box-shadow] duration-[var(--duration-quick)] ease-[var(--ease-standard)] hover:border-primary/40 hover:-translate-y-0.5 active:scale-[0.97] active:duration-[var(--duration-instant)] motion-reduce:hover:translate-y-0 motion-reduce:active:scale-100",
57
+ false: ""
58
+ }
59
+ },
60
+ // The first four reproduce the previous `hover:shadow-md` exactly; only
61
+ // `elevated` is new. `elevatedPanel` is absent on purpose — see its note.
62
+ compoundVariants: [
63
+ { variant: "surface", interactive: true, class: "hover:shadow-md" },
64
+ { variant: "glass", interactive: true, class: "hover:shadow-md" },
65
+ { variant: "outline", interactive: true, class: "hover:shadow-md" },
66
+ { variant: "muted", interactive: true, class: "hover:shadow-md" },
67
+ {
68
+ variant: "elevated",
69
+ interactive: true,
70
+ class: "hover:shadow-[var(--shadow-card-hover)]"
71
+ }
72
+ ],
73
+ defaultVariants: {
74
+ variant: "surface",
75
+ size: "default",
76
+ interactive: false
77
+ }
78
+ }
79
+ );
80
+ var Card = React.forwardRef((_a, ref) => {
81
+ var _b = _a, { className, variant, size, interactive } = _b, props = __objRest(_b, ["className", "variant", "size", "interactive"]);
82
+ return /* @__PURE__ */ jsx(
83
+ "div",
84
+ __spreadValues({
85
+ ref,
86
+ "data-slot": "card",
87
+ className: cn(cardVariants({ variant, size, interactive }), className)
88
+ }, props)
89
+ );
90
+ });
91
+ Card.displayName = "Card";
92
+ var CardHeader = React.forwardRef(
93
+ (_a, ref) => {
94
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
95
+ return /* @__PURE__ */ jsx(
96
+ "div",
97
+ __spreadValues({
98
+ ref,
99
+ "data-slot": "card-header",
100
+ className: cn("flex flex-col space-y-1.5 p-6", className)
101
+ }, props)
102
+ );
103
+ }
104
+ );
105
+ CardHeader.displayName = "CardHeader";
106
+ var CardTitle = React.forwardRef(
107
+ (_a, ref) => {
108
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
109
+ return /* @__PURE__ */ jsx(
110
+ "div",
111
+ __spreadValues({
112
+ ref,
113
+ "data-slot": "card-title",
114
+ className: cn(textVariants({ variant: "h4", wrap: "balance" }), className)
115
+ }, props)
116
+ );
117
+ }
118
+ );
119
+ CardTitle.displayName = "CardTitle";
120
+ var CardDescription = React.forwardRef(
121
+ (_a, ref) => {
122
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
123
+ return /* @__PURE__ */ jsx(
124
+ "div",
125
+ __spreadValues({
126
+ ref,
127
+ "data-slot": "card-description",
128
+ className: cn("text-sm", textVariants({ color: "muted", wrap: "pretty" }), className)
129
+ }, props)
130
+ );
131
+ }
132
+ );
133
+ CardDescription.displayName = "CardDescription";
134
+ var CardContent = React.forwardRef(
135
+ (_a, ref) => {
136
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
137
+ return /* @__PURE__ */ jsx("div", __spreadValues({ ref, "data-slot": "card-content", className: cn("p-6 pt-0", className) }, props));
138
+ }
139
+ );
140
+ CardContent.displayName = "CardContent";
141
+ var CardAction = React.forwardRef(
142
+ (_a, ref) => {
143
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
144
+ return /* @__PURE__ */ jsx(
145
+ "div",
146
+ __spreadValues({
147
+ ref,
148
+ "data-slot": "card-action",
149
+ className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className)
150
+ }, props)
151
+ );
152
+ }
153
+ );
154
+ CardAction.displayName = "CardAction";
155
+ var CardFooter = React.forwardRef(
156
+ (_a, ref) => {
157
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
158
+ return /* @__PURE__ */ jsx(
159
+ "div",
160
+ __spreadValues({
161
+ ref,
162
+ "data-slot": "card-footer",
163
+ className: cn("flex items-center p-6 pt-0", className)
164
+ }, props)
165
+ );
166
+ }
167
+ );
168
+ CardFooter.displayName = "CardFooter";
169
+
170
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants };
@@ -1,6 +1,6 @@
1
- import { Tag } from './chunk-VBA45GLP.js';
2
- import { Separator } from './chunk-WSRWFA6K.js';
3
1
  import { PlaceScheduleWeek } from './chunk-VG3PND3D.js';
2
+ import { Separator } from './chunk-WSRWFA6K.js';
3
+ import { Tag } from './chunk-ZDAHKI3A.js';
4
4
  import { Text } from './chunk-7BWTYWM3.js';
5
5
  import { cn } from './chunk-FEK5XGZW.js';
6
6
  import { __spreadProps, __spreadValues } from './chunk-3GWWZKX7.js';
@@ -15,10 +15,20 @@ var tagVariants = cva(
15
15
  success: "border-success/30 bg-success/10 text-success",
16
16
  warning: "border-warning/30 bg-warning/10 text-warning",
17
17
  destructive: "border-destructive/30 bg-destructive/10 text-destructive",
18
- outline: "border-border bg-transparent text-foreground"
18
+ outline: "border-border bg-transparent text-foreground",
19
+ /**
20
+ * Decorative metadata — a tag the reader scans past, not one that
21
+ * labels a state. `outline` at full `text-foreground` is too loud
22
+ * repeated a dozen times down a list, and `default`'s `bg-muted` fill
23
+ * is reserved: in the event row family a FILLED chip means live.
24
+ */
25
+ quiet: "border-border bg-transparent text-muted-foreground"
19
26
  },
20
27
  size: {
21
- sm: "h-5 px-2 text-[10px]",
28
+ // 22px/11px, matching the event row family's chip. 10px was the
29
+ // smallest type in the package and below the floor used everywhere
30
+ // else; there is no surface that wants it.
31
+ sm: "h-[22px] px-2 text-[11px]",
22
32
  default: "h-6 px-2.5",
23
33
  lg: "h-7 px-3 text-sm"
24
34
  }
@@ -3,10 +3,10 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const alertVariants: (props?: ({
6
- variant?: "default" | "destructive" | "success" | "warning" | null | undefined;
6
+ variant?: "default" | "destructive" | "warning" | "success" | null | undefined;
7
7
  } & class_variance_authority_types.ClassProp) | undefined) => string;
8
8
  declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
9
- variant?: "default" | "destructive" | "success" | "warning" | null | undefined;
9
+ variant?: "default" | "destructive" | "warning" | "success" | null | undefined;
10
10
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
11
11
  declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
12
12
  declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
@@ -4,7 +4,7 @@ import * as React from 'react';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
 
6
6
  declare const badgeVariants: (props?: ({
7
- variant?: "default" | "destructive" | "outline" | "secondary" | "glass" | "overlay" | "brown" | "success" | "warning" | null | undefined;
7
+ variant?: "default" | "destructive" | "warning" | "success" | "outline" | "secondary" | "glass" | "overlay" | "brown" | null | undefined;
8
8
  live?: boolean | null | undefined;
9
9
  } & class_variance_authority_types.ClassProp) | undefined) => string;
10
10
  interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | "glass" | "overlay" | "brown" | "antagonist" | null | undefined;
6
+ variant?: "default" | "destructive" | "link" | "outline" | "secondary" | "ghost" | "glass" | "overlay" | "brown" | "antagonist" | null | undefined;
7
7
  size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
8
8
  fullWidth?: boolean | null | undefined;
9
9
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -3,12 +3,12 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const cardVariants: (props?: ({
6
- variant?: "outline" | "glass" | "muted" | "surface" | null | undefined;
6
+ variant?: "muted" | "outline" | "glass" | "surface" | "elevated" | "elevatedPanel" | null | undefined;
7
7
  size?: "default" | "sm" | "lg" | null | undefined;
8
8
  interactive?: boolean | null | undefined;
9
9
  } & class_variance_authority_types.ClassProp) | undefined) => string;
10
10
  declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
11
- variant?: "outline" | "glass" | "muted" | "surface" | null | undefined;
11
+ variant?: "muted" | "outline" | "glass" | "surface" | "elevated" | "elevatedPanel" | null | undefined;
12
12
  size?: "default" | "sm" | "lg" | null | undefined;
13
13
  interactive?: boolean | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
@@ -1,127 +1,4 @@
1
- import { textVariants } from '../chunk-7BWTYWM3.js';
2
- import { cn } from '../chunk-FEK5XGZW.js';
3
- import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
4
- import * as React from 'react';
5
- import { cva } from 'class-variance-authority';
6
- import { jsx } from 'react/jsx-runtime';
7
-
8
- var cardVariants = cva(
9
- "rounded-3xl text-card-foreground transition-[background-color,border-color] duration-[var(--duration-quick)] ease-[var(--ease-standard)]",
10
- {
11
- variants: {
12
- variant: {
13
- surface: "bg-card border border-border",
14
- glass: "glass",
15
- outline: "bg-transparent border border-border",
16
- muted: "bg-muted border border-transparent"
17
- },
18
- size: {
19
- sm: "[&_[data-slot=card-header]]:p-4 [&_[data-slot=card-content]]:p-4 [&_[data-slot=card-content]]:pt-0 [&_[data-slot=card-footer]]:p-4 [&_[data-slot=card-footer]]:pt-0",
20
- default: "[&_[data-slot=card-header]]:p-6 [&_[data-slot=card-content]]:p-6 [&_[data-slot=card-content]]:pt-0 [&_[data-slot=card-footer]]:p-6 [&_[data-slot=card-footer]]:pt-0",
21
- lg: "[&_[data-slot=card-header]]:p-8 [&_[data-slot=card-content]]:p-8 [&_[data-slot=card-content]]:pt-0 [&_[data-slot=card-footer]]:p-8 [&_[data-slot=card-footer]]:pt-0"
22
- },
23
- // Interactive variant follows v1.0 `press-response` archetype:
24
- // hover lift via shadow + translate (200ms), press scale-down (instant).
25
- interactive: {
26
- true: "cursor-pointer transition-[transform,border-color,box-shadow] duration-[var(--duration-quick)] ease-[var(--ease-standard)] hover:border-primary/40 hover:-translate-y-0.5 hover:shadow-md active:scale-[0.97] active:duration-[var(--duration-instant)] motion-reduce:hover:translate-y-0 motion-reduce:active:scale-100",
27
- false: ""
28
- }
29
- },
30
- defaultVariants: {
31
- variant: "surface",
32
- size: "default",
33
- interactive: false
34
- }
35
- }
36
- );
37
- var Card = React.forwardRef((_a, ref) => {
38
- var _b = _a, { className, variant, size, interactive } = _b, props = __objRest(_b, ["className", "variant", "size", "interactive"]);
39
- return /* @__PURE__ */ jsx(
40
- "div",
41
- __spreadValues({
42
- ref,
43
- "data-slot": "card",
44
- className: cn(cardVariants({ variant, size, interactive }), className)
45
- }, props)
46
- );
47
- });
48
- Card.displayName = "Card";
49
- var CardHeader = React.forwardRef(
50
- (_a, ref) => {
51
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
52
- return /* @__PURE__ */ jsx(
53
- "div",
54
- __spreadValues({
55
- ref,
56
- "data-slot": "card-header",
57
- className: cn("flex flex-col space-y-1.5 p-6", className)
58
- }, props)
59
- );
60
- }
61
- );
62
- CardHeader.displayName = "CardHeader";
63
- var CardTitle = React.forwardRef(
64
- (_a, ref) => {
65
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
66
- return /* @__PURE__ */ jsx(
67
- "div",
68
- __spreadValues({
69
- ref,
70
- "data-slot": "card-title",
71
- className: cn(textVariants({ variant: "h4", wrap: "balance" }), className)
72
- }, props)
73
- );
74
- }
75
- );
76
- CardTitle.displayName = "CardTitle";
77
- var CardDescription = React.forwardRef(
78
- (_a, ref) => {
79
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
80
- return /* @__PURE__ */ jsx(
81
- "div",
82
- __spreadValues({
83
- ref,
84
- "data-slot": "card-description",
85
- className: cn("text-sm", textVariants({ color: "muted", wrap: "pretty" }), className)
86
- }, props)
87
- );
88
- }
89
- );
90
- CardDescription.displayName = "CardDescription";
91
- var CardContent = React.forwardRef(
92
- (_a, ref) => {
93
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
94
- return /* @__PURE__ */ jsx("div", __spreadValues({ ref, "data-slot": "card-content", className: cn("p-6 pt-0", className) }, props));
95
- }
96
- );
97
- CardContent.displayName = "CardContent";
98
- var CardAction = React.forwardRef(
99
- (_a, ref) => {
100
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
101
- return /* @__PURE__ */ jsx(
102
- "div",
103
- __spreadValues({
104
- ref,
105
- "data-slot": "card-action",
106
- className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className)
107
- }, props)
108
- );
109
- }
110
- );
111
- CardAction.displayName = "CardAction";
112
- var CardFooter = React.forwardRef(
113
- (_a, ref) => {
114
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
115
- return /* @__PURE__ */ jsx(
116
- "div",
117
- __spreadValues({
118
- ref,
119
- "data-slot": "card-footer",
120
- className: cn("flex items-center p-6 pt-0", className)
121
- }, props)
122
- );
123
- }
124
- );
125
- CardFooter.displayName = "CardFooter";
126
-
127
- export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants };
1
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants } from '../chunk-UXWAOISG.js';
2
+ import '../chunk-7BWTYWM3.js';
3
+ import '../chunk-FEK5XGZW.js';
4
+ import '../chunk-3GWWZKX7.js';
@@ -0,0 +1,50 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ type CategoryDeckPoster = {
5
+ src?: string;
6
+ alt?: string;
7
+ /**
8
+ * Rendered in the card instead of an `<img>`. Wins over `src`.
9
+ *
10
+ * The deck was built for event posters, where every card is a photograph.
11
+ * The menu hub fans the same deck over dish categories, and that app renders
12
+ * no menu-item photography on card surfaces — it draws a tinted colour field
13
+ * carrying the item's name. Without a slot, those decks fanned four empty
14
+ * `bg-muted` blocks.
15
+ *
16
+ * Same escape hatch, and the same name-and-precedence rule, as
17
+ * `FeaturedRailItemProps.fallback` and `PosterTapeItem.fallback` — except
18
+ * those two are fallbacks shown when a poster is ABSENT, while this one is a
19
+ * deliberate replacement. Hence `content`, not `fallback`: a caller passing
20
+ * it is choosing what the card is, not what it degrades to.
21
+ */
22
+ content?: React.ReactNode;
23
+ };
24
+ type CategoryDeckLinkProps = {
25
+ href: string;
26
+ className?: string;
27
+ children: React.ReactNode;
28
+ onClick?: (mouseEvent: React.MouseEvent) => void;
29
+ };
30
+ type CategoryDeckProps = {
31
+ name: string;
32
+ /** Caller-composed, e.g. "32 events · /petreceri". */
33
+ meta: string;
34
+ /** Up to four posters, fanned back to front. A poster with neither `content`
35
+ * nor `src` renders a placeholder block. */
36
+ posters: CategoryDeckPoster[];
37
+ href?: string;
38
+ /** Defaults to a plain `<a>`. Pass `next/link` in a Next app. */
39
+ linkComponent?: React.ComponentType<CategoryDeckLinkProps>;
40
+ onClick?: (mouseEvent: React.MouseEvent) => void;
41
+ className?: string;
42
+ };
43
+ declare function CategoryDeck({ name, meta, posters, href, linkComponent: LinkComponent, onClick, className, }: CategoryDeckProps): react_jsx_runtime.JSX.Element;
44
+ type CategoryDeckSkeletonProps = {
45
+ className?: string;
46
+ };
47
+ /** The deck's resting layout — the fan sits at its rest transform, never spread. */
48
+ declare function CategoryDeckSkeleton({ className }: CategoryDeckSkeletonProps): react_jsx_runtime.JSX.Element;
49
+
50
+ export { CategoryDeck, type CategoryDeckLinkProps, type CategoryDeckPoster, type CategoryDeckProps, CategoryDeckSkeleton, type CategoryDeckSkeletonProps };
@@ -0,0 +1,128 @@
1
+ import { Skeleton } from '../chunk-QXHMPJ35.js';
2
+ import { cn } from '../chunk-FEK5XGZW.js';
3
+ import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
4
+ import { ChevronRight } from 'lucide-react';
5
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
6
+
7
+ var DECK_POSTER_COUNT = 4;
8
+ var DECK_TRANSITION = "transition-transform duration-[400ms] ease-[cubic-bezier(0.2,0.8,0.2,1)] motion-reduce:transition-none";
9
+ var DECK_CARD_TRANSFORMS = [
10
+ {
11
+ rest: "[transform:translateX(-50%)_rotate(-9deg)_translateX(-26px)]",
12
+ spread: "group-hover:[transform:translateX(-50%)_rotate(-14deg)_translateX(-64px)_translateY(-6px)] group-focus-visible:[transform:translateX(-50%)_rotate(-14deg)_translateX(-64px)_translateY(-6px)]",
13
+ z: "z-0"
14
+ },
15
+ {
16
+ rest: "[transform:translateX(-50%)_rotate(-3deg)_translateX(-9px)]",
17
+ spread: "group-hover:[transform:translateX(-50%)_rotate(-5deg)_translateX(-22px)_translateY(-10px)] group-focus-visible:[transform:translateX(-50%)_rotate(-5deg)_translateX(-22px)_translateY(-10px)]",
18
+ z: "z-[1]"
19
+ },
20
+ {
21
+ rest: "[transform:translateX(-50%)_rotate(3deg)_translateX(9px)]",
22
+ spread: "group-hover:[transform:translateX(-50%)_rotate(5deg)_translateX(22px)_translateY(-10px)] group-focus-visible:[transform:translateX(-50%)_rotate(5deg)_translateX(22px)_translateY(-10px)]",
23
+ z: "z-[1]"
24
+ },
25
+ {
26
+ rest: "[transform:translateX(-50%)_rotate(9deg)_translateX(26px)]",
27
+ spread: "group-hover:[transform:translateX(-50%)_rotate(14deg)_translateX(64px)_translateY(-6px)] group-focus-visible:[transform:translateX(-50%)_rotate(14deg)_translateX(64px)_translateY(-6px)]",
28
+ z: "z-[2]"
29
+ }
30
+ ];
31
+ function DefaultLink(_a) {
32
+ var _b = _a, { href } = _b, props = __objRest(_b, ["href"]);
33
+ return /* @__PURE__ */ jsx("a", __spreadValues({ href }, props));
34
+ }
35
+ function CategoryDeck({
36
+ name,
37
+ meta,
38
+ posters,
39
+ href,
40
+ linkComponent: LinkComponent = DefaultLink,
41
+ onClick,
42
+ className
43
+ }) {
44
+ const slots = Array.from(
45
+ { length: DECK_POSTER_COUNT },
46
+ (_, index) => {
47
+ var _a;
48
+ return (_a = posters[index]) != null ? _a : {};
49
+ }
50
+ );
51
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
52
+ /* @__PURE__ */ jsx("div", { className: "relative h-[150px] sm:h-[186px]", "aria-hidden": true, children: slots.map((poster, index) => {
53
+ var _a;
54
+ const transform = DECK_CARD_TRANSFORMS[index];
55
+ return /* @__PURE__ */ jsx(
56
+ "div",
57
+ {
58
+ className: cn(
59
+ "absolute left-1/2 top-0 aspect-[4/5] w-24 overflow-hidden rounded-[10px] bg-muted",
60
+ "shadow-[0_10px_26px_color-mix(in_oklch,var(--foreground)_18%,transparent)]",
61
+ "sm:w-[120px]",
62
+ transform.rest,
63
+ transform.spread,
64
+ transform.z,
65
+ DECK_TRANSITION
66
+ ),
67
+ children: poster.content ? poster.content : poster.src ? (
68
+ // eslint-disable-next-line @next/next/no-img-element
69
+ /* @__PURE__ */ jsx(
70
+ "img",
71
+ {
72
+ src: poster.src,
73
+ alt: (_a = poster.alt) != null ? _a : "",
74
+ loading: "lazy",
75
+ decoding: "async",
76
+ className: "h-full w-full object-cover"
77
+ }
78
+ )
79
+ ) : /* @__PURE__ */ jsx("div", { className: "h-full w-full bg-muted" })
80
+ },
81
+ index
82
+ );
83
+ }) }),
84
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[9px] pt-3.5", children: [
85
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
86
+ /* @__PURE__ */ jsx("div", { className: "truncate text-[14.5px] font-extrabold tracking-[-0.015em] sm:text-base", children: name }),
87
+ /* @__PURE__ */ jsx("div", { className: "truncate font-mono text-[11.5px] text-muted-foreground", children: meta })
88
+ ] }),
89
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto h-4 w-4 shrink-0 text-muted-foreground", "aria-hidden": true })
90
+ ] })
91
+ ] });
92
+ const rootClasses = cn(
93
+ "group flex min-w-0 flex-col text-left",
94
+ (href || onClick) && "cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-xl",
95
+ className
96
+ );
97
+ if (href) {
98
+ return /* @__PURE__ */ jsx(LinkComponent, { href, className: rootClasses, onClick, children: body });
99
+ }
100
+ if (onClick) {
101
+ return /* @__PURE__ */ jsx("button", { type: "button", className: rootClasses, onClick, children: body });
102
+ }
103
+ return /* @__PURE__ */ jsx("div", { className: rootClasses, children: body });
104
+ }
105
+ function CategoryDeckSkeleton({ className }) {
106
+ return /* @__PURE__ */ jsxs("div", { "aria-hidden": "true", className: cn("flex min-w-0 flex-col", className), children: [
107
+ /* @__PURE__ */ jsx("div", { className: "relative h-[150px] sm:h-[186px]", children: DECK_CARD_TRANSFORMS.map((transform, index) => /* @__PURE__ */ jsx(
108
+ Skeleton,
109
+ {
110
+ className: cn(
111
+ "absolute left-1/2 top-0 aspect-[4/5] w-24 rounded-[10px] sm:w-[120px]",
112
+ transform.rest,
113
+ transform.z
114
+ )
115
+ },
116
+ index
117
+ )) }),
118
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[9px] pt-3.5", children: [
119
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
120
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-[14.5px] w-24 sm:h-4 sm:w-28" }),
121
+ /* @__PURE__ */ jsx(Skeleton, { className: "mt-1.5 h-[11.5px] w-32" })
122
+ ] }),
123
+ /* @__PURE__ */ jsx(Skeleton, { className: "ml-auto h-4 w-4 shrink-0 rounded-full" })
124
+ ] })
125
+ ] });
126
+ }
127
+
128
+ export { CategoryDeck, CategoryDeckSkeleton };
@@ -4,11 +4,11 @@ import { DialogProps } from '@radix-ui/react-dialog';
4
4
 
5
5
  declare const Command: React.ForwardRefExoticComponent<Omit<{
6
6
  children?: React.ReactNode;
7
- } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
7
+ } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
8
8
  ref?: React.Ref<HTMLDivElement>;
9
9
  } & {
10
10
  asChild?: boolean;
11
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild"> & {
11
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key"> & {
12
12
  label?: string;
13
13
  shouldFilter?: boolean;
14
14
  filter?: (value: string, search: string, keywords?: string[]) => number;
@@ -28,61 +28,61 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
28
28
  ref?: React.Ref<HTMLInputElement>;
29
29
  } & {
30
30
  asChild?: boolean;
31
- }, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
31
+ }, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "type" | "value"> & {
32
32
  value?: string;
33
33
  onValueChange?: (search: string) => void;
34
34
  } & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
35
35
  declare const CommandList: React.ForwardRefExoticComponent<Omit<{
36
36
  children?: React.ReactNode;
37
- } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
37
+ } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
38
38
  ref?: React.Ref<HTMLDivElement>;
39
39
  } & {
40
40
  asChild?: boolean;
41
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild"> & {
41
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key"> & {
42
42
  label?: string;
43
43
  } & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
44
44
  declare const CommandEmpty: React.ForwardRefExoticComponent<Omit<{
45
45
  children?: React.ReactNode;
46
- } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
46
+ } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
47
47
  ref?: React.Ref<HTMLDivElement>;
48
48
  } & {
49
49
  asChild?: boolean;
50
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
50
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
51
51
  declare const CommandLoading: React.ForwardRefExoticComponent<Omit<{
52
52
  children?: React.ReactNode;
53
- } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
53
+ } & Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
54
54
  ref?: React.Ref<HTMLDivElement>;
55
55
  } & {
56
56
  asChild?: boolean;
57
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild"> & {
57
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key"> & {
58
58
  progress?: number;
59
59
  label?: string;
60
60
  } & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
61
61
  declare const CommandGroup: React.ForwardRefExoticComponent<Omit<{
62
62
  children?: React.ReactNode;
63
- } & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
63
+ } & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
64
64
  ref?: React.Ref<HTMLDivElement>;
65
65
  } & {
66
66
  asChild?: boolean;
67
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild">, "heading" | "value"> & {
67
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key">, "heading" | "value"> & {
68
68
  heading?: React.ReactNode;
69
69
  value?: string;
70
70
  forceMount?: boolean;
71
71
  } & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
72
- declare const CommandSeparator: React.ForwardRefExoticComponent<Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
72
+ declare const CommandSeparator: React.ForwardRefExoticComponent<Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
73
73
  ref?: React.Ref<HTMLDivElement>;
74
74
  } & {
75
75
  asChild?: boolean;
76
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild"> & {
76
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key"> & {
77
77
  alwaysRender?: boolean;
78
78
  } & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
79
79
  declare const CommandItem: React.ForwardRefExoticComponent<Omit<{
80
80
  children?: React.ReactNode;
81
- } & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "key" | keyof React.HTMLAttributes<HTMLDivElement>> & {
81
+ } & Omit<Pick<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | "key"> & {
82
82
  ref?: React.Ref<HTMLDivElement>;
83
83
  } & {
84
84
  asChild?: boolean;
85
- }, "key" | keyof React.HTMLAttributes<HTMLDivElement> | "asChild">, "onSelect" | "disabled" | "value"> & {
85
+ }, keyof React.HTMLAttributes<HTMLDivElement> | "asChild" | "key">, "onSelect" | "disabled" | "value"> & {
86
86
  disabled?: boolean;
87
87
  onSelect?: (value: string) => void;
88
88
  value?: string;