@bearmenu/ui 0.7.1 → 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 (128) 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-TL4YU2O5.js → chunk-UKBNQO6Q.js} +2 -2
  6. package/dist/{chunk-UX6SWAKH.js → chunk-UZ3PCIE5.js} +119 -28
  7. package/dist/{chunk-YLNYXPIH.js → chunk-VBA45GLP.js} +1 -1
  8. package/dist/{chunk-A5ONAJCE.js → chunk-VG3PND3D.js} +1 -1
  9. package/dist/{chunk-ZBBUKXM5.js → chunk-X3WMRKOW.js} +1 -1
  10. package/dist/{chunk-HCM6LKM5.js → chunk-XNA2INVQ.js} +2 -2
  11. package/dist/{chunk-AV777R4G.js → chunk-YYGB4G4Q.js} +1 -1
  12. package/dist/components/accordion.js +1 -1
  13. package/dist/components/alert-dialog.js +1 -1
  14. package/dist/components/alert.d.ts +2 -2
  15. package/dist/components/alert.js +1 -1
  16. package/dist/components/avatar.d.ts +10 -1
  17. package/dist/components/avatar.js +41 -14
  18. package/dist/components/badge.d.ts +11 -2
  19. package/dist/components/badge.js +1 -1
  20. package/dist/components/breadcrumb.js +1 -1
  21. package/dist/components/button.d.ts +1 -1
  22. package/dist/components/button.js +1 -1
  23. package/dist/components/calendar.js +3 -3
  24. package/dist/components/card.d.ts +2 -2
  25. package/dist/components/card.js +1 -1
  26. package/dist/components/carousel.js +1 -1
  27. package/dist/components/circular-progress.js +1 -1
  28. package/dist/components/combobox.js +3 -3
  29. package/dist/components/command.d.ts +15 -15
  30. package/dist/components/command.js +1 -1
  31. package/dist/components/currency-input.js +2 -2
  32. package/dist/components/date-input.d.ts +1 -1
  33. package/dist/components/date-input.js +1 -1
  34. package/dist/components/description-list.js +1 -1
  35. package/dist/components/dropdown-menu.js +1 -1
  36. package/dist/components/empty-state.js +2 -2
  37. package/dist/components/field.js +2 -2
  38. package/dist/components/filter-category-row.js +2 -2
  39. package/dist/components/form.js +1 -1
  40. package/dist/components/haptic-button.js +1 -1
  41. package/dist/components/input-group.js +1 -1
  42. package/dist/components/input.js +1 -1
  43. package/dist/components/item.d.ts +2 -2
  44. package/dist/components/item.js +1 -1
  45. package/dist/components/kbd.js +1 -1
  46. package/dist/components/label.js +1 -1
  47. package/dist/components/link-button.js +1 -1
  48. package/dist/components/multi-select-combobox.js +4 -4
  49. package/dist/components/pagination.js +1 -1
  50. package/dist/components/place-about-tab.d.ts +17 -1
  51. package/dist/components/place-about-tab.js +4 -4
  52. package/dist/components/place-card.js +2 -2
  53. package/dist/components/place-details-mobile.js +7 -7
  54. package/dist/components/place-schedule-week.js +2 -2
  55. package/dist/components/popover.js +1 -1
  56. package/dist/components/searchable-select.js +3 -3
  57. package/dist/components/select.js +2 -2
  58. package/dist/components/selection-bar.js +1 -1
  59. package/dist/components/sheet.d.ts +23 -0
  60. package/dist/components/sheet.js +51 -14
  61. package/dist/components/sliding-panels.js +5 -1
  62. package/dist/components/sonner.js +2 -2
  63. package/dist/components/spinner.d.ts +2 -2
  64. package/dist/components/stepper.js +4 -1
  65. package/dist/components/table.js +1 -1
  66. package/dist/components/tabs.js +1 -1
  67. package/dist/components/tag-group.js +1 -1
  68. package/dist/components/tag.d.ts +2 -2
  69. package/dist/components/tag.js +1 -1
  70. package/dist/components/text.d.ts +21 -3
  71. package/dist/components/text.js +1 -1
  72. package/dist/components/toggle-group.js +1 -1
  73. package/dist/components/toggle.js +1 -1
  74. package/dist/lib/card-hover.d.ts +75 -0
  75. package/dist/lib/card-hover.js +18 -0
  76. package/package.json +1 -1
  77. package/src/components/accordion.tsx +1 -1
  78. package/src/components/avatar.stories.tsx +59 -26
  79. package/src/components/avatar.test.tsx +129 -0
  80. package/src/components/avatar.tsx +93 -37
  81. package/src/components/badge.tsx +15 -3
  82. package/src/components/breadcrumb.tsx +1 -1
  83. package/src/components/button.tsx +16 -1
  84. package/src/components/calendar.tsx +2 -2
  85. package/src/components/circular-progress.tsx +1 -1
  86. package/src/components/command.tsx +2 -2
  87. package/src/components/currency-input.tsx +1 -1
  88. package/src/components/description-list.tsx +1 -1
  89. package/src/components/dropdown-menu.tsx +1 -1
  90. package/src/components/field.tsx +1 -1
  91. package/src/components/input-group.tsx +1 -1
  92. package/src/components/input.tsx +1 -1
  93. package/src/components/item.tsx +1 -1
  94. package/src/components/kbd.tsx +1 -1
  95. package/src/components/label.tsx +1 -1
  96. package/src/components/place-about-tab.tsx +131 -18
  97. package/src/components/place-card.tsx +1 -1
  98. package/src/components/place-details-mobile.tsx +2 -2
  99. package/src/components/popover.tsx +9 -1
  100. package/src/components/select.tsx +2 -2
  101. package/src/components/selection-bar.tsx +1 -1
  102. package/src/components/sheet.tsx +72 -12
  103. package/src/components/sliding-panels.stories.tsx +70 -0
  104. package/src/components/sliding-panels.test.tsx +116 -0
  105. package/src/components/sliding-panels.tsx +14 -0
  106. package/src/components/sonner.tsx +2 -2
  107. package/src/components/stepper.tsx +4 -1
  108. package/src/components/table.tsx +1 -1
  109. package/src/components/tabs.tsx +1 -1
  110. package/src/components/tag-group.tsx +1 -1
  111. package/src/components/tag.tsx +1 -1
  112. package/src/components/text.test.tsx +37 -3
  113. package/src/components/text.tsx +32 -3
  114. package/src/components/toggle.tsx +1 -1
  115. package/src/globals.css +53 -11
  116. package/src/lib/card-hover.ts +87 -0
  117. package/dist/chunk-EBAMCZDW.js +0 -112
  118. package/dist/chunk-VQNDZVI7.js +0 -106
  119. package/dist/components/toast.d.ts +0 -18
  120. package/dist/components/toast.js +0 -3
  121. package/dist/components/toaster.d.ts +0 -5
  122. package/dist/components/toaster.js +0 -25
  123. package/dist/components/use-toast.d.ts +0 -42
  124. package/dist/components/use-toast.js +0 -2
  125. package/src/components/toast.stories.tsx +0 -63
  126. package/src/components/toast.tsx +0 -130
  127. package/src/components/toaster.tsx +0 -31
  128. 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
  },
@@ -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 };
@@ -24,13 +24,15 @@ var avatarVariants = cva(
24
24
  );
25
25
  var AvatarContext = React.createContext("default");
26
26
  var Avatar = React.forwardRef((_a, ref) => {
27
- var _b = _a, { className, size = "default" } = _b, props = __objRest(_b, ["className", "size"]);
28
- return /* @__PURE__ */ jsx(AvatarContext.Provider, { value: size, children: /* @__PURE__ */ jsx(
27
+ var _b = _a, { className, size } = _b, props = __objRest(_b, ["className", "size"]);
28
+ const inheritedSize = React.useContext(AvatarContext);
29
+ const resolvedSize = size != null ? size : inheritedSize;
30
+ return /* @__PURE__ */ jsx(AvatarContext.Provider, { value: resolvedSize, children: /* @__PURE__ */ jsx(
29
31
  AvatarPrimitive.Root,
30
32
  __spreadValues({
31
33
  ref,
32
34
  "data-slot": "avatar",
33
- className: cn(avatarVariants({ size }), className)
35
+ className: cn(avatarVariants({ size: resolvedSize }), className)
34
36
  }, props)
35
37
  ) });
36
38
  });
@@ -55,7 +57,7 @@ var AvatarFallback = React.forwardRef((_a, ref) => {
55
57
  ref,
56
58
  "data-slot": "avatar-fallback",
57
59
  className: cn(
58
- "flex size-full items-center justify-center rounded-full bg-muted font-medium text-muted-foreground",
60
+ "flex size-full items-center justify-center rounded-full bg-muted font-semibold text-muted-foreground",
59
61
  className
60
62
  )
61
63
  }, props)
@@ -71,8 +73,7 @@ var badgeOffset = {
71
73
  };
72
74
  var AvatarBadge = React.forwardRef((_a, ref) => {
73
75
  var _b = _a, { className, placement = "bottom-right", tone = "success" } = _b, props = __objRest(_b, ["className", "placement", "tone"]);
74
- var _a2;
75
- const size = (_a2 = React.useContext(AvatarContext)) != null ? _a2 : "default";
76
+ const size = React.useContext(AvatarContext);
76
77
  return /* @__PURE__ */ jsx(
77
78
  "span",
78
79
  __spreadValues({
@@ -92,12 +93,31 @@ var AvatarBadge = React.forwardRef((_a, ref) => {
92
93
  );
93
94
  });
94
95
  AvatarBadge.displayName = "AvatarBadge";
96
+ var avatarGroupOverflowVariants = cva(
97
+ "relative inline-flex shrink-0 items-center justify-center rounded-full bg-muted font-semibold text-muted-foreground ring-2 ring-background",
98
+ {
99
+ variants: {
100
+ size: {
101
+ xs: "size-6 text-[9px]",
102
+ sm: "size-8 text-[10px]",
103
+ default: "size-10 text-xs",
104
+ lg: "size-12 text-sm",
105
+ xl: "size-16 text-base"
106
+ }
107
+ },
108
+ defaultVariants: {
109
+ size: "default"
110
+ }
111
+ }
112
+ );
95
113
  var AvatarGroup = React.forwardRef((_a, ref) => {
96
- var _b = _a, { className, children, max, spacing = "default" } = _b, props = __objRest(_b, ["className", "children", "max", "spacing"]);
114
+ var _b = _a, { className, children, max, spacing = "default", size } = _b, props = __objRest(_b, ["className", "children", "max", "spacing", "size"]);
115
+ const inheritedSize = React.useContext(AvatarContext);
116
+ const resolvedSize = size != null ? size : inheritedSize;
97
117
  const items = React.Children.toArray(children);
98
118
  const visible = max ? items.slice(0, max) : items;
99
119
  const overflow = max ? items.length - max : 0;
100
- return /* @__PURE__ */ jsxs(
120
+ return /* @__PURE__ */ jsx(AvatarContext.Provider, { value: resolvedSize, children: /* @__PURE__ */ jsxs(
101
121
  "div",
102
122
  __spreadProps(__spreadValues({
103
123
  ref,
@@ -113,14 +133,21 @@ var AvatarGroup = React.forwardRef((_a, ref) => {
113
133
  }, props), {
114
134
  children: [
115
135
  visible,
116
- overflow > 0 && /* @__PURE__ */ jsxs("span", { className: "relative inline-flex size-10 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background", children: [
117
- "+",
118
- overflow
119
- ] })
136
+ overflow > 0 && /* @__PURE__ */ jsxs(
137
+ "span",
138
+ {
139
+ "data-slot": "avatar-group-overflow",
140
+ className: avatarGroupOverflowVariants({ size: resolvedSize }),
141
+ children: [
142
+ "+",
143
+ overflow
144
+ ]
145
+ }
146
+ )
120
147
  ]
121
148
  })
122
- );
149
+ ) });
123
150
  });
124
151
  AvatarGroup.displayName = "AvatarGroup";
125
152
 
126
- export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarImage, avatarVariants };
153
+ export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarImage, avatarGroupOverflowVariants, avatarVariants };
@@ -4,11 +4,20 @@ 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" | "brown" | "success" | "warning" | "overlay" | 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> {
11
+ /**
12
+ * Element to render. Defaults to `div`.
13
+ *
14
+ * Use `"span"` when the badge sits inside a `<button>` or a `<p>` — their
15
+ * content model is phrasing content, so a `div` in there is invalid HTML.
16
+ * That is the common case for a badge sitting inline with a title on a
17
+ * clickable row.
18
+ */
19
+ as?: "div" | "span";
11
20
  }
12
- declare function Badge({ className, variant, live, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
21
+ declare function Badge({ className, variant, live, as: Tag, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
13
22
 
14
23
  export { Badge, type BadgeProps, badgeVariants };
@@ -1,3 +1,3 @@
1
- export { Badge, badgeVariants } from '../chunk-TL4YU2O5.js';
1
+ export { Badge, badgeVariants } from '../chunk-UKBNQO6Q.js';
2
2
  import '../chunk-FEK5XGZW.js';
3
3
  import '../chunk-3GWWZKX7.js';
@@ -60,7 +60,7 @@ function BreadcrumbPage(_a) {
60
60
  role: "link",
61
61
  "aria-disabled": "true",
62
62
  "aria-current": "page",
63
- className: cn("font-medium text-foreground", className)
63
+ className: cn("font-semibold text-foreground", className)
64
64
  }, props)
65
65
  );
66
66
  }
@@ -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" | "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;
@@ -1,4 +1,4 @@
1
- export { Button, buttonVariants } from '../chunk-ZFNOCP6W.js';
1
+ export { Button, buttonVariants } from '../chunk-H3BV4VAG.js';
2
2
  import '../chunk-R47NEOSI.js';
3
3
  import '../chunk-FEK5XGZW.js';
4
4
  import '../chunk-3GWWZKX7.js';