@bearmenu/ui 0.8.10 → 0.8.11
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-UKBNQO6Q.js → chunk-2CXU5WZO.js} +1 -1
- package/dist/{chunk-62ES6N32.js → chunk-43RC7MHY.js} +1 -1
- package/dist/{chunk-Q6QH52LJ.js → chunk-6TEEY5YA.js} +2 -2
- package/dist/{chunk-UDN7UHJW.js → chunk-H3ZZDX5L.js} +2 -1
- package/dist/{chunk-H3BV4VAG.js → chunk-JS3EINZD.js} +2 -2
- package/dist/{chunk-TH6W2PWG.js → chunk-UDTG3RSE.js} +1 -1
- package/dist/{chunk-SY6RV476.js → chunk-WCTHZKU7.js} +10 -21
- package/dist/components/alert-dialog.js +1 -1
- package/dist/components/alert.d.ts +2 -2
- package/dist/components/avatar.d.ts +3 -3
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/button.d.ts +2 -2
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/card.d.ts +4 -4
- package/dist/components/carousel.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command.d.ts +8 -8
- package/dist/components/concept-compare-rail.js +1 -1
- package/dist/components/concept-compare.js +4 -4
- package/dist/components/concept-convergence.js +1 -1
- package/dist/components/date-input.d.ts +1 -1
- package/dist/components/dialog.d.ts +2 -2
- package/dist/components/empty-state.js +1 -1
- package/dist/components/event-detail-panel.js +1 -1
- package/dist/components/event-list-row-wide.js +1 -1
- package/dist/components/filter-category-row.js +1 -1
- package/dist/components/glass-ground.d.ts +26 -31
- package/dist/components/glass-ground.js +1 -1
- package/dist/components/haptic-button.js +1 -1
- package/dist/components/input-group.d.ts +2 -2
- package/dist/components/input.d.ts +1 -1
- package/dist/components/item.d.ts +4 -4
- package/dist/components/kbd.d.ts +2 -2
- package/dist/components/kitchen-dossier.d.ts +7 -7
- package/dist/components/kitchen-dossier.js +6 -7
- package/dist/components/link-button.js +1 -1
- package/dist/components/menu-family-block.d.ts +9 -10
- package/dist/components/menu-family-block.js +2 -4
- package/dist/components/menu-family-card.js +1 -3
- package/dist/components/menu-hub-hero.js +10 -5
- package/dist/components/menu-item.js +3 -3
- package/dist/components/multi-select-combobox.js +2 -2
- package/dist/components/native-select.d.ts +2 -2
- package/dist/components/pagination.js +1 -1
- package/dist/components/photo-ground.d.ts +1 -1
- package/dist/components/place-details-mobile.js +1 -1
- package/dist/components/searchable-select.js +1 -1
- package/dist/components/select.d.ts +1 -1
- package/dist/components/signature-chip.d.ts +2 -2
- package/dist/components/signature-chip.js +2 -2
- package/dist/components/sliding-panels.js +1 -1
- package/dist/components/snap-rail.d.ts +2 -2
- package/dist/components/spinner.d.ts +4 -4
- package/dist/components/tag.d.ts +4 -4
- package/dist/components/text.d.ts +3 -3
- package/dist/components/toggle.d.ts +1 -1
- package/dist/components/top-ranking-entry.js +3 -3
- package/dist/components/venue-quotes.d.ts +1 -1
- package/dist/components/venue-quotes.js +1 -1
- package/dist/components/venue-wall.js +5 -3
- package/dist/components/weekday-theme-banner.js +1 -1
- package/package.json +1 -1
- package/src/components/badge.tsx +1 -1
- package/src/components/button.tsx +2 -2
- package/src/components/concept-compare-rail.tsx +2 -1
- package/src/components/concept-compare.stories.tsx +3 -3
- package/src/components/concept-compare.tsx +10 -5
- package/src/components/glass-ground.tsx +31 -56
- package/src/components/kitchen-dossier.stories.tsx +1 -1
- package/src/components/kitchen-dossier.tsx +15 -16
- package/src/components/menu-family-block.stories.tsx +3 -3
- package/src/components/menu-family-block.tsx +16 -27
- package/src/components/menu-family-card.stories.tsx +2 -2
- package/src/components/menu-family-card.tsx +6 -13
- package/src/components/menu-hub-hero.test.tsx +39 -0
- package/src/components/menu-hub-hero.tsx +17 -5
- package/src/components/photo-ground.tsx +1 -1
- package/src/components/signature-chip.tsx +3 -3
- package/src/components/venue-quotes.stories.tsx +1 -1
- package/src/components/venue-quotes.tsx +4 -2
- package/src/components/venue-wall.tsx +9 -4
- package/src/components/weekday-theme-banner.tsx +1 -1
package/dist/components/kbd.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const kbdVariants: (props?: ({
|
|
6
|
-
size?: "
|
|
6
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
7
7
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
8
8
|
declare const Kbd: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & VariantProps<(props?: ({
|
|
9
|
-
size?: "
|
|
9
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLElement>>;
|
|
11
11
|
declare const KbdGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
|
|
12
12
|
|
|
@@ -10,7 +10,7 @@ import { VenueGradeDimensionKey } from './venue-grade-dimensions.js';
|
|
|
10
10
|
* The hub used to say this three times: a spotlight with everything the
|
|
11
11
|
* digest knows, a ranked row with a grade, a card with the signature dish —
|
|
12
12
|
* and the same kitchen led all three. This is the one card: the venue's
|
|
13
|
-
* photograph clear at the top,
|
|
13
|
+
* photograph clear at the top, an inked caption rising from the foot with
|
|
14
14
|
* the identity (rating, name, type · area · reviews), and under it a PANEL
|
|
15
15
|
* that says the three or four things the reviews established one at a time —
|
|
16
16
|
* the dish it is known for, what people say, the grade — with segments at the
|
|
@@ -23,12 +23,12 @@ import { VenueGradeDimensionKey } from './venue-grade-dimensions.js';
|
|
|
23
23
|
* bands. This is the reverse — the room is the subject and the facts are its
|
|
24
24
|
* caption — which is `GlassGround` at its lightest and smallest: anchored to
|
|
25
25
|
* the CAPTION, not the card, so it covers the identity, the panel and the
|
|
26
|
-
* action plus a short lead above them and nothing else;
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* as a panel and not a hole. The same layout
|
|
31
|
-
* card is wider, not turned on its side.
|
|
26
|
+
* action plus a short lead above them and nothing else; ink that never
|
|
27
|
+
* passes 0.6; a text shadow under the identity doing the rest. Everything
|
|
28
|
+
* above the caption is the photograph, untouched. The panel is a translucent
|
|
29
|
+
* ink pane (no backdrop blur — see `GlassGround` for the measurement that
|
|
30
|
+
* removed it), so its rule reads as a panel and not a hole. The same layout
|
|
31
|
+
* at every width; the desktop card is wider, not turned on its side.
|
|
32
32
|
*
|
|
33
33
|
* ## Two targets, and everything else is "next"
|
|
34
34
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DIMENSION_ORDER, VenueGradeDimensions } from '../chunk-AKQ57NXY.js';
|
|
2
|
-
import { VenueQuotes } from '../chunk-
|
|
2
|
+
import { VenueQuotes } from '../chunk-43RC7MHY.js';
|
|
3
3
|
import { StoryProvider, StorySegments, StoryPanel } from '../chunk-F6FMZJDG.js';
|
|
4
|
-
import { GlassGround } from '../chunk-
|
|
4
|
+
import { GlassGround } from '../chunk-WCTHZKU7.js';
|
|
5
5
|
import { Separator } from '../chunk-WSRWFA6K.js';
|
|
6
6
|
import { PhotoGround, PHOTO_GROUND } from '../chunk-5RWTOT5Y.js';
|
|
7
7
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
@@ -52,7 +52,7 @@ function KitchenDossier({
|
|
|
52
52
|
children: item.name
|
|
53
53
|
}
|
|
54
54
|
) : /* @__PURE__ */ jsx("span", { className: "text-[16px] font-bold leading-tight tracking-[-0.01em] text-white", children: item.name }),
|
|
55
|
-
signature.why && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 font-serif text-[13px]
|
|
55
|
+
signature.why && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 font-serif text-[13px] leading-snug text-white/75", children: signature.why }),
|
|
56
56
|
(firstEntry || mentions > 0) && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
57
57
|
/* @__PURE__ */ jsx(Separator, { className: "my-2.5 via-white/20" }),
|
|
58
58
|
/* @__PURE__ */ jsxs("div", { className: "flex items-end justify-between gap-3", children: [
|
|
@@ -131,7 +131,7 @@ function KitchenDossier({
|
|
|
131
131
|
className: "-mt-1"
|
|
132
132
|
}
|
|
133
133
|
),
|
|
134
|
-
/* @__PURE__ */ jsx("div", { className: "relative min-h-[184px] flex-1", children: labels.openUntil && /* @__PURE__ */ jsxs("span", { className: "absolute left-0 top-3 inline-flex h-[30px] items-center gap-[7px] rounded-full bg-[oklch(0.16_0.012_55_/_0.
|
|
134
|
+
/* @__PURE__ */ jsx("div", { className: "relative min-h-[184px] flex-1", children: labels.openUntil && /* @__PURE__ */ jsxs("span", { className: "absolute left-0 top-3 inline-flex h-[30px] items-center gap-[7px] rounded-full bg-[oklch(0.16_0.012_55_/_0.78)] px-3 text-[11.5px] font-bold text-white", children: [
|
|
135
135
|
/* @__PURE__ */ jsx("i", { className: "h-[7px] w-[7px] rounded-full bg-success", "aria-hidden": true }),
|
|
136
136
|
labels.openUntil
|
|
137
137
|
] }) }),
|
|
@@ -145,8 +145,7 @@ function KitchenDossier({
|
|
|
145
145
|
GlassGround,
|
|
146
146
|
{
|
|
147
147
|
stops: { direction: "to bottom", clear: "0px", full: GLASS_LEAD },
|
|
148
|
-
peak: 0.
|
|
149
|
-
blur: "sm"
|
|
148
|
+
peak: 0.6
|
|
150
149
|
}
|
|
151
150
|
)
|
|
152
151
|
}
|
|
@@ -165,7 +164,7 @@ function KitchenDossier({
|
|
|
165
164
|
StoryPanel,
|
|
166
165
|
{
|
|
167
166
|
parts,
|
|
168
|
-
className: "rounded-[14px] border border-white/10 bg-[oklch(0.16_0.012_55_/_0.
|
|
167
|
+
className: "rounded-[14px] border border-white/10 bg-[oklch(0.16_0.012_55_/_0.62)] p-4"
|
|
169
168
|
}
|
|
170
169
|
),
|
|
171
170
|
action && /* @__PURE__ */ jsx("div", { className: "flex [&>*]:w-full lg:[&>*]:w-auto", children: action })
|
|
@@ -14,17 +14,16 @@ import './place-types.js';
|
|
|
14
14
|
*
|
|
15
15
|
* 1. **The mosaic**, full-bleed, wearing the family's hue through a
|
|
16
16
|
* `mix-blend-color` layer.
|
|
17
|
-
* 2. **
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* 16px type.
|
|
17
|
+
* 2. **An ink gradient** — absent where the photography is the subject, full
|
|
18
|
+
* where the rows begin. This is what buys the contrast. There used to be a
|
|
19
|
+
* masked backdrop-filter under it; it was removed for the measurement
|
|
20
|
+
* recorded in `GlassGround` (73 blur layers cost `/menu` 9 ms per scrolled
|
|
21
|
+
* frame on a phone).
|
|
23
22
|
*
|
|
24
|
-
* On the phone the
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* On the phone the ink runs top to bottom: the name and the action sit on
|
|
24
|
+
* clear photography, the chips and the rows on the inked foot. On desktop the
|
|
25
|
+
* same layers turn ninety degrees — the photo column on the left stays clear,
|
|
26
|
+
* the row column on the right is the inked one. The mosaic
|
|
28
27
|
* runs 3×2 there rather than 2×2, because at 1110px a four-tile grid makes each
|
|
29
28
|
* photograph too big to read as texture.
|
|
30
29
|
*
|
|
@@ -15,7 +15,6 @@ function DefaultLink(_a) {
|
|
|
15
15
|
var MOSAIC_TILES = 6;
|
|
16
16
|
var PHONE_TILES = 4;
|
|
17
17
|
var GROUND = PHOTO_GROUND;
|
|
18
|
-
var FROST = "backdrop-blur-xl [mask-image:linear-gradient(to_bottom,transparent_0%,black_42%)] lg:[mask-image:linear-gradient(to_right,transparent_36%,black_54%)]";
|
|
19
18
|
var INK = "bg-[linear-gradient(to_bottom,oklch(0.16_0.012_55_/_0.42)_0%,oklch(0.16_0.012_55_/_0.6)_30%,oklch(0.16_0.012_55_/_0.9)_48%,oklch(0.16_0.012_55_/_0.96)_100%)] lg:bg-[linear-gradient(to_right,oklch(0.16_0.012_55_/_0.38)_0%,oklch(0.16_0.012_55_/_0.6)_30%,oklch(0.16_0.012_55_/_0.92)_46%,oklch(0.16_0.012_55_/_0.96)_100%)]";
|
|
20
19
|
var TEXT_SCRIM = (
|
|
21
20
|
/* `isolate` + `before:-z-10`: a positioned pseudo-element paints ABOVE the
|
|
@@ -59,18 +58,17 @@ function MenuFamilyBlock({
|
|
|
59
58
|
gradient
|
|
60
59
|
}
|
|
61
60
|
),
|
|
62
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("absolute inset-0", FROST) }),
|
|
63
61
|
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("absolute inset-0", INK) }),
|
|
64
62
|
/* @__PURE__ */ jsxs("div", { className: "relative grid grid-cols-1 lg:grid-cols-[38%_1fr]", children: [
|
|
65
63
|
/* @__PURE__ */ jsxs("div", { className: cn("relative flex flex-col p-3.5 lg:min-h-[320px] lg:justify-end lg:p-5", TEXT_SCRIM), children: [
|
|
66
|
-
overflow > 0 && /* @__PURE__ */ jsx("span", { className: "mb-16 self-end rounded-full bg-[oklch(0.16_0.012_55_/_0.
|
|
64
|
+
overflow > 0 && /* @__PURE__ */ jsx("span", { className: "mb-16 self-end rounded-full bg-[oklch(0.16_0.012_55_/_0.78)] px-2.5 py-1 text-[11px] font-semibold text-white lg:mb-3 lg:self-start", children: labels.more(overflow) }),
|
|
67
65
|
/* @__PURE__ */ jsx("h3", { className: "text-balance font-serif text-[26px] font-semibold leading-tight tracking-[-0.02em] text-white lg:text-[30px]", children: family.name }),
|
|
68
66
|
/* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-[13px] font-medium tabular-nums text-white/70", children: labels.venueUnit(family.venueCount) }),
|
|
69
67
|
/* @__PURE__ */ jsx(
|
|
70
68
|
LinkComponent,
|
|
71
69
|
{
|
|
72
70
|
href: family.href,
|
|
73
|
-
className: "mt-3.5 inline-flex h-10 w-max items-center rounded-full border border-white/20 bg-white/[0.
|
|
71
|
+
className: "mt-3.5 inline-flex h-10 w-max items-center rounded-full border border-white/20 bg-white/[0.16] px-4 text-[13.5px] font-bold text-white transition-colors hover:bg-white/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white motion-reduce:transition-none",
|
|
74
72
|
children: labels.browse
|
|
75
73
|
}
|
|
76
74
|
)
|
|
@@ -11,7 +11,6 @@ function DefaultLink(_a) {
|
|
|
11
11
|
}
|
|
12
12
|
var MOSAIC_CELLS = 4;
|
|
13
13
|
var GROUND = PHOTO_GROUND;
|
|
14
|
-
var FROST = "backdrop-blur-xl [mask-image:linear-gradient(to_bottom,transparent_28%,black_58%)]";
|
|
15
14
|
var INK = "bg-[linear-gradient(to_bottom,oklch(0.16_0.012_55_/_0.78)_0%,oklch(0.16_0.012_55_/_0.5)_34%,oklch(0.16_0.012_55_/_0.86)_62%,oklch(0.16_0.012_55_/_0.96)_100%)]";
|
|
16
15
|
function MenuFamilyCard({
|
|
17
16
|
family,
|
|
@@ -47,7 +46,6 @@ function MenuFamilyCard({
|
|
|
47
46
|
gradient
|
|
48
47
|
}
|
|
49
48
|
),
|
|
50
|
-
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("absolute inset-0 -z-20", FROST) }),
|
|
51
49
|
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("absolute inset-0 -z-10", INK) }),
|
|
52
50
|
/* @__PURE__ */ jsxs("span", { className: "block text-white", children: [
|
|
53
51
|
/* @__PURE__ */ jsx("b", { className: "block text-[34px] font-extrabold leading-none tracking-[-0.03em] tabular-nums", children: family.venue_count }),
|
|
@@ -69,7 +67,7 @@ function MenuFamilyCard({
|
|
|
69
67
|
),
|
|
70
68
|
(_d = family.chips) == null ? void 0 : _d.map((chip) => /* @__PURE__ */ jsx(HueChip, { hue, children: chip.label }, chip.slug))
|
|
71
69
|
] }),
|
|
72
|
-
/* @__PURE__ */ jsx("span", { className: "mt-3.5 inline-flex h-10 items-center rounded-full border border-white/20 bg-white/[0.
|
|
70
|
+
/* @__PURE__ */ jsx("span", { className: "mt-3.5 inline-flex h-10 items-center rounded-full border border-white/20 bg-white/[0.16] px-4 text-[13.5px] font-bold text-white transition-colors group-hover:bg-white/25 motion-reduce:transition-none", children: labels.browse })
|
|
73
71
|
] })
|
|
74
72
|
]
|
|
75
73
|
}
|
|
@@ -3,6 +3,7 @@ import '../chunk-3GWWZKX7.js';
|
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
5
|
var TEXTURE_CELLS = 28;
|
|
6
|
+
var PHONE_CELLS = 6;
|
|
6
7
|
function MenuHubHero({
|
|
7
8
|
kicker,
|
|
8
9
|
kickerIcon,
|
|
@@ -39,9 +40,10 @@ function MenuHubHero({
|
|
|
39
40
|
"div",
|
|
40
41
|
{
|
|
41
42
|
"aria-hidden": true,
|
|
42
|
-
className: "absolute inset-0 grid auto-rows-fr grid-cols-
|
|
43
|
+
className: "absolute inset-0 grid auto-rows-fr grid-cols-3 gap-0.5 lg:grid-cols-7",
|
|
43
44
|
children: Array.from({ length: TEXTURE_CELLS }, (_, cell) => {
|
|
44
45
|
const url = (tileUrls == null ? void 0 : tileUrls.length) ? tileUrls[cell % tileUrls.length] : void 0;
|
|
46
|
+
const phone = cell < PHONE_CELLS ? void 0 : "hidden lg:block";
|
|
45
47
|
return url ? (
|
|
46
48
|
// eslint-disable-next-line @next/next/no-img-element
|
|
47
49
|
/* @__PURE__ */ jsx(
|
|
@@ -51,14 +53,17 @@ function MenuHubHero({
|
|
|
51
53
|
alt: "",
|
|
52
54
|
loading: "lazy",
|
|
53
55
|
decoding: "async",
|
|
54
|
-
className: "h-full w-full object-cover"
|
|
56
|
+
className: cn("h-full w-full object-cover", phone)
|
|
55
57
|
},
|
|
56
58
|
cell
|
|
57
59
|
)
|
|
58
60
|
) : /* @__PURE__ */ jsx(
|
|
59
61
|
"div",
|
|
60
62
|
{
|
|
61
|
-
className:
|
|
63
|
+
className: cn(
|
|
64
|
+
"bg-[repeating-linear-gradient(135deg,oklch(0.6_0.02_55)_0_9px,oklch(0.68_0.016_58)_9px_18px)] opacity-[0.42]",
|
|
65
|
+
phone
|
|
66
|
+
)
|
|
62
67
|
},
|
|
63
68
|
cell
|
|
64
69
|
);
|
|
@@ -71,7 +76,7 @@ function MenuHubHero({
|
|
|
71
76
|
"aria-hidden": true,
|
|
72
77
|
className: cn(
|
|
73
78
|
"absolute inset-0",
|
|
74
|
-
(tileUrls == null ? void 0 : tileUrls.length) || backgroundUrl ? "bg-[linear-gradient(100deg,oklch(0.16_0.012_55_/_0.96)_0%,oklch(0.16_0.012_55_/_0.
|
|
79
|
+
(tileUrls == null ? void 0 : tileUrls.length) || backgroundUrl ? "bg-[linear-gradient(100deg,oklch(0.16_0.012_55_/_0.96)_0%,oklch(0.16_0.012_55_/_0.86)_52%,oklch(0.16_0.012_55_/_0.6)_100%)]" : "bg-[linear-gradient(100deg,oklch(0.18_0.012_55_/_0.95)_0%,oklch(0.18_0.012_55_/_0.72)_52%,oklch(0.18_0.012_55_/_0.3)_100%)]"
|
|
75
80
|
)
|
|
76
81
|
}
|
|
77
82
|
),
|
|
@@ -88,7 +93,7 @@ function MenuHubHero({
|
|
|
88
93
|
/* @__PURE__ */ jsx("div", { className: "mt-[5px] text-xs opacity-[0.72]", children: figure.label })
|
|
89
94
|
] }, figure.label)) }),
|
|
90
95
|
(proof || action) && /* @__PURE__ */ jsxs("div", { className: "mt-auto flex flex-wrap items-center gap-3 pt-5", children: [
|
|
91
|
-
proof && /* @__PURE__ */ jsxs("span", { className: "inline-flex min-h-11 items-center gap-2.5 rounded-full bg-white/
|
|
96
|
+
proof && /* @__PURE__ */ jsxs("span", { className: "inline-flex min-h-11 items-center gap-2.5 rounded-full bg-white/[0.14] px-4 py-2 text-[13px]", children: [
|
|
92
97
|
proofIcon,
|
|
93
98
|
proof
|
|
94
99
|
] }),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { MentionSignal, MenuItem } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { MentionSignal, MenuItem } from '../chunk-UDTG3RSE.js';
|
|
2
|
+
import '../chunk-6TEEY5YA.js';
|
|
3
|
+
import '../chunk-2CXU5WZO.js';
|
|
4
4
|
import '../chunk-FEK5XGZW.js';
|
|
5
5
|
import '../chunk-3GWWZKX7.js';
|
|
@@ -2,9 +2,9 @@ import { Popover, PopoverTrigger, PopoverContent } from '../chunk-66MAPLXS.js';
|
|
|
2
2
|
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../chunk-XNA2INVQ.js';
|
|
3
3
|
import '../chunk-FRPPIXMY.js';
|
|
4
4
|
import { Checkbox } from '../chunk-D5QHEHXJ.js';
|
|
5
|
-
import { Button } from '../chunk-
|
|
5
|
+
import { Button } from '../chunk-JS3EINZD.js';
|
|
6
6
|
import '../chunk-R47NEOSI.js';
|
|
7
|
-
import { Badge } from '../chunk-
|
|
7
|
+
import { Badge } from '../chunk-2CXU5WZO.js';
|
|
8
8
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
9
9
|
import '../chunk-3GWWZKX7.js';
|
|
10
10
|
import * as React from 'react';
|
|
@@ -3,10 +3,10 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const nativeSelectVariants: (props?: ({
|
|
6
|
-
size?: "
|
|
6
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
7
7
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
8
8
|
declare const NativeSelect: React.ForwardRefExoticComponent<Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "size"> & VariantProps<(props?: ({
|
|
9
|
-
size?: "
|
|
9
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLSelectElement>>;
|
|
11
11
|
|
|
12
12
|
export { NativeSelect, nativeSelectVariants };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buttonVariants } from '../chunk-
|
|
1
|
+
import { buttonVariants } from '../chunk-JS3EINZD.js';
|
|
2
2
|
import '../chunk-R47NEOSI.js';
|
|
3
3
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
4
4
|
import { __objRest, __spreadValues, __spreadProps } from '../chunk-3GWWZKX7.js';
|
|
@@ -14,7 +14,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
14
14
|
*
|
|
15
15
|
* It owns the photographs and their colour: the ground, the tiles, the fallback
|
|
16
16
|
* initial, the family's hue and an optional uniform dark overlay. It does NOT
|
|
17
|
-
* own the
|
|
17
|
+
* own the ink — the scrims and bands that carry a card's type run in
|
|
18
18
|
* a different direction on every card (down the family block's phone, across
|
|
19
19
|
* its desktop, in from both ends of the concept card) and are the card's own.
|
|
20
20
|
*
|
|
@@ -3,7 +3,7 @@ import '../chunk-VG3PND3D.js';
|
|
|
3
3
|
import '../chunk-ZDAHKI3A.js';
|
|
4
4
|
import '../chunk-WSRWFA6K.js';
|
|
5
5
|
import { Text } from '../chunk-7BWTYWM3.js';
|
|
6
|
-
import { Badge } from '../chunk-
|
|
6
|
+
import { Badge } from '../chunk-2CXU5WZO.js';
|
|
7
7
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
8
8
|
import '../chunk-3GWWZKX7.js';
|
|
9
9
|
import { useState } from 'react';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Popover, PopoverTrigger, PopoverContent } from '../chunk-66MAPLXS.js';
|
|
2
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-JS3EINZD.js';
|
|
5
5
|
import '../chunk-R47NEOSI.js';
|
|
6
6
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
7
7
|
import '../chunk-3GWWZKX7.js';
|
|
@@ -7,7 +7,7 @@ declare const Select: React.FC<SelectPrimitive.SelectProps>;
|
|
|
7
7
|
declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
8
8
|
declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
|
|
9
9
|
declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
|
|
10
|
-
size?: "
|
|
10
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
11
11
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
|
|
12
12
|
declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
13
|
declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -18,8 +18,8 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
18
18
|
*
|
|
19
19
|
* `surface="image"` is for card covers, where the chip sits over the photo
|
|
20
20
|
* rather than in the caption block. The accent-on-canvas palette has no
|
|
21
|
-
* contrast guarantee over an arbitrary photo, so it swaps to the same
|
|
22
|
-
* fill the place badge uses there and keeps the dashed edge — which is what
|
|
21
|
+
* contrast guarantee over an arbitrary photo, so it swaps to the same solid
|
|
22
|
+
* ink fill the place badge uses there and keeps the dashed edge — which is what
|
|
23
23
|
* says "there is evidence behind this" — in the inverted colour.
|
|
24
24
|
*
|
|
25
25
|
* The label is passed in: the DS owns no translation keys.
|
|
@@ -22,7 +22,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
22
22
|
*/
|
|
23
23
|
declare const snapRailVariants: (props?: ({
|
|
24
24
|
itemWidth?: "sm" | "lg" | "full" | "md" | null | undefined;
|
|
25
|
-
gap?: "
|
|
25
|
+
gap?: "sm" | "default" | null | undefined;
|
|
26
26
|
bleed?: "none" | "page" | "card" | null | undefined;
|
|
27
27
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
28
28
|
type SnapRailProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof snapRailVariants> & {
|
|
@@ -44,7 +44,7 @@ type SnapRailProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof
|
|
|
44
44
|
};
|
|
45
45
|
declare const SnapRail: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
46
46
|
itemWidth?: "sm" | "lg" | "full" | "md" | null | undefined;
|
|
47
|
-
gap?: "
|
|
47
|
+
gap?: "sm" | "default" | null | undefined;
|
|
48
48
|
bleed?: "none" | "page" | "card" | null | undefined;
|
|
49
49
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
50
50
|
/**
|
|
@@ -3,12 +3,12 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const spinnerVariants: (props?: ({
|
|
6
|
-
size?: "
|
|
7
|
-
tone?: "
|
|
6
|
+
size?: "xs" | "sm" | "default" | "lg" | "xl" | null | undefined;
|
|
7
|
+
tone?: "default" | "inherit" | "destructive" | "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
|
-
size?: "
|
|
11
|
-
tone?: "
|
|
10
|
+
size?: "xs" | "sm" | "default" | "lg" | "xl" | null | undefined;
|
|
11
|
+
tone?: "default" | "inherit" | "destructive" | "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;
|
package/dist/components/tag.d.ts
CHANGED
|
@@ -3,12 +3,12 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const tagVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "
|
|
7
|
-
size?: "
|
|
6
|
+
variant?: "default" | "success" | "warning" | "destructive" | "outline" | "primary" | "quiet" | null | undefined;
|
|
7
|
+
size?: "sm" | "default" | "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" | "
|
|
11
|
-
size?: "
|
|
10
|
+
variant?: "default" | "success" | "warning" | "destructive" | "outline" | "primary" | "quiet" | null | undefined;
|
|
11
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
12
12
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
13
13
|
onRemove?: () => void;
|
|
14
14
|
removeLabel?: string;
|
|
@@ -23,10 +23,10 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
23
23
|
*/
|
|
24
24
|
declare const textVariants: (props?: ({
|
|
25
25
|
variant?: "h2" | "h3" | "label" | "body" | "caption" | "h1" | "h4" | "small" | "display" | "body-lg" | "body-sm" | "overline" | null | undefined;
|
|
26
|
-
color?: "
|
|
26
|
+
color?: "default" | "inherit" | "destructive" | "muted" | "primary" | "primary-foreground" | null | undefined;
|
|
27
27
|
weight?: "bold" | "medium" | "normal" | "semibold" | null | undefined;
|
|
28
|
-
leading?: "none" | "
|
|
29
|
-
tracking?: "
|
|
28
|
+
leading?: "none" | "tight" | "loose" | "normal" | "snug" | "relaxed" | null | undefined;
|
|
29
|
+
tracking?: "tight" | "normal" | "wide" | "wider" | null | undefined;
|
|
30
30
|
wrap?: "balance" | "pretty" | "nowrap" | null | undefined;
|
|
31
31
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
32
32
|
type TextTag = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span" | "div" | "label" | "strong" | "em" | "small" | "li" | "dt" | "dd";
|
|
@@ -6,7 +6,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
6
6
|
|
|
7
7
|
declare const toggleVariants: (props?: ({
|
|
8
8
|
variant?: "default" | "outline" | null | undefined;
|
|
9
|
-
size?: "
|
|
9
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
11
11
|
declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime.JSX.Element;
|
|
12
12
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { MenuItem } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
import { MenuItem } from '../chunk-UDTG3RSE.js';
|
|
2
|
+
import '../chunk-6TEEY5YA.js';
|
|
3
3
|
import { Separator } from '../chunk-WSRWFA6K.js';
|
|
4
4
|
import { Skeleton } from '../chunk-QXHMPJ35.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-2CXU5WZO.js';
|
|
6
6
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
7
7
|
import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
|
|
8
8
|
import { MapPin, Star, MessageSquareQuote } from 'lucide-react';
|
|
@@ -6,7 +6,7 @@ import { CitedText } from './place-types.js';
|
|
|
6
6
|
*
|
|
7
7
|
* These are `reviews_digest.highlights`: one to three short positives already
|
|
8
8
|
* resolved into the request locale. They are the only place on a hub where a
|
|
9
|
-
* reviewer speaks in their own register, so they are set in serif
|
|
9
|
+
* reviewer speaks in their own register, so they are set in quoted serif
|
|
10
10
|
* against the sans everything else uses.
|
|
11
11
|
*
|
|
12
12
|
* `onCite` turns a quote into a button that opens the reviews behind it —
|
|
@@ -6,6 +6,8 @@ function DefaultLink(_a) {
|
|
|
6
6
|
var _b = _a, { href } = _b, props = __objRest(_b, ["href"]);
|
|
7
7
|
return /* @__PURE__ */ jsx("a", __spreadValues({ href }, props));
|
|
8
8
|
}
|
|
9
|
+
var WALL_CELLS = 18;
|
|
10
|
+
var PHONE_CELLS = 6;
|
|
9
11
|
function VenueWall({
|
|
10
12
|
places,
|
|
11
13
|
hrefs,
|
|
@@ -28,7 +30,7 @@ function VenueWall({
|
|
|
28
30
|
),
|
|
29
31
|
children: [
|
|
30
32
|
(tileUrls == null ? void 0 : tileUrls.length) ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
31
|
-
/* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "absolute inset-0 grid auto-rows-fr grid-cols-
|
|
33
|
+
/* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "absolute inset-0 grid auto-rows-fr grid-cols-3 gap-0.5 lg:grid-cols-6", children: Array.from({ length: WALL_CELLS }, (_, cell) => (
|
|
32
34
|
// eslint-disable-next-line @next/next/no-img-element
|
|
33
35
|
/* @__PURE__ */ jsx(
|
|
34
36
|
"img",
|
|
@@ -37,7 +39,7 @@ function VenueWall({
|
|
|
37
39
|
alt: "",
|
|
38
40
|
loading: "lazy",
|
|
39
41
|
decoding: "async",
|
|
40
|
-
className: "h-full w-full object-cover"
|
|
42
|
+
className: cn("h-full w-full object-cover", cell >= PHONE_CELLS && "hidden lg:block")
|
|
41
43
|
},
|
|
42
44
|
cell
|
|
43
45
|
)
|
|
@@ -94,7 +96,7 @@ function VenueWall({
|
|
|
94
96
|
) }),
|
|
95
97
|
/* @__PURE__ */ jsx("span", { className: "truncate text-[12.5px] font-medium", children: place.name })
|
|
96
98
|
] });
|
|
97
|
-
const chipClasses = "inline-flex max-w-[220px] items-center gap-2 rounded-full bg-white/
|
|
99
|
+
const chipClasses = "inline-flex max-w-[220px] items-center gap-2 rounded-full bg-white/[0.14] py-1 pl-1 pr-3.5";
|
|
98
100
|
return /* @__PURE__ */ jsx("li", { children: (hrefs == null ? void 0 : hrefs[place.slug]) ? /* @__PURE__ */ jsx(
|
|
99
101
|
LinkComponent,
|
|
100
102
|
{
|
|
@@ -76,7 +76,7 @@ function WeekdayThemeBanner({
|
|
|
76
76
|
"relative z-[1] hidden border-t border-white/15 p-4 lg:block lg:min-w-[240px] lg:border-l lg:border-t-0 lg:p-5",
|
|
77
77
|
// Over a photograph the rail needs its own ground, or seven lines of
|
|
78
78
|
// small type land on whatever the plate happens to be.
|
|
79
|
-
imageUrl && "bg-black/
|
|
79
|
+
imageUrl && "bg-black/55"
|
|
80
80
|
),
|
|
81
81
|
children: [
|
|
82
82
|
weekLabel && /* @__PURE__ */ jsx("div", { className: "mb-2 text-[10px] font-bold tracking-[0.12em] opacity-70", children: weekLabel }),
|
package/package.json
CHANGED
package/src/components/badge.tsx
CHANGED
|
@@ -14,7 +14,7 @@ const badgeVariants = cva(
|
|
|
14
14
|
"border-transparent bg-destructive text-destructive-foreground",
|
|
15
15
|
outline: "text-foreground border-border",
|
|
16
16
|
overlay:
|
|
17
|
-
"border-transparent bg-foreground/
|
|
17
|
+
"border-transparent bg-foreground/80 text-background",
|
|
18
18
|
glass: "glass text-foreground border-border/50",
|
|
19
19
|
success:
|
|
20
20
|
"border-transparent bg-success text-success-foreground",
|
|
@@ -28,14 +28,14 @@ const buttonVariants = cva(
|
|
|
28
28
|
* into a dark photo.
|
|
29
29
|
*
|
|
30
30
|
* Deliberately NOT theme-aware, and so deliberately different from
|
|
31
|
-
* `Badge`'s `overlay` (`bg-foreground/
|
|
31
|
+
* `Badge`'s `overlay` (`bg-foreground/80 text-background`, which
|
|
32
32
|
* inverts). A photo is equally a photo in both themes — this chrome has
|
|
33
33
|
* to contrast with the image beneath it, not with the app canvas, so it
|
|
34
34
|
* stays dark-on-light-glyph either way. Reconcile Badge to this, not the
|
|
35
35
|
* reverse, if the two are ever unified.
|
|
36
36
|
*/
|
|
37
37
|
overlay:
|
|
38
|
-
"bg-black/
|
|
38
|
+
"bg-black/50 text-white hover:bg-black/65 focus-visible:ring-white/70",
|
|
39
39
|
brown:
|
|
40
40
|
"bg-brown text-brown-foreground shadow-sm hover:bg-brown/85 hover:shadow",
|
|
41
41
|
antagonist:
|
|
@@ -67,7 +67,8 @@ export type ConceptCompareRailProps = {
|
|
|
67
67
|
* not `var(--scrim)`, which is the app's token and not this package's.
|
|
68
68
|
*/
|
|
69
69
|
const FOOT_GLASS = cn(
|
|
70
|
-
|
|
70
|
+
// Ink only — no backdrop-blur; see `GlassGround` for the measurement.
|
|
71
|
+
"before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:content-['']",
|
|
71
72
|
"before:bg-[oklch(0.16_0.012_55_/_0.9)]",
|
|
72
73
|
"lg:before:[mask-image:linear-gradient(to_top,black_60%,transparent_100%)] lg:before:bg-[linear-gradient(to_top,oklch(0.16_0.012_55_/_0.88)_0%,oklch(0.16_0.012_55_/_0.84)_60%,oklch(0.16_0.012_55_/_0.4)_85%,oklch(0.16_0.012_55_/_0)_100%)]"
|
|
73
74
|
);
|
|
@@ -12,7 +12,7 @@ const labels = {
|
|
|
12
12
|
|
|
13
13
|
const formatPrice = (amount: number) => `${amount} lei`;
|
|
14
14
|
|
|
15
|
-
/** A stand-in venue photograph with enough variance that the
|
|
15
|
+
/** A stand-in venue photograph with enough variance that the ink bands have something to sit on. */
|
|
16
16
|
function room(hue: number, label: string) {
|
|
17
17
|
return (
|
|
18
18
|
"data:image/svg+xml;utf8," +
|
|
@@ -79,7 +79,7 @@ const hrefs = Object.fromEntries(rooms.map((r) => [r.place_slug, `/places/${r.pl
|
|
|
79
79
|
const seeAll = (
|
|
80
80
|
<a
|
|
81
81
|
href="/menu/dishes/papanasi"
|
|
82
|
-
className="inline-flex h-10 items-center justify-center gap-1.5 rounded-full border border-white/20 bg-white/[0.
|
|
82
|
+
className="inline-flex h-10 items-center justify-center gap-1.5 rounded-full border border-white/20 bg-white/[0.16] px-4 text-[13.5px] font-bold text-white"
|
|
83
83
|
>
|
|
84
84
|
See all 45 kitchens
|
|
85
85
|
</a>
|
|
@@ -111,7 +111,7 @@ const meta: Meta<typeof ConceptCompare> = {
|
|
|
111
111
|
docs: {
|
|
112
112
|
description: {
|
|
113
113
|
component:
|
|
114
|
-
"One dish across the kitchens that make it — and **no surfaces at all**. The card is a contact sheet of venue photographs, one per room, and the three readable things float on it
|
|
114
|
+
"One dish across the kitchens that make it — and **no surfaces at all**. The card is a contact sheet of venue photographs, one per room, and the three readable things float on it on ink bands: the identity across the top, each kitchen's line over its own photograph, the foot along the bottom. Read ACROSS, not down: four rooms side by side, each with its own name and price. The photographs are placed as cells of the same grid as the rooms, spanning from the head down, so the head's ink fades into them and every seam lands on a room boundary. Nothing in it is themed — the edge is the only thing that adapts to the page.",
|
|
115
115
|
},
|
|
116
116
|
},
|
|
117
117
|
},
|