@specverse/engines 4.1.5 → 4.1.6

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 (120) hide show
  1. package/dist/libs/instance-factories/applications/templates/generic/backend-env-generator.js +22 -0
  2. package/dist/libs/instance-factories/applications/templates/generic/backend-package-json-generator.js +66 -0
  3. package/dist/libs/instance-factories/applications/templates/generic/backend-tsconfig-generator.js +54 -0
  4. package/dist/libs/instance-factories/applications/templates/generic/main-generator.js +290 -0
  5. package/dist/libs/instance-factories/applications/templates/react/_view-components-source.js +530 -0
  6. package/dist/libs/instance-factories/applications/templates/react/api-client-generator.js +437 -0
  7. package/dist/libs/instance-factories/applications/templates/react/api-types-generator.js +146 -0
  8. package/dist/libs/instance-factories/applications/templates/react/app-tsx-generator.js +73 -0
  9. package/dist/libs/instance-factories/applications/templates/react/env-example-generator.js +18 -0
  10. package/dist/libs/instance-factories/applications/templates/react/field-helpers-generator.js +99 -0
  11. package/dist/libs/instance-factories/applications/templates/react/gitignore-generator.js +35 -0
  12. package/dist/libs/instance-factories/applications/templates/react/index-css-generator.js +9 -0
  13. package/dist/libs/instance-factories/applications/templates/react/index-html-generator.js +23 -0
  14. package/dist/libs/instance-factories/applications/templates/react/main-tsx-generator.js +29 -0
  15. package/dist/libs/instance-factories/applications/templates/react/package-json-generator.js +49 -0
  16. package/dist/libs/instance-factories/applications/templates/react/pattern-adapter-generator.js +156 -0
  17. package/dist/libs/instance-factories/applications/templates/react/react-pattern-adapter.js +935 -0
  18. package/dist/libs/instance-factories/applications/templates/react/relationship-field-generator.js +143 -0
  19. package/dist/libs/instance-factories/applications/templates/react/runtime-app-tsx-generator.js +101 -0
  20. package/dist/libs/instance-factories/applications/templates/react/runtime-package-json-generator.js +50 -0
  21. package/dist/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.js +646 -0
  22. package/dist/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.js +65 -0
  23. package/dist/libs/instance-factories/applications/templates/react/tsconfig-generator.js +28 -0
  24. package/dist/libs/instance-factories/applications/templates/react/use-api-hooks-generator.js +132 -0
  25. package/dist/libs/instance-factories/applications/templates/react/view-dashboard-generator.js +143 -0
  26. package/dist/libs/instance-factories/applications/templates/react/view-detail-generator.js +143 -0
  27. package/dist/libs/instance-factories/applications/templates/react/view-form-generator.js +355 -0
  28. package/dist/libs/instance-factories/applications/templates/react/view-list-generator.js +91 -0
  29. package/dist/libs/instance-factories/applications/templates/react/view-router-generator.js +79 -0
  30. package/dist/libs/instance-factories/applications/templates/react/vite-config-generator.js +42 -0
  31. package/dist/libs/instance-factories/cli/templates/commander/cli-bin-wrapper-generator.js +11 -0
  32. package/dist/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +111 -0
  33. package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +928 -0
  34. package/dist/libs/instance-factories/communication/templates/eventemitter/bus-generator.js +83 -0
  35. package/dist/libs/instance-factories/communication/templates/eventemitter/publisher-generator.js +91 -0
  36. package/dist/libs/instance-factories/communication/templates/eventemitter/subscriber-generator.js +86 -0
  37. package/dist/libs/instance-factories/controllers/templates/fastify/meta-routes-generator.js +93 -0
  38. package/dist/libs/instance-factories/controllers/templates/fastify/routes-generator.js +280 -0
  39. package/dist/libs/instance-factories/controllers/templates/fastify/server-generator.js +125 -0
  40. package/dist/libs/instance-factories/infrastructure/templates/docker-k8s/infrastructure-generator.js +25 -0
  41. package/dist/libs/instance-factories/orms/templates/prisma/schema-generator.js +371 -0
  42. package/dist/libs/instance-factories/orms/templates/prisma/services-generator.js +266 -0
  43. package/dist/libs/instance-factories/scaffolding/templates/generic/env-example-generator.js +51 -0
  44. package/dist/libs/instance-factories/scaffolding/templates/generic/env-generator.js +61 -0
  45. package/dist/libs/instance-factories/scaffolding/templates/generic/gitignore-generator.js +59 -0
  46. package/dist/libs/instance-factories/scaffolding/templates/generic/package-json-generator.js +126 -0
  47. package/dist/libs/instance-factories/scaffolding/templates/generic/readme-generator.js +159 -0
  48. package/dist/libs/instance-factories/scaffolding/templates/generic/tsconfig-generator.js +56 -0
  49. package/dist/libs/instance-factories/scaffolding/templates/generic/tsconfig-react-generator.js +37 -0
  50. package/dist/libs/instance-factories/sdks/templates/python/sdk-generator.js +29 -0
  51. package/dist/libs/instance-factories/sdks/templates/typescript/sdk-generator.js +28 -0
  52. package/dist/libs/instance-factories/services/templates/memory/generate-interpreter.js +14 -0
  53. package/dist/libs/instance-factories/services/templates/memory/step-conventions-memory.js +415 -0
  54. package/dist/libs/instance-factories/services/templates/prisma/behavior-generator.js +177 -0
  55. package/dist/libs/instance-factories/services/templates/prisma/controller-generator.js +413 -0
  56. package/dist/libs/instance-factories/services/templates/prisma/service-generator.js +243 -0
  57. package/dist/libs/instance-factories/services/templates/prisma/step-conventions.js +264 -0
  58. package/dist/libs/instance-factories/services/templates/shared-patterns.js +24 -0
  59. package/dist/libs/instance-factories/shared/path-resolver.js +59 -0
  60. package/dist/libs/instance-factories/storage/templates/mongodb/config-generator.js +13 -0
  61. package/dist/libs/instance-factories/storage/templates/mongodb/docker-generator.js +16 -0
  62. package/dist/libs/instance-factories/storage/templates/postgresql/config-generator.js +45 -0
  63. package/dist/libs/instance-factories/storage/templates/postgresql/docker-generator.js +46 -0
  64. package/dist/libs/instance-factories/storage/templates/redis/config-generator.js +14 -0
  65. package/dist/libs/instance-factories/storage/templates/redis/docker-generator.js +16 -0
  66. package/dist/libs/instance-factories/test-generation.js +145 -0
  67. package/dist/libs/instance-factories/testing/templates/vitest/tests-generator.js +30 -0
  68. package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +149 -0
  69. package/dist/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.js +232 -0
  70. package/dist/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.js +49 -0
  71. package/dist/libs/instance-factories/tools/templates/mcp/static/src/index.js +18 -0
  72. package/dist/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.js +0 -0
  73. package/dist/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.js +97 -0
  74. package/dist/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.js +64 -0
  75. package/dist/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.js +182 -0
  76. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.js +1210 -0
  77. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.js +172 -0
  78. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.js +240 -0
  79. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.js +147 -0
  80. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.js +281 -0
  81. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.js +409 -0
  82. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.js +414 -0
  83. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.js +467 -0
  84. package/dist/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.js +135 -0
  85. package/dist/libs/instance-factories/tools/templates/mcp/static/src/types/index.js +0 -0
  86. package/dist/libs/instance-factories/tools/templates/vscode/static/extension.js +965 -0
  87. package/dist/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.js +238 -0
  88. package/dist/libs/instance-factories/validation/templates/zod/validation-generator.js +25 -0
  89. package/dist/libs/instance-factories/views/index.js +48 -0
  90. package/dist/libs/instance-factories/views/templates/react/adapters/antd-adapter.js +742 -0
  91. package/dist/libs/instance-factories/views/templates/react/adapters/mui-adapter.js +824 -0
  92. package/dist/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.js +719 -0
  93. package/dist/libs/instance-factories/views/templates/react/app-generator.js +45 -0
  94. package/dist/libs/instance-factories/views/templates/react/components-generator.js +779 -0
  95. package/dist/libs/instance-factories/views/templates/react/forms-generator.js +285 -0
  96. package/dist/libs/instance-factories/views/templates/react/frontend-package-json-generator.js +46 -0
  97. package/dist/libs/instance-factories/views/templates/react/hooks-generator.js +111 -0
  98. package/dist/libs/instance-factories/views/templates/react/index-css-generator.js +9 -0
  99. package/dist/libs/instance-factories/views/templates/react/index-html-generator.js +23 -0
  100. package/dist/libs/instance-factories/views/templates/react/main-tsx-generator.js +21 -0
  101. package/dist/libs/instance-factories/views/templates/react/react-component-generator.js +299 -0
  102. package/dist/libs/instance-factories/views/templates/react/router-generator.js +136 -0
  103. package/dist/libs/instance-factories/views/templates/react/router-generic-generator.js +107 -0
  104. package/dist/libs/instance-factories/views/templates/react/shared-utils-generator.js +179 -0
  105. package/dist/libs/instance-factories/views/templates/react/spec-json-generator.js +7 -0
  106. package/dist/libs/instance-factories/views/templates/react/types-generator.js +56 -0
  107. package/dist/libs/instance-factories/views/templates/react/views-metadata-generator.js +27 -0
  108. package/dist/libs/instance-factories/views/templates/react/vite-config-generator.js +29 -0
  109. package/dist/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js +261 -0
  110. package/dist/libs/instance-factories/views/templates/shared/adapter-types.js +34 -0
  111. package/dist/libs/instance-factories/views/templates/shared/atomic-components-registry.js +800 -0
  112. package/dist/libs/instance-factories/views/templates/shared/base-generator.js +305 -0
  113. package/dist/libs/instance-factories/views/templates/shared/component-metadata.js +517 -0
  114. package/dist/libs/instance-factories/views/templates/shared/composite-pattern-types.js +0 -0
  115. package/dist/libs/instance-factories/views/templates/shared/composite-patterns.js +445 -0
  116. package/dist/libs/instance-factories/views/templates/shared/index.js +80 -0
  117. package/dist/libs/instance-factories/views/templates/shared/pattern-validator.js +210 -0
  118. package/dist/libs/instance-factories/views/templates/shared/property-mapper.js +492 -0
  119. package/dist/libs/instance-factories/views/templates/shared/syntax-mapper.js +321 -0
  120. package/package.json +3 -2
@@ -0,0 +1,517 @@
1
+ import { ATOMIC_COMPONENTS_REGISTRY } from "./atomic-components-registry.js";
2
+ const COMMON_PROPERTY_METADATA = {
3
+ variant: {
4
+ name: "variant",
5
+ type: "enum",
6
+ required: false,
7
+ default: "primary",
8
+ description: "Visual style variant for the component",
9
+ enumValues: ["primary", "secondary", "destructive", "ghost", "outline"],
10
+ isCommon: true,
11
+ affectsLayout: false
12
+ },
13
+ size: {
14
+ name: "size",
15
+ type: "enum",
16
+ required: false,
17
+ default: "medium",
18
+ description: "Size of the component",
19
+ enumValues: ["small", "medium", "large"],
20
+ isCommon: true,
21
+ affectsLayout: true
22
+ },
23
+ color: {
24
+ name: "color",
25
+ type: "enum",
26
+ required: false,
27
+ default: "primary",
28
+ description: "Color scheme for the component",
29
+ enumValues: ["primary", "success", "warning", "error", "info"],
30
+ isCommon: true,
31
+ affectsLayout: false
32
+ },
33
+ position: {
34
+ name: "position",
35
+ type: "enum",
36
+ required: false,
37
+ default: "top",
38
+ description: "Position or alignment of the component",
39
+ enumValues: ["top", "bottom", "left", "right"],
40
+ isCommon: true,
41
+ affectsLayout: true
42
+ },
43
+ orientation: {
44
+ name: "orientation",
45
+ type: "enum",
46
+ required: false,
47
+ default: "horizontal",
48
+ description: "Layout orientation of the component",
49
+ enumValues: ["horizontal", "vertical"],
50
+ isCommon: true,
51
+ affectsLayout: true
52
+ }
53
+ };
54
+ const COMPONENT_METADATA_REGISTRY = {
55
+ // Data Display Components
56
+ table: {
57
+ ...ATOMIC_COMPONENTS_REGISTRY.table,
58
+ propertyMetadata: [
59
+ {
60
+ name: "columns",
61
+ type: "array",
62
+ required: true,
63
+ description: "Column definitions for the table",
64
+ validation: { min: 1 }
65
+ },
66
+ {
67
+ name: "dataSource",
68
+ type: "string",
69
+ required: true,
70
+ description: "Model array name for table data"
71
+ },
72
+ {
73
+ name: "sortable",
74
+ type: "boolean",
75
+ required: false,
76
+ default: false,
77
+ description: "Enable column sorting",
78
+ affectsLayout: false
79
+ },
80
+ {
81
+ name: "filterable",
82
+ type: "boolean",
83
+ required: false,
84
+ default: false,
85
+ description: "Enable filtering",
86
+ affectsLayout: true
87
+ },
88
+ {
89
+ name: "pagination",
90
+ type: "boolean",
91
+ required: false,
92
+ default: true,
93
+ description: "Enable pagination",
94
+ affectsLayout: true
95
+ },
96
+ COMMON_PROPERTY_METADATA.size
97
+ ],
98
+ eventMetadata: [
99
+ {
100
+ name: "onRowClick",
101
+ description: "Fired when a row is clicked",
102
+ parameters: [
103
+ { name: "row", type: "object", description: "Clicked row data" },
104
+ { name: "index", type: "number", description: "Row index" }
105
+ ]
106
+ },
107
+ {
108
+ name: "onSort",
109
+ description: "Fired when column sort changes",
110
+ parameters: [
111
+ { name: "column", type: "string", description: "Column key" },
112
+ { name: "direction", type: "string", description: "Sort direction (asc/desc)" }
113
+ ]
114
+ }
115
+ ],
116
+ capabilities: {
117
+ supportsChildren: false,
118
+ supportsConditional: true,
119
+ supportsList: true,
120
+ supportsSlots: false,
121
+ maxDepth: 1,
122
+ preferredPosition: "leaf"
123
+ },
124
+ accessibility: {
125
+ role: "table",
126
+ keyboardNavigable: true,
127
+ requiredAriaAttrs: ["aria-label"],
128
+ screenReaderDescription: "Data table with {columns.length} columns"
129
+ },
130
+ state: {
131
+ hasInternalState: true,
132
+ stateProperties: [
133
+ { name: "sortColumn", type: "string", description: "Currently sorted column" },
134
+ { name: "sortDirection", type: "string", description: "Sort direction (asc/desc)" },
135
+ { name: "currentPage", type: "number", description: "Current page number", defaultValue: 1 }
136
+ ]
137
+ },
138
+ related: {
139
+ alternatives: ["list", "grid"],
140
+ compositions: ["pagination", "search"],
141
+ containers: ["card", "container"]
142
+ }
143
+ },
144
+ button: {
145
+ ...ATOMIC_COMPONENTS_REGISTRY.button,
146
+ propertyMetadata: [
147
+ COMMON_PROPERTY_METADATA.variant,
148
+ COMMON_PROPERTY_METADATA.size,
149
+ {
150
+ name: "disabled",
151
+ type: "boolean",
152
+ required: false,
153
+ default: false,
154
+ description: "Disable button interaction"
155
+ },
156
+ {
157
+ name: "loading",
158
+ type: "boolean",
159
+ required: false,
160
+ default: false,
161
+ description: "Show loading state"
162
+ },
163
+ {
164
+ name: "label",
165
+ type: "string",
166
+ required: false,
167
+ description: "Button text label"
168
+ }
169
+ ],
170
+ eventMetadata: [
171
+ {
172
+ name: "onClick",
173
+ description: "Fired when button is clicked",
174
+ parameters: [
175
+ { name: "event", type: "MouseEvent", description: "Click event" }
176
+ ],
177
+ bubbles: true
178
+ }
179
+ ],
180
+ capabilities: {
181
+ supportsChildren: true,
182
+ supportsConditional: true,
183
+ supportsList: false,
184
+ supportsSlots: false,
185
+ maxDepth: 1,
186
+ preferredPosition: "leaf"
187
+ },
188
+ accessibility: {
189
+ role: "button",
190
+ keyboardNavigable: true,
191
+ requiredAriaAttrs: ["aria-label"],
192
+ screenReaderDescription: "{variant} button: {label}"
193
+ },
194
+ state: {
195
+ hasInternalState: false
196
+ },
197
+ related: {
198
+ alternatives: ["link", "icon-button"],
199
+ compositions: ["icon", "badge"],
200
+ containers: ["form", "card", "toolbar"]
201
+ }
202
+ },
203
+ card: {
204
+ ...ATOMIC_COMPONENTS_REGISTRY.card,
205
+ propertyMetadata: [
206
+ {
207
+ name: "title",
208
+ type: "string",
209
+ required: false,
210
+ description: "Card title"
211
+ },
212
+ {
213
+ name: "elevation",
214
+ type: "enum",
215
+ required: false,
216
+ default: "medium",
217
+ description: "Shadow depth",
218
+ enumValues: ["none", "low", "medium", "high"]
219
+ },
220
+ COMMON_PROPERTY_METADATA.size
221
+ ],
222
+ capabilities: {
223
+ supportsChildren: true,
224
+ supportsConditional: true,
225
+ supportsList: true,
226
+ supportsSlots: true,
227
+ maxDepth: 3,
228
+ preferredPosition: "container"
229
+ },
230
+ accessibility: {
231
+ role: "article",
232
+ keyboardNavigable: false,
233
+ screenReaderDescription: "Card: {title}"
234
+ },
235
+ state: {
236
+ hasInternalState: false
237
+ },
238
+ related: {
239
+ alternatives: ["panel", "container"],
240
+ compositions: ["button", "image", "text", "list"],
241
+ containers: ["grid", "container"]
242
+ }
243
+ },
244
+ input: {
245
+ ...ATOMIC_COMPONENTS_REGISTRY.input,
246
+ propertyMetadata: [
247
+ {
248
+ name: "type",
249
+ type: "enum",
250
+ required: false,
251
+ default: "text",
252
+ description: "Input type",
253
+ enumValues: ["text", "email", "password", "number", "tel", "url"]
254
+ },
255
+ {
256
+ name: "placeholder",
257
+ type: "string",
258
+ required: false,
259
+ description: "Placeholder text"
260
+ },
261
+ {
262
+ name: "required",
263
+ type: "boolean",
264
+ required: false,
265
+ default: false,
266
+ description: "Field is required"
267
+ },
268
+ {
269
+ name: "disabled",
270
+ type: "boolean",
271
+ required: false,
272
+ default: false,
273
+ description: "Disable input"
274
+ },
275
+ COMMON_PROPERTY_METADATA.size,
276
+ {
277
+ name: "variant",
278
+ type: "enum",
279
+ required: false,
280
+ default: "outlined",
281
+ description: "Visual style variant",
282
+ enumValues: ["filled", "outlined", "standard"],
283
+ isCommon: true
284
+ }
285
+ ],
286
+ eventMetadata: [
287
+ {
288
+ name: "onChange",
289
+ description: "Fired when input value changes",
290
+ parameters: [
291
+ { name: "value", type: "string", description: "New value" },
292
+ { name: "event", type: "Event", description: "Change event" }
293
+ ]
294
+ },
295
+ {
296
+ name: "onBlur",
297
+ description: "Fired when input loses focus",
298
+ parameters: [
299
+ { name: "event", type: "FocusEvent", description: "Blur event" }
300
+ ]
301
+ }
302
+ ],
303
+ capabilities: {
304
+ supportsChildren: false,
305
+ supportsConditional: true,
306
+ supportsList: false,
307
+ supportsSlots: false,
308
+ maxDepth: 0,
309
+ preferredPosition: "leaf"
310
+ },
311
+ accessibility: {
312
+ role: "textbox",
313
+ keyboardNavigable: true,
314
+ requiredAriaAttrs: ["aria-label", "aria-required"],
315
+ screenReaderDescription: "{type} input: {placeholder}"
316
+ },
317
+ state: {
318
+ hasInternalState: true,
319
+ stateProperties: [
320
+ { name: "value", type: "string", description: "Current input value", defaultValue: "" },
321
+ { name: "isFocused", type: "boolean", description: "Input has focus", defaultValue: false }
322
+ ]
323
+ },
324
+ related: {
325
+ alternatives: ["textarea", "select"],
326
+ compositions: ["label", "validation-message"],
327
+ containers: ["form", "form-field"]
328
+ }
329
+ },
330
+ modal: {
331
+ ...ATOMIC_COMPONENTS_REGISTRY.modal,
332
+ propertyMetadata: [
333
+ {
334
+ name: "title",
335
+ type: "string",
336
+ required: false,
337
+ description: "Modal title"
338
+ },
339
+ {
340
+ name: "open",
341
+ type: "boolean",
342
+ required: true,
343
+ description: "Modal visibility state"
344
+ },
345
+ {
346
+ name: "closable",
347
+ type: "boolean",
348
+ required: false,
349
+ default: true,
350
+ description: "Show close button"
351
+ },
352
+ COMMON_PROPERTY_METADATA.size
353
+ ],
354
+ eventMetadata: [
355
+ {
356
+ name: "onClose",
357
+ description: "Fired when modal is closed",
358
+ parameters: []
359
+ }
360
+ ],
361
+ capabilities: {
362
+ supportsChildren: true,
363
+ supportsConditional: true,
364
+ supportsList: false,
365
+ supportsSlots: true,
366
+ maxDepth: 2,
367
+ preferredPosition: "root"
368
+ },
369
+ accessibility: {
370
+ role: "dialog",
371
+ keyboardNavigable: true,
372
+ requiredAriaAttrs: ["aria-modal", "aria-labelledby"],
373
+ screenReaderDescription: "Modal dialog: {title}"
374
+ },
375
+ state: {
376
+ hasInternalState: true,
377
+ stateProperties: [
378
+ { name: "open", type: "boolean", description: "Modal open state", defaultValue: false }
379
+ ]
380
+ },
381
+ related: {
382
+ alternatives: ["drawer", "popover"],
383
+ compositions: ["button", "form", "card"],
384
+ containers: ["root"]
385
+ }
386
+ },
387
+ badge: {
388
+ ...ATOMIC_COMPONENTS_REGISTRY.badge,
389
+ propertyMetadata: [
390
+ {
391
+ name: "content",
392
+ type: "string",
393
+ required: false,
394
+ description: "Badge content/label"
395
+ },
396
+ COMMON_PROPERTY_METADATA.variant,
397
+ COMMON_PROPERTY_METADATA.color,
398
+ {
399
+ name: "variant",
400
+ type: "enum",
401
+ required: false,
402
+ default: "standard",
403
+ description: "Badge style",
404
+ enumValues: ["dot", "standard"],
405
+ isCommon: true
406
+ }
407
+ ],
408
+ capabilities: {
409
+ supportsChildren: false,
410
+ supportsConditional: true,
411
+ supportsList: false,
412
+ supportsSlots: false,
413
+ maxDepth: 0,
414
+ preferredPosition: "leaf"
415
+ },
416
+ accessibility: {
417
+ role: "status",
418
+ keyboardNavigable: false,
419
+ screenReaderDescription: "Badge: {content}"
420
+ },
421
+ state: {
422
+ hasInternalState: false
423
+ },
424
+ related: {
425
+ alternatives: ["chip", "tag"],
426
+ compositions: ["icon", "avatar"],
427
+ containers: ["button", "card"]
428
+ }
429
+ }
430
+ };
431
+ function getComponentMetadata(componentType) {
432
+ return COMPONENT_METADATA_REGISTRY[componentType];
433
+ }
434
+ function getAllComponentTypes() {
435
+ return Object.keys(COMPONENT_METADATA_REGISTRY);
436
+ }
437
+ function getComponentsByCategory(category) {
438
+ return Object.values(COMPONENT_METADATA_REGISTRY).filter(
439
+ (comp) => comp.category === category
440
+ );
441
+ }
442
+ function getContainerComponents() {
443
+ return Object.values(COMPONENT_METADATA_REGISTRY).filter(
444
+ (comp) => comp.capabilities.supportsChildren
445
+ );
446
+ }
447
+ function getLeafComponents() {
448
+ return Object.values(COMPONENT_METADATA_REGISTRY).filter(
449
+ (comp) => !comp.capabilities.supportsChildren
450
+ );
451
+ }
452
+ function supportsProperty(componentType, propertyName) {
453
+ const metadata = getComponentMetadata(componentType);
454
+ if (!metadata) return false;
455
+ return metadata.propertyMetadata.some((prop) => prop.name === propertyName);
456
+ }
457
+ function getPropertyMetadata(componentType, propertyName) {
458
+ const metadata = getComponentMetadata(componentType);
459
+ if (!metadata) return void 0;
460
+ return metadata.propertyMetadata.find((prop) => prop.name === propertyName);
461
+ }
462
+ function validatePropertyValue(componentType, propertyName, value) {
463
+ const propMeta = getPropertyMetadata(componentType, propertyName);
464
+ if (!propMeta) {
465
+ return { valid: false, errors: [`Unknown property: ${propertyName}`] };
466
+ }
467
+ const errors = [];
468
+ if (propMeta.type === "enum" && propMeta.enumValues) {
469
+ if (!propMeta.enumValues.includes(value)) {
470
+ errors.push(`Invalid enum value. Expected one of: ${propMeta.enumValues.join(", ")}`);
471
+ }
472
+ }
473
+ if (propMeta.validation) {
474
+ if (propMeta.validation.min !== void 0 && value < propMeta.validation.min) {
475
+ errors.push(`Value must be >= ${propMeta.validation.min}`);
476
+ }
477
+ if (propMeta.validation.max !== void 0 && value > propMeta.validation.max) {
478
+ errors.push(`Value must be <= ${propMeta.validation.max}`);
479
+ }
480
+ if (propMeta.validation.pattern && typeof value === "string") {
481
+ const regex = new RegExp(propMeta.validation.pattern);
482
+ if (!regex.test(value)) {
483
+ errors.push(`Value must match pattern: ${propMeta.validation.pattern}`);
484
+ }
485
+ }
486
+ }
487
+ return {
488
+ valid: errors.length === 0,
489
+ errors
490
+ };
491
+ }
492
+ function getRecommendedCompositions(componentType) {
493
+ const metadata = getComponentMetadata(componentType);
494
+ return metadata?.related?.compositions || [];
495
+ }
496
+ function canNest(parentType, childType) {
497
+ const parentMeta = getComponentMetadata(parentType);
498
+ const childMeta = getComponentMetadata(childType);
499
+ if (!parentMeta || !childMeta) return false;
500
+ if (!parentMeta.capabilities.supportsChildren) return false;
501
+ if (childMeta.capabilities.preferredPosition === "root") return false;
502
+ return true;
503
+ }
504
+ export {
505
+ COMMON_PROPERTY_METADATA,
506
+ COMPONENT_METADATA_REGISTRY,
507
+ canNest,
508
+ getAllComponentTypes,
509
+ getComponentMetadata,
510
+ getComponentsByCategory,
511
+ getContainerComponents,
512
+ getLeafComponents,
513
+ getPropertyMetadata,
514
+ getRecommendedCompositions,
515
+ supportsProperty,
516
+ validatePropertyValue
517
+ };