@open-mercato/core 0.6.7-develop.6785.1.1dd7cfac55 → 0.6.7-develop.6795.1.8a3f27921c

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 (196) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities.ids.generated.js +1 -0
  3. package/dist/generated/entities.ids.generated.js.map +2 -2
  4. package/dist/modules/auth/backend/settings/page.js +14 -9
  5. package/dist/modules/auth/backend/settings/page.js.map +2 -2
  6. package/dist/modules/customers/cli.js +17 -7
  7. package/dist/modules/customers/cli.js.map +2 -2
  8. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +229 -216
  9. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
  10. package/dist/modules/customers/search.js +50 -29
  11. package/dist/modules/customers/search.js.map +2 -2
  12. package/dist/modules/data_sync/api/mappings/[id]/route.js +22 -9
  13. package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
  14. package/dist/modules/data_sync/api/mappings/route.js +13 -4
  15. package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
  16. package/dist/modules/data_sync/api/options.js +7 -2
  17. package/dist/modules/data_sync/api/options.js.map +2 -2
  18. package/dist/modules/data_sync/api/run.js +7 -2
  19. package/dist/modules/data_sync/api/run.js.map +2 -2
  20. package/dist/modules/data_sync/api/runs/[id]/cancel.js +8 -3
  21. package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
  22. package/dist/modules/data_sync/api/runs/[id]/retry.js +7 -2
  23. package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
  24. package/dist/modules/data_sync/api/runs/[id]/route.js +8 -3
  25. package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
  26. package/dist/modules/data_sync/api/runs.js +7 -2
  27. package/dist/modules/data_sync/api/runs.js.map +2 -2
  28. package/dist/modules/data_sync/api/schedules/[id]/route.js +19 -6
  29. package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
  30. package/dist/modules/data_sync/api/schedules/route.js +13 -4
  31. package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
  32. package/dist/modules/data_sync/api/validate.js +9 -4
  33. package/dist/modules/data_sync/api/validate.js.map +2 -2
  34. package/dist/modules/design_system/acl.js +9 -0
  35. package/dist/modules/design_system/acl.js.map +7 -0
  36. package/dist/modules/design_system/backend/design-system/page.js +11 -0
  37. package/dist/modules/design_system/backend/design-system/page.js.map +7 -0
  38. package/dist/modules/design_system/backend/design-system/page.meta.js +15 -0
  39. package/dist/modules/design_system/backend/design-system/page.meta.js.map +7 -0
  40. package/dist/modules/design_system/gallery/components/CodeSnippet.js +52 -0
  41. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +7 -0
  42. package/dist/modules/design_system/gallery/components/EntryCard.js +63 -0
  43. package/dist/modules/design_system/gallery/components/EntryCard.js.map +7 -0
  44. package/dist/modules/design_system/gallery/components/GalleryShell.js +163 -0
  45. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +7 -0
  46. package/dist/modules/design_system/gallery/components/VariantPreview.js +9 -0
  47. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +7 -0
  48. package/dist/modules/design_system/gallery/entries/banners.js +186 -0
  49. package/dist/modules/design_system/gallery/entries/banners.js.map +7 -0
  50. package/dist/modules/design_system/gallery/entries/buttons.js +361 -0
  51. package/dist/modules/design_system/gallery/entries/buttons.js.map +7 -0
  52. package/dist/modules/design_system/gallery/entries/charts.js +457 -0
  53. package/dist/modules/design_system/gallery/entries/charts.js.map +7 -0
  54. package/dist/modules/design_system/gallery/entries/dates.js +306 -0
  55. package/dist/modules/design_system/gallery/entries/dates.js.map +7 -0
  56. package/dist/modules/design_system/gallery/entries/detail.js +358 -0
  57. package/dist/modules/design_system/gallery/entries/detail.js.map +7 -0
  58. package/dist/modules/design_system/gallery/entries/display.js +785 -0
  59. package/dist/modules/design_system/gallery/entries/display.js.map +7 -0
  60. package/dist/modules/design_system/gallery/entries/feedback.js +658 -0
  61. package/dist/modules/design_system/gallery/entries/feedback.js.map +7 -0
  62. package/dist/modules/design_system/gallery/entries/filters.js +505 -0
  63. package/dist/modules/design_system/gallery/entries/filters.js.map +7 -0
  64. package/dist/modules/design_system/gallery/entries/foundations.js +453 -0
  65. package/dist/modules/design_system/gallery/entries/foundations.js.map +7 -0
  66. package/dist/modules/design_system/gallery/entries/icons.js +140 -0
  67. package/dist/modules/design_system/gallery/entries/icons.js.map +7 -0
  68. package/dist/modules/design_system/gallery/entries/inputs.js +1217 -0
  69. package/dist/modules/design_system/gallery/entries/inputs.js.map +7 -0
  70. package/dist/modules/design_system/gallery/entries/messages.js +334 -0
  71. package/dist/modules/design_system/gallery/entries/messages.js.map +7 -0
  72. package/dist/modules/design_system/gallery/entries/navigation.js +475 -0
  73. package/dist/modules/design_system/gallery/entries/navigation.js.map +7 -0
  74. package/dist/modules/design_system/gallery/entries/notifications.js +257 -0
  75. package/dist/modules/design_system/gallery/entries/notifications.js.map +7 -0
  76. package/dist/modules/design_system/gallery/entries/overlays.js +576 -0
  77. package/dist/modules/design_system/gallery/entries/overlays.js.map +7 -0
  78. package/dist/modules/design_system/gallery/entries/scaffolding.js +378 -0
  79. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +7 -0
  80. package/dist/modules/design_system/gallery/entries/schedule.js +297 -0
  81. package/dist/modules/design_system/gallery/entries/schedule.js.map +7 -0
  82. package/dist/modules/design_system/gallery/registry.js +139 -0
  83. package/dist/modules/design_system/gallery/registry.js.map +7 -0
  84. package/dist/modules/design_system/gallery/types.js +1 -0
  85. package/dist/modules/design_system/gallery/types.js.map +7 -0
  86. package/dist/modules/design_system/index.js +9 -0
  87. package/dist/modules/design_system/index.js.map +7 -0
  88. package/dist/modules/design_system/setup.js +14 -0
  89. package/dist/modules/design_system/setup.js.map +7 -0
  90. package/dist/modules/inbox_ops/search.js +15 -4
  91. package/dist/modules/inbox_ops/search.js.map +2 -2
  92. package/dist/modules/integrations/api/[id]/credentials/route.js +11 -5
  93. package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
  94. package/dist/modules/integrations/api/[id]/health/route.js +6 -3
  95. package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
  96. package/dist/modules/integrations/api/[id]/route.js +6 -3
  97. package/dist/modules/integrations/api/[id]/route.js.map +2 -2
  98. package/dist/modules/integrations/api/[id]/state/route.js +6 -3
  99. package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
  100. package/dist/modules/integrations/api/[id]/version/route.js +6 -3
  101. package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
  102. package/dist/modules/integrations/api/logs/route.js +6 -3
  103. package/dist/modules/integrations/api/logs/route.js.map +2 -2
  104. package/dist/modules/integrations/api/route.js +6 -3
  105. package/dist/modules/integrations/api/route.js.map +2 -2
  106. package/dist/modules/integrations/api/umes-read.js +2 -2
  107. package/dist/modules/integrations/api/umes-read.js.map +2 -2
  108. package/dist/modules/integrations/lib/organization-scope.js +2 -9
  109. package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
  110. package/dist/modules/messages/search.js +10 -5
  111. package/dist/modules/messages/search.js.map +2 -2
  112. package/dist/modules/query_index/data/entities.js +2 -1
  113. package/dist/modules/query_index/data/entities.js.map +2 -2
  114. package/dist/modules/query_index/lib/engine.js +32 -50
  115. package/dist/modules/query_index/lib/engine.js.map +2 -2
  116. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +17 -0
  117. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +7 -0
  118. package/generated/entities.ids.generated.ts +1 -0
  119. package/package.json +16 -16
  120. package/src/modules/auth/backend/settings/page.tsx +17 -8
  121. package/src/modules/customers/cli.ts +17 -7
  122. package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +24 -13
  123. package/src/modules/customers/i18n/de.json +17 -0
  124. package/src/modules/customers/i18n/en.json +17 -0
  125. package/src/modules/customers/i18n/es.json +17 -0
  126. package/src/modules/customers/i18n/pl.json +17 -0
  127. package/src/modules/customers/search.ts +59 -27
  128. package/src/modules/data_sync/AGENTS.md +1 -0
  129. package/src/modules/data_sync/api/mappings/[id]/route.ts +22 -9
  130. package/src/modules/data_sync/api/mappings/route.ts +13 -4
  131. package/src/modules/data_sync/api/options.ts +7 -2
  132. package/src/modules/data_sync/api/run.ts +7 -2
  133. package/src/modules/data_sync/api/runs/[id]/cancel.ts +8 -3
  134. package/src/modules/data_sync/api/runs/[id]/retry.ts +7 -2
  135. package/src/modules/data_sync/api/runs/[id]/route.ts +8 -3
  136. package/src/modules/data_sync/api/runs.ts +7 -2
  137. package/src/modules/data_sync/api/schedules/[id]/route.ts +19 -6
  138. package/src/modules/data_sync/api/schedules/route.ts +13 -4
  139. package/src/modules/data_sync/api/validate.ts +9 -4
  140. package/src/modules/design_system/AGENTS.md +34 -0
  141. package/src/modules/design_system/acl.ts +5 -0
  142. package/src/modules/design_system/backend/design-system/page.meta.ts +11 -0
  143. package/src/modules/design_system/backend/design-system/page.tsx +14 -0
  144. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +55 -0
  145. package/src/modules/design_system/gallery/components/EntryCard.tsx +95 -0
  146. package/src/modules/design_system/gallery/components/GalleryShell.tsx +206 -0
  147. package/src/modules/design_system/gallery/components/VariantPreview.tsx +15 -0
  148. package/src/modules/design_system/gallery/entries/banners.tsx +226 -0
  149. package/src/modules/design_system/gallery/entries/buttons.tsx +422 -0
  150. package/src/modules/design_system/gallery/entries/charts.tsx +518 -0
  151. package/src/modules/design_system/gallery/entries/dates.tsx +325 -0
  152. package/src/modules/design_system/gallery/entries/detail.tsx +403 -0
  153. package/src/modules/design_system/gallery/entries/display.tsx +893 -0
  154. package/src/modules/design_system/gallery/entries/feedback.tsx +746 -0
  155. package/src/modules/design_system/gallery/entries/filters.tsx +570 -0
  156. package/src/modules/design_system/gallery/entries/foundations.tsx +529 -0
  157. package/src/modules/design_system/gallery/entries/icons.tsx +168 -0
  158. package/src/modules/design_system/gallery/entries/inputs.tsx +1516 -0
  159. package/src/modules/design_system/gallery/entries/messages.tsx +339 -0
  160. package/src/modules/design_system/gallery/entries/navigation.tsx +573 -0
  161. package/src/modules/design_system/gallery/entries/notifications.tsx +285 -0
  162. package/src/modules/design_system/gallery/entries/overlays.tsx +677 -0
  163. package/src/modules/design_system/gallery/entries/scaffolding.tsx +430 -0
  164. package/src/modules/design_system/gallery/entries/schedule.tsx +307 -0
  165. package/src/modules/design_system/gallery/registry.ts +152 -0
  166. package/src/modules/design_system/gallery/types.ts +32 -0
  167. package/src/modules/design_system/i18n/.hardcoded-allowlist.json +71 -0
  168. package/src/modules/design_system/i18n/de.json +46 -0
  169. package/src/modules/design_system/i18n/en.json +46 -0
  170. package/src/modules/design_system/i18n/es.json +46 -0
  171. package/src/modules/design_system/i18n/pl.json +46 -0
  172. package/src/modules/design_system/index.ts +7 -0
  173. package/src/modules/design_system/setup.ts +12 -0
  174. package/src/modules/inbox_ops/i18n/de.json +3 -0
  175. package/src/modules/inbox_ops/i18n/en.json +3 -0
  176. package/src/modules/inbox_ops/i18n/es.json +3 -0
  177. package/src/modules/inbox_ops/i18n/pl.json +3 -0
  178. package/src/modules/inbox_ops/search.ts +20 -4
  179. package/src/modules/integrations/api/[id]/credentials/route.ts +11 -5
  180. package/src/modules/integrations/api/[id]/health/route.ts +6 -3
  181. package/src/modules/integrations/api/[id]/route.ts +6 -3
  182. package/src/modules/integrations/api/[id]/state/route.ts +6 -3
  183. package/src/modules/integrations/api/[id]/version/route.ts +6 -3
  184. package/src/modules/integrations/api/logs/route.ts +6 -3
  185. package/src/modules/integrations/api/route.ts +6 -3
  186. package/src/modules/integrations/api/umes-read.ts +2 -2
  187. package/src/modules/integrations/lib/organization-scope.ts +5 -25
  188. package/src/modules/messages/i18n/de.json +2 -0
  189. package/src/modules/messages/i18n/en.json +2 -0
  190. package/src/modules/messages/i18n/es.json +2 -0
  191. package/src/modules/messages/i18n/pl.json +2 -0
  192. package/src/modules/messages/search.ts +11 -5
  193. package/src/modules/query_index/data/entities.ts +7 -0
  194. package/src/modules/query_index/lib/engine.ts +40 -63
  195. package/src/modules/query_index/migrations/.snapshot-open-mercato.json +12 -0
  196. package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +35 -0
@@ -0,0 +1,325 @@
1
+ import * as React from 'react'
2
+ import { Clock } from 'lucide-react'
3
+ import { Calendar } from '@open-mercato/ui/primitives/calendar'
4
+ import { DatePicker } from '@open-mercato/ui/primitives/date-picker'
5
+ import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'
6
+ import {
7
+ TimePicker,
8
+ TimePickerSlot,
9
+ TimePickerDurationChip,
10
+ TimePickerStatusChip,
11
+ } from '@open-mercato/ui/primitives/time-picker'
12
+ import { Button } from '@open-mercato/ui/primitives/button'
13
+ import type { DateRange } from '@open-mercato/ui/backend/date-range'
14
+ import type { GalleryEntry } from '../types'
15
+
16
+ // Component titles and variant names are proper nouns from the codebase and
17
+ // are deliberately not translated. `code` MUST contain the entry's importPath
18
+ // (enforced by the registry-integrity test) and is always reviewed alongside
19
+ // its sibling `render`.
20
+
21
+ // Fixed sample dates — previews must not depend on "today" so the gallery
22
+ // renders identically on any day (the `today` highlight ring aside).
23
+ const sampleDay = new Date(2026, 5, 12)
24
+ const sampleMonth = new Date(2026, 5, 1)
25
+ const sampleRange: DateRange = { start: new Date(2026, 5, 8), end: new Date(2026, 5, 19) }
26
+
27
+ function DemoCalendarSingle() {
28
+ const [selected, setSelected] = React.useState<Date | undefined>(sampleDay)
29
+ return (
30
+ <Calendar
31
+ mode="single"
32
+ selected={selected}
33
+ onSelect={(day) => setSelected(day)}
34
+ defaultMonth={sampleMonth}
35
+ />
36
+ )
37
+ }
38
+
39
+ function DemoCalendarRange() {
40
+ const [selected, setSelected] = React.useState<
41
+ { from: Date | undefined; to?: Date | undefined } | undefined
42
+ >({ from: sampleRange.start, to: sampleRange.end })
43
+ return (
44
+ <Calendar
45
+ mode="range"
46
+ selected={selected}
47
+ onSelect={(range) => setSelected(range)}
48
+ defaultMonth={sampleMonth}
49
+ />
50
+ )
51
+ }
52
+
53
+ const calendarEntry: GalleryEntry = {
54
+ id: 'calendar',
55
+ title: 'Calendar',
56
+ importPath: '@open-mercato/ui/primitives/calendar',
57
+ variants: [
58
+ {
59
+ id: 'single',
60
+ title: 'Single selection',
61
+ render: () => <DemoCalendarSingle />,
62
+ code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'
63
+
64
+ const [selected, setSelected] = React.useState<Date | undefined>()
65
+
66
+ <Calendar mode="single" selected={selected} onSelect={setSelected} />`,
67
+ },
68
+ {
69
+ id: 'range',
70
+ title: 'Range selection',
71
+ render: () => <DemoCalendarRange />,
72
+ code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'
73
+
74
+ const [selected, setSelected] = React.useState<{ from?: Date; to?: Date }>()
75
+
76
+ <Calendar mode="range" selected={selected} onSelect={setSelected} />`,
77
+ },
78
+ {
79
+ id: 'disabled-days',
80
+ title: 'Disabled days',
81
+ render: () => <Calendar defaultMonth={sampleMonth} disabled={{ dayOfWeek: [0, 6] }} />,
82
+ code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'
83
+
84
+ <Calendar disabled={{ dayOfWeek: [0, 6] }} />`,
85
+ },
86
+ ],
87
+ }
88
+
89
+ function DemoDatePicker() {
90
+ const [value, setValue] = React.useState<Date | null>(sampleDay)
91
+ return <DatePicker value={value} onChange={setValue} />
92
+ }
93
+
94
+ function DemoDatePickerWithTime() {
95
+ const [value, setValue] = React.useState<Date | null>(new Date(2026, 5, 12, 9, 30))
96
+ return <DatePicker value={value} onChange={setValue} withTime minuteStep={15} />
97
+ }
98
+
99
+ function DemoDatePickerTodayClear() {
100
+ const [value, setValue] = React.useState<Date | null>(null)
101
+ return <DatePicker value={value} onChange={setValue} footer="today-clear" />
102
+ }
103
+
104
+ const datePickerEntry: GalleryEntry = {
105
+ id: 'date-picker',
106
+ title: 'DatePicker',
107
+ importPath: '@open-mercato/ui/primitives/date-picker',
108
+ variants: [
109
+ {
110
+ id: 'default',
111
+ title: 'default (apply-cancel footer)',
112
+ render: () => <DemoDatePicker />,
113
+ code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'
114
+
115
+ const [value, setValue] = React.useState<Date | null>(null)
116
+
117
+ <DatePicker value={value} onChange={setValue} />`,
118
+ },
119
+ {
120
+ id: 'with-time',
121
+ title: 'withTime',
122
+ render: () => <DemoDatePickerWithTime />,
123
+ code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'
124
+
125
+ const [value, setValue] = React.useState<Date | null>(null)
126
+
127
+ <DatePicker value={value} onChange={setValue} withTime minuteStep={15} />`,
128
+ },
129
+ {
130
+ id: 'today-clear-footer',
131
+ title: "footer='today-clear'",
132
+ render: () => <DemoDatePickerTodayClear />,
133
+ code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'
134
+
135
+ const [value, setValue] = React.useState<Date | null>(null)
136
+
137
+ <DatePicker value={value} onChange={setValue} footer="today-clear" />`,
138
+ },
139
+ {
140
+ id: 'states',
141
+ title: 'Small / disabled',
142
+ render: () => (
143
+ <>
144
+ <DatePicker value={sampleDay} onChange={() => {}} size="sm" />
145
+ <DatePicker value={sampleDay} onChange={() => {}} disabled />
146
+ </>
147
+ ),
148
+ code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'
149
+
150
+ <DatePicker value={value} onChange={setValue} size="sm" />
151
+ <DatePicker value={value} onChange={setValue} disabled />`,
152
+ },
153
+ ],
154
+ }
155
+
156
+ function DemoDateRangePicker() {
157
+ const [value, setValue] = React.useState<DateRange | null>(sampleRange)
158
+ return <DateRangePicker value={value} onChange={setValue} />
159
+ }
160
+
161
+ function DemoDateRangePickerCompact() {
162
+ const [value, setValue] = React.useState<DateRange | null>(null)
163
+ return (
164
+ <DateRangePicker
165
+ value={value}
166
+ onChange={setValue}
167
+ showPresets={false}
168
+ numberOfMonths={1}
169
+ size="sm"
170
+ />
171
+ )
172
+ }
173
+
174
+ const dateRangePickerEntry: GalleryEntry = {
175
+ id: 'date-range-picker',
176
+ title: 'DateRangePicker',
177
+ importPath: '@open-mercato/ui/primitives/date-range-picker',
178
+ variants: [
179
+ {
180
+ id: 'default',
181
+ title: 'default (presets + two months)',
182
+ render: () => <DemoDateRangePicker />,
183
+ code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'
184
+ import type { DateRange } from '@open-mercato/ui/backend/date-range'
185
+
186
+ const [value, setValue] = React.useState<DateRange | null>(null)
187
+
188
+ <DateRangePicker value={value} onChange={setValue} />`,
189
+ },
190
+ {
191
+ id: 'compact',
192
+ title: 'Compact (no presets, one month)',
193
+ render: () => <DemoDateRangePickerCompact />,
194
+ code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'
195
+
196
+ <DateRangePicker
197
+ value={value}
198
+ onChange={setValue}
199
+ showPresets={false}
200
+ numberOfMonths={1}
201
+ size="sm"
202
+ />`,
203
+ },
204
+ {
205
+ id: 'disabled',
206
+ title: 'Disabled',
207
+ render: () => <DateRangePicker value={sampleRange} onChange={() => {}} disabled />,
208
+ code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'
209
+
210
+ <DateRangePicker value={value} onChange={setValue} disabled />`,
211
+ },
212
+ ],
213
+ }
214
+
215
+ const sampleSlots = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']
216
+
217
+ function DemoTimePickerTrigger() {
218
+ return (
219
+ <TimePicker
220
+ defaultValue="10:00"
221
+ slots={sampleSlots}
222
+ maxHeight={200}
223
+ trigger={<Button variant="outline">Pick a time</Button>}
224
+ />
225
+ )
226
+ }
227
+
228
+ const timePickerEntry: GalleryEntry = {
229
+ id: 'time-picker',
230
+ title: 'TimePicker',
231
+ importPath: '@open-mercato/ui/primitives/time-picker',
232
+ variants: [
233
+ {
234
+ id: 'inline-card',
235
+ title: 'Inline card',
236
+ render: () => (
237
+ <TimePicker defaultValue="10:00" slots={sampleSlots} maxHeight={160} />
238
+ ),
239
+ code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'
240
+
241
+ <TimePicker
242
+ defaultValue="10:00"
243
+ slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}
244
+ />`,
245
+ },
246
+ {
247
+ id: 'durations-statuses',
248
+ title: 'Durations + statuses',
249
+ render: () => (
250
+ <TimePicker
251
+ defaultValue="09:30"
252
+ slots={sampleSlots}
253
+ maxHeight={140}
254
+ durations={[{ value: 15 }, { value: 30 }, { value: 60 }, { value: 90 }]}
255
+ defaultActiveDuration={30}
256
+ statuses={[{ variant: 'available' }, { variant: 'busy' }, { variant: 'in-meeting' }]}
257
+ defaultActiveStatus="available"
258
+ />
259
+ ),
260
+ code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'
261
+
262
+ <TimePicker
263
+ defaultValue="09:30"
264
+ slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}
265
+ durations={[{ value: 15 }, { value: 30 }, { value: 60 }, { value: 90 }]}
266
+ defaultActiveDuration={30}
267
+ statuses={[{ variant: 'available' }, { variant: 'busy' }, { variant: 'in-meeting' }]}
268
+ defaultActiveStatus="available"
269
+ />`,
270
+ },
271
+ {
272
+ id: 'with-trigger',
273
+ title: 'With trigger (popover)',
274
+ render: () => <DemoTimePickerTrigger />,
275
+ code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'
276
+ import { Button } from '@open-mercato/ui/primitives/button'
277
+
278
+ <TimePicker
279
+ defaultValue="10:00"
280
+ slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}
281
+ trigger={<Button variant="outline">Pick a time</Button>}
282
+ />`,
283
+ },
284
+ {
285
+ id: 'atoms',
286
+ title: 'Atoms (Slot / DurationChip / StatusChip)',
287
+ render: () => (
288
+ <div className="flex flex-col gap-3">
289
+ <div className="flex w-56 flex-col gap-0.5">
290
+ <TimePickerSlot value="09:30" />
291
+ <TimePickerSlot value="10:00" selected />
292
+ <TimePickerSlot value="10:30" disabled />
293
+ </div>
294
+ <div className="flex items-center gap-2">
295
+ <TimePickerDurationChip value={30} />
296
+ <TimePickerDurationChip value={90} selected />
297
+ </div>
298
+ <div className="flex items-center gap-2">
299
+ <TimePickerStatusChip variant="available" selected />
300
+ <TimePickerStatusChip variant="busy" />
301
+ <TimePickerStatusChip variant="in-meeting" icon={<Clock className="size-3" aria-hidden="true" />} />
302
+ </div>
303
+ </div>
304
+ ),
305
+ code: `import { Clock } from 'lucide-react'
306
+ import {
307
+ TimePickerSlot,
308
+ TimePickerDurationChip,
309
+ TimePickerStatusChip,
310
+ } from '@open-mercato/ui/primitives/time-picker'
311
+
312
+ <TimePickerSlot value="10:00" selected />
313
+ <TimePickerDurationChip value={90} selected />
314
+ <TimePickerStatusChip variant="busy" />
315
+ <TimePickerStatusChip variant="in-meeting" icon={<Clock className="size-3" />} />`,
316
+ },
317
+ ],
318
+ }
319
+
320
+ export const entries: GalleryEntry[] = [
321
+ calendarEntry,
322
+ datePickerEntry,
323
+ dateRangePickerEntry,
324
+ timePickerEntry,
325
+ ]