@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,677 @@
1
+ import * as React from 'react'
2
+ import {
3
+ FilePlus2,
4
+ Info,
5
+ LayoutDashboard,
6
+ Settings,
7
+ TriangleAlert,
8
+ UserRound,
9
+ Users,
10
+ } from 'lucide-react'
11
+ import { Button } from '@open-mercato/ui/primitives/button'
12
+ import {
13
+ Dialog,
14
+ DialogClose,
15
+ DialogContent,
16
+ DialogDescription,
17
+ DialogFooter,
18
+ DialogHeader,
19
+ DialogTitle,
20
+ DialogTrigger,
21
+ } from '@open-mercato/ui/primitives/dialog'
22
+ import {
23
+ Drawer,
24
+ DrawerBody,
25
+ DrawerClose,
26
+ DrawerContent,
27
+ DrawerDescription,
28
+ DrawerFooter,
29
+ DrawerHeader,
30
+ DrawerTitle,
31
+ DrawerTrigger,
32
+ } from '@open-mercato/ui/primitives/drawer'
33
+ import {
34
+ Sheet,
35
+ SheetContent,
36
+ SheetDescription,
37
+ SheetFooter,
38
+ SheetHeader,
39
+ SheetTitle,
40
+ SheetTrigger,
41
+ } from '@open-mercato/ui/primitives/sheet'
42
+ import {
43
+ Popover,
44
+ PopoverContent,
45
+ PopoverTrigger,
46
+ } from '@open-mercato/ui/primitives/popover'
47
+ import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
48
+ import {
49
+ CommandMenu,
50
+ CommandMenuContent,
51
+ CommandMenuEmpty,
52
+ CommandMenuFooter,
53
+ CommandMenuGroup,
54
+ CommandMenuInput,
55
+ CommandMenuItem,
56
+ CommandMenuList,
57
+ CommandMenuSeparator,
58
+ CommandMenuTrigger,
59
+ } from '@open-mercato/ui/primitives/command-menu'
60
+ import type { GalleryEntry } from '../types'
61
+
62
+ // Component titles and variant names are proper nouns from the codebase and
63
+ // are deliberately not translated. `code` MUST contain the entry's importPath
64
+ // (enforced by the registry-integrity test) and is always reviewed alongside
65
+ // its sibling `render`.
66
+ //
67
+ // Every stateful overlay renders a REAL trigger in the preview stage and opens
68
+ // uncontrolled — the actual Radix focus trap, Escape-to-close, and
69
+ // outside-click behavior are exercised live, never imitated.
70
+
71
+ const dialogEntry: GalleryEntry = {
72
+ id: 'dialog',
73
+ title: 'Dialog',
74
+ importPath: '@open-mercato/ui/primitives/dialog',
75
+ docsAnchor: '#dialog',
76
+ variants: [
77
+ {
78
+ id: 'default',
79
+ title: 'default',
80
+ render: () => (
81
+ <Dialog>
82
+ <DialogTrigger asChild>
83
+ <Button variant="outline">Open dialog</Button>
84
+ </DialogTrigger>
85
+ <DialogContent>
86
+ <DialogHeader>
87
+ <DialogTitle>Rename view</DialogTitle>
88
+ <DialogDescription>
89
+ The new name is visible to everyone in this workspace.
90
+ </DialogDescription>
91
+ </DialogHeader>
92
+ <p className="text-sm text-muted-foreground">
93
+ Press Escape or click outside to dismiss.
94
+ </p>
95
+ <DialogFooter>
96
+ <DialogClose asChild>
97
+ <Button variant="outline">Cancel</Button>
98
+ </DialogClose>
99
+ <Button>Save changes</Button>
100
+ </DialogFooter>
101
+ </DialogContent>
102
+ </Dialog>
103
+ ),
104
+ code: `import { Button } from '@open-mercato/ui/primitives/button'
105
+ import {
106
+ Dialog,
107
+ DialogTrigger,
108
+ DialogContent,
109
+ DialogHeader,
110
+ DialogTitle,
111
+ DialogDescription,
112
+ DialogFooter,
113
+ DialogClose,
114
+ } from '@open-mercato/ui/primitives/dialog'
115
+
116
+ <Dialog>
117
+ <DialogTrigger asChild>
118
+ <Button variant="outline">Open dialog</Button>
119
+ </DialogTrigger>
120
+ <DialogContent>
121
+ <DialogHeader>
122
+ <DialogTitle>Rename view</DialogTitle>
123
+ <DialogDescription>
124
+ The new name is visible to everyone in this workspace.
125
+ </DialogDescription>
126
+ </DialogHeader>
127
+ <DialogFooter>
128
+ <DialogClose asChild>
129
+ <Button variant="outline">Cancel</Button>
130
+ </DialogClose>
131
+ <Button>Save changes</Button>
132
+ </DialogFooter>
133
+ </DialogContent>
134
+ </Dialog>`,
135
+ },
136
+ {
137
+ id: 'status-leading',
138
+ title: 'Status leading badge',
139
+ render: () => (
140
+ <Dialog>
141
+ <DialogTrigger asChild>
142
+ <Button variant="destructive-outline">Delete record</Button>
143
+ </DialogTrigger>
144
+ <DialogContent size="sm">
145
+ <DialogHeader leading={<TriangleAlert className="size-4" />} leadingTone="error">
146
+ <DialogTitle>Delete this record?</DialogTitle>
147
+ <DialogDescription>
148
+ This removes the record from every linked view.
149
+ </DialogDescription>
150
+ </DialogHeader>
151
+ <DialogFooter layout="equal">
152
+ <DialogClose asChild>
153
+ <Button variant="outline">Cancel</Button>
154
+ </DialogClose>
155
+ <Button variant="destructive">Delete</Button>
156
+ </DialogFooter>
157
+ </DialogContent>
158
+ </Dialog>
159
+ ),
160
+ code: `import { TriangleAlert } from 'lucide-react'
161
+ import { Button } from '@open-mercato/ui/primitives/button'
162
+ import {
163
+ Dialog,
164
+ DialogTrigger,
165
+ DialogContent,
166
+ DialogHeader,
167
+ DialogTitle,
168
+ DialogDescription,
169
+ DialogFooter,
170
+ DialogClose,
171
+ } from '@open-mercato/ui/primitives/dialog'
172
+
173
+ <Dialog>
174
+ <DialogTrigger asChild>
175
+ <Button variant="destructive-outline">Delete record</Button>
176
+ </DialogTrigger>
177
+ <DialogContent size="sm">
178
+ <DialogHeader leading={<TriangleAlert className="size-4" />} leadingTone="error">
179
+ <DialogTitle>Delete this record?</DialogTitle>
180
+ <DialogDescription>
181
+ This removes the record from every linked view.
182
+ </DialogDescription>
183
+ </DialogHeader>
184
+ <DialogFooter layout="equal">
185
+ <DialogClose asChild>
186
+ <Button variant="outline">Cancel</Button>
187
+ </DialogClose>
188
+ <Button variant="destructive">Delete</Button>
189
+ </DialogFooter>
190
+ </DialogContent>
191
+ </Dialog>`,
192
+ },
193
+ ],
194
+ }
195
+
196
+ const drawerEntry: GalleryEntry = {
197
+ id: 'drawer',
198
+ title: 'Drawer',
199
+ importPath: '@open-mercato/ui/primitives/drawer',
200
+ docsAnchor: '#drawer',
201
+ figmaNodeId: '486:7366',
202
+ variants: [
203
+ {
204
+ id: 'default',
205
+ title: 'default',
206
+ render: () => (
207
+ <Drawer>
208
+ <DrawerTrigger asChild>
209
+ <Button variant="outline">Open drawer</Button>
210
+ </DrawerTrigger>
211
+ <DrawerContent>
212
+ <DrawerHeader>
213
+ <DrawerTitle>Edit person</DrawerTitle>
214
+ <DrawerDescription>Update the contact details below.</DrawerDescription>
215
+ </DrawerHeader>
216
+ <DrawerBody>
217
+ <div className="divide-y divide-input text-sm">
218
+ <div className="flex items-center justify-between py-3">
219
+ <span className="text-muted-foreground">Name</span>
220
+ <span className="text-foreground">Anna Kowalska</span>
221
+ </div>
222
+ <div className="flex items-center justify-between py-3">
223
+ <span className="text-muted-foreground">Role</span>
224
+ <span className="text-foreground">Account manager</span>
225
+ </div>
226
+ <div className="flex items-center justify-between py-3">
227
+ <span className="text-muted-foreground">Team</span>
228
+ <span className="text-foreground">Sales EU</span>
229
+ </div>
230
+ </div>
231
+ </DrawerBody>
232
+ <DrawerFooter layout="equal">
233
+ <DrawerClose asChild>
234
+ <Button variant="outline">Cancel</Button>
235
+ </DrawerClose>
236
+ <Button>Save changes</Button>
237
+ </DrawerFooter>
238
+ </DrawerContent>
239
+ </Drawer>
240
+ ),
241
+ code: `import { Button } from '@open-mercato/ui/primitives/button'
242
+ import {
243
+ Drawer,
244
+ DrawerTrigger,
245
+ DrawerContent,
246
+ DrawerHeader,
247
+ DrawerTitle,
248
+ DrawerDescription,
249
+ DrawerBody,
250
+ DrawerFooter,
251
+ DrawerClose,
252
+ } from '@open-mercato/ui/primitives/drawer'
253
+
254
+ <Drawer>
255
+ <DrawerTrigger asChild>
256
+ <Button variant="outline">Open drawer</Button>
257
+ </DrawerTrigger>
258
+ <DrawerContent>
259
+ <DrawerHeader>
260
+ <DrawerTitle>Edit person</DrawerTitle>
261
+ <DrawerDescription>Update the contact details below.</DrawerDescription>
262
+ </DrawerHeader>
263
+ <DrawerBody>{/* content */}</DrawerBody>
264
+ <DrawerFooter layout="equal">
265
+ <DrawerClose asChild>
266
+ <Button variant="outline">Cancel</Button>
267
+ </DrawerClose>
268
+ <Button>Save changes</Button>
269
+ </DrawerFooter>
270
+ </DrawerContent>
271
+ </Drawer>`,
272
+ },
273
+ {
274
+ id: 'leading-icon',
275
+ title: 'Header leading icon',
276
+ render: () => (
277
+ <Drawer>
278
+ <DrawerTrigger asChild>
279
+ <Button variant="outline">Open profile drawer</Button>
280
+ </DrawerTrigger>
281
+ <DrawerContent>
282
+ <DrawerHeader leading={<UserRound className="size-4" />}>
283
+ <DrawerTitle>Profile details</DrawerTitle>
284
+ <DrawerDescription>Read-only summary of this account.</DrawerDescription>
285
+ </DrawerHeader>
286
+ <DrawerBody>
287
+ <p className="text-sm text-muted-foreground">
288
+ The header badge takes any Lucide icon via the <code>leading</code> prop.
289
+ </p>
290
+ </DrawerBody>
291
+ <DrawerFooter layout="equal">
292
+ <DrawerClose asChild>
293
+ <Button variant="outline">Cancel</Button>
294
+ </DrawerClose>
295
+ <Button>Continue</Button>
296
+ </DrawerFooter>
297
+ </DrawerContent>
298
+ </Drawer>
299
+ ),
300
+ code: `import { UserRound } from 'lucide-react'
301
+ import { Button } from '@open-mercato/ui/primitives/button'
302
+ import {
303
+ Drawer,
304
+ DrawerTrigger,
305
+ DrawerContent,
306
+ DrawerHeader,
307
+ DrawerTitle,
308
+ DrawerDescription,
309
+ DrawerBody,
310
+ DrawerFooter,
311
+ DrawerClose,
312
+ } from '@open-mercato/ui/primitives/drawer'
313
+
314
+ <Drawer>
315
+ <DrawerTrigger asChild>
316
+ <Button variant="outline">Open profile drawer</Button>
317
+ </DrawerTrigger>
318
+ <DrawerContent>
319
+ <DrawerHeader leading={<UserRound className="size-4" />}>
320
+ <DrawerTitle>Profile details</DrawerTitle>
321
+ <DrawerDescription>Read-only summary of this account.</DrawerDescription>
322
+ </DrawerHeader>
323
+ <DrawerBody>{/* content */}</DrawerBody>
324
+ <DrawerFooter layout="equal">
325
+ <DrawerClose asChild>
326
+ <Button variant="outline">Cancel</Button>
327
+ </DrawerClose>
328
+ <Button>Continue</Button>
329
+ </DrawerFooter>
330
+ </DrawerContent>
331
+ </Drawer>`,
332
+ },
333
+ ],
334
+ }
335
+
336
+ const sheetEntry: GalleryEntry = {
337
+ id: 'sheet',
338
+ title: 'Sheet',
339
+ importPath: '@open-mercato/ui/primitives/sheet',
340
+ variants: [
341
+ {
342
+ id: 'right',
343
+ title: 'right (default)',
344
+ render: () => (
345
+ <Sheet>
346
+ <SheetTrigger asChild>
347
+ <Button variant="outline">Open sheet</Button>
348
+ </SheetTrigger>
349
+ <SheetContent>
350
+ <SheetHeader>
351
+ <SheetTitle>Filters</SheetTitle>
352
+ <SheetDescription>Narrow down the current list.</SheetDescription>
353
+ </SheetHeader>
354
+ <div className="flex-1 px-4 text-sm text-muted-foreground">
355
+ Sheet body content scrolls independently of the header and footer.
356
+ </div>
357
+ <SheetFooter>
358
+ <Button variant="outline">Reset</Button>
359
+ <Button>Apply</Button>
360
+ </SheetFooter>
361
+ </SheetContent>
362
+ </Sheet>
363
+ ),
364
+ code: `import { Button } from '@open-mercato/ui/primitives/button'
365
+ import {
366
+ Sheet,
367
+ SheetTrigger,
368
+ SheetContent,
369
+ SheetHeader,
370
+ SheetTitle,
371
+ SheetDescription,
372
+ SheetFooter,
373
+ } from '@open-mercato/ui/primitives/sheet'
374
+
375
+ <Sheet>
376
+ <SheetTrigger asChild>
377
+ <Button variant="outline">Open sheet</Button>
378
+ </SheetTrigger>
379
+ <SheetContent>
380
+ <SheetHeader>
381
+ <SheetTitle>Filters</SheetTitle>
382
+ <SheetDescription>Narrow down the current list.</SheetDescription>
383
+ </SheetHeader>
384
+ {/* body */}
385
+ <SheetFooter>
386
+ <Button variant="outline">Reset</Button>
387
+ <Button>Apply</Button>
388
+ </SheetFooter>
389
+ </SheetContent>
390
+ </Sheet>`,
391
+ },
392
+ {
393
+ id: 'left',
394
+ title: 'side="left"',
395
+ render: () => (
396
+ <Sheet>
397
+ <SheetTrigger asChild>
398
+ <Button variant="outline">Open left sheet</Button>
399
+ </SheetTrigger>
400
+ <SheetContent side="left">
401
+ <SheetHeader>
402
+ <SheetTitle>Navigation</SheetTitle>
403
+ <SheetDescription>Slides in from the left edge.</SheetDescription>
404
+ </SheetHeader>
405
+ <div className="flex-1 px-4 text-sm text-muted-foreground">
406
+ Use the left side for mobile menus and secondary navigation.
407
+ </div>
408
+ </SheetContent>
409
+ </Sheet>
410
+ ),
411
+ code: `import { Button } from '@open-mercato/ui/primitives/button'
412
+ import {
413
+ Sheet,
414
+ SheetTrigger,
415
+ SheetContent,
416
+ SheetHeader,
417
+ SheetTitle,
418
+ SheetDescription,
419
+ } from '@open-mercato/ui/primitives/sheet'
420
+
421
+ <Sheet>
422
+ <SheetTrigger asChild>
423
+ <Button variant="outline">Open left sheet</Button>
424
+ </SheetTrigger>
425
+ <SheetContent side="left">
426
+ <SheetHeader>
427
+ <SheetTitle>Navigation</SheetTitle>
428
+ <SheetDescription>Slides in from the left edge.</SheetDescription>
429
+ </SheetHeader>
430
+ {/* body */}
431
+ </SheetContent>
432
+ </Sheet>`,
433
+ },
434
+ ],
435
+ }
436
+
437
+ const popoverEntry: GalleryEntry = {
438
+ id: 'popover',
439
+ title: 'Popover',
440
+ importPath: '@open-mercato/ui/primitives/popover',
441
+ variants: [
442
+ {
443
+ id: 'default',
444
+ title: 'default',
445
+ render: () => (
446
+ <Popover>
447
+ <PopoverTrigger asChild>
448
+ <Button variant="outline">Open popover</Button>
449
+ </PopoverTrigger>
450
+ <PopoverContent className="p-4">
451
+ <div className="flex flex-col gap-1">
452
+ <span className="text-sm font-medium text-foreground">Display density</span>
453
+ <span className="text-sm text-muted-foreground">
454
+ Anchored to its trigger; Escape and outside-click dismiss it.
455
+ </span>
456
+ </div>
457
+ </PopoverContent>
458
+ </Popover>
459
+ ),
460
+ code: `import { Button } from '@open-mercato/ui/primitives/button'
461
+ import {
462
+ Popover,
463
+ PopoverTrigger,
464
+ PopoverContent,
465
+ } from '@open-mercato/ui/primitives/popover'
466
+
467
+ <Popover>
468
+ <PopoverTrigger asChild>
469
+ <Button variant="outline">Open popover</Button>
470
+ </PopoverTrigger>
471
+ <PopoverContent className="p-4">
472
+ {/* content */}
473
+ </PopoverContent>
474
+ </Popover>`,
475
+ },
476
+ {
477
+ id: 'align-end',
478
+ title: 'align="end" + side="top"',
479
+ render: () => (
480
+ <Popover>
481
+ <PopoverTrigger asChild>
482
+ <Button variant="outline">Open above</Button>
483
+ </PopoverTrigger>
484
+ <PopoverContent side="top" align="end" className="p-4">
485
+ <span className="text-sm text-muted-foreground">
486
+ Placement follows Radix side/align props and flips when space runs out.
487
+ </span>
488
+ </PopoverContent>
489
+ </Popover>
490
+ ),
491
+ code: `import { Button } from '@open-mercato/ui/primitives/button'
492
+ import {
493
+ Popover,
494
+ PopoverTrigger,
495
+ PopoverContent,
496
+ } from '@open-mercato/ui/primitives/popover'
497
+
498
+ <Popover>
499
+ <PopoverTrigger asChild>
500
+ <Button variant="outline">Open above</Button>
501
+ </PopoverTrigger>
502
+ <PopoverContent side="top" align="end" className="p-4">
503
+ {/* content */}
504
+ </PopoverContent>
505
+ </Popover>`,
506
+ },
507
+ ],
508
+ }
509
+
510
+ const tooltipEntry: GalleryEntry = {
511
+ id: 'tooltip',
512
+ title: 'Tooltip',
513
+ importPath: '@open-mercato/ui/primitives/tooltip',
514
+ docsAnchor: '#tooltip--simpletooltip',
515
+ variants: [
516
+ {
517
+ id: 'default',
518
+ title: 'default (dark)',
519
+ render: () => (
520
+ <SimpleTooltip content="Duplicates this view with all filters">
521
+ <Button variant="outline">Hover me</Button>
522
+ </SimpleTooltip>
523
+ ),
524
+ code: `import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
525
+ import { Button } from '@open-mercato/ui/primitives/button'
526
+
527
+ <SimpleTooltip content="Duplicates this view with all filters">
528
+ <Button variant="outline">Hover me</Button>
529
+ </SimpleTooltip>`,
530
+ },
531
+ {
532
+ id: 'light',
533
+ title: 'light',
534
+ render: () => (
535
+ <SimpleTooltip content="Help text on a light surface" variant="light">
536
+ <Button variant="outline">
537
+ <Info />
538
+ Light variant
539
+ </Button>
540
+ </SimpleTooltip>
541
+ ),
542
+ code: `import { Info } from 'lucide-react'
543
+ import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
544
+ import { Button } from '@open-mercato/ui/primitives/button'
545
+
546
+ <SimpleTooltip content="Help text on a light surface" variant="light">
547
+ <Button variant="outline"><Info />Light variant</Button>
548
+ </SimpleTooltip>`,
549
+ },
550
+ {
551
+ id: 'sizes',
552
+ title: 'Sizes',
553
+ render: () => (
554
+ <>
555
+ <SimpleTooltip content="Small" size="sm">
556
+ <Button variant="outline" size="sm">sm</Button>
557
+ </SimpleTooltip>
558
+ <SimpleTooltip content="Default">
559
+ <Button variant="outline" size="sm">default</Button>
560
+ </SimpleTooltip>
561
+ <SimpleTooltip content="Large tooltip for longer helper copy" size="lg">
562
+ <Button variant="outline" size="sm">lg</Button>
563
+ </SimpleTooltip>
564
+ </>
565
+ ),
566
+ code: `import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
567
+ import { Button } from '@open-mercato/ui/primitives/button'
568
+
569
+ <SimpleTooltip content="Small" size="sm">
570
+ <Button variant="outline" size="sm">sm</Button>
571
+ </SimpleTooltip>
572
+ <SimpleTooltip content="Default">
573
+ <Button variant="outline" size="sm">default</Button>
574
+ </SimpleTooltip>
575
+ <SimpleTooltip content="Large tooltip for longer helper copy" size="lg">
576
+ <Button variant="outline" size="sm">lg</Button>
577
+ </SimpleTooltip>`,
578
+ },
579
+ ],
580
+ }
581
+
582
+ const commandMenuEntry: GalleryEntry = {
583
+ id: 'command-menu',
584
+ title: 'CommandMenu',
585
+ importPath: '@open-mercato/ui/primitives/command-menu',
586
+ docsAnchor: '#commandmenu',
587
+ variants: [
588
+ {
589
+ id: 'default',
590
+ title: 'default',
591
+ render: () => (
592
+ <CommandMenu>
593
+ <CommandMenuTrigger asChild>
594
+ <Button variant="outline">Open command menu</Button>
595
+ </CommandMenuTrigger>
596
+ <CommandMenuContent>
597
+ <CommandMenuInput placeholder="Search actions..." />
598
+ <CommandMenuList>
599
+ <CommandMenuEmpty>No results.</CommandMenuEmpty>
600
+ <CommandMenuGroup heading="Actions">
601
+ <CommandMenuItem leading={<FilePlus2 className="size-4 text-muted-foreground" />}>
602
+ Create record
603
+ </CommandMenuItem>
604
+ <CommandMenuItem leading={<Users className="size-4 text-muted-foreground" />} description="Invite teammates to this workspace">
605
+ Manage members
606
+ </CommandMenuItem>
607
+ </CommandMenuGroup>
608
+ <CommandMenuSeparator />
609
+ <CommandMenuGroup heading="Navigate">
610
+ <CommandMenuItem leading={<LayoutDashboard className="size-4 text-muted-foreground" />}>
611
+ Go to dashboard
612
+ </CommandMenuItem>
613
+ <CommandMenuItem leading={<Settings className="size-4 text-muted-foreground" />}>
614
+ Open settings
615
+ </CommandMenuItem>
616
+ </CommandMenuGroup>
617
+ </CommandMenuList>
618
+ <CommandMenuFooter />
619
+ </CommandMenuContent>
620
+ </CommandMenu>
621
+ ),
622
+ code: `import { FilePlus2, LayoutDashboard, Settings, Users } from 'lucide-react'
623
+ import { Button } from '@open-mercato/ui/primitives/button'
624
+ import {
625
+ CommandMenu,
626
+ CommandMenuTrigger,
627
+ CommandMenuContent,
628
+ CommandMenuInput,
629
+ CommandMenuList,
630
+ CommandMenuEmpty,
631
+ CommandMenuGroup,
632
+ CommandMenuItem,
633
+ CommandMenuSeparator,
634
+ CommandMenuFooter,
635
+ } from '@open-mercato/ui/primitives/command-menu'
636
+
637
+ <CommandMenu>
638
+ <CommandMenuTrigger asChild>
639
+ <Button variant="outline">Open command menu</Button>
640
+ </CommandMenuTrigger>
641
+ <CommandMenuContent>
642
+ <CommandMenuInput placeholder="Search actions..." />
643
+ <CommandMenuList>
644
+ <CommandMenuEmpty>No results.</CommandMenuEmpty>
645
+ <CommandMenuGroup heading="Actions">
646
+ <CommandMenuItem leading={<FilePlus2 className="size-4" />}>
647
+ Create record
648
+ </CommandMenuItem>
649
+ <CommandMenuItem leading={<Users className="size-4" />} description="Invite teammates to this workspace">
650
+ Manage members
651
+ </CommandMenuItem>
652
+ </CommandMenuGroup>
653
+ <CommandMenuSeparator />
654
+ <CommandMenuGroup heading="Navigate">
655
+ <CommandMenuItem leading={<LayoutDashboard className="size-4" />}>
656
+ Go to dashboard
657
+ </CommandMenuItem>
658
+ <CommandMenuItem leading={<Settings className="size-4" />}>
659
+ Open settings
660
+ </CommandMenuItem>
661
+ </CommandMenuGroup>
662
+ </CommandMenuList>
663
+ <CommandMenuFooter />
664
+ </CommandMenuContent>
665
+ </CommandMenu>`,
666
+ },
667
+ ],
668
+ }
669
+
670
+ export const entries: GalleryEntry[] = [
671
+ dialogEntry,
672
+ drawerEntry,
673
+ sheetEntry,
674
+ popoverEntry,
675
+ tooltipEntry,
676
+ commandMenuEntry,
677
+ ]