@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.
Files changed (131) hide show
  1. package/dist/{chunk-4JOV7FXW.js → chunk-2DEIXTBN.js} +1 -1
  2. package/dist/{chunk-UUJVXN2O.js → chunk-66MAPLXS.js} +3 -1
  3. package/dist/{chunk-Y5D5LP4A.js → chunk-7BWTYWM3.js} +14 -3
  4. package/dist/{chunk-ZFNOCP6W.js → chunk-H3BV4VAG.js} +15 -1
  5. package/dist/chunk-LEAYBICI.js +84 -0
  6. package/dist/{chunk-TL4YU2O5.js → chunk-UKBNQO6Q.js} +2 -2
  7. package/dist/{chunk-UX6SWAKH.js → chunk-UZ3PCIE5.js} +119 -28
  8. package/dist/{chunk-YLNYXPIH.js → chunk-VBA45GLP.js} +1 -1
  9. package/dist/{chunk-A5ONAJCE.js → chunk-VG3PND3D.js} +1 -1
  10. package/dist/{chunk-ZBBUKXM5.js → chunk-X3WMRKOW.js} +1 -1
  11. package/dist/{chunk-HCM6LKM5.js → chunk-XNA2INVQ.js} +2 -2
  12. package/dist/{chunk-AV777R4G.js → chunk-YYGB4G4Q.js} +1 -1
  13. package/dist/components/accordion.js +1 -1
  14. package/dist/components/alert-dialog.js +1 -1
  15. package/dist/components/alert.d.ts +2 -2
  16. package/dist/components/alert.js +1 -1
  17. package/dist/components/avatar.d.ts +10 -1
  18. package/dist/components/avatar.js +41 -14
  19. package/dist/components/badge.d.ts +11 -2
  20. package/dist/components/badge.js +1 -1
  21. package/dist/components/breadcrumb.js +1 -1
  22. package/dist/components/button.d.ts +1 -1
  23. package/dist/components/button.js +1 -1
  24. package/dist/components/calendar.js +3 -3
  25. package/dist/components/card.d.ts +2 -2
  26. package/dist/components/card.js +1 -1
  27. package/dist/components/carousel.js +1 -1
  28. package/dist/components/circular-progress.js +1 -1
  29. package/dist/components/combobox.js +3 -3
  30. package/dist/components/command.d.ts +15 -15
  31. package/dist/components/command.js +1 -1
  32. package/dist/components/currency-input.js +2 -2
  33. package/dist/components/date-input.d.ts +1 -1
  34. package/dist/components/date-input.js +1 -1
  35. package/dist/components/description-list.js +1 -1
  36. package/dist/components/dropdown-menu.js +1 -1
  37. package/dist/components/empty-state.js +2 -2
  38. package/dist/components/field.js +2 -2
  39. package/dist/components/filter-category-row.js +2 -2
  40. package/dist/components/form.js +1 -1
  41. package/dist/components/haptic-button.js +1 -1
  42. package/dist/components/input-group.js +1 -1
  43. package/dist/components/input.js +1 -1
  44. package/dist/components/item.d.ts +2 -2
  45. package/dist/components/item.js +1 -1
  46. package/dist/components/kbd.js +1 -1
  47. package/dist/components/label.js +1 -1
  48. package/dist/components/link-button.js +1 -1
  49. package/dist/components/multi-select-combobox.js +4 -4
  50. package/dist/components/pagination.js +1 -1
  51. package/dist/components/place-about-tab.d.ts +17 -1
  52. package/dist/components/place-about-tab.js +4 -4
  53. package/dist/components/place-card.js +2 -2
  54. package/dist/components/place-details-mobile.js +7 -7
  55. package/dist/components/place-schedule-week.js +2 -2
  56. package/dist/components/popover.js +1 -1
  57. package/dist/components/searchable-select.js +3 -3
  58. package/dist/components/select.js +2 -2
  59. package/dist/components/selection-bar.js +1 -1
  60. package/dist/components/sheet.d.ts +23 -0
  61. package/dist/components/sheet.js +51 -14
  62. package/dist/components/sliding-panels.js +5 -1
  63. package/dist/components/sonner.js +2 -2
  64. package/dist/components/spinner.d.ts +2 -2
  65. package/dist/components/stepper.js +4 -1
  66. package/dist/components/table.js +1 -1
  67. package/dist/components/tabs.js +3 -26
  68. package/dist/components/tag-group.js +1 -1
  69. package/dist/components/tag.d.ts +2 -2
  70. package/dist/components/tag.js +1 -1
  71. package/dist/components/text.d.ts +21 -3
  72. package/dist/components/text.js +1 -1
  73. package/dist/components/toggle-group.js +1 -1
  74. package/dist/components/toggle.js +1 -1
  75. package/dist/lib/card-hover.d.ts +75 -0
  76. package/dist/lib/card-hover.js +18 -0
  77. package/dist/lib/motion.d.ts +83 -0
  78. package/dist/lib/motion.js +2 -0
  79. package/package.json +1 -1
  80. package/src/components/accordion.tsx +1 -1
  81. package/src/components/avatar.stories.tsx +59 -26
  82. package/src/components/avatar.test.tsx +129 -0
  83. package/src/components/avatar.tsx +93 -37
  84. package/src/components/badge.tsx +15 -3
  85. package/src/components/breadcrumb.tsx +1 -1
  86. package/src/components/button.tsx +16 -1
  87. package/src/components/calendar.tsx +2 -2
  88. package/src/components/circular-progress.tsx +1 -1
  89. package/src/components/command.tsx +2 -2
  90. package/src/components/currency-input.tsx +1 -1
  91. package/src/components/description-list.tsx +1 -1
  92. package/src/components/dropdown-menu.tsx +1 -1
  93. package/src/components/field.tsx +1 -1
  94. package/src/components/input-group.tsx +1 -1
  95. package/src/components/input.tsx +1 -1
  96. package/src/components/item.tsx +1 -1
  97. package/src/components/kbd.tsx +1 -1
  98. package/src/components/label.tsx +1 -1
  99. package/src/components/place-about-tab.tsx +131 -18
  100. package/src/components/place-card.tsx +1 -1
  101. package/src/components/place-details-mobile.tsx +2 -2
  102. package/src/components/popover.tsx +9 -1
  103. package/src/components/select.tsx +2 -2
  104. package/src/components/selection-bar.tsx +1 -1
  105. package/src/components/sheet.tsx +72 -12
  106. package/src/components/sliding-panels.stories.tsx +70 -0
  107. package/src/components/sliding-panels.test.tsx +116 -0
  108. package/src/components/sliding-panels.tsx +14 -0
  109. package/src/components/sonner.tsx +2 -2
  110. package/src/components/stepper.tsx +4 -1
  111. package/src/components/table.tsx +1 -1
  112. package/src/components/tabs.tsx +1 -1
  113. package/src/components/tag-group.tsx +1 -1
  114. package/src/components/tag.tsx +1 -1
  115. package/src/components/text.test.tsx +37 -3
  116. package/src/components/text.tsx +32 -3
  117. package/src/components/toggle.tsx +1 -1
  118. package/src/globals.css +53 -11
  119. package/src/lib/card-hover.ts +87 -0
  120. package/dist/chunk-EBAMCZDW.js +0 -112
  121. package/dist/chunk-VQNDZVI7.js +0 -106
  122. package/dist/components/toast.d.ts +0 -18
  123. package/dist/components/toast.js +0 -3
  124. package/dist/components/toaster.d.ts +0 -5
  125. package/dist/components/toaster.js +0 -25
  126. package/dist/components/use-toast.d.ts +0 -42
  127. package/dist/components/use-toast.js +0 -2
  128. package/src/components/toast.stories.tsx +0 -63
  129. package/src/components/toast.tsx +0 -130
  130. package/src/components/toaster.tsx +0 -31
  131. package/src/components/use-toast.ts +0 -180
@@ -6,7 +6,7 @@ import { cva } from 'class-variance-authority';
6
6
  import { jsx } from 'react/jsx-runtime';
7
7
 
8
8
  var labelVariants = cva(
9
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 transition-all duration-200"
9
+ "text-sm font-semibold leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 transition-all duration-200"
10
10
  );
11
11
  var Label = React.forwardRef((_a, ref) => {
12
12
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
@@ -9,7 +9,7 @@ var PopoverTrigger = PopoverPrimitive.Trigger;
9
9
  var PopoverAnchor = PopoverPrimitive.Anchor;
10
10
  var PopoverClose = PopoverPrimitive.Close;
11
11
  var PopoverContent = React.forwardRef((_a, ref) => {
12
- var _b = _a, { className, align = "center", sideOffset = 4 } = _b, props = __objRest(_b, ["className", "align", "sideOffset"]);
12
+ var _b = _a, { className, align = "center", sideOffset = 4, collisionPadding = 12 } = _b, props = __objRest(_b, ["className", "align", "sideOffset", "collisionPadding"]);
13
13
  return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
14
14
  PopoverPrimitive.Content,
15
15
  __spreadValues({
@@ -17,8 +17,10 @@ var PopoverContent = React.forwardRef((_a, ref) => {
17
17
  "data-slot": "popover-content",
18
18
  align,
19
19
  sideOffset,
20
+ collisionPadding,
20
21
  className: cn(
21
22
  "z-50 w-72 rounded-xl border border-border bg-popover p-4 text-popover-foreground shadow-xl outline-none",
23
+ "max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain",
22
24
  "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
23
25
  className
24
26
  )
@@ -11,12 +11,19 @@ var textVariants = cva("", {
11
11
  h2: "text-2xl font-semibold tracking-tight",
12
12
  h3: "text-xl font-semibold",
13
13
  h4: "text-lg font-semibold leading-none tracking-tight",
14
+ /** @deprecated Now identical to `body`. Use `body`. */
14
15
  "body-lg": "text-base leading-relaxed",
15
- body: "text-base leading-normal",
16
+ // `leading-relaxed`, absorbing what `body-lg` was: 16px is the prose size
17
+ // and prose wants relaxed leading. Two variants differing only in
18
+ // line-height forced every author to choose between two names for one
19
+ // role, and the two apps duly diverged onto different ones.
20
+ body: "text-base leading-relaxed",
16
21
  "body-sm": "text-sm leading-relaxed",
22
+ /** @deprecated Use `body-sm` + `color="muted"` — same size, second name. */
17
23
  small: "text-sm text-muted-foreground",
18
24
  caption: "text-xs leading-normal text-muted-foreground",
19
- label: "text-sm font-medium",
25
+ // 600, not 500 — see the weight scale below.
26
+ label: "text-sm font-semibold",
20
27
  overline: "text-xs font-semibold uppercase tracking-wider"
21
28
  },
22
29
  color: {
@@ -27,9 +34,13 @@ var textVariants = cva("", {
27
34
  "primary-foreground": "text-primary-foreground",
28
35
  inherit: ""
29
36
  },
37
+ // Three weights: 400 / 600 / 700. A fourth step is not a hierarchy level,
38
+ // it is noise — 500 against 600 is indistinguishable at body sizes while
39
+ // still counting as a separate treatment when you audit a screen.
30
40
  weight: {
31
41
  normal: "font-normal",
32
- medium: "font-medium",
42
+ /** @deprecated Alias for `semibold`. 500 is not in the 3-weight system. */
43
+ medium: "font-semibold",
33
44
  semibold: "font-semibold",
34
45
  bold: "font-bold"
35
46
  },
@@ -8,7 +8,7 @@ import { Loader2 } from 'lucide-react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
9
 
10
10
  var buttonVariants = cva(
11
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer [@media(pointer:coarse)]:active:scale-95",
11
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer [@media(pointer:coarse)]:active:scale-95",
12
12
  {
13
13
  variants: {
14
14
  variant: {
@@ -19,6 +19,20 @@ var buttonVariants = cva(
19
19
  ghost: "hover:bg-accent hover:text-accent-foreground",
20
20
  link: "text-primary underline-offset-4 hover:underline",
21
21
  glass: "glass glass-hover text-foreground",
22
+ /**
23
+ * Chrome sitting ON a photo — share, close, favourite over a hero or
24
+ * card image. `glass` is the wrong tool there: it resolves
25
+ * `text-foreground`, which is near-black in light mode and disappears
26
+ * into a dark photo.
27
+ *
28
+ * Deliberately NOT theme-aware, and so deliberately different from
29
+ * `Badge`'s `overlay` (`bg-foreground/70 text-background`, which
30
+ * inverts). A photo is equally a photo in both themes — this chrome has
31
+ * to contrast with the image beneath it, not with the app canvas, so it
32
+ * stays dark-on-light-glyph either way. Reconcile Badge to this, not the
33
+ * reverse, if the two are ever unified.
34
+ */
35
+ overlay: "bg-black/40 text-white backdrop-blur-sm hover:bg-black/60 focus-visible:ring-white/70",
22
36
  brown: "bg-brown text-brown-foreground shadow-sm hover:bg-brown/85 hover:shadow",
23
37
  antagonist: "bg-primary-foreground text-primary shadow-sm hover:bg-accent hover:text-accent-foreground border border-border hover:border-accent"
24
38
  },
@@ -0,0 +1,84 @@
1
+ import { __spreadValues } from './chunk-3GWWZKX7.js';
2
+
3
+ // src/lib/motion.ts
4
+ var duration = {
5
+ instant: 0.12,
6
+ quick: 0.18,
7
+ standard: 0.26,
8
+ deliberate: 0.36,
9
+ narrative: 0.5,
10
+ exitQuick: 0.11,
11
+ exitStandard: 0.21
12
+ };
13
+ var ease = {
14
+ enter: [0, 0, 0.2, 1],
15
+ standard: [0.4, 0, 0.2, 1],
16
+ exit: [0.55, 0, 1, 0.45]
17
+ };
18
+ var springSnappy = {
19
+ type: "spring",
20
+ damping: 30,
21
+ stiffness: 380
22
+ };
23
+ var springSmooth = {
24
+ type: "spring",
25
+ damping: 30,
26
+ stiffness: 220
27
+ };
28
+ var springSoft = {
29
+ type: "spring",
30
+ damping: 35,
31
+ stiffness: 140
32
+ };
33
+ var springGentle = springSoft;
34
+ var archetype = {
35
+ /** Drawer / Sheet / Dialog entrance. Surface arrives first; content layers after. */
36
+ surfaceOpen: __spreadValues({}, springSmooth),
37
+ surfaceClose: { duration: duration.exitStandard, ease: ease.exit },
38
+ /** First-reveal stagger for card grids. Per-item spring. Cap stagger at 8 items. */
39
+ listReveal: __spreadValues({}, springSoft),
40
+ listRevealStagger: 0.04,
41
+ listRevealMaxItems: 8,
42
+ /** Tab content swap, skeleton → data swap. Opacity-only — no transform. */
43
+ contentSwap: { duration: duration.quick, ease: ease.standard },
44
+ contentSwapExit: { duration: duration.exitQuick, ease: ease.exit },
45
+ /** Bottom-sheet / side-drawer entry. */
46
+ edgeEnter: __spreadValues({}, springSmooth),
47
+ edgeExit: { duration: duration.exitStandard, ease: ease.exit },
48
+ /** Card / button tap feedback. */
49
+ pressResponse: { duration: duration.instant, ease: ease.enter },
50
+ /** Active tab pill, active filter chip — use with Framer Motion `layoutId`. */
51
+ indicatorMorph: __spreadValues({}, springSnappy),
52
+ /** Image enter — slight scale on load. */
53
+ imageEnter: { duration: 0.3, ease: ease.standard }
54
+ };
55
+ var stagger = {
56
+ tight: 0.03,
57
+ standard: 0.04,
58
+ loose: 0.06
59
+ };
60
+ var listRevealVariants = {
61
+ container: {
62
+ hidden: { opacity: 1 },
63
+ show: {
64
+ opacity: 1,
65
+ transition: { staggerChildren: stagger.standard }
66
+ }
67
+ },
68
+ item: {
69
+ hidden: { opacity: 0, y: 8 },
70
+ show: { opacity: 1, y: 0, transition: archetype.listReveal }
71
+ }
72
+ };
73
+ var contentSwapVariants = {
74
+ hidden: { opacity: 0, y: 6 },
75
+ show: { opacity: 1, y: 0, transition: archetype.contentSwap },
76
+ exit: { opacity: 0, y: -4, transition: archetype.contentSwapExit }
77
+ };
78
+ var skeletonSwapVariants = {
79
+ hidden: { opacity: 0 },
80
+ show: { opacity: 1, transition: archetype.contentSwap },
81
+ exit: { opacity: 0, transition: archetype.contentSwapExit }
82
+ };
83
+
84
+ export { archetype, contentSwapVariants, duration, ease, listRevealVariants, skeletonSwapVariants, springGentle, springSmooth, springSnappy, springSoft, stagger };
@@ -32,8 +32,8 @@ var badgeVariants = cva(
32
32
  }
33
33
  );
34
34
  function Badge(_a) {
35
- var _b = _a, { className, variant, live } = _b, props = __objRest(_b, ["className", "variant", "live"]);
36
- return /* @__PURE__ */ jsx("div", __spreadValues({ "data-slot": "badge", className: cn(badgeVariants({ variant, live }), className) }, props));
35
+ var _b = _a, { className, variant, live, as: Tag = "div" } = _b, props = __objRest(_b, ["className", "variant", "live", "as"]);
36
+ return /* @__PURE__ */ jsx(Tag, __spreadValues({ "data-slot": "badge", className: cn(badgeVariants({ variant, live }), className) }, props));
37
37
  }
38
38
 
39
39
  export { Badge, badgeVariants };
@@ -1,7 +1,7 @@
1
- import { Tag } from './chunk-YLNYXPIH.js';
1
+ import { Tag } from './chunk-VBA45GLP.js';
2
2
  import { Separator } from './chunk-WSRWFA6K.js';
3
- import { PlaceScheduleWeek } from './chunk-A5ONAJCE.js';
4
- import { Text } from './chunk-Y5D5LP4A.js';
3
+ import { PlaceScheduleWeek } from './chunk-VG3PND3D.js';
4
+ import { Text } from './chunk-7BWTYWM3.js';
5
5
  import { cn } from './chunk-FEK5XGZW.js';
6
6
  import { __spreadProps, __spreadValues } from './chunk-3GWWZKX7.js';
7
7
  import { Fragment } from 'react';
@@ -42,11 +42,38 @@ function Facebook(props) {
42
42
  })
43
43
  );
44
44
  }
45
+ var SECTION_ORDER = [
46
+ "hours",
47
+ "contact",
48
+ "ordering",
49
+ "busyness",
50
+ "amenities",
51
+ "accessibility",
52
+ "payment",
53
+ "parking",
54
+ "reputation",
55
+ "cuisines",
56
+ "landmarks",
57
+ "description"
58
+ ];
59
+ function sectionRank(key) {
60
+ const i = SECTION_ORDER.indexOf(key);
61
+ return i === -1 ? Number.MAX_SAFE_INTEGER : i;
62
+ }
45
63
  function humanizeEnum(value) {
46
64
  return value.replace(/_/g, " ");
47
65
  }
48
66
  function SectionHeading({ children }) {
49
- return /* @__PURE__ */ jsx(Text, { as: "h3", variant: "body-sm", weight: "semibold", className: "text-foreground", children });
67
+ return /* @__PURE__ */ jsx(
68
+ Text,
69
+ {
70
+ as: "h3",
71
+ variant: "body-sm",
72
+ weight: "semibold",
73
+ className: "text-foreground",
74
+ children
75
+ }
76
+ );
50
77
  }
51
78
  function Divider() {
52
79
  return /* @__PURE__ */ jsx(Separator, { className: "mx-4 w-auto" });
@@ -78,6 +105,8 @@ function PlaceAboutTab({
78
105
  labels,
79
106
  mapSlot,
80
107
  busynessSlot,
108
+ orderingSlot,
109
+ reputationSlot,
81
110
  onLinkClick,
82
111
  className
83
112
  }) {
@@ -99,7 +128,9 @@ function PlaceAboutTab({
99
128
  ((_a = place.location) == null ? void 0 : _a.address) || place.phone || place.website_url || ((_b = place.socials) == null ? void 0 : _b.instagram_url) || ((_c = place.socials) == null ? void 0 : _c.facebook_url)
100
129
  );
101
130
  const hasSchedule = Boolean(place.schedule);
102
- const hasBusyness = Boolean(busynessSlot && place.busyness && place.busyness.length > 0);
131
+ const hasBusyness = Boolean(
132
+ busynessSlot && place.busyness && place.busyness.length > 0
133
+ );
103
134
  const hasCuisines = ((_e = (_d = place.cuisines) == null ? void 0 : _d.length) != null ? _e : 0) > 0;
104
135
  const hasAmenities = ((_g = (_f = place.amenities) == null ? void 0 : _f.length) != null ? _g : 0) > 0;
105
136
  const hasPayment = ((_i = (_h = place.payment_options) == null ? void 0 : _h.length) != null ? _i : 0) > 0;
@@ -139,7 +170,16 @@ function PlaceAboutTab({
139
170
  /* @__PURE__ */ jsxs("div", { className: "space-y-2.5", children: [
140
171
  ((_p = place.location) == null ? void 0 : _p.address) && /* @__PURE__ */ jsxs("div", { children: [
141
172
  /* @__PURE__ */ jsx(Text, { as: "p", variant: "body-sm", color: "muted", children: place.location.address }),
142
- neighborhood && /* @__PURE__ */ jsx(Text, { as: "p", variant: "body-sm", color: "muted", className: "mt-0.5", children: neighborhood })
173
+ neighborhood && /* @__PURE__ */ jsx(
174
+ Text,
175
+ {
176
+ as: "p",
177
+ variant: "body-sm",
178
+ color: "muted",
179
+ className: "mt-0.5",
180
+ children: neighborhood
181
+ }
182
+ )
143
183
  ] }),
144
184
  place.phone && /* @__PURE__ */ jsxs(
145
185
  "a",
@@ -148,7 +188,13 @@ function PlaceAboutTab({
148
188
  onClick: () => handleLinkClick("phone", place.phone),
149
189
  className: "flex items-center gap-2 text-foreground hover:text-primary transition-colors",
150
190
  children: [
151
- /* @__PURE__ */ jsx(Phone, { className: "w-4 h-4 text-muted-foreground shrink-0", "aria-hidden": true }),
191
+ /* @__PURE__ */ jsx(
192
+ Phone,
193
+ {
194
+ className: "w-4 h-4 text-muted-foreground shrink-0",
195
+ "aria-hidden": true
196
+ }
197
+ ),
152
198
  /* @__PURE__ */ jsx(Text, { as: "span", variant: "body-sm", children: place.phone })
153
199
  ]
154
200
  }
@@ -162,7 +208,13 @@ function PlaceAboutTab({
162
208
  onClick: () => handleLinkClick("website", place.website_url),
163
209
  className: "flex items-center gap-2 text-foreground hover:text-primary transition-colors break-all",
164
210
  children: [
165
- /* @__PURE__ */ jsx(Globe, { className: "w-4 h-4 text-muted-foreground shrink-0", "aria-hidden": true }),
211
+ /* @__PURE__ */ jsx(
212
+ Globe,
213
+ {
214
+ className: "w-4 h-4 text-muted-foreground shrink-0",
215
+ "aria-hidden": true
216
+ }
217
+ ),
166
218
  /* @__PURE__ */ jsx(Text, { as: "span", variant: "body-sm", className: "break-all", children: place.website_url })
167
219
  ]
168
220
  }
@@ -179,7 +231,13 @@ function PlaceAboutTab({
179
231
  },
180
232
  className: "flex items-center gap-2 text-foreground hover:text-primary transition-colors",
181
233
  children: [
182
- /* @__PURE__ */ jsx(Instagram, { className: "w-4 h-4 text-muted-foreground shrink-0", "aria-hidden": true }),
234
+ /* @__PURE__ */ jsx(
235
+ Instagram,
236
+ {
237
+ className: "w-4 h-4 text-muted-foreground shrink-0",
238
+ "aria-hidden": true
239
+ }
240
+ ),
183
241
  /* @__PURE__ */ jsx(Text, { as: "span", variant: "body-sm", children: labels.instagram })
184
242
  ]
185
243
  }
@@ -196,7 +254,13 @@ function PlaceAboutTab({
196
254
  },
197
255
  className: "flex items-center gap-2 text-foreground hover:text-primary transition-colors",
198
256
  children: [
199
- /* @__PURE__ */ jsx(Facebook, { className: "w-4 h-4 text-muted-foreground shrink-0", "aria-hidden": true }),
257
+ /* @__PURE__ */ jsx(
258
+ Facebook,
259
+ {
260
+ className: "w-4 h-4 text-muted-foreground shrink-0",
261
+ "aria-hidden": true
262
+ }
263
+ ),
200
264
  /* @__PURE__ */ jsx(Text, { as: "span", variant: "body-sm", children: labels.facebook })
201
265
  ]
202
266
  }
@@ -242,7 +306,9 @@ function PlaceAboutTab({
242
306
  /* @__PURE__ */ jsx(
243
307
  ChipRow,
244
308
  {
245
- items: place.cuisines.map((c) => c.charAt(0).toUpperCase() + c.slice(1))
309
+ items: place.cuisines.map(
310
+ (c) => c.charAt(0).toUpperCase() + c.slice(1)
311
+ )
246
312
  }
247
313
  )
248
314
  ] })
@@ -271,7 +337,12 @@ function PlaceAboutTab({
271
337
  key: "accessibility",
272
338
  node: /* @__PURE__ */ jsxs("section", { className: "px-4 space-y-2", children: [
273
339
  /* @__PURE__ */ jsx(SectionHeading, { children: labels.accessibility }),
274
- /* @__PURE__ */ jsx(ChecklistGrid, { items: place.accessibility_features.map(getAccessibilityLabel) })
340
+ /* @__PURE__ */ jsx(
341
+ ChecklistGrid,
342
+ {
343
+ items: place.accessibility_features.map(getAccessibilityLabel)
344
+ }
345
+ )
275
346
  ] })
276
347
  });
277
348
  }
@@ -289,25 +360,45 @@ function PlaceAboutTab({
289
360
  key: "landmarks",
290
361
  node: /* @__PURE__ */ jsxs("section", { className: "px-4 space-y-2", children: [
291
362
  /* @__PURE__ */ jsx(SectionHeading, { children: labels.nearbyLandmarks }),
292
- /* @__PURE__ */ jsx("div", { className: "space-y-2", children: place.landmarks.map((landmark, i) => /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-baseline gap-3", children: [
293
- /* @__PURE__ */ jsx(Text, { as: "span", variant: "body-sm", children: landmark.name }),
294
- landmark.distance_meters != null && /* @__PURE__ */ jsxs(
295
- Text,
296
- {
297
- as: "span",
298
- variant: "body-sm",
299
- color: "muted",
300
- className: "tabular-nums shrink-0",
301
- children: [
302
- (landmark.distance_meters / 1e3).toFixed(1),
303
- " km"
304
- ]
305
- }
306
- )
307
- ] }, i)) })
363
+ /* @__PURE__ */ jsx("div", { className: "space-y-2", children: place.landmarks.map((landmark, i) => /* @__PURE__ */ jsxs(
364
+ "div",
365
+ {
366
+ className: "flex justify-between items-baseline gap-3",
367
+ children: [
368
+ /* @__PURE__ */ jsx(Text, { as: "span", variant: "body-sm", children: landmark.name }),
369
+ landmark.distance_meters != null && /* @__PURE__ */ jsxs(
370
+ Text,
371
+ {
372
+ as: "span",
373
+ variant: "body-sm",
374
+ color: "muted",
375
+ className: "tabular-nums shrink-0",
376
+ children: [
377
+ (landmark.distance_meters / 1e3).toFixed(1),
378
+ " km"
379
+ ]
380
+ }
381
+ )
382
+ ]
383
+ },
384
+ i
385
+ )) })
308
386
  ] })
309
387
  });
310
388
  }
389
+ if (orderingSlot) {
390
+ sections.push({
391
+ key: "ordering",
392
+ node: /* @__PURE__ */ jsx("section", { className: "px-4", children: orderingSlot })
393
+ });
394
+ }
395
+ if (reputationSlot) {
396
+ sections.push({
397
+ key: "reputation",
398
+ node: /* @__PURE__ */ jsx("section", { className: "px-4", children: reputationSlot })
399
+ });
400
+ }
401
+ sections.sort((a, b) => sectionRank(a.key) - sectionRank(b.key));
311
402
  return /* @__PURE__ */ jsxs("div", { className: cn("space-y-6 pt-4", className), children: [
312
403
  mapSlot,
313
404
  sections.map((s, i) => /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -6,7 +6,7 @@ import { cva } from 'class-variance-authority';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
8
8
  var tagVariants = cva(
9
- "inline-flex items-center gap-1 rounded-full border text-xs font-medium transition-colors",
9
+ "inline-flex items-center gap-1 rounded-full border text-xs font-semibold transition-colors",
10
10
  {
11
11
  variants: {
12
12
  variant: {
@@ -1,4 +1,4 @@
1
- import { Text } from './chunk-Y5D5LP4A.js';
1
+ import { Text } from './chunk-7BWTYWM3.js';
2
2
  import { cn } from './chunk-FEK5XGZW.js';
3
3
  import { useRef, useEffect } from 'react';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -5,7 +5,7 @@ import { cva } from 'class-variance-authority';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
7
7
  var toggleVariants = cva(
8
- "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-accent/50 hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 transition-colors aria-invalid:ring-2 aria-invalid:ring-destructive/40 whitespace-nowrap",
8
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-semibold hover:bg-accent/50 hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 transition-colors aria-invalid:ring-2 aria-invalid:ring-destructive/40 whitespace-nowrap",
9
9
  {
10
10
  variants: {
11
11
  variant: {
@@ -36,7 +36,7 @@ var CommandDialog = (_a) => {
36
36
  /* @__PURE__ */ jsx(DialogTitle, { children: title }),
37
37
  /* @__PURE__ */ jsx(DialogDescription, { children: description })
38
38
  ] }),
39
- /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children })
39
+ /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children })
40
40
  ] }) }));
41
41
  };
42
42
  var CommandInput = React.forwardRef((_a, ref) => {
@@ -96,7 +96,7 @@ var CommandGroup = React.forwardRef((_a, ref) => {
96
96
  __spreadValues({
97
97
  ref,
98
98
  className: cn(
99
- "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
99
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground",
100
100
  className
101
101
  )
102
102
  }, props)
@@ -5,7 +5,7 @@ import { cva } from 'class-variance-authority';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
7
7
  var inputVariants = cva(
8
- "flex w-full border border-border bg-input/50 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:bg-input disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive/40",
8
+ "flex w-full border border-border bg-input/50 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-semibold file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:bg-input disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive/40",
9
9
  {
10
10
  variants: {
11
11
  size: {
@@ -26,7 +26,7 @@ var AccordionTrigger = React.forwardRef((_a, ref) => {
26
26
  ref,
27
27
  "data-slot": "accordion-trigger",
28
28
  className: cn(
29
- "flex flex-1 cursor-pointer items-center justify-between py-4 text-sm font-medium text-foreground transition-colors hover:text-foreground/80",
29
+ "flex flex-1 cursor-pointer items-center justify-between py-4 text-sm font-semibold text-foreground transition-colors hover:text-foreground/80",
30
30
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm",
31
31
  "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
32
32
  "[&[data-state=open]>svg]:rotate-180",
@@ -1,4 +1,4 @@
1
- import { buttonVariants } from '../chunk-ZFNOCP6W.js';
1
+ import { buttonVariants } from '../chunk-H3BV4VAG.js';
2
2
  import '../chunk-R47NEOSI.js';
3
3
  import { cn } from '../chunk-FEK5XGZW.js';
4
4
  import { __objRest, __spreadProps, __spreadValues } from '../chunk-3GWWZKX7.js';
@@ -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>>;
@@ -1,4 +1,4 @@
1
- import { textVariants } from '../chunk-Y5D5LP4A.js';
1
+ import { textVariants } from '../chunk-7BWTYWM3.js';
2
2
  import { cn } from '../chunk-FEK5XGZW.js';
3
3
  import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
4
4
  import * as React from 'react';
@@ -6,6 +6,7 @@ import { VariantProps } from 'class-variance-authority';
6
6
  declare const avatarVariants: (props?: ({
7
7
  size?: "default" | "xs" | "sm" | "lg" | "xl" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ type AvatarSize = NonNullable<VariantProps<typeof avatarVariants>["size"]>;
9
10
  declare const Avatar: React.ForwardRefExoticComponent<Omit<AvatarPrimitive.AvatarProps & React.RefAttributes<HTMLSpanElement>, "ref"> & VariantProps<(props?: ({
10
11
  size?: "default" | "xs" | "sm" | "lg" | "xl" | null | undefined;
11
12
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
@@ -15,9 +16,17 @@ declare const AvatarBadge: React.ForwardRefExoticComponent<React.HTMLAttributes<
15
16
  placement?: "top-right" | "bottom-right";
16
17
  tone?: "success" | "warning" | "destructive" | "muted";
17
18
  } & React.RefAttributes<HTMLSpanElement>>;
19
+ declare const avatarGroupOverflowVariants: (props?: ({
20
+ size?: "default" | "xs" | "sm" | "lg" | "xl" | null | undefined;
21
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
18
22
  declare const AvatarGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
19
23
  max?: number;
20
24
  spacing?: "tight" | "default" | "loose";
25
+ /**
26
+ * Size for the whole group: sets the "+N" overflow chip and is inherited by
27
+ * child `Avatar`s that don't set their own `size`. Defaults to "default".
28
+ */
29
+ size?: AvatarSize;
21
30
  } & React.RefAttributes<HTMLDivElement>>;
22
31
 
23
- export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarImage, avatarVariants };
32
+ export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarImage, type AvatarSize, avatarGroupOverflowVariants, avatarVariants };