@happyvertical/smrt-products 0.37.2 → 0.37.3

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 (58) hide show
  1. package/dist/lib/chunks/ProductAssetCollection-TbeaVxzc.js +38 -0
  2. package/dist/lib/chunks/ProductAssetCollection-TbeaVxzc.js.map +1 -0
  3. package/dist/lib/chunks/ProductCollection-8QlfZ9ez.js +28 -0
  4. package/dist/lib/chunks/ProductCollection-8QlfZ9ez.js.map +1 -0
  5. package/dist/lib/chunks/Sku-B0w2dfHb.js +467 -0
  6. package/dist/lib/chunks/Sku-B0w2dfHb.js.map +1 -0
  7. package/dist/lib/chunks/__smrt-register__-DAo7IPPx.js +22 -0
  8. package/dist/lib/chunks/__smrt-register__-DAo7IPPx.js.map +1 -0
  9. package/dist/lib/chunks/collections-6PSqhUmZ.js +162 -0
  10. package/dist/lib/chunks/collections-6PSqhUmZ.js.map +1 -0
  11. package/dist/lib/chunks/components-C6VpNVcg.js +398 -0
  12. package/dist/lib/chunks/components-C6VpNVcg.js.map +1 -0
  13. package/dist/lib/chunks/decorate-C25O10I-.js +9 -0
  14. package/dist/lib/chunks/generated-CM3rwUcw.js +7 -0
  15. package/dist/lib/chunks/generated-CM3rwUcw.js.map +1 -0
  16. package/dist/lib/chunks/models-JPB-sld2.js +2 -0
  17. package/dist/lib/chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  18. package/dist/lib/chunks/stores-CB0SI1c5.js +119 -0
  19. package/dist/lib/chunks/stores-CB0SI1c5.js.map +1 -0
  20. package/dist/lib/chunks/utils-BgTqlQoH.js +30 -0
  21. package/dist/lib/chunks/utils-BgTqlQoH.js.map +1 -0
  22. package/dist/lib/collections.js +4 -12
  23. package/dist/lib/components.js +2 -6
  24. package/dist/lib/generated.js +2 -5
  25. package/dist/lib/index.js +191 -216
  26. package/dist/lib/index.js.map +1 -1
  27. package/dist/lib/lib/i18n.js +82 -91
  28. package/dist/lib/lib/i18n.js.map +1 -1
  29. package/dist/lib/lib/mock-smrt-client.js +116 -129
  30. package/dist/lib/lib/mock-smrt-client.js.map +1 -1
  31. package/dist/lib/lib/stores/product-store.svelte.d.ts.map +1 -1
  32. package/dist/lib/manifest.json +2 -2
  33. package/dist/lib/models.js +3 -12
  34. package/dist/lib/smrt-knowledge.json +14 -14
  35. package/dist/lib/smrt-products.css +1 -0
  36. package/dist/lib/stores.js +2 -6
  37. package/dist/lib/utils.js +2 -27
  38. package/package.json +23 -23
  39. package/dist/lib/chunks/ProductAssetCollection-B93HdSlX.js +0 -64
  40. package/dist/lib/chunks/ProductAssetCollection-B93HdSlX.js.map +0 -1
  41. package/dist/lib/chunks/ProductForm-CU0UvKEF.js +0 -430
  42. package/dist/lib/chunks/ProductForm-CU0UvKEF.js.map +0 -1
  43. package/dist/lib/chunks/Sku-sl6xf1PR.js +0 -494
  44. package/dist/lib/chunks/Sku-sl6xf1PR.js.map +0 -1
  45. package/dist/lib/chunks/SkuCollection-f_a3k93c.js +0 -160
  46. package/dist/lib/chunks/SkuCollection-f_a3k93c.js.map +0 -1
  47. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js +0 -5
  48. package/dist/lib/chunks/__smrt-register__-BIgFaVKn.js.map +0 -1
  49. package/dist/lib/chunks/index-i3-ci1FB.js +0 -6
  50. package/dist/lib/chunks/index-i3-ci1FB.js.map +0 -1
  51. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js +0 -132
  52. package/dist/lib/chunks/product-store.svelte-Dayd5n3W.js.map +0 -1
  53. package/dist/lib/collections.js.map +0 -1
  54. package/dist/lib/components.js.map +0 -1
  55. package/dist/lib/generated.js.map +0 -1
  56. package/dist/lib/models.js.map +0 -1
  57. package/dist/lib/stores.js.map +0 -1
  58. package/dist/lib/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/client.ts","../../src/mcp.ts","../../src/server.ts","../../src/index.ts"],"sourcesContent":["/**\n * SMRT Template Client\n *\n * Demonstrates auto-generated TypeScript client from SMRT objects.\n * No manual client code needed - everything is generated from @smrt() decorated classes.\n */\n\nimport createClient from '@happyvertical/smrt-virt-client'; // Virtual module from Vite plugin\nimport type { CategoryData, ProductData } from '@happyvertical/smrt-virt-types'; // Virtual module from Vite plugin\n\nasync function demonstrateClient() {\n console.log('šŸ”Œ Creating auto-generated API client...');\n\n // Create client pointing to local server\n const api = createClient('http://localhost:3000/api/v1');\n\n try {\n console.log('\\nšŸ“¦ Testing Product operations:');\n\n // Create a product\n const newProduct: Partial<ProductData> = {\n name: 'Demo Product',\n description: 'A product created by the auto-generated client',\n price: 29.99,\n inStock: true,\n tags: ['demo', 'auto-generated'],\n };\n\n console.log('Creating product:', newProduct);\n const createdProduct = await api.products.create(newProduct);\n console.log('āœ… Created:', createdProduct);\n\n // List products\n console.log('\\nšŸ“‹ Listing all products:');\n const products = await api.products.list();\n console.log('Products:', products);\n\n // Get specific product\n if (createdProduct?.id) {\n console.log(`\\nšŸ” Getting product ${createdProduct.id}:`);\n const product = await api.products.get(createdProduct.id);\n console.log('Product:', product);\n\n // Update product\n console.log('\\nāœļø Updating product:');\n const updatedProduct = await api.products.update(createdProduct.id, {\n price: 39.99,\n description: 'Updated description',\n });\n console.log('Updated:', updatedProduct);\n }\n\n console.log('\\nšŸ·ļø Testing Category operations:');\n\n // Create a category\n const newCategory: Partial<CategoryData> = {\n name: 'Demo Category',\n description: 'A category created by the auto-generated client',\n active: true,\n };\n\n console.log('Creating category:', newCategory);\n const createdCategory = await api.categories.create(newCategory);\n console.log('āœ… Created:', createdCategory);\n\n // List categories\n console.log('\\nšŸ“‹ Listing all categories:');\n const categories = await api.categories.list();\n console.log('Categories:', categories);\n } catch (error) {\n console.error('āŒ Client error:', error);\n }\n}\n\n// Run demonstration if called directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n demonstrateClient().catch(console.error);\n}\n\nexport { demonstrateClient };\n","/**\n * MCP Server Generator Script for @have/products\n *\n * This script generates a complete MCP server with stdio transport\n * from the Product and Category SMRT objects.\n *\n * Run with: npm run generate:mcp\n */\n\nimport { MCPGenerator } from '@happyvertical/smrt-core/generators/mcp';\n\n/**\n * Generate MCP server for products package\n */\nasync function generateMCPServer() {\n console.log('šŸ¤– Generating MCP Server for @have/products...\\n');\n\n // Create generator instance\n const generator = new MCPGenerator(\n {\n name: 'products-mcp-server',\n version: '1.0.0',\n description: 'MCP server exposing Product and Category SMRT objects',\n },\n {\n // Database and AI context will be configured via environment variables in generated server\n // DATABASE_URL - for database connection\n // OPENAI_API_KEY or ANTHROPIC_API_KEY - for AI client\n },\n );\n\n // Generate tools to preview what will be available\n const tools = await generator.generateTools();\n console.log(`šŸ“ Discovered ${tools.length} tools from SMRT objects:`);\n tools.forEach((tool) => {\n console.log(` - ${tool.name}: ${tool.description}`);\n });\n console.log();\n\n // Generate complete MCP server with stdio transport\n await generator.generateServer({\n outputPath: 'dist/mcp-server.js',\n serverName: 'products-mcp',\n debug: false, // Set to true for debug logging\n generateClaudeConfigFile: true,\n generateReadme: true,\n });\n\n console.log('\\nāœ… MCP Server generation complete!');\n console.log('\\nšŸ“š Next steps:');\n console.log(' 1. Build the server: npm run build');\n console.log(\n ' 2. Add to Claude Desktop config (see dist/claude-config.example.json)',\n );\n console.log(' 3. Restart Claude Desktop');\n console.log(' 4. Use the tools in Claude Code!\\n');\n}\n\n// Run if executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n generateMCPServer().catch((error) => {\n console.error('āŒ MCP server generation failed:', error);\n process.exit(1);\n });\n}\n\nexport { generateMCPServer };\n","/**\n * SMRT Template Server\n *\n * Demonstrates auto-generated REST API from SMRT objects.\n * No manual route definitions needed - everything is generated from @smrt() decorated classes.\n */\n\nimport { startRestServer } from '@happyvertical/smrt-core';\nimport { Category } from './lib/models/Category';\nimport { Product } from './lib/models/Product';\n\n/**\n * Reference auth stub (#1540). Generated routes are FAIL-CLOSED: without an\n * `authMiddleware` (or `@smrt({ api: { public: true } })` on the model) every\n * route returns 401. This stub demonstrates the contract — replace it with your\n * real auth (verify a session cookie / bearer token, attach the principal).\n *\n * Returning the (optionally augmented) request allows the call; returning a\n * `Response` rejects it.\n */\nfunction demoAuthMiddleware(_objectName: string, _action: string) {\n return async (req: Request): Promise<Request | Response> => {\n const token = req.headers.get('authorization');\n if (!token) {\n return new Response(\n JSON.stringify({ error: 'Authentication required' }),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n },\n );\n }\n // TODO: verify `token` and attach the resolved principal to the request.\n return req;\n };\n}\n\nasync function startServer() {\n console.log('šŸš€ Starting SMRT Template Server...');\n\n // Start server with registered SMRT objects. Secure defaults (#1540): bind to\n // loopback, an explicit CORS origin allowlist (never `*`), and a fail-closed\n // auth middleware.\n const shutdown = await startRestServer(\n [Product, Category], // SMRT objects to generate API for\n {}, // context\n {\n port: 3000,\n hostname: '127.0.0.1',\n basePath: '/api/v1',\n enableCors: true,\n allowedOrigins: ['http://localhost:3000'],\n authMiddleware: demoAuthMiddleware,\n },\n );\n\n console.log('āœ… Server ready!');\n console.log('šŸ“” REST API: http://localhost:3000/api/v1');\n console.log('šŸ“š Endpoints:');\n console.log(' GET /api/v1/products - List products');\n console.log(' POST /api/v1/products - Create product');\n console.log(' GET /api/v1/products/:id - Get product');\n console.log(' PUT /api/v1/products/:id - Update product');\n console.log(' GET /api/v1/categories - List categories');\n console.log(' POST /api/v1/categories - Create category');\n\n console.log('\\nšŸ’” Try these endpoints (auth required — send a token):');\n console.log(\n ' curl http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl http://localhost:3000/api/v1/categories -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl -X POST http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\" -H \"Content-Type: application/json\" -d \\'{\"name\":\"Test Product\",\"price\":29.99}\\'',\n );\n\n return { shutdown };\n}\n\n// Start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startServer().catch(console.error);\n}\n\nexport { startServer };\n","/**\n * SMRT Template: Triple-Purpose Export\n *\n * This is the main entry point when this template is used as an NPM library.\n * It re-exports everything from the lib directory for easy consumption.\n *\n * Usage examples:\n *\n * // Import models\n * import { Product, Category } from '@happyvertical/core-template';\n *\n * // Import UI components\n * import { ProductCard, ProductForm } from '@happyvertical/core-template/components';\n *\n * // Import stores\n * import { ProductStoreClass } from '@happyvertical/core-template/stores';\n */\n\n// Self-register this package's manifest before any @smrt() decorator fires\n// downstream. Must come first so the side effect runs ahead of the class\n// module loads below. See __smrt-register__.ts for issue #1132 context.\nimport './__smrt-register__.js';\n\nexport { demonstrateClient } from './client';\n// Re-export everything from the lib directory\nexport * from './lib/index';\nexport { generateMCPServer } from './mcp';\n// Legacy exports for backward compatibility\nexport { startServer } from './server';\n\n/**\n * Start all services for demonstration (legacy function)\n */\nexport async function startAll() {\n const { startServer } = await import('./server');\n const { generateMCPServer } = await import('./mcp');\n\n console.log('šŸš€ Starting SMRT Template - Full Demo\\n');\n\n // Start REST API server\n console.log('1ļøāƒ£ Starting REST API...');\n const server = await startServer();\n\n // Start MCP server\n console.log('\\n2ļøāƒ£ Starting MCP Server...');\n const mcp = await generateMCPServer();\n\n console.log('\\n✨ All services running!');\n console.log('\\nšŸŽÆ What was auto-generated:');\n console.log(' • REST endpoints for Product and Category');\n console.log(' • TypeScript client with full type safety');\n console.log(' • MCP tools for AI model integration');\n console.log(' • OpenAPI/Swagger documentation');\n console.log(' • Live reloading during development');\n\n console.log('\\nšŸ“ Next steps:');\n console.log(' • Modify src/lib/models/ to add new fields');\n console.log(' • Add new @smrt() classes to auto-generate more APIs');\n console.log(' • Run bun run dev to see live updates');\n\n return { server, mcp };\n}\n\n// Auto-start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startAll().catch(console.error);\n}\n"],"names":["startServer","generateMCPServer","server","mcp"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/client.ts","../../src/mcp.ts","../../src/server.ts","../../src/index.ts"],"sourcesContent":["/**\n * SMRT Template Client\n *\n * Demonstrates auto-generated TypeScript client from SMRT objects.\n * No manual client code needed - everything is generated from @smrt() decorated classes.\n */\n\nimport createClient from '@happyvertical/smrt-virt-client'; // Virtual module from Vite plugin\nimport type { CategoryData, ProductData } from '@happyvertical/smrt-virt-types'; // Virtual module from Vite plugin\n\nasync function demonstrateClient() {\n console.log('šŸ”Œ Creating auto-generated API client...');\n\n // Create client pointing to local server\n const api = createClient('http://localhost:3000/api/v1');\n\n try {\n console.log('\\nšŸ“¦ Testing Product operations:');\n\n // Create a product\n const newProduct: Partial<ProductData> = {\n name: 'Demo Product',\n description: 'A product created by the auto-generated client',\n price: 29.99,\n inStock: true,\n tags: ['demo', 'auto-generated'],\n };\n\n console.log('Creating product:', newProduct);\n const createdProduct = await api.products.create(newProduct);\n console.log('āœ… Created:', createdProduct);\n\n // List products\n console.log('\\nšŸ“‹ Listing all products:');\n const products = await api.products.list();\n console.log('Products:', products);\n\n // Get specific product\n if (createdProduct?.id) {\n console.log(`\\nšŸ” Getting product ${createdProduct.id}:`);\n const product = await api.products.get(createdProduct.id);\n console.log('Product:', product);\n\n // Update product\n console.log('\\nāœļø Updating product:');\n const updatedProduct = await api.products.update(createdProduct.id, {\n price: 39.99,\n description: 'Updated description',\n });\n console.log('Updated:', updatedProduct);\n }\n\n console.log('\\nšŸ·ļø Testing Category operations:');\n\n // Create a category\n const newCategory: Partial<CategoryData> = {\n name: 'Demo Category',\n description: 'A category created by the auto-generated client',\n active: true,\n };\n\n console.log('Creating category:', newCategory);\n const createdCategory = await api.categories.create(newCategory);\n console.log('āœ… Created:', createdCategory);\n\n // List categories\n console.log('\\nšŸ“‹ Listing all categories:');\n const categories = await api.categories.list();\n console.log('Categories:', categories);\n } catch (error) {\n console.error('āŒ Client error:', error);\n }\n}\n\n// Run demonstration if called directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n demonstrateClient().catch(console.error);\n}\n\nexport { demonstrateClient };\n","/**\n * MCP Server Generator Script for @have/products\n *\n * This script generates a complete MCP server with stdio transport\n * from the Product and Category SMRT objects.\n *\n * Run with: npm run generate:mcp\n */\n\nimport { MCPGenerator } from '@happyvertical/smrt-core/generators/mcp';\n\n/**\n * Generate MCP server for products package\n */\nasync function generateMCPServer() {\n console.log('šŸ¤– Generating MCP Server for @have/products...\\n');\n\n // Create generator instance\n const generator = new MCPGenerator(\n {\n name: 'products-mcp-server',\n version: '1.0.0',\n description: 'MCP server exposing Product and Category SMRT objects',\n },\n {\n // Database and AI context will be configured via environment variables in generated server\n // DATABASE_URL - for database connection\n // OPENAI_API_KEY or ANTHROPIC_API_KEY - for AI client\n },\n );\n\n // Generate tools to preview what will be available\n const tools = await generator.generateTools();\n console.log(`šŸ“ Discovered ${tools.length} tools from SMRT objects:`);\n tools.forEach((tool) => {\n console.log(` - ${tool.name}: ${tool.description}`);\n });\n console.log();\n\n // Generate complete MCP server with stdio transport\n await generator.generateServer({\n outputPath: 'dist/mcp-server.js',\n serverName: 'products-mcp',\n debug: false, // Set to true for debug logging\n generateClaudeConfigFile: true,\n generateReadme: true,\n });\n\n console.log('\\nāœ… MCP Server generation complete!');\n console.log('\\nšŸ“š Next steps:');\n console.log(' 1. Build the server: npm run build');\n console.log(\n ' 2. Add to Claude Desktop config (see dist/claude-config.example.json)',\n );\n console.log(' 3. Restart Claude Desktop');\n console.log(' 4. Use the tools in Claude Code!\\n');\n}\n\n// Run if executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n generateMCPServer().catch((error) => {\n console.error('āŒ MCP server generation failed:', error);\n process.exit(1);\n });\n}\n\nexport { generateMCPServer };\n","/**\n * SMRT Template Server\n *\n * Demonstrates auto-generated REST API from SMRT objects.\n * No manual route definitions needed - everything is generated from @smrt() decorated classes.\n */\n\nimport { startRestServer } from '@happyvertical/smrt-core';\nimport { Category } from './lib/models/Category';\nimport { Product } from './lib/models/Product';\n\n/**\n * Reference auth stub (#1540). Generated routes are FAIL-CLOSED: without an\n * `authMiddleware` (or `@smrt({ api: { public: true } })` on the model) every\n * route returns 401. This stub demonstrates the contract — replace it with your\n * real auth (verify a session cookie / bearer token, attach the principal).\n *\n * Returning the (optionally augmented) request allows the call; returning a\n * `Response` rejects it.\n */\nfunction demoAuthMiddleware(_objectName: string, _action: string) {\n return async (req: Request): Promise<Request | Response> => {\n const token = req.headers.get('authorization');\n if (!token) {\n return new Response(\n JSON.stringify({ error: 'Authentication required' }),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n },\n );\n }\n // TODO: verify `token` and attach the resolved principal to the request.\n return req;\n };\n}\n\nasync function startServer() {\n console.log('šŸš€ Starting SMRT Template Server...');\n\n // Start server with registered SMRT objects. Secure defaults (#1540): bind to\n // loopback, an explicit CORS origin allowlist (never `*`), and a fail-closed\n // auth middleware.\n const shutdown = await startRestServer(\n [Product, Category], // SMRT objects to generate API for\n {}, // context\n {\n port: 3000,\n hostname: '127.0.0.1',\n basePath: '/api/v1',\n enableCors: true,\n allowedOrigins: ['http://localhost:3000'],\n authMiddleware: demoAuthMiddleware,\n },\n );\n\n console.log('āœ… Server ready!');\n console.log('šŸ“” REST API: http://localhost:3000/api/v1');\n console.log('šŸ“š Endpoints:');\n console.log(' GET /api/v1/products - List products');\n console.log(' POST /api/v1/products - Create product');\n console.log(' GET /api/v1/products/:id - Get product');\n console.log(' PUT /api/v1/products/:id - Update product');\n console.log(' GET /api/v1/categories - List categories');\n console.log(' POST /api/v1/categories - Create category');\n\n console.log('\\nšŸ’” Try these endpoints (auth required — send a token):');\n console.log(\n ' curl http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl http://localhost:3000/api/v1/categories -H \"Authorization: Bearer <token>\"',\n );\n console.log(\n ' curl -X POST http://localhost:3000/api/v1/products -H \"Authorization: Bearer <token>\" -H \"Content-Type: application/json\" -d \\'{\"name\":\"Test Product\",\"price\":29.99}\\'',\n );\n\n return { shutdown };\n}\n\n// Start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startServer().catch(console.error);\n}\n\nexport { startServer };\n","/**\n * SMRT Template: Triple-Purpose Export\n *\n * This is the main entry point when this template is used as an NPM library.\n * It re-exports everything from the lib directory for easy consumption.\n *\n * Usage examples:\n *\n * // Import models\n * import { Product, Category } from '@happyvertical/core-template';\n *\n * // Import UI components\n * import { ProductCard, ProductForm } from '@happyvertical/core-template/components';\n *\n * // Import stores\n * import { ProductStoreClass } from '@happyvertical/core-template/stores';\n */\n\n// Self-register this package's manifest before any @smrt() decorator fires\n// downstream. Must come first so the side effect runs ahead of the class\n// module loads below. See __smrt-register__.ts for issue #1132 context.\nimport './__smrt-register__.js';\n\nexport { demonstrateClient } from './client';\n// Re-export everything from the lib directory\nexport * from './lib/index';\nexport { generateMCPServer } from './mcp';\n// Legacy exports for backward compatibility\nexport { startServer } from './server';\n\n/**\n * Start all services for demonstration (legacy function)\n */\nexport async function startAll() {\n const { startServer } = await import('./server');\n const { generateMCPServer } = await import('./mcp');\n\n console.log('šŸš€ Starting SMRT Template - Full Demo\\n');\n\n // Start REST API server\n console.log('1ļøāƒ£ Starting REST API...');\n const server = await startServer();\n\n // Start MCP server\n console.log('\\n2ļøāƒ£ Starting MCP Server...');\n const mcp = await generateMCPServer();\n\n console.log('\\n✨ All services running!');\n console.log('\\nšŸŽÆ What was auto-generated:');\n console.log(' • REST endpoints for Product and Category');\n console.log(' • TypeScript client with full type safety');\n console.log(' • MCP tools for AI model integration');\n console.log(' • OpenAPI/Swagger documentation');\n console.log(' • Live reloading during development');\n\n console.log('\\nšŸ“ Next steps:');\n console.log(' • Modify src/lib/models/ to add new fields');\n console.log(' • Add new @smrt() classes to auto-generate more APIs');\n console.log(' • Run bun run dev to see live updates');\n\n return { server, mcp };\n}\n\n// Auto-start if running directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n startAll().catch(console.error);\n}\n"],"mappings":"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"}
@@ -1,93 +1,84 @@
1
1
  import { defineMessages } from "@happyvertical/smrt-ui/i18n";
2
- const M = defineMessages({
3
- // App
4
- "products.app.categories_coming_soon": "Category management coming soon...",
5
- "products.app.analytics_coming_soon": "Analytics dashboard coming soon...",
6
- // AppLayout
7
- "products.app_layout.service_title": "Product Service",
8
- "products.app_layout.footer_copyright": "2024 SMRT Product Service - Auto-generated with ā¤ļø",
9
- "products.app_layout.api_docs": "API Docs",
10
- "products.app_layout.mcp_tools": "MCP Tools",
11
- // DemoPage
12
- "products.demo_page.title": "SMRT Framework Demo",
13
- "products.demo_page.subtitle": "Define Once, Consume Everywhere - Progressive Customization",
14
- "products.demo_page.custom_components_tab": "Custom Components",
15
- "products.demo_page.auto_generated_heading": "Auto-Generated UI from SMRT Object",
16
- "products.demo_page.auto_generated_description": "This form is automatically generated from the Product class definition.\n The field types, labels, and validation rules are inferred from the TypeScript schema.",
17
- "products.demo_page.generated_form_heading": "Generated Form",
18
- "products.demo_page.auto_form_title": "Auto-Generated Product Form",
19
- "products.demo_page.generated_display_heading": "Generated Display",
20
- "products.demo_page.custom_components_heading": "Custom Components with SMRT Integration",
21
- "products.demo_page.custom_components_description": "These are hand-crafted components that still leverage the SMRT data structure\n but provide custom UI/UX for specific business requirements.",
22
- "products.demo_page.custom_form_heading": "Custom Form",
23
- "products.demo_page.custom_display_heading": "Custom Display",
24
- "products.demo_page.progressive_heading": "Progressive Customization",
25
- "products.demo_page.progressive_description": "Start with auto-generated components, then progressively customize as needed.\n Both approaches use the same underlying SMRT Product model.",
26
- "products.demo_page.feature_zero_config": "āœ… Zero configuration",
27
- "products.demo_page.feature_instant_ui": "āœ… Instant UI from schema",
28
- "products.demo_page.feature_type_safe": "āœ… Type-safe by default",
29
- "products.demo_page.feature_prototyping": "⚔ Perfect for prototyping",
30
- "products.demo_page.custom_components_label": "šŸŽØ Custom Components",
31
- "products.demo_page.feature_tailored_ux": "āœ… Tailored UX",
32
- "products.demo_page.feature_business_workflows": "āœ… Business-specific workflows",
33
- "products.demo_page.feature_advanced_interactions": "āœ… Advanced interactions",
34
- "products.demo_page.simple_auto_form_title": "Auto Form",
35
- "products.demo_page.benefits_heading": "SMRT Framework Benefits",
36
- "products.demo_page.benefit_define_once_label": "Define Once:",
37
- "products.demo_page.benefit_define_once_text": "Product class with @smrt decorator",
38
- "products.demo_page.benefit_auto_generate_label": "Auto-Generate:",
39
- "products.demo_page.benefit_auto_generate_text": "REST APIs, MCP tools, TypeScript clients, default UI",
40
- "products.demo_page.benefit_progressive_label": "Progressive Enhancement:",
41
- "products.demo_page.benefit_progressive_text": "Start with defaults, customize as needed",
42
- "products.demo_page.benefit_type_safety_label": "Type Safety:",
43
- "products.demo_page.benefit_type_safety_text": "End-to-end TypeScript integration",
44
- "products.demo_page.benefit_multiple_consumption_label": "Multiple Consumption:",
45
- "products.demo_page.benefit_multiple_consumption_text": "Library, federation, standalone",
46
- // ProductsPage
47
- "products.products_page.description": "Manage your product catalog with auto-generated CRUD operations, \n real-time updates, and AI-powered tools via MCP.",
48
- "products.products_page.auto_generated_text": "REST API endpoints automatically created from @smrt() decorated Product class",
49
- "products.products_page.ai_ready_heading": "šŸ¤– AI Ready",
50
- "products.products_page.ai_ready_text": "MCP tools available for Claude and other AI models to interact with products",
51
- "products.products_page.federatable_text": "Components can be consumed by other applications via module federation",
52
- "products.products_page.library_text": "Install as NPM package: npm install @have/smrt-template",
53
- // ProductForm
54
- "products.product_form.name_label": "Product Name *",
55
- "products.product_form.name_placeholder": "Enter product name",
56
- "products.product_form.description_placeholder": "Product description (optional)",
57
- "products.product_form.category_placeholder": "Product category",
58
- "products.product_form.tags_placeholder": "tag1, tag2, tag3",
59
- "products.product_form.tags_hint": "Separate tags with commas",
60
- "products.product_form.in_stock_label": "In Stock",
61
- // TestComponent
62
- "products.test_component.title": "Test Component",
63
- // AutoForm
64
- "products.auto_form.subtitle": "Auto-generated from SMRT Product model",
65
- "products.auto_form.debug_summary": "Form Data (Debug)",
66
- // FieldRenderer
67
- "products.field_renderer.array_hint": "Enter values separated by commas",
68
- "products.field_renderer.object_hint": "Enter valid JSON",
69
- // CategoryManager
70
- "products.category_manager.title": "Category Manager",
71
- "products.category_manager.subtitle": "Manage product categories",
72
- "products.category_manager.coming_soon": "Category management feature coming soon...",
73
- "products.category_manager.will_include": "This will include:",
74
- "products.category_manager.create_edit": "Create and edit categories",
75
- "products.category_manager.organize_hierarchy": "Organize category hierarchy",
76
- "products.category_manager.manage_permissions": "Manage category permissions",
77
- "products.category_manager.analytics": "Category analytics",
78
- // ProductCatalog
79
- "products.product_catalog.title": "Product Catalog",
80
- "products.product_catalog.in_stock": "in stock",
81
- "products.product_catalog.total_value": "Total value:",
82
- "products.product_catalog.search_placeholder": "Search products...",
83
- "products.product_catalog.all_categories": "All Categories",
84
- "products.product_catalog.add_product": "Add Product",
85
- "products.product_catalog.loading": "Loading products...",
86
- "products.product_catalog.empty": "No products yet. Create your first product to get started!",
87
- "products.product_catalog.create_first": "Create First Product",
88
- "products.product_catalog.no_match": "No products match your search criteria."
2
+ //#region src/lib/i18n.ts
3
+ var M = defineMessages({
4
+ "products.app.categories_coming_soon": "Category management coming soon...",
5
+ "products.app.analytics_coming_soon": "Analytics dashboard coming soon...",
6
+ "products.app_layout.service_title": "Product Service",
7
+ "products.app_layout.footer_copyright": "2024 SMRT Product Service - Auto-generated with ā¤ļø",
8
+ "products.app_layout.api_docs": "API Docs",
9
+ "products.app_layout.mcp_tools": "MCP Tools",
10
+ "products.demo_page.title": "SMRT Framework Demo",
11
+ "products.demo_page.subtitle": "Define Once, Consume Everywhere - Progressive Customization",
12
+ "products.demo_page.custom_components_tab": "Custom Components",
13
+ "products.demo_page.auto_generated_heading": "Auto-Generated UI from SMRT Object",
14
+ "products.demo_page.auto_generated_description": "This form is automatically generated from the Product class definition.\n The field types, labels, and validation rules are inferred from the TypeScript schema.",
15
+ "products.demo_page.generated_form_heading": "Generated Form",
16
+ "products.demo_page.auto_form_title": "Auto-Generated Product Form",
17
+ "products.demo_page.generated_display_heading": "Generated Display",
18
+ "products.demo_page.custom_components_heading": "Custom Components with SMRT Integration",
19
+ "products.demo_page.custom_components_description": "These are hand-crafted components that still leverage the SMRT data structure\n but provide custom UI/UX for specific business requirements.",
20
+ "products.demo_page.custom_form_heading": "Custom Form",
21
+ "products.demo_page.custom_display_heading": "Custom Display",
22
+ "products.demo_page.progressive_heading": "Progressive Customization",
23
+ "products.demo_page.progressive_description": "Start with auto-generated components, then progressively customize as needed.\n Both approaches use the same underlying SMRT Product model.",
24
+ "products.demo_page.feature_zero_config": "āœ… Zero configuration",
25
+ "products.demo_page.feature_instant_ui": "āœ… Instant UI from schema",
26
+ "products.demo_page.feature_type_safe": "āœ… Type-safe by default",
27
+ "products.demo_page.feature_prototyping": "⚔ Perfect for prototyping",
28
+ "products.demo_page.custom_components_label": "šŸŽØ Custom Components",
29
+ "products.demo_page.feature_tailored_ux": "āœ… Tailored UX",
30
+ "products.demo_page.feature_business_workflows": "āœ… Business-specific workflows",
31
+ "products.demo_page.feature_advanced_interactions": "āœ… Advanced interactions",
32
+ "products.demo_page.simple_auto_form_title": "Auto Form",
33
+ "products.demo_page.benefits_heading": "SMRT Framework Benefits",
34
+ "products.demo_page.benefit_define_once_label": "Define Once:",
35
+ "products.demo_page.benefit_define_once_text": "Product class with @smrt decorator",
36
+ "products.demo_page.benefit_auto_generate_label": "Auto-Generate:",
37
+ "products.demo_page.benefit_auto_generate_text": "REST APIs, MCP tools, TypeScript clients, default UI",
38
+ "products.demo_page.benefit_progressive_label": "Progressive Enhancement:",
39
+ "products.demo_page.benefit_progressive_text": "Start with defaults, customize as needed",
40
+ "products.demo_page.benefit_type_safety_label": "Type Safety:",
41
+ "products.demo_page.benefit_type_safety_text": "End-to-end TypeScript integration",
42
+ "products.demo_page.benefit_multiple_consumption_label": "Multiple Consumption:",
43
+ "products.demo_page.benefit_multiple_consumption_text": "Library, federation, standalone",
44
+ "products.products_page.description": "Manage your product catalog with auto-generated CRUD operations, \n real-time updates, and AI-powered tools via MCP.",
45
+ "products.products_page.auto_generated_text": "REST API endpoints automatically created from @smrt() decorated Product class",
46
+ "products.products_page.ai_ready_heading": "šŸ¤– AI Ready",
47
+ "products.products_page.ai_ready_text": "MCP tools available for Claude and other AI models to interact with products",
48
+ "products.products_page.federatable_text": "Components can be consumed by other applications via module federation",
49
+ "products.products_page.library_text": "Install as NPM package: npm install @have/smrt-template",
50
+ "products.product_form.name_label": "Product Name *",
51
+ "products.product_form.name_placeholder": "Enter product name",
52
+ "products.product_form.description_placeholder": "Product description (optional)",
53
+ "products.product_form.category_placeholder": "Product category",
54
+ "products.product_form.tags_placeholder": "tag1, tag2, tag3",
55
+ "products.product_form.tags_hint": "Separate tags with commas",
56
+ "products.product_form.in_stock_label": "In Stock",
57
+ "products.test_component.title": "Test Component",
58
+ "products.auto_form.subtitle": "Auto-generated from SMRT Product model",
59
+ "products.auto_form.debug_summary": "Form Data (Debug)",
60
+ "products.field_renderer.array_hint": "Enter values separated by commas",
61
+ "products.field_renderer.object_hint": "Enter valid JSON",
62
+ "products.category_manager.title": "Category Manager",
63
+ "products.category_manager.subtitle": "Manage product categories",
64
+ "products.category_manager.coming_soon": "Category management feature coming soon...",
65
+ "products.category_manager.will_include": "This will include:",
66
+ "products.category_manager.create_edit": "Create and edit categories",
67
+ "products.category_manager.organize_hierarchy": "Organize category hierarchy",
68
+ "products.category_manager.manage_permissions": "Manage category permissions",
69
+ "products.category_manager.analytics": "Category analytics",
70
+ "products.product_catalog.title": "Product Catalog",
71
+ "products.product_catalog.in_stock": "in stock",
72
+ "products.product_catalog.total_value": "Total value:",
73
+ "products.product_catalog.search_placeholder": "Search products...",
74
+ "products.product_catalog.all_categories": "All Categories",
75
+ "products.product_catalog.add_product": "Add Product",
76
+ "products.product_catalog.loading": "Loading products...",
77
+ "products.product_catalog.empty": "No products yet. Create your first product to get started!",
78
+ "products.product_catalog.create_first": "Create First Product",
79
+ "products.product_catalog.no_match": "No products match your search criteria."
89
80
  });
90
- export {
91
- M
92
- };
93
- //# sourceMappingURL=i18n.js.map
81
+ //#endregion
82
+ export { M };
83
+
84
+ //# sourceMappingURL=i18n.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sources":["../../../src/lib/i18n.ts"],"sourcesContent":["import { defineMessages } from '@happyvertical/smrt-ui/i18n';\n\nexport const M = defineMessages({\n // App\n 'products.app.categories_coming_soon': 'Category management coming soon...',\n 'products.app.analytics_coming_soon': 'Analytics dashboard coming soon...',\n\n // AppLayout\n 'products.app_layout.service_title': 'Product Service',\n 'products.app_layout.footer_copyright':\n '2024 SMRT Product Service - Auto-generated with ā¤ļø',\n 'products.app_layout.api_docs': 'API Docs',\n 'products.app_layout.mcp_tools': 'MCP Tools',\n\n // DemoPage\n 'products.demo_page.title': 'SMRT Framework Demo',\n 'products.demo_page.subtitle':\n 'Define Once, Consume Everywhere - Progressive Customization',\n 'products.demo_page.custom_components_tab': 'Custom Components',\n 'products.demo_page.auto_generated_heading':\n 'Auto-Generated UI from SMRT Object',\n 'products.demo_page.auto_generated_description':\n 'This form is automatically generated from the Product class definition.\\n The field types, labels, and validation rules are inferred from the TypeScript schema.',\n 'products.demo_page.generated_form_heading': 'Generated Form',\n 'products.demo_page.auto_form_title': 'Auto-Generated Product Form',\n 'products.demo_page.generated_display_heading': 'Generated Display',\n 'products.demo_page.custom_components_heading':\n 'Custom Components with SMRT Integration',\n 'products.demo_page.custom_components_description':\n 'These are hand-crafted components that still leverage the SMRT data structure\\n but provide custom UI/UX for specific business requirements.',\n 'products.demo_page.custom_form_heading': 'Custom Form',\n 'products.demo_page.custom_display_heading': 'Custom Display',\n 'products.demo_page.progressive_heading': 'Progressive Customization',\n 'products.demo_page.progressive_description':\n 'Start with auto-generated components, then progressively customize as needed.\\n Both approaches use the same underlying SMRT Product model.',\n 'products.demo_page.feature_zero_config': 'āœ… Zero configuration',\n 'products.demo_page.feature_instant_ui': 'āœ… Instant UI from schema',\n 'products.demo_page.feature_type_safe': 'āœ… Type-safe by default',\n 'products.demo_page.feature_prototyping': '⚔ Perfect for prototyping',\n 'products.demo_page.custom_components_label': 'šŸŽØ Custom Components',\n 'products.demo_page.feature_tailored_ux': 'āœ… Tailored UX',\n 'products.demo_page.feature_business_workflows':\n 'āœ… Business-specific workflows',\n 'products.demo_page.feature_advanced_interactions':\n 'āœ… Advanced interactions',\n 'products.demo_page.simple_auto_form_title': 'Auto Form',\n 'products.demo_page.benefits_heading': 'SMRT Framework Benefits',\n 'products.demo_page.benefit_define_once_label': 'Define Once:',\n 'products.demo_page.benefit_define_once_text':\n 'Product class with @smrt decorator',\n 'products.demo_page.benefit_auto_generate_label': 'Auto-Generate:',\n 'products.demo_page.benefit_auto_generate_text':\n 'REST APIs, MCP tools, TypeScript clients, default UI',\n 'products.demo_page.benefit_progressive_label': 'Progressive Enhancement:',\n 'products.demo_page.benefit_progressive_text':\n 'Start with defaults, customize as needed',\n 'products.demo_page.benefit_type_safety_label': 'Type Safety:',\n 'products.demo_page.benefit_type_safety_text':\n 'End-to-end TypeScript integration',\n 'products.demo_page.benefit_multiple_consumption_label':\n 'Multiple Consumption:',\n 'products.demo_page.benefit_multiple_consumption_text':\n 'Library, federation, standalone',\n\n // ProductsPage\n 'products.products_page.description':\n 'Manage your product catalog with auto-generated CRUD operations, \\n real-time updates, and AI-powered tools via MCP.',\n 'products.products_page.auto_generated_text':\n 'REST API endpoints automatically created from @smrt() decorated Product class',\n 'products.products_page.ai_ready_heading': 'šŸ¤– AI Ready',\n 'products.products_page.ai_ready_text':\n 'MCP tools available for Claude and other AI models to interact with products',\n 'products.products_page.federatable_text':\n 'Components can be consumed by other applications via module federation',\n 'products.products_page.library_text':\n 'Install as NPM package: npm install @have/smrt-template',\n\n // ProductForm\n 'products.product_form.name_label': 'Product Name *',\n 'products.product_form.name_placeholder': 'Enter product name',\n 'products.product_form.description_placeholder':\n 'Product description (optional)',\n 'products.product_form.category_placeholder': 'Product category',\n 'products.product_form.tags_placeholder': 'tag1, tag2, tag3',\n 'products.product_form.tags_hint': 'Separate tags with commas',\n 'products.product_form.in_stock_label': 'In Stock',\n\n // TestComponent\n 'products.test_component.title': 'Test Component',\n\n // AutoForm\n 'products.auto_form.subtitle': 'Auto-generated from SMRT Product model',\n 'products.auto_form.debug_summary': 'Form Data (Debug)',\n\n // FieldRenderer\n 'products.field_renderer.array_hint': 'Enter values separated by commas',\n 'products.field_renderer.object_hint': 'Enter valid JSON',\n\n // CategoryManager\n 'products.category_manager.title': 'Category Manager',\n 'products.category_manager.subtitle': 'Manage product categories',\n 'products.category_manager.coming_soon':\n 'Category management feature coming soon...',\n 'products.category_manager.will_include': 'This will include:',\n 'products.category_manager.create_edit': 'Create and edit categories',\n 'products.category_manager.organize_hierarchy': 'Organize category hierarchy',\n 'products.category_manager.manage_permissions': 'Manage category permissions',\n 'products.category_manager.analytics': 'Category analytics',\n\n // ProductCatalog\n 'products.product_catalog.title': 'Product Catalog',\n 'products.product_catalog.in_stock': 'in stock',\n 'products.product_catalog.total_value': 'Total value:',\n 'products.product_catalog.search_placeholder': 'Search products...',\n 'products.product_catalog.all_categories': 'All Categories',\n 'products.product_catalog.add_product': 'Add Product',\n 'products.product_catalog.loading': 'Loading products...',\n 'products.product_catalog.empty':\n 'No products yet. Create your first product to get started!',\n 'products.product_catalog.create_first': 'Create First Product',\n 'products.product_catalog.no_match':\n 'No products match your search criteria.',\n});\n"],"names":[],"mappings":";AAEO,MAAM,IAAI,eAAe;AAAA;AAAA,EAE9B,uCAAuC;AAAA,EACvC,sCAAsC;AAAA;AAAA,EAGtC,qCAAqC;AAAA,EACrC,wCACE;AAAA,EACF,gCAAgC;AAAA,EAChC,iCAAiC;AAAA;AAAA,EAGjC,4BAA4B;AAAA,EAC5B,+BACE;AAAA,EACF,4CAA4C;AAAA,EAC5C,6CACE;AAAA,EACF,iDACE;AAAA,EACF,6CAA6C;AAAA,EAC7C,sCAAsC;AAAA,EACtC,gDAAgD;AAAA,EAChD,gDACE;AAAA,EACF,oDACE;AAAA,EACF,0CAA0C;AAAA,EAC1C,6CAA6C;AAAA,EAC7C,0CAA0C;AAAA,EAC1C,8CACE;AAAA,EACF,0CAA0C;AAAA,EAC1C,yCAAyC;AAAA,EACzC,wCAAwC;AAAA,EACxC,0CAA0C;AAAA,EAC1C,8CAA8C;AAAA,EAC9C,0CAA0C;AAAA,EAC1C,iDACE;AAAA,EACF,oDACE;AAAA,EACF,6CAA6C;AAAA,EAC7C,uCAAuC;AAAA,EACvC,gDAAgD;AAAA,EAChD,+CACE;AAAA,EACF,kDAAkD;AAAA,EAClD,iDACE;AAAA,EACF,gDAAgD;AAAA,EAChD,+CACE;AAAA,EACF,gDAAgD;AAAA,EAChD,+CACE;AAAA,EACF,yDACE;AAAA,EACF,wDACE;AAAA;AAAA,EAGF,sCACE;AAAA,EACF,8CACE;AAAA,EACF,2CAA2C;AAAA,EAC3C,wCACE;AAAA,EACF,2CACE;AAAA,EACF,uCACE;AAAA;AAAA,EAGF,oCAAoC;AAAA,EACpC,0CAA0C;AAAA,EAC1C,iDACE;AAAA,EACF,8CAA8C;AAAA,EAC9C,0CAA0C;AAAA,EAC1C,mCAAmC;AAAA,EACnC,wCAAwC;AAAA;AAAA,EAGxC,iCAAiC;AAAA;AAAA,EAGjC,+BAA+B;AAAA,EAC/B,oCAAoC;AAAA;AAAA,EAGpC,sCAAsC;AAAA,EACtC,uCAAuC;AAAA;AAAA,EAGvC,mCAAmC;AAAA,EACnC,sCAAsC;AAAA,EACtC,yCACE;AAAA,EACF,0CAA0C;AAAA,EAC1C,yCAAyC;AAAA,EACzC,gDAAgD;AAAA,EAChD,gDAAgD;AAAA,EAChD,uCAAuC;AAAA;AAAA,EAGvC,kCAAkC;AAAA,EAClC,qCAAqC;AAAA,EACrC,wCAAwC;AAAA,EACxC,+CAA+C;AAAA,EAC/C,2CAA2C;AAAA,EAC3C,wCAAwC;AAAA,EACxC,oCAAoC;AAAA,EACpC,kCACE;AAAA,EACF,yCAAyC;AAAA,EACzC,qCACE;AACJ,CAAC;"}
1
+ {"version":3,"file":"i18n.js","names":[],"sources":["../../../src/lib/i18n.ts"],"sourcesContent":["import { defineMessages } from '@happyvertical/smrt-ui/i18n';\n\nexport const M = defineMessages({\n // App\n 'products.app.categories_coming_soon': 'Category management coming soon...',\n 'products.app.analytics_coming_soon': 'Analytics dashboard coming soon...',\n\n // AppLayout\n 'products.app_layout.service_title': 'Product Service',\n 'products.app_layout.footer_copyright':\n '2024 SMRT Product Service - Auto-generated with ā¤ļø',\n 'products.app_layout.api_docs': 'API Docs',\n 'products.app_layout.mcp_tools': 'MCP Tools',\n\n // DemoPage\n 'products.demo_page.title': 'SMRT Framework Demo',\n 'products.demo_page.subtitle':\n 'Define Once, Consume Everywhere - Progressive Customization',\n 'products.demo_page.custom_components_tab': 'Custom Components',\n 'products.demo_page.auto_generated_heading':\n 'Auto-Generated UI from SMRT Object',\n 'products.demo_page.auto_generated_description':\n 'This form is automatically generated from the Product class definition.\\n The field types, labels, and validation rules are inferred from the TypeScript schema.',\n 'products.demo_page.generated_form_heading': 'Generated Form',\n 'products.demo_page.auto_form_title': 'Auto-Generated Product Form',\n 'products.demo_page.generated_display_heading': 'Generated Display',\n 'products.demo_page.custom_components_heading':\n 'Custom Components with SMRT Integration',\n 'products.demo_page.custom_components_description':\n 'These are hand-crafted components that still leverage the SMRT data structure\\n but provide custom UI/UX for specific business requirements.',\n 'products.demo_page.custom_form_heading': 'Custom Form',\n 'products.demo_page.custom_display_heading': 'Custom Display',\n 'products.demo_page.progressive_heading': 'Progressive Customization',\n 'products.demo_page.progressive_description':\n 'Start with auto-generated components, then progressively customize as needed.\\n Both approaches use the same underlying SMRT Product model.',\n 'products.demo_page.feature_zero_config': 'āœ… Zero configuration',\n 'products.demo_page.feature_instant_ui': 'āœ… Instant UI from schema',\n 'products.demo_page.feature_type_safe': 'āœ… Type-safe by default',\n 'products.demo_page.feature_prototyping': '⚔ Perfect for prototyping',\n 'products.demo_page.custom_components_label': 'šŸŽØ Custom Components',\n 'products.demo_page.feature_tailored_ux': 'āœ… Tailored UX',\n 'products.demo_page.feature_business_workflows':\n 'āœ… Business-specific workflows',\n 'products.demo_page.feature_advanced_interactions':\n 'āœ… Advanced interactions',\n 'products.demo_page.simple_auto_form_title': 'Auto Form',\n 'products.demo_page.benefits_heading': 'SMRT Framework Benefits',\n 'products.demo_page.benefit_define_once_label': 'Define Once:',\n 'products.demo_page.benefit_define_once_text':\n 'Product class with @smrt decorator',\n 'products.demo_page.benefit_auto_generate_label': 'Auto-Generate:',\n 'products.demo_page.benefit_auto_generate_text':\n 'REST APIs, MCP tools, TypeScript clients, default UI',\n 'products.demo_page.benefit_progressive_label': 'Progressive Enhancement:',\n 'products.demo_page.benefit_progressive_text':\n 'Start with defaults, customize as needed',\n 'products.demo_page.benefit_type_safety_label': 'Type Safety:',\n 'products.demo_page.benefit_type_safety_text':\n 'End-to-end TypeScript integration',\n 'products.demo_page.benefit_multiple_consumption_label':\n 'Multiple Consumption:',\n 'products.demo_page.benefit_multiple_consumption_text':\n 'Library, federation, standalone',\n\n // ProductsPage\n 'products.products_page.description':\n 'Manage your product catalog with auto-generated CRUD operations, \\n real-time updates, and AI-powered tools via MCP.',\n 'products.products_page.auto_generated_text':\n 'REST API endpoints automatically created from @smrt() decorated Product class',\n 'products.products_page.ai_ready_heading': 'šŸ¤– AI Ready',\n 'products.products_page.ai_ready_text':\n 'MCP tools available for Claude and other AI models to interact with products',\n 'products.products_page.federatable_text':\n 'Components can be consumed by other applications via module federation',\n 'products.products_page.library_text':\n 'Install as NPM package: npm install @have/smrt-template',\n\n // ProductForm\n 'products.product_form.name_label': 'Product Name *',\n 'products.product_form.name_placeholder': 'Enter product name',\n 'products.product_form.description_placeholder':\n 'Product description (optional)',\n 'products.product_form.category_placeholder': 'Product category',\n 'products.product_form.tags_placeholder': 'tag1, tag2, tag3',\n 'products.product_form.tags_hint': 'Separate tags with commas',\n 'products.product_form.in_stock_label': 'In Stock',\n\n // TestComponent\n 'products.test_component.title': 'Test Component',\n\n // AutoForm\n 'products.auto_form.subtitle': 'Auto-generated from SMRT Product model',\n 'products.auto_form.debug_summary': 'Form Data (Debug)',\n\n // FieldRenderer\n 'products.field_renderer.array_hint': 'Enter values separated by commas',\n 'products.field_renderer.object_hint': 'Enter valid JSON',\n\n // CategoryManager\n 'products.category_manager.title': 'Category Manager',\n 'products.category_manager.subtitle': 'Manage product categories',\n 'products.category_manager.coming_soon':\n 'Category management feature coming soon...',\n 'products.category_manager.will_include': 'This will include:',\n 'products.category_manager.create_edit': 'Create and edit categories',\n 'products.category_manager.organize_hierarchy': 'Organize category hierarchy',\n 'products.category_manager.manage_permissions': 'Manage category permissions',\n 'products.category_manager.analytics': 'Category analytics',\n\n // ProductCatalog\n 'products.product_catalog.title': 'Product Catalog',\n 'products.product_catalog.in_stock': 'in stock',\n 'products.product_catalog.total_value': 'Total value:',\n 'products.product_catalog.search_placeholder': 'Search products...',\n 'products.product_catalog.all_categories': 'All Categories',\n 'products.product_catalog.add_product': 'Add Product',\n 'products.product_catalog.loading': 'Loading products...',\n 'products.product_catalog.empty':\n 'No products yet. Create your first product to get started!',\n 'products.product_catalog.create_first': 'Create First Product',\n 'products.product_catalog.no_match':\n 'No products match your search criteria.',\n});\n"],"mappings":";;AAEA,IAAa,IAAI,eAAe;CAE9B,uCAAuC;CACvC,sCAAsC;CAGtC,qCAAqC;CACrC,wCACE;CACF,gCAAgC;CAChC,iCAAiC;CAGjC,4BAA4B;CAC5B,+BACE;CACF,4CAA4C;CAC5C,6CACE;CACF,iDACE;CACF,6CAA6C;CAC7C,sCAAsC;CACtC,gDAAgD;CAChD,gDACE;CACF,oDACE;CACF,0CAA0C;CAC1C,6CAA6C;CAC7C,0CAA0C;CAC1C,8CACE;CACF,0CAA0C;CAC1C,yCAAyC;CACzC,wCAAwC;CACxC,0CAA0C;CAC1C,8CAA8C;CAC9C,0CAA0C;CAC1C,iDACE;CACF,oDACE;CACF,6CAA6C;CAC7C,uCAAuC;CACvC,gDAAgD;CAChD,+CACE;CACF,kDAAkD;CAClD,iDACE;CACF,gDAAgD;CAChD,+CACE;CACF,gDAAgD;CAChD,+CACE;CACF,yDACE;CACF,wDACE;CAGF,sCACE;CACF,8CACE;CACF,2CAA2C;CAC3C,wCACE;CACF,2CACE;CACF,uCACE;CAGF,oCAAoC;CACpC,0CAA0C;CAC1C,iDACE;CACF,8CAA8C;CAC9C,0CAA0C;CAC1C,mCAAmC;CACnC,wCAAwC;CAGxC,iCAAiC;CAGjC,+BAA+B;CAC/B,oCAAoC;CAGpC,sCAAsC;CACtC,uCAAuC;CAGvC,mCAAmC;CACnC,sCAAsC;CACtC,yCACE;CACF,0CAA0C;CAC1C,yCAAyC;CACzC,gDAAgD;CAChD,gDAAgD;CAChD,uCAAuC;CAGvC,kCAAkC;CAClC,qCAAqC;CACrC,wCAAwC;CACxC,+CAA+C;CAC/C,2CAA2C;CAC3C,wCAAwC;CACxC,oCAAoC;CACpC,kCACE;CACF,yCAAyC;CACzC,qCACE;AACJ,CAAC"}
@@ -1,131 +1,118 @@
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
- created_at: (/* @__PURE__ */ new Date()).toISOString(),
14
- updated_at: (/* @__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
- created_at: (/* @__PURE__ */ new Date()).toISOString(),
28
- updated_at: (/* @__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
- created_at: (/* @__PURE__ */ new Date()).toISOString(),
67
- updated_at: (/* @__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
- updated_at: (/* @__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(
113
- mockProducts.map((p) => p.category).filter((c) => Boolean(c))
114
- )
115
- );
116
- return {
117
- data: categories,
118
- success: true,
119
- message: "Categories retrieved successfully"
120
- };
121
- }
122
- };
123
- }
1
+ //#region src/lib/mock-smrt-client.ts
2
+ var mockProducts = [{
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: {
12
+ weight: "1.2kg",
13
+ color: "Black"
14
+ },
15
+ tags: ["demo", "sample"],
16
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
17
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
18
+ }, {
19
+ id: "2",
20
+ name: "Budget Item",
21
+ description: "An affordable option",
22
+ category: "Accessories",
23
+ manufacturer: "Budget Inc",
24
+ model: "BI-200",
25
+ price: 19.99,
26
+ inStock: false,
27
+ specifications: { size: "small" },
28
+ tags: ["budget", "affordable"],
29
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
30
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
31
+ }];
32
+ var MockApiClient = class {
33
+ products = {
34
+ async list() {
35
+ await new Promise((resolve) => setTimeout(resolve, 500));
36
+ return {
37
+ data: [...mockProducts],
38
+ success: true,
39
+ message: "Products retrieved successfully"
40
+ };
41
+ },
42
+ async get(id) {
43
+ await new Promise((resolve) => setTimeout(resolve, 200));
44
+ const product = mockProducts.find((p) => p.id === id);
45
+ if (!product) throw new Error(`Product with id ${id} not found`);
46
+ return {
47
+ data: product,
48
+ success: true,
49
+ message: "Product retrieved successfully"
50
+ };
51
+ },
52
+ async create(productData) {
53
+ await new Promise((resolve) => setTimeout(resolve, 300));
54
+ const newProduct = {
55
+ id: (mockProducts.length + 1).toString(),
56
+ name: productData.name || "Untitled Product",
57
+ description: productData.description || "",
58
+ category: productData.category || "Uncategorized",
59
+ manufacturer: productData.manufacturer || "",
60
+ model: productData.model || "",
61
+ price: productData.price || 0,
62
+ inStock: productData.inStock ?? true,
63
+ specifications: productData.specifications || {},
64
+ tags: productData.tags || [],
65
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
66
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
67
+ };
68
+ mockProducts.push(newProduct);
69
+ return {
70
+ data: newProduct,
71
+ success: true,
72
+ message: "Product created successfully"
73
+ };
74
+ },
75
+ async update(id, updates) {
76
+ await new Promise((resolve) => setTimeout(resolve, 300));
77
+ const index = mockProducts.findIndex((p) => p.id === id);
78
+ if (index === -1) throw new Error(`Product with id ${id} not found`);
79
+ const updatedProduct = {
80
+ ...mockProducts[index],
81
+ ...updates,
82
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
83
+ };
84
+ mockProducts[index] = updatedProduct;
85
+ return {
86
+ data: updatedProduct,
87
+ success: true,
88
+ message: "Product updated successfully"
89
+ };
90
+ },
91
+ async delete(id) {
92
+ await new Promise((resolve) => setTimeout(resolve, 200));
93
+ const index = mockProducts.findIndex((p) => p.id === id);
94
+ if (index === -1) throw new Error(`Product with id ${id} not found`);
95
+ mockProducts.splice(index, 1);
96
+ return {
97
+ data: void 0,
98
+ success: true,
99
+ message: "Product deleted successfully"
100
+ };
101
+ }
102
+ };
103
+ categories = { async list() {
104
+ await new Promise((resolve) => setTimeout(resolve, 200));
105
+ return {
106
+ data: Array.from(new Set(mockProducts.map((p) => p.category).filter((c) => Boolean(c)))),
107
+ success: true,
108
+ message: "Categories retrieved successfully"
109
+ };
110
+ } };
111
+ };
124
112
  function createClient(baseUrl = "/api/v1") {
125
- return new MockApiClient();
113
+ return new MockApiClient();
126
114
  }
127
- export {
128
- createClient,
129
- createClient as default
130
- };
131
- //# sourceMappingURL=mock-smrt-client.js.map
115
+ //#endregion
116
+ export { createClient, createClient as default };
117
+
118
+ //# sourceMappingURL=mock-smrt-client.js.map