@happyvertical/smrt-products 0.30.0

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 (147) hide show
  1. package/AGENTS.md +122 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +115 -0
  5. package/dist/lib/__smrt-register__.d.ts +2 -0
  6. package/dist/lib/__smrt-register__.d.ts.map +1 -0
  7. package/dist/lib/app/main.d.ts +6 -0
  8. package/dist/lib/app/main.d.ts.map +1 -0
  9. package/dist/lib/chunks/ProductAssetCollection-DFPXN43q.js +64 -0
  10. package/dist/lib/chunks/ProductAssetCollection-DFPXN43q.js.map +1 -0
  11. package/dist/lib/chunks/ProductForm-DHeb2L24.js +371 -0
  12. package/dist/lib/chunks/ProductForm-DHeb2L24.js.map +1 -0
  13. package/dist/lib/chunks/Sku-DUKtbYWT.js +511 -0
  14. package/dist/lib/chunks/Sku-DUKtbYWT.js.map +1 -0
  15. package/dist/lib/chunks/SkuCollection-C0tdkEdL.js +160 -0
  16. package/dist/lib/chunks/SkuCollection-C0tdkEdL.js.map +1 -0
  17. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js +5 -0
  18. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js.map +1 -0
  19. package/dist/lib/chunks/index-i3-ci1FB.js +6 -0
  20. package/dist/lib/chunks/index-i3-ci1FB.js.map +1 -0
  21. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js +132 -0
  22. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js.map +1 -0
  23. package/dist/lib/client.d.ts +9 -0
  24. package/dist/lib/client.d.ts.map +1 -0
  25. package/dist/lib/collections.d.ts +2 -0
  26. package/dist/lib/collections.d.ts.map +1 -0
  27. package/dist/lib/collections.js +12 -0
  28. package/dist/lib/collections.js.map +1 -0
  29. package/dist/lib/components.d.ts +2 -0
  30. package/dist/lib/components.d.ts.map +1 -0
  31. package/dist/lib/components.js +6 -0
  32. package/dist/lib/components.js.map +1 -0
  33. package/dist/lib/generated.d.ts +2 -0
  34. package/dist/lib/generated.d.ts.map +1 -0
  35. package/dist/lib/generated.js +5 -0
  36. package/dist/lib/generated.js.map +1 -0
  37. package/dist/lib/index.d.ts +14 -0
  38. package/dist/lib/index.d.ts.map +1 -0
  39. package/dist/lib/index.js +228 -0
  40. package/dist/lib/index.js.map +1 -0
  41. package/dist/lib/lib/collections/CategoryCollection.d.ts +20 -0
  42. package/dist/lib/lib/collections/CategoryCollection.d.ts.map +1 -0
  43. package/dist/lib/lib/collections/MaterialCollection.d.ts +20 -0
  44. package/dist/lib/lib/collections/MaterialCollection.d.ts.map +1 -0
  45. package/dist/lib/lib/collections/ProductAssetCollection.d.ts +16 -0
  46. package/dist/lib/lib/collections/ProductAssetCollection.d.ts.map +1 -0
  47. package/dist/lib/lib/collections/ProductCollection.d.ts +12 -0
  48. package/dist/lib/lib/collections/ProductCollection.d.ts.map +1 -0
  49. package/dist/lib/lib/collections/ProductVariantCollection.d.ts +10 -0
  50. package/dist/lib/lib/collections/ProductVariantCollection.d.ts.map +1 -0
  51. package/dist/lib/lib/collections/SkuCollection.d.ts +31 -0
  52. package/dist/lib/lib/collections/SkuCollection.d.ts.map +1 -0
  53. package/dist/lib/lib/collections/index.d.ts +7 -0
  54. package/dist/lib/lib/collections/index.d.ts.map +1 -0
  55. package/dist/lib/lib/components/ProductCard.svelte +173 -0
  56. package/dist/lib/lib/components/ProductCard.svelte.d.ts +10 -0
  57. package/dist/lib/lib/components/ProductCard.svelte.d.ts.map +1 -0
  58. package/dist/lib/lib/components/ProductForm.svelte +289 -0
  59. package/dist/lib/lib/components/ProductForm.svelte.d.ts +11 -0
  60. package/dist/lib/lib/components/ProductForm.svelte.d.ts.map +1 -0
  61. package/dist/lib/lib/components/TestComponent.svelte +25 -0
  62. package/dist/lib/lib/components/TestComponent.svelte.d.ts +7 -0
  63. package/dist/lib/lib/components/TestComponent.svelte.d.ts.map +1 -0
  64. package/dist/lib/lib/components/auto-generated/AutoForm.svelte +240 -0
  65. package/dist/lib/lib/components/auto-generated/AutoForm.svelte.d.ts +13 -0
  66. package/dist/lib/lib/components/auto-generated/AutoForm.svelte.d.ts.map +1 -0
  67. package/dist/lib/lib/components/auto-generated/FieldRenderer.svelte +205 -0
  68. package/dist/lib/lib/components/auto-generated/FieldRenderer.svelte.d.ts +14 -0
  69. package/dist/lib/lib/components/auto-generated/FieldRenderer.svelte.d.ts.map +1 -0
  70. package/dist/lib/lib/components/index.d.ts +12 -0
  71. package/dist/lib/lib/components/index.d.ts.map +1 -0
  72. package/dist/lib/lib/components/index.js +11 -0
  73. package/dist/lib/lib/features/CategoryManager.svelte +80 -0
  74. package/dist/lib/lib/features/CategoryManager.svelte.d.ts +7 -0
  75. package/dist/lib/lib/features/CategoryManager.svelte.d.ts.map +1 -0
  76. package/dist/lib/lib/features/ProductCatalog.svelte +299 -0
  77. package/dist/lib/lib/features/ProductCatalog.svelte.d.ts +8 -0
  78. package/dist/lib/lib/features/ProductCatalog.svelte.d.ts.map +1 -0
  79. package/dist/lib/lib/federation-entry.d.ts +11 -0
  80. package/dist/lib/lib/federation-entry.d.ts.map +1 -0
  81. package/dist/lib/lib/generated/index.d.ts +2 -0
  82. package/dist/lib/lib/generated/index.d.ts.map +1 -0
  83. package/dist/lib/lib/i18n.d.ts +79 -0
  84. package/dist/lib/lib/i18n.d.ts.map +1 -0
  85. package/dist/lib/lib/index.d.ts +20 -0
  86. package/dist/lib/lib/index.d.ts.map +1 -0
  87. package/dist/lib/lib/mock-smrt-client.d.ts +40 -0
  88. package/dist/lib/lib/mock-smrt-client.d.ts.map +1 -0
  89. package/dist/lib/lib/mock-smrt-client.js +129 -0
  90. package/dist/lib/lib/mock-smrt-client.js.map +1 -0
  91. package/dist/lib/lib/models/Category.d.ts +38 -0
  92. package/dist/lib/lib/models/Category.d.ts.map +1 -0
  93. package/dist/lib/lib/models/Material.d.ts +22 -0
  94. package/dist/lib/lib/models/Material.d.ts.map +1 -0
  95. package/dist/lib/lib/models/Product.d.ts +57 -0
  96. package/dist/lib/lib/models/Product.d.ts.map +1 -0
  97. package/dist/lib/lib/models/ProductAsset.d.ts +17 -0
  98. package/dist/lib/lib/models/ProductAsset.d.ts.map +1 -0
  99. package/dist/lib/lib/models/ProductVariant.d.ts +51 -0
  100. package/dist/lib/lib/models/ProductVariant.d.ts.map +1 -0
  101. package/dist/lib/lib/models/Sku.d.ts +79 -0
  102. package/dist/lib/lib/models/Sku.d.ts.map +1 -0
  103. package/dist/lib/lib/models/index.d.ts +15 -0
  104. package/dist/lib/lib/models/index.d.ts.map +1 -0
  105. package/dist/lib/lib/models/types.d.ts +41 -0
  106. package/dist/lib/lib/models/types.d.ts.map +1 -0
  107. package/dist/lib/lib/stores/index.d.ts +8 -0
  108. package/dist/lib/lib/stores/index.d.ts.map +1 -0
  109. package/dist/lib/lib/stores/index.js +7 -0
  110. package/dist/lib/lib/stores/product-store.client.svelte.d.ts +45 -0
  111. package/dist/lib/lib/stores/product-store.client.svelte.d.ts.map +1 -0
  112. package/dist/lib/lib/stores/product-store.client.svelte.js +147 -0
  113. package/dist/lib/lib/stores/product-store.svelte.d.ts +29 -0
  114. package/dist/lib/lib/stores/product-store.svelte.d.ts.map +1 -0
  115. package/dist/lib/lib/stores/product-store.svelte.js +144 -0
  116. package/dist/lib/lib/types.d.ts +43 -0
  117. package/dist/lib/lib/types.d.ts.map +1 -0
  118. package/dist/lib/lib/utils/index.d.ts +10 -0
  119. package/dist/lib/lib/utils/index.d.ts.map +1 -0
  120. package/dist/lib/main.d.ts +5 -0
  121. package/dist/lib/main.d.ts.map +1 -0
  122. package/dist/lib/manifest.json +3758 -0
  123. package/dist/lib/mcp.d.ts +14 -0
  124. package/dist/lib/mcp.d.ts.map +1 -0
  125. package/dist/lib/models.d.ts +2 -0
  126. package/dist/lib/models.d.ts.map +1 -0
  127. package/dist/lib/models.js +12 -0
  128. package/dist/lib/models.js.map +1 -0
  129. package/dist/lib/native-api-server.d.ts +7 -0
  130. package/dist/lib/native-api-server.d.ts.map +1 -0
  131. package/dist/lib/server.d.ts +11 -0
  132. package/dist/lib/server.d.ts.map +1 -0
  133. package/dist/lib/simple-api-server.d.ts +7 -0
  134. package/dist/lib/simple-api-server.d.ts.map +1 -0
  135. package/dist/lib/simple-server.d.ts +6 -0
  136. package/dist/lib/simple-server.d.ts.map +1 -0
  137. package/dist/lib/smrt-knowledge.json +1584 -0
  138. package/dist/lib/smrt-products.css +233 -0
  139. package/dist/lib/stores.d.ts +2 -0
  140. package/dist/lib/stores.d.ts.map +1 -0
  141. package/dist/lib/stores.js +6 -0
  142. package/dist/lib/stores.js.map +1 -0
  143. package/dist/lib/utils.d.ts +2 -0
  144. package/dist/lib/utils.d.ts.map +1 -0
  145. package/dist/lib/utils.js +27 -0
  146. package/dist/lib/utils.js.map +1 -0
  147. package/package.json +127 -0
@@ -0,0 +1,79 @@
1
+ export declare const M: {
2
+ readonly 'products.app.categories_coming_soon': "products.app.categories_coming_soon";
3
+ readonly 'products.app.analytics_coming_soon': "products.app.analytics_coming_soon";
4
+ readonly 'products.app_layout.service_title': "products.app_layout.service_title";
5
+ readonly 'products.app_layout.footer_copyright': "products.app_layout.footer_copyright";
6
+ readonly 'products.app_layout.api_docs': "products.app_layout.api_docs";
7
+ readonly 'products.app_layout.mcp_tools': "products.app_layout.mcp_tools";
8
+ readonly 'products.demo_page.title': "products.demo_page.title";
9
+ readonly 'products.demo_page.subtitle': "products.demo_page.subtitle";
10
+ readonly 'products.demo_page.custom_components_tab': "products.demo_page.custom_components_tab";
11
+ readonly 'products.demo_page.auto_generated_heading': "products.demo_page.auto_generated_heading";
12
+ readonly 'products.demo_page.auto_generated_description': "products.demo_page.auto_generated_description";
13
+ readonly 'products.demo_page.generated_form_heading': "products.demo_page.generated_form_heading";
14
+ readonly 'products.demo_page.auto_form_title': "products.demo_page.auto_form_title";
15
+ readonly 'products.demo_page.generated_display_heading': "products.demo_page.generated_display_heading";
16
+ readonly 'products.demo_page.custom_components_heading': "products.demo_page.custom_components_heading";
17
+ readonly 'products.demo_page.custom_components_description': "products.demo_page.custom_components_description";
18
+ readonly 'products.demo_page.custom_form_heading': "products.demo_page.custom_form_heading";
19
+ readonly 'products.demo_page.custom_display_heading': "products.demo_page.custom_display_heading";
20
+ readonly 'products.demo_page.progressive_heading': "products.demo_page.progressive_heading";
21
+ readonly 'products.demo_page.progressive_description': "products.demo_page.progressive_description";
22
+ readonly 'products.demo_page.feature_zero_config': "products.demo_page.feature_zero_config";
23
+ readonly 'products.demo_page.feature_instant_ui': "products.demo_page.feature_instant_ui";
24
+ readonly 'products.demo_page.feature_type_safe': "products.demo_page.feature_type_safe";
25
+ readonly 'products.demo_page.feature_prototyping': "products.demo_page.feature_prototyping";
26
+ readonly 'products.demo_page.custom_components_label': "products.demo_page.custom_components_label";
27
+ readonly 'products.demo_page.feature_tailored_ux': "products.demo_page.feature_tailored_ux";
28
+ readonly 'products.demo_page.feature_business_workflows': "products.demo_page.feature_business_workflows";
29
+ readonly 'products.demo_page.feature_advanced_interactions': "products.demo_page.feature_advanced_interactions";
30
+ readonly 'products.demo_page.simple_auto_form_title': "products.demo_page.simple_auto_form_title";
31
+ readonly 'products.demo_page.benefits_heading': "products.demo_page.benefits_heading";
32
+ readonly 'products.demo_page.benefit_define_once_label': "products.demo_page.benefit_define_once_label";
33
+ readonly 'products.demo_page.benefit_define_once_text': "products.demo_page.benefit_define_once_text";
34
+ readonly 'products.demo_page.benefit_auto_generate_label': "products.demo_page.benefit_auto_generate_label";
35
+ readonly 'products.demo_page.benefit_auto_generate_text': "products.demo_page.benefit_auto_generate_text";
36
+ readonly 'products.demo_page.benefit_progressive_label': "products.demo_page.benefit_progressive_label";
37
+ readonly 'products.demo_page.benefit_progressive_text': "products.demo_page.benefit_progressive_text";
38
+ readonly 'products.demo_page.benefit_type_safety_label': "products.demo_page.benefit_type_safety_label";
39
+ readonly 'products.demo_page.benefit_type_safety_text': "products.demo_page.benefit_type_safety_text";
40
+ readonly 'products.demo_page.benefit_multiple_consumption_label': "products.demo_page.benefit_multiple_consumption_label";
41
+ readonly 'products.demo_page.benefit_multiple_consumption_text': "products.demo_page.benefit_multiple_consumption_text";
42
+ readonly 'products.products_page.description': "products.products_page.description";
43
+ readonly 'products.products_page.auto_generated_text': "products.products_page.auto_generated_text";
44
+ readonly 'products.products_page.ai_ready_heading': "products.products_page.ai_ready_heading";
45
+ readonly 'products.products_page.ai_ready_text': "products.products_page.ai_ready_text";
46
+ readonly 'products.products_page.federatable_text': "products.products_page.federatable_text";
47
+ readonly 'products.products_page.library_text': "products.products_page.library_text";
48
+ readonly 'products.product_form.name_label': "products.product_form.name_label";
49
+ readonly 'products.product_form.name_placeholder': "products.product_form.name_placeholder";
50
+ readonly 'products.product_form.description_placeholder': "products.product_form.description_placeholder";
51
+ readonly 'products.product_form.category_placeholder': "products.product_form.category_placeholder";
52
+ readonly 'products.product_form.tags_placeholder': "products.product_form.tags_placeholder";
53
+ readonly 'products.product_form.tags_hint': "products.product_form.tags_hint";
54
+ readonly 'products.product_form.in_stock_label': "products.product_form.in_stock_label";
55
+ readonly 'products.test_component.title': "products.test_component.title";
56
+ readonly 'products.auto_form.subtitle': "products.auto_form.subtitle";
57
+ readonly 'products.auto_form.debug_summary': "products.auto_form.debug_summary";
58
+ readonly 'products.field_renderer.array_hint': "products.field_renderer.array_hint";
59
+ readonly 'products.field_renderer.object_hint': "products.field_renderer.object_hint";
60
+ readonly 'products.category_manager.title': "products.category_manager.title";
61
+ readonly 'products.category_manager.subtitle': "products.category_manager.subtitle";
62
+ readonly 'products.category_manager.coming_soon': "products.category_manager.coming_soon";
63
+ readonly 'products.category_manager.will_include': "products.category_manager.will_include";
64
+ readonly 'products.category_manager.create_edit': "products.category_manager.create_edit";
65
+ readonly 'products.category_manager.organize_hierarchy': "products.category_manager.organize_hierarchy";
66
+ readonly 'products.category_manager.manage_permissions': "products.category_manager.manage_permissions";
67
+ readonly 'products.category_manager.analytics': "products.category_manager.analytics";
68
+ readonly 'products.product_catalog.title': "products.product_catalog.title";
69
+ readonly 'products.product_catalog.in_stock': "products.product_catalog.in_stock";
70
+ readonly 'products.product_catalog.total_value': "products.product_catalog.total_value";
71
+ readonly 'products.product_catalog.search_placeholder': "products.product_catalog.search_placeholder";
72
+ readonly 'products.product_catalog.all_categories': "products.product_catalog.all_categories";
73
+ readonly 'products.product_catalog.add_product': "products.product_catalog.add_product";
74
+ readonly 'products.product_catalog.loading': "products.product_catalog.loading";
75
+ readonly 'products.product_catalog.empty': "products.product_catalog.empty";
76
+ readonly 'products.product_catalog.create_first': "products.product_catalog.create_first";
77
+ readonly 'products.product_catalog.no_match': "products.product_catalog.no_match";
78
+ };
79
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/lib/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHZ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * SMRT Template Library
3
+ *
4
+ * Complete library export for triple-purpose usage:
5
+ * 1. NPM package imports: import { Product, ProductCard } from '@company/product-service'
6
+ * 2. Module federation: Remote consumption of components
7
+ * 3. Standalone application: Internal imports for the full app
8
+ */
9
+ export { default as createClient } from '@smrt/client';
10
+ export { manifest } from '@smrt/manifest';
11
+ export { default as createMCPServer } from '@smrt/mcp';
12
+ export { default as setupRoutes } from '@smrt/routes';
13
+ export type * from '@smrt/types';
14
+ export * from './collections/index';
15
+ export * from './components/index';
16
+ export * from './generated/index';
17
+ export * from './models/index';
18
+ export * from './stores/index';
19
+ export * from './utils/index';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AACtD,mBAAmB,aAAa,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,mBAAmB,CAAC;AAElC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,gBAAgB,CAAC;AAE/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Mock SMRT Client - Temporary implementation for demo purposes
3
+ *
4
+ * This replaces the missing @smrt/client virtual module with a working implementation
5
+ * that demonstrates the intended functionality.
6
+ */
7
+ export interface ProductData {
8
+ id?: string;
9
+ name: string;
10
+ description?: string;
11
+ category: string;
12
+ manufacturer?: string;
13
+ model?: string;
14
+ price?: number;
15
+ inStock?: boolean;
16
+ specifications?: Record<string, any>;
17
+ tags?: string[];
18
+ createdAt?: string;
19
+ updatedAt?: string;
20
+ }
21
+ export interface ApiResponse<T> {
22
+ data: T;
23
+ success: boolean;
24
+ message?: string;
25
+ }
26
+ declare class MockApiClient {
27
+ products: {
28
+ list(): Promise<ApiResponse<ProductData[]>>;
29
+ get(id: string): Promise<ApiResponse<ProductData>>;
30
+ create(productData: Partial<ProductData>): Promise<ApiResponse<ProductData>>;
31
+ update(id: string, updates: Partial<ProductData>): Promise<ApiResponse<ProductData>>;
32
+ delete(id: string): Promise<ApiResponse<void>>;
33
+ };
34
+ categories: {
35
+ list(): Promise<ApiResponse<string[]>>;
36
+ };
37
+ }
38
+ export declare function createClient(baseUrl?: string): MockApiClient;
39
+ export default createClient;
40
+ //# sourceMappingURL=mock-smrt-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-smrt-client.d.ts","sourceRoot":"","sources":["../../../src/lib/mock-smrt-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkCD,cAAM,aAAa;IACjB,QAAQ;gBACQ,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;gBAWnC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;4BAgBzC,OAAO,CAAC,WAAW,CAAC,GAChC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;mBA4B9B,MAAM,WACD,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;mBAuBnB,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;MAgBpD;IAEF,UAAU;gBACM,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;MAa5C;CACH;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAY,GAAG,aAAa,CAE/D;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,129 @@
1
+ const mockProducts = [
2
+ {
3
+ id: "1",
4
+ name: "Demo Product",
5
+ description: "A sample product for demonstration",
6
+ category: "Electronics",
7
+ manufacturer: "Demo Corp",
8
+ model: "DM-100",
9
+ price: 29.99,
10
+ inStock: true,
11
+ specifications: { weight: "1.2kg", color: "Black" },
12
+ tags: ["demo", "sample"],
13
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
14
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
15
+ },
16
+ {
17
+ id: "2",
18
+ name: "Budget Item",
19
+ description: "An affordable option",
20
+ category: "Accessories",
21
+ manufacturer: "Budget Inc",
22
+ model: "BI-200",
23
+ price: 19.99,
24
+ inStock: false,
25
+ specifications: { size: "small" },
26
+ tags: ["budget", "affordable"],
27
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
28
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
29
+ }
30
+ ];
31
+ class MockApiClient {
32
+ products = {
33
+ async list() {
34
+ await new Promise((resolve) => setTimeout(resolve, 500));
35
+ return {
36
+ data: [...mockProducts],
37
+ success: true,
38
+ message: "Products retrieved successfully"
39
+ };
40
+ },
41
+ async get(id) {
42
+ await new Promise((resolve) => setTimeout(resolve, 200));
43
+ const product = mockProducts.find((p) => p.id === id);
44
+ if (!product) {
45
+ throw new Error(`Product with id ${id} not found`);
46
+ }
47
+ return {
48
+ data: product,
49
+ success: true,
50
+ message: "Product retrieved successfully"
51
+ };
52
+ },
53
+ async create(productData) {
54
+ await new Promise((resolve) => setTimeout(resolve, 300));
55
+ const newProduct = {
56
+ id: (mockProducts.length + 1).toString(),
57
+ name: productData.name || "Untitled Product",
58
+ description: productData.description || "",
59
+ category: productData.category || "Uncategorized",
60
+ manufacturer: productData.manufacturer || "",
61
+ model: productData.model || "",
62
+ price: productData.price || 0,
63
+ inStock: productData.inStock ?? true,
64
+ specifications: productData.specifications || {},
65
+ tags: productData.tags || [],
66
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
67
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
68
+ };
69
+ mockProducts.push(newProduct);
70
+ return {
71
+ data: newProduct,
72
+ success: true,
73
+ message: "Product created successfully"
74
+ };
75
+ },
76
+ async update(id, updates) {
77
+ await new Promise((resolve) => setTimeout(resolve, 300));
78
+ const index = mockProducts.findIndex((p) => p.id === id);
79
+ if (index === -1) {
80
+ throw new Error(`Product with id ${id} not found`);
81
+ }
82
+ const updatedProduct = {
83
+ ...mockProducts[index],
84
+ ...updates,
85
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
86
+ };
87
+ mockProducts[index] = updatedProduct;
88
+ return {
89
+ data: updatedProduct,
90
+ success: true,
91
+ message: "Product updated successfully"
92
+ };
93
+ },
94
+ async delete(id) {
95
+ await new Promise((resolve) => setTimeout(resolve, 200));
96
+ const index = mockProducts.findIndex((p) => p.id === id);
97
+ if (index === -1) {
98
+ throw new Error(`Product with id ${id} not found`);
99
+ }
100
+ mockProducts.splice(index, 1);
101
+ return {
102
+ data: void 0,
103
+ success: true,
104
+ message: "Product deleted successfully"
105
+ };
106
+ }
107
+ };
108
+ categories = {
109
+ async list() {
110
+ await new Promise((resolve) => setTimeout(resolve, 200));
111
+ const categories = Array.from(
112
+ new Set(mockProducts.map((p) => p.category).filter(Boolean))
113
+ );
114
+ return {
115
+ data: categories,
116
+ success: true,
117
+ message: "Categories retrieved successfully"
118
+ };
119
+ }
120
+ };
121
+ }
122
+ function createClient(baseUrl = "/api/v1") {
123
+ return new MockApiClient();
124
+ }
125
+ export {
126
+ createClient,
127
+ createClient as default
128
+ };
129
+ //# sourceMappingURL=mock-smrt-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-smrt-client.js","sources":["../../../src/lib/mock-smrt-client.ts"],"sourcesContent":["/**\n * Mock SMRT Client - Temporary implementation for demo purposes\n *\n * This replaces the missing @smrt/client virtual module with a working implementation\n * that demonstrates the intended functionality.\n */\n\nexport interface ProductData {\n id?: string;\n name: string;\n description?: string;\n category: string;\n manufacturer?: string;\n model?: string;\n price?: number;\n inStock?: boolean;\n specifications?: Record<string, any>;\n tags?: string[];\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface ApiResponse<T> {\n data: T;\n success: boolean;\n message?: string;\n}\n\n// Mock data store\nconst mockProducts: ProductData[] = [\n {\n id: '1',\n name: 'Demo Product',\n description: 'A sample product for demonstration',\n category: 'Electronics',\n manufacturer: 'Demo Corp',\n model: 'DM-100',\n price: 29.99,\n inStock: true,\n specifications: { weight: '1.2kg', color: 'Black' },\n tags: ['demo', 'sample'],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n },\n {\n id: '2',\n name: 'Budget Item',\n description: 'An affordable option',\n category: 'Accessories',\n manufacturer: 'Budget Inc',\n model: 'BI-200',\n price: 19.99,\n inStock: false,\n specifications: { size: 'small' },\n tags: ['budget', 'affordable'],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n },\n];\n\nclass MockApiClient {\n products = {\n async list(): Promise<ApiResponse<ProductData[]>> {\n // Simulate API delay\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n return {\n data: [...mockProducts],\n success: true,\n message: 'Products retrieved successfully',\n };\n },\n\n async get(id: string): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const product = mockProducts.find((p) => p.id === id);\n if (!product) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n return {\n data: product,\n success: true,\n message: 'Product retrieved successfully',\n };\n },\n\n async create(\n productData: Partial<ProductData>,\n ): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const newProduct: ProductData = {\n id: (mockProducts.length + 1).toString(),\n name: productData.name || 'Untitled Product',\n description: productData.description || '',\n category: productData.category || 'Uncategorized',\n manufacturer: productData.manufacturer || '',\n model: productData.model || '',\n price: productData.price || 0,\n inStock: productData.inStock ?? true,\n specifications: productData.specifications || {},\n tags: productData.tags || [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n mockProducts.push(newProduct);\n\n return {\n data: newProduct,\n success: true,\n message: 'Product created successfully',\n };\n },\n\n async update(\n id: string,\n updates: Partial<ProductData>,\n ): Promise<ApiResponse<ProductData>> {\n await new Promise((resolve) => setTimeout(resolve, 300));\n\n const index = mockProducts.findIndex((p) => p.id === id);\n if (index === -1) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n const updatedProduct = {\n ...mockProducts[index],\n ...updates,\n updatedAt: new Date().toISOString(),\n };\n\n mockProducts[index] = updatedProduct;\n\n return {\n data: updatedProduct,\n success: true,\n message: 'Product updated successfully',\n };\n },\n\n async delete(id: string): Promise<ApiResponse<void>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const index = mockProducts.findIndex((p) => p.id === id);\n if (index === -1) {\n throw new Error(`Product with id ${id} not found`);\n }\n\n mockProducts.splice(index, 1);\n\n return {\n data: undefined as any,\n success: true,\n message: 'Product deleted successfully',\n };\n },\n };\n\n categories = {\n async list(): Promise<ApiResponse<string[]>> {\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n const categories = Array.from(\n new Set(mockProducts.map((p) => p.category).filter(Boolean)),\n );\n\n return {\n data: categories,\n success: true,\n message: 'Categories retrieved successfully',\n };\n },\n };\n}\n\nexport function createClient(baseUrl = '/api/v1'): MockApiClient {\n return new MockApiClient();\n}\n\nexport default createClient;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ /**
3
+ * Options for Category initialization
4
+ */
5
+ export interface CategoryOptions extends SmrtObjectOptions {
6
+ tenantId?: string | null;
7
+ name?: string;
8
+ description?: string;
9
+ parentId?: string;
10
+ level?: number;
11
+ productCount?: number;
12
+ active?: boolean;
13
+ }
14
+ /**
15
+ * Product knowledge base category for organizing product information.
16
+ *
17
+ * Optional tenancy — categories may be shared globally (tenantId=null) or
18
+ * scoped to a tenant. Hierarchical via parentId.
19
+ */
20
+ export declare class Category extends SmrtObject {
21
+ /**
22
+ * Tenant ID for multi-tenant isolation.
23
+ * Nullable to support both tenant-scoped and global categories.
24
+ */
25
+ tenantId: string | null;
26
+ name: string;
27
+ description: string;
28
+ parentId?: string;
29
+ level: number;
30
+ productCount: number;
31
+ active: boolean;
32
+ constructor(options?: CategoryOptions);
33
+ getProducts(): Promise<never[]>;
34
+ getSubcategories(): Promise<never[]>;
35
+ updateProductCount(): Promise<void>;
36
+ static getRootCategories(): Promise<Category[]>;
37
+ }
38
+ //# sourceMappingURL=Category.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Category.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Category.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAkBa,QAAS,SAAQ,UAAU;IACtC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,IAAI,SAAM;IACV,WAAW,SAAM;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,SAAK;IACV,YAAY,SAAK;IACjB,MAAM,UAAQ;gBAEF,OAAO,GAAE,eAAoB;IAWnC,WAAW;IAKX,gBAAgB;IAKhB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;WAK5B,iBAAiB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CAItD"}
@@ -0,0 +1,22 @@
1
+ import { Meta } from '@happyvertical/smrt-core';
2
+ import { Product, ProductOptions } from './Product';
3
+ import { MaterialKind, ProductType } from './types';
4
+ export interface MaterialOptions extends ProductOptions {
5
+ materialKind?: MaterialKind;
6
+ uom?: string;
7
+ costPerUnit?: number;
8
+ }
9
+ export declare class Material extends Product {
10
+ productType: ProductType;
11
+ /** Classification — fabric, trim, thread, label, packaging, component, ... */
12
+ materialKind: Meta<MaterialKind>;
13
+ /** Unit of measure — "yards", "meters", "each", "grams", "lbs". */
14
+ uom: Meta<string>;
15
+ /**
16
+ * Latest known cost per UOM. For sophisticated cost rollup, manufacturing
17
+ * may pull from purchase-order history instead of this denormalised value.
18
+ */
19
+ costPerUnit: Meta<number>;
20
+ constructor(options?: MaterialOptions);
21
+ }
22
+ //# sourceMappingURL=Material.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Material.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Material.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD,qBAuBa,QAAS,SAAQ,OAAO;IAC1B,WAAW,EAAE,WAAW,CAAwB;IAUzD,8EAA8E;IAC9E,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAe;IAE/C,mEAAmE;IACnE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAU;IAE3B;;;OAGG;IACH,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAO;gBAEpB,OAAO,GAAE,eAAoB;CAQ1C"}
@@ -0,0 +1,57 @@
1
+ import { Asset } from '@happyvertical/smrt-assets';
2
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
3
+ import { ProductType } from './types';
4
+ /**
5
+ * Options for Product initialization
6
+ */
7
+ export interface ProductOptions extends SmrtObjectOptions {
8
+ tenantId?: string | null;
9
+ productType?: ProductType;
10
+ name?: string;
11
+ description?: string;
12
+ category?: string;
13
+ manufacturer?: string;
14
+ model?: string;
15
+ price?: number;
16
+ inStock?: boolean;
17
+ specifications?: Record<string, any>;
18
+ tags?: string[];
19
+ }
20
+ /**
21
+ * Product information for knowledge base queries.
22
+ *
23
+ * STI base — subclasses (e.g. `Material` upstream, `Style`/`Makeup` in the
24
+ * apparel template) share this table via the `_meta_type` discriminator
25
+ * and `productType` field. Optional tenancy lets the same package serve
26
+ * shared global catalogs OR per-merchant catalogs.
27
+ */
28
+ export declare class Product extends SmrtObject {
29
+ /**
30
+ * Tenant ID for multi-tenant isolation.
31
+ * Nullable to support both tenant-scoped and global catalogs.
32
+ */
33
+ tenantId: string | null;
34
+ /**
35
+ * STI discriminator. Subclasses override this with their type.
36
+ */
37
+ productType: ProductType;
38
+ name: string;
39
+ description: string;
40
+ category: string;
41
+ manufacturer: string;
42
+ model: string;
43
+ price: number;
44
+ inStock: boolean;
45
+ specifications: Record<string, any>;
46
+ tags: string[];
47
+ constructor(options?: ProductOptions);
48
+ getSpecification(key: string): Promise<any>;
49
+ updateSpecification(key: string, value: any): Promise<void>;
50
+ private getProductAssetCollection;
51
+ getAssets(relationship?: string): Promise<Asset[]>;
52
+ addAsset(asset: Asset, relationship?: string, sortOrder?: number): Promise<void>;
53
+ removeAsset(assetId: string, relationship?: string): Promise<void>;
54
+ static searchByText(_query: string): Promise<Product[]>;
55
+ static findByManufacturer(_manufacturer: string): Promise<Product[]>;
56
+ }
57
+ //# sourceMappingURL=Product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Product.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAMxD,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBA2Ba,OAAQ,SAAQ,UAAU;IACrC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IACH,WAAW,EAAE,WAAW,CAAuB;IAE/C,IAAI,SAAM;IACV,WAAW,SAAM;IACjB,QAAQ,SAAM;IACd,YAAY,SAAM;IAClB,KAAK,SAAM;IACX,KAAK,SAAK;IACV,OAAO,UAAQ;IACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,IAAI,EAAE,MAAM,EAAE,CAAM;gBAER,OAAO,GAAE,cAAmB;IAwBlC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI3C,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;YAInD,yBAAyB;IAMjC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuClD,QAAQ,CACZ,KAAK,EAAE,KAAK,EACZ,YAAY,SAAe,EAC3B,SAAS,SAAI,GACZ,OAAO,CAAC,IAAI,CAAC;IAoBV,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAkB3D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;WAKhD,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAI3E"}
@@ -0,0 +1,17 @@
1
+ import { SmrtObjectOptions, SmrtObject } from '@happyvertical/smrt-core';
2
+ export interface ProductAssetOptions extends SmrtObjectOptions {
3
+ tenantId?: string | null;
4
+ productId?: string;
5
+ assetId?: string;
6
+ relationship?: string;
7
+ sortOrder?: number;
8
+ }
9
+ export declare class ProductAsset extends SmrtObject {
10
+ tenantId: string | null;
11
+ productId: string;
12
+ assetId: string;
13
+ relationship: string;
14
+ sortOrder: number;
15
+ constructor(options?: ProductAssetOptions);
16
+ }
17
+ //# sourceMappingURL=ProductAsset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductAsset.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/ProductAsset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAIL,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAYa,YAAa,SAAQ,UAAU;IAE1C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG/B,SAAS,SAAM;IAGf,OAAO,SAAM;IAGb,YAAY,SAAgB;IAG5B,SAAS,SAAK;gBAEF,OAAO,GAAE,mBAAwB;CAQ9C"}
@@ -0,0 +1,51 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ /**
3
+ * Options accepted by the {@link ProductVariant} constructor.
4
+ */
5
+ export interface ProductVariantOptions extends SmrtObjectOptions {
6
+ tenantId?: string | null;
7
+ productId?: string;
8
+ axisName?: string;
9
+ label?: string;
10
+ allowedValues?: string[] | string;
11
+ sortOrder?: number;
12
+ }
13
+ export declare class ProductVariant extends SmrtObject {
14
+ /** Tenant scope. `null` means the variant axis is global. */
15
+ tenantId: string | null;
16
+ /**
17
+ * Plain string reference to the {@link Product} this axis belongs to
18
+ * (or any Product STI subtype — `Material`, or vertical subtypes
19
+ * defined in templates such as the apparel `Style` / `Makeup`).
20
+ */
21
+ productId: string;
22
+ /**
23
+ * The name of the axis (`'size'`, `'color'`, `'finish'`, `'voltage'`,
24
+ * `'packSize'`, …). Free-form — the framework treats this as opaque.
25
+ */
26
+ axisName: string;
27
+ /** Optional human-friendly label for forms / UIs (defaults to `axisName`). */
28
+ label: string;
29
+ /**
30
+ * Allowed values for this axis, stored as a JSON string. Named
31
+ * `allowedValues` (rather than `values`) because the unprefixed name
32
+ * collides with the SQL `VALUES` keyword on several engines. Use
33
+ * {@link getValues} / {@link setValues} to round-trip the array form.
34
+ */
35
+ allowedValues: string;
36
+ /** Sort order for displaying multiple axes in a consistent column order. */
37
+ sortOrder: number;
38
+ constructor(options?: ProductVariantOptions);
39
+ /**
40
+ * Parse and return the {@link allowedValues} JSON array. Returns an
41
+ * empty array if the stored value cannot be parsed as an array.
42
+ */
43
+ getValues(): string[];
44
+ /**
45
+ * Serialize the allowed values back into the stored
46
+ * {@link allowedValues} string. Accepts either an array or a
47
+ * pre-serialized JSON string.
48
+ */
49
+ setValues(value: string[] | string): void;
50
+ }
51
+ //# sourceMappingURL=ProductVariant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductVariant.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/ProductVariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAQa,cAAe,SAAQ,UAAU;IAC5C,6DAA6D;IAE7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;OAIG;IAEH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;OAGG;IAEH,QAAQ,EAAE,MAAM,CAAM;IAEtB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAM;IAEnB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAQ;IAE7B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAK;gBAEV,OAAO,GAAE,qBAA0B;IAmB/C;;;OAGG;IACH,SAAS,IAAI,MAAM,EAAE;IAUrB;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI;CAO1C"}
@@ -0,0 +1,79 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ /**
3
+ * Options accepted by the {@link Sku} constructor.
4
+ */
5
+ export interface SkuOptions extends SmrtObjectOptions {
6
+ tenantId?: string | null;
7
+ productId?: string;
8
+ code?: string;
9
+ barcode?: string;
10
+ name?: string;
11
+ attributes?: Record<string, unknown> | string;
12
+ weightGrams?: number;
13
+ parentSkuId?: string;
14
+ active?: boolean;
15
+ }
16
+ export declare class Sku extends SmrtObject {
17
+ /** Tenant scope. `null` means the SKU is a global record. */
18
+ tenantId: string | null;
19
+ /**
20
+ * Plain string reference to a row in this package — typically a
21
+ * `Product` id (or any of its STI subtypes, such as `Material`
22
+ * upstream or `Style` / `Makeup` in the apparel template).
23
+ *
24
+ * Marked required so the framework rejects a save with `productId`
25
+ * empty or unset. Without this, downstream consumers (inventory
26
+ * stock motion, manufacturing BOM resolution) would have to filter
27
+ * out orphan SKU rows that point at no product — a sharp footgun
28
+ * the moment one slips through. The `@field({ required: true })`
29
+ * decorator also surfaces the constraint in generated REST/MCP
30
+ * schemas.
31
+ */
32
+ productId: string;
33
+ /**
34
+ * Stable, human-meaningful identifier such as a UPC, internal SKU
35
+ * code, or part number. Together with `tenantId` this is the natural
36
+ * key (`conflictColumns: ['code', 'tenant_id']`), so re-saving an
37
+ * identical row is an upsert rather than a UNIQUE violation.
38
+ */
39
+ code: string;
40
+ /** Optional scannable barcode (EAN/UPC/Code-128/etc.). */
41
+ barcode: string;
42
+ /** Display name for UIs. Optional — `code` is enough for machines. */
43
+ name: string;
44
+ /**
45
+ * Axis values for this SKU expressed as JSON, e.g. `{ size: 'M' }`,
46
+ * `{ finish: 'walnut' }`, or `{ voltage: '230V' }`.
47
+ *
48
+ * The persisted column type is text; use {@link getAttributes} and
49
+ * {@link setAttributes} to round-trip parsed values without worrying
50
+ * about parse errors.
51
+ */
52
+ attributes: string;
53
+ /** Optional physical weight in grams for shipping / cost calculations. */
54
+ weightGrams: number;
55
+ /**
56
+ * Optional self-reference for bundles / kits — set to the id of the
57
+ * "parent" SKU that this SKU is a component of.
58
+ */
59
+ parentSkuId: string;
60
+ /**
61
+ * Soft-active flag. Inactive SKUs stay queryable for history but
62
+ * should not be offered for sale or production planning.
63
+ */
64
+ active: boolean;
65
+ constructor(options?: SkuOptions);
66
+ /**
67
+ * Parse and return the {@link attributes} JSON. Returns an empty
68
+ * object if the stored value is invalid JSON so callers don't have
69
+ * to wrap every read in a try/catch.
70
+ */
71
+ getAttributes(): Record<string, unknown>;
72
+ /**
73
+ * Serialize axis values back into the stored {@link attributes}
74
+ * string. Accepts either an object (will be `JSON.stringify`'d) or a
75
+ * raw JSON string that the caller has already serialized.
76
+ */
77
+ setAttributes(value: Record<string, unknown> | string): void;
78
+ }
79
+ //# sourceMappingURL=Sku.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sku.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/Sku.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAQa,GAAI,SAAQ,UAAU;IACjC,6DAA6D;IAE7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;;;;;;;;;OAYG;IAEH,SAAS,EAAE,MAAM,CAAM;IAEvB;;;;;OAKG;IAEH,IAAI,EAAE,MAAM,CAAM;IAElB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAM;IAErB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAM;IAElB;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,CAAQ;IAE1B,0EAA0E;IAE1E,WAAW,EAAE,MAAM,CAAO;IAE1B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAM;IAEzB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAQ;gBAEX,OAAO,GAAE,UAAe;IAgBpC;;;;OAIG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYxC;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;CAO7D"}
@@ -0,0 +1,15 @@
1
+ export type { CategoryOptions } from './Category';
2
+ export { Category } from './Category';
3
+ export type { MaterialOptions } from './Material';
4
+ export { Material } from './Material';
5
+ export type { ProductOptions } from './Product';
6
+ export { Product } from './Product';
7
+ export type { ProductAssetOptions } from './ProductAsset';
8
+ export { ProductAsset } from './ProductAsset';
9
+ export type { ProductVariantOptions } from './ProductVariant';
10
+ export { ProductVariant } from './ProductVariant';
11
+ export type { SkuOptions } from './Sku';
12
+ export { Sku } from './Sku';
13
+ export type { MaterialKind } from './types';
14
+ export { ProductType } from './types';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/models/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,4BAA4B,CAAC;AAEpC,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}