@bearmenu/ui 0.8.13 → 0.8.15

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 (294) hide show
  1. package/README.md +0 -1
  2. package/dist/{chunk-66MAPLXS.js → chunk-2ADCZXZJ.js} +1 -1
  3. package/dist/{chunk-2DEIXTBN.js → chunk-2ZXIXQIU.js} +1 -1
  4. package/dist/{chunk-YOKHBAIH.js → chunk-4OF4T4AI.js} +12 -11
  5. package/dist/{chunk-MZL7CGCL.js → chunk-4XDJXMLF.js} +2 -2
  6. package/dist/{chunk-VAXOQS7W.js → chunk-5FCC5L5F.js} +3 -3
  7. package/dist/{chunk-YYGB4G4Q.js → chunk-CZK2MRS2.js} +1 -1
  8. package/dist/chunk-DJD3EMPK.js +126 -0
  9. package/dist/chunk-EZG2NELX.js +5 -0
  10. package/dist/{chunk-VG3PND3D.js → chunk-FMTJGO76.js} +1 -1
  11. package/dist/{chunk-UXWAOISG.js → chunk-FVSKGCK3.js} +2 -2
  12. package/dist/{chunk-2XCZJWTV.js → chunk-GNCWJWFE.js} +1 -1
  13. package/dist/{chunk-X3WMRKOW.js → chunk-HDR7V6IZ.js} +1 -1
  14. package/dist/{chunk-HSIYYA2E.js → chunk-HQU6QVAN.js} +5 -5
  15. package/dist/chunk-I5V446BX.js +27 -0
  16. package/dist/{chunk-WCTHZKU7.js → chunk-ICOU5QHT.js} +1 -1
  17. package/dist/{chunk-G7IFL4Z4.js → chunk-L3VEMP5A.js} +57 -9
  18. package/dist/chunk-LQWGZIYA.js +5 -0
  19. package/dist/{chunk-XNA2INVQ.js → chunk-MCOHLWRS.js} +2 -2
  20. package/dist/{chunk-3GWWZKX7.js → chunk-MMUBH76A.js} +21 -1
  21. package/dist/{chunk-ZDAHKI3A.js → chunk-MWB7S54O.js} +1 -1
  22. package/dist/{chunk-D5QHEHXJ.js → chunk-NMEVJT5Q.js} +1 -1
  23. package/dist/{chunk-3TNPSN4D.js → chunk-NSNEANOQ.js} +2 -2
  24. package/dist/{chunk-WSRWFA6K.js → chunk-NWZGSLPU.js} +1 -1
  25. package/dist/{chunk-LEAYBICI.js → chunk-OIV7B44M.js} +1 -1
  26. package/dist/{chunk-2CXU5WZO.js → chunk-P43B3ONY.js} +1 -1
  27. package/dist/{chunk-FRPPIXMY.js → chunk-PDTPO6NG.js} +1 -1
  28. package/dist/{chunk-6XMYEZVR.js → chunk-PX6RICS5.js} +1 -1
  29. package/dist/{chunk-6TEEY5YA.js → chunk-S33K4RC5.js} +1 -1
  30. package/dist/{chunk-3VMDCCCX.js → chunk-SC2VUTUI.js} +1 -1
  31. package/dist/{chunk-3NMG3KNA.js → chunk-SXQZ7DLH.js} +3 -3
  32. package/dist/{chunk-UDTG3RSE.js → chunk-T6S2ZBV6.js} +2 -2
  33. package/dist/{chunk-R47NEOSI.js → chunk-V4E333QS.js} +29 -4
  34. package/dist/{chunk-FKNBZF5T.js → chunk-WYTJR2YU.js} +1 -1
  35. package/dist/{chunk-QXHMPJ35.js → chunk-XBBEX4SF.js} +1 -1
  36. package/dist/chunk-XCB3F6SF.js +16 -0
  37. package/dist/{chunk-7BWTYWM3.js → chunk-ZLMRVBD7.js} +1 -1
  38. package/dist/{chunk-P7XTW2CG.js → chunk-ZLPWEHZO.js} +1 -1
  39. package/dist/components/accordion.js +1 -1
  40. package/dist/components/alert-dialog.js +3 -3
  41. package/dist/components/alert.js +2 -2
  42. package/dist/components/aspect-ratio.js +2 -2
  43. package/dist/components/avatar.js +1 -1
  44. package/dist/components/badge.js +2 -2
  45. package/dist/components/breadcrumb.js +1 -1
  46. package/dist/components/button-group.js +1 -1
  47. package/dist/components/button.d.ts +4 -0
  48. package/dist/components/button.js +3 -3
  49. package/dist/components/calendar.js +3 -3
  50. package/dist/components/card.js +3 -3
  51. package/dist/components/carousel.js +3 -3
  52. package/dist/components/category-deck.js +2 -2
  53. package/dist/components/checkbox.js +2 -2
  54. package/dist/components/circular-progress.js +1 -1
  55. package/dist/components/collapsible.js +1 -1
  56. package/dist/components/combobox.js +6 -6
  57. package/dist/components/command.js +3 -3
  58. package/dist/components/concept-card.js +2 -2
  59. package/dist/components/concept-compare-rail.js +3 -3
  60. package/dist/components/concept-compare.d.ts +2 -1
  61. package/dist/components/concept-compare.js +5 -5
  62. package/dist/components/concept-convergence.js +4 -4
  63. package/dist/components/convergence.js +3 -3
  64. package/dist/components/coverflow.js +1 -1
  65. package/dist/components/currency-input.js +2 -2
  66. package/dist/components/date-input.js +2 -2
  67. package/dist/components/day-rail-chip.js +2 -2
  68. package/dist/components/description-list.js +1 -1
  69. package/dist/components/dialog.js +2 -2
  70. package/dist/components/doorway-tiles.d.ts +57 -0
  71. package/dist/components/doorway-tiles.js +86 -0
  72. package/dist/components/drawer.js +1 -1
  73. package/dist/components/drift-rail.js +1 -1
  74. package/dist/components/dropdown-menu.js +1 -1
  75. package/dist/components/empty-state.js +4 -4
  76. package/dist/components/event-card.js +4 -4
  77. package/dist/components/event-compact-row.js +4 -4
  78. package/dist/components/event-day-header.js +2 -2
  79. package/dist/components/event-day-separator.js +3 -3
  80. package/dist/components/event-detail-panel.js +5 -5
  81. package/dist/components/event-hub-hero.js +2 -2
  82. package/dist/components/event-index-row.js +4 -4
  83. package/dist/components/event-list-row-wide.js +6 -6
  84. package/dist/components/event-list-row.js +5 -5
  85. package/dist/components/event-poster-fallback.js +1 -1
  86. package/dist/components/event-types.js +1 -1
  87. package/dist/components/events-empty-state.js +1 -1
  88. package/dist/components/explainer-steps.js +1 -1
  89. package/dist/components/facet-group.js +2 -2
  90. package/dist/components/featured-rail-item.js +2 -2
  91. package/dist/components/field.js +2 -2
  92. package/dist/components/filter-category-row.js +3 -3
  93. package/dist/components/form.js +2 -2
  94. package/dist/components/glass-ground.js +2 -2
  95. package/dist/components/grade-atom.d.ts +3 -0
  96. package/dist/components/grade-atom.js +4 -0
  97. package/dist/components/hour-band.js +4 -4
  98. package/dist/components/hour-group.js +4 -4
  99. package/dist/components/hub-surface.js +1 -1
  100. package/dist/components/hue-chip.js +1 -1
  101. package/dist/components/icon.js +1 -1
  102. package/dist/components/input-group.js +1 -1
  103. package/dist/components/input-otp.js +1 -1
  104. package/dist/components/input.js +2 -2
  105. package/dist/components/item.js +1 -1
  106. package/dist/components/kbd.js +1 -1
  107. package/dist/components/kitchen-dossier.d.ts +2 -1
  108. package/dist/components/kitchen-dossier.js +4 -4
  109. package/dist/components/label.js +2 -2
  110. package/dist/components/lazy-markdown.js +1 -1
  111. package/dist/components/link-button.js +3 -3
  112. package/dist/components/markdown-renderer.js +1 -1
  113. package/dist/components/menu-dead-end.d.ts +2 -1
  114. package/dist/components/menu-dead-end.js +1 -1
  115. package/dist/components/menu-family-block.d.ts +2 -1
  116. package/dist/components/menu-family-block.js +15 -9
  117. package/dist/components/menu-family-card.d.ts +2 -1
  118. package/dist/components/menu-family-card.js +1 -1
  119. package/dist/components/menu-field.js +1 -1
  120. package/dist/components/menu-filter-chips.d.ts +2 -1
  121. package/dist/components/menu-filter-chips.js +3 -3
  122. package/dist/components/menu-group-rows.d.ts +2 -1
  123. package/dist/components/menu-group-rows.js +2 -2
  124. package/dist/components/menu-hub-hero.js +1 -1
  125. package/dist/components/menu-index-header.d.ts +2 -1
  126. package/dist/components/menu-index-header.js +2 -2
  127. package/dist/components/menu-index-list.d.ts +2 -1
  128. package/dist/components/menu-index-list.js +5 -5
  129. package/dist/components/menu-intent-hero.d.ts +3 -2
  130. package/dist/components/menu-intent-hero.js +1 -1
  131. package/dist/components/menu-item.d.ts +2 -1
  132. package/dist/components/menu-item.js +4 -4
  133. package/dist/components/menu-kitchen-list.d.ts +2 -1
  134. package/dist/components/menu-kitchen-list.js +4 -4
  135. package/dist/components/menu-mocks.d.ts +16 -5
  136. package/dist/components/menu-mocks.js +23 -2
  137. package/dist/components/menu-types.d.ts +21 -34
  138. package/dist/components/motion-icon-actions.d.ts +27 -0
  139. package/dist/components/motion-icon-actions.js +336 -0
  140. package/dist/components/motion-icon-controls.js +3 -3
  141. package/dist/components/motion-icon-set.d.ts +13 -1
  142. package/dist/components/motion-icon-set.js +197 -6
  143. package/dist/components/motion-icon.d.ts +15 -1
  144. package/dist/components/motion-icon.js +2 -2
  145. package/dist/components/multi-select-combobox.js +8 -8
  146. package/dist/components/multi-select-menu.js +2 -2
  147. package/dist/components/native-select.js +1 -1
  148. package/dist/components/open-now-list.d.ts +2 -1
  149. package/dist/components/open-now-list.js +2 -2
  150. package/dist/components/pagination.js +3 -3
  151. package/dist/components/phone-frame.js +1 -1
  152. package/dist/components/photo-ground.js +1 -1
  153. package/dist/components/place-about-tab.d.ts +2 -1
  154. package/dist/components/place-about-tab.js +6 -6
  155. package/dist/components/place-card.d.ts +94 -12
  156. package/dist/components/place-card.js +203 -128
  157. package/dist/components/place-details-mobile.d.ts +2 -1
  158. package/dist/components/place-details-mobile.js +7 -7
  159. package/dist/components/place-schedule-week.d.ts +2 -1
  160. package/dist/components/place-schedule-week.js +3 -3
  161. package/dist/components/place-types.d.ts +3 -265
  162. package/dist/components/popover.js +2 -2
  163. package/dist/components/poster-stack.js +1 -1
  164. package/dist/components/poster-tape.js +1 -1
  165. package/dist/components/poster-wall.d.ts +22 -6
  166. package/dist/components/poster-wall.js +197 -12
  167. package/dist/components/progress.js +1 -1
  168. package/dist/components/qa-block.d.ts +2 -1
  169. package/dist/components/qa-block.js +1 -1
  170. package/dist/components/quiet-stretch.js +1 -1
  171. package/dist/components/radio-group.js +1 -1
  172. package/dist/components/rating.js +1 -1
  173. package/dist/components/scroll-area.js +1 -1
  174. package/dist/components/scroll-fade.js +2 -2
  175. package/dist/components/search-bar.js +1 -1
  176. package/dist/components/searchable-select.js +6 -6
  177. package/dist/components/section-header.js +2 -2
  178. package/dist/components/segmented-nav.d.ts +24 -4
  179. package/dist/components/segmented-nav.js +11 -2
  180. package/dist/components/select.js +1 -1
  181. package/dist/components/selection-bar.js +1 -1
  182. package/dist/components/separator.js +2 -2
  183. package/dist/components/sheet.js +1 -1
  184. package/dist/components/signature-chip.js +3 -3
  185. package/dist/components/skeleton-card.js +3 -3
  186. package/dist/components/skeleton.js +2 -2
  187. package/dist/components/slider.js +1 -1
  188. package/dist/components/sliding-panels.js +3 -3
  189. package/dist/components/snap-rail.js +2 -2
  190. package/dist/components/sonner.js +1 -1
  191. package/dist/components/sort-option-list.js +1 -1
  192. package/dist/components/spinner.js +1 -1
  193. package/dist/components/stat-banner.js +1 -1
  194. package/dist/components/stepper.js +1 -1
  195. package/dist/components/sticky-container.js +1 -1
  196. package/dist/components/story.js +1 -1
  197. package/dist/components/switch.js +1 -1
  198. package/dist/components/table.js +1 -1
  199. package/dist/components/tabs.js +2 -2
  200. package/dist/components/tag-group.js +2 -2
  201. package/dist/components/tag.js +2 -2
  202. package/dist/components/text.js +2 -2
  203. package/dist/components/textarea.js +1 -1
  204. package/dist/components/timeline-band.js +4 -4
  205. package/dist/components/timeline-playhead.js +4 -4
  206. package/dist/components/toggle-group.js +2 -2
  207. package/dist/components/toggle.js +2 -2
  208. package/dist/components/tooltip.js +1 -1
  209. package/dist/components/top-comparison.d.ts +2 -1
  210. package/dist/components/top-comparison.js +1 -1
  211. package/dist/components/top-cross-link.d.ts +2 -1
  212. package/dist/components/top-cross-link.js +1 -1
  213. package/dist/components/top-ranking-entry.d.ts +2 -1
  214. package/dist/components/top-ranking-entry.js +6 -6
  215. package/dist/components/top-ranking-hero.d.ts +2 -1
  216. package/dist/components/top-ranking-hero.js +1 -1
  217. package/dist/components/top-ranking-legend.js +1 -1
  218. package/dist/components/top-types.d.ts +3 -1
  219. package/dist/components/use-mobile.js +1 -1
  220. package/dist/components/venue-events-block.js +5 -5
  221. package/dist/components/venue-grade-dimensions.d.ts +2 -1
  222. package/dist/components/venue-grade-dimensions.js +1 -1
  223. package/dist/components/venue-quotes.d.ts +2 -1
  224. package/dist/components/venue-quotes.js +1 -1
  225. package/dist/components/venue-wall.d.ts +2 -1
  226. package/dist/components/venue-wall.js +1 -1
  227. package/dist/components/weekday-theme-banner.js +1 -1
  228. package/dist/components/weekend-panel.js +4 -4
  229. package/dist/hooks/use-drag-swipe.js +1 -1
  230. package/dist/hooks/use-haptic.js +2 -2
  231. package/dist/hooks/use-media-query.js +1 -1
  232. package/dist/hooks/use-mobile.js +1 -1
  233. package/dist/hooks/use-mounted-theme.js +1 -1
  234. package/dist/hooks/use-sticky.js +1 -1
  235. package/dist/lib/card-hover.js +2 -18
  236. package/dist/lib/grade.d.ts +54 -0
  237. package/dist/lib/grade.js +2 -0
  238. package/dist/lib/icon-depth.d.ts +35 -0
  239. package/dist/lib/icon-depth.js +2 -0
  240. package/dist/lib/icon-registry.js +1 -1
  241. package/dist/lib/motion.js +2 -2
  242. package/dist/lib/overlay-pill.d.ts +30 -0
  243. package/dist/lib/overlay-pill.js +2 -0
  244. package/dist/lib/utils.js +1 -1
  245. package/dist/place-types-BHdeMMiG.d.ts +317 -0
  246. package/package.json +1 -1
  247. package/src/components/button.tsx +5 -1
  248. package/src/components/colour-dictionary.stories.tsx +268 -82
  249. package/src/components/doorway-tiles.stories.tsx +83 -0
  250. package/src/components/doorway-tiles.test.tsx +51 -0
  251. package/src/components/doorway-tiles.tsx +225 -0
  252. package/src/components/grade-atom.stories.tsx +81 -0
  253. package/src/components/grade-atom.tsx +256 -0
  254. package/src/components/hue-chip.stories.tsx +2 -2
  255. package/src/components/menu-family-block.stories.tsx +29 -0
  256. package/src/components/menu-family-block.test.tsx +51 -0
  257. package/src/components/menu-family-block.tsx +20 -4
  258. package/src/components/menu-intent-hero.tsx +1 -1
  259. package/src/components/menu-mocks.ts +39 -3
  260. package/src/components/menu-types.ts +17 -33
  261. package/src/components/motion-icon-actions.test.tsx +115 -0
  262. package/src/components/motion-icon-actions.tsx +580 -0
  263. package/src/components/motion-icon-controls.test.tsx +1 -0
  264. package/src/components/motion-icon-controls.tsx +18 -13
  265. package/src/components/motion-icon-set.stories.tsx +62 -3
  266. package/src/components/motion-icon-set.tsx +349 -2
  267. package/src/components/motion-icon.test.tsx +180 -1
  268. package/src/components/motion-icon.tsx +97 -8
  269. package/src/components/place-card.stories.tsx +66 -76
  270. package/src/components/place-card.test.tsx +188 -100
  271. package/src/components/place-card.tsx +356 -148
  272. package/src/components/place-types.ts +17 -4
  273. package/src/components/poster-wall.stories.tsx +84 -0
  274. package/src/components/poster-wall.test.tsx +94 -3
  275. package/src/components/poster-wall.tsx +257 -9
  276. package/src/components/segmented-nav.stories.tsx +72 -1
  277. package/src/components/segmented-nav.test.tsx +96 -0
  278. package/src/components/segmented-nav.tsx +36 -4
  279. package/src/globals.css +26 -0
  280. package/src/hooks/use-haptic.test.tsx +80 -0
  281. package/src/hooks/use-haptic.ts +45 -4
  282. package/src/lib/grade.test.ts +82 -0
  283. package/src/lib/grade.ts +76 -0
  284. package/src/lib/icon-depth.ts +35 -0
  285. package/src/lib/overlay-pill.ts +29 -0
  286. package/dist/components/haptic-button.d.ts +0 -12
  287. package/dist/components/haptic-button.js +0 -17
  288. package/dist/components/menu-family-tiles.d.ts +0 -19
  289. package/dist/components/menu-family-tiles.js +0 -57
  290. package/src/components/haptic-button.stories.tsx +0 -41
  291. package/src/components/haptic-button.tsx +0 -19
  292. package/src/components/menu-family-tiles.stories.tsx +0 -54
  293. package/src/components/menu-family-tiles.test.tsx +0 -30
  294. package/src/components/menu-family-tiles.tsx +0 -132
@@ -1,9 +1,8 @@
1
- import { beats, pivot, MotionIcon, returnTransition } from '../chunk-G7IFL4Z4.js';
1
+ import { beats, pivot, returnTransition, MotionIcon, useSvgId } from '../chunk-L3VEMP5A.js';
2
2
  import '../chunk-FEK5XGZW.js';
3
- import { __spreadProps, __spreadValues } from '../chunk-3GWWZKX7.js';
4
- import * as React from 'react';
3
+ import { __spreadProps, __spreadValues } from '../chunk-MMUBH76A.js';
5
4
  import { motion } from 'framer-motion';
6
- import { jsxs, jsx } from 'react/jsx-runtime';
5
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
6
 
8
7
  var HOUSE_TIMES = [0, 0.16, 0.44, 0.72, 1];
9
8
  var houseRoof = {
@@ -137,7 +136,7 @@ var reel = {
137
136
  }
138
137
  };
139
138
  function MotionCalendar(props) {
140
- const clipId = `cal-body-${React.useId().replace(/:/g, "")}`;
139
+ const clipId = useSvgId("cal-body");
141
140
  return /* @__PURE__ */ jsxs(MotionIcon, __spreadProps(__spreadValues({}, props), { children: [
142
141
  /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: clipId, children: /* @__PURE__ */ jsx("rect", { x: "3.5", y: "10.5", width: "17", height: "11", rx: "1.5" }) }) }),
143
142
  /* @__PURE__ */ jsx("path", { d: "M8 2v4" }),
@@ -147,5 +146,197 @@ function MotionCalendar(props) {
147
146
  /* @__PURE__ */ jsx("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ jsx(motion.g, { variants: reel, children: ROWS.map((y) => COLS.map((x) => /* @__PURE__ */ jsx("path", { d: `M${x} ${y}h.01` }, `${x}-${y}`))) }) })
148
147
  ] }));
149
148
  }
149
+ var GRID_TIMES = [0, 0.14, 0.6, 0.8, 1];
150
+ var GRID_PITCH = 11;
151
+ var GRID_CHASE = 0.03;
152
+ var slide = (direction) => [0, -1.5, GRID_PITCH + 1.5, GRID_PITCH - 0.4, GRID_PITCH].map((v) => v * direction);
153
+ var chase = (order) => __spreadProps(__spreadValues({}, beats(GRID_TIMES, 0.58)), { delay: order * GRID_CHASE });
154
+ function tileAlongX(direction, order) {
155
+ return {
156
+ rest: { x: 0, transition: returnTransition },
157
+ active: { x: 0, transition: returnTransition },
158
+ play: { x: slide(direction), transition: chase(order) }
159
+ };
160
+ }
161
+ function tileAlongY(direction, order) {
162
+ return {
163
+ rest: { y: 0, transition: returnTransition },
164
+ active: { y: 0, transition: returnTransition },
165
+ play: { y: slide(direction), transition: chase(order) }
166
+ };
167
+ }
168
+ var tileTopLeft = tileAlongX(1, 0);
169
+ var tileTopRight = tileAlongY(1, 1);
170
+ var tileBottomRight = tileAlongX(-1, 2);
171
+ var tileBottomLeft = tileAlongY(-1, 3);
172
+ function MotionLayoutGrid(props) {
173
+ return /* @__PURE__ */ jsxs(MotionIcon, __spreadProps(__spreadValues({}, props), { children: [
174
+ /* @__PURE__ */ jsx(motion.rect, { variants: tileTopLeft, width: "7", height: "7", x: "3", y: "3", rx: "1" }),
175
+ /* @__PURE__ */ jsx(motion.rect, { variants: tileTopRight, width: "7", height: "7", x: "14", y: "3", rx: "1" }),
176
+ /* @__PURE__ */ jsx(motion.rect, { variants: tileBottomRight, width: "7", height: "7", x: "14", y: "14", rx: "1" }),
177
+ /* @__PURE__ */ jsx(motion.rect, { variants: tileBottomLeft, width: "7", height: "7", x: "3", y: "14", rx: "1" })
178
+ ] }));
179
+ }
180
+ var WINE_TIMES = [0, 0.16, 0.6, 0.78, 1];
181
+ var WINE_EMPTY = 15;
182
+ var WINE_LINE = 10;
183
+ var WINE_SLOSH = 8;
184
+ var liquid = {
185
+ rest: { attrY: WINE_EMPTY, transition: returnTransition },
186
+ active: { attrY: WINE_LINE, transition: returnTransition },
187
+ play: {
188
+ // Sits empty through the squat, rises past the line at the apex, drops
189
+ // back, settles on the line.
190
+ attrY: [WINE_EMPTY, WINE_EMPTY, WINE_SLOSH, WINE_LINE + 0.5, WINE_LINE],
191
+ transition: beats(WINE_TIMES)
192
+ }
193
+ };
194
+ var glass = {
195
+ rest: { scaleY: 1, transition: returnTransition },
196
+ active: { scaleY: 1, transition: returnTransition },
197
+ play: { scaleY: [1, 0.9, 1.03, 0.98, 1], transition: beats(WINE_TIMES) }
198
+ };
199
+ var BOWL = "M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z";
200
+ function MotionWine(props) {
201
+ const clipId = useSvgId("wine-bowl");
202
+ return /* @__PURE__ */ jsxs(MotionIcon, __spreadProps(__spreadValues({}, props), { children: [
203
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: clipId, children: /* @__PURE__ */ jsx("path", { d: BOWL }) }) }),
204
+ /* @__PURE__ */ jsxs(motion.g, { variants: glass, style: pivot(12, 22), children: [
205
+ /* @__PURE__ */ jsx("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ jsx(
206
+ motion.rect,
207
+ {
208
+ variants: liquid,
209
+ fill: "currentColor",
210
+ stroke: "none",
211
+ x: "6",
212
+ y: WINE_EMPTY,
213
+ width: "12",
214
+ height: "12"
215
+ }
216
+ ) }),
217
+ /* @__PURE__ */ jsx("path", { d: "M8 22h8" }),
218
+ /* @__PURE__ */ jsx("path", { d: "M7 10h10" }),
219
+ /* @__PURE__ */ jsx("path", { d: "M12 15v7" }),
220
+ /* @__PURE__ */ jsx("path", { d: BOWL })
221
+ ] })
222
+ ] }));
223
+ }
224
+ var MAP_TIMES = [0, 0.2, 0.5, 0.66, 0.84, 1];
225
+ var FOLD = [1, 0.2, 1.18, 0.94, 1.03, 1];
226
+ var panelRight = {
227
+ rest: { scaleX: 1, transition: returnTransition },
228
+ active: { scaleX: 1, transition: returnTransition },
229
+ play: { scaleX: FOLD, transition: beats(MAP_TIMES, 0.62) }
230
+ };
231
+ var panelLeft = {
232
+ rest: { scaleX: 1, transition: returnTransition },
233
+ active: { scaleX: 1, transition: returnTransition },
234
+ play: { scaleX: FOLD, transition: __spreadProps(__spreadValues({}, beats(MAP_TIMES, 0.62)), { delay: 0.06 }) }
235
+ };
236
+ function MotionMap(props) {
237
+ return /* @__PURE__ */ jsxs(MotionIcon, __spreadProps(__spreadValues({}, props), { children: [
238
+ /* @__PURE__ */ jsx("path", { d: "M14.106 5.553a2 2 0 0 0 1.788 0" }),
239
+ /* @__PURE__ */ jsx("path", { d: "M15.894 20.554a2 2 0 0 1-1.788 0l-4.212-2.106" }),
240
+ /* @__PURE__ */ jsx("path", { d: "M9.894 3.447 14.106 5.553" }),
241
+ /* @__PURE__ */ jsxs(motion.g, { variants: panelRight, style: pivot(15, 12), children: [
242
+ /* @__PURE__ */ jsx("path", { d: "M15.894 5.553l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277" }),
243
+ /* @__PURE__ */ jsx("path", { d: "M15 5.764v15" })
244
+ ] }),
245
+ /* @__PURE__ */ jsxs(motion.g, { variants: panelLeft, style: pivot(9, 12), children: [
246
+ /* @__PURE__ */ jsx("path", { d: "M9.894 18.448a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0" }),
247
+ /* @__PURE__ */ jsx("path", { d: "M9 3.236v15" })
248
+ ] })
249
+ ] }));
250
+ }
251
+ var FLAME_TIMES = [0, 0.16, 0.42, 0.58, 0.78, 1];
252
+ var flame = {
253
+ rest: { scaleY: 1, scaleX: 1, skewX: 0, fillOpacity: 0, transition: returnTransition },
254
+ active: { scaleY: 1, scaleX: 1, skewX: 0, fillOpacity: 0, transition: returnTransition },
255
+ play: {
256
+ scaleY: [1, 0.8, 1.38, 1.18, 0.96, 1],
257
+ scaleX: [1, 1.15, 0.82, 0.95, 1.03, 1],
258
+ skewX: [0, 0, -8, 7, -2, 0],
259
+ fillOpacity: [0, 0, 1, 1, 0.35, 0],
260
+ transition: beats(FLAME_TIMES)
261
+ }
262
+ };
263
+ function MotionFlame(props) {
264
+ return /* @__PURE__ */ jsx(MotionIcon, __spreadProps(__spreadValues({}, props), { children: /* @__PURE__ */ jsx(
265
+ motion.path,
266
+ {
267
+ variants: flame,
268
+ style: pivot(12, 22),
269
+ fill: "currentColor",
270
+ fillOpacity: 0,
271
+ d: "M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4"
272
+ }
273
+ ) }));
274
+ }
275
+ var CLOCK_TIMES = [0, 0.14, 0.62, 0.8, 1];
276
+ var minuteHand = {
277
+ rest: { rotate: 0, transition: returnTransition },
278
+ active: { rotate: 0, transition: returnTransition },
279
+ play: { rotate: [0, -14, 372, 360, 360], transition: beats(CLOCK_TIMES, 0.62) }
280
+ };
281
+ var elapsed = {
282
+ rest: { pathLength: 0, transition: returnTransition },
283
+ active: { pathLength: 0.34, transition: returnTransition },
284
+ play: { pathLength: [0, 0, 0.42, 0.31, 0.34], transition: beats(CLOCK_TIMES, 0.62) }
285
+ };
286
+ function MotionCalendarClock(props) {
287
+ return /* @__PURE__ */ jsxs(MotionIcon, __spreadProps(__spreadValues({}, props), { children: [
288
+ /* @__PURE__ */ jsx("path", { d: "M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5" }),
289
+ /* @__PURE__ */ jsx("path", { d: "M16 2v4" }),
290
+ /* @__PURE__ */ jsx("path", { d: "M8 2v4" }),
291
+ /* @__PURE__ */ jsx("path", { d: "M3 10h5" }),
292
+ /* @__PURE__ */ jsx("circle", { cx: "16", cy: "16", r: "6" }),
293
+ /* @__PURE__ */ jsx("g", { transform: "rotate(-90 16 16.2)", children: /* @__PURE__ */ jsx(
294
+ motion.circle,
295
+ {
296
+ variants: elapsed,
297
+ cx: "16",
298
+ cy: "16.2",
299
+ r: "2",
300
+ strokeWidth: 4,
301
+ strokeLinecap: "butt",
302
+ pathLength: 1,
303
+ strokeDasharray: "0 1"
304
+ }
305
+ ) }),
306
+ /* @__PURE__ */ jsx(motion.path, { variants: minuteHand, style: pivot(16, 16.2), d: "M16 14v2.2" }),
307
+ /* @__PURE__ */ jsx("path", { d: "M16 16.2l1.6 1" })
308
+ ] }));
309
+ }
310
+ var LIST_TIMES = [0, 0.14, 0.62, 0.8, 1];
311
+ var mover = {
312
+ rest: { y: 0, x: 0, scale: 1, transition: returnTransition },
313
+ active: { y: 0, x: 0, scale: 1, transition: returnTransition },
314
+ play: {
315
+ y: [0, 1.5, -15.2, -13.6, -14],
316
+ x: [0, 0, 2.5, 0.6, 0],
317
+ scale: [1, 1, 1.06, 1.02, 1],
318
+ transition: beats(LIST_TIMES, 0.6)
319
+ }
320
+ };
321
+ var dropSlot = (delay) => ({
322
+ rest: { y: 0, transition: returnTransition },
323
+ active: { y: 0, transition: returnTransition },
324
+ play: { y: [0, 0, 7.6, 6.7, 7], transition: __spreadProps(__spreadValues({}, beats([0, 0.22, 0.62, 0.8, 1], 0.6)), { delay }) }
325
+ });
326
+ var rowFirst = dropSlot(0.07);
327
+ var rowSecond = dropSlot(0);
328
+ function ListRow({ y }) {
329
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
330
+ /* @__PURE__ */ jsx("path", { d: `M3 ${y}h.01` }),
331
+ /* @__PURE__ */ jsx("path", { d: `M8 ${y}h13` })
332
+ ] });
333
+ }
334
+ function MotionList(props) {
335
+ return /* @__PURE__ */ jsxs(MotionIcon, __spreadProps(__spreadValues({}, props), { children: [
336
+ /* @__PURE__ */ jsx(motion.g, { variants: rowFirst, children: /* @__PURE__ */ jsx(ListRow, { y: 5 }) }),
337
+ /* @__PURE__ */ jsx(motion.g, { variants: rowSecond, children: /* @__PURE__ */ jsx(ListRow, { y: 12 }) }),
338
+ /* @__PURE__ */ jsx(motion.g, { variants: mover, style: pivot(3, 19), children: /* @__PURE__ */ jsx(ListRow, { y: 19 }) })
339
+ ] }));
340
+ }
150
341
 
151
- export { MotionCalendar, MotionHouse, MotionMapPin, MotionUtensils };
342
+ export { MotionCalendar, MotionCalendarClock, MotionFlame, MotionHouse, MotionLayoutGrid, MotionList, MotionMap, MotionMapPin, MotionUtensils, MotionWine };
@@ -56,10 +56,24 @@ declare function poses(rest: PoseValues, active: PoseValues, play: Record<string
56
56
  *
57
57
  * Both effects compare against a ref rather than trusting the dependency array,
58
58
  * so they fire once per actual change and not once per render.
59
+ *
60
+ * A gesture's last keyframe draws the same PICTURE as the held pose, but not
61
+ * always with the same VALUES: the grid's tiles end one slot around the
62
+ * board, the calendar's reel ends four rows up. Left there, the next `rest`
63
+ * tween would perform a second, backwards gesture on leave. So once `play`
64
+ * resolves the values snap — invisibly — to the pose they depict: `active`
65
+ * straight away if the state has arrived, else `rest` after a grace period
66
+ * that a late-arriving `active` cancels. Leaving while a play is in flight
67
+ * defers to that same snap rather than springing the parts back mid-gesture.
59
68
  */
60
69
  declare function useIconGesture(active: boolean, replayToken: number): framer_motion.LegacyAnimationControls;
70
+ /**
71
+ * An id safe inside `url(#…)`: React 18's `useId` contains colons, React 19's
72
+ * may contain guillemets, and neither survives a fragment reference.
73
+ */
74
+ declare function useSvgId(prefix: string): string;
61
75
  declare function MotionIcon({ active, replayToken, className, children, }: MotionIconProps & {
62
76
  children: React.ReactNode;
63
77
  }): react_jsx_runtime.JSX.Element;
64
78
 
65
- export { MotionIcon, type MotionIconProps, type MotionIconVariant, beats, pivot, poses, returnTransition, useIconGesture };
79
+ export { MotionIcon, type MotionIconProps, type MotionIconVariant, beats, pivot, poses, returnTransition, useIconGesture, useSvgId };
@@ -1,3 +1,3 @@
1
- export { MotionIcon, beats, pivot, poses, returnTransition, useIconGesture } from '../chunk-G7IFL4Z4.js';
1
+ export { MotionIcon, beats, pivot, poses, returnTransition, useIconGesture, useSvgId } from '../chunk-L3VEMP5A.js';
2
2
  import '../chunk-FEK5XGZW.js';
3
- import '../chunk-3GWWZKX7.js';
3
+ import '../chunk-MMUBH76A.js';
@@ -1,12 +1,12 @@
1
- import { Popover, PopoverTrigger, PopoverContent } from '../chunk-66MAPLXS.js';
2
- import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../chunk-XNA2INVQ.js';
3
- import '../chunk-FRPPIXMY.js';
4
- import { Checkbox } from '../chunk-D5QHEHXJ.js';
5
- import { Button } from '../chunk-VAXOQS7W.js';
6
- import '../chunk-R47NEOSI.js';
7
- import { Badge } from '../chunk-2CXU5WZO.js';
1
+ import { Popover, PopoverTrigger, PopoverContent } from '../chunk-2ADCZXZJ.js';
2
+ import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../chunk-MCOHLWRS.js';
3
+ import '../chunk-PDTPO6NG.js';
4
+ import { Checkbox } from '../chunk-NMEVJT5Q.js';
5
+ import { Button } from '../chunk-5FCC5L5F.js';
6
+ import '../chunk-V4E333QS.js';
7
+ import { Badge } from '../chunk-P43B3ONY.js';
8
8
  import { cn } from '../chunk-FEK5XGZW.js';
9
- import '../chunk-3GWWZKX7.js';
9
+ import '../chunk-MMUBH76A.js';
10
10
  import * as React from 'react';
11
11
  import { ChevronsUpDown, X } from 'lucide-react';
12
12
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
- import { Checkbox } from '../chunk-D5QHEHXJ.js';
1
+ import { Checkbox } from '../chunk-NMEVJT5Q.js';
2
2
  import { cn } from '../chunk-FEK5XGZW.js';
3
- import '../chunk-3GWWZKX7.js';
3
+ import '../chunk-MMUBH76A.js';
4
4
  import * as React from 'react';
5
5
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  import { cn } from '../chunk-FEK5XGZW.js';
2
- import { __objRest, __spreadProps, __spreadValues } from '../chunk-3GWWZKX7.js';
2
+ import { __objRest, __spreadProps, __spreadValues } from '../chunk-MMUBH76A.js';
3
3
  import * as React from 'react';
4
4
  import { ChevronDown } from 'lucide-react';
5
5
  import { cva } from 'class-variance-authority';
@@ -1,7 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { MenuVenuePreview, MenuLinkComponent, MenuLinkProps } from './menu-types.js';
3
3
  import 'react';
4
- import './place-types.js';
4
+ import '../place-types-BHdeMMiG.js';
5
+ import '../lib/grade.js';
5
6
 
6
7
  /**
7
8
  * OpenNowList — who is still serving, and until when.
@@ -1,6 +1,6 @@
1
- import { Separator } from '../chunk-WSRWFA6K.js';
1
+ import { Separator } from '../chunk-NWZGSLPU.js';
2
2
  import { cn } from '../chunk-FEK5XGZW.js';
3
- import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
3
+ import { __objRest, __spreadValues } from '../chunk-MMUBH76A.js';
4
4
  import { Clock, ChevronRight } from 'lucide-react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
@@ -1,7 +1,7 @@
1
- import { buttonVariants } from '../chunk-VAXOQS7W.js';
2
- import '../chunk-R47NEOSI.js';
1
+ import { buttonVariants } from '../chunk-5FCC5L5F.js';
2
+ import '../chunk-V4E333QS.js';
3
3
  import { cn } from '../chunk-FEK5XGZW.js';
4
- import { __objRest, __spreadValues, __spreadProps } from '../chunk-3GWWZKX7.js';
4
+ import { __objRest, __spreadValues, __spreadProps } from '../chunk-MMUBH76A.js';
5
5
  import { ChevronsLeftIcon, ChevronLeftIcon, ChevronRightIcon, ChevronsRightIcon, MoreHorizontalIcon } from 'lucide-react';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
@@ -1,5 +1,5 @@
1
1
  import { cn } from '../chunk-FEK5XGZW.js';
2
- import '../chunk-3GWWZKX7.js';
2
+ import '../chunk-MMUBH76A.js';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
5
5
  var SCREEN_ASPECT = 956 / 440;
@@ -1,3 +1,3 @@
1
1
  export { PHOTO_GROUND, PhotoGround } from '../chunk-CNJQUHCU.js';
2
2
  import '../chunk-FEK5XGZW.js';
3
- import '../chunk-3GWWZKX7.js';
3
+ import '../chunk-MMUBH76A.js';
@@ -1,5 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { PlacePreview, PlaceAboutTabLabels, PlaceLinkKind } from './place-types.js';
2
+ import { P as PlacePreview, b as PlaceAboutTabLabels, c as PlaceLinkKind } from '../place-types-BHdeMMiG.js';
3
+ import '../lib/grade.js';
3
4
 
4
5
  interface PlaceAboutTabProps {
5
6
  place: PlacePreview;
@@ -1,7 +1,7 @@
1
- export { PlaceAboutTab } from '../chunk-HSIYYA2E.js';
2
- import '../chunk-VG3PND3D.js';
3
- import '../chunk-ZDAHKI3A.js';
4
- import '../chunk-WSRWFA6K.js';
5
- import '../chunk-7BWTYWM3.js';
1
+ export { PlaceAboutTab } from '../chunk-HQU6QVAN.js';
2
+ import '../chunk-FMTJGO76.js';
3
+ import '../chunk-MWB7S54O.js';
4
+ import '../chunk-NWZGSLPU.js';
5
+ import '../chunk-ZLMRVBD7.js';
6
6
  import '../chunk-FEK5XGZW.js';
7
- import '../chunk-3GWWZKX7.js';
7
+ import '../chunk-MMUBH76A.js';
@@ -1,17 +1,99 @@
1
- import * as React from 'react';
2
- import { PlacePreview, PlaceCardLabels } from './place-types.js';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
3
+ import { ReactNode, MouseEvent } from 'react';
4
+ import { P as PlacePreview, d as PlaceCardLabels } from '../place-types-BHdeMMiG.js';
5
+ import '../lib/grade.js';
3
6
 
4
- interface PlaceCardProps {
7
+ /**
8
+ * PlaceCard — the 4:3 cover card every place rail and grid reuses.
9
+ *
10
+ * RENDERS AN ANCHOR WHENEVER `href` IS GIVEN. Pass `href` AND `onOpen`: the
11
+ * anchor is real for crawlers, middle-click and "open in new tab", while a
12
+ * plain left-click is intercepted to open the in-page drawer. Without `href`
13
+ * the root is a `role="button"` (Enter / Space open too).
14
+ *
15
+ * Like `event-card.tsx`, this takes a DS-owned view model, injected labels and
16
+ * injected framework pieces — no app schema, no app hooks, no i18n. The link
17
+ * and the image are both injectable: a plain `<a>` / `<img>` by default, and
18
+ * `next/link` / `next/image` in a Next app, so the consumer keeps its srcset,
19
+ * its priority preload and its image loader on the card that is its LCP.
20
+ */
21
+ type PlaceCardLinkProps = {
22
+ href: string;
23
+ className?: string;
24
+ children: ReactNode;
25
+ onClick?: (mouseEvent: MouseEvent<HTMLAnchorElement>) => void;
26
+ "aria-label"?: string;
27
+ };
28
+ type PlaceCardImageProps = {
29
+ src: string;
30
+ alt: string;
31
+ /** Responsive `sizes` hint; the default `<img>` ignores it. */
32
+ sizes: string;
33
+ /** The LCP candidate — preload / `loading="eager"`. */
34
+ priority: boolean;
35
+ /** Positions the image to fill the 4:3 box (`absolute inset-0 h-full w-full object-cover` + hover motion). */
36
+ className: string;
37
+ onError: () => void;
38
+ };
39
+ type PlaceCardProps = {
5
40
  place: PlacePreview;
6
41
  labels: PlaceCardLabels;
7
- /** Locale tag (e.g. `"en"`, `"ro"`). Reserved for future Intl number/distance formatting. */
8
- locale?: string;
9
- /** Optional click handler. When omitted the card renders as a non-interactive div. */
10
- onClick?: (place: PlacePreview) => void;
11
- className?: string;
12
- /** Forwarded to the thumbnail's `loading` attribute (`"eager"` when true). */
42
+ /** Marks this as the LCP candidate forwarded to `imageComponent`. */
13
43
  priority?: boolean;
14
- }
15
- declare const PlaceCard: React.NamedExoticComponent<PlaceCardProps>;
44
+ /**
45
+ * Responsive image `sizes` hint. Defaults to a viewport-width formula for
46
+ * grid layouts; rail callers (220px-wide carousels) should pass `"220px"` so
47
+ * the browser doesn't download a viewport-width variant for a tiny card.
48
+ */
49
+ imageSizes?: string;
50
+ /**
51
+ * Real detail-page URL. When set the card root renders as a crawlable
52
+ * anchor; a plain left-click is still intercepted to call `onOpen`, while
53
+ * modified / middle-clicks navigate. When omitted the root is a
54
+ * `role="button"`.
55
+ */
56
+ href?: string;
57
+ /**
58
+ * Defaults to a plain `<a>`. Pass a ref-forwarding `next/link` adapter in a
59
+ * Next app. MUST be module-scoped: the root is `motion.create(linkComponent)`
60
+ * keyed on its identity, so an inline component remounts the card (and
61
+ * re-requests its cover) on every render.
62
+ */
63
+ linkComponent?: React.ComponentType<PlaceCardLinkProps>;
64
+ /** Defaults to a plain `<img>`. Pass a `next/image` adapter in a Next app. Module-scoped, like `linkComponent`. */
65
+ imageComponent?: React.ComponentType<PlaceCardImageProps>;
66
+ /** Opens the in-page drawer / sheet. A left-click on the anchor is prevented in favour of this. */
67
+ onOpen?: (place: PlacePreview) => void;
68
+ /**
69
+ * Optional non-interactive context slot rendered below the place's own
70
+ * info rows, e.g. concept page: "Served as X / 45 RON / 300g". MUST be
71
+ * display-only — no buttons or links — since the card itself is the click
72
+ * target.
73
+ */
74
+ footer?: ReactNode;
75
+ /**
76
+ * Rendered over the photo's top-left corner as a SIBLING of the interactive
77
+ * root, not a child — so it MAY be a button or link (e.g. a trending marker
78
+ * that opens a popover) without nesting interactives inside the card's
79
+ * anchor / `role="button"`. It lifts with the card via the shared
80
+ * `group/card` wrapper. The caller decides when it renders (fe gates its
81
+ * trending badge on the API's `trending` flag).
82
+ */
83
+ photoOverlay?: ReactNode;
84
+ className?: string;
85
+ };
86
+ declare const PlaceCard: React$1.NamedExoticComponent<PlaceCardProps>;
87
+ type PlaceCardSkeletonProps = {
88
+ /** Matches `PlaceCardProps["footer"]` — the caller's placeholder for its own footer, under the same divider. */
89
+ footer?: ReactNode;
90
+ className?: string;
91
+ };
92
+ /**
93
+ * Mirrors `<PlaceCard>`'s geometry so nothing shifts when data lands: the 4:3
94
+ * cover, the title row with its right-hand metric chip, the cuisine · price
95
+ * line and the location line.
96
+ */
97
+ declare function PlaceCardSkeleton({ footer, className }: PlaceCardSkeletonProps): react_jsx_runtime.JSX.Element;
16
98
 
17
- export { PlaceCard, type PlaceCardProps };
99
+ export { PlaceCard, type PlaceCardImageProps, type PlaceCardLinkProps, type PlaceCardProps, PlaceCardSkeleton, type PlaceCardSkeletonProps };