@rovela-ai/sdk 0.1.19 → 0.1.21

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 (82) hide show
  1. package/dist/admin/components/AdminNav.d.ts +10 -3
  2. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  3. package/dist/admin/components/AdminNav.js +80 -28
  4. package/dist/admin/components/AdminNav.js.map +1 -1
  5. package/dist/admin/components/CategoryForm.d.ts +30 -0
  6. package/dist/admin/components/CategoryForm.d.ts.map +1 -0
  7. package/dist/admin/components/CategoryForm.js +153 -0
  8. package/dist/admin/components/CategoryForm.js.map +1 -0
  9. package/dist/admin/components/CategorySelect.d.ts +32 -0
  10. package/dist/admin/components/CategorySelect.d.ts.map +1 -0
  11. package/dist/admin/components/CategorySelect.js +148 -0
  12. package/dist/admin/components/CategorySelect.js.map +1 -0
  13. package/dist/admin/components/LowStockAlert.d.ts +2 -2
  14. package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
  15. package/dist/admin/components/LowStockAlert.js +16 -9
  16. package/dist/admin/components/LowStockAlert.js.map +1 -1
  17. package/dist/admin/components/OrderStatusChart.d.ts +21 -0
  18. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -0
  19. package/dist/admin/components/OrderStatusChart.js +54 -0
  20. package/dist/admin/components/OrderStatusChart.js.map +1 -0
  21. package/dist/admin/components/ProductForm.d.ts +2 -2
  22. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  23. package/dist/admin/components/ProductForm.js +125 -9
  24. package/dist/admin/components/ProductForm.js.map +1 -1
  25. package/dist/admin/components/RecentOrders.d.ts +1 -1
  26. package/dist/admin/components/RecentOrders.d.ts.map +1 -1
  27. package/dist/admin/components/RecentOrders.js +11 -10
  28. package/dist/admin/components/RecentOrders.js.map +1 -1
  29. package/dist/admin/components/RevenueChart.d.ts +23 -0
  30. package/dist/admin/components/RevenueChart.d.ts.map +1 -0
  31. package/dist/admin/components/RevenueChart.js +70 -0
  32. package/dist/admin/components/RevenueChart.js.map +1 -0
  33. package/dist/admin/components/SEOPreview.d.ts +32 -0
  34. package/dist/admin/components/SEOPreview.d.ts.map +1 -0
  35. package/dist/admin/components/SEOPreview.js +30 -0
  36. package/dist/admin/components/SEOPreview.js.map +1 -0
  37. package/dist/admin/components/StatsCards.d.ts +2 -2
  38. package/dist/admin/components/StatsCards.d.ts.map +1 -1
  39. package/dist/admin/components/StatsCards.js +18 -20
  40. package/dist/admin/components/StatsCards.js.map +1 -1
  41. package/dist/admin/components/TagInput.d.ts +29 -0
  42. package/dist/admin/components/TagInput.d.ts.map +1 -0
  43. package/dist/admin/components/TagInput.js +73 -0
  44. package/dist/admin/components/TagInput.js.map +1 -0
  45. package/dist/admin/components/VariantManager.d.ts +42 -0
  46. package/dist/admin/components/VariantManager.d.ts.map +1 -0
  47. package/dist/admin/components/VariantManager.js +175 -0
  48. package/dist/admin/components/VariantManager.js.map +1 -0
  49. package/dist/admin/components/index.d.ts +9 -0
  50. package/dist/admin/components/index.d.ts.map +1 -1
  51. package/dist/admin/components/index.js +13 -0
  52. package/dist/admin/components/index.js.map +1 -1
  53. package/dist/admin/hooks/index.d.ts +2 -0
  54. package/dist/admin/hooks/index.d.ts.map +1 -1
  55. package/dist/admin/hooks/index.js +1 -0
  56. package/dist/admin/hooks/index.js.map +1 -1
  57. package/dist/admin/hooks/useAdminCategories.d.ts +36 -0
  58. package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
  59. package/dist/admin/hooks/useAdminCategories.js +217 -0
  60. package/dist/admin/hooks/useAdminCategories.js.map +1 -0
  61. package/dist/admin/index.d.ts +4 -3
  62. package/dist/admin/index.d.ts.map +1 -1
  63. package/dist/admin/index.js +6 -2
  64. package/dist/admin/index.js.map +1 -1
  65. package/dist/core/StoreSettingsProvider.d.ts +104 -0
  66. package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
  67. package/dist/core/StoreSettingsProvider.js +195 -0
  68. package/dist/core/StoreSettingsProvider.js.map +1 -0
  69. package/dist/core/api/index.d.ts +7 -0
  70. package/dist/core/api/index.d.ts.map +1 -0
  71. package/dist/core/api/index.js +7 -0
  72. package/dist/core/api/index.js.map +1 -0
  73. package/dist/core/api/settings.d.ts +42 -0
  74. package/dist/core/api/settings.d.ts.map +1 -0
  75. package/dist/core/api/settings.js +74 -0
  76. package/dist/core/api/settings.js.map +1 -0
  77. package/dist/core/db/queries.d.ts +6 -6
  78. package/dist/core/index.d.ts +2 -0
  79. package/dist/core/index.d.ts.map +1 -1
  80. package/dist/core/index.js +2 -0
  81. package/dist/core/index.js.map +1 -1
  82. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/api/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @rovela/sdk/core/api/settings
3
+ *
4
+ * Public (read-only) settings API endpoint.
5
+ * Returns basic store settings needed for the storefront.
6
+ *
7
+ * Unlike admin settings, this endpoint is PUBLIC and does not require authentication.
8
+ * It returns a subset of settings that are safe to expose to the client.
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * // app/api/store/settings/route.ts
13
+ * import { getPublicSettings } from '@rovela-ai/sdk/core/api'
14
+ * export { getPublicSettings as GET }
15
+ * ```
16
+ */
17
+ import { NextResponse } from 'next/server';
18
+ interface PublicSettingsResponse {
19
+ settings: {
20
+ storeName: string | null;
21
+ storeEmail: string | null;
22
+ storeCurrency: string | null;
23
+ storeTimezone: string | null;
24
+ taxEnabled: boolean | null;
25
+ taxRate: number | null;
26
+ shippingEnabled: boolean | null;
27
+ freeShippingThreshold: number | null;
28
+ };
29
+ }
30
+ interface ErrorResponse {
31
+ error: string;
32
+ code: string;
33
+ }
34
+ /**
35
+ * GET /api/store/settings
36
+ *
37
+ * Returns public store settings (no authentication required).
38
+ * Used by StoreSettingsProvider to get dynamic store configuration.
39
+ */
40
+ export declare function getPublicSettings(): Promise<NextResponse<PublicSettingsResponse | ErrorResponse>>;
41
+ export {};
42
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/core/api/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAO1C,UAAU,sBAAsB;IAC9B,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;QAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;QAC5B,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;QAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAA;QAC/B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;KACrC,CAAA;CACF;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAqBD;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,sBAAsB,GAAG,aAAa,CAAC,CAAC,CAkCvG"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @rovela/sdk/core/api/settings
3
+ *
4
+ * Public (read-only) settings API endpoint.
5
+ * Returns basic store settings needed for the storefront.
6
+ *
7
+ * Unlike admin settings, this endpoint is PUBLIC and does not require authentication.
8
+ * It returns a subset of settings that are safe to expose to the client.
9
+ *
10
+ * Usage:
11
+ * ```typescript
12
+ * // app/api/store/settings/route.ts
13
+ * import { getPublicSettings } from '@rovela-ai/sdk/core/api'
14
+ * export { getPublicSettings as GET }
15
+ * ```
16
+ */
17
+ import { NextResponse } from 'next/server';
18
+ import { findSettings } from '../db/queries';
19
+ // =============================================================================
20
+ // Default Settings
21
+ // =============================================================================
22
+ const DEFAULT_SETTINGS = {
23
+ storeName: process.env.STORE_NAME || 'Store',
24
+ storeEmail: process.env.SUPPORT_EMAIL || process.env.RESEND_FROM_EMAIL || '',
25
+ storeCurrency: process.env.STORE_CURRENCY || 'USD',
26
+ storeTimezone: process.env.STORE_TIMEZONE || 'America/New_York',
27
+ taxEnabled: false,
28
+ taxRate: 0,
29
+ shippingEnabled: true,
30
+ freeShippingThreshold: 0,
31
+ };
32
+ // =============================================================================
33
+ // Handler
34
+ // =============================================================================
35
+ /**
36
+ * GET /api/store/settings
37
+ *
38
+ * Returns public store settings (no authentication required).
39
+ * Used by StoreSettingsProvider to get dynamic store configuration.
40
+ */
41
+ export async function getPublicSettings() {
42
+ try {
43
+ // Try to find existing settings in database
44
+ const settings = await findSettings();
45
+ // If no settings in database, return defaults
46
+ if (!settings) {
47
+ return NextResponse.json({
48
+ settings: DEFAULT_SETTINGS,
49
+ });
50
+ }
51
+ // Return settings from database
52
+ return NextResponse.json({
53
+ settings: {
54
+ storeName: settings.storeName ?? DEFAULT_SETTINGS.storeName,
55
+ storeEmail: settings.storeEmail ?? DEFAULT_SETTINGS.storeEmail,
56
+ storeCurrency: settings.storeCurrency ?? DEFAULT_SETTINGS.storeCurrency,
57
+ storeTimezone: settings.storeTimezone ?? DEFAULT_SETTINGS.storeTimezone,
58
+ taxEnabled: settings.taxEnabled ?? DEFAULT_SETTINGS.taxEnabled,
59
+ taxRate: settings.taxRate ?? DEFAULT_SETTINGS.taxRate,
60
+ shippingEnabled: settings.shippingEnabled ?? DEFAULT_SETTINGS.shippingEnabled,
61
+ freeShippingThreshold: settings.freeShippingThreshold ?? DEFAULT_SETTINGS.freeShippingThreshold,
62
+ },
63
+ });
64
+ }
65
+ catch (error) {
66
+ console.error('[Public Settings API] GET error:', error);
67
+ // On error, return defaults instead of failing
68
+ // This ensures the storefront works even if DB is temporarily unavailable
69
+ return NextResponse.json({
70
+ settings: DEFAULT_SETTINGS,
71
+ });
72
+ }
73
+ }
74
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/core/api/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAwB5C,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,MAAM,gBAAgB,GAAG;IACvB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO;IAC5C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;IAC5E,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK;IAClD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,kBAAkB;IAC/D,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,CAAC;CACzB,CAAA;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;QAErC,8CAA8C;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,YAAY,CAAC,IAAI,CAAC;gBACvB,QAAQ,EAAE,gBAAgB;aAC3B,CAAC,CAAA;QACJ,CAAC;QAED,gCAAgC;QAChC,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,QAAQ,EAAE;gBACR,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,gBAAgB,CAAC,SAAS;gBAC3D,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,gBAAgB,CAAC,UAAU;gBAC9D,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,gBAAgB,CAAC,aAAa;gBACvE,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,gBAAgB,CAAC,aAAa;gBACvE,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,gBAAgB,CAAC,UAAU;gBAC9D,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO;gBACrD,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,gBAAgB,CAAC,eAAe;gBAC7E,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,qBAAqB;aAChG;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;QAExD,+CAA+C;QAC/C,0EAA0E;QAC1E,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,QAAQ,EAAE,gBAAgB;SAC3B,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
@@ -371,17 +371,17 @@ export declare function getRecentOrders(limit?: number): Promise<{
371
371
  * Create a new order
372
372
  */
373
373
  export declare function createOrder(data: Omit<schema.NewOrder, 'tenantId'>): Promise<{
374
+ status: "pending" | "paid" | "shipped" | "delivered" | "cancelled" | "refunded";
375
+ email: string;
374
376
  id: string;
377
+ total: string;
375
378
  tenantId: string;
376
- status: "pending" | "paid" | "shipped" | "delivered" | "cancelled" | "refunded";
377
379
  createdAt: Date;
378
380
  updatedAt: Date;
379
381
  customerId: string | null;
380
- email: string;
381
382
  subtotal: string;
382
383
  tax: string;
383
384
  shipping: string;
384
- total: string;
385
385
  shippingAddress: {
386
386
  firstName: string;
387
387
  lastName: string;
@@ -410,15 +410,15 @@ export declare function createOrder(data: Omit<schema.NewOrder, 'tenantId'>): Pr
410
410
  * Create order items for an order
411
411
  */
412
412
  export declare function createOrderItems(items: schema.NewOrderItem[]): Promise<{
413
- id: string;
414
413
  name: string;
414
+ id: string;
415
+ attributes: Record<string, string> | null;
416
+ quantity: number;
415
417
  price: string;
416
418
  createdAt: Date;
417
419
  productId: string;
418
- attributes: Record<string, string> | null;
419
420
  orderId: string;
420
421
  variantId: string | null;
421
- quantity: number;
422
422
  }[]>;
423
423
  /**
424
424
  * Update order status
@@ -15,6 +15,8 @@
15
15
  * ```
16
16
  */
17
17
  export * from './types';
18
+ export { StoreSettingsProvider, useStoreSettings, useStoreSettingsOptional, } from './StoreSettingsProvider';
19
+ export type { StoreSettings, StoreSettingsContextValue, StoreSettingsProviderProps, } from './StoreSettingsProvider';
18
20
  export { cn, formatPrice, parsePrice, generateSlug, generateUniqueSlug, generateSKU, formatDate, formatRelativeTime, truncate, capitalize, titleCase, clamp, formatNumber, percentage, isValidEmail, isValidPhone, isValidPostalCode, deepClone, compact, pick, omit, sleep, retry, } from './utils';
19
21
  export type { FormatPriceOptions } from './utils';
20
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,cAAc,SAAS,CAAA;AAGvB,OAAO,EAEL,EAAE,EAEF,WAAW,EACX,UAAU,EAEV,YAAY,EACZ,kBAAkB,EAElB,WAAW,EAEX,UAAU,EACV,kBAAkB,EAElB,QAAQ,EACR,UAAU,EACV,SAAS,EAET,KAAK,EACL,YAAY,EACZ,UAAU,EAEV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAEjB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EAEJ,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,cAAc,SAAS,CAAA;AAGvB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAEhC,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAEL,EAAE,EAEF,WAAW,EACX,UAAU,EAEV,YAAY,EACZ,kBAAkB,EAElB,WAAW,EAEX,UAAU,EACV,kBAAkB,EAElB,QAAQ,EACR,UAAU,EACV,SAAS,EAET,KAAK,EACL,YAAY,EACZ,UAAU,EAEV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAEjB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EAEJ,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA"}
@@ -16,6 +16,8 @@
16
16
  */
17
17
  // Types - all shared domain types (browser-safe)
18
18
  export * from './types';
19
+ // Store Settings Provider and Hook (browser-safe)
20
+ export { StoreSettingsProvider, useStoreSettings, useStoreSettingsOptional, } from './StoreSettingsProvider';
19
21
  // Utilities - browser-safe functions
20
22
  export {
21
23
  // Class names
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iDAAiD;AACjD,cAAc,SAAS,CAAA;AAEvB,qCAAqC;AACrC,OAAO;AACL,cAAc;AACd,EAAE;AACF,mBAAmB;AACnB,WAAW,EACX,UAAU;AACV,kBAAkB;AAClB,YAAY,EACZ,kBAAkB;AAClB,iBAAiB;AACjB,WAAW;AACX,kBAAkB;AAClB,UAAU,EACV,kBAAkB;AAClB,mBAAmB;AACnB,QAAQ,EACR,UAAU,EACV,SAAS;AACT,mBAAmB;AACnB,KAAK,EACL,YAAY,EACZ,UAAU;AACV,aAAa;AACb,YAAY,EACZ,YAAY,EACZ,iBAAiB;AACjB,mBAAmB;AACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI;AACJ,kBAAkB;AAClB,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iDAAiD;AACjD,cAAc,SAAS,CAAA;AAEvB,kDAAkD;AAClD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAQhC,qCAAqC;AACrC,OAAO;AACL,cAAc;AACd,EAAE;AACF,mBAAmB;AACnB,WAAW,EACX,UAAU;AACV,kBAAkB;AAClB,YAAY,EACZ,kBAAkB;AAClB,iBAAiB;AACjB,WAAW;AACX,kBAAkB;AAClB,UAAU,EACV,kBAAkB;AAClB,mBAAmB;AACnB,QAAQ,EACR,UAAU,EACV,SAAS;AACT,mBAAmB;AACnB,KAAK,EACL,YAAY,EACZ,UAAU;AACV,aAAa;AACb,YAAY,EACZ,YAAY,EACZ,iBAAiB;AACjB,mBAAmB;AACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI;AACJ,kBAAkB;AAClB,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rovela-ai/sdk",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "Rovela SDK - Pre-built e-commerce components for AI-powered store generation",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,6 +40,10 @@
40
40
  "types": "./dist/core/server/index.d.ts",
41
41
  "import": "./dist/core/server/index.js"
42
42
  },
43
+ "./core/api": {
44
+ "types": "./dist/core/api/index.d.ts",
45
+ "import": "./dist/core/api/index.js"
46
+ },
43
47
  "./theme": {
44
48
  "types": "./dist/theme/index.d.ts",
45
49
  "import": "./dist/theme/index.js"
@@ -162,6 +166,7 @@
162
166
  "drizzle-orm": "^0.44.3",
163
167
  "nanoid": "^5.0.9",
164
168
  "next-auth": "^4.24.11",
169
+ "recharts": "^3.5.1",
165
170
  "resend": "^6.0.0",
166
171
  "stripe": "^20.0.0",
167
172
  "tailwind-merge": "^3.3.1",