@vib3code/sdk 2.0.1

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 (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. package/types/render/index.d.ts +141 -0
@@ -0,0 +1,226 @@
1
+ /**
2
+ * CSSExporter - Export VIB3+ parameters as CSS custom properties
3
+ *
4
+ * Generates theme-ready CSS variables from visualization parameters
5
+ * for easy integration with any CSS framework.
6
+ */
7
+
8
+ /**
9
+ * Default export options
10
+ */
11
+ const DEFAULT_OPTIONS = {
12
+ includeDarkMode: false,
13
+ includeAnimations: false,
14
+ includeComments: true,
15
+ rootSelector: ':root',
16
+ prefix: 'vib3'
17
+ };
18
+
19
+ /**
20
+ * Geometry names for comments
21
+ */
22
+ const GEOMETRY_NAMES = [
23
+ 'Tetrahedron', 'Hypercube', 'Sphere', 'Torus',
24
+ 'Klein Bottle', 'Fractal', 'Wave', 'Crystal'
25
+ ];
26
+
27
+ /**
28
+ * System display names
29
+ */
30
+ const SYSTEM_NAMES = {
31
+ quantum: 'Quantum',
32
+ faceted: 'Faceted',
33
+ holographic: 'Holographic'
34
+ };
35
+
36
+ /**
37
+ * Export parameters to CSS custom properties
38
+ *
39
+ * @param {object} params - VIB3+ parameters
40
+ * @param {object} options - Export options
41
+ * @returns {string} CSS content
42
+ */
43
+ export function exportCSS(params, options = {}) {
44
+ const opts = { ...DEFAULT_OPTIONS, ...options };
45
+ const { includeDarkMode, includeAnimations, includeComments, rootSelector, prefix } = opts;
46
+
47
+ // Extract parameters with defaults
48
+ const system = params.system || 'quantum';
49
+ const geometry = params.geometry ?? 0;
50
+ const hue = params.hue ?? 200;
51
+ const saturation = params.saturation ?? 0.7;
52
+ const intensity = params.intensity ?? 0.8;
53
+ const gridDensity = params.gridDensity ?? 16;
54
+ const morphFactor = params.morphFactor ?? 0;
55
+ const chaos = params.chaos ?? 0;
56
+ const speed = params.speed ?? 1;
57
+ const dimension = params.dimension ?? 3.5;
58
+
59
+ // 6D rotation values
60
+ const rotXY = params.rot4dXY ?? 0;
61
+ const rotXZ = params.rot4dXZ ?? 0;
62
+ const rotYZ = params.rot4dYZ ?? 0;
63
+ const rotXW = params.rot4dXW ?? 0;
64
+ const rotYW = params.rot4dYW ?? 0;
65
+ const rotZW = params.rot4dZW ?? 0;
66
+
67
+ // Derived colors
68
+ const primaryHSL = `hsl(${hue}, ${Math.round(saturation * 100)}%, ${Math.round(40 + intensity * 20)}%)`;
69
+ const secondaryHSL = `hsl(${hue}, ${Math.round(saturation * 80)}%, ${Math.round(50 + intensity * 20)}%)`;
70
+ const accentHSL = `hsl(${(hue + 30) % 360}, ${Math.round(saturation * 100)}%, ${Math.round(50 + intensity * 10)}%)`;
71
+ const backgroundHSL = `hsl(${hue}, ${Math.round(saturation * 30)}%, ${Math.round(10 + intensity * 5)}%)`;
72
+
73
+ // Build CSS
74
+ let css = '';
75
+
76
+ // Header comment
77
+ if (includeComments) {
78
+ const timestamp = new Date().toISOString().split('T')[0];
79
+ css += `/* VIB3+ Theme Export - Generated ${timestamp} */\n`;
80
+ css += `/* System: ${SYSTEM_NAMES[system] || system} */\n`;
81
+ css += `/* Geometry: ${GEOMETRY_NAMES[geometry % 8] || 'Unknown'} (${geometry}) */\n\n`;
82
+ }
83
+
84
+ // Root variables
85
+ css += `${rootSelector} {\n`;
86
+
87
+ if (includeComments) {
88
+ css += ` /* Color palette */\n`;
89
+ }
90
+ css += ` --${prefix}-hue: ${hue};\n`;
91
+ css += ` --${prefix}-saturation: ${saturation};\n`;
92
+ css += ` --${prefix}-intensity: ${intensity};\n`;
93
+ css += ` --${prefix}-primary: ${primaryHSL};\n`;
94
+ css += ` --${prefix}-secondary: ${secondaryHSL};\n`;
95
+ css += ` --${prefix}-accent: ${accentHSL};\n`;
96
+ css += ` --${prefix}-background: ${backgroundHSL};\n`;
97
+ css += `\n`;
98
+
99
+ if (includeComments) {
100
+ css += ` /* Geometry parameters */\n`;
101
+ }
102
+ css += ` --${prefix}-geometry: ${geometry};\n`;
103
+ css += ` --${prefix}-system: '${system}';\n`;
104
+ css += ` --${prefix}-dimension: ${dimension};\n`;
105
+ css += ` --${prefix}-grid-density: ${gridDensity};\n`;
106
+ css += ` --${prefix}-morph-factor: ${morphFactor};\n`;
107
+ css += ` --${prefix}-chaos: ${chaos};\n`;
108
+ css += `\n`;
109
+
110
+ if (includeComments) {
111
+ css += ` /* 6D rotation (radians) */\n`;
112
+ }
113
+ css += ` --${prefix}-rot-xy: ${rotXY};\n`;
114
+ css += ` --${prefix}-rot-xz: ${rotXZ};\n`;
115
+ css += ` --${prefix}-rot-yz: ${rotYZ};\n`;
116
+ css += ` --${prefix}-rot-xw: ${rotXW};\n`;
117
+ css += ` --${prefix}-rot-yw: ${rotYW};\n`;
118
+ css += ` --${prefix}-rot-zw: ${rotZW};\n`;
119
+ css += `\n`;
120
+
121
+ if (includeComments) {
122
+ css += ` /* Animation timing */\n`;
123
+ }
124
+ css += ` --${prefix}-speed: ${speed};\n`;
125
+ css += ` --${prefix}-animation-duration: ${(1 / speed).toFixed(2)}s;\n`;
126
+
127
+ css += `}\n`;
128
+
129
+ // Dark mode variant
130
+ if (includeDarkMode) {
131
+ css += `\n`;
132
+ if (includeComments) {
133
+ css += `/* Dark mode variant */\n`;
134
+ }
135
+ css += `@media (prefers-color-scheme: dark) {\n`;
136
+ css += ` ${rootSelector} {\n`;
137
+ css += ` --${prefix}-primary: hsl(${hue}, ${Math.round(saturation * 100)}%, ${Math.round(50 + intensity * 20)}%);\n`;
138
+ css += ` --${prefix}-secondary: hsl(${hue}, ${Math.round(saturation * 80)}%, ${Math.round(35 + intensity * 15)}%);\n`;
139
+ css += ` --${prefix}-background: hsl(${hue}, ${Math.round(saturation * 20)}%, ${Math.round(5 + intensity * 3)}%);\n`;
140
+ css += ` }\n`;
141
+ css += `}\n`;
142
+ }
143
+
144
+ // Animation keyframes
145
+ if (includeAnimations) {
146
+ css += `\n`;
147
+ if (includeComments) {
148
+ css += `/* VIB3+ animations */\n`;
149
+ }
150
+ css += `@keyframes ${prefix}-pulse {\n`;
151
+ css += ` 0%, 100% {\n`;
152
+ css += ` transform: scale(1);\n`;
153
+ css += ` filter: hue-rotate(0deg);\n`;
154
+ css += ` }\n`;
155
+ css += ` 50% {\n`;
156
+ css += ` transform: scale(${1 + morphFactor * 0.05});\n`;
157
+ css += ` filter: hue-rotate(${chaos * 30}deg);\n`;
158
+ css += ` }\n`;
159
+ css += `}\n\n`;
160
+
161
+ css += `@keyframes ${prefix}-rotate {\n`;
162
+ css += ` from {\n`;
163
+ css += ` transform: rotate(0deg);\n`;
164
+ css += ` }\n`;
165
+ css += ` to {\n`;
166
+ css += ` transform: rotate(360deg);\n`;
167
+ css += ` }\n`;
168
+ css += `}\n\n`;
169
+
170
+ css += `.${prefix}-animated {\n`;
171
+ css += ` animation: ${prefix}-pulse var(--${prefix}-animation-duration) ease-in-out infinite;\n`;
172
+ css += `}\n\n`;
173
+
174
+ css += `.${prefix}-rotating {\n`;
175
+ css += ` animation: ${prefix}-rotate calc(var(--${prefix}-animation-duration) * 10) linear infinite;\n`;
176
+ css += `}\n`;
177
+ }
178
+
179
+ return css;
180
+ }
181
+
182
+ /**
183
+ * Export CSS to file (browser environment)
184
+ */
185
+ export function downloadCSS(params, options = {}, filename = 'vib3-theme.css') {
186
+ const css = exportCSS(params, options);
187
+ const blob = new Blob([css], { type: 'text/css' });
188
+ const url = URL.createObjectURL(blob);
189
+
190
+ const link = document.createElement('a');
191
+ link.href = url;
192
+ link.download = filename;
193
+ link.click();
194
+
195
+ URL.revokeObjectURL(url);
196
+ return css;
197
+ }
198
+
199
+ /**
200
+ * Generate inline style object from parameters
201
+ * Useful for React/Vue style props
202
+ */
203
+ export function toStyleObject(params, prefix = 'vib3') {
204
+ const hue = params.hue ?? 200;
205
+ const saturation = params.saturation ?? 0.7;
206
+ const intensity = params.intensity ?? 0.8;
207
+
208
+ return {
209
+ [`--${prefix}-hue`]: hue,
210
+ [`--${prefix}-saturation`]: saturation,
211
+ [`--${prefix}-intensity`]: intensity,
212
+ [`--${prefix}-primary`]: `hsl(${hue}, ${Math.round(saturation * 100)}%, ${Math.round(40 + intensity * 20)}%)`,
213
+ [`--${prefix}-geometry`]: params.geometry ?? 0,
214
+ [`--${prefix}-system`]: `'${params.system || 'quantum'}'`,
215
+ [`--${prefix}-rot-xw`]: params.rot4dXW ?? 0,
216
+ [`--${prefix}-rot-yw`]: params.rot4dYW ?? 0,
217
+ [`--${prefix}-rot-zw`]: params.rot4dZW ?? 0,
218
+ [`--${prefix}-speed`]: params.speed ?? 1
219
+ };
220
+ }
221
+
222
+ export default {
223
+ exportCSS,
224
+ downloadCSS,
225
+ toStyleObject
226
+ };
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Base class for all VIB34D trading card generators
3
+ * Provides shared utilities while allowing system-specific implementations
4
+ */
5
+ export class CardGeneratorBase {
6
+ constructor(systemName) {
7
+ this.systemName = systemName;
8
+ this.canvasCount = 0;
9
+ }
10
+
11
+ /**
12
+ * Generate a trading card HTML file
13
+ */
14
+ async generateCard(format, parameters) {
15
+ try {
16
+ const systemShaders = this.getSystemShaders();
17
+ const systemStyles = this.getSystemStyles();
18
+ const systemContent = this.generateSystemContent(parameters);
19
+
20
+ const html = this.buildHTML({
21
+ format,
22
+ parameters,
23
+ shaders: systemShaders,
24
+ styles: systemStyles,
25
+ content: systemContent
26
+ });
27
+
28
+ const filename = this.generateFilename(format, parameters);
29
+
30
+ // Create and download the file
31
+ this.downloadFile(filename, html);
32
+
33
+ return {
34
+ success: true,
35
+ filename,
36
+ system: this.systemName
37
+ };
38
+ } catch (error) {
39
+ console.error(`❌ ${this.systemName} card generation failed:`, error);
40
+ return {
41
+ success: false,
42
+ error: error.message,
43
+ system: this.systemName
44
+ };
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Build complete HTML structure
50
+ */
51
+ buildHTML({ format, parameters, shaders, styles, content }) {
52
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
53
+
54
+ return `<!DOCTYPE html>
55
+ <html lang="en">
56
+ <head>
57
+ <meta charset="UTF-8">
58
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
59
+ <title>${this.systemName.toUpperCase()} Trading Card</title>
60
+ <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&display=swap" rel="stylesheet">
61
+ <style>
62
+ ${this.getBaseStyles()}
63
+ ${styles}
64
+ </style>
65
+ </head>
66
+ <body>
67
+ <div class="card-container">
68
+ <div class="card-header">
69
+ <div class="system-badge ${this.systemName.toLowerCase()}">${this.systemName.toUpperCase()}</div>
70
+ <div class="card-title">${this.getCardTitle(parameters)}</div>
71
+ </div>
72
+
73
+ <div class="visualization-area">
74
+ ${content}
75
+ </div>
76
+
77
+ <div class="card-footer">
78
+ <div class="parameters">
79
+ ${this.formatParameters(parameters)}
80
+ </div>
81
+ <div class="signature">
82
+ VIB34D Engine • ${timestamp}
83
+ </div>
84
+ </div>
85
+ </div>
86
+
87
+ <script>
88
+ ${shaders.vertex ? `const vertexShaderSource = \`${shaders.vertex}\`;` : ''}
89
+ ${shaders.fragment ? `const fragmentShaderSource = \`${shaders.fragment}\`;` : ''}
90
+
91
+ // System-specific initialization
92
+ ${this.getSystemJavaScript()}
93
+
94
+ // Start visualization
95
+ window.addEventListener('load', () => {
96
+ try {
97
+ initializeCard(${JSON.stringify(parameters)});
98
+ } catch (error) {
99
+ console.error('Card initialization failed:', error);
100
+ document.querySelector('.visualization-area').innerHTML =
101
+ '<div style="color: #ff0000; text-align: center; padding: 50px;">Visualization failed to load</div>';
102
+ }
103
+ });
104
+ </script>
105
+ </body>
106
+ </html>`;
107
+ }
108
+
109
+ /**
110
+ * Base CSS styles shared by all cards
111
+ */
112
+ getBaseStyles() {
113
+ return `
114
+ * { margin: 0; padding: 0; box-sizing: border-box; }
115
+
116
+ body {
117
+ background: #000;
118
+ color: #fff;
119
+ font-family: 'Orbitron', monospace;
120
+ overflow: hidden;
121
+ }
122
+
123
+ .card-container {
124
+ width: 100vw;
125
+ height: 100vh;
126
+ display: flex;
127
+ flex-direction: column;
128
+ background: radial-gradient(ellipse at center, #1a0033 0%, #000000 70%);
129
+ }
130
+
131
+ .card-header {
132
+ padding: 20px;
133
+ background: rgba(0, 0, 0, 0.8);
134
+ border-bottom: 2px solid rgba(0, 255, 255, 0.5);
135
+ display: flex;
136
+ justify-content: space-between;
137
+ align-items: center;
138
+ backdrop-filter: blur(10px);
139
+ }
140
+
141
+ .system-badge {
142
+ padding: 8px 16px;
143
+ border-radius: 12px;
144
+ font-weight: 700;
145
+ font-size: 0.9rem;
146
+ text-shadow: 0 0 10px currentColor;
147
+ }
148
+
149
+ .system-badge.faceted {
150
+ background: rgba(0, 255, 255, 0.2);
151
+ border: 2px solid #00ffff;
152
+ color: #00ffff;
153
+ }
154
+
155
+ .system-badge.quantum {
156
+ background: rgba(0, 255, 255, 0.2);
157
+ border: 2px solid #00ffff;
158
+ color: #00ffff;
159
+ }
160
+
161
+ .system-badge.holographic {
162
+ background: rgba(255, 100, 255, 0.2);
163
+ border: 2px solid #ff64ff;
164
+ color: #ff64ff;
165
+ }
166
+
167
+ .system-badge.polychora {
168
+ background: rgba(255, 150, 0, 0.2);
169
+ border: 2px solid #ff9600;
170
+ color: #ff9600;
171
+ }
172
+
173
+ .card-title {
174
+ font-size: 1.4rem;
175
+ font-weight: 700;
176
+ text-shadow: 0 0 15px rgba(255, 255, 255, 0.5);
177
+ }
178
+
179
+ .visualization-area {
180
+ flex: 1;
181
+ position: relative;
182
+ overflow: hidden;
183
+ }
184
+
185
+ .card-footer {
186
+ padding: 15px 20px;
187
+ background: rgba(0, 0, 0, 0.9);
188
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
189
+ display: flex;
190
+ justify-content: space-between;
191
+ align-items: center;
192
+ font-size: 0.8rem;
193
+ }
194
+
195
+ .parameters {
196
+ color: rgba(255, 255, 255, 0.8);
197
+ line-height: 1.4;
198
+ }
199
+
200
+ .signature {
201
+ color: rgba(0, 255, 255, 0.7);
202
+ font-weight: 400;
203
+ font-size: 0.7rem;
204
+ }
205
+
206
+ canvas {
207
+ position: absolute;
208
+ top: 0;
209
+ left: 0;
210
+ width: 100%;
211
+ height: 100%;
212
+ }
213
+ `;
214
+ }
215
+
216
+ /**
217
+ * Generate filename based on parameters
218
+ */
219
+ generateFilename(format, parameters) {
220
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
221
+ const geometry = this.getGeometryName(parameters);
222
+ return `vib34d-card-${this.systemName.toLowerCase()}-${geometry.toLowerCase().replace(/\s+/g, '-')}-${timestamp}.html`;
223
+ }
224
+
225
+ /**
226
+ * Format parameters for display
227
+ */
228
+ formatParameters(params) {
229
+ const key = Object.entries(params)
230
+ .filter(([key, value]) => !['system', 'hideui'].includes(key))
231
+ .slice(0, 4)
232
+ .map(([key, value]) => `${key}: ${typeof value === 'number' ? value.toFixed(1) : value}`)
233
+ .join(' • ');
234
+ return key || 'Default parameters';
235
+ }
236
+
237
+ /**
238
+ * Download the generated file
239
+ */
240
+ downloadFile(filename, content) {
241
+ const blob = new Blob([content], { type: 'text/html' });
242
+ const url = URL.createObjectURL(blob);
243
+ const a = document.createElement('a');
244
+ a.href = url;
245
+ a.download = filename;
246
+ document.body.appendChild(a);
247
+ a.click();
248
+ document.body.removeChild(a);
249
+ URL.revokeObjectURL(url);
250
+ }
251
+
252
+ // Abstract methods that each system must implement
253
+ getSystemShaders() {
254
+ throw new Error(`${this.systemName} must implement getSystemShaders()`);
255
+ }
256
+
257
+ getSystemStyles() {
258
+ throw new Error(`${this.systemName} must implement getSystemStyles()`);
259
+ }
260
+
261
+ generateSystemContent(parameters) {
262
+ throw new Error(`${this.systemName} must implement generateSystemContent()`);
263
+ }
264
+
265
+ getSystemJavaScript() {
266
+ throw new Error(`${this.systemName} must implement getSystemJavaScript()`);
267
+ }
268
+
269
+ getCardTitle(parameters) {
270
+ return `${this.systemName.toUpperCase()} ${this.getGeometryName(parameters)}`;
271
+ }
272
+
273
+ getGeometryName(parameters) {
274
+ // Default implementation - systems can override
275
+ const geometryNames = ['TETRAHEDRON', 'HYPERCUBE', 'SPHERE', 'TORUS', 'KLEIN BOTTLE', 'FRACTAL', 'WAVE', 'CRYSTAL'];
276
+ const geomIndex = parameters.geometry || parameters.geometryType || 0;
277
+ return geometryNames[geomIndex] || 'GEOMETRY';
278
+ }
279
+ }