@contractspec/example.marketplace 3.7.7 → 3.8.2

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 (38) hide show
  1. package/README.md +1 -0
  2. package/dist/browser/index.js +316 -79
  3. package/dist/browser/marketplace.feature.js +175 -0
  4. package/dist/browser/ui/MarketplaceDashboard.js +293 -75
  5. package/dist/browser/ui/MarketplaceDashboard.visualizations.js +216 -0
  6. package/dist/browser/ui/index.js +309 -79
  7. package/dist/browser/ui/renderers/index.js +190 -4
  8. package/dist/browser/ui/renderers/marketplace.markdown.js +190 -4
  9. package/dist/browser/visualizations/catalog.js +126 -0
  10. package/dist/browser/visualizations/index.js +183 -0
  11. package/dist/browser/visualizations/selectors.js +177 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +316 -79
  14. package/dist/marketplace.feature.js +175 -0
  15. package/dist/node/index.js +316 -79
  16. package/dist/node/marketplace.feature.js +175 -0
  17. package/dist/node/ui/MarketplaceDashboard.js +293 -75
  18. package/dist/node/ui/MarketplaceDashboard.visualizations.js +216 -0
  19. package/dist/node/ui/index.js +309 -79
  20. package/dist/node/ui/renderers/index.js +190 -4
  21. package/dist/node/ui/renderers/marketplace.markdown.js +190 -4
  22. package/dist/node/visualizations/catalog.js +126 -0
  23. package/dist/node/visualizations/index.js +183 -0
  24. package/dist/node/visualizations/selectors.js +177 -0
  25. package/dist/ui/MarketplaceDashboard.js +293 -75
  26. package/dist/ui/MarketplaceDashboard.visualizations.d.ts +5 -0
  27. package/dist/ui/MarketplaceDashboard.visualizations.js +217 -0
  28. package/dist/ui/index.js +309 -79
  29. package/dist/ui/renderers/index.js +190 -4
  30. package/dist/ui/renderers/marketplace.markdown.js +190 -4
  31. package/dist/visualizations/catalog.d.ts +10 -0
  32. package/dist/visualizations/catalog.js +127 -0
  33. package/dist/visualizations/index.d.ts +2 -0
  34. package/dist/visualizations/index.js +184 -0
  35. package/dist/visualizations/selectors.d.ts +11 -0
  36. package/dist/visualizations/selectors.js +178 -0
  37. package/dist/visualizations/selectors.test.d.ts +1 -0
  38. package/package.json +64 -8
@@ -53,6 +53,220 @@ function useMarketplaceData(projectId = "local-project") {
53
53
  };
54
54
  }
55
55
 
56
+ // src/visualizations/catalog.ts
57
+ import {
58
+ defineVisualization,
59
+ VisualizationRegistry
60
+ } from "@contractspec/lib.contracts-spec/visualizations";
61
+ var ORDER_LIST_REF = {
62
+ key: "marketplace.order.list",
63
+ version: "1.0.0"
64
+ };
65
+ var PRODUCT_LIST_REF = {
66
+ key: "marketplace.product.list",
67
+ version: "1.0.0"
68
+ };
69
+ var META = {
70
+ version: "1.0.0",
71
+ domain: "marketplace",
72
+ stability: "experimental",
73
+ owners: ["@example.marketplace"],
74
+ tags: ["marketplace", "visualization", "commerce"]
75
+ };
76
+ var MarketplaceOrderStatusVisualization = defineVisualization({
77
+ meta: {
78
+ ...META,
79
+ key: "marketplace.visualization.order-status",
80
+ title: "Order Status Breakdown",
81
+ description: "Distribution of current order states.",
82
+ goal: "Expose delivery and backlog mix at a glance.",
83
+ context: "Marketplace operations overview."
84
+ },
85
+ source: { primary: ORDER_LIST_REF, resultPath: "data" },
86
+ visualization: {
87
+ kind: "pie",
88
+ nameDimension: "status",
89
+ valueMeasure: "orders",
90
+ dimensions: [
91
+ { key: "status", label: "Status", dataPath: "status", type: "category" }
92
+ ],
93
+ measures: [
94
+ { key: "orders", label: "Orders", dataPath: "orders", format: "number" }
95
+ ],
96
+ table: { caption: "Order counts by status." }
97
+ }
98
+ });
99
+ var MarketplaceCategoryValueVisualization = defineVisualization({
100
+ meta: {
101
+ ...META,
102
+ key: "marketplace.visualization.category-value",
103
+ title: "Category Value Comparison",
104
+ description: "Catalog value by product category derived from current pricing and stock.",
105
+ goal: "Compare where the marketplace catalog is concentrated.",
106
+ context: "Merchandising overview."
107
+ },
108
+ source: { primary: PRODUCT_LIST_REF, resultPath: "data" },
109
+ visualization: {
110
+ kind: "cartesian",
111
+ variant: "bar",
112
+ xDimension: "category",
113
+ yMeasures: ["catalogValue"],
114
+ dimensions: [
115
+ {
116
+ key: "category",
117
+ label: "Category",
118
+ dataPath: "category",
119
+ type: "category"
120
+ }
121
+ ],
122
+ measures: [
123
+ {
124
+ key: "catalogValue",
125
+ label: "Catalog Value",
126
+ dataPath: "catalogValue",
127
+ format: "currency",
128
+ color: "#1d4ed8"
129
+ }
130
+ ],
131
+ table: { caption: "Catalog value by product category." }
132
+ }
133
+ });
134
+ var MarketplaceOrderActivityVisualization = defineVisualization({
135
+ meta: {
136
+ ...META,
137
+ key: "marketplace.visualization.order-activity",
138
+ title: "Recent Order Activity",
139
+ description: "Daily order volume from recent order creation timestamps.",
140
+ goal: "Show recent order activity trends.",
141
+ context: "Commerce operations trend monitoring."
142
+ },
143
+ source: { primary: ORDER_LIST_REF, resultPath: "data" },
144
+ visualization: {
145
+ kind: "cartesian",
146
+ variant: "line",
147
+ xDimension: "day",
148
+ yMeasures: ["orders"],
149
+ dimensions: [{ key: "day", label: "Day", dataPath: "day", type: "time" }],
150
+ measures: [
151
+ {
152
+ key: "orders",
153
+ label: "Orders",
154
+ dataPath: "orders",
155
+ format: "number",
156
+ color: "#0f766e"
157
+ }
158
+ ],
159
+ table: { caption: "Daily order counts." }
160
+ }
161
+ });
162
+ var MarketplaceVisualizationSpecs = [
163
+ MarketplaceOrderStatusVisualization,
164
+ MarketplaceCategoryValueVisualization,
165
+ MarketplaceOrderActivityVisualization
166
+ ];
167
+ var MarketplaceVisualizationRegistry = new VisualizationRegistry([
168
+ ...MarketplaceVisualizationSpecs
169
+ ]);
170
+ var MarketplaceVisualizationRefs = MarketplaceVisualizationSpecs.map((spec) => ({
171
+ key: spec.meta.key,
172
+ version: spec.meta.version
173
+ }));
174
+
175
+ // src/visualizations/selectors.ts
176
+ function toDayKey(value) {
177
+ const date = value instanceof Date ? value : new Date(value);
178
+ return date.toISOString().slice(0, 10);
179
+ }
180
+ function createMarketplaceVisualizationItems(products, orders) {
181
+ const orderStatus = new Map;
182
+ const orderActivity = new Map;
183
+ const categoryValue = new Map;
184
+ for (const order of orders) {
185
+ orderStatus.set(order.status, (orderStatus.get(order.status) ?? 0) + 1);
186
+ const day = toDayKey(order.createdAt);
187
+ orderActivity.set(day, (orderActivity.get(day) ?? 0) + 1);
188
+ }
189
+ for (const product of products) {
190
+ const category = product.category ?? "Uncategorized";
191
+ categoryValue.set(category, (categoryValue.get(category) ?? 0) + product.price * product.stock);
192
+ }
193
+ return [
194
+ {
195
+ key: "marketplace-order-status",
196
+ spec: MarketplaceOrderStatusVisualization,
197
+ data: {
198
+ data: Array.from(orderStatus.entries()).map(([status, count]) => ({
199
+ status,
200
+ orders: count
201
+ }))
202
+ },
203
+ title: "Order Status Breakdown",
204
+ description: "Status mix across the current order set.",
205
+ height: 260
206
+ },
207
+ {
208
+ key: "marketplace-category-value",
209
+ spec: MarketplaceCategoryValueVisualization,
210
+ data: {
211
+ data: Array.from(categoryValue.entries()).sort(([, left], [, right]) => right - left).map(([category, value]) => ({
212
+ category,
213
+ catalogValue: value
214
+ }))
215
+ },
216
+ title: "Category Value Comparison",
217
+ description: "Derived from current product pricing and stock."
218
+ },
219
+ {
220
+ key: "marketplace-order-activity",
221
+ spec: MarketplaceOrderActivityVisualization,
222
+ data: {
223
+ data: Array.from(orderActivity.entries()).sort(([left], [right]) => left.localeCompare(right)).map(([day, count]) => ({ day, orders: count }))
224
+ },
225
+ title: "Recent Order Activity",
226
+ description: "Daily order count from current order history."
227
+ }
228
+ ];
229
+ }
230
+ // src/ui/MarketplaceDashboard.visualizations.tsx
231
+ import {
232
+ VisualizationCard,
233
+ VisualizationGrid
234
+ } from "@contractspec/lib.design-system";
235
+ import { jsxDEV } from "react/jsx-dev-runtime";
236
+ "use client";
237
+ function MarketplaceVisualizationOverview({
238
+ products,
239
+ orders
240
+ }) {
241
+ const items = createMarketplaceVisualizationItems(products, orders);
242
+ return /* @__PURE__ */ jsxDEV("section", {
243
+ className: "space-y-3",
244
+ children: [
245
+ /* @__PURE__ */ jsxDEV("div", {
246
+ children: [
247
+ /* @__PURE__ */ jsxDEV("h3", {
248
+ className: "font-semibold text-lg",
249
+ children: "Commerce Visualizations"
250
+ }, undefined, false, undefined, this),
251
+ /* @__PURE__ */ jsxDEV("p", {
252
+ className: "text-muted-foreground text-sm",
253
+ children: "Order and catalog trends exposed through shared visualization contracts."
254
+ }, undefined, false, undefined, this)
255
+ ]
256
+ }, undefined, true, undefined, this),
257
+ /* @__PURE__ */ jsxDEV(VisualizationGrid, {
258
+ children: items.map((item) => /* @__PURE__ */ jsxDEV(VisualizationCard, {
259
+ data: item.data,
260
+ description: item.description,
261
+ height: item.height,
262
+ spec: item.spec,
263
+ title: item.title
264
+ }, item.key, false, undefined, this))
265
+ }, undefined, false, undefined, this)
266
+ ]
267
+ }, undefined, true, undefined, this);
268
+ }
269
+
56
270
  // src/ui/MarketplaceDashboard.tsx
57
271
  import {
58
272
  Button,
@@ -62,7 +276,7 @@ import {
62
276
  StatCardGroup
63
277
  } from "@contractspec/lib.design-system";
64
278
  import { useState as useState2 } from "react";
65
- import { jsxDEV } from "react/jsx-dev-runtime";
279
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
66
280
  "use client";
67
281
  var STATUS_COLORS = {
68
282
  ACTIVE: "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400",
@@ -94,32 +308,32 @@ function MarketplaceDashboard() {
94
308
  { id: "orders", label: "Orders", icon: "\uD83D\uDED2" }
95
309
  ];
96
310
  if (loading) {
97
- return /* @__PURE__ */ jsxDEV(LoaderBlock, {
311
+ return /* @__PURE__ */ jsxDEV2(LoaderBlock, {
98
312
  label: "Loading Marketplace..."
99
313
  }, undefined, false, undefined, this);
100
314
  }
101
315
  if (error) {
102
- return /* @__PURE__ */ jsxDEV(ErrorState, {
316
+ return /* @__PURE__ */ jsxDEV2(ErrorState, {
103
317
  title: "Failed to load Marketplace",
104
318
  description: error.message,
105
319
  onRetry: refetch,
106
320
  retryLabel: "Retry"
107
321
  }, undefined, false, undefined, this);
108
322
  }
109
- return /* @__PURE__ */ jsxDEV("div", {
323
+ return /* @__PURE__ */ jsxDEV2("div", {
110
324
  className: "space-y-6",
111
325
  children: [
112
- /* @__PURE__ */ jsxDEV("div", {
326
+ /* @__PURE__ */ jsxDEV2("div", {
113
327
  className: "flex items-center justify-between",
114
328
  children: [
115
- /* @__PURE__ */ jsxDEV("h2", {
329
+ /* @__PURE__ */ jsxDEV2("h2", {
116
330
  className: "font-bold text-2xl",
117
331
  children: "Marketplace"
118
332
  }, undefined, false, undefined, this),
119
- /* @__PURE__ */ jsxDEV(Button, {
333
+ /* @__PURE__ */ jsxDEV2(Button, {
120
334
  onClick: () => alert("Create store modal"),
121
335
  children: [
122
- /* @__PURE__ */ jsxDEV("span", {
336
+ /* @__PURE__ */ jsxDEV2("span", {
123
337
  className: "mr-2",
124
338
  children: "+"
125
339
  }, undefined, false, undefined, this),
@@ -128,108 +342,112 @@ function MarketplaceDashboard() {
128
342
  }, undefined, true, undefined, this)
129
343
  ]
130
344
  }, undefined, true, undefined, this),
131
- /* @__PURE__ */ jsxDEV(StatCardGroup, {
345
+ /* @__PURE__ */ jsxDEV2(StatCardGroup, {
132
346
  children: [
133
- /* @__PURE__ */ jsxDEV(StatCard, {
347
+ /* @__PURE__ */ jsxDEV2(StatCard, {
134
348
  label: "Stores",
135
349
  value: stats.totalStores,
136
350
  hint: `${stats.activeStores} active`
137
351
  }, undefined, false, undefined, this),
138
- /* @__PURE__ */ jsxDEV(StatCard, {
352
+ /* @__PURE__ */ jsxDEV2(StatCard, {
139
353
  label: "Products",
140
354
  value: stats.totalProducts,
141
355
  hint: "listed"
142
356
  }, undefined, false, undefined, this),
143
- /* @__PURE__ */ jsxDEV(StatCard, {
357
+ /* @__PURE__ */ jsxDEV2(StatCard, {
144
358
  label: "Orders",
145
359
  value: stats.totalOrders,
146
360
  hint: `${stats.pendingOrders} pending`
147
361
  }, undefined, false, undefined, this),
148
- /* @__PURE__ */ jsxDEV(StatCard, {
362
+ /* @__PURE__ */ jsxDEV2(StatCard, {
149
363
  label: "Revenue",
150
364
  value: formatCurrency(stats.totalRevenue),
151
365
  hint: "total"
152
366
  }, undefined, false, undefined, this)
153
367
  ]
154
368
  }, undefined, true, undefined, this),
155
- /* @__PURE__ */ jsxDEV("nav", {
369
+ /* @__PURE__ */ jsxDEV2(MarketplaceVisualizationOverview, {
370
+ orders,
371
+ products
372
+ }, undefined, false, undefined, this),
373
+ /* @__PURE__ */ jsxDEV2("nav", {
156
374
  className: "flex gap-1 rounded-lg bg-muted p-1",
157
375
  role: "tablist",
158
- children: tabs.map((tab) => /* @__PURE__ */ jsxDEV(Button, {
376
+ children: tabs.map((tab) => /* @__PURE__ */ jsxDEV2(Button, {
159
377
  type: "button",
160
378
  role: "tab",
161
379
  "aria-selected": activeTab === tab.id,
162
380
  onClick: () => setActiveTab(tab.id),
163
381
  className: `flex flex-1 items-center justify-center gap-2 rounded-md px-4 py-2 font-medium text-sm transition-colors ${activeTab === tab.id ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"}`,
164
382
  children: [
165
- /* @__PURE__ */ jsxDEV("span", {
383
+ /* @__PURE__ */ jsxDEV2("span", {
166
384
  children: tab.icon
167
385
  }, undefined, false, undefined, this),
168
386
  tab.label
169
387
  ]
170
388
  }, tab.id, true, undefined, this))
171
389
  }, undefined, false, undefined, this),
172
- /* @__PURE__ */ jsxDEV("div", {
390
+ /* @__PURE__ */ jsxDEV2("div", {
173
391
  className: "min-h-[400px]",
174
392
  role: "tabpanel",
175
393
  children: [
176
- activeTab === "stores" && /* @__PURE__ */ jsxDEV("div", {
394
+ activeTab === "stores" && /* @__PURE__ */ jsxDEV2("div", {
177
395
  className: "rounded-lg border border-border",
178
- children: /* @__PURE__ */ jsxDEV("table", {
396
+ children: /* @__PURE__ */ jsxDEV2("table", {
179
397
  className: "w-full",
180
398
  children: [
181
- /* @__PURE__ */ jsxDEV("thead", {
399
+ /* @__PURE__ */ jsxDEV2("thead", {
182
400
  className: "border-border border-b bg-muted/30",
183
- children: /* @__PURE__ */ jsxDEV("tr", {
401
+ children: /* @__PURE__ */ jsxDEV2("tr", {
184
402
  children: [
185
- /* @__PURE__ */ jsxDEV("th", {
403
+ /* @__PURE__ */ jsxDEV2("th", {
186
404
  className: "px-4 py-3 text-left font-medium text-sm",
187
405
  children: "Store"
188
406
  }, undefined, false, undefined, this),
189
- /* @__PURE__ */ jsxDEV("th", {
407
+ /* @__PURE__ */ jsxDEV2("th", {
190
408
  className: "px-4 py-3 text-left font-medium text-sm",
191
409
  children: "Status"
192
410
  }, undefined, false, undefined, this),
193
- /* @__PURE__ */ jsxDEV("th", {
411
+ /* @__PURE__ */ jsxDEV2("th", {
194
412
  className: "px-4 py-3 text-left font-medium text-sm",
195
413
  children: "Rating"
196
414
  }, undefined, false, undefined, this),
197
- /* @__PURE__ */ jsxDEV("th", {
415
+ /* @__PURE__ */ jsxDEV2("th", {
198
416
  className: "px-4 py-3 text-left font-medium text-sm",
199
417
  children: "Reviews"
200
418
  }, undefined, false, undefined, this)
201
419
  ]
202
420
  }, undefined, true, undefined, this)
203
421
  }, undefined, false, undefined, this),
204
- /* @__PURE__ */ jsxDEV("tbody", {
422
+ /* @__PURE__ */ jsxDEV2("tbody", {
205
423
  className: "divide-y divide-border",
206
424
  children: [
207
- stores.map((store) => /* @__PURE__ */ jsxDEV("tr", {
425
+ stores.map((store) => /* @__PURE__ */ jsxDEV2("tr", {
208
426
  className: "hover:bg-muted/50",
209
427
  children: [
210
- /* @__PURE__ */ jsxDEV("td", {
428
+ /* @__PURE__ */ jsxDEV2("td", {
211
429
  className: "px-4 py-3",
212
430
  children: [
213
- /* @__PURE__ */ jsxDEV("div", {
431
+ /* @__PURE__ */ jsxDEV2("div", {
214
432
  className: "font-medium",
215
433
  children: store.name
216
434
  }, undefined, false, undefined, this),
217
- /* @__PURE__ */ jsxDEV("div", {
435
+ /* @__PURE__ */ jsxDEV2("div", {
218
436
  className: "text-muted-foreground text-sm",
219
437
  children: store.description
220
438
  }, undefined, false, undefined, this)
221
439
  ]
222
440
  }, undefined, true, undefined, this),
223
- /* @__PURE__ */ jsxDEV("td", {
441
+ /* @__PURE__ */ jsxDEV2("td", {
224
442
  className: "px-4 py-3",
225
- children: /* @__PURE__ */ jsxDEV("span", {
443
+ children: /* @__PURE__ */ jsxDEV2("span", {
226
444
  className: `inline-flex rounded-full px-2 py-0.5 font-medium text-xs ${STATUS_COLORS[store.status] ?? ""}`,
227
445
  children: store.status
228
446
  }, undefined, false, undefined, this)
229
447
  }, undefined, false, undefined, this),
230
- /* @__PURE__ */ jsxDEV("td", {
448
+ /* @__PURE__ */ jsxDEV2("td", {
231
449
  className: "px-4 py-3",
232
- children: /* @__PURE__ */ jsxDEV("span", {
450
+ children: /* @__PURE__ */ jsxDEV2("span", {
233
451
  className: "flex items-center gap-1",
234
452
  children: [
235
453
  "\u2B50 ",
@@ -237,7 +455,7 @@ function MarketplaceDashboard() {
237
455
  ]
238
456
  }, undefined, true, undefined, this)
239
457
  }, undefined, false, undefined, this),
240
- /* @__PURE__ */ jsxDEV("td", {
458
+ /* @__PURE__ */ jsxDEV2("td", {
241
459
  className: "px-4 py-3 text-muted-foreground text-sm",
242
460
  children: [
243
461
  store.reviewCount,
@@ -246,8 +464,8 @@ function MarketplaceDashboard() {
246
464
  }, undefined, true, undefined, this)
247
465
  ]
248
466
  }, store.id, true, undefined, this)),
249
- stores.length === 0 && /* @__PURE__ */ jsxDEV("tr", {
250
- children: /* @__PURE__ */ jsxDEV("td", {
467
+ stores.length === 0 && /* @__PURE__ */ jsxDEV2("tr", {
468
+ children: /* @__PURE__ */ jsxDEV2("td", {
251
469
  colSpan: 4,
252
470
  className: "px-4 py-8 text-center text-muted-foreground",
253
471
  children: "No stores found"
@@ -258,72 +476,72 @@ function MarketplaceDashboard() {
258
476
  ]
259
477
  }, undefined, true, undefined, this)
260
478
  }, undefined, false, undefined, this),
261
- activeTab === "products" && /* @__PURE__ */ jsxDEV("div", {
479
+ activeTab === "products" && /* @__PURE__ */ jsxDEV2("div", {
262
480
  className: "rounded-lg border border-border",
263
- children: /* @__PURE__ */ jsxDEV("table", {
481
+ children: /* @__PURE__ */ jsxDEV2("table", {
264
482
  className: "w-full",
265
483
  children: [
266
- /* @__PURE__ */ jsxDEV("thead", {
484
+ /* @__PURE__ */ jsxDEV2("thead", {
267
485
  className: "border-border border-b bg-muted/30",
268
- children: /* @__PURE__ */ jsxDEV("tr", {
486
+ children: /* @__PURE__ */ jsxDEV2("tr", {
269
487
  children: [
270
- /* @__PURE__ */ jsxDEV("th", {
488
+ /* @__PURE__ */ jsxDEV2("th", {
271
489
  className: "px-4 py-3 text-left font-medium text-sm",
272
490
  children: "Product"
273
491
  }, undefined, false, undefined, this),
274
- /* @__PURE__ */ jsxDEV("th", {
492
+ /* @__PURE__ */ jsxDEV2("th", {
275
493
  className: "px-4 py-3 text-left font-medium text-sm",
276
494
  children: "Price"
277
495
  }, undefined, false, undefined, this),
278
- /* @__PURE__ */ jsxDEV("th", {
496
+ /* @__PURE__ */ jsxDEV2("th", {
279
497
  className: "px-4 py-3 text-left font-medium text-sm",
280
498
  children: "Stock"
281
499
  }, undefined, false, undefined, this),
282
- /* @__PURE__ */ jsxDEV("th", {
500
+ /* @__PURE__ */ jsxDEV2("th", {
283
501
  className: "px-4 py-3 text-left font-medium text-sm",
284
502
  children: "Status"
285
503
  }, undefined, false, undefined, this)
286
504
  ]
287
505
  }, undefined, true, undefined, this)
288
506
  }, undefined, false, undefined, this),
289
- /* @__PURE__ */ jsxDEV("tbody", {
507
+ /* @__PURE__ */ jsxDEV2("tbody", {
290
508
  className: "divide-y divide-border",
291
509
  children: [
292
- products.map((product) => /* @__PURE__ */ jsxDEV("tr", {
510
+ products.map((product) => /* @__PURE__ */ jsxDEV2("tr", {
293
511
  className: "hover:bg-muted/50",
294
512
  children: [
295
- /* @__PURE__ */ jsxDEV("td", {
513
+ /* @__PURE__ */ jsxDEV2("td", {
296
514
  className: "px-4 py-3",
297
515
  children: [
298
- /* @__PURE__ */ jsxDEV("div", {
516
+ /* @__PURE__ */ jsxDEV2("div", {
299
517
  className: "font-medium",
300
518
  children: product.name
301
519
  }, undefined, false, undefined, this),
302
- /* @__PURE__ */ jsxDEV("div", {
520
+ /* @__PURE__ */ jsxDEV2("div", {
303
521
  className: "text-muted-foreground text-sm",
304
522
  children: product.category
305
523
  }, undefined, false, undefined, this)
306
524
  ]
307
525
  }, undefined, true, undefined, this),
308
- /* @__PURE__ */ jsxDEV("td", {
526
+ /* @__PURE__ */ jsxDEV2("td", {
309
527
  className: "px-4 py-3 font-mono",
310
528
  children: formatCurrency(product.price, product.currency)
311
529
  }, undefined, false, undefined, this),
312
- /* @__PURE__ */ jsxDEV("td", {
530
+ /* @__PURE__ */ jsxDEV2("td", {
313
531
  className: "px-4 py-3",
314
532
  children: product.stock
315
533
  }, undefined, false, undefined, this),
316
- /* @__PURE__ */ jsxDEV("td", {
534
+ /* @__PURE__ */ jsxDEV2("td", {
317
535
  className: "px-4 py-3",
318
- children: /* @__PURE__ */ jsxDEV("span", {
536
+ children: /* @__PURE__ */ jsxDEV2("span", {
319
537
  className: `inline-flex rounded-full px-2 py-0.5 font-medium text-xs ${STATUS_COLORS[product.status] ?? ""}`,
320
538
  children: product.status
321
539
  }, undefined, false, undefined, this)
322
540
  }, undefined, false, undefined, this)
323
541
  ]
324
542
  }, product.id, true, undefined, this)),
325
- products.length === 0 && /* @__PURE__ */ jsxDEV("tr", {
326
- children: /* @__PURE__ */ jsxDEV("td", {
543
+ products.length === 0 && /* @__PURE__ */ jsxDEV2("tr", {
544
+ children: /* @__PURE__ */ jsxDEV2("td", {
327
545
  colSpan: 4,
328
546
  className: "px-4 py-8 text-center text-muted-foreground",
329
547
  children: "No products found"
@@ -334,71 +552,71 @@ function MarketplaceDashboard() {
334
552
  ]
335
553
  }, undefined, true, undefined, this)
336
554
  }, undefined, false, undefined, this),
337
- activeTab === "orders" && /* @__PURE__ */ jsxDEV("div", {
555
+ activeTab === "orders" && /* @__PURE__ */ jsxDEV2("div", {
338
556
  className: "rounded-lg border border-border",
339
- children: /* @__PURE__ */ jsxDEV("table", {
557
+ children: /* @__PURE__ */ jsxDEV2("table", {
340
558
  className: "w-full",
341
559
  children: [
342
- /* @__PURE__ */ jsxDEV("thead", {
560
+ /* @__PURE__ */ jsxDEV2("thead", {
343
561
  className: "border-border border-b bg-muted/30",
344
- children: /* @__PURE__ */ jsxDEV("tr", {
562
+ children: /* @__PURE__ */ jsxDEV2("tr", {
345
563
  children: [
346
- /* @__PURE__ */ jsxDEV("th", {
564
+ /* @__PURE__ */ jsxDEV2("th", {
347
565
  className: "px-4 py-3 text-left font-medium text-sm",
348
566
  children: "Order ID"
349
567
  }, undefined, false, undefined, this),
350
- /* @__PURE__ */ jsxDEV("th", {
568
+ /* @__PURE__ */ jsxDEV2("th", {
351
569
  className: "px-4 py-3 text-left font-medium text-sm",
352
570
  children: "Customer"
353
571
  }, undefined, false, undefined, this),
354
- /* @__PURE__ */ jsxDEV("th", {
572
+ /* @__PURE__ */ jsxDEV2("th", {
355
573
  className: "px-4 py-3 text-left font-medium text-sm",
356
574
  children: "Total"
357
575
  }, undefined, false, undefined, this),
358
- /* @__PURE__ */ jsxDEV("th", {
576
+ /* @__PURE__ */ jsxDEV2("th", {
359
577
  className: "px-4 py-3 text-left font-medium text-sm",
360
578
  children: "Status"
361
579
  }, undefined, false, undefined, this),
362
- /* @__PURE__ */ jsxDEV("th", {
580
+ /* @__PURE__ */ jsxDEV2("th", {
363
581
  className: "px-4 py-3 text-left font-medium text-sm",
364
582
  children: "Date"
365
583
  }, undefined, false, undefined, this)
366
584
  ]
367
585
  }, undefined, true, undefined, this)
368
586
  }, undefined, false, undefined, this),
369
- /* @__PURE__ */ jsxDEV("tbody", {
587
+ /* @__PURE__ */ jsxDEV2("tbody", {
370
588
  className: "divide-y divide-border",
371
589
  children: [
372
- orders.map((order) => /* @__PURE__ */ jsxDEV("tr", {
590
+ orders.map((order) => /* @__PURE__ */ jsxDEV2("tr", {
373
591
  className: "hover:bg-muted/50",
374
592
  children: [
375
- /* @__PURE__ */ jsxDEV("td", {
593
+ /* @__PURE__ */ jsxDEV2("td", {
376
594
  className: "px-4 py-3 font-mono text-sm",
377
595
  children: order.id
378
596
  }, undefined, false, undefined, this),
379
- /* @__PURE__ */ jsxDEV("td", {
597
+ /* @__PURE__ */ jsxDEV2("td", {
380
598
  className: "px-4 py-3 text-sm",
381
599
  children: order.customerId
382
600
  }, undefined, false, undefined, this),
383
- /* @__PURE__ */ jsxDEV("td", {
601
+ /* @__PURE__ */ jsxDEV2("td", {
384
602
  className: "px-4 py-3 font-mono",
385
603
  children: formatCurrency(order.total, order.currency)
386
604
  }, undefined, false, undefined, this),
387
- /* @__PURE__ */ jsxDEV("td", {
605
+ /* @__PURE__ */ jsxDEV2("td", {
388
606
  className: "px-4 py-3",
389
- children: /* @__PURE__ */ jsxDEV("span", {
607
+ children: /* @__PURE__ */ jsxDEV2("span", {
390
608
  className: `inline-flex rounded-full px-2 py-0.5 font-medium text-xs ${STATUS_COLORS[order.status] ?? ""}`,
391
609
  children: order.status
392
610
  }, undefined, false, undefined, this)
393
611
  }, undefined, false, undefined, this),
394
- /* @__PURE__ */ jsxDEV("td", {
612
+ /* @__PURE__ */ jsxDEV2("td", {
395
613
  className: "px-4 py-3 text-muted-foreground text-sm",
396
614
  children: order.createdAt.toLocaleDateString()
397
615
  }, undefined, false, undefined, this)
398
616
  ]
399
617
  }, order.id, true, undefined, this)),
400
- orders.length === 0 && /* @__PURE__ */ jsxDEV("tr", {
401
- children: /* @__PURE__ */ jsxDEV("td", {
618
+ orders.length === 0 && /* @__PURE__ */ jsxDEV2("tr", {
619
+ children: /* @__PURE__ */ jsxDEV2("td", {
402
620
  colSpan: 5,
403
621
  className: "px-4 py-8 text-center text-muted-foreground",
404
622
  children: "No orders found"
@@ -0,0 +1,5 @@
1
+ import type { Order, Product } from '../handlers/marketplace.handlers';
2
+ export declare function MarketplaceVisualizationOverview({ products, orders, }: {
3
+ products: Product[];
4
+ orders: Order[];
5
+ }): import("react/jsx-runtime").JSX.Element;