@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,457 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import {
3
+ BarChart,
4
+ DeltaBadge,
5
+ KpiCard,
6
+ LineChart,
7
+ PieChart,
8
+ Sparkline,
9
+ TopNTable
10
+ } from "@open-mercato/ui/backend/charts";
11
+ const revenueByMonth = [
12
+ { month: "Jan", revenue: 48200 },
13
+ { month: "Feb", revenue: 51400 },
14
+ { month: "Mar", revenue: 47900 },
15
+ { month: "Apr", revenue: 61200 },
16
+ { month: "May", revenue: 58600 },
17
+ { month: "Jun", revenue: 67300 }
18
+ ];
19
+ const revenueByChannel = [
20
+ { channel: "Online store", revenue: 182400 },
21
+ { channel: "Marketplace", revenue: 96800 },
22
+ { channel: "Retail", revenue: 64200 },
23
+ { channel: "Wholesale", revenue: 41500 }
24
+ ];
25
+ const ordersByMonth = [
26
+ { month: "Jan", online: 320, retail: 180 },
27
+ { month: "Feb", online: 348, retail: 164 },
28
+ { month: "Mar", online: 331, retail: 196 },
29
+ { month: "Apr", online: 402, retail: 214 },
30
+ { month: "May", online: 389, retail: 205 },
31
+ { month: "Jun", online: 446, retail: 232 }
32
+ ];
33
+ const ordersByStatus = [
34
+ { name: "Completed", value: 268 },
35
+ { name: "Processing", value: 84 },
36
+ { name: "Pending payment", value: 37 },
37
+ { name: "Cancelled", value: 22 }
38
+ ];
39
+ const weeklyOrdersTrend = [12, 18, 14, 22, 19, 27, 24, 31, 28, 35, 33, 41];
40
+ const topProducts = [
41
+ { product: "Aurora desk lamp", orders: 412, revenue: 28840 },
42
+ { product: "Birch side table", orders: 366, revenue: 47580 },
43
+ { product: "Linen throw pillow", orders: 341, revenue: 11935 },
44
+ { product: "Oak bookshelf", orders: 214, revenue: 53500 },
45
+ { product: "Ceramic vase set", orders: 198, revenue: 8910 }
46
+ ];
47
+ const formatCurrency = (value) => `\u20AC${value.toLocaleString("en-US")}`;
48
+ const topProductColumns = [
49
+ { key: "product", header: "Product" },
50
+ { key: "orders", header: "Orders", align: "right" },
51
+ {
52
+ key: "revenue",
53
+ header: "Revenue",
54
+ align: "right",
55
+ formatter: (value) => formatCurrency(value)
56
+ }
57
+ ];
58
+ const kpiCardEntry = {
59
+ id: "kpi-card",
60
+ title: "KpiCard",
61
+ importPath: "@open-mercato/ui/backend/charts",
62
+ variants: [
63
+ {
64
+ id: "trend-directions",
65
+ title: "Trend directions",
66
+ render: () => /* @__PURE__ */ jsxs("div", { className: "grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3", children: [
67
+ /* @__PURE__ */ jsx(
68
+ KpiCard,
69
+ {
70
+ title: "Revenue",
71
+ value: 67300,
72
+ prefix: "\u20AC",
73
+ trend: { value: 14.8, direction: "up" },
74
+ comparisonLabel: "vs. previous month"
75
+ }
76
+ ),
77
+ /* @__PURE__ */ jsx(
78
+ KpiCard,
79
+ {
80
+ title: "Cancelled orders",
81
+ value: 22,
82
+ trend: { value: 6.1, direction: "down" },
83
+ comparisonLabel: "vs. previous month"
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsx(
87
+ KpiCard,
88
+ {
89
+ title: "Active customers",
90
+ value: 1284,
91
+ trend: { value: 0, direction: "unchanged" },
92
+ comparisonLabel: "vs. previous month"
93
+ }
94
+ )
95
+ ] }),
96
+ code: `import { KpiCard } from '@open-mercato/ui/backend/charts'
97
+
98
+ <KpiCard
99
+ title="Revenue"
100
+ value={67300}
101
+ prefix="\u20AC"
102
+ trend={{ value: 14.8, direction: 'up' }}
103
+ comparisonLabel="vs. previous month"
104
+ />`
105
+ },
106
+ {
107
+ id: "suffix-and-footer",
108
+ title: "Suffix and footer slot",
109
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xs", children: /* @__PURE__ */ jsx(
110
+ KpiCard,
111
+ {
112
+ title: "Average order value",
113
+ value: 86.4,
114
+ prefix: "\u20AC",
115
+ suffix: "net",
116
+ trend: { value: 3.2, direction: "up" },
117
+ footer: /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: /* @__PURE__ */ jsx(Sparkline, { values: weeklyOrdersTrend, ariaLabel: "Weekly orders trend" }) })
118
+ }
119
+ ) }),
120
+ code: `import { KpiCard, Sparkline } from '@open-mercato/ui/backend/charts'
121
+
122
+ <KpiCard
123
+ title="Average order value"
124
+ value={86.4}
125
+ prefix="\u20AC"
126
+ suffix="net"
127
+ trend={{ value: 3.2, direction: 'up' }}
128
+ footer={<Sparkline values={weeklyTrend} ariaLabel="Weekly orders trend" />}
129
+ />`
130
+ },
131
+ {
132
+ id: "states",
133
+ title: "Loading, error and empty states",
134
+ render: () => /* @__PURE__ */ jsxs("div", { className: "grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3", children: [
135
+ /* @__PURE__ */ jsx(KpiCard, { title: "Loading", value: null, loading: true }),
136
+ /* @__PURE__ */ jsx(KpiCard, { title: "Error", value: null, error: "Failed to load metric" }),
137
+ /* @__PURE__ */ jsx(KpiCard, { title: "No data", value: null })
138
+ ] }),
139
+ code: `import { KpiCard } from '@open-mercato/ui/backend/charts'
140
+
141
+ <KpiCard title="Loading" value={null} loading />
142
+ <KpiCard title="Error" value={null} error="Failed to load metric" />
143
+ <KpiCard title="No data" value={null} />`
144
+ },
145
+ {
146
+ id: "delta-badge",
147
+ title: "DeltaBadge (standalone)",
148
+ render: () => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
149
+ /* @__PURE__ */ jsx(DeltaBadge, { direction: "up", value: 12.4 }),
150
+ /* @__PURE__ */ jsx(DeltaBadge, { direction: "down", value: 4.7 }),
151
+ /* @__PURE__ */ jsx(DeltaBadge, { direction: "unchanged", value: 0 }),
152
+ /* @__PURE__ */ jsx(DeltaBadge, { direction: "up", value: 38, unit: " pts" })
153
+ ] }),
154
+ code: `import { DeltaBadge } from '@open-mercato/ui/backend/charts'
155
+
156
+ <DeltaBadge direction="up" value={12.4} />
157
+ <DeltaBadge direction="down" value={4.7} />
158
+ <DeltaBadge direction="unchanged" value={0} />
159
+ <DeltaBadge direction="up" value={38} unit=" pts" />`
160
+ }
161
+ ]
162
+ };
163
+ const sparklineEntry = {
164
+ id: "sparkline",
165
+ title: "Sparkline",
166
+ importPath: "@open-mercato/ui/backend/charts",
167
+ variants: [
168
+ {
169
+ id: "default",
170
+ title: "default",
171
+ render: () => /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: /* @__PURE__ */ jsx(Sparkline, { values: weeklyOrdersTrend, ariaLabel: "Weekly orders trend" }) }),
172
+ code: `import { Sparkline } from '@open-mercato/ui/backend/charts'
173
+
174
+ <Sparkline values={[12, 18, 14, 22, 19, 27, 24, 31]} ariaLabel="Weekly orders trend" />`
175
+ },
176
+ {
177
+ id: "semantic-color",
178
+ title: "Colored via currentColor",
179
+ render: () => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-6", children: [
180
+ /* @__PURE__ */ jsx("span", { className: "text-primary", children: /* @__PURE__ */ jsx(Sparkline, { values: weeklyOrdersTrend, ariaLabel: "Orders trending up" }) }),
181
+ /* @__PURE__ */ jsx("span", { className: "text-destructive", children: /* @__PURE__ */ jsx(
182
+ Sparkline,
183
+ {
184
+ values: [...weeklyOrdersTrend].reverse(),
185
+ ariaLabel: "Returns trending down"
186
+ }
187
+ ) })
188
+ ] }),
189
+ code: `import { Sparkline } from '@open-mercato/ui/backend/charts'
190
+
191
+ // Sparkline strokes with currentColor \u2014 set a semantic text token on the wrapper.
192
+ <span className="text-primary">
193
+ <Sparkline values={values} ariaLabel="Orders trending up" />
194
+ </span>`
195
+ },
196
+ {
197
+ id: "sizes",
198
+ title: "Custom width and height",
199
+ render: () => /* @__PURE__ */ jsxs("div", { className: "flex items-end gap-6 text-muted-foreground", children: [
200
+ /* @__PURE__ */ jsx(Sparkline, { values: weeklyOrdersTrend, ariaLabel: "Small trend", width: 64, height: 20 }),
201
+ /* @__PURE__ */ jsx(Sparkline, { values: weeklyOrdersTrend, ariaLabel: "Default trend" }),
202
+ /* @__PURE__ */ jsx(Sparkline, { values: weeklyOrdersTrend, ariaLabel: "Large trend", width: 160, height: 40 })
203
+ ] }),
204
+ code: `import { Sparkline } from '@open-mercato/ui/backend/charts'
205
+
206
+ <Sparkline values={values} ariaLabel="Small trend" width={64} height={20} />
207
+ <Sparkline values={values} ariaLabel="Default trend" />
208
+ <Sparkline values={values} ariaLabel="Large trend" width={160} height={40} />`
209
+ }
210
+ ]
211
+ };
212
+ const barChartEntry = {
213
+ id: "bar-chart",
214
+ title: "BarChart",
215
+ importPath: "@open-mercato/ui/backend/charts",
216
+ variants: [
217
+ {
218
+ id: "basic",
219
+ title: "Basic (revenue by month)",
220
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
221
+ BarChart,
222
+ {
223
+ title: "Revenue by month",
224
+ data: revenueByMonth,
225
+ index: "month",
226
+ categories: ["revenue"],
227
+ showLegend: false
228
+ }
229
+ ) }),
230
+ code: `import { BarChart } from '@open-mercato/ui/backend/charts'
231
+
232
+ <BarChart
233
+ title="Revenue by month"
234
+ data={revenueByMonth}
235
+ index="month"
236
+ categories={['revenue']}
237
+ showLegend={false}
238
+ />`
239
+ },
240
+ {
241
+ id: "horizontal",
242
+ title: "Horizontal layout",
243
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
244
+ BarChart,
245
+ {
246
+ title: "Revenue by channel",
247
+ data: revenueByChannel,
248
+ index: "channel",
249
+ categories: ["revenue"],
250
+ layout: "horizontal",
251
+ showLegend: false
252
+ }
253
+ ) }),
254
+ code: `import { BarChart } from '@open-mercato/ui/backend/charts'
255
+
256
+ <BarChart
257
+ title="Revenue by channel"
258
+ data={revenueByChannel}
259
+ index="channel"
260
+ categories={['revenue']}
261
+ layout="horizontal"
262
+ showLegend={false}
263
+ />`
264
+ },
265
+ {
266
+ id: "multi-series",
267
+ title: "Multiple series with legend",
268
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
269
+ BarChart,
270
+ {
271
+ title: "Orders by month",
272
+ data: ordersByMonth,
273
+ index: "month",
274
+ categories: ["online", "retail"],
275
+ categoryLabels: { online: "Online", retail: "Retail" }
276
+ }
277
+ ) }),
278
+ code: `import { BarChart } from '@open-mercato/ui/backend/charts'
279
+
280
+ <BarChart
281
+ title="Orders by month"
282
+ data={ordersByMonth}
283
+ index="month"
284
+ categories={['online', 'retail']}
285
+ categoryLabels={{ online: 'Online', retail: 'Retail' }}
286
+ />`
287
+ }
288
+ ]
289
+ };
290
+ const lineChartEntry = {
291
+ id: "line-chart",
292
+ title: "LineChart",
293
+ importPath: "@open-mercato/ui/backend/charts",
294
+ variants: [
295
+ {
296
+ id: "basic",
297
+ title: "Basic (revenue by month)",
298
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
299
+ LineChart,
300
+ {
301
+ title: "Revenue by month",
302
+ data: revenueByMonth,
303
+ index: "month",
304
+ categories: ["revenue"],
305
+ showLegend: false
306
+ }
307
+ ) }),
308
+ code: `import { LineChart } from '@open-mercato/ui/backend/charts'
309
+
310
+ <LineChart
311
+ title="Revenue by month"
312
+ data={revenueByMonth}
313
+ index="month"
314
+ categories={['revenue']}
315
+ showLegend={false}
316
+ />`
317
+ },
318
+ {
319
+ id: "area",
320
+ title: "Area fill",
321
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
322
+ LineChart,
323
+ {
324
+ title: "Revenue by month",
325
+ data: revenueByMonth,
326
+ index: "month",
327
+ categories: ["revenue"],
328
+ showArea: true,
329
+ showLegend: false
330
+ }
331
+ ) }),
332
+ code: `import { LineChart } from '@open-mercato/ui/backend/charts'
333
+
334
+ <LineChart
335
+ title="Revenue by month"
336
+ data={revenueByMonth}
337
+ index="month"
338
+ categories={['revenue']}
339
+ showArea
340
+ showLegend={false}
341
+ />`
342
+ },
343
+ {
344
+ id: "multi-series",
345
+ title: "Multiple series, monotone curve",
346
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
347
+ LineChart,
348
+ {
349
+ title: "Orders by month",
350
+ data: ordersByMonth,
351
+ index: "month",
352
+ categories: ["online", "retail"],
353
+ categoryLabels: { online: "Online", retail: "Retail" },
354
+ curveType: "monotone"
355
+ }
356
+ ) }),
357
+ code: `import { LineChart } from '@open-mercato/ui/backend/charts'
358
+
359
+ <LineChart
360
+ title="Orders by month"
361
+ data={ordersByMonth}
362
+ index="month"
363
+ categories={['online', 'retail']}
364
+ categoryLabels={{ online: 'Online', retail: 'Retail' }}
365
+ curveType="monotone"
366
+ />`
367
+ }
368
+ ]
369
+ };
370
+ const pieChartEntry = {
371
+ id: "pie-chart",
372
+ title: "PieChart",
373
+ importPath: "@open-mercato/ui/backend/charts",
374
+ variants: [
375
+ {
376
+ id: "pie",
377
+ title: "Pie (orders by status)",
378
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(PieChart, { title: "Orders by status", data: ordersByStatus }) }),
379
+ code: `import { PieChart } from '@open-mercato/ui/backend/charts'
380
+
381
+ <PieChart title="Orders by status" data={ordersByStatus} />`
382
+ },
383
+ {
384
+ id: "donut",
385
+ title: "Donut",
386
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(PieChart, { title: "Orders by status", data: ordersByStatus, variant: "donut" }) }),
387
+ code: `import { PieChart } from '@open-mercato/ui/backend/charts'
388
+
389
+ <PieChart title="Orders by status" data={ordersByStatus} variant="donut" />`
390
+ }
391
+ ]
392
+ };
393
+ const topNTableEntry = {
394
+ id: "top-n-table",
395
+ title: "TopNTable",
396
+ importPath: "@open-mercato/ui/backend/charts",
397
+ variants: [
398
+ {
399
+ id: "basic",
400
+ title: "Top products by revenue",
401
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(TopNTable, { title: "Top products", data: topProducts, columns: topProductColumns }) }),
402
+ code: `import { TopNTable, type TopNTableColumn } from '@open-mercato/ui/backend/charts'
403
+
404
+ const columns: TopNTableColumn<TopProductRow>[] = [
405
+ { key: 'product', header: 'Product' },
406
+ { key: 'orders', header: 'Orders', align: 'right' },
407
+ { key: 'revenue', header: 'Revenue', align: 'right', formatter: (v) => formatCurrency(v as number) },
408
+ ]
409
+
410
+ <TopNTable title="Top products" data={topProducts} columns={columns} />`
411
+ },
412
+ {
413
+ id: "max-rows",
414
+ title: "Capped with maxRows",
415
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
416
+ TopNTable,
417
+ {
418
+ title: "Top 3 products",
419
+ data: topProducts,
420
+ columns: topProductColumns,
421
+ maxRows: 3
422
+ }
423
+ ) }),
424
+ code: `import { TopNTable } from '@open-mercato/ui/backend/charts'
425
+
426
+ <TopNTable title="Top 3 products" data={topProducts} columns={columns} maxRows={3} />`
427
+ },
428
+ {
429
+ id: "empty",
430
+ title: "Empty state",
431
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-xl", children: /* @__PURE__ */ jsx(
432
+ TopNTable,
433
+ {
434
+ title: "Top products",
435
+ data: [],
436
+ columns: topProductColumns,
437
+ emptyMessage: "No sales in this period"
438
+ }
439
+ ) }),
440
+ code: `import { TopNTable } from '@open-mercato/ui/backend/charts'
441
+
442
+ <TopNTable title="Top products" data={[]} columns={columns} emptyMessage="No sales in this period" />`
443
+ }
444
+ ]
445
+ };
446
+ const entries = [
447
+ kpiCardEntry,
448
+ sparklineEntry,
449
+ barChartEntry,
450
+ lineChartEntry,
451
+ pieChartEntry,
452
+ topNTableEntry
453
+ ];
454
+ export {
455
+ entries
456
+ };
457
+ //# sourceMappingURL=charts.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/entries/charts.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport {\n BarChart,\n DeltaBadge,\n KpiCard,\n LineChart,\n PieChart,\n Sparkline,\n TopNTable,\n type TopNTableColumn,\n} from '@open-mercato/ui/backend/charts'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// ---------------------------------------------------------------------------\n// Inline mock datasets \u2014 realistic dashboard shapes, no API calls. All charts\n// pick up the DS palette (`--chart-1`\u2026`--chart-5`) natively; no color props.\n// ---------------------------------------------------------------------------\n\nconst revenueByMonth = [\n { month: 'Jan', revenue: 48200 },\n { month: 'Feb', revenue: 51400 },\n { month: 'Mar', revenue: 47900 },\n { month: 'Apr', revenue: 61200 },\n { month: 'May', revenue: 58600 },\n { month: 'Jun', revenue: 67300 },\n]\n\nconst revenueByChannel = [\n { channel: 'Online store', revenue: 182400 },\n { channel: 'Marketplace', revenue: 96800 },\n { channel: 'Retail', revenue: 64200 },\n { channel: 'Wholesale', revenue: 41500 },\n]\n\nconst ordersByMonth = [\n { month: 'Jan', online: 320, retail: 180 },\n { month: 'Feb', online: 348, retail: 164 },\n { month: 'Mar', online: 331, retail: 196 },\n { month: 'Apr', online: 402, retail: 214 },\n { month: 'May', online: 389, retail: 205 },\n { month: 'Jun', online: 446, retail: 232 },\n]\n\nconst ordersByStatus = [\n { name: 'Completed', value: 268 },\n { name: 'Processing', value: 84 },\n { name: 'Pending payment', value: 37 },\n { name: 'Cancelled', value: 22 },\n]\n\nconst weeklyOrdersTrend = [12, 18, 14, 22, 19, 27, 24, 31, 28, 35, 33, 41]\n\ntype TopProductRow = {\n product: string\n orders: number\n revenue: number\n [key: string]: unknown\n}\n\nconst topProducts: TopProductRow[] = [\n { product: 'Aurora desk lamp', orders: 412, revenue: 28840 },\n { product: 'Birch side table', orders: 366, revenue: 47580 },\n { product: 'Linen throw pillow', orders: 341, revenue: 11935 },\n { product: 'Oak bookshelf', orders: 214, revenue: 53500 },\n { product: 'Ceramic vase set', orders: 198, revenue: 8910 },\n]\n\nconst formatCurrency = (value: number) => `\u20AC${value.toLocaleString('en-US')}`\n\nconst topProductColumns: TopNTableColumn<TopProductRow>[] = [\n { key: 'product', header: 'Product' },\n { key: 'orders', header: 'Orders', align: 'right' },\n {\n key: 'revenue',\n header: 'Revenue',\n align: 'right',\n formatter: (value) => formatCurrency(value as number),\n },\n]\n\nconst kpiCardEntry: GalleryEntry = {\n id: 'kpi-card',\n title: 'KpiCard',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'trend-directions',\n title: 'Trend directions',\n render: () => (\n <div className=\"grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3\">\n <KpiCard\n title=\"Revenue\"\n value={67300}\n prefix=\"\u20AC\"\n trend={{ value: 14.8, direction: 'up' }}\n comparisonLabel=\"vs. previous month\"\n />\n <KpiCard\n title=\"Cancelled orders\"\n value={22}\n trend={{ value: 6.1, direction: 'down' }}\n comparisonLabel=\"vs. previous month\"\n />\n <KpiCard\n title=\"Active customers\"\n value={1284}\n trend={{ value: 0, direction: 'unchanged' }}\n comparisonLabel=\"vs. previous month\"\n />\n </div>\n ),\n code: `import { KpiCard } from '@open-mercato/ui/backend/charts'\n\n<KpiCard\n title=\"Revenue\"\n value={67300}\n prefix=\"\u20AC\"\n trend={{ value: 14.8, direction: 'up' }}\n comparisonLabel=\"vs. previous month\"\n/>`,\n },\n {\n id: 'suffix-and-footer',\n title: 'Suffix and footer slot',\n render: () => (\n <div className=\"w-full max-w-xs\">\n <KpiCard\n title=\"Average order value\"\n value={86.4}\n prefix=\"\u20AC\"\n suffix=\"net\"\n trend={{ value: 3.2, direction: 'up' }}\n footer={\n <span className=\"text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Weekly orders trend\" />\n </span>\n }\n />\n </div>\n ),\n code: `import { KpiCard, Sparkline } from '@open-mercato/ui/backend/charts'\n\n<KpiCard\n title=\"Average order value\"\n value={86.4}\n prefix=\"\u20AC\"\n suffix=\"net\"\n trend={{ value: 3.2, direction: 'up' }}\n footer={<Sparkline values={weeklyTrend} ariaLabel=\"Weekly orders trend\" />}\n/>`,\n },\n {\n id: 'states',\n title: 'Loading, error and empty states',\n render: () => (\n <div className=\"grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3\">\n <KpiCard title=\"Loading\" value={null} loading />\n <KpiCard title=\"Error\" value={null} error=\"Failed to load metric\" />\n <KpiCard title=\"No data\" value={null} />\n </div>\n ),\n code: `import { KpiCard } from '@open-mercato/ui/backend/charts'\n\n<KpiCard title=\"Loading\" value={null} loading />\n<KpiCard title=\"Error\" value={null} error=\"Failed to load metric\" />\n<KpiCard title=\"No data\" value={null} />`,\n },\n {\n id: 'delta-badge',\n title: 'DeltaBadge (standalone)',\n render: () => (\n <div className=\"flex items-center gap-3\">\n <DeltaBadge direction=\"up\" value={12.4} />\n <DeltaBadge direction=\"down\" value={4.7} />\n <DeltaBadge direction=\"unchanged\" value={0} />\n <DeltaBadge direction=\"up\" value={38} unit=\" pts\" />\n </div>\n ),\n code: `import { DeltaBadge } from '@open-mercato/ui/backend/charts'\n\n<DeltaBadge direction=\"up\" value={12.4} />\n<DeltaBadge direction=\"down\" value={4.7} />\n<DeltaBadge direction=\"unchanged\" value={0} />\n<DeltaBadge direction=\"up\" value={38} unit=\" pts\" />`,\n },\n ],\n}\n\nconst sparklineEntry: GalleryEntry = {\n id: 'sparkline',\n title: 'Sparkline',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <span className=\"text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Weekly orders trend\" />\n </span>\n ),\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n<Sparkline values={[12, 18, 14, 22, 19, 27, 24, 31]} ariaLabel=\"Weekly orders trend\" />`,\n },\n {\n id: 'semantic-color',\n title: 'Colored via currentColor',\n render: () => (\n <div className=\"flex items-center gap-6\">\n <span className=\"text-primary\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Orders trending up\" />\n </span>\n <span className=\"text-destructive\">\n <Sparkline\n values={[...weeklyOrdersTrend].reverse()}\n ariaLabel=\"Returns trending down\"\n />\n </span>\n </div>\n ),\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n// Sparkline strokes with currentColor \u2014 set a semantic text token on the wrapper.\n<span className=\"text-primary\">\n <Sparkline values={values} ariaLabel=\"Orders trending up\" />\n</span>`,\n },\n {\n id: 'sizes',\n title: 'Custom width and height',\n render: () => (\n <div className=\"flex items-end gap-6 text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Small trend\" width={64} height={20} />\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Default trend\" />\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Large trend\" width={160} height={40} />\n </div>\n ),\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n<Sparkline values={values} ariaLabel=\"Small trend\" width={64} height={20} />\n<Sparkline values={values} ariaLabel=\"Default trend\" />\n<Sparkline values={values} ariaLabel=\"Large trend\" width={160} height={40} />`,\n },\n ],\n}\n\nconst barChartEntry: GalleryEntry = {\n id: 'bar-chart',\n title: 'BarChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Basic (revenue by month)',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n />\n </div>\n ),\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n/>`,\n },\n {\n id: 'horizontal',\n title: 'Horizontal layout',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title=\"Revenue by channel\"\n data={revenueByChannel}\n index=\"channel\"\n categories={['revenue']}\n layout=\"horizontal\"\n showLegend={false}\n />\n </div>\n ),\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Revenue by channel\"\n data={revenueByChannel}\n index=\"channel\"\n categories={['revenue']}\n layout=\"horizontal\"\n showLegend={false}\n/>`,\n },\n {\n id: 'multi-series',\n title: 'Multiple series with legend',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n />\n </div>\n ),\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n/>`,\n },\n ],\n}\n\nconst lineChartEntry: GalleryEntry = {\n id: 'line-chart',\n title: 'LineChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Basic (revenue by month)',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n />\n </div>\n ),\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n/>`,\n },\n {\n id: 'area',\n title: 'Area fill',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showArea\n showLegend={false}\n />\n </div>\n ),\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showArea\n showLegend={false}\n/>`,\n },\n {\n id: 'multi-series',\n title: 'Multiple series, monotone curve',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n curveType=\"monotone\"\n />\n </div>\n ),\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n curveType=\"monotone\"\n/>`,\n },\n ],\n}\n\nconst pieChartEntry: GalleryEntry = {\n id: 'pie-chart',\n title: 'PieChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'pie',\n title: 'Pie (orders by status)',\n render: () => (\n <div className=\"w-full max-w-md\">\n <PieChart title=\"Orders by status\" data={ordersByStatus} />\n </div>\n ),\n code: `import { PieChart } from '@open-mercato/ui/backend/charts'\n\n<PieChart title=\"Orders by status\" data={ordersByStatus} />`,\n },\n {\n id: 'donut',\n title: 'Donut',\n render: () => (\n <div className=\"w-full max-w-md\">\n <PieChart title=\"Orders by status\" data={ordersByStatus} variant=\"donut\" />\n </div>\n ),\n code: `import { PieChart } from '@open-mercato/ui/backend/charts'\n\n<PieChart title=\"Orders by status\" data={ordersByStatus} variant=\"donut\" />`,\n },\n ],\n}\n\nconst topNTableEntry: GalleryEntry = {\n id: 'top-n-table',\n title: 'TopNTable',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Top products by revenue',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <TopNTable title=\"Top products\" data={topProducts} columns={topProductColumns} />\n </div>\n ),\n code: `import { TopNTable, type TopNTableColumn } from '@open-mercato/ui/backend/charts'\n\nconst columns: TopNTableColumn<TopProductRow>[] = [\n { key: 'product', header: 'Product' },\n { key: 'orders', header: 'Orders', align: 'right' },\n { key: 'revenue', header: 'Revenue', align: 'right', formatter: (v) => formatCurrency(v as number) },\n]\n\n<TopNTable title=\"Top products\" data={topProducts} columns={columns} />`,\n },\n {\n id: 'max-rows',\n title: 'Capped with maxRows',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title=\"Top 3 products\"\n data={topProducts}\n columns={topProductColumns}\n maxRows={3}\n />\n </div>\n ),\n code: `import { TopNTable } from '@open-mercato/ui/backend/charts'\n\n<TopNTable title=\"Top 3 products\" data={topProducts} columns={columns} maxRows={3} />`,\n },\n {\n id: 'empty',\n title: 'Empty state',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title=\"Top products\"\n data={[]}\n columns={topProductColumns}\n emptyMessage=\"No sales in this period\"\n />\n </div>\n ),\n code: `import { TopNTable } from '@open-mercato/ui/backend/charts'\n\n<TopNTable title=\"Top products\" data={[]} columns={columns} emptyMessage=\"No sales in this period\" />`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n kpiCardEntry,\n sparklineEntry,\n barChartEntry,\n lineChartEntry,\n pieChartEntry,\n topNTableEntry,\n]\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }