@wheelhouse/ui 0.2.2 → 0.2.4

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 (236) hide show
  1. package/dist/blocks/columns/columns-types.d.ts +40 -0
  2. package/dist/blocks/columns/columns-types.d.ts.map +1 -0
  3. package/dist/blocks/columns/columns-types.js +10 -0
  4. package/dist/blocks/columns/columns-utils.d.ts +13 -0
  5. package/dist/blocks/columns/columns-utils.d.ts.map +1 -0
  6. package/dist/blocks/columns/columns-utils.js +85 -0
  7. package/dist/blocks/columns/columns.d.ts +3 -0
  8. package/dist/blocks/columns/columns.d.ts.map +1 -0
  9. package/dist/blocks/columns/columns.js +79 -0
  10. package/dist/blocks/columns/columns.stories.d.ts +12 -0
  11. package/dist/blocks/columns/columns.stories.d.ts.map +1 -0
  12. package/dist/blocks/columns/columns.stories.js +67 -0
  13. package/dist/blocks/columns/index.d.ts +6 -0
  14. package/dist/blocks/columns/index.d.ts.map +1 -0
  15. package/dist/blocks/columns/index.js +3 -0
  16. package/dist/blocks/date-selector/date-selector-context.d.ts.map +1 -0
  17. package/dist/blocks/date-selector/date-selector-default-i18n.d.ts +10 -0
  18. package/dist/blocks/date-selector/date-selector-default-i18n.d.ts.map +1 -0
  19. package/dist/blocks/date-selector/date-selector-default-i18n.js +29 -0
  20. package/dist/blocks/date-selector/date-selector-i18n-resources.d.ts +11 -0
  21. package/dist/blocks/date-selector/date-selector-i18n-resources.d.ts.map +1 -0
  22. package/dist/blocks/date-selector/date-selector-i18n-resources.js +248 -0
  23. package/dist/blocks/date-selector/date-selector-i18n.shared.d.ts +12 -0
  24. package/dist/blocks/date-selector/date-selector-i18n.shared.d.ts.map +1 -0
  25. package/dist/blocks/date-selector/date-selector-i18n.shared.js +84 -0
  26. package/dist/{components → blocks}/date-selector/date-selector-parts.d.ts +9 -0
  27. package/dist/blocks/date-selector/date-selector-parts.d.ts.map +1 -0
  28. package/dist/{components → blocks}/date-selector/date-selector-parts.js +21 -6
  29. package/dist/{components → blocks}/date-selector/date-selector-types.d.ts +70 -0
  30. package/dist/blocks/date-selector/date-selector-types.d.ts.map +1 -0
  31. package/dist/{components → blocks}/date-selector/date-selector-types.js +22 -0
  32. package/dist/blocks/date-selector/date-selector-value.d.ts +81 -0
  33. package/dist/blocks/date-selector/date-selector-value.d.ts.map +1 -0
  34. package/dist/blocks/date-selector/date-selector-value.js +423 -0
  35. package/dist/{components → blocks}/date-selector/date-selector.d.ts +1 -1
  36. package/dist/blocks/date-selector/date-selector.d.ts.map +1 -0
  37. package/dist/blocks/date-selector/date-selector.js +191 -0
  38. package/dist/{components → blocks}/date-selector/date-selector.stories.d.ts +14 -0
  39. package/dist/blocks/date-selector/date-selector.stories.d.ts.map +1 -0
  40. package/dist/blocks/date-selector/date-selector.stories.js +299 -0
  41. package/dist/blocks/date-selector/index.d.ts +11 -0
  42. package/dist/blocks/date-selector/index.d.ts.map +1 -0
  43. package/dist/blocks/date-selector/index.js +8 -0
  44. package/dist/{components → blocks}/date-selector/use-date-selector.d.ts +4 -3
  45. package/dist/blocks/date-selector/use-date-selector.d.ts.map +1 -0
  46. package/dist/{components → blocks}/date-selector/use-date-selector.js +14 -8
  47. package/dist/blocks/floating-menu-widget/floating-menu-widget.d.ts +26 -0
  48. package/dist/blocks/floating-menu-widget/floating-menu-widget.d.ts.map +1 -0
  49. package/dist/blocks/floating-menu-widget/floating-menu-widget.js +200 -0
  50. package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.d.ts +15 -0
  51. package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.d.ts.map +1 -0
  52. package/dist/blocks/floating-menu-widget/floating-menu-widget.stories.js +22 -0
  53. package/dist/blocks/floating-menu-widget/index.d.ts +3 -0
  54. package/dist/blocks/floating-menu-widget/index.d.ts.map +1 -0
  55. package/dist/blocks/floating-menu-widget/index.js +1 -0
  56. package/dist/blocks/index.d.ts +5 -0
  57. package/dist/blocks/index.d.ts.map +1 -0
  58. package/dist/blocks/index.js +4 -0
  59. package/dist/blocks/navigation/index.d.ts +5 -0
  60. package/dist/blocks/navigation/index.d.ts.map +1 -0
  61. package/dist/blocks/navigation/index.js +2 -0
  62. package/dist/blocks/navigation/navigation-types.d.ts +60 -0
  63. package/dist/blocks/navigation/navigation-types.d.ts.map +1 -0
  64. package/dist/blocks/navigation/navigation-types.js +1 -0
  65. package/dist/blocks/navigation/navigation.d.ts +9 -0
  66. package/dist/blocks/navigation/navigation.d.ts.map +1 -0
  67. package/dist/blocks/navigation/navigation.demo.d.ts +4 -0
  68. package/dist/blocks/navigation/navigation.demo.d.ts.map +1 -0
  69. package/dist/blocks/navigation/navigation.demo.js +46 -0
  70. package/dist/blocks/navigation/navigation.js +98 -0
  71. package/dist/blocks/navigation/navigation.stories.d.ts +14 -0
  72. package/dist/blocks/navigation/navigation.stories.d.ts.map +1 -0
  73. package/dist/blocks/navigation/navigation.stories.js +16 -0
  74. package/dist/components/accordion/accordion.stories.js +1 -1
  75. package/dist/components/alert/alert.stories.js +1 -1
  76. package/dist/components/alert-dialog/alert-dialog.stories.js +1 -1
  77. package/dist/components/aspect-ratio/aspect-ratio.stories.js +1 -1
  78. package/dist/components/avatar/avatar.stories.js +1 -1
  79. package/dist/components/badge/badge.stories.js +1 -1
  80. package/dist/components/breadcrumb/breadcrumb.stories.js +1 -1
  81. package/dist/components/button/button.d.ts +18 -11
  82. package/dist/components/button/button.d.ts.map +1 -1
  83. package/dist/components/button/button.js +27 -14
  84. package/dist/components/button/button.stories.d.ts +11 -0
  85. package/dist/components/button/button.stories.d.ts.map +1 -1
  86. package/dist/components/button/button.stories.js +85 -1
  87. package/dist/components/button-group/button-group.d.ts +10 -4
  88. package/dist/components/button-group/button-group.d.ts.map +1 -1
  89. package/dist/components/button-group/button-group.js +15 -3
  90. package/dist/components/button-group/button-group.stories.js +1 -1
  91. package/dist/components/button-group/index.d.ts +2 -2
  92. package/dist/components/button-group/index.d.ts.map +1 -1
  93. package/dist/components/button-group/index.js +1 -1
  94. package/dist/components/calendar/calendar.stories.js +1 -1
  95. package/dist/components/card/card.stories.js +1 -1
  96. package/dist/components/checkbox/checkbox.stories.js +1 -1
  97. package/dist/components/collapsible/collapsible.stories.js +1 -1
  98. package/dist/components/combobox/combobox.stories.js +1 -1
  99. package/dist/components/command/command.stories.js +1 -1
  100. package/dist/components/context-menu/context-menu.stories.js +1 -1
  101. package/dist/components/dialog/dialog.stories.js +1 -1
  102. package/dist/components/direction/direction.stories.js +1 -1
  103. package/dist/components/drawer/drawer.stories.js +1 -1
  104. package/dist/components/dropdown-menu/dropdown-menu.d.ts +9 -2
  105. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  106. package/dist/components/dropdown-menu/dropdown-menu.js +4 -1
  107. package/dist/components/dropdown-menu/dropdown-menu.stories.js +1 -1
  108. package/dist/components/dropdown-menu/index.d.ts +2 -2
  109. package/dist/components/dropdown-menu/index.d.ts.map +1 -1
  110. package/dist/components/dropdown-menu/index.js +1 -1
  111. package/dist/components/empty/empty.stories.js +1 -1
  112. package/dist/components/field/field.stories.js +1 -1
  113. package/dist/components/filters/filter-date-metric-value.d.ts +32 -0
  114. package/dist/components/filters/filter-date-metric-value.d.ts.map +1 -0
  115. package/dist/components/filters/filter-date-metric-value.js +406 -0
  116. package/dist/components/filters/filter-fields-listing-demo.d.ts +12 -0
  117. package/dist/components/filters/filter-fields-listing-demo.d.ts.map +1 -0
  118. package/dist/components/filters/filter-fields-listing-demo.js +565 -0
  119. package/dist/components/filters/filters-defaults.d.ts +4 -0
  120. package/dist/components/filters/filters-defaults.d.ts.map +1 -1
  121. package/dist/components/filters/filters-defaults.js +59 -1
  122. package/dist/components/filters/filters-i18n-resources.d.ts +277 -0
  123. package/dist/components/filters/filters-i18n-resources.d.ts.map +1 -0
  124. package/dist/components/filters/filters-i18n-resources.js +276 -0
  125. package/dist/components/filters/filters-i18n.shared.d.ts +16 -0
  126. package/dist/components/filters/filters-i18n.shared.d.ts.map +1 -0
  127. package/dist/components/filters/filters-i18n.shared.js +111 -0
  128. package/dist/components/filters/filters-types.d.ts +40 -1
  129. package/dist/components/filters/filters-types.d.ts.map +1 -1
  130. package/dist/components/filters/filters-utils.d.ts +28 -1
  131. package/dist/components/filters/filters-utils.d.ts.map +1 -1
  132. package/dist/components/filters/filters-utils.js +102 -0
  133. package/dist/components/filters/filters.d.ts +21 -3
  134. package/dist/components/filters/filters.d.ts.map +1 -1
  135. package/dist/components/filters/filters.js +493 -290
  136. package/dist/components/filters/filters.stories.d.ts +107 -2
  137. package/dist/components/filters/filters.stories.d.ts.map +1 -1
  138. package/dist/components/filters/filters.stories.js +224 -30
  139. package/dist/components/filters/index.d.ts +4 -1
  140. package/dist/components/filters/index.d.ts.map +1 -1
  141. package/dist/components/filters/index.js +4 -1
  142. package/dist/components/frame/frame.stories.js +1 -1
  143. package/dist/components/hover-card/hover-card.stories.js +1 -1
  144. package/dist/components/index.d.ts +2 -2
  145. package/dist/components/index.d.ts.map +1 -1
  146. package/dist/components/index.js +2 -2
  147. package/dist/components/input/input.stories.js +1 -1
  148. package/dist/components/input-group/input-group.stories.js +1 -1
  149. package/dist/components/item/item.stories.js +1 -1
  150. package/dist/components/kbd/kbd.stories.js +1 -1
  151. package/dist/components/label/label.stories.js +1 -1
  152. package/dist/components/menubar/menubar.stories.js +1 -1
  153. package/dist/components/native-select/native-select.stories.js +1 -1
  154. package/dist/components/navigation-menu/navigation-menu.stories.js +1 -1
  155. package/dist/components/pagination/pagination.stories.js +1 -1
  156. package/dist/components/popover/index.d.ts +1 -0
  157. package/dist/components/popover/index.d.ts.map +1 -1
  158. package/dist/components/popover/index.js +1 -0
  159. package/dist/components/popover/popover-handle.d.ts +6 -0
  160. package/dist/components/popover/popover-handle.d.ts.map +1 -0
  161. package/dist/components/popover/popover-handle.js +6 -0
  162. package/dist/components/popover/popover.d.ts +41 -7
  163. package/dist/components/popover/popover.d.ts.map +1 -1
  164. package/dist/components/popover/popover.js +50 -3
  165. package/dist/components/popover/popover.stories.js +1 -1
  166. package/dist/components/progress/progress.js +1 -1
  167. package/dist/components/progress/progress.stories.d.ts +11 -2
  168. package/dist/components/progress/progress.stories.d.ts.map +1 -1
  169. package/dist/components/progress/progress.stories.js +78 -5
  170. package/dist/components/radio-group/radio-group.stories.js +1 -1
  171. package/dist/components/resizable/resizable.stories.js +1 -1
  172. package/dist/components/scroll-area/scroll-area.stories.js +1 -1
  173. package/dist/components/select/select.stories.js +1 -1
  174. package/dist/components/separator/separator.stories.js +1 -1
  175. package/dist/components/sheet/sheet.stories.js +1 -1
  176. package/dist/components/sidebar/index.d.ts +2 -0
  177. package/dist/components/sidebar/index.d.ts.map +1 -0
  178. package/dist/components/sidebar/index.js +1 -0
  179. package/dist/components/sidebar/sidebar.d.ts +64 -0
  180. package/dist/components/sidebar/sidebar.d.ts.map +1 -0
  181. package/dist/components/sidebar/sidebar.js +255 -0
  182. package/dist/components/sidebar/sidebar.stories.d.ts +20 -0
  183. package/dist/components/sidebar/sidebar.stories.d.ts.map +1 -0
  184. package/dist/components/sidebar/sidebar.stories.js +184 -0
  185. package/dist/components/skeleton/index.d.ts +3 -0
  186. package/dist/components/skeleton/index.d.ts.map +1 -0
  187. package/dist/components/skeleton/index.js +1 -0
  188. package/dist/components/skeleton/skeleton.d.ts +7 -0
  189. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  190. package/dist/components/skeleton/skeleton.js +8 -0
  191. package/dist/components/slider/slider.stories.js +1 -1
  192. package/dist/components/sonner/sonner.stories.js +1 -1
  193. package/dist/components/sortable/sortable.stories.js +1 -1
  194. package/dist/components/spinner/spinner.stories.js +1 -1
  195. package/dist/components/status-indicator/status-indicator.stories.js +1 -1
  196. package/dist/components/switch/switch.stories.js +1 -1
  197. package/dist/components/tabs/tabs.stories.js +1 -1
  198. package/dist/components/text/text.stories.js +1 -1
  199. package/dist/components/textarea/textarea.stories.js +1 -1
  200. package/dist/components/toggle/toggle.stories.js +1 -1
  201. package/dist/components/toggle-group/toggle-group.stories.js +1 -1
  202. package/dist/components/tooltip/tooltip.stories.js +1 -1
  203. package/dist/index.d.ts +1 -0
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +1 -0
  206. package/dist/tsconfig.tsbuildinfo +1 -1
  207. package/llms.txt +10 -5
  208. package/package.json +8 -4
  209. package/dist/components/date-selector/date-selector-context.d.ts.map +0 -1
  210. package/dist/components/date-selector/date-selector-parts.d.ts.map +0 -1
  211. package/dist/components/date-selector/date-selector-types.d.ts.map +0 -1
  212. package/dist/components/date-selector/date-selector-value.d.ts +0 -47
  213. package/dist/components/date-selector/date-selector-value.d.ts.map +0 -1
  214. package/dist/components/date-selector/date-selector-value.js +0 -183
  215. package/dist/components/date-selector/date-selector.d.ts.map +0 -1
  216. package/dist/components/date-selector/date-selector.js +0 -144
  217. package/dist/components/date-selector/date-selector.stories.d.ts.map +0 -1
  218. package/dist/components/date-selector/date-selector.stories.js +0 -144
  219. package/dist/components/date-selector/index.d.ts +0 -7
  220. package/dist/components/date-selector/index.d.ts.map +0 -1
  221. package/dist/components/date-selector/index.js +0 -5
  222. package/dist/components/date-selector/use-date-selector.d.ts.map +0 -1
  223. package/dist/components/navigation-pattern-1/index.d.ts +0 -3
  224. package/dist/components/navigation-pattern-1/index.d.ts.map +0 -1
  225. package/dist/components/navigation-pattern-1/index.js +0 -1
  226. package/dist/components/navigation-pattern-1/pattern-1.config.d.ts +0 -47
  227. package/dist/components/navigation-pattern-1/pattern-1.config.d.ts.map +0 -1
  228. package/dist/components/navigation-pattern-1/pattern-1.config.js +0 -55
  229. package/dist/components/navigation-pattern-1/pattern-1.d.ts +0 -7
  230. package/dist/components/navigation-pattern-1/pattern-1.d.ts.map +0 -1
  231. package/dist/components/navigation-pattern-1/pattern-1.js +0 -83
  232. package/dist/components/navigation-pattern-1/pattern-1.stories.d.ts +0 -16
  233. package/dist/components/navigation-pattern-1/pattern-1.stories.d.ts.map +0 -1
  234. package/dist/components/navigation-pattern-1/pattern-1.stories.js +0 -20
  235. /package/dist/{components → blocks}/date-selector/date-selector-context.d.ts +0 -0
  236. /package/dist/{components → blocks}/date-selector/date-selector-context.js +0 -0
@@ -100,7 +100,8 @@ export function useDateSelector({ value, onChange, defaultPeriodType = 'day', de
100
100
  commit((prev) => ({
101
101
  ...prev,
102
102
  selectionMode: 'custom',
103
- rollingDays: undefined,
103
+ rollingUnit: 'day',
104
+ rollingCount: undefined,
104
105
  selectedDate: undefined,
105
106
  selectedEndDate: undefined,
106
107
  selectedYear: undefined,
@@ -110,25 +111,27 @@ export function useDateSelector({ value, onChange, defaultPeriodType = 'day', de
110
111
  rangeEnd: undefined,
111
112
  }));
112
113
  }, [commit]);
113
- const applyRollingPreset = useCallback((mode, days) => {
114
+ const applyRollingPreset = useCallback((mode, unit, count) => {
114
115
  commit((prev) => ({
115
116
  ...prev,
116
117
  periodType: 'day',
117
118
  selectionMode: mode,
118
- rollingDays: days,
119
+ rollingUnit: unit,
120
+ rollingCount: count,
119
121
  selectedDate: undefined,
120
122
  selectedEndDate: undefined,
121
123
  }));
122
124
  }, [commit]);
123
125
  const enterCustomRange = useCallback(() => {
124
- commit((prev) => ({ ...prev, selectionMode: 'custom', rollingDays: undefined }));
126
+ commit((prev) => ({ ...prev, selectionMode: 'custom', rollingCount: undefined }));
125
127
  }, [commit]);
126
128
  const handleDayClick = useCallback((day) => {
127
129
  commit((prev) => {
128
130
  const s = { ...prev };
129
131
  if (s.selectionMode === 'rolling-next' || s.selectionMode === 'rolling-last') {
130
132
  s.selectionMode = 'custom';
131
- s.rollingDays = undefined;
133
+ s.rollingUnit = 'day';
134
+ s.rollingCount = undefined;
132
135
  }
133
136
  const activeFilter = presetMode ?? s.filterType;
134
137
  if (activeFilter === 'between' && allowRange) {
@@ -228,7 +231,8 @@ export function useDateSelector({ value, onChange, defaultPeriodType = 'day', de
228
231
  ...prev,
229
232
  periodType: type,
230
233
  selectionMode: 'custom',
231
- rollingDays: undefined,
234
+ rollingUnit: 'day',
235
+ rollingCount: undefined,
232
236
  selectedDate: undefined,
233
237
  selectedEndDate: undefined,
234
238
  selectedYear: undefined,
@@ -245,7 +249,8 @@ export function useDateSelector({ value, onChange, defaultPeriodType = 'day', de
245
249
  ...prev,
246
250
  filterType: type,
247
251
  selectionMode: 'custom',
248
- rollingDays: undefined,
252
+ rollingUnit: 'day',
253
+ rollingCount: undefined,
249
254
  selectedDate: undefined,
250
255
  selectedEndDate: undefined,
251
256
  selectedYear: undefined,
@@ -285,7 +290,8 @@ export function useDateSelector({ value, onChange, defaultPeriodType = 'day', de
285
290
  currentValue,
286
291
  allowRange,
287
292
  selectionMode: internal.selectionMode,
288
- rollingDays: internal.rollingDays,
293
+ rollingUnit: internal.rollingUnit,
294
+ rollingCount: internal.rollingCount,
289
295
  setPeriodType: handlePeriodTypeChange,
290
296
  setFilterType: handleFilterTypeChange,
291
297
  setSelectedDate,
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+ import { type PopoverTriggerProps } from '../../components/popover';
3
+ export type FloatingMenuWidgetRenderTrigger = NonNullable<PopoverTriggerProps['render']>;
4
+ export type FloatingMenuWidgetInset = {
5
+ right: number;
6
+ bottom: number;
7
+ };
8
+ export type FloatingMenuWidgetProps = Omit<React.ComponentProps<'div'>, 'children'> & {
9
+ children: React.ReactNode;
10
+ menuTitle: string;
11
+ menuDescription?: string;
12
+ triggerIcon?: React.ReactNode;
13
+ renderTrigger?: FloatingMenuWidgetRenderTrigger;
14
+ /** Set `false` when `renderTrigger` is not a native `<button>`. */
15
+ triggerNativeButton?: boolean;
16
+ defaultInset?: Partial<FloatingMenuWidgetInset>;
17
+ /** Unique key for persisting position in `localStorage`. */
18
+ positionStorageKey?: string;
19
+ /** Long-press to drag. */
20
+ draggable?: boolean;
21
+ open?: boolean;
22
+ onOpenChange?: (open: boolean) => void;
23
+ };
24
+ declare function FloatingMenuWidget({ children, menuTitle, menuDescription, triggerIcon, renderTrigger, triggerNativeButton, defaultInset, positionStorageKey, draggable, open: openControlled, onOpenChange: onOpenChangeControlled, className, ...rest }: FloatingMenuWidgetProps): import("react/jsx-runtime").JSX.Element;
25
+ export { FloatingMenuWidget };
26
+ //# sourceMappingURL=floating-menu-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floating-menu-widget.d.ts","sourceRoot":"","sources":["../../../src/blocks/floating-menu-widget/floating-menu-widget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAA2C,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAS7G,MAAM,MAAM,+BAA+B,GAAG,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEzF,MAAM,MAAM,uBAAuB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG;IAClF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,+BAA+B,CAAC;IAChD,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAChD,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C,CAAC;AA0BF,iBAAS,kBAAkB,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,WAAyC,EACzC,aAAa,EACb,mBAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,SAAgB,EAChB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,sBAAsB,EACpC,SAAS,EACT,GAAG,IAAI,EACV,EAAE,uBAAuB,2CAwOzB;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,200 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Menu } from 'lucide-react';
5
+ import { buttonVariants } from '../../components/button';
6
+ import { Popover, PopoverContent, PopoverTrigger } from '../../components/popover';
7
+ import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '../../components/sheet';
8
+ import { useIsMobile } from '../../hooks/use-mobile';
9
+ import { cn } from '../../lib/utils';
10
+ const DEFAULT_INSET = 24;
11
+ const LONG_PRESS_MS = 160;
12
+ const LONG_PRESS_MOVE_CANCEL_PX = 22;
13
+ function clamp(n, min, max) {
14
+ return Math.min(max, Math.max(min, n));
15
+ }
16
+ function readStoredInset(key) {
17
+ if (typeof window === 'undefined')
18
+ return null;
19
+ try {
20
+ const raw = window.localStorage.getItem(key);
21
+ if (!raw)
22
+ return null;
23
+ const parsed = JSON.parse(raw);
24
+ if (!parsed || typeof parsed !== 'object')
25
+ return null;
26
+ const { right, bottom } = parsed;
27
+ if (typeof right !== 'number' || typeof bottom !== 'number')
28
+ return null;
29
+ return { right, bottom };
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ function FloatingMenuWidget({ children, menuTitle, menuDescription, triggerIcon = _jsx(Menu, { className: "size-4" }), renderTrigger, triggerNativeButton = true, defaultInset, positionStorageKey, draggable = true, open: openControlled, onOpenChange: onOpenChangeControlled, className, ...rest }) {
36
+ const isMobile = useIsMobile();
37
+ const anchorRef = React.useRef(null);
38
+ const planRef = React.useRef(null);
39
+ const longPressTimerRef = React.useRef(null);
40
+ const storageKeyFull = positionStorageKey ? `wheelhouse:floating-menu-widget:${positionStorageKey}` : null;
41
+ const [inset, setInset] = React.useState(() => {
42
+ const stored = storageKeyFull ? readStoredInset(storageKeyFull) : null;
43
+ if (stored)
44
+ return stored;
45
+ return {
46
+ right: defaultInset?.right ?? DEFAULT_INSET,
47
+ bottom: defaultInset?.bottom ?? DEFAULT_INSET,
48
+ };
49
+ });
50
+ const insetRef = React.useRef(inset);
51
+ React.useEffect(() => {
52
+ insetRef.current = inset;
53
+ }, [inset]);
54
+ const [isDragging, setIsDragging] = React.useState(false);
55
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
56
+ const isControlled = openControlled !== undefined;
57
+ const open = isControlled ? openControlled : uncontrolledOpen;
58
+ const prevIsMobileRef = React.useRef(undefined);
59
+ const setOpen = React.useCallback((next) => {
60
+ if (!isControlled)
61
+ setUncontrolledOpen(next);
62
+ onOpenChangeControlled?.(next);
63
+ }, [isControlled, onOpenChangeControlled]);
64
+ React.useEffect(() => {
65
+ if (prevIsMobileRef.current !== undefined && prevIsMobileRef.current !== isMobile)
66
+ setOpen(false);
67
+ prevIsMobileRef.current = isMobile;
68
+ }, [isMobile, setOpen]);
69
+ React.useEffect(() => {
70
+ return () => {
71
+ if (longPressTimerRef.current != null) {
72
+ window.clearTimeout(longPressTimerRef.current);
73
+ longPressTimerRef.current = null;
74
+ }
75
+ };
76
+ }, []);
77
+ React.useEffect(() => {
78
+ if (!isDragging || typeof document === 'undefined')
79
+ return;
80
+ const prev = document.body.style.cursor;
81
+ document.body.style.cursor = 'grabbing';
82
+ return () => {
83
+ document.body.style.cursor = prev;
84
+ };
85
+ }, [isDragging]);
86
+ const clearLongPressTimer = React.useCallback(() => {
87
+ if (longPressTimerRef.current != null) {
88
+ window.clearTimeout(longPressTimerRef.current);
89
+ longPressTimerRef.current = null;
90
+ }
91
+ }, []);
92
+ const startDrag = React.useCallback((pointerId, startX, startY) => {
93
+ const shell = anchorRef.current;
94
+ if (!shell)
95
+ return;
96
+ try {
97
+ shell.setPointerCapture(pointerId);
98
+ }
99
+ catch {
100
+ return;
101
+ }
102
+ const { right, bottom } = insetRef.current;
103
+ planRef.current = { kind: 'drag', pointerId, startX, startY, originRight: right, originBottom: bottom };
104
+ setIsDragging(true);
105
+ }, []);
106
+ const onShellPointerDown = React.useCallback((event) => {
107
+ if (!draggable || event.button !== 0)
108
+ return;
109
+ if (!anchorRef.current?.contains(event.target))
110
+ return;
111
+ const pointerId = event.pointerId;
112
+ planRef.current = { kind: 'hold', pointerId, startX: event.clientX, startY: event.clientY };
113
+ clearLongPressTimer();
114
+ longPressTimerRef.current = window.setTimeout(() => {
115
+ longPressTimerRef.current = null;
116
+ const p = planRef.current;
117
+ if (!p || p.kind !== 'hold' || p.pointerId !== pointerId)
118
+ return;
119
+ startDrag(p.pointerId, p.startX, p.startY);
120
+ }, LONG_PRESS_MS);
121
+ }, [draggable, startDrag, clearLongPressTimer]);
122
+ const onShellPointerMove = React.useCallback((event) => {
123
+ const p = planRef.current;
124
+ if (!p || event.pointerId !== p.pointerId)
125
+ return;
126
+ if (p.kind === 'drag') {
127
+ const dx = event.clientX - p.startX;
128
+ const dy = event.clientY - p.startY;
129
+ const margin = 8;
130
+ const w = anchorRef.current?.offsetWidth ?? 48;
131
+ const h = anchorRef.current?.offsetHeight ?? 48;
132
+ const maxRight = Math.max(margin, window.innerWidth - w - margin);
133
+ const maxBottom = Math.max(margin, window.innerHeight - h - margin);
134
+ setInset({
135
+ right: clamp(p.originRight - dx, margin, maxRight),
136
+ bottom: clamp(p.originBottom - dy, margin, maxBottom),
137
+ });
138
+ return;
139
+ }
140
+ const dx = event.clientX - p.startX;
141
+ const dy = event.clientY - p.startY;
142
+ if (Math.hypot(dx, dy) > LONG_PRESS_MOVE_CANCEL_PX) {
143
+ clearLongPressTimer();
144
+ planRef.current = null;
145
+ }
146
+ }, [clearLongPressTimer]);
147
+ const onShellPointerUpOrCancel = React.useCallback((event) => {
148
+ clearLongPressTimer();
149
+ const p = planRef.current;
150
+ if (!p)
151
+ return;
152
+ if (p.kind === 'drag') {
153
+ if (event.pointerId !== p.pointerId)
154
+ return;
155
+ planRef.current = null;
156
+ setIsDragging(false);
157
+ try {
158
+ event.currentTarget.releasePointerCapture(event.pointerId);
159
+ }
160
+ catch {
161
+ /* released */
162
+ }
163
+ setInset((cur) => {
164
+ if (storageKeyFull && typeof window !== 'undefined') {
165
+ try {
166
+ window.localStorage.setItem(storageKeyFull, JSON.stringify(cur));
167
+ }
168
+ catch {
169
+ /* quota / private mode */
170
+ }
171
+ }
172
+ return cur;
173
+ });
174
+ const shell = anchorRef.current;
175
+ if (shell) {
176
+ shell.style.pointerEvents = 'none';
177
+ requestAnimationFrame(() => {
178
+ requestAnimationFrame(() => {
179
+ shell.style.pointerEvents = '';
180
+ });
181
+ });
182
+ }
183
+ return;
184
+ }
185
+ planRef.current = null;
186
+ }, [clearLongPressTimer, storageKeyFull]);
187
+ const shellClass = cn('fixed z-50 flex touch-none items-center justify-center overflow-hidden rounded-full bg-background shadow-lg ring-1 ring-foreground/5', isDragging && 'cursor-grabbing', className);
188
+ const shellPointer = draggable
189
+ ? {
190
+ onPointerDown: onShellPointerDown,
191
+ onPointerMove: onShellPointerMove,
192
+ onPointerUp: onShellPointerUpOrCancel,
193
+ onPointerCancel: onShellPointerUpOrCancel,
194
+ }
195
+ : {};
196
+ const triggerClass = cn(buttonVariants({ variant: 'default', size: 'icon' }), 'size-8 rounded-full border-0 shadow-none [&_svg]:opacity-90');
197
+ const body = _jsx("div", { className: "flex flex-col gap-1", children: children });
198
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx("div", { ref: anchorRef, className: shellClass, style: { right: inset.right, bottom: inset.bottom }, title: "Click to open. Press and hold to move.", ...rest, ...shellPointer, children: renderTrigger ? (_jsx(PopoverTrigger, { nativeButton: triggerNativeButton, render: renderTrigger })) : (_jsxs(PopoverTrigger, { className: triggerClass, children: [triggerIcon, _jsxs("span", { className: "sr-only", children: ["Open ", menuTitle] })] })) }), !isMobile ? (_jsx(PopoverContent, { anchor: anchorRef, align: "end", className: "max-h-[inherit] w-[min(100vw-2rem,12rem)] overflow-y-auto", positionerClassName: "max-h-[min(100dvh-2rem,24rem)]", side: "top", sideOffset: 10, children: body })) : null, isMobile ? (_jsx(Sheet, { open: open, onOpenChange: setOpen, children: _jsxs(SheetContent, { side: "bottom", className: "max-h-[85dvh] overflow-y-auto p-0", children: [_jsxs(SheetHeader, { className: "border-b border-border p-4 text-left", children: [_jsx(SheetTitle, { children: menuTitle }), menuDescription ? _jsx(SheetDescription, { children: menuDescription }) : null] }), _jsx("div", { className: "p-4 pt-2", children: body })] }) })) : null] }));
199
+ }
200
+ export { FloatingMenuWidget };
@@ -0,0 +1,15 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ import { FloatingMenuWidget } from './floating-menu-widget';
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof FloatingMenuWidget;
6
+ tags: string[];
7
+ parameters: {
8
+ layout: string;
9
+ };
10
+ };
11
+ export default meta;
12
+ type Story = StoryObj<typeof FloatingMenuWidget>;
13
+ export declare const Default: Story;
14
+ export declare const NotDraggable: Story;
15
+ //# sourceMappingURL=floating-menu-widget.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floating-menu-widget.stories.d.ts","sourceRoot":"","sources":["../../../src/blocks/floating-menu-widget/floating-menu-widget.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAqBjD,eAAO,MAAM,OAAO,EAAE,KAYrB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAQ1B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Circle } from 'lucide-react';
3
+ import { Button } from '../../components/button';
4
+ import { FloatingMenuWidget } from './floating-menu-widget';
5
+ const meta = {
6
+ title: 'Blocks/Floating menu widget',
7
+ component: FloatingMenuWidget,
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ layout: 'fullscreen',
11
+ },
12
+ };
13
+ export default meta;
14
+ function DemoLinks() {
15
+ return (_jsxs(_Fragment, { children: [_jsxs(Button, { variant: "ghost", className: "justify-start font-normal", type: "button", children: [_jsx(Circle, { className: "size-3 opacity-70" }), "Action 01"] }), _jsxs(Button, { variant: "ghost", className: "justify-start font-normal", type: "button", children: [_jsx(Circle, { className: "size-3 opacity-70" }), "Action 02"] }), _jsxs(Button, { variant: "ghost", className: "justify-start font-normal", type: "button", children: [_jsx(Circle, { className: "size-3 opacity-70" }), "Action 03"] })] }));
16
+ }
17
+ export const Default = {
18
+ render: () => (_jsxs("div", { className: "relative min-h-[100dvh] bg-muted/30 p-8", children: [_jsx("p", { className: "max-w-md text-sm text-muted-foreground", children: "Click the circular control to open a popover on wide viewports (bottom sheet on narrow ones). Press and hold the control to drag it. Resize the preview to compare." }), _jsx(FloatingMenuWidget, { menuTitle: "Quick actions", menuDescription: "Shortcuts for this preview", positionStorageKey: "storybook-demo", children: _jsx(DemoLinks, {}) })] })),
19
+ };
20
+ export const NotDraggable = {
21
+ render: () => (_jsx("div", { className: "relative min-h-[100dvh] bg-muted/30 p-8", children: _jsx(FloatingMenuWidget, { menuTitle: "Menu", draggable: false, defaultInset: { right: 32, bottom: 32 }, children: _jsx(DemoLinks, {}) }) })),
22
+ };
@@ -0,0 +1,3 @@
1
+ export { FloatingMenuWidget } from './floating-menu-widget';
2
+ export type { FloatingMenuWidgetInset, FloatingMenuWidgetProps, FloatingMenuWidgetRenderTrigger } from './floating-menu-widget';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/floating-menu-widget/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1 @@
1
+ export { FloatingMenuWidget } from './floating-menu-widget';
@@ -0,0 +1,5 @@
1
+ export * from './columns';
2
+ export * from './date-selector';
3
+ export * from './floating-menu-widget';
4
+ export * from './navigation';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './columns';
2
+ export * from './date-selector';
3
+ export * from './floating-menu-widget';
4
+ export * from './navigation';
@@ -0,0 +1,5 @@
1
+ export { Navigation } from './navigation';
2
+ export type { NavigationProps } from './navigation';
3
+ export { navigationDemoModel } from './navigation.demo';
4
+ export type { NavigationLink, NavigationModel, NavigationPrimaryItem, NavigationPrimaryLink, NavigationPrimarySubmenu, NavigationSecondaryAccount, NavigationSecondaryItem, NavigationSecondaryMenu, NavigationSecondaryNotifications, NavigationSecondarySearch, NavigationUser, } from './navigation-types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/blocks/navigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACR,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,gCAAgC,EAChC,yBAAyB,EACzB,cAAc,GACjB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Navigation } from './navigation';
2
+ export { navigationDemoModel } from './navigation.demo';
@@ -0,0 +1,60 @@
1
+ import type { MouseEventHandler } from 'react';
2
+ /** Single anchor row used in primary submenus, secondary menus, and account sections. */
3
+ export type NavigationLink = {
4
+ href: string;
5
+ label: string;
6
+ external?: boolean;
7
+ onClick?: MouseEventHandler<HTMLAnchorElement>;
8
+ };
9
+ export type NavigationPrimaryLink = {
10
+ kind: 'link';
11
+ label: string;
12
+ href: string;
13
+ active?: boolean;
14
+ badge?: {
15
+ label: string;
16
+ };
17
+ external?: boolean;
18
+ onClick?: MouseEventHandler<HTMLAnchorElement>;
19
+ };
20
+ export type NavigationPrimarySubmenu = {
21
+ kind: 'submenu';
22
+ label: string;
23
+ items: readonly NavigationLink[];
24
+ };
25
+ export type NavigationPrimaryItem = NavigationPrimaryLink | NavigationPrimarySubmenu;
26
+ export type NavigationSecondarySearch = {
27
+ kind: 'search';
28
+ ariaLabel?: string;
29
+ onClick?: () => void;
30
+ };
31
+ export type NavigationSecondaryNotifications = {
32
+ kind: 'notifications';
33
+ ariaLabel?: string;
34
+ onClick?: () => void;
35
+ };
36
+ export type NavigationSecondaryMenu = {
37
+ kind: 'menu';
38
+ triggerLabel: string;
39
+ items: readonly NavigationLink[];
40
+ };
41
+ export type NavigationUser = {
42
+ name: string;
43
+ email: string;
44
+ avatarSrc?: string;
45
+ avatarAlt?: string;
46
+ initials?: string;
47
+ };
48
+ export type NavigationSecondaryAccount = {
49
+ kind: 'account';
50
+ triggerLabel: string;
51
+ user: NavigationUser;
52
+ sections: readonly (readonly NavigationLink[])[];
53
+ logOut: NavigationLink;
54
+ };
55
+ export type NavigationSecondaryItem = NavigationSecondarySearch | NavigationSecondaryNotifications | NavigationSecondaryMenu | NavigationSecondaryAccount;
56
+ export type NavigationModel = {
57
+ primary: readonly NavigationPrimaryItem[];
58
+ secondary: readonly NavigationSecondaryItem[];
59
+ };
60
+ //# sourceMappingURL=navigation-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-types.d.ts","sourceRoot":"","sources":["../../../src/blocks/navigation/navigation-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG,wBAAwB,CAAC;AAErF,MAAM,MAAM,yBAAyB,GAAG;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC,SAAS,cAAc,EAAE,CAAC,EAAE,CAAC;IACjD,MAAM,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,GAAG,gCAAgC,GAAG,uBAAuB,GAAG,0BAA0B,CAAC;AAE1J,MAAM,MAAM,eAAe,GAAG;IAC1B,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,SAAS,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACjD,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import type { NavigationModel } from './navigation-types';
3
+ export type NavigationProps = React.ComponentProps<'div'> & NavigationModel;
4
+ /**
5
+ * Responsive app header: **`primary`** routes beside the logo; **`secondary`** is an ordered list of search, notifications, menus, and account blocks.
6
+ * Omit **`search`** / **`notifications`** entries to hide those icon buttons.
7
+ */
8
+ export declare function Navigation({ className, primary, secondary, ...props }: NavigationProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/blocks/navigation/navigation.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAmB/B,OAAO,KAAK,EAER,eAAe,EAKlB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC;AAyU5E;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CA8GtF"}
@@ -0,0 +1,4 @@
1
+ import type { NavigationModel } from './navigation-types';
2
+ /** Example `primary` / `secondary` data for Storybook and docs previews. */
3
+ export declare const navigationDemoModel: NavigationModel;
4
+ //# sourceMappingURL=navigation.demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.demo.d.ts","sourceRoot":"","sources":["../../../src/blocks/navigation/navigation.demo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,eA4CjC,CAAC"}
@@ -0,0 +1,46 @@
1
+ /** Example `primary` / `secondary` data for Storybook and docs previews. */
2
+ export const navigationDemoModel = {
3
+ primary: [
4
+ { kind: 'link', label: 'Work', href: '#work', active: true },
5
+ { kind: 'link', label: 'Play', href: '#play' },
6
+ {
7
+ kind: 'submenu',
8
+ label: 'Portfolio',
9
+ items: [
10
+ { label: 'Stocks', href: '#stocks' },
11
+ { label: 'Bonds', href: '#bonds' },
12
+ ],
13
+ },
14
+ ],
15
+ secondary: [
16
+ { kind: 'search' },
17
+ { kind: 'notifications' },
18
+ {
19
+ kind: 'menu',
20
+ triggerLabel: 'Support',
21
+ items: [
22
+ { label: 'Docs', href: '#docs' },
23
+ { label: 'Contact', href: '#contact' },
24
+ ],
25
+ },
26
+ {
27
+ kind: 'account',
28
+ triggerLabel: 'Account',
29
+ user: {
30
+ name: 'shadcn',
31
+ email: 'm@example.com',
32
+ avatarSrc: 'https://github.com/shadcn.png',
33
+ avatarAlt: '@shadcn',
34
+ initials: 'CN',
35
+ },
36
+ sections: [
37
+ [
38
+ { label: 'Profile', href: '#profile' },
39
+ { label: 'Billing', href: '#billing' },
40
+ ],
41
+ [{ label: 'Team', href: '#team' }],
42
+ ],
43
+ logOut: { label: 'Log out', href: '#logout' },
44
+ },
45
+ ],
46
+ };