@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
@@ -0,0 +1,565 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Activity, BarChart3, Bath, BedDouble, Building2, CreditCard, DollarSign, Eye, Flag, Globe, Hash, Home, MapPin, Search, Shield, Sparkles, Tag, ToggleLeft, UserCircle, Users, Zap, } from 'lucide-react';
3
+ const ROLLING_METRIC_DAYS = [7, 14, 30, 60, 90, 180, 365];
4
+ const ROLLING_BOOKED_IN_DAYS = [7, 14, 30];
5
+ const ROLLING_PRICE_DAYS = [365];
6
+ const OP_IS_ONE_OF = [{ value: 'is', label: 'Is one of' }];
7
+ const OP_TEXT_CONTAINS = [
8
+ { value: 'contains', label: 'Contains' },
9
+ { value: 'not_contains', label: 'Does not contain' },
10
+ ];
11
+ const OP_TAGS = [
12
+ { value: 'is_any_of', label: 'Is any of' },
13
+ { value: 'is_not_any_of', label: 'Is not any of' },
14
+ ];
15
+ /** Hosts without `FILTERS_NAMESPACE` (e.g. docs) still get English labels via `defaultValue`s. */
16
+ const listingFieldsDocT = ((key, opts) => opts?.defaultValue ?? key);
17
+ const LISTING_FLAG_OPTIONS = [
18
+ { value: 22803, label: 'No Gap Night Setup' },
19
+ { value: 22804, label: 'No Segments' },
20
+ { value: 22805, label: 'New Listing' },
21
+ { value: 22806, label: 'No Global Minimum Setup' },
22
+ { value: 22807, label: 'Fixed Price %' },
23
+ { value: 22808, label: 'Min Rate Conflict' },
24
+ { value: 22809, label: 'Max Rate Conflict' },
25
+ { value: 22810, label: 'Low Historical Anchoring' },
26
+ { value: 22811, label: 'High Historical Anchoring' },
27
+ { value: 22822, label: 'High Far Future' },
28
+ { value: 22823, label: 'Historical Anchoring/Far Future Conflict' },
29
+ { value: 22824, label: 'Last Minute Doubling' },
30
+ { value: 22814, label: 'Last Minute Conflict' },
31
+ { value: 22815, label: 'Trapped Nights' },
32
+ { value: 22816, label: 'YOY Revenue Pacing' },
33
+ { value: 22817, label: 'YOY Occupancy Pacing' },
34
+ { value: 22818, label: 'High Booking Frequency' },
35
+ { value: 22819, label: 'High Occupancy Pacing' },
36
+ { value: 22821, label: 'Stagnation' },
37
+ { value: 22813, label: 'Historical Anchoring/Far Future Premium Conflict' },
38
+ { value: 22802, label: 'No Last Minute Setup' },
39
+ { value: 22820, label: 'High Availability' },
40
+ { value: 24556, label: 'Base Price - High Historical Impact' },
41
+ ];
42
+ function dateMetricStoryProps(i18n, dateI18n, rollingDayOptions) {
43
+ return {
44
+ showRollingPresets: true,
45
+ i18nInstance: i18n,
46
+ i18n: dateI18n,
47
+ rollingDayOptions,
48
+ };
49
+ }
50
+ /** Flat fields for minimal `Default` / `WithOneFilter` stories (real listing keys). */
51
+ export function buildListingDemoFields(t) {
52
+ return [
53
+ {
54
+ key: 'is_active',
55
+ label: t('story.listingFields.isActive', { defaultValue: 'Listing Status' }),
56
+ type: 'select',
57
+ icon: _jsx(ToggleLeft, { className: "size-4" }),
58
+ defaultOperator: 'is',
59
+ options: [
60
+ { value: 'active', label: t('story.options.active', { defaultValue: 'Active' }) },
61
+ { value: 'inactive', label: t('story.options.inactive', { defaultValue: 'Inactive' }) },
62
+ ],
63
+ },
64
+ {
65
+ key: 'title',
66
+ label: t('story.listingFields.displayName', { defaultValue: 'Display name' }),
67
+ type: 'text',
68
+ icon: _jsx(Search, { className: "size-4" }),
69
+ defaultOperator: 'contains',
70
+ operators: OP_TEXT_CONTAINS,
71
+ placeholder: t('story.namePlaceholder', { defaultValue: 'Contains…' }),
72
+ },
73
+ {
74
+ key: 'source_address',
75
+ label: t('story.listingFields.address', { defaultValue: 'Address' }),
76
+ type: 'text',
77
+ icon: _jsx(MapPin, { className: "size-4" }),
78
+ defaultOperator: 'contains',
79
+ operators: OP_TEXT_CONTAINS,
80
+ },
81
+ ];
82
+ }
83
+ /** Grouped listing catalog for `GroupedFieldsAndSearch` (keys and shapes mirror app listing filters). */
84
+ export function buildListingGroupedFields(t, dateSelectorI18n, i18n) {
85
+ const dmFull = () => dateMetricStoryProps(i18n, dateSelectorI18n, ROLLING_METRIC_DAYS);
86
+ const dmBooked = () => dateMetricStoryProps(i18n, dateSelectorI18n, ROLLING_BOOKED_IN_DAYS);
87
+ const dmPrice = () => dateMetricStoryProps(i18n, dateSelectorI18n, ROLLING_PRICE_DAYS);
88
+ return [
89
+ {
90
+ group: t('story.groups.listingFeatures', { defaultValue: 'Listing Features' }),
91
+ fields: [
92
+ {
93
+ key: 'source_address',
94
+ label: 'Address',
95
+ type: 'text',
96
+ icon: _jsx(MapPin, { className: "size-4" }),
97
+ defaultOperator: 'contains',
98
+ operators: OP_TEXT_CONTAINS,
99
+ },
100
+ {
101
+ key: 'bathrooms',
102
+ label: 'Bathrooms',
103
+ type: 'multiselect',
104
+ icon: _jsx(Bath, { className: "size-4" }),
105
+ defaultOperator: 'is',
106
+ operators: OP_IS_ONE_OF,
107
+ searchable: true,
108
+ options: [1, 2, 3, 4, 5, 6].map((n) => ({ value: n, label: String(n) })),
109
+ },
110
+ {
111
+ key: 'bedrooms',
112
+ label: 'Bedrooms',
113
+ type: 'multiselect',
114
+ icon: _jsx(BedDouble, { className: "size-4" }),
115
+ defaultOperator: 'is',
116
+ operators: OP_IS_ONE_OF,
117
+ searchable: true,
118
+ options: [1, 2, 3, 4, 5, 6, 7].map((n) => ({ value: n, label: String(n) })),
119
+ },
120
+ {
121
+ key: 'beds',
122
+ label: 'Beds',
123
+ type: 'multiselect',
124
+ icon: _jsx(BedDouble, { className: "size-4" }),
125
+ defaultOperator: 'is',
126
+ operators: OP_IS_ONE_OF,
127
+ searchable: true,
128
+ options: [1, 2, 3, 4, 5, 6, 7, 8].map((n) => ({ value: n, label: String(n) })),
129
+ },
130
+ {
131
+ key: 'title',
132
+ label: 'Display name',
133
+ type: 'text',
134
+ icon: _jsx(Search, { className: "size-4" }),
135
+ defaultOperator: 'contains',
136
+ operators: OP_TEXT_CONTAINS,
137
+ },
138
+ {
139
+ key: 'listings.id',
140
+ label: 'ID',
141
+ type: 'multiselect',
142
+ icon: _jsx(Hash, { className: "size-4" }),
143
+ defaultOperator: 'is',
144
+ operators: OP_IS_ONE_OF,
145
+ searchable: true,
146
+ options: [49879982, 49879983, 50027676, 51080857, 51080858, 51080859, 61847975, 62794040, 62794044].map((id) => ({
147
+ value: id,
148
+ label: String(id),
149
+ })),
150
+ },
151
+ {
152
+ key: 'display_nickname',
153
+ label: 'Nickname',
154
+ type: 'text',
155
+ icon: _jsx(UserCircle, { className: "size-4" }),
156
+ defaultOperator: 'contains',
157
+ operators: OP_TEXT_CONTAINS,
158
+ },
159
+ {
160
+ key: 'number_of_units',
161
+ label: 'Number of Units',
162
+ type: 'multiselect',
163
+ icon: _jsx(Building2, { className: "size-4" }),
164
+ defaultOperator: 'is',
165
+ operators: OP_IS_ONE_OF,
166
+ searchable: true,
167
+ options: [{ value: 1, label: '1' }],
168
+ },
169
+ {
170
+ key: 'clean_room_type',
171
+ label: 'Room type',
172
+ type: 'multiselect',
173
+ icon: _jsx(Home, { className: "size-4" }),
174
+ defaultOperator: 'is',
175
+ operators: OP_IS_ONE_OF,
176
+ searchable: true,
177
+ options: [
178
+ { value: 'apartment', label: 'apartment' },
179
+ { value: 'house', label: 'house' },
180
+ ],
181
+ },
182
+ {
183
+ key: 'searchable',
184
+ label: 'Search',
185
+ type: 'text',
186
+ icon: _jsx(Search, { className: "size-4" }),
187
+ defaultOperator: 'contains',
188
+ operators: OP_TEXT_CONTAINS,
189
+ },
190
+ {
191
+ key: 'sleeps',
192
+ label: 'Sleeps',
193
+ type: 'multiselect',
194
+ icon: _jsx(Users, { className: "size-4" }),
195
+ defaultOperator: 'is',
196
+ operators: OP_IS_ONE_OF,
197
+ searchable: true,
198
+ options: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map((n) => ({ value: n, label: String(n) })),
199
+ },
200
+ {
201
+ key: 'tags',
202
+ label: 'Tag',
203
+ type: 'multiselect',
204
+ icon: _jsx(Tag, { className: "size-4" }),
205
+ defaultOperator: 'is_any_of',
206
+ operators: OP_TAGS,
207
+ searchable: true,
208
+ options: [
209
+ { value: 29637, label: '6 bedroom' },
210
+ { value: 22964, label: 'Bend' },
211
+ { value: 22963, label: 'Brasada' },
212
+ { value: 22965, label: 'Central Oregon' },
213
+ { value: 22968, label: 'Deschutes' },
214
+ { value: 22956, label: 'Test Tag' },
215
+ ],
216
+ },
217
+ {
218
+ key: 'tags_imported',
219
+ label: 'Tag (Imported)',
220
+ type: 'multiselect',
221
+ icon: _jsx(Tag, { className: "size-4" }),
222
+ defaultOperator: 'is_any_of',
223
+ operators: OP_TAGS,
224
+ searchable: true,
225
+ options: [],
226
+ },
227
+ ],
228
+ },
229
+ {
230
+ group: t('story.groups.listingStatus', { defaultValue: 'Listing Status' }),
231
+ fields: [
232
+ {
233
+ key: 'channel_accounts.status',
234
+ label: 'Account Status',
235
+ type: 'multiselect',
236
+ icon: _jsx(Activity, { className: "size-4" }),
237
+ defaultOperator: 'is',
238
+ operators: OP_IS_ONE_OF,
239
+ searchable: true,
240
+ options: [
241
+ { value: 'A', label: 'Active' },
242
+ { value: 'E', label: 'Empty' },
243
+ { value: 'F', label: 'Failed' },
244
+ { value: 'D', label: 'Disabled' },
245
+ { value: 'P', label: 'Pending' },
246
+ { value: 'O', label: 'Invalid Auth' },
247
+ ],
248
+ },
249
+ {
250
+ key: 'listing_preference.automatic_rate_posting_enabled',
251
+ label: 'Automation',
252
+ type: 'select',
253
+ icon: _jsx(Zap, { className: "size-4" }),
254
+ defaultOperator: 'is',
255
+ options: [
256
+ { value: 'on', label: 'Active' },
257
+ { value: 'off', label: 'Inactive' },
258
+ ],
259
+ },
260
+ {
261
+ key: 'source',
262
+ label: 'Channel',
263
+ type: 'multiselect',
264
+ icon: _jsx(Globe, { className: "size-4" }),
265
+ defaultOperator: 'is',
266
+ operators: OP_IS_ONE_OF,
267
+ searchable: true,
268
+ options: [{ value: 'XX', label: 'Hypothetical' }],
269
+ },
270
+ {
271
+ key: 'currency',
272
+ label: 'Currency',
273
+ type: 'multiselect',
274
+ icon: _jsx(DollarSign, { className: "size-4" }),
275
+ defaultOperator: 'is',
276
+ operators: OP_IS_ONE_OF,
277
+ searchable: true,
278
+ options: [{ value: 'USD', label: 'USD' }],
279
+ },
280
+ {
281
+ key: 'listings.price_model_id',
282
+ label: 'Engine Version',
283
+ type: 'multiselect',
284
+ icon: _jsx(BarChart3, { className: "size-4" }),
285
+ defaultOperator: 'is',
286
+ operators: OP_IS_ONE_OF,
287
+ searchable: true,
288
+ options: [{ value: 14, label: 'Blended model v8.3' }],
289
+ },
290
+ {
291
+ key: 'is_hypothetical',
292
+ label: 'Hypothetical',
293
+ type: 'select',
294
+ icon: _jsx(Sparkles, { className: "size-4" }),
295
+ defaultOperator: 'is',
296
+ options: [
297
+ { value: 'true', label: 'Show' },
298
+ { value: 'false', label: 'Hide' },
299
+ ],
300
+ },
301
+ {
302
+ key: 'removed_by_owner',
303
+ label: 'Listing Hidden',
304
+ type: 'select',
305
+ icon: _jsx(Eye, { className: "size-4" }),
306
+ defaultOperator: 'is',
307
+ options: [
308
+ { value: 'hidden', label: 'Hidden' },
309
+ { value: 'not hidden', label: 'Not hidden' },
310
+ ],
311
+ },
312
+ {
313
+ key: 'is_active',
314
+ label: 'Listing Status',
315
+ type: 'select',
316
+ icon: _jsx(ToggleLeft, { className: "size-4" }),
317
+ defaultOperator: 'is',
318
+ options: [
319
+ { value: 'active', label: 'Active' },
320
+ { value: 'inactive', label: 'Inactive' },
321
+ ],
322
+ },
323
+ {
324
+ key: 'market.name',
325
+ label: 'Market',
326
+ type: 'multiselect',
327
+ icon: _jsx(MapPin, { className: "size-4" }),
328
+ defaultOperator: 'is',
329
+ operators: OP_IS_ONE_OF,
330
+ searchable: true,
331
+ options: [
332
+ { value: 105, label: 'Deschutes County, OR, United States' },
333
+ { value: 1, label: 'San Francisco, CA, United States' },
334
+ ],
335
+ },
336
+ {
337
+ key: 'listing_views.in_market',
338
+ label: 'Market Status',
339
+ type: 'select',
340
+ icon: _jsx(Activity, { className: "size-4" }),
341
+ defaultOperator: 'is',
342
+ options: [
343
+ { value: 'active', label: 'Active' },
344
+ { value: 'inactive', label: 'Inactive' },
345
+ ],
346
+ },
347
+ {
348
+ key: 'charge_bee_items.id',
349
+ label: 'Pricing Plan',
350
+ type: 'multiselect',
351
+ icon: _jsx(CreditCard, { className: "size-4" }),
352
+ defaultOperator: 'is',
353
+ operators: OP_IS_ONE_OF,
354
+ searchable: true,
355
+ options: [
356
+ { value: 'Free', label: 'Free' },
357
+ { value: 'Trial-Pricing', label: 'Trial' },
358
+ ],
359
+ },
360
+ ],
361
+ },
362
+ {
363
+ group: t('story.groups.teamAccess', { defaultValue: 'Team & Access' }),
364
+ fields: [
365
+ {
366
+ key: 'listings.operating_user_id',
367
+ label: 'Admin of Listing',
368
+ type: 'multiselect',
369
+ icon: _jsx(UserCircle, { className: "size-4" }),
370
+ defaultOperator: 'is',
371
+ operators: OP_IS_ONE_OF,
372
+ searchable: true,
373
+ options: [{ value: 63681, label: 'Jesse Bibee' }],
374
+ },
375
+ {
376
+ key: 'sub_users',
377
+ label: 'Team Member',
378
+ type: 'multiselect',
379
+ icon: _jsx(Users, { className: "size-4" }),
380
+ defaultOperator: 'is',
381
+ operators: OP_IS_ONE_OF,
382
+ searchable: true,
383
+ options: [
384
+ { value: -1, label: 'Unassigned' },
385
+ { value: 101, label: 'Alex Johnson' },
386
+ { value: 102, label: 'Jamie Lee' },
387
+ ],
388
+ },
389
+ {
390
+ key: 'access_level',
391
+ label: 'Your Access',
392
+ type: 'select',
393
+ icon: _jsx(Shield, { className: "size-4" }),
394
+ defaultOperator: 'is',
395
+ options: [
396
+ { value: 'admin', label: 'Admin' },
397
+ { value: 'manager', label: 'Manager' },
398
+ { value: 'editor', label: 'Editor' },
399
+ { value: 'restricted editor', label: 'Single Listing Editor' },
400
+ { value: 'viewer', label: 'Viewer' },
401
+ ],
402
+ },
403
+ ],
404
+ },
405
+ {
406
+ group: t('story.groups.listingPerformance', { defaultValue: 'Listing Performance' }),
407
+ fields: [
408
+ {
409
+ key: 'adjusted_occupancy',
410
+ label: 'Adj. Occupancy',
411
+ type: 'date_metric',
412
+ icon: _jsx(BarChart3, { className: "size-4" }),
413
+ defaultOperator: 'value_between',
414
+ suffix: '%',
415
+ dateMetricValueFormat: 'percent',
416
+ dateMetricProps: dmFull(),
417
+ },
418
+ {
419
+ key: 'revpar',
420
+ label: 'Adj. RevPAR',
421
+ type: 'date_metric',
422
+ icon: _jsx(BarChart3, { className: "size-4" }),
423
+ defaultOperator: 'value_between',
424
+ dateMetricValueFormat: 'currency',
425
+ dateMetricProps: dmFull(),
426
+ },
427
+ {
428
+ key: 'apr',
429
+ label: 'Asking Rate',
430
+ type: 'date_metric',
431
+ icon: _jsx(BarChart3, { className: "size-4" }),
432
+ defaultOperator: 'value_between',
433
+ dateMetricValueFormat: 'currency',
434
+ dateMetricProps: dmFull(),
435
+ },
436
+ {
437
+ key: 'available_nights',
438
+ label: 'Available Nights',
439
+ type: 'date_metric',
440
+ icon: _jsx(BarChart3, { className: "size-4" }),
441
+ defaultOperator: 'value_between',
442
+ dateMetricValueFormat: 'integer',
443
+ dateMetricProps: dmFull(),
444
+ },
445
+ {
446
+ key: 'available_revenue',
447
+ label: 'Available Revenue',
448
+ type: 'date_metric',
449
+ icon: _jsx(BarChart3, { className: "size-4" }),
450
+ defaultOperator: 'value_between',
451
+ dateMetricValueFormat: 'currency',
452
+ dateMetricProps: dmFull(),
453
+ },
454
+ {
455
+ key: 'adr',
456
+ label: 'Avg. Daily Rate',
457
+ type: 'date_metric',
458
+ icon: _jsx(BarChart3, { className: "size-4" }),
459
+ defaultOperator: 'value_between',
460
+ dateMetricValueFormat: 'currency',
461
+ dateMetricProps: dmFull(),
462
+ },
463
+ {
464
+ key: 'blocked_nights',
465
+ label: 'Blocked Nights',
466
+ type: 'date_metric',
467
+ icon: _jsx(BarChart3, { className: "size-4" }),
468
+ defaultOperator: 'value_between',
469
+ dateMetricValueFormat: 'integer',
470
+ dateMetricProps: dmFull(),
471
+ },
472
+ {
473
+ key: 'blocked_revenue_potential',
474
+ label: 'Blocked Revenue Potential',
475
+ type: 'date_metric',
476
+ icon: _jsx(BarChart3, { className: "size-4" }),
477
+ defaultOperator: 'value_between',
478
+ dateMetricValueFormat: 'currency',
479
+ dateMetricProps: dmFull(),
480
+ },
481
+ {
482
+ key: 'booked_in',
483
+ label: 'Booked nights in',
484
+ type: 'date_metric',
485
+ icon: _jsx(BarChart3, { className: "size-4" }),
486
+ defaultOperator: 'value_between',
487
+ dateMetricProps: dmBooked(),
488
+ },
489
+ {
490
+ key: 'booking_count',
491
+ label: 'Booking Count',
492
+ type: 'date_metric',
493
+ icon: _jsx(BarChart3, { className: "size-4" }),
494
+ defaultOperator: 'value_between',
495
+ dateMetricValueFormat: 'integer',
496
+ dateMetricProps: dmFull(),
497
+ },
498
+ {
499
+ key: 'flags',
500
+ label: 'Flag',
501
+ type: 'multiselect',
502
+ icon: _jsx(Flag, { className: "size-4" }),
503
+ defaultOperator: 'is_any_of',
504
+ operators: OP_TAGS,
505
+ searchable: true,
506
+ options: LISTING_FLAG_OPTIONS,
507
+ },
508
+ {
509
+ key: 'max_price',
510
+ label: 'Max. Price',
511
+ type: 'date_metric',
512
+ icon: _jsx(BarChart3, { className: "size-4" }),
513
+ defaultOperator: 'value_between',
514
+ dateMetricValueFormat: 'currency',
515
+ dateMetricProps: dmPrice(),
516
+ },
517
+ {
518
+ key: 'min_price',
519
+ label: 'Min. Price',
520
+ type: 'date_metric',
521
+ icon: _jsx(BarChart3, { className: "size-4" }),
522
+ defaultOperator: 'value_between',
523
+ dateMetricValueFormat: 'currency',
524
+ dateMetricProps: dmPrice(),
525
+ },
526
+ {
527
+ key: 'min_price_occurrence',
528
+ label: 'Min. Price Occurrence',
529
+ type: 'date_metric',
530
+ icon: _jsx(BarChart3, { className: "size-4" }),
531
+ defaultOperator: 'value_between',
532
+ prefix: '#',
533
+ dateMetricValueFormat: 'integer',
534
+ dateMetricProps: dmFull(),
535
+ },
536
+ {
537
+ key: 'local_cluster_occupancy_ratio',
538
+ label: 'Neighborhood occ. ratio',
539
+ type: 'date_metric',
540
+ icon: _jsx(BarChart3, { className: "size-4" }),
541
+ defaultOperator: 'value_between',
542
+ dateMetricValueFormat: 'percent',
543
+ dateMetricProps: dmFull(),
544
+ },
545
+ {
546
+ key: 'revenue',
547
+ label: 'Nightly Revenue',
548
+ type: 'date_metric',
549
+ icon: _jsx(BarChart3, { className: "size-4" }),
550
+ defaultOperator: 'value_between',
551
+ dateMetricValueFormat: 'currency',
552
+ dateMetricProps: dmFull(),
553
+ },
554
+ ],
555
+ },
556
+ ];
557
+ }
558
+ /** Flat listing fields for docs previews (no filter i18n bundle required). */
559
+ export function buildListingDemoFieldsForDocs() {
560
+ return buildListingDemoFields(listingFieldsDocT);
561
+ }
562
+ /** Grouped listing catalog for docs previews; pass docs `I18nextProvider` instance and date-selector copy. */
563
+ export function buildListingGroupedFieldsForDocs(dateSelectorI18n, i18n) {
564
+ return buildListingGroupedFields(listingFieldsDocT, dateSelectorI18n, i18n);
565
+ }
@@ -1,4 +1,8 @@
1
+ import type { DateSelectorI18nConfig, DateSelectorValue } from '../../blocks/date-selector/date-selector-types';
1
2
  import type { FilterI18nConfig, FilterOperator } from './filters-types';
3
+ export type DateMetricDateConnectorPhrases = Pick<FilterI18nConfig, 'dateMetricDateOn' | 'dateMetricDateIn'>;
4
+ /** Default bar connector between amount and date for `date_metric` filters. */
5
+ export declare function defaultDateMetricDateConnector(date: DateSelectorValue, dateI18n: DateSelectorI18nConfig, phrases?: DateMetricDateConnectorPhrases): string;
2
6
  export declare const DEFAULT_I18N: FilterI18nConfig;
3
7
  export declare const createOperatorsFromI18n: (i18n: FilterI18nConfig) => Record<string, FilterOperator[]>;
4
8
  export declare const DEFAULT_OPERATORS: Record<string, FilterOperator[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"filters-defaults.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filters-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAExE,eAAO,MAAM,YAAY,EAAE,gBAkE1B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,gBAAgB,KAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAgC9F,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAyC,CAAC"}
1
+ {"version":3,"file":"filters-defaults.d.ts","sourceRoot":"","sources":["../../../src/components/filters/filters-defaults.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEhH,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,CAAC;AAe7G,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,sBAAsB,EAChC,OAAO,GAAE,8BAAsE,GAChF,MAAM,CA2BR;AAED,eAAO,MAAM,YAAY,EAAE,gBA0E1B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,gBAAgB,KAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAqC9F,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAyC,CAAC"}
@@ -1,3 +1,48 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isSameDay } from 'date-fns';
3
+ import { ChevronLeft, ChevronRight, CircleDot, MoveHorizontal } from 'lucide-react';
4
+ const DEFAULT_DATE_METRIC_CONNECTOR_PHRASES = {
5
+ dateMetricDateOn: 'on',
6
+ dateMetricDateIn: 'in',
7
+ };
8
+ function isDateMetricSingleCalendarDay(date) {
9
+ const mode = date.selectionMode ?? 'custom';
10
+ if (mode !== 'custom' || date.period !== 'day' || date.operator !== 'is')
11
+ return false;
12
+ if (!date.startDate)
13
+ return false;
14
+ if (!date.endDate)
15
+ return true;
16
+ return isSameDay(date.startDate, date.endDate);
17
+ }
18
+ /** Default bar connector between amount and date for `date_metric` filters. */
19
+ export function defaultDateMetricDateConnector(date, dateI18n, phrases = DEFAULT_DATE_METRIC_CONNECTOR_PHRASES) {
20
+ const mode = date.selectionMode ?? 'custom';
21
+ if (mode === 'rolling-next' || mode === 'rolling-last') {
22
+ return phrases.dateMetricDateIn;
23
+ }
24
+ const { filterTypes } = dateI18n;
25
+ switch (date.operator) {
26
+ case 'is':
27
+ if (isDateMetricSingleCalendarDay(date))
28
+ return phrases.dateMetricDateOn;
29
+ if ((date.period === 'month' && date.year !== undefined && date.month !== undefined) ||
30
+ (date.period === 'quarter' && date.year !== undefined && date.quarter !== undefined) ||
31
+ (date.period === 'year' && date.year !== undefined) ||
32
+ (date.period === 'day' && date.startDate && date.endDate)) {
33
+ return phrases.dateMetricDateIn;
34
+ }
35
+ return filterTypes.is;
36
+ case 'before':
37
+ return filterTypes.before;
38
+ case 'after':
39
+ return filterTypes.after;
40
+ case 'between':
41
+ return filterTypes.between;
42
+ default:
43
+ return phrases.dateMetricDateIn;
44
+ }
45
+ }
1
46
  export const DEFAULT_I18N = {
2
47
  addFilter: 'Filter',
3
48
  searchFields: 'Filter...',
@@ -14,8 +59,14 @@ export const DEFAULT_I18N = {
14
59
  selectedCount: 'selected',
15
60
  percent: '%',
16
61
  defaultCurrency: '$',
62
+ numberFormatLocale: 'en-US',
17
63
  defaultColor: '#000000',
18
64
  addFilterTitle: 'Add filter',
65
+ addFilterUngroupedSection: 'More filters',
66
+ dateMetricBetweenAnd: 'and',
67
+ dateMetricDialogDone: 'Done',
68
+ dateMetricDateOn: DEFAULT_DATE_METRIC_CONNECTOR_PHRASES.dateMetricDateOn,
69
+ dateMetricDateIn: DEFAULT_DATE_METRIC_CONNECTOR_PHRASES.dateMetricDateIn,
19
70
  operators: {
20
71
  is: 'is',
21
72
  isNot: 'is not',
@@ -43,6 +94,7 @@ export const DEFAULT_I18N = {
43
94
  includesAnyOf: 'includes any of',
44
95
  empty: 'is empty',
45
96
  notEmpty: 'is not empty',
97
+ valueAny: 'Any value',
46
98
  },
47
99
  placeholders: {
48
100
  enterField: (fieldType) => `Enter ${fieldType}...`,
@@ -53,6 +105,7 @@ export const DEFAULT_I18N = {
53
105
  },
54
106
  helpers: {
55
107
  formatOperator: (operator) => operator.replace(/_/g, ' '),
108
+ dateMetricDateConnector: (date, dateI18n) => defaultDateMetricDateConnector(date, dateI18n, DEFAULT_DATE_METRIC_CONNECTOR_PHRASES),
56
109
  },
57
110
  validation: {
58
111
  invalidEmail: 'Invalid email format',
@@ -88,10 +141,15 @@ export const createOperatorsFromI18n = (i18n) => ({
88
141
  custom: [
89
142
  { value: 'is', label: i18n.operators.is },
90
143
  { value: 'after', label: i18n.operators.after },
91
- { value: 'is', label: i18n.operators.is },
92
144
  { value: 'between', label: i18n.operators.between },
93
145
  { value: 'empty', label: i18n.operators.empty },
94
146
  { value: 'not_empty', label: i18n.operators.notEmpty },
95
147
  ],
148
+ dateMetric: [
149
+ { value: 'value_any', label: i18n.operators.valueAny, icon: _jsx(CircleDot, { "aria-hidden": true }) },
150
+ { value: 'value_greater_than', label: i18n.operators.greaterThan, icon: _jsx(ChevronRight, { "aria-hidden": true }) },
151
+ { value: 'value_less_than', label: i18n.operators.lessThan, icon: _jsx(ChevronLeft, { "aria-hidden": true }) },
152
+ { value: 'value_between', label: i18n.operators.between, icon: _jsx(MoveHorizontal, { "aria-hidden": true }) },
153
+ ],
96
154
  });
97
155
  export const DEFAULT_OPERATORS = createOperatorsFromI18n(DEFAULT_I18N);