@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,573 @@
1
+ import * as React from 'react'
2
+ import { CreditCard, LayoutGrid, Settings, ShoppingCart, Truck } from 'lucide-react'
3
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
4
+ import {
5
+ Breadcrumb,
6
+ BreadcrumbEllipsis,
7
+ BreadcrumbItem,
8
+ BreadcrumbLink,
9
+ BreadcrumbList,
10
+ BreadcrumbPage,
11
+ BreadcrumbSeparator,
12
+ } from '@open-mercato/ui/primitives/breadcrumb'
13
+ import { Pagination } from '@open-mercato/ui/primitives/pagination'
14
+ import {
15
+ SegmentedControl,
16
+ SegmentedControlItem,
17
+ } from '@open-mercato/ui/primitives/segmented-control'
18
+ import {
19
+ Accordion,
20
+ AccordionContent,
21
+ AccordionItem,
22
+ AccordionTrigger,
23
+ } from '@open-mercato/ui/primitives/accordion'
24
+ import type { GalleryEntry } from '../types'
25
+
26
+ // Component titles and variant names are proper nouns from the codebase and
27
+ // are deliberately not translated. `code` MUST contain the entry's importPath
28
+ // (enforced by the registry-integrity test) and is always reviewed alongside
29
+ // its sibling `render`.
30
+
31
+ // Pagination is a controlled component — these small wrappers own the page
32
+ // state so the preview stays interactive without polluting the entry shape.
33
+
34
+ function PaginationBasicDemo() {
35
+ const [page, setPage] = React.useState(2)
36
+ const [pageSize, setPageSize] = React.useState(25)
37
+ return (
38
+ <Pagination
39
+ page={page}
40
+ pageSize={pageSize}
41
+ total={400}
42
+ onPageChange={setPage}
43
+ onPageSizeChange={setPageSize}
44
+ />
45
+ )
46
+ }
47
+
48
+ function PaginationCompactDemo() {
49
+ const [page, setPage] = React.useState(1)
50
+ return (
51
+ <Pagination
52
+ page={page}
53
+ pageSize={20}
54
+ total={120}
55
+ onPageChange={setPage}
56
+ showFirstLast={false}
57
+ showPageSize={false}
58
+ />
59
+ )
60
+ }
61
+
62
+ const tabsEntry: GalleryEntry = {
63
+ id: 'tabs',
64
+ title: 'Tabs',
65
+ importPath: '@open-mercato/ui/primitives/tabs',
66
+ usage: {
67
+ do: [
68
+ 'variant="underline" is the canon for page-level tab strips; pill only for small embedded switchers.',
69
+ 'TabsList always carries an aria-label; use count and leading to add context to triggers.',
70
+ ],
71
+ dont: ['No hand-rolled tab strips from buttons and border classes — lint flags raw tab lists.'],
72
+ },
73
+ docsAnchor: '#tabs',
74
+ figmaNodeId: '553:734',
75
+ variants: [
76
+ {
77
+ id: 'underline',
78
+ title: 'underline',
79
+ // Underline is the DS canon for page-level tab strips — flat rail
80
+ // with an accent underline, per-tab `leading` icon and `count` badge.
81
+ render: () => (
82
+ <Tabs defaultValue="orders" variant="underline" className="w-full">
83
+ <TabsList aria-label="Customer sections">
84
+ <TabsTrigger value="overview" leading={<LayoutGrid className="size-4" />}>
85
+ Overview
86
+ </TabsTrigger>
87
+ <TabsTrigger value="orders" leading={<ShoppingCart className="size-4" />} count={12}>
88
+ Orders
89
+ </TabsTrigger>
90
+ <TabsTrigger value="settings" leading={<Settings className="size-4" />}>
91
+ Settings
92
+ </TabsTrigger>
93
+ </TabsList>
94
+ <TabsContent value="overview">
95
+ <p className="text-sm text-muted-foreground">Customer overview panel.</p>
96
+ </TabsContent>
97
+ <TabsContent value="orders">
98
+ <p className="text-sm text-muted-foreground">12 orders in the last 30 days.</p>
99
+ </TabsContent>
100
+ <TabsContent value="settings">
101
+ <p className="text-sm text-muted-foreground">Notification and access settings.</p>
102
+ </TabsContent>
103
+ </Tabs>
104
+ ),
105
+ code: `import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'
106
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
107
+
108
+ <Tabs defaultValue="orders" variant="underline">
109
+ <TabsList aria-label="Customer sections">
110
+ <TabsTrigger value="overview" leading={<LayoutGrid className="size-4" />}>Overview</TabsTrigger>
111
+ <TabsTrigger value="orders" leading={<ShoppingCart className="size-4" />} count={12}>Orders</TabsTrigger>
112
+ <TabsTrigger value="settings" leading={<Settings className="size-4" />}>Settings</TabsTrigger>
113
+ </TabsList>
114
+ <TabsContent value="overview">…</TabsContent>
115
+ <TabsContent value="orders">…</TabsContent>
116
+ <TabsContent value="settings">…</TabsContent>
117
+ </Tabs>`,
118
+ },
119
+ {
120
+ id: 'pill',
121
+ title: 'pill (default)',
122
+ render: () => (
123
+ <Tabs defaultValue="preview">
124
+ <TabsList aria-label="Editor view">
125
+ <TabsTrigger value="preview">Preview</TabsTrigger>
126
+ <TabsTrigger value="code">Code</TabsTrigger>
127
+ <TabsTrigger value="logs">Logs</TabsTrigger>
128
+ </TabsList>
129
+ <TabsContent value="preview">
130
+ <p className="text-sm text-muted-foreground">Rendered preview.</p>
131
+ </TabsContent>
132
+ <TabsContent value="code">
133
+ <p className="text-sm text-muted-foreground">Source code panel.</p>
134
+ </TabsContent>
135
+ <TabsContent value="logs">
136
+ <p className="text-sm text-muted-foreground">Runtime logs panel.</p>
137
+ </TabsContent>
138
+ </Tabs>
139
+ ),
140
+ code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
141
+
142
+ <Tabs defaultValue="preview">
143
+ <TabsList aria-label="Editor view">
144
+ <TabsTrigger value="preview">Preview</TabsTrigger>
145
+ <TabsTrigger value="code">Code</TabsTrigger>
146
+ <TabsTrigger value="logs">Logs</TabsTrigger>
147
+ </TabsList>
148
+ <TabsContent value="preview">…</TabsContent>
149
+ <TabsContent value="code">…</TabsContent>
150
+ <TabsContent value="logs">…</TabsContent>
151
+ </Tabs>`,
152
+ },
153
+ {
154
+ id: 'pill-vertical',
155
+ title: 'pill, vertical',
156
+ render: () => (
157
+ <Tabs defaultValue="profile" orientation="vertical" className="w-full">
158
+ <TabsList aria-label="Account settings">
159
+ <TabsTrigger value="profile">Profile</TabsTrigger>
160
+ <TabsTrigger value="billing">Billing</TabsTrigger>
161
+ <TabsTrigger value="security">Security</TabsTrigger>
162
+ </TabsList>
163
+ <TabsContent value="profile">
164
+ <p className="text-sm text-muted-foreground">Profile settings panel.</p>
165
+ </TabsContent>
166
+ <TabsContent value="billing">
167
+ <p className="text-sm text-muted-foreground">Billing settings panel.</p>
168
+ </TabsContent>
169
+ <TabsContent value="security">
170
+ <p className="text-sm text-muted-foreground">Security settings panel.</p>
171
+ </TabsContent>
172
+ </Tabs>
173
+ ),
174
+ code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
175
+
176
+ <Tabs defaultValue="profile" orientation="vertical">
177
+ <TabsList aria-label="Account settings">
178
+ <TabsTrigger value="profile">Profile</TabsTrigger>
179
+ <TabsTrigger value="billing">Billing</TabsTrigger>
180
+ <TabsTrigger value="security">Security</TabsTrigger>
181
+ </TabsList>
182
+ <TabsContent value="profile">…</TabsContent>
183
+ <TabsContent value="billing">…</TabsContent>
184
+ <TabsContent value="security">…</TabsContent>
185
+ </Tabs>`,
186
+ },
187
+ ],
188
+ }
189
+
190
+ const breadcrumbEntry: GalleryEntry = {
191
+ id: 'breadcrumb',
192
+ title: 'Breadcrumb',
193
+ importPath: '@open-mercato/ui/primitives/breadcrumb',
194
+ docsAnchor: '#breadcrumb',
195
+ variants: [
196
+ {
197
+ id: 'slash',
198
+ title: 'slash (default)',
199
+ render: () => (
200
+ <Breadcrumb>
201
+ <BreadcrumbList>
202
+ <BreadcrumbItem>
203
+ <BreadcrumbLink href="#gallery-entry-breadcrumb">Dashboard</BreadcrumbLink>
204
+ </BreadcrumbItem>
205
+ <BreadcrumbSeparator />
206
+ <BreadcrumbItem>
207
+ <BreadcrumbLink href="#gallery-entry-breadcrumb">Products</BreadcrumbLink>
208
+ </BreadcrumbItem>
209
+ <BreadcrumbSeparator />
210
+ <BreadcrumbItem>
211
+ <BreadcrumbPage>Winter catalog</BreadcrumbPage>
212
+ </BreadcrumbItem>
213
+ </BreadcrumbList>
214
+ </Breadcrumb>
215
+ ),
216
+ code: `import {
217
+ Breadcrumb,
218
+ BreadcrumbItem,
219
+ BreadcrumbLink,
220
+ BreadcrumbList,
221
+ BreadcrumbPage,
222
+ BreadcrumbSeparator,
223
+ } from '@open-mercato/ui/primitives/breadcrumb'
224
+
225
+ <Breadcrumb>
226
+ <BreadcrumbList>
227
+ <BreadcrumbItem>
228
+ <BreadcrumbLink href="/backend">Dashboard</BreadcrumbLink>
229
+ </BreadcrumbItem>
230
+ <BreadcrumbSeparator />
231
+ <BreadcrumbItem>
232
+ <BreadcrumbLink href="/backend/products">Products</BreadcrumbLink>
233
+ </BreadcrumbItem>
234
+ <BreadcrumbSeparator />
235
+ <BreadcrumbItem>
236
+ <BreadcrumbPage>Winter catalog</BreadcrumbPage>
237
+ </BreadcrumbItem>
238
+ </BreadcrumbList>
239
+ </Breadcrumb>`,
240
+ },
241
+ {
242
+ id: 'arrow',
243
+ title: 'arrow divider',
244
+ render: () => (
245
+ <Breadcrumb divider="arrow">
246
+ <BreadcrumbList>
247
+ <BreadcrumbItem>
248
+ <BreadcrumbLink href="#gallery-entry-breadcrumb">Orders</BreadcrumbLink>
249
+ </BreadcrumbItem>
250
+ <BreadcrumbSeparator />
251
+ <BreadcrumbItem>
252
+ <BreadcrumbLink href="#gallery-entry-breadcrumb">#20418</BreadcrumbLink>
253
+ </BreadcrumbItem>
254
+ <BreadcrumbSeparator />
255
+ <BreadcrumbItem>
256
+ <BreadcrumbPage>Shipment</BreadcrumbPage>
257
+ </BreadcrumbItem>
258
+ </BreadcrumbList>
259
+ </Breadcrumb>
260
+ ),
261
+ code: `import {
262
+ Breadcrumb,
263
+ BreadcrumbItem,
264
+ BreadcrumbLink,
265
+ BreadcrumbList,
266
+ BreadcrumbPage,
267
+ BreadcrumbSeparator,
268
+ } from '@open-mercato/ui/primitives/breadcrumb'
269
+
270
+ <Breadcrumb divider="arrow">
271
+ <BreadcrumbList>
272
+ <BreadcrumbItem>
273
+ <BreadcrumbLink href="/backend/orders">Orders</BreadcrumbLink>
274
+ </BreadcrumbItem>
275
+ <BreadcrumbSeparator />
276
+ <BreadcrumbItem>
277
+ <BreadcrumbLink href="/backend/orders/20418">#20418</BreadcrumbLink>
278
+ </BreadcrumbItem>
279
+ <BreadcrumbSeparator />
280
+ <BreadcrumbItem>
281
+ <BreadcrumbPage>Shipment</BreadcrumbPage>
282
+ </BreadcrumbItem>
283
+ </BreadcrumbList>
284
+ </Breadcrumb>`,
285
+ },
286
+ {
287
+ id: 'ellipsis',
288
+ title: 'collapsed (ellipsis)',
289
+ render: () => (
290
+ <Breadcrumb>
291
+ <BreadcrumbList>
292
+ <BreadcrumbItem>
293
+ <BreadcrumbLink href="#gallery-entry-breadcrumb">Dashboard</BreadcrumbLink>
294
+ </BreadcrumbItem>
295
+ <BreadcrumbSeparator />
296
+ <BreadcrumbItem>
297
+ <BreadcrumbEllipsis />
298
+ </BreadcrumbItem>
299
+ <BreadcrumbSeparator />
300
+ <BreadcrumbItem>
301
+ <BreadcrumbLink href="#gallery-entry-breadcrumb">Attributes</BreadcrumbLink>
302
+ </BreadcrumbItem>
303
+ <BreadcrumbSeparator />
304
+ <BreadcrumbItem>
305
+ <BreadcrumbPage>Color</BreadcrumbPage>
306
+ </BreadcrumbItem>
307
+ </BreadcrumbList>
308
+ </Breadcrumb>
309
+ ),
310
+ code: `import {
311
+ Breadcrumb,
312
+ BreadcrumbEllipsis,
313
+ BreadcrumbItem,
314
+ BreadcrumbLink,
315
+ BreadcrumbList,
316
+ BreadcrumbPage,
317
+ BreadcrumbSeparator,
318
+ } from '@open-mercato/ui/primitives/breadcrumb'
319
+
320
+ <Breadcrumb>
321
+ <BreadcrumbList>
322
+ <BreadcrumbItem>
323
+ <BreadcrumbLink href="/backend">Dashboard</BreadcrumbLink>
324
+ </BreadcrumbItem>
325
+ <BreadcrumbSeparator />
326
+ <BreadcrumbItem>
327
+ <BreadcrumbEllipsis />
328
+ </BreadcrumbItem>
329
+ <BreadcrumbSeparator />
330
+ <BreadcrumbItem>
331
+ <BreadcrumbLink href="/backend/products/attributes">Attributes</BreadcrumbLink>
332
+ </BreadcrumbItem>
333
+ <BreadcrumbSeparator />
334
+ <BreadcrumbItem>
335
+ <BreadcrumbPage>Color</BreadcrumbPage>
336
+ </BreadcrumbItem>
337
+ </BreadcrumbList>
338
+ </Breadcrumb>`,
339
+ },
340
+ ],
341
+ }
342
+
343
+ const paginationEntry: GalleryEntry = {
344
+ id: 'pagination',
345
+ title: 'Pagination',
346
+ importPath: '@open-mercato/ui/primitives/pagination',
347
+ docsAnchor: '#pagination',
348
+ variants: [
349
+ {
350
+ id: 'basic',
351
+ title: 'Basic',
352
+ render: () => <PaginationBasicDemo />,
353
+ code: `import * as React from 'react'
354
+ import { Pagination } from '@open-mercato/ui/primitives/pagination'
355
+
356
+ const [page, setPage] = React.useState(2)
357
+ const [pageSize, setPageSize] = React.useState(25)
358
+
359
+ <Pagination
360
+ page={page}
361
+ pageSize={pageSize}
362
+ total={400}
363
+ onPageChange={setPage}
364
+ onPageSizeChange={setPageSize}
365
+ />`,
366
+ },
367
+ {
368
+ id: 'compact',
369
+ title: 'Compact',
370
+ render: () => <PaginationCompactDemo />,
371
+ code: `import * as React from 'react'
372
+ import { Pagination } from '@open-mercato/ui/primitives/pagination'
373
+
374
+ const [page, setPage] = React.useState(1)
375
+
376
+ <Pagination
377
+ page={page}
378
+ pageSize={20}
379
+ total={120}
380
+ onPageChange={setPage}
381
+ showFirstLast={false}
382
+ showPageSize={false}
383
+ />`,
384
+ },
385
+ ],
386
+ }
387
+
388
+ const segmentedControlEntry: GalleryEntry = {
389
+ id: 'segmented-control',
390
+ title: 'SegmentedControl',
391
+ importPath: '@open-mercato/ui/primitives/segmented-control',
392
+ docsAnchor: '#segmentedcontrol',
393
+ variants: [
394
+ {
395
+ id: 'default',
396
+ title: 'default',
397
+ render: () => (
398
+ <SegmentedControl defaultValue="all" aria-label="View filter">
399
+ <SegmentedControlItem value="all">All</SegmentedControlItem>
400
+ <SegmentedControlItem value="active">Active</SegmentedControlItem>
401
+ <SegmentedControlItem value="archived">Archived</SegmentedControlItem>
402
+ </SegmentedControl>
403
+ ),
404
+ code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
405
+
406
+ <SegmentedControl defaultValue="all" aria-label="View filter">
407
+ <SegmentedControlItem value="all">All</SegmentedControlItem>
408
+ <SegmentedControlItem value="active">Active</SegmentedControlItem>
409
+ <SegmentedControlItem value="archived">Archived</SegmentedControlItem>
410
+ </SegmentedControl>`,
411
+ },
412
+ {
413
+ id: 'small',
414
+ title: 'Small',
415
+ render: () => (
416
+ <SegmentedControl size="sm" defaultValue="30d" aria-label="Chart period">
417
+ <SegmentedControlItem value="7d">7d</SegmentedControlItem>
418
+ <SegmentedControlItem value="30d">30d</SegmentedControlItem>
419
+ <SegmentedControlItem value="90d">90d</SegmentedControlItem>
420
+ <SegmentedControlItem value="1y">1y</SegmentedControlItem>
421
+ </SegmentedControl>
422
+ ),
423
+ code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
424
+
425
+ <SegmentedControl size="sm" defaultValue="30d" aria-label="Chart period">
426
+ <SegmentedControlItem value="7d">7d</SegmentedControlItem>
427
+ <SegmentedControlItem value="30d">30d</SegmentedControlItem>
428
+ <SegmentedControlItem value="90d">90d</SegmentedControlItem>
429
+ <SegmentedControlItem value="1y">1y</SegmentedControlItem>
430
+ </SegmentedControl>`,
431
+ },
432
+ {
433
+ id: 'disabled',
434
+ title: 'Disabled',
435
+ render: () => (
436
+ <SegmentedControl defaultValue="list" disabled aria-label="Layout">
437
+ <SegmentedControlItem value="list">List</SegmentedControlItem>
438
+ <SegmentedControlItem value="grid">Grid</SegmentedControlItem>
439
+ </SegmentedControl>
440
+ ),
441
+ code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
442
+
443
+ <SegmentedControl defaultValue="list" disabled aria-label="Layout">
444
+ <SegmentedControlItem value="list">List</SegmentedControlItem>
445
+ <SegmentedControlItem value="grid">Grid</SegmentedControlItem>
446
+ </SegmentedControl>`,
447
+ },
448
+ ],
449
+ }
450
+
451
+ const accordionEntry: GalleryEntry = {
452
+ id: 'accordion',
453
+ title: 'Accordion',
454
+ importPath: '@open-mercato/ui/primitives/accordion',
455
+ docsAnchor: '#accordion',
456
+ variants: [
457
+ {
458
+ id: 'card',
459
+ title: 'card (default)',
460
+ render: () => (
461
+ <Accordion type="single" collapsible defaultValue="shipping" className="w-full space-y-2">
462
+ <AccordionItem value="shipping">
463
+ <AccordionTrigger>Shipping and delivery</AccordionTrigger>
464
+ <AccordionContent>
465
+ Orders placed before 2 PM ship the same business day from the nearest warehouse.
466
+ </AccordionContent>
467
+ </AccordionItem>
468
+ <AccordionItem value="returns">
469
+ <AccordionTrigger>Returns</AccordionTrigger>
470
+ <AccordionContent>
471
+ Items can be returned within 30 days of delivery in their original packaging.
472
+ </AccordionContent>
473
+ </AccordionItem>
474
+ <AccordionItem value="payments">
475
+ <AccordionTrigger>Payment methods</AccordionTrigger>
476
+ <AccordionContent>
477
+ We accept cards, bank transfer, and deferred payment for verified B2B accounts.
478
+ </AccordionContent>
479
+ </AccordionItem>
480
+ </Accordion>
481
+ ),
482
+ code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'
483
+
484
+ <Accordion type="single" collapsible defaultValue="shipping" className="w-full space-y-2">
485
+ <AccordionItem value="shipping">
486
+ <AccordionTrigger>Shipping and delivery</AccordionTrigger>
487
+ <AccordionContent>Orders placed before 2 PM ship the same business day.</AccordionContent>
488
+ </AccordionItem>
489
+ <AccordionItem value="returns">
490
+ <AccordionTrigger>Returns</AccordionTrigger>
491
+ <AccordionContent>Items can be returned within 30 days of delivery.</AccordionContent>
492
+ </AccordionItem>
493
+ <AccordionItem value="payments">
494
+ <AccordionTrigger>Payment methods</AccordionTrigger>
495
+ <AccordionContent>We accept cards, bank transfer, and deferred payment.</AccordionContent>
496
+ </AccordionItem>
497
+ </Accordion>`,
498
+ },
499
+ {
500
+ id: 'left-icon',
501
+ title: 'With leftIcon',
502
+ render: () => (
503
+ <Accordion type="single" collapsible className="w-full space-y-2">
504
+ <AccordionItem value="shipping">
505
+ <AccordionTrigger leftIcon={<Truck />}>How fast is shipping?</AccordionTrigger>
506
+ <AccordionContent>
507
+ Same-day dispatch on weekdays; delivery typically takes 1–3 business days.
508
+ </AccordionContent>
509
+ </AccordionItem>
510
+ <AccordionItem value="billing">
511
+ <AccordionTrigger leftIcon={<CreditCard />}>When am I charged?</AccordionTrigger>
512
+ <AccordionContent>
513
+ Your card is charged when the order ships, never at checkout.
514
+ </AccordionContent>
515
+ </AccordionItem>
516
+ </Accordion>
517
+ ),
518
+ code: `import { CreditCard, Truck } from 'lucide-react'
519
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'
520
+
521
+ <Accordion type="single" collapsible className="w-full space-y-2">
522
+ <AccordionItem value="shipping">
523
+ <AccordionTrigger leftIcon={<Truck />}>How fast is shipping?</AccordionTrigger>
524
+ <AccordionContent>Same-day dispatch on weekdays.</AccordionContent>
525
+ </AccordionItem>
526
+ <AccordionItem value="billing">
527
+ <AccordionTrigger leftIcon={<CreditCard />}>When am I charged?</AccordionTrigger>
528
+ <AccordionContent>Your card is charged when the order ships.</AccordionContent>
529
+ </AccordionItem>
530
+ </Accordion>`,
531
+ },
532
+ {
533
+ id: 'chevron',
534
+ title: 'Chevron indicator',
535
+ render: () => (
536
+ <Accordion type="multiple" className="w-full space-y-2">
537
+ <AccordionItem value="general">
538
+ <AccordionTrigger triggerIcon="chevron">General</AccordionTrigger>
539
+ <AccordionContent>
540
+ Store name, contact details, and default locale for the storefront.
541
+ </AccordionContent>
542
+ </AccordionItem>
543
+ <AccordionItem value="advanced">
544
+ <AccordionTrigger triggerIcon="chevron">Advanced</AccordionTrigger>
545
+ <AccordionContent>
546
+ Webhooks, API keys, and other developer-facing configuration.
547
+ </AccordionContent>
548
+ </AccordionItem>
549
+ </Accordion>
550
+ ),
551
+ code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'
552
+
553
+ <Accordion type="multiple" className="w-full space-y-2">
554
+ <AccordionItem value="general">
555
+ <AccordionTrigger triggerIcon="chevron">General</AccordionTrigger>
556
+ <AccordionContent>Store name, contact details, and default locale.</AccordionContent>
557
+ </AccordionItem>
558
+ <AccordionItem value="advanced">
559
+ <AccordionTrigger triggerIcon="chevron">Advanced</AccordionTrigger>
560
+ <AccordionContent>Webhooks, API keys, and developer configuration.</AccordionContent>
561
+ </AccordionItem>
562
+ </Accordion>`,
563
+ },
564
+ ],
565
+ }
566
+
567
+ export const entries: GalleryEntry[] = [
568
+ tabsEntry,
569
+ breadcrumbEntry,
570
+ paginationEntry,
571
+ segmentedControlEntry,
572
+ accordionEntry,
573
+ ]